From c590b505ed92957baf2ab4baa1788c6b0ec862cc Mon Sep 17 00:00:00 2001 From: obscuren Date: Sat, 20 Jun 2015 20:31:11 +0200 Subject: [PATCH 001/156] core, ethdb, trie: validate database errors --- common/db.go | 2 +- core/chain_manager.go | 16 +++++++++++++--- ethdb/database.go | 4 ++-- ethdb/memory_database.go | 4 +++- trie/cache.go | 8 ++++++-- 5 files changed, 25 insertions(+), 9 deletions(-) diff --git a/common/db.go b/common/db.go index c12a2cfb03..7f3becd5a3 100644 --- a/common/db.go +++ b/common/db.go @@ -2,7 +2,7 @@ package common // Database interface type Database interface { - Put(key []byte, value []byte) + Put(key []byte, value []byte) error Get(key []byte) ([]byte, error) Delete(key []byte) error Close() diff --git a/core/chain_manager.go b/core/chain_manager.go index c3b7273c26..e3795f561c 100644 --- a/core/chain_manager.go +++ b/core/chain_manager.go @@ -377,8 +377,14 @@ func (self *ChainManager) ExportN(w io.Writer, first uint64, last uint64) error // assumes that the `mu` mutex is held! func (bc *ChainManager) insert(block *types.Block) { key := append(blockNumPre, block.Number().Bytes()...) - bc.blockDb.Put(key, block.Hash().Bytes()) - bc.blockDb.Put([]byte("LastBlock"), block.Hash().Bytes()) + err := bc.blockDb.Put(key, block.Hash().Bytes()) + if err != nil { + glog.Fatal("db write fail:", err) + } + err = bc.blockDb.Put([]byte("LastBlock"), block.Hash().Bytes()) + if err != nil { + glog.Fatal("db write fail:", err) + } bc.currentBlock = block bc.lastBlockHash = block.Hash() @@ -387,7 +393,11 @@ func (bc *ChainManager) insert(block *types.Block) { func (bc *ChainManager) write(block *types.Block) { enc, _ := rlp.EncodeToBytes((*types.StorageBlock)(block)) key := append(blockHashPre, block.Hash().Bytes()...) - bc.blockDb.Put(key, enc) + err := bc.blockDb.Put(key, enc) + if err != nil { + glog.Fatal("db write fail:", err) + } + // Push block to cache bc.cache.Push(block) } diff --git a/ethdb/database.go b/ethdb/database.go index 019645cedd..5faf8c4e0d 100644 --- a/ethdb/database.go +++ b/ethdb/database.go @@ -42,8 +42,8 @@ func NewLDBDatabase(file string) (*LDBDatabase, error) { } // Put puts the given key / value to the queue -func (self *LDBDatabase) Put(key []byte, value []byte) { - self.db.Put(key, rle.Compress(value), nil) +func (self *LDBDatabase) Put(key []byte, value []byte) error { + return self.db.Put(key, rle.Compress(value), nil) } // Get returns the given key if it's present. diff --git a/ethdb/memory_database.go b/ethdb/memory_database.go index f5d5faee73..c15c56bfb1 100644 --- a/ethdb/memory_database.go +++ b/ethdb/memory_database.go @@ -19,8 +19,10 @@ func NewMemDatabase() (*MemDatabase, error) { return db, nil } -func (db *MemDatabase) Put(key []byte, value []byte) { +func (db *MemDatabase) Put(key []byte, value []byte) error { db.db[string(key)] = value + + return nil } func (db *MemDatabase) Set(key []byte, value []byte) { diff --git a/trie/cache.go b/trie/cache.go index 2143785faf..4c76c6cbaf 100644 --- a/trie/cache.go +++ b/trie/cache.go @@ -1,8 +1,10 @@ package trie +import "github.com/ethereum/go-ethereum/logger/glog" + type Backend interface { Get([]byte) ([]byte, error) - Put([]byte, []byte) + Put([]byte, []byte) error } type Cache struct { @@ -29,7 +31,9 @@ func (self *Cache) Put(key []byte, data []byte) { func (self *Cache) Flush() { for k, v := range self.store { - self.backend.Put([]byte(k), v) + if err := self.backend.Put([]byte(k), v); err != nil { + glog.Fatal("db write err:", err) + } } // This will eventually grow too large. We'd could From a40a91d60f978477fd2582487dfb5e83d4255bf4 Mon Sep 17 00:00:00 2001 From: obscuren Date: Sun, 21 Jun 2015 17:08:47 +0200 Subject: [PATCH 002/156] trie: fixed tests --- trie/trie_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/trie/trie_test.go b/trie/trie_test.go index 16311aadf0..9a58958d87 100644 --- a/trie/trie_test.go +++ b/trie/trie_test.go @@ -12,7 +12,7 @@ import ( type Db map[string][]byte func (self Db) Get(k []byte) ([]byte, error) { return self[string(k)], nil } -func (self Db) Put(k, v []byte) { self[string(k)] = v } +func (self Db) Put(k, v []byte) error { self[string(k)] = v; return nil } // Used for testing func NewEmpty() *Trie { From 07c3de3f75a579cf573fae7bf7c0ec11427dda9f Mon Sep 17 00:00:00 2001 From: obscuren Date: Sat, 20 Jun 2015 16:28:11 +0200 Subject: [PATCH 003/156] core, miner, xeth: renamed gas methods * BuyGas => SubGas * RefundGas => AddGas * SetGasPool => SetGasLimit --- core/block_processor.go | 2 +- core/chain_makers.go | 2 +- core/state/state_object.go | 19 +++---------------- core/state_transition.go | 15 ++------------- miner/worker.go | 2 +- xeth/xeth.go | 4 ++-- 6 files changed, 10 insertions(+), 34 deletions(-) diff --git a/core/block_processor.go b/core/block_processor.go index c78d419ce3..e30ced3128 100644 --- a/core/block_processor.go +++ b/core/block_processor.go @@ -58,7 +58,7 @@ func NewBlockProcessor(db, extra common.Database, pow pow.PoW, chainManager *Cha func (sm *BlockProcessor) TransitionState(statedb *state.StateDB, parent, block *types.Block, transientProcess bool) (receipts types.Receipts, err error) { coinbase := statedb.GetOrNewStateObject(block.Header().Coinbase) - coinbase.SetGasPool(block.Header().GasLimit) + coinbase.SetGasLimit(block.Header().GasLimit) // Process the transactions on to parent state receipts, err = sm.ApplyTransactions(coinbase, statedb, block, block.Transactions(), transientProcess) diff --git a/core/chain_makers.go b/core/chain_makers.go index 4e685f5997..76acfd6ca3 100644 --- a/core/chain_makers.go +++ b/core/chain_makers.go @@ -79,7 +79,7 @@ func makeBlock(bman *BlockProcessor, parent *types.Block, i int, db common.Datab block := newBlockFromParent(addr, parent) state := state.New(block.Root(), db) cbase := state.GetOrNewStateObject(addr) - cbase.SetGasPool(CalcGasLimit(parent)) + cbase.SetGasLimit(CalcGasLimit(parent)) cbase.AddBalance(BlockReward) state.Update() block.SetRoot(state.Root()) diff --git a/core/state/state_object.go b/core/state/state_object.go index 2e4fe32690..a31c182d20 100644 --- a/core/state/state_object.go +++ b/core/state/state_object.go @@ -104,7 +104,6 @@ func NewStateObjectFromBytes(address common.Address, data []byte, db common.Data } object := &StateObject{address: address, db: db} - //object.RlpDecode(data) object.nonce = extobject.Nonce object.balance = extobject.Balance object.codeHash = extobject.CodeHash @@ -215,20 +214,8 @@ func (c *StateObject) St() Storage { // Return the gas back to the origin. Used by the Virtual machine or Closures func (c *StateObject) ReturnGas(gas, price *big.Int) {} -func (c *StateObject) ConvertGas(gas, price *big.Int) error { - total := new(big.Int).Mul(gas, price) - if total.Cmp(c.balance) > 0 { - return fmt.Errorf("insufficient amount: %v, %v", c.balance, total) - } - c.SubBalance(total) - - c.dirty = true - - return nil -} - -func (self *StateObject) SetGasPool(gasLimit *big.Int) { +func (self *StateObject) SetGasLimit(gasLimit *big.Int) { self.gasPool = new(big.Int).Set(gasLimit) if glog.V(logger.Core) { @@ -236,7 +223,7 @@ func (self *StateObject) SetGasPool(gasLimit *big.Int) { } } -func (self *StateObject) BuyGas(gas, price *big.Int) error { +func (self *StateObject) SubGas(gas, price *big.Int) error { if self.gasPool.Cmp(gas) < 0 { return GasLimitError(self.gasPool, gas) } @@ -251,7 +238,7 @@ func (self *StateObject) BuyGas(gas, price *big.Int) error { return nil } -func (self *StateObject) RefundGas(gas, price *big.Int) { +func (self *StateObject) AddGas(gas, price *big.Int) { self.gasPool.Add(self.gasPool, gas) } diff --git a/core/state_transition.go b/core/state_transition.go index 4a8d92375a..915dd466bc 100644 --- a/core/state_transition.go +++ b/core/state_transition.go @@ -151,7 +151,7 @@ func (self *StateTransition) BuyGas() error { } coinbase := self.Coinbase() - err = coinbase.BuyGas(self.msg.Gas(), self.msg.GasPrice()) + err = coinbase.SubGas(self.msg.Gas(), self.msg.GasPrice()) if err != nil { return err } @@ -245,20 +245,9 @@ func (self *StateTransition) refundGas() { self.gas.Add(self.gas, refund) self.state.AddBalance(sender.Address(), refund.Mul(refund, self.msg.GasPrice())) - coinbase.RefundGas(self.gas, self.msg.GasPrice()) + coinbase.AddGas(self.gas, self.msg.GasPrice()) } func (self *StateTransition) gasUsed() *big.Int { return new(big.Int).Sub(self.initialGas, self.gas) } - -// Converts an message in to a state object -func makeContract(msg Message, state *state.StateDB) *state.StateObject { - faddr, _ := msg.From() - addr := crypto.CreateAddress(faddr, msg.Nonce()) - - contract := state.GetOrNewStateObject(addr) - contract.SetInitCode(msg.Data()) - - return contract -} diff --git a/miner/worker.go b/miner/worker.go index d339507caf..55c23376cd 100644 --- a/miner/worker.go +++ b/miner/worker.go @@ -319,7 +319,7 @@ func (self *worker) makeCurrent() { current.localMinedBlocks = self.current.localMinedBlocks } - current.coinbase.SetGasPool(core.CalcGasLimit(parent)) + current.coinbase.SetGasLimit(core.CalcGasLimit(parent)) self.current = current } diff --git a/xeth/xeth.go b/xeth/xeth.go index 7342be4a93..99e17423ad 100644 --- a/xeth/xeth.go +++ b/xeth/xeth.go @@ -212,7 +212,7 @@ func (self *XEth) ApplyTestTxs(statedb *state.StateDB, address common.Address, t block := self.backend.ChainManager().NewBlock(address) coinbase := statedb.GetStateObject(address) - coinbase.SetGasPool(big.NewInt(10000000)) + coinbase.SetGasLimit(big.NewInt(10000000)) txs := self.backend.TxPool().GetQueuedTransactions() for i := 0; i < len(txs); i++ { @@ -827,7 +827,7 @@ func (self *XEth) Call(fromStr, toStr, valueStr, gasStr, gasPriceStr, dataStr st } from.SetBalance(common.MaxBig) - from.SetGasPool(self.backend.ChainManager().GasLimit()) + from.SetGasLimit(self.backend.ChainManager().GasLimit()) msg := callmsg{ from: from, to: common.HexToAddress(toStr), From 398d08a8dd9617954c55219872a5e0eecc1ea41d Mon Sep 17 00:00:00 2001 From: obscuren Date: Sat, 20 Jun 2015 22:20:14 +0200 Subject: [PATCH 004/156] tests: SetGasLimit --- tests/state_test_util.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/state_test_util.go b/tests/state_test_util.go index e9abad7882..2f3d497bef 100644 --- a/tests/state_test_util.go +++ b/tests/state_test_util.go @@ -166,7 +166,7 @@ func RunState(statedb *state.StateDB, env, tx map[string]string) ([]byte, state. snapshot := statedb.Copy() coinbase := statedb.GetOrNewStateObject(caddr) - coinbase.SetGasPool(common.Big(env["currentGasLimit"])) + coinbase.SetGasLimit(common.Big(env["currentGasLimit"])) message := NewMessage(common.BytesToAddress(keyPair.Address()), to, data, value, gas, price, nonce) vmenv := NewEnvFromMap(statedb, env, tx) From 6fb810adaa539a2fa97cf4481588b339ab5279ae Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Mon, 22 Jun 2015 00:01:56 +0200 Subject: [PATCH 005/156] p2p: throttle all discovery lookups Lookup calls would spin out of control when network connectivity was lost. The throttling that was in place only took effect when the table returned zero results, which doesn't happen very often. The new throttling should not have a negative impact when the host is online. Lookups against the network take some time and dials for all results must complete or hit the cache before a new one is started. This usually takes longer than four seconds, leaving online lookups unaffected. Fixes #1296 --- p2p/dial.go | 30 +++++++++++++++--------------- p2p/server.go | 1 + 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/p2p/dial.go b/p2p/dial.go index 71065c5eed..b82d6d1f51 100644 --- a/p2p/dial.go +++ b/p2p/dial.go @@ -17,10 +17,9 @@ const ( // redialing a certain node. dialHistoryExpiration = 30 * time.Second - // Discovery lookup tasks will wait for this long when - // no results are returned. This can happen if the table - // becomes empty (i.e. not often). - emptyLookupDelay = 10 * time.Second + // Discovery lookups are throttled and can only run + // once every few seconds. + lookupInterval = 4 * time.Second ) // dialstate schedules dials and discovery lookups. @@ -206,18 +205,19 @@ func (t *dialTask) String() string { func (t *discoverTask) Do(srv *Server) { if t.bootstrap { srv.ntab.Bootstrap(srv.BootstrapNodes) - } else { - var target discover.NodeID - rand.Read(target[:]) - t.results = srv.ntab.Lookup(target) - // newTasks generates a lookup task whenever dynamic dials are - // necessary. Lookups need to take some time, otherwise the - // event loop spins too fast. An empty result can only be - // returned if the table is empty. - if len(t.results) == 0 { - time.Sleep(emptyLookupDelay) - } + return } + // newTasks generates a lookup task whenever dynamic dials are + // necessary. Lookups need to take some time, otherwise the + // event loop spins too fast. + next := srv.lastLookup.Add(lookupInterval) + if now := time.Now(); now.Before(next) { + time.Sleep(next.Sub(now)) + } + srv.lastLookup = time.Now() + var target discover.NodeID + rand.Read(target[:]) + t.results = srv.ntab.Lookup(target) } func (t *discoverTask) String() (s string) { diff --git a/p2p/server.go b/p2p/server.go index 59b97a0aa3..5eff70345f 100644 --- a/p2p/server.go +++ b/p2p/server.go @@ -115,6 +115,7 @@ type Server struct { ntab discoverTable listener net.Listener ourHandshake *protoHandshake + lastLookup time.Time // These are for Peers, PeerCount (and nothing else). peerOp chan peerOpFunc From 60c2ccd99cd9acdb628a9ba5e16ad0e7e52b7e17 Mon Sep 17 00:00:00 2001 From: Bas van Kervel Date: Tue, 16 Jun 2015 11:16:50 +0200 Subject: [PATCH 006/156] made ipc handler generic and reusable --- rpc/comms/comms.go | 38 ++++++++++++++++++++++++++++++++++++++ rpc/comms/ipc_unix.go | 29 +---------------------------- 2 files changed, 39 insertions(+), 28 deletions(-) diff --git a/rpc/comms/comms.go b/rpc/comms/comms.go index 244f5a7a6b..3f458adfdc 100644 --- a/rpc/comms/comms.go +++ b/rpc/comms/comms.go @@ -1,7 +1,45 @@ package comms +import ( + "io" + "net" + + "github.com/ethereum/go-ethereum/logger" + "github.com/ethereum/go-ethereum/logger/glog" + "github.com/ethereum/go-ethereum/rpc/api" + "github.com/ethereum/go-ethereum/rpc/codec" + "github.com/ethereum/go-ethereum/rpc/shared" +) + type EthereumClient interface { Close() Send(interface{}) error Recv() (interface{}, error) } + +func handle(conn net.Conn, api api.EthereumApi, c codec.Codec) { + codec := c.New(conn) + + for { + req, err := codec.ReadRequest() + if err == io.EOF { + codec.Close() + return + } else if err != nil { + glog.V(logger.Error).Infof("IPC recv err - %v\n", err) + codec.Close() + return + } + + var rpcResponse interface{} + res, err := api.Execute(req) + + rpcResponse = shared.NewRpcResponse(req.Id, req.Jsonrpc, res, err) + err = codec.WriteResponse(rpcResponse) + if err != nil { + glog.V(logger.Error).Infof("comms send err - %v\n", err) + codec.Close() + return + } + } +} diff --git a/rpc/comms/ipc_unix.go b/rpc/comms/ipc_unix.go index 5a94fd1e0f..131fb86f24 100644 --- a/rpc/comms/ipc_unix.go +++ b/rpc/comms/ipc_unix.go @@ -3,7 +3,6 @@ package comms import ( - "io" "net" "os" @@ -11,7 +10,6 @@ import ( "github.com/ethereum/go-ethereum/logger/glog" "github.com/ethereum/go-ethereum/rpc/api" "github.com/ethereum/go-ethereum/rpc/codec" - "github.com/ethereum/go-ethereum/rpc/shared" ) func newIpcClient(cfg IpcConfig, codec codec.Codec) (*ipcClient, error) { @@ -40,32 +38,7 @@ func startIpc(cfg IpcConfig, codec codec.Codec, api api.EthereumApi) error { continue } - go func(conn net.Conn) { - codec := codec.New(conn) - - for { - req, err := codec.ReadRequest() - if err == io.EOF { - codec.Close() - return - } else if err != nil { - glog.V(logger.Error).Infof("IPC recv err - %v\n", err) - codec.Close() - return - } - - var rpcResponse interface{} - res, err := api.Execute(req) - - rpcResponse = shared.NewRpcResponse(req.Id, req.Jsonrpc, res, err) - err = codec.WriteResponse(rpcResponse) - if err != nil { - glog.V(logger.Error).Infof("IPC send err - %v\n", err) - codec.Close() - return - } - } - }(conn) + go handle(conn, api, codec) } os.Remove(cfg.Endpoint) From fd764d4ff7bd7e75dfdd7f733f50dd3805d4b3f2 Mon Sep 17 00:00:00 2001 From: Bas van Kervel Date: Tue, 16 Jun 2015 13:07:13 +0200 Subject: [PATCH 007/156] added comms http --- rpc/api/mergedapi.go | 4 + rpc/comms/comms.go | 7 +- rpc/comms/http.go | 65 ++++++++++++++++ rpc/comms/http_net.go | 167 ++++++++++++++++++++++++++++++++++++++++++ rpc/shared/types.go | 12 +++ 5 files changed, 254 insertions(+), 1 deletion(-) create mode 100644 rpc/comms/http.go create mode 100644 rpc/comms/http_net.go diff --git a/rpc/api/mergedapi.go b/rpc/api/mergedapi.go index b62477a140..8cf4ae96e2 100644 --- a/rpc/api/mergedapi.go +++ b/rpc/api/mergedapi.go @@ -1,6 +1,8 @@ package api import ( + "github.com/ethereum/go-ethereum/logger" + "github.com/ethereum/go-ethereum/logger/glog" "github.com/ethereum/go-ethereum/rpc/shared" ) @@ -40,6 +42,8 @@ func (self *MergedApi) Methods() []string { // Call the correct API's Execute method for the given request func (self *MergedApi) Execute(req *shared.Request) (interface{}, error) { + glog.V(logger.Detail).Infof("rpc method: %s", req.Method) + if res, _ := self.handle(req); res != nil { return res, nil } diff --git a/rpc/comms/comms.go b/rpc/comms/comms.go index 3f458adfdc..2af63e55dc 100644 --- a/rpc/comms/comms.go +++ b/rpc/comms/comms.go @@ -11,6 +11,11 @@ import ( "github.com/ethereum/go-ethereum/rpc/shared" ) +const ( + jsonrpcver = "2.0" + maxHttpSizeReqLength = 1024 * 1024 // 1MB +) + type EthereumClient interface { Close() Send(interface{}) error @@ -26,7 +31,7 @@ func handle(conn net.Conn, api api.EthereumApi, c codec.Codec) { codec.Close() return } else if err != nil { - glog.V(logger.Error).Infof("IPC recv err - %v\n", err) + glog.V(logger.Error).Infof("comms recv err - %v\n", err) codec.Close() return } diff --git a/rpc/comms/http.go b/rpc/comms/http.go new file mode 100644 index 0000000000..1fea8dc1d4 --- /dev/null +++ b/rpc/comms/http.go @@ -0,0 +1,65 @@ +package comms + +import ( + "fmt" + "net/http" + "strings" + + "github.com/ethereum/go-ethereum/logger" + "github.com/ethereum/go-ethereum/logger/glog" + "github.com/ethereum/go-ethereum/rpc/api" + "github.com/ethereum/go-ethereum/rpc/codec" + "github.com/rs/cors" +) + +var ( + // main HTTP rpc listener + httpListener *stoppableTCPListener + listenerStoppedError = fmt.Errorf("Listener has stopped") +) + +type HttpConfig struct { + ListenAddress string + ListenPort uint + CorsDomain string +} + +func StartHttp(cfg HttpConfig, codec codec.Codec, apis ...api.EthereumApi) error { + if httpListener != nil { + if fmt.Sprintf("%s:%d", cfg.ListenAddress, cfg.ListenPort) != httpListener.Addr().String() { + return fmt.Errorf("RPC service already running on %s ", httpListener.Addr().String()) + } + return nil // RPC service already running on given host/port + } + + l, err := newStoppableTCPListener(fmt.Sprintf("%s:%d", cfg.ListenAddress, cfg.ListenPort)) + if err != nil { + glog.V(logger.Error).Infof("Can't listen on %s:%d: %v", cfg.ListenAddress, cfg.ListenPort, err) + return err + } + httpListener = l + + api := api.Merge(apis...) + var handler http.Handler + if len(cfg.CorsDomain) > 0 { + var opts cors.Options + opts.AllowedMethods = []string{"POST"} + opts.AllowedOrigins = strings.Split(cfg.CorsDomain, " ") + + c := cors.New(opts) + handler = newStoppableHandler(c.Handler(gethHttpHandler(codec, api)), l.stop) + } else { + handler = newStoppableHandler(gethHttpHandler(codec, api), l.stop) + } + + go http.Serve(l, handler) + + return nil +} + +func StopHttp() { + if httpListener != nil { + httpListener.Stop() + httpListener = nil + } +} diff --git a/rpc/comms/http_net.go b/rpc/comms/http_net.go new file mode 100644 index 0000000000..8d1bacc062 --- /dev/null +++ b/rpc/comms/http_net.go @@ -0,0 +1,167 @@ +package comms + +import ( + "encoding/json" + "fmt" + "io" + "io/ioutil" + "net" + "net/http" + "time" + + "github.com/ethereum/go-ethereum/logger" + "github.com/ethereum/go-ethereum/logger/glog" + "github.com/ethereum/go-ethereum/rpc/api" + "github.com/ethereum/go-ethereum/rpc/codec" + "github.com/ethereum/go-ethereum/rpc/shared" +) + +// When https://github.com/golang/go/issues/4674 is implemented this could be replaced +type stoppableTCPListener struct { + *net.TCPListener + stop chan struct{} // closed when the listener must stop +} + +func newStoppableTCPListener(addr string) (*stoppableTCPListener, error) { + wl, err := net.Listen("tcp", addr) + if err != nil { + return nil, err + } + + if tcpl, ok := wl.(*net.TCPListener); ok { + stop := make(chan struct{}) + return &stoppableTCPListener{tcpl, stop}, nil + } + + return nil, fmt.Errorf("Unable to create TCP listener for RPC service") +} + +// Stop the listener and all accepted and still active connections. +func (self *stoppableTCPListener) Stop() { + close(self.stop) +} + +func (self *stoppableTCPListener) Accept() (net.Conn, error) { + for { + self.SetDeadline(time.Now().Add(time.Duration(1 * time.Second))) + c, err := self.TCPListener.AcceptTCP() + + select { + case <-self.stop: + if c != nil { // accept timeout + c.Close() + } + self.TCPListener.Close() + return nil, listenerStoppedError + default: + } + + if err != nil { + if netErr, ok := err.(net.Error); ok && netErr.Timeout() && netErr.Temporary() { + continue // regular timeout + } + } + + return &closableConnection{c, self.stop}, err + } +} + +type closableConnection struct { + *net.TCPConn + closed chan struct{} +} + +func (self *closableConnection) Read(b []byte) (n int, err error) { + select { + case <-self.closed: + self.TCPConn.Close() + return 0, io.EOF + default: + return self.TCPConn.Read(b) + } +} + +// Wraps the default handler and checks if the RPC service was stopped. In that case it returns an +// error indicating that the service was stopped. This will only happen for connections which are +// kept open (HTTP keep-alive) when the RPC service was shutdown. +func newStoppableHandler(h http.Handler, stop chan struct{}) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + select { + case <-stop: + w.Header().Set("Content-Type", "application/json") + err := fmt.Errorf("RPC service stopped") + response := shared.NewRpcResponse(-1, jsonrpcver, nil, err) + httpSend(w, response) + default: + h.ServeHTTP(w, r) + } + }) +} + +func httpSend(writer io.Writer, v interface{}) (n int, err error) { + var payload []byte + payload, err = json.MarshalIndent(v, "", "\t") + if err != nil { + glog.V(logger.Error).Infoln("Error marshalling JSON", err) + return 0, err + } + glog.V(logger.Detail).Infof("Sending payload: %s", payload) + + return writer.Write(payload) +} + +func gethHttpHandler(codec codec.Codec, api api.EthereumApi) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { + w.Header().Set("Content-Type", "application/json") + + // Limit request size to resist DoS + if req.ContentLength > maxHttpSizeReqLength { + err := fmt.Errorf("Request too large") + response := shared.NewRpcErrorResponse(-1, jsonrpcver, -32700, err) + httpSend(w, &response) + return + } + + defer req.Body.Close() + payload, err := ioutil.ReadAll(req.Body) + if err != nil { + err := fmt.Errorf("Could not read request body") + response := shared.NewRpcErrorResponse(-1, jsonrpcver, -32700, err) + httpSend(w, &response) + return + } + + c := codec.New(nil) + var rpcReq shared.Request + if err = c.Decode(payload, &rpcReq); err == nil { + reply, err := api.Execute(&rpcReq) + res := shared.NewRpcResponse(rpcReq.Id, rpcReq.Jsonrpc, reply, err) + httpSend(w, &res) + return + } + + var reqBatch []shared.Request + if err = c.Decode(payload, &reqBatch); err == nil { + resBatch := make([]*interface{}, len(reqBatch)) + resCount := 0 + + for i, rpcReq := range reqBatch { + reply, err := api.Execute(&rpcReq) + if rpcReq.Id != nil { // this leaves nil entries in the response batch for later removal + resBatch[i] = shared.NewRpcResponse(rpcReq.Id, rpcReq.Jsonrpc, reply, err) + resCount += 1 + } + } + + // make response omitting nil entries + resBatch = resBatch[:resCount] + httpSend(w, resBatch) + return + } + + // invalid request + err = fmt.Errorf("Could not decode request") + res := shared.NewRpcErrorResponse(-1, jsonrpcver, -32600, err) + httpSend(w, res) + }) +} diff --git a/rpc/shared/types.go b/rpc/shared/types.go index 6a29fa88e1..dd38a45598 100644 --- a/rpc/shared/types.go +++ b/rpc/shared/types.go @@ -42,6 +42,18 @@ type ErrorObject struct { // Data interface{} `json:"data"` } +// Create RPC error response, this allows for custom error codes +func NewRpcErrorResponse(id interface{}, jsonrpcver string, errCode int, err error) *interface{} { + var response interface{} + + jsonerr := &ErrorObject{errCode, err.Error()} + response = ErrorResponse{Jsonrpc: jsonrpcver, Id: id, Error: jsonerr} + + glog.V(logger.Detail).Infof("Generated error response: %s", response) + return &response +} + +// Create RPC response func NewRpcResponse(id interface{}, jsonrpcver string, reply interface{}, err error) *interface{} { var response interface{} From 5c25403b13a698267230f859e822a7f714082198 Mon Sep 17 00:00:00 2001 From: Bas van Kervel Date: Tue, 16 Jun 2015 13:30:53 +0200 Subject: [PATCH 008/156] refactored old rpc structure to new --- cmd/geth/main.go | 1 + cmd/utils/flags.go | 19 +++++++++++++++---- rpc/api/api.go | 4 ++++ 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/cmd/geth/main.go b/cmd/geth/main.go index 89aae43e5e..43e45f6cca 100644 --- a/cmd/geth/main.go +++ b/cmd/geth/main.go @@ -239,6 +239,7 @@ JavaScript API. See https://github.com/ethereum/go-ethereum/wiki/Javascipt-Conso utils.RPCEnabledFlag, utils.RPCListenAddrFlag, utils.RPCPortFlag, + utils.RpcApiFlag, utils.IPCDisabledFlag, utils.IPCApiFlag, utils.IPCPathFlag, diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index 696dbd142b..e0eefb3e35 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -22,7 +22,6 @@ import ( "github.com/ethereum/go-ethereum/logger" "github.com/ethereum/go-ethereum/logger/glog" "github.com/ethereum/go-ethereum/p2p/nat" - "github.com/ethereum/go-ethereum/rpc" "github.com/ethereum/go-ethereum/rpc/api" "github.com/ethereum/go-ethereum/rpc/codec" "github.com/ethereum/go-ethereum/rpc/comms" @@ -209,13 +208,18 @@ var ( Usage: "Domain on which to send Access-Control-Allow-Origin header", Value: "", } + RpcApiFlag = cli.StringFlag{ + Name: "rpcapi", + Usage: "Specify the API's which are offered over the HTTP RPC interface", + Value: api.DefaultHttpRpcApis, + } IPCDisabledFlag = cli.BoolFlag{ Name: "ipcdisable", Usage: "Disable the IPC-RPC server", } IPCApiFlag = cli.StringFlag{ Name: "ipcapi", - Usage: "Specify the API's which are offered over this interface", + Usage: "Specify the API's which are offered over the IPC interface", Value: api.DefaultIpcApis, } IPCPathFlag = DirectoryFlag{ @@ -457,14 +461,21 @@ func StartIPC(eth *eth.Ethereum, ctx *cli.Context) error { } func StartRPC(eth *eth.Ethereum, ctx *cli.Context) error { - config := rpc.RpcConfig{ + config := comms.HttpConfig{ ListenAddress: ctx.GlobalString(RPCListenAddrFlag.Name), ListenPort: uint(ctx.GlobalInt(RPCPortFlag.Name)), CorsDomain: ctx.GlobalString(RPCCORSDomainFlag.Name), } xeth := xeth.New(eth, nil) - return rpc.Start(xeth, config) + codec := codec.JSON + + apis, err := api.ParseApiString(ctx.GlobalString(RpcApiFlag.Name), codec, xeth, eth) + if err != nil { + return err + } + + return comms.StartHttp(config, codec, apis...) } func StartPProf(ctx *cli.Context) { diff --git a/rpc/api/api.go b/rpc/api/api.go index e431e5c1ef..dec67fed1a 100644 --- a/rpc/api/api.go +++ b/rpc/api/api.go @@ -20,6 +20,10 @@ const ( ) var ( + DefaultHttpRpcApis = strings.Join([]string{ + EthApiName, NetApiName, Web3ApiName, + }, ",") + // List with all API's which are offered over the IPC interface by default DefaultIpcApis = strings.Join([]string{ AdminApiName, EthApiName, DebugApiName, MinerApiName, NetApiName, From c3f6c322c07a96d3930c75d05ed3859e7d80ddbc Mon Sep 17 00:00:00 2001 From: Bas van Kervel Date: Tue, 16 Jun 2015 14:59:39 +0200 Subject: [PATCH 009/156] added DB api --- rpc/api/admin.go | 6 +-- rpc/api/api.go | 5 +- rpc/api/db.go | 128 +++++++++++++++++++++++++++++++++++++++++++++ rpc/api/db_args.go | 110 ++++++++++++++++++++++++++++++++++++++ rpc/api/db_js.go | 41 +++++++++++++++ rpc/api/utils.go | 10 ++++ 6 files changed, 295 insertions(+), 5 deletions(-) create mode 100644 rpc/api/db.go create mode 100644 rpc/api/db_args.go create mode 100644 rpc/api/db_js.go diff --git a/rpc/api/admin.go b/rpc/api/admin.go index a6b9cf0502..532bdcaddb 100644 --- a/rpc/api/admin.go +++ b/rpc/api/admin.go @@ -222,10 +222,10 @@ func (self *adminApi) ChainSyncStatus(req *shared.Request) (interface{}, error) pending, cached, importing, estimate := self.ethereum.Downloader().Stats() return map[string]interface{}{ - "blocksAvailable": pending, + "blocksAvailable": pending, "blocksWaitingForImport": cached, - "importing": importing, - "estimate": estimate.String(), + "importing": importing, + "estimate": estimate.String(), }, nil } diff --git a/rpc/api/api.go b/rpc/api/api.go index dec67fed1a..7fc22a2635 100644 --- a/rpc/api/api.go +++ b/rpc/api/api.go @@ -9,6 +9,7 @@ import ( const ( AdminApiName = "admin" EthApiName = "eth" + DbApiName = "db" DebugApiName = "debug" MergedApiName = "merged" MinerApiName = "miner" @@ -21,12 +22,12 @@ const ( var ( DefaultHttpRpcApis = strings.Join([]string{ - EthApiName, NetApiName, Web3ApiName, + DbApiName, EthApiName, NetApiName, Web3ApiName, }, ",") // List with all API's which are offered over the IPC interface by default DefaultIpcApis = strings.Join([]string{ - AdminApiName, EthApiName, DebugApiName, MinerApiName, NetApiName, + AdminApiName, DbApiName, EthApiName, DebugApiName, MinerApiName, NetApiName, ShhApiName, TxPoolApiName, PersonalApiName, Web3ApiName, }, ",") ) diff --git a/rpc/api/db.go b/rpc/api/db.go new file mode 100644 index 0000000000..7452691680 --- /dev/null +++ b/rpc/api/db.go @@ -0,0 +1,128 @@ +package api + +import ( + "github.com/ethereum/go-ethereum/eth" + "github.com/ethereum/go-ethereum/rpc/codec" + "github.com/ethereum/go-ethereum/rpc/shared" + "github.com/ethereum/go-ethereum/xeth" +) + +const ( + DbApiversion = "1.0" +) + +var ( + // mapping between methods and handlers + DbMapping = map[string]dbhandler{ + "db_getString": (*dbApi).GetString, + "db_putString": (*dbApi).PutString, + "db_getHex": (*dbApi).GetHex, + "db_putHex": (*dbApi).PutHex, + } +) + +// db callback handler +type dbhandler func(*dbApi, *shared.Request) (interface{}, error) + +// db api provider +type dbApi struct { + xeth *xeth.XEth + ethereum *eth.Ethereum + methods map[string]dbhandler + codec codec.ApiCoder +} + +// create a new db api instance +func NewDbApi(xeth *xeth.XEth, ethereum *eth.Ethereum, coder codec.Codec) *dbApi { + return &dbApi{ + xeth: xeth, + ethereum: ethereum, + methods: DbMapping, + codec: coder.New(nil), + } +} + +// collection with supported methods +func (self *dbApi) Methods() []string { + methods := make([]string, len(self.methods)) + i := 0 + for k := range self.methods { + methods[i] = k + i++ + } + return methods +} + +// Execute given request +func (self *dbApi) Execute(req *shared.Request) (interface{}, error) { + if callback, ok := self.methods[req.Method]; ok { + return callback(self, req) + } + + return nil, &shared.NotImplementedError{req.Method} +} + +func (self *dbApi) Name() string { + return DbApiName +} + +func (self *dbApi) ApiVersion() string { + return DbApiversion +} + +func (self *dbApi) GetString(req *shared.Request) (interface{}, error) { + args := new(DbArgs) + if err := self.codec.Decode(req.Params, &args); err != nil { + return nil, shared.NewDecodeParamError(err.Error()) + } + + if err := args.requirements(); err != nil { + return nil, err + } + + ret, err := self.xeth.DbGet([]byte(args.Database + args.Key)) + return string(ret), err +} + +func (self *dbApi) PutString(req *shared.Request) (interface{}, error) { + args := new(DbArgs) + if err := self.codec.Decode(req.Params, &args); err != nil { + return nil, shared.NewDecodeParamError(err.Error()) + } + + if err := args.requirements(); err != nil { + return nil, err + } + + return self.xeth.DbPut([]byte(args.Database+args.Key), args.Value), nil +} + +func (self *dbApi) GetHex(req *shared.Request) (interface{}, error) { + args := new(DbHexArgs) + if err := self.codec.Decode(req.Params, &args); err != nil { + return nil, shared.NewDecodeParamError(err.Error()) + } + + if err := args.requirements(); err != nil { + return nil, err + } + + if res, err := self.xeth.DbGet([]byte(args.Database + args.Key)); err == nil { + return newHexData(res), nil + } else { + return nil, err + } +} + +func (self *dbApi) PutHex(req *shared.Request) (interface{}, error) { + args := new(DbHexArgs) + if err := self.codec.Decode(req.Params, &args); err != nil { + return nil, shared.NewDecodeParamError(err.Error()) + } + + if err := args.requirements(); err != nil { + return nil, err + } + + return self.xeth.DbPut([]byte(args.Database+args.Key), args.Value), nil +} diff --git a/rpc/api/db_args.go b/rpc/api/db_args.go new file mode 100644 index 0000000000..459616d871 --- /dev/null +++ b/rpc/api/db_args.go @@ -0,0 +1,110 @@ +package api + +import ( + "encoding/json" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/rpc/shared" +) + +type DbArgs struct { + Database string + Key string + Value []byte +} + +func (args *DbArgs) UnmarshalJSON(b []byte) (err error) { + var obj []interface{} + if err := json.Unmarshal(b, &obj); err != nil { + return shared.NewDecodeParamError(err.Error()) + } + + if len(obj) < 2 { + return shared.NewInsufficientParamsError(len(obj), 2) + } + + var objstr string + var ok bool + + if objstr, ok = obj[0].(string); !ok { + return shared.NewInvalidTypeError("database", "not a string") + } + args.Database = objstr + + if objstr, ok = obj[1].(string); !ok { + return shared.NewInvalidTypeError("key", "not a string") + } + args.Key = objstr + + if len(obj) > 2 { + objstr, ok = obj[2].(string) + if !ok { + return shared.NewInvalidTypeError("value", "not a string") + } + + args.Value = []byte(objstr) + } + + return nil +} + +func (a *DbArgs) requirements() error { + if len(a.Database) == 0 { + return shared.NewValidationError("Database", "cannot be blank") + } + if len(a.Key) == 0 { + return shared.NewValidationError("Key", "cannot be blank") + } + return nil +} + +type DbHexArgs struct { + Database string + Key string + Value []byte +} + +func (args *DbHexArgs) UnmarshalJSON(b []byte) (err error) { + var obj []interface{} + if err := json.Unmarshal(b, &obj); err != nil { + return shared.NewDecodeParamError(err.Error()) + } + + if len(obj) < 2 { + return shared.NewInsufficientParamsError(len(obj), 2) + } + + var objstr string + var ok bool + + if objstr, ok = obj[0].(string); !ok { + return shared.NewInvalidTypeError("database", "not a string") + } + args.Database = objstr + + if objstr, ok = obj[1].(string); !ok { + return shared.NewInvalidTypeError("key", "not a string") + } + args.Key = objstr + + if len(obj) > 2 { + objstr, ok = obj[2].(string) + if !ok { + return shared.NewInvalidTypeError("value", "not a string") + } + + args.Value = common.FromHex(objstr) + } + + return nil +} + +func (a *DbHexArgs) requirements() error { + if len(a.Database) == 0 { + return shared.NewValidationError("Database", "cannot be blank") + } + if len(a.Key) == 0 { + return shared.NewValidationError("Key", "cannot be blank") + } + return nil +} diff --git a/rpc/api/db_js.go b/rpc/api/db_js.go new file mode 100644 index 0000000000..62cdcd20ee --- /dev/null +++ b/rpc/api/db_js.go @@ -0,0 +1,41 @@ +package api + +const Db_JS = ` +web3._extend({ + property: 'db', + methods: + [ + new web3._extend.Method({ + name: 'getString', + call: 'db_getString', + params: 2, + inputFormatter: [web3._extend.formatters.formatInputString, web3._extend.formatters.formatInputString], + outputFormatter: web3._extend.formatters.formatOutputString + }), + new web3._extend.Method({ + name: 'putString', + call: 'db_putString', + params: 3, + inputFormatter: [web3._extend.formatters.formatInputString, web3._extend.formatters.formatInputString, web3._extend.formatters.formatInputString], + outputFormatter: web3._extend.formatters.formatOutputBool + }), + new web3._extend.Method({ + name: 'getHex', + call: 'db_getHex', + params: 2, + inputFormatter: [web3._extend.formatters.formatInputString, web3._extend.formatters.formatInputString], + outputFormatter: web3._extend.formatters.formatOutputString + }), + new web3._extend.Method({ + name: 'putHex', + call: 'db_putHex', + params: 3, + inputFormatter: [web3._extend.formatters.formatInputString, web3._extend.formatters.formatInputString, web3._extend.formatters.formatInputString], + outputFormatter: web3._extend.formatters.formatOutputBool + }), + ], + properties: + [ + ] +}); +` diff --git a/rpc/api/utils.go b/rpc/api/utils.go index 40bcae52f9..a4ce6409a0 100644 --- a/rpc/api/utils.go +++ b/rpc/api/utils.go @@ -24,6 +24,12 @@ var ( "setSolc", "datadir", }, + "db": []string{ + "getString", + "putString", + "getHex", + "putHex", + }, "debug": []string{ "dumpBlock", "getBlockRlp", @@ -137,6 +143,8 @@ func ParseApiString(apistr string, codec codec.Codec, xeth *xeth.XEth, eth *eth. apis[i] = NewAdminApi(xeth, eth, codec) case DebugApiName: apis[i] = NewDebugApi(xeth, eth, codec) + case DbApiName: + apis[i] = NewDbApi(xeth, eth, codec) case EthApiName: apis[i] = NewEthApi(xeth, codec) case MinerApiName: @@ -165,6 +173,8 @@ func Javascript(name string) string { return Admin_JS case DebugApiName: return Debug_JS + case DbApiName: + return Db_JS case MinerApiName: return Miner_JS case NetApiName: From 5fdf72b1abba65bcaed116791b6b8b70edb17e49 Mon Sep 17 00:00:00 2001 From: Bas van Kervel Date: Tue, 16 Jun 2015 15:16:06 +0200 Subject: [PATCH 010/156] fixed web3 rpc test failures --- rpc/api/web3_args.go | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/rpc/api/web3_args.go b/rpc/api/web3_args.go index 5455a6c8e5..38af7191e3 100644 --- a/rpc/api/web3_args.go +++ b/rpc/api/web3_args.go @@ -1,5 +1,29 @@ package api +import ( + "encoding/json" + + "github.com/ethereum/go-ethereum/rpc/shared" +) + type Sha3Args struct { Data string } + +func (args *Sha3Args) UnmarshalJSON(b []byte) (err error) { + var obj []interface{} + if err := json.Unmarshal(b, &obj); err != nil { + return shared.NewDecodeParamError(err.Error()) + } + + if len(obj) < 1 { + return shared.NewInsufficientParamsError(len(obj), 1) + } + + argstr, ok := obj[0].(string) + if !ok { + return shared.NewInvalidTypeError("data", "is not a string") + } + args.Data = argstr + return nil +} From 9ac1b4e59e3abc2742491f39f4f93bc459846098 Mon Sep 17 00:00:00 2001 From: Bas van Kervel Date: Tue, 16 Jun 2015 15:37:25 +0200 Subject: [PATCH 011/156] fixed rpc test failure in net_peerCount --- rpc/api/net.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rpc/api/net.go b/rpc/api/net.go index d6888ee4a2..247c23827b 100644 --- a/rpc/api/net.go +++ b/rpc/api/net.go @@ -77,7 +77,7 @@ func (self *netApi) Version(req *shared.Request) (interface{}, error) { // Number of connected peers func (self *netApi) PeerCount(req *shared.Request) (interface{}, error) { - return self.xeth.PeerCount(), nil + return newHexNum(self.xeth.PeerCount()), nil } func (self *netApi) IsListening(req *shared.Request) (interface{}, error) { From 3e1d635f8d40815ef2262e017a969ed6f5eb2a5d Mon Sep 17 00:00:00 2001 From: Bas van Kervel Date: Tue, 16 Jun 2015 15:40:24 +0200 Subject: [PATCH 012/156] fixed rpc test failure in eth.blockNumber --- rpc/api/eth.go | 88 ++++++++++++++++++++++++++------------------------ 1 file changed, 45 insertions(+), 43 deletions(-) diff --git a/rpc/api/eth.go b/rpc/api/eth.go index cb678922ba..91577c4d55 100644 --- a/rpc/api/eth.go +++ b/rpc/api/eth.go @@ -28,48 +28,49 @@ type ethhandler func(*ethApi, *shared.Request) (interface{}, error) var ( ethMapping = map[string]ethhandler{ - "eth_accounts": (*ethApi).Accounts, - "eth_blockNumber": (*ethApi).BlockNumber, - "eth_getBalance": (*ethApi).GetBalance, - "eth_protocolVersion": (*ethApi).ProtocolVersion, - "eth_coinbase": (*ethApi).Coinbase, - "eth_mining": (*ethApi).IsMining, - "eth_gasPrice": (*ethApi).GasPrice, - "eth_getStorage": (*ethApi).GetStorage, - "eth_storageAt": (*ethApi).GetStorage, - "eth_getStorageAt": (*ethApi).GetStorageAt, - "eth_getTransactionCount": (*ethApi).GetTransactionCount, - "eth_getBlockTransactionCountByHash": (*ethApi).GetBlockTransactionCountByHash, - "eth_getBlockTransactionCountByNumber": (*ethApi).GetBlockTransactionCountByNumber, - "eth_getUncleCountByBlockHash": (*ethApi).GetUncleCountByBlockHash, - "eth_getUncleCountByBlockNumber": (*ethApi).GetUncleCountByBlockNumber, - "eth_getData": (*ethApi).GetData, - "eth_getCode": (*ethApi).GetData, - "eth_sign": (*ethApi).Sign, - "eth_sendRawTransaction": (*ethApi).PushTx, - "eth_sendTransaction": (*ethApi).SendTransaction, - "eth_transact": (*ethApi).SendTransaction, - "eth_estimateGas": (*ethApi).EstimateGas, - "eth_call": (*ethApi).Call, - "eth_flush": (*ethApi).Flush, - "eth_getBlockByHash": (*ethApi).GetBlockByHash, - "eth_getBlockByNumber": (*ethApi).GetBlockByNumber, - "eth_getTransactionByHash": (*ethApi).GetTransactionByHash, - "eth_getTransactionByBlockHashAndIndex": (*ethApi).GetTransactionByBlockHashAndIndex, - "eth_getUncleByBlockHashAndIndex": (*ethApi).GetUncleByBlockHashAndIndex, - "eth_getUncleByBlockNumberAndIndex": (*ethApi).GetUncleByBlockNumberAndIndex, - "eth_getCompilers": (*ethApi).GetCompilers, - "eth_compileSolidity": (*ethApi).CompileSolidity, - "eth_newFilter": (*ethApi).NewFilter, - "eth_newBlockFilter": (*ethApi).NewBlockFilter, - "eth_newPendingTransactionFilter": (*ethApi).NewPendingTransactionFilter, - "eth_uninstallFilter": (*ethApi).UninstallFilter, - "eth_getFilterChanges": (*ethApi).GetFilterChanges, - "eth_getFilterLogs": (*ethApi).GetFilterLogs, - "eth_getLogs": (*ethApi).GetLogs, - "eth_hashrate": (*ethApi).Hashrate, - "eth_getWork": (*ethApi).GetWork, - "eth_submitWork": (*ethApi).SubmitWork, + "eth_accounts": (*ethApi).Accounts, + "eth_blockNumber": (*ethApi).BlockNumber, + "eth_getBalance": (*ethApi).GetBalance, + "eth_protocolVersion": (*ethApi).ProtocolVersion, + "eth_coinbase": (*ethApi).Coinbase, + "eth_mining": (*ethApi).IsMining, + "eth_gasPrice": (*ethApi).GasPrice, + "eth_getStorage": (*ethApi).GetStorage, + "eth_storageAt": (*ethApi).GetStorage, + "eth_getStorageAt": (*ethApi).GetStorageAt, + "eth_getTransactionCount": (*ethApi).GetTransactionCount, + "eth_getBlockTransactionCountByHash": (*ethApi).GetBlockTransactionCountByHash, + "eth_getBlockTransactionCountByNumber": (*ethApi).GetBlockTransactionCountByNumber, + "eth_getUncleCountByBlockHash": (*ethApi).GetUncleCountByBlockHash, + "eth_getUncleCountByBlockNumber": (*ethApi).GetUncleCountByBlockNumber, + "eth_getData": (*ethApi).GetData, + "eth_getCode": (*ethApi).GetData, + "eth_sign": (*ethApi).Sign, + "eth_sendRawTransaction": (*ethApi).PushTx, + "eth_sendTransaction": (*ethApi).SendTransaction, + "eth_transact": (*ethApi).SendTransaction, + "eth_estimateGas": (*ethApi).EstimateGas, + "eth_call": (*ethApi).Call, + "eth_flush": (*ethApi).Flush, + "eth_getBlockByHash": (*ethApi).GetBlockByHash, + "eth_getBlockByNumber": (*ethApi).GetBlockByNumber, + "eth_getTransactionByHash": (*ethApi).GetTransactionByHash, + "eth_getTransactionByBlockNumberAndIndex": (*ethApi).GetTransactionByBlockNumberAndIndex, + "eth_getTransactionByBlockHashAndIndex": (*ethApi).GetTransactionByBlockHashAndIndex, + "eth_getUncleByBlockHashAndIndex": (*ethApi).GetUncleByBlockHashAndIndex, + "eth_getUncleByBlockNumberAndIndex": (*ethApi).GetUncleByBlockNumberAndIndex, + "eth_getCompilers": (*ethApi).GetCompilers, + "eth_compileSolidity": (*ethApi).CompileSolidity, + "eth_newFilter": (*ethApi).NewFilter, + "eth_newBlockFilter": (*ethApi).NewBlockFilter, + "eth_newPendingTransactionFilter": (*ethApi).NewPendingTransactionFilter, + "eth_uninstallFilter": (*ethApi).UninstallFilter, + "eth_getFilterChanges": (*ethApi).GetFilterChanges, + "eth_getFilterLogs": (*ethApi).GetFilterLogs, + "eth_getLogs": (*ethApi).GetLogs, + "eth_hashrate": (*ethApi).Hashrate, + "eth_getWork": (*ethApi).GetWork, + "eth_submitWork": (*ethApi).SubmitWork, } ) @@ -115,7 +116,8 @@ func (self *ethApi) Hashrate(req *shared.Request) (interface{}, error) { } func (self *ethApi) BlockNumber(req *shared.Request) (interface{}, error) { - return self.xeth.CurrentBlock().Number(), nil + num := self.xeth.CurrentBlock().Number() + return newHexNum(num.Bytes()), nil } func (self *ethApi) GetBalance(req *shared.Request) (interface{}, error) { From a4a4e9fcf824189d8d06940492a01effe6e6cf92 Mon Sep 17 00:00:00 2001 From: Bas van Kervel Date: Wed, 17 Jun 2015 16:22:35 +0200 Subject: [PATCH 013/156] removed old rpc structure and added new inproc api client --- cmd/geth/admin.go | 937 --------------------------- cmd/geth/js.go | 189 +++++- cmd/geth/main.go | 9 +- cmd/utils/flags.go | 4 +- core/transaction_pool.go | 2 +- rpc/api.go | 646 ------------------- rpc/api/api.go | 10 +- rpc/api/args.go | 57 ++ rpc/{ => api}/args_test.go | 11 +- rpc/api_test.go | 205 ------ rpc/args.go | 1230 ------------------------------------ rpc/comms/comms.go | 18 +- rpc/comms/http.go | 24 + rpc/comms/http_net.go | 14 +- rpc/comms/inproc.go | 53 ++ rpc/comms/ipc.go | 8 +- rpc/http.go | 163 ----- rpc/jeth.go | 44 +- rpc/responses.go | 316 --------- rpc/responses_test.go | 295 --------- rpc/types.go | 381 ----------- rpc/types_test.go | 204 ------ 22 files changed, 393 insertions(+), 4427 deletions(-) delete mode 100644 cmd/geth/admin.go delete mode 100644 rpc/api.go create mode 100644 rpc/api/args.go rename rpc/{ => api}/args_test.go (99%) delete mode 100644 rpc/api_test.go delete mode 100644 rpc/args.go create mode 100644 rpc/comms/inproc.go delete mode 100644 rpc/http.go delete mode 100644 rpc/responses.go delete mode 100644 rpc/responses_test.go delete mode 100644 rpc/types.go delete mode 100644 rpc/types_test.go diff --git a/cmd/geth/admin.go b/cmd/geth/admin.go deleted file mode 100644 index 33ef697929..0000000000 --- a/cmd/geth/admin.go +++ /dev/null @@ -1,937 +0,0 @@ -package main - -import ( - "encoding/json" - "errors" - "fmt" - "math/big" - "strconv" - "time" - - "github.com/ethereum/ethash" - "github.com/ethereum/go-ethereum/accounts" - "github.com/ethereum/go-ethereum/cmd/utils" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/common/compiler" - "github.com/ethereum/go-ethereum/common/natspec" - "github.com/ethereum/go-ethereum/common/resolver" - "github.com/ethereum/go-ethereum/core/state" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/core/vm" - "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/logger/glog" - "github.com/ethereum/go-ethereum/rlp" - "github.com/ethereum/go-ethereum/rpc" - "github.com/ethereum/go-ethereum/xeth" - "github.com/robertkrimen/otto" - "gopkg.in/fatih/set.v0" -) - -/* -node admin bindings -*/ - -func (js *jsre) adminBindings() { - ethO, _ := js.re.Get("eth") - eth := ethO.Object() - eth.Set("pendingTransactions", js.pendingTransactions) - eth.Set("resend", js.resend) - eth.Set("sign", js.sign) - - js.re.Set("admin", struct{}{}) - t, _ := js.re.Get("admin") - admin := t.Object() - admin.Set("addPeer", js.addPeer) - admin.Set("startRPC", js.startRPC) - admin.Set("stopRPC", js.stopRPC) - admin.Set("nodeInfo", js.nodeInfo) - admin.Set("peers", js.peers) - admin.Set("newAccount", js.newAccount) - admin.Set("unlock", js.unlock) - admin.Set("import", js.importChain) - admin.Set("export", js.exportChain) - admin.Set("verbosity", js.verbosity) - admin.Set("progress", js.syncProgress) - admin.Set("setSolc", js.setSolc) - - admin.Set("contractInfo", struct{}{}) - t, _ = admin.Get("contractInfo") - cinfo := t.Object() - // newRegistry officially not documented temporary option - cinfo.Set("start", js.startNatSpec) - cinfo.Set("stop", js.stopNatSpec) - cinfo.Set("newRegistry", js.newRegistry) - cinfo.Set("get", js.getContractInfo) - cinfo.Set("register", js.register) - cinfo.Set("registerUrl", js.registerUrl) - // cinfo.Set("verify", js.verify) - - admin.Set("miner", struct{}{}) - t, _ = admin.Get("miner") - miner := t.Object() - miner.Set("start", js.startMining) - miner.Set("stop", js.stopMining) - miner.Set("hashrate", js.hashrate) - miner.Set("setExtra", js.setExtra) - miner.Set("setGasPrice", js.setGasPrice) - miner.Set("startAutoDAG", js.startAutoDAG) - miner.Set("stopAutoDAG", js.stopAutoDAG) - miner.Set("makeDAG", js.makeDAG) - - admin.Set("txPool", struct{}{}) - t, _ = admin.Get("txPool") - txPool := t.Object() - txPool.Set("pending", js.allPendingTransactions) - txPool.Set("queued", js.allQueuedTransactions) - - admin.Set("debug", struct{}{}) - t, _ = admin.Get("debug") - debug := t.Object() - js.re.Set("sleep", js.sleep) - debug.Set("backtrace", js.backtrace) - debug.Set("printBlock", js.printBlock) - debug.Set("dumpBlock", js.dumpBlock) - debug.Set("getBlockRlp", js.getBlockRlp) - debug.Set("setHead", js.setHead) - debug.Set("processBlock", js.debugBlock) - debug.Set("seedhash", js.seedHash) - debug.Set("insertBlock", js.insertBlockRlp) - // undocumented temporary - debug.Set("waitForBlocks", js.waitForBlocks) -} - -// generic helper to getBlock by Number/Height or Hex depending on autodetected input -// if argument is missing the current block is returned -// if block is not found or there is problem with decoding -// the appropriate value is returned and block is guaranteed to be nil -func (js *jsre) getBlock(call otto.FunctionCall) (*types.Block, error) { - var block *types.Block - if len(call.ArgumentList) > 0 { - if call.Argument(0).IsNumber() { - num, _ := call.Argument(0).ToInteger() - block = js.ethereum.ChainManager().GetBlockByNumber(uint64(num)) - } else if call.Argument(0).IsString() { - hash, _ := call.Argument(0).ToString() - block = js.ethereum.ChainManager().GetBlock(common.HexToHash(hash)) - } else { - return nil, errors.New("invalid argument for dump. Either hex string or number") - } - } else { - block = js.ethereum.ChainManager().CurrentBlock() - } - - if block == nil { - return nil, errors.New("block not found") - } - return block, nil -} - -func (js *jsre) seedHash(call otto.FunctionCall) otto.Value { - if len(call.ArgumentList) > 0 { - if call.Argument(0).IsNumber() { - num, _ := call.Argument(0).ToInteger() - hash, err := ethash.GetSeedHash(uint64(num)) - if err != nil { - fmt.Println(err) - return otto.UndefinedValue() - } - v, _ := call.Otto.ToValue(fmt.Sprintf("0x%x", hash)) - return v - } else { - fmt.Println("arg not a number") - } - } else { - fmt.Println("requires number argument") - } - - return otto.UndefinedValue() -} - -func (js *jsre) allPendingTransactions(call otto.FunctionCall) otto.Value { - txs := js.ethereum.TxPool().GetTransactions() - - ltxs := make([]*tx, len(txs)) - for i, tx := range txs { - // no need to check err - ltxs[i] = newTx(tx) - } - - v, _ := call.Otto.ToValue(ltxs) - return v -} - -func (js *jsre) allQueuedTransactions(call otto.FunctionCall) otto.Value { - txs := js.ethereum.TxPool().GetQueuedTransactions() - - ltxs := make([]*tx, len(txs)) - for i, tx := range txs { - // no need to check err - ltxs[i] = newTx(tx) - } - - v, _ := call.Otto.ToValue(ltxs) - return v -} - -func (js *jsre) pendingTransactions(call otto.FunctionCall) otto.Value { - txs := js.ethereum.TxPool().GetTransactions() - - // grab the accounts from the account manager. This will help with determening which - // transactions should be returned. - accounts, err := js.ethereum.AccountManager().Accounts() - if err != nil { - fmt.Println(err) - return otto.UndefinedValue() - } - - // Add the accouns to a new set - accountSet := set.New() - for _, account := range accounts { - accountSet.Add(account.Address) - } - - //ltxs := make([]*tx, len(txs)) - var ltxs []*tx - for _, tx := range txs { - if from, _ := tx.From(); accountSet.Has(from) { - ltxs = append(ltxs, newTx(tx)) - } - } - - v, _ := call.Otto.ToValue(ltxs) - return v -} - -func (js *jsre) resend(call otto.FunctionCall) otto.Value { - if len(call.ArgumentList) == 0 { - fmt.Println("first argument must be a transaction") - return otto.FalseValue() - } - - v, err := call.Argument(0).Export() - if err != nil { - fmt.Println(err) - return otto.FalseValue() - } - - if tx, ok := v.(*tx); ok { - gl, gp := tx.GasLimit, tx.GasPrice - if len(call.ArgumentList) > 1 { - gp = call.Argument(1).String() - } - if len(call.ArgumentList) > 2 { - gl = call.Argument(2).String() - } - - ret, err := js.xeth.Transact(tx.From, tx.To, tx.Nonce, tx.Value, gl, gp, tx.Data) - if err != nil { - fmt.Println(err) - return otto.FalseValue() - } - js.ethereum.TxPool().RemoveTransactions(types.Transactions{tx.tx}) - - v, _ := call.Otto.ToValue(ret) - return v - } - - fmt.Println("first argument must be a transaction") - return otto.FalseValue() -} - -func (js *jsre) sign(call otto.FunctionCall) otto.Value { - if len(call.ArgumentList) != 2 { - fmt.Println("requires 2 arguments: eth.sign(signer, data)") - return otto.UndefinedValue() - } - signer, err := call.Argument(0).ToString() - if err != nil { - fmt.Println(err) - return otto.UndefinedValue() - } - - data, err := call.Argument(1).ToString() - if err != nil { - fmt.Println(err) - return otto.UndefinedValue() - } - signed, err := js.xeth.Sign(signer, data, false) - if err != nil { - fmt.Println(err) - return otto.UndefinedValue() - } - v, _ := call.Otto.ToValue(signed) - return v -} - -func (js *jsre) debugBlock(call otto.FunctionCall) otto.Value { - block, err := js.getBlock(call) - if err != nil { - fmt.Println(err) - return otto.UndefinedValue() - } - - tstart := time.Now() - old := vm.Debug - - if len(call.ArgumentList) > 1 { - vm.Debug, _ = call.Argument(1).ToBoolean() - } - - _, err = js.ethereum.BlockProcessor().RetryProcess(block) - if err != nil { - fmt.Println(err) - r, _ := call.Otto.ToValue(map[string]interface{}{"success": false, "time": time.Since(tstart).Seconds()}) - return r - } - vm.Debug = old - - r, _ := call.Otto.ToValue(map[string]interface{}{"success": true, "time": time.Since(tstart).Seconds()}) - return r -} - -func (js *jsre) insertBlockRlp(call otto.FunctionCall) otto.Value { - tstart := time.Now() - - var block types.Block - if call.Argument(0).IsString() { - blockRlp, _ := call.Argument(0).ToString() - err := rlp.DecodeBytes(common.Hex2Bytes(blockRlp), &block) - if err != nil { - fmt.Println(err) - return otto.UndefinedValue() - } - } - - old := vm.Debug - vm.Debug = true - _, err := js.ethereum.BlockProcessor().RetryProcess(&block) - if err != nil { - fmt.Println(err) - r, _ := call.Otto.ToValue(map[string]interface{}{"success": false, "time": time.Since(tstart).Seconds()}) - return r - } - vm.Debug = old - - r, _ := call.Otto.ToValue(map[string]interface{}{"success": true, "time": time.Since(tstart).Seconds()}) - return r -} - -func (js *jsre) setHead(call otto.FunctionCall) otto.Value { - block, err := js.getBlock(call) - if err != nil { - fmt.Println(err) - return otto.UndefinedValue() - } - - js.ethereum.ChainManager().SetHead(block) - return otto.UndefinedValue() -} - -func (js *jsre) syncProgress(call otto.FunctionCall) otto.Value { - pending, cached, importing, eta := js.ethereum.Downloader().Stats() - v, _ := call.Otto.ToValue(map[string]interface{}{ - "pending": pending, - "cached": cached, - "importing": importing, - "estimate": (eta / time.Second * time.Second).String(), - }) - return v -} - -func (js *jsre) getBlockRlp(call otto.FunctionCall) otto.Value { - block, err := js.getBlock(call) - if err != nil { - fmt.Println(err) - return otto.UndefinedValue() - } - encoded, _ := rlp.EncodeToBytes(block) - v, _ := call.Otto.ToValue(fmt.Sprintf("%x", encoded)) - return v -} - -func (js *jsre) setExtra(call otto.FunctionCall) otto.Value { - extra, err := call.Argument(0).ToString() - if err != nil { - fmt.Println(err) - return otto.UndefinedValue() - } - - if len(extra) > 1024 { - fmt.Println("error: cannot exceed 1024 bytes") - return otto.UndefinedValue() - } - - js.ethereum.Miner().SetExtra([]byte(extra)) - return otto.UndefinedValue() -} - -func (js *jsre) setGasPrice(call otto.FunctionCall) otto.Value { - gasPrice, err := call.Argument(0).ToString() - if err != nil { - fmt.Println(err) - return otto.UndefinedValue() - } - - js.ethereum.Miner().SetGasPrice(common.String2Big(gasPrice)) - return otto.UndefinedValue() -} - -func (js *jsre) hashrate(call otto.FunctionCall) otto.Value { - v, _ := call.Otto.ToValue(js.ethereum.Miner().HashRate()) - return v -} - -func (js *jsre) makeDAG(call otto.FunctionCall) otto.Value { - blockNumber, err := call.Argument(1).ToInteger() - if err != nil { - fmt.Println(err) - return otto.FalseValue() - } - - err = ethash.MakeDAG(uint64(blockNumber), "") - if err != nil { - return otto.FalseValue() - } - return otto.TrueValue() -} - -func (js *jsre) startAutoDAG(otto.FunctionCall) otto.Value { - js.ethereum.StartAutoDAG() - return otto.TrueValue() -} - -func (js *jsre) stopAutoDAG(otto.FunctionCall) otto.Value { - js.ethereum.StopAutoDAG() - return otto.TrueValue() -} - -func (js *jsre) backtrace(call otto.FunctionCall) otto.Value { - tracestr, err := call.Argument(0).ToString() - if err != nil { - fmt.Println(err) - return otto.UndefinedValue() - } - glog.GetTraceLocation().Set(tracestr) - - return otto.UndefinedValue() -} - -func (js *jsre) verbosity(call otto.FunctionCall) otto.Value { - v, err := call.Argument(0).ToInteger() - if err != nil { - fmt.Println(err) - return otto.UndefinedValue() - } - - glog.SetV(int(v)) - return otto.UndefinedValue() -} - -func (js *jsre) startMining(call otto.FunctionCall) otto.Value { - var ( - threads int64 - err error - ) - - if len(call.ArgumentList) > 0 { - threads, err = call.Argument(0).ToInteger() - if err != nil { - fmt.Println(err) - return otto.FalseValue() - } - } else { - threads = int64(js.ethereum.MinerThreads) - } - - // switch on DAG autogeneration when miner starts - js.ethereum.StartAutoDAG() - - err = js.ethereum.StartMining(int(threads)) - if err != nil { - fmt.Println(err) - return otto.FalseValue() - } - - return otto.TrueValue() -} - -func (js *jsre) stopMining(call otto.FunctionCall) otto.Value { - js.ethereum.StopMining() - js.ethereum.StopAutoDAG() - return otto.TrueValue() -} - -func (js *jsre) startRPC(call otto.FunctionCall) otto.Value { - addr, err := call.Argument(0).ToString() - if err != nil { - fmt.Println(err) - return otto.FalseValue() - } - - port, err := call.Argument(1).ToInteger() - if err != nil { - fmt.Println(err) - return otto.FalseValue() - } - - corsDomain := js.corsDomain - if len(call.ArgumentList) > 2 { - corsDomain, err = call.Argument(2).ToString() - if err != nil { - fmt.Println(err) - return otto.FalseValue() - } - } - - config := rpc.RpcConfig{ - ListenAddress: addr, - ListenPort: uint(port), - CorsDomain: corsDomain, - } - - xeth := xeth.New(js.ethereum, nil) - err = rpc.Start(xeth, config) - if err != nil { - fmt.Println(err) - return otto.FalseValue() - } - - return otto.TrueValue() -} - -func (js *jsre) stopRPC(call otto.FunctionCall) otto.Value { - if rpc.Stop() == nil { - return otto.TrueValue() - } - return otto.FalseValue() -} - -func (js *jsre) addPeer(call otto.FunctionCall) otto.Value { - nodeURL, err := call.Argument(0).ToString() - if err != nil { - fmt.Println(err) - return otto.FalseValue() - } - err = js.ethereum.AddPeer(nodeURL) - if err != nil { - fmt.Println(err) - return otto.FalseValue() - } - return otto.TrueValue() -} - -func (js *jsre) unlock(call otto.FunctionCall) otto.Value { - addr, err := call.Argument(0).ToString() - if err != nil { - fmt.Println(err) - return otto.FalseValue() - } - seconds, err := call.Argument(2).ToInteger() - if err != nil { - fmt.Println(err) - return otto.FalseValue() - } - if seconds == 0 { - seconds = accounts.DefaultAccountUnlockDuration - } - - arg := call.Argument(1) - var passphrase string - if arg.IsUndefined() { - fmt.Println("Please enter a passphrase now.") - passphrase, err = utils.PromptPassword("Passphrase: ", true) - if err != nil { - fmt.Println(err) - return otto.FalseValue() - } - } else { - passphrase, err = arg.ToString() - if err != nil { - fmt.Println(err) - return otto.FalseValue() - } - } - am := js.ethereum.AccountManager() - err = am.TimedUnlock(common.HexToAddress(addr), passphrase, time.Duration(seconds)*time.Second) - if err != nil { - fmt.Printf("Unlock account failed '%v'\n", err) - return otto.FalseValue() - } - return otto.TrueValue() -} - -func (js *jsre) newAccount(call otto.FunctionCall) otto.Value { - arg := call.Argument(0) - var passphrase string - if arg.IsUndefined() { - fmt.Println("The new account will be encrypted with a passphrase.") - fmt.Println("Please enter a passphrase now.") - auth, err := utils.PromptPassword("Passphrase: ", true) - if err != nil { - fmt.Println(err) - return otto.FalseValue() - } - confirm, err := utils.PromptPassword("Repeat Passphrase: ", false) - if err != nil { - fmt.Println(err) - return otto.FalseValue() - } - if auth != confirm { - fmt.Println("Passphrases did not match.") - return otto.FalseValue() - } - passphrase = auth - } else { - var err error - passphrase, err = arg.ToString() - if err != nil { - fmt.Println(err) - return otto.FalseValue() - } - } - acct, err := js.ethereum.AccountManager().NewAccount(passphrase) - if err != nil { - fmt.Printf("Could not create the account: %v", err) - return otto.UndefinedValue() - } - v, _ := call.Otto.ToValue(acct.Address.Hex()) - return v -} - -func (js *jsre) nodeInfo(call otto.FunctionCall) otto.Value { - v, _ := call.Otto.ToValue(js.ethereum.NodeInfo()) - return v -} - -func (js *jsre) peers(call otto.FunctionCall) otto.Value { - v, _ := call.Otto.ToValue(js.ethereum.PeersInfo()) - return v -} - -func (js *jsre) importChain(call otto.FunctionCall) otto.Value { - if len(call.ArgumentList) == 0 { - fmt.Println("require file name. admin.importChain(filename)") - return otto.FalseValue() - } - fn, err := call.Argument(0).ToString() - if err != nil { - fmt.Println(err) - return otto.FalseValue() - } - if err := utils.ImportChain(js.ethereum.ChainManager(), fn); err != nil { - fmt.Println("Import error: ", err) - return otto.FalseValue() - } - return otto.TrueValue() -} - -func (js *jsre) exportChain(call otto.FunctionCall) otto.Value { - if len(call.ArgumentList) == 0 { - fmt.Println("require file name: admin.exportChain(filename)") - return otto.FalseValue() - } - - fn, err := call.Argument(0).ToString() - if err != nil { - fmt.Println(err) - return otto.FalseValue() - } - if err := utils.ExportChain(js.ethereum.ChainManager(), fn); err != nil { - fmt.Println(err) - return otto.FalseValue() - } - return otto.TrueValue() -} - -func (js *jsre) printBlock(call otto.FunctionCall) otto.Value { - block, err := js.getBlock(call) - if err != nil { - fmt.Println(err) - return otto.UndefinedValue() - } - - fmt.Println(block) - - return otto.UndefinedValue() -} - -func (js *jsre) dumpBlock(call otto.FunctionCall) otto.Value { - block, err := js.getBlock(call) - if err != nil { - fmt.Println(err) - return otto.UndefinedValue() - } - - statedb := state.New(block.Root(), js.ethereum.StateDb()) - dump := statedb.RawDump() - v, _ := call.Otto.ToValue(dump) - return v -} - -func (js *jsre) waitForBlocks(call otto.FunctionCall) otto.Value { - if len(call.ArgumentList) > 2 { - fmt.Println("requires 0, 1 or 2 arguments: admin.debug.waitForBlock(minHeight, timeout)") - return otto.FalseValue() - } - var n, timeout int64 - var timer <-chan time.Time - var height *big.Int - var err error - args := len(call.ArgumentList) - if args == 2 { - timeout, err = call.Argument(1).ToInteger() - if err != nil { - fmt.Println(err) - return otto.UndefinedValue() - } - timer = time.NewTimer(time.Duration(timeout) * time.Second).C - } - if args >= 1 { - n, err = call.Argument(0).ToInteger() - if err != nil { - fmt.Println(err) - return otto.UndefinedValue() - } - height = big.NewInt(n) - } - - if args == 0 { - height = js.xeth.CurrentBlock().Number() - height.Add(height, common.Big1) - } - - wait := js.wait - js.wait <- height - select { - case <-timer: - // if times out make sure the xeth loop does not block - go func() { - select { - case wait <- nil: - case <-wait: - } - }() - return otto.UndefinedValue() - case height = <-wait: - } - v, _ := call.Otto.ToValue(height.Uint64()) - return v -} - -func (js *jsre) sleep(call otto.FunctionCall) otto.Value { - sec, err := call.Argument(0).ToInteger() - if err != nil { - fmt.Println(err) - return otto.FalseValue() - } - time.Sleep(time.Duration(sec) * time.Second) - return otto.UndefinedValue() -} - -func (js *jsre) setSolc(call otto.FunctionCall) otto.Value { - if len(call.ArgumentList) != 1 { - fmt.Println("needs 1 argument: admin.contractInfo.setSolc(solcPath)") - return otto.FalseValue() - } - solcPath, err := call.Argument(0).ToString() - if err != nil { - return otto.FalseValue() - } - solc, err := js.xeth.SetSolc(solcPath) - if err != nil { - fmt.Println(err) - return otto.FalseValue() - } - fmt.Println(solc.Info()) - return otto.TrueValue() -} - -func (js *jsre) register(call otto.FunctionCall) otto.Value { - if len(call.ArgumentList) != 4 { - fmt.Println("requires 4 arguments: admin.contractInfo.register(fromaddress, contractaddress, contract, filename)") - return otto.UndefinedValue() - } - sender, err := call.Argument(0).ToString() - if err != nil { - fmt.Println(err) - return otto.UndefinedValue() - } - - address, err := call.Argument(1).ToString() - if err != nil { - fmt.Println(err) - return otto.UndefinedValue() - } - - raw, err := call.Argument(2).Export() - if err != nil { - fmt.Println(err) - return otto.UndefinedValue() - } - jsonraw, err := json.Marshal(raw) - if err != nil { - fmt.Println(err) - return otto.UndefinedValue() - } - var contract compiler.Contract - err = json.Unmarshal(jsonraw, &contract) - if err != nil { - fmt.Println(err) - return otto.UndefinedValue() - } - - filename, err := call.Argument(3).ToString() - if err != nil { - fmt.Println(err) - return otto.UndefinedValue() - } - - contenthash, err := compiler.ExtractInfo(&contract, filename) - if err != nil { - fmt.Println(err) - return otto.UndefinedValue() - } - // sender and contract address are passed as hex strings - codeb := js.xeth.CodeAtBytes(address) - codehash := common.BytesToHash(crypto.Sha3(codeb)) - - if err != nil { - fmt.Println(err) - return otto.UndefinedValue() - } - - registry := resolver.New(js.xeth) - - _, err = registry.RegisterContentHash(common.HexToAddress(sender), codehash, contenthash) - if err != nil { - fmt.Println(err) - return otto.UndefinedValue() - } - - v, _ := call.Otto.ToValue(contenthash.Hex()) - return v -} - -func (js *jsre) registerUrl(call otto.FunctionCall) otto.Value { - if len(call.ArgumentList) != 3 { - fmt.Println("requires 3 arguments: admin.contractInfo.register(fromaddress, contenthash, filename)") - return otto.FalseValue() - } - sender, err := call.Argument(0).ToString() - if err != nil { - fmt.Println(err) - return otto.FalseValue() - } - - contenthash, err := call.Argument(1).ToString() - if err != nil { - fmt.Println(err) - return otto.FalseValue() - } - - url, err := call.Argument(2).ToString() - if err != nil { - fmt.Println(err) - return otto.FalseValue() - } - - registry := resolver.New(js.xeth) - - _, err = registry.RegisterUrl(common.HexToAddress(sender), common.HexToHash(contenthash), url) - if err != nil { - fmt.Println(err) - return otto.FalseValue() - } - - return otto.TrueValue() -} - -func (js *jsre) getContractInfo(call otto.FunctionCall) otto.Value { - if len(call.ArgumentList) != 1 { - fmt.Println("requires 1 argument: admin.contractInfo.register(contractaddress)") - return otto.FalseValue() - } - addr, err := call.Argument(0).ToString() - if err != nil { - fmt.Println(err) - return otto.FalseValue() - } - - infoDoc, err := natspec.FetchDocsForContract(addr, js.xeth, ds) - if err != nil { - fmt.Println(err) - return otto.UndefinedValue() - } - var info compiler.ContractInfo - err = json.Unmarshal(infoDoc, &info) - if err != nil { - fmt.Println(err) - return otto.UndefinedValue() - } - v, _ := call.Otto.ToValue(info) - return v -} - -func (js *jsre) startNatSpec(call otto.FunctionCall) otto.Value { - js.ethereum.NatSpec = true - return otto.TrueValue() -} - -func (js *jsre) stopNatSpec(call otto.FunctionCall) otto.Value { - js.ethereum.NatSpec = false - return otto.TrueValue() -} - -func (js *jsre) newRegistry(call otto.FunctionCall) otto.Value { - - if len(call.ArgumentList) != 1 { - fmt.Println("requires 1 argument: admin.contractInfo.newRegistry(adminaddress)") - return otto.FalseValue() - } - addr, err := call.Argument(0).ToString() - if err != nil { - fmt.Println(err) - return otto.FalseValue() - } - - registry := resolver.New(js.xeth) - err = registry.CreateContracts(common.HexToAddress(addr)) - if err != nil { - fmt.Println(err) - return otto.FalseValue() - } - - return otto.TrueValue() -} - -// internal transaction type which will allow us to resend transactions using `eth.resend` -type tx struct { - tx *types.Transaction - - To string - From string - Nonce string - Value string - Data string - GasLimit string - GasPrice string -} - -func newTx(t *types.Transaction) *tx { - from, _ := t.From() - var to string - if t := t.To(); t != nil { - to = t.Hex() - } - - return &tx{ - tx: t, - To: to, - From: from.Hex(), - Value: t.Amount.String(), - Nonce: strconv.Itoa(int(t.Nonce())), - Data: "0x" + common.Bytes2Hex(t.Data()), - GasLimit: t.GasLimit.String(), - GasPrice: t.GasPrice().String(), - } -} diff --git a/cmd/geth/js.go b/cmd/geth/js.go index 7e6e10ca9b..2ae4817b3b 100644 --- a/cmd/geth/js.go +++ b/cmd/geth/js.go @@ -33,6 +33,10 @@ import ( "github.com/ethereum/go-ethereum/eth" re "github.com/ethereum/go-ethereum/jsre" "github.com/ethereum/go-ethereum/rpc" + "github.com/ethereum/go-ethereum/rpc/api" + "github.com/ethereum/go-ethereum/rpc/codec" + "github.com/ethereum/go-ethereum/rpc/comms" + "github.com/ethereum/go-ethereum/rpc/shared" "github.com/ethereum/go-ethereum/xeth" "github.com/peterh/liner" "github.com/robertkrimen/otto" @@ -70,10 +74,70 @@ type jsre struct { ps1 string atexit func() corsDomain string + client comms.EthereumClient prompter } -func newJSRE(ethereum *eth.Ethereum, libPath, corsDomain, ipcpath string, interactive bool, f xeth.Frontend) *jsre { +var ( + loadedModulesMethods map[string][]string +) + +func keywordCompleter(line string) []string { + results := make([]string, 0) + + if strings.Contains(line, ".") { + elements := strings.Split(line, ".") + if len(elements) == 2 { + module := elements[0] + partialMethod := elements[1] + if methods, found := loadedModulesMethods[module]; found { + for _, method := range methods { + if strings.HasPrefix(method, partialMethod) { // e.g. debug.se + results = append(results, module+"."+method) + } + } + } + } + } else { + for module, methods := range loadedModulesMethods { + if line == module { // user typed in full module name, show all methods + for _, method := range methods { + results = append(results, module+"."+method) + } + } else if strings.HasPrefix(module, line) { // partial method name, e.g. admi + results = append(results, module) + } + } + } + return results +} + +func apiWordCompleter(line string, pos int) (head string, completions []string, tail string) { + if len(line) == 0 { + return "", nil, "" + } + + i := 0 + for i = pos - 1; i > 0; i-- { + if line[i] == '.' || (line[i] >= 'a' && line[i] <= 'z') || (line[i] >= 'A' && line[i] <= 'Z') { + continue + } + if i >= 3 && line[i] == '3' && line[i-3] == 'w' && line[i-2] == 'e' && line[i-1] == 'b' { + continue + } + i += 1 + break + } + + begin := line[:i] + keyword := line[i:pos] + end := line[pos:] + + completionWords := keywordCompleter(keyword) + return begin, completionWords, end +} + +func newJSRE(ethereum *eth.Ethereum, libPath, corsDomain string, client comms.EthereumClient, interactive bool, f xeth.Frontend) *jsre { js := &jsre{ethereum: ethereum, ps1: "> "} // set default cors domain used by startRpc from CLI flag js.corsDomain = corsDomain @@ -82,10 +146,16 @@ func newJSRE(ethereum *eth.Ethereum, libPath, corsDomain, ipcpath string, intera } js.xeth = xeth.New(ethereum, f) js.wait = js.xeth.UpdateState() + js.client = client + if clt, ok := js.client.(*comms.InProcClient); ok { + clt.Initialize(js.xeth, ethereum) + } + // update state in separare forever blocks js.re = re.New(libPath) - js.apiBindings(ipcpath, f) - js.adminBindings() + if err := js.apiBindings(f); err != nil { + utils.Fatalf("Unable to connect - %v", err) + } if !liner.TerminalSupported() || !interactive { js.prompter = dumbterm{bufio.NewReader(os.Stdin)} @@ -93,6 +163,9 @@ func newJSRE(ethereum *eth.Ethereum, libPath, corsDomain, ipcpath string, intera lr := liner.NewLiner() js.withHistory(func(hist *os.File) { lr.ReadHistory(hist) }) lr.SetCtrlCAborts(true) + js.loadAutoCompletion() + lr.SetWordCompleter(apiWordCompleter) + lr.SetTabCompletionStyle(liner.TabPrints) js.prompter = lr js.atexit = func() { js.withHistory(func(hist *os.File) { hist.Truncate(0); lr.WriteHistory(hist) }) @@ -103,8 +176,117 @@ func newJSRE(ethereum *eth.Ethereum, libPath, corsDomain, ipcpath string, intera return js } +func (self *jsre) loadAutoCompletion() { + if modules, err := self.suportedApis(); err == nil { + loadedModulesMethods = make(map[string][]string) + for module, _ := range modules { + loadedModulesMethods[module] = api.AutoCompletion[module] + } + } +} + +func (self *jsre) suportedApis() (map[string]string, error) { + req := shared.Request{ + Id: 1, + Jsonrpc: "2.0", + Method: "modules", + } + + err := self.client.Send(&req) + if err != nil { + return nil, err + } + + res, err := self.client.Recv() + if err != nil { + return nil, err + } + + if sucRes, ok := res.(map[string]string); ok { + if err == nil { + return sucRes, nil + } + } + + return nil, fmt.Errorf("Unable to determine supported API's") +} + +func (js *jsre) apiBindings(f xeth.Frontend) error { + apis, err := js.suportedApis() + if err != nil { + return err + } + + apiNames := make([]string, 0, len(apis)) + for a, _ := range apis { + apiNames = append(apiNames, a) + } + + apiImpl, err := api.ParseApiString(strings.Join(apiNames, ","), codec.JSON, js.xeth, js.ethereum) + if err != nil { + utils.Fatalf("Unable to determine supported api's: %v", err) + } + + jeth := rpc.NewJeth(api.Merge(apiImpl...), js.re, js.client) + js.re.Set("jeth", struct{}{}) + t, _ := js.re.Get("jeth") + jethObj := t.Object() + + jethObj.Set("send", jeth.Send) + jethObj.Set("sendAsync", jeth.Send) + + err = js.re.Compile("bignumber.js", re.BigNumber_JS) + if err != nil { + utils.Fatalf("Error loading bignumber.js: %v", err) + } + + err = js.re.Compile("ethereum.js", re.Web3_JS) + if err != nil { + utils.Fatalf("Error loading web3.js: %v", err) + } + + _, err = js.re.Eval("var web3 = require('web3');") + if err != nil { + utils.Fatalf("Error requiring web3: %v", err) + } + + _, err = js.re.Eval("web3.setProvider(jeth)") + if err != nil { + utils.Fatalf("Error setting web3 provider: %v", err) + } + + // load only supported API's in javascript runtime + shortcuts := "var eth = web3.eth; " + for _, apiName := range apiNames { + if apiName == api.Web3ApiName || apiName == api.EthApiName { + continue // manually mapped + } + + if err = js.re.Compile(fmt.Sprintf("%s.js", apiName), api.Javascript(apiName)); err == nil { + shortcuts += fmt.Sprintf("var %s = web3.%s; ", apiName, apiName) + } else { + utils.Fatalf("Error loading %s.js: %v", apiName, err) + } + } + + _, err = js.re.Eval(shortcuts) + + if err != nil { + utils.Fatalf("Error setting namespaces: %v", err) + } + + js.re.Eval(globalRegistrar + "registrar = GlobalRegistrar.at(\"" + globalRegistrarAddr + "\");") + return nil +} + +/* func (js *jsre) apiBindings(ipcpath string, f xeth.Frontend) { xe := xeth.New(js.ethereum, f) + apiNames, err := js.suportedApis(ipcpath) + if err != nil { + return + } + ethApi := rpc.NewEthereumApi(xe) jeth := rpc.NewJeth(ethApi, js.re, ipcpath) @@ -146,6 +328,7 @@ var net = web3.net; js.re.Eval(globalRegistrar + "registrar = GlobalRegistrar.at(\"" + globalRegistrarAddr + "\");") } +*/ var ds, _ = docserver.New("/") diff --git a/cmd/geth/main.go b/cmd/geth/main.go index 43e45f6cca..5c4c33cea1 100644 --- a/cmd/geth/main.go +++ b/cmd/geth/main.go @@ -38,6 +38,8 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/eth" "github.com/ethereum/go-ethereum/logger" + "github.com/ethereum/go-ethereum/rpc/codec" + "github.com/ethereum/go-ethereum/rpc/comms" "github.com/mattn/go-colorable" "github.com/mattn/go-isatty" ) @@ -310,12 +312,14 @@ func console(ctx *cli.Context) { utils.Fatalf("%v", err) } + client := comms.NewInProcClient(codec.JSON) + startEth(ctx, ethereum) repl := newJSRE( ethereum, ctx.String(utils.JSpathFlag.Name), ctx.GlobalString(utils.RPCCORSDomainFlag.Name), - utils.IpcSocketPath(ctx), + client, true, nil, ) @@ -332,12 +336,13 @@ func execJSFiles(ctx *cli.Context) { utils.Fatalf("%v", err) } + client := comms.NewInProcClient(codec.JSON) startEth(ctx, ethereum) repl := newJSRE( ethereum, ctx.String(utils.JSpathFlag.Name), ctx.GlobalString(utils.RPCCORSDomainFlag.Name), - utils.IpcSocketPath(ctx), + client, false, nil, ) diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index e0eefb3e35..092bc55118 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -211,7 +211,7 @@ var ( RpcApiFlag = cli.StringFlag{ Name: "rpcapi", Usage: "Specify the API's which are offered over the HTTP RPC interface", - Value: api.DefaultHttpRpcApis, + Value: comms.DefaultHttpRpcApis, } IPCDisabledFlag = cli.BoolFlag{ Name: "ipcdisable", @@ -220,7 +220,7 @@ var ( IPCApiFlag = cli.StringFlag{ Name: "ipcapi", Usage: "Specify the API's which are offered over the IPC interface", - Value: api.DefaultIpcApis, + Value: comms.DefaultIpcApis, } IPCPathFlag = DirectoryFlag{ Name: "ipcpath", diff --git a/core/transaction_pool.go b/core/transaction_pool.go index 5ebe3576bb..34a1733d71 100644 --- a/core/transaction_pool.go +++ b/core/transaction_pool.go @@ -149,7 +149,7 @@ func (pool *TxPool) validateTx(tx *types.Transaction) error { return ErrInvalidSender } - // Make sure the account exist. Non existant accounts + // Make sure the account exist. Non existent accounts // haven't got funds and well therefor never pass. if !pool.currentState().HasAccount(from) { return ErrNonExistentAccount diff --git a/rpc/api.go b/rpc/api.go deleted file mode 100644 index a344a82946..0000000000 --- a/rpc/api.go +++ /dev/null @@ -1,646 +0,0 @@ -package rpc - -import ( - "bytes" - "encoding/json" - "math/big" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/vm" - "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/logger" - "github.com/ethereum/go-ethereum/logger/glog" - "github.com/ethereum/go-ethereum/xeth" -) - -type EthereumApi struct { - eth *xeth.XEth -} - -func NewEthereumApi(xeth *xeth.XEth) *EthereumApi { - api := &EthereumApi{ - eth: xeth, - } - - return api -} - -func (api *EthereumApi) xeth() *xeth.XEth { - return api.eth -} - -func (api *EthereumApi) xethAtStateNum(num int64) *xeth.XEth { - return api.xeth().AtStateNum(num) -} - -func (api *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) error { - // Spec at https://github.com/ethereum/wiki/wiki/JSON-RPC - glog.V(logger.Debug).Infof("%s %s", req.Method, req.Params) - - switch req.Method { - case "web3_sha3": - args := new(Sha3Args) - if err := json.Unmarshal(req.Params, &args); err != nil { - return err - } - *reply = common.ToHex(crypto.Sha3(common.FromHex(args.Data))) - case "web3_clientVersion": - *reply = api.xeth().ClientVersion() - case "net_version": - *reply = api.xeth().NetworkVersion() - case "net_listening": - *reply = api.xeth().IsListening() - case "net_peerCount": - *reply = newHexNum(api.xeth().PeerCount()) - case "eth_protocolVersion": - *reply = api.xeth().EthVersion() - case "eth_coinbase": - *reply = newHexData(api.xeth().Coinbase()) - case "eth_mining": - *reply = api.xeth().IsMining() - case "eth_gasPrice": - v := api.xeth().DefaultGasPrice() - *reply = newHexNum(v.Bytes()) - case "eth_accounts": - *reply = api.xeth().Accounts() - case "eth_blockNumber": - v := api.xeth().CurrentBlock().Number() - *reply = newHexNum(v.Bytes()) - case "eth_getBalance": - args := new(GetBalanceArgs) - if err := json.Unmarshal(req.Params, &args); err != nil { - return err - } - - *reply = api.xethAtStateNum(args.BlockNumber).BalanceAt(args.Address) - //v := api.xethAtStateNum(args.BlockNumber).State().SafeGet(args.Address).Balance() - //*reply = common.ToHex(v.Bytes()) - case "eth_getStorage", "eth_storageAt": - args := new(GetStorageArgs) - if err := json.Unmarshal(req.Params, &args); err != nil { - return err - } - - *reply = api.xethAtStateNum(args.BlockNumber).State().SafeGet(args.Address).Storage() - case "eth_getStorageAt": - args := new(GetStorageAtArgs) - if err := json.Unmarshal(req.Params, &args); err != nil { - return err - } - - *reply = api.xethAtStateNum(args.BlockNumber).StorageAt(args.Address, args.Key) - case "eth_getTransactionCount": - args := new(GetTxCountArgs) - if err := json.Unmarshal(req.Params, &args); err != nil { - return err - } - - count := api.xethAtStateNum(args.BlockNumber).TxCountAt(args.Address) - *reply = newHexNum(big.NewInt(int64(count)).Bytes()) - case "eth_getBlockTransactionCountByHash": - args := new(HashArgs) - if err := json.Unmarshal(req.Params, &args); err != nil { - return err - } - - block := NewBlockRes(api.xeth().EthBlockByHash(args.Hash), false) - if block == nil { - *reply = nil - } else { - *reply = newHexNum(big.NewInt(int64(len(block.Transactions))).Bytes()) - } - case "eth_getBlockTransactionCountByNumber": - args := new(BlockNumArg) - if err := json.Unmarshal(req.Params, &args); err != nil { - return err - } - - block := NewBlockRes(api.xeth().EthBlockByNumber(args.BlockNumber), false) - if block == nil { - *reply = nil - break - } - - *reply = newHexNum(big.NewInt(int64(len(block.Transactions))).Bytes()) - case "eth_getUncleCountByBlockHash": - args := new(HashArgs) - if err := json.Unmarshal(req.Params, &args); err != nil { - return err - } - - block := api.xeth().EthBlockByHash(args.Hash) - br := NewBlockRes(block, false) - if br == nil { - *reply = nil - break - } - - *reply = newHexNum(big.NewInt(int64(len(br.Uncles))).Bytes()) - case "eth_getUncleCountByBlockNumber": - args := new(BlockNumArg) - if err := json.Unmarshal(req.Params, &args); err != nil { - return err - } - - block := api.xeth().EthBlockByNumber(args.BlockNumber) - br := NewBlockRes(block, false) - if br == nil { - *reply = nil - break - } - - *reply = newHexNum(big.NewInt(int64(len(br.Uncles))).Bytes()) - - case "eth_getData", "eth_getCode": - args := new(GetDataArgs) - if err := json.Unmarshal(req.Params, &args); err != nil { - return err - } - v := api.xethAtStateNum(args.BlockNumber).CodeAtBytes(args.Address) - *reply = newHexData(v) - - case "eth_sign": - args := new(NewSigArgs) - if err := json.Unmarshal(req.Params, &args); err != nil { - return err - } - v, err := api.xeth().Sign(args.From, args.Data, false) - if err != nil { - return err - } - *reply = v - - case "eth_sendRawTransaction": - args := new(NewDataArgs) - if err := json.Unmarshal(req.Params, &args); err != nil { - return err - } - v, err := api.xeth().PushTx(args.Data) - if err != nil { - return err - } - *reply = v - - case "eth_sendTransaction", "eth_transact": - args := new(NewTxArgs) - if err := json.Unmarshal(req.Params, &args); err != nil { - return err - } - - // nonce may be nil ("guess" mode) - var nonce string - if args.Nonce != nil { - nonce = args.Nonce.String() - } - - var gas string - if args.Gas == nil { - gas = "" - } else { - gas = args.Gas.String() - } - - var gasprice string - if args.GasPrice == nil { - gasprice = "" - } else { - gasprice = args.GasPrice.String() - } - - v, err := api.xeth().Transact(args.From, args.To, nonce, args.Value.String(), gas, gasprice, args.Data) - if err != nil { - return err - } - *reply = v - case "eth_estimateGas": - _, gas, err := api.doCall(req.Params) - if err != nil { - return err - } - - // TODO unwrap the parent method's ToHex call - if len(gas) == 0 { - *reply = newHexNum(0) - } else { - *reply = newHexNum(gas) - } - case "eth_call": - v, _, err := api.doCall(req.Params) - if err != nil { - return err - } - - // TODO unwrap the parent method's ToHex call - if v == "0x0" { - *reply = newHexData([]byte{}) - } else { - *reply = newHexData(common.FromHex(v)) - } - case "eth_flush": - return NewNotImplementedError(req.Method) - case "eth_getBlockByHash": - args := new(GetBlockByHashArgs) - if err := json.Unmarshal(req.Params, &args); err != nil { - return err - } - - block := api.xeth().EthBlockByHash(args.BlockHash) - br := NewBlockRes(block, args.IncludeTxs) - - *reply = br - case "eth_getBlockByNumber": - args := new(GetBlockByNumberArgs) - if err := json.Unmarshal(req.Params, &args); err != nil { - return err - } - - block := api.xeth().EthBlockByNumber(args.BlockNumber) - br := NewBlockRes(block, args.IncludeTxs) - // If request was for "pending", nil nonsensical fields - if args.BlockNumber == -2 { - br.BlockHash = nil - br.BlockNumber = nil - br.Miner = nil - br.Nonce = nil - br.LogsBloom = nil - } - *reply = br - case "eth_getTransactionByHash": - args := new(HashArgs) - if err := json.Unmarshal(req.Params, &args); err != nil { - return err - } - tx, bhash, bnum, txi := api.xeth().EthTransactionByHash(args.Hash) - if tx != nil { - v := NewTransactionRes(tx) - // if the blockhash is 0, assume this is a pending transaction - if bytes.Compare(bhash.Bytes(), bytes.Repeat([]byte{0}, 32)) != 0 { - v.BlockHash = newHexData(bhash) - v.BlockNumber = newHexNum(bnum) - v.TxIndex = newHexNum(txi) - } - *reply = v - } - case "eth_getTransactionByBlockHashAndIndex": - args := new(HashIndexArgs) - if err := json.Unmarshal(req.Params, &args); err != nil { - return err - } - - block := api.xeth().EthBlockByHash(args.Hash) - br := NewBlockRes(block, true) - if br == nil { - *reply = nil - break - } - - if args.Index >= int64(len(br.Transactions)) || args.Index < 0 { - // return NewValidationError("Index", "does not exist") - *reply = nil - } else { - *reply = br.Transactions[args.Index] - } - case "eth_getTransactionByBlockNumberAndIndex": - args := new(BlockNumIndexArgs) - if err := json.Unmarshal(req.Params, &args); err != nil { - return err - } - - block := api.xeth().EthBlockByNumber(args.BlockNumber) - v := NewBlockRes(block, true) - if v == nil { - *reply = nil - break - } - - if args.Index >= int64(len(v.Transactions)) || args.Index < 0 { - // return NewValidationError("Index", "does not exist") - *reply = nil - } else { - *reply = v.Transactions[args.Index] - } - case "eth_getUncleByBlockHashAndIndex": - args := new(HashIndexArgs) - if err := json.Unmarshal(req.Params, &args); err != nil { - return err - } - - br := NewBlockRes(api.xeth().EthBlockByHash(args.Hash), false) - if br == nil { - *reply = nil - return nil - } - - if args.Index >= int64(len(br.Uncles)) || args.Index < 0 { - // return NewValidationError("Index", "does not exist") - *reply = nil - } else { - *reply = br.Uncles[args.Index] - } - case "eth_getUncleByBlockNumberAndIndex": - args := new(BlockNumIndexArgs) - if err := json.Unmarshal(req.Params, &args); err != nil { - return err - } - - block := api.xeth().EthBlockByNumber(args.BlockNumber) - v := NewBlockRes(block, true) - - if v == nil { - *reply = nil - return nil - } - - if args.Index >= int64(len(v.Uncles)) || args.Index < 0 { - // return NewValidationError("Index", "does not exist") - *reply = nil - } else { - *reply = v.Uncles[args.Index] - } - - case "eth_getCompilers": - var lang string - if solc, _ := api.xeth().Solc(); solc != nil { - lang = "Solidity" - } - c := []string{lang} - *reply = c - - case "eth_compileLLL", "eth_compileSerpent": - return NewNotImplementedError(req.Method) - - case "eth_compileSolidity": - solc, _ := api.xeth().Solc() - if solc == nil { - return NewNotAvailableError(req.Method, "solc (solidity compiler) not found") - } - - args := new(SourceArgs) - if err := json.Unmarshal(req.Params, &args); err != nil { - return err - } - - contracts, err := solc.Compile(args.Source) - if err != nil { - return err - } - *reply = contracts - - case "eth_newFilter": - args := new(BlockFilterArgs) - if err := json.Unmarshal(req.Params, &args); err != nil { - return err - } - - id := api.xeth().NewLogFilter(args.Earliest, args.Latest, args.Skip, args.Max, args.Address, args.Topics) - *reply = newHexNum(big.NewInt(int64(id)).Bytes()) - - case "eth_newBlockFilter": - *reply = newHexNum(api.xeth().NewBlockFilter()) - case "eth_newPendingTransactionFilter": - *reply = newHexNum(api.xeth().NewTransactionFilter()) - case "eth_uninstallFilter": - args := new(FilterIdArgs) - if err := json.Unmarshal(req.Params, &args); err != nil { - return err - } - *reply = api.xeth().UninstallFilter(args.Id) - case "eth_getFilterChanges": - args := new(FilterIdArgs) - if err := json.Unmarshal(req.Params, &args); err != nil { - return err - } - - switch api.xeth().GetFilterType(args.Id) { - case xeth.BlockFilterTy: - *reply = NewHashesRes(api.xeth().BlockFilterChanged(args.Id)) - case xeth.TransactionFilterTy: - *reply = NewHashesRes(api.xeth().TransactionFilterChanged(args.Id)) - case xeth.LogFilterTy: - *reply = NewLogsRes(api.xeth().LogFilterChanged(args.Id)) - default: - *reply = []string{} // reply empty string slice - } - case "eth_getFilterLogs": - args := new(FilterIdArgs) - if err := json.Unmarshal(req.Params, &args); err != nil { - return err - } - *reply = NewLogsRes(api.xeth().Logs(args.Id)) - case "eth_getLogs": - args := new(BlockFilterArgs) - if err := json.Unmarshal(req.Params, &args); err != nil { - return err - } - *reply = NewLogsRes(api.xeth().AllLogs(args.Earliest, args.Latest, args.Skip, args.Max, args.Address, args.Topics)) - case "eth_getWork": - api.xeth().SetMining(true, 0) - *reply = api.xeth().RemoteMining().GetWork() - case "eth_submitWork": - args := new(SubmitWorkArgs) - if err := json.Unmarshal(req.Params, &args); err != nil { - return err - } - *reply = api.xeth().RemoteMining().SubmitWork(args.Nonce, common.HexToHash(args.Digest), common.HexToHash(args.Header)) - case "db_putString": - args := new(DbArgs) - if err := json.Unmarshal(req.Params, &args); err != nil { - return err - } - - if err := args.requirements(); err != nil { - return err - } - - api.xeth().DbPut([]byte(args.Database+args.Key), args.Value) - - *reply = true - case "db_getString": - args := new(DbArgs) - if err := json.Unmarshal(req.Params, &args); err != nil { - return err - } - - if err := args.requirements(); err != nil { - return err - } - - res, _ := api.xeth().DbGet([]byte(args.Database + args.Key)) - *reply = string(res) - case "db_putHex": - args := new(DbHexArgs) - if err := json.Unmarshal(req.Params, &args); err != nil { - return err - } - - if err := args.requirements(); err != nil { - return err - } - - api.xeth().DbPut([]byte(args.Database+args.Key), args.Value) - *reply = true - case "db_getHex": - args := new(DbHexArgs) - if err := json.Unmarshal(req.Params, &args); err != nil { - return err - } - - if err := args.requirements(); err != nil { - return err - } - - res, _ := api.xeth().DbGet([]byte(args.Database + args.Key)) - *reply = newHexData(res) - - case "shh_version": - // Short circuit if whisper is not running - if api.xeth().Whisper() == nil { - return NewNotAvailableError(req.Method, "whisper offline") - } - // Retrieves the currently running whisper protocol version - *reply = api.xeth().WhisperVersion() - - case "shh_post": - // Short circuit if whisper is not running - if api.xeth().Whisper() == nil { - return NewNotAvailableError(req.Method, "whisper offline") - } - // Injects a new message into the whisper network - args := new(WhisperMessageArgs) - if err := json.Unmarshal(req.Params, &args); err != nil { - return err - } - err := api.xeth().Whisper().Post(args.Payload, args.To, args.From, args.Topics, args.Priority, args.Ttl) - if err != nil { - return err - } - *reply = true - - case "shh_newIdentity": - // Short circuit if whisper is not running - if api.xeth().Whisper() == nil { - return NewNotAvailableError(req.Method, "whisper offline") - } - // Creates a new whisper identity to use for sending/receiving messages - *reply = api.xeth().Whisper().NewIdentity() - - case "shh_hasIdentity": - // Short circuit if whisper is not running - if api.xeth().Whisper() == nil { - return NewNotAvailableError(req.Method, "whisper offline") - } - // Checks if an identity if owned or not - args := new(WhisperIdentityArgs) - if err := json.Unmarshal(req.Params, &args); err != nil { - return err - } - *reply = api.xeth().Whisper().HasIdentity(args.Identity) - - case "shh_newFilter": - // Short circuit if whisper is not running - if api.xeth().Whisper() == nil { - return NewNotAvailableError(req.Method, "whisper offline") - } - // Create a new filter to watch and match messages with - args := new(WhisperFilterArgs) - if err := json.Unmarshal(req.Params, &args); err != nil { - return err - } - id := api.xeth().NewWhisperFilter(args.To, args.From, args.Topics) - *reply = newHexNum(big.NewInt(int64(id)).Bytes()) - - case "shh_uninstallFilter": - // Short circuit if whisper is not running - if api.xeth().Whisper() == nil { - return NewNotAvailableError(req.Method, "whisper offline") - } - // Remove an existing filter watching messages - args := new(FilterIdArgs) - if err := json.Unmarshal(req.Params, &args); err != nil { - return err - } - *reply = api.xeth().UninstallWhisperFilter(args.Id) - - case "shh_getFilterChanges": - // Short circuit if whisper is not running - if api.xeth().Whisper() == nil { - return NewNotAvailableError(req.Method, "whisper offline") - } - // Retrieve all the new messages arrived since the last request - args := new(FilterIdArgs) - if err := json.Unmarshal(req.Params, &args); err != nil { - return err - } - *reply = api.xeth().WhisperMessagesChanged(args.Id) - - case "shh_getMessages": - // Short circuit if whisper is not running - if api.xeth().Whisper() == nil { - return NewNotAvailableError(req.Method, "whisper offline") - } - // Retrieve all the cached messages matching a specific, existing filter - args := new(FilterIdArgs) - if err := json.Unmarshal(req.Params, &args); err != nil { - return err - } - *reply = api.xeth().WhisperMessages(args.Id) - - case "eth_hashrate": - *reply = newHexNum(api.xeth().HashRate()) - case "ext_disasm": - args := new(SourceArgs) - if err := json.Unmarshal(req.Params, &args); err != nil { - return err - } - - *reply = vm.Disasm(common.FromHex(args.Source)) - - // case "eth_register": - // // Placeholder for actual type - // args := new(HashIndexArgs) - // if err := json.Unmarshal(req.Params, &args); err != nil { - // return err - // } - // *reply = api.xeth().Register(args.Hash) - // case "eth_unregister": - // args := new(HashIndexArgs) - // if err := json.Unmarshal(req.Params, &args); err != nil { - // return err - // } - // *reply = api.xeth().Unregister(args.Hash) - // case "eth_watchTx": - // args := new(HashIndexArgs) - // if err := json.Unmarshal(req.Params, &args); err != nil { - // return err - // } - // *reply = api.xeth().PullWatchTx(args.Hash) - default: - return NewNotImplementedError(req.Method) - } - - // glog.V(logger.Detail).Infof("Reply: %v\n", reply) - return nil -} - -func (api *EthereumApi) doCall(params json.RawMessage) (string, string, error) { - args := new(CallArgs) - if err := json.Unmarshal(params, &args); err != nil { - return "", "", err - } - - var gas string - if args.Gas == nil { - gas = "" - } else { - gas = args.Gas.String() - } - - var gasprice string - if args.GasPrice == nil { - gasprice = "" - } else { - gasprice = args.GasPrice.String() - } - - return api.xethAtStateNum(args.BlockNumber).Call(args.From, args.To, args.Value.String(), gas, gasprice, args.Data) -} diff --git a/rpc/api/api.go b/rpc/api/api.go index 7fc22a2635..10b4485947 100644 --- a/rpc/api/api.go +++ b/rpc/api/api.go @@ -18,15 +18,13 @@ const ( TxPoolApiName = "txpool" PersonalApiName = "personal" Web3ApiName = "web3" + + JsonRpcVersion = "2.0" ) var ( - DefaultHttpRpcApis = strings.Join([]string{ - DbApiName, EthApiName, NetApiName, Web3ApiName, - }, ",") - - // List with all API's which are offered over the IPC interface by default - DefaultIpcApis = strings.Join([]string{ + // All API's + AllApis = strings.Join([]string{ AdminApiName, DbApiName, EthApiName, DebugApiName, MinerApiName, NetApiName, ShhApiName, TxPoolApiName, PersonalApiName, Web3ApiName, }, ",") diff --git a/rpc/api/args.go b/rpc/api/args.go new file mode 100644 index 0000000000..4ef1b26e72 --- /dev/null +++ b/rpc/api/args.go @@ -0,0 +1,57 @@ +package api + +import ( + "encoding/json" + "github.com/ethereum/go-ethereum/rpc/shared" +) + +type CompileArgs struct { + Source string +} + +func (args *CompileArgs) UnmarshalJSON(b []byte) (err error) { + var obj []interface{} + if err := json.Unmarshal(b, &obj); err != nil { + return shared.NewDecodeParamError(err.Error()) + } + + if len(obj) < 1 { + return shared.NewInsufficientParamsError(len(obj), 1) + } + argstr, ok := obj[0].(string) + if !ok { + return shared.NewInvalidTypeError("arg0", "is not a string") + } + args.Source = argstr + + return nil +} + +type FilterStringArgs struct { + Word string +} + +func (args *FilterStringArgs) UnmarshalJSON(b []byte) (err error) { + var obj []interface{} + if err := json.Unmarshal(b, &obj); err != nil { + return shared.NewDecodeParamError(err.Error()) + } + + if len(obj) < 1 { + return shared.NewInsufficientParamsError(len(obj), 1) + } + + var argstr string + argstr, ok := obj[0].(string) + if !ok { + return shared.NewInvalidTypeError("filter", "not a string") + } + switch argstr { + case "latest", "pending": + break + default: + return shared.NewValidationError("Word", "Must be `latest` or `pending`") + } + args.Word = argstr + return nil +} \ No newline at end of file diff --git a/rpc/args_test.go b/rpc/api/args_test.go similarity index 99% rename from rpc/args_test.go rename to rpc/api/args_test.go index fd20dbab8b..4153d54325 100644 --- a/rpc/args_test.go +++ b/rpc/api/args_test.go @@ -1,4 +1,4 @@ -package rpc +package api import ( "bytes" @@ -6,6 +6,7 @@ import ( "fmt" "math/big" "testing" + "github.com/ethereum/go-ethereum/rpc/shared" ) func TestBlockheightInvalidString(t *testing.T) { @@ -68,7 +69,7 @@ func ExpectValidationError(err error) string { switch err.(type) { case nil: str = "Expected error but didn't get one" - case *ValidationError: + case *shared.ValidationError: break default: str = fmt.Sprintf("Expected *rpc.ValidationError but got %T with message `%s`", err, err.Error()) @@ -81,7 +82,7 @@ func ExpectInvalidTypeError(err error) string { switch err.(type) { case nil: str = "Expected error but didn't get one" - case *InvalidTypeError: + case *shared.InvalidTypeError: break default: str = fmt.Sprintf("Expected *rpc.InvalidTypeError but got %T with message `%s`", err, err.Error()) @@ -94,7 +95,7 @@ func ExpectInsufficientParamsError(err error) string { switch err.(type) { case nil: str = "Expected error but didn't get one" - case *InsufficientParamsError: + case *shared.InsufficientParamsError: break default: str = fmt.Sprintf("Expected *rpc.InsufficientParamsError but got %T with message %s", err, err.Error()) @@ -107,7 +108,7 @@ func ExpectDecodeParamError(err error) string { switch err.(type) { case nil: str = "Expected error but didn't get one" - case *DecodeParamError: + case *shared.DecodeParamError: break default: str = fmt.Sprintf("Expected *rpc.DecodeParamError but got %T with message `%s`", err, err.Error()) diff --git a/rpc/api_test.go b/rpc/api_test.go deleted file mode 100644 index c3546e98f4..0000000000 --- a/rpc/api_test.go +++ /dev/null @@ -1,205 +0,0 @@ -package rpc - -import ( - "encoding/json" - "strconv" - "testing" - - "github.com/ethereum/go-ethereum/common/compiler" - "github.com/ethereum/go-ethereum/eth" - "github.com/ethereum/go-ethereum/xeth" -) - -func TestWeb3Sha3(t *testing.T) { - jsonstr := `{"jsonrpc":"2.0","method":"web3_sha3","params":["0x68656c6c6f20776f726c64"],"id":64}` - expected := "0x47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad" - - api := &EthereumApi{} - - var req RpcRequest - json.Unmarshal([]byte(jsonstr), &req) - - var response interface{} - _ = api.GetRequestReply(&req, &response) - - if response.(string) != expected { - t.Errorf("Expected %s got %s", expected, response) - } -} - -const solcVersion = "0.9.23" - -func TestCompileSolidity(t *testing.T) { - - solc, err := compiler.New("") - if solc == nil { - t.Skip("no solc found: skip") - } else if solc.Version() != solcVersion { - t.Skip("WARNING: skipping test because of solc different version (%v, test written for %v, may need to update)", solc.Version(), solcVersion) - } - source := `contract test {\n` + - " /// @notice Will multiply `a` by 7." + `\n` + - ` function multiply(uint a) returns(uint d) {\n` + - ` return a * 7;\n` + - ` }\n` + - `}\n` - - jsonstr := `{"jsonrpc":"2.0","method":"eth_compileSolidity","params":["` + source + `"],"id":64}` - - expCode := "0x605880600c6000396000f3006000357c010000000000000000000000000000000000000000000000000000000090048063c6888fa114602e57005b603d6004803590602001506047565b8060005260206000f35b60006007820290506053565b91905056" - expAbiDefinition := `[{"constant":false,"inputs":[{"name":"a","type":"uint256"}],"name":"multiply","outputs":[{"name":"d","type":"uint256"}],"type":"function"}]` - expUserDoc := `{"methods":{"multiply(uint256)":{"notice":"Will multiply ` + "`a`" + ` by 7."}}}` - expDeveloperDoc := `{"methods":{}}` - expCompilerVersion := solc.Version() - expLanguage := "Solidity" - expLanguageVersion := "0" - expSource := source - - api := NewEthereumApi(xeth.NewTest(ð.Ethereum{}, nil)) - - var req RpcRequest - json.Unmarshal([]byte(jsonstr), &req) - - var response interface{} - err = api.GetRequestReply(&req, &response) - if err != nil { - t.Errorf("expected no error, got %v", err) - } - respjson, err := json.Marshal(response) - if err != nil { - t.Errorf("expected no error, got %v", err) - } - - var contracts = make(map[string]*compiler.Contract) - err = json.Unmarshal(respjson, &contracts) - if err != nil { - t.Errorf("expected no error, got %v", err) - } - - if len(contracts) != 1 { - t.Errorf("expected one contract, got %v", len(contracts)) - } - - contract := contracts["test"] - - if contract.Code != expCode { - t.Errorf("Expected \n%s got \n%s", expCode, contract.Code) - } - - if strconv.Quote(contract.Info.Source) != `"`+expSource+`"` { - t.Errorf("Expected \n'%s' got \n'%s'", expSource, strconv.Quote(contract.Info.Source)) - } - - if contract.Info.Language != expLanguage { - t.Errorf("Expected %s got %s", expLanguage, contract.Info.Language) - } - - if contract.Info.LanguageVersion != expLanguageVersion { - t.Errorf("Expected %s got %s", expLanguageVersion, contract.Info.LanguageVersion) - } - - if contract.Info.CompilerVersion != expCompilerVersion { - t.Errorf("Expected %s got %s", expCompilerVersion, contract.Info.CompilerVersion) - } - - userdoc, err := json.Marshal(contract.Info.UserDoc) - if err != nil { - t.Errorf("expected no error, got %v", err) - } - - devdoc, err := json.Marshal(contract.Info.DeveloperDoc) - if err != nil { - t.Errorf("expected no error, got %v", err) - } - - abidef, err := json.Marshal(contract.Info.AbiDefinition) - if err != nil { - t.Errorf("expected no error, got %v", err) - } - - if string(abidef) != expAbiDefinition { - t.Errorf("Expected \n'%s' got \n'%s'", expAbiDefinition, string(abidef)) - } - - if string(userdoc) != expUserDoc { - t.Errorf("Expected \n'%s' got \n'%s'", expUserDoc, string(userdoc)) - } - - if string(devdoc) != expDeveloperDoc { - t.Errorf("Expected %s got %s", expDeveloperDoc, string(devdoc)) - } -} - -// func TestDbStr(t *testing.T) { -// jsonput := `{"jsonrpc":"2.0","method":"db_putString","params":["testDB","myKey","myString"],"id":64}` -// jsonget := `{"jsonrpc":"2.0","method":"db_getString","params":["testDB","myKey"],"id":64}` -// expected := "myString" - -// xeth := &xeth.XEth{} -// api := NewEthereumApi(xeth) -// var response interface{} - -// var req RpcRequest -// json.Unmarshal([]byte(jsonput), &req) -// _ = api.GetRequestReply(&req, &response) - -// json.Unmarshal([]byte(jsonget), &req) -// _ = api.GetRequestReply(&req, &response) - -// if response.(string) != expected { -// t.Errorf("Expected %s got %s", expected, response) -// } -// } - -// func TestDbHexStr(t *testing.T) { -// jsonput := `{"jsonrpc":"2.0","method":"db_putHex","params":["testDB","beefKey","0xbeef"],"id":64}` -// jsonget := `{"jsonrpc":"2.0","method":"db_getHex","params":["testDB","beefKey"],"id":64}` -// expected := "0xbeef" - -// xeth := &xeth.XEth{} -// api := NewEthereumApi(xeth) -// defer api.db.Close() -// var response interface{} - -// var req RpcRequest -// json.Unmarshal([]byte(jsonput), &req) -// _ = api.GetRequestReply(&req, &response) - -// json.Unmarshal([]byte(jsonget), &req) -// _ = api.GetRequestReply(&req, &response) - -// if response.(string) != expected { -// t.Errorf("Expected %s got %s", expected, response) -// } -// } - -// func TestFilterClose(t *testing.T) { -// t.Skip() -// api := &EthereumApi{ -// logs: make(map[int]*logFilter), -// messages: make(map[int]*whisperFilter), -// quit: make(chan struct{}), -// } - -// filterTickerTime = 1 -// api.logs[0] = &logFilter{} -// api.messages[0] = &whisperFilter{} -// var wg sync.WaitGroup -// wg.Add(1) -// go api.start() -// go func() { -// select { -// case <-time.After(500 * time.Millisecond): -// api.stop() -// wg.Done() -// } -// }() -// wg.Wait() -// if len(api.logs) != 0 { -// t.Error("expected logs to be empty") -// } - -// if len(api.messages) != 0 { -// t.Error("expected messages to be empty") -// } -// } diff --git a/rpc/args.go b/rpc/args.go deleted file mode 100644 index aa7d205498..0000000000 --- a/rpc/args.go +++ /dev/null @@ -1,1230 +0,0 @@ -package rpc - -import ( - "encoding/json" - "fmt" - "math/big" - - "github.com/ethereum/go-ethereum/common" -) - -const ( - defaultLogLimit = 100 - defaultLogOffset = 0 -) - -func blockHeightFromJson(msg json.RawMessage, number *int64) error { - var raw interface{} - if err := json.Unmarshal(msg, &raw); err != nil { - return NewDecodeParamError(err.Error()) - } - return blockHeight(raw, number) -} - -func blockHeight(raw interface{}, number *int64) error { - // Parse as integer - num, ok := raw.(float64) - if ok { - *number = int64(num) - return nil - } - - // Parse as string/hexstring - str, ok := raw.(string) - if !ok { - return NewInvalidTypeError("", "not a number or string") - } - - switch str { - case "earliest": - *number = 0 - case "latest": - *number = -1 - case "pending": - *number = -2 - default: - if common.HasHexPrefix(str) { - *number = common.String2Big(str).Int64() - } else { - return NewInvalidTypeError("blockNumber", "is not a valid string") - } - } - - return nil -} - -func numString(raw interface{}) (*big.Int, error) { - var number *big.Int - // Parse as integer - num, ok := raw.(float64) - if ok { - number = big.NewInt(int64(num)) - return number, nil - } - - // Parse as string/hexstring - str, ok := raw.(string) - if ok { - number = common.String2Big(str) - return number, nil - } - - return nil, NewInvalidTypeError("", "not a number or string") -} - -// func toNumber(v interface{}) (int64, error) { -// var str string -// if v != nil { -// var ok bool -// str, ok = v.(string) -// if !ok { -// return 0, errors.New("is not a string or undefined") -// } -// } else { -// str = "latest" -// } - -// switch str { -// case "latest": -// return -1, nil -// default: -// return int64(common.Big(v.(string)).Int64()), nil -// } -// } - -// func hashString(raw interface{}, hash *string) error { -// argstr, ok := raw.(string) -// if !ok { -// return NewInvalidTypeError("", "not a string") -// } -// v := common.IsHex(argstr) -// hash = &argstr - -// return nil -// } - -type GetBlockByHashArgs struct { - BlockHash string - IncludeTxs bool -} - -func (args *GetBlockByHashArgs) UnmarshalJSON(b []byte) (err error) { - var obj []interface{} - - if err := json.Unmarshal(b, &obj); err != nil { - return NewDecodeParamError(err.Error()) - } - - if len(obj) < 2 { - return NewInsufficientParamsError(len(obj), 2) - } - - argstr, ok := obj[0].(string) - if !ok { - return NewInvalidTypeError("blockHash", "not a string") - } - args.BlockHash = argstr - - args.IncludeTxs = obj[1].(bool) - - return nil -} - -type GetBlockByNumberArgs struct { - BlockNumber int64 - IncludeTxs bool -} - -func (args *GetBlockByNumberArgs) UnmarshalJSON(b []byte) (err error) { - var obj []interface{} - if err := json.Unmarshal(b, &obj); err != nil { - return NewDecodeParamError(err.Error()) - } - - if len(obj) < 2 { - return NewInsufficientParamsError(len(obj), 2) - } - - if err := blockHeight(obj[0], &args.BlockNumber); err != nil { - return err - } - - args.IncludeTxs = obj[1].(bool) - - return nil -} - -type NewDataArgs struct { - Data string -} - -func (args *NewDataArgs) UnmarshalJSON(b []byte) (err error) { - var obj []interface{} - - if err := json.Unmarshal(b, &obj); err != nil { - return NewDecodeParamError(err.Error()) - } - - // Check for sufficient params - if len(obj) < 1 { - return NewInsufficientParamsError(len(obj), 1) - } - - data, ok := obj[0].(string) - if !ok { - return NewInvalidTypeError("data", "not a string") - } - args.Data = data - - if len(args.Data) == 0 { - return NewValidationError("data", "is required") - } - - return nil -} - -type NewTxArgs struct { - From string - To string - Nonce *big.Int - Value *big.Int - Gas *big.Int - GasPrice *big.Int - Data string - - BlockNumber int64 -} - -type NewSigArgs struct { - From string - Data string -} - -func (args *NewSigArgs) UnmarshalJSON(b []byte) (err error) { - var obj []interface{} - - if err := json.Unmarshal(b, &obj); err != nil { - return NewDecodeParamError(err.Error()) - } - - // Check for sufficient params - if len(obj) < 1 { - return NewInsufficientParamsError(len(obj), 1) - } - - from, ok := obj[0].(string) - if !ok { - return NewInvalidTypeError("from", "not a string") - } - args.From = from - - if len(args.From) == 0 { - return NewValidationError("from", "is required") - } - - data, ok := obj[1].(string) - if !ok { - return NewInvalidTypeError("data", "not a string") - } - args.Data = data - - if len(args.Data) == 0 { - return NewValidationError("data", "is required") - } - - return nil -} - -func (args *NewTxArgs) UnmarshalJSON(b []byte) (err error) { - var obj []json.RawMessage - var ext struct { - From string - To string - Nonce interface{} - Value interface{} - Gas interface{} - GasPrice interface{} - Data string - } - - // Decode byte slice to array of RawMessages - if err := json.Unmarshal(b, &obj); err != nil { - return NewDecodeParamError(err.Error()) - } - - // Check for sufficient params - if len(obj) < 1 { - return NewInsufficientParamsError(len(obj), 1) - } - - // Decode 0th RawMessage to temporary struct - if err := json.Unmarshal(obj[0], &ext); err != nil { - return NewDecodeParamError(err.Error()) - } - - if len(ext.From) == 0 { - return NewValidationError("from", "is required") - } - - args.From = ext.From - args.To = ext.To - args.Data = ext.Data - - var num *big.Int - if ext.Nonce != nil { - num, err = numString(ext.Nonce) - if err != nil { - return err - } - } - args.Nonce = num - - if ext.Value == nil { - num = big.NewInt(0) - } else { - num, err = numString(ext.Value) - if err != nil { - return err - } - } - args.Value = num - - num = nil - if ext.Gas != nil { - if num, err = numString(ext.Gas); err != nil { - return err - } - } else { - num = nil - } - args.Gas = num - - num = nil - if ext.GasPrice != nil { - if num, err = numString(ext.GasPrice); err != nil { - return err - } - } else { - num = nil - } - args.GasPrice = num - - // Check for optional BlockNumber param - if len(obj) > 1 { - if err := blockHeightFromJson(obj[1], &args.BlockNumber); err != nil { - return err - } - } else { - args.BlockNumber = -1 - } - - return nil -} - -type CallArgs struct { - From string - To string - Value *big.Int - Gas *big.Int - GasPrice *big.Int - Data string - - BlockNumber int64 -} - -func (args *CallArgs) UnmarshalJSON(b []byte) (err error) { - var obj []json.RawMessage - var ext struct { - From string - To string - Value interface{} - Gas interface{} - GasPrice interface{} - Data string - } - - // Decode byte slice to array of RawMessages - if err := json.Unmarshal(b, &obj); err != nil { - return NewDecodeParamError(err.Error()) - } - - // Check for sufficient params - if len(obj) < 1 { - return NewInsufficientParamsError(len(obj), 1) - } - - // Decode 0th RawMessage to temporary struct - if err := json.Unmarshal(obj[0], &ext); err != nil { - return NewDecodeParamError(err.Error()) - } - - args.From = ext.From - - if len(ext.To) == 0 { - return NewValidationError("to", "is required") - } - args.To = ext.To - - var num *big.Int - if ext.Value == nil { - num = big.NewInt(0) - } else { - if num, err = numString(ext.Value); err != nil { - return err - } - } - args.Value = num - - if ext.Gas != nil { - if num, err = numString(ext.Gas); err != nil { - return err - } - } else { - num = nil - } - args.Gas = num - - if ext.GasPrice != nil { - if num, err = numString(ext.GasPrice); err != nil { - return err - } - } else { - num = nil - } - args.GasPrice = num - - args.Data = ext.Data - - // Check for optional BlockNumber param - if len(obj) > 1 { - if err := blockHeightFromJson(obj[1], &args.BlockNumber); err != nil { - return err - } - } else { - args.BlockNumber = -1 - } - - return nil -} - -type GetStorageArgs struct { - Address string - BlockNumber int64 -} - -func (args *GetStorageArgs) UnmarshalJSON(b []byte) (err error) { - var obj []interface{} - if err := json.Unmarshal(b, &obj); err != nil { - return NewDecodeParamError(err.Error()) - } - - if len(obj) < 1 { - return NewInsufficientParamsError(len(obj), 1) - } - - addstr, ok := obj[0].(string) - if !ok { - return NewInvalidTypeError("address", "not a string") - } - args.Address = addstr - - if len(obj) > 1 { - if err := blockHeight(obj[1], &args.BlockNumber); err != nil { - return err - } - } else { - args.BlockNumber = -1 - } - - return nil -} - -type GetStorageAtArgs struct { - Address string - Key string - BlockNumber int64 -} - -func (args *GetStorageAtArgs) UnmarshalJSON(b []byte) (err error) { - var obj []interface{} - if err := json.Unmarshal(b, &obj); err != nil { - return NewDecodeParamError(err.Error()) - } - - if len(obj) < 2 { - return NewInsufficientParamsError(len(obj), 2) - } - - addstr, ok := obj[0].(string) - if !ok { - return NewInvalidTypeError("address", "not a string") - } - args.Address = addstr - - keystr, ok := obj[1].(string) - if !ok { - return NewInvalidTypeError("key", "not a string") - } - args.Key = keystr - - if len(obj) > 2 { - if err := blockHeight(obj[2], &args.BlockNumber); err != nil { - return err - } - } else { - args.BlockNumber = -1 - } - - return nil -} - -type GetTxCountArgs struct { - Address string - BlockNumber int64 -} - -func (args *GetTxCountArgs) UnmarshalJSON(b []byte) (err error) { - var obj []interface{} - if err := json.Unmarshal(b, &obj); err != nil { - return NewDecodeParamError(err.Error()) - } - - if len(obj) < 1 { - return NewInsufficientParamsError(len(obj), 1) - } - - addstr, ok := obj[0].(string) - if !ok { - return NewInvalidTypeError("address", "not a string") - } - args.Address = addstr - - if len(obj) > 1 { - if err := blockHeight(obj[1], &args.BlockNumber); err != nil { - return err - } - } else { - args.BlockNumber = -1 - } - - return nil -} - -type GetBalanceArgs struct { - Address string - BlockNumber int64 -} - -func (args *GetBalanceArgs) UnmarshalJSON(b []byte) (err error) { - var obj []interface{} - if err := json.Unmarshal(b, &obj); err != nil { - return NewDecodeParamError(err.Error()) - } - - if len(obj) < 1 { - return NewInsufficientParamsError(len(obj), 1) - } - - addstr, ok := obj[0].(string) - if !ok { - return NewInvalidTypeError("address", "not a string") - } - args.Address = addstr - - if len(obj) > 1 { - if err := blockHeight(obj[1], &args.BlockNumber); err != nil { - return err - } - } else { - args.BlockNumber = -1 - } - - return nil -} - -type GetDataArgs struct { - Address string - BlockNumber int64 -} - -func (args *GetDataArgs) UnmarshalJSON(b []byte) (err error) { - var obj []interface{} - if err := json.Unmarshal(b, &obj); err != nil { - return NewDecodeParamError(err.Error()) - } - - if len(obj) < 1 { - return NewInsufficientParamsError(len(obj), 1) - } - - addstr, ok := obj[0].(string) - if !ok { - return NewInvalidTypeError("address", "not a string") - } - args.Address = addstr - - if len(obj) > 1 { - if err := blockHeight(obj[1], &args.BlockNumber); err != nil { - return err - } - } else { - args.BlockNumber = -1 - } - - return nil -} - -type BlockNumArg struct { - BlockNumber int64 -} - -func (args *BlockNumArg) UnmarshalJSON(b []byte) (err error) { - var obj []interface{} - if err := json.Unmarshal(b, &obj); err != nil { - return NewDecodeParamError(err.Error()) - } - - if len(obj) < 1 { - return NewInsufficientParamsError(len(obj), 1) - } - - if err := blockHeight(obj[0], &args.BlockNumber); err != nil { - return err - } - - return nil -} - -type BlockNumIndexArgs struct { - BlockNumber int64 - Index int64 -} - -func (args *BlockNumIndexArgs) UnmarshalJSON(b []byte) (err error) { - var obj []interface{} - if err := json.Unmarshal(b, &obj); err != nil { - return NewDecodeParamError(err.Error()) - } - - if len(obj) < 2 { - return NewInsufficientParamsError(len(obj), 2) - } - - if err := blockHeight(obj[0], &args.BlockNumber); err != nil { - return err - } - - var arg1 *big.Int - if arg1, err = numString(obj[1]); err != nil { - return err - } - args.Index = arg1.Int64() - - return nil -} - -type HashArgs struct { - Hash string -} - -func (args *HashArgs) UnmarshalJSON(b []byte) (err error) { - var obj []interface{} - if err := json.Unmarshal(b, &obj); err != nil { - return NewDecodeParamError(err.Error()) - } - - if len(obj) < 1 { - return NewInsufficientParamsError(len(obj), 1) - } - - arg0, ok := obj[0].(string) - if !ok { - return NewInvalidTypeError("hash", "not a string") - } - args.Hash = arg0 - - return nil -} - -type HashIndexArgs struct { - Hash string - Index int64 -} - -func (args *HashIndexArgs) UnmarshalJSON(b []byte) (err error) { - var obj []interface{} - if err := json.Unmarshal(b, &obj); err != nil { - return NewDecodeParamError(err.Error()) - } - - if len(obj) < 2 { - return NewInsufficientParamsError(len(obj), 2) - } - - arg0, ok := obj[0].(string) - if !ok { - return NewInvalidTypeError("hash", "not a string") - } - args.Hash = arg0 - - arg1, ok := obj[1].(string) - if !ok { - return NewInvalidTypeError("index", "not a string") - } - args.Index = common.Big(arg1).Int64() - - return nil -} - -type Sha3Args struct { - Data string -} - -func (args *Sha3Args) UnmarshalJSON(b []byte) (err error) { - var obj []interface{} - if err := json.Unmarshal(b, &obj); err != nil { - return NewDecodeParamError(err.Error()) - } - - if len(obj) < 1 { - return NewInsufficientParamsError(len(obj), 1) - } - - argstr, ok := obj[0].(string) - if !ok { - return NewInvalidTypeError("data", "is not a string") - } - args.Data = argstr - return nil -} - -type BlockFilterArgs struct { - Earliest int64 - Latest int64 - Address []string - Topics [][]string - Skip int - Max int -} - -func (args *BlockFilterArgs) UnmarshalJSON(b []byte) (err error) { - var obj []struct { - FromBlock interface{} `json:"fromBlock"` - ToBlock interface{} `json:"toBlock"` - Limit interface{} `json:"limit"` - Offset interface{} `json:"offset"` - Address interface{} `json:"address"` - Topics interface{} `json:"topics"` - } - - if err = json.Unmarshal(b, &obj); err != nil { - return NewDecodeParamError(err.Error()) - } - - if len(obj) < 1 { - return NewInsufficientParamsError(len(obj), 1) - } - - // args.Earliest, err = toNumber(obj[0].ToBlock) - // if err != nil { - // return NewDecodeParamError(fmt.Sprintf("FromBlock %v", err)) - // } - // args.Latest, err = toNumber(obj[0].FromBlock) - // if err != nil { - // return NewDecodeParamError(fmt.Sprintf("ToBlock %v", err)) - - var num int64 - var numBig *big.Int - - // if blank then latest - if obj[0].FromBlock == nil { - num = -1 - } else { - if err := blockHeight(obj[0].FromBlock, &num); err != nil { - return err - } - } - // if -2 or other "silly" number, use latest - if num < 0 { - args.Earliest = -1 //latest block - } else { - args.Earliest = num - } - - // if blank than latest - if obj[0].ToBlock == nil { - num = -1 - } else { - if err := blockHeight(obj[0].ToBlock, &num); err != nil { - return err - } - } - args.Latest = num - - if obj[0].Limit == nil { - numBig = big.NewInt(defaultLogLimit) - } else { - if numBig, err = numString(obj[0].Limit); err != nil { - return err - } - } - args.Max = int(numBig.Int64()) - - if obj[0].Offset == nil { - numBig = big.NewInt(defaultLogOffset) - } else { - if numBig, err = numString(obj[0].Offset); err != nil { - return err - } - } - args.Skip = int(numBig.Int64()) - - if obj[0].Address != nil { - marg, ok := obj[0].Address.([]interface{}) - if ok { - v := make([]string, len(marg)) - for i, arg := range marg { - argstr, ok := arg.(string) - if !ok { - return NewInvalidTypeError(fmt.Sprintf("address[%d]", i), "is not a string") - } - v[i] = argstr - } - args.Address = v - } else { - argstr, ok := obj[0].Address.(string) - if ok { - v := make([]string, 1) - v[0] = argstr - args.Address = v - } else { - return NewInvalidTypeError("address", "is not a string or array") - } - } - } - - if obj[0].Topics != nil { - other, ok := obj[0].Topics.([]interface{}) - if ok { - topicdbl := make([][]string, len(other)) - for i, iv := range other { - if argstr, ok := iv.(string); ok { - // Found a string, push into first element of array - topicsgl := make([]string, 1) - topicsgl[0] = argstr - topicdbl[i] = topicsgl - } else if argarray, ok := iv.([]interface{}); ok { - // Found an array of other - topicdbl[i] = make([]string, len(argarray)) - for j, jv := range argarray { - if v, ok := jv.(string); ok { - topicdbl[i][j] = v - } else if jv == nil { - topicdbl[i][j] = "" - } else { - return NewInvalidTypeError(fmt.Sprintf("topic[%d][%d]", i, j), "is not a string") - } - } - } else if iv == nil { - topicdbl[i] = []string{""} - } else { - return NewInvalidTypeError(fmt.Sprintf("topic[%d]", i), "not a string or array") - } - } - args.Topics = topicdbl - return nil - } else { - return NewInvalidTypeError("topic", "is not a string or array") - } - } - - return nil -} - -type DbArgs struct { - Database string - Key string - Value []byte -} - -func (args *DbArgs) UnmarshalJSON(b []byte) (err error) { - var obj []interface{} - if err := json.Unmarshal(b, &obj); err != nil { - return NewDecodeParamError(err.Error()) - } - - if len(obj) < 2 { - return NewInsufficientParamsError(len(obj), 2) - } - - var objstr string - var ok bool - - if objstr, ok = obj[0].(string); !ok { - return NewInvalidTypeError("database", "not a string") - } - args.Database = objstr - - if objstr, ok = obj[1].(string); !ok { - return NewInvalidTypeError("key", "not a string") - } - args.Key = objstr - - if len(obj) > 2 { - objstr, ok = obj[2].(string) - if !ok { - return NewInvalidTypeError("value", "not a string") - } - - args.Value = []byte(objstr) - } - - return nil -} - -func (a *DbArgs) requirements() error { - if len(a.Database) == 0 { - return NewValidationError("Database", "cannot be blank") - } - if len(a.Key) == 0 { - return NewValidationError("Key", "cannot be blank") - } - return nil -} - -type DbHexArgs struct { - Database string - Key string - Value []byte -} - -func (args *DbHexArgs) UnmarshalJSON(b []byte) (err error) { - var obj []interface{} - if err := json.Unmarshal(b, &obj); err != nil { - return NewDecodeParamError(err.Error()) - } - - if len(obj) < 2 { - return NewInsufficientParamsError(len(obj), 2) - } - - var objstr string - var ok bool - - if objstr, ok = obj[0].(string); !ok { - return NewInvalidTypeError("database", "not a string") - } - args.Database = objstr - - if objstr, ok = obj[1].(string); !ok { - return NewInvalidTypeError("key", "not a string") - } - args.Key = objstr - - if len(obj) > 2 { - objstr, ok = obj[2].(string) - if !ok { - return NewInvalidTypeError("value", "not a string") - } - - args.Value = common.FromHex(objstr) - } - - return nil -} - -func (a *DbHexArgs) requirements() error { - if len(a.Database) == 0 { - return NewValidationError("Database", "cannot be blank") - } - if len(a.Key) == 0 { - return NewValidationError("Key", "cannot be blank") - } - return nil -} - -type WhisperMessageArgs struct { - Payload string - To string - From string - Topics []string - Priority uint32 - Ttl uint32 -} - -func (args *WhisperMessageArgs) UnmarshalJSON(b []byte) (err error) { - var obj []struct { - Payload string - To string - From string - Topics []string - Priority interface{} - Ttl interface{} - } - - if err = json.Unmarshal(b, &obj); err != nil { - return NewDecodeParamError(err.Error()) - } - - if len(obj) < 1 { - return NewInsufficientParamsError(len(obj), 1) - } - args.Payload = obj[0].Payload - args.To = obj[0].To - args.From = obj[0].From - args.Topics = obj[0].Topics - - var num *big.Int - if num, err = numString(obj[0].Priority); err != nil { - return err - } - args.Priority = uint32(num.Int64()) - - if num, err = numString(obj[0].Ttl); err != nil { - return err - } - args.Ttl = uint32(num.Int64()) - - return nil -} - -type CompileArgs struct { - Source string -} - -func (args *CompileArgs) UnmarshalJSON(b []byte) (err error) { - var obj []interface{} - if err := json.Unmarshal(b, &obj); err != nil { - return NewDecodeParamError(err.Error()) - } - - if len(obj) < 1 { - return NewInsufficientParamsError(len(obj), 1) - } - argstr, ok := obj[0].(string) - if !ok { - return NewInvalidTypeError("arg0", "is not a string") - } - args.Source = argstr - - return nil -} - -type FilterStringArgs struct { - Word string -} - -func (args *FilterStringArgs) UnmarshalJSON(b []byte) (err error) { - var obj []interface{} - if err := json.Unmarshal(b, &obj); err != nil { - return NewDecodeParamError(err.Error()) - } - - if len(obj) < 1 { - return NewInsufficientParamsError(len(obj), 1) - } - - var argstr string - argstr, ok := obj[0].(string) - if !ok { - return NewInvalidTypeError("filter", "not a string") - } - switch argstr { - case "latest", "pending": - break - default: - return NewValidationError("Word", "Must be `latest` or `pending`") - } - args.Word = argstr - return nil -} - -type FilterIdArgs struct { - Id int -} - -func (args *FilterIdArgs) UnmarshalJSON(b []byte) (err error) { - var obj []interface{} - if err := json.Unmarshal(b, &obj); err != nil { - return NewDecodeParamError(err.Error()) - } - - if len(obj) < 1 { - return NewInsufficientParamsError(len(obj), 1) - } - - var num *big.Int - if num, err = numString(obj[0]); err != nil { - return err - } - args.Id = int(num.Int64()) - - return nil -} - -type WhisperIdentityArgs struct { - Identity string -} - -func (args *WhisperIdentityArgs) UnmarshalJSON(b []byte) (err error) { - var obj []interface{} - if err := json.Unmarshal(b, &obj); err != nil { - return NewDecodeParamError(err.Error()) - } - - if len(obj) < 1 { - return NewInsufficientParamsError(len(obj), 1) - } - - argstr, ok := obj[0].(string) - if !ok { - return NewInvalidTypeError("arg0", "not a string") - } - // if !common.IsHex(argstr) { - // return NewValidationError("arg0", "not a hexstring") - // } - args.Identity = argstr - - return nil -} - -type WhisperFilterArgs struct { - To string - From string - Topics [][]string -} - -// UnmarshalJSON implements the json.Unmarshaler interface, invoked to convert a -// JSON message blob into a WhisperFilterArgs structure. -func (args *WhisperFilterArgs) UnmarshalJSON(b []byte) (err error) { - // Unmarshal the JSON message and sanity check - var obj []struct { - To interface{} `json:"to"` - From interface{} `json:"from"` - Topics interface{} `json:"topics"` - } - if err := json.Unmarshal(b, &obj); err != nil { - return NewDecodeParamError(err.Error()) - } - if len(obj) < 1 { - return NewInsufficientParamsError(len(obj), 1) - } - // Retrieve the simple data contents of the filter arguments - if obj[0].To == nil { - args.To = "" - } else { - argstr, ok := obj[0].To.(string) - if !ok { - return NewInvalidTypeError("to", "is not a string") - } - args.To = argstr - } - if obj[0].From == nil { - args.From = "" - } else { - argstr, ok := obj[0].From.(string) - if !ok { - return NewInvalidTypeError("from", "is not a string") - } - args.From = argstr - } - // Construct the nested topic array - if obj[0].Topics != nil { - // Make sure we have an actual topic array - list, ok := obj[0].Topics.([]interface{}) - if !ok { - return NewInvalidTypeError("topics", "is not an array") - } - // Iterate over each topic and handle nil, string or array - topics := make([][]string, len(list)) - for idx, field := range list { - switch value := field.(type) { - case nil: - topics[idx] = []string{} - - case string: - topics[idx] = []string{value} - - case []interface{}: - topics[idx] = make([]string, len(value)) - for i, nested := range value { - switch value := nested.(type) { - case nil: - topics[idx][i] = "" - - case string: - topics[idx][i] = value - - default: - return NewInvalidTypeError(fmt.Sprintf("topic[%d][%d]", idx, i), "is not a string") - } - } - default: - return NewInvalidTypeError(fmt.Sprintf("topic[%d]", idx), "not a string or array") - } - } - args.Topics = topics - } - return nil -} - -type SubmitWorkArgs struct { - Nonce uint64 - Header string - Digest string -} - -func (args *SubmitWorkArgs) UnmarshalJSON(b []byte) (err error) { - var obj []interface{} - if err = json.Unmarshal(b, &obj); err != nil { - return NewDecodeParamError(err.Error()) - } - - if len(obj) < 3 { - return NewInsufficientParamsError(len(obj), 3) - } - - var objstr string - var ok bool - if objstr, ok = obj[0].(string); !ok { - return NewInvalidTypeError("nonce", "not a string") - } - - args.Nonce = common.String2Big(objstr).Uint64() - if objstr, ok = obj[1].(string); !ok { - return NewInvalidTypeError("header", "not a string") - } - - args.Header = objstr - - if objstr, ok = obj[2].(string); !ok { - return NewInvalidTypeError("digest", "not a string") - } - - args.Digest = objstr - - return nil -} - -type SourceArgs struct { - Source string -} - -func (args *SourceArgs) UnmarshalJSON(b []byte) (err error) { - var obj []interface{} - if err := json.Unmarshal(b, &obj); err != nil { - return NewDecodeParamError(err.Error()) - } - - if len(obj) < 1 { - return NewInsufficientParamsError(len(obj), 1) - } - - arg0, ok := obj[0].(string) - if !ok { - return NewInvalidTypeError("source code", "not a string") - } - args.Source = arg0 - - return nil -} diff --git a/rpc/comms/comms.go b/rpc/comms/comms.go index 2af63e55dc..050e7b4e25 100644 --- a/rpc/comms/comms.go +++ b/rpc/comms/comms.go @@ -9,16 +9,32 @@ import ( "github.com/ethereum/go-ethereum/rpc/api" "github.com/ethereum/go-ethereum/rpc/codec" "github.com/ethereum/go-ethereum/rpc/shared" + "strings" ) const ( - jsonrpcver = "2.0" maxHttpSizeReqLength = 1024 * 1024 // 1MB ) +var ( + // List with all API's which are offered over the in proc interface by default + DefaultInProcApis = api.AllApis + + // List with all API's which are offered over the IPC interface by default + DefaultIpcApis = api.AllApis + + // List with API's which are offered over thr HTTP/RPC interface by default + DefaultHttpRpcApis = strings.Join([]string{ + api.DbApiName, api.EthApiName, api.NetApiName, api.Web3ApiName, + }, ",") +) + type EthereumClient interface { + // Close underlaying connection Close() + // Send request Send(interface{}) error + // Receive response Recv() (interface{}, error) } diff --git a/rpc/comms/http.go b/rpc/comms/http.go index 1fea8dc1d4..c0ea2cc780 100644 --- a/rpc/comms/http.go +++ b/rpc/comms/http.go @@ -63,3 +63,27 @@ func StopHttp() { httpListener = nil } } + + +type httpClient struct { + codec codec.ApiCoder +} + +// Create a new in process client +func NewHttpClient(cfg HttpConfig, codec codec.Codec) *httpClient { + return &httpClient{ + codec: codec.New(nil), + } +} + +func (self *httpClient) Close() { + // do nothing +} + +func (self *httpClient) Send(req interface{}) error { + return nil +} + +func (self *httpClient) Recv() (interface{}, error) { + return nil, nil +} \ No newline at end of file diff --git a/rpc/comms/http_net.go b/rpc/comms/http_net.go index 8d1bacc062..f326f1a7e7 100644 --- a/rpc/comms/http_net.go +++ b/rpc/comms/http_net.go @@ -90,7 +90,7 @@ func newStoppableHandler(h http.Handler, stop chan struct{}) http.Handler { case <-stop: w.Header().Set("Content-Type", "application/json") err := fmt.Errorf("RPC service stopped") - response := shared.NewRpcResponse(-1, jsonrpcver, nil, err) + response := shared.NewRpcResponse(-1, api.JsonRpcVersion, nil, err) httpSend(w, response) default: h.ServeHTTP(w, r) @@ -110,14 +110,14 @@ func httpSend(writer io.Writer, v interface{}) (n int, err error) { return writer.Write(payload) } -func gethHttpHandler(codec codec.Codec, api api.EthereumApi) http.Handler { +func gethHttpHandler(codec codec.Codec, a api.EthereumApi) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { w.Header().Set("Content-Type", "application/json") // Limit request size to resist DoS if req.ContentLength > maxHttpSizeReqLength { err := fmt.Errorf("Request too large") - response := shared.NewRpcErrorResponse(-1, jsonrpcver, -32700, err) + response := shared.NewRpcErrorResponse(-1, api.JsonRpcVersion, -32700, err) httpSend(w, &response) return } @@ -126,7 +126,7 @@ func gethHttpHandler(codec codec.Codec, api api.EthereumApi) http.Handler { payload, err := ioutil.ReadAll(req.Body) if err != nil { err := fmt.Errorf("Could not read request body") - response := shared.NewRpcErrorResponse(-1, jsonrpcver, -32700, err) + response := shared.NewRpcErrorResponse(-1, api.JsonRpcVersion, -32700, err) httpSend(w, &response) return } @@ -134,7 +134,7 @@ func gethHttpHandler(codec codec.Codec, api api.EthereumApi) http.Handler { c := codec.New(nil) var rpcReq shared.Request if err = c.Decode(payload, &rpcReq); err == nil { - reply, err := api.Execute(&rpcReq) + reply, err := a.Execute(&rpcReq) res := shared.NewRpcResponse(rpcReq.Id, rpcReq.Jsonrpc, reply, err) httpSend(w, &res) return @@ -146,7 +146,7 @@ func gethHttpHandler(codec codec.Codec, api api.EthereumApi) http.Handler { resCount := 0 for i, rpcReq := range reqBatch { - reply, err := api.Execute(&rpcReq) + reply, err := a.Execute(&rpcReq) if rpcReq.Id != nil { // this leaves nil entries in the response batch for later removal resBatch[i] = shared.NewRpcResponse(rpcReq.Id, rpcReq.Jsonrpc, reply, err) resCount += 1 @@ -161,7 +161,7 @@ func gethHttpHandler(codec codec.Codec, api api.EthereumApi) http.Handler { // invalid request err = fmt.Errorf("Could not decode request") - res := shared.NewRpcErrorResponse(-1, jsonrpcver, -32600, err) + res := shared.NewRpcErrorResponse(-1, api.JsonRpcVersion, -32600, err) httpSend(w, res) }) } diff --git a/rpc/comms/inproc.go b/rpc/comms/inproc.go new file mode 100644 index 0000000000..89cb93cdc3 --- /dev/null +++ b/rpc/comms/inproc.go @@ -0,0 +1,53 @@ +package comms + +import ( + "github.com/ethereum/go-ethereum/rpc/api" + "github.com/ethereum/go-ethereum/rpc/shared" + "fmt" + "github.com/ethereum/go-ethereum/rpc/codec" + "github.com/ethereum/go-ethereum/xeth" + "github.com/ethereum/go-ethereum/eth" +) + +type InProcClient struct { + api api.EthereumApi + codec codec.Codec + lastId interface{} + lastJsonrpc string + lastErr error + lastRes interface{} +} + +// Create a new in process client +func NewInProcClient(codec codec.Codec) *InProcClient { + return &InProcClient{ + codec: codec, + } +} + +func (self *InProcClient) Close() { + // do nothing +} + +// Need to setup api support +func (self *InProcClient) Initialize(xeth *xeth.XEth, eth *eth.Ethereum) { + if apis, err := api.ParseApiString(api.AllApis, self.codec, xeth, eth); err == nil { + self.api = api.Merge(apis...) + } +} + +func (self *InProcClient) Send(req interface{}) error { + if r, ok := req.(*shared.Request); ok { + self.lastId = r.Id + self.lastJsonrpc = r.Jsonrpc + self.lastRes, self.lastErr = self.api.Execute(r) + return self.lastErr + } + + return fmt.Errorf("Invalid request (%T)", req) +} + +func (self *InProcClient) Recv() (interface{}, error) { + return self.lastRes, self.lastErr + //return *shared.NewRpcResponse(self.lastId, self.lastJsonrpc, self.lastRes, self.lastErr), nil +} diff --git a/rpc/comms/ipc.go b/rpc/comms/ipc.go index a75039d17f..a072038035 100644 --- a/rpc/comms/ipc.go +++ b/rpc/comms/ipc.go @@ -10,19 +10,19 @@ type IpcConfig struct { } type ipcClient struct { - c codec.ApiCoder + codec codec.ApiCoder } func (self *ipcClient) Close() { - self.c.Close() + self.codec.Close() } func (self *ipcClient) Send(req interface{}) error { - return self.c.WriteResponse(req) + return self.codec.WriteResponse(req) } func (self *ipcClient) Recv() (interface{}, error) { - return self.c.ReadResponse() + return self.codec.ReadResponse() } // Create a new IPC client, UNIX domain socket on posix, named pipe on Windows diff --git a/rpc/http.go b/rpc/http.go deleted file mode 100644 index f37e102f5d..0000000000 --- a/rpc/http.go +++ /dev/null @@ -1,163 +0,0 @@ -package rpc - -import ( - "encoding/json" - "fmt" - "io" - "io/ioutil" - "net/http" - "strings" - - "github.com/ethereum/go-ethereum/logger" - "github.com/ethereum/go-ethereum/logger/glog" - "github.com/ethereum/go-ethereum/xeth" - "github.com/rs/cors" -) - -var rpclistener *stoppableTCPListener - -const ( - jsonrpcver = "2.0" - maxSizeReqLength = 1024 * 1024 // 1MB -) - -func Start(pipe *xeth.XEth, config RpcConfig) error { - if rpclistener != nil { - if fmt.Sprintf("%s:%d", config.ListenAddress, config.ListenPort) != rpclistener.Addr().String() { - return fmt.Errorf("RPC service already running on %s ", rpclistener.Addr().String()) - } - return nil // RPC service already running on given host/port - } - - l, err := newStoppableTCPListener(fmt.Sprintf("%s:%d", config.ListenAddress, config.ListenPort)) - if err != nil { - glog.V(logger.Error).Infof("Can't listen on %s:%d: %v", config.ListenAddress, config.ListenPort, err) - return err - } - rpclistener = l - - var handler http.Handler - if len(config.CorsDomain) > 0 { - var opts cors.Options - opts.AllowedMethods = []string{"POST"} - opts.AllowedOrigins = strings.Split(config.CorsDomain, " ") - - c := cors.New(opts) - handler = newStoppableHandler(c.Handler(JSONRPC(pipe)), l.stop) - } else { - handler = newStoppableHandler(JSONRPC(pipe), l.stop) - } - - go http.Serve(l, handler) - - return nil -} - -func Stop() error { - if rpclistener != nil { - rpclistener.Stop() - rpclistener = nil - } - - return nil -} - -// JSONRPC returns a handler that implements the Ethereum JSON-RPC API. -func JSONRPC(pipe *xeth.XEth) http.Handler { - api := NewEthereumApi(pipe) - - return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { - w.Header().Set("Content-Type", "application/json") - - // Limit request size to resist DoS - if req.ContentLength > maxSizeReqLength { - jsonerr := &RpcErrorObject{-32700, "Request too large"} - send(w, &RpcErrorResponse{Jsonrpc: jsonrpcver, Id: nil, Error: jsonerr}) - return - } - - // Read request body - defer req.Body.Close() - body, err := ioutil.ReadAll(req.Body) - if err != nil { - jsonerr := &RpcErrorObject{-32700, "Could not read request body"} - send(w, &RpcErrorResponse{Jsonrpc: jsonrpcver, Id: nil, Error: jsonerr}) - } - - // Try to parse the request as a single - var reqSingle RpcRequest - if err := json.Unmarshal(body, &reqSingle); err == nil { - response := RpcResponse(api, &reqSingle) - if reqSingle.Id != nil { - send(w, &response) - } - return - } - - // Try to parse the request to batch - var reqBatch []RpcRequest - if err := json.Unmarshal(body, &reqBatch); err == nil { - // Build response batch - resBatch := make([]*interface{}, len(reqBatch)) - resCount := 0 - - for i, request := range reqBatch { - response := RpcResponse(api, &request) - // this leaves nil entries in the response batch for later removal - if request.Id != nil { - resBatch[i] = response - resCount = resCount + 1 - } - } - - // make response omitting nil entries - respBatchComp := make([]*interface{}, resCount) - for _, v := range resBatch { - if v != nil { - respBatchComp[len(respBatchComp)-resCount] = v - resCount = resCount - 1 - } - } - - send(w, respBatchComp) - return - } - - // Not a batch or single request, error - jsonerr := &RpcErrorObject{-32600, "Could not decode request"} - send(w, &RpcErrorResponse{Jsonrpc: jsonrpcver, Id: nil, Error: jsonerr}) - }) -} - -func RpcResponse(api *EthereumApi, request *RpcRequest) *interface{} { - var reply, response interface{} - reserr := api.GetRequestReply(request, &reply) - switch reserr.(type) { - case nil: - response = &RpcSuccessResponse{Jsonrpc: jsonrpcver, Id: request.Id, Result: reply} - case *NotImplementedError, *NotAvailableError: - jsonerr := &RpcErrorObject{-32601, reserr.Error()} - response = &RpcErrorResponse{Jsonrpc: jsonrpcver, Id: request.Id, Error: jsonerr} - case *DecodeParamError, *InsufficientParamsError, *ValidationError, *InvalidTypeError: - jsonerr := &RpcErrorObject{-32602, reserr.Error()} - response = &RpcErrorResponse{Jsonrpc: jsonrpcver, Id: request.Id, Error: jsonerr} - default: - jsonerr := &RpcErrorObject{-32603, reserr.Error()} - response = &RpcErrorResponse{Jsonrpc: jsonrpcver, Id: request.Id, Error: jsonerr} - } - - glog.V(logger.Detail).Infof("Generated response: %T %s", response, response) - return &response -} - -func send(writer io.Writer, v interface{}) (n int, err error) { - var payload []byte - payload, err = json.MarshalIndent(v, "", "\t") - if err != nil { - glog.V(logger.Error).Infoln("Error marshalling JSON", err) - return 0, err - } - glog.V(logger.Detail).Infof("Sending payload: %s", payload) - - return writer.Write(payload) -} diff --git a/rpc/jeth.go b/rpc/jeth.go index e578775bb6..08d6a98782 100644 --- a/rpc/jeth.go +++ b/rpc/jeth.go @@ -1,31 +1,28 @@ package rpc import ( - "encoding/json" - "fmt" - - "reflect" - "github.com/ethereum/go-ethereum/jsre" - "github.com/ethereum/go-ethereum/rpc/codec" + "github.com/ethereum/go-ethereum/rpc/api" "github.com/ethereum/go-ethereum/rpc/comms" "github.com/ethereum/go-ethereum/rpc/shared" "github.com/robertkrimen/otto" + "encoding/json" + "fmt" ) type Jeth struct { - ethApi *EthereumApi - re *jsre.JSRE - ipcpath string + ethApi api.EthereumApi + re *jsre.JSRE + client comms.EthereumClient } -func NewJeth(ethApi *EthereumApi, re *jsre.JSRE, ipcpath string) *Jeth { - return &Jeth{ethApi, re, ipcpath} +func NewJeth(ethApi api.EthereumApi, re *jsre.JSRE, client comms.EthereumClient) *Jeth { + return &Jeth{ethApi, re, client} } func (self *Jeth) err(call otto.FunctionCall, code int, msg string, id interface{}) (response otto.Value) { - rpcerr := &RpcErrorObject{code, msg} - call.Otto.Set("ret_jsonrpc", jsonrpcver) + rpcerr := &shared.ErrorObject{code, msg} + call.Otto.Set("ret_jsonrpc", api.JsonRpcVersion) call.Otto.Set("ret_id", id) call.Otto.Set("ret_error", rpcerr) response, _ = call.Otto.Run(` @@ -34,6 +31,7 @@ func (self *Jeth) err(call otto.FunctionCall, code int, msg string, id interface return } + func (self *Jeth) Send(call otto.FunctionCall) (response otto.Value) { reqif, err := call.Argument(0).Export() if err != nil { @@ -41,11 +39,11 @@ func (self *Jeth) Send(call otto.FunctionCall) (response otto.Value) { } jsonreq, err := json.Marshal(reqif) - var reqs []RpcRequest + var reqs []shared.Request batch := true err = json.Unmarshal(jsonreq, &reqs) if err != nil { - reqs = make([]RpcRequest, 1) + reqs = make([]shared.Request, 1) err = json.Unmarshal(jsonreq, &reqs[0]) batch = false } @@ -55,12 +53,18 @@ func (self *Jeth) Send(call otto.FunctionCall) (response otto.Value) { for i, req := range reqs { var respif interface{} - err = self.ethApi.GetRequestReply(&req, &respif) + err := self.client.Send(&req)//self.ethApi.Execute(&req) + if err != nil { + fmt.Println("Error request:", err) + return self.err(call, -32603, err.Error(), req.Id) + } + respif, err = self.client.Recv() if err != nil { fmt.Println("Error response:", err) return self.err(call, -32603, err.Error(), req.Id) } - call.Otto.Set("ret_jsonrpc", jsonrpcver) + + call.Otto.Set("ret_jsonrpc", api.JsonRpcVersion) call.Otto.Set("ret_id", req.Id) res, _ := json.Marshal(respif) @@ -88,6 +92,7 @@ func (self *Jeth) Send(call otto.FunctionCall) (response otto.Value) { return } +/* func (self *Jeth) SendIpc(call otto.FunctionCall) (response otto.Value) { reqif, err := call.Argument(0).Export() if err != nil { @@ -102,11 +107,11 @@ func (self *Jeth) SendIpc(call otto.FunctionCall) (response otto.Value) { defer client.Close() jsonreq, err := json.Marshal(reqif) - var reqs []RpcRequest + var reqs []shared.Request batch := true err = json.Unmarshal(jsonreq, &reqs) if err != nil { - reqs = make([]RpcRequest, 1) + reqs = make([]shared.Request, 1) err = json.Unmarshal(jsonreq, &reqs[0]) batch = false } @@ -169,3 +174,4 @@ func (self *Jeth) SendIpc(call otto.FunctionCall) (response otto.Value) { return } +*/ diff --git a/rpc/responses.go b/rpc/responses.go deleted file mode 100644 index 9fdf60c022..0000000000 --- a/rpc/responses.go +++ /dev/null @@ -1,316 +0,0 @@ -package rpc - -import ( - "encoding/json" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/state" - "github.com/ethereum/go-ethereum/core/types" -) - -type BlockRes struct { - fullTx bool - - BlockNumber *hexnum `json:"number"` - BlockHash *hexdata `json:"hash"` - ParentHash *hexdata `json:"parentHash"` - Nonce *hexdata `json:"nonce"` - Sha3Uncles *hexdata `json:"sha3Uncles"` - LogsBloom *hexdata `json:"logsBloom"` - TransactionRoot *hexdata `json:"transactionsRoot"` - StateRoot *hexdata `json:"stateRoot"` - Miner *hexdata `json:"miner"` - Difficulty *hexnum `json:"difficulty"` - TotalDifficulty *hexnum `json:"totalDifficulty"` - Size *hexnum `json:"size"` - ExtraData *hexdata `json:"extraData"` - GasLimit *hexnum `json:"gasLimit"` - GasUsed *hexnum `json:"gasUsed"` - UnixTimestamp *hexnum `json:"timestamp"` - Transactions []*TransactionRes `json:"transactions"` - Uncles []*UncleRes `json:"uncles"` -} - -func (b *BlockRes) MarshalJSON() ([]byte, error) { - if b.fullTx { - var ext struct { - BlockNumber *hexnum `json:"number"` - BlockHash *hexdata `json:"hash"` - ParentHash *hexdata `json:"parentHash"` - Nonce *hexdata `json:"nonce"` - Sha3Uncles *hexdata `json:"sha3Uncles"` - LogsBloom *hexdata `json:"logsBloom"` - TransactionRoot *hexdata `json:"transactionsRoot"` - StateRoot *hexdata `json:"stateRoot"` - Miner *hexdata `json:"miner"` - Difficulty *hexnum `json:"difficulty"` - TotalDifficulty *hexnum `json:"totalDifficulty"` - Size *hexnum `json:"size"` - ExtraData *hexdata `json:"extraData"` - GasLimit *hexnum `json:"gasLimit"` - GasUsed *hexnum `json:"gasUsed"` - UnixTimestamp *hexnum `json:"timestamp"` - Transactions []*TransactionRes `json:"transactions"` - Uncles []*hexdata `json:"uncles"` - } - - ext.BlockNumber = b.BlockNumber - ext.BlockHash = b.BlockHash - ext.ParentHash = b.ParentHash - ext.Nonce = b.Nonce - ext.Sha3Uncles = b.Sha3Uncles - ext.LogsBloom = b.LogsBloom - ext.TransactionRoot = b.TransactionRoot - ext.StateRoot = b.StateRoot - ext.Miner = b.Miner - ext.Difficulty = b.Difficulty - ext.TotalDifficulty = b.TotalDifficulty - ext.Size = b.Size - ext.ExtraData = b.ExtraData - ext.GasLimit = b.GasLimit - ext.GasUsed = b.GasUsed - ext.UnixTimestamp = b.UnixTimestamp - ext.Transactions = b.Transactions - ext.Uncles = make([]*hexdata, len(b.Uncles)) - for i, u := range b.Uncles { - ext.Uncles[i] = u.BlockHash - } - return json.Marshal(ext) - } else { - var ext struct { - BlockNumber *hexnum `json:"number"` - BlockHash *hexdata `json:"hash"` - ParentHash *hexdata `json:"parentHash"` - Nonce *hexdata `json:"nonce"` - Sha3Uncles *hexdata `json:"sha3Uncles"` - LogsBloom *hexdata `json:"logsBloom"` - TransactionRoot *hexdata `json:"transactionsRoot"` - StateRoot *hexdata `json:"stateRoot"` - Miner *hexdata `json:"miner"` - Difficulty *hexnum `json:"difficulty"` - TotalDifficulty *hexnum `json:"totalDifficulty"` - Size *hexnum `json:"size"` - ExtraData *hexdata `json:"extraData"` - GasLimit *hexnum `json:"gasLimit"` - GasUsed *hexnum `json:"gasUsed"` - UnixTimestamp *hexnum `json:"timestamp"` - Transactions []*hexdata `json:"transactions"` - Uncles []*hexdata `json:"uncles"` - } - - ext.BlockNumber = b.BlockNumber - ext.BlockHash = b.BlockHash - ext.ParentHash = b.ParentHash - ext.Nonce = b.Nonce - ext.Sha3Uncles = b.Sha3Uncles - ext.LogsBloom = b.LogsBloom - ext.TransactionRoot = b.TransactionRoot - ext.StateRoot = b.StateRoot - ext.Miner = b.Miner - ext.Difficulty = b.Difficulty - ext.TotalDifficulty = b.TotalDifficulty - ext.Size = b.Size - ext.ExtraData = b.ExtraData - ext.GasLimit = b.GasLimit - ext.GasUsed = b.GasUsed - ext.UnixTimestamp = b.UnixTimestamp - ext.Transactions = make([]*hexdata, len(b.Transactions)) - for i, tx := range b.Transactions { - ext.Transactions[i] = tx.Hash - } - ext.Uncles = make([]*hexdata, len(b.Uncles)) - for i, u := range b.Uncles { - ext.Uncles[i] = u.BlockHash - } - return json.Marshal(ext) - } -} - -func NewBlockRes(block *types.Block, fullTx bool) *BlockRes { - if block == nil { - return nil - } - - res := new(BlockRes) - res.fullTx = fullTx - res.BlockNumber = newHexNum(block.Number()) - res.BlockHash = newHexData(block.Hash()) - res.ParentHash = newHexData(block.ParentHash()) - res.Nonce = newHexData(block.Nonce()) - res.Sha3Uncles = newHexData(block.Header().UncleHash) - res.LogsBloom = newHexData(block.Bloom()) - res.TransactionRoot = newHexData(block.Header().TxHash) - res.StateRoot = newHexData(block.Root()) - res.Miner = newHexData(block.Header().Coinbase) - res.Difficulty = newHexNum(block.Difficulty()) - res.TotalDifficulty = newHexNum(block.Td) - res.Size = newHexNum(block.Size().Int64()) - res.ExtraData = newHexData(block.Header().Extra) - res.GasLimit = newHexNum(block.GasLimit()) - res.GasUsed = newHexNum(block.GasUsed()) - res.UnixTimestamp = newHexNum(block.Time()) - - res.Transactions = make([]*TransactionRes, len(block.Transactions())) - for i, tx := range block.Transactions() { - res.Transactions[i] = NewTransactionRes(tx) - res.Transactions[i].BlockHash = res.BlockHash - res.Transactions[i].BlockNumber = res.BlockNumber - res.Transactions[i].TxIndex = newHexNum(i) - } - - res.Uncles = make([]*UncleRes, len(block.Uncles())) - for i, uncle := range block.Uncles() { - res.Uncles[i] = NewUncleRes(uncle) - } - - return res -} - -type TransactionRes struct { - Hash *hexdata `json:"hash"` - Nonce *hexnum `json:"nonce"` - BlockHash *hexdata `json:"blockHash"` - BlockNumber *hexnum `json:"blockNumber"` - TxIndex *hexnum `json:"transactionIndex"` - From *hexdata `json:"from"` - To *hexdata `json:"to"` - Value *hexnum `json:"value"` - Gas *hexnum `json:"gas"` - GasPrice *hexnum `json:"gasPrice"` - Input *hexdata `json:"input"` -} - -func NewTransactionRes(tx *types.Transaction) *TransactionRes { - if tx == nil { - return nil - } - - var v = new(TransactionRes) - v.Hash = newHexData(tx.Hash()) - v.Nonce = newHexNum(tx.Nonce()) - // v.BlockHash = - // v.BlockNumber = - // v.TxIndex = - from, _ := tx.From() - v.From = newHexData(from) - v.To = newHexData(tx.To()) - v.Value = newHexNum(tx.Value()) - v.Gas = newHexNum(tx.Gas()) - v.GasPrice = newHexNum(tx.GasPrice()) - v.Input = newHexData(tx.Data()) - return v -} - -type UncleRes struct { - BlockNumber *hexnum `json:"number"` - BlockHash *hexdata `json:"hash"` - ParentHash *hexdata `json:"parentHash"` - Nonce *hexdata `json:"nonce"` - Sha3Uncles *hexdata `json:"sha3Uncles"` - ReceiptHash *hexdata `json:"receiptHash"` - LogsBloom *hexdata `json:"logsBloom"` - TransactionRoot *hexdata `json:"transactionsRoot"` - StateRoot *hexdata `json:"stateRoot"` - Miner *hexdata `json:"miner"` - Difficulty *hexnum `json:"difficulty"` - ExtraData *hexdata `json:"extraData"` - GasLimit *hexnum `json:"gasLimit"` - GasUsed *hexnum `json:"gasUsed"` - UnixTimestamp *hexnum `json:"timestamp"` -} - -func NewUncleRes(h *types.Header) *UncleRes { - if h == nil { - return nil - } - - var v = new(UncleRes) - v.BlockNumber = newHexNum(h.Number) - v.BlockHash = newHexData(h.Hash()) - v.ParentHash = newHexData(h.ParentHash) - v.Sha3Uncles = newHexData(h.UncleHash) - v.Nonce = newHexData(h.Nonce[:]) - v.LogsBloom = newHexData(h.Bloom) - v.TransactionRoot = newHexData(h.TxHash) - v.StateRoot = newHexData(h.Root) - v.Miner = newHexData(h.Coinbase) - v.Difficulty = newHexNum(h.Difficulty) - v.ExtraData = newHexData(h.Extra) - v.GasLimit = newHexNum(h.GasLimit) - v.GasUsed = newHexNum(h.GasUsed) - v.UnixTimestamp = newHexNum(h.Time) - v.ReceiptHash = newHexData(h.ReceiptHash) - - return v -} - -// type FilterLogRes struct { -// Hash string `json:"hash"` -// Address string `json:"address"` -// Data string `json:"data"` -// BlockNumber string `json:"blockNumber"` -// TransactionHash string `json:"transactionHash"` -// BlockHash string `json:"blockHash"` -// TransactionIndex string `json:"transactionIndex"` -// LogIndex string `json:"logIndex"` -// } - -// type FilterWhisperRes struct { -// Hash string `json:"hash"` -// From string `json:"from"` -// To string `json:"to"` -// Expiry string `json:"expiry"` -// Sent string `json:"sent"` -// Ttl string `json:"ttl"` -// Topics string `json:"topics"` -// Payload string `json:"payload"` -// WorkProved string `json:"workProved"` -// } - -type LogRes struct { - Address *hexdata `json:"address"` - Topics []*hexdata `json:"topics"` - Data *hexdata `json:"data"` - BlockNumber *hexnum `json:"blockNumber"` - LogIndex *hexnum `json:"logIndex"` - BlockHash *hexdata `json:"blockHash"` - TransactionHash *hexdata `json:"transactionHash"` - TransactionIndex *hexnum `json:"transactionIndex"` -} - -func NewLogRes(log *state.Log) LogRes { - var l LogRes - l.Topics = make([]*hexdata, len(log.Topics)) - for j, topic := range log.Topics { - l.Topics[j] = newHexData(topic) - } - l.Address = newHexData(log.Address) - l.Data = newHexData(log.Data) - l.BlockNumber = newHexNum(log.Number) - l.LogIndex = newHexNum(log.Index) - l.TransactionHash = newHexData(log.TxHash) - l.TransactionIndex = newHexNum(log.TxIndex) - l.BlockHash = newHexData(log.BlockHash) - - return l -} - -func NewLogsRes(logs state.Logs) (ls []LogRes) { - ls = make([]LogRes, len(logs)) - - for i, log := range logs { - ls[i] = NewLogRes(log) - } - - return -} - -func NewHashesRes(hs []common.Hash) []string { - hashes := make([]string, len(hs)) - - for i, hash := range hs { - hashes[i] = hash.Hex() - } - - return hashes -} diff --git a/rpc/responses_test.go b/rpc/responses_test.go deleted file mode 100644 index 66323e5f59..0000000000 --- a/rpc/responses_test.go +++ /dev/null @@ -1,295 +0,0 @@ -package rpc - -import ( - "encoding/json" - "fmt" - "math/big" - "regexp" - "testing" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/state" - "github.com/ethereum/go-ethereum/core/types" -) - -const ( - reHash = `"0x[0-9a-f]{64}"` // 32 bytes - reHashOpt = `"(0x[0-9a-f]{64})"|null` // 32 bytes or null - reAddress = `"0x[0-9a-f]{40}"` // 20 bytes - reAddressOpt = `"0x[0-9a-f]{40}"|null` // 20 bytes or null - reNum = `"0x([1-9a-f][0-9a-f]{0,15})|0"` // must not have left-padded zeros - reNumNonZero = `"0x([1-9a-f][0-9a-f]{0,15})"` // non-zero required must not have left-padded zeros - reNumOpt = `"0x([1-9a-f][0-9a-f]{0,15})|0"|null` // must not have left-padded zeros or null - reData = `"0x[0-9a-f]*"` // can be "empty" - // reListHash = `[("\w":"0x[0-9a-f]{64}",?)*]` - // reListObj = `[("\w":(".+"|null),?)*]` -) - -func TestNewBlockRes(t *testing.T) { - tests := map[string]string{ - "number": reNum, - "hash": reHash, - "parentHash": reHash, - "nonce": reData, - "sha3Uncles": reHash, - "logsBloom": reData, - "transactionsRoot": reHash, - "stateRoot": reHash, - "miner": reAddress, - "difficulty": `"0x1"`, - "totalDifficulty": reNum, - "size": reNumNonZero, - "extraData": reData, - "gasLimit": reNum, - // "minGasPrice": "0x", - "gasUsed": reNum, - "timestamp": reNum, - // "transactions": reListHash, - // "uncles": reListHash, - } - - block := makeBlock() - v := NewBlockRes(block, false) - j, _ := json.Marshal(v) - - for k, re := range tests { - match, _ := regexp.MatchString(fmt.Sprintf(`{.*"%s":%s.*}`, k, re), string(j)) - if !match { - t.Error(fmt.Sprintf("%s output json does not match format %s. Got %s", k, re, j)) - } - } -} - -func TestNewBlockResTxFull(t *testing.T) { - tests := map[string]string{ - "number": reNum, - "hash": reHash, - "parentHash": reHash, - "nonce": reData, - "sha3Uncles": reHash, - "logsBloom": reData, - "transactionsRoot": reHash, - "stateRoot": reHash, - "miner": reAddress, - "difficulty": `"0x1"`, - "totalDifficulty": reNum, - "size": reNumNonZero, - "extraData": reData, - "gasLimit": reNum, - // "minGasPrice": "0x", - "gasUsed": reNum, - "timestamp": reNum, - // "transactions": reListHash, - // "uncles": reListHash, - } - - block := makeBlock() - v := NewBlockRes(block, true) - j, _ := json.Marshal(v) - - for k, re := range tests { - match, _ := regexp.MatchString(fmt.Sprintf(`{.*"%s":%s.*}`, k, re), string(j)) - if !match { - t.Error(fmt.Sprintf("%s output json does not match format %s. Got %s", k, re, j)) - } - } -} - -func TestBlockNil(t *testing.T) { - var block *types.Block - block = nil - u := NewBlockRes(block, false) - j, _ := json.Marshal(u) - if string(j) != "null" { - t.Errorf("Expected null but got %v", string(j)) - } -} - -func TestNewTransactionRes(t *testing.T) { - to := common.HexToAddress("0x02") - amount := big.NewInt(1) - gasAmount := big.NewInt(1) - gasPrice := big.NewInt(1) - data := []byte{1, 2, 3} - tx := types.NewTransactionMessage(to, amount, gasAmount, gasPrice, data) - - tests := map[string]string{ - "hash": reHash, - "nonce": reNum, - "blockHash": reHashOpt, - "blockNum": reNumOpt, - "transactionIndex": reNumOpt, - "from": reAddress, - "to": reAddressOpt, - "value": reNum, - "gas": reNum, - "gasPrice": reNum, - "input": reData, - } - - v := NewTransactionRes(tx) - v.BlockHash = newHexData(common.HexToHash("0x030201")) - v.BlockNumber = newHexNum(5) - v.TxIndex = newHexNum(0) - j, _ := json.Marshal(v) - for k, re := range tests { - match, _ := regexp.MatchString(fmt.Sprintf(`{.*"%s":%s.*}`, k, re), string(j)) - if !match { - t.Error(fmt.Sprintf("`%s` output json does not match format %s. Source %s", k, re, j)) - } - } - -} - -func TestTransactionNil(t *testing.T) { - var tx *types.Transaction - tx = nil - u := NewTransactionRes(tx) - j, _ := json.Marshal(u) - if string(j) != "null" { - t.Errorf("Expected null but got %v", string(j)) - } -} - -func TestNewUncleRes(t *testing.T) { - header := makeHeader() - u := NewUncleRes(header) - tests := map[string]string{ - "number": reNum, - "hash": reHash, - "parentHash": reHash, - "nonce": reData, - "sha3Uncles": reHash, - "receiptHash": reHash, - "transactionsRoot": reHash, - "stateRoot": reHash, - "miner": reAddress, - "difficulty": reNum, - "extraData": reData, - "gasLimit": reNum, - "gasUsed": reNum, - "timestamp": reNum, - } - - j, _ := json.Marshal(u) - for k, re := range tests { - match, _ := regexp.MatchString(fmt.Sprintf(`{.*"%s":%s.*}`, k, re), string(j)) - if !match { - t.Error(fmt.Sprintf("`%s` output json does not match format %s. Source %s", k, re, j)) - } - } -} - -func TestUncleNil(t *testing.T) { - var header *types.Header - header = nil - u := NewUncleRes(header) - j, _ := json.Marshal(u) - if string(j) != "null" { - t.Errorf("Expected null but got %v", string(j)) - } -} - -func TestNewLogRes(t *testing.T) { - log := makeStateLog(0) - tests := map[string]string{ - "address": reAddress, - // "topics": "[.*]" - "data": reData, - "blockNumber": reNum, - // "hash": reHash, - // "logIndex": reNum, - // "blockHash": reHash, - // "transactionHash": reHash, - "transactionIndex": reNum, - } - - v := NewLogRes(log) - j, _ := json.Marshal(v) - - for k, re := range tests { - match, _ := regexp.MatchString(fmt.Sprintf(`{.*"%s":%s.*}`, k, re), string(j)) - if !match { - t.Error(fmt.Sprintf("`%s` output json does not match format %s. Got %s", k, re, j)) - } - } - -} - -func TestNewLogsRes(t *testing.T) { - logs := make([]*state.Log, 3) - logs[0] = makeStateLog(1) - logs[1] = makeStateLog(2) - logs[2] = makeStateLog(3) - tests := map[string]string{} - - v := NewLogsRes(logs) - j, _ := json.Marshal(v) - - for k, re := range tests { - match, _ := regexp.MatchString(fmt.Sprintf(`[{.*"%s":%s.*}]`, k, re), string(j)) - if !match { - t.Error(fmt.Sprintf("%s output json does not match format %s. Got %s", k, re, j)) - } - } - -} - -func makeStateLog(num int) *state.Log { - address := common.HexToAddress("0x0") - data := []byte{1, 2, 3} - number := uint64(num) - topics := make([]common.Hash, 3) - topics = append(topics, common.HexToHash("0x00")) - topics = append(topics, common.HexToHash("0x10")) - topics = append(topics, common.HexToHash("0x20")) - log := state.NewLog(address, topics, data, number) - return log -} - -func makeHeader() *types.Header { - header := &types.Header{ - ParentHash: common.StringToHash("0x00"), - UncleHash: common.StringToHash("0x00"), - Coinbase: common.StringToAddress("0x00"), - Root: common.StringToHash("0x00"), - TxHash: common.StringToHash("0x00"), - ReceiptHash: common.StringToHash("0x00"), - // Bloom: - Difficulty: big.NewInt(88888888), - Number: big.NewInt(16), - GasLimit: big.NewInt(70000), - GasUsed: big.NewInt(25000), - Time: 124356789, - Extra: nil, - MixDigest: common.StringToHash("0x00"), - Nonce: [8]byte{0, 1, 2, 3, 4, 5, 6, 7}, - } - return header -} - -func makeBlock() *types.Block { - parentHash := common.HexToHash("0x01") - coinbase := common.HexToAddress("0x01") - root := common.HexToHash("0x01") - difficulty := common.Big1 - nonce := uint64(1) - block := types.NewBlock(parentHash, coinbase, root, difficulty, nonce, nil) - - txto := common.HexToAddress("0x02") - txamount := big.NewInt(1) - txgasAmount := big.NewInt(1) - txgasPrice := big.NewInt(1) - txdata := []byte{1, 2, 3} - - tx := types.NewTransactionMessage(txto, txamount, txgasAmount, txgasPrice, txdata) - txs := make([]*types.Transaction, 1) - txs[0] = tx - block.SetTransactions(txs) - - uncles := make([]*types.Header, 1) - uncles[0] = makeHeader() - block.SetUncles(uncles) - - return block -} diff --git a/rpc/types.go b/rpc/types.go deleted file mode 100644 index 1f49a3deac..0000000000 --- a/rpc/types.go +++ /dev/null @@ -1,381 +0,0 @@ -/* - This file is part of go-ethereum - - go-ethereum is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - go-ethereum is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with go-ethereum. If not, see . -*/ -package rpc - -import ( - "encoding/binary" - "encoding/hex" - "encoding/json" - "fmt" - "math/big" - "strings" - - "errors" - "net" - "net/http" - "time" - - "io" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" -) - -type hexdata struct { - data []byte - isNil bool -} - -func (d *hexdata) String() string { - return "0x" + common.Bytes2Hex(d.data) -} - -func (d *hexdata) MarshalJSON() ([]byte, error) { - if d.isNil { - return json.Marshal(nil) - } - return json.Marshal(d.String()) -} - -func newHexData(input interface{}) *hexdata { - d := new(hexdata) - - if input == nil { - d.isNil = true - return d - } - switch input := input.(type) { - case []byte: - d.data = input - case common.Hash: - d.data = input.Bytes() - case *common.Hash: - if input == nil { - d.isNil = true - } else { - d.data = input.Bytes() - } - case common.Address: - d.data = input.Bytes() - case *common.Address: - if input == nil { - d.isNil = true - } else { - d.data = input.Bytes() - } - case types.Bloom: - d.data = input.Bytes() - case *types.Bloom: - if input == nil { - d.isNil = true - } else { - d.data = input.Bytes() - } - case *big.Int: - if input == nil { - d.isNil = true - } else { - d.data = input.Bytes() - } - case int64: - d.data = big.NewInt(input).Bytes() - case uint64: - buff := make([]byte, 8) - binary.BigEndian.PutUint64(buff, input) - d.data = buff - case int: - d.data = big.NewInt(int64(input)).Bytes() - case uint: - d.data = big.NewInt(int64(input)).Bytes() - case int8: - d.data = big.NewInt(int64(input)).Bytes() - case uint8: - d.data = big.NewInt(int64(input)).Bytes() - case int16: - d.data = big.NewInt(int64(input)).Bytes() - case uint16: - buff := make([]byte, 2) - binary.BigEndian.PutUint16(buff, input) - d.data = buff - case int32: - d.data = big.NewInt(int64(input)).Bytes() - case uint32: - buff := make([]byte, 4) - binary.BigEndian.PutUint32(buff, input) - d.data = buff - case string: // hexstring - // aaargh ffs TODO: avoid back-and-forth hex encodings where unneeded - bytes, err := hex.DecodeString(strings.TrimPrefix(input, "0x")) - if err != nil { - d.isNil = true - } else { - d.data = bytes - } - default: - d.isNil = true - } - - return d -} - -type hexnum struct { - data []byte - isNil bool -} - -func (d *hexnum) String() string { - // Get hex string from bytes - out := common.Bytes2Hex(d.data) - // Trim leading 0s - out = strings.TrimLeft(out, "0") - // Output "0x0" when value is 0 - if len(out) == 0 { - out = "0" - } - return "0x" + out -} - -func (d *hexnum) MarshalJSON() ([]byte, error) { - if d.isNil { - return json.Marshal(nil) - } - return json.Marshal(d.String()) -} - -func newHexNum(input interface{}) *hexnum { - d := new(hexnum) - - d.data = newHexData(input).data - - return d -} - -type RpcConfig struct { - ListenAddress string - ListenPort uint - CorsDomain string -} - -type InvalidTypeError struct { - method string - msg string -} - -func (e *InvalidTypeError) Error() string { - return fmt.Sprintf("invalid type on field %s: %s", e.method, e.msg) -} - -func NewInvalidTypeError(method, msg string) *InvalidTypeError { - return &InvalidTypeError{ - method: method, - msg: msg, - } -} - -type InsufficientParamsError struct { - have int - want int -} - -func (e *InsufficientParamsError) Error() string { - return fmt.Sprintf("insufficient params, want %d have %d", e.want, e.have) -} - -func NewInsufficientParamsError(have int, want int) *InsufficientParamsError { - return &InsufficientParamsError{ - have: have, - want: want, - } -} - -type NotImplementedError struct { - Method string -} - -func (e *NotImplementedError) Error() string { - return fmt.Sprintf("%s method not implemented", e.Method) -} - -func NewNotImplementedError(method string) *NotImplementedError { - return &NotImplementedError{ - Method: method, - } -} - -type NotAvailableError struct { - Method string - Reason string -} - -func (e *NotAvailableError) Error() string { - return fmt.Sprintf("%s method not available: %s", e.Method, e.Reason) -} - -func NewNotAvailableError(method string, reason string) *NotAvailableError { - return &NotAvailableError{ - Method: method, - Reason: reason, - } -} - -type DecodeParamError struct { - err string -} - -func (e *DecodeParamError) Error() string { - return fmt.Sprintf("could not decode, %s", e.err) - -} - -func NewDecodeParamError(errstr string) error { - return &DecodeParamError{ - err: errstr, - } -} - -type ValidationError struct { - ParamName string - msg string -} - -func (e *ValidationError) Error() string { - return fmt.Sprintf("%s not valid, %s", e.ParamName, e.msg) -} - -func NewValidationError(param string, msg string) error { - return &ValidationError{ - ParamName: param, - msg: msg, - } -} - -type RpcRequest struct { - Id interface{} `json:"id"` - Jsonrpc string `json:"jsonrpc"` - Method string `json:"method"` - Params json.RawMessage `json:"params"` -} - -type RpcSuccessResponse struct { - Id interface{} `json:"id"` - Jsonrpc string `json:"jsonrpc"` - Result interface{} `json:"result"` -} - -type RpcErrorResponse struct { - Id interface{} `json:"id"` - Jsonrpc string `json:"jsonrpc"` - Error *RpcErrorObject `json:"error"` -} - -type RpcErrorObject struct { - Code int `json:"code"` - Message string `json:"message"` - // Data interface{} `json:"data"` -} - -type listenerHasStoppedError struct { - msg string -} - -func (self listenerHasStoppedError) Error() string { - return self.msg -} - -var listenerStoppedError = listenerHasStoppedError{"Listener stopped"} - -// When https://github.com/golang/go/issues/4674 is fixed this could be replaced -type stoppableTCPListener struct { - *net.TCPListener - stop chan struct{} // closed when the listener must stop -} - -// Wraps the default handler and checks if the RPC service was stopped. In that case it returns an -// error indicating that the service was stopped. This will only happen for connections which are -// kept open (HTTP keep-alive) when the RPC service was shutdown. -func newStoppableHandler(h http.Handler, stop chan struct{}) http.Handler { - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - select { - case <-stop: - w.Header().Set("Content-Type", "application/json") - jsonerr := &RpcErrorObject{-32603, "RPC service stopped"} - send(w, &RpcErrorResponse{Jsonrpc: jsonrpcver, Id: nil, Error: jsonerr}) - default: - h.ServeHTTP(w, r) - } - }) -} - -// Stop the listener and all accepted and still active connections. -func (self *stoppableTCPListener) Stop() { - close(self.stop) -} - -func newStoppableTCPListener(addr string) (*stoppableTCPListener, error) { - wl, err := net.Listen("tcp", addr) - if err != nil { - return nil, err - } - - if tcpl, ok := wl.(*net.TCPListener); ok { - stop := make(chan struct{}) - l := &stoppableTCPListener{tcpl, stop} - return l, nil - } - - return nil, errors.New("Unable to create TCP listener for RPC service") -} - -func (self *stoppableTCPListener) Accept() (net.Conn, error) { - for { - self.SetDeadline(time.Now().Add(time.Duration(1 * time.Second))) - c, err := self.TCPListener.AcceptTCP() - - select { - case <-self.stop: - if c != nil { // accept timeout - c.Close() - } - self.TCPListener.Close() - return nil, listenerStoppedError - default: - } - - if err != nil { - if netErr, ok := err.(net.Error); ok && netErr.Timeout() && netErr.Temporary() { - continue // regular timeout - } - } - - return &closableConnection{c, self.stop}, err - } -} - -type closableConnection struct { - *net.TCPConn - closed chan struct{} -} - -func (self *closableConnection) Read(b []byte) (n int, err error) { - select { - case <-self.closed: - self.TCPConn.Close() - return 0, io.EOF - default: - return self.TCPConn.Read(b) - } -} diff --git a/rpc/types_test.go b/rpc/types_test.go deleted file mode 100644 index 9ef7b8d389..0000000000 --- a/rpc/types_test.go +++ /dev/null @@ -1,204 +0,0 @@ -package rpc - -import ( - "bytes" - "encoding/json" - "math/big" - "testing" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" -) - -func TestInvalidTypeError(t *testing.T) { - err := NewInvalidTypeError("testField", "not string") - expected := "invalid type on field testField: not string" - - if err.Error() != expected { - t.Error(err.Error()) - } -} - -func TestInsufficientParamsError(t *testing.T) { - err := NewInsufficientParamsError(0, 1) - expected := "insufficient params, want 1 have 0" - - if err.Error() != expected { - t.Error(err.Error()) - } -} - -func TestNotImplementedError(t *testing.T) { - err := NewNotImplementedError("foo") - expected := "foo method not implemented" - - if err.Error() != expected { - t.Error(err.Error()) - } -} - -func TestDecodeParamError(t *testing.T) { - err := NewDecodeParamError("foo") - expected := "could not decode, foo" - - if err.Error() != expected { - t.Error(err.Error()) - } -} - -func TestValidationError(t *testing.T) { - err := NewValidationError("foo", "should be `bar`") - expected := "foo not valid, should be `bar`" - - if err.Error() != expected { - t.Error(err.Error()) - } -} - -func TestHexdataMarshalNil(t *testing.T) { - hd := newHexData([]byte{}) - hd.isNil = true - v, _ := json.Marshal(hd) - if string(v) != "null" { - t.Errorf("Expected null, got %s", v) - } -} - -func TestHexnumMarshalNil(t *testing.T) { - hn := newHexNum([]byte{}) - hn.isNil = true - v, _ := json.Marshal(hn) - if string(v) != "null" { - t.Errorf("Expected null, got %s", v) - } -} - -func TestHexdataNil(t *testing.T) { - v := newHexData(nil) - if v.isNil != true { - t.Errorf("Expected isNil to be true, but is %v", v.isNil) - } -} - -func TestHexdataPtrHash(t *testing.T) { - in := common.Hash{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31} - v := newHexData(&in) - if bytes.Compare(in.Bytes(), v.data) != 0 { - t.Errorf("Got % x expected % x", in, v.data) - } -} - -func TestHexdataPtrHashNil(t *testing.T) { - var in *common.Hash - in = nil - v := newHexData(in) - if !v.isNil { - t.Errorf("Expect isNil to be true, but is %v", v.isNil) - } -} - -func TestHexdataPtrAddress(t *testing.T) { - in := common.Address{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19} - v := newHexData(&in) - if bytes.Compare(in.Bytes(), v.data) != 0 { - t.Errorf("Got % x expected % x", in, v.data) - } -} - -func TestHexdataPtrAddressNil(t *testing.T) { - var in *common.Address - in = nil - v := newHexData(in) - if !v.isNil { - t.Errorf("Expect isNil to be true, but is %v", v.isNil) - } -} - -func TestHexdataPtrBloom(t *testing.T) { - in := types.Bloom{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19} - v := newHexData(&in) - if bytes.Compare(in.Bytes(), v.data) != 0 { - t.Errorf("Got % x expected % x", in, v.data) - } -} - -func TestHexdataPtrBloomNil(t *testing.T) { - var in *types.Bloom - in = nil - v := newHexData(in) - if !v.isNil { - t.Errorf("Expect isNil to be true, but is %v", v.isNil) - } -} - -func TestHexdataBigintNil(t *testing.T) { - var in *big.Int - in = nil - v := newHexData(in) - if !v.isNil { - t.Errorf("Expect isNil to be true, but is %v", v.isNil) - } -} - -func TestHexdataUint(t *testing.T) { - var in = uint(16) - var expected = []byte{0x10} - v := newHexData(in) - if bytes.Compare(expected, v.data) != 0 { - t.Errorf("Expected % x got % x", expected, v.data) - } -} - -func TestHexdataInt8(t *testing.T) { - var in = int8(16) - var expected = []byte{0x10} - v := newHexData(in) - if bytes.Compare(expected, v.data) != 0 { - t.Errorf("Expected % x got % x", expected, v.data) - } -} - -func TestHexdataUint8(t *testing.T) { - var in = uint8(16) - var expected = []byte{0x10} - v := newHexData(in) - if bytes.Compare(expected, v.data) != 0 { - t.Errorf("Expected % x got % x", expected, v.data) - } -} - -func TestHexdataInt16(t *testing.T) { - var in = int16(16) - var expected = []byte{0x10} - v := newHexData(in) - if bytes.Compare(expected, v.data) != 0 { - t.Errorf("Expected % x got % x", expected, v.data) - } -} - -func TestHexdataUint16(t *testing.T) { - var in = uint16(16) - var expected = []byte{0x0, 0x10} - v := newHexData(in) - if bytes.Compare(expected, v.data) != 0 { - t.Errorf("Expected % x got % x", expected, v.data) - } -} - -func TestHexdataInt32(t *testing.T) { - var in = int32(16) - var expected = []byte{0x10} - v := newHexData(in) - if bytes.Compare(expected, v.data) != 0 { - t.Errorf("Expected % x got % x", expected, v.data) - } -} - -func TestHexdataUint32(t *testing.T) { - var in = uint32(16) - var expected = []byte{0x0, 0x0, 0x0, 0x10} - v := newHexData(in) - if bytes.Compare(expected, v.data) != 0 { - t.Errorf("Expected % x got % x", expected, v.data) - } -} From 603192cfa7eb081d9504170677045794cff3b7ab Mon Sep 17 00:00:00 2001 From: Bas van Kervel Date: Wed, 17 Jun 2015 16:33:34 +0200 Subject: [PATCH 014/156] cleanup comments/code --- cmd/geth/js.go | 51 ------------------------- rpc/comms/inproc.go | 20 +++++----- rpc/jeth.go | 93 ++------------------------------------------- 3 files changed, 13 insertions(+), 151 deletions(-) diff --git a/cmd/geth/js.go b/cmd/geth/js.go index 2ae4817b3b..bb5143170f 100644 --- a/cmd/geth/js.go +++ b/cmd/geth/js.go @@ -279,57 +279,6 @@ func (js *jsre) apiBindings(f xeth.Frontend) error { return nil } -/* -func (js *jsre) apiBindings(ipcpath string, f xeth.Frontend) { - xe := xeth.New(js.ethereum, f) - apiNames, err := js.suportedApis(ipcpath) - if err != nil { - return - } - - ethApi := rpc.NewEthereumApi(xe) - jeth := rpc.NewJeth(ethApi, js.re, ipcpath) - - js.re.Set("jeth", struct{}{}) - t, _ := js.re.Get("jeth") - jethObj := t.Object() - - jethObj.Set("send", jeth.Send) - jethObj.Set("sendAsync", jeth.Send) - - err := js.re.Compile("bignumber.js", re.BigNumber_JS) - if err != nil { - utils.Fatalf("Error loading bignumber.js: %v", err) - } - - err = js.re.Compile("ethereum.js", re.Web3_JS) - if err != nil { - utils.Fatalf("Error loading ethereum.js: %v", err) - } - - _, err = js.re.Eval("var web3 = require('web3');") - if err != nil { - utils.Fatalf("Error requiring web3: %v", err) - } - - _, err = js.re.Eval("web3.setProvider(jeth)") - if err != nil { - utils.Fatalf("Error setting web3 provider: %v", err) - } - _, err = js.re.Eval(` -var eth = web3.eth; -var shh = web3.shh; -var db = web3.db; -var net = web3.net; - `) - if err != nil { - utils.Fatalf("Error setting namespaces: %v", err) - } - - js.re.Eval(globalRegistrar + "registrar = GlobalRegistrar.at(\"" + globalRegistrarAddr + "\");") -} -*/ - var ds, _ = docserver.New("/") func (self *jsre) ConfirmTransaction(tx string) bool { diff --git a/rpc/comms/inproc.go b/rpc/comms/inproc.go index 89cb93cdc3..1fdbf8ace2 100644 --- a/rpc/comms/inproc.go +++ b/rpc/comms/inproc.go @@ -1,21 +1,22 @@ package comms import ( - "github.com/ethereum/go-ethereum/rpc/api" - "github.com/ethereum/go-ethereum/rpc/shared" "fmt" - "github.com/ethereum/go-ethereum/rpc/codec" - "github.com/ethereum/go-ethereum/xeth" + "github.com/ethereum/go-ethereum/eth" + "github.com/ethereum/go-ethereum/rpc/api" + "github.com/ethereum/go-ethereum/rpc/codec" + "github.com/ethereum/go-ethereum/rpc/shared" + "github.com/ethereum/go-ethereum/xeth" ) type InProcClient struct { - api api.EthereumApi - codec codec.Codec - lastId interface{} + api api.EthereumApi + codec codec.Codec + lastId interface{} lastJsonrpc string - lastErr error - lastRes interface{} + lastErr error + lastRes interface{} } // Create a new in process client @@ -49,5 +50,4 @@ func (self *InProcClient) Send(req interface{}) error { func (self *InProcClient) Recv() (interface{}, error) { return self.lastRes, self.lastErr - //return *shared.NewRpcResponse(self.lastId, self.lastJsonrpc, self.lastRes, self.lastErr), nil } diff --git a/rpc/jeth.go b/rpc/jeth.go index 08d6a98782..e656e8fa93 100644 --- a/rpc/jeth.go +++ b/rpc/jeth.go @@ -1,13 +1,13 @@ package rpc import ( + "encoding/json" + "github.com/ethereum/go-ethereum/jsre" "github.com/ethereum/go-ethereum/rpc/api" "github.com/ethereum/go-ethereum/rpc/comms" "github.com/ethereum/go-ethereum/rpc/shared" "github.com/robertkrimen/otto" - "encoding/json" - "fmt" ) type Jeth struct { @@ -31,7 +31,6 @@ func (self *Jeth) err(call otto.FunctionCall, code int, msg string, id interface return } - func (self *Jeth) Send(call otto.FunctionCall) (response otto.Value) { reqif, err := call.Argument(0).Export() if err != nil { @@ -53,14 +52,12 @@ func (self *Jeth) Send(call otto.FunctionCall) (response otto.Value) { for i, req := range reqs { var respif interface{} - err := self.client.Send(&req)//self.ethApi.Execute(&req) + err := self.client.Send(&req) if err != nil { - fmt.Println("Error request:", err) return self.err(call, -32603, err.Error(), req.Id) } respif, err = self.client.Recv() if err != nil { - fmt.Println("Error response:", err) return self.err(call, -32603, err.Error(), req.Id) } @@ -91,87 +88,3 @@ func (self *Jeth) Send(call otto.FunctionCall) (response otto.Value) { return } - -/* -func (self *Jeth) SendIpc(call otto.FunctionCall) (response otto.Value) { - reqif, err := call.Argument(0).Export() - if err != nil { - return self.err(call, -32700, err.Error(), nil) - } - - client, err := comms.NewIpcClient(comms.IpcConfig{self.ipcpath}, codec.JSON) - if err != nil { - fmt.Println("Unable to connect to geth.") - return self.err(call, -32603, err.Error(), -1) - } - defer client.Close() - - jsonreq, err := json.Marshal(reqif) - var reqs []shared.Request - batch := true - err = json.Unmarshal(jsonreq, &reqs) - if err != nil { - reqs = make([]shared.Request, 1) - err = json.Unmarshal(jsonreq, &reqs[0]) - batch = false - } - - call.Otto.Set("response_len", len(reqs)) - call.Otto.Run("var ret_response = new Array(response_len);") - - for i, req := range reqs { - err := client.Send(&req) - if err != nil { - fmt.Println("Error send request:", err) - return self.err(call, -32603, err.Error(), req.Id) - } - - respif, err := client.Recv() - if err != nil { - fmt.Println("Error recv response:", err) - return self.err(call, -32603, err.Error(), req.Id) - } - - if res, ok := respif.(shared.SuccessResponse); ok { - call.Otto.Set("ret_id", res.Id) - call.Otto.Set("ret_jsonrpc", res.Jsonrpc) - resObj, _ := json.Marshal(res.Result) - call.Otto.Set("ret_result", string(resObj)) - call.Otto.Set("response_idx", i) - - response, err = call.Otto.Run(` - ret_response[response_idx] = { jsonrpc: ret_jsonrpc, id: ret_id, result: JSON.parse(ret_result) }; - `) - } else if res, ok := respif.(shared.ErrorResponse); ok { - fmt.Printf("Error: %s (%d)\n", res.Error.Message, res.Error.Code) - - call.Otto.Set("ret_id", res.Id) - call.Otto.Set("ret_jsonrpc", res.Jsonrpc) - call.Otto.Set("ret_error", res.Error) - call.Otto.Set("response_idx", i) - - response, _ = call.Otto.Run(` - ret_response = { jsonrpc: ret_jsonrpc, id: ret_id, error: ret_error }; - `) - return - } else { - fmt.Printf("unexpected response\n", reflect.TypeOf(respif)) - } - } - - if !batch { - call.Otto.Run("ret_response = ret_response[0];") - } - - if call.Argument(1).IsObject() { - call.Otto.Set("callback", call.Argument(1)) - call.Otto.Run(` - if (Object.prototype.toString.call(callback) == '[object Function]') { - callback(null, ret_response); - } - `) - } - - return -} -*/ From 36a6b16a3bec15131318ebed1c8c2f9204a5a328 Mon Sep 17 00:00:00 2001 From: Bas van Kervel Date: Thu, 18 Jun 2015 09:46:20 +0200 Subject: [PATCH 015/156] removed console command --- Makefile | 5 - cmd/console/admin.go | 9 - cmd/console/contracts.go | 6 - cmd/console/js.go | 454 --------------------------------------- cmd/console/main.go | 103 --------- 5 files changed, 577 deletions(-) delete mode 100644 cmd/console/admin.go delete mode 100644 cmd/console/contracts.go delete mode 100644 cmd/console/js.go delete mode 100644 cmd/console/main.go diff --git a/Makefile b/Makefile index b243d26796..03e3bf4c6f 100644 --- a/Makefile +++ b/Makefile @@ -10,11 +10,6 @@ geth: @echo "Done building." @echo "Run \"$(GOBIN)/geth\" to launch geth." -console: - build/env.sh go install -v $(shell build/ldflags.sh) ./cmd/console - @echo "Done building." - @echo "Run \"$(GOBIN)/console\" to launch the console." - mist: build/env.sh go install -v $(shell build/ldflags.sh) ./cmd/mist @echo "Done building." diff --git a/cmd/console/admin.go b/cmd/console/admin.go deleted file mode 100644 index dee88e3a0a..0000000000 --- a/cmd/console/admin.go +++ /dev/null @@ -1,9 +0,0 @@ -package main - -/* -node admin bindings -*/ - -func (js *jsre) adminBindings() { - -} diff --git a/cmd/console/contracts.go b/cmd/console/contracts.go deleted file mode 100644 index 1f27838d15..0000000000 --- a/cmd/console/contracts.go +++ /dev/null @@ -1,6 +0,0 @@ -package main - -var ( - globalRegistrar = `var GlobalRegistrar = web3.eth.contract([{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"name","outputs":[{"name":"o_name","type":"bytes32"}],"type":"function"},{"constant":true,"inputs":[{"name":"_name","type":"bytes32"}],"name":"owner","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":true,"inputs":[{"name":"_name","type":"bytes32"}],"name":"content","outputs":[{"name":"","type":"bytes32"}],"type":"function"},{"constant":true,"inputs":[{"name":"_name","type":"bytes32"}],"name":"addr","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"bytes32"}],"name":"reserve","outputs":[],"type":"function"},{"constant":true,"inputs":[{"name":"_name","type":"bytes32"}],"name":"subRegistrar","outputs":[{"name":"o_subRegistrar","type":"address"}],"type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"bytes32"},{"name":"_newOwner","type":"address"}],"name":"transfer","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"bytes32"},{"name":"_registrar","type":"address"}],"name":"setSubRegistrar","outputs":[],"type":"function"},{"constant":false,"inputs":[],"name":"Registrar","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"bytes32"},{"name":"_a","type":"address"},{"name":"_primary","type":"bool"}],"name":"setAddress","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"bytes32"},{"name":"_content","type":"bytes32"}],"name":"setContent","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"bytes32"}],"name":"disown","outputs":[],"type":"function"},{"constant":true,"inputs":[{"name":"_name","type":"bytes32"}],"name":"register","outputs":[{"name":"","type":"address"}],"type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"name","type":"bytes32"}],"name":"Changed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"name","type":"bytes32"},{"indexed":true,"name":"addr","type":"address"}],"name":"PrimaryChanged","type":"event"}]);` - globalRegistrarAddr = "0xc6d9d2cd449a754c494264e1809c50e34d64562b" -) diff --git a/cmd/console/js.go b/cmd/console/js.go deleted file mode 100644 index 15ea9bedd8..0000000000 --- a/cmd/console/js.go +++ /dev/null @@ -1,454 +0,0 @@ -// Copyright (c) 2013-2014, Jeffrey Wilcke. All rights reserved. -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this library; if not, write to the Free Software -// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, -// MA 02110-1301 USA - -package main - -import ( - "bufio" - "fmt" - "math/big" - "os" - "os/signal" - "path/filepath" - "strings" - - "encoding/json" - - "sort" - - "github.com/codegangsta/cli" - "github.com/ethereum/go-ethereum/cmd/utils" - "github.com/ethereum/go-ethereum/common/docserver" - re "github.com/ethereum/go-ethereum/jsre" - "github.com/ethereum/go-ethereum/rpc" - "github.com/ethereum/go-ethereum/rpc/api" - "github.com/ethereum/go-ethereum/rpc/codec" - "github.com/ethereum/go-ethereum/rpc/comms" - "github.com/ethereum/go-ethereum/rpc/shared" - "github.com/peterh/liner" - "github.com/robertkrimen/otto" -) - -type prompter interface { - AppendHistory(string) - Prompt(p string) (string, error) - PasswordPrompt(p string) (string, error) -} - -type dumbterm struct{ r *bufio.Reader } - -func (r dumbterm) Prompt(p string) (string, error) { - fmt.Print(p) - line, err := r.r.ReadString('\n') - return strings.TrimSuffix(line, "\n"), err -} - -func (r dumbterm) PasswordPrompt(p string) (string, error) { - fmt.Println("!! Unsupported terminal, password will echo.") - fmt.Print(p) - input, err := bufio.NewReader(os.Stdin).ReadString('\n') - fmt.Println() - return input, err -} - -func (r dumbterm) AppendHistory(string) {} - -type jsre struct { - re *re.JSRE - wait chan *big.Int - ps1 string - atexit func() - datadir string - prompter -} - -var ( - loadedModulesMethods map[string][]string -) - -func loadAutoCompletion(js *jsre, ipcpath string) { - modules, err := js.suportedApis(ipcpath) - if err != nil { - utils.Fatalf("Unable to determine supported modules - %v", err) - } - - loadedModulesMethods = make(map[string][]string) - for module, _ := range modules { - loadedModulesMethods[module] = api.AutoCompletion[module] - } -} - -func keywordCompleter(line string) []string { - results := make([]string, 0) - - if strings.Contains(line, ".") { - elements := strings.Split(line, ".") - if len(elements) == 2 { - module := elements[0] - partialMethod := elements[1] - if methods, found := loadedModulesMethods[module]; found { - for _, method := range methods { - if strings.HasPrefix(method, partialMethod) { // e.g. debug.se - results = append(results, module+"."+method) - } - } - } - } - } else { - for module, methods := range loadedModulesMethods { - if line == module { // user typed in full module name, show all methods - for _, method := range methods { - results = append(results, module+"."+method) - } - } else if strings.HasPrefix(module, line) { // partial method name, e.g. admi - results = append(results, module) - } - } - } - return results -} - -func apiWordCompleter(line string, pos int) (head string, completions []string, tail string) { - if len(line) == 0 { - return "", nil, "" - } - - i := 0 - for i = pos - 1; i > 0; i-- { - if line[i] == '.' || (line[i] >= 'a' && line[i] <= 'z') || (line[i] >= 'A' && line[i] <= 'Z') { - continue - } - if i >= 3 && line[i] == '3' && line[i-3] == 'w' && line[i-2] == 'e' && line[i-1] == 'b' { - continue - } - i += 1 - break - } - - begin := line[:i] - keyword := line[i:pos] - end := line[pos:] - - completionWords := keywordCompleter(keyword) - return begin, completionWords, end -} - -func newJSRE(libPath, ipcpath string) *jsre { - js := &jsre{ps1: "> "} - js.wait = make(chan *big.Int) - - // update state in separare forever blocks - js.re = re.New(libPath) - js.apiBindings(ipcpath) - - if !liner.TerminalSupported() { - js.prompter = dumbterm{bufio.NewReader(os.Stdin)} - } else { - lr := liner.NewLiner() - js.withHistory(func(hist *os.File) { lr.ReadHistory(hist) }) - lr.SetCtrlCAborts(true) - loadAutoCompletion(js, ipcpath) - lr.SetWordCompleter(apiWordCompleter) - lr.SetTabCompletionStyle(liner.TabPrints) - js.prompter = lr - js.atexit = func() { - js.withHistory(func(hist *os.File) { hist.Truncate(0); lr.WriteHistory(hist) }) - lr.Close() - close(js.wait) - } - } - return js -} - -func (js *jsre) apiBindings(ipcpath string) { - ethApi := rpc.NewEthereumApi(nil) - jeth := rpc.NewJeth(ethApi, js.re, ipcpath) - - js.re.Set("jeth", struct{}{}) - t, _ := js.re.Get("jeth") - jethObj := t.Object() - jethObj.Set("send", jeth.SendIpc) - jethObj.Set("sendAsync", jeth.SendIpc) - - err := js.re.Compile("bignumber.js", re.BigNumber_JS) - if err != nil { - utils.Fatalf("Error loading bignumber.js: %v", err) - } - - err = js.re.Compile("ethereum.js", re.Web3_JS) - if err != nil { - utils.Fatalf("Error loading web3.js: %v", err) - } - - _, err = js.re.Eval("var web3 = require('web3');") - if err != nil { - utils.Fatalf("Error requiring web3: %v", err) - } - - _, err = js.re.Eval("web3.setProvider(jeth)") - if err != nil { - utils.Fatalf("Error setting web3 provider: %v", err) - } - - apis, err := js.suportedApis(ipcpath) - if err != nil { - utils.Fatalf("Unable to determine supported api's: %v", err) - } - - // load only supported API's in javascript runtime - shortcuts := "var eth = web3.eth; " - for apiName, _ := range apis { - if apiName == api.Web3ApiName || apiName == api.EthApiName { - continue // manually mapped - } - - if err = js.re.Compile(fmt.Sprintf("%s.js", apiName), api.Javascript(apiName)); err == nil { - shortcuts += fmt.Sprintf("var %s = web3.%s; ", apiName, apiName) - } else { - utils.Fatalf("Error loading %s.js: %v", apiName, err) - } - } - - _, err = js.re.Eval(shortcuts) - - if err != nil { - utils.Fatalf("Error setting namespaces: %v", err) - } - - js.re.Eval(globalRegistrar + "registrar = GlobalRegistrar.at(\"" + globalRegistrarAddr + "\");") -} - -var ds, _ = docserver.New("/") - -/* -func (self *jsre) ConfirmTransaction(tx string) bool { - if self.ethereum.NatSpec { - notice := natspec.GetNotice(self.xeth, tx, ds) - fmt.Println(notice) - answer, _ := self.Prompt("Confirm Transaction [y/n]") - return strings.HasPrefix(strings.Trim(answer, " "), "y") - } else { - return true - } -} - -func (self *jsre) UnlockAccount(addr []byte) bool { - fmt.Printf("Please unlock account %x.\n", addr) - pass, err := self.PasswordPrompt("Passphrase: ") - if err != nil { - return false - } - // TODO: allow retry - if err := self.ethereum.AccountManager().Unlock(common.BytesToAddress(addr), pass); err != nil { - return false - } else { - fmt.Println("Account is now unlocked for this session.") - return true - } -} -*/ - -func (self *jsre) exec(filename string) error { - if err := self.re.Exec(filename); err != nil { - self.re.Stop(false) - return fmt.Errorf("Javascript Error: %v", err) - } - self.re.Stop(true) - return nil -} - -func (self *jsre) suportedApis(ipcpath string) (map[string]string, error) { - config := comms.IpcConfig{ - Endpoint: ipcpath, - } - - client, err := comms.NewIpcClient(config, codec.JSON) - if err != nil { - return nil, err - } - - req := shared.Request{ - Id: 1, - Jsonrpc: "2.0", - Method: "modules", - } - - err = client.Send(req) - if err != nil { - return nil, err - } - - res, err := client.Recv() - if err != nil { - return nil, err - } - - if sucRes, ok := res.(shared.SuccessResponse); ok { - data, _ := json.Marshal(sucRes.Result) - apis := make(map[string]string) - err = json.Unmarshal(data, &apis) - if err == nil { - return apis, nil - } - } - - return nil, fmt.Errorf("Unable to determine supported API's") -} - -// show summary of current geth instance -func (self *jsre) welcome(ipcpath string) { - self.re.Eval(`console.log('instance: ' + web3.version.client);`) - self.re.Eval(`console.log(' datadir: ' + admin.datadir);`) - self.re.Eval(`console.log("coinbase: " + eth.coinbase);`) - self.re.Eval(`var lastBlockTimestamp = 1000 * eth.getBlock(eth.blockNumber).timestamp`) - self.re.Eval(`console.log("at block: " + eth.blockNumber + " (" + new Date(lastBlockTimestamp).toLocaleDateString() - + " " + new Date(lastBlockTimestamp).toLocaleTimeString() + ")");`) - - if modules, err := self.suportedApis(ipcpath); err == nil { - loadedModules := make([]string, 0) - for api, version := range modules { - loadedModules = append(loadedModules, fmt.Sprintf("%s:%s", api, version)) - } - sort.Strings(loadedModules) - - self.re.Eval(fmt.Sprintf("var modules = '%s';", strings.Join(loadedModules, " "))) - self.re.Eval(`console.log(" modules: " + modules);`) - } -} - -func (self *jsre) batch(args cli.Args) { - statement := strings.Join(args, " ") - val, err := self.re.Run(statement) - - if err != nil { - fmt.Printf("error: %v", err) - } else if val.IsDefined() && val.IsObject() { - obj, _ := self.re.Get("ret_result") - fmt.Printf("%v", obj) - } else if val.IsDefined() { - fmt.Printf("%v", val) - } - - if self.atexit != nil { - self.atexit() - } - - self.re.Stop(false) -} - -func (self *jsre) interactive(ipcpath string) { - self.welcome(ipcpath) - - // Read input lines. - prompt := make(chan string) - inputln := make(chan string) - go func() { - defer close(inputln) - for { - line, err := self.Prompt(<-prompt) - if err != nil { - return - } - inputln <- line - } - }() - // Wait for Ctrl-C, too. - sig := make(chan os.Signal, 1) - signal.Notify(sig, os.Interrupt) - - defer func() { - if self.atexit != nil { - self.atexit() - } - self.re.Stop(false) - }() - for { - prompt <- self.ps1 - select { - case <-sig: - fmt.Println("caught interrupt, exiting") - return - case input, ok := <-inputln: - if !ok || indentCount <= 0 && input == "exit" { - return - } - if input == "" { - continue - } - str += input + "\n" - self.setIndent() - if indentCount <= 0 { - hist := str[:len(str)-1] - self.AppendHistory(hist) - self.parseInput(str) - str = "" - } - } - } -} - -func (self *jsre) withHistory(op func(*os.File)) { - hist, err := os.OpenFile(filepath.Join(self.datadir, "history"), os.O_RDWR|os.O_CREATE, os.ModePerm) - if err != nil { - fmt.Printf("unable to open history file: %v\n", err) - return - } - op(hist) - hist.Close() -} - -func (self *jsre) parseInput(code string) { - defer func() { - if r := recover(); r != nil { - fmt.Println("[native] error", r) - } - }() - value, err := self.re.Run(code) - if err != nil { - if ottoErr, ok := err.(*otto.Error); ok { - fmt.Println(ottoErr.String()) - } else { - fmt.Println(err) - } - return - } - self.printValue(value) -} - -var indentCount = 0 -var str = "" - -func (self *jsre) setIndent() { - open := strings.Count(str, "{") - open += strings.Count(str, "(") - closed := strings.Count(str, "}") - closed += strings.Count(str, ")") - indentCount = open - closed - if indentCount <= 0 { - self.ps1 = "> " - } else { - self.ps1 = strings.Join(make([]string, indentCount*2), "..") - self.ps1 += " " - } -} - -func (self *jsre) printValue(v interface{}) { - val, err := self.re.PrettyPrint(v) - if err == nil { - fmt.Printf("%v", val) - } -} diff --git a/cmd/console/main.go b/cmd/console/main.go deleted file mode 100644 index 00a9ca9c45..0000000000 --- a/cmd/console/main.go +++ /dev/null @@ -1,103 +0,0 @@ -/* - This file is part of go-ethereum - - go-ethereum is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - go-ethereum is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with go-ethereum. If not, see . -*/ -/** - * @authors - * Jeffrey Wilcke - */ -package main - -import ( - "fmt" - "io" - "os" - - "github.com/codegangsta/cli" - "github.com/ethereum/go-ethereum/cmd/utils" - "github.com/ethereum/go-ethereum/logger" - "github.com/mattn/go-colorable" - "github.com/mattn/go-isatty" -) - -const ( - ClientIdentifier = "Geth console" - Version = "0.9.27" -) - -var ( - gitCommit string // set via linker flag - nodeNameVersion string - app = utils.NewApp(Version, "the geth console") -) - -func init() { - if gitCommit == "" { - nodeNameVersion = Version - } else { - nodeNameVersion = Version + "-" + gitCommit[:8] - } - - app.Action = run - app.Flags = []cli.Flag{ - utils.IPCPathFlag, - utils.VerbosityFlag, - utils.JSpathFlag, - } - - app.Before = func(ctx *cli.Context) error { - utils.SetupLogger(ctx) - return nil - } -} - -func main() { - // Wrap the standard output with a colorified stream (windows) - if isatty.IsTerminal(os.Stdout.Fd()) { - if pr, pw, err := os.Pipe(); err == nil { - go io.Copy(colorable.NewColorableStdout(), pr) - os.Stdout = pw - } - } - - var interrupted = false - utils.RegisterInterrupt(func(os.Signal) { - interrupted = true - }) - utils.HandleInterrupt() - - if err := app.Run(os.Args); err != nil { - fmt.Fprintln(os.Stderr, "Error: ", err) - } - - // we need to run the interrupt callbacks in case gui is closed - // this skips if we got here by actual interrupt stopping the GUI - if !interrupted { - utils.RunInterruptCallbacks(os.Interrupt) - } - logger.Flush() -} - -func run(ctx *cli.Context) { - jspath := ctx.GlobalString(utils.JSpathFlag.Name) - ipcpath := utils.IpcSocketPath(ctx) - repl := newJSRE(jspath, ipcpath) - - if ctx.Args().Present() { - repl.batch(ctx.Args()) - } else { - repl.interactive(ipcpath) - } -} From f20256377731097c9478ede750efffd46d83b494 Mon Sep 17 00:00:00 2001 From: Bas van Kervel Date: Thu, 18 Jun 2015 18:23:13 +0200 Subject: [PATCH 016/156] added attach over ipc command --- cmd/geth/js.go | 89 +++++++++++++++++++++++++++++----------- cmd/geth/main.go | 46 +++++++++++++++++++++ rpc/comms/comms.go | 27 +++++++++++- rpc/comms/http.go | 3 +- rpc/comms/inproc.go | 18 ++++++++ rpc/comms/ipc.go | 68 ++++++++++++++++++++++++++++-- rpc/comms/ipc_unix.go | 12 +++++- rpc/comms/ipc_windows.go | 10 ++++- 8 files changed, 238 insertions(+), 35 deletions(-) diff --git a/cmd/geth/js.go b/cmd/geth/js.go index bb5143170f..38ef595835 100644 --- a/cmd/geth/js.go +++ b/cmd/geth/js.go @@ -26,6 +26,8 @@ import ( "path/filepath" "strings" + "sort" + "github.com/ethereum/go-ethereum/cmd/utils" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/docserver" @@ -36,7 +38,6 @@ import ( "github.com/ethereum/go-ethereum/rpc/api" "github.com/ethereum/go-ethereum/rpc/codec" "github.com/ethereum/go-ethereum/rpc/comms" - "github.com/ethereum/go-ethereum/rpc/shared" "github.com/ethereum/go-ethereum/xeth" "github.com/peterh/liner" "github.com/robertkrimen/otto" @@ -137,6 +138,40 @@ func apiWordCompleter(line string, pos int) (head string, completions []string, return begin, completionWords, end } +func newLightweightJSRE(libPath string, client comms.EthereumClient, interactive bool, f xeth.Frontend) *jsre { + js := &jsre{ps1: "> "} + js.wait = make(chan *big.Int) + js.client = client + + if f == nil { + f = js + } + + // update state in separare forever blocks + js.re = re.New(libPath) + if err := js.apiBindings(f); err != nil { + utils.Fatalf("Unable to initialize console - %v", err) + } + + if !liner.TerminalSupported() || !interactive { + js.prompter = dumbterm{bufio.NewReader(os.Stdin)} + } else { + lr := liner.NewLiner() + //js.withHistory(func(hist *os.File) { lr.ReadHistory(hist) }) + lr.SetCtrlCAborts(true) + js.loadAutoCompletion() + lr.SetWordCompleter(apiWordCompleter) + lr.SetTabCompletionStyle(liner.TabPrints) + js.prompter = lr + js.atexit = func() { + js.withHistory(func(hist *os.File) { hist.Truncate(0); lr.WriteHistory(hist) }) + lr.Close() + close(js.wait) + } + } + return js +} + func newJSRE(ethereum *eth.Ethereum, libPath, corsDomain string, client comms.EthereumClient, interactive bool, f xeth.Frontend) *jsre { js := &jsre{ethereum: ethereum, ps1: "> "} // set default cors domain used by startRpc from CLI flag @@ -177,7 +212,7 @@ func newJSRE(ethereum *eth.Ethereum, libPath, corsDomain string, client comms.Et } func (self *jsre) loadAutoCompletion() { - if modules, err := self.suportedApis(); err == nil { + if modules, err := self.supportedApis(); err == nil { loadedModulesMethods = make(map[string][]string) for module, _ := range modules { loadedModulesMethods[module] = api.AutoCompletion[module] @@ -185,34 +220,33 @@ func (self *jsre) loadAutoCompletion() { } } -func (self *jsre) suportedApis() (map[string]string, error) { - req := shared.Request{ - Id: 1, - Jsonrpc: "2.0", - Method: "modules", - } +// show summary of current geth instance +func (self *jsre) welcome() { + self.re.Eval(`console.log('instance: ' + web3.version.client);`) + self.re.Eval(`console.log(' datadir: ' + admin.datadir);`) + self.re.Eval(`console.log("coinbase: " + eth.coinbase);`) + self.re.Eval(`var lastBlockTimestamp = 1000 * eth.getBlock(eth.blockNumber).timestamp`) + self.re.Eval(`console.log("at block: " + eth.blockNumber + " (" + new Date(lastBlockTimestamp).toLocaleDateString() + + " " + new Date(lastBlockTimestamp).toLocaleTimeString() + ")");`) - err := self.client.Send(&req) - if err != nil { - return nil, err - } - - res, err := self.client.Recv() - if err != nil { - return nil, err - } - - if sucRes, ok := res.(map[string]string); ok { - if err == nil { - return sucRes, nil + if modules, err := self.supportedApis(); err == nil { + loadedModules := make([]string, 0) + for api, version := range modules { + loadedModules = append(loadedModules, fmt.Sprintf("%s:%s", api, version)) } - } + sort.Strings(loadedModules) - return nil, fmt.Errorf("Unable to determine supported API's") + self.re.Eval(fmt.Sprintf("var modules = '%s';", strings.Join(loadedModules, " "))) + self.re.Eval(`console.log(" modules: " + modules);`) + } +} + +func (self *jsre) supportedApis() (map[string]string, error) { + return self.client.SupportedModules() } func (js *jsre) apiBindings(f xeth.Frontend) error { - apis, err := js.suportedApis() + apis, err := js.supportedApis() if err != nil { return err } @@ -366,7 +400,12 @@ func (self *jsre) interactive() { } func (self *jsre) withHistory(op func(*os.File)) { - hist, err := os.OpenFile(filepath.Join(self.ethereum.DataDir, "history"), os.O_RDWR|os.O_CREATE, os.ModePerm) + datadir := common.DefaultDataDir() + if self.ethereum != nil { + datadir = self.ethereum.DataDir + } + + hist, err := os.OpenFile(filepath.Join(datadir, "history"), os.O_RDWR|os.O_CREATE, os.ModePerm) if err != nil { fmt.Printf("unable to open history file: %v\n", err) return diff --git a/cmd/geth/main.go b/cmd/geth/main.go index 5c4c33cea1..f1e8ace3d1 100644 --- a/cmd/geth/main.go +++ b/cmd/geth/main.go @@ -204,6 +204,16 @@ nodes. The Geth console is an interactive shell for the JavaScript runtime environment which exposes a node admin interface as well as the Ðapp JavaScript API. See https://github.com/ethereum/go-ethereum/wiki/Javascipt-Console +`}, + { + Action: attach, + Name: "attach", + Usage: `Geth Console: interactive JavaScript environment`, + Description: ` +The Geth console is an interactive shell for the JavaScript runtime environment +which exposes a node admin interface as well as the Ðapp JavaScript API. +See https://github.com/ethereum/go-ethereum/wiki/Javascipt-Console. +This command allows to open a console on a running geth node. `, }, { @@ -297,6 +307,40 @@ func run(ctx *cli.Context) { ethereum.WaitForShutdown() } +func attach(ctx *cli.Context) { + // Wrap the standard output with a colorified stream (windows) + if isatty.IsTerminal(os.Stdout.Fd()) { + if pr, pw, err := os.Pipe(); err == nil { + go io.Copy(colorable.NewColorableStdout(), pr) + os.Stdout = pw + } + } + + var client comms.EthereumClient + var err error + if ctx.Args().Present() { + client, err = comms.ClientFromEndpoint(ctx.Args().First(), codec.JSON) + } else { + cfg := comms.IpcConfig{ + Endpoint: ctx.GlobalString(utils.IPCPathFlag.Name), + } + client, err = comms.NewIpcClient(cfg, codec.JSON) + } + + if err != nil { + utils.Fatalf("Unable to attach to geth node - %v", err) + } + + repl := newLightweightJSRE( + ctx.String(utils.JSpathFlag.Name), + client, + true, + nil) + + repl.welcome() + repl.interactive() +} + func console(ctx *cli.Context) { // Wrap the standard output with a colorified stream (windows) if isatty.IsTerminal(os.Stdout.Fd()) { @@ -323,6 +367,8 @@ func console(ctx *cli.Context) { true, nil, ) + + repl.welcome() repl.interactive() ethereum.Stop() diff --git a/rpc/comms/comms.go b/rpc/comms/comms.go index 050e7b4e25..7aa94b1ea9 100644 --- a/rpc/comms/comms.go +++ b/rpc/comms/comms.go @@ -4,12 +4,14 @@ import ( "io" "net" + "fmt" + "strings" + "github.com/ethereum/go-ethereum/logger" "github.com/ethereum/go-ethereum/logger/glog" "github.com/ethereum/go-ethereum/rpc/api" "github.com/ethereum/go-ethereum/rpc/codec" "github.com/ethereum/go-ethereum/rpc/shared" - "strings" ) const ( @@ -26,7 +28,7 @@ var ( // List with API's which are offered over thr HTTP/RPC interface by default DefaultHttpRpcApis = strings.Join([]string{ api.DbApiName, api.EthApiName, api.NetApiName, api.Web3ApiName, - }, ",") + }, ",") ) type EthereumClient interface { @@ -36,6 +38,8 @@ type EthereumClient interface { Send(interface{}) error // Receive response Recv() (interface{}, error) + // List with modules this client supports + SupportedModules() (map[string]string, error) } func handle(conn net.Conn, api api.EthereumApi, c codec.Codec) { @@ -64,3 +68,22 @@ func handle(conn net.Conn, api api.EthereumApi, c codec.Codec) { } } } + +// Endpoint must be in the form of: +// ${protocol}:${path} +// e.g. ipc:/tmp/geth.ipc +// rpc:localhost:8545 +func ClientFromEndpoint(endpoint string, c codec.Codec) (EthereumClient, error) { + if strings.HasPrefix(endpoint, "ipc:") { + cfg := IpcConfig{ + Endpoint: endpoint[4:], + } + return NewIpcClient(cfg, codec.JSON) + } + + if strings.HasPrefix(endpoint, "rpc:") { + + } + + return nil, fmt.Errorf("Invalid endpoint") +} diff --git a/rpc/comms/http.go b/rpc/comms/http.go index c0ea2cc780..04630d9375 100644 --- a/rpc/comms/http.go +++ b/rpc/comms/http.go @@ -64,7 +64,6 @@ func StopHttp() { } } - type httpClient struct { codec codec.ApiCoder } @@ -86,4 +85,4 @@ func (self *httpClient) Send(req interface{}) error { func (self *httpClient) Recv() (interface{}, error) { return nil, nil -} \ No newline at end of file +} diff --git a/rpc/comms/inproc.go b/rpc/comms/inproc.go index 1fdbf8ace2..b9c4e93d9b 100644 --- a/rpc/comms/inproc.go +++ b/rpc/comms/inproc.go @@ -51,3 +51,21 @@ func (self *InProcClient) Send(req interface{}) error { func (self *InProcClient) Recv() (interface{}, error) { return self.lastRes, self.lastErr } + +func (self *InProcClient) SupportedModules() (map[string]string, error) { + req := shared.Request{ + Id: 1, + Jsonrpc: "2.0", + Method: "modules", + } + + if res, err := self.api.Execute(&req); err == nil { + if result, ok := res.(map[string]string); ok { + return result, nil + } + } else { + return nil, err + } + + return nil, fmt.Errorf("Invalid response") +} diff --git a/rpc/comms/ipc.go b/rpc/comms/ipc.go index a072038035..7e7375eafc 100644 --- a/rpc/comms/ipc.go +++ b/rpc/comms/ipc.go @@ -1,8 +1,13 @@ package comms import ( + "fmt" + "net" + "github.com/ethereum/go-ethereum/rpc/api" "github.com/ethereum/go-ethereum/rpc/codec" + "github.com/ethereum/go-ethereum/rpc/shared" + "encoding/json" ) type IpcConfig struct { @@ -10,19 +15,74 @@ type IpcConfig struct { } type ipcClient struct { - codec codec.ApiCoder + endpoint string + codec codec.Codec + coder codec.ApiCoder } func (self *ipcClient) Close() { - self.codec.Close() + self.coder.Close() } func (self *ipcClient) Send(req interface{}) error { - return self.codec.WriteResponse(req) + var err error + if r, ok := req.(*shared.Request); ok { + if err = self.coder.WriteResponse(r); err != nil { + if _, ok := err.(*net.OpError); ok { // connection lost, retry once + if err = self.reconnect(); err == nil { + err = self.coder.WriteResponse(r) + } + } + } + return err + } + + return fmt.Errorf("Invalid request (%T)", req) } func (self *ipcClient) Recv() (interface{}, error) { - return self.codec.ReadResponse() + res, err := self.coder.ReadResponse() + if err != nil { + return nil, err + } + + if r, ok := res.(shared.SuccessResponse); ok { + return r.Result, nil + } + + if r, ok := res.(shared.ErrorResponse); ok { + return r.Error, nil + } + + return res, err +} + +func (self *ipcClient) SupportedModules() (map[string]string, error) { + req := shared.Request{ + Id: 1, + Jsonrpc: "2.0", + Method: "modules", + } + + if err := self.coder.WriteResponse(req); err != nil { + return nil, err + } + + res, err := self.coder.ReadResponse() + if err != nil { + return nil, err + } + + if sucRes, ok := res.(shared.SuccessResponse); ok { + data, _ := json.Marshal(sucRes.Result) + modules := make(map[string]string) + err = json.Unmarshal(data, &modules) + if err == nil { + return modules, nil + } + } + + return nil, fmt.Errorf("Invalid response") } // Create a new IPC client, UNIX domain socket on posix, named pipe on Windows diff --git a/rpc/comms/ipc_unix.go b/rpc/comms/ipc_unix.go index 131fb86f24..b5eec92dbb 100644 --- a/rpc/comms/ipc_unix.go +++ b/rpc/comms/ipc_unix.go @@ -18,7 +18,17 @@ func newIpcClient(cfg IpcConfig, codec codec.Codec) (*ipcClient, error) { return nil, err } - return &ipcClient{codec.New(c)}, nil + return &ipcClient{cfg.Endpoint, codec, codec.New(c)}, nil +} + +func (self *ipcClient) reconnect() error { + self.coder.Close() + c, err := net.DialUnix("unix", nil, &net.UnixAddr{self.endpoint, "unix"}) + if err == nil { + self.coder = self.codec.New(c) + } + + return err } func startIpc(cfg IpcConfig, codec codec.Codec, api api.EthereumApi) error { diff --git a/rpc/comms/ipc_windows.go b/rpc/comms/ipc_windows.go index c48dfb7fb8..08f79274a5 100644 --- a/rpc/comms/ipc_windows.go +++ b/rpc/comms/ipc_windows.go @@ -641,7 +641,15 @@ func newIpcClient(cfg IpcConfig, codec codec.Codec) (*ipcClient, error) { return nil, err } - return &ipcClient{codec.New(c)}, nil + return &ipcClient{cfg.Endpoint, codec, codec.New(c)}, nil +} + +func (self *ipcClient) reconnect() error { + c, err := Dial(self.endpoint) + if err == nil { + self.coder = self.codec.New(c) + } + return err } func startIpc(cfg IpcConfig, codec codec.Codec, api api.EthereumApi) error { From ce5c94e4719586bbf81906cb90104babf79af0fe Mon Sep 17 00:00:00 2001 From: Bas van Kervel Date: Fri, 19 Jun 2015 12:32:40 +0200 Subject: [PATCH 017/156] added attach over http/rpc support --- rpc/comms/comms.go | 23 +++++++++ rpc/comms/http.go | 114 +++++++++++++++++++++++++++++++++++++++++++-- rpc/comms/ipc.go | 3 +- 3 files changed, 134 insertions(+), 6 deletions(-) diff --git a/rpc/comms/comms.go b/rpc/comms/comms.go index 7aa94b1ea9..29ad11b3ce 100644 --- a/rpc/comms/comms.go +++ b/rpc/comms/comms.go @@ -7,6 +7,8 @@ import ( "fmt" "strings" + "strconv" + "github.com/ethereum/go-ethereum/logger" "github.com/ethereum/go-ethereum/logger/glog" "github.com/ethereum/go-ethereum/rpc/api" @@ -82,7 +84,28 @@ func ClientFromEndpoint(endpoint string, c codec.Codec) (EthereumClient, error) } if strings.HasPrefix(endpoint, "rpc:") { + parts := strings.Split(endpoint, ":") + addr := "http://localhost" + port := uint(8545) + if len(parts) >= 3 { + addr = parts[1] + ":" + parts[2] + } + if len(parts) >= 4 { + p, err := strconv.Atoi(parts[3]) + + if err != nil { + return nil, err + } + port = uint(p) + } + + cfg := HttpConfig{ + ListenAddress: addr, + ListenPort: port, + } + + return NewHttpClient(cfg, codec.JSON), nil } return nil, fmt.Errorf("Invalid endpoint") diff --git a/rpc/comms/http.go b/rpc/comms/http.go index 04630d9375..6a543c0ed9 100644 --- a/rpc/comms/http.go +++ b/rpc/comms/http.go @@ -5,10 +5,14 @@ import ( "net/http" "strings" + "bytes" + "io/ioutil" + "github.com/ethereum/go-ethereum/logger" "github.com/ethereum/go-ethereum/logger/glog" "github.com/ethereum/go-ethereum/rpc/api" "github.com/ethereum/go-ethereum/rpc/codec" + "github.com/ethereum/go-ethereum/rpc/shared" "github.com/rs/cors" ) @@ -65,13 +69,19 @@ func StopHttp() { } type httpClient struct { - codec codec.ApiCoder + address string + port uint + codec codec.ApiCoder + lastRes interface{} + lastErr error } // Create a new in process client -func NewHttpClient(cfg HttpConfig, codec codec.Codec) *httpClient { +func NewHttpClient(cfg HttpConfig, c codec.Codec) *httpClient { return &httpClient{ - codec: codec.New(nil), + address: cfg.ListenAddress, + port: cfg.ListenPort, + codec: c.New(nil), } } @@ -80,9 +90,103 @@ func (self *httpClient) Close() { } func (self *httpClient) Send(req interface{}) error { - return nil + var body []byte + var err error + + self.lastRes = nil + self.lastErr = nil + + if body, err = self.codec.Encode(req); err != nil { + return err + } + + httpReq, err := http.NewRequest("POST", fmt.Sprintf("%s:%d", self.address, self.port), bytes.NewBuffer(body)) + if err != nil { + return err + } + httpReq.Header.Set("Content-Type", "application/json") + + client := http.Client{} + resp, err := client.Do(httpReq) + if err != nil { + return err + } + + defer resp.Body.Close() + + if resp.Status == "200 OK" { + reply, _ := ioutil.ReadAll(resp.Body) + var rpcSuccessResponse shared.SuccessResponse + if err = self.codec.Decode(reply, &rpcSuccessResponse); err == nil { + self.lastRes = rpcSuccessResponse.Result + self.lastErr = err + return nil + } else { + var rpcErrorResponse shared.ErrorResponse + if err = self.codec.Decode(reply, &rpcErrorResponse); err == nil { + self.lastRes = rpcErrorResponse.Error + self.lastErr = err + return nil + } else { + return err + } + } + } + + return fmt.Errorf("Not implemented") } func (self *httpClient) Recv() (interface{}, error) { - return nil, nil + return self.lastRes, self.lastErr +} + +func (self *httpClient) SupportedModules() (map[string]string, error) { + var body []byte + var err error + + payload := shared.Request{ + Id: 1, + Jsonrpc: "2.0", + Method: "modules", + } + + if body, err = self.codec.Encode(payload); err != nil { + return nil, err + } + + req, err := http.NewRequest("POST", fmt.Sprintf("%s:%d", self.address, self.port), bytes.NewBuffer(body)) + if err != nil { + return nil, err + } + req.Header.Set("Content-Type", "application/json") + + client := http.Client{} + resp, err := client.Do(req) + if err != nil { + return nil, err + } + + defer resp.Body.Close() + + if resp.Status == "200 OK" { + reply, _ := ioutil.ReadAll(resp.Body) + var rpcRes shared.SuccessResponse + if err = self.codec.Decode(reply, &rpcRes); err != nil { + return nil, err + } + + result := make(map[string]string) + if modules, ok := rpcRes.Result.(map[string]interface{}); ok { + for a, v := range modules { + result[a] = fmt.Sprintf("%s", v) + } + return result, nil + } + err = fmt.Errorf("Unable to parse module response - %v", rpcRes.Result) + } else { + fmt.Printf("resp.Status = %s\n", resp.Status) + fmt.Printf("err = %v\n", err) + } + + return nil, err } diff --git a/rpc/comms/ipc.go b/rpc/comms/ipc.go index 7e7375eafc..7f52193009 100644 --- a/rpc/comms/ipc.go +++ b/rpc/comms/ipc.go @@ -4,10 +4,11 @@ import ( "fmt" "net" + "encoding/json" + "github.com/ethereum/go-ethereum/rpc/api" "github.com/ethereum/go-ethereum/rpc/codec" "github.com/ethereum/go-ethereum/rpc/shared" - "encoding/json" ) type IpcConfig struct { From 29297d3b82eae4d4d23e86cfebec61abf96fffda Mon Sep 17 00:00:00 2001 From: Bas van Kervel Date: Fri, 19 Jun 2015 13:05:38 +0200 Subject: [PATCH 018/156] fixed bug where history file was create in cwd --- cmd/geth/js.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/geth/js.go b/cmd/geth/js.go index 38ef595835..6e4e3e0c14 100644 --- a/cmd/geth/js.go +++ b/cmd/geth/js.go @@ -157,7 +157,7 @@ func newLightweightJSRE(libPath string, client comms.EthereumClient, interactive js.prompter = dumbterm{bufio.NewReader(os.Stdin)} } else { lr := liner.NewLiner() - //js.withHistory(func(hist *os.File) { lr.ReadHistory(hist) }) + js.withHistory(func(hist *os.File) { lr.ReadHistory(hist) }) lr.SetCtrlCAborts(true) js.loadAutoCompletion() lr.SetWordCompleter(apiWordCompleter) From 3ff272b618b8bd63c9e3068d5f4be5d0b7c7c676 Mon Sep 17 00:00:00 2001 From: Bas van Kervel Date: Fri, 19 Jun 2015 13:40:21 +0200 Subject: [PATCH 019/156] moved solidity test to new rpc structure --- rpc/api/api_test.go | 110 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) diff --git a/rpc/api/api_test.go b/rpc/api/api_test.go index f1a47944db..3e464c2811 100644 --- a/rpc/api/api_test.go +++ b/rpc/api/api_test.go @@ -4,6 +4,12 @@ import ( "testing" "github.com/ethereum/go-ethereum/rpc/codec" + "encoding/json" + "strconv" + "github.com/ethereum/go-ethereum/common/compiler" + "github.com/ethereum/go-ethereum/rpc/shared" + "github.com/ethereum/go-ethereum/eth" + "github.com/ethereum/go-ethereum/xeth" ) func TestParseApiString(t *testing.T) { @@ -40,3 +46,107 @@ func TestParseApiString(t *testing.T) { } } + +const solcVersion = "0.9.23" + +func TestCompileSolidity(t *testing.T) { + + solc, err := compiler.New("") + if solc == nil { + t.Skip("no solc found: skip") + } else if solc.Version() != solcVersion { + t.Skip("WARNING: skipping test because of solc different version (%v, test written for %v, may need to update)", solc.Version(), solcVersion) + } + source := `contract test {\n` + + " /// @notice Will multiply `a` by 7." + `\n` + + ` function multiply(uint a) returns(uint d) {\n` + + ` return a * 7;\n` + + ` }\n` + + `}\n` + + jsonstr := `{"jsonrpc":"2.0","method":"eth_compileSolidity","params":["` + source + `"],"id":64}` + + expCode := "0x605880600c6000396000f3006000357c010000000000000000000000000000000000000000000000000000000090048063c6888fa114602e57005b603d6004803590602001506047565b8060005260206000f35b60006007820290506053565b91905056" + expAbiDefinition := `[{"constant":false,"inputs":[{"name":"a","type":"uint256"}],"name":"multiply","outputs":[{"name":"d","type":"uint256"}],"type":"function"}]` + expUserDoc := `{"methods":{"multiply(uint256)":{"notice":"Will multiply ` + "`a`" + ` by 7."}}}` + expDeveloperDoc := `{"methods":{}}` + expCompilerVersion := solc.Version() + expLanguage := "Solidity" + expLanguageVersion := "0" + expSource := source + + xeth := xeth.NewTest(ð.Ethereum{}, nil) + api := NewEthApi(xeth, codec.JSON) + + var rpcRequest shared.Request + json.Unmarshal([]byte(jsonstr), &rpcRequest) + + response, err := api.CompileSolidity(&rpcRequest) + if err != nil { + t.Errorf("Execution failed, %v", err) + } + + respjson, err := json.Marshal(response) + if err != nil { + t.Errorf("expected no error, got %v", err) + } + + var contracts = make(map[string]*compiler.Contract) + err = json.Unmarshal(respjson, &contracts) + if err != nil { + t.Errorf("expected no error, got %v", err) + } + + if len(contracts) != 1 { + t.Errorf("expected one contract, got %v", len(contracts)) + } + + contract := contracts["test"] + + if contract.Code != expCode { + t.Errorf("Expected \n%s got \n%s", expCode, contract.Code) + } + + if strconv.Quote(contract.Info.Source) != `"`+expSource+`"` { + t.Errorf("Expected \n'%s' got \n'%s'", expSource, strconv.Quote(contract.Info.Source)) + } + + if contract.Info.Language != expLanguage { + t.Errorf("Expected %s got %s", expLanguage, contract.Info.Language) + } + + if contract.Info.LanguageVersion != expLanguageVersion { + t.Errorf("Expected %s got %s", expLanguageVersion, contract.Info.LanguageVersion) + } + + if contract.Info.CompilerVersion != expCompilerVersion { + t.Errorf("Expected %s got %s", expCompilerVersion, contract.Info.CompilerVersion) + } + + userdoc, err := json.Marshal(contract.Info.UserDoc) + if err != nil { + t.Errorf("expected no error, got %v", err) + } + + devdoc, err := json.Marshal(contract.Info.DeveloperDoc) + if err != nil { + t.Errorf("expected no error, got %v", err) + } + + abidef, err := json.Marshal(contract.Info.AbiDefinition) + if err != nil { + t.Errorf("expected no error, got %v", err) + } + + if string(abidef) != expAbiDefinition { + t.Errorf("Expected \n'%s' got \n'%s'", expAbiDefinition, string(abidef)) + } + + if string(userdoc) != expUserDoc { + t.Errorf("Expected \n'%s' got \n'%s'", expUserDoc, string(userdoc)) + } + + if string(devdoc) != expDeveloperDoc { + t.Errorf("Expected %s got %s", expDeveloperDoc, string(devdoc)) + } +} From f87501b1c547a1d9cd882497ffafbab4f9941ef1 Mon Sep 17 00:00:00 2001 From: Bas van Kervel Date: Fri, 19 Jun 2015 14:04:18 +0200 Subject: [PATCH 020/156] added batch support to console and attach actions --- cmd/geth/js.go | 19 +++++++++++++++++++ cmd/geth/main.go | 17 +++++++++++++---- cmd/utils/flags.go | 4 ++++ rpc/api/api_test.go | 15 ++++++++------- rpc/api/eth.go | 1 - rpc/api/eth_args.go | 36 ++++++++++++++++++------------------ 6 files changed, 62 insertions(+), 30 deletions(-) diff --git a/cmd/geth/js.go b/cmd/geth/js.go index 6e4e3e0c14..761943b639 100644 --- a/cmd/geth/js.go +++ b/cmd/geth/js.go @@ -220,6 +220,25 @@ func (self *jsre) loadAutoCompletion() { } } +func (self *jsre) batch(statement string) { + val, err := self.re.Run(statement) + + if err != nil { + fmt.Printf("error: %v", err) + } else if val.IsDefined() && val.IsObject() { + obj, _ := self.re.Get("ret_result") + fmt.Printf("%v", obj) + } else if val.IsDefined() { + fmt.Printf("%v", val) + } + + if self.atexit != nil { + self.atexit() + } + + self.re.Stop(false) +} + // show summary of current geth instance func (self *jsre) welcome() { self.re.Eval(`console.log('instance: ' + web3.version.client);`) diff --git a/cmd/geth/main.go b/cmd/geth/main.go index f1e8ace3d1..e5c3614fc9 100644 --- a/cmd/geth/main.go +++ b/cmd/geth/main.go @@ -255,6 +255,7 @@ JavaScript API. See https://github.com/ethereum/go-ethereum/wiki/Javascipt-Conso utils.IPCDisabledFlag, utils.IPCApiFlag, utils.IPCPathFlag, + utils.ExecFlag, utils.WhisperEnabledFlag, utils.VMDebugFlag, utils.ProtocolVersionFlag, @@ -337,8 +338,12 @@ func attach(ctx *cli.Context) { true, nil) - repl.welcome() - repl.interactive() + if ctx.GlobalString(utils.ExecFlag.Name) != "" { + repl.batch(ctx.GlobalString(utils.ExecFlag.Name)) + } else { + repl.welcome() + repl.interactive() + } } func console(ctx *cli.Context) { @@ -368,8 +373,12 @@ func console(ctx *cli.Context) { nil, ) - repl.welcome() - repl.interactive() + if ctx.GlobalString(utils.ExecFlag.Name) != "" { + repl.batch(ctx.GlobalString(utils.ExecFlag.Name)) + } else { + repl.welcome() + repl.interactive() + } ethereum.Stop() ethereum.WaitForShutdown() diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index 092bc55118..a9d449d1fb 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -227,6 +227,10 @@ var ( Usage: "Filename for IPC socket/pipe", Value: DirectoryString{common.DefaultIpcPath()}, } + ExecFlag = cli.StringFlag{ + Name: "exec", + Usage: "Execute javascript statement (only in combination with console/attach)", + } // Network Settings MaxPeersFlag = cli.IntFlag{ Name: "maxpeers", diff --git a/rpc/api/api_test.go b/rpc/api/api_test.go index 3e464c2811..7e273ef28f 100644 --- a/rpc/api/api_test.go +++ b/rpc/api/api_test.go @@ -3,12 +3,13 @@ package api import ( "testing" - "github.com/ethereum/go-ethereum/rpc/codec" "encoding/json" "strconv" + "github.com/ethereum/go-ethereum/common/compiler" - "github.com/ethereum/go-ethereum/rpc/shared" "github.com/ethereum/go-ethereum/eth" + "github.com/ethereum/go-ethereum/rpc/codec" + "github.com/ethereum/go-ethereum/rpc/shared" "github.com/ethereum/go-ethereum/xeth" ) @@ -58,11 +59,11 @@ func TestCompileSolidity(t *testing.T) { t.Skip("WARNING: skipping test because of solc different version (%v, test written for %v, may need to update)", solc.Version(), solcVersion) } source := `contract test {\n` + - " /// @notice Will multiply `a` by 7." + `\n` + - ` function multiply(uint a) returns(uint d) {\n` + - ` return a * 7;\n` + - ` }\n` + - `}\n` + " /// @notice Will multiply `a` by 7." + `\n` + + ` function multiply(uint a) returns(uint d) {\n` + + ` return a * 7;\n` + + ` }\n` + + `}\n` jsonstr := `{"jsonrpc":"2.0","method":"eth_compileSolidity","params":["` + source + `"],"id":64}` diff --git a/rpc/api/eth.go b/rpc/api/eth.go index 91577c4d55..cafa05e340 100644 --- a/rpc/api/eth.go +++ b/rpc/api/eth.go @@ -250,7 +250,6 @@ func (self *ethApi) Sign(req *shared.Request) (interface{}, error) { return v, nil } - func (self *ethApi) PushTx(req *shared.Request) (interface{}, error) { args := new(NewDataArgs) if err := self.codec.Decode(req.Params, &args); err != nil { diff --git a/rpc/api/eth_args.go b/rpc/api/eth_args.go index 54eb7201dc..02f438f0c3 100644 --- a/rpc/api/eth_args.go +++ b/rpc/api/eth_args.go @@ -227,32 +227,32 @@ func (args *GetDataArgs) UnmarshalJSON(b []byte) (err error) { } type NewDataArgs struct { - Data string + Data string } func (args *NewDataArgs) UnmarshalJSON(b []byte) (err error) { - var obj []interface{} + var obj []interface{} - if err := json.Unmarshal(b, &obj); err != nil { - return shared.NewDecodeParamError(err.Error()) - } + if err := json.Unmarshal(b, &obj); err != nil { + return shared.NewDecodeParamError(err.Error()) + } - // Check for sufficient params - if len(obj) < 1 { - return shared.NewInsufficientParamsError(len(obj), 1) - } + // Check for sufficient params + if len(obj) < 1 { + return shared.NewInsufficientParamsError(len(obj), 1) + } - data, ok := obj[0].(string) - if !ok { - return shared.NewInvalidTypeError("data", "not a string") - } - args.Data = data + data, ok := obj[0].(string) + if !ok { + return shared.NewInvalidTypeError("data", "not a string") + } + args.Data = data - if len(args.Data) == 0 { - return shared.NewValidationError("data", "is required") - } + if len(args.Data) == 0 { + return shared.NewValidationError("data", "is required") + } - return nil + return nil } type NewSigArgs struct { From 2737baa6577a337f33f020d587af100c9bda3585 Mon Sep 17 00:00:00 2001 From: Bas van Kervel Date: Mon, 22 Jun 2015 08:14:39 +0200 Subject: [PATCH 021/156] fixed unittests --- cmd/geth/js_test.go | 17 ++++++++++------- rpc/api/admin.go | 29 ----------------------------- 2 files changed, 10 insertions(+), 36 deletions(-) diff --git a/cmd/geth/js_test.go b/cmd/geth/js_test.go index 20bde01f34..fba5750305 100644 --- a/cmd/geth/js_test.go +++ b/cmd/geth/js_test.go @@ -20,6 +20,8 @@ import ( "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/eth" + "github.com/ethereum/go-ethereum/rpc/comms" + "github.com/ethereum/go-ethereum/rpc/codec" ) const ( @@ -105,7 +107,8 @@ func testJEthRE(t *testing.T) (string, *testjethre, *eth.Ethereum) { t.Errorf("Error creating DocServer: %v", err) } tf := &testjethre{ds: ds, stateDb: ethereum.ChainManager().State().Copy()} - repl := newJSRE(ethereum, assetPath, "", "", false, tf) + client := comms.NewInProcClient(codec.JSON) + repl := newJSRE(ethereum, assetPath, "", client, false, tf) tf.jsre = repl return tmp, tf, ethereum } @@ -125,7 +128,7 @@ func TestNodeInfo(t *testing.T) { defer ethereum.Stop() defer os.RemoveAll(tmp) want := `{"DiscPort":0,"IP":"0.0.0.0","ListenAddr":"","Name":"test","NodeID":"4cb2fc32924e94277bf94b5e4c983beedb2eabd5a0bc941db32202735c6625d020ca14a5963d1738af43b6ac0a711d61b1a06de931a499fe2aa0b1a132a902b5","NodeUrl":"enode://4cb2fc32924e94277bf94b5e4c983beedb2eabd5a0bc941db32202735c6625d020ca14a5963d1738af43b6ac0a711d61b1a06de931a499fe2aa0b1a132a902b5@0.0.0.0:0","TCPPort":0,"Td":"131072"}` - checkEvalJSON(t, repl, `admin.nodeInfo()`, want) + checkEvalJSON(t, repl, `admin.nodeInfo`, want) } func TestAccounts(t *testing.T) { @@ -139,7 +142,7 @@ func TestAccounts(t *testing.T) { checkEvalJSON(t, repl, `eth.accounts`, `["`+testAddress+`"]`) checkEvalJSON(t, repl, `eth.coinbase`, `"`+testAddress+`"`) - val, err := repl.re.Run(`admin.newAccount("password")`) + val, err := repl.re.Run(`personal.newAccount("password")`) if err != nil { t.Errorf("expected no error, got %v", err) } @@ -161,7 +164,7 @@ func TestBlockChain(t *testing.T) { defer ethereum.Stop() defer os.RemoveAll(tmp) // get current block dump before export/import. - val, err := repl.re.Run("JSON.stringify(admin.debug.dumpBlock())") + val, err := repl.re.Run("JSON.stringify(debug.dumpBlock(eth.blockNumber))") if err != nil { t.Errorf("expected no error, got %v", err) } @@ -178,14 +181,14 @@ func TestBlockChain(t *testing.T) { ethereum.ChainManager().Reset() - checkEvalJSON(t, repl, `admin.export(`+tmpfileq+`)`, `true`) + checkEvalJSON(t, repl, `admin.exportChain(`+tmpfileq+`)`, `true`) if _, err := os.Stat(tmpfile); err != nil { t.Fatal(err) } // check import, verify that dumpBlock gives the same result. - checkEvalJSON(t, repl, `admin.import(`+tmpfileq+`)`, `true`) - checkEvalJSON(t, repl, `admin.debug.dumpBlock()`, beforeExport) + checkEvalJSON(t, repl, `admin.importChain(`+tmpfileq+`)`, `true`) + checkEvalJSON(t, repl, `debug.dumpBlock(eth.blockNumber)`, beforeExport) } func TestMining(t *testing.T) { diff --git a/rpc/api/admin.go b/rpc/api/admin.go index 532bdcaddb..368375c937 100644 --- a/rpc/api/admin.go +++ b/rpc/api/admin.go @@ -23,8 +23,6 @@ const ( var ( // mapping between methods and handlers AdminMapping = map[string]adminhandler{ - // "admin_startRPC": (*adminApi).StartRPC, - // "admin_stopRPC": (*adminApi).StopRPC, "admin_addPeer": (*adminApi).AddPeer, "admin_peers": (*adminApi).Peers, "admin_nodeInfo": (*adminApi).NodeInfo, @@ -103,33 +101,6 @@ func (self *adminApi) Peers(req *shared.Request) (interface{}, error) { return self.ethereum.PeersInfo(), nil } -func (self *adminApi) StartRPC(req *shared.Request) (interface{}, error) { - return false, nil - // Enable when http rpc interface is refactored to prevent import cycles - // args := new(StartRpcArgs) - // if err := self.codec.Decode(req.Params, &args); err != nil { - // return nil, shared.NewDecodeParamError(err.Error()) - // } - // - // cfg := rpc.RpcConfig{ - // ListenAddress: args.Address, - // ListenPort: args.Port, - // } - // - // err := rpc.Start(self.xeth, cfg) - // if err == nil { - // return true, nil - // } - // return false, err -} - -func (self *adminApi) StopRPC(req *shared.Request) (interface{}, error) { - return false, nil - // Enable when http rpc interface is refactored to prevent import cycles - // rpc.Stop() - // return true, nil -} - func (self *adminApi) NodeInfo(req *shared.Request) (interface{}, error) { return self.ethereum.NodeInfo(), nil } From 2e0b56a72b3eafc89938003da29c06496ac9ad4e Mon Sep 17 00:00:00 2001 From: Bas van Kervel Date: Mon, 22 Jun 2015 12:47:32 +0200 Subject: [PATCH 022/156] added RPC start/stop support --- cmd/geth/js.go | 7 +++-- cmd/geth/js_test.go | 2 +- cmd/utils/flags.go | 4 +-- rpc/api/admin.go | 60 ++++++++++++++++++++++++++++++---------- rpc/api/admin_args.go | 52 ++++++++++++++++++++++++++++++++++ rpc/api/admin_js.go | 14 ++++++++++ rpc/api/api.go | 43 +--------------------------- rpc/api/args.go | 3 +- rpc/api/args_test.go | 1 + rpc/api/db.go | 2 +- rpc/api/debug.go | 2 +- rpc/api/eth.go | 2 +- rpc/api/mergedapi.go | 8 +++--- rpc/api/mergedapi_js.go | 1 - rpc/api/miner.go | 2 +- rpc/api/net.go | 2 +- rpc/api/personal.go | 2 +- rpc/api/shh.go | 2 +- rpc/api/txpool.go | 2 +- rpc/api/utils.go | 43 ++++++++++++++-------------- rpc/api/web3.go | 2 +- rpc/comms/comms.go | 9 +++--- rpc/comms/http.go | 4 +-- rpc/comms/http_net.go | 11 ++++---- rpc/comms/inproc.go | 11 ++------ rpc/comms/ipc.go | 4 +-- rpc/comms/ipc_unix.go | 4 +-- rpc/comms/ipc_windows.go | 3 +- rpc/jeth.go | 9 +++--- rpc/shared/types.go | 15 ++++++++++ rpc/shared/utils.go | 28 +++++++++++++++++++ 31 files changed, 224 insertions(+), 130 deletions(-) delete mode 100644 rpc/api/mergedapi_js.go create mode 100644 rpc/shared/utils.go diff --git a/cmd/geth/js.go b/cmd/geth/js.go index 761943b639..c0c77c02a2 100644 --- a/cmd/geth/js.go +++ b/cmd/geth/js.go @@ -41,6 +41,7 @@ import ( "github.com/ethereum/go-ethereum/xeth" "github.com/peterh/liner" "github.com/robertkrimen/otto" + "github.com/ethereum/go-ethereum/rpc/shared" ) type prompter interface { @@ -183,7 +184,9 @@ func newJSRE(ethereum *eth.Ethereum, libPath, corsDomain string, client comms.Et js.wait = js.xeth.UpdateState() js.client = client if clt, ok := js.client.(*comms.InProcClient); ok { - clt.Initialize(js.xeth, ethereum) + if offeredApis, err := api.ParseApiString(shared.AllApis, codec.JSON, js.xeth, ethereum); err == nil { + clt.Initialize(api.Merge(offeredApis...)) + } } // update state in separare forever blocks @@ -311,7 +314,7 @@ func (js *jsre) apiBindings(f xeth.Frontend) error { // load only supported API's in javascript runtime shortcuts := "var eth = web3.eth; " for _, apiName := range apiNames { - if apiName == api.Web3ApiName || apiName == api.EthApiName { + if apiName == shared.Web3ApiName || apiName == shared.EthApiName { continue // manually mapped } diff --git a/cmd/geth/js_test.go b/cmd/geth/js_test.go index fba5750305..cfbe26bee5 100644 --- a/cmd/geth/js_test.go +++ b/cmd/geth/js_test.go @@ -210,7 +210,7 @@ func TestRPC(t *testing.T) { defer ethereum.Stop() defer os.RemoveAll(tmp) - checkEvalJSON(t, repl, `admin.startRPC("127.0.0.1", 5004)`, `true`) + checkEvalJSON(t, repl, `admin.startRPC("127.0.0.1", 5004, "*", "web3,eth,net")`, `true`) } func TestCheckTestAccountBalance(t *testing.T) { diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index a9d449d1fb..15a577a070 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -461,7 +461,7 @@ func StartIPC(eth *eth.Ethereum, ctx *cli.Context) error { return err } - return comms.StartIpc(config, codec, apis...) + return comms.StartIpc(config, codec, api.Merge(apis...)) } func StartRPC(eth *eth.Ethereum, ctx *cli.Context) error { @@ -479,7 +479,7 @@ func StartRPC(eth *eth.Ethereum, ctx *cli.Context) error { return err } - return comms.StartHttp(config, codec, apis...) + return comms.StartHttp(config, codec, api.Merge(apis...)) } func StartPProf(ctx *cli.Context) { diff --git a/rpc/api/admin.go b/rpc/api/admin.go index 368375c937..7e79fd4d08 100644 --- a/rpc/api/admin.go +++ b/rpc/api/admin.go @@ -11,6 +11,7 @@ import ( "github.com/ethereum/go-ethereum/logger/glog" "github.com/ethereum/go-ethereum/rlp" "github.com/ethereum/go-ethereum/rpc/codec" + "github.com/ethereum/go-ethereum/rpc/comms" "github.com/ethereum/go-ethereum/rpc/shared" "github.com/ethereum/go-ethereum/xeth" ) @@ -32,6 +33,8 @@ var ( "admin_chainSyncStatus": (*adminApi).ChainSyncStatus, "admin_setSolc": (*adminApi).SetSolc, "admin_datadir": (*adminApi).DataDir, + "admin_startRPC": (*adminApi).StartRPC, + "admin_stopRPC": (*adminApi).StopRPC, } ) @@ -42,25 +45,25 @@ type adminhandler func(*adminApi, *shared.Request) (interface{}, error) type adminApi struct { xeth *xeth.XEth ethereum *eth.Ethereum - methods map[string]adminhandler - codec codec.ApiCoder + codec codec.Codec + coder codec.ApiCoder } // create a new admin api instance -func NewAdminApi(xeth *xeth.XEth, ethereum *eth.Ethereum, coder codec.Codec) *adminApi { +func NewAdminApi(xeth *xeth.XEth, ethereum *eth.Ethereum, codec codec.Codec) *adminApi { return &adminApi{ xeth: xeth, ethereum: ethereum, - methods: AdminMapping, - codec: coder.New(nil), + codec: codec, + coder: codec.New(nil), } } // collection with supported methods func (self *adminApi) Methods() []string { - methods := make([]string, len(self.methods)) + methods := make([]string, len(AdminMapping)) i := 0 - for k := range self.methods { + for k := range AdminMapping { methods[i] = k i++ } @@ -69,7 +72,7 @@ func (self *adminApi) Methods() []string { // Execute given request func (self *adminApi) Execute(req *shared.Request) (interface{}, error) { - if callback, ok := self.methods[req.Method]; ok { + if callback, ok := AdminMapping[req.Method]; ok { return callback(self, req) } @@ -77,7 +80,7 @@ func (self *adminApi) Execute(req *shared.Request) (interface{}, error) { } func (self *adminApi) Name() string { - return AdminApiName + return shared.AdminApiName } func (self *adminApi) ApiVersion() string { @@ -86,7 +89,7 @@ func (self *adminApi) ApiVersion() string { func (self *adminApi) AddPeer(req *shared.Request) (interface{}, error) { args := new(AddPeerArgs) - if err := self.codec.Decode(req.Params, &args); err != nil { + if err := self.coder.Decode(req.Params, &args); err != nil { return nil, shared.NewDecodeParamError(err.Error()) } @@ -120,7 +123,7 @@ func hasAllBlocks(chain *core.ChainManager, bs []*types.Block) bool { func (self *adminApi) ImportChain(req *shared.Request) (interface{}, error) { args := new(ImportExportChainArgs) - if err := self.codec.Decode(req.Params, &args); err != nil { + if err := self.coder.Decode(req.Params, &args); err != nil { return nil, shared.NewDecodeParamError(err.Error()) } @@ -163,7 +166,7 @@ func (self *adminApi) ImportChain(req *shared.Request) (interface{}, error) { func (self *adminApi) ExportChain(req *shared.Request) (interface{}, error) { args := new(ImportExportChainArgs) - if err := self.codec.Decode(req.Params, &args); err != nil { + if err := self.coder.Decode(req.Params, &args); err != nil { return nil, shared.NewDecodeParamError(err.Error()) } @@ -181,7 +184,7 @@ func (self *adminApi) ExportChain(req *shared.Request) (interface{}, error) { func (self *adminApi) Verbosity(req *shared.Request) (interface{}, error) { args := new(VerbosityArgs) - if err := self.codec.Decode(req.Params, &args); err != nil { + if err := self.coder.Decode(req.Params, &args); err != nil { return nil, shared.NewDecodeParamError(err.Error()) } @@ -202,7 +205,7 @@ func (self *adminApi) ChainSyncStatus(req *shared.Request) (interface{}, error) func (self *adminApi) SetSolc(req *shared.Request) (interface{}, error) { args := new(SetSolcArgs) - if err := self.codec.Decode(req.Params, &args); err != nil { + if err := self.coder.Decode(req.Params, &args); err != nil { return nil, shared.NewDecodeParamError(err.Error()) } @@ -212,3 +215,32 @@ func (self *adminApi) SetSolc(req *shared.Request) (interface{}, error) { } return solc.Info(), nil } + +func (self *adminApi) StartRPC(req *shared.Request) (interface{}, error) { + var err error + args := new(StartRPCArgs) + if err := self.coder.Decode(req.Params, &args); err != nil { + return nil, shared.NewDecodeParamError(err.Error()) + } + + cfg := comms.HttpConfig{ + ListenAddress: args.ListenAddress, + ListenPort: args.ListenPort, + CorsDomain: args.CorsDomain, + } + + if apis, err := ParseApiString(args.Apis, self.codec, self.xeth, self.ethereum); err == nil { + err = comms.StartHttp(cfg, self.codec, Merge(apis...)) + } + + if err == nil { + return true, nil + } + + return false, err +} + +func (self *adminApi) StopRPC(req *shared.Request) (interface{}, error) { + comms.StopHttp() + return true, nil +} diff --git a/rpc/api/admin_args.go b/rpc/api/admin_args.go index 56bb57e201..5437971caa 100644 --- a/rpc/api/admin_args.go +++ b/rpc/api/admin_args.go @@ -95,3 +95,55 @@ func (args *SetSolcArgs) UnmarshalJSON(b []byte) (err error) { return shared.NewInvalidTypeError("path", "not a string") } + +type StartRPCArgs struct { + ListenAddress string + ListenPort uint + CorsDomain string + Apis string +} + +func (args *StartRPCArgs) UnmarshalJSON(b []byte) (err error) { + var obj []interface{} + if err := json.Unmarshal(b, &obj); err != nil { + return shared.NewDecodeParamError(err.Error()) + } + + args.ListenAddress = "127.0.0.1" + args.ListenPort = 8545 + args.Apis = "net,eth,web3" + + if len(obj) >= 1 { + if addr, ok := obj[0].(string); ok { + args.ListenAddress = addr + } else { + return shared.NewInvalidTypeError("listenAddress", "not a string") + } + } + + if len(obj) >= 2 { + if port, ok := obj[1].(float64); ok && port >= 0 && port <= 64*1024 { + args.ListenPort = uint(port) + } else { + return shared.NewInvalidTypeError("listenPort", "not a valid port number") + } + } + + if len(obj) >= 3 { + if corsDomain, ok := obj[2].(string); ok { + args.CorsDomain = corsDomain + } else { + return shared.NewInvalidTypeError("corsDomain", "not a string") + } + } + + if len(obj) >= 4 { + if apis, ok := obj[3].(string); ok { + args.Apis = apis + } else { + return shared.NewInvalidTypeError("apis", "not a string") + } + } + + return nil +} diff --git a/rpc/api/admin_js.go b/rpc/api/admin_js.go index c3e713c67d..97642ade71 100644 --- a/rpc/api/admin_js.go +++ b/rpc/api/admin_js.go @@ -39,6 +39,20 @@ web3._extend({ params: 1, inputFormatter: [web3._extend.utils.formatInputString], outputFormatter: web3._extend.formatters.formatOutputString + }), + new web3._extend.Method({ + name: 'startRPC', + call: 'admin_startRPC', + params: 4, + inputFormatter: [web3._extend.utils.formatInputString,web3._extend.utils.formatInputInteger,web3._extend.utils.formatInputString,web3._extend.utils.formatInputString], + outputFormatter: web3._extend.formatters.formatOutputBool + }), + new web3._extend.Method({ + name: 'stopRPC', + call: 'admin_stopRPC', + params: 0, + inputFormatter: [], + outputFormatter: web3._extend.formatters.formatOutputBool }) ], properties: diff --git a/rpc/api/api.go b/rpc/api/api.go index 10b4485947..ca1ccb9a54 100644 --- a/rpc/api/api.go +++ b/rpc/api/api.go @@ -1,51 +1,10 @@ package api import ( - "strings" - "github.com/ethereum/go-ethereum/rpc/shared" ) -const ( - AdminApiName = "admin" - EthApiName = "eth" - DbApiName = "db" - DebugApiName = "debug" - MergedApiName = "merged" - MinerApiName = "miner" - NetApiName = "net" - ShhApiName = "shh" - TxPoolApiName = "txpool" - PersonalApiName = "personal" - Web3ApiName = "web3" - - JsonRpcVersion = "2.0" -) - -var ( - // All API's - AllApis = strings.Join([]string{ - AdminApiName, DbApiName, EthApiName, DebugApiName, MinerApiName, NetApiName, - ShhApiName, TxPoolApiName, PersonalApiName, Web3ApiName, - }, ",") -) - -// Ethereum RPC API interface -type EthereumApi interface { - // API identifier - Name() string - - // API version - ApiVersion() string - - // Execute the given request and returns the response or an error - Execute(*shared.Request) (interface{}, error) - - // List of supported RCP methods this API provides - Methods() []string -} - // Merge multiple API's to a single API instance -func Merge(apis ...EthereumApi) EthereumApi { +func Merge(apis ...shared.EthereumApi) shared.EthereumApi { return newMergedApi(apis...) } diff --git a/rpc/api/args.go b/rpc/api/args.go index 4ef1b26e72..fc85448e65 100644 --- a/rpc/api/args.go +++ b/rpc/api/args.go @@ -2,6 +2,7 @@ package api import ( "encoding/json" + "github.com/ethereum/go-ethereum/rpc/shared" ) @@ -54,4 +55,4 @@ func (args *FilterStringArgs) UnmarshalJSON(b []byte) (err error) { } args.Word = argstr return nil -} \ No newline at end of file +} diff --git a/rpc/api/args_test.go b/rpc/api/args_test.go index 4153d54325..a30f247bca 100644 --- a/rpc/api/args_test.go +++ b/rpc/api/args_test.go @@ -6,6 +6,7 @@ import ( "fmt" "math/big" "testing" + "github.com/ethereum/go-ethereum/rpc/shared" ) diff --git a/rpc/api/db.go b/rpc/api/db.go index 7452691680..6f10d64475 100644 --- a/rpc/api/db.go +++ b/rpc/api/db.go @@ -63,7 +63,7 @@ func (self *dbApi) Execute(req *shared.Request) (interface{}, error) { } func (self *dbApi) Name() string { - return DbApiName + return shared.DbApiName } func (self *dbApi) ApiVersion() string { diff --git a/rpc/api/debug.go b/rpc/api/debug.go index 5b6a449dce..b451d86624 100644 --- a/rpc/api/debug.go +++ b/rpc/api/debug.go @@ -71,7 +71,7 @@ func (self *debugApi) Execute(req *shared.Request) (interface{}, error) { } func (self *debugApi) Name() string { - return DebugApiName + return shared.DebugApiName } func (self *debugApi) ApiVersion() string { diff --git a/rpc/api/eth.go b/rpc/api/eth.go index cafa05e340..0bb8d449bb 100644 --- a/rpc/api/eth.go +++ b/rpc/api/eth.go @@ -100,7 +100,7 @@ func (self *ethApi) Execute(req *shared.Request) (interface{}, error) { } func (self *ethApi) Name() string { - return EthApiName + return shared.EthApiName } func (self *ethApi) ApiVersion() string { diff --git a/rpc/api/mergedapi.go b/rpc/api/mergedapi.go index 8cf4ae96e2..bc4fa32e89 100644 --- a/rpc/api/mergedapi.go +++ b/rpc/api/mergedapi.go @@ -13,14 +13,14 @@ const ( // combines multiple API's type MergedApi struct { apis map[string]string - methods map[string]EthereumApi + methods map[string]shared.EthereumApi } // create new merged api instance -func newMergedApi(apis ...EthereumApi) *MergedApi { +func newMergedApi(apis ...shared.EthereumApi) *MergedApi { mergedApi := new(MergedApi) mergedApi.apis = make(map[string]string, len(apis)) - mergedApi.methods = make(map[string]EthereumApi) + mergedApi.methods = make(map[string]shared.EthereumApi) for _, api := range apis { mergedApi.apis[api.Name()] = api.ApiVersion() @@ -54,7 +54,7 @@ func (self *MergedApi) Execute(req *shared.Request) (interface{}, error) { } func (self *MergedApi) Name() string { - return MergedApiName + return shared.MergedApiName } func (self *MergedApi) ApiVersion() string { diff --git a/rpc/api/mergedapi_js.go b/rpc/api/mergedapi_js.go deleted file mode 100644 index 778f64ec17..0000000000 --- a/rpc/api/mergedapi_js.go +++ /dev/null @@ -1 +0,0 @@ -package api diff --git a/rpc/api/miner.go b/rpc/api/miner.go index 0b5e74f528..7a84cb9ae2 100644 --- a/rpc/api/miner.go +++ b/rpc/api/miner.go @@ -66,7 +66,7 @@ func (self *minerApi) Methods() []string { } func (self *minerApi) Name() string { - return MinerApiName + return shared.MinerApiName } func (self *minerApi) ApiVersion() string { diff --git a/rpc/api/net.go b/rpc/api/net.go index 247c23827b..7616546610 100644 --- a/rpc/api/net.go +++ b/rpc/api/net.go @@ -63,7 +63,7 @@ func (self *netApi) Execute(req *shared.Request) (interface{}, error) { } func (self *netApi) Name() string { - return NetApiName + return shared.NetApiName } func (self *netApi) ApiVersion() string { diff --git a/rpc/api/personal.go b/rpc/api/personal.go index 7a6c91c821..b4a63ea7a5 100644 --- a/rpc/api/personal.go +++ b/rpc/api/personal.go @@ -66,7 +66,7 @@ func (self *personalApi) Execute(req *shared.Request) (interface{}, error) { } func (self *personalApi) Name() string { - return PersonalApiName + return shared.PersonalApiName } func (self *personalApi) ApiVersion() string { diff --git a/rpc/api/shh.go b/rpc/api/shh.go index e83a7b22e0..18a8fd15de 100644 --- a/rpc/api/shh.go +++ b/rpc/api/shh.go @@ -72,7 +72,7 @@ func (self *shhApi) Execute(req *shared.Request) (interface{}, error) { } func (self *shhApi) Name() string { - return ShhApiName + return shared.ShhApiName } func (self *shhApi) ApiVersion() string { diff --git a/rpc/api/txpool.go b/rpc/api/txpool.go index 64550bdafb..25ad6e9b2d 100644 --- a/rpc/api/txpool.go +++ b/rpc/api/txpool.go @@ -60,7 +60,7 @@ func (self *txPoolApi) Execute(req *shared.Request) (interface{}, error) { } func (self *txPoolApi) Name() string { - return TxPoolApiName + return shared.TxPoolApiName } func (self *txPoolApi) ApiVersion() string { diff --git a/rpc/api/utils.go b/rpc/api/utils.go index a4ce6409a0..9995e1f7c6 100644 --- a/rpc/api/utils.go +++ b/rpc/api/utils.go @@ -7,6 +7,7 @@ import ( "github.com/ethereum/go-ethereum/eth" "github.com/ethereum/go-ethereum/rpc/codec" + "github.com/ethereum/go-ethereum/rpc/shared" "github.com/ethereum/go-ethereum/xeth" ) @@ -23,6 +24,8 @@ var ( "chainSyncStatus", "setSolc", "datadir", + "startRPC", + "stopRPC", }, "db": []string{ "getString", @@ -129,35 +132,35 @@ var ( ) // Parse a comma separated API string to individual api's -func ParseApiString(apistr string, codec codec.Codec, xeth *xeth.XEth, eth *eth.Ethereum) ([]EthereumApi, error) { +func ParseApiString(apistr string, codec codec.Codec, xeth *xeth.XEth, eth *eth.Ethereum) ([]shared.EthereumApi, error) { if len(strings.TrimSpace(apistr)) == 0 { return nil, fmt.Errorf("Empty apistr provided") } names := strings.Split(apistr, ",") - apis := make([]EthereumApi, len(names)) + apis := make([]shared.EthereumApi, len(names)) for i, name := range names { switch strings.ToLower(strings.TrimSpace(name)) { - case AdminApiName: + case shared.AdminApiName: apis[i] = NewAdminApi(xeth, eth, codec) - case DebugApiName: + case shared.DebugApiName: apis[i] = NewDebugApi(xeth, eth, codec) - case DbApiName: + case shared.DbApiName: apis[i] = NewDbApi(xeth, eth, codec) - case EthApiName: + case shared.EthApiName: apis[i] = NewEthApi(xeth, codec) - case MinerApiName: + case shared.MinerApiName: apis[i] = NewMinerApi(eth, codec) - case NetApiName: + case shared.NetApiName: apis[i] = NewNetApi(xeth, eth, codec) - case ShhApiName: + case shared.ShhApiName: apis[i] = NewShhApi(xeth, eth, codec) - case TxPoolApiName: + case shared.TxPoolApiName: apis[i] = NewTxPoolApi(xeth, eth, codec) - case PersonalApiName: + case shared.PersonalApiName: apis[i] = NewPersonalApi(xeth, eth, codec) - case Web3ApiName: + case shared.Web3ApiName: apis[i] = NewWeb3Api(xeth, codec) default: return nil, fmt.Errorf("Unknown API '%s'", name) @@ -169,21 +172,21 @@ func ParseApiString(apistr string, codec codec.Codec, xeth *xeth.XEth, eth *eth. func Javascript(name string) string { switch strings.ToLower(strings.TrimSpace(name)) { - case AdminApiName: + case shared.AdminApiName: return Admin_JS - case DebugApiName: + case shared.DebugApiName: return Debug_JS - case DbApiName: + case shared.DbApiName: return Db_JS - case MinerApiName: + case shared.MinerApiName: return Miner_JS - case NetApiName: + case shared.NetApiName: return Net_JS - case ShhApiName: + case shared.ShhApiName: return Shh_JS - case TxPoolApiName: + case shared.TxPoolApiName: return TxPool_JS - case PersonalApiName: + case shared.PersonalApiName: return Personal_JS } diff --git a/rpc/api/web3.go b/rpc/api/web3.go index ed5008446d..4c20baa259 100644 --- a/rpc/api/web3.go +++ b/rpc/api/web3.go @@ -60,7 +60,7 @@ func (self *web3Api) Execute(req *shared.Request) (interface{}, error) { } func (self *web3Api) Name() string { - return Web3ApiName + return shared.Web3ApiName } func (self *web3Api) ApiVersion() string { diff --git a/rpc/comms/comms.go b/rpc/comms/comms.go index 29ad11b3ce..bfe6257582 100644 --- a/rpc/comms/comms.go +++ b/rpc/comms/comms.go @@ -11,7 +11,6 @@ import ( "github.com/ethereum/go-ethereum/logger" "github.com/ethereum/go-ethereum/logger/glog" - "github.com/ethereum/go-ethereum/rpc/api" "github.com/ethereum/go-ethereum/rpc/codec" "github.com/ethereum/go-ethereum/rpc/shared" ) @@ -22,14 +21,14 @@ const ( var ( // List with all API's which are offered over the in proc interface by default - DefaultInProcApis = api.AllApis + DefaultInProcApis = shared.AllApis // List with all API's which are offered over the IPC interface by default - DefaultIpcApis = api.AllApis + DefaultIpcApis = shared.AllApis // List with API's which are offered over thr HTTP/RPC interface by default DefaultHttpRpcApis = strings.Join([]string{ - api.DbApiName, api.EthApiName, api.NetApiName, api.Web3ApiName, + shared.DbApiName, shared.EthApiName, shared.NetApiName, shared.Web3ApiName, }, ",") ) @@ -44,7 +43,7 @@ type EthereumClient interface { SupportedModules() (map[string]string, error) } -func handle(conn net.Conn, api api.EthereumApi, c codec.Codec) { +func handle(conn net.Conn, api shared.EthereumApi, c codec.Codec) { codec := c.New(conn) for { diff --git a/rpc/comms/http.go b/rpc/comms/http.go index 6a543c0ed9..ebee791bd1 100644 --- a/rpc/comms/http.go +++ b/rpc/comms/http.go @@ -10,7 +10,6 @@ import ( "github.com/ethereum/go-ethereum/logger" "github.com/ethereum/go-ethereum/logger/glog" - "github.com/ethereum/go-ethereum/rpc/api" "github.com/ethereum/go-ethereum/rpc/codec" "github.com/ethereum/go-ethereum/rpc/shared" "github.com/rs/cors" @@ -28,7 +27,7 @@ type HttpConfig struct { CorsDomain string } -func StartHttp(cfg HttpConfig, codec codec.Codec, apis ...api.EthereumApi) error { +func StartHttp(cfg HttpConfig, codec codec.Codec, api shared.EthereumApi) error { if httpListener != nil { if fmt.Sprintf("%s:%d", cfg.ListenAddress, cfg.ListenPort) != httpListener.Addr().String() { return fmt.Errorf("RPC service already running on %s ", httpListener.Addr().String()) @@ -43,7 +42,6 @@ func StartHttp(cfg HttpConfig, codec codec.Codec, apis ...api.EthereumApi) error } httpListener = l - api := api.Merge(apis...) var handler http.Handler if len(cfg.CorsDomain) > 0 { var opts cors.Options diff --git a/rpc/comms/http_net.go b/rpc/comms/http_net.go index f326f1a7e7..acc5f99a95 100644 --- a/rpc/comms/http_net.go +++ b/rpc/comms/http_net.go @@ -11,7 +11,6 @@ import ( "github.com/ethereum/go-ethereum/logger" "github.com/ethereum/go-ethereum/logger/glog" - "github.com/ethereum/go-ethereum/rpc/api" "github.com/ethereum/go-ethereum/rpc/codec" "github.com/ethereum/go-ethereum/rpc/shared" ) @@ -90,7 +89,7 @@ func newStoppableHandler(h http.Handler, stop chan struct{}) http.Handler { case <-stop: w.Header().Set("Content-Type", "application/json") err := fmt.Errorf("RPC service stopped") - response := shared.NewRpcResponse(-1, api.JsonRpcVersion, nil, err) + response := shared.NewRpcResponse(-1, shared.JsonRpcVersion, nil, err) httpSend(w, response) default: h.ServeHTTP(w, r) @@ -110,14 +109,14 @@ func httpSend(writer io.Writer, v interface{}) (n int, err error) { return writer.Write(payload) } -func gethHttpHandler(codec codec.Codec, a api.EthereumApi) http.Handler { +func gethHttpHandler(codec codec.Codec, a shared.EthereumApi) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { w.Header().Set("Content-Type", "application/json") // Limit request size to resist DoS if req.ContentLength > maxHttpSizeReqLength { err := fmt.Errorf("Request too large") - response := shared.NewRpcErrorResponse(-1, api.JsonRpcVersion, -32700, err) + response := shared.NewRpcErrorResponse(-1, shared.JsonRpcVersion, -32700, err) httpSend(w, &response) return } @@ -126,7 +125,7 @@ func gethHttpHandler(codec codec.Codec, a api.EthereumApi) http.Handler { payload, err := ioutil.ReadAll(req.Body) if err != nil { err := fmt.Errorf("Could not read request body") - response := shared.NewRpcErrorResponse(-1, api.JsonRpcVersion, -32700, err) + response := shared.NewRpcErrorResponse(-1, shared.JsonRpcVersion, -32700, err) httpSend(w, &response) return } @@ -161,7 +160,7 @@ func gethHttpHandler(codec codec.Codec, a api.EthereumApi) http.Handler { // invalid request err = fmt.Errorf("Could not decode request") - res := shared.NewRpcErrorResponse(-1, api.JsonRpcVersion, -32600, err) + res := shared.NewRpcErrorResponse(-1, shared.JsonRpcVersion, -32600, err) httpSend(w, res) }) } diff --git a/rpc/comms/inproc.go b/rpc/comms/inproc.go index b9c4e93d9b..5c84b8fd86 100644 --- a/rpc/comms/inproc.go +++ b/rpc/comms/inproc.go @@ -3,15 +3,12 @@ package comms import ( "fmt" - "github.com/ethereum/go-ethereum/eth" - "github.com/ethereum/go-ethereum/rpc/api" "github.com/ethereum/go-ethereum/rpc/codec" "github.com/ethereum/go-ethereum/rpc/shared" - "github.com/ethereum/go-ethereum/xeth" ) type InProcClient struct { - api api.EthereumApi + api shared.EthereumApi codec codec.Codec lastId interface{} lastJsonrpc string @@ -31,10 +28,8 @@ func (self *InProcClient) Close() { } // Need to setup api support -func (self *InProcClient) Initialize(xeth *xeth.XEth, eth *eth.Ethereum) { - if apis, err := api.ParseApiString(api.AllApis, self.codec, xeth, eth); err == nil { - self.api = api.Merge(apis...) - } +func (self *InProcClient) Initialize(offeredApi shared.EthereumApi) { + self.api = offeredApi } func (self *InProcClient) Send(req interface{}) error { diff --git a/rpc/comms/ipc.go b/rpc/comms/ipc.go index 7f52193009..068a1288fe 100644 --- a/rpc/comms/ipc.go +++ b/rpc/comms/ipc.go @@ -6,7 +6,6 @@ import ( "encoding/json" - "github.com/ethereum/go-ethereum/rpc/api" "github.com/ethereum/go-ethereum/rpc/codec" "github.com/ethereum/go-ethereum/rpc/shared" ) @@ -92,7 +91,6 @@ func NewIpcClient(cfg IpcConfig, codec codec.Codec) (*ipcClient, error) { } // Start IPC server -func StartIpc(cfg IpcConfig, codec codec.Codec, apis ...api.EthereumApi) error { - offeredApi := api.Merge(apis...) +func StartIpc(cfg IpcConfig, codec codec.Codec, offeredApi shared.EthereumApi) error { return startIpc(cfg, codec, offeredApi) } diff --git a/rpc/comms/ipc_unix.go b/rpc/comms/ipc_unix.go index b5eec92dbb..295eb916b8 100644 --- a/rpc/comms/ipc_unix.go +++ b/rpc/comms/ipc_unix.go @@ -8,8 +8,8 @@ import ( "github.com/ethereum/go-ethereum/logger" "github.com/ethereum/go-ethereum/logger/glog" - "github.com/ethereum/go-ethereum/rpc/api" "github.com/ethereum/go-ethereum/rpc/codec" + "github.com/ethereum/go-ethereum/rpc/shared" ) func newIpcClient(cfg IpcConfig, codec codec.Codec) (*ipcClient, error) { @@ -31,7 +31,7 @@ func (self *ipcClient) reconnect() error { return err } -func startIpc(cfg IpcConfig, codec codec.Codec, api api.EthereumApi) error { +func startIpc(cfg IpcConfig, codec codec.Codec, api shared.EthereumApi) error { os.Remove(cfg.Endpoint) // in case it still exists from a previous run l, err := net.ListenUnix("unix", &net.UnixAddr{Name: cfg.Endpoint, Net: "unix"}) diff --git a/rpc/comms/ipc_windows.go b/rpc/comms/ipc_windows.go index 08f79274a5..44c82ef8a6 100644 --- a/rpc/comms/ipc_windows.go +++ b/rpc/comms/ipc_windows.go @@ -14,7 +14,6 @@ import ( "github.com/ethereum/go-ethereum/logger" "github.com/ethereum/go-ethereum/logger/glog" - "github.com/ethereum/go-ethereum/rpc/api" "github.com/ethereum/go-ethereum/rpc/codec" "github.com/ethereum/go-ethereum/rpc/shared" ) @@ -652,7 +651,7 @@ func (self *ipcClient) reconnect() error { return err } -func startIpc(cfg IpcConfig, codec codec.Codec, api api.EthereumApi) error { +func startIpc(cfg IpcConfig, codec codec.Codec, api shared.EthereumApi) error { os.Remove(cfg.Endpoint) // in case it still exists from a previous run l, err := Listen(cfg.Endpoint) diff --git a/rpc/jeth.go b/rpc/jeth.go index e656e8fa93..33fcd6efd6 100644 --- a/rpc/jeth.go +++ b/rpc/jeth.go @@ -4,25 +4,24 @@ import ( "encoding/json" "github.com/ethereum/go-ethereum/jsre" - "github.com/ethereum/go-ethereum/rpc/api" "github.com/ethereum/go-ethereum/rpc/comms" "github.com/ethereum/go-ethereum/rpc/shared" "github.com/robertkrimen/otto" ) type Jeth struct { - ethApi api.EthereumApi + ethApi shared.EthereumApi re *jsre.JSRE client comms.EthereumClient } -func NewJeth(ethApi api.EthereumApi, re *jsre.JSRE, client comms.EthereumClient) *Jeth { +func NewJeth(ethApi shared.EthereumApi, re *jsre.JSRE, client comms.EthereumClient) *Jeth { return &Jeth{ethApi, re, client} } func (self *Jeth) err(call otto.FunctionCall, code int, msg string, id interface{}) (response otto.Value) { rpcerr := &shared.ErrorObject{code, msg} - call.Otto.Set("ret_jsonrpc", api.JsonRpcVersion) + call.Otto.Set("ret_jsonrpc", shared.JsonRpcVersion) call.Otto.Set("ret_id", id) call.Otto.Set("ret_error", rpcerr) response, _ = call.Otto.Run(` @@ -61,7 +60,7 @@ func (self *Jeth) Send(call otto.FunctionCall) (response otto.Value) { return self.err(call, -32603, err.Error(), req.Id) } - call.Otto.Set("ret_jsonrpc", api.JsonRpcVersion) + call.Otto.Set("ret_jsonrpc", shared.JsonRpcVersion) call.Otto.Set("ret_id", req.Id) res, _ := json.Marshal(respif) diff --git a/rpc/shared/types.go b/rpc/shared/types.go index dd38a45598..7c4b04e83d 100644 --- a/rpc/shared/types.go +++ b/rpc/shared/types.go @@ -7,6 +7,21 @@ import ( "github.com/ethereum/go-ethereum/logger/glog" ) +// Ethereum RPC API interface +type EthereumApi interface { + // API identifier + Name() string + + // API version + ApiVersion() string + + // Execute the given request and returns the response or an error + Execute(*Request) (interface{}, error) + + // List of supported RCP methods this API provides + Methods() []string +} + // RPC request type Request struct { Id interface{} `json:"id"` diff --git a/rpc/shared/utils.go b/rpc/shared/utils.go new file mode 100644 index 0000000000..7953d6c229 --- /dev/null +++ b/rpc/shared/utils.go @@ -0,0 +1,28 @@ +package shared + +import "strings" + +const ( + AdminApiName = "admin" + EthApiName = "eth" + DbApiName = "db" + DebugApiName = "debug" + MergedApiName = "merged" + MinerApiName = "miner" + NetApiName = "net" + ShhApiName = "shh" + TxPoolApiName = "txpool" + PersonalApiName = "personal" + Web3ApiName = "web3" + + JsonRpcVersion = "2.0" +) + +var ( + // All API's + AllApis = strings.Join([]string{ + AdminApiName, DbApiName, EthApiName, DebugApiName, MinerApiName, NetApiName, + ShhApiName, TxPoolApiName, PersonalApiName, Web3ApiName, + }, ",") +) + From d36c25bcbcbc1986ab238465a187789c82818238 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= Date: Mon, 22 Jun 2015 14:07:08 +0300 Subject: [PATCH 023/156] eth/fetcher: handle and test block announce DOS attacks --- eth/fetcher/fetcher.go | 46 +++++++++++++++++++++++++++++++------ eth/fetcher/fetcher_test.go | 43 ++++++++++++++++++++++++++++++++++ 2 files changed, 82 insertions(+), 7 deletions(-) diff --git a/eth/fetcher/fetcher.go b/eth/fetcher/fetcher.go index b80182a455..8d707da5c4 100644 --- a/eth/fetcher/fetcher.go +++ b/eth/fetcher/fetcher.go @@ -20,6 +20,7 @@ const ( fetchTimeout = 5 * time.Second // Maximum alloted time to return an explicitly requested block maxUncleDist = 7 // Maximum allowed backward distance from the chain head maxQueueDist = 32 // Maximum allowed distance from the chain head to queue + announceLimit = 256 // Maximum number of unique blocks a peer may have announced ) var ( @@ -74,6 +75,7 @@ type Fetcher struct { quit chan struct{} // Announce states + announces map[string]int // Per peer announce counts to prevent memory exhaustion announced map[common.Hash][]*announce // Announced blocks, scheduled for fetching fetching map[common.Hash]*announce // Announced blocks, currently fetching @@ -98,6 +100,7 @@ func New(getBlock blockRetrievalFn, validateBlock blockValidatorFn, broadcastBlo filter: make(chan chan []*types.Block), done: make(chan common.Hash), quit: make(chan struct{}), + announces: make(map[string]int), announced: make(map[common.Hash][]*announce), fetching: make(map[common.Hash]*announce), queue: prque.New(), @@ -189,8 +192,7 @@ func (f *Fetcher) loop() { // Clean up any expired block fetches for hash, announce := range f.fetching { if time.Since(announce.time) > fetchTimeout { - delete(f.announced, hash) - delete(f.fetching, hash) + f.forgetBlock(hash) } } // Import any queued blocks that could potentially fit @@ -217,10 +219,17 @@ func (f *Fetcher) loop() { return case notification := <-f.notify: - // A block was announced, schedule if it's not yet downloading + // A block was announced, make sure the peer isn't DOSing us + count := f.announces[notification.origin] + 1 + if count > announceLimit { + glog.V(logger.Debug).Infof("Peer %s: exceeded outstanding announces (%d)", notification.origin, announceLimit) + break + } + // All is well, schedule the announce if block's not yet downloading if _, ok := f.fetching[notification.hash]; ok { break } + f.announces[notification.origin] = count f.announced[notification.hash] = append(f.announced[notification.hash], notification) if len(f.announced) == 1 { f.reschedule(fetch) @@ -232,8 +241,7 @@ func (f *Fetcher) loop() { case hash := <-f.done: // A pending import finished, remove all traces of the notification - delete(f.announced, hash) - delete(f.fetching, hash) + f.forgetBlock(hash) delete(f.queued, hash) case <-fetch.C: @@ -242,12 +250,15 @@ func (f *Fetcher) loop() { for hash, announces := range f.announced { if time.Since(announces[0].time) > arriveTimeout-gatherSlack { + // Pick a random peer to retrieve from, reset all others announce := announces[rand.Intn(len(announces))] + f.forgetBlock(hash) + + // If the block still didn't arrive, queue for fetching if f.getBlock(hash) == nil { request[announce.origin] = append(request[announce.origin], hash) f.fetching[hash] = announce } - delete(f.announced, hash) } } // Send out all block requests @@ -285,7 +296,7 @@ func (f *Fetcher) loop() { if f.getBlock(hash) == nil { explicit = append(explicit, block) } else { - delete(f.fetching, hash) + f.forgetBlock(hash) } } else { download = append(download, block) @@ -377,3 +388,24 @@ func (f *Fetcher) insert(peer string, block *types.Block) { go f.broadcastBlock(block, false) }() } + +// forgetBlock removes all traces of a block from the fetcher's internal state. +func (f *Fetcher) forgetBlock(hash common.Hash) { + // Remove all pending announces and decrement DOS counters + for _, announce := range f.announced[hash] { + f.announces[announce.origin]-- + if f.announces[announce.origin] == 0 { + delete(f.announces, announce.origin) + } + } + delete(f.announced, hash) + + // Remove any pending fetches and decrement the DOS counters + if announce := f.fetching[hash]; announce != nil { + f.announces[announce.origin]-- + if f.announces[announce.origin] == 0 { + delete(f.announces, announce.origin) + } + delete(f.fetching, hash) + } +} diff --git a/eth/fetcher/fetcher_test.go b/eth/fetcher/fetcher_test.go index 0d069ac65e..d594d830c8 100644 --- a/eth/fetcher/fetcher_test.go +++ b/eth/fetcher/fetcher_test.go @@ -395,3 +395,46 @@ func TestDistantDiscarding(t *testing.T) { t.Fatalf("fetcher queued future block") } } + +// Tests that a peer is unable to use unbounded memory with sending infinite +// block announcements to a node, but that even in the face of such an attack, +// the fetcher remains operational. +func TestAnnounceMemoryExhaustionAttack(t *testing.T) { + tester := newTester() + + // Create a valid chain and an infinite junk chain + hashes := createHashes(announceLimit+2*maxQueueDist, knownHash) + blocks := createBlocksFromHashes(hashes) + valid := tester.makeFetcher(blocks) + + attack := createHashes(announceLimit+2*maxQueueDist, unknownHash) + attacker := tester.makeFetcher(nil) + + // Feed the tester a huge hashset from the attacker, and a limited from the valid peer + for i := 0; i < len(attack); i++ { + if i < maxQueueDist { + tester.fetcher.Notify("valid", hashes[len(hashes)-1-i], time.Now().Add(arriveTimeout/2), valid) + } + tester.fetcher.Notify("attacker", attack[i], time.Now().Add(arriveTimeout/2), attacker) + } + if len(tester.fetcher.announced) != announceLimit+maxQueueDist { + t.Fatalf("queued announce count mismatch: have %d, want %d", len(tester.fetcher.announced), announceLimit+maxQueueDist) + } + // Wait for synchronisation to complete and check success for the valid peer + time.Sleep(2 * arriveTimeout) + if imported := len(tester.blocks); imported != maxQueueDist { + t.Fatalf("partial synchronised block mismatch: have %v, want %v", imported, maxQueueDist) + } + // Feed the remaining valid hashes to ensure DOS protection state remains clean + for i := len(hashes) - maxQueueDist; i >= 0; { + for j := 0; j < maxQueueDist && i >= 0; j++ { + tester.fetcher.Notify("valid", hashes[i], time.Now().Add(time.Millisecond), valid) + i-- + } + time.Sleep(256 * time.Millisecond) + } + time.Sleep(256 * time.Millisecond) + if imported := len(tester.blocks); imported != len(hashes) { + t.Fatalf("fully synchronised block mismatch: have %v, want %v", imported, len(hashes)) + } +} From 6d596b1ad106db964d4b6a60d35948b588e32b58 Mon Sep 17 00:00:00 2001 From: Bas van Kervel Date: Mon, 22 Jun 2015 13:19:59 +0200 Subject: [PATCH 024/156] fixed eth sign unittest --- rpc/api/eth.go | 4 ++-- rpc/api/eth_args.go | 12 ++++++------ rpc/api/eth_js.go | 17 +++++++++++++++++ rpc/api/utils.go | 2 ++ rpc/shared/utils.go | 1 - 5 files changed, 27 insertions(+), 9 deletions(-) diff --git a/rpc/api/eth.go b/rpc/api/eth.go index 0bb8d449bb..0dff138c65 100644 --- a/rpc/api/eth.go +++ b/rpc/api/eth.go @@ -46,7 +46,7 @@ var ( "eth_getData": (*ethApi).GetData, "eth_getCode": (*ethApi).GetData, "eth_sign": (*ethApi).Sign, - "eth_sendRawTransaction": (*ethApi).PushTx, + "eth_sendRawTransaction": (*ethApi).SendRawTransaction, "eth_sendTransaction": (*ethApi).SendTransaction, "eth_transact": (*ethApi).SendTransaction, "eth_estimateGas": (*ethApi).EstimateGas, @@ -250,7 +250,7 @@ func (self *ethApi) Sign(req *shared.Request) (interface{}, error) { return v, nil } -func (self *ethApi) PushTx(req *shared.Request) (interface{}, error) { +func (self *ethApi) SendRawTransaction(req *shared.Request) (interface{}, error) { args := new(NewDataArgs) if err := self.codec.Decode(req.Params, &args); err != nil { return nil, shared.NewDecodeParamError(err.Error()) diff --git a/rpc/api/eth_args.go b/rpc/api/eth_args.go index 02f438f0c3..bf8ffead6c 100644 --- a/rpc/api/eth_args.go +++ b/rpc/api/eth_args.go @@ -466,21 +466,21 @@ func (args *CallArgs) UnmarshalJSON(b []byte) (err error) { } args.Value = num - if ext.Gas == nil { - num = big.NewInt(0) - } else { + if ext.Gas != nil { if num, err = numString(ext.Gas); err != nil { return err } + } else { + num = nil } args.Gas = num - if ext.GasPrice == nil { - num = big.NewInt(0) - } else { + if ext.GasPrice != nil { if num, err = numString(ext.GasPrice); err != nil { return err } + } else { + num = nil } args.GasPrice = num diff --git a/rpc/api/eth_js.go b/rpc/api/eth_js.go index f7630bdd5d..e1268eb763 100644 --- a/rpc/api/eth_js.go +++ b/rpc/api/eth_js.go @@ -1,3 +1,20 @@ package api // JS api provided by web3.js +// eth_sign not standard + +const Eth_JS = ` +web3._extend({ + property: 'eth', + methods: + [ + new web3._extend.Method({ + name: 'sign', + call: 'eth_sign', + params: 2, + inputFormatter: [web3._extend.formatters.formatInputString,web3._extend.formatters.formatInputString], + outputFormatter: web3._extend.formatters.formatOutputString + }) + ] +}); +` diff --git a/rpc/api/utils.go b/rpc/api/utils.go index 9995e1f7c6..6e4835de61 100644 --- a/rpc/api/utils.go +++ b/rpc/api/utils.go @@ -178,6 +178,8 @@ func Javascript(name string) string { return Debug_JS case shared.DbApiName: return Db_JS + case shared.EthApiName: + return Eth_JS case shared.MinerApiName: return Miner_JS case shared.NetApiName: diff --git a/rpc/shared/utils.go b/rpc/shared/utils.go index 7953d6c229..e5d6ad4177 100644 --- a/rpc/shared/utils.go +++ b/rpc/shared/utils.go @@ -25,4 +25,3 @@ var ( ShhApiName, TxPoolApiName, PersonalApiName, Web3ApiName, }, ",") ) - From 4ee7f6fc88d504f2eac96de4e6e04d72032a933a Mon Sep 17 00:00:00 2001 From: Bas van Kervel Date: Mon, 22 Jun 2015 13:54:13 +0200 Subject: [PATCH 025/156] added missing change for sign test --- cmd/geth/js.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/geth/js.go b/cmd/geth/js.go index c0c77c02a2..01840ebd9b 100644 --- a/cmd/geth/js.go +++ b/cmd/geth/js.go @@ -314,7 +314,7 @@ func (js *jsre) apiBindings(f xeth.Frontend) error { // load only supported API's in javascript runtime shortcuts := "var eth = web3.eth; " for _, apiName := range apiNames { - if apiName == shared.Web3ApiName || apiName == shared.EthApiName { + if apiName == shared.Web3ApiName { continue // manually mapped } From 1989d1491a21ec1dd8adb20906e07badc5a2f9c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= Date: Mon, 22 Jun 2015 16:49:47 +0300 Subject: [PATCH 026/156] eth/fetcher: handle and (crude) test block memory DOS --- eth/fetcher/fetcher.go | 61 ++++++++++++++++++++++++--------- eth/fetcher/fetcher_test.go | 67 +++++++++++++++++++++++++++++++++---- 2 files changed, 105 insertions(+), 23 deletions(-) diff --git a/eth/fetcher/fetcher.go b/eth/fetcher/fetcher.go index 8d707da5c4..ceca79df0f 100644 --- a/eth/fetcher/fetcher.go +++ b/eth/fetcher/fetcher.go @@ -20,7 +20,8 @@ const ( fetchTimeout = 5 * time.Second // Maximum alloted time to return an explicitly requested block maxUncleDist = 7 // Maximum allowed backward distance from the chain head maxQueueDist = 32 // Maximum allowed distance from the chain head to queue - announceLimit = 256 // Maximum number of unique blocks a peer may have announced + hashLimit = 256 // Maximum number of unique blocks a peer may have announced + blockLimit = 64 // Maximum number of unique blocks a per may have delivered ) var ( @@ -80,8 +81,9 @@ type Fetcher struct { fetching map[common.Hash]*announce // Announced blocks, currently fetching // Block cache - queue *prque.Prque // Queue containing the import operations (block number sorted) - queued map[common.Hash]struct{} // Presence set of already queued blocks (to dedup imports) + queue *prque.Prque // Queue containing the import operations (block number sorted) + queues map[string]int // Per peer block counts to prevent memory exhaustion + queued map[common.Hash]*inject // Set of already queued blocks (to dedup imports) // Callbacks getBlock blockRetrievalFn // Retrieves a block from the local chain @@ -104,7 +106,8 @@ func New(getBlock blockRetrievalFn, validateBlock blockValidatorFn, broadcastBlo announced: make(map[common.Hash][]*announce), fetching: make(map[common.Hash]*announce), queue: prque.New(), - queued: make(map[common.Hash]struct{}), + queues: make(map[string]int), + queued: make(map[common.Hash]*inject), getBlock: getBlock, validateBlock: validateBlock, broadcastBlock: broadcastBlock, @@ -192,22 +195,24 @@ func (f *Fetcher) loop() { // Clean up any expired block fetches for hash, announce := range f.fetching { if time.Since(announce.time) > fetchTimeout { - f.forgetBlock(hash) + f.forgetHash(hash) } } // Import any queued blocks that could potentially fit height := f.chainHeight() for !f.queue.Empty() { op := f.queue.PopItem().(*inject) - number := op.block.NumberU64() // If too high up the chain or phase, continue later + number := op.block.NumberU64() if number > height+1 { f.queue.Push(op, -float32(op.block.NumberU64())) break } // Otherwise if fresh and still unknown, try and import - if number+maxUncleDist < height || f.getBlock(op.block.Hash()) != nil { + hash := op.block.Hash() + if number+maxUncleDist < height || f.getBlock(hash) != nil { + f.forgetBlock(hash) continue } f.insert(op.origin, op.block) @@ -221,8 +226,8 @@ func (f *Fetcher) loop() { case notification := <-f.notify: // A block was announced, make sure the peer isn't DOSing us count := f.announces[notification.origin] + 1 - if count > announceLimit { - glog.V(logger.Debug).Infof("Peer %s: exceeded outstanding announces (%d)", notification.origin, announceLimit) + if count > hashLimit { + glog.V(logger.Debug).Infof("Peer %s: exceeded outstanding announces (%d)", notification.origin, hashLimit) break } // All is well, schedule the announce if block's not yet downloading @@ -241,8 +246,8 @@ func (f *Fetcher) loop() { case hash := <-f.done: // A pending import finished, remove all traces of the notification + f.forgetHash(hash) f.forgetBlock(hash) - delete(f.queued, hash) case <-fetch.C: // At least one block's timer ran out, check for needing retrieval @@ -252,7 +257,7 @@ func (f *Fetcher) loop() { if time.Since(announces[0].time) > arriveTimeout-gatherSlack { // Pick a random peer to retrieve from, reset all others announce := announces[rand.Intn(len(announces))] - f.forgetBlock(hash) + f.forgetHash(hash) // If the block still didn't arrive, queue for fetching if f.getBlock(hash) == nil { @@ -296,7 +301,7 @@ func (f *Fetcher) loop() { if f.getBlock(hash) == nil { explicit = append(explicit, block) } else { - f.forgetBlock(hash) + f.forgetHash(hash) } } else { download = append(download, block) @@ -339,6 +344,12 @@ func (f *Fetcher) reschedule(fetch *time.Timer) { func (f *Fetcher) enqueue(peer string, block *types.Block) { hash := block.Hash() + // Ensure the peer isn't DOSing us + count := f.queues[peer] + 1 + if count > blockLimit { + glog.V(logger.Debug).Infof("Peer %s: discarded block #%d [%x], exceeded allowance (%d)", peer, block.NumberU64(), hash.Bytes()[:4], blockLimit) + return + } // Discard any past or too distant blocks if dist := int64(block.NumberU64()) - int64(f.chainHeight()); dist < -maxUncleDist || dist > maxQueueDist { glog.V(logger.Debug).Infof("Peer %s: discarded block #%d [%x], distance %d", peer, block.NumberU64(), hash.Bytes()[:4], dist) @@ -346,8 +357,13 @@ func (f *Fetcher) enqueue(peer string, block *types.Block) { } // Schedule the block for future importing if _, ok := f.queued[hash]; !ok { - f.queued[hash] = struct{}{} - f.queue.Push(&inject{origin: peer, block: block}, -float32(block.NumberU64())) + op := &inject{ + origin: peer, + block: block, + } + f.queues[peer] = count + f.queued[hash] = op + f.queue.Push(op, -float32(block.NumberU64())) if glog.V(logger.Debug) { glog.Infof("Peer %s: queued block #%d [%x], total %v", peer, block.NumberU64(), hash.Bytes()[:4], f.queue.Size()) @@ -389,8 +405,9 @@ func (f *Fetcher) insert(peer string, block *types.Block) { }() } -// forgetBlock removes all traces of a block from the fetcher's internal state. -func (f *Fetcher) forgetBlock(hash common.Hash) { +// forgetHash removes all traces of a block announcement from the fetcher's +// internal state. +func (f *Fetcher) forgetHash(hash common.Hash) { // Remove all pending announces and decrement DOS counters for _, announce := range f.announced[hash] { f.announces[announce.origin]-- @@ -409,3 +426,15 @@ func (f *Fetcher) forgetBlock(hash common.Hash) { delete(f.fetching, hash) } } + +// forgetBlock removes all traces of a queued block frmo the fetcher's internal +// state. +func (f *Fetcher) forgetBlock(hash common.Hash) { + if insert := f.queued[hash]; insert != nil { + f.queues[insert.origin]-- + if f.queues[insert.origin] == 0 { + delete(f.queues, insert.origin) + } + delete(f.queued, hash) + } +} diff --git a/eth/fetcher/fetcher_test.go b/eth/fetcher/fetcher_test.go index d594d830c8..b9f0f36a51 100644 --- a/eth/fetcher/fetcher_test.go +++ b/eth/fetcher/fetcher_test.go @@ -399,15 +399,15 @@ func TestDistantDiscarding(t *testing.T) { // Tests that a peer is unable to use unbounded memory with sending infinite // block announcements to a node, but that even in the face of such an attack, // the fetcher remains operational. -func TestAnnounceMemoryExhaustionAttack(t *testing.T) { +func TestHashMemoryExhaustionAttack(t *testing.T) { tester := newTester() // Create a valid chain and an infinite junk chain - hashes := createHashes(announceLimit+2*maxQueueDist, knownHash) + hashes := createHashes(hashLimit+2*maxQueueDist, knownHash) blocks := createBlocksFromHashes(hashes) valid := tester.makeFetcher(blocks) - attack := createHashes(announceLimit+2*maxQueueDist, unknownHash) + attack := createHashes(hashLimit+2*maxQueueDist, unknownHash) attacker := tester.makeFetcher(nil) // Feed the tester a huge hashset from the attacker, and a limited from the valid peer @@ -417,8 +417,8 @@ func TestAnnounceMemoryExhaustionAttack(t *testing.T) { } tester.fetcher.Notify("attacker", attack[i], time.Now().Add(arriveTimeout/2), attacker) } - if len(tester.fetcher.announced) != announceLimit+maxQueueDist { - t.Fatalf("queued announce count mismatch: have %d, want %d", len(tester.fetcher.announced), announceLimit+maxQueueDist) + if len(tester.fetcher.announced) != hashLimit+maxQueueDist { + t.Fatalf("queued announce count mismatch: have %d, want %d", len(tester.fetcher.announced), hashLimit+maxQueueDist) } // Wait for synchronisation to complete and check success for the valid peer time.Sleep(2 * arriveTimeout) @@ -431,10 +431,63 @@ func TestAnnounceMemoryExhaustionAttack(t *testing.T) { tester.fetcher.Notify("valid", hashes[i], time.Now().Add(time.Millisecond), valid) i-- } - time.Sleep(256 * time.Millisecond) + time.Sleep(500 * time.Millisecond) } - time.Sleep(256 * time.Millisecond) + time.Sleep(500 * time.Millisecond) if imported := len(tester.blocks); imported != len(hashes) { t.Fatalf("fully synchronised block mismatch: have %v, want %v", imported, len(hashes)) } } + +// Tests that blocks sent to the fetcher (either through propagation or via hash +// announces and retrievals) don't pile up indefinitely, exhausting available +// system memory. +func TestBlockMemoryExhaustionAttack(t *testing.T) { + tester := newTester() + + // Create a valid chain and a batch of dangling (but in range) blocks + hashes := createHashes(blockLimit, knownHash) + blocks := createBlocksFromHashes(hashes) + + attack := make(map[common.Hash]*types.Block) + for i := 0; i < 16; i++ { + hashes := createHashes(maxQueueDist-1, unknownHash) + blocks := createBlocksFromHashes(hashes) + for _, hash := range hashes[:maxQueueDist-2] { + attack[hash] = blocks[hash] + } + } + // Try to feed all the attacker blocks make sure only a limited batch is accepted + for _, block := range attack { + tester.fetcher.Enqueue("attacker", block) + } + time.Sleep(100 * time.Millisecond) + if queued := tester.fetcher.queue.Size(); queued != blockLimit { + t.Fatalf("queued block count mismatch: have %d, want %d", queued, blockLimit) + } + // Queue up a batch of valid blocks, and check that a new peer is allowed to do so + for i := 0; i < maxQueueDist-1; i++ { + tester.fetcher.Enqueue("valid", blocks[hashes[len(hashes)-3-i]]) + } + time.Sleep(100 * time.Millisecond) + if queued := tester.fetcher.queue.Size(); queued != blockLimit+maxQueueDist-1 { + t.Fatalf("queued block count mismatch: have %d, want %d", queued, blockLimit+maxQueueDist-1) + } + // Insert the missing piece (and sanity check the import) + tester.fetcher.Enqueue("valid", blocks[hashes[len(hashes)-2]]) + time.Sleep(500 * time.Millisecond) + if imported := len(tester.blocks); imported != maxQueueDist+1 { + t.Fatalf("synchronised block mismatch: have %v, want %v", imported, maxQueueDist+1) + } + // Insert the remaining blocks in chunks to ensure clean DOS protection + for i := maxQueueDist; i < len(hashes)-1; i++ { + tester.fetcher.Enqueue("valid", blocks[hashes[len(hashes)-2-i]]) + if i%maxQueueDist == 0 { + time.Sleep(500 * time.Millisecond) + } + } + time.Sleep(500 * time.Millisecond) + if imported := len(tester.blocks); imported != len(hashes) { + t.Fatalf("synchronised block mismatch: have %v, want %v", imported, len(hashes)) + } +} From b53f701c2791e7becba74c1efd4800fe68a06707 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= Date: Mon, 22 Jun 2015 18:08:28 +0300 Subject: [PATCH 027/156] eth/fetcher: remove test sleeps (15s -> 2.8s) --- eth/fetcher/fetcher.go | 17 ++- eth/fetcher/fetcher_test.go | 209 ++++++++++++++++++++++++++---------- 2 files changed, 167 insertions(+), 59 deletions(-) diff --git a/eth/fetcher/fetcher.go b/eth/fetcher/fetcher.go index ceca79df0f..7b5804ab22 100644 --- a/eth/fetcher/fetcher.go +++ b/eth/fetcher/fetcher.go @@ -92,6 +92,10 @@ type Fetcher struct { chainHeight chainHeightFn // Retrieves the current chain's height insertChain chainInsertFn // Injects a batch of blocks into the chain dropPeer peerDropFn // Drops a peer for misbehaving + + // Testing hooks + fetchingHook func([]common.Hash) // Method to call upon starting a block fetch + importedHook func(*types.Block) // Method to call upon successful block import } // New creates a block fetcher to retrieve blocks based on hash announcements. @@ -277,7 +281,13 @@ func (f *Fetcher) loop() { glog.V(logger.Detail).Infof("Peer %s: fetching %s", peer, list) } - go f.fetching[hashes[0]].fetch(hashes) + hashes := hashes // closure! + go func() { + if f.fetchingHook != nil { + f.fetchingHook(hashes) + } + f.fetching[hashes[0]].fetch(hashes) + }() } // Schedule the next fetch if blocks are still pending f.reschedule(fetch) @@ -402,6 +412,11 @@ func (f *Fetcher) insert(peer string, block *types.Block) { } // If import succeeded, broadcast the block go f.broadcastBlock(block, false) + + // Invoke the testing hook if needed + if f.importedHook != nil { + f.importedHook(block) + } }() } diff --git a/eth/fetcher/fetcher_test.go b/eth/fetcher/fetcher_test.go index b9f0f36a51..06ca2ef86f 100644 --- a/eth/fetcher/fetcher_test.go +++ b/eth/fetcher/fetcher_test.go @@ -163,7 +163,7 @@ func (f *fetcherTester) makeFetcher(blocks map[common.Hash]*types.Block) blockRe // them, successfully importing into the local chain. func TestSequentialAnnouncements(t *testing.T) { // Create a chain of blocks to import - targetBlocks := 24 + targetBlocks := 4 * hashLimit hashes := createHashes(targetBlocks, knownHash) blocks := createBlocksFromHashes(hashes) @@ -171,12 +171,22 @@ func TestSequentialAnnouncements(t *testing.T) { fetcher := tester.makeFetcher(blocks) // Iteratively announce blocks until all are imported - for i := len(hashes) - 1; i >= 0; i-- { + imported := make(chan *types.Block) + tester.fetcher.importedHook = func(block *types.Block) { imported <- block } + + for i := len(hashes) - 2; i >= 0; i-- { tester.fetcher.Notify("valid", hashes[i], time.Now().Add(-arriveTimeout), fetcher) - time.Sleep(50 * time.Millisecond) + + select { + case <-imported: + case <-time.After(time.Second): + t.Fatalf("block %d: import timeout", len(hashes)-i) + } } - if imported := len(tester.blocks); imported != targetBlocks+1 { - t.Fatalf("synchronised block mismatch: have %v, want %v", imported, targetBlocks+1) + select { + case <-imported: + t.Fatalf("extra block imported") + case <-time.After(50 * time.Millisecond): } } @@ -184,7 +194,7 @@ func TestSequentialAnnouncements(t *testing.T) { // peer), they will only get downloaded at most once. func TestConcurrentAnnouncements(t *testing.T) { // Create a chain of blocks to import - targetBlocks := 24 + targetBlocks := 4 * hashLimit hashes := createHashes(targetBlocks, knownHash) blocks := createBlocksFromHashes(hashes) @@ -198,15 +208,24 @@ func TestConcurrentAnnouncements(t *testing.T) { return fetcher(hashes) } // Iteratively announce blocks until all are imported - for i := len(hashes) - 1; i >= 0; i-- { + imported := make(chan *types.Block) + tester.fetcher.importedHook = func(block *types.Block) { imported <- block } + + for i := len(hashes) - 2; i >= 0; i-- { tester.fetcher.Notify("first", hashes[i], time.Now().Add(-arriveTimeout), wrapper) tester.fetcher.Notify("second", hashes[i], time.Now().Add(-arriveTimeout+time.Millisecond), wrapper) tester.fetcher.Notify("second", hashes[i], time.Now().Add(-arriveTimeout-time.Millisecond), wrapper) - time.Sleep(50 * time.Millisecond) + select { + case <-imported: + case <-time.After(time.Second): + t.Fatalf("block %d: import timeout", len(hashes)-i) + } } - if imported := len(tester.blocks); imported != targetBlocks+1 { - t.Fatalf("synchronised block mismatch: have %v, want %v", imported, targetBlocks+1) + select { + case <-imported: + t.Fatalf("extra block imported") + case <-time.After(50 * time.Millisecond): } // Make sure no blocks were retrieved twice if int(counter) != targetBlocks { @@ -218,7 +237,7 @@ func TestConcurrentAnnouncements(t *testing.T) { // results in a valid import. func TestOverlappingAnnouncements(t *testing.T) { // Create a chain of blocks to import - targetBlocks := 24 + targetBlocks := 4 * hashLimit hashes := createHashes(targetBlocks, knownHash) blocks := createBlocksFromHashes(hashes) @@ -226,15 +245,31 @@ func TestOverlappingAnnouncements(t *testing.T) { fetcher := tester.makeFetcher(blocks) // Iteratively announce blocks, but overlap them continuously - delay, overlap := 50*time.Millisecond, time.Duration(5) - for i := len(hashes) - 1; i >= 0; i-- { - tester.fetcher.Notify("valid", hashes[i], time.Now().Add(-arriveTimeout+overlap*delay), fetcher) - time.Sleep(delay) - } - time.Sleep(overlap * delay) + fetching := make(chan []common.Hash) + imported := make(chan *types.Block, len(hashes)-1) + tester.fetcher.fetchingHook = func(hashes []common.Hash) { fetching <- hashes } + tester.fetcher.importedHook = func(block *types.Block) { imported <- block } - if imported := len(tester.blocks); imported != targetBlocks+1 { - t.Fatalf("synchronised block mismatch: have %v, want %v", imported, targetBlocks+1) + for i := len(hashes) - 2; i >= 0; i-- { + tester.fetcher.Notify("valid", hashes[i], time.Now().Add(-arriveTimeout), fetcher) + select { + case <-fetching: + case <-time.After(time.Second): + t.Fatalf("hash %d: announce timeout", len(hashes)-i) + } + } + // Wait for all the imports to complete and check count + for i := 0; i < len(hashes)-1; i++ { + select { + case <-imported: + case <-time.After(time.Second): + t.Fatalf("block %d: import timeout", i) + } + } + select { + case <-imported: + t.Fatalf("extra block imported") + case <-time.After(50 * time.Millisecond): } } @@ -280,27 +315,37 @@ func TestPendingDeduplication(t *testing.T) { // imported when all the gaps are filled in. func TestRandomArrivalImport(t *testing.T) { // Create a chain of blocks to import, and choose one to delay - targetBlocks := 24 - hashes := createHashes(targetBlocks, knownHash) + hashes := createHashes(maxQueueDist, knownHash) blocks := createBlocksFromHashes(hashes) - skip := targetBlocks / 2 + skip := maxQueueDist / 2 tester := newTester() fetcher := tester.makeFetcher(blocks) // Iteratively announce blocks, skipping one entry + imported := make(chan *types.Block, len(hashes)-1) + tester.fetcher.importedHook = func(block *types.Block) { imported <- block } + for i := len(hashes) - 1; i >= 0; i-- { if i != skip { tester.fetcher.Notify("valid", hashes[i], time.Now().Add(-arriveTimeout), fetcher) - time.Sleep(50 * time.Millisecond) + time.Sleep(time.Millisecond) } } // Finally announce the skipped entry and check full import tester.fetcher.Notify("valid", hashes[skip], time.Now().Add(-arriveTimeout), fetcher) - time.Sleep(50 * time.Millisecond) - if imported := len(tester.blocks); imported != targetBlocks+1 { - t.Fatalf("synchronised block mismatch: have %v, want %v", imported, targetBlocks+1) + for i := 0; i < len(hashes)-1; i++ { + select { + case <-imported: + case <-time.After(time.Second): + t.Fatalf("block %d: import timeout", i) + } + } + select { + case <-imported: + t.Fatalf("extra block imported") + case <-time.After(50 * time.Millisecond): } } @@ -308,27 +353,37 @@ func TestRandomArrivalImport(t *testing.T) { // are correctly schedule, filling and import queue gaps. func TestQueueGapFill(t *testing.T) { // Create a chain of blocks to import, and choose one to not announce at all - targetBlocks := 24 - hashes := createHashes(targetBlocks, knownHash) + hashes := createHashes(maxQueueDist, knownHash) blocks := createBlocksFromHashes(hashes) - skip := targetBlocks / 2 + skip := maxQueueDist / 2 tester := newTester() fetcher := tester.makeFetcher(blocks) // Iteratively announce blocks, skipping one entry + imported := make(chan *types.Block, len(hashes)-1) + tester.fetcher.importedHook = func(block *types.Block) { imported <- block } + for i := len(hashes) - 1; i >= 0; i-- { if i != skip { tester.fetcher.Notify("valid", hashes[i], time.Now().Add(-arriveTimeout), fetcher) - time.Sleep(50 * time.Millisecond) + time.Sleep(time.Millisecond) } } // Fill the missing block directly as if propagated tester.fetcher.Enqueue("valid", blocks[hashes[skip]]) - time.Sleep(50 * time.Millisecond) - if imported := len(tester.blocks); imported != targetBlocks+1 { - t.Fatalf("synchronised block mismatch: have %v, want %v", imported, targetBlocks+1) + for i := 0; i < len(hashes)-1; i++ { + select { + case <-imported: + case <-time.After(time.Second): + t.Fatalf("block %d: import timeout", i) + } + } + select { + case <-imported: + t.Fatalf("extra block imported") + case <-time.After(50 * time.Millisecond): } } @@ -348,9 +403,15 @@ func TestImportDeduplication(t *testing.T) { atomic.AddUint32(&counter, uint32(len(blocks))) return tester.insertChain(blocks) } + // Instrument the fetching and imported events + fetching := make(chan []common.Hash) + imported := make(chan *types.Block, len(hashes)-1) + tester.fetcher.fetchingHook = func(hashes []common.Hash) { fetching <- hashes } + tester.fetcher.importedHook = func(block *types.Block) { imported <- block } + // Announce the duplicating block, wait for retrieval, and also propagate directly tester.fetcher.Notify("valid", hashes[0], time.Now().Add(-arriveTimeout), fetcher) - time.Sleep(50 * time.Millisecond) + <-fetching tester.fetcher.Enqueue("valid", blocks[hashes[0]]) tester.fetcher.Enqueue("valid", blocks[hashes[0]]) @@ -358,8 +419,13 @@ func TestImportDeduplication(t *testing.T) { // Fill the missing block directly as if propagated, and check import uniqueness tester.fetcher.Enqueue("valid", blocks[hashes[1]]) - time.Sleep(50 * time.Millisecond) - + for done := false; !done; { + select { + case <-imported: + case <-time.After(50 * time.Millisecond): + done = true + } + } if imported := len(tester.blocks); imported != 3 { t.Fatalf("synchronised block mismatch: have %v, want %v", imported, 3) } @@ -400,8 +466,12 @@ func TestDistantDiscarding(t *testing.T) { // block announcements to a node, but that even in the face of such an attack, // the fetcher remains operational. func TestHashMemoryExhaustionAttack(t *testing.T) { + // Create a tester with instrumented import hooks tester := newTester() + imported := make(chan *types.Block) + tester.fetcher.importedHook = func(block *types.Block) { imported <- block } + // Create a valid chain and an infinite junk chain hashes := createHashes(hashLimit+2*maxQueueDist, knownHash) blocks := createBlocksFromHashes(hashes) @@ -413,29 +483,39 @@ func TestHashMemoryExhaustionAttack(t *testing.T) { // Feed the tester a huge hashset from the attacker, and a limited from the valid peer for i := 0; i < len(attack); i++ { if i < maxQueueDist { - tester.fetcher.Notify("valid", hashes[len(hashes)-1-i], time.Now().Add(arriveTimeout/2), valid) + tester.fetcher.Notify("valid", hashes[len(hashes)-2-i], time.Now(), valid) } - tester.fetcher.Notify("attacker", attack[i], time.Now().Add(arriveTimeout/2), attacker) + tester.fetcher.Notify("attacker", attack[i], time.Now(), attacker) } if len(tester.fetcher.announced) != hashLimit+maxQueueDist { t.Fatalf("queued announce count mismatch: have %d, want %d", len(tester.fetcher.announced), hashLimit+maxQueueDist) } - // Wait for synchronisation to complete and check success for the valid peer - time.Sleep(2 * arriveTimeout) - if imported := len(tester.blocks); imported != maxQueueDist { - t.Fatalf("partial synchronised block mismatch: have %v, want %v", imported, maxQueueDist) + // Wait for fetches to complete + for i := 0; i < maxQueueDist; i++ { + select { + case <-imported: + case <-time.After(time.Second): + t.Fatalf("block %d: import timeout", i) + } + } + select { + case <-imported: + t.Fatalf("extra block imported") + case <-time.After(50 * time.Millisecond): } // Feed the remaining valid hashes to ensure DOS protection state remains clean - for i := len(hashes) - maxQueueDist; i >= 0; { - for j := 0; j < maxQueueDist && i >= 0; j++ { - tester.fetcher.Notify("valid", hashes[i], time.Now().Add(time.Millisecond), valid) - i-- + for i := len(hashes) - maxQueueDist - 2; i >= 0; i-- { + tester.fetcher.Notify("valid", hashes[i], time.Now().Add(-arriveTimeout), valid) + select { + case <-imported: + case <-time.After(time.Second): + t.Fatalf("block %d: import timeout", len(hashes)-i) } - time.Sleep(500 * time.Millisecond) } - time.Sleep(500 * time.Millisecond) - if imported := len(tester.blocks); imported != len(hashes) { - t.Fatalf("fully synchronised block mismatch: have %v, want %v", imported, len(hashes)) + select { + case <-imported: + t.Fatalf("extra block imported") + case <-time.After(50 * time.Millisecond): } } @@ -443,14 +523,18 @@ func TestHashMemoryExhaustionAttack(t *testing.T) { // announces and retrievals) don't pile up indefinitely, exhausting available // system memory. func TestBlockMemoryExhaustionAttack(t *testing.T) { + // Create a tester with instrumented import hooks tester := newTester() + imported := make(chan *types.Block) + tester.fetcher.importedHook = func(block *types.Block) { imported <- block } + // Create a valid chain and a batch of dangling (but in range) blocks - hashes := createHashes(blockLimit, knownHash) + hashes := createHashes(blockLimit+2*maxQueueDist, knownHash) blocks := createBlocksFromHashes(hashes) attack := make(map[common.Hash]*types.Block) - for i := 0; i < 16; i++ { + for len(attack) < blockLimit+2*maxQueueDist { hashes := createHashes(maxQueueDist-1, unknownHash) blocks := createBlocksFromHashes(hashes) for _, hash := range hashes[:maxQueueDist-2] { @@ -475,18 +559,27 @@ func TestBlockMemoryExhaustionAttack(t *testing.T) { } // Insert the missing piece (and sanity check the import) tester.fetcher.Enqueue("valid", blocks[hashes[len(hashes)-2]]) - time.Sleep(500 * time.Millisecond) - if imported := len(tester.blocks); imported != maxQueueDist+1 { - t.Fatalf("synchronised block mismatch: have %v, want %v", imported, maxQueueDist+1) + for i := 0; i < maxQueueDist; i++ { + select { + case <-imported: + case <-time.After(time.Second): + t.Fatalf("block %d: import timeout", i) + } + } + select { + case <-imported: + t.Fatalf("extra block imported") + case <-time.After(50 * time.Millisecond): } // Insert the remaining blocks in chunks to ensure clean DOS protection for i := maxQueueDist; i < len(hashes)-1; i++ { tester.fetcher.Enqueue("valid", blocks[hashes[len(hashes)-2-i]]) - if i%maxQueueDist == 0 { - time.Sleep(500 * time.Millisecond) + select { + case <-imported: + case <-time.After(time.Second): + t.Fatalf("block %d: import timeout", len(hashes)-i) } } - time.Sleep(500 * time.Millisecond) if imported := len(tester.blocks); imported != len(hashes) { t.Fatalf("synchronised block mismatch: have %v, want %v", imported, len(hashes)) } From 99ca4b619b22c000dfe633b036ed0b9b0fe83523 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= Date: Mon, 22 Jun 2015 18:28:38 +0300 Subject: [PATCH 028/156] eth/fetcher: clean up test assertions --- eth/fetcher/fetcher_test.go | 160 +++++++++++------------------------- 1 file changed, 49 insertions(+), 111 deletions(-) diff --git a/eth/fetcher/fetcher_test.go b/eth/fetcher/fetcher_test.go index 06ca2ef86f..80247d9d20 100644 --- a/eth/fetcher/fetcher_test.go +++ b/eth/fetcher/fetcher_test.go @@ -159,6 +159,37 @@ func (f *fetcherTester) makeFetcher(blocks map[common.Hash]*types.Block) blockRe } } +// verifyImportEvent verifies that one single event arrive on an import channel. +func verifyImportEvent(t *testing.T, imported chan *types.Block) { + select { + case <-imported: + case <-time.After(time.Second): + t.Fatalf("import timeout") + } +} + +// verifyImportCount verifies that exactly count number of events arrive on an +// import hook channel. +func verifyImportCount(t *testing.T, imported chan *types.Block, count int) { + for i := 0; i < count; i++ { + select { + case <-imported: + case <-time.After(time.Second): + t.Fatalf("block %d: import timeout", i) + } + } + verifyImportDone(t, imported) +} + +// verifyImportDone verifies that no more events are arriving on an import channel. +func verifyImportDone(t *testing.T, imported chan *types.Block) { + select { + case <-imported: + t.Fatalf("extra block imported") + case <-time.After(50 * time.Millisecond): + } +} + // Tests that a fetcher accepts block announcements and initiates retrievals for // them, successfully importing into the local chain. func TestSequentialAnnouncements(t *testing.T) { @@ -176,18 +207,9 @@ func TestSequentialAnnouncements(t *testing.T) { for i := len(hashes) - 2; i >= 0; i-- { tester.fetcher.Notify("valid", hashes[i], time.Now().Add(-arriveTimeout), fetcher) - - select { - case <-imported: - case <-time.After(time.Second): - t.Fatalf("block %d: import timeout", len(hashes)-i) - } - } - select { - case <-imported: - t.Fatalf("extra block imported") - case <-time.After(50 * time.Millisecond): + verifyImportEvent(t, imported) } + verifyImportDone(t, imported) } // Tests that if blocks are announced by multiple peers (or even the same buggy @@ -216,17 +238,10 @@ func TestConcurrentAnnouncements(t *testing.T) { tester.fetcher.Notify("second", hashes[i], time.Now().Add(-arriveTimeout+time.Millisecond), wrapper) tester.fetcher.Notify("second", hashes[i], time.Now().Add(-arriveTimeout-time.Millisecond), wrapper) - select { - case <-imported: - case <-time.After(time.Second): - t.Fatalf("block %d: import timeout", len(hashes)-i) - } - } - select { - case <-imported: - t.Fatalf("extra block imported") - case <-time.After(50 * time.Millisecond): + verifyImportEvent(t, imported) } + verifyImportDone(t, imported) + // Make sure no blocks were retrieved twice if int(counter) != targetBlocks { t.Fatalf("retrieval count mismatch: have %v, want %v", counter, targetBlocks) @@ -259,18 +274,7 @@ func TestOverlappingAnnouncements(t *testing.T) { } } // Wait for all the imports to complete and check count - for i := 0; i < len(hashes)-1; i++ { - select { - case <-imported: - case <-time.After(time.Second): - t.Fatalf("block %d: import timeout", i) - } - } - select { - case <-imported: - t.Fatalf("extra block imported") - case <-time.After(50 * time.Millisecond): - } + verifyImportCount(t, imported, len(hashes)-1) } // Tests that announces already being retrieved will not be duplicated. @@ -334,19 +338,7 @@ func TestRandomArrivalImport(t *testing.T) { } // Finally announce the skipped entry and check full import tester.fetcher.Notify("valid", hashes[skip], time.Now().Add(-arriveTimeout), fetcher) - - for i := 0; i < len(hashes)-1; i++ { - select { - case <-imported: - case <-time.After(time.Second): - t.Fatalf("block %d: import timeout", i) - } - } - select { - case <-imported: - t.Fatalf("extra block imported") - case <-time.After(50 * time.Millisecond): - } + verifyImportCount(t, imported, len(hashes)-1) } // Tests that direct block enqueues (due to block propagation vs. hash announce) @@ -372,19 +364,7 @@ func TestQueueGapFill(t *testing.T) { } // Fill the missing block directly as if propagated tester.fetcher.Enqueue("valid", blocks[hashes[skip]]) - - for i := 0; i < len(hashes)-1; i++ { - select { - case <-imported: - case <-time.After(time.Second): - t.Fatalf("block %d: import timeout", i) - } - } - select { - case <-imported: - t.Fatalf("extra block imported") - case <-time.After(50 * time.Millisecond): - } + verifyImportCount(t, imported, len(hashes)-1) } // Tests that blocks arriving from various sources (multiple propagations, hash @@ -419,16 +399,8 @@ func TestImportDeduplication(t *testing.T) { // Fill the missing block directly as if propagated, and check import uniqueness tester.fetcher.Enqueue("valid", blocks[hashes[1]]) - for done := false; !done; { - select { - case <-imported: - case <-time.After(50 * time.Millisecond): - done = true - } - } - if imported := len(tester.blocks); imported != 3 { - t.Fatalf("synchronised block mismatch: have %v, want %v", imported, 3) - } + verifyImportCount(t, imported, 2) + if counter != 2 { t.Fatalf("import invocation count mismatch: have %v, want %v", counter, 2) } @@ -491,32 +463,14 @@ func TestHashMemoryExhaustionAttack(t *testing.T) { t.Fatalf("queued announce count mismatch: have %d, want %d", len(tester.fetcher.announced), hashLimit+maxQueueDist) } // Wait for fetches to complete - for i := 0; i < maxQueueDist; i++ { - select { - case <-imported: - case <-time.After(time.Second): - t.Fatalf("block %d: import timeout", i) - } - } - select { - case <-imported: - t.Fatalf("extra block imported") - case <-time.After(50 * time.Millisecond): - } + verifyImportCount(t, imported, maxQueueDist) + // Feed the remaining valid hashes to ensure DOS protection state remains clean for i := len(hashes) - maxQueueDist - 2; i >= 0; i-- { tester.fetcher.Notify("valid", hashes[i], time.Now().Add(-arriveTimeout), valid) - select { - case <-imported: - case <-time.After(time.Second): - t.Fatalf("block %d: import timeout", len(hashes)-i) - } - } - select { - case <-imported: - t.Fatalf("extra block imported") - case <-time.After(50 * time.Millisecond): + verifyImportEvent(t, imported) } + verifyImportDone(t, imported) } // Tests that blocks sent to the fetcher (either through propagation or via hash @@ -559,28 +513,12 @@ func TestBlockMemoryExhaustionAttack(t *testing.T) { } // Insert the missing piece (and sanity check the import) tester.fetcher.Enqueue("valid", blocks[hashes[len(hashes)-2]]) - for i := 0; i < maxQueueDist; i++ { - select { - case <-imported: - case <-time.After(time.Second): - t.Fatalf("block %d: import timeout", i) - } - } - select { - case <-imported: - t.Fatalf("extra block imported") - case <-time.After(50 * time.Millisecond): - } + verifyImportCount(t, imported, maxQueueDist) + // Insert the remaining blocks in chunks to ensure clean DOS protection for i := maxQueueDist; i < len(hashes)-1; i++ { tester.fetcher.Enqueue("valid", blocks[hashes[len(hashes)-2-i]]) - select { - case <-imported: - case <-time.After(time.Second): - t.Fatalf("block %d: import timeout", len(hashes)-i) - } - } - if imported := len(tester.blocks); imported != len(hashes) { - t.Fatalf("synchronised block mismatch: have %v, want %v", imported, len(hashes)) + verifyImportEvent(t, imported) } + verifyImportDone(t, imported) } From 3ce17d2862e89e20b8e9b10cc02ee0b1333f6625 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= Date: Mon, 22 Jun 2015 20:13:18 +0300 Subject: [PATCH 029/156] eth/fetcher: fix a closure data race --- eth/fetcher/fetcher.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/eth/fetcher/fetcher.go b/eth/fetcher/fetcher.go index 7b5804ab22..90a202235e 100644 --- a/eth/fetcher/fetcher.go +++ b/eth/fetcher/fetcher.go @@ -281,12 +281,13 @@ func (f *Fetcher) loop() { glog.V(logger.Detail).Infof("Peer %s: fetching %s", peer, list) } - hashes := hashes // closure! + // Create a closure of the fetch and schedule in on a new thread + fetcher, hashes := f.fetching[hashes[0]].fetch, hashes go func() { if f.fetchingHook != nil { f.fetchingHook(hashes) } - f.fetching[hashes[0]].fetch(hashes) + fetcher(hashes) }() } // Schedule the next fetch if blocks are still pending From 57c911c39804ccfcf597df0acc6a03eb096d7652 Mon Sep 17 00:00:00 2001 From: Bas van Kervel Date: Tue, 23 Jun 2015 08:26:17 +0200 Subject: [PATCH 030/156] bugfix in startRPC error handling --- rpc/api/admin.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/rpc/api/admin.go b/rpc/api/admin.go index 7e79fd4d08..b27482cfea 100644 --- a/rpc/api/admin.go +++ b/rpc/api/admin.go @@ -217,7 +217,6 @@ func (self *adminApi) SetSolc(req *shared.Request) (interface{}, error) { } func (self *adminApi) StartRPC(req *shared.Request) (interface{}, error) { - var err error args := new(StartRPCArgs) if err := self.coder.Decode(req.Params, &args); err != nil { return nil, shared.NewDecodeParamError(err.Error()) @@ -229,14 +228,15 @@ func (self *adminApi) StartRPC(req *shared.Request) (interface{}, error) { CorsDomain: args.CorsDomain, } - if apis, err := ParseApiString(args.Apis, self.codec, self.xeth, self.ethereum); err == nil { - err = comms.StartHttp(cfg, self.codec, Merge(apis...)) + apis, err := ParseApiString(args.Apis, self.codec, self.xeth, self.ethereum) + if err != nil { + return false, err } + err = comms.StartHttp(cfg, self.codec, Merge(apis...)) if err == nil { return true, nil } - return false, err } From 55424a11af6bd11c6c9f4b433a4d4690b7267ad4 Mon Sep 17 00:00:00 2001 From: Bas van Kervel Date: Tue, 23 Jun 2015 09:11:57 +0200 Subject: [PATCH 031/156] improved action description --- cmd/geth/main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/geth/main.go b/cmd/geth/main.go index e5c3614fc9..1e5481ecaa 100644 --- a/cmd/geth/main.go +++ b/cmd/geth/main.go @@ -208,7 +208,7 @@ See https://github.com/ethereum/go-ethereum/wiki/Javascipt-Console { Action: attach, Name: "attach", - Usage: `Geth Console: interactive JavaScript environment`, + Usage: `Geth Console: interactive JavaScript environment (connect to node)`, Description: ` The Geth console is an interactive shell for the JavaScript runtime environment which exposes a node admin interface as well as the Ðapp JavaScript API. From 2b3957f3737b56622e38425a52caea2a836f8b63 Mon Sep 17 00:00:00 2001 From: Bas van Kervel Date: Tue, 23 Jun 2015 09:38:30 +0200 Subject: [PATCH 032/156] fixed relative path issue with javascript files --- cmd/geth/main.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cmd/geth/main.go b/cmd/geth/main.go index 1e5481ecaa..02ec633007 100644 --- a/cmd/geth/main.go +++ b/cmd/geth/main.go @@ -333,7 +333,7 @@ func attach(ctx *cli.Context) { } repl := newLightweightJSRE( - ctx.String(utils.JSpathFlag.Name), + ctx.GlobalString(utils.JSpathFlag.Name), client, true, nil) @@ -366,7 +366,7 @@ func console(ctx *cli.Context) { startEth(ctx, ethereum) repl := newJSRE( ethereum, - ctx.String(utils.JSpathFlag.Name), + ctx.GlobalString(utils.JSpathFlag.Name), ctx.GlobalString(utils.RPCCORSDomainFlag.Name), client, true, @@ -395,7 +395,7 @@ func execJSFiles(ctx *cli.Context) { startEth(ctx, ethereum) repl := newJSRE( ethereum, - ctx.String(utils.JSpathFlag.Name), + ctx.GlobalString(utils.JSpathFlag.Name), ctx.GlobalString(utils.RPCCORSDomainFlag.Name), client, false, From 67e6f74e9af00ff011a6a02f18644804eb18cdaa Mon Sep 17 00:00:00 2001 From: Jeffrey Wilcke Date: Tue, 23 Jun 2015 19:11:20 +0200 Subject: [PATCH 033/156] cmd/geth: bump --- cmd/geth/main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/geth/main.go b/cmd/geth/main.go index 02ec633007..5a0f523a64 100644 --- a/cmd/geth/main.go +++ b/cmd/geth/main.go @@ -46,7 +46,7 @@ import ( const ( ClientIdentifier = "Geth" - Version = "0.9.31" + Version = "0.9.32" ) var ( From 22c7ce0162f2d14a7340e00e93697780c91d2087 Mon Sep 17 00:00:00 2001 From: Jeffrey Wilcke Date: Tue, 23 Jun 2015 19:20:20 +0200 Subject: [PATCH 034/156] cmd/geth: version bump 0.9.33 --- cmd/geth/main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/geth/main.go b/cmd/geth/main.go index 5a0f523a64..963aced15f 100644 --- a/cmd/geth/main.go +++ b/cmd/geth/main.go @@ -46,7 +46,7 @@ import ( const ( ClientIdentifier = "Geth" - Version = "0.9.32" + Version = "0.9.33" ) var ( From d23ec6c4194e7c0f70372db58d49ec222dc4e22c Mon Sep 17 00:00:00 2001 From: Gustav Simonsson Date: Sun, 24 May 2015 03:42:10 +0200 Subject: [PATCH 035/156] Change keystore to version 3 * Change password protection crypto in keystore to version 3 * Update KeyStoreTests/basic_tests.json * Add support for PBKDF2 with HMAC-SHA256 * Change MAC and encryption key to avoid unnecessary hashing * Add tests for test vectors in new wiki page defining version 3 * Add tests for new keystore tests in ethereum/tests repo * Move JSON loading util to common for use in both tests and crypto packages * Add backwards compatibility with key store version 1 --- common/test_utils.go | 37 ++++ crypto/crypto.go | 26 ++- crypto/key.go | 26 ++- crypto/key_store_passphrase.go | 199 +++++++++++------- crypto/key_store_test.go | 114 +++++++++- .../cb61d5a9c4896fb9658090b597ef0e7be6f7b67e | 1 + crypto/tests/v1_test_vector.json | 28 +++ crypto/tests/v3_test_vector.json | 49 +++++ 8 files changed, 385 insertions(+), 95 deletions(-) create mode 100644 common/test_utils.go create mode 100644 crypto/tests/v1/cb61d5a9c4896fb9658090b597ef0e7be6f7b67e/cb61d5a9c4896fb9658090b597ef0e7be6f7b67e create mode 100644 crypto/tests/v1_test_vector.json create mode 100644 crypto/tests/v3_test_vector.json diff --git a/common/test_utils.go b/common/test_utils.go new file mode 100644 index 0000000000..8346c147af --- /dev/null +++ b/common/test_utils.go @@ -0,0 +1,37 @@ +package common + +import ( + "encoding/json" + "fmt" + "io/ioutil" +) + +// LoadJSON reads the given file and unmarshals its content. +func LoadJSON(file string, val interface{}) error { + content, err := ioutil.ReadFile(file) + if err != nil { + return err + } + if err := json.Unmarshal(content, val); err != nil { + if syntaxerr, ok := err.(*json.SyntaxError); ok { + line := findLine(content, syntaxerr.Offset) + return fmt.Errorf("JSON syntax error at %v:%v: %v", file, line, err) + } + return fmt.Errorf("JSON unmarshal error in %v: %v", file, err) + } + return nil +} + +// findLine returns the line number for the given offset into data. +func findLine(data []byte, offset int64) (line int) { + line = 1 + for i, r := range string(data) { + if int64(i) >= offset { + return + } + if r == '\n' { + line++ + } + } + return +} diff --git a/crypto/crypto.go b/crypto/crypto.go index 8f5597b096..153bbbc5d4 100644 --- a/crypto/crypto.go +++ b/crypto/crypto.go @@ -258,19 +258,31 @@ func decryptPreSaleKey(fileContent []byte, password string) (key *Key, err error return key, err } -func aesCBCDecrypt(key []byte, cipherText []byte, iv []byte) (plainText []byte, err error) { +// AES-128 is selected due to size of encryptKey +func aesCTRXOR(key, inText, iv []byte) ([]byte, error) { aesBlock, err := aes.NewCipher(key) if err != nil { - return plainText, err + return nil, err + } + stream := cipher.NewCTR(aesBlock, iv) + outText := make([]byte, len(inText)) + stream.XORKeyStream(outText, inText) + return outText, err +} + +func aesCBCDecrypt(key, cipherText, iv []byte) ([]byte, error) { + aesBlock, err := aes.NewCipher(key) + if err != nil { + return nil, err } decrypter := cipher.NewCBCDecrypter(aesBlock, iv) - paddedPlainText := make([]byte, len(cipherText)) - decrypter.CryptBlocks(paddedPlainText, cipherText) - plainText = PKCS7Unpad(paddedPlainText) - if plainText == nil { + paddedPlaintext := make([]byte, len(cipherText)) + decrypter.CryptBlocks(paddedPlaintext, cipherText) + plaintext := PKCS7Unpad(paddedPlaintext) + if plaintext == nil { err = errors.New("Decryption failed: PKCS7Unpad failed after AES decryption") } - return plainText, err + return plaintext, err } // From https://leanpub.com/gocrypto/read#leanpub-auto-block-cipher-modes diff --git a/crypto/key.go b/crypto/key.go index 0b76c43ff3..4075afd835 100644 --- a/crypto/key.go +++ b/crypto/key.go @@ -35,7 +35,7 @@ import ( ) const ( - version = "1" + version = 3 ) type Key struct { @@ -51,10 +51,17 @@ type plainKeyJSON struct { Address string `json:"address"` PrivateKey string `json:"privatekey"` Id string `json:"id"` - Version string `json:"version"` + Version int `json:"version"` } -type encryptedKeyJSON struct { +type encryptedKeyJSONV3 struct { + Address string `json:"address"` + Crypto cryptoJSON + Id string `json:"id"` + Version int `json:"version"` +} + +type encryptedKeyJSONV1 struct { Address string `json:"address"` Crypto cryptoJSON Id string `json:"id"` @@ -62,13 +69,12 @@ type encryptedKeyJSON struct { } type cryptoJSON struct { - Cipher string `json:"cipher"` - CipherText string `json:"ciphertext"` - CipherParams cipherparamsJSON `json:"cipherparams"` - KDF string `json:"kdf"` - KDFParams scryptParamsJSON `json:"kdfparams"` - MAC string `json:"mac"` - Version string `json:"version"` + Cipher string `json:"cipher"` + CipherText string `json:"ciphertext"` + CipherParams cipherparamsJSON `json:"cipherparams"` + KDF string `json:"kdf"` + KDFParams map[string]interface{} `json:"kdfparams"` + MAC string `json:"mac"` } type cipherparamsJSON struct { diff --git a/crypto/key_store_passphrase.go b/crypto/key_store_passphrase.go index 782f92bf1e..2000a24386 100644 --- a/crypto/key_store_passphrase.go +++ b/crypto/key_store_passphrase.go @@ -26,40 +26,7 @@ This key store behaves as KeyStorePlain with the difference that the private key is encrypted and on disk uses another JSON encoding. -Cryptography: - -1. Encryption key is first 16 bytes of scrypt derived key - from user passphrase. Scrypt parameters - (work factors) [1][2] are defined as constants below. -2. Scrypt salt is 32 random bytes from CSPRNG. - It's stored in plain next in the key file. -3. MAC is SHA3-256 of concatenation of ciphertext and - last 16 bytes of scrypt derived key. -4. Plaintext is the EC private key bytes. -5. Encryption algo is AES 128 CBC [3][4] -6. CBC IV is 16 random bytes from CSPRNG. - It's stored in plain next in the key file. -7. Plaintext padding is PKCS #7 [5][6] - -Encoding: - -1. On disk, the ciphertext, MAC, salt and IV are encoded in a JSON object. - cat a key file to see the structure. -2. byte arrays are base64 JSON strings. -3. The EC private key bytes are in uncompressed form [7]. - They are a big-endian byte slice of the absolute value of D [8][9]. - -References: - -1. http://www.tarsnap.com/scrypt/scrypt-slides.pdf -2. http://stackoverflow.com/questions/11126315/what-are-optimal-scrypt-work-factors -3. http://en.wikipedia.org/wiki/Advanced_Encryption_Standard -4. http://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Cipher-block_chaining_.28CBC.29 -5. https://leanpub.com/gocrypto/read#leanpub-auto-block-cipher-modes -6. http://tools.ietf.org/html/rfc2315 -7. http://bitcoin.stackexchange.com/questions/3059/what-is-a-compressed-bitcoin-key -8. http://golang.org/pkg/crypto/ecdsa/#PrivateKey -9. https://golang.org/pkg/math/big/#Int.Bytes +The crypto is documented at https://github.com/ethereum/wiki/wiki/Web3-Secret-Storage-Definition */ @@ -68,23 +35,25 @@ package crypto import ( "bytes" "crypto/aes" - "crypto/cipher" + "crypto/sha256" "encoding/hex" "encoding/json" "errors" + "fmt" "io" "os" "path/filepath" + "reflect" "code.google.com/p/go-uuid/uuid" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/crypto/randentropy" + "golang.org/x/crypto/pbkdf2" "golang.org/x/crypto/scrypt" ) const ( - keyHeaderVersion = "1" - keyHeaderKDF = "scrypt" + keyHeaderKDF = "scrypt" // 2^18 / 8 / 1 uses 256MB memory and approx 1s CPU time on a modern CPU. scryptN = 1 << 18 scryptr = 8 @@ -105,7 +74,7 @@ func (ks keyStorePassphrase) GenerateNewKey(rand io.Reader, auth string) (key *K } func (ks keyStorePassphrase) GetKey(keyAddr common.Address, auth string) (key *Key, err error) { - keyBytes, keyId, err := DecryptKey(ks, keyAddr, auth) + keyBytes, keyId, err := DecryptKeyFromFile(ks, keyAddr, auth) if err != nil { return nil, err } @@ -129,51 +98,43 @@ func (ks keyStorePassphrase) StoreKey(key *Key, auth string) (err error) { return err } - encryptKey := Sha3(derivedKey[:16])[:16] - + encryptKey := derivedKey[:16] keyBytes := FromECDSA(key.PrivateKey) - toEncrypt := PKCS7Pad(keyBytes) - AES128Block, err := aes.NewCipher(encryptKey) + iv := randentropy.GetEntropyCSPRNG(aes.BlockSize) // 16 + cipherText, err := aesCTRXOR(encryptKey, keyBytes, iv) if err != nil { return err } - iv := randentropy.GetEntropyCSPRNG(aes.BlockSize) // 16 - AES128CBCEncrypter := cipher.NewCBCEncrypter(AES128Block, iv) - cipherText := make([]byte, len(toEncrypt)) - AES128CBCEncrypter.CryptBlocks(cipherText, toEncrypt) - mac := Sha3(derivedKey[16:32], cipherText) - scryptParamsJSON := scryptParamsJSON{ - N: scryptN, - R: scryptr, - P: scryptp, - DkLen: scryptdkLen, - Salt: hex.EncodeToString(salt), - } + scryptParamsJSON := make(map[string]interface{}, 5) + scryptParamsJSON["n"] = scryptN + scryptParamsJSON["r"] = scryptr + scryptParamsJSON["p"] = scryptp + scryptParamsJSON["dklen"] = scryptdkLen + scryptParamsJSON["salt"] = hex.EncodeToString(salt) cipherParamsJSON := cipherparamsJSON{ IV: hex.EncodeToString(iv), } cryptoStruct := cryptoJSON{ - Cipher: "aes-128-cbc", + Cipher: "aes-128-ctr", CipherText: hex.EncodeToString(cipherText), CipherParams: cipherParamsJSON, KDF: "scrypt", KDFParams: scryptParamsJSON, MAC: hex.EncodeToString(mac), - Version: "1", } - encryptedKeyJSON := encryptedKeyJSON{ + encryptedKeyJSONV3 := encryptedKeyJSONV3{ hex.EncodeToString(key.Address[:]), cryptoStruct, key.Id.String(), version, } - keyJSON, err := json.Marshal(encryptedKeyJSON) + keyJSON, err := json.Marshal(encryptedKeyJSONV3) if err != nil { return err } @@ -183,7 +144,7 @@ func (ks keyStorePassphrase) StoreKey(key *Key, auth string) (err error) { func (ks keyStorePassphrase) DeleteKey(keyAddr common.Address, auth string) (err error) { // only delete if correct passphrase is given - _, _, err = DecryptKey(ks, keyAddr, auth) + _, _, err = DecryptKeyFromFile(ks, keyAddr, auth) if err != nil { return err } @@ -192,17 +153,43 @@ func (ks keyStorePassphrase) DeleteKey(keyAddr common.Address, auth string) (err return os.RemoveAll(keyDirPath) } -func DecryptKey(ks keyStorePassphrase, keyAddr common.Address, auth string) (keyBytes []byte, keyId []byte, err error) { +func DecryptKeyFromFile(ks keyStorePassphrase, keyAddr common.Address, auth string) (keyBytes []byte, keyId []byte, err error) { fileContent, err := GetKeyFile(ks.keysDirPath, keyAddr) if err != nil { return nil, nil, err } - keyProtected := new(encryptedKeyJSON) - err = json.Unmarshal(fileContent, keyProtected) + m := make(map[string]interface{}) + err = json.Unmarshal(fileContent, &m) + + v := reflect.ValueOf(m["version"]) + if v.Kind() == reflect.String && v.String() == "1" { + k := new(encryptedKeyJSONV1) + err := json.Unmarshal(fileContent, k) + if err != nil { + return nil, nil, err + } + return decryptKeyV1(k, auth) + } else { + k := new(encryptedKeyJSONV3) + err := json.Unmarshal(fileContent, k) + if err != nil { + return nil, nil, err + } + return decryptKeyV3(k, auth) + } +} + +func decryptKeyV3(keyProtected *encryptedKeyJSONV3, auth string) (keyBytes []byte, keyId []byte, err error) { + if keyProtected.Version != version { + return nil, nil, fmt.Errorf("Version not supported: %v", keyProtected.Version) + } + + if keyProtected.Crypto.Cipher != "aes-128-ctr" { + return nil, nil, fmt.Errorf("Cipher not supported: %v", keyProtected.Crypto.Cipher) + } keyId = uuid.Parse(keyProtected.Id) - mac, err := hex.DecodeString(keyProtected.Crypto.MAC) if err != nil { return nil, nil, err @@ -218,27 +205,49 @@ func DecryptKey(ks keyStorePassphrase, keyAddr common.Address, auth string) (key return nil, nil, err } - salt, err := hex.DecodeString(keyProtected.Crypto.KDFParams.Salt) - if err != nil { - return nil, nil, err - } - - n := keyProtected.Crypto.KDFParams.N - r := keyProtected.Crypto.KDFParams.R - p := keyProtected.Crypto.KDFParams.P - dkLen := keyProtected.Crypto.KDFParams.DkLen - - authArray := []byte(auth) - derivedKey, err := scrypt.Key(authArray, salt, n, r, p, dkLen) + derivedKey, err := getKDFKey(keyProtected.Crypto, auth) if err != nil { return nil, nil, err } calculatedMAC := Sha3(derivedKey[16:32], cipherText) if !bytes.Equal(calculatedMAC, mac) { - err = errors.New("Decryption failed: MAC mismatch") + return nil, nil, errors.New("Decryption failed: MAC mismatch") + } + + plainText, err := aesCTRXOR(derivedKey[:16], cipherText, iv) + if err != nil { return nil, nil, err } + return plainText, keyId, err +} + +func decryptKeyV1(keyProtected *encryptedKeyJSONV1, auth string) (keyBytes []byte, keyId []byte, err error) { + keyId = uuid.Parse(keyProtected.Id) + mac, err := hex.DecodeString(keyProtected.Crypto.MAC) + if err != nil { + return nil, nil, err + } + + iv, err := hex.DecodeString(keyProtected.Crypto.CipherParams.IV) + if err != nil { + return nil, nil, err + } + + cipherText, err := hex.DecodeString(keyProtected.Crypto.CipherText) + if err != nil { + return nil, nil, err + } + + derivedKey, err := getKDFKey(keyProtected.Crypto, auth) + if err != nil { + return nil, nil, err + } + + calculatedMAC := Sha3(derivedKey[16:32], cipherText) + if !bytes.Equal(calculatedMAC, mac) { + return nil, nil, errors.New("Decryption failed: MAC mismatch") + } plainText, err := aesCBCDecrypt(Sha3(derivedKey[:16])[:16], cipherText, iv) if err != nil { @@ -246,3 +255,41 @@ func DecryptKey(ks keyStorePassphrase, keyAddr common.Address, auth string) (key } return plainText, keyId, err } + +func getKDFKey(cryptoJSON cryptoJSON, auth string) ([]byte, error) { + authArray := []byte(auth) + salt, err := hex.DecodeString(cryptoJSON.KDFParams["salt"].(string)) + if err != nil { + return nil, err + } + dkLen := ensureInt(cryptoJSON.KDFParams["dklen"]) + + if cryptoJSON.KDF == "scrypt" { + n := ensureInt(cryptoJSON.KDFParams["n"]) + r := ensureInt(cryptoJSON.KDFParams["r"]) + p := ensureInt(cryptoJSON.KDFParams["p"]) + return scrypt.Key(authArray, salt, n, r, p, dkLen) + + } else if cryptoJSON.KDF == "pbkdf2" { + c := ensureInt(cryptoJSON.KDFParams["c"]) + prf := cryptoJSON.KDFParams["prf"].(string) + if prf != "hmac-sha256" { + return nil, fmt.Errorf("Unsupported PBKDF2 PRF: ", prf) + } + key := pbkdf2.Key(authArray, salt, c, dkLen, sha256.New) + return key, nil + } + + return nil, fmt.Errorf("Unsupported KDF: ", cryptoJSON.KDF) +} + +// TODO: can we do without this when unmarshalling dynamic JSON? +// why do integers in KDF params end up as float64 and not int after +// unmarshal? +func ensureInt(x interface{}) int { + res, ok := x.(int) + if !ok { + res = int(x.(float64)) + } + return res +} diff --git a/crypto/key_store_test.go b/crypto/key_store_test.go index 6e50afe34a..53b7901bdd 100644 --- a/crypto/key_store_test.go +++ b/crypto/key_store_test.go @@ -1,10 +1,13 @@ package crypto import ( - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/crypto/randentropy" + "encoding/hex" + "fmt" "reflect" "testing" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/crypto/randentropy" ) func TestKeyStorePlain(t *testing.T) { @@ -97,3 +100,110 @@ func TestImportPreSaleKey(t *testing.T) { t.Fatal(err) } } + +// Test and utils for the key store tests in the Ethereum JSON tests; +// tests/KeyStoreTests/basic_tests.json +type KeyStoreTestV3 struct { + Json encryptedKeyJSONV3 + Password string + Priv string +} + +type KeyStoreTestV1 struct { + Json encryptedKeyJSONV1 + Password string + Priv string +} + +func TestV3_PBKDF2_1(t *testing.T) { + tests := loadKeyStoreTestV3("tests/v3_test_vector.json", t) + testDecryptV3(tests["wikipage_test_vector_pbkdf2"], t) +} + +func TestV3_PBKDF2_2(t *testing.T) { + tests := loadKeyStoreTestV3("../tests/files/KeyStoreTests/basic_tests.json", t) + testDecryptV3(tests["test1"], t) +} + +func TestV3_PBKDF2_3(t *testing.T) { + tests := loadKeyStoreTestV3("../tests/files/KeyStoreTests/basic_tests.json", t) + testDecryptV3(tests["python_generated_test_with_odd_iv"], t) +} + +func TestV3_PBKDF2_4(t *testing.T) { + tests := loadKeyStoreTestV3("../tests/files/KeyStoreTests/basic_tests.json", t) + testDecryptV3(tests["evilnonce"], t) +} + +func TestV3_Scrypt_1(t *testing.T) { + tests := loadKeyStoreTestV3("tests/v3_test_vector.json", t) + testDecryptV3(tests["wikipage_test_vector_scrypt"], t) +} + +func TestV3_Scrypt_2(t *testing.T) { + tests := loadKeyStoreTestV3("../tests/files/KeyStoreTests/basic_tests.json", t) + testDecryptV3(tests["test2"], t) +} + +func TestV1_1(t *testing.T) { + tests := loadKeyStoreTestV1("tests/v1_test_vector.json", t) + testDecryptV1(tests["test1"], t) +} + +func TestV1_2(t *testing.T) { + ks := NewKeyStorePassphrase("tests/v1") + addr := common.HexToAddress("cb61d5a9c4896fb9658090b597ef0e7be6f7b67e") + k, err := ks.GetKey(addr, "g") + if err != nil { + t.Fatal(err) + } + if k.Address != addr { + t.Fatal(fmt.Errorf("Unexpected address: %v, expected %v", k.Address, addr)) + } + + privHex := hex.EncodeToString(FromECDSA(k.PrivateKey)) + expectedHex := "d1b1178d3529626a1a93e073f65028370d14c7eb0936eb42abef05db6f37ad7d" + if privHex != expectedHex { + t.Fatal(fmt.Errorf("Unexpected privkey: %v, expected %v", privHex, expectedHex)) + } +} + +func testDecryptV3(test KeyStoreTestV3, t *testing.T) { + privBytes, _, err := decryptKeyV3(&test.Json, test.Password) + if err != nil { + t.Fatal(err) + } + privHex := hex.EncodeToString(privBytes) + if test.Priv != privHex { + t.Fatal(fmt.Errorf("Decrypted bytes not equal to test, expected %v have %v", test.Priv, privHex)) + } +} + +func testDecryptV1(test KeyStoreTestV1, t *testing.T) { + privBytes, _, err := decryptKeyV1(&test.Json, test.Password) + if err != nil { + t.Fatal(err) + } + privHex := hex.EncodeToString(privBytes) + if test.Priv != privHex { + t.Fatal(fmt.Errorf("Decrypted bytes not equal to test, expected %v have %v", test.Priv, privHex)) + } +} + +func loadKeyStoreTestV3(file string, t *testing.T) map[string]KeyStoreTestV3 { + tests := make(map[string]KeyStoreTestV3) + err := common.LoadJSON(file, &tests) + if err != nil { + t.Fatal(err) + } + return tests +} + +func loadKeyStoreTestV1(file string, t *testing.T) map[string]KeyStoreTestV1 { + tests := make(map[string]KeyStoreTestV1) + err := common.LoadJSON(file, &tests) + if err != nil { + t.Fatal(err) + } + return tests +} diff --git a/crypto/tests/v1/cb61d5a9c4896fb9658090b597ef0e7be6f7b67e/cb61d5a9c4896fb9658090b597ef0e7be6f7b67e b/crypto/tests/v1/cb61d5a9c4896fb9658090b597ef0e7be6f7b67e/cb61d5a9c4896fb9658090b597ef0e7be6f7b67e new file mode 100644 index 0000000000..498d8131e8 --- /dev/null +++ b/crypto/tests/v1/cb61d5a9c4896fb9658090b597ef0e7be6f7b67e/cb61d5a9c4896fb9658090b597ef0e7be6f7b67e @@ -0,0 +1 @@ +{"address":"cb61d5a9c4896fb9658090b597ef0e7be6f7b67e","Crypto":{"cipher":"aes-128-cbc","ciphertext":"6143d3192db8b66eabd693d9c4e414dcfaee52abda451af79ccf474dafb35f1bfc7ea013aa9d2ee35969a1a2e8d752d0","cipherparams":{"iv":"35337770fc2117994ecdcad026bccff4"},"kdf":"scrypt","kdfparams":{"n":262144,"r":8,"p":1,"dklen":32,"salt":"9afcddebca541253a2f4053391c673ff9fe23097cd8555d149d929e4ccf1257f"},"mac":"3f3d5af884b17a100b0b3232c0636c230a54dc2ac8d986227219b0dd89197644","version":"1"},"id":"e25f7c1f-d318-4f29-b62c-687190d4d299","version":"1"} \ No newline at end of file diff --git a/crypto/tests/v1_test_vector.json b/crypto/tests/v1_test_vector.json new file mode 100644 index 0000000000..3d09b55b5e --- /dev/null +++ b/crypto/tests/v1_test_vector.json @@ -0,0 +1,28 @@ +{ + "test1": { + "json": { + "Crypto": { + "cipher": "aes-128-cbc", + "cipherparams": { + "iv": "35337770fc2117994ecdcad026bccff4" + }, + "ciphertext": "6143d3192db8b66eabd693d9c4e414dcfaee52abda451af79ccf474dafb35f1bfc7ea013aa9d2ee35969a1a2e8d752d0", + "kdf": "scrypt", + "kdfparams": { + "dklen": 32, + "n": 262144, + "p": 1, + "r": 8, + "salt": "9afcddebca541253a2f4053391c673ff9fe23097cd8555d149d929e4ccf1257f" + }, + "mac": "3f3d5af884b17a100b0b3232c0636c230a54dc2ac8d986227219b0dd89197644", + "version": "1" + }, + "address": "cb61d5a9c4896fb9658090b597ef0e7be6f7b67e", + "id": "e25f7c1f-d318-4f29-b62c-687190d4d299", + "version": "1" + }, + "password": "g", + "priv": "d1b1178d3529626a1a93e073f65028370d14c7eb0936eb42abef05db6f37ad7d" + } +} diff --git a/crypto/tests/v3_test_vector.json b/crypto/tests/v3_test_vector.json new file mode 100644 index 0000000000..e9d7b62f0d --- /dev/null +++ b/crypto/tests/v3_test_vector.json @@ -0,0 +1,49 @@ +{ + "wikipage_test_vector_scrypt": { + "json": { + "crypto" : { + "cipher" : "aes-128-ctr", + "cipherparams" : { + "iv" : "83dbcc02d8ccb40e466191a123791e0e" + }, + "ciphertext" : "d172bf743a674da9cdad04534d56926ef8358534d458fffccd4e6ad2fbde479c", + "kdf" : "scrypt", + "kdfparams" : { + "dklen" : 32, + "n" : 262144, + "r" : 1, + "p" : 8, + "salt" : "ab0c7876052600dd703518d6fc3fe8984592145b591fc8fb5c6d43190334ba19" + }, + "mac" : "2103ac29920d71da29f15d75b4a16dbe95cfd7ff8faea1056c33131d846e3097" + }, + "id" : "3198bc9c-6672-5ab3-d995-4942343ae5b6", + "version" : 3 + }, + "password": "testpassword", + "priv": "7a28b5ba57c53603b0b07b56bba752f7784bf506fa95edc395f5cf6c7514fe9d" + }, + "wikipage_test_vector_pbkdf2": { + "json": { + "crypto" : { + "cipher" : "aes-128-ctr", + "cipherparams" : { + "iv" : "6087dab2f9fdbbfaddc31a909735c1e6" + }, + "ciphertext" : "5318b4d5bcd28de64ee5559e671353e16f075ecae9f99c7a79a38af5f869aa46", + "kdf" : "pbkdf2", + "kdfparams" : { + "c" : 262144, + "dklen" : 32, + "prf" : "hmac-sha256", + "salt" : "ae3cd4e7013836a3df6bd7241b12db061dbe2c6785853cce422d148a624ce0bd" + }, + "mac" : "517ead924a9d0dc3124507e3393d175ce3ff7c1e96529c6c555ce9e51205e9b2" + }, + "id" : "3198bc9c-6672-5ab3-d995-4942343ae5b6", + "version" : 3 + }, + "password": "testpassword", + "priv": "7a28b5ba57c53603b0b07b56bba752f7784bf506fa95edc395f5cf6c7514fe9d" + } +} From 8363aba7acaab4379a3461cfc3b7b35e8436693f Mon Sep 17 00:00:00 2001 From: Gustav Simonsson Date: Wed, 24 Jun 2015 07:17:21 +0200 Subject: [PATCH 036/156] Update Ethash Godeps --- Godeps/Godeps.json | 4 +-- .../src/github.com/ethereum/ethash/ethash.go | 28 +++++++++++++------ .../github.com/ethereum/ethash/ethash_test.go | 16 +++++++++++ .../ethereum/ethash/src/libethash/internal.c | 4 +-- .../ethereum/ethash/src/libethash/internal.h | 21 ++++++++++---- 5 files changed, 54 insertions(+), 19 deletions(-) diff --git a/Godeps/Godeps.json b/Godeps/Godeps.json index 0607990a8c..6d68c18ecc 100644 --- a/Godeps/Godeps.json +++ b/Godeps/Godeps.json @@ -21,8 +21,8 @@ }, { "ImportPath": "github.com/ethereum/ethash", - "Comment": "v23.1-222-g173b8ff", - "Rev": "173b8ff953610c13710061e83b95b50c73d7ea50" + "Comment": "v23.1-227-g8f6ccaa", + "Rev": "8f6ccaaef9b418553807a73a95cb5f49cd3ea39f" }, { "ImportPath": "github.com/howeyc/fsnotify", diff --git a/Godeps/_workspace/src/github.com/ethereum/ethash/ethash.go b/Godeps/_workspace/src/github.com/ethereum/ethash/ethash.go index 73c5bf664b..d0864da7f7 100644 --- a/Godeps/_workspace/src/github.com/ethereum/ethash/ethash.go +++ b/Godeps/_workspace/src/github.com/ethereum/ethash/ethash.go @@ -100,19 +100,29 @@ type Light struct { func (l *Light) Verify(block pow.Block) bool { // TODO: do ethash_quick_verify before getCache in order // to prevent DOS attacks. - var ( - blockNum = block.NumberU64() - difficulty = block.Difficulty() - cache = l.getCache(blockNum) - dagSize = C.ethash_get_datasize(C.uint64_t(blockNum)) - ) - if l.test { - dagSize = dagSizeForTesting - } + blockNum := block.NumberU64() if blockNum >= epochLength*2048 { glog.V(logger.Debug).Infof("block number %d too high, limit is %d", epochLength*2048) return false } + + difficulty := block.Difficulty() + /* Cannot happen if block header diff is validated prior to PoW, but can + happen if PoW is checked first due to parallel PoW checking. + We could check the minimum valid difficulty but for SoC we avoid (duplicating) + Ethereum protocol consensus rules here which are not in scope of Ethash + */ + if difficulty.Cmp(common.Big0) == 0 { + glog.V(logger.Debug).Infof("invalid block difficulty") + return false + } + + cache := l.getCache(blockNum) + dagSize := C.ethash_get_datasize(C.uint64_t(blockNum)) + + if l.test { + dagSize = dagSizeForTesting + } // Recompute the hash using the cache. hash := hashToH256(block.HashNoNonce()) ret := C.ethash_light_compute_internal(cache.ptr, dagSize, hash, C.uint64_t(block.Nonce())) diff --git a/Godeps/_workspace/src/github.com/ethereum/ethash/ethash_test.go b/Godeps/_workspace/src/github.com/ethereum/ethash/ethash_test.go index e6833e3434..1e1de989d1 100644 --- a/Godeps/_workspace/src/github.com/ethereum/ethash/ethash_test.go +++ b/Godeps/_workspace/src/github.com/ethereum/ethash/ethash_test.go @@ -11,6 +11,7 @@ import ( "testing" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/crypto" ) func init() { @@ -59,6 +60,14 @@ var validBlocks = []*testBlock{ }, } +var invalidZeroDiffBlock = testBlock{ + number: 61440000, + hashNoNonce: crypto.Sha3Hash([]byte("foo")), + difficulty: big.NewInt(0), + nonce: 0xcafebabec00000fe, + mixDigest: crypto.Sha3Hash([]byte("bar")), +} + func TestEthashVerifyValid(t *testing.T) { eth := New() for i, block := range validBlocks { @@ -68,6 +77,13 @@ func TestEthashVerifyValid(t *testing.T) { } } +func TestEthashVerifyInvalid(t *testing.T) { + eth := New() + if eth.Verify(&invalidZeroDiffBlock) { + t.Errorf("should not validate - we just ensure it does not panic on this block") + } +} + func TestEthashConcurrentVerify(t *testing.T) { eth, err := NewForTesting() if err != nil { diff --git a/Godeps/_workspace/src/github.com/ethereum/ethash/src/libethash/internal.c b/Godeps/_workspace/src/github.com/ethereum/ethash/src/libethash/internal.c index b28a59e431..338aa5ecd3 100644 --- a/Godeps/_workspace/src/github.com/ethereum/ethash/src/libethash/internal.c +++ b/Godeps/_workspace/src/github.com/ethereum/ethash/src/libethash/internal.c @@ -284,13 +284,13 @@ bool ethash_quick_check_difficulty( ethash_h256_t const* header_hash, uint64_t const nonce, ethash_h256_t const* mix_hash, - ethash_h256_t const* difficulty + ethash_h256_t const* boundary ) { ethash_h256_t return_hash; ethash_quick_hash(&return_hash, header_hash, nonce, mix_hash); - return ethash_check_difficulty(&return_hash, difficulty); + return ethash_check_difficulty(&return_hash, boundary); } ethash_light_t ethash_light_new_internal(uint64_t cache_size, ethash_h256_t const* seed) diff --git a/Godeps/_workspace/src/github.com/ethereum/ethash/src/libethash/internal.h b/Godeps/_workspace/src/github.com/ethereum/ethash/src/libethash/internal.h index 4e2b695ac6..26c395ad6f 100644 --- a/Godeps/_workspace/src/github.com/ethereum/ethash/src/libethash/internal.h +++ b/Godeps/_workspace/src/github.com/ethereum/ethash/src/libethash/internal.h @@ -46,27 +46,36 @@ static inline void ethash_h256_reset(ethash_h256_t* hash) memset(hash, 0, 32); } -// Returns if hash is less than or equal to difficulty +// Returns if hash is less than or equal to boundary (2^256/difficulty) static inline bool ethash_check_difficulty( ethash_h256_t const* hash, - ethash_h256_t const* difficulty + ethash_h256_t const* boundary ) { - // Difficulty is big endian + // Boundary is big endian for (int i = 0; i < 32; i++) { - if (ethash_h256_get(hash, i) == ethash_h256_get(difficulty, i)) { + if (ethash_h256_get(hash, i) == ethash_h256_get(boundary, i)) { continue; } - return ethash_h256_get(hash, i) < ethash_h256_get(difficulty, i); + return ethash_h256_get(hash, i) < ethash_h256_get(boundary, i); } return true; } +/** + * Difficulty quick check for POW preverification + * + * @param header_hash The hash of the header + * @param nonce The block's nonce + * @param mix_hash The mix digest hash + * @param boundary The boundary is defined as (2^256 / difficulty) + * @return true for succesful pre-verification and false otherwise + */ bool ethash_quick_check_difficulty( ethash_h256_t const* header_hash, uint64_t const nonce, ethash_h256_t const* mix_hash, - ethash_h256_t const* difficulty + ethash_h256_t const* boundary ); struct ethash_light { From f1a4a6e563ea72affe365d89513e5c83a35e4c28 Mon Sep 17 00:00:00 2001 From: Bas van Kervel Date: Wed, 24 Jun 2015 13:53:37 +0200 Subject: [PATCH 037/156] added eth.pendingTransactions --- rpc/api/eth.go | 40 +++++++++++++++++++++++++++++++++++----- rpc/api/eth_args.go | 34 ++++++++++++++++++++++++++++++++++ rpc/api/eth_js.go | 8 ++++++++ rpc/api/utils.go | 3 ++- 4 files changed, 79 insertions(+), 6 deletions(-) diff --git a/rpc/api/eth.go b/rpc/api/eth.go index 0dff138c65..77c710fb08 100644 --- a/rpc/api/eth.go +++ b/rpc/api/eth.go @@ -6,9 +6,11 @@ import ( "math/big" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/eth" "github.com/ethereum/go-ethereum/rpc/codec" "github.com/ethereum/go-ethereum/rpc/shared" "github.com/ethereum/go-ethereum/xeth" + "gopkg.in/fatih/set.v0" ) const ( @@ -18,9 +20,10 @@ const ( // eth api provider // See https://github.com/ethereum/wiki/wiki/JSON-RPC type ethApi struct { - xeth *xeth.XEth - methods map[string]ethhandler - codec codec.ApiCoder + xeth *xeth.XEth + ethereum *eth.Ethereum + methods map[string]ethhandler + codec codec.ApiCoder } // eth callback handler @@ -71,12 +74,13 @@ var ( "eth_hashrate": (*ethApi).Hashrate, "eth_getWork": (*ethApi).GetWork, "eth_submitWork": (*ethApi).SubmitWork, + "eth_pendingTransactions": (*ethApi).PendingTransactions, } ) // create new ethApi instance -func NewEthApi(xeth *xeth.XEth, codec codec.Codec) *ethApi { - return ðApi{xeth, ethMapping, codec.New(nil)} +func NewEthApi(xeth *xeth.XEth, eth *eth.Ethereum, codec codec.Codec) *ethApi { + return ðApi{xeth, eth, ethMapping, codec.New(nil)} } // collection with supported methods @@ -556,3 +560,29 @@ func (self *ethApi) SubmitWork(req *shared.Request) (interface{}, error) { } return self.xeth.RemoteMining().SubmitWork(args.Nonce, common.HexToHash(args.Digest), common.HexToHash(args.Header)), nil } + +func (self *ethApi) PendingTransactions(req *shared.Request) (interface{}, error) { + txs := self.ethereum.TxPool().GetTransactions() + + // grab the accounts from the account manager. This will help with determening which + // transactions should be returned. + accounts, err := self.ethereum.AccountManager().Accounts() + if err != nil { + return nil, err + } + + // Add the accouns to a new set + accountSet := set.New() + for _, account := range accounts { + accountSet.Add(account.Address) + } + + var ltxs []*tx + for _, tx := range txs { + if from, _ := tx.From(); accountSet.Has(from) { + ltxs = append(ltxs, newTx(tx)) + } + } + + return ltxs, nil +} diff --git a/rpc/api/eth_args.go b/rpc/api/eth_args.go index bf8ffead6c..39c003f664 100644 --- a/rpc/api/eth_args.go +++ b/rpc/api/eth_args.go @@ -5,8 +5,11 @@ import ( "fmt" "math/big" + "strconv" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/state" + "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/rpc/shared" ) @@ -858,3 +861,34 @@ func (args *SubmitWorkArgs) UnmarshalJSON(b []byte) (err error) { return nil } + +type tx struct { + tx *types.Transaction + + To string + From string + Nonce string + Value string + Data string + GasLimit string + GasPrice string +} + +func newTx(t *types.Transaction) *tx { + from, _ := t.From() + var to string + if t := t.To(); t != nil { + to = t.Hex() + } + + return &tx{ + tx: t, + To: to, + From: from.Hex(), + Value: t.Amount.String(), + Nonce: strconv.Itoa(int(t.Nonce())), + Data: "0x" + common.Bytes2Hex(t.Data()), + GasLimit: t.GasLimit.String(), + GasPrice: t.GasPrice().String(), + } +} diff --git a/rpc/api/eth_js.go b/rpc/api/eth_js.go index e1268eb763..8d0fe8f0a2 100644 --- a/rpc/api/eth_js.go +++ b/rpc/api/eth_js.go @@ -15,6 +15,14 @@ web3._extend({ inputFormatter: [web3._extend.formatters.formatInputString,web3._extend.formatters.formatInputString], outputFormatter: web3._extend.formatters.formatOutputString }) + ], + properties: + [ + new web3._extend.Property({ + name: 'pendingTransactions', + getter: 'eth_pendingTransactions', + outputFormatter: function(obj) { return obj; } + }) ] }); ` diff --git a/rpc/api/utils.go b/rpc/api/utils.go index 6e4835de61..3d46f78d32 100644 --- a/rpc/api/utils.go +++ b/rpc/api/utils.go @@ -84,6 +84,7 @@ var ( "hashrate", "getWork", "submitWork", + "pendingTransactions", }, "miner": []string{ "hashrate", @@ -149,7 +150,7 @@ func ParseApiString(apistr string, codec codec.Codec, xeth *xeth.XEth, eth *eth. case shared.DbApiName: apis[i] = NewDbApi(xeth, eth, codec) case shared.EthApiName: - apis[i] = NewEthApi(xeth, codec) + apis[i] = NewEthApi(xeth, eth, codec) case shared.MinerApiName: apis[i] = NewMinerApi(eth, codec) case shared.NetApiName: From dc58568a25e54ea601aefb8e97f427cae0814612 Mon Sep 17 00:00:00 2001 From: Bas van Kervel Date: Wed, 24 Jun 2015 14:56:53 +0200 Subject: [PATCH 038/156] added eth.resend --- rpc/api/eth.go | 18 ++++++++++++++++ rpc/api/eth_args.go | 50 +++++++++++++++++++++++++++++++++++++++++++++ rpc/api/eth_js.go | 7 +++++++ rpc/api/utils.go | 1 + 4 files changed, 76 insertions(+) diff --git a/rpc/api/eth.go b/rpc/api/eth.go index 77c710fb08..2bd7e4cdb4 100644 --- a/rpc/api/eth.go +++ b/rpc/api/eth.go @@ -6,6 +6,7 @@ import ( "math/big" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/eth" "github.com/ethereum/go-ethereum/rpc/codec" "github.com/ethereum/go-ethereum/rpc/shared" @@ -74,6 +75,7 @@ var ( "eth_hashrate": (*ethApi).Hashrate, "eth_getWork": (*ethApi).GetWork, "eth_submitWork": (*ethApi).SubmitWork, + "eth_resend": (*ethApi).Resend, "eth_pendingTransactions": (*ethApi).PendingTransactions, } ) @@ -561,6 +563,22 @@ func (self *ethApi) SubmitWork(req *shared.Request) (interface{}, error) { return self.xeth.RemoteMining().SubmitWork(args.Nonce, common.HexToHash(args.Digest), common.HexToHash(args.Header)), nil } +func (self *ethApi) Resend(req *shared.Request) (interface{}, error) { + args := new(ResendArgs) + if err := self.codec.Decode(req.Params, &args); err != nil { + return nil, shared.NewDecodeParamError(err.Error()) + } + + ret, err := self.xeth.Transact(args.Tx.From, args.Tx.To, args.Tx.Nonce, args.Tx.Value, args.GasLimit, args.GasPrice, args.Tx.Data) + if err != nil { + return nil, err + } + + self.ethereum.TxPool().RemoveTransactions(types.Transactions{args.Tx.tx}) + + return ret, nil +} + func (self *ethApi) PendingTransactions(req *shared.Request) (interface{}, error) { txs := self.ethereum.TxPool().GetTransactions() diff --git a/rpc/api/eth_args.go b/rpc/api/eth_args.go index 39c003f664..a75fdbdee2 100644 --- a/rpc/api/eth_args.go +++ b/rpc/api/eth_args.go @@ -892,3 +892,53 @@ func newTx(t *types.Transaction) *tx { GasPrice: t.GasPrice().String(), } } + +type ResendArgs struct { + Tx *tx + GasPrice string + GasLimit string +} + +func (args *ResendArgs) UnmarshalJSON(b []byte) (err error) { + var obj []interface{} + if err = json.Unmarshal(b, &obj); err != nil { + return shared.NewDecodeParamError(err.Error()) + } + + if len(obj) < 1 { + return shared.NewInsufficientParamsError(len(obj), 1) + } + + data, err := json.Marshal(obj[0]) + if err != nil { + return shared.NewDecodeParamError("Unable to parse transaction object") + } + + trans := new(tx) + err = json.Unmarshal(data, trans) + if err != nil { + return shared.NewDecodeParamError("Unable to parse transaction object.") + } + + gasLimit, gasPrice := trans.GasLimit, trans.GasPrice + + if len(obj) > 1 && obj[1] != nil { + if gp, ok := obj[1].(string); ok { + gasPrice = gp + } else { + return shared.NewInvalidTypeError("gasPrice", "not a string") + } + } + if len(obj) > 2 && obj[2] != nil { + if gl, ok := obj[2].(string); ok { + gasLimit = gl + } else { + return shared.NewInvalidTypeError("gasLimit", "not a string") + } + } + args.Tx = trans + args.GasPrice = gasPrice + args.GasLimit = gasLimit + + return nil +} diff --git a/rpc/api/eth_js.go b/rpc/api/eth_js.go index 8d0fe8f0a2..4512cc147f 100644 --- a/rpc/api/eth_js.go +++ b/rpc/api/eth_js.go @@ -14,6 +14,13 @@ web3._extend({ params: 2, inputFormatter: [web3._extend.formatters.formatInputString,web3._extend.formatters.formatInputString], outputFormatter: web3._extend.formatters.formatOutputString + }), + new web3._extend.Method({ + name: 'resend', + call: 'eth_resend', + params: 3, + inputFormatter: [function(obj) { return obj; },web3._extend.formatters.formatInputString,web3._extend.formatters.formatInputString], + outputFormatter: web3._extend.formatters.formatOutputString }) ], properties: diff --git a/rpc/api/utils.go b/rpc/api/utils.go index 3d46f78d32..e6a01d3d64 100644 --- a/rpc/api/utils.go +++ b/rpc/api/utils.go @@ -85,6 +85,7 @@ var ( "getWork", "submitWork", "pendingTransactions", + "resend", }, "miner": []string{ "hashrate", From ee73f09727004e94a04a396b99151ab79fd187f4 Mon Sep 17 00:00:00 2001 From: Bas van Kervel Date: Wed, 24 Jun 2015 16:07:44 +0200 Subject: [PATCH 039/156] fixed unittest compilation issue --- rpc/api/api_test.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/rpc/api/api_test.go b/rpc/api/api_test.go index 7e273ef28f..2ac8bcd456 100644 --- a/rpc/api/api_test.go +++ b/rpc/api/api_test.go @@ -76,8 +76,9 @@ func TestCompileSolidity(t *testing.T) { expLanguageVersion := "0" expSource := source - xeth := xeth.NewTest(ð.Ethereum{}, nil) - api := NewEthApi(xeth, codec.JSON) + eth := ð.Ethereum{} + xeth := xeth.NewTest(eth, nil) + api := NewEthApi(xeth, eth, codec.JSON) var rpcRequest shared.Request json.Unmarshal([]byte(jsonstr), &rpcRequest) From 821e01b0139eee9bfab9647e4ac1f2d6f1fb01bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= Date: Fri, 19 Jun 2015 18:13:49 +0300 Subject: [PATCH 040/156] cmd/geth, eth/fetcher: initial metrics support Conflicts: cmd/geth/admin.go --- cmd/geth/admin.go | 960 +++++++++++++++++++++++++++++++++++++++++ eth/fetcher/fetcher.go | 14 + 2 files changed, 974 insertions(+) create mode 100644 cmd/geth/admin.go diff --git a/cmd/geth/admin.go b/cmd/geth/admin.go new file mode 100644 index 0000000000..0d5e025237 --- /dev/null +++ b/cmd/geth/admin.go @@ -0,0 +1,960 @@ +package main + +import ( + "encoding/json" + "errors" + "fmt" + "math/big" + "strconv" + "time" + + "github.com/rcrowley/go-metrics" + + "github.com/ethereum/ethash" + "github.com/ethereum/go-ethereum/accounts" + "github.com/ethereum/go-ethereum/cmd/utils" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/compiler" + "github.com/ethereum/go-ethereum/common/natspec" + "github.com/ethereum/go-ethereum/common/resolver" + "github.com/ethereum/go-ethereum/core/state" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/core/vm" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/logger/glog" + "github.com/ethereum/go-ethereum/rlp" + "github.com/ethereum/go-ethereum/rpc" + "github.com/ethereum/go-ethereum/xeth" + "github.com/robertkrimen/otto" + "gopkg.in/fatih/set.v0" +) + +/* +node admin bindings +*/ + +func (js *jsre) adminBindings() { + ethO, _ := js.re.Get("eth") + eth := ethO.Object() + eth.Set("pendingTransactions", js.pendingTransactions) + eth.Set("resend", js.resend) + eth.Set("sign", js.sign) + + js.re.Set("admin", struct{}{}) + t, _ := js.re.Get("admin") + admin := t.Object() + admin.Set("addPeer", js.addPeer) + admin.Set("startRPC", js.startRPC) + admin.Set("stopRPC", js.stopRPC) + admin.Set("nodeInfo", js.nodeInfo) + admin.Set("peers", js.peers) + admin.Set("newAccount", js.newAccount) + admin.Set("unlock", js.unlock) + admin.Set("import", js.importChain) + admin.Set("export", js.exportChain) + admin.Set("verbosity", js.verbosity) + admin.Set("progress", js.syncProgress) + admin.Set("setSolc", js.setSolc) + + admin.Set("contractInfo", struct{}{}) + t, _ = admin.Get("contractInfo") + cinfo := t.Object() + // newRegistry officially not documented temporary option + cinfo.Set("start", js.startNatSpec) + cinfo.Set("stop", js.stopNatSpec) + cinfo.Set("newRegistry", js.newRegistry) + cinfo.Set("get", js.getContractInfo) + cinfo.Set("register", js.register) + cinfo.Set("registerUrl", js.registerUrl) + // cinfo.Set("verify", js.verify) + + admin.Set("miner", struct{}{}) + t, _ = admin.Get("miner") + miner := t.Object() + miner.Set("start", js.startMining) + miner.Set("stop", js.stopMining) + miner.Set("hashrate", js.hashrate) + miner.Set("setExtra", js.setExtra) + miner.Set("setGasPrice", js.setGasPrice) + miner.Set("startAutoDAG", js.startAutoDAG) + miner.Set("stopAutoDAG", js.stopAutoDAG) + miner.Set("makeDAG", js.makeDAG) + + admin.Set("txPool", struct{}{}) + t, _ = admin.Get("txPool") + txPool := t.Object() + txPool.Set("pending", js.allPendingTransactions) + txPool.Set("queued", js.allQueuedTransactions) + + admin.Set("debug", struct{}{}) + t, _ = admin.Get("debug") + debug := t.Object() + js.re.Set("sleep", js.sleep) + debug.Set("backtrace", js.backtrace) + debug.Set("printBlock", js.printBlock) + debug.Set("dumpBlock", js.dumpBlock) + debug.Set("getBlockRlp", js.getBlockRlp) + debug.Set("setHead", js.setHead) + debug.Set("processBlock", js.debugBlock) + debug.Set("seedhash", js.seedHash) + debug.Set("insertBlock", js.insertBlockRlp) + // undocumented temporary + debug.Set("waitForBlocks", js.waitForBlocks) + + admin.Set("metrics", js.metrics) +} + +// generic helper to getBlock by Number/Height or Hex depending on autodetected input +// if argument is missing the current block is returned +// if block is not found or there is problem with decoding +// the appropriate value is returned and block is guaranteed to be nil +func (js *jsre) getBlock(call otto.FunctionCall) (*types.Block, error) { + var block *types.Block + if len(call.ArgumentList) > 0 { + if call.Argument(0).IsNumber() { + num, _ := call.Argument(0).ToInteger() + block = js.ethereum.ChainManager().GetBlockByNumber(uint64(num)) + } else if call.Argument(0).IsString() { + hash, _ := call.Argument(0).ToString() + block = js.ethereum.ChainManager().GetBlock(common.HexToHash(hash)) + } else { + return nil, errors.New("invalid argument for dump. Either hex string or number") + } + } else { + block = js.ethereum.ChainManager().CurrentBlock() + } + + if block == nil { + return nil, errors.New("block not found") + } + return block, nil +} + +func (js *jsre) seedHash(call otto.FunctionCall) otto.Value { + if len(call.ArgumentList) > 0 { + if call.Argument(0).IsNumber() { + num, _ := call.Argument(0).ToInteger() + hash, err := ethash.GetSeedHash(uint64(num)) + if err != nil { + fmt.Println(err) + return otto.UndefinedValue() + } + v, _ := call.Otto.ToValue(fmt.Sprintf("0x%x", hash)) + return v + } else { + fmt.Println("arg not a number") + } + } else { + fmt.Println("requires number argument") + } + + return otto.UndefinedValue() +} + +func (js *jsre) allPendingTransactions(call otto.FunctionCall) otto.Value { + txs := js.ethereum.TxPool().GetTransactions() + + ltxs := make([]*tx, len(txs)) + for i, tx := range txs { + // no need to check err + ltxs[i] = newTx(tx) + } + + v, _ := call.Otto.ToValue(ltxs) + return v +} + +func (js *jsre) allQueuedTransactions(call otto.FunctionCall) otto.Value { + txs := js.ethereum.TxPool().GetQueuedTransactions() + + ltxs := make([]*tx, len(txs)) + for i, tx := range txs { + // no need to check err + ltxs[i] = newTx(tx) + } + + v, _ := call.Otto.ToValue(ltxs) + return v +} + +func (js *jsre) pendingTransactions(call otto.FunctionCall) otto.Value { + txs := js.ethereum.TxPool().GetTransactions() + + // grab the accounts from the account manager. This will help with determening which + // transactions should be returned. + accounts, err := js.ethereum.AccountManager().Accounts() + if err != nil { + fmt.Println(err) + return otto.UndefinedValue() + } + + // Add the accouns to a new set + accountSet := set.New() + for _, account := range accounts { + accountSet.Add(account.Address) + } + + //ltxs := make([]*tx, len(txs)) + var ltxs []*tx + for _, tx := range txs { + if from, _ := tx.From(); accountSet.Has(from) { + ltxs = append(ltxs, newTx(tx)) + } + } + + v, _ := call.Otto.ToValue(ltxs) + return v +} + +func (js *jsre) resend(call otto.FunctionCall) otto.Value { + if len(call.ArgumentList) == 0 { + fmt.Println("first argument must be a transaction") + return otto.FalseValue() + } + + v, err := call.Argument(0).Export() + if err != nil { + fmt.Println(err) + return otto.FalseValue() + } + + if tx, ok := v.(*tx); ok { + gl, gp := tx.GasLimit, tx.GasPrice + if len(call.ArgumentList) > 1 { + gp = call.Argument(1).String() + } + if len(call.ArgumentList) > 2 { + gl = call.Argument(2).String() + } + + ret, err := js.xeth.Transact(tx.From, tx.To, tx.Nonce, tx.Value, gl, gp, tx.Data) + if err != nil { + fmt.Println(err) + return otto.FalseValue() + } + js.ethereum.TxPool().RemoveTransactions(types.Transactions{tx.tx}) + + v, _ := call.Otto.ToValue(ret) + return v + } + + fmt.Println("first argument must be a transaction") + return otto.FalseValue() +} + +func (js *jsre) sign(call otto.FunctionCall) otto.Value { + if len(call.ArgumentList) != 2 { + fmt.Println("requires 2 arguments: eth.sign(signer, data)") + return otto.UndefinedValue() + } + signer, err := call.Argument(0).ToString() + if err != nil { + fmt.Println(err) + return otto.UndefinedValue() + } + + data, err := call.Argument(1).ToString() + if err != nil { + fmt.Println(err) + return otto.UndefinedValue() + } + signed, err := js.xeth.Sign(signer, data, false) + if err != nil { + fmt.Println(err) + return otto.UndefinedValue() + } + v, _ := call.Otto.ToValue(signed) + return v +} + +func (js *jsre) debugBlock(call otto.FunctionCall) otto.Value { + block, err := js.getBlock(call) + if err != nil { + fmt.Println(err) + return otto.UndefinedValue() + } + + tstart := time.Now() + old := vm.Debug + + if len(call.ArgumentList) > 1 { + vm.Debug, _ = call.Argument(1).ToBoolean() + } + + _, err = js.ethereum.BlockProcessor().RetryProcess(block) + if err != nil { + fmt.Println(err) + r, _ := call.Otto.ToValue(map[string]interface{}{"success": false, "time": time.Since(tstart).Seconds()}) + return r + } + vm.Debug = old + + r, _ := call.Otto.ToValue(map[string]interface{}{"success": true, "time": time.Since(tstart).Seconds()}) + return r +} + +func (js *jsre) insertBlockRlp(call otto.FunctionCall) otto.Value { + tstart := time.Now() + + var block types.Block + if call.Argument(0).IsString() { + blockRlp, _ := call.Argument(0).ToString() + err := rlp.DecodeBytes(common.Hex2Bytes(blockRlp), &block) + if err != nil { + fmt.Println(err) + return otto.UndefinedValue() + } + } + + old := vm.Debug + vm.Debug = true + _, err := js.ethereum.BlockProcessor().RetryProcess(&block) + if err != nil { + fmt.Println(err) + r, _ := call.Otto.ToValue(map[string]interface{}{"success": false, "time": time.Since(tstart).Seconds()}) + return r + } + vm.Debug = old + + r, _ := call.Otto.ToValue(map[string]interface{}{"success": true, "time": time.Since(tstart).Seconds()}) + return r +} + +func (js *jsre) setHead(call otto.FunctionCall) otto.Value { + block, err := js.getBlock(call) + if err != nil { + fmt.Println(err) + return otto.UndefinedValue() + } + + js.ethereum.ChainManager().SetHead(block) + return otto.UndefinedValue() +} + +func (js *jsre) syncProgress(call otto.FunctionCall) otto.Value { + pending, cached, importing, eta := js.ethereum.Downloader().Stats() + v, _ := call.Otto.ToValue(map[string]interface{}{ + "pending": pending, + "cached": cached, + "importing": importing, + "estimate": (eta / time.Second * time.Second).String(), + }) + return v +} + +func (js *jsre) getBlockRlp(call otto.FunctionCall) otto.Value { + block, err := js.getBlock(call) + if err != nil { + fmt.Println(err) + return otto.UndefinedValue() + } + encoded, _ := rlp.EncodeToBytes(block) + v, _ := call.Otto.ToValue(fmt.Sprintf("%x", encoded)) + return v +} + +func (js *jsre) setExtra(call otto.FunctionCall) otto.Value { + extra, err := call.Argument(0).ToString() + if err != nil { + fmt.Println(err) + return otto.UndefinedValue() + } + + if len(extra) > 1024 { + fmt.Println("error: cannot exceed 1024 bytes") + return otto.UndefinedValue() + } + + js.ethereum.Miner().SetExtra([]byte(extra)) + return otto.UndefinedValue() +} + +func (js *jsre) setGasPrice(call otto.FunctionCall) otto.Value { + gasPrice, err := call.Argument(0).ToString() + if err != nil { + fmt.Println(err) + return otto.UndefinedValue() + } + + js.ethereum.Miner().SetGasPrice(common.String2Big(gasPrice)) + return otto.UndefinedValue() +} + +func (js *jsre) hashrate(call otto.FunctionCall) otto.Value { + v, _ := call.Otto.ToValue(js.ethereum.Miner().HashRate()) + return v +} + +func (js *jsre) makeDAG(call otto.FunctionCall) otto.Value { + blockNumber, err := call.Argument(1).ToInteger() + if err != nil { + fmt.Println(err) + return otto.FalseValue() + } + + err = ethash.MakeDAG(uint64(blockNumber), "") + if err != nil { + return otto.FalseValue() + } + return otto.TrueValue() +} + +func (js *jsre) startAutoDAG(otto.FunctionCall) otto.Value { + js.ethereum.StartAutoDAG() + return otto.TrueValue() +} + +func (js *jsre) stopAutoDAG(otto.FunctionCall) otto.Value { + js.ethereum.StopAutoDAG() + return otto.TrueValue() +} + +func (js *jsre) backtrace(call otto.FunctionCall) otto.Value { + tracestr, err := call.Argument(0).ToString() + if err != nil { + fmt.Println(err) + return otto.UndefinedValue() + } + glog.GetTraceLocation().Set(tracestr) + + return otto.UndefinedValue() +} + +func (js *jsre) verbosity(call otto.FunctionCall) otto.Value { + v, err := call.Argument(0).ToInteger() + if err != nil { + fmt.Println(err) + return otto.UndefinedValue() + } + + glog.SetV(int(v)) + return otto.UndefinedValue() +} + +func (js *jsre) startMining(call otto.FunctionCall) otto.Value { + var ( + threads int64 + err error + ) + + if len(call.ArgumentList) > 0 { + threads, err = call.Argument(0).ToInteger() + if err != nil { + fmt.Println(err) + return otto.FalseValue() + } + } else { + threads = int64(js.ethereum.MinerThreads) + } + + // switch on DAG autogeneration when miner starts + js.ethereum.StartAutoDAG() + + err = js.ethereum.StartMining(int(threads)) + if err != nil { + fmt.Println(err) + return otto.FalseValue() + } + + return otto.TrueValue() +} + +func (js *jsre) stopMining(call otto.FunctionCall) otto.Value { + js.ethereum.StopMining() + js.ethereum.StopAutoDAG() + return otto.TrueValue() +} + +func (js *jsre) startRPC(call otto.FunctionCall) otto.Value { + addr, err := call.Argument(0).ToString() + if err != nil { + fmt.Println(err) + return otto.FalseValue() + } + + port, err := call.Argument(1).ToInteger() + if err != nil { + fmt.Println(err) + return otto.FalseValue() + } + + corsDomain := js.corsDomain + if len(call.ArgumentList) > 2 { + corsDomain, err = call.Argument(2).ToString() + if err != nil { + fmt.Println(err) + return otto.FalseValue() + } + } + + config := rpc.RpcConfig{ + ListenAddress: addr, + ListenPort: uint(port), + CorsDomain: corsDomain, + } + + xeth := xeth.New(js.ethereum, nil) + err = rpc.Start(xeth, config) + if err != nil { + fmt.Println(err) + return otto.FalseValue() + } + + return otto.TrueValue() +} + +func (js *jsre) stopRPC(call otto.FunctionCall) otto.Value { + if rpc.Stop() == nil { + return otto.TrueValue() + } + return otto.FalseValue() +} + +func (js *jsre) addPeer(call otto.FunctionCall) otto.Value { + nodeURL, err := call.Argument(0).ToString() + if err != nil { + fmt.Println(err) + return otto.FalseValue() + } + err = js.ethereum.AddPeer(nodeURL) + if err != nil { + fmt.Println(err) + return otto.FalseValue() + } + return otto.TrueValue() +} + +func (js *jsre) unlock(call otto.FunctionCall) otto.Value { + addr, err := call.Argument(0).ToString() + if err != nil { + fmt.Println(err) + return otto.FalseValue() + } + seconds, err := call.Argument(2).ToInteger() + if err != nil { + fmt.Println(err) + return otto.FalseValue() + } + if seconds == 0 { + seconds = accounts.DefaultAccountUnlockDuration + } + + arg := call.Argument(1) + var passphrase string + if arg.IsUndefined() { + fmt.Println("Please enter a passphrase now.") + passphrase, err = utils.PromptPassword("Passphrase: ", true) + if err != nil { + fmt.Println(err) + return otto.FalseValue() + } + } else { + passphrase, err = arg.ToString() + if err != nil { + fmt.Println(err) + return otto.FalseValue() + } + } + am := js.ethereum.AccountManager() + err = am.TimedUnlock(common.HexToAddress(addr), passphrase, time.Duration(seconds)*time.Second) + if err != nil { + fmt.Printf("Unlock account failed '%v'\n", err) + return otto.FalseValue() + } + return otto.TrueValue() +} + +func (js *jsre) newAccount(call otto.FunctionCall) otto.Value { + arg := call.Argument(0) + var passphrase string + if arg.IsUndefined() { + fmt.Println("The new account will be encrypted with a passphrase.") + fmt.Println("Please enter a passphrase now.") + auth, err := utils.PromptPassword("Passphrase: ", true) + if err != nil { + fmt.Println(err) + return otto.FalseValue() + } + confirm, err := utils.PromptPassword("Repeat Passphrase: ", false) + if err != nil { + fmt.Println(err) + return otto.FalseValue() + } + if auth != confirm { + fmt.Println("Passphrases did not match.") + return otto.FalseValue() + } + passphrase = auth + } else { + var err error + passphrase, err = arg.ToString() + if err != nil { + fmt.Println(err) + return otto.FalseValue() + } + } + acct, err := js.ethereum.AccountManager().NewAccount(passphrase) + if err != nil { + fmt.Printf("Could not create the account: %v", err) + return otto.UndefinedValue() + } + v, _ := call.Otto.ToValue(acct.Address.Hex()) + return v +} + +func (js *jsre) nodeInfo(call otto.FunctionCall) otto.Value { + v, _ := call.Otto.ToValue(js.ethereum.NodeInfo()) + return v +} + +func (js *jsre) peers(call otto.FunctionCall) otto.Value { + v, _ := call.Otto.ToValue(js.ethereum.PeersInfo()) + return v +} + +func (js *jsre) importChain(call otto.FunctionCall) otto.Value { + if len(call.ArgumentList) == 0 { + fmt.Println("require file name. admin.importChain(filename)") + return otto.FalseValue() + } + fn, err := call.Argument(0).ToString() + if err != nil { + fmt.Println(err) + return otto.FalseValue() + } + if err := utils.ImportChain(js.ethereum.ChainManager(), fn); err != nil { + fmt.Println("Import error: ", err) + return otto.FalseValue() + } + return otto.TrueValue() +} + +func (js *jsre) exportChain(call otto.FunctionCall) otto.Value { + if len(call.ArgumentList) == 0 { + fmt.Println("require file name: admin.exportChain(filename)") + return otto.FalseValue() + } + + fn, err := call.Argument(0).ToString() + if err != nil { + fmt.Println(err) + return otto.FalseValue() + } + if err := utils.ExportChain(js.ethereum.ChainManager(), fn); err != nil { + fmt.Println(err) + return otto.FalseValue() + } + return otto.TrueValue() +} + +func (js *jsre) printBlock(call otto.FunctionCall) otto.Value { + block, err := js.getBlock(call) + if err != nil { + fmt.Println(err) + return otto.UndefinedValue() + } + + fmt.Println(block) + + return otto.UndefinedValue() +} + +func (js *jsre) dumpBlock(call otto.FunctionCall) otto.Value { + block, err := js.getBlock(call) + if err != nil { + fmt.Println(err) + return otto.UndefinedValue() + } + + statedb := state.New(block.Root(), js.ethereum.StateDb()) + dump := statedb.RawDump() + v, _ := call.Otto.ToValue(dump) + return v +} + +func (js *jsre) waitForBlocks(call otto.FunctionCall) otto.Value { + if len(call.ArgumentList) > 2 { + fmt.Println("requires 0, 1 or 2 arguments: admin.debug.waitForBlock(minHeight, timeout)") + return otto.FalseValue() + } + var n, timeout int64 + var timer <-chan time.Time + var height *big.Int + var err error + args := len(call.ArgumentList) + if args == 2 { + timeout, err = call.Argument(1).ToInteger() + if err != nil { + fmt.Println(err) + return otto.UndefinedValue() + } + timer = time.NewTimer(time.Duration(timeout) * time.Second).C + } + if args >= 1 { + n, err = call.Argument(0).ToInteger() + if err != nil { + fmt.Println(err) + return otto.UndefinedValue() + } + height = big.NewInt(n) + } + + if args == 0 { + height = js.xeth.CurrentBlock().Number() + height.Add(height, common.Big1) + } + + wait := js.wait + js.wait <- height + select { + case <-timer: + // if times out make sure the xeth loop does not block + go func() { + select { + case wait <- nil: + case <-wait: + } + }() + return otto.UndefinedValue() + case height = <-wait: + } + v, _ := call.Otto.ToValue(height.Uint64()) + return v +} + +func (js *jsre) metrics(call otto.FunctionCall) otto.Value { + // Iterate over all the metrics, and just dump for now + counters := make(map[string]interface{}) + metrics.DefaultRegistry.Each(func(name string, metric interface{}) { + switch metric := metric.(type) { + case metrics.Meter: + counters[name+"( 1 min)"] = int(metric.Rate1() * 60) + counters[name+"( 5 min)"] = int(metric.Rate5() * 300) + counters[name+"(15 min)"] = int(metric.Rate15() * 900) + + default: + counters[name] = "Unknown metric type" + } + }) + // Flatten the counters into some metrics and return + v, _ := call.Otto.ToValue(counters) + return v +} + +func (js *jsre) sleep(call otto.FunctionCall) otto.Value { + sec, err := call.Argument(0).ToInteger() + if err != nil { + fmt.Println(err) + return otto.FalseValue() + } + time.Sleep(time.Duration(sec) * time.Second) + return otto.UndefinedValue() +} + +func (js *jsre) setSolc(call otto.FunctionCall) otto.Value { + if len(call.ArgumentList) != 1 { + fmt.Println("needs 1 argument: admin.contractInfo.setSolc(solcPath)") + return otto.FalseValue() + } + solcPath, err := call.Argument(0).ToString() + if err != nil { + return otto.FalseValue() + } + solc, err := js.xeth.SetSolc(solcPath) + if err != nil { + fmt.Println(err) + return otto.FalseValue() + } + fmt.Println(solc.Info()) + return otto.TrueValue() +} + +func (js *jsre) register(call otto.FunctionCall) otto.Value { + if len(call.ArgumentList) != 4 { + fmt.Println("requires 4 arguments: admin.contractInfo.register(fromaddress, contractaddress, contract, filename)") + return otto.UndefinedValue() + } + sender, err := call.Argument(0).ToString() + if err != nil { + fmt.Println(err) + return otto.UndefinedValue() + } + + address, err := call.Argument(1).ToString() + if err != nil { + fmt.Println(err) + return otto.UndefinedValue() + } + + raw, err := call.Argument(2).Export() + if err != nil { + fmt.Println(err) + return otto.UndefinedValue() + } + jsonraw, err := json.Marshal(raw) + if err != nil { + fmt.Println(err) + return otto.UndefinedValue() + } + var contract compiler.Contract + err = json.Unmarshal(jsonraw, &contract) + if err != nil { + fmt.Println(err) + return otto.UndefinedValue() + } + + filename, err := call.Argument(3).ToString() + if err != nil { + fmt.Println(err) + return otto.UndefinedValue() + } + + contenthash, err := compiler.ExtractInfo(&contract, filename) + if err != nil { + fmt.Println(err) + return otto.UndefinedValue() + } + // sender and contract address are passed as hex strings + codeb := js.xeth.CodeAtBytes(address) + codehash := common.BytesToHash(crypto.Sha3(codeb)) + + if err != nil { + fmt.Println(err) + return otto.UndefinedValue() + } + + registry := resolver.New(js.xeth) + + _, err = registry.RegisterContentHash(common.HexToAddress(sender), codehash, contenthash) + if err != nil { + fmt.Println(err) + return otto.UndefinedValue() + } + + v, _ := call.Otto.ToValue(contenthash.Hex()) + return v +} + +func (js *jsre) registerUrl(call otto.FunctionCall) otto.Value { + if len(call.ArgumentList) != 3 { + fmt.Println("requires 3 arguments: admin.contractInfo.register(fromaddress, contenthash, filename)") + return otto.FalseValue() + } + sender, err := call.Argument(0).ToString() + if err != nil { + fmt.Println(err) + return otto.FalseValue() + } + + contenthash, err := call.Argument(1).ToString() + if err != nil { + fmt.Println(err) + return otto.FalseValue() + } + + url, err := call.Argument(2).ToString() + if err != nil { + fmt.Println(err) + return otto.FalseValue() + } + + registry := resolver.New(js.xeth) + + _, err = registry.RegisterUrl(common.HexToAddress(sender), common.HexToHash(contenthash), url) + if err != nil { + fmt.Println(err) + return otto.FalseValue() + } + + return otto.TrueValue() +} + +func (js *jsre) getContractInfo(call otto.FunctionCall) otto.Value { + if len(call.ArgumentList) != 1 { + fmt.Println("requires 1 argument: admin.contractInfo.register(contractaddress)") + return otto.FalseValue() + } + addr, err := call.Argument(0).ToString() + if err != nil { + fmt.Println(err) + return otto.FalseValue() + } + + infoDoc, err := natspec.FetchDocsForContract(addr, js.xeth, ds) + if err != nil { + fmt.Println(err) + return otto.UndefinedValue() + } + var info compiler.ContractInfo + err = json.Unmarshal(infoDoc, &info) + if err != nil { + fmt.Println(err) + return otto.UndefinedValue() + } + v, _ := call.Otto.ToValue(info) + return v +} + +func (js *jsre) startNatSpec(call otto.FunctionCall) otto.Value { + js.ethereum.NatSpec = true + return otto.TrueValue() +} + +func (js *jsre) stopNatSpec(call otto.FunctionCall) otto.Value { + js.ethereum.NatSpec = false + return otto.TrueValue() +} + +func (js *jsre) newRegistry(call otto.FunctionCall) otto.Value { + + if len(call.ArgumentList) != 1 { + fmt.Println("requires 1 argument: admin.contractInfo.newRegistry(adminaddress)") + return otto.FalseValue() + } + addr, err := call.Argument(0).ToString() + if err != nil { + fmt.Println(err) + return otto.FalseValue() + } + + registry := resolver.New(js.xeth) + err = registry.CreateContracts(common.HexToAddress(addr)) + if err != nil { + fmt.Println(err) + return otto.FalseValue() + } + + return otto.TrueValue() +} + +// internal transaction type which will allow us to resend transactions using `eth.resend` +type tx struct { + tx *types.Transaction + + To string + From string + Nonce string + Value string + Data string + GasLimit string + GasPrice string +} + +func newTx(t *types.Transaction) *tx { + from, _ := t.From() + var to string + if t := t.To(); t != nil { + to = t.Hex() + } + + return &tx{ + tx: t, + To: to, + From: from.Hex(), + Value: t.Amount.String(), + Nonce: strconv.Itoa(int(t.Nonce())), + Data: "0x" + common.Bytes2Hex(t.Data()), + GasLimit: t.GasLimit.String(), + GasPrice: t.GasPrice().String(), + } +} diff --git a/eth/fetcher/fetcher.go b/eth/fetcher/fetcher.go index 90a202235e..a9f4227c4d 100644 --- a/eth/fetcher/fetcher.go +++ b/eth/fetcher/fetcher.go @@ -7,6 +7,8 @@ import ( "math/rand" "time" + "github.com/rcrowley/go-metrics" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/logger" @@ -96,6 +98,11 @@ type Fetcher struct { // Testing hooks fetchingHook func([]common.Hash) // Method to call upon starting a block fetch importedHook func(*types.Block) // Method to call upon successful block import + + // Runtime metrics + announceStats metrics.Meter + broadcastStats metrics.Meter + discardStats metrics.Meter } // New creates a block fetcher to retrieve blocks based on hash announcements. @@ -118,6 +125,9 @@ func New(getBlock blockRetrievalFn, validateBlock blockValidatorFn, broadcastBlo chainHeight: chainHeight, insertChain: insertChain, dropPeer: dropPeer, + announceStats: metrics.GetOrRegisterMeter("eth/Announced Blocks", metrics.DefaultRegistry), + broadcastStats: metrics.GetOrRegisterMeter("eth/Propagated Blocks", metrics.DefaultRegistry), + discardStats: metrics.GetOrRegisterMeter("eth/Discarded Blocks", metrics.DefaultRegistry), } } @@ -229,6 +239,8 @@ func (f *Fetcher) loop() { case notification := <-f.notify: // A block was announced, make sure the peer isn't DOSing us + f.announceStats.Mark(1) + count := f.announces[notification.origin] + 1 if count > hashLimit { glog.V(logger.Debug).Infof("Peer %s: exceeded outstanding announces (%d)", notification.origin, hashLimit) @@ -246,6 +258,7 @@ func (f *Fetcher) loop() { case op := <-f.inject: // A direct block insertion was requested, try and fill any pending gaps + f.broadcastStats.Mark(1) f.enqueue(op.origin, op.block) case hash := <-f.done: @@ -364,6 +377,7 @@ func (f *Fetcher) enqueue(peer string, block *types.Block) { // Discard any past or too distant blocks if dist := int64(block.NumberU64()) - int64(f.chainHeight()); dist < -maxUncleDist || dist > maxQueueDist { glog.V(logger.Debug).Infof("Peer %s: discarded block #%d [%x], distance %d", peer, block.NumberU64(), hash.Bytes()[:4], dist) + f.discardStats.Mark(1) return } // Schedule the block for future importing From 6994a3daaa0acfc8431e33da535c85e23ab319e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= Date: Sun, 21 Jun 2015 20:23:37 +0300 Subject: [PATCH 041/156] p2p: instrument P2P networking layer --- p2p/dial.go | 4 +++- p2p/metrics.go | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ p2p/server.go | 6 ++++-- 3 files changed, 56 insertions(+), 3 deletions(-) create mode 100644 p2p/metrics.go diff --git a/p2p/dial.go b/p2p/dial.go index b82d6d1f51..45cd8116b6 100644 --- a/p2p/dial.go +++ b/p2p/dial.go @@ -196,7 +196,9 @@ func (t *dialTask) Do(srv *Server) { glog.V(logger.Detail).Infof("dial error: %v", err) return } - srv.setupConn(fd, t.flags, t.dest) + mfd := newMeteredConn(fd, false) + + srv.setupConn(mfd, t.flags, t.dest) } func (t *dialTask) String() string { return fmt.Sprintf("%v %x %v:%d", t.flags, t.dest.ID[:8], t.dest.IP, t.dest.TCP) diff --git a/p2p/metrics.go b/p2p/metrics.go new file mode 100644 index 0000000000..fbe5b1e90d --- /dev/null +++ b/p2p/metrics.go @@ -0,0 +1,49 @@ +// Contains the meters and timers used by the networking layer. + +package p2p + +import ( + "net" + + "github.com/rcrowley/go-metrics" +) + +var ( + ingressConnectMeter = metrics.GetOrRegisterMeter("p2p/InboundConnects", metrics.DefaultRegistry) + ingressTrafficMeter = metrics.GetOrRegisterMeter("p2p/InboundTraffic", metrics.DefaultRegistry) + egressConnectMeter = metrics.GetOrRegisterMeter("p2p/OutboundConnects", metrics.DefaultRegistry) + egressTrafficMeter = metrics.GetOrRegisterMeter("p2p/OutboundTraffic", metrics.DefaultRegistry) +) + +// meteredConn is a wrapper around a network TCP connection that meters both the +// inbound and outbound network traffic. +type meteredConn struct { + *net.TCPConn // Network connection to wrap with metering +} + +// newMeteredConn creates a new metered connection, also bumping the ingress or +// egress connection meter. +func newMeteredConn(conn net.Conn, ingress bool) net.Conn { + if ingress { + ingressConnectMeter.Mark(1) + } else { + egressConnectMeter.Mark(1) + } + return &meteredConn{conn.(*net.TCPConn)} +} + +// Read delegates a network read to the underlying connection, bumping the ingress +// traffic meter along the way. +func (c *meteredConn) Read(b []byte) (n int, err error) { + n, err = c.TCPConn.Read(b) + ingressTrafficMeter.Mark(int64(n)) + return +} + +// Write delegates a network write to the underlying connection, bumping the +// egress traffic meter along the way. +func (c *meteredConn) Write(b []byte) (n int, err error) { + n, err = c.TCPConn.Write(b) + egressTrafficMeter.Mark(int64(n)) + return +} diff --git a/p2p/server.go b/p2p/server.go index 5eff70345f..9078841a89 100644 --- a/p2p/server.go +++ b/p2p/server.go @@ -548,9 +548,11 @@ func (srv *Server) listenLoop() { if err != nil { return } - glog.V(logger.Debug).Infof("Accepted conn %v\n", fd.RemoteAddr()) + mfd := newMeteredConn(fd, true) + + glog.V(logger.Debug).Infof("Accepted conn %v\n", mfd.RemoteAddr()) go func() { - srv.setupConn(fd, inboundConn, nil) + srv.setupConn(mfd, inboundConn, nil) slots <- struct{}{} }() } From b426301467304a6c047df9baa033a042ddf3c4bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= Date: Sun, 21 Jun 2015 20:23:51 +0300 Subject: [PATCH 042/156] cmd/geth, eth/fetcher: polish metrics reporting, add some more --- cmd/geth/admin.go | 51 +++++++++++++++++++++++++++++++++++++----- eth/fetcher/fetcher.go | 25 ++++++++++++--------- 2 files changed, 60 insertions(+), 16 deletions(-) diff --git a/cmd/geth/admin.go b/cmd/geth/admin.go index 0d5e025237..7d8780ef05 100644 --- a/cmd/geth/admin.go +++ b/cmd/geth/admin.go @@ -6,10 +6,9 @@ import ( "fmt" "math/big" "strconv" + "strings" "time" - "github.com/rcrowley/go-metrics" - "github.com/ethereum/ethash" "github.com/ethereum/go-ethereum/accounts" "github.com/ethereum/go-ethereum/cmd/utils" @@ -25,6 +24,7 @@ import ( "github.com/ethereum/go-ethereum/rlp" "github.com/ethereum/go-ethereum/rpc" "github.com/ethereum/go-ethereum/xeth" + "github.com/rcrowley/go-metrics" "github.com/robertkrimen/otto" "gopkg.in/fatih/set.v0" ) @@ -723,17 +723,56 @@ func (js *jsre) waitForBlocks(call otto.FunctionCall) otto.Value { } func (js *jsre) metrics(call otto.FunctionCall) otto.Value { + // Create a rate formatter + units := []string{"", "K", "M", "G", "T", "E", "P"} + round := func(value float64, prec int) string { + unit := 0 + for value >= 1000 { + unit, value, prec = unit+1, value/1000, 2 + } + return fmt.Sprintf(fmt.Sprintf("%%.%df%s", prec, units[unit]), value) + } + format := func(total float64, rate float64) string { + return fmt.Sprintf("%s (%s/s)", round(total, 0), round(rate, 2)) + } + // Iterate over all the metrics, and just dump for now counters := make(map[string]interface{}) metrics.DefaultRegistry.Each(func(name string, metric interface{}) { + // Create or retrieve the counter hierarchy for this metric + root, parts := counters, strings.Split(name, "/") + for _, part := range parts[:len(parts)-1] { + if _, ok := root[part]; !ok { + root[part] = make(map[string]interface{}) + } + root = root[part].(map[string]interface{}) + } + name = parts[len(parts)-1] + + // Fill the counter with the metric details switch metric := metric.(type) { case metrics.Meter: - counters[name+"( 1 min)"] = int(metric.Rate1() * 60) - counters[name+"( 5 min)"] = int(metric.Rate5() * 300) - counters[name+"(15 min)"] = int(metric.Rate15() * 900) + root[name] = map[string]interface{}{ + "Avg01Min": format(metric.Rate1()*60, metric.Rate1()), + "Avg05Min": format(metric.Rate5()*300, metric.Rate5()), + "Avg15Min": format(metric.Rate15()*900, metric.Rate15()), + "Overall": format(float64(metric.Count()), metric.RateMean()), + } + + case metrics.Timer: + root[name] = map[string]interface{}{ + "Avg01Min": format(metric.Rate1()*60, metric.Rate1()), + "Avg05Min": format(metric.Rate5()*300, metric.Rate5()), + "Avg15Min": format(metric.Rate15()*900, metric.Rate15()), + "Overall": format(float64(metric.Count()), metric.RateMean()), + "Perc01": round(metric.Percentile(1), 2), + "Perc05": round(metric.Percentile(5), 2), + "Perc25": round(metric.Percentile(25), 2), + "Perc90": round(metric.Percentile(90), 2), + } default: - counters[name] = "Unknown metric type" + root[name] = "Unknown metric type" } }) // Flatten the counters into some metrics and return diff --git a/eth/fetcher/fetcher.go b/eth/fetcher/fetcher.go index a9f4227c4d..a8f0dddbd4 100644 --- a/eth/fetcher/fetcher.go +++ b/eth/fetcher/fetcher.go @@ -7,12 +7,11 @@ import ( "math/rand" "time" - "github.com/rcrowley/go-metrics" - "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/logger" "github.com/ethereum/go-ethereum/logger/glog" + "github.com/rcrowley/go-metrics" "gopkg.in/karalabe/cookiejar.v2/collections/prque" ) @@ -100,9 +99,11 @@ type Fetcher struct { importedHook func(*types.Block) // Method to call upon successful block import // Runtime metrics - announceStats metrics.Meter - broadcastStats metrics.Meter - discardStats metrics.Meter + announceMeter metrics.Meter // Counter for metering the inbound announcements + announceTimer metrics.Timer // Counter and timer for metering the announce forwarding + broadcastMeter metrics.Meter // Counter for metering the inbound propagations + broadcastTimer metrics.Timer // Counter and timer for metering the block forwarding + discardMeter metrics.Meter // Counter for metering the discarded blocks } // New creates a block fetcher to retrieve blocks based on hash announcements. @@ -125,9 +126,11 @@ func New(getBlock blockRetrievalFn, validateBlock blockValidatorFn, broadcastBlo chainHeight: chainHeight, insertChain: insertChain, dropPeer: dropPeer, - announceStats: metrics.GetOrRegisterMeter("eth/Announced Blocks", metrics.DefaultRegistry), - broadcastStats: metrics.GetOrRegisterMeter("eth/Propagated Blocks", metrics.DefaultRegistry), - discardStats: metrics.GetOrRegisterMeter("eth/Discarded Blocks", metrics.DefaultRegistry), + announceMeter: metrics.GetOrRegisterMeter("eth/RemoteAnnounces", metrics.DefaultRegistry), + announceTimer: metrics.GetOrRegisterTimer("eth/LocalAnnounces", metrics.DefaultRegistry), + broadcastMeter: metrics.GetOrRegisterMeter("eth/RemoteBroadcasts", metrics.DefaultRegistry), + broadcastTimer: metrics.GetOrRegisterTimer("eth/LocalBroadcasts", metrics.DefaultRegistry), + discardMeter: metrics.GetOrRegisterMeter("eth/DiscardedBlocks", metrics.DefaultRegistry), } } @@ -239,7 +242,7 @@ func (f *Fetcher) loop() { case notification := <-f.notify: // A block was announced, make sure the peer isn't DOSing us - f.announceStats.Mark(1) + f.announceMeter.Mark(1) count := f.announces[notification.origin] + 1 if count > hashLimit { @@ -258,7 +261,7 @@ func (f *Fetcher) loop() { case op := <-f.inject: // A direct block insertion was requested, try and fill any pending gaps - f.broadcastStats.Mark(1) + f.broadcastMeter.Mark(1) f.enqueue(op.origin, op.block) case hash := <-f.done: @@ -418,6 +421,7 @@ func (f *Fetcher) insert(peer string, block *types.Block) { f.dropPeer(peer) return } + f.broadcastTimer.UpdateSince(block.ReceivedAt) go f.broadcastBlock(block, true) // Run the actual import and log any issues @@ -426,6 +430,7 @@ func (f *Fetcher) insert(peer string, block *types.Block) { return } // If import succeeded, broadcast the block + f.announceTimer.UpdateSince(block.ReceivedAt) go f.broadcastBlock(block, false) // Invoke the testing hook if needed From 7f92e708c504e1c4a7382c68b5a4ed68db9c8deb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= Date: Sun, 21 Jun 2015 22:10:24 +0300 Subject: [PATCH 043/156] cmd/geth, core: impl. percentile reporting, instrument insertions --- cmd/geth/admin.go | 18 +++++++++++------- core/chain_manager.go | 5 ++++- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/cmd/geth/admin.go b/cmd/geth/admin.go index 7d8780ef05..0c26cc97c5 100644 --- a/cmd/geth/admin.go +++ b/cmd/geth/admin.go @@ -735,7 +735,6 @@ func (js *jsre) metrics(call otto.FunctionCall) otto.Value { format := func(total float64, rate float64) string { return fmt.Sprintf("%s (%s/s)", round(total, 0), round(rate, 2)) } - // Iterate over all the metrics, and just dump for now counters := make(map[string]interface{}) metrics.DefaultRegistry.Each(func(name string, metric interface{}) { @@ -756,7 +755,7 @@ func (js *jsre) metrics(call otto.FunctionCall) otto.Value { "Avg01Min": format(metric.Rate1()*60, metric.Rate1()), "Avg05Min": format(metric.Rate5()*300, metric.Rate5()), "Avg15Min": format(metric.Rate15()*900, metric.Rate15()), - "Overall": format(float64(metric.Count()), metric.RateMean()), + "Total": format(float64(metric.Count()), metric.RateMean()), } case metrics.Timer: @@ -764,11 +763,16 @@ func (js *jsre) metrics(call otto.FunctionCall) otto.Value { "Avg01Min": format(metric.Rate1()*60, metric.Rate1()), "Avg05Min": format(metric.Rate5()*300, metric.Rate5()), "Avg15Min": format(metric.Rate15()*900, metric.Rate15()), - "Overall": format(float64(metric.Count()), metric.RateMean()), - "Perc01": round(metric.Percentile(1), 2), - "Perc05": round(metric.Percentile(5), 2), - "Perc25": round(metric.Percentile(25), 2), - "Perc90": round(metric.Percentile(90), 2), + "Count": format(float64(metric.Count()), metric.RateMean()), + "Maximum": time.Duration(metric.Max()).String(), + "Minimum": time.Duration(metric.Min()).String(), + "Percentile": map[string]interface{}{ + "20": time.Duration(metric.Percentile(0.2)).String(), + "50": time.Duration(metric.Percentile(0.5)).String(), + "80": time.Duration(metric.Percentile(0.8)).String(), + "95": time.Duration(metric.Percentile(0.95)).String(), + "99": time.Duration(metric.Percentile(0.99)).String(), + }, } default: diff --git a/core/chain_manager.go b/core/chain_manager.go index e3795f561c..6a017b63f5 100644 --- a/core/chain_manager.go +++ b/core/chain_manager.go @@ -19,6 +19,7 @@ import ( "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/pow" "github.com/ethereum/go-ethereum/rlp" + "github.com/rcrowley/go-metrics" ) var ( @@ -27,6 +28,8 @@ var ( blockHashPre = []byte("block-hash-") blockNumPre = []byte("block-num-") + + blockInsertTimer = metrics.GetOrRegisterTimer("core/BlockInsertions", metrics.DefaultRegistry) ) const ( @@ -691,7 +694,7 @@ func (self *ChainManager) InsertChain(chain types.Blocks) (int, error) { self.futureBlocks.Delete(block.Hash()) stats.processed++ - + blockInsertTimer.UpdateSince(bstart) } if (stats.queued > 0 || stats.processed > 0 || stats.ignored > 0) && bool(glog.V(logger.Info)) { From 7bd71fa80071f86ca86ed7ef64ab51c88cabe7d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= Date: Mon, 22 Jun 2015 12:00:55 +0300 Subject: [PATCH 044/156] godeps: pull in go-metrics --- Godeps/Godeps.json | 4 + .../github.com/rcrowley/go-metrics/.gitignore | 9 + .../github.com/rcrowley/go-metrics/LICENSE | 29 + .../github.com/rcrowley/go-metrics/README.md | 104 +++ .../cmd/metrics-bench/metrics-bench.go | 20 + .../cmd/metrics-example/metrics-example.go | 154 +++++ .../go-metrics/cmd/never-read/never-read.go | 22 + .../github.com/rcrowley/go-metrics/counter.go | 112 ++++ .../rcrowley/go-metrics/counter_test.go | 77 +++ .../github.com/rcrowley/go-metrics/debug.go | 76 +++ .../rcrowley/go-metrics/debug_test.go | 48 ++ .../github.com/rcrowley/go-metrics/ewma.go | 118 ++++ .../rcrowley/go-metrics/ewma_test.go | 225 +++++++ .../github.com/rcrowley/go-metrics/gauge.go | 84 +++ .../rcrowley/go-metrics/gauge_float64.go | 91 +++ .../rcrowley/go-metrics/gauge_float64_test.go | 38 ++ .../rcrowley/go-metrics/gauge_test.go | 37 ++ .../rcrowley/go-metrics/graphite.go | 111 ++++ .../rcrowley/go-metrics/graphite_test.go | 22 + .../rcrowley/go-metrics/healthcheck.go | 61 ++ .../rcrowley/go-metrics/histogram.go | 202 ++++++ .../rcrowley/go-metrics/histogram_test.go | 95 +++ .../rcrowley/go-metrics/influxdb/influxdb.go | 114 ++++ .../github.com/rcrowley/go-metrics/json.go | 83 +++ .../rcrowley/go-metrics/json_test.go | 28 + .../rcrowley/go-metrics/librato/client.go | 102 +++ .../rcrowley/go-metrics/librato/librato.go | 230 +++++++ .../src/github.com/rcrowley/go-metrics/log.go | 70 ++ .../github.com/rcrowley/go-metrics/memory.md | 285 ++++++++ .../github.com/rcrowley/go-metrics/meter.go | 233 +++++++ .../rcrowley/go-metrics/meter_test.go | 60 ++ .../github.com/rcrowley/go-metrics/metrics.go | 13 + .../rcrowley/go-metrics/metrics_test.go | 107 +++ .../rcrowley/go-metrics/opentsdb.go | 119 ++++ .../rcrowley/go-metrics/opentsdb_test.go | 22 + .../rcrowley/go-metrics/registry.go | 180 ++++++ .../rcrowley/go-metrics/registry_test.go | 118 ++++ .../github.com/rcrowley/go-metrics/runtime.go | 200 ++++++ .../rcrowley/go-metrics/runtime_cgo.go | 10 + .../rcrowley/go-metrics/runtime_no_cgo.go | 7 + .../rcrowley/go-metrics/runtime_test.go | 78 +++ .../github.com/rcrowley/go-metrics/sample.go | 609 ++++++++++++++++++ .../rcrowley/go-metrics/sample_test.go | 363 +++++++++++ .../rcrowley/go-metrics/stathat/stathat.go | 69 ++ .../github.com/rcrowley/go-metrics/syslog.go | 78 +++ .../github.com/rcrowley/go-metrics/timer.go | 311 +++++++++ .../rcrowley/go-metrics/timer_test.go | 81 +++ .../github.com/rcrowley/go-metrics/writer.go | 100 +++ .../rcrowley/go-metrics/writer_test.go | 22 + 49 files changed, 5431 insertions(+) create mode 100644 Godeps/_workspace/src/github.com/rcrowley/go-metrics/.gitignore create mode 100644 Godeps/_workspace/src/github.com/rcrowley/go-metrics/LICENSE create mode 100644 Godeps/_workspace/src/github.com/rcrowley/go-metrics/README.md create mode 100644 Godeps/_workspace/src/github.com/rcrowley/go-metrics/cmd/metrics-bench/metrics-bench.go create mode 100644 Godeps/_workspace/src/github.com/rcrowley/go-metrics/cmd/metrics-example/metrics-example.go create mode 100644 Godeps/_workspace/src/github.com/rcrowley/go-metrics/cmd/never-read/never-read.go create mode 100644 Godeps/_workspace/src/github.com/rcrowley/go-metrics/counter.go create mode 100644 Godeps/_workspace/src/github.com/rcrowley/go-metrics/counter_test.go create mode 100644 Godeps/_workspace/src/github.com/rcrowley/go-metrics/debug.go create mode 100644 Godeps/_workspace/src/github.com/rcrowley/go-metrics/debug_test.go create mode 100644 Godeps/_workspace/src/github.com/rcrowley/go-metrics/ewma.go create mode 100644 Godeps/_workspace/src/github.com/rcrowley/go-metrics/ewma_test.go create mode 100644 Godeps/_workspace/src/github.com/rcrowley/go-metrics/gauge.go create mode 100644 Godeps/_workspace/src/github.com/rcrowley/go-metrics/gauge_float64.go create mode 100644 Godeps/_workspace/src/github.com/rcrowley/go-metrics/gauge_float64_test.go create mode 100644 Godeps/_workspace/src/github.com/rcrowley/go-metrics/gauge_test.go create mode 100644 Godeps/_workspace/src/github.com/rcrowley/go-metrics/graphite.go create mode 100644 Godeps/_workspace/src/github.com/rcrowley/go-metrics/graphite_test.go create mode 100644 Godeps/_workspace/src/github.com/rcrowley/go-metrics/healthcheck.go create mode 100644 Godeps/_workspace/src/github.com/rcrowley/go-metrics/histogram.go create mode 100644 Godeps/_workspace/src/github.com/rcrowley/go-metrics/histogram_test.go create mode 100644 Godeps/_workspace/src/github.com/rcrowley/go-metrics/influxdb/influxdb.go create mode 100644 Godeps/_workspace/src/github.com/rcrowley/go-metrics/json.go create mode 100644 Godeps/_workspace/src/github.com/rcrowley/go-metrics/json_test.go create mode 100644 Godeps/_workspace/src/github.com/rcrowley/go-metrics/librato/client.go create mode 100644 Godeps/_workspace/src/github.com/rcrowley/go-metrics/librato/librato.go create mode 100644 Godeps/_workspace/src/github.com/rcrowley/go-metrics/log.go create mode 100644 Godeps/_workspace/src/github.com/rcrowley/go-metrics/memory.md create mode 100644 Godeps/_workspace/src/github.com/rcrowley/go-metrics/meter.go create mode 100644 Godeps/_workspace/src/github.com/rcrowley/go-metrics/meter_test.go create mode 100644 Godeps/_workspace/src/github.com/rcrowley/go-metrics/metrics.go create mode 100644 Godeps/_workspace/src/github.com/rcrowley/go-metrics/metrics_test.go create mode 100644 Godeps/_workspace/src/github.com/rcrowley/go-metrics/opentsdb.go create mode 100644 Godeps/_workspace/src/github.com/rcrowley/go-metrics/opentsdb_test.go create mode 100644 Godeps/_workspace/src/github.com/rcrowley/go-metrics/registry.go create mode 100644 Godeps/_workspace/src/github.com/rcrowley/go-metrics/registry_test.go create mode 100644 Godeps/_workspace/src/github.com/rcrowley/go-metrics/runtime.go create mode 100644 Godeps/_workspace/src/github.com/rcrowley/go-metrics/runtime_cgo.go create mode 100644 Godeps/_workspace/src/github.com/rcrowley/go-metrics/runtime_no_cgo.go create mode 100644 Godeps/_workspace/src/github.com/rcrowley/go-metrics/runtime_test.go create mode 100644 Godeps/_workspace/src/github.com/rcrowley/go-metrics/sample.go create mode 100644 Godeps/_workspace/src/github.com/rcrowley/go-metrics/sample_test.go create mode 100644 Godeps/_workspace/src/github.com/rcrowley/go-metrics/stathat/stathat.go create mode 100644 Godeps/_workspace/src/github.com/rcrowley/go-metrics/syslog.go create mode 100644 Godeps/_workspace/src/github.com/rcrowley/go-metrics/timer.go create mode 100644 Godeps/_workspace/src/github.com/rcrowley/go-metrics/timer_test.go create mode 100644 Godeps/_workspace/src/github.com/rcrowley/go-metrics/writer.go create mode 100644 Godeps/_workspace/src/github.com/rcrowley/go-metrics/writer_test.go diff --git a/Godeps/Godeps.json b/Godeps/Godeps.json index 0607990a8c..7d3e18e269 100644 --- a/Godeps/Godeps.json +++ b/Godeps/Godeps.json @@ -65,6 +65,10 @@ "ImportPath": "github.com/rakyll/goini", "Rev": "907cca0f578a5316fb864ec6992dc3d9730ec58c" }, + { + "ImportPath": "github.com/rcrowley/go-metrics", + "Rev": "a5cfc242a56ba7fa70b785f678d6214837bf93b9" + }, { "ImportPath": "github.com/robertkrimen/otto", "Rev": "dea31a3d392779af358ec41f77a07fcc7e9d04ba" diff --git a/Godeps/_workspace/src/github.com/rcrowley/go-metrics/.gitignore b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/.gitignore new file mode 100644 index 0000000000..83c8f82374 --- /dev/null +++ b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/.gitignore @@ -0,0 +1,9 @@ +*.[68] +*.a +*.out +*.swp +_obj +_testmain.go +cmd/metrics-bench/metrics-bench +cmd/metrics-example/metrics-example +cmd/never-read/never-read diff --git a/Godeps/_workspace/src/github.com/rcrowley/go-metrics/LICENSE b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/LICENSE new file mode 100644 index 0000000000..363fa9ee77 --- /dev/null +++ b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/LICENSE @@ -0,0 +1,29 @@ +Copyright 2012 Richard Crowley. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + +THIS SOFTWARE IS PROVIDED BY RICHARD CROWLEY ``AS IS'' AND ANY EXPRESS +OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL RICHARD CROWLEY OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF +THE POSSIBILITY OF SUCH DAMAGE. + +The views and conclusions contained in the software and documentation +are those of the authors and should not be interpreted as representing +official policies, either expressed or implied, of Richard Crowley. diff --git a/Godeps/_workspace/src/github.com/rcrowley/go-metrics/README.md b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/README.md new file mode 100644 index 0000000000..e0091a4bd0 --- /dev/null +++ b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/README.md @@ -0,0 +1,104 @@ +go-metrics +========== + +Go port of Coda Hale's Metrics library: . + +Documentation: . + +Usage +----- + +Create and update metrics: + +```go +c := metrics.NewCounter() +metrics.Register("foo", c) +c.Inc(47) + +g := metrics.NewGauge() +metrics.Register("bar", g) +g.Update(47) + +s := metrics.NewExpDecaySample(1028, 0.015) // or metrics.NewUniformSample(1028) +h := metrics.NewHistogram(s) +metrics.Register("baz", h) +h.Update(47) + +m := metrics.NewMeter() +metrics.Register("quux", m) +m.Mark(47) + +t := metrics.NewTimer() +metrics.Register("bang", t) +t.Time(func() {}) +t.Update(47) +``` + +Periodically log every metric in human-readable form to standard error: + +```go +go metrics.Log(metrics.DefaultRegistry, 60e9, log.New(os.Stderr, "metrics: ", log.Lmicroseconds)) +``` + +Periodically log every metric in slightly-more-parseable form to syslog: + +```go +w, _ := syslog.Dial("unixgram", "/dev/log", syslog.LOG_INFO, "metrics") +go metrics.Syslog(metrics.DefaultRegistry, 60e9, w) +``` + +Periodically emit every metric to Graphite: + +```go +addr, _ := net.ResolveTCPAddr("tcp", "127.0.0.1:2003") +go metrics.Graphite(metrics.DefaultRegistry, 10e9, "metrics", addr) +``` + +Periodically emit every metric into InfluxDB: + +```go +import "github.com/rcrowley/go-metrics/influxdb" + +go influxdb.Influxdb(metrics.DefaultRegistry, 10e9, &influxdb.Config{ + Host: "127.0.0.1:8086", + Database: "metrics", + Username: "test", + Password: "test", +}) +``` + +Periodically upload every metric to Librato: + +```go +import "github.com/rcrowley/go-metrics/librato" + +go librato.Librato(metrics.DefaultRegistry, + 10e9, // interval + "example@example.com", // account owner email address + "token", // Librato API token + "hostname", // source + []float64{0.95}, // precentiles to send + time.Millisecond, // time unit +) +``` + +Periodically emit every metric to StatHat: + +```go +import "github.com/rcrowley/go-metrics/stathat" + +go stathat.Stathat(metrics.DefaultRegistry, 10e9, "example@example.com") +``` + +Installation +------------ + +```sh +go get github.com/rcrowley/go-metrics +``` + +StatHat support additionally requires their Go client: + +```sh +go get github.com/stathat/go +``` diff --git a/Godeps/_workspace/src/github.com/rcrowley/go-metrics/cmd/metrics-bench/metrics-bench.go b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/cmd/metrics-bench/metrics-bench.go new file mode 100644 index 0000000000..dddaf4b126 --- /dev/null +++ b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/cmd/metrics-bench/metrics-bench.go @@ -0,0 +1,20 @@ +package main + +import ( + "fmt" + "github.com/rcrowley/go-metrics" + "time" +) + +func main() { + r := metrics.NewRegistry() + for i := 0; i < 10000; i++ { + r.Register(fmt.Sprintf("counter-%d", i), metrics.NewCounter()) + r.Register(fmt.Sprintf("gauge-%d", i), metrics.NewGauge()) + r.Register(fmt.Sprintf("gaugefloat64-%d", i), metrics.NewGaugeFloat64()) + r.Register(fmt.Sprintf("histogram-uniform-%d", i), metrics.NewHistogram(metrics.NewUniformSample(1028))) + r.Register(fmt.Sprintf("histogram-exp-%d", i), metrics.NewHistogram(metrics.NewExpDecaySample(1028, 0.015))) + r.Register(fmt.Sprintf("meter-%d", i), metrics.NewMeter()) + } + time.Sleep(600e9) +} diff --git a/Godeps/_workspace/src/github.com/rcrowley/go-metrics/cmd/metrics-example/metrics-example.go b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/cmd/metrics-example/metrics-example.go new file mode 100644 index 0000000000..66f42c0468 --- /dev/null +++ b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/cmd/metrics-example/metrics-example.go @@ -0,0 +1,154 @@ +package main + +import ( + "errors" + "github.com/rcrowley/go-metrics" + // "github.com/rcrowley/go-metrics/stathat" + "log" + "math/rand" + "os" + // "syslog" + "time" +) + +const fanout = 10 + +func main() { + + r := metrics.NewRegistry() + + c := metrics.NewCounter() + r.Register("foo", c) + for i := 0; i < fanout; i++ { + go func() { + for { + c.Dec(19) + time.Sleep(300e6) + } + }() + go func() { + for { + c.Inc(47) + time.Sleep(400e6) + } + }() + } + + g := metrics.NewGauge() + r.Register("bar", g) + for i := 0; i < fanout; i++ { + go func() { + for { + g.Update(19) + time.Sleep(300e6) + } + }() + go func() { + for { + g.Update(47) + time.Sleep(400e6) + } + }() + } + + gf := metrics.NewGaugeFloat64() + r.Register("barfloat64", gf) + for i := 0; i < fanout; i++ { + go func() { + for { + g.Update(19.0) + time.Sleep(300e6) + } + }() + go func() { + for { + g.Update(47.0) + time.Sleep(400e6) + } + }() + } + + hc := metrics.NewHealthcheck(func(h metrics.Healthcheck) { + if 0 < rand.Intn(2) { + h.Healthy() + } else { + h.Unhealthy(errors.New("baz")) + } + }) + r.Register("baz", hc) + + s := metrics.NewExpDecaySample(1028, 0.015) + //s := metrics.NewUniformSample(1028) + h := metrics.NewHistogram(s) + r.Register("bang", h) + for i := 0; i < fanout; i++ { + go func() { + for { + h.Update(19) + time.Sleep(300e6) + } + }() + go func() { + for { + h.Update(47) + time.Sleep(400e6) + } + }() + } + + m := metrics.NewMeter() + r.Register("quux", m) + for i := 0; i < fanout; i++ { + go func() { + for { + m.Mark(19) + time.Sleep(300e6) + } + }() + go func() { + for { + m.Mark(47) + time.Sleep(400e6) + } + }() + } + + t := metrics.NewTimer() + r.Register("hooah", t) + for i := 0; i < fanout; i++ { + go func() { + for { + t.Time(func() { time.Sleep(300e6) }) + } + }() + go func() { + for { + t.Time(func() { time.Sleep(400e6) }) + } + }() + } + + metrics.RegisterDebugGCStats(r) + go metrics.CaptureDebugGCStats(r, 5e9) + + metrics.RegisterRuntimeMemStats(r) + go metrics.CaptureRuntimeMemStats(r, 5e9) + + metrics.Log(r, 60e9, log.New(os.Stderr, "metrics: ", log.Lmicroseconds)) + + /* + w, err := syslog.Dial("unixgram", "/dev/log", syslog.LOG_INFO, "metrics") + if nil != err { log.Fatalln(err) } + metrics.Syslog(r, 60e9, w) + */ + + /* + addr, _ := net.ResolveTCPAddr("tcp", "127.0.0.1:2003") + metrics.Graphite(r, 10e9, "metrics", addr) + */ + + /* + stathat.Stathat(r, 10e9, "example@example.com") + */ + +} diff --git a/Godeps/_workspace/src/github.com/rcrowley/go-metrics/cmd/never-read/never-read.go b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/cmd/never-read/never-read.go new file mode 100644 index 0000000000..dc175b778e --- /dev/null +++ b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/cmd/never-read/never-read.go @@ -0,0 +1,22 @@ +package main + +import ( + "log" + "net" +) + +func main() { + addr, _ := net.ResolveTCPAddr("tcp", "127.0.0.1:2003") + l, err := net.ListenTCP("tcp", addr) + if nil != err { + log.Fatalln(err) + } + log.Println("listening", l.Addr()) + for { + c, err := l.AcceptTCP() + if nil != err { + log.Fatalln(err) + } + log.Println("accepted", c.RemoteAddr()) + } +} diff --git a/Godeps/_workspace/src/github.com/rcrowley/go-metrics/counter.go b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/counter.go new file mode 100644 index 0000000000..bb7b039cb5 --- /dev/null +++ b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/counter.go @@ -0,0 +1,112 @@ +package metrics + +import "sync/atomic" + +// Counters hold an int64 value that can be incremented and decremented. +type Counter interface { + Clear() + Count() int64 + Dec(int64) + Inc(int64) + Snapshot() Counter +} + +// GetOrRegisterCounter returns an existing Counter or constructs and registers +// a new StandardCounter. +func GetOrRegisterCounter(name string, r Registry) Counter { + if nil == r { + r = DefaultRegistry + } + return r.GetOrRegister(name, NewCounter).(Counter) +} + +// NewCounter constructs a new StandardCounter. +func NewCounter() Counter { + if UseNilMetrics { + return NilCounter{} + } + return &StandardCounter{0} +} + +// NewRegisteredCounter constructs and registers a new StandardCounter. +func NewRegisteredCounter(name string, r Registry) Counter { + c := NewCounter() + if nil == r { + r = DefaultRegistry + } + r.Register(name, c) + return c +} + +// CounterSnapshot is a read-only copy of another Counter. +type CounterSnapshot int64 + +// Clear panics. +func (CounterSnapshot) Clear() { + panic("Clear called on a CounterSnapshot") +} + +// Count returns the count at the time the snapshot was taken. +func (c CounterSnapshot) Count() int64 { return int64(c) } + +// Dec panics. +func (CounterSnapshot) Dec(int64) { + panic("Dec called on a CounterSnapshot") +} + +// Inc panics. +func (CounterSnapshot) Inc(int64) { + panic("Inc called on a CounterSnapshot") +} + +// Snapshot returns the snapshot. +func (c CounterSnapshot) Snapshot() Counter { return c } + +// NilCounter is a no-op Counter. +type NilCounter struct{} + +// Clear is a no-op. +func (NilCounter) Clear() {} + +// Count is a no-op. +func (NilCounter) Count() int64 { return 0 } + +// Dec is a no-op. +func (NilCounter) Dec(i int64) {} + +// Inc is a no-op. +func (NilCounter) Inc(i int64) {} + +// Snapshot is a no-op. +func (NilCounter) Snapshot() Counter { return NilCounter{} } + +// StandardCounter is the standard implementation of a Counter and uses the +// sync/atomic package to manage a single int64 value. +type StandardCounter struct { + count int64 +} + +// Clear sets the counter to zero. +func (c *StandardCounter) Clear() { + atomic.StoreInt64(&c.count, 0) +} + +// Count returns the current count. +func (c *StandardCounter) Count() int64 { + return atomic.LoadInt64(&c.count) +} + +// Dec decrements the counter by the given amount. +func (c *StandardCounter) Dec(i int64) { + atomic.AddInt64(&c.count, -i) +} + +// Inc increments the counter by the given amount. +func (c *StandardCounter) Inc(i int64) { + atomic.AddInt64(&c.count, i) +} + +// Snapshot returns a read-only copy of the counter. +func (c *StandardCounter) Snapshot() Counter { + return CounterSnapshot(c.Count()) +} diff --git a/Godeps/_workspace/src/github.com/rcrowley/go-metrics/counter_test.go b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/counter_test.go new file mode 100644 index 0000000000..dfb03b4e88 --- /dev/null +++ b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/counter_test.go @@ -0,0 +1,77 @@ +package metrics + +import "testing" + +func BenchmarkCounter(b *testing.B) { + c := NewCounter() + b.ResetTimer() + for i := 0; i < b.N; i++ { + c.Inc(1) + } +} + +func TestCounterClear(t *testing.T) { + c := NewCounter() + c.Inc(1) + c.Clear() + if count := c.Count(); 0 != count { + t.Errorf("c.Count(): 0 != %v\n", count) + } +} + +func TestCounterDec1(t *testing.T) { + c := NewCounter() + c.Dec(1) + if count := c.Count(); -1 != count { + t.Errorf("c.Count(): -1 != %v\n", count) + } +} + +func TestCounterDec2(t *testing.T) { + c := NewCounter() + c.Dec(2) + if count := c.Count(); -2 != count { + t.Errorf("c.Count(): -2 != %v\n", count) + } +} + +func TestCounterInc1(t *testing.T) { + c := NewCounter() + c.Inc(1) + if count := c.Count(); 1 != count { + t.Errorf("c.Count(): 1 != %v\n", count) + } +} + +func TestCounterInc2(t *testing.T) { + c := NewCounter() + c.Inc(2) + if count := c.Count(); 2 != count { + t.Errorf("c.Count(): 2 != %v\n", count) + } +} + +func TestCounterSnapshot(t *testing.T) { + c := NewCounter() + c.Inc(1) + snapshot := c.Snapshot() + c.Inc(1) + if count := snapshot.Count(); 1 != count { + t.Errorf("c.Count(): 1 != %v\n", count) + } +} + +func TestCounterZero(t *testing.T) { + c := NewCounter() + if count := c.Count(); 0 != count { + t.Errorf("c.Count(): 0 != %v\n", count) + } +} + +func TestGetOrRegisterCounter(t *testing.T) { + r := NewRegistry() + NewRegisteredCounter("foo", r).Inc(47) + if c := GetOrRegisterCounter("foo", r); 47 != c.Count() { + t.Fatal(c) + } +} diff --git a/Godeps/_workspace/src/github.com/rcrowley/go-metrics/debug.go b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/debug.go new file mode 100644 index 0000000000..043ccefab6 --- /dev/null +++ b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/debug.go @@ -0,0 +1,76 @@ +package metrics + +import ( + "runtime/debug" + "time" +) + +var ( + debugMetrics struct { + GCStats struct { + LastGC Gauge + NumGC Gauge + Pause Histogram + //PauseQuantiles Histogram + PauseTotal Gauge + } + ReadGCStats Timer + } + gcStats debug.GCStats +) + +// Capture new values for the Go garbage collector statistics exported in +// debug.GCStats. This is designed to be called as a goroutine. +func CaptureDebugGCStats(r Registry, d time.Duration) { + for _ = range time.Tick(d) { + CaptureDebugGCStatsOnce(r) + } +} + +// Capture new values for the Go garbage collector statistics exported in +// debug.GCStats. This is designed to be called in a background goroutine. +// Giving a registry which has not been given to RegisterDebugGCStats will +// panic. +// +// Be careful (but much less so) with this because debug.ReadGCStats calls +// the C function runtime·lock(runtime·mheap) which, while not a stop-the-world +// operation, isn't something you want to be doing all the time. +func CaptureDebugGCStatsOnce(r Registry) { + lastGC := gcStats.LastGC + t := time.Now() + debug.ReadGCStats(&gcStats) + debugMetrics.ReadGCStats.UpdateSince(t) + + debugMetrics.GCStats.LastGC.Update(int64(gcStats.LastGC.UnixNano())) + debugMetrics.GCStats.NumGC.Update(int64(gcStats.NumGC)) + if lastGC != gcStats.LastGC && 0 < len(gcStats.Pause) { + debugMetrics.GCStats.Pause.Update(int64(gcStats.Pause[0])) + } + //debugMetrics.GCStats.PauseQuantiles.Update(gcStats.PauseQuantiles) + debugMetrics.GCStats.PauseTotal.Update(int64(gcStats.PauseTotal)) +} + +// Register metrics for the Go garbage collector statistics exported in +// debug.GCStats. The metrics are named by their fully-qualified Go symbols, +// i.e. debug.GCStats.PauseTotal. +func RegisterDebugGCStats(r Registry) { + debugMetrics.GCStats.LastGC = NewGauge() + debugMetrics.GCStats.NumGC = NewGauge() + debugMetrics.GCStats.Pause = NewHistogram(NewExpDecaySample(1028, 0.015)) + //debugMetrics.GCStats.PauseQuantiles = NewHistogram(NewExpDecaySample(1028, 0.015)) + debugMetrics.GCStats.PauseTotal = NewGauge() + debugMetrics.ReadGCStats = NewTimer() + + r.Register("debug.GCStats.LastGC", debugMetrics.GCStats.LastGC) + r.Register("debug.GCStats.NumGC", debugMetrics.GCStats.NumGC) + r.Register("debug.GCStats.Pause", debugMetrics.GCStats.Pause) + //r.Register("debug.GCStats.PauseQuantiles", debugMetrics.GCStats.PauseQuantiles) + r.Register("debug.GCStats.PauseTotal", debugMetrics.GCStats.PauseTotal) + r.Register("debug.ReadGCStats", debugMetrics.ReadGCStats) +} + +// Allocate an initial slice for gcStats.Pause to avoid allocations during +// normal operation. +func init() { + gcStats.Pause = make([]time.Duration, 11) +} diff --git a/Godeps/_workspace/src/github.com/rcrowley/go-metrics/debug_test.go b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/debug_test.go new file mode 100644 index 0000000000..07eb867841 --- /dev/null +++ b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/debug_test.go @@ -0,0 +1,48 @@ +package metrics + +import ( + "runtime" + "runtime/debug" + "testing" + "time" +) + +func BenchmarkDebugGCStats(b *testing.B) { + r := NewRegistry() + RegisterDebugGCStats(r) + b.ResetTimer() + for i := 0; i < b.N; i++ { + CaptureDebugGCStatsOnce(r) + } +} + +func TestDebugGCStatsBlocking(t *testing.T) { + if g := runtime.GOMAXPROCS(0); g < 2 { + t.Skipf("skipping TestDebugGCMemStatsBlocking with GOMAXPROCS=%d\n", g) + return + } + ch := make(chan int) + go testDebugGCStatsBlocking(ch) + var gcStats debug.GCStats + t0 := time.Now() + debug.ReadGCStats(&gcStats) + t1 := time.Now() + t.Log("i++ during debug.ReadGCStats:", <-ch) + go testDebugGCStatsBlocking(ch) + d := t1.Sub(t0) + t.Log(d) + time.Sleep(d) + t.Log("i++ during time.Sleep:", <-ch) +} + +func testDebugGCStatsBlocking(ch chan int) { + i := 0 + for { + select { + case ch <- i: + return + default: + i++ + } + } +} diff --git a/Godeps/_workspace/src/github.com/rcrowley/go-metrics/ewma.go b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/ewma.go new file mode 100644 index 0000000000..7c152a174a --- /dev/null +++ b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/ewma.go @@ -0,0 +1,118 @@ +package metrics + +import ( + "math" + "sync" + "sync/atomic" +) + +// EWMAs continuously calculate an exponentially-weighted moving average +// based on an outside source of clock ticks. +type EWMA interface { + Rate() float64 + Snapshot() EWMA + Tick() + Update(int64) +} + +// NewEWMA constructs a new EWMA with the given alpha. +func NewEWMA(alpha float64) EWMA { + if UseNilMetrics { + return NilEWMA{} + } + return &StandardEWMA{alpha: alpha} +} + +// NewEWMA1 constructs a new EWMA for a one-minute moving average. +func NewEWMA1() EWMA { + return NewEWMA(1 - math.Exp(-5.0/60.0/1)) +} + +// NewEWMA5 constructs a new EWMA for a five-minute moving average. +func NewEWMA5() EWMA { + return NewEWMA(1 - math.Exp(-5.0/60.0/5)) +} + +// NewEWMA15 constructs a new EWMA for a fifteen-minute moving average. +func NewEWMA15() EWMA { + return NewEWMA(1 - math.Exp(-5.0/60.0/15)) +} + +// EWMASnapshot is a read-only copy of another EWMA. +type EWMASnapshot float64 + +// Rate returns the rate of events per second at the time the snapshot was +// taken. +func (a EWMASnapshot) Rate() float64 { return float64(a) } + +// Snapshot returns the snapshot. +func (a EWMASnapshot) Snapshot() EWMA { return a } + +// Tick panics. +func (EWMASnapshot) Tick() { + panic("Tick called on an EWMASnapshot") +} + +// Update panics. +func (EWMASnapshot) Update(int64) { + panic("Update called on an EWMASnapshot") +} + +// NilEWMA is a no-op EWMA. +type NilEWMA struct{} + +// Rate is a no-op. +func (NilEWMA) Rate() float64 { return 0.0 } + +// Snapshot is a no-op. +func (NilEWMA) Snapshot() EWMA { return NilEWMA{} } + +// Tick is a no-op. +func (NilEWMA) Tick() {} + +// Update is a no-op. +func (NilEWMA) Update(n int64) {} + +// StandardEWMA is the standard implementation of an EWMA and tracks the number +// of uncounted events and processes them on each tick. It uses the +// sync/atomic package to manage uncounted events. +type StandardEWMA struct { + uncounted int64 // /!\ this should be the first member to ensure 64-bit alignment + alpha float64 + rate float64 + init bool + mutex sync.Mutex +} + +// Rate returns the moving average rate of events per second. +func (a *StandardEWMA) Rate() float64 { + a.mutex.Lock() + defer a.mutex.Unlock() + return a.rate * float64(1e9) +} + +// Snapshot returns a read-only copy of the EWMA. +func (a *StandardEWMA) Snapshot() EWMA { + return EWMASnapshot(a.Rate()) +} + +// Tick ticks the clock to update the moving average. It assumes it is called +// every five seconds. +func (a *StandardEWMA) Tick() { + count := atomic.LoadInt64(&a.uncounted) + atomic.AddInt64(&a.uncounted, -count) + instantRate := float64(count) / float64(5e9) + a.mutex.Lock() + defer a.mutex.Unlock() + if a.init { + a.rate += a.alpha * (instantRate - a.rate) + } else { + a.init = true + a.rate = instantRate + } +} + +// Update adds n uncounted events. +func (a *StandardEWMA) Update(n int64) { + atomic.AddInt64(&a.uncounted, n) +} diff --git a/Godeps/_workspace/src/github.com/rcrowley/go-metrics/ewma_test.go b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/ewma_test.go new file mode 100644 index 0000000000..0430fbd247 --- /dev/null +++ b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/ewma_test.go @@ -0,0 +1,225 @@ +package metrics + +import "testing" + +func BenchmarkEWMA(b *testing.B) { + a := NewEWMA1() + b.ResetTimer() + for i := 0; i < b.N; i++ { + a.Update(1) + a.Tick() + } +} + +func TestEWMA1(t *testing.T) { + a := NewEWMA1() + a.Update(3) + a.Tick() + if rate := a.Rate(); 0.6 != rate { + t.Errorf("initial a.Rate(): 0.6 != %v\n", rate) + } + elapseMinute(a) + if rate := a.Rate(); 0.22072766470286553 != rate { + t.Errorf("1 minute a.Rate(): 0.22072766470286553 != %v\n", rate) + } + elapseMinute(a) + if rate := a.Rate(); 0.08120116994196772 != rate { + t.Errorf("2 minute a.Rate(): 0.08120116994196772 != %v\n", rate) + } + elapseMinute(a) + if rate := a.Rate(); 0.029872241020718428 != rate { + t.Errorf("3 minute a.Rate(): 0.029872241020718428 != %v\n", rate) + } + elapseMinute(a) + if rate := a.Rate(); 0.01098938333324054 != rate { + t.Errorf("4 minute a.Rate(): 0.01098938333324054 != %v\n", rate) + } + elapseMinute(a) + if rate := a.Rate(); 0.004042768199451294 != rate { + t.Errorf("5 minute a.Rate(): 0.004042768199451294 != %v\n", rate) + } + elapseMinute(a) + if rate := a.Rate(); 0.0014872513059998212 != rate { + t.Errorf("6 minute a.Rate(): 0.0014872513059998212 != %v\n", rate) + } + elapseMinute(a) + if rate := a.Rate(); 0.0005471291793327122 != rate { + t.Errorf("7 minute a.Rate(): 0.0005471291793327122 != %v\n", rate) + } + elapseMinute(a) + if rate := a.Rate(); 0.00020127757674150815 != rate { + t.Errorf("8 minute a.Rate(): 0.00020127757674150815 != %v\n", rate) + } + elapseMinute(a) + if rate := a.Rate(); 7.404588245200814e-05 != rate { + t.Errorf("9 minute a.Rate(): 7.404588245200814e-05 != %v\n", rate) + } + elapseMinute(a) + if rate := a.Rate(); 2.7239957857491083e-05 != rate { + t.Errorf("10 minute a.Rate(): 2.7239957857491083e-05 != %v\n", rate) + } + elapseMinute(a) + if rate := a.Rate(); 1.0021020474147462e-05 != rate { + t.Errorf("11 minute a.Rate(): 1.0021020474147462e-05 != %v\n", rate) + } + elapseMinute(a) + if rate := a.Rate(); 3.6865274119969525e-06 != rate { + t.Errorf("12 minute a.Rate(): 3.6865274119969525e-06 != %v\n", rate) + } + elapseMinute(a) + if rate := a.Rate(); 1.3561976441886433e-06 != rate { + t.Errorf("13 minute a.Rate(): 1.3561976441886433e-06 != %v\n", rate) + } + elapseMinute(a) + if rate := a.Rate(); 4.989172314621449e-07 != rate { + t.Errorf("14 minute a.Rate(): 4.989172314621449e-07 != %v\n", rate) + } + elapseMinute(a) + if rate := a.Rate(); 1.8354139230109722e-07 != rate { + t.Errorf("15 minute a.Rate(): 1.8354139230109722e-07 != %v\n", rate) + } +} + +func TestEWMA5(t *testing.T) { + a := NewEWMA5() + a.Update(3) + a.Tick() + if rate := a.Rate(); 0.6 != rate { + t.Errorf("initial a.Rate(): 0.6 != %v\n", rate) + } + elapseMinute(a) + if rate := a.Rate(); 0.49123845184678905 != rate { + t.Errorf("1 minute a.Rate(): 0.49123845184678905 != %v\n", rate) + } + elapseMinute(a) + if rate := a.Rate(); 0.4021920276213837 != rate { + t.Errorf("2 minute a.Rate(): 0.4021920276213837 != %v\n", rate) + } + elapseMinute(a) + if rate := a.Rate(); 0.32928698165641596 != rate { + t.Errorf("3 minute a.Rate(): 0.32928698165641596 != %v\n", rate) + } + elapseMinute(a) + if rate := a.Rate(); 0.269597378470333 != rate { + t.Errorf("4 minute a.Rate(): 0.269597378470333 != %v\n", rate) + } + elapseMinute(a) + if rate := a.Rate(); 0.2207276647028654 != rate { + t.Errorf("5 minute a.Rate(): 0.2207276647028654 != %v\n", rate) + } + elapseMinute(a) + if rate := a.Rate(); 0.18071652714732128 != rate { + t.Errorf("6 minute a.Rate(): 0.18071652714732128 != %v\n", rate) + } + elapseMinute(a) + if rate := a.Rate(); 0.14795817836496392 != rate { + t.Errorf("7 minute a.Rate(): 0.14795817836496392 != %v\n", rate) + } + elapseMinute(a) + if rate := a.Rate(); 0.12113791079679326 != rate { + t.Errorf("8 minute a.Rate(): 0.12113791079679326 != %v\n", rate) + } + elapseMinute(a) + if rate := a.Rate(); 0.09917933293295193 != rate { + t.Errorf("9 minute a.Rate(): 0.09917933293295193 != %v\n", rate) + } + elapseMinute(a) + if rate := a.Rate(); 0.08120116994196763 != rate { + t.Errorf("10 minute a.Rate(): 0.08120116994196763 != %v\n", rate) + } + elapseMinute(a) + if rate := a.Rate(); 0.06648189501740036 != rate { + t.Errorf("11 minute a.Rate(): 0.06648189501740036 != %v\n", rate) + } + elapseMinute(a) + if rate := a.Rate(); 0.05443077197364752 != rate { + t.Errorf("12 minute a.Rate(): 0.05443077197364752 != %v\n", rate) + } + elapseMinute(a) + if rate := a.Rate(); 0.04456414692860035 != rate { + t.Errorf("13 minute a.Rate(): 0.04456414692860035 != %v\n", rate) + } + elapseMinute(a) + if rate := a.Rate(); 0.03648603757513079 != rate { + t.Errorf("14 minute a.Rate(): 0.03648603757513079 != %v\n", rate) + } + elapseMinute(a) + if rate := a.Rate(); 0.0298722410207183831020718428 != rate { + t.Errorf("15 minute a.Rate(): 0.0298722410207183831020718428 != %v\n", rate) + } +} + +func TestEWMA15(t *testing.T) { + a := NewEWMA15() + a.Update(3) + a.Tick() + if rate := a.Rate(); 0.6 != rate { + t.Errorf("initial a.Rate(): 0.6 != %v\n", rate) + } + elapseMinute(a) + if rate := a.Rate(); 0.5613041910189706 != rate { + t.Errorf("1 minute a.Rate(): 0.5613041910189706 != %v\n", rate) + } + elapseMinute(a) + if rate := a.Rate(); 0.5251039914257684 != rate { + t.Errorf("2 minute a.Rate(): 0.5251039914257684 != %v\n", rate) + } + elapseMinute(a) + if rate := a.Rate(); 0.4912384518467888184678905 != rate { + t.Errorf("3 minute a.Rate(): 0.4912384518467888184678905 != %v\n", rate) + } + elapseMinute(a) + if rate := a.Rate(); 0.459557003018789 != rate { + t.Errorf("4 minute a.Rate(): 0.459557003018789 != %v\n", rate) + } + elapseMinute(a) + if rate := a.Rate(); 0.4299187863442732 != rate { + t.Errorf("5 minute a.Rate(): 0.4299187863442732 != %v\n", rate) + } + elapseMinute(a) + if rate := a.Rate(); 0.4021920276213831 != rate { + t.Errorf("6 minute a.Rate(): 0.4021920276213831 != %v\n", rate) + } + elapseMinute(a) + if rate := a.Rate(); 0.37625345116383313 != rate { + t.Errorf("7 minute a.Rate(): 0.37625345116383313 != %v\n", rate) + } + elapseMinute(a) + if rate := a.Rate(); 0.3519877317060185 != rate { + t.Errorf("8 minute a.Rate(): 0.3519877317060185 != %v\n", rate) + } + elapseMinute(a) + if rate := a.Rate(); 0.3292869816564153165641596 != rate { + t.Errorf("9 minute a.Rate(): 0.3292869816564153165641596 != %v\n", rate) + } + elapseMinute(a) + if rate := a.Rate(); 0.3080502714195546 != rate { + t.Errorf("10 minute a.Rate(): 0.3080502714195546 != %v\n", rate) + } + elapseMinute(a) + if rate := a.Rate(); 0.2881831806538789 != rate { + t.Errorf("11 minute a.Rate(): 0.2881831806538789 != %v\n", rate) + } + elapseMinute(a) + if rate := a.Rate(); 0.26959737847033216 != rate { + t.Errorf("12 minute a.Rate(): 0.26959737847033216 != %v\n", rate) + } + elapseMinute(a) + if rate := a.Rate(); 0.2522102307052083 != rate { + t.Errorf("13 minute a.Rate(): 0.2522102307052083 != %v\n", rate) + } + elapseMinute(a) + if rate := a.Rate(); 0.23594443252115815 != rate { + t.Errorf("14 minute a.Rate(): 0.23594443252115815 != %v\n", rate) + } + elapseMinute(a) + if rate := a.Rate(); 0.2207276647028646247028654470286553 != rate { + t.Errorf("15 minute a.Rate(): 0.2207276647028646247028654470286553 != %v\n", rate) + } +} + +func elapseMinute(a EWMA) { + for i := 0; i < 12; i++ { + a.Tick() + } +} diff --git a/Godeps/_workspace/src/github.com/rcrowley/go-metrics/gauge.go b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/gauge.go new file mode 100644 index 0000000000..807638a31b --- /dev/null +++ b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/gauge.go @@ -0,0 +1,84 @@ +package metrics + +import "sync/atomic" + +// Gauges hold an int64 value that can be set arbitrarily. +type Gauge interface { + Snapshot() Gauge + Update(int64) + Value() int64 +} + +// GetOrRegisterGauge returns an existing Gauge or constructs and registers a +// new StandardGauge. +func GetOrRegisterGauge(name string, r Registry) Gauge { + if nil == r { + r = DefaultRegistry + } + return r.GetOrRegister(name, NewGauge).(Gauge) +} + +// NewGauge constructs a new StandardGauge. +func NewGauge() Gauge { + if UseNilMetrics { + return NilGauge{} + } + return &StandardGauge{0} +} + +// NewRegisteredGauge constructs and registers a new StandardGauge. +func NewRegisteredGauge(name string, r Registry) Gauge { + c := NewGauge() + if nil == r { + r = DefaultRegistry + } + r.Register(name, c) + return c +} + +// GaugeSnapshot is a read-only copy of another Gauge. +type GaugeSnapshot int64 + +// Snapshot returns the snapshot. +func (g GaugeSnapshot) Snapshot() Gauge { return g } + +// Update panics. +func (GaugeSnapshot) Update(int64) { + panic("Update called on a GaugeSnapshot") +} + +// Value returns the value at the time the snapshot was taken. +func (g GaugeSnapshot) Value() int64 { return int64(g) } + +// NilGauge is a no-op Gauge. +type NilGauge struct{} + +// Snapshot is a no-op. +func (NilGauge) Snapshot() Gauge { return NilGauge{} } + +// Update is a no-op. +func (NilGauge) Update(v int64) {} + +// Value is a no-op. +func (NilGauge) Value() int64 { return 0 } + +// StandardGauge is the standard implementation of a Gauge and uses the +// sync/atomic package to manage a single int64 value. +type StandardGauge struct { + value int64 +} + +// Snapshot returns a read-only copy of the gauge. +func (g *StandardGauge) Snapshot() Gauge { + return GaugeSnapshot(g.Value()) +} + +// Update updates the gauge's value. +func (g *StandardGauge) Update(v int64) { + atomic.StoreInt64(&g.value, v) +} + +// Value returns the gauge's current value. +func (g *StandardGauge) Value() int64 { + return atomic.LoadInt64(&g.value) +} diff --git a/Godeps/_workspace/src/github.com/rcrowley/go-metrics/gauge_float64.go b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/gauge_float64.go new file mode 100644 index 0000000000..47c3566c25 --- /dev/null +++ b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/gauge_float64.go @@ -0,0 +1,91 @@ +package metrics + +import "sync" + +// GaugeFloat64s hold a float64 value that can be set arbitrarily. +type GaugeFloat64 interface { + Snapshot() GaugeFloat64 + Update(float64) + Value() float64 +} + +// GetOrRegisterGaugeFloat64 returns an existing GaugeFloat64 or constructs and registers a +// new StandardGaugeFloat64. +func GetOrRegisterGaugeFloat64(name string, r Registry) GaugeFloat64 { + if nil == r { + r = DefaultRegistry + } + return r.GetOrRegister(name, NewGaugeFloat64()).(GaugeFloat64) +} + +// NewGaugeFloat64 constructs a new StandardGaugeFloat64. +func NewGaugeFloat64() GaugeFloat64 { + if UseNilMetrics { + return NilGaugeFloat64{} + } + return &StandardGaugeFloat64{ + value: 0.0, + } +} + +// NewRegisteredGaugeFloat64 constructs and registers a new StandardGaugeFloat64. +func NewRegisteredGaugeFloat64(name string, r Registry) GaugeFloat64 { + c := NewGaugeFloat64() + if nil == r { + r = DefaultRegistry + } + r.Register(name, c) + return c +} + +// GaugeFloat64Snapshot is a read-only copy of another GaugeFloat64. +type GaugeFloat64Snapshot float64 + +// Snapshot returns the snapshot. +func (g GaugeFloat64Snapshot) Snapshot() GaugeFloat64 { return g } + +// Update panics. +func (GaugeFloat64Snapshot) Update(float64) { + panic("Update called on a GaugeFloat64Snapshot") +} + +// Value returns the value at the time the snapshot was taken. +func (g GaugeFloat64Snapshot) Value() float64 { return float64(g) } + +// NilGauge is a no-op Gauge. +type NilGaugeFloat64 struct{} + +// Snapshot is a no-op. +func (NilGaugeFloat64) Snapshot() GaugeFloat64 { return NilGaugeFloat64{} } + +// Update is a no-op. +func (NilGaugeFloat64) Update(v float64) {} + +// Value is a no-op. +func (NilGaugeFloat64) Value() float64 { return 0.0 } + +// StandardGaugeFloat64 is the standard implementation of a GaugeFloat64 and uses +// sync.Mutex to manage a single float64 value. +type StandardGaugeFloat64 struct { + mutex sync.Mutex + value float64 +} + +// Snapshot returns a read-only copy of the gauge. +func (g *StandardGaugeFloat64) Snapshot() GaugeFloat64 { + return GaugeFloat64Snapshot(g.Value()) +} + +// Update updates the gauge's value. +func (g *StandardGaugeFloat64) Update(v float64) { + g.mutex.Lock() + defer g.mutex.Unlock() + g.value = v +} + +// Value returns the gauge's current value. +func (g *StandardGaugeFloat64) Value() float64 { + g.mutex.Lock() + defer g.mutex.Unlock() + return g.value +} diff --git a/Godeps/_workspace/src/github.com/rcrowley/go-metrics/gauge_float64_test.go b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/gauge_float64_test.go new file mode 100644 index 0000000000..5d0aae271b --- /dev/null +++ b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/gauge_float64_test.go @@ -0,0 +1,38 @@ +package metrics + +import "testing" + +func BenchmarkGuageFloat64(b *testing.B) { + g := NewGaugeFloat64() + b.ResetTimer() + for i := 0; i < b.N; i++ { + g.Update(float64(i)) + } +} + +func TestGaugeFloat64(t *testing.T) { + g := NewGaugeFloat64() + g.Update(float64(47.0)) + if v := g.Value(); float64(47.0) != v { + t.Errorf("g.Value(): 47.0 != %v\n", v) + } +} + +func TestGaugeFloat64Snapshot(t *testing.T) { + g := NewGaugeFloat64() + g.Update(float64(47.0)) + snapshot := g.Snapshot() + g.Update(float64(0)) + if v := snapshot.Value(); float64(47.0) != v { + t.Errorf("g.Value(): 47.0 != %v\n", v) + } +} + +func TestGetOrRegisterGaugeFloat64(t *testing.T) { + r := NewRegistry() + NewRegisteredGaugeFloat64("foo", r).Update(float64(47.0)) + t.Logf("registry: %v", r) + if g := GetOrRegisterGaugeFloat64("foo", r); float64(47.0) != g.Value() { + t.Fatal(g) + } +} diff --git a/Godeps/_workspace/src/github.com/rcrowley/go-metrics/gauge_test.go b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/gauge_test.go new file mode 100644 index 0000000000..5084962918 --- /dev/null +++ b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/gauge_test.go @@ -0,0 +1,37 @@ +package metrics + +import "testing" + +func BenchmarkGuage(b *testing.B) { + g := NewGauge() + b.ResetTimer() + for i := 0; i < b.N; i++ { + g.Update(int64(i)) + } +} + +func TestGauge(t *testing.T) { + g := NewGauge() + g.Update(int64(47)) + if v := g.Value(); 47 != v { + t.Errorf("g.Value(): 47 != %v\n", v) + } +} + +func TestGaugeSnapshot(t *testing.T) { + g := NewGauge() + g.Update(int64(47)) + snapshot := g.Snapshot() + g.Update(int64(0)) + if v := snapshot.Value(); 47 != v { + t.Errorf("g.Value(): 47 != %v\n", v) + } +} + +func TestGetOrRegisterGauge(t *testing.T) { + r := NewRegistry() + NewRegisteredGauge("foo", r).Update(47) + if g := GetOrRegisterGauge("foo", r); 47 != g.Value() { + t.Fatal(g) + } +} diff --git a/Godeps/_workspace/src/github.com/rcrowley/go-metrics/graphite.go b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/graphite.go new file mode 100644 index 0000000000..604b26da05 --- /dev/null +++ b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/graphite.go @@ -0,0 +1,111 @@ +package metrics + +import ( + "bufio" + "fmt" + "log" + "net" + "strconv" + "strings" + "time" +) + +// GraphiteConfig provides a container with configuration parameters for +// the Graphite exporter +type GraphiteConfig struct { + Addr *net.TCPAddr // Network address to connect to + Registry Registry // Registry to be exported + FlushInterval time.Duration // Flush interval + DurationUnit time.Duration // Time conversion unit for durations + Prefix string // Prefix to be prepended to metric names + Percentiles []float64 // Percentiles to export from timers and histograms +} + +// Graphite is a blocking exporter function which reports metrics in r +// to a graphite server located at addr, flushing them every d duration +// and prepending metric names with prefix. +func Graphite(r Registry, d time.Duration, prefix string, addr *net.TCPAddr) { + GraphiteWithConfig(GraphiteConfig{ + Addr: addr, + Registry: r, + FlushInterval: d, + DurationUnit: time.Nanosecond, + Prefix: prefix, + Percentiles: []float64{0.5, 0.75, 0.95, 0.99, 0.999}, + }) +} + +// GraphiteWithConfig is a blocking exporter function just like Graphite, +// but it takes a GraphiteConfig instead. +func GraphiteWithConfig(c GraphiteConfig) { + for _ = range time.Tick(c.FlushInterval) { + if err := graphite(&c); nil != err { + log.Println(err) + } + } +} + +// GraphiteOnce performs a single submission to Graphite, returning a +// non-nil error on failed connections. This can be used in a loop +// similar to GraphiteWithConfig for custom error handling. +func GraphiteOnce(c GraphiteConfig) error { + return graphite(&c) +} + +func graphite(c *GraphiteConfig) error { + now := time.Now().Unix() + du := float64(c.DurationUnit) + conn, err := net.DialTCP("tcp", nil, c.Addr) + if nil != err { + return err + } + defer conn.Close() + w := bufio.NewWriter(conn) + c.Registry.Each(func(name string, i interface{}) { + switch metric := i.(type) { + case Counter: + fmt.Fprintf(w, "%s.%s.count %d %d\n", c.Prefix, name, metric.Count(), now) + case Gauge: + fmt.Fprintf(w, "%s.%s.value %d %d\n", c.Prefix, name, metric.Value(), now) + case GaugeFloat64: + fmt.Fprintf(w, "%s.%s.value %f %d\n", c.Prefix, name, metric.Value(), now) + case Histogram: + h := metric.Snapshot() + ps := h.Percentiles(c.Percentiles) + fmt.Fprintf(w, "%s.%s.count %d %d\n", c.Prefix, name, h.Count(), now) + fmt.Fprintf(w, "%s.%s.min %d %d\n", c.Prefix, name, h.Min(), now) + fmt.Fprintf(w, "%s.%s.max %d %d\n", c.Prefix, name, h.Max(), now) + fmt.Fprintf(w, "%s.%s.mean %.2f %d\n", c.Prefix, name, h.Mean(), now) + fmt.Fprintf(w, "%s.%s.std-dev %.2f %d\n", c.Prefix, name, h.StdDev(), now) + for psIdx, psKey := range c.Percentiles { + key := strings.Replace(strconv.FormatFloat(psKey*100.0, 'f', -1, 64), ".", "", 1) + fmt.Fprintf(w, "%s.%s.%s-percentile %.2f %d\n", c.Prefix, name, key, ps[psIdx], now) + } + case Meter: + m := metric.Snapshot() + fmt.Fprintf(w, "%s.%s.count %d %d\n", c.Prefix, name, m.Count(), now) + fmt.Fprintf(w, "%s.%s.one-minute %.2f %d\n", c.Prefix, name, m.Rate1(), now) + fmt.Fprintf(w, "%s.%s.five-minute %.2f %d\n", c.Prefix, name, m.Rate5(), now) + fmt.Fprintf(w, "%s.%s.fifteen-minute %.2f %d\n", c.Prefix, name, m.Rate15(), now) + fmt.Fprintf(w, "%s.%s.mean %.2f %d\n", c.Prefix, name, m.RateMean(), now) + case Timer: + t := metric.Snapshot() + ps := t.Percentiles(c.Percentiles) + fmt.Fprintf(w, "%s.%s.count %d %d\n", c.Prefix, name, t.Count(), now) + fmt.Fprintf(w, "%s.%s.min %d %d\n", c.Prefix, name, t.Min()/int64(du), now) + fmt.Fprintf(w, "%s.%s.max %d %d\n", c.Prefix, name, t.Max()/int64(du), now) + fmt.Fprintf(w, "%s.%s.mean %.2f %d\n", c.Prefix, name, t.Mean()/du, now) + fmt.Fprintf(w, "%s.%s.std-dev %.2f %d\n", c.Prefix, name, t.StdDev()/du, now) + for psIdx, psKey := range c.Percentiles { + key := strings.Replace(strconv.FormatFloat(psKey*100.0, 'f', -1, 64), ".", "", 1) + fmt.Fprintf(w, "%s.%s.%s-percentile %.2f %d\n", c.Prefix, name, key, ps[psIdx], now) + } + fmt.Fprintf(w, "%s.%s.one-minute %.2f %d\n", c.Prefix, name, t.Rate1(), now) + fmt.Fprintf(w, "%s.%s.five-minute %.2f %d\n", c.Prefix, name, t.Rate5(), now) + fmt.Fprintf(w, "%s.%s.fifteen-minute %.2f %d\n", c.Prefix, name, t.Rate15(), now) + fmt.Fprintf(w, "%s.%s.mean-rate %.2f %d\n", c.Prefix, name, t.RateMean(), now) + } + w.Flush() + }) + return nil +} diff --git a/Godeps/_workspace/src/github.com/rcrowley/go-metrics/graphite_test.go b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/graphite_test.go new file mode 100644 index 0000000000..b49dc4bb56 --- /dev/null +++ b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/graphite_test.go @@ -0,0 +1,22 @@ +package metrics + +import ( + "net" + "time" +) + +func ExampleGraphite() { + addr, _ := net.ResolveTCPAddr("net", ":2003") + go Graphite(DefaultRegistry, 1*time.Second, "some.prefix", addr) +} + +func ExampleGraphiteWithConfig() { + addr, _ := net.ResolveTCPAddr("net", ":2003") + go GraphiteWithConfig(GraphiteConfig{ + Addr: addr, + Registry: DefaultRegistry, + FlushInterval: 1 * time.Second, + DurationUnit: time.Millisecond, + Percentiles: []float64{ 0.5, 0.75, 0.99, 0.999 }, + }) +} diff --git a/Godeps/_workspace/src/github.com/rcrowley/go-metrics/healthcheck.go b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/healthcheck.go new file mode 100644 index 0000000000..445131caee --- /dev/null +++ b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/healthcheck.go @@ -0,0 +1,61 @@ +package metrics + +// Healthchecks hold an error value describing an arbitrary up/down status. +type Healthcheck interface { + Check() + Error() error + Healthy() + Unhealthy(error) +} + +// NewHealthcheck constructs a new Healthcheck which will use the given +// function to update its status. +func NewHealthcheck(f func(Healthcheck)) Healthcheck { + if UseNilMetrics { + return NilHealthcheck{} + } + return &StandardHealthcheck{nil, f} +} + +// NilHealthcheck is a no-op. +type NilHealthcheck struct{} + +// Check is a no-op. +func (NilHealthcheck) Check() {} + +// Error is a no-op. +func (NilHealthcheck) Error() error { return nil } + +// Healthy is a no-op. +func (NilHealthcheck) Healthy() {} + +// Unhealthy is a no-op. +func (NilHealthcheck) Unhealthy(error) {} + +// StandardHealthcheck is the standard implementation of a Healthcheck and +// stores the status and a function to call to update the status. +type StandardHealthcheck struct { + err error + f func(Healthcheck) +} + +// Check runs the healthcheck function to update the healthcheck's status. +func (h *StandardHealthcheck) Check() { + h.f(h) +} + +// Error returns the healthcheck's status, which will be nil if it is healthy. +func (h *StandardHealthcheck) Error() error { + return h.err +} + +// Healthy marks the healthcheck as healthy. +func (h *StandardHealthcheck) Healthy() { + h.err = nil +} + +// Unhealthy marks the healthcheck as unhealthy. The error is stored and +// may be retrieved by the Error method. +func (h *StandardHealthcheck) Unhealthy(err error) { + h.err = err +} diff --git a/Godeps/_workspace/src/github.com/rcrowley/go-metrics/histogram.go b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/histogram.go new file mode 100644 index 0000000000..dbc837fe4d --- /dev/null +++ b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/histogram.go @@ -0,0 +1,202 @@ +package metrics + +// Histograms calculate distribution statistics from a series of int64 values. +type Histogram interface { + Clear() + Count() int64 + Max() int64 + Mean() float64 + Min() int64 + Percentile(float64) float64 + Percentiles([]float64) []float64 + Sample() Sample + Snapshot() Histogram + StdDev() float64 + Sum() int64 + Update(int64) + Variance() float64 +} + +// GetOrRegisterHistogram returns an existing Histogram or constructs and +// registers a new StandardHistogram. +func GetOrRegisterHistogram(name string, r Registry, s Sample) Histogram { + if nil == r { + r = DefaultRegistry + } + return r.GetOrRegister(name, func() Histogram { return NewHistogram(s) }).(Histogram) +} + +// NewHistogram constructs a new StandardHistogram from a Sample. +func NewHistogram(s Sample) Histogram { + if UseNilMetrics { + return NilHistogram{} + } + return &StandardHistogram{sample: s} +} + +// NewRegisteredHistogram constructs and registers a new StandardHistogram from +// a Sample. +func NewRegisteredHistogram(name string, r Registry, s Sample) Histogram { + c := NewHistogram(s) + if nil == r { + r = DefaultRegistry + } + r.Register(name, c) + return c +} + +// HistogramSnapshot is a read-only copy of another Histogram. +type HistogramSnapshot struct { + sample *SampleSnapshot +} + +// Clear panics. +func (*HistogramSnapshot) Clear() { + panic("Clear called on a HistogramSnapshot") +} + +// Count returns the number of samples recorded at the time the snapshot was +// taken. +func (h *HistogramSnapshot) Count() int64 { return h.sample.Count() } + +// Max returns the maximum value in the sample at the time the snapshot was +// taken. +func (h *HistogramSnapshot) Max() int64 { return h.sample.Max() } + +// Mean returns the mean of the values in the sample at the time the snapshot +// was taken. +func (h *HistogramSnapshot) Mean() float64 { return h.sample.Mean() } + +// Min returns the minimum value in the sample at the time the snapshot was +// taken. +func (h *HistogramSnapshot) Min() int64 { return h.sample.Min() } + +// Percentile returns an arbitrary percentile of values in the sample at the +// time the snapshot was taken. +func (h *HistogramSnapshot) Percentile(p float64) float64 { + return h.sample.Percentile(p) +} + +// Percentiles returns a slice of arbitrary percentiles of values in the sample +// at the time the snapshot was taken. +func (h *HistogramSnapshot) Percentiles(ps []float64) []float64 { + return h.sample.Percentiles(ps) +} + +// Sample returns the Sample underlying the histogram. +func (h *HistogramSnapshot) Sample() Sample { return h.sample } + +// Snapshot returns the snapshot. +func (h *HistogramSnapshot) Snapshot() Histogram { return h } + +// StdDev returns the standard deviation of the values in the sample at the +// time the snapshot was taken. +func (h *HistogramSnapshot) StdDev() float64 { return h.sample.StdDev() } + +// Sum returns the sum in the sample at the time the snapshot was taken. +func (h *HistogramSnapshot) Sum() int64 { return h.sample.Sum() } + +// Update panics. +func (*HistogramSnapshot) Update(int64) { + panic("Update called on a HistogramSnapshot") +} + +// Variance returns the variance of inputs at the time the snapshot was taken. +func (h *HistogramSnapshot) Variance() float64 { return h.sample.Variance() } + +// NilHistogram is a no-op Histogram. +type NilHistogram struct{} + +// Clear is a no-op. +func (NilHistogram) Clear() {} + +// Count is a no-op. +func (NilHistogram) Count() int64 { return 0 } + +// Max is a no-op. +func (NilHistogram) Max() int64 { return 0 } + +// Mean is a no-op. +func (NilHistogram) Mean() float64 { return 0.0 } + +// Min is a no-op. +func (NilHistogram) Min() int64 { return 0 } + +// Percentile is a no-op. +func (NilHistogram) Percentile(p float64) float64 { return 0.0 } + +// Percentiles is a no-op. +func (NilHistogram) Percentiles(ps []float64) []float64 { + return make([]float64, len(ps)) +} + +// Sample is a no-op. +func (NilHistogram) Sample() Sample { return NilSample{} } + +// Snapshot is a no-op. +func (NilHistogram) Snapshot() Histogram { return NilHistogram{} } + +// StdDev is a no-op. +func (NilHistogram) StdDev() float64 { return 0.0 } + +// Sum is a no-op. +func (NilHistogram) Sum() int64 { return 0 } + +// Update is a no-op. +func (NilHistogram) Update(v int64) {} + +// Variance is a no-op. +func (NilHistogram) Variance() float64 { return 0.0 } + +// StandardHistogram is the standard implementation of a Histogram and uses a +// Sample to bound its memory use. +type StandardHistogram struct { + sample Sample +} + +// Clear clears the histogram and its sample. +func (h *StandardHistogram) Clear() { h.sample.Clear() } + +// Count returns the number of samples recorded since the histogram was last +// cleared. +func (h *StandardHistogram) Count() int64 { return h.sample.Count() } + +// Max returns the maximum value in the sample. +func (h *StandardHistogram) Max() int64 { return h.sample.Max() } + +// Mean returns the mean of the values in the sample. +func (h *StandardHistogram) Mean() float64 { return h.sample.Mean() } + +// Min returns the minimum value in the sample. +func (h *StandardHistogram) Min() int64 { return h.sample.Min() } + +// Percentile returns an arbitrary percentile of the values in the sample. +func (h *StandardHistogram) Percentile(p float64) float64 { + return h.sample.Percentile(p) +} + +// Percentiles returns a slice of arbitrary percentiles of the values in the +// sample. +func (h *StandardHistogram) Percentiles(ps []float64) []float64 { + return h.sample.Percentiles(ps) +} + +// Sample returns the Sample underlying the histogram. +func (h *StandardHistogram) Sample() Sample { return h.sample } + +// Snapshot returns a read-only copy of the histogram. +func (h *StandardHistogram) Snapshot() Histogram { + return &HistogramSnapshot{sample: h.sample.Snapshot().(*SampleSnapshot)} +} + +// StdDev returns the standard deviation of the values in the sample. +func (h *StandardHistogram) StdDev() float64 { return h.sample.StdDev() } + +// Sum returns the sum in the sample. +func (h *StandardHistogram) Sum() int64 { return h.sample.Sum() } + +// Update samples a new value. +func (h *StandardHistogram) Update(v int64) { h.sample.Update(v) } + +// Variance returns the variance of the values in the sample. +func (h *StandardHistogram) Variance() float64 { return h.sample.Variance() } diff --git a/Godeps/_workspace/src/github.com/rcrowley/go-metrics/histogram_test.go b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/histogram_test.go new file mode 100644 index 0000000000..d7f4f0171c --- /dev/null +++ b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/histogram_test.go @@ -0,0 +1,95 @@ +package metrics + +import "testing" + +func BenchmarkHistogram(b *testing.B) { + h := NewHistogram(NewUniformSample(100)) + b.ResetTimer() + for i := 0; i < b.N; i++ { + h.Update(int64(i)) + } +} + +func TestGetOrRegisterHistogram(t *testing.T) { + r := NewRegistry() + s := NewUniformSample(100) + NewRegisteredHistogram("foo", r, s).Update(47) + if h := GetOrRegisterHistogram("foo", r, s); 1 != h.Count() { + t.Fatal(h) + } +} + +func TestHistogram10000(t *testing.T) { + h := NewHistogram(NewUniformSample(100000)) + for i := 1; i <= 10000; i++ { + h.Update(int64(i)) + } + testHistogram10000(t, h) +} + +func TestHistogramEmpty(t *testing.T) { + h := NewHistogram(NewUniformSample(100)) + if count := h.Count(); 0 != count { + t.Errorf("h.Count(): 0 != %v\n", count) + } + if min := h.Min(); 0 != min { + t.Errorf("h.Min(): 0 != %v\n", min) + } + if max := h.Max(); 0 != max { + t.Errorf("h.Max(): 0 != %v\n", max) + } + if mean := h.Mean(); 0.0 != mean { + t.Errorf("h.Mean(): 0.0 != %v\n", mean) + } + if stdDev := h.StdDev(); 0.0 != stdDev { + t.Errorf("h.StdDev(): 0.0 != %v\n", stdDev) + } + ps := h.Percentiles([]float64{0.5, 0.75, 0.99}) + if 0.0 != ps[0] { + t.Errorf("median: 0.0 != %v\n", ps[0]) + } + if 0.0 != ps[1] { + t.Errorf("75th percentile: 0.0 != %v\n", ps[1]) + } + if 0.0 != ps[2] { + t.Errorf("99th percentile: 0.0 != %v\n", ps[2]) + } +} + +func TestHistogramSnapshot(t *testing.T) { + h := NewHistogram(NewUniformSample(100000)) + for i := 1; i <= 10000; i++ { + h.Update(int64(i)) + } + snapshot := h.Snapshot() + h.Update(0) + testHistogram10000(t, snapshot) +} + +func testHistogram10000(t *testing.T, h Histogram) { + if count := h.Count(); 10000 != count { + t.Errorf("h.Count(): 10000 != %v\n", count) + } + if min := h.Min(); 1 != min { + t.Errorf("h.Min(): 1 != %v\n", min) + } + if max := h.Max(); 10000 != max { + t.Errorf("h.Max(): 10000 != %v\n", max) + } + if mean := h.Mean(); 5000.5 != mean { + t.Errorf("h.Mean(): 5000.5 != %v\n", mean) + } + if stdDev := h.StdDev(); 2886.751331514372 != stdDev { + t.Errorf("h.StdDev(): 2886.751331514372 != %v\n", stdDev) + } + ps := h.Percentiles([]float64{0.5, 0.75, 0.99}) + if 5000.5 != ps[0] { + t.Errorf("median: 5000.5 != %v\n", ps[0]) + } + if 7500.75 != ps[1] { + t.Errorf("75th percentile: 7500.75 != %v\n", ps[1]) + } + if 9900.99 != ps[2] { + t.Errorf("99th percentile: 9900.99 != %v\n", ps[2]) + } +} diff --git a/Godeps/_workspace/src/github.com/rcrowley/go-metrics/influxdb/influxdb.go b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/influxdb/influxdb.go new file mode 100644 index 0000000000..0163c9b429 --- /dev/null +++ b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/influxdb/influxdb.go @@ -0,0 +1,114 @@ +package influxdb + +import ( + "fmt" + influxClient "github.com/influxdb/influxdb/client" + "github.com/rcrowley/go-metrics" + "log" + "time" +) + +type Config struct { + Host string + Database string + Username string + Password string +} + +func Influxdb(r metrics.Registry, d time.Duration, config *Config) { + client, err := influxClient.NewClient(&influxClient.ClientConfig{ + Host: config.Host, + Database: config.Database, + Username: config.Username, + Password: config.Password, + }) + if err != nil { + log.Println(err) + return + } + + for _ = range time.Tick(d) { + if err := send(r, client); err != nil { + log.Println(err) + } + } +} + +func send(r metrics.Registry, client *influxClient.Client) error { + series := []*influxClient.Series{} + + r.Each(func(name string, i interface{}) { + now := getCurrentTime() + switch metric := i.(type) { + case metrics.Counter: + series = append(series, &influxClient.Series{ + Name: fmt.Sprintf("%s.count", name), + Columns: []string{"time", "count"}, + Points: [][]interface{}{ + {now, metric.Count()}, + }, + }) + case metrics.Gauge: + series = append(series, &influxClient.Series{ + Name: fmt.Sprintf("%s.value", name), + Columns: []string{"time", "value"}, + Points: [][]interface{}{ + {now, metric.Value()}, + }, + }) + case metrics.GaugeFloat64: + series = append(series, &influxClient.Series{ + Name: fmt.Sprintf("%s.value", name), + Columns: []string{"time", "value"}, + Points: [][]interface{}{ + {now, metric.Value()}, + }, + }) + case metrics.Histogram: + h := metric.Snapshot() + ps := h.Percentiles([]float64{0.5, 0.75, 0.95, 0.99, 0.999}) + series = append(series, &influxClient.Series{ + Name: fmt.Sprintf("%s.histogram", name), + Columns: []string{"time", "count", "min", "max", "mean", "std-dev", + "50-percentile", "75-percentile", "95-percentile", + "99-percentile", "999-percentile"}, + Points: [][]interface{}{ + {now, h.Count(), h.Min(), h.Max(), h.Mean(), h.StdDev(), + ps[0], ps[1], ps[2], ps[3], ps[4]}, + }, + }) + case metrics.Meter: + m := metric.Snapshot() + series = append(series, &influxClient.Series{ + Name: fmt.Sprintf("%s.meter", name), + Columns: []string{"count", "one-minute", + "five-minute", "fifteen-minute", "mean"}, + Points: [][]interface{}{ + {m.Count(), m.Rate1(), m.Rate5(), m.Rate15(), m.RateMean()}, + }, + }) + case metrics.Timer: + h := metric.Snapshot() + ps := h.Percentiles([]float64{0.5, 0.75, 0.95, 0.99, 0.999}) + series = append(series, &influxClient.Series{ + Name: fmt.Sprintf("%s.timer", name), + Columns: []string{"count", "min", "max", "mean", "std-dev", + "50-percentile", "75-percentile", "95-percentile", + "99-percentile", "999-percentile", "one-minute", "five-minute", "fifteen-minute", "mean-rate"}, + Points: [][]interface{}{ + {h.Count(), h.Min(), h.Max(), h.Mean(), h.StdDev(), + ps[0], ps[1], ps[2], ps[3], ps[4], + h.Rate1(), h.Rate5(), h.Rate15(), h.RateMean()}, + }, + }) + } + }) + if err := client.WriteSeries(series); err != nil { + log.Println(err) + } + return nil +} + +func getCurrentTime() int64 { + return time.Now().UnixNano() / 1000000 +} diff --git a/Godeps/_workspace/src/github.com/rcrowley/go-metrics/json.go b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/json.go new file mode 100644 index 0000000000..04a9c91982 --- /dev/null +++ b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/json.go @@ -0,0 +1,83 @@ +package metrics + +import ( + "encoding/json" + "io" + "time" +) + +// MarshalJSON returns a byte slice containing a JSON representation of all +// the metrics in the Registry. +func (r StandardRegistry) MarshalJSON() ([]byte, error) { + data := make(map[string]map[string]interface{}) + r.Each(func(name string, i interface{}) { + values := make(map[string]interface{}) + switch metric := i.(type) { + case Counter: + values["count"] = metric.Count() + case Gauge: + values["value"] = metric.Value() + case GaugeFloat64: + values["value"] = metric.Value() + case Healthcheck: + values["error"] = nil + metric.Check() + if err := metric.Error(); nil != err { + values["error"] = metric.Error().Error() + } + case Histogram: + h := metric.Snapshot() + ps := h.Percentiles([]float64{0.5, 0.75, 0.95, 0.99, 0.999}) + values["count"] = h.Count() + values["min"] = h.Min() + values["max"] = h.Max() + values["mean"] = h.Mean() + values["stddev"] = h.StdDev() + values["median"] = ps[0] + values["75%"] = ps[1] + values["95%"] = ps[2] + values["99%"] = ps[3] + values["99.9%"] = ps[4] + case Meter: + m := metric.Snapshot() + values["count"] = m.Count() + values["1m.rate"] = m.Rate1() + values["5m.rate"] = m.Rate5() + values["15m.rate"] = m.Rate15() + values["mean.rate"] = m.RateMean() + case Timer: + t := metric.Snapshot() + ps := t.Percentiles([]float64{0.5, 0.75, 0.95, 0.99, 0.999}) + values["count"] = t.Count() + values["min"] = t.Min() + values["max"] = t.Max() + values["mean"] = t.Mean() + values["stddev"] = t.StdDev() + values["median"] = ps[0] + values["75%"] = ps[1] + values["95%"] = ps[2] + values["99%"] = ps[3] + values["99.9%"] = ps[4] + values["1m.rate"] = t.Rate1() + values["5m.rate"] = t.Rate5() + values["15m.rate"] = t.Rate15() + values["mean.rate"] = t.RateMean() + } + data[name] = values + }) + return json.Marshal(data) +} + +// WriteJSON writes metrics from the given registry periodically to the +// specified io.Writer as JSON. +func WriteJSON(r Registry, d time.Duration, w io.Writer) { + for _ = range time.Tick(d) { + WriteJSONOnce(r, w) + } +} + +// WriteJSONOnce writes metrics from the given registry to the specified +// io.Writer as JSON. +func WriteJSONOnce(r Registry, w io.Writer) { + json.NewEncoder(w).Encode(r) +} diff --git a/Godeps/_workspace/src/github.com/rcrowley/go-metrics/json_test.go b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/json_test.go new file mode 100644 index 0000000000..cf70051f7a --- /dev/null +++ b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/json_test.go @@ -0,0 +1,28 @@ +package metrics + +import ( + "bytes" + "encoding/json" + "testing" +) + +func TestRegistryMarshallJSON(t *testing.T) { + b := &bytes.Buffer{} + enc := json.NewEncoder(b) + r := NewRegistry() + r.Register("counter", NewCounter()) + enc.Encode(r) + if s := b.String(); "{\"counter\":{\"count\":0}}\n" != s { + t.Fatalf(s) + } +} + +func TestRegistryWriteJSONOnce(t *testing.T) { + r := NewRegistry() + r.Register("counter", NewCounter()) + b := &bytes.Buffer{} + WriteJSONOnce(r, b) + if s := b.String(); s != "{\"counter\":{\"count\":0}}\n" { + t.Fail() + } +} diff --git a/Godeps/_workspace/src/github.com/rcrowley/go-metrics/librato/client.go b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/librato/client.go new file mode 100644 index 0000000000..8c0c850e38 --- /dev/null +++ b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/librato/client.go @@ -0,0 +1,102 @@ +package librato + +import ( + "bytes" + "encoding/json" + "fmt" + "io/ioutil" + "net/http" +) + +const Operations = "operations" +const OperationsShort = "ops" + +type LibratoClient struct { + Email, Token string +} + +// property strings +const ( + // display attributes + Color = "color" + DisplayMax = "display_max" + DisplayMin = "display_min" + DisplayUnitsLong = "display_units_long" + DisplayUnitsShort = "display_units_short" + DisplayStacked = "display_stacked" + DisplayTransform = "display_transform" + // special gauge display attributes + SummarizeFunction = "summarize_function" + Aggregate = "aggregate" + + // metric keys + Name = "name" + Period = "period" + Description = "description" + DisplayName = "display_name" + Attributes = "attributes" + + // measurement keys + MeasureTime = "measure_time" + Source = "source" + Value = "value" + + // special gauge keys + Count = "count" + Sum = "sum" + Max = "max" + Min = "min" + SumSquares = "sum_squares" + + // batch keys + Counters = "counters" + Gauges = "gauges" + + MetricsPostUrl = "https://metrics-api.librato.com/v1/metrics" +) + +type Measurement map[string]interface{} +type Metric map[string]interface{} + +type Batch struct { + Gauges []Measurement `json:"gauges,omitempty"` + Counters []Measurement `json:"counters,omitempty"` + MeasureTime int64 `json:"measure_time"` + Source string `json:"source"` +} + +func (self *LibratoClient) PostMetrics(batch Batch) (err error) { + var ( + js []byte + req *http.Request + resp *http.Response + ) + + if len(batch.Counters) == 0 && len(batch.Gauges) == 0 { + return nil + } + + if js, err = json.Marshal(batch); err != nil { + return + } + + if req, err = http.NewRequest("POST", MetricsPostUrl, bytes.NewBuffer(js)); err != nil { + return + } + + req.Header.Set("Content-Type", "application/json") + req.SetBasicAuth(self.Email, self.Token) + + if resp, err = http.DefaultClient.Do(req); err != nil { + return + } + + if resp.StatusCode != http.StatusOK { + var body []byte + if body, err = ioutil.ReadAll(resp.Body); err != nil { + body = []byte(fmt.Sprintf("(could not fetch response body for error: %s)", err)) + } + err = fmt.Errorf("Unable to post to Librato: %d %s %s", resp.StatusCode, resp.Status, string(body)) + } + return +} diff --git a/Godeps/_workspace/src/github.com/rcrowley/go-metrics/librato/librato.go b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/librato/librato.go new file mode 100644 index 0000000000..dfaae2f286 --- /dev/null +++ b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/librato/librato.go @@ -0,0 +1,230 @@ +package librato + +import ( + "fmt" + "log" + "math" + "regexp" + "time" + + "github.com/rcrowley/go-metrics" +) + +// a regexp for extracting the unit from time.Duration.String +var unitRegexp = regexp.MustCompile("[^\\d]+$") + +// a helper that turns a time.Duration into librato display attributes for timer metrics +func translateTimerAttributes(d time.Duration) (attrs map[string]interface{}) { + attrs = make(map[string]interface{}) + attrs[DisplayTransform] = fmt.Sprintf("x/%d", int64(d)) + attrs[DisplayUnitsShort] = string(unitRegexp.Find([]byte(d.String()))) + return +} + +type Reporter struct { + Email, Token string + Source string + Interval time.Duration + Registry metrics.Registry + Percentiles []float64 // percentiles to report on histogram metrics + TimerAttributes map[string]interface{} // units in which timers will be displayed + intervalSec int64 +} + +func NewReporter(r metrics.Registry, d time.Duration, e string, t string, s string, p []float64, u time.Duration) *Reporter { + return &Reporter{e, t, s, d, r, p, translateTimerAttributes(u), int64(d / time.Second)} +} + +func Librato(r metrics.Registry, d time.Duration, e string, t string, s string, p []float64, u time.Duration) { + NewReporter(r, d, e, t, s, p, u).Run() +} + +func (self *Reporter) Run() { + ticker := time.Tick(self.Interval) + metricsApi := &LibratoClient{self.Email, self.Token} + for now := range ticker { + var metrics Batch + var err error + if metrics, err = self.BuildRequest(now, self.Registry); err != nil { + log.Printf("ERROR constructing librato request body %s", err) + continue + } + if err := metricsApi.PostMetrics(metrics); err != nil { + log.Printf("ERROR sending metrics to librato %s", err) + continue + } + } +} + +// calculate sum of squares from data provided by metrics.Histogram +// see http://en.wikipedia.org/wiki/Standard_deviation#Rapid_calculation_methods +func sumSquares(s metrics.Sample) float64 { + count := float64(s.Count()) + sumSquared := math.Pow(count*s.Mean(), 2) + sumSquares := math.Pow(count*s.StdDev(), 2) + sumSquared/count + if math.IsNaN(sumSquares) { + return 0.0 + } + return sumSquares +} +func sumSquaresTimer(t metrics.Timer) float64 { + count := float64(t.Count()) + sumSquared := math.Pow(count*t.Mean(), 2) + sumSquares := math.Pow(count*t.StdDev(), 2) + sumSquared/count + if math.IsNaN(sumSquares) { + return 0.0 + } + return sumSquares +} + +func (self *Reporter) BuildRequest(now time.Time, r metrics.Registry) (snapshot Batch, err error) { + snapshot = Batch{ + // coerce timestamps to a stepping fn so that they line up in Librato graphs + MeasureTime: (now.Unix() / self.intervalSec) * self.intervalSec, + Source: self.Source, + } + snapshot.Gauges = make([]Measurement, 0) + snapshot.Counters = make([]Measurement, 0) + histogramGaugeCount := 1 + len(self.Percentiles) + r.Each(func(name string, metric interface{}) { + measurement := Measurement{} + measurement[Period] = self.Interval.Seconds() + switch m := metric.(type) { + case metrics.Counter: + if m.Count() > 0 { + measurement[Name] = fmt.Sprintf("%s.%s", name, "count") + measurement[Value] = float64(m.Count()) + measurement[Attributes] = map[string]interface{}{ + DisplayUnitsLong: Operations, + DisplayUnitsShort: OperationsShort, + DisplayMin: "0", + } + snapshot.Counters = append(snapshot.Counters, measurement) + } + case metrics.Gauge: + measurement[Name] = name + measurement[Value] = float64(m.Value()) + snapshot.Gauges = append(snapshot.Gauges, measurement) + case metrics.GaugeFloat64: + measurement[Name] = name + measurement[Value] = float64(m.Value()) + snapshot.Gauges = append(snapshot.Gauges, measurement) + case metrics.Histogram: + if m.Count() > 0 { + gauges := make([]Measurement, histogramGaugeCount, histogramGaugeCount) + s := m.Sample() + measurement[Name] = fmt.Sprintf("%s.%s", name, "hist") + measurement[Count] = uint64(s.Count()) + measurement[Max] = float64(s.Max()) + measurement[Min] = float64(s.Min()) + measurement[Sum] = float64(s.Sum()) + measurement[SumSquares] = sumSquares(s) + gauges[0] = measurement + for i, p := range self.Percentiles { + gauges[i+1] = Measurement{ + Name: fmt.Sprintf("%s.%.2f", measurement[Name], p), + Value: s.Percentile(p), + Period: measurement[Period], + } + } + snapshot.Gauges = append(snapshot.Gauges, gauges...) + } + case metrics.Meter: + measurement[Name] = name + measurement[Value] = float64(m.Count()) + snapshot.Counters = append(snapshot.Counters, measurement) + snapshot.Gauges = append(snapshot.Gauges, + Measurement{ + Name: fmt.Sprintf("%s.%s", name, "1min"), + Value: m.Rate1(), + Period: int64(self.Interval.Seconds()), + Attributes: map[string]interface{}{ + DisplayUnitsLong: Operations, + DisplayUnitsShort: OperationsShort, + DisplayMin: "0", + }, + }, + Measurement{ + Name: fmt.Sprintf("%s.%s", name, "5min"), + Value: m.Rate5(), + Period: int64(self.Interval.Seconds()), + Attributes: map[string]interface{}{ + DisplayUnitsLong: Operations, + DisplayUnitsShort: OperationsShort, + DisplayMin: "0", + }, + }, + Measurement{ + Name: fmt.Sprintf("%s.%s", name, "15min"), + Value: m.Rate15(), + Period: int64(self.Interval.Seconds()), + Attributes: map[string]interface{}{ + DisplayUnitsLong: Operations, + DisplayUnitsShort: OperationsShort, + DisplayMin: "0", + }, + }, + ) + case metrics.Timer: + measurement[Name] = name + measurement[Value] = float64(m.Count()) + snapshot.Counters = append(snapshot.Counters, measurement) + if m.Count() > 0 { + libratoName := fmt.Sprintf("%s.%s", name, "timer.mean") + gauges := make([]Measurement, histogramGaugeCount, histogramGaugeCount) + gauges[0] = Measurement{ + Name: libratoName, + Count: uint64(m.Count()), + Sum: m.Mean() * float64(m.Count()), + Max: float64(m.Max()), + Min: float64(m.Min()), + SumSquares: sumSquaresTimer(m), + Period: int64(self.Interval.Seconds()), + Attributes: self.TimerAttributes, + } + for i, p := range self.Percentiles { + gauges[i+1] = Measurement{ + Name: fmt.Sprintf("%s.timer.%2.0f", name, p*100), + Value: m.Percentile(p), + Period: int64(self.Interval.Seconds()), + Attributes: self.TimerAttributes, + } + } + snapshot.Gauges = append(snapshot.Gauges, gauges...) + snapshot.Gauges = append(snapshot.Gauges, + Measurement{ + Name: fmt.Sprintf("%s.%s", name, "rate.1min"), + Value: m.Rate1(), + Period: int64(self.Interval.Seconds()), + Attributes: map[string]interface{}{ + DisplayUnitsLong: Operations, + DisplayUnitsShort: OperationsShort, + DisplayMin: "0", + }, + }, + Measurement{ + Name: fmt.Sprintf("%s.%s", name, "rate.5min"), + Value: m.Rate5(), + Period: int64(self.Interval.Seconds()), + Attributes: map[string]interface{}{ + DisplayUnitsLong: Operations, + DisplayUnitsShort: OperationsShort, + DisplayMin: "0", + }, + }, + Measurement{ + Name: fmt.Sprintf("%s.%s", name, "rate.15min"), + Value: m.Rate15(), + Period: int64(self.Interval.Seconds()), + Attributes: map[string]interface{}{ + DisplayUnitsLong: Operations, + DisplayUnitsShort: OperationsShort, + DisplayMin: "0", + }, + }, + ) + } + } + }) + return +} diff --git a/Godeps/_workspace/src/github.com/rcrowley/go-metrics/log.go b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/log.go new file mode 100644 index 0000000000..278a8a441c --- /dev/null +++ b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/log.go @@ -0,0 +1,70 @@ +package metrics + +import ( + "log" + "time" +) + +// Output each metric in the given registry periodically using the given +// logger. +func Log(r Registry, d time.Duration, l *log.Logger) { + for _ = range time.Tick(d) { + r.Each(func(name string, i interface{}) { + switch metric := i.(type) { + case Counter: + l.Printf("counter %s\n", name) + l.Printf(" count: %9d\n", metric.Count()) + case Gauge: + l.Printf("gauge %s\n", name) + l.Printf(" value: %9d\n", metric.Value()) + case GaugeFloat64: + l.Printf("gauge %s\n", name) + l.Printf(" value: %f\n", metric.Value()) + case Healthcheck: + metric.Check() + l.Printf("healthcheck %s\n", name) + l.Printf(" error: %v\n", metric.Error()) + case Histogram: + h := metric.Snapshot() + ps := h.Percentiles([]float64{0.5, 0.75, 0.95, 0.99, 0.999}) + l.Printf("histogram %s\n", name) + l.Printf(" count: %9d\n", h.Count()) + l.Printf(" min: %9d\n", h.Min()) + l.Printf(" max: %9d\n", h.Max()) + l.Printf(" mean: %12.2f\n", h.Mean()) + l.Printf(" stddev: %12.2f\n", h.StdDev()) + l.Printf(" median: %12.2f\n", ps[0]) + l.Printf(" 75%%: %12.2f\n", ps[1]) + l.Printf(" 95%%: %12.2f\n", ps[2]) + l.Printf(" 99%%: %12.2f\n", ps[3]) + l.Printf(" 99.9%%: %12.2f\n", ps[4]) + case Meter: + m := metric.Snapshot() + l.Printf("meter %s\n", name) + l.Printf(" count: %9d\n", m.Count()) + l.Printf(" 1-min rate: %12.2f\n", m.Rate1()) + l.Printf(" 5-min rate: %12.2f\n", m.Rate5()) + l.Printf(" 15-min rate: %12.2f\n", m.Rate15()) + l.Printf(" mean rate: %12.2f\n", m.RateMean()) + case Timer: + t := metric.Snapshot() + ps := t.Percentiles([]float64{0.5, 0.75, 0.95, 0.99, 0.999}) + l.Printf("timer %s\n", name) + l.Printf(" count: %9d\n", t.Count()) + l.Printf(" min: %9d\n", t.Min()) + l.Printf(" max: %9d\n", t.Max()) + l.Printf(" mean: %12.2f\n", t.Mean()) + l.Printf(" stddev: %12.2f\n", t.StdDev()) + l.Printf(" median: %12.2f\n", ps[0]) + l.Printf(" 75%%: %12.2f\n", ps[1]) + l.Printf(" 95%%: %12.2f\n", ps[2]) + l.Printf(" 99%%: %12.2f\n", ps[3]) + l.Printf(" 99.9%%: %12.2f\n", ps[4]) + l.Printf(" 1-min rate: %12.2f\n", t.Rate1()) + l.Printf(" 5-min rate: %12.2f\n", t.Rate5()) + l.Printf(" 15-min rate: %12.2f\n", t.Rate15()) + l.Printf(" mean rate: %12.2f\n", t.RateMean()) + } + }) + } +} diff --git a/Godeps/_workspace/src/github.com/rcrowley/go-metrics/memory.md b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/memory.md new file mode 100644 index 0000000000..47454f54b6 --- /dev/null +++ b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/memory.md @@ -0,0 +1,285 @@ +Memory usage +============ + +(Highly unscientific.) + +Command used to gather static memory usage: + +```sh +grep ^Vm "/proc/$(ps fax | grep [m]etrics-bench | awk '{print $1}')/status" +``` + +Program used to gather baseline memory usage: + +```go +package main + +import "time" + +func main() { + time.Sleep(600e9) +} +``` + +Baseline +-------- + +``` +VmPeak: 42604 kB +VmSize: 42604 kB +VmLck: 0 kB +VmHWM: 1120 kB +VmRSS: 1120 kB +VmData: 35460 kB +VmStk: 136 kB +VmExe: 1020 kB +VmLib: 1848 kB +VmPTE: 36 kB +VmSwap: 0 kB +``` + +Program used to gather metric memory usage (with other metrics being similar): + +```go +package main + +import ( + "fmt" + "metrics" + "time" +) + +func main() { + fmt.Sprintf("foo") + metrics.NewRegistry() + time.Sleep(600e9) +} +``` + +1000 counters registered +------------------------ + +``` +VmPeak: 44016 kB +VmSize: 44016 kB +VmLck: 0 kB +VmHWM: 1928 kB +VmRSS: 1928 kB +VmData: 36868 kB +VmStk: 136 kB +VmExe: 1024 kB +VmLib: 1848 kB +VmPTE: 40 kB +VmSwap: 0 kB +``` + +**1.412 kB virtual, TODO 0.808 kB resident per counter.** + +100000 counters registered +-------------------------- + +``` +VmPeak: 55024 kB +VmSize: 55024 kB +VmLck: 0 kB +VmHWM: 12440 kB +VmRSS: 12440 kB +VmData: 47876 kB +VmStk: 136 kB +VmExe: 1024 kB +VmLib: 1848 kB +VmPTE: 64 kB +VmSwap: 0 kB +``` + +**0.1242 kB virtual, 0.1132 kB resident per counter.** + +1000 gauges registered +---------------------- + +``` +VmPeak: 44012 kB +VmSize: 44012 kB +VmLck: 0 kB +VmHWM: 1928 kB +VmRSS: 1928 kB +VmData: 36868 kB +VmStk: 136 kB +VmExe: 1020 kB +VmLib: 1848 kB +VmPTE: 40 kB +VmSwap: 0 kB +``` + +**1.408 kB virtual, 0.808 kB resident per counter.** + +100000 gauges registered +------------------------ + +``` +VmPeak: 55020 kB +VmSize: 55020 kB +VmLck: 0 kB +VmHWM: 12432 kB +VmRSS: 12432 kB +VmData: 47876 kB +VmStk: 136 kB +VmExe: 1020 kB +VmLib: 1848 kB +VmPTE: 60 kB +VmSwap: 0 kB +``` + +**0.12416 kB virtual, 0.11312 resident per gauge.** + +1000 histograms with a uniform sample size of 1028 +-------------------------------------------------- + +``` +VmPeak: 72272 kB +VmSize: 72272 kB +VmLck: 0 kB +VmHWM: 16204 kB +VmRSS: 16204 kB +VmData: 65100 kB +VmStk: 136 kB +VmExe: 1048 kB +VmLib: 1848 kB +VmPTE: 80 kB +VmSwap: 0 kB +``` + +**29.668 kB virtual, TODO 15.084 resident per histogram.** + +10000 histograms with a uniform sample size of 1028 +--------------------------------------------------- + +``` +VmPeak: 256912 kB +VmSize: 256912 kB +VmLck: 0 kB +VmHWM: 146204 kB +VmRSS: 146204 kB +VmData: 249740 kB +VmStk: 136 kB +VmExe: 1048 kB +VmLib: 1848 kB +VmPTE: 448 kB +VmSwap: 0 kB +``` + +**21.4308 kB virtual, 14.5084 kB resident per histogram.** + +50000 histograms with a uniform sample size of 1028 +--------------------------------------------------- + +``` +VmPeak: 908112 kB +VmSize: 908112 kB +VmLck: 0 kB +VmHWM: 645832 kB +VmRSS: 645588 kB +VmData: 900940 kB +VmStk: 136 kB +VmExe: 1048 kB +VmLib: 1848 kB +VmPTE: 1716 kB +VmSwap: 1544 kB +``` + +**17.31016 kB virtual, 12.88936 kB resident per histogram.** + +1000 histograms with an exponentially-decaying sample size of 1028 and alpha of 0.015 +------------------------------------------------------------------------------------- + +``` +VmPeak: 62480 kB +VmSize: 62480 kB +VmLck: 0 kB +VmHWM: 11572 kB +VmRSS: 11572 kB +VmData: 55308 kB +VmStk: 136 kB +VmExe: 1048 kB +VmLib: 1848 kB +VmPTE: 64 kB +VmSwap: 0 kB +``` + +**19.876 kB virtual, 10.452 kB resident per histogram.** + +10000 histograms with an exponentially-decaying sample size of 1028 and alpha of 0.015 +-------------------------------------------------------------------------------------- + +``` +VmPeak: 153296 kB +VmSize: 153296 kB +VmLck: 0 kB +VmHWM: 101176 kB +VmRSS: 101176 kB +VmData: 146124 kB +VmStk: 136 kB +VmExe: 1048 kB +VmLib: 1848 kB +VmPTE: 240 kB +VmSwap: 0 kB +``` + +**11.0692 kB virtual, 10.0056 kB resident per histogram.** + +50000 histograms with an exponentially-decaying sample size of 1028 and alpha of 0.015 +-------------------------------------------------------------------------------------- + +``` +VmPeak: 557264 kB +VmSize: 557264 kB +VmLck: 0 kB +VmHWM: 501056 kB +VmRSS: 501056 kB +VmData: 550092 kB +VmStk: 136 kB +VmExe: 1048 kB +VmLib: 1848 kB +VmPTE: 1032 kB +VmSwap: 0 kB +``` + +**10.2932 kB virtual, 9.99872 kB resident per histogram.** + +1000 meters +----------- + +``` +VmPeak: 74504 kB +VmSize: 74504 kB +VmLck: 0 kB +VmHWM: 24124 kB +VmRSS: 24124 kB +VmData: 67340 kB +VmStk: 136 kB +VmExe: 1040 kB +VmLib: 1848 kB +VmPTE: 92 kB +VmSwap: 0 kB +``` + +**31.9 kB virtual, 23.004 kB resident per meter.** + +10000 meters +------------ + +``` +VmPeak: 278920 kB +VmSize: 278920 kB +VmLck: 0 kB +VmHWM: 227300 kB +VmRSS: 227300 kB +VmData: 271756 kB +VmStk: 136 kB +VmExe: 1040 kB +VmLib: 1848 kB +VmPTE: 488 kB +VmSwap: 0 kB +``` + +**23.6316 kB virtual, 22.618 kB resident per meter.** diff --git a/Godeps/_workspace/src/github.com/rcrowley/go-metrics/meter.go b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/meter.go new file mode 100644 index 0000000000..0389ab0b8f --- /dev/null +++ b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/meter.go @@ -0,0 +1,233 @@ +package metrics + +import ( + "sync" + "time" +) + +// Meters count events to produce exponentially-weighted moving average rates +// at one-, five-, and fifteen-minutes and a mean rate. +type Meter interface { + Count() int64 + Mark(int64) + Rate1() float64 + Rate5() float64 + Rate15() float64 + RateMean() float64 + Snapshot() Meter +} + +// GetOrRegisterMeter returns an existing Meter or constructs and registers a +// new StandardMeter. +func GetOrRegisterMeter(name string, r Registry) Meter { + if nil == r { + r = DefaultRegistry + } + return r.GetOrRegister(name, NewMeter).(Meter) +} + +// NewMeter constructs a new StandardMeter and launches a goroutine. +func NewMeter() Meter { + if UseNilMetrics { + return NilMeter{} + } + m := newStandardMeter() + arbiter.Lock() + defer arbiter.Unlock() + arbiter.meters = append(arbiter.meters, m) + if !arbiter.started { + arbiter.started = true + go arbiter.tick() + } + return m +} + +// NewMeter constructs and registers a new StandardMeter and launches a +// goroutine. +func NewRegisteredMeter(name string, r Registry) Meter { + c := NewMeter() + if nil == r { + r = DefaultRegistry + } + r.Register(name, c) + return c +} + +// MeterSnapshot is a read-only copy of another Meter. +type MeterSnapshot struct { + count int64 + rate1, rate5, rate15, rateMean float64 +} + +// Count returns the count of events at the time the snapshot was taken. +func (m *MeterSnapshot) Count() int64 { return m.count } + +// Mark panics. +func (*MeterSnapshot) Mark(n int64) { + panic("Mark called on a MeterSnapshot") +} + +// Rate1 returns the one-minute moving average rate of events per second at the +// time the snapshot was taken. +func (m *MeterSnapshot) Rate1() float64 { return m.rate1 } + +// Rate5 returns the five-minute moving average rate of events per second at +// the time the snapshot was taken. +func (m *MeterSnapshot) Rate5() float64 { return m.rate5 } + +// Rate15 returns the fifteen-minute moving average rate of events per second +// at the time the snapshot was taken. +func (m *MeterSnapshot) Rate15() float64 { return m.rate15 } + +// RateMean returns the meter's mean rate of events per second at the time the +// snapshot was taken. +func (m *MeterSnapshot) RateMean() float64 { return m.rateMean } + +// Snapshot returns the snapshot. +func (m *MeterSnapshot) Snapshot() Meter { return m } + +// NilMeter is a no-op Meter. +type NilMeter struct{} + +// Count is a no-op. +func (NilMeter) Count() int64 { return 0 } + +// Mark is a no-op. +func (NilMeter) Mark(n int64) {} + +// Rate1 is a no-op. +func (NilMeter) Rate1() float64 { return 0.0 } + +// Rate5 is a no-op. +func (NilMeter) Rate5() float64 { return 0.0 } + +// Rate15is a no-op. +func (NilMeter) Rate15() float64 { return 0.0 } + +// RateMean is a no-op. +func (NilMeter) RateMean() float64 { return 0.0 } + +// Snapshot is a no-op. +func (NilMeter) Snapshot() Meter { return NilMeter{} } + +// StandardMeter is the standard implementation of a Meter. +type StandardMeter struct { + lock sync.RWMutex + snapshot *MeterSnapshot + a1, a5, a15 EWMA + startTime time.Time +} + +func newStandardMeter() *StandardMeter { + return &StandardMeter{ + snapshot: &MeterSnapshot{}, + a1: NewEWMA1(), + a5: NewEWMA5(), + a15: NewEWMA15(), + startTime: time.Now(), + } +} + +// Count returns the number of events recorded. +func (m *StandardMeter) Count() int64 { + m.lock.RLock() + count := m.snapshot.count + m.lock.RUnlock() + return count +} + +// Mark records the occurance of n events. +func (m *StandardMeter) Mark(n int64) { + m.lock.Lock() + defer m.lock.Unlock() + m.snapshot.count += n + m.a1.Update(n) + m.a5.Update(n) + m.a15.Update(n) + m.updateSnapshot() +} + +// Rate1 returns the one-minute moving average rate of events per second. +func (m *StandardMeter) Rate1() float64 { + m.lock.RLock() + rate1 := m.snapshot.rate1 + m.lock.RUnlock() + return rate1 +} + +// Rate5 returns the five-minute moving average rate of events per second. +func (m *StandardMeter) Rate5() float64 { + m.lock.RLock() + rate5 := m.snapshot.rate5 + m.lock.RUnlock() + return rate5 +} + +// Rate15 returns the fifteen-minute moving average rate of events per second. +func (m *StandardMeter) Rate15() float64 { + m.lock.RLock() + rate15 := m.snapshot.rate15 + m.lock.RUnlock() + return rate15 +} + +// RateMean returns the meter's mean rate of events per second. +func (m *StandardMeter) RateMean() float64 { + m.lock.RLock() + rateMean := m.snapshot.rateMean + m.lock.RUnlock() + return rateMean +} + +// Snapshot returns a read-only copy of the meter. +func (m *StandardMeter) Snapshot() Meter { + m.lock.RLock() + snapshot := *m.snapshot + m.lock.RUnlock() + return &snapshot +} + +func (m *StandardMeter) updateSnapshot() { + // should run with write lock held on m.lock + snapshot := m.snapshot + snapshot.rate1 = m.a1.Rate() + snapshot.rate5 = m.a5.Rate() + snapshot.rate15 = m.a15.Rate() + snapshot.rateMean = float64(snapshot.count) / time.Since(m.startTime).Seconds() +} + +func (m *StandardMeter) tick() { + m.lock.Lock() + defer m.lock.Unlock() + m.a1.Tick() + m.a5.Tick() + m.a15.Tick() + m.updateSnapshot() +} + +type meterArbiter struct { + sync.RWMutex + started bool + meters []*StandardMeter + ticker *time.Ticker +} + +var arbiter = meterArbiter{ticker: time.NewTicker(5e9)} + +// Ticks meters on the scheduled interval +func (ma *meterArbiter) tick() { + for { + select { + case <-ma.ticker.C: + ma.tickMeters() + } + } +} + +func (ma *meterArbiter) tickMeters() { + ma.RLock() + defer ma.RUnlock() + for _, meter := range ma.meters { + meter.tick() + } +} diff --git a/Godeps/_workspace/src/github.com/rcrowley/go-metrics/meter_test.go b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/meter_test.go new file mode 100644 index 0000000000..26ce1398ac --- /dev/null +++ b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/meter_test.go @@ -0,0 +1,60 @@ +package metrics + +import ( + "testing" + "time" +) + +func BenchmarkMeter(b *testing.B) { + m := NewMeter() + b.ResetTimer() + for i := 0; i < b.N; i++ { + m.Mark(1) + } +} + +func TestGetOrRegisterMeter(t *testing.T) { + r := NewRegistry() + NewRegisteredMeter("foo", r).Mark(47) + if m := GetOrRegisterMeter("foo", r); 47 != m.Count() { + t.Fatal(m) + } +} + +func TestMeterDecay(t *testing.T) { + ma := meterArbiter{ + ticker: time.NewTicker(1), + } + m := newStandardMeter() + ma.meters = append(ma.meters, m) + go ma.tick() + m.Mark(1) + rateMean := m.RateMean() + time.Sleep(1) + if m.RateMean() >= rateMean { + t.Error("m.RateMean() didn't decrease") + } +} + +func TestMeterNonzero(t *testing.T) { + m := NewMeter() + m.Mark(3) + if count := m.Count(); 3 != count { + t.Errorf("m.Count(): 3 != %v\n", count) + } +} + +func TestMeterSnapshot(t *testing.T) { + m := NewMeter() + m.Mark(1) + if snapshot := m.Snapshot(); m.RateMean() != snapshot.RateMean() { + t.Fatal(snapshot) + } +} + +func TestMeterZero(t *testing.T) { + m := NewMeter() + if count := m.Count(); 0 != count { + t.Errorf("m.Count(): 0 != %v\n", count) + } +} diff --git a/Godeps/_workspace/src/github.com/rcrowley/go-metrics/metrics.go b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/metrics.go new file mode 100644 index 0000000000..b97a49ed12 --- /dev/null +++ b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/metrics.go @@ -0,0 +1,13 @@ +// Go port of Coda Hale's Metrics library +// +// +// +// Coda Hale's original work: +package metrics + +// UseNilMetrics is checked by the constructor functions for all of the +// standard metrics. If it is true, the metric returned is a stub. +// +// This global kill-switch helps quantify the observer effect and makes +// for less cluttered pprof profiles. +var UseNilMetrics bool = false diff --git a/Godeps/_workspace/src/github.com/rcrowley/go-metrics/metrics_test.go b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/metrics_test.go new file mode 100644 index 0000000000..083f9676f4 --- /dev/null +++ b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/metrics_test.go @@ -0,0 +1,107 @@ +package metrics + +import ( + "io/ioutil" + "log" + "sync" + "testing" +) + +const FANOUT = 128 + +// Stop the compiler from complaining during debugging. +var ( + _ = ioutil.Discard + _ = log.LstdFlags +) + +func BenchmarkMetrics(b *testing.B) { + r := NewRegistry() + c := NewRegisteredCounter("counter", r) + g := NewRegisteredGauge("gauge", r) + gf := NewRegisteredGaugeFloat64("gaugefloat64", r) + h := NewRegisteredHistogram("histogram", r, NewUniformSample(100)) + m := NewRegisteredMeter("meter", r) + t := NewRegisteredTimer("timer", r) + RegisterDebugGCStats(r) + RegisterRuntimeMemStats(r) + b.ResetTimer() + ch := make(chan bool) + + wgD := &sync.WaitGroup{} + /* + wgD.Add(1) + go func() { + defer wgD.Done() + //log.Println("go CaptureDebugGCStats") + for { + select { + case <-ch: + //log.Println("done CaptureDebugGCStats") + return + default: + CaptureDebugGCStatsOnce(r) + } + } + }() + //*/ + + wgR := &sync.WaitGroup{} + //* + wgR.Add(1) + go func() { + defer wgR.Done() + //log.Println("go CaptureRuntimeMemStats") + for { + select { + case <-ch: + //log.Println("done CaptureRuntimeMemStats") + return + default: + CaptureRuntimeMemStatsOnce(r) + } + } + }() + //*/ + + wgW := &sync.WaitGroup{} + /* + wgW.Add(1) + go func() { + defer wgW.Done() + //log.Println("go Write") + for { + select { + case <-ch: + //log.Println("done Write") + return + default: + WriteOnce(r, ioutil.Discard) + } + } + }() + //*/ + + wg := &sync.WaitGroup{} + wg.Add(FANOUT) + for i := 0; i < FANOUT; i++ { + go func(i int) { + defer wg.Done() + //log.Println("go", i) + for i := 0; i < b.N; i++ { + c.Inc(1) + g.Update(int64(i)) + gf.Update(float64(i)) + h.Update(int64(i)) + m.Mark(1) + t.Update(1) + } + //log.Println("done", i) + }(i) + } + wg.Wait() + close(ch) + wgD.Wait() + wgR.Wait() + wgW.Wait() +} diff --git a/Godeps/_workspace/src/github.com/rcrowley/go-metrics/opentsdb.go b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/opentsdb.go new file mode 100644 index 0000000000..266b6c93d2 --- /dev/null +++ b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/opentsdb.go @@ -0,0 +1,119 @@ +package metrics + +import ( + "bufio" + "fmt" + "log" + "net" + "os" + "strings" + "time" +) + +var shortHostName string = "" + +// OpenTSDBConfig provides a container with configuration parameters for +// the OpenTSDB exporter +type OpenTSDBConfig struct { + Addr *net.TCPAddr // Network address to connect to + Registry Registry // Registry to be exported + FlushInterval time.Duration // Flush interval + DurationUnit time.Duration // Time conversion unit for durations + Prefix string // Prefix to be prepended to metric names +} + +// OpenTSDB is a blocking exporter function which reports metrics in r +// to a TSDB server located at addr, flushing them every d duration +// and prepending metric names with prefix. +func OpenTSDB(r Registry, d time.Duration, prefix string, addr *net.TCPAddr) { + OpenTSDBWithConfig(OpenTSDBConfig{ + Addr: addr, + Registry: r, + FlushInterval: d, + DurationUnit: time.Nanosecond, + Prefix: prefix, + }) +} + +// OpenTSDBWithConfig is a blocking exporter function just like OpenTSDB, +// but it takes a OpenTSDBConfig instead. +func OpenTSDBWithConfig(c OpenTSDBConfig) { + for _ = range time.Tick(c.FlushInterval) { + if err := openTSDB(&c); nil != err { + log.Println(err) + } + } +} + +func getShortHostname() string { + if shortHostName == "" { + host, _ := os.Hostname() + if index := strings.Index(host, "."); index > 0 { + shortHostName = host[:index] + } else { + shortHostName = host + } + } + return shortHostName +} + +func openTSDB(c *OpenTSDBConfig) error { + shortHostname := getShortHostname() + now := time.Now().Unix() + du := float64(c.DurationUnit) + conn, err := net.DialTCP("tcp", nil, c.Addr) + if nil != err { + return err + } + defer conn.Close() + w := bufio.NewWriter(conn) + c.Registry.Each(func(name string, i interface{}) { + switch metric := i.(type) { + case Counter: + fmt.Fprintf(w, "put %s.%s.count %d %d host=%s\n", c.Prefix, name, now, metric.Count(), shortHostname) + case Gauge: + fmt.Fprintf(w, "put %s.%s.value %d %d host=%s\n", c.Prefix, name, now, metric.Value(), shortHostname) + case GaugeFloat64: + fmt.Fprintf(w, "put %s.%s.value %d %f host=%s\n", c.Prefix, name, now, metric.Value(), shortHostname) + case Histogram: + h := metric.Snapshot() + ps := h.Percentiles([]float64{0.5, 0.75, 0.95, 0.99, 0.999}) + fmt.Fprintf(w, "put %s.%s.count %d %d host=%s\n", c.Prefix, name, now, h.Count(), shortHostname) + fmt.Fprintf(w, "put %s.%s.min %d %d host=%s\n", c.Prefix, name, now, h.Min(), shortHostname) + fmt.Fprintf(w, "put %s.%s.max %d %d host=%s\n", c.Prefix, name, now, h.Max(), shortHostname) + fmt.Fprintf(w, "put %s.%s.mean %d %.2f host=%s\n", c.Prefix, name, now, h.Mean(), shortHostname) + fmt.Fprintf(w, "put %s.%s.std-dev %d %.2f host=%s\n", c.Prefix, name, now, h.StdDev(), shortHostname) + fmt.Fprintf(w, "put %s.%s.50-percentile %d %.2f host=%s\n", c.Prefix, name, now, ps[0], shortHostname) + fmt.Fprintf(w, "put %s.%s.75-percentile %d %.2f host=%s\n", c.Prefix, name, now, ps[1], shortHostname) + fmt.Fprintf(w, "put %s.%s.95-percentile %d %.2f host=%s\n", c.Prefix, name, now, ps[2], shortHostname) + fmt.Fprintf(w, "put %s.%s.99-percentile %d %.2f host=%s\n", c.Prefix, name, now, ps[3], shortHostname) + fmt.Fprintf(w, "put %s.%s.999-percentile %d %.2f host=%s\n", c.Prefix, name, now, ps[4], shortHostname) + case Meter: + m := metric.Snapshot() + fmt.Fprintf(w, "put %s.%s.count %d %d host=%s\n", c.Prefix, name, now, m.Count(), shortHostname) + fmt.Fprintf(w, "put %s.%s.one-minute %d %.2f host=%s\n", c.Prefix, name, now, m.Rate1(), shortHostname) + fmt.Fprintf(w, "put %s.%s.five-minute %d %.2f host=%s\n", c.Prefix, name, now, m.Rate5(), shortHostname) + fmt.Fprintf(w, "put %s.%s.fifteen-minute %d %.2f host=%s\n", c.Prefix, name, now, m.Rate15(), shortHostname) + fmt.Fprintf(w, "put %s.%s.mean %d %.2f host=%s\n", c.Prefix, name, now, m.RateMean(), shortHostname) + case Timer: + t := metric.Snapshot() + ps := t.Percentiles([]float64{0.5, 0.75, 0.95, 0.99, 0.999}) + fmt.Fprintf(w, "put %s.%s.count %d %d host=%s\n", c.Prefix, name, now, t.Count(), shortHostname) + fmt.Fprintf(w, "put %s.%s.min %d %d host=%s\n", c.Prefix, name, now, t.Min()/int64(du), shortHostname) + fmt.Fprintf(w, "put %s.%s.max %d %d host=%s\n", c.Prefix, name, now, t.Max()/int64(du), shortHostname) + fmt.Fprintf(w, "put %s.%s.mean %d %.2f host=%s\n", c.Prefix, name, now, t.Mean()/du, shortHostname) + fmt.Fprintf(w, "put %s.%s.std-dev %d %.2f host=%s\n", c.Prefix, name, now, t.StdDev()/du, shortHostname) + fmt.Fprintf(w, "put %s.%s.50-percentile %d %.2f host=%s\n", c.Prefix, name, now, ps[0]/du, shortHostname) + fmt.Fprintf(w, "put %s.%s.75-percentile %d %.2f host=%s\n", c.Prefix, name, now, ps[1]/du, shortHostname) + fmt.Fprintf(w, "put %s.%s.95-percentile %d %.2f host=%s\n", c.Prefix, name, now, ps[2]/du, shortHostname) + fmt.Fprintf(w, "put %s.%s.99-percentile %d %.2f host=%s\n", c.Prefix, name, now, ps[3]/du, shortHostname) + fmt.Fprintf(w, "put %s.%s.999-percentile %d %.2f host=%s\n", c.Prefix, name, now, ps[4]/du, shortHostname) + fmt.Fprintf(w, "put %s.%s.one-minute %d %.2f host=%s\n", c.Prefix, name, now, t.Rate1(), shortHostname) + fmt.Fprintf(w, "put %s.%s.five-minute %d %.2f host=%s\n", c.Prefix, name, now, t.Rate5(), shortHostname) + fmt.Fprintf(w, "put %s.%s.fifteen-minute %d %.2f host=%s\n", c.Prefix, name, now, t.Rate15(), shortHostname) + fmt.Fprintf(w, "put %s.%s.mean-rate %d %.2f host=%s\n", c.Prefix, name, now, t.RateMean(), shortHostname) + } + w.Flush() + }) + return nil +} diff --git a/Godeps/_workspace/src/github.com/rcrowley/go-metrics/opentsdb_test.go b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/opentsdb_test.go new file mode 100644 index 0000000000..6173d61ab7 --- /dev/null +++ b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/opentsdb_test.go @@ -0,0 +1,22 @@ +package metrics + +import ( + "net" + "time" +) + +func ExampleOpenTSDB() { + addr, _ := net.ResolveTCPAddr("net", ":2003") + go OpenTSDB(DefaultRegistry, 1*time.Second, "some.prefix", addr) +} + +func ExampleOpenTSDBWithConfig() { + addr, _ := net.ResolveTCPAddr("net", ":2003") + go OpenTSDBWithConfig(OpenTSDBConfig{ + Addr: addr, + Registry: DefaultRegistry, + FlushInterval: 1 * time.Second, + DurationUnit: time.Millisecond, + }) +} + diff --git a/Godeps/_workspace/src/github.com/rcrowley/go-metrics/registry.go b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/registry.go new file mode 100644 index 0000000000..1f9d82c2a1 --- /dev/null +++ b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/registry.go @@ -0,0 +1,180 @@ +package metrics + +import ( + "fmt" + "reflect" + "sync" +) + +// DuplicateMetric is the error returned by Registry.Register when a metric +// already exists. If you mean to Register that metric you must first +// Unregister the existing metric. +type DuplicateMetric string + +func (err DuplicateMetric) Error() string { + return fmt.Sprintf("duplicate metric: %s", string(err)) +} + +// A Registry holds references to a set of metrics by name and can iterate +// over them, calling callback functions provided by the user. +// +// This is an interface so as to encourage other structs to implement +// the Registry API as appropriate. +type Registry interface { + + // Call the given function for each registered metric. + Each(func(string, interface{})) + + // Get the metric by the given name or nil if none is registered. + Get(string) interface{} + + // Gets an existing metric or registers the given one. + // The interface can be the metric to register if not found in registry, + // or a function returning the metric for lazy instantiation. + GetOrRegister(string, interface{}) interface{} + + // Register the given metric under the given name. + Register(string, interface{}) error + + // Run all registered healthchecks. + RunHealthchecks() + + // Unregister the metric with the given name. + Unregister(string) + + // Unregister all metrics. (Mostly for testing.) + UnregisterAll() +} + +// The standard implementation of a Registry is a mutex-protected map +// of names to metrics. +type StandardRegistry struct { + metrics map[string]interface{} + mutex sync.Mutex +} + +// Create a new registry. +func NewRegistry() Registry { + return &StandardRegistry{metrics: make(map[string]interface{})} +} + +// Call the given function for each registered metric. +func (r *StandardRegistry) Each(f func(string, interface{})) { + for name, i := range r.registered() { + f(name, i) + } +} + +// Get the metric by the given name or nil if none is registered. +func (r *StandardRegistry) Get(name string) interface{} { + r.mutex.Lock() + defer r.mutex.Unlock() + return r.metrics[name] +} + +// Gets an existing metric or creates and registers a new one. Threadsafe +// alternative to calling Get and Register on failure. +// The interface can be the metric to register if not found in registry, +// or a function returning the metric for lazy instantiation. +func (r *StandardRegistry) GetOrRegister(name string, i interface{}) interface{} { + r.mutex.Lock() + defer r.mutex.Unlock() + if metric, ok := r.metrics[name]; ok { + return metric + } + if v := reflect.ValueOf(i); v.Kind() == reflect.Func { + i = v.Call(nil)[0].Interface() + } + r.register(name, i) + return i +} + +// Register the given metric under the given name. Returns a DuplicateMetric +// if a metric by the given name is already registered. +func (r *StandardRegistry) Register(name string, i interface{}) error { + r.mutex.Lock() + defer r.mutex.Unlock() + return r.register(name, i) +} + +// Run all registered healthchecks. +func (r *StandardRegistry) RunHealthchecks() { + r.mutex.Lock() + defer r.mutex.Unlock() + for _, i := range r.metrics { + if h, ok := i.(Healthcheck); ok { + h.Check() + } + } +} + +// Unregister the metric with the given name. +func (r *StandardRegistry) Unregister(name string) { + r.mutex.Lock() + defer r.mutex.Unlock() + delete(r.metrics, name) +} + +// Unregister all metrics. (Mostly for testing.) +func (r *StandardRegistry) UnregisterAll() { + r.mutex.Lock() + defer r.mutex.Unlock() + for name, _ := range r.metrics { + delete(r.metrics, name) + } +} + +func (r *StandardRegistry) register(name string, i interface{}) error { + if _, ok := r.metrics[name]; ok { + return DuplicateMetric(name) + } + switch i.(type) { + case Counter, Gauge, GaugeFloat64, Healthcheck, Histogram, Meter, Timer: + r.metrics[name] = i + } + return nil +} + +func (r *StandardRegistry) registered() map[string]interface{} { + r.mutex.Lock() + defer r.mutex.Unlock() + metrics := make(map[string]interface{}, len(r.metrics)) + for name, i := range r.metrics { + metrics[name] = i + } + return metrics +} + +var DefaultRegistry Registry = NewRegistry() + +// Call the given function for each registered metric. +func Each(f func(string, interface{})) { + DefaultRegistry.Each(f) +} + +// Get the metric by the given name or nil if none is registered. +func Get(name string) interface{} { + return DefaultRegistry.Get(name) +} + +// Gets an existing metric or creates and registers a new one. Threadsafe +// alternative to calling Get and Register on failure. +func GetOrRegister(name string, i interface{}) interface{} { + return DefaultRegistry.GetOrRegister(name, i) +} + +// Register the given metric under the given name. Returns a DuplicateMetric +// if a metric by the given name is already registered. +func Register(name string, i interface{}) error { + return DefaultRegistry.Register(name, i) +} + +// Run all registered healthchecks. +func RunHealthchecks() { + DefaultRegistry.RunHealthchecks() +} + +// Unregister the metric with the given name. +func Unregister(name string) { + DefaultRegistry.Unregister(name) +} diff --git a/Godeps/_workspace/src/github.com/rcrowley/go-metrics/registry_test.go b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/registry_test.go new file mode 100644 index 0000000000..9ba0a02054 --- /dev/null +++ b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/registry_test.go @@ -0,0 +1,118 @@ +package metrics + +import "testing" + +func BenchmarkRegistry(b *testing.B) { + r := NewRegistry() + r.Register("foo", NewCounter()) + b.ResetTimer() + for i := 0; i < b.N; i++ { + r.Each(func(string, interface{}) {}) + } +} + +func TestRegistry(t *testing.T) { + r := NewRegistry() + r.Register("foo", NewCounter()) + i := 0 + r.Each(func(name string, iface interface{}) { + i++ + if "foo" != name { + t.Fatal(name) + } + if _, ok := iface.(Counter); !ok { + t.Fatal(iface) + } + }) + if 1 != i { + t.Fatal(i) + } + r.Unregister("foo") + i = 0 + r.Each(func(string, interface{}) { i++ }) + if 0 != i { + t.Fatal(i) + } +} + +func TestRegistryDuplicate(t *testing.T) { + r := NewRegistry() + if err := r.Register("foo", NewCounter()); nil != err { + t.Fatal(err) + } + if err := r.Register("foo", NewGauge()); nil == err { + t.Fatal(err) + } + i := 0 + r.Each(func(name string, iface interface{}) { + i++ + if _, ok := iface.(Counter); !ok { + t.Fatal(iface) + } + }) + if 1 != i { + t.Fatal(i) + } +} + +func TestRegistryGet(t *testing.T) { + r := NewRegistry() + r.Register("foo", NewCounter()) + if count := r.Get("foo").(Counter).Count(); 0 != count { + t.Fatal(count) + } + r.Get("foo").(Counter).Inc(1) + if count := r.Get("foo").(Counter).Count(); 1 != count { + t.Fatal(count) + } +} + +func TestRegistryGetOrRegister(t *testing.T) { + r := NewRegistry() + + // First metric wins with GetOrRegister + _ = r.GetOrRegister("foo", NewCounter()) + m := r.GetOrRegister("foo", NewGauge()) + if _, ok := m.(Counter); !ok { + t.Fatal(m) + } + + i := 0 + r.Each(func(name string, iface interface{}) { + i++ + if name != "foo" { + t.Fatal(name) + } + if _, ok := iface.(Counter); !ok { + t.Fatal(iface) + } + }) + if i != 1 { + t.Fatal(i) + } +} + +func TestRegistryGetOrRegisterWithLazyInstantiation(t *testing.T) { + r := NewRegistry() + + // First metric wins with GetOrRegister + _ = r.GetOrRegister("foo", NewCounter) + m := r.GetOrRegister("foo", NewGauge) + if _, ok := m.(Counter); !ok { + t.Fatal(m) + } + + i := 0 + r.Each(func(name string, iface interface{}) { + i++ + if name != "foo" { + t.Fatal(name) + } + if _, ok := iface.(Counter); !ok { + t.Fatal(iface) + } + }) + if i != 1 { + t.Fatal(i) + } +} diff --git a/Godeps/_workspace/src/github.com/rcrowley/go-metrics/runtime.go b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/runtime.go new file mode 100644 index 0000000000..82574bf251 --- /dev/null +++ b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/runtime.go @@ -0,0 +1,200 @@ +package metrics + +import ( + "runtime" + "time" +) + +var ( + memStats runtime.MemStats + runtimeMetrics struct { + MemStats struct { + Alloc Gauge + BuckHashSys Gauge + DebugGC Gauge + EnableGC Gauge + Frees Gauge + HeapAlloc Gauge + HeapIdle Gauge + HeapInuse Gauge + HeapObjects Gauge + HeapReleased Gauge + HeapSys Gauge + LastGC Gauge + Lookups Gauge + Mallocs Gauge + MCacheInuse Gauge + MCacheSys Gauge + MSpanInuse Gauge + MSpanSys Gauge + NextGC Gauge + NumGC Gauge + PauseNs Histogram + PauseTotalNs Gauge + StackInuse Gauge + StackSys Gauge + Sys Gauge + TotalAlloc Gauge + } + NumCgoCall Gauge + NumGoroutine Gauge + ReadMemStats Timer + } + frees uint64 + lookups uint64 + mallocs uint64 + numGC uint32 + numCgoCalls int64 +) + +// Capture new values for the Go runtime statistics exported in +// runtime.MemStats. This is designed to be called as a goroutine. +func CaptureRuntimeMemStats(r Registry, d time.Duration) { + for _ = range time.Tick(d) { + CaptureRuntimeMemStatsOnce(r) + } +} + +// Capture new values for the Go runtime statistics exported in +// runtime.MemStats. This is designed to be called in a background +// goroutine. Giving a registry which has not been given to +// RegisterRuntimeMemStats will panic. +// +// Be very careful with this because runtime.ReadMemStats calls the C +// functions runtime·semacquire(&runtime·worldsema) and runtime·stoptheworld() +// and that last one does what it says on the tin. +func CaptureRuntimeMemStatsOnce(r Registry) { + t := time.Now() + runtime.ReadMemStats(&memStats) // This takes 50-200us. + runtimeMetrics.ReadMemStats.UpdateSince(t) + + runtimeMetrics.MemStats.Alloc.Update(int64(memStats.Alloc)) + runtimeMetrics.MemStats.BuckHashSys.Update(int64(memStats.BuckHashSys)) + if memStats.DebugGC { + runtimeMetrics.MemStats.DebugGC.Update(1) + } else { + runtimeMetrics.MemStats.DebugGC.Update(0) + } + if memStats.EnableGC { + runtimeMetrics.MemStats.EnableGC.Update(1) + } else { + runtimeMetrics.MemStats.EnableGC.Update(0) + } + + runtimeMetrics.MemStats.Frees.Update(int64(memStats.Frees - frees)) + runtimeMetrics.MemStats.HeapAlloc.Update(int64(memStats.HeapAlloc)) + runtimeMetrics.MemStats.HeapIdle.Update(int64(memStats.HeapIdle)) + runtimeMetrics.MemStats.HeapInuse.Update(int64(memStats.HeapInuse)) + runtimeMetrics.MemStats.HeapObjects.Update(int64(memStats.HeapObjects)) + runtimeMetrics.MemStats.HeapReleased.Update(int64(memStats.HeapReleased)) + runtimeMetrics.MemStats.HeapSys.Update(int64(memStats.HeapSys)) + runtimeMetrics.MemStats.LastGC.Update(int64(memStats.LastGC)) + runtimeMetrics.MemStats.Lookups.Update(int64(memStats.Lookups - lookups)) + runtimeMetrics.MemStats.Mallocs.Update(int64(memStats.Mallocs - mallocs)) + runtimeMetrics.MemStats.MCacheInuse.Update(int64(memStats.MCacheInuse)) + runtimeMetrics.MemStats.MCacheSys.Update(int64(memStats.MCacheSys)) + runtimeMetrics.MemStats.MSpanInuse.Update(int64(memStats.MSpanInuse)) + runtimeMetrics.MemStats.MSpanSys.Update(int64(memStats.MSpanSys)) + runtimeMetrics.MemStats.NextGC.Update(int64(memStats.NextGC)) + runtimeMetrics.MemStats.NumGC.Update(int64(memStats.NumGC - numGC)) + + // + i := numGC % uint32(len(memStats.PauseNs)) + ii := memStats.NumGC % uint32(len(memStats.PauseNs)) + if memStats.NumGC-numGC >= uint32(len(memStats.PauseNs)) { + for i = 0; i < uint32(len(memStats.PauseNs)); i++ { + runtimeMetrics.MemStats.PauseNs.Update(int64(memStats.PauseNs[i])) + } + } else { + if i > ii { + for ; i < uint32(len(memStats.PauseNs)); i++ { + runtimeMetrics.MemStats.PauseNs.Update(int64(memStats.PauseNs[i])) + } + i = 0 + } + for ; i < ii; i++ { + runtimeMetrics.MemStats.PauseNs.Update(int64(memStats.PauseNs[i])) + } + } + frees = memStats.Frees + lookups = memStats.Lookups + mallocs = memStats.Mallocs + numGC = memStats.NumGC + + runtimeMetrics.MemStats.PauseTotalNs.Update(int64(memStats.PauseTotalNs)) + runtimeMetrics.MemStats.StackInuse.Update(int64(memStats.StackInuse)) + runtimeMetrics.MemStats.StackSys.Update(int64(memStats.StackSys)) + runtimeMetrics.MemStats.Sys.Update(int64(memStats.Sys)) + runtimeMetrics.MemStats.TotalAlloc.Update(int64(memStats.TotalAlloc)) + + currentNumCgoCalls := numCgoCall() + runtimeMetrics.NumCgoCall.Update(currentNumCgoCalls - numCgoCalls) + numCgoCalls = currentNumCgoCalls + + runtimeMetrics.NumGoroutine.Update(int64(runtime.NumGoroutine())) +} + +// Register runtimeMetrics for the Go runtime statistics exported in runtime and +// specifically runtime.MemStats. The runtimeMetrics are named by their +// fully-qualified Go symbols, i.e. runtime.MemStats.Alloc. +func RegisterRuntimeMemStats(r Registry) { + runtimeMetrics.MemStats.Alloc = NewGauge() + runtimeMetrics.MemStats.BuckHashSys = NewGauge() + runtimeMetrics.MemStats.DebugGC = NewGauge() + runtimeMetrics.MemStats.EnableGC = NewGauge() + runtimeMetrics.MemStats.Frees = NewGauge() + runtimeMetrics.MemStats.HeapAlloc = NewGauge() + runtimeMetrics.MemStats.HeapIdle = NewGauge() + runtimeMetrics.MemStats.HeapInuse = NewGauge() + runtimeMetrics.MemStats.HeapObjects = NewGauge() + runtimeMetrics.MemStats.HeapReleased = NewGauge() + runtimeMetrics.MemStats.HeapSys = NewGauge() + runtimeMetrics.MemStats.LastGC = NewGauge() + runtimeMetrics.MemStats.Lookups = NewGauge() + runtimeMetrics.MemStats.Mallocs = NewGauge() + runtimeMetrics.MemStats.MCacheInuse = NewGauge() + runtimeMetrics.MemStats.MCacheSys = NewGauge() + runtimeMetrics.MemStats.MSpanInuse = NewGauge() + runtimeMetrics.MemStats.MSpanSys = NewGauge() + runtimeMetrics.MemStats.NextGC = NewGauge() + runtimeMetrics.MemStats.NumGC = NewGauge() + runtimeMetrics.MemStats.PauseNs = NewHistogram(NewExpDecaySample(1028, 0.015)) + runtimeMetrics.MemStats.PauseTotalNs = NewGauge() + runtimeMetrics.MemStats.StackInuse = NewGauge() + runtimeMetrics.MemStats.StackSys = NewGauge() + runtimeMetrics.MemStats.Sys = NewGauge() + runtimeMetrics.MemStats.TotalAlloc = NewGauge() + runtimeMetrics.NumCgoCall = NewGauge() + runtimeMetrics.NumGoroutine = NewGauge() + runtimeMetrics.ReadMemStats = NewTimer() + + r.Register("runtime.MemStats.Alloc", runtimeMetrics.MemStats.Alloc) + r.Register("runtime.MemStats.BuckHashSys", runtimeMetrics.MemStats.BuckHashSys) + r.Register("runtime.MemStats.DebugGC", runtimeMetrics.MemStats.DebugGC) + r.Register("runtime.MemStats.EnableGC", runtimeMetrics.MemStats.EnableGC) + r.Register("runtime.MemStats.Frees", runtimeMetrics.MemStats.Frees) + r.Register("runtime.MemStats.HeapAlloc", runtimeMetrics.MemStats.HeapAlloc) + r.Register("runtime.MemStats.HeapIdle", runtimeMetrics.MemStats.HeapIdle) + r.Register("runtime.MemStats.HeapInuse", runtimeMetrics.MemStats.HeapInuse) + r.Register("runtime.MemStats.HeapObjects", runtimeMetrics.MemStats.HeapObjects) + r.Register("runtime.MemStats.HeapReleased", runtimeMetrics.MemStats.HeapReleased) + r.Register("runtime.MemStats.HeapSys", runtimeMetrics.MemStats.HeapSys) + r.Register("runtime.MemStats.LastGC", runtimeMetrics.MemStats.LastGC) + r.Register("runtime.MemStats.Lookups", runtimeMetrics.MemStats.Lookups) + r.Register("runtime.MemStats.Mallocs", runtimeMetrics.MemStats.Mallocs) + r.Register("runtime.MemStats.MCacheInuse", runtimeMetrics.MemStats.MCacheInuse) + r.Register("runtime.MemStats.MCacheSys", runtimeMetrics.MemStats.MCacheSys) + r.Register("runtime.MemStats.MSpanInuse", runtimeMetrics.MemStats.MSpanInuse) + r.Register("runtime.MemStats.MSpanSys", runtimeMetrics.MemStats.MSpanSys) + r.Register("runtime.MemStats.NextGC", runtimeMetrics.MemStats.NextGC) + r.Register("runtime.MemStats.NumGC", runtimeMetrics.MemStats.NumGC) + r.Register("runtime.MemStats.PauseNs", runtimeMetrics.MemStats.PauseNs) + r.Register("runtime.MemStats.PauseTotalNs", runtimeMetrics.MemStats.PauseTotalNs) + r.Register("runtime.MemStats.StackInuse", runtimeMetrics.MemStats.StackInuse) + r.Register("runtime.MemStats.StackSys", runtimeMetrics.MemStats.StackSys) + r.Register("runtime.MemStats.Sys", runtimeMetrics.MemStats.Sys) + r.Register("runtime.MemStats.TotalAlloc", runtimeMetrics.MemStats.TotalAlloc) + r.Register("runtime.NumCgoCall", runtimeMetrics.NumCgoCall) + r.Register("runtime.NumGoroutine", runtimeMetrics.NumGoroutine) + r.Register("runtime.ReadMemStats", runtimeMetrics.ReadMemStats) +} diff --git a/Godeps/_workspace/src/github.com/rcrowley/go-metrics/runtime_cgo.go b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/runtime_cgo.go new file mode 100644 index 0000000000..e3391f4e89 --- /dev/null +++ b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/runtime_cgo.go @@ -0,0 +1,10 @@ +// +build cgo +// +build !appengine + +package metrics + +import "runtime" + +func numCgoCall() int64 { + return runtime.NumCgoCall() +} diff --git a/Godeps/_workspace/src/github.com/rcrowley/go-metrics/runtime_no_cgo.go b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/runtime_no_cgo.go new file mode 100644 index 0000000000..616a3b4751 --- /dev/null +++ b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/runtime_no_cgo.go @@ -0,0 +1,7 @@ +// +build !cgo appengine + +package metrics + +func numCgoCall() int64 { + return 0 +} diff --git a/Godeps/_workspace/src/github.com/rcrowley/go-metrics/runtime_test.go b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/runtime_test.go new file mode 100644 index 0000000000..a0ca894793 --- /dev/null +++ b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/runtime_test.go @@ -0,0 +1,78 @@ +package metrics + +import ( + "runtime" + "testing" + "time" +) + +func BenchmarkRuntimeMemStats(b *testing.B) { + r := NewRegistry() + RegisterRuntimeMemStats(r) + b.ResetTimer() + for i := 0; i < b.N; i++ { + CaptureRuntimeMemStatsOnce(r) + } +} + +func TestRuntimeMemStats(t *testing.T) { + r := NewRegistry() + RegisterRuntimeMemStats(r) + CaptureRuntimeMemStatsOnce(r) + zero := runtimeMetrics.MemStats.PauseNs.Count() // Get a "zero" since GC may have run before these tests. + runtime.GC() + CaptureRuntimeMemStatsOnce(r) + if count := runtimeMetrics.MemStats.PauseNs.Count(); 1 != count-zero { + t.Fatal(count - zero) + } + runtime.GC() + runtime.GC() + CaptureRuntimeMemStatsOnce(r) + if count := runtimeMetrics.MemStats.PauseNs.Count(); 3 != count-zero { + t.Fatal(count - zero) + } + for i := 0; i < 256; i++ { + runtime.GC() + } + CaptureRuntimeMemStatsOnce(r) + if count := runtimeMetrics.MemStats.PauseNs.Count(); 259 != count-zero { + t.Fatal(count - zero) + } + for i := 0; i < 257; i++ { + runtime.GC() + } + CaptureRuntimeMemStatsOnce(r) + if count := runtimeMetrics.MemStats.PauseNs.Count(); 515 != count-zero { // We lost one because there were too many GCs between captures. + t.Fatal(count - zero) + } +} + +func TestRuntimeMemStatsBlocking(t *testing.T) { + if g := runtime.GOMAXPROCS(0); g < 2 { + t.Skipf("skipping TestRuntimeMemStatsBlocking with GOMAXPROCS=%d\n", g) + } + ch := make(chan int) + go testRuntimeMemStatsBlocking(ch) + var memStats runtime.MemStats + t0 := time.Now() + runtime.ReadMemStats(&memStats) + t1 := time.Now() + t.Log("i++ during runtime.ReadMemStats:", <-ch) + go testRuntimeMemStatsBlocking(ch) + d := t1.Sub(t0) + t.Log(d) + time.Sleep(d) + t.Log("i++ during time.Sleep:", <-ch) +} + +func testRuntimeMemStatsBlocking(ch chan int) { + i := 0 + for { + select { + case ch <- i: + return + default: + i++ + } + } +} diff --git a/Godeps/_workspace/src/github.com/rcrowley/go-metrics/sample.go b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/sample.go new file mode 100644 index 0000000000..5f6a37788e --- /dev/null +++ b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/sample.go @@ -0,0 +1,609 @@ +package metrics + +import ( + "math" + "math/rand" + "sort" + "sync" + "time" +) + +const rescaleThreshold = time.Hour + +// Samples maintain a statistically-significant selection of values from +// a stream. +type Sample interface { + Clear() + Count() int64 + Max() int64 + Mean() float64 + Min() int64 + Percentile(float64) float64 + Percentiles([]float64) []float64 + Size() int + Snapshot() Sample + StdDev() float64 + Sum() int64 + Update(int64) + Values() []int64 + Variance() float64 +} + +// ExpDecaySample is an exponentially-decaying sample using a forward-decaying +// priority reservoir. See Cormode et al's "Forward Decay: A Practical Time +// Decay Model for Streaming Systems". +// +// +type ExpDecaySample struct { + alpha float64 + count int64 + mutex sync.Mutex + reservoirSize int + t0, t1 time.Time + values *expDecaySampleHeap +} + +// NewExpDecaySample constructs a new exponentially-decaying sample with the +// given reservoir size and alpha. +func NewExpDecaySample(reservoirSize int, alpha float64) Sample { + if UseNilMetrics { + return NilSample{} + } + s := &ExpDecaySample{ + alpha: alpha, + reservoirSize: reservoirSize, + t0: time.Now(), + values: newExpDecaySampleHeap(reservoirSize), + } + s.t1 = s.t0.Add(rescaleThreshold) + return s +} + +// Clear clears all samples. +func (s *ExpDecaySample) Clear() { + s.mutex.Lock() + defer s.mutex.Unlock() + s.count = 0 + s.t0 = time.Now() + s.t1 = s.t0.Add(rescaleThreshold) + s.values.Clear() +} + +// Count returns the number of samples recorded, which may exceed the +// reservoir size. +func (s *ExpDecaySample) Count() int64 { + s.mutex.Lock() + defer s.mutex.Unlock() + return s.count +} + +// Max returns the maximum value in the sample, which may not be the maximum +// value ever to be part of the sample. +func (s *ExpDecaySample) Max() int64 { + return SampleMax(s.Values()) +} + +// Mean returns the mean of the values in the sample. +func (s *ExpDecaySample) Mean() float64 { + return SampleMean(s.Values()) +} + +// Min returns the minimum value in the sample, which may not be the minimum +// value ever to be part of the sample. +func (s *ExpDecaySample) Min() int64 { + return SampleMin(s.Values()) +} + +// Percentile returns an arbitrary percentile of values in the sample. +func (s *ExpDecaySample) Percentile(p float64) float64 { + return SamplePercentile(s.Values(), p) +} + +// Percentiles returns a slice of arbitrary percentiles of values in the +// sample. +func (s *ExpDecaySample) Percentiles(ps []float64) []float64 { + return SamplePercentiles(s.Values(), ps) +} + +// Size returns the size of the sample, which is at most the reservoir size. +func (s *ExpDecaySample) Size() int { + s.mutex.Lock() + defer s.mutex.Unlock() + return s.values.Size() +} + +// Snapshot returns a read-only copy of the sample. +func (s *ExpDecaySample) Snapshot() Sample { + s.mutex.Lock() + defer s.mutex.Unlock() + vals := s.values.Values() + values := make([]int64, len(vals)) + for i, v := range vals { + values[i] = v.v + } + return &SampleSnapshot{ + count: s.count, + values: values, + } +} + +// StdDev returns the standard deviation of the values in the sample. +func (s *ExpDecaySample) StdDev() float64 { + return SampleStdDev(s.Values()) +} + +// Sum returns the sum of the values in the sample. +func (s *ExpDecaySample) Sum() int64 { + return SampleSum(s.Values()) +} + +// Update samples a new value. +func (s *ExpDecaySample) Update(v int64) { + s.update(time.Now(), v) +} + +// Values returns a copy of the values in the sample. +func (s *ExpDecaySample) Values() []int64 { + s.mutex.Lock() + defer s.mutex.Unlock() + vals := s.values.Values() + values := make([]int64, len(vals)) + for i, v := range vals { + values[i] = v.v + } + return values +} + +// Variance returns the variance of the values in the sample. +func (s *ExpDecaySample) Variance() float64 { + return SampleVariance(s.Values()) +} + +// update samples a new value at a particular timestamp. This is a method all +// its own to facilitate testing. +func (s *ExpDecaySample) update(t time.Time, v int64) { + s.mutex.Lock() + defer s.mutex.Unlock() + s.count++ + if s.values.Size() == s.reservoirSize { + s.values.Pop() + } + s.values.Push(expDecaySample{ + k: math.Exp(t.Sub(s.t0).Seconds()*s.alpha) / rand.Float64(), + v: v, + }) + if t.After(s.t1) { + values := s.values.Values() + t0 := s.t0 + s.values.Clear() + s.t0 = t + s.t1 = s.t0.Add(rescaleThreshold) + for _, v := range values { + v.k = v.k * math.Exp(-s.alpha*s.t0.Sub(t0).Seconds()) + s.values.Push(v) + } + } +} + +// NilSample is a no-op Sample. +type NilSample struct{} + +// Clear is a no-op. +func (NilSample) Clear() {} + +// Count is a no-op. +func (NilSample) Count() int64 { return 0 } + +// Max is a no-op. +func (NilSample) Max() int64 { return 0 } + +// Mean is a no-op. +func (NilSample) Mean() float64 { return 0.0 } + +// Min is a no-op. +func (NilSample) Min() int64 { return 0 } + +// Percentile is a no-op. +func (NilSample) Percentile(p float64) float64 { return 0.0 } + +// Percentiles is a no-op. +func (NilSample) Percentiles(ps []float64) []float64 { + return make([]float64, len(ps)) +} + +// Size is a no-op. +func (NilSample) Size() int { return 0 } + +// Sample is a no-op. +func (NilSample) Snapshot() Sample { return NilSample{} } + +// StdDev is a no-op. +func (NilSample) StdDev() float64 { return 0.0 } + +// Sum is a no-op. +func (NilSample) Sum() int64 { return 0 } + +// Update is a no-op. +func (NilSample) Update(v int64) {} + +// Values is a no-op. +func (NilSample) Values() []int64 { return []int64{} } + +// Variance is a no-op. +func (NilSample) Variance() float64 { return 0.0 } + +// SampleMax returns the maximum value of the slice of int64. +func SampleMax(values []int64) int64 { + if 0 == len(values) { + return 0 + } + var max int64 = math.MinInt64 + for _, v := range values { + if max < v { + max = v + } + } + return max +} + +// SampleMean returns the mean value of the slice of int64. +func SampleMean(values []int64) float64 { + if 0 == len(values) { + return 0.0 + } + return float64(SampleSum(values)) / float64(len(values)) +} + +// SampleMin returns the minimum value of the slice of int64. +func SampleMin(values []int64) int64 { + if 0 == len(values) { + return 0 + } + var min int64 = math.MaxInt64 + for _, v := range values { + if min > v { + min = v + } + } + return min +} + +// SamplePercentiles returns an arbitrary percentile of the slice of int64. +func SamplePercentile(values int64Slice, p float64) float64 { + return SamplePercentiles(values, []float64{p})[0] +} + +// SamplePercentiles returns a slice of arbitrary percentiles of the slice of +// int64. +func SamplePercentiles(values int64Slice, ps []float64) []float64 { + scores := make([]float64, len(ps)) + size := len(values) + if size > 0 { + sort.Sort(values) + for i, p := range ps { + pos := p * float64(size+1) + if pos < 1.0 { + scores[i] = float64(values[0]) + } else if pos >= float64(size) { + scores[i] = float64(values[size-1]) + } else { + lower := float64(values[int(pos)-1]) + upper := float64(values[int(pos)]) + scores[i] = lower + (pos-math.Floor(pos))*(upper-lower) + } + } + } + return scores +} + +// SampleSnapshot is a read-only copy of another Sample. +type SampleSnapshot struct { + count int64 + values []int64 +} + +// Clear panics. +func (*SampleSnapshot) Clear() { + panic("Clear called on a SampleSnapshot") +} + +// Count returns the count of inputs at the time the snapshot was taken. +func (s *SampleSnapshot) Count() int64 { return s.count } + +// Max returns the maximal value at the time the snapshot was taken. +func (s *SampleSnapshot) Max() int64 { return SampleMax(s.values) } + +// Mean returns the mean value at the time the snapshot was taken. +func (s *SampleSnapshot) Mean() float64 { return SampleMean(s.values) } + +// Min returns the minimal value at the time the snapshot was taken. +func (s *SampleSnapshot) Min() int64 { return SampleMin(s.values) } + +// Percentile returns an arbitrary percentile of values at the time the +// snapshot was taken. +func (s *SampleSnapshot) Percentile(p float64) float64 { + return SamplePercentile(s.values, p) +} + +// Percentiles returns a slice of arbitrary percentiles of values at the time +// the snapshot was taken. +func (s *SampleSnapshot) Percentiles(ps []float64) []float64 { + return SamplePercentiles(s.values, ps) +} + +// Size returns the size of the sample at the time the snapshot was taken. +func (s *SampleSnapshot) Size() int { return len(s.values) } + +// Snapshot returns the snapshot. +func (s *SampleSnapshot) Snapshot() Sample { return s } + +// StdDev returns the standard deviation of values at the time the snapshot was +// taken. +func (s *SampleSnapshot) StdDev() float64 { return SampleStdDev(s.values) } + +// Sum returns the sum of values at the time the snapshot was taken. +func (s *SampleSnapshot) Sum() int64 { return SampleSum(s.values) } + +// Update panics. +func (*SampleSnapshot) Update(int64) { + panic("Update called on a SampleSnapshot") +} + +// Values returns a copy of the values in the sample. +func (s *SampleSnapshot) Values() []int64 { + values := make([]int64, len(s.values)) + copy(values, s.values) + return values +} + +// Variance returns the variance of values at the time the snapshot was taken. +func (s *SampleSnapshot) Variance() float64 { return SampleVariance(s.values) } + +// SampleStdDev returns the standard deviation of the slice of int64. +func SampleStdDev(values []int64) float64 { + return math.Sqrt(SampleVariance(values)) +} + +// SampleSum returns the sum of the slice of int64. +func SampleSum(values []int64) int64 { + var sum int64 + for _, v := range values { + sum += v + } + return sum +} + +// SampleVariance returns the variance of the slice of int64. +func SampleVariance(values []int64) float64 { + if 0 == len(values) { + return 0.0 + } + m := SampleMean(values) + var sum float64 + for _, v := range values { + d := float64(v) - m + sum += d * d + } + return sum / float64(len(values)) +} + +// A uniform sample using Vitter's Algorithm R. +// +// +type UniformSample struct { + count int64 + mutex sync.Mutex + reservoirSize int + values []int64 +} + +// NewUniformSample constructs a new uniform sample with the given reservoir +// size. +func NewUniformSample(reservoirSize int) Sample { + if UseNilMetrics { + return NilSample{} + } + return &UniformSample{ + reservoirSize: reservoirSize, + values: make([]int64, 0, reservoirSize), + } +} + +// Clear clears all samples. +func (s *UniformSample) Clear() { + s.mutex.Lock() + defer s.mutex.Unlock() + s.count = 0 + s.values = make([]int64, 0, s.reservoirSize) +} + +// Count returns the number of samples recorded, which may exceed the +// reservoir size. +func (s *UniformSample) Count() int64 { + s.mutex.Lock() + defer s.mutex.Unlock() + return s.count +} + +// Max returns the maximum value in the sample, which may not be the maximum +// value ever to be part of the sample. +func (s *UniformSample) Max() int64 { + s.mutex.Lock() + defer s.mutex.Unlock() + return SampleMax(s.values) +} + +// Mean returns the mean of the values in the sample. +func (s *UniformSample) Mean() float64 { + s.mutex.Lock() + defer s.mutex.Unlock() + return SampleMean(s.values) +} + +// Min returns the minimum value in the sample, which may not be the minimum +// value ever to be part of the sample. +func (s *UniformSample) Min() int64 { + s.mutex.Lock() + defer s.mutex.Unlock() + return SampleMin(s.values) +} + +// Percentile returns an arbitrary percentile of values in the sample. +func (s *UniformSample) Percentile(p float64) float64 { + s.mutex.Lock() + defer s.mutex.Unlock() + return SamplePercentile(s.values, p) +} + +// Percentiles returns a slice of arbitrary percentiles of values in the +// sample. +func (s *UniformSample) Percentiles(ps []float64) []float64 { + s.mutex.Lock() + defer s.mutex.Unlock() + return SamplePercentiles(s.values, ps) +} + +// Size returns the size of the sample, which is at most the reservoir size. +func (s *UniformSample) Size() int { + s.mutex.Lock() + defer s.mutex.Unlock() + return len(s.values) +} + +// Snapshot returns a read-only copy of the sample. +func (s *UniformSample) Snapshot() Sample { + s.mutex.Lock() + defer s.mutex.Unlock() + values := make([]int64, len(s.values)) + copy(values, s.values) + return &SampleSnapshot{ + count: s.count, + values: values, + } +} + +// StdDev returns the standard deviation of the values in the sample. +func (s *UniformSample) StdDev() float64 { + s.mutex.Lock() + defer s.mutex.Unlock() + return SampleStdDev(s.values) +} + +// Sum returns the sum of the values in the sample. +func (s *UniformSample) Sum() int64 { + s.mutex.Lock() + defer s.mutex.Unlock() + return SampleSum(s.values) +} + +// Update samples a new value. +func (s *UniformSample) Update(v int64) { + s.mutex.Lock() + defer s.mutex.Unlock() + s.count++ + if len(s.values) < s.reservoirSize { + s.values = append(s.values, v) + } else { + r := rand.Int63n(s.count) + if r < int64(len(s.values)) { + s.values[int(r)] = v + } + } +} + +// Values returns a copy of the values in the sample. +func (s *UniformSample) Values() []int64 { + s.mutex.Lock() + defer s.mutex.Unlock() + values := make([]int64, len(s.values)) + copy(values, s.values) + return values +} + +// Variance returns the variance of the values in the sample. +func (s *UniformSample) Variance() float64 { + s.mutex.Lock() + defer s.mutex.Unlock() + return SampleVariance(s.values) +} + +// expDecaySample represents an individual sample in a heap. +type expDecaySample struct { + k float64 + v int64 +} + +func newExpDecaySampleHeap(reservoirSize int) *expDecaySampleHeap { + return &expDecaySampleHeap{make([]expDecaySample, 0, reservoirSize)} +} + +// expDecaySampleHeap is a min-heap of expDecaySamples. +// The internal implementation is copied from the standard library's container/heap +type expDecaySampleHeap struct { + s []expDecaySample +} + +func (h *expDecaySampleHeap) Clear() { + h.s = h.s[:0] +} + +func (h *expDecaySampleHeap) Push(s expDecaySample) { + n := len(h.s) + h.s = h.s[0 : n+1] + h.s[n] = s + h.up(n) +} + +func (h *expDecaySampleHeap) Pop() expDecaySample { + n := len(h.s) - 1 + h.s[0], h.s[n] = h.s[n], h.s[0] + h.down(0, n) + + n = len(h.s) + s := h.s[n-1] + h.s = h.s[0 : n-1] + return s +} + +func (h *expDecaySampleHeap) Size() int { + return len(h.s) +} + +func (h *expDecaySampleHeap) Values() []expDecaySample { + return h.s +} + +func (h *expDecaySampleHeap) up(j int) { + for { + i := (j - 1) / 2 // parent + if i == j || !(h.s[j].k < h.s[i].k) { + break + } + h.s[i], h.s[j] = h.s[j], h.s[i] + j = i + } +} + +func (h *expDecaySampleHeap) down(i, n int) { + for { + j1 := 2*i + 1 + if j1 >= n || j1 < 0 { // j1 < 0 after int overflow + break + } + j := j1 // left child + if j2 := j1 + 1; j2 < n && !(h.s[j1].k < h.s[j2].k) { + j = j2 // = 2*i + 2 // right child + } + if !(h.s[j].k < h.s[i].k) { + break + } + h.s[i], h.s[j] = h.s[j], h.s[i] + i = j + } +} + +type int64Slice []int64 + +func (p int64Slice) Len() int { return len(p) } +func (p int64Slice) Less(i, j int) bool { return p[i] < p[j] } +func (p int64Slice) Swap(i, j int) { p[i], p[j] = p[j], p[i] } diff --git a/Godeps/_workspace/src/github.com/rcrowley/go-metrics/sample_test.go b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/sample_test.go new file mode 100644 index 0000000000..d60e99c5bb --- /dev/null +++ b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/sample_test.go @@ -0,0 +1,363 @@ +package metrics + +import ( + "math/rand" + "runtime" + "testing" + "time" +) + +// Benchmark{Compute,Copy}{1000,1000000} demonstrate that, even for relatively +// expensive computations like Variance, the cost of copying the Sample, as +// approximated by a make and copy, is much greater than the cost of the +// computation for small samples and only slightly less for large samples. +func BenchmarkCompute1000(b *testing.B) { + s := make([]int64, 1000) + for i := 0; i < len(s); i++ { + s[i] = int64(i) + } + b.ResetTimer() + for i := 0; i < b.N; i++ { + SampleVariance(s) + } +} +func BenchmarkCompute1000000(b *testing.B) { + s := make([]int64, 1000000) + for i := 0; i < len(s); i++ { + s[i] = int64(i) + } + b.ResetTimer() + for i := 0; i < b.N; i++ { + SampleVariance(s) + } +} +func BenchmarkCopy1000(b *testing.B) { + s := make([]int64, 1000) + for i := 0; i < len(s); i++ { + s[i] = int64(i) + } + b.ResetTimer() + for i := 0; i < b.N; i++ { + sCopy := make([]int64, len(s)) + copy(sCopy, s) + } +} +func BenchmarkCopy1000000(b *testing.B) { + s := make([]int64, 1000000) + for i := 0; i < len(s); i++ { + s[i] = int64(i) + } + b.ResetTimer() + for i := 0; i < b.N; i++ { + sCopy := make([]int64, len(s)) + copy(sCopy, s) + } +} + +func BenchmarkExpDecaySample257(b *testing.B) { + benchmarkSample(b, NewExpDecaySample(257, 0.015)) +} + +func BenchmarkExpDecaySample514(b *testing.B) { + benchmarkSample(b, NewExpDecaySample(514, 0.015)) +} + +func BenchmarkExpDecaySample1028(b *testing.B) { + benchmarkSample(b, NewExpDecaySample(1028, 0.015)) +} + +func BenchmarkUniformSample257(b *testing.B) { + benchmarkSample(b, NewUniformSample(257)) +} + +func BenchmarkUniformSample514(b *testing.B) { + benchmarkSample(b, NewUniformSample(514)) +} + +func BenchmarkUniformSample1028(b *testing.B) { + benchmarkSample(b, NewUniformSample(1028)) +} + +func TestExpDecaySample10(t *testing.T) { + rand.Seed(1) + s := NewExpDecaySample(100, 0.99) + for i := 0; i < 10; i++ { + s.Update(int64(i)) + } + if size := s.Count(); 10 != size { + t.Errorf("s.Count(): 10 != %v\n", size) + } + if size := s.Size(); 10 != size { + t.Errorf("s.Size(): 10 != %v\n", size) + } + if l := len(s.Values()); 10 != l { + t.Errorf("len(s.Values()): 10 != %v\n", l) + } + for _, v := range s.Values() { + if v > 10 || v < 0 { + t.Errorf("out of range [0, 10): %v\n", v) + } + } +} + +func TestExpDecaySample100(t *testing.T) { + rand.Seed(1) + s := NewExpDecaySample(1000, 0.01) + for i := 0; i < 100; i++ { + s.Update(int64(i)) + } + if size := s.Count(); 100 != size { + t.Errorf("s.Count(): 100 != %v\n", size) + } + if size := s.Size(); 100 != size { + t.Errorf("s.Size(): 100 != %v\n", size) + } + if l := len(s.Values()); 100 != l { + t.Errorf("len(s.Values()): 100 != %v\n", l) + } + for _, v := range s.Values() { + if v > 100 || v < 0 { + t.Errorf("out of range [0, 100): %v\n", v) + } + } +} + +func TestExpDecaySample1000(t *testing.T) { + rand.Seed(1) + s := NewExpDecaySample(100, 0.99) + for i := 0; i < 1000; i++ { + s.Update(int64(i)) + } + if size := s.Count(); 1000 != size { + t.Errorf("s.Count(): 1000 != %v\n", size) + } + if size := s.Size(); 100 != size { + t.Errorf("s.Size(): 100 != %v\n", size) + } + if l := len(s.Values()); 100 != l { + t.Errorf("len(s.Values()): 100 != %v\n", l) + } + for _, v := range s.Values() { + if v > 1000 || v < 0 { + t.Errorf("out of range [0, 1000): %v\n", v) + } + } +} + +// This test makes sure that the sample's priority is not amplified by using +// nanosecond duration since start rather than second duration since start. +// The priority becomes +Inf quickly after starting if this is done, +// effectively freezing the set of samples until a rescale step happens. +func TestExpDecaySampleNanosecondRegression(t *testing.T) { + rand.Seed(1) + s := NewExpDecaySample(100, 0.99) + for i := 0; i < 100; i++ { + s.Update(10) + } + time.Sleep(1 * time.Millisecond) + for i := 0; i < 100; i++ { + s.Update(20) + } + v := s.Values() + avg := float64(0) + for i := 0; i < len(v); i++ { + avg += float64(v[i]) + } + avg /= float64(len(v)) + if avg > 16 || avg < 14 { + t.Errorf("out of range [14, 16]: %v\n", avg) + } +} + +func TestExpDecaySampleRescale(t *testing.T) { + s := NewExpDecaySample(2, 0.001).(*ExpDecaySample) + s.update(time.Now(), 1) + s.update(time.Now().Add(time.Hour+time.Microsecond), 1) + for _, v := range s.values.Values() { + if v.k == 0.0 { + t.Fatal("v.k == 0.0") + } + } +} + +func TestExpDecaySampleSnapshot(t *testing.T) { + now := time.Now() + rand.Seed(1) + s := NewExpDecaySample(100, 0.99) + for i := 1; i <= 10000; i++ { + s.(*ExpDecaySample).update(now.Add(time.Duration(i)), int64(i)) + } + snapshot := s.Snapshot() + s.Update(1) + testExpDecaySampleStatistics(t, snapshot) +} + +func TestExpDecaySampleStatistics(t *testing.T) { + now := time.Now() + rand.Seed(1) + s := NewExpDecaySample(100, 0.99) + for i := 1; i <= 10000; i++ { + s.(*ExpDecaySample).update(now.Add(time.Duration(i)), int64(i)) + } + testExpDecaySampleStatistics(t, s) +} + +func TestUniformSample(t *testing.T) { + rand.Seed(1) + s := NewUniformSample(100) + for i := 0; i < 1000; i++ { + s.Update(int64(i)) + } + if size := s.Count(); 1000 != size { + t.Errorf("s.Count(): 1000 != %v\n", size) + } + if size := s.Size(); 100 != size { + t.Errorf("s.Size(): 100 != %v\n", size) + } + if l := len(s.Values()); 100 != l { + t.Errorf("len(s.Values()): 100 != %v\n", l) + } + for _, v := range s.Values() { + if v > 1000 || v < 0 { + t.Errorf("out of range [0, 100): %v\n", v) + } + } +} + +func TestUniformSampleIncludesTail(t *testing.T) { + rand.Seed(1) + s := NewUniformSample(100) + max := 100 + for i := 0; i < max; i++ { + s.Update(int64(i)) + } + v := s.Values() + sum := 0 + exp := (max - 1) * max / 2 + for i := 0; i < len(v); i++ { + sum += int(v[i]) + } + if exp != sum { + t.Errorf("sum: %v != %v\n", exp, sum) + } +} + +func TestUniformSampleSnapshot(t *testing.T) { + s := NewUniformSample(100) + for i := 1; i <= 10000; i++ { + s.Update(int64(i)) + } + snapshot := s.Snapshot() + s.Update(1) + testUniformSampleStatistics(t, snapshot) +} + +func TestUniformSampleStatistics(t *testing.T) { + rand.Seed(1) + s := NewUniformSample(100) + for i := 1; i <= 10000; i++ { + s.Update(int64(i)) + } + testUniformSampleStatistics(t, s) +} + +func benchmarkSample(b *testing.B, s Sample) { + var memStats runtime.MemStats + runtime.ReadMemStats(&memStats) + pauseTotalNs := memStats.PauseTotalNs + b.ResetTimer() + for i := 0; i < b.N; i++ { + s.Update(1) + } + b.StopTimer() + runtime.GC() + runtime.ReadMemStats(&memStats) + b.Logf("GC cost: %d ns/op", int(memStats.PauseTotalNs-pauseTotalNs)/b.N) +} + +func testExpDecaySampleStatistics(t *testing.T, s Sample) { + if count := s.Count(); 10000 != count { + t.Errorf("s.Count(): 10000 != %v\n", count) + } + if min := s.Min(); 107 != min { + t.Errorf("s.Min(): 107 != %v\n", min) + } + if max := s.Max(); 10000 != max { + t.Errorf("s.Max(): 10000 != %v\n", max) + } + if mean := s.Mean(); 4965.98 != mean { + t.Errorf("s.Mean(): 4965.98 != %v\n", mean) + } + if stdDev := s.StdDev(); 2959.825156930727 != stdDev { + t.Errorf("s.StdDev(): 2959.825156930727 != %v\n", stdDev) + } + ps := s.Percentiles([]float64{0.5, 0.75, 0.99}) + if 4615 != ps[0] { + t.Errorf("median: 4615 != %v\n", ps[0]) + } + if 7672 != ps[1] { + t.Errorf("75th percentile: 7672 != %v\n", ps[1]) + } + if 9998.99 != ps[2] { + t.Errorf("99th percentile: 9998.99 != %v\n", ps[2]) + } +} + +func testUniformSampleStatistics(t *testing.T, s Sample) { + if count := s.Count(); 10000 != count { + t.Errorf("s.Count(): 10000 != %v\n", count) + } + if min := s.Min(); 37 != min { + t.Errorf("s.Min(): 37 != %v\n", min) + } + if max := s.Max(); 9989 != max { + t.Errorf("s.Max(): 9989 != %v\n", max) + } + if mean := s.Mean(); 4748.14 != mean { + t.Errorf("s.Mean(): 4748.14 != %v\n", mean) + } + if stdDev := s.StdDev(); 2826.684117548333 != stdDev { + t.Errorf("s.StdDev(): 2826.684117548333 != %v\n", stdDev) + } + ps := s.Percentiles([]float64{0.5, 0.75, 0.99}) + if 4599 != ps[0] { + t.Errorf("median: 4599 != %v\n", ps[0]) + } + if 7380.5 != ps[1] { + t.Errorf("75th percentile: 7380.5 != %v\n", ps[1]) + } + if 9986.429999999998 != ps[2] { + t.Errorf("99th percentile: 9986.429999999998 != %v\n", ps[2]) + } +} + +// TestUniformSampleConcurrentUpdateCount would expose data race problems with +// concurrent Update and Count calls on Sample when test is called with -race +// argument +func TestUniformSampleConcurrentUpdateCount(t *testing.T) { + if testing.Short() { + t.Skip("skipping in short mode") + } + s := NewUniformSample(100) + for i := 0; i < 100; i++ { + s.Update(int64(i)) + } + quit := make(chan struct{}) + go func() { + t := time.NewTicker(10 * time.Millisecond) + for { + select { + case <-t.C: + s.Update(rand.Int63()) + case <-quit: + t.Stop() + return + } + } + }() + for i := 0; i < 1000; i++ { + s.Count() + time.Sleep(5 * time.Millisecond) + } + quit <- struct{}{} +} diff --git a/Godeps/_workspace/src/github.com/rcrowley/go-metrics/stathat/stathat.go b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/stathat/stathat.go new file mode 100644 index 0000000000..0afcb48482 --- /dev/null +++ b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/stathat/stathat.go @@ -0,0 +1,69 @@ +// Metrics output to StatHat. +package stathat + +import ( + "github.com/rcrowley/go-metrics" + "github.com/stathat/go" + "log" + "time" +) + +func Stathat(r metrics.Registry, d time.Duration, userkey string) { + for { + if err := sh(r, userkey); nil != err { + log.Println(err) + } + time.Sleep(d) + } +} + +func sh(r metrics.Registry, userkey string) error { + r.Each(func(name string, i interface{}) { + switch metric := i.(type) { + case metrics.Counter: + stathat.PostEZCount(name, userkey, int(metric.Count())) + case metrics.Gauge: + stathat.PostEZValue(name, userkey, float64(metric.Value())) + case metrics.GaugeFloat64: + stathat.PostEZValue(name, userkey, float64(metric.Value())) + case metrics.Histogram: + h := metric.Snapshot() + ps := h.Percentiles([]float64{0.5, 0.75, 0.95, 0.99, 0.999}) + stathat.PostEZCount(name+".count", userkey, int(h.Count())) + stathat.PostEZValue(name+".min", userkey, float64(h.Min())) + stathat.PostEZValue(name+".max", userkey, float64(h.Max())) + stathat.PostEZValue(name+".mean", userkey, float64(h.Mean())) + stathat.PostEZValue(name+".std-dev", userkey, float64(h.StdDev())) + stathat.PostEZValue(name+".50-percentile", userkey, float64(ps[0])) + stathat.PostEZValue(name+".75-percentile", userkey, float64(ps[1])) + stathat.PostEZValue(name+".95-percentile", userkey, float64(ps[2])) + stathat.PostEZValue(name+".99-percentile", userkey, float64(ps[3])) + stathat.PostEZValue(name+".999-percentile", userkey, float64(ps[4])) + case metrics.Meter: + m := metric.Snapshot() + stathat.PostEZCount(name+".count", userkey, int(m.Count())) + stathat.PostEZValue(name+".one-minute", userkey, float64(m.Rate1())) + stathat.PostEZValue(name+".five-minute", userkey, float64(m.Rate5())) + stathat.PostEZValue(name+".fifteen-minute", userkey, float64(m.Rate15())) + stathat.PostEZValue(name+".mean", userkey, float64(m.RateMean())) + case metrics.Timer: + t := metric.Snapshot() + ps := t.Percentiles([]float64{0.5, 0.75, 0.95, 0.99, 0.999}) + stathat.PostEZCount(name+".count", userkey, int(t.Count())) + stathat.PostEZValue(name+".min", userkey, float64(t.Min())) + stathat.PostEZValue(name+".max", userkey, float64(t.Max())) + stathat.PostEZValue(name+".mean", userkey, float64(t.Mean())) + stathat.PostEZValue(name+".std-dev", userkey, float64(t.StdDev())) + stathat.PostEZValue(name+".50-percentile", userkey, float64(ps[0])) + stathat.PostEZValue(name+".75-percentile", userkey, float64(ps[1])) + stathat.PostEZValue(name+".95-percentile", userkey, float64(ps[2])) + stathat.PostEZValue(name+".99-percentile", userkey, float64(ps[3])) + stathat.PostEZValue(name+".999-percentile", userkey, float64(ps[4])) + stathat.PostEZValue(name+".one-minute", userkey, float64(t.Rate1())) + stathat.PostEZValue(name+".five-minute", userkey, float64(t.Rate5())) + stathat.PostEZValue(name+".fifteen-minute", userkey, float64(t.Rate15())) + stathat.PostEZValue(name+".mean-rate", userkey, float64(t.RateMean())) + } + }) + return nil +} diff --git a/Godeps/_workspace/src/github.com/rcrowley/go-metrics/syslog.go b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/syslog.go new file mode 100644 index 0000000000..693f190855 --- /dev/null +++ b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/syslog.go @@ -0,0 +1,78 @@ +// +build !windows + +package metrics + +import ( + "fmt" + "log/syslog" + "time" +) + +// Output each metric in the given registry to syslog periodically using +// the given syslogger. +func Syslog(r Registry, d time.Duration, w *syslog.Writer) { + for _ = range time.Tick(d) { + r.Each(func(name string, i interface{}) { + switch metric := i.(type) { + case Counter: + w.Info(fmt.Sprintf("counter %s: count: %d", name, metric.Count())) + case Gauge: + w.Info(fmt.Sprintf("gauge %s: value: %d", name, metric.Value())) + case GaugeFloat64: + w.Info(fmt.Sprintf("gauge %s: value: %f", name, metric.Value())) + case Healthcheck: + metric.Check() + w.Info(fmt.Sprintf("healthcheck %s: error: %v", name, metric.Error())) + case Histogram: + h := metric.Snapshot() + ps := h.Percentiles([]float64{0.5, 0.75, 0.95, 0.99, 0.999}) + w.Info(fmt.Sprintf( + "histogram %s: count: %d min: %d max: %d mean: %.2f stddev: %.2f median: %.2f 75%%: %.2f 95%%: %.2f 99%%: %.2f 99.9%%: %.2f", + name, + h.Count(), + h.Min(), + h.Max(), + h.Mean(), + h.StdDev(), + ps[0], + ps[1], + ps[2], + ps[3], + ps[4], + )) + case Meter: + m := metric.Snapshot() + w.Info(fmt.Sprintf( + "meter %s: count: %d 1-min: %.2f 5-min: %.2f 15-min: %.2f mean: %.2f", + name, + m.Count(), + m.Rate1(), + m.Rate5(), + m.Rate15(), + m.RateMean(), + )) + case Timer: + t := metric.Snapshot() + ps := t.Percentiles([]float64{0.5, 0.75, 0.95, 0.99, 0.999}) + w.Info(fmt.Sprintf( + "timer %s: count: %d min: %d max: %d mean: %.2f stddev: %.2f median: %.2f 75%%: %.2f 95%%: %.2f 99%%: %.2f 99.9%%: %.2f 1-min: %.2f 5-min: %.2f 15-min: %.2f mean-rate: %.2f", + name, + t.Count(), + t.Min(), + t.Max(), + t.Mean(), + t.StdDev(), + ps[0], + ps[1], + ps[2], + ps[3], + ps[4], + t.Rate1(), + t.Rate5(), + t.Rate15(), + t.RateMean(), + )) + } + }) + } +} diff --git a/Godeps/_workspace/src/github.com/rcrowley/go-metrics/timer.go b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/timer.go new file mode 100644 index 0000000000..17db8f8d20 --- /dev/null +++ b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/timer.go @@ -0,0 +1,311 @@ +package metrics + +import ( + "sync" + "time" +) + +// Timers capture the duration and rate of events. +type Timer interface { + Count() int64 + Max() int64 + Mean() float64 + Min() int64 + Percentile(float64) float64 + Percentiles([]float64) []float64 + Rate1() float64 + Rate5() float64 + Rate15() float64 + RateMean() float64 + Snapshot() Timer + StdDev() float64 + Sum() int64 + Time(func()) + Update(time.Duration) + UpdateSince(time.Time) + Variance() float64 +} + +// GetOrRegisterTimer returns an existing Timer or constructs and registers a +// new StandardTimer. +func GetOrRegisterTimer(name string, r Registry) Timer { + if nil == r { + r = DefaultRegistry + } + return r.GetOrRegister(name, NewTimer).(Timer) +} + +// NewCustomTimer constructs a new StandardTimer from a Histogram and a Meter. +func NewCustomTimer(h Histogram, m Meter) Timer { + if UseNilMetrics { + return NilTimer{} + } + return &StandardTimer{ + histogram: h, + meter: m, + } +} + +// NewRegisteredTimer constructs and registers a new StandardTimer. +func NewRegisteredTimer(name string, r Registry) Timer { + c := NewTimer() + if nil == r { + r = DefaultRegistry + } + r.Register(name, c) + return c +} + +// NewTimer constructs a new StandardTimer using an exponentially-decaying +// sample with the same reservoir size and alpha as UNIX load averages. +func NewTimer() Timer { + if UseNilMetrics { + return NilTimer{} + } + return &StandardTimer{ + histogram: NewHistogram(NewExpDecaySample(1028, 0.015)), + meter: NewMeter(), + } +} + +// NilTimer is a no-op Timer. +type NilTimer struct { + h Histogram + m Meter +} + +// Count is a no-op. +func (NilTimer) Count() int64 { return 0 } + +// Max is a no-op. +func (NilTimer) Max() int64 { return 0 } + +// Mean is a no-op. +func (NilTimer) Mean() float64 { return 0.0 } + +// Min is a no-op. +func (NilTimer) Min() int64 { return 0 } + +// Percentile is a no-op. +func (NilTimer) Percentile(p float64) float64 { return 0.0 } + +// Percentiles is a no-op. +func (NilTimer) Percentiles(ps []float64) []float64 { + return make([]float64, len(ps)) +} + +// Rate1 is a no-op. +func (NilTimer) Rate1() float64 { return 0.0 } + +// Rate5 is a no-op. +func (NilTimer) Rate5() float64 { return 0.0 } + +// Rate15 is a no-op. +func (NilTimer) Rate15() float64 { return 0.0 } + +// RateMean is a no-op. +func (NilTimer) RateMean() float64 { return 0.0 } + +// Snapshot is a no-op. +func (NilTimer) Snapshot() Timer { return NilTimer{} } + +// StdDev is a no-op. +func (NilTimer) StdDev() float64 { return 0.0 } + +// Sum is a no-op. +func (NilTimer) Sum() int64 { return 0 } + +// Time is a no-op. +func (NilTimer) Time(func()) {} + +// Update is a no-op. +func (NilTimer) Update(time.Duration) {} + +// UpdateSince is a no-op. +func (NilTimer) UpdateSince(time.Time) {} + +// Variance is a no-op. +func (NilTimer) Variance() float64 { return 0.0 } + +// StandardTimer is the standard implementation of a Timer and uses a Histogram +// and Meter. +type StandardTimer struct { + histogram Histogram + meter Meter + mutex sync.Mutex +} + +// Count returns the number of events recorded. +func (t *StandardTimer) Count() int64 { + return t.histogram.Count() +} + +// Max returns the maximum value in the sample. +func (t *StandardTimer) Max() int64 { + return t.histogram.Max() +} + +// Mean returns the mean of the values in the sample. +func (t *StandardTimer) Mean() float64 { + return t.histogram.Mean() +} + +// Min returns the minimum value in the sample. +func (t *StandardTimer) Min() int64 { + return t.histogram.Min() +} + +// Percentile returns an arbitrary percentile of the values in the sample. +func (t *StandardTimer) Percentile(p float64) float64 { + return t.histogram.Percentile(p) +} + +// Percentiles returns a slice of arbitrary percentiles of the values in the +// sample. +func (t *StandardTimer) Percentiles(ps []float64) []float64 { + return t.histogram.Percentiles(ps) +} + +// Rate1 returns the one-minute moving average rate of events per second. +func (t *StandardTimer) Rate1() float64 { + return t.meter.Rate1() +} + +// Rate5 returns the five-minute moving average rate of events per second. +func (t *StandardTimer) Rate5() float64 { + return t.meter.Rate5() +} + +// Rate15 returns the fifteen-minute moving average rate of events per second. +func (t *StandardTimer) Rate15() float64 { + return t.meter.Rate15() +} + +// RateMean returns the meter's mean rate of events per second. +func (t *StandardTimer) RateMean() float64 { + return t.meter.RateMean() +} + +// Snapshot returns a read-only copy of the timer. +func (t *StandardTimer) Snapshot() Timer { + t.mutex.Lock() + defer t.mutex.Unlock() + return &TimerSnapshot{ + histogram: t.histogram.Snapshot().(*HistogramSnapshot), + meter: t.meter.Snapshot().(*MeterSnapshot), + } +} + +// StdDev returns the standard deviation of the values in the sample. +func (t *StandardTimer) StdDev() float64 { + return t.histogram.StdDev() +} + +// Sum returns the sum in the sample. +func (t *StandardTimer) Sum() int64 { + return t.histogram.Sum() +} + +// Record the duration of the execution of the given function. +func (t *StandardTimer) Time(f func()) { + ts := time.Now() + f() + t.Update(time.Since(ts)) +} + +// Record the duration of an event. +func (t *StandardTimer) Update(d time.Duration) { + t.mutex.Lock() + defer t.mutex.Unlock() + t.histogram.Update(int64(d)) + t.meter.Mark(1) +} + +// Record the duration of an event that started at a time and ends now. +func (t *StandardTimer) UpdateSince(ts time.Time) { + t.mutex.Lock() + defer t.mutex.Unlock() + t.histogram.Update(int64(time.Since(ts))) + t.meter.Mark(1) +} + +// Variance returns the variance of the values in the sample. +func (t *StandardTimer) Variance() float64 { + return t.histogram.Variance() +} + +// TimerSnapshot is a read-only copy of another Timer. +type TimerSnapshot struct { + histogram *HistogramSnapshot + meter *MeterSnapshot +} + +// Count returns the number of events recorded at the time the snapshot was +// taken. +func (t *TimerSnapshot) Count() int64 { return t.histogram.Count() } + +// Max returns the maximum value at the time the snapshot was taken. +func (t *TimerSnapshot) Max() int64 { return t.histogram.Max() } + +// Mean returns the mean value at the time the snapshot was taken. +func (t *TimerSnapshot) Mean() float64 { return t.histogram.Mean() } + +// Min returns the minimum value at the time the snapshot was taken. +func (t *TimerSnapshot) Min() int64 { return t.histogram.Min() } + +// Percentile returns an arbitrary percentile of sampled values at the time the +// snapshot was taken. +func (t *TimerSnapshot) Percentile(p float64) float64 { + return t.histogram.Percentile(p) +} + +// Percentiles returns a slice of arbitrary percentiles of sampled values at +// the time the snapshot was taken. +func (t *TimerSnapshot) Percentiles(ps []float64) []float64 { + return t.histogram.Percentiles(ps) +} + +// Rate1 returns the one-minute moving average rate of events per second at the +// time the snapshot was taken. +func (t *TimerSnapshot) Rate1() float64 { return t.meter.Rate1() } + +// Rate5 returns the five-minute moving average rate of events per second at +// the time the snapshot was taken. +func (t *TimerSnapshot) Rate5() float64 { return t.meter.Rate5() } + +// Rate15 returns the fifteen-minute moving average rate of events per second +// at the time the snapshot was taken. +func (t *TimerSnapshot) Rate15() float64 { return t.meter.Rate15() } + +// RateMean returns the meter's mean rate of events per second at the time the +// snapshot was taken. +func (t *TimerSnapshot) RateMean() float64 { return t.meter.RateMean() } + +// Snapshot returns the snapshot. +func (t *TimerSnapshot) Snapshot() Timer { return t } + +// StdDev returns the standard deviation of the values at the time the snapshot +// was taken. +func (t *TimerSnapshot) StdDev() float64 { return t.histogram.StdDev() } + +// Sum returns the sum at the time the snapshot was taken. +func (t *TimerSnapshot) Sum() int64 { return t.histogram.Sum() } + +// Time panics. +func (*TimerSnapshot) Time(func()) { + panic("Time called on a TimerSnapshot") +} + +// Update panics. +func (*TimerSnapshot) Update(time.Duration) { + panic("Update called on a TimerSnapshot") +} + +// UpdateSince panics. +func (*TimerSnapshot) UpdateSince(time.Time) { + panic("UpdateSince called on a TimerSnapshot") +} + +// Variance returns the variance of the values at the time the snapshot was +// taken. +func (t *TimerSnapshot) Variance() float64 { return t.histogram.Variance() } diff --git a/Godeps/_workspace/src/github.com/rcrowley/go-metrics/timer_test.go b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/timer_test.go new file mode 100644 index 0000000000..2fa415d40e --- /dev/null +++ b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/timer_test.go @@ -0,0 +1,81 @@ +package metrics + +import ( + "math" + "testing" + "time" +) + +func BenchmarkTimer(b *testing.B) { + tm := NewTimer() + b.ResetTimer() + for i := 0; i < b.N; i++ { + tm.Update(1) + } +} + +func TestGetOrRegisterTimer(t *testing.T) { + r := NewRegistry() + NewRegisteredTimer("foo", r).Update(47) + if tm := GetOrRegisterTimer("foo", r); 1 != tm.Count() { + t.Fatal(tm) + } +} + +func TestTimerExtremes(t *testing.T) { + tm := NewTimer() + tm.Update(math.MaxInt64) + tm.Update(0) + if stdDev := tm.StdDev(); 4.611686018427388e+18 != stdDev { + t.Errorf("tm.StdDev(): 4.611686018427388e+18 != %v\n", stdDev) + } +} + +func TestTimerFunc(t *testing.T) { + tm := NewTimer() + tm.Time(func() { time.Sleep(50e6) }) + if max := tm.Max(); 45e6 > max || max > 55e6 { + t.Errorf("tm.Max(): 45e6 > %v || %v > 55e6\n", max, max) + } +} + +func TestTimerZero(t *testing.T) { + tm := NewTimer() + if count := tm.Count(); 0 != count { + t.Errorf("tm.Count(): 0 != %v\n", count) + } + if min := tm.Min(); 0 != min { + t.Errorf("tm.Min(): 0 != %v\n", min) + } + if max := tm.Max(); 0 != max { + t.Errorf("tm.Max(): 0 != %v\n", max) + } + if mean := tm.Mean(); 0.0 != mean { + t.Errorf("tm.Mean(): 0.0 != %v\n", mean) + } + if stdDev := tm.StdDev(); 0.0 != stdDev { + t.Errorf("tm.StdDev(): 0.0 != %v\n", stdDev) + } + ps := tm.Percentiles([]float64{0.5, 0.75, 0.99}) + if 0.0 != ps[0] { + t.Errorf("median: 0.0 != %v\n", ps[0]) + } + if 0.0 != ps[1] { + t.Errorf("75th percentile: 0.0 != %v\n", ps[1]) + } + if 0.0 != ps[2] { + t.Errorf("99th percentile: 0.0 != %v\n", ps[2]) + } + if rate1 := tm.Rate1(); 0.0 != rate1 { + t.Errorf("tm.Rate1(): 0.0 != %v\n", rate1) + } + if rate5 := tm.Rate5(); 0.0 != rate5 { + t.Errorf("tm.Rate5(): 0.0 != %v\n", rate5) + } + if rate15 := tm.Rate15(); 0.0 != rate15 { + t.Errorf("tm.Rate15(): 0.0 != %v\n", rate15) + } + if rateMean := tm.RateMean(); 0.0 != rateMean { + t.Errorf("tm.RateMean(): 0.0 != %v\n", rateMean) + } +} diff --git a/Godeps/_workspace/src/github.com/rcrowley/go-metrics/writer.go b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/writer.go new file mode 100644 index 0000000000..091e971d2e --- /dev/null +++ b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/writer.go @@ -0,0 +1,100 @@ +package metrics + +import ( + "fmt" + "io" + "sort" + "time" +) + +// Write sorts writes each metric in the given registry periodically to the +// given io.Writer. +func Write(r Registry, d time.Duration, w io.Writer) { + for _ = range time.Tick(d) { + WriteOnce(r, w) + } +} + +// WriteOnce sorts and writes metrics in the given registry to the given +// io.Writer. +func WriteOnce(r Registry, w io.Writer) { + var namedMetrics namedMetricSlice + r.Each(func(name string, i interface{}) { + namedMetrics = append(namedMetrics, namedMetric{name, i}) + }) + + sort.Sort(namedMetrics) + for _, namedMetric := range namedMetrics { + switch metric := namedMetric.m.(type) { + case Counter: + fmt.Fprintf(w, "counter %s\n", namedMetric.name) + fmt.Fprintf(w, " count: %9d\n", metric.Count()) + case Gauge: + fmt.Fprintf(w, "gauge %s\n", namedMetric.name) + fmt.Fprintf(w, " value: %9d\n", metric.Value()) + case GaugeFloat64: + fmt.Fprintf(w, "gauge %s\n", namedMetric.name) + fmt.Fprintf(w, " value: %f\n", metric.Value()) + case Healthcheck: + metric.Check() + fmt.Fprintf(w, "healthcheck %s\n", namedMetric.name) + fmt.Fprintf(w, " error: %v\n", metric.Error()) + case Histogram: + h := metric.Snapshot() + ps := h.Percentiles([]float64{0.5, 0.75, 0.95, 0.99, 0.999}) + fmt.Fprintf(w, "histogram %s\n", namedMetric.name) + fmt.Fprintf(w, " count: %9d\n", h.Count()) + fmt.Fprintf(w, " min: %9d\n", h.Min()) + fmt.Fprintf(w, " max: %9d\n", h.Max()) + fmt.Fprintf(w, " mean: %12.2f\n", h.Mean()) + fmt.Fprintf(w, " stddev: %12.2f\n", h.StdDev()) + fmt.Fprintf(w, " median: %12.2f\n", ps[0]) + fmt.Fprintf(w, " 75%%: %12.2f\n", ps[1]) + fmt.Fprintf(w, " 95%%: %12.2f\n", ps[2]) + fmt.Fprintf(w, " 99%%: %12.2f\n", ps[3]) + fmt.Fprintf(w, " 99.9%%: %12.2f\n", ps[4]) + case Meter: + m := metric.Snapshot() + fmt.Fprintf(w, "meter %s\n", namedMetric.name) + fmt.Fprintf(w, " count: %9d\n", m.Count()) + fmt.Fprintf(w, " 1-min rate: %12.2f\n", m.Rate1()) + fmt.Fprintf(w, " 5-min rate: %12.2f\n", m.Rate5()) + fmt.Fprintf(w, " 15-min rate: %12.2f\n", m.Rate15()) + fmt.Fprintf(w, " mean rate: %12.2f\n", m.RateMean()) + case Timer: + t := metric.Snapshot() + ps := t.Percentiles([]float64{0.5, 0.75, 0.95, 0.99, 0.999}) + fmt.Fprintf(w, "timer %s\n", namedMetric.name) + fmt.Fprintf(w, " count: %9d\n", t.Count()) + fmt.Fprintf(w, " min: %9d\n", t.Min()) + fmt.Fprintf(w, " max: %9d\n", t.Max()) + fmt.Fprintf(w, " mean: %12.2f\n", t.Mean()) + fmt.Fprintf(w, " stddev: %12.2f\n", t.StdDev()) + fmt.Fprintf(w, " median: %12.2f\n", ps[0]) + fmt.Fprintf(w, " 75%%: %12.2f\n", ps[1]) + fmt.Fprintf(w, " 95%%: %12.2f\n", ps[2]) + fmt.Fprintf(w, " 99%%: %12.2f\n", ps[3]) + fmt.Fprintf(w, " 99.9%%: %12.2f\n", ps[4]) + fmt.Fprintf(w, " 1-min rate: %12.2f\n", t.Rate1()) + fmt.Fprintf(w, " 5-min rate: %12.2f\n", t.Rate5()) + fmt.Fprintf(w, " 15-min rate: %12.2f\n", t.Rate15()) + fmt.Fprintf(w, " mean rate: %12.2f\n", t.RateMean()) + } + } +} + +type namedMetric struct { + name string + m interface{} +} + +// namedMetricSlice is a slice of namedMetrics that implements sort.Interface. +type namedMetricSlice []namedMetric + +func (nms namedMetricSlice) Len() int { return len(nms) } + +func (nms namedMetricSlice) Swap(i, j int) { nms[i], nms[j] = nms[j], nms[i] } + +func (nms namedMetricSlice) Less(i, j int) bool { + return nms[i].name < nms[j].name +} diff --git a/Godeps/_workspace/src/github.com/rcrowley/go-metrics/writer_test.go b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/writer_test.go new file mode 100644 index 0000000000..1aacc28712 --- /dev/null +++ b/Godeps/_workspace/src/github.com/rcrowley/go-metrics/writer_test.go @@ -0,0 +1,22 @@ +package metrics + +import ( + "sort" + "testing" +) + +func TestMetricsSorting(t *testing.T) { + var namedMetrics = namedMetricSlice{ + {name: "zzz"}, + {name: "bbb"}, + {name: "fff"}, + {name: "ggg"}, + } + + sort.Sort(namedMetrics) + for i, name := range []string{"bbb", "fff", "ggg", "zzz"} { + if namedMetrics[i].name != name { + t.Fail() + } + } +} From 43e4a6501beb42bc0f4fffcbcb1e3f5fe58b6062 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= Date: Mon, 22 Jun 2015 12:01:27 +0300 Subject: [PATCH 045/156] core, ethdb: instrument the block and state db Conflicts: ethdb/database.go --- core/chain_manager.go | 15 ++++++++++++++- ethdb/database.go | 19 ++++++++++++++----- 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/core/chain_manager.go b/core/chain_manager.go index 6a017b63f5..b87f65893f 100644 --- a/core/chain_manager.go +++ b/core/chain_manager.go @@ -13,6 +13,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/event" "github.com/ethereum/go-ethereum/logger" "github.com/ethereum/go-ethereum/logger/glog" @@ -30,6 +31,10 @@ var ( blockNumPre = []byte("block-num-") blockInsertTimer = metrics.GetOrRegisterTimer("core/BlockInsertions", metrics.DefaultRegistry) + blockdbGetMeter = metrics.GetOrRegisterMeter("core/blockdb/Gets", metrics.DefaultRegistry) + blockdbPutMeter = metrics.GetOrRegisterMeter("core/blockdb/Puts", metrics.DefaultRegistry) + statedbGetMeter = metrics.GetOrRegisterMeter("core/statedb/Gets", metrics.DefaultRegistry) + statedbPutMeter = metrics.GetOrRegisterMeter("core/statedb/Puts", metrics.DefaultRegistry) ) const ( @@ -121,7 +126,15 @@ func NewChainManager(genesis *types.Block, blockDb, stateDb common.Database, pow cache: NewBlockCache(blockCacheLimit), pow: pow, } - + // Instrument the block and state databases + if db, ok := blockDb.(*ethdb.LDBDatabase); ok { + db.GetMeter = blockdbGetMeter + db.PutMeter = blockdbPutMeter + } + if db, ok := stateDb.(*ethdb.LDBDatabase); ok { + db.GetMeter = statedbGetMeter + db.PutMeter = statedbPutMeter + } // Check the genesis block given to the chain manager. If the genesis block mismatches block number 0 // throw an error. If no block or the same block's found continue. if g := bc.GetBlockByNumber(0); g != nil && g.Hash() != genesis.Hash() { diff --git a/ethdb/database.go b/ethdb/database.go index 5faf8c4e0d..48cb37f7c5 100644 --- a/ethdb/database.go +++ b/ethdb/database.go @@ -4,6 +4,7 @@ import ( "github.com/ethereum/go-ethereum/compression/rle" "github.com/ethereum/go-ethereum/logger" "github.com/ethereum/go-ethereum/logger/glog" + "github.com/rcrowley/go-metrics" "github.com/syndtr/goleveldb/leveldb" "github.com/syndtr/goleveldb/leveldb/errors" "github.com/syndtr/goleveldb/leveldb/iterator" @@ -13,10 +14,11 @@ import ( var OpenFileLimit = 64 type LDBDatabase struct { - // filename for reporting - fn string - // LevelDB instance - db *leveldb.DB + fn string // filename for reporting + db *leveldb.DB // LevelDB instance + + GetMeter metrics.Meter // Meter for measuring the database get requests + PutMeter metrics.Meter // Meter for measuring the database put requests } // NewLDBDatabase returns a LevelDB wrapped object. LDBDatabase does not persist data by @@ -43,7 +45,11 @@ func NewLDBDatabase(file string) (*LDBDatabase, error) { // Put puts the given key / value to the queue func (self *LDBDatabase) Put(key []byte, value []byte) error { - return self.db.Put(key, rle.Compress(value), nil) + dat := rle.Compress(value) + if self.PutMeter != nil { + self.PutMeter.Mark(int64(len(dat))) + } + return self.db.Put(key, dat, nil) } // Get returns the given key if it's present. @@ -52,6 +58,9 @@ func (self *LDBDatabase) Get(key []byte) ([]byte, error) { if err != nil { return nil, err } + if self.GetMeter != nil { + self.GetMeter.Mark(int64(len(dat))) + } return rle.Decompress(dat) } From 6260b86c153abfd1d4c96fa558ed20e80c6c0e4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= Date: Mon, 22 Jun 2015 12:14:07 +0300 Subject: [PATCH 046/156] eth/fetcher: fix failed merge --- eth/fetcher/fetcher.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eth/fetcher/fetcher.go b/eth/fetcher/fetcher.go index a8f0dddbd4..13c65121b5 100644 --- a/eth/fetcher/fetcher.go +++ b/eth/fetcher/fetcher.go @@ -380,7 +380,7 @@ func (f *Fetcher) enqueue(peer string, block *types.Block) { // Discard any past or too distant blocks if dist := int64(block.NumberU64()) - int64(f.chainHeight()); dist < -maxUncleDist || dist > maxQueueDist { glog.V(logger.Debug).Infof("Peer %s: discarded block #%d [%x], distance %d", peer, block.NumberU64(), hash.Bytes()[:4], dist) - f.discardStats.Mark(1) + f.discardMeter.Mark(1) return } // Schedule the block for future importing From 792b0ddccdf135a8d9c33298bcb20d7bafb79a0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= Date: Tue, 23 Jun 2015 13:03:33 +0300 Subject: [PATCH 047/156] core, eth, eth/fetcher, ethdb: polish metrics gathering a bit --- core/chain_manager.go | 14 -------------- eth/backend.go | 19 +++++++++++++++++++ eth/fetcher/fetcher.go | 10 +++++----- ethdb/database.go | 20 ++++++++++++++++---- 4 files changed, 40 insertions(+), 23 deletions(-) diff --git a/core/chain_manager.go b/core/chain_manager.go index b87f65893f..3b9b7517be 100644 --- a/core/chain_manager.go +++ b/core/chain_manager.go @@ -13,7 +13,6 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/event" "github.com/ethereum/go-ethereum/logger" "github.com/ethereum/go-ethereum/logger/glog" @@ -31,10 +30,6 @@ var ( blockNumPre = []byte("block-num-") blockInsertTimer = metrics.GetOrRegisterTimer("core/BlockInsertions", metrics.DefaultRegistry) - blockdbGetMeter = metrics.GetOrRegisterMeter("core/blockdb/Gets", metrics.DefaultRegistry) - blockdbPutMeter = metrics.GetOrRegisterMeter("core/blockdb/Puts", metrics.DefaultRegistry) - statedbGetMeter = metrics.GetOrRegisterMeter("core/statedb/Gets", metrics.DefaultRegistry) - statedbPutMeter = metrics.GetOrRegisterMeter("core/statedb/Puts", metrics.DefaultRegistry) ) const ( @@ -126,15 +121,6 @@ func NewChainManager(genesis *types.Block, blockDb, stateDb common.Database, pow cache: NewBlockCache(blockCacheLimit), pow: pow, } - // Instrument the block and state databases - if db, ok := blockDb.(*ethdb.LDBDatabase); ok { - db.GetMeter = blockdbGetMeter - db.PutMeter = blockdbPutMeter - } - if db, ok := stateDb.(*ethdb.LDBDatabase); ok { - db.GetMeter = statedbGetMeter - db.PutMeter = statedbPutMeter - } // Check the genesis block given to the chain manager. If the genesis block mismatches block number 0 // throw an error. If no block or the same block's found continue. if g := bc.GetBlockByNumber(0); g != nil && g.Hash() != genesis.Hash() { diff --git a/eth/backend.go b/eth/backend.go index 37fe66abfa..5969c238c6 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -29,6 +29,7 @@ import ( "github.com/ethereum/go-ethereum/p2p/discover" "github.com/ethereum/go-ethereum/p2p/nat" "github.com/ethereum/go-ethereum/whisper" + "github.com/rcrowley/go-metrics" ) const ( @@ -248,14 +249,32 @@ func New(config *Config) (*Ethereum, error) { if err != nil { return nil, fmt.Errorf("blockchain db err: %v", err) } + blockDb.(*ethdb.LDBDatabase).GetMeter = metrics.GetOrRegisterMeter("eth/db/block/Gets", metrics.DefaultRegistry) + blockDb.(*ethdb.LDBDatabase).PutMeter = metrics.GetOrRegisterMeter("eth/db/block/Puts", metrics.DefaultRegistry) + blockDb.(*ethdb.LDBDatabase).DelMeter = metrics.GetOrRegisterMeter("eth/db/block/Dels", metrics.DefaultRegistry) + blockDb.(*ethdb.LDBDatabase).ReadMeter = metrics.GetOrRegisterMeter("eth/db/block/Reads", metrics.DefaultRegistry) + blockDb.(*ethdb.LDBDatabase).WriteMeter = metrics.GetOrRegisterMeter("eth/db/block/Writes", metrics.DefaultRegistry) + stateDb, err := newdb(filepath.Join(config.DataDir, "state")) if err != nil { return nil, fmt.Errorf("state db err: %v", err) } + stateDb.(*ethdb.LDBDatabase).GetMeter = metrics.GetOrRegisterMeter("eth/db/state/Gets", metrics.DefaultRegistry) + stateDb.(*ethdb.LDBDatabase).PutMeter = metrics.GetOrRegisterMeter("eth/db/state/Puts", metrics.DefaultRegistry) + stateDb.(*ethdb.LDBDatabase).DelMeter = metrics.GetOrRegisterMeter("eth/db/state/Dels", metrics.DefaultRegistry) + stateDb.(*ethdb.LDBDatabase).ReadMeter = metrics.GetOrRegisterMeter("eth/db/state/Reads", metrics.DefaultRegistry) + stateDb.(*ethdb.LDBDatabase).WriteMeter = metrics.GetOrRegisterMeter("eth/db/state/Writes", metrics.DefaultRegistry) + extraDb, err := newdb(filepath.Join(config.DataDir, "extra")) if err != nil { return nil, fmt.Errorf("extra db err: %v", err) } + extraDb.(*ethdb.LDBDatabase).GetMeter = metrics.GetOrRegisterMeter("eth/db/extra/Gets", metrics.DefaultRegistry) + extraDb.(*ethdb.LDBDatabase).PutMeter = metrics.GetOrRegisterMeter("eth/db/extra/Puts", metrics.DefaultRegistry) + extraDb.(*ethdb.LDBDatabase).DelMeter = metrics.GetOrRegisterMeter("eth/db/extra/Dels", metrics.DefaultRegistry) + extraDb.(*ethdb.LDBDatabase).ReadMeter = metrics.GetOrRegisterMeter("eth/db/extra/Reads", metrics.DefaultRegistry) + extraDb.(*ethdb.LDBDatabase).WriteMeter = metrics.GetOrRegisterMeter("eth/db/extra/Writes", metrics.DefaultRegistry) + nodeDb := filepath.Join(config.DataDir, "nodes") // Perform database sanity checks diff --git a/eth/fetcher/fetcher.go b/eth/fetcher/fetcher.go index 13c65121b5..07a32b9f1c 100644 --- a/eth/fetcher/fetcher.go +++ b/eth/fetcher/fetcher.go @@ -126,11 +126,11 @@ func New(getBlock blockRetrievalFn, validateBlock blockValidatorFn, broadcastBlo chainHeight: chainHeight, insertChain: insertChain, dropPeer: dropPeer, - announceMeter: metrics.GetOrRegisterMeter("eth/RemoteAnnounces", metrics.DefaultRegistry), - announceTimer: metrics.GetOrRegisterTimer("eth/LocalAnnounces", metrics.DefaultRegistry), - broadcastMeter: metrics.GetOrRegisterMeter("eth/RemoteBroadcasts", metrics.DefaultRegistry), - broadcastTimer: metrics.GetOrRegisterTimer("eth/LocalBroadcasts", metrics.DefaultRegistry), - discardMeter: metrics.GetOrRegisterMeter("eth/DiscardedBlocks", metrics.DefaultRegistry), + announceMeter: metrics.GetOrRegisterMeter("eth/sync/RemoteAnnounces", metrics.DefaultRegistry), + announceTimer: metrics.GetOrRegisterTimer("eth/sync/LocalAnnounces", metrics.DefaultRegistry), + broadcastMeter: metrics.GetOrRegisterMeter("eth/sync/RemoteBroadcasts", metrics.DefaultRegistry), + broadcastTimer: metrics.GetOrRegisterTimer("eth/sync/LocalBroadcasts", metrics.DefaultRegistry), + discardMeter: metrics.GetOrRegisterMeter("eth/sync/DiscardedBlocks", metrics.DefaultRegistry), } } diff --git a/ethdb/database.go b/ethdb/database.go index 48cb37f7c5..13b4ef449a 100644 --- a/ethdb/database.go +++ b/ethdb/database.go @@ -17,8 +17,11 @@ type LDBDatabase struct { fn string // filename for reporting db *leveldb.DB // LevelDB instance - GetMeter metrics.Meter // Meter for measuring the database get requests - PutMeter metrics.Meter // Meter for measuring the database put requests + GetMeter metrics.Meter // Meter for measuring the database get request counts + PutMeter metrics.Meter // Meter for measuring the database put request counts + DelMeter metrics.Meter // Meter for measuring the database delete request counts + ReadMeter metrics.Meter // Meter for measuring the database get request data usage + WriteMeter metrics.Meter // Meter for measuring the database put request data usage } // NewLDBDatabase returns a LevelDB wrapped object. LDBDatabase does not persist data by @@ -47,7 +50,10 @@ func NewLDBDatabase(file string) (*LDBDatabase, error) { func (self *LDBDatabase) Put(key []byte, value []byte) error { dat := rle.Compress(value) if self.PutMeter != nil { - self.PutMeter.Mark(int64(len(dat))) + self.PutMeter.Mark(1) + } + if self.WriteMeter != nil { + self.WriteMeter.Mark(int64(len(dat))) } return self.db.Put(key, dat, nil) } @@ -59,13 +65,19 @@ func (self *LDBDatabase) Get(key []byte) ([]byte, error) { return nil, err } if self.GetMeter != nil { - self.GetMeter.Mark(int64(len(dat))) + self.GetMeter.Mark(1) + } + if self.ReadMeter != nil { + self.ReadMeter.Mark(int64(len(dat))) } return rle.Decompress(dat) } // Delete deletes the key from the queue and database func (self *LDBDatabase) Delete(key []byte) error { + if self.DelMeter != nil { + self.DelMeter.Mark(1) + } return self.db.Delete(key, nil) } From 0609fcf030f5e93528501e6fea98e096feccec3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= Date: Tue, 23 Jun 2015 15:54:16 +0300 Subject: [PATCH 048/156] eth: make sure dbs are lvldb before instrumenting --- eth/backend.go | 39 +++++++++++++++++++++------------------ 1 file changed, 21 insertions(+), 18 deletions(-) diff --git a/eth/backend.go b/eth/backend.go index 5969c238c6..cef0fe3ab0 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -249,32 +249,35 @@ func New(config *Config) (*Ethereum, error) { if err != nil { return nil, fmt.Errorf("blockchain db err: %v", err) } - blockDb.(*ethdb.LDBDatabase).GetMeter = metrics.GetOrRegisterMeter("eth/db/block/Gets", metrics.DefaultRegistry) - blockDb.(*ethdb.LDBDatabase).PutMeter = metrics.GetOrRegisterMeter("eth/db/block/Puts", metrics.DefaultRegistry) - blockDb.(*ethdb.LDBDatabase).DelMeter = metrics.GetOrRegisterMeter("eth/db/block/Dels", metrics.DefaultRegistry) - blockDb.(*ethdb.LDBDatabase).ReadMeter = metrics.GetOrRegisterMeter("eth/db/block/Reads", metrics.DefaultRegistry) - blockDb.(*ethdb.LDBDatabase).WriteMeter = metrics.GetOrRegisterMeter("eth/db/block/Writes", metrics.DefaultRegistry) - + if db, ok := blockDb.(*ethdb.LDBDatabase); ok { + db.GetMeter = metrics.GetOrRegisterMeter("eth/db/block/Gets", metrics.DefaultRegistry) + db.PutMeter = metrics.GetOrRegisterMeter("eth/db/block/Puts", metrics.DefaultRegistry) + db.DelMeter = metrics.GetOrRegisterMeter("eth/db/block/Dels", metrics.DefaultRegistry) + db.ReadMeter = metrics.GetOrRegisterMeter("eth/db/block/Reads", metrics.DefaultRegistry) + db.WriteMeter = metrics.GetOrRegisterMeter("eth/db/block/Writes", metrics.DefaultRegistry) + } stateDb, err := newdb(filepath.Join(config.DataDir, "state")) if err != nil { return nil, fmt.Errorf("state db err: %v", err) } - stateDb.(*ethdb.LDBDatabase).GetMeter = metrics.GetOrRegisterMeter("eth/db/state/Gets", metrics.DefaultRegistry) - stateDb.(*ethdb.LDBDatabase).PutMeter = metrics.GetOrRegisterMeter("eth/db/state/Puts", metrics.DefaultRegistry) - stateDb.(*ethdb.LDBDatabase).DelMeter = metrics.GetOrRegisterMeter("eth/db/state/Dels", metrics.DefaultRegistry) - stateDb.(*ethdb.LDBDatabase).ReadMeter = metrics.GetOrRegisterMeter("eth/db/state/Reads", metrics.DefaultRegistry) - stateDb.(*ethdb.LDBDatabase).WriteMeter = metrics.GetOrRegisterMeter("eth/db/state/Writes", metrics.DefaultRegistry) - + if db, ok := stateDb.(*ethdb.LDBDatabase); ok { + db.GetMeter = metrics.GetOrRegisterMeter("eth/db/state/Gets", metrics.DefaultRegistry) + db.PutMeter = metrics.GetOrRegisterMeter("eth/db/state/Puts", metrics.DefaultRegistry) + db.DelMeter = metrics.GetOrRegisterMeter("eth/db/state/Dels", metrics.DefaultRegistry) + db.ReadMeter = metrics.GetOrRegisterMeter("eth/db/state/Reads", metrics.DefaultRegistry) + db.WriteMeter = metrics.GetOrRegisterMeter("eth/db/state/Writes", metrics.DefaultRegistry) + } extraDb, err := newdb(filepath.Join(config.DataDir, "extra")) if err != nil { return nil, fmt.Errorf("extra db err: %v", err) } - extraDb.(*ethdb.LDBDatabase).GetMeter = metrics.GetOrRegisterMeter("eth/db/extra/Gets", metrics.DefaultRegistry) - extraDb.(*ethdb.LDBDatabase).PutMeter = metrics.GetOrRegisterMeter("eth/db/extra/Puts", metrics.DefaultRegistry) - extraDb.(*ethdb.LDBDatabase).DelMeter = metrics.GetOrRegisterMeter("eth/db/extra/Dels", metrics.DefaultRegistry) - extraDb.(*ethdb.LDBDatabase).ReadMeter = metrics.GetOrRegisterMeter("eth/db/extra/Reads", metrics.DefaultRegistry) - extraDb.(*ethdb.LDBDatabase).WriteMeter = metrics.GetOrRegisterMeter("eth/db/extra/Writes", metrics.DefaultRegistry) - + if db, ok := extraDb.(*ethdb.LDBDatabase); ok { + db.GetMeter = metrics.GetOrRegisterMeter("eth/db/extra/Gets", metrics.DefaultRegistry) + db.PutMeter = metrics.GetOrRegisterMeter("eth/db/extra/Puts", metrics.DefaultRegistry) + db.DelMeter = metrics.GetOrRegisterMeter("eth/db/extra/Dels", metrics.DefaultRegistry) + db.ReadMeter = metrics.GetOrRegisterMeter("eth/db/extra/Reads", metrics.DefaultRegistry) + db.WriteMeter = metrics.GetOrRegisterMeter("eth/db/extra/Writes", metrics.DefaultRegistry) + } nodeDb := filepath.Join(config.DataDir, "nodes") // Perform database sanity checks From 803b3c4a825ed0ac5d22c93fc3159651b8c590b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= Date: Tue, 23 Jun 2015 18:36:08 +0300 Subject: [PATCH 049/156] eth, ethdb: measure database operation latencies too --- eth/backend.go | 18 +++++++++--------- ethdb/database.go | 39 ++++++++++++++++++++++++++++----------- 2 files changed, 37 insertions(+), 20 deletions(-) diff --git a/eth/backend.go b/eth/backend.go index cef0fe3ab0..0da6f128c8 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -250,9 +250,9 @@ func New(config *Config) (*Ethereum, error) { return nil, fmt.Errorf("blockchain db err: %v", err) } if db, ok := blockDb.(*ethdb.LDBDatabase); ok { - db.GetMeter = metrics.GetOrRegisterMeter("eth/db/block/Gets", metrics.DefaultRegistry) - db.PutMeter = metrics.GetOrRegisterMeter("eth/db/block/Puts", metrics.DefaultRegistry) - db.DelMeter = metrics.GetOrRegisterMeter("eth/db/block/Dels", metrics.DefaultRegistry) + db.GetTimer = metrics.GetOrRegisterTimer("eth/db/block/Gets", metrics.DefaultRegistry) + db.PutTimer = metrics.GetOrRegisterTimer("eth/db/block/Puts", metrics.DefaultRegistry) + db.MissMeter = metrics.GetOrRegisterMeter("eth/db/block/Misses", metrics.DefaultRegistry) db.ReadMeter = metrics.GetOrRegisterMeter("eth/db/block/Reads", metrics.DefaultRegistry) db.WriteMeter = metrics.GetOrRegisterMeter("eth/db/block/Writes", metrics.DefaultRegistry) } @@ -261,9 +261,9 @@ func New(config *Config) (*Ethereum, error) { return nil, fmt.Errorf("state db err: %v", err) } if db, ok := stateDb.(*ethdb.LDBDatabase); ok { - db.GetMeter = metrics.GetOrRegisterMeter("eth/db/state/Gets", metrics.DefaultRegistry) - db.PutMeter = metrics.GetOrRegisterMeter("eth/db/state/Puts", metrics.DefaultRegistry) - db.DelMeter = metrics.GetOrRegisterMeter("eth/db/state/Dels", metrics.DefaultRegistry) + db.GetTimer = metrics.GetOrRegisterTimer("eth/db/state/Gets", metrics.DefaultRegistry) + db.PutTimer = metrics.GetOrRegisterTimer("eth/db/state/Puts", metrics.DefaultRegistry) + db.MissMeter = metrics.GetOrRegisterMeter("eth/db/state/Misses", metrics.DefaultRegistry) db.ReadMeter = metrics.GetOrRegisterMeter("eth/db/state/Reads", metrics.DefaultRegistry) db.WriteMeter = metrics.GetOrRegisterMeter("eth/db/state/Writes", metrics.DefaultRegistry) } @@ -272,9 +272,9 @@ func New(config *Config) (*Ethereum, error) { return nil, fmt.Errorf("extra db err: %v", err) } if db, ok := extraDb.(*ethdb.LDBDatabase); ok { - db.GetMeter = metrics.GetOrRegisterMeter("eth/db/extra/Gets", metrics.DefaultRegistry) - db.PutMeter = metrics.GetOrRegisterMeter("eth/db/extra/Puts", metrics.DefaultRegistry) - db.DelMeter = metrics.GetOrRegisterMeter("eth/db/extra/Dels", metrics.DefaultRegistry) + db.GetTimer = metrics.GetOrRegisterTimer("eth/db/extra/Gets", metrics.DefaultRegistry) + db.PutTimer = metrics.GetOrRegisterTimer("eth/db/extra/Puts", metrics.DefaultRegistry) + db.MissMeter = metrics.GetOrRegisterMeter("eth/db/extra/Misses", metrics.DefaultRegistry) db.ReadMeter = metrics.GetOrRegisterMeter("eth/db/extra/Reads", metrics.DefaultRegistry) db.WriteMeter = metrics.GetOrRegisterMeter("eth/db/extra/Writes", metrics.DefaultRegistry) } diff --git a/ethdb/database.go b/ethdb/database.go index 13b4ef449a..32ce845a08 100644 --- a/ethdb/database.go +++ b/ethdb/database.go @@ -1,6 +1,8 @@ package ethdb import ( + "time" + "github.com/ethereum/go-ethereum/compression/rle" "github.com/ethereum/go-ethereum/logger" "github.com/ethereum/go-ethereum/logger/glog" @@ -17,9 +19,10 @@ type LDBDatabase struct { fn string // filename for reporting db *leveldb.DB // LevelDB instance - GetMeter metrics.Meter // Meter for measuring the database get request counts - PutMeter metrics.Meter // Meter for measuring the database put request counts - DelMeter metrics.Meter // Meter for measuring the database delete request counts + GetTimer metrics.Timer // Timer for measuring the database get request counts and latencies + PutTimer metrics.Timer // Timer for measuring the database put request counts and latencies + DelTimer metrics.Timer // Timer for measuring the database delete request counts and latencies + MissMeter metrics.Meter // MEter for measuring the missed database get requests ReadMeter metrics.Meter // Meter for measuring the database get request data usage WriteMeter metrics.Meter // Meter for measuring the database put request data usage } @@ -48,10 +51,14 @@ func NewLDBDatabase(file string) (*LDBDatabase, error) { // Put puts the given key / value to the queue func (self *LDBDatabase) Put(key []byte, value []byte) error { - dat := rle.Compress(value) - if self.PutMeter != nil { - self.PutMeter.Mark(1) + // Measure the database put latency, if requested + if self.PutTimer != nil { + start := time.Now() + defer self.PutTimer.UpdateSince(start) } + // Generate the data to write to disk, update the meter and write + dat := rle.Compress(value) + if self.WriteMeter != nil { self.WriteMeter.Mark(int64(len(dat))) } @@ -60,13 +67,20 @@ func (self *LDBDatabase) Put(key []byte, value []byte) error { // Get returns the given key if it's present. func (self *LDBDatabase) Get(key []byte) ([]byte, error) { + // Measure the database get latency, if requested + if self.GetTimer != nil { + start := time.Now() + defer self.GetTimer.UpdateSince(start) + } + // Retrieve the key and increment the miss counter if not found dat, err := self.db.Get(key, nil) if err != nil { + if self.MissMeter != nil { + self.MissMeter.Mark(1) + } return nil, err } - if self.GetMeter != nil { - self.GetMeter.Mark(1) - } + // Otherwise update the actually retrieved amount of data if self.ReadMeter != nil { self.ReadMeter.Mark(int64(len(dat))) } @@ -75,9 +89,12 @@ func (self *LDBDatabase) Get(key []byte) ([]byte, error) { // Delete deletes the key from the queue and database func (self *LDBDatabase) Delete(key []byte) error { - if self.DelMeter != nil { - self.DelMeter.Mark(1) + // Measure the database delete latency, if requested + if self.DelTimer != nil { + start := time.Now() + defer self.DelTimer.UpdateSince(start) } + // Execute the actual operation return self.db.Delete(key, nil) } From bde2ff034317db977354e0855e6406f9428899ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= Date: Tue, 23 Jun 2015 19:12:48 +0300 Subject: [PATCH 050/156] cmd/geth, rpc/api: move the metrics into the new console --- cmd/geth/admin.go | 1003 ------------------------------------------- rpc/api/debug.go | 64 +++ rpc/api/debug_js.go | 5 + 3 files changed, 69 insertions(+), 1003 deletions(-) delete mode 100644 cmd/geth/admin.go diff --git a/cmd/geth/admin.go b/cmd/geth/admin.go deleted file mode 100644 index 0c26cc97c5..0000000000 --- a/cmd/geth/admin.go +++ /dev/null @@ -1,1003 +0,0 @@ -package main - -import ( - "encoding/json" - "errors" - "fmt" - "math/big" - "strconv" - "strings" - "time" - - "github.com/ethereum/ethash" - "github.com/ethereum/go-ethereum/accounts" - "github.com/ethereum/go-ethereum/cmd/utils" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/common/compiler" - "github.com/ethereum/go-ethereum/common/natspec" - "github.com/ethereum/go-ethereum/common/resolver" - "github.com/ethereum/go-ethereum/core/state" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/core/vm" - "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/logger/glog" - "github.com/ethereum/go-ethereum/rlp" - "github.com/ethereum/go-ethereum/rpc" - "github.com/ethereum/go-ethereum/xeth" - "github.com/rcrowley/go-metrics" - "github.com/robertkrimen/otto" - "gopkg.in/fatih/set.v0" -) - -/* -node admin bindings -*/ - -func (js *jsre) adminBindings() { - ethO, _ := js.re.Get("eth") - eth := ethO.Object() - eth.Set("pendingTransactions", js.pendingTransactions) - eth.Set("resend", js.resend) - eth.Set("sign", js.sign) - - js.re.Set("admin", struct{}{}) - t, _ := js.re.Get("admin") - admin := t.Object() - admin.Set("addPeer", js.addPeer) - admin.Set("startRPC", js.startRPC) - admin.Set("stopRPC", js.stopRPC) - admin.Set("nodeInfo", js.nodeInfo) - admin.Set("peers", js.peers) - admin.Set("newAccount", js.newAccount) - admin.Set("unlock", js.unlock) - admin.Set("import", js.importChain) - admin.Set("export", js.exportChain) - admin.Set("verbosity", js.verbosity) - admin.Set("progress", js.syncProgress) - admin.Set("setSolc", js.setSolc) - - admin.Set("contractInfo", struct{}{}) - t, _ = admin.Get("contractInfo") - cinfo := t.Object() - // newRegistry officially not documented temporary option - cinfo.Set("start", js.startNatSpec) - cinfo.Set("stop", js.stopNatSpec) - cinfo.Set("newRegistry", js.newRegistry) - cinfo.Set("get", js.getContractInfo) - cinfo.Set("register", js.register) - cinfo.Set("registerUrl", js.registerUrl) - // cinfo.Set("verify", js.verify) - - admin.Set("miner", struct{}{}) - t, _ = admin.Get("miner") - miner := t.Object() - miner.Set("start", js.startMining) - miner.Set("stop", js.stopMining) - miner.Set("hashrate", js.hashrate) - miner.Set("setExtra", js.setExtra) - miner.Set("setGasPrice", js.setGasPrice) - miner.Set("startAutoDAG", js.startAutoDAG) - miner.Set("stopAutoDAG", js.stopAutoDAG) - miner.Set("makeDAG", js.makeDAG) - - admin.Set("txPool", struct{}{}) - t, _ = admin.Get("txPool") - txPool := t.Object() - txPool.Set("pending", js.allPendingTransactions) - txPool.Set("queued", js.allQueuedTransactions) - - admin.Set("debug", struct{}{}) - t, _ = admin.Get("debug") - debug := t.Object() - js.re.Set("sleep", js.sleep) - debug.Set("backtrace", js.backtrace) - debug.Set("printBlock", js.printBlock) - debug.Set("dumpBlock", js.dumpBlock) - debug.Set("getBlockRlp", js.getBlockRlp) - debug.Set("setHead", js.setHead) - debug.Set("processBlock", js.debugBlock) - debug.Set("seedhash", js.seedHash) - debug.Set("insertBlock", js.insertBlockRlp) - // undocumented temporary - debug.Set("waitForBlocks", js.waitForBlocks) - - admin.Set("metrics", js.metrics) -} - -// generic helper to getBlock by Number/Height or Hex depending on autodetected input -// if argument is missing the current block is returned -// if block is not found or there is problem with decoding -// the appropriate value is returned and block is guaranteed to be nil -func (js *jsre) getBlock(call otto.FunctionCall) (*types.Block, error) { - var block *types.Block - if len(call.ArgumentList) > 0 { - if call.Argument(0).IsNumber() { - num, _ := call.Argument(0).ToInteger() - block = js.ethereum.ChainManager().GetBlockByNumber(uint64(num)) - } else if call.Argument(0).IsString() { - hash, _ := call.Argument(0).ToString() - block = js.ethereum.ChainManager().GetBlock(common.HexToHash(hash)) - } else { - return nil, errors.New("invalid argument for dump. Either hex string or number") - } - } else { - block = js.ethereum.ChainManager().CurrentBlock() - } - - if block == nil { - return nil, errors.New("block not found") - } - return block, nil -} - -func (js *jsre) seedHash(call otto.FunctionCall) otto.Value { - if len(call.ArgumentList) > 0 { - if call.Argument(0).IsNumber() { - num, _ := call.Argument(0).ToInteger() - hash, err := ethash.GetSeedHash(uint64(num)) - if err != nil { - fmt.Println(err) - return otto.UndefinedValue() - } - v, _ := call.Otto.ToValue(fmt.Sprintf("0x%x", hash)) - return v - } else { - fmt.Println("arg not a number") - } - } else { - fmt.Println("requires number argument") - } - - return otto.UndefinedValue() -} - -func (js *jsre) allPendingTransactions(call otto.FunctionCall) otto.Value { - txs := js.ethereum.TxPool().GetTransactions() - - ltxs := make([]*tx, len(txs)) - for i, tx := range txs { - // no need to check err - ltxs[i] = newTx(tx) - } - - v, _ := call.Otto.ToValue(ltxs) - return v -} - -func (js *jsre) allQueuedTransactions(call otto.FunctionCall) otto.Value { - txs := js.ethereum.TxPool().GetQueuedTransactions() - - ltxs := make([]*tx, len(txs)) - for i, tx := range txs { - // no need to check err - ltxs[i] = newTx(tx) - } - - v, _ := call.Otto.ToValue(ltxs) - return v -} - -func (js *jsre) pendingTransactions(call otto.FunctionCall) otto.Value { - txs := js.ethereum.TxPool().GetTransactions() - - // grab the accounts from the account manager. This will help with determening which - // transactions should be returned. - accounts, err := js.ethereum.AccountManager().Accounts() - if err != nil { - fmt.Println(err) - return otto.UndefinedValue() - } - - // Add the accouns to a new set - accountSet := set.New() - for _, account := range accounts { - accountSet.Add(account.Address) - } - - //ltxs := make([]*tx, len(txs)) - var ltxs []*tx - for _, tx := range txs { - if from, _ := tx.From(); accountSet.Has(from) { - ltxs = append(ltxs, newTx(tx)) - } - } - - v, _ := call.Otto.ToValue(ltxs) - return v -} - -func (js *jsre) resend(call otto.FunctionCall) otto.Value { - if len(call.ArgumentList) == 0 { - fmt.Println("first argument must be a transaction") - return otto.FalseValue() - } - - v, err := call.Argument(0).Export() - if err != nil { - fmt.Println(err) - return otto.FalseValue() - } - - if tx, ok := v.(*tx); ok { - gl, gp := tx.GasLimit, tx.GasPrice - if len(call.ArgumentList) > 1 { - gp = call.Argument(1).String() - } - if len(call.ArgumentList) > 2 { - gl = call.Argument(2).String() - } - - ret, err := js.xeth.Transact(tx.From, tx.To, tx.Nonce, tx.Value, gl, gp, tx.Data) - if err != nil { - fmt.Println(err) - return otto.FalseValue() - } - js.ethereum.TxPool().RemoveTransactions(types.Transactions{tx.tx}) - - v, _ := call.Otto.ToValue(ret) - return v - } - - fmt.Println("first argument must be a transaction") - return otto.FalseValue() -} - -func (js *jsre) sign(call otto.FunctionCall) otto.Value { - if len(call.ArgumentList) != 2 { - fmt.Println("requires 2 arguments: eth.sign(signer, data)") - return otto.UndefinedValue() - } - signer, err := call.Argument(0).ToString() - if err != nil { - fmt.Println(err) - return otto.UndefinedValue() - } - - data, err := call.Argument(1).ToString() - if err != nil { - fmt.Println(err) - return otto.UndefinedValue() - } - signed, err := js.xeth.Sign(signer, data, false) - if err != nil { - fmt.Println(err) - return otto.UndefinedValue() - } - v, _ := call.Otto.ToValue(signed) - return v -} - -func (js *jsre) debugBlock(call otto.FunctionCall) otto.Value { - block, err := js.getBlock(call) - if err != nil { - fmt.Println(err) - return otto.UndefinedValue() - } - - tstart := time.Now() - old := vm.Debug - - if len(call.ArgumentList) > 1 { - vm.Debug, _ = call.Argument(1).ToBoolean() - } - - _, err = js.ethereum.BlockProcessor().RetryProcess(block) - if err != nil { - fmt.Println(err) - r, _ := call.Otto.ToValue(map[string]interface{}{"success": false, "time": time.Since(tstart).Seconds()}) - return r - } - vm.Debug = old - - r, _ := call.Otto.ToValue(map[string]interface{}{"success": true, "time": time.Since(tstart).Seconds()}) - return r -} - -func (js *jsre) insertBlockRlp(call otto.FunctionCall) otto.Value { - tstart := time.Now() - - var block types.Block - if call.Argument(0).IsString() { - blockRlp, _ := call.Argument(0).ToString() - err := rlp.DecodeBytes(common.Hex2Bytes(blockRlp), &block) - if err != nil { - fmt.Println(err) - return otto.UndefinedValue() - } - } - - old := vm.Debug - vm.Debug = true - _, err := js.ethereum.BlockProcessor().RetryProcess(&block) - if err != nil { - fmt.Println(err) - r, _ := call.Otto.ToValue(map[string]interface{}{"success": false, "time": time.Since(tstart).Seconds()}) - return r - } - vm.Debug = old - - r, _ := call.Otto.ToValue(map[string]interface{}{"success": true, "time": time.Since(tstart).Seconds()}) - return r -} - -func (js *jsre) setHead(call otto.FunctionCall) otto.Value { - block, err := js.getBlock(call) - if err != nil { - fmt.Println(err) - return otto.UndefinedValue() - } - - js.ethereum.ChainManager().SetHead(block) - return otto.UndefinedValue() -} - -func (js *jsre) syncProgress(call otto.FunctionCall) otto.Value { - pending, cached, importing, eta := js.ethereum.Downloader().Stats() - v, _ := call.Otto.ToValue(map[string]interface{}{ - "pending": pending, - "cached": cached, - "importing": importing, - "estimate": (eta / time.Second * time.Second).String(), - }) - return v -} - -func (js *jsre) getBlockRlp(call otto.FunctionCall) otto.Value { - block, err := js.getBlock(call) - if err != nil { - fmt.Println(err) - return otto.UndefinedValue() - } - encoded, _ := rlp.EncodeToBytes(block) - v, _ := call.Otto.ToValue(fmt.Sprintf("%x", encoded)) - return v -} - -func (js *jsre) setExtra(call otto.FunctionCall) otto.Value { - extra, err := call.Argument(0).ToString() - if err != nil { - fmt.Println(err) - return otto.UndefinedValue() - } - - if len(extra) > 1024 { - fmt.Println("error: cannot exceed 1024 bytes") - return otto.UndefinedValue() - } - - js.ethereum.Miner().SetExtra([]byte(extra)) - return otto.UndefinedValue() -} - -func (js *jsre) setGasPrice(call otto.FunctionCall) otto.Value { - gasPrice, err := call.Argument(0).ToString() - if err != nil { - fmt.Println(err) - return otto.UndefinedValue() - } - - js.ethereum.Miner().SetGasPrice(common.String2Big(gasPrice)) - return otto.UndefinedValue() -} - -func (js *jsre) hashrate(call otto.FunctionCall) otto.Value { - v, _ := call.Otto.ToValue(js.ethereum.Miner().HashRate()) - return v -} - -func (js *jsre) makeDAG(call otto.FunctionCall) otto.Value { - blockNumber, err := call.Argument(1).ToInteger() - if err != nil { - fmt.Println(err) - return otto.FalseValue() - } - - err = ethash.MakeDAG(uint64(blockNumber), "") - if err != nil { - return otto.FalseValue() - } - return otto.TrueValue() -} - -func (js *jsre) startAutoDAG(otto.FunctionCall) otto.Value { - js.ethereum.StartAutoDAG() - return otto.TrueValue() -} - -func (js *jsre) stopAutoDAG(otto.FunctionCall) otto.Value { - js.ethereum.StopAutoDAG() - return otto.TrueValue() -} - -func (js *jsre) backtrace(call otto.FunctionCall) otto.Value { - tracestr, err := call.Argument(0).ToString() - if err != nil { - fmt.Println(err) - return otto.UndefinedValue() - } - glog.GetTraceLocation().Set(tracestr) - - return otto.UndefinedValue() -} - -func (js *jsre) verbosity(call otto.FunctionCall) otto.Value { - v, err := call.Argument(0).ToInteger() - if err != nil { - fmt.Println(err) - return otto.UndefinedValue() - } - - glog.SetV(int(v)) - return otto.UndefinedValue() -} - -func (js *jsre) startMining(call otto.FunctionCall) otto.Value { - var ( - threads int64 - err error - ) - - if len(call.ArgumentList) > 0 { - threads, err = call.Argument(0).ToInteger() - if err != nil { - fmt.Println(err) - return otto.FalseValue() - } - } else { - threads = int64(js.ethereum.MinerThreads) - } - - // switch on DAG autogeneration when miner starts - js.ethereum.StartAutoDAG() - - err = js.ethereum.StartMining(int(threads)) - if err != nil { - fmt.Println(err) - return otto.FalseValue() - } - - return otto.TrueValue() -} - -func (js *jsre) stopMining(call otto.FunctionCall) otto.Value { - js.ethereum.StopMining() - js.ethereum.StopAutoDAG() - return otto.TrueValue() -} - -func (js *jsre) startRPC(call otto.FunctionCall) otto.Value { - addr, err := call.Argument(0).ToString() - if err != nil { - fmt.Println(err) - return otto.FalseValue() - } - - port, err := call.Argument(1).ToInteger() - if err != nil { - fmt.Println(err) - return otto.FalseValue() - } - - corsDomain := js.corsDomain - if len(call.ArgumentList) > 2 { - corsDomain, err = call.Argument(2).ToString() - if err != nil { - fmt.Println(err) - return otto.FalseValue() - } - } - - config := rpc.RpcConfig{ - ListenAddress: addr, - ListenPort: uint(port), - CorsDomain: corsDomain, - } - - xeth := xeth.New(js.ethereum, nil) - err = rpc.Start(xeth, config) - if err != nil { - fmt.Println(err) - return otto.FalseValue() - } - - return otto.TrueValue() -} - -func (js *jsre) stopRPC(call otto.FunctionCall) otto.Value { - if rpc.Stop() == nil { - return otto.TrueValue() - } - return otto.FalseValue() -} - -func (js *jsre) addPeer(call otto.FunctionCall) otto.Value { - nodeURL, err := call.Argument(0).ToString() - if err != nil { - fmt.Println(err) - return otto.FalseValue() - } - err = js.ethereum.AddPeer(nodeURL) - if err != nil { - fmt.Println(err) - return otto.FalseValue() - } - return otto.TrueValue() -} - -func (js *jsre) unlock(call otto.FunctionCall) otto.Value { - addr, err := call.Argument(0).ToString() - if err != nil { - fmt.Println(err) - return otto.FalseValue() - } - seconds, err := call.Argument(2).ToInteger() - if err != nil { - fmt.Println(err) - return otto.FalseValue() - } - if seconds == 0 { - seconds = accounts.DefaultAccountUnlockDuration - } - - arg := call.Argument(1) - var passphrase string - if arg.IsUndefined() { - fmt.Println("Please enter a passphrase now.") - passphrase, err = utils.PromptPassword("Passphrase: ", true) - if err != nil { - fmt.Println(err) - return otto.FalseValue() - } - } else { - passphrase, err = arg.ToString() - if err != nil { - fmt.Println(err) - return otto.FalseValue() - } - } - am := js.ethereum.AccountManager() - err = am.TimedUnlock(common.HexToAddress(addr), passphrase, time.Duration(seconds)*time.Second) - if err != nil { - fmt.Printf("Unlock account failed '%v'\n", err) - return otto.FalseValue() - } - return otto.TrueValue() -} - -func (js *jsre) newAccount(call otto.FunctionCall) otto.Value { - arg := call.Argument(0) - var passphrase string - if arg.IsUndefined() { - fmt.Println("The new account will be encrypted with a passphrase.") - fmt.Println("Please enter a passphrase now.") - auth, err := utils.PromptPassword("Passphrase: ", true) - if err != nil { - fmt.Println(err) - return otto.FalseValue() - } - confirm, err := utils.PromptPassword("Repeat Passphrase: ", false) - if err != nil { - fmt.Println(err) - return otto.FalseValue() - } - if auth != confirm { - fmt.Println("Passphrases did not match.") - return otto.FalseValue() - } - passphrase = auth - } else { - var err error - passphrase, err = arg.ToString() - if err != nil { - fmt.Println(err) - return otto.FalseValue() - } - } - acct, err := js.ethereum.AccountManager().NewAccount(passphrase) - if err != nil { - fmt.Printf("Could not create the account: %v", err) - return otto.UndefinedValue() - } - v, _ := call.Otto.ToValue(acct.Address.Hex()) - return v -} - -func (js *jsre) nodeInfo(call otto.FunctionCall) otto.Value { - v, _ := call.Otto.ToValue(js.ethereum.NodeInfo()) - return v -} - -func (js *jsre) peers(call otto.FunctionCall) otto.Value { - v, _ := call.Otto.ToValue(js.ethereum.PeersInfo()) - return v -} - -func (js *jsre) importChain(call otto.FunctionCall) otto.Value { - if len(call.ArgumentList) == 0 { - fmt.Println("require file name. admin.importChain(filename)") - return otto.FalseValue() - } - fn, err := call.Argument(0).ToString() - if err != nil { - fmt.Println(err) - return otto.FalseValue() - } - if err := utils.ImportChain(js.ethereum.ChainManager(), fn); err != nil { - fmt.Println("Import error: ", err) - return otto.FalseValue() - } - return otto.TrueValue() -} - -func (js *jsre) exportChain(call otto.FunctionCall) otto.Value { - if len(call.ArgumentList) == 0 { - fmt.Println("require file name: admin.exportChain(filename)") - return otto.FalseValue() - } - - fn, err := call.Argument(0).ToString() - if err != nil { - fmt.Println(err) - return otto.FalseValue() - } - if err := utils.ExportChain(js.ethereum.ChainManager(), fn); err != nil { - fmt.Println(err) - return otto.FalseValue() - } - return otto.TrueValue() -} - -func (js *jsre) printBlock(call otto.FunctionCall) otto.Value { - block, err := js.getBlock(call) - if err != nil { - fmt.Println(err) - return otto.UndefinedValue() - } - - fmt.Println(block) - - return otto.UndefinedValue() -} - -func (js *jsre) dumpBlock(call otto.FunctionCall) otto.Value { - block, err := js.getBlock(call) - if err != nil { - fmt.Println(err) - return otto.UndefinedValue() - } - - statedb := state.New(block.Root(), js.ethereum.StateDb()) - dump := statedb.RawDump() - v, _ := call.Otto.ToValue(dump) - return v -} - -func (js *jsre) waitForBlocks(call otto.FunctionCall) otto.Value { - if len(call.ArgumentList) > 2 { - fmt.Println("requires 0, 1 or 2 arguments: admin.debug.waitForBlock(minHeight, timeout)") - return otto.FalseValue() - } - var n, timeout int64 - var timer <-chan time.Time - var height *big.Int - var err error - args := len(call.ArgumentList) - if args == 2 { - timeout, err = call.Argument(1).ToInteger() - if err != nil { - fmt.Println(err) - return otto.UndefinedValue() - } - timer = time.NewTimer(time.Duration(timeout) * time.Second).C - } - if args >= 1 { - n, err = call.Argument(0).ToInteger() - if err != nil { - fmt.Println(err) - return otto.UndefinedValue() - } - height = big.NewInt(n) - } - - if args == 0 { - height = js.xeth.CurrentBlock().Number() - height.Add(height, common.Big1) - } - - wait := js.wait - js.wait <- height - select { - case <-timer: - // if times out make sure the xeth loop does not block - go func() { - select { - case wait <- nil: - case <-wait: - } - }() - return otto.UndefinedValue() - case height = <-wait: - } - v, _ := call.Otto.ToValue(height.Uint64()) - return v -} - -func (js *jsre) metrics(call otto.FunctionCall) otto.Value { - // Create a rate formatter - units := []string{"", "K", "M", "G", "T", "E", "P"} - round := func(value float64, prec int) string { - unit := 0 - for value >= 1000 { - unit, value, prec = unit+1, value/1000, 2 - } - return fmt.Sprintf(fmt.Sprintf("%%.%df%s", prec, units[unit]), value) - } - format := func(total float64, rate float64) string { - return fmt.Sprintf("%s (%s/s)", round(total, 0), round(rate, 2)) - } - // Iterate over all the metrics, and just dump for now - counters := make(map[string]interface{}) - metrics.DefaultRegistry.Each(func(name string, metric interface{}) { - // Create or retrieve the counter hierarchy for this metric - root, parts := counters, strings.Split(name, "/") - for _, part := range parts[:len(parts)-1] { - if _, ok := root[part]; !ok { - root[part] = make(map[string]interface{}) - } - root = root[part].(map[string]interface{}) - } - name = parts[len(parts)-1] - - // Fill the counter with the metric details - switch metric := metric.(type) { - case metrics.Meter: - root[name] = map[string]interface{}{ - "Avg01Min": format(metric.Rate1()*60, metric.Rate1()), - "Avg05Min": format(metric.Rate5()*300, metric.Rate5()), - "Avg15Min": format(metric.Rate15()*900, metric.Rate15()), - "Total": format(float64(metric.Count()), metric.RateMean()), - } - - case metrics.Timer: - root[name] = map[string]interface{}{ - "Avg01Min": format(metric.Rate1()*60, metric.Rate1()), - "Avg05Min": format(metric.Rate5()*300, metric.Rate5()), - "Avg15Min": format(metric.Rate15()*900, metric.Rate15()), - "Count": format(float64(metric.Count()), metric.RateMean()), - "Maximum": time.Duration(metric.Max()).String(), - "Minimum": time.Duration(metric.Min()).String(), - "Percentile": map[string]interface{}{ - "20": time.Duration(metric.Percentile(0.2)).String(), - "50": time.Duration(metric.Percentile(0.5)).String(), - "80": time.Duration(metric.Percentile(0.8)).String(), - "95": time.Duration(metric.Percentile(0.95)).String(), - "99": time.Duration(metric.Percentile(0.99)).String(), - }, - } - - default: - root[name] = "Unknown metric type" - } - }) - // Flatten the counters into some metrics and return - v, _ := call.Otto.ToValue(counters) - return v -} - -func (js *jsre) sleep(call otto.FunctionCall) otto.Value { - sec, err := call.Argument(0).ToInteger() - if err != nil { - fmt.Println(err) - return otto.FalseValue() - } - time.Sleep(time.Duration(sec) * time.Second) - return otto.UndefinedValue() -} - -func (js *jsre) setSolc(call otto.FunctionCall) otto.Value { - if len(call.ArgumentList) != 1 { - fmt.Println("needs 1 argument: admin.contractInfo.setSolc(solcPath)") - return otto.FalseValue() - } - solcPath, err := call.Argument(0).ToString() - if err != nil { - return otto.FalseValue() - } - solc, err := js.xeth.SetSolc(solcPath) - if err != nil { - fmt.Println(err) - return otto.FalseValue() - } - fmt.Println(solc.Info()) - return otto.TrueValue() -} - -func (js *jsre) register(call otto.FunctionCall) otto.Value { - if len(call.ArgumentList) != 4 { - fmt.Println("requires 4 arguments: admin.contractInfo.register(fromaddress, contractaddress, contract, filename)") - return otto.UndefinedValue() - } - sender, err := call.Argument(0).ToString() - if err != nil { - fmt.Println(err) - return otto.UndefinedValue() - } - - address, err := call.Argument(1).ToString() - if err != nil { - fmt.Println(err) - return otto.UndefinedValue() - } - - raw, err := call.Argument(2).Export() - if err != nil { - fmt.Println(err) - return otto.UndefinedValue() - } - jsonraw, err := json.Marshal(raw) - if err != nil { - fmt.Println(err) - return otto.UndefinedValue() - } - var contract compiler.Contract - err = json.Unmarshal(jsonraw, &contract) - if err != nil { - fmt.Println(err) - return otto.UndefinedValue() - } - - filename, err := call.Argument(3).ToString() - if err != nil { - fmt.Println(err) - return otto.UndefinedValue() - } - - contenthash, err := compiler.ExtractInfo(&contract, filename) - if err != nil { - fmt.Println(err) - return otto.UndefinedValue() - } - // sender and contract address are passed as hex strings - codeb := js.xeth.CodeAtBytes(address) - codehash := common.BytesToHash(crypto.Sha3(codeb)) - - if err != nil { - fmt.Println(err) - return otto.UndefinedValue() - } - - registry := resolver.New(js.xeth) - - _, err = registry.RegisterContentHash(common.HexToAddress(sender), codehash, contenthash) - if err != nil { - fmt.Println(err) - return otto.UndefinedValue() - } - - v, _ := call.Otto.ToValue(contenthash.Hex()) - return v -} - -func (js *jsre) registerUrl(call otto.FunctionCall) otto.Value { - if len(call.ArgumentList) != 3 { - fmt.Println("requires 3 arguments: admin.contractInfo.register(fromaddress, contenthash, filename)") - return otto.FalseValue() - } - sender, err := call.Argument(0).ToString() - if err != nil { - fmt.Println(err) - return otto.FalseValue() - } - - contenthash, err := call.Argument(1).ToString() - if err != nil { - fmt.Println(err) - return otto.FalseValue() - } - - url, err := call.Argument(2).ToString() - if err != nil { - fmt.Println(err) - return otto.FalseValue() - } - - registry := resolver.New(js.xeth) - - _, err = registry.RegisterUrl(common.HexToAddress(sender), common.HexToHash(contenthash), url) - if err != nil { - fmt.Println(err) - return otto.FalseValue() - } - - return otto.TrueValue() -} - -func (js *jsre) getContractInfo(call otto.FunctionCall) otto.Value { - if len(call.ArgumentList) != 1 { - fmt.Println("requires 1 argument: admin.contractInfo.register(contractaddress)") - return otto.FalseValue() - } - addr, err := call.Argument(0).ToString() - if err != nil { - fmt.Println(err) - return otto.FalseValue() - } - - infoDoc, err := natspec.FetchDocsForContract(addr, js.xeth, ds) - if err != nil { - fmt.Println(err) - return otto.UndefinedValue() - } - var info compiler.ContractInfo - err = json.Unmarshal(infoDoc, &info) - if err != nil { - fmt.Println(err) - return otto.UndefinedValue() - } - v, _ := call.Otto.ToValue(info) - return v -} - -func (js *jsre) startNatSpec(call otto.FunctionCall) otto.Value { - js.ethereum.NatSpec = true - return otto.TrueValue() -} - -func (js *jsre) stopNatSpec(call otto.FunctionCall) otto.Value { - js.ethereum.NatSpec = false - return otto.TrueValue() -} - -func (js *jsre) newRegistry(call otto.FunctionCall) otto.Value { - - if len(call.ArgumentList) != 1 { - fmt.Println("requires 1 argument: admin.contractInfo.newRegistry(adminaddress)") - return otto.FalseValue() - } - addr, err := call.Argument(0).ToString() - if err != nil { - fmt.Println(err) - return otto.FalseValue() - } - - registry := resolver.New(js.xeth) - err = registry.CreateContracts(common.HexToAddress(addr)) - if err != nil { - fmt.Println(err) - return otto.FalseValue() - } - - return otto.TrueValue() -} - -// internal transaction type which will allow us to resend transactions using `eth.resend` -type tx struct { - tx *types.Transaction - - To string - From string - Nonce string - Value string - Data string - GasLimit string - GasPrice string -} - -func newTx(t *types.Transaction) *tx { - from, _ := t.From() - var to string - if t := t.To(); t != nil { - to = t.Hex() - } - - return &tx{ - tx: t, - To: to, - From: from.Hex(), - Value: t.Amount.String(), - Nonce: strconv.Itoa(int(t.Nonce())), - Data: "0x" + common.Bytes2Hex(t.Data()), - GasLimit: t.GasLimit.String(), - GasPrice: t.GasPrice().String(), - } -} diff --git a/rpc/api/debug.go b/rpc/api/debug.go index b451d86624..871786c6f9 100644 --- a/rpc/api/debug.go +++ b/rpc/api/debug.go @@ -2,6 +2,8 @@ package api import ( "fmt" + "strings" + "time" "github.com/ethereum/ethash" "github.com/ethereum/go-ethereum/core/state" @@ -11,6 +13,7 @@ import ( "github.com/ethereum/go-ethereum/rpc/codec" "github.com/ethereum/go-ethereum/rpc/shared" "github.com/ethereum/go-ethereum/xeth" + "github.com/rcrowley/go-metrics" ) const ( @@ -26,6 +29,7 @@ var ( "debug_processBlock": (*debugApi).ProcessBlock, "debug_seedHash": (*debugApi).SeedHash, "debug_setHead": (*debugApi).SetHead, + "debug_metrics": (*debugApi).Metrics, } ) @@ -171,3 +175,63 @@ func (self *debugApi) SeedHash(req *shared.Request) (interface{}, error) { return nil, err } } + +func (self *debugApi) Metrics(req *shared.Request) (interface{}, error) { + // Create a rate formatter + units := []string{"", "K", "M", "G", "T", "E", "P"} + round := func(value float64, prec int) string { + unit := 0 + for value >= 1000 { + unit, value, prec = unit+1, value/1000, 2 + } + return fmt.Sprintf(fmt.Sprintf("%%.%df%s", prec, units[unit]), value) + } + format := func(total float64, rate float64) string { + return fmt.Sprintf("%s (%s/s)", round(total, 0), round(rate, 2)) + } + // Iterate over all the metrics, and just dump for now + counters := make(map[string]interface{}) + metrics.DefaultRegistry.Each(func(name string, metric interface{}) { + // Create or retrieve the counter hierarchy for this metric + root, parts := counters, strings.Split(name, "/") + for _, part := range parts[:len(parts)-1] { + if _, ok := root[part]; !ok { + root[part] = make(map[string]interface{}) + } + root = root[part].(map[string]interface{}) + } + name = parts[len(parts)-1] + + // Fill the counter with the metric details + switch metric := metric.(type) { + case metrics.Meter: + root[name] = map[string]interface{}{ + "Avg01Min": format(metric.Rate1()*60, metric.Rate1()), + "Avg05Min": format(metric.Rate5()*300, metric.Rate5()), + "Avg15Min": format(metric.Rate15()*900, metric.Rate15()), + "Total": format(float64(metric.Count()), metric.RateMean()), + } + + case metrics.Timer: + root[name] = map[string]interface{}{ + "Avg01Min": format(metric.Rate1()*60, metric.Rate1()), + "Avg05Min": format(metric.Rate5()*300, metric.Rate5()), + "Avg15Min": format(metric.Rate15()*900, metric.Rate15()), + "Count": format(float64(metric.Count()), metric.RateMean()), + "Maximum": time.Duration(metric.Max()).String(), + "Minimum": time.Duration(metric.Min()).String(), + "Percentile": map[string]interface{}{ + "20": time.Duration(metric.Percentile(0.2)).String(), + "50": time.Duration(metric.Percentile(0.5)).String(), + "80": time.Duration(metric.Percentile(0.8)).String(), + "95": time.Duration(metric.Percentile(0.95)).String(), + "99": time.Duration(metric.Percentile(0.99)).String(), + }, + } + + default: + root[name] = "Unknown metric type" + } + }) + return counters, nil +} diff --git a/rpc/api/debug_js.go b/rpc/api/debug_js.go index 35fecb75fc..e48e4df06c 100644 --- a/rpc/api/debug_js.go +++ b/rpc/api/debug_js.go @@ -50,6 +50,11 @@ web3._extend({ ], properties: [ + new web3._extend.Property({ + name: 'metrics', + getter: 'debug_metrics', + outputFormatter: function(obj) { return obj; } + }) ] }); ` From e5b820c47b9343d3801e1ebbeb4a8f40843ea87c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= Date: Wed, 24 Jun 2015 14:38:58 +0300 Subject: [PATCH 051/156] cmd/geth, rpc/api: extend metrics API, add a basic monitor command --- cmd/geth/main.go | 10 +++ cmd/geth/monitorcmd.go | 180 +++++++++++++++++++++++++++++++++++++++++ rpc/api/debug.go | 92 ++++++++++++++------- rpc/api/debug_args.go | 24 ++++++ rpc/api/debug_js.go | 12 +-- rpc/xeth.go | 52 ++++++++++++ 6 files changed, 338 insertions(+), 32 deletions(-) create mode 100644 cmd/geth/monitorcmd.go create mode 100644 rpc/xeth.go diff --git a/cmd/geth/main.go b/cmd/geth/main.go index 963aced15f..f7b4810cde 100644 --- a/cmd/geth/main.go +++ b/cmd/geth/main.go @@ -214,6 +214,16 @@ The Geth console is an interactive shell for the JavaScript runtime environment which exposes a node admin interface as well as the Ðapp JavaScript API. See https://github.com/ethereum/go-ethereum/wiki/Javascipt-Console. This command allows to open a console on a running geth node. +`, + }, + { + Action: monitor, + Name: "monitor", + Usage: `Geth Monitor: node metrics monitoring and visualization`, + Description: ` +The Geth monitor is a tool to collect and visualize various internal metrics +gathered by the node, supporting different chart types as well as the capacity +to display multiple metrics simultaneously. `, }, { diff --git a/cmd/geth/monitorcmd.go b/cmd/geth/monitorcmd.go new file mode 100644 index 0000000000..2989800f95 --- /dev/null +++ b/cmd/geth/monitorcmd.go @@ -0,0 +1,180 @@ +package main + +import ( + "reflect" + "sort" + "strings" + "time" + + "github.com/codegangsta/cli" + "github.com/ethereum/go-ethereum/cmd/utils" + "github.com/ethereum/go-ethereum/rpc" + "github.com/ethereum/go-ethereum/rpc/codec" + "github.com/ethereum/go-ethereum/rpc/comms" + "github.com/gizak/termui" +) + +// monitor starts a terminal UI based monitoring tool for the requested metrics. +func monitor(ctx *cli.Context) { + var ( + client comms.EthereumClient + args []string + err error + ) + // Attach to an Ethereum node over IPC or RPC + if ctx.Args().Present() { + // Try to interpret the first parameter as an endpoint + client, err = comms.ClientFromEndpoint(ctx.Args().First(), codec.JSON) + if err == nil { + args = ctx.Args().Tail() + } + } + if !ctx.Args().Present() || err != nil { + // Either no args were given, or not endpoint, use defaults + cfg := comms.IpcConfig{ + Endpoint: ctx.GlobalString(utils.IPCPathFlag.Name), + } + args = ctx.Args() + client, err = comms.NewIpcClient(cfg, codec.JSON) + } + if err != nil { + utils.Fatalf("Unable to attach to geth node - %v", err) + } + defer client.Close() + + xeth := rpc.NewXeth(client) + + // Retrieve all the available metrics and resolve the user pattens + metrics, err := xeth.Call("debug_metrics", []interface{}{true}) + if err != nil { + utils.Fatalf("Failed to retrieve system metrics: %v", err) + } + monitored := resolveMetrics(metrics, args) + sort.Strings(monitored) + + // Create the access function and check that the metric exists + value := func(metrics map[string]interface{}, metric string) float64 { + parts, found := strings.Split(metric, "/"), true + for _, part := range parts[:len(parts)-1] { + metrics, found = metrics[part].(map[string]interface{}) + if !found { + utils.Fatalf("Metric not found: %s", metric) + } + } + if v, ok := metrics[parts[len(parts)-1]].(float64); ok { + return v + } + utils.Fatalf("Metric not float64: %s", metric) + return 0 + } + // Assemble the terminal UI + if err := termui.Init(); err != nil { + utils.Fatalf("Unable to initialize terminal UI: %v", err) + } + defer termui.Close() + + termui.UseTheme("helloworld") + + charts := make([]*termui.LineChart, len(monitored)) + for i, metric := range monitored { + charts[i] = termui.NewLineChart() + charts[i].Border.Label = metric + charts[i].Data = make([]float64, 512) + charts[i].DataLabels = []string{""} + charts[i].Height = termui.TermHeight() / len(monitored) + charts[i].AxesColor = termui.ColorWhite + charts[i].LineColor = termui.ColorGreen + + termui.Body.AddRows(termui.NewRow(termui.NewCol(12, 0, charts[i]))) + } + termui.Body.Align() + termui.Render(termui.Body) + + refresh := time.Tick(time.Second) + for { + select { + case event := <-termui.EventCh(): + if event.Type == termui.EventKey && event.Ch == 'q' { + return + } + if event.Type == termui.EventResize { + termui.Body.Width = termui.TermWidth() + for _, chart := range charts { + chart.Height = termui.TermHeight() / len(monitored) + } + termui.Body.Align() + termui.Render(termui.Body) + } + case <-refresh: + metrics, err := xeth.Call("debug_metrics", []interface{}{true}) + if err != nil { + utils.Fatalf("Failed to retrieve system metrics: %v", err) + } + for i, metric := range monitored { + charts[i].Data = append([]float64{value(metrics, metric)}, charts[i].Data[:len(charts[i].Data)-1]...) + } + termui.Render(termui.Body) + } + } +} + +// resolveMetrics takes a list of input metric patterns, and resolves each to one +// or more canonical metric names. +func resolveMetrics(metrics map[string]interface{}, patterns []string) []string { + res := []string{} + for _, pattern := range patterns { + res = append(res, resolveMetric(metrics, pattern, "")...) + } + return res +} + +// resolveMetrics takes a single of input metric pattern, and resolves it to one +// or more canonical metric names. +func resolveMetric(metrics map[string]interface{}, pattern string, path string) []string { + var ok bool + + // Build up the canonical metric path + parts := strings.Split(pattern, "/") + for len(parts) > 1 { + if metrics, ok = metrics[parts[0]].(map[string]interface{}); !ok { + utils.Fatalf("Failed to retrieve system metrics: %s", path+parts[0]) + } + path += parts[0] + "/" + parts = parts[1:] + } + // Depending what the last link is, return or expand + switch metric := metrics[parts[0]].(type) { + case float64: + // Final metric value found, return as singleton + return []string{path + parts[0]} + + case map[string]interface{}: + return expandMetrics(metric, path+parts[0]+"/") + + default: + utils.Fatalf("Metric pattern resolved to unexpected type: %v", reflect.TypeOf(metric)) + return nil + } +} + +// expandMetrics expands the entire tree of metrics into a flat list of paths. +func expandMetrics(metrics map[string]interface{}, path string) []string { + // Iterate over all fields and expand individually + list := []string{} + for name, metric := range metrics { + switch metric := metric.(type) { + case float64: + // Final metric value found, append to list + list = append(list, path+name) + + case map[string]interface{}: + // Tree of metrics found, expand recursively + list = append(list, expandMetrics(metric, path+name+"/")...) + + default: + utils.Fatalf("Metric pattern %s resolved to unexpected type: %v", path+name, reflect.TypeOf(metric)) + return nil + } + } + return list +} diff --git a/rpc/api/debug.go b/rpc/api/debug.go index 871786c6f9..45c99f2959 100644 --- a/rpc/api/debug.go +++ b/rpc/api/debug.go @@ -177,6 +177,10 @@ func (self *debugApi) SeedHash(req *shared.Request) (interface{}, error) { } func (self *debugApi) Metrics(req *shared.Request) (interface{}, error) { + args := new(MetricsArgs) + if err := self.codec.Decode(req.Params, &args); err != nil { + return nil, shared.NewDecodeParamError(err.Error()) + } // Create a rate formatter units := []string{"", "K", "M", "G", "T", "E", "P"} round := func(value float64, prec int) string { @@ -202,35 +206,69 @@ func (self *debugApi) Metrics(req *shared.Request) (interface{}, error) { } name = parts[len(parts)-1] - // Fill the counter with the metric details - switch metric := metric.(type) { - case metrics.Meter: - root[name] = map[string]interface{}{ - "Avg01Min": format(metric.Rate1()*60, metric.Rate1()), - "Avg05Min": format(metric.Rate5()*300, metric.Rate5()), - "Avg15Min": format(metric.Rate15()*900, metric.Rate15()), - "Total": format(float64(metric.Count()), metric.RateMean()), - } + // Fill the counter with the metric details, formatting if requested + if args.Raw { + switch metric := metric.(type) { + case metrics.Meter: + root[name] = map[string]interface{}{ + "Avg01Min": metric.Rate1(), + "Avg05Min": metric.Rate5(), + "Avg15Min": metric.Rate15(), + "AvgTotal": metric.RateMean(), + "Total": float64(metric.Count()), + } - case metrics.Timer: - root[name] = map[string]interface{}{ - "Avg01Min": format(metric.Rate1()*60, metric.Rate1()), - "Avg05Min": format(metric.Rate5()*300, metric.Rate5()), - "Avg15Min": format(metric.Rate15()*900, metric.Rate15()), - "Count": format(float64(metric.Count()), metric.RateMean()), - "Maximum": time.Duration(metric.Max()).String(), - "Minimum": time.Duration(metric.Min()).String(), - "Percentile": map[string]interface{}{ - "20": time.Duration(metric.Percentile(0.2)).String(), - "50": time.Duration(metric.Percentile(0.5)).String(), - "80": time.Duration(metric.Percentile(0.8)).String(), - "95": time.Duration(metric.Percentile(0.95)).String(), - "99": time.Duration(metric.Percentile(0.99)).String(), - }, - } + case metrics.Timer: + root[name] = map[string]interface{}{ + "Avg01Min": metric.Rate1(), + "Avg05Min": metric.Rate5(), + "Avg15Min": metric.Rate15(), + "AvgTotal": metric.RateMean(), + "Total": float64(metric.Count()), + "Maximum": metric.Max(), + "Minimum": metric.Min(), + "Percentile": map[string]interface{}{ + "20": metric.Percentile(0.2), + "50": metric.Percentile(0.5), + "80": metric.Percentile(0.8), + "95": metric.Percentile(0.95), + "99": metric.Percentile(0.99), + }, + } - default: - root[name] = "Unknown metric type" + default: + root[name] = "Unknown metric type" + } + } else { + switch metric := metric.(type) { + case metrics.Meter: + root[name] = map[string]interface{}{ + "Avg01Min": format(metric.Rate1()*60, metric.Rate1()), + "Avg05Min": format(metric.Rate5()*300, metric.Rate5()), + "Avg15Min": format(metric.Rate15()*900, metric.Rate15()), + "Total": format(float64(metric.Count()), metric.RateMean()), + } + + case metrics.Timer: + root[name] = map[string]interface{}{ + "Avg01Min": format(metric.Rate1()*60, metric.Rate1()), + "Avg05Min": format(metric.Rate5()*300, metric.Rate5()), + "Avg15Min": format(metric.Rate15()*900, metric.Rate15()), + "Count": format(float64(metric.Count()), metric.RateMean()), + "Maximum": time.Duration(metric.Max()).String(), + "Minimum": time.Duration(metric.Min()).String(), + "Percentile": map[string]interface{}{ + "20": time.Duration(metric.Percentile(0.2)).String(), + "50": time.Duration(metric.Percentile(0.5)).String(), + "80": time.Duration(metric.Percentile(0.8)).String(), + "95": time.Duration(metric.Percentile(0.95)).String(), + "99": time.Duration(metric.Percentile(0.99)).String(), + }, + } + + default: + root[name] = "Unknown metric type" + } } }) return counters, nil diff --git a/rpc/api/debug_args.go b/rpc/api/debug_args.go index b9b5aa27e9..b72fb03ae4 100644 --- a/rpc/api/debug_args.go +++ b/rpc/api/debug_args.go @@ -4,6 +4,7 @@ import ( "encoding/json" "fmt" "math/big" + "reflect" "github.com/ethereum/go-ethereum/rpc/shared" ) @@ -45,3 +46,26 @@ func (args *WaitForBlockArgs) UnmarshalJSON(b []byte) (err error) { return nil } + +type MetricsArgs struct { + Raw bool +} + +func (args *MetricsArgs) UnmarshalJSON(b []byte) (err error) { + var obj []interface{} + if err := json.Unmarshal(b, &obj); err != nil { + return shared.NewDecodeParamError(err.Error()) + } + if len(obj) > 1 { + return fmt.Errorf("metricsArgs needs 0, 1 arguments") + } + // default values when not provided + if len(obj) >= 1 && obj[0] != nil { + if value, ok := obj[0].(bool); !ok { + return fmt.Errorf("invalid argument %v", reflect.TypeOf(obj[0])) + } else { + args.Raw = value + } + } + return nil +} diff --git a/rpc/api/debug_js.go b/rpc/api/debug_js.go index e48e4df06c..bd3a6dfb24 100644 --- a/rpc/api/debug_js.go +++ b/rpc/api/debug_js.go @@ -46,15 +46,17 @@ web3._extend({ params: 1, inputFormatter: [web3._extend.formatters.formatInputInt], outputFormatter: function(obj) { return obj; } + }), + new web3._extend.Method({ + name: 'metrics', + call: 'debug_metrics', + params: 1, + inputFormatter: [web3._extend.formatters.formatInputBool], + outputFormatter: function(obj) { return obj; } }) ], properties: [ - new web3._extend.Property({ - name: 'metrics', - getter: 'debug_metrics', - outputFormatter: function(obj) { return obj; } - }) ] }); ` diff --git a/rpc/xeth.go b/rpc/xeth.go new file mode 100644 index 0000000000..b3e8443809 --- /dev/null +++ b/rpc/xeth.go @@ -0,0 +1,52 @@ +package rpc + +import ( + "encoding/json" + "fmt" + "reflect" + "sync/atomic" + + "github.com/ethereum/go-ethereum/rpc/comms" + "github.com/ethereum/go-ethereum/rpc/shared" +) + +// Xeth is a native API interface to a remote node. +type Xeth struct { + client comms.EthereumClient + reqId uint32 +} + +// NewXeth constructs a new native API interface to a remote node. +func NewXeth(client comms.EthereumClient) *Xeth { + return &Xeth{ + client: client, + } +} + +// Call invokes a method with the given parameters are the remote node. +func (self *Xeth) Call(method string, params []interface{}) (map[string]interface{}, error) { + // Assemble the json RPC request + data, err := json.Marshal(params) + if err != nil { + return nil, err + } + req := &shared.Request{ + Id: atomic.AddUint32(&self.reqId, 1), + Jsonrpc: "2.0", + Method: method, + Params: data, + } + // Send the request over and process the response + if err := self.client.Send(req); err != nil { + return nil, err + } + res, err := self.client.Recv() + if err != nil { + return nil, err + } + value, ok := res.(map[string]interface{}) + if !ok { + return nil, fmt.Errorf("Invalid response type: have %v, want %v", reflect.TypeOf(res), reflect.TypeOf(make(map[string]interface{}))) + } + return value, nil +} From bf99d5b33c716ecb8b7dac8234df07b0ea82c48f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= Date: Wed, 24 Jun 2015 16:39:22 +0300 Subject: [PATCH 052/156] cmd/geth: polish the monitoring charts a bit --- cmd/geth/monitorcmd.go | 57 +++++++++++++++++++++++++++++++++++++----- 1 file changed, 51 insertions(+), 6 deletions(-) diff --git a/cmd/geth/monitorcmd.go b/cmd/geth/monitorcmd.go index 2989800f95..06ccf90be3 100644 --- a/cmd/geth/monitorcmd.go +++ b/cmd/geth/monitorcmd.go @@ -1,6 +1,7 @@ package main import ( + "math" "reflect" "sort" "strings" @@ -67,7 +68,7 @@ func monitor(ctx *cli.Context) { utils.Fatalf("Metric not float64: %s", metric) return 0 } - // Assemble the terminal UI + // Create and configure the chart UI defaults if err := termui.Init(); err != nil { utils.Fatalf("Unable to initialize terminal UI: %v", err) } @@ -75,17 +76,33 @@ func monitor(ctx *cli.Context) { termui.UseTheme("helloworld") + rows := 5 + cols := (len(monitored) + rows - 1) / rows + for i := 0; i < rows; i++ { + termui.Body.AddRows(termui.NewRow()) + } + // Create each individual data chart charts := make([]*termui.LineChart, len(monitored)) + data := make([][]float64, len(monitored)) + for i := 0; i < len(data); i++ { + data[i] = make([]float64, 512) + } for i, metric := range monitored { charts[i] = termui.NewLineChart() - charts[i].Border.Label = metric + charts[i].Data = make([]float64, 512) charts[i].DataLabels = []string{""} - charts[i].Height = termui.TermHeight() / len(monitored) + charts[i].Height = termui.TermHeight() / rows charts[i].AxesColor = termui.ColorWhite charts[i].LineColor = termui.ColorGreen + charts[i].PaddingBottom = -1 - termui.Body.AddRows(termui.NewRow(termui.NewCol(12, 0, charts[i]))) + charts[i].Border.Label = metric + charts[i].Border.LabelFgColor = charts[i].Border.FgColor + charts[i].Border.FgColor = charts[i].Border.BgColor + + row := termui.Body.Rows[i%rows] + row.Cols = append(row.Cols, termui.NewCol(12/cols, 0, charts[i])) } termui.Body.Align() termui.Render(termui.Body) @@ -100,7 +117,7 @@ func monitor(ctx *cli.Context) { if event.Type == termui.EventResize { termui.Body.Width = termui.TermWidth() for _, chart := range charts { - chart.Height = termui.TermHeight() / len(monitored) + chart.Height = termui.TermHeight() / rows } termui.Body.Align() termui.Render(termui.Body) @@ -111,7 +128,8 @@ func monitor(ctx *cli.Context) { utils.Fatalf("Failed to retrieve system metrics: %v", err) } for i, metric := range monitored { - charts[i].Data = append([]float64{value(metrics, metric)}, charts[i].Data[:len(charts[i].Data)-1]...) + data[i] = append([]float64{value(metrics, metric)}, data[i][:len(data[i])-1]...) + updateChart(metric, data[i], charts[i]) } termui.Render(termui.Body) } @@ -178,3 +196,30 @@ func expandMetrics(metrics map[string]interface{}, path string) []string { } return list } + +// updateChart inserts a dataset into a line chart, scaling appropriately as to +// not display weird labels, also updating the chart label accordingly. +func updateChart(metric string, data []float64, chart *termui.LineChart) { + units := []string{"", "K", "M", "G", "T", "E", "P"} + colors := []termui.Attribute{termui.ColorBlue, termui.ColorCyan, termui.ColorGreen, termui.ColorYellow, termui.ColorRed, termui.ColorRed, termui.ColorRed} + + // Find the maximum value and scale under 1K + high := data[0] + for _, value := range data[1:] { + high = math.Max(high, value) + } + unit, scale := 0, 1.0 + for high >= 1000 { + high, unit, scale = high/1000, unit+1, scale*1000 + } + // Update the chart's data points with the scaled values + for i, value := range data { + chart.Data[i] = value / scale + } + // Update the chart's label with the scale units + chart.Border.Label = metric + if unit > 0 { + chart.Border.Label += " [" + units[unit] + "]" + } + chart.LineColor = colors[unit] +} From 302187ae397c5e06a9f086183d55f591f5daf588 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= Date: Wed, 24 Jun 2015 17:12:38 +0300 Subject: [PATCH 053/156] cmd/geth: allow branching metric patterns --- cmd/geth/monitorcmd.go | 41 ++++++++++++++++++++++++----------------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/cmd/geth/monitorcmd.go b/cmd/geth/monitorcmd.go index 06ccf90be3..ec0dfb8f22 100644 --- a/cmd/geth/monitorcmd.go +++ b/cmd/geth/monitorcmd.go @@ -149,30 +149,37 @@ func resolveMetrics(metrics map[string]interface{}, patterns []string) []string // resolveMetrics takes a single of input metric pattern, and resolves it to one // or more canonical metric names. func resolveMetric(metrics map[string]interface{}, pattern string, path string) []string { - var ok bool + results := []string{} - // Build up the canonical metric path - parts := strings.Split(pattern, "/") - for len(parts) > 1 { - if metrics, ok = metrics[parts[0]].(map[string]interface{}); !ok { - utils.Fatalf("Failed to retrieve system metrics: %s", path+parts[0]) + // If a nested metric was requested, recurse optionally branching (via comma) + parts := strings.SplitN(pattern, "/", 2) + if len(parts) > 1 { + for _, variation := range strings.Split(parts[0], ",") { + if submetrics, ok := metrics[variation].(map[string]interface{}); !ok { + utils.Fatalf("Failed to retrieve system metrics: %s", path+variation) + return nil + } else { + results = append(results, resolveMetric(submetrics, parts[1], path+variation+"/")...) + } } - path += parts[0] + "/" - parts = parts[1:] + return results } // Depending what the last link is, return or expand - switch metric := metrics[parts[0]].(type) { - case float64: - // Final metric value found, return as singleton - return []string{path + parts[0]} + for _, variation := range strings.Split(pattern, ",") { + switch metric := metrics[variation].(type) { + case float64: + // Final metric value found, return as singleton + results = append(results, path+variation) - case map[string]interface{}: - return expandMetrics(metric, path+parts[0]+"/") + case map[string]interface{}: + results = append(results, expandMetrics(metric, path+variation+"/")...) - default: - utils.Fatalf("Metric pattern resolved to unexpected type: %v", reflect.TypeOf(metric)) - return nil + default: + utils.Fatalf("Metric pattern resolved to unexpected type: %v", reflect.TypeOf(metric)) + return nil + } } + return results } // expandMetrics expands the entire tree of metrics into a flat list of paths. From 92ef33d97a437dce2d7b55f06342de388d95f575 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= Date: Wed, 24 Jun 2015 18:30:00 +0300 Subject: [PATCH 054/156] rpc/api, cmd/geth: retrievel all percentiles, add time units --- cmd/geth/monitorcmd.go | 17 +++++++++++++---- rpc/api/debug.go | 43 +++++++++++++++++++++--------------------- 2 files changed, 35 insertions(+), 25 deletions(-) diff --git a/cmd/geth/monitorcmd.go b/cmd/geth/monitorcmd.go index ec0dfb8f22..53eb61a463 100644 --- a/cmd/geth/monitorcmd.go +++ b/cmd/geth/monitorcmd.go @@ -76,7 +76,10 @@ func monitor(ctx *cli.Context) { termui.UseTheme("helloworld") - rows := 5 + rows := len(monitored) + if rows > 5 { + rows = 5 + } cols := (len(monitored) + rows - 1) / rows for i := 0; i < rows; i++ { termui.Body.AddRows(termui.NewRow()) @@ -207,8 +210,9 @@ func expandMetrics(metrics map[string]interface{}, path string) []string { // updateChart inserts a dataset into a line chart, scaling appropriately as to // not display weird labels, also updating the chart label accordingly. func updateChart(metric string, data []float64, chart *termui.LineChart) { - units := []string{"", "K", "M", "G", "T", "E", "P"} - colors := []termui.Attribute{termui.ColorBlue, termui.ColorCyan, termui.ColorGreen, termui.ColorYellow, termui.ColorRed, termui.ColorRed, termui.ColorRed} + dataUnits := []string{"", "K", "M", "G", "T", "E"} + timeUnits := []string{"ns", "µs", "ms", "s", "ks", "ms"} + colors := []termui.Attribute{termui.ColorBlue, termui.ColorCyan, termui.ColorGreen, termui.ColorYellow, termui.ColorRed, termui.ColorRed} // Find the maximum value and scale under 1K high := data[0] @@ -225,7 +229,12 @@ func updateChart(metric string, data []float64, chart *termui.LineChart) { } // Update the chart's label with the scale units chart.Border.Label = metric - if unit > 0 { + + units := dataUnits + if strings.Contains(metric, "Percentiles") { + units = timeUnits + } + if len(units[unit]) > 0 { chart.Border.Label += " [" + units[unit] + "]" } chart.LineColor = colors[unit] diff --git a/rpc/api/debug.go b/rpc/api/debug.go index 45c99f2959..5975f88ab1 100644 --- a/rpc/api/debug.go +++ b/rpc/api/debug.go @@ -193,6 +193,11 @@ func (self *debugApi) Metrics(req *shared.Request) (interface{}, error) { format := func(total float64, rate float64) string { return fmt.Sprintf("%s (%s/s)", round(total, 0), round(rate, 2)) } + // Create the percentile units + percentiles := make([]float64, 101) + for i := 0; i <= 100; i++ { + percentiles[i] = float64(i) / 100 + } // Iterate over all the metrics, and just dump for now counters := make(map[string]interface{}) metrics.DefaultRegistry.Each(func(name string, metric interface{}) { @@ -211,29 +216,25 @@ func (self *debugApi) Metrics(req *shared.Request) (interface{}, error) { switch metric := metric.(type) { case metrics.Meter: root[name] = map[string]interface{}{ - "Avg01Min": metric.Rate1(), - "Avg05Min": metric.Rate5(), - "Avg15Min": metric.Rate15(), - "AvgTotal": metric.RateMean(), - "Total": float64(metric.Count()), + "AvgRate01Min": metric.Rate1(), + "AvgRate05Min": metric.Rate5(), + "AvgRate15Min": metric.Rate15(), + "MeanRate": metric.RateMean(), + "Total": float64(metric.Count()), } case metrics.Timer: + ps := make(map[string]interface{}) + for i, p := range metric.Percentiles(percentiles) { + ps[fmt.Sprintf("%d", i)] = p + } root[name] = map[string]interface{}{ - "Avg01Min": metric.Rate1(), - "Avg05Min": metric.Rate5(), - "Avg15Min": metric.Rate15(), - "AvgTotal": metric.RateMean(), - "Total": float64(metric.Count()), - "Maximum": metric.Max(), - "Minimum": metric.Min(), - "Percentile": map[string]interface{}{ - "20": metric.Percentile(0.2), - "50": metric.Percentile(0.5), - "80": metric.Percentile(0.8), - "95": metric.Percentile(0.95), - "99": metric.Percentile(0.99), - }, + "AvgRate01Min": metric.Rate1(), + "AvgRate05Min": metric.Rate5(), + "AvgRate15Min": metric.Rate15(), + "MeanRate": metric.RateMean(), + "Total": float64(metric.Count()), + "Percentiles": ps, } default: @@ -254,10 +255,10 @@ func (self *debugApi) Metrics(req *shared.Request) (interface{}, error) { "Avg01Min": format(metric.Rate1()*60, metric.Rate1()), "Avg05Min": format(metric.Rate5()*300, metric.Rate5()), "Avg15Min": format(metric.Rate15()*900, metric.Rate15()), - "Count": format(float64(metric.Count()), metric.RateMean()), + "Total": format(float64(metric.Count()), metric.RateMean()), "Maximum": time.Duration(metric.Max()).String(), "Minimum": time.Duration(metric.Min()).String(), - "Percentile": map[string]interface{}{ + "Percentiles": map[string]interface{}{ "20": time.Duration(metric.Percentile(0.2)).String(), "50": time.Duration(metric.Percentile(0.5)).String(), "80": time.Duration(metric.Percentile(0.8)).String(), From 1ce40d7581bac2b776d1e47ec49c03c0fcc7fdc1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= Date: Wed, 24 Jun 2015 18:40:18 +0300 Subject: [PATCH 055/156] Godeps: remove mist remnants, add termui deps --- Godeps/Godeps.json | 22 +- .../src/github.com/gizak/termui/.gitignore | 24 + .../src/github.com/gizak/termui/.travis.yml | 6 + .../src/github.com/gizak/termui/LICENSE | 22 + .../src/github.com/gizak/termui/README.md | 159 + .../src/github.com/gizak/termui/bar.go | 135 + .../src/github.com/gizak/termui/block.go | 142 + .../src/github.com/gizak/termui/block_test.go | 46 + .../src/github.com/gizak/termui/box.go | 117 + .../src/github.com/gizak/termui/box_others.go | 14 + .../github.com/gizak/termui/box_windows.go | 14 + .../src/github.com/gizak/termui/canvas.go | 74 + .../github.com/gizak/termui/canvas_test.go | 55 + .../src/github.com/gizak/termui/chart.go | 336 + .../github.com/gizak/termui/chart_others.go | 11 + .../github.com/gizak/termui/chart_windows.go | 11 + .../src/github.com/gizak/termui/doc.go | 27 + .../src/github.com/gizak/termui/events.go | 219 + .../github.com/gizak/termui/events_test.go | 28 + .../gizak/termui/example/barchart.go | 35 + .../gizak/termui/example/barchart.png | Bin 0 -> 15386 bytes .../gizak/termui/example/dashboard.gif | Bin 0 -> 453764 bytes .../gizak/termui/example/dashboard.go | 148 + .../github.com/gizak/termui/example/gauge.go | 62 + .../github.com/gizak/termui/example/gauge.png | Bin 0 -> 32431 bytes .../github.com/gizak/termui/example/grid.gif | Bin 0 -> 800288 bytes .../github.com/gizak/termui/example/grid.go | 134 + .../gizak/termui/example/linechart.go | 68 + .../gizak/termui/example/linechart.png | Bin 0 -> 139361 bytes .../github.com/gizak/termui/example/list.go | 41 + .../github.com/gizak/termui/example/list.png | Bin 0 -> 37227 bytes .../gizak/termui/example/mbarchart.go | 50 + .../gizak/termui/example/mbarchart.png | Bin 0 -> 20075 bytes .../github.com/gizak/termui/example/par.go | 48 + .../github.com/gizak/termui/example/par.png | Bin 0 -> 65773 bytes .../gizak/termui/example/sparklines.go | 65 + .../gizak/termui/example/sparklines.png | Bin 0 -> 43431 bytes .../github.com/gizak/termui/example/theme.go | 143 + .../gizak/termui/example/themedefault.png | Bin 0 -> 105508 bytes .../gizak/termui/example/themehelloworld.png | Bin 0 -> 90111 bytes .../src/github.com/gizak/termui/gauge.go | 113 + .../src/github.com/gizak/termui/grid.go | 279 + .../src/github.com/gizak/termui/grid_test.go | 98 + .../src/github.com/gizak/termui/helper.go | 66 + .../github.com/gizak/termui/helper_test.go | 58 + .../src/github.com/gizak/termui/list.go | 104 + .../src/github.com/gizak/termui/mbar.go | 233 + .../src/github.com/gizak/termui/p.go | 71 + .../src/github.com/gizak/termui/point.go | 28 + .../src/github.com/gizak/termui/render.go | 60 + .../src/github.com/gizak/termui/sparkline.go | 156 + .../src/github.com/gizak/termui/theme.go | 84 + .../src/github.com/howeyc/fsnotify/.gitignore | 5 - .../src/github.com/howeyc/fsnotify/AUTHORS | 28 - .../github.com/howeyc/fsnotify/CHANGELOG.md | 160 - .../howeyc/fsnotify/CONTRIBUTING.md | 7 - .../src/github.com/howeyc/fsnotify/LICENSE | 28 - .../src/github.com/howeyc/fsnotify/README.md | 92 - .../howeyc/fsnotify/example_test.go | 34 - .../github.com/howeyc/fsnotify/fsnotify.go | 111 - .../howeyc/fsnotify/fsnotify_bsd.go | 496 - .../howeyc/fsnotify/fsnotify_linux.go | 304 - .../howeyc/fsnotify/fsnotify_open_bsd.go | 11 - .../howeyc/fsnotify/fsnotify_open_darwin.go | 11 - .../howeyc/fsnotify/fsnotify_symlink_test.go | 74 - .../howeyc/fsnotify/fsnotify_test.go | 1010 - .../howeyc/fsnotify/fsnotify_windows.go | 598 - .../github.com/mattn/go-runewidth/.travis.yml | 9 + .../github.com/mattn/go-runewidth/README.mkd | 25 + .../mattn/go-runewidth/runewidth.go | 404 + .../mattn/go-runewidth/runewidth_js.go | 8 + .../mattn/go-runewidth/runewidth_posix.go | 69 + .../mattn/go-runewidth/runewidth_test.go | 134 + .../mattn/go-runewidth/runewidth_windows.go | 24 + .../src/github.com/nsf/termbox-go/AUTHORS | 4 + .../src/github.com/nsf/termbox-go/LICENSE | 19 + .../src/github.com/nsf/termbox-go/README.md | 21 + .../src/github.com/nsf/termbox-go/api.go | 451 + .../github.com/nsf/termbox-go/api_common.go | 183 + .../github.com/nsf/termbox-go/api_windows.go | 235 + .../nsf/termbox-go/collect_terminfo.py | 110 + .../src/github.com/nsf/termbox-go/syscalls.go | 39 + .../nsf/termbox-go/syscalls_darwin_386.go | 39 + .../nsf/termbox-go/syscalls_darwin_amd64.go | 40 + .../nsf/termbox-go/syscalls_freebsd.go | 39 + .../nsf/termbox-go/syscalls_linux.go | 33 + .../nsf/termbox-go/syscalls_netbsd.go | 39 + .../nsf/termbox-go/syscalls_openbsd.go | 39 + .../nsf/termbox-go/syscalls_windows.go | 61 + .../src/github.com/nsf/termbox-go/termbox.go | 407 + .../nsf/termbox-go/termbox_common.go | 59 + .../nsf/termbox-go/termbox_windows.go | 813 + .../src/github.com/nsf/termbox-go/terminfo.go | 219 + .../nsf/termbox-go/terminfo_builtin.go | 64 + .../src/github.com/obscuren/qml/.gitignore | 5 - .../src/github.com/obscuren/qml/LICENSE | 185 - .../src/github.com/obscuren/qml/README.md | 157 - .../src/github.com/obscuren/qml/all.cpp | 12 - .../src/github.com/obscuren/qml/bridge.go | 681 - .../github.com/obscuren/qml/cdata/cdata.go | 6 - .../github.com/obscuren/qml/cdata/cdata12.c | 18 - .../obscuren/qml/cdata/cdata14_386.s | 17 - .../obscuren/qml/cdata/cdata14_amd64.s | 17 - .../obscuren/qml/cdata/cdata14_arm.s | 18 - .../obscuren/qml/cdata/cdata_test.go | 42 - .../obscuren/qml/cmd/genqrc/main.go | 218 - .../qml/cmd/ubuntu-touch/particle.desktop | 15 - .../obscuren/qml/cmd/ubuntu-touch/setup.sh | 41 - .../src/github.com/obscuren/qml/cpp/capi.cpp | 884 - .../src/github.com/obscuren/qml/cpp/capi.h | 211 - .../github.com/obscuren/qml/cpp/connector.cpp | 46 - .../github.com/obscuren/qml/cpp/connector.h | 58 - .../github.com/obscuren/qml/cpp/govalue.cpp | 236 - .../src/github.com/obscuren/qml/cpp/govalue.h | 56 - .../obscuren/qml/cpp/govaluetype.cpp | 254 - .../github.com/obscuren/qml/cpp/govaluetype.h | 48 - .../github.com/obscuren/qml/cpp/idletimer.cpp | 58 - .../github.com/obscuren/qml/cpp/mmemwin.cpp | 27 - .../github.com/obscuren/qml/cpp/moc_all.cpp | 4 - .../obscuren/qml/cpp/moc_connector.cpp | 211 - .../obscuren/qml/cpp/moc_govalue.cpp | 155 - .../obscuren/qml/cpp/moc_idletimer.cpp | 108 - .../obscuren/qml/cpp/private/qmetaobject_p.h | 2 - .../qml/cpp/private/qmetaobjectbuilder_p.h | 2 - .../obscuren/qml/cpp/private/qobject_p.h | 2 - .../obscuren/qml/cpp/private/qtheader.h | 70 - .../github.com/obscuren/qml/cpp/update-moc.sh | 19 - .../obscuren/qml/cpptest/cpptest.cpp | 14 - .../obscuren/qml/cpptest/cpptest.go | 30 - .../github.com/obscuren/qml/cpptest/cpptest.h | 23 - .../obscuren/qml/cpptest/moc_testtype.cpp | 202 - .../obscuren/qml/cpptest/testtype.h | 45 - .../obscuren/qml/cpptest/update-moc.sh | 12 - .../src/github.com/obscuren/qml/datatype.go | 531 - .../src/github.com/obscuren/qml/doc.go | 199 - .../obscuren/qml/examples/controls/.gitignore | 5 - .../obscuren/qml/examples/controls/README.md | 8 - .../controls/basiclayouts/basiclayouts.go | 29 - .../examples/controls/basiclayouts/main.qml | 116 - .../controls/gallery/content/AboutDialog.qml | 48 - .../controls/gallery/content/ChildWindow.qml | 122 - .../controls/gallery/content/Controls.qml | 229 - .../controls/gallery/content/ImageViewer.qml | 58 - .../controls/gallery/content/Layouts.qml | 107 - .../controls/gallery/content/ModelView.qml | 103 - .../controls/gallery/content/Styles.qml | 387 - .../qml/examples/controls/gallery/gallery.go | 29 - .../controls/gallery/images/bubble.png | Bin 214 -> 0 bytes .../gallery/images/button-pressed.png | Bin 3094 -> 0 bytes .../controls/gallery/images/button.png | Bin 3164 -> 0 bytes .../controls/gallery/images/document-open.png | Bin 1550 -> 0 bytes .../gallery/images/document-open@2x.png | Bin 3355 -> 0 bytes .../gallery/images/document-save-as.png | Bin 1837 -> 0 bytes .../gallery/images/document-save-as@2x.png | Bin 4500 -> 0 bytes .../controls/gallery/images/folder_new.png | Bin 1199 -> 0 bytes .../controls/gallery/images/go-next.png | Bin 1219 -> 0 bytes .../controls/gallery/images/go-previous.png | Bin 1200 -> 0 bytes .../gallery/images/preferences-system.png | Bin 2129 -> 0 bytes .../controls/gallery/images/process-stop.png | Bin 1927 -> 0 bytes .../gallery/images/progress-background.png | Bin 456 -> 0 bytes .../controls/gallery/images/progress-fill.png | Bin 507 -> 0 bytes .../controls/gallery/images/slider-handle.png | Bin 3523 -> 0 bytes .../examples/controls/gallery/images/tab.png | Bin 9877 -> 0 bytes .../controls/gallery/images/tab_selected.png | Bin 10184 -> 0 bytes .../controls/gallery/images/textfield.png | Bin 3023 -> 0 bytes .../gallery/images/toplevel_window.png | Bin 3690 -> 0 bytes .../controls/gallery/images/view-refresh.png | Bin 2024 -> 0 bytes .../controls/gallery/images/window-new.png | Bin 671 -> 0 bytes .../controls/gallery/images/window-new@2x.png | Bin 1900 -> 0 bytes .../qml/examples/controls/gallery/main.qml | 266 - .../qml/examples/controls/splitview/main.qml | 82 - .../examples/controls/splitview/splitview.go | 29 - .../controls/tableview/images/header.png | Bin 356 -> 0 bytes .../controls/tableview/images/selectedrow.png | Bin 303 -> 0 bytes .../qml/examples/controls/tableview/main.qml | 405 - .../examples/controls/tableview/tableview.go | 29 - .../touch/content/AndroidDelegate.qml | 92 - .../controls/touch/content/ButtonPage.qml | 176 - .../controls/touch/content/ListPage.qml | 82 - .../touch/content/ProgressBarPage.qml | 114 - .../controls/touch/content/SliderPage.qml | 106 - .../controls/touch/content/TabBarPage.qml | 102 - .../controls/touch/content/TextInputPage.qml | 106 - .../examples/controls/touch/images/NOTICE.txt | 2 - .../controls/touch/images/button_default.png | Bin 1406 -> 0 bytes .../controls/touch/images/button_pressed.png | Bin 1694 -> 0 bytes .../touch/images/navigation_next_item.png | Bin 1341 -> 0 bytes .../touch/images/navigation_previous_item.png | Bin 1343 -> 0 bytes .../controls/touch/images/tab_selected.png | Bin 217 -> 0 bytes .../controls/touch/images/tabs_standard.png | Bin 1230 -> 0 bytes .../controls/touch/images/textinput.png | Bin 4132 -> 0 bytes .../controls/touch/images/toolbar.png | Bin 1643 -> 0 bytes .../qml/examples/controls/touch/main.qml | 147 - .../qml/examples/controls/touch/touch.go | 29 - .../qml/examples/customtype/customtype.go | 48 - .../qml/examples/customtype/customtype.qml | 5 - .../obscuren/qml/examples/gopher/gopher.go | 117 - .../obscuren/qml/examples/gopher/gopher.qml | 42 - .../obscuren/qml/examples/gopher/mix.qml | 68 - .../qml/examples/gopher/model/README.md | 10 - .../qml/examples/gopher/model/gopher.blend | Bin 1370816 -> 0 bytes .../qml/examples/gopher/model/gopher.mtl | 65 - .../qml/examples/gopher/model/gopher.obj | 31375 ----------- .../obscuren/qml/examples/gopher/wavefront.go | 280 - .../qml/examples/imgprovider/imgprovider.go | 43 - .../qml/examples/imgprovider/imgprovider.qml | 5 - .../examples/imgprovider/ubuntu-gopher.png | Bin 59635 -> 0 bytes .../examples/modelview/delegate/delegate.go | 53 - .../examples/modelview/delegate/delegate.qml | 17 - .../qml/examples/painting-es2/painting.go | 115 - .../qml/examples/painting-es2/painting.qml | 66 - .../qml/examples/painting/painting.go | 64 - .../qml/examples/painting/painting.qml | 66 - .../obscuren/qml/examples/particle/main.go | 84 - .../qml/examples/particle/particle.png | Bin 861 -> 0 bytes .../qml/examples/particle/particle.qml | 89 - .../obscuren/qml/examples/qmlscene/Cell.qml | 20 - .../qml/examples/qmlscene/qmlscene.go | 33 - .../qml/examples/qmlscene/tutorial1.qml | 17 - .../qml/examples/qmlscene/tutorial2.qml | 30 - .../qml/examples/qmlscene/tutorial3.qml | 45 - .../examples/qrcpacking/assets/particle.png | Bin 861 -> 0 bytes .../examples/qrcpacking/assets/particle.qml | 89 - .../obscuren/qml/examples/qrcpacking/main.go | 86 - .../obscuren/qml/examples/qrcpacking/qrc.go | 58 - .../obscuren/qml/examples/reparent/base.qml | 7 - .../obscuren/qml/examples/reparent/rect.qml | 8 - .../qml/examples/reparent/reparent.go | 37 - .../obscuren/qml/examples/snapweb/snapweb.go | 70 - .../github.com/obscuren/qml/gl/1.0/funcs.cpp | 1848 - .../github.com/obscuren/qml/gl/1.0/funcs.h | 347 - .../src/github.com/obscuren/qml/gl/1.0/gl.go | 2528 - .../github.com/obscuren/qml/gl/1.1/funcs.cpp | 2022 - .../github.com/obscuren/qml/gl/1.1/funcs.h | 376 - .../src/github.com/obscuren/qml/gl/1.1/gl.go | 2789 - .../github.com/obscuren/qml/gl/1.2/funcs.cpp | 2250 - .../github.com/obscuren/qml/gl/1.2/funcs.h | 414 - .../src/github.com/obscuren/qml/gl/1.2/gl.go | 3152 -- .../github.com/obscuren/qml/gl/1.3/funcs.cpp | 2526 - .../github.com/obscuren/qml/gl/1.3/funcs.h | 460 - .../src/github.com/obscuren/qml/gl/1.3/gl.go | 3571 -- .../github.com/obscuren/qml/gl/1.4/funcs.cpp | 2790 - .../github.com/obscuren/qml/gl/1.4/funcs.h | 504 - .../src/github.com/obscuren/qml/gl/1.4/gl.go | 3892 -- .../github.com/obscuren/qml/gl/1.5/funcs.cpp | 2892 - .../github.com/obscuren/qml/gl/1.5/funcs.h | 521 - .../src/github.com/obscuren/qml/gl/1.5/gl.go | 4237 -- .../github.com/obscuren/qml/gl/2.0/funcs.cpp | 3444 -- .../github.com/obscuren/qml/gl/2.0/funcs.h | 613 - .../src/github.com/obscuren/qml/gl/2.0/gl.go | 6407 --- .../github.com/obscuren/qml/gl/2.1/funcs.cpp | 3480 -- .../github.com/obscuren/qml/gl/2.1/funcs.h | 619 - .../src/github.com/obscuren/qml/gl/2.1/gl.go | 6652 --- .../github.com/obscuren/qml/gl/3.0/funcs.cpp | 3966 -- .../github.com/obscuren/qml/gl/3.0/funcs.h | 700 - .../src/github.com/obscuren/qml/gl/3.0/gl.go | 7663 --- .../github.com/obscuren/qml/gl/3.1/funcs.cpp | 1422 - .../github.com/obscuren/qml/gl/3.1/funcs.h | 276 - .../src/github.com/obscuren/qml/gl/3.1/gl.go | 4999 -- .../obscuren/qml/gl/3.2compat/funcs.cpp | 4140 -- .../obscuren/qml/gl/3.2compat/funcs.h | 729 - .../obscuren/qml/gl/3.2compat/gl.go | 7973 --- .../obscuren/qml/gl/3.2core/funcs.cpp | 1530 - .../obscuren/qml/gl/3.2core/funcs.h | 294 - .../github.com/obscuren/qml/gl/3.2core/gl.go | 4729 -- .../obscuren/qml/gl/3.3compat/funcs.cpp | 4488 -- .../obscuren/qml/gl/3.3compat/funcs.h | 787 - .../obscuren/qml/gl/3.3compat/gl.go | 8281 --- .../obscuren/qml/gl/3.3core/funcs.cpp | 1878 - .../obscuren/qml/gl/3.3core/funcs.h | 352 - .../github.com/obscuren/qml/gl/3.3core/gl.go | 5489 -- .../obscuren/qml/gl/4.0compat/funcs.cpp | 4764 -- .../obscuren/qml/gl/4.0compat/funcs.h | 833 - .../obscuren/qml/gl/4.0compat/gl.go | 8607 --- .../obscuren/qml/gl/4.0core/funcs.cpp | 2154 - .../obscuren/qml/gl/4.0core/funcs.h | 398 - .../github.com/obscuren/qml/gl/4.0core/gl.go | 5815 -- .../obscuren/qml/gl/4.1compat/funcs.cpp | 5286 -- .../obscuren/qml/gl/4.1compat/funcs.h | 920 - .../obscuren/qml/gl/4.1compat/gl.go | 9201 ---- .../obscuren/qml/gl/4.1core/funcs.cpp | 2676 - .../obscuren/qml/gl/4.1core/funcs.h | 485 - .../github.com/obscuren/qml/gl/4.1core/gl.go | 6409 --- .../obscuren/qml/gl/4.2compat/funcs.cpp | 5358 -- .../obscuren/qml/gl/4.2compat/funcs.h | 932 - .../obscuren/qml/gl/4.2compat/gl.go | 9386 ---- .../obscuren/qml/gl/4.2core/funcs.cpp | 2748 - .../obscuren/qml/gl/4.2core/funcs.h | 497 - .../github.com/obscuren/qml/gl/4.2core/gl.go | 6594 --- .../obscuren/qml/gl/4.3compat/funcs.cpp | 5556 -- .../obscuren/qml/gl/4.3compat/funcs.h | 965 - .../obscuren/qml/gl/4.3compat/gl.go | 9845 ---- .../obscuren/qml/gl/4.3core/funcs.cpp | 2946 -- .../obscuren/qml/gl/4.3core/funcs.h | 530 - .../github.com/obscuren/qml/gl/4.3core/gl.go | 7052 --- .../github.com/obscuren/qml/gl/es2/funcs.cpp | 813 - .../github.com/obscuren/qml/gl/es2/funcs.h | 182 - .../src/github.com/obscuren/qml/gl/es2/gl.go | 2990 -- .../github.com/obscuren/qml/gl/gengl/Makefile | 9 - .../github.com/obscuren/qml/gl/gengl/funcs.go | 1764 - .../github.com/obscuren/qml/gl/gengl/gl.xml | 43891 ---------------- .../github.com/obscuren/qml/gl/gengl/main.go | 1283 - .../obscuren/qml/gl/gengl/parseqt.go | 13904 ----- .../obscuren/qml/gl/gengl/parseqt.rl | 184 - .../obscuren/qml/gl/glbase/glbase.go | 33 - .../src/github.com/obscuren/qml/log.go | 157 - .../src/github.com/obscuren/qml/qml.go | 1109 - .../src/github.com/obscuren/qml/qml_test.go | 1436 - .../src/github.com/obscuren/qml/resources.go | 375 - .../src/github.com/obscuren/qml/stats.go | 68 - .../src/github.com/obscuren/qml/testing.go | 69 - .../src/gopkg.in/qml.v1/cdata/cdata.go | 6 - .../src/gopkg.in/qml.v1/cdata/cdata12.c | 18 - .../src/gopkg.in/qml.v1/cdata/cdata14_386.s | 17 - .../src/gopkg.in/qml.v1/cdata/cdata14_amd64.s | 17 - .../src/gopkg.in/qml.v1/cdata/cdata14_arm.s | 18 - .../src/gopkg.in/qml.v1/cdata/cdata_test.go | 42 - .../src/gopkg.in/qml.v1/gl/glbase/glbase.go | 33 - 318 files changed, 7180 insertions(+), 330446 deletions(-) create mode 100644 Godeps/_workspace/src/github.com/gizak/termui/.gitignore create mode 100644 Godeps/_workspace/src/github.com/gizak/termui/.travis.yml create mode 100644 Godeps/_workspace/src/github.com/gizak/termui/LICENSE create mode 100644 Godeps/_workspace/src/github.com/gizak/termui/README.md create mode 100644 Godeps/_workspace/src/github.com/gizak/termui/bar.go create mode 100644 Godeps/_workspace/src/github.com/gizak/termui/block.go create mode 100644 Godeps/_workspace/src/github.com/gizak/termui/block_test.go create mode 100644 Godeps/_workspace/src/github.com/gizak/termui/box.go create mode 100644 Godeps/_workspace/src/github.com/gizak/termui/box_others.go create mode 100644 Godeps/_workspace/src/github.com/gizak/termui/box_windows.go create mode 100644 Godeps/_workspace/src/github.com/gizak/termui/canvas.go create mode 100644 Godeps/_workspace/src/github.com/gizak/termui/canvas_test.go create mode 100644 Godeps/_workspace/src/github.com/gizak/termui/chart.go create mode 100644 Godeps/_workspace/src/github.com/gizak/termui/chart_others.go create mode 100644 Godeps/_workspace/src/github.com/gizak/termui/chart_windows.go create mode 100644 Godeps/_workspace/src/github.com/gizak/termui/doc.go create mode 100644 Godeps/_workspace/src/github.com/gizak/termui/events.go create mode 100644 Godeps/_workspace/src/github.com/gizak/termui/events_test.go create mode 100644 Godeps/_workspace/src/github.com/gizak/termui/example/barchart.go create mode 100644 Godeps/_workspace/src/github.com/gizak/termui/example/barchart.png create mode 100644 Godeps/_workspace/src/github.com/gizak/termui/example/dashboard.gif create mode 100644 Godeps/_workspace/src/github.com/gizak/termui/example/dashboard.go create mode 100644 Godeps/_workspace/src/github.com/gizak/termui/example/gauge.go create mode 100644 Godeps/_workspace/src/github.com/gizak/termui/example/gauge.png create mode 100644 Godeps/_workspace/src/github.com/gizak/termui/example/grid.gif create mode 100644 Godeps/_workspace/src/github.com/gizak/termui/example/grid.go create mode 100644 Godeps/_workspace/src/github.com/gizak/termui/example/linechart.go create mode 100644 Godeps/_workspace/src/github.com/gizak/termui/example/linechart.png create mode 100644 Godeps/_workspace/src/github.com/gizak/termui/example/list.go create mode 100644 Godeps/_workspace/src/github.com/gizak/termui/example/list.png create mode 100644 Godeps/_workspace/src/github.com/gizak/termui/example/mbarchart.go create mode 100644 Godeps/_workspace/src/github.com/gizak/termui/example/mbarchart.png create mode 100644 Godeps/_workspace/src/github.com/gizak/termui/example/par.go create mode 100644 Godeps/_workspace/src/github.com/gizak/termui/example/par.png create mode 100644 Godeps/_workspace/src/github.com/gizak/termui/example/sparklines.go create mode 100644 Godeps/_workspace/src/github.com/gizak/termui/example/sparklines.png create mode 100644 Godeps/_workspace/src/github.com/gizak/termui/example/theme.go create mode 100644 Godeps/_workspace/src/github.com/gizak/termui/example/themedefault.png create mode 100644 Godeps/_workspace/src/github.com/gizak/termui/example/themehelloworld.png create mode 100644 Godeps/_workspace/src/github.com/gizak/termui/gauge.go create mode 100644 Godeps/_workspace/src/github.com/gizak/termui/grid.go create mode 100644 Godeps/_workspace/src/github.com/gizak/termui/grid_test.go create mode 100644 Godeps/_workspace/src/github.com/gizak/termui/helper.go create mode 100644 Godeps/_workspace/src/github.com/gizak/termui/helper_test.go create mode 100644 Godeps/_workspace/src/github.com/gizak/termui/list.go create mode 100644 Godeps/_workspace/src/github.com/gizak/termui/mbar.go create mode 100644 Godeps/_workspace/src/github.com/gizak/termui/p.go create mode 100644 Godeps/_workspace/src/github.com/gizak/termui/point.go create mode 100644 Godeps/_workspace/src/github.com/gizak/termui/render.go create mode 100644 Godeps/_workspace/src/github.com/gizak/termui/sparkline.go create mode 100644 Godeps/_workspace/src/github.com/gizak/termui/theme.go delete mode 100644 Godeps/_workspace/src/github.com/howeyc/fsnotify/.gitignore delete mode 100644 Godeps/_workspace/src/github.com/howeyc/fsnotify/AUTHORS delete mode 100644 Godeps/_workspace/src/github.com/howeyc/fsnotify/CHANGELOG.md delete mode 100644 Godeps/_workspace/src/github.com/howeyc/fsnotify/CONTRIBUTING.md delete mode 100644 Godeps/_workspace/src/github.com/howeyc/fsnotify/LICENSE delete mode 100644 Godeps/_workspace/src/github.com/howeyc/fsnotify/README.md delete mode 100644 Godeps/_workspace/src/github.com/howeyc/fsnotify/example_test.go delete mode 100644 Godeps/_workspace/src/github.com/howeyc/fsnotify/fsnotify.go delete mode 100644 Godeps/_workspace/src/github.com/howeyc/fsnotify/fsnotify_bsd.go delete mode 100644 Godeps/_workspace/src/github.com/howeyc/fsnotify/fsnotify_linux.go delete mode 100644 Godeps/_workspace/src/github.com/howeyc/fsnotify/fsnotify_open_bsd.go delete mode 100644 Godeps/_workspace/src/github.com/howeyc/fsnotify/fsnotify_open_darwin.go delete mode 100644 Godeps/_workspace/src/github.com/howeyc/fsnotify/fsnotify_symlink_test.go delete mode 100644 Godeps/_workspace/src/github.com/howeyc/fsnotify/fsnotify_test.go delete mode 100644 Godeps/_workspace/src/github.com/howeyc/fsnotify/fsnotify_windows.go create mode 100644 Godeps/_workspace/src/github.com/mattn/go-runewidth/.travis.yml create mode 100644 Godeps/_workspace/src/github.com/mattn/go-runewidth/README.mkd create mode 100644 Godeps/_workspace/src/github.com/mattn/go-runewidth/runewidth.go create mode 100644 Godeps/_workspace/src/github.com/mattn/go-runewidth/runewidth_js.go create mode 100644 Godeps/_workspace/src/github.com/mattn/go-runewidth/runewidth_posix.go create mode 100644 Godeps/_workspace/src/github.com/mattn/go-runewidth/runewidth_test.go create mode 100644 Godeps/_workspace/src/github.com/mattn/go-runewidth/runewidth_windows.go create mode 100644 Godeps/_workspace/src/github.com/nsf/termbox-go/AUTHORS create mode 100644 Godeps/_workspace/src/github.com/nsf/termbox-go/LICENSE create mode 100644 Godeps/_workspace/src/github.com/nsf/termbox-go/README.md create mode 100644 Godeps/_workspace/src/github.com/nsf/termbox-go/api.go create mode 100644 Godeps/_workspace/src/github.com/nsf/termbox-go/api_common.go create mode 100644 Godeps/_workspace/src/github.com/nsf/termbox-go/api_windows.go create mode 100644 Godeps/_workspace/src/github.com/nsf/termbox-go/collect_terminfo.py create mode 100644 Godeps/_workspace/src/github.com/nsf/termbox-go/syscalls.go create mode 100644 Godeps/_workspace/src/github.com/nsf/termbox-go/syscalls_darwin_386.go create mode 100644 Godeps/_workspace/src/github.com/nsf/termbox-go/syscalls_darwin_amd64.go create mode 100644 Godeps/_workspace/src/github.com/nsf/termbox-go/syscalls_freebsd.go create mode 100644 Godeps/_workspace/src/github.com/nsf/termbox-go/syscalls_linux.go create mode 100644 Godeps/_workspace/src/github.com/nsf/termbox-go/syscalls_netbsd.go create mode 100644 Godeps/_workspace/src/github.com/nsf/termbox-go/syscalls_openbsd.go create mode 100644 Godeps/_workspace/src/github.com/nsf/termbox-go/syscalls_windows.go create mode 100644 Godeps/_workspace/src/github.com/nsf/termbox-go/termbox.go create mode 100644 Godeps/_workspace/src/github.com/nsf/termbox-go/termbox_common.go create mode 100644 Godeps/_workspace/src/github.com/nsf/termbox-go/termbox_windows.go create mode 100644 Godeps/_workspace/src/github.com/nsf/termbox-go/terminfo.go create mode 100644 Godeps/_workspace/src/github.com/nsf/termbox-go/terminfo_builtin.go delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/.gitignore delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/LICENSE delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/README.md delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/all.cpp delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/bridge.go delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/cdata/cdata.go delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/cdata/cdata12.c delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/cdata/cdata14_386.s delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/cdata/cdata14_amd64.s delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/cdata/cdata14_arm.s delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/cdata/cdata_test.go delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/cmd/genqrc/main.go delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/cmd/ubuntu-touch/particle.desktop delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/cmd/ubuntu-touch/setup.sh delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/cpp/capi.cpp delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/cpp/capi.h delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/cpp/connector.cpp delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/cpp/connector.h delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/cpp/govalue.cpp delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/cpp/govalue.h delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/cpp/govaluetype.cpp delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/cpp/govaluetype.h delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/cpp/idletimer.cpp delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/cpp/mmemwin.cpp delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/cpp/moc_all.cpp delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/cpp/moc_connector.cpp delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/cpp/moc_govalue.cpp delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/cpp/moc_idletimer.cpp delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/cpp/private/qmetaobject_p.h delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/cpp/private/qmetaobjectbuilder_p.h delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/cpp/private/qobject_p.h delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/cpp/private/qtheader.h delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/cpp/update-moc.sh delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/cpptest/cpptest.cpp delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/cpptest/cpptest.go delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/cpptest/cpptest.h delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/cpptest/moc_testtype.cpp delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/cpptest/testtype.h delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/cpptest/update-moc.sh delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/datatype.go delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/doc.go delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/.gitignore delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/README.md delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/basiclayouts/basiclayouts.go delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/basiclayouts/main.qml delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/content/AboutDialog.qml delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/content/ChildWindow.qml delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/content/Controls.qml delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/content/ImageViewer.qml delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/content/Layouts.qml delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/content/ModelView.qml delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/content/Styles.qml delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/gallery.go delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/images/bubble.png delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/images/button-pressed.png delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/images/button.png delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/images/document-open.png delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/images/document-open@2x.png delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/images/document-save-as.png delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/images/document-save-as@2x.png delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/images/folder_new.png delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/images/go-next.png delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/images/go-previous.png delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/images/preferences-system.png delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/images/process-stop.png delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/images/progress-background.png delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/images/progress-fill.png delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/images/slider-handle.png delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/images/tab.png delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/images/tab_selected.png delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/images/textfield.png delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/images/toplevel_window.png delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/images/view-refresh.png delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/images/window-new.png delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/images/window-new@2x.png delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/main.qml delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/splitview/main.qml delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/splitview/splitview.go delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/tableview/images/header.png delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/tableview/images/selectedrow.png delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/tableview/main.qml delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/tableview/tableview.go delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/touch/content/AndroidDelegate.qml delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/touch/content/ButtonPage.qml delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/touch/content/ListPage.qml delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/touch/content/ProgressBarPage.qml delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/touch/content/SliderPage.qml delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/touch/content/TabBarPage.qml delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/touch/content/TextInputPage.qml delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/touch/images/NOTICE.txt delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/touch/images/button_default.png delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/touch/images/button_pressed.png delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/touch/images/navigation_next_item.png delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/touch/images/navigation_previous_item.png delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/touch/images/tab_selected.png delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/touch/images/tabs_standard.png delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/touch/images/textinput.png delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/touch/images/toolbar.png delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/touch/main.qml delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/touch/touch.go delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/customtype/customtype.go delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/customtype/customtype.qml delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/gopher/gopher.go delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/gopher/gopher.qml delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/gopher/mix.qml delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/gopher/model/README.md delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/gopher/model/gopher.blend delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/gopher/model/gopher.mtl delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/gopher/model/gopher.obj delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/gopher/wavefront.go delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/imgprovider/imgprovider.go delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/imgprovider/imgprovider.qml delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/imgprovider/ubuntu-gopher.png delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/modelview/delegate/delegate.go delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/modelview/delegate/delegate.qml delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/painting-es2/painting.go delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/painting-es2/painting.qml delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/painting/painting.go delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/painting/painting.qml delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/particle/main.go delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/particle/particle.png delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/particle/particle.qml delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/qmlscene/Cell.qml delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/qmlscene/qmlscene.go delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/qmlscene/tutorial1.qml delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/qmlscene/tutorial2.qml delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/qmlscene/tutorial3.qml delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/qrcpacking/assets/particle.png delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/qrcpacking/assets/particle.qml delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/qrcpacking/main.go delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/qrcpacking/qrc.go delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/reparent/base.qml delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/reparent/rect.qml delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/reparent/reparent.go delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/examples/snapweb/snapweb.go delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/1.0/funcs.cpp delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/1.0/funcs.h delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/1.0/gl.go delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/1.1/funcs.cpp delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/1.1/funcs.h delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/1.1/gl.go delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/1.2/funcs.cpp delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/1.2/funcs.h delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/1.2/gl.go delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/1.3/funcs.cpp delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/1.3/funcs.h delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/1.3/gl.go delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/1.4/funcs.cpp delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/1.4/funcs.h delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/1.4/gl.go delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/1.5/funcs.cpp delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/1.5/funcs.h delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/1.5/gl.go delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/2.0/funcs.cpp delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/2.0/funcs.h delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/2.0/gl.go delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/2.1/funcs.cpp delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/2.1/funcs.h delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/2.1/gl.go delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/3.0/funcs.cpp delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/3.0/funcs.h delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/3.0/gl.go delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/3.1/funcs.cpp delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/3.1/funcs.h delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/3.1/gl.go delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/3.2compat/funcs.cpp delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/3.2compat/funcs.h delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/3.2compat/gl.go delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/3.2core/funcs.cpp delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/3.2core/funcs.h delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/3.2core/gl.go delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/3.3compat/funcs.cpp delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/3.3compat/funcs.h delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/3.3compat/gl.go delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/3.3core/funcs.cpp delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/3.3core/funcs.h delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/3.3core/gl.go delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/4.0compat/funcs.cpp delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/4.0compat/funcs.h delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/4.0compat/gl.go delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/4.0core/funcs.cpp delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/4.0core/funcs.h delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/4.0core/gl.go delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/4.1compat/funcs.cpp delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/4.1compat/funcs.h delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/4.1compat/gl.go delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/4.1core/funcs.cpp delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/4.1core/funcs.h delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/4.1core/gl.go delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/4.2compat/funcs.cpp delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/4.2compat/funcs.h delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/4.2compat/gl.go delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/4.2core/funcs.cpp delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/4.2core/funcs.h delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/4.2core/gl.go delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/4.3compat/funcs.cpp delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/4.3compat/funcs.h delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/4.3compat/gl.go delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/4.3core/funcs.cpp delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/4.3core/funcs.h delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/4.3core/gl.go delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/es2/funcs.cpp delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/es2/funcs.h delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/es2/gl.go delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/gengl/Makefile delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/gengl/funcs.go delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/gengl/gl.xml delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/gengl/main.go delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/gengl/parseqt.go delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/gengl/parseqt.rl delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/gl/glbase/glbase.go delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/log.go delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/qml.go delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/qml_test.go delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/resources.go delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/stats.go delete mode 100644 Godeps/_workspace/src/github.com/obscuren/qml/testing.go delete mode 100644 Godeps/_workspace/src/gopkg.in/qml.v1/cdata/cdata.go delete mode 100644 Godeps/_workspace/src/gopkg.in/qml.v1/cdata/cdata12.c delete mode 100644 Godeps/_workspace/src/gopkg.in/qml.v1/cdata/cdata14_386.s delete mode 100644 Godeps/_workspace/src/gopkg.in/qml.v1/cdata/cdata14_amd64.s delete mode 100644 Godeps/_workspace/src/gopkg.in/qml.v1/cdata/cdata14_arm.s delete mode 100644 Godeps/_workspace/src/gopkg.in/qml.v1/cdata/cdata_test.go delete mode 100644 Godeps/_workspace/src/gopkg.in/qml.v1/gl/glbase/glbase.go diff --git a/Godeps/Godeps.json b/Godeps/Godeps.json index 7d3e18e269..fda5dcc3c8 100644 --- a/Godeps/Godeps.json +++ b/Godeps/Godeps.json @@ -25,9 +25,8 @@ "Rev": "173b8ff953610c13710061e83b95b50c73d7ea50" }, { - "ImportPath": "github.com/howeyc/fsnotify", - "Comment": "v0.9.0-11-g6b1ef89", - "Rev": "6b1ef893dc11e0447abda6da20a5203481878dda" + "ImportPath": "github.com/gizak/termui", + "Rev": "bab8dce01c193d82bc04888a0a9a7814d505f532" }, { "ImportPath": "github.com/huin/goupnp", @@ -50,8 +49,13 @@ "Rev": "fdbe02a1b44e75977b2690062b83cf507d70c013" }, { - "ImportPath": "github.com/obscuren/qml", - "Rev": "c288002b52e905973b131089a8a7c761d4a2c36a" + "ImportPath": "github.com/mattn/go-runewidth", + "Comment": "travisish-33-g5890272", + "Rev": "5890272cd41c5103531cd7b79e428d99c9e97f76" + }, + { + "ImportPath": "github.com/nsf/termbox-go", + "Rev": "675ffd907b7401b8a709a5ef2249978af5616bb2" }, { "ImportPath": "github.com/peterh/liner", @@ -121,14 +125,6 @@ { "ImportPath": "gopkg.in/karalabe/cookiejar.v2/collections/prque", "Rev": "0b2e270613f5d7ba262a5749b9e32270131497a2" - }, - { - "ImportPath": "gopkg.in/qml.v1/cdata", - "Rev": "1116cb9cd8dee23f8d444ded354eb53122739f99" - }, - { - "ImportPath": "gopkg.in/qml.v1/gl/glbase", - "Rev": "1116cb9cd8dee23f8d444ded354eb53122739f99" } ] } diff --git a/Godeps/_workspace/src/github.com/gizak/termui/.gitignore b/Godeps/_workspace/src/github.com/gizak/termui/.gitignore new file mode 100644 index 0000000000..daf913b1b3 --- /dev/null +++ b/Godeps/_workspace/src/github.com/gizak/termui/.gitignore @@ -0,0 +1,24 @@ +# Compiled Object files, Static and Dynamic libs (Shared Objects) +*.o +*.a +*.so + +# Folders +_obj +_test + +# Architecture specific extensions/prefixes +*.[568vq] +[568vq].out + +*.cgo1.go +*.cgo2.c +_cgo_defun.c +_cgo_gotypes.go +_cgo_export.* + +_testmain.go + +*.exe +*.test +*.prof diff --git a/Godeps/_workspace/src/github.com/gizak/termui/.travis.yml b/Godeps/_workspace/src/github.com/gizak/termui/.travis.yml new file mode 100644 index 0000000000..206e887409 --- /dev/null +++ b/Godeps/_workspace/src/github.com/gizak/termui/.travis.yml @@ -0,0 +1,6 @@ +language: go + +go: + - tip + +script: go test -v ./ \ No newline at end of file diff --git a/Godeps/_workspace/src/github.com/gizak/termui/LICENSE b/Godeps/_workspace/src/github.com/gizak/termui/LICENSE new file mode 100644 index 0000000000..311ccc74fb --- /dev/null +++ b/Godeps/_workspace/src/github.com/gizak/termui/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2015 Zack Guo + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + diff --git a/Godeps/_workspace/src/github.com/gizak/termui/README.md b/Godeps/_workspace/src/github.com/gizak/termui/README.md new file mode 100644 index 0000000000..b9bc3024d4 --- /dev/null +++ b/Godeps/_workspace/src/github.com/gizak/termui/README.md @@ -0,0 +1,159 @@ +# termui [![Build Status](https://travis-ci.org/gizak/termui.svg?branch=master)](https://travis-ci.org/gizak/termui) [![Doc Status](https://godoc.org/github.com/gizak/termui?status.png)](https://godoc.org/github.com/gizak/termui) + +## Update 23/06/2015 +Pull requests and master branch are freezing, waiting for merging from `refactoring` branch. + +## Notice +termui comes with ABSOLUTELY NO WARRANTY, and there is a breaking change coming up (see refactoring branch) which will change the `Bufferer` interface and many others. These changes reduce calculation overhead and introduce a new drawing buffer with better capacibilities. We will step into the next stage (call it beta) after merging these changes. + +## Introduction +Go terminal dashboard. Inspired by [blessed-contrib](https://github.com/yaronn/blessed-contrib), but purely in Go. + +Cross-platform, easy to compile, and fully-customizable. + +__Demo:__ (cast under osx 10.10; Terminal.app; Menlo Regular 12pt.) + +demo + +__Grid layout:__ + +Expressive syntax, using [12 columns grid system](http://www.w3schools.com/bootstrap/bootstrap_grid_system.asp) +```go + import ui "github.com/gizak/termui" + // init and create widgets... + + // build + ui.Body.AddRows( + ui.NewRow( + ui.NewCol(6, 0, widget0), + ui.NewCol(6, 0, widget1)), + ui.NewRow( + ui.NewCol(3, 0, widget2), + ui.NewCol(3, 0, widget30, widget31, widget32), + ui.NewCol(6, 0, widget4))) + + // calculate layout + ui.Body.Align() + + ui.Render(ui.Body) +``` +[demo code:](https://github.com/gizak/termui/blob/master/example/grid.go) + +grid + +## Installation + + go get github.com/gizak/termui + +## Usage + +Each component's layout is a bit like HTML block (box model), which has border and padding. + +The `Border` property can be chosen to hide or display (with its border label), when it comes to display, the label takes 1 padding space (i.e. in css: `padding: 1;`, innerHeight and innerWidth therefore shrunk by 1). + +`````go + import ui "github.com/gizak/termui" // <- ui shortcut, optional + + func main() { + err := ui.Init() + if err != nil { + panic(err) + } + defer ui.Close() + + p := ui.NewPar(":PRESS q TO QUIT DEMO") + p.Height = 3 + p.Width = 50 + p.TextFgColor = ui.ColorWhite + p.Border.Label = "Text Box" + p.Border.FgColor = ui.ColorCyan + + g := ui.NewGauge() + g.Percent = 50 + g.Width = 50 + g.Height = 3 + g.Y = 11 + g.Border.Label = "Gauge" + g.BarColor = ui.ColorRed + g.Border.FgColor = ui.ColorWhite + g.Border.LabelFgColor = ui.ColorCyan + + ui.Render(p, g) + + // event handler... + } +````` + +Note that components can be overlapped (I'd rather call this a feature...), `Render(rs ...Renderer)` renders its args from left to right (i.e. each component's weight is arising from left to right). + +## Themes + +_All_ colors in _all_ components can be changed at _any_ time, while there provides some predefined color schemes: + +```go +// for now there are only two themes: default and helloworld +termui.UseTheme("helloworld") + +// create components... +``` +The `default ` theme's settings depend on the user's terminal color scheme, which is saying if your terminal default font color is white and background is white, it will be like: + +default + +The `helloworld` color scheme drops in some colors! + +helloworld + +## Widgets + +#### Par + +[demo code](https://github.com/gizak/termui/blob/master/example/par.go) + +par + +#### List +[demo code](https://github.com/gizak/termui/blob/master/example/list.go) + +list + +#### Gauge +[demo code](https://github.com/gizak/termui/blob/master/example/gauge.go) + +gauge + +#### Line Chart +[demo code](https://github.com/gizak/termui/blob/master/example/linechart.go) + +linechart + +#### Bar Chart +[demo code](https://github.com/gizak/termui/blob/master/example/barchart.go) + +barchart + +#### Mult-Bar / Stacked-Bar Chart +[demo code](https://github.com/gizak/termui/blob/master/example/mbarchart.go) + +barchart + +#### Sparklines +[demo code](https://github.com/gizak/termui/blob/master/example/sparklines.go) + +sparklines + + +## GoDoc + +[godoc](https://godoc.org/github.com/gizak/termui) + +## TODO + +- [x] Grid layout +- [ ] Event system +- [ ] Canvas widget +- [ ] Refine APIs +- [ ] Focusable widgets + +## License +This library is under the [MIT License](http://opensource.org/licenses/MIT) diff --git a/Godeps/_workspace/src/github.com/gizak/termui/bar.go b/Godeps/_workspace/src/github.com/gizak/termui/bar.go new file mode 100644 index 0000000000..57bae0ae8d --- /dev/null +++ b/Godeps/_workspace/src/github.com/gizak/termui/bar.go @@ -0,0 +1,135 @@ +// Copyright 2015 Zack Guo . All rights reserved. +// Use of this source code is governed by a MIT license that can +// be found in the LICENSE file. + +package termui + +import "fmt" + +// BarChart creates multiple bars in a widget: +/* + bc := termui.NewBarChart() + data := []int{3, 2, 5, 3, 9, 5} + bclabels := []string{"S0", "S1", "S2", "S3", "S4", "S5"} + bc.Border.Label = "Bar Chart" + bc.Data = data + bc.Width = 26 + bc.Height = 10 + bc.DataLabels = bclabels + bc.TextColor = termui.ColorGreen + bc.BarColor = termui.ColorRed + bc.NumColor = termui.ColorYellow +*/ +type BarChart struct { + Block + BarColor Attribute + TextColor Attribute + NumColor Attribute + Data []int + DataLabels []string + BarWidth int + BarGap int + labels [][]rune + dataNum [][]rune + numBar int + scale float64 + max int +} + +// NewBarChart returns a new *BarChart with current theme. +func NewBarChart() *BarChart { + bc := &BarChart{Block: *NewBlock()} + bc.BarColor = theme.BarChartBar + bc.NumColor = theme.BarChartNum + bc.TextColor = theme.BarChartText + bc.BarGap = 1 + bc.BarWidth = 3 + return bc +} + +func (bc *BarChart) layout() { + bc.numBar = bc.innerWidth / (bc.BarGap + bc.BarWidth) + bc.labels = make([][]rune, bc.numBar) + bc.dataNum = make([][]rune, len(bc.Data)) + + for i := 0; i < bc.numBar && i < len(bc.DataLabels) && i < len(bc.Data); i++ { + bc.labels[i] = trimStr2Runes(bc.DataLabels[i], bc.BarWidth) + n := bc.Data[i] + s := fmt.Sprint(n) + bc.dataNum[i] = trimStr2Runes(s, bc.BarWidth) + } + + //bc.max = bc.Data[0] // what if Data is nil? Sometimes when bar graph is nill it produces panic with panic: runtime error: index out of range + // Asign a negative value to get maxvalue auto-populates + if bc.max == 0 { + bc.max = -1 + } + for i := 0; i < len(bc.Data); i++ { + if bc.max < bc.Data[i] { + bc.max = bc.Data[i] + } + } + bc.scale = float64(bc.max) / float64(bc.innerHeight-1) +} + +func (bc *BarChart) SetMax(max int) { + + if max > 0 { + bc.max = max + } +} + +// Buffer implements Bufferer interface. +func (bc *BarChart) Buffer() []Point { + ps := bc.Block.Buffer() + bc.layout() + + for i := 0; i < bc.numBar && i < len(bc.Data) && i < len(bc.DataLabels); i++ { + h := int(float64(bc.Data[i]) / bc.scale) + oftX := i * (bc.BarWidth + bc.BarGap) + // plot bar + for j := 0; j < bc.BarWidth; j++ { + for k := 0; k < h; k++ { + p := Point{} + p.Ch = ' ' + p.Bg = bc.BarColor + if bc.BarColor == ColorDefault { // when color is default, space char treated as transparent! + p.Bg |= AttrReverse + } + p.X = bc.innerX + i*(bc.BarWidth+bc.BarGap) + j + p.Y = bc.innerY + bc.innerHeight - 2 - k + ps = append(ps, p) + } + } + // plot text + for j, k := 0, 0; j < len(bc.labels[i]); j++ { + w := charWidth(bc.labels[i][j]) + p := Point{} + p.Ch = bc.labels[i][j] + p.Bg = bc.BgColor + p.Fg = bc.TextColor + p.Y = bc.innerY + bc.innerHeight - 1 + p.X = bc.innerX + oftX + k + ps = append(ps, p) + k += w + } + // plot num + for j := 0; j < len(bc.dataNum[i]); j++ { + p := Point{} + p.Ch = bc.dataNum[i][j] + p.Fg = bc.NumColor + p.Bg = bc.BarColor + if bc.BarColor == ColorDefault { // the same as above + p.Bg |= AttrReverse + } + if h == 0 { + p.Bg = bc.BgColor + } + p.X = bc.innerX + oftX + (bc.BarWidth-len(bc.dataNum[i]))/2 + j + p.Y = bc.innerY + bc.innerHeight - 2 + ps = append(ps, p) + } + } + + return bc.Block.chopOverflow(ps) +} diff --git a/Godeps/_workspace/src/github.com/gizak/termui/block.go b/Godeps/_workspace/src/github.com/gizak/termui/block.go new file mode 100644 index 0000000000..9531365966 --- /dev/null +++ b/Godeps/_workspace/src/github.com/gizak/termui/block.go @@ -0,0 +1,142 @@ +// Copyright 2015 Zack Guo . All rights reserved. +// Use of this source code is governed by a MIT license that can +// be found in the LICENSE file. + +package termui + +// Block is a base struct for all other upper level widgets, +// consider it as css: display:block. +// Normally you do not need to create it manually. +type Block struct { + X int + Y int + Border labeledBorder + IsDisplay bool + HasBorder bool + BgColor Attribute + Width int + Height int + innerWidth int + innerHeight int + innerX int + innerY int + PaddingTop int + PaddingBottom int + PaddingLeft int + PaddingRight int +} + +// NewBlock returns a *Block which inherits styles from current theme. +func NewBlock() *Block { + d := Block{} + d.IsDisplay = true + d.HasBorder = theme.HasBorder + d.Border.BgColor = theme.BorderBg + d.Border.FgColor = theme.BorderFg + d.Border.LabelBgColor = theme.BorderLabelTextBg + d.Border.LabelFgColor = theme.BorderLabelTextFg + d.BgColor = theme.BlockBg + d.Width = 2 + d.Height = 2 + return &d +} + +// compute box model +func (d *Block) align() { + d.innerWidth = d.Width - d.PaddingLeft - d.PaddingRight + d.innerHeight = d.Height - d.PaddingTop - d.PaddingBottom + d.innerX = d.X + d.PaddingLeft + d.innerY = d.Y + d.PaddingTop + + if d.HasBorder { + d.innerHeight -= 2 + d.innerWidth -= 2 + d.Border.X = d.X + d.Border.Y = d.Y + d.Border.Width = d.Width + d.Border.Height = d.Height + d.innerX++ + d.innerY++ + } + + if d.innerHeight < 0 { + d.innerHeight = 0 + } + if d.innerWidth < 0 { + d.innerWidth = 0 + } + +} + +// InnerBounds returns the internal bounds of the block after aligning and +// calculating the padding and border, if any. +func (d *Block) InnerBounds() (x, y, width, height int) { + d.align() + return d.innerX, d.innerY, d.innerWidth, d.innerHeight +} + +// Buffer implements Bufferer interface. +// Draw background and border (if any). +func (d *Block) Buffer() []Point { + d.align() + + ps := []Point{} + if !d.IsDisplay { + return ps + } + + if d.HasBorder { + ps = d.Border.Buffer() + } + + for i := 0; i < d.innerWidth; i++ { + for j := 0; j < d.innerHeight; j++ { + p := Point{} + p.X = d.X + 1 + i + p.Y = d.Y + 1 + j + p.Ch = ' ' + p.Bg = d.BgColor + ps = append(ps, p) + } + } + return ps +} + +// GetHeight implements GridBufferer. +// It returns current height of the block. +func (d Block) GetHeight() int { + return d.Height +} + +// SetX implements GridBufferer interface, which sets block's x position. +func (d *Block) SetX(x int) { + d.X = x +} + +// SetY implements GridBufferer interface, it sets y position for block. +func (d *Block) SetY(y int) { + d.Y = y +} + +// SetWidth implements GridBuffer interface, it sets block's width. +func (d *Block) SetWidth(w int) { + d.Width = w +} + +// chop the overflow parts +func (d *Block) chopOverflow(ps []Point) []Point { + nps := make([]Point, 0, len(ps)) + x := d.X + y := d.Y + w := d.Width + h := d.Height + for _, v := range ps { + if v.X >= x && + v.X < x+w && + v.Y >= y && + v.Y < y+h { + nps = append(nps, v) + } + } + return nps +} diff --git a/Godeps/_workspace/src/github.com/gizak/termui/block_test.go b/Godeps/_workspace/src/github.com/gizak/termui/block_test.go new file mode 100644 index 0000000000..2de205b21f --- /dev/null +++ b/Godeps/_workspace/src/github.com/gizak/termui/block_test.go @@ -0,0 +1,46 @@ +package termui + +import "testing" + +func TestBlock_InnerBounds(t *testing.T) { + b := NewBlock() + b.X = 10 + b.Y = 11 + b.Width = 12 + b.Height = 13 + + assert := func(name string, x, y, w, h int) { + t.Log(name) + cx, cy, cw, ch := b.InnerBounds() + if cx != x { + t.Errorf("expected x to be %d but got %d", x, cx) + } + if cy != y { + t.Errorf("expected y to be %d but got %d", y, cy) + } + if cw != w { + t.Errorf("expected width to be %d but got %d", w, cw) + } + if ch != h { + t.Errorf("expected height to be %d but got %d", h, ch) + } + } + + b.HasBorder = false + assert("no border, no padding", 10, 11, 12, 13) + + b.HasBorder = true + assert("border, no padding", 11, 12, 10, 11) + + b.PaddingBottom = 2 + assert("border, 2b padding", 11, 12, 10, 9) + + b.PaddingTop = 3 + assert("border, 2b 3t padding", 11, 15, 10, 6) + + b.PaddingLeft = 4 + assert("border, 2b 3t 4l padding", 15, 15, 6, 6) + + b.PaddingRight = 5 + assert("border, 2b 3t 4l 5r padding", 15, 15, 1, 6) +} diff --git a/Godeps/_workspace/src/github.com/gizak/termui/box.go b/Godeps/_workspace/src/github.com/gizak/termui/box.go new file mode 100644 index 0000000000..1dcfd86925 --- /dev/null +++ b/Godeps/_workspace/src/github.com/gizak/termui/box.go @@ -0,0 +1,117 @@ +// Copyright 2015 Zack Guo . All rights reserved. +// Use of this source code is governed by a MIT license that can +// be found in the LICENSE file. + +package termui + +type border struct { + X int + Y int + Width int + Height int + FgColor Attribute + BgColor Attribute +} + +type hline struct { + X int + Y int + Length int + FgColor Attribute + BgColor Attribute +} + +type vline struct { + X int + Y int + Length int + FgColor Attribute + BgColor Attribute +} + +// Draw a horizontal line. +func (l hline) Buffer() []Point { + pts := make([]Point, l.Length) + for i := 0; i < l.Length; i++ { + pts[i].X = l.X + i + pts[i].Y = l.Y + pts[i].Ch = HORIZONTAL_LINE + pts[i].Bg = l.BgColor + pts[i].Fg = l.FgColor + } + return pts +} + +// Draw a vertical line. +func (l vline) Buffer() []Point { + pts := make([]Point, l.Length) + for i := 0; i < l.Length; i++ { + pts[i].X = l.X + pts[i].Y = l.Y + i + pts[i].Ch = VERTICAL_LINE + pts[i].Bg = l.BgColor + pts[i].Fg = l.FgColor + } + return pts +} + +// Draw a box border. +func (b border) Buffer() []Point { + if b.Width < 2 || b.Height < 2 { + return nil + } + pts := make([]Point, 2*b.Width+2*b.Height-4) + + pts[0].X = b.X + pts[0].Y = b.Y + pts[0].Fg = b.FgColor + pts[0].Bg = b.BgColor + pts[0].Ch = TOP_LEFT + + pts[1].X = b.X + b.Width - 1 + pts[1].Y = b.Y + pts[1].Fg = b.FgColor + pts[1].Bg = b.BgColor + pts[1].Ch = TOP_RIGHT + + pts[2].X = b.X + pts[2].Y = b.Y + b.Height - 1 + pts[2].Fg = b.FgColor + pts[2].Bg = b.BgColor + pts[2].Ch = BOTTOM_LEFT + + pts[3].X = b.X + b.Width - 1 + pts[3].Y = b.Y + b.Height - 1 + pts[3].Fg = b.FgColor + pts[3].Bg = b.BgColor + pts[3].Ch = BOTTOM_RIGHT + + copy(pts[4:], (hline{b.X + 1, b.Y, b.Width - 2, b.FgColor, b.BgColor}).Buffer()) + copy(pts[4+b.Width-2:], (hline{b.X + 1, b.Y + b.Height - 1, b.Width - 2, b.FgColor, b.BgColor}).Buffer()) + copy(pts[4+2*b.Width-4:], (vline{b.X, b.Y + 1, b.Height - 2, b.FgColor, b.BgColor}).Buffer()) + copy(pts[4+2*b.Width-4+b.Height-2:], (vline{b.X + b.Width - 1, b.Y + 1, b.Height - 2, b.FgColor, b.BgColor}).Buffer()) + + return pts +} + +type labeledBorder struct { + border + Label string + LabelFgColor Attribute + LabelBgColor Attribute +} + +// Draw a box border with label. +func (lb labeledBorder) Buffer() []Point { + ps := lb.border.Buffer() + maxTxtW := lb.Width - 2 + rs := trimStr2Runes(lb.Label, maxTxtW) + + for i, j, w := 0, 0, 0; i < len(rs); i++ { + w = charWidth(rs[i]) + ps = append(ps, newPointWithAttrs(rs[i], lb.X+1+j, lb.Y, lb.LabelFgColor, lb.LabelBgColor)) + j += w + } + + return ps +} diff --git a/Godeps/_workspace/src/github.com/gizak/termui/box_others.go b/Godeps/_workspace/src/github.com/gizak/termui/box_others.go new file mode 100644 index 0000000000..bcc3d7ded9 --- /dev/null +++ b/Godeps/_workspace/src/github.com/gizak/termui/box_others.go @@ -0,0 +1,14 @@ +// Copyright 2015 Zack Guo . All rights reserved. +// Use of this source code is governed by a MIT license that can +// be found in the LICENSE file. + +// +build !windows + +package termui + +const TOP_RIGHT = '┐' +const VERTICAL_LINE = '│' +const HORIZONTAL_LINE = '─' +const TOP_LEFT = '┌' +const BOTTOM_RIGHT = '┘' +const BOTTOM_LEFT = '└' diff --git a/Godeps/_workspace/src/github.com/gizak/termui/box_windows.go b/Godeps/_workspace/src/github.com/gizak/termui/box_windows.go new file mode 100644 index 0000000000..dd39019fe7 --- /dev/null +++ b/Godeps/_workspace/src/github.com/gizak/termui/box_windows.go @@ -0,0 +1,14 @@ +// Copyright 2015 Zack Guo . All rights reserved. +// Use of this source code is governed by a MIT license that can +// be found in the LICENSE file. + +// +build windows + +package termui + +const TOP_RIGHT = '+' +const VERTICAL_LINE = '|' +const HORIZONTAL_LINE = '-' +const TOP_LEFT = '+' +const BOTTOM_RIGHT = '+' +const BOTTOM_LEFT = '+' diff --git a/Godeps/_workspace/src/github.com/gizak/termui/canvas.go b/Godeps/_workspace/src/github.com/gizak/termui/canvas.go new file mode 100644 index 0000000000..614635ee4e --- /dev/null +++ b/Godeps/_workspace/src/github.com/gizak/termui/canvas.go @@ -0,0 +1,74 @@ +// Copyright 2015 Zack Guo . All rights reserved. +// Use of this source code is governed by a MIT license that can +// be found in the LICENSE file. + +package termui + +/* +dots: + ,___, + |1 4| + |2 5| + |3 6| + |7 8| + ````` +*/ + +var brailleBase = '\u2800' + +var brailleOftMap = [4][2]rune{ + {'\u0001', '\u0008'}, + {'\u0002', '\u0010'}, + {'\u0004', '\u0020'}, + {'\u0040', '\u0080'}} + +// Canvas contains drawing map: i,j -> rune +type Canvas map[[2]int]rune + +// NewCanvas returns an empty Canvas +func NewCanvas() Canvas { + return make(map[[2]int]rune) +} + +func chOft(x, y int) rune { + return brailleOftMap[y%4][x%2] +} + +func (c Canvas) rawCh(x, y int) rune { + if ch, ok := c[[2]int{x, y}]; ok { + return ch + } + return '\u0000' //brailleOffset +} + +// return coordinate in terminal +func chPos(x, y int) (int, int) { + return y / 4, x / 2 +} + +// Set sets a point (x,y) in the virtual coordinate +func (c Canvas) Set(x, y int) { + i, j := chPos(x, y) + ch := c.rawCh(i, j) + ch |= chOft(x, y) + c[[2]int{i, j}] = ch +} + +// Unset removes point (x,y) +func (c Canvas) Unset(x, y int) { + i, j := chPos(x, y) + ch := c.rawCh(i, j) + ch &= ^chOft(x, y) + c[[2]int{i, j}] = ch +} + +// Buffer returns un-styled points +func (c Canvas) Buffer() []Point { + ps := make([]Point, len(c)) + i := 0 + for k, v := range c { + ps[i] = newPoint(v+brailleBase, k[0], k[1]) + i++ + } + return ps +} diff --git a/Godeps/_workspace/src/github.com/gizak/termui/canvas_test.go b/Godeps/_workspace/src/github.com/gizak/termui/canvas_test.go new file mode 100644 index 0000000000..021949ced7 --- /dev/null +++ b/Godeps/_workspace/src/github.com/gizak/termui/canvas_test.go @@ -0,0 +1,55 @@ +package termui + +import ( + "testing" + + "github.com/davecgh/go-spew/spew" +) + +func TestCanvasSet(t *testing.T) { + c := NewCanvas() + c.Set(0, 0) + c.Set(0, 1) + c.Set(0, 2) + c.Set(0, 3) + c.Set(1, 3) + c.Set(2, 3) + c.Set(3, 3) + c.Set(4, 3) + c.Set(5, 3) + spew.Dump(c) +} + +func TestCanvasUnset(t *testing.T) { + c := NewCanvas() + c.Set(0, 0) + c.Set(0, 1) + c.Set(0, 2) + c.Unset(0, 2) + spew.Dump(c) + c.Unset(0, 3) + spew.Dump(c) +} + +func TestCanvasBuffer(t *testing.T) { + c := NewCanvas() + c.Set(0, 0) + c.Set(0, 1) + c.Set(0, 2) + c.Set(0, 3) + c.Set(1, 3) + c.Set(2, 3) + c.Set(3, 3) + c.Set(4, 3) + c.Set(5, 3) + c.Set(6, 3) + c.Set(7, 2) + c.Set(8, 1) + c.Set(9, 0) + bufs := c.Buffer() + rs := make([]rune, len(bufs)) + for i, v := range bufs { + rs[i] = v.Ch + } + spew.Dump(string(rs)) +} diff --git a/Godeps/_workspace/src/github.com/gizak/termui/chart.go b/Godeps/_workspace/src/github.com/gizak/termui/chart.go new file mode 100644 index 0000000000..d6fb8bc7df --- /dev/null +++ b/Godeps/_workspace/src/github.com/gizak/termui/chart.go @@ -0,0 +1,336 @@ +// Copyright 2015 Zack Guo . All rights reserved. +// Use of this source code is governed by a MIT license that can +// be found in the LICENSE file. + +package termui + +import ( + "fmt" + "math" +) + +// only 16 possible combinations, why bother +var braillePatterns = map[[2]int]rune{ + [2]int{0, 0}: '⣀', + [2]int{0, 1}: '⡠', + [2]int{0, 2}: '⡐', + [2]int{0, 3}: '⡈', + + [2]int{1, 0}: '⢄', + [2]int{1, 1}: '⠤', + [2]int{1, 2}: '⠔', + [2]int{1, 3}: '⠌', + + [2]int{2, 0}: '⢂', + [2]int{2, 1}: '⠢', + [2]int{2, 2}: '⠒', + [2]int{2, 3}: '⠊', + + [2]int{3, 0}: '⢁', + [2]int{3, 1}: '⠡', + [2]int{3, 2}: '⠑', + [2]int{3, 3}: '⠉', +} + +var lSingleBraille = [4]rune{'\u2840', '⠄', '⠂', '⠁'} +var rSingleBraille = [4]rune{'\u2880', '⠠', '⠐', '⠈'} + +// LineChart has two modes: braille(default) and dot. Using braille gives 2x capicity as dot mode, +// because one braille char can represent two data points. +/* + lc := termui.NewLineChart() + lc.Border.Label = "braille-mode Line Chart" + lc.Data = [1.2, 1.3, 1.5, 1.7, 1.5, 1.6, 1.8, 2.0] + lc.Width = 50 + lc.Height = 12 + lc.AxesColor = termui.ColorWhite + lc.LineColor = termui.ColorGreen | termui.AttrBold + // termui.Render(lc)... +*/ +type LineChart struct { + Block + Data []float64 + DataLabels []string // if unset, the data indices will be used + Mode string // braille | dot + DotStyle rune + LineColor Attribute + scale float64 // data span per cell on y-axis + AxesColor Attribute + drawingX int + drawingY int + axisYHeight int + axisXWidth int + axisYLebelGap int + axisXLebelGap int + topValue float64 + bottomValue float64 + labelX [][]rune + labelY [][]rune + labelYSpace int + maxY float64 + minY float64 +} + +// NewLineChart returns a new LineChart with current theme. +func NewLineChart() *LineChart { + lc := &LineChart{Block: *NewBlock()} + lc.AxesColor = theme.LineChartAxes + lc.LineColor = theme.LineChartLine + lc.Mode = "braille" + lc.DotStyle = '•' + lc.axisXLebelGap = 2 + lc.axisYLebelGap = 1 + lc.bottomValue = math.Inf(1) + lc.topValue = math.Inf(-1) + return lc +} + +// one cell contains two data points +// so the capicity is 2x as dot-mode +func (lc *LineChart) renderBraille() []Point { + ps := []Point{} + + // return: b -> which cell should the point be in + // m -> in the cell, divided into 4 equal height levels, which subcell? + getPos := func(d float64) (b, m int) { + cnt4 := int((d-lc.bottomValue)/(lc.scale/4) + 0.5) + b = cnt4 / 4 + m = cnt4 % 4 + return + } + // plot points + for i := 0; 2*i+1 < len(lc.Data) && i < lc.axisXWidth; i++ { + b0, m0 := getPos(lc.Data[2*i]) + b1, m1 := getPos(lc.Data[2*i+1]) + + if b0 == b1 { + p := Point{} + p.Ch = braillePatterns[[2]int{m0, m1}] + p.Bg = lc.BgColor + p.Fg = lc.LineColor + p.Y = lc.innerY + lc.innerHeight - 3 - b0 + p.X = lc.innerX + lc.labelYSpace + 1 + i + ps = append(ps, p) + } else { + p0 := newPointWithAttrs(lSingleBraille[m0], + lc.innerX+lc.labelYSpace+1+i, + lc.innerY+lc.innerHeight-3-b0, + lc.LineColor, + lc.BgColor) + p1 := newPointWithAttrs(rSingleBraille[m1], + lc.innerX+lc.labelYSpace+1+i, + lc.innerY+lc.innerHeight-3-b1, + lc.LineColor, + lc.BgColor) + ps = append(ps, p0, p1) + } + + } + return ps +} + +func (lc *LineChart) renderDot() []Point { + ps := []Point{} + for i := 0; i < len(lc.Data) && i < lc.axisXWidth; i++ { + p := Point{} + p.Ch = lc.DotStyle + p.Fg = lc.LineColor + p.Bg = lc.BgColor + p.X = lc.innerX + lc.labelYSpace + 1 + i + p.Y = lc.innerY + lc.innerHeight - 3 - int((lc.Data[i]-lc.bottomValue)/lc.scale+0.5) + ps = append(ps, p) + } + + return ps +} + +func (lc *LineChart) calcLabelX() { + lc.labelX = [][]rune{} + + for i, l := 0, 0; i < len(lc.DataLabels) && l < lc.axisXWidth; i++ { + if lc.Mode == "dot" { + if l >= len(lc.DataLabels) { + break + } + + s := str2runes(lc.DataLabels[l]) + w := strWidth(lc.DataLabels[l]) + if l+w <= lc.axisXWidth { + lc.labelX = append(lc.labelX, s) + } + l += w + lc.axisXLebelGap + } else { // braille + if 2*l >= len(lc.DataLabels) { + break + } + + s := str2runes(lc.DataLabels[2*l]) + w := strWidth(lc.DataLabels[2*l]) + if l+w <= lc.axisXWidth { + lc.labelX = append(lc.labelX, s) + } + l += w + lc.axisXLebelGap + + } + } +} + +func shortenFloatVal(x float64) string { + s := fmt.Sprintf("%.2f", x) + if len(s)-3 > 3 { + s = fmt.Sprintf("%.2e", x) + } + + if x < 0 { + s = fmt.Sprintf("%.2f", x) + } + return s +} + +func (lc *LineChart) calcLabelY() { + span := lc.topValue - lc.bottomValue + lc.scale = span / float64(lc.axisYHeight) + + n := (1 + lc.axisYHeight) / (lc.axisYLebelGap + 1) + lc.labelY = make([][]rune, n) + maxLen := 0 + for i := 0; i < n; i++ { + s := str2runes(shortenFloatVal(lc.bottomValue + float64(i)*span/float64(n))) + if len(s) > maxLen { + maxLen = len(s) + } + lc.labelY[i] = s + } + + lc.labelYSpace = maxLen +} + +func (lc *LineChart) calcLayout() { + // set datalabels if it is not provided + if lc.DataLabels == nil || len(lc.DataLabels) == 0 { + lc.DataLabels = make([]string, len(lc.Data)) + for i := range lc.Data { + lc.DataLabels[i] = fmt.Sprint(i) + } + } + + // lazy increase, to avoid y shaking frequently + // update bound Y when drawing is gonna overflow + lc.minY = lc.Data[0] + lc.maxY = lc.Data[0] + + // valid visible range + vrange := lc.innerWidth + if lc.Mode == "braille" { + vrange = 2 * lc.innerWidth + } + if vrange > len(lc.Data) { + vrange = len(lc.Data) + } + + for _, v := range lc.Data[:vrange] { + if v > lc.maxY { + lc.maxY = v + } + if v < lc.minY { + lc.minY = v + } + } + + span := lc.maxY - lc.minY + + if lc.minY < lc.bottomValue { + lc.bottomValue = lc.minY - 0.2*span + } + + if lc.maxY > lc.topValue { + lc.topValue = lc.maxY + 0.2*span + } + + lc.axisYHeight = lc.innerHeight - 2 + lc.calcLabelY() + + lc.axisXWidth = lc.innerWidth - 1 - lc.labelYSpace + lc.calcLabelX() + + lc.drawingX = lc.innerX + 1 + lc.labelYSpace + lc.drawingY = lc.innerY +} + +func (lc *LineChart) plotAxes() []Point { + origY := lc.innerY + lc.innerHeight - 2 + origX := lc.innerX + lc.labelYSpace + + ps := []Point{newPointWithAttrs(ORIGIN, origX, origY, lc.AxesColor, lc.BgColor)} + + for x := origX + 1; x < origX+lc.axisXWidth; x++ { + p := Point{} + p.X = x + p.Y = origY + p.Bg = lc.BgColor + p.Fg = lc.AxesColor + p.Ch = HDASH + ps = append(ps, p) + } + + for dy := 1; dy <= lc.axisYHeight; dy++ { + p := Point{} + p.X = origX + p.Y = origY - dy + p.Bg = lc.BgColor + p.Fg = lc.AxesColor + p.Ch = VDASH + ps = append(ps, p) + } + + // x label + oft := 0 + for _, rs := range lc.labelX { + if oft+len(rs) > lc.axisXWidth { + break + } + for j, r := range rs { + p := Point{} + p.Ch = r + p.Fg = lc.AxesColor + p.Bg = lc.BgColor + p.X = origX + oft + j + p.Y = lc.innerY + lc.innerHeight - 1 + ps = append(ps, p) + } + oft += len(rs) + lc.axisXLebelGap + } + + // y labels + for i, rs := range lc.labelY { + for j, r := range rs { + p := Point{} + p.Ch = r + p.Fg = lc.AxesColor + p.Bg = lc.BgColor + p.X = lc.innerX + j + p.Y = origY - i*(lc.axisYLebelGap+1) + ps = append(ps, p) + } + } + + return ps +} + +// Buffer implements Bufferer interface. +func (lc *LineChart) Buffer() []Point { + ps := lc.Block.Buffer() + if lc.Data == nil || len(lc.Data) == 0 { + return ps + } + lc.calcLayout() + ps = append(ps, lc.plotAxes()...) + + if lc.Mode == "dot" { + ps = append(ps, lc.renderDot()...) + } else { + ps = append(ps, lc.renderBraille()...) + } + + return lc.Block.chopOverflow(ps) +} diff --git a/Godeps/_workspace/src/github.com/gizak/termui/chart_others.go b/Godeps/_workspace/src/github.com/gizak/termui/chart_others.go new file mode 100644 index 0000000000..8911873b63 --- /dev/null +++ b/Godeps/_workspace/src/github.com/gizak/termui/chart_others.go @@ -0,0 +1,11 @@ +// Copyright 2015 Zack Guo . All rights reserved. +// Use of this source code is governed by a MIT license that can +// be found in the LICENSE file. + +// +build !windows + +package termui + +const VDASH = '┊' +const HDASH = '┈' +const ORIGIN = '└' diff --git a/Godeps/_workspace/src/github.com/gizak/termui/chart_windows.go b/Godeps/_workspace/src/github.com/gizak/termui/chart_windows.go new file mode 100644 index 0000000000..9f9a5e96c0 --- /dev/null +++ b/Godeps/_workspace/src/github.com/gizak/termui/chart_windows.go @@ -0,0 +1,11 @@ +// Copyright 2015 Zack Guo . All rights reserved. +// Use of this source code is governed by a MIT license that can +// be found in the LICENSE file. + +// +build windows + +package termui + +const VDASH = '|' +const HDASH = '-' +const ORIGIN = '+' diff --git a/Godeps/_workspace/src/github.com/gizak/termui/doc.go b/Godeps/_workspace/src/github.com/gizak/termui/doc.go new file mode 100644 index 0000000000..43f886f552 --- /dev/null +++ b/Godeps/_workspace/src/github.com/gizak/termui/doc.go @@ -0,0 +1,27 @@ +// Copyright 2015 Zack Guo . All rights reserved. +// Use of this source code is governed by a MIT license that can +// be found in the LICENSE file. + +/* +Package termui is a library designed for creating command line UI. For more info, goto http://github.com/gizak/termui + +A simplest example: + package main + + import ui "github.com/gizak/termui" + + func main() { + if err:=ui.Init(); err != nil { + panic(err) + } + defer ui.Close() + + g := ui.NewGauge() + g.Percent = 50 + g.Width = 50 + g.Border.Label = "Gauge" + + ui.Render(g) + } +*/ +package termui diff --git a/Godeps/_workspace/src/github.com/gizak/termui/events.go b/Godeps/_workspace/src/github.com/gizak/termui/events.go new file mode 100644 index 0000000000..23a189b56a --- /dev/null +++ b/Godeps/_workspace/src/github.com/gizak/termui/events.go @@ -0,0 +1,219 @@ +// Copyright 2015 Zack Guo . All rights reserved. +// Use of this source code is governed by a MIT license that can +// be found in the LICENSE file. +// +// Portions of this file uses [termbox-go](https://github.com/nsf/termbox-go/blob/54b74d087b7c397c402d0e3b66d2ccb6eaf5c2b4/api_common.go) +// by [authors](https://github.com/nsf/termbox-go/blob/master/AUTHORS) +// under [license](https://github.com/nsf/termbox-go/blob/master/LICENSE) + +package termui + +import "github.com/nsf/termbox-go" + +/***********************************termbox-go**************************************/ + +type ( + EventType uint8 + Modifier uint8 + Key uint16 +) + +// This type represents a termbox event. The 'Mod', 'Key' and 'Ch' fields are +// valid if 'Type' is EventKey. The 'Width' and 'Height' fields are valid if +// 'Type' is EventResize. The 'Err' field is valid if 'Type' is EventError. +type Event struct { + Type EventType // one of Event* constants + Mod Modifier // one of Mod* constants or 0 + Key Key // one of Key* constants, invalid if 'Ch' is not 0 + Ch rune // a unicode character + Width int // width of the screen + Height int // height of the screen + Err error // error in case if input failed + MouseX int // x coord of mouse + MouseY int // y coord of mouse + N int // number of bytes written when getting a raw event +} + +const ( + KeyF1 Key = 0xFFFF - iota + KeyF2 + KeyF3 + KeyF4 + KeyF5 + KeyF6 + KeyF7 + KeyF8 + KeyF9 + KeyF10 + KeyF11 + KeyF12 + KeyInsert + KeyDelete + KeyHome + KeyEnd + KeyPgup + KeyPgdn + KeyArrowUp + KeyArrowDown + KeyArrowLeft + KeyArrowRight + key_min // see terminfo + MouseLeft + MouseMiddle + MouseRight +) + +const ( + KeyCtrlTilde Key = 0x00 + KeyCtrl2 Key = 0x00 + KeyCtrlSpace Key = 0x00 + KeyCtrlA Key = 0x01 + KeyCtrlB Key = 0x02 + KeyCtrlC Key = 0x03 + KeyCtrlD Key = 0x04 + KeyCtrlE Key = 0x05 + KeyCtrlF Key = 0x06 + KeyCtrlG Key = 0x07 + KeyBackspace Key = 0x08 + KeyCtrlH Key = 0x08 + KeyTab Key = 0x09 + KeyCtrlI Key = 0x09 + KeyCtrlJ Key = 0x0A + KeyCtrlK Key = 0x0B + KeyCtrlL Key = 0x0C + KeyEnter Key = 0x0D + KeyCtrlM Key = 0x0D + KeyCtrlN Key = 0x0E + KeyCtrlO Key = 0x0F + KeyCtrlP Key = 0x10 + KeyCtrlQ Key = 0x11 + KeyCtrlR Key = 0x12 + KeyCtrlS Key = 0x13 + KeyCtrlT Key = 0x14 + KeyCtrlU Key = 0x15 + KeyCtrlV Key = 0x16 + KeyCtrlW Key = 0x17 + KeyCtrlX Key = 0x18 + KeyCtrlY Key = 0x19 + KeyCtrlZ Key = 0x1A + KeyEsc Key = 0x1B + KeyCtrlLsqBracket Key = 0x1B + KeyCtrl3 Key = 0x1B + KeyCtrl4 Key = 0x1C + KeyCtrlBackslash Key = 0x1C + KeyCtrl5 Key = 0x1D + KeyCtrlRsqBracket Key = 0x1D + KeyCtrl6 Key = 0x1E + KeyCtrl7 Key = 0x1F + KeyCtrlSlash Key = 0x1F + KeyCtrlUnderscore Key = 0x1F + KeySpace Key = 0x20 + KeyBackspace2 Key = 0x7F + KeyCtrl8 Key = 0x7F +) + +// Alt modifier constant, see Event.Mod field and SetInputMode function. +const ( + ModAlt Modifier = 0x01 +) + +// Event type. See Event.Type field. +const ( + EventKey EventType = iota + EventResize + EventMouse + EventError + EventInterrupt + EventRaw + EventNone +) + +/**************************************end**************************************/ + +// convert termbox.Event to termui.Event +func uiEvt(e termbox.Event) Event { + event := Event{} + event.Type = EventType(e.Type) + event.Mod = Modifier(e.Mod) + event.Key = Key(e.Key) + event.Ch = e.Ch + event.Width = e.Width + event.Height = e.Height + event.Err = e.Err + event.MouseX = e.MouseX + event.MouseY = e.MouseY + event.N = e.N + + return event +} + +var evtChs = make([]chan Event, 0) + +// EventCh returns an output-only event channel. +// This function can be called many times (multiplexer). +func EventCh() <-chan Event { + out := make(chan Event) + evtChs = append(evtChs, out) + return out +} + +// turn on event listener +func evtListen() { + go func() { + for { + e := termbox.PollEvent() + // dispatch + for _, c := range evtChs { + go func(ch chan Event) { + ch <- uiEvt(e) + }(c) + } + } + }() +} + +/* +// EventHandlers is a handler sequence +var EventHandlers []func(Event) + +var signalQuit = make(chan bool) + +// Quit sends quit signal to terminate termui +func Quit() { + signalQuit <- true +} + +// Wait listening to signalQuit, block operation. +func Wait() { + <-signalQuit +} + +// RegEvtHandler register function into TSEventHandler sequence. +func RegEvtHandler(fn func(Event)) { + EventHandlers = append(EventHandlers, fn) +} + +// EventLoop handles all events and +// redirects every event to callbacks in EventHandlers +func EventLoop() { + evt := make(chan termbox.Event) + + go func() { + for { + evt <- termbox.PollEvent() + } + }() + + for { + select { + case c := <-signalQuit: + defer func() { signalQuit <- c }() + return + case e := <-evt: + for _, fn := range EventHandlers { + fn(uiEvt(e)) + } + } + } +} +*/ diff --git a/Godeps/_workspace/src/github.com/gizak/termui/events_test.go b/Godeps/_workspace/src/github.com/gizak/termui/events_test.go new file mode 100644 index 0000000000..1137b1d260 --- /dev/null +++ b/Godeps/_workspace/src/github.com/gizak/termui/events_test.go @@ -0,0 +1,28 @@ +// Copyright 2015 Zack Guo . All rights reserved. +// Use of this source code is governed by a MIT license that can +// be found in the LICENSE file. +// +// Portions of this file uses [termbox-go](https://github.com/nsf/termbox-go/blob/54b74d087b7c397c402d0e3b66d2ccb6eaf5c2b4/api_common.go) +// by [authors](https://github.com/nsf/termbox-go/blob/master/AUTHORS) +// under [license](https://github.com/nsf/termbox-go/blob/master/LICENSE) + +package termui + +import ( + "errors" + "testing" + + termbox "github.com/nsf/termbox-go" + "github.com/stretchr/testify/assert" +) + +type boxEvent termbox.Event + +func TestUiEvt(t *testing.T) { + err := errors.New("This is a mock error") + event := boxEvent{3, 5, 2, 'H', 200, 500, err, 50, 30, 2} + expetced := Event{3, 5, 2, 'H', 200, 500, err, 50, 30, 2} + + // We need to do that ugly casting so that vet does not complain + assert.Equal(t, uiEvt(termbox.Event(event)), expetced) +} diff --git a/Godeps/_workspace/src/github.com/gizak/termui/example/barchart.go b/Godeps/_workspace/src/github.com/gizak/termui/example/barchart.go new file mode 100644 index 0000000000..83947f580d --- /dev/null +++ b/Godeps/_workspace/src/github.com/gizak/termui/example/barchart.go @@ -0,0 +1,35 @@ +// Copyright 2015 Zack Guo . All rights reserved. +// Use of this source code is governed by a MIT license that can +// be found in the LICENSE file. + +// +build ignore + +package main + +import "github.com/gizak/termui" + +func main() { + err := termui.Init() + if err != nil { + panic(err) + } + defer termui.Close() + + termui.UseTheme("helloworld") + + bc := termui.NewBarChart() + data := []int{3, 2, 5, 3, 9, 5, 3, 2, 5, 8, 3, 2, 4, 5, 3, 2, 5, 7, 5, 3, 2, 6, 7, 4, 6, 3, 6, 7, 8, 3, 6, 4, 5, 3, 2, 4, 6, 4, 8, 5, 9, 4, 3, 6, 5, 3, 6} + bclabels := []string{"S0", "S1", "S2", "S3", "S4", "S5"} + bc.Border.Label = "Bar Chart" + bc.Data = data + bc.Width = 26 + bc.Height = 10 + bc.DataLabels = bclabels + bc.TextColor = termui.ColorGreen + bc.BarColor = termui.ColorRed + bc.NumColor = termui.ColorYellow + + termui.Render(bc) + + <-termui.EventCh() +} diff --git a/Godeps/_workspace/src/github.com/gizak/termui/example/barchart.png b/Godeps/_workspace/src/github.com/gizak/termui/example/barchart.png new file mode 100644 index 0000000000000000000000000000000000000000..a37912f7fd18a6b52683ae819335dee9eb017f3a GIT binary patch literal 15386 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

RmQ-mGO0(Bv==_=c|yZq zEXYLW^cCM5x_N?2-IVICzn_4oWdAOEdho)mpvH7zm#3h%sKM<4+hWg1dO1Ezl&wa3 zT(y3pLiMJ^LvTWDVBRkJIoX<}M9%ZS)lt_U)=kwf(^?egz3u+CZv!0K0-(ZsuSP29 z5knfObE-evrdAJ_$5Lk*uLc>}l_CR0S%+75eM(ttu+QhF&^td?5 zqQ32TTQ`30NoIyXYUwY$sPA8vjvT+3H0Oi@_8`gT z@z@=1&RnsCyOWlxT}=2aw0L;CDZQKGNJXID^tmFjO3*rino{Q#R_K3bmRT1R6e2W1XY3IAU(trx3F; znH;QejxxHi9po-ABAF=v%qVp;3T4Qi!V9zhp=-fiV_UpzyoPK`E6yPjxB?9eURznQ=n_{ zJ?ghl=+d;?y=Q;%%>TN~UY)xcr3bK7O32oB?-K$teoj6v9|l=1+vG_0l;-ryxI8O< zCgWnhnVo!X#<%zxKXuWVuEfnhTlc<;{cG5%vh%il`U&wmn*fpR^nbI+@#`)Z$AG55 z>Eh_^O^5i4*ubaVwMDnT2Nuvb>6iDclGFIcziBr2xf2O~*e!2$L{t**!B{WQ9Q$@C zmc}Mm-+I5+=u=(ycgNl6h_XT67v}UkK1z9GiHXL&W98LxqVM_mbI>{5tm4C;6O9{f z8}5eecuVNJzk-MI!;?mw5q%7oVwvcRj;ip}Ipgj_s~04MA=R@=p^)zzYrBIDI#O{3 zHBw6IlKGy|JSE2VmoD!R42o||I(>`g9ZRa|u+WOR_4vyb!)47e0* zDJX^oXrym3hI5PHU~J)6+=^I&WK6X6jbMjpV%Z5<)n?dr%?S1*x((ylysp@M&DeE# zoUnX2pL{YHliX+>o|T)N3YLh$$Q;qd-v`q)Mk{SIaNO{KchYj5{E*4Ch37q$c~ruv z{F~$sA&La=?8;50^90PCmuB>t&nemjc$2hg5BG$C8t4RLBw+>s;1e#Gh)aqpfj9$F zE8FDVcf%Eg9#_gGiwUJ_-V zqlb$(iSwMDykB_=iEtK>%2xswIi0_1pr&CylPubrV;D&Lzibp)=F5~Kgj9fOsF;?k1|#PsVmiC+XYCb7vpLUBrtabr~(_Yk<`yrAEjd1`q< ziA%AEUEwNA5ru-d7)j?3S;A=$ZD~1-oMDc%x-c-L=^aF%39HqI@)1P^z_WH%c%c!pD)RIswZazFwm$$VrS&sU&5(SkgM~0X&iD{zR2&5 z^y)? zDX}G`H%r|QYT#aXvQi{(lR3e)N*(U-+|822B5okovA4;1Ja#au)JL~{d!*x*{1X*o z4F$@>Ov`$Wsw)NRlI{gXk>wwr`K9IO?h=sms`QXI6~83I>YP;kYjefF`LFEMZNzzw zF?nYRH*9P96UXzf@nOA(tEu+!u*v*}38&IB-{KEsbqTP5U6FuIBj3*=(y=*e(=4>N zFij^tke}G5lX%|49{BM^BeVXUk7Uj7eWE2^H2uzRg6}Cekkymil9oJe{xWe}BdqyM zgqm@(d6JBRBOcT+1V~AGB+tCyLy%FRAe?4&QpnaU0w9BFU1@IRS%C`{w8mh7wOzRE zEp2KHp!A20MzqCWtq_*boLE7{a;t^S0d9wf>8!x6x~bPnU^?Vg$un&a+1e!}VZlgP zCaygQXcwM==}f{5SK!twFlaMi>)erH4Gm0fA0LESiXt4H0R*~TrvQd7C|0d&f!-%J zU0f;hn69fK2L?PDEw(F~jfA|e?L{0y91n9rUSW(-C>pqe z>R?xvyf+&nV-k90kL0d^v62v^BrFJ(kuuXmjqQfwftyFI#cYjHGd<i<*Fsdog})v80B`&flE7;beDCL#4R0710>q^B>MoCHlo4JIr!r%%HCQ%TE|wi zhRnc(5r~We*y{xN6?m1=JfxKPAKsm6)%1#Ymkxs8#6Ux?NT)hCt={24M57OY*Xe*s zDfapQY2#AqQ<)qvQE$t#21Lxe>%TJD{mIAEj;7tr z;Pt(T^ee#N9CLAKT%`2{c}q5IDY{HYRz8UsB{jJ|=N zxIVMcpni2gNou!8{6AE>Jn~Hp0ql-}*sa0z{!2@*2z-}%1h#Qq2*kd2@_v(U{jqIw z@d{GcCw%k<8dZX4)RJ;P*1@%1yWY4=?~wO1Im1cu%XFA&GO`bkf>$P8KDMLfhA4udRW*eLVPmcUfmp^QyXe$JQ!b1XybbgNz@vL0#59Dgock zIx5%^lKLH!u5crl%0<^t@v9x#Nt3D;%dgDmV@jr$5@)TZ`xso|9n&kswJz4nb!*r8 zN0d|Clprzkm7jVDxX#CKy@V0~#O(wp!4dLy;gpy3oR{TIFf1FE9EM(k01OI^|pVnP@Sp+CS>H|M~ji zx@Pev-P)-7r;(Ah{=vyFqYCiLdtX7vP3bq9jBit$Ho}cQeU*5u#@qbmiG)^F@YZL+ zuTHl|xIb;7b_TE#wDPyVF+S?^xn1a3{LOMJkCwOnWnCkPQ=YI*`gpbll?n+KbwdF32=dLti zw}rS{$GIni+M_AmZPwXq(%GwV+v_6k%@ypm+=kH1?N;92d-G|p({iu>?JjZ9ZSP(3 zepATafaU%~<6b9m|Fz|A6>+yw0-wOSn~tmBblZ8c)Un%txc}+!ka&2+`TfW3@4qa+ zpM-q>e*5rS2zg-t_tHan&F*caGk!m2Z#o8{cZhC>L`z%2*IU9Vs$_jX{vQ6YzW!A*bjS1d&rPSF{=z@6 zyZ?}U_(R_6kSgJd3HovS-_KO!mPQKv^5Uyj(=V<0Uxkf7mDYb?tbQ7#Y#F8eFbw^z z{`_~r_HXFQ?-vp$)~|mX{AHxQX5JkP$F0tQdxgU~p(EVwDt^f3;#CbIJ8KM6y^Wj-a=vmwC zvsuowI=6%3?`O*oT+561^ZxCL?j6(+&nG0#lH7Mwn$BC_p08P6v_3qmr#>%t-*0KU z82ofz_HV!L-$i!HSq?QY7^$@kkhBuGkAlbIVH zmTNrral7lxxVrkICW|9Nn5E`s>{7QDGaz}-)F~i7zqV&$dG~^hP4pJ=zL|4iLP6cD zt2NC(*)bDLBNH9$2^rClxjHO|KnXQgTY%*0FR8NiJ^efBWf> zNX2zc`Jt72Xv*`Z`vd}}gj%vh5&Tbs0m+a6sD`bwm#aW#K|^u$lMTRi5IS5!{fXLI`BydApq#`b6SqX zFd_P?`I;8vpmEI-y9jZserAw0e_A{95Kr5#(w7UX+r&v-KT=iXJ6jkW$NU- z?DW`PeEBryQ0eU1=HTQtriYh-zm8X060%!*1J3rp?>OghJr4}{HESD7HO&>eXmI-6 z>t_Q~L}*zbX@WtL?S?uH6UzXY{ILxPV6uOZou={FWy?g0d{yN$hgTOrPFFHaKlOL>}_0EfswlY)hD79KQz{IN24g8>YH1RzG&qv)@>!dbD3Vtx)G& zE3(=mC?+-iE6so-z4Z~Jv~bT<>{7CRIz(k>7z9!FKm%5XU>{Xho0;|u3mbL%J&!lp@?SmzdC}oc6-|<5%tJ1TgYM?BtrwqAD|^q-3to>RNrneJ}$ns`Hw} zcl?#@{-?;7uqB4MI}`5w@^n4^XRzNF!puRJFo}G|+2@d-$eUsm^hanAsjUvhW}P1= z8uDCF4IuYhNe_Tf8gBPot7+1?7bQ0Qsbnbq<(+$9vrj1lL=oEqcaQy%M|k#7X3oD7 zrB&%@W-Hw6|Hao`zcm>@e&0XWMGTOV8X_GMN=P^m5U?hSq&PrnadgAz(W67aNq0&K z=;(%_fMDQIP!MA_*1Y$*zTfY4-1l`{$NeAh3p>v9eZHTsht2A=0y7Dg_qdYY*Jd}I z^kazF_FI9O{x9uLZB!zfQT2x%`lX3$ae_;Wfd?dS_H82Ge}41Q$mndc$zb64cVA<+ zQPP}iz*f2$BzlPs0n;M4Wz0a9Ik3BNdvdibi9c+Fq2ZZLP^Cx((wdGyb4)Yb*!Y)A zap13(=bRpCnb?molhlKZlRf><*z((;VPqG~vR1spWzM<0ue(Ryr+6VSUQ69mIugKx z_)Z)~!xa26=jILxo{9sjg$*m8%6F!j$C;`-DG08~ycAwOWcpnC6XpsL| zc@$##_4p(G)?r?fs?!U}w8tqjoNKVrj0ACSLdpT5PN5@b#(OU3B%$r4BVAnL+?RDu z3fTb!H@zh6sJd0jH93qB*4DhePE_dH9gy=>wTLQJR5c?vZS6~%%Fs?b+o?7{?w~h- z(H@0ep2^MB6PHsz)iHB9!WaSq4kR5clve%9Ck>^oDH`k#Sbo38tu+Ob+^2%T`5@kC z7DUiW@tl1I652(xhn?mF1}tA=a+l(TPBjcyc;;%>)16N}2i1Mva!^qTT;ztQDd%zyH-R)X{GB?+$?`2^fHvPW^)8M$JT-R> ztf2Z%10%8d*75;Tp;7y_^3horJ|v!890a3Q(}<@dldVs%{Y`5OQBq@e@%7(P0n`i` zB}D=SDvskENf1Xd-{}UUjg`6eeHPYB^)?4c))@P^w~D_^fq_y@F2wef*`EV9xeUWvT;sraBn`C|?{OC745!RCdi&CQLJDCJz+28K^A2A> zUUYt<$mQ!5Rfl`(r%^Pf31-xN6b;m8*xdo4EJ((IJI)`CYeD=BSD{8dwLcDIQ03g~ z(fHkY9-hK>)0JWA^rA#-gUj`6!DhhKj-1v@Y+gYW{m7X1?@L{bwYGqpLgZ$_o~dK9^uYKvsXFAG$B z5K+Lt2wx0D9>)3jL>i6vhxCk=)Aovgv!AZn>-4S|`u)tm_5A6Fp1zK=A3`39J!MVw z4tBfU+}}6XL;MO2CPO~_^}S{I=JLL$Gu6k-L+9K95B`FMF}XB1#WTS(xiOGgaOC>!1(nv@hKuGm z2cEv*`O!BU{UNAr;Q7a_AA@_*AEQ1Fy!aQxT`5`!=n*$HkT=6@eR%}c`i9laM@OJr zI54>_c}wwX`a~WWp*IDBTii)la5EBNb14|8pn+a%PiNsO`*+*7bK(ux@PghVN=MGo zQ`QGu!))+L2R~CWaMR8(3(C+350~T(+xx=u)FIWF^JuMS(m$4Nvp>bTM2YMTf3GDQ zsU^m`9%izCb*Mvrco{do&Urxh48bM0OAgCNikYuf^2o;e+epJLYOhL zp^=^PKm!8v-4^|}m%NPN0%HNLzQ{;?Yz>Xv$GFHDxU$8?ET@oL@f=VYV~f4?=4j** zyg@Y8_3#uYtd6e>LAzrwg>xKfnuWqzydoS>@r(y(;5TE4OH?%Hy_kcB9RH6aO~%j= zu>=E>I$DW|NEw5(g%3muibRHDFOjeSlyOm2Au;R@!Vhl{PJ$g&8b@5Dq7@FO#q=Q@6fRu}OCcgDoE1>5u;lT)M0F%ap&fA( z2U)rfF;zflagJE9U|xDTGWrnWIeWkg}vX4Iv3~l#u-jnXJcRBe=A6_qf9&aBoI9&IkWG>7$B(13ynFX(URiS(xULvO1;t=RB2N~ zX^q#38d1o1fs$42(tfYf!u4Ah6-$3WZv7a&Mbj%8-n~VeE@>$#9Vxlh__J)Hp+t*Z zI^19SKoK&zCSa`y$(Bun;_~Kg<7$c^X_n{>;e3%@a!d(Cu>s<$SjYjX-+B~!rV8Jg zDpblZ@K?MP^b@Y(l~_e9a`I9nr9$Q`ibCwsC-jOV?P*=MK)FZ7%YMU3MobmUePz8w z6VF*yiyR+C9IH1`BNyaW17YEJs@l()yB_w(-5$LNu_YBo(o6<>vy{FT>d*^K`Dq8^ zik{o%p&Md+r)83K(e{d9;eP6Xg#q3qdj3Za8(bIv7!@Z+#dZWP>HQuE)(zKWaV*O1o zh+K#_Ll;)b%xGdojs`-mlL`e;nMqF&x@q-CXV4qS>fQe81`-2(zQ5N z7u}+y7|%o%0q87da{;y`o7K$lZdqw;S^CwS&uDo%gUlnhBomO?NwszAjePjDYj+TY z{ge}_&7|;(mv$E;fjZ;q%-MRjNoy&h{b0RAc;!VxBSp#b%aOl3^xMb7_#^V0L~6=hV18@Dwgjvv3>Yti|UV&V&Q z>JZa!;*hqu*wHWWa*q=L0OFjKhN~mv>SKLAF~Xr?(89e~ zv~naO4eH@jhhwiJ6q?YEd)-y^JZY=wSvvz8k)(^dIpOPVu}W3?VXo~y@RXxTU3Cy+ z8-pKKo@0f}(qMPdhO73B3yF zYo~z_`oKcypehAxN3sY>g+;d`KGZ?R0xd@L+eY0WooNGY%IGGap)Z)q3+S_BJ_Z@r zYodwiGrtEY*B(>@F=LbDVuzuM(=iFU170&73A=!uBN~QTfr$(-&U z(ufGHyc&0~E)YF=fy!BuZ6J&q?e{d|M(@(~p$swAGPI;YM8@oJHFH!YBPP2LeTr+0 zZ6pFA=%I%?F!jHOw78DzWVG5m^SLxQbXi>2?pe3PoR5<@*X--@ufW8owej-HL0%^( z=)?&R6<#mjG@mF8h9*D%Wx`v)KY$AxB%UAQiIlN zM}{wks~s-m%N1WYwL+iDcfz2s)5C64L)gg{93TiljoObx$uo^-&@F?<>&j;CLS_Ty zXIoViyA9CyqGs{~6CynHVI@G^>M5=yNC3(Hy}Tua4%Y&zUgi0Q~&C z!TgHKd_d9s>frp6_yUs)V4PWa5jEe-n4WxRFjl5hHOKjrAcQE4D4jiDMO=Kz1^iTj zKA&4;M=b{YSloA-H^DQ088Ci}Gv3ZEc#CsE)gh^6daOYVy4`?|1L5g&M(XniRiWaU z^DA5rUl=?*WEgtba6xuxNpb#R<0>OqoJ;8WgzL$rdoTMG0#_esB_8}AN8xRXPxDt%ugms94lx+-(;I>#=t@R(d)&kJf$sq z8tP+Q>Q5dCt+{kfDz$T1>iTLD%mh5}*yPZ`2EIGKPrlREvF#l2`YE;VurEu9^F8-) zKpQpcv2+|D1^{C1$Hm(1R^LA)l>?zHL?GdrA{lX!0N9ccG92n!z4HbM@!NZv|L@Z; z<(>+ynU+b&lx0zNdd46SO6pmlfuH_Mk@_ZS3wN;c(m#d z9d&JzstoQ$7*Ka)Z05n>tRxR`?+n*ahR~rbFNv&KX`Yv3xR>`bUfxYu$G|Z4iZX$sT3o0nls!F$Ue39VwauZPXw6nUrhZ0f-;>W2%2wY^#wG>(?QPR~uegX*Fm(;(Ee@N1O@j^$^ zesF>L6?iw*KDl@FaLxYbYUbO_if6M|zFym0HROFE>^o{R`0a4~w}Y+U&c#17vO6>{ z0h!zZeNg2UQ{Ne3uAiiUPQDwi{`<=H1dl*lSSl-1>fMtOIY5>OmXpFl=ujyvCj7{H zEbsm%ZvVZC@5K{>1oq;-^Uzuc{Y$}Z?xHqKK@c!(#D`>zxrl>1iatKTPgO4RDCAc+ z;eQWfe`g9r9%B7$$NuWP$z6SOJ^!Ot?s>~h?my9IS9~OXjxB0VoX0Gb|Cy2cFvp9b zp84^e{QQ3VU;lF-hZq}=Uhs@$V`yc6ztVpWk$?--y_FZg+tiO8&f@uedm<*6xqyv4|9rCIGRBxA%GGBcl_`}qB zSBs=5gHt?wc3SMgfB){2Y^5SUSmusMeSU6yJL1#xoZHeUmd-Qy-bU3CZ%BJ zm0&Rq14gnebna6!C6p!Lk_7bZR4Rbwuu>^`Q6eXyGR}Cs#7$G8d0O(j6h7bF-K32q zn=8lgViF;)Qrv3KG~zROazo2Qz?`87-YT!@?et&a>)VA(-{hD!Aazt)w2Z0V^(bB? z#5!=8wqhMfssA}GsCbV&3A;Y%KY8GCd{Bi7bV(Ca{8y!spfrvOqf}Jn`y;@||9BC?w>j?2Ns02~7u`diBJa!}rL9IZ$vwx)H#D5J%2kTK zu*!TZ)v=(iT;HoJBvFwEzl8*S=R65w!nl;&>V9!Gl;fdCq3$PN^88Q+>LTn?x`FBl zgy7SICVX8}Vf2e@WI{4XJ^q8h7#RWJe^m*HMIZV5&-z;vZTIWax-y%TidcGM5c4E=BW7O~rlJ+o=~@4Of${Q%m)Fqh9IYH`Vw0*L&*bYt#+l zJ-K5aTIYD2l(#`Qqnw&vJ^c0QD)-_HDpvDIwC(hf;9pnOZaa5Lb=;DSGa*iyaGh+Gen?GRa5Uo$6iGeM`62O0DKIK-KBlP2b>`S% z$pa@fhS3jaQ)kj81tzD&59hY4IR+sN4pGK22NQsBnJV$U9J9*`yCQEL#Y9?)`t^Qw zgt&{}{`_$50En5C`8Tj?_t*ZU`OC_zCcBNxt+fS)3yIXMxh;8I1KRQ&f2>{Jb8m+{ z(a6H1dIqh(;E3xs< zw7Nd%%#a}Y_*hxZCz@H0{xc#!4|#n8eSxzhbIN3rt4`A|^$h$vd(SV21jMtj2tPSb z;}>6L)!5(1XLPwwg{faneTju2=Wu}j+Y4f!QPQNeFSH72k0XAsW#Ua-Z;PEIT9`C#WM!_wmoIUA+4h(tyRqAzT_xyWH#Vr!HXS%&0ni z!?j>eVir~pDzI)mZO2vV5oRSw(-lOCde-}1LXxc^Fy%yzn+ch3arpLM3VwYHwKgT* z;&8!Kg}>5{7gpkA>z_2ZqOV``+uf1K_||w%cBJ7ZWmu4<9)GDj4So$qN0$hXibz(s zYnhgl|GaH%G#NR6lTLRw!`6r%)wciqYzAK0{-85Mjolndwi(35wLHG&iN3(!;`S!k zMy9Yy(oAK_7UG4hyYF*1m0tLuXS-D~qp+LQZ{egYAe$xn&iGFy=v)nyd_%C;O)7Bj zNj0+Lq7xr(S=KVdqluAKPcCPe`8_E7O?edaxNphEO975+lyO$0VW&!#?)S)O8vuwX zL&XJgr7MZrn&t)(t|cV6%m z2^{<9P1R9;*4p_z?ur19^^?KPxH<2XqL-h>w9-Q;9zq{Tk{?)Y@HehtJQGA=`X5cV zI&kteOs&vVCMU4W@?6@;u;`sFQs`8ntk%y5?7QRQPCV^P-%@i!csa`}*(EbSGCB_q z{JeQ1cg^x!*3am3JZ6x8#n)`-e$G#1XerR529EcdScDnXR-78{UHwZlK$}Dz%RU_R&I;*THEN(5=r^qdtN_kW@o~%17f0U<${IUNz|D?ot zEGWS4%!ec9+Q7EOt54@~23yfR+VGY?ne!8)F;aG~+#Noo7L6LLYyOj(e*n@4NTPt* z;|v)v=>NoARsI*|Dg*;@Fjo-{<_Z($7vLmYXg)=(rYb-1-;%2)$8G&D%vJb^%Kxgi zG&z{-e^py&)erptR9l2|!q%si{&%wF?_ zfa~Rpc4sa8?9XrjS3kE)=iF}oAAswB_gdQjH^bG3@V^b$P>KpC)~e>jTGjuTSZlOA z@Vb2N6%ONiBc=Y>or&Xj+6<@uk6!D)Fjvk0g}L5LDh;Ooe=t{0uhmkL)LWgIS>1cP zu6?GjZn`D!zdhIf|9Gw)kUz&nMS*S^qoP+SvSW%oXjy3;xezWNKP^ zMrKwv=P@!b|9>#o^4xgdY}rWZ3W_Bs*=lO8ZEb5$uac&9{14_@9xq;5-Oj;W?@!(D z>i%!cwQMf4Yiwe@;nB0w*@Wkt|G`{~Rx%#9J$d)~Ls}O%^S?0Hc!}hs&e6Shots)e zRF^qVkpfDli3?X1$)I%Acb6-9Ta5q8c|V)da5x$E&&kYS_0xK<5RZ7f#kBSH*?i@z z6TW(R*UuJfUVS-dd9m(vg;6BTay;f<=(RVLrU1HCRbS#_byXM*=G zwy9reFZNKaZph(3ef)Pw?f(sPeer+{!APFzYa8z5HLJW*6Y{ z3pB-8p8pI?!K=XN^#7HeX&LS!4MH#N-lm!nj%?< zluD&i)}+(qdiEvKv+C=mGt^d*5}6rOp3+&`-*?2a({}8nsYXH#LOFFJY`a6b=GuCE zdC5pi>HKq-^{@rj<`y*tP7f1ma%Ik~Z5Q`N_rJ(>&25l7#clDWA&xsXz;(n++ z;C26nTOs!wEI=@ohw~S2#@YH>J;tl=l3?tRuh_id}Pko@pgoG z+QuMDntP4VDP8r|*5(jw_G0Ob0;kBoF@AYKZEd!VM|cQ<9N` zOLre}Nr81fo_jMr!}vY$U%=zm)YiMh91ljrx7`Q*21|87Z> zTKKzJ|0q-|W^-AGILadGf^7u!b-t& zRbs_NdOX$_4c(sdDY}b*P{qv9H1aL!x!1{|qKEAMP{=~v3UR6t{^?hIUkXnum}|y= zN_R1>5?xVqJ-;|G{Y z@t%qq$qGKkQcC9CLg4mXm1bieWi|;3W_`+{amk8)n=(Jr6=Az(QW1UhLr#^BMC~h;nMv{Mk2K!qQ%l*2-HC}hqz=WAFt{u*I8`+ z$%~jj`4U2F2naKa_gMfik+xIi$%eoXD_2%#1j(?q;Y%@Lr3Q6jcvGQetgX6DAH0!n zRE)1WA6N`dZxQIK>1loX&)=9_l$HJ<<<<#W=yCTs3%U;dq5tCv*2 z)Mb||7Rg?vF6Lzp?CIJMT8I8V<1Y$&LV+>y;7iXLDqhD^izPjUeux^|Ddt=@z1z(< z>*zDW`hqlAnK+xOuB_9!CDmf`NF}D_;f1}R2ApEIxP7TtcOerhufhvL(xi|F_u?#& zOo&GM7$PEq!h4`wpy;oPN#8+^_Db&JmhidwvF_5)Ihl?#XH5n2Nx(^Q8Y(k7z7kFb zi!&i-PpbKg zNdup(Mg}*}ez>ILvLO#DY|gd7OKbpfw*H#kmy>QDPTX?vauU{k(#<(kBrJc|jE7`i z_q|>~b!794fI)r1Bm4mQnJhB|d7zNw){6mFQkKbbw&Em@8e5z#GVO6(l~@zm%#En z5Kpz<=sDalBA)=rXV?#?>yq#2(TH2GOQ7fbJ{~R9N9ZE`t^#&+o@^}S*ioGma(11x z4`h($;3kiRZ$iD}f#(C?IlqyzlLf-Fo2oMOh4H`d<78T{e~Vy3@{VZ<9CCc7!$#Nw z=b0pdL^5-RpSYgPq$7-I&hn(b$GSJZAHtTsXC5lfn;Pmls=&?pH8Ta(n~#aVy`H3h zO^8peFM*q-o^U)!9pO!IKas?Dy|_nv^;L1VuTQxXU?4p^wesyy{ZR8p1QF=F5*T3X z`yME^9h?&K6PS3HSgb1c@;o){I`^6PC;-1igwwATB?Ul_?5)4dnh3bUe5Fsk2Mwj& z5ezzo@H^|BVokk?h+KZ#^(S)X16KDC_}S*x$Y7shc8>t*Nq}?JA8hZ&m+@=~PqdB; z@yKj*4Dppv0LJf{R`jJ6dHr*>VjRfpGo({EFK8|7>mRaUOTB|6hR^P;ya+meM z@;_;neOMJXd*35$aPM)>!^4e4IeavBQvqvN61`i4lQMvr=Lx z;vs#=u+Hd!upqY`@1*OLeLlN$50eXUlxPu3K1F;fiQ-nD>LP+UWDyVGiIpPy%kEC) z>cFG#_KenT7_XzmZK37zS6czyZ?mbqij%IN>As?5D*Pcz>#OAL{mgh7}8%LJm(Q zxDv=@iB;%%qNj6c&Uw~#-k(sO2@u~ZbS5m|qfWS7NX{8NxNjVq@eP!v?V5JT?aG^w z0vpcw7xKtNj%Hylq>{WonUGI`2P}aruvF4!cKklrsz3h-N#r>(Kg2knXZYqIg^F0u z4BWXnv~zULMpZ|Vh`SuSRS*$T>+UuI>UQ_w4MkFWRE+wdXBh5HYtYjK(6YO4oVh#I z{Du`Xi&X0onw<1z%2HmN4UobUMYY|pzxKSAoYhav&LwC2OBa*@1%7e)F$(aL)4WSm zzCuf3RXnwKDzo3>dNnGm!Y;X^J4hqcwFH*qBIF4rI+HAYQgAvXB-_m1$Uhm3X$!(BD-q0UYN{K^rWZ6yxTA61xj-8simpH`RmBrdcwuKDd9`y zZLD%KU+Kl^xQ(zlUv)$-py0AjMH9^_K6tKZOR}_CPLA zkBfkZO1LnaGvK(NyJW=j$+QC{%8^up0wxH4V1% zN=PPF__O&cqID}OXq*VB^4Kr1EkWdlaRmW(-6pl*o#O2e{S<$TYIj|lK*+80>dx&Y zw`Dxi-b@k=VKisqzzS>S>(C`6_&llX1tR3MQpnR_M{wVbi;sPxCwyl6F*3i9 z#^DvI^z1NDmC1CuSwmIeC-4``g1w&=^*^gvKkH0?B|f*a0p$F+MQzWbga09bJ3k_S znAI%5j;CG*ReI!&=mI!a^%%^H`-um(F#;(B7W^KG`3^0si%2JUj;v8b-91|;a}J^H zVyjWIZ-rfHC7z_ZV5`)~jwTOU$xb*Dq}V)Gid1W?Dot&^V^6&-+Je7VkbJzJl6IYK zDCp->dn2Pg`17fZ$FD=ye+8HPh$(~Sj(Nt8$O7Z*v`6qed_B;gh*l7@hMAm%NOqm9 zjr9?c=y5RRrh}D~+K)W}(y(L<0XNm?P2JaM@lUTr3FvwO2768 zWv;Y|q{SD~9VuQkFEr|n$E|$zgk)@D0ny)R%ID5hXZPE@4167FxT@c(gNbT3*b~}H z?K+_>9Od01Dpn2ZKpu3wERIRdC&hecW?7MwaE@K(m(VKhO%BTN`w{t$15NR3-6tdS zUG#fyeCl@f>CvAli20TIz9Ie8=@#CHcYj@%d{~%lYeN%cFv?lMzVBm8xm9=n`lV!;xlrlY#qQprLvy9|C*7a{&Ef z_I~#*=wBT0`YC!+`9Vti{WlnX3H_mHrIWogNx@h|Z2QpuO3ye0G(5n&pf5g|4h4Yw zT!RnZH=(~`2D#tScWyz^8BhV=2RrFd1Tcue0iw+kKO%?a*?+|UGz~oS=@QaHC{=5q z>29$sH)HK~&1YC~aO{Big9gIb`Le!w3}F6j ztQwQitgn8$`OO!kCfOcmo3@L2zd6O;|fgp34{!GkBov zB>4j~=&u3<&hbdiiTqHG`Kmwp*n8-bnV)GeawpmAyC&jBSD@Tu3!{C!#R8TP4nb17USFVoQ?XJ*%&h8xLHFlpvF z*SM9zc6kxuh3{!rU}S1yRJsFx3>(jPj{^V%EU<~bWQnE_hn{Uv5^K40xN7fHE%&-Q@j>|#O-WA^uIQs!Ee;o}D7%YUCf zvK3pWzF#{m(JPWZSaf#4uX)`D)=w=@30mPguKuLD1u{)|Qf-K>cz-zxKbQ9$8Qnb_ z0bXk*KdFj-(i1Ivb^l4f^3!mWr?teVwV7NaEl+RwBE$1QvljuK>nJQ1k~)IIs6%F= zk@rUuvlzg#gfkx&f+eE3v5=KaBn;<}%>dNZH(&sWlW!h8yLw+$p8g&+e)d^^CT|Pe zFNnjvt?k8yYlxQO+hl)yG1W?!Po{hg1*&mHRL8q!&N1S31Yw{8X?X9<+NH!ACwa zyMv4gQknj|$+-l$eH5jWr81KXUjF(D^anX^vZY@EoDcxnRNu7rQ{g9UB{KkEbdyte zJMlnnur?#;aHYT{?$2v&H(r*JUusA~PY^*B>YzYLsFw2+eLP4A4-x}*4iKiduvhfx zh*#UE%&5nr@o`zCommS&Tb-lwp;9D+V}d5qsgOw8_JP;4QFs$7Q_YwM7zS(Pwp*lN zfl_`LmfFjD|F|V`_51vr@DDFb>HX?PZz9hF2hA_HZyUj zkB+`(BaWi1ULj5hm_-rZW~jeEmVng7!yP#9Gyz*rKg^a_Y~`rGU*Q388wj-$Q|(KlHeVEF4SeRhCkzCFjdVL*ek#LS?>0+ zO8)n`gwOqMz{FS05C-BP9`(^^eQ;n;L-Jig`^Rv}SB7}dIjNlk*o3hAUp4$#$H}Zq zZ7(g_P#`?$AoJ_Fn;`oKFHaDkoZB~+4%*49R-9uarS2k5>L6rzQJyc1twxU)64*Z| z)RPBAP{CJ~IIS)I>H!m8vWXcHqRo1qLkE*tastLZ z!YhYhkXJpnP!8rQx_-!FN?6cKUVd87-ZCV$-fl8wDI87c6s|lN|Nlz1Fi#Km>+^lZ z{CRZJ_)Ie>!&h3A@XVLqAfU>f==7gti<|4P#84IY!lN@TpMDF>30M+=)}g$6jbi7? zm6M_WzQ1#Qk)r1qo4t4o1U!Upo!q`{7zGc2J{z5!cwhwj(oaVEp9PYBeBYWqkRpUm z7lqQ2t1ie6>41cODDAXBw$|h=&pQs>G3|xbTt3>+ADZK*^tUGC zwPFJw5l6X1f7{Y%do>{G=Qlo(*`jY!aJaTISG=OFWdTa3^;v&+_4kN_?@~5~9)JJN z*h_Hiy%~o2$FGvvz8P{N>fMUtehN=mtMgDzx?Y$2oYE`y4K~;DuPOtd%G55W+3oDs zH3Ta-bBj4$TC7(~zn`fe+9VKVy2a)e*Sh(Fnv6J+^{3{O?QEWYY=uwXjh*F&yjCZ} z$Zxw^UOxX?hqOXiTX9#9WV3aClx{p4c>KQS@9&?1i;o^$y?Vd;+y3v-10S!FkK|~_ zli{yNq+$_jA{a84k-}ma+N6&d|LX!pTAs&!>Q1z{yXR(@RF;K3DvDy^nzV7Y_)xTv zB;QFc%{dy9OJfEL$<&?^fp8t&SgXp`ekroWW$FS_aw?w;?oP(M|qYvfg1q|1Jdl}b}Z?`)PM9Kr~m8`NMmTJ-;7sXMGV@zzA{2-xSnQ3cw1MW zRod9lYR-7u)R}w`NG~k3-EGOYYV=9(`F?OCZ4jKk*FF~F`L1Kws<^rH>9IYPga_ug zoLZOTb>4TguQ#wjP(#3nf=6ZY_DvNG9 z5+s-Pv@M+lFIyjk&g!#<*SDKUXW%-2L`Shw@}I_341GV{2RsHCnxM`OT8|mwu|jz?62pmEE?1ndkN`nXR{Swh}YfH_+H$Zqj7s(cJBD&LAUv% zKL)!FnTPz8q4H=%j?Lf)xMY`3&02n0yzs#HZh_6>{?S`1v$SiaHf`^&Gn9*3x)}aX z4PM{Uk4+8Cx>zeQx*}UwmsXW5l@<0f?MRkxSH=mR@U7hQl7y)Q{i5CG(wht6Z#pO5 zhVRq`C=HwETvI!~+g$6XwA1|H?XSJs(wLvscOPd(ez^B>A@bw>e>_pF5#IArpC+WT zqdw0ZS&aI!aDvxR1**#=14~zV4}xHLYx?_6EHnBuH^txlrvx$E$Xz+C0|cN*#-^$t zCl?Js9+Xdbh^;O)<{ycV2L9g98?$-R415pIey}~nTi?_tLWhCq^&l_px-Ojise{6k*a4t8e7+NE% zWj}kqQ!{_yfUHcgu3vmFKL*^Q77?@^Q=rjOihOL7mhx z0Dy#dba0l%V;Qy@3kVOUgIj)3K+VDJJ_UdaCejWm^1VG>*4GX3+ipx#yCcU&<@yo* z^||9hUAI9Drkw7;$kM)BenZvg>cEpVhn~9)<-X_-gcbY2uIMk0 zQn16Hj8w=uiQ`QkHYoK|i2X0H+M|SLDH$)qfMa?(x0*- zHhaH7$mn}4*pVogAs%xa2-iVYTccK>LTC_4<|usb82=&X3G((YBq(a1PKSIvjU+oi z09N7@+*oqc^0$+O_Z0hc%H#j;_8CKzDAZIfG14rSqCpZIK(W?_G@9t-5= zHE$i?5}NHMeaf$!yRPs^XYNYY=c0tl!H#SAG8N|lmAf8furIF;)D8r3c(|p%XaZBN zH!*mX>tR{_Xradrlq9<}bS~`Y+;aOlf1O&e>J-{Z(0ghwBWvQ|du9q>HGqJ%pA>(_NRj`&INt^^g_kUy z><)_wp+%}BZWxm>Z3hK4V-iI!sumU&lQF`5?U1^&7*(h!Kf+*7M(E1kwD=+$7F7>| zR^$MN6yo6rNqCeXZQHS!I8u)Tgzf>XeH+jS(NntT{r*kVt>1j23*frpw?s9Cvdya^ zec^4tl8$%|uXB0c5fbHrr+c`_FhA^%>QsW&EkrQc1Y^v6B-&cOEQS^mGAqmW*LN69 z2XHcdXp(Wq>ttP z(}jQRuES$%<42rvoaWNxHmum?2<^+@75WIQN8Ls3e)N!Q{%^G1IpbS8215co>Nxp$jO*O0DXFk@pScZ&4K+9FW^PX7^io`$~9div@rj=XcJj@z1R zTonv!2#I{R65=d)f>+1|8yY457}ew+rfmv5UJVf4F+yJQ%ca3Y5%3ZB%W1D;?)3Ua zse@nDaH=f`7ZwP?!_*iEL6X-WVT^4k+C}jEwi%hN8$>R{;vc}0%Gv=bL=^9Yqr>57 zSO2JKgt`6BjS#3Gmq(!8I7VPoq=XS1p9yK+;Y6=3;oEt3MoRBVX0xZenRDW2y6D=mE z7j|U~NOX^$v~Xd43pcc&Oa;Os0X`D*WKbu8tRRvRNy&*3l4y*%0eSDC(YA})K~$*RIG+W7(Ht2d7P@YlWT6;khch3Ws( zlX{i2q*5J^YR_7L`z-Er)vck5FWc<8`%LEvielZrmS#eAz&y^^Nt zvxBCmm#WVeFBdN!E?s6rt?uQ6`VW`fH!UeUdZuN$w6Ncb0WEzDwW{AOei(FXc)6rI z+-lIPcx>4+JN(Spx}_Sm(8K<`=&_3n)7E%cx%xM2sc~zwq;m7|OA3P4>-`s3cgxQU zR+tA{KQAd?7A@aEmA~w-;NPw|*?sZ7UWMtmiI#hG^{Z?*w3DOF- zZ#T-)U=g%`skHV28XHC9`b9%KI8+PX;kLR1ceo>Zj|OYJb9da{TCrGKsZz$OQr5dt zKCM!*u~K=aQuS@+5pAz zxlUCYNKQisVfodi0T{NSv%R()3({(@;k?FvaEF-@8*pfpm_Hr^t5!a~2 zSKkv+ui;`?-dOwfG3xFw{%Qv(meeRqXk-Rrif8yQI!3k19Z2{qWxMug(| zNW@ctc)n;H>=1s>TLV z(=ooz?NYvL-mOn&5YJ|K#e87c&E_rd)+lnTQ+;a=6(X_Mie?~U8Ex5Au!VeA9T}WV zYYSy$g75&x?gO80_apKm9Xq0E5u8YEUkMq)@WZqtI8|f@mSa0YO6l6h_Sk4fr!N5! zKm#J^-F~D)a!fv#Tip?4geHx$+gML!0GjHEn`qu>BIE`Eom`C2Bu1o9p?EIfo-ZMe z;`;tmXObZrtUeYU;Z212;Xp34-J19w?j~vUUSAy>!Mj=94Wa<&o=Ut=IHPWm0A^|6?|_u(i#8vL8j15Uo! zNEirb-A5CVmkDTqabJhCJcX@Eq4e5*M`kpli%H-b?;sx%T}oNVd{TwSpcRI#q2Xd1 zsl6eW5G4+PhKWv$z%h?eoxnUD>bW+e~L zfJAU=7M};-(jUlKL$A{x;4O@ki9xmM^eEhfWP0z7x4qn4K(Kd^YX-fHI6O#gD{LIr zr4O^HSR7y8%~yxDH32z(?1AA#Rfb>CNaAfY(1QMd2)plis>8?s|F5&pF^`$OW$Tz( zam)~PNV3W<8QGC}>_f&;R^~B6<}s4pAv>~VhbSSTCF%6@{(L^S@9lg0t?$3*@AJnw z*L6Lfca)2RSp**8hkq4s1#uxFpkc#_G?XXH_v6rJiF9_|?UfHT>f&iAOqu<=I|D0| zJx+^26~Zj4iiSXo5wCJ;aS`s-;K8`SHj zLIQp@!}IOTeethQ0_Bzy0~IDP5@|#Upm1)Dq~nJluaz^aQ{Q|VMFgP{KV8aOO(31P zs-M)hj$>`(kfJL*mJtc{mxi2 zW}Ks7kkW}z1SnhptuFU?dQ!QsN!>4#%1$Zv#wIltQ^^Kl_2(PY1&xv=z0>6BX73PthO zTm`!PLdukqz^u0nO4;jjarBH-RJ|tvqS!*J4&Z2q5a*;0MRTm37o?2tWu#X~yTM@S z%6%VNM5+<|Uw&sa9-=G&0ni}MiI=%f&#S0sis~OYgICvMVuL;wS!q0Na2HBPdADRT z9*&)t=MvgWKik2hJQ}JFm|FBlS26;S03xDVf;~Y6GU&R@Cb0O-3D)L5zpcTXw8E`h z{f=@4k~p@UL2nm+09PiLmF%2d5HDAwrqjMKrQU-r%Af)#5S6BIqVY7t?WCT{& ze3UOenzvl+MU+}?fT!B`D*o}m<^RUu+&%9aAyQ(d{4&qdt(43GYt*PSm~`q`)F zb3uf}!$M3GZil9n`8LB2oyQLP=yMt04)OM9-v*%O+-`UDjtGNS`>J}WEDIFa>(CTx zl4U{R_Bw?3|pelOJ`@ZRG0Zer^VaZ>}!y@?k_3nU#9r>*Y00ly}vI! zy&G`22c6#gXSUn0My36<21#3^eTDl9_}38dO^$iYv?!++%S^iW&i=v>hu|NBGnG`ipE zGta4)SiY)%r83hVAWXKI|ExlgufCly&|Rwk_Op=X(uD)9@o$&EetQLcH?XhV)jX%n zxZ6_qevf)U#(*>&K+U=!tNI^yjHsJMKZxWXj`rCO*VOO)`*Hgp(mC>{d;R`}ue+}7 zKlqxsG5oY&?(gkS9$<Ndx_LX*@)u$YPjVhm1 zT~kT>x09&#qXhs(r?N3Qc)JZBxBTNPzP81Q`v^mWEO&nYY7~?p!GkBp3mjlFfoq!~ z*EH((ER9bKsmBwMi0N^ZCD!a+r0vhX4}GcM+IvAJLm<~lDnJ1(zu)dC0t8PH8}=`P z$Z(hsBnUtXL;by(y@J>P0P2oR`d@Et&q(OJ{QpX}N=nO~<>h9bJ-N-UssT`eLH?eZ z=Yz~)7lWe%z0nDY3&(C==(`qR7 ztxF7gXtxIftj)THjX8Kmet6gc3Hi)8>!e0Mwy%~Mq~`6yqeCp^eR?slM4b8a)yY@^ z!*C9LE;ZN5Wz zS`Cg7fKBqg$h%h=SN#r}r*cMbrmdO_`Bxm~0w3L$pE9v7r9^V&z|AtAO5Ck7S4Rj+ zHnJab7d!X{f%j+eZnA`&%fdO95CsGi!k7}Sh!x-2nn))+sX5BDJ z^r>w&IE~3asHAUW*UV}`;1VVJ;tAwlaD&Ns=q2yYu0N)`{Y{rS{&k#uM>AD-(F=r> zvCn~sy}Smk6FCnSB&JqEBMYD`V&a@F#*7a3I-@4#Y^tw2O2ca z-49ypIaidiaVXAR#4yic_^9vTbLBIiHC}hCkf}4W5&Iu)6ssdtH*~(b#`2lYRE_8> z_CJOoPDAyX46wLhU!y2J35t65ool*yIm=_etw6(;K5~#pJzsvT*n4VbP(Lo*_ z&!oCz`J`q!W7=EaXRRXrnz7mn1w2Yg?lLd18d7hFR4r@TfEJyt-Vd*}q`%226)2u% zW++BJ-Cl&C_mM(Rps@O!`Ic+uPq~=vA2I7Ad^e7TZ4rInj5_$Pewqg{;bW$U>fm^{ zJnM+$Po%uvHWjsc^_LP*)^jMotKVhX#Ut}J%*?jtZoc0u-%hpPe^uJuz5`y7MQwH3 z^Xa@P5yv6+w~mfW_l9GH!iiYF(C|$lGko7D?1NRP#Oh7&?vdr)>k(~^^~tJOXmAMi z^kT&|(^J|%v@edoR{zuZ3+UPJ#9nTpNNn8KA@R+1!s-HkT(gJMk)Y$QubygOWB$Uz z>sQ{Bc$g_2%|ch)DCu_gsEFe5@p_IJ*H26;wZJ46BmHhbajqAi>>MmtR*cL!N5k^* zAi-Bia7`AeXA+EKh7z#wTm@;5A8`czWTE_6w?rg`1oS51XT!wxXKO{lt`yz-LQ&CL ztu&06hs>Q-UJ#xI9;R4q+@_gRG%zGNTn{oV#d9f0c(yX#GJV35<-~-ru>iw7@Y>L5 zZNT0TkLwku@UI&h{nC?VZ>sztY)&-9Y!ri2PGKT{-IV;ja8X%(cFN+7iJ&nGk1#=> zzl|UZu1WFNlOh1p0H0lXawy9oqbQ&lJtU1~=X@yi3XZ?1t%=KN*N%w*i%LSL0_x{^c=U zzQ;5Hc&4t{a>*p#WF2>Hvw#Y(tid8-N4FABLnizNAawQCH#S#1ABpY=_LM!-|Bjp;)>jR%wjy4k(ZSp}!*#14hz-OBGqwrG_o*d>CO0 zL(|zGCoYqdl;Cn$EEowI(D7w@P^tJ<_x((@ac%mA$Kc^x$A+nw%9AV?hU{&{b}ciM z-BXAqQifqM3qF+&)D+?iHnE=wF@{b0YQ=s*vC6H!BJ-aw%1I?+xo$PjuM(pawgkoP zXqQ$E=o8xiLcPZmctYtVS_?Vqyt8*NzNueH!Bqs8lr`RVyQ+l4RJ_nG$F+^)3x~XHUO)*S!A;PCCV}2<#=b?=rua(D7eNL5^ z_hc(i@zPStMG1qn8~p48*5}~4y9|Tla~aix4WG#|3NM{i?i}0 z*C3ueI9Dyy#zGzWQb|n8RTsQYNbtw& zL*8S-@pd^sm=?^!NEzR&70x&2-yJb-OYpfr{t~R-&%@X-@lf-7o`=aZRNnlg`W3~p zCCPj1?rKWnChW8dcUII}A5M3DsS~mA%DI++>8!Y2Ty6Gu;Hp^A+?{=XFBxq-oeS_N ziDQo4*K}9B{Mvl>b|92Je(y5cCbo-fqSQ?^5mENxIS5U;Tk)3wg|yFaWja^QizmX% zAdJ4a)SCGr0y4&l(jM#(w`22@KWrMOZI(|%nJKOwr#UMJeQ!JXx) zO48BMypUwbuR$Lo@p?6(i(%wK&DmFL-r;<*h(@j9uV3K_onLiaU!^a<*Qc+!5T$fB zp#1HGE9ZH=!Ocm@KL7^p{nPE=f+e#KFEQc*`lO5R-tF99J;gh{dtDT}1N_jgrAS;IB zqwRG=)D7o2b3&X&sY5^DU4(P^+ZgxjeEc6#Aoyc+{)D#!UVwj+I3{xwdbOBk5vqY10{I~dTn+m(;1#Z30Gc8bKDiNhKBS@Ush%35NWrM-IGyP@`8x3b7YTO`27;d5m;4tA z$I8kj!$O0WWK@u5`A=W?-y|IS|2qj6&Vx1=;xSQT{=X%L7Hl$#`W(!*yym8?=ElyGgbx&sd$p1SDN1pibUwz^D&ho(j z-WRTK{0|9t_Fv}zNWvAz8~;~dm{e0wE^kaBzo<&ie%5qG!gXiGB(%Tk>mMk3oj6Qt z8LJz6F<3q^`KYZY!Nl|`2sle-AS=8}{N*ryek1|B(g@~`H)%Z`p+J0V* zpro?=w(;BNv!+>BB`X!!OpPyv%hRp<7!`wfr2_;ep_~2X#cC?PA#TG@04N~s=;!z0 znza;U#2EK!40183GUAr{n>&Ipsrk_*A?z74B5lTinqs0G>ZJ~E*Lk4>JzJJ;WMOdU zao=!@*lm5AJyPrN6EOisj`NeI6qfR*#iKbP*J z8^sxzKf)^VB#rl2cJ|m2FUWj#PdKwS0RKts8`G2-i%0+&dYxafA@&BZW4uGmx2Vl` zfaO9q;U3cM8z}b6`hdBFKLw;qXU5t{;SJ(p(&ds(0r04x8Oky*XY%0yFOId>z-0Xg z2g=UJEBalK+Hb=$osf0v_X$BLCT{t9bb~JGqVRA$UOkTZO$2~gSg^6|6NUBEzFz9T z`NR|ok7j}LSPnUE;y0ff6`G2GfGg>wib9mZW*@>={v(%M8=L$f7Y6Atl&H$CL*ak3 z;xkx~*t)jNt1vUUO@GhLVY5P4mDxp9_sHU0WkqtukdhOKED{pOJC$x@o~s~LnAujo zC1_%8MYs_!a=aQEPyz)|*P5TEvV3l%abOvGk>%>S5{B_~G*S6HR@A|)ynP`K>>!aO z3ic^Uj>r9nj+3q!YQ+&}#jCyxfklFfGLi`0l}8@ly2cD#;voaKRm_{3*FVkF;f-u( zS>g>}h-Unv%B?RTJZRQLfm+yNx)H<*o+%V%4BK}14-uckpv$yN+X7qNhEPEkz6qm= ziZ5lyre65y!hTGJdRG@8+Y%-Xg#NNqYP(N%?V*%t+b`Xs zb~x0zzxwd+O2%UriAciNQguH7+}*9*D9mxo8U;S#iHj5kBQXa6GH3qCa^Nuni^b=O z19V59xOewvTY#}IRK_S+ukx4u5iAVAV=P34#O>Qx)+#yQFgERi($jIgPzgVDxQ*im7wU{5L_0VW4b@2!W3)~i8yhjv%G4u37T)D=t;L!vf z#T4ei5=~QgxLhY5ruA1sl~K+-Y2bSS@5OGt{0kPpmh3@6 z0k0g$-m&7+lMOPIME zHa_SGw`twJPZXALVu6s7CQN;Uk<~61oB>^$58{c>Og5Qb-pn!kRl4ef4|k@2Vv2Yau-;-HKdK_C6JDK4o@E)a5=|zDEvQpwt}TbC_yB z-rzx@i~yk6y30+sR0rTQ)M2*ya`s%43)Os^P@C?9m!pnnz0+xU!R%AJE8=!i%^;)n zp!WqgYugo2B$~lDIfh61_zp&n1K=_=E!a0wPp!D^BkAx8n@Rb{p$l{Fhs^l=Ig`P*0Z(< z?7MF|d@)kt=hyvueD={@9K6vqK^RIUujAp%AS&3)E|MOv0{Pzf~=uYn= zUUu?>(~ZHp<3ZiqM|Um+PyH=?%*0G`z3^mp)ct`%_mg&*G6DEB+jhvGeQDvZC72oG zeLO!-{c-!|gFGqwKTqCt@BI4tcb}FqbgVvNSOdX>gr8HLwFV?as^J?E-cyaYC_xYC_9+6Z2Z{9rN=f{^?X*!|~ z4CA^%=gmVB{!?XFrHT2R`{l(-g>ba4wRCz}K1``t{De zy-(if9Fcv9Xt8r1_`@jAn|B%EQTB2=aB3_TV?~FbyK`ST`W}1OPF9Q>hnt63L~?>d z@28kY6_H9DF&f#iKJP*h$}SCqF}ldO-pg^A%Rb{<4@@eV`I*n~RGq6kBDhaDG`Wh|Hp2uv4<#FL|?kaKUAn}9;R)p0U z-6&-Ig;s(jOH?d@aEc=Y67F)}MAD%lTzFABGWJZ4k^?|HO{k}>iK$@F{IA5~Z3ZYt zh>jKYtWpyupqmCHl~^HR2SA(QBa>|Z)EwTJU_y|1azGA&`!e7{L5$2JSOjFlNy(Qn zsNvS+F#_11e8%RXriT#J(O~d+Wis*@xipkaJAnuVQm2Abm*C%jV6LQp{x!x%orjV1$``T$vp@TBg4<`=I%QHXSa!dBv1ea z!Hq`A91xiV(!aI-N0B<${90t{x^|HHJuI*Q2;=kZINP69}k(O zhM)OSawSi9{GD4MHN*S~UTSCTa-~wXm7*r-^4g z)Ma7@u$C>j29F>k<{&5;GUB1b69N{2<;-~AmYYa{N1{*+&vR?6kry#=;onKgnEY;Q zq%4pf;*g!XMtnGt|GhPtasCnB@F~~1swkEnQXCHPqZOXshNL@txk3R#*0>*#^U^7#v+x2+gv(QXAi)QZpWt1Wt)E^w zMi!_NwaAcs9HBU|5V-)cZv)w@g7j}9Em36<)gm?GQ)6S|Crp`c2vg>;+qqKi3Vk}C_erh&cBF6W8vX=yagGt@VVRtTRt2NRdGmH#G;&& z@NU)>UN0k+77MNp=Ohu!)RKxG`xM?tDlET;R6Qv(*(o#TdR|1TOiLnKJSVV8z}yxP za0k704ixGn>@E%J>dE7q08FvFA2 zh5Ly`Pb715)KIDI&((Gy11E)PHqZ08YIhQm)PAnop`9A@htK-sP|^o*c{Jz-ww&!L zfhEY*le{NDD)kzf)+2 z?lgx{vduc0A#2$`w~NyOy`NUi@ebwW5TvnGiTAxUw1u#JVLE4NP31|ON=LB|Lq{-@>(NkAdG05M~|H2q_UFHZ6t>_ zfP{^PBzwGRA>FtEpj+R%*ZNeK?xSk8C}mjO*@kUx=u&&cmG*}nrKC6Eh3eRX(2lnC zCV8pah^3d$ZJWsIO;zfh-b+O_>g`yMj+bxZw3-nK)17KRxg7rPbyE@n6 z+jiTshPz&?b#F)!-oI&Cx9z?%*tx?^qqx|u5K?-ul<`qC=i8s42M=C7{+w~r@oI1B zRendoue@$Z@-v_&1FZ21T0=S8M5p9Z4mv1Ir>>VVLh@*c9HoIHtOrBtk@M-{zy;kJuRkQ1r)qq?a z?d9cpEi>B7H`=RH)5ka3qmkbuV)EKm^(jMV_f}y4W{0H3QvXPB>dtn*lg5CH-N2o& z0XOLZN4o)!{DJ$+1Gne~ENl9ULc4{zMVJ6kNatYK@?gaBAQN#AFFh1yG87j!6m2pT ze>xc1ITSTIM64N1;*Dx=47nlsbkQ%Yl7%3ZlRk7ENraRM? zM~Y1b>qiTUYPuW3`d^G@G}(2(45LV8jYyx*S=fDZ*|MuQnXcO8O>Njn2OZ_j9-&RT zd#vWwBoBc)KH4=sN{L;3Wt%lN6*k(RJTj6$S{63OGCBs^E9f?PTT>&XCEcqX)@v~O znn(RLyL9jM(VlB2;~b~2PnKWn(v9Pmdk*b-sXTpPuU53cxwD4dEzhKYq`!| z1C7_`_ul>pgG9W3D-brWV>kY@vxogspNQQ!W7mXmexD&~!t}J~o5_Ss$~aBeI4ZnH zjCTrsX_C)t9M0R1@ap5cH6?A=|GsAAe%Op*!HjX&jLFK3y~Y4^bH@DAti`QaOZr)T zUK+UG@KfpG%;nki)1lnc+1vEPx4ecNF3sKR8ceF0+i9Bh^qR9v8NPFA*!9v}O3kp> zt)T~(sPFK5gC61U?$!=F=gr24&l3vfle*@USLRdy&J%eT9$#9>xV4aVHY8lIko%Vf zx&|=dfV{tBq?AYRs;lD0x){jUb=ejx^1-(#Ab<$iVxUh1mYV4)bU5omFBst`^5Vc^ z;qD^Y6ll7&)K5=o53p7_4}TGBPUisMYz7>$S9>h1(Ez|eG~5m zX!XN2zAZD&P4(_g6^1Rtw;wLwA{1+0Teu>FG7 zy&S-vwEiVjh}IBs2LnKf8yAR6m-?4wi0=t^c85Tr(Yoz5GwgNM?e$T2sjv3;+HUU-?eBI(>`mSO zGX8e&&DAf1g?saLyP)|mYlXX%!Y>~S_XcG5ds6q8QxV^3P`&g3qb8Ikb=wLHg|4lj zBak-u&pRF}j0b=$Y2&Xm{37W}Qy}=H064$@zTOqyl(|gvRUE(^aA+Mc5f6Ea4!PeS z3h*EC{5ur7a3o@XBvyYY!FVKPe{{ypoq=&OjNcf^M+#a;ibdZpemzp>|HjJ*k}o>C z^!1y@KR}l0YZ~TjOBeVyB~|JC(#;7N#~MY9IUBlW#y~mHdbUAFS>`+2(iVWj)_#bh zfBvj}KQ05OBLf#EmXOp3^a(K2*H)Q4k5e}m z3O5%BYbV>j8_f0M1zn3d^#QqzG*HqnEBUV$^(O`BpQAGHJ)b`jFM&XTUnCM>mUi;0 z{xsuk=JH@^AkwEzix#!EossuB{#xSdE8;9;%n;+>jDkP!BdPHmRHfj*Q?`qL9H`s> z{(i9s+HxLM$c*eUqP}|r-_y`gG8pdwU<|F?f{{eB5P{HoG(RD(YGg=uJ8oq*N=%G0 zMB`h1vgIoM|BHlM_#YCEHuQB+XejjXm!wHySWFm{mcDkd&VS6oc4kGm(Oa? zW;5wiyjoXytK$N5$V#zRI_~W!R0bKXYm9pWG2;X0oPG^_9IPy)L_xP2bU#Y=vtH1% zj7@T-=V&D~Qo0(CQ@DU6fHgVh#=f1J*%yGK{0UQveGv-|Zh3&74@ub0K5WSw>o4Y4jFzk99kl6hNMxD>rC;`qb97so@9R}I(kn!~e(XVXRvy{uLa z9~_0V0tk+R)0MhdHHl;vz7R3y$I<7Qsj*R3x*GEKm+k0!()Fd3`|?z`%oO<%Je(U$ zNy49V#*(;2rnuE|=pXl+J=Tw92uX0WTr*;ekU)b%C=HYDKCOo&E{D2@B+vQ@@kDtl z)wQSCY+K;&TS1ukk2u_Fj`+JUi7>M#879n)I8()s5A=&}R>q_|`pE?7v){CfDzv)2 z*P3qSe9t=H+T!Eq(sOa;PXLR!GMJ^H4c=x*dp}^9Ca;A?7sjtd=LZ1;^TqMBp#lLO z4U%o2M{Y!NHI~Gl$9-5Y5aergGEHahWebsD5VS1Lcbbs~{?5+F#h#ywHx-{1n!@9h zyk_bYqJFfPxxBY-5(=Q>+>vD0GL=AOH_y3y_SBEA59-DOd9V3uIq7^a4f##2pQD$s z8%pA6_ONWWMP`dNt*}zY8si@x>O;8v1LHu$ylUCEKpCFVk@T#XII(x-!7v1senMFf zLceLpickqMn`Y$^Aue?o3OzfzEa5bXhhq7=-up`G-g)~b5!vc$1YzOvU5Gy$qhn1# zb|mE9d3A|SU4RmORpF@c`aAhxV{Sh|)aI?F;Wq(?{6Je^gK!u@-akW3LOibZttdmu zb5$p$Ql5g*N@05i!1)oYLaq6J&eo_10{{t3zsmr!2@@n-4rdWMn6IRyob`p%3UYEf z=b{fqUir(P3cy(36DBxVNMX__MJ>Vv2qbXnFwfBM^vC2y^r_T~rMlPq8)?_Ne~D%? zUir0c+sb*oUe6eL+Wt#6@^Af+S0wdhaQrIr&%bfh3CITzZO#N}E2*y_LOxM+r^#S$ zwrH`M+HxZ*E#FEI-C#1}jh>hJ~EC|+@l%FKn zgl#Z}6Z%CYeIH$KE;;wiYCx{aEXj(;nR$|9K+^p%-X*z*@$+`S#ttSiAj}#4?zm6W z(wC?d(1UU&beJtWrUy|V!rUk$1GS^{Ct+oxQr5%zcjO=E&6J5r+#9|U?Uzw}S|%d8 zV01m}D5FHfRr2D~5yM9FOk$X;l(W$rlMVB%qP|UWUepz;>5h5k6X-{oa3hmz@TRP$ z01-MS)JufnHxN@!xl+B6si)<)+@4YJUq)TqI9^=QZzU~ubBexb1SK5#zX9j17e^Q zZD@qtb)97Zp((1zKsdP`)of8wD^3AijHexE4$4(w^otK>k%~1SF42h_^501vq%&7MgHO7%YoyLJ+1jalm~I*=X?*~43E za-2Ph$kexu5d>ZtJ2ChQz(GQ9Zc?Jzn9w;q z3OvqSQXTos>k?LQ!IC0U6Hlnc?3^tEB)2sCiBhgRPo~-9iW$QwF*k3K66^qnHpU%Y z{?j0&yoxyEqzo7!{SlZl$!-fGN&&bvJEW2jxsx}R_H+%QO6LR$aeFPZhNfXX2G!zl z{ELg+?~aZ@ub?>)|3B!s-!#hY58WnYPSy~6bq|7k`yn8?c;E4+{y;RE^)g!Aa2Q!82yM*nmPvnCVK%sDC)^y zMcz>Bi|Tf5@kVyi-MJ-)Wqe5N;W!ca;P2UjW}x)&4AJ0QPkP`dLzKe9wY&X7C5}Q4 zMg3b0D19I71!^&=`jku z>`*=|+(O658QRo%ufFEm7D%uk$20t)_~&?F?Jd&;2M7ngf_!+0nt;t@@~STK=ki@g z#K~YN2k1#m=pAq~h>B2XRjTo&z!@qz5%O+LB4;)N$0&Bb);FrokAm>O;J}FE&~xYC zh*lI2TX!xnq8}n6@Oic%==hCSza1d9HBprzxLUy)(|Ioz9)RIhRD&uNt~c-W##iRp zh8An#_*JqlMyb`EllYZ$UJfo#E`6If|E*vU|4EZyZ9ESNDPZCKtef3KcSIi$PJ0V( z#2+%_;r6}o=HDG-t&qts%^yXdmOfj4I(hqo`n|m3@1F5s$av)H_mazhcWuTmj=y6F zs2t?ozx+vkcB%V2$NV1_qjzoO6RGnrCOgrX!KhJ`+5GKybA2s1$lwQJOx%Th`iBR* z9723Pg$E!SDm!CCU8Rp7PeA8l48z0vTe9y)O2ejB@5t{3%^u$yU!IRQlm%!UemuV! z4v@OzVr-_PBYzbu(Qqj8YG}eW4DC;R*TNh;aIlG&@m)R!ngi>nLqDB7hMm}c?>D@+ zGiYo@1N8xkck4cFt4&q=^8OOo)Ij1tIQ={Q`s&|5Mm$Iy4>82U-0%nj9#x5_X?5Kt zT7|8-$B;vAZQY6?-wnk?`m;SuyyNuvB66)FVp1$TV$E=_0-<#9@Ztm_ZVF*O5&r3! zlt8N?Ow4WLA~H_Y+Se5#AB<4uaN-?``tN@I%}Bs z&!ng=xO-#o?4M~nS^r=TA;*wDY0*qXKl|jZgbR5B_{HI4K5pG?GY4f*z~R^!zU`az z*J&6o`(Z2NVgvvtAPx->qQnU?#|g1+gy`*r2o*w7Fd@Z?klIQ}ZY2;66Eocsqr?*l z!HFqn_}Dz5cM6|y5X(ezfr*`W>Gf#wNeFup1xbkIv5LAYj&f$RvUiK)Ek=|La#^^= zhaJSb&4;+RdKt_=dL@n$Lno_>-vnMJDfWBBU=Sh(Kmn2bRXT$3HSX0XT-wKjsq1M;EWhVyAwDRKyU$|8wWS%OAy|8DunZs_1XFC zB0O%y3Ud2n!VN4W1%1Z=06AmrKHa4?m;go}MBKMbeg0E)-Vntz92J2FD#e^zG9!~j z({95+Tv#F(g@gAZM7oVh_BjaoG>z6e;zdrl*aTviBejGn?OQNW{V7rTw=b_4L~qNQ zf%Nzxj_4_VQ}H>GZULcBOnbDIq2%Ca;Pd$0^Y{p2dI~;;4+VS~Li~9lWgbk6yW_&p z$Vl)>oxg19HjHpL%KD>!U6o=N<`Y}X4~(oPCEg zwyQs@xH7$7Fw4O@l>Z^EH=0JIjfwCAk@`EE@h936Z^@Ss5=zBc2S2r{M?SoT%mxIq z1MY>zqMTn+au180Uan>Td5185kRF^!`%)FjK<2vVN=%5eWa!O|B|5znc-r+bHd{3x zgO^how4mV5{?TDxKR+7_(na>WJ{ABlBv4EcQXGIx`y)41pZZ*X$}o=?2cA5p6u!oL zZ*kHtJSdXaR(omoO@Qn>~AQ0Vuqn9 zP_Zc$4oTs1x4!37phjb^F%l(jObf-9@dcKCrvOw__cEclGQ$&EGn+EbA7$SrN=$q~ zS`!e^;WNh(4rj@7hY=*yq5S#@tw%f4{i<>|n{q!jS z>I2zPrR648YGII7l9e?yKphv9ELq*$UX?CM`(m-`C0BK4Rdv@%)py*pU`aZt0HiX> ztc-@9b^@+-Lc@%Gt~~*X5dbBs)dE0mbjW{HxEc4_Rxa9Q$=cP$+WC{(k2ZB1A+?2z z>FjEZG!r$UTm|7f+NzSzHGDuc!c>q37DS@}I0S8u;tiSc6fs6&B2OD^{8eYO6AD`BQRaHn- zn@OF`^kN!W-<156Y+}}Lva4!h%WM!hX;S}#yClWPz0`ntqkciJ`NE&)D%{+E0+Ld)x8pXmO#Jc%uGwuTOLausY9ZF3SFvEzH7Ljj813jZ#gRDG>XXg9J;@!P0uk~=w;(J;2Iwr} zZtHlU>1$l>ZCn93R6s!$yXsFrhL(S_MW0)Pe4>5jFZt?VAwBzHBM9I17!O`u>QVx_ zg(-kPrdtE_vf~?w-v>DB_rMbr2+#v7uK6b=)Jbvk6#&U#OPvqkLD-l^rpkX0 zYd;yIcTR?O7YnnJ>xg#4pQ?s)M+cr96vmn$*QA^YVf~N721ngrv^MpT*ZLSGhs-tL z?gF-|=#E66KF}!~?gI|SMcvmSgQOZ_&<)eJbc1{3{yoy`&e0(gx<4bMZ%4_aHLpsf zi<>*)FZ16d^H6-(-k|JS?1g&xfiaZ^(nsa|H*ka;(E@1~wZ;u&JiFj=ph8=@K`wX% zqr%%4SF~^J)G=Tno(J%Kx)hZ3IP9RqK%nz?{u>&*M%afz{3)lc8oW?1=D-AbuFKGa z@{;%{R&2MC+KIdLW>O(|g3S;(_r;L!Z)+;+lnkv_?iE4pD=0b=$m35a2HQewG9?<@ zQj4E{XAN+zwa_e&Kmvd(Sa2g<|BXM>Xto)hycu8yG#dK$mw(EBNV6vItbpR|>xuEL z7(kewZl0jL|BDoaxoE$FQz)KG0p5l8&+)}63zJ^_u$jFd-eOJrq8T%Xl^NpNoefLT zc9fwrs%eb5RMzY>==KuEnR*{kSbvidzcv-$89N4upf?kn7`)4i0D_9wMOx)J6d!}UqScOWAx zUn){N=X*@&U(%mPz8M{{Gn+}SrO#8Js=@5nzH7h!wx4-bOl`Sf1q<-emXeoR6((Pr zuTcc1kPN0Y_Z!8l)fK&@nC>sJ7B;JUHpB`5CV!XyG|iZX&&|lJBKFr|F6$p-=*D-U ztX6Q z5$-0Ft2)?KnoF8GY+RFSikDy$E$8*#TQOiS6h3y;Y;lQbVpe_`7@8c2G1_3Gq*y?i z1WW$Qi4r1l_BYL%X*<|4iJ&($wsZ(om6Zv|nw;`Jbb z(qG?q=`b=hHjVCqMxEcsAuf*&#e?4ec(S@hqs=lt{F`ATmb|~%aS-p)&iI}w(qRv& z2W;=tyt$2ZCc+zkw7NgM9SppEW*e2{rFHVBdF54YI4vX+WL)4TIeGEV!Cqi*Tj}bo})Ia_)_4Db6Z`S+}=p~3{ z+7Fv+5Zwfzmlot;zn9>%njGyjX|Eya1_|kQI_UpzwM*8ekWCkM_;r`#FmHFkOwN-n%XRFAdf1H8#)ZxgZ znKbp*!fv1G?qB2DZ}~C0)k{|y&&JAQV&mfDAtL+<|803hpS`}#5PbYJhBk;Z_l$%q zNn_J4*NlEvQCd?QU!`3MkQ?jHERWdiw2rpCAc5}Q*L?v0qt48(Ug$-5|HK4$xwcmH zbot!m(){eZnZ>1z{x`{6)V8tl54(G@2vgIYl7sjh7lekqpfApE7k6Rny-A7(bdn(@kU|$gNeqt9Qs&hG8De z%+;l93Lx_oJnX7GeYK)YA+R^v$F$;h9Vx_g85JS=gcAm564q7wg2cTTyLlJ+CrnEHyovA1{Wothc zkbfsr6n7BL3Yp-WET#)UXV#0kgK;@PBpbtPZk*glAqTKz1jojG|31)4qD1#0@JP0| za#;PUgVhHC3#IjU0{36|3?d~~K}CXJQgC=R^Hd^*$C4&`^)b=zK$r0-C$U@`TKV+j zQ{%^|B)s|5foqP{MzJd>Iv`QF&{?fFJD+eIK(Lh!kRRXEt!2AxzfG1Fe z275-rb%U=;QfH>F!XW+N9m#?uA%~JI`Ko(@i7iosyk^ifFdrxJ(4gFj>zw&DA)Aku z48cP_gLIu-k6)j~jyM>fP%}P(e(?MifMM#{j^V{c9}nV70AKw@_YvpRm4fT%Z3)dj zZU;3;xie?(MJ}^|Zmgi$R^OA-+IJP9?rX=Ag63}lEI8$St^_D0X#xJ=gM9Ra7L920 zcpuD>N3N~!Y3OugGfkLb30#;?za%B8^YiP=pbndipgupz<*TBe)zfYB|(Mz^OkLFn^cI) z9+JWnZ1;47i*ecKGQE9Bj&dCB+RpdY#g$5-MfavJ4|sjv<1f=|8~FSZ={BD4>t@nA zpX)-u(blph{y{J<9AzVWyCp2)Z7!aU-Ay&;CYZQg;~t>DR`WbkGs#BxTF$yWlohuk z{6>F`*Z-4}?8!kwdfoEAgYH`BLoUT2UQ@92WVS2B@M}gq@B1UA!{sK|(_}T2_XOyw z$USSsR$hjkuTId{Zo7dd`|EBwf_V0Op?%6G?q7dtz4JKn(7Q)ge!BOYQH(rEFWwSF zfyawP{6rT)yb(&ade6dHM%N%xNKuBC=qMIDep#f02z{9sU$!&DppoM@G>IYosG96PWm0&dgJv|unWZ?$H8_c0C~MF;u1~Y#i320I26q(XnS*#1^$Bc*Ea`WTYMt&GVN`~5 zf|#Q9dWhm(a9sVBt|#G*MY1NALk@=EC-=0AMUPl6wWAL!t3D@oa-B3iuyOSpPJzSQyS36?!R#%aW}B z52L~^{{NG~ir_)qy1@QlF%^0*X8!9)6EyoB9hv{kV0ql*{_itb`nUd_!Q#97-(;|` zPUo1)|0{!)A6RWHF2T;jP@I41qx{3b(PG6aL zC!PZ;|J(YN+`j;o|EYfU>R?huzmO{bQNqfIrc4tKMaJoum7kL;1?NH4l&XdoDaFWW`sXdJ z|BxzgN$szTN}j#wFYg>08hF=K(mg!>abj|6y5+!`|6FwJ^5)j|&Tig% z&-_Z`-Vy$wVa>7m`|m$ze>_Y7_0_x97e~FzyX^C+rZRKm#?xy7>nzm%VjoJbJp3Z9 z>hEUqOyjBQBd!2<^XfaPCX-1o-R?Zcv^diZH;J3RK=)SZ%pLZe%Ph!d7o7~=iDY=f z`!*MbUqAnk64v?K6VEJVH`3g&(oYbQx%y&x6Fyu(zx-SsFlq3?wmsSSYcXi z_pUX-s;${4Hj9ymur8X&o*=U9lW0QdS`tOljb1 zpFmkF?wH6q)F_xTKT@$0uaM?f63X7&yh5No-h7w7M0u7Y^w8+orSy{ImzmY9-&cO# z$U-TK2|uzabP-Xp5UpIxuzftZ@Z_*m{8^5NSAytO`#L4(Jb&GjbxEHLWtW05wm>m0 zcjugi$Kh;NOwppBvNvLqknWo$B7YL8Gkoa{%g!@UL^zECDmM`<??*;g`F@)ASQ_zs#d4i}5=v-fje^;D+9$VMs#|O~aOW_iD<#3%a zM&y^U>0&WS2@;JA2??PN9h=)71308&-o=qR_W)TIFBMujGkUExxgK=$dUlLm^F|)? zV(?bHiGJ^>U2Lu7IN8|cj5DpSZ4dyqpV49-m{wMl#ohHsvz;8v z#%hfSSnv+tIvr9H2zYseIt=cB*g=+NOFZC=316HjWWL zDgwJsl!ypW4O~4vAUw_&k_ojO)MGQvh)Ho03i#O%cQVnwScTxAF_BVK-hXoaoiIS|D-|I9d975(R%&7tbw3&{hfM6^~ zGi_A#hNq9=p0vKU0Y?V~ruHrfP2$nrOfb7TfpArO46I|vH9ZInKP4+EuP>P%ETb4$ zq`v4-^`7;*YP#micv4W74j#-nkUwHYUS&{8|nxV9?;B|RG!J#1WnMaBA zTrY{Yt7?;!9*Z!$Gw5uV8Le=ET}sI6ZB@z3^n&|t=GDB>PUg(iIGlxju2s9}kX|C- zsdpZFp8Q%?-_c7!y^7GbP^_$Dq^-OE5oF!`CE!)rpKU1$Bur5qL+4Lg^ULJ64K-3~ z>Y>~fua~mi>!PLCh~)t2$*@ZUMf4tcFgNir^k-c)y&#&zzlof5vh>#-3*VuL3@ts2 zGz;u3zvu0+Km#Z@6=B&RC~&j|1xGfB(jShdg4f{LCO{Aj=3L+jx2qJ)Zl^vj7Ko)u zgAHf9F!4#pt&BlmatVS0>g`vNY?P|VZwOhU7Tq=yqB?_sIsYJ~F^yO>k8^M<9!pbZ z-nXHCjY{HNltq;wI+QJ{d;AFyX8L-E#l;78wDB3ij%{huQicX9i&Am+P^hY~NB3>1 z9;(f;4GIx3WdMGW_-sg`XB$7{^JYB1c9>ob!v5Z-?1C?|FpfJ61u}s@kJn1UUmg<( zNnWZ8%oJI?Jki-JAMNk*?f2{<{p*Hag|7~*QgX8F4&8#v=Dfc{Yk!?(G$YF5zb83) zZb5&Q%=+?~7VfofDD!bLQxA~5`hTq-Oy!O~zv1lx`L%vg==FT=*9R#tdE8{LSkGsP zzOD-l{}lZB`<1cB{?`unzRI~xEyfdf-_m`Ei{@^p8CP!Z+`B~9Qcn8pcB=SH4dkQj zsYvnh>r^3Q5jk3{edX9*v0Wf+?N`e0KE_f12k+nE(}cn}FEXg4R2v;+HqNoK_A{4# z=E%a@#0?^8r9|Kw?P`4e}b;t+u&vm@I2Fo zZ~ezRuYUbrHNSP$yQQlG`TeGAhs>Qj%{1#b1KD>Wyx^c;n6k9Q=hkN`=Mt!2pNDTw zH{SZOm4t7-Yl8}?e%`USJ=TWd_S*GajBA{^(eDda5j@${^*&ZP$;#MX^P97{@wNKzZ?8l#5^tCG{*U zIbp-aI0(O6Z)wPfR9+GBn46wou{+6I3Lg#oeAHdeyIt#Iw3qiSDDL`GX7m2DyW($e z8_X|m=1wbZ9DepLgV-1(Jqk+S;INYojoS}{26A}Z39+k>psir18wfkt2y;Z^Jj%mU zNa07K5s{bN5L47V&2+>K^Ui*sEv2ZKD4Z=KJVlOj&?QWYOi4I%f$t_nhiL?7-V1IN zeUP&eE)I+Soe->i92&wFwo@9U$iX2wLut^=UalmmFcT|{jy!?l)Hs5!CA4>=bDC!Gi#;=lNfRaXz17zshAQH@sTOb z{!d&I@F=Uh6+R;Pgp)u&Vs_kT_GCYCZ-RyQD~n|86r3xFRu@ZgdgnX?m|TIO=$VOp zJDL2pIYzfWnD$jlU$*ZWEG)MN_JM;+9I&hF@mzR9ea3@<^B`jzrwk~8G{%$EGFL%e zfI1G7)|oB-ML(@!EHzFxZ3CX#ylMSYBX#b(MkFECXgo<50C;f}3!5qWVkz96AU$-- zcX1jXR7xy{P$-t5Pe>bvQ!~wm!V@VVL;?*}dL@DYnN58&lXe`G&JqvCqGA5XyHx1A zk+{33y?1-!b!E@nGlW!oGHj?!uy!VOkd(&EnN&9Ra3m;BA4>tCGhm!9hJ#sJEe~~b zQW_A1bvU3|`B2Lu6%!P}8V}`IH|ANlN3wYcLD7kX%mjjmDKw#qm{o?%pyQ+|$a-Ye z62n6RK~U+UiL|;vmR}_`!{tZeoM$wYXn^OOn<6}1*@zTR3}Rb%e5(uNWRt^Ur4&&x zrZKp?8(f)0QGMX*#hC%10X=~F!EBVa0YML&3y`v_S{~|;frz9hH-h5~b8;JU#DlkT z>nq{(mbuS<=GhHAs@i;X0pnpLD@l3)*U<%>*Wm?Q&U1L`M2Y-Ls{9xADYrSZJEg%adzPL6fWqUizjK4fu(`YD!0!`MrLmAaiCk@V zmyO`OcW9!q0dY66P@v_B+13*pcVZQg&7(pP-74&(db%;~#<>I(IY0GBxW*Bo(!rhy zSgV z3$J`CeDS?dxVcDbFvDIK*7*RgyyTQR<`O{4P@E{1Q6x5&r9ptg<)4q^QQ1tng$ZPW zersU@s_gux*3c5}noDdHO@Bs}#u1Xjd{se-#lz&& zk}47*L{%Uh9mIKB3bII!8HyogmsyD?*Hzd(9x5+BiOfriD{wD=o?Ug%FsMM;8!VRC zMu0R~RjVNBURhNO?^k6Gl(Q>E6HKa}6RMk%s(TEXUaVJJ8&p+i)AWQ?50h&Ks$$}Z zfGkq-EFO@YW22f%s%;j5ES|G3B=bjOwThRNWif#527EmUPK`}WJzvTJK#G?Dh9v-k zDJBCo>4G(N$l4DfHA2RBxRlXs+R_(ruuhX40w5iRlwB*%2*+J~xKw{h2qZ={2_w~~ zV;aQFH7<2Gv^kjcn81yJE19U9Y}$Zeoc2fi2T!;fZXrtO#`L_n}k^``!36%K55KFh#kKnZ|pc~dwA!NA>V$E)LfQ06f=c>v^te3eFedHedsI1)g=0^O;CJB7Xs!a)m!iV3LX=FR7|sIwYH>!z#N zrhFtwC$tfjSIvw8F%v<|h!#*TJwC5lP3peD<(J5AnAW+V6@@0?AZrw6U^E0o*2qL? z^3}sH5HF@90p)sFwY9^GA$U$6e9re`2HFs1E_H(p1hiTFb{EGDQ%C1DqcF{R7+|2S z`K4;JPIdbxsr_+s)9nGUY0Ql{geH;z4J0T(#C4b*g7LW4j4^OH7WOF_ZY^Y&j#Mxc zDpmrZL0H(SVcRyhYi%;fiiV2Z_U6JI>`Ke?o05$cI*AD=;OY_tRZpU6Z+whxkKG~B zjgZFM;7q7a+7VLXPJ0t|2XlL;Y8wr8JBcp8Q8cBU?kucnkc*N!*^C0AdCs_<-;X?8 z>gqgz4y@>AVXk*ZyX$_J&0JEyMyudUZs8TC0xn%rtpS1oxz_3)N!BY%6DoSEZ^Eyq zc3X>g<#r~9c4iGLp ztf9+odlogS9_hLu)axfm;OQzhHD%}$zyrZ?(rneX$a?ce%M!efAM?IboFoH}guW&1Fu6^yAK9QA-P*1yV~gMVXz92s2s z;tnxlh7=jR{9|;5zFtlX4N=0rO+=3!Rcc9-C|WY1CA)BrTBXeSx9Q}U&pzmZG~s;%Xt*vXc%3BoOPrGC%*8#w|9d`ZK&l^K|Iv_cVmEB&N7zJU?TlE>dqMD} zRV%oP!fYnuc0O)4k2uSyrOfsYo?k$fe+7tzJnyn5{TcE#*c+vphe#MT*A1xJ#*cVMw`;w4k5zwXsl(yYS7_*0qlfO{LiFDH8>9*wWHuSSnK0@o)gPcRx>I-E z{NkD|pOJNhLHm(@*Jb_S*frCe>%J_&={vFB`(8^0OG~?}D+`~&UK^0bRltkN$4<K`e8G0J`uj>a{pWz2TVY?zvoCIyhHd&5Zu*aI*==k^ z({IOK+%AaNdRDjeIBmN!V&f6tY8Cxw9Ri9@c=<_;3S-(evAPw8uPQGxS4#X=+6tE$ z`P5)N*GhzT|CFfpo~fSo7hcPT>=Lz9RYsRTMqKL~RaL87fn7>{Y4@e$aCd5S?`_>K z>&=y(!kx9RJ5Nh?b|Y4vtSleYsT_@dWjnjpm$ox`QT6oeQe~#f=das~DXY*(GW;o7 zJIzXHRg>;H8Nt7=dq&o}x)a2)mQcFRd2NmR@Ac%;^}D0{(Prx&7Y{`F4+hN+gr2T3 z;w&Y+4`kmT+)X=>l3C+B2UMQxi=`i`GaPnaC!_d}G_M_L-#yZeJko!9Wcc>T==0Id zzei~P?lm`x!5l=0qrwt(J9|}IqM<%hDwfSW}no@y}hha1<{U^5()Gw9A) zWpFn813qhIkQm&2JxigkKZSxbvWN{ge- zDY5tHdlfXoaU!w2GS_b1^^Qz``uy#+r>K*=V(+rSV4D=5BGPcS47D18<0A+aEk{?D zlH=?!LLGBgHGZ;#bmR#T+&BM|SV>b~3h#@7%;7j(f7)rp&1B2yK0L7@CF{Ca1 z^xK3HwVoV@wfeb#DA9W^x~KZeZMMR#`qjJEyz6Zr!TSd3`hk3=&uI{^FxuB zBI&s)d0+f&@&uMH;uRlEQDBOS*SbFMuMX$I)WaLuW$3vGJ`G*_?5SWj$?VTd%TJ)T z$eX{raFC1I{&rDNK0GFx`r^Qn!WlXtJpdHMu1#fara=Ou@i2hJ%7YQ50JC7!ju9=i zSc;icCXR8iu#OdL(gBzc9Mqi7gj5y~;%PFW2<}ACq&E;wlDu8s8!&q>Q-{qeR__M2 zWtIgU*poH!-s4H0mSRXQXbgZ%Qv}@rAU%3SfKIyXUY^$*s&azO*&?%pI#{|MRlw`s zX`3HWtgjgo5%A%IW+Y#dYjM){C9z-_+UNWjSNH_Qi#T}sf#ssnKP4>p+07t$iWaH7 z?7+{7zN&7>y}HiiaINyisNqf!)qsy%ZR^GCs_HkbRo!)6^w&Mq&%)3iFV?@G-fygu z%yXrZa{@eH(o^TA1CUkD>O^owJ?btDXT5MfJU;Pko=VZGyDDjua03Xj>aJ;gYqjIT z5w<(53m{0Hx^+LcxhhCUK_{!{TTgf(E6j3m`3l-%xjqK;BOp!4&97TFmah-Y&JH4&N!^;S=V7|$whir8rO(UR(xBx&JP2n!d|vD zy)DI65hjcUnALpH8Zl&fe@SNmFvG>amt;$Ek)(KM>4Ys7|?4 zszBCY2*YaOOP63*est18NyJKm9)qWJdhiMo$x;P0un(&$EVIf;vHQlNXS#LBnABa;LYa_k;{I^D=;XI8L?5(J&+z z*-`4;c{>NIf9F0Ju&PfGrTupAmu5HDmAJ0p3M}7OJa=!`9m+uLd$(ycz;^kyBDbnh zq?I^p+)`kaYH)>_2?d(rf#OS4mEHLGW zw{mguAt|pmKjiXLhR`2ljUu`v()Y1N$NSKXuZ{wW=&s1LZ!O!LhHIy_7E3@&3;#T=(iv9*^x?*uWi zi*o5Ve@b-l83rFK55|d|=^%h5gvcMo^`hnu20toh2BVx(%Bi*Q21=n!Zw=dvciH*K5qV zdtA3YtoIBIt4>#2lPG9;1}!AcST7Da0tOw>!d9KsITHj>`A*W~d7IVj?dz>4;#_3W z*err31!K#r+^MxK6T@#)Yc0aky$}&6jNVP;zZKncb$wq1RTv*2(74m(N|o zxi%k!%=BD*)sUXL>m(IAJL2`K@hRP&>-Er26Lqg%K2P2AxF0%)xJ{xnoI!fW{NjTk z6lvU1d>UEkGe9Zm!t3jOUV%Gn^OK}bIxoy6V1}D^MUl{aSOlEk2&&8AI$P&%2s7^r z+&_TF@D6K5$E|cfxrx`~+$FP9j@aJ~Lq>OTjxr>?Z8PQH81AiRgsNib)+AvqQHBu= zcdvGS;W$YKuhu7oGe%KJO(zfhH1R5I`_1KZ{t?&2x?gm-|70H(MSI2ss{#4L4PdzX z9T2P}JIiB3c+B#{Po}u5M@4Ji zBM|;mGzFj^6~jFNfq!9)S36p!j}X)R{Fg5X(2j};uu!4?J(_T7{_&S-QWXDhGSoc_ z$#53A2^p&J`T169`IXpA_elR6nCfafoof^X_KQT}P9QP3FA;g6e*+o$B6bp!f_ROd z{~RDMGKAK5155QX^QI7(;6&@!g@{ju5P)*zeOR~3z>llSZzvF_@>Uz*u?61OW)Hhen))h7kM&E{FXj zD|iABZaoOq`SLXa@&*ECKtTM+P&ou-z?|+L5oUtAjU_`lIHIv*FyvT>2RX_jCMo~{ zky;6wK}1fH068Q~f!!wr4Y8#JQ{!L)6*4L_!RI@f_JJ_10T>bqL}DRlvP6vpcAqc| zRDlR(Bu5D-NB7(bdwU6TDo^q7p`Q^J;)Vcx(Q(>vfEEkEqWvZSKVSeWtqf7-kP#K9 z3@1W;>ZA2IAlgCl9_T0w$Jjt@3@9_B&D-(0d4fycHF_+0{0$6dpxNGXi?crPJY5cxPAL}svm(9T;w=4_c)Gl7`Y}8iu*Cj>L%_4?2SMpn zmj4hYWcb7H73p9Df*dmauj~1bbVd~dU*bcypWvg-bh?~$;h$i(#B}7=L&O&0L_CAe z;31-ta58W{+lAceS7)5no$2&vyyMdvkoGCiw|>LdB@q1~2okacy?{vR4D#vafc6i> zG6|p+F-D^^sY1=CxGjwGHNV zY~{VB%I}oO?~+K{C;9P|YpA$BcCCo5XbB9{JAY!Xt^pm0H8(bx8Se&5vV@pmQ!p!; zH<392D(C4Ildl_{T64~9b{Y*k+8fEVBOVzh8|e7j*B~L6Xc=tjcs|mKpCSZ&EYCwO z<5-cqm!KBoyPjS>B%+=4odn-F@h&v#zpjMF>EKMw!Ze|Pbm667P2{; zL-YE&Qxv#H;=$w+(UlQY3xH}wOBCEol#)smxk_r-N>n~kt8bSmx0YPaEz$Z^q7hQ6 zU|6D_TWXa14`y;Ee_D#JDm5~EcIUK2K189HN}i_QT^xyaeF$q}_kq9w3j;PWi0^n} z{9h`ZigNK0q9|yrz^pQPXof;4MBx&m{CYypj%BXFbol`hD>_shk@LviJ$IU13|=b9 zG9ZS^hKU{CGS-90{Qyq8u%hA+8LYM6P<9}~$CFTLp;gI%sT8S)dDhdKpr7(J!sLS> z3J3_W1aP7fYEcgi*kfwes}2BI=y{C*Nof{X(WXs7gQ-kz%?Tf?oEM3QcKO+a&@n27 zQMT^#<}DL#ypnCTms`@UPuV*Sar{7)s95b;!gz+bk*hh zv*JhYRpBJ4+-bF{a;g$3>DKi5AJ?si6kjG*{gr%vfP{U~t2tMTM9lgOg*?5$RWQ0; zd5EcxFT=_Tia^RedVl zoC3%8!@N{QyG#6Ns(pU>!V*I0=$2q%$jT4yg2?L(X52ovhGBo0I6sy9Fo^r8afcsh z3YEEpo1$KMXZiioY?`rn&XEvNcJjiW;K!4t;J_Mwe~vy#Hcyr2W#lwW%Blg3HVTwt zpv5%tCN!zFHL=b$1rz)xsBy@#r(b5Q4vWv#6y9N-K=ysQSXmh`5+ha@wD%^9Q$bV%tKD+s4rhv4oas*|wGa2IIEY zVeXdisFx#o?RCTL-;Uc4&>hvk8f1cyY>FMb0UfrI9pRlFhxcl0+d5pPIv9>SCac;d zqTjHyb!-f~ZE<6ExF0MJv#-$H_0c0zZ+i=CzvXa#``r2gVC1oX9|^{gK(zLd`S!oo z?O^Fjdg(Xcu3tWn+o%IN95tPJot^SR0RL_$XG$xr5uIQPn>bIGunir@E(DpurV0SXi?aAmjqDvFL-w&zTzz31v~k7x>==I`za zBuJa5*NmrEe-~m%3m6&o=t_61c;q|T@SW~-D5tzV*A*+GyAFvU^lq+DR6zZ5>w8x-c%HWgT z?i{1RocaDq@?gHrVCn8)Ud>>^Jo1u9-)a;PNh<1&Cw-L~oR$TtVL%~*pynE}*G8b$ zk>O&Vks=Sea}cE~Y~*%3ev`iYZqjIU{od$-wa0Q;-`C$~qhDCx@7WBmjf^&hy+3>O{w$1? z;SO#ILT-M4|I2)=RiA+-e2h!igQj*MWd9wNts1Dd`6y1qI|4EYU13rL;@&VrJ6c&D;s+8?l|uD^QR?!L;jV{l_S*ub|;XXoLDt zrOglx)2fD-r%u|?8Fln(mGmm{_cAuTgUrj27al*ZL2**MqJEQ(8W?U9oNowY_}ejb zE~qh~Z*(0?be_6SI|>c}Zrjs+0$vS|hV^tCtq#+UjD@W}@ES?~!ydjkLNeO8RXE_} zv5u*Sy3x1>WGT-+f-yz%$BOdrMq_bUAJH18b+0|ugWb=o%Dm&ZyX z>+4h?%UB-)$}&(?c$1EJal4dW7J=P{yGk@2eCeHjPf5=VVTA=OmBs#Ka79aA-qh>`Wl{1`6qX5lrfTz}wOioWS~^_WH>ZaG_%jG3L#>w>#xKenJ{| zFr}j=oPoC9eD0A442bg9_xy8E|L7nh>hP(_D1wZ0t`M1SI? zwXgR4{=(!tI_pTpTM{A*{&};FPZoUhIfG(4-{ot<++&NH5sQ?%i<(!L%a~3)`1=-i z8-(AoOGVncerETiUGX`$loVoO?hceY{9yKaV_to-IiGYW{ax}e%w0zK`qfoh=btyv zBy!HuPp0O6R2-}j_$%e#GK4)xvSK#cYBs3KPCGm{%EwP9&pWDnKT9KzY3~X@9u0W- z^jPn$mF?S;=4-;}_Yx8B*|&CoiSi!ao8Bw@0$RQ((Z~Ng>*?rPgBU8433&6&}g^?BRHnum=LFKI=LZo*Wbd_7Dy0 zIF0QYk@IES(!mEuDBF(%>*+mO;*xew!T^09j1MM(3_3u=M6QF6N}b-Br2uYrsty`3 zZ52k?(u4*KW874fC;elo!3cM|&SEZnPgPO+Wfne#3NMGO6fP4)PcRk%^t@HK-_di) zcE#A~>(I5NQpDekV+)YQ*=v;#65As$7yz0r{Y2`lD2p^658t)n93?+!{4wHFCxM!q z^pGPZw=X?7wUCVzbN5yhP0@piXnJNqdb@`xq?P6ffIaZ}XLJTy=ard!)8o$hC;rF@ zkj;C$4s$oH@<)Q(SJJjvwK^SHn#tsQ?|S$`VSIdg2_#r%c>$|Z>K6*$jPuR%d# z^Q?2`NH)PvdNwmSDOF|a2UWT%cuUBOsmf^x*%sBHo3uL6DX8LK4_Yz16fc6qBQt&g zv_4HBh}r|=HImk)0df~aVSy#y-kg4GJ#SA#AAUt_U~KJ4OpkyN;Mgh$p}qU!h?M(x zPjkiKn*`(Cz!oZ`4(~b%isCT?*9$27{c*hc>};S@7RV>YpFYWt88fvg?VlAv0J7Td zHxoe$~^cl^AfQ&ROr-B4kW2yuYYKdUZACh_Xc`Sq;c-_dIQpvaS_xE0Q zBkp^MPCDFA1fg_jx?W}b@9ec~J}BO6D$maI5{8Dg4r+$QjtyVrZ?FFL=5aP!M)>U0 z4lnP|12rSks+~hcC#@1KUmF9z!QKn{P_f#cJrkS#zRkMieLR<+`j_60SmA@gjSw68 zTQMBiJasGH7MYSw4o%Tsia@A_1I(x2@N&A-_!&WsMUA;eY3HDoZ zn48J(P*>E0>f40Nt?@&>%*&)kRkqaMJ;eLo5t{Qco~>#rF;$^rGf!o%88%tpeRsO6 zR9Gzz`h1=I8!*!U%O{7rEiH}1qd4|1GhU-mCEI158~}$^ zfJ~GpCRCsfU78%k#NVp=3m7<4o=quzv!r&eJR+(DE-5x(Kg-bng9uO41R|TMIBr#x zGoY5l>Fv9X&Kw)boPx&au<2V_7`=W@A!R|-3N1|oSQWnnI*{zAEjFoy6wJS+uPf7q zP0wC#ByKf3%3obtTN}Hraf!b8aZ-zjp!-iQRi_H`Bsthc3FVY6N-3pUt~B_#AAYf3 z0Fs^yGL1LQUlBeNOaFa3_qn2Ibb|ux(xGxog^@8|5%-bMA>bmVkfmCTN%g9c0K{$3*MeSmGB;T}zBU+|v4szUqb_4S(Rr zm~!kCFG3eB@lzG$IJ6uO$|uracKtYL^}1yGhX46{p9u{y>?i;^Ju{=~=5!*DtFF?N z`Ue@OkTq`r`5BI43aJZUIHF`RJ_vhoVkRF3lJENnoo+zOIjt%`+k3OdS6k}5N0#64 z_z~1?TQaZ8#2n{a6CRO8K)C4NF^?9~%H?uUE$*M{a}dOTCU#eeDs(TRs2du<{Z7W> z&-E>s&#D=2&>TPsAX?R~7)J3}*due3{?;jdoCMQzqdfRT)vKlp{;(fmM;&!KBN15x zYxfiK-Yl5EWXDlHysMKpH2(5I^H_NGO5FpSRV!ab5Po_eg(jIVNwqHB&<4=U&nipJJCEblzcqrF0G8qVnVdBOsMm8@kd4@lgF-k$1&MLipZ^W*-- zNFPz+ZjiGZQG?q#x+TZ87B{ zbGEOxah1;Z43sa2vhbp1dex2O6K0E@v>QZOWLp5c!Pn0>A)#W*j$FU8%ByH31%ifL zo_5_CSS*kcxS2DlSuaRf4w;f6HB&yz+eT)62L^@M&>7Iefa zcvH%JmLJZ|x%h;rl8U-@H@cgEWox1!OM}&u?JFa`S6R}b?%egB#sjX!>OdBowbb-m z=gZHn>0A#gyUrt!s0&T^>rE)Y|0@t>1h9ku0`ULPC36$Uufp$zgY7vv=+CFL(&l9!Q@W0KeBW;bJJGLrwN*n_!7=gf1(?23q%`ehdh zK{pOQ1%0mbXpgBL!%ZVLH&d3IHzfXHqD&P{-9)_t#r$3WZ!8KfaYO1dT8_)^e@gdQ z+|c*3yy5R;@L$tC|CNbK#BybY3l>Pa#XFmxV^L{AZmgN?=S)-p{z87DaAL0f!%XRC zxst_c!g;0g)#n+XXBTp!`Kl7#|1;xb>zDR_*zgHRuk?=3{a*t>OtF^t4mb!;jDYj>xXL$6t6<8(j`O(6rd$ z>K2A*t=^X}<-a2S*^q?^hon|B6e>kK95{UdrN`;Qf#gXC8UHUp-+#e zWK9Q|t#s|JzB?8}(6n+IW?QuNQA~mYucBZ^`X6pF^C3~uW~B;eJgsD3tj zUwc_Q!o&<^uFFRtE~|*(%_q(OfMjtnyPUv$lwbXM*vFiunB=S1Q?E-Mga=6HVV^T1 zo+ii!tIHFJHrD43#BD4-A`tK3Z|!_HM?BvBxhA3*I~kabR5l{hR zyLlPK$H9Dx^Kx3edMp{;TpYNqD#f_(rFNmw0YA6xVp1({)MIQa!PviwZ) zGuV8YBGLLEw3(AQk3RwNu}-{1M-X2G4L8SCJ2 zQO04iq}VNjuosJ{RkFT5GZFzfYH?smaFT{--7s$xlvLzbaycy?UZbAXcCJo74=K;@ zr%{y&YQp$_T-3x_W8JRadvr^ScPGp=vhx1rTaL9aCzx3Kv~}<;Y$v*$N`jUw9Fu=i zUAQA0f2%e5+&-~@)04ymfr!JK_gnK^_nT$fvdZxxT%Rp%&oV!^8wCbQD}Cc#<;{Tb z0WzAVKa~r-?rmdq-#we8H4U%crBd@~bHQ-x-5#}9)`H?jwmznwh@^Glp!xMO&FHzG z?yh0>wP^`(+#3`Lu1^M$KOnBls~0o9Z&dAYN=>-MQ&g>ue|r>*;?%V+W|N2lUv+9o zMsde*^eaPg1fLXZX($J8L!bEVhe@ZuD0#xO;nKPnQiGa`ncs`+UOJFVe^YM{FH+Xy zVJjiDMVs%99Chd*uof8zR4lD=x{iK^6^=Hp?Z=tLxkFbzvmN2YK$j>h(JGhr1|_`9 zQpqw8S^}6Q>Gi0U6L%(!MB?i?#MK%Mt`0f!9sCgf6QROjT$qt2DlE(rTx7`mV*Eh` zXtC&2`?~%>x5K>-sQ3#1<-ap=3#ztIy!(pUYo6xC&)nCX4hM*EhLzFhrq`bkABh_YbJ}Jo)G{Hi) zq{d^c1g2!Z@U_Oce$-y%5~XesN#i-KXHedk4^+9Y5MjHu-XG9Vwsz8+i}wJ*RY~jC zG@myIvArN0_q)HGK_s|tjGfQWowHE-DXzX=7s)4~Hd6EfFM5qVoVp(1r;bVjFVB5V z)P=-J;FK*Ogo?oPO)pU+$`^^hJc>78-U_Q69sLu(MA;p{^t)FsT4jvJ@oF=x zeHHmu@V4nE+w-qnu7@*KZtzJX4Q!y*?G@@$ML1ubcjQhANcb?Siq;;uLzm0~#Ub~< zUQ{rtfJcp}H@iNo>vLdvp*lCTLGde)R;keY>AOltd0MX58dI0j=BVclIC8p}-njTg z`K)^UCftAJw|4xd$P&>u7$nlleG&`X#%g;PGo@+fSk>JMF zf88Nu?-PDqttBg>P{Lh6sNefam{G z6HqyFnfPlplni49FzqGp+_HOW%Ny2MBU&Xgc-$Jedm~fk5f1G&7d%3(TkZbpO|QJs zt}g*onY}NcG>xKYXFgNxDkrPOR)6)q1Lqrz+hhHD^FrK*5#NRcxWVdND6P#`->*b0 z%H~)nFm&b$mG(sn81#9d8R8Hq6}u>>m;M7TWdFVL$EZxxScwWb3T4#=5xijrdLe-tNT!Mm;5Xxo^o>2%- zLnjAoFIT>RG1Y{9=5nNv2<39L_7)V7Aj5_q^3srDAADdRjd@MG!s1Z>%)s4A!Ompp z;m5G3SZ}2>iU>q!$ZzLx#m$I#Sok4(fI3ISwhQ&NSU{avq~nvAIX%zOmr6Wk_GBy) z{Sw44j|L+t^+C_y!uzLFiyeQqxY z9jWz$GX)c{=UU`Wl|2Yh5KS4hbUAq`A--O+RuC^YgHhG7c`as|njO)z7A~)lSV;n% zO;n_YosYO(|1ZkkE3B!o4cA=hg%*$wQl+<01O&wZiim)yh*Sx^ccp`&cck|ckX}Pa zngNuK1`AEpfOG*Piekgb|L@s*X3xyY9B1WZ<+}2%^}f&j-01fbEUU;+Q@^l^MZdlv zq(qc392S%!6q21Qw?%`l9LjYBimYbIcT6z9V&_cCMGBDaj#nz}ReSJkgQtWQ0?ifT zd==mnxEU2WwVgUn3!(flC<>0r=MK)D$ka|mt01!`U=JQFWX2z7{u7TBcgxC4L{4FR zfjC~E9V&tdPZoMe$Wr=r+f*wg+C)g%j_x4>*(6Zx_wX4>nd(gU%(;=qaTUtvKPq1i zKy9hXC6g- znovx>Az2Wcy(cMr-HtWyol_aoE0IKeQg{t+nb*CQ=jvwH?ckL})32c6KA|pH%n5FdA*o;0K2mV2 z-=&pa1I!fQ&(2-SiMn-`bK=K4=^qm!)43n*UwNdwkQtF5Bt`+xtl)$w-C?N?ovHQx?kE^!7SH_tKDqX2| ztFO5;RU@H-RKHSlee|ArZNLN(5?oZP0boLlYOh_YO$O@xm$fan{9@esd0ZJIl54~J z>h4R#D1_D_rLy1Qy^y%uo76yWa6$(5>VVKyn}*Bd;|wW%wf{^S9=g{k-JtudQg4qH z<z**cm zK;-pK@X2Y=!@(@OOlp1^t}0liq0OWL>f4YW>YEW7?Mz1OEhE?fK%Rowb1zRPwd`9m z%VFuM3PcVb9!6Kc!fN|46ZT=u)hVP8JH-TL^?ABIsT$4nCB8M&~tpH6#uG zq@gu4w9~N|Y}5~^VYYCGdu5w2Apu3)h>G(!p+ zs{IL~&WFbFbzW$!)g*%0GC*uZP+xz~Mn#AAwa&2|NI1!!HifuM0z%1%dhmaYS`*g* zRk~3N(@hB*NTGtms2S<_fr&7rgJyXuFqDV`?qLu_Q53zdcj9fADGiX3NmdS_|Ksr4 z4wok5*iJ_Yr>;WzFl-z+MN<$=Oej7$TJ4`E$O;Bv*23luBn>j`IaZnUa^oFynT?~& zN|NggLTe*5I!22-wE3Vt#kHC=i0Vn>NQadG64S5lVW|HJ;nye~Tn~?=AWorB`o)N| z;mAN595;qgDd~MMfjC`)R1SygF#_toaND11%2$dxmXmm~fr{)RJOV;I?{6nx zM|IGFql?55o#F{OLsYBPh)VH<4j=T=C!|K>NOIGJX4puu^oX|1WP$bM6QO|u{>kj{ zDQ&*donIM{6os*r|Ju7qqZtI)>@>pPS8m}N%A7K_Ff!O_J>A2v0hl1@elbsz#_pMx zs>?CluEAVUUd98u7`XBhDib9b2$45ZG`kSO`&`tF z>Ar}Jne2{}>7jLo(RNN#ab1E*|JmXRO)@=GGpXGV8I%FRn?bcw1K`;X;Q`9um5DMe zFc3!J#etaRC>Ke!V~)t81=84CgfFFQm=SgQofc&PCH7Z7jD83+07X5B(L`7nCh;Nd zr75-b3Lauotd)g-6^{e-ue}1z8EF1+rWPTKwUu07R+|8F^SUXz1dHEx89O321}Gl= zN%L2axNpv;2zX8;5Gks^Uld~~TxnBh8Rq`%QA(O1q_FuKG}=C5p5ZT~p{W7-wbKmS z&HeV|GV^a_hqaWYEGo1)>i6Glc|3g|HGQ z-Iyp$Mhjvk6Jty(4DaU4_9)|CD`|#6e(GduD$>JfCF6YOuAI>`<wFM;hYD~xCVn0xhvhxz#= z`{bii-<}IC!_3{Y?o*@gtpzU(qyc#8M>hPNXgCst0cm(sY~1JPZPvw_R`l-DVZZhB z?_UH)Ok9kik7Oh%*y|U!_q}z8h!i;F+@s(Z7~=y@4^l&G&DSQlvH?EHF1s zn&d~>JV*R9n4xd<4{mL`Ja0ii_b;@mcmILI-)9aqyOw#2%f}xn99rq|1Njku50SH- zI#g(2`Ofw9%J0;boD$?EfsL!_>t#b7Mf658FJzv;?$iFMI4Uq|iG%?VSp!s4%ZE(z zE?qs=aq@~AfK==vo64SM<3HW*{sf~LS^f$@J!}3))PZr;2q&}_Ww4`HOSXHh3*ZJ^EKK)f*AkjEnEQ+b42Tv6#mKOgMF8G^FBtOUF0Ue zX>GJg9XRpUo}`Q2lde;}(_(pvX7(7d&PQvtzY;%1Q<&?cGf}HrU$QN|+!5XdRTZ2p zjBFpiXh!*PF(0b7tg@+dKIB5@A=vI31qoh1e17K(w!BIldkDJB(b8r#AcyKkqAq+0 zQMmYZj5Mcn{p&Sz&ujxq=_NKYHJgh{0V3_9=nQ;0!H_1%CN=Br7W85BgWc;L0 znf=@4e+-vwzYqT1a&AgS;?>+euNn`N>%>!T96_V_Maun7ZvQa{ZX(H$YNSLPG(YLK z=wZBq$930Mj7#~k#+NpaC*QpV-zE_(Y86#~y5xwC-TjmJO;RSRdn|{fH(_1-BGuMV zDHy6L0-3+Uj_2;eTdC{ai3(e(ai&^6HQP2&w-^-IG{Qm+0EgrL%b4 ztA5qOEhMS1{&6Aqqv1J?EFj3j0wvzPTO z2!|2N`2+IByb-SZro#P)6#&G}0B`>AGvRcM^p#+D!>w1M%a?1p0zeDuSbQt>o_Rl>m0d=5Vrg^>#_;U){75{@sBt%u9qAW1>) z-JTfBx?})|R(aw8p@LITp~`{Sc1OaDol3PKj=%(DOV0Z1@kHZLop|m0Q6Ce!vPJc+ zIzs=V^U9x)9H)!^O5a2pTS)|n6eQIx%4exW%<==5liTovm4?GLGRfJ6h+hJ?rtX<2 zN*SesGJdP?m_pk1}&7VEc8uDciyEO5nJa_1?w&d~NIE#?h-@jb=sM28$7ys3?&Mu)qXxom!9bX`vc&5xeF-fvdZ7rFlVOt~#J630tqQdD47G!)s z@iFzhxXZ_fKYmJ{iB02I)MZq9nsJ8lsyq*b@x~Nso$;oDlx~)p^y8|W8`3-*c?Om{ zVg<&LQZe~fI#L_icAMbIV+7pOT;U>}bFulRI7-U-Rmkj|Y2_B)z}g=y@Oc zNv`Kq5`%Zox`rt)z~pM`-G2}r=H0vJzkXxji$+FE_pgI#pC>0L48CMAi=po@Trkyl z1g$XRJIZ{K(eEkSbwj^roVKZcW4tbU^tLT_lHY_RCypQlUGGOuhHq+79ANBz<6nHc18VY_5yXWjw0-5U=k`71utH|xxNpDk z(&uy~-ZA2l#Zt~f(8OU7C|eV+!|T+Us>cAWnvGh^6*UeuJL^*s$7#w%d&Vha%^DAr z2)7%47n|aDyaL5j38gj(a`za{wb4cxa;~?WJscDC{k~}K@&(M`m;=)N{N^nR0$=ng z|9kY_%BS{-8s<~`{hh;y-^cG_%C&y%raaX8`NgO8!k<;2i$gzmKRkT$d$;(*6QKQJ zIB@U7ku&M!;>m1lkXieOKcqVskyAd=G+iQC;`qWzT5AyCSq|b!yfAjV(yjhg^mBK; zSdJzFgB23TWx1^e!K5=h&MpQY5JojAc79;&dj?Kgw^DBtEL*wgkdw~znHbZv?Djmb zGe#v1{E~xvbvgXZpUK`;OffI1#8)@feMEUo*^)9~jOR=o77hG^1*Rp5L47;=rlfR)>a)T*QtV$TP`&~!p zUPZiFe+8140&tngOStxe<_lcFQ(^?hk!xZI&TMVPj}cn!(jW}mybMt6Aoy50p!ky|!&9?(2$l*{ zEUwjMv5WT8dFh;W1`Hh{!jL#B`fvcueWIEOqk5Me@yEU$7>k1TGBU|K6t7Wes@;QB zFCS%I2D9bI3A;HMF*ynDGxRrs14EcCMwi=OBJmV04a4C2?!2ghadrr!TQtpFxXChY zHI0e;*1P&UAj+#?4DM0Zm$$Emc+HGmTRfbO8>~Vs6Y4e{Kn<@(tX_qp8cxdgVU$;& ztmdTWBF^CAla}Of#J4zp_>q*>+~jmh#-erY$VKcGqmu%|^0Ssy zkYcZevqS}<*S-?KND@G%syyH(BB_{L7AjjY!m$!4*k0W%-() zwApWOFY=!VExbb8cO(muxza;lca&Avb8a_@_j)AB+!HSQ11JbTz4rc^V>?DC&J~}@ zV0$`t1{RKw0p%5g&JPSTMbet@RV1T0j^*Mctzv`J6#EYKq_26s4tT)j7$hi{1SaK>9-_yF`x9N}|SzC!__&Ojtc^yRkmF zlsln5CMi`6e zhzk=@@cZ1~lI#1C9KA~z&29q0ZL5c4+jCH3J{o<&eOaf|f{~L}2czt01TQz&@65P< zGNr(lD}LR#HY0Nx*TFpXk4vk?KQjoEz~%R~890%uBF5A>?122><}6R!YJC(C{JN4K zMkd`BinlIKjXx0EDhCZJa_)hc6^RhRrVN5Iwc>;&vQ7ueENh`J6J3X``Bpnj>yumT zd(G4RTV?Xv){VHsIL~=!4VpcV z`}8sH?X!L&%Up!#I?ET0(PqGD zv-3ht4>9C9*GS2|S;f6)7|>yuHUk`c79`{u&NY_4%_E2F+Gue|*QG+2=C{#((>K2V zxCM}JoK+>nV>Rsokaz+kKNrYgEV2d;xH*FuNZ>$KbvAC*6?i~2F+80^>BTrA0w6I%4xn5_r#ptf=tJq^T5b^%sv0IZr zq6#>a=zB(Psx2-*{!Ic4uago$#&>a9C*u=h$d+Ms4gk)~N;&c7twaYHXsG&zpE|Pi zO+peaArxsPSQ+mjY3r}Av5=6I0|X29CM7;fDz8Jb=E_wjCRMp67h{s^T_beHlS{Uf zTaR7aBvX<|$z638orx)@dsA>hDP6}YgZel7BvWPe5}s|FF%T^$CXhjRNT9v;;YS?W z@dE5j+MiQt3%xjsdfKwuaw~Tv#qhH-4G6x_x2m7`OE` z?bSB!O>dgxq1JxyN&3$K?cc8+LfJF+>$K!?sn3FSL!V~EI_k4bW?>3Lqt6g#KSYLUrZsIP>|7UsEf_G^qs*PC@EVVDQ5yXrk;_`1Jr3iD2g|2Qni=@R>dOK2oMiiL39R0omyZkTo9Xt zj15BO))y$A5Kg5%E-ca(OiDu1bLzh`MDwnq=#w)uU!;2m;*boaaiaAoMa6h{8>;Y- zf^4Zr^_@dH`y#>#B{MrEwyY&xA;pg$7k{A?kJ&@dMVAy{OK3O%>|2tAL--L`z(T;^ zxzc2OajzRv3JW>Jd#h3aa}(%zh*BXQv1w8Asts|LP*wz#ThEoQ6mqP(5nu0=#bJqG zhymY{U~hkxLxptm=!gIrrG}FYrj-L!a40tV3cWj7HJUzITC#^nk`W<5WW_C$6EVQIFK{JV_*oJVCWKJJdka$ll4YZ+Nkt419zlSG zk?D{HLW1bp-5@GKqFZJlZGAv!2K`ES1W*@GDZ3K~3GgjVqasvD*21)=U?GT$Z*T%t z5<1eXN^6GF5UNIxQyiUFtLAoF-&i7_@HTm35&pC$e=MXY85~M$c;N!Mw2S!otJSEdPCU2y?Gz%C z*rL(iri^XdOs>rvZoR+--U}tscuDG1I19d2iO^~lAcn=YC}`WB^=-j-A&Sw!??QHY z68zS+uD<%Fv%c_<49F3ys!<9ooX{DLheVIT%jyyL4Uh}&$f+fv;^iVok8U4a2jykw z)lP&80H9MK>qQ0UbV_1K<; zM1)f{#j-4h=uL=4_yL12EFtE^t}tK5{i`kGI9pX(*Ntz3!ny6#{^l@%^zUbva^Y}^ z#o)WSo(K~NBT#vpy)+Hi7M;-+E#z85kX;x-ob?=SAdH?XL2JsQwPr?}NexF>w6{qM z;M-l{_tfiA<%yYThvz4f`1!hU%wPc(s3T$)+W`Lz+l; ztG3fCJz;prdh+mQXb+T^SF&j&f}krmfKXrr?vu-{tk7Bsa^onB?X_WGfTLr#OmU{6 z&#lL2}1WvBuD|U%(-M<1d|s;iK420VGeitrQtgS z;xBM10$E`RwPSkeWewqVhn`KF=lF#9Js|Xr+A8<9Vwe~0nZa&gAiKmiYjeJ`lCS_! zTleNGK>X+k^2{ErvXWFRB8fJ6H!rRpofL6)W~U*Seij#8s3>~(hOuw4kr(xy3}8)o>9fbm$Ce+AkZ)~xp&1vt!&tz+ z?^7t6x(vWlc56OnS+nw0vdM)wa(+^V{AL{eST(HWuHhl@4V(+eax{O0eV2!PPH9HO= zepgX4odf7zyP&kjHiS|cQc`-(0wuwzHXnswt_>W0R37~peS7^x+gMb$g++^bUE%FnbF2u$x|NbZ7eJxzfq3c zU=LXTg-K<_K*J6o(ZsFrgRL+DXaqCxKmd9XvrS0Pi%;Kl`k}4P_uGEPH3dT` zs8FY#z=ryX4J8g0{~nSg0DX3M`yy#;LI5-sxi^-+cX4TNntA`t!S?IO{TIfZhFW(< z+q4!pnq#a#thu=KPu98Ahsg;kwh$org-wHuLTAEOapGx4hdfvAT<8ZpLtq^ z_yk!_w_*it4}}#Dp)6m_?G8~fhk`??G79T*7cHb&6ct~f6s~_=(LNMR|H|^{YdrN` zwp1@OjraVAuV?MQ<^j}L6X2an0`fYG6bT+g7>gso2<(e%vARj6z}2B|yf4?7N$}u| zqgc|Bx+83ndK3hF_weP0w}W;}%z8=Y`R0agmZEP9eqY2<391KRFyVm|AWBa}W z5AtOMQ`a3n2=kQz_o+Xk$}a_(z#u2S$4M6vsh^L1Cy>ON813p$@s!NnnEjZ~v>(Sme-RHq|NWi1-UboM5U4P1v=oaKo1WwG3R+}L z^hf@ zoT4tLGhP*4@d?j+S^c&*mB8eIXNrWibaP;I(SJ=lYJF|YSQHz`h#OgdT%ZieVf?AM zQCT9DFm}(P@tvL(kNC^q?hEboT`!}2xO&^B!=%2E@Yul*pIv|sY{zM0f zVO44eS&O~wnu^VqB}9cJumccql4<^0n))VEI31>zhI=qdKc~^ zD4F_tQX4s!e-QgBzD#DvpcuP4`TJle=}%yX-WwEJGLdBLIVClY+-`34#tMz1eM z1>M`&EDNVQ1q1^%4qb?BFBc?Y?`A?(QvOvSn&RQ;oWI^AAsgM=pLhiKV#}p7J7aM1)PI`o$TN zbh_~6FFY#Z6;O{>0VYUv4m*3aZTAK0oxLk7HD_?WPHeaX;jQ@OroN$eH@8@DIAvH% zG@RCCP`9b;o>MxYJJloj_xI;KwkGA|;jtDO8OdVs%IPk^Yh5n=AExs;j`{PgjAutV z7Jkq6{5R(G`khl1p8jrn_WAbh!jkK^z_*VYBmQ{YLvdiI&xIi`9t83EW&TsFSIb*}>*R(|Ltv8MjitnF16|D(g8@v^5 z|7yyz1pMoz?L`bl;^cXrPV;h!Er@Q%F=P8@4F?yx#+toWrc0Qx$7){{TA|5-@)$| z?>K^k{(QOeHMxomXJqOeW&pi-bG^KM)8q5S8njiS@iOAcr3n@|GwA~i_zM3!eAz;> z;d(w>kC+524h}h<615ir`y}E)+x13Y>T+7{74BJY{)%FG>Cz3H4C!doDJaqN6WSO{ zh5Of&76yLhDDbGR2_tEG3h%MZcBv)?f3wii*5cS8q@2H&<5OL6-)vz{R>doxxro4E ziKWXoSo<@|)W}h+{`xaF1OqCkUoI+^YPS(mkfOkVc8qVyWl?@s%LRe>^A{pmS*7YA zYJhKc$zGKN>&mN{cKi0ra62jUfQoBWSDd!M2<)U@$C5cyxikuJx7qu6=FZ1>9^ht1 zdeW@tM32H1;aS%-72Y|K$DOf1+d@K7rs((iQ<_aTV|_cGBQ00K_wc%m$?Qa3 zERord2x7FS0LPbHH1rrZ|8*yw?)xjQJ}Slhvy5k!TlVDCgD=D4oL%*W7c``AaUQY| znz$hUOg}S+qpBXTbqaa^Iz{M8)r&g_dFBiTvX{xDmzk^5pw&jvN$e$i$u|JT*XV?Q zGp>@C;Y=bM>7{@s?)~>wRXwL0k0ftf<2>|UW_P%D31_1T8mGg2B={;wLwfIPGD zDZZ8i-P^3QGtK8=^Y*ldO}=t)Ij7Lrll`JGzgoF+^- zKQ&ugp6h-F^Hc7Mj=ur+H%Rohhgk%L)7L-h%3XzF3uTKM<=m+1nbg1)`#i5M|93Kb z+fYlR8*(j+XN^o3oKn}aynFL7R)OPu{rfE{O@G;?gKtRK95(dyWTi9(>YISK3_AN# zvs=T)(Kds-cLc>VqwR!$n6GvRJvqCt;K%YO6~b6R7N)sfi%P~rPj#_!&F62HG?*T6 zj`njruZ#XWMxBv2)*CH`!Ra;Kmw=s0G3K_5h#&U)i4&kR4Q*}qe|imJH~Ey^ppev$ z*Ro6=hHsF|Qr}HqNQ4%$G6J@lJfVo4Tm{w>iR9uIdl~YdC57hW6bPe$Pz+r;46@aN zLh}bcbXdG%3`XOZ38-5}4*=~h?JoA9<%m)8LnZ;BoVn3N)X z@YK@(6xmTxGvDTc{g`!gmqH6t&)ma-2}De6o~$5z>fVrh=FfI{*IZ9;1Ap3h7SagY)NtYDy`e2{N>hT?HO5Dx30cX5TSF$k-vC7 z={n$IHOu~|+~wAhI-tvpUF-M|buxT)=#3K1MMiY_!93iqsVDxXh|4|F7blPjar+-S z#dUUYRwmQR`>V+KMZSxM^0v>>-*0GRV};A}vR0QGGk>vtY8>U`7b@4KM1>RVM*Y`J zVw6Wiw8UMM4c^IqgR}oVug~Qe=1Tph?sDpkNSjX^vk=TpxT^08XNERQ5k-50vHmH5OI|K0h*r8_sUGFq|nEb85$KYRA5+lD2$ow_rVnQK)B-LgY+$vQH zy1Q7bGWz`O;CAT0i?2c!pA03OH0~7|gpr%`*_sW9%2myFOvH zQjJFlc>4U=d;}Q0AG+1=^YNR4$We~#{HEqn_-6Tud#1o%?-`@T;qUjY{*2qw;#lSu zkVi@nl8L(Bu@Ont7kG$P2tNzNBdc;6AxA9A;G4%QHNp=Q!oVqOE2qdONo4{jYH+^RJYJu#R>cEyj;@(9e6+zaKVcbm76ty@?b z3EuXn)xu#fX*8ALk$?}wgkqrkDHYxU zr%s$v%IWI_KMxc6V5*?+*jQ&JeL{Qm^^Fp7*4Ql~Vuxa4L3i|;AX z@jbfU?EfFWXZT-y&-ASO&GWZh#e9M#0{$n#hnBx4qjFvGv@MS2tFU)-2W1M39dIE208yPe2>oV<)=wh6-fQx z!9BX(j4nC*UxqWAfQSEgz1e^^Wm=c=N|!>>nSFM(leeZ#xusVzyZHXYhW`uPD;`bD z%=j<3*HiUBz`dsIg{Lj+l~Gqfu+82EpH zd;im9R+<&f{7@=Pw2Th!C0=W6YHn$*PkAItY@>TX|7$WU?Mm+$8trKv8}IKRKb@I< z{(>@B9DTa7>g8hg_}k{ms_CWGwU6r?In?%r&5f1)_nk4H4!?do8rn{l+5P@BEOpL2w$B==+rjvCJFX-g|>7ly`Dubb zD`D5IB6VwHCSTU$`D=??wbKRXV%GT4-^7h7^d1O^6@9C|UUMz`Ft)E_!?fW})KDUq z=LbET(`gqj>2^0Qb-2E2u$k^|e%o{6OZR|Y>uGt{AN+Oq-8D7SJ88DV@%N9IftdfA z%u*MlAY&P#f|0TzN)A)G3NG(w9tXJ0#hfnM&22z;a4ZJWop^Oe~Pa)p*72mBSOFK<`G-7(g*v0v@Sfk@^UD) z|M=_ne%$pJi31^YlbM6na6;^#D+d?npS*Z-vF+&Z24cnggu|681sqBU$)g15?-E%m zk{_ab^pUG^^zu~UaQ5YPyLcgiW4qAPV@mdklJA4oLd0s??US*UKh}ceDwP~k)$M~E zg3gNQk z9@uyvIu*FK1l0ICxwktP`Nn6DL}I!NQ4!yt)l2yJ{Bo8MU*Iqyi(uDDE)r}rL~WpW z+gDdaV~-RAPh#hFDj)nCay0<8ZTC#Xef>)!k0<|bB2O5Nt_Op=R$k#xD)2)Hs-I!o zt#*Ldy$dUiY(O%op4UM%)yN-$1wGGWWBB0MCdYW~03)@R<(U#tg#zzO|*3Wic zc)UvZ7=Z*u{7%DhBEPaGfC88eag$Je>A+@s9V+4U?hq^PO_;tX^4+kmp~s-7{xA2{ zhAUd?8z;pQExjLWTA9@MOUjvles~b};qU5xjKJ|)EZ>Rxu1AMJ$Xd7B&F^ikOa^*a?|^bN9^$R%Kz z1+PPo8%l!>r;)GC&R)Q$T?Ppe0PCgO`SFWQaw>1lS^VzbH7d~Y0{Ie7T^dFua0B2< zAo`VFR2P7aV#nA;i}33JFK%bvdHxhEwyUC_H|ymyJ8ZQ*@aUWosYSRFfJqAd=v(TF z1xO634Qi-6&sKNW$;vo~B)jm+aKFl9R8YW`h8r4IHK*e`%}% z#);AFCip~VeQh+4w>M&$-c9o07-doi1S${M=?Md9A`=KW@3{=Yfku+H3Gt->?A4I^ z804n{!=`V7#(7WB19RQeG+Mmuz^bzs&AjUX2R`!wl+zw+O7EWoV71Z1y?$6@^gSxML9g_6*+x5w_?TK!mt~z-klF$4LCFmuibtng^gP z*fny{{562pW?PcGSKwbMg#XXH0w5`raJ6ojx6eb6V?~>|J)#SLj!DqyBr)B2&Ka$s zc{eb1VOo1{ui%vS>R(lzaY+D#B;s7IoxD(=6<1e|{J;Q!^tA`o=G)vBJZ(VXs_4<% zvFS#SS6Dpzmu^t87nNq?dA@yqC8zR~U#mJs(-6<9*sIHYfQQ`Si$-|#F66n$-TgWb znTcTy5b>VzaN-*oNfl~7RYHMEut#+^YXI#(Jdxs9zWzBVuIiDma`ctp=V=6Wzw*Y9 z>DeIy|I*Y14k$akW}Q&))8-rHsRV!`vUhLhEAAPjI>}&!Q z6d%5dx_pU`M$^>8;K-~QZz2-@*|2{Zm|v%b=>ji8MO_6tZ<0bg3Qs(^^Huv6UmSF` zy{Lnn2X#t2E4Y@DB~Qo9_Z4q-gjuj`>Gob6t-1H)JB;n^1G%=1AWZnjXoSWOnIMwC z2FzoYOXS6t&o`ln6I=v9v$!c_Nf&;(%_9pFOYmm_)Y;#&~Yu#KhPVVxqlba)`RcdC7b8SFGQ2dB+p2XJDw8mu(z^ z7~UN5>6*uvY%|bvuYUq#>m^gw%ozjCQ-kUCSzoL&>h2=2u#$w(AGyJ4c-!lD?hOF< z4JwmP{!o+LK#(#LhpRR`O5OHfW|-DxkI{m}ar*a=5$W`F89BnkIcZtX{xsa-CgpC8 zqXVzFHxz({a>8)E&Juvbb;A8udG;Q8cBE}P-gx``c;t@-2Y}{qR4cyX$`VxocN2!J z7I3cj#w(d*iAzBuhlRHF&35Zj|88cD&ZSo#r;i5TY2*%;_~D$WmXbzrapp{kTX2qw zcNL;JE5+Nanz@uAEQbTZ{;FOxXI(GkzKu>-(BvH=y_7(9Ts6HcAR>) zac)R~+O#V!o+{tHlH8c_NoWOXrVA+ja3jqps?fe3x#r557s4r;6z>~VsJE6E@H5B{ zmF-i=R}yzuz1w=RF27UX&uPrl=R1^P%a^(tir|9rAiV#ab>lo2b$PrX1pxD_`3sr& zCx@ggVhd|&h0bo!Pl$2nj^gZX~X9RqHkKj&}ZJxd-1aIA5YX`^Y#0%M!Y{?n{FkzF(8~BKv9{Vn?l65LELnz(Rx7yLK zVzsb39b1t|C=JwxyArB>+bZlWYaEl|Y{^I~;TjhMxB|7h_lQd&sWO3_zAaU`!}Bm> zG5Obz2rxM!l>%M55_y;qIS#j6x}5g<*m*a|6^gRFMU_SPdi{74`e5?zO}ypQ&q&AG zBpA7L<#DM3mhT~{+Lc)PNE%{E%M{mbc!z>iHy}BtxSSgD0xL@2O_nzER>&5{iS@;f z71Rb=)+!fPmQ~wnyCQS9QQ79G(-V*83{Y|S=ta(y6REn)2L%=M$inmJ2AACm>f=1y zzWCGbjb3dP4!&HgQ=EeC*<^#J@jm?Ua-7OeS>Nk~I^ab01 z`H?{aw`S|uR9n!m&XmQ@GsIS`PBqS>t%0Y@RI|(WZQIRjspl9T&Pd)PiY0O2l0N+K z2;)K3ceMt1@L4m&-<>YQ_oL|*px+I;nr9OZd573<_IOg7lM|>!-H`Fnh70ELU{<^uGmj#`yEh?Om}^MpR;D)mz}l2=ysBzD1LP41c@{a*)kQHj23-JKx%M|Nt6aoY&JqZl?VVZ*m z1lBiJ{9$20MC0J&;@+3n2D=#;8W@J=i+dMShFX%E4ik~zCbDB1Y!#esa;I`YSbMdA z5E;0`T6|_pLg?@9P&mrcCGbIBasByChxc2>OnsTMCWv$NA;ouu;ijX>=0NW$;6^;s znTB9MiUd>!p#u9G`g>bHp$$#|;4R;2iC<`$m65k!M&`ms62tnUrbo{552-VbYLpC3 z2WP)YKwe(Dt58JN`2l6d-!I#`>kW5d3(7Gefb|Pqo))@}%|jEm`t_G`;J(&KnuT9~ zutlMb^-h1*i9jn z|8{gP%vUvh!afWD6QSvb6D^pDn3>Vk{{CZ_L-w!!bgE0hd?ewV=dYt|3|FBE9%`3h zb5p{zMy=pM;RF3YUN7^eNCjgL>b!kPk_j}o(oKbXWbcDb};Ghvbu4$gJE{YI={d$ll-%|uo1Zcr$3hY8c}@b zj^WguZRIOOHEyjZ;KZuF8{dw!O2^wXzh z$^D@SODjyh-DUhhbRROu%9&ryKDo#bL3>HvjL-w7%A|ohuKHhwHbj_1a%pB#(F zI*1WvjisPZDA7+)12qdRx?bVK&ri zPQ2mGNKvKCIYx1e>kA6VL^4h~__fY+i%SCC`a|mm@7L}3H|&@<<>fb1r#mfLgkzp9 zxelQ&&^CSFL!M%`e4k5rwQM>TY}y@}3r(9%UPIkG*$fca4v)r%v}{Q+C3)~gKaY;u zYLa-Mg^H5j8pZC!rLQHD0TtqOya}Levi6X;gE8sMAp@%99e}D5=PqHS?pc6z859Enwyc5N7#GMx|4<9$u-_S3FJ#XP`UM) z6EgT}I+NZB^h#QHQ!|&i->3uPdxKkKMp2(jXI(nT@jYPoMOu&$Peo8$-T-5@w9EQ6 zo%2!Z@%N#0>XA^AP4So>dR&It*1|#mV=|*c%J2ZXoTdxxf2Gn`Y`-91(5&H*unbu& zS#~twI`GIRgQ!2*F8i&89Jsz zh%D8CvEX)xwVvy9y^w8o{y!+Y&!DE`Z}Icr^n@CU(tAgQ(2Ibf7ZF463W#(R1f)ag zp@-gk@1ZxrPz4c1K&6SONVB1$0&3j+?(W^a|DB!P*_k}f0 zb*3L6vb}KH{FT`qR<1+YCRv_o!Ag4A?d%viR@{7jao;1!_U14EqVYlk2 z)!MPoET4I=UpJ)$YB0%ADlYeSY*onc-Pu$P+9zj3gxuL2kEDw)`)*Ayh?j~|o0hGL zf6Ab#{L}VXK_UyEdOY%ZaYAOzbPmva^m7UWZfpWl!5Lfq;nUO=_Y znN2cO((juX3FoB}3E~1+Y*^fdmlxgRk?b3(bVa1L&P+cT8EW0s9M7=XZPk5ld?;v7 z^M_Kb025#EX){+%VKthcl_pU9aSnQreD>$;=EuzIuXG^d+)BQnZue2fA&TCyBQlOd z(=zn<0OGNHF0SSmP9i9$!*eNtcYJ&<{P=^m-ASbOL+ycL4WoPe*?~gJeg?#xRBX{ai~=zOO38na&sq-0qQkHdfAl;`DZ|QX|H24W`Xs#}DAQ{p5k`%~vUm z&dL!){%wi0_wtL5(Lat>-RX?12^tKaC$Gg5MUc+d8E!Y(FalTu6al&)php*ZEIUpU zDJ=Vvz*j8HswLDh6DK^_*Yq$gp=ppyOSL4R#58QXNeGZpXw0yv(t3YGpfmkks+0wt za~$g+RyGkNR%Uez@oVl|0*GH%mXFocbFQBC96#QH#ggf50TYrkcp59EkDGJChrbAB zQ|8>AWOJgmpA}FCU996s`~d83SHE{Y$*5)Ex$9ibO*76$NX9}ZxfHSfNj^fm)mmJU zZp5pNl@(fCv_^B)ke1aZ8c8pP{bvYf)sOysN;07|Ej}1a*-5$v%Ds#hCepeP5PrY< zYNL|Wm37jzq==7_afPcP%iWrq0$>Rf@5H21jCTsQqsP6v*xmbKYUrRM7(4QMNR?Nh z-)-Ram|4+?2RZ16SCuo-+S+!4Rak$vsz9@?u;wpTiou1(V+LIpW8PM*$|r4?q6}^0 zXXd*@#~g3CV6SsmOq3D8bC!P`H^_e8yE!+fK4=oiKv`?6%AJF&PaqbQ|2lr-!mu&t zDPc$2j-QktkJkj&<3BdAD)Y)&Rpis*v7P>@PAC}{uDih68WJD_TTI~ob@0^2xD9vz3(x=hpsK$ZU^D3A1riH@R7)N|(ZeK4_1=JKy_jGhK2qh6pBNy=mw#+?brf-QIy6}n z=HPuAfnlv-I`}#9gC`(mewk`UJgcM$+P-8j@Md#0DgAwYV#)=#8nz#KQ!=Tt!KQBJ z0#*39kJPh2ZT{t~6=*=z*?{JqOCn2)P6mVH9?C%rJ2E2_cW79xc3P9b*JWWKehj8D zXBB2;N2Nx+Vq!~JF)r(!6Qw7$D0&%HC8z)J@~7?{&e{YXR{S;;faK0}6key~&Y7 z8RL>Ya|N5}>!MsxrRcWFGRfmbRzJgCl$M zT67KQ{E#h6Zuv)1W~qy;ql@u~~ulag9p7xUSCOa^j=oM&?gVW@&v( zNxR4O;!zU1LdFo@MO?~~7FTh<4z1<+oO5RWU}+Dt>1LH$b^qcdRK<3_XVo71mQ$8p z_waO|ZuP~plq=|gkcBu3r)6pQ-=cX6%_^Ca@2(D!a-of|ous+fCGX>Vld;rxMy`OA z-7e*N?!wvxjZ$}U@Y?gHaGQah3u(6?tz$nec%uq_RNjG*AGG9IYi#wfnPWj0W-Kah z9Oa@P&8A+etmgCBf16XW*&2{+n}NVO56x!)ft9qc_O)LQEwy(9cc#7CH&-5^9=i>B z@Ou*(%69+Vt0!Pp`Eux|p-hCim2HX!TY*Hg_C#!+Zmou)wDERZ=y&6DlH?Gab4k@1e55`1l%w9o-E8REu=F z>df{$eRu4w>Rh zYXuUf8ph9RZaYvmm_)oxe7yZKOCsv`EBZ&yseMU&!rF34$dh@0VL8wGcijPefP9hD zJdU<+i}rQXSna4qG9|B(-73T+-uTn)+`NWe(-ZSAqZUE5j_-IHPbM#KeR01u(j#?e zX#NJn_oDg8U4>t5c<;>bWgjB<)EmPZt)g|`-?h2F4!aZB{DGlx_-84vIH9(GUh`n#3Wi&dq|W;gCjidiIYDcH zH2|yJ3DZX7=_qd0n_j((_{CP<7^tV#u5t|Yp-micV?T2L7Cvdkr-LrXAf67W0u*r3 zAh#;@&(y1ba&=>%>|asUHjIC9gV(=9_qF$|7GanbUch!++i3V20qT4C*d7~y0L9|v z?pJ}{D@T2f%}Qc}KA?M?6$2vv18@59pZys~`Y-_CUHqYM#o+9Cm@^(Exea5-Ql-EM z6hA)E0LZYAnqvcKu;Cao-)VBhH@29gmw+4*j&K&9_yzW?g30m6-NHaPaZ>WwSlRtJ zg+&$gcASi1EH%HwoW!X&#j7^OPix1js3c%)6Ql_V(|6}NNVSUMA2HRjNuO$O*PcG!XY*84zNLd2a)6FN!Q_N(tpp>meYDRnn;W9*L0F-;_4GpVk+O z81PIR8cZAWOdmp~liAb94bvWrr%xc$9LNjrcV~7FCsJM*)!%0GZsQKUhb#Q z45mHbPk&*UJ~^8{PssdOl(|7j+nP;#ppv!6o)t>G_!13t7^FbSlrV%iJSh~~j)1d} zVA-}vCp;)IIYs0MU|ft%Ai^aHa0URlz#mDAhjX$=o+iVE2~;2$o-#ng=#|6B0TN5e zkvs(?nscPXaxh*wazi;%b2$oYIm*qsGDEqtYq|2Lxrzt5>PC4wUU}Hl9EFtJD;#;M zc6o+jdDLXjLL%SlAkQo;A3FyQA!fbAM3IuisDG{~gD|9cL}YSGw_Nz6hrn1!94`sD z{|gMoN5aSv^os?@h43Ne7&;l^p0K@~Vr9K?)=(auFVqv6WkfU9#v zJoN%95H_kDx-d}KY!mH?4wC@@IdoXIL6{gtJj{*1ByKIl%dQB9iU1bDH_&k6K~WD! zL?Q{efhWcnXT|OTm`No%=j^2I!lXqlG21fmBEWzRZA&Rg;NXXnij?o-U5COuQ2aL+ zQ)fd87K=mHB`_#l!Dw^%TO&5#+!%?Ivh6wIk_3j9L=Y}6UmD{7l~VcZpdzUe2wu$p zt;(@pTnQFuIq9FX>~is7&-@FA4|LTEEV)V^{uU=Vl6tZ~KQBfIMB09@}Z z{7WtP#$ruSSLqdRdRt-?#k57t=&;TfS77ckn${O# z4p>yO9ZHs_0U{X!B|#tov%)$DKOD|&Un2-Q18cwn&{62v>FTx@vL2HOM+HKg>ApyX*B$C=5 zdPj`W6lY47KJcy>vM0Qd3{N|39gqx1AmK11V80F~)5H!MBXiW6PwYajLV!!TAa82T z=ud$KVH@reA;DyXWl#l0m2H``$$?yrm<8GL!%5-L4Et8@;g&o@l#wKyx(EI?nbg`6 zHiCku4#JqxaO4Keg^a)M--Q??O8U1-SG7kR7Cm_c3-a#HQt7$q96=NZ1<}wv@$Q!V z-4V&zcHgM+Mpanwqas>V%GfXrgl8cdqmDQ`X|+S3ScG_&yb+m67z}u9BL=(StPU;O zoHe2j^iUE(aw7^u8{JdbkF-S@t%p%Up-DqgBX-3fBnv*If(C~OLKoWkB9NBG$bSQb zjG_)lJV+UwBF!Ihcb@N^P16mD0mpD8(KbRE+?UMXXYso#h>Z&%GBr`M0csEl{D%KI zWB%jOLO~2v9fj?cL3(?Y4xlt4bh}@1(|T6bhZ`MCl)2Z6hL zlJ|%R#VU}8ckN{w;2s&?AV8{qIb4nHNgWJ*bYa4HJ&N)+WF)_8N+`WP;t`Cw>VC=` z3HlwD;+Uy5|Eh_C*#K-1Mb+yj07y3l;=gEV8GY2-qN4`xgAk ze#o-jc9pi*{C*ElOT8@#Ka@6MHb18DXDC2SUb=@E zTsEgn(nm^&QG1-@B|W8Wk7hvle*KbCT3~eQ5EiLc+D0>wW{-Tym9p;BUBVp;i)@qS z?(3o{er7+|%aO7>JX+^i7uiyOAUQV7DVO$m_7JF6;IA&+d=TDU6!dK2<a=;~(C z>WXc82G3fWUuJfD<_F||w6C1<%-0k`W?9r)(be@)mDS4jwI7D*FKnNQXXGo*4PlYDh!TzGSFb+3dQHFe=Hk}7t6T3iLSQ6F6-1*zQgsanJVih>YsIF)YA6!q zli$|K&DSRyY+s#_Y9xpc{+=(U(fAd@-!-F8h3yNB>!fO zgi_K$dSirv2>|$j`mXaP$mPvxyO^*h2k-U&D#~$hf$g`L4s}W9cg1Bw`Q*3!*AWT% zP>$Pg*{-uuL-Mo0cge(NN`y9`H-<3arQy1ck|LsVwE&Gw2qO_@=)42?KMkb;j56O= zuk3t6aa&MimB-!(_3U_byiqkpne+1BBVMrWcz<;(G%%nqw;FOT7NJlfC#F5e+J$I* zgK&3;%Vi_Vj!-dUf(fKOA+2{({4A{wC`}i6^=-thvyO0o#5oWmf&ZW!3rl+_1YSCb z^yi}1+zQKxygvd|=d_H7kkr~o@$6PU+mnf9kpw<;^8#LKa|!r^lFu3n*FVZiA1GMB z(h$Ot#QlY@dzSC^6_)o{c@HZdjo!YFoRmgjYWqlu^D9dw>$w|0*t3L_NvK^0;Of6)=@{zQehI@uY_6fqpMT@~{!R8D z;tJze<<9>U>FSk`_@X9;5O@@ZPc#m4$>MVD5oe1ut2zmu`v88M1gDnPEVtod6!OXV zA?IkUWa6=B_-5SNf_ znby{k(>2g8lv;NGLPRw*+oLtjCJ_V#kHZw?mE;wa6cpDLAjy&M!W#h!rnUVXfC}#i z0>=T5&>ueng2Fzj*oCP@d|2<2O{C$;l#logNkFH$JBr^)xJ$ss!$qHRp;xt-!|91RI&u8Wi6CSq7~V zE11(3{4E}o=IS_G-zLAV0&g~Ddp{RQDILG0H+CI(PM*yU*FB<@?}x5j;ddGAJyt)nT`&B zfB(GE;q{nf#N98?tqhf5t7k~CzWIO|K0ao^r2jnM zhxDXMFUER(E<*yhXP$4g?0#Crk&!qp&p6P?t(KyvkEG2~$3B!yzW)`^VcGmFnV!=y zFfBTqKRc06@}rAjs>sfaJ}9uwT!@pw%!+4o(a{?ZN(0x)`F40zM5R_AG=?vFd3 zA34{MM>K3pA_y58Vrmjon~E~hNcGLTCBFSs$;^L7Vz2BDuUv)My`=&JXaheJ-sysb zh*nmLIz~s6(-UhL93gA#5cw(;79_8W z!L0CzFJYHcu^Nyr#6P8YxML}NoDNQg$5U#Y8ry%a`wm?7pD>!A0IxSJ0HASbB#%-l z?urv~Ibx6g-a2@7bUXqx|3&fTeaN(-Ra5uvXCeJ<;4-wXZv-9 zw}*GCU+0`1v<-YNT=Kr)|FE{>60W0VX$MjmM)gpbB;jbyWwzZsJJPqbu%o4$nTK4z0sxq9^4M_GXvrJ@y#J$Dr zj5b$c4kJTtbMqYHV_{JXB=%Q5efGsR;Y041b9g^9A(oR^*rG1TszxHeRZ925O(TMx z+SNRx1d$6)c1Wk6IfZJ_20oDL=vE?g;cfYy@9u=h?rPtorv6mQR&uD`dP~o}^0+}M zt(kNfeDO~5hUkQ$>eYY}3QJ*(lt{U0*pr#@%*0RW9^A{#N*ufv6@lHm>s9y+KbPTbao`T`qZ?z9hsnDOCp|a%QPBJ^B9DM zCs%q4H~DjTn|XA>^>{lWd;oy__A>T3irmmH?+iXXO1i9KbzYLJbB+dW$%V$Zp*<&g z;6?aTkslo{8SWEX;mN9HR!kSD$ME3j6=t+EgQz!z7anT4!^2NwhSXxML*pOnpYI+} zCnEEyVuN5KleJ15y%pv))*YVSQ4aYE#-Sgu=c1CH4JG|Pp z=mdlSdUaZR>fH=R-5eeUTm0taTNjC+CKUj6_6@=Fw*nXt67KJ`!SSu9K>*9ORTZx^ z1p+A)z2dNTC_dsbBltyh3Y8je#LW$)9^cyFst&y&%D_7K9NcL(^*f0t{TE0b_l4_l zaVvlL_OP`TOE9gWsUC7w+ygD?9q5nX!i1W+NI`i7lwCFZyT+h5Z}MI(d)=3RG99r~ zp{5h!lHnHGx47<~eEH8fdanbLyU=DPb!nE(dJwHx0Q0`K1b#7t6|iLYxrJSu7t@y; zqg>;T6E#yOUAfLYuU_U>Fz{!CgHdKK6+a#b!mbF{{bDdn>X~9b9XW6j){oY+2D`aMqIcw273vkX`9y=GqU&HQ5(zl&q0M6SOF1|DGs?oU zXKZVLXl27*SUr_}^}*`-@cQV(AHQ8*1qrf!E9;2TYh}qgtnK;a`(@pMX-g@*%gPx& z^V#TI==Yt_fil3v-y`m-GW2d|!>iorOaJtll7HlP0-w`Hf17Wo96fJdVd@OJU*TjL zcb_M{()RW9O55;`8(&|@m-j1Fb?)bD=t}s?!XXCRkm46wz#4|K+!rXI6(>ryC+1k@iep+lk>Yh ztBO4j%O21yeQxL3z|@p46p8~=HH6o2JYz%1*mD#1JcmIsgD9KO9s}g06=A@i;B5^) z7W7HNB*29LfyK}h4?I9l>BcgiJ96Xjhts}rW?PMjmxrOW)S_V|R$6#T{a<_sSG{)H6?;A#r@0r|C%A6=l6qoljo4HAt zy5l&N{sEp9xeIUoCJ>C5+ruLQu-+lg-gTjBx%yEcS0tyc|@duP@BiXKG82tpD~ zWyIZ9uA)a0eVF`{loRs;5q7Jynrru%aQeut0$*A)#_C14U)D&dGvuf+?_lOOZEU)_ zswZtg!F$ov2jd0hJ$D>eqV-+kwQbXGdxfiui{b5%nTD6ahIqesg}ymO@x>O>O>uF} zml;-zP6w{pa}?7m7V8WYujj^oQ31oOu7xbdmU;Qh{nF$jU_zYZ3}JjCKzmu2N_m!?28qO4p2E*>n&E1+fi1t!e zEmXZ$d>RviRpx}II2B)dD^Wb(Ts&eV*3jg=xK>VERPpF$*dV*cu%Vu8XvG$)^7pdS zkDZF33A=X^njJ4)AIVqkuHEyR%zV0&sjydR-y1o!ll7-aBd<5?-)!j#2j;%PRY7tE z;(b+Kv+j$=sAE))d`c;YcPtiBQ<+lo+^byTEZ}UdSc*n$`?zNOUb)}5=nE~WdC9ez z4YgTDWz@1l3=bAF#y&%F5m9yGsZ|!rwSE&-n+LV~V)drsrrN`zS82o$=&I(y62y-Z zyON0ZW+r}>2HV4H=kntMn4NCf2jjvi_!h5V7#X}GK?_9-U-mTDA{6OzHqIWK1BH!6 za){@P|azUbrou+=Lpg{jCU}W12;0r?SY-kQl z9M0*SbI-r42;%(e%XtKp>*YnLU~fEZUU+y{H!Od-p)rWMz=Q^s=lcXqCzqz0Y#f-P zbS#ssZmSB}Q{NY&4%=YPcamqC4&_r~#8lrK#Y*k9RkOFJ*aA`Egk+Iar$?8YXIj3v zrQfpR=*B`qx8ZDNFc8tXOC`;&xqZW;5@)HZ=%%CJo3@==btajnE=r4X?+nGlK+fqO zpLhB$cRY2&9#}zmlG3{=Xh`T0oOAn}GTxrk2Qu4K^~9~J;9Z8u&jP7N_XE%FZzb*_ zKsWUkznVMb$DsHnpdp~UZQs)6ny9UL1JkwhG;s}REB~y(-Oe-d>MS?a-|T(TX;tyo zFue#`gLwuzccR@$bpiz3yk7Ao!Jdu7_R6?dkA4FR@X&pp!(r65rcfhbq{?GdgGsH* zO3n77&F*mz{0Ml&&kWq%Fr|~YiMpBZ?wqH7YVC^$uE#=Bee!6k(uc#VdSABMq8MxT z2m9UapPmPeC}BUeXjz^$82oH{4F_(bGPLs(iNoUi_lArmf{TWS)r)C5TZi?nV!j5& z2zxft7mA9BSWu|Lx89BB&0h*J-ke|zH#RhW)&ZlRTKA!+2x(K>chEa`!N8$Kw7!)o zO9ZBwb_wesw*Eo%&BmzKrN)qlqrg%9C!vyCq7APej@=Jy*piQf1eaic@%1*3#il;E z!Cot1-)Nm$0WC9&nR@VLtroN?Iy6jHI2?n;x1^E_1D8PW9qO4Li_RL2pB#^Ry-h;! z!^{@P6a2?kf~5E!*F#LOn`#bmdm-BVP?ow7m9~4rZ5WCJQj}ceF9?X^Y3xhJ{JO^+ zg)8B-q-gIhg%Hg!F)LV&kT%Grc zNiE2BlSd`KbB!PKlkboE#Et5QgW(wbQ_InDlK_2t=c?@ZhL!_?LUZ5o^69M&>wvJ{_(>= z(NfoO{%L3T-{z(_-5#?kOi+M97bPa5D*!@HX-LYx$DsuGr9ZO}nsJwK7d~$f#k~ixQc{R~cXNdlAq z1+wylh|5lLUf8DArV^V0@q(DmfN_pHn_7ATejnX8Q&Q;$^6!d+0qeW7)e1NR_i8JG zeYBZ!rjUrI&59#ncpe;X#{JxyDY=)DXdS86|K5gGxfrOU0^*kSZfSb4bpeQbx(IIe zj|g%+J!cL-pt{KvD=5DiJISNCA}a`7Y75Xx3k_e{^gQv;Z%m8keaLL5pyqK?SD!E^ zoOSNpttsUa4S{BzGz#nbwKUjZ0ZX9BG*V^jcrVtzM=OjPPz9-&7mJ_VL!J*|$0nak z3le{85lA_0OpWR$yiJP(>xv6LJy)~H;(Dl(ot5b3L2!fhpJQ!E>OEJ|WP09J5)j2W z5b`crqww~%KcN7~zQWi(kfH6(o1zd$PXbLy8PgX*foT_DR0MRS&ERv`a=SY6JXop% z!IyJnF3%ic;c9^=#Udb-KML)FkdF#58-50~S=acV#0Ig{1~EX~dIYEr<6hppqWf@OUZ z4)W@8SCK|D=*S(VZZ@4YVW^&prXL2TBO+$!6lC#H3Ey0XghR_}Asxn&C#W3Zsb<{}(0nJwXV$79CP3G~rVVm_-yhXX#rZDXs zX!!v7TXgfP7VF2Zz#-`jMitD47;Kg}vMYX_et&=bqSV>mWS;5$O|~mJ<*59jEy1@> zJs4BJKH_>A^@}p1()l-d(x7`BC5p#&kym}bP((LFqTc@cma9pii4guvq2x4?lPQ$t zO3xWA8Jwxb3zw?00`DVP|J(_Sr?I|F(0cGJmJv7+(y~5zsFlCy8P8?J4`LG6Zk>7> z_oGJ-R_sBbwT@?OcsCzC*rf?HJ#kB2#m4e$X*xOXg>d`62Cft_F!ACf#M}g+iHhmx z^wCVxzN-Rsam0SilnmOAN3iBd+}JYp+>M<|^r)+D5E1}x=?d=Q`=?OG7(UjvN|xdx zL5cIwiz3@eDBqB7z0gKxm*Xi8$my8ub-e^PY`h>_N)j7s0+#M5%t6@C5!TH1nf00G zenmk}vwFYxS&*={hrTq>W3Q8MP$S>ube)uVtZ(cWW^$wdYw;DuH}bX$>CRws?0^P5 zxpsx_I*udr%E9M&A4?iRp=LvaByi5-GB@x|?1J|U9`v0g%p=>Z>*ULvc_$ApG!^nt zCvqE_Z^tJ<3r>Xl2Wa3{u|e3y%0*7$%$zYJ5J{5Ywrc-jFOJA<;y3cm%aF~|I?AP{UVUG;vaZ9h_i`;}RmpV~J z>5TwmJHWH)LVQV);rPQliTsXD=V@9J2$O#Ga%DD>>!?;a=Js54we3RqbGa!ptn#mv z5~GV&+LW&tJFxyD^=Gd4r*jS(2iC0X{iWgH`U7Eyr{SvBrMx5c3574 zxvt5-8*T?fa2(D&K5-zx(?I!m%9EY%2{e$v?vY%m@bZzF91%3i9t;X&S>5V#?VI_) zGwE(tYS^YGHwO4?Wp##Iv4;fLZGUtV^_hPyTFUDALWN+?(Jca^%V&y#0eHIY;sN^A zE@iJPjyp9Ok4->EV3m#ax9$Y^1Ntd~)gkK(_4o2@GSk_HcQ_o$9-4)q+M-+SwAU9s z*tmhvMMHote@7~L(AJskVOTdXs;}uI$o+TUm2xF#b!OL>BtyFq(JMPA z@@m&e5Sg(o|b+vx)gX+;>;#e%F3I z7-A357`oqXFMoYC#y)XH)QeU_;xN$BAc{*1I5Wk4xD=y2dz`6auy-+_XZK|0TuiUf z2QG(b8HoPB&&Ph3d8V1%Nb%x#rsnp3VD%Nsk_pja0&Y*v>mq??)8x~Is}tD#y{GRM zk3#yiu71PoL~Iw+Irm$9)_f#a9?u=3^ej2^byn-jp*EY!Vq+K5tWw$zvdY*}Ss~V# zJ4!setrT5|KK87Q`{ela?Aa-ONYv~r*5F?TFaLhvmiR}xD$O`|TU^0Bg*oWgN2#b2 zX>QE94gLyVL-;q)$Im}WtklI0gR_m;^sv!+r*FkE_YiclVNY!+=<*xWTfx7VY-FH@ z3gron;0XhZ=KJwnI146h2kxBm!!rgty7jhYjRE%=(qTEbxC=5!CF0c<1yH z*e|Oa1~0BX(|;8X?)mr#`IPm$jNLc<#))<@N(C-=^lu(| z7)M`f8uX}CmfR6$*IfC}( z%X{06G*zA;phMB zcFBa94{`)5lLKvoT;91j>WDMw?ep-FKz%RH3yJbl>NHk!`Dwf13}69fZGrP~0-Q@o zrchPOp4d@z7^6VEylt2XDN;Ekavl?X@oN~POXQACSaLr!Su~jhB!m4Uhiq0{zrN&Pnj#xP*)YlklQteR5Y$Z-TI}# z2#7q7v&BuwG21z9O)z2*#Xipuv}=w19S z_ufpHqyPM~ud?p3w#c6@th@5I1P^U0z3QxRWDX&a6t4Cl=`fHRa**X%RavjgKi_Nl z^+t9g^WZ~;_h%#52I5A=DZr{h*6oLdk%mzT62#i%Jm#swpM>O?11$zOwP+i3V7Bbl zFd@qZdU|~ix@jfX^9*4uB|g9DYer%7{mNJ3cLoL!#&DNU`1)ck2uQ*!!sF`YEby>yaKosH(* zccAV9^xFgExp<#Qc|f7(@~35BOsH%)$4kVvxEELXXFut0L*A~s?AvIRZfr-ww?PQ4BaIHE&qxx{IL~?B^f1Lu2{9@zrKvS|%8+iwR-z7E^9ax@=6|xPhf>$>dJ74Q<#C4b851rzV-^*uL}YqgoBB zth(LL$`9h;Z{m8>@zcIj1Jf{IAQp+1PXr*5cnXvj({7ALU0NIJB5Y|sDR~0{)q{tdeGi-=={h@ zbMJSD&q%E{8hUUzszn^Qp4}hvd-SBGA+f46x(ccqF(_2^A78citxp6IA(Vzpzl1uR zA4{o%N1{i+O(Q;(_9Rw8sJoS6{uL>t2hjU1Y*mP=c_f`9aw)upvx&jRTRh1h{A~c; z!_<3u)+recoHFrzV*+Q{N+T)RPPZl?CcaJWeUPAdiM);LUMi6Jbxn}~YA^_FcAj2CSkO6Hn@mDU~<45>E zZavcme6SEzJc6gSheOJ^F4?x@_pKNg+izxa+uJO!#WU8;p{%jey!>D;JLERI<$BXC zWjcv8E9q>Jenx{a!}}<`$J07T5N6{1oeLoTlF|M@Q|jnxN2#f|v@{?hX!uV*hx7d7 zwhkYIT_YKbI7> zS@V76Zr5tM+D-mt0`uRRIZDX(V<)N6lXjbQ29LOq8mdxbfZY;=)(#`+y7Z{7| z)cr%Lm84(RlA4Meoqq7~rLe|ooYQn-)fD04GJ*6GzwlVgzkj9&dyjKf~2g=FJ!{5YPGHUWY zYIfu4p;+>3CvIpl1)}Y{>qA-kkG{IOS|>ftY`SbD*#PMY8V51Kft`R?GWG6!)jgcc6VZC{708-3+X!b zXD%Fk^TlfAh7zh4ABxds> zr|;jZMXJ8TWtef;GLj!8AL+?3Zc~14N`F&ui$hvRpoU zAam9(^QXP?Z1T(RqJO6?{{{_Wgvyvw!XC`6stYfwmRp`%U%&Nn`J$vx)&+C7bfB*1gvH!+g2WMCJPeN7Vx|PAsUI)5v za{|H6Xm9_JYt2EVUbA1?Swp(hLfm#iq!ino~Cs~C=UCG1$se)C@04valgGu z34HWOv2C@>Z9W|0qtw3M=erOW?7G7an3~tYXLo5zluOKO7QNMAG#4KP4@k^QtV#n+ z!S(2&jov%m;^Cm9a@VCV7Qpx!g~nmi*23Z5^=Fxy8ET4Z%PkHg(SJYty&3`F{6t!N zp8*Kc(_uIxRk_ulEVDNAisp1~>kV|3*ZV-_V`!dfS4F1A?-w7|M90B``dsyNN&0e*in+GJW~-A0E6!~bL>tb(O%Vf&SEfow=e|vo>tK18&e838GqYf& z>1Ni~Q2I1Z08g*>CZ61PJM(MpekA@|~tiBpm4 z+q(z56=^kL9#p;cV6Q6oJdHa&^_Nj{Vfo!uue!n)2aV;4Nhr^{D9-SM(%ADQEp%N= zYRxsl9cq)!p-PgTEp?B)FEk8+=l2`#?_zceY)!#Ny-WXvxn7?)Oj~rF_oHI2w9Hmqj-gzAGkT-_z?yO*z$=x~8%JjRBBs(A9otJ(<7x-B2=|@2j9R>$1 zsEHN#h)|$tG6RVDOBn;it14CjqATNflh)Z5z=E%HcbS53;1+t-U_`B%1-l@8CSaGP z!B6X~do;JA6CtGd!Y%n7m{Yn;8_Qu>%LD;vtEzj!P7t&*r{g7nO1<)z|Jq0$aqov$ zI?@ABM?4e!xeXy!31s8@Mt&zPCKtv@$pB+Hq%qFQkm#rF04GBg{(qzDE#sOD|NifD z!GahA>2fOFB@K>H8i%BSI=Td=C>^6qLP4Y*-8e#|)Da3&&ZflCDNaR2lzH#>yRQ4b z|NjT)qdh!dubs#7`F`J@cj{JHcpi3FG+A+Yqc7J-gWtvP#B(mkkXJ*z?#_8bZ$LH5 z4<#J?ANRAPCjB2Rx;@RyW>Xm*FVee^Q^Z~rI8>Ia6w5t1J3!HNO>smC6@qY%L+w6cX?6qfA} zBC?AHdbNt>2p~jxsNxZSn8f)xdYl@K#t=w1gt!o*RBqwnqvB6r)eieVeKYi~EG(I? zi^5j6GsFj`CMugzBJsq<4ICj&dNBc2bqx6BK_(90UGh`%6P+0l(D~OuxmhWfB=}kK ztjzKfD#F=Q=-t>kt+w`T+Z!t)pVCLw7j1KI-0~D#*?g|~(>C{}`08=CNHb&Ej=Ur* zam@D_Gi^ogJ81)+;!-c3V__Ha;wHsK+^5^JQJ2K7Q=Z8MbDer1HXP(h^O%_jZ2`(v&e3 za9OQ%VOLV)(Ux^cqFUKXmycHC#p%!hwbCuCdYxx4ro;QbmoJoUXs$F)hb@Pe|E}?c zI1=FYO~Y4lfx>JB5t)FQHQV_KZ%vXk4vg6IiO6z=^C|0sYbx1U$fay~7h$klmC@vt z2CxU9k=C?d39??BtX0bPze`t0C`aQF6`8}_ zVp+U^+yGZsfuiMFwJXmsw;(G>z-wL)v}LA=g8FirY=ha zMcY=NICGWHshP3O+w6V$fSMqvWnMPpHrFC-hLr2Vw2 zpLv1mZuc@Lq9gl041L3Q)hM+3pU-l68}PF}b_kD|T~tX;1tVci4e zK|wd`i8}UtqDW}~%1TxHfF`k!g3^3T*-$6C0kD6hqHGP@M?x2HuR)qZ4V#~*SMd4B zF7!JM5?*$rnyrf$0h-VKhY<>5^moprl>UX8NE5d(<7`9%AHJ2r*6;X8 zv#9>6kDbuH=~N8?bu_UI_O%XBKFKzM4!(a=XRJ!$^li_&ZOa+M7f>zZlp}Jg=bJ;6 zfFH9_>|-{Vr*y8=mGV__BYTaHbFe{K?wzyXNGf=C)yVaG-G{$jS@3q2mtr^M&#QQL zPW^2;S_DI5zVF_DFts8TvPimSj!U_mJ=hHmq`dfSVwpEb>&O-aZDQc|RKpiLvBtvC z!Bp8tj-oOcZOs}DyHvjO>=#@$T>9C36bOU6_wZj!L0FT{_QXLpO2^kiGiq7zV7Lou zuIIc8zAVw5{&Z)Xe?Y|YV%^251-h1EhSq!0o$_XEw|5CkY=)xAksO1iUMIx6n_yof z254)giZuX92KM-lhpa(n;{mea9mfh{IiVR>M{$xgFYn-2$QOMrgEKuB6*-nuux0KR24lnd?af=|L# zvy65E^DMw=sgNi&!U8F7$Ja%<8kUS_0jSAI^yESS!ib{4-8C)SlSsQ0i<`EgycQZ<~!urQ}dy2B29B7nE-`WDsu3WhF z!WqSsYmN8tj%?m~%98!cIpeKa_8Y(K^bc9Hn^`ks*)<>HKRLTDj%BY(=g4~Jyf4bx z=+R{(XYZybhvVb5#En?JunGlOmYQ7lWUSgg1N$v0SFS5p{B5pa!5JVjm*uw+^kOcf z=nQDfkSo$~|GQ1B`(#*^@P$kZAdhK+3Z(L>lQ}Ik>@@e$ts6~xSarYydfM!7PGtxg;5kTyu$5v#q<&i-6XdC zo0lzs4~zw1QROHh&y(Z4J1G!OLM1R)GFpsc#w2tiODqK*L582lDqkmY52_V0(v`F6O$9Nf79h+wUV!~r+P;bE+G9^+!- z7S&s48xCeG^tNlFfm&rsjoo;ZUQ=yrFW7OW!T1fSfzlY4ceC#;JRVo)+f*BkuV2W+ zpmdNSQ7PAT;CgfLuqJ>>31$S;#GvcEwm4*|%p@v~-U~$21J+N2Ip}fMi4fEG9063g zGa)4u13&h&#rO_5nhsOL!zY{IOnT0T3dco-U5;X9CqY6fE3J#FHRuga`X`4LZybl5%UnNsoj+A)^2YGhj9&ksU~oV5*l627;Ub z$QloHuh;Inmmf=Q`#at?SKJy)gWaUIww;4e4>98|Z5nwG{>(l2JYGeYeV}X90?`#; zENRpIQwvOp#o{5*K=SE4GPSBbhzR0rhH%MQ7Yse>DE{tOHrwX3ALOIEk=G$N0w4K|bNp*kz_S5yY`lFh z9<*vB<(mRns8X4Cqz6>xOFX2XdB~T)mJ0YL8&f6SrYiSrS+Cy#J>L1D?@?-L z#rx<-3l#a3`A6Tk26TYO+08dC9Dys`158Ucpo6dyVpF0#j775@(?~%CAbqLlj)}k* zb=@_IEOGP)?NriVAvV`Q$lsE40Zp2b(X5C5B=x4&Sg%Ha+I`!lN|Ov&^_}~!jTDGx zZ61|h8XDH$9X`W8l103=t%3+9cZTaC@My|Rj#n3k)uqg%fpkgg6( z=#I0Saw%bv-+)QxOkw9HB%coBz{4c67_GIs>gfY;EzHz6tCvi9upA-f3;X@0L)Z}k zcFir4uMna|l1y0vm@-!s5tLt20m}xVh%BsA9PO!4rq5NtWqNz(J{o^H+^PyU0}tvb zDi##`ri_du0&}dj`P-!ob871>z*M^O#3K0|A-_JjUqin=Eeyg;y^<<}BgroVOEDot zfG-+?T%MLH2geYoLgjDo<+)$OLMVcj?36dhvOz1w6=P9Ujy&o|<;qz4s}tozXAU2j z=e-$@8H&R~1V|n$WG+6-7N_w^ys5AprDp2-bIaCeuia{rD6nw%c4o7MQ(t@{?R|tL zVxbX!Bva#*{aVqg=`Q0V$D%gkpZ04uTwDCdlB$@xl#dgozhCcgy@|oJg;!SH$HQrY zv#pVH1=hkBfeO!^`Do&0U3>~HV>qhR-PNt;Xm$pmJQ&frKcYWZsE=6aoi8naerKvW zk+2ZR8@MF+K@$f&%AN}=zg#mn5hIFW$3Qkgy$xHaJh`%zH;Xsk7(A2XgAzV{$3R|q z5B!p9SFe)TH58X)US_BU8Fx{Ct3IKKpBiN#-=`Kw8$SuqX;UCT)^RDT7p#hZ_*#u` z`{NvFPxXQRa`D)QRO@9O&*fR^<-qnFImStaHa?Zhs!EqvRAg4njaD9{z@M|KX;tvK z^sG31do8=i$IuZ|GYaNoT3+dwR^3!-;?c`rXsb9yHLJ^fNG3siONb=6_VLwQ9YQ6@1 z|M)@1luaxi$xYcbrfmY`&1}ZzZG)}6;H{j-E#?rV5Vuu<+AcEKE*0C(x53!iJa7m; zZXve1)3Qy+0@{S7NU^Q^!8^Buk%EMs{>7c%>CN01JGXLnh84Fdmv^5A@Agz|pR$oy z!UF2}hYuD zF?MPA74iHp?zg|XS4d2Y?R+5tXM)$s!JiF{2gH;l_HFoNUaAZK%W7-;X6W(t#21vP zlB)8*TdHTit6lysb^eszCsiFzPOVSh*@wOzD(=f0@1In1GgVr{aPDv8_c3qwHJ|R| zlunwz{Ce?$s#84cH_@LcY{`XaaWqdq9VCY4sUz+e#j|d5B7nrCL}+}7deAj4 zrT@{hCbH%vaTyn5lgr90?pG9*Bvu)hl9;=;|Mf4C+kslc8pG<2R&Z_oKuvL7ZxVA` zw{hfoa?n*0@I2eX65=1InFWu3nw%`c>ZYZFd32*e8RY`szSXZw4_hd9GQLnL z0>iM*W4tW@M|h2yd1Hr2pT~AltjjeiBv4_Fr`;}~h!a`jyN|~AtJhzju=WLIZFe=j zYfiQ}`_AQVvwhw9#`V_+8S+3*1(DH`U-PP5_H6qJhs>Mr9wC><-euoZn>|;aINj5D z!c2UzM{h*{mjFjfSl)}lMa(*=u3aqr6|m@rGxE7`zx*6RKkB;I8~$rPt1C`u7a%cT z5QhH6BKAynPiq=htX3a_iP8P6+c0=bBP2i%%}}pz#|VT7uTt`BHcR0?d$cucr=DM5 zXv0|>Ufsu7-zN!7GUunyuLD!znoTDk*WcWoJ0AW^EOh-KafBr`O*aCsmKK~8p^niz z6Wb*WKqvEF#`8G(Ev0-cFs%q6b3~XXOrDUYCCYqFhTlv=V}_HLg2Eyc zFv+n;3K=?n!MD1=k+r7mET4K~ErZtBC_^esl?{j}Qr&)8SABiG@eH)3-Lr}Oyy;>i zQi8S}ew=EL1}oi>^{i`Il-(hZG?~a5bwAlIEmq{cLE*96oZEU(S7MieP`-d3;p_`w zOYVARRHN`H$xj&C;}&I^53E#Kj31XD5dNIA6eMZ71ad&FcP8--K4ceKvdpddxnl(K%WiDl>au&eXLkjQ!s>G)r3Dh z$^HRP)Y`iV*jWPI(XQ7&^d*VX?{h)x3a^?bPny%5w2!&d(Y4%&^@wpgm z4>}2OfayXwhI$n&8#4$-bqTL|2fBVtwD_0)uFYtl>VF1GiFA}SL76wC+>dZ)mvc7$ zB_Lr^Qt}tdza-67^O9{RC40n+DrIfN1>fF*f{Bf9H8q zbs(QPHgCX0`a^ma#^?Q6(#Mutbqj(59Ok@d>pWO);)kU^8nW1mrTCGB(g<}2`h)1Y znD&}UR+ty@%;)D<2u&q#*PZ3PQ(?Xiq27rLc@4Y>Tv0eBJDoO`E$z5#v0Vuf_MyuP zu`&`tH`9|iys$Pq>KNU5!#e1Ozr;pDhViyx&UK?M;Tuh%uvPVun>3`PRN=~&cbG{+{b&^I@a4+zvoCkF zxX~$lZVUZQ>aF3AW}8S+*^#D(>T`5kji9EBgX50QJP$)0Yo+W~y54us-Q*3Ka=X;7 z`N6S^wJw~aMfn>mo9k^VruVwbm5U(5K^={Ar|-%x?1!TZ%@T^E-_*RvKT{MboM3bY zZOivUxlEo|oNm359jLhJtyHEE#%r_odPrzpGIi;sdtJ7?!;*^%*JetN{M{D$zX)d= zme+Z~I*NufrZY|mTJDmOG{JVB^+MgYFTS!wCZYSudf!mr5*Y4yxjA!Yyion+?rT*x z+lLF_kVjDttxtSq-aw;$Zx@lTn!_gFReNdu0{;=3ij;IZb3Yk_h^L-$3nT*Om4 zOH;hv3E)^V&^h8lmlE2=lcOH-iZD#9s=PHgJcEWre<~;Qr+L_m0QtkOkKMQ0c*ip@ z0C*{6Rr)PBc71ai`u4c}(wWIj^n{JI76+MKgmO}H@a>q<`vz)R87r?!B${Ea=$BXQ zYMQCDag5_&n7Byi{+@v_D#%t%`1p$}KP(aSz2CanvZP9#U#@)^dD)gmyg$rMM1@m` z5XTE0Rjt=VvHMzLL=MW;mb(n+84m zTeSdkmWV0jldGyVZ#Mknpj`dXE6xw$c}s0h)^#CW8u?{>Ca1)f&Yj<7 zieC?KykJ1oM|jP}`^~I$n4#-bjIFGv*G_v=Y^v7P+sCr~rd=D#pDB!YiiG>S5myII zuM)snA$f+nW~9;E7T?5`Q+ZDyd+#N%aW}0zhnO=yBIgG{5N8Gjf+U;WF<2fxUc#6k z@b|a0!KNu+i`1~~*1C5!M6*A7P|<$mv4p(3G+T7OEliVEuO#Ich)g#=aiY(jO<5xhy`PN#?FvA%Cv^P_DOfxa&lo>Lf=$~C3Bqyb;mw!ptiCNi+|CPo{W6{z$V7(G?{zWSK zRrsaN)2AKsQ+<14jaD_oe}95TG}W$-qTaAK1H&;Yl7wr(j^;3lXYcLB1E#nQ3~6bJj!0%$T0j&NpLc zf2mGto%rzU^8d!l^6 zwp4I>!|BTBI+YLf$C&0)A>qBE)L6Wa;)jl>wm7)NC_<+ZYfIn zulBX)K}UO5e)(8WiFaYb^7J@!v8IQU0Q4( z9Dp;3%*#h|N@`kqMrPKn?3~=Z+jsH{{y+I^#eGs`Rdr46e?h&8_z3`L#mM zoAc)+V>AoA9JV*q)SaUJ)vp$X+QV~B3d90;mOM@F52vAZ2We{F=Y&%Wmp>ATwdoo9 znh5q}d*!N*+@H`|N_7w`Q8e}(6uVSEe%D~`aDR}n$zldbADDpvW6t{q_LrYS^Q!7z z)ZtrP4sRY9t@K4xvSbSMu3@o!nL(04R*rE z(jr4xT6DZxkRN${c|@;{vCa+pLMwCQu1=y7culjH9{yhNIR&~dB3j_^=p>EQ2LWA* z2los~Wurvn*kSKq*x_E799ts0YkQ1}aREC0ZsmqwJlL-)o!6rt0aBf$dZ1z` z?awbiv92B#_~CW${7L1^)c0b>M-Et&=K8^_oTRr5t~3nC7_};2jsC`iL&3s4iT$*R zc~X{5ch6e>X)8yGf-43xYwY$>TUA*XFK<)hOq9 zettOP)BL%6A#CUKqq)NaGm?lp9SDmL8a35S*28^j2c#o$IiR<&9vL}r%l)OkbwX3>*AN0Pf7 zryvinpZM0zJ2S1FhB`V|<2yU&>o0SEg(FT_ z`%AQa&T)?G7Zi~n@_^-gUSRfO?_N-19AxJOHt%J0QNhd=xJENJuDmZ9KUP!~{v92> zNsK{tGKbRTCZue#IrW{5G7)yu9(i6}lBd>i1L z*yMc($Jg5&sdNE$w-E#q#O{Ge1QbNf*%Dr{!zdx*?0E^$z6}IulFFYLfn{r|OlKbF z(*Z;(ra)^LF8~N2{FYAOorxeaAyqGi!gXG{oYyBf%5Cy2EAP@-CMu7b8cGu4rX}jC z@1S1jR124$m6w;_MiJ6eMfvZJS}?0^Lk1u$c*1B8CNYnaX(=3e{hZ9$*KC2jVUbr6 zX|22-un>FW)6fsGrup>7Mq6^OsHyaeqjO;mcc3DuDUXw3GNYmuOvp?2@LN-aMaJ(9{ z*GpV9)nmfD8xK%Nj1>ZbZntG3EWT$L#Po7JTUb)QQv-(VQLV2Qj^35LE%A>VL3N>U zbHT-vgsW~o_iG*GSn?Vd&7|Ut(5f+j->Gw4U%~1fOPrYWHBrT)iM+ke6RCdHetd+N zXG^Y?CE^FoknMm@5gDB&PPCG-Nb^E2--;(dSZP?eY=gZ}xS56FsgCj8uIr8MTAL?O zJ&e>0MgeLh01#ay*@9=dpuS$iLa!;Q>|<{^w8pSjUx~pHHbrFfokDivwsDE9!&FmM zXNndL^&BTg>TtI`HRgQ+f_^XERmt&j1|ZstXx_bPxg zMmV8IZf@Zvwp|U$`*q1UMbSFKIn4nLRs~9cLkI>gE5Z+q{Ae-Ovc!Gu19z$O(oRfo zii+N-&NfY#)RGNIN8mx6(kw*iZqcXBR8Nzhw_}>=*KYOCKhNv1Zxnx$isjN; zmcI{vocc`cMAJBqkIe&S8k{Avh<&NxfMM~^13|A7(@v5x)9A6lE~Dr)bpfE1db-8B ze8L)W3&eTi^oYSb{N|}@(o1gYps3M>Y3WHy=2yY4{F}uPoz>fq9WsfgDq_F+WV=GGWc@QDqMLFD%<4100ogsw@uzfM`_khHW`s}+BDBC!dl7{L zs+kW9-0UO8cUQGl4{Ni)jzW`qX&0t#XPX^Un}#nfE1u$cRz}1^G1&Cti>h4PVc2|8 zTO!|pFxQU?M{ibgu+!T=i>n&X3prnH6Md^_*4`}nkn#-pCNT|`OY1pxnKe0UmJd2+ z2(~x*nv>7B`>n+1x|3n}#_r^;RJ-6OSUAlH7u|Kl%p$D!Cu+*l_;ww$sbQ z_x+3?`w&0H@J&=^5^QRTJkE(9e3SH? zwH0S#bqaB*uZ8leeO&|3Rh7| zFF7UdRm$ZCqL5c|^{;q@b7~!xT@0SugGrq?O-;lD!Da|0n%&_qK$W6@FAt)DL+H{) z&3H7T(gO$)Y}d!)wEPgoiQ>sbSR@(o2?$TQeGG6!4qQNZq2&{YPv;8+XZW#Y`Qg0G z09Gu-+dC5FUQ#j`n>7&}tT3?aWqd#>Rh;u2n18kAT#y zz~(EDMGf-1jtUDXbMIe+YcZ328XsZFjd8`DClbwMpU~sZZX+w;I2ydlE?a9!$7+!K zBM3KW#x|_Q_N+lBg$n3k;FSpAwk<>(K;;e!;-#2qd4k@VHC zCuLYD5@FXReT*RX9g-0p`5{J<;Z+h>mnCAC#q$&LFMks!3`v*?N~z`*1a=hIo-DvE zOXv&U)hU)Z^Si*}1!ss+zWlOeWFdd#K9{lkEf`%?%R@C!fG?T`J7uUx+EiDx<(2== z`H3sXp*Q~$Sjy?5)TQOS;i?S5FeAxp9ug_VQZ9)F>Hbo#;9^IlMB?vzSHK(_Z_*#} zC-e0r?2|d{=y!5Ea~UL#UFZBnq7tp6q-D0G?RN>eSK&>l+#JcCiweVj;|Js6!8ExT zKz>Lya2C%$bnYI2$*?)5)eMoJE7Zr4*x~ZMci`fc`w|pgug|iJZ3U;bFYKVc8sAqRY zJHyIE8}&3PqD#gV+WDZbze(smwY?V=`bp|<%+ucE%gH#x`+S*TK$QAQiAxzCNv(iV zommK6yI>}hcm~a=M;>|V%g|uz1TE&y!G0e6&olU0vR3?e)g-haKs@!z2w0Ma=vAH- z*HMd4;Fdz)vwM^E?Uch?K{la7RuLDSVpUXr1H2`ahb51{RSogV_&$uky3dYxo(6+s zZZ{kQV9I6F-|r`qvV6SYu{c3Zu2X-tP?-rNr4w~5I<@^ywPZpqB)wcw8l<2MvQ4Xd z^TwbsnOlM8n22jErdK6l099%g#H3cBFR^SZp+c}p8{YUg{}dJ8RDw)iOiNY~AU5b& z>Y&dwyEN2gvZs#+R3M3m;i-O0&Cb#-P}7znt)@hBGwUxgi{X}z5^Us7%MQ| z$I1|~z**9v=atdOJYZ-YWJ7~$7b1jlZFx*TDL^P9wLyQMp_VkKQbKkuJl+VUzKd#I zd*AZr6kw?gbv*^F=(HJO5MVNBwFzMfurPZ-tch(U7&1DL+pjP6F3BoOwE+``1EX8- zP?HZ!SSR2}pbKh56x}{-6{kUWPqt@Lp_WuKvbj-zwZm4Wxs1kl0TL+uu)SxlsUGNf z=aN#(dQLJBfpBfp$U?BO0Z1y8B@3{mLC<5Etq341oS--b3f6sSgMVl<4_!F~C6bsw zJ(R$ct+8N_2`GpR^3{EKOcx=H>BiB??z-JJ0uPq&fIIJAWTP|SL4ZXtf#s?!B2bwW z5dqhrTRO4;OpdSE<}k~#OlR2RXtlv>lFMcrMg7{G!8MFS5(G_n;LBteHB zCjvIuZg6ym{SK&g9(2hSBsb4tNp9~s*?sH{Wj;P6uVo|fo|;(TLvMZB;`p>!xP5n69d04DOUuB4z<{Uijl}G z<4{L&iY0o)G>gm&P{5Ym0PQKlRj{GI)o_>6KGADKK26qr1k$4bK))DyBoTNhZ1vd0 z)@=H;e=>n3QXSqr<8iCQ?e$^j+rB3$=#GZGR&~8TTlN8+za3UUKg-0k6rd9)-~Z2I zBtjmV?Dj0;RvUp0&+pbIPKK^ojPVaVL+w6$^XC-)MybD}on$gN0&jZbEMmOCG?!07 z5erF~84AAjfMA8VE}u~BiYP4wm=OA_=+Pf?6IK8qfo+4(pg5ongKK-d&>FD-g%iog zF=U)F@OS|jOcaqLo?N7e{HB-;?5YWuuqdHiVouhBr^~R{~HVdh3!-o8tfiUJjfx980FRCgTB|KEkdQ!9sbP znb*fL)sd(SIK;kaF+prQKA6Y@d9}W2cI(v-YCWT$2DGv=qF%R=pqAv0{>d=0zz6>2 zPXdn^<8|24R%)+$BP$XI7N>*M12YwlS`Pm{R}mQvno76uY}tXgTsNF;0bnJMXYnM~ zvd6Oy>9d1ThH(tbQePVfi3*&uS?CVd;2CRUo zq@XEf*Af4?r+pLe=zTL~lxw#s3y3x(8%magF>8Pt5bhi2GC-WS39rlkcn`alNbY60 zkcBJ8*2mvqb?J9Eo1&K6Ex6f&M6gH%N7=g97KA{sBtCQQ%P zaKqq=(n_R_vb^m_m!*G2ZNC1vYGw0@TXFZhU6ZDF$IJ=JaawPX;wy&h^fM^%FktUh ziOrTdJ4?~!Zc;E}S%|}7ceL>8Hu(~=T~Yds0Wu~>)&mWZC#<@J?^Ubrl*Gasm%$}e zU@v%89s`SI?A)?JX0(N6DXx|NXT_x#qfZXEUcRgNT52BZl{Ll|`yoPPxl8x!J9dg7 z>IIwLGn=fz!Y8l8QO{EVqeP1Fw zQVe$Ai+&ms+jr+!=(zPM7e(ux{517MTQm8-S zjGx!f|Egc!Nfo2#E7S2#^yfC$f9fL`Y=ny_<~Mxst_}Ihr{Q-oQ!6eYuv|CgD(bmH zH`@Aew`xi}=(TU@Yl!Ysoy&Wvm@l6fBljv;5N#WWIe+%1!RD6{aZ1tmRlm1i|MNu* z(sx|8*9P&;U=s+T7ts!!_}6ZqSEIRlHa%);m2NA;y-Yb3EjqH0>JU zei6>-+Y;~71ZYr@>R1NLqZIZ8>uOkC<%lOb+InD2`T3)yC9Nk(PSlU1<^|{Yxcybl z$1H#NeHDD9S~pp&e(_1yGhdUb1Tb`WU{$REYj3Q=%Yxp&ol#nZ+f69Gj<(3RGj%+Q z_;JZGOvC;4%7Gda^y{iPDW0VfG*?(aIm_F1`jT6y#HVQoCrw#PaLRAc@i5S{IW@Ex_$Kp%dG5=83dAhAonE0f4yb1b$sBKf$qsmWBXgv#hQ;gy?ReI zm{_KYW8XsQ`BLdnkv&|e{c^cPGR^>A9AXF$qBm%xF8S=51Pe;6k#)L$n9LYX2lklw>Ut)3-(4clG0RoS5xF$&ulxk$>iP&A zAOhaO9**B6@E)vGDB)@tdGHvKvG((d#I@_Ql7N5emh<(_S~^@Tye0twxzS}fDjMvz z1oI3;TOdJdP;zQ=dfqitE}mdnue=KUx?qNCA%9bD^_p~g%#F&-=e|h!CiDQCVi!D@L1)-YrUyas)c4yCts&3+Tam;F2XDSW}Y00%xc6p2%mNIM#> zLt82$DG5bdt@XzU8p18F{C*dYiG+Bel>oMd6K79CCv8~(r-i{H3A9v)F^_<~mDY3q zE2-|OGQ&d66Xt$DtH##-*X<^xIJwm>+)+!Uq~H3td9c#7SY|%mq2D1VfhbZ?C$E2- zbv<@o-u=r5pS1p$+rD2sYtRzvhLq0({-2?qe`Xa)Gxvx%J)rNn&%m5ld$t*SI6~-| zTj5;&n0@ZkzPY=;Bm-odKU{d#t{#?ccdy<6>(s(FeNcc`yDL zX9$~r%}6HPAHSM$>ib}o7}y!ibFNF`^bg4Z6G$OY^Om)9c8}-vxKDSLe;Mm#G;~de z6`;&^YMXO|tN^QWp5kx=4 z*ssZ2r*)3huIm(*u1$#9zLM$Y#NJmcKFe}V?B~L_s?FKjES}r1($`sU+C(JcxycDV zDVBH02v2D=(d;aOQn${!0vi%|PG=|9r&G41Q!faFRdN8vk2wsI>^Tu8Kmn?CTi;p6 z_HrTn4NI$R^T^(&HiO{iYqL$JrvrH16pmG`xiZ}k5P=V0jd@!LXKy(By&GUSrnd4M z$vGa5@>0gnlHHFQ91(0nBQk!ek=7I(C(*8+Z{#?jQtx%L`oiOYFig?fNtMP#X9*z< za;03$6;9W=5uxPvU+&{RSF%JtyvB8R(h`C~CX%{nKfB2{k%4#bIEw~jf7^cgce0A*@a|b6ixB|+;=}`wGXcqGWxyaL zfQ1O8IQ2PRnyqWVFSmvG>BytgW^Q_~W~8_FUA{PQPadR2$z17QIE-MVu*Wo9JN^@t zr2qEdel;d3=QlNtREtN&5RK(yu6nX+VL4B)Lvqg=u80SEaO$Mm=a$B-n7CDrk+G_I zGFU+JgBGU%BeN~yZi_Lhe&j9!DCHf~Nq{1He`2T^%_YmuT94p{o1OQQ@SsE-?PXlt zwIvjG)8yB0cmj%clk2wUX)_W_5QzxhN2jr)BMDUzgJR;={+2tHoN*D5WVx?k17hE6 zc>;vvBnEDPcj9Vvgh0KhsSsr>{B$}+=zy|?dn*K1Y`9T*NJ-NoRlUz|+pm3xg$NL@!d;Q<33hGe{CI!kbQP#&wsBlii=_8dm*umqR=I!Kgb(iRS(-L zs@E?^>O`hKtKj_zNyNCk>i?VoL$!feov{#m{b>?!`6f{}il_^8pLC<7om3{iVBsac>31J3ti;fq=4p7icfa0RdQTURI3Zv=tSL)e zFTBvjR6XidD01~PAK>Sd5W}*A{B3bh_pT%{(&^~TxCQY|#t&vvpKu#zMtuC$a5T{0 zZpUUL+@REzZldNwh2}=1<7gYl&GZZ*X$SX(TdiK!>2R9nfllJY!0M~+oJ(xa#=lc` zOveUSt0Q7okADp;_4HVa(;DjHs!UQjI5EMfiWu1NT!gc4CVU%Ohpe(#5G}vEbHWixq zF7@xsfBqVhzH$VQ`1D8OFfRP*KgwRFHN0?C!3$u3FC8(swu(GhH&=0Ux2tshC52Kq7LHI@$fiOfZ;C$UjtG2o~AaOO)LU{ zQehf-kO)esw@P3_{iOjTYdxm_grfJTQWt^I?Hbnk1{HXopof10-FvM!H7eQJ2|Z7f zRCh=cvqw(m>-s?S->=8wo;fip(Qyai;aDsP8BXBAI&h|?7*Zj-X({WzoDfQiYXgW6 zof@>s+-bRD1P8ci%(>w8SUQZA648!Li^k*9Da4LEa1aH469ULG3#TO6ZaAlZ%)b`1 z>1n47izPsHNbpFCK3O?E8lRp{0SlS}k4%H0(4>|(v4e@Remv?pJ0q)f#N`brl5G9f zH^?^s=Cp58ota(QHQ}KR$&=z3uazv72BY)5X&Z!;gYfudpVZB?cmuMl0WFmvz`6P8 zR`5)!kAUZ~dW5?piyXg~GzBio&&Cp=ev=g1iO-QC!wJk!Ha;hV#A!4i<;2e zP^t51bV>oX`4p5>24fl_*}P&l0XLi1F#p8QIW3VrW9GMNn!ooUm74Av^FH;od7J?` zoXLj4Dfz3uafUMaroDc~f_}~^%-B0XaRhEk@Q=iRp7LESrxiTVfJKvWGFXVVDa0uQ zc@cTnmJU=qLYX}|Y(7XYZP>~t*cJy-P-ZrDMLYj4a5c}3phQJ9-d#BW+hQQ9c(|OO zn?g@~*HS-(f({ z`;AEGHVB(;gxO1DL0C|yKd5snr6BK?S!1b(S*mGcN_QjSx-ZlGTiPc`urfDhIC*LP z^gRC_DNQQN1_ORnuNXYh`W5`ldueH>ay5Qdo3EbtSHWkx6RL?|kLU2$#fUKKy&?*D z_BRnuyk;E+?FlcE=M{KtXs^awJiT)1LC+PfcLe4!-^zi+5`Z-3y%AhzfAh8du|%iJ zbi{N-_*_xxGnss?NLQVV%5g**&s=3tPeF_WCl?N%fdiyi*(3uje&MUG_NFsKQ7FC& zGKW;MKz=bpO0t5aU8+0qClnE$)g)FUbh1vsEm?_zGc?HQ**IhEREGBd!`^*9H5Iq- zqF*5)385G1VCcPrg&L$+K|rchk&Zz?I)>hnE}hV%Ly!)N0hA5~lp-JmP${AU77#F= zJkRf(vuE#r;Ji6`mzliDtW0LD`+MD=i=#@vp|bmRrNvo|YD%qqSgD|0f|jy_W^tjj zI3n*;7CmJN090*RKhiX-RYlj@+a7tkrxm{< zae}Fdx?mO#t+vkLGOTVl|oXw2(At=nK%*5iOFsg-r6K0sS@CbO=G``Z@(cipz)-v6np_<$BFd>y}5$m3$ zI^XjD`q5--NF=g`YjsQY(I!c-{fD5btPhP?T{(>thCyj<|SAY84H} zrjLel<6`Z_zna69v!Fk5qi2#l#GuYxU~Cv=2$o4fO5L!MnS2KFzjA-QD$?bFWQe8W z$6E+ul_H4Hx_f;2>;W*wc6H@x&uW~m<;sb;( znX#C|k@Q?w;IX=bs7T79D-`BR!Iw{7LnV&!)-)GMQG&gT`uyY8Dh5<2xLf$_iU}ZhAK1GT56_BAJ9#syu zrqQEMY+MCbls~;Zu1c%RDq85V^p%G+2KwL3EvoT)_UVCUz^#sq2BF_9rk-yFku|sh zO_6~*{}gX}ueH&Pq0xNFJJBF^hKG&qXdp9~>N&fki{J#%2&Xq}0O6%|e6Vet%z5b( zJ_0`NzD-Y5nYFCcgD%CN#y6Z9O$DD%m3vQhdq33}xI&t57+RB=Xr5ktT|e`DbV!FM z6EX8_dU~PMVI+N~G`Ms1`3>y;3@i2Q=5yGl85AD&s2~~N6 ze@@EyCCPJ~{)V~f&ABQWbA9uPn}B;g3og4u=|{LxO!)E~2Gi=VPaEir=q;lj=$Pt{ z`qH0T(#!F;Kh>!JNm?&MSzm%rZ{azi-+qAcMX%6IPn^U+ddb{liT*PCfwqzXNwvP_ zrU7~Uz_snLp0v3~tG!h!^N}TQ<5K4JP3Cyj`UF4p=5zVAaP^l;yiMimoxj~De`hY; zzOS|Etrl&s)`xe_v-u{wVeE7Iah7CnCCqcZa9TB zGm_adqVBL<^Z&4NSCCJ8Urjy)Og5rMZEAF8kvj#vRHr z=syH#vnctjJl?mgu73EieP`V`2Y#IKLCzV`R?N#xbV zmMvE@Ip_T0pA=Lwi`-4UMPs_U`hwC9OG%so?%*gToGBgAAQ1v3iH-Py_1lM!YHNz( zU?hR!f`>SOWu(AU$T4hjW4CrHw`~2Pa1?;p1Q6L^In0JD5-f#sW<)v5J6FYV?4bRt z0;PBKd3HDsKR@uV@>4HNQY*Z#z9ZbYqwnVwJ-hSUeK#ue9S5*O-tWtd-pM3=mLl#3 z((Ok0JH-ut&WYZALbvB1y;E(vld8U7PB$FGyC3Sfljy$}LAPJSyAwsX>r=iHO1Bf6 z`6b1F=W+CYaru6-;}oK4{}8B#<9LcuH=^ zkLfNO!)jOm#=`=UTNIcLISlX$zae?}Nop3v$IB~9Akp$kLw`v_-3d4Ul$-sDR{NU? z`#1X?^hoV|@H<%Jkjm;1L`FJgzHO1dQ{6wLkvU>+J7j!A{{K2WGd*IE5#^~kqL(=Y zDh}cF$1E?8pc_Xdx+7YrBi@(CXQqd2-;X6XzVqGuA^YgZmUO`zx=kZfh|VmfdMoAT ziw`Wguc>&-AGB-2Xc#{LV!&)H@c=HE&n|QTEpCf~K)d1m;Z%(uF$9uBL&d5qZr=aR zfCPE``{~v8+xO9L|NFnuFMs>VoOrhVez@^F#OWmX(MjmW$^CyPVKS!}jnja(lcdY1 ziB6}1FHb$c|Mq%$l6>jnHheSithsE_DsfQmlT0btU zT`koG?lC~=8Mdw7fN1d>+*rT^38iG%I^c!Mu2V}oQ$W`NS_be^%l5D5XE?K;>W|33 zc1mVhkOcBf=Nlym$v~6!^D=2=;xSy*nem!GaN!4)pQQjXY_-1J0x^JJ5U7`CC>F}L z$LQazX&??ieAIT@yi|TR)Ao~wNXbq2pGCj_J!_jv9m1YKM^6z~m_SP#52c`xyvJ2i z1j_k;7X8Rs+h*Z>9E6z}1c{Y!Wa%Q8YK*4k6{HO&6vsKc+TL>=TUcCLe!sFBH_=7o z;Ar2l_USWeDG%8uDrYPAap&mx$Io9m>zxP*3D|GazYJD_`Dpcj7X6rc4=Qm;d=i6z z;qxS)s@G{Phe~VX?R=w;ky^zgBF{bwg#J`~=q@nZ&-P@hhE$%&L>o2l;edTJf)Y;ZO@LP9$8T`~JBQ8$gBZvuHoKnv+ zaohJyDvC0-=nc6I5-!PT-$q%zI>^66aZ`w6_dNM`^B@#n223Y&KN*P~za;!jImdF; zQfEqlgmpueT}yO6oU8PJAk>GEqVz4@*@*Q-xaZ#dZ``G0r|}IT!NISr#6T8ElY<0h2c%N7r8%ObzuG)ks2;IYRsyhTdZGY;A0Z$N4 zc_PUaR8TO$#vBV@L$}fj!XKpjU46ry$GBAl4g9&O$E`>h(u2vDFYpKqv{)yHo|ozl zdEpr<6B6{ivujck4}QN!)ZH;#W@X+LN_VJl!M+Z$uV=_Ch;`{>D{Sz}M)*O3+Fw)d zCE)!ufZj8y*ORA zy&PGeEp4JDE$_>pkW$T7X3qjWWz`ZX34C1Tw35pj#p&;gjUv;15>F#lrhow*w#3a?2=yYfCeF$lFK zd22BBAT4=vB0RJh|Bt6i9z@4{+|+7J&xY~ap;CD=$r)F-;V_7ax=VT@d=`7fA>ksN zAALNR-{pe1fc_{HoO;kWBgv6rf>2z}hS74UV)ZUxBVywo0uba+x+u}@6Fq&I3{j25 z)2nPNj}X2I&51Nqf4Ur4B{o=Lcd!4xGr(w$e>vdQK2;^kWdNkInc)i#LLE`~DoW9? zUCJQ~+vI#BiiZQNY{s}%*4O8x`yg>yPR#xp$7j2l$oqXNZMyv-`Agp&&El3NlY>gN`0b%?VfE|^X zvP@|hG?b>>nV59AOxY0cDWy$B-)2TyJriaqajV(Z5jEzcCU=!$@NKDCqM353y|gi< zvZ+=>RqSKq%@R50={@ivj-~NY+nV+aPelRl9eusKtKko`_Jf3)CojG4rsr^Yohr@*JB0KlAKTcc3a4yx5g`Ta; zQ%5cpmcBkz%}nW~uVFZsnPXXf`BS})8sb)Vre!Uc+MbbHxcQTu&T8RcFC!z)Te*`z zpNg9789oZXRk8B!sZPF_v3>Zvyw7=0HQdFG;)>_WnUoqh)VwWRl;0-Zcqc@U!Pp2P z7oXk0G~ZM6v0Es<-C4ZQ;-2uuW>ws}doZ{qc;<`4N%&It)~~i`+5dMOR?%tUee;%;isyqrtg&(~imzE3S-lDvgtV4Yd%k!Bbq-TRmS|Up& znR}NAXJUUv7le&FVAbk>trk!1i*?|*_}H`Fl}z;;qpqDb-og8|R$-luDsGkJ12;rKcI|ber)IidhpT2@ zC_C=@v7M|hoNvlzP)YhmN(L7duk|*96txVFn}dNhB0s?a{INBvR#z*F&oY`Y!kZ3Y zq<>V>JJbE({mtO=vlcmgprxJWL55;AJv75lN6yx>QdyQaB`iegs87jD|IH_KKW}Nt zd_=XW$5Rq~vDVx;l#F^--x$(Xru^-puo`X?9VQFZZba_!=s(p3%pNqSl~T0HhATmk zaZi3=Kl69Kmx#)WMZQXhF)W=)d=;R{?UE?ckU05`;WN*47Y((8(5RY(E>Ch5C>{d=Ys?Pt_? z=EEV{gM$0upR&DjhcPpgq=!dHPO`h~$&Qc8x_Vg_y{Wp4-(-+^MRzJoq4%9{`v)Be zM8d>z)I=^8%!0W1oxv)H>HrvC-o zXU6fP)$ieIBKwN^eM1`z*Z#Oh?K8^6zt}?`<@%IvhvP@amblBa)9`cUqneY}nP86R zr8_q~w4mQwz?_G7Ss__NG~Tk{B=7{~F;CdUMwy?)2$t4QAN;X8%L(zAk3Q9j!28rp z9cciAU0;sl>}`VC&~FVhiD<{V&A?om&Y_=-z?6^W{eJJ23>{MwT8;%i+KZ@X34C)(m6x0t_wSiZLM10AQ0Ch)j?MC3oqyaPF z%o_9568z`{{zXXL@iqvA=5arC!8dn551QRi*~-{ zT@Ujugna@h{T50J@^r?Cn)6?QL$FB+_@oG;&!ce|OK|#%&I4hOF$=Mp)X- zlc1CF$4mG85>A6Yxlt{-WF+9-C>TIYs7ywKOcvX0RcxbtA1hu<+6jHEQv|O+A%84ZyALiZo4Ami#RUV@#e4uDfqpNWT(zLk0RLij z?^_j=A?wmrAjls8y;yR*NaT18dK`{?9ESD3Zw9=$N+D(@!+=6xMN@od%C<3c*}fGX z6%qs-0{;o5qB4baUG_gilMNh`2u`{TAUC8tQrCriyUI*(qGxk2JMoU_D=)&=3$sbET2nxTebXj0Lq`a;rq0nF!A?8`6c12Lzi zp@R6ZA{MjE;-VxnBbH$Rc4aKeO#$UkINGL^ru4Z*nnB8`iWjdv(2)iC_vLE5hdnHU zdvQ>mh{0d%c!6%mIq`YLqWqlXaznkqesJKyX+;CB!ZuM|#o1@iK-RHcJu=HXNmxC~ zxsc`$)@cs5woLW+lgoA(7=o_EJ}8bu`~F-kUIT(~?}MIka5(Y#wS|NWb2>Ae-BZY> z{CP`2wUL}Kti1obQe&d@c__B@DHepQaQuvAFsu>CsXhy?+gZ6lf*MUl<>g*cZQz{x78(WoqWDrel{f$`+nNb z0R8L@pCt$TSXxIK5o;^0RSB(~XSCLLLF558wi5Ig!FjRY7AK3N;KCg?!lCv!_^KE= z4oh)}1CZ@MkZrGU20P-d!^O>qBrTBUVY@mK&P)A_|GZt3;TeVOGZ6_m`yu%9IhZO9 zF3$A~z<@M~&lIU~g4BS5{WBFKdR7%0b``tR)aDU#m)~KVFc&1&86-^I0boH!67XB+ z&n(Y7<-W99MRZvEbeX4-6SZAVU%F6D?Yj2V(?|8%KHW3QZ8>8IJ2@>u`hi{YYJa9|XT?Bs^Hg{DVN(&yK<_|{ zJhr>5si|kRH;W;Zgy*t*ZuGpXa$qP;PjiZG+TLJdsy%J>`H}MTcWHLd&mWEeEsH9; zo0BgH_AgFW2GAmdooMR)!xvMA8J-ic-3YD_?DMZ&FRKh+-qs#G7|?rj-a98@@Ro~; zHVgE?4tVUY6pDR$Zm;+E3mnW1ig(8Q@4tv+!Mn~uLy#E>7)oABtQZQ$bLjyEzLh%i zMN&i~9cGBr7;b~Q#j9$*X46K(fn0h)3YsH;^N1279)W_P4`C7xx)x@DH3lX?7%A*? z))5;KqS4n}9YG^ung{tISy1gr7(WVlfQK^Spdn^?U%cBslcUE(a>N*NlL5GU0lADB z4ecidel}`?puivu)MA<HJf1n|HEG%Q_zDEklxMYZ?n0Q61cwDz=2Q*9b( z9K@blQ)LW{9BNdDTs?Z02P0=yz*nNhVfF__IgYQ}cz zmuxC8cfUSA{yX@ai+aE5#fjh3(-KzVosEE&_2a4a`I5}$vyF#$i4?OpzT|K0HGa^H zYI!9wpsqbkOQ*N4*2-Q^%Zq>CoCT=UGJGnd<|*IImsjXABtFBxT1Kwh%)sFU2!qtz zvfm~!OI$j{F|Ljm{Tx^KXF{n@kp3zPc` zbj*~2@Eztrd(hR0Hyu-3pIcs7M1N!|1iLzr=>8mZ-nBP?X1%eW>f}Fa4P5VXU59g# z5YwRg^b+DeV*VF$K6L7n_)JIAHzpSJZkqb^iO))e3Cz)=UYcRY+8PUw|_e*izhx!{T!9^@gH%0 zA+zFd*q?61+?q{`#xldGz;H z_5EyecM;k5KF~86>|V_D7fXj(q*DZuWX%J953#?_a4|l#`uSW8JDh@B6bn8=PA{GX zY>galdj6cG$f_`-dBs-&l}Ccu(?R(>Aol04MCsd7zB+rn`;mC~Dpu;XT!o?1P2dRy z$g%l{4;{5^>$f5QiHB=&);r*`$X5?Au$yX!YlLm>%yA3FkDcn*oiA^4t%@n2CoGKN zR*yWc0ONK}%dc@CY3UE>o#3)%@Y*||zUNafBu_5SeX*xG#ot{*t zO7bmx--ep3=M`j4r^vVi#vnleGQ?VO83psu(z3uJcZ4+`TFdpKljM3Q-tYaP;uKdl zwDS&6EpF_eT-iTEeDQk5Ca-L-vTLSra$7*(^V%uaQ(;>lC1T)3g=yeeO(A{^0{o&r zgqJj`U3-`m5~8PM6AC9D^F)hKV5|H)4Uh_$JNF+wu4sGthF*C}I+Y8!zj>(7mqdQx zKyPR>=xd6UUI&hM->;Ggl@+?46ehvGR#+Vh)7dMjzy|6q^=X9HO=w&pLP)Tbr3| zR5=#~E@OTfuYokLw667;m>hD*Azt%#FRu;PQeWG%YdaZ*s;6I*8|$oS?w4=wZQ6d~ z)b8TSdcEWGjMX1Y|LNu8Rgcm>Q&Ub(&bTWAMg!4h%SU@w5F4jeGuq!vT2bQ}$zLl2%r#ly;MjErsf1BnOp?Tx_ zKgT)G6<4hKGr;a1o=~02(X;8y^01bvz%g%KE+i;?;RzQBWpOe3K%a=u_C;c zy!-vI)+-B%p}-Vg#-wJSZXiXW?MQXeVmKy%Y4`?;Zi-QaR!PGB+O`A@PSehdRveDU z(1~BEi81I7eUr2Ei@iFrMG~)zer20nna9X_o7tBIaEYhCXNnFUO{&*twfGFO|K+U|7{e%XCRQfdQ3qL5C8AzNB)v|Hy& zD|KND5E-#8vRyDR(YJSRs#W|$I18&bQ^GNZn~3MjM=)-J-XNi!?LLEaZ`~!diN+rd z@S#LaS%3+q00&RD>}igi#H%)TXlU|JaORJ58PGBk7y$XnW*WTrk$QTELqnBh%;asl z8z?~zeV}7n?XAP=%qu19r|QOfVP6Y?=jbtb7J7{eL2i0Nf#S^6D8LjY)vf5ycb=4u zpBIkZA>+PFyEmQFGL%Flo53+l7S>T+*TY7yVqk|y0{94_A8FLe?CG1MJg~4W5(Tes zJhKjvs$e>{O-+pPi8Q@Zc*n3p#FMys{JJbuxKLxAN;!AK{LiP1$8Tu{>)^zpH^Zi! zeY7F(P_VBp8=JaN8(*~%oeJ$2(M?cQu1=A!I3Wq+<^V!9S|e2wn>5>mT)MLZi|2v zb<)a-{4`WQeC{tG#qq2B$@1T#h;?A~{&Z$o^jW;MMim}x*^=~ds zV8^rwOk$JSn2SV9+Shno%qSiy{rbUy8Jo0&p8QgD{(DP9(apiG%k5~d)r7!&X>@f z-+0w{h)Z}a;g0v_C}s*UiDBLo5tdjEIcBy~32rv}>P4$u6s*bfRoe@kc1>#r2ru`O z@~i}jnHxVdsjUOm$sBBhnoedB87{0qbG?jqosFyaO4`+GDaDNlmeT^hIj>XcQO zH@dTOi@#k+W0mcl!V6C10A8Zd%lyfk%W2H;rzxReNn-jSwL>-WV+QMVE`O~<7Jp9PXi(`PPhU4LJHQQTMT|yspjVZ z8+czji*IeabKs)Ewbruuu=9S|zDLAr{^LucC&E&yYSzW`k6DH26wAH_S=(>a@OJmP zGXVZSR)HEk9&yQ`rO-*{ zKRo)p4^%_BKMH&FP2O}o&fJdqsE8dQO_{GB7kW5<7JAe-W!)NBxb%Emmj3#jm;ZyB z%WAuZ_d&ciraw8*@5w!SXX8b5fvTO@UCW)b`Igz>3b&|T>mKDdKGMJQ?(^)s-wc1# zRQ@Bc=gw#Smw#4Ys2>--jd6Y9un$t8+Y5Al9uv3Jt1Nvbq*ssUi?j9F!bIi?PJ(oF zdT{rn=N}_wEd5_TgfaOOxOviLXsvH*^%#F7Cjfw6I1mG< zqE2GR|9-nnI0sJEPY04vhf(w(a{T!Ze(c3z7(Hf-`rj!OPzNI4obUWAKO22Hc-V9^ za(74lPuEHGQN#VeM{yhHBOWi0NpqK@i9Svj{dF2YwjV{FRc!p-YkTx#?Ea(g9?@qW zj|d`BA7Gfyy2vG1^z2gf^3tP|u}9D>>q=L5LBWVP6x5Fx-e9d|{}2Yog_ocrxWXr#!Okqg2+Azb)vBcKu0(jSVZ=2=I63@_qmtiDf>0(t8c&w7ipdDQ zcCPJ|#eRoLH|6Xd*A_`TO0_53qGC#GSMo1smj)!jNT3K1l#$8; zEej#&4^!J2KWF`%U&Y7m-=J!Fs@wcSU$)*S*) z1>v2iRO@KD6Hf#k-pyMUE{c{71+r?9S)r(`VWjN2Cj#pA_?~D|9Zr*o$tuNxLkL;5 zI8Em343w47i)AXV6I%X63MVKX)r9@V;p1WKV~#ik*ZV9Ilk4oSWCG5$-dT>p3n3<( zMd=kt67kB0g+0E~kQi3^_$n1(gQXLA&)VQgYXt#0!ZVd+74PD&KfXm?Y?c?Cpt5A9 zBxj5A-ccQbVUGw|q8KekyqiU0fj5=njUV|M?+b1uf_yrmYOL8_NHBSa3&?_Vdu3k> zQe;O{gve4-qA6AGA`s~Nm=q8l@rmhe=UHY@K?>-~XKL9vM4Um^9estWWINm?D#I(q zTl4bdeUcJP!2?`D{-1)VJ^A|$Pa4D!V#tyr-1W5gg%!PA*QjW{65VU{5J;A6tG7xD zVK5d30UuTb1W@oKWS3wxuR}85+U9=2l{TT2lz=Ny)#Mf+hPzlOZm;ZR;MD^R$!j|W zmakd9ecg%cmD0XD;&V#5i|*A?+v2YeY1!{8-7hHpRfLf3fG#v>k!vlM49d5P5F24v zub8P^Wyn9Yp-=hkex!>~!GcqrD=LY~d2fs3aM=Y!R!&0%Y@f=#2q7*W>Wh}kuSU2R zdHSOQ>WH+neR`KL)*FzVCxT_#C=B zuhhPBQ?<%1jc$++Ev|$2>q*)oq!H>{;L;j&eXRBU`onrx1-d{I23vbrZ(_^fh0LtP z*5O8|ioy}$sj&9#y0N$QSmYIRLOf(bEflY6vr>UO^l!IA?3$_8uT&*Y=H-Ovc7<0L zA{xO%4Bmu>1;Ntx!w{-?#C4#)M_FUq5HTAL%gxObvnykm(`&@mztqxjutTVKw$KT- z)F4}L@#$Pcfgcf}@)*QU|J5WS-I8*P!xh&MTuUP^TY%yE^%~%_1!Awi^#xjkKEBF! zzhV)sf$>1>;=m8>J%);yI$0;OU0u5bPIHY1z>$C4#M8|A ze9UY-3tYk=t-G`h;xgAubY<)jD!BAO)Qvg-q=19omjz#vrAb4A6%H#aF%

PIOw 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

a;0s!Db#1BCbzWcmup5=rWNje zHi|2L$Le93Y3C(dBRAiSs7g9&;d@&{E4?gx?&yLbyfnW@#%jP}hP`#DaNs-lLBm?Q{EWWF zi`^9eEVDZKsLwo$JB9u)v@7=H@&*^dtxq1k9}*EZ%V!uK2@R=LQi%Cen+nw}=oQj> z9e=@N(SbGRc7HLef|k!!CfFW4QiD5M6S4Hf@=fm#*8|NZuENlxl)>yEcfpinG5%d1B9YI)7cwj*EP70*mi zSB+8ihKt2aA}MQ04`5g=f?1j$nfiRG&fu5C;Y760NvTt zrO|e!8c{=0dY!7M-(&HPH}sP5T2ka`-VD2LNmbm%Bpp-XA8cD^F6&8%_z2Ugih43= zKArL$mtp<%B>M3N{Z!$3Emh77hDV8+)a3Y;fztWEW%CcH=y$Yn^bOf;`C8o5Q<($5 z8zL%U8M`JAzw@Fl#z;=C$v*rcX+ULrI4pRjqsKH(DP9|t_3I$aD+jH*fvsS3g)mDU z67`GXj9q$RggE#Gk_43VE;HUCVbwpK1{ey&A=_||rg83~$hspsz9IRI7TR{<;QSD{ z_&b@Sbz4S6Y&?w4Pbuzbkk>CbuE^EugpAGw>`_Y5B6yR9LHm!>av$6fQLS+t0~*%f z27ovaGU#9RYbuRZak*>_9;3 zog~65e0-|(7QWL35t1&sQx$vJFLtdb#eDZpTEb^HmsN9)2Q7=$2>r_Q%whEXMm5Yc;=GN{;hf&0p z$df8J*U*f?@=S#b>Fps5Z~Kvd@JO1ibMrRdnFZ{tc*||Lhwb#;-{E(ek}bbTAm6{c zoJ)yOfN;2E6K}+{5j}+fmMg3xTX&sZeCVo~Oi^AnCyMs4>;g1;(I#6sI4cXC)47Ds z2mBRSv_{^gp{!_f;paDVIX*vH* zykq@GygQ8>8P7?x{1Z3+n|Mdh@qZTYqIpr~!n{{6F#m6TqXnC+k{&0sJ)hZCR&yiS z|A-qs{#V?HkTj82!l?1MNpf4;^VxBj+AEk^{u4L;ckb?Aabw^utN&-*m=eJApVpm^ zS!TEgTRtaiG8;z)_i5jleNU$D6uPUBDJ_w?j}NL&_UbPU?k@>)70Xa4IvUj0{_#oLSNzCS zZ9moFC2fJ!qM}1QN|7nMK3+Az)DS@7N|O^Y-~q*Uk4iIvz0ZY5!y3 z35&aY`j~%3v^Ng8{eZjbdh(dbI}2{-#)?VY8FqCd$ws1l_!?ia|HY=YD*zbCQ#cU8 zIu9pndRGqIlGZ9wVVs}8&)p(>p^TdPbIa%b8}X(NKT#S{dk?2aqO*l}9dwt5o5h4d zg5i&*YFT`4(%rc?6C02teoc;F_38@GaHZ)3A~vo43Ly=j7*#8i(P#lc9*CH-HY0P! zQn(Bf;3^y`n&Ffx$%<0bLiMmu7M?DpsG{X$yZN%LrHN7PTaPyu#*^KI+EuoW*3|Ml z%e!gajs1kpC~tJRD&@L|Zn@wGj9x`^VhIT>RD*@Qw}8l{ECC^|h7Y~W#)&%GmRz}S zv9au9`R`aD^Me9WEg}A|;Y{nV^5k8(&b{JR7ywRDy!n7vOy??M!Te_dY#-kR3E>+s zm#zQ<*6|zepNKEWm56X?GS!-2IAm6DEeml#gS(l8B3T6ODQ0Ks@=qN@!8@!gs672$ zH-goUs>p!acasDgAuHwOw;o)gEkqrTED`1_GfKLB4{=F3;~>*0+!O2VteGNA5V=gt zT80`vB;XDB_wzAJtn>wkjbY$KV2ubvT+8Fm&l;Xdur^&?cvn;XTlfAaArW6!0`N?B zWn(^3>o zTV1H$`Tnl!_dEA}pX*%zLC*Ok=l#j+{dzthW((|h9r*LQ;KR4B?Ko?*d2^z*%H_K_ zBQ5X)HIf2r)TR5iy)rtsey1TqpZQJW#^2OW`DiD###zA81cUR8z#Wz-b&W@vd^b$8 zi|3l}$GAuDBhaAo?HqV3J=+DdLUzU{68XpkZ!IX$Dm%z8v||4x@yE!rv_8;^QLCWN zTaru#iRhrxYS|Mgfp8G})kaJ9xElx_I=&{gpK#>N$h0nXg_b@ihA3wq&g!AF2F50W zOhTRW7Cs<>MF5-9dx-@uemzM`b>nYgNl>CHz<^>kroP0{25;qmxvklX@Csn&?=lYK?Di2Gq|MflkLf^kugFe2n-C50QL@cYt}LT8?Enj}Rt8?P z*8Y1%B(=mA$%!}ea+2#vz8--2sVVQzFSn7>C~z*`=^Vjd!17lvrTC#wm*nR>+pbsD zzXWIAMr$*kUWW0Z#XV>hRGG3f&{(B}c~IXUNdP3v>W;KSr;Eo)GLX;^k$!AIKI5~h zt*qTbO?fO=NibP~v;GoD#D>leTQN^#myPc8ojM3ZvFbq|mcROS2#$y(7SF45s)bX| z@YBIj+Cc50qbb7G8^;^;9&mssbDvpgF&rMJtznptWxOjh#Ma_Wi}L##Z#M?x>@(L; zcmJwrKE==SY;5F)lsAV7t4iO5w$_z-49COc63*}DTH!h(W;)!fu+^%etIT(B40I}p z-{etc`T1nuHyW1)W0G~`rQ#A3952$Icj~BLXvTHNtY6lW8#2~!ju^tG3!Y{x-|+c{ z~+@WnFD9nI1l*jZb8p+g@Qf8sA^g|cP7GFiOqi~kiAJAW^+~O+nB*KhSsdV z?hz=3IAdw5<9NXzPTIaHGs(=-v0Lru3qv>`4YaBQtD!Edt>Gq%yj zyWg((a1@K(*!BIoWOgU$8NpuTTEKXKWo+S%rq`?YpMe72PX@HU`f)?eYt-%i#5az7 zC*qgq|GM=-;(V>2JS6OwPp!}UMa>`mOpv7eG`ZRp7D{}&Dj9W)`@WsSeC-VnLICfS zEmL<^rFS}t?QWfh$iQQkW3_StM|au_;Tl(Oda5V+XO3tRvODMa4g(C_wgeb0;>{x( z+5^&? zHK77Ipa7Y&TsjXFZ(Aty?mgcCuKUWv4bh1#nqLB@wE>{_3H<@YPyTg%X8WtyYme{N z`L9t`ZniG`P0J||))1S>iBCd8xaP(*{V)pxi@5!7*H>c3u6+@c<@p>Tc7N>>5(^Z1 z(98>Lu3h_gt2NZXCsUz%am26_07Aaq66#*VTK^t3+QP6#R%@*1g|muNzPp$+lM41+zuPF{dxc37eF z=NseK&0rF#zJ{1x&VL4`_{7g1a5@GYfJ>7(?E-@}mAZ_xF> zUm&koIv(VFhY|c&ROkbiSOx=RfzS_pLSGAbN_?`csA%laFxesErAxlbwdMIvSGc?1 z1KOv>)5-3^EoZ-*?#ayxzBs6>y!|Whc3-KU@>$v~D`21^Wa`%4tt`e*slXE?w;$fu zmlUx2T`AU1T0%esz_ah)!(wGZ8VGI%D*hQ+PWiu_zki}>zrl2=BdB#G^r|pcB*x`; zWmqI8?BpD2&#C=1017YyAQsbbB)d;ZIh8B)@$bi&iRiFQp@_@E{u+Kyv^pZbK63KW z!YZ08-I9&Gxf_mPcTBB_B#uPN!XjV;V3$12)0Ht1_aj5JW5Qw>Q)Od! zUwbBTvRh}y#<1vkn8bz)$LdE#22t=VJji|kKw(u=Hh}8@C{RPCa*Uz;S8&Eg9AS}F zWFQV_7grTSS=Uid-iSXi1{m!U2H*~fW3eSb>~)h^b8kjGTs|8PI1*uti!c@dIG4b~ z7U7{un8f!TiNdJ=GPL-TC^z`b7;rE)F$n3Mf=^oN0D=jyMd4%|8v45<$LP@iUpR1nkX#N52_TJ0L2k6xKfwRw4~EI^_a_szf`n%p5LGgt;L>s0}DJ zrOg-*dP;;{L?W*7rCxDKrPS|ITBO0__fZz9P%PLB1wo=BsBQR+=0C(8|PAR3m@ClyK z375ddq;|qCs{#~8%MYKOgo6axf#%=eOu1uR1;)4jqiFSX zz-L_wcBQfdHgW{oVE!8g(452%(ull{+&RI_3_eiTABYM*PlX7{C+E6~6n&FR`MC#& z5{ka+NCE= zBxLbocJRs=Y-175V_9N;2NrNnfVp9FV+kd^6F>lp`#CBj6vdAZed|T=p_n8kq*M8IuoIb`0avcc@JShl|PXKIi{r;>!!T?6Wx(hu0kp+GzRXTWP167{&3|n zTEdZ-L=yl|SADb~63;vXyfCFk3S*kMdlm`F}<|_`u;f6&k0pr^JKN;x( zNQO>0?S-QAuJM{^EYRv-lR_>lu*_W4Eh><&DbFqc&{Y#dF5081$cbxc;&N)B38b`K zB8{m7F;vhT*aaY6eF83S+{lQ6hQ@(!;!35+jVmIAha{NE#(!X~n^=e}p+Npl`BsZKe^;TiK$rdr3u(N z6mSNTgEs1vpC^lpW;67pt_)}iTZ+l{98DHB*aA<11OSdB25>b z+}YyWRbiD~)E)k!tE&*(6=h7he3hN%>xUT>cJ@*oJOxuUYN8h0BE8FSADuhran5P90@8wz3OnJ^N z6T9>%yV1vya<9T$TT>bI1y75xQiQiTbJW#)F9##mNTl$vkc#P`m>t zKG2;%YDPOHd^Y)7cS^>6N^5D7H(^RLpU7P|HG42MFqM0**Ev=HXKY?^IvL-$6ciJ= zF}-wFm&rBrMt3G4f0|`#DkWhCNjJ?^H}h(0hW=oNoo@D>_4M4C)9p8<~BgTpIx~p&G3P{OgV~#fO9tFR1 zE_fHM7~s14&hzg(%;CFJ@prMf@DBG$LeN5C-9pF8`9f{}LY@0$Rl-6$_hLx!M7`qT z@xz4|1rq^@3q?T_5e5^n!HbE93rX}7xzh{S-uF!hl}~w=N|ct$Y?dm5m#PYuYI>LI zR+k$7E)jT^o0XPZZI;cp00v{=CC^Nk4JAdm6oUqc^nDEIJD*yYiTPj~BB*SfS`CFj z5U6MW_S0c3Iy|V8G*uH(D`UY?6VoemN~$R?g|SMC0+MvAQ7Or^FVQL7^X5i)g-DqxDG#%!(g=9`^f2Ku&vAHBd)f%Kyd zkf0sZ0So3B0aMxCLE_B(%h!{tR?N>a)b}@5sBqNg1hDA_HK!dIbqPQasnw0)2psiR zJ&_6zDx!t#7f5GO>q9jRISe;H8Em#VLE8oOFY)Q$duG~Z)r~@L7oC3KS#D}O{a{_V zjUsLH#BWd|c^mFNJl{#Q-Lnb#6i~Pm%di)cwC&@$i#6P_ zm{|qzE5e0aYB;bhno5iS7QX~o;x|mm)J8eL1I!2HiU5l?>=Bypdobi}{pS8EnDxkc z_-JF+6)KK1b08f!7(>rlWJ4vGxaTe%zLq$=HpeWHa=85J@a_4bgwNqS!^8IsM=K0R zG%<%e5=ZlfM|++}n=?mimyVVgzPz0|`cU{~*YnGY@|WYIFZ;GfhiivmuS2lW5jF3Z z-wkBYi!Z=B*$+=hAg+rkQ%Q#Go1>|y@GC6Dt!O-T#~Ly9JHWUB=1^v`Cz$FN9*E-r z>&TDd7^uO~+IIs!1C?*GM&Fol-xZ6#E3AJ<^Byby`>rZ^tp4CwtMR)IS6Mfk$@d)P^&_{vn800vhB6#;KYrX_>l8*G_s{YoQ#EfZO# zCs5xf0rY5UA4b5GMEwAHl?MNTh3-!zX1(_#2thJ|JX^bmwU}T4BsWfyM!*s`wvvoI z%6JhjU)Dtk)DJfP6J8;}80> zd9R)+{d&KSh-_SQu=`8hLD_`-S%3#HFV5DI&x3w|?~%bqn&+Q0Pup-n{ZSW<{z=B- zzw>|pu=vZe+UCxFG1=yD;^OXaIG2c=j)jYVY)*CO`1`#-2pR$=i%DL`?myyPjl3ld zUiiPnyS&BR{}S)=PEW)Xd*XG^IJpD6r&ja>_35sECykMf$ta+ATB*kvmSm8MH+7z~bH;a$U=6SI#nQ)}B9n0(GjylIe zvkmG;72A)LP z$#6y>!yH7!j&G!y>_6kFnniN; z22M4Y69n)CAM?W)o{{ZAFBm*axvu8#v5m8dVUX-m?cOR>hSfIOksOzm!WK9V0Ih&-?x>_n8#abV$14bf?lyRbDTviwdv+1upG%Ja1%T~#2Y>pKV z>o=BDx$#2_HEA2vB1WAVOT$ol@81iTErPx}10x4zSEOtUbPl9~d{P%LI^7rm^J-1a zMVkc^{N3BS)cthusc(ex_0&U}UdIM2-NAayn=Fn!2`VR3J9R3<&@t%-oLg)^ZRc2e zS_W7J*ew>9Eh`RG_FXudJJ~rNoId&#*{$f$Dt>w7#zG7`)2(kTA;X^5>1|nfycYMQ z)MPZ%E%zENRteOu_hf~gTP)(Kiqu|(RQyHH5*c5W9K?B|e2JA?3PVbDck-*M`_pf? z&17PwFaJ%R$H|bkw5eop#l8;p)J5r4`TvSU~@ ztuYZ84BK2R9?9KorT4pvx|^z+>8K$k0-fu1+%@D(`mDW0*BayLX&W?$-s-ZkN2ib{ z6qggP9=yXMPWk?7m)*x0pOn(u1v9g8vm#5VsGMVO%&xU%$@!-^%wegd7*)CrEVHx! z1j@0!CuN7ycRxRlpt>}ki~MRI{)1L-YoOKR4&y7qaIcHj+Lz@ie=*87dm=kh${6QQ z)@(vnZ`(hc6WdQ*nHBS{<(gs)zCJ}OC&H6B%*WgQ7Vih>iFiQBz4+<~N8Ey(gJU|bSkQee2E1X++<5W* zTT0+g?+QLT(XT)W{~CMQ&>=d7w5iCgGGvG&M7TaFW^3f6;dHpptg^E8T}E@b&EGr0 zF~mmy#KTll)>|HVccc>j5%?t z0;vIU)@7G@En+oQ=O3o#mkIJ)jO!hVq~#u5;gj3bnK~PS`h|zme1(SI8Q{w(cN7$R zNSwI)@=ivrx*(mM+@$qVb7uQf!D|*dljo*eK3PK_x5a|r>)D+6WcP?)m5N48Ib4v= znK9j#PN|->p<&6MJJ^vZ{xgZ0@X5W76TIc(uj>VVo&R2@Tx#x*p;-+o7ljGEuj)Tw zvSMH4ON87$MUY;cd@lkC?kdAvN#Qi6#ZVq$Rjyo8n5t~GL)ex;g^nJ^Yw&u@Z@oI~j^ctf}oLfaC? zKnxi4vJDD=RSi=?(5LW)RCZ{U(lt$_l%)=y(qo9z_lc~6iKv6=nGw_w_A=yUz6BOX zJ5SekbMSCbSXUz7AkS~I_4kr?j^*A6wK7`7H_LVggop)#FlzH9APfM*zdYeriI%NW z1;EadPd88DtW!kR=euh3my9C?e&4^AM+nFE(P|ANJ6Ps1L&5(}?QM^Jdyf)5uduqu z$q!uvGZkX)$=FBV3Oe6{B2r#E+mLa}+#tX#`(5Y>GE5t1Z|P5l@WufE_ji@i1pIYg zcRGNTGl!ARzbLlz6YTa_C=)G7?IJ4}rin)zy6+39R&2l{R`~fbWVY5!ZfebRBBQ6D z_N5xsw(@WOF-}i=zwI~CUvh|(&n1X?r^egdj{cLJmz(m3#de~N^~ORL!wY_*`2?kN zMqh`0%VsNyl6dutDej$A)?YI0W_-@ndU%8*DWOSe#op2l(}Jy0{B#r9If@vUDq0Q2 zl`VpLY0)^kT~a!1jL6`F52Z_Agv%Tk)41n`b9aeHKfEZw_VCbl!B<_ zk@W9@Wf<4*i{r@X0s197AaoYJ1}u7X|Dt!$j<;gCj=B|ki3xDIZ_nsT_&N3%dw|TR zBris6v;G<%T`oOk`g|@694*5xj9IPtkNp|v^@b?N*sZH%-2yFP!#R;>pAey8bmGki z?jP`*ab1FRkL-@1^>xrc&u1=e(E+r#2B=+}yO*out))H|AJEAvv<)Y%l{Id@B;%$ zb9{0rT~DF^Yv1#4cRJ5LNza~G4cPwh6Z^aS_(kCIssO2Lpt{%>+3j3dv^i7|8K&|q^-LN##blPH;CXXOQN8xPRV=^HrxE-R383} z#&SeG4aE5|2>Wfl^=odk-7J5QfQDuG2F(ZsLNE`I_Kx)P;N1*JFo}-_;{8wjoV7w98i$8$7|B*qR(!&BK1l?isC_vAv6vXuF(c)aTf}X*+==;vmiN-K1*(m;v2S@<)a3hRL`#HPwa{_xSUP1iu(TVux|_J(k+>n8 zv|g3CvYWUgo3s~`wC9)fc`@;5Ea|IoGMO{!i)_-dZ1PXP_{*J|+3*+3#fW8T2^9PjC&TCxIV`xF6vkE4^_+oV@EeHip z4Na3D_wYi3m{8E7Dy$dA$^--;Df3?(tO1^Q&gOmr0GUx%o!C5;AQ52)QvyN#n9jnP3TA?#yK1 zuAGfOKHeYc4%_g$fkn#3y61CUThh+F#}2z?2f2C92VwEfZs-8U;km{l8BTj}D!hXR zUk39|uFNB<2)R_cU6`sI!ml$cf$SG#>{8n1Lu2CRaMQ_OBrDTDMq$il;t%7`ipN`T z!@%EgiAX*qKhq$TDHsoK$Z`C!jZ57C7M&ira(Qm}=fB;B-`RiN_Kv0Hc%=8!-4;Ak%JYTG zg&%VY^j;Pu;tGE_Q9Y>Uq$3ygauucSSG+Vcepx5w=y87 zrUng^pO}{}(a>$wRL0e$>ppvVf@pTFiFXYxq@f8vsQ_a@w@HwnXkgH?E)iQd(p9%N zSLge&_Ei^Cahy3}f`*t|#)hO?-iIXM>sR*cmoHGQ(g2i@*d|Q_sjKERs@C->%>ASJ zyDl0k48%pZHkAO{Iyr|V;2M{^8Ua$H3b_%aKsbrhn(Jz)Km)TsYkG4D#dyF2Q~m1# zf|(3iUVfwpp+074UIZ4>v!X1>~nm!kE~{7v*1OY!neth5LgB7}n=&Wvo4wrWX4 zw@Age+_GxUz%<`cua6dNtifnX)HW-h68c=LMFSrkE+JHDDm2~9;h$UcQ6VN)=4yFW z*TmZH=C$6QM3fq*_H;GpPPEzRnVU{F>*uw;4tVJ-X71|t(%q^pk4*1H+m01%Pl{^~ zFK?4%Y4x|Nda(Sm5L;hx+@6M0jrEU45^AHxI+9x3bL{*rEh(c~3tXU1X&l%E1LK7w z%uvR~=j=|;HjEmF;RsZ1%ICJL%Vh=eF#IXJWZ7sk7W|B0R9V&4y(GnB$H+tC;~`lM zSQRl$KBm}RFHo@NWw;O)W?~GOVPKchdB%HCKXgLZM3<^w$7o*Mq+6;l9ty!gd{J!A z?0S9C3H1}*@8&@U8&nkBi_%xgOQJI3>pOO9liRRG+HJr2)dcl=;7B=Bp!JU_c= zZtuFGu0GCp#PKfn*%MmUvpS|T;yZ!%4;%oXh9FopcgMT zk(Ue-KNtW=1JB;mzuWI$R)y*GLw)%`uzb)%GV~etIk$bo$CC;z?gozdq4Qq5hJQ6f z+oFU|Cz#b!xZDb(f;hw-31hZ1Qc)bz;O<}m4_Z?pz+}+Fz^swLVUT`4MJ@9~z53}0 zd963J*YqqAO?cKd3b+yaNTZ==qi>`;0qk%J3VK!sg<^;@cCUPUD5h8c+4VjH)OZ5< z)z?}!*@F?7KA$iKrip}{vQm#(4T&f;tB{(!PMT`+Cu&z{>sOlC^_rWxmFJdNJrohJ z1V_9(mBfZoIo&wZa(kA^NEUX)b*j((03NLfbtTwQg2DUCNcAA1mmM(EO^nlRVYM4v z&uF<>+cE&Oe6Vg%{M@u#S9Wh@idPouhMfNShHs3Pno?;2d!I01eRD)2VuY7G9Xv3V z!StW@xa(*uA@^t)9py?(ND~J<0Wuu1z1C2M<>fBryvcnigvx`IfF&j1Npw6DZ!dy& zG!k-8`7(mWdr>v9?suJk&3W}0x#8*C^STo;ZR`bY2XsJ~pE0VQC=EB3vEez3=yC%= z%-uAI-6Kx52oc9l`I_0`y4QuKV_7)WybRUk?paH3Ko1QzJ9tx%oj2>%x_?MxiU&Mji`;ha<_xO$XE~-6s#!Jh@_l5Z0qUrm^1+}$$ z<0suT?$h+u^sSHM`zQ8^(N6u{21=dNloxE?hQo&3Ui!Z)@3K+AXu?w3G>wKB!o(WH zp*I{MxVp78d81^O4%ZJ=E3ZJK=GyvL$CPmW524r(jaq~cF z!!3|&QfaW4G&_pji1%2j^Uz)^*tmR7+qz0iN!{=_Amj|T0-UxUrMx-wUg{;jxhAph zlDKvKNK5)$HG_Uh!FEA8$p|eWd#<{6U!w4%lIKUI)8xq0)vvChF*b`|PCgc^FQyZ= zlV}vmmRF|n|<#oE)?mUV3X!&O+=`-AkUMD{f+T@m6 z(QTx_?gTTV8bK{R@ze>V?e+`;cU;^B2T^SI-N2_GdT`Zar?3}xew2!5i+yMr8bI=Z zie9}UB<^NS&$Rl(HpCFZq`gvx{U;X(luMO7{|zx|j8LgpN1+h~rs&y>Qfo$_nMjKk~kzUO%B> zS4sPm;jodr_CevQLE?Fz#rBY<+kQOS!9qNdx0w zJZSbkv>9$|2ltF0@{lv_jOgaZc1~f=Sr%j^I&lWu8JjQFkcl$dsgIr$o%S0=d^Cz+<) z>*los?Zkzk^A`lgf-zp|H_!dP-E6bN2ff}i`4FA{A=uz!9_7-G_%?9%5C4Pj?*!il zG%`VecP>L8vr#k;luu)x?l=$ruEu_TcqQN6@O?Ay**%%Ft-EK{n1!AP+kt$Gvx(c& z$=Wu`i@N^X#6I(wYdZ!Fe+P`d))K#@E}s;WkGKD6&GPEZdA7KjpzXEzV#ghJS@h%}TDf#~uZj7d^;U*Ro<;Bp2l~z{e@E96`s*8)OBWZoPn&YTA zZYx0}yL#ID<2$>1Bl<=LCMMH{h``MFWK+VM=GK=}OU;xO+h#&xe=FZI+qufFa>S>- zcX8)cgjI!)9(WbCP4#gBj9P9p{b>j?EXHuF|1N8|`IPh5 z5-n41A673#mYdl(VPqt-BG;U(IguNHsFW6y{G zbq+f1l^`|(*^#9PQ}5||dAJN1f12shxp8D5X62dck^S?_hcU=!iSz!)7@H5{(mWW8 zrPr}am&14@IC{H%YlMEsIJ1VF)gP`W+Hw>JnqOYu`!JdOIiJPLfc$CsyEQNnu1Vz# zs5nNTfPTIfbme*&-Oe*!{&UWl4HSybT>AwJ822Fj*dly@hmXB!4Dw_plycMtaXRpq zJC1F}qm-LhbVS$e2L%{f?FHfhyfN&OZ;Ux!i;5jfD7k`jN;A@wgJmGibBL+Vk3N*gPdz26i_u!X9pJfa$K@y> zyuq&uqB@cb&+&tIZmNtSnWt5fFWpU`EG^O`mZxYoTR%CEIM4}CeIf8|6Hfi~EoJ>T zn@d#g7ae-wmcP`!RNA(LuOmDrSDGu6e5*jjLas$it%eJtyK{24$f4zE;q@LsjwWy&t02x#yJ3>n8Vx6dvYN(4Y3ij`t`By_ ze8j-GQ3;{@)i-x18v$9Qxv4gQQbZ0i44#s;>F;tkC9K?eB1#X9cN?qrB2t!IZ@8~C zl_K;KVhRk1H)GBAe&!N+FL5|HXLZcSiGezprCxVS@>63;5QIVN#81xpHzYkTE8a)H zz+A&qH&|3Z3q8_o5^AtGU4iy$L--^YGj{#8&bguaNY@LVQ=~l}bH7leXKsXkxrWFoC^W||sV1dpKJVN5ipVqxin;j_dEr)u__u*2 zyHpEh^au|dQc9~N>0Q$Z z-<9(0tde8W5RBXGDns9i^s(_QMuFlcYQmOtLULvNh(_lkq<)jT)yEP}$<*Ps2=4^x z6)MmxnUR|zWeK_FAO21K3YEJ#9KX_~9=|fCl}x1Z1p(!>g&hR1Yt z_POGpI`Sr_ifEiOv6z`!?6N-|o6R@5HcKPeay-Z2Y~z-mCKD%oV?IUCwj`=3Omj?OHeel7N^^|4at`{|&c z2KixJqY8{zL$y}Tr{BLq`F#fsLj_Wckkb)j)xT%hnCDAQ?00zjv|~q)Q6+pC&exY? z5y^$GlOlHk-O{waVVS29jP%v|{MYAn9p~{^_&{J;Z8(F(vBJeEJGTf7P$-pNn%1$W zpJl0?DqzN}E2xf9-WY%o90K;5UbBEvWii(1w<}H!OA_D(Gz$hUZ%l`_= zXkVvmd3SKq{e2{Czf?IwzQ0ORE^bV%nvnF1hAT}(M-Zr z`^aSF@KVeC_QcdAX?Avhb#!r${69IF)&EAot~mbR5wNR4|9=FG#*u;WzY(xk`K>P# zuLSb-Wz>yNj7|*>_fOBwzkc)fT}CTDVQ6F_ZepWmZEB?z2L7L2Adi-k%fkP8HMJ>#`vCRSJHCI(s2pP?dO;e69szh4HT{R`~K?Wf1TYB z+DrN!ga@$QsXO{&p7oWXbOMyK`#%U+wzS*YRA*2S)tP{gWt?H~~1=dH>#3~b4@{UX=K{CmPz4C*5?+Q!fl2*HZ zeL2u3%jH=q{0iN8UHe!lzT@-m;lgB*QN6;AL!Ftl%Gtgb5~r^>DvMrFvHzyQ&ci#n z!=N{J?Ywr|ey(5{?>XCRGnF{4g>l*L7DvZ_R%NiFi8dmnwHU_hPleUuhB(%W03~IX+ArU+ zmk_H0DJB-buyeNrp5disTuaNjM%QRvlq^b(CyU)di(7gM4+SnPr)bgNg4cfLmk7!W zub)4h)1r67%M*DeTdvzqeV!p{0=#{M(Thly%c${N7;E@->CZv`0l%)RaRwp3;)e>1 z>4e~rA-?bhq`sxgC_rJ(=zS^RR}-Bd1^kkl0(|NCUwHVg+O8M;TK1bHKU?>owQFAs zA64pD2pe4ewH`Z)4qp#@@wa0WbNA@h*7NVzer#;LTm%Xv0L2|QxdEtOhwtPrY>buW%R;eFP&gvig?jS_oO3u6f-2% z%*n`JmgIw{_oe2~YxBGgB-Q6POjdf!E5?}E=kAYI-}w4DrG9ZyBR%l3YW z4N}SGz_8$&#Z(Co6}9{tcQ*k|)zC3~&0#LicF2LVwrW^1DJ9{N%of+IuqLW2CC=-t zg!_ZGW-)~+MDh{&uL>5z8PJR-M3qhe6UJDG1kmwnljm$L0>a)dUGX{eRYVvKrz+r@ zfB9nPx$vmL^OX3)pbr;5#f+F_rX*C#l<-{tIOyg)eSHOKbn6Or^u>)0s5BoJbO#56 z+t~q+@gUF;N*l;7W|WBm4K-Z3n9@O{m&T$we;W5IeFTB*ch#7vET|A;{kRm?&9<1m zv3LFaP*zSX82jSRTk(S`-9E-#P7m17BW%LEK4q6Wq-Q zEcZ$um3*T5^^KL=v>oR0wVxhjj^$zAiPp~L%a6HoulvB5q-xG@zi^?d^29jIPxB6J zZC?%E_nN29dn>~&RuIVq3gzUpbGqLBFe>2Wu1+%miM9h#h0NWcE2CGuvFaj&aXn`) zkYcSmk+IKWh<*D3HCd5|uhFVoGSic7&7hSvwP0a-TU+9#$_-Y@dq)#{b2_6TsY6U) z>+(Aty6VPx%C1?KplSP-S?zr`gx%$@_xYE?>!QuUEV)1xgcT2DQm4bRiBybFw}4Az z^dEo^JCr^E(KsBl@KT}V4Ss5QTpM!WpEK_`fiy>%4=^(T0E2#Ji#{hvAo%lp12_?( zZ?5W1>y4dZcc4;5H9Q&3ExuQbWsuBwQR|Bq;d8=vlSzRsn=hgFv8!wUD21CsG znDIT)t&UWuFn=cO%Ewn69poEBpj&*AK z4#?(zSd01%7^1ucWJwVpEBr>s1idBCXaUx-&By~V5&RJYmEY*6H^qccEFzuMI{-$3 z>~B1(9nf0`M`}&fXbK#-_Ur6JKM+Ia&lOuyh2s%tN<)bXleT*MnP6^|By90Bh#|t0 z>X#q@yIQvfa4#U>d@?Rira*#(Ul4ucFv>@NsK|0MGNI8bco>g0ki0u;VIm z7cSUsoI@?U-pv6CiAg_G%wrlyB9KdS5N-#M#i4*e(c9 z2@Z?9xc8B!kTd+lrAw}t2ex}XzDUJ~*nj$V-utHUr-!STxZ~NK4rG`X)jAVB@H+(i zdR;=&o3_{<06ItF$sScP3jQw!mo`6!61ix^3lvsfBZWG`nF4y@tQ+cEwY? z4yYjR?;vxM=pq=w1+wV-A+r?q~m*k^|mx`!-oYoE>{AA5_&p&1~=y_D=lXvzon03fwd+C?Y ziZ#3pNmSKPVf7JJKVpnr`91!6Hs~dzbM8b&o;O?jh zA)i1x;j6T}kG3?_Ki;sQm|}TO_NiC^PVkOR@x$3gnsh`qM%p$~BgzE<^&Q*Y?H2^1 zBS6q_mPJqz!Hj5gi%6e!Ld5*Lh;Ts!m=yH^_dt4w%Emc7@|k%GHbOr;usa$X``i5a zFTRvVE}_CPw;jzRoMU`rDAsID&RC4k4Vnn^`-RT%fO3Sbaa_eN^%N$q0)DYnIIg(L z=ZZ;mJUpJQpEgX;%x~KWryiSzk1NlPd)0B{iF34A7QEFQ+1wEen~y1y<&OD5^C~88 z6qz`%n=oq5IHH}Y#U3=^Gk$&^_i zxdslo(3yhbqx(Qk_GQA+V3UsE4CC3j+?dq8#YFM~j>3;7uQ@;2UF7+P1%U9li`Gw(05kW3pCa#nr#SsSM7gOR~&y%cV-w z%}evkxy4+Sj|EdjJMDcBRsr~$^ZBK^Xi%PK#F|AR^RR2>KNB zh)=4xsitPFreQmmh7yvb?&f*xS}o>ZzZ6gdQ7DDE)zjwj($~@;0-GKcSKl0Pe1dY5 zB81mey7fFa>Vp!ZiH%}z5myD$WBCD&_$IfwhH|Ic8Z?}gQtRJU|9qrHNvx@w1mZEa z8hMU8E@K8f1cssj_Y?TNXM^p^4ISLEWH1>HZM3~L3+QqbHEP*~D z8$McAA*^b8s9Wi18yss}-NagFPhLKvt-V0oq<7KO;NnXo+H>H+f{H?ia3q?VMWZf> z*ru;j^*o*s9qNPa@QLD&jn9JlcI>= z(#JaO&jTWH0l$R0;|Wmb1@J8-$S}UH%&k*Jj}h^?Q-7(7NXw(`)>KN%FxcIb7|@d5 z)$k%PV(Yg&r`-!bpqsb7?e8dDh!4Vl5z=-)Vv?PZBvwtDu=4+0Hy771da*sAyG|R! z@Okp(-s!8N$ycP@hW<&K?_w>JOYJXCQqQ*~R5_nR2g9Rr-nTp8_Q3N|%?OD}_fMbu zu7B?QGx@S@zo&+1RrajSoQA8hqA%Sohm_Ac&<8_vV#8MwimSycbq)r4 zMN5tHE3!Th^XI3p*i}qxmlG}N6>uZ2J&-BFh-<=Cvo5%!cvUHJfc2pG-NuN^%1FQg zgUh=HI+xL%_)+JT(NX-U`wGJgeW~kYp(p~NY=)qisZr>`_zfVjM_(K{o{k;o1+G)x zq@;+^aU0_%yMPfJB8~1k6&YYa0|8H&dn_w;SLkA+e7F`wBF^g@??8d{vZ;CQyHLRR$`E_YRH>yR zeZUk%g)nn)22ms-pv0MPbW~B+zDeEMOh`!oH!Xi0Xx-5+i6rGp1`JqdF3O0e@sa*; ziwkc+Wr*N)^;j_?%#}c5Aq>RuZlA;0vQo=wwr+_q$?(QBaEveGt=ui+vB!y8*>J$S+=gaTDpXYv`H~!y$ zJC0q)&g(qCAJDZo3=>dj161VUgBXj+s{$P{J;OWFuTRRDTqn*HetOsNwYNHmpA6!s zPIEL*{D?^1aFC6i0@r|*LJ7~(i0|g^LqMcUnRr=+UtnPd!~kUKkrLMOFMJ^CT^yi& zY%(M8_r}Rd8!KV#ZPMUvvzHx@hZU|(YmlZdk*C#VW>p0l{JrSRZo^XHH2D~e9)-pALefESulaEF!aq*q zg)5VLT|=ML5pd#c!1GDvFvNDxtdh*)B^o5`1N>|8qLSc}V#%x<6GO-I#jddFcG_aU zAj5^fBh>@2S}j=}3QQ^eN*bP#P083@>+Sr$%u>mvS#^YII==QM+@CCS^rzEDCF-_x3uOU1LMY9m=8uK3jjGZ!v0*8PJTlC@%DB8315lZ+FR9U}Oe~uP zqz$y~Y?3EDD{_WxqIX>bp>GN^c0@Qtfgkq2Pa=J&z<$i2>6#D?!>BS>IX}(a*1Igk zFMEwb_X0)*x3~at^y$sr#~ayr>hMHYuWy>$Qd4>t<5_^O>f1Suo0+MrznHGQ zy>cz{?Q4FS_n`f4Q;51aY2~gF7rzKtLujuSMWxT9jW2zMf9r)=DFfLbF2?UaXL|Ilg=Fr@ai<_eG_*Nkty3E_mZe`2264eyx8|TA>83Eg$;c3jOm7`t}VxnBm{* zzu)U=zf);I(G`Q@GX{jG|44v{3Xj}>?quS5jNxze0uSM}dX{cD3Gtu=9(*edjFwb2 zuyPMh{Lh`t!p?7G_YQ(CsmdRcRCIDD!|$<(5|CCm>^ZhhE`D4b$~4u(Bq+20Tiq)x zrNO#n;)CE)&%Vq>7XItuskWY_lc_B9d7<+!WbJ$&7(8ft@#lK?KOY%kO2j8a8bT9W zE*}NgmNSKC%nihIjv*e$vzfg}76|Lxh08Atr3+lhRCjYfGoJIC`V4l|t$suN1S(-eUF1PN^#3$c8-tl{;-u$uU z3)>Q7?#FYDa#N`qFO@yb8woDa4IV$G7P@c09DepPz;IrDS2s~`O z9U$$+t15fLYbPP?+X(`u_JBpB%kN@H;jOaNu;2cBi%&xGmNkAG-B^8*_b>J0^Miw( zoG0z2f5Sr7M{?X3qF1K={z>|6y^vOR?if^4_TZ2GnjY|oDUcA6VRM-fl}Z~SL~$A9 zmqq^Y8nurT3Wqzyi>B&1B%CXacSw|M9Cb*N?SwSlcKyFe#2|lfXiR_rsgrza^n%t*4=15gG4?%%5w|#3ZlF6|~VjLi3i=1Twi_;i$qVEBuQb*F)m_j3{Bv6`ZdvFeb z_#yBJOV7TTyqg4jym(n`CcZkW%7KwLBUY4DCZ(9Z145>^fPp8CSScRnEAs#(sowyK zs%GgYdBK$8;7=6QlZi5b#PUKkc(+fn?^%>zhb zrsfxrJJjJ(!zZt9u~Vu|o~=WsT0JdOn*8s5UYriN{cTY93HFhc#ku-D z^l)86B)0{SKD2n#PYzT&&r(kj3|{X$Ne95mVoWGK#Bh7ZXSdzbT5c=_;n+cT;f;xs z8(t2!OC1pmbWFv4D)jk``&49iJ$Sn^Zn<-t{J=YSx3Qijc<=ESjo-VCA>qM$1+%HR z?Vf{1)xA~->z_|UzZ!!+b+3DeeydQkJKlM^E*p06kX2Z9XH4orpHz;m>fn>RVrtPv z)`rBP#R^AzP)qrSOh1HmYwXi0l`Y<;bwMUsX++vOD=^ae(x(DV`okhle*wo}BTy%j z)~Q20gAR?v;fP`2x6p(+5Tj1*kr{A@nye;9QKvb}8MWg3*~5vEyq+R(Gxz|v zb~&?~iqNNVKo_#b-4iWE>rVm5>a zkA$j_IKgmAkGW-|Z9`qg)2CcQL2`hy`)KHu$7d1VwJ7>|l870hrczE2@roc#jW2ub zB<{mj>l@L>_(c7q92XuYj64mJG}5d|J-TYOM=0KquExE_T^Azzmh5>}tF7o?_qZ3& z5O@g4K{2m?ePA#BvsZoT-`Hg6`%ifboHbY>#8kATU->8Xu@}7v65~nxg;l&rQ~Rr- zITN9RV`3OE#ei;yDn4q^)4UMEo1BqZQG|(!K`!eho+$vAGd0v+JL1jc*osgM4eZZt z%Yp$acoy$blBPmkBFJ+m)3RTO&ptTm`eie&n{)3>LqyC>3|HfCnQ1Q>$dS73{mL%L z)LTyQvY+ZGhf3#18L^XLO5_+Qq!}WxFa?XJTPgVH2xcKmE8EVrUT%JD0i0UUox90I z(zo=F0b_AYZrA*Q6n|~*MkA!Y=yaUR{$tBqZ^0MmfW{l~q)7IY7(dS=@8%w7dF!vH zrc6|1&fYtqioz)C*H>4S-*9#)(OA||q+QDheKvtVkH0OP>}&)#%^Yg*rFe?H@pH2>wEWKRKCBljMsO}@~n=eZ8vrxt#hU5l+Xy)Pi;qLE}5+ZfFp zN(O9lrsG5b0!tVTBH)aVqksPK>~Va9Llf}U#f#ugx@PVpA`NmXH|2aE{N;(XktAH| z>eZ5`S;$5VNY*eUQhQzF6MmZwM(`}F<`v8jWqMu&Vhu}$Bg40}gr`VAP$r4xXEbAO z*Fv>-_~A{Hk|KvqCQB2)w^ykHnYmjY^`2%1S=x*xpIbH?nf<<$}5QoqyK zg|VgkV;!HK-DH2#b?1jy5&g~NXLho#@ol4&HRO+(PhmGwzK~)W7{f?WwptP3i=3J; zIGiL{L5sY|nVs8dKGb#XtBpbx+nk?3n}p;Kq6rW8v=&XFt>-%}es+H%$D}PKsezFz z`ZA-??d|2ER7Uo;m43IS4Mrv_bHg@5(dVK@8e*) z3A^Yz&Eh`QC&axx8vAgqsl-H+eWiGHAiU0$`}|N5g8aDg{v2>KKX;-9Phxd(w-Wfw z32LR@ztQ?8C8AV1jTzIR1TC=AnmaxMQ-?dIi#gx!L^3QtCSPs13x3NNxwfc#@+IRQ z*?ArFH(C2wFBfgmAF=A+T{^umeNfJ7#G~Ecp6mggu3hT$NSBCL6K{7rs_+VA&!RXAbJ83mv#=M0u0U(Q$ zpQ&TB4u26-pBwtM`ZvB8qN#SeT{W#vD=6jV%X#%vFT~*(&_8qJpII>mm2=Qho!}hO zUtN=$^b@24>FH?PjPavg@cTK-IT!6O`R!gJBU3^Qipw?PFgC)V-2bcvO8}Nrd^Ga& ztg}o$N(>%#Ry;}}AF1RTr5p1ASA$d;jcRF+xRj4HJr^yr6{Rg6tT!5|YY}Z&6YcQS z`TSwDW&n(?Op#YwS1`$vlg47z53t5sa@QaVXCYV_EjhfeqKmlv5?GEeOA&i;UiCl; z&JnA65TiP+WF;PZ`HA9vab;Lk>>U-Q$PR4qsFJ^hVuVF(q-$(ae!NAX0-as%&Q{E| zD5d1U_|z@=L~*%$@p0Dqu@`(3?$5xtQT(RKnQre-?hi7{Y2XV0lQah6rVQYynP+hLFpG9e(H(Wc#0 zz_?mKn*g>=Kv|Dv^)=_(@uD0hkPbvxg;`#JL>_xz?qhWB9n0J3W%h!ITx7hr}z`DBh-JY!6d;z2qP zoP)@)ljD}LS^*t2(sT+ILM%RkAk`Q{sz_FO5=fa7^$86t$AiQ1urLbD2Ox$w2OFnf z5o?ASlXydjFxr?q1OubZ!!B+z-DNBb!aI*=luiW|Hc=7wZBC1oFfV*rkP*<@7R;~! zW`q`85Xq~MK#EgOP->WsGtvQD@lJvWkV?Xc42y`e6^V**`?9`(qK9P2c4ukZS}DC2 zqhM80O)C2x#1X(-1_H={4jDOhGKRScN0!k;o5{^5=_?vko&c+;Ji(q|3KTmG6;L3+ zZU;kt=pvm@bgO13e>BW`q0$S(dA1qmjj6I4uT(%or3x)Cbfw}jFsE%qI1%E3@kfzi zL0Cw%B%#tsfVr_!@G$fGZi|g$6nB!A>R?;5qU;pjHWAW5Ua+ zkpuBG0{qe;inPkh{*VW%$h)0omTooih1E%X$c)%3_b#aCPL%@H976<$;;Sv)A=cyd z!3M~hp`0-H`WD{WXHc+p;>npseU*`baBy9gRV@w;dD2y@G6iKfg4|JsT)@{o!U73w zkf0rqbYU>eUMdVve^ix_?Luw(*98s26xyf5QVN@ljfy!5P09pbccbj!sq#1O1@-!Q zE%U+9zUI($D63j=C4qOn1$OFXE`w2aP+eUZwxOKT#6&#hQqEs1!uw1UlG4YQUCz^} z$r~X8QSjh%2ML7P^LVoHma;t!{`y2sjV~JX^tS!erWU??Mf@#h&A9Mp9PtF#0&blg83vIcA*8NgG^2Z6bLG|UP`qm4Rmu3p zHqv;mMQv5-or*_JWeV`U0GIDk@`%!un<4Z~PI&R<^QHRdA5gv2VEuJY2g8WzI9D{ZOUt9R8+O5{dnlvZgwhRAyT?Ls zFRiZ(s=Xi?JbzJtfk=c&NFj%eAwQ)Gzo2@8$9msOl>wyZyX68HOkretHS!o-3u8r* zo60dTwP2(puA9NbpWF-_NpwhgLL#qRQLD zUhH5Jjo@tGFgFbmzwC#iF_?trA=6@ny$#0t&k)BqVHT6&e4W*|tiGVmyP{7tX@vE55H z(=`O4?&m0kRB}f3U2SwO_|#k5PQbDYc3Lv0LlvpO*XbiMDcq9#J?IfYp2>B9%|y%q zgc+bp#2hGN^I)6-6?pFp-MHQJq-c5wQKl{folMA6#gu~Xcf4XVwd@iI!&Da-&eprk z264{B1ogbIoIzSmgpAF2siP)NLW1No3}}chy%WWRhFm?GY=B}3-6$||p^hT+g%A1H zq)zC~a9UTSO%1a71F9|sL^VVn=q?m#M08CowxFAMNDJi@88tU#+XqyE3|GtkX*-QY zo~@;6<`0UZA1uXu6H-)357K0TAdM4MPv z{knAX{t5-ZA}hKw)O@lzv-Bg3^K;k@K=$0<+fk2IEsw`a0*O#~RPfN)%(IF&AqgNCkdgH?9jY}+mvF&;}e$(jlI`-nm+3Sm= zGTDr1qU`s!m_HDKVt+h0tU>pnDq91>ktVyeY zG>kwR>|0T?$e8O}k)>O)*Vm>eI5iGGDZKr}>HQHk$$sVH#|+uiS*cg$iA%ZR+y0Yp z$1o7*oioL~C>fR=wutR;+im5@oi6fDy%1Nb?WazBv>E%ZT+Q~=RJMle+b}v}y=2>D zYgb-#?@{{R#D`sMKRPWuDuA#zBDB*M{)uyL?|kcSB^BTS7Ti#vagE(~bXH0!a`4YS z1N!rL?zMjJew7HYixIuA_M~r@1=WfK`=#R+3T&X)Kg(-UnVX>psmLFVIQ5b*!3ysn zL@1JMnaKDor_wkyxIq2u8=D{LpSE&VR#SJ^w(~yk zQ@_N1ryXt#L#FoTNw=o!N+?;(ls4}pQG@Si*=~t(6bj(dKrYoqb3?!?lThZFvL*H$IKU?<={S821B zV9AdtJj87Sp9(_KV+vSiZz)Tb0$N^!GFW~>ZHp?y0&sBf7JOZ$Qjq?fs}_h zm{D|2+M$i*s7O?D!YHf0jI7 zWIy13i@}j2{dV%gZQY%`ca{{Yn%XDNyl&cSM(#Cttp+WYmT^%x4K2NKS=Hw9{Cm&l zY%4sqU;FPo3-ph@<=i3$y z&U}0^S>Qo_#vt~}g#!9nPwd0IQk|r*-g=A~xFqU%7k4TFRu;-17rGkqIq22C;C^EA z)vzzBH7(=V>bRCtmXSY2eeFyD2wKE^vLEqbLHc{Bf*n|s=`4L|;ic9=lrKa!Mt%$t z7vywBq?)Q}ZYim}|HBXT5Uq69^r8PVx`dzWes0|SJ*;>;RG1-7z~t&ZFrVDh4MP*3 ztq+`wcCgQjZH*n87v=-Cs3uTY=U3oni=Uu$$J-swUreAscg7S&iM=EN>zg(&v-G${ zo!TBLAS%0Rbq_yZgb*5o&K9Sc4179`8}v(JP*;FuG-tbLKlDV| zr??A@Q%;YIkJ~Oka_z?eDCME6g#rXbw?#&8>l0l&)vR-rrCSOf{SoJ)rL^nqv+8u$n8&mtic|1U8Q?$(l0%k{fhvL5PtZ2Zo^HUAX0uwY ztSrPTa-!LQA^KuA(o`hc+-BoIz)U(f7`$kb!KQrvzSrEvcPU-ay0L$sm?rooVsaXC5V`ecPKZeYqy%=WD%mqw}YS z7<-khgdD()C)fg`n{S_X-(G9HFMlzL@)siqFcr_T87yuFJU=JWMv-S{IUJCrVpy*C zx0deT`KbcW;i1p0?Lzx&rvdgq(;~g@kwB^>;;CYENf^ zVaE>MfYdxTQqZ?}-u4yYA-YeKz8lZw`VDk&8673f7uUyGEu#q-)DL^0!xVqO*hi!@BJ1H^fXO) zcW7Be{w%nRL)Q9%p4L;}S!xP9)Mz(cvzS-!Z5}*g@tU$KaU!X2#xRbB?!+X<7?T;t zStrwshWN2YF=}&^X=Z5@i)?XLV{5{c@m+tTo4f8?Zf4d=vBE+of(YZR;L$n)=5I}x zoZx&udr2=ua0<<=-{ZskW{%2oX)ad&*ssP{Tf}_1ZvV1JT1-OQXhqJ1r;*y){8Zo& z^yS|^G<~f_Xzpo+7vf}}CPT`mr`7ji1{#u2O*sCs-O^lB6@lV@7I*f2%ZDGfk7K^_ zG1E0g^?#@(6dTV5x{l|wR>Wpe`=BvNfKXB7HhY%xV_~}>5uNLC znGYE@`C^NO${kLd!v@-mcfQyYaL$0hYblkdrew* zS4zW`m%6W4#*e3;r~lgBwq&)PU2*v-cU9x8vth{F#a@9ksl2d{Nqdy)(}&M}=q}q) zeIfZW;XK26AE{rzy%o=6slwiN+s;fw?Ui{SwU&jq5hcB+syTl7)(U;!$TsC{6|UJY zQ~KreH5@R#L8toceU`tDpu;qNe=@q1`ib|Mj)b{CDfOPm!7T*iDA8P51cwie0sNlf zBLE2LBXD``)~Tho%PT)4KI`5>iA##qcpbT*S}{Ip)CU5?k?zjniAsXAcZfgIi9azG zHx(mu2~lDyOcPhabDHlKRH0%jL$aEKyFiwzb38vI*nV*a`*C}H4W#586M7jJV{wNuIzpK-zV}RgUAtXr+zEvmG@luiqjLTegYXS_ zf~3~%bWGx8g#7GTAqze0Em$JM>4a=roXC2#S_|N+i(oQJ+Ey}b$cTMBr|1O(`H3Np z%;4T5dgE~l1|xUU(!p8*%APGs{?&)OkG6sW6+9 zNyPC=o73><^|4r&k5vW%n2SMB#$;zVX5RE(74N_*mq~NW6#B5M7yjZ0SGf}CrLvE% z<*}K}oSxk}nSMlw95#!Q0%jnA`p=w~!x-W$vo6eMDf4E3>jz&P1E2KgzkxyOZrPV4 zvb7P}jLlg(+gT>K?5h&zRT8ppc4irL<`jUkZ}H~nS!UhQ&o(>CzFC{2F_uHv&elZa zTDj$TOBh12IX-TA_Ca~~=5swPbL}N^LJM*q9Oc}c&%w=SM+9Y?=!Y&wy0aB%DbX^y zgJ2nB9!L`G0#Pv}A@6QNt|B$71d$&YlpBmFOi0MJD9Eb|%2gT5DXPsn0vv3LMiLK`R! z#FV^FfDP7`jN(dOo{TPzif6WqU)2`BO90Jx7H^J~ei$o#vt7EYU-~7ecx}66CZTL+ zyJXF+*zKV7JFaxjt#n_%egN$uy$uEP_TIIbvj`H7fdyOl5VfzdMh~2Hfb%g<48AAnFX#g7y00C9_j{qCG z3IsSiA^}2T)u*#nE=Z7jaFt6io!7$(aI>m*v;qPRs$JZxLshHTuz+`P^*w_s=ftXr zuIjj*YWKRTWYwAkzN+x9n&=(Chp*a$uQr~qI@h4)&Q29cvL@52Hmi=WK(emDpf+@& z)^De#RJA$|SzqD+b#?In`?^M2$?kdst&7&V(8SljH5xa2mIydw^ z8d~4Xf>7^26EO%+zDKWaK_vwzy|ht5CiC`T0Nv@QPWHBx#H;Drt((6{Y~^jZJ8fId3XUNtHgXI<|I-Yj;@LI8 z+QZld&T8qK5;bbzatFl%sJ?3^hDE?`kWda$Fq50g^+p}fNMIMBlTU;_!2{)VM``A; zx!77M0N*)5(9FejKD35cRw>yzTJ;AhnLbpi^*}9R^j&;AAorhDTBmr)`FJL=a$V&u zxc-rOMuWbG@PYnt&+(^D!Jdrh!cy1!atM8B60VKb>xWSi zpL#LK(iLZ8=8hU`GgBF%F#U zRB#q@-3G2>2Mav@baEb>eP@66WC0>y^VI#lzTW7 zdE70)&i2E?FSi-2r2|0XaXOrc;(?*UGtR!D2%Pg^uqh;bcOZx2>PO4ZCPQ$5uD2oL zUK`Ti8D$X4oE?2)YaurInf_s1GVebFjCxNY#&V3@IS77}=;02d-jiXA7ZKu#hXwA! z6|iGwiA)P2h|I^F4EXWnZsLd*$QO-Vop$xuRV=eWo!ZWrVsi7l|7`cByP`V61#~f| zYJAxj#({n5O?XL6f4Mm_nwy*{N}b3cz8vyI^_nwk4R;2TpgdG|NlVm+EPREu(pOLS zzI1$Q!RtJtdP)d7rRY^Z<#mQ1EM|2q?k@BP<#jvp1MYCl1l@D!U+a z!Y1@}D5CG&+vz=Ju)&_+L zg^f>-ad~MfUwPg^8$l|*MquCNguJ;?Qo(Q=arHLblvJQVgL#u4x21zkHJB?2TBUxd z3BoXs<2XaPejT>5GYFyP2^l$pDpHHouUUKYFzs^B;$<#PVP<|me)sbJGmjFj02)Jh z7$Q!Cd7kh->6KM#H`4rfPsrV7iyjZ3zR7eWV9DfL4jHHXuIur{;t%ur*$-U?dzu-y-{w*rB%D#w>5!lPotJL+OZ@@VJm*u%5FQHH z*NC~jna!6B6~5bXS5fz3960hjR2~g#Oo!@#7IJAi#~Kg@AoYbI0xqkIq{Ev-sd0+B za4hm%2F2x?+DB%P0|_QVqjFzg)*;vha)KKPzG7lbaRb!(WQj?25reP5cfMt%Th!LS z96%|E3B#_0hOpV9L}ejx>RN1wo&uSw9l_4eB8Lmp)cUl{E}>uGi88zO8g)w#J#1U~ z{Z#%2*MTSMHVaBOZj<)Pz_vv{^Gwwyj^W{@hAG+~E-QuCm5;dFu*|N;E_TZX0j2r{ zf57iY-?amu`qbX;$%~AQer)VPz7Inr)w|ShoZ9vpbIth39?R2C+sw5!VEr(VDabUC zZ)tb+sY3{F9~z`{%&U55=Mz5ZV=~86o@85<9eq^WAy)ust1XzhpN8J)h~6!00nUZ6 z?Wf8*OWN_cmCk4 zmb&79w-5Nt1dMN-x}|;oe{@i9S3y8npPfVZKj8y8Jt@T-|2uqOguP}aZ{#6t`@fP0 zx6E%^T-WoqG(1Tj5bu~>zvJWK>8Wq+{XfZrN0R)l=LI^H&ol|0>cffu-!!O)QCfh@ z|InbJB(cWF@+U6n{|f~*_KtTB$o@Zj2W4tQC&`1CTK}mYOkJM%@9KekW2anpvCoMM zdP2DUKdJ}m|Jwy^|8Ey`{J&h#_k&F*$%C5CvD~JKmZ8`G)jN1K^?GXe!@$R-cV9ov z%`2OQ(+jQdDo%egQzc$xE0(#A4%_~RLuO6FURy4g% z|9-{yy}4p2X@Om|Zn$|Bn>^W7>xylS(9b%1qr$W^(`h{Gymh~$gm2Y&zLM|Tcf1^8 z`h_Y{V8NYM@i#@fUZP5MeziACE){(CESz?EU2?hddP?wgG%|5p@5ez6((#G6!`r&s zFWVaa|Jw%#;}6@KIW5hd^BC_?@*|>#Q-rlj4S8EP#&hLP+6O@go0D0WqJ&Bcp1QrQ zxKVF=yU^cbw)DoOHP=I8+u(@n`pG=@g7k-C&y}AgD3!14qge{_jruB*n{D}8W!DAU z{R}5>m<9NUb^rPTbX$*yGpLJw{Wx8}5?jiC^do;^pzMa-EyP94dtB3v?eK6q0PRQ$ z&Fm4Qdd3LWP$LV`JP8p@!k2+~QA5*wPb8zsT*zol)gTcM;9hQ9eRv#lU$*vag%- z3Z)e2jbU=k@8ei=tYk+k^BhwlRhef~Ek72b?GpqGh3dvW7Ec_;m3y6A(En7*UD9b+ z$iadoiAqgTT+SgofRhx$I}AirX^s{HisxK-RK^RIG#3F2kaRf`(~aX!6N>NFh!SY! zJAxdJYr6dLBsrL{0!DPF(%Y83DzYmG=`JcZNQDbDmj;g_LyNzXP_AgIdrMq0UP`oY zt;@~p!Egb&`Z}gRQYg5?9*zpCK}vB3@4bO_%zg`k2=fSJl7yaovxfrUo^p5LtDN%Z z`L^G)QR;!vX||7=H}Cma^z3dmdj~0;zDwaS|d{2=y81s4HTB3NUw7nJ|r2Vb}KYvmt z7C1i=@$F*3CMM)^x9`pbrB-vAH9H?;N-UH4* z-T#Hce*b%U1xuM~qmoW9x2;A!xgEG34WkFF#ht&1+e}xGJzUR$EaRwhhC(W9Z{N7289lPGF-iIsnV&TtSD7nD%Dm$NwZm2Rn_Mr#uESG)$yCTaOuCf>X zjDKlFDm7AZ_$u16X6qcI#&;1*{v@rInh{t+?M?(bnam)j*N3#CMe>|fBQ6B?LGJCN ze+6N_06>JPoV_sOV1SRuNLKY#op}YiUqp5o7Qq`C6xYG^I=(%Q_eun-FMLg43$4j| zj~1_ISivq*^MYBa1^1`u4eSv#0-la1B}|D_=QB24rj*-*NhF>j9*}(M-DD@jb>5eO z!^-9vDXxB}1>WTAs7z)gvyH9`9Bd7%d}B)sPQJr6VWE3@;cJ>%&-}9*c!VbJ+RfJ- zc%ef4^S}a9+|BwT{&c#N+2T^7$lORcJKMD909sRCGKv-qVsUwHkQkiIIlk0hWN#6A#5GmPZ_LtziIoKciK9 z%o3DmEc*BeXi$rch^Rjn&-oL}u)`d|@H^6;)dgN}n!#*0>#NzrM|Q z1WQ|Ej!C5-`4XOAPGc3J)}Q%P$NFcS$T2IFMmekz)`c z76XuX*f`H{)0!f$XeTZymJh1$t(=qw5zFYo5ZoTCQ#?fQJ;0dB4QA%k7({HL!Hj?G zS;!0nd_ps#3#n&s##0&;ii?)C{C_fgx>~;g(n%QhRYoV3K7nrvkvIWUdp`>0)O&Os zovk8*rFF*iw#RP9qWlGc@0&7qYABep#SHqdp#5@}SrkqW&nBG@Vg87Y!X-CDooJ+_ zrA4+LzRSH6qeREE{O@BPsl;C;m_AV8jlrR*%&QvQ>8w+PH=?%&+@9UdmSti&ArSge zUbBc^BO7|_A^KdtR>nVwwCaZJE3!=lvnY05>}H1uckVsh`Iqwe}i<$77v8~OOEHC(i}`g6Fr$l zwzNNSy;O?z$rOEVG33rY?!Eu@nGgW_V}BXM3*Yzr@W-}dIB$G0U$Jt#aMPatiFIbq zYmGD5j)dtd*{)F$AgjMg@2{r27l=iXZX~+hK2_L+TUDmzY0e0?a2O5U%9#-Q|rXr zpIE5Vx9qO|`B2Lel)JsZ;VQPYfpOo|g3XNw^5$DL8ri)bCjo=g$wR^pZW&3x?hi zqrA=wqMwO(e|MmKP=miVKl;sfjy@N*Yx3-POK-i4BPfZoCkjfDNSShJREJ4;Eo;nhkE5b>vn5kKi-Q9^om!$uyA zIQdCZ!qrE^@T*!8l>vq67LWDLL`X0`u@4ls-V&8$(p@1ORWQC(> zU2NvUYSLee5qYU$-BBxH|dSLOF{4CEgGy1G7n&K3$3?rGt?UkKVX@vmU zS?p(COKow1e(~6L!V~?{J#4CVtze#IP9cs-8_2D+NbU(LwJ8WA2T7*qxbRYeu#Zk^ zTJExr9t3U(u^DJJp=$B!#Pu<=lBxK*iZF1dMa!4cYXiy2ki8XcHv6T#R=1cgFh~MX}qSRJ*#aDaPWqR;dd&*Zo9!ja`s3I*? zM;2D6@YRGCI)$oudUeE(kRbVmwJOBg!o*rYt~Lg!6AOqxaQDs=J8=B2w{a7bbky1Kw}07$`06P z6tG!Nu>^yk2F-^C07s>y9|yv;BddA=Ra*$TL~P+X zhNw;<7}8sKb|H`58+)q2W9%SV^2yGjzCRlDoBez`MgQEQbm=|VtODXpy|ma>Kn!~w zO+H`m|Kwafl!FMo`fm8|6C7XkB!&Wr2R0a%V@EXDZ_AUqFOp$_-Km36d;zE{!nKj&zXpliv2%vU_9y10KVGNQT zIPD%r$oUKu;#s`{dkpOO-i=Ijirw3y`wWgl&G*UGAN7m99sSS z;cg3#h}hWe73zk#sevx4gW9;;REt|GlWH$w2YEvVim`yZ8i!;26j zT#m!HdM9I43!ZZyRF49>6L8~oZc@z5yv$4GP&1Oy;WUp#E{&|3&3tO zAf%@zJbH|=rxikyo_>7Az(VY~jF#x_g0C?^rX`xCni)KwC_Q)u|Dj&;$rCQN2jBF3 z?J&S_^h)_IcG8@GRKYW5IJsB-&wz(@Z=3+Y`FDV!aCCm@jjHrm;@%s+t8duRL$~V( ziz6rILkB)rf;(QpmbGQu6`E6;o9Z&vC%<(w55gJ}o^~Wpe*tU4+TiDCZ_oHE@Z34y z;0ag$fL}g4b^Rq=Tf>9_+j0D@k-4Fhk5@+65ir?%#TzneE7O*01IJ0fb^Qy;G#qmi zeBspa_GQmRy|tX4Km2*&u>W(!wIPI9I(_!AUwLd79?~!yt^s&XH!K^}cziP_mW;h+ zdjD||qBiyX|6=RCznc2uf6bE~2qjeMz1L6$DF%?<0;nJ=1Z;FsKstopAs{LsXhamG z8H#j}-b(;Qnh->KS5#Dp!{>hQnz=J;{(-ah`DL&DF3;=HCQo^%O+5~uF=1#MNuAOm zzqxc=nq4w|t8+SUXFNB2b|`p+!nZQ)5&VaTmVgAJ{j31@^$-;H<|4HnKe zyR@j!oz@dq{!;ub=aq-OsbX`(I`e}kL;d`flh*^gb!Myb5_KLFw5NL2w9a#$?O*b~ z9KiFL>14hyZK31Pc{%3X3Pg9!PB;GhLW+vU&P&awq8jC*nm%kAsa@&|UFS+5)C!fw zYKTTwjBdD{ZZ>2QP*^;?ah@2XdGJtoxr_R3S#!@@7jRlk2whmV{JdGfWL|W^=+qS^ zwV)@ht0!6ch5N%77U-8e$psZ3`&tQ;+FGN)3+ADRMit#=Z`sYs-R4>m#$mO~`n%@m zXlC{7U$xV}R>XbDpOT4+T@_D2&baZV>XFWt=J%0CnVw=HT zr;@1j)!xsm1loG^@Iq?M((%p$_50%br0%mD=XjkK3q`5lAL{Ta=x*C-vNA1h)NDRo z-dKffF2-o&K3gnUSSpTKMEL0Lxw>D#Exz^HtnAu?I-RSd>2fk{LDDxF7j$S(N0$Z` zbc%F$BDyr|bT@M*x4(++(C<=bXq$@rTPf*6vJt!M&vrN4cA0OwGj;Fo3+#Q<-FqBy z>dIWPQ7|^8Et{n;>!Mnc%N~F}^aV@>uOKk+>-$``6u`jxvX=89JK@mm{E(%h z14i-?Ooc6f0z(MEbu5z3_a_J!;zWU6Tm;r7VcO0=K+!*rCJx1LG}sjaOb-C8$uPC= z(2GJgSIIxZI702!0GIQuRed0OA-GJtGx0q5#(uEZCxE^^f{}9M?<^usgk8kI>_{+d z`{7kzkTnr@1`94_K84L;;TejT@J9*N>OGraZ$ZF)5oRU{kj{iM3L!HUk&G1Z4N``4 z2gtdDAWwlg`Tq6tyEs0k&W$;liu~)^tv;@JGU1K z@9hdmZ(NAuKO66LG%jpH zWU$H8o|#xNd%`E2p2}_a+AM>?+$o={%C$EcbAF@s z9PSHEAt&_eUZ>@UfHti` z*3{)W@J!%lqqij9O(WAV2wA8H(-Hrzo zz(*UT{>EK+Do)}%_%un3*?vZ=MS3S63Yf&>_)b6a{Ug%@UpiH;?%RN-pGc73oc+}ro&wm3p+3Tgu^h2oP1^6<*^8|WmN`%L zuOQVi)Dzyct|Cki*wNyi-u#ktl_5P9f?b|pH+DKwQ5$rAu-W7LD)ryJbi+jzuFhB^ z8tnHi;jIiQ1;w&n zRV(joS>=GpEWYe~|BO((I84Dek}_2{V|f1<8YEWMB&%HZ2RWg;xcW(%TbxhcUq3A5 z>NA0JaAIG*zE*Wxhfk#KRJSm{E$8h(WOL zGu&l-x7@|;z@>gJS1P_~>FQjy(0Q5d*YT6Mc8;k#Fag>yzK@)IcT=?clnq6-iXHiNiDW2`>&WSHuVFiV!q3WJ&kx4CHGb8T3EEZEWlZZ1>~;-AR9V> zQ6)I#FVqEexuFwgLWq+_W6yWLkRG?K2k0=n$*A_nvkDlX!~_d;CvH9t`&sj(x7HT` zk8(V6>@8{Qr(f_at+M?jxF?_f++52|e=)g~H+$%s?MsTlU{Aar4McziO&cI|nk0$3 z7Jdqa?W#;@)4GC-nJE>v9qdCbyNxE%06IQ}fNosEbI5qf&Mh2X`XKeCQ^sbdhZ8%; z9?nuCEkCHQcjs^-+(zB6aXZ7KId8g3!~nSYgApvcI#n-{9S1=}@jBuTZ@(7H4)qxM zdA}gQ)*tcMPh1LUbP<kv$3w<`mIlgp%2Wy;k|ZcXoh6}uh)UR z4%f%R9^KIUDRJ0(ykd8M02OU6ej)?nLJs)MG{tE#?`>bYI4IZR?N!x@U3 zup~L;>!Yz&hLW-K%N8YIR^m~W5Kbw@hAaXxx%^Ew*(=eiyl|kz_ZzWhcv)W3mF429 z(!;8jWaEq6gYLW4B0R#kY)FlLw=NrIJRiOxR{wk0*~d>p$QQ!7tYJyrAF!61V9Q1t zO37bIv<#VG$>YisBdXUH-nC^TeZ4u6qkCws%J?weWOiIV`0#}>qla;5h-m8VBr^-0 z4TsRL6KStai&?V1=oN3MkzCR|8SHpwa$bLWoy1TT7ry;Ls`*pLYCz3($j+_vS7!%a zt5+B3Yzfif|5c&BaV%}uzbusYdE2MHd6981Xee~yu(G~&FKsVu ztGS1stXDZdxfglI0JI2ir+35W8+FbEtLcTSDmInseiC z`F2b~(=2$y%$Rw+M$hl*vbNm0_p*YC=aCpHFgK@X{9yc%9{5MPDTvAd%9w{>da=hajav*W*}sfWt}9RsMjYH}%irMtNC~7J|0l1*YOk2@kLc9jSbq+h2ws<<7^sJ#*v3ft6nwRO0 z@s;m4qYvuwAo?HA2-?GXKfK62J45ecf9DaHE!qu-*L**HK~Wi>GKcFN65`{hTn<;2 zPZm%=j!!?vkU3<)^No^l4vJr!dLJdQO$xlqweZ{WysltYM##q+TH*7v_TNue8%`JVfzpWqQWr*xWF=i5kjaSA=F!_o2PUd)&4FOuA~w3;TMRr0j`0J z3Bn;xV@=P*5j={8I#mK_&VdM3T#O(I2&TkZuZJ`V*$Y#{LVe?|NCA;}i11e>|9kf4 zc!)b1q)`&1eH4C=)z7{J9x4R&3W`)C!a;<1B_aLdK0tjRZucZAF7ScUbgVNF*LXTY zLc_v|a98743`I#03l5`1D{4TLOb{6AX^I$zE)jJ$D3RMCUZ5+n@F=l?Y~v~wbTctd zz%SliBQeYk9w7y~kA!FiDJoLIifBl>gSL$dwpf%HPDT^gy107PjY+!;i~5QtqzDX0Nrw-gb|P3)W|LVgnye2J`$L{@GH%Nru6 zDUm;k2u;dlr-KNYWTj;R6pv z2Z$nX9*PHND&m4i*fQmOqbxEB$BC$u+mJs&D5J9}$^G|v)za082v1+g2a~j^#I)Id zgli7)`6#VlD*XcW(ZLbJdLqh!+wZ4I(C*RWNleBKwxUwN2+RYego5+Y5la+*hup+!cNFIe9P9$OA)p^%5l^lla!nyN zI7EY;Hkg3063T;BH7hg#}33{~I7hltuoBs*Ew11zzAJL!v2;%rO9C%jq<|!bQ zD{wJi5EG<=2BC@1`x|VE6MzukJbedo9S6jfn%vuTg=f~&`lQt4Ll|4mKG`%OEx0*M z;iG7pBuKIr7aABcCOs(*1Op&mN2GCbk#W-tqr4)^%_8f~BASI`k)g~hoX0B@$5+;a zMMh1pE{41^EiR z@H&c94`Dp}MD0NHc^EkrNqVes4uWY4y5Cp~VEwP0A&g&Slqr50aF%qIPz=UL=_RAY z2HA0&Ib2PMLn-4s`vAWRM5!LmydNvK79*+Y99^25e~O0h#|i_*C9_JZ7zHmZh;NYe zssXNwgQx-!fC_L^wc;?5R}x}fcwk+5sJmyOd}e{lPXg|%K~bbqt#ePpDVc%x3Giftti=({9-c1VFhXP9tkk|z6}IG-20VRipdAIHtUSld_6CfhaUtVbifvRKMmErOqp-HXkYU z9dZ4>uf1fDvE5aLaICm3Iru;l_T}t@i01mMD4;g45O7oALki)2>&=F0nJ!heNxy5m z^6plO?{4wC4x1L(A9_9suo~U?V##rowXl!NLA-LghQ!BV-O$q4b zZHdRW)Ztrt^=c|oT2{31!%r)*o^6eow)N(=y%d+-p|)?R_g)S)Z$;dGr1*S&+IIBR zbH%7erns%=-i<%zH;&6t$a0zA=03}1O@80r!x`ESwNfB*oUnP<9nTJz7r-q-Gi$yN zy>>kBakId@4^OH97~d(>;v;gcV|~0su;qQZc?U~xCx8d(kRc(Dy0nJR=nQwA%F8! zm&rB<7zbHwZsQ^JoX4Yl_1#RuhC+d zvv|Ww@n1;doe$b7Wo5b@TQJ^mu57@5UU%;545P$g5;t8v&CTUA_$7@M7F+ zNnOiy*^;1*fv@%MX!rNd57qLGQh$z22{m&g0D1t_U_SC^zVBFW#4Z;E^`;k_7i7jyLVY(0UOtDfH(zoyyzd{HLWnPMc%@ zu6lulMHp}ogSbbWXuyK~$WRCl;)e!<(TIwWiE;Kxk?>Km5q9$vxL$#sA0BRGi7;*b zz)XVsqb-FCB>0F>Gc*7rLQRFh?%`AJ^8Fh6{Yq%S1OKs(1UA_TIQQU_Fy);ep@7cP z2Ml!AW2U!-r}ZtS6TMM!mWsCW00s@X;XVQ6Pee0>3K?ut@gbr@lubtjLK6b>x3lw8 zKoIO~9R(ypp1hNf%Gy!(CC0j85KuDM_yFdKM*KreFaPXuO6_rM5oitXx!lt8en;kO z7^?EKiaQbRpfM+h?~NL?WL)HDx{aOl!z`?vL`H>4xD`O}G6FZfr<_=ae^#L0?S#}S zL31rXATS8wBgE{9Z`v^=D|IQWMSwSAfSb0&mo9V22+%)6<)-;EF@0_f2O{?)=_vzu z?th-4fH)V#=$?%``@*Za+@9yo<$i`k@!mr;R<}~$ZJN}B77bqwK2rpb~-9G$+)13J}poT?=)qY?h_>X4; z#-NXY{E8$M>_%7}uU(zao$-nIAO=k6Xs;YTDf%w4;1c*#q!}l;wk8GO6$eXq)Hbt zUEd6)M~x9EX8}$K0b2Tb`Z+^KOZttrh!LDC^=+FZ$h&J;chok0C}mdwF0?v%vGiN{ z=(g96Jbd?nVQkfAY*S*aZ=11Ocei(Wo7zI#dcm|Yqr11K&^w*Zx69=6!KqU@ZLhg} zukYZ4b%Kic;EMdo`f=TF@{xN8ILmQvc!d%E}!LzH`uu8lq$ z-u+DK1+Oja%KKP8@5=%I*tR^BRpexN^6jv48}SgHy}9&|Z{X|CAI{EFHw1rPQXD$b z9=V=z=&`sPtvYC`J7BKhW3v18zVlCWfnSR6_b&@_er6DPEx)z3^i8DtV6uFNdC~bG zq9ZATZ@f)_Lr^5)xrzd1Cs}aFXX~dK?R<;I{r#PT-|^PpN4Af0BCn-7?<{El8T0w` zar+m(V~^SBcf9SN3PsBj=D+Xmx~^-Ft+$QVExN2Yy;*z4ho7Lt)a^cfFVVz&jF0)- z7PdFr@@EQL#ErSmvJ*DEc>Mj_aTB$*Lt%V8vYog9Nb1Z;P$!`*p$aGCBQ>3KiZ1=$ z6H?b1*A>xQd*cP8XZ92=Imr45F!FSlRy+m(5cjS#gJw|6JMAC?^KCH(sF_xShD(aG&AT532T z6*PM>3Q|lR$>(0B!1C8UunA1;#+T++q+CiB{lv(mn5CgSO$(9No`y>aLjnnoKaV;@ zUs_&~ckbO*s#zU*E_a7Upv&gzvxR8+XmP})gE-gQiuB%8ufIsSoZ>V5qkmbt#2hFm zL2g*3YDfovM1C}j8G4a0zd39cn0>7Q*k!F4I=eU58m=ZF{^*csZ-+|)f|L^Cuhb?$ zr-7pyY?fFyWN%Jp6Z3}6Z`dRzS>47F8hP$rR{Qt9bOY9fwkeAzKZa+ju8+RA&vySzh1*{K*;zYNfOmfH+i^|$N8*Ed{`-7E@X;!xU_S;H8~7g>d%HjTy$6X9 z#r6(3gO}z-CV)vwqzk2>E!58IsSU)7Uou?(l7i_xa`xrRrAEgql3{&(g7MS6iHbQn zbmDS_k~XQ|9pbMTaf0_@{C>lF#*V&3zyABS6CM0+xQPA~RIae}YR=8e8eD{Q0=xJn zK;uG}aB77nB2cQE<<%2#3;K3$wJ-Yf14u7}&d+wU~@ONBJWe@Ww@*Vk*9&vX3Eu)=J*L3QC*k8Nq8KC^W8c9_( zd@Ox%NUOCFEQk*oIf{SkmDI$@JAdV^#D}@2T(84=%-e#@iS^f(sEHctnn2`lagPSk zeQ~F=vMGYmL8a;(j4HhuDxyd4a_;PERzEhF`@IHkwXlBHnpN5K_QjYekW)5S-PruH z&qu4UV$CtM36dxTUKtt|KrPju5xlXxRGs!V>&~P|*kCiS;z>&XQ(m1WnCjlK&?wW@ z?L%tD%!%~!7@PM|#YNQ5{ZB9Vbe%ssmmmK%$=x-Dv!r}G2i;{Pc0e*c1W({c52xtb zBY%g+0?I(t2M`v7CZ9Q2|5UU*Kfum(WRN|JK8;=^8mI4{0U0CTzlE*GIPt_m_>=|Q zX@u420TUsWbEH=9E9)0Lg;-%GQC+5ZNJ5_!YqyC>cX_N85ZN!RY;>!yPKt7`i>}C!G|${o@OT7}Z(bpqCi}QW=Li#$8HT?l)SA#<$1l?p zIEt%Gq}0})6cXqIEhf`6T2$oeO)T%OOPnPg);yoM*mM4OaD9M_pXO~}Cd^tls@5MO zPCv57{rzLqd0561f1!*(-HUKF_7dLSbATE4<#+-Yz0|`S*CKIE6WMTojx;}O3;v~v zi5*4&0vd@{4@pe#rJ`@py)k&%O;Y|+Ez;EeB#t%H07KDJ6G*n;8{H@HP+Z^^Y3<1u zUk*G8`N(0+mu2^2*3bg?u~en~#pRTnMj;r*n;hA;F?>~`it-6e1HmsIiF^kmB7VGW zZgIDjn}#cX{K(>9#za4r-PtzvvQP(={SOFA24RK38RT+k2L1GCo(L^4rm$REF6D|b zgGUWp9PE|ciZtlrW+CLN;Gyl-%q(rQ?r>d3#>%kDs`VqOs#SW&&2#Qcq5GxITY~ql zyAWhWWJ1aEf?DtI%x|ivT>08n`MZP{_d`6eZi?~l2~>8@ew{OHOhxfd&)-i+jUKJ* z?-o@{`WOB*)pH*HxCQ`5Df-ZQ0g-aW&^_}MAk@cow3%b@L-Tx7kxjZl3MO_%ikjM* znHG>O8m0M(8dl{M`fo%&?5?s(VRpkq?F})C)y4q**m8GazPXj{@Y%0U>E5Q6hUwC! zd55JpJ`4sm-%CLFW>G7{%4`DuM))G;(e%+MOk;S3}&}WKa_Dwurhl%G4YndCVfuG zz?gjQI?>Ru+|%%mU(buK*9sz~SEFh{7n6av0rH-EFfVhu=IQ4Z0sBVzp7gGM0w#90 z2;2|%B%8m=le_W+&h2E=vwy>zA0Pf84arJ9;kmK`2O3Xg=>NgN|Bo&9l$rvhz@h(( znBqWyA)E|nI1s18SZ>ZUXa=@ZVJy288Y9OFfJ6aqZ3OH87RK_($(#yfl~w)|#wxP^ zCycdFVha%CzRjm|QAbQqOVdqANX>+Y)ltCCnAysL6KAGy3Qf6P)bO@BXXh^A6Da9@ z_00dEQw$h0ng3fDYi#+yg|ViWFxKv;!dMd%lT%@={eQw(6HkZ#gt7N-+gske_kYq; z|Jh>I#d4+jPr0ciU!Lr6k^h9Tx9u|SUQ7$R^FOxOfJFJshqAA7rJoilmzAkhypqq2 z7RXHuICaLpB|dl=qhp)%|1VqY z!qP(3|01S<=$P2J_=LoyHTSb!L#S27yo~+xc`W$G#Hw>1qLfaOaQ?|BiCF2WU7IPBKdm)Mqo7JZ=799gtZRd+BAua9KP`m!`);%Ap$^I8 zlaf{@dN%ev{wkUN*yk0ruy6Q-8#T;{uNy3^CLboib9Ic6!yBR zTjTN#QnG=XC!5;K_Q#}#x670Yq=v&T7VG&8sN6SwX^{pJCLG~tAV6w)Zm@xF?7mO zF5xV2lchK|#~k5UuKUx%38T{b1O^pi4n&Zebk;K9#{NBPol8>pzg)kuBW&oY0LB9; zVbuL=sj(ke5`-B0@nT8Js&;JUJovm1)Ctkq4sGR2INZf0F|q+89p z?lU0%SnL~{#KTJhZ(e0youJ;#f?TL3a0lfbbo%`Q2r$8W^TKXC(Z|1yi16SiqM($5 z^)zq@kkliPP)%HWm2oyf($h;dmEvzEOg_8G|w`(XyvOBdOE_?30o7Oj977e^lX@`t% zh!>oV)o%azHX0d>O9y?(G-e8&@4*Vn=9=4kGkz`GYdikAwFjZW<@Vd5XT0`1kdo#5 zoeXEU_q&*`&X$S@&`i-$Z^L;WxLWCM%u0&5fVQgMHXE+o6W#=4u~51C?QcVvKDqD1 zs-L`6MmQJetD#8mtwg%p7W16`lKV^XJq}?v69f_c;|Zz&>C`H#+z)TJ0^S`Njr(Y0 z<5N;smGtU3hexgKw zbogM+k{ii+phalV6K*!t$)>R6Ro)h;gO;_lA$KR?EmO!qr|+ht}MlQr+kfJ z+U0S@1IY=3HhH4!p>b80nf*?**saH7Z_ZArFZ0PMyTTKlZLz97#)>-ix5cdQZ6(zb zLE5L}r0ttPIHn>~mv3zYMJ|^5OzTn}W4P6K%HUalo3M8E)26e>5L%Nme(bIFkB*vq;w@Hu0JOKU= zK$KF+H#7s+DkPN-tOdp=8?vm3-NF!@cJXs2hLk%au68O1b^=UP2Qh3l`1JvO9B3gZa~J+M#;+^`!}(jR|5jPx*2 z1JAhsCHc0%)>tWMnbik!eWa=!tCg1I-m3Q%VogTcR#ejDKgOK^!p6Ma{ z!AdxK@)^@*j(GXl;|FNio9b-FXjVPWB`!jd(F;cJ{a!`btN6a-iR5OnZWJb&U7PUk znJD8Hf16~2FPDCK`K2xX-RW^^u6mKPW%spWjNz%UiC(__j?7&lgiQNobcN2g0sY?# zE8l7xPg1@Jzc%6L4-!o=Zn&)h^+-hGLCl;m0<@cJLGMcxSXD=!Hh<3S(AJO~r%^T- zulcFa;$wxwfV{}&(DiiAr98{;viKFid984{U^}KV%06?NMl}27F~xBqlDWz1G2Xv3 zju>N%u$fDFK$1M#DUGnXf95TZp1KOh8x|*=%Wki2>ze6K#GTN0TJxm$f5L=-Pz(o||^6M-?AMp*ZpK2|W!v`MbcaM>51{)qVi1*>1q%fWL)IRJ)SgYQV#Q zA8v@h*efEw%C)~wsbs3jsR?&y7sCvO4&$@we?Ox;ylSgW6+-w+iAt@g#xV4QhI!g# z@@KBxyv5KsUZJ6US-=7=ufjcycy-U;V$MX~76dEc{0_qE^s0UsD34VAe)T}hSevgy z>jwK!AmY*tZm|RM`_en1YBxiqFFVoIM;TZ}o66JLcqY;#Ff{g5FI$s8+Jg%h6vB0o zkM-nP8vOx&FCYnAOP$4fbyT<66Oe?f91FUEH30|f0WZJIXxxgUySbf&SjWfh!iAz| zdbh(O!3(B!FpxjVCz5x*c>EduJ#$;q9TlM^h765n;kFCbVoP7R#u|FhR$e2#wfrJf zk8fwQxM}8f{8ei2sFQ_uKy1$E+*ySV-g$QK(UX=k_Q=N3D=gnFDaUK-85bb;+rAe* zFI>wz(j19#(k@fc!&TmvcXgEtVF}T0@cX6-nMI$p!Z$Fc3t3-f~{G4wK zckR(vN$cN(S83mJ##&a-zAt?&n}0y`)$Z$Q`(}XMJ}j|r-LxP3Gqr}oS7x+s-w+hZ zx_a$UO;TsQaWqtNcY&p0>;(V(^WQIHHHVj&X+6Ssk5_qPj#6>7ZvlJ9o96|8r#;dA zUNLsE{I88=!n*Tkvo*~`k<7NVcl3K`jAnA<{NZeI#NV}y>0jqXPQDetrAFbx7d(z?DlY`LC*Hld?SL?Ybm*tnv&f}-MaQQwN9xEcroCP=<% zE8(LkutRh-COR)RTEZk!t|aX5VsQj`Fd6xq91!Wkwtk5&$X7E43lAiU#$ppjrsC6o#fuaIp+X6< z6foui^7Dbe)(bcb1?-7-%tQkZh*Ig3i5XlsKS#H$Xs zbH>V$OpZVto9qituX_S_h1rAAKnNcFX5BI59xj54cw&&E7RCAM9V0CM!V9;6mq(_V zwn#=25^&f) zQ&_aYIV@rt$+yU-m@y~zf}8fJGK@hpVVaBo z_BditD)R}1rZ{syCowlCxiKfzR9^Qbb{_A{LV>Fno_RVAT#J&8h;g4qpV6UvWFz`W zKt(z-n>8&suOv5b-1a_<&OdknDbS%TNqG`;^h9P7?1ewGabFX>udMk}Mfv+vjA(xQ zhB7NQUyDtpKPkUwCckY)MT8B+ie}K|mNv}g%&b<@5!Q&MBrH=M$D-U{XsQYJMp2rTHKEtFt)_Ll}S1q8@v$wBv1l!?FAxtOEDI;l8R1 zG&PO2NxL7x0l!R@@*vWqwh1A4PIVVRKbTX}MfUu3l=TH&x%QVv2HAVln(pJd?vz3M?dWUcuhtg_CdH|Fgl?ZLd0qtJrGzFXM?{!K z-#PdC+*(PR+4CH;s7Lg1?|_)GpI+~tyfK`8qj2_(@~=0Kl2L^rZ@O!s*89*k3_wRV z7ob9|_Fb}wKm(kPmxzm{JS-vrE$2{qn{+Ei-d_E0!pvS9I3P)8sJHYbBOjqO13-cP8O$qbiYn)+=)+ZH z63<(9AlcasrqNea}Njhx1LQK+OqAGi+Hj35pYWN zOE*h5{r)CD>8HLW63?3pkvC)jOG-sFk=z%8>v97H@U}zUP;dE~ zEzqY}BEU;(tRFLsXLPIiJSxOnXdA1fnHzu|>+@6E>ovV!Vtuc`W3jTtYJSt1fk#s4w z9HEuB|3bwmjk=+28CuBYJhA|;y^gmsn%dUG`!Y)!_2?XNTJa_n~mP_MI)L2TE@4n^AOOi@Fig9%tm&o)`nQa|bMc z@pMXPb&B($BpIHLyy^zX73Jn#2Uok|No{B6+K#n=)et7!7Ncsa=iBCrb8_UE{idf| z(453J^<${xT;qG$8r9UkOV{qjVsbeoY_I*W^}Ng*bk!*Iv77=H;)d*GXlRv^jb89X zd3yDln)gFJ$zKcm<8eUAQ-JNS3%5DgnnE^gE@PB!X+G_7;@*F4Y7$(n%vrBwo&lNz>AVA=zT z-0#vFs-Tk___z()YihEhbTN8U0z7Um4V(F9J7*l(yG9|aVr7>&#_npobdjuh!&iF5 zP!>m_y!$f}jeYMQc6w#BSPPXWw+|(e+S2xiGKp3F?XRyrGUu7|Uc8(*npfge@>X=a z^sIM9v}~0{`@7>Zy1G2w0keqj#{oaWKK{!8sQKe9|KB!oELa>fF=IZk5;&EEiFRi| zm3h%#T1|)9YH)6SLgI1L@r>|N-|2XHov7(Vf?D)fmlr>^oF?(pzdDC(J^7rZ z@`h+RziK&iS$-zBwR$CU5^N6GdR883eNGhuY~+xq$2HWhIplviH!_zT4$rHW%*9LR zvce1G7wYlU=lWDBx%rpj3&qzPdc28+r1@isHX}aZ@5mx56nUwvObo{$H{YdA8-ku6 z>a-@*p-#p{M#s)?SKv~HEU^81Wo0^lT`aW9{#<4K*NQCQhv%_E^4h6SCgzlgU(IM> zMm$OhEptJjZT9NII{(t8woeby5%ddF+n;CEooZde7qQ-z@8&?N46rWV%AB&H#U_wB z(9C;!KWlw}p8}VaLkpy#&S7ZxIi%|LNSD`|IkCCuDfWCNvQ_76-u_p_!VJU*Wwaoz zKwdGHn!TvI)D^y>R`BWS&XkiAl3!tD<8K2$6{L%LHvv#kd{g|--b1vYfIOfU(Z;E> zIYF!hD&9FqFf=oMO_rBodWOvOfrA&;-!sW{EYNj5lhn78v7u3Ec1}x`rjxAc^N&7n zZ1dauTHQE{a^pE@683#Y)Rw{gZhTuEk+@D0 zfy)uUDiXgUamb-cX=KE7;kWH46u_+V>lIw^fYV@V$i~#OjU1m94#mz(>88(i7f1^` zGnUA+ypCs|ZmJEpbMSty-0dRkegF?wa`4y1V8Jh%JFT$a_$htSnD$SUt;F5+;;ijd znl$Y0e!tZQ5woBD3oIOc_pAKQPt%>eXR~gtvl^DjIi``j>2qtctL!^9W80wHv<3)y zq_JfPSJT8n1gd4o&PG3Mi&j1rscn3-SSsPJ#x$He|>x*D-=ehUandX7-ERd6h zJxeEKLHJRAptOPWG{sux3i@>X3jVjSp9?-5e=dy_JbJo!s7n8XBV%R2_{X)h_g%-c z@#s0V6r@?&Vq*c)=%nJ8^=A+;{MEJWMqpAP-Kx`krMzv>lMt~Kn* zm%=c!%_py8DPK{0;Y&9=?(@!P#vPuA+?Rb8HgZb^HiPSE5l*`_tHmQ*daXphvSZo# zj4h6KCop36kNOC;! zU`wTwVZa=ABt2vrWep;y%qSSY%GIKUjwb%f9db4y9^Qft*PicmzA`D(%A=+@T_t?a zveT=wCf+<=3?K+qePNA*isfv3b+eg>#g!l2#nHczIAtOo4S06VV`DVB|cJ%LXdDd(2R zifa*HdNAMfkzb#lvIOU!xq>Xbz&*IarpT9l`g9)=Bd|kGt!s48Jaz;86^!|bi6VQ@Je-D5S~x~#UTV3@DgkSQpS9b ztg@*fI!`mBN>-SV@k)MHxYi6HfGgX%@s@!KWv3I( z+sAKAp%~Ezs`mK4=_Sw)@D$MxD?L=K$P-0?_w8?zn>y8H-wyD(CuV7%9Od=zJeuE9 zRGMhHFMou@i;`*3vRm5^ZO*;et{IR&vlM$xS1-EG(!%6b^(bqrV7^@__SOr12yW>S z$b6;)Zr$DZ?#(2(avv`@7iEy&mP?<&cM0(A;UD3QsS?(@kg3-faYnh&Ni#j{`Isg| zT7cDnbKz3(t4CjyeHul`4XJANIn{#_y0on!0qdBY4}FZnmzoDI@d|GS(db}xfwvix zHW+#}bGNO}=h<0j9 zW{kM9uSt{F(1oHp53M zJ(fy8H_%tn)L2U@(P9qz`Q1Nx$w}UNP^430ynR0M+8sTHWd;D}o1kRD!0m?Q0Gvn= z{0ek> zG9$#gzC0^=n?p3k z-Gp?%5AmQM7tVp{5c+g7?7(q0*Wd?RkAMpw_*W?8W%+F;HGB`#E++0qDu_9?6T-pe z4mH;O7Shv{Upe}6kZ;1(WHgzN$ueH!ufwiye#)4x5+W(+%fp9%8<%t<;Z2PnHX?}q zYziz{fST=c5|_LEg=QAO9mW7a8l?I#NC0^OAZ*G>>pMCW&P-2+LtqnT%uNHI@{OLo z4VHFJT(P=3?Vm_@YmNS?Nt&mWFRv{0jcEowOZIB5nwlKyx9`V`B@?Q0)&=fbNr@Lh zK_ud&Njp-`_3b8IXN;)6j561z$*W#}xl278js-lI$`l@z-V4~04NvC8(((e{lFZG8 zaa8-JeLOjKMejPj`7{Uk^4oF;IcLG<%yt1(b++LnwF7#NZl<5)Jb4+pJ;xc!&stNx zhYUB=(Nq1}?5w=FCDq!&OG)kOwMGFcw;5%pN0T2h=kVtU^I&2aOkM%W+r5yRLf4YC zN$`OJGt^D&ggak-Bh;;fp-?t$L%9}kGmL+b;Q%1nNkEajqFBgx-g_^~H1H}$ut!FW zq}$zYk1D*c`V3v^4ymgj5rPQP<`DD%01usp2rj5I{sVK_$)DzeQE`mQTsh1jqbLE| z5F$>Ts|&;ljql2((*0WUv8O^}4H)qBXc9BmXiTtisMD=9no!{kff$z3fOY4pXkOr& z@fh)Nu5+tH=t)&)Mp7VYeC_=fKcjr!6ki0B3CtcuENa#lfUOHNvz!joFhY!6IBu}A z8w6InjnHY2>T5*T@CfU7is2O0Wh6XsiX{gACx6_aFC_D zp7Hvp3uxZvnZ>BT$Tg;UDRr5#w<_*;zo`cl|XW~5T z)v`90K8mYba{%k@cQzN~$X~A9SlUc%lZ%*gb2|Vj_!}C$Kua8bR4x(ExXDhK5_#Fa z)WrhaNS-9%O3hg>NBRvZ{8hZOeef|n-Y(;nDd~|fkh86ckXQ9njm+^J_0UF~=BoB3 zUvc;$_z$R)t!>?K-FrFpD3lJ)oQ%vEsy6qp0W-6p3!Y?n@uiPQZ_y%wAv@HEfA0<= z2EZ3ogi)V=IR1&C$MnjWeJl*}NQ=3=o#k~W5HuO3G7!dpKn`oUq0-l)jX6ya;4Ao2 z{^Yt`!5Try2r_nV1JFQUXbFB@YX2Grs`2UQ*|1A*oJ zE?6vx2MgjZ1KDzhowf9=f)lP<1ft~uZX$sP2NEg^ycQW0fd-ulGi=PlACQ4-cTn;J za10C>c!v_F!Qd7M2`b#16w*q5j<7%o-<6*tKffgh3-*C(P+U({Oi@^|@JRAKAGl7J zpLzN${&|{DBp_z_(|^ufS4h=AV%?V_B8(8j)4oS0rs-S+7!DPq*rzeK8y?OoqOPZU z3ag}25>yze!G4(>nqWQi6nPJ#QN zEy!ZQR&~+S=-~Tw-ze2-Y8{nxAA#?U*naBf0Tt#o1uLlt2VC{%0Q(B00fT93kuR+`rpJVXg^*SDI)hK{(s3O2()6ezGD zS~&kE?1CG;l?MJrBuTkE8U7nABMw>bPf8W`30H;c391A>d^$F1pIf5z_ICb62S<<6CPXx z)d?qp%hQZS2tigZT=&y_#iOgJ385JY&_3G(qr(eX1(&+nSRN&ShFhhdA?q=u6eWm@>HlIC^8_OgeMwV5J04~Y4yaI0Z3d~ z+HW<2uzybACgCLl#b#<7iM5TrjT&djQAgNu=jZNi+A3iD`pLPX0pYcjyq!baPv$Q# zyPX5eiKy$Jn@&bu7Pk0gnI5{Cs7*_d6U|@WfN0Uu7F*MnHz7Pjgi~TdsCx9@E71k6 z1+Kp$o|wtzteN9d=#S(EiRYeG%U4OuKfjQp8dF%_9H3m0Cbad){(iwP^MZI`D?Mw6 zu#__s6M6ku&Plp3(|AGt`Vl)lM`d7G-0WZc@)zDF@V4wmv0hApRI_i4uMPw!+dG}* zSix^MR3bZM>2g$ZS)wS^-@dcU`tZN(PBj#50u`!JDy3Qyrcu0MRTN%f@*HXXR}o`g zSekQ|&F&T|Ii}1zrYyp+;7MS)sb85NGLl5b9`s}E>F1Vx_cbTwyB|Q*Mo~_zXkkgk z7+ADw2pXKs)YRuu+IA2|(#JB+!#hQ7bGK)xvP_=N~WaX(p+OhL6%l&BQcF@;&OP6?=E zx$ed-S;us}j_Xn#s||#Co1!RJC&E-Oz*K*}k|O%Po+-Be;&Ji|l{&Wfbt1fV3cL+M zml`Cm*K;v7D45piNH(xZHll3muiSarqjB}q2cN<%WvUSL*jo6HhSA}3X?;D1lOg1J zQ}=ge_!GFxXLm}rVL@qhhFj$;kKtEd+piulHTz07Kf2!h#G~0gtEK}aJizsAP(#T@ zvFRuBRZF3UhZ>af0v|q%M7anjh^oAJ>K|-S<6-sc?lvf$x)gqRw0JO_BP>XJJKm6+<3DjT>e89kF%LxZHL_+6a?;~b zo&(C*A%obu9I2r+=0-KiVI8JM6`KaK6hu>UNG7YF%vYaYHQdkK@LCg+Z98(!h92L# zdET%2{mAIj&gcsBn6HQNn$g&2&#`seu}5*EX9aIIZI5LgkJa*y7YDWf@H`#=!#Cb& z)5bhA)>JwED{dSVKmJd%9oQZJ9oN2HMY}89&9qBnMNP0tPjDDdaC%Lgi=W`Gp5Psw z;NP9NfSMGLo)j{k_(_>VX2<)_e$n-}v=okbz(YNkhfaB^k z6B;J2#c~$|yLY0iI?8UgG(k@@*<)~4D1d{?V2_>#a10K(`xX=iOS@^)_z5c1zgSGK20YU`Jt)#L?S&K%z8; za{z$#n)Vx=gpzYF(7?Em`=6=oU@BN%j)f01589uTmSaI+T<_A}-z710R?kY4K;xXC zabd{TVe+)r(w5uOr18>p4oCsBG~l|lXuKp%UYd!wT?tv9LJg*GFUih>-=hYXyq3Pl z+iu&fteh+^og{OUb2mm;e(x^szFq-!u1wi2f3aKIDqq>MTUkC?nYCM4TUyyWSwx** z`yIb}Vz;)sy9)7MMU1V!PHZ z-}xnMdHr$j`V;RjkM_R!o_@hEf4R!C5x%_cx3>|#M{lxRcM07{sacP$*+}o)NKM#? zKfmeIx$ZCba)37Vgnznxl%b%S;lG?MEDNJ8c}Ca^{0s_0%dxPmO5H_6V&pEO@QdJ8 zgn8%ZyK)y}sGweHPIl7vI16ZuWp_e*ciMjUo&E0Q=?*)2cP@8(>2!CV&PMIgC&YW} zEW4i)_SUp_Kh^AgSl-(YJ>A=r`TE)9>$lFmU*~tfChYx`kuMEpezdzl(Rvrz_rP9m zp$7Gi**Oks%Fc?L9~lL)0<%)2X(v2@+npPV2jftSnM(i)4e8jM_Z``vCT-R7PmALB zIpjc+a{J}G3}#1SjV5#KA>W@pnR3aQi(O?g@tPA3TLeh6f?eB2V~9%A?;hDdCgo;o z?Pj#9-&NQlq#U-HR~f=aCygBt^vcGywO>`}?{$g_F{G)nNxM{Hvrfkkb5;)We;wpqU{hZ?EPilQns^i;eDsp@=*;MWp6*e(>~X`5W6eL7 zGs=*sLiX+dj+mB?dT~IP4oLRoY?2NL&35==9I4p}?!R%SZyYH>{WzwBlFMUK)H-^K zJ8T+1S*ksJS)94{GlNT?ft3pLrl|^^9M@u}Z{2wJqz<^9i2hc)KjHK7JL~a*1LBXv zze&t?6@Wn6UH+e)AX4NhSA-@hDfz|A|Jey%#{7@9jgj?Ml71A##i~^85iIEE?GXSk z{GXlRbz59Qi=>79Wl2yov@?py{u~rG&@v=C)-rl-IA&&kC~~oI(l$I|l5l!?@-@@r zuB^SU``^+Qe*TJ<3s#Nt3qS@6iXE8(a$UJy&k-C1YnnkC(jy0PfAd2z7a)1&jp<0L zfm5&aCwBS$f?`2+&NI?ruIP#3vtWr=q{sTJ&~q;axE>4WvvaFFQ1Jz0t<0_qaH`t* zxm(nyhyBOY=EIlyG8>$04|^zI@ga6bcY*8Gi>t4y=C2{AJ_MR~p_#PxfswT-(F7Ka zV2!e+;pSSgx;E;S>3Szi3n$4KxA_7CCr2j;hxxJ70f8*dVaVcX;Te(2D3heoZp#ha zbG8ot?;_20m?3Vy1!u2o@*BEvU9vM$%o4qp%p-F)3n%K@PKXoga({INhc!<7xLf_z!L`njbT zsRGw!d%2x&`WmMr26(>Ukx96p?C*_2jnTFL$fAUn+mjwP2ttwIg|^32x1*#6k~~@Y z(bR_o#(S>HkzV<|Y5&w;j79RXHS}6oqra0(Ju1R4TxLrSxNQLh8}vj+Tx{x1w*_M-eE#w`S6OXTfIF; zs-{u^hRr=t<+%LzoZbb^?|-(_(K5$7jfxyDyQvACX?s)EQ>r`E>xAR|o)?mjzYPqJ zArOPAU;q9{Q<&8FIi2R=|7-4E?TJGFgRdbDozG-X4?gKV2|C<(KNWJc)2wrRwAcUd z-Qo9l5B?SJuhhOd{J8h^-@nzu3&5{?V9lQo@CYNaN=+&DSpE}C`hFO*2p5Rk1xGmh z635_*?qYVq61W>NaOsvVriZ4_F;%N@c`*p*DZNODT}c4uFxSoFL?N&NjtJv9Fl)C@ zq)Jsj{1%rU(u5SrYgE7%Pt-g6kQAl0NJc4Qt_aAmMPFAEWKHq!;VF@e<@5|YbKU<6 z|HGtMWluq-Ahj-*gm2O2w;j13aP=r{`9x^`bYuxT=o2uZF@QbE$6ODiF0JO1h?<`S z*xUv#e{f8S3oa5oS3aQspF(n+XOW1a)xcG2_7_c|w_?7(ApdlcdQd)SSdg6B*;91!dGwHzeSJy=pR4q<=@jyb)9|mAA!wPi;7Q9KZa7%)qdr4H_B?6`9V5f6h@BHJpgCruTl0mg%bwO(X>V zEX1J74XzqaCTIRE5;HD0yfZYJ+V-{4F7~W>e5iq&x2wV~Vz@S!kmFX^y zDaWs}1UX#}4O}CT&pN?1Xk9n?IcLfxK9yWWT>)Y5A-LwSWeQ>yx9{B}=szJayUQ7j z{bWOe4+@bnSiSR&6L^gsgp8|er3@`*`rGHGbM&4Jo;{oeKmxHw7!NpH`8L}!_Jo_2 z8ao<;BWP_Xp9}sK3ox6`4+|EY(v80Tch6l?(xNJ}i6g>Pwy05pSb*u}C>#_V!$kXS z9-I@hD09>FxgO~(&}vKspyk&Tef~Ox8 zuwAQJakLlgTaD5>&}9uG#`eD_bmo-a!~@u3HcIL@9*p%&>+c zqzSS%i)ZG#?%tyDbH9rH@DmKcWBjLt)pCCLd=uTjnjJxkux%7(rRAT@Ar zK{sD-8P^s~CRTq>yklF1eWoE3J)n5@HyK8g&|py_Hsr6!Z3o*P&l@R73yOJdO8n`X z&e~II;ph^Zks+{#QoG9k;h*zR7KT_^{9t$a;e0eQfXJXPe>uq2?OujMbd%d-3&iGf z3(D)%0Mb*4jU7u6U`0CM$GD2m1ux>w+=&te-O`)?LC>~?kift!@?nx<#!{dD{@6oF ze3^#zg_M*=KGFz2?AUfyiMmR)k@q1C<2N{ds-t2|_PL?2H%wUDCKAv8Eah0Fze*b| z&Hj1OrKRoLHv(rFI-i`C3E9-wIi8-;ep1TX0W(YsoGd>5S*!P&)2Xy=ao)tQLviV= zPFmnZ((>c>D9$rboMW7yKH$6l7p?rRYm^~t$D+Z1Uiw|w`DMD|?s^C6%($MtY$*R1 zb3f#rf#LWcNf7t;>}x?{>VS#8Mat7xzXaat#&Av?Dc+g=9Y0zADTx1gT(A|m_2yIq z)us(uNa%jY@%`OiFqQKkwWK)s{;h zin{OFC~F+dS9XDgXyj4msOz3>^9nTQWYBX5N~DwM7K*Ab@W>WC^BkV#0FUMhV^<41 zV;OeV|NmgydnE{3Kim`N46NR**2hNx_*qVemuW1$t^pC`(3F?3rS*_TQpl$?cpM>Q zvpMtt_iQii8Na|YfBk2t??OpX*GM0Jhh9$$KL~1{KT!#v_XLk_3CpKhv7tdzvu9`e z;T6UA;VN*0S;mK-S%2SqZhN061RoegjyNO*dVOQWmhlJRnOkS9f_|Sy=8_cm??k2c zig96qn=0XEmIyE!#O@Ojtc8AW9XDJ|sq5 zOGi|>LM;ufCg!3xl|gEP#DxjCG6|#<;gLESPhL%`K23$QlLCD~u|B#<@yU8nZqQ7a znDTyPJRHs~?)re7_*X6Hgc`eSX621bIK;UA5=(H?2O+t=eP~DxnhhHXw3Y_qrB8(2 zUgS`%ub@HBK$6~o*cE*8S#e9Qc`!Reax*4%-Qb*#ikAumXRPl~))K2?8oHN~I$)X_ zvhRF}+=*up1O+1>g_)?dDz7BV+iY#VzzR z5F++%uUsCtz)hOi6Azv7o4A}83> zP9zqXRTqhVn$v+X`?wh#gVAkHML6Bg7#B*-0rCJ^ZXQi9hmyqasJp?<7P*=;BM$jc zp2sMk%UhoNYcTmICePd;XK$W7l}|1oAhR4Xu}dJ)8u?uA=yRDF+=lt-+2o8H>3VOhgx83koh;7YOj=%OJ&stZzzXBGlar<#-C^dkZeLF&*mN)E&x) zEWrFX3Y!^<6b)IK(F_Y2H?IU1AawyRbg|)4p|N`r!m-#g@aC-rcV&qp)y(2{Cy>r6 z+O$|8=+j&GGByRbLgiZSk`@5>?EZY4xAD1rw{HxwjjROGu?6eEEm_p*O_<&X-< zace>PLIJW1@T3*y8iI7tWyH2hT}m0}YGrI@S-VD6%tA#&TWKM#vc<5dp`vhns4(}4 z@eBYxOJbP`td1mA&$(AGxr6E?bZTPIB2*Tc;?fC;BA8OOLQKJsd%nNK&5erkDO&K3 z^{tPA=;(7bBFeSMiPAqYg@c(jZ2(2!b1kDI1teJuxn3L0QwzUNxt&Qtw^P`*YuJNO zoX2K}(^xdpqmJ)A<)3?v^h_Q6TOH=T*`Ygn+f-c2wZ4!BaO2DYQ{ZzC^L8ekj;b%f zG$5=IDp}@YmG#_`sq|YUfAX^&JVR_zsyG&&=n@O|Db{Fj5VS$C&|pu=jWKwJ_?Iw{ zK0MMT)*`cL<^yP{9^_RA$|-!+^PGaj!oBz5wvtj$gJ>ouAybCi9?j zE=hY|Cip|s<|sV)X;!m88VtoWv-?=m6%K^!GQ9iH8)yKr52f?SCX`kL9cHGLhd-x4 zu@Ddi7PC!PB0r+@tl~a!K`QXj2Y&H>Imc0nH&1DZF3@3v=wj;V%+flo$)t~W+l>9- zug$Tla_uTq!1Ovn@BKN*Dkwz(eBS5vybbt)O(W+}TP_xOghP4&aK=?IObO=g1DCkR zqy9cW{-`oyzqDPV++F@nUuH$mP(@!*QzWL7O@OW=@5G0LcCN#}+PrpO1D%&cg7L4L zAPwM-#@LrI2Eagt+JUs?r|=Y39+e3!p5s}q6yz%}+j_$Tqehr^#mK>kFJTaJ7hi{S zdorZty-=Y|TLA@B6q`5mU)K;5Ad81X)!Ov|gU50VzU|azp2DNpvi_lSX3XW0ZEt=a zzln%N$iyLJec--fJ^07X#6i@>dEM?yO-4d3qD0S(_n=n*?1e#$5;jjW;h%V z)*sQ)9;$x7RUHZ%AW95GR8?F5OJ2NxC_W4<>=-5yn- z);4{7m2FfTBtb&sb5vs`-Ug4J?QO`X0*bLY(wN3?acBevniXd=U{p6MG0uBs{3n$P zTYGy0t1Ty405PURMA@<02Tq-<9N?2irXClEhK>DR1@$c^ zftHHXB&RQDjhe?ODt2ndQMcYAyVqRv=8vE<=zeKOrl$E~nOn>y&uSKbucj@dsRGkSIYNLCGjJB) zEyOVYl7D`np`yTjzPxQ#$`cJGLx4N=H$v*~jg)mSRECYdyH!}9+>le1`lLeq<9`f42^ zE4}i^dCA3n1;el+JG8=Jyux9;u;n=kuhWFqmqOLdRlE7}bVe8|l$EFD$ru~v#p9X_3^G2i;k2MpIy2!Kc$Jg)_XxT;DR!1$vcPRp~s}>MfGl zinV^17qThK+>*5ioY?)tBh2&nr_v4>9ErlNc1{;#k? zTSUAGffa{WS$)iaZms?sDJ6Spc5LPb>TT@w=tYD<%Ct>`je$$-vb2twy4Ui`;Top{VMwRnH+mnqii!a+;#L8tH`lhWF{;bF#6 zZ6xcVq|t#?`yt`qpOiO$vcKMOyRafFdGulTbMe{S|ICKdvun|dH@Ah}9M$N$T{=ohn$CiOP1eWd0rVv7W)1MC8Ml&9AC>?GbwqCP#4~#KfQ0H;aI6~6l z+=t@VnTCnPu;GohE+)Pa4;w=%%@&{LAR|T>HaUYe=26>S15C>hA zp4uKc9k$DR2|+d7vYv$g(}cX*H{&bgY7Y<{XIk%ncUJ0 z`~KhRr@^qNda|9GsXNan%5PU%a4fJ_C{(tfrCc*PUjQ7z|5+;5rBp67d2*yy|N33= z`jzBhrtr+m+h%kZ5Kr&X?K%55>_7S>(V%W&u(Y5L6mKbC-x@AyqtED%2K6wWRSo6K zpsfxwpqwv~2xB>yuJC9bH1M!Ao~iuCH?dfvxVhAE;(GQa4{Pph-1z}E8D4zMOch+7 zSin0MS^GLRqSqx3&!>u>T{LqsxWvcJejjQ|u>)s(C2%!@9JD%vLHBCcdx*=Y@qwEA zjBZa~=t94+VWUEq!>(ezyF5u}l)t+=ElA5Q3V;LON)x~l3}-L{;ev9QtB-)V-w6yl z2m72Lk%EE57|~E+YRt5jK~k&~Qt%^2z5DxnCjU7y-o1yjyPID?lWLYEfEN?A7J03J zW#p%cC5A9Mej;c&Q+1=x#JUW^&Og1(hG!azThmV?kmgK;b^l_oU98%;H5l!y4;D>1 z^W?i;uD8j5)VzI5b)vkL6aEYT?cji`>CUMECA={;8L7E+2atm*8#1{V^>iBBUl5so z7|Cq8==(e)m#`%aKsV%^wRr|I)~o!#J8x$ZK4q5XvVUu<%+`elNuDN#YxHjNS5~NR z@jr0EGn^MJJK8J)#IO)>Czwj+U~v!hG_YLO?LVXY%9@y=Y|C4b@j16$g!e|L(1y@M zLctA&Kg;UtuUKc8_B;DvXK5{86|(k9-z^JVNrlH&Fvp>pb2 z7^@WjNF}`Fs9P9W<)C>Y`S_h!xId8O76tC|G%(5(RPyGdPSroX0ikU_db5HdA7gHf zEs~hEehmp#!f}7{v~mUm>JkX ziE%OK7Cyu}SG*X%jY z>1DRQnRG+P&96)NMBZe!R`aiU8!OYdZx8U#x^n)Q)aigbodO8ux!?HxXD}&K(>G#HEZb5!9{J%YwIDMNWi_YY1MB2r}f#iw-cAR_I_y{HTvcC3xF} z4BLyK_o2mTLRgnU-%C>`p{*SRAaWE&Z=@0u`(SVyqiB1Lz0kip<_vPbI*i z<3B)XpV~}RLl0%Ua0Yba#jtF0cY4h3nA;BW{V0;X6Hd8zFP|)=>C-b{?iuJmh!IDS zAZPx&3{b&Xp-0M6`jbc?nf~23Ec;(#zb7}bpM^cRKVXbW)+?H`-wixq)%#$|!A!bi zD7LR}*fVMWFk4va^Fc|d>!eU6zA!rwEqY`1I-%?S=W{_IWnFMGDa+DT1iF!!(-p@z zH9bF4b8XbF=9}w0xkM>i9j(Lu;bvG|BA2YMiOkvh2*jCEm6dWdFSnYg;@Q?dP@s zmas0Hh$KKSqRVwe+xp|J&lF0X5OvG@6FQ!db-@NPf8IXINPXmdg|uM2$h1g2c+@Q4l^S7-e8E>8Xxc^d(eTBn5B#LwNX}USA*2xGi7Kuk5%-KyiLx%CgX%Y6ySL&}7*w z#uHp|{U3_6*qa369v}lu-nv^ZXn>oG+9geri@4wkFgdG1%HPUGu$rzh-ZdPG)5(^PkB`d;WgR++m+uk>ns)Xlu3sgmD6`3;RBnl$`$yIw<%tu$G+m_a*TA6Z;e5_!uB=3*G6m&v=N|7ocbRgt?}-bm$hw7xh3oM_QU2&i}js;ub&xv-;)iRCh~u{4nn(KSKM+;N&t80 zzua`a+P=7y`@5Z!<-t?uK+JP7H|rsOQ``(?0W5Rz?hpiKJN$Lx&|u%4fOt*f4m4NiQ>njIv?ff z@Ponrz~nO)P^swB7C>y95GMc1u?g8WRMnVDI{&LOFK5H-&EaHg=g&fqllA+uK?`r~ z{n{F|z6P+iEv(u9tYcc*di3vT8I<^o4DZ~#D%!TZQj=Z^vEO-CdkkU5n8o+~1!T`b zxi8N?9Fu&iEPmnUsE2m|BUjFD#f85!yQfb&ZsdL?{%QaCZZEL^ZRl^}J9X%p8;7q| z?Z1QV@-63;UoDTVIoF%-KHa!$^T%-IAbinli6T;fDNogzO+3Y!1tv^m5`0pNM_2LB z)lzOeJNfEba(Fr;OZ?1w?XRGMr|;mx?20;}rUoo^{7*+cOW;mO@w2j9_@@#2|4Q*p zKOZpN*IoT{gGDUt)X##0$R9+~K~I{W9SA%4NXK_sdByB71_bpkIHx6H`j5^m^;sqs zU|Yo@X1LO?B3Wr*)h0$Zs$&P0E5QsYrzUh-%BW!(Ty{$@0|*bN0-yrj%Vpeb7>L?^ z1b8((a{|o0ZyIk3kmd0r{YL#%z|P+w-YmS-G@{5Sk|Yo*gNRU^1i1G#?sVNB!Gxwp zFs4VUHP9>#XE7zjaNX*>=M7uvRFUlCn>9BZ) zXOv$NUARy`A|u)-wn7adj)nQ}6NzFXO=>aGma&n-aS5w2#Ry=6pjOVM^GJ+&;i}DY zKLUxqw{l=tBMAQ}fa&vpXl4rFTl6B)7k&2O!|5<(ob_r8LiaoTM~m`%Hq4hUq8s-7 zau^8egn4}>8q5uG%GH zPaskj4XAJ=!ni>mcoJ)w*;4xXre6t#P5kT`$?53CzX(8#OlmSuIK{dpmNxOXa+27^ zlkdy_-^fY0P-l^gnWO$<+AXAZw+Xi(nD;*<*#K1M^DG_b zHZTek5w|L&OtITwOHIe7vFDOUv32Tjw>7{kO;7(e`i ze~MsKB10Yn@Vr4WPYRDqa_mmnS+^3#LMz0cC9=;=BmtaVyqfSW!oCC`Is~Y3%E3c2 z821bSdVE}k0`u9oh@(JSH(`o|>@0lN<9#@sa+>|7JOKb8f4kCvQv05OFflRa51cs- z^I}eu*;y1=yMOk<24cLN*%Bk3n40qx3xd+mg;>bSVG3n4qHEt_n}J;MEiVl#QSx0V zlOzD%r4;m-!C$YVJzw{sAVMIy+#kX7RqlGI13`2F(UaJ zh0I)8BdanmL<-Y@7{e{Z-J42WnT!sP;K|=DZQN}iQ`83!iCgt@UPFk+I`zF|7`&hO zl%jqk8lr?zQNSX@ktmKyp2pLp(ky%uVNgB98u=hoc)I|YB{0TWL*AP~tiHpe+;KN6 z?zkJuR7jLD-covHRe%;RFDCIsNQi)&8N&?~QWj$Gn&(q}l#1^mbJ7^K1v!bCj1W_R zyP&vNJchd6Hfx82AG@22i7;-z9{eO@kuk(nAb6L$2YnMJ%9lX4x7+>KL{mhn0!7w)6BH3%hD`ye#B-I*7PC87B-O zIu)G42tmPBJj~MRbV={?Vw#38F;YT>?Z+^aw=$cf!JABM1e@F|b?Ecnd#)#0$p6G% zq(w6!;uwjJ)O3=?GWkslCA?jal`D(DZF`$P9nZ~7ug7K68Ex!&qB0Q3(>#St4QlH)9f{`!kHQM+Sx*4-}e}I^qTGTI#l(V?({fG_1^2~Gxh9s z_v}+Nh1|96^NQ=WTkN%}>UA*cGdJps^=Ne1>A9WVXUR8kFL)rJs{j7qo&cjh;%QZH zjOJjtW`9_4zg=8!NL3%fsQ=MOkN?O($VhK4U*GeQz8Bg3_EP->+y40Mf#Nj+qT1UNm?-jj@`xE0uM3o5m^)VwIk#QT+c{TjL2d{{-JIjeUQD zPis;DH7Oc0A-pt!)|wEEpOng(lt4{N>`sb!y;6{#Q1hC&uJn3BNqVZn|FNv}v~2a1 zp526k-Q<;}Nx9e4MqX2@Uegu#dPKj~-13^a6F*~BJ!3OEW4AlwfSPrbo^>{!b@iIP P7eDJ(J. All rights reserved. +// Use of this source code is governed by a MIT license that can +// be found in the LICENSE file. + +// +build ignore + +package main + +import ui "github.com/gizak/termui" +import "math" + +import "time" + +func main() { + err := ui.Init() + if err != nil { + panic(err) + } + defer ui.Close() + + p := ui.NewPar(":PRESS q TO QUIT DEMO") + p.Height = 3 + p.Width = 50 + p.TextFgColor = ui.ColorWhite + p.Border.Label = "Text Box" + p.Border.FgColor = ui.ColorCyan + + strs := []string{"[0] gizak/termui", "[1] editbox.go", "[2] iterrupt.go", "[3] keyboard.go", "[4] output.go", "[5] random_out.go", "[6] dashboard.go", "[7] nsf/termbox-go"} + list := ui.NewList() + list.Items = strs + list.ItemFgColor = ui.ColorYellow + list.Border.Label = "List" + list.Height = 7 + list.Width = 25 + list.Y = 4 + + g := ui.NewGauge() + g.Percent = 50 + g.Width = 50 + g.Height = 3 + g.Y = 11 + g.Border.Label = "Gauge" + g.BarColor = ui.ColorRed + g.Border.FgColor = ui.ColorWhite + g.Border.LabelFgColor = ui.ColorCyan + + spark := ui.Sparkline{} + spark.Height = 1 + spark.Title = "srv 0:" + spdata := []int{4, 2, 1, 6, 3, 9, 1, 4, 2, 15, 14, 9, 8, 6, 10, 13, 15, 12, 10, 5, 3, 6, 1, 7, 10, 10, 14, 13, 6, 4, 2, 1, 6, 3, 9, 1, 4, 2, 15, 14, 9, 8, 6, 10, 13, 15, 12, 10, 5, 3, 6, 1, 7, 10, 10, 14, 13, 6, 4, 2, 1, 6, 3, 9, 1, 4, 2, 15, 14, 9, 8, 6, 10, 13, 15, 12, 10, 5, 3, 6, 1, 7, 10, 10, 14, 13, 6, 4, 2, 1, 6, 3, 9, 1, 4, 2, 15, 14, 9, 8, 6, 10, 13, 15, 12, 10, 5, 3, 6, 1, 7, 10, 10, 14, 13, 6} + spark.Data = spdata + spark.LineColor = ui.ColorCyan + spark.TitleColor = ui.ColorWhite + + spark1 := ui.Sparkline{} + spark1.Height = 1 + spark1.Title = "srv 1:" + spark1.Data = spdata + spark1.TitleColor = ui.ColorWhite + spark1.LineColor = ui.ColorRed + + sp := ui.NewSparklines(spark, spark1) + sp.Width = 25 + sp.Height = 7 + sp.Border.Label = "Sparkline" + sp.Y = 4 + sp.X = 25 + + sinps := (func() []float64 { + n := 220 + ps := make([]float64, n) + for i := range ps { + ps[i] = 1 + math.Sin(float64(i)/5) + } + return ps + })() + + lc := ui.NewLineChart() + lc.Border.Label = "dot-mode Line Chart" + lc.Data = sinps + lc.Width = 50 + lc.Height = 11 + lc.X = 0 + lc.Y = 14 + lc.AxesColor = ui.ColorWhite + lc.LineColor = ui.ColorRed | ui.AttrBold + lc.Mode = "dot" + + bc := ui.NewBarChart() + bcdata := []int{3, 2, 5, 3, 9, 5, 3, 2, 5, 8, 3, 2, 4, 5, 3, 2, 5, 7, 5, 3, 2, 6, 7, 4, 6, 3, 6, 7, 8, 3, 6, 4, 5, 3, 2, 4, 6, 4, 8, 5, 9, 4, 3, 6, 5, 3, 6} + bclabels := []string{"S0", "S1", "S2", "S3", "S4", "S5"} + bc.Border.Label = "Bar Chart" + bc.Width = 26 + bc.Height = 10 + bc.X = 51 + bc.Y = 0 + bc.DataLabels = bclabels + bc.BarColor = ui.ColorGreen + bc.NumColor = ui.ColorBlack + + lc1 := ui.NewLineChart() + lc1.Border.Label = "braille-mode Line Chart" + lc1.Data = sinps + lc1.Width = 26 + lc1.Height = 11 + lc1.X = 51 + lc1.Y = 14 + lc1.AxesColor = ui.ColorWhite + lc1.LineColor = ui.ColorYellow | ui.AttrBold + + p1 := ui.NewPar("Hey!\nI am a borderless block!") + p1.HasBorder = false + p1.Width = 26 + p1.Height = 2 + p1.TextFgColor = ui.ColorMagenta + p1.X = 52 + p1.Y = 11 + + draw := func(t int) { + g.Percent = t % 101 + list.Items = strs[t%9:] + sp.Lines[0].Data = spdata[:30+t%50] + sp.Lines[1].Data = spdata[:35+t%50] + lc.Data = sinps[t/2:] + lc1.Data = sinps[2*t:] + bc.Data = bcdata[t/2%10:] + ui.Render(p, list, g, sp, lc, bc, lc1, p1) + } + + evt := ui.EventCh() + + i := 0 + for { + select { + case e := <-evt: + if e.Type == ui.EventKey && e.Ch == 'q' { + return + } + default: + draw(i) + i++ + if i == 102 { + return + } + time.Sleep(time.Second / 2) + } + } +} diff --git a/Godeps/_workspace/src/github.com/gizak/termui/example/gauge.go b/Godeps/_workspace/src/github.com/gizak/termui/example/gauge.go new file mode 100644 index 0000000000..b7033580f0 --- /dev/null +++ b/Godeps/_workspace/src/github.com/gizak/termui/example/gauge.go @@ -0,0 +1,62 @@ +// Copyright 2015 Zack Guo . All rights reserved. +// Use of this source code is governed by a MIT license that can +// be found in the LICENSE file. + +// +build ignore + +package main + +import "github.com/gizak/termui" + +func main() { + err := termui.Init() + if err != nil { + panic(err) + } + defer termui.Close() + + termui.UseTheme("helloworld") + + g0 := termui.NewGauge() + g0.Percent = 40 + g0.Width = 50 + g0.Height = 3 + g0.Border.Label = "Slim Gauge" + g0.BarColor = termui.ColorRed + g0.Border.FgColor = termui.ColorWhite + g0.Border.LabelFgColor = termui.ColorCyan + + g2 := termui.NewGauge() + g2.Percent = 60 + g2.Width = 50 + g2.Height = 3 + g2.PercentColor = termui.ColorBlue + g2.Y = 3 + g2.Border.Label = "Slim Gauge" + g2.BarColor = termui.ColorYellow + g2.Border.FgColor = termui.ColorWhite + + g1 := termui.NewGauge() + g1.Percent = 30 + g1.Width = 50 + g1.Height = 5 + g1.Y = 6 + g1.Border.Label = "Big Gauge" + g1.PercentColor = termui.ColorYellow + g1.BarColor = termui.ColorGreen + g1.Border.FgColor = termui.ColorWhite + g1.Border.LabelFgColor = termui.ColorMagenta + + g3 := termui.NewGauge() + g3.Percent = 50 + g3.Width = 50 + g3.Height = 3 + g3.Y = 11 + g3.Border.Label = "Gauge with custom label" + g3.Label = "{{percent}}% (100MBs free)" + g3.LabelAlign = termui.AlignRight + + termui.Render(g0, g1, g2, g3) + + <-termui.EventCh() +} diff --git a/Godeps/_workspace/src/github.com/gizak/termui/example/gauge.png b/Godeps/_workspace/src/github.com/gizak/termui/example/gauge.png new file mode 100644 index 0000000000000000000000000000000000000000..5c20e6e8ae37be1c08392a294b8fdc64db6bc216 GIT binary patch literal 32431 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 Ef=cVEssI20 literal 0 HcmV?d00001 diff --git a/Godeps/_workspace/src/github.com/gizak/termui/example/grid.gif b/Godeps/_workspace/src/github.com/gizak/termui/example/grid.gif new file mode 100644 index 0000000000000000000000000000000000000000..7490043dead4c2077cdeb58fc27a3c339980335d GIT binary patch literal 800288 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

8^T^_F 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 z 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

9DAr9V> zqDAD4a;d|KE9{(`0uK&H@5Nq&Bs%ZkqbQzUj1FIO(mEb-Qu@4*6KgT0dRi!a6O$vA zqJZ0+52Qf8%S|OAfxoDQ283`9{E3kDdwrUuDF;;l)%c>AG%|667*b3I6r>`U4I=bD zfLUxH3OM+ozR%E)@Vy_gUzyzE@x(f}u%G%dK#r%<7@QFY#GVz(5R-KnCh3w29R;03 ztaSk)vUfEOjNj#+bq>rR#(oNOxBn66+!xDZ04FIp+5GTM!`^TUMY_m)L2+@%?tlay zY@Gy1NP+Wp0jFJJsdKUbF}a%PVxZ`A#m4Q{bmIQ&z{{*D`?`)(A;kNnq*u^5%&Biy z53z>q%P3^y9g6J#5vAXonlTlU@jCogXvz;cd&k05?&P%E03gNdnjkqX0hwM0fNF}V z^!kw|lgVtov9>~KCLhvUz2F~`LSj?VJzlY>(2TSy4pA_3$vZ5QpGr{s%kC2|j%bBaw>1PkUB1%QjZLlb$3wU$VCLi;|K|uI5X{jF(m~hpC>qQS2;9~$dp^11L)yERz2CmMcD(yd_JqYs_;BQv5WG|UBSH^ z@@ZD}(e>k=s~5dvF-I|%_6n-%(x6AV3aEmM`fv-Sg7<>92L^ZXX_&Q!bdIUu`Hq+` zbr~SOF752@V_j#F8<{iC`B5*kZI7rkQI6s$zI4;32w zv&ht|K z?xL8S+K?P*h$e};ZrGIU$QLI>z!SZTmkR*7s`43BT1-jF!w8>_l@bk6w*fZ8D3)?T zD}cgGlk07JdBDwdAbdW}@y>44l5Is>c*R6PXlj4Ox^2229JG(5sVzoZHfEi?uLRPw z=H-&CQ0Q>OtOA?zh0}YW)vB)WvbP5J%B6CVgN5&ZW?=TKKH0*_g3&bnfHJN$6$hFQ za)8-Yzn3dHQ*vTQS9zR~^BM&20nU)oSMXvSB;?35p5m!G7C&x9)8y@v{mQYe1SKx! zB#EwSVdj>yvke#YY=_(oGe=AmA%j0aNRyf{54e`<1Vmf$@qBJ{+nuEZ0eQKh7bC2+ssWb{GfJYCpVvc4-8Qq9)*G?(m@RMrSa z$5+7>`cUU_F%ckGRH`Y=IZSu;n*9ockW?%a^W8eK>lvznRM42-9N6n^A0!x8T!box zco96I;dWv1WI+38*d`nE){2vRa~T?)=|T4Qvx|d!J2WLK9Pb4GeCf(-JZJyOJr#VIQOjm$A>IvA5s%F-)fbs^-3* z1*>0eCrOg%uq3d@Z&wT<*)P0$M6su%r}BPphxN^rDb&Lfk9hwTtH(arJ9`y>VP}=L z&i6|3%`mFIM!~)io4#(*icg-+884fEucByItnT$QFgS}}goEB24ER6F%CWb7Fx^ib zX{VEn^b_^4O{+onmQ|4M&g%{~`aBGgE%8$vXytIc(o#4f_$bZjk-A`SQpTeJs_M=3 z9%D_1k(PRCyMiZWD2-XncDVbCGCD3&!m)e5k2n8}z5QHSEh*#1GnKfTxH~iCK7r(s zt(-2m&PT_JtrM&M$ISK{Yc-oUgSVnkxA#$T>29DFI#wmKPaN5)8MfbBs(-ZDr`wuQ z4PE6UcW;rK*y#pKz&BHZ5kPAQct20hkvBQ3gkbT%j2*E;sk)SdZ~kFZX3 z;Y1nX3GPPfxX0*ff8z~btEWxPS`ss@(@%15&J^hkm3G{#njAQ8nvz<#sq>vZVht_O z%_vqKdvtk<#5BP@Z`0#DhuN#GoS8LWpBss`CvjHY)t#R=wk=!oI2+Kdndn7UH$gi2 zk>4$RFAdGluTPK8Ti1uxlYJjQ$4sd-%V@VC*~?@iNS-ns2w7IIkqPS}=Fy5M8x=*v z@?KQsL1i@4_)aEiue>6x4?!S+ue0-@aEJ&pMA;b%25vg~AdFasLt&Fmq{UlxGc3}T zAho%i%o3Q|(*jIge21ncaFg|BUAP!1V(R%qN~hpjj9EDbYMy(SsVFx%fX%wUOSKI0 zCQFzP!VrAbCoByJ3(JvlkOBxrU>EGm(6ARJxaQs;k&jR6}^^`@$-mV_l*(+-H*>8+9?hAJzN)cFK`J8jT ziMa)p$~?7fTi97j#X)iTctoiS^q;9DJ@vDydJ+h{vt!_xz4aP zv|{z)&*`tV{T{*t->eW+hjq+l4^W42Isnf7;%0;t5!Prw-Fg*QG4p89X0aYtH%u4v zas9R}oH;zs-@z(g@=f36H^<$;gRHkb##X-yWh9mnZ!3WOwug*Xlo+1`y*2C0k1&5# zZOx3$!po5hL)B+oX2#*=e;hZs{7pcWdB4u=^j(r)JGN+~QUDb!sIg_fd9+tN1Q>}x zd#ZrT{Rp!DgZHVcF3w$hW>`!%oDAZ4w_`NpSOn3#P(Hr z`yRb^6CO#)y@O<@MqAzqk5@=PthjoHGT0CqzB+QJd8{;NO3ZNa&~4EFK)2ZXKKb#8 zYU3aFB`dkW(cgoOPp`eKY^>s3&Y0Ray@Tnsx4y^zarTY1jJMVA%AMDZdx{10;x9j? z*?r)Qo1C~XGD~<}9P-5G?X|hHlxLG;GWM;0r5j&#j(mKMIO2}LpAO?g5G^XU^g}4Y z?DdUb*J_&I8>Y|J#$9FKsJY-|!gJln1D6I@q)c6~8VFfW!IC`R1M0NE_FJn7t`Ph` ztLG!{jV`c1V=GQ%D|Y4ndSUIG?5(Bsksgaznz=uZ?$(abX_z_wJMi!M#_9jvy}IAZ z_&asvT~aKz!Q_A^+r9nH0(S;d$ob5R-FnlnU^AVP(09iwIvaJZ&$_m~TE>j|_ri&4 z#NBmqvs;P>wr0D@4v0v>WcU7F0p~66jCBbTSl%=_!@;`xG1@8hXR^o1?N29p-KUw) za&}6}$q{f_?8YXsW47eCQ|#A3r|D)=(kgsosn@sn_WNlozqcR0e_N^;(+H0aIb}zG z;AJyhJEy~b#U(`3T~nzTzGwga45i1q6A#RBRt-eM<`B-}Nb{W=6KV03vv*E5&Dl@y zy8qn}XBRihsH#M!T;3ah4<>dLf$=t8US5U&17z|JHTZ9k$xviv?OmUDaZmL>o5XL}9p{Zs zOSQ}!?Wu6pS95J+uiM1B?zU0?clRWZn#!FtM@M+9M&>=zdA{H;q%pm$#Usf<3M!S5 z&81>`VWHR{*IY*>LM${YRjPJ6SHQT`q4BfD=nXf!K~C+hZC-*bsP!CVYPf&tl8k6H zi$4ny8uhk3bqp~9HbU={lzb4nFBFvDEng{m(D16w;ZfwmprL2urHhV}2Yc_5S9=s@ zQ)8%DILscT8qozRKApG#Ry=@S=@90x8_{HkhHCX|a*g8mlw&bUU!(%&--U{;eQBL% zFP=K<@4+Z{H%_BPQ`|%nnM+kdhAfRLTtjXyxBTqCzRO=gylxzI7`kr%MHMu9g)7l& zJ-lwandC!H-SqIoT?OUa$>-gZd`43qVoPP#UOxPxsok-DDMQ&Sdxw9PgMMGba)0AG z2q$fg(r}*$u5Ww>ZvQ(Lu8IXKlM~`jV2#dkza?`vh@eYITpaZ~PYPJ&w1Gl%;;4vA z{3Unlk|anU&X*{vx6GTubjPOpHnLcxnke(7$~95VypeJTT+=_6#bC7SlB(LDdOrd2 zD*RmzTUYa%) zD&`6wIVlT>?;HG1$bC@Npn9To1*^H< zks04f2)e>pcAtohV{CI>abeMQXVnfPXnoW5*}c}NBT#c=>8obZwu(ugsg{~wc1;iJ z(%B_i#!vQ}yP}Wc_B-hRM*7r!INlfS)ho9XYg1v&@a7tm7ngi+AHH_jJntIi*YKA4 zcT>-CyLfAJ`FRYTZU?>Q)3x>X_pSDoFI26M_M7+V1U*0T@04E5UA$pzB z;(nwvIq}48{gJ`rKIj+WH<_H?5~yz=eVA1>K9w_Gkiuvw;{4B&{R#>Zd-^V$$I__K zro7WwiEIe@9sc}&gPmOW#pIB&jmH+hO0ve;Zp>&T(1)pR^U)g?f2Z#~qf=1@-Qd_v zV2IToK^hU_g`^jP*k6^T9Aouf=0A++LlX@&TeDm~AH)81#@m!>+(R=&U+$8A8u zUZ}02zLh!_L2S4*^tEbo-$m=8GRsD%Dt^;K^qaHsoj+kdmcG7Um<5?kF>i``~Qmie=ik05-0@l#QXf%%GY z0-6G%R7N!XT>a!68cr;ROTd5$MIOz?xbUFKm*5W_^l4XJ%FpaROkvsg<3QoZecA>< zW)Xn|5jg7G7;;%#!#RNzYLi_!)Ns2q~9}+}^ z_~p)gCS3G$gpuD-CmRnP<0bmtL>OL*fzAe_4=1Lx;wGpQbK*3aQfG`58TqLaQ)}t# zQ3WfSd`!9twaY}})gdsyBTff{DMcjK*IdC!>d>8%pPK-1{z!nNqhPmqb(})OU?{31 z^@WsZ_qhtdL-bawEKIQIMq`dS=bQI}qyP8I_2gDIxW!`J`mg#R86O=~!~u^E-mbf9Nzml;Z__{?R+`o3DVJ-nLKp?*#jpX4kgKiDUn)RIqIDng zmCN`ov)>XeVFe<7fa@&8`g0m5}d)ie8~RY3|e1G(a(2$G`DiJFK>~P)pr#h&|ugFEw&s?$P!3; zINp_c%-KW&c=Dz0VxnkECS${yD@`OTDT5!san&KQ>kF?=tYqf3QF_;wSJ$?gZpV#( z7F)S+UJEVeFQu1W5SH>@1@8Nt#IEDPC#U)z!jdb z<4++X(^8Wn+LxK2%RN|x)};?@&sn$99+dU@A{4)o8hO=WNwn2(^L|;!0j$|kl>6yR z`T2m}Lc%re^mHYO$+PF7;Sk!){kO)lRkRKOzGi132?i*&>*K-nzjACC)->133>G*d zaVxmm56DlQ3!>ly|LjYO&7s9UVnYpcO9o}D4bE(Oc%S0P&yOm!;6U54qLy^)gz4w8 z@z6s{4ar}TA96*s^W#`vY5RsrN>9z_Yr1N>5=y9vi{At-v{$tM56bQ{Vw>-F4?<3V;P7tr1#f3ZB|1*dsC^v#*Fvx+b4_UNN7#1%h6M!WOwL=5cv zb>CpfcuE|%;^kDUvnR`JsZWndfjr-Mwh8C^7i08Gj`(B#+Jd7Op9yedo&~(h6OT3kl_H2c%$#V~=jMo0MCfH2vk3vr z)d`EkL+SnjWhe+2XNm<5WKspoJO_IE);0=Ap&tWDlT3_YZr+bHI(x}XXqS&YeL~2 zG!n|T4Fqz(d91R3vS@|7Z!C?paP z!j!?8{5G>Z6M2x9$v11C{v!gC5AZx?rZggku>>c%bMrj@l`avZKhnE2J&pN*5OkbG zZ${!m#(y)iLn7L?-mx=ZnS$Ye?yNzzp;1Ap49!EZM$>~3U#rRuDCNHk+?o;OugOpYluYL{$bg{CZ$q+vr}*$KxAq|N zXqH>6r8qT?+$Kow5G0QbRV-SH&%CR+`;+{T@r3iUoGMtkgdnfqs%Q_Yyzfe$MO1DL zRjdf!Zb96BCs?7kO18j}U;eCkCU|E-u=0)TolQ&fD}_7#i{u{Qg;K-%ZxT zR1E#B$n7@bc~Jf{sABCIrEBr_N>e4x^>%yQ?PqZnKW@3T>X0{v?x1z=>^`gD+o%#~ zt`b(f&G)NPR`Cw7LE%uWeqedK`DYbKxAL)I_1m9SM_IS&S(G))s!xbJGp;piR<)A~ zRZFflkY)-wKa0*Spc#=K71s z`VhtXu!H)D^14V}P8Om6?4`Ko`q<_Mzu>yWrMkd_h9sdz5+ke}-*^Stn5Ee8#u$O? zQPc0y)eke9&{|rqK7G*Ed(gDCp;i~){7|>)`9^ESaLZ0}lU_|r&r@^?px?$vIa7&xO zA%lHt)+9H*QtS|J>1ogIIX>w6P~Hvs-BzG@{VNbf5j^eW&H;YSd!CGNYZ0CzI+rMj z;B#2;O8xFE92XNp^NhG$Us)t7R}}c`)~I@W$p~n$i#>J(;oHFAEyF)iOkG87e*;x)Z{YWdWC^=QFvY zz-2@Lj_R9O1xcX5uvHc)3QUOw&?r`D{xCCTIE?@_Si{@&M!Y76rmaUSezUORt#vec zjuvxxT>(~XxraB19~e$f02r{78x9Vog6b0xweG`i6zhpju=DoVC>40i0x0D(P2$Jv z$YW{L@y{bn2MI_Naco1FV|IDs@5tad#(}#kOiqJSgAWoyg#BAL6UH*Jc`z|yIK=Wn zqv**Z1_6Z|yJii18)5oo4S#nyQoIUcWMXA;6L)i1(AQZQVx}T100lrY0IP5-lOzr- zg8`)hAW1wNik~0@6EHB-NE3U3V$8llkm9OMWzyP$$R%&D0{y z#$cdEsk22mfG>aYS_qh#3KnApPAE^g;zv-}sV(;j=@q~o0RO|xD|Rw{T!v0m&B0Lf zQULq9`>-@^q|SY!VH5PNWkOha!H5-*s$g=*&X*7vUyXm#kWS+^a3;cvXW}f|_1S(Kz=1G1#R@nQR)$6Hx+pXGB+feEn9}eoY^}=-U*|k^ z#g}!UI20aigQz7>1NlrgSo*XiaSYwbM6!WDcL#rC0k1Dl2PKZ5_L%<33OJ*{GSqQ& z{#h68iiE*6Y3*-)pMi1*)*EV^%xTwZx_)B-NUKlq)n zq{=o#B?crAU>vLR4a|WNoz9o?lcVt?sZPrz1_4C{rbZbA)QT8(#kB42z6Zm0n&cy_ zIdy_;ROVdt$GBJi$A2O)epc+~+Ccma{|WV&k1#2)`q*WZ;f-&3;_Ac%ko8f5?RaEp4RL1JLxTFx!yXaJ>(aiD#A?lk4)OEjuloiys)`&5peAx zP&&38N6Dg`aXbrR@BO*Ox*l3Iv#j5CA9)> z-<&MNEtZlIr^2=hezP3Zdq6tsc?re6}-qaQd7&b!Njv&I`onCY2yo2K|I*I-d{vV+)*5ntj7I`5|m=LH`9nr5;{? z;;H{~?f2xQ2h*6%yU$_pKeq79dv9~EuDRsb=eX6?-fMJ1HrAhLY_V%>7OQJN&Dcn* zk2q*7CCp8N7(mu=|K^w!W=j8P+Gcys4L|OV0lQrtAFE`dp4fBEpAJ{vymxQxfc%=m zHYHUt?QDnmV1w|nTa}_s^^75M+t|XwKTJ`R*qN^yV~mq%(2O~=9uys_r?$rW=XsVL z{7>6+e!_mjhZjQB7i*jQB*N4FikBa+zswtd3pxug_ks(qzWn!h>fPP_^9J3Y%DXA$ zohriJ#a7+FH$F8Tv{i1XEh~1dAlq4fws1%IhHOvg+~p}}=I07ovMLY-s5O>hIN3-nhK zDqvXW1LoCL`y0TzFgV->?0+-{Cycog0H2Rz=%cx!+~fWvc*Kpdhzks;3Jk*o-$cI4 z(q6?)d=+Wi3<>`b`axKCA@%fvv*A8}8X9(XJ0Vn>9gGH?>3={wHo#FOhzSQ=y!&p3 zb;VrtmrW9glD8s+eav66Zxsfj<-RCtr?p(0EXsS_dmo5V`DJdv#M=3U^$hJRc1!lb zt@*Pz$*u^6TZkj!82}HoCL!`G#yYLv&{&obl}upb7^HJAn00Z3W&B%c+(+_a1IypK zgkeT~m;?X*g*%<%iI@z7f4DHLs6p>#n~)Ag9CE;2Z2(eQIwO9XWqCa}??!$>;mxAL z?9z0jsOSn07NEQ$6q2T$5PhwzxuvzOz4>IK0!i4Z{~S|qe?PyN1K`9jJRvk92(V5r zEIG`jG2M0I1DKXb&~yEF`AMt&j~GPL&C!>2>YO`cr zT_p~fwMDQdz%~?`4i!tm>^SOz;o5$nNjs_x7$(##xt;%_+6rx)4SjbaIZup(RcAk9 zs%E(~<7j6junKEvf@pv2bPkxl>&%B~_3h-Ye^6s_Q_*vHZPuV3_nH%5m1e@H!dDY4 zy4ZJU(T1O#D;H$cPkRC%HQOE(9c}c9xOE14Z@1ZZ#C|dAULJV9K2C(Nh}rxQWpz#C zR`OaIRF&k<6t%u>Gt{lO5UvvPVrA${^Th2ce>U4;_4?^swk=+F<5l*f*`*gs-eZ#s z;8~#ng1p_Y&#W6=o2WIDS%5s_uB1iJi5vRzb~Sh0|7pg}C_RH8M`lH4XI%uM`zLw= zGHz7LeOz7Lc_lUcyKdWY;?CKL(^c;_G%4_9VpwkAZr17!jL051TE#5S6AOVv8pzjNZ#Cp&)8=f7SnO^Te{c))sRi>p+8Yvb z;%76JAmWCkf{e_~YG(z2UBvohcoM1=Srgr9s0tvDc1+ECPh1xRfaxa8@lKrWbrX}YC+^fXMR*AqMcU_S!QwM(r|9G(1_bV<`ClS)bqxhwxWE z#P3DSOa`MxZqlPS!4IgiS6T<$Imtx5ZV7t9PZ!a!$gp{+^wVUF-)5gk4#)FiR;Ykx zjY=P?VLkcV>g_(3pL<18OzObT$P^fdrhs5K$K?jLZ{dQcEu*gLjt&P&I&hzwam?3| z@E48Un>2r+YAPz$MrI#;4sN;-tN0;ZetSTo$8b1>;&$)c6aVIHzLeQA?`8$FU*!(NnP@vC>)W82U z{a>yn=#Ay1nB+~phd~+V?ed8ah}1LxK&ZrY>Lj=PSH*n^Beu97$xy~L%Y`T3OVtW1 zxOK-z~Z%J+mvu0?A8d~b{7Gdi#f#Y))?HO2B$vT19Ot=M=ceCbYc&L2F;oc>vh_%*P*WMw=)gZ8h5L+RYfjZf1Yh9rS{&C zOby~66Zlf*6~V8ZwYc)OC{wi`DtW5G@~-8elJSkudQDCleVhGPfD9Hc@neU>22BS* zsCXF62nCL4P6gg8Lt*lt*&&oiAUK}LXx0(gJ0DfHZ&MA69PXwFt)aN~Ex@surJt*X zyj(wUMhx*|M9|2-RGHQ6{wb0|laY~NaR%x-w*#;aAky~tb>_ z*&XCk3jq4-0S6aK63sni0*h^C8Xxjya+iOLD?$=^{Xk;Q+waaHch*|b#Z4_P0JL!9 zQLVt&mPg7^fnzvP;Lk#iY9>V3ZMVXExSDxDiS!X3F>KVk!W*bvd;Wy%4NR+{Xtj~# z#(pxhnQKw|3keha;;LBjcLA6 zSqnw1DyOYq=#KbDX_ZhA0OAy=?rR-mC`{-St|DSjzX~bz!UI=M0=n01jK!st%x}~h zb_0=bEGADPF)bvsh0r7c!ch6$=tvGFDPkEdnX)O1&dS2Rj(&w|tm*A{VBNo^w|2}HmD0`4o$w({oE*!si2q*vJFVfnmGOD+`W2i%wkw0V>Or<2PY zNlRg+(Nen{(B?7PYC!9LzYaNr-40A`E`b7=wI=(R^|kWjx=d!jX8VzN-aFrB5GSu6 zVXh3G<5%`MZ)fAisg3bn_|+OD`abxqhtMWhRGzAW z+W*Y}J-qAp(0}Iz8vT9((w^BEoQ!a%cea6c@9xDZecN)APj(DRL^Q;|mp{)QX909> zQ-8@l%;P5hc1eQ@fBF(I<>Kz3>zj*uV$CJHKd4AA6^0h4$8)p5%~~wR&blGTC_V zV?s-neCrP$nzjW$|DX>2!>EmAHdU>$aol;nfH8zuWG6mAqNmR%DV{1h>3)?Kwv_2Y z47a3$`J@M$r;^@l_h7-%zXS$GzBeztJ(g?5>E zeg7JD6Fl_mX9yjvcI%w#=4&nbB-5Ndj6EGL`Us*Jn{w}4im>A;6#->`=~DnrH>5K) zY&DssGr9H4sZC#w{Q^MN7t2x%LUY~+7ywYnB`yNSzgIUm=QrK|Bwy$2DkDexY=a>OuyWgLO zzA$$u3uNBb&fbI-6=fFfn!(LW;8sBqMuM5mosK6Ju5}6IB>9OFh>#=0Q;Cuy`QM=| zX8uz*b$-3QfSg0fcOvZY$yu+(y`*H%&~(KXl0km(-NFm9pA?(yPpv?1j@AV1R2h)o z%I4^#f*_{BjMpsfWHyQxT>d1CTk;`Wbvpdhx(ad03wB0rB za5Nvdxh~O$2$Ttc-)eGN%7Dw^?vu`7ZVKVaI}T$F#(!xyiB3ml!tK{k5T%$2MgX2S z5q_V~zT*->A_5-;@1zm@wk<0;7=#r1=FeMBiVQ!!)9pl8v3pj0I2Mq3#mtF0A0`Q0 zUu254^iRO@fhnim){vP0rWb(OBQZ{#L_7*22PAOdsv!@V4e&0IDP~?21drG9oWU{Y z8wX4or%{+a&O;5bN>*Bi@5;(>++<%~Xs0uXlK|ByGv+sOj-x{K(13}e;U#eG85GDA z!;;K|J%g!HLe|C2GpS_PZuY^r$`!D9j(8j>x`v-yJXOqx%eOwUERZ%$~n(~r~B>AT$R!G)jsC1n|1t$@zqZQ45M21 zikzT|zCRGa%m#;RL5t+vxwB2aQ&tyQkvZ(yQZcn8&u+wGddX*1{}zgop^rJaI=Eun z6!4Qf>8la-P%P9>G+HfGfoSG@8R52sSamSl+2I*c#by9v<(kM*f6*(yG=i>J6i0Jh z-ZLMms(VwVX4nlx695)4 zJ{u3nP@72&=?yIVW@b^JwkIEiec>Rf8K1wE(1x?rrS^7E9NKVW?L^2e8HvG9C%BB-gS;UcnTY$F z4m7M|#_EK3)%ei}b-;YQjoLNvIUz1>IT2H)Bjtuev5$EDL#?*z;%8@SKfKvq#jiQ=@Zv zpN7-&>AJ%T)JaRNYft3m@m=4zg45rG;*p_K$5N^9f;-dUC-VbJUrQ67cs+e0mQo?h zf(c#JJb#Zb5TMBwrE!~02Rv|;CIc`C1EJ9>%iInKbbyhKq(eFp7Lt&1%^*bnqKDB^ z;%Z0_3ewEi{`5^3-(jfI&7f-3EzNEjrJL}F{qeWngpfz&^85oj{1*@{4n{H# zg+Z-GJss(qxm#ihbC?Rv#SbmW@Rhl}3W595<~a}Lr)}VurDS6;5~R+{_8HLd447Gd zY!4>pUSv$17BVp=&PM1|YCt|>6*j$6(3X*$!I_YOkk-RpVe5q1mR<>Qj%WUyIztDq zjHfWiQS^Z_MK1IM3w$(V>EDG08`tlcNQn$F{?wy-LB?kXKS4>y~Rhv`m}C~3Ze)PNtP8*TOPj7gVLqRTzuY(!{FQgk>#aw>J9AFs-$s%7N2 znIIgW1;(yt<;rP5Bv$v=3;!nfB$ej*ijcA|@@}!eYJKv;R-NBR;$x!aRpuKDu?SUK z4Bt+{r^GxMk5a}e?9I-iU|Ft^Wq#b-E^jqWuhkjH)MRK}VU(cQNBR5>Tdla(!ivbe zM64`Q;XLn9Zs}?%=#AmW!Q3}Lf;*29MzK4e1h#z(;Sy~-ALGrjWcdB!8=z3rNHvWZ z;#RRk?$0D~AqNzH9?V=IHwJV5@7PN7Ef*OD+4WSiCPh@sOF3|qef{@y8!tZJ2yW$S z9fjWbR^BF8mm2{kK$;Hv44!1p8g~h|*D+Mef-SwW-(_m27e}OP{qrR2D(|J)KG!b- zGF66&LuP%SF}1H;F1Dxhsao=!)>Y3DiGQS*_qen}lx+T|?8-t3g=UaGBzjGu`Leci zfuR1jqZ$FMsx_1RQmumVDm2ePq3YGWK5pk++k6G?xABNuyPs$IMDE$1KD0^}AGv$F z4G&2PsHu8l$|DJMIMxRGs!M*Yd%s}r3r^rfL2zz+<+_GDWmqz9S-$zqt>!u`kf4V# zv|Tz_*Z9Cw=jqBZgQFo zCZWey67X!A5!pQr28?Pc!7=JUl3#C9y6nlCu2slV1);;f=+(W)CeaRO9IMUW6m-tj z2lY_$;z>QHKe`ww$-aKDz3@Ul_~6Tix4x`b;Pu^hu^hAWT*`JuYSq4`G5N5wk=>&u z^Lgxmn>4_83V4#%YhwNV`cY{1ymm~{w+N{(u8?UpjxXvbT`I02rIZ$#$^ z5j-GPMcuvd&x)PC+yz+;fj)A-rwxn|34Q=$+4jHsX`}p=UVrsLd7WE7rb>-&H4QEP zuVvfeGN<79?DFQ}rHzAMNMSu)>z1G_S8~hmTUhzd|GjJL5u4EJVMACS9TibBu=Nye zSwprZm5nmur(!2g+vSC3=;;7h0xks?SXj&}`O_|tMh@iSiUh1yJ5VrG4;-x>xGhM8 zNWwYgC+~|jM03r%j?gnzYno(4O7Ti{wTL2_`qL$f0V}gQMau5Oi3mpzEi2Z&MX68A zKt^1Su3r!w&w?;jYN!2ix+zx0>-sru!$&Qr#K@+}=v;GC{oSfP_4vQPtgntuwICpTs!l(L)WLOMSj;@A_a+*6@T*(?uhDhzgjOQ;4csW@5?6NVYeizEdwu&OpDUkE-q{(DH+Q0= zV2y7OmhXMIeTMuqQf49^K27Dav)CbVT6J?c9b+;w z&)zqcy8%}bktx68UW9frb|&G#j%a~S7lhdZUm_yq8GkjNdu@hvJ>ArwhubFf0g7?# z#l4KO;>36&6#cp?C1o+irqa7Wri__SQyQKN7WvGK>sq5JSuA?g*;}R*fIO36x&FCc zE{u!ot#s5c@LP$?8w&R-Grp$CRo+>9Cnulq!PUAlGrU_~W-cO<$w_(7k-I!27ET2l zJytKOzph{jug_*PrJj~p;pXtx^FH@D%2=kj8TczBslcKf%ZzQ&R(#Ek_%qXBQTtd! z$d+C*XIC>L-u}G6ocmhQ>rk=&+@UApwzUdbGIlg7giHS`O=Vy!Wn`NDdAibx;qBXc z;lm%YH>Zc+wdasVzl`UE4;)X8TpHYt7w#AVy;KSx`;n(~X;kme=7*85$D4#{R;eS} z3=DSkeiqfi5dxUv&gfPRNQxQHUoWVj^ddc@`Gw_p%rQo%D zoM6v7l3#jFb?Tp~mTDVz--3Tu*46aa=1Il1$-Z&Y3f=%5sY z;hF`Ws0ao?bvjg#$W0zGTfA8|a9(0iUf?7jSeF=4&2NlXFd|TxxVMS;dwhAX-*NKd zh}JwG@ENk1rX2SU927pI#`HZn5~zz3fQVq@2sTpSrk}K&q5`XptdE@gPgBs?&RsDjHb)F_0W5CBHr6uTuAP@al95N zcKj7^BVHfnO2MPM2X}bx{YjPiUm(+o$y&JnURR%q0Du|UC7zL1y?6O4voncEg|^nB zCIq04HH%Qa7eko|=b>RMTd%mP0oy`iEuvE=&9Xo1e?TUB+)lpMsYk{tfrSNsTLTqs zx{>L@S87Dw@2djU_b#mzFe!ExnyX|xxW-}O5(sicoj%zcumrRf@=SLh>B>5 z%E=0AYl*2T2@49!3kqsV2ucVlN(#zq2y3Xy%gSmf%gO6X>T1aA>+36Fw9K`HEir;t zdM8BfMMWb;g#HIo(zTOBd!o--inuz7*!;g0C4>J_l(hdp6(!x%hKjoOTBn1=Je);r zy;QCLQsVh03(sH&H-Cnug!|u? z(&hhSDb-81ik-NqV8JtpG{YX!9OaJKD_;^cePgMow zKT)aY_Wu!;nlEMi52uv+zec>-Isf;F*T1-=wDe{}A3S{2I6l6%{$PG~vyfX~n#8TmM|%E@ zk=*%j!rT93?BkcNw<*VJ5lP|MfieF=*#Y9Gk9Ic=S)UZ;$nG+?hU@V=Hqh7d^S67xw#K4q0+Bq7!soK|ilI;yn`|ZKz9v zPb-qXNHcp%Ty_e`JQJfFMT{}s+JT6_0#UJ?9O`ODuDO|MPYGh0lKk#aB$rQ?yqV)x zBwZq4E>a85XUv+S0XStp4882@1K>(CV_=+XP|km`1w>Kab~@1<@p^JT6DEZkEKjK0 zSr^N5In^VX^XspLNf{g%DPvI{FYM6 zFOORqxfLbxEg>#=PdTNRJ|W)PFH1k+yX})QN|+HL9ChZ4#NJy>gW?5v9*arWM!;@n zCzUK`6;w|Jhe+)*Biy9>gIgF!T}%yYN>)K*^$GefuG)bEAKAE+GB;dWh1eCL)R;jD zl;J;ZRXAABPkse%$G5y_ahR->HTZ&Wq^?s{RfuDFrX*y!wi%38lH}e;-9x`L!RKB1 zDw1zRXfvc;8iLfKrbfv;iI}MmK5-|8Pc|Lq)OgeTH)+bWC&mf}UH!7)jDc(!oSfu^ zExBq`LypL-hg;|=Wx?r{lLkW9x7_Z2Frw|qq6BECZXpLV7q4-#jCBj1nUF*_r^tU< z0^(&=zO6ZZ^!fVO#oh6n+EWl{e0A(PKHdBDBA^m_ zV!b-6G%xF|LGoQG#g<3i!pg|9zVbctO1;=YuKvna?x5ahj9@MKMB>K`=_laLR;g9pCYnb`+D8 zIC@8Z@vGHJ&$Z<*U9__~A09sv2Le~cO)q{-a(U(X<#RMgXP<3c*Y=|}=5sk`5GW$p zhV&a%HmF*W%!-D3125CH;PF#o-RL`24`D34njEQu`p_k(Il~#108&uMmJ$iC=H_Ig zH1L_MEL3PH;Ew{Ot>fA5&z*X+9Uk`ei^*E-?n&b8Dlf7|RGANtQHeH+@zZA9xQk^L znX_f~llBEA_nF8Zo05ZT5=mtDSnbrr}RpG{#F%%6HZNL@0H2CM7tZ(Z{x4wv1jRd^;F3?!(cxy$kgMl zWl14|0)A~P1JYQDUX+j68QjqMQ;#a{g}w^1yUeZAoabQvaN3?r0;0Kx1)o!xY_!Nf zYp8F>r+nQTn~<^mrtV9AwbJ$HG&2RLNEL9}hZJ*_D0r7J=lU{r_RvXC{+PEY78dr3 zjbG^QeUmGk^@_=ip44qUr-eMdB0IlNK&2oHHQbhi9 z(Kw|q@xF@l+_~wX;?$_S-jH5&CGYE zEQgW%VLuSwaE{ogJ+F&HyLm_~dFTu+ksYtQTqNibB}0;R2hNEliXTw#J0hk|6|BuT zIu31Kv^ghpB6t^Vd#raanlEIk&)w{OLHcQR3yzhkN3JYJg2Ftt+mhYh}2wq9|KsLR85MUnC7A4AEL^5NAxn4ulkIFmzvg46qBzT zwC)Hg8Joj>FZ$pgK7rW1kLcs|tnI>q;5Wrt5p1E)##z5#gsgfi5e`K-dCm)!7hxpg znUOszis7Yjv5Y>sSC6u6C+qi2%+9U&dR4H^sjF(@-hCLa*p2~B+6xHh1tZOMo&=kjr*wjzYr*VSI-aV1J8Lhe}&PpmZ#&({1otX2Y z-7g%`Xa9KZXhrt&tHr1*moxBE7XcK|zMR?WwUvo){^VL3nr9cTVYo~%JSh;a(kmzM z-utEmlJrOCUX9_qfXhHRH$T_Q_#=Im^C7=DGedhvkopHQX2S`K_>d&j7|Xk{VaDa> z&NiycVE{ebc4m?MwPREDS*SXhYqBJ2D9|$$I8UO49MNMs{GSel& zg<4P@-PdPcBN*}F{Hy~0a*5Kug*MO4ZFYpt)2>U+@#i;QID8+rHt+hAICxsXL{mQc z&(MiCn-kHw(G4ffu&+X6x4CXCPQL0HU-c;%zm2kXoqRq&vakNi2TTQT)e%|$F}+gv zztzvU?ffQoij&b(g9D@dBshlNtk$5n?EZlC$61^+~M zR=yVl=d?g`TO?=Ic)M<-q(!d?;Cj7OsYtLMOLP>kG#m!j09PN)N_AHeS%E}71+kY*>O2_R9J9~ z5PJaMuWtw#j_LO-H%d#hK|WNE6B5K@7O}BzbkzdNMD6X)F+X z95B68P{~yI)=&TFE!?XfjwHm&K7-fn!-+SAb+Y_A_CyrpoPFUp)E^|((F$`3@j0|y z_8%FWKjP!P14Nz)ooPBJ5(`oH$y6>#?JUYQc^7uGA6Rj|nL|j+N2d*egdGKn{WXhW z=W-S8EmVFcTR9efQU$(zN?CH2XW0&kS}aYcl;q5nyxS|0sG=8J_{L>EL$YY=*u8@% z1&UiCGCfrzuf4OW=7zXjh%j%7IM$68gF0OutJoZ(JQ@ANkNh<)S9!{30ZQCq$ znccp{Mn;f7>>Ib?%RGn3(w64_mS{gqctV^W^fNh=D8&6tDB7|D$hXrfs(6s^>I*dj zxsstVs#rs~bby9DKK4Jt|8_-S%hP*VwJtFJn&+s;p0~Jfh@9{0x}* z0k3HE{QKJTIhVMW0{owXNR=xQ#0YUm^6~ADK)G>NnP8JI8FpO)XZkAu zL$3xa@?UrT3_zw$`Gc?br&Qg2XY*Ny?c*W^c5D_*mp1EZVtLqP#?q|uJgDe8L0QI} zZ?{ZFPnX{Xm-mfR$7iyJ%@Qr@OJ*-;Q(CI7;FDD=Wl!uf({PKE(y1cn3ovi1DV&%8 zUgqN-EHCRX2{r^7l}rANt;Py+9XM3l#iu?(d9?Z=^-^kbwkv(IOxeB^NPMb4|Ac)b zHJ5);#^+SpP8NPVc%rna6Bx!?5zE#7IH>IbGB|w zpL|<9OSzP8xKIm0k?ppS+RW30=O*yWyAV1#LNEqze>V2ctWboTY1s-;b+7r{>JaPg zC9hPPg;E-GJX%cpN0LS4Rb{5D%m|l4l-{XD)?dSjzs(4XTEss^7RX@-1=rb6s3os5 zSdRAP)!Nr?Nr$L5e2pAr``T$tN;+1Wv#?7(7G_E$3LSD|J0Y@%48Y_92L+J`;iBjs_HYoo{gryX4!a$fAr>wDej~lkO8uH6 z-I~99RT6+;_kob#y*eX(F`M)O&yYS{)Bx_VFMM<0OiOUbVzc!yOV86*&fllw=2(^R z=T1oueWH^6cSVCtC8YN~lq@9PzI9OE=Pr+h=@VeaKzAZ#xOEd|N*mT+g|+EHdqYNA z$s@-2k$Zi^1HVVQ^hTNwN7`6M#&Sj$lty}mM~tb0eF-CXH-~3fMps5gAGa|6G&ax95yK+8lczJdy;Awz`kMT!wuc89!zjpG|;% z)*G#;f=vG&*=U*gD?ITwWCZzV7+NtwI~-#@8vD38u|uACYz3b$ZtbU~-5hZgIYPcI z6fX~{G0`O1?JI}SQ##~ZU7nniGj*|%#)3~^!ALX+ga$EfgS83MI-}E?t<$<5(^{j` zSdSTFkr^fohzSicP@b{M8@0~5tW0|x0r;a?6V};_p)(i% zOa~~>Sn1C=jLzbeL53oLv;N!}<$2SUnP_FudHwmQtvT1w8M`CE@6VjxpP38#^IYgT zV#VAE>_RRhmCm|oaRj^~&SWG`1Dy*&D~r;UIoH-Xt3UHP%1d!uGweio<+dmYltqOEr=qc8s*js910Z-{#DlF6!7Ipy#Q zi^bO^r}~RC!>b18!$z0`h{!y6oLl872m)PC?b-LlTeEIVz`MtDghu>vmvScVeJOGQbe) z2=Z_>{Mqt>mQ38)JEdnQSzqLKzW6kTw3=k%*ycC`+%zSer5?cIX>nCB1er~cn>O5$ z%c$J_mqF6YhcHZez10^x2HO<5`0?PKTq3YrxnniS%)QO?H|(h%od7l8=8)aq5jYKv z^0c*nz>|dAWuto@KsJkT9^~fyb<*7Eo3OH3Rv4Dn?(|~i!Aj%#< zOmDZDpRhlxD){#~I1%?c2P0>IhHN(P734FAqha}mqW*Na$pffvDEzF~OD-c zMT!Y6!{3@;jiE9vwZY-5djJLa5S){{&7t@$iKhEzcnK(TfUZwo&Ot-X@USQv@OC~X zn#xQ%Ehm%z2EcpDQ1*lA!$~+876)(m0I#HT&^=JV`{t|nuEK7!A0UXL8A>(bT=Cxq0}{Ht-^`cM`ltReW{%IExPztIe-+ItWC>J{&v^CSl?=>vRKQiTN%lfLwMSv}a+ zuUI&?`1&evPycQ{`$y(za=BWjI`(ev`pvDQww!IzdY0i_T#AkDm+SemsQ@H#`>+5X zQ^uemtdFzM=dF{4FF%Ar(9(rix-_%)s~2kr)IAQnd?B;ec^{5Igw$#n*J- z=MJ#Db1VrbYIKlZ>^VeDY>M7cx=P)!Tz{#o?UXDh?M=14|C{+oyyGEVNp(9BWozuv z;m>S<-H-hEBm7PWZA#(jW67l#Mfc%yrl@e*ZVm=w&bekBC>PGyN!($U`Yy`|qGbU* zB@dupA8hgW;gg=IOGM`EzZ?WK!YJ~4B8|D~HvFl$+>>)KPJ%x91!yO}F5~ ze^QJorF}b4H3450mm{L0wX}aQ6BrZT!G+ksW4NG#jwORrvUJt#XH0l4qs?S>tqy`V zT+^HW_k>qTkFFHQSO;gZ@=qwYVo6wt3@BW9Xueg}nplP(Fz1SK?!LZ$Bnyg$ndJV6 zRR13Br#k5jyK;qRk`42~*_kAkjE9*Q%8t=}8e(pXU75dVq$zh8to>{flB>xay=4OU zhI>ltg!9-JHBKWq#2#4nzT&?mYMhZmRBw4|?`O!QkztRf0~++lkrxR$Unb@|V{JqyHTJgY^EqF>n*{En`YR?ZvFf9(^yA0Tz`mR=-F(vzYY$ zTD!`NtN$o)h;eeCVsf1w2t{ay6kIvS(Bk;CKBR5^I42beq;;q;;$Lg8oySw63_-s# z$)ieX=!9n8_arixlDB=PcU0Hm~rbr|MO!4Db5VfEn+GJo$c!po$zbpSxFHe0-Ve+h)Jn zWLckqY|fhMPisE$;?RYy2uy26b;co^)rOk*Tkb~wyuK@;qc}Ty|B>1sMNVzqOlrrI zi#vWDvsWFJx|gmFaCI$3Wq#sV4-@{>_bg{Xsedc1xwUU!Kl=0Fqj!K($L_m@mj0jH zq#HwDlrvTIzn#`m9(tECfbTde^u0H@XeQh?#`QS!9^*N8nZX1C;^#lQn31*6bzs%p z$|0t%7{HMBRZMCGT4?i(-xnQKx^Ws=NVwvcga#5E6f{b1Nz=& zq~=62Ym0KCwwvxf>VMnt%kuY5E5r)S!M&~wLMa0gIw~XmoLOsQ20jcwz6mL-IG6|@ z-uz@00qdk4p7sK<-?xt5{PX(T-=Z@Ig7?Du*{*(fO+>OgSjQ^4UxofiJtJItE1oGV z0dnru-`!A2kdqb%g?@PW`X7AEOQ|=X!Zb!;++X7L6<;Bbc@44mtEA2ZzXH}K38*D( zl%rw=_?F2i-%pP0=d;)L3QZa6==Sido7JD`2NUaB{vh zbA0)6Ot|!g_I}8D58aD-vn;@pkbK_NIVitiF6X##?z9z{jjM8#Q<8c+%?3s*s2$8v z;E$hCyRBBxYT`%|QhJfXX4^>Rg8bMEK= zUpsd;6&ti3|99t3n0|uJYt-Y2ng8tEX*lx*WgWI1T=_REPhBK zz={HCXzMfblJ^g7o6d&F8vXFey~^tFz6cg|-k!VmHGzU^abcIX`$$v6B@Z51#RDcI z3|_B95JnLUxggNwa=aR*=mol)X2-DQA0}e6aBOy~vcY`R zCvh)^jpA>ofx!Tec&BvJgja&N#a@Dr4FSX>+s0cP4U!`tu}a!$`d49@@q@<06HCVl zS3NKkkf94&T~iZHLAp@AD!Rl1HqDC#kud;cjBpz=o~80J zAge!AJlkw^ zXPW0ZEyzt)*io7i3~YGi1wV5K-0N)j$yo4ceeRLMK%dLXRk1fkomJtvyRB(B#=cV>w7F1jlAhZt`B6BXSA|je5WOR#EN{ZvgZH=`R!Pti=wR?+^ao_VD^H zLHKAOTg;`X5o9YE<-Nmsz!VhYT6}%(@kA#S2?9p#wiggGhElz58{pcc3oLI6Tc`)D zQ=AM=yT>1gA#pH4Droow?D8950U*Nlx`)w(c*J#g!in&!o^E=f;Z7;Yq^|Id?oi%U z%C;x0V>E#(rE{A{EA?A~l4)WGk4_>!@xd?BM(Q;&SR9US!)_8|ej8?d8-`nmvF!r* zQm@^G`Hc5?GT(z%WrB}V>9H0t7n={nTPNc(iE$r~Uj>-4JIv_g;G5SEtg>B%EQuDJ zR98znWI+PqOoALRWheF^57qquteXhKHwXbp%eskRVKMLBWmm%&Jl$u*kV1_CxT(|= ztA0zz5)zNWV6JH{Kf~n&JOycIeZQv*em9&l&`st&3;VA3q{g_>)F8^xq|z%RxYqP! zZN`&PqYeSx2&l0^=b8JOx*{QGl!<2sG&7h|nZY(X-Cmh&wV7X@WQIP?norAI$~PPc zMsn_f(3c&K#uK5JuZl0Q9yGD$WFT=F)SL|CCD@AY1)U7D&8!3Q(j7L7ZAEe5jZo)T zus8|oEzZy*z{3N8)18MV1I-DbxCx|l8WIao`C)+n2{0UpGsjZJD5P`%BuXQRQ-Xz3 zQm*%M2v$MVnT~6C=#m;DoO&sU0Sj&P%^s0J62r|-h+3Zrh-(aIpYk2*_H!vrTS^9P z6}mm>_Oq-HC=f`$Y2sdBYPV|a2E`XZNnym_u3jc?3-wMoHL^#cjQtOrFLgFAr-;8p zFSyxXO}hZI!ve;~0mw(Y54I#zkHRmf0H;tJi>=%2KZs$!Z4i{??c*uzM)r(f*V!hD z*jW|3zH6JwFqs8pq_>y;uiP&h{E5K=05$JogG5FZKR#VVwf@S3diT#K(g?P8Q%AP$ zmp{5K{csBmcVFl(ZP)jBj6`DPZc8d|omONc2Fwxw z?1HbsVnz0T#XhR+*R-sFr_B|5dDK#QftFQVLM6nEW>5u^r-E_V^3<=Dh9*|Di!?6z zDxQ98=dUun8C8N!RqN0y;q5AMbaib)#j+}hi&)L7a9}Bb0rgTk>nXJ$jUhvYNEL9& zOD8>WdPJ!4Lbb$p%{d>%2i0OhbPZN*F0LKvO-KAACpki?-FCqo1$c;h5fCQm+AA4# z6>8Pv-;X`fhsG|zKJ0;Gnfzx?0m@Veoco4V27oWPoy7o*C}QZqDgzfxQEpviQ^PHA z)%jHT4J^Ws(lAW{B6^R7EZj`vf<`Q0(*TG`D&I669Km#q1rQ(-g!%%iL_$Q&+)a!U ziNqtXVp%ah?1==PTS5ZU6iH7|(^fkCmkH(+?d~)ee<~eZ-Y-!u1P{f9njoP0@=ZXz zK#4ZepWZOt)M8UDi@`%LTtOJq8$UB@W|*~;RR|M8!!8aQ2q5ln!1H_H(*VT^5A`K* z+@M1qdVph?&{zAM<8qi#TI(nUh+K$RlV>e{Wt)1dI`S78>$L#EEFiY~ z;Ze+D;Uz?oo_buB!Z|8DVu9NUi?~5h|K1OG(&N%1Lyvk|j{Dv>O{j3e@v)%Nlzv{O zUfX3Mc}px%zhCRU*P2Sdr$whZvs}*}XHYx%a})dq)%EN`^N=(K>LL`h0hkb>2~2*S zwT^T=!ekQuy%30D!ie0R>JVORX6=ekhi0?F8Gy@tR>2( `ZPqwllgl;9&WzxFtk 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 z z^>+dH6QWX~WgGLh=kpuj3*TGhzS~AXRqzk#6Deo}F<~B`gw1VEvZg zR#mB7vFrlP2stgBzbX^Eyj)A^hwR|LGk#rk&C+w-Lw=q|3Xo|3iJbn~Y+*6R%5L!| zGQ#`;0WhiYDB|9zZ}(@ex95P-eL2{|33S#j?c-Yr0GlN>InIvqyiE_HiJM9)c> zg%lJ_ok{t?<$cWDQa7Y5!itY^m%5LG>iUmREJ9L?;upD#8b$vd$(co+j3km#DdBTX zzqPS=qXZ*s3RvX*$H`$Mn-y&;8BUlZ(pni3%TyI$s~az+6MsEn65#S>V(TDF%kph3 zjiz^6&SR?&D@uAWeX0cK2Ypxav659!-IemZHRQ$$IjR7M$sZ|fQ~7riY&O5(4Ggf= zDAJED$=O8;RLqn3o?x1gM4e6t${Z&KrOzMZZ|~PVdewl?Nt z9x}^%?)~|S%kpmK^GpUm?m}NOQvPZj1WFP?PXreDV8kJ(dqz7K0HDj66nliiOvnkp zG!Z13vgxn_0@GiTTt^0=TaSjB>8w!{2C|EuA`evyM46U1=^ryYNHb)gQvlj09`e8Oo z%R3)hr@PGDedm!`Z?%|7_afU;l*z*YP-=ys8C>~~l;Ip%0AA1^4>i!}X5${Cnr8{zK#cAKn1my(2R zihYa?O0Bd}!3jX%g*A3upwXK!<(Qm1VA`WGiWHsb%3d|Y=P#?81(tN%!hC8bfE8lG z2JAJq_S5^Uty=LZM5BhuM5z+`Eq;om8yFTVgAD(8w$TYEV%H~n3Fborns^qb8pwIG z1Cnw7dEeOfyCw!u&+de}IR2ialD8uD;t@)Z)`Oyzc&5W#xg~WUBx!*+ng|bf3-%Xp z?WjS<_+~;^Y)&iNoLlBDw-;6rnvpx8mcSs%@P`6k4l#tE-T~F?M(AKVEz{QahnYPV} z#A~iZjdJ;SM7#HKDxM-KgQ1fRb~V=?$8 zwMe2<{8R5QaeHIVE^o7QstpXe&2C)7d5GA~@gHGE>l#A21i$c**(s~Tr_3nxW3qN1 zN%#DCVs^Xs3(1U>B2(zJ`vNW*cv{(#mcc>unaEhs1fj@gK1fg;o_BiU!+%&t7OwU= zleD2SC$R|v5TDS;AJO!Xdy_?0*rE8-jT&4-IZV0iGqw%bg$PS#D5<|vRdL%@(?9+Z z#W+;LnlxC#FjJ%PclHsz^xL-&gxwNvmecvTBLxU5;RJ-Y**Tehz=;)fRbCO_dcVvG zXT-XvZ&xzY54y?lZV9Is+>3#3RW@n8`U+;zVS*KviT94B%CKzEGl=A%uyV>2&p!qf z^PKHK_z9gT%!jD>ie$<3`eB+-QAUCHkT*u62so!6hDp{E&p8G61|Krx=|0m$fHv@6 zAwP&7M~`-^H>m()ma!&7C4S?u+&}oL2POJylV-mR)zgQGz5<$>eUVl@T4>={=Xp=$ zy`uNM@NdjY#To|V_D;Xe zDh$KlkbqhDQt>i*>wyNp z!m!@*b|-Dyl-I5GKl2^>M5=@#oZxlp4w(l}CG#59cG@3#gvF!hJPE}C|MxK%%1R%O zy|$I`WMV^0;f~6Yh++Z-{O9@VI4|S%(cud9^NC*JUSnMAIcxNKFf+n~fp;x}k{1Lf z8N{PDFb7GXEpaaI+a%HBJH+3bJ5yXrEB1HovOuMbG}uK={j|{ZLzMClBIesvybERdK_Hz3{ zl4aXqS5r8R)hfl39z`rj^4e%Xq$p z5h3rd7cQT^B}k%&@6b5tTyu&ML{haiPJL(d1nXhnlzwxaOiwVRzH2JVm(dqS98w=Rc?kr{z@8L?#Jg7RNAHP+trhj&TA?2Ju()=2g+n6z z+wP2vhT`c}O2^JLD@!9Gl($HQ0+pUwv%v;=Xa^@_M1reVZ$qROy50vQhI8;Db`*K8 zCqoK?KxgyDsk6-2g&fig=lKYtS_*JD3^PXu)_iPjPSA%BX zjx6-|VnY9Ulf}(}^g`&;s<{_ry5JD;=J#}4y;t9X0wiQTV6LX{SA#{+o{qHqM&Hq| zF6rPCwNcs4&*qmEtcGL5N3}P&<;U$zsQdm`33K5Waq(#F@MHl}@>6)i z?O7ym8V~5M=c4ja2%2X7?VrF~dEsPcYaZWvg3=wgEBe<{PiV}kQYfvk52>*B0vTGmWHg@hHOGY$x)%lSrB5o zU|F`%E7hP+J|T-2q5C{RJW!;dOb8V;81FLdmsseTbjZ4N7#>PAvC+nd8xVM)@0)&K zyhWAH)<0a=wMzBrFGA`VFbk8k4HhE>5A*;+QbofC!7s%iK_!u~KSB3*Z4<;KoD;W$Pk>El6gfq-{UzXtic*n@_O=7;cR^g}D6dN#TmuBrM+=KalaEGw*+r2r zM61|Et5gCZ^eEEls0`nz#4%KyQFQ27l(!lX3`P0yqPRpO+)z=uGBI&>fQV>ps#;8$ zT}%Tn${Q7%pB?Kh6VqxJ6W1A+K_92G7?-OCWEr92eZhr`sAk^iNGP7uE-1ndMV=gA zb{Uhs8|MrKgb}EL-RR)O1msu(xlX)`Z#*f0N73kq9&yRl=ciItm{+k=3w6gGo5m;K z)8CC)(@Ub5!A4w3nLCPc`M81Y5RhRI@8vY1G{(^bo@^%yacw7yFNad+u+Vn7v4`pj z4f|<4u$u8?Kc+RIp|f%P$}NR_B00@L;%2Ati9?73EO|m;)Rv@A5Xt`|3D8%3LnWNE zEt-B#XaxmC5kb_P#t*L27^>2ZX5IK62p7JxvLJMQDW0SniqN#9BpxBXHcD&uOyf&Q za}0Ya&%mz5c{d3Scx6ICh*!6eDVngX$(eL+E<=%D#`)Aq>L?CFSxNTdjGn=a=X^3Z zmlT%cR`{ZiGO4rTs>D5wl_S4AX1}r>f0X)t&?#`q;r4)GB~SLB2iXTF{Lpfd6H)Wn z@$3q0mynXLwRGcSvvWUzOjSKTm9c4`{#%;bY!JuwnZ)sauOm0CVAf4<<11tKu1f!UKMllWG zUZP|aw4_A9pK-6nDku~Q{$WfRi7xsLE21I-D3Zaphn095%`_br@gBL4`48-pS=zY=CkyuMUiT(@T~0DMR36E`5Kfq2m%nG!Pt86z1N=T#&tO;2_ndEnXfh47R^{4%*H=zqc0y@ zomo}Qy;Y4q@t^k2Yngb`e9|mQRe-mYlA7#nR7|r<2*XWy5CbL2ZeoNRge*NQU(aEc z1K{;XE{b_l=8Iqnbkl3RHXnBTd+;{-6F`LthU0WxlPeGc?Z>eYO}FTH3a%_RFm|Rb zve_94DmVPmerD3<;f9NDA@a)+y#^Rq2OSpFBj zq_tleXhgPnja{=_S4*jD;vVk91DQ86c4IG~m6pV~{!Q8%s0)TL9?hCX0JE7UC(L3h z6M!`kQ{bjWE(k~l1_p=Yd%z)NNXDkn?rH)1J8bP2b~F=toykaYq)BHinw849yYWY4 zm1a-3J8bwsv?>p9LqK{QA)wE&mt!<*0lg#L9X(7bWsnSj}TR_#kd6Kp?K)?K-6+$*q+xmeIl=wlsnd zVq?Wp4y3{X1F>>zOeG69%#DHxS0Q^VAG{{lmx`b@1^{bET2nUQM*!@B4*n`be#5{( zk{pD(mQ|5rP#)8lDLR0q38VqgtmLJGscb!Yq66}5Z}TaJ=>vefy>F*X&41NAIAa2o z;LQ#85$fglzu9x}$Z`smB&MAB^U0>^@nRk?Cf%*!cr}S&`qcGkAJ)qg*zU+0;KuuQ z6vmJbr2>l;G`^-crEHktZ$ zlFu+RxxNQWW2-eyia#0qvI3d|d25y0a&A}p^F#8MMWeOG{z-c=@3eHvt0yNW@WxJ= zfGLvqC9xyN-2Q1j&Dm9?kbG!JjEK*q`_0()Qq{Xu6q^A1}qf78fe${Zz$#wqhBNF_nmirT)Jj*q$eKUn1QD{RlrfIxc@VXWU zPyI7uQ-Xui{AnH{#ljpQifr>_NWdRnr*{L@G?}+04Kzjz_Td6m4E{HN8dM1(`9_`5 zd#HS^D8>oqUGNW{^Xmkdx1E3a{T&X^F}!K;VVfJtt@Z4~$GJ*L+6yU|9{cMCCoE>+ ziTt7`l8|DWAio@nd_Nhdsmwu)$5}(dp7W-n<;{C|mvX{q`S+h5JXe`b|Ge1yxi(!~ z-+(ldzoYa<^yiv zGt8B3kqA7p{yZ@9UBE4Hee)kt#_hDc8{9y)%1jF|%_npufW4F{4^Lhwz( z2OC|mO^BT+^Fs>24g--hkm+! zDb-*MM0#2rj}0hw$T~JMyxlf}RoS+1p}r%$9sX+vG3l#69G}s!>pz_OK=~#SE{v;anWl0_ z+y9QdPt8*}ee^x7xP}D#{agR?p&hXoa?3dQe#_eT&7&iJ_wBD(?9s1a<(T>hn_;>P zuRhAhemOllreOE@fIS9>z^W1-CBsr_`oFibFf0JyDjL7GG^P+Cd*>aRTp51Q{x}Iw z{sC?NkwS5tj|Ldlf83wg7IFER4G^)i5`~EUj62CBcl{ySz=EEBCdLY@j;HV!>PG{;8a3L!|cUqbHsk4X5hsr@yXGPxwwB0!1n!r`q>DpFBA=UH5*(ic4nC zlpsasZ%&=Fip`SFO8=Q)x^X3YDPgIlbO8v>T z)6}Vk$Yoj51@2PU)#5aK{pxAR)$63ILW_&XZ_YDBPHh{`Tc=K|*3WK?&yyO!y%xXI z?_WeJoO?`NcpP6E-2eUl__}ocJZ0(v*R5mhid);bDHCaEu($|bzu0KFE_40!Y5lYv z&p}JSS!khR5^WUFO{tg?yzNPnivEc97)Zd5mfB%yIqvC{zMMR_gP~ow0iHT7W z32^~wX{jl3u{pW|*B%Nm>f5~8vi>Z7@Ven6#fXY+|SH&H2UU z)%EW`H`u=bc$<^5V!ALqkc$8CV>G!+R506l%x?78p;&qehtqFgN5Yd>pC<$A%~qqS zct5$+v$z!cZ(se4BF_b&thq;4a;0LZM0!@yWj#D(v{ye z&kk3MY@#{HYJ9i#iag0Xv~GW@w|>j53) zkBYO#8v1i+p-)r7}r@(i+il@Nkd~c@+NyxtzJ@s(3G>O7^h&wz?xNE00`4RtK!8zOXE>6X% zuFAwd+2=*4D`-S8C&yij0l?0xL>P^MFD3~OLNQuE$l~h;c;GKyYZ5Yhslsa;Cvrn; z`lqXFqSCl)4x0n9ASH0W=mvm4MbwP}RSl})5$1Ux2%)8u?Y9&4&ryg+i$eSF{tIORgdjFitq`Y{mF#9M*>AG2j z7WVtANYm9Av2tGrzbgDKP~dYa0zqMz@$}7p49rvNIG>5=5fAat{L*zg$1Vl(W00ec zZt<#&vYTiy$h9mqin$`p?#CtKqv zJ&IuhfI8WOnh9texOG`!h6hk@unuF1eL>VECyEx-NF+ZPAl#0=KSa3!qf^VF21McM z<4&Q_z%bki8XgQ=5`vG924K)P!#O7r^c*N9MQh%1?6YVOxZZ+D<$`?K7Zr0#fSfiJ zDOcAf05U?YohV|e$yyJg_-*8j^<1fXOiaJP!*nudvPweC) zpQ%8LJ8>73fHh4g=C7SW=!LoxQBt5X*WV66ZI;CSNiv9lW4w#VtQka;%m@=W5$8jv z+R*X>gu*d+#Q7CKZJ;t;>4t{-Q*>JHAFE)UJ1lsIquH1A+=|KeNpJYlU4NTq{Y^BymZ6Rjkr zB=y314h;2yh}q0@Xug7+v2tl~bLwv}lG@xm>G#!FD<-Xdye~d*vQ41EBQDQmq1%9Y zs17RURzv27#1Zt*>Rc2Ko_{AY?B1rS_p^3HEOi^)CZTQcEfBDz3s~qRrEPS7=43`% zvoOZkUZ3_{(1h~9sH-{y+Z>@#yCPb%*p8j6k9%Kh$ACM7mujyo8?H4s)imvysLp$1 zmtWznkJfp%DQ8ffukayeCP$nu>px%`V}iv|R})c7f^L(WrbJH%DOlLHWyWH6I2B8hI&66TT}zUt&Y zE7*jfGV@h_QVK+Bn0pZEAqQ`$Pu>s|##<})VL0(F?-P7zsE){Uh)#F}=T);DVn3=D zrlBVwx!3%*pmtEMM2y%`<|X}CWHgrzNs{MeCvzbpD$!MN(+KtAwtV}Dz#1OR_tPa+ z3+h1vgFA)R?pI3e8RokP^bVVcE=(zgqvBC;DDu*qjCJ3ua+i_lN%#vTPa~OC8Z(;q zit!(v<88_di6g7gEP{T-uRUuF=I-9#DJ?yR+x^-cTMcG|( z61o8ZyGq1&$5db>`Oz$a5n%bP^}qZvmKMIR=5n=OMa5|#%W?nnz=u`(A?}#k=4|V} za{}s42l9qy-vN!AB9L4RUe8JtUukiIg~Ke}#HN)13&Xg!IXJi7u3Th=o3yjyyR$>U z_Db2_ggG*mrWa)`mHuVIEMNP`-f(N#f3i7~2Hi5M9Rq)+oSuEtSWjv79ZaLpQvKk< zOyKs0eFIi+p!fU?FIMxy;=!!}yu+LbFn%pqBOn{H%>YUnJ+_35A-(ieA5w}6rd*)e z=ftP$!IGq1hSQz&X%wO0cr z#}Ihjokh-1p3`BOMxu~9P6{IWddwdzol=DXBJ^AZJ(>N!i;S}oNtnM*=$ue}tJG=e zC+7xX#}hb6KQ#iR_8Uby_4h>Q{*TT`PPsu}t`c6+2ahYnwa!4ge;WbD9cIE4q`4=# zl#l6O1VC@6)4sz@oQy|_2qg;(9IGHFb;HFkLN2o)KLB|F2dF80{%nNRm6J!m)&6@D zcB70Zu^1xXsf}6)`2u2lKCcYWx$S}cl)&7^rLu-@+NvC3qYFX2gozd&f zAP;zCAU({?F(eKR_M8S^AqaEkSs~mBs{R_V0>prjL@d? zH)=C~-o(Rft`apHP$>8z8x9i27uvF@w+od(gGrTxW>I0KGXIUS`wVI-ej7f2NCHV{ zi6Fg&UZf+vg$@FWpmZ=uZxVV{L+=`zbPT=sB25gv_YR^+QAAWMprXdj|K7cK@7d?s znSGg;nViX-^E=n|{XkT9LFVIJq>V>9vhjb${q|&0{kJ8{WwET$_{*LG2T5QuW!gscZgDR%EE$!J#y%0go| z5v@!fDmIZ)(IP*dOGACkAUArzVGHR4#3&1Q#EK$R?KE2m z2LuCFb;;)5cyQ7r;y=a?8X6mpxG@P)HltDn5`9|0lx&%c-C5zpoWK?^8D59#N<(dS zseD>Ma)n8_J%j+OxF9y2p`7A_O}>mH%2+&=3eiMzH%HPaFPxYS zeH&%-i^lCVuVjo29VEQKVziYDCgH%+x7W8!w`nmm84^xkVX@zQ4mt%T)Jt^H#}TYq3a$ zw)T-LlC5OVGgpDVf^{gt9eARHFN}mkBZ*YMv6!#ncX*S_2Cz?G5Tjy=r8)3QAVrF+ zo${Os;ucQjiLYFOC90d52O^=nFyMPw<#i7P`Fu$OPeNeBa)2#)2d|=yqsI_z`pSlk z`feFiwA^P4wjo+^5M3^;n-~vL&UD5F!z+?hYA*#OE1qTtnnBg1!Fq7TKW2HO@Js+* z`GNqjdO|D15$o2KtHJ=+FeE}38jOYpV5+Ow>MF;g7zqF=KAn8Fot$6y3rX8`K|`+j zYbTq`tkZzKOvIF`K`8_P_xNE7H2R{f`?#K%5}d8Veb43*-7ma4b%N8|01~~3&6D8`tHKuI-F52|QN{qp zJ@Pa?p&9a_+4M&cv99u`w4nz1wwgo$Lls(%YP0^E(P{HK1>CSj55=JCbuEkC=E~Bo zN9^2U)=8=5@vmx=_YUOJt=rMtWCs9&AZP$u_nT?}H}=Xul+Z*nq=U|}>P3icWC55v zRuN)YEEI&L3d^dT2(P-XY9X_oIaiCYJg&MR0?ze$)*p&yf`Yx^fFl8Rr?$u!t)aSG zwlsOi&{#39g;JiqgG8tix++Ajrr959OIJMlVAze14Es=k$TH;KE#)R3?0>yL(BZ&s zHJoBvCIh>mt_j48x*ig~N53ymg^==F8mxF)^=B8P)Y6l21)0#Nw3D2acvsSpwf0G1 z-%w<^j%q(?%$uydC?U+C!FfqXFt-I&?6~Ul$&CIL@-F&Ns07;R=Z|?L zb@jz&hN5U_Ak74VxW_dX5ICA~MKPDcaDuC7q5RtVhZN1%_?>Qx2bzz?-$I5Y7PGK#F^Fn)!w4j_)#o25{ zit;TQqn$vU-;&lAxFaBLZXgX0#XutMVfX(4{N=+o0qs*?8eX8l=GW?;T^s&qMwKYm z@n(XHdY3Ze1hK=2EMw<(YpFUXPUNc%zJ|3(g%|o0vhZn~X)m9S+wi~MGEHwUe@Roa zz>!hnL2>)L^hL#3JqW~P z2({W6C<8Y0;*5qZt4gGI%^#n&yp?H-0vyoL6cjW-+RM{(A;+952AQL41luuu(ujRx zbCI*C*o({GxM*4TQK7rjQ=k`~KY#=Bu0fyUC&fj(rBLf*2Wu54S%>_D!~H~lPw3Km zMMYF*5V7Lcx`H$sDtrhE_*-jE4Ja;T()WUr(levCwjb6YNEZ1e<;j`e@U5jIP^$X6 z&C4HF=5B8xj0X#E~Qi+5{!>DMnB>fZB(|ps2ZRA4U>XD~6 z01ijLm8CyqO-0oA=DE`!Y2W}8M+jLh)5Daui4LB(?4!*vY47s}2z$!N{rKzqv&9E5 z;koq6sFaN`P4~>AP_^0@w8ZlttGB+#sogK%EW|Rc?mm z9;BEX;Ij`;LJ_)IAo3CllOEukwv!upgY$M&N#OWc?yh?v`fUR87|*#W1eG2C0_DNiFX>n@Hp%$ldckJ7(~ef^b_?MfF&`Sgn*4SrWEePH2p z#0q!@`d!VBoPTi@AojD}fApmg^(a#CR(tr-f%4eC%GbLN;US=fQJpPyhb{GGrcNCy zvxqG{^1+qikYr>m)y%hw*QQAbnA~kkY0v=Ck(dQpyB_WMnR`RhoJ+B4*)LP(<2NsxF+FTG%o;7yRA+xGN1$d3^KKqppg)HqguSzL7{(efN$J z>bK1TWyr!6)A_GUu+rFp`IraW7Aa5tP%vLpzZ#RgLYuuN1a7 zyA6OCo;z9a&ofgP)X!;&UG?JTv1%{4oQj^aH;|x`BcnPQCGv7_QOA+V3{F5EOD9+L zgy{_<*g{ML4bV2fEPsA_WFp&DJtpG1J&<0=n5vo;xh!fk3_<)HU)=Mxk^$Go0>ba)G*K#_0hxHkKpwC3=V^(&Y`1 zp@ykUpf|spGX{}FI=OfS9$|+87_t-$aRgRjAh(S-!(i>ag*65wvi7#6!{HYuexV(i zL6ipO7mh~zbax`pwe40pTi^j<81U_UPgU|?q7FUG>43wyxM!Fqykb${l7)tHb#c03 z&KOvHb+Q^6>0?>L?RkL9rcp%e4}k%XI%2-XgF3-nJid~O)M$PEG^PcZ5gFw3ev5P~ zbt!;f&h(ajFUo$?jq>P8+^ev1Bb6BAdp*S>K#It7io_JLPrZCJ;*+z+sS1`aBmJZy zK5`EH+b<*aVuxQA#$5-2P_w|Elg!SG6WWFn00M&{rKw-W`bl5j-^Qt~(?(Isq$8ze zR8xJTn$hfJ>}HBh_3P*9gGYvevkJm1Bis^BF1n1W-x>_*0%l6%d-TCJll;ARwb$6G zX&II{RNpy`1MXefi5Z%QS_T=@Q~nl}$^8pwM&=*WlK82!RSec>iHjlY!2zo=wGnT5 z6X!f>kt_2pl9|K>iOT!8H--ASLe~t2b}}=t;_)QlCBs3E!C{<(#1DS=PrT2JF!LE> z(T{wdXRr9q-|Vb%9&|E*gn#_=kze~|$1OXFRydC0sl?Zzg~+r*!(9*IGJ}m8yB+g& z{ef2@CkEqB_P;INn4h?J3>yC=HhPIAwSRoknCA5(+LwMpR4&9fhEz%T2Qg`!$mpXy zRy6UKCGN>~IOyiX!X`O19Z7KeOfZD47k}si>WM zfTXdjYcpwoQeQ3NS=m(xTJ%169u6s|an-wJGT}?*JpW*DMNj}fBMi;e5SDV~-s99e zMJ&A2ITTD4Xv*tRF64UBq>0K%<}QQ485Rw>iqwiK5P zT^`WV>ua+vvOa3dIE$&2diZ`^4HOvB1bOw%O?JjbEHM9o4=s~FIc8(~Me*5)E6aYo zspA}|;N?k`;=}ioekm3yYMjDX%RR0i8(Ca_!5fcl>7MxH$(Z)Op<4a3kz`ON1cYIz z5=tR}O{Fm~@s$zUUPw2uINehcnC%F<8D@5!ob{mYG}UDr#Gz_3Bi^_irMrbcKk2-Z z`|8`C+OzkI*>ypcnMWeR5UhNiJPqK8DiXQ{)$4QBmXG*aAT))sAg!(_pl3aKsyz}E zuw}HRN_B=|y-AHeWi@U7qQbHRA0y)fbRr)ALp0nY7Fe;{Y3(lcX=94n&Gb%wHEIb^W2Hih z>s}Wp=k`f_xmSwuPApT886+4(0&)srU)M@~Jx?c1_fR{!;tH4g8k@M%jqNWPv-AYO z8lu0UMgHlB_Qp7CM^EcRm01HBFK9oaU5uuKH)WLy4$F*GKiKeG37@Q=xv4D24z0UX z%9HsM#+86yhe9ameI~Rn(c^F`5G|;PRC zuArhxNI*uIn!;A@@^p(mJ^iPj4nbx{5SOd4pn>JP4>BpA+@NIOQk-1=hCD-cM{S`r z8Lcj(HoJ76A4);5&G2L_;;_O<7z)~4jo8#)LCGM2R=292te`=Exq@oyeDSzUhJsZs|xm=m`x&Pf$7Ijdb6CxDl!Pi7{ zS7jucuHu#x+X;#pWT-F~BCVTYFX}bfQ9&2Qq037zljK&)G`KD}#MuQTj-Foqd7n}D z10W4nqZ>jd8tRVwy63BDV?4Uvr5Iu4?;l@Ly*jOT=2r5S;ftT<-w;qFhBS=$qil!< z77e5!--!>JI`rK4pDO%_{Q%p@rGySy1n=LsStQ@^iHDCH1W`QnZ(&U}iyD7N#nr{A zDGU2z@o+}?G9n4~$(_UPEIb1*sjc9m`^4DJ1zV^XBXJbd(+ZlS0e24SH$+3bk?4{tJsn~|68L(|OI{)6Y>pgrRjO__1}gY2n^LaDn}h7}CD znYJYqm$A`a;j*e6Oz_+8iU$6un%k^*c-d1h%-oi=#@#S6D-aCFw~#VmvA1u_{)|aOndSu> zf0D(fb%YoFNUp6($w$Q`<8NY5`E#Yg?R%hDl$UpamgcEgQ_6Lg446>$++`5NyN&DdWP>bxHi z%_oL$5mLi~g9oij%BTbu(*5r~y6OsD2)OfdLa-ztT}AH^(NOqJlE@=M0DjLRODC6BcQVCN`M{H*?J?pkY~qSFFn4E=4kHH9BGj|@IIs<>juYInP9ys{gI^`w z(9ngYh!Ucoq%}D(XISasf*CcgKg!bl1)D#Bk!S?rpf!d_9Txp?rLQc<~5!WlS5 z?j9cPVCH1)xyhh$s*n@w@VYGf4x@rSg_r7ZMiWf2$U?x^lg$GPRSCr0q)^DoQgF&w zyDM@#mS_tXg@j2%JDt_$+F>msfV-J|A0M@^+>=dLVYm14^8Spk_dqf2&IM*!5-@XK z`IJglDQKuUTC`|r)0yw4E}Pl)bOQMXK|7f|J9|?XF?xApL07&)H}kY8;}o=*3HuM8 za|&*b16Xup^abFvY;ZcWVgVUa$$D~0D!y2C=|(d4jtUSiX9yyAlt>6@D|S4c`UU&G z47>?1tn>%VTxB@=`Y2@qpq3`gDdt7 zNd|K~@KA5*ER?Nev!Fp7_Nijqog1xGGPbwxhn4p8rm#0K%1-l}k_Fmk?DMJhKjWUunP z7H}qzt(ja(F<$9NDW$n(=qXm^no=E3eaStgJmk3gN_y4F_rb5PlF8w z`mLiuBEV>Nb=k<(5E5Ra5Dh%3gRw2p31|WTfpRdw?<@-DGP<0I+B`f38^O=KqPqDQ zX|TWtiGy@{RZWh7RL-mWrp%+a!gCBvg=?}LBT~9sfLVVjUOepFLL;?>ZuFGS=oBV` zLd_PyH_^ZkB!`HzEYL!qf&#G&i;2(vZK+&TL7>Gd2%-5QB+Cb0Oc$m?Up@RB~YY@i6IKZG}Y3V&LDFg$f zC5rA6KLUuQr0s)Y`e1BGS!-ll3Xa#}3fwrdP2_i-av<8k3@Nn@IX`Yw0o`x?mY!lpeE>U!M}nB@L1A7CTigQhv&Oj z2A1>TKf(tTdaF)S;peHfr-ksdNRFS=@ZisOQ4#Jo|MxL z#5V0aTf}D!?>FheSL7rNH9|-gag0NJZs}YlB6wcHW-~ydwCpU5LrZVywvnKmx-Q5P zr_t$vTzh}Zv7FBW#0z~%{}d|Y4Gkec3^45yU!dF5&%4>ZRB&MB(-9RwNEtn6#8SR*J(U||svFrAumT6 z3CFji=`SaX(!hnBV}bTlPopL>PsY(mq7=+U`-$No?{r>njZ-IV*sLE>1Y33DwMK$w z@$@t&L+7#1=QVZa|Mbtp@6QA3^VP!(^b(7Z#!BS#c{F16%atL2Ydtx;IBk-i3Aj1;T2d9EME72z8+$_-gS2)*mwP2<3_^l zdMwvw=*JB#*LqCjdeF{Bw(rK1oz2*f>-p*%f$Cd@_t)dO*0VmYm3&+alh~~JyGHQc zs*u=hR^Mt--)i*Tj-}f+*#ni)ZFJLZf3MkYrQ7T&-YBKpE|plHZrrM$-7e?alEe`37DL=XfG8-+8BM!ZImt ztCW`4(MI3nP~_IcpVl6chV>mZ-WU)d*U@N+vJvl&xA{%)>pTqOwh9GS)s@n*GQ1qC z3-2D|_X>9VTsjW-An%(s_zERIv`f}#F;7bk>^KS>ci}nm3;LHBjk0u)&LJO0>E}Bh zolJgmCKlMN9h5`ts;9^*&h?M0O(u#q#&&`&3y#xpAF_(`>5b$k^O3!lleY<5rQp5~ z&!j(*4UNzAp9N%=hf+Q{x^@h*eI~myze_&b$eY^tmL~Ons+ssq>30gf@qu{!cCI8` z_Ei=P@#T`#7gg0|WgC|}XO%xSzHrQc;gTxy>pi8I-`UaV;r=fbCoA#e=A)QA_Y{Ho zPoh%aikMl+p1*KJbixaoBHQ(nwlomM9;$WBBqBik`GNskD=)K@1~!><1SzG zK%H4oeSJsje*b{T{_nfp{F#HFBm#A2-c0GbyVgHgC`I3+I{(3O{@nNTIe&)lU8ysb zh4*D)dRWreu0Q9I^FQv-!~A*9J@DXfkG@GZfA8M?k=*>#rx_eAbr$=2Pg0|UW!{h# zQIY!iS3cr<`W>o(8$U8`EPu}aAXam3-2AKh@rB6ipSH-Kv3?(TAODbk>QYNqaS&h9 zKmQDBE*IA{ANZwS>37j3^=Fvpb2raVC9|^=^Uvqk8*Fd8wLJ-;kvk6m0=R7mKmxUh%{9~s_}mX$G3 z+CyQV6|ZNSZC$;ofX$rZ-Q<-x&z3#EFEPxU$ zaTyq)jBfGjYOC8BNH||tcD5C=^ya@8%zNi97n`^doAeDf1#?vmEisjwiW;8W_SWQD zv#hZN$NyKY+4hDH#yHH`+|a?x+|K>~tTlVNx&;ITIygC&a`BgPsZ>f!lWWcOdJ5!P zb4r+7y*;K}$>je>t=YdS<^QQQb4DbwSG97LHHbF+FSX{3jN06!_MDXeyVjhL*I3j# zkXhYPU0L;?TJwv6uGYrV;?nm)P*FGu^k|WmX$dsk$f#Dv9Km{u&`4mGqa@T z=H(X@78RE~CH#+TIR?U#RnE+j$ib1>!QR}E+|*J8$!)7;W+p!Go0y!Mo|&DS7LMV* zwQ`H9(%dqc`}VE&ByRKh|Bf{0(cXGe{w9%a=QY4>@oD>o)=|?A0~E}@P!hNX3W1Vqi#T%>lm8}p7*>{2@CBWDO%Np-ccnAl zuJ)$w1U7?NH#gT>Ooo=eN$kylAObk$RA0c1~E} z5qq4Z@l)@s&f)s?8l9uatubRwLDf7)*_ z_2A7W=^Z=+EyTx@b@tw!I{W3$vum`fw}`y*7D%7~Rg*yp4{q;p<^&egVXT@@yJLM+J3y)=Q!R-`OWXbN1OsKV~~G;}X{q zURxHy$9wejA(fcu(>(S%PejQcn^$e+J(Z)nn7haCD;kzmys9D{**}y%PY=xCobNVgsj~w6H)wwAM~~sa-*|gha`-F$wqiH|Ex*iH|*#t@AFa^_u$92Ezu# za9ziX;HkL%Z!V|OgQ5ltH-T(-x=J}sQa;`qM-Y7j=vk(1vwvO?hHP~>;-8tKE ztL9SJ^4cEk+Vp!Sq4?5s{BOw1z^BE}w!-=vf2@amRu6scRE?XUu@9xNu$0$=+9duK z>;B#)ebegAWeXRA7Sp2dt@xGO?KIPxudZt^QeM05-#L(YRXl0MrSrq1!@7qW(oBsK z8;>44eaS-%B>{p-NS7a`N;`J1C4PRLQT+U8cRu!h)V2?g=JT}#KL#BLJ?iU?MN+_C zQ_jgB0VJ2+n3j6_r}&&t=8)5Io@n~72FO_Y@AG~SNnc*y`S(Y-hUedI;){QaQn=G^ zPybMN6DhV3(KOkw|8hstoN+H1;!!Y_q9867%3Y-L1b-95|`c3f%g_7`^ z)D_JFOw>C%QB%rPj`>Ljt3oRbOM@SRJ}t+6IBDhl>U5KF)X7Z4F-9efm)2{@d+J{b zt0u|!agvJR9tp$x;_@0c7PUe_|4vw!M`bA~e&+Rg$i}$7wrsS#Nd=OTlx)cD)$%|z z`wb|1!r~v=PVhM6tD3ZO$vh zQh?HMLL(*CgzkV|VIi&R>dse?Mn419b=^rBmbb>0$i`e|EvxHQdd7E>T)~qKNfJ-l zdOTOJI51I|`Lp6VY&G(@p+BN7t=4Rq|oW6Za1-D z>wAq99F-F_Q_0>z7<=wWjz^o9bMGP(6^S6=IIXHyv{Tpkxj!lSsUu~jC}qv9@`z+m zHdX1k^44wbi;Nz0P?d*iJzq=sqA@C7cSMa|_L5dw08&TLYqs9;hwY*dcUcur_89myn18O75ng;#{G3eEtJ>>K5;&qUfKBOyxEgC*t+M&Xw!BAU86@%bhr0Ka7T@4 zqgNJ%wW+T2B}n(Em%H)ymQYzIAkyd?I=%f$`%6cDSiN7O@yi8E3rdB<6G_LG#4hF^ zJqr%wrp5IzF5Mr!8wghf!}E<5{9#BMZZZwkey%^rQBeQ=g1#iM6J>o7@2pZ(OEU8UlOFIPa_c zWN7}_ieK*A;i(>?3_=g$bBopyceMFT9(@h|U4NI#%4W(sAw7$Q;!r%&W`y|MUv%U5 zq3nx1#Su#Ok+{3rm=G@quQieI+Xu|I#Xw_X*u#oizsPUe~K*R%)0#pElNJ7K*X4 zJyhsyaPoE0yWBfdd;P4zG{gH=;n0|s24#7u>4_Ohmwn~AWN@oqhL3Aj%zP=HNFPHB zz>m;F4;#QwB3&7sTuf*Tn;jsQx#w&m%3D7G0%YV`x!` zU#wH8PqM7Bz!>U>APjR)E=ld+YRw6s&x{QvdD|lrI~>M<0;{$RQaJ6#A{bhrN=1Yn z6cU2tpQDDk@X|KAK?DTH-G*y_; zvcJ?O{hT(q_laZU?<}k9Bju9U=`4uukOP+HpmI&-6qBY zRtU=qg@@Tnh$svhgG3R&xxD}LP6uTROT&FHLJWe@2pn?<;bXo$n#N4(Vl$C+R>q`$ zWbxvng2nM$A};drAt@kJQS~%XSnXM|RKUKX-Raaj$gGqKbWDnmA^;bA=`B7Hj+CNw z>W<~=N5M=O1t0^TAs^1XK=J?hAfM(N;7d2`=Ek2ge*4^2_L=jL9alu_jHUvKgw3sc zPy7gwvGQRXjN-Mz^@QL86>$`-_n)mg@N|XcBdP4<{B$r-eIiuT40-?s=r9l{f%@)x za4|aABiB-V0xk-RlqCHO?s5g0uftiC;f0E1ZAMm3ea3OR=WN^ag(1%eu z34NpCCgbo1;lQ5J*f?faTElqyJnvf@QI}agB3a|^=XpI835d?~Z4QcFgOc;HP)!s} z4+9lJ0SfOZO|zkhg+Q&qMAsU4ts54V;Bi zDm=_1))3bjmXw?qo?2rsi-QCLP#v6a04^L@(6vWWV1TRCEzk%8_)CKCTSaQAnmg+v z7BVnu(sq*N=0v)pQs67*sHPN8YF!0L@Dgilhi<~q?+?bdP$E=YC@Mo zVV*>J{;;&-Jm5=}{5`avN1$H}9#Cs>u9o(Pyv2Jmf!Gog7?mvqcT)%$|2(tw+}&7V zp~vmkRNqCskUtZj=eeUcqu!oBT6mXSc$S=m@?8<~y?C4X0iY0<2Fb<);tQaDJwO}{ zlKlxsi)L@gd$fAo75$aS_x{mISY}XHHcBy5U@~(u*Ul*+v8=^^9uq4Dvk*i+>bwo8 zSX00LX>TtITM4;~_Q>ft%BFzfv|u@bLOCDFWl_=GI4fJRj3?#N9y9+l9kWkF8T}yO(;`4nYJG&>}4b5Eg*0UZc5K}CWOHA|*zgv`F zP#d0Kw^<JJw-7{@5S1jQoLUU1|(r^$GMw8XOl5fmC*oXJk%@d>A4ejRqcBGt+8Tpk*9a3(slJ7D|BRN*(>vazuVQOFJFHsP| z#BNKEteR*^DWs~Iz?Lf1!cn~#K9y>TP%6+yjXOG*<_X|io0%eZZzvq5-Aj!NhZ&^U z8u!u^dwG52YkQvfa`Y^B|i>Z2Rt|&V@2YV zw)5k?vaksNYd3rZ49Rv6oM3HCB?1gv&T(EIZBP)8H+7#~9?SM-^d-pmUlD7M7sU2-<;HE2-09uXb zCpc0%29AMfs4{$;LcZp>8>ea;%iQ`arzzt@^TlX?TV#9^@_8Pn(+A6S=ZG?wwK(9k zQt%7ehyeavaS7P48}%-U!S>^-2Y!tXT-)wqx!v~&mYj$JN9|IP4Py{K8HyS#?)HzF za)Iww(=QHcKk3cK4D4*xr1y4Fk?ivq*1I=@!2!Pl8b0(}|I!^)N;Aay-p8fMv_Qi# z5M3MufeF+PeRlZH_s#ZQBYS$$B-ckqcc}Y^&ODlaGmR=v6aO4Nj#+?4EhLW&D`)_K z@%g=s#d_50 z_o5i4m&gqLl}_ulV_c!_j$P)|szZ9~osV-L zROT97=e#6fVx}a9#tFBBUu)0Lx&uw~M{k2g)Nn@kJEFwb@^*V7Kf+m_(`W6tY>RF5 zyN<>edmDs3GE%ZDP@fbqt>59;B%naAlo=o&on2We@_g-Rfa$`WUKDgWN^m$fXa-@a`$TA!1u@Nr-|*!EW9jJLv$wq^55I=vGIg_rks zncl`!dhTsQyYA<6bJL*_v(wE%KxLylk~k%okjFH8=Kv1mu+4Qcy&|$L7pfOuTxqMu zge&=Og;VXmc6%M>BZ{vFlfj$biD{4fG01@fORp+!RW(}`V{M}L46JMIrphA z-_LXPynHL&<9b}zBH=+l^PNbH`RnM5xwjnnOSA>>SKM#E&pS=&<1&MX!z* z)~AuBYQ?tVJItIZkp{190v_1}Ilh~Xcy~==Zb%e(%|iZviAhDP1rg-!f#d6ORH4Ma ztZC1pA4iPLAA~aY;G~^^#`i(KZ|Ltm;985;$3S_NVv^Bnehc6)Zy{?}PByQ=1UFuh zvO?Zo$WMLSnevZ%AC>dI_qtbD;$vn!@Pn3v^J8f0{eGmwiy!qcZB!6|P0oTPRFt#^ zV-K^LiNee)F4^zH$o~Bt92s;pO}ixTy*rB2hfzFJ9~VaCCgpv+Wc^9*^DT}!|WBf5zJ?!c$jCh7D7vwU0k99uP&PZg!cRU2vV|BTR2l|1Lh67o@x3|1w=`mM0yb z$CdyHD_!o}$@pDTDc1?qxc$zR@)AIpnrakJxbAh-{tmSKIqJ51uuz;|ppII~9_#H)~{SVSV59_J`jz z{dW3hcC@x~Pa4!LnNR-E(%HjeBMghZUba}?efjY(9sO2DPUkLMtAuT!B&nowj(Z+9 zocNJ-kXqt}AIHak2x&|U2ZZKT3m$jp8OL0a%uz9wS~cR&#soSQ z`4kq1f-eCj?VmW(9dMTzH0n>5d)JgO>9Ha(ihrk5tXs|$P`bDd26r%vspy6i&G=jPvD!uN9(@_dmSD%#z zEij!~#+jz>pBYkBDFk31^jAZKxuj%k?Vbz&{KOL9ef)crJ1_NA&)d7$Pady@iFRM< zbcj)+5P8kJsa&z^@Y+GZQ6@@$0_MV&X~B~aSGjEH#BIyB$0xX!aQR`%#P`=8>oU5# zvM_x^el%^wPmHYGTGDdd8cxv|q{b=D$1h}ZI+3Ag&X>Y(Dw%AD)!%z&=PxsRFq1xT zI6?c^kyP#)TeEm3cvC~{&_TjdI~+zKj>iHt;-nrU?L;39Z5)Mo8UPggcVXs=p9m0y zpVIb+190(4D<}ROWu0PKicbnvA+CCVuK5@-{ueqU#%;*FCG^Q^CMZD%2gUMB{2T>W#_IE4^v8OHZQ3 zI<7iFIMl^5%^L_%Oqcno6;RUxYIJD)J?Ly|~x!=Lr!T~=4|5U|;UFyXnJz4hFjnLnS<+^JW z2c2qyMokD_3fVL!*=}V*qtG$pzCB=7)+|`pNTswNn+ZQ4m)qF^mZ{w|vEg1W*vft@ z;ks$;60=;WdQ>T1{fp>xVP4ek@>a37XZl`5dT#sGq1C4RxzKxACG#V$8sQ73!AlHJ zrqrsrrh2a5w_MJD_5Gc8x#+^3f%e=l-z!g$z4IPZ^n|m98m;#|rjM2a%J*HW6@C%T znlCNq(MZ&&h9^U8=h`b4PCQIqBbL3Iu2xVsx_-FaI-xBvn=w6jO+cBg<>CwZ6{p_u zG*P%@{qPNiERhRXz(IM6=IAXN>ljPcS5^O91}=$sL#`7QD0GPwGD*NTZOa-fK_2Ag zT2H^kP5~x$Fg5!WU)kPBLG(7sgF^}YAY(2^Je!$aXWAC zjiI%iu7Quf-p&}?8S2oMW_d~bn>6-glDVyuuJ=G!X&eTo&bwumCB4sjZ9iVOYAXnC z^mq|zJzo;i(dFuAe*^2V-4uL@#Y^`TV*VmKsHXP%{k7ABMRBgPA1w7TG}h!3Ky~Rk z|9}=R5Hm}nDq(jp)cW*yMB*D-Md2ENwN7&@Gj=-3TJ9@RfbObjf(4zm-9Oj56ssAU zB~ua=wC#5RFT2_r+lDN8nZ=HKtnLkpCSQ)z?UHWAnPCX_{iyW7tp}Pzg0fe`S!Azg z%`)`B;3vQ|%g9&!3tG22?8dN!c3Z_kt4oPt_*AY}Yi9n8n~n4hSp%B(;?MnWROA94 z@F;xC-@ml$J=$Y(&k_0%>Y#WkNIRc)FX#dK2`vBRI_4|-Dlq7zX1u>A|0pv36DQrV zS+$E(+NqAsFZ;_6JZ!@iY=Wf?t?t}p*&71F9yRzqzhuZigm|z^QRiyuY4uR@%FvUs zqBFO&;&3(wYSz1b8W{jr5}skPq>H!79`5kUk-X7MhC?I@ z29F;--i;rx!Hl4vsc>zF&ttJHeE3&Sbo>5&WCfj~pI$sGy*NV8O$0@8>ydpSAWnZy=iSHdVEuk-t4p_e%+Q$u9>PFkz#ufy*WmUx*2!jJGH? zVS@*YxXoGaFP!Y9IUJ;~gA>#AgH;yhQWmBFDeR9LZD5FfVZp?)S=+h7hLTrblXboQ zcq#9pyv}P0td|nJXqt(H9S%5h?Nt!xv0!k zlS$-u2xCm)x|FU6rqSU`h_G9=}fk#(I3oINIhk76E;0dT29pm7(8Z5_9H;kO8=yJvDrICy9 z+WV*^{Mm=p{Fm-I#aN(pEnz(rWD?Lfh76v^>2<&jgxrf;=@I#u!Ui7safWjtAk>vy z_*nW-t0Q&?hQ67B?Yrxo!%EgeX*Slc+6w-jCjUFdg(JIhy@jLz1 zMd*sij|JN^WprUcw!KWh45rX(DLW6sY1xRffDWE=q2^%u0+4f`asC`nEoX0V^YkGA zlWqPzrHXFV4L{GuPX)+Um2@QAl!m1R`gY3U$Hxtt)Y0Bgk%e2jo?{xJlTgk}Q!ZaVB3|}c{rQM4sw_*& z(y2HX9N(LL*+WL`Q^+G|Q!q_0UbD_{8kJ-Z@trIEtz%G5=Df-Jqno&J>M){2k^c&}#JwG`0fTE0H$gC~oCuXGHwBK~yxk#U?Dlhb`Xqsf$54 z`lvmsp}H}#w=vumTXe5|{#cWwXA@78Qi)ZEj54t-wQ0(n9c)GM;7cFmW$|F>SHS|?thobK+Q?*G+!DZI1Y6T;m}ygsS*5XC0!dA>=Jr}`d)lf9$t zx_H40Mn;}$O)BoosDBmt^rM1{gu%8V8q##os`H1H)*>i-Mk7oYrXk;*Priz%0W4NE zq8XJ6>`4ou=S)!-DmS}#?tzLgbz@LTtYNbLBy!{G)j&$lm1P8o>APauSB~dA$&xT; z#94au>F}L%I1@N~9gHJsq|n%oMqDkywCP(Ic)!;;(Q?h>I2(8d&c@EetJll-n}Inj zp3pUzbR+y&@abB5(4z&AlMef9&c;z2WPly2panJR;c&ZzIHo7Ym6$zN zi5t(iH&k2~-PaWxYaxvv>jqW3(Z`G9KFo|AyME%tpOi=^BYlPu(c8%6$K9aFiD!o< zg7qf?x+jRQV170ee#P*Z$Zk@%aZKby*!o1QzG>>KiR4!kA>ES`Y*WhP69PFCLEck- zH>ZkNk{J9@! zGu5l|;KH8=XD>{5N8Z1jHvK~7-h&Gd^Zwi)eK1{l^WJlgdoONIm#RF<)PGcL(-Z0a zaKq-&MVrTiY5R|^-hB8(Y&?gOD$}o3rhYzv zaih^Z*fxQvS)r0yk%yN^ZL{JVvyz-o4n3R|F?fRYc_J$QM5*V=;fGJ$pFTOd@dT&( z^h*2_b%UppK2IOUJ=J^o)ZlNN;D(0A##0m9XHu%q%u1dTdY)PP%vwav_F1|s;JrGn z=7JMkbAsk_T3{ZkZmz0xUQu&2FIUHOSFfJVAUU@vjroFvxnRV6@ZEXGC08HS=Z@*n zPTlA6oX>-AJ&*QrjY*#)_sn_t40-!3WR}cjs4h?p<_k9Fy*L+QZ0GZ%Tu*JxSC`D6 zN`KDFocAwT^xLnWixQvDDR~}}>s_t-JX`#EiRwar`h3{NVx#JU0x%zQYoYSt!a3EK zHLCMf8w(j5F9#pKj9GH+@0mZJ{+whxuSRMT#w2)})Rlc+^D*j?7ec{^QSHrem zw@Vg0N|qLuUc6U*(Y5i?KmDce#?tBS#gF1IU6&Tqqn6e1$-r8yt* zh1VNP(|=z#N4^+Lk#|S+(JG}NE}BF0HIKUQUC%$9+OI*uSEEKp zmQC!I2V!rVl`ijFUS75y;l@8&KFPJ>aAbwgV8tbR#f@vlqIBgh4es-0#gFTQ|B(-Y zb{~SGKZKNi2pCz3c=Vx}wH(F87ItJc&Tciqca>DSnz9e_Z1&3Ixwf)EBpHy5MvIep zO#{&K4kQ#tyBfO&9uzSHLMW1`9EsQCj6&k&k9Che#$|xzkD{u({1HsxCt6sL0ZGkR z0fiJi=!jDg6>>C~VaMf3Uc1PEdeIOi5@-$@Vz3wLfn#&Sa}7j;qZ#Yhk9;nf`EL}&EMiRRBa21rMD?~_&@Spvea^geoOs*Fict2d8 zhOJbxcOgK#ZoJ=6kAXPTA%H#LxVa$#0208S(n*9600`RemF%Ac9PJOT(3eu~J!jT8 zA>1#eli%wbAa6##IBjkea|5p*{cnUj0Jk4>+>RF{LYWZhYWco~W}h!0s%<;p`}Q$XQ6jaa_d75$^0FDsr9a zIO8k`INlKw0XRfmT!n<-0K$3S`H-j+;36a_F^>>*bQKj{etkb1?&u^qE757uo#r6-Nk<@wr=3h~rjL1T`qIfQ3Y z?4XfX4T*s!;{|z-NG*7m-8HJ_Svkd4sKbYUSO>pG1BgshP~e#Dsq+9a#0fa;oA_Ht z(-eKtm&a#sIve3;npy744@<@&yPU80tpR~1nb}atl#NnQGP2wah+b~{Euto=HB{h?@5cyB|Yw~ z=g%t!4foUk{`fK0H+fdvaCh(f#&e0p*F7N@Grz2~HKe?DnXEsvyfpdd42+kslmk_! zHfB9H2$g_dWvElFPcOxTkdx?g1fPZjnUBvii}6mt2In&GsIOC%TLdhhVhVah_PTMqt6I7~_KGN~*ykBmv(ubPtEdNO!)Ag-9?hE=5 zCP$(^4@xq!8zLg)cYrhlNAbZZNk4ZPD!<6GBSPEd6irNEhY$-9KveGBkLrQY?(4h) zpLkX64{pfh9(Re?H515_MKPPppe%OWxEdBAm@%RJxtnHS{<&x9L+9tqgD(oZuJpfP z>%KhpEquMVS1=;7m#O*kbKijU;f?-ht}hEzbTL=m%v>eP-`UArs$muyhxN`2%8bWX zRB1L%Rh*Q4cIuL?881!H+e819Oodm1#yP1o;>L2Nwi-GFzXICOYVaw|_02K=sb3SA zD+jHT6291205}~#idJFI_jYW+U%-r_vOVoNI&)M~N0AJk9Ih@nLze&n1VVCS#+57( z@M}JswAdD_x8ILkU3}2V#iPE_KW%4$8AGd?0ts*%3vrWqyOZJr&wMS?2cCLs^_c80 zI-XTcSk%o~(s<#XDgN_$_+#6|CDQ8OftR-5Z|yt}x&LrrItzAW_ibK;YQnoypL;Z3 zc*#g;EQbs2_rLdXQcaw<{~eV8*WN5Mre=#_@AyhbrpZWq4jfF@!SQi8)HDk-=Zeo} z#FQF@JKTX>eH#7LLk7#twlOXv-gE@TNPi&A@8gy0Vq!7UOh-0o)^`v52|}fu4Ut(m zlTS*Q!sL*Dc}bu7vH5$GI}bNW2mMh(JT)K3v8PE!YEv8REY)A?y4H>Fp$*bxon!U@ z7|IkjKRgjZ9%Y7l@czVS68N9&LzTTBa$fk6g0h7nc z*InCWRD6^Qpjf6S;}U-p)kr=ded>V-lt6)hLT5lwuJ7(K?%%eC^mM)Bg0ctq8JFAg^ z=<03>mTgn%$-)Dt)m`Vu?kS}{{l}^f$n2P4!nE(NZ|9gCt>&O&5g!LRf$)b-72MP_ zS#K3Y){sBJN3+7%?f`N_xe$;D$e*6@eaF}O8?>}Dmftsq>S-HUjqjNR9Ffj_tUrqs zasW8S;{=sdKnRYeocQZ|1HjqNwbVgHPzm(9*y*i)Ja5hi#sy4CgUR9^RNC%GlkmfK zb1hwb(UEs_F;x)d$;{>v#$JLJw_AzlJ+ZvQY*sx8+lE*&$~y?Q}eM?^&_LK!<%vr!ytlDbjYk)BRyM(ACLZ21+SP*mpY9yxI$|KY*DAoM8o0N}!YATyBG-VroQtKt3I32nGp3Ts|ec(;F9lJFA8C*~U?nhj<-NHryk*!umLHn@E2iV)XT);83A7+a0txI6$- z@^;4+&6SLv-(%_N8-b@;l%lVx;GSXPcnThR=(1dv)HsCePn-!ijjUkmtZrxGPJz3Q z!u0m=T;*``Uto>3y-%DxaB2aG@i^9OdN#^b@tAZTDMxqB=yG8RANLH4GRAD2PP8{l z3t{)yz5NUoHbe;@Nhp|Gk1E{#Pd6b`_Q{rW*G|@ z?hj5E)NS9~`1xKb_X)Bqb~5zO|oK09m7_*S4>S*9Ux%Hm-lgH8_;H z`vlr)G?6Hm1Ixpq3~x&DoKNg-m1GA_vNwTe-;Oa#BJ;5vcl!C<$xsX|PaiYNZb{@$+^185_zve7sFbreYgF9kYy|YyzrINXlY6<#!@`b=f3 zli5uD-rqmH^qzM?6~jx)xgWBR(MyJMClcFAM2$KBR^xe6SuZsS#K}!LX2262lBOwE zz=*tm?cOMUW8%ul_HCgXESPni$)EIJ3y%%QC{|RE08opFf9Ay>_qwl)Leh7i{$=^Z z8#xQ#25Kl0g0v6`sq0%&7h$Kq;9h3^o@V!zhVLOW^JjqHRjBSDPn;GA4Mov0VXWK` z5)Ft$Ayp<(H_VTrnM9gH_=}%z1+E}#Crh>_U20d3hXa$t6P5@_U}V^tG3_cJSaAV(@On?g#rch9|w17Hkb zRKP`MBHeX2_ugF25-M-M-!V8juY~RrK*);(-A7h(^YOVJ1G!eYd5OaN4&li;QA7Dy zLV#p~&4Jh_M^ARTWRph*Ky0|gEF{U_b^s4Zu?Rl?RD=|OAp%GmmBNHPAETBfvu7(7 zKojyWC8Mn|2y0qlDF$Ib123V&%V_x|cXnPn6(CXoBJ77I$VL+Zs{nIszSMEJNgFu0 zLXC5A!-c}almcBjB4k zdo0T*UmY#<=fHJ98*FWFll0zO}4O7tMg)TUs1B~ ztCS93!{*RCOQ3Te$RtN_Wosd^`)F5e_WSo`|x?RVR|G9f&Av8r%w7W402N z{4@G07Uh_aGO#D{W8u|reOm9Lss|#>h_UgTzEC18cOZ<&%uFGPFlPM!Re_w0z%+Z5 z5SST&=<*eoP;Xyhlzzo z0pyr(i{%eB{nS3eMuI$&a2}f<;=c^DolR*{3ipW3HYrwu9aaX8kWj1^HbbI(k!eD$ z0w}Bu>V;oa{UyAx4TIt@(Pk0vrjz;zl=L5h1dmetGCn&c=;U#TS9zTWNl-IZUmA}a z`M9s=nSuzOg=$La$>C(3A<#*ROiXRtL0D{uaKZf!+>6AA#6U9-)ycoBl*98A8bQ-h zLqMS38%?8?p%yz1nDCBN8p>)0Noz#e6Fn4XT8uT^BV62T)Y#92dHMnoFf4>XPR^!# zMlxZ)Q1I*bx)L{G`D&p&d~hBnY*75Vf&hURZ*Dg6e8*} zq0>N%*3emPP0y44AY8sf@ZW^{li(4|rd%L`rx_KtiDWN}SM^le`3`GEuwMY+CiIwu z0Th)#Gi?uTz&a;L5zb|}4$Cvr7$>w+7}3UAzT_Bhd$$Azsi8G02Zws?a(t*Y0(P!U zY%DX1gxNWM-JF4nBn_SXc_l&1Yfg|&xT0BJX{h%%W8WqGMgsHP&!6rCXW-_vn=)$f z6msdg^B{eKGE-Q-Tiuy^Bcvqa`t(3vHpw2vkmgitoj5O}`|_v`yNm}JdfZXQx?ILp z`smSbGDc8Y(PYrwR3C->@TFt3L*Gp-57|7RB(m;f|t%UpOkw4f_h6* zeI^}MHd+m8@w&UX{IE#)hy?x?TuQ>mk_lj|3ra7qiGm#pKF#N3;h)HoE{Kpn5S@74 zPR)6>WM;?a<4l7FPkqyg<(@dtAp}SD3Tvwz+=kshk+GX?eylEZm)_GP%^6Ph z_c77+K&*R6Oe^9+LD!8P7`%0xlKuhHKiHE^O1!xl&!BtaXKvj59NRd9YK%Z>Mu7UL zV{^YxkWlc0^Y2B?gt68e+`T}4oi8=WwQ)7(wYP(0$S`#?F$akF^Bvh(A$;B1=W=4q zhe&Y8>l*%V9g-Y8Uo5Ve1b<-?0OFXjx?pRGLL7eb6eqsp~MllUn zZm<0#pu=N0N@)v@<-gAdovwIV_`qPMPfrSGXoGJ*=qy-!|8)KM)7dfj%JB<(1X&sJ z(SgW(f063yyM-xqS|$zU%K~4f)SrCeoRbg#rp11=3I%0&bq8t8-c#?qi|7#Q_M1fN z&UF3pgd8KmHwAhQ(xH2ZboWFMN@F`gKVyJbGr~N7ljb3B5#L6SjkDEAO$WP^QnGwv z;9W2z@x(;uJU~8EaO=zunJY%P=K>g**(NOJFVL9;3cW}2FaqB^K&9G44kb~BUcx@9 zYeYTdZNLKlG}L~ltwNg*{BAPtVJft&{`tY195-iAA`@0?yEt<$1&)Q3wV^`3&&O`S zOvBUEaEpo`Xp7%WL-?5*4$mUl%pBv*nJH#&{d)DFncojSe|2+Ddvn62+X!z9C4<|? z)y(!v?kzrjlMrw5!=P?D9@KNN_@rv%l%D_mqe8tEjrJD#W)ZXpd^2&t=uPj`(2_-t zTftCvf$NztOju^Q`>uJy?VuCauErk2G%B$&#R>FZD3QIN!qsnK797nZce5f%HjVEU zZcN0AEsPG|%Tk&FHa@)T7I>~}_<{|GdRhc?ywH1EG>ZykjdZcS4Jt~HjHNRg>U4ol zQMO-6`@j^3$kER;7`GFaBe6Sy9cs+w%KBw9!N81il+sA%vI0CVW6JMEx{^1T8_ND_ z*+4qWcHY@`jn8go99WVaaOzrfx(_Ko;>44Y-v%N?UW484_5W(%;Z%Btnx|LA9j=2y z*_niEnkfNx6w@J4Z#M#pqaYeTAFKfB;g%-u9!%zQEVUbTaqEbk&xJ#j>|u>Mt(2-E zkZW z)4zcJU-fgxZ|8jVTbR`xbe6dbRmFbEn)`zM_vJ)CEcpz4ZY1f&RKAqiYm8rZ{{F>) z80{@#ZqH>yP^M<<>Eu^)@TO11NXX-2H6B^DS?kw2O~9XLSYi%;!x& zi*d0cvsL#f_`PFtTZy-S$-PO^#UP!pgHH1pwzYSP3_w!Z5=|%29Gdo_tY+WA2JP?@ zJkQI&nE4&u^!<{8a{km*T}7rDp}^}v(nt%G(fIou@r{5lmF|}zZMm$`6oUhPP5a40 zkR0-X?HQLMfLNbM*g}HmUe#~e2brkOzsInDxEslQ7K=ar$&>9vLMD;K1 zU22?`JBUg78NBA0ueBEBu1;`U4crYt#S6=XK9}1BH;<(Xf0l_)N^u{bv`AtD!Yz_4 zlx4IQ5P<7sNK)N5HgQ!0Tc4BY+mWR&o8ximn15$EMFP|w=N+K@J zzzVA%2}mW{tK)f5rBY>4go{mK-z_M*q|`JHX@9DiHi3o(ux;3Kjago4|Fs$C<`&)^ z{y%72;*%ze_qIMx+ocwUMi=a!$`vy-Zw)U2JtD8D_gAk z^@!GM4o}te2EQ!bJo9^>Q-6qb@1-H{w_YNoRKfpxPRi-=xx>W7S7JE+Nls}bp*RiR zL_Ditdiu*V|MzVCLNew%Ly+8nmT8Od*Hf(TGW#|Xu)HUV`*Y=KhD?Pw+$IaX$TJE3 zS@nteYj+#ex#E9{2fgnZpG-AZQM65@j>k0~@y5(vOyr`uO964XP|*6&{FX0SWp*TBy|ties}*#4I=C)+1RZkWYW<>Qp!s+;hxi@v;7#Dk_>6tI^7Y=w{%7DO zC`s0q)S6T}2QsVAX?sP&kD=nlBWa+>6irXRDh9{N2SVA?o&V9S6z+ zf}B5$GyZ&-7i?0-SO_VpZ5<3W`NyNy{@SrFDI>qmG?~B>#DRS4i)m0P}g%5 zX@|wbQ9@8c{?z3}_j^jx#$vTn(w>faR{Hq<&d#Qm1-%W%xbgdsJdG1Z(~VXR$*?enj=ICK9_&HI>CFrj+gqZSM3oUD~ATNkC(eYW7e zaigm^Kes5)I4Or)I#y~_It0eLBk@h_S20|7w`~ml zQ|dN#E3v;37S`lKH{q#hDYIBd%G%$AON#g&BTWD1JxOcqb%1PD7*$M&fAC5_`gf;q zIp^nWZrX<%Cq?auw?CsXhx+@Llx8Mj+lVy*W8yRD=hHb71e~E76|!fCfu!th7)CA_ zS+11>)!TF^(v-!s{FA!bZ;E+L9sTix4ii_jPdTQ2@@MongWuZ<-1=DFwM$vUVXO~S zo5&`<22fYHm}~z~ZS%wn;n6&>BLJglkGHIS+l5SA_uY?*( zq=s9*TrE@eq39jg1|%`ScV%F`q<+aWTuI)Uo+nHm1snWQDM0Mwsm)#Ngp9K>4Pa zzyFMmI>F78MPd7KA&(G(ZyvP|FaF*%PXZuZGu%5L$Ld!YQfCjb$f)I~7!F*!R%4lI z)<}G-dQXRKTW@cjZy;B^` zfzVu+L;%XdeT=8HX)gTqTo)1X$o(u!p(l8ohrK4;{mriu*{Ouf@jYEWUkjh#{FHDd zZKKQYAKSt$%~=FjR+m3_(SpvF5n`Sc5g>Vn%Ct(nTG`X>S4CXBtr^=x+vpBCaifN0 z{2rbm&4gRoyYd~Zw@cNSdvI<#o5W+`QbVQM2V3Y@52_bGxC2m*gX0|9XP{@lN;N9# zcL|JMU3Wg}a$LhMJwq!nro0guIMIyGxpb*qTSXDW(okQ$W!oC*5HQ~RrS|hO3+CE(V3YTZIDP7 zl!QXJ4$2Ms?V&uCSbq_~ulsMo4g`ZO?P3|h_j zVT7^lHj1O^8bJVGyYTd;%NG2B*G7cJ`w=h2Bs4%IADodq_ENlDKWLxr^H1lHyn9yG zZ>4a@&w71N24G^sPxE9I-*Tmpp`*?CP5m_pTPnjOG4SEI*YA}>(_wrLi-lY9<2wSP z2i3cNTU*7HBg;}}%_nciZk0Q|U!J!gK9TUAZOipNJbx&AKg$v;?sxm$Ep;z^eIJ9h z7o9r8MCt-!*lf&{$0LCFH3OZte&Vy+fO_1op*|*5kVc;Rg!R;KJyYNRquod`Low4+UL_C_cYKmLBD2&HkuV`$X+4D+dw6$rEzlYmVOfc=GY?(};}k8H4)o5N}eR z2#rviR&TuJJbmVw(AM{|2K{xXE5GMpw|{hH7H%3zrY)Yy*cTkaI_}!fbJdgq(l~izb3qV21&eT@M6HD z7|51V%$6B4mnCEmp2}8g&pterEl1u1HZl*7B(ICsi9^@Ftvik@(`))Yl^mtruL zZ77^mjLC?&CeEE4N!kI|%}!+m`+k>?KZqh&)nowpC_6=9uPxrgKH=A3^!}u${_}Xt zJkZIVTzf4ikCX|v=Ge<-#V)w+Lg50(Yq<}7Czw6VJM^Hk)VY`)TYw}dsM?M#sGJo3nNct9d53P7Z6k{$)Q zAIW#u*WohMQNt^7?uVch3=h;EQsrot=z0tBG9LIER7Rcg>$(evF*DMyA*etYK=)i* zVFQ9gdo-%L<~)H!U#=P7gK{gRdHKWEyoZUtT~)4Li;(o4JWr8xCCDu0>2vW21bG<= zoy=m!C;190OSnfAbkr1eh^k@5?^Su8vgG_6`(*V6%an1M6oeRM>8xF>1`3+jd~xk}BrzJOwy7SP=4$~SYhcNfoH zFSsz>ap5f9;iJ7*#2tt#6RK+OIuv%{xl;c9j{29=H8-d0-=M`{j9Q7GV7zH1tKj0t zu;AAn`xiI%xK_i!cONf)w``D^xVT-=u-DP>`~1a+(+&U7bciy2Ah7`!PDd5e(cw;r zPCDl&IyYOR(EA1+t44wFMj1OKdyV3s8W(;vN+~zVC^sFlYEmd{QtG_OLr)G5 zXi{ctR#R>+?0^;Li>l$8bvm2%YHPTFWb#iy`(Cq&)g?1F4;~u< zWvgk~yO&(TTiouM@?z4h3R`?WwfOzQId~>Jv$Y0=w}#vk^}L>@$AEbkw#Klv#d>lP zJ|$&aw4OddnmgO53?TeoTJ-g{Eamo4<<@J1uq55~g3fl=LoJULlF8TG%al9xU$jxv z6jErq9p^hcl&sn)`R#RVosBOVdFjbnt7$dLogJN>+@IR6DL~W*JA0M8K+pDTKRfyg zyM{d*20o<>c6Qxn>wZ;mskY6?`cU^|VYkdgmp-d&`cwDg)Zl>59GGP7>2|44r-Bvfvf|;P*ha(#EBE8rlwHQoS5wPx_x3? zoC|W)K<~+`FqUGOU%|ykG)@E{wFieE`)~bF5^#q-0sf;O{x^LnA}cPYC9WXW8^O=Pp$?QdH6vayq)& z+LJC{`A;HiaA^4Yje}3V&7`)pjNYA?tQ))3r`p-wJMi%8)c-4aUbuH|>FqoEn;HOY ze3J8t0xRLu*U9125&Zn<{ob$NfBx?Oqw@2OHT@WUIP04}3m!$mah1GuFW8xi^kym2N0)sJ}U2law&48&YTSz|b1sGBOUC{6(AR zS@vUfTi8Ku*yiX#DS9P3k%lw1Z# z`qIas67s}V$zr`~i)NX{#+>)vMZE7GK_wSHQOU#mVIM0hT#u=EjDCZM((fKRv))od zoNmI3@*Zr18iI~+^|n-pCJF9w4RN5y)Y$Lpl?xFslFO&GMAPHV?{pQfo$gyN3sUzA zqw~+de0-~%>z7J@G4Z?<2VrUp$-4t!^W(ECr_A8Q{U2N7J}DasS$=h27Ta#uE`-%y ztme_In>tU!ADWuPVaGV~N5nq%J*@5hTK4zq1#Tvi?N4{(F@0r9Q+~Xd!=a=fvlboM z`uaxz-{57Wg_@#|#Q_UG>L9D|aozIy)pU%4?C~m;F;VI4h6YYwvM$CQwt6#BE9%7g z8K$*h&%N9g^JAl2ob2!L+*uWMZ;xQ8nCuWtJ41U4){Zs4xnOCx_o`;qaj-?Bjwk8E z`$(?2rR1}6TAojjB>Cv(e>VQ+dZpPK@b_Xj*IOHUFReRrN%BnUmpP7)iCnuBWR}nDyozZs!0j*PA2rm@$3L^^;@+;m{Oir&*Ztq4 z#YZ!DH@_bH_ZKY}Af@skGdu0yHv7S3vj+V~#9jp6e-|P|Fue7*HKEbo2dY3AWs}Ix z5>}@mPL>%VKOIfLz!5~TM*hrLeAGq7x5$pIa*y^?xin!sN(eOBcsN5Yuzv&WyA_pH z=J1HRi(I$gDOi}p37fCOdCu;N3of*3)ZcikRkOya^!jLU&!`b6|D4)Ry>UuDNoe_5 z+^{X9sPHZ(P?1TIRA+nV>(DQ)_DT`0^C-qL(SG8qNb1p*6-FPZTc?JJJk$g`K0uKSAUdw>dt_cR(gBqfZ7EbO}3 z(npyBN)ZkOW3JQH!=8d7ydqZKY{ton)eyJ;7N7WWxO`m8G0mlb`q>9?eUn~Gc3-Cp!{=#I zS!e-YRl&BfS0z&`Nkmu8=zRp-uV z+tSTizP)k8jfYOH^UKi8rT6*f8o7hn)-+BnaeC-&H*qCg%=rS$OX#PwKwj(t@tPl?fZ>{j%mRsdKkcW5x)TeNgQ1i-iW*DefwHR;+js7b7-3-eJqhtg)@tzD*S17_K&xcuBIdKd=AgzwT(G8hP& zhgswMV{^>*;X*~jk%?Mr>e2utWs)Mu>PRSBbCubU2|n#PZdhI>8K1*#J@!JU-<;Zn z5g1&g_Z-cwA9mRn(w_V372J3`^0m9SVtWz20tQU7F$KpU9Dl$_#9ckZIq7_^-SXCJxfq2niO2P4mc?Gw7@~^_z zvKy~xiYHh<0}Rcc*_zzxBkbN!va_mvAM?Sm;r)Jl-|3UgYR1(TB*=g7I}wqdfzQ0I zgSoJ1LpaB1G50R1`x4*rb9>o0W=Gxl$dhV|I3QIMd2`733gapFy1&-YqFiHK)cBgP zQ}7K{Ep{7ao_(hGnA#2dy8g%r*^H!irGgIA6@ ztoSY8+M;hd`15$AWW!&7HvMNi3-d~zIU&9Af_&?*%UBO9{*)|E;D4Cl|o>DYyWt+kr9>aKuxzZeZ4U?@$~1C!7e2t z80#jWf z5#=(4fY?hbkfg5aygF7y*l+@>M?oX}2_VPU$mxG5lT3BLYSPbKI!U4EE0Sqd?!0<<_Q>d@MYj zrW)}UVeP6s9wc9PE^vZi#;(M*?k=(Yvy^l^b7SGSqI(9{mJ;h&h~ z(5w%(Zs~wah5B`QG2TheKw&m+ROFg*99j{%VNw&_R$E+FBfMH`=YgBH7$1CSXJ zJdz&6b^b(aufd&C$k#rO{%B5Nro zpFY;FoXeP8zPMEo^nF@*TgQasYQ5*gMdnYm+w*w;8g$aI0B350zmzECg;DEhZJ=dI z|7QNtkeI;^JFh{0M>KuG;}Bo1k>@E<(`J?HQsm;@=x6&{?BZ0v(B~;-INPeX66bPd z{tXMr-NV0K<(~K$hdgxgm&v6$d~@+;O2!jfOIGo>(?O`W2EI~F2C4XQB^ANNrkd?Y z^VEa-&Oj7TlN6g|9~$GF66jEiDLr=9B(TuKwFMd9@(XiGeYJK|1ij{#|BrsDfK@(x z?C7u2OGRY=Fx@f-NVPSj4f&(_FR@W54EJXkME&A!qJrdmSjQd6--IL4zm5=Ia5b>i z8pgF7PH+yp$&y>!cV*i2#;T5m(v#TG6`#1D&)JEyHAz~5f%o_uu64a&`ezlia5r^+ zA8Y@EZ&Mqr=(D$f+QA(#21+o~SJa@}31I3pcK>;;g3Zs?6=vrmxtsK<=NN<<-bvT^ubictAb+J@$W?9ONh?d7t^r`?_89^x0ptOS}<5e;^HBp$^`7W7O{qSs?WcH$)Y@ z}3!KC&BKAJmjh8jay+^vS9xYKg%30lHOe#am1F zAuMQ!Hwg$M0-`1ynnE6}E*`z=HEKZ}ZJrpt)-l?)IT}xeREL*bu^DUJEYPQn*_n^s zWDN>a##+On-J)X_jM2`4@p%0B;Kca#_hao7<4ql758osD!$-RZ#+XCz$7fO|ZWTkT zi^KZE$7sc4Ce(?J_b)p-AWbPHw3Nva!^y_*l10O@jm?Q^j^! zl5A+6aL7gvO*Y?P6BYv1=&HV{P!TKViPlk!$0I)XOaTnA00XQ?g0Nv&2`~_A&C*Z> z1ftLA-v-neGbTo}cB!)#7iJw)KsMfBBkx%*2ACHBoKjz({5FHX&5HZY!sxT7OIRV? z8MnW)!6)Wy|AM`}=gd{+B2wpYf5B>mIX=={tkGO`Aaj-r1M>bb>-_TdsSC4ZE3eP} zowHJT9cuI@|J!`@?fH}wZ@91^0V3dJ1UTM)eNOC+kJ#(_m-As_^SP;WYPk854{yT6 zUfZ8o;HA!&555Ud0l8i9u=Rdx@nP=D?S(71->~AiJ-6T9y}-)lF2voQH@#3Q`qxJK zwt@DMX|dV&P59~7-?>sD2xE`Fo{JxZo`h5s^+{d3(cfVEQG_kKUE~bER@!@Z4s@9& zU0xR$pbg$?`pQ20p*}BVB=tb+otR>Kj&`b2&KINP)t5bk=*Aqcd*UVROAqgQCS_$~ zb#r2nB{#E5^gctFnei#g`Tgu_2A_--KadHZ25vkOVx}z?;^~jRJiNj9j7h_ho_Y@B z7JucHYZWa@_O@xiVORU;(M!Hu)^3h3`f^3ddWb|fnsk4_Se!et)EVD?vGK|y(o)Ki zvuw~sIdAqbb`+8dF`7q_WIa4SBS~??JRc$Y^GN^B_nEZXp8$%T1Ti3IAt?|e1|hA| zJ&_Z|fnVUJXRV?=SS?M4`Kz8xWZXx{JqWifp#g~o@iBmMN4bk1J1#h0$iadVwvcLM zNWR-j_$2CxF}LX&%F1~83s;>a%?}DD^eMbTx^_WMNdV)+FmC+OQY`318Pq2l?0FSpL8u*%+Ky+G zTVCDCrSo`WK|W`}qtBSTm)dtzX#$Zye$sY7@RHRz)hwkPktJsRd|juTu>D<8KVDzZ zJzn#$JOR@C(r~a_alw>p@{sY2;-Y6y< zj`4&%@I5Fc1MggTm3X1&KKgw4w;ySG=!hxcV2svrqoQN?hE2Z|nHbNgd@4>(H;()A ze$8*|>sCAoK_tY#kOll$H(^LDdbPR@eKEetrcN+KDmFgzbo}Zm6dUna0mdyz%k8*O zy-jR@+iz?vvqo;@2(>UFCP-=(Nl9L82x}uz<=l@}>Gsz**anG^`aFVu+cp-+c_-Cx zIB?)*R-xq7pckiY8cBt>LMIJGePUNZz?Veis7Ts;aK5md6WG9i`^HG|;~WkV{ggGz zL~Q~8ixELA;NL2IM4>tZsnIf0E@NMBSfJ5rcPU_`I7-hs_qnC0LFs<4#*N9#hW5gt zO(^FgW4ZIj56>-4avLK&SP0m;S&i%xG^Qu&#<+uI>J^|Z-a^5((kepu59Gr z8m7&(x`poQ{y=Efd7wx8{ax+sm-(IiFQ^)@NGiYU-&0OM?~SCUd1)55$=MX>M9u1! z4w!brN6N<0=eDmi)@R#2hr~7d9ZpY_kGFw79CO@U8s9z?+M&^|QB4DX#uoP+7#IVX zy;Korj(ff6=W8?1J?dsZTc$9FbJ#EVd|SO_wR=diO@;IF74X^2vjVPu@BJku2(zo) zs+v3MuhXOU`6L0<<}sU$bIX~yW4N}27kmb>FozQ4?lUXg&dq#ZRd*Hlb23htVe4Eb zvD-sT7wos_A^dDAw~XPf$?l~zcB4FTDx}8#gzxE-&l6TI7o4x3<8k8=dZ*GeRV&7< zyLtZd#rh2KJnZ6Ky{(umKRY=@^3TtvN)3`a`*mjt|ZYI+s4r*;Cheo}z6mXv(6p9r{tKYK)AZBVJKFrbYv7`xe|xy^bIA z>Jjdg&nJ4tuq=OsG7m~`Zn%9zZT7aId?bXD@ik2v^Qzf?MaKzL&YGO|%hW{39{6L1__x>kt_ zk;~Pu>?yPuT+jEuIXLMpj-hu-VkIDP}6?8UQzc|l-jQ^KT8gIS$pD4=ER=F zSNRQ}4*9nJ;nQ6W7cLg*-A>{)P><=T*4l}=ajNv&!{!7-kDxj#ojcxfF${4)G7NRWZTG+8q?zKfFIa^f=fTt0&#=}fb`Ztqg)w8u_bDj zRTPfvBE#5Zfs&O+z@fA?h+=<3p%PLSanf(hdUeaN}k4t(eQ3;WrFEp`46E zw;O+S+%Wn+%I13C`D#oD)TDX;RS0|s4cT=y{j4>bDbC*ng~5!te~cTcp5)=nIcLdZ zYM16SD&agPeGdK0;YJO_pl76=C zyW4;A`uW#gg)iGZcE@I#HGZ|H{=GGmv~f3yTq$}XRnaA$G~X*c*RIET`&7-J)3@L5 zw3CcFJnGKOHe3_9UE|FXu$LS*q_#0tfEmEfapHsg%q}I>RJ+DT5`5S)r^O)Dw=}YZ3 zVz(VL@;)7IxDBP^W($n#(W0w|8?)3r{l=q=?^M4$T+yznoAkRFQ~hip@c4s;N!hiY#;(IW3Xx)$;mi7gSB5TOENW zZ|bJPuHS1@xEx}4&^J@-xLYUvVND5=JX`lXx@9+I)3~93b}(X_eU2lXz1L%6^!fIk zH(qP!D*Gp%F}3b|3SaYSNPK&~`d3?t(W;XtoeA=|xP8ZiGfa0?_+1b@?(#R4)m!kf*ZzI~9eZwI0`Xh7TS-;v?-xA}0v? zuO7ZChW9 z2)$x^Wa7h9*+pIqT1+^5-k85;=-jHF#J)9$u_*JZT<(&&)Begu+_rUkT@9Er!boTVUr)rOWl$9MWDW&gEL_X4XT02~`PyaL9b)L7g z?C)k+`oa6}kA4qvGZ{tchp*L!_AmdN+P05A+>9JL_{9D1o4N1bovw7Fh9D%bABbH7 zX$fNbnu;<&5`F+x9gtuc!wKA++v#XJfS_2wY3aEbq70rmcQjq7Eki^w&7J~1LC>(o zCigu6nq(ZHWYDi0nG`5UkqC1mAYl~HA%abmlI~7{kw42RP+(fY{Ookr)DP@V(mzGW zQcFOZ*Jc~-fwo_;spMxrc$(pAlfx8ggZ{mTkg|c`w%Pe8@Gw7c=Wj=0EG*Cl2BlgH zkw8{WxrHQ<3nepZ&lX9B=_0f8fNVY+)SshZ8GN4pyf`}vmNeoFkn-~U0BMpw%j>}a zU}+pE4*+3^&h8ZAXI!2;85SRGe`>AZs&1Mc;XhkTtnjQYfn$!2Y^B1($cVicjsf$a z09{ycoApT?Op^!b?M=$V0fLyk;SpOIJiyX&@`3D{HsqgpZZwe<&t-*kVFyRSP``qN zT9`Z;rkW3PAm*6{195xBxzv&`teV4o*vx#k2pQ%<$jcnb|6r4G@Brq?n&P&?KIS7u zNUZmn#g7ED(X=dg4A?OkDUL7p#N_rs3pv+GZ{-T{XxMxnV8H-F=|~g}fg^DrB?5eC zrvPLz6blmr04N3)*qa;ao*NikA+HB>q2xj^u#>DnD^Tf5D!MCJ=>il(urMKfF2M$- zAXEjAK~{AY!8W-rEG;M#WEE0@3#l}%OM9GusR<8j49+)gL$WqVgUVqJSm2v3Sk(r^ z+5yY+%fe97G4xFKg#6szf}`jffC7^sR96R=IAFn6^XV`KNHrLV%ZCvPU`J^+7@+o& zU$z^*>^C0BFDN$F1-6i2b7Tpba;bNRbajE`Rx5zVWag6P+nE|VHhA`mW=AA0H#i?S zEmSFpsk-Y?VOmhcj%~Piv%%G`f$ClbzzK_aMhxa&5dB9rp&Rl-D& zkaMHuzUjmDhW_JHBfR}AH?#oqB^L#HLoT^e5M3om1L^PQ z_S-hNU@CImEBgC#Wl)W;6zm4_^Q>+0OkoZKg$I;MT{_Oge;F%iPTLil^ zgW5M+&)m=_A}{Zk{O&D#<6iCHmvywh?9YvK2Qt`!kRPL0qtlk zvFbcj(<|Mq-$dZtdaq{0XzD{>bJ6YeZO?G_>r@U!n&UL0X|RWAoiAGarldfVKbJi>y7DkpJBp1K z_070CkX>lYsicZ~iIl#*mb9;3kg(RwqE>=#w^uy~MrxK>0O`tw=pMfykrgz!5)@nA zN4R+5*RejW)eDwEu~p26eV=qfTZ{V17b7I%`$!l2Lf`bc-S6vah#9(0cx82gd@<&h z{lkfi1eLtdztr(M60cYi?OO;n{p|L(8;_vevp z?l4cFK=@1+bRRT>%=nN1DESqDZrzJRf^qG6`^W+qtprVeB#s5YN&uqzuHxs@S<--N zFaQUJQf)!1@^=9GtqMV^I~sHp3H-DNL9x|G01)&H3Qn!{1i+pmoqp_(zZ`}6uml1; z`w29Fr9xt8>XtGHClV@5$&uSKSBO+~FTVwf19Tc&T`{dLq$dOWy?SGf1`gc-`f@Jy z!I`8MrcNJas*XqBt4hD4;UpF?GpsOfOrXVH;>@~|yz>mBoqc?*L}TsJmhJPSZRrO$ z%B%zdRe4}gKVP#b3!pszAP7MGve#|0&UKWsrDVGkfJyxqVTL7?P~_`+BqTBGE3p(i z0$L0%EyO+#e_tS3Jo?G4Gn0()!DQZbkP&VKEK$(prQ9R-}L_f=*DCsdo>Od0J`z(GN>bpi`YX zTK=OSN?vdPp=rNbCZ$ULqaVtrP9r}9tPvd_8iaibSfN4JEg&YeXVh-M0^7`~2^_Do z{3Z#t@`DOcW|Ua^VaXKtYwg5TRbvfUIG zSp*Qh@K^4t4~ z)mbha6wCJH9T{QGm?ye;x^wC z)_CUQZ4?s6YT<)4hQu%s0+)SBJxD`vTTFY!4t+5#a$|_ z1j`@CfYe6`KB7VZ=6gxi#V0SUUR`4y@67bjsCsYIJ26uq(C0k->pTns@BF3;;Je9IK*CFUtOVYw<)|X3*(v=ih z!W~H;GTiIzs-cfEAB8iP_+HZmnnF`d;bOBiN8OS+UPpZCc^1hlZmN0B4o6#7Vm-V7 zhe0_0R!3dr!Xa!q{_ceo$J&L8>P`J*gVnwO$T z=0d!{ZX{EdpGgVolYV|z{ciMqd(7f{9u|ZV;_7Fv4@@rgHzT-+9OYbWs(y&GFJ(qK zS#iUq5Jq9DkA(Y60RQBj?$w1qIMkf<`pF&bOuWP{hBFTjeZU1MeMD(EZTtCc4^FNB zE;ljh`klb7#z?7fd=4HM>F5 z=>6`e2aC$(_qZJ&eCOsSNAl4mwCHb!&7ck3_S!1{Dz%_DOSE-9SeX-`)|Zh60L$RX zveD0C>4yboR@OX)g?v_40;K91t;_-rtFoH^X&S$Z_Hb{P%7TcvOVo(AyL?+d;j6%C;I2b56pO z9yUJ`)ASiR#mjCG&)5^pK7Y2etU#QLW^?EIOM7%J5laTM=bKWmm|i;qe%cLr4Tox; z!rjCpP1;Y5YFyjMH-}#Xdn+ogI`X(1zQ3#2*|BgZcuH}&SC@>=q`kxRObeU$($ZNG{h~-wJep7so=)Q z?Uq1#2C^QOBaT=8?B|7-|KaErk8_^nwUZy_%n;4ZbUs_KM0qaKy!RQ#5q1bX7dwLV zw-%G(a=NRYwpfo&p!0kQ6_6~Dt0ROiAS?_wgaG!q+UD!r%%IRvM1Em$$Ye#nVv-F>`~1mu zG4GVQ&+UVpuEQ8;aS%$yIb`@L;1RBF<|H0GHI{088_c2{j5LV?Cneh-BcwULn1V)& z=^Ow|)LsJXzY7I}Mu`L!nHS;1PX*2fzT=akD~@j>m9U60Y%ev*E^}|CU5!7!quE+y zVQI>dH*u}$g*bk*$(rxo{8t7>8PFMlTFMALm5=J}zIHSSjs@{X2|@vmRLbxZQE>T0 zE|)xH7?2<^&{ifAuUI>}HW=9#BKnx_=dvLKH_Zi2Ft|J(eR77NRUEoWt1X|=oX2hV zFa;rM{`;J*rO`jH?U#BYe<9pX5MnM<+=(>kVyRxGOdXFLdCxt1VTYz6BX~QT2mO22 zbXUyyFe}~~ND=)hdHDl*>D@(!sFj4HmxeH;BuESjHkTKJ^771z#!PxX9ER|!3UMKD zvhP&T%kHmIemtRsLB}aWgiA=3qa4?iRL=fT%w&1BER668zTNxbDA!{H!0w(4fRac- zvq$j{@D|Z0W;?y{cj+1!nSnM;+8_{c^)TL@Rc_b`zAj;)@aMVOKaWGHL+hORS#<($ zdcdt05*%Uk2l_il(Jvji75?OLUZKIXM29mn%`F5sNV&$FlAJ}Ewj@$xr7+(ao#T-GGd!|M`@M=1YnYl)!)jD>T`JlJn1#Rk)U; zX84p%C<`i0$AT`_O4`t#=B7i}v#s*aA|W`lffH;1vd`L|EdMMEU5dFOk}az745suE zRCIBEg3cQ)sDsWxM$b?9E24qnmrXh~xU*8zq~}6)bMHck>{p+nY5|;&{^R-BI$m3uN`_$m`$6Q-3Y(W3K$FGsyr?sH6pe_D=;O3xMRuY zVrvXINS=8OnM8Ra>>_1Z+hLSA~l4Z}#M@rJ#xG!uly#GFl)8nuW#TsDcpx_vC3mqstnqx%PL{m>Wk z$;=bCl?ImlN{zDbTA?qA(gzA=%DK#t+ZIoG)iR`sNfrT0V;?w=$-3xU?9}7$S+JTW zEZpX~c*YGTe^x((x`#K(oe6eSBeLc~!HCqe&Nu-J(%40wpwpj}B-EpYs!l!z8yC_Z zr=iO;2kTGObjMygxqIey+p)#kd`o5iKfuwxlbWbM53RB)@RDgN!}Ym?qeef~^TiB1 zncS@M69==VUgKIoRuo2rf2W$x1CrSQ;T!x&Q=Nr8&Z0ZRf@3^EaKSJj62J#bZSm+q zYlH8T0jY>U2(jtc#Q<=I)KTcWy2|sYKEqRrc8FmhmkWc@Q|=TU)Ah>batY8(g>e2M zc+VArrMsSV`fm~6tf+4ABB?5EryC3w`j6iM94!=UAz)sNYz;{eaBj)Uf#8c!2-0Z< zH9|3aO0+`1FbGBjeNIRu$|KfB5!rHJWWM_)o;6!22jMd}u?RKPe`~8MBOk$lvcs`d zNezdLGwQ4T1AK(XkL zh>c);;N9w9?BRcB3`kD*;xKXk+&|XwtG{4jAI-Ux(OJiz>jhfQYTbL-=)ssZ6M*Hn zOKlFq#2{p&^#g<&K&ynLOrKt3e>D^)nF)*p9kFCqhp9ZBzI;a4ucKQKmt5-XYjHB; zd0yL|;zS)`n}8G65C>@#&IBHNnBp68>%92;*gO-zEZ=|c(1Rh1Pxy*;cz6Y2{3<f8Qpx& zw+1QSuW(I`s(qAj=~}hJnX5PTa${GX@EPCtcyla=@DO%w}$Oa{6@&phrpDW`K?8=_DfYmpYQQ7& z_HqgHXeGhCYIexr)%$X#lFgCEosQE+9ifV@|5h|lVy#JOm@fTAYtA(SWhNf}OV{9@9FD=wX35U^xzk?z)AX01w1Dz{U0_ z^fc2#TJu4eD*d=ZAi|g~g^gBR!6AIJ6&G3GVcaqApQIIrRL^kv3Wj91e2fsy8%B&< z)~c)qqf!=+C9vWtAzTDBpoObksg29YP>g3t75o4jnF&Tf&%C=Q=DH}IMXrpeR$>GZ zbw7{Q5M@^IB8o!Nr_XZvpewYm@n+ErwQ#N-izzC86;IZVUl^^pse#s&ax}<9Xt`7d zoV^6^t1Vur9aPT&=)jQ~L=pj7fG<0C?}RlC!j}cr$b zMt#x$?WYl6iA1v2p%7teqUWfUcaqK^b za6mKq$wjC(R7X?arn}Jz3!U_ko(j>j!Rh4lH0nJ8;%W6UPa3*IJj48;Q^83`)b&ly zU5I5|4uqh->p{I~b$Jjgi%h89Ik3zZxB0Ey)*`69G1iERny?f^IRj>;hnP z!&+n_pw`Zvb1u*xz( z4|()d&1M|Z9KctStjiZHbf2~oV+9??ShozGoq;HctZPE1%*NU%6o=n+Z#~xtGDOJE zChn%WA5=GYDN#%^#G?=qa1(ACiZDNeuvFBDP()|lYKhcpj*4yGm~X1@zu7oOyp8}u z3ECe5jun_85&-FYHApqACPCvQEXTF7$GL!5QxSB`X!+##r7G{lW7b637@DJc#Yq6~ zq@Dv~%)2jPH7g-2# zj3bkGlB8Kx4?U~`gB@S9Bh6e7yhsc$agjE(q;Czbq*LD4@Es4AlJr(!Pb$sVd%^RQ zP3dma9p2a7iNg2vkW%^8Ru40Hv<>d$*u~*Q6cr>LRolv>IG$AT{(rm3q~d zgyZjDP+0GOSPTEG(+iq{-?7(tWz)xWO%9Dd9l?zWeG%4sK4D^@o%7d*%?24IbT!L)=h$@GE&JEuTcw zXOsDI%!kO2M8~iAfqiR^{bv2A*2D`8$0rlgL^Dww!_NW-6eE?cIGaLZ*$RY>vbgBZYN|HKftJ0Z3zGGBHK4Wkm4k+Q>B` zF^?d`4TxYg0RFY-J%;0v^D&$mb$5;?vHudyRw?7Qjfp<+H&!6n zwc@6?o@5KEOcq(jxa!2vTDUHdQ}cJH!jz|NQj4M9Q%25ej_T~n4^G!GrdzN840qaH zGG&$m^8mo7OpQHE&5?3!_NnJSU7RxbmTeEf!i{21kfBw2)%?@&(Vb|Czc+0!zZp$% z;~j}MACB(t0S5RnYJ;E`Bv{aEzJ(_HTYfWpO%k0nrFPb^Zum9wwn6f#XsuYWX@-3@ zImNPeZmAKG3`p8j5Unal1)>o(ucs{k<|W*I)5BRHLjmtc`JGHPsC{afQ3Cresj_+p zU?#;WKg&>6Ujd08Qys(s5`dxSXTFavz?#2`1{`pmvhSq;;`H}(P0EA3DnHF^B?$cb zDsP?Kxd<7Y;26%)Sv5R;u0T6km1WV(wO;r8)Rg~eU@Gg+Z(seRMaQ-Hv(V$eIh^ff%x)N7OH7#!D9BOXi&r^N1zGQYeo3 z#guv3&RE~7bjd7Y$+&dM>LbM1amht|$?oHl#nu-C%CeW^GLE_AQMzLIk-6mXammzi z*>ds=!Dl&`x#B#zoS?d7!?n!vC*vnq!a7$ICm{ho%UP2U0@sR3>1x2%szvFtb=qqF zqm{U=<>tz@jI^b!t>sUNYX;cWAY=V2K1+pHR;$z2%s;Lq_-vFtT5~jBHH%38eEFUG zDN#1MJ(@`$#<92AoGSUo5eZANpRyA~*x%`~Q@pb980)rr$9`~Wp%5n;WSOnT%oLJ( zGtY2%LsEz!m}ox;h(8gtXuS1BJXytIYsGPEqjPKh(bg7oiy{6!VtQ-K@%zuT?~4)N zzjl7#`}ln`ZEKskb-4BYpAQ3?&OnwiASPP{fNIbY{#w-Ai6;IaX6x6W)@WW;uwov2 zyM+-O@D_W*?dX=#Yoj9%o^B!qHk%o4sy^RdKftWt{s__Z_}3ix!zh`Tw7pofolw24 zN7}}vXC(Xr>kma3cZKNTSlhLrgkRg{Wji?E9h}LINmqyfY3G#0?x{~Z1`@lY0=r&n zAX&_=FZZrtS%huZwpUru$?v<1Z+2YDBHUhuTbS&4NA51x?4IY|iC6oz==R&xX@{5g z%f4&J)@gTQW!J1MBH;UW>ecX5zN}`O-AJ|Hm(+ff)b>n=_D6s1_)F|0ecEvv`rT-< z7d*6cvFmrszx}NA4CnMe38%rfzF;TrgKCps^{4kjBL8$c?K4BV4)R{@9TnWSi4;|$ z&fYPebFJrqV>u+r{JO`!b&{1Z6#r2GBo04IH9HF3uSB8AKtS@+`h*$=RnpA^1U&ELf~PkTHJdYwz1X^}>+_HolSRWmmh> z1zUd~Z(DkG*&u1_kPn(eA5P_1)=NREUwc}>uXJXhF#iX?9ssuzb#J*{-vXBAkY8LL zrsmqpoKSu12h2$!MFM;j0XkK&yagWn6g7I|MKPC{q zCKVigSbXY!KDFZ6vAOPw`g)@xo!f6^0^aqfvLEl1hMir0`%H_THC`-ox(x~1iFkJ} zn_WalS+{%fS+V(ra0e~)f8icN|BZV9z-B&89>TJsqPk*ovLagQqC!IQ zLP9!{LXtvCQo_m_|0{bK85yZ-sQ)+XVQ0W9{S_BGEh=pz`v1xvj#5HVlCsg#{|EQ5 z7Z33eO$ZgUw#C?J(!iLqD@4HoNh`+r#vFaK+LHX`+6Vuk;aJ%r07F-77m+{3Yvz>+=6 z^Tmrw{txSMqcAf2`Z)m44I{rVbN5Oxw9;KzXs|z0dujx^H`#+|~ z^}DStE&mOA-0!~KQh)6~phx%R{{=lpM@Q%9=hxQO{`~oKi%|4`!#yf0S-3|{?f>8& zP1l-RTCd+|yV-`0Nli&f?e6JGOTG7?H|@W0kB7I0A3u4@!aYVt$HpgKPQIdzqLV3i z=I-B{AA0wGaOyu74quj*S60{7Hzv`E-Cb|)^xyCP@as_)`;jBH0s=Wgheza3e*V;- zh2&GrwxB-7*})KjR5}4aT-YScn_%JB+>~GU>q7V*p=q>IUhH!%q^rI?X@2AL^u?|Q z42Mg!nYtg!uF6dGx{bPSepXeLO{HS$eZOE?E_@-IY$2#{27jVJ)eHlBBH3IkfP5Ju zsU*uKR(;F6XcMOG##Fr>*kI7LVgwxN7ic36OUqu(o#1^texLIB$>p9uB^J7$PMJc* z<2U4co!^+3s92V}Gy%`XiUc6}X0Yz{nal3OXa4?tJK?4AEomIn%1Yp!8!WxAD60a1 z@we;>*ji&j)CUqXR^oaO$Y1nQo3A*EDQq?NXM7QTWYACMz!&m?z59sUUHZ3~;|-Nr z7b9O!sXKnxe zDa6&gXW{7;*rCjEe#b+La*%Ih!H6l`S)T6d13rD92y?cOy#}*7MFIF-z5GtX`EOmL zhJZPQWaLh8G6QE*=BISu7RZ2EPvJVk@^yaYQTLZ5#cWJP;I8=YFZ_JAQKqiWYsXK< z90^af$$<9+pL4~#WpU~{CXFoTTd&ag{T}61iRbXmP0yb1NnKn z5i<6R_g%*$RFRj?1KyZ}uHIkA1|S3MChu<#jcgRM+M0MD9;c)mc@QsnqC$l)mx z{Rvjo&_x%J7EK%kYli84%yR003?N!u!1f*8D{ob_LN>-l9Sno`;hFnY0VR$Z&qest z`q;vv|4rz>=Px*;{^C3JRkt;R%I%c$BT>{ThXZm+bsjxt4HiF2Lq7FYxJtQJH>S`O+@-VM06_N65hr4@`_+F{HjlpY5QyL< ziNEzWhC4UEC#+Ta3e-F>k>@29tUi=D=&!M0%Bpd@i8k-tU$wx3zZ2UMhI8a)^%K3= zTw688pbk3uoeVsBSfQ!vtXv&~8jLm#uZKnDJvK$NnyHGH*zM4^Hjl^^Bvw%lmg$js z!j2bF)v+X_e$&>$j9OWpjgvRAwG;K4u291T%DAC2?8kblWfNLuo%=>@fBl3}TLM)A zQ4^lec`ILZ1jv;q+Ml|wQ8CDW{aBoyLqL6W)g`E`rmM#ZZ^w%IxBRWjF$H#hS1PLK z1D54tMr~a>r>i^p<@8S^+Bv-r#9q>qu6em3b#?VcF%uSZ?*)en5K z7GE(j(GuW21>?U{wigkSS5DauOLHr7My`bkbR>p4mD^D=oqoJx^6kL}2{PzN#FxrT2dg*n4{r@xcx93p=##dc0PrE@w#_q_?bHg zAD5o%+}9f>YT4pe|znNmpSXR->I6HC6&7}*G|Z=)+Q_a=cahJ@f;6Vwv2v}n+A4!oNPXs ztj3AniuiTkp!utnwf;-*zr6Ot(1nN8*`5!Rzn|clMjsTvKcts~emn6Su4{K04BB!P z4;vUO7zZUEWBa!^R(5UeY657Q`^w(b=fm~*?twMFX|Q3+k?l)3B2SO;pSjA+pEsMH zye}wOPaJPPO8%7lH9noI0FlNwyfVnp&iLafn!1H_>aFyxJn-fCxBm(Ea7i7Myyj`b z^KA9$j}WK$XWae!O+%0NP+idiErWcmSDAZneDgOV7a1e}V#JoG8G}QO9D6VR3I2SQ zu0i?4^Yj#vJ5)r+y`? z_of}MMag2~xoZg*-O~BjqBV7i=D|p({B*Il=vgaB1QroSM*0GVp;!PwLnbQqGii~> zFeqtalne%xNy-IqU_PuE2Av1cbHnCy1>M95`FW8xc@g=-5xU@T_dE@o)6Mu5pviooQefwiI=rr<}&;=u&iP;XIezOV?s_+divXabCN zn@Q~jPYM=~%%kA$Axs;aWR#MRgn`H>a#1^$$DCwYiA9ya2xHmVM1H z)eJ86XB5nw&oQ}?1gFE>5|COXgb4;f?LZE8ARHJ(+ZQLZHYD`F*7te$MR*f|BZAvm0_mfbEC+!A;RK*)g(#DFxzS|y+rQyxDT}{AFbJAe&oNWL}+8+XNhH(Un%oRMjP2curzQrVu;>Rl6UI5_d-u(3f)k;64d}ITm3-LKx96WfB1k zI#7ZuUYJKxbxUl2)R)kTZ+i&#B+A?!ttcck_@AyJ;|aQnnGQPX+my^N?ibSa>dN$T z_7Wi9MoP7TvNCJnr%l-wvdSr;c1*9}j}2MJ z|2`;W0V%W~zbhpCvp|py2aZXU;aRUPre3Y5Mc?qt{MZ{?|4aDAdU)y0#&U(accYi9 z-;gW!$$yVF@v>#=2qrA9^PI;c3^B;2#9Sm1;pGQO_Cv5Ph6Ci!M=`Aca8eldX2Y>= z;P*Q6-%WwzV`wFSTtUCqPN@8Wh!*b2e2$7+wrbk5shucj`mmm0S9sYezo};bd>JM+ zivhM`z{AnddwXzBTZU8;juj_~Fe>k`I z?K~fk$LoIQ#-x)-#ilGZnb;azwCg8Z6il*&0P@NojAt74mc~F7F_2Vy2p;!{qbPdy zajAtyh?VF4%%W)P-ICPR`|~S^=nDup(#2WP1dG`i>Z;HE~I9k)p3-#%;!LfE`qTK$&3L@kyx3@U_mk-N(Kwz9%fU3AHThl zlaa5FiTd0zfdlz{v)(VBl#0omr&3r}n<8u}xgiwU+NRgLZAnBQXlhjCE|MGDAU4-d z9|UMSAen*UT3DIpYu|yC#+Y5_kQ(oeV=uXarfYVcvOR&+r3c_ZN{6^z)i+Vf%t#NJKH=*5Clz}=HExe{ z@V-=2M0hP;c>Q5M03Py;eEJ00sewEVLq?-&J5^)io{-5Ztimi!RSuo04t+_Jal!*} zpWWgj!jXSn8vtT!R%}fkzUEcZ(<1y+^snwG;f>8f9xMg^B@aBM@ufeL`;x=^c6qvg zjMcr#D=Y_^6Y$v-O~F4NtvUFI$Gzb&BKU6|l4Yg&QtFf9*_LnJ0cOemVp5)_rhT7# zWA=Fl?0a)nCoQ6~ddq(Im11&Uj6Nfi9(KBR)q(o)ZsDS@b1G;@RCeBOwza`x_kqNN zx-w!B3m&!R6}mc!)J*q--HZ)3sj7S#pnicO8tf^4T7YI4`lb4q+o*KbB-3na_~gRS z=i?soL0Om?N?tO;cLynS(>X14KzSVLt{MLQ$mgf)aNWqDwRfl7`A7fV>{QxoQ%a9I z*fD060Pd!99+{!AuDE5_Ss;5JS?t?>hjnBM>GlD&twVs>bEF>ZeRJ?rdX^l!d zqy#av@|ri2=mGVq^Z;(uL+Oy32;{{^#9J?9Z$pHpN&nF&>ec#j#fG+?i19Ix`%+$$ zx+w+U_WE3;kq9!RULE0HhwtP;xkyAjn|R*tb+7#9Ak8eCEZ)~BlH`d(kN5Y*1o9FJ z*QP-y(@7CehIo;$lTnO7OOtBLPfygB2+yXQNQ88Bg@15inz*ga91|JneD1wKPr-{MfU&$VfvXh!9P}klIPyW%X%KnK17+b1@F#8EP>; zuk*7KmqOo+c5R89%dA)<7Ap#Z>}nHIaQ0J>hC3&k6wfqTm;a=6NK*r3rv>M!OOk+?C5pB{DoWB0ho<57-av7yVR-%*@BPB_BzBRbjFNmVcXi zVS0R$2!T~d8~_QWz|8wC0w|S7jC094D_k2}qrfM*{CCS2cAC8h%_qn1sxBc_AbB@; z^JP{Te7qcJpDYX77hn)W0DkNDBd6cs5IkHT4>eo|D7DqL$apcDpUHjHl8@iQ>)Dpe zFDz-E!Og+<_u({r*KT9kZl}uo8rc5^ZZ{Gdj{x-V40lm-`I5YO{%_6oP9uO}a-5f+m^hxjoe`DJ>(icZ?x zb9OCXx*kP4cK*66C4jVhcVvHjoOv*zD^pu__jTZH=P--zji)EJdu6Vr_ad23VvmpF zS`HCLUnNS`9k)*W9FEGEx9xr-|8_mm>s}q9e963Ua-aGJW&Zlt)UP0c-)_vmJN|uL zelSyp_jQmCkiWz*BpcB94uM9$7WkXt$#C0{Pon$Z>(F<9GQtlo*Bv#Q|9xM*Ge*eH zQ~i@p4s|yVCewP?|GLZyY`nNlEByRHqNQEt9nzbhLFme_vIpfa2oKkuA&SnIKxg*f zW}Kwl<|C4^Y+{C-hH8e@|6kv*gCPEYeS@i~XJ~3sy++DPc5t@ItO5=0;5mu=fbX58 zKOh7u&uLEm;xSJzY3!R?+t=y?Ngu3vOP8oSnEk!M+I`G8b3uD%$?e{kq__F~{a=om z1mu{X-TLp}4gcEcf}Y)f%(L@PW1yGmw301tr0k3A`szn@@2A9e8Ap&$c7_bnc{RiS zi0?uWq$=rq6R%iwOVrnoNPE|s*B<-tY_0ThWma9e`s?VM8A3_CzEnS4a8^XA?y5o) z{~do*naZxpv%X=`8TWqi3Y~VyGU`agI#tr)yRV7t)>NVL+*ALgYmUp67b6pIq}uKj zJa%wPX1TT{w=VzpJNI=2b*SiozkPgv%r)+?@94E!F?CCAkG_%VS8!b>|sYC627 zLm6=rIWp68)fSg7)P|K8ym>ll(Z*vqavZ)9SRDPXR^p&;#twTkQ-BL}P6+$yU*>q! zUzZ>vN^mScTh+DVoPCg2o*47ZH@`sZDvx*c_#?Qp6{Nj^F=}fhvwZF9N{@ZyCjv0n+mcy7J^^$#zeUI`3ub%O=VX^ z{`<~ykb8g18}>1ad13jZKl3nWAq-YBW~EwI`td4>sY}l}OO=*TI3+A{{jp%_@LGzS z*X4@Y*+?ss8n=o>etS}+{o6y`K-s^`>%~5;!ZlgR4+h=JFFV?&R&!UT;P1xznR?b$ zueJ#pN>0zcck`$dwZEJ<FCykGofTcUPQmYeX|MLvH*4vdxS6WtO-!reU++rZ z;Vks?b{VlOE?BOWTE&hsGxT_U6;pENi;)HJfA#c(mZf}bnB5JmAc7H{iXiS^`CK5W zMqKa+ig{SLlK~bg^T=2Bme=#&=F=Z$l0SX?rUwOd(zpV~1`ICfOl@TF*&_(Qkl8Qh zpknG^zQQ#^j`l2A=%cEJ5qhC@yr&pgTz|>j%f8atd z;PwYbm~K1Y`tvQsnhB6)A=8$fzuo!oMaJHv%a#wDp44;9`%223VO2BEYei7zU=DOi zLR9K0Wx6{2RIgA|K#cUVA`vQ*$%Y$?V+JrZoa`St;>#f@{Wf0VOH2YFqE-s6)6t>V zhDSgo%;ucWbAQ%nh4xijCY;P$RGw>?^JVz9&rgLI1^8 zGeVUxaHT^i#LqJJ9SCz{a^k8hw`BrE;vr7TJ&X7~NXM~{4aeJObnX_NMAAhD{+mjd z6?&E86rhIW7#(J(`W5(w3t2fZby9< zCCpO(G=MYq}{Mr3UYitK+@Gl8tdc-zEXh>Nw(GG0a_6D+&KvNETVW69oUx3 zm*8Btp|hvI%iE#n@f+>1I1-iGTKVRkYp!W}p-q>h$o6?TLmXCofFmpXc_Y>Zu2%a* zw7v!;lWTffCVwJ}lP(e?(0#Y#T@2zpdGgUS_^OoyL$<-oKn~CHfdwNc`EGO^Tl~FG zuZ8(k6OO{)L4Y3y`S)#EJsG?dnorkaoas`#NU!1RzXW>UsNQ@Q@b&6B{icV$!J2=x zss#{eN3JH@bouE_`t$odB?^GSX19{vRNb)|A&}uuXXnxt-Ef&F(m^0z z{C+(8&OX5_3&8Q8ys?NnH}TDhJ6*sv>;}u{gfSkWkYdKKl|zWrgNn62dbRfC(aEtd zYO@M>aQCtjB53&c_1~rPpXjFc3ahVw*66z=d$;C=(;ac^C4K!BRrVYen@5*?cUa_> zxIAyMxqp{#IQQQf+;Ra<7JPqx0I@}m#fTl7@j!^`H4l` z62~7-JuK?)RBZF=$Yw3*wvB>TC@St<7x=KaQ)k)X|ED2YTMuL?Uhf=@rYLG#!`uZ+b@vkItSlp~3(?%b1ZTlAz0>I+26@ zk^fLlaSBIwIRFNBW4(u+rfq;my}#%sucZ-$MvIQVo6C>O?O8%%d6%w8U9}ir_?7sp z!i)*&`A=Oz=GNu$q~L>F&b$h@!9f>jm?{*|Arg+7JTN9IbmT3p{!b;R*KiE za&&*t?#n%enpmV?dH?sNg1q-rqsu3sBBDC73M1o#wd(PKIcz9Ak)p)X=r_puvs#We zGcv>AtSbE?Jo@jj^tZ38ulsGw%A+E5FHLAszq4)E=Yu~O$jzqAZ;i-Z+DU$wwiL?! zVuGV0uiOIZ*>dy3)5-XslW|3-x1&d|m{2F*Cc72_`rZH$f*{hlMIkvYwnynFjwOxn zn!^kQ9~^jV4uC(>@z~ZxC$n&IC;L=ZjH$!-eOE+N8LXq{QuHO-fSIc2dT6lIB5Dl6Xq2 zT}lq;nL{b%LC@uwkmPjZl&bCIgt3&@(A3hN)PkPW=8%+!+sPTmDJ0|Mp5)}#+O&A% z6ee;~P)}M>ZCX7d{c%rf#B#FXLGrj=dRcPHT+ijPkhJ=Ow94d^%I&ne<<#-{3`$5^ zadOgYwY1o=^ycKGV!MoIwHYLYGx8ASV$3LX4v*UmSoMoL$d40pJEtX1OGNly%5gT) z@Qty*4&hh3>vE*lI7o-A(rSe2n-{UlG~yqtiFVJN#BYx`T#th0zm;FFaUxbfYH>F8D#0? zO34c(NEBO&o(1H{rAx@t`Nz_0T%}VUz#0;?i7aI#m7xy6Gb_MATj`g&(yzZtulF;4cz@+-&*l8>O7~S@HoA^eVLMoJPgcO6gB7vM9Q8+oW<$qFh{~62e_}xKqloONJCxa!Z!&BTL_f zmMKdL+!gmbC|V&N86H3cFh)n4(L#4&q7Vfke;6S^ z{N1s1x@v-re9q@nh8$srHdOw~YtG8Ns`@Y%PgRBJ>Ixhb#M zx3G9wrv9%1x0j-(bp5LkP zC=7HO#?EimR;GYfpG0(XM!E-gpDDnV?RPSu=Hr3}WTH!V#Qk^<# z9PGtN)GY9(b6uCpeJ-jn{$WKxl(^yobO9aMy_ z0qWZh5RwMSVN&`myBSHyImsS%psQfLYr`6K21Cs}?a7nx>8140I6!B4Br&|}4o}Yn z!cBWS-psineQP+aIs*ck+l$>VnW3tn4TXEM{y6w+ zMU)aw!HbB*k|Tdl)K>x!KXjA>seU8BuL9rakCU6B2cjoT3+PctS+dm&vcG@#_F|!D zg;WvIXxI#e%asiV0M&)Qt^=^2NC|`pJmGm-aqzUCNAATT<4y9@a)SCslHMSh~R9ye2fkC>MfurHp)#`+nZYB_J(46P|CJK!* zLp>9|(#{hyNgc!{BD?5gd!$e}sA9Y%O8lXM8XlUAx{Lb|zisxvaoeoXLo~!NeV9gE zH4K$RDOtiNSQSSaV2lS^a3vIjC3J*UQT8reiwKdvOD~NnWaI^{E>Ts};U0t}O#m=x zgvgPGHUGeZ@Y0v2483QE7k7~;l7f^la6SFGKlyp(de<4jBH9y7OdnOlKym59ANGJ3 zkdnpsvR=HX$8~f})GH6d4bo;A=sYed;D*u@i4#QSi{yS$1nTx7#EGrj5D(lVkJmYm^%0e|$g#E7 zDAIe#ZGW6BNqJcdu63Y%k=WgZoBnT>>PCTuSx%RefY2W$tvs}nBwo}f2GE_HDF=U* zDqv=ocNC^Heu+v?Ai%-vQ{c-e?W&tcZ8P8Yk?(tX+wrrY&Dn=UVBUQCVy-d+Io_NQ zD|KQUf*(2w3pRWh{PrVLqr;?FdT3AMU?m2^a5`!AQf6$u`5&U??;(Tn30;6?)b0m==tU``7Gm%Ukf7(PEtwO-tmY=^YhstFGZ7 zc^a=Vmcn11Qa#sw&LlryVi!i9LdGtm9ImN*lmh>e>7dvZ?pshpG}P2sk@S8o>LPsl zQ0o#w-GBu58%rdwzj@IvyEMIANjU2*8QwC!Wtx&icmtbFHLP!tx9<*%=v_n*m0vZ? zY=^7M)V<@1(t7!Zp6avO9r%PRO&hxbZ@x9D%oB*z@p+(O(w$fUs|6=eAp;IpbMqE6&!-le4uhedc6nAN1Goknbb}B^?%HhuJf;blm-r` z=wU8FfVzvGTr?!Qd2YY9m~#cGe#w6y$W^Iiuu;542m#I z-QIlGiZ8ojxaDzy&NZeo~z+@UX_z%C=-RxPqjR(a-gzL79u~Q8rs)kOA zf9T0US%7yeM5E(9q{=MRs04OH80Uos{hX%vD1GVkX7(}#qHg)zs%6ZO8FiZ(WPsT| zEBP<)FO&iLs$bt7WE`?fqufce1*GH1@-_188XDU#TJZKE2C6}V1Z#m@T9644eTH{nXF@+R{u{mX29y-966mfoyzwHs2EIZ~6BTn$Nq3_QB!c!XecQ zK(GRFz<-|c$tlTa;@qGMfR2Aoj&^E(oLjE{O_Y3S#^tzj|Dei(+EkfPQeAUPKHAqm zyt6Z+=W%3DU|`otuBTu;}#v;2x`Y?k@iC)|U1^W81y` z&s%Q~zO8P2`FV7F@-t4xzv;A*0v7Wm#l_-u>4S3B#wZ(PggUR9HFR!W2dpL}bcal+ zG}31zY`Y(@INeW(*R|I&Mt{`f6*gt^97ltO3q)D^mMd^#)i6yVO#OCF`K5A->F|o4 z7qdXkoNaBB*@VRyLKdx_1J25wKdpD0>#XbSe?G6V-~$2+A|n%3?%j}o zLw!^1)vdfL-*_u0+>2Y*d!@(!;ZWL`{D*hcGZEjFzMgOIYk$D`=7yQhNn;5_ow&2 zFWAh?x}Cv2#A?amN1)mDShS(|Mm#&JYAv!|saqg=&gP>aks1KIlOXcIeKX}y`2>?H z-L<`$7Tt*%y_>qRRC3Mo)`(N!vmYk{$-;x;A4vKfq2mcmM|VGDo2z&TWs_Dy()=G7 z7^P?8Tz5V^xEUl-o@yEDUjD&&%D8LZL1{U)eUy3H%;!J$|8N$uDy+3#AQ9pgpQni6~<2c8tlx zkgA#So!f=Yrgavv@`axDaOK_l1R_oBW3E@*&SXHUYhfIVCVRtB>)0+{x>b|+wRHQ8 zm{b#!y1toD`}6C2`%J5nJTk2>!y3FhrzIU^+g8MS8(a6d!=*burJmkv{TAjR+wt8# z?Z3VsyLkQn&F?(2U90oq_n7`X2*n5_9#pJ$ZM4MQN5r0UR*Kz(zSO*^K;wl zFX5j@RarH^PAYy4|NczznWkv?lagIuCe#JBmR%*f9xZY_U*ZPr}s`}M}C zrSJFq!?Ek6Tq4MhB7dk13{zqn0nItUY7)8A$~jD6%TZuBDS zekP*oiJA@oMo=-Qfm zrDK!h*_gg`kX5o9!zO3U@^ftLw{$hkUG&FVL+MoCbdP|C=erRxN{%ck5kDScp1VKS z`ks|}{m)%4P@%C5$M>xCbZ6l?V`D?ptZclNv*=TIV?k~VOB#dAxpxS|i}(F9P1r@* zr?2#ExR#$Qt8D%nQJ)d>I zcTH4DxzOCB>>FLRcQtoQoxbZ#R-u*B9oZUVbH_y5RbbHRN>uGa`R!Xsvj&IU^5KAn zP>uNOM^iQ0w|+=a*K^SSlt>!B3sO>lCChYHYjn?_t!_1bR0OV`%M0ibcG^dmArfj0 zRVU`|hy8f?bwH;mNfH6gn?Xx zW30DKQJkGWw;S-~2eWCMvNapuMxA9wy>*T0V!i#(db{cR>)ob{)nPvy@TCaoE@4Qy z^IDR`^DA~2h8Me@{A?m*c-bzQE_SZU5BLHZC`;3|QxP%WP_ zAPNoa+*_MLeE_KEnqy7P-hLlBhb->Vv;K!oQs&*DyJrlcv!ASCFb1Kn7U+VahCmEz zRnJn_iR|~x@N%E)71*A7WKyaM7a0d1+o8W=D)(*~u&Y8v2w(1A(sj}w?vewx4=_wb zwoEh`We3Eh=F=0;&L@_+rbZkZa6$@?^{LIsU!UuRT{z*aH^xtJlK{AK)c{lU#~ko} zS`5Q_u#KF70ekH_A7CCcK})H{(V?bXE}ZME($u|mn~wot<;2mcaC{R@-2;JcuA>Cq z<%9GnMCrZ|G~L)Byct-N5(f#|l6=!zc-(*=zfeL4((xG$pg|fJ0390)6v((Kz0AcX zekC3z;`1JCd<-mIRuY>^-=f<&S*VSY3@ar;>s~oAem02Z4FTfR%>h7n!9!OI{Geg!}lo&_EE{T zA=wKs1LsG=%CJ*9xHr0YD;M5h?wp-Yduy^hfV2pV<$HjGAD6{2h2rDToK9fvTf`** z2T+iNcPKm##ewZ2%41!cEe621Td3eK#URje80s3iDf&DqMglhg<~o>Mjqw3_UK;>A z=IhcS@Sq+CDmd%~vEwxR9o3e&5`3OON1I0fhAB@ZSIBMMmY1-)!OvEn)EJ&yDHi^< zYv8HP4u+_`LA+4e6H9JoUFN+boeWG%9RqGNFTi1LiL-4uVa&bR6Df(s-Xo|xd4+rK{LXxpA$(BTZj-VqO2Y^aU!F$J1 zqa9R;UT#FbS?O4as^m*0`Ma{tFXhm23cGhyU2-5oJ@Pnz885xq#qV-xMFok6>almF zMaR^2{gr0tl|E!+4;9oeT~j@}8poXzzXn#9IE=~BlUvn|OMj`brmHfnppus(L&t`_ zcBpV8Io`!T!S$MwOpn@Kah6H>tB+m^oEY-eLx+gtsg!oy!BH>)BLB#%@In3NnD8%UR34Q9+o z6%=6J+onGH2=!ZsMpNM0D)8WSXdo8uiHBv7=>i793oq&HREbB*E|yq2PJ9ghlk-vM zZGaL8KZyoNK9=jZ;|MO;AR=4hZEGyuyfNLbA%a8g-c<_lD+x5w6LcM?`|`au&oKMD zocld-Ity_+@;@~9#dY@V?tkRWWOUY&62Y+qXtw+7zImwu6l(t}&>4f^4qoao=+loL z-p?Rv+T4OnMTW?x@pc6mfrCoNfZOla%k4kj-BN{{ zp=~Y)L*ox}aU}RPb+Mjhl=(=sB_5!&1L%msBO`$!aJnfDI_N-(g1Z}JO-0YNgs)7n~ zG7S-TQ*XuCcmRY)%LcThRhufW`tm=8H8vliPvQcs^59=wQg9f!KLO>k3I03~JFdp)#lvMgf*X+Lq&H>_cFi4X`93M*6*gpxgb~ex?*S8 z+2%m>+mm+fa3KW;&WA%%-S`GRKhbl)+D&^!bWTwW>i`S7lVu%Xz(LUjq|z+p`2e7c zjTVRj)X?k-AgDeL>e$=iKi^KY(o?M`0^eq%u@5LKGCK~xXr?z z4=_K#uz7b+j_@)9-NA_t)Pb#prK?sjadkm(jyXs z&}8X}NCVh4S!{YC=yllD8>|i3o_tL)&(rfKg5uTPl&{uV^{T!7^n$XOV!Rj3dmTm# zq(G!K5&IRLOxf^uDstNy5`ckw;}G(=+O}lW*`nNopzFPkJWz!jtb^MP5r3$V`t`mX zG98!*G;1PjFi&#`h-P%L7CP+g)W4t)w{e4ntRoU7dnO$EUr$0DvB;O2@Jp1Ztv&FY zSky)@>>0h_{oeCGuU{2OyYAN@&bBsyyd%JfhWe4<0khCJdz1m8E7>ydA0DoaOCzB{ zhU>6k9O6F;Oy+J{0R@%d3H3mOLT6zbB$z)H;zxzX15kfl`KcvJ3m8J6;ltpe1mci( zItq&apRh0h*O-ilh0j9O@i1*Fzc+T+X&xMc?U9!5DI(Jp?a$Cr6jZ=0q{A-oKPpTn z2gd(rps<)z&*8ewpfI&<0GJ<5{v-PN8y%SpJ2peyHLv{9-O5yA{Z@XAJIY zY=%@safC?M+VJ?zap0gk9t-`a3GZ*5xkMWF#~`RvbdGp9e2R{MnMgtRGPR8`5aIr4 zc>CE)-q#VK4P-PkpJ;NQXxtNSjL|*&70%U%d>@+L-Cf;`X%IOpVj2bYTOQF0NTw?}f7Hg>dEYm0sEMSp^cTXr*YY>epUH-Yz7Dw&$CBS=cLO+)9>Obv) z{?&6Mz|}0l2urAr)ug#k|6XHX8z-o93L<^*OpG{NBSejD7`}uCHSa-6OCi-y;pSQh zmGu>M+^~HH0!&8IE}}ttRLCDPth$N%K>X}|4n!1~@&Z8m`w;%8BaQ@kv(IEHAA4le z@4@R#A zStdJV^tVm|>G;JihAGCnp;Qv2<=PAOZ~X=gfX4gTlQl=+fX*BgsI@-lM_3A-UNrbK z*EF=gJw4w@o{!K8dz7z7@3owCvHODdd*iwJ=vKBIMtUd?Z7aoAScp(7L*W}(ngNhH z_DN4QWTXg%B|;>bKB$ogm6&){99fmwv)ByY>Uh4r_QkUC;{}_U^KVx_cAeYe*J-GB zyQ*=H*3D$L#V86q@x0*rWh>?4C#D$N8DDGmaXo_ZCxFmOyys{*$j`I)>6T+}#6TAd z^5yF(%2Su^X#VYNZF|EzpGaS(lkW`(C(z%B>d57>h&H(MajKziwsBz}%{^=9D2>iK z*H|LT1|!*}EZXNj%BuguC(^b1Lw@H^A@s@t^jZS6US;3MW+(kKn&p6RzqB*evhymF z00Q4NrXvl`0t^rK*>t+D7bBD~y*i|E1`xD8{WG)tuGS6iG9*|UOA%-ir=!R=f>z>^$GN#8@@}U zvuW6Nv^cYNpvli2MGB*k0}YEx*wq8A*)I(AuK3LX9YB^c5}x&)u>#J@ix&QSKBX7l zR*Ve759LIlRm%_aEqek;^mPstzeUwP^G9WVvJs}grTU7ZLI zoNTe6R^?_O^EnKcBOK%=7E~^bEsb9XT$u?!xE!qi`$=6q>Sg-&DA}>42O1RyHN(;C z8N#Cp@SyeUc}&Y7&{Sd=xd{i+Tz5hdra&7oMGM~8UZ6~f?cVHR0WK849BSMHNYBn2 zUPh$;!ZGPatESLrqij$MD?rn&^B3fUglF0M|1 zcO(F+$72`XDbAPb-S!?P7u>F%Hqui_DjM|U?jY0Az&{VX_X}(&MPcd!}VYR5HiUIHkJzM`m%4dW2%; zVx znEoO7#(ZKP_FS4{{qd2cRW@DxZK|#P<)(U>w9T5xYucrjiXHCPjZBNRGc-DP7aJXV zqZl1JbJTw;n+mzY5L&xY z%6sfFHkiI8!EUabbE1~cr$q(7xcF-y0z_`KvXat0#R(f3q1c%DteMacl@SO_H8`7& z8m>H2ScNLcqX7jm0Ph~p!Gw1{6C9ZtrUncXzl$chm4!VKd08g)hTZIn7IOERr5;zH zwScL_g!My{&dPyv&L(+uuAd9?&H)ZiyAP@)ovnb|wp>(O*Fwh;L=6` z4bIg)vS>AU<v|&5X%;FE1Qcr7H~J_O1M%dulZ*Wy)seqM2pUi1sNP z(@4VLsh|(Tw90Mi4Q(@3A9-O$=E>w25<64=QV7*H!h$xC1z&X@oeX{_U$?C)rMlC> zW_gJ#tkx=BVYl{SBkwHDdu|mQ^ung_p7P*1vLI#AMqJ4ufwh)Dyz$1+Jr|sl9sAaR z4f!HY9e92vFR!`iaFs*R2JefOdfsLL28}sp8GJLXC9-}n{lS0YzN*a}`D1B!3wkez zP|?iR{^lE$FT4@-g}<9?DdN}EhnKwEtSmYp;fh%nBi;jMs=45QRf1V#w|Xxn!MRK} z6V!<#Fd$z4&n8K%TX~bk-K0WceWQ_2k2J*pJ&5!eM5PZMGi5khk7G`xFj*;;^K2w&A8ue+ z;~}ON@v&-^;wY;OFJ57MQbJGb^Q%)>K9JD4SYwk!z#+w&V=y}boqpf%+D`fnjubl4 zeN>RZvQ0~}Xu-J6^PrB2TT+}{rZv_hc8|cs9e~=0=fx?uM!YwxN}9a6>!-4)7kjcx zNwSlkLw*rj@=iVEc6cIxKb;DamYstb+QCItLWYqCvyX(u8d=%V0CUCBw0g&jb0}v6 zrk=SHya>)K9fKP(*Wu4?9Wwn?%sTahN_Vdf3i{N@1F$bs3Wxnmf4}Br%AOojPLhj_{ z4H}cNn1ZTDsj6UPfB_O7G6A1r1w-OLLMUtlpjW92a9%@52b-uPho13uG(LDBgzC^j z0RFm*%CWlR+L;cB>>)V6M&sRcma`fIn;oK08XH}@7mG!R4Pn(4L)=$}WZz(3D(5ir zDmGjz7ik{W0TYIJD}TkFFBxD`69+MT=K!fL55#&>LA*bF9h5EC=?rMeTLb$P2=AHH z#9%oFvUxW(h`gc0!a0cK9*IBSbG_`+W>K-b9!PyvUS# zNZX!rv3r?D5^Yw6o2DJ&k0oKr*434%9BofNN?NImI0BS>5V>B;;w^DEF^Pi(fp2ji z7_={|bbc((B~!&Mdbf7!$w<{zDX;!Pg{jSRj^|)97Kt?L(!(e3gKh@R#yc{0`+Z+| z`D06|y>RFxo69|fQMhy<8E1y$xDOOLW6Q~)%_h}T-=F+irMmX-20)7s^b8*-Cuzk)5X&9$zH#^@?S?0O zjVfKNGQMdR!9{#OU?&vejDy?`fI0Vw$09CbR11|irhn1z>h=HbaM%g44Ruh&1YqofDCc!bA8Y4Vn@y zfx!PD;m)37OuC9r8z!RgiOb{k+0CrH>%>sGWu2E_2Z+3!rRUhRH2`;P5P-1STM!~H zTg+tBS@L~Re*9#@eKE~rABQ^|MT@k@+UmkwJVv^QE5*7%=n!^WSZ$3(SmPU$1`_|B!NM^{vw= z^~e8;^e%1uO8#>4B9r!`AzDejUi%%*6lXN}+Uls?BI2r~nHshENaAE}uNP`GTw_!6RI7-b$&@ZwoQM?#1 zP$9b*@wtcxU3ZlT1St@dJubF#BX$ZME3vKj<-A;+k$9qBbSfmKD=ALTINm@_W?S*9 zQU&ns8zPa4aGf=js< ztD19%QF!`NQg?FNV>OSdgR5z{F!4ETlz@uu(C`Q-xAQEFA3AU^chX9Z*OXki6 zgDOkZ7ZPl)0$^YjG5Mq`N1#6m(9q1I+CJFC?;O-0j0VGj#w3rW8$aK`|1cdoa%tNsX z4w2|}vB_UrA>8v!Ha9MafJ0K$lkF-6#e|>^g>Z3F%%2zmCbZ~{?+_uC{P@B=hdLop zjDQtFF%X-_GS8%OC~%Jjq)QchX8=dH!Nmy5%t8F8I187Rg7AZT^CIvSA~1ju>PChH zJw6-bJ$UvJ!a#z%ey0n?3jAz^MTbT;smaLA=EQ>25>?ZJPl%x*xjS`b;4zx{&q`Pk z0Q~w+=WsyxJ2vwL1@_yDUQJKIz!Lf!tE4WBGKo{Y{8GpAC3ZFO>@KtbwKKRKupoA^ zfkS$%iYnb>Jmy%{|{$( z85L#xw~PLs8JHp*LZn0#K}uR$9YPuzKuH4->F$>9?q=xjP6z4k20^5xK}A3v&;0jZ zXFt!`=e#)Qyk*wn^}W8o>$*Nz^g|_n!F##O!N9s<-r?k3k_{RIm{4)^oxdPgqeRpT zhev@J5yU@kS~ayv44R=A#QX*W%d}D zevPyX>Zuu#AYFQi74Xbh2wmJP9UzXFKDD^ybMG zO38>|*DP}4PRMH%x--4>Wg^;WINX??*O8hX^&mn@-PrR*L=(LD1X(@hs^{&2kccP~lwwBF=uQKe10bW{1|tiSdo^6JLy$KMfxpJJ zD>@=)#_>;TNHIO|;a|lTgS9jf@YCM6zm-JR8lv8BsaDUC|J|?U`>uhfCJn;Y@$MyZ z82RAe#>#4KvWV@o9m|O@l-E$^>dURXQG9_IrGH+8dM?<4-QUgf5fJtJ1bdoRUV!W$ah5w@ zC{fY#MJI3;A60FTtSA6#E+lqtHH68h|{jxnW=aii_rscR$ib>}^x}4KcYl zqVopzg?^Hb_cfXgeIs5wue|YSbrv>x6HU@Sx{>T$Qa|Z8SO%LMS@V3uG*5!oU%qr7g| zP2R32roUJ;2k%;(ZomtmH$+I4e+&C)w?B{!^`;!~{vMJ2tGwURO8GE@QClRSrWa{- zi}dv`=Rh%6V{PZbDQDOe@PQFCuC9Nd1VH&Zb4U$vbOU;?Ka;mqn?Pd;yLxUxw?4j6 zHeNi0{g5F$ndN2k$WJ(qpHE3;~$k43t>`FEoZ^nN;MLi;AN$CA&*G-czZlVPoa-tO4r;!RLfTVP zDsy3#BQ)NOPm6rfVQ!(6)9wnu9h8INUAnwL%FH}K-;dInnCcVcC0i7uCqI}409!c% zX^$0n)t6Gn9KIAU$Yl{Ned{@uNx( z$0F11O6}UOI`Nb?8oS1uA}bzIL{7du1hvm{@}UABZ22AR7`!Uzy4dr2m8>g!;355t zWcJdn=@pnCdnY)^&mQw~KBD2K?H7>A+;UbPtvv|fG+1&0Nf6F{p6WNrPCo8W z>43vcc04G1jW(!O^15@2ij1)^jwpJ5-S02#v*TmL8?%tV5JFB=uN5Lrh?!y`omB^| z(RVt@54%1ehyjP~U6A(YheJMxtu}|v*@qKdhaan$TeA!a zKmKHM)XQ_&WpmiZbht2nu;X(m7JIy7bBI?bWNHt0@CTO^M+-j3`=3vGs*Zt)6FJn$ z82$wRTV`TLK^^KG1=Y(_@eBF{O#<;lrq9K>d5LnmT#k2509I^^DMQtc_a567k{ zEa2CEbY6u^E$>20^1mu=ivxg|_1bb1gg&Q0qOeLSSxQV>UGgO#4X5FcBAWuc}O71t*v8)z`&uuOnhE z^X-0xKK)(4e(lfu+jaf>yH~qEtR|$_t6E2qxeh->$B}UY++OO6di)$CF%r6dK)e7K z7%dTP!qJn~0MMZ=C!$Km%gGB?Q10sTA<5E)+A~J)sQ=%h- zd2=J83WJg&%KcGMS?S5uDe1g5W!RRoy7ubu(!7x7f{*pMw1MQVhWg=(@%UtHW!XUI zY#k~a+gQ|HoRyS1Jzg=}#+tpI)c^%f&(6R9_<8Z2m5|x}0$`LQo(xIKQ-iIM>~chb`w{J_m3qkr&`v_#=oYX}`W#*QmwaH4Cf9E7lK)ArXm z1-8=vgl)eW`=Mqj=%41tx#(GtaOE^O(>H-jmg>ft6_xI!Tcmy4$*}9^ z*v)j}fqr@N;u?YpD$H`ZD}%JAQ-4q51sM6$dts&F0`sl+Gh*d9%?+cqEWQ<{nv|6q zy9R5q2Kn48C@k?OZ~InSGQFfzR?)P-UtZI%H*czW%n@r2V=cg73)49Xo3>D{!B~ zxq4jomi3P*g^>5XH0HFR2~)Ry#My|Ckz$>UqG{#N`B(2=$8~w|E4SqkreYAxQ;kn*ReEH-TIcmr6S0&ofr}0j~0MGBkhJkvSFXmYMo2J=Q zt*rFPuk$>APJ91FL5|x#9-Qxd=<33pP0I6nPc`djA3h!7W4aqW7*tw9{L z&BE8bCa1V=pu^62!jpUy3l*U){yJt&LM+5wKgrfWQWqS+u9A!NChET30XR|)XI#kc zv~^XU28)j7n&`Q8{-}NaA>V=N&`F{99z8!lgxjBd5?0e!%I1fZ%%d(=c;>bRxGD!4 zQjt;Cb)Hpgza-74wIA$h|At^DN;5>MhIaF}okfubV#(ha^dD~9dX7I0*ZsFKIPm1t zM1c7u7_@dXcKeDa^ld}xom)eLd!2x*OU4FG_gn|N@OgY{;@ZL|VPW{>-QaXcIujK~ z2^#pX-Sr>{0K5YzKmml&b;9&IJ3IT+r%$D%q%<`(4Gj(5+}t7~BQr8G3JMCEo16dF zRQS)IKZ)>sgNo&yqLz9UjL{-WT+US4j0@>>v9Vj_{|Ao1CD zsKbd~HZLqtr6^tJkko=9sYpx9<&P(M>+4MZ)qCx4)k+#dCF<7Q$fHJzcMlca{b}^Q z?m8M+8U{pC202K_iTG+oMaG20`&ivb4oHo4e9N9_lb0_^k+IC_5AMhoG=E4<*F(L4BvI;Yb zV18pfiYzN5-tyT%#E*MQ)C$iQhHlZevNCLju$TDTW ztV8>jHqYA2uiAE5oVR>Pm+3oNEp=D&!^T;^PD^Cu%`0Cu`wtZPc{6lgI2@?NdsDd_ z&L8MD5JhRruL@ebe1a?|KRS3}Z-45;axGq;*}6DBcjgoDu>JI+th=W2$rB$})$X6K z@xcq`A}uL5z0S^Nv;5S>OxG-d;r?Z%3{>&5?WXbbjem4|3mz zPz*)VJH>yaG4NB>dTZLinwXXvavsK_7kRA6;QnF1cnv#$Gkh~O<#S`9wWlI-lk;sM ziWq@d9|y4)gUDEs%<4=tUpnWk(|h}kDtk%(=@hO`7nTWm7HCK{8|OT#c< zX%}=AaAZt5-_Wk8=>`=l*Y*9`6jSQlnHJCQA=*to$X_#8@dLPGEF!Eud>9|9&v-QF zhfDX+v!$<$Uu#QSmof6!t}1FZG`^T3XxG1i2M<4K$=`f4^TM{FVV1G|V0h%@NV0a> zGR5l-JudFP9dgHs`kEx~a4e z0U8qJLx<%UX*O{k6UN^VUMK?bP*;gb$`=F$wGVy@4m^M_XPeoVPXR9{>Qg0kMK(8lIl=36Ur> z04y?n#k@>7dA1FrG4=%kzP?Z|Gc)d~DIyXLFo>G)7dQ^m`;7C@4aGqQ=mGSE{aQwr zC#Cn+>V5Ni0A@4@gz^2&{^Nn^?O`~n0WETc1()I^r~6qCgMUJv1aJ%RtBJhO`5DaC z-6my;xpy#jFv~B2q$_uDkzue!H%fCD)^a&YYSKamL@uMoT}%>g)yr*i6Iby#$$rn; zW`8yy?(r>}mg-)|rUIAZ{qaa6YCROIId8+*pi;*E*5A545p=vl>^-S5`o6QmDW%z^n2b2jb++}n68=q&44J^9V%g%d$2`$GZ=JGP)}0z`o@=JOk={0U zxEi%vCUtDASmJKf5>*HB3-%VU32g-Ox{qt>P}Vci;&Wh$OW%-*ea0)GF9K;!Pz?vu z?jQ+8rvaBMb)mu<)}zn47^A`SJh5SR*8HLD)XjwK;tZpGy|xI3M}!6W``-%slRswA z5Gk@-(Wt%a#$1ht<%!a1rMWGr^CTnmZ3QhB@3TFmH-E`Q^OplFr>B10suA_}eg2T! z&LlSZrlw$b85NlYef4%wh4ALgYWVeJ&CpmW+S&5O4OqD{az30*=Jr~wvs?y+Et$~D zM0kI&YMO9UiqI!6BS*a+&x@NC9^RBC8hQ_69fYt9p499~iVK#>$moYPI_(=S}&|T7ry}!ZA@$}wWwJXr;(Sdi@))SU)n_o{9m6g zgfA8X3H<+$jN$t)GKS~>6B$GBVqU0l{BK?iEsqKvpBkO8#((o-v>8?32qZt+5dMkhVUI&<{bL}nv4lS7MGP*R7Rpay}i5}8XJ9DynWhQI=enrbr+R> z>ichG%+z!R%CWw#X^B9__{{uwGUgy@ZozAzp|!nZZ8egJAjZ(q1<}!PQ?tM52Dkr* zjG>lA8x$h(L?9=2{tdJ`H3J2+T?w`bd=o0%(Na?|lrX8F(~~?lUzKv<%dyE^SVRp; zLZQPn;1FsKD8k;?zpi8|znccA+;WVaDD>x3@k1(^Ps(ZV*>MX|&-k+oKh!A<1VN_j z&1UEwLLO!-yW{zrDUfJBE``cu7kUkP``9Oqz7P@{p=1reE&xfQaTo@CeWpv$4Z;wI zL155;O%Qbu(swLCCW2?zW?sVje53zoGJ8OxcK{7KSA&XIhXXUpHvTtZ&k7)R;4Rvx zA5QF(up~iNc{P0B-AjBP^+(K7HLtl;`_f%fc&_(Fnx=>l^)I!6m5laefjO+(T1Y?1 za@8-#^9sgw7Eb23->lb`h@Sz}LSK@*)d;Z7ZSh`iGfMrU+8^^40(Uh)HZ-`RL~6Q8 zClH`+9O_4X$0k$?DtXjO>O?yCM~q#;)Se5A7&rM`8!#w>1fvyWOtdg_ZMUU!lyN$Xf4)C;G3x@Cus(($vx zB)W%MhFUAIgaImsQcxRu_j@-(RC9}ovF?<{F`;aF^pZBY&>4#$W?u-o_{N4Wv9Nt< zqD|Z*W2v|dN^qYVchlg@$c?nVw`g5rA${_seGCV=*sNYTxfr!nX+_iVuq8#yXHM>l zrcDd0s=EGgtGaIbk@Cvk9pphRPL8Cq2FIpvRlgwpo4e{6>bF%x_wxhm))5QK!s$s{hV4O=X4WOSPr(Y%pQt!}1E3|ayM`=ml&ta;(-M)rtkUHHh z=hHvc_d2DReo?jo8Y?pmHqbLQF82vO*I>ONKs-aS`um{j^A6g)a)~^`zGwTKgumr7 zSe2*i3|wp1wsyf_x3H(N!qaE65M|T&^;}$JW%P+kMW2~q##z@md1g&pNWhUum+RYz za!78g0hy%rqic=Fc{`-5XIpOnf_}%(He-ZThqX|zoW}-dW zX5x~Hac6Bhl&9XUo9t;8D0K)>6v=v@+(C_%b1EmdQ?iq;gNN zcgn^%Hba#!kT(&Yts^Icpf}~9YoMR;Ic;A*f=nkhXC8y4al|m5=C`7zb7<0?QrwEkC>WJrltuMJuKx=w#cqaEHd7CV5m5(?&Fvc>BYtwK{u+P zSC{%IRfe7zBrYMn0h*m6x#O(kJA`@vo)i=g=s+PWj~bDS=y|40|E9WWMxBo6`EG>LPY{ zw@n})a%Bn<8bZrUNi5Df0JXt7uh9aN_b2-~YUm2%4Fv;3FAU_k>H4U1CG{1&sg-WW z{*`mO#lPmPBP=9>I?x$eru2|3V{jamq3`R_9#{;l&PjWIKr1Lzvr&M3q&VeXh#RP7 zWao|>tM-wQ(j^YpmOJajdRNs`6D=8Y9T?JkE!A(}(^D1S*FwT4h0LhdsP`nvx~9!0 z4l=Hg^UMeKeD`ShvXsX9cCK@R>dBc4j*fJTyhyw#r(!#n5*~+2&dL`gjJ_4!vUdF5$ zx;MEmPYek8WZ|Z%sI?>FT}~n02Y2p;nvU0J$8;M51y|*sY=0#x;zQbgW_cT+==$nAHJNT6Wroq&v$MfR4_D<+8xpDwFmlmhTn@}i_W=EYpskWB-Hz~B1lk=Eev?m zr$m#L%PjvM+N`9{uRw$JT91w#NZ4lj;DQ{V+CnT=bflM}72Srck3DX*O?-tCL#ELn zPvzzHXHu?uuTU^yt@ekufnQ6#`QZvHbQ`F3$9fRj(pleV{cm(jKZNJ=s}!Qyqu_z= zM+;{1R17zMd~O-0n%gzAG}`1E2po9#`CH;0;;nmkxRjO15`yv@$AybqC!Y!0+kMC* zu48JO?gKeCu3|UtstHZJ6tu$f{@tHQ6P*rt9!5m!=b&@rw@~_%Q(*?Lb~`P%j`y2l z`KF&Xjbc0n*?8=r}i?1 ztrAO}y1=q4y0tv#K(Utto_J=PUyd<-e^0gG2Io2JZfg@@H`k9WOflzTJjki5*_F?X ziEE?#yneonj2jm?*t4xT4R>|<+ee67F1$NB*EJJfH+^pSuq3W|slIr1y*MG;l|u1X z^Tp@$%l*Fetqw8wGEpr{`WW9?&D1Eu}9$dSD%AIKH?+%zU^B+{r3Bo zZ(xmgj@*YlHa98_hY~p}M_*UG927Jnb#MLrymIP!_`YX#p{`l&v-Bp zG8u>xg}yR_TM?!NbabD~0fHM)#~Nt30rXQolyIx$V}^C~5C!z zSnyNx1kTumJEwGik~ zHYHFzIO6(6FX5|%m{U-aP6GUHTC_nzf^HJCT_X8;YHUqfE)eW{H@JN!+}4G@xkfC* zHP%xOV#Ew3q06wPgLYgd-)X(+py-J0rf^D&aQWt6kI4A+EiTK~e3O{o&MrR00GjtT zgy$QCw>8y&!`VO{{^K$_8XbKeO1ZoQUr>KRN zS}Z!nGMXY7lr55RVP=>8~ajP8`@o62Dsdl{5}!@HdaNI}yo>^GUAsFrn~jqf+0M z4Y7pxwR|Quvf>poN(Il;^B#+v2}DG^!&V?NBJ6b$Hu3-)L*>u1D&5mEgkKrC25{+y zs2Dc?rs&U3;xj1k&>UX=EW=oWqyRorAj0K}7q9ofu79@db3>#tH8vm?3;L){$#VKe z(gCpbL=d5y2bvn6`4x+aIHZ~0I1|I0*^9OWO0+0zw}fW2D1|n?eI`%7hw!-$?k;X- zmrB=K$u5a&^y4xMUug~XY{_P5vvNbsHs{Bn8~C_dON*Oa^z3nC=;v+1@_R6{7U3V|*nd2?$E$Lafm0 z9<(9uoL23KfIpWbHk7Ly%2CNH;nJ7Q+!CIn8K#U>Z0E zwqcZwiMWQP2e>o<7iXZ0D<|J&a1iE9_9X$VQ`#i!z>w?MCgqQ+q918jTW?Cn?d`Tx zk|M|$XwAzIVv5B}rhqCQ5y^=vRvZ3!Lm(JNo1Cs0c&Kc3w}V;1qnqK-pMJF`)G{Mx z(n0JHuAhPn!GKwiUa54*s7^jZ)kTU z_ySUxtV{zOr*_-|M{_0`mqF9VDg~|@$xdyqYi?^*XzDS@Y+-nSg$(z6P=Ok~D%dM_ zekSS7h>XN?crz{2vU-resh~(f50FUNaYVGTizZ*DXz?8~OQ;Nf=&<*BH5ka%D_3D* zQehbpN%>$j|KYy7ni#T{v9j6=Vl>X(+~(a# z{n2V*NJq(xcK_y|l&*!e@7D+-RCP0K5{nJ}!iA_6w;PD4&XT;FQ9Legg)Qjl3sK43 zb{YQel`=I7*E1bE8<>j00QV+q30~G6hPsRz;LeD-RRm@FtML=4?Fh;6HUq5y2KpX5 zDneER^PCb$otiM2l8nNhbQoVs&d?L`D!{nMZj^3KR^G;#N$?P|c0^0R{KLwmLM6@X z@(3xiOqnC={M9)sor%#%ID_?U1oK=hs<|noxp-qfU2g0meKO@%d-iIvZY51W_q@Fs z-q!2k$Iu$TE5^lu#~nJmlbWgvWQXhr2V~z~Eh?NXv>zoTz}GU@s9vn9ZA+8?u&?2Rb9ty}T1EzF?vZij*xwx0s007+fQigM=irrc5q zE~u%w_`VRT5Yy!ti#>wz09 zX0oWJ^Pbo0mR%Q2beY7Pq)r=dahrC0t#xG0;_OwvS$Gwg^qp0@jYVyi{+UZE z0??IPitsf&nHf(u9LX2O1Q4AYL!Dw_^A=yzPY0)%cbG+o5{1`4;Z}1WuG$7$d%jA} z$fCh8g&2>St3BD}U0i3wdY%VnLTuo&1e<0fUIvvl9}c`7SPeD!(v902p!s4tKYYVs zV2~l1T*ZfnVJpv%5U$AxKW2P79Gl6s&H0A#%D)`~R9Wz0c*J0@CJPf-VI_}|VqK(- z9rn#$JKkL;?@H>j4!^XNeKP}P=YLLqqH6B?=5W#zKCK6TAr8lz+ZD3?1iNp9EYqvG zYyd{$31&9ttR1Ap20L7)fVyJ8eHHor*vX@;ft2XE-8Ym~X`|J2Q$N?@-rqL6@{Sme z_8aCtxwCZWe_CQU34Io8?_p5tj{-UH!Jc4U z9&aB$HUzmE;{AObpG5v0k@2|wMB3v}+;fxr?XHul=`5%Ce0Zf`X<_FKWaTkz`EgbA zZF_Jh>E90f?X1siAIJswr<;^w$)dh|AtM`lbLiX!&#|FK#-9AhUKRN0bEN{1`9i2k zb^=j9gY5u1edBoF+6Q*d_sQypPcKYjNY}c^T_g!XNBozQRu{8If5jYBPsa>*PKipk z>7%t1;mVmVu}kIaaUdqUBdct)gtSWh*XNxEosHQ(->dYeF3e2iJm_ypZ%DNM;LLws zvFAhp?LTW@|EyFj5Ffh?tgaFK_luB0h{Vm0Y&7W*_G~gpyWWyJ#~gRQ>04!OHy-k> zC%;|6`+FqYc${}7Z=r=Yda<+8H2L3$mJje($$ztJcAUu~qO1d(W7x+|{+QDI&0R4r z>iSFb;jhszJY3y9gWFByVn?*&?;#dHVQum!rrj67#hZc+*hRJ7{zJwrik4i8{_jNn zumXXo_n=K1Ufx&GXnxR+ACMn$9a%_O8CY4_{dMp_l6!P9elNY^kHY-nAJW?oAFIB$ z_Ktek*)jGy?JpS<50A~De}&TCaIDy7CpfaG{>&%FD^h++lrhL&rD^NBYrB=?A9{%V+Namqix}!&U!CdVy zjo0O598R~+D#wL*g=P+ittaQ?zCI|CF^cT!A1i)jxA9Swm?2wS!$?!x7UY2@LG{9X z0=e|N3g&w>-P5`7w*x${sEGWft=HPx`A$BEL}&#)DMSaS^3|J1&^e0!8d#um{@p(~ zSH7u9L`h_ijR91-g?~P@9hbP?PSJt>@H%#HaeAKrZJxF4)U0~0kCcB6;nB`UZ@Aok zLlFAwhF;usHug^&HZ|*# zrVoOXaWJ`8;BVJ`O^;-**$UBm6ShvvKY40OD$t7qQd|V$2`fV9iaFtW_Y{#}F=kh@ z!ZcqT_T_h43-brgTKg=qMY?W=ab)JHOzB}=10|skThAZT;>on$dh}#1P#5aa*al zF~0@Q`y9rIv6sI!PzdUeDbP1}bp|0S)jdEe53??pznxanF-!|2176GijHUi{$0On= zR=VT(tEMZfpwe6~PED4|4wKQy{R$@^lqtf7-RDfjdCuOQPGIuSxxjr52c(MCjJCkT z3okWZ7X^rDgA4*Jy2n>>mtqekWl5J9u(((hvfBZi#QA9qjd{`6={I+HnG;&3~uA_4(_pW#47lXw38xrJw3 zdYBI)*MoxSQDE@jKKov=h|Wc6U#gM~{|fBJdv=!+zdxbulk|*nT3@?(yC;0UpD~Z< zh|&(_9>Kyydv0&xh~?pin*S7IQ~k(Atr+L+j2lOBRRMQ!1D5w^Qrf+TbfNsJ zZhsy*a7JU>yWHjlj@AX%xkQ)gxeqwa<4Pg}a54Ilkqq|t>7wMlu zA!xy%hdolX>btL%@Aomw$UNb>N2YYI{GOZB-OB1*%Q!|O9ePKZ02PaP=*>$?5N(a3 zYVcV+PD)m>=px|ps2|Bd0t<`TAOyG%ga{P`(CZD!iwRZ7o(@KmxQC_T={n_@DDP*3 z-wNFodF*ia4awsD81tN)@dA9SM)9BG?~j@L2XggEgy0W1eBb?NZQ{*7g=Rg9!Dx2sC$bOAe2hgOfpG?oC--L<&QCu&`rD9O z(9Z92F9gac48P+xU*i=yYl|Fu=RB1LJ9KDcqu_K*E4%t8^{$ys65m-?`kX98W*wqV zOV(I@ON^oKUQLsd&<6CrXdsv{0G*~@$3(=3MoROALtb5=`!|<#`D=X*Sd;jQCb>-z zrxP+qLUxZIEx9>}6!)UP3ka|W&<^|RuN)^;2ln;9U87p0>f^lZ?S(WdT+qA#>ZAKTYug z8;`PDvJ0U^ep^MhWwtDu4hi_Tbl+5U$l_Y4fv+r5o)9T|@SaX?8AJ`zygr{BGQNuV zLi+ZTSLAHEYmigB=+dM2rd;ZQX9*2dx8_r6-;V}8BK=Csf`6`6zO6kp51Xa?uFz)^ zz!x(FdYRE`gcIPYi%VgU#?BeNcoL-`O|SaM=l(G==e?M6r?@8g4$oPvLs#XWuZX>YHQb@eu?esz%IPXkpchy8b%x%vsQ=9X@;St~AK z_ug3ny$@)gH=G=geK-dchGd?nhAq>Lr&oET!=;WqFb_UPW23W%U)#|7dACt)PHWdy zWgCm1t5yX)3L7B-3bf_+RTtn*?lQmHSbi;FX)X0TRKjl5+*CDx-TnqByN>{`tkE9IrH}Jl1p8an0SnW521j@8PWOJ%-iKE=q%Uu9jj~ zS-D+}#U9XVE+)*r0&xRuYXj1KavR>~G3LLD(v|e?)?P9K;X?pSjU66SJfVB zp9ZBNjZ+^CWIY6axaHwI#cKI4-@|{ia^0TsrKK{U>+uCn0m?z==wfdQN(_q(CN}UL z`n}UGmMo?A!(%y`2bV9H9euHrHVl{M{0fgA!dY(*YHsvB(Jgr9Mhvi;(P5y@Uyh^i^OV}_^LwN}71@6}d8sxcD6q(@JSiIWq89$~a%LN6>wit2j1+lig`qvAH z)Vz;EflON9v2#Xhd%+!vzI+ZQ;KoPVMAqM3g~FN1R2Od;n$cQ+3DGZ6D3*oa%ms4l zVeTlc7`~SVtW-&kVi`LQwhCb(lp(wt29_}YiK2k$iyKoIRj`@EbpsHI3gssXE>^I! zTW|=*JhrlfjC{2Nu1vOxR1R26|sGJD@Es?Fs-fhyU5!M;d+;( zcsA%n%8g9*ImEb|z=dRqJcMFHCgnT<`B$;>k{H?E9wO0L z$TPyV3oA@+kRY}MBupoWBND|<6P^wwJR?{;VGv2hMDbFH%C`h%x~_1e@06x4Mbu?kR5-Q@s>Le9|DH?^89x5)Ir_d^i&2 z6;mUxQtZQ$9KI#E;9JuYTN6aY(t{C+&R^l`ZcpM&4Kf$Q4D#dVdqYYLVwlCq$8|u8 zIybO^w&^e8*NWgmiLeTxglc243TpXAC*|@)+T?d);(RbEK9~$)w+jn#M-jR65n;b) zeW4>-3xh1RW@RKmmJr!%VOh&VS)UQvn~0pBV%d(dkd3q~0!sW{H~T~}=e$+yj3XO6 zll>(v2PB?@Xv>ChVz*nfesScirD0+FS;q+MpVnODehw2dSBe?tiNj(8Ab&XWu1j;N z+p@N>dO`CYx?Q*Byu5yUG(@&JzyLB~Q;|Mdp%R=Nx{^mTJp$x6367&)ZVW zzZ0H|2YF;m4rhs$Wk0gO%3!dUh$ivfzxZyDLeMW?tT zDYJMz;^)Udo|Hq+UYy*5B3-A~a_Vr4` zkRb462@e1Yw*WG(OEQrJZl?si0WR1t$)GRGMwaH%gQ7hkkxD>Xcv+D}N#;J73;>lc zml9MS9-u5vygdH8G$Oq;Dygg`yeuocBCf2WC%m+_tt@rFq-(gWxU8h8th9-~bSk}c zwyiuASw<9FIe-KuFIUv-RV>h#ZM0Rjw3XE^m+tMCwC$JkV5--LEA#g8mEY3KHp|MR z(#yk#OY+3aEA^`2b`|O3HNfxcO^edhw#xnes#?yy)Jl|0X!QE@U!bH_%FXI7>tp>hj{x476AwDCcU(44}Du0iYaeCq>Q784{OF5bFGAhI5G{v$sn}#$Fb~r zdmkpMztyq!r|q6srQlh|UNJ6v!$ zw8giusd|Jn#*@Olyrp-$1)^=2aM{|a%>9?Y{=*koRFc`*g&$nbwj!cv4CBzWf+Q8> zY0z(vE5E_M&@x-n!MfAF5~2Bk;Wo~onhEM9v!G&|68CnGe0oH5IF_t+#CFNEXmx}~ zZKb`05F0}gd1Hvov?Qzs%!Wq73xAOBd)^yCEc^P|CH-x!WN-PEuwh3=T=X6Z_ zdS7#E>2x4MoguIMdoxbKYPu9^q&<1KVB@@24XVf~DS(O*klKL74@BSEj2@1l==Mag zsN8vHfMe-suk>wxyUdbN56enG2-ZkiPKq8IXE|6Rcx%M4j?D>~i1N~~W9 z4cwx0uX(9&08j4`EAT?R;e*9`!K+9|QtTw>-C+Q8NqQ!N2mLbgk63C2qN8J&Fg@o8 zi04Nlgp9N9ZG&$~!XhIPxmIF>R`9wCgex_*A!~{Lv!UdT!D=sfY)RBdZjD@Y0HX$l zlS;Si>c`59k6Ti2K$7HY4LCPnxj zr`Lcp1V;!WhCAO#vYn(kb1I>ncbjbLmhj}m+e8pP<)QipjXzN7N?-sBCBuwa?Ns5!jifdBIhr(#tQfkvjZ$A z*h#7Ypo$8hCJ>RjR_4+6lyowy`Uox<3#+$=gN&ysx>sW`6omIfBnmBoU5ff6S7i-v z^Il1-k@+!s^X+hy#_Cc|)av8Or#kP^2y}BUstr@O;8j_trPH;e?En3+fEGj&Y zPX|W&(RB>*&n=cq4DmD;_V|ZP1^~l$Y6OHJTwj2R#bif@5Pg{u6M{q|@4h6Vh-8^z z1hZ6VR^}D@+R*yo|QDr$iyKea^p)XGm*=rj0H3Bk2ZGJ9YOvahOH-_g~0IE zd_;?#Q_&c)R88fXKMmTdFe%*h(Z(j94??;IcC_(4k-H%S_j&ie>@CuSFw_=l7vkq_ zq)#U4uh#=Ur-mXIdN$1gq~8Q$;>3Qyttjb zNEPDUc>I%IL@BkFlu))n=}sbAri2tQF@Viv`XvD{!ieb81{tf3z2Ehw&xAhL2M!DJ z^vU8NQYekpnQv*6dwqwH(k;34>`_O;f+%J*HDK)3`?o2l#Pno3jlX%R0^Y4DaB{v%(PN9zu49pqNTTY9$b|c-HpjypB36w~M$w z@VvSKMs`R3&i}#Kdj>TXH+r`_J)wqPq=eovH0cnU6e*!MrHOPg6zNK6p$Hgy5im6A z2#A7+8k%$jR6s=yN*5JDK~VALIp@7)&VBF9{lE-EJ}}HM+5halervG;A~v7GDR8MW zgyd7xX2Bj4;huI&C|!FR;$=O-qGeJw&U1RbL%^8tX~hInrT(|zus@IKmsU13pgD_< z@W_)twe)=^@$P4-VzTt~Erq|_V&q2R`$Pb*2YfNvM?pphPK<0n74yH~N zRebqo_$%4%U5?lI%Re`}>UPUdFxHz60#;X0a+fqIL-3K1O1hl20s~2rZG4%HikJOy ze%A`&)o}OrW_jXzLG^d7CqFDc>~6fLy?$X4&ADAX1TXIxzJIzg_XCRUu6`u`*N0zI zbEnm|PWU-0;E^E%VK}-M_B4M5r*XvTIE}|$!Kdtf+$~Hc)^8ui-Q}8WIQedKZT;I) z_#4i`B%133TZ2ivV#;y|Ko6fr=mDhkjLg#}S3*oUPlre885po+mZs;WnwYR5!!N6c zMo5&EosKQ2oUazcScy=zkekdnel8mQ^QzYt4@L~royCT zl7xCHo??lLi&poqUwZxYgza5>hhhBC8i^1EAyI-kJyXBw-`%`79{i07H2(A1Oe!)z zA+paYl&#{7fwVZ8L-Eb9w)pa@65B54jT}LvECF-&yxXeR4xp&rdR9Trh=biS&3ml3 z^)&wem>Yj_^Z9K(W*D~Hhs6}|&6m9}(H&UYfUmWvJa%Au)q)>YeK&ExW$~`p(0^8} zt*`G{j(WBAJ@{hZ7C>LIp6hA1GZMb}5$4*(ovjn=heB@3O7cKJ&!JT+>5S-S|#3m!N*U-)tjr!mG|HiSkY=r|Y^BL5Y#?FQzX%d6ECKt?IBRqF~^g zuaeV6oWbTw{iIC5iP8FP=4<}_vQ!v2q+1HbrZ;zZ$ z(~~i#$15BnV^!7HeI^QB_wQI$XnujdBxbf!ozI6#G6}__nGa@+8s^AR^5Fwi>>+$ zOiEzZiRQDzwL6prI|*pyFbF4beW%m&*1v(K0%8O_EhEXaI<0|{oNKUI-G4A4*B+AQ zUF2xDwcSE`HgP}r0twq7?OA>H|D3Td&S!n;M%S&_TQtv$D^>s}P`RXgGhu_Z#i5_S zKHAM)J^v_k_SCn>5^b3DczFAbZ%+Y){4N#XSrZ!2ih5+)6q%|W+OoFJ*^%^^Es)Q6b=DyLdPtYWSL=-#*Np+$jn@4cou`Z7ZVcqz z{w#gP8aZ+HBG^E%Chc=aqMC_(!}Qk2iXZgjjMeT)X3&?Pi(XG}bT5bxgZ59#FHZ>g zPj3n-M=cRX71T@N?#BnqF&k~sno#+ms|$*yZQCzepKNWv#J%f3{Ftqtn>irF@a5NP zVfvToMmbnvIE1j4fF&fJZG|1F{ZGawTsb-a%8rB6;yK=|ui=e?M` zdkxv{5K@2M`*0MsOJ&TTCCM6BvwD^q!1U19IYK-^DPY<6@WZ z7nLiiQ$AgMrI(+mRBaSWX>@M!1wB!z{E*Oq`))parTre|mq4S=2A@sZ_PyIL>LhWH zteJ1dKdRW%qzzf!X5*^P+CoPH%$Q~EBBSoqAswYn)ykh2>#0^8{IFD)I-Z}1w6BxB z)L=e8h>dRKUX#9nxwI2pB=^G zXKmQz`_~$ax64G@FPkS5-L6m;9?%Kp%NOL_KUp~6&-ZE%8~NiI!-X=LwJTc*{{MNoY0Gcb48)yf?=)?15H3$IQ(i>E*PUZA@41wH5v zeI<`_l6&*Kuec-iLTiZU4cD3WSNEmRyXTDwh z#1Pfp=olOs5${eLJm`D+MLsI+ocq>H(Y-l|wum10cRO)CkJgHU2~907AHF*EJ-XlK z;~#wC3x7}hUcG$W+gr}ZZ%Q8hHMtT7+F5vhTtY=!-%UQc_2wtHvzFK1y9eM!)$W{0 z0(fFqMQ+qP#B3?}mG(%w&A|#=^sixQ>#*9chN)5m<{_OUfl7yjHuQ^M&opK_bE8{3 zyJQODgCdHu{ii;Oo;n(%v$py1XT7IgHG;50U9H8IYk9AGCr(^ux{AvxrY=2ejj+4L zTPgcsP5D!cnxFN(^2I47?xCp>^-TWh^?vU&x2KRXblCQAYD4e$(Q_glwnbP47`{E4 zrPq?~PdKeOj_?ifbKk2mciOaYKb|k0>8_TV-m;F@GLer8KcwzVxp>zwxKhF893Zf~ z*9xRrg$lwfm#`(!Ad4szh;S_fkwBws4ydinzzQOUhUV|R+8%#r%TN3F>%_Ck-FXD4 zj*a`9>!HhFZm*Bgj#Th%kG&$zFYD76dduu2_e8qMsjC4Pn9JCp2oojA`9=(+{aG@% zBvptrVBo!&D?kMi!Lj!m7>;reMexM5w12-B1y3}Aer7#vfcu}1WqN};-@KqwQzRwp z81Siu-BcZw8L*vMEGGj_h9%NVTyYeNs6&4(Z*gsXo1)V6G(L&;|VAKzOsHyNT?UPDa79-QA0GoJHcg#`9l@%h+_k&9&}eA$Zj`**!1@| zZS>x=N=mAp{VFovWsqYhG*t}y^;-^)PA?-J%eqLPkP?$mKC^yhcM+v7zMWAkNkNit`2d<0|E4^UvMRX}K+s#jV;+N3ezM7t75UZHK>b?SpkspZ?o8bkMmrnI5 zK`I9zUC2;nGXN|FUT%mNrV?Nsq+UcE37xxv1ngsi=@@R?`qiHYaWMZhQ6Q@>{mQXf zoM#41hCntjBQQrJd(*Fo5`uT0kz8l9=fLUQfnkZ*XgYwimhPX3MVOt;UXL?9b)E=) z{!0ysG1Hs{m2C>xp<&YLAZ|jEEj9uM5RarX$~TF;UYUo{1++VfT(gR`F_EMI87Q_u z8WGBo5tB&-J^U4|9hjkqiYNN(DR!UhsynB~X}G?xSN+3~{IbZM)A(TDG@jGAs<3Fk z)NO63DG5K2f$@1E8M2T^{>VfG1&^W7{4$-< zjzV#^&Fpw}NBrk*D|Iz{$2A-2G{;R}E1r=Wg>5^POExNw_G`m6;H!?OkL?xG9DWQt z3cK0bzp}<^)hWf*X>Hq>23eY?SX!?K$o$eZdXSviQT~1@fo4WV5N@s@0T>=h^sU zZt!Cif!UnwAq)NmkJ^?d&z3|o`4bOFCy__UYc6rf#$r^MY~%vpO&9#FrP)d@L{(~e zpbZ(ZxQxFQvG*nu!76+RY+S zVi+e10ZJ3Dtl8SU`XREpudy0h4muj~$dT|=p1+WO)r(lvQdaNERO~gulQj z$&ps(vmRLzo{+N_Uc|Ky%DN`kw_Y=8d)?fET4(_|c|OzfSij`_S0#EA=Zt zTgq>{I7b@^&=K%PIM^T~-r}%ch!*)}Db!UX(gg$h2M1p&k2GGq3P)dolhe-iT)TTG zUKHqjdH}GicOcML7an$)pJ2gGyFpTA4H;gYyHNlFBZHCy{gVYDh~RvSyBNYqKQJrBuc?30U0nnAb^5|wSzM#%zE`)mk@pq2Z`iu# zZeQ~F0O5!`5{kdlmWlkyeQjJM;Ztdj3kKLd159cXPT`^kczVHJ08%~SDZG~z0hHak z;=T<6qpuDwJ}mQ!%-DU{zQ8}o6WLsHCEo%d-bzS`yZ7L&e-=N-%`E?@F@I}Hx-}u+ z<6^h@@B9-+uWFg-O!mzt_Ka{Cvd85S@z9_6uOYLTw|Vg}@sH_arryl)Tj6cx{fFuI z)iWPQ#y`nQ(GAJqjj4E%s74#(**>;e#<^_oDMlSNOGgCkhqX4I9B)zgk$z;w@ zqC$ctQsh7|9p#?i)C3aLrUNSC8Zg+RR${~i#e-l(ZAR+ABp&FHX3yp!VEUC(P4hNy zDe(!MnOka~68GKZznh?<>O_HYL=VJ626UD~w6fI{`Ueen)bx$IO~lHrBSO9Wa(1=V z`6*x-G?;l=L-+hh2}wO#W!P<5Wig`X!aCOXQmkz6h`7c`+>n}Y#WUTMXP)+<*z6My zAAvwzQclqMQQj$O6P4_!gn*D8wd^~>0iS&Q9CNNd7$sGxx}IlYMuW1K$Bh$0#C% zmWQGjPUiO5R#qfF9bG(uIyX+wZBo^R^rNFPsAvXKd>Dt|n)I%8Ys=?sUv2eLodH05SeP2T)FH6Imm6*;6T} zk<&2Ez1hl@`QJL&3ruIq3WncZjJ;#7cJ9I}{uhHxXei;oLO_hV^zj5V?>r;y-3zY^ z&_`4@*DvtCY{3w+fjhoOni(2MX1G!bKP7^oTPc2fF;rhfm=I?qiNIAXR1?jAXBNp< z2p`7$=ayz9!-(Wr~67Pnm{)e~hWW%ML?Y zIH(pH^lP^(oCN^yvIU_*)t!(x9c(d__CL(PpU1P7yWqN6$Y|BhFXDE_EYr`F8OdDK zC;W;b1!BVX#j^uZm<_~G;F@?a2Z-qr_Du+|eR5&;Q1I*g*Ufv@_c|-p&Z#)na@YH- zT{5)&3={sowtFV~L;!8ZvhyZ%`3lC0j`U&&c<26V^dulfbFG|N5YZSQ0K=N5sAcei z(OvLmEEPiO;1$nB{loSk{B`-ES=pzBtMcb!oH;`RtWmFq6GPOy97mo5txv^Pr;S>A^qI!FaMox=lG)@4-Iu5n2&-kk-~-&e%Ms9y`_uS6vr;o+hd0c}pLJZ z8mo1${*EMfEK$}d>+>|f&1i+93dcr+Xmx5GSev7vNgN)&J~kdGxwTlGRqE!*pdP9O zmLr?zORL`%_n)I!wUBb2p9y_E$aiqB(IVdfmQU0mgKwl8{Q0O>&QoKo6)}Vqw@i&@ z1A+cXvT6aMcAID2y0T*~e~SzJRb2qK4I3;Fw=@EmJaiQj+@;`s~S>e6YHGr<9=$kf3y6`}TtbLFMFHXWy0a z==-;kF?(uV$xc~JNE~xSDVzunXk?pWT4PHlf;T}xW;}n;n1l7H>q|(_YaqWIuO-fd zX>XeNgHqA`Ql~PVe9$hyEi&7f%fRS6Km)r~P||P;VDu*pKQ>YfaB3`A)p7ByexB!w zHufcNiGwl=?3EkMxEv;;R|_&ZQB)9rn5)G z0@3ef1a1)mH@s#2I;t~;&iCUHtcFWU1FYe*-nY>at9h>!i)Yx<1uFaT3j$V18cZ;D z)nGIVo66uV##CyMFDQwj!Od%~i<%0Ghs`1Fn`Sy;;-`IKttVpGKMd9Nv85)Xt@jn* z4rA`VDbIEu-D8k79{}$T)t4!Efdwnc_lViqQnE;oMA9Q+`5y1#n9 zQLga5X|r}=pSKN*M=Ow6I+KQo^ z(lXEPSS`Qc^Idt$SeY4p`R}i#J=7VCz2~7^rtJQ&{TMflg`#o$=_WQEzNzgItt-aO zN-*^Uqg3`mBHHyeTbn4C;$Rg|1mSy{AlMj4Jr(kpe3H(uNmW9yo}Q{Eu@ruz;v!8F z^3qw^R(Ij2OgOy(p#C%7m_N57&y+)}v=aip%A}-i{pPhTv^9;rEB>4Q)%RyvJf{YX z#q8E*wE#9w5aQI7uva`<^A`*CyA|(;Ob4v-d%$&mXdAMcZ{O~jRJj^mAh`H^g+VOz z`-Rj`|BmWNfG<~K!rm5mgs9VDfS~Lrf!}XHFdDSjdhJR`VGn%a;Y{q$;33SE`oonK zZ{p}D^Y?n2nSFm)Qv2C#Rhz3jLy)A4@67VNT~=$Z23Q4An#y$1xZG&VXDXs*2HZhE zk`j4o!IExwKTxWp7ksDI{Fl&NNG)Iyb%p!ULqKtFc_X^4h(aKMDhYUs6zh zUgB)!WG$0~6&648kl+jj+b$o%B0+OnlYccH`W-+B{S7!#8o%otT05Zzl{DbHc^gphsvgxbe9*|?pCAmhNxn;Y@btcUrG~F#iFYv)+?aiUv;D~>2!77D8iO>8 z5n+kUfL!>5wlQ(BU*GoSdgvu_ohv6qh&%or5bj}bfCLAuE{;ZhaEmGxyrulsCfDJI<435WH zfo8kYuRuuE{gZRUJexSA?%0Ar)}@d@LEGgwiVr$dVhWdp-e!d6)uABd=X~-=V93f3 zuK#^dXo)&)Xzcj5q8X@PZBvTJxOYXAGKzLI zj^26QX6+G**xzscy64hodsjlhduiMBP1+`r^d!OD1OZ@L1ZbQVu0Q$rKef zIr^#32D6v~K4SHlWq#+h1O{|lllsm1_I**ln^w)5Z12i};nF~q%Hb;`nBZP$V)%xD zcI0Rc$t>ZoXbxvPIqi_y)JGthC5A|YRBT;gGQq3J3s3_QztRz$WEK==7{VYqJaZNU zLL9m&i*?vSME8^UGXdq}7~sAHf%wLOBy3J5&bdT50KCLE{4^%OO(pq4%MQT$3n)Q$ zqU9@S5D9Fwv2FG@4M7psU|ceXhh?6Qw=s+A^<1}ef~Z4_7UUINw|K61I;dBKRU3nY zo+rSy$pE^uhQX_tZ2%FvX07laV(Ubd@&#NuUnKq3yovZMFTuVMg@=nhrN zoq%gAyuNzPkk+P4{52c=6$#xGi4Z5eXBLP~>5H%bysq81^r?MQ08d%Hu5QsYTpZR^ z@@vfU=8;ghCAfO^@h9Oc42>@VP+_g$O0u2C#*MHPe}_WjAA**Q>I}*^qfQNPn~lzO zjUlDlw6nUR&Gew?vXEdAAw9Q(VwVqSGbGgF`>%AZk0R)+l$68cS@sEbj<2f?Vs}sB zkOscDy=g5e1~=i}Po930EX37*I2-d;P(k#h8@{*iSw&}hRoN!hFjPWi0>tE^8u4`F zu;;BGEn2~N?nxic*U233yyfoPN3!8G#RoJAWcEAr5k73^S61oofv7ho>_Wbms%!8m zSfOekFcU!k^m>|pE^9r1EI%Mpt&p%)f z^O#GfpR)67*o#ttTnsb@tNtNUmj0MAiYlQ9B-i8tAQ$=Oi*gcqiJX^YD|aCcqQr{D zYnYF*J5o#y>pXSNad#Gjm(qOipB2ULLFl$+T#elRK9CWr^)0QpfQQ zPs|EDjOZ6k%$=g-S|nk_9k^nXvV{w8?)HlKn~_T>Ib4@)SH|1yHz`Q9zJokeH_Q`~$eD%x% z%_dIBxa9AT*Xf|GflT2EM%>V-40+nzc6p4ni1$4BsdN@qWGhpYTu1orlJBHh_lb3~ZEa9X?bA4MhP!wHTn8%9u_mF63f} zRe_vcLFw;W&bTne1zt)hE2{G=4En{hZ&IKp!xFw!QWRKL@|ru!fJxbmU5?HYba<4| zxXyL@m&{r}qgYq%!jQcp_-dxWYScfCGY#}#*NHgp zITn;=R*b(c35`YR<-s`#5IbD+EDv{$ViiV&;tg!8FuX*GE~zomwvbR9&ucy< zC{36?`MER!WM$3*Q2hCFOx11-2Q{+*jdS9Ak@LaDbF`^~cf1&6LCMxcs$wgjQ1TH`M8&M#nmjeEmIZqlx#U2~^)s8Cxwi&L1q*HD z&i|NrJeSd#Jlt=2blOVFA-s5m_7=&emZ-ZBELh;wpkzV4|{Z^hbNf zIJLv3YT4F1_D~io5Hkz^;HFplqNSs*b*fow9s+GO7wO?>9uqg1pVtVn z!T=0N=smmWn=FR7H(^efx^M`uh%9p+sKdf{y(AW-q8~sw0a-)6El5&sHQt2E6nslss{vQ-`HOboX z5#D~qvZt{8%qbz~V3~pe_Z+X5&_|5*1rVOto(qe}I4n+Lz58;e4w%5CO|!cC+a0cK z^VXp@m1?Qtm7G~1l62qq-A71qK2!fIh2zxwm*jF`$+y+%e?nQKuQ@Le)YUTCx6^a+ zesa@{i)=W~EoKd=2+*++w@cp6yL4Oc1Njh~dxae$yU0Dli#1~eNv}g26EtXn4-csB z^o8i^2!u2QuPfqIKw=Eh#2;C%ZH}6k`2tt&BcdEn`f1w8B}WW@fX3BVF26;ewC}pC zo4EB}(wKjAt5@_%IlJukIqtu=E+9&g<-?phIG!Rg7kh1_i4yW#%j3zn{R}X~y;NUX z(Nmsg>X`QZ1MLgB^;n^%GJK$6hHSCwc%$rmpWM{oHBSHzcAi>F|3(;na&)f|V@+DgPucN(3A>J-mo62GoqNg7) z$+z^!mOhHmrA}FGOgW#AXbGv$LC6&(W#%J59t-EzBOtdp*oG~^8~w5Gl9>7`hUQ`s z;snT`KzN@0RBC#-EYH>1Ut?m+rLIbGK1ZF|$K-ORd68*J@}KJ^faU|yZcTZFEL$?; zSfXfvoE)#EqFFtkOUm`Ms!RZJ5{(7;cx)`1_5&$F zpqCQfqx<&m61@73Z&U3bKLt8oFp$I6@r#CnShs=2OCSvc_uL7 z;v;4vbZ-fH=Yn5{8PmhZ+23SPNX+u5Fi6K^WLpO2u>xJmc%z{a^5hx{-T|=S{PoS3 zb($!t7@)NGJ~QP6V4k(nOj>TeR*)xHB+*Zn>y4J;Dz{>v z-PZe}%dcgY8;zdi>U~|c31wsE`ebRn);3w8E;BB8idVX|kH46OjCK^;wTR|Lt@{Bf zji7VJ`BfC-^@Y$8FMxg@5sqPFrD9G|)@!}05FP1I)Y{h!sHv9}QF$|J{*#^FsAKzP zVAF?$6Vlu;1*oW0mpK3FRBfZsdcdn}&vBSz|Pi>1HfBMAp~QDBpaCLCiJp zLI-Igy5>Fd4{huE$wqGJ898s$e+vurM}Rg|cB`u+xgw>F;C81joRz3r`EI`^uC4ODTqyJ#Mv~74>9_YiAN_qv`rFA@ zX##hi)b9t-D;ylAw2TbBU6{>}Ak8%e%}-JeTPNnlB|EkOV89?19eXL5Q=dP6^4cU!+gd7 zpIy8@)DKAohX%choYh|==FAn1>Rv?{vG5D zjpsgV>_P!^khVSMjbx~N(2i{;r?bMl$JuyTr_C|5+OM2m)9XHLFTS7bC({3)e;|lI zu4T+XHHiO-|7cJkn!vxE=O>?q|NVTfqecAp<7w-!4<`pV|NUe|YH4X`nj~vxWTdB) zG&Hm_a*~rxGRbMlsU=yd#hPWA)wi>1s!0W!l~oPR`L`PL8cUk1Zrv{E?j=>#Ro~6H z`M5^w(Szc`x{`?p=~>gG**z&kO;5-T9Rs!Vsg*A>Z$9rgS$X=lXXD2E-uG|j7oHUt zb<8~1GK`P}e*gJ<@(+M82$*$H1`^R9r(O>cSZ}AJfA4M?b^4g-^Qr{>ah4c=%Ispe zBS#!b!I33F0c@R=I{KF2@V+I=ZctCboGD-+|55{j(co**X3Z`r_$+z*lDXo;95wBmc7=?#f@*i*NrUvD}LF`_x$Z_UyYj z>r2yZ^^*_Yz3b8&*?iF=Y*u4!l+Gk#-EB5!BmA3x|2GIt@w7}7&+IO=0|lZv0ch$= zJLKt=!a}07NQMc!nu$rF{TV(DF2IG^h0~smzjXdY-_2$1x$SQ>7L#hD^*Gj!k-Ex)8~k5)i`kp5fEOa zyKn@wv}gYjiI682fN<9UJ0!yR_W)j|uI1zDQEaPql(UK{u8-T?u;86&fz{l-KR1f&+p4(?X{kqX&`u-gdeT~Gx% zGCj7pwP3w$w_tNI3}+50U*)v%{q~u4$;Q-*`qC`0(T%AxGu`-D>m!$N6o zKYKVrMFK~Kue~Vx4{Q7NzmqYmHwq|tqlDq~dow)m7F9Bh9$lmM|EXxh;^08VOGGV) zFA;v``-?bz76EFDD;Rx3AZ9$tr3{<{ZLuh>Wl4no`93CP{bz4V{o9{?dNSrQPHi-L zfBnbnjo9bE*?uU;L9wvw*-pM}m$|7ntg(ALJ>Q;qZ@29D{Q0qX<=@|5hYU&agFd;s z*A8D-UAKM!ER0)1WYI|sp(Rht9)C+hr+Psk%1=>lyUDy$6!^cDQ6{vi|e|5jI{)Blr%xNxkT2Of?N%epD0Z9S^t?im|VY;K4XUiRj^m)`n3_Iq}K<)^>l4bRT>&7~E8 z7EYi@n+TVG&xtvisuenU*D17cgd2HCNO+Rj(L5 zKB++GZp&)LSQ`S)S|03`j#=JOE{Ro!af&b-^Mdcn`>Xg^Df{cLdK{LHPlv|QVcS0l zwt1X&0GJB9inC_9n{H*e5Ps`7)=y)@{CV6P4qbB{QRsy0407jg`M=5c$Zs*vllgy8 zkY8$8ewkYfYAB_HzKAGYE}PAA`%&{__!0w8IZ2_=9>KOtk*?J^S7jARMtn}Q zLy7sz@O4_rLct|tQqy!(+|L#-=3rd2g>~685T%xB#oShw4%_~0lU-{xJ=LeLncQ*b zb%^Zw!yq!HdG>DBxc@$Ma?vqgjhTgOYkFy1^Go0h);;-F-=ps@$K4k4G^95)*tG4- z=er6yAGZdWo_ljv=uGD;-&XBK{x|b|2lqRyF8c9hxfxj4wcX5V3yq$9D_ixT9nDp1 zObWK2m2K(SYLX8xnLIx_U3}X;+(zDX%bG3u!NaBL_NXnX#hb~trP@2oxNp3#zm!Mc zg#tUFv6Y8*q;<-@K(2t$#d9C%gzcsDYj-1udL6&N=WIA+?jRyst4>9BH+H-Xia|V7 z8Qs3$56vY+6v?e5>MTC;zweRoS;N!Gu6Gc_(g`~ppOu*dwY@Cb)Ha#=$jumYZ&e@} ze4gMV$Z&Y?A2aknl71K;-On#i|DsP_K>+bT-v9s@Yz+Fp4gM$q0z84RfJpT65dB4Q zK0XybK7I)S0S!SZ$y2II0`wpeAKw`fJ`p}SQGR)48A(Z1c`0cvQC(f#|2FuWp60XA zKK=jG;2#|%XljlzcMzdV{M}6z|A)k%Pu~20EAhu#(k1@B|1XKZb)dU>sGCiQ*SVOB zc4ilX{y!xCn)OO58Ig2}|CwfMn;XIZCGqzTs?o;(4~c(FhS>kp;9r^@UMb$7t|J|b8`!H0_2XijJv(JpwJul8q)@WNBt9%Q`0lgXXjeb$pZF^w(xpe z$4mhS`{E1%+xhj4&8_XvJ6|TDD|NhUuV^2E58o#lk1OnXZ;VyC0bluBuTwP4!bUs( z)5g5AW>zaWX9dg!5%w{_WDX++bq* zReT}cQeXX_Rgt1YjQ*oRh<5$*La+eT5qHjp{QA~kr@_a@?RO2bt~_PvB1{Vr!B-wB z&dWiLqadyddqayz6L!&C~*;xO|l)cvtx6`*Z8z@@5oklF#{881{WSUYLnz!q3km3Rwa_q_*>+gLngVd1bCj#$8YVph5iEEx{ zsW^+X_+0sj)F)RR4v%kcn$?pF>X=(EzuYorcU+4>GBFr9YlXdLEd7goX`6D~ZC=I+ z2`7T!dv5z|n)a@PYYqhttLysrEjt}V<6){JWhH5!zH<60C)Y-3O?Nvfc%Pg}&#+6z zb~IHI*C&E{iautAj4d5+x3D~yv}mh-uGROwOR%MX^I4(Kx%~$nLGhm-WL%$!n5kND z3z#a-wP@_@)ywj4cy4GB(QtP{psh<#or;1+sVX5|cxl7S?v5@|r6GKRaKHtbXza@6 zY#x>-NWa^ExE#57IeIx^x$^K`)Hkc157+mZqiL~-(DW4&WBcJs%wb#aa;AQ+#%cd=Xbd={fXb___%m1<_1JX%h#tf0nz7#w-@IJ+n<~WJ%L?2Pz9Yv zqU+qB9B*d-V~*SY{M;($xLT?zZar_v=IN)MZ=MfN@=pl>CX0PmH~`GDWVYxlg%L0h z32|sNJ3n=&y)?l%mZC|4vu30)8`5ABOEgBptO08=Aw^1uhO{a*Wa-*XlMWGqy7dn7 z#t}#gJ6=e&(m|e=;9Qw;xr#vrRb;pb0qNa(k9j1qv4sp-CW@WF%Ey%NzqVj>XRvN0rL!F zrFmu2w1A&disrNvKS!wsT9PHaY0AeZEJI>h1i9a9nu#}N;6ht)$`dNUcuB7vrWZ@x z;S?jRd}T=!iz5SWBE`&5T4^u`X9B8EYObNcr&EQGki@iONd_p{Uw_XLpsjMq!>A*= zYFRVc$_>B}%1o1!8`febYUtY(pkc=_dk$;KqdOiDsr=@7k(o%X0CH30dOoNcotALq zMl_LWtl^UA);6`;RuTea?LM*FwY3DSbG6bNJ-B$z9O* z$qy&TiyYOL0*FOQw151+sOAbCl9I`^6S(%$ zO^3DqTttA1>3^dS&e$ZKz7-YI&0)B}D@x1-@tQFHK%A5U3==YL{%=*_D+W|l= zn>I>c6-nAeiE+i%yLYi9F`cwii%ovw{nc9$hM4JY7Lrd)klC?@H&okD)-A1%!=t>>W>B3bK zMwzxOjGQNLxOCR5SFU|yaO1nZ-rZOkzit!~^Rn^GezZ~!1N6MitB$WBO|Y9So3D|!23QE}w%#`L#<4lTCV zU&9_hvLao-;zRq8dzqX^2e&sdZ<(kDId3bjq`3F<{W}|x&-Ua?vgaRmfe#0d`TAxr z&f=J(0w9u{0O|4l0RWs~uv|gN5EVW`i)kpMBrzEk5U-8rf=ST0>#JpR$mKaYc^NCP^_8;6$eJ`9~mn0I#L4?X_P!W0^#a~W&!Ip1-IecgX zd`n4Gki!jJWkiGbu6X|b>Y21X?RLVI@BtD$@Z{h-Ycxsf<2%*`b`M1S<8(rY6nwz> z@?BFR%;gHAlxSWQoQ^?^Hz1K{L?q@vurVi5Pl^bSq#`chubrf$FzD+6CSd7C)Y@p` zZ3#e}mb`l6c-?UWCB>V>g#e}xyclDM-s*7XO(L}?RF^l(fcJ`?H2h*m>O~?E!gV)Sm8*2v)Q&6J*u8xMPLTut&Hd1iXr3mQ&?pY8Ao+s%&a zhM{+1t|`D(3PJ-P!_jl)-x>)uLb?s)nXi%A#$%90>@6`~Ojt;~G=zR}c*uM6?X%n; zy@B6cGDJpm)iDsE@pNTkd}L=p`@UZQM%`lx@!Sk>M5Ks-?|+eu z2Pm;!1-Jz0fvX2AzOb?5)@R95X72D$cS;9cD@4-+o|RQhY+a7Z^SNgpkbe|5pUF_g z$HnrXVyUbmv$%4ZFZ`!Q!rT$+|KRAnAF2HRH-4Yt-1jjLA-iK!k-RHg$KIiZq7D%f z9eeB8$3C*lI7GIN$jIoBjEqjQSEnd@HA$VmKHtCK^~*h8&*ybrkBeRHkj~`dZI`t- zUa)3&Z??5?E01tGIBkb7=d)c=36Kx{Ec|VU+H5UapUzJcEG#4fXAEyx=CRt?c(MY1 zH3Z73fWpbuqJIhbJXM9m@$Q!1$NugxSiQsI(xJaVOEdb-H`VSZ@> z@#!?Cqo38=hPA*rv6(xuomMu|>wh)jfn`gWAARt67aODcM6Dy+&aU^!>2ydB>VU)~`y@hb7{ zGyYUCW-_tXQxSGC0JwmrFw78 z^YILCa<13+0W?T~`v-d@S zqN9N6_3{w(^Jxz*T*EK{P-1&}{$c@Nl0)}&{a&Jr&R_wDEzc|0?48fge+oABJ$W`U zaKmoB&^EM*-;`%WjY=U`ISDr>GT`_&{AO9x{HnKgT=Tpg4@`riN@XIvk3-y8?>gT` zpA*gFm6ewVo2S+46uz`rylJYIaX15jVOEg|0OCEUas~t*1gRFW0YblTeM`J^EuK?X z_UQOP`LuNFROJ;)SM3CATkmSKfN5Yrc`FHr@Sq^j?m>PkL9y{(24AvOP_^Xj8qJ5S zBc`p+gDsOTZEu20&XTY5873{5b`-v8O0&BFw+iE6kn)tIRu&QT93XHfd3@Tjn$?4i z3I{znk=U2RW_8}HFH#0Ox>p-&R-*r$$hU7Z66|tbszzUNgNp^B#8+b3o>TM5WiqD| zU4Fxi2i%VvODBak!-gKxz}A1CvovPAPMGr8m^y-gNC8Y53qXzypvB%0aE)$beLKr} zHsATptZRB--AO9woYc@@(7mqOD8~OxcPL-#bXc2VDX7clI`BsH35I@9a6$ZEFAQZ}yJdw1cU%sGT(3 z%D~_qgdrZui3tj^f}c(B+VpVJ5aAy3a8m-ln>r!iqY!g+tF}rN1=3gef%KvcRzpcuoJ!i z0o%wITup8jG%f)13~ouAVdbFaa9LBufo|&wYQ!JT(7d<%d^t07b{*!uTyAeS%lZYA z>V;$JmQLc-;y2uo9+5>tzz)!dyjQa#{TF%vv&!?O~RTT zy2Axs(_1HY^ys%JGEGGH&gOzm`&P`C99hP4sEcai;?ht-p2-9r>086U}CI zzvSLMBDC8!ysGMw~AMXw0n2LN@ zl)72q6`t)lkFFka`nUr7)6V+7W%{T}L@s$G3FvX!mK^?NEGz1Lx`SD}%kV-CMLokOqK9%7FR>qeg1T^z$y!c9 z=B>A8C2lN@2MS&%O+ppX88b}(58PYBN45?L-ya_`?wrxO7c9z+#rki%EIejVlJFB$ z{}1Ad3kjq}_;bb+&yjZq(-~hrNyok2kX|aLQ}cs)xbV~nvk$BhPtV^#orrMI7n|l< zS#si-Fxhe$55J`>{8?uA&BVDuo6b_Z&d~(h8`{h-*R<)&Rv#;XQJW|41w|Jni(zgH zUYND_ehU+yudKwSIz0)gd0n-%rBGnIX-5*9nmM})H(xL=^fLata4If^H9oW^V}3r>=b9-1<;6sCKSK z0u?^`D>;E0riFodvxcX<>3qaQ$7;^j05hd6;doAtA4k7}Uv{$#qB}j0vfNw&({?1Q zcaESo*zN}2$c0uKIs>RIa7H8^_l@Uzm&mr$4fCVVEy}JIUjB3vrI^-J()oREqL%Zo zi$J2b0X4S21=7KTUQ|THB+}09$BljfZ+rV+sSdRs zXX4K?zW?!LE{*MfKw2eS4EvD?An!XTOV}plOvPTwU$DJeY1O;u|8C);!&B3<%NLH7 zon_d0{reJf?=h{;$d3U$mCQU8$pDIxPjW&?Oy7nu<1Fl}LkQ#ZSw?{Pf%cb_U-J7V zKT>ZIe@UXhp;(FJUwmrg+!dN%3xlKxT}x*d zeIhrB09Mu5)-8zi|DmFlJxE?vnMZ!AJ8%@T9++Nrx0RGpKW=DvHSS^6i$j9{Z&u+G z8ceflQ$zLR-&zM}1rx7dJE3WAf44n^?W7*PIw((V&-`$0S3gB;P@5v((&~2t=jWy= zJfj|X?aod!ii8AB@x0}B%Z}L1r)hhX&VN%9_L3t1Sa}|v?oHPH?^Z9s7I3npC!tqt zO_}8V?v#DGT*x2j;`pmLHohAovI;^nA+XmjCmUgG*#Y!oYDgAm|GtBLH=~(6K2Orf3#weHYqLm?kf4^CKZ@*y=U0(HZNK$tXPgSLx zM@QFu6{D3UsVvX8w=aCMXf+o8;DBcne$sz;r}I^^Fk42SQyCVXK6?&PquTIgIA4Pq z`cvQTt3*`MF*WU!7gtvOE3cPl#|!3vzL9G)+nJ)#?Df2a553^f|9q#HronOkhQLod z9mSBR)%Kb%zORn49iJ-8?hWTNsRvnQ!~4in`Mtd!GvjBor5(F(#f$ z;9<5)ZQZ|kzyIE7o)JZ#vDwTm@4(m3xV3@LF3{X)ZT{eQE}VxqeB8y>@v2b2-(_h) zNCNN2Q7C85aeRUhoycXL!;rHsHeNjO^~~}psl9(f+#f||bjc#ab|PVWwNzb_)~7}q z>oI(DzQnAB&8@6jl0mlLb#G^voXRah>B+vvhq{BOa(ftCUse z`KlWf7vRpFY?X4Y%tuk4by`$rC+oH}D@Ls{{}@qeHNWY_v|~X&-Sm+!X$LJ*bryac zb(Q9skW_!BBu7#vK}+uLRTS{3|9Sg_dT9a4?|QX3LosTz6jejr6rT(U%`1Gh6=$XQ zHPyPJ;fr|nhS%xDi%&Z~Cv?%<_jNCRDgSq6@bZ&*x%S)Tv8tN#J<-PPA7T@g%w@V` z&4XtN(vUEwjA-qA|3jGG7GZGB z=rn|5c2;!7!gqDoBMW~_AfL(dqUER3<&g|g-%XHqWj1FvmUcMT+SveWZ zhkehAbyDP=kFpowWyOYYzW<_}5OHL+cn}G^w)&}MjNWe}`C^|VALGeS(R)vbVbXOWivmy^V#Av+f5g_jyY;1Qq4UzNIsyu?m*Q34DPxXU2~$RW4|gofiK@jTb}Ky^g(P-=dutYv;>P2w-Kc;) z7-CK7mEIJQD{k%;J9PqNDCY-uS;b8&q{eqVS4VpfmmlyJwL%o;?2qK+ zRk9Qvdk@VqdSM&#mLc%VMQRnxT7j6zDEQ@K6rYRrKI3VhLNV ztl{}PmSG`&6!^Rw=WmnIyPj#wcdTdAEPbg?GtOp#<(m3FMUb%ofK>MNpE`UuwX z1lT(an1W9^jW}{LRnG6uciN+0U5< zwoZRm@N;3aH~K+fEh3yws`E5JFiS7FwLpQ+5=I7l8 z1n+O_*G&@#ACMTO=NfdCUo)9zg2wJoHk~!|kIF_pqUXAZNdVC%te@C}R$$JXDdW!~&em#iz_d@zyuB`V_Q{WA7n{M6(Uc2k0Kah0>qYx4*DgGN8qKkJ zGjM+}iNB$h+Yx7&Nn`f<{27q-{-Ysun$F7}mQtvnr~vtaS_J$6vy)%P->f%8|3k?VTYj$Q>8 zf2*NEZ==Jk?Uumok&pw2RWnPGw9lz~Jx{+}il83ItU1Irt>4re?Ty(0EVPP2vP@Pqmkf)&ICrHj0gQ66FLB|F36d=HrVP~=e)%3(Hi`zMF2yI4 zfpA8WIu&uF1*J|+rm8>?C1p+y=yL;&A46X&!0!Ui9vCLfXa$jqff?e+lX7XZw($8W z$gBzV*4FrwacUaQ_&NiaoJumZO0I8#GJcrak$~_W6s_Oj5sM*p1+p1SZ&@*JBPH2p zrqfHHTmhhHk2PN|CA?JPNs!zy4N$d1kjpb_KW0Sx2WgMLtwU%J$A`TX3i}vooY~t-607hW^592JyaA3`AuVHsT2Sr#K@3= z!*X1Gs=?mj5N3t+$AO$mX1-XxVfl3Xn7kNgc)!WNXdH&NBB_-JRt%ZC;+gOnc)0j znprv~D+b7UEXY}hEWs;35>U-(#40D~03&J!F9h=!#8I5q8n@_P35>_*LzK%(?jagE zSux0^(hJPYaj0Plr2&wB??ck+P|W3+D+8dxiiNdMNeZoO7a%DknofL_bb=abY>LLK8zGqH`7_j<`SuEsVY4v%{zKL zFHDukSZppQBmsIySb>-&B$A-#IF;~lAMsF-oN@L^0xtFfjDc`0M75q2{nNyWOp)QBSe0}(owgefufm^G3 zDoE;Bh%-y*1wSfF4j-{ZP3-L|N^-UqHK>w+2@z;PKmYA-zzT%PO7;oed-0h2ri!HI z36X)Bv(*qfCKJ4XDrXLWaE;n=5U5>?4I@99YjyUdXx3yln#trQVh#&%pGVP)M}OBP zW3ywVs7j9x&ov96f%jIEb!&VSHV~M5Xb$Sv6G63ecJIK=|Nur99|p1?olo zV>6XgPtABZcKs<*josF&RE<+Q*EG(9na>aSOpj|Cn&pI2zzNloFHjSPQs?gW|FVx2 z{1nmnJdVtbC7;&sFvP$fU1@jpOTt)z!Q_sOJUebmoa+`RK`Y4;@x5KBbKGn zD)XzLa}4BeU-H!Tj#PrNCkAFSg|sOJB}@uPN~ypfmS8%vp^@ba+lxbS?XFzCCjc{2 zefjHp=V}k>XEkI(m+ok=6+=zP3 zXUrVhb3nFUWg}8_q8_6Za8-{U%7A=UnywQ>aYSDSpfUvma+yJ5LyfBXCO4Dy9NVFo zm?wrluRl~lIJ%EXZZCsW33P!g>c;ovV(;(8oqk+Q#)5@e=!lbg#2UyxS+D+bzXos2 z^|{ye$TxEjYh7yi`Q5(KO(YW^=5COAtwHrvW{8BgPqFy*c;cr29epkkRfCatc~7AIT>Ir>usf zfssNS$Am|OI$@}dF#K(ZdG@q>$Am{ii}~P-_QAvO$Df*>e{%x*W)SvFXbQ0wtrc3- z9dY)NHe74a%AC$C{;u_v4Ic-cb`Ze6`R>?XE!<*ZBKRy663Qjy+I;W0XrwllFvAMq|Y z6C^&S+d+@tiS+9b3L74Yr%&ug9t{>PIKWNa=a}?T;DR$IlXs$at@PFC@JB^6! z@M$c&<-c-7M)-6NGiCapt7VSGbe6@;lUhWkr)8PLOxEU1*8EJi=XCwwndhFfbsRI# zMei4A%``ephYQ`$_ne{BPOk;cR;0|X?cLX4OpCWqw>r#b7R-(m%rwoNLihR;=W%nd0ljBm~_Yt7M9=BNd8<9`?WIA*3dXXzX>c>8s8=}t#Y1t~_rkKj*K%O$a&X;psP?jV-Eu_d7vjir^o13lt>vg2 zD+ya)0#a8JZ!D*5H3g3Jr(RekbFRjUDP-PQeaKwN-&!r=Tq_n^$+@shxUm*dN)6aZOmzJd|KH2 zytTgR#azFhz0oGtL0?#(wz~ZzVry4>Yol)SE$8-<*p@1B^HT42-jj87}r6#lTQ zdTeLz2Hd!4SMc8kZhHs!c1yQt+u+#Ge_~&U3V)2GuKyWX{}-|QDs^+(YUA3|?HRA{ z2KT>%ML$)}e`h_vd-C3f=Z9Z`$2xvRe19I1bfW+o@S7^2??qWaXLk3J8IxJZM&7@h zO0d{(WA04k9ozpr#96qF&OR?cwU(dpPpsq^F?N`(%2K87)QNoHK)-m;+4G<|?V$DM z36t7`j_re&Tz?+vjCY-%sIdIgm-gp7?O@>L`}3+mMly81|Id5Nzu%PpjHhuMQU1=p z{X4(?_X8L6<0M) z!035Xb4%-sw)T$Bm$a^SV{`K+V`D3mzLyRE^V$MPHst8!2%q58+~Etx`1omY>GK!n z93~DtZfln-WLrRvincrQPX5~N2-`uNylttS;N@)$E*fFo5kfmGM~)}QnB*JRm%Mhc zTA8ZPD4)nk2`Cha?2hBeyn(r7I;bT5Ci6JUi1&(;#}i3*>&t6%0}bVGi*T2o98#^4 z^z{Dns?QLmkx+O|p>%-@zN#3MEEN>}=ok~D$A!a6;GpcN5ToeCw*JFVQIkkgg1(ax zmx+ei*A+)Sux#cfU>iVXJg`TvxzvI3Ir_PgxkeWo zj1k%SB%ja6u-FC5FCAZ#tu0!Tne|?R-IJbEcCtOd_&OJlb)r1K!nGx}XUqruz@^8e z-|2gILt3PV9-g=rI@reQ}oizo+AGItenCAKYSF>brU2BBT76;}Jt^7}44<$e8$N+=dak-{JZx zLGDS#CviQ&ZhJo$o$fIkz^xc*XGf%^g4dRALz>@%XsNcqcS){Pbtmy`zGKM%8T>1E zT2~hkAWL10h6F8PPa|=kC4VrvTeGD;tH-k?HN9gHNqp4T{E}`5rIq?_@A2YMx1WS#jS&{p%V}3u9%Ma& zNre%0HKR!UkKyvFV_fcrtY7&wO&z=QS=UD)9L-fof&?8S?#xIJiSN{$@D12Ftz@~g zi#l>Q=CBb$Ty(e3F!+ykMX|8&V;rYCeNKlr6{ZwhvtRb&KhRoV&Ykz9=gJ8b_gde| zee28CU9NG)>9%*JogS=}#+{si=y6gZexn9WRj;O;bF_XkIbF+Zqq*H4)gopzD4spD zgs1ZXv%Y;=0i1WM|NflT*l`G)_Dq`(oQeO(p*rpR-ZNm%hij|pW74d{-eS7VR^UvK zuUG4W^Ua08kHOK*bHmAx6k8UH^*WorKN1z>A z3&_`Md2!*xw@#m19V^CvY~M&iKK;AgQfF?}=4ySq1(`Dx3aQ{NdKufX0fg{McbrbW zqYKYiEUf+=oIKUV)^ic}_L?rsadyZ}!aS?|3Fb%vQ(WPq;{lf$#t*7A0OO3kP53H^ zhuO$G9%?Y4?3yaJIChg&%=|D_)ZZiZwJQM|>~thc&VcKxcjDzC3EpNmgOe9_6D?{a z1UjZ(r;xalT%{I|j_>uHuG&rUNG{CuBLib7gHy`75^S8*Km9@k~eX=fRDpX*AowFML5ZUI~V!e zzZwZv4m#PY;xajRO3!3j9{Ndo z9da2kQ=(JkF+^(tIT~D*5PAC=ktuC*0;srbU?Jeda3|jpryt*GbZ1zR(q~R`%3c9H zcyWyNDu?ttC0EqE$fftTNuEuykpNP-+yW76-NuO|Vb~q`}tGcx} zjGfXqjoO&3Zv<+h+P-n8HaZG&T*y-pnq%RR2;x^@L|ZPuI(EE~`s~mCb{PqnmdzxH>DbXOjHpUz(*N(FxCA=e-wUKivj@R)_^W zihq(=F5~maax|7k5w?jJQ6p?EKw;mfFS^3N=>ii<{@lYN+>Me$q#I^=vJPL2^-B7) zM;f1~IJl|)8ygj}jbybVx?D($9<8`at>pN)dZq36I5onu`qaCUL$mF~J1fA?dlPN` z?e`>&^PFnfX2LbLgTpj;(@9e8-BT(D(*;+*%TmD2JJ*G$8ww4OO`rpe`N18j;3Owz;cX8T`MT&;)KxbAQWd&tg z&M31JG*rcfT$#CuV?osI#PW&{X~xa3RYrC@e+rMLQl>F`wAj`z8mFce4uL5q9^C-A z%K$Yg=LHfcPdm&nn*~9lMjt)YY-AvrW4sHyCFfC#sq~h2IU{~{X2RTORHKDQsi?&J z5+7@t5Mt+^#a;x8IsM&Ui8~SEQ)iz9H(txfbHBTC&?6u9&9KwP=q zU&BunIRByl6%2!DO`1QVIes9HBoqJBOy>+q?h@O;#djfSEP5*X3%g#wPGvf9dH#!> zIau(A@fJ#YxV>1r6&Wn~KI8{AP0N`yPZZDW_=;;m96Nq2QmFy^4Oqd7CR0!p1QxDC zWWEySdAxcuJ2A>4#5ov>fymVSkQ|G4^;|VJ2cBSpSyz% z<=umRqR^%`kwPtzuVg&&JNh0wKJi3^D?OkRMCX9 z&RZUEfr#=V_-FyB5Q@TypkM?DFbt7+s~B%g^oc;U4?W;I**TRAgwk0ekbo)#TwXzz z;eFx81mqq{QHgMq0*a0yb5y)B{V^gfk;aqI-b9>_YCPMo`|dbq@NOK$jy>F41Y{Ha zyHtoY5IE%q=_v(AfG&bR5%Cygzz*N#DVCdLP!|t6kWukAz6QAjc6xxX5@--av6(2|2n4ox&vd1|?H> zLJbY0Zo4ASQBc@^gyTe1kP6Yj4RWJ~#S;NFT!hXt1P4gAQt8AF;l!#bsBVh%-X$qo)}g!~cme@RO5Ug(K<^jJJ-jcH5gUh3 zW5g#L{)!_VUTE^tyWH*_0+xL#Ac08$4H%jos4&~**i$=jlnq>(2pCWi+>Df*bEKEe zC~k6$CO%1PJfN;QZ~{v6JqkO&eAtYNR3~H{Nr2QCNOgP~%Rc0OSh$9P>Cq6Nd&bf- zqKpFgQ&DR42cdKnhMa|N1zX(W@{T4Q+KH4a(?t(+;LF)QCg}t;j2jOrgCs#i?;Csf zu<0NNHZbB>d^7} zicjZW9@q~$<-}yF5T@OdToe4|D>5Fd<_No{OBz3FQHyUf;XI@lNTJ!d$%wBL3f_Bg zwVg-)aR{acF`rDdwB?6sDCLs@g!c;TUQd3j$vpx(etNoqucd%1GN886W5GR{F(C0d zuP_@6kk0`Kj6&a4=QHJn-xECl+1&k6DO%Z7^rw|A)xU6GkU}#A-t1|nC>4Fb&9SsE z^LLuU@w>=UmcqamPU4Dr9`dmKMxVl;1eM?~O}NG~pke|?IR)K-1Eer~T$qx29KeAG zl87!RLZB*g$uoNK573$O#p8xdr1sk5JH5!*D5NN&SWBLb8|NCR=9TCgqf1P`U++6w zc|?a^noW(j5@OrVj<<3}rnr?AQOhowChHQtMsW!JK*-j#sJ7Y2UKev5583xJO8|z0 z9nIz$7TBjcKgA0F`Nm#ujrnI~8fsdeW+gfy?yR{+;f@mvmI##4;qj#1UT`d>E5&W9 zA|`D~Bp|(xfO=TT6FR^_InFlxi?uM3!wpDuHzoPe!tx+C?!XkAnSemNKc33MW=aB= z?JL&`+R(u3J;0O!bCTwIR?lmp1GnPls1#>IVu5GHFgtFJAsx6R?y`-JR7ZDt4z31E zs7ZWL@i!0I`W-3VfHcM`TT%Ukt$9SbWwU>?qZx#F+9hoRgv8VdR;+`2;z=7hg{o9V<}!b(*GN2w7HK=cu?N_(@03Xh+%W^wS_TU|pV4gaI7@#G%PE zLlt&25X@8c3BYc`o0vYhDxW01-o|y6&S%LZed!{< z%QKU|7%q*Hmp4B_jwQ%zWWK}jz-Vz7_OTzu{CSfC$q$^JDg$h}brX1LQ$6+(~%`$Bh6 z8kE=nRT9{#;OV`{^F%-g|Jsn@X?U0bYk$3I(_^UGuaumtMvvFR_G#E7eRCdlT}$3N zfg6~CieiAN2Cle9MLWWIz!9*};W({(>T`+WdmQ`(Lu=hvDF%OX_dQqZJ1#68y6x4R0&4iutC~e zAziU=|APP=2^B~IHQi25yODbPE@=~p1z7rrW|o~M@GkA752kv!8DX&pHMvET=zt+H z2EkN`a}!A7?+5KGfGa_Cee8X9wrXV(BvSpv5Q}^;mo{Vs-m_-~TUcC#0`$n>p`7?3 zr!Ugh3#}3ZS;fAy$!-5VdRi+LvOqeR6cgn}O~a!;OlrrIM-Qv7WK*EnAfit5dkF=k zWBD8IJ7|Tk+6O=0kciKorfa<#mz@8mWs1@M#v^&BLyLo~{l~}TE&J)!QIqvs=P`dI zrb;Faew=se9!?pU6UBBymCl;ymr$`KbU#biBysetxt!GQ$Om)R zOh=>H=b}|4TywNLByRz5GZJdv5IZ>{fnO+-xVfShmU<2V{uh$30OY51%BK#)HpMR| ztMX?$?$Mye6mZre_t4_Gn-UvLc@|Hn7vdfcdqOxjXkKgfTFzYSz(_6a%@4jCN>Mhh zqFk&>LO&j`m=cXQC@e{rul66G{OlxI)FW--W3v4iGf*Ry?`+aLRKh4x7#BGO;6D}Z zXtQcNCwCM*D}BE1*wtEE7txIj##MUiG@Y>uBdwOz(k^K|2g9gocEg~KEdAQ%JmS|< z3IJBsW_k{!eUVexbt4~|pk&>%MgJ0X=2FAQDZNXf#%PZFtE8mC zca{=dTUZ2>1mogvX^)-9DXedzG+m-yBG51UNUQ|nEunEahtE0K^gUamvMAlUFcTkM znudQi9tju2)V;?~q|U$$boLYSvr)V*p-xUx&Wa`T7waqLyR^woP=Yp!K5 zL>FW7y$Bcm>aDEC>dwm`Z8g4%OAdgG5#ENMU91cMch${AU@Rf@#U>p1e93H1rzwt} zer*5tVJr!Odv(Je&a!erwwXm&jUd~H(jfNP*uhU(WliOR7Sn)-U`F;}mHqHb zXwX4>PP4%A(1u#`7hz)p`*y=CmGMB0vi+f=+nad{0A6l=4!Ey{%i;~J(z+Y&LEE`W zM}U=E=UvNmI#3v^umhuDUIKA*Z|7VM!j2nuyb?TF`C{)bsD*V9=Rz0&PXO}Qcfnb& zdB4Bk2@gB8tsbiGw2ghm4E8HTSk~717GhU>TQ@CP>JewJ4kmWT1rv7T2i*awBLXO4 zK7GEK++$MADYEeS%ElEg7ue0UjGup5P8E!yzte@=3x9&=ZboBcfiEJFLM8BQ>BY4T zm)l)@x7qkNDvo4>f@7j{sZhrxE1DKjJwG$?HwUp3*>;pzVw-0xms`FE_X&jOpn2Y; z>?aQ*iq(E=Gh!t|p<8l+cgfB-K^`XO2dMU~e>^^1*c)DKl9$)KC9LBePDAOP0)rXA zO<9BFy~yf;_ZpUY-NRtqa&8)B)@c&FBDLks_yYldkI?e4+}~0OqyTIHj!63J)e%h5 zio=In#;iV@o|_+3F6JT-aeasFnvH#~uD=kpsYA1^puC!ioqKRXUS+Gvba$W+`ZU%g zD)vX0yOIxJLVmGUA-)@gb!4nulgHsHk)OK+O~`Ci>lLsOGc`{T{+eC-SVT_MNl`M9<4H45xqQT}gNZ>kw$4EF2DSbo6ZRH)` zu@%Rt-k6{Q@e(z0rw5GqSkIOLL0?)dXHpuzVjuxzexI<(#0B0;(`E+Y0|w}{cp=^; z02RYZbNnd7cjK@OK-^t|#-_oLkWS81LMI%W3FQa8fy3)iZYG8bu!Z#m=4ItmDK3&u zUZ0*wa+nJaTr+=wmXgs$O}SE{IDgL;0dzvIaPHi#D9M{+>5!;D5pGm^K`DwRNHS-o zWt<*6{gKUEs+&df*VO6wc!%+HN46TcwUMaT8D-?Luy%n-Ou~>i$i>=D04o7@Ymh17 zM}N0co=_u>hGoh4$O9+GisP_e?7%Bgl4?DFJ!vkorg2Qn$Fr%Fl}Kywv;WN^nt+_G zXbmPrve#GiuJ%9Z&1NM&3!rj8dGXHh(>Inioa{{C)k}^3$Wu@J^{Z)G zV)_(>hzK0RE38hL*JBH<@m8^C@2^5cTS$q<3tKc?Eao(<5J$s<1Wq%bTNO@y?D@pK z;kY-Ij>GGJw9vqAHf7&ZY?81tv-p9IX)A6)uE9X6{d6mqknZeJ3rnTOupV@ubZ53BJ$XRi}^@8Emn?CGH8 zxOE_8BuC&y>%rGUv+bo2c>r}Rn3$H#aUp;Ar3B#w&(BZM!ZWTig@Ta~`zIav8lA=f+8cU9y&^H!CqnOikY$Q9!LbgEmB~bu5NMy z9<6Pwr?SD|2hy#r9sDxEV$LMTMD>&Z2kHObNa6?C5%r`d?$NEG51zOsTijvD2( zu8C$pVtd|%#>E3SEtNcmHZh~ga2WW$JsK1{pymhioTBpz4N5&*`~kbt;?yOkJx#Kn z{>V|Y2bW(a#w&zH9-o26xA7KaRF+2MtrDRvBBIeSciNq|SzgC}?ABrE@$v=C(q$RNS>OEp~Qx z-_Ya0oSd=4aJNPZ;{kkcsZ+$EBwcp1#?|GgEK&ewpG$##z%t%gMu~GBU}#z>o60@g zO^{nacj9CZMNBmfeo79`W!Mr6U1m+b$-K2F76VV?$f6*x`$iEam)b=yC*J+ASbI;< z@%e-V1=1h^(d;KK&2Z*WT0SC#gEWxm3?$Oj8DPFPGP)y+(ySR&OL!iGQg5^Y+G2_K z2Knt(*?FrIi8Mm+pCXI~OlP=@EqU6<(WV+GoQ zi+gyY$X#jDo@%QOCFlWsi42Civ2mZL-7E!!(Q0%Zz@73+?h}!uzvKw89~VkC=0B-R ztJ1kUN|3lf2Ck?dK0Auc8Ek3nsZbesKAGCEM7vwH=+pZ4ZzDQGN2l@3FC5^>ACq7i zbx!4g5y^3!+e~>=QAwMgr!3+U{gryevR5DBu!g>_|wrP=M%H%H79!5{OA*>wR9zTE`Q}{i;-vh4~e=p6hjyBK4N%= zBIf-$&+K<(wA+89+OFLsmoxQ5-~Xa!GO)xpVHiTxth;;LI8b^;0e#~6sUsX#G}s$a z^ounO!8sHO#*gPJ4q9Fq&^{-bld=nU8pk_*%Qtfcl)%~^L{{_wulRuaDO0+<-uFh4@D+n?Rmm`WKg8+V zYnPwC7(ePOc(wrd*?RkhLx|VK+QqOF_LdgYM}mJeR)-7Q+8sD5F8Vzk4Bz^Bu%CKO zlC31?6K^K=H+<$?D!MZA%H4x`=1#1SNka zTEh5;xWlGhi@AGUJNaYM5~cjw6ywmBo$yeM-~4*`POi4d*=7| z>idG;A5uOtZPIxwdYM1d`?ZuH3X8P46Eh!61oqxSLe$V93X7c*9IFJ+U^(Q&!Xa3A z4h}d0+_R(X zb`+MxUyzjmn;nJsa8n2D0600g9Ek3u#A=m9d9-lM_aPaRkzRX|qHdr$IZ{41>aG9> zK{i@xCH}suqyp(Ka5z(25lsxk9$&*w@&*3_}rF zOqJkW@vJBu+@uQ{bxnAQ3AF>@T{&?n1m5!%EQcGc?3OTHxiD=vqCAQFj53S2>5y{E@LN!j7jZMO5Jx7 zQNEP=h@3jWkQQ$CUeA^FQATfqNpEH0UzK9WN^sr^Aax~lKQOVokCbT~`g{*o#(@|l*?8RqEBPT$Py`x$B!RTH%=azhs0BGcR4u6AUMZF?cx8?b)P{^Mt`61uQXC<0qHdq>0lHK-B6?n zNK*j;14vVl-dpIQhu$^x-W2I2^eR$BKmmiI($rwDar57M_kMO~=XseINoF#cYtH$d z@A-VIX9}J7)pdX7U*|7sMXLHDi^KNw^&8}0{9wy6M-3UKdn__Y zbi`0mRu&;?)8?M?Yz7b(KSU%A)Io_aN3gmTA>myL-e^3j}X1rwg zE2+ENR~L$^3wmDb^$RS?Qy0@%8?RQEgaSng)Q20_N2k{L{Hjlzt@oif)(4^*5*zDM z?Hck^8)C!jGVJQg)Ed%e8wzI|0)90Vl+?G()&=y{Wra7kmNXC=8@dJR>y4Z4q(UnC zYWr_DQVtsWZr4}$F+QXzvZNVJk?yYmiIWIM+Ep7f2-so-93Lr$jC4 zBa9b;vOQ)oJYaMTS`W)QkV}G-xHx@*6ut-yzJrOR$Cas`tc|HCz9xW*wsDK zycr4Q*x{+RG5d9L( zMq+05N$V|c5-1B|`y5hZ>c?f&!FAx?TXUzcB(1OE1;4pFTXHh50Kg}MNw;wCdnDM^ znAYEWhc~jKfABJrrUJ@5>>s;4ur_jc;_|>PPNC7XfyajfgCl)U7}QK*o~OjeK~(Vtu%%&ElM!yOk>w@e+6HhOF(Q04 zA{r^cfh%+?hTKMtN~e#?{^1ulDKh2<2{n(NRv1%GXA`%lpf??`CS&UJW11RB1$#>1 z&rvOt@k?Igi@SN+8si4@*=oYRHrN zGvVqr`IC8EYi7cIe$qQ~2nt+iX@D>)se`)c4v{B#Bj(J69FRsU!@*JK8}hYnYm$#0%1)d=xa7)Q>}R4B~O@=T`8PgSMQ zHn3Qpx2Ie*nrvj5>nJnij~vV12dow5dYk8%;vhF6%NOz?@TFQwxH0HQ^AhE*!=X=jE&`t#;APO`?mVy5u zp8q9y@=FQ}UHFgSsd7O?SwZl>5l?0QQ~Yw`0`g~NPyR2*Q{(?|JoPlrS*S@1TL=sL z3kg_b)Q!c}&BQSdn5)J@w$?%>CL*4;LjRB8sp4WMb?uJC-5{}>&cgpKc&ce>%c)sh z(DD?qzb<6z_#eU3&PBt@RsHg9(da0>OS;!BE?b(In^;&`T3VW!{lAo_o9j)tD=vYz zUETcs100+jD}*H~gw<=5PBSRaX8kk&lk&7n4RvdF@vKz2B2*~MTO}Zrfngw?S4w?~ z3Wc+YB5Appv=p)bay;u&{x8QVH!sES7!|A*t*_5bI14h=Om zKBy|Ir1bqS$FpmYQvQI_;Fk!e6M(q*ghWQLFeNoDoe?a|bj!)j%Y%^qH{w~IUztm; zsV$d}l1gZ3s$(2Bx3+cuU%|qPs>;#Hsp+!uiJ8Z7iVqSL8XqAPmKHXizxc0UVX^C6 z-m7eE6QBm3Q?^GPH8b-DkzBdNi`GJL;sS!Z~Wm zu;)X!@!r?^43-wNfk5CPyXDgH0?i#b!vq8%A!TxOHZBgsdddaGDHc#$R}!bc+li#q zJTVowIe-#QNG(;FKbgVkK9Va=I0Vp}0*?;mTMNYtI_%CRtzF{V>D8gsWtL~siH@5) zuc#6vXe5=oZlgmoE{Mb6M=G6t2@liH^6{j<8Gki$h2zw7S`iHoq)S{rKi-2a0MfPj zwoQKVu|BZwC`i+;I>-8q)p*YFEIIb@MPo|FCGX%aa_8@MS)3(?ZBtkI1H-aaG|W)H zC_q#FsebPoyNF2W9va{^^zT+4>0k5t_mc->3*{jS@VlL}F1d7@`^=PI5(Z-+tUq6o4AYs8(-)2kJx&iI zrc=tj{w}>8fq!i%!i)bJ`9Vxqe%mu`?UJsopT+K2LyEojm2rTpW=!wGUv)WagUmJo z@4x0l+=JN%Nf~;SiF*`{PlCh*K*FL@;6(xlyG)L)=bbY;8}3`DpIPN-XFM}34Sb8F zXv^vM>QPSNJvT~gm~PG{Py#mr1>}7H_h*#3hcJz>}5b0*|x0CaIWZLLRw>UNwa}cH~r@?OnZ)oU3J1sg^hPAVbLt4vXmYPSQCdpq zx``d+^faYpCjGhmuG*-UVe|C%{2YGp+cw_+PO~<^JFyHFpW4b-o+(#T|!D{wd9s!(DgI@b9d(k_J2P*?{xiK*X)?irPC8YVA(WE z(;7#F20a9OOR!b@I$nqWczg)RCIF}%vFWH_Z6*X;!1FG)nQwDx>dN`EMXh&Limji=-)oB6c3F1=}2&gz5OnFnoys?`RG3l9~CFNo`a+&$6f z+L(m?A)&J`l}N{y^5~^ph?$S3^1^rjzuz`r_nE(=(+8~5ery!_(0^_Ow$Z=s9X_D{ z*41An$gz%i&!YZzw*903d6}d7XY25$B49`XUwY%6*LM>Po2D?S(a^ATjI0O(g*2uS z?lW)6T3a^$I{Svpv5I<{@CkK~*e>YQfd^gLLvpwJq9Is8oQ#{ojXx6?ML$E2Y-Ctg zip7&PzD%IFR!jc%whL)nPjT!RjPv1eNqb})n#U4Y{YRDhx|p!^c)lLK=ulpcQKuBY zBQK%k$K^6U&c7zD@Z!>OKnuZHx;C^bpyrt8mo10lr%(gO&@?mGv#$lD*A4Vp9z=L+ z815ZiM?v|t!9{?xnCZ@#6$?2hw>nW0MDK0Y^*@#S(>SkEqjykG;8r#>bOLp>IHDH! zfTu0)O|YY9n$1MhHB<37Up;K~9qgXC`g6fqFNUNFEWA|@AAc?CnS%Vgp3TEjbW-`s z(&d}_)drT8mI9~T^X=`d#LCoNhb@01J?#CIi<&2->V6V~;>633b`$!BW*+zkpC)~= zPm*PRU}y^sIDx?Fd^SEYYG&f#z?@*;5#z(h!^gfTTeyLU^g2&o?k>eJ`p|NB%mHBN-e*G=e z<*SP8Q;!_mg?CSIt7p!m-I*m!+ZtFkS6P{JAXV~vIF zysipWy96N)inN|?FM53B#QS?lOF#eN%gb=#?sM_yd?h(fwL?|}-af6_s$j1;vtle@ zs5AfU8}E%31&_7Dww6DigRh!Cz6)7r%j{#M8W+cIFcN3{?PBnVSRVhcqrBRZ_%3il zox`J2=9<>Po-GM+R+fojzCg}_euWPzYdS)g6Ny@F5cRai4vz}ADEUA#W7(~7KNuMy{V4M7~ za@)mWX^_Z=GwK5f*o+1fmeAc#mfu-Fej@eDKRS-lH+d+IL>JzF;}wT=TF@c?K$mhF zrRnAnIFZiQv5Bk7{T=hCCv)1bKI6zb{JBGS2%Pg!7zeCV)0e~#RUkNBk!UQDmo~x* zMvn)4@m2iooD#S2B`LZXc^~yK*I@m~g2bVI^$W~@F`V`6`7I&~rHdc$%U6UUN+FP6 zwAuA>U``RjrY4m#5)w_$jEa4&Qy`EhrXP3{nLcD4Z+pSk^~>pWbp*MX0Wciq85Ow1 zukv^U<|mxA%TIfm(|Jk@-$i}RwTV)%V*^jmiohP0#?H!I1p5TXUoubyfwJ#b0g5MO zA(oA-xwoJ3-pmZ{@3S8&T(GXysx0gSP29cvW#xHU{h_oTzRnFweOheqaF{7Z3-~^| z`uW~?=aYi|1i1XOmoomov_T|mxOmtmVcW9UzztutN_{?--#8N4pRT4cxJ`OxaAzbg zKmN~~P)*f8#!3O((XY3=+EwO5%$7@D4ESqZ7geeLv2Gff|IX0eeKCdkON|e^k!*;< z#5q3)N*Qf^c#)u!dv`JEU}pa)KzP07I#X2jW`Na`1Y<}4(F>|BPwnBh!^2v^(6qr1 z96wvI#CyReCiI?|2rYe{*LRue{>&daDpX&6MP@EB%8D$Y4&wFgj+EHudUtpHUhF=Trg}+hgy&ksGycdw z($_X-t#0x2M&|v!F7+gXmG{i|L3ZznGEL&1`rh|R^0~Rh;efGZi4rTNYGrjLL1;n| z%d@tGX_Yn)pW2r!iEK&5zuAx}H$FJhGM+!jKMrk0m}+miO=oc`6m8Iu+%{m;CNw zlAU2lpbZ6#Ki|7TDw!CX6hhRy(L4BYa4ct@M@n=DlUE4y34{)$P|{8s%@=AQfd|y$d^3rfVV_bp&LxN#GDjc)uVW_3 zc8+TX2qXp`4mjwc0S3Pr5uZjTGXMB)7GNO#Cxqn*QA@i>1hYrHEt58OT-`bzU$r0-9Hqh z7*&122puv!6wL`ni-S~2IqM0paM7EjNF&K?m_-ta${iO7N>1EYuPtuF7g>A>m#_GjFQo71Q||^ zfM7*?{Z{Rdr`4C=P>?Ysp~|<08qNq2MKVqqCuEmB4o*J;OU8kIACoPH4d} zF3wBaA>3RpPpZ)88i?gHbowfso01l?PbxuYqyQz3vAHjCC2u843@VE3RSFu6;*(~I zhOja54CQbM8;1sRH=LW^z{VfS-Xo^z;&S^iT-~J9@H44<)Zrnb7((3G2%%zzU zEs*!6pP1vHckL3HGbjCD+oD#8$Xb3jjXhk`iCDmbyy+jk^(E{FqWr{8S)1pnzhTUu z-OJMmH~TSQ)Gx%fy%VAa+Gz7sCXUJgo4oQjf={a|o#|px-RSEbg#1P>a!P0w@>S(U zX+br)z&=8`DzQ*Sty=YY)&22GeSzTc9>*?9h2F1fc>nI)B9O|~+i@uI|HI=!NnL(GvM7X=q9 zw>rqOm8&j68?@~fX3=hn0NFrAeY&0MboI6HJ~mDPws#jA(tE0RT&m2b8!%kaX*AHy zVvK_ATfXl1Ub z$fVuJ>=)MoMX5Mo{<=VTvGeM4?$>pQ?`nb{N)R85Fh_MBn!UttvTTUk`bHK|5xAX>2vmn!f*xx#rsX<(Vmq{3*4Q5A^q4>VWDx z0-!-jok5=%c?z;N6o3aI#!qnJOGL!mTP_?5ia}4EZIbwr@&F>w_9nd9;059UrFJjX zAaO-SV&dNZ&OJMhM>_=)Xp9Q+GhlltN|bnX{Y9LbWqT`s>nP{_+czFeQlgdf+ufTw zJ5qT(e|Dym118(mDzjlAUow5Wmd;1CzvRCD55 ze>q=l>%#BB_t-%bX|`7p)ph8U>#s`T@wb||gnYTyBiOo2kKHSW$GEtur#54zRY-YPVGg2 zDg%x3<)y9{vqX-9vO7=Eo1-WDN8hw}CX%C2DNNy*v(N?<*j8NJ3w-wI*7MN;rk%lj ziE){9Bop%>ODv1q>(Nu`y~pyh5}wdgs){nUIk#TrV8aTpP#}yMI2*=R69ZDGKyDrZ z>NLRR2vEaJdYDXV5H5JzPr8>)-qM(Iw4d@DfOu_A_mfywg7DG&RZ5|(?^u<6)8Q+Z{R zcbXvye}J6)$)=;pG=;gFWmECDwOS*7nztK<6a3Q zfb%9Xc`7Rl(`v0Hya%haZ;l9qo_KF^P=SROfZKO-)O2&ndu!Ho3x?TR^xje; z14@+59nG!zsLg|n%`u0~9mUNzrdx0SZtcAXa|16Q|J~$9zg)-wsDHPgz6UsHTXgT2 zk2PO@Z`odr+FDZFWLW^%7B;svw_!t@AIe{D34;U{HYZHMdw*a2XnDykLPgLWUvX*e ze0aRIqX{VazLGF|spPvoJos`^ac4zwbBgt~fYK&3llsZ@)oGD!7R>hK`)!uHTklzS zUMo^}24AlaQWsg@{EgZTR;Kdaef6t++f?i2jwv;M523e-G%y*!vS4Z+kE;YB;Wpld zv?58oUC#b<_Say4Ee93g?C_28$h(3NLzy!;$A0R&=3@cbG0dZ;TK8y_-2C{cKP2&k zK%7~3mmH#V=4{6scx#L7klQ|{V?R>lAc-oUd-<)o>yuZFj3?Z}HaCTv@t{mB$yGOr`Dy?pb9TDm6 z`-B*(qA+IRX*jk<5XGO6JF zP|u6g2mwDkfa)eS;+#pcliC?7|M2P5BD`tho55?@2lDjmcTORkpPVfvBJqpxsS1E) zg(-``D`f%qyjdDT`R3GS7h(?gs~r*=Kq&c=O8DGEo-j$bA^Mm&WyHQ=j=yKN|2)ag zH1`$Zu{f0Wh&QfA_|8#2cU*gO^ z)GHyT?;}hMnb{>M!oy;Vu29!DL~-%21(?I?D&oaQu%Htds_=LF36q*AJ>Uwj=y5^1 zuN3y>$yZnYs^FnnsVTi5dGn|7>rdeJ1gHjyVd2n53*t|NxP!?()9W(VuNz7dDBtz{ zJ(lWwiPXBn*Ku4l|Eag=V0dS*Z0vY^Lh$uvIxhLHLs*$^@+#}mb=DDG)l*&`4V zceei9Zh1xlhmfH)p&BRTm2UIP9El^IDp2~nnbKe>LvqmuI#n8dC;*@wCG?wP2ef$h z?k;U}|Ej2(3@6INQf{RX+M<19C_#=5w9=gF_QhfX+&Zor0k*Gc%4)Fc!H1SblCUc}#Zt$ly`W#_ zg+w492F*&JZ&212&yk2c&}h$OEIva}ZUqQ+LQFKD6zjS5M^6y~;gQk{p`p9H1oTNG z_o*<}Z9j+LqgAJIv16kzIxgO>(}}^aBx#PxA>;3E+I-~7F2aP^AP6CHiBfsU<>EpY zfj3KgY$1RQwiv9Mbb2eGlm%78916(}woK^Ja z30=tTx68n#)5KVzqFY1EZGJb5b3gQmb}-uy{Q4j-)bo84u!I2ZGl-EbCGnl~=i_}T z<`++5s~)CP7U60coN&DLG@bXd#LgJ^Xgyqzd8HwBNa*O=f{p#kgex1?q3LgmhF=d%>Ez@4-(^tt zg1+9pSwx)jV9DANyx`FK029^e)HmMr(n-{%=&P8f`!W>&I7K~+BZG>p$v#-=^Z6>6@__B*Pm#f$BB%v_+A=BpKCth;E zH9g>&9E$?wJs8mVX12`@g-NvkV!WjV1$L{t0{Z0`Y&qhD*j|SqD^=3Gt#Pb(1E-jY z*yIZ=Vkb`Fz|6@wuy;F0t|*iMC?hW0MDNFSLhWBW^Uv8G%}}KHW+gRfIyi7`mN&}ridAD{r4+VgwCQyuQQ5H z3nuwk@xH-}%R=<9Q{rqs*7Dm( z4PcxJ?D6RK4Cl25wWVzx-45yBeBT-}d}x0#%Qdj8*cSFAZTm}O$l%c<1^5-6&2O_I zLtk3jqCTd*{L|Xix4POE^N*PdFo#m0T}m-iH>gng&=H^6_v)BK>O1|O3y;fvB^3S$ z-B;rsOQm9cgyx;tA-HjPJS}nOubom)qIil3eUKCH^;-O*?W{(De{O`(uJC6(TsPQ1zk}tL>>+OM z=7;0_x^!1L1O9oxcDrzef9g)Ha{kA87hGZ3;?0GC^4xhB zt;3>)=+=jsFOED!_9%-P`lHoikN0%Ghb~{y|D2U;^5&%Ub4GNov*CFDmc{E{xPjK0 zbj!^g@hRKY1gWnXkLKUm8iYTs%Y2akVj%u>q20GsU^Aw=Q3?TN?Wi+|n?3$Nfe4+LT*o^O(bX)hS#060xAOyDG!g%)ReLI8)#~ zS<5%Ort zL3KCFp|-=nRv7okn+^UlGKgwh#aiDV`e@b#PKCd?S^tGMsT>-YtiCA^{OC#!`f#N# z;zh5>*EXxIeHD+s6?yZpx|qQOtD6I>f-yluH-%~Rs+$qdp0ox|ON)FAz4>eRFFl+x zwe=+`d2svW$Kd6c(fb82BR;&04%zq~{UNto{ppRHVQtL+K4st6e4fSrqxMGh(VaG} zy^-kelewCo3cmk-EBo@>GiBj}yo(VlpNGEH-`D)U%RadAaVYx98vSd<74_Yv=&x^N zD?i@Pia4lqjOp)=a(NeIQfSo!k9t`bz4kqH^j%Q!_wa@bVYA-@--m>MaF6oh4QW}6 z?t;hM?G74G4!6A!&0QaCT^Pwd9U9k7Xr78F?T*X+9!;H!b1aM-bHo?%iBZ``S#a0i31a`%uc$sw-!%%{4L7f-mz zfrtbdw#0hL_;ssVKgGe$=DeOTN{1Aw*Pbq6h2r#9VqEl1JM4#o9 z{AuEZZ>oIoji#Q|v?8a5A1TY!)DN`OO2f3)t7#oS1iGgYIqPW|=BdS@7e_r(d#BS_ zYSZUDZVpYSKS5+H$z-e;W~_Q-tPwLd7_iuM#@1fOOGM_5OlAt7c@H1(MkRB#IlBcVgDh`mEp6S$~Q2toH~KNR|Xiv8Q{G;3*_z1Buxv3%XBY zx5e)$ z%KfzmH6uem_CPJE(97+lZxg`Ksy#0Wg!atag@I%VFxz$nj101&f_mFQ+`V~RWJ#HJ znE6iu7IJS!(9KY>Va~O^TSZ+WBx_E!h?i0Z-~cOtA*%vHK#?`IYGb47qM9?~^4&$08WdZ-vR_7zHG+ws z2CUkP^iaTM<7y!Qh>@)k=crj}Ko}Uq?ComoP}MIQ?34F1UiKm&i}x%&v&mI36H5LK z8pwD9bc1#uNQH@`i^Bv;cQ*3x6~n~Ib&MFT2nH;N&$gd|ied^ZYylB+UcP5`=5r89 zuAyK9;oJ+mfo=fIfw)=3w+3?ZLH+Mu)ZK#uSyYouUuAbC+#ATUpuzilp+Ua#-e_2m zFWi)zHD{ZLqLe{!)w~3dH3>8)SIvhhpSFX|8pC)g0Kuqb<7XK!xp`;5%!&jO!jxPr z0bMmO=O?wStHQ1lS}Sc^)A{cim$a0e2wJT<__5|AabVOS=!jf`$&RHJ<=A1|+1*a5bRzcu(*CnZ^l-aEn-P<(RS1;dpgQ@qpwkKWQ ztKdd|%c0BYw?6fP-qNNX^;-8H^}EFp?iH7N?1FDSf7?U8S7Af4 zFG|?@5iCtewHF|iuKWSih+OJO%T)ad52rPmT`n{0&pP_b z1^)zdWd`PDs}JSM6OCX9N^{K5!g&7Cm>adnCFN?V)v0*KCbR22OVKiN^xQlmtpTAn zJ31fM5_K7Ny*~fTkFCN^uoUN>0UqT(uAb{9YrOlBS=gzJh=X-@h% zIvw7o(O3O_b__d!xPMgLn$Bq08gsDgs%xIru&ezX66I_YRdSu+upTlV5^^m$IRH+W zR7hHY2fuh1J{1|0w-!?UE_mA@_{aCyi9exV;bG@h2wQ&wLuDd13L|e%%|F$MdE`E? zWfKpTd0gclf26RWyhneW<38_tA?B;l{BxH1M}=WiEQEtUkN>a`Tn%GkGEbKNJaJlk zOg9PpF5AEe{fjP7ln{zV+KWlyz|FAiY*i2@WB7hAf=Ld1f;42ZxWtoE3@6vU8X*A%(V2N(&v_%HVcoFWi z2lwk;>|juQo9_G^F9EnS z*sL(H2E}qe6q<8Y16sW1Ru9%RP@p*!2uke^bZ7}~>4ILX90+QkxVo_xw9$5)Z@ob_ zn;A}{z4YaWWnwRs*`%^B(6e+pYmG@Z|O(V}VC64(Xb*VKM9ceo@Rx7Y< zyB>_)Gl6NVRpU?_r;e(W=d0eEj@v(Xva_ppLA?YPw{=su4R5anx77aAyur!;eBmz} z3$28bXH`q;;Gz2Xk~??zk~8<_zrL2Uko!9c3F$z3 zw!?p~nj0^VtXo)6{e++7?UgeSPmvp=mz)v9dJ;B?fxE zzy|+&TEl!1985h2fqW>zaY~+fkxbZ6#l2r&Vk+-YZ=#qY^63m%7|zM9N@4@#u^;3K za4j^`syUnD$j7jD{umw8RYyZgD~&m3Z)6v^M8gF6Leclx4Dj!0UroX);D)64DT{y} z8a`2la6CrYqn#w3&gr!?apK{=i}F%<#?=?$HQf(12=fC15Jp9HkPwm=p-jUlU0-N0 zUbG3#>_CyzqH+3AAkAm(`Pui|?=giF`0U$Hgjv8Z+yq0Y+-j6#7WQvW!*5A0%9nB> zQV$^Y=+m>=$Di|fckVHXUoq6c9+oU#K?J}rTD-kNX7WLcYonPW@I(d1#TzVer2-}D z1Fa{c6!IWJZO8y~);okugZS^^!+Mm2kL`3Vdo9d9QS^tT*yk(9Co2g0(y&+AiWF6077(00g3@u5oF3 z<>~6Pwe|nb+Wr^f`EGCj;PB}EhmW+Q#I!<)ZeWmKkOAkj>842iATS1$ETAGOhe71( z>J(XlDp{Wf)n!1>RyvkHs4{dGjjiO=%tjkL9Zh1lXlMi_8Z>D2RyHhs*45!Sk+^Pe z&xDIDKd)hkp}v*^>tj5r1D~9ZUZ!RtGRX-%ZH=ocYr~JF3YU7{>qPu* zmld2a;;PF6b~lS744!~916+(s5qMm-R@4XI6czU?gkrG9-Git2g-x}nNJ)yk&GSt4 zSeQZjv!V}T*g&|%tAHt1LUQ)mlTono^%V<6vL%mcSJ(R&JpqT?kNdknzC1ir%tv0m zlnLLI+^eUfy#vk*saW>z#YUDq6k%%CZeyd2e7b$A(nkBx6*X;$3vc*$O-uh^O79G8_3?J~kqDQs#B~*=I7Z!$0+U+(`R%+>@WB_Di1(5*NZw zBW&HH3wSVE6(B<91c)P>Go=8~Q+*T4WI{L@bG~c;Z7H`> zM*^3>zD(i?W4$8jGQL;q94croUn4uQx17unKf}y-xOA@9CFQ^;i`9h%sUnhmX9F9B4n=zZW}I z;juT7fo-IHm1{PM#N$vlkr+hBQf-_hLS(wnEq~&+GB6vD!~3gTyLCDaA^t-SkzKf0 z#tJnF#Gc_1wom)8Y+}`;$7QCsq%UeJ13K3ma@N8^F#K$JLf?`93PB=%omNNpYmlKH zpZq2Z5Cnd)Ip0(-XQ6hf+{Sq|orBb!>Bii?VzO{&`I6l9*mgU9YGeslnS%+7_#C$r zhe4~n7X6oWSO6U_n{DL*01yubzypskCZ%6y>^kQYnoU^5JNN5P)G4&Y9i>k27#0@8 zcsjm6n&4?SsQ%4k+k9^pu)F2gjS)EeoK)VO#-lm<}~|N-$n#)P4`(1#QQ&Q2+`v4O^%L#Sw}d z#>DZ2!k$YKAijn)BpRJO9|!{ar*-iIv~C?Vjg8G3<7mmpilQ&numS)?1Z)LY&m+Xg zEPKskJVj=&6)2S(g);FG~>V8zAQt74nT}4n7_?vkP*RxF^IKjjKm;o)AFf^8*Yx zCk4;^Y?hP9m{iS9@(R)std_{;A#jD_pkYS@2;n=(14ITyFdH-NB#j(fa)8+9TW8}Q z!KA!KZo!IfE!w%uD-L|Jsi~Umi0r!m@h7LlVH!B0*=^|fk&{vcQHR0eDS5X{IY{0H zIQVRmg;8;7am08*=pM`kiUS)G$3&nUsPi;B&W_Z9hGLRK#797W zVY+N2^69J9J8X*D@$Be!CW&1@LRv;oIFgXvjvRFe$IB=Q;FCiptpwO#gE*hz(30~z ztcHA}5Htynp^+;-gZH#A9Ao*KtpKi7ca0bjSD^8@V!8RG&goCGSDRhYxv7x9&3vcM zQ##pwr$;W;jGWR=S8U)F2J6QW65#VzY`%P8cE`8a3p6|;98{+=69zxOM=lR09Q1!E z60|?*9~?cdvj>o2QdATv$W)t0|6Qz$_k(MZLT?J_>%59jpPB8>Gaq26$uoy<(o1Dp_X9NZQU8ZKNM z(1!oWo0MlK|4@2kFNDDOZaQ8xfi1tiJWPtZ&gg)n1G z5^ienK5-_}kg7+fS9@ah0@y z-{>up2cMtU;N$%ws!&g3b4Z{o*o~V66LuegP#%I$cwEz5DnK%Gq4gZ<9;t7K0S`A% z=-u*6IwN_qxQ)K-;doX@-quOXGj!~7wVYe}Q5__tDHyJte}{!Ml?J zOQ<@3z2!=egDYEtxv`hj*mItp6~|T;b4L6kuy{F(szs^HQ^ZbZ-#g1oA;T{*oAG9Q zriDu%!I}FC{e+sn3U3pH7RhStVdm$=q#_TjyN}rhpoH^H7SMs_5!D$c(`EbTC6Hy% z>T>4sb+aN$^3SH1usl_W}#kFGIP5Fb5|rwMg+jGlXO`|Z!-Rp z;wsDgx0tbkBw+M0^U2im@2=<X$1kP zWBQtuSyHpouT$<~OBLzPK?gdOb@8FbN+K=W>Na4|qauAV=h1dQkq@j{A`z=?6~Wp+ z?0LecyP{hv2<{r0j=*}@!oSuJ&&N{(88fT?*Qhv-o@Rg|Pw7yjXlTwJKw|Bej}D$I z&nxc$a)#TpLbx;R=}It|$KYP(HvnR8YgDgL{f^1$`DGj)EU66S`)@v+IWxkTaM5w1 zcchw51X3aPgHI;w{#Cf@Pa|W@Uy6L7`XRP<*iRbp{;|1~Fv_LC3G$tnvM0n>lL*iX zD%j{ON9uVhP(F;;h1r`Y=q75js}dkEG`E#SAj1L;F+XvM1knLbe4YyQ$<|A3hjU|a zSIo`0XZ4Q1y8{#6qcTm{&VAqUklN&u4<+3eGGPNTD2 zUR1Eb=~!++Ag~VQ`~8L_02~!^DVZk_KgWITjuG?_j>MbspySPYkRXDC(IhsU%K2U@ z&=M3^j|Qn=FRGY>j{V~+39(AFgbZn(o-^`;RsbvSb)y{El{mWODksMX7?2DAx(%cR zG4k_q$(@`4gskx3f#lQ~`OE(5M*cu2mrdvo^^%%f9MXtPA`DuoKF>*f_#iS4M>Mib zp=n3e){9ZaP0-F-flExBaasY_-1oC38mKaBSgu--Ks}%zPyq)MIHD*Vr8M3UOgjI0 zUaS~GiNbLR4r$gGY+U3I*nwn#_(&jV!o&0ISJMM_VEW?FJdT8TYI;})zg;z>CmHE` zI%b8B_g5T{sSP@Z&aBhcO~SCUFTqJWkVG7>{v}qXTLRH&r63GIgk*)&04gzENtzX8 z>rj1~_jERbiz+mX6XT;ZouY{3gA2&~a<90(kYHByp2hsTAkh`A~h3=0~A|7X8> zs#vOl7Qt7Cf}jBy&gPx3{E5ZH72n(=zf`?_v5+`MqQL(RS#t>k(pgMm*fgD{w z`3ws<_p%~r1uh#xPcen9m8c;8vp%wUQoTjn6kA(gzw~|9ORB|r{9><@xdQb}rBzR-q-l68{IC6Cg+-qL}M(q&3s zBTyC+h#9gin+z+PE-s_b+H#NgmM#1&TjVca4lC>Y!OBVHESF`yCoZdxPusvlgou5Ox?7f!+h#@*7^-TFE)%#zJcvd%9ofZ|tNs0Vptk_`I?>Vg8Nl3F0 zR!`F1blN!X1PCR;u@ zwv+Xr5o>T&#wr$)x5A6UscfJFy{xzkrP$7^u_~5SOmI}O9#m~&RlkzYk91vFMZ+h* zRhT@lHk(BTQ_VlE*sqchv+)3$3u)2l9q43=AZc@Q@m}W&dAEm)K8+im1T&vQC;}`x zSbel^x?vtY^nUPZ01IJ(nxBU9Ke!67r|N{aSI3iqlN`uroy>P|0={TquIJJc9yh^P zOGNQ?U#qpaULTHP3P$qaF_v3IR6F?P^l zB;LC&I3E&@Lj@6fP~Wf!zVplcuAQ!*TqEp@C-P~16iu6~&Fl25dQqTdWut6a&$Rhh zz%u@PxSI;q`iejhAbANYy~^>A%UsdM8icdB%?(X7w;E;&X}(?Ke9roPxS1$Nyeh#g z1F$^a1?y5<#PhEROjs=8EcF*5GWkg0kp-u@1+DYiqfj$UB2>SUC6m$~iLv^a12?1- z+7JE9MH8V{zgn{kLQjX9@!xJoyx?Gecm*n-AQWL4!o$jc4l4T8g1Z12)NYaL``}>h zlG!Sp2iEc01AZKia&`?-t$_Gvn;j-RSl?^^nGz>*u475M#isPpKp2MkH19As$H=)- z19SU;&$#&?OjjOMEhor2uEBR*oh`N`2P|pHF<$HqW z;Gl<9($`9Jf*cw5%yttUV2OBH0ao=AAfU%H>9Lu zfJwj+U$t{B2!ucX=B>Ok`hU=N-%m~TZ@=hQ8VR9=-XS2;ODHN`K%|QSEL07kGy&-y z488Z>Ly;;NM5Jq^cSE-T22hF>RHUeJ=f0osGy9a;XU~~4=O0)&;tF z=M`3U>BWV#7OwQb6svJb#G--wJhmGqaA7OR+g`_FOI+bBk}eYC{?YW=&o_Cs(H`Ej zUhiM#m4XfUAGF z>$Ccg{sB;}5A9s(KFj`0QrEU#|9mykQT7>rqfnq}7clH3)5Zziw@HivD zsskRtL-r(i#8`RX2V8USGQVmxsYZra9L7trGD#fa2hJj{bS3N<_XeWyF>Hh@4bj?Y zwhc{%j^866IY4);W9K5Kk~QzJ@NjAZ3A1$u4?MXYg$# z#1TA);60z!n!(B=H^%6nmBp0Ai+OIB$=aK5#RJ>Bocughh`tV{!rdmGQ_RYa>DR@n z^vwCp`$YFXBFoXMGF|<{wbPx&7CQfpZRyq@dGt7Y(gshl+0(J3Cl5B3M0SyRteB`Q z-be!6=Qj%-$D*G-tL3GfIV?}&da5t0{8L2TsKd{Qk_C%N1e?j1hAwcQ`HnU?R7mG8Wy$A$tJ99x-QUqDp?WGk2xJ;loEqK4a+LA zs0J%YDGT9G(*Y?fWU)(rfZVr@C!%1>7|JC3hI-8Ue6WOgA@oCRo;I@x-_sSrig%29 zvh7ZCij6rn9qM@LESWL zedp~h3h^;ERKEWEr?=|0>+?A0Wg2{u?p${Yyg}B~R0j7!RUTb1eU09(%M*2eYWs1X z&J=4W3O{4+W0pB{#xsNSJK%qJZ5QTuJ@-(}@BS?_lIF|r*M|MnjdM)J*tY;&Xm73z z-=0R+xaNeOv*8ns@!Z>XXj+(g`ByS{y5a&tWi&)ik**fXn+an6u3ekI7PT#BX(U(8Pt9K zeIvDNG(C^;in<8If2&+y8_FqWf)%SYZ{50f*G(lepz1W5GTqrmgW2{(`O-u^6pcpUlSxb)_6Mdoqb z`4i8($3c~cQD1**VUA-J4%N^niRVwkSq|GOkHVk*%)57(b@MPl;e<-Od{Tb%(C6*1 zvdh2PzaH~-9Od2pU2^$wK=^lu!Y|U_N6_~0Br@#uGe4PybeRl z*a31y@wY91{Vfeo$>GpzJ2nj#zGi=Vg50c$=by{B{K}KFEOmZfabUXGI^BJ- zC8mXRh@o`5WNrzXxrkmzI%13I#>N#*%M{!j&=uUss{(2j#HGew!wwIzoR)#mP7cZuhj2u+Bj zr^q)out|z;jIasBe=|H~zT=x{l;&Lmt*(eddNfpLn0PeSRY+S@0zBveP~nuCqy$VB zp;JcZM#6&lc<|#b2y-l6AI3;%_E0NlKX(k++&_jHSs&Hp3a;_%;ei_QOcx<#{A z;UBuC+2BmGB{ucWKXgko&Z9=d^nXjYH2lA#TT(l!Qak_GbjyS0{}bKP`7hnl6qNLT zr&|*LrCYKJ|3kNw=U3%c*50oJ{-s+a>S^9e^Z$iz0jmF{TMCD&#;22Ho8shx+lxS{ zvI{f+p<6aKVz?u5K2B6|nA!YxK)C0~CDud|p+F z*Rf*mrW~Q#@4u*7cgwPw$TQ=C}}qyj;! zwcn<@*Xxh0U}!;Wok(dstQ@S<&hx514>dv#*@U|p*aPzwi0+e7+55{%Njo-5?&i<% znTlrxzFw`=KaXCM*eGcKJr@MnZ^2PtAn*#NjNW}=Hj(?b95=f~X*%F=YWYB=6wX7v zZj_iQiP1|cbx5pEN*U^0;Bg)^9O3yb2YGY-XPe};s7s4oX=#|JMg|$B9XJu2m`~KY zStB7qOd0FYzOD$s#Ip|s<1Z!T-%9_@Y3*VEK{BcEwIbV=%dM0~M5dDb`%{YFR!MwJ zybV%hfGLeD*3D_`&_(jxlWvaeyhQ^<4j`Fq#1yQU9X;Ny>j4Sg4uW!;{&OJHV#dgPL zbXiM3xw`o;*aD@G8C#bH()>g~Jn7=NQ6aHf-^99vR@1R!!~68(h!Uz-@qO|1NOxbS zxwELj(du!sMBlvx@YgKnn)xrTr?2~cV-k)PxB!XdRhz{lmDTP)8y5kVjlA*D3x0ldWgHOqN?l83i_lq6Ms3$^sfUlK^tSLGkMGO z_XX`9&WhTmY>Qs8x7y)rHYN?1qs4*uFyp?~_pNghY9HTbHOp+}xMes$G&H!AvJJQa zY?gc+7#Zkbc#P&}SaMe1AoE3q$RAUG=N5mwR8aov2O--r>`@mJ6{ts~TX&xxzx(J% zJ(*Kj0?yP&e>EQ5UB3JGPaW~$d5xpxM}Pkg@1!1{ux7qJZoP*vBY+t|B)TWg(Um>~ z$o674Bu7s{sw!>COcC6uOXRf(kEiQ9&~>%G7{er6C4ohd=Iw`F=1BZfJb1PVod@i^ zGG)lf^`6TsK8a7q=F6;)&ZE6!l76wLml-(oeA_$%(5vHu6@->>!;NPH6F{7^{%GCj$fgJ1;73dT;OOHER=A?IPB4F2A_i* z4k4gMuHbme>K0oOB0Br5W84Jv27BqBS7jzyVxw=zQKET|#c&nZr_JnhICec<#h=of zt0pU_{dnMdddZsoiPSfC1O=oKIj8H8gpd0+G^FcqL5>R(tvsoX!*n2KleWH8FpAXu zR<|%WRGO*EQY~Y47qQGz9{`1$)+OEYNhruzXVi5nzIgHZ3*~Dn)n^1{d6}@_i8TQUzYl~L%nitngd(+sZRY$=*)3o2Wr5o=@cV| z>>_{pK`JVG|5~7Y!;J%xu!uWIdePC09H$z$>E;`P`+VJ&3awGAH+9F37cVga55q4# zaO!5W{sVi|c4D=AP44l8AsT?IhXCiHA|Qd6mvl589=LHb*!%>sf)XS@pCB!5-oN}P zN+&(UkfF?GNPCt98}p1kik>FOpN%7tfhD$PTOE^&sGLhTuTEcG`N^tZL&aFzI+-T@ zqqwMcr9NNFT8*dQ5F2c{p_xB%d@?G|YFCy8He|)H6?v9$k3t6HqFvPa7$gqEw|%g+71F zqZppv1em;@yy}ZKC0ts{r=ejw4aKAzN9caAV|5@D)*t7Z*1F_46-^@ZzM7w zYb(rf8hqZ~;AVN^&sFCwk}#5RM{<&3EbLkx24w0T(4Dbr`Kiz*?^cl6Leym7od~Ij zc3yr2Q|Qriv}6h0t5OedZ;@YxTS^L>u-Y8y&5i=?-zgM{!I5UdvTNSRs1Xi zzNc+~x$0`%TJ5VeUzU#A861hirD9pbgpoKqwY&e=VXB_^Su!ZQj$-H z!o){%b-`60Bd>D`6XI5praxq?1mE_GXx~{}>Uqn_d?;=niRcJ&2E!kU+w}V4vt)jA zB79VVV($Kw`j>)%{jo9`^n1B)`f{WdL_hnaHR@fc=LvO zb@*QA-JUI`p)2?5@Sc~K14XuU`}NN_#o+0S)JTUyppc-~g^W*Q?(xIDPe1l9i}T*} z0i-yM1dW1(y9DJV11+g%?mfi^T8hQIqmlWwvCj$j*7EN1HbgUwiPBzIxw#{Fw3o{<5@|zkpzT19)79{ z-VA{}zHN8q5w}3zl}>cD`nSNp7?78%zSE(QyGz*Oxu8V1Q#Ol?ujv5V&~>#VFbrK}3}GDH398-{x>$s7C`#!b;b2Wj zlpIWgf%nj?bB^D95_T`RN#Dx)f;UCP0bi0LuZW1&vu3Is#Pp-msaR+*4jQ=!vGhX> z?$fEE=w2R)@xRJ$JqnZNNE>;1?=Lnj*(!z2hTflzwh@pdy{`Cx6;fv%$uZ7g9ekTE zH!}_+piKbAz@TqSK zKH{#Of$$-=JjX`YwWG)kirM45h(p#W=sK|R^8D7AD5g8#1rvKzm9H3@|CMMJvqw$o zZEzoV6!6A^px>eX(HQP*-M4PyUDuKFp`6mYOvSv~g*NOh-=ZSi>6*KE7r0Aeb{V*A zn9gF8V@b-fXlVB^-H4UvQW7*h0Libsd255(x^_Nc%km4nh|RsM!rf%ZrtI5n zlw2U4O2~CXQ3jK)TP zPCzofj}5#1JJ6>w&7{Kw@07EZx)4U)`iSw`xKJ~(E{2NH+wTsA91VEQL+KGV?3TNT z(v(~Ad}355(K1 z2a6WL!N+pW*BZr+t~!xOywAa|3nBt(fd#n9*&V!WG z250!UZ#VA(#N%-RWSH8|lki0(>dG+@*(KABi>2W#7XZTJy;9Q)(PdShX~fbuB9GjM zLye;EClelxSwH;QRJMa@npb~VMzD}PLE0ZNB<7X_1n;EpLMR+8qP=}pN_5NM@#}6u z4VlMR9Aor%9z8{#{kawOO^tcp^{&E2!U^j`AES2u;CdYo@c9#Dk}o)0kyw^}AqfOd zs5<4rz~ecYGiC9_)sFbLt&n3fzo+`)Q;hFPcIT^3YBb#se?1RIz7+O5fn9&seM2E^ zToa;#ue(&Ax0PD>0T{o~*g8>gm)v3VCaGI1k%5fy&r4{J^oh7w(sLcuqj1vwptq(I z-?sJcVUu0&m%SdM40D%8V6}{M{cK_?wtRZmCef+pNqFB5vDc`nccSdh(y@!cA{gL4_xoKWPysx8rNfT!)M;JMr^w>D9a+wL@#<2TAViSx-$Mub1L@19W(*5zW!~l}WEpVHt zjqri1?~!?VXW2iK4N$Y1WHQqcnB*RXBh8>?rHJh~TUmVNNJ=UWsW|g?63K^9Gj|&i9j51!uMU=T12+2=&i% zYAp)>ndNB7#;lTAyk^gQo@Gpjo{ofTtS(3}E%CH0@xGeBA-AabXU^4Y!GC)0j@II( ze#qUHrQ6fg1<6Zurv1z24h!O!W>J4;W6GDTY3@t>w;hw1r{ zmh4kZr_Ty5x%3aGl?$xy6`y>nOBH8SVi?B7HpGUX!>O@_(c%6vTyO<W+mGRFjzwj$#aw|wI2!sML<5oGdR$#!&@SoMU zOslMv6;N7AAN%^exc3hD1`p*igg7V#K?fdFmW^c+N(+YrHow>9o61C3Zy~0j? zx+cNAzO=f2{CV{t9a#9Y`u@+_vE0V#8vq-Iq8PO)MO{OD0l%7FJAH#fE#H*+vdZ-Z ztXi=mIYZh03>I!(*Jh@0ny;)ntX>jY`J}b}^Uo^djdyRfHvclMX;W8^1p$-R)lW)g z*p)P#FXOUF+wZBCVB|9&^3$Im;g8FKDALpKlW^kBQ*OM|)+d6t95I znJVp%1AxZV;#M?&TQAD7tKwt0UAwNy#{ut_OI00qrXRHUBwg4cYWB!xreP{G^3!wm zPYYC*{tAOGpU<}!0=V=Prf+-!|1o>qERwI4FUNcmg8I?p5QK=cROpX-SZAsIc%I;k&j zL!+e~LWo>T`4D;ZP8!ZZd+#^H_msh}i0QWu;(Opo3YQNEnt?s7h5`jw0rY;qbPzJAVHDaNjQur&1xY-fUG~{%*5?`sbHeRflMkMK&u)hq3a7{o&Pafe$tEAnvBX-`khiaoVSim#7Yf?zA^Nc z0AaH>UGX&i{!3DZQ3+9OdJjR^7>kB@oE-7$4}eO5xvuQ*E?M*Lv{K$=e9qi-@tWt# zG3$CXp;XuJ%Ws#O%UQ&jTXb5zzRYF7`RJml6k2$%UG9C?k8AHTV1V2SqhRWX(wKZX z*24GBFF!hW&0KjD0GanIYdAAW{h&D&a7EQ`V=BH?KlX7~FpFJp6q80!-+Z-Yvx}TY z=a<#K&3p@ojOte1@H2BWpdXrDyngC8?w&I};(WKL{nKH*7IM0F)jw=#^dg{V9XFz|F?)^>02B48VC}~0 zurnrre9+O~KZ6|w+19deL>-p1Tf=Kr-~=4M2$?4#I4=tqa={0@7PI~M$TIb!@O%X}jt;bbVdx zAF9QZ4SGrLxr&jj0~ParvFsf0>?ljb%cJRNe=sUJz*F`NSs>^~n*r!te-)&3``r)> zI6Ol!tUVR=FWAC57X;KExK;*}W*ZEHOUCPEQd{X4#ADdhvG`{7uo>|wCX>edztUq! zjFH5u3-UK^otCgt&ne!nh|b@Q6>LzXk;Hkj#8njNd>#e0%oxeAL( zY{G`AH>}NW4on9=Zo4jYKCF&rh5Zg%tEcQU$5NP)u_J?FIGPO{B_s&4*Q&iAPbK1 zwS3#Bl^+JGPf3aVi(U&!{IuE0(T()4Imhp#^HKQM+aYVSGcy(KW%u0WN9~1clukpi zJiQjcj6=HpqxSRN5`*z?Yu9?Ym4lqW8AM;b)VJF@6_Wj&-b6yf^(~Zuhw^kDgE57r z>DJo`f$wgds{C55D1WSk*L>U19_Z}c!7&jv1LmnHX zce;y^J^glq@(k8AXHw^R`|maS$*}GmfvuxCw5OCw#&LbR?#IE0=n-}5^1)PKGJVO% zD3apMHD5GGjSvb&k-mnNbbVCHY*wNsEAF(N-0QYw-e+TWawV5(u`MegWS3DyXX`o~ zUw2RCT-HF`#KoACigVTUFLcMMn0)u|3(13Lnj&j7sJA*4h?kt$@ zY!F2U?!+5s>dQBOSCs%)-Eq%MKwbe<@pWdp(jsECP2;&b(7E^YSMT%jmH#Ax^2nlI zT%-kEBg%bU7|HrhSeInrLNyPp(az!2T*tT1Edi_3w#MqZ^wfgDhY_EfZ~jHTBq4){ zadMw@7NnO`mjc_`jAj2~USAtADG(Bjr`U-nnGSjcwU^O4;m$L>CZ_~Fu9a(XznuDd zI%rp=dD`QdiFDFb-G9+7cT?Z2(CC)F&nc7ZZ0Fo&kK#9~fLDD&q!XQD4zRnmqd) z#%3Er1l1vFabMqEbz?uI=$dJs^ewshyEspP9BNq(Xm@{NIc@B?8 z#pEC5+>vz_HdPzLwkqX$t;EW1Q-;l+JSxmxxh3eVHg0v}QE|NNmZa73xRmzy!rm1Z z9u}Knl{)3z&k^rAnu{_;<=eAUH8%t~cwa<(`Ia2M=cG+X*K;|fy>he9NzjaS)W=*Y zLyBq3WUx5X#=tK*`qQQ$&UW6aZolExl#|4F9r&pcUuJ8;4Xg8Eqm|zK4=ko{iT&c4 zv8m|D^!@Zs>QvQo$&L1;^xy9Go4j+ExAt37)3+`8)#oR!wU_3n?b=lqy;^*-FW6*r z$tfj#<(+(I_psm>{~9~$>Viga&nu>{A(P>2`*i2}zoy>}ZvVCVW9zX0Px)P^6Mo9K zCx@MHyu4%JD=TEdF4B05Pvpa2Z&5cxx=#uDrhffJ5m*ix)nfh@>#F$8^ zJD}p3z^>x5+Ki+5clHX*E-Ox*zDQ`Xod3^z^JgdYuB`!VjQt^t#(EQRE|1)!QVT1aT@Lac>DJ@_Gb8OcEt}Q$^L`)J&hNM%!i~G zk-M3Rzg{p1|GYn_^_5zi+5PU1{88_9!7VexUoS2z{CpW6xfl60jMD!!tn-Eap6~Xb znb?f)HP=apotZuB$xnavn*Q0Yt3UpDS3dOqq~dqj) zbHQqc_Y6A2ay!E@=OX0EQTp5d`OAT4>w^&1fzQqbpGyqBk{I-rI}$Y(&DC(v&(Qxs zA{sv$9NihFRUcNIhn?pU>8 zJ?v;eLTB`BVQ{Kz991hZR&V*9;8B>BYeeN?usuAaV>?Q_A$YAb=B8v2TN32<{fk~> z?6L8HaFAmw$_T@?*U|2P6ydiCJENwa;`oE%EjLB&?K<%nAaYiB`M=2&1At9T-5>aG?Qg7uZCEVPZK)`IsP{Gv_e5^ z0?c^VN>>VbfB>KJDO3;TVp%?(f(p{LOh6;XFWaXY; zI$pfg0Ht-;o1{ za0OS&3sei06o~T`3L^pD6IxFk2z^r3Yf~VhjyUB}z=Z_lo2tCrQ>m{?@8^TVq!2@D zNb1?-%80WdLyhY7a~pfBzqc1*j9G0P<2`1LIs61$618 z*2ul?&>Gl2u8TKD7>q;hh%j*_AlSAt$-UyHdfqEFWPr2-_(Q`rV*;%X*$YD;ND1bZ zz{3deyC~SyER-$G;dXcF#S{>PT;p2|YA}KEU`rW&nnXS{S^0o`yGteh@ky!}ftr61 z7A%KsPZKW|hQz{nG0nsmPq~;}$ru#ij+#W4YdTcwAm0NqNsDaIor4e1m^n%iew(e4k=8h|qAg?8e5z)ho z!DaA?lYP*wQwh+*AdhT1m%MA86$$jgsqXec&e9`Kt2yA}#MF(aJ|E?r|T?zksiBI2D%cRGuDyUVDh?)Y$bk%F$JAZH~5_nL%T;c?D3 z3G}%mJz`7s=C*BLr7B0<3(au3^8pnHJ0SUDuo?EgiW+U#32~r$$qv_7^eT^+0Tf}} zHWXSk$6uG9Rh*A`#F<)jz*C0rxu2TSJGuC1`%MO|;&8g^Y2`7z?iHOE0iIiuG5=nH zx(~auC-?lMN}}npZ!&O&+zd8@xf?gtc~rIbl(sci#R5-aNYyk`sP04c+)2k1-Y0(a zz-@X(P#UN;C8sqE#%VYp3%`5n`dukcKS|F4zR>}RL?8Cffuo-TauMF08f6n2NKstb zm{e{|3Cs-BZ-dLTrIcyg5ZA(qBkmPc5q!U3RvTM$o_^!daw?3qw=IV7XeAY9S2N;~8B z*F*2y2aI2z_z92ncsc%}F!l;!LN96JRdD#jm2u4wfA#GU;-`sz#sC4HVBMnt5u>PU z_4v8YNu{Kik>w!wu?RKS@MqgG8TElRX_JJ$@%Yhkerx=r-{C{&VvV|DUZqX<7Y6nI zj-#cm;CmoJ8E`iJ{c2pU$Q~7>6$-?SLzxNS!y@AKh(bYJe}wye_AH{_$_qhUF4_l> z+Xc<@gJBdh-~(8=19Vx$F^$~$NhlpIuSWwRse$0s%HtNCGed*vXd1OUEghIyvj+&0 z+k`PAWAP*BKBxaQs(C02MBc)SC7|28 zO;<_4FZ2V)j(k$sLlJ2IBTO=%!YaU>NA_#scq$1zS_V)~m(7zjm4PVPoL( zHYV@fagJi~u&HOJ4Gx%`T(&jKlam4zT5$3I=iX$W%K;n4QPVa^56{yx_5>d@2JMD z?_y5dtE>a!A|MN95RGEtLnD>(X7Tsg+%EFdhL&n1JuOih#R9c|`tBdPg=%x@DXZU} zuNE0@uZwU8;0ae*{ml6}+f21$=mJpN9?Uz@@;hcToBVCGz#ESP(U3=(-c|*oh1>RR z1?=B5WxoUr2#^uHrP;bdi1tn;^M@)SzG4`=Je~%Rz&%M2qpGw1)M+jeiQSmQm!EZZfK1_AJ($~ug~lU zfCvu3(957cIg$jP5xCYW;LJJLCo`9;Tfcn#vT5)IxQJp41gNl!lr0*_;u2+gkIF^+ zzd?0@i3tz&#llbC(P?6!_9&c0py36Y#zLGg!6@0}avoUFQ!U{-I<%@`xB&@L>cbk9 z4Kc!8&c{PPRjJmH1+nCPZ8D%S4N(mMw`#M8E7Fsgq3#5@$RJG4f+vjpwTHr8M5Oy< z{^O#;1_Kv;m=8lpG^EuJQ!bCt&}QSzet)SA4t)WUp20EX2moY2be8Q6J6$;W3>6Hc zO+s=>fDsOwjiJXrhXks^McU}TyJ3)k#5r9hjW3F?m=CBMkbtOd=dTKvF#wi@#?ovW zyf{jKmc~#=w}gX!(AvF#fxB1ZPN;{&)I7TD=eZWIplgVmBJV_Z9WlZjN;e2}H^?_z zqPAUh;j@bL7kxe>o-u$>JhgurBLKd0jwjiWqnNCpcUh0Zfqy|3%1Hwj`b6j?gXPbx za7LF3WG)IGiiau_KV}e)iqEs(d-(O*O$0&Apqj{S(+W6z{fy004aLIyzMj6fwp-&b zYTpLwZPi5@@Wv9(I^1N6WI+V$0)R|JtXu>QVWE%E!G+64>HxAq+Hr_~#FjWhRdo$* z*S5Z)v8nk%OY1{o+oSf!jmVC!?w;Ph{-@7K&j$vFhHK@5#jBb0Lwx)L4OtpxgYygW z3NitC`7~8AgrO#zTLtz0;xeER?8)XBe4akCB51sJw_r&xM&5U6BcM;?oCh6;U>P*u zvSvFmPE`EH4|l6C=HdYI6LFo@+&S({-dvwC4$f9)oR3YJRNTvLE5tZYlo_|zO_!?r ze^?oBmuNPgFfw-YF}>Q6dW;2UUHCd9sKxL}?Y+|nw+7Km-B1AIdKpN7@7c`5Yo80$ z2TF=iayvNA*9Si?P+~a8Ui83@p1x|E4(QVe(Hro+W!Y$=?eqS`eyXc&b2RIeX@yz0 z5{7_bi1UkfE|HL?!e2=Au(~gZ_e1e5G6>YzbnooHe)RP%DV9Ol zysyi*xX5d3iP~-NGP_BxF|9Q3?+LW4s(>TVI;22{#h57J%TN1`zwg9L*!)Yk>}^g~ zUVirU&%bob+X}yLKL9#O3LeU3#BlFFbW0K8USyIhK@wtSZST)Tw=D?JC84-PPT`{C z;q@Foc$bbeN;I5qY~y*NK#ox=7$x9?he(bfCg@}a#!^7+M@Hqb`dses!c1hVYI8nG z(GZwRLXE<4Yy)8348Vw(4_0n~m_UrKpl!egNjCE+?nZE3anBxZh}Dx#=|YLyQzbmg zAg?%u!643NlF=w_4qw50jV_u?)QJ@=0&&AsOYw{K3_~9ih{H8R3|9qHCfmS>B^Ok2q3tlf!3q){w*4s4CGaOsr~1$V){;Ci2RJ5}*`|0uNdP z7^M`;2L#`{zh7)~$gahs~l z1oAVNIxqA;8jDU+T~h{|C_)%5Ehat9gue(Ua_C?rQ3$hCE}JxT3?h#W9F3?ln?gRL zf>-vl2J0Rug`4WH`|(F2el6r$NctM`d;RG77CtB9mjze6FxND70zv~L3g zL&EvS`1`URs{P2$CP@PDxYtLnem1U_KXtiwK?g+@xio6|V-_OW^7U@Ugb}H(MjxpN zwZ@Y~szcccupvlh!$oA05-4RXJhkB*5SO~+QCqFe=gw8fOn|Y+vp)h=+j)XiK{woBg0;m8?`&J1r>2_eSK1#S<=-R;;XG-wx zf!MEeH-Xt~1(Ag+<}n7ln>Z}IiP{IS0C9Y07ZhVjpB|z@j3xy?0Li2u&zS>##w9(0 z!Jr)&O9*z^j%fJ!?`l=_-EgydNmSR1#m|m_4(Yu>0gRPas%vLmUZan$W&x(0MBB@_ zrjjnogpg9LiKLYim~;{+K0U6;j!P53Fi_Gn0vKQo>dOiM2M!7_@Ycz8#GC zO;rYz*dtblvn1xbV<626^rTu}G~5Vb+7p6_J5waebom{KF9MI(L_5N_FuENdD6yU! zH7sE|F=|m{KpRSB7aHe_7l?T^B`e}sKBlR2CL28+UIanTP3iX(3@3n92rSziLrCue zQ|1^^sU;rCbJN*%7K~Q}aVdk{SKMN?iMqgFMmP1!#a6$8X!wpkUKJJ{2Osk*H}iUdL2$(HMx^Roc;|06Zfh&y3UNu;t!8p>e)wm2POAfmGb}$X4ZGm7pfMk zoT{AdXs3lHp2C4~bP{E^scn#4VDSH9DMXS6a!jNzgDA}sPo=pUjGQdvGC1tD%D8TE zRLfdd`8V?qN3)w({BJ?lRh=DFRh@mn{~>nPT$4?DgNgO&JTVq8i1A?at17pT`~ zV+EE7a809S`#4}wP#uN8tqTs*Z%-)N)k)Nxik3zc#m*D;ScX?7nbl$O&`-}@?uf^op-dY37KS1jd?4(&l`Re1_tY`56M6XWY4XbA`$V&_osal$Qu_Li|A{gpe9P)!&)L4p_Od~JM?pV6*G2h`y?>}3Qt4&H#`+ ztF;X4D_wmpROHT;?&#B(C}$$K;)N@5a1>+iL#&xzJpwB{(D7K&JvvF!d&WJ0#X8$5N&Pu|jVc|{OVth} z7k~Llj_U&lX@MoW_E4sM(X7$T?3XWg{J`Sx-4X?>j!|WqrAf^4MigP0%H8u(q)B8K z1;I@pD@1Do0Fq(__EaOgH}6hMxPx`Wigy?9g>3~-# zOkor-x(L7TW4aU!UA9C%drzlEieL&KdtHg#0x`Zjd2g$?!@PXbpf*!lQQ& z@ru^a-uppkL2Ai*qAJRJat)7=Iam_ zP)Z&iYm5NK@Y-u4P|tM^i+cK`wp#=r-TI>xjXb6YZmg!W+`iY~beNQ7FiRxHT1FM= z2&Bp^b9~0%uEl9ZuERSl;b8Px-#R!88v4^mrsFkG#*yP}X)$hCZ7>0k^Uu zrxkO#yZIju$DAw99g9bnS#ac1Ae21@MoeA{9x%5-=Df`5(-oV6s$%p0zRd6S zaRzc>_?`S(QnpKI!JaPf7&>!=V1I`M_r?_5l8TT!CuF5o7;?<;&*v%u3@R?H#}~vT z7l_ca>-}r5FhGhPU?kCFMOnPXImQLSQpkMcg1?HzCEdkkuZk;-*$a2`i;s(IZA$7w zOB#$zYIqsgNRZQN3>Sd29!^kJ3Q`%Bep3(XTdfc)3er%NXvIs!eUpfO#5h=7@-N-e z&9iR7FpuCCNT8b=Mmn`4jdzj72eNeWNO!!OvaZ6qQh9xrb%g;tZV9>ZsQiE}g0P3( z*)5;st)$T{kBB8tc)3~05Vt)MUy^ML`Yc`*u&b%4$MbQk5xR-3DlrcvZPwt1W_Eypp2)Rj7R>)U3>va zd9MukqB)s{{s(pM+0|6szHRO#kc7|$qzD*LdM{EH1Ja}kh>C(3Kzi>TLhlfI6+-X5 zHx1Hzmm*@MqexR}Do*bEzn=BXGc#Xc@+xn$_HVE3eV*5K9KgOCHQj9!5lIH-O?oYQ z>p^w60A71DN(qO%XRb#Qr3mxJlHJ*)M?s)A1uzd?1wa&~<5Gw?qJA1v?0u9j#Q@;j z?=vY`=zx?*>%kVI*PmU#Dt;6u)m^Az7=u!5rcxmxeXs&kvCT4jQ3g0G=!n@C)uSGP zREh{CUeiK%0A)U60Iiz{b-#CVV&ghnHjz|p<4UH0R`Srj_Y-)qOjq)_lS-%mzFBFR zeMezEOI6v$O)6ayQ3F_!@RNu8ESk0o9|M&|yiXLS1cT-AALkls#Me z*U&o15}G1iEhntLsUGDc<+@2ZEdZ_EpG|R@txt{BoAOn(M?Id)R`EfT9Cgz7Zt4p% zHO$g;2zY2cxDpj=d@Zt|3%kWYoA^R^aXN6TSTA}MhH@k4UJ|Ue`jkoUN)hOvM2T!BeNk!rjVD@q^20C8lkL+23X&qcOo#iYy;{9W1ttd&Ij8g zMcZLsI2^tDgT+;DL5Bg7l`??AHP6gW=wGD}Yg6p%>aNN{H89xLKTw?(LnBMB z1~p+pd@0*ltN2sR#n5{{Xk1J;=$&!4Qy(p}r7XjJiwglFla-Me0lboOF|!1Lrftkr z`II&wX6dkl9N3(`U5uqwLA})?9TVRSY|owXfZV&k$ZJ3!xU z-2lqEC=ySLf6}~SGJB`5fz#9M-4b_!dsrGsLdL;Db=&U>2t8)oq%NXwO`p2#R9QAz zT82aIj{ORIjQXTl?f(Tsrm|o}l5YwWaXsr*da{n#=Vwd_jGc z4-V!}<8tNU;ammF2igSpU35Z$J3Ow%*kpdS>)J0|kO%;%rqZ^r`R068Y`W9G#Wkc$ zfq0tXI$j9eLk>oJQdtP5nYZ-{%3a^n?E*Y0&yxkUwGc|7Fk(dUL~z*Mzbi#^L>Y!? z@$Ad)9=Q~6eicIUvH>B5hsqMb;E#eIBaQzYkzApLY_$SuT;h~91EfM=_ZFhxO~k?Z!YIuDL{#BfaZt{Zk61wM$rHn0lmEGAn$ z30~j{rHf+XnjRwxa{cQ4cPZ|7%~Rb&`wtigF}j4x)Mw^i<<77;u%8myMimGfTRqd@ zQhigfJBX<^H}EI6`Z)&yBh+sqG^FI*w|GULdm+ zQ5=1A!DS^DmqsY?orx_rM5xA7wv)|ude2^3YjRPd_tl#fzuWLQRQ|M%a%-5k`C>zc znFnZq>~s2SN$;|7ilV99A0DIpTu^%V5HF7zyl`_my>l1m#jV$3jJ4u&6#ytI-9h2moIPiyj~ORjxMtnnVIij!N&u(rC}>!pzJbEs@d! zE&7VX?%{0wB^`ZWPN+{^qOh4yFc;aO@q25;G7T}!R)$S0u4mhQiOkbNMrLI))r`nv zGGk=ve!aIo5)BNj>lSIdtAy->-F-1akJolOJ2C+*Gp~x^0Lx^U+h^!+ZAz^d zyp^$qJLRU>8{&MP7n9nuLu3SFpXWdDUrbF5uGaVOHIuqXZ9)megdQC~Au7Q1$zWXw%g&pm^ zAn<2AR#^!&tAG1}f7Wq}`)STK^X&B}{7^AnUPOW0Qw~79EcsjJ?9bNPH4^Y7e0QHzLoF{8c+ zKRinfy6~Sm4a>hs%s&gRgUHidBm`a91)YYyJ1-Ks2>5qe@$WSC^EvkLq9*aQx$Zou z?kqk3H2BfwmHVsTu}&9lH~$cyCPV5j+?`Il?w@xio<=_UWBM6V^ePwUENagluE=0Y z1(A8`ylHRY$X2TQMuL-Gl@A7W+`r-_nR8&hW>AFxT8Q7|gUWC;l1jId@)34E+(+ua z6W7DRFod+t;vEK$oz!CY#nz#7uc1uIhtF;P2i@|V?1+rzKj;<&{yk$w=jiClBI3qx z7EL2Nzu25AP5G{mIUj#_-Qc@xFX(6F-#t#;;M~7U!4|N}Gm0TSiT-X{8N6^@K^js+ zi5qBs^Op}yC5mHc488+G0SZdgN1y&ihm;7jf`r&l7B-$~XkOREg>f+#DK<85aL86LEr{4gDZq z!VD5Ndzx8NjJ8ijpN_o`h&Aba6b`54`>@c@u8+v8am%N4X)7@3p!Vi*Mg&>^2 zqgZ(lK_rI7M>l-|6dL6NWjdmfhKO;1F(rl#y1cO4Q3D}AEjU6z;6^J9>`R;(0B1|L znj!i?hRsxEdf?`9x7lU~uVIxN`q})JhG%d4HoGLpDaFj2{TJQBhqyhm$)nlGgi3xS z_0S^eajUmQn!07hmhyAgjyY+=IA*0($hd?V-@mvKWnd{Tdf>XAQZcDNu-Rt`Kn%q! zuOC#)TFUspj~)OWpy{ac0zE~`c2=fx(8+3&A!S|iNt~>TP;^U+Wa`z z(Sr1G*D>LD6mA2-!2d?ObV0%a2H-jn0T9PJNJz-Y$mr?m85kI@U%$@C$jHRR#LUdh z!oqUn#*JIIZr#3pTToC?SXfv@L_}0nR8CG#US9s*y?Y7@3it2dN1;%Pii#>KDypig z1_lO(hK9z*#xGyKeD&%T8jUtJHMO#`vbDAK@$vEX_4W5B#)6ozu&}(myn=#)!otF$ zqN3vB;_~wH`uh6b-ro1`-}m+P_4oG=4h|BDOJieWlarIv)6;Wva|;U#%gf6vD=Vw3 zs{{gJV`F1`dwXYRXLomZe}Dh`_wNS>2Zx7;mzS6S{{18VuK!+rDf@aqC% z5|WZq(z3E}rO=4T=vb+QM7Wv~U0N7jMqIWmsTwOPKP@UIJ^@<>u;!%|*2X86ssT+c z>9twXIo&(Ej6(n*xZG|%9*;p`85EEVjV4+payQJ9jQGK z?w$L@^#BZ@md`bVKo~yf_{k> zgo?dJ`D`4Jp;ClIkZM$;>dn-G?Tg(x(CXH`G`A#`imQ1<^|@%7mAU)UqH{QsG$J+Z z$VO=<9aO6#Sh)7}{tvVe0DOiJQ3J$tM!Zh9nVBVs2ab!CRfdg+`-Y?#D>E}MGqV&2 zGY7K(CySss9~ZZzAP=t`C-K;cii@d9-%uA}){qxrS7T>;%6dzkmCcov#Q-UQjz z|3eoN(|Ua4g}J^$i|r+Za7`eDTO0t?6y9ul~~Zv9YDaE6Ydb z?zR>dZmw=GO-%~eZWXY}mxziIp+Yq(l9f7o{{t1OHnl61*S(R=#umfISj57T$bpPy z_l~-ylk1$B!Il)o9vjb*5$W~+fC^Q*gtHY^vy?XQ*R+e)cHGP!Xo*Wm zs7;R{LWNrYPpD8yadA~^_uF@GTkC5|bBgetwY^RGHQo6CAqo-itEHtS;%)Qi&!7J{ zS_qqzoRXTB{=d*d`Tw`NGmgeRAdpyh1_cE+w=}o5b#-?Ax9)7K8W)5Lg5Rya?Sk!#4-rQLWE!`W)kwyfzh>?sl~b6^M~%Xb@k>W;QeG4$8GZOxYaibd(-73aaIf%iN z8{J2Z$Mj?bpX4y%4Zi?)t)i}}#2~?sL&*83Puss868h{qU$Dw~mOP%m38I^KgLAYKR! za-sil)qcx|;qIN!QBTM)aj8SPWENbKmW0~@p-<2+84&jdHj->@r1JggHD+!bztZl# z0W~lHt&%FfbWY0#n=uY#KcX`GU_t)JkUReR{KH%Mk#MP-KH&#ZrU_=QvdQ!$uTi8? z%*K{+Y0vVC@RHzE?{)i@g;q0>zenqZk7RZ6Mi{6uDVufLi~23MFkNYmq;Ouf0_Ql8 z%r%U`F0PMCezQKbVNiHXuxXNA;Cs`M>hJ27F}WO}mTAu}d#X8;DxvlX*I1#BC3a26 z_N_)cp|+!l-@=W@8oz5hzJIuJ*mH4G<e_we0fBl&UP z*3~7sP!BLg?$RmGstfPrI)BC%0DZANo&GAVdWGz)`7u!=l5G_F4b68^QJcb8j64seCh;#-jPwEWcJ(&Cc|D zJ~G8W_aGO1qVkOS=zYlxJ^X2#ZbJpZeMw*20{^)-2`OnXhsRX~T%{S^g*_YL(I)7f_ z%cvBNHx2_Y&$m(@^&Ilh%!0pZdoSc#nU_RfAYWuXgj)e`y?kKI?W_#YOx6}rqM1r= z1bq#Ds}xX2K#G+{paqzhUz~IeO(~q9hNOI2qPGQe;O6{Z^dK8Y8Us2Kn%T&nE#^ml ztLE%ysn6t>6sIDF$n#I#z50G#B!mm*u3cE~c7MCTMlQ&&Uq&$9-Q2=aaf|21l(whv ziyw&4SOXl;&^M)-Dpr4JIi8o_VuBR#3DL7)A$}5YFp3cG><^+Mz=y8QAIG~D7qK6z ztFdm z78gkNp?bD!s{86Dl5%ADNyxR7Ou^pUj5cb|pyFxRKeq))Wrqz5^^kzhFAcv^OIB3%IA!#m6)il^eq zGy@T#%+sswfGDg>54N2j z97!crUyvn5>O3QIp9c_y4Gis%4W~3DA#b&wLY-&b3STVsYDp=>z;iZA2AO5_rQ#>c z)sJUhz^k&ig`SbpJgLc^oa)#E+rH5<`Jq9!mRD5k7ary$01B2n;)vm0(Ogf+HYkY* zz5lns;ICj#W-Vv@i7wH?ik?7DmE5sn4yS zdnHI|8M<5RVP>#qLPQeT`o!qUOqX6E!@8I5kbo~GQm<;ny%Fng;32<%=1_Q?R@yfl zJYjsy`l0ZwZ;n^kl{S)-;Y-NPNzyoT)-k3b#5%HK*Va){YlEfkK~Io{6UX~b_>6G~ z5T512c^$vOz!*Y&p#IK7#ku+205>As+K{>&4B<^^@Av0pa5PL^-(i36_L!9ahZL~;mKT<;#~4`Hs!d%k;!U90Gvm>QSFqnpzJbB4j`7wG)2cT=9l?rj#P8c0 z<s*oR^A|4F<$ei3kMx|c6D7FRQORPn*`j6BYZkPNNvp0 zHn_GEIzMM3t$3n+6vAk>^ka>rfpXHhD;3{9wB=REK#9dX?)t*y<<%J-eAjrr;Gm;3pux37{O{M$1h4McH_p|5_gM1QWNWA1@IQXiGxqAy?@R{F zw!#oA9s9Gc)qFjR2WqSxlY>L^@ht9U<5zzVk!v!%G&Et^kgKD?rM6G^Cw>SPF%6VZ z$*uEHa}@=Jkh<&2ZArgE4D5t2k9^V`^>Ot~cf0zT($LM*nsE8SN@>-Tv5TJV)$wfE z(y#Wqm=7&Im$f@rXNkJq{SSZb52US}3cYY+PM`X-Eq(Jm#`*2ftovJ9b!Xo*3}t?{ z)xnpB0{1)CT9$u1THSdRbh&!J|Dxo+MO#e ztDsN-Gp+{xer8)e1Q)F*qIKYu^^i5s0I*DO7}CEngYtExfECL9G9MZt_|K%%=4GEta=F4zeLqcwD*HDvsciWdn`W1<8wQHc5| z!=td;0#Fnjz%CKLM@8{QCxN1Q2~inQQGE+k*9~3&a(l?q`UF^+zl@47H4M2!6WeGA z$#U}*6eX^!K+M!JuL&{c^%2`?At4w*6%9D)Mn<9_L^}vDZKaLTzKtupRgPt@1 z0t65k1zg=c0>P%^L+Zf-H0;oN@J%HA(|J5QntA=4ZSNfPZ8&}np1{cit9-W zeQ>Foxdb7$3y$g8jk$yIt%-^Nbp%3)un=|2BQ<*$Ok4yCaK^xtkDwk%kRn#wN*Csf zCk-J4x+{XeEx}je;1tEgXRgUuR5GJtIAc^WkClOiTHyAtL^CAR9GCKTH=JuXR=ghI zcL_1{!lE;=J8jt7@)X&N*!2S65a+lUXJ|ze6b6vE6G83M5Fa2JzyOkJjM(Am=z36; z4DhBs`i&B}a2IZFLp$o37`NzMp6U96*ZqxI>b<>ib=d%oi*RYtSaDql#nF`qg=l6I z912{d_>o0WUa;ws0km20rPra7yCjCukz~_pX;Ls*bq4+p_^M1;k|KC#iBIqXULZ@Y z!|2DDY0L|ANAdXhjHJY0#2~$MUhzVd$y|MxGvg|968Bi%tHW)ONw#R%U7S)D4-ha+ zx|Evabq3yb&t^)@&G#)M-U8vir}RJVz2oGBP?xGLYvPezLim zXF2zlGv*fabeP#I&%mlQFh?{A7ZUD_gC#w>MZJ_{G7PRtCc zQKZS}^k^9d27WU8j)D_{`1Tr?}DmuT{C+Fm$`_GQd?x=ie zBt-57B=mV^Qh_gRwwwtWZ2mmW3Xr!ah)K4~Ny)$!31T;;z#o|zko93n*f0YzFz<6R zLw@StQiX06j62bJytXL>J;>dW)br>ZaCE+eoco=xF{gX}M;)b3atsbu@$obuc^aHF zJU9&F^MQ|=8VTlbHX*@*IYnb)u;sBa-m=n#eT#0fQaM%LrFQ&fhkK>37|YGL)a1MVEf(7oZzMHYw-B`8C_kM}}G5<;sZLdEGQ(b)|-c$#spTcD>U-MXwS- z*AARU(6`sFLrd$P8~A%=7@f0iyr^46)ShP70W!=3EXi*p$$qxgPV@Mi+PWUuX6%*L zd?~1-hz&$8*3)PPB-3W)Aj`q>!S$VPf1o)f$uSR~R6!bQXvrJSy=iN0 z$!=CwYGqXB9yRaLWVp&!d;)yP>`Fa*fp(_YF8*dqrsmfIwWgYx1_jNaoPZzPEwdk@a`UnIpQ|*KJ#i?IKWFCP#~PZ-Dd&t7uyvZx)TVIOhUu zS+77pYn+H zy#_?!KqUW(T%EgE=ZI13MMP=qUfxDmMXh()bq?=*EangmcviLj7;`_7L7c>P>>d#{ zpxIqHGP^#7FPOSrecSi^B4o2tEO8Nw5mouVc#_Oc@6OI7JF@DkY6m{V(^!ui)nqIz z#=F?AluEDHa_wxqo$twe1Ft$#_p59p?C=|1-HCRV4t`{hd}*J&K)mqvmcNUT@N0Qg z7Szt|QRaH%rJsu@$6J2?z-z`18r}WwEB$(k4cT~KD6ZUfr@UE!ECKOei|0L#(L=6) zuE;Cnu^7a%9&gi)zehG8(EWDtwBK>uUoh7Mn^WyyQr1-Ei9II{O#uzxJY=TdJvXY4 z{9%u~(W&-vHYqsxJUvg}`7mry2$A;P~NJyOZ=i{!p1QYBK8pnaFc3xMV%_9tIL@4bHiUov@LVTldqi)BCtB|R-t_*C;#tJm2uPJaZxv{u^X<3Kz83-vl?2jWFN&GHltY%l|>?tcvmfqX7eu)3>|FC8v?Hn*Jk5Ujzhn6E(bhMq`hTq7@j+R>&n?b;IziVy z5rVr2!L5+6d!lgB>5%alZ7%}gWr)+ru{_xw7_A2u#+<#4C_Bcz+afIT1wMt@(MsS` z5!Ig-{th6E(Z@|TrvO9H+|GcYPB_mb&Kd}V7-x}HaKES ze>~qWEp;cDby#zP9m&*n63MZ`IZ_C`t<7_sY?MyfusW0y zrshkW-(CB$Nlq;|wHFc*e`!bYiD~y;#^*DuqtEO&Zs-26h&g2B_;zXX9hKj%l-~&Y z2N%M_ULGb7Ie%seVtf6Mf;gFgwmOQa{#qn;K3 z$cBXw{x450iI^|Z%SxI<*NcUh3WHO%^#{o9te`U+%U^qMFJ|$bjMdK9E%=lyKX#M=OS?Xq~ zjEEKI&Bg=gnKY`uLNS?gUyE*;T|ED{J3D<*pzCcLxn=ECLZY^X0g!NA&LOYi#f+t) z;oZd@#=SFX=7-NOGGwzxmiI2mST1GN|0}Af?DTyhaf*;vRlR!p^uKjy*VxBzzsdbI zuagV(`Nri|cURwi@JHi@;63e^_x|3s9PgfRSSj>U8U?TQj4Cmj)V`fu%d6z%Bq$Kk zLa#ajk)TIGxND7xpBt5;uCdu}?j{v$r%Oc_{uC`#)&UEEoqySIg>RF!;>157EY4QcrdSi$)t>mo(hoKB;=4XsVqaKrX$wY-qDs>Z<5SW0L#x#rPLH z>H1C>jN}HpFYd_HfQ14stjtr{Taj4)VxqI9YCAeMA;9iug^U05 z&%dFDE&I#Ob{|{M-s|*^z^gPyW60=uB6DK@bvPhePNs)n2?tS~N!h#HS>QWLZ|gYy zzS@<@?d?o!QS~g`N-E(>#%p(f$aiN^;jP-*trDu$)aBP3h70W=WU<_@%js2W0X_IUr*E2toaX51z94ZEQD2R zQ!Fw%G4ol`knM0ht7GaBl#M$#1Yq^r#}Kzhu5M%1ZdiY9;0B}-!{boR_)VVcS`HoB zdg?2dyag?MT;=@aa_8tI9%R$-a9K5{k;F1R^UW$L{Djf4Wkw32@TO+zhAEWp zfAA=F_iF2ys=Fux23h-FZm2qBwM`pz)Bh+L#6crqE8QohhDY3_$lf<4m+8`Qq!K4H zReGeKSrOjif*30+ab*&c*zlBnCiVt2W-Eunxv8?bIlGK@c__CI0Ec-PRW{#gyH^2Q z+sb&DES0@sFU&~|AS1s;%Fg*%uSCcv!`j27txz|5f@#Mxiyz>)l{-50Jfwpu8i=|O zruF?P>eS=j+|b8Z*Q%vP?E}Q2Xsue`QeR`83@SYb5)qrXSiZg{>3^Vda(l4(;q!gz?dNFa z!kz2n!fGK~qj{>S<*XD?%O^z}V-R;dkK&&pRe4@epet4-t)lNH2O7pqrwjz_)^lFa zfI=o^=u7zOq;)zqEMu&d9|>AQEonlTuXv$iGBh!xre@8#>gw~a4-zqd%vVB`R2G+% z(OdBO>s_V~Nf_`vYR_-om%2!S{Bq(+OxAEhnlcY_i6%al*E*F;SD#l;(xnem5!6oU zc&^l_u>Y0(@4OiJYN-AJSeQs?quLtryUnfGtE|Bn>^&;?6rPAMMq7;@;f)-lUa$1e zrtNb+R18aD-_RxRG_nexss()C?OPX}O9>4C~-Aw^1rW=ML>CDqN0U^OTj3*#2v3 zv~H*>y|rZ>zUG3^!zjygo0S4RaP=>iII#-hFojVN8Ve%n-wElQ;`OOR+gMjv)oKQDJk5? z@IOnL!E9W)Y(NCsE4{LRRd;bd@W#tWs4g$x=13pXry{GoGlh8eb+1uYXWa7j{gkPW zt421@moN&a%V5pfY3D6{CJA+c%6^9jEvtZ?q2BTgnW?>u1>0AP3909s^Ru>X0SPP0 zYKtDXG4T6c`H!$ZM3vrDm66#2KX_q8h);>_+lRg~nj|oq`BHCvPJ&B)n);R8cQn5XrK6wbat28PHdNv6qJPl+wXpuwkZtxOqP2)Np+JVs^|2iH8p~!?YfQLT)7QH>uY0&3F$Zn8DvC z$_WzENIC|4i#FVz3(3f)PWHwVkBzZB(GP@3)yjiBd840Xq!CX!{-{ z3Ku8$a|i)oZ5VL)pbK~~guo$g*wxqaeZF=MdN-ynPIi{RH{vGq-th9#@gj!xcHM}$ zO_H*^mZFK8ReWqXwIFHgFlqJ^#psaxGrHC)Bc4Sui{EXeJJ>q1ZmE&8up%s;U)dU^ zuQm965^EmcPCE#c))+UY=2vQG{hc=?o;x z#K7AcKZ{}m_Q!R3Bq?Q-A1t>%73E9HAPri-zZGpW?{_ z8N~84(?mkE${y+PlC-n0259~o5>TTdpMLm>RF7L)7pWa|OJ#een47pdM0q7c@Q;44 za6VtQ_5#b|u6D!j2k4N*-j*$A^U;Hdw$E#lEmJQ@cd3kLdt!7rZV%LckQYGi_QEK3 z8ESyK%U$xTdW|5~^|sh=e0#4KyF@e(Zha1zCUo5(DVGF7FbRPJ*TB7 zeV(oRH)HeNm)GIUrg3qksE?YZRMblkhCxdOenJPzKqOoqAcQ1fa-q^5x+Jnq(ttCS zHWng_gHYliR9Fc6Qt*xQV3s97mbk_Zgs>Wh@U;iCsfTdyh6wEj3(ADv-VKqI2@%f> zLkWP@c;-=2m>xh^PcKO}_(#&f;&mbnD^c1+K zW_{7lN%jH39tYQ$jcMe?-C(|uATNmYdb3wj0mL2opBS^J5aNp@@kNpN;9>HF*iK#n zc}(n}I;<@-wo4}NEj(_>Fir^{JKY{TCKKQIKF-ZKzUMqv_yMf{JboxDb|xx*qdjg! zJ>C}|*Et-!1y7I#5@(mGopX2#F-ou@~pD=jVy4&PfzD3F}d@5ZS~j??m3^xI^A# z!frelS<=pK>`(7xj_1iAWRe&=5@ki>4-FIfpQr3CVRx+K`ZD7d)v@^Y6s3BI?u;*g zx&~t(&7VlSY`A7gls(LvI;T91wKwe}N(FBQp?WCa>g&iBbAHJD;{$^r1tBEY@ z(kH9GBg;QJC&VZ7*d{ZJxXDtHM?3u{#s(18#SPnJKrxUAv|~!Li{YS|!EeK9suR;bMc%~@9q9leCs3`K{ zlPtEg4chYbtY0Wdm*H5BQ5J!tC7d>b` z-W0w;GzU};VE{3K=HD2A=u)Rb*H!42v&P=!^`qd(X%IPT_$jLzGI?qt7SaAuN}Exykt1-A5==Ci;(r>e5CFn=jlp~r z5u^#DJW+HNXs<%G`-`@1(lK*~QGBlVx@pj+7u+@~O6*12LJ6e)ITY^Vx4cn+=#{g` zc_D?+EYjPql)adO7TxCko77iVNhb%ftA=_D2G!koS&f!Ryz%k@p<{&5?q5#|9JNX4 zcl%U99qCFXlmx`kZP5a7qp=p&s5=%Y$3=shs9^Isq#qi#<|c9#~k89mJN5AtHDm zi&B8>P@VF(z908DxYdKN#Dnoe3yb4JDfDBJJnORHNfnir3&S2R%;{F%RjsQr_ z^7Mf}4*MADVMDdv!gW~*f zx$u`8NiKqxtp_N-mNK`4G1>!UOpo+%m_23QxgVU#U$UB_Yu10D3?Ye!DbRq_b0`q# zNGII;lOy40)f9)bklI;DgVM;5Zn^>rQfGFvVjST%H+mmCGENxrbAE4)hq~e3S78C) zX_AQN0`ADsDx6pIABp6B|KaJ;ySigy`=j0kN+UEdZ&5%34;!wgkgWFyx%C5Bs67Dd zsYaMM!|twwJ#b3k>Cu7ecb-g>ol4^=f6`?iTuqe{2Au>W^Qu+eXyNNZ{O7a+6y3c& zm9@XJR1TI7-_4l*)jDn7P&Fi){v(@W*9&~$B|VH5sXBibik~V$Dcr9{9Nz+6XA}AN zo?>$Y1gC*{ph%pYCr4>WRDdF?BVnQ@n#}>?j|R6_3*5aoneSKXbu#D!+=BgHtUGEBDsCL2%Tus-WjUu0jw?Sh)Dz;@Uv(Txbe zIeI9ph2YxXMUI9SOLF@#Y+U>s*S*CFM8lHrbc#)(niQp7fOd~(SN25SNP14 z>I$WZ!po&O-FuKIik|+OuSdcvS4VQ+7{??YOVn0VVD7;WIeQxZEO7S2lu^MxJ&4ha z?u2hrU1JEBX#rVE5`UD0l*B|Ois#Py+{CkP#dr#YE(wvkBg~0}9|=27AQW*h2OLB- zE>L(5!W%$wxDJ&^DX95FDa8lcClJRF`a>lNE9}I3P1u>4(uA7G@ZV;~B8bg3>6rCrodUOIsY_eQAO1gyUAQ#FBK2ffi`)_=YWmBUi(|5#J41>_Y5WQE~3*|y~$ z@A~w#P-5%e5MT=0h_JUYX2K|W3sgX^H~2Sf`N47szJft{ou76lmx>b8iO$cvR>D$# zO-Ro1BbEG1SXtA;C+%&sKni$*9JY!gXbk%Pr*P>;`UrBsZu;S2BX`Yk;fVA%m$!(& z*O(i>L9KDH5_ySnGI311SD{|JGFKRVREU3*)4%sh2$vVEK{cakh*&P%OsMjSy=onfaa%8~AU ze-BRsth#?({qPbjf`utNkSJjrDv82?3y2b$gbMx6N=ZRI0O4V`Fzzt-iW0O>w_1UM zr~o`;zae`Pzx;K7RTFkYQJ<@^5W{zn*AC#IZ$H$if7pxu>Vp+s8~<54E$wi0s!j9B zD`+KS?AJqu17nKr5c$(;LaN;KEFJ!bvJeT1dY{+}6Qh25^gFRiZmF1e=he^{BnjvW z2lYgEM^In<20;=Ip-K5g-mJM1G--7IbfW(jz*U@HdY-)9UgAn5FBkr8EcLs^>31vU zYtzl@Z8d5$mJzE_QZ}~x;eOJG;!_u>Ii3GTk`3b9#X)~W8s2(ff`?XZIM;@F@7TDbra5D2v{%mZ>$je&v$ zofsNVcmMYR{`~<%0f8fd<3ZzrlR>i+vkTJ;OUo-CSC{UX6Nt06n_F8~uPyeze%t?k zaCmfl^5f^P)3fu7O_67yZ6Ry6 z)(7AwEZ(-X<+@6gA+|46%BjNu*O;j0&fV}_bYBG9<3amn3G4Y< z+v+~Q!+c4a(KKYmvYQ~4!!+>kiMGi?)c$3oFZZ`Bb)Sk zw7ALc^JGug8FARwJbW+`zJ1LqoI&8a(X#zYo5xs2P!{H#h!%=$t$X+G-`^~46*zf1 zgA&s7A6GdcghFZ;r>@+MV#?GPyc=x3%RFZ`O^fu zhL$f5DCk~^q<#e7cIN8@?j(dig`dy-9{=4qmg*c8gP=W)nRA=q(nPT;+Oxwc)mW&TJLo=F0ThI0^AQ z2^?M@b5pZw8z!LMWV`;gtnFHIRa{Feu}O^P?bze&@=dSM9tg~^=Nto{SJXXZ`}nd+ zWX-qSmnr#jP2#?#xmD$-UF1Rg=GXcM9XrW>2UN1<0*;+>oAr?H?Mb79p6zu%k)HF$ z-?d#EwNg*EkJB1p%^wNA2sO>(!^s8@IrKuL{qs-S7 z$Nx4FY#ijYG8P&5>AK%I@IB(s!T9yVs^fP@lXi6zmsfX1hGdyI+$O+h{$g)Wwx`|u zHzMp0N51MPWj)YF_DGEG+EO%+T(piiP^tD;iCir}g7!tH$TDi0dTpD!e}1$j-d+c6ZtMZ0MGgU1HX4VE`fgtxpH|g@Oky1llp=G$p-ZP z>aQN{sXuK!B0aI5Uv}5ACNEqZZETCmL#m8;+IMQZ!aIJfMf1LWb}jCppV7(xxc9MH z0eiDxqTiA9x{fB#$Rm;N!w&)?-M6|Q9d@5i90vY57)f*ryx9IH{P$=O^6u^V{Qdm5 zKc~Ot-8&mndo=R*bn4yxUu*L0htoUn?mtltAl-lS51xrXJLd35_~!#RqEMS#Q?!4Y z&|K4H_YqRq;FVZ3{MN1lg{z3)=Nn&6m3ey+SC_)!`*yD=G?(zdO+^Cv07(~Hfy=avT4Mvvo+x(m5`c-0;xG^Xn17V|#l8_~#X zj7d>`edA@c28iK(G*=YY4ZefMTUT=xruTU4AY|OHbD;06! z8?%sWil6GXyzX(KY2xXI4ex)=qJ1%FGI({IvDt5aXUt|ou+}a6sQ9*YN%Rn!+cnGl zXQ_No`6I*i*_h}4Y<~5{1xVNEs7l{-rF@l|eM!kj)W06pUDue2S=rQ<;p8>)HYigK zATL;|FIQL7m`%?9S#04;S4jV48u>xz#!VGo4J(bg?3JITGFw#P;@LGsby3m$5si9B z(p({x20(YGQa@vK{*5uY(RV%u{|KhJf{=;|L$*1fade^9mjRFuuT%|KDX_~Ot#rTm znw^0E(AxQ{#yP&qct>NgbLCg9H&Nqx#{aD4@>iXMD`o2kx+ijP7;4%<`gkZhbj(IDqV#qsNc#$KE$KVn-@ zrCbqeH}D`PKNv(kHe87Y4Jj%4znFWku%^O?-*P9UQbUmrhTf6h)lj4(y^3_C354Du zgkB9D0qIR@Kza>G6{IMNSP&ExQE7^xU>yG6%sKOX^PG9kT+T&unSGO+{d?ED79vuw zGzn=h2({DQzsZbCddZ+d)Mw|TpfQ{sA#xgM8tDYC8;WXpuJ0z zAhm}|=EFGC+_llb*X75Hg!fTCdrAvaAu`euZ0I>t$3v{oD~S#duf8eS^XRZL!=_Z_qT^)Q(u#Yrm?p z5|1Ti3b8G0dbn>FJR9xhz;u%=5tl|GcbnYa9EB< zD+@}Gav469Z-vc7Z9qNMk$+?4qq?1TwNSX(^d$^)TNy%675#!&R}|o+@sbYsy|%>t zh`Sg_`oyh1&hB@>c#82=@nl6#h6II(NkOTBi|t2J5m4IL6rNcF1L)qAO(UGJ?%3l` z*LqVLu%BsrqbOh8#xO}O`2iMH?>=P*4c1^mz=cTJf-I~B`t=k9tekD^GIveseJr7J z-eHqg5UbU?_L2S)ezrIFC$F~8`&(}YWs58BDqa1{>;%qclU4m}*VpqZ~K( z<2}MccpN}fgm4gBr3RCzf5m9g8?c#FA5@gIN5zExVM@e7Rp=rw-HN8Pm;uHv(}k}Y zS8a}P(}0Dm?|R1EsiucwIwISv-Jp*2i~{7?7KOm*Ek-K-Su?V>hP+Ld{;_F_ME|Tc zmsf`ncv#t*)Vh4@O=AX$Qa>CMbNB{lMX@oXBRD$wXk!=J^^4+|%Xh(J*cBLk|5v3x zuEEN&gybfQ#VLn5{B*^1!`1h>TTd*2+j!kxQHhh!X>4Uc#rRfZ{y-7~%fEtU%M99+QOui5Q@1 z+V21cXr;Qetvb{6CR{y@HD3ZHXiAnok~Oc9^D$RC&y`kkRdRM!;9``snNb1dB?+4= zyL%?P2`eXmRK7)_pvrfJn~$9Q3ojeWnoPqeC-GP%Cr>%xqYSn<*)>5rSyM)kPhNRL z1$(6VM&6QN$l~=0JWVQ|`E$(34IJPUY(v2HD%hPiKz2NQ>Y;H*Ne+9KuKG)W6|)bx zG4^jSPLmmDv*FNbgR}YN_|C(zCMm>FJ7{3%F0)N$PE!1nBuF#~y2?!LeFE_%!Nbwc zrh}Dyh6@q&#R%|5oQe*D?;s5w4-_K=rcMj8 zk{~nTkS8;lIs}Lw2@-YyF?L*_e=22HKdWnQR+(}Rrn=~0?$BN0BooY zMhfS>U-iD8427dY^s&IH<*mbQQ0+FT{xnWC)SV9v`dJ5o62WyZTxp~nE?36#VgbrX zKd4{@m@>c45~vXbffX{-4glIeX+QK3HVq(#%2<7=>dUBtBrLGI=7!uUaQa;xnFR4F zgg9ShQ+`2aE#bjfd?X6S8XlIL#7`Q(SMk{ywv+%h0rVPO{Fyy;n-ahFWpkQPix@k@aijv}@dxMg5xZr3K6Px5!}>7*ms z9XQvax1DupcMqzWVmPxbu#p0~b=^6fT<4M-zz06(1rA{)P)M=&`7vOtL?{-bcHuM*|OAR!ICBvn>*hE!={Da;kq)f2;57)(7#nUR8Xn z)3%MdF|y2dVmfy9>s3E$bP}W|K<$ zMZsEwTqFc@n_S|0X{o5h1h|CpKyP|z-HBW;>8Rnc*(8g$U3a$%HEVeIOmHmR^~BB$ zRN5($L3~`@Avq_qp&}}=eY?S>T;r#$Z#78l!hVJ6P^#<13^s|Mb!s)6R2`)TcJjgG z(|CPUZ=7{WbkGYm3yFiftyDz>0BRSg>-876KR=|g=IGIuul0UGbh%~9scNIg5qRyW z+bOCCYhdnH%0!I3)@2|!fSEMMfZ1^OH9;s;)_7^t zi<`i`rQnfEFffWD$ce`YH*k>>mNbDQGX(>kkoIVR5;Z(zLix}D?&H)0I8g*Ike>OOE;y_6ye-II> zT?s=G;Le=GLQ-V7usAXpGj4u&(q94t%<5=n#xkYKa{aJ8jrfC#^fQSio2`0<*&wjAWs2{eil zx~OwT%G5eKA-$I(KcMgg|rO8$9qh*srXF&3eUoi9Pbp+nG}62!$dktgEQLTCW;0n+keuF#OHC=;&# zfx-a?r_FiFrS`;^NO4VU?uv#$@~7bz`~J-+OYrcLYoH*QguGZ{({3SX(2%T+$rz2pS$H z1;2iEvQmsqO$y1cHdLPhC}USAJ_~6+KfO$h;*8J!<%x(_0l3XrSfoY4eOSVKS)|;e~-;MS(Pz zW>~+yiRwF|erGY^pEfTM(QEAn~@|g?t!uKvSx5!C#ia!mtalz*iGBl=1Z`Vt3gr&uy0k6( z>yx-bchmSeq}o}n`~0Ykn7Y0r1Zul_V`ts64f%b?n7*sH z{L5lDn%3`2`AvG&q%QSLPxpc)9?KrL>MtNFzb0C1nrB}sxWA?yP<{B)VgFqile@vo zV8|P>jUp0q9%LH;< zevx~j(7sqTM;YaCbC)ysW4BYe3jfk(Q^a(-IPQ3qVG;=@f7@c9}MzR4;6;SzOW-y#h-MQLR5Sp zB5Rnr3UDMYyffV_34p0`Go+vyAo!oh%LAfn^N!-r<(CH{oQ~5mXoo_QNd=Sk=-asC z$2m8xGC!Es`yGmI*j+n`lNfE}IRG7YryJ9UjFCN5U}AI!hgwr^Xeltr4neo%vu8_B zR|(->stPgYm-$!iG7B*#!b0Ite0^!8#?>{$pJ{ztCC`n_efT11xH@5AF z+0Kzo=UFOZRAS{$66(2v^l{hGOLCd%#YN(w$@ydX&9f2=MUa}@0n`aWtUL}ltxQT1;KeE_KaB6zz5lTPzhGPMa5??| z3$}godiT#0yOc1d(B5FkjT5cueASXfh?p9u-CgPnsy0{e$2Rl8G_>ZWtd=6kLUA?J z(@02XnqtG(TIeQ)j!v(@MvRWN2N)%*6V^L*A6p;mfj_9%dB6yWe|lv)ebc;C1=P!m z&++3DirhVjSSG`+tdHV?VPGe$pwk0)?5p|a$522^CAv(va|&KYX9SHvIXSnXmD0-W zmhO8A-{Q(k)-Mk}tzK8rE6oK#F`5rG%YuKdJpA~$gu9tfajo$&!({*+w2PJ9GRiK$ ze`Ny_T)k2Jwm$+QD&Whof)1Tj;Pv5H`B|y)92c6QnOr|l4#ZoJGZq4QknCr*i zz*j+wlzd4a#t6&;5JbEQ$SxyQvqD|%4^COGdf`!b8H|SXB!#|%!^u=;oN^D$ZQ>tm zq4o$QZYzhF&esbsRIj2TNX4eg)<3hwIMHq*AAK6!nu}sjzBc^lc=!HJ_2g%(Hlfh< z%?P{@`P$jv+WE7F{CSyVIVr8HVc`(KymV+RnI#x|ILQUpa+=^+L}^X4t4z?-Qb)9O zXmUpWynt8zb`GFi*R@a(P9gS90Kj&2B+z?fJMS@GFb)*pKvdP^YeJ{NDOte?L?w6F z0Ty=oT7I}oy3t)3*DTr&Rviv)5(3Ai@vSmh2B=&%CCCmqUu z#@A46wcH=%x?l1zjl@s$c-~P0N`3o&YZ?c|S}<1wkPc%;sZOPjg>VzSnyln=wnqIR z9BWFR0C$N?^}h${-c5nSL`KJG5X{ConJwAIHCx%rwr#-53dz5=TtDkk#UoWhCIb0_ z_)E4-Smd3#_=a}@#jF|Pz{?ooxB$N!3@7l$x#zz3qX=T_opnErR7&1PDQ;kcEc&L0 zH~L`A|A9?sNz64k=>e3LI2v!J z!yEKB__fkx-9E%m*}8^$XQ^S%^N(zLH~+~Ab$ zAQl=^9DaMGp?evx-5~Sw(Ai$BnZDa5l;Zg3T2w0ZLfmecD=(xpEl<{4_gv;#e0>e5 znr6O%%7L3Q#L*7Kp?1299Enr z-=+%UQ6+#+J4}vNSoee}m%tOz@R`Bs9H--+=U&b?MoKK& zA*WTN*O3!Pi;I^Tf{E(-tkFw3mt&(h=wXGznX%)z3VY!@sdA(Qgftk(vSk8CXq$NC zAB=N-s)YHj7zNVSYI?qWNdcG0hFuRJaBexlm6aeqB5VH_%UQvTw=;j2UOc z@;yzYyuxH5?2`O^A${@bg47q0H4ns1K7LE!L4&U5DhU z|LD@76JCS>B&n)xA}O9j8Gp(eS*bCyxyV3hf2qS&Qy+Vm+q}s+s)P%xxCR!~XvzzJ zmf`NA1`tY#+`rQjq-OaTk)E<?q!qq%=>m?3(j4mGQ-T+XQgsg@o!bO+Jr@2}E^l z_b&YzjG>dyozjfsjo{{lmc&m_16kn;!z4wyg&A0+?(DUz%Xqb7%BnpB`#~8>N~tf- zm98oo^4E51OI3o(3~6pVu-Xnhrx6Tks(Impy`g7d7Z{a&3Lr2`80!noZ}mBjkCwzH zzzWD-MqAzCmIhmCc%aw`04O#H=<%b1!Z1(aO+t8z(@Ovx3wZNmabRJ5krxduacFhk zT_2+sxAy}+7=MVt9pMeR80UG4DD*M!&_Sl6F@VwuUG+|3) zv@jfw_Zu4Q$hs@|44cBO<%AHjv1Kef%i~gE!W>lMMt4mtpAsC0uz%aNH z3KzAh%DC55G%O>d_t5D;^Hz_}kJz5Bq>g+1r4j;!g8~mtzz8{3 zVEa2L@t6wqeeat&U$$gu#*$-E1V-JB_kdN1e*Lgsmm8(jk#>I&3VBmJI^cWs*~U_3 zREfdr!cb+&@=>MLTUiD;o#%5161RtaowG%M@8Pb3Xd>W1BO4%g_3O3Z16Gg%eg?AMxB3?)!-^P*A-#C z4M7%n1Bz7u44W#TW)f;i8aLtEo%M6#$*1~ENjxT{Fe-6y^MP?e8Lxb5 z&}iC=V|iN}8KGc}D8}t1o#+?zg+{c}Xu&kZby%fer~&E1xBgIY$T>F*?$!`|>SeZ) zv#S|S^Iptwnw%f(6C$O>sbKPilR9>nkoWna>9u!!ma79VZb!_CTW5}3MSgN+#Zc4^ zXOKbKCO`cC21hZRN~@}>1E6{Puzx%_NTg(-R$=59$b=vh_f&9zAXf_g`=YcT9m?!1lh(fUvQ0NW31GtHt`!()CYAXJ*Xa zyas<(Dui}h{IB{++#_jCsna^UJf5?>95@>0GSas{ykB~5(Wt++Wtp}0*?Y%dQt={<_!6v~P^DoIJxB!z4W)-ffhnoc z5GHqOIVZ?{RBT``z6=$6Z`Dnql46=DuT`0_rB0zd6{^pg7!*%Y`-3H0&eHOQiZv|K z))H^eoaBf|c2dmt5ePR^%BWK@Mk;CDNjZd?P=M zD@n=a7=Uskc?unxhXH6vQ56K3M51n0Ba(GSqmq;!J!A1OoO%|Uiqv3{BT_VZra!l$ z?wpAiz@ok=Mkn&%ttM46dD8Nf*ot+tUU+7uXeH<2{`2a7r4cFi(e@(=_3IPeqyXx6 zFJ1J~C2e|&kPVa^krCP9^B$Ms;FfT0j6%a%=7%uj$4c5jDYzOMkRmc-1L)aTFMaR3 zj?Y7WLYPA0)sKnV^v4kx|ju^M5Jc=0;0xp^H01i@c&>^i>2>w3YGW#@jD$J5bIBOs<%OkDO%Zt0?gkA%cdPNU;T?gr7 z4%b3uA}}I$)fBWFeA*~}dmX`>DE<#p!rov3;cEDGr`tSc+P4+q=Df&_8D8cil-v~0 zQXQOqoQFRbZfE8o_KeqVTtK#(qU3|4!%@-P1|t_e#Jf_fb{uXZhh)+y(Z-6*l1kdv z1kLb(LnnoXMrrjIAVoyrrGSw5T1ev>Kfk(s{e9%{ZvhRwh$N{lde&I@ z@1o;55Vh?l?M)PVa{|4Ig>gT!SjWJ9moSklfX0UO?T=>oY8oHR4dWV^`VSEV6j0dU zFF8n`Kc=7`XA;mf=J7Tb+@?t4lYNkEL`n-6P5o;g}R1H!E9`VeNynn+H5MKC%=g0Jp-nZa*Jano5a zqgG%)BM?{60?9ZnCH8z7GDxvggzxM*Oywh5B=`mna>?FXJ#Yf*MO1$PZYs>XA+Dl} z3BC~;iP-O9DnWq?Ui-`f=7MhUkO^cSdw5y|BC%G3dt58(L$l?UHuFz)d%NbzU5!U2 z$fuDS!@shard?kt3t^u(*>wriZbPLvAEtY%-!L(+XEzV1g~z)Y^UBc)Ffsc5%ps=Y z!v|u`1n?CNNpaqV2~XPpMy9RlQg|Qat8HXq6ye-sXv0IfBY@)O2h)6$8eVzYzfwrX z0%?2wA{3MH=iPfu?#epbGPd!inLoTSp{Dk~YfigNuKr;fOzxz52BXx-AM8n#d`!$Z zf=Lfnzazo9=jzBD-JR$86ky9%>Nmw0g)UYBfO92|rkfc%AcS=lWqffn*a^jwh~{*o zc^hdg%1En8f?x5;$6`>#5qTtkF%@GAhdqa!Q^%j z!3~hE8#=RZyyegw<%BOqQlcF|f^_00;0W1pKTn~TNfiF*)NDQZl2RT;g;a(jIG<_1 zKq%SeKF4iZVBqx}&x?ZlOgIWnf-A+#Fj3EnEZt~AU(&6a9tT7(NSwqtQy9WRIblZ+ zMUhatGm$7BM>E~Z*`MPCslGbfyx zbO%BAIqtTe%3NxXa8Xk1pHZ9&DPDZ$%$gM9>>__Q6zqYp;tRDMkcHHv>B$>)q4X>{ z4d~__Ku!QnB^9pdjX+6-mRHVbgb#+PN4O@2hK7b^oHXXmBOP^+F7U(v?m>?vZC&AV;D< zCh9~pq7oVv`{)@)H)LFiCJEk$0x>;Z~ z%J(509nCUfd70gFS)}z@aq@Cl^s_58&wZ=U+*%x6ny~EAwuqwV9pY26Ijtd^DpaeKg|fnnOm`1 zK;wK2R{v!n#Bf24JRB~Qt9|O?aSxC^Su0a+2s$b7R+Ts!14b`NlK#r(Yp09gf;#Av zs*GYxq!bRuAjVSOdPG<-f$A<1)&hM84Hhl&eEpGzyg*4)h-}0y+pps8B5L_1`uR9& zOxY7Q#PG*x{EzG}O)QXT*5JI&Qu8m`J?1g{A(Wn*3a z^j+(Tks;1#fJjA>x;#Xn>IFhBmEWrQ{%p(l11R%#8yLS}A3fDu@%8)jH9WL*;!PgL zs>+mo@&}?f9y#C1H7^bBdU|J&o?{NgnduA625{P7Ik-t|wi`ANf)V4=h#qH&$()V0 z;8iq1f>4j-CxR1kOTrQ#3>)lTTU^#dVGM9aHB+$tCD^GtoX6o)y~1m62^RYD&x=%) zk$cEkT9rT3Ot@H<#D&jIRxF8rJ1Gv_JLGfZu;Fa*=1!&5m&wY7-Raox-xii_R?YVi zIZp3glRqBae*ZWTk@3R4FTlDvXXRD3#M{7+n+ed;9B8w%+H2X(`vgf*l4LR(nB3B@ zkiK%607dRyt#J4Pw)t$xg4rd(^h~6DNDw$ZEI$UmyCXGMPU-ayqO$Q_b>qA8#`ksk zy$y%Gt?a#zZF{Qdy&b>3&*Z&b$^9SX?_VYN4@dUC$L<}M@BQ4{{};ReSMmUe+drk< z`y{!iira@=KA@?fprSiKjqY!^9jw>wpRey-+TUZ@-)A@8|F(DdeqryQ-`*vE2)uod z?(*Ib$;0#Y1Id3!QjYuk>qper56D~VdvyK>?qbnr9AY+oUveSK7cEVB$<4P%s=Qe1 z;!5#f?^LUKz>AMLZ`WOY%Xls4_|Ef3SD&=rX;eg#ZgRZAU)!NrbClFyZ2ex;Lsk0M zi1PWjRc=@~_WDz9m{%NSBUtfmvcKKXNzCYp&$pBKd;TEMDgOOQQrv0s==J35r5)u<d0b3 z-T(=o)s*=7-s+?Fx|-Shqa_RL?a%Aq4-6g@1V$f6$Hbh(#Gd_){RjL#|IKHzaj^w4 zirUW*H!%RaRVJYlY=8g&W~W13N6j?cCSOU{*|esRf?qszrP}QSxDc)z%j&$WK1qkZ zA=ii8h=*Mg67W1H(37ba2z)K9$2-gV%=OpA^p%KabEy~TK+jBjwYkb&`PaYUtz_x?oKX%{E_3kmM_~a&T{@9vf6g1p>tH)q%Tr3n;`18R< z$J3$rzrnUf16^O9H(sYg(WujMMVAD&1BBd9cS;>vBE|2 z-A9M!9P03Qcb3wJx@S0|owA%TIxF-Ag&=EZxfKvYV-lYwm)BB_&IRA*a0|lfgbDbP zrA^Y3trm!fnZ|kwm@{7J;0tx7KsW4lF=LQ~TZL>J1)lZ)fo*%fd@42U{#A07Ki9J~ zy?^`Dhw|YZh5Uk>pl!~w#Ogbrs!|1;cB%s|?e5eNv_-$vvL;{fN5FSRl)7m3&cpKP z^pVJUXO+7|lk_3zX-w|T8*+mMYPy!IO; zbZqqW?G2xPYTh3?|Mm4sYTMJ_l0)NxZ$yTVU!U!dQ!9Quc#P7aepvSEHCxLNLMXFk z;zIv$IE_xBmYLjl(J!rsg=LhMv-z|TW~8RYf6U9RzV$}7jop!X5*AxhJs162{O6Ju zi|^0n(i}D7T{VtOj}FXW>dzGmYv1D+bYg#-Cs`R){a0w6C4RkfEAmxnQ=(GCrWyG^ zsqS_95&G+G@T%|0yE+lf1dBK8G5}oJGHiHo-W7AJSA4paV?9%G@AP9ROV!ktHxmex z3igi)Tzo*=e4)Eak^Hk$J53GRzG*0_+nzviMz>hj^sRrjBIVYf?|q-iZK@-xCO3c6 zu0DIX`1R0_GUR*4e%txcykcB4?T9h$&_;)J%;A_gIrCg&A#DHe$;K^Y%+Kd%-hYpU zrf5%oy-nFCpB+rUx21I^Tt0t&_x*2$v)Q@*i@#u|<9>A!1>%)D-6g(PJ;a8qC9Vqf|vc!Rhdw>ZN_xHf}EP>}JTX#~_uESBWmXk3A zcI8#SQK*LD%%y4FDVcP!jAwI|pA1(Nj$=&H-^kW*e%76~dnc8m(k54V@X}Mse~c!P zr=n>-%B29t{@q|0_r+powfT0 zWXW*$`OBYaSNo-|5%P(db>h;28k{%%GCBfoQ$2v`S-&SE+-)vA?H7`E8`nE# zZWl2Zm++VlG^-KVpV!t-ow)7 z?u$f0S6fqi-{|o0@Yvv^mJ5~o2|IcFs7n*kvJ|QtFfl5bLFC#NUU+-Qv zAy2=cuz*lhQd;(){6Cua2g!9wRGNCa=~=DCIqli^YP!06db{ffKz!QiEvL zn)@G*CiAByUkvJCZLewU)gHSt%@+6LpnTp2>KB@K239c_PI|YJ>2T^Vlaaz5{B1m% znJD#(#!?QCR(7R055IlijgM`nfx;%wF?kq?EE`PlV?2#!8ne-W)5NvXgAeo{XJs2L zP2hAPUB9J0W}2?Ir+4RDE`fQ{DsSeg99uRJ$*u;4G(@MbPm^+63Yyt_+jILpp2ueH zKKU*+659@@?c1vf6ZYy@sh%$tm^*s-HuU9y7nJ25*(5aN z>pFGu-%b0U8$;8J5&C~)Zm-R?Red~OU~gHT1o3iQ*ro*y zCS_RxtrC<)d@qU^;j?rbxvGnDV%(iFmjB{~aJa^xa#H4smgy?;0;j(+vK5$GEylC# zC6#1+!FpD^D%vvUy8W0>u8CUZvZ+d9Stl2766W*Waq-(cn>@M-GX2f~qZ$eWrAFj# z7vAP}*~$!;59SQC@?*q+W#_T#rC{P0!7`UUUBTR)<(Ez+eGn-egaHjSR?zEWa1az) zPB1-F*hNs8_i$}Xk^;p5f=EB{bjVs)U#YGwL=f(knH1`jT~}rMA<|gp7UK0#mA1zu zwY24lsBN!A6SLPfjZYh`SMCUGqC#bMKc;tsedg?$cOqHJ%N}|+cNRzu?quGpQ$&@l zD43&B6WSt|3oJ}mTYGPm2)~b`-iz=P=1h+I;IsS?u{CHD)4bQG{IFMIq+)_Y?B2KC zpJJpwW|8)MFH>2ct_nl3huIY5lT)b#4c@oAy+_)5`yI;z%^iZAQ~3`lH=K2uBD z5l^4mR({YR{_mK(k6V$t)PY8yT0Dr$_{)nL#g~SiBfIQ#UV++|ANch#9TodFh$(XI zj|=}`ubyY)Gdv`ba|Yd>b2Rvf4!bw8+O9hA#q_LPH+x#W47MKnaZkPTUC;Q3@pnG{ zZvHO5)1L~`zKzM#`HA)n1!lD@df5%OKcfm|ITdice1F6G;Y*5$Elw8IlIyS{?mpS- za(qy<*@~BuXPC9?Aq*|S*T9ffY%|D>25l`n*;_-q*Oh(B# zNg4D!CB+y5d>3EZ#Dc@>DE4~M+Kq^^e>ezHOBQGk^aWKN+AFoU*_d4Y>b&+Zw6`Cw zpTekOk$ocE#~d0!l^{R=x@Ac*mp|PzjV8gl>C+vJ^TPw&mP*;B!G=MWKq1Yh&dW4& zGb40kH9V{wu84?NmtVDD?@<19WJ_zjL2@SANp@9H9Nwvz-N}i*vr;`q`LLtC?%=wG zTG@*xp#gQguJJCF8yyGvv(Dp*d%1(=1nY3YX=Ty7&LQWUX9L3OM%f4P5oK;UnWO=8 zTdBgoKHJ|a8wjKCOmii)wgkVQ-gDFlxaVZy+^KK-KwwWlso8BEl4r}_|J0-izJ|+r zEu1|b{G>!LJ354}@gs#5fFbM{v@;)Pd6GC)5{UgZnJzp~2yar&7U9KHR_rhlqo z_-QUdKbsofWZGi7P!u;|ubcOI;ERbw)u`SW=q3(e5(c0uFGMIK*;gpk?v?(_w`J!^ zzrtJQgt)>Arm_emgZYRUgt>qQvLzBP?JO3VeEtzpE{B71Vknry89?*i`JI%QQfdj# ztd(CzUIRzAjrw173?fl~fh9h@OS8^u*776X`Jvn5Gz_v4##6)63K7pewAT*RWXl7R z;%MiH&Gvs;>tL5@2K1pho0~ zT(e`jN&q$d6Y8u z3B+r1*moA-ukRJwXbuS93`}S|p@BYoasvO|wc%PMYGVxb=q#wL6kRG%7A)f;Zp%a01W(Ac8{Nf9mp{ zENmA4>hFV8XOoZotgFTaW-FzRHS!mM3_JZLb%yK%FhBwjiKu(U_Ux`+1%3;oYyJ!< z6FlF=Pw2fmQv4%swkTtBF-OTWFarRZw82LD{u56R-yMNqUV!?70UQouPqsE2d*N0k zZbXgLhgSlAZEmmBGV8y~OF#vr#t=Qj6s&hS_=EuO8_5N7x1TqyzE@8(OhzZ7`$}i~ zZ_lD;ZjU^D@$-4HZwd5QYkus>8?e3?^X9pD4_$d-{GAaVk*u{1?bwbGk#xQR%a8N4 zDk?5xT75h9Pnk*5FUDrRZPbuBP0c+^7N70a=o}B~2-*eu=m;uTh_=Zotp|Ll^6Piy z+ncq=cXeDF`c~s>V8Z%5zZ^5s??|2FdD|k?9++%-b~V8_)2)_QNJ$-u`}3M%#Me^T!dV zLtE>w&@MVDqPe{5Z0Vy8E=59Nj@O5(%Wo_gi~2LrUts8<&7tk2h^CTH53Q=`ZA}&raDM-Lj)M8=?(JXBe}6}5EC?<+FbR&u`)`xxZhjPc zM?0h7Z@j}O9T})ic4HhhQhGm_I6dS+>CS1ieiBRP|b3fXum0b6oJ#x0?DKMw=07sZvx7&r0rLr!IR8hi%pV`e>KPF{q224j1}?q-?U zDZGg7mC-^@>FsFR^a$DQhQ_G68g>gsSJ%azP0MB!;GyC16J!?c@3q>r4bjCc+AJ0^ zGP*Z|x_zGZ8b5}Ia%so2xyJH!;)Rl|4H%;ph2wub4#LJKLaUSvY}|0u@q0yL(^EHx zJL36fV#HZ(rmSr;Kr>v(p^q0E z9{W=0mUBYz=UTi=s!dYyT@Qw!s)AJ3VtzZ;cuiql;cYP#Q|jqbAZI~D@m6@HMo^J% z1kFkKASz-pCt>wcVsvAob!rlCW16)_mld9YXW`snxaFLpXvvqM z%wUH7lty+*uHOm%YjNA*6CUiI(k2`+U!=`!lO-#hMt=P`VE}uvW9!={UQL%zYtf*$ zvIg6Pg;<{0-G<>KLrldV`H8FFlUimNbr*Vlm=Ju!zQ{c6UnmndmdU7!$3iQo1L0UP&9qqm3pY?O4Xkvc&xE4rzoeF3oA}< zVF`HqEdMRxa=!w5Tx!;u4ZEFoCE?mRCY;rxpdOBV< zNx0%PTd>ZHJfd4dWnW%>Woc|0I5Q%co0*^YG&M!<{*XxioKC_^=H#dSrH!d6Cod&O zW^j-7?oXu^9fU>R>!F&kEn4i)txn?+)hx*4y}uA)5ut4V4armgyIe!hjYk<%nwF7_ zDh>W!*2P#zm7@LQA@$%!g$l8FzwdgNWu-i_^w*kVjZN}%wxUEFn0_F9-zn%pKE0$cwMA|JMkak|MXX#KoKHf9sG53ku4M3tmLXB<00*lsNRH{&x{Fz5hhW4D`9Z zY&gUJD?+BFp=Mzy;(Alr#YV`=htDsB$I*q0O^}uE<^L*>-Tog1GF!L* zMS;xzzZJ+V{zrk#>&~6Pz~KK;AXBQBzVcrMGUrt&@^uLRc zh5tVyWdDl-Sz6uyERgm5SAlGZSe9JeTGla=Q{PorTX#_)8y@*jfvlnAqCnRAzbugb z{rk5mF!}#`gp7a+ifL(WYl)5Ni0$g^>VDKaFnIBlQPN1`APmcUUbnY!|U4>%o`EGjir!EAZ7abWUFuhKb*JXqHM*Ai{+VDAst?^rG1&OB!dFrkSsPv!9ZZ8@&dho# z`NYky0${Rn)*U9XhY9&D;g;Ji4MFcmDh6?sT%5#lCTa=k+On>d3v?fE_u*oz?R3}i zFuj?pwj*t~SiPX4k3B`H8ybr-p+q7X3c8CVcDq9*IC`UFok4>0QTE9qGHhCD8R{mN zYU)6UeU$r?)lGm>tDoaR+vXQMf?Cl|E%Jv5mrKTFWAa<85BQ#*2O3Zu)7HB<&C3=* zpwIqW`iKz8-pE*Bv}3v;_#anpnU3jv16Sm-w5M*&J9ov&C`L*R=fLqx+xD>c0;whu zdjyj#->5HLS;l`5FW;nJ_>x#H5Wey^U^iMVlAxCiyK^&H-LR`>C`v6B3TEBS!c1l+ zvgKF=i(wLTs)_cOd9c;2jk+n<;SL|5_=$Bg`^G>4x7+cJZc8R*4H&aU%J47N5_vy? z8_=h=2X`*|V}VYQ*SJNBa{cdYZ1FI^I{C~5)eBg%fF9b!GeO-BN^~>0H0$y+=aY?m zqrd;OmJsa}7QLcmf~vHGGz#f@Nl8E~o1z45stCrB@^=C}E~Uroe%mG_(5js7Hq$Cm zi-~uP(Pp#|M?c{-J4azut)25X&%QpIzGiT@xJt?NfF;*4vXz-Ps*P=J(d3J$nQQX- zFP>+U1xQSDLX&|SJf*$(9tOWX@IIcpr1DATjyAE-kYPT69w_3 zJ|VuF5+nH1TN3hJn{IU1-fn>{8f%Ue;EXv&N$Nh&k<;tuwi++1mc3u62Y(x)ReXCX zXg)`0{{lN0x`4evLx(|Vx@hj1f9tA0#>DoA4i-4tqYocn{}=sZ+NUD=7kQPjV))l6 z$MwHQpQ$dB529)vhfil4Mu$#T?p+@Kd-}Oz_{W~VvD(qsQf}bk>d2W_JMPcm`k$Yx z!++BDV}2)apYtO|$T96>(s{W>Kpw##|!(^q={3huj$zHi6>LqXD$AbO% zk00Ov-D;Smg84^UPn4gt?@Y=#T*&zh0@=dX2h$UDtYG z9YX>oDp7j^s3cB>316KbOYyZznv8`HO$2!Wh@hSx%UfJ--q4tUG#MFh6nKW)d?Jjg z6VY^6i`^i(2@lSgn$W@!-1n*E!k2GN=zBg?y+9rJJjMj3FrRwx>gG*!pbkUfmRf|8 zaOQ4Hcvw>SCOY4C*3V3~?7d;Vf{x1UUD_Xoy>g!veMD~FE_`0ne)o&8(XN?k_D**B zAlx`Oulm+O$Gv~p;W==Te$X3sLj*Y09M33 zSe~IEcfwjz`lV)m0i(wyExXGdRvKOM^!~SX?D?dv2Y9QY5uOd`^|hNd+M?;fA{N@o zg)dIrE;Ti=O$1w*U)F6EH2!n0zgCSFqF_3fGO*lDq$B~fQp+gDKQsE2Q5Fl}P{~x= zT`Txud1fjk$34o@=gMm)t$r}`ym)!ZRtf_A6K= z{FOq?7<{LZdPOVKZ62HbsO-efHSA@?LOAn1?C%XXI?Xk6?_V(EHN#>xjz3GT4r32M zl{<_$m#Nh3F6ol_&mY)N6s~?3se1VLbMz6z?;(26TDn&>$Bof@t$4VvFkd|^L@Tv zoTnUnS|^RR12_eHRkxYC(L3!KCytLYJC9s4j>G8nc zcDs8-tPXr*6H%FGyWy34tnx}#F>r23?pIfYz?1^4|11X(Q`{>wqeKdR37?ikHPP=) z={U9vhlO&&NDN%C6_IgwjUYPnrr>LuKhb; z!u9E4y;A3kGGmvyI^oG6cvy{Ez<%eM`MSgD;No%0@yhYa@3!^f-T05k`i}IO_)~-H zKk0!>Jc2rra{s=)Gz$HE;XbDwuh!4V^bN~?8xAB^`*T~HEeH0$sl1WSrmPELmRsS+ z%jch+rHMqmTQ5FL35;ad$06Vwl*KRSBFujUy;}Enh6nb}hwth|Jj4(WM~Q4lm$hr{ zN6#bVX)wkrAwx4ZmBrYgWxTK<)Bh8VxiJhvjD_+jESS;%z?4S;q^LFe8iE)Tc$`mQj9(?#OrI=b~fNmfP0rm zChUQIC`{~oOg>ZyGZF6Q3E|ZTfdPP->XzLOGAA;D@qkw#*h>Q7LB%U3NP0@dqfzlv zsQ8(R_}d_m9}vtm#tfZj!_J3aO(FQ5_NUMFQOoMfr;5YVK*fb zZy_A-)Zft|0Pd97cq}A@3b~&Pze+Z~LIu1%RgY_fPTK-fdmxWPkjNhJR01JY4*v2I zkfMQ}9f1%)iicT>t3Kz~JawjpfbUB7nqywqxfAJ`yh-nrl1$B$Zb%@OC1O|1!!jjc zpCuf)lo3rmcuxXciw5(@g0GR`=Ln225ZoGrxF64hp+=qG2Z1ewr}c${^imz*L9gLq zQ5mU4x;DBJFk5_vEh)_q5&4Z5l5;6CW}ba5KW1G&l-D4GyCKbd#Fw!}+`Pf-fQ9>F z;Vwh~hlOh~Lc2uxKLmipLeIx@1tlFp^{glCDA_Q` zw|ZklT7JxBT4L@-A{#XbNd>Hf5(%WVGk-!XoO3ph9(eK)V~DVe7KqIlRk01|HL995 zK2EI{JRZ-5^d#|UknrIA&l+^1#&1`6y+6vp>1<#B-Dv9O= z1!fx=H!Cw^_R^wBFh4RR$}{gQCC;0|q)3AMdjiVwssJ(KW(N>cz%{UuoIwG)CDGRn zQXj{gHRpO!m4a&L^NSk_So4ds6NA$dGf0aenTZ)W&Nemyji2(LsL6{;% zGTaIPF@nR!Bp{Fq6DLMukJ7(#Wos31h4H4Qgx81WpcXl=7fM;Jjlx_`+yK`WKnBu5#l-$o@Or0X^`Rn zw~8~ku7szdpdf70xz5bo=21a%_ek~ka!?e%9UR}7>j}WIXgkZQ%Z9#J(BridVt>6Pt&(Yt;fN>Is3(heUGV)kMD#uv0DmLR6EZBo$ijE6G!YK z*sdL*UFP^9eUUAiyF4edLI0@A!Ya&Mt=qjYM$?k7NvWAc&AMg~9==3J>PXhc_mnwy zC#0CSrWo+uy3p-!6~U@kUbc~#-rr<(!S1(GM;@jbEYVd?=w#|;FXJg5bV%(%KXF&% z^LEKiv+6}}c-`9Udm>fvYWzv^8r(+H@ojvtU$<7-!Yx(83ox9I-` z>z-&B{217~D%x2>0#x?85B5Np_?a<;u9Dv^NrqzA%!|J^g-pD!Jy3gQx-s}YcaTLr z^bPW9*36TV@~0vNU@>w>_Fj#xCHsr_*%_k=Tum%@L?QO1=k|0I>_SR`7~jya($EoX z2)h;X8fgD7cVsJ=k6!E4zlqq@CjU^i5jFCA z&Eq6`C-{{mmzy-%^}{iGZs>UK zPzz&!LW%S&1_e^`jB4i{O%CM}J!xdB8x1|FcPbvgd+cG#I=R!>9rX7JcS59>0m3F9 z{w%uk+>%-c5;%7>WDW!0a|_Z8&HvVIHgmq|uEykmA%aeDbyARih0-6}TQX+GFl37G zeszRwIZTBZ7lH?W4}x#2z#GQn+$9{A)dFp$M>2|?dk7RY%kc&E{sO1RY!u+J|Epux z2>0UNyZK3#y@<{pV|D7QPsqjxxkV*PuOZeHyvjKG&jci_yF}G>uP8&{RZMQi3+Y9K ztN|#%8SF?-4=M1$pa$0VW+m2pzmli4+^pT+C)8gbS3u7ShQ)YFxu$NufnJ%76?8zB zAX*mF1A?+tdb5~mSwA!q)-Yulr5?<3G>6rIxLfi1`#0JblZ;QC!9sIS1UtH$+zi4H zV)ZcBz`XnQz=;GRba6V0+-Vjyf28}yf{k9RWhB<*=Be_1;;-A>3#GZzUo(%TUo8m+ zTv*I>M8Vau2ze5NtC1bx3_nGS?NDj6Y@8nh2CU-hM<=FCLWb`Pow|h2xM-b`d}A`< zgR|D7g=gyn&5vI0m$y6~_mC+saRZ>+Clwukz<~t#RXkK@?|+Pi0AidEwyW=o!xdJx zeO9{{0>MhmPHR@rInjwSg3mf%mA7AX#-A(|NWaiPopc< zkrO^$+#r=?xIYpJwZl@)Zxi)>m%HS1`cXN|>o zR^DkpR!YrC3agL|_+n8P({h46-Du$eKj)CTk{S10s`&Xwq3*Ab#!)h-I9dbG-2E^{ zjkku^$Mvxi4QGI~e7?HT7kV@5U?Y~IeV?0h$T#U1%lRXX5ODr?l@H;!=2vpbUBX z*Jtdz98=HFCuVZWtu41Q*dXr`$y+1D?0-$W8K|Clq1L8>4-T#DQqy}ZulJDd4ICP~ zMU>toA{ek{Eq}G2LfMVR@4Q>s;Jom-A({Q`sonGG2T$*=e)U{E_`W@g+4>xrg1yK# zu=rzwG_hL5sk{7+TFfqT5vF-9)UIo(OXwxC?Thw(cHMO3va0{M%x1s_YpUCln#WI5 zgM&=omsbCUFa`hSDWq5McP;5y{{GxTL$|J!5uaHN`u)4desauOR=PfH@pZ9whwRV( z_}=fEX~ki?zjJok?Vt7Px7F~UeERiuD30*vsPQoBq6g`kly}6R@Mjr@Wt6WQzqL*s zU6whrx!}x-d&i>m;opk;XmHP&(7&NJdnPM?J3annN*rIm`s)j3zhcSR`oxQeyar~a znIL^m@%{c@e$vfvhot=L`uq2DF5FkWh(Vn!y>V!04-V3ExP}gr z=D&ZxkKVeYF1|8Fq|MKt-*7Y!%&+emTi7`2L10u2ES!T93mOUx=Kd!klT!UZTm-4U zaRwKGSsQza)%BLuZrpnmmRi#Cw1o}b z4WAzEK5sKUfBtH{v9h^-!V$aVHIs<3urgB9v)64A|DB?mK8u91#8qlzXisgQ6K_Oi zoPRBN9*or?$vdW%fB?e7V&w)6{)a8PMtFVa7-+WiZYuAL>3al9PCf_{|Hit{Z+l79 z`>t#~USILvS(50v22(jZR@Jb=ruthp_$JFMisw>hvDS7*YcIw46&@hJbc%j*FiyOV zT%pc**(Cr>!3*UjTBhRTHw4IphJ+5;T&DXh{Zh2w)wUK1?GiGq73|Z+s;^5{7Z2;c z25PC%C#_PD-)5_Cv=v_cfb4XMthc%=B(Lh664RsIkWn5L>+5mP5A zEGw0&7)f1vxJG*sp9`y=A7m#IeJKk{75JflP2DP=#xmsNErjsXrSDm`*@?PtwXK_K zv8R>>!=n!EuoMpi7WNwlf~c8d+jv21>*oSOe2?TPr$X`xFrgr61d-SS8WYtN38dO4 zyv6Q;ZWN{{S=dK!4Rhl6$m=#K8NTQ5yV-8VS6$0N;ffNL#k1{5T@>!3yH~HCANLtx zlY^fMB$y*T+%^ch9@j7bsTN0~yo%FBnYl~z9=KFS-nYG@`CLh|G;iAe`_rn@YYMTa483bP2tBkM~I#28)8}9-(JVc8k9<5hS+!Aa&utsGMtC`p)=A$4cHUl z8CYw7S;I^3nkxr#om?98LwgcgydGv(CVd-n)>p^Qs+eej^wu_Shf%}*1uXZogFzo*2rc`yC!Y}j7T;dK`B?AAz!7b-ZJ-)#!_PU!U-M@~7Q!V!!$(3}9)LFNQ zqGe~d*H14AiaqAP+9{}?IUsk@o8z_%P7kfah6AhkA}3+HHZMM0*Yq)aZYUW|_;pLE z#bP?ieQ?~kC2Ba;r&R&$)>)~ao@xMoDV5{7a{N!aDDS#nk`+{SE7ky_M55Y3m9g~e z4IP3cO~f3Ar1B9^CPg6}gKY#r73uECr1r|Zw!y0(th+g~FEzeUyPnokJS2SVn9Oud z#JT^}$HLu(>jz5CTkHCP`{Qk0Cx`RWm=5VP)*ftZo{!uR5{t(!ob*UY&-2?@7Cn1u zh*FtTZK%JM5#?+AkgyPmqrzMS#>rI9#j4LCwv4)b2LtDH_l%Y99GUd~Ot~B>>;Ac_ zJmuEm(4W+bSivdLW8m#I2Yamqb?HjpX z>0m{?4l3sT@|W5X-ga~vGlUY+v8wW8CO!l5-j=&tf7o?HCp|JzShiEIkELAt-14UI z=8q?(^5$#0j490+zsZj*dsm;Mx9cq^Iw zMA9p9lNirgaby&+rdOnQA(Pr#a3g#!zNn{RRq-?y%4E9wFfB1wLLh0{FolwJ;WVS7 z(7R&340ZUedP+6-PpvLZzAP@G7U%Qjs+qy1^7A@u8l&FnTmu@h9c1Gh^L#fAIo;3#ikm>t%op#S#dJjJ~4R+H17s>Y9Vmsuy0H;Oqq_YXc}75CrC z#wl{n-n@&yuUNpViK_NCJY%|fi*xA{djL<$cbchceGYv|QP29DE8lbct4gPg+IRV9 zZ0%<*85zA!E+5vmOFzOx?uc~^kQ{^jpI4rnebwUOr+pLXyDRv~&uE_oa!YITwA`0g z&vK-ga+3zJ#UAo#ynGw|5*gKC35M>de@1u)Cw~0(Kwa=gt$psdVeORD4P`F{Tte1g z`=NC+9|XFG6)r8g3;Xk*oq|0wIuC}LYxvN(i0-LlDhF}wK82H#fEZO}@4&{xPD`Pc_N9^s(+T8S5C$*-g=o<{xyZ1&R+hF_cdgo7t zKic}2DK3iao>$mzu>o+rldK{@L0Iob?Bon1a;5D7>qY+DvuBbwd)vAWcv=;|m8Wy9 zRmuPUZhrJ$ETh}@i_~P$y^P3rypzgJq~{VNud|a11tcr4eKb|P{bA?qRAHj>>!6wF zjh{vBr`xR<=_Z_67rvlYBdv5pgeDE&a_92B?wNiEqC9)U>iM zyiWfJowz|@*BH}6VKX5IMIvWZvCrNun$Um07X7y-5_R{lBjQu$hIBx|i!R0a z;NbRSf*(G|J%fRK0wE|efC2y%HN+nQ0++|jctQd;;-Bh)qw3>P_yiOIh{#U}>WPor z0A#4~S-gpn8{lw#K!%hMU7r{y0m#t6NMd~aSbTC%e2`O8LSTHd6Of5WEYVLS=O<=t zfZNQI;&~I=$Ks>wllt=G1N0M`j^dx_C!$En#ri1&fhiHniM5F2d_+>|QOb+J__T%O z;+~YJJPD^sNs0PEe0~aTBYrwCMF|yK3w0I>&@HO5772(w{1jW)9&5UPf8UA!aEuYs z7R>W@ch;cG-OK_4J>eU*-1ee!j*O!`BbLCR9Z9mVt2iznhI~_&-;!|HNno3Hl(+=I z%$?FrKykWxS4D!j4mCU@qB3D{)SokK!Wn2|EE0d{D)UWY2$rQDp9Mr2-Os)Mq{H!c zpvOGLuD!xn+<@h1 zO9GU$Oj9=RMIwn1B`WJ%Pe^2Uk(*Zu?rthK~h_DurYNp6w6YQJ{Cu zIi&_jhBIws=Iqx3|HVY4GAUphC@I90ytQCe@q~~`z$t9mA(Gb;Qr^N5`)poSN5|te zx9iJ>;$V&A zCzxfiipF*@vntrRKI8=~+{`EIjG?dqnne=}zo3e=A;Aron4j&V=>Y(6k@>=9sY<+A zrO=FmXde=VtJLk2~QQVO=`7}=3k?u>18JoK+T{=@TliTjHybZcxhnG3_i8j*(0GFReI`tY1W`pbsu3&O za_T+E^-9$GXEW(OfOXg*ECArq!2rsAOm%(mh9zb+-d_iQ_8b`q_H6c^sbTwW|8dpD zlcTQbEen5;#CUHVG$UhTy>)l#6#4D>soyu=cGKC|;exG0bU4#^*lHr-OJ-`C@x>=!Cdp7SYuu+{S`SZqNnp#EgE5-QAFTmKyz*Xxn_x8yx~+ zsxX$yc1s)4yhSo#GcV2z?((6+Zp{j`dy;dof>!12b}RtQ+b{os`E^K~4-xGG;93C& z0l$mm(piDSo^dJ=Ovc3b1M5YD=NTXc8q^-HD4qc*0#a=hf${5uZzuf<1xidS2l%Yc zK3IC%N+g{JQErZ^?KfYTL#)B`*-lf6iHg zSeaSid4p1PJ&&1X#qnv;9z=FhQg)g7)deIA4ef$qQL#p6SHdd6Eb8i#Z$6{%EHN8> zhv+w690?hw`{1Bj1a4K_;GcPz4u<6tN>Ny&>!|2raV18kIV_(d&>$rx$daYQ%92<4 z0w7jDG^$h;Y!tFt;9agy6ygUo~uJjiF` zd>^OG-_Du|Upg2mq7HD)RJu|+W*D76Y_022H|c~~`R}-XANNNd7N21#>!c*TABh-` zx>8 zU-arglAH~Bpmh(d!=U1lAmZ3ce;Pyw57jF|qA}>JC@8$8*+~QbF&9~4M1`^S_>f?z z^4A$|NJUDc5(#$tnEYqpHF*!_s*c<^W>%&#E>%eGQYBXywUsEx|4Q&AuwLOq_2pO4 zfp#W!HWqhJIFFwspVnYL2H~ST%Klw-8fG_F-1@KMf_~k!Xv(y4dw%2XcPb7~?mm^U zVw;Pt@?Hke9Ja%SILQzS)8;sHr?q6Zrtq-WfQab)@W@PosjPU$9$p^~IsB1*=`~ijd`M;#1^BGW;@~{{_bo(||fM z91jh{Lm3R@^shO={uwxxF~Wy;HaD1Uh2}a_-*w%47r9*g-ZQ6z0#w3S?E6_vo!LGh z0myY=-2hnuQ!zuk9IGHj-YYB9N<`b0DHj>7h!5{*%Y`&J$aCpIh(&NiT9L+3IFR3U z<$ce;3w`(AZEvrX0Uy6NKkpf;=uSkwZTWZ+z4Cb*e&K7;b%FD~obOytzb9Pz$aM1~ z(dgafF4|wxJ2siQeC_6csh`UCKLR$^_StDee^lp;hAhq)@wtEI{;mIeudWSOh?{tR zo_&?M{S#1{mowgp{@!QDy{b07niuo2YjIVB9VIUeXrO4Pwm#8=;#R~;M>Ti8m`ron zv8|a6vS}NyuJMNk6t8d@t=-#M;~8NX=D&6j)^vnvF+VOJ=C0mW{`zR=Yjb%z5B;kT z{UaKnB~l)^o%J<&^~FSOJ>u$m^pnrTm9^wn zIQs)x%KQUS;R>9Azx`c*RovF7&DJy3t+BxtnHI<-ZtFF@$sWEfQv%T;Y`rx09~s;p zr#Fr4G`$Jmnk$7U6Sv>XY=11>o?+j9N#FXmv-N^b-`U=orKat?U)kPm-Tu6@vq|4x zZQa^5-q{)4eY3MW$G$^P+xSq#eQvj!F_AleUH6te`aT2hs-+X zzVn5B_b_c=)MQKa)Xv(<{_5btit*mq&hE+d)}{N0V=Fu3S9jUUcBD-FG5>9Cw;phr z>@4i;3!mCYL~MUw+0vhIzDn7jBErB z)h8pNFgiasuDGB)yP~49D!Z~Yp{c&5x*@A6wKS?WKB&8-zc0SKCZ{fKus_>3%*#tD z3EZmY&|olV^<9?IEHl2m;&`i_9Z zZRSYrx#D{{E5rql#<$ht%+Ie|$xGahxSK4j_&#U*eR2RKn8`3;b+~5_XnHl7SO5OW z?*$#t^XJ)#%3+l^iyXEKyWI0%IMe5DlrSV@6-mPXhl^m=Wb>-;$>u!SZnE@7f7kZ= zp4+lxull=pKT@JuM2rV|_E)P#t3T1*Tszh#-&clg4)AsU+*~95KM5HlY&$sc=WrwO zLYdb2G(qR-wwrO&slkrli`zG!l@31p9~eP`Muc)Z(IV-+c({=7Lk_mk>?;8lVW)Q- zKgEV){(mrnQy~Bjl=z$=p394YdMO`Z6yE746!@;v;y__Ao+MTXHS?)*a`y9P|Hi5v={ct>qDd|9r`Rm@8RKy1>C# zq4>l8Tw0OQNI^w`uRqV%lED8-$U?tbtd|jCN&Ha1g^mZwddBeS%U{MM>SEP2xjvg= z2$3)0&|(JwOgCQa8iI>pFpQR?W=$l#iw^~=E7tU*!0};!hd^!HUmuqBd~IyX(f_gJ znyrUxhjR2MSv&y29wrf(_z>Tl10=3Wq&~dZvG_GC?P}i_GoEUq4hJ4h9;&HJb#370 zcpDeR{bghX*AJ8vV;|iycX8&%j~|}~NxWrga{cfivMv23x7%LH4P53Z=XGVLQBGZ4 z`v||GppktdpHYPu7ZdM12-faJ1v&F-?{AGSRRlRbkvUiJv1n-oi34xB$nBZ!(ytc+ zt8sX6f90$$FaSstS=Orbt42NAO2dK?->&*mX7Oh~Sc2DArm9|A2Ru4^`UbXHSJ+UY zVua3d{dD87pliKt{JbtfJ(h{vY5AL{=`D28Y10&49Ehu2I?zjeSaiEnN4Oxh5_^~D zakxns0mp1Pi?7{ot0{pH+_}HF5DqC- z=WU%i`d_s&HP%>EC<0yYr3=@ZtfZbhV|Xzq>7IHbPXz;vg0wk96y!!Z@LM6yX6y*2NcI{R@DOwDFOS61iGsr=NfZh4@A%_s zFwZlIycVmoHxp#q!;?4WMrYjVGDQQpu4nM#>aR0}>ovxX)qHpR$hk2Ubo&bE z$^nr(_jk6}ZDtnC9yh{su64#DVfJ_!MZUH$ooaO^aQ;*dulgHj z4Hh*8B7DI90$~0s{tW5vmXVgqhQV$MjAc#`bGhc)0to5HJIr5LemU8%KKWmfCIG@- zgH^u<3+7v4Ac-JJd?fI#34n2Lj7k9Bk$~rYCMl{C>>-ii4ZFv1@z)w7f5y*&Z$%7DPw0Oio(V%+^Fc)Qr6+ zrmw+V$=w!oJJnZFdmU~}7q3(*VcQY=F4B+}gf3m)uS4q<}Dw5OiQUE zIYLPKPMzW1p-WHN-7ZSoH^#W$FI+KuLceazbNL!pW~uA2`&UehvX}mVn9^f~ zuU{&1f|?4UMggvKsq&@dyX_JhL+nebrko_t7)6)1Y1k$;D5yM}eFF_}VVp;{jp3jTr|Sl_ znt5F)hj-pV$$G$>oMFIz-U!5O!yfILS^rW7JS6voquWkrF+TrV*R+{1X;?(}mA9n! zx_dj37;qK@IyeA83rt}DAl#Jd<3$8Jwo{xJXJh?U5IpcR@=Ow8<%=c-G~h>slpiM; zC<9yucAE7YMIX0XA92q;B6|EhhEV8dUV$3fz)R09rg?vJ2(36c{!$QiLn%g;tpgiT z$YAz!d*4pJUygld&<9*rEWp%x&Vr?9!N(tDVK#jF$9)|@@vyV-MZzKQco*CujRRGq zm}=%tn4vw+(-%sH8c$7lX5P%QKiyqF68mCwX4?45Hj@lQ`cF@#91nLVO5w?QQSF~# zVmAz{V9s{&vjAm#VMY=F52W2AXXZU6{8SB56udKZc6}+ru`sHC+9o&Y?N-8QpBPJc zz}r_nUmu@tzCxZsEI~XNN<^v=NvTrc0chg(pxm*8Q4}$|SMSEJzbwX2Ll62f(6dga znQ_-6U(J?{fb&CA_isgEIO&q0U#>sD7LDXxXo|c19rB#~TEcWu=8_9524q>|@}W|N z2-7tKkjtrxJef1rZ}gy&{DIqdtJb zq&v_7(4pb;lrd7ZE!Dy1LuV@R1W z8f%yz=dB!nwKDi7f-Zn2#RnY$XeywE1J%eu)TlztC@3*dfYlSCvIlhSL$vndeHVme zh<-D7FAjZ)6Z;Wo&6`-fkSP8j{z(Nqu^ht4^VWF50;ob4N$^@HfeR#C9~$(DElhGY zsnkhO^XU4iF$+WQ7*B~u-MlH!l`-Y|0(Z_r8A=?zpWtQ$Bkj*GQx55gjH~yusSS*7 z`xLM032`R}cUA;qkUR|4ROjN!waTTN90|l7l!Y~23&J= zx-m~|oLB4`Bb!BmG5%t_u?QDW{tFnmvnS~h2EgJGzBK4x&8BsJcItmyMIlVBVL-in?i9|{x?N;7FEMUR2KNe~+>!go*jDw*WI4CO;3_94vNC39wUH8J-9jn)-(_3 z&|r@ME)Ryo2!L97@;BzC=#XG&Mi80=amPk^V>5w0hz}lI-46C4z;y_@l00y&a!3La zc+>#VLFLtnLbb_WDS=7t36T3_NZS}Jo-hA|H+K#JG%Y|J3GlHVCU-Jy-5#z+%}=+; zyV)D}b-_*K7P~Pr+O)T5;E%w|Bc|AL*erre9w=rcvAq{l=nwdks~d^|Vv^f9OqH05 z*T^6HbDF4t=(osBb3}E1L4^)yq?F~!c|L^nBSiV_zV!e86uUYrco$}B zd@m*zcr&At{arN@w>Ojo-MktUw8GZ$5nKf*Q+<;!U z&owgScVYy=X@DlBV9_P_3Rcpa3{%E|fAzvpw2InAn95RPhGh~p337^&xTl0~>DL;J zN9pKS^zlaz7Pdb!%&DS-Kxitz^hBN5F)W?{XUD+hr1EV4oK{m|V4UFrWWb34|Dlrg zD$qua3Y?n|W@gD6cj71Vv1wZHtGXhh6H;U@@ay-(02*1npYaPM2U2Ptkt><6cgXbD zbt@;%UW%Djs^CtJ>1%9%SX3d{FEo?T+=2!vdnP=QlTy!G~!@enszYR`6JLC0!SIn-Jx>B$VnZc&?{sU9{a|G>-GHACEwM_WRzx z4E~IeOOBhpPYoorOw;ZQ2v`P(CP50B2(ARQ2;EB{ zD1QTgxI|^|rv$K3aaRJR9R$@tRW^PC>!6^l>H_k3X!WOfShGfUVDI70p3@z%57fH4 z?PV1n0{8F8{ECwK4i4jg1EvVRU)X5!sj?E?(QFID^$GnQgYOIU!P zK&RT#uPWPtf#sB!p?-pIiR&AeuD~7@sqxE(8W*}foYV%2-l&YfP^qet-<`FrgW$JV zxp*k5?LMj-*(P8!weH8Vy|F<_c}yuh>VHp8Z&$xK|3#|#4A|1jVcSTof^L0p2_je3 zj1P8zFTJ?pgOmQaf^agy4wMyk_x(soFyk9;gAhPb%bAxZJN>p~fHtg=4(QcH^ ziWq1n$3*FtcKou;>Mv~zqLkKY-GVos23WA+E#QW)@e?*3df%(}I(K9(%BdDV-mCwR zt*T<`xuRREu~d*ZeT4J=88B;N+vc#H*Wfj!Nrqda zO2H_Qb7EzVOZvG9$W%Q{2Y{QpHI{xOUqyj%4Er6=_E8m} z{V9Q*2&H{;Nut#U`_pJ4q>)%QE^uqETQ5xBW|eji3X~SN=vV*uv;|3{y|;vhBB0wA zP#o@Q)qcK8IW1cKqe;d`RYE0W1&CHchnUd$b6ME54;DpYdLmEQDrbxpI$zh`l&sg3 zpB{d=A+Emg1@zAMM#l#k+2w~eP-7{q!`3ZhTW+d~yz!DUtW7FxGIm1L2KK zQc4su{|atPtDy`>N=cW1>#@NnPVyD4%FLL7tV}=$3uW(zC|i_X2zj}zBG1^P!I9w3 zdkKN%QgUpzXnJ_@Nz9nDqvgk0`zJZjnm3jPdzQE2OoCev8|?u_NMKEt%$v>^ldq-^ zG_9_Ss9R7XmE07k{d8LH@fRKXR~dizd^}U${T=-n?t(fS`yBRJ=NH+ge?_^?mj;RF zeKU?Bd11H5j$quS`xpCiZA#$vQJHGwEKUp{FKS6{*1dfms8<-FkJBD-WiBz0PK%ydZ9+LiV*w!hgu(9ud5;A6i3u@Qj zFDcYL^i>$Ohd$}fU5a_A@cZqEajCP#gs;U14kSr zI`u?pAI>P;1ykw9k>9%J@;$R)r47VUrkV6`*{?tH=ODmyBk2*4J|>>!iYd~wdXa9% zMlAA)3*Sn-OOB69NL^_zkaJ`qCdLm;?PFdOYGFa40Ai739i;@i_N0Ds!>CBhW8v)> zC#j}B4te*vd^U|rxgLKx&61F@R3Yn2eQJ$;ZT!?J9y46<`24o;Rk!!QJ{@+YTVM0u zoZZ%%H?esddi?hvi!zxu6b!;pHOC+bXq@=a$t_83q_jCo|ND;(2xyoC746B2GZodc z>`Woih*{B78En;ZFpNgrpvEwJ^4r>*p1YWW5~UK4DWae2%+8PB`|NcF zl3+qSqU1OK+Fk}J9J5~?2(;*ai}_>6Iw7bwT8h%LZyp!6U)@yOOuJ9FyrzweqV$?g zDEPC|Mg*68aL@SyFy>Tl^y!5cEJ5`ZkQmvq3K)|NYKRSRT*!!Khlt~1*wLZ;x6V0D zebRzz=3_~xWN=4jns4?fcwt}s9y=#TBWNg2`GMvG_Vcwz73@m9SQMxHgzt!;dXIUk z0Z_i7rGazriH>2{%tvbD3T>$hkMOk28)c|+hV6_55LuKY^ufh(E@p@iZR zE7(t;)Qh6EjL+g!d^gIY&uix%0ZCX5?7EN=ZtuD9{jcaxr5gPFsTM9RId`nw-o;AU zgf=ub+O%-MT$?)%m~dyaZ{9&bqEq4$fiCY#K@euSaF`ATpaIg{kS!Sh*#x-*R}L_i z$jfbk>Y$wI=H^&#F|W?u6z>unaXoWK+_tsbT-IA$fc=>F4Rr4Q~8{@v-H zK)Zy>kMip;cf<=hUyPhUL$3|B4gU65x}lqo!%cu0B;@q#`vZ}4N{~urxDX7D(Y`F^ zBTp4vWDTmAI47|;BK)!b$9S~VZo3x5vtIf@qgYDZ>l0=XjdbtNzaHnO>Im86ZuYpNAx2i6^ zYoLks&8)564lyV}-i&{G+S?J`HV)psg?PbR_#jxJxq{83o|#X^{+g;njKBsdPM!QI z_R6p@JuYB)Te>>ID8+Vt?m65v3`>ux?_;rP4SX(LN=~#MC}B1&kLvdGN|73_;Cr1g zvQL^p&D)8wCy-!bSkF}7Tegq{T)XObFExjK>jrh+yqOHrZSl92qL9a<+EU&bDQ*uX zD#1h$Y9_0&nss1hg+1z32TDkN@BU5eZ#D_Ed?E2X2W`G8xqkuzA-%a9k z+d<6@J6t+^LliY4rO6+eNrq!%L<4=))`p?T&zQ%i8vD^66`#4b4<-kpX8Gq%YOno= zq%ydNx$lR}F8^>q$WyoY=y#Y&+2s`&BkA_jj^+}a&j>en2yZKHSXA)=KUn39YpOmZ zI{lg!GdXq8kyH&ickTWXPvnGetwM|B0m3ks?~5qgX-Xs?sf!q*U3H@xLjm(YFgBgS zz!NY4=$s+50<8)?qh5;FX$Kq}J~viih>(2KQ9e8;Kb{G9TT67VR+Yl!x3{{!{J}Hd(FyA zN~T7gIQ9q^kdXf#M3owOCc4Pd0m2jidPSUlk;rd*W9}5M#0|DGec-`5BbVQdV?SYJ zI$_jH%gn@tHoBsPqJI(0>*R8eRC|l^R(WQ?=~PV4ja%af)H|8N&$~?IW89v}-4+v_ zWAA-69Ps-sT7_!c*#F4Yu-VnJGx8m3>g;ECwc|x<>u=QAqG)#7qDIaLSD9~#>%AvE z^Uw={Lv*)<;pTBU)$DoHV{N2R9G20asF2W+hyrn-;)TC3hWD5(PTgWuR-hIe*oi2( zK!QmBlYpze+0pt^Zf+M814c_k2>?xJ`31B!UCZU_oMz*A=e1u16SU&5+&nFGTD0nY zix$ck_aL^Dn*rRSB-?E%iT%ufp+iVH>osXF`-1m6X7EyhA=OS8V9KGecm9$=JA>w)ZB5#KnDR4wF&Ntq=_@Oi!Ig01gNAd$u zC1R(j%NU4#xybY$tRvg};q9xZQV6ig;JHplNZ=B<%N>)||`$eY?DpNDG1OL&9zkWeh?>PIcjD@V_T7VO#EhF=J%ll_eXu_T3RPP?nD zZS#9mM7+7#;w9&V#~<5c{Y3sh!tN`osV{yT{7EB?5)hD10Ff$!m2T)AL8K!_MYuR<(H5iuYlARs6xMREB3-+A9PYu2na_va!PIoUhk{p`=mT*6yc3C+@cZMvNQ-&OtsK`E`85G zbCAS?h8wIv^5cNz&qk-CzJkqwf1Kwrbq8U^u1rSR(XvCUEjU@uUQU+Kyla0pBa1x1~Gk!ysWHl1#*0}8+k2WItai*R7{vv24q2SmdBAu zi(V#{BG2}R{@XijR|&!G;c#bFCetqr9!Bt|SoopCtuyYB(X+awGhR?Ld8&i?blK_9 zHjGMeiN_mwr0Eo5AS}()at}!y56cYGYqVz%{0t-d%hJ@Ve6|~hBJRc$gUkfgojW{$CWF!jilEE0P z^Apu8*Dl$eDTJi{!o(e%zmXh~ID5sNBQlEy_R7q!8SH_*e4cdq6ZLZY6YIo%jKXD5c*_+uQN-b`L(U8xct=3n z+?!kRVV*ND+Mm{Jb8Iv6-eN-H^Vj*O0XCb4Ktj zlh$jQYoJT%XZ(Sr=Q&_zjnDq)kZ^zUwZK)`%P)c+J%BHiK12#YmkF2tT)lcAea+)? zOeEF;Or$%JErSCl(tl;)6Kisl2yOSPs=`-PkJaPDp2wRyrM~eFJP;81_6~6ridde# zK_cNmb}B_XswR#I4?#`-^Vg0AZd}Jbi3dRP(uRkS8;N`89WY7u8TE3$QW-T$6>CMHC<-f zZ|Y*%hQBeuq;@+?9}0KHsMjLZTCaqubEr;fnHPv<)&I!qaWW~FL%DP6RAf5(?L!Dx zpq|hi={-$%^_&HppbK(18;Sk zA6IT6U4gt-CMnKuL%Y~Yg}RWTdQ>xAjI=Wzj=Ws?%RT>TOj(P#TC{j-awZEF9f}w@ zJ(jZKdJdE_Q>%-ls~^f&?TPX05}+Hs(tTuj3mIyZM6U@HeMj*FL<{v;FSVw{vOslS94r&F+%- z621~o;i?`E;Si)qb@vvh5UQg|)f{@IW9=11uWO0fh?&>&dGjqD%ZNMTNSzIi{!0~c z3Otrc;B@Xvv-Xmyu@*5*K@Na2BXYc1uC@4<`=z(C6JPg?gnovD!+yfeUD_M5dCEkH ztPxZ`2_kUcxwE6Ar=z1C-6>Cm#IbY^=yl3UclKC!_MtnwxjVa#I|tESec2sx_q&Fx zI$!H`38;4VWOux(>g@a0Svn;8@%W^3{kU_as(buf_ZD~8Vs`f@m+p>^u37(%*Z$r6 z-#Uk^J3owf?4i4Ua0~v9?F4vw=&F1ERdvt!cYju(jC|)U78uOIl&U912{q(yc8IkP*b z2DUYWP@=5BRr8`jj9gBVmRyc8Z#d3fGnO7AqP`TMA7P}|>P3tu=$GfN-E~d5w{R`_ z@{r`544z*4ZTJvx(U8lZ!AFXBoEL`NI*07^hXXx_?G%T-Cx-Dk@TYOZ0g`g|0jJLl zd+Conx_oE%-SDHF5$_xZ|C5}d82zEd>Prv)F#Oxkf2^RJk4)vy(T$>U3%NG*&9@+l zFact{S`|zTk0{#gldk8~Nh&WiMy3-$ayC2@Auw?xkfBIFs!Y2oS(os!aQ-B(2h#t z9ZT!oIew~KZZhF`ZZ^#jRVnUMq%oY3g~Py~Vc~jFz_KN*zV!-}E2~{Wo9=JCnXSH}7-?X;%>5o|0w@0~B zS6iMLNc`>tSmrgjb~FTbNUdX^n3b#k87%1+m%WQ7=N+aHcNe=Xm-rXelcCE(hIyR~ zUR8AZb(ctVwjAfSmoGAYmZ_~;8|?+jd+{<>%hdiCwr%@ssHgK;V$d17IwQHbtdy{# zQ@cVr{G2mdrFxPQ9`<>=ZN=2>i+OjLYf107n!I-8Tg`+o_oP-I)Zz{DZjFm*AFX`R z45Ha>uRdn{I%>B(4lkDAYcWX(bFcmCf7&``myH{qdA;WBvq%m+tshHRv$I2pU1v(i{B}th@%(T%&5OpUx*sq)>zux(Y)mApO}(d8PNS z^Rq`A4Tj%}7(o>Y-<+tgl)tX5JB6W-*R*WE^&4*b)k50xHss0c4vTN@FmCiRt`ACW zy_H&J58g~?p{Yy;ywZ}t$h-NDaeFCmWjJATj1h0NQdIC_Rn=;xfYD`{@%!%f@^FH2 zYaYZ+0uNdJvTgX~$A2Yciz|8Ge&=mDZf_c&e34=JPd;eLf{f(Rtun4W8(0kPUP^GI zG1TpH-^>Fiep~H+lhe7iFuDClYJ(^7huGazzWj~Z?k`ibqum2})Y>0cAOHNJyS8hc zL?^rRbzN#j@=4gO$>r-e_cZRhNb>IH z+`sdEAJoLu)(snT+waI)a*|pj$?e^p`t|6pK2!cTd;In@*Ix#f8ZHUDFSmdBPyMc9 z{nf_!gX84qg0i+D|5jk)L3EF{HvhpBe)*%tE$6A#n45>GJ(>ijgPQGcJ%2OL=YLIO zIx4uRmho@*nc?T|tulk}hw$@9HQ$d$e*XS7sWMrv7y9pm#>rM)-El_`FPa8+BK>S# zeDyW&`(`eA^6ShNXL;w;pI47j<+U3@ZKF@?mMWRH{%YlIt7EZFP?(IQhZu`ykO0>+v~R{@-S>&TRp8RV8a}sRxF#53EGYod18= z;7fWY+?Ed%ZaVS@1*)s7nH%fIoR`m z%fa#`(lY3{Ixj{orB z+W&U?MevmyZ0lXx6%+M9FZJzh3MO+$L!zp`S$vdJlaP1 zU;`9N1*CKv@1`VR~))KGy|?rwyU`e3RIFa~XJSKNr6DVSYw$C$MP7JsSPqj_{J zHCEPhgQpRXYDx(SG8@H~i$nyPuv$cG;%$wS*((oNEj9R!0E6F8W=ETP{2Qo!O%BYO&X@)sBT1)l^%Q6Ik!BGqM+|jF(?p0W;j*ewfpD)L?<; ztQ6DMj%meZrN*7PCG`g5VLt&V6&{E}iJU(x@<+;C1URof!7B<0?%xi6U(wrvm7 zEi~myU%2{-iKJRt9SXBJ_UVW)`Iz}W%(UN_`;z8gDkqZa6Vv99qu8pmmX1FQs ze^*yiLj%TZhp(=m?R?S88WectmM`bVLlC)9+7|&1yW^P{-*vvt?n;C@Y~Dou@I_4h z=Z9#b0RYAHrW;kpoG(cKv9p$Q_s6JsPO+|zc#-9Ou1ZETPo*jvD+!v6h2o0LAF0K( z{2HlYx&%Nwe>18vcKyr?MfR%gDC}S`|NM8)WBEIO4rSv4cBJ(mgXu?^zWXy$Zt@52 zp7i)%RQ$Qj%@p`+(DVE8{`&`?6!*Vh{-kicm7O1Si1E7d@9Ccbf9em#b*`6Qn zH;H`;`0wwo_iU7W512>i?NPoeF3V8;&%`Z$C%4?-kR|(lRapEfKBBPvk;Z7t4V@)Y zI^gfbxdaZm&3@SD546Gf>L9pn@q0|J1}={=zGmCS!fJXv+Ye)^h8V>_nXH4ZRssFG z?Hg+0*(BAF&w94V0tb~18A33#4fc?4q;pA*8bEjMGvd3J3bJy_A6m@^3ODaQc=Xth zN1YF>7S(zAX=13SdJ(_CftGw`Q?XC%FRltk-u)F~;Cb{jAGk^Ysxc1An*}_yzGsaFwfEA?(O=A(6lXv$Op>n3V z;-W8|qpQr8%XAp3Zg`5mf0?ykJ%JZiNsoEo+`eB^jHR>rsyoxpwG0#eV`Z{6Hq(8y zUq@uvywUptFhdmM(iDz)kIbZ$dyENb~rs(oxj#ZdRXbA2eO`9{MABXs3ojtS(li-XLseT z^++FISWURpHrNDn$<_O~VfDKm9PB2M_#6SL1RJJw)owwzSRKMW;#?E=3@wBZ*e&y^%-_u$rcf%_=E4u1L_^G80@t|3&a2$@} zHC<9%cvf%5We#d6*9N&zA{06cSng9SxmhJ4IV$%sT?~%M^H>B+5&)c|T_*i=HHSjm zr=Bf(=BpW*-++*yEEao3unP;ISt5PLq!;G|K0@ZF`Z=qu`pY@>0N~{}k$D;+IS0O{ za*oL4L+j5LVGdPjEC9Lx0)aO%kvtTQh87;4rf9pU2Z}H1}3yyGFP_@T03X z`)SKe41ld6G={>{bOn38Z5;2Z z|2t=Bzxg-4D(~l9hoh~_3H~2U;yoWbo>=q)2iJwcn6KHdd=cK#s{BEe$Vvziw0PB_ zSw?2duH(s%;2OpE62ZRj<^#X`JgZ+ciHCUgbAQ}4bVuvwZ_CV{W^)#gTaOnR{%x?q zMhYNr(4c*V8BUZ@PybmKJbbu?#29-)WT>tCNsH7CvLKWH`MmGGb3gw~yq~(VrSj*n z*;9V3DE;rRmeA*S%w>j^};%QGA5dIg~gZ!@t&13Es!XVl>IDrVYqys#u@Za8$Kq`zG zLx(N{I#*r1F;9t+X1NZxvrdMQ!}h*9Y@ylGp_zj~wHD+u&5t=MkijwdY$@^A`QQuh ziFQPY@`2mhFJOXnr?Qw%wg{eZHsm)Pa3WrQj6bD^A=;h}rwhH8DfplF?Ica_aKP!| z7e^8X{JhjsbC#%@5vcBX?;7RlTx6JJY1oZ)GvT3o={r*Vq6m5_!aH zd{CIR$eBoIwetI@@<{JtVsp7usWu9h_AJ-v;hlQ`>b(V1Qe4pvU@IFtM!EmV+y0$J zyxI`{y${{njQEoUpWxx}m?3E|s%!#FZ~Urb!mLlihIafs-anLN<~)KN(oWc$W%%Zk zXq=XC(3)sCL{HQ9suqolwMc}vG5qmKvb%;yL?Tf~@A(_zRw`&jKZ%gEpd+~KGta=#OjY8gv zqGxJ51JaHrQJ*0W?9MsRV?|Otrvq~wU(B@P4J#6gWxaoz-UrRyg*e@VV8Cx2(AIOQ zuxO+{XX@A17t`T920Cf=BHnM zc^}kDuQh6(k$GCINB59OS9_S%%i)F|$$B#4ZSRCsi@YzAmddJldG8;R;NtN-;;8TInOT%yfT*bdB2F46E(X3q6o-RnlDlvOT5%xeBe_QwN45r z0@7s2tQdlU42g~^))^}_^h>m-7T>K*5S-5pHG=ds`-fp5D3L4oEgY`D2q$Yie>NB) z#txnzV&L*Md(fWHDeb%^7TGjc_EGen+qyH^9`5W{`iKOPi~cC)Y3m8s-#R$7oK_Q_z2?v5qqc*a(6Cii6DqWb-TXE4gL zq_RdmqSD?uD0a->n+5|BeKZMhWvWkvXu90%ikYSgDx%gQjno^S=k~ksE~+FY+_K#P zi9dkNFbDLXtx=B*urUUg$l1=s-%bxbBlt=>Dkfo;=rbX{2jpgI;ArPf48}IbNwF z&G{=allmeA7cT30s&@rke+!4e%S6$@O!OHk7qorG$(bcF{8N;Xqh7O~cy)tDwTpyb zjK6u5uZ^S*f|*p(;>`@FMKL_hKhxXRGT0ig5S%z}c{G||Iv(4?(O#JCT+7+`Z=~dh zXvwFYrtPZ*zVeu6v`u7HyK8KALwK`dRlB_l^2>EA@o{=?N*wwZ(4vQ#6ty7?cl;KA zSi;uz#w9-Aw|tliPMOrn~K|3O_q{e#7=<=JbM#RrQsm7Sk81|b5yC$>vtm2neK!huMakpk;s#vBVDdW(_r@#&^Gyb2f& zVy~N^C^t_IjZNeSWQ@}fvae2lUzq&0(3kh;)e^_#9?yfr0Q)#L>X9pA5DhR;As7r( zX7VILNii&GORDvn3))5+yNe@kX)t z<^&#ro%j{-R`z4Z8UF`S!d1wYmM|ko>{-z4`ZUV>nP}QbihCDGg8XjX5c>=yqg!g$PjLhNJ-@?Gu8E5Gy2{RLkR{{Llk&?levs_${l`yYH zUvb4v`&=L$u-|zb?xRKa*>*;3!{PGea1~Om_YUMK4HlsdHJGqGM|5S2xnuB%*|>&2 zD`%Rx9(FVQwsiE1km#8=QSFRA7FyL4A;1%}4B)oN>?R7R`vs#@_-JbnSD3eyb+snIF=z z%lAxuhfbcRLrQ7cakPKxGnTLNZ0KJ;y@p^{Mm$w;xGVcP6c>?70lhFlol6=DfPpV5 z=_cG+IVf39nOHt4Uh(`B$sO+yH9`$X0N<0NE>PfeO2|y~L?I5y;x@{wve{ezgb|6R z8MT+9vw!^>dJ_Li`^&QB$JJcksj7?zErE!qPNDx&Iwtlf0F754i3N|)ei>a9eK$ix z#^GlfBP}+zFZIAhJgCuelc{eu>3nO9TMP)lHS^2l$gU@e#k+82c zjPEikKFR6&8MmP_zj1)xXb!6M=lv$UL2Hz{-!>V4FXmgX+go5gsjM3*nrp=ooviKV zdNRdmJLneQA9Op`_I1B?1C9cojf6^K> zXgQb^O}3f+!R@TM(T$+6gT+MSlkHqgL$=Y}(=Q+GC3oh7cN|4mhN<6a!!-sc`Hau% z|84i|WFg;3ZfkwnD)Rck!^F;2hdk4h7hQX1#`g7b_`ru)xOEUxegWx9ANYaSjIIZH zHUBpB8GW81mB83MG_l<>-wQk@$}s_de}C42(Nb{V2_<{CP51tk?Gzd{)cH0D-OW3) zHS}QIi^=)H7ndv=gy6rc+sFB%`1UW8M`jNmBSaEsg!9il;-}j3?+s(dUUVbNTu=5Q zl72hv=SC2p1l=$XzJbUtd-8bjx5>Ys=8rRyE@0gAr`~KNb)GbLFVZK^Mp1Ic<8SER zVLY48zZw*NSdNXp(|!1K|KO@YOkLZmBc>5ju=+Q8(W&ESw*K$qhexo~%}Aq1VkDUL zj;j^5({Zq=^ZT*Aty$Lfg088rvBwQ=-urU7fiEZ6o{Ai2YaXXm-%fpeJW_HTNsI%G z)`1g%4%CU z`b1@vJNmp|J3w%X{ckY1?ND^hBT{wk&DnOxm;+0{|C3=p(fbb!&aToMpZj)<=8?>4 zvzC;N%c<_P5t~&NM=8xx&(v!(sBk=2W3F+g=aW)4v~>$g=pO5wTwKhP`X+Vb<|oku z@P?A;TW@c8YE*uYNC@x9a40{cbRxN6t5SRg9kq4WO+g z6@Be5fIeN$>GTAv=$!Gu2mMKtDVxky^zU=ICsc04Z7+dA#4D(9 z?6j#-sqe6o^^0pJ(~R%4b;q-mVy`_C;I^A@7dC0ESZGV4zUi_~lvH(6#g+8F{W@OI zEqX#H1=eN2_X35CvL(2!s^PHnEHOFEmnB{$Go2W3(ok>Dy^Jd(-lC6#{`iLSzAZ8NT3|E0yD{Ek z@_kZBm1%uq)YD<|j{nci5B1*P-Ghz~wm+4n=huB~3tHLP7ZM}$`MlM@l7bFPvRben0QDss%xv%VY&E65nN9>HN40(~Dz!V~)S|3s#cCfB5+( zQ`f#qn1vE?E|U5FqKbN^`7Y7^v3Y!SShn|xPi86e<7S<(8;VIzt2uTo?hZLG4=umu zhO?kbGw{uFU(<<;z4p0*dors9{(M$WnSbr%Mav%la4IkLUZa-g#+PP_6qfdhiR3y) zv^!TsbfebOt3v$5YjWmQ#Il@M=gX>crTio+?;IUDmYlwxRb-dt4ao-kUmModPo5&3 z&B(Nav;^&->`fw8}tw;gGBZ20M=jMeLzS8BLgtS zPV5Y$tv3lnSJb3&Bj*+3evF^+oh7pOeDRY-GR}8|Z`IGO9`b80R!s zYNDQdtp8&Qn@zj)M(bHu!+W&(tKHYqb_asjb8Utz|($aRtB{(kIOZeKKYlu zdNO>^`_8o)$+w-?hF)fTOKVSnJcwwuOB%;~CMYHNio{3naRHaMosjZ<8 z*elR7qf=tWZOuQP>iU(&pC5407pvE)nkIBn*`-!&R1Sbz6-D`wA-Gq6K7LAkcA^+~ zQR-;jLAlc-`1`X@R(wES@X49KVuWD&P5OTx>Xbc=gaGj7U1;h|@nbAGm}ip&_h0To z$Lz2ybKLteL8Cu^K`fZxwE%rrGy#)Ehfg$e5MFl|%ta zE+dUctH0gta&N4q>9^nI6DMNBE1;L8A zVyqxW-Gl-tgd&7Q#@z>u-bLA7Aoo$< zvZ!E-KTF{!A)Co;-7Cpw&kNE?HK`=Wa)iskK%sXxg41dcYWxH-1T<`kaaIwg)7l6J zSl{w@Dr#IgmN76p`GL&TACRli8n+vI$?)z9EbY&0cnF2$<((lc@rIhHK=s7D-&_>~ zQ2OpCKd?g_6bF5$u{$X&g&eNSwiepx%+})bBKSd`JyIwSNAL4ed^F!C@fAm-K=IYy zasg-ZoAl~h;o5I&V)(IJ89P-B4BF>0X1#!rzOk1~0fbLg{*9SB-tVIwP)Fa6NNxln z<*6WmaKw_%4hHcvh%tkSz&m#@HXE1|V|NTw-jNp@GY-rYL7}^qGF^4<&VZr6Uu6DC z`%OtB(}COVG~yKsv{ad>qW1)pBFG$Gs5JnCu)3TZ`r#N@IWTCJ<1BCT4v=K#IDLjQOSx0&m-2x znapHT`Dd^Br+-n~H(RRX_eyKKZG21lu1cg56yNY>U()NRJW&{S@6<-9;XlfXdi3-& zrwUfx<%zrUC?oUP-PG^S^cHj07)^Q~#H9EUcwE7&ptcNCBLL+d(ZFV051$Ktc1K_~ zV* zzn(`0i5d?1l>=D%6#cS7-#XrSuga5NT2VNQ~U)>F3Ys=FXOegG9a zF!U>>sU0`?)=_a@~ANKT2k?J6sFHr6D({_?L8s=k$ovKpW7u8-NE$b z3hYLAQdc*iPDfvJ-gL35#3U+s@m>goiS8s!di0R(d9wU0T z7n46!)DPa4ov51@zrV6#HqZ|5t-H>OpNgE_Hg|^$zOZ4sSUMFeNu|az$_cZ%g<-Ys2EeNH$G{a6I#BXP? zzQO@M5NLD7o;nmucY2qfCkY?oxFLYh#)WuqjlmT$`3OclaxH4?{R(%%0ppt9SwSL4 zoX|3zQAQ#D8J_Kf$mQRqv@2z23W!`@H{hB|D)c#e0p~dIY?AeVnalg+5jg&p<=-(x z0V2mrIzm*%;M^`9E7AYr)4=zQRvAMmH7Z15$M_5e#LfO}_&2I-=01T0end!d zZ!qrxsRmVofyly#AxdCJGdEHxP*i`&b$jRei0UlgP)M# z1(dL1VYI;7Lm}-D#l8r4#G}Wv%xYQ)`9}1QpC~jHG6$eFBGJPjJKZPRR>hj3l*lwM zMh2or_!V?OnD&@VRMhG3F;V*iDXNYL#AQUsV)=5{P|^TD5dky|qukdbyjr%a3;Qjcv~Q!RJYt>923&BO?l$JWWxe+y+=w2vKhj2n)MYy7F!gnKgDiqZ3m zET+ayYR6BXW|%n?ilgG!jVwi5<3Ax1mP8XiAE;7g5kA@p>*WdGMiRD0&ZIs}*cMIv zshzm*nD|mUu8^wydnEDi+DYO+?Su;yzX3!N%qd=@EIteu^Y(NCotgB7lC-s#gz8ON zHhNx4ia*0A`4z-Kz5TzCfE-}RUb(B;l7oVI$e!T$t4bG+MS@JwX=E={cycf%qNAh1skU-)jh%O0odetU| z1o)9qRwQ&5seX?{$5ntF3pwLl!024SSy{mC7YdIlU>GY9@GB6EA=T&u{CWSd|!LK~!|5_2o@c_@$@U>`doS*4-nc*p86Hr>lR05 zmDqBXc~_P}-j-^JmzZyqxS=3Pl`_`i<;kd$?DkSC-7<&D3X{r`l&s=}%8Hb+N>-yX zw=CZ$W5teHI4vb|i_s@S`|EQ_l=C+np8 zRaWsY-MZ6!b4_K%q*dKCs(M?ue7&+P!>`VGjI4_)d!|bk{Hc1~5+NQPFXfcT6{~r9 zE|J}u9qW=Lr1w(T<)ujMOR=h#65}r~e0zBj-5?{;a5+2SIWy4uuz^FbL1DZ>$)8aN zXjGACRMTtJaB0+vZPcl1)EjR!_|~ZNt-)BL$pj7DbZIh=ZL+LtvbJu#{jF)w0&GQs zVMz!W0mwXy<^jN1>1WRn;5&|hxC+|-7=YnhLdhTxG;ogG{76E<2HhHb+^Bb|>Yy9L zJD|GQR>N#|G!EdYI>Uws-93H@BZI6+EfJXJ`yH^e*U;h=*aL1f`h?h)Q2@3wLR(;) za}*F|AKDA_nrp})2@*^n!yFsi(I(Mo43LaT(Ce*mT@uudMt6(UamSzi^m{t40D~Ga zau7jeD(JN}f>#=ra{RKGyCaeUIt>*IW7_W>L>3+=!$@7BJAi-@+J+1hz=6+UL7{ly zr)PH!rrnwhYw_Z}W(mZ86~IL46T%`I zC7K1Xr;owNRed&;?yLF(_x1X5oiLlEwv#X->`)IOVKWe=-3<`??^pFl8G&It14qY{ zyVXrTWVp^whcOk3JMJ*V!n}z?OmXaE{vf~zbcP;);(JX`cbfPvQ)w8xVjGk)?4<~p z;9%o=UBu2#a{%BX3}Vrb!*$qAC+d@waO+ZKV`yw&z61V|zV_+h#{dRSC$3*uzLc4N~wFEH81R7coXfh`4pN2hz|LY`Gb+7} z0@^}xG4dU#t8LFOMh8V=U*e#QYFnISX@3oo7uCeE2z(!k2-r}d=R3!(q`|9keOMCM z8b2XFF}|WVjg}tQVFkM=G~eUyN$=<)eVecieBV~xXKI6}>;RkBj03dx+dLiT@Y5~| zgHhB$Ou=O6$Hr$=irpVLK=10{I(zs7&N$JdTmTrZgO1~Xztx=_cn~LU7%BWS#g~+?>y+1b zC*_n+))q@okXtYlOG(Sj@6XM@zn*#2mb<2t>VeE$MW(w=r@YNw7~x$Q_x(6{C-3!E zn%3w?zlx7pa|^FI(>0t@SGE@a&VBTDO4nV_v{{+>@a^5SO~*%tXU0me9$0r+P@u(C zES(du`VU=s64NkDyB0mz@zJ1Z&J4nK+CKNahXF!^N8Q>0vCrMCE;-#8fLPre469kz zIPQ3iYut35^2T)@F4MU!oH?Kf;|Xs8;v9V-tU4Y9dG)!TcYbpG^NHezll-oc@efm> zI9Sb{{s!JJ^jmLES6(A!1P7rj-3F$q4AWL_LrcRfF$LGNiX0MF<(yY}vsTX>6}T*} zid9}PxP!PI*d~aZh8T5-PQV(+VS>aZ4%_LKg|3aNuR^#b(LbPj{`Z_ewto!hp8wFb zn>|eooD55vxscfh;FijW%OPFM1yYT=lnz7csjWF=jDayOOm4p02YcBNk3+LaI^(DOe)V^?qOqc3{fon;pgH{B3cQV5nmBfWVmrXd#U6%3^D;^S8fF4MFs7#!EG zPXNlQSnlhA?jM7M^qb5744lIQZ+L!WjL!%f0gY&|s3MpS_Y*knkFA5z;elY~W}yiv zUD8CFErN;iQ~3r$;@{7vZ$E{p1EDm4e`i2|Fheh}Vae3!LxQWIDTXxYZ=OcFiH^G3 zj(RDEF}>aZec+!y42lEl13%18j=1#zkU-Gn$s8mJgi)emtA|aDK$TtNx4Kt~c}LAo zeupvrwqpGKZ*vOr2-N3x@M+|&iM5x!Ya7oA-(Xb->`_OXS+3Ge9-vVIcy2qWJF#9h z4h2aAmB$l>{_QIIedL~YIJW(3M_U2+e#p*D2>$rKodcRrA6v8lP`rJkXoZfkdUWp7`MRG?@91j+^>LD--L(6bZ0 zW99F{(Nq2ZleJy?KVYzgwS<**>H6+!&))v8-v@`SKRyi({{bK<9_`aLCKPeT?*rw2 zI6@C4#Pvq2zHl)1@Z5b5_pkXwiCDE59-WuPqc23YP)12_ihI(eAB^SbG?c!|mi0Uz zP|;8}m5&QW@#;2;$~^eQp>EOs4g?WmWt|2*l0YnoWxAEwB_IbQWE3C6tJhpT*RbpJ zG~2VR<^ykF`T1K7U$I*JOEGQxKQ0*LDtNp`@#(jc?-lSUd3@+C8sWXD?K99CdbY5D zOMVk2&8T|- zYhbNdlKttm=KvM`zH%4k6)&Gs(3dk2IdV#I&B zgTcP)X>_+dI}7>~Nm%zVULUWLD6S8?NfAuYBgD!L3fryKJI=Hv4sMUm-M*k3v)=kC ziuCs$MEnmJEV_G6)B4dG&64r{&Mqms_v7vWF!%=_#YGqpeFz~DpaRcD>B(HICoY{b zb4>Tw1Smc+;2nNbGfn|bexK2DNC}C$WW!x_J{jP@ix*PYs{G=(8chTl(PNwkcF$w( z4;a(?mw{=O4+AtMwi@5Pk6;B{7K|gA8GYUZ%wBt~#^k=2X7&PJoXZyOUA%q9n21ez z5YQ6D9Km-_v32O|7K+yJ^<$m9$Gxmj;5KIH|P2ML+2vz@sDPO23^L}|{)17PwunW{kJ z(B=U-{fQp;EvtDuk9|ceC(@ta;?^mTL>-zB;6M4Z&G(!~N`1wiM? z7-9HAOJ4KoE6?&|vtW@q8G9sQ+7HHrBE5P6HL%tiCOGghKc^SkyOFs!UwL7knSVx} z(dTW9CW#M&IH!C#6}?G-GClg#OAwr+V^(37$4SY32|q_0=2kk*)$l*Uk?5+tGHYDt zNwJd$3nLm;-WsO@-TIIB_M8#-N63)G6Kz9#DM4YVQAq7Mg#^T86nqqQ@>_h>h zwMQ@S(M}{T<&`c@0N_HMc7Cqk!=#T4oCgC!MsbC#Wfn|C(bv%y6N0dckwGaxnHaOv zFkWT`S8vK`NbvL|m5~5AJ_&_j0hLd;WdKZh9flhLl4Ye1!C3)8lr-@<0BFgf`hjz; zMe5xnBYvU+Cp=EfGOeu za90K_e(|T0DWgzYZ6}mI4i{#_SVWhgI$#pulm_-vjZdcmTul@hGC&Pxqb+ou9s5eP z9EYYwtzK%uN4Y$`oHe2j12tBJGdrHFB(GHu@-O^|I49bB!FyJXC5;xLq%DxUM=q2Z zE06hCEk#$YYJLZ^TYo#MSN18AOZE-X$W(ouwN`9R_D`WvE(0sj!cC_E@kD}!zbepw z8Jb)$ef{#3l6^<-AebTsJ{>|oU%=t6u5%DmxWLb8ls@*;sS!rD0mCHgbj{u`1}?n> zp>rI*$rdtI+N_Ga)f&p3MmDt7zKSv?sIqL*=&rBzRvgoY+0eaHdJ8Dj4u_S1v}Y7Z zTHN9EESXo-?m8D&Uu`*=SVR85~0BOX60S;WYAgR;{Nrt66zd%MDY>K8?S^@ar=5QMB zO0QhZ1wt^|?hE(~6=AJfxZ4t{9%jh=8tKiW+RQ{dl?a)!AhB9<8y-fz0J&B^N`!9avmOVd=#4)B zMG4{>KfZGr*l!G1dMkFbHbE7CF+-4U@^xtV#bDYReJhh+YbbBp3T=zEQ2BS}TaT9y zcsLv#`VYSK2c4101tAe0&t4NsJkDQIG+KLlx)0#P-VO!K#T_;NFUIaOs;Ms87yeEo zg%*nR5<1cZMQMUTktS$Bq@zghhK@8t?-+WA(0lJ77@BklqDa#RY!neeP{9&!o^#%N zZX55oH{bRc8GGkb_F8k!_4|k8fhu1zMD76l!*yL~9m4Ol4lq-L;!T7SDR6E${Rp%8 z^es5nL`!l}cUbI*<0>T;jUOrudT|xm(-Onn@vuh11}IwDL&6#`P*In0xb`%Zb=@>Y z({mixNp?n}S1FE{M!g>000ZoV+4W@4i*T$nt95%<4i`Y*(efg?g0n=Q?8AOQiW7g* zE*rezC2&lNQ`frB92oz;_Fn0&$9|IIe^g@lHa56Ic7y;H%y1G)fm`VSV~stT=Pfqm zraRV!KMKB@v<<*TF`8lB1+2XCLt>IalW>%aG4p#9hRZeaemdzT%zJF|8f4H~m^r`j zZ~Ox(&;GT4=&%CG8)E8w?{0mhvTFZ>iJE|s+`XyfuHAe?&r}{^{MZ3V=UD#BDIhB^ zD^*hQeh~&j$h_6T75xKHI=%j$MIf-?fw&C-ae&o+Gk8CFUmY4P9W4XetqD&zlwmHpw#&+6);DS%3{tov{0n&lV4v%Q4=+at!x7$Cb`Khv@{~< zXLDj2o#s}5em>A^BSw+0^hjqrC*nCf{Nj^M#mUw4uHY7FjI#I@!ips)*)DDyux*Ol z2xMLliVr@_`k;$@$sbN;ae8?94Nj5@fF;F4S`H$b;^LpzGc8oTVbeT09yufY5l_C9 zYiH&`3gf+dPO;~1VbFA0&i4ln;gGRy>>D`tCwg-?3Qk?enfF*Z|gKJ#vz6)4UWLTu)ntRD3rF7xzy?ZQZxcx6Or*fz*))CHOG}V zSKC49oM;fzuL>ar1bM|7I3HU*y%>~$brCdrn8FTQ%YxoSyEl<+>Z{;3FF78OqOv7S zU!}_ip*bLEI%pIe3W0a}Ag+_(0rET+QF33h&dvEL^7+E&LI5JBR&=_ zdwqKZi@dx)nv=`S_`@(&-YESXGz0EW!J$MnL?OUSGlX}IEX-Hhj7`Lo1zw(h4v&uw z%RP4lj!mS&8iKq4zepMk^3-3q+K8_$>%m zcVv>0kKz_pGn_V}3Ao1DT)0FqVqiYP=3He6B|Si3=s5k=lqhhav&4-ajnk^&LD6%? zt#p3D4%{f!=2+MG`kl4Tp#Bzk;}R;J6PA+@eH3J-pabWuJpYRY*o@?iy2dG_ z$ZfNs;tj%i(Ew)^?g0oy=YZd}45A_rlrBQbqlnvOs?Ft)epaabfr_(Toa9vy^|TFR z>yaq;!DyoLcqyFC96=XZ z@QzEBM%=zUs~r8V1P!F`sgUGx&;=ECHxs}p4mlOAZFPV!(6O#+vHpw!Jbq+dt+bl+ z*Oqg$l9Dof^`7aupVf2)j0v0L7F})yWG7G}SEyRAW$YGYS(Q6h9fPlJ zP^}9}s~<7rP*$yk)gmIvxg)j)VfKLiLj*Gx{0@PFkr6h|Ob|@tE2$z(MCDyk*iHQ1 zh8F01x2CsK?hbu=|By51G9cLt0AvGji!m@>{)7^Dv(Kw!D*_<^yC+5!k2H|Deey^yvV0HTIVi^W_USO8en zwBNKaeLi4nX>C#rar+d5_QS!;59tcUSk>KGQ$Ms#jG(2-;5$KF7YjOW`nSXHt9sy} zqWzagL_18ZI;R)G`3{|y{hikRo%Sy~ZF#%wlCI5;=&9L)uY@4GqEU_P4CG9NX+&Gw zA$#R9%Y%B-rK~3`>FN5472OF315ZSyMP)SKdiF^J=o{A))zne{7?gA_=5LfvK?uQ7)iXPYwkHZ~+H3oH& z4Dq~Up7zT;_Mi`zCO|*ISk%@^O`-t%_UMb{=5e$?3?uEy0+i!>ZUrLu>@Q+2mXU1L zx30!pzu6?qmRY)?Xc~lNiWJ;w6%g4uPuGoy$HJebIfy^I_w$bN>rKc3hEIdQXVFDm z1#>}gPzbHa3P3;{fFOq>yo!H>9@yb^0u9r}`tYZ#iY5@r=GuxD%Z{(^lRfW?h>6=y z8rhB$?lZOBZ&bFAr`YcHldX8%#GHl_DEG%B#14iqp5ABwhzVfq5$VAa`@{-Dbt=JVT((?(G%mBGKBZU{U}c20T@mO3S7g^FF;1rwNlg+ zCWI_jAupU8Lj6>3+Lyy*_(QkPWpM|=r z5zW+T7RDHY4v7G?jMokGyuT*Y|D3KvDNWxvJWqOlNLYl49wk%M+tdccw_M;ml&_A= z^w~7$`@GQb?raz!6@rs4oVa%->Pl1K3-5?WNd5-K-?KPF4$caJAT-p8A(46}#{Zx( z`utOFi+JcYZfJUZ3|`%vq*0m+cacm0VPg~V=T5)E`VJ)_XEaJE`1{J|9CFWvPQ+?Y$azR(s3=UJbJ|df@cpkIb2`7u+AX7+qdj8mV4nUy)lYP_6l-hyrj2 zk>=V1-7%E2#rMti_4=n9FLBpqrZmE-T&wTl7e(|k6VdM>KWa8$0|0*~J zb4lxMLEORE@~k{Wo|5HBS^o?X)(d;fyUuf$-QWJq!>E2g22ftZg+LOdU#V~}L3V_* zaGzI7Lwv)KUN^lIcrfmN6Qj--5aOYtrX)R&)H z5j}4fns|*TM3r8FfK;%Y;7<7mWp8D?q=2sC z(XST-!7n&cS%DSm4&4_vs_m0n+qSu21Va+yZz2+j@5-jO_8Ens&O30!NWk}CSpn(h z=NX!Rb`LUaRp%*oNfVTKYH7-~f z^cMZ?iccLn_zuWshc@B+{adX1YCrVqQKbSuf=YgrVt;Vm*9(2bQb#!sZvG)e&^Gcy z@Z7r~iq>H~hoZ-U(_27s&8SDC+AAnzR0k;ekuEFnL*noUM_SXZ>w4i|evod_M?9U5 zqJ^_X=fv0sln`j^ZY1UX&s64=}|q9Y2>!oV%El+0CsJ4>F_f+}2IJ-8b)&*lY4~)wHV_;jf7BT48h^~_O#vVJ$@D>#JNLd(7fVpIyq*7P*tTb4`9FqjcTR+QNU-#Y(r+vPX{>`h zR#|!RylsMt3${*7IR1{C)P$yfesAemr@325YJ~#WwHv) z7(7fvN1B)C5&;}(G|`D8M;SP9$=5G6?v|~)mO+c3s5yMo(o2uqE0zp8 zR@_7>$@NAAGMsM+$U?ul{)%JY|NYtKjVEDnou6wp@=BwTToAm6t^$EPUy=CR-*r@5 zJQ7g@ZaKS1kj;k^0T7!OQkKWp#-w%ZwiA$};Q-y>Vab-2)^4CkN{W_(O3WSunpw3% zG8HY*OEZQ|$2&Wj%DwMssRruzGJksyFL|;C1Rnox)lm;4>p<=vBZox>Q%{c5C|@+M zQ2+k`U=Uu~qy>-TI%iZ*Qvr~bUiwGqkA zI(a`;?5DYHBHh*ae?l*O{UMV6C&k4+U2d1l@$s?I!IZ8w^v;C1blCF+M}vv)E8=Xq zlUksz^)^fQ5)g*ZbL?`4gqJY4PqI*px*0c6pV9{AEIiw0nMd&~zgw9_Ej7KoVa~}c zu-sc3C*WnS@1{z8f?eVdtC(`DZyH3=z~H&Qx`xiVME9oJH+AmKgH)7E(-S&18EWg0 zKvF~VnD~vQwq^|@r?NPQBQ8#1YvZc&+RR=(u|cje9zY`keYJ;^0kx)^1>*7YirWj& z)eW;rkHpl^?jXF=Z%XOaQlC|hvf9Onn6mG$AHFvGE5~qCl!XjLAyu$gg)tU02GFRu zErTYLIM(`bjN9z8!ZTK1hM{NT<$DU_Dwzgf$K^+76d2^K8rsIr`g%mph$j^uKD%HQ zdSUGPkIRY+GDp8#rwudq6elz}2ihlZNq;^+CbhQbvtVui+kZ^L{qU>iY$ri7+bzOSGa(VvTBgDypaglw!5p=nHSC6TPw!_-lT(8@=B z2=-KQ7=%se*VL!u!WEQYCPt${7rD#%0H|Nn*j6&{H)Y9^D3YNNZ!!k->DO0!&BToq57SC$ErT;mGd?Wr>mazOTTc!*pn(?&sK}ZU|7&6OJ z_w~t`w4(~WvgAn|JUj6}W^Jz^hS3_)VN^9O5UrtRa(To*QCSGzayaawOAbj2`Ulka zfe7NVg_vqaGbv#J7J;i#TI-qYg(PUWXlc+*>@5~f@li>A@2iO>4R-96WBrvCqL)lN z-mpDIXbT5;Cp*ZLb2my5FicJWMxOBP5;^irJSomu(SYkq{P?4n-j74~$_1ZRYwJS6 zfY2!v$_>y!9zMt^fC9LHC>qGa!^6YN%ge{d$Is6%ARr(pD0t<{6)i0-+V}p?4^#s^ zp)xP}3=Nhc=PiZZM_?RWlL>Ve1;JGx5ZTbZHm{p;gIqTyMBd`M8O9ecTp!sn}VFo4WtMus{y~#RC1O31o81@c%G@oE`5u-Lm)l zUriw8DtS4Y3Dj`?LYeZ-|1^ObtndHtAW-~&2Z7@M2MAR2zk)z@{&D{o6DT9O>;G;7 zH4U|w{Fe!Ia&iKv5`ahsE{;fApE5C?lPiIjhZB~-!I|{Gn?STaWhFGdf`d1XmzWXB z%gNJGmjLDMEr3Fknrk^YhJePtsp*;7xp_*ifXNFJx=Lfy1c5sy+3^C#3;zb2(sE4~ zU~gzaE8MUD0R(P;o@4k?Xw04TrHY}?D5HY;MO^qUtCaP`K{`x|8)bfg_sGnYO8h#@ zCfZs${%@Popqd3cc8i}m%ftd_){<3-k)mZYW?lyKTtd49w%tDCDMD*g_PIjN+&kTy zgpy1WV>QvW3Da~W;7ZNWCEe1<1<^B=2zrE;ZU?PR>5}tdtuGU}QcI=JG=7L8M`rfN z+XfdoXXVG;;OTnf>72u3Q*P2_xf|kd6j>R!cbC0`O-5(PfvvTCI_;Bbw9n4@pn?NUTMrj{^mX{f zFr)b!U=BylPJW{w*IqJ*J!QY!ck1+E%w4}EegN|$Y2$H8f}85^9r-7Ph#u>+-E1jB@THlB?@C9kzF)&(z^}(En46RkVS%is`TuTy|5=W~`o~>+G z##GhSmXXfu*A}ap_nob+;c=6y>iT}xy*N>opbIYck>||$6P-69%d>rS%bB-P@jl&! za99GICy1!oY3#zDYm~YN-7uO6I@(J%MpWy@$NkO_r*)0=ntJ28vUp6~zADMgv zkJ64s1D!t|FLbXNep@hgp6z(4=l=TmrM9nO=koO=!|yL_Lu|hBJ4X$Cf9clF|82#t znlM4H6X-qfAfNK=qsnr#8f0!w7uY>a89!Za{U|H!m+NPug3&S(1lVr;sm3ZB%+xInN;H+51wx6;KCU` zRL>9o-gtZ~oME#BJ9zRg=iK1mO{;%?FLQ!^UMGj2N|QjFI#*6om_q?Y5_qNh>FMd0 zurrGH=w>B`{^T)-gD#WcpI%{q=(P}zcuT<`t|;msX2Mp+2AvS%8eP>v)ES3Trh`DR z!2UrDMpTI57GCrBXJ&XHwit7l0>==T!6QFY9@t*(y;ykzAKYr!gW4#U29tR$H?z%z zK}~TjNb7u;nMPd&ZK45-Ks$CYvv37SUmvrdVC!Eu{lQR1&INEs(JhpAAJcb zOtq67M7}*B?3R;If+s`QmzZN9G7ij~RFx3{eRQ}?CU;cWnA)!jKIu9)_ z#RACd+9mj%-q1AI1~asb+o5m;4g!(6y%=#{O!|zj%&>Pm(!iJtQ|gqSk+T>2QLJLD z%6nBLZ+f))!bSOJt@xw7y2S~lkzRFkLb*1qvPw&$58?i-mFJ!i*|N$!*T)rC?1mh zR&vKUJu5c={q5o}J_9?gM5?iL*I_NCBH5aJY6MoiUKziA)f!M4gcO=Y1rtd6SDHM?|Wx~e}oN-(AtdUcP2?f zqgP-7n$soYUlZttRg&c$vTfI}VUy1T_q7kIKY9g)_8;UJS#Q%!AjRu)0o~I!K82?J zQ!W6n6y^0-jqbjWhRwm(gkFCvz6yG0(;Vub^yZXi0_6_y2KlGWvg43X0VfZ4h`|PJ zJjQGB&NJ`VRx}gnX~!T_YK!mFg2>@?VUV^mAzF#yHp2I0n+}kspXYb z8@9-WPH#w9S)9QRwq?%_zuPm-W4CzImV1Teqe6j7pGx-m?1Ipbmwd}+^3|gXw+x(B z`?-1i=Z*^FjICDNR@lP^+evDgj`V@1^T7gs7tlpprRdY?azsaY~@Hfz?y!K}YyoQ{AjoZWMLz&lHH+GCu+?)zj6 zF*vz&>POz+HW7UH8XDipJ!7-a8zee4aho>mMUGRly-FA65(OEizy(FgOy0^7eER@c zlia=Bu!H4j!vF{aYZzPe$!M>kC6mMYTML(=aU~5);$z$QLh~mBe=o0iFZMI+czt7Z zx_QK_xbZR%uQ}@~;A=2n@W!Df@Y-Dlf`|x~i8=^n%8#GbxC~0b;t2ef;s~i5i-0U5 zLhmXX48_}^WnCiNxQYIn_}8B-C9unX*UZ6%129TJ$gAn_2PS6OAi3(mdG0^H!HZO2 zE4N3Jn=lxt4Jl$!v;`d5pTD`+D72GGJBgKyg{zxj0?y)S?$8EorcGT^oT4hR{suo6 z9;Tmg61sK`_w!~nu$t_wV&RV69}*l~k9p<$&#Yloz%A7;ALj;&AKVLB`^(RtO$WH8 zr6NHGeJ-9@GJ4-OTJ1N1xd@JhBoiH864qDqiOOS2^ggLiO@G&MYMt5(?&p9@PPS6N zZTial@=$(%Ok8^S$5}3Rg#OC>fpbWF4pVwnXn;SfAMh}dpf!965(vOrec^X8{wrHx zf4p5COK{OfKufm;PmdMf39{PEFo4tSi%zH`=Fx$f*SM04L{P}~GuM79{E@5+6HM85 zru&=+5q<@OSj@5d`4QGy4reAB%Gnb>OBnf#o72fh7Lx)RIn8b;)4ChMyMQzMw@B(M zw+p(V7lWKFb%UgOA|dfiCE^GL0@M$H>tb#I^6;Ayh#TWDRvc9J8W7Mz>r3G!vO|43 z!@WOvzx#m{Bl$ei^(n)}M+Gs#bWIs;A1PrW7ilr4*x2{qANe~aIBrKe(4IUVlb;K@ zX#0rBWi&&05J#fZ$q4hs`bQpw1_E#d0FX@;hr7<{$|q&q0rPX2i38y!2TAE;NtKx7 z9lWi0O@h_3TmDImmv%^Ye1h*%%+z-BG>(umfvor#OQk-Cpy7b2GY1_RECN_V$zV}p zcmW}Gm+QWH4-cg#c}OW%+9k!ABQ{v)@z$qJRDEXc6sb{$qQ`m#jTQ7*!B1cC!>~*O(-#%-U!?`VTH!0R{@}^0DIGj&%oOtUi$5;EQq600RM zuRU};m&alFFsm>i!@M^ug)Uu1Jd1?Oy1io$L7G`V%x>z+ba|M4E6>)kmVVTf<3$y{ zFpzAY2l&@AfGMDWQwHckwnJyO$3w@+Nov-uTAL2K?2-e#7AU?36K6+#)br6?p+4X-K>5U_Cw{z z%$6C&+X*fk2|q1tzo?Xw6CEdMg@u5cc>Ur9JOC#Yf4W|cG|EU1u5fm{ z_pqzZp)ZiI1pjN1Sz}w@s+Z|8h0aUNKEG5SrH7)%N6UBB_paL2)G?9Wa%H<3igqkw zP$*S01XmaKrsf{CIJg0t-^jSxVCG8qbhpva6(!^fp|2(+U?8`*6uY+x*L|Z`Iq%hG zRR(_d+#!P&xU<%$>fcUf?rC#3{65KXdzwM%4lb&DxQ%66Q8e}U3s>=>#l=s(> zY%|-6_KNjyab@x{OO5SorY~*N?XCR|tI+~CgKkWh!F@$6j3dl6PDNGxOUzR|uNz~DU+GIYqGJWs-i0@KP z=s2pRc7)Rx+Qzmdpxbjc2%h8`7UhTlT!cTiqYndEt=WTiJ4rn3QT31CJJl}3YMJ_a z6RHa0H{ujNg+APXL}Gy5pLDMPKvygJ;zr^~zGV(CD}SE@1G&A1*eR?TB4$|z`_yQk z)J9c$GG`eow%dzC0_RDw-jvu#N}^6pQ!pB;OMtRs{6k3iV7y(Znqg2qI(W@q+&13a z37)RTL`r%xt=a{uw|0{5%Xjn2+70<#o2WgK*u)i~y%^QGeEy{Z^ktnTKfV&9*?hH% zT)k1lxG;FUR?U)l56w3;qBJC5*YykqFxiTQcMVo<0NXu|UT$^sXR96kExf7vU`?SO zj?2!3X&YL;!o#}iefkEQ+>+_Dc6q$n>gx<2q#fv2h=FR}$@#;JokUHep>vm06rR|y zB!nmx){d2k=*Ehn$Fq|Mi5y5Ah`ouN9Ff;D* zq^_RRLLY;7uN6ZB)5*^X#IuPYr^&hTjxO?{TC7JIxZ74kQAg5q`nAt~ z$_#x^nv0!g5c^)TP3}MBLv>5D(hZdS@Iak5%xA67H~$=+8XuXr_Gf%;L*`>Qbea8e zX0n_-%Br675M&*|^Q2gL%+O$Al5-G~Vso^PRw%lAjvvJ=J9kkB@_kFa<-@Ru%~&G2 zWXjf$emzHIVe;tCBCW~&=JInt?S%@l=QqRX*o)?Ff1J*`Gptng(usEBo&v`;FOR_UHL_zuGkA$I=bylcy|~+Y$XTL3W2MW-ERTiOFw%2ro*Nk|M}rRm^8t2 zQiK?^VtP3H`WI*ZWp#_Z+B~VEX(tNl(Uw)9`sOv|h;v@=14(_F%RQRr{%QTzigNb@ ziz5VNiM)eIRi;%(L(@lcD~3EJ=IZ)^eOy5Dugrzo4%LTq;IA zEVkqwXn)RNRkga7Bfm`;c$MO~OJJ;$O|eFj;lUGh9a4z!jYQ)gbY}p%Ks1!yy|t%P zYtjD$3A2|a_Tk$7z3J<_Nu=G|{M+&$im5MG-Zd0YGEFqa;XWPgJ{{Cfn)ySBJE(}q zzn;SEH(z{RmzJaVdMm%>HL$-YKeoSa^Q3J6!b(Civ_M!02v&S!95LnY>~Qq~@P1-W zWauT#>3}T;FvE11hAs;kjwpJJsNa1WrEf8_|HAgCMe(1aJjY@vGw>EJ=F0Mlsf(B> zYiN9P_e*v4)}@ct$-Bw0FT=85;`2UG+^kYlP-6JCb6M%ErqATZK$o9ZFkL|jX=JdK zJj=*BR!i6sTxXDzPw)TiznLWN0+=f;HKT?|4UY&e*__jkL`wI%Pd%XhJHd|iI z`c_6f{rYj=+4~TXL)^4F&c!Vk3?k1nMVcyG*!+rqI&UtF-qkex8HxE-IQ{s=@u{=m z&$~+u{sqX4E2kNEh#4_^X-|3DWWLY*lNR~s_rl!oWaf9TT zOMi&K?Y%EE+i2?BdxvZP5;(?2nL7qOa_b)8=2-ruID^9apbX_NOj2)|MLY`SRH zt5FP|o9(Y8)6~K*4qC9q$(27#;VZ~%&222z)jlI@w-)AM8ov17Dsa2jlUmj zsJYFn#26lA8;eQpF(w?CY$s{)G)>qg$-QBHqaivMpBJzACO$Pm6^w~sIurE#-Qzgu zq^{*Tfdq$iy}Ai>>doM|%?#t4?IIb#3}u`@5UYvI4m=+EkQL^@{n1BKD#0n=jfq1< zX}|!vrG1I|OwalJ9a_y>5MPKH=f8TXjKJ@$MUg;743|dn1(RCd<)><(YIQxk-VQTn z-wnRz=K}S^SyP>PAR$VH(-Xuy(n+8DAt4gTB z$<<{2T1zuxqe!%{>&8MH=VQ@=;kH?h(s-U3Rre|k{rlaCF4=%>M9-?7i%fU1!PJz) z2E(-6`P58ztNz=uZgy?j>zfc7DU!a&68M|+1s%BlD~f+v{Hqr8<%11iMD21*)Cltd zpfJL!v)%$>wl_F@#^G+QFd=a5viAf>fy{Yk`aPo0i0Bte6ht9})|b?ES^qjF82I~e zgi7yhpunv3s527Quo zEYOeW3=AqI49>gh^$tzm6xbfJ41Y7iuXRkzH&7?OiDL;}AA;;angvu@%0^QAb^}L? zRX>;K%msh0?;cd!D@!VN+}4fvQa$V{(dhepnPFb-sQDkJfqjU?KbPy&(1Kx~$9~-m zJF?Jt8ge+*Josn7DvCLDf0NlmgSFQFap=j>kD<#upQgQ_-}kHUJzX}uMbJ92`HZ_x z9b9?MUOl5|m>z!1;7(?+ut-fUCok<$5-x@d;F z=QaC;IMf8e6wtjU5Q>R+*x3YK2#sXiZ@HEmiUwHXH5r7_5wtXIfCZ0bxJl9i>5>z0 z$pj$(L`#g-Hi3l_!OAEwZGy7&lAk(RMbgJ}sj4a&|eoLpB< zJWTa>u;)14))r1bd>qvw!v8qv84Tl-a6k0j86epMlrMS189^Uj34DNC~Z6A@9R zl~H|hAoa#?5q{~s@tXqY6BM{AM6MzA#hzh_r5<7!&9mbsWnWW04MYTbB>}2ZachRR z==*b%k|5mo)=Wn~@|*R;F_wIX7@5%L$ZzRa-AvoncCity!Wn?to+jL58&XcIWbn|r zF^Bd+P+z0r8nRQ?#|_o$BCKq86bbm4dJyBNZQ6Numjb`CIi;q>Ob=E+Ejhn&1`V?+ zmE-&I=2Oq%16m^?ZhqxmS92tcb%$e~@8mx`t7oqDvsA5;Y_6V2kWlJE{@JJBE)FU*zw*v8$<{H7Yq?bceo_ycQ;diZ>IECaZX|a&*ApvHu5y|HV zy>bZB)1NVEra}v6z+BV)YwzVmav6lncSUgCx|wR%(g-TsrEpd3aLNTEmCMUQ!(NwLB;NhF(TbQ>eic3B&OT*i}uB7)K{+dH|vGw}E@m!!}O-zQrpzymc zmw-E2vvOXAd>@{(K<^56GrGiR&iwkS)pkG{4xe>tNi%eoL&t0vHk0JXQ=7f0^#v6An5F+xchT(%#nN1+Fl@~7yOX` z7olh}8*ZIz^a>Ah#TM3ViR2 z3OhDH0etgf=oR+AEEl(?^!NY0aLf9)!wL7X1a^EP|h=tkfM9Y+UuEG~fyJI(z#aI|SF~MIhvHAt zBa0+Z>N&u{hr8<%o`I4GkBMt$<`JO>bd1`v$-@zKSm0`=jB=&~KLRQHUBw$s#~A?k zZb4mOhw^Z^2k9acawBKUu3gSFD#l7FXA;IoB&&zxGjY%``IwFBcpvkCHy!au%t?U|vjz9aB6?6cX`w;WVC)S_!&Jz0JFe$lGGxik*Hx~4;|G7sUPNi^3;>>|t z))8%o6GO{srIGjNg1`!BJ8c>ijrW#(2LHF9f`u}pC4;axu|JTkxYVr^pkf%tij@`Z zp-SOs`V!!PC8ex$CAvNHW%(#;{R4RkAgW>E`zH3mwyC+pk$GD zqzX`R3g5aUt^$wrOvtLkXZUW=sRZ4x1BY9kW)%~GhurQB7a`jhv+BV)7mdPOV}Y+- z_i?t&_3W^P za-OB<8L>{%6zw7;m3E@C{k>cAIFrs?c#OCE<6Ll!)ux_QaIFo}x`Sdw7dCemc9JdT zV8GKARGJX*2o30>^PO_@5kC2^Ph-|<^H;vI;&#kF^xp9g5-Q>bK*XYr9ns32qS>0F z{f7)rGz!?M__Vepsk9i>Qt}r`3KmLv&rO24k$z%@;%tkk4@r!>q(@_Xizg&D{nAvj z=*!;XGc*&3CdtN^@S)1ixQWs8l!^6~HVKuA*Oh%xDdX-dJLg7{)F;X7mwUY|xtLgf zszMsfE?0NEEjvXwc#4P-FS^>t7*rb5jjI@JsUT7+NCy?vdQ$AQJ`_J|)Z)PY<~em{={(ra)gV zAG}*lGkZeoXqQAno&2LZ`LN(>^@Hk|y6S}d>NKb7H2rEnlxqa4CT*!EXtz3}ueQ{! zw%}(?p<7+xR84tZU0Hrj8Bc9SeqEDgb=+!AEf29Hv8E`$K69$JtFAuoXHBD9?PH$$ z2A;a~-MakzhT`4oq`DfG_L_0G>eSV03Rr;cPJM4;ePVD!^J;ZvT|=c?JxRZ|N2(@X zs%c}jCMvkDX}5;BTZ4kQeo3rrsB0qf)V<56Hf8A7|4?n%t84s>su|;{8Leylqu=x` zvHG~KVe)4K(~UYm9tB-u3qyT9%UVMCY{x(kW1eyOd zf!wndliJR?w=34eFC?|guC-g8wyR9HY0|fANq6YDx3SoDVAtBN6|~(*>M*iuH@?w% zKB*mN)hY3--MpYv{6>fMTIa3$HaV*fDd{$U9Na5fOM;+f^P(&3eb<8!u*a{i)Nft7 z6%hBNZV6(ydwo~nTDR`8R)lnqpOxOb-0oQSZvTQFo#<}7bWgOER)kvjqqVMVD=puU zZtq`O+7-R2)7^nm(*7( z-Tg2`%Oj~bOSIQ}t$XN`d1_L3uUZfBmsX>D&pWPef9dW}`hhh1p7x}Hs`|c{1-&dd zP|sQyyRO!(T7UjpSFc)c{dB))|6ta8?WgVok+iyF$UtEKV3Bn1=cJzR1p|%JePh#I zKY9CF*Pcwc5BjE-qqZu|8VW6=BhSC?35FTckiGIVI~MnBPN5Mn-Nn3@BC5*nP9x7JOsB$YYF$W2SrM_6E-!J)Suy zKXY9#w`+Ljx%cb=!??H1xbN?hR(T-5r_#eWxPcud44Pb4%< zB+X2u>`f%>ji<>>hW?(&@|es?p3G~QjJZ5nG*g<-Ma!B+r4j%HX0VY0Dg^RKEyz7@ zz~L2&0XK!%0G{~(w9JY^oF#YLMt4i*E_=2ISgT(Me7WIKtKzHVhBS6K$|SgS{5-nOX-;fOyprE1M9Xn&&&>1eEuxN z$un!V0^hCY|X7$|NN$o%L`ZUHC4O6a$ zdbPBB;ooU7t}P3#brb<6M9`KjjAH{tHNk`Qnm}3_FjM@SJ1sOR3C4v57*aqcH`gWx zK%AI`=gBW^-q3H&u5rr40C^ZE;eGooz}xbY6Av1|0#4xz)|xPyA!U*Za?tqDE{ih! zJ(h>wZX%ft3Kf~JBL*Y3H`BLGrVz~mmCy6WLhp=aVn^*}z(3X(_y*Z5u?Yr8TO!M5sw+UBGGV8A)zy$gEt&!Hi(&&Vl* zUEKP;GRU;t9KIWCh}=&pCNaKSoSRU6vwCBL4qFjH|O`i$a9sqqXhB?1k(3(T|GJW~U1Xz7WJe5VX z{dxH<{0$EV*!lz74{o65H%_}9)}vZ^=WCC6YIJQ|`P`d@zqE2ne;uAW&j#Ihy%pU2qE%Z8ubA5G{3_X(k^dbTg@ zTi`sopJ|5LO-7!C1C@IlTfd4yZJw~(2Vb}k)~b}1a%$(A3pEp~RzU%6*pY}J}alF68LTt7B zJMSZZwLj|UEorw%H!m4M6gQeVeMU4k&5BTVk+$y5fCs2l6XyW;OEY`s&4- z%?0Y*2UW_ux6=~~nXUKD(Et6Sufbxfko*ou4X2`5TZx2ShZm!i808?GZt9d zB)CvDA{V1EmfUguMgl}Wj|)JReMCTI?5?)BV(JZ`@HPPgkBKXy*nr8}Le=+!41#S` zz;>!)6bexndl(8p%4$ZzTiQmAT6$P;b?} z=@sVk)K00) zMtX*-mi&%FvIKnv{uiBGC=1BEek4ioDd2y4xGhq2YkqLR7PLRo{P@~EYRW{}zc zM%jG^HQBXqqrXxh2{rT%p?3(qL+BkrL7GTFdhfl2-Z3CmKzb2HX(HXwdq+S)jDSc{ z0YS0d+%M1ndH1|~_Uzd+`&+(e=9;z6b)3Irxbixc&fY3_%k-~j0>CG5>P{EqjleU2 z(NoX|a9IX8Ch;F}48hLUqs@|>tZ3|d(?pEnLkdZe+zO)!foUrJZ;wG0BY>QI4^RBE zULF6v#qI5V45{#*li9%s5@)0Cz%0#f%t9R55-t{kXXmv3NJ1g-R$Ldjf|=1 zaZ9&EgATpv9vNTDV+UJi5F<)~xo!Nq44#A{`=wYE1r{&Xx_aCD%Zm*+l?UX{Jdb_7 zMDwar7@x%%KY4!8@Z@W6S}D0+54!N{ zu;}S9g~I34kpl$z*(kkr`8N2YUH<`jm}2wU1S(A|D3B_l4+y8xMMZ1Vw)xxcE#KGD zMP|3z!;{73slx%O2Uo1o*v*G;ZvO~O+jQtI*5hyu_6;AfdEaum9Yehz8l{S|80Bz4 z4JA>;0&O@*$LM0xTUWtTTr?%~k~W1;_Z`~Rj=h<#i1JJEUN3YvU4N37+; zdEh&5dbLOM`hDO4`O2nxEOW#~!o;cOVx|7ZCIt8A ztGViHme#0u%2i;d?)H2+92`3Wq5n_6jS&w0(}^wa;uP{dPX}y(*M5tVN>ez+!UO3j z;=TeTd{?cS;20c)TDlmle*IC^>V}XRwQF)kph1zCVJcNPpizQE2-D9ZuZJ;eCVm1( z$6D0OM2O!MI`X;gX5UelyxdkbJeHWqzP-q*){WNS-vZHwOb}K-w&Vn4^N#Q_lI~1V z0SEv`HH_{DOE-tLB!B^}IXDVrz^7p@qDF%D^sIA0dRw61%17K z%U3k#C6fik!)sNqP?i`5DioNb=#v6QzzncUPUhyefT{yXuNK6xsPOe^27N_K5rxt! zSR?9Nx!}Vv9)!~)j6#RSsjm+o1+$nE9m(lX@pF?*4ToRznn6;59_NBcLMu!>XvRlr zv~fD$^M%6AiyCGt%R~0py{#V;VDk8p&9_9zJVR%Q+l&Cv#gf6n=bsk;_YT#qR=`iq zi8Q=boAZsrH z%%22fq{0{Vi!!+ZzD|b97*0)_{Pn@NXQl*MaA`Uui>Y&}-6jHx08_#l z)vG7F9Mi`TxzTG~3wR>_ablyj=VteyDJqd^7R%}N%nqDBMD<936Y-f?dS;O(LW`oL zAm49NYdyxYE0~Z++n}WtK~e02JEWD_-4eNHcH$zttfKgF`DbT<0Bgo?+Eg%P!h8vdxa(+2Mv3sufWmmMK5PRhEbAD*igyL+sS_{_4o$x z!CoFP$AuT-G^tu_EvB+NBJ0hrC}1Y~m6e6wc9!zZsl>Iu48 z4`|KO))1lkuncpoL^i~XAH?(qK=41_3S_z6L+9uX|D>JM1mjQUWgc3U|Haosy9Q7z14$b|3pk&P`P7jVce;}(z3GTBgCeR%VS2L7VT?Q= zUst+RU~Hcn@yzv5@4lvwzfB_TJV%!TUp2yS(WHkv$&;kEk#ry%YW+e<%c}Ep@MA-5 z%O@$zoQN1zy*oKZ$F-?Z^NIERS2{OX$H`AiWl=t%-P=P;BR8S9`@LLlQ^IV3#MY+t zw~*;!xCx$4=RQpM;8$)Y9Jfz--(A}d&_sYC2zUX80qsZ$H8B77w3W=}e65`}b1#*@ zyllBN@Ha=zVp_y;f~=vt$-qoMYrI_{z!RCX>-GVc^1wg4jLovDtymHKv_j4MXGH|< zGqR?_cfGzZw8vae6=|o{zA%rfoUZZGcGNh?HMVQM=gtGbB^)h37=O(UI8@hRF&_a% zjG5&;PP|n_%bsYSb(aS<_a07bJ2lKW?odlVl?>sW{$XB1tX^6W`ji-$C4$wEs3M1h z%iPtRym-C@yS|&Uyu8Y$Ysh8!cq8^`#!-v5E6d-38sRK1xaPYg3XlOh_F}B>+0Izez?5II4}##ry4&usl$6TDksS#5o0P zCtAe6g2X$ms0b0_kMCJg;^RNx(s{+Jnv;wx=d)rKjF_&E`*BM*!Wn1cZ=p1M1wOAz`rt~MFdvk+Jy0TQZX_usBj z1GEzVDnvq-`7V@16{CwuhTf8;ZK;ks8nN%>)i^qbFezj?;jCm53umh(H^*^H~%_KNqp24Y3$Yldcx0mo!NJ z9wS*_@$w9SIv`2S%_U0qbfc?C_g>!oD`e$L0w_VDNl9SvX|Z+y%m*zOX0D3Bz~W)R z8r=OK7Z|L_s#-P&v&cGl;eRG%@cbi*(kRKT5m?S+vbAoHH2u<=0>vA0rMjIOz5rJx z%R_%;NfIJ)cI-|9A5dY4r+!(STdMKtptvWgq}JBP=e)FzrOSDZF8DNt;C6&pZKq`@Zjs(Fc{>Mf2T|1#i*XrMFDVH zE<1LCNjT@v6p<{@qj+0WVymx*4Gh(dQM_n++F?dH zTSh41F{qc}S1F0aS^id+?+u%Rry?FAH)*YHX)PkFQo2*jeugzyMeZev(}+|*EP)y! z`D?2ECXHCb(WEtPg%wTuzlve{_qfU#Lwirj2}$0-0Hl(#s-Z zxRl8$anL|r1ERLUD|Q8f(ka14;MJWk5o(0czJ+)pex;>8bTYt9Jem zx*FzoYIyBBSKG7R>v$OG&jqw_m6QPm(I;=i!*ISx&{1&dZ|&Z$sfgAw$U>)eo-rje99W3x&9R5R_Ud2y z(+9oidqQ3o4uFelNF&fa_#UU;7q$!NZlZU0R$0GPYp>BytT{7}u_iED{EB2*nE85j zWf5iT1Yr8yW!l}y+qt=U=#<;((KU1eHyN3CxShxmP@~G+=+c zq$OaN!O`ex(rnqyt~b)ECKx;q?c&EA4}Z(kkp#(uklU;M(s%kArN}%X=v&tNvB-=;u=})SmnGY{klr z3=LZx)61oBh^iVf`&@kMj=VOhbZJpdGmhITi?wVg=m3NYEqalM0&3a^A9Djxybn`0 z`E}D$W&V_%?eOOvs6{}L@h51g_lzO3wPqMVf2xntv* zW+aG?Q90)2ASJNyVrncNg0))$2sit32FEIsFA; zemK@5@i$+WR%04jkK67%8B)5(gs9J1YvOKN%XdNGmy#+rFB0Xn3yM=dJj>SCyz+x2 z(023PPKjSE1cQl*5h$Ggfqd{`@%CQ825+LbnwpYqoc4jd?m3p1n zPIcwAS)tnaZCwo?wCe0gf}ss9wrVT_L;JNw^-RrybTWQ{*I@Wv5`cw-BqgeEy^|T* z{vhL!ouf}Sh&!Y#%N7d1O1g2XnY`9=6M7f-@f&ze&0u3LQQP3|qvW_FK|p`w|%A?%{nXA8;s?Q&f<50#AG% zy2S$mzbVN)F~XQ~_TQ$;0vTo{0$Q5~ySiVq7(DwUG0>3`u9hX3Ipzu~ISPwz&9%8x z_fkk3JE-M-r4?4Sw^IPqL+kK@w5WTsKpD^%LXeoMye`{p?T`e1dc~YxCr$dj#HFlP zaNw4@7F#mZuN>Ss11Wl;yWa5;qC|e<%18+PG5SsJQycm8^GsLXqar?#DpekSw*tWC zsv>uL)g{SB^r4nF<5-Fv0-&DAcXfB6XE4}}PLD6!)xDEdqtS%S5euQY_N-^DC==2X*}>IFc@Hd$fvidCM_3?=4;H>|%bOVT_~ zUX1{SwknNNC+UZz*Pc@z{-r+JDECd?iV`^(I9+(wFmv@T&$}2X>C`P1zW;{GU~H!N z4$&(N{g$65T=(M_f#U>~ixzCBcD&)q=2Sc-l^D4iolNhsVkH_eY7%j}3S7sAy%)NjTo(CgWW&BfLqzWlS+BBF*vZ{iQpsl1J@@ZJ4{B$HF&Xz7 zU60E77EI&W*Nfun&Zz7(G``1X8u{beI+MoCr)wjOH0(0(2jPn&9UG*h3f_~g`cYfl zFPFMFf4AyDo7`(8nsOL5aYtU6xHc-EaKBL|!K@ChlKT65x(M*z?w8^V^Y?SLkpbHA z$D8Xn&-tZ(C~^G}{vyp03X2R-J62`h`cxi2@%(CW+o%Jpqxn>2Z`w4L*wQ6T8-`c< zrB|{3kyeuHnV5eYzsAFZ%${a!#h-?oBr2OZhf2JDx3vm^Ka5TB)_*x8zI#nS?<~N# z+S8`=Xn*wY=lCeJd0}SA`fpr@^=kUndL|5qZ=ASw(xL{Z(9E^hYYzOO5^nt6^aAd>!ii|l6 zA2$q96?VyMu?ImNkKLEjSAi-+CGkhQf9;X&>5^{jkBej$r2 z8x!okTxl1li%zJaJWkqCr*BuXrr7?QXB1NgHk#u!{?$L#WC0>czlrqEZl&U9%XB%E z)d;-PCw^rvfJFLl!4fMnLzT16kmSM)4_}Lm$~RbY9;6HU@pHF?c6&lzE!nMoC3PaB zMUXM^=HkTaz%A*fuS-($)q2d~TOqm|4WB1dRiog5A*@)lhf&g@fLI6O!xTFnAt5El3$?Qw|#M-nD`AG@j zl{+4RUK&T+C;!P+;I5Q`NzvCvW#h^yl?N88kOzw_V2(RGzOH z$vC3L2-NQ6J9>AL*Tt46+-G9tEA^KRP7vVXw-h zQjX!_GpdA^V5pIX0`XfYviwZE9>g4?jR9i{)3ZMg!|*od@R)5DNOtkL8|62U#M& z57Ipw9{NptHnv(G9cBlu4vlm8|7G-QF3GhM5v&;=(&O?cmI^mDZ(o~0yWjuHDV@?Rx7so^RjRR1yA`lOOGV4GC9KC;h4AGyboxuE+xj;PA3%&wq1f2MquI)->%8Wk(Iy z3Ap5q@zt1k;rcm}kzjl~axqYVJvkr?1TV=Z48Th8h6wiPztbRo^pit^{QIpIIt#Ic z7CJN8gce#w>N)@3??Txj%SN9>z6ep6n@Ay2nF*SVd}+&?jQq^)By`nJ15#dhsK&|x zq8{AOMV+);bOl6RKKx*G?)xUYdNbT8WE;{)v(0hWMrAzSU+hCNn;*~;zO&6Z`*k^2 zgX-#6_LiIk*`!Q|c^kJ&R{nQBsLO}%)xje?g#A=Z>kDyv5AH-bzX^5{j12$QIo4tm z2kf^7H%FZ8>shSR`W-AK)5UgI>kustoVqy&HR4;A3iQolzpw2s%Zggr`zQ<1*_V?b zD15lXf0l;CV}9{6w|D&lOv+QX_<~X4n*b7{K2~jAk-})d@ijwq*JT zTK6q$Nd`%}7QPl$C+MLos+|hPKRL+f(L9@U(4hrzE_EVeN>jQ~&iNUZCU2#M$@K5i z=GT>{0L6oJOCC;Ud@m?LLh@|y+fypd%y<; zUjedSXaelwsk>UhSLuVPs|)Tocl)0b~m z(QW1k99cjPf)sCm6(?*3&(6KRyuFd? zz*~ugC1z9-kHjgZ+MeZ|_|=q@Fe`jFlYMxLI&P(kR<=7$g}@y!nUYLLHO^a^Wz#L(iLK^b&rSbT=g$}k~N^vM+;mQ5;d~4WIN`B<)vb#SAU-nDk zZbr`pIdZIC_FrwBM9u6t{%tNE`1|E~{GsUkA7qaQ&U7UcUjNxX`<*lZi$f=nuqQC1 ze)f~61|+Y~yrE~i>OXmOVh=4>8DB{pKsTgOt|Hi1GA3B5KFY%imafEfhP2;V% z<1fyiP~J84oz!w?o=c`N@$I(M(!V$|m+nzz&T9|kd&W6uF_eGOA*76)tRkb{(*AB@>^{2S!$9HOw^CtV>OpZfcHY6}T4{laA z|9su!Ubhi_}{C~2fshR|IcUd_&-}G zgO{(UY5_T77FT~oOi6*P47w>-(s_MQMGhcG4|w&i`CWDv9>V&uNr1ydgK40hTXJx`+rlz zlp4_D|5d~OONKqM!`3R_U@zuis%2%*K}Bcr`X=z-DD!`i%vn;*k(1Ar^#GN1{rydk zyq_4@nCYL~aL?8!-6JZCJu3bGTMcV3%KATQSn0F!w!yrH&c^zNzK-T6UHt=tgHN7z zG?z6IdRvA%{|_A29F+P$a9C3E{}dc$W@YC9Zuq?X{M^E#{|$$gJgCZhR9hq#E08SO zSeM$|^z{EKIO^`{?JKOV?k5Zl_Y79SM;?lWKTm9!ZJS=0Tv>g+w!ZP^?bw62+wTdk zTX@&&;*a^{c}Ov>GG8*4D#LXjS2o$@?>~S4xystr`G?J5aS?}eo0k2_WcsdMQ)X=| zuvTccBFl#gz%4b_KG39COFvaeOhnP}8j~%f+lfzU=*)8IY3Kl>;#Qp)0JzmK_fRou zoLRf`phS9SoDw@B+qB|k3Tlm}Z_Qq+k(#e(TSa2P>Y+c)buMbC*q$2FRC!s3}XRP%*VLRVVWYU?974e zI5H$i%UcA02M?nrRSm&B(^76YhFSV>0av}@aS$;_`7bj^ADM40%$(F+iTpAD`n>t7 z=+B!q&EQ!#I5>D!N+*Hg)D6rUdhsCzC8}CS9h^&n9u7Mf)^bWMqo^7-%N(7cOJ%3x zg;=;`=ka*yzf&-b)B9q*lby5bUXUf(o?esr*x{VZkCuuy4VPLKxWwVhenqgSiTz2K zNV>~#Mo=TW9{chp>FV#IGJQP_i*iE_KT60xZQ^yast$utN(C@#LwIt9IUsdQC{iy) zBk*piwAneYH-I$Y8r{Kybb*qNi zOZ@peM^;u@{$DIu1 zxWXthiGn9uz=XUVeCo)mFCmgXFl6Yur|ahd9m(TDNE2vSD=sw~zuCeI_|*y(!HXsI zEo}l@&OYyZn4kB_YMQ>vw8WUbn(&*}P;LiPUy$)oI{@9^OhLjp^b1YlQ0}?eTC3U4ZpMIsN$0ZM^mJ%h%?gI3hJ4FojBV zTljzB8frzx<-keq_z`x?%j13><)V@+k6V+5qvYF)?f!gmqo|!meCOMo0#X+w{+{05 z@r(HqNXs>QHp?qZQT5LfPw%%?>whiJH<%vue;;)@QRBaQ)R-T1up8`u_3NLQ=W$;T zPTH?77wFjk5exS004+aiTD{WX5gVU2eH~qS`J<5>F0Z?0qHDC z%@+8Q^n_AbcLU)>(ezpynDr_1l&c3h3%WmroaU-0%XHis^k|iN;xy!iQd|~AlPW}H z3NVxx2~um&ndG%l?3RcEn~y94J08`VX4^HzPtm)}%gn}4UoRD>pxmTx1kc*(90XJD zje46aP}IM1hKOtKOXQ}Kd(Y?K^=$q~^jsiPf+f!4UqvAby*gQu>%wZ7P#ALS^qb}K|iPQX6gJzSUddDG`q+^!SF?6NT2Xu zw8+hBGaAP8ve#ln#A<`YToY_m$Wjx2m1Fm)00|EmqH2)6Hnwp-%Aw6R>+-MnUw1xL zd3q$X@feqW;bfi^0pbb}fah*iQ%jvsvrg*qKFpS*`%O*?+)7#76?YX@*50`)u-(|0 z+R;z_W5n?pu-2T#Q7Q!(KmS{At3I#m$4A!)6t#E>9zSxU=e-DMCPYqkvC9ngoC~j6E2706o)vMmAz( z(=B9TY`p!oWxeD#qSo8V{`S=ytp~TktOWjJuc8B?OpDw^BZ@3*|I>EF>R41JhulYgrc&~;vZ*=WJ5 z&5)kyI{HYTJ0VhWZ?+DHc`IPD71=A!)^OX;`%INoB?&z6Y3BOAmEmqo&ahS-;2&T? zc4U!Gn5!-Hs7d>vsB@LN`kGU`?U!_8%>mD*n%nfbz=o&W;Tb(MtB^xF2?zwT)($P# z2|G9PR1c)a(&;qjvO-$I*tvm+NUQwoIOD-M7>S z^}e?K?XRfnnhxqm#4f-l*Eialt>OlX`{sAm-Tk?>9+5p^j49*Xk3?f;53;RO^@XB* z7aNbiJ-!bq6tSZzaQ9368Baa5g?J7fL#VVuYH z+R|x4Td==}$|>8I{wL=hJf6>6?md%yy+z(;J|U^~Zo}w%+Ls>c&d1`XoLTDE1N@h7 z`#2Wt{nx+BIGxkl(l?Fmr%71cr<=)&|NYSGVQGQC`zx!k^=Etq_N6uzneGQJh%8%Y;=_LMvSY=Yi@ky#TOBEPF&^88VTF*-`|a zz{L!h*;FL~u{8*Z} zr#{lf8oR%qh}uXAYVbtGf$wZmNwH4>(0HKIx>Opm3OrRG z63LwC+L{(4n?R{tlkWuWQCY%#B>F!?cg-d8=UAAH? zgb>{d0)0ZUl}+BXiH_=cr&NNZKOUmj&K5=BGXwKGy;Nw{*Ij{Ag)35)GAH^Cvs?wV z^RrtDzB9k^9-}S%mb)ugnR;WSp~8_N!|UZb6)}!@t$bc@*}Ieh`Z>+ zjlUB?|G@dGh2XM!ViEjsi3ZW1`Hpwb_%7tc6iB%tC5Q(v6-F57NpSbS7Nu0A$5-d& za4Nco3c?-RV2Z8Ri#@j(%Pg@Pqh!QY6n~GU?-cy? z2K8{N!Px|JmMuAvzNGJGaW+j+p{J5dMnc9EoXE&3Ic8XC$Wr?zVb7cbq!e*42>Ics zzw3w`YkJAI?j*sDhqEhL1x{t2azRQ~d7Zz?Qme|qFYgS$2|7|JYax~qdde*=%IOTs z=YIwFteZ{R!UHCixvIhnF)7PK755k_7Jj)EARcLjm(yAYb*wxnGiP=d$yA=CPELoIUEm z*8HrlDz>dr{GCRfnZTw8k1mFD^(q*3^0U|pi(mr3RRio(MN4u02KU8a~P0%cu7lsepR3MGuP`%oOJU98H zN7ni9SXSnsCU}$xJjkxR=rOeeOa142k2=t%X|09HsK@NmU|x$DWhsfQ2KepA!UZDm z%3e5UMy;cv+-=qx^`rDhRS`~aq*BnBCWZsJc;L@&d`;r;^-cW52H#$PR&uktmS<1@vBge=}1J+RN`-{^gC zZ>J^pEbbz(8UFC;ZUps%sj6%;?vB@`lHG7P9AH?Kxonmq7lJphJP(HWU5bD$4SD~4 zD^p*ZD9O{J_}c&da4Xm%Axs(GJYC+2X#2i~V-`*9)q9@17{_QI#?}|`2i?vSQQ~~B zD1&I_1OcdU5PItt?k7nCn}JmJ9h!<2AtIt-y6Gv49ZD-5ktFRh$9}h@7!)^ySj#$Z zL4}@@iMiZ{MJm7@&qymsUQ~Rn)tw24pjktA8sJCNCS@JuF4PGJ_6S=zD4;6>V1Mxe zG8igZ`|^eB%cgr}9mdfw@woaQ1U5lDDJA%dKcx!w{D35xt$WTq>IJc~yNdsgzS`pZ(J}Mm{h*1DSc!|FRE4 zh8h^@>mTmxTR0wgN8bNFdSJ%Bf0evn1vRiVGcZ0gI3YSXJkxjlXK+OH)ymAE>Z0d9 z`Cym#tC1(Kc2!=1{|=l!>D!AQ{E8cR={(@BpZe56r253~Mr8E9&7QHX3nf zJdu4OF?;N0_P91-+(30gYZewuF&6rHBg)c#KtrJj%E2wrS*?LV4uQ^P1kRYWtLl)v|>d+m)AcepJ1)0KO9cE31dL#0YqnX zs$_T-Y;>n994*$9XMIIuKBtHQU*E++NDv7Ttk^pDZfi~vKL;X$Nsyq8r*kw!KmtGi zNo;;^c8&%;zdt*-T|RfRHGf92a5Ou=`*i+Y`8KhN*SER(b>eD_)Yy0xP6ZV5K9B7vFz z{uwC4zT^=@WQdRtZPj)M77%X2?oH-l?5OYnyOT=*6+ftjV5Jav9|o7Z(GK@nWZ-yPph)B9DM1I+Zz8VYaV$0lK6&;`HhasCR5fX zZ^-7LX{eC$wW^0ejBXYaD<@)WhpySwcU%6KwXNdhcdg!J;Q+bx*UNQQgX?fO4r2dW z>@EYS`1IYVF}z}}J*V|LirjBg50NiH&{n;32#xU*2K{V#_r3!1?#nw>9OU;u?Q1RY z4UYGTD3D6k_Il2HYTSFfo5YJR@UJ*XDhgyd{caAtO^YF46vwn71vxn1<+75S|LQHg z!Y4DeB^MHJ-?I=?gggr>EHFRp$VBck<;gfzjj)`xDfYSAL_N{W$;$mXB27egRb34kgA0RGv*U}+I`;Z`D!s_uem$kPJ`2(R0g?iKneBo2 zWiF(FhQtC;%+5)1mHiPX=$|>bCy_J=&8EErTe=H(T!L=-z*E|1v$5&wm{U^Q-Uh#q z_qR_zQvnHZKK2E8FaQH#)74JTa;v`9wXh`yoFW_%f7?04v9R7dC*xl0p;y8A-td~7 zj&Dc9tpv#}*X(Qp8)lxwj|w%;O>T!{W2?*E)G?MhU#HqBZ-;KHd`sq zU@RpLy@YYNn$L?Ihm82mT0KEy*MZ(5o5Pvz@4Y+>f z5&#fop|$5Kl~uOIp|i?x4abgZl{Vv>y?U?UEpXWM!MCEt zi%ToV5_6#+48PTJBZb7@WRGF>-MfWVKSQ~I{`~Bjh@W8ulJ8nHgWP{TPu^XJLiDkc zAyQuo32cMU*)$ik>yKeFYn$_S5Tb=G9LS zw5{h9^QR*C$OI#C3cg~kjC&(EwH|2)zY4Y{GY|d*#RjkQ^})kn7aJXhzsQkA(Jq%o zwG^^0u;Qe0MP8qW(+ybDkjsw4-!^4H)?emF#LOqgPrQBS^@KvKXEU}2H$Txgd>Z|1 zD&>OxeermuF+<*};i*)Olt9g>l8Tr|rK z+&=0Q$a=r+&ye|~rzQ54LS*&4QQNlrLNy`}U8#1j?Hc>jJs9IqAW0o;-PHrQ?}T!) ze@pQpz1;#F6=Id?F?@`<;&reVNf?g+WAW~6&x;2*2n1+1hS z2(9QwxkBjLe;5@N(k0E>gWtY72t|Q}k*{t&X|TEoa@DPPYTp+}xmi0a<>K`~>0Y1w z*Ejvb<5!fb-DZ!{$yykqdY9_d_;xOo{>+rK(Y_~KMFqOdm+>;-k3d0tlMollpKulF zI&h-r+zF=mDq75WBgjVQYgRyw zN>D8w>Vn`~EY^?KP-D70C77L*s>VAa#SMu0dvi&5sI&z6as&iNe4ZE@dbe~vTylA4 ztR8t?aFnT2j)*2Hs~4m^J>4~@I>l+XWraZMz%v5&PoXM!G(A}H0DYHxA|L&kBc~B+6O-m5{3RcCbtoEPj9fPT<()-f!G|>qQqGJm&q1GJGp&!8H6`m|$#uq5S)~@b_{5QbrIH(_&q_Cn$3x zb}}XBBX)C-zsPRfzhM^nF&X2nv}kZ#D7#591YqRQ4Y$k(3pMdFvibK;+q?)UT2r%DI-zLN>Tf1^)^P6&U`7PwCSo=@}o_frvM zsQ;e7vtLlX82a=m=9|)I^MRA4;`nH)P1wH!r@ggY8s9%qzrXtDN7D1Z-^S?t)y}4< z;|`LzPOkK?Fgs%>;Y&$(zs@sZ4!%<*{v3G+eXTzP9={PyP5+2WS_ng8=bvz>eV0^Y zV~|4?tmN%E3{=C0NKzML52Lrg?(1uQvye=jX5#|Vibt5P&YLek_Ad)$i6xRr;FN zM8^vh^o@KoA1XhZF_z23(v6w~s-KzZjR{%{JFzYCC zQL!Z^D90jV;#Sj9w)J#hna*nw#~ECDQTIt#m~|m^xTA&-52%SYFJZquD4VKtQ_K1_ zQhY4-uw`>%ijPxT zsmvQ;t-`TiYTEFKR2knCH)IiD_Q;%yanp-Jsk0xE({B;!m>hG5mb38x<$Rh|)iPi+_Y$8-NVu-@8HHj-5 z`ma&MFg+=IvSjuL3h#&!c8P!#4GQPLH!qRA1TdpAF$2s_Y{b09!BhjDtq`udk=GCE zZKPE@4EGHo@}xNUT_50CXvCzBUjXeRLNZjadJ<{I3L*tm>Zj(xEbz8MO*b4p_5)dp z5RSB!2r~8|jM_I~+RR%?(1K}zmjINkl_(~TkDN(~2(DORcT00AomaotUimKtQDf4T z8c5aR{JNN`^{JZDkhC)~!wn>C5Jd)^WPvpVuu@^KkB#ZWg&K2hV(AZOQfx3~EEdkl zY!taodSH-Ag?k!?Wlfebp`$5)geDsUr4xceeN5p(l^fh}{5hk+I~je^=n+F4xTX+w zAjo$ej3^iHK1Z{^abo%TdkG^70L<^~s+o-f0WEOK^eFO-Rt10x?*T^Kv`4OeDcAmq2*=CQU!Z(F*M}(A z2O)G3&yu~5?-1S(0)R9sMT8DTmcK0vYcdNJ?)(F`eSZPepi`RZ5`p|8aDxo)yO7S% zq2mOuPE9T4X)y87wy}4mn(Bv^iNj|ITIIFEKVK_N6?%ip!e?#_Tpu);K`5>WMxCmU z2oKF2x`|QeNK8uW0XPjnk4=3e=a^9B#z;*D zWF`EbzZ1ET1hDtv>FJ!e6FE;r@KYA2pX!pazl@$i7B8#P^aQ!7b@Yd;uZ=pv)uDq~ zLDtpH96%Ubb#iMGw<%5xqe}mGYft~x+Mj3N&mq8PMvMjk$NdmmjhA#`iYG-o#4!=W zm}uE@BA7 zuEMZ}r?A%zuy{i1%%uz*sV9W?OUB}^V4=4HLS5WJ)|ausV)(9L+$B@!xdI71UFqny zSB4E7f(OxW_yIshMnGsX((_ALdRkLDI})RiuSsvIs&9@_)xk8BWU^eSp$afkP}Qbx zh-@dM^FYlhB+D;Z{p+o);owXj7gd@9RlPkGg<(kRftoR&mO_4J3>4Gop*J*{1zOb= zPS%|%$?O)=Tl<+cmz3$Oqs2Q4c~=8>_3+|vgv$vf$)=OIt>yCXgHYBa#`s*!Mx^g; z=hJQyWAqi!3v;{Gt4ozL17G>%&Vo za8~kRmQ3Mxmk$n#;MZlg(Hr^9sB}sXlKxerR2}2|0s*TYRr7l zP25r$5jWPGC2;i282g!f!1mcXPDVjJ5D) z0lzsHL%FkS`H<4hOxIg$mL@LWjo*%%PAXZ7OpnxF70MZddF9L>+ z0vb93Y5+wPOB7UWae4OHeRt>G*`1x8{TuSbojKp@e9jx2*W(xVb)EL!IU>I~zkhz- z|C@CmL7E8*?$ZLh9i{BY+^&fN>U*GY+c;UDOI#Fx5j@ca9iV;$;<5#fp~2u4kPi~f zM)DRV1&iAP;wS)3zRH9LDl%{U>Vb0MYw}1imh2iiB23;Dp*|g;*9Vo)0l&AnEJg_6 zyAzmSR%q}RW{dIlBtUIRiO(C#7~!R5FW#zq)&hkYAm0-(7$&(W+fYYy?4^le!^J5D?0oARnTiQ07}0D#nwY@>xXsAPxyN5^LVFrrikrm zX48GHl!SO@#Ao9|-FUA6wwE|A@bvNlt}*~KuKLIsAw=<4ywHT<1DHcXoGJcZJ&iIM zml~{mP9EL%*J@VnL!`MN+WaqFF$#6B2eF#B5XP$7W zn-IU|V}8w5-VeWivv|+%{ZzEs&m!*=**|Vae)K8NaE@;5k2Wid^o9fLce0x0l8pso zK23t7Fx--6h~l_}X&NK`)*Wdb8StO=VBmL{AmvgA;0>pH<8oLs{j>i0Kd>}u6-2^p zNoBzncqqg~Hs$~w4WN$KyblzZb#rck-SD*+DC7vPcFlm! zGe26djdkb?Y1gOf2$H~ZBrtn`wst@l$4r?Fw$osy%jZ^O?yZ!w3XRzqpv|#6>OkXs zOSk_{r(4TKFu5ynvD?$SCoNUaJGaMKy=UjRJ-yMxP61A%L3vmRWL}*a(+hM08le*8Y=MLsUeGU=jwGO=jGk$%-nC?i{V3;~11h;`$U3V3(`UNjgDXyM_Z^H4*t z-UI*M1`~Mb77RoH!qI&HaENtgWZD8EXasSalP?mBcrC>DD->}&A{%4N@^S<6Bn15x zbX>e0`utmFBUgT+MSaYAgfFj=YYZ?Uz(YY$Q|gF^1gHx8Ab)`?js_Xn=Ql^gW9?+G z5h3PerV`>!AXF@oEE0f0MBznB+YyF#@KdCR2pn9yW)vQlTX_j-iia|yY~gK8{n1pI zK7r{JOVKkQR z0Ax5uEO``hWQ)j9R4v<|nBSP73iU%;2XD0US|>j?z)ptKw^4clSz=^L$a1miP zJSU$!#q||gCWj18u*KY<29WZGH9EQDg!^~t5In$ukDr;ny8xdHoDn$a`pZI{_}Uf4 zf{dj?G)ZIKwyYWkvkjXQQ;Pk!bRfW2(H!#Jd>}gr&t`MHBu#`zQs6lHKpYoa+#lAf z$=vxhN_y_|dA91X^N8XtImc1p4_Y-bbh@^1VLFh_5MYWV&+!=oLgxoSmAt%xOO}bK ze=GniQRKKy9Epb}mQS(gKl4xo=@6OXh-XlEs4f=c@@H&V|3M&n#So*Kg66vxzI=*~ zz@b4;w;%}mGACI;X^6*$4EZ+?rw$_QSfQLas4n$k5PBsb1xTVX{YU}CI9Cf=1`S!6 z;t9`axK&*`5Pg4X+jyY-g9_n4u6>s7L;+@);Tn=KH;U(1?4XvUoyZ-2Q{Du>>00z z2oBqV9abp|R+`n^66Di!@HN`xGWw|aVsa`C={W;yTQaxa;`tQhaA8TXC&f*Z zmu*{I)XQUM68UK>W54r?*D<$sxwx6^5e3|-kUq5w0=MvK+FVxogqC*#V07T}`O9}v zSNy6$iVSs$PreKr*G!9-c$&vj2L^OXbG_HLzrYT<@1cpnLc@hLjLE|d=-xwCDI=h7 z-wdbGg9`c18#ye>S4(jz zEz>@wvZOe+>eMS{u|CtUPy4i94+*j*!?Q}D<-@)_Gq1rO+YR)E+metoq) zR)1QXs)T*fn;oRJ73vg!Xa6wsJTm3cbjW_2CxV3{&2$FgMR{+MJll9u$0HtOO$WvI z#HJ-Z`28Ie7PVnwN8;Df>snz&(?Pvau!oZYMsYDe<4|bIho>i7Z@u)gxC8Z{hFX%~ zUu+l=g-t=5^`9g~Y1N;Qw@6|PB!HrUnMDF2^z}yo3RgR&Bctq(9bxL&&nEx@?Yob# zo#P3t9lu8(+tKp~%sls**#9yAJ%60fUl#hT&1sXaY5`n%j?jz&{ay(UW4aBc#MhO; zP7q-Z6n~y~VJufK{b2&o@Pi`3W`8XoA-+KMtdM!nP!|&U-!xHPJ0q?)M3wJd3H5DW z>}Qeh@I>O3r@Rr1+Mf-7gj@E$7H50Ub9w4<0xF3HQ^CPc;-GrxAu$A=bn$vJaDovpVG8v^9EmOc|8j~1lvzqUJjbR$?=@kd!G!Ko>S4j-g z505@|5cvIwB_UXMbQ83F?WvHsIU7LV@tNXKZd=$4?SPzRhei}QY}Vf|xS<(sMP8_X zi@0<0rI9gqy$~Ss~DyUw$3zjEeWKv07fNfxi*}$>5~y};ErMF zSB+l>gvGmNF?4d{!PS{6ZlZq|tqW`-YIY7_U{W+%EE??<&!u}W`T(^idoMd)7kkeZ zj@@lG8y@`W|7hLdaroP3tp-6ke_iU|p6fa|n#qmU=(j6v4Ll?PfM!H;MzRM#2O#f7 zDa;UwzxO3W(vKyhz(SK2E}nb@4TbZa=Js-y4Db7rB?jn{F$&1FtqDRt3x&dAhB$;c z?Q~HyZ5wIMcXEvr_-jN0k0u~C1>;^dlIkllne4~59t?bAx;oR2nF(2w6@;!fM}n># zEz7N2bQ_Cle^+G#pKn`}ywh+`)k!jJDOnnDWplaWmO$Uz5EC3PbPw_bgCmpFp`nH;9Det>IWeL{~=kn4+xna)d)y z^L=ESVOPW-^A0r)+&KZTz&Cu_BYQR<+_w#dDU2?>x4e4m3|Lg5MQLld{>Gbzk3GA8 zkI6IINmXl+Y0Q^Ap_e^V9|s0}*TsO)&FWjwe1g%`Pz3Eu2GB^bgNp|2C1>*GuWU@o zYtbMXqAe5>dGN>>s!{`-S)Vdp)$2$R2~75ek6*BRvuu&8c_~u}k4tzk-bf0E*D1(9 zM}Rrk?52i}0ykAFRmQ5({E4)3IG@~gnO%qT-RQ4wNinK8w~&((CtRX8LGVX%JJ#@- z;H2V6Q3dVudy>+l#^a1Bu>qIrk-Kvt=IkzuAg$H4m7pJz>oMzDAQ$(MJu;={e6u&E z=*eTwlCvr4ycpl_WjkGWQYyo%<+OpYNihET)g@LP|Mq6^>J#3XniS)Ah1v^c)eq=H zSK?%$q!=Yw^52oX{EfFPu`i7v>>2o~lIY>K} zop&qVK~ic75y2?Jni#Ixe(=#58#Dxi2fk9^W+XHvw4Pg%x(q^vWI>229IhBsPJMd+ zK7i4XC?)umgaAA-_39W|3dVqZ2kjfGj>h6p9e4ne(8jfVhads|f$**bgSq%k1w=rn zK;jYR20&)h$;aFBCmkBMEIBd8 zYzC%89n!rs0RQvy_qNGJnnq$|4e$+{WNVMz;Pl9~WF^C;G>00fXCx*ItLa-4dBnhp z@q~c*pISCKC=>4_gg}r93#kPf;g~kOy-*AW4DF2_o3Xh3kq`-dQ}VE9KIiz<>@LWn z%;Jx2cQ1-2mCp0z-Y1$<^%CupW4yIjvkw@$2I`22H-+p1&qc8`hG;a|{!UuWti9}< z%{dMVkV1h^dlK)2$+rIdldZ*-(Bn^|m1G(xFkP-i#iNrY6F-DT>8X>RfD zy6-%>ns$NAEpX5uUQjrmKj3#r`)Y^8z+Z*7wY1+^e0{|am``tH?m?dii)bl`-LgV2 z?Z4<+zo0f5ZhAokR9jQiq(O%Q#Yg7@+!)H!{tZBbO#7X4;sJj> z6E_K+=VG8Xmb%#@eF1e|n}-5oM;Iq&p2k|O=^67cW!vx1s4CQLM%1%oJnyYWx!va=~3ZV@$c>R%5* z$?a(Nfv?=1)r5R`cdxt)durwLEZce;Kc99tzOJx5%+Nd>VGVoPNz#N#P8CH_vuwI* zgsQtZR0QV)ZH-VJM|+w(KNm`UTB?4yLnK>A5QNsQMu=RkL`=w1qs_M$fsOB-9{yVP z<)tLKaQMQYf-8k~>TS_;`<}lCR*@WE56j9ubIm9$1wa`l&6l*c02(^y z^~rumZ|x&n9|g`9;B@uUyh+jOi&5*!K+yo!3_ULejVI_Z7L3s2pjnoZw^<+z zP}VvfrHj=xsk?g#r+59UX3fi-K%&9C+0$>!KMue(Q@+5bc$Vc=mXOl&zaM-rc7GX7 zysR<%PEZtlOOgT?E&yZ2rB&__;_IZ!6w+O;2l5>$tR16l76x$dfde=+lN#Aj3I@6>nA)B|2o z&==Q99ST8fjjR5Xhws*eS=%+nq(WC*F9Wn*$}ptnjPZ~jxC)Jb|0P{n)t2%0+Hh7u z1Tc&F-0C~BBO=ZaT_Ula2#3C@3p@JqAn8CkK2ans=%RnaU&hh1fAD$ca`B4Z;WiAU z+7W7c0%VLw3x)#xs!$q>*&2FM&>qdG$4A1Iy0pmHwDp z)25F*pwKfe6A1m0{FTn&{!ZW&=jV|@WJ0!5hss*w16pT+s`Zn zgIb7lJYX_((0UO9Jxvz_q@*3TkGJQX0tqLLN2S*~BLO_y0qs8#h=N*ZU8CU*2^skw zX-PHJW6>}7D@y%lw#1mxQZJJUMY@d??yTx&jFU52U_y|AQdzV?nDHJi_bpxa`A+)C zUY;Nn-I;-!EzQn0=LHH?TYNKgYs3>VoXcw&7di4DPou1E=6Kn{@9Ug+&?kOrv_PUm zDioWTIvJFCbOU&Pt@XQgB<0%o6!=eL_-_fHfOgCY2lZ$`E4Wr2tdXtrMf1l3>@);G zriKAztQ=zp7K(M_x~(St8hZ+V^W_h0FreiIapyLH-tYEo1qyX8%ShX+$eX}NR#7F> zzPdjPzi!|3paNp4>cOGLp|=Wg2Led@1W_)Htf?g5F_`b0G!EV3`;MxvE{+*UwSuwsg`f{cZgP)l2{PxVsdA$(#2>Qu_ z5t-e~Yz64(v}AU>l+fpUTIhCh?4=v^rP%+b3?e%@(NqwMX!tD#&R9X%!B1`E!o8g?6x^;L$M{!fmHzF!l;l#is~eb>1sD_HcMehN z|H-*P|3-MbiXaAPV4NHDMS_QO3oSZwV`*T1yTt|z& zky{1+#H#HIHwPUo2Lrn9odw&T6_u{IfjfhIQgP-xH%E7ME6(~=$(he-HXN9zr(~T4o-m0V(vRBuEEf*Fl3mrn0w;L+)y* zr;b8+LSzC7=hNOH>^fLk--DHL)*M!HhQG9I+Rrr~a(fOK$Kmg$_%bf0#Z*PbH8kzs zphvOV*f|GLO_XVIJ#P{m+TF5G+pcxP<;*U^ibGnmQQ?>y{14$hw<-SbZy=6$OW zJ?|XM(ReIVr7wqs7&TfRoXw6^b@@{F#?ei=`I;8R!w~}Ql~!Taa7p;)oc;}h3URNQ zKz09OIYp7_uxcLh_M~tAQ~NiC;(kc#rbly;3#`{6zt*8z^SNG#(AUPW>ShbY-ZcV6XfYW&d|zS4QU zr&E>hf$>I{jhnV^K$IRWtNMFa#jYQY)RC;web=eGmbcqUsOOTk+M#xjPe4z>g`TSq zd%T!?j&~kD`-gbcfg}J6#y1qf0SJsn36X`EO1wq!cqaNqDScBmtZ4xWWVGBXO6w+L z0Vdntkd2-*`u!zto&NO#ddmp)H>QnL;S##(ixI^_T;D37yJY0+maaFK0=B#|&`Rnz zi|jY%Q?dRE4j?m`=0shyemKlb^w$DJG5A!h2%~WZRVOjPw%=c%3eS}=MY5^LDV7h@|UWgFw3rG}yT9hjAS4ywxH}V08(35JQG!Nw(A}EIuDWEEn3t?TM z0t3}BbOOqeXquKV+CVexd+iiQgMND-W(9%jQ)h-h%$QRky7ZaxKQnr^v&V}okKJd7 z3}&ZiXNLx79}Uh5R?n_{m@y#EvDwW&6`o_Oo?FkG8%mg+5T1RmIJdPqJG?o!YB2Yt zVs`h#-2R8BRQG3xfzR}DPrtIv&YhWi{O8$s#W@fwb+I-0X~pb^4|8LR)a|@y?>3)) zYMm1deM%pkoe8}AjiEUIn`MqAe{P9oZVwaa>@YoTtt(C#$opV&s}t4mRd2u;In*Ic z0xOQ57tRCpS^#;r4~T15^p*<+o`RI-)s!yiEOZ#CLon)nSGkk4IQ$wkN(7hB8!kI| zEITDGJ6A3{yzq2=v1~WD{IqTv@1fc8e%a^aG7+|NIdR2lXeD57B}8O3%y89JDe#WC zu5toOa8@UpRj_sjd2>;?Ct3ap2k>Y?c;?Gv%^?A9_s7*^g9b02D^aoy=X=>|sUDUvCcDXk)d0@ONFu zX``cZqx#A^<3Z)d{g2?bpv|eE&9TJwM~RzuIhzCbH=Yb_UXizb@^O7e#I9p#qeEn~ z@8jn1{q_4VHtYXxHUz!sJ^S+C()x$LFWyvc%zA9xSK3@xdO0$;E=7Iuh4s~|pv~7W zHk!`XcNxC=l=!NNl?Jk*y)k?>`tc=#&AM@pwiNV&Mf3$V|K)bjt4Dve1<~Nm+*RU7 z#PTKJ9suS}fSDCdB#E5vZHK||W3?bKoHpj6v4fW~bG9`*`x=yi9(OBJyf17Pb_L%m ze0n(yNPW2YbAL-mS=an8*qlJvRL6wTpgDdGNs2SwJ%Mh+=UqGlA+7ezYF^@=PgJ|1 zr@WoqXeBbtEWqhV1QD>mKz6`-JD&4)a;5`~XB;C%yGbvRmU5|jb*sup($G=a@UtP*XP75wgGvSm`VO|IZzG{IA@>ng4JH z`saNAzgh=6by$^S>)`%r_5aN}aPz9sIrIO*I*9qdS_jRc|K$!^3M?Zi4E`7862Y|5Mgi&5e zCa13;&s&(VRcYsp(#qC$0Rn&0A6lqd7N|US%fbPzaR~|(N}ZKxP3NRA-BPk{3+zrF zwJZm$*!We$c4q~yq@a{cp59eVfhNk|&)}v2saMmiibvR87yMGtn*oRW|YYwSiR)#YfNXYt%!WcJY!=W4R9I}D*U)##$8?pWNHJ{FKpTJRZcBuyPS#*jy}rCI$~}~pmbAI_E;o1AQu>vzc1%>+?GNqvdVWbk z?)td5uYI2&%id*L1PV`(3(;J$g%lBs4&s#S1`+d8Vq@!dUA3>Cte142Rx>jgKa9ML zRU5XP%)j}`(XaG2Q|&w33jfQ?>iVdK9h~2ust}Mc`L%&h>&R;gs{EmZc77v~EF2GW zh_)nWcAN+dpNg_#wykC2@t2*uS>Nh2tM$88s%*IbCD`0M{EjhJcz%cDGl0!(12!io zp!g3yyliZmr8`z09Sv_D6mK$n4V4l@R=X;&*i;rxv;m}i-c!M{s~qgU)(}*3E2z|) z!TZMr^0K~}C}^~u{JMWow>ZO$T~%PiRQNxx0sDv3DOMi~NsZEK;nSemQjBfq*d5%a zq9Dpd?MnjpS4HA8Vj0JwfQfcMZSRpGSGP0=9Rm_)qtkeSW?APmAo(nOgg7KE|FevD zZpinwz{@GeZq2FDkfxyhgC5&Z?H7tK#$W3MD>U$^<1Sukol^&ex-22Lon<|L>=bPV zy(_If$*PN69zCl&X77FGERE36Jj+zj%L=+x%WwPZO)CVlyibl_9MEcC6}_yxPNu>& zJzg#R{y>4>t^7DXrJSHWaYChCt3OFOZqHLp#-(OwXNttBWFM{K~ zzrKA=|HoeWXXan;O#a3mb#^(-qs~Jm@XSuY?_U*2Sq8up^bL`{E4iOfKj0gx zA<6KP!SD>U@Kd=J*)~a&szmu~l0`3AgE_{x&z@mIEKT&%R#ALx^IRM6?kXwYE0Q|d zjy|O*@uh7oyT-3D=D^bHh+&3;a#wr1FQt`0@wv?Pp$3rYZNB^;W@j`gX}m2U^jq03 z?041#mBTa=!qNO=0^X;SbVo5kqP1@Sj$5-Tos z1dco&unfETrqM2+O6fJO;w&!xx`TBk8^=LAxaNd1gn~yN*nX%VZK)WiO_VOFj7`JA>one4z=4mBRj-MP$l$mecqIXYk|fn6O)+La(L0 zK9#XQF5J4CpuwRAzheePFS;o81fs7fHgb&-U+%qQ)=Co_GtSg$wRxMJ-qUfs+v@Ko$Vqnx4O5HchH zi~)Zo*V#|$X*J87YYtAxap}!k@{#gx07xLAKeSq73W;6Hx~xiuQw^9_@!^nGkUspu z%#aJX?-q!1ef(oSSE47%X}L5w>~iMGrDC*(uL&D19nMt>Q>yfyF~>D=d!fE_)_eH5 z+pacFt+b^Tjm&Z_zH|NXakMgJ?VZ0cIb%k2Tg$MI70pjBCRRttz4$`8bWWcrESQ>E z+5B;TR@cqPiZ9xtxHaWN7Xsr#ICsJ#RRrj6@ifh8wYzdnt4-*RK&VE1zLNYU$$bOZ zeJc)B)>*!V^h}APYWVAK`vUQx*}H9aL#z1DyU@4^hS-zU)S)NKNJEKUrt)auYK!_qUpRx_6?sLGlPt9sJU>z!kUW)! z8B2|CZ*JZFb@;Yb|HWII1m;_%&gD%%zdmqen2;^A74Ef0EA<-KKWLZV?Q$?Z9*-W3 z;W0LYlP!$~9NAOqXuuDNvY??4MsG$|izh#wZ~vIlv#~*6f%msq4aJ@~CwN)oootfu z=cJvnmlNvRl%UMdzeep}F>H>k;cU<2)GG>RfNmv&lujOw9ziubop@2U(08GK3b${? zC^4Q$=qc1v1XX6IE}ozl|E}f5UK<$*QVpCd3Nxxb6MNbH8nNU+IR3fkcnNb-uK7E6 z0g2to*hFv&goam!D63wr`fo>Ez z+S8yKD#-tA6sGI(dTq!3!?@6;FUluMSj*;DtzwlKGi!)vQP0IW_hc7<#TL= zS^P(}njW1(motxcewtQf?Iw0rW#75_cG>21(n$=_zy6iz$6Ih`)|k(&)6ewWN*2?~ zf96M88Z9+VJ)J`6UGI8pZ}@Amx#(8nE5C;5Yh0@4eGib&L__r*>wfc()cyq7fB!KU z#8?d}Cnr`<*nhnckFY?2)@`49;T@ae*5L0Ew5G*cp`GJhm zF&5_$y>@V}5f~VY@gu{{B@jGoveCU3b<^w-Q>^2M;ww|pTxv=; z_)&YAh|uX1j5m;KUxexLc^DCbyCn4Y&GFs>-d!8C*b$q4B@777SfgYy;BHq(B`OQe zVT(BiKhoOh$$z@N82wqTw*xz5fIdlK&?$%?7~wK zr;$nO;d9qLm7Db-<%2H`1IuE6^rEx7_1Hub4aEP}0ebG zc0vjo;I~UXzWGk{_6;JZavAx$NF&V2*EJ;53{2t`#EX4>3;BLVQ>G*qwFPy5hE|o> zUeC~U?L;tBAa5iPY$S-=j!y|Cp}Ah*$q%!Gds_KhCC_Owe@qiGk;QW*#R}VbAFhg? z$q0xzU9-?FUB73h zQ-jLAu17`y_+HLm(I-p8%G5Qb$+5v*r70n&nFIS%27V$tA3JqCFNd1vR=?AS_m%S@ zDn@>mPb0&EwJVrp?@YQx&j{$JW}z1!S3I|1Em=iLX=^#SAcZiepBIL@M}*!EseE8x z`MSMquMAOaey5mPY0z1klZ8;qMqivdt@;?Thve}I6L=qcJLUOZl@k>y$CWAf9p=-pjx= z#jBR35}NYKepg*@l}gsm2$(g5mUj{WecP0LbXxwUv@G1ICpBmDD9s9Lez~|7Lr62_ zUDI#UJ*JZ>6TV4 zIdE8zN4@4;>SL>)Apx=3EffJWp6NvEZppkO25YOeH^IGH-7MW zU8f2t?bOv+GH;y3+a<53rCJI3qYTqX=j)N67F}uf01in)v)Sc4^2>MFARwjG>*yB3 z3#;It=#E3JW~6+!tzhLBvyLv^4#jfk-m=nST(i7eyvlz0zo<^uURw;mQw~w{f;!?@ zLeNof)l{g|n<0EBc14UgrchE7y%9#)%C^64%*(?dRPJUw^qH1q<&Extd?n5E@K8X- zKNNBOe2-k2Pzc56WNf#bc79bTS=rSPFVxf2Vc)(5VIf?w(?|4CL=pS zHXMMNj;Q$FHR%(>su)-p=216lJ5s93H=DUIC68Q`Nw{YQ8R)_ctl$Pbija3N)fWV~ zrQruK4+na_RXxQ?nQcQexS&aRsM$8GOFz$Il;zk!7~Kc-i6!jVK?5wv;MhPQLR`iM zXWa&m^@GtCz@rW_yFWPba8Qpti8Cr51Ub7x%Ck$`@ z9)1@;xVt~R(K5I@1Nm64$wl+k3xOWQKk~C2)IWYC1BRiSj$^rx#)Te1kH0-aLnsQw z(PZRL{Llx55v1Y>Tg3=R;PB^%k6vvIa-A7w4;=l*$Q|5yI7H1I6=@w7-W+A@kIa^r zDE}FLsz0Crs5`0!rnJ{CTqqt_aN7d0qoW`=2@{^w6iI~} z(2hxji*D@`CN%hIk`R7&;z}Oe!(h@iZ_=lA!d-Dv5H#sIIO+A_Vua%4)r!g3yvbO_ z$%}s`O>mR$n-^1Br;;d;z}889`lNr}bYulb!RDm5JM?1SWZIdjgoG&*+sBda(>G_Q zueVOckf#|u)1{l!*$ME>*~#+b4O{o=+aIRG6{m^@C+jMv67f$8TW7L2r|JhGt-?<_ z4W_#Xr~PIhhqKIj2~TI9nT1Nt0*_0zv<#5@q{`jad5BzIpnguZe~5xV z-IxEaLEA%#Zw(NfbTB6YB25A~Z2=X`GfvDi7zV^f2kT&-f#~2v;b)v^;NTA!e3trq z^Vvbdvp=nX3W3Urq5c%6GTf=CeCi(-0CNA?rw`9mXu$FRd+xtfVWoNI#Cd6tdG4Y4 zpRLrx!3C%Xz!5?f&R_T)xNw-aaOnPwxpI*$e_rF`qT=7DN5UZN{b%AsRE)?HlgB*r z{sOBK2!fxt{kULpcF|ht*-^zjOlj#~#j>Kvvg(Vaop?5_wKJh z(ylLhw-)2^{5_?=~5z%DD&QyvqY8^LsZB;(Y9-M z+7Jy-eg4Ywa(;mnQ6hC|>6MY`E?E$B(%U@xThoHA81G%*4Y+#)3nanW zy@cr4{sj_eyx$LomJ%Ks;vmRJ^n4OiFdhD2OHlSAvVR^52|~mNyzi){zcg^?eTC4V z9iLN!e2cySgxH8-F;Au<^>bfyu$iMd$}*3>7U7`rc&;r21Ona1J@6T%jS9WDL2lU` zJj>i?jVb1t$RTEzACYW~yi#mGmtr_%=-;;AsFuit_#J4fvh4AC+q?+dTL@a_*^5KafH>sRzA*nJ zDw&o04oZ0T`DqqHRBV;v*J&OE@Eh0^Y$o55WT}!d`9*&YB66@A;CPz?xSqY}7TcPf z3%Et9vM`XckDDJMzZ%bD`9)ITzvkATs8*>64I972M!^4}HH~3$fJM-{_hFY}^HP&T zOBJVC+``oRt_W8rc!&5U+0CU%RlS_|%3g??J%~uxArEa<^!bWgmV`qAbSUeCp z4*kT^L*roe=Yq2Zp4olM9KB|jmc|t`HUR|&YEwB3_CmJU(~nNr5&-FKMBb-08kEg| zs_FtosqJB|YyH)>vq~tkT~At8T+I~1fs-w>IQysbh2!~|C^@`&78kOdl_hHRO)7NY zqU?iI^EB3#sjPVaw#PEETXpcO6=RGp%d3^s8l6rW&sYdP%J1e){!d+k{a&DU2-H*-!1?r;aGe1I_aHVg0Ks1*VdpOhLr({yd(>!YR4oht6} z;;&B${6!M;(AZ|x@`O6Ef}aZ1`AK?|q)LiL;UuB8Yq<4>$^{#R%a%{ z6ftvIfi3p+&Hq>jCB1Wfy|;s(#=fn(&K9?qzsO41skvJa_ty1cr{0PCtFr@(&X1C= zd_XE0$Io_dR56eE?iR%BQqFCz(8r=X^iP!C9*&sm6nYT;_0fUoVAND_*x;esZ?=bz zS^{1r9!=<<3J3IGlg8K#K2T2nes>Te@q54b+^N6xmQ#<|4ptvAe(in!eDY8G=j-3% z@BVt)z(_spR)O!^DMBD$|KwKv#}#o(r~{iOJ$M&--Gaio&Yo=W`Yt4Y z`Vsi0N(TS<)?c-l3F!>mOvA%hFokJc^6VVKHBcP-$oI6AR!ELf1dYWqW}N#wnPA#_ z84zeR5|Izh@;#&>c4BZUlh|CHds`e^nHGA2oY(bqz!IRJBOJdzC!$QnMB!`ZD6@`& zH0~`Rz+(L9?|fR=A&oUP>-675VxhCCgy4n8qelMJq<7)3K|4B+f9Df#$mEek-u5;# z9CZ~+#}(^U^L1x0%ZHcED*C9EBjT!5%Le`O{-@Crx5~d(_~`6dK8xc#xO24hHvH31VPP5$3@yeXJqf9tXoqTP z{zfC#Un!})ha{AAqlri}mCpiC;_3D^XU(z89mdpfVwy~}T^EQc5!K9wawhQR`Mj`* zYU##zCQ45hiUhlAIP%|_GOyd;-sY||z29gmU`4HZd05Zk*l40eJzpYvc#oaO*C=y+ zzRb9&S)th9Mmo;ELAks7)M>f%+Wt#zo{{%?D}i%kuC|%}5w-G~?;IE9omv@Ri)y6q z@15THWt)-2eIFh9MB>vO`xcw7rT|Aj<}GNu=I0XuL~<~75UhD@zndJTV@W8b!QaFVt^74A2vt&f|VDI^k%Px!^&zedacIOU#7gwf5YLEIa%&jF?G{w)Xts zydB~Fm??u#sD1lu>@Y2)whg*WnEOJy=6&s^)cb(iIhtaa=YhqjL52YGK417c^+ zJ9XTCl-IML{8P?dxwGt9-mXTAz|7@qo#l&;SIme2^YNp)CW>%1GL!}p!%`kv(B7Wr zr$OGy6Ci9M1n|*QAj)&R>i3@>P3yP?myA)aQs9l0j>}?^Q}_x3v)d#P#UV(gl%M;k z0cix7FW^l9?P;kJ|gzmq8$58R*9G9l@RDQ}-v$QceUvFv4dH#v4hzVY zlERxZl;x=s&lS!FLUs^f?$v%E7vDpB6e-w@AAsf~zDXP_3!DT1Dv5_e`90MyK1_Z2 zeX@6v!unO?1PB!qV#3++7bdz&9~? z)7uLPTr>ulC?GAFyRvf>pl=KQ_x5mr(_)BX>L*`v`c51E7U@Sn&S3tjH- z^fW1{5!PVxn9xmX%uNLlviyQU@!fim93B7|)!Le%8r-$WXwv3uHa(_kkAs-gUZ|#v zP|%aP18Qf|AtcL~>4_n*e(NFRo_Qj7!Kq)&!mr)}6ySXw{yoUT3)T1x_cT-VbL|h0 zopMrSZ8td$gcoO)bk>A*V52&o2{6BT(D^ZOh!EfV>Z!vK1yS%Z8GI!XGS(9gvLJy+ zRsxQD?7OQ07XYv$B{3fx=tcs&(XPX?0^QyQKu9n*ELed|C?F+1+l>`-_Ex$IKSzeg z6a4a~plOBBINP%cbZ9IA{)#E(98=tRbOgdSoEZbN3jwu6gC6n436R6}bYQ1^Qy2JP zg7o-W?RY_YDnJJKaEbgR5Cet<^qj-35Ws2QG=3mr>VkiQF(8Ob?CVVRh>55Eh)2`8 zGcygZHF{y9F8)2OEAsuKaEVt;sWLwkTBI~sXc|HGxq8?GeaWY?$45Y;kL3gy8z$0r zFNr7{kkJV2!GV82K!Qi0a5E491k6MQUe}5GHJM$7$O5o|@+7bXHT#iPa?fp88dLQ7 z-t6dAWYSTndSkBbE>raulLaC6k#iWuA}EFozf6sNxOPQ16;Lk%pT_~Y)HE0VID0B+ zmnm_TKhEex;tF4U?^XZKXpmEuzW!=-`vrAAQkr>R`s@^<#oS+uUqy2@9|(yTA)Pj- zn}~B;c^+f!`?WWC(@tf-ws<&x!;ahJD}*SnVex0r;uaI5fwCDH@R^6NbrcZ+UPxTZLPdVKBZDAtZbPJ)2 z19u|(_M-bSS-C(`*Ge`DNDBWBayd2^utk=)Bf6pj05Z(BDZq^sc=maA4kE{y!iO}^ zaSjQ%yM}b5g-(9Yx!H#ZuP=5jOR7W@>}vC#ltT0PVx{(AvQsh2Yq=_K6(aldbjH-G zzrd)y2p65iPHmV#NIn203KG+(rKJL-)cO-Q1~Lmi#uU_-1W%gB8%>oJ&`SaAwRr}j zOdurQs3FyfcJ4v{nf;}6?LW_UBFlTT%fBCQ<5Q+d=ah-2T+finkSx9*ntgNy&`v;?|un^(P+QhouM*8r`k&(oFUJBhcgzMW8LS@szbtmPc{buE8^FQVl!0!oi> z^eb>XapMcZpH1&hzU>{bYZ;6G4eA9a>u!6iH}0wFw&BGN?mTX|bcpO756xwJ*>x9O zq(gnNL+R;S`S%xcBWtnm-JkP#YQ#B8e)I6uywJ&GZ;5h}TX)8Ovz5wmVMqLDzEJR}-DlU@_ZZI5ogJ1Q6T< zP5!I|%t4o$Lcd-GwtJy4!u7M!K+7&DM;4qp5CEeFGU0)wU!X|6>y`N2TmW=K&=&xb zByk`ZISP*T{k?+l7Yx0>rt#^2A?z>XqH5!=Z+uTMK@QzGLzg(D^f@$A(jeu~jYGE% z-8ghB-QW;X3JjehC@t!slwx3o&DwuRmc;!nt+YR{oHVQ(F1dRONnvh$KgB)vb?F|Q>Mw6>)fU7Npl|!KIt9y44 zgb2g-fZ^_|4eg4mv2~%r76Z%{voUk6?L#IPD&KVE5W)|dQ>`eqg;(OpWgwb5B}5-z zRgqr*y{=v=zEh&I#VEvVs86+};;l;8Q>Sk8sty3<8+^q#@|c+p3$FU5VgH~Ff&)1Q z*4(XR=&%7m1i+w8a4%dQLb=Zm$hv*$8S(R1Q1$*((VM!X+5M&CUU(Wev2xop{xwek z4>oREL=!?8G|w5TA#0Y}&@pGyHqHRjmw_VFVI|}8#-gE$D%G&3YW!rdG!4Dmp;~fo zI#Sfp`><`eO-41RV?={%*wUF9d^XaNGu##UAReMJ_}km$lUirTgK>t-V+;?ca?}Dt z6U)^>3;dvkD!>R0s>VY^LCOeA=;IE#@4XPMClWfAPy;+@&h(+*m;Qazu|ScBz$f@r zKU|#(e{zZlAn{rD@qBnDv4Z03wZ7m__*$rDAnqA?vhY`6u) zB`n7!#RvHm1qK&p)@8te1i3`Ov@)PpDC7A!DR+K~t0F}tXwueZQi%d1py9zJ2S(p3~-s#n$_D7W_&<0{)Ul>#;qfJMJp#_q(o7nIwbf_Jlv3iU7TWz>4j@k1y(7vcLe{$0A!&Gf=CQ$S(Kn!5t^5P z7EMh=%WUCA8~WfzRDt3;_^<7GnwofnMrt5T)zG9EGUnGLa%CT?OM+=pfEdaGe*)J( z6p1TlY(kx|Xf!H_z%1(tZ?2XIrz{xZ7vee1Ai{)PJtIJDVU>xunAs0ODLNT+bw{VaSs`R zlMF)Lmz$9J)XDW9b|S`l`F+mgFFB7_2sEJWBem6)9RbDvPS-Fsa@7n#(*$PMSxk>8 zqLDj)xHqO)y;5if%@v-h!Cv?f&omf?!js{KSmr>|Onxob%rYA*fiDu6q2i#4_^Cb0 zQ^6jj)V{Eq7XL)9(j~3g01Euo83d1lv%a7BjFT)tKT(7{@y^@4x&}_9aPj3bwRKLW zeV#0v+E_m@vpt`y>GkPYYTq zcHLr4d$2n*45CS%O|H8@|v@NGfqUA=4=N@ynRHnwk0QYC!4QD2#p-1!iA|gMl690vo5Z$FhD%#e zcM}HBjk*s$EKgt?lrK>rgL(1?^>WBVgo^NC6%lZ}qhYy1`4To?O|-So`39jQN{nmaYp`$8SLbK zygK#ta(?%NtET@0^Z^gvv^_<@ses^fE>ViF8v_ag_|a#)39bWBB){17wj~vC0_@cX zJiu}G)~x7c&BuRX+pETC@V>Tpj@-!}7DP#==HMU~_U7F4RcK5GNhW1o^7I~IV)>4o z?&|1f2kWc%?{+6f4e)N&0A%Bi+|0_10s4J`;usXy^X4+Jvw%Dc2pnn-Y;rqicHz#R zGz|J-{}CX8rv`e~0nnQlcOH)UjAk-<5`)DgV&x zd=Q>MjP(S<9a+4Y|2thrGxsJp=bV9gtQ6^pTN_W22m*5+? %2}mtKVqSlx$Ao@~ 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 z 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

X_+vQ}AS` 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 w5s01w{9V zhB<4QTwlnevo}x^5r%+KL7T9U?IT2ieISusDai@qSay5j3@pBjDZ$1-eFD(Q4Lh*Y zX$_4nQ-CVL@peP~Gl?eYLlH75ca|DyS}#W#sIwoATj-<)cbMt5A0>===4zvSMbkkXNf?@)T#aW%Xn_R4ODx@4y) zx>M7=Q@6P7d`hR`%TA8lokr+~H(s`0mwagE{&2sj-J4C32OnTXqhGt9I?a7qv{j&^-2L6xZNQBT!rGaW79smG3luvKL|DDKXvN9e_)hev?<@2 z1Y(fhnJ|7BLk20z>0;k^`dKY$?sTWbj`zGDHL7VvkpKEoGg!6U%O3GkdDDWH&`Bxifcs#TC4nJ$K z@G{+iW%Iw+!ThSUuCh1};Nal=V@W^RXuG&(72yzZawLi+)nR%siXm$SBQh+u6v?hGTp(&N?l=Y-)=g;>ar+-H=a;&;Wh4Q>(tVEL3C%Nwx`NY)Kl!d-u*huqT zwWjWC>Go1DKCmn#6h?7pL3~ zK9~XYe-0uN00F5GD)29;N#G{#R4IApO5I)wA4Zxh2p3r=}_=CHntWQ?fJ5|KEbD7Yt3#SUFxby?4dX zO&~HtOG}dus$RQc^8Wy;I@3Yb>;HnP_x>xWn*85_s)_#_R88bh$;PH62^J)VWW@MZ zCws-!I9homx`d_hh9&aUwDDCoNi_XmrfO!^|81(4wDo7zcGlL^{J)#3{|T!88}j^D zjm{utX8pII>VFM+{%fUq3YY=z3YvK9Sz7L#0_Y3WNM znSO0gSBm&*3)rhvGqS0XxGysDZG5|tdtar)%`7*1d_o;v9l|K6x2nP%1JeWP#aCPd zXyOdQ9C7L>jwZLOSweRC1_*}R5Hx?&cx`T|&@4D-aH@&D9k?jlqT$j)F7o-4CD%#W z(*^i{R}RY`h%dG!vP%iG|CT0HIQ=||zm`3|_0p8NRo?xIw9X@wzDdWET*}wAOqKg5 z$#?@;=<}L@DS%pY{R98Eu~f<6)fh$-E^yBh2%Au0CWi}V2)X&k;6QxX*_`9J;<(z* zY4BkC_hHlt?;Wmu-L~GQ| zPJF(U9bTiU9WBT+YZfa|2qy$c35M7pATm?x91I3On4{_dSG@=g&YR_;+Ih6BY6+Yc zZbikMae3Os{YlSS--S*O0)q@TizDA{ zyVMeC10v-{iR0o`UOlSR|=mB4}zV#)tI>-hwxXgBLCsH}I?v%`qI!K5mbxA(#S( zXA5rxhU(>(Bq`kM8Mb4WHIK(z(%ZF!e=sEiZb(9W%r%^7^B|3<*r~X_p`pI9nI`W1 zz%$aoxjxfeWt+^`+P7Qgo-i&tDiC~fu}QtapuT!M64hAjwI9~;`rM1-x{0yD-%af~ zJNmT~>XOP*ZyzOl_>!kj#lYF~$DTj4{#BQIMs3NV>$8vTZ-~=P$1byY4l}!GqCm(H zpTeTwoM-UIfTt0`OTj;{c7G!LBOS6FusPBFiTJ@YWSJm3`D=}&%Y3|=ZMdYkMtpAb zYdP=bME6>FuuRyd6y{>=Mo7q4lBJdHrJ3X!b!f}IX7s65b_=sMb$IGZ`fJ!t>=es^ zjbJQm{D7V8iH!;6iIw2V&YJi0<8M7jhq3rA^#$ON;mQwMe3SGjYgMdj-%>_Zde3IE zMOoyZit?!b0vK@?GnvD*diV^I@!ObulNNZ~B=^-pi@|T7{on5S`Pz6F- zPlLx4A1`FOg1Q}|!AYYgaEh&w9!6qG90TxEC&TT>LP7% z+|?@#&GW;oG5B~zxw9;vx1OO^GZSyVay)y3wxuJ|g-OAm*t6s(>Pn(+rn;D}!p>Xj zD83~TLl;5(C!z@Mb7BRP_ajlP%E5KO62H(-;uAI)5d39IlhMs{+S60TIfK_fQt{2P+ z-{S74ZZQdr4_z3UPHs|JgO_gMr3T+t#4xV0nS>bdk7wmI6~@32n6u1`+9;JhU5on? znf78nBCO+i#?k5kSg*QXP#on^#6!y!mL6=V3}G?Zd0~b?sf$I9$9yDxS7;!&jxiHwZp-^s+w4!gXss2%12Zozt;vm%O z+-Q)kft;>=mjbx#>KZ^_T4<^;w3{GJU^$ReNkUXZ>iZ>$R}F}F;DLv!ggv)A6=r6X zT=9spv>cV`2kDIP`>~i$sdeOZ(FvjML#qD#sk7W+TJKb+(!A`vt{`@PSD(N1b;Di7 zA>SUWfQ^y$IwG?dF7n(HSO90T!!T!u=F|CK#kbzT5Ujfg@=^5X*X;MFtUg5wJ*8bv zo4G;PZSE_0qWu0F1>! z*i78l`HJAmq0}Hmrhg;({58kHS9W>nTs~>Ruh#g_I6RLVrDPDVt)FE%3v&w`0&ouN zB3BkvaV;|G<<~w-=>8nx?P|~KmMRdN^BXUtUd(@SZNn6+^zxo@N71L~&)C>rHV4~| zl1+~!#p&b8kec{{_{YdAo5!ySoI~4Fy!4DG4|}-rH&L#E1T^pOH^J%8iUsKzPZNjN z*-OwWKF@7q@6f3-=7)7`nf7YVgELjem(yN1?U)ml-^7hT8*Gf+#hm-z^-TKLbL=5u zQi9-KX88bh=`Rkn>B9Lt=|6-WNJI{;lm7U^{sBc0tJ>z-0yhm7e(l;flmm$vXaz9_o*DQC9b&(9M7gx&s z^qY9soa*j%ZA$M(cb{yeDJo8asD7yji>yvty)Q1S9O|EU1*_vhf+D0Bqz@;X_~65b zRWjczo{H=c>%xY!rGKce++Ji~-#Sfr z(d+wDjWUN1jk!U=6itC8QXk#6y_eWThs&)K=<{=7%NG6gO zBOy`&8};R9tmKPWr5aXV&w3SdZ?>p_1K%;dff3SotjQUbWiS1$t z4>DX6i!dO-Cr485U=71Dpcdlgr@sQ)3DM?UNCtAMN_0jp4jAfT`!#yY>{p^vTgI6! z#3?wSKuO!n_nK3TGMh`7woLn^BgASIyHeo$Q8cd86k>#f`_c;-<>B23uJ$1qD+bnC z2Lxl_sz6YQyw_vdB$8eBmFT2QLbh^6cG_~bXmrHw&oRusp%|;2Gp@euW632U5MyLy zxt?c5B1CyPM-i9&A(41hA^mX;EO0GFL_Y%n5`7L~2YErhYz(57(y(R5GzFv(HpJ>H z2&se&?B?)u&bR7e3qD5Bk#27NG|X{=l@cveTPcdu)gyW=SzjsOoe1)jBgjw`nq_4p zWPygzr^9xn98zJik}sSJ79k-Sutf-Y;O!PEsn;{5J|Q8rpvVH&DDJU@D6ZU0<`chX z66~6ZH40uJZm7=6#?q~xAnuSZHqIR!LkDz6X# z&BA>JWJ?ODAhRm3eAiGZ3y-bdvM{~_JiB3KfH1YRh!Vm=I~_8=K>l`IA;eR$gB5;gUVPQEir2NWgitwcUXl;w{L!g? z6XMSQyIjS9yamr~b|QW)tS(3>&-5Ypj1Z1{kX(vINCiOLE+%W)Szp4#5LJ>KbYQ)N1k}|m_0_E@A;D%SOd#YESu#+E%N$tedmJk|#i`155NJk=7 zd)sd1ef4|2IeYNBgqo^utC|>*hSiOlmW_-`N`{qz_fQxzOrrcArO9QWsl&>}6_MU~ ztFcts4MlFGwTv}-ybmk~YI`^8Qrwb$jMSl!jk~UmIhA zrDVMH>ahnFpHHUd{n=>E#nyaFYI)7$@}{BwOIT>VrR#JO<%?1}j|6h*J*sG|aEV;_ z)d{F^MLigMFp}ByMW0e?UL2<%g?v=Dk8)+Y-Kwq7kWTi00JM}~JElg$Z`rkxaVl%Qj zH6(EMsOA^nb+1D#L)6HLtZR^{+T!p>6;|js!o%TYu;B(x*Q zWfNXw*w_04mMiWd+lP|5kMfK0ZpK{j#n8yhDWw__^eU7G- ziQSY}U7aG&o=t5u^vMsf-Wu=^8qiP~3U(TdZtUbA8}z2~Z|Xr~@sLIZ>Gr$uZ!S;G z4NyYAo;AZrzuoPD`{?_;P9M=AnS$mX!;cIh z5tM%cR(%X;0-b$vd!Pybq%7h2sJ`QsR8)=igV@D#wQEjJsiS*5VeQBvSJasF6@;z0 zLVx1ecRkfQ6R1mV(9Bz?$s<%mp*wKfu`L|^a?#oL%R^e5^*x7pfOzet;O&X@lA0%m z{RU0lsmp-IKu=J35l48#Hg9kJ)N|HbqmBs>7unZ`kDGd%CT4azZp**)-5uaLK?F;2 z4eFyI6O(mQ-6#43i;H)4!e9S-RfhJwd$RaYQpL}5FqB5EE|{^Se}Z-1wkYXNUMt#SJBXs8S z&rAn1y_KnWGGxGORfgh3EuDo8_jlS6l@pvzCy0p%6<>p^%|WFf1W_YbyILF{ zzh@Gi&B8YI`80LP&-W2(Mc+)18{JjJzfZP)`)Z>8_hZNYiGj_>OC_X*(&cx}z$c>o z2X|@uV*dPPw;|(&q~+W8%J_C4y{L7YCC<}t-sUbj^G?pB(N_ncV=5@CG&HNRW7Zzh zrW7qs$^XdozH?_0AuOznOy7cV=NOfJ9lA2YCWvQ`~K2vU)m-%!alHNId%Xtl8TTc!F@X5&Oe7- z$AYHaQLSjE=3UnW-FUw-&tF$Jb7Zz7Bt9$O*v?D^A^`Zylxc)4Jc#^QpDwGy;axA% z6BT!=aqBIFFRlselz}ggs9QAAGya*(yO(zoYMVJa`(FZ>r-#MxquU52>{B)>5Hqj` zb9w49>44!H=*7iwZn-j3V)h6mMbO4mzO9+bs`fIr&VJ%gaRkSgxFB*0k&+&WQLw=R zMg=g4_wYYUuD4DYg?$zi%)w#2s7w6at9C+fa}QL;*W)txoSA@Ky+kb%yx$VB&IVTl z5_Ry;442_rK8d|^@AEdk7`uNuY(A_6_C)D6(ECrfd?Rt6l0^2u8uT703VvHGN_nLB zJb~H|;D>wXVfzJy=XUnQBNZ|{!Z@$AL6vLVvHKjbZ*E93Y(36^2K=g$kO z)y&u|NdI7)Xd*z1*IkB(Q-MRhnFP}$=`^yi+q5sS7bl> zV*0*PY?D6kYZsXNSY%Y1iGb9ngMXqLY@gizh4TBxfF^60jVy`#yG-)Q0T@QE$B7qi z52v11<6TBvTo=taTmJ0!FK@zVZX(ZDP2{Bwjl9!$#vhN>;TaQwYh@plGHa$Pv{LAx zs;TI8O~oW(>3O+^nUL$xjB?#l7oL+p37P*z$v4fn>1OzPhUN+`c)Nb+3+(J#xLp|k z*h^b<%VY7${Xf6=+>h3+^`g`TF)E6_GlOLI*I&jiQI%jGco&0}2_DqTR3%!4*c&UU zjj3WC;@abz7e!w9!0VvPMRGs{#iPCd@AV^*MOwS@ch~f9@z-|R#VD|fVlU0HdTHHT zC5wkFyG55@^WOX+xRe~QI0fRr4|$7_T-ZqOpFN!2CLXI+^YQvTBFUbK z`cXf(-+oFG1Cs`m`-Xm<6%l72wYbk)sep0q%=EJ-YDj!rB{j})EZqDgOVNUU(z0+A z#BW^uoG`cTcQ40klnx}u^n@KNZ^@>Gq&AMb-OBIENJIl!9BgYLo`BQ5uGF09;2IdT)K@!82` zN+NpHBRiW6QjibNo7W?|nr`L~*A*mAOW&BRA-dbY_{o(l zc|=xBN)u1kd0=V(XLJ*}2KP)f{-sY5ovA?vb=y$***Gu z=kx&nNKW9v-!F@6oe{w|)|MnN!`5)-^;zzQD|sysxb{Wnsly+n)(h_Aae}b>aT=dO z&S;#{<_zpV{tV!45zu+h{o}3RGj=zu45|z{*V-j-hTiFTK5J5PVUhLda%ctfed?gM zgP+LWNaU5ZDB<$#wU?{f->7e|KlRRkkum&u<)!ndU-u7dx$MzYK zbB(hAvp@TA+ID0HeP=x@lb|~P4DL6eS$Z*=pgI&CCvwf6R|-GKae*2w*JNKYdGjd+ zPq9(>H5ojx2C5E_4!v`TWTE2Xkl$Yu3KY+>a?x2PY$hmFj12co9F~e44xm7>*M#}Ch2KsE0;~{C-{ocX*g|Xzk zmb{N1cUgAfYSlq4wSRXVL;u`?Z?o<~uG<#| zmsno^g<)Gx|74=|hHS9a3zdZSH1(1-&ck`QW>-g?CX5mZGmX19ClY46CtwwJI zU8oLLSyNW)ow{ZGwOD#$lNSEn?m8ldD?|KE6)w~VC7eJ8v(@2Ms%9s z{fLa$#a8i;4swlzIc7~DvYB2w6?8ai<~{jel9Zq3tAe$>L&kH6G9^_vd7Gg{_~hx1u4W$(UeljmP_ z_kJ!tM1~O)WJYq_&DJ-1k6u1K`c6rSFu$Rzc%@185%x*eIho9(_ff(5Z7(C}@vN1K z$6+j;Ri}i)4s4}DUoh9i4rgf#s(fV0K+5>B2t<4m{PbsEJwFx_aq%?+n6M1Fx8`7a z`n$SXuzKw4=ZkP!E(-%#<<9v6w0cCZC4q$$hJYgMiyrq}6ye1`!Yk5C+(U4C#sYCg zYhaK%Mq^+6Y067zM>`g|h%0s?SYR*Rg1ogPKn|1bx%AZ7uv|C~m#>*2ge;XXn!x&^nH5z)tRg78cn z?GhKmIw2~2fWF}ZG3B}h+Jc+?io0EaRC(dI?<`5pzp7o!1Qqej6jhqQX!zp2LZ(E^ z34p)df3!4&Bw)RQFfs8Yh$j^iII0>q57WXyzSMXIjCxhz6O9HmB=L}tDF$Y8EGrCk z?JQIdOOPTF!?z$tRN|(ig^?nt-X$htih+)<(rwmwE~pSYF+n!@{uVLAGO4DPsD^_? zh9r4Xf#Spn^(lJFG`jK^yt)8dTNe{D1uII_l7A87O^7^|0H+JE;2v=NDEJ8iB`B15 zR?Lg!LX;WO2;M@jD<%TC^ayNB20~M02>IoOip^I|R}DWmF`AIEFn?P#lh?01+U!^7 zu-ZB}?b9!i2ofaR4$4XjtC@o`(DghQ#Lc0kURirByzX^V?Yjt6pd3_*0N0uF6YWLc zG|h^{WU?ip>4t06RNO`V>}CXmR31`5JV~b4ah*iMSI1|CWS#O+5aG6eNyzG>k9{$K z(sI_RvCI%WRC+Tj9t*#elv#$0IgJ7K0fs0cZ8KLcj?m2bWi3WK3$CCnw*|Wp%S?CK z3?nRHRiAdflkO`bPPElO;YhTC3#vpk3h?|}5O9ZB@ByzY<)iD#j&jwC^90i32|!R1 zl6^E?*M*p}P;i$6^)U#9#KD6o&?GQp)fD3RPDhOdm4Izs`WFXA4C>&c->XQVl7eR#zYZQtexWb>e z`8@2+Ed_L+`zFCH5e4<=Jo;+9oNh`X%x}H0+^#Uxp|GUBs&eWfV!nqGjR zW-^@BAX-enGQ=*L)<-DQDuQ8>(0XENa6p@~lvRbrIrSVqRxyFO3xFk0x9KRRZsUy%|Pfnm<1q&l?I zWpe`_`_+WnV%c)m{L)^$Z&p3vHp`IHQ2+KaWQzjg^w(> zo`*r7?A2a}7U|7F&%xS{$@CkMrtz8rM8i3&G)H0W2L`bf7!5BxBG5E<_&4$kjD z;6PRDLc!0E=gKPT##8F=q0ao!$2kWYl6J@mzV(1l9suY%%r+DeGP>7%qjQkD7H1Ol zX?3S!1Htc*ziug}y5&+=>r7nX=n+!MK-S=Rj!{UGH#KU(62Z6u(^0hN$)l8zAm79Q z)Kq;qUNn;j)e6d!qSwWl)f1`JP$=AuOb8*x^x;bp19sj65rRALXUgUx_4eLL9m?S? zB67f4$@=$*PH}g{sCd)CvALmg!6SGsVA>%fQGT|-4uNL489Qo6BM*OR zU;NHy_dKQxTGRzi4*cEM+QVx1gVN>psO#@emu+mpWDJw|T{!2I=N_zzt{%7kCeSZb z=mSE5ckplulp+>cf`g=d=rO{8#E0O!2o#Ev9ApPgzpd+m0mZ$Hzd@tN)v*K}td}Am#BCq4swpMgL*ZlqaJ? zlecyr%ZWLw6XayBuNa7fnC7|;_;_QU72tIlMXLZGDC1o0BiTpoXC964#7Qi6&em1W zA4i>N;_$MCk}9|-%7CT8AWKh^oONZ5=upw&UERaNBR?LQd(8|iyAgVE z!=F)rn=B4;cbIc?Aju*q-faMuIshr*a(*=eN(pifAkE`c>FH)hN|=-{FHjjdMno<@ z4}1PIOx88>!3$PqYFJUQejf!0ZVKBt*OoIjDt~%x&hAB&b?oOVCJ8JwqY2GI7)y|S zu{w^7>3k7ZSpJHw+td28Tgip`rg6oWFV{8Z=RGq+vet-A0_5MH;c&;y#mTQt+ApMD|2Uy}efD^LeE&7I>Gj`5+(jV7ck?ym@9Ps@ zgDQF@#K4%|iaxp&$t-O^%Q{;CJ%usS2Ue#ro~?x``maxzc%C4mhC&%GXm(a2zro&e z`SOaVF-fJpJ^N;=V&Ew?_`fq+6W2z*L-cL>ZhnMzSj^m(o*mJeQIicH8=W<_nfa+TbFXol&PkESl$hp3DuyXOkx8f+uE;rrsHq zz8hJewM%;!%Jgpd#We!ooHyS)C(nff+TXdnC$nWA-{G$=koFdCl+NGvoDb%k*Z4SB zKQVW=`CY#Bf(E64>YJ4?@u4MR#@2I=9$s!un>R3;_m+NFVbfguBQ z-p4tbY9zTz$5q9RSH|aPUNJ8fs72^#@`u0T2hO6zmC2dtXa@})(!-jc7b7}q3{+hDas;%uN zK5{c$b<=`*-8TJmIBmsx1+pFM!Y}VA`fiK9e8{I0CS$(McVwSJv*#p(Mc>(%%WPv| z4yrgv*^<4e&Q7V!PPG@PoO!#vY@5t~H=B9qQVp0cqIULgXVC0RWwr%2b{;L+_o{w* zZXEW+cBhE{ZkyLmO8RzU&32}$Bbk4f+`olQ_>$Vc(_~9WT6bC^x7D3?%K7&ORO#>C zQLpV*neEP{y~q1I*aX^cr}2JwR822O5b*ZQ=7(Ep=d)v-C!f#uV#_3Hywfg@?PBMNP+vVWhk z{F~&#_lJ=`%F_>()DG@l-?mnxHk2LxOyBvo^zG79>Tt{6v;D2-`vk_%dNezE_{R8WHO=^!XVmxV7YALoyJVK*G@0+IE!oiKe?isegWs(zfBpkhedztC z`#(U{*MFY;Pf+#Q`ID#>=&<*H0aXv6&*`A*r`P7eS^`M)1t|K(n3B$B|> zB#8nafIg;wOa&dkQGO%~h)*eivY8-w8nX}Z&;hs@1Kv@)wD9_$zfVuJKnR4YIxCO> zKr}R%iT@>Qn+t_N3QEh$iTvE;>IXHo|CzOI#+kJyyj?=xGehns z0tt=(f~qgOJgZMJ*jhtzm$F(|0c-%&j^OYDcALrrzUE-qc8kdA@doj%HR*O|WFc<7 zk*k&E7Qz1UFfE{@d1b|vhH2|ERHfrt$KgB`-doTGZQv%{w)kTH@^C;`r zS)T?judsjJZwps@WM+_y|B)sd&#`&gc{v&(lDO<~Df9cN4SgAK+T~Ub?j^#y#3xZk z_~hc?#h6*`ig>H#KnA3k^%hQASTWWDBt9Dd=Dbikf$_9h4_DG9>+fPFAfd@lE*Z|; z+%OD+zo8A|#b>G` zOjWw+K63!^8SL)6ZIKe^Tv1dQ^zQN<7&p5tp^W#gY&_T`U>Q`#1-+%s!N+c30spzO zdIwJPaU<2Rb1!q-6p&{)GwZ8s8g?WMC+k=}gn9hf;;Krq`L;qN(lE%%rLO35;G4eq z1V}Z>J&6}tg+`k3g`zKJ-}|o4IY`Dx3Qf-c9yA0Li!Cqqm5?Oe3?{XAvbTQ6nS0v; z_qbpvh_KzpYu zy5~QAJN8N7l(&Cr;DVEa=i#*Z`O@xJYJgzCyn?{hpHn6WMqMAhPxt?ru}4>Qy*V$i zjEqfUa-DnFanl`f`g*|V8#W7-3a;~2kK7Qt9HYOrKj1300a$ z^rlaFDFeK|zS~au5S-d#u*mT&620I~1fL$o zF+`q^W=bVPMSBL|H%T$S+L!+YRS~!Fv23r%5Z(D_uoy}lpNb&Lh-(ld-l zD!&A273=cWtLwL$??`4fUKZdu*BC-h(kb^S#B&p<1-()YBmb6 zXp=!qS^yuA>Kb9{Q!a?fs`+uDiNs>^T5LU^Uys`X^^g8F+D0&^zU@s%pgKm7Cjqe& zaw_ta-UFx<8O-wwmwO6R&0?t^YkrFWqkNA>*^2A&Q2g>JO~O)+#|CD7rwS;h(GuR< z2I%$ng0{yGSfKib7B%1Uh91{QRTLVyyZPsT{QiKYhuiRW7cHxxU!_(yUun|p-P`cpV< zR8d7h3m_vH#QZ=-saoe0eD$xh0Fb+ZL!eGBiWj8!55MCw7?(lNv>udY4G=i>zhB0ASuJ-0#KC-0@Rnnn_wUdRP%7uGq^W$UgvxiYYy1lmf0- z%`+E{-{t(R)zA(hWV?&k$eLb|*Jur4x{U$YKUEI)5V8A0q(;o=pqO4#;xk9-wp8ck zYG69K@!Wk7;~40Gd)QwGa1jJrV#ZFtSsp!aeF<<@i9J30m*M>4A4c0uFZ9J5-cFt2 zh$7{f{--|Y!qnFCpWx2+C+eHo9-?w2B3`q+ZM=Dn`2w;-?BXdW{X=0{d`*_t_ymEulYE^O!py?M{`?9^HZFY2EJrCVjsIfF zxqm@b<iJ9?bRI$3T8MEb(4h+mYZ z#+)e$pAZ>-nL~h||H7!GO~c_pyy~$6oeuM9zZ_X%0|*oRZF-F0w1AP|$NN#>HTd=8 zbG*e~xsOghyXl8`60k7E(F!I_;Kw-{mo5-;@F`@z?9rEj2b%LZelL<1%NY zHjI0e=ecA`z}4kObobP`{w!wy0=CE0#Oo?ri+h0Z;!EZmK92>k*Y`^yyug_y2N`AA-if0+sqqNr~#q-e0s(=WnFWlX&LvGX4vTI!zovV2uWfxpw4RUdx9Kjb-! zxmuEl>$=k zTi4a3Vx$vzm_J`u(t})ik4@Tf5wY@M+<9el39bB+i%!oqwB-u4(cOI_64 zOYpY}zGAhJLwP>(1+mJOsKPGTAqBb!0~krr00P_>usN#rl?_3-Vc>#^!pg+ZXTAsn z3j8!y_YQ^*-$6sD4DM8hu%M{7RlaNk%z;$zw^h&xYVZvgy6EbogRzMuMG0DhKvxF<;>mk#%iRpM= zs3k|8OR$55i?3LmNg}T%l^B6Z48kQ6Ws@InCXS5w&4i@Qi^bO^07fKu5Pcvy02Ne6 z8i*y_6uZiX1^tjWL||cRvY-%)T#xm+K2w_jXN-s1EpukaNSUCAUw`i930HCcH zdTs%Z(uz#S+T*#9Z1}i6jBY}_Fc_PPKZXH>;KSuiUm!82j<~rMeVIMr@@Q7QQ<@id z{%3d+MjfJo56z?hR;i$RS!4F#{A?^8g-Or0%Lgff2uet$WeC|WKSVsgEg_bqR0t<} zQ$Kt#Y05rwN{izj_&8PHyC_-rpnt}7o7~|CB0(CE7^hiP3xN^E) ziknBENDxL>gpr+ZIY3tDLSCjoL1CzQ`SRI!iM>c<8pt+*a<8@B=Jf!BqbX_#W1fdU z{n0_Y25(nX!6?F0dBy;Fy3e-pY}v(e)R{b-?Eq2^2)?Nf`RNni>QqQxwtRsAdPbuv z<`C&-7xD z*cZie{6=7=l$*Q zyU0`4g!5Dzs4~f7H(Y@jkpX{zLwBrbngK;`tb0yR&d*(7z^CU^V0OnC9tB`(HZOq! zi!5d|!N>=z3 zPcB7jbh@t7wb&;I0*oPsFF;4_iEPUa1RZ)e5zNO2=}%?2Oy~UUEIE9jTKNs$E(swx zs5c@vkcJQJ4iSD20Sw65L4e6!BE0Q40yz+52m*96lMbeW@y86xKXq}N4Be!veZc01 zZqiwII7=t^(HwI)HV84$E_?ZbE?Unl*b#W62gpRJJmf zlr>V8lP&K3^v;5_`(-a2JlmK>`7?9uTDanmQ>ATzuXH!u%IV z3&Nt{LDty*kG_hQBq6S5GLuM(A{&8%u0&DPTB^oN^!y9U_+VY26e4NSOa!~D5%!njhSHNT#$BI zc9%-~i*vYiOFgD|a^%X#yeyR3Y|%3^AY=3kx_4UOC{e|J1pL|>2puhZ+3+e9B-f_} zb}$iWjO7+fJLLCVt9i2tRwsgIewf;Zam}TvoYmqOyQ-i3?0LyDr#RXlY_0G(8}3&Q zSP|7DP_Wmp+sVRN>r6QE8N?X_cc#IwFrnswNM$93FeaSK6X`feBt-{u_nE!80=4ae z^G+DP&9n@x>9Od1OZ9b&t>o5;A^|?dsa0BBC5Cs}KEIPmmhXFPxyv zoI4lh5U(sl|D!?s*Wgd80HNol2B*CDnqBs@U+asOUZmI=h7NOogz<(Tj;Rby?hH=N zAVQK5xBR(=tvEUrp&J8{CGCTaUk6FVq4&iR_c%G=j2ho5E_+sSZu)6~A5iH+mCKvp z%ZHmPR4!GPZ&@YwSxvfWUaZPHoM{Q9PwL{k2dJ8*qN42!HHvMHhT?30oOQQlI#58PUKJ`IqK)*&io7?T>y=@BeLE*O(V^K%mm%n9S-Ek18);+ zeEkIS=CI93EZY^;Ns-99s* zA!eaLfP zthAjO^DB%UHvdt6w}Jzj_@~82h2w>f(B@K-2Wn(s>wJ{_Nc9kLcKxY0%Q2=dN%@Rf zx$Fq4EYACQkajZQXTr*&u{O`X&iOB?1?fWihD3j>J>fZLus>VP%>kB3;4|pXseFCr zRJ=u2DSGcS)OCj04uQm z6ARaqGUD&G=RyFoa;Y#SL;jOm^747t;F#Xav@Z%pTt`tN&l!gzZUkF63e<=L9NoCh z-lHFhUoX}i3r>~o)Nr#n0`gM$N`!G#HE_vkfU)_Q#j_q&Gzce^3evaZ$Jt>|Bb;$A zFv4BkR^XyFLdA*wyx}{~Z^kBb*ppAsu0bN0?3W2`diq6FhO7OfFh1J4a%idmM%|PaENr-(W;o}Kf$p;|tmg2|KCB-!Sbal4N-2dY z*S#2WW|-9>NFJ*Ota0FGn(S^`>HQVR%a!FrsnrkqtGg+rt7{`~aon(|+Ej*f)#`t; zk>IA(Pm8Z?#WZmW(!jcH%_fWo3&uSMFZD8Y)2%)070U7*ateYxfk>y1pl4k$76ONc=CEK+F>iP!|i9U#Zr+%`No*(&0^ zB~70 z_J^6wJFP7B&6_z<7$JUu4XS=y@UttQ->z$=U>0p~<_ilzo4K3`QX}@pVsVkZ$20SC zj74x|o5Q4-%A8;{CyPTPiHoVhA~%=Q}jB7WSv>S6WHaL0C!w&sxu? z^}qiYRCTUNd012Pu)SSM1<}{Md*^S&gMVs*dF-q$p9V|QdIKtUf(-8E5`4*fdi;)B zQ4dw9`)vCmrGDH%7{V*%(nTJKPL_vh*|`=z9?VpQ^jd$=DjmvYgQ}|gPg%nS`k}x7 zOlm3q->_{+ZNW*HIsJ4vr_L;Q&Xp$)FA|#;dp!k@PRfyQQ|i*2$Y1bas@Dfk?wkyT z+*oA2oaKyb59YStfEt>Szd2CFZFo8&qx5XpkU18*-In&?E+!Il_rvT<@a5 z0~Zj*TMINWEH8m4(!Kq?*r~D(u|Zy3Xw|ZMf%K32>Sq48BZj^^-^7OmxP0`%zPoqs z@a5rOoffshPPjy;1iPu45a(j%8Z=R#EJ4yoo62xYkP)!}#=TqeCSctyi4rI>ajk4S z)h+3I9E6Y6N-7%fGu8UpGoD6G5ZM_b7RzYmn3qSzs}Ax->*S%M=&5i+ zIVr=9uhNl~HG`Gd#v^Hl0>OK!kNrzo)^h^qP+CTUe#}u5K`@5VcPL==xKjb>KMyhy z%N(8~^F%cA1CVg$RxCP#EvPb#C6=YYK}ve%(kefd%_QReCwf~7{a4SU{2TkCqywNb zaH;cFs2&L)D1AV}n=QWLX(&(Cr?1y+6a>7ih{rpAd%RPTWO8yDYS|v$s*|2r@`QGs zQ<_<=1+=3O5(0i_s-JIwqKFLxhrh9%roy3KPxFv}Abs&xQE?JEZdG=IoI%s%_9r@u zg?%d0`ZY4phtqK*t07zjo`@bUHAql7w{LBvlYUynUQ=S=l!v=bPV?9ybDYLbL4X;MYUd=G+|Lv)gB$w7-z4UKf;ctF(D(9~_VBhp%N!H}r}- zguY2oEcSL_{j5sBW1>x4)!K}8F5A{R&_R3@L!6Q+$fKObfAwAQ>BUaoz;djlagc`C zA{QqF%7kv*gR}0^^66f+Tlf5aqb05RCg~gAOfK8yTILRFh*@>*E8y#Rwj6&6_-Oh3~r4 z91LJW#Kh)fchW`~AN*fo!+cCi7|un+`tI=l_!CA@ChAo838}6^-rLEyWDHum)G1|} zSjR%XU>hj9C^f*;OGW_VezH=Yn4WLNAOJrxXY(m&s*1^<$9J9)Bx^E~La}1f#iz05 zYANcL3z92!2?B|H+K;=sVPIzL&Zc+3zikEiI1vtMT?@shRto2qY@Xfh!rH_mZ=Zm$ zs1-g+$vw+oMCp297-Pe2>YAGjieWWoWE`-h`U-e=mtjnC!5>guSFFCiG;Y70IO=68 zw$4a6`!o6xfPyUJ{G&l50)>a?B*0ja)E+CXhIFB7rO2xRZ{$Z@@b&#h;t__iN0cpi zLieIkoQ4=BE2fdJeYez3Nt_$9iV=YUzf(1YC`<_Pc~PQboyodxB)n*L>yXm3_hXM_ zd5{;@vEszRIKkAP2m^E$Izl5lEZmPDI`#4Lxm3OCvzhQKI`Lv_hVL&JHoz}68S)h6 zy+hPBYU0=9>_@U}{R5F*7FS9vl2!s+ zn)T>1@~C9OStK9fP)VHULk}1(QDJPo_{x{gbsSKN;ti!R`9GYf57WHS*w=^!iJ|k) zao^Ac_ls2T8Ocdf;|;?F?j=a|fPHvcf|9J&((*iqEqJq^(@^iV82i0{r&^37bVoze z13t}(xd2n2-YM~EvW{~IKPP95q~dK~n92js6Y1TgT}IR3__nEoN6pPGjOZBy3L}XT zD~U#)21ukZY6pcsoLodrgc^5SkP0bCFm&gsW4s&j< zx`rV8H;4DMX1%yeTPFwYN^hpPue7Ob~iIsCuQZ@to*xX5ZK(L$Ro1#w7i>OzZrhm;(DKh#*yWw+DM)?g1*DY z=W5OMlb!hM0X;>Xgyx1v>pZtIPM_;BXl|+P<34-~wdbAhdj*4-(1)GAZlS~~nqc<&#k#pJsw0fQ` zia2&U&(5&5J3Pi%hy|HH32U_kqCj4A93@1M$Z5iz3|TL<3;(ob%iuoDba-47I21 z_Fqi><;sl%T-2e^pTo(=@r6*Ym!|>Qs2Hp&j>`c-9ZQKnI=NiFr9%?pD-3~9to~- zFI)olqL!P8Z;rR?b6v(It~Axb8l~qs>(0fk-Xc&ykiO zip!d?_{F7+TU>QP*EBzG&1CB?>ZF3vIR^g1mpf!yrLZvE=bv)8{cnf$_kB}q!^I5R zyT+Hl15??oFAHi+Wa(V++)1#;NC4C@REZf`vgw=G2lHtG{(bZ%TL=EgMmcOou*|@v zibUJaFv&fyE7|8&G;E;83gfZ}M=-*If#}VUwyF336m;YfJeK#$y(A*6Gzh#{=KC!R z<}UAh8535p8?Y(jE%6m=galyL;FY5UmM~VLEI=C(S?nGq$BH|+6P(8k{U5Q)3RD{j z1>yZzf#8+W;8J32ei>=-YxKQ6&kx&(2bwX*{8Xol04og@i!}e8RBmekY6MWCm7p<5 zO6&x*IiA9f!x}Rw(IiR=ni9VUi6T*`XlfRk8he;S&9I|n_fzs(DS3EGiY_&Af4I7zJmT+|96HgQ}D1=i4$a9m_O0mT@IF!;+eL zSugVvN9MV^nO3=(jux3Wk7YTxW!~0vcB#lPZOg(^v)rf|(;{5(Zx6(lL$eY9M;uso zH{ynMn%{0jzlg6~0@xmfg`0zKAmg>N*;+~JMSKpZE+>x>=(dzv!AsFs7CtwFD=05?-@8Y{rMw)6%KdS@=O z(*h!Z0~w(5Q%mTt_Vb?R=6CDSJC-3G9P|dT2i|nZLUKaM0r6i`@J#_K)iB<}XqUzO>Q51ak-zAAS?1|JGyt+o!({ zrW-IGeQhh)$SvrpU;qyJI~4_O%lSX_9=23GYzTh1&_-Xke>5gq#QU4k%Tdr1TqqGz z_|&4XGdO=En4?Ya;lF{x8H<8GYW|uYozEekilRTK=IbgHPEIl~m5;hP=_`-qIP*DOLAc(Zm6bwOrY}b|PE6)r#N(6o) zK=zwpmdt_Z5!Fyh)cBsAXQtvt>pKhhtm??Yf?YFGJ(4Wd!g*_XGOVdw0 z3E~nFZ&rh%0T{2BxwmiR)##wu_z-7jOKM_rOdOeT!RMmCTU6GK`zAC(dcl=Ph4^Cf z&G2KHPuz>0{=4bz>fc~jO_LH$_pQIhXuk%4<7>h)p7)W!-0WfZx{49|xN-Be@W|V} z?e}N$>N4jWI^Ngjm)k6_y!%o+`*zY}@Nr37H*2d9e$nsC@GM$;?+1_SQ$(_$Y2~JZ zpW(3iS@%~0OU34ua}}5V2^jaT+9|32PQX;L_NyR2h(Tk8-}0<#b?D6#FFr1_TqyJR9Sc_W%AMa%MLeG< z{}D3uQHtl!mGEGPLOnOWz}127D;7&mI|ce=YWB^rp`W{NBa0f{heJ~>t}z3*4|zmp z@3jB=;1tF4zT`u~+q37T;_Ydz3B-wH5-w5k*ZX_|xHL!>&unwg_I@&QJ>TuSOqu9^ zE=F0Bq0{y|3lyHyy(X!rPI5?|Ry{vD+$_P{{4d^rA+%23xJ^9(PbST@?9V3%usK`P`nj`GW* zEa|l^r`x?78~wLQ>dtbKKA1}L9I}~D#cPj88=|G9J3MWr3HqP2AG@E2_dmKHQ-qhi zO!L5(U>Cj&U@97n8yCI4?xQ7Xucz)RhqVcCE>tvmytJ{D;?ppVT9L}fZzwK36wjUmRx|}r=VE?G|8#RA3)v461 zmWg=8O{gX+qc^?0CPS;A-i`@Y=~zA-_|$SMV#q~XQZBo+<#Y9&`r4~gSm%zXR|oG@ zRooeTQj$NvE1&o>5Ux`Ep2?<@>?+QP-L*oT@ENww-D(=+-hQIl;Q1qQ#|60?(&Tu^ zQ?nZ7mv&L`x%=2f&35g}oO(5Xl~W2AehWKmglg~n!4VGDdD7-W@+|cZG4z!J+*2>J z$*Ot(uYZ0okE}$L%%>W39RC~{U5Q^pX%V*PeP#o-NA68jKTaN;b<`P%e0yR1&FIEw z!BIUio`?(?$c%53>C5$+Vw;_|5A{=#vTfC``FL6yt%ufYRzI%hH!Fdjb$1SVu@bMX z>?M@V1aF8dY177cWKSOaB6wrxKK(Q9Y4_3@3?Vt(q&br@(5@PXyKt{N?&z`7lj=^L3Pa5x8_H_zA?}XQ^Aa9IvHL=GdiMgpX=` zOL+fqOXo?0psv!3H9lJovhW<@$hvL*RGje4quigTu&X*%j(njDZvyepOy;?7C7)odX}HT7fI009 z#$68{I2nhj(6#VwGBXe!#8^+bCRJ${BW=+9K>_WS>qoyFBNUn!T3v zSZ(9#^YALmM^&7O`jdeS?i{N$*`L!lKDadoU+pXW1-U7@AHrdo%DEj>c-vj-7W%5z zagAL5j0vlQEA{)5)(`Z4O`kxST=etxE(;o5)Fp3P9oextcc^U6Mys^H!*no+5j;=D zZ>z!pEpZUeW1l>kFN1o2Z!m*mf9}|+;xw;n`WVA}Xi7Ud(FF9__p7L&Koo48$1~`) KwQ&ppocTWwDo`8% literal 0 HcmV?d00001 diff --git a/Godeps/_workspace/src/github.com/gizak/termui/example/grid.go b/Godeps/_workspace/src/github.com/gizak/termui/example/grid.go new file mode 100644 index 0000000000..49121411f7 --- /dev/null +++ b/Godeps/_workspace/src/github.com/gizak/termui/example/grid.go @@ -0,0 +1,134 @@ +// Copyright 2015 Zack Guo . All rights reserved. +// Use of this source code is governed by a MIT license that can +// be found in the LICENSE file. + +// +build ignore + +package main + +import ui "github.com/gizak/termui" +import "math" +import "time" + +func main() { + err := ui.Init() + if err != nil { + panic(err) + } + defer ui.Close() + + sinps := (func() []float64 { + n := 400 + ps := make([]float64, n) + for i := range ps { + ps[i] = 1 + math.Sin(float64(i)/5) + } + return ps + })() + sinpsint := (func() []int { + ps := make([]int, len(sinps)) + for i, v := range sinps { + ps[i] = int(100*v + 10) + } + return ps + })() + + ui.UseTheme("helloworld") + + spark := ui.Sparkline{} + spark.Height = 8 + spdata := sinpsint + spark.Data = spdata[:100] + spark.LineColor = ui.ColorCyan + spark.TitleColor = ui.ColorWhite + + sp := ui.NewSparklines(spark) + sp.Height = 11 + sp.Border.Label = "Sparkline" + + lc := ui.NewLineChart() + lc.Border.Label = "braille-mode Line Chart" + lc.Data = sinps + lc.Height = 11 + lc.AxesColor = ui.ColorWhite + lc.LineColor = ui.ColorYellow | ui.AttrBold + + gs := make([]*ui.Gauge, 3) + for i := range gs { + gs[i] = ui.NewGauge() + gs[i].Height = 2 + gs[i].HasBorder = false + gs[i].Percent = i * 10 + gs[i].PaddingBottom = 1 + gs[i].BarColor = ui.ColorRed + } + + ls := ui.NewList() + ls.HasBorder = false + ls.Items = []string{ + "[1] Downloading File 1", + "", // == \newline + "[2] Downloading File 2", + "", + "[3] Uploading File 3", + } + ls.Height = 5 + + par := ui.NewPar("<> This row has 3 columns\n<- Widgets can be stacked up like left side\n<- Stacked widgets are treated as a single widget") + par.Height = 5 + par.Border.Label = "Demonstration" + + // build layout + ui.Body.AddRows( + ui.NewRow( + ui.NewCol(6, 0, sp), + ui.NewCol(6, 0, lc)), + ui.NewRow( + ui.NewCol(3, 0, ls), + ui.NewCol(3, 0, gs[0], gs[1], gs[2]), + ui.NewCol(6, 0, par))) + + // calculate layout + ui.Body.Align() + + done := make(chan bool) + redraw := make(chan bool) + + update := func() { + for i := 0; i < 103; i++ { + for _, g := range gs { + g.Percent = (g.Percent + 3) % 100 + } + + sp.Lines[0].Data = spdata[:100+i] + lc.Data = sinps[2*i:] + + time.Sleep(time.Second / 2) + redraw <- true + } + done <- true + } + + evt := ui.EventCh() + + ui.Render(ui.Body) + go update() + + for { + select { + case e := <-evt: + if e.Type == ui.EventKey && e.Ch == 'q' { + return + } + if e.Type == ui.EventResize { + ui.Body.Width = ui.TermWidth() + ui.Body.Align() + go func() { redraw <- true }() + } + case <-done: + return + case <-redraw: + ui.Render(ui.Body) + } + } +} diff --git a/Godeps/_workspace/src/github.com/gizak/termui/example/linechart.go b/Godeps/_workspace/src/github.com/gizak/termui/example/linechart.go new file mode 100644 index 0000000000..1db5434965 --- /dev/null +++ b/Godeps/_workspace/src/github.com/gizak/termui/example/linechart.go @@ -0,0 +1,68 @@ +// Copyright 2015 Zack Guo . All rights reserved. +// Use of this source code is governed by a MIT license that can +// be found in the LICENSE file. + +// +build ignore + +package main + +import ( + "math" + + "github.com/gizak/termui" +) + +func main() { + err := termui.Init() + if err != nil { + panic(err) + } + defer termui.Close() + + termui.UseTheme("helloworld") + + sinps := (func() []float64 { + n := 220 + ps := make([]float64, n) + for i := range ps { + ps[i] = 1 + math.Sin(float64(i)/5) + } + return ps + })() + + lc0 := termui.NewLineChart() + lc0.Border.Label = "braille-mode Line Chart" + lc0.Data = sinps + lc0.Width = 50 + lc0.Height = 12 + lc0.X = 0 + lc0.Y = 0 + lc0.AxesColor = termui.ColorWhite + lc0.LineColor = termui.ColorGreen | termui.AttrBold + + lc1 := termui.NewLineChart() + lc1.Border.Label = "dot-mode Line Chart" + lc1.Mode = "dot" + lc1.Data = sinps + lc1.Width = 26 + lc1.Height = 12 + lc1.X = 51 + lc1.DotStyle = '+' + lc1.AxesColor = termui.ColorWhite + lc1.LineColor = termui.ColorYellow | termui.AttrBold + + lc2 := termui.NewLineChart() + lc2.Border.Label = "dot-mode Line Chart" + lc2.Mode = "dot" + lc2.Data = sinps[4:] + lc2.Width = 77 + lc2.Height = 16 + lc2.X = 0 + lc2.Y = 12 + lc2.AxesColor = termui.ColorWhite + lc2.LineColor = termui.ColorCyan | termui.AttrBold + + termui.Render(lc0, lc1, lc2) + + <-termui.EventCh() +} diff --git a/Godeps/_workspace/src/github.com/gizak/termui/example/linechart.png b/Godeps/_workspace/src/github.com/gizak/termui/example/linechart.png new file mode 100644 index 0000000000000000000000000000000000000000..655ef435f468f210fe79d371256395395c6facdb GIT binary patch literal 139361 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�Y!9Dj_@FPs=GNpw>*xDIpVY7X{%T-QOkt?ziZ zyQ_Jw+{Av)q}8q-ZOMG2poa+_n;lozdf4ZsOTdv%LDU>l!}B$yNLs5ivJ@{B#aAU zCKP-w1oHzYkx>GwTcr)xPF`M=-rGKF(pb;jI*_`q4kUV)7pUMFS*F#^4RSSS#A7+& z^J&h8U2OLm?xBJYqSze>|!CfmO)!{pX$$4Tu-S{+xry9i5!auigfLdBT*+ zF@4oAZBHJH0V6WG1;`(Uu;;TvKrgj|2ABqy?99+nvyKT7vVr2CSFsN2Nl;VrQ}3)1 zT-O@1-@Lm`Ol9@MWz8RAU&03@0}|`CNZ&W2y2P#Bloii=Lu$^ztnQ**Ex-p+2MGXy zPaM!&J*EJIngay0TSf+aOmX=9yyX&%>ez4$#$>7S;hY|@^Lpc^D-5lSWc<;{mi+nf zwaFFFp=r2OB#3y`nntZHR{`1B@fXPR=?Vsk4}Uw2E7}(|K!^pRq}EcqEI{_VdeKg8qq-- zTBA9tO+u{?c&ut_D>Up}j*12R@=@u-Omb)wg8^_jz{i-R}cVoMDsIgX@B{Py&Ca zkU_HLX$tlWk_Yh-#1%`IAntAfeRP#kwC=uFySh*%OAP(@yPUs&qvT&}NJ4@W^9xy5 zVh?SE1&4v4FS!9W&A(=hA+wY9fRe2(V_v3hyc=%n!JPm;gZ0EfH#Fx>po^{||R>!BkhYYzw17gS!*l zEy11O7J|D3m*DOpxO;Gd26uw{#@*fB-Q_KkoOADc_5FgcY83^W4ZEjx_v|^wn4_Wg zcW$JK=UOfa|MMprqM36WRmM9rw52K+6xc;wIO)J-QvpgM*zWKsZnliNn46!|5k_7| z@9!g61pD6IWBTw>12kpcvS|>H(-{i}H!0O7{9+&v{<(+*QT&g=|BY1t`Nm4n2R@4Z z7gWf9UijCtzdw$uL1;I?4}xnsPlQ%jpD^FMW0;gke%#4F8)EV#%(qx|T`Ka%6=02N z_y0lc{!M|vd-H-*MY;=b+!*CQ<()r89#cZ_h*-^@bS}WE>SVzS3=){qp0d`p)>ZKv z(bbW7x1$yQh{or~m9#H5Qx<0{Ixn%D%=2G1qvap*9yjHm-Vb};5TCW4xHEgtS39$L zoj{g>ay@Y;=CE}ifGbaeVQfaIh}qJZoHKuE#tj_}ne#j*{!f1b{auK<%2|&`s6+N@ zP7myR9dNs;lDdlz9IGM0Bo13XjLq21_oZa50$xYbwx8mN<7y&IyfBiLFQsfUhG zxD9zFh zpsQY6yHGlxIiRNw*&*IugWEw_H*TnCDU02Wsg0UhGRbZ<%0HqLxvWmy_J3LFG3YQc z+*@`gJ9fMB+EAOj1Gyu_6XSDUjp(*f@jp4cxB+sap<14F%MS6jYF>fXy<7DT>vO+v zD>%6Vm2YT`#S@}jG%L}ig_7t{P8T_S5L7dIVw~Zy-4a;b2jK6oRbU4v{>*iMs9EIN zhR|~$2Z7c#`sk{ z;$L8aDFFlPu<)Dg!Jj$EY#U%sEfz#5_V6a-8+D^Tz+c8=Cm{g z^d^dk*=Cuho)7na=NTent_p5($Ap&9f$NZz8|oZM1=i5Kk6h4$yu}lH0kWhEKA4VRXPEdYb%WTtX@g_JoH1J=Dhzu4}2~6of zEnd`LsIHX=c>h|RlHf^m6lZqr3hF2PAAhlH3Q>S7dp9=bpLyzt2CQ2-pD;PV*^)v5 zEgk2_&~fW2TkYq6YV3ZOe(!d-<;7gQ(|J{lV36>jATCah zKXcPcMym82>W{M&EP+D0B6B@>vwn;Np-vp|Tn{tWb14~6L)l@&K-P9|f$L^01K|W) zeZlFPn|Yx6=(A~6cN7wbS- zki2ezdZS+RZ)S{LCu?{dVt>QHyL`P;eMHy#+qx9&3-Q_k5yL3 z7nHa?Y`8T`II_AnLb;1GmDxpzRxYmh8{lr2fpMK`EMCwF1b7)?Fr;{I@!WKcw-5SA*0lo$`gAhq zcEh5fr>!fOizN<&G6BCND&n@DmiuN}*E6)g<3|CpEbaljjK`YShR9E=sAo4^NC#TG zyCwz3E~6onocvRg;6r$Lcc3#+Uu}PHDL3NL{bf#_Ln;-OogQ3}2Q+&SoCd{SoV1*TJtoF@l#C;5;ZuS62)lx#^!Dw_FNP;?io zj<|G?p6IdDdF>~Bg_fD9z1FI}WCYgpmh|1JsN`-pdgq;#Mx5H`BcFKD4{QY< zJ=&z2{|4^g5exVNRD)IO3M|gx`>5cpwX;e!QVd*D7`1Q&OgM2E;Z`UOPw{S*mGZet7wL2QnNOnHD=yNy_{eQGToRqKi+Zidn2)n+E%Gws9NM`2Y$Gs)epiIJNGM=XSonCcQ4QkZAbeJuRZ?Y16zS zO6BcnV5Q+Otvm6FjqE>b-}f_wHlN%urmAKJi>}j<3Xk_7AK(YOUp-3MUhFp3=LQ2| zOUBPrsRU-2NmAA+=96S&MGW4K56v%-Gl+Sj3hUpfnuDyLGMrbR(eucqkkX$Qz4cmF z53kiL8rf^fT&6x`caLo+#jayaB@KD@notYGVI;a|@A7TR%**7SL8*C%n+y^FYyI`n z;{dV-*PZ!cZ>%LQdJ!Pk;*`$BKW?Q|^H~gAX?n=TL2Z1qC7^0J`pf?`R44HFN*d-1 zUcYx%@$F>B`p=2(tx6vC-?hoo^`T{M3*x7hW5tD!pE~Z?e>1y2EYpw_j5^J9$wudlwD`caPHR z@8C{1kc9Bua6%x`@d3ozYg=v=vDf&R$L? zo#eVF_L`vX-K>}Ha-j&^*<9lbR-)IfiEZ@$0a;L}juYMU!9X0HYiN9p_XGU%V(`Q>Wu0j$D%mN^CRkAYcBFGCiD{&AW?JTCo7C=q5`=0?y#)P2HuS;obg(Z$9kK zRk+d0>d(J@Oem?EXssn1&LNm=NtUaZj<;`_`;3cD>7$vvJH9q~z+atwXm~!9n1yAO z;^~)Qv!k}ZQ^t(;k|#RHMYi~4=8w!>(ct(|g_Md*g1_T%@k z==iZZ9=eUFxD+ILN9IQgU&_~bP<93%rH05-KmcMfybEwJYMWR@m#H`t1feSTZ)5~?gHlQ zeV(G0;fi%3CZlTYsodS?qCJK|US}20 zJbx-Ay(aG+Dost{g2v|ejY>#0BWd?+_#pFVd&TdTMo)d>7+WGC($#DIx-A(jOGRb3NLzJfzzNS2viMEma`J3*-Dk9ckHMzT=y*MK8;!&X` zuAXasbIlfVesjzyZ3SkLBf;<}-TfRbsRBCjTdHM-@&g;qkN9WM;7`{PS*m@enr8nW zO|sS?bcz0_QV-q8+y@)I71&3vW-T)1r#Bqc9_SS(|eFcwfOV+R7sTf75Z?4D)b=xmY5K^7O-je)sG4qE3x2_n`!d1&f z2efh}HPVtlvq!#3wPYCq)|9UaD9C9;S*Bc?vHFK}?7Vu(P4q*!KK+qE+0>Cy+vZPL z_LDM8p=pY6!K8L$SNjJylo+-9qHxtb9$Pv};4moFxFWC}{L(4Z>lb8UL();z^mA^V zWA)*z`BNXKp_vz+^!<Nr+yJM_wN-@2l9868HL_xaQjZ!;Xa`E74rx2MXMK0IFZv)>V!fKz9u#6szrh3XAMsp zRrS@GX;W^*xo-w_%(1DaS$tZKQ+c$k`RX8l)NO(pXfB-Ix{qahLmXc}fQ0YHHSyK@ z{E3la@R$5FqXxxB-4;T_=?_B2yROwOUOub3?uT3ce(oA~dagGs#=V1K;Uo~2Z=>?^ zjzebCxwVH61jO9z>r{)SvSB0S^#zMFSkI`phnaponOT~>p=+0BR{DiGNN)2}@Qy{z zf>)HiaVz#$u&l!Prc|ge5Dg^SD18A~sU_aR!n({PMFOH1 zT#O_sQ6yQC3V}+)s=SK(kSclKyCeyciZrG4FXtcHAzMd^>22JfPBDSR8Z<-zaSDw= z2fwAjfV`V^D^+>*bRLM>{2gYUH!icIoGha^WNEj77Qjfgjpd_qu8zhH8kq%;*6%qid^nS2D>PH^P$ z$@|45Ly>=cG{E1}0=av9KJguQ8=*cDnQxYsu?tVTSx$00d|^$@v6>RSIP`^}Ih_RyoIH4j_9 z%31HQCm@I2LKh>?YWGuDD!WMiVkh3I^xE03-vN1lXKVTGt>^wzRMdmM=Dgo|@FX^D zNLFUu46TH!Q;L(oY%xr88qH@qc$3ye$Plunu*>eP6jibNYjW1{H<0IfaY3R+4Pi~} z(Dx{DG$B$v;UF|S-TF~{_;{=A>j!Q8k$5e~NnK=I%hJu_r*GN2bR3>zU)@>Om0gyv zrFe?wPv%z*s+u=#rXRC!LY*Gu4~{12HA7i z;rcWndWPffZ#G%g+RPs~(ZFS&^j$0;(CH+ohw)50s7aq+j)FNCrU|R5uj&^3C|~qF z*sFcmTAO$2({_U{r>@e;J8?q~f$k2`2xjFwLz^1j$Rvxise^tRneL!oAqau#PPdpCR>5XA!wEfQ9&LUTG9r_J0CmO#9O^9gCP zyL5qYXjB$zze)WO%HiStmGmp-bI@~}=&rM+Pae}y8Cl%5m*8HPI z@z+|UohO)yyK1y6V}z@^(cY>=Ir){6C3L>Y`e9g8`lYIQMkp)hjtad z&4nafDZy0k6YTuq?W%nRWBiK=6BGm_{c5TR|8Egq9w$%+Y*pRTkuEviAecZ<h~%@{pzPs*tIK)uJ-pmPsJA2>v#_?$824dq}@b{mdhbR;6$>$+-rB&TBTUyk^u+4 zbH|>PP*ddnjZTxzSE6U>>kxV5G=HM``LcyoB4&m|ryq*s>l+7sOCRI-7g@c~>woO%bamc2>RG zTd>OLqr1kF6xCP@h32c9lnmG1nyJcdjxoyR362Z1IXT?!L2TbVwo1Qt#E5Eegv9J= z-kDb?>!$zG#H|WWt?;*Z-2(2D`OeE?s!Uo`HCXzt&imKlfEs_U#&sN%-)C=Wx2L|I zW*ewu8N0v-ZOO)TCzVi34V=asg>!{A_s;~#MSaC&Ec7Zed3h;9mLiRXYRNQtOLwx! zYO}~8<77CWN(ka?wjSg&?{56k+)#=dGtbfD61;}Vo-#NElo3woJjYZ<1_aKHR6IX- zB`6fnq@iyGx@rp3vzXdlTb8ZVylB}L60INH4`@NHg)k{OElAh9Z0{W1KjL0OGl{eo ztkjI;a@|-pKjnvC7qAN+JS8nXgBF)d1UQDyN(j_jS7L3gMESQmr*}VPM60v!Obl`= zl*ir%Dr>noiC(?MAiy0vepwKSqd&)XX%-?;ioTZFO3SyV% zju-UcdHb8SS^R^ns?2Cj0P${LEAMJcett;iY$oaVj zjf&MymBE=2fQsy#6<{$O%pi&_3#h6*G>JZFoJVtFj(d9OrIMOrPM8`tA;hmhg}R3i z*x2KocGT7-r{7|vs-8xE_dW#j3+k;XjmGX`S=~#uyTJPwFXx}$BN%o|vDEZ4r(q3< zPF!!chM^7X7d=n=?Y1UD>#@+1+j7yp=y};nG`?Z*xYtg+I6f z$vtAvkEriPI%>k-77sXlutN7=(1U`6L{0jdOSicha=5<{vaF-cMZdw1njVl%*#l)xS#cgD1mkhUv~Q3*L>kP* zF*MK5XZMH5?59PVLHxv<2*NIc+HZxTt))Hu)aL13f3sVDpfiq+Pptahv?&Ivt{%@| zUE!~dxv2TfLUDi%f$AC^jV->E+>VWitHmm6W#n#8mMDaxc>e8IkAmF&eE>7+G$R%J zZ@p+!Mr|suu4H|cmyjZwuuJxmuycr~&L43!YWtK4g0^QCnU+MY{JV0|13NJ*_{njuGeE-6wIlqgn5~*2;5Opf#ZHLsIY`(@ z^k$s6OBB5`;9MklJ!VSq65IwvuHmM?^FU34rBj~_I@cK7geJ#bV5YYeBa3fA>z5XG zAxM-#`qht|TbC{U=&VaQF_B73xA7nURH zz0sPAZmY#sy}@rHM16anzM-pB2xg!5%88edFKQM{ceC?70WmvPjDohUDUmZRBbpCS zCi;NV`}}sR(0uaS@pGVM8Vb!f3-JKz%Scg?qM8qtvg`RVOq?RuZi zX0m(Esp&*$6uEcOX@HwBKlJ^ej<*MM*g1CE*dsW2a=g1|cHIN7u$=xZRXns-?^3u= z>v^@UjcKzX^jt z<5->WlA4Sb`0IX~@l*Kjj>bibsJUkG2M3dq5H0njgJg6{f#Na+ZWajYk=*WE(e@@! zcV@?E&Q*GDT{~(dZiWGk7>PBwf*XTSwA^K*xNLdU{=i|9QW;bQ4%=y(Y1Ci?hCo$Z ze^`Q~?d;n~jEwZ5l^njWJ9cj)LhQTI;67H6=(dtz3HIwTlj>+aU>F66drb7=Du@JE zlF}`o$7V5)k}IKl ze>NudlCNRV>VxPoh&jSqoCqZ?&`^G%h{u)=MpK;{#~fB97S3RIZ4SH4!kI^BOg1N% z`(*UoIIc37^7Qc2@usmJs)n%dJqHUNhgCbvuPTvEqB5^g%_HX{Ue&`HzXF-8N^RZY zrBnTiTH49uWJoLmbu%XDv5z3FYgf(M73KB0wa-6vH*TzMGHOLFjJ%Dv>S;#W^Y~Z% zLph(>*(+`d@nN$$GC2>2gI@9}1{o|yY$qoBn-t$x;He84xU!ry%FxT-$c6`%k=((O z!N-4_%r)Cy$jfyJ@IgAPd%{U?fO-bGR^-H2meBKX^Dig}2ln{!Y|qeu_vR{^huFmc z$K=4N?&k9Jrf6A*rqiBTq)Z?6$VYV{(woB2+$!u*dp+cD>p2Q6Q)wefXS4&Xmz>*m z6-@*+sj?uBavS66Pfn9)`E&Ylm`Vhvo#xVqAy;4VwoD~=I>lJnO6WxTjp!ys&V2`< zO&7WPRJ~~~Fg+?52S2I939fkb&oIu#fj1G!qw=N9_9KIBxrnr6UG30o#hvOj`>lS7Z&oV|mTo;`BnS9)j{x9QOR|V6AQWv2i=OQb@ov~TP2nAAWVIH%i z8Ta>b9F1p}muV02G<}^S$q+dtV@+;(tK`oAvdy=?iwnvcinI9g5-D4W*i})cg70@! z4}Nf!$d``fbG+w@(pr3M=62`bD z{GNshPnlM%rP|Q5Ke4leMtmr4JXMvMHOP+cV}H?iPIycNRQuCf?#~ISQ@^VL?G^eT z7}l5Ld6VrCv>@)gCb$pG zlsVp(<>w=de0~E;5q8jrq*3t6c{@On^s=nVJ!O{v&gAk#+*V`OeS6iQmHC#}Zr8(7 zSFfo=URAg6k=KmxPDs2PGgQK|xxJ$f4 z)k`j7rW_X=6!;zGN@DqQo0C_BitO9q`fwV_imuu)O~}0afuQmHu^ZvH!YYWL2Rw5` z865%|=!;@6$*Q91)J+BHONxKbE48QI3xgjmBd6K5Vkb=Xw=8+h9NUAw^5Gas^>mqp zIbqh|(U<-5q+Gc*%} z^WVALmyFM!qK9ytWuCbx6?HEPBQiPpmNhG5G11U1ENJ~i)VQ$6UuPW6QjgNhjM zCc2%NvH5u7Jk~8F2a4|tDa10Htg+Z;t@{#661npRnf|ow^x@E<^ETj?GvUeE% z3dnpVsSTf)%R`2~a80XL=h$)i4rH*!PdI$yZ}OVPm~_YtjMDwhc{ntbD^EXwQ2wJT zMO9w1zlUk5zK6u^tu)e^=Qtf?&lUBw5o1N|)ld0jT%#6MrMx!!;hn>YTn1c5F3TNN z68p49N{l?ej_+H`lh%PBYy;?9bi<5k=-LKl50E}1Y*ag~?0e=&7jcWkPwBmJ@YvYq47HW8UU6c~WjH;(~qXuG;Gae7DubpGe8ub)ce zq!$ds(DA#8Vy$V^kvwEItt7M(L(ynpW+_6xsMlMGYH!J=ex(AoDKwv;DYMnIhWTDP zphu7z&&O*KKVoY}-{yO)d%^@ukyV1(iiTAgchq)AHqDzCj7tbQ4{Zw7Jt&aXf*ITWP z-Nf>Kw0AV1`?iTM$---AHwkP?)Uv-pCXb#W=!jNmz2o&e(S#W>*a13LeQLIEl2Msb z7Jxascf?l0oP{%^vX$h{;v5VYFf(a<*mcn__0do5bK-I6+M@l%k3}ZAw*ZLU_MniS zp(t`gxbj~1r;txY+?NP@n;iM~fnU$)NYg)nAU>{qtCYzsmHy-q>U1$NQT1#Q7+UOs zfrkMdnf0jNb196>h!vQDGO>nmv`^Nv?rCVFl=@R@%vhF^LBAemNa_<=Qw3Rq!1>f9 z!_`5w(~o5=_KB*ysV^b-@{Knl7bngq&z`TXnp^c~w@i?ygbF%yAKUMKHFfdj zx?e&cPWx$;AF``pSMxJ4^G2z{Pb--Np(u}h0J^XvcWy-Ug|4%gK(39U$i$UcGG)JA z=cNE+R_?(eQ=n?0HLfU|b_a+|58u`w)hWSgOWd{|U2mC^qgaw}xB7EX;wwf{rx#IC zBFFrRyC9y=d653IdfZ zmu#GPF^;F~f1S-}xYNi~6HIg*_&>zgVFV~#<3BZB{RKTuR4VfqNbt!>@mX%~w|{*x z`|UZslreX#dw8{gS4a7HfTU+=fTD0kCJ1q1BA@NB%N7Kuu#4ps%&04H9ofUom(RzP zXq+#7-!Zx?O0gl)cy<`uYq0TX|6{5r%|NKp`*VV0{&6S&xEM%@+sX=O>KDO}KX3vi zid8~lYR|P{d9{LaJu810DcaIjc&T(>=79Un12=XCEHHKQjRV#bomeBQXGAwQM$sHm zc}i!JZ;bzWL2IQhmGZHyiA0Y!c^y93pk-s}3k!PON-AHZ4usw^=rq=H z8_L$D^K|h;?GQ0U)OTDZjzMjGrCY~KO5@(r_nl#XZb*t1qd_UJUGQLJI-j2~O%bkgzfmP<$EHI^;O|{dfR*bMyR zy#?or0;}mAn~SmFNVg7b*A6nB=J#8t=B3jW(hF#wv}{8jmZY?jpPGge5J|h{?LSII zDf-MF2^`hRbB<=H@97>+XB0%FIINzm_=Os|&LXg;O*G|rf<;G@A|hW8NEzpLKy`fK zB$0E*HX6)1z^?v88Ws{m8uLK?iD2Su)4GE>j}vLN30nKEYYq$*GsOg#Gfu@+0=)>A zv|xANE4&TB)Py7uQt_maDgvNDQ%vA~)>puqF#X%D_L$z)KU}Lf`iI>`q-JD6=goPB z_QB`tt3s|-bdB|>L;`AV6h$6a{crKMD9+YBJM+w-+Bj>oLpjqlkyLdVOWyz7PCXk? zJ$Zr=or@m!EQ;fh6ImnOLWoT4|LHNt>GG+?&bnosFJo-eq!cDX|6x(^=eb<{l( zbC$`(`p&!ajrSI)k3kwtxsb)>+mDzAhNWuvpLpn^dj?zruD*)L75jS$Qi{mfiPZMj zGK5_=8Y=GE%sCq4XB`evM7;Y@6V#v*bDZacrQQ>JzR?GLw>B~3ZHG4952 zAEi)$rt=n(#M zsnv&rLtzNb9=~0>`%2RqqDoef87T+4oy+L(m&c&Jpi>&U|38F>@aHU1UK zAGX;TUJgR_jQ6~GM!n_1$%y%huH}?2c)Ib){r$Tiajjv?GofH#@9L^1Zbj;ysf-5W zqFG{%3#vQq*;JVUmtdn%+;XksR`5Bqf5e^#jx8b^>M}SazNat3xTgz9^fW$_upXld zxEGlpGqMEzh>KjS0j>e*uKGM!36DYthY|2$FddRlv>%xvZZEz)q{LdEGUB+=P|mxk z1+|*hTAVb2JkO)v0&@yYpEli;{l$1kwPID7sZP^LKnb&`Ulc(LRB+JYu)OO&*nusq z989&%na5uoqU4{*z2QY2S2y;6wJ-Cr;8rVX?&C_cmmwKTDtD_-oEkycvEre7zje*D zh=UPhVjD?E^R-*0+q|^vp7e;yW(^7g(^Qz?${_RIvUT#aG=^YfsFrj;bA zm9cqbc-CdPz5HyrNwZC0McCeD{($}WKU@UD1C2)hB zW`02HpR?nfW|$5+JB)Kqs&}8(UK)^GG`b4|OZ$vlR|kL~M{ywbj(*T9rlN`eUZ1pM z5jdh@=AEjfaS5l{W0a^Fx8KUC8i`LoC8zwRUI&7!;g8QR*;85X*s;=7#rOXM2!4gj zn7#$y!5}ffEPK8>NXZh{{@x=% zYaQIk>$ZG-D)+i1nt0SA(EvNZvfUm;HJ~$7bZhG3ZU&yHJ$tWa2w0U5z;_PcE98ko zSV`;Uu1<-cL1x_wlp0mxmnBqRF%Q!Sl7j?aa2WT3_3X()N{+0^(Iuy-0$7K-4i1E@ znS=CnKc(vL&pFSXJkn-KCaV1=N1=0oT`&R}+7_ZqEJb}Bq$pkAWH6ORY*8td|9MlP zlT#?Zp_~G>D1hE&cbnR;xo2U*sM(=&HigbdQz{den+u})F3(LE*$U(NREc4jSv#X? z)c=tjLs&yazI;7w+L#5W1j1L&we)>svjco0{8axddblwftf#NBVp@G$TW~c5zr&^P zIp;QbJij?;r3pYZZvMZB##b_wRhRp1RdDiSFb)L95oaNo!uWMi78$*Cy^7sWjW};- z!t_5V#d&Qb12Y2BOlOz~^6rmL zkI-6Upqx!O>Cv3%))%h!D!@MJ0igS=SqLA+iv6AwIb zEvZ?9`r-qKrEtk*JFb{m0o))>eG5k%X-!mdqmb$Gxj@?tQZZ@hYlEE!WXlHYk+Ak2 zk&@T@remY?0lb&`1*=m9t%j+Ho->I8s1=C`xEb2QITJO)=l;(*RZq8snS4 za8dv|F4AT{0hUmv{Dygcp8YQyX>Z*1rrHOdVre08wyczNZ~E~b+3KqO$_qQqQ?(8B z2ZUa}0DFmn$@$qqYj5;xlhj^3&q~QbMI0U7$bZ>WY9z0uq#Oq?{gwIwRT2a`+l4Kt z#Xt|BIxSSOh%b8bQya-2MD-WfD$#aajoElc3;zxqXt7w&eof{G4o*Y!9eDPX;VbLn z&kz9=4qAZ>)o7~fr6Rd2ON2SXvDogY_b?zyOkBin2(yxk5Mzqytrw z5~x%N#qfwJi=K$Jt^pX9xs>)r`}tI=B1vZ6f1^^30DdEGXx8{UOy8Y6KyMOeW~a7d zim^i>A_29Rw<#ogO_H2x0YltL@bncQHwx}JK%1k;y3JYtx7fG@g?4Tk^|ChHZ_Y&H zJVY!Hgo$^|m?SEuM>yB7c(EQQM9?4dJV53c#r;cFN)GM*DHFIR27%|hIp*jnuKpAy z-CU(SDF%$@JSPhVoCCk_KS-7aW6+X|3TqZb7ko)t2T|SIla>QaoHNTWcfs2b0(c)swqNK0UnUMPeb&i`E5M=nLMkF( zVMNH9RBQ$se`nPeY~2b@_xSV0eC~ixp9reua@pm;zv_pE6kuJ#y2&>1Ry=TSA;(IJ zuIhR@Im*6Q&KU5RQ$^u1yPIgGs&S+$&ZNWt;WYthO*x+p!=7kXA>h*wpnic>42QA& z8__r)lL^aN&gxm+s*MtM1~d>rgZ~d$7R@He$2Dj7QE0d-eBjhh3R4+qteU19G{OLAK@_$ipM$`U>G4$@0G1OrE z{_X$27(=q!(Ay2FFRWgMF6<3vcU5uXZ_Lw)D{q?bO! zodpt^?|kojGB9IHZG1O2;q_dS0dIT&_g)Cxj&1pFZD!-0ZXx0z31w+B;R(7?ySDeU zOVYu$+>+Bs&)Io!zirh|aKv~mC&6L#o3&j?4t;ts`qWz$NhDq&2yXCy)rGYFjt2?6 ziv00=isuBB)6N@8fzKPZmyGUFccu_p9*t0F@~<2&L3|WFZ>wfB0vvCR!MF{>&^DY@ zz!-qmwFuM8w5<8-akj0%`x%1&Y_GL*!h#XfaC2YtEUzf6v%v}ALl7qcK=B$ym&X(S zaCz^0@W%=C70@1LTRe@YubqrsOVX6GcOz-#PB*w#-92wYlXTr^RoI-S%II%rj<`i* z+?Dm7bwJs7sptoxy70P{WC|P$-XAw5C<0gBS{pV~ab^ga#%8ht3klGPGiav2pnEY}ZE(JDIrx_3+rH!js{D5QJIl7(01^{=cflD2 zrdoU9#n`%m=)q3W$|IO~y+wFSJYFd+PBEi5N^*-qtI%*rx-m-dkH*9@kE~%M_Sr@w z%Exfg>x}Cp;Rrq+iLJn3*uU6GzE?9;kmVu-Ec%iFE(|pbB4EaE^j9-}Vn-kd$Wlb9 zaYs&YCC?pr;d30b9q6Dnch+f?9_ZT%F+4Th_vnBv!R>9cy%chD@!3qF9^zx<6Rdw& z9pp%-Pw}eSs#cV=muc z1R6SGRe`%t6Sf1qZ@WP+XvBaxCQ$!nqB8IAQ{koyNb4?9Pv`_3>pH>;`<^rGn`LVa z@Vq&@c_z{?PUyaIO@sDDX<)8X!y%-9k6q?70Lo(q0o8Bsl+5qIf)1zBWA8N8^CBwS zzFiGidHkR?RzxFUu;LB81>*qGs_2H!h1J9g0&&%!gNTJrV3Ph3R!-Y*iQ`h zG`*5_q`UO<$jb*{CqFzFM`QN%efVa;{7S5%93_XAz{8hb!HBZ%lGmLpg1Dm0Xb|m{Sn2)}N!WQayu~0F<11~mu%M$%*~z_?`pV`(`!L9EaOUA<#JW!N zCvf;;q1ZH6BGZXnNEpS=CbV8KsfoR`W5JFat2cO425p@}jL*gO8*NuoeDBR2G7nyN zVDjbe$*66&Nwvf$BmVQ?N|1 z>dsit;U~#)#8M@E=lQxl>IxCmn)7Vm1~4Hft}=e zt`-a4FtljGdG*J@jO_r+MkGZR&PKgzqO-@+t=kE$XXc|sK%p`*=-DZhTqOZHdcpvYP_3AhUj0 zRpYli1I1wWTe4;Ck>NB0{@b-fTps(Fg0@ zoK3nd9cG$(7H}`dT74%3UUx-jm1|8R3jg8fc%XbaN!m%Y>D-NSBbaj!e&jdMns9Pk zz1U9No??(ojjEz1BZ~1cf=Ew!Q|@sT)-_OQo9{)Ecb8$^Mb0vi^?|BmnZL`+@vWq@ z){wPn5pwBGqf(jB5UNl8-)Zzd4(!1dU5Bb0SlcO4=YLW!C-Tux#3b_G#{$f{Bpugt z9l_J$r-c?`;YBGXav_S7;|%f3>}i)lLc!N=hTJ7Y9uLvPdLNwK+)u@A#G@l4L%r7W z%jG2nYlTD6sWu0V28hwhWl8RYb4x4$Wv^%;g-0n*)7TMpAU?aE_G|tN{77*V!3-iTQ_RzCh3=ie?Goh6cP65gp0$j7 zS1oVHWjqkyi%7KG3PB9pE}M?p(lV{x{@i&Y6g(V;Yzn;9O`&2Tyr09BS8#AEo#?BOo!-pTY)J&Lxc51P3SaKwTTMzHVIz#%-Yk6S^x#LwzlIrsOl>sg6Q zAuso=qA^X@QLi+bV*v#*Zv6b?m&?}GbspUi)Zi3HRU$KPFKuhwITDJhpQ8a={VKwF6ToNVcz#UuwR%h!4!gS&- zvVq^(fsVX-EYGil>RjPRtx8!2=x^+G>8=ragFil7y+~r9=BnT%)tH>Fioc-fa%mGZ z@^jTpMy!o2Yj($4*sAbS`c}T~PLx!BMOoPX$oGnWyX;RDD?T&znTAiaT2OM{U(_i2 zb*<>BqUj0fY8_pLzlOB!zAvw?_m^BI96XAsPvGhEiYx3)^F6y3KasGM%#-JO$;K^N zMo-1W6g02fNQz$V)Gs2PX1Bw#)7H(Cw&)bw%~c(!sXc0d@p2>UafLsjj8@K+pS

o4u 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
9p;bss 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 z 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 DLvTMK literal 0 HcmV?d00001 diff --git a/Godeps/_workspace/src/github.com/gizak/termui/example/list.go b/Godeps/_workspace/src/github.com/gizak/termui/example/list.go new file mode 100644 index 0000000000..d33a3616c4 --- /dev/null +++ b/Godeps/_workspace/src/github.com/gizak/termui/example/list.go @@ -0,0 +1,41 @@ +// Copyright 2015 Zack Guo . All rights reserved. +// Use of this source code is governed by a MIT license that can +// be found in the LICENSE file. + +// +build ignore + +package main + +import "github.com/gizak/termui" + +func main() { + err := termui.Init() + if err != nil { + panic(err) + } + defer termui.Close() + + termui.UseTheme("helloworld") + + strs := []string{ + "[0] github.com/gizak/termui", + "[1] 你好,世界", + "[2] こんにちは世界", + "[3] keyboard.go", + "[4] output.go", + "[5] random_out.go", + "[6] dashboard.go", + "[7] nsf/termbox-go"} + + ls := termui.NewList() + ls.Items = strs + ls.ItemFgColor = termui.ColorYellow + ls.Border.Label = "List" + ls.Height = 7 + ls.Width = 25 + ls.Y = 0 + + termui.Render(ls) + + <-termui.EventCh() +} diff --git a/Godeps/_workspace/src/github.com/gizak/termui/example/list.png b/Godeps/_workspace/src/github.com/gizak/termui/example/list.png new file mode 100644 index 0000000000000000000000000000000000000000..8ca08c079ad499db0da1994074e5b3fc6b767c3d GIT binary patch literal 37227 zcmXuKV~{R9(=|G_ZQHi7$JcO=ZQHhO+qP}nw(XfcIQRQKb$%q3>gulQWc5lXT}gxj zKmr~H2L=cT2wqB3ObG}G*!I8iHWb8vy~3J|I1msVhJ~o8f|RHzk%FV0sfD!(5Rha< zN*bh!@&wM!;eic5pO=!qPPP~P2*$Jq?G)7_o#lh5Aw+;)bSDNuZy5j0pvIS7!(7oUN# zKPRgIae~w*Xuc3A6)4a+ooj7BEeQ$Qmyw4XEYaaV7g&c{zt?|t;t4}DCZPUeLV(lb z#wMaXARsj}*kBJJB%T5tKigcPX**(C*a9J-aAW2&X$|G+38mJ=cQJ`iq1TYd3c6G# zbRcdAUsC~I^wR`Xq1Hnuckgj8qOPVTb-eMOcuF%96VcQ%5e}&z2Kmdr6WQGH3BwXV zeKTXC$m_`o42#Co@7%%r9yzTt+YbW2dWFSczobLnLHl1*7dFLC&xfToCM7@<}9n=%kR1 z1f!1yZ`)eEWv()ZAdxZ0+C#I@n5SB_Tt6gZuBCZYaEk>8r5tlB0Y(nEM!e(M?dbA& z=HD=I3ju>80TIPw^(NrsHfoVy$qK~M%oN^T#_7bFM016Z>x?uEe5#m{!;X%Jf}>3? zZ9TyXi0Gk{v1p6Y{p-hAyeN7U<3G_KMqTY0zzK^Eqp_!_5;0@0X9Lg__>k9%JhWUQ zm4sfD<5A(MmO~CmFy8)*`XI>F6GXVhpt@uF-$dStt?!^1NP#N-;21`!58+%=u!Oor zLcs5^D4559VGkM24kE(MK3Vk=HQ0C(icoD9W)1rh zWK-);c)A7mkSDTC@Xv!>zYV+OL+1ewgxgS+tz$h7oaKa;W7zFH_5C;c^4<1`>zrQZ z-?|0nA|q`LUk^TpK6`Ht(+p-5W`d<89wL2n!E13E-o3b_2;E^{=Mgo7u|_uQ+}A9t z!7HE?t{7JRn+;2bx#`gIWUK~XHVG&;*i49a+hdiRmi?Dce%(3jr9xC6yF_ukjPl(? z-i_c-A>GT(e5IIQq)r*a-mNFbr7moTDv6zley=n>%AYGxtL5#i|{;xYPRL-wlP`*MZ>(C+P$1iNTN$p(}zrf=NWE4}cEH z4nVXOzk}VxND_qED0l{2GK6F)8Hj3$Z^>3svLbYb$A%41B8va8P4yq+u6ODMeG;CYww1m|&MgD~Wapb;x^=($ZE@UeWRDq*8XNw93AgUz2YLY{aRM zS7NV(@g&g{)|L2GVRUEHg|y7Mm8KnHyOp z87WyhtP(T$(;lb1GhGy@6uk1M^0n#PM#3%kjpJ?Qt>;a~>Y)tpl$qIUV?GwrM*yUY*}; z|59G*U-j_t@PiT95kO-hVx?kv@w~E=b4apRxpW*UxV(579c&$c&JXt!&m5;u?9^b_ z;MPQI=gM&8PXIfDFAZ6_xKlQDT6Mfj{1ZNLUUgx$kW)p2M+s%Ulw(i+XRM6Mbztp`F!qg+GBhBMULcu|A zBdwzrqYoog{&!4ph0{gb#u0&!fY~5;q*|s^!P?}4&%xlcS!(`g5NhyM|7njzfYwX> zB^>M^1{k(midZ5oO_TS-vB2+OYNU@OV5huPSne{vJ9k-lGn6$HW2SF-Y+yC2GTa;c z7`2JMipfLiqx!K7^aNonAWlfe%5o=ia1Y&!rf2;$+nl4z^sq{OsP<@Lm{ZNm;r{oG z_rYDwJ(dI|k*4p)3}C|M%lac7o4wEtLtm`HA6s0 zzT|w?QDPIhnIskoUwqW@?4-@Oa;R30YeK|1rJ`Q1m#@c9SVx0X+?;auSl*hzp7qb= z#~jQTtgps@Ig!y^qrA(0W3X3TH|mw)4+bTptwv#=@kruN39t-pnqsO6-M^msN_(S& ztrLeSTs89=_0Gcwd0@f6m=oyGQJ$)uwc9-~dLvpZ4V$hntt)y_+#_nz)zZ>30(Ay; z9gj^fb0&guwQ?F;4YLM2wJ*ajUoUMO?$+hou=G~zru8=8t#eyTt$TED40SsN9Y!y)Z@k>RU2Yz?l^ZoJUB+)^{N4O* zZxGitRZNvsI}+PzeRmf>>)$qgT;EDALf=9Y0gR9zkY2Q;v|3eoRh0-91e$6ws!^4Y z2y=Yf9>Z^vqA}t#yPAJ&CKT;eoS*0Pl6-qy=#JH=9LkQ^DdFU=xugU&w8NHX>ToON ztL|(h&Chwzy(>!=S{{z=Qv2|&7j0++YaBgyuqQLn&Hl_`WaHanup#Ek@V~X20H%7L z9?tBV0d_a-NR9`K;=fU6Tiu(px{h7T&KoC>6|?}g%Q_zI8ml%t!H=%*J4#+Wp37Qp zU8{5FTkGr0O_$QGqJP^idsmotU_0%etkIt=?KqxD4M9 zx~kns@1g|DeagSipBrwJx68~(odlBv(tMb|7vI^Buf7+m7ZibI#uKfTyI$2fN(=;om?j zXl+ICs5&ZJ+Z1<{-=m4XGx2=>fdx_`1=0&HDk9~Tkm$P(GrR+u&nD%6i-1MGeRwO6 ztmu&d{!;$|ZxFP?Fd*I|{qLdxZ7-?e1O$XZ{(lWvN{Q?q2uKJ>N=#VA9r(HjI$cM? zh2b;LAkX8vLyNw}RIAl^${ned&k&c%fr%NbJ^+hh4ww>*;P|B1-l^|xx94sL^A?E+ zOe7rC)gB02FPn=?{|F0wYLu$=ei=f`Qp2*vlR!StWAk6_rq>$5?1tI3Fw5>sg^T4{ zeWm5!mCCME~yyy3o$BPrNdWS8dFKaF=Z2{(x1&a>IhKSFdGS~WCMq?PYMhs>_Pmre%%kJ}sbY4rd$~y3$j7Lqp-%E8NZ4aF%hn7H-tt)lnG}_!#%aGdUBQZ!P&f?Y^`q zk7F4U90Z>-T!FfIt{h!-*gS*X&8Hoqxk|;7w<7eN^0Z!uzAW>m-3RLExJk5boK8HE zoI3JUq6q0m|1l$qO?Jm8eRwcU>bNsiU-FR0MaaK_A1?W)!Ix^(X~WYMQZx&$D_Hh} z76F27{b3PP^LMA)D;wHKVA7(&U5ng11YlJ04M0yuP4_mpfBKJ#!C68qQp`aW->I%; zyEq5k9iVl=uxi&vHlBQR=C|{a1W2nA!3!NyifW@#6d8E`0#Zh#qK#>0Emxn~A^K+0 z)_@dp%q!A|uf&==oX6>S9gCVNKXmY-`NZ zFo_GdvHx^fFmm`d;@shb;@?*{XRliRP4PTADuFr91VdAPN|!@FSnQ~{bSyt2BM#o3 zRUq9h<*B0{&b^~>&MrViJvd!L4bZhdkKx!D0JQ)0Or5|CkM@%L7#7jRNK$X9>v^mu zV#idKq-+V!!EMcFH8)m{97jH=r6AVCcsy1_sR$Vbm!=888ew-sKvm761JD#rtNsm3 z!YF&K(2w}EXV+nF@yE_ER}+1KC_F#E6k9jL$y|Y6BQ`!cGC4`HF5MeZ!l*dGfnxtV z5OfR37eO(VUU(nMy)zr~=A1^L^bSCZC!tBs7!{!ipYu!FKa4gfi4k#AKU<#C zkc|PXjBnU_u=lg0R{v!a!OKf92OUu%Eu4WFFB)%`=cEiYAuE+PY{+P&hMyy+soHuzzs&JR&Hg8&HreaK<+ zk;#n4=y^1vRwp!oIc5W*@%VMJi2xuM;%LCP;$*=cSsRX6Tq5RZfx#Np!i^Ee5fG5E z0sj7Zh*V6HS}Gr~#CG*4jus_mZ*t}@IjJxbK^4DO!QhUdgww(9T`9GWC@-`-G64-0 zD-gV4D1AeP4xKs$S=X;7Co1rWu{Z_s;7Aam0(^jAX{VD`=E4hGwg-y2Ql_0RfR~eO zvOuRLZ&pu^|7WJ~U6qzKXbIKhu(rou$pi4G{bKF{W&gpGSpA@wVxB$R+^L(%XUg-n zYwD;>+yj2o4tg>7F4a5%bggbrE_h3rrM_S{+)@~bPBtgBaF0{1#cGLzWcxEz25JX3F|P)b zF;nZ#VNipzEv4B_XAfS{@oy>YjyX)E_xj#luIA3=R`-1uN6(`5?t-x5dvpdQ%BQgz zBAGuMf2V?U!e0;zXjKwe=L6)l+6o0LgK@Epv15lS7;VwXGX<_3Qh#EBt*`H@YgvWw zEl6-txju$a$wsO$@I>ge72W7-dntvwDt_d&<}s^IS6>>As*Kvh z&(F_=_z1+=Z~`3G$;~C2ve#7hUT8ZZ8g63KSU2vh{6j6{UC#ayeOk?uCcd_a>cO$s zpLGSojm_rpTCvEWMEsG&EGu1ZYlPra^%!B%AgEVBVQkM9C>F>Q))-gv4;}~`lI&Ga z5r-|;+6_Ub+hHL_4WB&$lGba*KsN8c^dxJHR)h}JmLEE7AqF~tP{e?4_x&q&s=;un z02FzGViUZP>T3ei*SXRZy?ix23|;O0S#f7xrB{kz94w}_N9TxjBgbib6*eb~0hJ7( zE>k4N0J;LlzWzM88BUeUAp>DCql%}0lUkv(r@vX7DOvru=+LJmZr7t!ee~Rzb?as& zWQAgxdxws{kw4t|)FZsRTIhn;y6IUA=igD_fV~|mg66&ow{hWE7n{8X*BVi`=~A1KLC>%{Q=K86 z%BprVWJzI1D}sxxtB1Z|3iOg&8kgegqQzc4y$o?nE8P6;LosEmeKGm5%N3Se_~X5{ zRI|M%fH1fEp_^u3hi6a)Wl$R)+kv3TMEVAM$hJX1IwM&Xg@}@eT)_9SNfvz8Rs=!odwB? z0iZGTILk3_HM^fU*wQ2zxm+xgjq0Q=1F+CDy4AZbwc`)RJ%;kAs^PeCwW1|FNOGmzc$cXrP?r0%P~%ELvUWiy&d7u zL%T4B(dc9?O=k?WaZZ1qq<`N>1Ve&KtQEd{&igc$)GYWRu5co-1`yisG?rK}B1eVDQ(y^&?YHoD`FI z9D7e1BFjM%7yE$8BNH)+S8+9-4hBbJY~*o3Si`MjF&XVwQ*4(Ip1Vcqi-H}FVd82! zC+}nzCw&~qi%JTNh>=992je^5wI^S<50Uf0kBgH#_bu;Tl~MS#4aavW5N{tOF_8J` z*K?PCSyAh8y2X5(81;|(#{gUXKj>6UT+bV*&Gy4**wkiqd{f(RdF-=oMSVXug?f>e zCyXUFuXGow}0-(WLFVUEba@vtM{oarn zIXx*%LVkdWfZGZz={K|n6qMe#O}G6*0IX{-LSc-ePS0rF>9?zZmG*{v!-HWA@YQ^i zMYlC=&oah=?c9E(G5k#uy_IpTYWdLym?7dDae8g5nto~U(svZqkHf-ZWbp=1^0|87 z&Huqr&s?trmp&WQ3{=e@yQLuXvu^Z0Tj0@2B-!R>y3nx=mdjSGrFIuZ-F^W`rZT+O zl`>46>0g{jk!BDl?zo;ay1&sS^IH`1)d>)AM_XiQ&s{Vp(l=SdMrx*$gLNZ<$NX={n{ufcg&O_ zI%yhhK6If+4TKsJN4|)AN6JOZjVESLfp--C83@m5jJ+!2uhpat0bJ1kqhmETMD@nr zUs^z5mG%`N;Zj5!oWF*5?JM(;9=g)KD0*E4&9-4xH5fmjY|NssJWW{#))V%9%EUSL zb&y&Kuh&jHLr~Vry_u*t#!#+d7vl}^0k0wQ~HO+4&$pVDw|Co&m zv6^n5HL1B4cNk?%AVLw)+VmfV`$zlja3EIIRUWfK8M^rY=L6RhRz37v#vN!E#Qy~5 z(4ZU#w$M7RhX0##wg=pL@W1J|03Fc(37UfgUZLC^p*=RH>!Q7>*OUVOf7R{^=6aat zCjP-4T+#j!go5^c7qzVEo(kR(+wT8Ei38%&Kp*|w%quvn)}>_*Vf6}|clLh(vNQe9 zQm073wf=v)|E)GZ#OgQDYz!gdVPN@3rVyeI-^);)J99V9&C4OEpL&13&{XCCw3J}4 zeH?NB>*oL4sP^F_16(M#uQB?i)tu2U;yrJ=y7nCZVu>muM|nUV>LQQD8Z%8ZepZ2v z-rhT@(aPqS{o6J40we6B4glKGpq2Z)Ux7>!{rWp&MVT)c9oNe!r52yI4|u;9ytO)A z_u~bx@PIqvuIOg0b@8Arztl);*^9b)W^(1pDQlBj%XhWno>f)Yp%ug$An$<%6Baov z0lMXHmp<~VdFTk_s3W`TM71?CSsFXS(sdmWU27y@-o7a-gFXz(n=}lP=!1?QvDu+M zcr0SxehR;EMP=7Qknr6N(CB>p3**_~b~YTTn>l~gI4Y2bDnLxxcZ7Xj?gyQ!o%BQG zdxj&WdyAn*yWenjg>(eK3=~lv4chBM(6OartS30BaagOyecxgJ8rY&d!F2>vBH@3; z{Q0{Xf}=Tq$;E1{BV$LT861Vhby~PmhtR6#%=&I^LeQcX#Xix3(A2KlBR<`eIHXM4 zav1bJZkBlNpwVM{A!KX@lGjTfSjVT`!$K&SJ?a4A+U2jq8z59eGFxdM*4oc?oJMkK zhdkRc9aIB~>Ie$~V?eU)f+LEH^usmWNtLqJ)y*U4M=HM4URSJRMKK#1VZNpjy=ALz zbyR(0s5z~Uq4v8vV|u@_$Y_|xg{2qH@4Mh#{_2` zXDH*WTH}l@(c6U~met?JHM^^?zFf6MCa_ojbPngZ%@bSYV_*$)b(k<+SJZyzAa46T z`Gov6aE3xN<7Rk9z8svuj&r<%uGJMk!G^HC#rG}_dPSGYEx6IAmv7eT;rsV&qk^#;p=EnvoyuIu_yL z(=d38WA^?t%3;!bQe-WnfMj0^yrIt+WeL$9yB~jY+qFG$rvS`0B0&xX%q-wA!k=I-2(}I2f?&9~{ zs6|PvbGPqH2@IoipY5Xw{Ps#i!Z>#!yiFA5bB$9cR)#-}mB*MD4y!5l!0dI+58QtZ zvp@54gyI!XHq(CZOc7~09(-vFt+z5q&<%S;X$pE?+L)jkU_A;_Gb!n_>!Oc#`j>XV zNmYTL2s?6u6pAS0ZrEOkKMe8pI+neTrxhG_uUGhEzf{+>KT?6|qwaDv% z9C8wz@KpEh@F(=0i6islgNshMcz`tbdB2YSMT<|5-@A5^?@&CaV6Q3B-fpj0zS?n8 zLQLa;swB#=y?$sK_cRz}mNzK4%T5pOZl{haS=Q%##^B9&r;{A8X(L2APiNCDh}b7+ zGC3;XjbVX(5IcHi5~%Re8+XhwPsWUbiF5fdsUpq%VUBaxy(bOz>jJ$L~hHM?9@s zL*TI&%@fQ=@#sW4mSuYZ>{aiAe9-0`(iHgV2aJck0k6kjEI5LDA!%&C#KXIkF|cnx zYSH!*QjlH*um1JQ-|q=!x6p?*4)j0=w*5mLDK0vlM3yjZ=U^EdT~p|Hf#l{hhPA{p zK^-`-A0zuSDi(>!a4>ADHhsuHQqYK$oTMFKhr!>~_UBxv;{wfd zMSNW@>c^>0wTvZndFh9}5siOzS6M*P>uB^GR7BoXQ6hhWmR{GLK)I@kRu7%h6+nWi-kB8uq z!O}D9;JK9?3D1tJt18aI)iw%tX{Sy!^6inf4`#A?(Ej7$2rP=u7g3Ix+8y>tb6)qS z8Qo`|qMs{H?1{gReMhx`YXn+ERyVum+;H{)cI1PJ_j|Kp zjU<=GY|meOA9t(0s zMWn3mBufJ5rnx`&H=^DX==N7T#Z1q%h}wv^C7*<vRZe=1a0I1&s1ZwwB%_ z2xYsnsuWwgqY**}0gZs4a~a*3CJd6!^h(u@nh+VThvW_$`J|EIW|}odlrdM^E?x>v zx~UVE$wJ7kHv2-k_PlWQ$+tW&u7JL7J-fY>E^!;kGg9P{Hbm?Q1!P2g7)y6*$j0{e z#shGdHX&ZrSjC9&j_XB|n*^1!8g^CC^`-=T9s|IjI(*V>N-QgQ@26kX(RBJ-pw?k~ zan{r!dG?nYVJ=g&N9yYXD0PZCt`p5q9{=gQTVeF&n!R{m8rMzmpXQ$6v#>0p&FGto z;W9BJv0@L^k1-iLKZ2F=FCOqZm@)d(G-j4b9yWiuEl6RGpQ_X0L`1t^F~ya3ne_LN zJmbPn`pZi6WfmgFLxI^7r5<0K>}QyI2Oi)KwLRiYnfP<#?eX&Ir%=x@CjD5QCPq%= z=_T}}8RoihF{}ydvyJ$DWAl?0{U@jP$S7GO3RF=$1!BzrBHAV#zZV%s!`pReDkL6B zh8b}tlkU$Z&EQ2iW~})Lch6Ax%}DPdjcJ`balr^BX|kdn5!h+u*?48kh&&Jq4Q#^4 zOHZ*GsICs@kfd8TYF_+5*}XpN-Tl-TYFx84ur^OxBs#Nyx00Pe;lysu z!4Q|Zo>%&KqiGrGi+HmGMoM%^Gqch51ezsej$_je<YkPUs8Rq~Q{wX{wZyw}}y#S;M5`5!f zg<1N;mxc};^4^BPIqA$Z1IT$8(8~%nAmC04KV_18SL$cKIDZ>bq4UDx!05j9-Y{c#i8+y1?tuw&Xxwdm9 ziw9qyM-+*2cf$Sf6>LB4vP7ns$%*5& zJ@oxx9hkO#2f|L)>(LxLsULEXsQAqfGV$3kV`^H$0|fH@;-oIch9N~9i-WW;b17)W zJ@%B5B16C}<+Eo#PJ>Eu>*ur)1ExY}5n>gW6hoP%>GFH-Y%75KcH?bC*#o z;P23+_#iK}7d`_p0Vlp|zN<+SnU#qF0_WmJd+OGtWr6lIsk{&6(zCJ8cGC|F_vftg zFM2Mc{s%<>!X=vGW0H<1IPh-cP{~V>*yM#Z5A7Oa=%e&-1^g?j99slqcQ|;GWdaHY zMODOVYY&MlIQj>p%($!e5~S!mCpx1emYihVn#`n52(Ga~;!sGBv;P&gO?Q1i3rt8N z-r0+SV8k%-lDdo;6eCRv;+PA_%>H<79y3(rViGeHYP9fr?P$xrG96mHY-OYEAIaA@ z6k#PU!2nm>IE`@p=O3BFXC=6xoob;f2MWV{<+dqC#XiO)kv$uBLXm<@r!`9f?bjdO zZt_`f^U~<&qY0jyRdIO|U9ZYc`MC~RLPogggx=!`oUpEIHluAZzGri!zPH=tZE@~K zY4<&e?RUmK>8qnmr4BH}ZZ$U~fw7b8miq|a4c$NcWGHW{cg=z<^Aj{!5C~$YlYO+$oomheJoy znG#nRh{Ix|sdbWy@RAJZX|m-3(`ZsZ#GL3xR{+`~^fW;B3de=rpxF+p2l=qEGCTNr zkZttLnT6xSje6VLLzXw0XtH(NGGjPKuQg@oBEPzjQdfKUN%=7p+XweE0XuIQ`Y?Q? z09jL-W@@PlP3TuaaIhJO?FcY8e-m^$j2W8Po;khQ96-O9!c-EFk&`txp}6xX95v7P z3FL_6003kU!xae5vr4*-T13lbJ^=)Dhi5Q7jR!BDS(yV^{QEy`Gd}^Xqly8L*lR^9 zY+A-*o7(~n{Sj2mtsi&*Lf(?sJj4+aML3)wS#F7PW+Z)JOxu;GnHffXYwen%0zTE% zTdVQpD}RB6kt>k({7C3@?33t`SgBSh<*GT~ZRbEn`J{}a5hQV4M%}!&nl)rW!y2_t>VA@{|vG1dW180Yvrcc zW_?l&#m%mVecX3E5AFw2t17ZaxEZKU{1~iXjx9 z=E?1I*m5P3xhuiKBq3(*42d&SwTH(YzIhwOEG|@~PL;eNxf`P?;}G`S&O_x-BaMH3 zzE`QgW>8HV)^kJ?ISQ-psn4pv_aabHSiI0!w>_WC-@H8Sw|F=3Os3O=Yf(WWjRQR+ zEdNYlMGf1d{Z~dFjF)!RK0%57F>f^7o(C)>`lcpiXN?{QicHa1UEgd57a-^$D#^7^ zY#O|-Q#~8}i78CMF;qM?#uiFwN3?2-o`44U_dtbcOO~Le*cw`*3IE1cT5p6nkZfw- z;0j5U5h@9UoW-U+yxK@hU~rb5*IokfD7;RbUe6jdSS?T<7L`3k%fijGcKCcAE6RqK zY3!IsFe>0EB;Z@B^QiSfbvSvYs&2S>O^vbX zIYZ6hBckQ_~jijv#6 z8oiXWa8qK{)bm$ovs z0hUp=MEj%G(u1c!QErFZdj-%>vPgC4J?+PpcpUB?dQOtn-9Xz8txF5gEo||_WrA2E zLC(WHZ=+ZYdqsLJR~peM$cxZmVJaWA6O$4o?!c~0rLuOpoeHzY%T7KZxt@6K`=UU! z85vl*-y3+XeK=#RjPuMEIDKBVC>P7ch=c1az2u;8B;RQEpE~{dVIb#&uTvMmvEzLq z_j6@*?TpN-BXkq>`A*6*kU=qj<8A1M`WuquC{|Rc+CzX7ui6&jf%vZ){Vbk z#H7yX)x}DB3r@2c3J}PtYq%ULGK}2(5H^4U8%;dJ#Rkk3| zIA&>gvIowovMd(4Xi^yb-qEf#A0$6J|3ouc5^WXw&0}l9+dDjWDFGPw#hxMl42RD7 zzma^qgy9GC11z8B1-?_@QQ;LF8`ZWI*}JxX^!ThP#lRA{Nj*GX62#$l(2JZPCJ&!e zwYu!TQDNOvW3IG8D)1c!%QP7W&sZtEC-*OZB}}utpI5RZ3M7N~&GCaGmMD>Ebjt@+ zF$^!&d}t;TVLUFe&*%rzvzIY75&UD)CcpuZD;~q6uv@|l!ETCuxH{+uvvjf-V!X>C zGd&LOTv34Vi6z&a3q^=r&)6+yK#8EbekP^-p^YXAyeww#`=fVCmUdx`J z(p+zyU~-PI5;t3oMYtfidbmblbKT)E&colaa}C~|(@7Jud7W|cxUlJeg@=LN5G`dI zlI8c)twW`up$P?jItcrE%#?0nTSd(fg?P)V9kMmEDU=Kg1+nWF?eHZWvq%y59)$h(@i|W)OI)8eANx~<+?Ew-N zYWZz_@!Ip@tqrl!`TUQ~!ExF-X)X6=a$8WO2R`H$ajPwDmj5BH9xQkX;Om9Y*j#9%S|x~YF((+a_a`! zZBZ&}jo~c3Cf(x(z?!|qF#dZDhjS+7dJl0XmaO_)Rfl-wxtR)&QozL0Au=Ci_ag}F?y{RK zHN$vtB60Tc5@Zm<%7G_zafe_u)=N~|BM^*xUJDP}BxQ)#+d{eF{MQ4YXeZ+OQC8Ke z+=Bn^c|hFz_dRpi_{eFd7jKxWz z)TylW!4bY>IXqpHC>0+zHM@rg2tIEfGoG8OW72uh{nIpXka>hec^}VPX{won9xG$4 z8UMpOO7CNm?$o0?PQ)?eQ4+ItA@iU|!je4Z{m5Nu{|6*O)UPxwvUe1kBPpN%D5+hR z`g~cOa*F_UQw=7vrfOSb=Sf0Zg-Gb?lcMg;hCDnPLfx(Uf-eAaVlTK|#K) zxZn_rVm{qi@rM2}nGL%_M)1b!gIVIEct7TD+5O)VfkXGX1%#)z+M*lC8~}e^meYU< z--}uk`cdXk`R~6ZyX1Qm9c4v3f|D2>@;8PTbtN;A^ctRmHt@NP4$a3{b*w z&r8yDz1!2#pZP33b0!^i15Xc zd}J#yEBiws?yL^l!j*DDNCibSH5mtM@*LQjh( zyZ7^U%&f%hAGHa($1R}}W6S;8Wx2h>c-VTrUYR#F#Lrj^q2r@~R-3qBHh&H!66^Xz z@+b-Siv5tvn$xUaKKk<65o03XaBhl6dRQm+nQu}_xqYxJz2~}s({vqDQ9A_s=jLW` zXL>0LLS&Nmu>Ex8{)lPIL&TvkK=kLx>EWK_=XpY0`#a#tVS)m95`U&R+M7Lyl$4Bs zg$F%N8p({t@qJfK-AKbnL!wKHIB&@B-_epZ%V*xf$xhlob`#r`m6~Ng?G*g;1|<@n z_Q>kGPc2iKlQIsy;`U-_cKDR9=jS zsbA+!COZ$W$7ABk^+axIvnqU>;7Wd}jI-OJGX@kl-3tu{<%7Ll$OXB9nxIxx^N6WKvAhHdE7IQztwDDkeHYJ?%!_k(&^ zQQk#oe%i1>F-+0%vp)^_9Q@3jA;H#6!jwOrJjijO$2rTiVao0yW?Er;69;S*5&o={ ziL=JW$uVK^25{qw&v^m@ejZFA)Jq_fOU<8FA!%%`Zcm_`B)%Wz8T$>9D|dpxTdnh4 zxPQm6sRb~Pp^5i3c}m80cDZJ`glhWSX-?D-b!R^E`+almKe{`(meiJ>ODJ>)*RjtG z2@{OBtThTP?6_;?#MgeyHF9%n9{379m$TY>ba<2ahcn0kKIJ8sTVKn8gc2)Od2GqM^JaF)!xlc9jS41>?}hsO0Px8XN_z4Xf+{ z=dU%+jGR?*0!I;>?hEYApb6HI)AK0Kti*c|rwx*+Qc=)}8#XLc*OnO1S!jwOX=Jy3 z@*zmd# znmkn;n+uNk=?zK5N|ZX0e$8aciZx9hP-<%;`0vo16!et)r?DLOjKG*1RM?lBcG?2A zuhP*6k4z(${QB9Or|y%&S%)W4XujHAyNFB8y#)Ri!DxohtLxH`sPOl%_hu5;sX0=e z@QSUcPX*s6!x?v}*b;LCwFeO`1yo&}XF@`=9o!y$zsN!P0~Yk|gq#;A%?Xs<^ ziD(SUvxKwcd{-&j@B+0NDF^DVX*P`WlD8HYD`j0n;li$5&`gxY^-vOv_}_!7vIjRo zZIOZSDMt+DBIVIy+P5WO>QWhfhQ4|sN@(=HA3x*>5Aj|(d9HrO^iEy5KL(>KAt9-( z>3M2uex|J^DRPX#DmW@}`e@(7CQfatoTBNKmY@6NdHj9w4~zM~D6rRZN}bRPg;Llo z@4sPn41c$6%@gL)nmL{ZRK!Lkw4O_Vb<>sF9@Eq1YI<#Ior-3K@?GNpy8?AR*JcW(FQB`Q_@ATOw>jfRYEvtXL^zc!(dUQ z+OzNVC0UzVvP&UIdP>YL&s4&ZGi)6to+H+^~DZ)}j$vjEug}=`p1|(ScDJL*9!V~cM zq;Q)TuD`A?xp)E@35g8n@sMD>A%!FPADtdbhb}_9q=6fG*v(<2wcIQA{Ob7Z(d22A z!FgZrhHr(Hv=vQYrexmJ2RRO?-3l@0NGj8TqoiY~ZS7_C9(=~EI_;qh|0h``qHnUsph zm*IEgJaL}bp)$_A=5fJxvs7uGV2yVE-8yCx#WDI`^Ay0EQu>lxOhZuW#;qMU$6!o3 z>fCu)wDqWtQT0&>2|G^A@NH$*rGer^Cx)G9BNn3l7+m&VDTWi{+20e&#>3|@!11Wd z!iPDiGK!IF=Bf6P&As)$N1Si9MZp5f6(T;{ijppr98Q_xeNr0NTZt(Ie|PaPEF z%-i07KX&BKKyxPlKeEm_IFhh$*PD$uwr$(a#@r+u+qP|cV%xTD+qP|=?E8M-sZ(`o zrfU9~sp{(PdTO5gcU^ZIfImw`_2z3xV6bK4&(JlkKqnm#*k+uQYmHcUL+vbybE3Oy znBN2;Qr|VJ@3zR!1RU(g-q}VjUSY zk42{L>(@WO$+E$nWM15%>slz>+8ti`9ErKv2XLD)u5<^qi}FGnYFxM-DmW}98XAVX zeVhFwoMf074N9>m!#T~)GYT&T#exkuH_Mfw&6B+M9TR_AJ<}5xJ}xVyW0Ty14}ted z7C^fcZKqPV{{1%98lmWjNSjm`Q5<9Zr6}w#)fQYJYk#-;H6^aCG+;qZ^!~=sMCk>{$d_X~qT)q(`vA zWHU%y;mXDhVkEUL!5xff+#2Ku1w;2W>MxO4DK2zp8UW{{jQO4Q?+6gBhIpf32nxf+q9k{;N;vXz4Y2(1w?o1Sh;Jfte^z=!Y)G=6zn zw{PXSHO$fqNika;32uE&h?4~}<9j(~daxK%oo}LHcOw0FudViWt4cJJAWQtrk4Kw& zkFb)@d=*4>hT zf#U}SOi{IvuQPrpn3kK%v&FyeOqwek-ySES5M1@qYp%|ButkT&eN&<9o9cmUN~_9E zU{3jwzKQfUiHMinpGQk7Tn>-bs0ijI4d#I5VD&51ngLnX0u&iSLX_3^fUoP&AD16N z2Ar^4&Wg}i9S*f>YWoxVY=KMmH=o?^pQmLI9`~orOuKAcKr_$n<;xY^Z{#gd*K=7j zpnC}=@yi~}fgSh84(Bsycs$~dFS4&TTiRSw-zc{HW>)r-_JeRZg5{x*EUtgj;Y~^> z#HV1LAB7&RDBM;M+Ci&TCt>gy+*<>Wjk_DohU|LCDszXJaC_lqV>$WEW9^;9N! z%TO!o2z`rktUF;%#q-VPh^>txEPP&1Z`7e$xfYd2w*|+nX>)wd1z*WGTleEEo&?^+{|udhsbiipr-#SPz$^UXG)o^yaJB zSJ{voz2z#hy}m32V;FM6zz^s9oeD~Z2Y7@{X*Ob5h4TNPJL#pfYw=Se$D?vGzd%=W zgc=5{Z0LHp#3sR5I zgl&^Q3rqA=1yYQjHe%Kb^G1BJ-7I$b{`>$r5GS(G_9RJCkFLdoXYQ#ITfWDb zkC&DG37nmN*>K`GLpP5g}pep+~gzLEePer2mdQ+rrMfDRGMO-Y|AEQtAMRa<<(Qc@yFqY*XdE>?lOAk6+yiI)Q zXiAzNm(B2+4?7h{`X18j*so9Qj1VS3hF$dM%YYZceX zcsB-0kg$nRQy#FKbN+G64vq&1%k)pA2pa+9mq1T)U_G090U~VlBi>ZRjaEQq@GXGH z3c(xJ5H=bxvzZh&8o^X+_LbCdV){hGK|&dv@f}_Nh_ljt+)*0H5UOkWaY>bK&GcyVNUDn^d9Q)3(r+5vE?>LjU4OM7N?b3xxHjfvN)b ztwZI+*z>fom&ehIS^5q0+GC(il$>x3)t)GLi%D3KUYA2v-J{ae_Kp%JTI3xpoSv<)$uPA+7j^BWkICTcXG+*$B z)k7J3?p58zn2@vyQQ!_RB-7QEFL6%Ea8uM|w~`a-0+(CpOiS68M&DnfUK?l{7*-Q? zT}~cZEJAJjYXS?cCHc5wh_D#dNTIun~C#a{@te{gDQwbkd3iRP+1 zLLn8n=~_fhHU3e^pjSE;rqNAjCor9w;rK|%#TuhF%Z6&JVnAZMY5l=kOeUPdu@NER z2s6Niz%a?v$OpshM4=qU^rg^`;Qdhi+fx@hE3YmQ|6yjSM=Op_cxt;SmDsj|>P5 zjRggK4Atc*yI7QalhH3?5a6nqe9EI*{Aam4wcftQZa!vUjxdL|o$ZfV=AT^ticXXbd<2+ZP`F2qk zWE{MTZh``A9Akr2q#~Q#w&wrY{2<%N9=is*oO#GszFrTVbD9L0H&w&w=g27$vL0 zMuMapnpt|f+T!EP%y^K8=BJ&0+?Q}#pgN#~xr9hil*WgN`qp^n8}4VHcw#3AiFUEH zhh48ijo8C1PFQ>%XF%2|%ChsDJ@oF;#ugk0_BPmdpCBP-mNdssl5`s3iHp~`k_yR~ z+c9fKhSET^)Zy^bGPs)JJl@kGH}}=gHC1PyCJ=I(UsGxG0;40 z?YABWMtNkIrn5RCQnWYuv@?3<*H3av2o57JQ!csG;LuNUNQvrW`R3Og)p)a%dA9Gy z#PdS=hCM}g&9-&c>%yspRGYWob8EWW4?_WqC$@c3qjiBFhD$=gvj8e1G2qt{KKgRF zq?Ti0+57aLSqjeCq{Kq?tq9o0G`JvVM2bg)TwU9C4-@#iqLCXJu6Dn#@mnml`aKPc zl3K{Ny0*P(B4x)?V9oCiPM?tuZI}Ahu!H_+wCh>DrZ7ryR&99-qujtjd~IV$oK(}? z)QVl>*KNYiF9$qSDk->(`AP+(j@3(Ip0W#b1Bi;os$7+~xxwx*`swY2C(P=|D&(f; z(YFU@(BnUS?U3|)&~RSj2t>(*tFPBPA6e2m`hnd`-z?YHmx%h0v?(FI2rTF7C39jo zkOcuK2@E8CRp{t>AOX7f^=9P}1;T-yWgD~i(_7lVeH5_P}?E)*m}G>%!j zWb<(=Jgd;Khde79vEhCh26jnsoTGVUOZMl5R;zH324^(Fss99<^L7Up3T&4Lw;x@c z$-rob+^VsnGuJt^jt=O3+)`ue!7hXO{aO9C54y3+1XqJP5MgSBd#MYxN;%D`MN{^v z2N4GMCZ#}XKDRMLPNl{EzYM&9vAXB!4qPES*lALpOy}*9P^5T^R5T**Pq#YjnbZD@ zpk>Y4%0_1$@`Y1_QouhMDcYMUa_EFHx53_(`#K5wRV}f`siBFWiVkeDgCk;#uu^S2 zfL^?bHWQmJ5B|H4095tfMc&R31hE0{)z;LL$|%W5KN}WoF~er5Bpk<3UuS~>KUO82 z!x%phhHFLJ5Jjy1ZVZCL#j;m36yxn}T(_Ha-5B=CX~Y-^3=s+u5epc?m2s3nML**h zC0*I;usaWxj4yJ;qASw(VbDjqc?oOJ$<-JItPqxF#~QAN@}(y}4o7zYu_VSK`!8>q zny&KUM9_b&ub0|zS|Cb%?b7N2_d4Bat1D}0uw=Vin0&I&$ey>fN`f+ez6p`u3B78z zpdUC&I&9Rg8?SPgMs;f^|J5k33kSL>r>7nv*ff7zvd=vh4s>nU{M(p)|Ivu>Rm{%1 zK)6gaH#7bxo&M8QeHVK9-5D=Y;=TTxDr^e^&eSgaNY) z&PLO%&$0gD%KNWCHi-#c&b5P@u|PH*c0ZrAbgP8G*&*_jd_Vhu3Y4v+NH2#zrBMUpY3axpAPTf zdMFch4P*IunCT!Aggqa;;17P0;TW@f^MB4TCw5&?^QiC{%4~vjQ`s$9;m69F&>NL` z0vqghyU9T%M`U=CfR)9O+A9i%5lWNKwC}_MRuWPV?A7`Vo8>|LIufmb+`H*B#pX`# z>FT7!Oacz)EEk4vBhs)ZL?zGBA2{wtp zLwdRvK|-KO=5}gAmg&_B9PGUj9e6@wZ z`=s_3TlCF@Szx?lQnFRLHoyeGwCn^k-ix!CSo%DdG~K&9KSOF0DU0@1BwW9*Pxi1b zMUpuhZP9Roe!;qBFen2nx+xoxxi766dL|^HR43bnofTXx^A)ltn&tUWtd#34g%0wO zvI(+OTGP*8tgY zzk^WdVA_*ef0Gqv$M|Wo9eTTcx04v%R>RQ<0k_j3^f7pSMeSmHDvXEAZeWoG>qg^Y z&VaX=n+aVg#2mz|e9s9sgMq}W8ne)@t=T#+)wVidT=t?AXcPWo_^;BZ?dNj6CwzXE zy226K{a6Fppz#Uq0ZBu<$U(RYE?y5aMt7QKp2y*Qg7&{nzt_R9Kl|;- zSxE_%hir-_I<5bA+wal*V1=Om4!vbWHnR_BsnzTKEcD~a>vw5m`^tsL{I|`NL+f^V zQ3*Fm)CHT6a52TrItkyVd)8Yt@LZK_ zWWCGjXk{K&l-ZlVu@yE(IbOKos2Fd{%()10ov^p;I6<7Ise4%DE6<~6RzWWy`5Jn9!yH6_Fiom7^*F60i z8gi?avb%l>gdH!bN~&`)X2lPtk;i^h7Zb9*56Fyrv3eyAF*!qf4ll*n&T>N8TPGT;>}pgt@l zwYfi*Bfj+rU{<#aKS{TO^4Hxns0^-3n7C3hTm3#|6GNijRE}JErcdjqL#S{^)nmgG z7X6En;Vz!z9>qhg02!fIXM7=~2?6yAyUG=h#c7x0@Mz*|!ms1#-OII=&AdjgdmTg# z#CdlGaNc&w9n4#One`{Ji=ys)Pup~){Iei~`H28@{;t0n4QjP!7iLER6riQTYx;rsLA z$~QQ~-d=A?BxE!S=w^il&QEqgM0(Hb5Io-Chm!cYN{SoF;Vwx~_p3GfF+ZDXU+@#| zR8*7(E2(=``chN*u}&H&cBQ=Q!>1PSG8)LM&;2$SG+JEc!vTYOE*7H#c8*Y&@{)=> z1b!C=xAZSffgUJ2W?o=eH}8k(w!cx*D_=Kk`#@bM=Kmyz{T=Bnf~DDAAUr2lV@bpW)d2lzMTo4@$b}0JmS*#lYRVtqRGLwIM7r_+0rg5G*}K zSPp-5cUA_r1kGA#NrPGu$z`|{0<`dz!ilrP(qX*vi=+H{-p|-(aReCH*1f{V9FPwrTEJ-RwbI51DGR2CpGpp$d<9<>}Ei!Dw!D|(%&OzMAHUCuDkBl501Pt zdc7xsM*?sCJjMh`_$~)Kp}4P=P|)xTzTR!tN7~DN_MoBDGiXS17hYQF=eu z&DC>puMRccZO0-LwKy7MhW6-wLpLf09{-(kR2kF{f$Twt6-6|lqBaX$qnk4!KmY{XN znIM~7CYvAEW)^>vME*bd?b96Q{?+AQ1r-^6UAeuwTaVT~G%P+Uy}q5TEdm)Chy_-d zA`E9{Q}V1ZHwo{Wih-glko-Evk}CMRRavXeaJ{W84S?n)9v5D3&92~S8F-@3O=_<5 z)WZQrKo3@bE}RpZ56N;Km&C1imDhPu+tE2vMGO$hjSx{rB&&a4j{)8he#>=1 z+D*MRGK298Dmxn8=V0XY2IFKys1@lO6*MHZ?Oxv}M`aFdgrludm$dV6K)#3DtdvGS zt>#VchN&1`{k=j=$}x}}Wky@<7jJ&Re2bh|WMemKHc83h4%YNHa!Q20Vi#(}G-A?Z zcp5-lIB0-a3K~;{D-&^&ddsyA5#z@dI~*q*3h-wL46`@oHCOpQy_89aXR}L$^BDvM zg7evt6SNUXGlw`x|AUYZAgAGDNJV7^*;mE(qL(#%bLYG+?f>P@RYFVTKt8x4LJht5 zZV#_(s+tXH0}SCuW!~@U0!zg;L0uGq!;<+Nf8Jq6UK0w&X^fNL=LI@!Fcr!ENNW^O zmM%ppZWGo$lyDP%$X7ZD+@T*oUCNTyrKp9(3F_2O8<`)csJ^sEip+8mh~@KRpNXLY zevqV~KTA01b32)MNiX!MKc1X(NjcgJbjcD!o~-0gppmwphAAn|GOS#M?}y0X%MOp@ zF4Z80zb1^6<0NYvMlF>9^Oe1ZE+lo;EP*ripe@_8cYQ_n^Tp|xzN;_aW=tf75#mA? zm8DndXv@V>p4R6HZEI_rK~u!siMgsY4#%9x!VInuGUA*IiZem$(Zomg<-Z^|etrgt zoHBK3w9IzDU-O^R<Wtu$^>+NeFAC-i%~@+< z$_1alXDO5@B=&ibejPQuY?8WDAq9u}JRI#lqg~u*mFul+f5aSTCz?9ckwDEq` z!&}vVSYEcx=$^`IPFMFB*-3o|JAumaaSgz;6s^9}S(11jxkyj{k~~GUMh-L?64!{j z{i+`tI&A_FUCAxl*=>7m3%)uxhOgI!X!!FGi0z%fh*joz7%3`)VfOSlV|yG%F9U#O z86gBK(0XN7K3mz3?)i&@Xj_Xp1M8qy+y$&9g3d`uT$YiTkWVY=rewaeL?s7nP@R^E zR2Gj+jAmMJrpqrbWy={bAr!&=*C<6wJ~|rH2`yf5|CSnty3ZbWkoPV+AvenIh3Ikr;uQRmBg^2Ln7Du0I6lg?XAlAi=vN=#fIqGE!cr0w1q&ERJ|%I_|JYAd*yOM zGw#9_Z8Zpk%ftdW9ewX2!TOaWF`$xK!5_dKxP;wCO@_gebBf9O_f>=))$?WErM!5J zmh+HP9KZ}ICUs&-Y!SZANd`-tyuTTFBl*AQKoIm-zX{M2hmHo8L~JGuA zW&T#Gsr8ygk6{t7Jxi!I0(Xi@rFp9YJgYM5Ok{<1G;rl_ZEz0#(ymBhAUz5!T|H+{PO%k6$7Cc0YPZXY9W6l z`AYma+|LlGA?G)xPAoV?#U3nG1FY)|*+(~b(&|ip=r6-(i{&_)mO&s?x;{DCG+^_> zC$oc25$0!=kvu|T0k^y1{&sUJ$(f_GBg01YKAL;RDmt>F_7>gG-Chz4fna&I4l564 zbqS7I-=NhUsLtW9lOYP}xYN6~?$Vp>bLr~-W9{cCx?x+@9BHq}s5o4xw+KWQh)?8S zj4aa5$U$SWy;K+(oUDSdz;T+^61E4(KY$k4g4m)GyyjcmI}`+sw+LW5o0zqcd^)qk zch~tU8OUar=v&28HB$SD>=6z7FGtwTj%ySi_CY4r52~EM+0HtKB$Q)9GzoU8Ar=Fg zn+`nXNUi=G=<8x((q|?-@fMBBO_deX1&hb{bKzAUv?tQmi^lltc5G!Y^5}R6LhHZc zRUwU~pq>-qy9 zOFT(9?nH0OxmlsaaW=IV?KKtc{b33cPMmj|pAjy$eum(fbTiwhdj1-L=HH*d!Ts~{ zef5WkHq35A(r{SOzXTol4b>5!5~9Xw=EQN`kceK7AV!;T_t@`bdXKNc{wQI(ND|FAZchHPF||-&ZK2MB?QVc zzn2=-XIAIAj%%6s(>JK)rz>A8%(Qa6&6_L9Wk=>9@gyI6r*RW(D^RiV|3vJkWVJv^ zCOykvCqH|Ge?K27z_#Ck!A)K*LVn(g^O3?piIS9$UdcxxHx-ex5Ncw0vwAR%)&KhV zXjLq8t8bD?Dy5>Lr&?v&l?qr>@#klTjoXwACl*B7$(Mq%==+^U;PvQZhc&iF-@U&L znqtD#ZH0*SB%rUX8gu9Yrk4+DmbtKLW9q{)wN_b_xAJ#GlBFTvm$JXztH)Oib#xJwwLzEeBINqmAsYKH0>I{6xIaiQ?|(=)#8O#uy^2 zOapK*fkVcyWp#;pt2quUxXT#|9yPj6GUC~;x2seh9&Hg{V({YjPTs})Ggb0q9BCzW zx2SpC;a&}rtlw}XYU!_tH);)bd8G~83+o%CIFa!7iJy0(6IaUZd%P@dpnr-+O@TdR z*PsxNX6RCL)3ooAJ%ApW!#VECTIU7&=t&SSVl1;n13}sRik>85ba89OYC4y@454d= zq9v+-_Ia_W#pshD0V=X{iq z5TM&hM1$Fp)T}hgG+)w<{0;$!81!{j0o}gjeN3piL1J3-2bS2NCQ^r|kht=B`f(?I zL>Xi}{-CXy2HOB42j12pmOBav@{wg0|jyXt35y$*^f=CKtu^yZmP$LiS+fW$&pH%|qr`kT+9e+ZB3FBUGR%ptAg|e|CZ|R1$j(%DJNP0UOaV-%err$Y zFc)vjR1qUg`_-noZbM0iybo2dd;ezPwMY5RE0w3k!BZ|#6rfV=kwx=`~{sso$-57B(0+Y&=p6pLwgxYkhGWV8-2RV9X2Q_kiv z!^U5u^miu*sPe>sMIV(2(^_?y*$UgBVjz5!)w9sPkGWGa-36wd7gJ-NkN@QGh&Pb!VrT6^xt|Arkw!()WW#agEsA|B7!ftPG;XBN}EKwvbJ{qXrqq1uGP0k{Fc(YN$oD}IUc&m zLxM==S!g22Nd9(iA9#E$dTIk(WG+_Ze)wR<)qy|k38fadS4vI_33jaP$Y5C4f&-|9 ziJBb5{C|al1O_RIK@0){(Ft;54?j*%E>paoypB4ppDr>lzh7Ll9EwbyZ=3d=cNtqP z9~u8Xug0dk`xb|w^R9;w+OHW(eBChnYq${m;KkQzZ}Vyeax2b(O-}VT>9Vk@cT0I_ zRM7A^rW z=moo6-{%lFiK`~gsHd)1%}^@)6y4X{BLXrYX@D;gG#R8Js}g<7P5h%h9JSR>@t7nQ zo&r4jSMr4#9IaLbzs=}2Q5a=nE(e;8wPE@#E@XNKF|yK;K4OWCkU7La+LYvRH`aCH z5gcn+sD~yECzBm<5R$@LZ3Q`c=3OtA74L+Y?m>Z4#?gy|(n6xP+&s;5MGZMrFcj~0 z-dy+Rk*JBR-#naBX><#6gG&1G#?N#tCtU|IOdrr&WU_=@rV$F%q|jmK`Ki6&UiL~a znlFh>i)^ptv?{c5KGPT9>2+cp6-wqlnxZWhi%~xGRu(Q!!7DGUcZ*x$cVeXbwEC8j zb4A>Zld`$E4xI&frYXZ2yK3T={8&1U+q!$NX-F%mlSEd)^^2W`hRQ@l#!v)Mra5Bm zE&h}4=hEMC_v;r3STm!!n(btHyxRp)aCHq#f1Sh1n+O|3+BPpI{$t|Lx4qqu^Emau zu?)Eo!zBCXv}w%LKz3JHy?x1t;1XoQwkM@jMYFg_){A-yekOrLY^~IcSq`R`BdY{Q zSouS{GyQ?2UhPuBCplKyPOuof-?mS>UO$bGWu?n2?4TCf5?aD$_&KRBu#YLg7On7~ zGE+%nKW)XI*+>5V$sF$Qo!3rfsJ+56xBbeXm4cmnqu-2xhsh1)T-9mULom_og3zzpo6CUdU>;u52Xg{uU)4lN5KsWlaX&L3W_H{0WjTvOeUe<+3ZB^6cC?mNq zkqQKqnfR#;#!9QiisWmrAX*qDQx1|FD?0PA9=EAW*oDDzNw{BwZgER&Pr=%EAN8?mnon(87VuTg55p-C$Qk zGnz8N7#K4mqOwS}*XL7zj7~n?7o9&GXmkeNc*a3%L$Sy7R@! zO}xn#-KTogj}j`7p*H)kUqO@<%mpUOL<%YMlP(Me1FeRzYMGL+P}=A^F64z13Pfrp zPj{th%{Da66S24}xh&Pb<(zvhU7wqt@)zl&BIV7!wo=F%%F38g(%jzaB}yi4Zf>^w zBiLi-pQFv({?Q-=WN+2Lc|R@7^wbjA-IKgu7X^n0)Y>$*KcLVm?G<6HN+&8~2S8eG zoCSAE)G3_3j_&bEM->I4g^EO30M!r+tEm+wBb9H8aJyYKUu$s);{Hm^rYl)cbara$ zlm0HF$rzW^7~mN&)I)!Jm$X%g2HTLvN_8}=Zrp%*mR%!*#}7|Qf8lw7=evmlwT3-? zsrqD_Xp@)WqYf8nu&Uup2A?!UV3ytq8!PxVJat}@2}{jNc+?)>ikdsOM-$rYq1O3hZI;CObQj%12FZ^ z+d-d!qq-?YbUuF$W>`WzYZ&}AB~cUy+;7~Wr=dP^iUeC!&p{4AjRrkZT2UEyyh8lt z_evydR{vgmB2^t@O47G)%3m!HSZqM*A@&!pOqpnoQdu`sM@H0CZWWNyF@asHSj3QF zjDK@+YnWi^^jTvN{sDSX&D<{BU|m6mqwOGe3swOJ zlANMs4$gHe*JeNjgp>UP(g36%Nwk|8VqU{$>yrnsvUsVABg5hRB`eDgl9xL%Is$6z zQvmx6=hYuvMCsR9Rk*@7gbfJ$&j!)#Lq9Idi3J%_3rNnGT)uWf{+Y|(2Oe1FS%KeG z3e-*fUhKS_D&*uefzZ>>Q85H8wFF67G)H%ZS0FZ)R9uDe0@p}%THM50yBe?yzmf`U zG~qm%0>I1>7qhYWUR@t7!>QK&4r0$Bx80rNtl@J3xKG<9AEf7b2MsYvo&E5|E!&H` zSR5N6J+4^kP~vtW`5fo`2w0!@>H>C~d0?FjiESRDU{HOLEoC3U%K)if&NX7M8Sm_9}t zovpbE7rl=5{n9Q5(xH-S2J8>(DTtf^*8g_SuW64sht4sA{-h#r9-;Pm=f)yE2{wvs zJ2~zM{@Jd^z?9@`8HvNAP8e1;rQ!+V-B<+6#}zM&z0iH%T@Cb3D(XYjjZlpH@8?j= zW+t#x?|}8_s9Nq0&EdcI>wADfwsSR zj_rFKKg;ld?0;DWmEqS%{*c-3tCL=yr{a9PX-rW)ezy6_vt?cZh{b6~-m8*%-L`JV zeMLTjRqN}+J7O-x1bUH>9fcHM|K)1kj3NF7s-uH7B=?zaHZU;$_30mo8A9PhJ&))XrBkgTdbJ~;C z)3?hCT|-dvcoIGme^FqQ6^!5AslB@)Fm$-n*W?D2I8%V<-4r@E5Tyel1Iac{sOYI= z$Mc&V-=RK}r^&tpHJ>b2a6Z1051_Uh=PV>Phv>5aR`)$d;{DTBvEVOHyVF>ON1>s8B zrimRo-0?YQPp5fzK|w5!2@3Ap4Ac5oqXah$oN1lqYFm-e{>gOSk0q`_aT88?hvn$B|wo^0OJH5P$)u$`NLnH*Q;z|yhaIzcIWMl_h8Ws){cZMILp zz3yKI(4)%HNGDTj=uWSP*Nc?6yAK;Wig7`ZpiQt4H!)A7p}mKJWg8ngm~{ zwqe-%iQBG?IxUxuZYq!2*0?0bvp+CMin{Dm06mF2!P0@86?<)1cc5TSk1cOH*de#x zq)Zin^E|joo|*u!j?r&~$-uqtcM`C_6c4e=b#z1aG3cmjYSfNiK14pSfXyj+pf^q~ zD|M0xkGpA!-`S*)-=;iY&}zLV_|P_aQ`yANm1-qFSCKwn^QB$^G<)0yC#bTUOc%kmc6MDTQZV1R z7TLgR`$zxb^UZc|LiNZG>uZnfJOzE+dFjKlxzjSD28s;wTezvGkIu&k^K0)RQI6@^ z2M>7iX4=W$jvwvcwv?`MI|8 zgBgEw>WeS31`hK^)=xr&Q)OW(?5%NtLD12%V@N!9Zb0#eux;N=m-CJ#MYBy%wTEBz zJgn%;8O5de63>2?(5W_5OFqu}Ri2klvrz1b^^ks>2ue<6feLTtcZo(SQ4A8>kf5b zDBhZ0yiF+Vqf-lUH8sNj?)ji>SD@VSqO_9RwlgZAF_jux5|ruT)2_0W<)L6|=?qME zES5uh>%?3YHq%YweXStM=QGJ#klAPuTLr&E2e3Y@wvPN1eIg}J(RM7gTjlMOzH%Jsk%J?7Z<|kWW*ke5ZcN4pu)!tlmXmyf zJg?mROL9q0v9Tq+vp)C;^Sy zu-)a*Vo>|1KSdw3&s*-9x~Uy8ub8Q8YB$!5-MPmf$6!i3C0gN8ICsfGz5S`)R24mglTn8u`Ng z`r#a}5e?|6J%|VD+`v(ey+qL7!e`e^>!Q~UF;VWjY4c7Iqg{|PmgZ@dU}``U;k*Ay zaxK=TxK8r|_+Ztq&~X>-!3Lp3e6q&r*!YxMnRnmXHAVxd-T;&@e@0|+Ih+Mv_{AW` zgXnB7)=r1N_b7EBVEJa2CP%|%1OOTqOhMdB*4_=&_SdgTb( zA|ukptl@{NBBkLcbEo4;Cvtpv*8Q)rg>jA9ZxWQQ+<_JOX^C_DMG>hrVk5*C(=|jW zcBV=|Vunz>tMO6>TS!oaDdG}Js}Al&kd~^!vUTtIz)T8W;{aE^!9mpm$7z0(FPnMbr0w4QI)|IgNIEt8pKGURPbP&D-1WS~Bv9Y}g<{3tua!#RM^0^yp**U0>M1-c znk0B441lCShK+cRN$IaOiXU9vX2i8lD6x1$D@c5)R_CxabxtZ( zbablKYH%z5dJiMQC(Qn2lnxkv-0)iO;QC5^%1lE=v8QU>X^0PMR+6q8-6;z?ytyoa zEm#Fvq54WW>>l3_;GB1%h1vllFUM7GzWH?8UigKL_1jIuZCI#wv$^wN zuS7RSTWc2L*t>_+S8wAWzpfz8SlyYEflo8|E)F#yFTcy8CfELh`}E?L0BLqVYH0>q zVI!SU9LeVPLDj+|UzLM;zSb^o1S>*ZZRN@hAVcc48KFM}2w~-# zUX>|LtOQAYSFiyn4&3K(X5g@!@3EJth&XXh3q1BqnbgfCRtmFyZcWcZ7;p-@ymLLc zBt$hgZEpHtITcr0XVg6yFwyRE2(T{idG^CC#O8>dx8X+jdFR7^*-iR!S=;NmhZkq+ zvP@<@#5jhto2VqDaAv%>GX(KHvg-I?`!>w{uzf(OGx>&llMd^fv4@5`KT_X>7Ubqp zhP1u5g8jQ>_5{=Lw6}O<4^t%1eK7yV9uHh+qj@h3fOMauTqT>b?Xv4pi~ zvG9XE$11YBVJ;lJ(i(**&)zOfQPDccW0th{5BUXb7))x7ofTS;PJk5QrL$pMuUik*Ae&z+v5>_D0A&%!L2GT1xjzPxqp>G57H>pHQ;G9a*p z&QD!D#(b^NsIp%X-P&tD$a)TpLp_doc)mt|jd`9WQ7w2gtdN^q(d<7re$0n^B>^q7 z{>tT`w7bW%Syw5i4)k~gM@{nl)*R#DV_&ZRgUbybPO3B?i>PxKoV$sW^O;gv`&J=u z`L$wtZ{-L@O5SS3_Q6)A++dNgEVQ#ECDPape&*W&rbb9et656W;~XF#Wym!()ZE&v zG8(#UkG9VFlRT@#p1IH9Rbmt!+bop=Z3m;`$!mZ{>RPpmi(nBk6U z2*T$%K#2e2po;&_bEEFK$Sq|Wau!ho^-t~v>qqzZ(+;K$z0}-WN2sF;T<9ZZ!B9;X zQ;A3dkH*2*S=c7C>mm+ngtGIaebM?H^wc*k;s+un{4(<0Uqjy0HPna zdqc6-8-Oqg1)Zn|n07LYkS0&TsMs!KqLxF&aOCOG{!idc-ZT*bOLbQV#Fb#$?UuFd zj8J;C73j7sQhdXYf6f2STXapePI0<*rIj&swF)_wL6|tA0@mjbg-)D)QeGj{XOf>C zmpK(|`)5SquOm7aVn39q7|#6M4_$X=#J*|rY2n8=to>Ey4H^X+aM>2>uYCx55Hs55 z3NR)Nr{Uf|+>wLVT(49#vDf-_+2uMt1C#3#Wo3db!KgNW;Aab_@ATXDwF97cZ61k8 z34To>Hq6UnL+%AUiXbcv!3Em3hj^?~AH>fj(!IFFR}=53e(dwh%KrR4Z=Lsh)p_2x ztZiPQs-~IU1mi}*-XbD-`$>u9Ckxs-cvf^gcO3=H3cA({0~NtkwFH&r?5k#257e4hHoZWo)^#c?p&X9uHQN5d)|D{ z`CTV|U(!QCY6kACrmnhyyJomD?GJ2kLpdNHjbF@ zPt*#EP*Xy2H(DLeEX4v2c%8CZcd|7TwRBk=vQmIk%!D{60kA?EXS6MD`S zW)*UNvP5j@MOKL&DRup{O2Eb?U!=$&uf!D7NAH%`jq*USrw2su$=y;(DrtKgx5b5t z3lk|lqKQocY{gfEYTd(IPV}=$+|gtuC_T8<$?Nj&h8f}e+oIDz>*ZAAKAx_suOP={ z@@ z*RPE{ZwqC&D9|@y6n}#trp;I&Zb7MeVi^lk9V(3B@9AxbZ}U8fXU|g8i{d11UKDNU zpL#vkQKT}oY>S{kvsywZ$yIcu+LQNoy>wFDq;W>qn`~M}0B?s~K8go#u&WrZQxJg6 z>zHVh13{e1B8|**EFIl$K}L#?dlQD%M!mEfcyeBFs)DKNHgxTtQ(%=Rs`GTW#6R*pnsOEw`9h*au$>Z5* zAA#omUah+C-U7Q}N{M2sov$+L7B|nVy2pv!6<*how`WyC%l9TIRXt##9Q98_AD?b= zBhJr6qD)P>d*A*@CG~qHfK_#|6OR&YB3=~BpAa1MSx_8C+kXt@l}jk*az#oCuYW6f z!?6bSfCO1QBMTvn%a7m4_~Rk@^6QKCw`8^3Xdwq9M?_}~7qfGH&FFbb+<{3VwpY+0 zxc%90LS82WIBYWJGX~i&9hr)FzY_}n*$q*;Gc;f&CRS@@pyp&524^s-rQBnV*yHfL z{LHv)-i1%3K^r8XQP=Wj3xzkb%)9eN&e5*9(}dF`*X)^PC=;- zA7}u4H4;{!(0$-TA%zYvfdMk+j3(uD`}|QYfpH_O)@bP5#k9(5Zf#o}iwhL9Fa^oc8;q6*PYlKqUH@oYUJeP&Ida21;>y}*BE0K+E>Jk4Bx*a zggMw)9<%Y)Ev;9qGpnb;G15z2U%~jjD=@lx@MQdB8(g&exe@&a5-OmrkcDOYD&4it zHYSnOyo;cHxiQ6fN9=j~nMR9B?=PWv!!Wh0ikWdEBi00g4502Q!vjXkZ4`>_dkm zYpovo!zZ79Yk61Ew=f$XI`zf?BjZX(asR!pw3)$zlUYhOo`V}rt^JR`>}xy}^=!y# zgI#ZRK0b!CALnvab*<3@nNp^^@~%$%W6B>N;F10L_?~z=8~NG@f^b)dwWy4%DsNL- zZhORi+Y0Ps@Fy^sYyV6x)9Crk-uB~Q3>^S!B7WhvsaZdX-+X?PSv{} z4dlRPwo7|3^tZufqPegbh{?y!^AWDKuQ$knx3D1*YV_nq*KXT9z)3=mdi~zWhdiz^ zY(dvp?3Z)Ahf@?l&=6_Gcn+Og5QHhI-KB3GHeF9iQA|qXPZKilLLoxtsy;`+qoY zy;@(QF=s@&$KCx9A1?;Z!QCH@W;g>do}0f{czfH$Pm;RhWk`POhBdyo7&ddv#~9^G zq=my&(u#NaUKXsH@;h1)c7)WH%chm#E;hq$1~P@?7WI0q1H!2XKnN<-+Gn?E$XvN% z7Dn}&=+IMF-kCZhsj&3#*?l#Qe4otC>!Rx&v@1GVhu;j`TOPBVIx8|=L9q}r~hoqVwR%ocNV}WX&!O4%;5Q-|< z&n%!j&8i<)VzH zORzA=_C!{V*q=QvZ=KWT1lQaIxfl})z*slB@ysvV(9@$@^@=||2ka}9!`BqPO>*al z?iHU6YKvtYI%TF6r>Aacrt-Ee(Tp;Y9nkIqrpq5#Dn&w-3)3X5_q*Atow&dI(11F5 z5;*=3@sg5X`w}dXR|dwuW62-WX_n`!&;OpK?>v97R1-x%v72~5=T6Sq+5^>_-HQdN zgg4yhr>vS9>US_#nxl2XsFnqEy$yL7ewxeV2!W5@Q=R5oIBm3G$R^y`TN$ctk4l1D zDopLHG(On6(($+a+SVeU(0s^YJSq0@&LU2H$ugjn>@A48&K5*=Se%?DY#RD!b92v& zA89R;ml_Ey&q^cwuu3f*vu&aK7tG1&9au?8*kySZ+Px#`KF9G+Qym!47k62;ZIPBC zbSP@xBR|~u2HRv4s&_Mi<6KWVrRJsB_FjMN$*GX-N9~*vuft=+HZUl!2e7)8{pn28 znE-38%2^0re-L!T;mf@@Cb+I)Nwl)&qfhk}ysX<>8LGuZ4yDRKw*^~VJ<26>3{4O* z)uxDt+gl(3nL-``%Z2J1As_4~IiyROFgSksv~K>&=C3IAr!5VB7}%_rbo`T`i~;`a zu5;#T)@0xDDRTuyvX;GC*>%yS3}qK@cNvSBKHtTZqD{BvkkOp&$%BHhr=U2K4NJm( zv4GR(JQzR6qUC)k;(E-Bv~u;`&fmY)m1f3^QkS4JU(g~6_k&B;P0m4~Zk%nZvoTYm zGe2M{sndR*?_gHiI%0=~iA1lhFJBbKRphLF2xHKm-r`b8k4)&tDTi5}nU1)u ze5T}AWT+6kcamk_x2*h3wgDr3d7SmSS=cGHl`%S^KYO)ZW(FUdHb=pf?AjjL0ft_C z@niFB=QG1OL6OJ(yH|S*XVrY5d|W-%=m=_>ck<9+ujKo>dm_3m=^xsqXc5j@f>P|_ zj_`Gcmrcb9rxorm;@^Fsr`xn^Jag@%Y{Rn_Yg|x)dyyF_kuusp5}unudaxZXaI5x+ zk?0ls64=V;uv1fR0CheO!!l!JKNbv=`CSKosfiFpvlp0RuICn1immzO6^TO-w~<3a zJ2NZTF?i`ULI_4l?`_$+bk1G72$4$n3%bLsAu!bUI=#P*40*vgnq|NAGFI=|aQ#DW z^L>ALcb@+CwNb~PE%dI}-mz4?Wn7ZxtQzOxoc@+Kb%f>9!_+1)G0o>C@FO$ncN6$c zd_YN@f+xV$HRne2as?1VWO|Fy34ZN2zEGhQfB8KecQ{mNsDwT~KTL zvq^HEW2`d{r&E_cp+e?s=%E16sahDJ`jpF}50k(an;$Fx#MR!AR$>4ekoN=4xH zeTXA$e&i!TEM)-DbXAGOAhbAG7b2SD7l=z{$PzEz%Ht)HB{-wGiV;x=7ctePXjmv0 zZpc<5om5OkZtHDv8D^Y99K`Y0%WFu<5oEOd>OY<^_NMFzPA&R>xt ze$7OL#%KbNE%Y~`+(eO{xEJZk1r}r@LRiZB&88^Dzn;;F5TS7lIfjyS9aM?Q2f@?5 zV=hz^wH%3}9GW?-mlTB|iU@MyH?{#5k|z>qq8PouXhK3Ye3NA%V#XKV!SlD4qAx&} z*Z6P2$p1rxF{}K}4eh^}%M(Q|97=PQ6hWbOIKAhHAFXRFDS#__#Omod-YX*MVtt9x mc{Ir_G9XCB^uL2e{$YmM7e8QC%yqa#eDrmVb;@r#MEnOzDUCz` literal 0 HcmV?d00001 diff --git a/Godeps/_workspace/src/github.com/gizak/termui/example/mbarchart.go b/Godeps/_workspace/src/github.com/gizak/termui/example/mbarchart.go new file mode 100644 index 0000000000..a32a28e0a1 --- /dev/null +++ b/Godeps/_workspace/src/github.com/gizak/termui/example/mbarchart.go @@ -0,0 +1,50 @@ +// Copyright 2015 Zack Guo . All rights reserved. +// Use of this source code is governed by a MIT license that can +// be found in the LICENSE file. + +// +build ignore + +package main + +import "github.com/gizak/termui" + +func main() { + err := termui.Init() + if err != nil { + panic(err) + } + defer termui.Close() + + termui.UseTheme("helloworld") + + bc := termui.NewMBarChart() + math := []int{90, 85, 90, 80} + english := []int{70, 85, 75, 60} + science := []int{75, 60, 80, 85} + compsci := []int{100, 100, 100, 100} + bc.Data[0] = math + bc.Data[1] = english + bc.Data[2] = science + bc.Data[3] = compsci + studentsName := []string{"Ken", "Rob", "Dennis", "Linus"} + bc.Border.Label = "Student's Marks X-Axis=Name Y-Axis=Marks[Math,English,Science,ComputerScience] in %" + bc.Width = 100 + bc.Height = 50 + bc.Y = 10 + bc.BarWidth = 10 + bc.DataLabels = studentsName + bc.ShowScale = true //Show y_axis scale value (min and max) + bc.SetMax(400) + + bc.TextColor = termui.ColorGreen //this is color for label (x-axis) + bc.BarColor[3] = termui.ColorGreen //BarColor for computerscience + bc.BarColor[1] = termui.ColorYellow //Bar Color for english + bc.NumColor[3] = termui.ColorRed // Num color for computerscience + bc.NumColor[1] = termui.ColorRed // num color for english + + //Other colors are automatically populated, btw All the students seems do well in computerscience. :p + + termui.Render(bc) + + <-termui.EventCh() +} diff --git a/Godeps/_workspace/src/github.com/gizak/termui/example/mbarchart.png b/Godeps/_workspace/src/github.com/gizak/termui/example/mbarchart.png new file mode 100644 index 0000000000000000000000000000000000000000..9a4252616fb8f753ca79a34bc0bf87d0df17502d GIT binary patch literal 20075 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. All rights reserved. +// Use of this source code is governed by a MIT license that can +// be found in the LICENSE file. + +// +build ignore + +package main + +import "github.com/gizak/termui" + +func main() { + err := termui.Init() + if err != nil { + panic(err) + } + defer termui.Close() + + termui.UseTheme("helloworld") + + par0 := termui.NewPar("Borderless Text") + par0.Height = 1 + par0.Width = 20 + par0.Y = 1 + par0.HasBorder = false + + par1 := termui.NewPar("你好,世界。") + par1.Height = 3 + par1.Width = 17 + par1.X = 20 + par1.Border.Label = "标签" + + par2 := termui.NewPar("Simple text\nwith label. It can be multilined with \\n or break automatically") + par2.Height = 5 + par2.Width = 37 + par2.Y = 4 + par2.Border.Label = "Multiline" + par2.Border.FgColor = termui.ColorYellow + + par3 := termui.NewPar("Long text with label and it is auto trimmed.") + par3.Height = 3 + par3.Width = 37 + par3.Y = 9 + par3.Border.Label = "Auto Trim" + + termui.Render(par0, par1, par2, par3) + + <-termui.EventCh() +} diff --git a/Godeps/_workspace/src/github.com/gizak/termui/example/par.png b/Godeps/_workspace/src/github.com/gizak/termui/example/par.png new file mode 100644 index 0000000000000000000000000000000000000000..a85e64415b3d45546ad1037193aec7900b09aa5b GIT binary patch literal 65773 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 literal 0 HcmV?d00001 diff --git a/Godeps/_workspace/src/github.com/gizak/termui/example/sparklines.go b/Godeps/_workspace/src/github.com/gizak/termui/example/sparklines.go new file mode 100644 index 0000000000..f04baf5706 --- /dev/null +++ b/Godeps/_workspace/src/github.com/gizak/termui/example/sparklines.go @@ -0,0 +1,65 @@ +// Copyright 2015 Zack Guo . All rights reserved. +// Use of this source code is governed by a MIT license that can +// be found in the LICENSE file. + +// +build ignore + +package main + +import "github.com/gizak/termui" + +func main() { + err := termui.Init() + if err != nil { + panic(err) + } + defer termui.Close() + + termui.UseTheme("helloworld") + + data := []int{4, 2, 1, 6, 3, 9, 1, 4, 2, 15, 14, 9, 8, 6, 10, 13, 15, 12, 10, 5, 3, 6, 1, 7, 10, 10, 14, 13, 6} + spl0 := termui.NewSparkline() + spl0.Data = data[3:] + spl0.Title = "Sparkline 0" + spl0.LineColor = termui.ColorGreen + + // single + spls0 := termui.NewSparklines(spl0) + spls0.Height = 2 + spls0.Width = 20 + spls0.HasBorder = false + + spl1 := termui.NewSparkline() + spl1.Data = data + spl1.Title = "Sparkline 1" + spl1.LineColor = termui.ColorRed + + spl2 := termui.NewSparkline() + spl2.Data = data[5:] + spl2.Title = "Sparkline 2" + spl2.LineColor = termui.ColorMagenta + + // group + spls1 := termui.NewSparklines(spl0, spl1, spl2) + spls1.Height = 8 + spls1.Width = 20 + spls1.Y = 3 + spls1.Border.Label = "Group Sparklines" + + spl3 := termui.NewSparkline() + spl3.Data = data + spl3.Title = "Enlarged Sparkline" + spl3.Height = 8 + spl3.LineColor = termui.ColorYellow + + spls2 := termui.NewSparklines(spl3) + spls2.Height = 11 + spls2.Width = 30 + spls2.Border.FgColor = termui.ColorCyan + spls2.X = 21 + spls2.Border.Label = "Tweeked Sparkline" + + termui.Render(spls0, spls1, spls2) + + <-termui.EventCh() +} diff --git a/Godeps/_workspace/src/github.com/gizak/termui/example/sparklines.png b/Godeps/_workspace/src/github.com/gizak/termui/example/sparklines.png new file mode 100644 index 0000000000000000000000000000000000000000..9dd7c82b1d3273814cb5355ca61d620004f05a15 GIT binary patch literal 43431 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. All rights reserved. +// Use of this source code is governed by a MIT license that can +// be found in the LICENSE file. + +// +build ignore + +package main + +import ui "github.com/gizak/termui" +import "math" + +import "time" + +func main() { + err := ui.Init() + if err != nil { + panic(err) + } + defer ui.Close() + + ui.UseTheme("helloworld") + + p := ui.NewPar(":PRESS q TO QUIT DEMO") + p.Height = 3 + p.Width = 50 + p.Border.Label = "Text Box" + + strs := []string{"[0] gizak/termui", "[1] editbox.go", "[2] iterrupt.go", "[3] keyboard.go", "[4] output.go", "[5] random_out.go", "[6] dashboard.go", "[7] nsf/termbox-go"} + list := ui.NewList() + list.Items = strs + list.Border.Label = "List" + list.Height = 7 + list.Width = 25 + list.Y = 4 + + g := ui.NewGauge() + g.Percent = 50 + g.Width = 50 + g.Height = 3 + g.Y = 11 + g.Border.Label = "Gauge" + + spark := ui.NewSparkline() + spark.Title = "srv 0:" + spdata := []int{4, 2, 1, 6, 3, 9, 1, 4, 2, 15, 14, 9, 8, 6, 10, 13, 15, 12, 10, 5, 3, 6, 1, 7, 10, 10, 14, 13, 6} + spark.Data = spdata + + spark1 := ui.NewSparkline() + spark1.Title = "srv 1:" + spark1.Data = spdata + + sp := ui.NewSparklines(spark, spark1) + sp.Width = 25 + sp.Height = 7 + sp.Border.Label = "Sparkline" + sp.Y = 4 + sp.X = 25 + + lc := ui.NewLineChart() + sinps := (func() []float64 { + n := 100 + ps := make([]float64, n) + for i := range ps { + ps[i] = 1 + math.Sin(float64(i)/4) + } + return ps + })() + + lc.Border.Label = "Line Chart" + lc.Data = sinps + lc.Width = 50 + lc.Height = 11 + lc.X = 0 + lc.Y = 14 + lc.Mode = "dot" + + bc := ui.NewBarChart() + bcdata := []int{3, 2, 5, 3, 9, 5, 3, 2, 5, 8, 3, 2, 4, 5, 3, 2, 5, 7, 5, 3, 2, 6, 7, 4, 6, 3, 6, 7, 8, 3, 6, 4, 5, 3, 2, 4, 6, 4, 8, 5, 9, 4, 3, 6, 5, 3, 6} + bclabels := []string{"S0", "S1", "S2", "S3", "S4", "S5"} + bc.Border.Label = "Bar Chart" + bc.Width = 26 + bc.Height = 10 + bc.X = 51 + bc.Y = 0 + bc.DataLabels = bclabels + + lc1 := ui.NewLineChart() + lc1.Border.Label = "Line Chart" + rndwalk := (func() []float64 { + n := 150 + d := make([]float64, n) + for i := 1; i < n; i++ { + if i < 20 { + d[i] = d[i-1] + 0.01 + } + if i > 20 { + d[i] = d[i-1] - 0.05 + } + } + return d + })() + lc1.Data = rndwalk + lc1.Width = 26 + lc1.Height = 11 + lc1.X = 51 + lc1.Y = 14 + + p1 := ui.NewPar("Hey!\nI am a borderless block!") + p1.HasBorder = false + p1.Width = 26 + p1.Height = 2 + p1.X = 52 + p1.Y = 11 + + draw := func(t int) { + g.Percent = t % 101 + list.Items = strs[t%9:] + sp.Lines[0].Data = spdata[t%10:] + sp.Lines[1].Data = spdata[t/2%10:] + lc.Data = sinps[t/2:] + lc1.Data = rndwalk[t:] + bc.Data = bcdata[t/2%10:] + ui.Render(p, list, g, sp, lc, bc, lc1, p1) + } + + evt := ui.EventCh() + i := 0 + for { + select { + case e := <-evt: + if e.Type == ui.EventKey && e.Ch == 'q' { + return + } + default: + draw(i) + i++ + if i == 102 { + return + } + time.Sleep(time.Second / 2) + } + } +} diff --git a/Godeps/_workspace/src/github.com/gizak/termui/example/themedefault.png b/Godeps/_workspace/src/github.com/gizak/termui/example/themedefault.png new file mode 100644 index 0000000000000000000000000000000000000000..23b574f966df6fc125bd005ff7558e77ee3f06b4 GIT binary patch literal 105508 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 d+OgULNoXW!K9NaT;I5>o36eQR;1(V$| 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 z zJ;z!0m{tsN&gye%sG)^P+5!{7(X`MXb5LDN#^$gFM7~_%!FWRRUG;UcdGr7Ea7GmNm5npe$knjLToKyv0+=b4LNj}I} zJOPz>3(<5R0Ri-?2DC7fT!QIuA#t;FEUqE8E@Va-=Ij#!OMEgZD_|%Jfh@fgJqwx( zry381mtiQ|7 z3*dg`Sz>41oj2^aV-f1=jT;gx?81`SSU1W(@G=6k_TXHihPFST?uXL0xT6gbU?V`x zaaeusrtDvvXQ!Tf`FvY?kX$DAM<5TlBAb5TwBQCJ<7TpMY#2J8vhn#c9k4gbVz&yQ zNtTj5q9KnO^w$s{rPamg-Q|D6SgOs=-ckQ}A|$iZ9Sr#1;w`2f9tsv&=BPHgJdKKb z;Z%9(mNm!k7@PeXF~z)~X+UFtpa(yc;!9;IhXpkJvZkrb%~Bol;zg!9RK6zOuBhxZ zkeX}!c!AB;J*y4K4H}F9GHlq`5GEH`(x<(*uv>$qA%KoM|^+yCTsr0 z{?Ryb4;{n%nCsTfkb*~heJEdpCW>6ViOiIdy<@gY{Y$4V`R1D;?OI+lFu@{G$Stzr!&S$0UFZB__%iUj_$CZv-2lbPX@qn7?gkMM>H`o$tl`k(wi$;h5 zJ84x|y@E3;DhR#n5A!;l@=i<4O`MJP+ial$u7X7xwlw5GMl;F78&tu>F4&AB8_zPQ zS84Vy%5$!A62(2WXpmr!ME>REjI6*wGFD~u9^86N2cxVZ_gLf$oCfL)`S>A_-(yi0ugHka5W*>f|M!H z_uXd7j@!jy-+~u=xs|A=FFO|MYm0KWzKl1+QCvJ0hBGQDZE+ zBp@F*B7Cp+-8N^1M7|~h@(>%vTTJe4Tm&wVn;qirsJ<_`TJU=E$w;p-A{Bb##=zaP z>w^2EybRP7&uiRnMMbV_3i?NPjugr@$@e$Zrw*Sp;jS^|#|8NrV~%yR`HxVkvR;x+V@&fh-12U9L~J&AMq!~bXAKby0!V(gC8liI?DQOðv=!6U^mTE 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%0D5>u1d9GzOhxg2< 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 literal 0 HcmV?d00001 diff --git a/Godeps/_workspace/src/github.com/gizak/termui/gauge.go b/Godeps/_workspace/src/github.com/gizak/termui/gauge.go new file mode 100644 index 0000000000..986f4f3dcd --- /dev/null +++ b/Godeps/_workspace/src/github.com/gizak/termui/gauge.go @@ -0,0 +1,113 @@ +// Copyright 2015 Zack Guo . All rights reserved. +// Use of this source code is governed by a MIT license that can +// be found in the LICENSE file. + +package termui + +import ( + "strconv" + "strings" +) + +// Gauge is a progress bar like widget. +// A simple example: +/* + g := termui.NewGauge() + g.Percent = 40 + g.Width = 50 + g.Height = 3 + g.Border.Label = "Slim Gauge" + g.BarColor = termui.ColorRed + g.PercentColor = termui.ColorBlue +*/ + +// Align is the position of the gauge's label. +type Align int + +// All supported positions. +const ( + AlignLeft Align = iota + AlignCenter + AlignRight +) + +type Gauge struct { + Block + Percent int + BarColor Attribute + PercentColor Attribute + Label string + LabelAlign Align +} + +// NewGauge return a new gauge with current theme. +func NewGauge() *Gauge { + g := &Gauge{ + Block: *NewBlock(), + PercentColor: theme.GaugePercent, + BarColor: theme.GaugeBar, + Label: "{{percent}}%", + LabelAlign: AlignCenter, + } + + g.Width = 12 + g.Height = 5 + return g +} + +// Buffer implements Bufferer interface. +func (g *Gauge) Buffer() []Point { + ps := g.Block.Buffer() + + // plot bar + w := g.Percent * g.innerWidth / 100 + for i := 0; i < g.innerHeight; i++ { + for j := 0; j < w; j++ { + p := Point{} + p.X = g.innerX + j + p.Y = g.innerY + i + p.Ch = ' ' + p.Bg = g.BarColor + if p.Bg == ColorDefault { + p.Bg |= AttrReverse + } + ps = append(ps, p) + } + } + + // plot percentage + s := strings.Replace(g.Label, "{{percent}}", strconv.Itoa(g.Percent), -1) + pry := g.innerY + g.innerHeight/2 + rs := str2runes(s) + var pos int + switch g.LabelAlign { + case AlignLeft: + pos = 0 + + case AlignCenter: + pos = (g.innerWidth - strWidth(s)) / 2 + + case AlignRight: + pos = g.innerWidth - strWidth(s) + } + + for i, v := range rs { + p := Point{} + p.X = 1 + pos + i + p.Y = pry + p.Ch = v + p.Fg = g.PercentColor + if w+g.innerX > pos+i { + p.Bg = g.BarColor + if p.Bg == ColorDefault { + p.Bg |= AttrReverse + } + + } else { + p.Bg = g.Block.BgColor + } + + ps = append(ps, p) + } + return g.Block.chopOverflow(ps) +} diff --git a/Godeps/_workspace/src/github.com/gizak/termui/grid.go b/Godeps/_workspace/src/github.com/gizak/termui/grid.go new file mode 100644 index 0000000000..5f6e85e761 --- /dev/null +++ b/Godeps/_workspace/src/github.com/gizak/termui/grid.go @@ -0,0 +1,279 @@ +// Copyright 2015 Zack Guo . All rights reserved. +// Use of this source code is governed by a MIT license that can +// be found in the LICENSE file. + +package termui + +// GridBufferer introduces a Bufferer that can be manipulated by Grid. +type GridBufferer interface { + Bufferer + GetHeight() int + SetWidth(int) + SetX(int) + SetY(int) +} + +// Row builds a layout tree +type Row struct { + Cols []*Row //children + Widget GridBufferer // root + X int + Y int + Width int + Height int + Span int + Offset int +} + +// calculate and set the underlying layout tree's x, y, height and width. +func (r *Row) calcLayout() { + r.assignWidth(r.Width) + r.Height = r.solveHeight() + r.assignX(r.X) + r.assignY(r.Y) +} + +// tell if the node is leaf in the tree. +func (r *Row) isLeaf() bool { + return r.Cols == nil || len(r.Cols) == 0 +} + +func (r *Row) isRenderableLeaf() bool { + return r.isLeaf() && r.Widget != nil +} + +// assign widgets' (and their parent rows') width recursively. +func (r *Row) assignWidth(w int) { + r.SetWidth(w) + + accW := 0 // acc span and offset + calcW := make([]int, len(r.Cols)) // calculated width + calcOftX := make([]int, len(r.Cols)) // computated start position of x + + for i, c := range r.Cols { + accW += c.Span + c.Offset + cw := int(float64(c.Span*r.Width) / 12.0) + + if i >= 1 { + calcOftX[i] = calcOftX[i-1] + + calcW[i-1] + + int(float64(r.Cols[i-1].Offset*r.Width)/12.0) + } + + // use up the space if it is the last col + if i == len(r.Cols)-1 && accW == 12 { + cw = r.Width - calcOftX[i] + } + calcW[i] = cw + r.Cols[i].assignWidth(cw) + } +} + +// bottom up calc and set rows' (and their widgets') height, +// return r's total height. +func (r *Row) solveHeight() int { + if r.isRenderableLeaf() { + r.Height = r.Widget.GetHeight() + return r.Widget.GetHeight() + } + + maxh := 0 + if !r.isLeaf() { + for _, c := range r.Cols { + nh := c.solveHeight() + // when embed rows in Cols, row widgets stack up + if r.Widget != nil { + nh += r.Widget.GetHeight() + } + if nh > maxh { + maxh = nh + } + } + } + + r.Height = maxh + return maxh +} + +// recursively assign x position for r tree. +func (r *Row) assignX(x int) { + r.SetX(x) + + if !r.isLeaf() { + acc := 0 + for i, c := range r.Cols { + if c.Offset != 0 { + acc += int(float64(c.Offset*r.Width) / 12.0) + } + r.Cols[i].assignX(x + acc) + acc += c.Width + } + } +} + +// recursively assign y position to r. +func (r *Row) assignY(y int) { + r.SetY(y) + + if r.isLeaf() { + return + } + + for i := range r.Cols { + acc := 0 + if r.Widget != nil { + acc = r.Widget.GetHeight() + } + r.Cols[i].assignY(y + acc) + } + +} + +// GetHeight implements GridBufferer interface. +func (r Row) GetHeight() int { + return r.Height +} + +// SetX implements GridBufferer interface. +func (r *Row) SetX(x int) { + r.X = x + if r.Widget != nil { + r.Widget.SetX(x) + } +} + +// SetY implements GridBufferer interface. +func (r *Row) SetY(y int) { + r.Y = y + if r.Widget != nil { + r.Widget.SetY(y) + } +} + +// SetWidth implements GridBufferer interface. +func (r *Row) SetWidth(w int) { + r.Width = w + if r.Widget != nil { + r.Widget.SetWidth(w) + } +} + +// Buffer implements Bufferer interface, +// recursively merge all widgets buffer +func (r *Row) Buffer() []Point { + merged := []Point{} + + if r.isRenderableLeaf() { + return r.Widget.Buffer() + } + + // for those are not leaves but have a renderable widget + if r.Widget != nil { + merged = append(merged, r.Widget.Buffer()...) + } + + // collect buffer from children + if !r.isLeaf() { + for _, c := range r.Cols { + merged = append(merged, c.Buffer()...) + } + } + + return merged +} + +// Grid implements 12 columns system. +// A simple example: +/* + import ui "github.com/gizak/termui" + // init and create widgets... + + // build + ui.Body.AddRows( + ui.NewRow( + ui.NewCol(6, 0, widget0), + ui.NewCol(6, 0, widget1)), + ui.NewRow( + ui.NewCol(3, 0, widget2), + ui.NewCol(3, 0, widget30, widget31, widget32), + ui.NewCol(6, 0, widget4))) + + // calculate layout + ui.Body.Align() + + ui.Render(ui.Body) +*/ +type Grid struct { + Rows []*Row + Width int + X int + Y int + BgColor Attribute +} + +// NewGrid returns *Grid with given rows. +func NewGrid(rows ...*Row) *Grid { + return &Grid{Rows: rows} +} + +// AddRows appends given rows to Grid. +func (g *Grid) AddRows(rs ...*Row) { + g.Rows = append(g.Rows, rs...) +} + +// NewRow creates a new row out of given columns. +func NewRow(cols ...*Row) *Row { + rs := &Row{Span: 12, Cols: cols} + return rs +} + +// NewCol accepts: widgets are LayoutBufferer or widgets is A NewRow. +// Note that if multiple widgets are provided, they will stack up in the col. +func NewCol(span, offset int, widgets ...GridBufferer) *Row { + r := &Row{Span: span, Offset: offset} + + if widgets != nil && len(widgets) == 1 { + wgt := widgets[0] + nw, isRow := wgt.(*Row) + if isRow { + r.Cols = nw.Cols + } else { + r.Widget = wgt + } + return r + } + + r.Cols = []*Row{} + ir := r + for _, w := range widgets { + nr := &Row{Span: 12, Widget: w} + ir.Cols = []*Row{nr} + ir = nr + } + + return r +} + +// Align calculate each rows' layout. +func (g *Grid) Align() { + h := 0 + for _, r := range g.Rows { + r.SetWidth(g.Width) + r.SetX(g.X) + r.SetY(g.Y + h) + r.calcLayout() + h += r.GetHeight() + } +} + +// Buffer implments Bufferer interface. +func (g Grid) Buffer() []Point { + ps := []Point{} + for _, r := range g.Rows { + ps = append(ps, r.Buffer()...) + } + return ps +} + +// Body corresponds to the entire terminal display region. +var Body *Grid diff --git a/Godeps/_workspace/src/github.com/gizak/termui/grid_test.go b/Godeps/_workspace/src/github.com/gizak/termui/grid_test.go new file mode 100644 index 0000000000..cdafb20524 --- /dev/null +++ b/Godeps/_workspace/src/github.com/gizak/termui/grid_test.go @@ -0,0 +1,98 @@ +// Copyright 2015 Zack Guo . All rights reserved. +// Use of this source code is governed by a MIT license that can +// be found in the LICENSE file. + +package termui + +import ( + "testing" + + "github.com/davecgh/go-spew/spew" +) + +var r *Row + +func TestRowWidth(t *testing.T) { + p0 := NewPar("p0") + p0.Height = 1 + p1 := NewPar("p1") + p1.Height = 1 + p2 := NewPar("p2") + p2.Height = 1 + p3 := NewPar("p3") + p3.Height = 1 + + /* test against tree: + + r + / \ + 0:w 1 + / \ + 10:w 11 + / + 110:w + / + 1100:w + */ + /* + r = &row{ + Span: 12, + Cols: []*row{ + &row{Widget: p0, Span: 6}, + &row{ + Span: 6, + Cols: []*row{ + &row{Widget: p1, Span: 6}, + &row{ + Span: 6, + Cols: []*row{ + &row{ + Span: 12, + Widget: p2, + Cols: []*row{ + &row{Span: 12, Widget: p3}}}}}}}}} + */ + + r = NewRow( + NewCol(6, 0, p0), + NewCol(6, 0, + NewRow( + NewCol(6, 0, p1), + NewCol(6, 0, p2, p3)))) + + r.assignWidth(100) + if r.Width != 100 || + (r.Cols[0].Width) != 50 || + (r.Cols[1].Width) != 50 || + (r.Cols[1].Cols[0].Width) != 25 || + (r.Cols[1].Cols[1].Width) != 25 || + (r.Cols[1].Cols[1].Cols[0].Width) != 25 || + (r.Cols[1].Cols[1].Cols[0].Cols[0].Width) != 25 { + t.Error("assignWidth fails") + } +} + +func TestRowHeight(t *testing.T) { + spew.Dump() + + if (r.solveHeight()) != 2 || + (r.Cols[1].Cols[1].Height) != 2 || + (r.Cols[1].Cols[1].Cols[0].Height) != 2 || + (r.Cols[1].Cols[0].Height) != 1 { + t.Error("solveHeight fails") + } +} + +func TestAssignXY(t *testing.T) { + r.assignX(0) + r.assignY(0) + if (r.Cols[0].X) != 0 || + (r.Cols[1].Cols[0].X) != 50 || + (r.Cols[1].Cols[1].X) != 75 || + (r.Cols[1].Cols[1].Cols[0].X) != 75 || + (r.Cols[1].Cols[0].Y) != 0 || + (r.Cols[1].Cols[1].Cols[0].Y) != 0 || + (r.Cols[1].Cols[1].Cols[0].Cols[0].Y) != 1 { + t.Error("assignXY fails") + } +} diff --git a/Godeps/_workspace/src/github.com/gizak/termui/helper.go b/Godeps/_workspace/src/github.com/gizak/termui/helper.go new file mode 100644 index 0000000000..80d8a02788 --- /dev/null +++ b/Godeps/_workspace/src/github.com/gizak/termui/helper.go @@ -0,0 +1,66 @@ +// Copyright 2015 Zack Guo . All rights reserved. +// Use of this source code is governed by a MIT license that can +// be found in the LICENSE file. + +package termui + +import tm "github.com/nsf/termbox-go" +import rw "github.com/mattn/go-runewidth" + +/* ---------------Port from termbox-go --------------------- */ + +// Attribute is printable cell's color and style. +type Attribute uint16 + +const ( + ColorDefault Attribute = iota + ColorBlack + ColorRed + ColorGreen + ColorYellow + ColorBlue + ColorMagenta + ColorCyan + ColorWhite +) + +const NumberofColors = 8 //Have a constant that defines number of colors +const ( + AttrBold Attribute = 1 << (iota + 9) + AttrUnderline + AttrReverse +) + +var ( + dot = "…" + dotw = rw.StringWidth(dot) +) + +/* ----------------------- End ----------------------------- */ + +func toTmAttr(x Attribute) tm.Attribute { + return tm.Attribute(x) +} + +func str2runes(s string) []rune { + return []rune(s) +} + +func trimStr2Runes(s string, w int) []rune { + if w <= 0 { + return []rune{} + } + sw := rw.StringWidth(s) + if sw > w { + return []rune(rw.Truncate(s, w, dot)) + } + return str2runes(s) //[]rune(rw.Truncate(s, w, "")) +} + +func strWidth(s string) int { + return rw.StringWidth(s) +} + +func charWidth(ch rune) int { + return rw.RuneWidth(ch) +} diff --git a/Godeps/_workspace/src/github.com/gizak/termui/helper_test.go b/Godeps/_workspace/src/github.com/gizak/termui/helper_test.go new file mode 100644 index 0000000000..6d1a561302 --- /dev/null +++ b/Godeps/_workspace/src/github.com/gizak/termui/helper_test.go @@ -0,0 +1,58 @@ +// Copyright 2015 Zack Guo . All rights reserved. +// Use of this source code is governed by a MIT license that can +// be found in the LICENSE file. + +package termui + +import ( + "testing" + + "github.com/davecgh/go-spew/spew" +) + +func TestStr2Rune(t *testing.T) { + s := "你好,世界." + rs := str2runes(s) + if len(rs) != 6 { + t.Error() + } +} + +func TestWidth(t *testing.T) { + s0 := "つのだ☆HIRO" + s1 := "11111111111" + spew.Dump(s0) + spew.Dump(s1) + // above not align for setting East Asian Ambiguous to wide!! + + if strWidth(s0) != strWidth(s1) { + t.Error("str len failed") + } + + len1 := []rune{'a', '2', '&', '「', 'オ', '。'} //will false: 'ᆵ', 'ᄚ', 'ᄒ' + for _, v := range len1 { + if charWidth(v) != 1 { + t.Error("len1 failed") + } + } + + len2 := []rune{'漢', '字', '한', '자', '你', '好', 'だ', '。', '%', 's', 'E', 'ョ', '、', 'ヲ'} + for _, v := range len2 { + if charWidth(v) != 2 { + t.Error("len2 failed") + } + } +} + +func TestTrim(t *testing.T) { + s := "つのだ☆HIRO" + if string(trimStr2Runes(s, 10)) != "つのだ☆HI"+dot { + t.Error("trim failed") + } + if string(trimStr2Runes(s, 11)) != "つのだ☆HIRO" { + t.Error("avoid tail trim failed") + } + if string(trimStr2Runes(s, 15)) != "つのだ☆HIRO" { + t.Error("avoid trim failed") + } +} diff --git a/Godeps/_workspace/src/github.com/gizak/termui/list.go b/Godeps/_workspace/src/github.com/gizak/termui/list.go new file mode 100644 index 0000000000..0640932f2b --- /dev/null +++ b/Godeps/_workspace/src/github.com/gizak/termui/list.go @@ -0,0 +1,104 @@ +// Copyright 2015 Zack Guo . All rights reserved. +// Use of this source code is governed by a MIT license that can +// be found in the LICENSE file. + +package termui + +import "strings" + +// List displays []string as its items, +// it has a Overflow option (default is "hidden"), when set to "hidden", +// the item exceeding List's width is truncated, but when set to "wrap", +// the overflowed text breaks into next line. +/* + strs := []string{ + "[0] github.com/gizak/termui", + "[1] editbox.go", + "[2] iterrupt.go", + "[3] keyboard.go", + "[4] output.go", + "[5] random_out.go", + "[6] dashboard.go", + "[7] nsf/termbox-go"} + + ls := termui.NewList() + ls.Items = strs + ls.ItemFgColor = termui.ColorYellow + ls.Border.Label = "List" + ls.Height = 7 + ls.Width = 25 + ls.Y = 0 +*/ +type List struct { + Block + Items []string + Overflow string + ItemFgColor Attribute + ItemBgColor Attribute +} + +// NewList returns a new *List with current theme. +func NewList() *List { + l := &List{Block: *NewBlock()} + l.Overflow = "hidden" + l.ItemFgColor = theme.ListItemFg + l.ItemBgColor = theme.ListItemBg + return l +} + +// Buffer implements Bufferer interface. +func (l *List) Buffer() []Point { + ps := l.Block.Buffer() + switch l.Overflow { + case "wrap": + rs := str2runes(strings.Join(l.Items, "\n")) + i, j, k := 0, 0, 0 + for i < l.innerHeight && k < len(rs) { + w := charWidth(rs[k]) + if rs[k] == '\n' || j+w > l.innerWidth { + i++ + j = 0 + if rs[k] == '\n' { + k++ + } + continue + } + pi := Point{} + pi.X = l.innerX + j + pi.Y = l.innerY + i + + pi.Ch = rs[k] + pi.Bg = l.ItemBgColor + pi.Fg = l.ItemFgColor + + ps = append(ps, pi) + k++ + j++ + } + + case "hidden": + trimItems := l.Items + if len(trimItems) > l.innerHeight { + trimItems = trimItems[:l.innerHeight] + } + for i, v := range trimItems { + rs := trimStr2Runes(v, l.innerWidth) + + j := 0 + for _, vv := range rs { + w := charWidth(vv) + p := Point{} + p.X = l.innerX + j + p.Y = l.innerY + i + + p.Ch = vv + p.Bg = l.ItemBgColor + p.Fg = l.ItemFgColor + + ps = append(ps, p) + j += w + } + } + } + return l.Block.chopOverflow(ps) +} diff --git a/Godeps/_workspace/src/github.com/gizak/termui/mbar.go b/Godeps/_workspace/src/github.com/gizak/termui/mbar.go new file mode 100644 index 0000000000..9d18c2cb43 --- /dev/null +++ b/Godeps/_workspace/src/github.com/gizak/termui/mbar.go @@ -0,0 +1,233 @@ +// Copyright 2015 Zack Guo . All rights reserved. +// Use of this source code is governed by a MIT license that can +// be found in the LICENSE file. + +package termui + +import ( + "fmt" +) + +// This is the implemetation of multi-colored or stacked bar graph. This is different from default barGraph which is implemented in bar.go +// Multi-Colored-BarChart creates multiple bars in a widget: +/* + bc := termui.NewMBarChart() + data := make([][]int, 2) + data[0] := []int{3, 2, 5, 7, 9, 4} + data[1] := []int{7, 8, 5, 3, 1, 6} + bclabels := []string{"S0", "S1", "S2", "S3", "S4", "S5"} + bc.Border.Label = "Bar Chart" + bc.Data = data + bc.Width = 26 + bc.Height = 10 + bc.DataLabels = bclabels + bc.TextColor = termui.ColorGreen + bc.BarColor = termui.ColorRed + bc.NumColor = termui.ColorYellow +*/ +type MBarChart struct { + Block + BarColor [NumberofColors]Attribute + TextColor Attribute + NumColor [NumberofColors]Attribute + Data [NumberofColors][]int + DataLabels []string + BarWidth int + BarGap int + labels [][]rune + dataNum [NumberofColors][][]rune + numBar int + scale float64 + max int + minDataLen int + numStack int + ShowScale bool + maxScale []rune +} + +// NewBarChart returns a new *BarChart with current theme. +func NewMBarChart() *MBarChart { + bc := &MBarChart{Block: *NewBlock()} + bc.BarColor[0] = theme.MBarChartBar + bc.NumColor[0] = theme.MBarChartNum + bc.TextColor = theme.MBarChartText + bc.BarGap = 1 + bc.BarWidth = 3 + return bc +} + +func (bc *MBarChart) layout() { + bc.numBar = bc.innerWidth / (bc.BarGap + bc.BarWidth) + bc.labels = make([][]rune, bc.numBar) + DataLen := 0 + LabelLen := len(bc.DataLabels) + bc.minDataLen = 9999 //Set this to some very hight value so that we find the minimum one We want to know which array among data[][] has got the least length + + // We need to know how many stack/data array data[0] , data[1] are there + for i := 0; i < len(bc.Data); i++ { + if bc.Data[i] == nil { + break + } + DataLen++ + } + bc.numStack = DataLen + + //We need to know what is the mimimum size of data array data[0] could have 10 elements data[1] could have only 5, so we plot only 5 bar graphs + + for i := 0; i < DataLen; i++ { + if bc.minDataLen > len(bc.Data[i]) { + bc.minDataLen = len(bc.Data[i]) + } + } + + if LabelLen > bc.minDataLen { + LabelLen = bc.minDataLen + } + + for i := 0; i < LabelLen && i < bc.numBar; i++ { + bc.labels[i] = trimStr2Runes(bc.DataLabels[i], bc.BarWidth) + } + + for i := 0; i < bc.numStack; i++ { + bc.dataNum[i] = make([][]rune, len(bc.Data[i])) + //For each stack of bar calcualte the rune + for j := 0; j < LabelLen && i < bc.numBar; j++ { + n := bc.Data[i][j] + s := fmt.Sprint(n) + bc.dataNum[i][j] = trimStr2Runes(s, bc.BarWidth) + } + //If color is not defined by default then populate a color that is different from the prevous bar + if bc.BarColor[i] == ColorDefault && bc.NumColor[i] == ColorDefault { + if i == 0 { + bc.BarColor[i] = ColorBlack + } else { + bc.BarColor[i] = bc.BarColor[i-1] + 1 + if bc.BarColor[i] > NumberofColors { + bc.BarColor[i] = ColorBlack + } + } + bc.NumColor[i] = (NumberofColors + 1) - bc.BarColor[i] //Make NumColor opposite of barColor for visibility + } + } + + //If Max value is not set then we have to populate, this time the max value will be max(sum(d1[0],d2[0],d3[0]) .... sum(d1[n], d2[n], d3[n])) + + if bc.max == 0 { + bc.max = -1 + } + for i := 0; i < bc.minDataLen && i < LabelLen; i++ { + var dsum int + for j := 0; j < bc.numStack; j++ { + dsum += bc.Data[j][i] + } + if dsum > bc.max { + bc.max = dsum + } + } + + //Finally Calculate max sale + if bc.ShowScale { + s := fmt.Sprintf("%d", bc.max) + bc.maxScale = trimStr2Runes(s, len(s)) + bc.scale = float64(bc.max) / float64(bc.innerHeight-2) + } else { + bc.scale = float64(bc.max) / float64(bc.innerHeight-1) + } + +} + +func (bc *MBarChart) SetMax(max int) { + + if max > 0 { + bc.max = max + } +} + +// Buffer implements Bufferer interface. +func (bc *MBarChart) Buffer() []Point { + ps := bc.Block.Buffer() + bc.layout() + var oftX int + + for i := 0; i < bc.numBar && i < bc.minDataLen && i < len(bc.DataLabels); i++ { + ph := 0 //Previous Height to stack up + oftX = i * (bc.BarWidth + bc.BarGap) + for i1 := 0; i1 < bc.numStack; i1++ { + h := int(float64(bc.Data[i1][i]) / bc.scale) + // plot bars + for j := 0; j < bc.BarWidth; j++ { + for k := 0; k < h; k++ { + p := Point{} + p.Ch = ' ' + p.Bg = bc.BarColor[i1] + if bc.BarColor[i1] == ColorDefault { // when color is default, space char treated as transparent! + p.Bg |= AttrReverse + } + p.X = bc.innerX + i*(bc.BarWidth+bc.BarGap) + j + p.Y = bc.innerY + bc.innerHeight - 2 - k - ph + ps = append(ps, p) + } + } + ph += h + } + // plot text + for j, k := 0, 0; j < len(bc.labels[i]); j++ { + w := charWidth(bc.labels[i][j]) + p := Point{} + p.Ch = bc.labels[i][j] + p.Bg = bc.BgColor + p.Fg = bc.TextColor + p.Y = bc.innerY + bc.innerHeight - 1 + p.X = bc.innerX + oftX + ((bc.BarWidth - len(bc.labels[i])) / 2) + k + ps = append(ps, p) + k += w + } + // plot num + ph = 0 //re-initialize previous height + for i1 := 0; i1 < bc.numStack; i1++ { + h := int(float64(bc.Data[i1][i]) / bc.scale) + for j := 0; j < len(bc.dataNum[i1][i]) && h > 0; j++ { + p := Point{} + p.Ch = bc.dataNum[i1][i][j] + p.Fg = bc.NumColor[i1] + p.Bg = bc.BarColor[i1] + if bc.BarColor[i1] == ColorDefault { // the same as above + p.Bg |= AttrReverse + } + if h == 0 { + p.Bg = bc.BgColor + } + p.X = bc.innerX + oftX + (bc.BarWidth-len(bc.dataNum[i1][i]))/2 + j + p.Y = bc.innerY + bc.innerHeight - 2 - ph + ps = append(ps, p) + } + ph += h + } + } + + if bc.ShowScale { + //Currently bar graph only supprts data range from 0 to MAX + //Plot 0 + p := Point{} + p.Ch = '0' + p.Bg = bc.BgColor + p.Fg = bc.TextColor + p.Y = bc.innerY + bc.innerHeight - 2 + p.X = bc.X + ps = append(ps, p) + + //Plot the maximum sacle value + for i := 0; i < len(bc.maxScale); i++ { + p := Point{} + p.Ch = bc.maxScale[i] + p.Bg = bc.BgColor + p.Fg = bc.TextColor + p.Y = bc.innerY + p.X = bc.X + i + ps = append(ps, p) + } + + } + + return bc.Block.chopOverflow(ps) +} diff --git a/Godeps/_workspace/src/github.com/gizak/termui/p.go b/Godeps/_workspace/src/github.com/gizak/termui/p.go new file mode 100644 index 0000000000..e327d74897 --- /dev/null +++ b/Godeps/_workspace/src/github.com/gizak/termui/p.go @@ -0,0 +1,71 @@ +// Copyright 2015 Zack Guo . All rights reserved. +// Use of this source code is governed by a MIT license that can +// be found in the LICENSE file. + +package termui + +// Par displays a paragraph. +/* + par := termui.NewPar("Simple Text") + par.Height = 3 + par.Width = 17 + par.Border.Label = "Label" +*/ +type Par struct { + Block + Text string + TextFgColor Attribute + TextBgColor Attribute +} + +// NewPar returns a new *Par with given text as its content. +func NewPar(s string) *Par { + return &Par{ + Block: *NewBlock(), + Text: s, + TextFgColor: theme.ParTextFg, + TextBgColor: theme.ParTextBg} +} + +// Buffer implements Bufferer interface. +func (p *Par) Buffer() []Point { + ps := p.Block.Buffer() + + rs := str2runes(p.Text) + i, j, k := 0, 0, 0 + for i < p.innerHeight && k < len(rs) { + // the width of char is about to print + w := charWidth(rs[k]) + + if rs[k] == '\n' || j+w > p.innerWidth { + i++ + j = 0 // set x = 0 + if rs[k] == '\n' { + k++ + } + + if i >= p.innerHeight { + ps = append(ps, newPointWithAttrs('…', + p.innerX+p.innerWidth-1, + p.innerY+p.innerHeight-1, + p.TextFgColor, p.TextBgColor)) + break + } + + continue + } + pi := Point{} + pi.X = p.innerX + j + pi.Y = p.innerY + i + + pi.Ch = rs[k] + pi.Bg = p.TextBgColor + pi.Fg = p.TextFgColor + + ps = append(ps, pi) + + k++ + j += w + } + return p.Block.chopOverflow(ps) +} diff --git a/Godeps/_workspace/src/github.com/gizak/termui/point.go b/Godeps/_workspace/src/github.com/gizak/termui/point.go new file mode 100644 index 0000000000..c381af9a4e --- /dev/null +++ b/Godeps/_workspace/src/github.com/gizak/termui/point.go @@ -0,0 +1,28 @@ +// Copyright 2015 Zack Guo . All rights reserved. +// Use of this source code is governed by a MIT license that can +// be found in the LICENSE file. + +package termui + +// Point stands for a single cell in terminal. +type Point struct { + Ch rune + Bg Attribute + Fg Attribute + X int + Y int +} + +func newPoint(c rune, x, y int) (p Point) { + p.Ch = c + p.X = x + p.Y = y + return +} + +func newPointWithAttrs(c rune, x, y int, fg, bg Attribute) Point { + p := newPoint(c, x, y) + p.Bg = bg + p.Fg = fg + return p +} diff --git a/Godeps/_workspace/src/github.com/gizak/termui/render.go b/Godeps/_workspace/src/github.com/gizak/termui/render.go new file mode 100644 index 0000000000..d697d0aea8 --- /dev/null +++ b/Godeps/_workspace/src/github.com/gizak/termui/render.go @@ -0,0 +1,60 @@ +// Copyright 2015 Zack Guo . All rights reserved. +// Use of this source code is governed by a MIT license that can +// be found in the LICENSE file. + +package termui + +import tm "github.com/nsf/termbox-go" + +// Bufferer should be implemented by all renderable components. +type Bufferer interface { + Buffer() []Point +} + +// Init initializes termui library. This function should be called before any others. +// After initialization, the library must be finalized by 'Close' function. +func Init() error { + Body = NewGrid() + Body.X = 0 + Body.Y = 0 + Body.BgColor = theme.BodyBg + defer func() { + w, _ := tm.Size() + Body.Width = w + evtListen() + }() + return tm.Init() +} + +// Close finalizes termui library, +// should be called after successful initialization when termui's functionality isn't required anymore. +func Close() { + tm.Close() +} + +// TermWidth returns the current terminal's width. +func TermWidth() int { + tm.Sync() + w, _ := tm.Size() + return w +} + +// TermHeight returns the current terminal's height. +func TermHeight() int { + tm.Sync() + _, h := tm.Size() + return h +} + +// Render renders all Bufferer in the given order from left to right, +// right could overlap on left ones. +func Render(rs ...Bufferer) { + tm.Clear(tm.ColorDefault, toTmAttr(theme.BodyBg)) + for _, r := range rs { + buf := r.Buffer() + for _, v := range buf { + tm.SetCell(v.X, v.Y, v.Ch, toTmAttr(v.Fg), toTmAttr(v.Bg)) + } + } + tm.Flush() +} diff --git a/Godeps/_workspace/src/github.com/gizak/termui/sparkline.go b/Godeps/_workspace/src/github.com/gizak/termui/sparkline.go new file mode 100644 index 0000000000..c63a5857fb --- /dev/null +++ b/Godeps/_workspace/src/github.com/gizak/termui/sparkline.go @@ -0,0 +1,156 @@ +// Copyright 2015 Zack Guo . All rights reserved. +// Use of this source code is governed by a MIT license that can +// be found in the LICENSE file. + +package termui + +import "math" + +// Sparkline is like: ▅▆▂▂▅▇▂▂▃▆▆▆▅▃ +/* + data := []int{4, 2, 1, 6, 3, 9, 1, 4, 2, 15, 14, 9, 8, 6, 10, 13, 15, 12, 10, 5, 3, 6, 1} + spl := termui.NewSparkline() + spl.Data = data + spl.Title = "Sparkline 0" + spl.LineColor = termui.ColorGreen +*/ +type Sparkline struct { + Data []int + Height int + Title string + TitleColor Attribute + LineColor Attribute + displayHeight int + scale float32 + max int +} + +// Sparklines is a renderable widget which groups together the given sparklines. +/* + spls := termui.NewSparklines(spl0,spl1,spl2) //... + spls.Height = 2 + spls.Width = 20 +*/ +type Sparklines struct { + Block + Lines []Sparkline + displayLines int + displayWidth int +} + +var sparks = []rune{'▁', '▂', '▃', '▄', '▅', '▆', '▇', '█'} + +// Add appends a given Sparkline to s *Sparklines. +func (s *Sparklines) Add(sl Sparkline) { + s.Lines = append(s.Lines, sl) +} + +// NewSparkline returns a unrenderable single sparkline that intended to be added into Sparklines. +func NewSparkline() Sparkline { + return Sparkline{ + Height: 1, + TitleColor: theme.SparklineTitle, + LineColor: theme.SparklineLine} +} + +// NewSparklines return a new *Spaklines with given Sparkline(s), you can always add a new Sparkline later. +func NewSparklines(ss ...Sparkline) *Sparklines { + s := &Sparklines{Block: *NewBlock(), Lines: ss} + return s +} + +func (sl *Sparklines) update() { + for i, v := range sl.Lines { + if v.Title == "" { + sl.Lines[i].displayHeight = v.Height + } else { + sl.Lines[i].displayHeight = v.Height + 1 + } + } + sl.displayWidth = sl.innerWidth + + // get how many lines gotta display + h := 0 + sl.displayLines = 0 + for _, v := range sl.Lines { + if h+v.displayHeight <= sl.innerHeight { + sl.displayLines++ + } else { + break + } + h += v.displayHeight + } + + for i := 0; i < sl.displayLines; i++ { + data := sl.Lines[i].Data + + max := math.MinInt32 + for _, v := range data { + if max < v { + max = v + } + } + sl.Lines[i].max = max + sl.Lines[i].scale = float32(8*sl.Lines[i].Height) / float32(max) + } +} + +// Buffer implements Bufferer interface. +func (sl *Sparklines) Buffer() []Point { + ps := sl.Block.Buffer() + sl.update() + + oftY := 0 + for i := 0; i < sl.displayLines; i++ { + l := sl.Lines[i] + data := l.Data + + if len(data) > sl.innerWidth { + data = data[len(data)-sl.innerWidth:] + } + + if l.Title != "" { + rs := trimStr2Runes(l.Title, sl.innerWidth) + oftX := 0 + for _, v := range rs { + w := charWidth(v) + p := Point{} + p.Ch = v + p.Fg = l.TitleColor + p.Bg = sl.BgColor + p.X = sl.innerX + oftX + p.Y = sl.innerY + oftY + ps = append(ps, p) + oftX += w + } + } + + for j, v := range data { + h := int(float32(v)*l.scale + 0.5) + barCnt := h / 8 + barMod := h % 8 + for jj := 0; jj < barCnt; jj++ { + p := Point{} + p.X = sl.innerX + j + p.Y = sl.innerY + oftY + l.Height - jj + p.Ch = ' ' // => sparks[7] + p.Bg = l.LineColor + //p.Bg = sl.BgColor + ps = append(ps, p) + } + if barMod != 0 { + p := Point{} + p.X = sl.innerX + j + p.Y = sl.innerY + oftY + l.Height - barCnt + p.Ch = sparks[barMod-1] + p.Fg = l.LineColor + p.Bg = sl.BgColor + ps = append(ps, p) + } + } + + oftY += l.displayHeight + } + + return sl.Block.chopOverflow(ps) +} diff --git a/Godeps/_workspace/src/github.com/gizak/termui/theme.go b/Godeps/_workspace/src/github.com/gizak/termui/theme.go new file mode 100644 index 0000000000..c8ad947560 --- /dev/null +++ b/Godeps/_workspace/src/github.com/gizak/termui/theme.go @@ -0,0 +1,84 @@ +// Copyright 2015 Zack Guo . All rights reserved. +// Use of this source code is governed by a MIT license that can +// be found in the LICENSE file. + +package termui + +// A ColorScheme represents the current look-and-feel of the dashboard. +type ColorScheme struct { + BodyBg Attribute + BlockBg Attribute + HasBorder bool + BorderFg Attribute + BorderBg Attribute + BorderLabelTextFg Attribute + BorderLabelTextBg Attribute + ParTextFg Attribute + ParTextBg Attribute + SparklineLine Attribute + SparklineTitle Attribute + GaugeBar Attribute + GaugePercent Attribute + LineChartLine Attribute + LineChartAxes Attribute + ListItemFg Attribute + ListItemBg Attribute + BarChartBar Attribute + BarChartText Attribute + BarChartNum Attribute + MBarChartBar Attribute + MBarChartText Attribute + MBarChartNum Attribute +} + +// default color scheme depends on the user's terminal setting. +var themeDefault = ColorScheme{HasBorder: true} + +var themeHelloWorld = ColorScheme{ + BodyBg: ColorBlack, + BlockBg: ColorBlack, + HasBorder: true, + BorderFg: ColorWhite, + BorderBg: ColorBlack, + BorderLabelTextBg: ColorBlack, + BorderLabelTextFg: ColorGreen, + ParTextBg: ColorBlack, + ParTextFg: ColorWhite, + SparklineLine: ColorMagenta, + SparklineTitle: ColorWhite, + GaugeBar: ColorRed, + GaugePercent: ColorWhite, + LineChartLine: ColorYellow | AttrBold, + LineChartAxes: ColorWhite, + ListItemBg: ColorBlack, + ListItemFg: ColorYellow, + BarChartBar: ColorRed, + BarChartNum: ColorWhite, + BarChartText: ColorCyan, + MBarChartBar: ColorRed, + MBarChartNum: ColorWhite, + MBarChartText: ColorCyan, +} + +var theme = themeDefault // global dep + +// Theme returns the currently used theme. +func Theme() ColorScheme { + return theme +} + +// SetTheme sets a new, custom theme. +func SetTheme(newTheme ColorScheme) { + theme = newTheme +} + +// UseTheme sets a predefined scheme. Currently available: "hello-world" and +// "black-and-white". +func UseTheme(th string) { + switch th { + case "helloworld": + theme = themeHelloWorld + default: + theme = themeDefault + } +} diff --git a/Godeps/_workspace/src/github.com/howeyc/fsnotify/.gitignore b/Godeps/_workspace/src/github.com/howeyc/fsnotify/.gitignore deleted file mode 100644 index e4706a9e91..0000000000 --- a/Godeps/_workspace/src/github.com/howeyc/fsnotify/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -# Setup a Global .gitignore for OS and editor generated files: -# https://help.github.com/articles/ignoring-files -# git config --global core.excludesfile ~/.gitignore_global - -.vagrant diff --git a/Godeps/_workspace/src/github.com/howeyc/fsnotify/AUTHORS b/Godeps/_workspace/src/github.com/howeyc/fsnotify/AUTHORS deleted file mode 100644 index e52b72f83a..0000000000 --- a/Godeps/_workspace/src/github.com/howeyc/fsnotify/AUTHORS +++ /dev/null @@ -1,28 +0,0 @@ -# Names should be added to this file as -# Name or Organization -# The email address is not required for organizations. - -# You can update this list using the following command: -# -# $ git shortlog -se | awk '{print $2 " " $3 " " $4}' - -# Please keep the list sorted. - -Adrien Bustany -Caleb Spare -Case Nelson -Chris Howey -Christoffer Buchholz -Dave Cheney -Francisco Souza -John C Barstow -Kelvin Fo -Nathan Youngman -Paul Hammond -Pursuit92 -Rob Figueiredo -Travis Cline -Tudor Golubenco -bronze1man -debrando -henrikedwards diff --git a/Godeps/_workspace/src/github.com/howeyc/fsnotify/CHANGELOG.md b/Godeps/_workspace/src/github.com/howeyc/fsnotify/CHANGELOG.md deleted file mode 100644 index 761686aa95..0000000000 --- a/Godeps/_workspace/src/github.com/howeyc/fsnotify/CHANGELOG.md +++ /dev/null @@ -1,160 +0,0 @@ -# Changelog - -## v0.9.0 / 2014-01-17 - -* IsAttrib() for events that only concern a file's metadata [#79][] (thanks @abustany) -* [Fix] kqueue: fix deadlock [#77][] (thanks @cespare) -* [NOTICE] Development has moved to `code.google.com/p/go.exp/fsnotify` in preparation for inclusion in the Go standard library. - -## v0.8.12 / 2013-11-13 - -* [API] Remove FD_SET and friends from Linux adapter - -## v0.8.11 / 2013-11-02 - -* [Doc] Add Changelog [#72][] (thanks @nathany) -* [Doc] Spotlight and double modify events on OS X [#62][] (reported by @paulhammond) - -## v0.8.10 / 2013-10-19 - -* [Fix] kqueue: remove file watches when parent directory is removed [#71][] (reported by @mdwhatcott) -* [Fix] kqueue: race between Close and readEvents [#70][] (reported by @bernerdschaefer) -* [Doc] specify OS-specific limits in README (thanks @debrando) - -## v0.8.9 / 2013-09-08 - -* [Doc] Contributing (thanks @nathany) -* [Doc] update package path in example code [#63][] (thanks @paulhammond) -* [Doc] GoCI badge in README (Linux only) [#60][] -* [Doc] Cross-platform testing with Vagrant [#59][] (thanks @nathany) - -## v0.8.8 / 2013-06-17 - -* [Fix] Windows: handle `ERROR_MORE_DATA` on Windows [#49][] (thanks @jbowtie) - -## v0.8.7 / 2013-06-03 - -* [API] Make syscall flags internal -* [Fix] inotify: ignore event changes -* [Fix] race in symlink test [#45][] (reported by @srid) -* [Fix] tests on Windows -* lower case error messages - -## v0.8.6 / 2013-05-23 - -* kqueue: Use EVT_ONLY flag on Darwin -* [Doc] Update README with full example - -## v0.8.5 / 2013-05-09 - -* [Fix] inotify: allow monitoring of "broken" symlinks (thanks @tsg) - -## v0.8.4 / 2013-04-07 - -* [Fix] kqueue: watch all file events [#40][] (thanks @ChrisBuchholz) - -## v0.8.3 / 2013-03-13 - -* [Fix] inoitfy/kqueue memory leak [#36][] (reported by @nbkolchin) -* [Fix] kqueue: use fsnFlags for watching a directory [#33][] (reported by @nbkolchin) - -## v0.8.2 / 2013-02-07 - -* [Doc] add Authors -* [Fix] fix data races for map access [#29][] (thanks @fsouza) - -## v0.8.1 / 2013-01-09 - -* [Fix] Windows path separators -* [Doc] BSD License - -## v0.8.0 / 2012-11-09 - -* kqueue: directory watching improvements (thanks @vmirage) -* inotify: add `IN_MOVED_TO` [#25][] (requested by @cpisto) -* [Fix] kqueue: deleting watched directory [#24][] (reported by @jakerr) - -## v0.7.4 / 2012-10-09 - -* [Fix] inotify: fixes from https://codereview.appspot.com/5418045/ (ugorji) -* [Fix] kqueue: preserve watch flags when watching for delete [#21][] (reported by @robfig) -* [Fix] kqueue: watch the directory even if it isn't a new watch (thanks @robfig) -* [Fix] kqueue: modify after recreation of file - -## v0.7.3 / 2012-09-27 - -* [Fix] kqueue: watch with an existing folder inside the watched folder (thanks @vmirage) -* [Fix] kqueue: no longer get duplicate CREATE events - -## v0.7.2 / 2012-09-01 - -* kqueue: events for created directories - -## v0.7.1 / 2012-07-14 - -* [Fix] for renaming files - -## v0.7.0 / 2012-07-02 - -* [Feature] FSNotify flags -* [Fix] inotify: Added file name back to event path - -## v0.6.0 / 2012-06-06 - -* kqueue: watch files after directory created (thanks @tmc) - -## v0.5.1 / 2012-05-22 - -* [Fix] inotify: remove all watches before Close() - -## v0.5.0 / 2012-05-03 - -* [API] kqueue: return errors during watch instead of sending over channel -* kqueue: match symlink behavior on Linux -* inotify: add `DELETE_SELF` (requested by @taralx) -* [Fix] kqueue: handle EINTR (reported by @robfig) -* [Doc] Godoc example [#1][] (thanks @davecheney) - -## v0.4.0 / 2012-03-30 - -* Go 1 released: build with go tool -* [Feature] Windows support using winfsnotify -* Windows does not have attribute change notifications -* Roll attribute notifications into IsModify - -## v0.3.0 / 2012-02-19 - -* kqueue: add files when watch directory - -## v0.2.0 / 2011-12-30 - -* update to latest Go weekly code - -## v0.1.0 / 2011-10-19 - -* kqueue: add watch on file creation to match inotify -* kqueue: create file event -* inotify: ignore `IN_IGNORED` events -* event String() -* linux: common FileEvent functions -* initial commit - -[#79]: https://github.com/howeyc/fsnotify/pull/79 -[#77]: https://github.com/howeyc/fsnotify/pull/77 -[#72]: https://github.com/howeyc/fsnotify/issues/72 -[#71]: https://github.com/howeyc/fsnotify/issues/71 -[#70]: https://github.com/howeyc/fsnotify/issues/70 -[#63]: https://github.com/howeyc/fsnotify/issues/63 -[#62]: https://github.com/howeyc/fsnotify/issues/62 -[#60]: https://github.com/howeyc/fsnotify/issues/60 -[#59]: https://github.com/howeyc/fsnotify/issues/59 -[#49]: https://github.com/howeyc/fsnotify/issues/49 -[#45]: https://github.com/howeyc/fsnotify/issues/45 -[#40]: https://github.com/howeyc/fsnotify/issues/40 -[#36]: https://github.com/howeyc/fsnotify/issues/36 -[#33]: https://github.com/howeyc/fsnotify/issues/33 -[#29]: https://github.com/howeyc/fsnotify/issues/29 -[#25]: https://github.com/howeyc/fsnotify/issues/25 -[#24]: https://github.com/howeyc/fsnotify/issues/24 -[#21]: https://github.com/howeyc/fsnotify/issues/21 -[#1]: https://github.com/howeyc/fsnotify/issues/1 diff --git a/Godeps/_workspace/src/github.com/howeyc/fsnotify/CONTRIBUTING.md b/Godeps/_workspace/src/github.com/howeyc/fsnotify/CONTRIBUTING.md deleted file mode 100644 index b2025d72c3..0000000000 --- a/Godeps/_workspace/src/github.com/howeyc/fsnotify/CONTRIBUTING.md +++ /dev/null @@ -1,7 +0,0 @@ -# Contributing - -## Moving Notice - -There is a fork being actively developed with a new API in preparation for the Go Standard Library: -[github.com/go-fsnotify/fsnotify](https://github.com/go-fsnotify/fsnotify) - diff --git a/Godeps/_workspace/src/github.com/howeyc/fsnotify/LICENSE b/Godeps/_workspace/src/github.com/howeyc/fsnotify/LICENSE deleted file mode 100644 index f21e540800..0000000000 --- a/Godeps/_workspace/src/github.com/howeyc/fsnotify/LICENSE +++ /dev/null @@ -1,28 +0,0 @@ -Copyright (c) 2012 The Go Authors. All rights reserved. -Copyright (c) 2012 fsnotify Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Godeps/_workspace/src/github.com/howeyc/fsnotify/README.md b/Godeps/_workspace/src/github.com/howeyc/fsnotify/README.md deleted file mode 100644 index 4c7498d38d..0000000000 --- a/Godeps/_workspace/src/github.com/howeyc/fsnotify/README.md +++ /dev/null @@ -1,92 +0,0 @@ -# File system notifications for Go - -[![GoDoc](https://godoc.org/github.com/howeyc/fsnotify?status.png)](http://godoc.org/github.com/howeyc/fsnotify) - -Cross platform: Windows, Linux, BSD and OS X. - -## Moving Notice - -There is a fork being actively developed with a new API in preparation for the Go Standard Library: -[github.com/go-fsnotify/fsnotify](https://github.com/go-fsnotify/fsnotify) - -## Example: - -```go -package main - -import ( - "log" - - "github.com/howeyc/fsnotify" -) - -func main() { - watcher, err := fsnotify.NewWatcher() - if err != nil { - log.Fatal(err) - } - - done := make(chan bool) - - // Process events - go func() { - for { - select { - case ev := <-watcher.Event: - log.Println("event:", ev) - case err := <-watcher.Error: - log.Println("error:", err) - } - } - }() - - err = watcher.Watch("testDir") - if err != nil { - log.Fatal(err) - } - - <-done - - /* ... do stuff ... */ - watcher.Close() -} -``` - -For each event: -* Name -* IsCreate() -* IsDelete() -* IsModify() -* IsRename() - -## FAQ - -**When a file is moved to another directory is it still being watched?** - -No (it shouldn't be, unless you are watching where it was moved to). - -**When I watch a directory, are all subdirectories watched as well?** - -No, you must add watches for any directory you want to watch (a recursive watcher is in the works [#56][]). - -**Do I have to watch the Error and Event channels in a separate goroutine?** - -As of now, yes. Looking into making this single-thread friendly (see [#7][]) - -**Why am I receiving multiple events for the same file on OS X?** - -Spotlight indexing on OS X can result in multiple events (see [#62][]). A temporary workaround is to add your folder(s) to the *Spotlight Privacy settings* until we have a native FSEvents implementation (see [#54][]). - -**How many files can be watched at once?** - -There are OS-specific limits as to how many watches can be created: -* Linux: /proc/sys/fs/inotify/max_user_watches contains the limit, -reaching this limit results in a "no space left on device" error. -* BSD / OSX: sysctl variables "kern.maxfiles" and "kern.maxfilesperproc", reaching these limits results in a "too many open files" error. - - -[#62]: https://github.com/howeyc/fsnotify/issues/62 -[#56]: https://github.com/howeyc/fsnotify/issues/56 -[#54]: https://github.com/howeyc/fsnotify/issues/54 -[#7]: https://github.com/howeyc/fsnotify/issues/7 - diff --git a/Godeps/_workspace/src/github.com/howeyc/fsnotify/example_test.go b/Godeps/_workspace/src/github.com/howeyc/fsnotify/example_test.go deleted file mode 100644 index d3130e2226..0000000000 --- a/Godeps/_workspace/src/github.com/howeyc/fsnotify/example_test.go +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2012 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package fsnotify_test - -import ( - "log" - - "github.com/howeyc/fsnotify" -) - -func ExampleNewWatcher() { - watcher, err := fsnotify.NewWatcher() - if err != nil { - log.Fatal(err) - } - - go func() { - for { - select { - case ev := <-watcher.Event: - log.Println("event:", ev) - case err := <-watcher.Error: - log.Println("error:", err) - } - } - }() - - err = watcher.Watch("/tmp/foo") - if err != nil { - log.Fatal(err) - } -} diff --git a/Godeps/_workspace/src/github.com/howeyc/fsnotify/fsnotify.go b/Godeps/_workspace/src/github.com/howeyc/fsnotify/fsnotify.go deleted file mode 100644 index 9a48d847d3..0000000000 --- a/Godeps/_workspace/src/github.com/howeyc/fsnotify/fsnotify.go +++ /dev/null @@ -1,111 +0,0 @@ -// Copyright 2012 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package fsnotify implements file system notification. -package fsnotify - -import "fmt" - -const ( - FSN_CREATE = 1 - FSN_MODIFY = 2 - FSN_DELETE = 4 - FSN_RENAME = 8 - - FSN_ALL = FSN_MODIFY | FSN_DELETE | FSN_RENAME | FSN_CREATE -) - -// Purge events from interal chan to external chan if passes filter -func (w *Watcher) purgeEvents() { - for ev := range w.internalEvent { - sendEvent := false - w.fsnmut.Lock() - fsnFlags := w.fsnFlags[ev.Name] - w.fsnmut.Unlock() - - if (fsnFlags&FSN_CREATE == FSN_CREATE) && ev.IsCreate() { - sendEvent = true - } - - if (fsnFlags&FSN_MODIFY == FSN_MODIFY) && ev.IsModify() { - sendEvent = true - } - - if (fsnFlags&FSN_DELETE == FSN_DELETE) && ev.IsDelete() { - sendEvent = true - } - - if (fsnFlags&FSN_RENAME == FSN_RENAME) && ev.IsRename() { - sendEvent = true - } - - if sendEvent { - w.Event <- ev - } - - // If there's no file, then no more events for user - // BSD must keep watch for internal use (watches DELETEs to keep track - // what files exist for create events) - if ev.IsDelete() { - w.fsnmut.Lock() - delete(w.fsnFlags, ev.Name) - w.fsnmut.Unlock() - } - } - - close(w.Event) -} - -// Watch a given file path -func (w *Watcher) Watch(path string) error { - return w.WatchFlags(path, FSN_ALL) -} - -// Watch a given file path for a particular set of notifications (FSN_MODIFY etc.) -func (w *Watcher) WatchFlags(path string, flags uint32) error { - w.fsnmut.Lock() - w.fsnFlags[path] = flags - w.fsnmut.Unlock() - return w.watch(path) -} - -// Remove a watch on a file -func (w *Watcher) RemoveWatch(path string) error { - w.fsnmut.Lock() - delete(w.fsnFlags, path) - w.fsnmut.Unlock() - return w.removeWatch(path) -} - -// String formats the event e in the form -// "filename: DELETE|MODIFY|..." -func (e *FileEvent) String() string { - var events string = "" - - if e.IsCreate() { - events += "|" + "CREATE" - } - - if e.IsDelete() { - events += "|" + "DELETE" - } - - if e.IsModify() { - events += "|" + "MODIFY" - } - - if e.IsRename() { - events += "|" + "RENAME" - } - - if e.IsAttrib() { - events += "|" + "ATTRIB" - } - - if len(events) > 0 { - events = events[1:] - } - - return fmt.Sprintf("%q: %s", e.Name, events) -} diff --git a/Godeps/_workspace/src/github.com/howeyc/fsnotify/fsnotify_bsd.go b/Godeps/_workspace/src/github.com/howeyc/fsnotify/fsnotify_bsd.go deleted file mode 100644 index e6ffd7e5b5..0000000000 --- a/Godeps/_workspace/src/github.com/howeyc/fsnotify/fsnotify_bsd.go +++ /dev/null @@ -1,496 +0,0 @@ -// Copyright 2010 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build freebsd openbsd netbsd darwin - -package fsnotify - -import ( - "errors" - "fmt" - "io/ioutil" - "os" - "path/filepath" - "sync" - "syscall" -) - -const ( - // Flags (from ) - sys_NOTE_DELETE = 0x0001 /* vnode was removed */ - sys_NOTE_WRITE = 0x0002 /* data contents changed */ - sys_NOTE_EXTEND = 0x0004 /* size increased */ - sys_NOTE_ATTRIB = 0x0008 /* attributes changed */ - sys_NOTE_LINK = 0x0010 /* link count changed */ - sys_NOTE_RENAME = 0x0020 /* vnode was renamed */ - sys_NOTE_REVOKE = 0x0040 /* vnode access was revoked */ - - // Watch all events - sys_NOTE_ALLEVENTS = sys_NOTE_DELETE | sys_NOTE_WRITE | sys_NOTE_ATTRIB | sys_NOTE_RENAME - - // Block for 100 ms on each call to kevent - keventWaitTime = 100e6 -) - -type FileEvent struct { - mask uint32 // Mask of events - Name string // File name (optional) - create bool // set by fsnotify package if found new file -} - -// IsCreate reports whether the FileEvent was triggered by a creation -func (e *FileEvent) IsCreate() bool { return e.create } - -// IsDelete reports whether the FileEvent was triggered by a delete -func (e *FileEvent) IsDelete() bool { return (e.mask & sys_NOTE_DELETE) == sys_NOTE_DELETE } - -// IsModify reports whether the FileEvent was triggered by a file modification -func (e *FileEvent) IsModify() bool { - return ((e.mask&sys_NOTE_WRITE) == sys_NOTE_WRITE || (e.mask&sys_NOTE_ATTRIB) == sys_NOTE_ATTRIB) -} - -// IsRename reports whether the FileEvent was triggered by a change name -func (e *FileEvent) IsRename() bool { return (e.mask & sys_NOTE_RENAME) == sys_NOTE_RENAME } - -// IsAttrib reports whether the FileEvent was triggered by a change in the file metadata. -func (e *FileEvent) IsAttrib() bool { - return (e.mask & sys_NOTE_ATTRIB) == sys_NOTE_ATTRIB -} - -type Watcher struct { - mu sync.Mutex // Mutex for the Watcher itself. - kq int // File descriptor (as returned by the kqueue() syscall) - watches map[string]int // Map of watched file descriptors (key: path) - wmut sync.Mutex // Protects access to watches. - fsnFlags map[string]uint32 // Map of watched files to flags used for filter - fsnmut sync.Mutex // Protects access to fsnFlags. - enFlags map[string]uint32 // Map of watched files to evfilt note flags used in kqueue - enmut sync.Mutex // Protects access to enFlags. - paths map[int]string // Map of watched paths (key: watch descriptor) - finfo map[int]os.FileInfo // Map of file information (isDir, isReg; key: watch descriptor) - pmut sync.Mutex // Protects access to paths and finfo. - fileExists map[string]bool // Keep track of if we know this file exists (to stop duplicate create events) - femut sync.Mutex // Protects access to fileExists. - externalWatches map[string]bool // Map of watches added by user of the library. - ewmut sync.Mutex // Protects access to externalWatches. - Error chan error // Errors are sent on this channel - internalEvent chan *FileEvent // Events are queued on this channel - Event chan *FileEvent // Events are returned on this channel - done chan bool // Channel for sending a "quit message" to the reader goroutine - isClosed bool // Set to true when Close() is first called -} - -// NewWatcher creates and returns a new kevent instance using kqueue(2) -func NewWatcher() (*Watcher, error) { - fd, errno := syscall.Kqueue() - if fd == -1 { - return nil, os.NewSyscallError("kqueue", errno) - } - w := &Watcher{ - kq: fd, - watches: make(map[string]int), - fsnFlags: make(map[string]uint32), - enFlags: make(map[string]uint32), - paths: make(map[int]string), - finfo: make(map[int]os.FileInfo), - fileExists: make(map[string]bool), - externalWatches: make(map[string]bool), - internalEvent: make(chan *FileEvent), - Event: make(chan *FileEvent), - Error: make(chan error), - done: make(chan bool, 1), - } - - go w.readEvents() - go w.purgeEvents() - return w, nil -} - -// Close closes a kevent watcher instance -// It sends a message to the reader goroutine to quit and removes all watches -// associated with the kevent instance -func (w *Watcher) Close() error { - w.mu.Lock() - if w.isClosed { - w.mu.Unlock() - return nil - } - w.isClosed = true - w.mu.Unlock() - - // Send "quit" message to the reader goroutine - w.done <- true - w.wmut.Lock() - ws := w.watches - w.wmut.Unlock() - for path := range ws { - w.removeWatch(path) - } - - return nil -} - -// AddWatch adds path to the watched file set. -// The flags are interpreted as described in kevent(2). -func (w *Watcher) addWatch(path string, flags uint32) error { - w.mu.Lock() - if w.isClosed { - w.mu.Unlock() - return errors.New("kevent instance already closed") - } - w.mu.Unlock() - - watchDir := false - - w.wmut.Lock() - watchfd, found := w.watches[path] - w.wmut.Unlock() - if !found { - fi, errstat := os.Lstat(path) - if errstat != nil { - return errstat - } - - // don't watch socket - if fi.Mode()&os.ModeSocket == os.ModeSocket { - return nil - } - - // Follow Symlinks - // Unfortunately, Linux can add bogus symlinks to watch list without - // issue, and Windows can't do symlinks period (AFAIK). To maintain - // consistency, we will act like everything is fine. There will simply - // be no file events for broken symlinks. - // Hence the returns of nil on errors. - if fi.Mode()&os.ModeSymlink == os.ModeSymlink { - path, err := filepath.EvalSymlinks(path) - if err != nil { - return nil - } - - fi, errstat = os.Lstat(path) - if errstat != nil { - return nil - } - } - - fd, errno := syscall.Open(path, open_FLAGS, 0700) - if fd == -1 { - return errno - } - watchfd = fd - - w.wmut.Lock() - w.watches[path] = watchfd - w.wmut.Unlock() - - w.pmut.Lock() - w.paths[watchfd] = path - w.finfo[watchfd] = fi - w.pmut.Unlock() - } - // Watch the directory if it has not been watched before. - w.pmut.Lock() - w.enmut.Lock() - if w.finfo[watchfd].IsDir() && - (flags&sys_NOTE_WRITE) == sys_NOTE_WRITE && - (!found || (w.enFlags[path]&sys_NOTE_WRITE) != sys_NOTE_WRITE) { - watchDir = true - } - w.enmut.Unlock() - w.pmut.Unlock() - - w.enmut.Lock() - w.enFlags[path] = flags - w.enmut.Unlock() - - var kbuf [1]syscall.Kevent_t - watchEntry := &kbuf[0] - watchEntry.Fflags = flags - syscall.SetKevent(watchEntry, watchfd, syscall.EVFILT_VNODE, syscall.EV_ADD|syscall.EV_CLEAR) - entryFlags := watchEntry.Flags - success, errno := syscall.Kevent(w.kq, kbuf[:], nil, nil) - if success == -1 { - return errno - } else if (entryFlags & syscall.EV_ERROR) == syscall.EV_ERROR { - return errors.New("kevent add error") - } - - if watchDir { - errdir := w.watchDirectoryFiles(path) - if errdir != nil { - return errdir - } - } - return nil -} - -// Watch adds path to the watched file set, watching all events. -func (w *Watcher) watch(path string) error { - w.ewmut.Lock() - w.externalWatches[path] = true - w.ewmut.Unlock() - return w.addWatch(path, sys_NOTE_ALLEVENTS) -} - -// RemoveWatch removes path from the watched file set. -func (w *Watcher) removeWatch(path string) error { - w.wmut.Lock() - watchfd, ok := w.watches[path] - w.wmut.Unlock() - if !ok { - return errors.New(fmt.Sprintf("can't remove non-existent kevent watch for: %s", path)) - } - var kbuf [1]syscall.Kevent_t - watchEntry := &kbuf[0] - syscall.SetKevent(watchEntry, watchfd, syscall.EVFILT_VNODE, syscall.EV_DELETE) - entryFlags := watchEntry.Flags - success, errno := syscall.Kevent(w.kq, kbuf[:], nil, nil) - if success == -1 { - return os.NewSyscallError("kevent_rm_watch", errno) - } else if (entryFlags & syscall.EV_ERROR) == syscall.EV_ERROR { - return errors.New("kevent rm error") - } - syscall.Close(watchfd) - w.wmut.Lock() - delete(w.watches, path) - w.wmut.Unlock() - w.enmut.Lock() - delete(w.enFlags, path) - w.enmut.Unlock() - w.pmut.Lock() - delete(w.paths, watchfd) - fInfo := w.finfo[watchfd] - delete(w.finfo, watchfd) - w.pmut.Unlock() - - // Find all watched paths that are in this directory that are not external. - if fInfo.IsDir() { - var pathsToRemove []string - w.pmut.Lock() - for _, wpath := range w.paths { - wdir, _ := filepath.Split(wpath) - if filepath.Clean(wdir) == filepath.Clean(path) { - w.ewmut.Lock() - if !w.externalWatches[wpath] { - pathsToRemove = append(pathsToRemove, wpath) - } - w.ewmut.Unlock() - } - } - w.pmut.Unlock() - for _, p := range pathsToRemove { - // Since these are internal, not much sense in propagating error - // to the user, as that will just confuse them with an error about - // a path they did not explicitly watch themselves. - w.removeWatch(p) - } - } - - return nil -} - -// readEvents reads from the kqueue file descriptor, converts the -// received events into Event objects and sends them via the Event channel -func (w *Watcher) readEvents() { - var ( - eventbuf [10]syscall.Kevent_t // Event buffer - events []syscall.Kevent_t // Received events - twait *syscall.Timespec // Time to block waiting for events - n int // Number of events returned from kevent - errno error // Syscall errno - ) - events = eventbuf[0:0] - twait = new(syscall.Timespec) - *twait = syscall.NsecToTimespec(keventWaitTime) - - for { - // See if there is a message on the "done" channel - var done bool - select { - case done = <-w.done: - default: - } - - // If "done" message is received - if done { - errno := syscall.Close(w.kq) - if errno != nil { - w.Error <- os.NewSyscallError("close", errno) - } - close(w.internalEvent) - close(w.Error) - return - } - - // Get new events - if len(events) == 0 { - n, errno = syscall.Kevent(w.kq, nil, eventbuf[:], twait) - - // EINTR is okay, basically the syscall was interrupted before - // timeout expired. - if errno != nil && errno != syscall.EINTR { - w.Error <- os.NewSyscallError("kevent", errno) - continue - } - - // Received some events - if n > 0 { - events = eventbuf[0:n] - } - } - - // Flush the events we received to the events channel - for len(events) > 0 { - fileEvent := new(FileEvent) - watchEvent := &events[0] - fileEvent.mask = uint32(watchEvent.Fflags) - w.pmut.Lock() - fileEvent.Name = w.paths[int(watchEvent.Ident)] - fileInfo := w.finfo[int(watchEvent.Ident)] - w.pmut.Unlock() - if fileInfo != nil && fileInfo.IsDir() && !fileEvent.IsDelete() { - // Double check to make sure the directory exist. This can happen when - // we do a rm -fr on a recursively watched folders and we receive a - // modification event first but the folder has been deleted and later - // receive the delete event - if _, err := os.Lstat(fileEvent.Name); os.IsNotExist(err) { - // mark is as delete event - fileEvent.mask |= sys_NOTE_DELETE - } - } - - if fileInfo != nil && fileInfo.IsDir() && fileEvent.IsModify() && !fileEvent.IsDelete() { - w.sendDirectoryChangeEvents(fileEvent.Name) - } else { - // Send the event on the events channel - w.internalEvent <- fileEvent - } - - // Move to next event - events = events[1:] - - if fileEvent.IsRename() { - w.removeWatch(fileEvent.Name) - w.femut.Lock() - delete(w.fileExists, fileEvent.Name) - w.femut.Unlock() - } - if fileEvent.IsDelete() { - w.removeWatch(fileEvent.Name) - w.femut.Lock() - delete(w.fileExists, fileEvent.Name) - w.femut.Unlock() - - // Look for a file that may have overwritten this - // (ie mv f1 f2 will delete f2 then create f2) - fileDir, _ := filepath.Split(fileEvent.Name) - fileDir = filepath.Clean(fileDir) - w.wmut.Lock() - _, found := w.watches[fileDir] - w.wmut.Unlock() - if found { - // make sure the directory exist before we watch for changes. When we - // do a recursive watch and perform rm -fr, the parent directory might - // have gone missing, ignore the missing directory and let the - // upcoming delete event remove the watch form the parent folder - if _, err := os.Lstat(fileDir); !os.IsNotExist(err) { - w.sendDirectoryChangeEvents(fileDir) - } - } - } - } - } -} - -func (w *Watcher) watchDirectoryFiles(dirPath string) error { - // Get all files - files, err := ioutil.ReadDir(dirPath) - if err != nil { - return err - } - - // Search for new files - for _, fileInfo := range files { - filePath := filepath.Join(dirPath, fileInfo.Name()) - - // Inherit fsnFlags from parent directory - w.fsnmut.Lock() - if flags, found := w.fsnFlags[dirPath]; found { - w.fsnFlags[filePath] = flags - } else { - w.fsnFlags[filePath] = FSN_ALL - } - w.fsnmut.Unlock() - - if fileInfo.IsDir() == false { - // Watch file to mimic linux fsnotify - e := w.addWatch(filePath, sys_NOTE_ALLEVENTS) - if e != nil { - return e - } - } else { - // If the user is currently watching directory - // we want to preserve the flags used - w.enmut.Lock() - currFlags, found := w.enFlags[filePath] - w.enmut.Unlock() - var newFlags uint32 = sys_NOTE_DELETE - if found { - newFlags |= currFlags - } - - // Linux gives deletes if not explicitly watching - e := w.addWatch(filePath, newFlags) - if e != nil { - return e - } - } - w.femut.Lock() - w.fileExists[filePath] = true - w.femut.Unlock() - } - - return nil -} - -// sendDirectoryEvents searches the directory for newly created files -// and sends them over the event channel. This functionality is to have -// the BSD version of fsnotify match linux fsnotify which provides a -// create event for files created in a watched directory. -func (w *Watcher) sendDirectoryChangeEvents(dirPath string) { - // Get all files - files, err := ioutil.ReadDir(dirPath) - if err != nil { - w.Error <- err - } - - // Search for new files - for _, fileInfo := range files { - filePath := filepath.Join(dirPath, fileInfo.Name()) - w.femut.Lock() - _, doesExist := w.fileExists[filePath] - w.femut.Unlock() - if !doesExist { - // Inherit fsnFlags from parent directory - w.fsnmut.Lock() - if flags, found := w.fsnFlags[dirPath]; found { - w.fsnFlags[filePath] = flags - } else { - w.fsnFlags[filePath] = FSN_ALL - } - w.fsnmut.Unlock() - - // Send create event - fileEvent := new(FileEvent) - fileEvent.Name = filePath - fileEvent.create = true - w.internalEvent <- fileEvent - } - w.femut.Lock() - w.fileExists[filePath] = true - w.femut.Unlock() - } - w.watchDirectoryFiles(dirPath) -} diff --git a/Godeps/_workspace/src/github.com/howeyc/fsnotify/fsnotify_linux.go b/Godeps/_workspace/src/github.com/howeyc/fsnotify/fsnotify_linux.go deleted file mode 100644 index 80ade879fd..0000000000 --- a/Godeps/_workspace/src/github.com/howeyc/fsnotify/fsnotify_linux.go +++ /dev/null @@ -1,304 +0,0 @@ -// Copyright 2010 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build linux - -package fsnotify - -import ( - "errors" - "fmt" - "os" - "strings" - "sync" - "syscall" - "unsafe" -) - -const ( - // Options for inotify_init() are not exported - // sys_IN_CLOEXEC uint32 = syscall.IN_CLOEXEC - // sys_IN_NONBLOCK uint32 = syscall.IN_NONBLOCK - - // Options for AddWatch - sys_IN_DONT_FOLLOW uint32 = syscall.IN_DONT_FOLLOW - sys_IN_ONESHOT uint32 = syscall.IN_ONESHOT - sys_IN_ONLYDIR uint32 = syscall.IN_ONLYDIR - - // The "sys_IN_MASK_ADD" option is not exported, as AddWatch - // adds it automatically, if there is already a watch for the given path - // sys_IN_MASK_ADD uint32 = syscall.IN_MASK_ADD - - // Events - sys_IN_ACCESS uint32 = syscall.IN_ACCESS - sys_IN_ALL_EVENTS uint32 = syscall.IN_ALL_EVENTS - sys_IN_ATTRIB uint32 = syscall.IN_ATTRIB - sys_IN_CLOSE uint32 = syscall.IN_CLOSE - sys_IN_CLOSE_NOWRITE uint32 = syscall.IN_CLOSE_NOWRITE - sys_IN_CLOSE_WRITE uint32 = syscall.IN_CLOSE_WRITE - sys_IN_CREATE uint32 = syscall.IN_CREATE - sys_IN_DELETE uint32 = syscall.IN_DELETE - sys_IN_DELETE_SELF uint32 = syscall.IN_DELETE_SELF - sys_IN_MODIFY uint32 = syscall.IN_MODIFY - sys_IN_MOVE uint32 = syscall.IN_MOVE - sys_IN_MOVED_FROM uint32 = syscall.IN_MOVED_FROM - sys_IN_MOVED_TO uint32 = syscall.IN_MOVED_TO - sys_IN_MOVE_SELF uint32 = syscall.IN_MOVE_SELF - sys_IN_OPEN uint32 = syscall.IN_OPEN - - sys_AGNOSTIC_EVENTS = sys_IN_MOVED_TO | sys_IN_MOVED_FROM | sys_IN_CREATE | sys_IN_ATTRIB | sys_IN_MODIFY | sys_IN_MOVE_SELF | sys_IN_DELETE | sys_IN_DELETE_SELF - - // Special events - sys_IN_ISDIR uint32 = syscall.IN_ISDIR - sys_IN_IGNORED uint32 = syscall.IN_IGNORED - sys_IN_Q_OVERFLOW uint32 = syscall.IN_Q_OVERFLOW - sys_IN_UNMOUNT uint32 = syscall.IN_UNMOUNT -) - -type FileEvent struct { - mask uint32 // Mask of events - cookie uint32 // Unique cookie associating related events (for rename(2)) - Name string // File name (optional) -} - -// IsCreate reports whether the FileEvent was triggered by a creation -func (e *FileEvent) IsCreate() bool { - return (e.mask&sys_IN_CREATE) == sys_IN_CREATE || (e.mask&sys_IN_MOVED_TO) == sys_IN_MOVED_TO -} - -// IsDelete reports whether the FileEvent was triggered by a delete -func (e *FileEvent) IsDelete() bool { - return (e.mask&sys_IN_DELETE_SELF) == sys_IN_DELETE_SELF || (e.mask&sys_IN_DELETE) == sys_IN_DELETE -} - -// IsModify reports whether the FileEvent was triggered by a file modification or attribute change -func (e *FileEvent) IsModify() bool { - return ((e.mask&sys_IN_MODIFY) == sys_IN_MODIFY || (e.mask&sys_IN_ATTRIB) == sys_IN_ATTRIB) -} - -// IsRename reports whether the FileEvent was triggered by a change name -func (e *FileEvent) IsRename() bool { - return ((e.mask&sys_IN_MOVE_SELF) == sys_IN_MOVE_SELF || (e.mask&sys_IN_MOVED_FROM) == sys_IN_MOVED_FROM) -} - -// IsAttrib reports whether the FileEvent was triggered by a change in the file metadata. -func (e *FileEvent) IsAttrib() bool { - return (e.mask & sys_IN_ATTRIB) == sys_IN_ATTRIB -} - -type watch struct { - wd uint32 // Watch descriptor (as returned by the inotify_add_watch() syscall) - flags uint32 // inotify flags of this watch (see inotify(7) for the list of valid flags) -} - -type Watcher struct { - mu sync.Mutex // Map access - fd int // File descriptor (as returned by the inotify_init() syscall) - watches map[string]*watch // Map of inotify watches (key: path) - fsnFlags map[string]uint32 // Map of watched files to flags used for filter - fsnmut sync.Mutex // Protects access to fsnFlags. - paths map[int]string // Map of watched paths (key: watch descriptor) - Error chan error // Errors are sent on this channel - internalEvent chan *FileEvent // Events are queued on this channel - Event chan *FileEvent // Events are returned on this channel - done chan bool // Channel for sending a "quit message" to the reader goroutine - isClosed bool // Set to true when Close() is first called -} - -// NewWatcher creates and returns a new inotify instance using inotify_init(2) -func NewWatcher() (*Watcher, error) { - fd, errno := syscall.InotifyInit() - if fd == -1 { - return nil, os.NewSyscallError("inotify_init", errno) - } - w := &Watcher{ - fd: fd, - watches: make(map[string]*watch), - fsnFlags: make(map[string]uint32), - paths: make(map[int]string), - internalEvent: make(chan *FileEvent), - Event: make(chan *FileEvent), - Error: make(chan error), - done: make(chan bool, 1), - } - - go w.readEvents() - go w.purgeEvents() - return w, nil -} - -// Close closes an inotify watcher instance -// It sends a message to the reader goroutine to quit and removes all watches -// associated with the inotify instance -func (w *Watcher) Close() error { - if w.isClosed { - return nil - } - w.isClosed = true - - // Remove all watches - for path := range w.watches { - w.RemoveWatch(path) - } - - // Send "quit" message to the reader goroutine - w.done <- true - - return nil -} - -// AddWatch adds path to the watched file set. -// The flags are interpreted as described in inotify_add_watch(2). -func (w *Watcher) addWatch(path string, flags uint32) error { - if w.isClosed { - return errors.New("inotify instance already closed") - } - - w.mu.Lock() - watchEntry, found := w.watches[path] - w.mu.Unlock() - if found { - watchEntry.flags |= flags - flags |= syscall.IN_MASK_ADD - } - wd, errno := syscall.InotifyAddWatch(w.fd, path, flags) - if wd == -1 { - return errno - } - - w.mu.Lock() - w.watches[path] = &watch{wd: uint32(wd), flags: flags} - w.paths[wd] = path - w.mu.Unlock() - - return nil -} - -// Watch adds path to the watched file set, watching all events. -func (w *Watcher) watch(path string) error { - return w.addWatch(path, sys_AGNOSTIC_EVENTS) -} - -// RemoveWatch removes path from the watched file set. -func (w *Watcher) removeWatch(path string) error { - w.mu.Lock() - defer w.mu.Unlock() - watch, ok := w.watches[path] - if !ok { - return errors.New(fmt.Sprintf("can't remove non-existent inotify watch for: %s", path)) - } - success, errno := syscall.InotifyRmWatch(w.fd, watch.wd) - if success == -1 { - return os.NewSyscallError("inotify_rm_watch", errno) - } - delete(w.watches, path) - return nil -} - -// readEvents reads from the inotify file descriptor, converts the -// received events into Event objects and sends them via the Event channel -func (w *Watcher) readEvents() { - var ( - buf [syscall.SizeofInotifyEvent * 4096]byte // Buffer for a maximum of 4096 raw events - n int // Number of bytes read with read() - errno error // Syscall errno - ) - - for { - // See if there is a message on the "done" channel - select { - case <-w.done: - syscall.Close(w.fd) - close(w.internalEvent) - close(w.Error) - return - default: - } - - n, errno = syscall.Read(w.fd, buf[:]) - - // If EOF is received - if n == 0 { - syscall.Close(w.fd) - close(w.internalEvent) - close(w.Error) - return - } - - if n < 0 { - w.Error <- os.NewSyscallError("read", errno) - continue - } - if n < syscall.SizeofInotifyEvent { - w.Error <- errors.New("inotify: short read in readEvents()") - continue - } - - var offset uint32 = 0 - // We don't know how many events we just read into the buffer - // While the offset points to at least one whole event... - for offset <= uint32(n-syscall.SizeofInotifyEvent) { - // Point "raw" to the event in the buffer - raw := (*syscall.InotifyEvent)(unsafe.Pointer(&buf[offset])) - event := new(FileEvent) - event.mask = uint32(raw.Mask) - event.cookie = uint32(raw.Cookie) - nameLen := uint32(raw.Len) - // If the event happened to the watched directory or the watched file, the kernel - // doesn't append the filename to the event, but we would like to always fill the - // the "Name" field with a valid filename. We retrieve the path of the watch from - // the "paths" map. - w.mu.Lock() - event.Name = w.paths[int(raw.Wd)] - w.mu.Unlock() - watchedName := event.Name - if nameLen > 0 { - // Point "bytes" at the first byte of the filename - bytes := (*[syscall.PathMax]byte)(unsafe.Pointer(&buf[offset+syscall.SizeofInotifyEvent])) - // The filename is padded with NUL bytes. TrimRight() gets rid of those. - event.Name += "/" + strings.TrimRight(string(bytes[0:nameLen]), "\000") - } - - // Send the events that are not ignored on the events channel - if !event.ignoreLinux() { - // Setup FSNotify flags (inherit from directory watch) - w.fsnmut.Lock() - if _, fsnFound := w.fsnFlags[event.Name]; !fsnFound { - if fsnFlags, watchFound := w.fsnFlags[watchedName]; watchFound { - w.fsnFlags[event.Name] = fsnFlags - } else { - w.fsnFlags[event.Name] = FSN_ALL - } - } - w.fsnmut.Unlock() - - w.internalEvent <- event - } - - // Move to the next event in the buffer - offset += syscall.SizeofInotifyEvent + nameLen - } - } -} - -// Certain types of events can be "ignored" and not sent over the Event -// channel. Such as events marked ignore by the kernel, or MODIFY events -// against files that do not exist. -func (e *FileEvent) ignoreLinux() bool { - // Ignore anything the inotify API says to ignore - if e.mask&sys_IN_IGNORED == sys_IN_IGNORED { - return true - } - - // If the event is not a DELETE or RENAME, the file must exist. - // Otherwise the event is ignored. - // *Note*: this was put in place because it was seen that a MODIFY - // event was sent after the DELETE. This ignores that MODIFY and - // assumes a DELETE will come or has come if the file doesn't exist. - if !(e.IsDelete() || e.IsRename()) { - _, statErr := os.Lstat(e.Name) - return os.IsNotExist(statErr) - } - return false -} diff --git a/Godeps/_workspace/src/github.com/howeyc/fsnotify/fsnotify_open_bsd.go b/Godeps/_workspace/src/github.com/howeyc/fsnotify/fsnotify_open_bsd.go deleted file mode 100644 index 37ea998d09..0000000000 --- a/Godeps/_workspace/src/github.com/howeyc/fsnotify/fsnotify_open_bsd.go +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build freebsd openbsd netbsd - -package fsnotify - -import "syscall" - -const open_FLAGS = syscall.O_NONBLOCK | syscall.O_RDONLY diff --git a/Godeps/_workspace/src/github.com/howeyc/fsnotify/fsnotify_open_darwin.go b/Godeps/_workspace/src/github.com/howeyc/fsnotify/fsnotify_open_darwin.go deleted file mode 100644 index d450318e60..0000000000 --- a/Godeps/_workspace/src/github.com/howeyc/fsnotify/fsnotify_open_darwin.go +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build darwin - -package fsnotify - -import "syscall" - -const open_FLAGS = syscall.O_EVTONLY diff --git a/Godeps/_workspace/src/github.com/howeyc/fsnotify/fsnotify_symlink_test.go b/Godeps/_workspace/src/github.com/howeyc/fsnotify/fsnotify_symlink_test.go deleted file mode 100644 index 39061f8442..0000000000 --- a/Godeps/_workspace/src/github.com/howeyc/fsnotify/fsnotify_symlink_test.go +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright 2010 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build freebsd openbsd netbsd darwin linux - -package fsnotify - -import ( - "os" - "path/filepath" - "testing" - "time" -) - -func TestFsnotifyFakeSymlink(t *testing.T) { - watcher := newWatcher(t) - - // Create directory to watch - testDir := tempMkdir(t) - defer os.RemoveAll(testDir) - - var errorsReceived counter - // Receive errors on the error channel on a separate goroutine - go func() { - for errors := range watcher.Error { - t.Logf("Received error: %s", errors) - errorsReceived.increment() - } - }() - - // Count the CREATE events received - var createEventsReceived, otherEventsReceived counter - go func() { - for ev := range watcher.Event { - t.Logf("event received: %s", ev) - if ev.IsCreate() { - createEventsReceived.increment() - } else { - otherEventsReceived.increment() - } - } - }() - - addWatch(t, watcher, testDir) - - if err := os.Symlink(filepath.Join(testDir, "zzz"), filepath.Join(testDir, "zzznew")); err != nil { - t.Fatalf("Failed to create bogus symlink: %s", err) - } - t.Logf("Created bogus symlink") - - // We expect this event to be received almost immediately, but let's wait 500 ms to be sure - time.Sleep(500 * time.Millisecond) - - // Should not be error, just no events for broken links (watching nothing) - if errorsReceived.value() > 0 { - t.Fatal("fsnotify errors have been received.") - } - if otherEventsReceived.value() > 0 { - t.Fatal("fsnotify other events received on the broken link") - } - - // Except for 1 create event (for the link itself) - if createEventsReceived.value() == 0 { - t.Fatal("fsnotify create events were not received after 500 ms") - } - if createEventsReceived.value() > 1 { - t.Fatal("fsnotify more create events received than expected") - } - - // Try closing the fsnotify instance - t.Log("calling Close()") - watcher.Close() -} diff --git a/Godeps/_workspace/src/github.com/howeyc/fsnotify/fsnotify_test.go b/Godeps/_workspace/src/github.com/howeyc/fsnotify/fsnotify_test.go deleted file mode 100644 index 3f5a6487ff..0000000000 --- a/Godeps/_workspace/src/github.com/howeyc/fsnotify/fsnotify_test.go +++ /dev/null @@ -1,1010 +0,0 @@ -// Copyright 2010 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package fsnotify - -import ( - "io/ioutil" - "os" - "os/exec" - "path/filepath" - "runtime" - "sync/atomic" - "testing" - "time" -) - -// An atomic counter -type counter struct { - val int32 -} - -func (c *counter) increment() { - atomic.AddInt32(&c.val, 1) -} - -func (c *counter) value() int32 { - return atomic.LoadInt32(&c.val) -} - -func (c *counter) reset() { - atomic.StoreInt32(&c.val, 0) -} - -// tempMkdir makes a temporary directory -func tempMkdir(t *testing.T) string { - dir, err := ioutil.TempDir("", "fsnotify") - if err != nil { - t.Fatalf("failed to create test directory: %s", err) - } - return dir -} - -// newWatcher initializes an fsnotify Watcher instance. -func newWatcher(t *testing.T) *Watcher { - watcher, err := NewWatcher() - if err != nil { - t.Fatalf("NewWatcher() failed: %s", err) - } - return watcher -} - -// addWatch adds a watch for a directory -func addWatch(t *testing.T, watcher *Watcher, dir string) { - if err := watcher.Watch(dir); err != nil { - t.Fatalf("watcher.Watch(%q) failed: %s", dir, err) - } -} - -func TestFsnotifyMultipleOperations(t *testing.T) { - watcher := newWatcher(t) - - // Receive errors on the error channel on a separate goroutine - go func() { - for err := range watcher.Error { - t.Fatalf("error received: %s", err) - } - }() - - // Create directory to watch - testDir := tempMkdir(t) - defer os.RemoveAll(testDir) - - // Create directory that's not watched - testDirToMoveFiles := tempMkdir(t) - defer os.RemoveAll(testDirToMoveFiles) - - testFile := filepath.Join(testDir, "TestFsnotifySeq.testfile") - testFileRenamed := filepath.Join(testDirToMoveFiles, "TestFsnotifySeqRename.testfile") - - addWatch(t, watcher, testDir) - - // Receive events on the event channel on a separate goroutine - eventstream := watcher.Event - var createReceived, modifyReceived, deleteReceived, renameReceived counter - done := make(chan bool) - go func() { - for event := range eventstream { - // Only count relevant events - if event.Name == filepath.Clean(testDir) || event.Name == filepath.Clean(testFile) { - t.Logf("event received: %s", event) - if event.IsDelete() { - deleteReceived.increment() - } - if event.IsModify() { - modifyReceived.increment() - } - if event.IsCreate() { - createReceived.increment() - } - if event.IsRename() { - renameReceived.increment() - } - } else { - t.Logf("unexpected event received: %s", event) - } - } - done <- true - }() - - // Create a file - // This should add at least one event to the fsnotify event queue - var f *os.File - f, err := os.OpenFile(testFile, os.O_WRONLY|os.O_CREATE, 0666) - if err != nil { - t.Fatalf("creating test file failed: %s", err) - } - f.Sync() - - time.Sleep(time.Millisecond) - f.WriteString("data") - f.Sync() - f.Close() - - time.Sleep(50 * time.Millisecond) // give system time to sync write change before delete - - if err := testRename(testFile, testFileRenamed); err != nil { - t.Fatalf("rename failed: %s", err) - } - - // Modify the file outside of the watched dir - f, err = os.Open(testFileRenamed) - if err != nil { - t.Fatalf("open test renamed file failed: %s", err) - } - f.WriteString("data") - f.Sync() - f.Close() - - time.Sleep(50 * time.Millisecond) // give system time to sync write change before delete - - // Recreate the file that was moved - f, err = os.OpenFile(testFile, os.O_WRONLY|os.O_CREATE, 0666) - if err != nil { - t.Fatalf("creating test file failed: %s", err) - } - f.Close() - time.Sleep(50 * time.Millisecond) // give system time to sync write change before delete - - // We expect this event to be received almost immediately, but let's wait 500 ms to be sure - time.Sleep(500 * time.Millisecond) - cReceived := createReceived.value() - if cReceived != 2 { - t.Fatalf("incorrect number of create events received after 500 ms (%d vs %d)", cReceived, 2) - } - mReceived := modifyReceived.value() - if mReceived != 1 { - t.Fatalf("incorrect number of modify events received after 500 ms (%d vs %d)", mReceived, 1) - } - dReceived := deleteReceived.value() - rReceived := renameReceived.value() - if dReceived+rReceived != 1 { - t.Fatalf("incorrect number of rename+delete events received after 500 ms (%d vs %d)", rReceived+dReceived, 1) - } - - // Try closing the fsnotify instance - t.Log("calling Close()") - watcher.Close() - t.Log("waiting for the event channel to become closed...") - select { - case <-done: - t.Log("event channel closed") - case <-time.After(2 * time.Second): - t.Fatal("event stream was not closed after 2 seconds") - } -} - -func TestFsnotifyMultipleCreates(t *testing.T) { - watcher := newWatcher(t) - - // Receive errors on the error channel on a separate goroutine - go func() { - for err := range watcher.Error { - t.Fatalf("error received: %s", err) - } - }() - - // Create directory to watch - testDir := tempMkdir(t) - defer os.RemoveAll(testDir) - - testFile := filepath.Join(testDir, "TestFsnotifySeq.testfile") - - addWatch(t, watcher, testDir) - - // Receive events on the event channel on a separate goroutine - eventstream := watcher.Event - var createReceived, modifyReceived, deleteReceived counter - done := make(chan bool) - go func() { - for event := range eventstream { - // Only count relevant events - if event.Name == filepath.Clean(testDir) || event.Name == filepath.Clean(testFile) { - t.Logf("event received: %s", event) - if event.IsDelete() { - deleteReceived.increment() - } - if event.IsCreate() { - createReceived.increment() - } - if event.IsModify() { - modifyReceived.increment() - } - } else { - t.Logf("unexpected event received: %s", event) - } - } - done <- true - }() - - // Create a file - // This should add at least one event to the fsnotify event queue - var f *os.File - f, err := os.OpenFile(testFile, os.O_WRONLY|os.O_CREATE, 0666) - if err != nil { - t.Fatalf("creating test file failed: %s", err) - } - f.Sync() - - time.Sleep(time.Millisecond) - f.WriteString("data") - f.Sync() - f.Close() - - time.Sleep(50 * time.Millisecond) // give system time to sync write change before delete - - os.Remove(testFile) - - time.Sleep(50 * time.Millisecond) // give system time to sync write change before delete - - // Recreate the file - f, err = os.OpenFile(testFile, os.O_WRONLY|os.O_CREATE, 0666) - if err != nil { - t.Fatalf("creating test file failed: %s", err) - } - f.Close() - time.Sleep(50 * time.Millisecond) // give system time to sync write change before delete - - // Modify - f, err = os.OpenFile(testFile, os.O_WRONLY, 0666) - if err != nil { - t.Fatalf("creating test file failed: %s", err) - } - f.Sync() - - time.Sleep(time.Millisecond) - f.WriteString("data") - f.Sync() - f.Close() - - time.Sleep(50 * time.Millisecond) // give system time to sync write change before delete - - // Modify - f, err = os.OpenFile(testFile, os.O_WRONLY, 0666) - if err != nil { - t.Fatalf("creating test file failed: %s", err) - } - f.Sync() - - time.Sleep(time.Millisecond) - f.WriteString("data") - f.Sync() - f.Close() - - time.Sleep(50 * time.Millisecond) // give system time to sync write change before delete - - // We expect this event to be received almost immediately, but let's wait 500 ms to be sure - time.Sleep(500 * time.Millisecond) - cReceived := createReceived.value() - if cReceived != 2 { - t.Fatalf("incorrect number of create events received after 500 ms (%d vs %d)", cReceived, 2) - } - mReceived := modifyReceived.value() - if mReceived < 3 { - t.Fatalf("incorrect number of modify events received after 500 ms (%d vs atleast %d)", mReceived, 3) - } - dReceived := deleteReceived.value() - if dReceived != 1 { - t.Fatalf("incorrect number of rename+delete events received after 500 ms (%d vs %d)", dReceived, 1) - } - - // Try closing the fsnotify instance - t.Log("calling Close()") - watcher.Close() - t.Log("waiting for the event channel to become closed...") - select { - case <-done: - t.Log("event channel closed") - case <-time.After(2 * time.Second): - t.Fatal("event stream was not closed after 2 seconds") - } -} - -func TestFsnotifyDirOnly(t *testing.T) { - watcher := newWatcher(t) - - // Create directory to watch - testDir := tempMkdir(t) - defer os.RemoveAll(testDir) - - // Create a file before watching directory - // This should NOT add any events to the fsnotify event queue - testFileAlreadyExists := filepath.Join(testDir, "TestFsnotifyEventsExisting.testfile") - { - var f *os.File - f, err := os.OpenFile(testFileAlreadyExists, os.O_WRONLY|os.O_CREATE, 0666) - if err != nil { - t.Fatalf("creating test file failed: %s", err) - } - f.Sync() - f.Close() - } - - addWatch(t, watcher, testDir) - - // Receive errors on the error channel on a separate goroutine - go func() { - for err := range watcher.Error { - t.Fatalf("error received: %s", err) - } - }() - - testFile := filepath.Join(testDir, "TestFsnotifyDirOnly.testfile") - - // Receive events on the event channel on a separate goroutine - eventstream := watcher.Event - var createReceived, modifyReceived, deleteReceived counter - done := make(chan bool) - go func() { - for event := range eventstream { - // Only count relevant events - if event.Name == filepath.Clean(testDir) || event.Name == filepath.Clean(testFile) || event.Name == filepath.Clean(testFileAlreadyExists) { - t.Logf("event received: %s", event) - if event.IsDelete() { - deleteReceived.increment() - } - if event.IsModify() { - modifyReceived.increment() - } - if event.IsCreate() { - createReceived.increment() - } - } else { - t.Logf("unexpected event received: %s", event) - } - } - done <- true - }() - - // Create a file - // This should add at least one event to the fsnotify event queue - var f *os.File - f, err := os.OpenFile(testFile, os.O_WRONLY|os.O_CREATE, 0666) - if err != nil { - t.Fatalf("creating test file failed: %s", err) - } - f.Sync() - - time.Sleep(time.Millisecond) - f.WriteString("data") - f.Sync() - f.Close() - - time.Sleep(50 * time.Millisecond) // give system time to sync write change before delete - - os.Remove(testFile) - os.Remove(testFileAlreadyExists) - - // We expect this event to be received almost immediately, but let's wait 500 ms to be sure - time.Sleep(500 * time.Millisecond) - cReceived := createReceived.value() - if cReceived != 1 { - t.Fatalf("incorrect number of create events received after 500 ms (%d vs %d)", cReceived, 1) - } - mReceived := modifyReceived.value() - if mReceived != 1 { - t.Fatalf("incorrect number of modify events received after 500 ms (%d vs %d)", mReceived, 1) - } - dReceived := deleteReceived.value() - if dReceived != 2 { - t.Fatalf("incorrect number of delete events received after 500 ms (%d vs %d)", dReceived, 2) - } - - // Try closing the fsnotify instance - t.Log("calling Close()") - watcher.Close() - t.Log("waiting for the event channel to become closed...") - select { - case <-done: - t.Log("event channel closed") - case <-time.After(2 * time.Second): - t.Fatal("event stream was not closed after 2 seconds") - } -} - -func TestFsnotifyDeleteWatchedDir(t *testing.T) { - watcher := newWatcher(t) - defer watcher.Close() - - // Create directory to watch - testDir := tempMkdir(t) - defer os.RemoveAll(testDir) - - // Create a file before watching directory - testFileAlreadyExists := filepath.Join(testDir, "TestFsnotifyEventsExisting.testfile") - { - var f *os.File - f, err := os.OpenFile(testFileAlreadyExists, os.O_WRONLY|os.O_CREATE, 0666) - if err != nil { - t.Fatalf("creating test file failed: %s", err) - } - f.Sync() - f.Close() - } - - addWatch(t, watcher, testDir) - - // Add a watch for testFile - addWatch(t, watcher, testFileAlreadyExists) - - // Receive errors on the error channel on a separate goroutine - go func() { - for err := range watcher.Error { - t.Fatalf("error received: %s", err) - } - }() - - // Receive events on the event channel on a separate goroutine - eventstream := watcher.Event - var deleteReceived counter - go func() { - for event := range eventstream { - // Only count relevant events - if event.Name == filepath.Clean(testDir) || event.Name == filepath.Clean(testFileAlreadyExists) { - t.Logf("event received: %s", event) - if event.IsDelete() { - deleteReceived.increment() - } - } else { - t.Logf("unexpected event received: %s", event) - } - } - }() - - os.RemoveAll(testDir) - - // We expect this event to be received almost immediately, but let's wait 500 ms to be sure - time.Sleep(500 * time.Millisecond) - dReceived := deleteReceived.value() - if dReceived < 2 { - t.Fatalf("did not receive at least %d delete events, received %d after 500 ms", 2, dReceived) - } -} - -func TestFsnotifySubDir(t *testing.T) { - watcher := newWatcher(t) - - // Create directory to watch - testDir := tempMkdir(t) - defer os.RemoveAll(testDir) - - testFile1 := filepath.Join(testDir, "TestFsnotifyFile1.testfile") - testSubDir := filepath.Join(testDir, "sub") - testSubDirFile := filepath.Join(testDir, "sub/TestFsnotifyFile1.testfile") - - // Receive errors on the error channel on a separate goroutine - go func() { - for err := range watcher.Error { - t.Fatalf("error received: %s", err) - } - }() - - // Receive events on the event channel on a separate goroutine - eventstream := watcher.Event - var createReceived, deleteReceived counter - done := make(chan bool) - go func() { - for event := range eventstream { - // Only count relevant events - if event.Name == filepath.Clean(testDir) || event.Name == filepath.Clean(testSubDir) || event.Name == filepath.Clean(testFile1) { - t.Logf("event received: %s", event) - if event.IsCreate() { - createReceived.increment() - } - if event.IsDelete() { - deleteReceived.increment() - } - } else { - t.Logf("unexpected event received: %s", event) - } - } - done <- true - }() - - addWatch(t, watcher, testDir) - - // Create sub-directory - if err := os.Mkdir(testSubDir, 0777); err != nil { - t.Fatalf("failed to create test sub-directory: %s", err) - } - - // Create a file - var f *os.File - f, err := os.OpenFile(testFile1, os.O_WRONLY|os.O_CREATE, 0666) - if err != nil { - t.Fatalf("creating test file failed: %s", err) - } - f.Sync() - f.Close() - - // Create a file (Should not see this! we are not watching subdir) - var fs *os.File - fs, err = os.OpenFile(testSubDirFile, os.O_WRONLY|os.O_CREATE, 0666) - if err != nil { - t.Fatalf("creating test file failed: %s", err) - } - fs.Sync() - fs.Close() - - time.Sleep(200 * time.Millisecond) - - // Make sure receive deletes for both file and sub-directory - os.RemoveAll(testSubDir) - os.Remove(testFile1) - - // We expect this event to be received almost immediately, but let's wait 500 ms to be sure - time.Sleep(500 * time.Millisecond) - cReceived := createReceived.value() - if cReceived != 2 { - t.Fatalf("incorrect number of create events received after 500 ms (%d vs %d)", cReceived, 2) - } - dReceived := deleteReceived.value() - if dReceived != 2 { - t.Fatalf("incorrect number of delete events received after 500 ms (%d vs %d)", dReceived, 2) - } - - // Try closing the fsnotify instance - t.Log("calling Close()") - watcher.Close() - t.Log("waiting for the event channel to become closed...") - select { - case <-done: - t.Log("event channel closed") - case <-time.After(2 * time.Second): - t.Fatal("event stream was not closed after 2 seconds") - } -} - -func TestFsnotifyRename(t *testing.T) { - watcher := newWatcher(t) - - // Create directory to watch - testDir := tempMkdir(t) - defer os.RemoveAll(testDir) - - addWatch(t, watcher, testDir) - - // Receive errors on the error channel on a separate goroutine - go func() { - for err := range watcher.Error { - t.Fatalf("error received: %s", err) - } - }() - - testFile := filepath.Join(testDir, "TestFsnotifyEvents.testfile") - testFileRenamed := filepath.Join(testDir, "TestFsnotifyEvents.testfileRenamed") - - // Receive events on the event channel on a separate goroutine - eventstream := watcher.Event - var renameReceived counter - done := make(chan bool) - go func() { - for event := range eventstream { - // Only count relevant events - if event.Name == filepath.Clean(testDir) || event.Name == filepath.Clean(testFile) || event.Name == filepath.Clean(testFileRenamed) { - if event.IsRename() { - renameReceived.increment() - } - t.Logf("event received: %s", event) - } else { - t.Logf("unexpected event received: %s", event) - } - } - done <- true - }() - - // Create a file - // This should add at least one event to the fsnotify event queue - var f *os.File - f, err := os.OpenFile(testFile, os.O_WRONLY|os.O_CREATE, 0666) - if err != nil { - t.Fatalf("creating test file failed: %s", err) - } - f.Sync() - - f.WriteString("data") - f.Sync() - f.Close() - - // Add a watch for testFile - addWatch(t, watcher, testFile) - - if err := testRename(testFile, testFileRenamed); err != nil { - t.Fatalf("rename failed: %s", err) - } - - // We expect this event to be received almost immediately, but let's wait 500 ms to be sure - time.Sleep(500 * time.Millisecond) - if renameReceived.value() == 0 { - t.Fatal("fsnotify rename events have not been received after 500 ms") - } - - // Try closing the fsnotify instance - t.Log("calling Close()") - watcher.Close() - t.Log("waiting for the event channel to become closed...") - select { - case <-done: - t.Log("event channel closed") - case <-time.After(2 * time.Second): - t.Fatal("event stream was not closed after 2 seconds") - } - - os.Remove(testFileRenamed) -} - -func TestFsnotifyRenameToCreate(t *testing.T) { - watcher := newWatcher(t) - - // Create directory to watch - testDir := tempMkdir(t) - defer os.RemoveAll(testDir) - - // Create directory to get file - testDirFrom := tempMkdir(t) - defer os.RemoveAll(testDirFrom) - - addWatch(t, watcher, testDir) - - // Receive errors on the error channel on a separate goroutine - go func() { - for err := range watcher.Error { - t.Fatalf("error received: %s", err) - } - }() - - testFile := filepath.Join(testDirFrom, "TestFsnotifyEvents.testfile") - testFileRenamed := filepath.Join(testDir, "TestFsnotifyEvents.testfileRenamed") - - // Receive events on the event channel on a separate goroutine - eventstream := watcher.Event - var createReceived counter - done := make(chan bool) - go func() { - for event := range eventstream { - // Only count relevant events - if event.Name == filepath.Clean(testDir) || event.Name == filepath.Clean(testFile) || event.Name == filepath.Clean(testFileRenamed) { - if event.IsCreate() { - createReceived.increment() - } - t.Logf("event received: %s", event) - } else { - t.Logf("unexpected event received: %s", event) - } - } - done <- true - }() - - // Create a file - // This should add at least one event to the fsnotify event queue - var f *os.File - f, err := os.OpenFile(testFile, os.O_WRONLY|os.O_CREATE, 0666) - if err != nil { - t.Fatalf("creating test file failed: %s", err) - } - f.Sync() - f.Close() - - if err := testRename(testFile, testFileRenamed); err != nil { - t.Fatalf("rename failed: %s", err) - } - - // We expect this event to be received almost immediately, but let's wait 500 ms to be sure - time.Sleep(500 * time.Millisecond) - if createReceived.value() == 0 { - t.Fatal("fsnotify create events have not been received after 500 ms") - } - - // Try closing the fsnotify instance - t.Log("calling Close()") - watcher.Close() - t.Log("waiting for the event channel to become closed...") - select { - case <-done: - t.Log("event channel closed") - case <-time.After(2 * time.Second): - t.Fatal("event stream was not closed after 2 seconds") - } - - os.Remove(testFileRenamed) -} - -func TestFsnotifyRenameToOverwrite(t *testing.T) { - switch runtime.GOOS { - case "plan9", "windows": - t.Skipf("skipping test on %q (os.Rename over existing file does not create event).", runtime.GOOS) - } - - watcher := newWatcher(t) - - // Create directory to watch - testDir := tempMkdir(t) - defer os.RemoveAll(testDir) - - // Create directory to get file - testDirFrom := tempMkdir(t) - defer os.RemoveAll(testDirFrom) - - testFile := filepath.Join(testDirFrom, "TestFsnotifyEvents.testfile") - testFileRenamed := filepath.Join(testDir, "TestFsnotifyEvents.testfileRenamed") - - // Create a file - var fr *os.File - fr, err := os.OpenFile(testFileRenamed, os.O_WRONLY|os.O_CREATE, 0666) - if err != nil { - t.Fatalf("creating test file failed: %s", err) - } - fr.Sync() - fr.Close() - - addWatch(t, watcher, testDir) - - // Receive errors on the error channel on a separate goroutine - go func() { - for err := range watcher.Error { - t.Fatalf("error received: %s", err) - } - }() - - // Receive events on the event channel on a separate goroutine - eventstream := watcher.Event - var eventReceived counter - done := make(chan bool) - go func() { - for event := range eventstream { - // Only count relevant events - if event.Name == filepath.Clean(testFileRenamed) { - eventReceived.increment() - t.Logf("event received: %s", event) - } else { - t.Logf("unexpected event received: %s", event) - } - } - done <- true - }() - - // Create a file - // This should add at least one event to the fsnotify event queue - var f *os.File - f, err = os.OpenFile(testFile, os.O_WRONLY|os.O_CREATE, 0666) - if err != nil { - t.Fatalf("creating test file failed: %s", err) - } - f.Sync() - f.Close() - - if err := testRename(testFile, testFileRenamed); err != nil { - t.Fatalf("rename failed: %s", err) - } - - // We expect this event to be received almost immediately, but let's wait 500 ms to be sure - time.Sleep(500 * time.Millisecond) - if eventReceived.value() == 0 { - t.Fatal("fsnotify events have not been received after 500 ms") - } - - // Try closing the fsnotify instance - t.Log("calling Close()") - watcher.Close() - t.Log("waiting for the event channel to become closed...") - select { - case <-done: - t.Log("event channel closed") - case <-time.After(2 * time.Second): - t.Fatal("event stream was not closed after 2 seconds") - } - - os.Remove(testFileRenamed) -} - -func TestRemovalOfWatch(t *testing.T) { - // Create directory to watch - testDir := tempMkdir(t) - defer os.RemoveAll(testDir) - - // Create a file before watching directory - testFileAlreadyExists := filepath.Join(testDir, "TestFsnotifyEventsExisting.testfile") - { - var f *os.File - f, err := os.OpenFile(testFileAlreadyExists, os.O_WRONLY|os.O_CREATE, 0666) - if err != nil { - t.Fatalf("creating test file failed: %s", err) - } - f.Sync() - f.Close() - } - - watcher := newWatcher(t) - defer watcher.Close() - - addWatch(t, watcher, testDir) - if err := watcher.RemoveWatch(testDir); err != nil { - t.Fatalf("Could not remove the watch: %v\n", err) - } - - go func() { - select { - case ev := <-watcher.Event: - t.Fatalf("We received event: %v\n", ev) - case <-time.After(500 * time.Millisecond): - t.Log("No event received, as expected.") - } - }() - - time.Sleep(200 * time.Millisecond) - // Modify the file outside of the watched dir - f, err := os.Open(testFileAlreadyExists) - if err != nil { - t.Fatalf("Open test file failed: %s", err) - } - f.WriteString("data") - f.Sync() - f.Close() - if err := os.Chmod(testFileAlreadyExists, 0700); err != nil { - t.Fatalf("chmod failed: %s", err) - } - time.Sleep(400 * time.Millisecond) -} - -func TestFsnotifyAttrib(t *testing.T) { - if runtime.GOOS == "windows" { - t.Skip("attributes don't work on Windows.") - } - - watcher := newWatcher(t) - - // Create directory to watch - testDir := tempMkdir(t) - defer os.RemoveAll(testDir) - - // Receive errors on the error channel on a separate goroutine - go func() { - for err := range watcher.Error { - t.Fatalf("error received: %s", err) - } - }() - - testFile := filepath.Join(testDir, "TestFsnotifyAttrib.testfile") - - // Receive events on the event channel on a separate goroutine - eventstream := watcher.Event - // The modifyReceived counter counts IsModify events that are not IsAttrib, - // and the attribReceived counts IsAttrib events (which are also IsModify as - // a consequence). - var modifyReceived counter - var attribReceived counter - done := make(chan bool) - go func() { - for event := range eventstream { - // Only count relevant events - if event.Name == filepath.Clean(testDir) || event.Name == filepath.Clean(testFile) { - if event.IsModify() { - modifyReceived.increment() - } - if event.IsAttrib() { - attribReceived.increment() - } - t.Logf("event received: %s", event) - } else { - t.Logf("unexpected event received: %s", event) - } - } - done <- true - }() - - // Create a file - // This should add at least one event to the fsnotify event queue - var f *os.File - f, err := os.OpenFile(testFile, os.O_WRONLY|os.O_CREATE, 0666) - if err != nil { - t.Fatalf("creating test file failed: %s", err) - } - f.Sync() - - f.WriteString("data") - f.Sync() - f.Close() - - // Add a watch for testFile - addWatch(t, watcher, testFile) - - if err := os.Chmod(testFile, 0700); err != nil { - t.Fatalf("chmod failed: %s", err) - } - - // We expect this event to be received almost immediately, but let's wait 500 ms to be sure - // Creating/writing a file changes also the mtime, so IsAttrib should be set to true here - time.Sleep(500 * time.Millisecond) - if modifyReceived.value() == 0 { - t.Fatal("fsnotify modify events have not received after 500 ms") - } - if attribReceived.value() == 0 { - t.Fatal("fsnotify attribute events have not received after 500 ms") - } - - // Modifying the contents of the file does not set the attrib flag (although eg. the mtime - // might have been modified). - modifyReceived.reset() - attribReceived.reset() - - f, err = os.OpenFile(testFile, os.O_WRONLY, 0) - if err != nil { - t.Fatalf("reopening test file failed: %s", err) - } - - f.WriteString("more data") - f.Sync() - f.Close() - - time.Sleep(500 * time.Millisecond) - - if modifyReceived.value() != 1 { - t.Fatal("didn't receive a modify event after changing test file contents") - } - - if attribReceived.value() != 0 { - t.Fatal("did receive an unexpected attrib event after changing test file contents") - } - - modifyReceived.reset() - attribReceived.reset() - - // Doing a chmod on the file should trigger an event with the "attrib" flag set (the contents - // of the file are not changed though) - if err := os.Chmod(testFile, 0600); err != nil { - t.Fatalf("chmod failed: %s", err) - } - - time.Sleep(500 * time.Millisecond) - - if attribReceived.value() != 1 { - t.Fatal("didn't receive an attribute change after 500ms") - } - - // Try closing the fsnotify instance - t.Log("calling Close()") - watcher.Close() - t.Log("waiting for the event channel to become closed...") - select { - case <-done: - t.Log("event channel closed") - case <-time.After(1e9): - t.Fatal("event stream was not closed after 1 second") - } - - os.Remove(testFile) -} - -func TestFsnotifyClose(t *testing.T) { - watcher := newWatcher(t) - watcher.Close() - - var done int32 - go func() { - watcher.Close() - atomic.StoreInt32(&done, 1) - }() - - time.Sleep(50e6) // 50 ms - if atomic.LoadInt32(&done) == 0 { - t.Fatal("double Close() test failed: second Close() call didn't return") - } - - testDir := tempMkdir(t) - defer os.RemoveAll(testDir) - - if err := watcher.Watch(testDir); err == nil { - t.Fatal("expected error on Watch() after Close(), got nil") - } -} - -func testRename(file1, file2 string) error { - switch runtime.GOOS { - case "windows", "plan9": - return os.Rename(file1, file2) - default: - cmd := exec.Command("mv", file1, file2) - return cmd.Run() - } -} diff --git a/Godeps/_workspace/src/github.com/howeyc/fsnotify/fsnotify_windows.go b/Godeps/_workspace/src/github.com/howeyc/fsnotify/fsnotify_windows.go deleted file mode 100644 index d88ae63407..0000000000 --- a/Godeps/_workspace/src/github.com/howeyc/fsnotify/fsnotify_windows.go +++ /dev/null @@ -1,598 +0,0 @@ -// Copyright 2011 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build windows - -package fsnotify - -import ( - "errors" - "fmt" - "os" - "path/filepath" - "runtime" - "sync" - "syscall" - "unsafe" -) - -const ( - // Options for AddWatch - sys_FS_ONESHOT = 0x80000000 - sys_FS_ONLYDIR = 0x1000000 - - // Events - sys_FS_ACCESS = 0x1 - sys_FS_ALL_EVENTS = 0xfff - sys_FS_ATTRIB = 0x4 - sys_FS_CLOSE = 0x18 - sys_FS_CREATE = 0x100 - sys_FS_DELETE = 0x200 - sys_FS_DELETE_SELF = 0x400 - sys_FS_MODIFY = 0x2 - sys_FS_MOVE = 0xc0 - sys_FS_MOVED_FROM = 0x40 - sys_FS_MOVED_TO = 0x80 - sys_FS_MOVE_SELF = 0x800 - - // Special events - sys_FS_IGNORED = 0x8000 - sys_FS_Q_OVERFLOW = 0x4000 -) - -const ( - // TODO(nj): Use syscall.ERROR_MORE_DATA from ztypes_windows in Go 1.3+ - sys_ERROR_MORE_DATA syscall.Errno = 234 -) - -// Event is the type of the notification messages -// received on the watcher's Event channel. -type FileEvent struct { - mask uint32 // Mask of events - cookie uint32 // Unique cookie associating related events (for rename) - Name string // File name (optional) -} - -// IsCreate reports whether the FileEvent was triggered by a creation -func (e *FileEvent) IsCreate() bool { return (e.mask & sys_FS_CREATE) == sys_FS_CREATE } - -// IsDelete reports whether the FileEvent was triggered by a delete -func (e *FileEvent) IsDelete() bool { - return ((e.mask&sys_FS_DELETE) == sys_FS_DELETE || (e.mask&sys_FS_DELETE_SELF) == sys_FS_DELETE_SELF) -} - -// IsModify reports whether the FileEvent was triggered by a file modification or attribute change -func (e *FileEvent) IsModify() bool { - return ((e.mask&sys_FS_MODIFY) == sys_FS_MODIFY || (e.mask&sys_FS_ATTRIB) == sys_FS_ATTRIB) -} - -// IsRename reports whether the FileEvent was triggered by a change name -func (e *FileEvent) IsRename() bool { - return ((e.mask&sys_FS_MOVE) == sys_FS_MOVE || (e.mask&sys_FS_MOVE_SELF) == sys_FS_MOVE_SELF || (e.mask&sys_FS_MOVED_FROM) == sys_FS_MOVED_FROM || (e.mask&sys_FS_MOVED_TO) == sys_FS_MOVED_TO) -} - -// IsAttrib reports whether the FileEvent was triggered by a change in the file metadata. -func (e *FileEvent) IsAttrib() bool { - return (e.mask & sys_FS_ATTRIB) == sys_FS_ATTRIB -} - -const ( - opAddWatch = iota - opRemoveWatch -) - -const ( - provisional uint64 = 1 << (32 + iota) -) - -type input struct { - op int - path string - flags uint32 - reply chan error -} - -type inode struct { - handle syscall.Handle - volume uint32 - index uint64 -} - -type watch struct { - ov syscall.Overlapped - ino *inode // i-number - path string // Directory path - mask uint64 // Directory itself is being watched with these notify flags - names map[string]uint64 // Map of names being watched and their notify flags - rename string // Remembers the old name while renaming a file - buf [4096]byte -} - -type indexMap map[uint64]*watch -type watchMap map[uint32]indexMap - -// A Watcher waits for and receives event notifications -// for a specific set of files and directories. -type Watcher struct { - mu sync.Mutex // Map access - port syscall.Handle // Handle to completion port - watches watchMap // Map of watches (key: i-number) - fsnFlags map[string]uint32 // Map of watched files to flags used for filter - fsnmut sync.Mutex // Protects access to fsnFlags. - input chan *input // Inputs to the reader are sent on this channel - internalEvent chan *FileEvent // Events are queued on this channel - Event chan *FileEvent // Events are returned on this channel - Error chan error // Errors are sent on this channel - isClosed bool // Set to true when Close() is first called - quit chan chan<- error - cookie uint32 -} - -// NewWatcher creates and returns a Watcher. -func NewWatcher() (*Watcher, error) { - port, e := syscall.CreateIoCompletionPort(syscall.InvalidHandle, 0, 0, 0) - if e != nil { - return nil, os.NewSyscallError("CreateIoCompletionPort", e) - } - w := &Watcher{ - port: port, - watches: make(watchMap), - fsnFlags: make(map[string]uint32), - input: make(chan *input, 1), - Event: make(chan *FileEvent, 50), - internalEvent: make(chan *FileEvent), - Error: make(chan error), - quit: make(chan chan<- error, 1), - } - go w.readEvents() - go w.purgeEvents() - return w, nil -} - -// Close closes a Watcher. -// It sends a message to the reader goroutine to quit and removes all watches -// associated with the watcher. -func (w *Watcher) Close() error { - if w.isClosed { - return nil - } - w.isClosed = true - - // Send "quit" message to the reader goroutine - ch := make(chan error) - w.quit <- ch - if err := w.wakeupReader(); err != nil { - return err - } - return <-ch -} - -// AddWatch adds path to the watched file set. -func (w *Watcher) AddWatch(path string, flags uint32) error { - if w.isClosed { - return errors.New("watcher already closed") - } - in := &input{ - op: opAddWatch, - path: filepath.Clean(path), - flags: flags, - reply: make(chan error), - } - w.input <- in - if err := w.wakeupReader(); err != nil { - return err - } - return <-in.reply -} - -// Watch adds path to the watched file set, watching all events. -func (w *Watcher) watch(path string) error { - return w.AddWatch(path, sys_FS_ALL_EVENTS) -} - -// RemoveWatch removes path from the watched file set. -func (w *Watcher) removeWatch(path string) error { - in := &input{ - op: opRemoveWatch, - path: filepath.Clean(path), - reply: make(chan error), - } - w.input <- in - if err := w.wakeupReader(); err != nil { - return err - } - return <-in.reply -} - -func (w *Watcher) wakeupReader() error { - e := syscall.PostQueuedCompletionStatus(w.port, 0, 0, nil) - if e != nil { - return os.NewSyscallError("PostQueuedCompletionStatus", e) - } - return nil -} - -func getDir(pathname string) (dir string, err error) { - attr, e := syscall.GetFileAttributes(syscall.StringToUTF16Ptr(pathname)) - if e != nil { - return "", os.NewSyscallError("GetFileAttributes", e) - } - if attr&syscall.FILE_ATTRIBUTE_DIRECTORY != 0 { - dir = pathname - } else { - dir, _ = filepath.Split(pathname) - dir = filepath.Clean(dir) - } - return -} - -func getIno(path string) (ino *inode, err error) { - h, e := syscall.CreateFile(syscall.StringToUTF16Ptr(path), - syscall.FILE_LIST_DIRECTORY, - syscall.FILE_SHARE_READ|syscall.FILE_SHARE_WRITE|syscall.FILE_SHARE_DELETE, - nil, syscall.OPEN_EXISTING, - syscall.FILE_FLAG_BACKUP_SEMANTICS|syscall.FILE_FLAG_OVERLAPPED, 0) - if e != nil { - return nil, os.NewSyscallError("CreateFile", e) - } - var fi syscall.ByHandleFileInformation - if e = syscall.GetFileInformationByHandle(h, &fi); e != nil { - syscall.CloseHandle(h) - return nil, os.NewSyscallError("GetFileInformationByHandle", e) - } - ino = &inode{ - handle: h, - volume: fi.VolumeSerialNumber, - index: uint64(fi.FileIndexHigh)<<32 | uint64(fi.FileIndexLow), - } - return ino, nil -} - -// Must run within the I/O thread. -func (m watchMap) get(ino *inode) *watch { - if i := m[ino.volume]; i != nil { - return i[ino.index] - } - return nil -} - -// Must run within the I/O thread. -func (m watchMap) set(ino *inode, watch *watch) { - i := m[ino.volume] - if i == nil { - i = make(indexMap) - m[ino.volume] = i - } - i[ino.index] = watch -} - -// Must run within the I/O thread. -func (w *Watcher) addWatch(pathname string, flags uint64) error { - dir, err := getDir(pathname) - if err != nil { - return err - } - if flags&sys_FS_ONLYDIR != 0 && pathname != dir { - return nil - } - ino, err := getIno(dir) - if err != nil { - return err - } - w.mu.Lock() - watchEntry := w.watches.get(ino) - w.mu.Unlock() - if watchEntry == nil { - if _, e := syscall.CreateIoCompletionPort(ino.handle, w.port, 0, 0); e != nil { - syscall.CloseHandle(ino.handle) - return os.NewSyscallError("CreateIoCompletionPort", e) - } - watchEntry = &watch{ - ino: ino, - path: dir, - names: make(map[string]uint64), - } - w.mu.Lock() - w.watches.set(ino, watchEntry) - w.mu.Unlock() - flags |= provisional - } else { - syscall.CloseHandle(ino.handle) - } - if pathname == dir { - watchEntry.mask |= flags - } else { - watchEntry.names[filepath.Base(pathname)] |= flags - } - if err = w.startRead(watchEntry); err != nil { - return err - } - if pathname == dir { - watchEntry.mask &= ^provisional - } else { - watchEntry.names[filepath.Base(pathname)] &= ^provisional - } - return nil -} - -// Must run within the I/O thread. -func (w *Watcher) remWatch(pathname string) error { - dir, err := getDir(pathname) - if err != nil { - return err - } - ino, err := getIno(dir) - if err != nil { - return err - } - w.mu.Lock() - watch := w.watches.get(ino) - w.mu.Unlock() - if watch == nil { - return fmt.Errorf("can't remove non-existent watch for: %s", pathname) - } - if pathname == dir { - w.sendEvent(watch.path, watch.mask&sys_FS_IGNORED) - watch.mask = 0 - } else { - name := filepath.Base(pathname) - w.sendEvent(watch.path+"\\"+name, watch.names[name]&sys_FS_IGNORED) - delete(watch.names, name) - } - return w.startRead(watch) -} - -// Must run within the I/O thread. -func (w *Watcher) deleteWatch(watch *watch) { - for name, mask := range watch.names { - if mask&provisional == 0 { - w.sendEvent(watch.path+"\\"+name, mask&sys_FS_IGNORED) - } - delete(watch.names, name) - } - if watch.mask != 0 { - if watch.mask&provisional == 0 { - w.sendEvent(watch.path, watch.mask&sys_FS_IGNORED) - } - watch.mask = 0 - } -} - -// Must run within the I/O thread. -func (w *Watcher) startRead(watch *watch) error { - if e := syscall.CancelIo(watch.ino.handle); e != nil { - w.Error <- os.NewSyscallError("CancelIo", e) - w.deleteWatch(watch) - } - mask := toWindowsFlags(watch.mask) - for _, m := range watch.names { - mask |= toWindowsFlags(m) - } - if mask == 0 { - if e := syscall.CloseHandle(watch.ino.handle); e != nil { - w.Error <- os.NewSyscallError("CloseHandle", e) - } - w.mu.Lock() - delete(w.watches[watch.ino.volume], watch.ino.index) - w.mu.Unlock() - return nil - } - e := syscall.ReadDirectoryChanges(watch.ino.handle, &watch.buf[0], - uint32(unsafe.Sizeof(watch.buf)), false, mask, nil, &watch.ov, 0) - if e != nil { - err := os.NewSyscallError("ReadDirectoryChanges", e) - if e == syscall.ERROR_ACCESS_DENIED && watch.mask&provisional == 0 { - // Watched directory was probably removed - if w.sendEvent(watch.path, watch.mask&sys_FS_DELETE_SELF) { - if watch.mask&sys_FS_ONESHOT != 0 { - watch.mask = 0 - } - } - err = nil - } - w.deleteWatch(watch) - w.startRead(watch) - return err - } - return nil -} - -// readEvents reads from the I/O completion port, converts the -// received events into Event objects and sends them via the Event channel. -// Entry point to the I/O thread. -func (w *Watcher) readEvents() { - var ( - n, key uint32 - ov *syscall.Overlapped - ) - runtime.LockOSThread() - - for { - e := syscall.GetQueuedCompletionStatus(w.port, &n, &key, &ov, syscall.INFINITE) - watch := (*watch)(unsafe.Pointer(ov)) - - if watch == nil { - select { - case ch := <-w.quit: - w.mu.Lock() - var indexes []indexMap - for _, index := range w.watches { - indexes = append(indexes, index) - } - w.mu.Unlock() - for _, index := range indexes { - for _, watch := range index { - w.deleteWatch(watch) - w.startRead(watch) - } - } - var err error - if e := syscall.CloseHandle(w.port); e != nil { - err = os.NewSyscallError("CloseHandle", e) - } - close(w.internalEvent) - close(w.Error) - ch <- err - return - case in := <-w.input: - switch in.op { - case opAddWatch: - in.reply <- w.addWatch(in.path, uint64(in.flags)) - case opRemoveWatch: - in.reply <- w.remWatch(in.path) - } - default: - } - continue - } - - switch e { - case sys_ERROR_MORE_DATA: - if watch == nil { - w.Error <- errors.New("ERROR_MORE_DATA has unexpectedly null lpOverlapped buffer") - } else { - // The i/o succeeded but the buffer is full. - // In theory we should be building up a full packet. - // In practice we can get away with just carrying on. - n = uint32(unsafe.Sizeof(watch.buf)) - } - case syscall.ERROR_ACCESS_DENIED: - // Watched directory was probably removed - w.sendEvent(watch.path, watch.mask&sys_FS_DELETE_SELF) - w.deleteWatch(watch) - w.startRead(watch) - continue - case syscall.ERROR_OPERATION_ABORTED: - // CancelIo was called on this handle - continue - default: - w.Error <- os.NewSyscallError("GetQueuedCompletionPort", e) - continue - case nil: - } - - var offset uint32 - for { - if n == 0 { - w.internalEvent <- &FileEvent{mask: sys_FS_Q_OVERFLOW} - w.Error <- errors.New("short read in readEvents()") - break - } - - // Point "raw" to the event in the buffer - raw := (*syscall.FileNotifyInformation)(unsafe.Pointer(&watch.buf[offset])) - buf := (*[syscall.MAX_PATH]uint16)(unsafe.Pointer(&raw.FileName)) - name := syscall.UTF16ToString(buf[:raw.FileNameLength/2]) - fullname := watch.path + "\\" + name - - var mask uint64 - switch raw.Action { - case syscall.FILE_ACTION_REMOVED: - mask = sys_FS_DELETE_SELF - case syscall.FILE_ACTION_MODIFIED: - mask = sys_FS_MODIFY - case syscall.FILE_ACTION_RENAMED_OLD_NAME: - watch.rename = name - case syscall.FILE_ACTION_RENAMED_NEW_NAME: - if watch.names[watch.rename] != 0 { - watch.names[name] |= watch.names[watch.rename] - delete(watch.names, watch.rename) - mask = sys_FS_MOVE_SELF - } - } - - sendNameEvent := func() { - if w.sendEvent(fullname, watch.names[name]&mask) { - if watch.names[name]&sys_FS_ONESHOT != 0 { - delete(watch.names, name) - } - } - } - if raw.Action != syscall.FILE_ACTION_RENAMED_NEW_NAME { - sendNameEvent() - } - if raw.Action == syscall.FILE_ACTION_REMOVED { - w.sendEvent(fullname, watch.names[name]&sys_FS_IGNORED) - delete(watch.names, name) - } - if w.sendEvent(fullname, watch.mask&toFSnotifyFlags(raw.Action)) { - if watch.mask&sys_FS_ONESHOT != 0 { - watch.mask = 0 - } - } - if raw.Action == syscall.FILE_ACTION_RENAMED_NEW_NAME { - fullname = watch.path + "\\" + watch.rename - sendNameEvent() - } - - // Move to the next event in the buffer - if raw.NextEntryOffset == 0 { - break - } - offset += raw.NextEntryOffset - - // Error! - if offset >= n { - w.Error <- errors.New("Windows system assumed buffer larger than it is, events have likely been missed.") - break - } - } - - if err := w.startRead(watch); err != nil { - w.Error <- err - } - } -} - -func (w *Watcher) sendEvent(name string, mask uint64) bool { - if mask == 0 { - return false - } - event := &FileEvent{mask: uint32(mask), Name: name} - if mask&sys_FS_MOVE != 0 { - if mask&sys_FS_MOVED_FROM != 0 { - w.cookie++ - } - event.cookie = w.cookie - } - select { - case ch := <-w.quit: - w.quit <- ch - case w.Event <- event: - } - return true -} - -func toWindowsFlags(mask uint64) uint32 { - var m uint32 - if mask&sys_FS_ACCESS != 0 { - m |= syscall.FILE_NOTIFY_CHANGE_LAST_ACCESS - } - if mask&sys_FS_MODIFY != 0 { - m |= syscall.FILE_NOTIFY_CHANGE_LAST_WRITE - } - if mask&sys_FS_ATTRIB != 0 { - m |= syscall.FILE_NOTIFY_CHANGE_ATTRIBUTES - } - if mask&(sys_FS_MOVE|sys_FS_CREATE|sys_FS_DELETE) != 0 { - m |= syscall.FILE_NOTIFY_CHANGE_FILE_NAME | syscall.FILE_NOTIFY_CHANGE_DIR_NAME - } - return m -} - -func toFSnotifyFlags(action uint32) uint64 { - switch action { - case syscall.FILE_ACTION_ADDED: - return sys_FS_CREATE - case syscall.FILE_ACTION_REMOVED: - return sys_FS_DELETE - case syscall.FILE_ACTION_MODIFIED: - return sys_FS_MODIFY - case syscall.FILE_ACTION_RENAMED_OLD_NAME: - return sys_FS_MOVED_FROM - case syscall.FILE_ACTION_RENAMED_NEW_NAME: - return sys_FS_MOVED_TO - } - return 0 -} diff --git a/Godeps/_workspace/src/github.com/mattn/go-runewidth/.travis.yml b/Godeps/_workspace/src/github.com/mattn/go-runewidth/.travis.yml new file mode 100644 index 0000000000..ad584f4da5 --- /dev/null +++ b/Godeps/_workspace/src/github.com/mattn/go-runewidth/.travis.yml @@ -0,0 +1,9 @@ +language: go +go: + - tip +before_install: + - go get github.com/axw/gocov/gocov + - go get github.com/mattn/goveralls + - go get golang.org/x/tools/cmd/cover +script: + - $HOME/gopath/bin/goveralls -repotoken lAKAWPzcGsD3A8yBX3BGGtRUdJ6CaGERL diff --git a/Godeps/_workspace/src/github.com/mattn/go-runewidth/README.mkd b/Godeps/_workspace/src/github.com/mattn/go-runewidth/README.mkd new file mode 100644 index 0000000000..4f0d583beb --- /dev/null +++ b/Godeps/_workspace/src/github.com/mattn/go-runewidth/README.mkd @@ -0,0 +1,25 @@ +go-runewidth +============ + +[![Build Status](https://travis-ci.org/mattn/go-runewidth.png?branch=master)](https://travis-ci.org/mattn/go-runewidth) +[![Coverage Status](https://coveralls.io/repos/mattn/go-runewidth/badge.png?branch=HEAD)](https://coveralls.io/r/mattn/go-runewidth?branch=HEAD) + +Provides functions to get fixed width of the character or string. + +Usage +----- + +```go +runewidth.StringWidth("つのだ☆HIRO") == 12 +``` + + +Author +------ + +Yasuhiro Matsumoto + +License +------- + +under the MIT License: http://mattn.mit-license.org/2013 diff --git a/Godeps/_workspace/src/github.com/mattn/go-runewidth/runewidth.go b/Godeps/_workspace/src/github.com/mattn/go-runewidth/runewidth.go new file mode 100644 index 0000000000..0b417db15a --- /dev/null +++ b/Godeps/_workspace/src/github.com/mattn/go-runewidth/runewidth.go @@ -0,0 +1,404 @@ +package runewidth + +var EastAsianWidth = IsEastAsian() +var DefaultCondition = &Condition{EastAsianWidth} + +type interval struct { + first rune + last rune +} + +var combining = []interval{ + {0x0300, 0x036F}, {0x0483, 0x0486}, {0x0488, 0x0489}, + {0x0591, 0x05BD}, {0x05BF, 0x05BF}, {0x05C1, 0x05C2}, + {0x05C4, 0x05C5}, {0x05C7, 0x05C7}, {0x0600, 0x0603}, + {0x0610, 0x0615}, {0x064B, 0x065E}, {0x0670, 0x0670}, + {0x06D6, 0x06E4}, {0x06E7, 0x06E8}, {0x06EA, 0x06ED}, + {0x070F, 0x070F}, {0x0711, 0x0711}, {0x0730, 0x074A}, + {0x07A6, 0x07B0}, {0x07EB, 0x07F3}, {0x0901, 0x0902}, + {0x093C, 0x093C}, {0x0941, 0x0948}, {0x094D, 0x094D}, + {0x0951, 0x0954}, {0x0962, 0x0963}, {0x0981, 0x0981}, + {0x09BC, 0x09BC}, {0x09C1, 0x09C4}, {0x09CD, 0x09CD}, + {0x09E2, 0x09E3}, {0x0A01, 0x0A02}, {0x0A3C, 0x0A3C}, + {0x0A41, 0x0A42}, {0x0A47, 0x0A48}, {0x0A4B, 0x0A4D}, + {0x0A70, 0x0A71}, {0x0A81, 0x0A82}, {0x0ABC, 0x0ABC}, + {0x0AC1, 0x0AC5}, {0x0AC7, 0x0AC8}, {0x0ACD, 0x0ACD}, + {0x0AE2, 0x0AE3}, {0x0B01, 0x0B01}, {0x0B3C, 0x0B3C}, + {0x0B3F, 0x0B3F}, {0x0B41, 0x0B43}, {0x0B4D, 0x0B4D}, + {0x0B56, 0x0B56}, {0x0B82, 0x0B82}, {0x0BC0, 0x0BC0}, + {0x0BCD, 0x0BCD}, {0x0C3E, 0x0C40}, {0x0C46, 0x0C48}, + {0x0C4A, 0x0C4D}, {0x0C55, 0x0C56}, {0x0CBC, 0x0CBC}, + {0x0CBF, 0x0CBF}, {0x0CC6, 0x0CC6}, {0x0CCC, 0x0CCD}, + {0x0CE2, 0x0CE3}, {0x0D41, 0x0D43}, {0x0D4D, 0x0D4D}, + {0x0DCA, 0x0DCA}, {0x0DD2, 0x0DD4}, {0x0DD6, 0x0DD6}, + {0x0E31, 0x0E31}, {0x0E34, 0x0E3A}, {0x0E47, 0x0E4E}, + {0x0EB1, 0x0EB1}, {0x0EB4, 0x0EB9}, {0x0EBB, 0x0EBC}, + {0x0EC8, 0x0ECD}, {0x0F18, 0x0F19}, {0x0F35, 0x0F35}, + {0x0F37, 0x0F37}, {0x0F39, 0x0F39}, {0x0F71, 0x0F7E}, + {0x0F80, 0x0F84}, {0x0F86, 0x0F87}, {0x0F90, 0x0F97}, + {0x0F99, 0x0FBC}, {0x0FC6, 0x0FC6}, {0x102D, 0x1030}, + {0x1032, 0x1032}, {0x1036, 0x1037}, {0x1039, 0x1039}, + {0x1058, 0x1059}, {0x1160, 0x11FF}, {0x135F, 0x135F}, + {0x1712, 0x1714}, {0x1732, 0x1734}, {0x1752, 0x1753}, + {0x1772, 0x1773}, {0x17B4, 0x17B5}, {0x17B7, 0x17BD}, + {0x17C6, 0x17C6}, {0x17C9, 0x17D3}, {0x17DD, 0x17DD}, + {0x180B, 0x180D}, {0x18A9, 0x18A9}, {0x1920, 0x1922}, + {0x1927, 0x1928}, {0x1932, 0x1932}, {0x1939, 0x193B}, + {0x1A17, 0x1A18}, {0x1B00, 0x1B03}, {0x1B34, 0x1B34}, + {0x1B36, 0x1B3A}, {0x1B3C, 0x1B3C}, {0x1B42, 0x1B42}, + {0x1B6B, 0x1B73}, {0x1DC0, 0x1DCA}, {0x1DFE, 0x1DFF}, + {0x200B, 0x200F}, {0x202A, 0x202E}, {0x2060, 0x2063}, + {0x206A, 0x206F}, {0x20D0, 0x20EF}, {0x302A, 0x302F}, + {0x3099, 0x309A}, {0xA806, 0xA806}, {0xA80B, 0xA80B}, + {0xA825, 0xA826}, {0xFB1E, 0xFB1E}, {0xFE00, 0xFE0F}, + {0xFE20, 0xFE23}, {0xFEFF, 0xFEFF}, {0xFFF9, 0xFFFB}, + {0x10A01, 0x10A03}, {0x10A05, 0x10A06}, {0x10A0C, 0x10A0F}, + {0x10A38, 0x10A3A}, {0x10A3F, 0x10A3F}, {0x1D167, 0x1D169}, + {0x1D173, 0x1D182}, {0x1D185, 0x1D18B}, {0x1D1AA, 0x1D1AD}, + {0x1D242, 0x1D244}, {0xE0001, 0xE0001}, {0xE0020, 0xE007F}, + {0xE0100, 0xE01EF}, +} + +type ctype int + +const ( + narrow ctype = iota + ambiguous + wide + halfwidth + fullwidth + neutral +) + +type intervalType struct { + first rune + last rune + ctype ctype +} + +var ctypes = []intervalType{ + {0x0020, 0x007E, narrow}, + {0x00A1, 0x00A1, ambiguous}, + {0x00A2, 0x00A3, narrow}, + {0x00A4, 0x00A4, ambiguous}, + {0x00A5, 0x00A6, narrow}, + {0x00A7, 0x00A8, ambiguous}, + {0x00AA, 0x00AA, ambiguous}, + {0x00AC, 0x00AC, narrow}, + {0x00AD, 0x00AE, ambiguous}, + {0x00AF, 0x00AF, narrow}, + {0x00B0, 0x00B4, ambiguous}, + {0x00B6, 0x00BA, ambiguous}, + {0x00BC, 0x00BF, ambiguous}, + {0x00C6, 0x00C6, ambiguous}, + {0x00D0, 0x00D0, ambiguous}, + {0x00D7, 0x00D8, ambiguous}, + {0x00DE, 0x00E1, ambiguous}, + {0x00E6, 0x00E6, ambiguous}, + {0x00E8, 0x00EA, ambiguous}, + {0x00EC, 0x00ED, ambiguous}, + {0x00F0, 0x00F0, ambiguous}, + {0x00F2, 0x00F3, ambiguous}, + {0x00F7, 0x00FA, ambiguous}, + {0x00FC, 0x00FC, ambiguous}, + {0x00FE, 0x00FE, ambiguous}, + {0x0101, 0x0101, ambiguous}, + {0x0111, 0x0111, ambiguous}, + {0x0113, 0x0113, ambiguous}, + {0x011B, 0x011B, ambiguous}, + {0x0126, 0x0127, ambiguous}, + {0x012B, 0x012B, ambiguous}, + {0x0131, 0x0133, ambiguous}, + {0x0138, 0x0138, ambiguous}, + {0x013F, 0x0142, ambiguous}, + {0x0144, 0x0144, ambiguous}, + {0x0148, 0x014B, ambiguous}, + {0x014D, 0x014D, ambiguous}, + {0x0152, 0x0153, ambiguous}, + {0x0166, 0x0167, ambiguous}, + {0x016B, 0x016B, ambiguous}, + {0x01CE, 0x01CE, ambiguous}, + {0x01D0, 0x01D0, ambiguous}, + {0x01D2, 0x01D2, ambiguous}, + {0x01D4, 0x01D4, ambiguous}, + {0x01D6, 0x01D6, ambiguous}, + {0x01D8, 0x01D8, ambiguous}, + {0x01DA, 0x01DA, ambiguous}, + {0x01DC, 0x01DC, ambiguous}, + {0x0251, 0x0251, ambiguous}, + {0x0261, 0x0261, ambiguous}, + {0x02C4, 0x02C4, ambiguous}, + {0x02C7, 0x02C7, ambiguous}, + {0x02C9, 0x02CB, ambiguous}, + {0x02CD, 0x02CD, ambiguous}, + {0x02D0, 0x02D0, ambiguous}, + {0x02D8, 0x02DB, ambiguous}, + {0x02DD, 0x02DD, ambiguous}, + {0x02DF, 0x02DF, ambiguous}, + {0x0300, 0x036F, ambiguous}, + {0x0391, 0x03A2, ambiguous}, + {0x03A3, 0x03A9, ambiguous}, + {0x03B1, 0x03C1, ambiguous}, + {0x03C3, 0x03C9, ambiguous}, + {0x0401, 0x0401, ambiguous}, + {0x0410, 0x044F, ambiguous}, + {0x0451, 0x0451, ambiguous}, + {0x1100, 0x115F, wide}, + {0x2010, 0x2010, ambiguous}, + {0x2013, 0x2016, ambiguous}, + {0x2018, 0x2019, ambiguous}, + {0x201C, 0x201D, ambiguous}, + {0x2020, 0x2022, ambiguous}, + {0x2024, 0x2027, ambiguous}, + {0x2030, 0x2030, ambiguous}, + {0x2032, 0x2033, ambiguous}, + {0x2035, 0x2035, ambiguous}, + {0x203B, 0x203B, ambiguous}, + {0x203E, 0x203E, ambiguous}, + {0x2074, 0x2074, ambiguous}, + {0x207F, 0x207F, ambiguous}, + {0x2081, 0x2084, ambiguous}, + {0x20A9, 0x20A9, halfwidth}, + {0x20AC, 0x20AC, ambiguous}, + {0x2103, 0x2103, ambiguous}, + {0x2105, 0x2105, ambiguous}, + {0x2109, 0x2109, ambiguous}, + {0x2113, 0x2113, ambiguous}, + {0x2116, 0x2116, ambiguous}, + {0x2121, 0x2122, ambiguous}, + {0x2126, 0x2126, ambiguous}, + {0x212B, 0x212B, ambiguous}, + {0x2153, 0x2154, ambiguous}, + {0x215B, 0x215E, ambiguous}, + {0x2160, 0x216B, ambiguous}, + {0x2170, 0x2179, ambiguous}, + {0x2189, 0x218A, ambiguous}, + {0x2190, 0x2199, ambiguous}, + {0x21B8, 0x21B9, ambiguous}, + {0x21D2, 0x21D2, ambiguous}, + {0x21D4, 0x21D4, ambiguous}, + {0x21E7, 0x21E7, ambiguous}, + {0x2200, 0x2200, ambiguous}, + {0x2202, 0x2203, ambiguous}, + {0x2207, 0x2208, ambiguous}, + {0x220B, 0x220B, ambiguous}, + {0x220F, 0x220F, ambiguous}, + {0x2211, 0x2211, ambiguous}, + {0x2215, 0x2215, ambiguous}, + {0x221A, 0x221A, ambiguous}, + {0x221D, 0x2220, ambiguous}, + {0x2223, 0x2223, ambiguous}, + {0x2225, 0x2225, ambiguous}, + {0x2227, 0x222C, ambiguous}, + {0x222E, 0x222E, ambiguous}, + {0x2234, 0x2237, ambiguous}, + {0x223C, 0x223D, ambiguous}, + {0x2248, 0x2248, ambiguous}, + {0x224C, 0x224C, ambiguous}, + {0x2252, 0x2252, ambiguous}, + {0x2260, 0x2261, ambiguous}, + {0x2264, 0x2267, ambiguous}, + {0x226A, 0x226B, ambiguous}, + {0x226E, 0x226F, ambiguous}, + {0x2282, 0x2283, ambiguous}, + {0x2286, 0x2287, ambiguous}, + {0x2295, 0x2295, ambiguous}, + {0x2299, 0x2299, ambiguous}, + {0x22A5, 0x22A5, ambiguous}, + {0x22BF, 0x22BF, ambiguous}, + {0x2312, 0x2312, ambiguous}, + {0x2329, 0x232A, wide}, + {0x2460, 0x24E9, ambiguous}, + {0x24EB, 0x254B, ambiguous}, + {0x2550, 0x2573, ambiguous}, + {0x2580, 0x258F, ambiguous}, + {0x2592, 0x2595, ambiguous}, + {0x25A0, 0x25A1, ambiguous}, + {0x25A3, 0x25A9, ambiguous}, + {0x25B2, 0x25B3, ambiguous}, + {0x25B6, 0x25B7, ambiguous}, + {0x25BC, 0x25BD, ambiguous}, + {0x25C0, 0x25C1, ambiguous}, + {0x25C6, 0x25C8, ambiguous}, + {0x25CB, 0x25CB, ambiguous}, + {0x25CE, 0x25D1, ambiguous}, + {0x25E2, 0x25E5, ambiguous}, + {0x25EF, 0x25EF, ambiguous}, + {0x2605, 0x2606, ambiguous}, + {0x2609, 0x2609, ambiguous}, + {0x260E, 0x260F, ambiguous}, + {0x2614, 0x2615, ambiguous}, + {0x261C, 0x261C, ambiguous}, + {0x261E, 0x261E, ambiguous}, + {0x2640, 0x2640, ambiguous}, + {0x2642, 0x2642, ambiguous}, + {0x2660, 0x2661, ambiguous}, + {0x2663, 0x2665, ambiguous}, + {0x2667, 0x266A, ambiguous}, + {0x266C, 0x266D, ambiguous}, + {0x266F, 0x266F, ambiguous}, + {0x269E, 0x269F, ambiguous}, + {0x26BE, 0x26BF, ambiguous}, + {0x26C4, 0x26CD, ambiguous}, + {0x26CF, 0x26E1, ambiguous}, + {0x26E3, 0x26E3, ambiguous}, + {0x26E8, 0x26FF, ambiguous}, + {0x273D, 0x273D, ambiguous}, + {0x2757, 0x2757, ambiguous}, + {0x2776, 0x277F, ambiguous}, + {0x27E6, 0x27ED, narrow}, + {0x2985, 0x2986, narrow}, + {0x2B55, 0x2B59, ambiguous}, + {0x2E80, 0x2E9A, wide}, + {0x2E9B, 0x2EF4, wide}, + {0x2F00, 0x2FD6, wide}, + {0x2FF0, 0x2FFC, wide}, + {0x3000, 0x3000, fullwidth}, + {0x3001, 0x303E, wide}, + {0x3041, 0x3097, wide}, + {0x3099, 0x3100, wide}, + {0x3105, 0x312E, wide}, + {0x3131, 0x318F, wide}, + {0x3190, 0x31BB, wide}, + {0x31C0, 0x31E4, wide}, + {0x31F0, 0x321F, wide}, + {0x3220, 0x3247, wide}, + {0x3248, 0x324F, ambiguous}, + {0x3250, 0x32FF, wide}, + {0x3300, 0x4DBF, wide}, + {0x4E00, 0xA48D, wide}, + {0xA490, 0xA4C7, wide}, + {0xA960, 0xA97D, wide}, + {0xAC00, 0xD7A4, wide}, + {0xE000, 0xF8FF, ambiguous}, + {0xF900, 0xFAFF, wide}, + {0xFE00, 0xFE0F, ambiguous}, + {0xFE10, 0xFE1A, wide}, + {0xFE30, 0xFE53, wide}, + {0xFE54, 0xFE67, wide}, + {0xFE68, 0xFE6C, wide}, + {0xFF01, 0xFF60, fullwidth}, + {0xFF61, 0xFFBF, halfwidth}, + {0xFFC2, 0xFFC8, halfwidth}, + {0xFFCA, 0xFFD0, halfwidth}, + {0xFFD2, 0xFFD8, halfwidth}, + {0xFFDA, 0xFFDD, halfwidth}, + {0xFFE0, 0xFFE7, fullwidth}, + {0xFFE8, 0xFFEF, halfwidth}, + {0xFFFD, 0xFFFE, ambiguous}, + {0x1B000, 0x1B002, wide}, + {0x1F100, 0x1F10A, ambiguous}, + {0x1F110, 0x1F12D, ambiguous}, + {0x1F130, 0x1F169, ambiguous}, + {0x1F170, 0x1F19B, ambiguous}, + {0x1F200, 0x1F203, wide}, + {0x1F210, 0x1F23B, wide}, + {0x1F240, 0x1F249, wide}, + {0x1F250, 0x1F252, wide}, + {0x20000, 0x2FFFE, wide}, + {0x30000, 0x3FFFE, wide}, + {0xE0100, 0xE01F0, ambiguous}, + {0xF0000, 0xFFFFD, ambiguous}, + {0x100000, 0x10FFFE, ambiguous}, +} + +type Condition struct { + EastAsianWidth bool +} + +func NewCondition() *Condition { + return &Condition{EastAsianWidth} +} + +// RuneWidth returns the number of cells in r. +// See http://www.unicode.org/reports/tr11/ +func (c *Condition) RuneWidth(r rune) int { + if r == 0 { + return 0 + } + if r < 32 || (r >= 0x7f && r < 0xa0) { + return 1 + } + for _, iv := range combining { + if iv.first <= r && r <= iv.last { + return 0 + } + } + + if c.EastAsianWidth && IsAmbiguousWidth(r) { + return 2 + } + + if r >= 0x1100 && + (r <= 0x115f || r == 0x2329 || r == 0x232a || + (r >= 0x2e80 && r <= 0xa4cf && r != 0x303f) || + (r >= 0xac00 && r <= 0xd7a3) || + (r >= 0xf900 && r <= 0xfaff) || + (r >= 0xfe30 && r <= 0xfe6f) || + (r >= 0xff00 && r <= 0xff60) || + (r >= 0xffe0 && r <= 0xffe6) || + (r >= 0x20000 && r <= 0x2fffd) || + (r >= 0x30000 && r <= 0x3fffd)) { + return 2 + } + return 1 +} + +func (c *Condition) StringWidth(s string) (width int) { + for _, r := range []rune(s) { + width += c.RuneWidth(r) + } + return width +} + +func (c *Condition) Truncate(s string, w int, tail string) string { + r := []rune(s) + tw := StringWidth(tail) + w -= tw + width := 0 + i := 0 + for ; i < len(r); i++ { + cw := RuneWidth(r[i]) + if width+cw > w { + break + } + width += cw + } + if i == len(r) { + return string(r[0:i]) + } + return string(r[0:i]) + tail +} + +// RuneWidth returns the number of cells in r. +// See http://www.unicode.org/reports/tr11/ +func RuneWidth(r rune) int { + return DefaultCondition.RuneWidth(r) +} + +func ct(r rune) ctype { + for _, iv := range ctypes { + if iv.first <= r && r <= iv.last { + return iv.ctype + } + } + return neutral +} + +// IsAmbiguousWidth returns whether is ambiguous width or not. +func IsAmbiguousWidth(r rune) bool { + return ct(r) == ambiguous +} + +// IsAmbiguousWidth returns whether is ambiguous width or not. +func IsNeutralWidth(r rune) bool { + return ct(r) == neutral +} + +func StringWidth(s string) (width int) { + return DefaultCondition.StringWidth(s) +} + +func Truncate(s string, w int, tail string) string { + return DefaultCondition.Truncate(s, w, tail) +} diff --git a/Godeps/_workspace/src/github.com/mattn/go-runewidth/runewidth_js.go b/Godeps/_workspace/src/github.com/mattn/go-runewidth/runewidth_js.go new file mode 100644 index 0000000000..0ce32c5e7b --- /dev/null +++ b/Godeps/_workspace/src/github.com/mattn/go-runewidth/runewidth_js.go @@ -0,0 +1,8 @@ +// +build js + +package runewidth + +func IsEastAsian() bool { + // TODO: Implement this for the web. Detect east asian in a compatible way, and return true. + return false +} diff --git a/Godeps/_workspace/src/github.com/mattn/go-runewidth/runewidth_posix.go b/Godeps/_workspace/src/github.com/mattn/go-runewidth/runewidth_posix.go new file mode 100644 index 0000000000..a4495909d8 --- /dev/null +++ b/Godeps/_workspace/src/github.com/mattn/go-runewidth/runewidth_posix.go @@ -0,0 +1,69 @@ +// +build !windows,!js + +package runewidth + +import ( + "os" + "regexp" + "strings" +) + +var reLoc = regexp.MustCompile(`^[a-z][a-z][a-z]?(?:_[A-Z][A-Z])?\.(.+)`) + +func IsEastAsian() bool { + locale := os.Getenv("LC_CTYPE") + if locale == "" { + locale = os.Getenv("LANG") + } + + // ignore C locale + if locale == "POSIX" || locale == "C" { + return false + } + if len(locale) > 1 && locale[0] == 'C' && (locale[1] == '.' || locale[1] == '-') { + return false + } + + charset := strings.ToLower(locale) + r := reLoc.FindStringSubmatch(locale) + if len(r) == 2 { + charset = strings.ToLower(r[1]) + } + + if strings.HasSuffix(charset, "@cjk_narrow") { + return false + } + + for pos, b := range []byte(charset) { + if b == '@' { + charset = charset[:pos] + break + } + } + + mbc_max := 1 + switch charset { + case "utf-8", "utf8": + mbc_max = 6 + case "jis": + mbc_max = 8 + case "eucjp": + mbc_max = 3 + case "euckr", "euccn": + mbc_max = 2 + case "sjis", "cp932", "cp51932", "cp936", "cp949", "cp950": + mbc_max = 2 + case "big5": + mbc_max = 2 + case "gbk", "gb2312": + mbc_max = 2 + } + + if mbc_max > 1 && (charset[0] != 'u' || + strings.HasPrefix(locale, "ja") || + strings.HasPrefix(locale, "ko") || + strings.HasPrefix(locale, "zh")) { + return true + } + return false +} diff --git a/Godeps/_workspace/src/github.com/mattn/go-runewidth/runewidth_test.go b/Godeps/_workspace/src/github.com/mattn/go-runewidth/runewidth_test.go new file mode 100644 index 0000000000..5cef3d6a49 --- /dev/null +++ b/Godeps/_workspace/src/github.com/mattn/go-runewidth/runewidth_test.go @@ -0,0 +1,134 @@ +package runewidth + +import ( + "testing" +) + +var runewidthtests = []struct { + in rune + out int +}{ + {'世', 2}, + {'界', 2}, + {'セ', 1}, + {'カ', 1}, + {'イ', 1}, + {'☆', 2}, // double width in ambiguous + {'\x00', 0}, + {'\x01', 1}, + {'\u0300', 0}, +} + +func TestRuneWidth(t *testing.T) { + c := NewCondition() + c.EastAsianWidth = true + for _, tt := range runewidthtests { + if out := c.RuneWidth(tt.in); out != tt.out { + t.Errorf("Width(%q) = %v, want %v", tt.in, out, tt.out) + } + } +} + +var isambiguouswidthtests = []struct { + in rune + out bool +}{ + {'世', false}, + {'■', true}, + {'界', false}, + {'○', true}, + {'㈱', false}, + {'①', true}, + {'②', true}, + {'③', true}, + {'④', true}, + {'⑤', true}, + {'⑥', true}, + {'⑦', true}, + {'⑧', true}, + {'⑨', true}, + {'⑩', true}, + {'⑪', true}, + {'⑫', true}, + {'⑬', true}, + {'⑭', true}, + {'⑮', true}, + {'⑯', true}, + {'⑰', true}, + {'⑱', true}, + {'⑲', true}, + {'⑳', true}, + {'☆', true}, +} + +func TestIsAmbiguousWidth(t *testing.T) { + for _, tt := range isambiguouswidthtests { + if out := IsAmbiguousWidth(tt.in); out != tt.out { + t.Errorf("IsAmbiguousWidth(%q) = %v, want %v", tt.in, out, tt.out) + } + } +} + +var stringwidthtests = []struct { + in string + out int +}{ + {"■㈱の世界①", 12}, + {"スター☆", 8}, +} + +func TestStringWidth(t *testing.T) { + c := NewCondition() + c.EastAsianWidth = true + for _, tt := range stringwidthtests { + if out := c.StringWidth(tt.in); out != tt.out { + t.Errorf("StringWidth(%q) = %v, want %v", tt.in, out, tt.out) + } + } +} + +func TestStringWidthInvalid(t *testing.T) { + s := "こんにちわ\x00世界" + if out := StringWidth(s); out != 14 { + t.Errorf("StringWidth(%q) = %v, want %v", s, out, 14) + } +} + +func TestTruncate(t *testing.T) { + s := "あいうえおあいうえおえおおおおおおおおおおおおおおおおおおおおおおおおおおおおおお" + expected := "あいうえおあいうえおえおおおおおおおおおおおおおおおおおおおおおおおおおおお..." + + if out := Truncate(s, 80, "..."); out != expected { + t.Errorf("Truncate(%q) = %v, want %v", s, out, expected) + } +} + +func TestTruncateNoNeeded(t *testing.T) { + s := "あいうえおあい" + expected := "あいうえおあい" + + if out := Truncate(s, 80, "..."); out != expected { + t.Errorf("Truncate(%q) = %v, want %v", s, out, expected) + } +} + +var isneutralwidthtests = []struct { + in rune + out bool +}{ + {'→', false}, + {'┊', false}, + {'┈', false}, + {'~', false}, + {'└', false}, + {'⣀', true}, + {'⣀', true}, +} + +func TestIsNeutralWidth(t *testing.T) { + for _, tt := range isneutralwidthtests { + if out := IsNeutralWidth(tt.in); out != tt.out { + t.Errorf("IsNeutralWidth(%q) = %v, want %v", tt.in, out, tt.out) + } + } +} diff --git a/Godeps/_workspace/src/github.com/mattn/go-runewidth/runewidth_windows.go b/Godeps/_workspace/src/github.com/mattn/go-runewidth/runewidth_windows.go new file mode 100644 index 0000000000..bdd84454be --- /dev/null +++ b/Godeps/_workspace/src/github.com/mattn/go-runewidth/runewidth_windows.go @@ -0,0 +1,24 @@ +package runewidth + +import ( + "syscall" +) + +var ( + kernel32 = syscall.NewLazyDLL("kernel32") + procGetConsoleOutputCP = kernel32.NewProc("GetConsoleOutputCP") +) + +func IsEastAsian() bool { + r1, _, _ := procGetConsoleOutputCP.Call() + if r1 == 0 { + return false + } + + switch int(r1) { + case 932, 51932, 936, 949, 950: + return true + } + + return false +} diff --git a/Godeps/_workspace/src/github.com/nsf/termbox-go/AUTHORS b/Godeps/_workspace/src/github.com/nsf/termbox-go/AUTHORS new file mode 100644 index 0000000000..fe26fb0fb0 --- /dev/null +++ b/Godeps/_workspace/src/github.com/nsf/termbox-go/AUTHORS @@ -0,0 +1,4 @@ +# Please keep this file sorted. + +Georg Reinke +nsf diff --git a/Godeps/_workspace/src/github.com/nsf/termbox-go/LICENSE b/Godeps/_workspace/src/github.com/nsf/termbox-go/LICENSE new file mode 100644 index 0000000000..d9bc068ce7 --- /dev/null +++ b/Godeps/_workspace/src/github.com/nsf/termbox-go/LICENSE @@ -0,0 +1,19 @@ +Copyright (C) 2012 termbox-go authors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/Godeps/_workspace/src/github.com/nsf/termbox-go/README.md b/Godeps/_workspace/src/github.com/nsf/termbox-go/README.md new file mode 100644 index 0000000000..334d751024 --- /dev/null +++ b/Godeps/_workspace/src/github.com/nsf/termbox-go/README.md @@ -0,0 +1,21 @@ +## Termbox +Termbox is a library that provides a minimalistic API which allows the programmer to write text-based user interfaces. The library is crossplatform and has both terminal-based implementations on *nix operating systems and a winapi console based implementation for windows operating systems. The basic idea is an abstraction of the greatest common subset of features available on all major terminals and other terminal-like APIs in a minimalistic fashion. Small API means it is easy to implement, test, maintain and learn it, that's what makes the termbox a distinct library in its area. + +### Installation +Install and update this go package with `go get -u github.com/nsf/termbox-go` + +### Examples +For examples of what can be done take a look at demos in the _demos directory. You can try them with go run: `go run _demos/keyboard.go` + +There are also some interesting projects using termbox-go: + - [godit](https://github.com/nsf/godit) is an emacsish lightweight text editor written using termbox. + - [gomatrix](https://github.com/GeertJohan/gomatrix) connects to The Matrix and displays its data streams in your terminal. + - [gotetris](https://github.com/jjinux/gotetris) is an implementation of Tetris. + - [sokoban-go](https://github.com/rn2dy/sokoban-go) is an implementation of sokoban game. + - [hecate](https://github.com/evanmiller/hecate) is a hex editor designed by Satan. + - [httopd](https://github.com/verdverm/httopd) is top for httpd logs. + - [mop](https://github.com/michaeldv/mop) is stock market tracker for hackers. + - [termui](https://github.com/gizak/termui) is a terminal dashboard. + +### API reference +[godoc.org/github.com/nsf/termbox-go](http://godoc.org/github.com/nsf/termbox-go) diff --git a/Godeps/_workspace/src/github.com/nsf/termbox-go/api.go b/Godeps/_workspace/src/github.com/nsf/termbox-go/api.go new file mode 100644 index 0000000000..b08bca61a5 --- /dev/null +++ b/Godeps/_workspace/src/github.com/nsf/termbox-go/api.go @@ -0,0 +1,451 @@ +// +build !windows + +package termbox + +import "github.com/mattn/go-runewidth" +import "fmt" +import "os" +import "os/signal" +import "syscall" +import "runtime" + +// public API + +// Initializes termbox library. This function should be called before any other functions. +// After successful initialization, the library must be finalized using 'Close' function. +// +// Example usage: +// err := termbox.Init() +// if err != nil { +// panic(err) +// } +// defer termbox.Close() +func Init() error { + var err error + + out, err = os.OpenFile("/dev/tty", syscall.O_WRONLY, 0) + if err != nil { + return err + } + in, err = syscall.Open("/dev/tty", syscall.O_RDONLY, 0) + if err != nil { + return err + } + + err = setup_term() + if err != nil { + return fmt.Errorf("termbox: error while reading terminfo data: %v", err) + } + + signal.Notify(sigwinch, syscall.SIGWINCH) + signal.Notify(sigio, syscall.SIGIO) + + _, err = fcntl(in, syscall.F_SETFL, syscall.O_ASYNC|syscall.O_NONBLOCK) + if err != nil { + return err + } + _, err = fcntl(in, syscall.F_SETOWN, syscall.Getpid()) + if runtime.GOOS != "darwin" && err != nil { + return err + } + err = tcgetattr(out.Fd(), &orig_tios) + if err != nil { + return err + } + + tios := orig_tios + tios.Iflag &^= syscall_IGNBRK | syscall_BRKINT | syscall_PARMRK | + syscall_ISTRIP | syscall_INLCR | syscall_IGNCR | + syscall_ICRNL | syscall_IXON + tios.Oflag &^= syscall_OPOST + tios.Lflag &^= syscall_ECHO | syscall_ECHONL | syscall_ICANON | + syscall_ISIG | syscall_IEXTEN + tios.Cflag &^= syscall_CSIZE | syscall_PARENB + tios.Cflag |= syscall_CS8 + tios.Cc[syscall_VMIN] = 1 + tios.Cc[syscall_VTIME] = 0 + + err = tcsetattr(out.Fd(), &tios) + if err != nil { + return err + } + + out.WriteString(funcs[t_enter_ca]) + out.WriteString(funcs[t_enter_keypad]) + out.WriteString(funcs[t_hide_cursor]) + out.WriteString(funcs[t_clear_screen]) + + termw, termh = get_term_size(out.Fd()) + back_buffer.init(termw, termh) + front_buffer.init(termw, termh) + back_buffer.clear() + front_buffer.clear() + + go func() { + buf := make([]byte, 128) + for { + select { + case <-sigio: + for { + n, err := syscall.Read(in, buf) + if err == syscall.EAGAIN || err == syscall.EWOULDBLOCK { + break + } + select { + case input_comm <- input_event{buf[:n], err}: + ie := <-input_comm + buf = ie.data[:128] + case <-quit: + return + } + } + case <-quit: + return + } + } + }() + + IsInit = true + return nil +} + +// Interrupt an in-progress call to PollEvent by causing it to return +// EventInterrupt. Note that this function will block until the PollEvent +// function has successfully been interrupted. +func Interrupt() { + interrupt_comm <- struct{}{} +} + +// Finalizes termbox library, should be called after successful initialization +// when termbox's functionality isn't required anymore. +func Close() { + quit <- 1 + out.WriteString(funcs[t_show_cursor]) + out.WriteString(funcs[t_sgr0]) + out.WriteString(funcs[t_clear_screen]) + out.WriteString(funcs[t_exit_ca]) + out.WriteString(funcs[t_exit_keypad]) + out.WriteString(funcs[t_exit_mouse]) + tcsetattr(out.Fd(), &orig_tios) + + out.Close() + syscall.Close(in) + + // reset the state, so that on next Init() it will work again + termw = 0 + termh = 0 + input_mode = InputEsc + out = nil + in = 0 + lastfg = attr_invalid + lastbg = attr_invalid + lastx = coord_invalid + lasty = coord_invalid + cursor_x = cursor_hidden + cursor_y = cursor_hidden + foreground = ColorDefault + background = ColorDefault + IsInit = false +} + +// Synchronizes the internal back buffer with the terminal. +func Flush() error { + // invalidate cursor position + lastx = coord_invalid + lasty = coord_invalid + + update_size_maybe() + + for y := 0; y < front_buffer.height; y++ { + line_offset := y * front_buffer.width + for x := 0; x < front_buffer.width; { + cell_offset := line_offset + x + back := &back_buffer.cells[cell_offset] + front := &front_buffer.cells[cell_offset] + if back.Ch < ' ' { + back.Ch = ' ' + } + w := runewidth.RuneWidth(back.Ch) + if w == 0 || w == 2 && runewidth.IsAmbiguousWidth(back.Ch) { + w = 1 + } + if *back == *front { + x += w + continue + } + *front = *back + send_attr(back.Fg, back.Bg) + + if w == 2 && x == front_buffer.width-1 { + // there's not enough space for 2-cells rune, + // let's just put a space in there + send_char(x, y, ' ') + } else { + send_char(x, y, back.Ch) + if w == 2 { + next := cell_offset + 1 + front_buffer.cells[next] = Cell{ + Ch: 0, + Fg: back.Fg, + Bg: back.Bg, + } + } + } + x += w + } + } + if !is_cursor_hidden(cursor_x, cursor_y) { + write_cursor(cursor_x, cursor_y) + } + return flush() +} + +// Sets the position of the cursor. See also HideCursor(). +func SetCursor(x, y int) { + if is_cursor_hidden(cursor_x, cursor_y) && !is_cursor_hidden(x, y) { + outbuf.WriteString(funcs[t_show_cursor]) + } + + if !is_cursor_hidden(cursor_x, cursor_y) && is_cursor_hidden(x, y) { + outbuf.WriteString(funcs[t_hide_cursor]) + } + + cursor_x, cursor_y = x, y + if !is_cursor_hidden(cursor_x, cursor_y) { + write_cursor(cursor_x, cursor_y) + } +} + +// The shortcut for SetCursor(-1, -1). +func HideCursor() { + SetCursor(cursor_hidden, cursor_hidden) +} + +// Changes cell's parameters in the internal back buffer at the specified +// position. +func SetCell(x, y int, ch rune, fg, bg Attribute) { + if x < 0 || x >= back_buffer.width { + return + } + if y < 0 || y >= back_buffer.height { + return + } + + back_buffer.cells[y*back_buffer.width+x] = Cell{ch, fg, bg} +} + +// Returns a slice into the termbox's back buffer. You can get its dimensions +// using 'Size' function. The slice remains valid as long as no 'Clear' or +// 'Flush' function calls were made after call to this function. +func CellBuffer() []Cell { + return back_buffer.cells +} + +// After getting a raw event from PollRawEvent function call, you can parse it +// again into an ordinary one using termbox logic. That is parse an event as +// termbox would do it. Returned event in addition to usual Event struct fields +// sets N field to the amount of bytes used within 'data' slice. If the length +// of 'data' slice is zero or event cannot be parsed for some other reason, the +// function will return a special event type: EventNone. +// +// IMPORTANT: EventNone may contain a non-zero N, which means you should skip +// these bytes, because termbox cannot recognize them. +// +// NOTE: This API is experimental and may change in future. +func ParseEvent(data []byte) Event { + event := Event{Type: EventKey} + ok := extract_event(data, &event) + if !ok { + return Event{Type: EventNone, N: event.N} + } + return event +} + +// Wait for an event and return it. This is a blocking function call. Instead +// of EventKey and EventMouse it returns EventRaw events. Raw event is written +// into `data` slice and Event's N field is set to the amount of bytes written. +// The minimum required length of the 'data' slice is 1. This requirement may +// vary on different platforms. +// +// NOTE: This API is experimental and may change in future. +func PollRawEvent(data []byte) Event { + if len(data) == 0 { + panic("len(data) >= 1 is a requirement") + } + + var event Event + if extract_raw_event(data, &event) { + return event + } + + for { + select { + case ev := <-input_comm: + if ev.err != nil { + return Event{Type: EventError, Err: ev.err} + } + + inbuf = append(inbuf, ev.data...) + input_comm <- ev + if extract_raw_event(data, &event) { + return event + } + case <-interrupt_comm: + event.Type = EventInterrupt + return event + + case <-sigwinch: + event.Type = EventResize + event.Width, event.Height = get_term_size(out.Fd()) + return event + } + } +} + +// Wait for an event and return it. This is a blocking function call. +func PollEvent() Event { + var event Event + + // try to extract event from input buffer, return on success + event.Type = EventKey + ok := extract_event(inbuf, &event) + if event.N != 0 { + copy(inbuf, inbuf[event.N:]) + inbuf = inbuf[:len(inbuf)-event.N] + } + if ok { + return event + } + + for { + select { + case ev := <-input_comm: + if ev.err != nil { + return Event{Type: EventError, Err: ev.err} + } + + inbuf = append(inbuf, ev.data...) + input_comm <- ev + ok := extract_event(inbuf, &event) + if event.N != 0 { + copy(inbuf, inbuf[event.N:]) + inbuf = inbuf[:len(inbuf)-event.N] + } + if ok { + return event + } + case <-interrupt_comm: + event.Type = EventInterrupt + return event + + case <-sigwinch: + event.Type = EventResize + event.Width, event.Height = get_term_size(out.Fd()) + return event + } + } + panic("unreachable") +} + +// Returns the size of the internal back buffer (which is mostly the same as +// terminal's window size in characters). But it doesn't always match the size +// of the terminal window, after the terminal size has changed, the internal +// back buffer will get in sync only after Clear or Flush function calls. +func Size() (int, int) { + return termw, termh +} + +// Clears the internal back buffer. +func Clear(fg, bg Attribute) error { + foreground, background = fg, bg + err := update_size_maybe() + back_buffer.clear() + return err +} + +// Sets termbox input mode. Termbox has two input modes: +// +// 1. Esc input mode. When ESC sequence is in the buffer and it doesn't match +// any known sequence. ESC means KeyEsc. This is the default input mode. +// +// 2. Alt input mode. When ESC sequence is in the buffer and it doesn't match +// any known sequence. ESC enables ModAlt modifier for the next keyboard event. +// +// Both input modes can be OR'ed with Mouse mode. Setting Mouse mode bit up will +// enable mouse button click events. +// +// If 'mode' is InputCurrent, returns the current input mode. See also Input* +// constants. +func SetInputMode(mode InputMode) InputMode { + if mode == InputCurrent { + return input_mode + } + if mode&InputMouse != 0 { + out.WriteString(funcs[t_enter_mouse]) + } else { + out.WriteString(funcs[t_exit_mouse]) + } + + input_mode = mode + return input_mode +} + +// Sets the termbox output mode. Termbox has four output options: +// 1. OutputNormal => [1..8] +// This mode provides 8 different colors: +// black, red, green, yellow, blue, magenta, cyan, white +// Shortcut: ColorBlack, ColorRed, ... +// Attributes: AttrBold, AttrUnderline, AttrReverse +// +// Example usage: +// SetCell(x, y, '@', ColorBlack | AttrBold, ColorRed); +// +// 2. Output256 => [1..256] +// In this mode you can leverage the 256 terminal mode: +// 0x00 - 0x07: the 8 colors as in OutputNormal +// 0x08 - 0x0f: Color* | AttrBold +// 0x10 - 0xe7: 216 different colors +// 0xe8 - 0xff: 24 different shades of grey +// +// Example usage: +// SetCell(x, y, '@', 184, 240); +// SetCell(x, y, '@', 0xb8, 0xf0); +// +// 3. Output216 => [1..216] +// This mode supports the 3rd range of the 256 mode only. +// But you dont need to provide an offset. +// +// 4. OutputGrayscale => [1..24] +// This mode supports the 4th range of the 256 mode only. +// But you dont need to provide an offset. +// +// In all modes, 0 represents the default color. +// +// `go run _demos/output.go` to see its impact on your terminal. +// +// If 'mode' is OutputCurrent, it returns the current output mode. +// +// Note that this may return a different OutputMode than the one requested, +// as the requested mode may not be available on the target platform. +func SetOutputMode(mode OutputMode) OutputMode { + if mode == OutputCurrent { + return output_mode + } + + output_mode = mode + return output_mode +} + +// Sync comes handy when something causes desync between termbox's understanding +// of a terminal buffer and the reality. Such as a third party process. Sync +// forces a complete resync between the termbox and a terminal, it may not be +// visually pretty though. +func Sync() error { + front_buffer.clear() + err := send_clear() + if err != nil { + return err + } + + return Flush() +} diff --git a/Godeps/_workspace/src/github.com/nsf/termbox-go/api_common.go b/Godeps/_workspace/src/github.com/nsf/termbox-go/api_common.go new file mode 100644 index 0000000000..c0069fb289 --- /dev/null +++ b/Godeps/_workspace/src/github.com/nsf/termbox-go/api_common.go @@ -0,0 +1,183 @@ +// termbox is a library for creating cross-platform text-based interfaces +package termbox + +// public API, common OS agnostic part + +type ( + InputMode int + OutputMode int + EventType uint8 + Modifier uint8 + Key uint16 + Attribute uint16 +) + +// This type represents a termbox event. The 'Mod', 'Key' and 'Ch' fields are +// valid if 'Type' is EventKey. The 'Width' and 'Height' fields are valid if +// 'Type' is EventResize. The 'Err' field is valid if 'Type' is EventError. +type Event struct { + Type EventType // one of Event* constants + Mod Modifier // one of Mod* constants or 0 + Key Key // one of Key* constants, invalid if 'Ch' is not 0 + Ch rune // a unicode character + Width int // width of the screen + Height int // height of the screen + Err error // error in case if input failed + MouseX int // x coord of mouse + MouseY int // y coord of mouse + N int // number of bytes written when getting a raw event +} + +// A cell, single conceptual entity on the screen. The screen is basically a 2d +// array of cells. 'Ch' is a unicode character, 'Fg' and 'Bg' are foreground +// and background attributes respectively. +type Cell struct { + Ch rune + Fg Attribute + Bg Attribute +} + +// To know if termbox has been initialized or not +var ( + IsInit bool = false +) + +// Key constants, see Event.Key field. +const ( + KeyF1 Key = 0xFFFF - iota + KeyF2 + KeyF3 + KeyF4 + KeyF5 + KeyF6 + KeyF7 + KeyF8 + KeyF9 + KeyF10 + KeyF11 + KeyF12 + KeyInsert + KeyDelete + KeyHome + KeyEnd + KeyPgup + KeyPgdn + KeyArrowUp + KeyArrowDown + KeyArrowLeft + KeyArrowRight + key_min // see terminfo + MouseLeft + MouseMiddle + MouseRight +) + +const ( + KeyCtrlTilde Key = 0x00 + KeyCtrl2 Key = 0x00 + KeyCtrlSpace Key = 0x00 + KeyCtrlA Key = 0x01 + KeyCtrlB Key = 0x02 + KeyCtrlC Key = 0x03 + KeyCtrlD Key = 0x04 + KeyCtrlE Key = 0x05 + KeyCtrlF Key = 0x06 + KeyCtrlG Key = 0x07 + KeyBackspace Key = 0x08 + KeyCtrlH Key = 0x08 + KeyTab Key = 0x09 + KeyCtrlI Key = 0x09 + KeyCtrlJ Key = 0x0A + KeyCtrlK Key = 0x0B + KeyCtrlL Key = 0x0C + KeyEnter Key = 0x0D + KeyCtrlM Key = 0x0D + KeyCtrlN Key = 0x0E + KeyCtrlO Key = 0x0F + KeyCtrlP Key = 0x10 + KeyCtrlQ Key = 0x11 + KeyCtrlR Key = 0x12 + KeyCtrlS Key = 0x13 + KeyCtrlT Key = 0x14 + KeyCtrlU Key = 0x15 + KeyCtrlV Key = 0x16 + KeyCtrlW Key = 0x17 + KeyCtrlX Key = 0x18 + KeyCtrlY Key = 0x19 + KeyCtrlZ Key = 0x1A + KeyEsc Key = 0x1B + KeyCtrlLsqBracket Key = 0x1B + KeyCtrl3 Key = 0x1B + KeyCtrl4 Key = 0x1C + KeyCtrlBackslash Key = 0x1C + KeyCtrl5 Key = 0x1D + KeyCtrlRsqBracket Key = 0x1D + KeyCtrl6 Key = 0x1E + KeyCtrl7 Key = 0x1F + KeyCtrlSlash Key = 0x1F + KeyCtrlUnderscore Key = 0x1F + KeySpace Key = 0x20 + KeyBackspace2 Key = 0x7F + KeyCtrl8 Key = 0x7F +) + +// Alt modifier constant, see Event.Mod field and SetInputMode function. +const ( + ModAlt Modifier = 0x01 +) + +// Cell colors, you can combine a color with multiple attributes using bitwise +// OR ('|'). +const ( + ColorDefault Attribute = iota + ColorBlack + ColorRed + ColorGreen + ColorYellow + ColorBlue + ColorMagenta + ColorCyan + ColorWhite +) + +// Cell attributes, it is possible to use multiple attributes by combining them +// using bitwise OR ('|'). Although, colors cannot be combined. But you can +// combine attributes and a single color. +// +// It's worth mentioning that some platforms don't support certain attibutes. +// For example windows console doesn't support AttrUnderline. And on some +// terminals applying AttrBold to background may result in blinking text. Use +// them with caution and test your code on various terminals. +const ( + AttrBold Attribute = 1 << (iota + 9) + AttrUnderline + AttrReverse +) + +// Input mode. See SetInputMode function. +const ( + InputEsc InputMode = 1 << iota + InputAlt + InputMouse + InputCurrent InputMode = 0 +) + +// Output mode. See SetOutputMode function. +const ( + OutputCurrent OutputMode = iota + OutputNormal + Output256 + Output216 + OutputGrayscale +) + +// Event type. See Event.Type field. +const ( + EventKey EventType = iota + EventResize + EventMouse + EventError + EventInterrupt + EventRaw + EventNone +) diff --git a/Godeps/_workspace/src/github.com/nsf/termbox-go/api_windows.go b/Godeps/_workspace/src/github.com/nsf/termbox-go/api_windows.go new file mode 100644 index 0000000000..78d954b36c --- /dev/null +++ b/Godeps/_workspace/src/github.com/nsf/termbox-go/api_windows.go @@ -0,0 +1,235 @@ +package termbox + +import ( + "syscall" +) + +// public API + +// Initializes termbox library. This function should be called before any other functions. +// After successful initialization, the library must be finalized using 'Close' function. +// +// Example usage: +// err := termbox.Init() +// if err != nil { +// panic(err) +// } +// defer termbox.Close() +func Init() error { + var err error + + interrupt, err = create_event() + if err != nil { + return err + } + + in, err = syscall.Open("CONIN$", syscall.O_RDWR, 0) + if err != nil { + return err + } + out, err = syscall.Open("CONOUT$", syscall.O_RDWR, 0) + if err != nil { + return err + } + + err = get_console_mode(in, &orig_mode) + if err != nil { + return err + } + + err = set_console_mode(in, enable_window_input) + if err != nil { + return err + } + + orig_size = get_term_size(out) + win_size := get_win_size(out) + + err = set_console_screen_buffer_size(out, win_size) + if err != nil { + return err + } + + err = get_console_cursor_info(out, &orig_cursor_info) + if err != nil { + return err + } + + show_cursor(false) + term_size = get_term_size(out) + back_buffer.init(int(term_size.x), int(term_size.y)) + front_buffer.init(int(term_size.x), int(term_size.y)) + back_buffer.clear() + front_buffer.clear() + clear() + + diffbuf = make([]diff_msg, 0, 32) + + go input_event_producer() + IsInit = true + return nil +} + +// Finalizes termbox library, should be called after successful initialization +// when termbox's functionality isn't required anymore. +func Close() { + // we ignore errors here, because we can't really do anything about them + Clear(0, 0) + Flush() + + // stop event producer + cancel_comm <- true + set_event(interrupt) + <-cancel_done_comm + + set_console_cursor_info(out, &orig_cursor_info) + set_console_cursor_position(out, coord{}) + set_console_screen_buffer_size(out, orig_size) + set_console_mode(in, orig_mode) + syscall.Close(in) + syscall.Close(out) + syscall.Close(interrupt) + IsInit = false +} + +// Interrupt an in-progress call to PollEvent by causing it to return +// EventInterrupt. Note that this function will block until the PollEvent +// function has successfully been interrupted. +func Interrupt() { + interrupt_comm <- struct{}{} +} + +// Synchronizes the internal back buffer with the terminal. +func Flush() error { + update_size_maybe() + prepare_diff_messages() + for _, diff := range diffbuf { + r := small_rect{ + left: 0, + top: diff.pos, + right: term_size.x - 1, + bottom: diff.pos + diff.lines - 1, + } + write_console_output(out, diff.chars, r) + } + if !is_cursor_hidden(cursor_x, cursor_y) { + move_cursor(cursor_x, cursor_y) + } + return nil +} + +// Sets the position of the cursor. See also HideCursor(). +func SetCursor(x, y int) { + if is_cursor_hidden(cursor_x, cursor_y) && !is_cursor_hidden(x, y) { + show_cursor(true) + } + + if !is_cursor_hidden(cursor_x, cursor_y) && is_cursor_hidden(x, y) { + show_cursor(false) + } + + cursor_x, cursor_y = x, y + if !is_cursor_hidden(cursor_x, cursor_y) { + move_cursor(cursor_x, cursor_y) + } +} + +// The shortcut for SetCursor(-1, -1). +func HideCursor() { + SetCursor(cursor_hidden, cursor_hidden) +} + +// Changes cell's parameters in the internal back buffer at the specified +// position. +func SetCell(x, y int, ch rune, fg, bg Attribute) { + if x < 0 || x >= back_buffer.width { + return + } + if y < 0 || y >= back_buffer.height { + return + } + + back_buffer.cells[y*back_buffer.width+x] = Cell{ch, fg, bg} +} + +// Returns a slice into the termbox's back buffer. You can get its dimensions +// using 'Size' function. The slice remains valid as long as no 'Clear' or +// 'Flush' function calls were made after call to this function. +func CellBuffer() []Cell { + return back_buffer.cells +} + +// Wait for an event and return it. This is a blocking function call. +func PollEvent() Event { + select { + case ev := <-input_comm: + return ev + case <-interrupt_comm: + return Event{Type: EventInterrupt} + } +} + +// Returns the size of the internal back buffer (which is mostly the same as +// console's window size in characters). But it doesn't always match the size +// of the console window, after the console size has changed, the internal back +// buffer will get in sync only after Clear or Flush function calls. +func Size() (int, int) { + return int(term_size.x), int(term_size.y) +} + +// Clears the internal back buffer. +func Clear(fg, bg Attribute) error { + foreground, background = fg, bg + update_size_maybe() + back_buffer.clear() + return nil +} + +// Sets termbox input mode. Termbox has two input modes: +// +// 1. Esc input mode. When ESC sequence is in the buffer and it doesn't match +// any known sequence. ESC means KeyEsc. This is the default input mode. +// +// 2. Alt input mode. When ESC sequence is in the buffer and it doesn't match +// any known sequence. ESC enables ModAlt modifier for the next keyboard event. +// +// Both input modes can be OR'ed with Mouse mode. Setting Mouse mode bit up will +// enable mouse button click events. +// +// If 'mode' is InputCurrent, returns the current input mode. See also Input* +// constants. +func SetInputMode(mode InputMode) InputMode { + if mode == InputCurrent { + return input_mode + } + if mode&InputMouse != 0 { + err := set_console_mode(in, enable_window_input|enable_mouse_input|enable_extended_flags) + if err != nil { + panic(err) + } + } else { + err := set_console_mode(in, enable_window_input) + if err != nil { + panic(err) + } + } + + input_mode = mode + return input_mode +} + +// Sets the termbox output mode. +// +// Windows console does not support extra colour modes, +// so this will always set and return OutputNormal. +func SetOutputMode(mode OutputMode) OutputMode { + return OutputNormal +} + +// Sync comes handy when something causes desync between termbox's understanding +// of a terminal buffer and the reality. Such as a third party process. Sync +// forces a complete resync between the termbox and a terminal, it may not be +// visually pretty though. At the moment on Windows it does nothing. +func Sync() error { + return nil +} diff --git a/Godeps/_workspace/src/github.com/nsf/termbox-go/collect_terminfo.py b/Godeps/_workspace/src/github.com/nsf/termbox-go/collect_terminfo.py new file mode 100644 index 0000000000..5e50975e63 --- /dev/null +++ b/Godeps/_workspace/src/github.com/nsf/termbox-go/collect_terminfo.py @@ -0,0 +1,110 @@ +#!/usr/bin/env python + +import sys, os, subprocess + +def escaped(s): + return repr(s)[1:-1] + +def tput(term, name): + try: + return subprocess.check_output(['tput', '-T%s' % term, name]).decode() + except subprocess.CalledProcessError as e: + return e.output.decode() + + +def w(s): + if s == None: + return + sys.stdout.write(s) + +terminals = { + 'xterm' : 'xterm', + 'rxvt-256color' : 'rxvt_256color', + 'rxvt-unicode' : 'rxvt_unicode', + 'linux' : 'linux', + 'Eterm' : 'eterm', + 'screen' : 'screen' +} + +keys = [ + "F1", "kf1", + "F2", "kf2", + "F3", "kf3", + "F4", "kf4", + "F5", "kf5", + "F6", "kf6", + "F7", "kf7", + "F8", "kf8", + "F9", "kf9", + "F10", "kf10", + "F11", "kf11", + "F12", "kf12", + "INSERT", "kich1", + "DELETE", "kdch1", + "HOME", "khome", + "END", "kend", + "PGUP", "kpp", + "PGDN", "knp", + "KEY_UP", "kcuu1", + "KEY_DOWN", "kcud1", + "KEY_LEFT", "kcub1", + "KEY_RIGHT", "kcuf1" +] + +funcs = [ + "T_ENTER_CA", "smcup", + "T_EXIT_CA", "rmcup", + "T_SHOW_CURSOR", "cnorm", + "T_HIDE_CURSOR", "civis", + "T_CLEAR_SCREEN", "clear", + "T_SGR0", "sgr0", + "T_UNDERLINE", "smul", + "T_BOLD", "bold", + "T_BLINK", "blink", + "T_REVERSE", "rev", + "T_ENTER_KEYPAD", "smkx", + "T_EXIT_KEYPAD", "rmkx" +] + +def iter_pairs(iterable): + iterable = iter(iterable) + while True: + yield (next(iterable), next(iterable)) + +def do_term(term, nick): + w("// %s\n" % term) + w("var %s_keys = []string{\n\t" % nick) + for k, v in iter_pairs(keys): + w('"') + w(escaped(tput(term, v))) + w('",') + w("\n}\n") + w("var %s_funcs = []string{\n\t" % nick) + for k,v in iter_pairs(funcs): + w('"') + if v == "sgr": + w("\\033[3%d;4%dm") + elif v == "cup": + w("\\033[%d;%dH") + else: + w(escaped(tput(term, v))) + w('", ') + w("\n}\n\n") + +def do_terms(d): + w("var terms = []struct {\n") + w("\tname string\n") + w("\tkeys []string\n") + w("\tfuncs []string\n") + w("}{\n") + for k, v in d.items(): + w('\t{"%s", %s_keys, %s_funcs},\n' % (k, v, v)) + w("}\n\n") + +w("// +build !windows\n\npackage termbox\n\n") + +for k,v in terminals.items(): + do_term(k, v) + +do_terms(terminals) + diff --git a/Godeps/_workspace/src/github.com/nsf/termbox-go/syscalls.go b/Godeps/_workspace/src/github.com/nsf/termbox-go/syscalls.go new file mode 100644 index 0000000000..4f52bb9af9 --- /dev/null +++ b/Godeps/_workspace/src/github.com/nsf/termbox-go/syscalls.go @@ -0,0 +1,39 @@ +// +build ignore + +package termbox + +/* +#include +#include +*/ +import "C" + +type syscall_Termios C.struct_termios + +const ( + syscall_IGNBRK = C.IGNBRK + syscall_BRKINT = C.BRKINT + syscall_PARMRK = C.PARMRK + syscall_ISTRIP = C.ISTRIP + syscall_INLCR = C.INLCR + syscall_IGNCR = C.IGNCR + syscall_ICRNL = C.ICRNL + syscall_IXON = C.IXON + syscall_OPOST = C.OPOST + syscall_ECHO = C.ECHO + syscall_ECHONL = C.ECHONL + syscall_ICANON = C.ICANON + syscall_ISIG = C.ISIG + syscall_IEXTEN = C.IEXTEN + syscall_CSIZE = C.CSIZE + syscall_PARENB = C.PARENB + syscall_CS8 = C.CS8 + syscall_VMIN = C.VMIN + syscall_VTIME = C.VTIME + + // on darwin change these to (on *bsd too?): + // C.TIOCGETA + // C.TIOCSETA + syscall_TCGETS = C.TCGETS + syscall_TCSETS = C.TCSETS +) diff --git a/Godeps/_workspace/src/github.com/nsf/termbox-go/syscalls_darwin_386.go b/Godeps/_workspace/src/github.com/nsf/termbox-go/syscalls_darwin_386.go new file mode 100644 index 0000000000..e03624ebc7 --- /dev/null +++ b/Godeps/_workspace/src/github.com/nsf/termbox-go/syscalls_darwin_386.go @@ -0,0 +1,39 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs syscalls.go + +package termbox + +type syscall_Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]uint8 + Ispeed uint32 + Ospeed uint32 +} + +const ( + syscall_IGNBRK = 0x1 + syscall_BRKINT = 0x2 + syscall_PARMRK = 0x8 + syscall_ISTRIP = 0x20 + syscall_INLCR = 0x40 + syscall_IGNCR = 0x80 + syscall_ICRNL = 0x100 + syscall_IXON = 0x200 + syscall_OPOST = 0x1 + syscall_ECHO = 0x8 + syscall_ECHONL = 0x10 + syscall_ICANON = 0x100 + syscall_ISIG = 0x80 + syscall_IEXTEN = 0x400 + syscall_CSIZE = 0x300 + syscall_PARENB = 0x1000 + syscall_CS8 = 0x300 + syscall_VMIN = 0x10 + syscall_VTIME = 0x11 + + syscall_TCGETS = 0x402c7413 + syscall_TCSETS = 0x802c7414 +) diff --git a/Godeps/_workspace/src/github.com/nsf/termbox-go/syscalls_darwin_amd64.go b/Godeps/_workspace/src/github.com/nsf/termbox-go/syscalls_darwin_amd64.go new file mode 100644 index 0000000000..11f25be79a --- /dev/null +++ b/Godeps/_workspace/src/github.com/nsf/termbox-go/syscalls_darwin_amd64.go @@ -0,0 +1,40 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs syscalls.go + +package termbox + +type syscall_Termios struct { + Iflag uint64 + Oflag uint64 + Cflag uint64 + Lflag uint64 + Cc [20]uint8 + Pad_cgo_0 [4]byte + Ispeed uint64 + Ospeed uint64 +} + +const ( + syscall_IGNBRK = 0x1 + syscall_BRKINT = 0x2 + syscall_PARMRK = 0x8 + syscall_ISTRIP = 0x20 + syscall_INLCR = 0x40 + syscall_IGNCR = 0x80 + syscall_ICRNL = 0x100 + syscall_IXON = 0x200 + syscall_OPOST = 0x1 + syscall_ECHO = 0x8 + syscall_ECHONL = 0x10 + syscall_ICANON = 0x100 + syscall_ISIG = 0x80 + syscall_IEXTEN = 0x400 + syscall_CSIZE = 0x300 + syscall_PARENB = 0x1000 + syscall_CS8 = 0x300 + syscall_VMIN = 0x10 + syscall_VTIME = 0x11 + + syscall_TCGETS = 0x40487413 + syscall_TCSETS = 0x80487414 +) diff --git a/Godeps/_workspace/src/github.com/nsf/termbox-go/syscalls_freebsd.go b/Godeps/_workspace/src/github.com/nsf/termbox-go/syscalls_freebsd.go new file mode 100644 index 0000000000..e03624ebc7 --- /dev/null +++ b/Godeps/_workspace/src/github.com/nsf/termbox-go/syscalls_freebsd.go @@ -0,0 +1,39 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs syscalls.go + +package termbox + +type syscall_Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]uint8 + Ispeed uint32 + Ospeed uint32 +} + +const ( + syscall_IGNBRK = 0x1 + syscall_BRKINT = 0x2 + syscall_PARMRK = 0x8 + syscall_ISTRIP = 0x20 + syscall_INLCR = 0x40 + syscall_IGNCR = 0x80 + syscall_ICRNL = 0x100 + syscall_IXON = 0x200 + syscall_OPOST = 0x1 + syscall_ECHO = 0x8 + syscall_ECHONL = 0x10 + syscall_ICANON = 0x100 + syscall_ISIG = 0x80 + syscall_IEXTEN = 0x400 + syscall_CSIZE = 0x300 + syscall_PARENB = 0x1000 + syscall_CS8 = 0x300 + syscall_VMIN = 0x10 + syscall_VTIME = 0x11 + + syscall_TCGETS = 0x402c7413 + syscall_TCSETS = 0x802c7414 +) diff --git a/Godeps/_workspace/src/github.com/nsf/termbox-go/syscalls_linux.go b/Godeps/_workspace/src/github.com/nsf/termbox-go/syscalls_linux.go new file mode 100644 index 0000000000..b88960de61 --- /dev/null +++ b/Godeps/_workspace/src/github.com/nsf/termbox-go/syscalls_linux.go @@ -0,0 +1,33 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs syscalls.go + +package termbox + +import "syscall" + +type syscall_Termios syscall.Termios + +const ( + syscall_IGNBRK = syscall.IGNBRK + syscall_BRKINT = syscall.BRKINT + syscall_PARMRK = syscall.PARMRK + syscall_ISTRIP = syscall.ISTRIP + syscall_INLCR = syscall.INLCR + syscall_IGNCR = syscall.IGNCR + syscall_ICRNL = syscall.ICRNL + syscall_IXON = syscall.IXON + syscall_OPOST = syscall.OPOST + syscall_ECHO = syscall.ECHO + syscall_ECHONL = syscall.ECHONL + syscall_ICANON = syscall.ICANON + syscall_ISIG = syscall.ISIG + syscall_IEXTEN = syscall.IEXTEN + syscall_CSIZE = syscall.CSIZE + syscall_PARENB = syscall.PARENB + syscall_CS8 = syscall.CS8 + syscall_VMIN = syscall.VMIN + syscall_VTIME = syscall.VTIME + + syscall_TCGETS = syscall.TCGETS + syscall_TCSETS = syscall.TCSETS +) diff --git a/Godeps/_workspace/src/github.com/nsf/termbox-go/syscalls_netbsd.go b/Godeps/_workspace/src/github.com/nsf/termbox-go/syscalls_netbsd.go new file mode 100644 index 0000000000..49a3355b9a --- /dev/null +++ b/Godeps/_workspace/src/github.com/nsf/termbox-go/syscalls_netbsd.go @@ -0,0 +1,39 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs syscalls.go + +package termbox + +type syscall_Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]uint8 + Ispeed int32 + Ospeed int32 +} + +const ( + syscall_IGNBRK = 0x1 + syscall_BRKINT = 0x2 + syscall_PARMRK = 0x8 + syscall_ISTRIP = 0x20 + syscall_INLCR = 0x40 + syscall_IGNCR = 0x80 + syscall_ICRNL = 0x100 + syscall_IXON = 0x200 + syscall_OPOST = 0x1 + syscall_ECHO = 0x8 + syscall_ECHONL = 0x10 + syscall_ICANON = 0x100 + syscall_ISIG = 0x80 + syscall_IEXTEN = 0x400 + syscall_CSIZE = 0x300 + syscall_PARENB = 0x1000 + syscall_CS8 = 0x300 + syscall_VMIN = 0x10 + syscall_VTIME = 0x11 + + syscall_TCGETS = 0x402c7413 + syscall_TCSETS = 0x802c7414 +) diff --git a/Godeps/_workspace/src/github.com/nsf/termbox-go/syscalls_openbsd.go b/Godeps/_workspace/src/github.com/nsf/termbox-go/syscalls_openbsd.go new file mode 100644 index 0000000000..49a3355b9a --- /dev/null +++ b/Godeps/_workspace/src/github.com/nsf/termbox-go/syscalls_openbsd.go @@ -0,0 +1,39 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs syscalls.go + +package termbox + +type syscall_Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]uint8 + Ispeed int32 + Ospeed int32 +} + +const ( + syscall_IGNBRK = 0x1 + syscall_BRKINT = 0x2 + syscall_PARMRK = 0x8 + syscall_ISTRIP = 0x20 + syscall_INLCR = 0x40 + syscall_IGNCR = 0x80 + syscall_ICRNL = 0x100 + syscall_IXON = 0x200 + syscall_OPOST = 0x1 + syscall_ECHO = 0x8 + syscall_ECHONL = 0x10 + syscall_ICANON = 0x100 + syscall_ISIG = 0x80 + syscall_IEXTEN = 0x400 + syscall_CSIZE = 0x300 + syscall_PARENB = 0x1000 + syscall_CS8 = 0x300 + syscall_VMIN = 0x10 + syscall_VTIME = 0x11 + + syscall_TCGETS = 0x402c7413 + syscall_TCSETS = 0x802c7414 +) diff --git a/Godeps/_workspace/src/github.com/nsf/termbox-go/syscalls_windows.go b/Godeps/_workspace/src/github.com/nsf/termbox-go/syscalls_windows.go new file mode 100644 index 0000000000..472d002a56 --- /dev/null +++ b/Godeps/_workspace/src/github.com/nsf/termbox-go/syscalls_windows.go @@ -0,0 +1,61 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -DUNICODE syscalls.go + +package termbox + +const ( + foreground_blue = 0x1 + foreground_green = 0x2 + foreground_red = 0x4 + foreground_intensity = 0x8 + background_blue = 0x10 + background_green = 0x20 + background_red = 0x40 + background_intensity = 0x80 + std_input_handle = -0xa + std_output_handle = -0xb + key_event = 0x1 + mouse_event = 0x2 + window_buffer_size_event = 0x4 + enable_window_input = 0x8 + enable_mouse_input = 0x10 + enable_extended_flags = 0x80 + + vk_f1 = 0x70 + vk_f2 = 0x71 + vk_f3 = 0x72 + vk_f4 = 0x73 + vk_f5 = 0x74 + vk_f6 = 0x75 + vk_f7 = 0x76 + vk_f8 = 0x77 + vk_f9 = 0x78 + vk_f10 = 0x79 + vk_f11 = 0x7a + vk_f12 = 0x7b + vk_insert = 0x2d + vk_delete = 0x2e + vk_home = 0x24 + vk_end = 0x23 + vk_pgup = 0x21 + vk_pgdn = 0x22 + vk_arrow_up = 0x26 + vk_arrow_down = 0x28 + vk_arrow_left = 0x25 + vk_arrow_right = 0x27 + vk_backspace = 0x8 + vk_tab = 0x9 + vk_enter = 0xd + vk_esc = 0x1b + vk_space = 0x20 + + left_alt_pressed = 0x2 + left_ctrl_pressed = 0x8 + right_alt_pressed = 0x1 + right_ctrl_pressed = 0x4 + shift_pressed = 0x10 + + generic_read = 0x80000000 + generic_write = 0x40000000 + console_textmode_buffer = 0x1 +) diff --git a/Godeps/_workspace/src/github.com/nsf/termbox-go/termbox.go b/Godeps/_workspace/src/github.com/nsf/termbox-go/termbox.go new file mode 100644 index 0000000000..0aee8aca90 --- /dev/null +++ b/Godeps/_workspace/src/github.com/nsf/termbox-go/termbox.go @@ -0,0 +1,407 @@ +// +build !windows + +package termbox + +import "unicode/utf8" +import "bytes" +import "syscall" +import "unsafe" +import "strings" +import "strconv" +import "os" +import "io" + +// private API + +const ( + t_enter_ca = iota + t_exit_ca + t_show_cursor + t_hide_cursor + t_clear_screen + t_sgr0 + t_underline + t_bold + t_blink + t_reverse + t_enter_keypad + t_exit_keypad + t_enter_mouse + t_exit_mouse + t_max_funcs +) + +const ( + coord_invalid = -2 + attr_invalid = Attribute(0xFFFF) +) + +type input_event struct { + data []byte + err error +} + +var ( + // term specific sequences + keys []string + funcs []string + + // termbox inner state + orig_tios syscall_Termios + back_buffer cellbuf + front_buffer cellbuf + termw int + termh int + input_mode = InputEsc + output_mode = OutputNormal + out *os.File + in int + lastfg = attr_invalid + lastbg = attr_invalid + lastx = coord_invalid + lasty = coord_invalid + cursor_x = cursor_hidden + cursor_y = cursor_hidden + foreground = ColorDefault + background = ColorDefault + inbuf = make([]byte, 0, 64) + outbuf bytes.Buffer + sigwinch = make(chan os.Signal, 1) + sigio = make(chan os.Signal, 1) + quit = make(chan int) + input_comm = make(chan input_event) + interrupt_comm = make(chan struct{}) + intbuf = make([]byte, 0, 16) +) + +func write_cursor(x, y int) { + outbuf.WriteString("\033[") + outbuf.Write(strconv.AppendUint(intbuf, uint64(y+1), 10)) + outbuf.WriteString(";") + outbuf.Write(strconv.AppendUint(intbuf, uint64(x+1), 10)) + outbuf.WriteString("H") +} + +func write_sgr_fg(a Attribute) { + switch output_mode { + case Output256, Output216, OutputGrayscale: + outbuf.WriteString("\033[38;5;") + outbuf.Write(strconv.AppendUint(intbuf, uint64(a-1), 10)) + outbuf.WriteString("m") + default: + outbuf.WriteString("\033[3") + outbuf.Write(strconv.AppendUint(intbuf, uint64(a-1), 10)) + outbuf.WriteString("m") + } +} + +func write_sgr_bg(a Attribute) { + switch output_mode { + case Output256, Output216, OutputGrayscale: + outbuf.WriteString("\033[48;5;") + outbuf.Write(strconv.AppendUint(intbuf, uint64(a-1), 10)) + outbuf.WriteString("m") + default: + outbuf.WriteString("\033[4") + outbuf.Write(strconv.AppendUint(intbuf, uint64(a-1), 10)) + outbuf.WriteString("m") + } +} + +func write_sgr(fg, bg Attribute) { + switch output_mode { + case Output256, Output216, OutputGrayscale: + outbuf.WriteString("\033[38;5;") + outbuf.Write(strconv.AppendUint(intbuf, uint64(fg-1), 10)) + outbuf.WriteString("m") + outbuf.WriteString("\033[48;5;") + outbuf.Write(strconv.AppendUint(intbuf, uint64(bg-1), 10)) + outbuf.WriteString("m") + default: + outbuf.WriteString("\033[3") + outbuf.Write(strconv.AppendUint(intbuf, uint64(fg-1), 10)) + outbuf.WriteString(";4") + outbuf.Write(strconv.AppendUint(intbuf, uint64(bg-1), 10)) + outbuf.WriteString("m") + } +} + +type winsize struct { + rows uint16 + cols uint16 + xpixels uint16 + ypixels uint16 +} + +func get_term_size(fd uintptr) (int, int) { + var sz winsize + _, _, _ = syscall.Syscall(syscall.SYS_IOCTL, + fd, uintptr(syscall.TIOCGWINSZ), uintptr(unsafe.Pointer(&sz))) + return int(sz.cols), int(sz.rows) +} + +func send_attr(fg, bg Attribute) { + if fg == lastfg && bg == lastbg { + return + } + + outbuf.WriteString(funcs[t_sgr0]) + + var fgcol, bgcol Attribute + + switch output_mode { + case Output256: + fgcol = fg & 0x1FF + bgcol = bg & 0x1FF + case Output216: + fgcol = fg & 0xFF + bgcol = bg & 0xFF + if fgcol > 216 { + fgcol = ColorDefault + } + if bgcol > 216 { + bgcol = ColorDefault + } + if fgcol != ColorDefault { + fgcol += 0x10 + } + if bgcol != ColorDefault { + bgcol += 0x10 + } + case OutputGrayscale: + fgcol = fg & 0x1F + bgcol = bg & 0x1F + if fgcol > 24 { + fgcol = ColorDefault + } + if bgcol > 24 { + bgcol = ColorDefault + } + if fgcol != ColorDefault { + fgcol += 0xe8 + } + if bgcol != ColorDefault { + bgcol += 0xe8 + } + default: + fgcol = fg & 0x0F + bgcol = bg & 0x0F + } + + if fgcol != ColorDefault { + if bgcol != ColorDefault { + write_sgr(fgcol, bgcol) + } else { + write_sgr_fg(fgcol) + } + } else if bgcol != ColorDefault { + write_sgr_bg(bgcol) + } + + if fg&AttrBold != 0 { + outbuf.WriteString(funcs[t_bold]) + } + if bg&AttrBold != 0 { + outbuf.WriteString(funcs[t_blink]) + } + if fg&AttrUnderline != 0 { + outbuf.WriteString(funcs[t_underline]) + } + if fg&AttrReverse|bg&AttrReverse != 0 { + outbuf.WriteString(funcs[t_reverse]) + } + + lastfg, lastbg = fg, bg +} + +func send_char(x, y int, ch rune) { + var buf [8]byte + n := utf8.EncodeRune(buf[:], ch) + if x-1 != lastx || y != lasty { + write_cursor(x, y) + } + lastx, lasty = x, y + outbuf.Write(buf[:n]) +} + +func flush() error { + _, err := io.Copy(out, &outbuf) + outbuf.Reset() + if err != nil { + return err + } + return nil +} + +func send_clear() error { + send_attr(foreground, background) + outbuf.WriteString(funcs[t_clear_screen]) + if !is_cursor_hidden(cursor_x, cursor_y) { + write_cursor(cursor_x, cursor_y) + } + + // we need to invalidate cursor position too and these two vars are + // used only for simple cursor positioning optimization, cursor + // actually may be in the correct place, but we simply discard + // optimization once and it gives us simple solution for the case when + // cursor moved + lastx = coord_invalid + lasty = coord_invalid + + return flush() +} + +func update_size_maybe() error { + w, h := get_term_size(out.Fd()) + if w != termw || h != termh { + termw, termh = w, h + back_buffer.resize(termw, termh) + front_buffer.resize(termw, termh) + front_buffer.clear() + return send_clear() + } + return nil +} + +func tcsetattr(fd uintptr, termios *syscall_Termios) error { + r, _, e := syscall.Syscall(syscall.SYS_IOCTL, + fd, uintptr(syscall_TCSETS), uintptr(unsafe.Pointer(termios))) + if r != 0 { + return os.NewSyscallError("SYS_IOCTL", e) + } + return nil +} + +func tcgetattr(fd uintptr, termios *syscall_Termios) error { + r, _, e := syscall.Syscall(syscall.SYS_IOCTL, + fd, uintptr(syscall_TCGETS), uintptr(unsafe.Pointer(termios))) + if r != 0 { + return os.NewSyscallError("SYS_IOCTL", e) + } + return nil +} + +func parse_escape_sequence(event *Event, buf []byte) (int, bool) { + bufstr := string(buf) + // mouse + if len(bufstr) >= 6 && strings.HasPrefix(bufstr, "\033[M") { + switch buf[3] & 3 { + case 0: + event.Key = MouseLeft + case 1: + event.Key = MouseMiddle + case 2: + event.Key = MouseRight + case 3: + return 6, false + } + event.Type = EventMouse // KeyEvent by default + // wheel up outputs MouseLeft + if buf[3] == 0x60 || buf[3] == 0x70 { + event.Key = MouseMiddle + } + // the coord is 1,1 for upper left + event.MouseX = int(buf[4]) - 1 - 32 + event.MouseY = int(buf[5]) - 1 - 32 + return 6, true + } + + for i, key := range keys { + if strings.HasPrefix(bufstr, key) { + event.Ch = 0 + event.Key = Key(0xFFFF - i) + return len(key), true + } + } + return 0, true +} + +func extract_raw_event(data []byte, event *Event) bool { + if len(inbuf) == 0 { + return false + } + + n := len(data) + if n == 0 { + return false + } + + n = copy(data, inbuf) + copy(inbuf, inbuf[n:]) + inbuf = inbuf[:len(inbuf)-n] + + event.N = n + event.Type = EventRaw + return true +} + +func extract_event(inbuf []byte, event *Event) bool { + if len(inbuf) == 0 { + event.N = 0 + return false + } + + if inbuf[0] == '\033' { + // possible escape sequence + n, ok := parse_escape_sequence(event, inbuf) + if n != 0 { + event.N = n + return ok + } + + // it's not escape sequence, then it's Alt or Esc, check input_mode + switch { + case input_mode&InputEsc != 0: + // if we're in escape mode, fill Esc event, pop buffer, return success + event.Ch = 0 + event.Key = KeyEsc + event.Mod = 0 + event.N = 1 + return true + case input_mode&InputAlt != 0: + // if we're in alt mode, set Alt modifier to event and redo parsing + event.Mod = ModAlt + ok := extract_event(inbuf[1:], event) + if ok { + event.N++ + } else { + event.N = 0 + } + return ok + default: + panic("unreachable") + } + } + + // if we're here, this is not an escape sequence and not an alt sequence + // so, it's a FUNCTIONAL KEY or a UNICODE character + + // first of all check if it's a functional key + if Key(inbuf[0]) <= KeySpace || Key(inbuf[0]) == KeyBackspace2 { + // fill event, pop buffer, return success + event.Ch = 0 + event.Key = Key(inbuf[0]) + event.N = 1 + return true + } + + // the only possible option is utf8 rune + if r, n := utf8.DecodeRune(inbuf); r != utf8.RuneError { + event.Ch = r + event.Key = 0 + event.N = n + return true + } + + return false +} + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r, _, e := syscall.Syscall(syscall.SYS_FCNTL, uintptr(fd), uintptr(cmd), + uintptr(arg)) + val = int(r) + if e != 0 { + err = e + } + return +} diff --git a/Godeps/_workspace/src/github.com/nsf/termbox-go/termbox_common.go b/Godeps/_workspace/src/github.com/nsf/termbox-go/termbox_common.go new file mode 100644 index 0000000000..c3355cc25e --- /dev/null +++ b/Godeps/_workspace/src/github.com/nsf/termbox-go/termbox_common.go @@ -0,0 +1,59 @@ +package termbox + +// private API, common OS agnostic part + +type cellbuf struct { + width int + height int + cells []Cell +} + +func (this *cellbuf) init(width, height int) { + this.width = width + this.height = height + this.cells = make([]Cell, width*height) +} + +func (this *cellbuf) resize(width, height int) { + if this.width == width && this.height == height { + return + } + + oldw := this.width + oldh := this.height + oldcells := this.cells + + this.init(width, height) + this.clear() + + minw, minh := oldw, oldh + + if width < minw { + minw = width + } + if height < minh { + minh = height + } + + for i := 0; i < minh; i++ { + srco, dsto := i*oldw, i*width + src := oldcells[srco : srco+minw] + dst := this.cells[dsto : dsto+minw] + copy(dst, src) + } +} + +func (this *cellbuf) clear() { + for i := range this.cells { + c := &this.cells[i] + c.Ch = ' ' + c.Fg = foreground + c.Bg = background + } +} + +const cursor_hidden = -1 + +func is_cursor_hidden(x, y int) bool { + return x == cursor_hidden || y == cursor_hidden +} diff --git a/Godeps/_workspace/src/github.com/nsf/termbox-go/termbox_windows.go b/Godeps/_workspace/src/github.com/nsf/termbox-go/termbox_windows.go new file mode 100644 index 0000000000..17d1bdc84b --- /dev/null +++ b/Godeps/_workspace/src/github.com/nsf/termbox-go/termbox_windows.go @@ -0,0 +1,813 @@ +package termbox + +import "syscall" +import "unsafe" +import "unicode/utf16" +import "github.com/mattn/go-runewidth" + +type ( + wchar uint16 + short int16 + dword uint32 + word uint16 + char_info struct { + char wchar + attr word + } + coord struct { + x short + y short + } + small_rect struct { + left short + top short + right short + bottom short + } + console_screen_buffer_info struct { + size coord + cursor_position coord + attributes word + window small_rect + maximum_window_size coord + } + console_cursor_info struct { + size dword + visible int32 + } + input_record struct { + event_type word + _ [2]byte + event [16]byte + } + key_event_record struct { + key_down int32 + repeat_count word + virtual_key_code word + virtual_scan_code word + unicode_char wchar + control_key_state dword + } + window_buffer_size_record struct { + size coord + } + mouse_event_record struct { + mouse_pos coord + button_state dword + control_key_state dword + event_flags dword + } +) + +const ( + mouse_lmb = 0x1 + mouse_rmb = 0x2 + mouse_mmb = 0x4 | 0x8 | 0x10 +) + +func (this coord) uintptr() uintptr { + return uintptr(*(*int32)(unsafe.Pointer(&this))) +} + +var kernel32 = syscall.NewLazyDLL("kernel32.dll") +var is_cjk = runewidth.IsEastAsian() + +var ( + proc_set_console_active_screen_buffer = kernel32.NewProc("SetConsoleActiveScreenBuffer") + proc_set_console_screen_buffer_size = kernel32.NewProc("SetConsoleScreenBufferSize") + proc_create_console_screen_buffer = kernel32.NewProc("CreateConsoleScreenBuffer") + proc_get_console_screen_buffer_info = kernel32.NewProc("GetConsoleScreenBufferInfo") + proc_write_console_output = kernel32.NewProc("WriteConsoleOutputW") + proc_write_console_output_character = kernel32.NewProc("WriteConsoleOutputCharacterW") + proc_write_console_output_attribute = kernel32.NewProc("WriteConsoleOutputAttribute") + proc_set_console_cursor_info = kernel32.NewProc("SetConsoleCursorInfo") + proc_set_console_cursor_position = kernel32.NewProc("SetConsoleCursorPosition") + proc_get_console_cursor_info = kernel32.NewProc("GetConsoleCursorInfo") + proc_read_console_input = kernel32.NewProc("ReadConsoleInputW") + proc_get_console_mode = kernel32.NewProc("GetConsoleMode") + proc_set_console_mode = kernel32.NewProc("SetConsoleMode") + proc_fill_console_output_character = kernel32.NewProc("FillConsoleOutputCharacterW") + proc_fill_console_output_attribute = kernel32.NewProc("FillConsoleOutputAttribute") + proc_create_event = kernel32.NewProc("CreateEventW") + proc_wait_for_multiple_objects = kernel32.NewProc("WaitForMultipleObjects") + proc_set_event = kernel32.NewProc("SetEvent") +) + +func set_console_active_screen_buffer(h syscall.Handle) (err error) { + r0, _, e1 := syscall.Syscall(proc_set_console_active_screen_buffer.Addr(), + 1, uintptr(h), 0, 0) + if int(r0) == 0 { + if e1 != 0 { + err = error(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func set_console_screen_buffer_size(h syscall.Handle, size coord) (err error) { + r0, _, e1 := syscall.Syscall(proc_set_console_screen_buffer_size.Addr(), + 2, uintptr(h), size.uintptr(), 0) + if int(r0) == 0 { + if e1 != 0 { + err = error(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func create_console_screen_buffer() (h syscall.Handle, err error) { + r0, _, e1 := syscall.Syscall6(proc_create_console_screen_buffer.Addr(), + 5, uintptr(generic_read|generic_write), 0, 0, console_textmode_buffer, 0, 0) + if int(r0) == 0 { + if e1 != 0 { + err = error(e1) + } else { + err = syscall.EINVAL + } + } + return syscall.Handle(r0), nil +} + +func get_console_screen_buffer_info(h syscall.Handle, info *console_screen_buffer_info) (err error) { + r0, _, e1 := syscall.Syscall(proc_get_console_screen_buffer_info.Addr(), + 2, uintptr(h), uintptr(unsafe.Pointer(info)), 0) + if int(r0) == 0 { + if e1 != 0 { + err = error(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func write_console_output(h syscall.Handle, chars []char_info, dst small_rect) (err error) { + tmp_coord = coord{dst.right - dst.left + 1, dst.bottom - dst.top + 1} + tmp_rect = dst + r0, _, e1 := syscall.Syscall6(proc_write_console_output.Addr(), + 5, uintptr(h), uintptr(unsafe.Pointer(&chars[0])), tmp_coord.uintptr(), + tmp_coord0.uintptr(), uintptr(unsafe.Pointer(&tmp_rect)), 0) + if int(r0) == 0 { + if e1 != 0 { + err = error(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func write_console_output_character(h syscall.Handle, chars []wchar, pos coord) (err error) { + r0, _, e1 := syscall.Syscall6(proc_write_console_output_character.Addr(), + 5, uintptr(h), uintptr(unsafe.Pointer(&chars[0])), uintptr(len(chars)), + pos.uintptr(), uintptr(unsafe.Pointer(&tmp_arg)), 0) + if int(r0) == 0 { + if e1 != 0 { + err = error(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func write_console_output_attribute(h syscall.Handle, attrs []word, pos coord) (err error) { + r0, _, e1 := syscall.Syscall6(proc_write_console_output_attribute.Addr(), + 5, uintptr(h), uintptr(unsafe.Pointer(&attrs[0])), uintptr(len(attrs)), + pos.uintptr(), uintptr(unsafe.Pointer(&tmp_arg)), 0) + if int(r0) == 0 { + if e1 != 0 { + err = error(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func set_console_cursor_info(h syscall.Handle, info *console_cursor_info) (err error) { + r0, _, e1 := syscall.Syscall(proc_set_console_cursor_info.Addr(), + 2, uintptr(h), uintptr(unsafe.Pointer(info)), 0) + if int(r0) == 0 { + if e1 != 0 { + err = error(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func get_console_cursor_info(h syscall.Handle, info *console_cursor_info) (err error) { + r0, _, e1 := syscall.Syscall(proc_get_console_cursor_info.Addr(), + 2, uintptr(h), uintptr(unsafe.Pointer(info)), 0) + if int(r0) == 0 { + if e1 != 0 { + err = error(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func set_console_cursor_position(h syscall.Handle, pos coord) (err error) { + r0, _, e1 := syscall.Syscall(proc_set_console_cursor_position.Addr(), + 2, uintptr(h), pos.uintptr(), 0) + if int(r0) == 0 { + if e1 != 0 { + err = error(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func read_console_input(h syscall.Handle, record *input_record) (err error) { + r0, _, e1 := syscall.Syscall6(proc_read_console_input.Addr(), + 4, uintptr(h), uintptr(unsafe.Pointer(record)), 1, uintptr(unsafe.Pointer(&tmp_arg)), 0, 0) + if int(r0) == 0 { + if e1 != 0 { + err = error(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func get_console_mode(h syscall.Handle, mode *dword) (err error) { + r0, _, e1 := syscall.Syscall(proc_get_console_mode.Addr(), + 2, uintptr(h), uintptr(unsafe.Pointer(mode)), 0) + if int(r0) == 0 { + if e1 != 0 { + err = error(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func set_console_mode(h syscall.Handle, mode dword) (err error) { + r0, _, e1 := syscall.Syscall(proc_set_console_mode.Addr(), + 2, uintptr(h), uintptr(mode), 0) + if int(r0) == 0 { + if e1 != 0 { + err = error(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func fill_console_output_character(h syscall.Handle, char wchar, n int) (err error) { + r0, _, e1 := syscall.Syscall6(proc_fill_console_output_character.Addr(), + 5, uintptr(h), uintptr(char), uintptr(n), tmp_coord.uintptr(), + uintptr(unsafe.Pointer(&tmp_arg)), 0) + if int(r0) == 0 { + if e1 != 0 { + err = error(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func fill_console_output_attribute(h syscall.Handle, attr word, n int) (err error) { + r0, _, e1 := syscall.Syscall6(proc_fill_console_output_attribute.Addr(), + 5, uintptr(h), uintptr(attr), uintptr(n), tmp_coord.uintptr(), + uintptr(unsafe.Pointer(&tmp_arg)), 0) + if int(r0) == 0 { + if e1 != 0 { + err = error(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func create_event() (out syscall.Handle, err error) { + r0, _, e1 := syscall.Syscall6(proc_create_event.Addr(), + 4, 0, 0, 0, 0, 0, 0) + if int(r0) == 0 { + if e1 != 0 { + err = error(e1) + } else { + err = syscall.EINVAL + } + } + return syscall.Handle(r0), nil +} + +func wait_for_multiple_objects(objects []syscall.Handle) (err error) { + r0, _, e1 := syscall.Syscall6(proc_wait_for_multiple_objects.Addr(), + 4, uintptr(len(objects)), uintptr(unsafe.Pointer(&objects[0])), + 0, 0xFFFFFFFF, 0, 0) + if uint32(r0) == 0xFFFFFFFF { + if e1 != 0 { + err = error(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func set_event(ev syscall.Handle) (err error) { + r0, _, e1 := syscall.Syscall(proc_set_event.Addr(), + 1, uintptr(ev), 0, 0) + if int(r0) == 0 { + if e1 != 0 { + err = error(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +type diff_msg struct { + pos short + lines short + chars []char_info +} + +type input_event struct { + event Event + err error +} + +var ( + orig_cursor_info console_cursor_info + orig_size coord + orig_mode dword + orig_screen syscall.Handle + back_buffer cellbuf + front_buffer cellbuf + term_size coord + input_mode = InputEsc + cursor_x = cursor_hidden + cursor_y = cursor_hidden + foreground = ColorDefault + background = ColorDefault + in syscall.Handle + out syscall.Handle + interrupt syscall.Handle + charbuf []char_info + diffbuf []diff_msg + beg_x = -1 + beg_y = -1 + beg_i = -1 + input_comm = make(chan Event) + interrupt_comm = make(chan struct{}) + cancel_comm = make(chan bool, 1) + cancel_done_comm = make(chan bool) + alt_mode_esc = false + + // these ones just to prevent heap allocs at all costs + tmp_info console_screen_buffer_info + tmp_arg dword + tmp_coord0 = coord{0, 0} + tmp_coord = coord{0, 0} + tmp_rect = small_rect{0, 0, 0, 0} +) + +func get_cursor_position(out syscall.Handle) coord { + err := get_console_screen_buffer_info(out, &tmp_info) + if err != nil { + panic(err) + } + return tmp_info.cursor_position +} + +func get_term_size(out syscall.Handle) coord { + err := get_console_screen_buffer_info(out, &tmp_info) + if err != nil { + panic(err) + } + return tmp_info.size +} + +func get_win_size(out syscall.Handle) coord { + err := get_console_screen_buffer_info(out, &tmp_info) + if err != nil { + panic(err) + } + return coord{ + x: tmp_info.window.right - tmp_info.window.left + 1, + y: tmp_info.window.bottom - tmp_info.window.top + 1, + } +} + +func update_size_maybe() { + size := get_term_size(out) + if size.x != term_size.x || size.y != term_size.y { + term_size = size + back_buffer.resize(int(size.x), int(size.y)) + front_buffer.resize(int(size.x), int(size.y)) + front_buffer.clear() + clear() + + area := int(size.x) * int(size.y) + if cap(charbuf) < area { + charbuf = make([]char_info, 0, area) + } + } +} + +var color_table_bg = []word{ + 0, // default (black) + 0, // black + background_red, + background_green, + background_red | background_green, // yellow + background_blue, + background_red | background_blue, // magenta + background_green | background_blue, // cyan + background_red | background_blue | background_green, // white +} + +var color_table_fg = []word{ + foreground_red | foreground_blue | foreground_green, // default (white) + 0, + foreground_red, + foreground_green, + foreground_red | foreground_green, // yellow + foreground_blue, + foreground_red | foreground_blue, // magenta + foreground_green | foreground_blue, // cyan + foreground_red | foreground_blue | foreground_green, // white +} + +const ( + replacement_char = '\uFFFD' + max_rune = '\U0010FFFF' + surr1 = 0xd800 + surr2 = 0xdc00 + surr3 = 0xe000 + surr_self = 0x10000 +) + +func append_diff_line(y int) int { + n := 0 + for x := 0; x < front_buffer.width; { + cell_offset := y*front_buffer.width + x + back := &back_buffer.cells[cell_offset] + front := &front_buffer.cells[cell_offset] + attr, char := cell_to_char_info(*back) + charbuf = append(charbuf, char_info{attr: attr, char: char[0]}) + *front = *back + n++ + w := runewidth.RuneWidth(back.Ch) + if w == 0 || w == 2 && runewidth.IsAmbiguousWidth(back.Ch) { + w = 1 + } + x += w + // If not CJK, fill trailing space with whitespace + if !is_cjk && w == 2 { + charbuf = append(charbuf, char_info{attr: attr, char: ' '}) + } + } + return n +} + +// compares 'back_buffer' with 'front_buffer' and prepares all changes in the form of +// 'diff_msg's in the 'diff_buf' +func prepare_diff_messages() { + // clear buffers + diffbuf = diffbuf[:0] + charbuf = charbuf[:0] + + var diff diff_msg + gbeg := 0 + for y := 0; y < front_buffer.height; y++ { + same := true + line_offset := y * front_buffer.width + for x := 0; x < front_buffer.width; x++ { + cell_offset := line_offset + x + back := &back_buffer.cells[cell_offset] + front := &front_buffer.cells[cell_offset] + if *back != *front { + same = false + break + } + } + if same && diff.lines > 0 { + diffbuf = append(diffbuf, diff) + diff = diff_msg{} + } + if !same { + beg := len(charbuf) + end := beg + append_diff_line(y) + if diff.lines == 0 { + diff.pos = short(y) + gbeg = beg + } + diff.lines++ + diff.chars = charbuf[gbeg:end] + } + } + if diff.lines > 0 { + diffbuf = append(diffbuf, diff) + diff = diff_msg{} + } +} + +func cell_to_char_info(c Cell) (attr word, wc [2]wchar) { + attr = color_table_fg[c.Fg&0x0F] | color_table_bg[c.Bg&0x0F] + if c.Fg&AttrReverse|c.Bg&AttrReverse != 0 { + attr = (attr&0xF0)>>4 | (attr&0x0F)<<4 + } + if c.Fg&AttrBold != 0 { + attr |= foreground_intensity + } + if c.Bg&AttrBold != 0 { + attr |= background_intensity + } + + r0, r1 := utf16.EncodeRune(c.Ch) + if r0 == 0xFFFD { + wc[0] = wchar(c.Ch) + wc[1] = ' ' + } else { + wc[0] = wchar(r0) + wc[1] = wchar(r1) + } + return +} + +func move_cursor(x, y int) { + err := set_console_cursor_position(out, coord{short(x), short(y)}) + if err != nil { + panic(err) + } +} + +func show_cursor(visible bool) { + var v int32 + if visible { + v = 1 + } + + var info console_cursor_info + info.size = 100 + info.visible = v + err := set_console_cursor_info(out, &info) + if err != nil { + panic(err) + } +} + +func clear() { + var err error + attr, char := cell_to_char_info(Cell{ + ' ', + foreground, + background, + }) + + area := int(term_size.x) * int(term_size.y) + err = fill_console_output_attribute(out, attr, area) + if err != nil { + panic(err) + } + err = fill_console_output_character(out, char[0], area) + if err != nil { + panic(err) + } + if !is_cursor_hidden(cursor_x, cursor_y) { + move_cursor(cursor_x, cursor_y) + } +} + +func key_event_record_to_event(r *key_event_record) (Event, bool) { + if r.key_down == 0 { + return Event{}, false + } + + e := Event{Type: EventKey} + if input_mode&InputAlt != 0 { + if alt_mode_esc { + e.Mod = ModAlt + alt_mode_esc = false + } + if r.control_key_state&(left_alt_pressed|right_alt_pressed) != 0 { + e.Mod = ModAlt + } + } + + ctrlpressed := r.control_key_state&(left_ctrl_pressed|right_ctrl_pressed) != 0 + + if r.virtual_key_code >= vk_f1 && r.virtual_key_code <= vk_f12 { + switch r.virtual_key_code { + case vk_f1: + e.Key = KeyF1 + case vk_f2: + e.Key = KeyF2 + case vk_f3: + e.Key = KeyF3 + case vk_f4: + e.Key = KeyF4 + case vk_f5: + e.Key = KeyF5 + case vk_f6: + e.Key = KeyF6 + case vk_f7: + e.Key = KeyF7 + case vk_f8: + e.Key = KeyF8 + case vk_f9: + e.Key = KeyF9 + case vk_f10: + e.Key = KeyF10 + case vk_f11: + e.Key = KeyF11 + case vk_f12: + e.Key = KeyF12 + default: + panic("unreachable") + } + + return e, true + } + + if r.virtual_key_code <= vk_delete { + switch r.virtual_key_code { + case vk_insert: + e.Key = KeyInsert + case vk_delete: + e.Key = KeyDelete + case vk_home: + e.Key = KeyHome + case vk_end: + e.Key = KeyEnd + case vk_pgup: + e.Key = KeyPgup + case vk_pgdn: + e.Key = KeyPgdn + case vk_arrow_up: + e.Key = KeyArrowUp + case vk_arrow_down: + e.Key = KeyArrowDown + case vk_arrow_left: + e.Key = KeyArrowLeft + case vk_arrow_right: + e.Key = KeyArrowRight + case vk_backspace: + if ctrlpressed { + e.Key = KeyBackspace2 + } else { + e.Key = KeyBackspace + } + case vk_tab: + e.Key = KeyTab + case vk_enter: + e.Key = KeyEnter + case vk_esc: + switch { + case input_mode&InputEsc != 0: + e.Key = KeyEsc + case input_mode&InputAlt != 0: + alt_mode_esc = true + return Event{}, false + } + case vk_space: + if ctrlpressed { + // manual return here, because KeyCtrlSpace is zero + e.Key = KeyCtrlSpace + return e, true + } else { + e.Key = KeySpace + } + } + + if e.Key != 0 { + return e, true + } + } + + if ctrlpressed { + if Key(r.unicode_char) >= KeyCtrlA && Key(r.unicode_char) <= KeyCtrlRsqBracket { + e.Key = Key(r.unicode_char) + if input_mode&InputAlt != 0 && e.Key == KeyEsc { + alt_mode_esc = true + return Event{}, false + } + return e, true + } + switch r.virtual_key_code { + case 192, 50: + // manual return here, because KeyCtrl2 is zero + e.Key = KeyCtrl2 + return e, true + case 51: + if input_mode&InputAlt != 0 { + alt_mode_esc = true + return Event{}, false + } + e.Key = KeyCtrl3 + case 52: + e.Key = KeyCtrl4 + case 53: + e.Key = KeyCtrl5 + case 54: + e.Key = KeyCtrl6 + case 189, 191, 55: + e.Key = KeyCtrl7 + case 8, 56: + e.Key = KeyCtrl8 + } + + if e.Key != 0 { + return e, true + } + } + + if r.unicode_char != 0 { + e.Ch = rune(r.unicode_char) + return e, true + } + + return Event{}, false +} + +func input_event_producer() { + var r input_record + var err error + var last_button Key + var last_state = dword(0) + handles := []syscall.Handle{in, interrupt} + for { + err = wait_for_multiple_objects(handles) + if err != nil { + input_comm <- Event{Type: EventError, Err: err} + } + + select { + case <-cancel_comm: + cancel_done_comm <- true + return + default: + } + + err = read_console_input(in, &r) + if err != nil { + input_comm <- Event{Type: EventError, Err: err} + } + + switch r.event_type { + case key_event: + kr := (*key_event_record)(unsafe.Pointer(&r.event)) + ev, ok := key_event_record_to_event(kr) + if ok { + for i := 0; i < int(kr.repeat_count); i++ { + input_comm <- ev + } + } + case window_buffer_size_event: + sr := *(*window_buffer_size_record)(unsafe.Pointer(&r.event)) + input_comm <- Event{ + Type: EventResize, + Width: int(sr.size.x), + Height: int(sr.size.y), + } + case mouse_event: + mr := *(*mouse_event_record)(unsafe.Pointer(&r.event)) + + // single or double click + switch mr.event_flags { + case 0: + cur_state := mr.button_state + switch { + case last_state&mouse_lmb == 0 && cur_state&mouse_lmb != 0: + last_button = MouseLeft + case last_state&mouse_rmb == 0 && cur_state&mouse_rmb != 0: + last_button = MouseRight + case last_state&mouse_mmb == 0 && cur_state&mouse_mmb != 0: + last_button = MouseMiddle + default: + last_state = cur_state + continue + } + last_state = cur_state + fallthrough + case 2: + input_comm <- Event{ + Type: EventMouse, + Key: last_button, + MouseX: int(mr.mouse_pos.x), + MouseY: int(mr.mouse_pos.y), + } + } + } + } +} diff --git a/Godeps/_workspace/src/github.com/nsf/termbox-go/terminfo.go b/Godeps/_workspace/src/github.com/nsf/termbox-go/terminfo.go new file mode 100644 index 0000000000..3569e3c0e4 --- /dev/null +++ b/Godeps/_workspace/src/github.com/nsf/termbox-go/terminfo.go @@ -0,0 +1,219 @@ +// +build !windows +// This file contains a simple and incomplete implementation of the terminfo +// database. Information was taken from the ncurses manpages term(5) and +// terminfo(5). Currently, only the string capabilities for special keys and for +// functions without parameters are actually used. Colors are still done with +// ANSI escape sequences. Other special features that are not (yet?) supported +// are reading from ~/.terminfo, the TERMINFO_DIRS variable, Berkeley database +// format and extended capabilities. + +package termbox + +import ( + "bytes" + "encoding/binary" + "encoding/hex" + "errors" + "fmt" + "io/ioutil" + "os" + "strings" +) + +const ( + ti_magic = 0432 + ti_header_length = 12 +) + +func load_terminfo() ([]byte, error) { + var data []byte + var err error + + term := os.Getenv("TERM") + if term == "" { + return nil, fmt.Errorf("termbox: TERM not set") + } + + // The following behaviour follows the one described in terminfo(5) as + // distributed by ncurses. + + terminfo := os.Getenv("TERMINFO") + if terminfo != "" { + // if TERMINFO is set, no other directory should be searched + return ti_try_path(terminfo) + } + + // next, consider ~/.terminfo + home := os.Getenv("HOME") + if home != "" { + data, err = ti_try_path(home + "/.terminfo") + if err == nil { + return data, nil + } + } + + // next, TERMINFO_DIRS + dirs := os.Getenv("TERMINFO_DIRS") + if dirs != "" { + for _, dir := range strings.Split(dirs, ":") { + if dir == "" { + // "" -> "/usr/share/terminfo" + dir = "/usr/share/terminfo" + } + data, err = ti_try_path(dir) + if err == nil { + return data, nil + } + } + } + + // fall back to /usr/share/terminfo + return ti_try_path("/usr/share/terminfo") +} + +func ti_try_path(path string) (data []byte, err error) { + // load_terminfo already made sure it is set + term := os.Getenv("TERM") + + // first try, the typical *nix path + terminfo := path + "/" + term[0:1] + "/" + term + data, err = ioutil.ReadFile(terminfo) + if err == nil { + return + } + + // fallback to darwin specific dirs structure + terminfo = path + "/" + hex.EncodeToString([]byte(term[:1])) + "/" + term + data, err = ioutil.ReadFile(terminfo) + return +} + +func setup_term_builtin() error { + name := os.Getenv("TERM") + if name == "" { + return errors.New("termbox: TERM environment variable not set") + } + + for _, t := range terms { + if t.name == name { + keys = t.keys + funcs = t.funcs + return nil + } + } + + compat_table := []struct { + partial string + keys []string + funcs []string + }{ + {"xterm", xterm_keys, xterm_funcs}, + {"rxvt", rxvt_unicode_keys, rxvt_unicode_funcs}, + {"linux", linux_keys, linux_funcs}, + {"Eterm", eterm_keys, eterm_funcs}, + {"screen", screen_keys, screen_funcs}, + // let's assume that 'cygwin' is xterm compatible + {"cygwin", xterm_keys, xterm_funcs}, + {"st", xterm_keys, xterm_funcs}, + } + + // try compatibility variants + for _, it := range compat_table { + if strings.Contains(name, it.partial) { + keys = it.keys + funcs = it.funcs + return nil + } + } + + return errors.New("termbox: unsupported terminal") +} + +func setup_term() (err error) { + var data []byte + var header [6]int16 + var str_offset, table_offset int16 + + data, err = load_terminfo() + if err != nil { + return setup_term_builtin() + } + + rd := bytes.NewReader(data) + // 0: magic number, 1: size of names section, 2: size of boolean section, 3: + // size of numbers section (in integers), 4: size of the strings section (in + // integers), 5: size of the string table + + err = binary.Read(rd, binary.LittleEndian, header[:]) + if err != nil { + return + } + + if (header[1]+header[2])%2 != 0 { + // old quirk to align everything on word boundaries + header[2] += 1 + } + str_offset = ti_header_length + header[1] + header[2] + 2*header[3] + table_offset = str_offset + 2*header[4] + + keys = make([]string, 0xFFFF-key_min) + for i, _ := range keys { + keys[i], err = ti_read_string(rd, str_offset+2*ti_keys[i], table_offset) + if err != nil { + return + } + } + funcs = make([]string, t_max_funcs) + // the last two entries are reserved for mouse. because the table offset is + // not there, the two entries have to fill in manually + for i, _ := range funcs[:len(funcs)-2] { + funcs[i], err = ti_read_string(rd, str_offset+2*ti_funcs[i], table_offset) + if err != nil { + return + } + } + funcs[t_max_funcs-2] = "\x1b[?1000h" + funcs[t_max_funcs-1] = "\x1b[?1000l" + return nil +} + +func ti_read_string(rd *bytes.Reader, str_off, table int16) (string, error) { + var off int16 + + _, err := rd.Seek(int64(str_off), 0) + if err != nil { + return "", err + } + err = binary.Read(rd, binary.LittleEndian, &off) + if err != nil { + return "", err + } + _, err = rd.Seek(int64(table+off), 0) + if err != nil { + return "", err + } + var bs []byte + for { + b, err := rd.ReadByte() + if err != nil { + return "", err + } + if b == byte(0x00) { + break + } + bs = append(bs, b) + } + return string(bs), nil +} + +// "Maps" the function constants from termbox.go to the number of the respective +// string capability in the terminfo file. Taken from (ncurses) term.h. +var ti_funcs = []int16{ + 28, 40, 16, 13, 5, 39, 36, 27, 26, 34, 89, 88, +} + +// Same as above for the special keys. +var ti_keys = []int16{ + 66, 68 /* apparently not a typo; 67 is F10 for whatever reason */, 69, 70, + 71, 72, 73, 74, 75, 67, 216, 217, 77, 59, 76, 164, 82, 81, 87, 61, 79, 83, +} diff --git a/Godeps/_workspace/src/github.com/nsf/termbox-go/terminfo_builtin.go b/Godeps/_workspace/src/github.com/nsf/termbox-go/terminfo_builtin.go new file mode 100644 index 0000000000..6f927c852f --- /dev/null +++ b/Godeps/_workspace/src/github.com/nsf/termbox-go/terminfo_builtin.go @@ -0,0 +1,64 @@ +// +build !windows + +package termbox + +// Eterm +var eterm_keys = []string{ + "\x1b[11~", "\x1b[12~", "\x1b[13~", "\x1b[14~", "\x1b[15~", "\x1b[17~", "\x1b[18~", "\x1b[19~", "\x1b[20~", "\x1b[21~", "\x1b[23~", "\x1b[24~", "\x1b[2~", "\x1b[3~", "\x1b[7~", "\x1b[8~", "\x1b[5~", "\x1b[6~", "\x1b[A", "\x1b[B", "\x1b[D", "\x1b[C", +} +var eterm_funcs = []string{ + "\x1b7\x1b[?47h", "\x1b[2J\x1b[?47l\x1b8", "\x1b[?25h", "\x1b[?25l", "\x1b[H\x1b[2J", "\x1b[m\x0f", "\x1b[4m", "\x1b[1m", "\x1b[5m", "\x1b[7m", "", "", "", "", +} + +// screen +var screen_keys = []string{ + "\x1bOP", "\x1bOQ", "\x1bOR", "\x1bOS", "\x1b[15~", "\x1b[17~", "\x1b[18~", "\x1b[19~", "\x1b[20~", "\x1b[21~", "\x1b[23~", "\x1b[24~", "\x1b[2~", "\x1b[3~", "\x1b[1~", "\x1b[4~", "\x1b[5~", "\x1b[6~", "\x1bOA", "\x1bOB", "\x1bOD", "\x1bOC", +} +var screen_funcs = []string{ + "\x1b[?1049h", "\x1b[?1049l", "\x1b[34h\x1b[?25h", "\x1b[?25l", "\x1b[H\x1b[J", "\x1b[m\x0f", "\x1b[4m", "\x1b[1m", "\x1b[5m", "\x1b[7m", "\x1b[?1h\x1b=", "\x1b[?1l\x1b>", "\x1b[?1000h", "\x1b[?1000l", +} + +// xterm +var xterm_keys = []string{ + "\x1bOP", "\x1bOQ", "\x1bOR", "\x1bOS", "\x1b[15~", "\x1b[17~", "\x1b[18~", "\x1b[19~", "\x1b[20~", "\x1b[21~", "\x1b[23~", "\x1b[24~", "\x1b[2~", "\x1b[3~", "\x1bOH", "\x1bOF", "\x1b[5~", "\x1b[6~", "\x1bOA", "\x1bOB", "\x1bOD", "\x1bOC", +} +var xterm_funcs = []string{ + "\x1b[?1049h", "\x1b[?1049l", "\x1b[?12l\x1b[?25h", "\x1b[?25l", "\x1b[H\x1b[2J", "\x1b(B\x1b[m", "\x1b[4m", "\x1b[1m", "\x1b[5m", "\x1b[7m", "\x1b[?1h\x1b=", "\x1b[?1l\x1b>", "\x1b[?1000h", "\x1b[?1000l", +} + +// rxvt-unicode +var rxvt_unicode_keys = []string{ + "\x1b[11~", "\x1b[12~", "\x1b[13~", "\x1b[14~", "\x1b[15~", "\x1b[17~", "\x1b[18~", "\x1b[19~", "\x1b[20~", "\x1b[21~", "\x1b[23~", "\x1b[24~", "\x1b[2~", "\x1b[3~", "\x1b[7~", "\x1b[8~", "\x1b[5~", "\x1b[6~", "\x1b[A", "\x1b[B", "\x1b[D", "\x1b[C", +} +var rxvt_unicode_funcs = []string{ + "\x1b[?1049h", "\x1b[r\x1b[?1049l", "\x1b[?25h", "\x1b[?25l", "\x1b[H\x1b[2J", "\x1b[m\x1b(B", "\x1b[4m", "\x1b[1m", "\x1b[5m", "\x1b[7m", "\x1b=", "\x1b>", "\x1b[?1000h", "\x1b[?1000l", +} + +// linux +var linux_keys = []string{ + "\x1b[[A", "\x1b[[B", "\x1b[[C", "\x1b[[D", "\x1b[[E", "\x1b[17~", "\x1b[18~", "\x1b[19~", "\x1b[20~", "\x1b[21~", "\x1b[23~", "\x1b[24~", "\x1b[2~", "\x1b[3~", "\x1b[1~", "\x1b[4~", "\x1b[5~", "\x1b[6~", "\x1b[A", "\x1b[B", "\x1b[D", "\x1b[C", +} +var linux_funcs = []string{ + "", "", "\x1b[?25h\x1b[?0c", "\x1b[?25l\x1b[?1c", "\x1b[H\x1b[J", "\x1b[0;10m", "\x1b[4m", "\x1b[1m", "\x1b[5m", "\x1b[7m", "", "", "", "", +} + +// rxvt-256color +var rxvt_256color_keys = []string{ + "\x1b[11~", "\x1b[12~", "\x1b[13~", "\x1b[14~", "\x1b[15~", "\x1b[17~", "\x1b[18~", "\x1b[19~", "\x1b[20~", "\x1b[21~", "\x1b[23~", "\x1b[24~", "\x1b[2~", "\x1b[3~", "\x1b[7~", "\x1b[8~", "\x1b[5~", "\x1b[6~", "\x1b[A", "\x1b[B", "\x1b[D", "\x1b[C", +} +var rxvt_256color_funcs = []string{ + "\x1b7\x1b[?47h", "\x1b[2J\x1b[?47l\x1b8", "\x1b[?25h", "\x1b[?25l", "\x1b[H\x1b[2J", "\x1b[m\x0f", "\x1b[4m", "\x1b[1m", "\x1b[5m", "\x1b[7m", "\x1b=", "\x1b>", "\x1b[?1000h", "\x1b[?1000l", +} + +var terms = []struct { + name string + keys []string + funcs []string +}{ + {"Eterm", eterm_keys, eterm_funcs}, + {"screen", screen_keys, screen_funcs}, + {"xterm", xterm_keys, xterm_funcs}, + {"rxvt-unicode", rxvt_unicode_keys, rxvt_unicode_funcs}, + {"linux", linux_keys, linux_funcs}, + {"rxvt-256color", rxvt_256color_keys, rxvt_256color_funcs}, +} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/.gitignore b/Godeps/_workspace/src/github.com/obscuren/qml/.gitignore deleted file mode 100644 index e4b7f45b77..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -examples/qmlscene/qmlscene -examples/snapweb/snapweb -examples/particle/particle -gl/gengl/gengl -*.swp diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/LICENSE b/Godeps/_workspace/src/github.com/obscuren/qml/LICENSE deleted file mode 100644 index 53320c352b..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/LICENSE +++ /dev/null @@ -1,185 +0,0 @@ -This software is licensed under the LGPLv3, included below. - -As a special exception to the GNU Lesser General Public License version 3 -("LGPL3"), the copyright holders of this Library give you permission to -convey to a third party a Combined Work that links statically or dynamically -to this Library without providing any Minimal Corresponding Source or -Minimal Application Code as set out in 4d or providing the installation -information set out in section 4e, provided that you comply with the other -provisions of LGPL3 and provided that you meet, for the Application the -terms and conditions of the license(s) which apply to the Application. - -Except as stated in this special exception, the provisions of LGPL3 will -continue to comply in full to this Library. If you modify this Library, you -may apply this exception to your version of this Library, but you are not -obliged to do so. If you do not wish to do so, delete this exception -statement from your version. This exception does not (and cannot) modify any -license terms which apply to the Application, with which you must still -comply. - - - GNU LESSER GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - - This version of the GNU Lesser General Public License incorporates -the terms and conditions of version 3 of the GNU General Public -License, supplemented by the additional permissions listed below. - - 0. Additional Definitions. - - As used herein, "this License" refers to version 3 of the GNU Lesser -General Public License, and the "GNU GPL" refers to version 3 of the GNU -General Public License. - - "The Library" refers to a covered work governed by this License, -other than an Application or a Combined Work as defined below. - - An "Application" is any work that makes use of an interface provided -by the Library, but which is not otherwise based on the Library. -Defining a subclass of a class defined by the Library is deemed a mode -of using an interface provided by the Library. - - A "Combined Work" is a work produced by combining or linking an -Application with the Library. The particular version of the Library -with which the Combined Work was made is also called the "Linked -Version". - - The "Minimal Corresponding Source" for a Combined Work means the -Corresponding Source for the Combined Work, excluding any source code -for portions of the Combined Work that, considered in isolation, are -based on the Application, and not on the Linked Version. - - The "Corresponding Application Code" for a Combined Work means the -object code and/or source code for the Application, including any data -and utility programs needed for reproducing the Combined Work from the -Application, but excluding the System Libraries of the Combined Work. - - 1. Exception to Section 3 of the GNU GPL. - - You may convey a covered work under sections 3 and 4 of this License -without being bound by section 3 of the GNU GPL. - - 2. Conveying Modified Versions. - - If you modify a copy of the Library, and, in your modifications, a -facility refers to a function or data to be supplied by an Application -that uses the facility (other than as an argument passed when the -facility is invoked), then you may convey a copy of the modified -version: - - a) under this License, provided that you make a good faith effort to - ensure that, in the event an Application does not supply the - function or data, the facility still operates, and performs - whatever part of its purpose remains meaningful, or - - b) under the GNU GPL, with none of the additional permissions of - this License applicable to that copy. - - 3. Object Code Incorporating Material from Library Header Files. - - The object code form of an Application may incorporate material from -a header file that is part of the Library. You may convey such object -code under terms of your choice, provided that, if the incorporated -material is not limited to numerical parameters, data structure -layouts and accessors, or small macros, inline functions and templates -(ten or fewer lines in length), you do both of the following: - - a) Give prominent notice with each copy of the object code that the - Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the object code with a copy of the GNU GPL and this license - document. - - 4. Combined Works. - - You may convey a Combined Work under terms of your choice that, -taken together, effectively do not restrict modification of the -portions of the Library contained in the Combined Work and reverse -engineering for debugging such modifications, if you also do each of -the following: - - a) Give prominent notice with each copy of the Combined Work that - the Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the Combined Work with a copy of the GNU GPL and this license - document. - - c) For a Combined Work that displays copyright notices during - execution, include the copyright notice for the Library among - these notices, as well as a reference directing the user to the - copies of the GNU GPL and this license document. - - d) Do one of the following: - - 0) Convey the Minimal Corresponding Source under the terms of this - License, and the Corresponding Application Code in a form - suitable for, and under terms that permit, the user to - recombine or relink the Application with a modified version of - the Linked Version to produce a modified Combined Work, in the - manner specified by section 6 of the GNU GPL for conveying - Corresponding Source. - - 1) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (a) uses at run time - a copy of the Library already present on the user's computer - system, and (b) will operate properly with a modified version - of the Library that is interface-compatible with the Linked - Version. - - e) Provide Installation Information, but only if you would otherwise - be required to provide such information under section 6 of the - GNU GPL, and only to the extent that such information is - necessary to install and execute a modified version of the - Combined Work produced by recombining or relinking the - Application with a modified version of the Linked Version. (If - you use option 4d0, the Installation Information must accompany - the Minimal Corresponding Source and Corresponding Application - Code. If you use option 4d1, you must provide the Installation - Information in the manner specified by section 6 of the GNU GPL - for conveying Corresponding Source.) - - 5. Combined Libraries. - - You may place library facilities that are a work based on the -Library side by side in a single library together with other library -facilities that are not Applications and are not covered by this -License, and convey such a combined library under terms of your -choice, if you do both of the following: - - a) Accompany the combined library with a copy of the same work based - on the Library, uncombined with any other library facilities, - conveyed under the terms of this License. - - b) Give prominent notice with the combined library that part of it - is a work based on the Library, and explaining where to find the - accompanying uncombined form of the same work. - - 6. Revised Versions of the GNU Lesser General Public License. - - The Free Software Foundation may publish revised and/or new versions -of the GNU Lesser General Public License from time to time. Such new -versions will be similar in spirit to the present version, but may -differ in detail to address new problems or concerns. - - Each version is given a distinguishing version number. If the -Library as you received it specifies that a certain numbered version -of the GNU Lesser General Public License "or any later version" -applies to it, you have the option of following the terms and -conditions either of that published version or of any later version -published by the Free Software Foundation. If the Library as you -received it does not specify a version number of the GNU Lesser -General Public License, you may choose any version of the GNU Lesser -General Public License ever published by the Free Software Foundation. - - If the Library as you received it specifies that a proxy can decide -whether future versions of the GNU Lesser General Public License shall -apply, that proxy's public statement of acceptance of any version is -permanent authorization for you to choose that version for the -Library. diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/README.md b/Godeps/_workspace/src/github.com/obscuren/qml/README.md deleted file mode 100644 index e969c9e1d1..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/README.md +++ /dev/null @@ -1,157 +0,0 @@ -# QML support for the Go language - -Documentation -------------- - -The introductory documentation as well as the detailed API documentation is -available at [gopkg.in/qml.v1](http://godoc.org/gopkg.in/qml.v1). - - -Blog posts ----------- - -Some relevant blog posts: - - * [Announcing qml v1 for Go](http://blog.labix.org/2014/08/13/announcing-qml-v1-for-go) - * [Packing resources into Go qml binaries](http://blog.labix.org/2014/09/26/packing-resources-into-go-qml-binaries) - * [Go qml contest results](http://blog.labix.org/2014/04/25/qml-contest-results) - * [Arbitrary Qt extensions with Go qml](http://blog.labix.org/2014/03/21/arbitrary-qt-extensions-with-go-qml) - * [The new Go qml OpenGL API](http://blog.labix.org/2014/08/29/the-new-go-qml-opengl-api) - * [QML components with Go and OpenGL](http://blog.labix.org/2013/12/23/qml-components-with-go-and-opengl) - - -Videos ------- - -These introductory videos demonstrate the use of Go QML: - - * [Initial demo and overview](http://youtu.be/FVQlMrPa7lI) - * [Initial demo running on an Ubuntu Touch phone](http://youtu.be/HB-3o8Cysec) - * [Spinning Gopher with Go + QML + OpenGL](http://youtu.be/qkH7_dtOyPk) - * [SameGame QML tutorial in Go](http://youtu.be/z8noX48hiMI) - - -Community ---------- - -Please join the [mailing list](https://groups.google.com/forum/#!forum/go-qml) for -following relevant development news and discussing project details. - - -Installation ------------- - -To try the alpha release you'll need: - - * Go >= 1.2, for the C++ support of _go build_ - * Qt 5.0.X or 5.1.X with the development files - * The Qt headers qmetaobject_p.h and qmetaobjectbuilder_p.h, for the dynamic meta object support - -See below for more details about getting these requirements installed in different environments and operating systems. - -After the requirements are satisfied, _go get_ should work as usual: - - go get gopkg.in/qml.v1 - - -Requirements on Ubuntu ----------------------- - -If you are using Ubuntu, the [Ubuntu SDK](http://developer.ubuntu.com/get-started/) will take care of the Qt dependencies: - - $ sudo add-apt-repository ppa:ubuntu-sdk-team/ppa - $ sudo apt-get update - $ sudo apt-get install qtdeclarative5-dev qtbase5-private-dev qtdeclarative5-private-dev libqt5opengl5-dev qtdeclarative5-qtquick2-plugin - -and Go >= 1.2 may be installed using [godeb](http://blog.labix.org/2013/06/15/in-flight-deb-packages-of-go): - - $ # Pick the right one for your system: 386 or amd64 - $ ARCH=amd64 - $ wget -q https://godeb.s3.amazonaws.com/godeb-$ARCH.tar.gz - $ tar xzvf godeb-$ARCH.tar.gz - godeb - $ sudo mv godeb /usr/local/bin - $ godeb install - $ go get gopkg.in/qml.v1 - - -Requirements on Ubuntu Touch ----------------------------- - -After following the [installation instructions](https://wiki.ubuntu.com/Touch/Install) for Ubuntu Touch, -run the following commands to get a working build environment inside the device: - - $ adb shell - # cd /tmp - # wget https://github.com/go-qml/qml/raw/v1/cmd/ubuntu-touch/setup.sh - # /bin/bash setup.sh - # su - phablet - $ - -At the end of setup.sh, the phablet user will have GOPATH=$HOME in the environment, -the qml package will be built, and the particle example will be built and run. For -stopping it from the command line, run as the phablet user: - - $ ubuntu-app-stop gopkg.in.qml.particle-example - -for running it again: - - $ ubuntu-app-launch gopkg.in.qml.particle-example - -These commands depend on the following file, installed by setup.sh: - - ~/.local/share/applications/gopkg.in.qml.particle-example.desktop - - -Requirements on Mac OS X ------------------------- - -On Mac OS X you'll need QT5. It's easiest to install with Homebrew, a -third-party package management system for OS X. - -Installation instructions for Homebrew are here: - - http://brew.sh/ - -Then, install the qt5 and pkg-config packages: - - $ brew install qt5 pkg-config - -Then, force brew to "link" qt5 (this makes it available under /usr/local): - - $ brew link --force qt5 - -And finally, fetch and install go-qml: - - $ go get gopkg.in/qml.v1 - - -Requirements on Windows ------------------------ - -On Windows you'll need the following: - - * [MinGW gcc](http://sourceforge.net/projects/mingw/files/latest/download) 4.8.1 (install mingw-get and install the gcc from within the setup GUI) - * [Qt 5.1.1](http://download.qt-project.org/official_releases/qt/5.1/5.1.1/qt-windows-opensource-5.1.1-mingw48_opengl-x86-offline.exe) for MinGW 4.8 - * [Go >= 1.2](http://golang.org/doc/install) - -Then, assuming Qt was installed under `C:\Qt5.1.1\`, set up the following environment variables in the respective configuration: - - CPATH += C:\Qt5.1.1\5.1.1\mingw48_32\include - LIBRARY_PATH += C:\Qt5.1.1\5.1.1\mingw48_32\lib - PATH += C:\Qt5.1.1\5.1.1\mingw48_32\bin - -After reopening the shell for the environment changes to take effect, this should work: - - go get gopkg.in/qml.v1 - - -Requirements everywhere else ----------------------------- - -If your operating system does not offer these dependencies readily, -you may still have success installing [Go >= 1.2](http://golang.org/doc/install) -and [Qt 5.0.2](http://download.qt-project.org/archive/qt/5.0/5.0.2/) -directly from the upstreams. Note that you'll likely have to adapt -environment variables to reflect the custom installation path for -these libraries. See the instructions above for examples. diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/all.cpp b/Godeps/_workspace/src/github.com/obscuren/qml/all.cpp deleted file mode 100644 index 965867b1ba..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/all.cpp +++ /dev/null @@ -1,12 +0,0 @@ - -#include "cpp/capi.cpp" -#include "cpp/govalue.cpp" -#include "cpp/govaluetype.cpp" -#include "cpp/idletimer.cpp" -#include "cpp/connector.cpp" - -#include "cpp/moc_all.cpp" - -#ifdef _WIN32 -#include "cpp/mmemwin.cpp" -#endif diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/bridge.go b/Godeps/_workspace/src/github.com/obscuren/qml/bridge.go deleted file mode 100644 index 77b36a566a..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/bridge.go +++ /dev/null @@ -1,681 +0,0 @@ -package qml - -// #cgo CPPFLAGS: -I./cpp -// #cgo CXXFLAGS: -std=c++0x -pedantic-errors -Wall -fno-strict-aliasing -// #cgo LDFLAGS: -lstdc++ -// #cgo pkg-config: Qt5Core Qt5Widgets Qt5Quick -// -// #include -// -// #include "cpp/capi.h" -// -import "C" - -import ( - "fmt" - "os" - "reflect" - "runtime" - "sync/atomic" - "unsafe" - - "gopkg.in/qml.v1/cdata" -) - -var ( - guiFunc = make(chan func()) - guiDone = make(chan struct{}) - guiLock = 0 - guiMainRef uintptr - guiPaintRef uintptr - guiIdleRun int32 - - initialized int32 -) - -func init() { - runtime.LockOSThread() - guiMainRef = cdata.Ref() -} - -// Run runs the main QML event loop, runs f, and then terminates the -// event loop once f returns. -// -// Most functions from the qml package block until Run is called. -// -// The Run function must necessarily be called from the same goroutine as -// the main function or the application may fail when running on Mac OS. -func Run(f func() error) error { - if cdata.Ref() != guiMainRef { - panic("Run must be called on the initial goroutine so apps are portable to Mac OS") - } - if !atomic.CompareAndSwapInt32(&initialized, 0, 1) { - panic("qml.Run called more than once") - } - C.newGuiApplication() - C.idleTimerInit((*C.int32_t)(&guiIdleRun)) - done := make(chan error, 1) - go func() { - RunMain(func() {}) // Block until the event loop is running. - done <- f() - C.applicationExit() - }() - C.applicationExec() - return <-done -} - -// RunMain runs f in the main QML thread and waits for f to return. -// -// This is meant to be used by extensions that integrate directly with the -// underlying QML logic. -func RunMain(f func()) { - ref := cdata.Ref() - if ref == guiMainRef || ref == atomic.LoadUintptr(&guiPaintRef) { - // Already within the GUI or render threads. Attempting to wait would deadlock. - f() - return - } - - // Tell Qt we're waiting for the idle hook to be called. - if atomic.AddInt32(&guiIdleRun, 1) == 1 { - C.idleTimerStart() - } - - // Send f to be executed by the idle hook in the main GUI thread. - guiFunc <- f - - // Wait until f is done executing. - <-guiDone -} - -// Lock freezes all QML activity by blocking the main event loop. -// Locking is necessary before updating shared data structures -// without race conditions. -// -// It's safe to use qml functionality while holding a lock, as -// long as the requests made do not depend on follow up QML -// events to be processed before returning. If that happens, the -// problem will be observed as the application freezing. -// -// The Lock function is reentrant. That means it may be called -// multiple times, and QML activities will only be resumed after -// Unlock is called a matching number of times. -func Lock() { - // TODO Better testing for this. - RunMain(func() { - guiLock++ - }) -} - -// Unlock releases the QML event loop. See Lock for details. -func Unlock() { - RunMain(func() { - if guiLock == 0 { - panic("qml.Unlock called without lock being held") - } - guiLock-- - }) -} - -// Flush synchronously flushes all pending QML activities. -func Flush() { - // TODO Better testing for this. - RunMain(func() { - C.applicationFlushAll() - }) -} - -// Changed notifies all QML bindings that the given field value has changed. -// -// For example: -// -// qml.Changed(&value, &value.Field) -// -func Changed(value, fieldAddr interface{}) { - valuev := reflect.ValueOf(value) - fieldv := reflect.ValueOf(fieldAddr) - for valuev.Kind() == reflect.Ptr { - valuev = valuev.Elem() - } - if fieldv.Kind() != reflect.Ptr { - panic("qml.Changed received non-address value as fieldAddr") - } - fieldv = fieldv.Elem() - if fieldv.Type().Size() == 0 { - panic("cannot report changes on zero-sized fields") - } - offset := fieldv.UnsafeAddr() - valuev.UnsafeAddr() - if !(0 <= offset && offset < valuev.Type().Size()) { - panic("provided field is not a member of the given value") - } - - RunMain(func() { - tinfo := typeInfo(value) - for _, engine := range engines { - fold := engine.values[value] - for fold != nil { - C.goValueActivate(fold.cvalue, tinfo, C.int(offset)) - fold = fold.next - } - // TODO typeNew might also be a linked list keyed by the gvalue. - // This would prevent the iteration and the deferrals. - for fold, _ = range typeNew { - if fold.gvalue == value { - // Activate these later so they don't get recursively moved - // out of typeNew while the iteration is still happening. - defer C.goValueActivate(fold.cvalue, tinfo, C.int(offset)) - } - } - } - }) -} - -// hookIdleTimer is run once per iteration of the Qt event loop, -// within the main GUI thread, but only if at least one goroutine -// has atomically incremented guiIdleRun. -// -//export hookIdleTimer -func hookIdleTimer() { - var f func() - for { - select { - case f = <-guiFunc: - default: - if guiLock > 0 { - f = <-guiFunc - } else { - return - } - } - f() - guiDone <- struct{}{} - atomic.AddInt32(&guiIdleRun, -1) - } -} - -type valueFold struct { - engine *Engine - gvalue interface{} - cvalue unsafe.Pointer - init reflect.Value - prev *valueFold - next *valueFold - owner valueOwner -} - -type valueOwner uint8 - -const ( - cppOwner = 1 << iota - jsOwner -) - -// wrapGoValue creates a new GoValue object in C++ land wrapping -// the Go value contained in the given interface. -// -// This must be run from the main GUI thread. -func wrapGoValue(engine *Engine, gvalue interface{}, owner valueOwner) (cvalue unsafe.Pointer) { - gvaluev := reflect.ValueOf(gvalue) - gvaluek := gvaluev.Kind() - if gvaluek == reflect.Struct && !hashable(gvalue) { - name := gvaluev.Type().Name() - if name != "" { - name = " (" + name + ")" - } - panic("cannot hand an unhashable struct value" + name + " to QML logic; use its address instead") - } - if gvaluek == reflect.Ptr && gvaluev.Elem().Kind() == reflect.Ptr { - panic("cannot hand pointer of pointer to QML logic; use a simple pointer instead") - } - - painting := cdata.Ref() == atomic.LoadUintptr(&guiPaintRef) - - // Cannot reuse a jsOwner because the QML runtime may choose to destroy - // the value _after_ we hand it a new reference to the same value. - // See issue #68 for details. - prev, ok := engine.values[gvalue] - if ok && (prev.owner == cppOwner || painting) { - return prev.cvalue - } - - if painting { - panic("cannot allocate new objects while painting") - } - - parent := nilPtr - if owner == cppOwner { - parent = engine.addr - } - fold := &valueFold{ - engine: engine, - gvalue: gvalue, - owner: owner, - } - fold.cvalue = C.newGoValue(unsafe.Pointer(fold), typeInfo(gvalue), parent) - if prev != nil { - // Put new fold first so the single cppOwner, if any, is always the first entry. - fold.next = prev - prev.prev = fold - } - engine.values[gvalue] = fold - - //fmt.Printf("[DEBUG] value alive (wrapped): cvalue=%x gvalue=%x/%#v\n", fold.cvalue, addrOf(fold.gvalue), fold.gvalue) - stats.valuesAlive(+1) - C.engineSetContextForObject(engine.addr, fold.cvalue) - switch owner { - case cppOwner: - C.engineSetOwnershipCPP(engine.addr, fold.cvalue) - case jsOwner: - C.engineSetOwnershipJS(engine.addr, fold.cvalue) - } - return fold.cvalue -} - -func addrOf(gvalue interface{}) uintptr { - return reflect.ValueOf(gvalue).Pointer() -} - -// typeNew holds fold values that are created by registered types. -// These values are special in two senses: first, they don't have a -// reference to an engine before they are used in a context that can -// set the reference; second, these values always hold a new cvalue, -// because they are created as a side-effect of the registered type -// being instantiated (it's too late to reuse an existent cvalue). -// -// For these reasons, typeNew holds the fold for these values until -// their engine is known, and once it's known they may have to be -// added to the linked list, since mulitple references for the same -// gvalue may occur. -var typeNew = make(map[*valueFold]bool) - -//export hookGoValueTypeNew -func hookGoValueTypeNew(cvalue unsafe.Pointer, specp unsafe.Pointer) (foldp unsafe.Pointer) { - // Initialization is postponed until the engine is available, so that - // we can hand Init the qml.Object that represents the object. - init := reflect.ValueOf((*TypeSpec)(specp).Init) - fold := &valueFold{ - init: init, - gvalue: reflect.New(init.Type().In(0).Elem()).Interface(), - cvalue: cvalue, - owner: jsOwner, - } - typeNew[fold] = true - //fmt.Printf("[DEBUG] value alive (type-created): cvalue=%x gvalue=%x/%#v\n", fold.cvalue, addrOf(fold.gvalue), fold.gvalue) - stats.valuesAlive(+1) - return unsafe.Pointer(fold) -} - -//export hookGoValueDestroyed -func hookGoValueDestroyed(enginep unsafe.Pointer, foldp unsafe.Pointer) { - fold := (*valueFold)(foldp) - engine := fold.engine - if engine == nil { - before := len(typeNew) - delete(typeNew, fold) - if len(typeNew) == before { - panic("destroying value without an associated engine; who created the value?") - } - } else if engines[engine.addr] == nil { - // Must never do that. The engine holds memory references that C++ depends on. - panic(fmt.Sprintf("engine %p was released from global list while its values were still alive", engine.addr)) - } else { - switch { - case fold.prev != nil: - fold.prev.next = fold.next - if fold.next != nil { - fold.next.prev = fold.prev - } - case fold.next != nil: - fold.next.prev = fold.prev - if fold.prev != nil { - fold.prev.next = fold.next - } else { - fold.engine.values[fold.gvalue] = fold.next - } - default: - before := len(engine.values) - delete(engine.values, fold.gvalue) - if len(engine.values) == before { - panic("destroying value that knows about the engine, but the engine doesn't know about the value; who cleared the engine?") - } - if engine.destroyed && len(engine.values) == 0 { - delete(engines, engine.addr) - } - } - } - //fmt.Printf("[DEBUG] value destroyed: cvalue=%x gvalue=%x/%#v\n", fold.cvalue, addrOf(fold.gvalue), fold.gvalue) - stats.valuesAlive(-1) -} - -func deref(value reflect.Value) reflect.Value { - for { - switch value.Kind() { - case reflect.Ptr, reflect.Interface: - value = value.Elem() - continue - } - return value - } - panic("cannot happen") -} - -//export hookGoValueReadField -func hookGoValueReadField(enginep, foldp unsafe.Pointer, reflectIndex, getIndex, setIndex C.int, resultdv *C.DataValue) { - fold := ensureEngine(enginep, foldp) - - var field reflect.Value - if getIndex >= 0 { - field = reflect.ValueOf(fold.gvalue).Method(int(getIndex)).Call(nil)[0] - } else { - field = deref(reflect.ValueOf(fold.gvalue)).Field(int(reflectIndex)) - } - field = deref(field) - - // Cannot compare Type directly as field may be invalid (nil). - if field.Kind() == reflect.Slice && field.Type() == typeObjSlice { - // TODO Handle getters that return []qml.Object. - // TODO Handle other GoValue slices (!= []qml.Object). - resultdv.dataType = C.DTListProperty - *(*unsafe.Pointer)(unsafe.Pointer(&resultdv.data)) = C.newListProperty(foldp, C.intptr_t(reflectIndex), C.intptr_t(setIndex)) - return - } - - fieldk := field.Kind() - if fieldk == reflect.Slice || fieldk == reflect.Struct && field.Type() != typeRGBA { - if field.CanAddr() { - field = field.Addr() - } else if !hashable(field.Interface()) { - t := reflect.ValueOf(fold.gvalue).Type() - for t.Kind() == reflect.Ptr { - t = t.Elem() - } - panic(fmt.Sprintf("cannot access unaddressable and unhashable struct value on interface field %s.%s; value: %#v", t.Name(), t.Field(int(reflectIndex)).Name, field.Interface())) - } - } - var gvalue interface{} - if field.IsValid() { - gvalue = field.Interface() - } - - // TODO Strings are being passed in an unsafe manner here. There is a - // small chance that the field is changed and the garbage collector is run - // before C++ has a chance to look at the data. We can solve this problem - // by queuing up values in a stack, and cleaning the stack when the - // idle timer fires next. - packDataValue(gvalue, resultdv, fold.engine, jsOwner) -} - -//export hookGoValueWriteField -func hookGoValueWriteField(enginep, foldp unsafe.Pointer, reflectIndex, setIndex C.int, assigndv *C.DataValue) { - fold := ensureEngine(enginep, foldp) - v := reflect.ValueOf(fold.gvalue) - ve := v - for ve.Type().Kind() == reflect.Ptr { - ve = ve.Elem() - } - var field, setMethod reflect.Value - if reflectIndex >= 0 { - // It's a real field rather than a getter. - field = ve.Field(int(reflectIndex)) - } - if setIndex >= 0 { - // It has a setter. - setMethod = v.Method(int(setIndex)) - } - - assign := unpackDataValue(assigndv, fold.engine) - - // TODO Return false to the call site if it fails. That's how Qt seems to handle it internally. - err := convertAndSet(field, reflect.ValueOf(assign), setMethod) - if err != nil { - panic(err.Error()) - } -} - -func convertAndSet(to, from reflect.Value, setMethod reflect.Value) (err error) { - var toType reflect.Type - if setMethod.IsValid() { - toType = setMethod.Type().In(0) - } else { - toType = to.Type() - } - fromType := from.Type() - defer func() { - // TODO This is catching more than it should. There are calls - // to custom code below that should be isolated. - if v := recover(); v != nil { - err = fmt.Errorf("cannot use %s as a %s", fromType, toType) - } - }() - if fromType == typeList && toType.Kind() == reflect.Slice { - list := from.Interface().(*List) - from = reflect.MakeSlice(toType, len(list.data), len(list.data)) - elemType := toType.Elem() - for i, elem := range list.data { - from.Index(i).Set(reflect.ValueOf(elem).Convert(elemType)) - } - } else if fromType == typeMap && toType.Kind() == reflect.Map { - qmap := from.Interface().(*Map) - from = reflect.MakeMap(toType) - elemType := toType.Elem() - for i := 0; i < len(qmap.data); i += 2 { - key := reflect.ValueOf(qmap.data[i]) - val := reflect.ValueOf(qmap.data[i+1]) - if val.Type() != elemType { - val = val.Convert(elemType) - } - from.SetMapIndex(key, val) - } - } else if toType != fromType { - from = from.Convert(toType) - } - if setMethod.IsValid() { - setMethod.Call([]reflect.Value{from}) - } else { - to.Set(from) - } - return nil -} - -var ( - dataValueSize = uintptr(unsafe.Sizeof(C.DataValue{})) - dataValueArray [C.MaxParams]C.DataValue -) - -//export hookGoValueCallMethod -func hookGoValueCallMethod(enginep, foldp unsafe.Pointer, reflectIndex C.int, args *C.DataValue) { - fold := ensureEngine(enginep, foldp) - v := reflect.ValueOf(fold.gvalue) - - // TODO Must assert that v is necessarily a pointer here, but we shouldn't have to manipulate - // gvalue here for that. This should happen in a sensible place in the wrapping functions - // that can still error out to the user in due time. - - method := v.Method(int(reflectIndex)) - methodt := method.Type() - methodName := v.Type().Method(int(reflectIndex)).Name - - // TODO Ensure methods with more parameters than this are not registered. - var params [C.MaxParams]reflect.Value - var err error - - numIn := methodt.NumIn() - for i := 0; i < numIn; i++ { - paramdv := (*C.DataValue)(unsafe.Pointer(uintptr(unsafe.Pointer(args)) + (uintptr(i)+1)*dataValueSize)) - param := reflect.ValueOf(unpackDataValue(paramdv, fold.engine)) - if argt := methodt.In(i); param.Type() != argt { - param, err = convertParam(methodName, i, param, argt) - if err != nil { - panic(err.Error()) - } - } - params[i] = param - } - - result := method.Call(params[:numIn]) - - if len(result) == 1 { - packDataValue(result[0].Interface(), args, fold.engine, jsOwner) - } else if len(result) > 1 { - if len(result) > len(dataValueArray) { - panic("function has too many results") - } - for i, v := range result { - packDataValue(v.Interface(), &dataValueArray[i], fold.engine, jsOwner) - } - args.dataType = C.DTVariantList - *(*unsafe.Pointer)(unsafe.Pointer(&args.data)) = C.newVariantList(&dataValueArray[0], C.int(len(result))) - } -} - -func convertParam(methodName string, index int, param reflect.Value, argt reflect.Type) (reflect.Value, error) { - out := reflect.New(argt).Elem() - err := convertAndSet(out, param, reflect.Value{}) - if err != nil { - err = fmt.Errorf("cannot convert parameter %d of method %s from %s to %s; provided value: %#v", - index, methodName, param.Type(), argt, param.Interface()) - return reflect.Value{}, err - } - return out, nil -} - -func printPaintPanic() { - if v := recover(); v != nil { - buf := make([]byte, 8192) - runtime.Stack(buf, false) - fmt.Fprintf(os.Stderr, "panic while painting: %s\n\n%s", v, buf) - } -} - -//export hookGoValuePaint -func hookGoValuePaint(enginep, foldp unsafe.Pointer, reflectIndex C.intptr_t) { - // Besides a convenience this is a workaround for http://golang.org/issue/8588 - defer printPaintPanic() - defer atomic.StoreUintptr(&guiPaintRef, 0) - - // The main GUI thread is mutex-locked while paint methods are called, - // so no two paintings should be happening at the same time. - atomic.StoreUintptr(&guiPaintRef, cdata.Ref()) - - fold := ensureEngine(enginep, foldp) - if fold.init.IsValid() { - return - } - - painter := &Painter{engine: fold.engine, obj: &Common{fold.cvalue, fold.engine}} - v := reflect.ValueOf(fold.gvalue) - method := v.Method(int(reflectIndex)) - method.Call([]reflect.Value{reflect.ValueOf(painter)}) -} - -func ensureEngine(enginep, foldp unsafe.Pointer) *valueFold { - fold := (*valueFold)(foldp) - if fold.engine != nil { - if fold.init.IsValid() { - initGoType(fold) - } - return fold - } - - if enginep == nilPtr { - panic("accessing value without an engine pointer; who created the value?") - } - engine := engines[enginep] - if engine == nil { - panic("unknown engine pointer; who created the engine?") - } - fold.engine = engine - prev := engine.values[fold.gvalue] - if prev != nil { - for prev.next != nil { - prev = prev.next - } - prev.next = fold - fold.prev = prev - } else { - engine.values[fold.gvalue] = fold - } - before := len(typeNew) - delete(typeNew, fold) - if len(typeNew) == before { - panic("value had no engine, but was not created by a registered type; who created the value?") - } - initGoType(fold) - return fold -} - -func initGoType(fold *valueFold) { - if cdata.Ref() == atomic.LoadUintptr(&guiPaintRef) { - go RunMain(func() { _initGoType(fold, true) }) - } else { - _initGoType(fold, false) - } -} - -func _initGoType(fold *valueFold, schedulePaint bool) { - if !fold.init.IsValid() { - return - } - // TODO Would be good to preserve identity on the Go side. See unpackDataValue as well. - obj := &Common{engine: fold.engine, addr: fold.cvalue} - fold.init.Call([]reflect.Value{reflect.ValueOf(fold.gvalue), reflect.ValueOf(obj)}) - fold.init = reflect.Value{} - if schedulePaint { - obj.Call("update") - } -} - -//export hookPanic -func hookPanic(message *C.char) { - defer C.free(unsafe.Pointer(message)) - panic(C.GoString(message)) -} - -func listSlice(fold *valueFold, reflectIndex C.intptr_t) *[]Object { - field := deref(reflect.ValueOf(fold.gvalue)).Field(int(reflectIndex)) - return field.Addr().Interface().(*[]Object) -} - -//export hookListPropertyAt -func hookListPropertyAt(foldp unsafe.Pointer, reflectIndex, setIndex C.intptr_t, index C.int) (objp unsafe.Pointer) { - fold := (*valueFold)(foldp) - slice := listSlice(fold, reflectIndex) - return (*slice)[int(index)].Common().addr -} - -//export hookListPropertyCount -func hookListPropertyCount(foldp unsafe.Pointer, reflectIndex, setIndex C.intptr_t) C.int { - fold := (*valueFold)(foldp) - slice := listSlice(fold, reflectIndex) - return C.int(len(*slice)) -} - -//export hookListPropertyAppend -func hookListPropertyAppend(foldp unsafe.Pointer, reflectIndex, setIndex C.intptr_t, objp unsafe.Pointer) { - fold := (*valueFold)(foldp) - slice := listSlice(fold, reflectIndex) - var objdv C.DataValue - objdv.dataType = C.DTObject - *(*unsafe.Pointer)(unsafe.Pointer(&objdv.data)) = objp - newslice := append(*slice, unpackDataValue(&objdv, fold.engine).(Object)) - if setIndex >= 0 { - reflect.ValueOf(fold.gvalue).Method(int(setIndex)).Call([]reflect.Value{reflect.ValueOf(newslice)}) - } else { - *slice = newslice - } -} - -//export hookListPropertyClear -func hookListPropertyClear(foldp unsafe.Pointer, reflectIndex, setIndex C.intptr_t) { - fold := (*valueFold)(foldp) - slice := listSlice(fold, reflectIndex) - newslice := (*slice)[0:0] - if setIndex >= 0 { - reflect.ValueOf(fold.gvalue).Method(int(setIndex)).Call([]reflect.Value{reflect.ValueOf(newslice)}) - } else { - for i := range *slice { - (*slice)[i] = nil - } - *slice = newslice - } -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/cdata/cdata.go b/Godeps/_workspace/src/github.com/obscuren/qml/cdata/cdata.go deleted file mode 100644 index 6f13b810f1..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/cdata/cdata.go +++ /dev/null @@ -1,6 +0,0 @@ -// Package cdata supports the implementation of the qml package. -package cdata - -func Ref() uintptr - -func Addrs() (uintptr, uintptr) diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/cdata/cdata12.c b/Godeps/_workspace/src/github.com/obscuren/qml/cdata/cdata12.c deleted file mode 100644 index 2e60abfa24..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/cdata/cdata12.c +++ /dev/null @@ -1,18 +0,0 @@ -// +build !go1.4 - -#include "runtime.h" - -void ·Ref(uintptr ref) { - ref = (uintptr)g->m; - FLUSH(&ref); -} - -void runtime·main(void); -void main·main(void); - -void ·Addrs(uintptr rmain, uintptr mmain) { - rmain = (uintptr)runtime·main; - mmain = (uintptr)main·main; - FLUSH(&rmain); - FLUSH(&mmain); -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/cdata/cdata14_386.s b/Godeps/_workspace/src/github.com/obscuren/qml/cdata/cdata14_386.s deleted file mode 100644 index 7dae9b9616..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/cdata/cdata14_386.s +++ /dev/null @@ -1,17 +0,0 @@ -// +build go1.4 - -#include "textflag.h" - -TEXT ·Ref(SB),NOSPLIT,$4-4 - CALL runtime·acquirem(SB) - MOVL 0(SP), AX - MOVL AX, ret+0(FP) - CALL runtime·releasem(SB) - RET - -TEXT ·Addrs(SB),NOSPLIT,$0-8 - MOVL $runtime·main(SB), AX - MOVL AX, ret+0(FP) - MOVL $runtime·main_main(SB), AX - MOVL AX, ret+8(FP) - RET diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/cdata/cdata14_amd64.s b/Godeps/_workspace/src/github.com/obscuren/qml/cdata/cdata14_amd64.s deleted file mode 100644 index 83cc22c9c4..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/cdata/cdata14_amd64.s +++ /dev/null @@ -1,17 +0,0 @@ -// +build go1.4 - -#include "textflag.h" - -TEXT ·Ref(SB),NOSPLIT,$8-8 - CALL runtime·acquirem(SB) - MOVQ 0(SP), AX - MOVQ AX, ret+0(FP) - CALL runtime·releasem(SB) - RET - -TEXT ·Addrs(SB),NOSPLIT,$0-16 - MOVQ $runtime·main(SB), AX - MOVQ AX, ret+0(FP) - MOVQ $runtime·main_main(SB), AX - MOVQ AX, ret+8(FP) - RET diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/cdata/cdata14_arm.s b/Godeps/_workspace/src/github.com/obscuren/qml/cdata/cdata14_arm.s deleted file mode 100644 index c66bbafbfe..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/cdata/cdata14_arm.s +++ /dev/null @@ -1,18 +0,0 @@ -// +build go1.4 - -#include "textflag.h" - -TEXT ·Ref(SB),NOSPLIT,$4-4 - BL runtime·acquirem(SB) - MOVW 4(R13), R0 - MOVW R0, ret+0(FP) - MOVW R0, 4(R13) - BL runtime·releasem(SB) - RET - -TEXT ·Addrs(SB),NOSPLIT,$0-8 - MOVW $runtime·main(SB), R0 - MOVW R0, ret+0(FP) - MOVW $runtime·main_main(SB), R0 - MOVW R0, ret+4(FP) - RET diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/cdata/cdata_test.go b/Godeps/_workspace/src/github.com/obscuren/qml/cdata/cdata_test.go deleted file mode 100644 index e7c3f33c5b..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/cdata/cdata_test.go +++ /dev/null @@ -1,42 +0,0 @@ -package cdata - -import ( - "runtime" - "sync" - "testing" -) - -type refPair struct { - ref1, ref2 uintptr -} - -func TestRef(t *testing.T) { - const N = 10 - runtime.LockOSThread() - exit := sync.WaitGroup{} - exit.Add(1) - defer exit.Done() - wg := sync.WaitGroup{} - wg.Add(N) - ch := make(chan refPair) - for i := 0; i < N; i++ { - go func() { - runtime.LockOSThread() - wg.Done() - ch <- refPair{Ref(), Ref()} - exit.Wait() - }() - } - wg.Wait() - refs := make(map[uintptr]bool) - for i := 0; i < N; i++ { - pair := <-ch - if pair.ref1 != pair.ref2 { - t.Fatalf("found inconsistent ref: %d != %d", pair.ref1, pair.ref2) - } - if refs[pair.ref1] { - t.Fatalf("found duplicated ref: %d", pair.ref1) - } - refs[pair.ref1] = true - } -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/cmd/genqrc/main.go b/Godeps/_workspace/src/github.com/obscuren/qml/cmd/genqrc/main.go deleted file mode 100644 index a601d81266..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/cmd/genqrc/main.go +++ /dev/null @@ -1,218 +0,0 @@ - -// XXX: The documentation is duplicated here and in the the doc variable -// below. Update both at the same time. - -// Command genqrc packs resource files into the Go binary. -// -// Usage: genqrc [options] [ ...] -// -// The genqrc tool packs all resource files under the provided subdirectories into -// a single qrc.go file that may be built into the generated binary. Bundled files -// may then be loaded by Go or QML code under the URL "qrc:///some/path", where -// "some/path" matches the original path for the resource file locally. -// -// For example, the following will load a .qml file from the resource pack, and -// that file may in turn reference other content (code, images, etc) in the pack: -// -// component, err := engine.LoadFile("qrc://path/to/file.qml") -// -// Starting with Go 1.4, this tool may be conveniently run by the "go generate" -// subcommand by adding a line similar to the following one to any existent .go -// file in the project (assuming the subdirectories ./code/ and ./images/ exist): -// -// //go:generate genqrc code images -// -// Then, just run "go generate" to update the qrc.go file. -// -// During development, the generated qrc.go can repack the filesystem content at -// runtime to avoid the process of regenerating the qrc.go file and rebuilding the -// application to test every minor change made. Runtime repacking is enabled by -// setting the QRC_REPACK environment variable to 1: -// -// export QRC_REPACK=1 -// -// This does not update the static content in the qrc.go file, though, so after -// the changes are performed, genqrc must be run again to update the content that -// will ship with built binaries. -package main - -import ( - "flag" - "fmt" - "io/ioutil" - "os" - "path/filepath" - "text/template" - - "gopkg.in/qml.v1" -) - -const doc = ` -Usage: genqrc [options] [ ...] - -The genqrc tool packs all resource files under the provided subdirectories into -a single qrc.go file that may be built into the generated binary. Bundled files -may then be loaded by Go or QML code under the URL "qrc:///some/path", where -"some/path" matches the original path for the resource file locally. - -For example, the following will load a .qml file from the resource pack, and -that file may in turn reference other content (code, images, etc) in the pack: - - component, err := engine.LoadFile("qrc://path/to/file.qml") - -Starting with Go 1.4, this tool may be conveniently run by the "go generate" -subcommand by adding a line similar to the following one to any existent .go -file in the project (assuming the subdirectories ./code/ and ./images/ exist): - - //go:generate genqrc code images - -Then, just run "go generate" to update the qrc.go file. - -During development, the generated qrc.go can repack the filesystem content at -runtime to avoid the process of regenerating the qrc.go file and rebuilding the -application to test every minor change made. Runtime repacking is enabled by -setting the QRC_REPACK environment variable to 1: - - export QRC_REPACK=1 - -This does not update the static content in the qrc.go file, though, so after -the changes are performed, genqrc must be run again to update the content that -will ship with built binaries. -` - -// XXX: The documentation is duplicated here and in the the package comment -// above. Update both at the same time. - -var packageName = flag.String("package", "main", "package name that qrc.go will be under (not needed for go generate)") - -func main() { - flag.Usage = func() { - fmt.Fprintf(os.Stderr, "%s", doc) - flag.PrintDefaults() - } - flag.Parse() - if err := run(); err != nil { - fmt.Fprintf(os.Stderr, "error: %v\n", err) - os.Exit(1) - } -} - -func run() error { - subdirs := flag.Args() - if len(subdirs) == 0 { - return fmt.Errorf("must provide at least one subdirectory path") - } - - var rp qml.ResourcesPacker - - for _, subdir := range flag.Args() { - err := filepath.Walk(subdir, func(path string, info os.FileInfo, err error) error { - if err != nil { - return err - } - if info.IsDir() { - return nil - } - data, err := ioutil.ReadFile(path) - if err != nil { - return err - } - rp.Add(filepath.ToSlash(path), data) - return nil - }) - if err != nil { - return err - } - } - - resdata := rp.Pack().Bytes() - - f, err := os.Create("qrc.go") - if err != nil { - return err - } - defer f.Close() - - data := templateData{ - PackageName: *packageName, - SubDirs: subdirs, - ResourcesData: resdata, - } - - // $GOPACKAGE is set automatically by go generate. - if pkgname := os.Getenv("GOPACKAGE"); pkgname != "" { - data.PackageName = pkgname - } - - return tmpl.Execute(f, data) -} - -type templateData struct { - PackageName string - SubDirs []string - ResourcesData []byte -} - -func buildTemplate(name, content string) *template.Template { - return template.Must(template.New(name).Parse(content)) -} - -var tmpl = buildTemplate("qrc.go", `package {{.PackageName}} - -// This file is automatically generated by gopkg.in/qml.v1/cmd/genqrc - -import ( - "io/ioutil" - "os" - "path/filepath" - - "gopkg.in/qml.v1" -) - -func init() { - var r *qml.Resources - var err error - if os.Getenv("QRC_REPACK") == "1" { - err = qrcRepackResources() - if err != nil { - panic("cannot repack qrc resources: " + err.Error()) - } - r, err = qml.ParseResources(qrcResourcesRepacked) - } else { - r, err = qml.ParseResourcesString(qrcResourcesData) - } - if err != nil { - panic("cannot parse bundled resources data: " + err.Error()) - } - qml.LoadResources(r) -} - -func qrcRepackResources() error { - subdirs := {{printf "%#v" .SubDirs}} - var rp qml.ResourcesPacker - for _, subdir := range subdirs { - err := filepath.Walk(subdir, func(path string, info os.FileInfo, err error) error { - if err != nil { - return err - } - if info.IsDir() { - return nil - } - data, err := ioutil.ReadFile(path) - if err != nil { - return err - } - rp.Add(filepath.ToSlash(path), data) - return nil - }) - if err != nil { - return err - } - } - qrcResourcesRepacked = rp.Pack().Bytes() - return nil -} - -var qrcResourcesRepacked []byte -var qrcResourcesData = {{printf "%q" .ResourcesData}} -`) diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/cmd/ubuntu-touch/particle.desktop b/Godeps/_workspace/src/github.com/obscuren/qml/cmd/ubuntu-touch/particle.desktop deleted file mode 100644 index 76a62cb50b..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/cmd/ubuntu-touch/particle.desktop +++ /dev/null @@ -1,15 +0,0 @@ -[Desktop Entry] -Encoding=UTF-8 -Version=1.0 -Type=Application -Terminal=false -Path=/home/phablet/src/gopkg.in/qml.v0/examples/particle/ -Exec=./particle -Icon=properties -Name=Particle Example -X-Ubuntu-Touch=true -X-Ubuntu-StageHint=SideStage - -# Copy this file to: -# -# ~phablet/.local/share/applications/gopkg.in.qml.particle-example.desktop diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/cmd/ubuntu-touch/setup.sh b/Godeps/_workspace/src/github.com/obscuren/qml/cmd/ubuntu-touch/setup.sh deleted file mode 100644 index 1d0454110f..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/cmd/ubuntu-touch/setup.sh +++ /dev/null @@ -1,41 +0,0 @@ -#!/bin/sh - -set -e - -if [ "$USER" != "root" ]; then - echo 'This script must be run as root.' - exit 1 -fi - -echo 'Remounting root as read-write ------------------------------------------------' - -mount -o remount,rw / - -echo 'Installing Go and dependencies -----------------------------------------------' - -apt-get update -apt-get install -y \ - golang-go g++ git pkg-config ubuntu-app-launch\ - qtbase5-private-dev qtdeclarative5-private-dev libqt5opengl5-dev -apt-get clean - -echo 'Setting up environment for phablet user --------------------------------------' - -echo 'export GOPATH=$HOME' >> ~phablet/.bash_profile - -echo 'Fetching the qml package -----------------------------------------------------' - -su -l phablet -c 'go get gopkg.in/qml.v0' - -echo 'Installing the .desktop file for the particle example ------------------------' - -APP_ID='gopkg.in.qml.particle-example' -cp ~phablet/src/gopkg.in/qml.v*/cmd/ubuntu-touch/particle.desktop ~phablet/.local/share/applications/$APP_ID.desktop - -echo 'Building and launching particle example --------------------------------------' - -su -l phablet -c 'cd $HOME/src/gopkg.in/qml.v0/examples/particle; go build' - -echo 'Launching particle example ---------------------------------------------------' - -su -l phablet -c "ubuntu-app-launch $APP_ID" diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/cpp/capi.cpp b/Godeps/_workspace/src/github.com/obscuren/qml/cpp/capi.cpp deleted file mode 100644 index 024e5ec9ca..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/cpp/capi.cpp +++ /dev/null @@ -1,884 +0,0 @@ -#include -#include -#include -#include -#include -#include - -#include - -#include "govalue.h" -#include "govaluetype.h" -#include "connector.h" -#include "capi.h" - -static char *local_strdup(const char *str) -{ - char *strcopy = 0; - if (str) { - size_t len = strlen(str) + 1; - strcopy = (char *)malloc(len); - memcpy(strcopy, str, len); - } - return strcopy; -} - -error *errorf(const char *format, ...) -{ - va_list ap; - va_start(ap, format); - QString str = QString().vsprintf(format, ap); - va_end(ap); - QByteArray ba = str.toUtf8(); - return local_strdup(ba.constData()); -} - -void panicf(const char *format, ...) -{ - va_list ap; - va_start(ap, format); - QString str = QString().vsprintf(format, ap); - va_end(ap); - QByteArray ba = str.toUtf8(); - hookPanic(local_strdup(ba.constData())); -} - -void newGuiApplication() -{ - static char empty[1] = {0}; - static char *argv[] = {empty, 0}; - static int argc = 1; - new QApplication(argc, argv); - - // The event loop should never die. - qApp->setQuitOnLastWindowClosed(false); -} - -void applicationExec() -{ - qApp->exec(); -} - -void applicationExit() -{ - qApp->exit(0); -} - -void applicationFlushAll() -{ - qApp->processEvents(); -} - -void *currentThread() -{ - return QThread::currentThread(); -} - -void *appThread() -{ - return QCoreApplication::instance()->thread(); -} - -QQmlEngine_ *newEngine(QObject_ *parent) -{ - return new QQmlEngine(reinterpret_cast(parent)); -} - -QQmlContext_ *engineRootContext(QQmlEngine_ *engine) -{ - return reinterpret_cast(engine)->rootContext(); -} - -void engineSetContextForObject(QQmlEngine_ *engine, QObject_ *object) -{ - QQmlEngine *qengine = reinterpret_cast(engine); - QObject *qobject = reinterpret_cast(object); - - QQmlEngine::setContextForObject(qobject, qengine->rootContext()); -} - -void engineSetOwnershipCPP(QQmlEngine_ *engine, QObject_ *object) -{ - QQmlEngine *qengine = reinterpret_cast(engine); - QObject *qobject = reinterpret_cast(object); - - qengine->setObjectOwnership(qobject, QQmlEngine::CppOwnership); -} - -void engineSetOwnershipJS(QQmlEngine_ *engine, QObject_ *object) -{ - QQmlEngine *qengine = reinterpret_cast(engine); - QObject *qobject = reinterpret_cast(object); - - qengine->setObjectOwnership(qobject, QQmlEngine::JavaScriptOwnership); -} - -QQmlComponent_ *newComponent(QQmlEngine_ *engine, QObject_ *parent) -{ - QQmlEngine *qengine = reinterpret_cast(engine); - //QObject *qparent = reinterpret_cast(parent); - QQmlComponent *qcomponent = new QQmlComponent(qengine); - // Qt 5.2.0 returns NULL on qmlEngine(qcomponent) without this. - QQmlEngine::setContextForObject(qcomponent, qengine->rootContext()); - return qcomponent; -} - -class GoImageProvider : public QQuickImageProvider { - - // TODO Destroy this when engine is destroyed. - - public: - - GoImageProvider(void *imageFunc) : QQuickImageProvider(QQmlImageProviderBase::Image), imageFunc(imageFunc) {}; - - virtual QImage requestImage(const QString &id, QSize *size, const QSize &requestedSize) - { - QByteArray ba = id.toUtf8(); - int width = 0, height = 0; - if (requestedSize.isValid()) { - width = requestedSize.width(); - height = requestedSize.height(); - } - QImage *ptr = reinterpret_cast(hookRequestImage(imageFunc, (char*)ba.constData(), ba.size(), width, height)); - QImage image = *ptr; - delete ptr; - - *size = image.size(); - if (requestedSize.isValid() && requestedSize != *size) { - image = image.scaled(requestedSize, Qt::KeepAspectRatio); - } - return image; - }; - - private: - - void *imageFunc; -}; - -void engineAddImageProvider(QQmlEngine_ *engine, QString_ *providerId, void *imageFunc) -{ - QQmlEngine *qengine = reinterpret_cast(engine); - QString *qproviderId = reinterpret_cast(providerId); - - qengine->addImageProvider(*qproviderId, new GoImageProvider(imageFunc)); -} - -void componentLoadURL(QQmlComponent_ *component, const char *url, int urlLen) -{ - QByteArray qurl(url, urlLen); - QString qsurl = QString::fromUtf8(qurl); - reinterpret_cast(component)->loadUrl(qsurl); -} - -void componentSetData(QQmlComponent_ *component, const char *data, int dataLen, const char *url, int urlLen) -{ - QByteArray qdata(data, dataLen); - QByteArray qurl(url, urlLen); - QString qsurl = QString::fromUtf8(qurl); - reinterpret_cast(component)->setData(qdata, qsurl); -} - -char *componentErrorString(QQmlComponent_ *component) -{ - QQmlComponent *qcomponent = reinterpret_cast(component); - if (qcomponent->isReady()) { - return NULL; - } - if (qcomponent->isError()) { - QByteArray ba = qcomponent->errorString().toUtf8(); - return local_strdup(ba.constData()); - } - return local_strdup("component is not ready (why!?)"); -} - -QObject_ *componentCreate(QQmlComponent_ *component, QQmlContext_ *context) -{ - QQmlComponent *qcomponent = reinterpret_cast(component); - QQmlContext *qcontext = reinterpret_cast(context); - - if (!qcontext) { - qcontext = qmlContext(qcomponent); - } - return qcomponent->create(qcontext); -} - -QQuickWindow_ *componentCreateWindow(QQmlComponent_ *component, QQmlContext_ *context) -{ - QQmlComponent *qcomponent = reinterpret_cast(component); - QQmlContext *qcontext = reinterpret_cast(context); - - if (!qcontext) { - qcontext = qmlContext(qcomponent); - } - QObject *obj = qcomponent->create(qcontext); - if (!objectIsWindow(obj)) { - QQuickView *view = new QQuickView(qmlEngine(qcomponent), 0); - view->setContent(qcomponent->url(), qcomponent, obj); - view->setResizeMode(QQuickView::SizeRootObjectToView); - obj = view; - } - return obj; -} - -// Workaround for bug https://bugs.launchpad.net/bugs/1179716 -struct DoShowWindow : public QQuickWindow { - void show() { - QQuickWindow::show(); - QResizeEvent resize(size(), size()); - resizeEvent(&resize); - } -}; - -void windowShow(QQuickWindow_ *win) -{ - reinterpret_cast(win)->show(); -} - -void windowHide(QQuickWindow_ *win) -{ - reinterpret_cast(win)->hide(); -} - -uintptr_t windowPlatformId(QQuickWindow_ *win) -{ - return reinterpret_cast(win)->winId(); -} - -void windowConnectHidden(QQuickWindow_ *win) -{ - QQuickWindow *qwin = reinterpret_cast(win); - QObject::connect(qwin, &QWindow::visibleChanged, [=](bool visible){ - if (!visible) { - hookWindowHidden(win); - } - }); -} - -QObject_ *windowRootObject(QQuickWindow_ *win) -{ - if (objectIsView(win)) { - return reinterpret_cast(win)->rootObject(); - } - return win; -} - -QImage_ *windowGrabWindow(QQuickWindow_ *win) -{ - QQuickWindow *qwin = reinterpret_cast(win); - QImage *image = new QImage; - *image = qwin->grabWindow().convertToFormat(QImage::Format_ARGB32_Premultiplied); - return image; -} - -QImage_ *newImage(int width, int height) -{ - return new QImage(width, height, QImage::Format_ARGB32_Premultiplied); -} - -void delImage(QImage_ *image) -{ - delete reinterpret_cast(image); -} - -void imageSize(QImage_ *image, int *width, int *height) -{ - QImage *qimage = reinterpret_cast(image); - *width = qimage->width(); - *height = qimage->height(); -} - -unsigned char *imageBits(QImage_ *image) -{ - QImage *qimage = reinterpret_cast(image); - return qimage->bits(); -} - -const unsigned char *imageConstBits(QImage_ *image) -{ - QImage *qimage = reinterpret_cast(image); - return qimage->constBits(); -} - -void contextSetObject(QQmlContext_ *context, QObject_ *value) -{ - QQmlContext *qcontext = reinterpret_cast(context); - QObject *qvalue = reinterpret_cast(value); - - // Give qvalue an engine reference if it doesn't yet have one. - if (!qmlEngine(qvalue)) { - QQmlEngine::setContextForObject(qvalue, qcontext->engine()->rootContext()); - } - - qcontext->setContextObject(qvalue); -} - -void contextSetProperty(QQmlContext_ *context, QString_ *name, DataValue *value) -{ - const QString *qname = reinterpret_cast(name); - QQmlContext *qcontext = reinterpret_cast(context); - - QVariant var; - unpackDataValue(value, &var); - - // Give qvalue an engine reference if it doesn't yet have one . - QObject *obj = var.value(); - if (obj && !qmlEngine(obj)) { - QQmlEngine::setContextForObject(obj, qcontext); - } - - qcontext->setContextProperty(*qname, var); -} - -void contextGetProperty(QQmlContext_ *context, QString_ *name, DataValue *result) -{ - QQmlContext *qcontext = reinterpret_cast(context); - const QString *qname = reinterpret_cast(name); - - QVariant var = qcontext->contextProperty(*qname); - packDataValue(&var, result); -} - -QQmlContext_ *contextSpawn(QQmlContext_ *context) -{ - QQmlContext *qcontext = reinterpret_cast(context); - return new QQmlContext(qcontext); -} - -void delObject(QObject_ *object) -{ - delete reinterpret_cast(object); -} - -void delObjectLater(QObject_ *object) -{ - reinterpret_cast(object)->deleteLater(); -} - -const char *objectTypeName(QObject_ *object) -{ - return reinterpret_cast(object)->metaObject()->className(); -} - -int objectGetProperty(QObject_ *object, const char *name, DataValue *result) -{ - QObject *qobject = reinterpret_cast(object); - - QVariant var = qobject->property(name); - packDataValue(&var, result); - - if (!var.isValid() && qobject->metaObject()->indexOfProperty(name) == -1) { - // TODO May have to check the dynamic property names too. - return 0; - } - return 1; -} - -error *objectSetProperty(QObject_ *object, const char *name, DataValue *value) -{ - QObject *qobject = reinterpret_cast(object); - QVariant var; - unpackDataValue(value, &var); - - // Give qvalue an engine reference if it doesn't yet have one. - QObject *obj = var.value(); - if (obj && !qmlEngine(obj)) { - QQmlContext *context = qmlContext(qobject); - if (context) { - QQmlEngine::setContextForObject(obj, context); - } - } - - // Check that the types are compatible. There's probably more to be done here. - const QMetaObject *metaObject = qobject->metaObject(); - int propIndex = metaObject->indexOfProperty(name); - if (propIndex == -1) { - return errorf("cannot set non-existent property \"%s\" on type %s", name, qobject->metaObject()->className()); - } - - QMetaProperty prop = metaObject->property(propIndex); - int propType = prop.userType(); - void *valueArg; - if (propType == QMetaType::QVariant) { - valueArg = (void *)&var; - } else { - int varType = var.userType(); - QVariant saved = var; - if (propType != varType && !var.convert(propType)) { - if (varType == QMetaType::QObjectStar) { - return errorf("cannot set property \"%s\" with type %s to value of %s*", - name, QMetaType::typeName(propType), saved.value()->metaObject()->className()); - } else { - return errorf("cannot set property \"%s\" with type %s to value of %s", - name, QMetaType::typeName(propType), QMetaType::typeName(varType)); - } - } - valueArg = (void *)var.constData(); - } - - int status = -1; - int flags = 0; - void *args[] = {valueArg, 0, &status, &flags}; - QMetaObject::metacall(qobject, QMetaObject::WriteProperty, propIndex, args); - return 0; -} - -error *objectInvoke(QObject_ *object, const char *method, int methodLen, DataValue *resultdv, DataValue *paramsdv, int paramsLen) -{ - QObject *qobject = reinterpret_cast(object); - - QVariant result; - QVariant param[MaxParams]; - QGenericArgument arg[MaxParams]; - for (int i = 0; i < paramsLen; i++) { - unpackDataValue(¶msdv[i], ¶m[i]); - arg[i] = Q_ARG(QVariant, param[i]); - } - if (paramsLen > 10) { - panicf("fix the parameter dispatching"); - } - - const QMetaObject *metaObject = qobject->metaObject(); - // Walk backwards so descendants have priority. - for (int i = metaObject->methodCount()-1; i >= 0; i--) { - QMetaMethod metaMethod = metaObject->method(i); - QMetaMethod::MethodType methodType = metaMethod.methodType(); - if (methodType == QMetaMethod::Method || methodType == QMetaMethod::Slot) { - QByteArray name = metaMethod.name(); - if (name.length() == methodLen && qstrncmp(name.constData(), method, methodLen) == 0) { - if (metaMethod.parameterCount() < paramsLen) { - // TODO Might continue looking to see if a different signal has the same name and enough arguments. - return errorf("method \"%s\" has too few parameters for provided arguments", method); - } - - bool ok; - if (metaMethod.returnType() == QMetaType::Void) { - ok = metaMethod.invoke(qobject, Qt::DirectConnection, - arg[0], arg[1], arg[2], arg[3], arg[4], arg[5], arg[6], arg[7], arg[8], arg[9]); - } else { - ok = metaMethod.invoke(qobject, Qt::DirectConnection, Q_RETURN_ARG(QVariant, result), - arg[0], arg[1], arg[2], arg[3], arg[4], arg[5], arg[6], arg[7], arg[8], arg[9]); - } - if (!ok) { - return errorf("invalid parameters to method \"%s\"", method); - } - - packDataValue(&result, resultdv); - return 0; - } - } - } - - return errorf("object does not expose a method \"%s\"", method); -} - -void objectFindChild(QObject_ *object, QString_ *name, DataValue *resultdv) -{ - QObject *qobject = reinterpret_cast(object); - QString *qname = reinterpret_cast(name); - - QVariant var; - QObject *result = qobject->findChild(*qname); - if (result) { - var.setValue(result); - } - packDataValue(&var, resultdv); -} - -void objectSetParent(QObject_ *object, QObject_ *parent) -{ - QObject *qobject = reinterpret_cast(object); - QObject *qparent = reinterpret_cast(parent); - - qobject->setParent(qparent); -} - -error *objectConnect(QObject_ *object, const char *signal, int signalLen, QQmlEngine_ *engine, void *func, int argsLen) -{ - QObject *qobject = reinterpret_cast(object); - QQmlEngine *qengine = reinterpret_cast(engine); - QByteArray qsignal(signal, signalLen); - - const QMetaObject *meta = qobject->metaObject(); - // Walk backwards so descendants have priority. - for (int i = meta->methodCount()-1; i >= 0; i--) { - QMetaMethod method = meta->method(i); - if (method.methodType() == QMetaMethod::Signal) { - QByteArray name = method.name(); - if (name.length() == signalLen && qstrncmp(name.constData(), signal, signalLen) == 0) { - if (method.parameterCount() < argsLen) { - // TODO Might continue looking to see if a different signal has the same name and enough arguments. - return errorf("signal \"%s\" has too few parameters for provided function", name.constData()); - } - Connector *connector = new Connector(qobject, method, qengine, func, argsLen); - const QMetaObject *connmeta = connector->metaObject(); - QObject::connect(qobject, method, connector, connmeta->method(connmeta->methodOffset())); - return 0; - } - } - } - // Cannot use constData here as the byte array is not null-terminated. - return errorf("object does not expose a \"%s\" signal", qsignal.data()); -} - -QQmlContext_ *objectContext(QObject_ *object) -{ - return qmlContext(static_cast(object)); -} - -int objectIsComponent(QObject_ *object) -{ - QObject *qobject = static_cast(object); - return dynamic_cast(qobject) ? 1 : 0; -} - -int objectIsWindow(QObject_ *object) -{ - QObject *qobject = static_cast(object); - return dynamic_cast(qobject) ? 1 : 0; -} - -int objectIsView(QObject_ *object) -{ - QObject *qobject = static_cast(object); - return dynamic_cast(qobject) ? 1 : 0; -} - -error *objectGoAddr(QObject_ *object, GoAddr **addr) -{ - QObject *qobject = static_cast(object); - GoValue *goValue = dynamic_cast(qobject); - if (goValue) { - *addr = goValue->addr; - return 0; - } - GoPaintedValue *goPaintedValue = dynamic_cast(qobject); - if (goPaintedValue) { - *addr = goPaintedValue->addr; - return 0; - } - return errorf("QML object is not backed by a Go value"); -} - -QString_ *newString(const char *data, int len) -{ - // This will copy data only once. - QByteArray ba = QByteArray::fromRawData(data, len); - return new QString(ba); -} - -void delString(QString_ *s) -{ - delete reinterpret_cast(s); -} - -GoValue_ *newGoValue(GoAddr *addr, GoTypeInfo *typeInfo, QObject_ *parent) -{ - QObject *qparent = reinterpret_cast(parent); - if (typeInfo->paint) { - return new GoPaintedValue(addr, typeInfo, qparent); - } - return new GoValue(addr, typeInfo, qparent); -} - -void goValueActivate(GoValue_ *value, GoTypeInfo *typeInfo, int addrOffset) -{ - GoMemberInfo *fieldInfo = typeInfo->fields; - for (int i = 0; i < typeInfo->fieldsLen; i++) { - if (fieldInfo->addrOffset == addrOffset) { - if (typeInfo->paint) { - static_cast(value)->activate(fieldInfo->metaIndex); - } else { - static_cast(value)->activate(fieldInfo->metaIndex); - } - return; - } - fieldInfo++; - } - - // TODO Return an error; probably an unexported field. -} - -void unpackDataValue(DataValue *value, QVariant_ *var) -{ - QVariant *qvar = reinterpret_cast(var); - switch (value->dataType) { - case DTString: - *qvar = QString::fromUtf8(*(char **)value->data, value->len); - break; - case DTBool: - *qvar = bool(*(char *)(value->data) != 0); - break; - case DTInt64: - *qvar = *(qint64*)(value->data); - break; - case DTInt32: - *qvar = *(qint32*)(value->data); - break; - case DTUint64: - *qvar = *(quint64*)(value->data); - break; - case DTUint32: - *qvar = *(quint32*)(value->data); - break; - case DTFloat64: - *qvar = *(double*)(value->data); - break; - case DTFloat32: - *qvar = *(float*)(value->data); - break; - case DTColor: - *qvar = QColor::fromRgba(*(QRgb*)(value->data)); - break; - case DTVariantList: - *qvar = **(QVariantList**)(value->data); - delete *(QVariantList**)(value->data); - break; - case DTObject: - qvar->setValue(*(QObject**)(value->data)); - break; - case DTInvalid: - // null would be more natural, but an invalid variant means - // it has proper semantics when dealing with non-qml qt code. - //qvar->setValue(QJSValue(QJSValue::NullValue)); - qvar->clear(); - break; - default: - panicf("unknown data type: %d", value->dataType); - break; - } -} - -void packDataValue(QVariant_ *var, DataValue *value) -{ - QVariant *qvar = reinterpret_cast(var); - - // Some assumptions are made below regarding the size of types. - // There's apparently no better way to handle this since that's - // how the types with well defined sizes (qint64) are mapped to - // meta-types (QMetaType::LongLong). - switch ((int)qvar->type()) { - case QVariant::Invalid: - value->dataType = DTInvalid; - break; - case QMetaType::QUrl: - *qvar = qvar->value().toString(); - // fallthrough - case QMetaType::QString: - { - value->dataType = DTString; - QByteArray ba = qvar->toByteArray(); - *(char**)(value->data) = local_strdup(ba.constData()); - value->len = ba.size(); - break; - } - case QMetaType::Bool: - value->dataType = DTBool; - *(qint8*)(value->data) = (qint8)qvar->toInt(); - break; - case QMetaType::LongLong: - // Some of these entries will have to be fixed when handling platforms - // where sizeof(long long) != 8 or sizeof(int) != 4. - value->dataType = DTInt64; - *(qint64*)(value->data) = qvar->toLongLong(); - break; - case QMetaType::ULongLong: - value->dataType = DTUint64; - *(quint64*)(value->data) = qvar->toLongLong(); - break; - case QMetaType::Int: - value->dataType = DTInt32; - *(qint32*)(value->data) = qvar->toInt(); - break; - case QMetaType::UInt: - value->dataType = DTUint32; - *(quint32*)(value->data) = qvar->toUInt(); - break; - case QMetaType::VoidStar: - value->dataType = DTUintptr; - *(uintptr_t*)(value->data) = (uintptr_t)qvar->value(); - break; - case QMetaType::Double: - value->dataType = DTFloat64; - *(double*)(value->data) = qvar->toDouble(); - break; - case QMetaType::Float: - value->dataType = DTFloat32; - *(float*)(value->data) = qvar->toFloat(); - break; - case QMetaType::QColor: - value->dataType = DTColor; - *(unsigned int*)(value->data) = qvar->value().rgba(); - break; - case QMetaType::QVariantList: - { - QVariantList varlist = qvar->toList(); - int len = varlist.size(); - DataValue *dvlist = (DataValue *) malloc(sizeof(DataValue) * len); - for (int i = 0; i < len; i++) { - packDataValue((void*)&varlist.at(i), &dvlist[i]); - } - value->dataType = DTValueList; - value->len = len; - *(DataValue**)(value->data) = dvlist; - } - break; - case QMetaType::QVariantMap: - { - QVariantMap varmap = qvar->toMap(); - int len = varmap.size() * 2; - DataValue *dvlist = (DataValue *) malloc(sizeof(DataValue) * len); - QMapIterator it(varmap); - for (int i = 0; i < len; i += 2) { - if (!it.hasNext()) { - panicf("QVariantMap mutated during iteration"); - } - it.next(); - QVariant key = it.key(); - QVariant val = it.value(); - packDataValue((void*)&key, &dvlist[i]); - packDataValue((void*)&val, &dvlist[i+1]); - } - value->dataType = DTValueMap; - value->len = len; - *(DataValue**)(value->data) = dvlist; - } - break; - case QMetaType::User: - { - static const int qjstype = QVariant::fromValue(QJSValue()).userType(); - if (qvar->userType() == qjstype) { - auto var = qvar->value().toVariant(); - packDataValue(&var, value); - } - } - break; - default: - if (qvar->type() == (int)QMetaType::QObjectStar || qvar->canConvert()) { - QObject *qobject = qvar->value(); - GoValue *goValue = dynamic_cast(qobject); - if (goValue) { - value->dataType = DTGoAddr; - *(void **)(value->data) = goValue->addr; - break; - } - GoPaintedValue *goPaintedValue = dynamic_cast(qobject); - if (goPaintedValue) { - value->dataType = DTGoAddr; - *(void **)(value->data) = goPaintedValue->addr; - break; - } - value->dataType = DTObject; - *(void **)(value->data) = qobject; - break; - } - { - QQmlListReference ref = qvar->value(); - if (ref.isValid() && ref.canCount() && ref.canAt()) { - int len = ref.count(); - DataValue *dvlist = (DataValue *) malloc(sizeof(DataValue) * len); - QVariant elem; - for (int i = 0; i < len; i++) { - elem.setValue(ref.at(i)); - packDataValue(&elem, &dvlist[i]); - } - value->dataType = DTValueList; - value->len = len; - *(DataValue**)(value->data) = dvlist; - break; - } - } - if (qstrncmp(qvar->typeName(), "QQmlListProperty<", 17) == 0) { - QQmlListProperty *list = reinterpret_cast*>(qvar->data()); - if (list->count && list->at) { - int len = list->count(list); - DataValue *dvlist = (DataValue *) malloc(sizeof(DataValue) * len); - QVariant elem; - for (int i = 0; i < len; i++) { - elem.setValue(list->at(list, i)); - packDataValue(&elem, &dvlist[i]); - } - value->dataType = DTValueList; - value->len = len; - *(DataValue**)(value->data) = dvlist; - break; - } - } - panicf("unsupported variant type: %d (%s)", qvar->type(), qvar->typeName()); - break; - } -} - -QVariantList_ *newVariantList(DataValue *list, int len) -{ - QVariantList *vlist = new QVariantList(); - vlist->reserve(len); - for (int i = 0; i < len; i++) { - QVariant var; - unpackDataValue(&list[i], &var); - vlist->append(var); - } - return vlist; -} - -QObject *listPropertyAt(QQmlListProperty *list, int i) -{ - return reinterpret_cast(hookListPropertyAt(list->data, (intptr_t)list->dummy1, (intptr_t)list->dummy2, i)); -} - -int listPropertyCount(QQmlListProperty *list) -{ - return hookListPropertyCount(list->data, (intptr_t)list->dummy1, (intptr_t)list->dummy2); -} - -void listPropertyAppend(QQmlListProperty *list, QObject *obj) -{ - hookListPropertyAppend(list->data, (intptr_t)list->dummy1, (intptr_t)list->dummy2, obj); -} - -void listPropertyClear(QQmlListProperty *list) -{ - hookListPropertyClear(list->data, (intptr_t)list->dummy1, (intptr_t)list->dummy2); -} - -QQmlListProperty_ *newListProperty(GoAddr *addr, intptr_t reflectIndex, intptr_t setIndex) -{ - QQmlListProperty *list = new QQmlListProperty(); - list->data = addr; - list->dummy1 = (void*)reflectIndex; - list->dummy2 = (void*)setIndex; - list->at = listPropertyAt; - list->count = listPropertyCount; - list->append = listPropertyAppend; - list->clear = listPropertyClear; - return list; -} - -void internalLogHandler(QtMsgType severity, const QMessageLogContext &context, const QString &text) -{ - if (context.file == NULL) return; - - QByteArray textba = text.toUtf8(); - LogMessage message = {severity, textba.constData(), textba.size(), context.file, (int)strlen(context.file), context.line}; - hookLogHandler(&message); -} - -void installLogHandler() -{ - qInstallMessageHandler(internalLogHandler); -} - - -extern bool qRegisterResourceData(int version, const unsigned char *tree, const unsigned char *name, const unsigned char *data); -extern bool qUnregisterResourceData(int version, const unsigned char *tree, const unsigned char *name, const unsigned char *data); - -void registerResourceData(int version, char *tree, char *name, char *data) -{ - qRegisterResourceData(version, (unsigned char*)tree, (unsigned char*)name, (unsigned char*)data); -} - -void unregisterResourceData(int version, char *tree, char *name, char *data) -{ - qUnregisterResourceData(version, (unsigned char*)tree, (unsigned char*)name, (unsigned char*)data); -} - -// vim:ts=4:sw=4:et:ft=cpp diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/cpp/capi.h b/Godeps/_workspace/src/github.com/obscuren/qml/cpp/capi.h deleted file mode 100644 index 25218637d3..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/cpp/capi.h +++ /dev/null @@ -1,211 +0,0 @@ -#ifndef CAPI_H -#define CAPI_H - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -// It's surprising that MaximumParamCount is privately defined within qmetaobject.cpp. -// Must fix the objectInvoke function if this is changed. -// This is Qt's MaximuParamCount - 1, as it does not take the result value in account. -enum { MaxParams = 10 }; - -typedef void QApplication_; -typedef void QMetaObject_; -typedef void QObject_; -typedef void QVariant_; -typedef void QVariantList_; -typedef void QString_; -typedef void QQmlEngine_; -typedef void QQmlContext_; -typedef void QQmlComponent_; -typedef void QQmlListProperty_; -typedef void QQuickWindow_; -typedef void QQuickView_; -typedef void QMessageLogContext_; -typedef void QImage_; -typedef void GoValue_; -typedef void GoAddr; -typedef void GoTypeSpec_; - -typedef char error; -error *errorf(const char *format, ...); -void panicf(const char *format, ...); - -typedef enum { - DTUnknown = 0, // Has an unsupported type. - DTInvalid = 1, // Does not exist or similar. - - DTString = 10, - DTBool = 11, - DTInt64 = 12, - DTInt32 = 13, - DTUint64 = 14, - DTUint32 = 15, - DTUintptr = 16, - DTFloat64 = 17, - DTFloat32 = 18, - DTColor = 19, - - DTGoAddr = 100, - DTObject = 101, - DTValueMap = 102, - DTValueList = 103, - DTVariantList = 104, - DTListProperty = 105, - - // Used in type information, not in an actual data value. - DTAny = 201, // Can hold any of the above types. - DTMethod = 202 -} DataType; - -typedef struct { - DataType dataType; - char data[8]; - int len; -} DataValue; - -typedef struct { - char *memberName; // points to memberNames - DataType memberType; - int reflectIndex; - int reflectGetIndex; - int reflectSetIndex; - int metaIndex; - int addrOffset; - char *methodSignature; - char *resultSignature; - int numIn; - int numOut; -} GoMemberInfo; - -typedef struct { - char *typeName; - GoMemberInfo *fields; - GoMemberInfo *methods; - GoMemberInfo *members; // fields + methods - GoMemberInfo *paint; // in methods too - int fieldsLen; - int methodsLen; - int membersLen; - char *memberNames; - - QMetaObject_ *metaObject; -} GoTypeInfo; - -typedef struct { - int severity; - const char *text; - int textLen; - const char *file; - int fileLen; - int line; -} LogMessage; - -void newGuiApplication(); -void applicationExec(); -void applicationExit(); -void applicationFlushAll(); - -void idleTimerInit(int32_t *guiIdleRun); -void idleTimerStart(); - -void *currentThread(); -void *appThread(); - -QQmlEngine_ *newEngine(QObject_ *parent); -QQmlContext_ *engineRootContext(QQmlEngine_ *engine); -void engineSetOwnershipCPP(QQmlEngine_ *engine, QObject_ *object); -void engineSetOwnershipJS(QQmlEngine_ *engine, QObject_ *object); -void engineSetContextForObject(QQmlEngine_ *engine, QObject_ *object); -void engineAddImageProvider(QQmlEngine_ *engine, QString_ *providerId, void *imageFunc); - -void contextGetProperty(QQmlContext_ *context, QString_ *name, DataValue *value); -void contextSetProperty(QQmlContext_ *context, QString_ *name, DataValue *value); -void contextSetObject(QQmlContext_ *context, QObject_ *value); -QQmlContext_ *contextSpawn(QQmlContext_ *context); - -void delObject(QObject_ *object); -void delObjectLater(QObject_ *object); -const char *objectTypeName(QObject_ *object); -int objectGetProperty(QObject_ *object, const char *name, DataValue *result); -error *objectSetProperty(QObject_ *object, const char *name, DataValue *value); -void objectSetParent(QObject_ *object, QObject_ *parent); -error *objectInvoke(QObject_ *object, const char *method, int methodLen, DataValue *result, DataValue *params, int paramsLen); -void objectFindChild(QObject_ *object, QString_ *name, DataValue *result); -QQmlContext_ *objectContext(QObject_ *object); -int objectIsComponent(QObject_ *object); -int objectIsWindow(QObject_ *object); -int objectIsView(QObject_ *object); -error *objectConnect(QObject_ *object, const char *signal, int signalLen, QQmlEngine_ *engine, void *func, int argsLen); -error *objectGoAddr(QObject_ *object, GoAddr **addr); - -QQmlComponent_ *newComponent(QQmlEngine_ *engine, QObject_ *parent); -void componentLoadURL(QQmlComponent_ *component, const char *url, int urlLen); -void componentSetData(QQmlComponent_ *component, const char *data, int dataLen, const char *url, int urlLen); -char *componentErrorString(QQmlComponent_ *component); -QObject_ *componentCreate(QQmlComponent_ *component, QQmlContext_ *context); -QQuickWindow_ *componentCreateWindow(QQmlComponent_ *component, QQmlContext_ *context); - -void windowShow(QQuickWindow_ *win); -void windowHide(QQuickWindow_ *win); -uintptr_t windowPlatformId(QQuickWindow_ *win); -void windowConnectHidden(QQuickWindow_ *win); -QObject_ *windowRootObject(QQuickWindow_ *win); -QImage_ *windowGrabWindow(QQuickWindow_ *win); - -QImage_ *newImage(int width, int height); -void delImage(QImage_ *image); -void imageSize(QImage_ *image, int *width, int *height); -unsigned char *imageBits(QImage_ *image); -const unsigned char *imageConstBits(QImage_ *image); - -QString_ *newString(const char *data, int len); -void delString(QString_ *s); - -GoValue_ *newGoValue(GoAddr *addr, GoTypeInfo *typeInfo, QObject_ *parent); -void goValueActivate(GoValue_ *value, GoTypeInfo *typeInfo, int addrOffset); - -void packDataValue(QVariant_ *var, DataValue *result); -void unpackDataValue(DataValue *value, QVariant_ *result); - -QVariantList_ *newVariantList(DataValue *list, int len); - -QQmlListProperty_ *newListProperty(GoAddr *addr, intptr_t reflectIndex, intptr_t setIndex); - -int registerType(char *location, int major, int minor, char *name, GoTypeInfo *typeInfo, GoTypeSpec_ *spec); -int registerSingleton(char *location, int major, int minor, char *name, GoTypeInfo *typeInfo, GoTypeSpec_ *spec); - -void installLogHandler(); - -void hookIdleTimer(); -void hookLogHandler(LogMessage *message); -void hookGoValueReadField(QQmlEngine_ *engine, GoAddr *addr, int memberIndex, int getIndex, int setIndex, DataValue *result); -void hookGoValueWriteField(QQmlEngine_ *engine, GoAddr *addr, int memberIndex, int setIndex, DataValue *assign); -void hookGoValueCallMethod(QQmlEngine_ *engine, GoAddr *addr, int memberIndex, DataValue *result); -void hookGoValueDestroyed(QQmlEngine_ *engine, GoAddr *addr); -void hookGoValuePaint(QQmlEngine_ *engine, GoAddr *addr, intptr_t reflextIndex); -QImage_ *hookRequestImage(void *imageFunc, char *id, int idLen, int width, int height); -GoAddr *hookGoValueTypeNew(GoValue_ *value, GoTypeSpec_ *spec); -void hookWindowHidden(QObject_ *addr); -void hookSignalCall(QQmlEngine_ *engine, void *func, DataValue *params); -void hookSignalDisconnect(void *func); -void hookPanic(char *message); -int hookListPropertyCount(GoAddr *addr, intptr_t reflectIndex, intptr_t setIndex); -QObject_ *hookListPropertyAt(GoAddr *addr, intptr_t reflectIndex, intptr_t setIndex, int i); -void hookListPropertyAppend(GoAddr *addr, intptr_t reflectIndex, intptr_t setIndex, QObject_ *obj); -void hookListPropertyClear(GoAddr *addr, intptr_t reflectIndex, intptr_t setIndex); - -void registerResourceData(int version, char *tree, char *name, char *data); -void unregisterResourceData(int version, char *tree, char *name, char *data); - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // CAPI_H - -// vim:ts=4:et diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/cpp/connector.cpp b/Godeps/_workspace/src/github.com/obscuren/qml/cpp/connector.cpp deleted file mode 100644 index 6005bfc62b..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/cpp/connector.cpp +++ /dev/null @@ -1,46 +0,0 @@ -#include - -#include "connector.h" -#include "capi.h" - -Connector::~Connector() -{ - hookSignalDisconnect(func); -} - -void Connector::invoke() -{ - panicf("should never get called"); -} - -int Connector::qt_metacall(QMetaObject::Call c, int idx, void **a) -{ - if (c == QMetaObject::InvokeMetaMethod && idx == metaObject()->methodOffset()) { - DataValue args[MaxParams]; - QObject *plain = NULL; - for (int i = 0; i < argsLen; i++) { - int paramType = method.parameterType(i); - if (paramType == 0 && a[1 + i] != NULL) { - const char *typeName = method.parameterTypes()[i].constData(); - void *addr = a[1 + i]; - if (typeName[strlen(typeName)-1] == '*') { - addr = *(void **)addr; - } - plain = new PlainObject(typeName, addr, plain); - QVariant var = QVariant::fromValue((QObject *)plain); - packDataValue(&var, &args[i]); - } else { - QVariant var(method.parameterType(i), a[1 + i]); - packDataValue(&var, &args[i]); - } - } - hookSignalCall(engine, func, args); - if (plain != NULL) { - delete plain; - } - return -1; - } - return standard_qt_metacall(c, idx, a); -} - -// vim:ts=4:sw=4:et diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/cpp/connector.h b/Godeps/_workspace/src/github.com/obscuren/qml/cpp/connector.h deleted file mode 100644 index 82954927b4..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/cpp/connector.h +++ /dev/null @@ -1,58 +0,0 @@ -#ifndef CONNECTOR_H -#define CONNECTOR_H - -#include - -#include - -class Connector : public QObject -{ - Q_OBJECT - - public: - - Connector(QObject *sender, QMetaMethod method, QQmlEngine *engine, void *func, int argsLen) - : QObject(sender), engine(engine), method(method), func(func), argsLen(argsLen) {}; - - virtual ~Connector(); - - // MOC HACK: s/Connector::qt_metacall/Connector::standard_qt_metacall/ - int standard_qt_metacall(QMetaObject::Call c, int idx, void **a); - - public slots: - - void invoke(); - - private: - - QQmlEngine *engine; - QMetaMethod method; - void *func; - int argsLen; -}; - -class PlainObject : public QObject -{ - Q_OBJECT - - Q_PROPERTY(QString plainType READ getPlainType) - Q_PROPERTY(void *plainAddr READ getPlainAddr) - - QString plainType; - void *plainAddr; - - public: - - PlainObject(QObject *parent = 0) - : QObject(parent) {}; - - PlainObject(const char *plainType, void *plainAddr, QObject *parent = 0) - : QObject(parent), plainType(plainType), plainAddr(plainAddr) {}; - - QString getPlainType() { return plainType; }; - void *getPlainAddr() { return plainAddr; }; -}; - -#endif // CONNECTOR_H - -// vim:ts=4:sw=4:et diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/cpp/govalue.cpp b/Godeps/_workspace/src/github.com/obscuren/qml/cpp/govalue.cpp deleted file mode 100644 index 5cf58a62d7..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/cpp/govalue.cpp +++ /dev/null @@ -1,236 +0,0 @@ -#include - -#include -#include - -#include -#include -#include - -#include "govalue.h" -#include "capi.h" - -class GoValueMetaObject : public QAbstractDynamicMetaObject -{ -public: - GoValueMetaObject(QObject* value, GoAddr *addr, GoTypeInfo *typeInfo); - - void activatePropIndex(int propIndex); - -protected: - int metaCall(QMetaObject::Call c, int id, void **a); - -private: - QObject *value; - GoAddr *addr; - GoTypeInfo *typeInfo; -}; - -GoValueMetaObject::GoValueMetaObject(QObject *value, GoAddr *addr, GoTypeInfo *typeInfo) - : value(value), addr(addr), typeInfo(typeInfo) -{ - //d->parent = static_cast(priv->metaObject); - *static_cast(this) = *metaObjectFor(typeInfo); - - QObjectPrivate *objPriv = QObjectPrivate::get(value); - objPriv->metaObject = this; -} - -int GoValueMetaObject::metaCall(QMetaObject::Call c, int idx, void **a) -{ - //qWarning() << "GoValueMetaObject::metaCall" << c << idx; - switch (c) { - case QMetaObject::ReadProperty: - case QMetaObject::WriteProperty: - { - // TODO Cache propertyOffset, methodOffset (and maybe qmlEngine) - int propOffset = propertyOffset(); - if (idx < propOffset) { - return value->qt_metacall(c, idx, a); - } - GoMemberInfo *memberInfo = typeInfo->fields; - for (int i = 0; i < typeInfo->fieldsLen; i++) { - if (memberInfo->metaIndex == idx) { - if (c == QMetaObject::ReadProperty) { - DataValue result; - hookGoValueReadField(qmlEngine(value), addr, memberInfo->reflectIndex, memberInfo->reflectGetIndex, memberInfo->reflectSetIndex, &result); - if (memberInfo->memberType == DTListProperty) { - if (result.dataType != DTListProperty) { - panicf("reading DTListProperty field returned non-DTListProperty result"); - } - QQmlListProperty *in = *reinterpret_cast **>(result.data); - QQmlListProperty *out = reinterpret_cast *>(a[0]); - *out = *in; - // TODO Could provide a single variable in the stack to ReadField instead. - delete in; - } else { - QVariant *out = reinterpret_cast(a[0]); - unpackDataValue(&result, out); - } - } else { - DataValue assign; - QVariant *in = reinterpret_cast(a[0]); - packDataValue(in, &assign); - hookGoValueWriteField(qmlEngine(value), addr, memberInfo->reflectIndex, memberInfo->reflectSetIndex, &assign); - activate(value, methodOffset() + (idx - propOffset), 0); - } - return -1; - } - memberInfo++; - } - QMetaProperty prop = property(idx); - qWarning() << "Property" << prop.name() << "not found!?"; - break; - } - case QMetaObject::InvokeMetaMethod: - { - if (idx < methodOffset()) { - return value->qt_metacall(c, idx, a); - } - GoMemberInfo *memberInfo = typeInfo->methods; - for (int i = 0; i < typeInfo->methodsLen; i++) { - if (memberInfo->metaIndex == idx) { - // args[0] is the result if any. - DataValue args[1 + MaxParams]; - for (int i = 1; i < memberInfo->numIn+1; i++) { - packDataValue(reinterpret_cast(a[i]), &args[i]); - } - hookGoValueCallMethod(qmlEngine(value), addr, memberInfo->reflectIndex, args); - if (memberInfo->numOut > 0) { - unpackDataValue(&args[0], reinterpret_cast(a[0])); - } - return -1; - } - memberInfo++; - } - QMetaMethod m = method(idx); - qWarning() << "Method" << m.name() << "not found!?"; - break; - } - default: - break; // Unhandled. - } - return -1; -} - -void GoValueMetaObject::activatePropIndex(int propIndex) -{ - // Properties are added first, so the first fieldLen methods are in - // fact the signals of the respective properties. - int relativeIndex = propIndex - propertyOffset(); - activate(value, methodOffset() + relativeIndex, 0); -} - -GoValue::GoValue(GoAddr *addr, GoTypeInfo *typeInfo, QObject *parent) - : addr(addr), typeInfo(typeInfo) -{ - valueMeta = new GoValueMetaObject(this, addr, typeInfo); - setParent(parent); -} - -GoValue::~GoValue() -{ - hookGoValueDestroyed(qmlEngine(this), addr); -} - -void GoValue::activate(int propIndex) -{ - valueMeta->activatePropIndex(propIndex); -} - -GoPaintedValue::GoPaintedValue(GoAddr *addr, GoTypeInfo *typeInfo, QObject *parent) - : addr(addr), typeInfo(typeInfo) -{ - valueMeta = new GoValueMetaObject(this, addr, typeInfo); - setParent(parent); - - QQuickItem::setFlag(QQuickItem::ItemHasContents, true); - QQuickPaintedItem::setRenderTarget(QQuickPaintedItem::FramebufferObject); -} - -GoPaintedValue::~GoPaintedValue() -{ - hookGoValueDestroyed(qmlEngine(this), addr); -} - -void GoPaintedValue::activate(int propIndex) -{ - valueMeta->activatePropIndex(propIndex); -} - -void GoPaintedValue::paint(QPainter *painter) -{ - painter->beginNativePainting(); - hookGoValuePaint(qmlEngine(this), addr, typeInfo->paint->reflectIndex); - painter->endNativePainting(); -} - -QMetaObject *metaObjectFor(GoTypeInfo *typeInfo) -{ - if (typeInfo->metaObject) { - return reinterpret_cast(typeInfo->metaObject); - } - - QMetaObjectBuilder mob; - if (typeInfo->paint) { - mob.setSuperClass(&QQuickPaintedItem::staticMetaObject); - } else { - mob.setSuperClass(&QObject::staticMetaObject); - } - mob.setClassName(typeInfo->typeName); - mob.setFlags(QMetaObjectBuilder::DynamicMetaObject); - - GoMemberInfo *memberInfo; - - memberInfo = typeInfo->fields; - int relativePropIndex = mob.propertyCount(); - for (int i = 0; i < typeInfo->fieldsLen; i++) { - mob.addSignal("__" + QByteArray::number(relativePropIndex) + "()"); - const char *typeName = "QVariant"; - if (memberInfo->memberType == DTListProperty) { - typeName = "QQmlListProperty"; - } - QMetaPropertyBuilder propb = mob.addProperty(memberInfo->memberName, typeName, relativePropIndex); - propb.setWritable(true); - memberInfo->metaIndex = relativePropIndex; - memberInfo++; - relativePropIndex++; - } - - memberInfo = typeInfo->methods; - int relativeMethodIndex = mob.methodCount(); - for (int i = 0; i < typeInfo->methodsLen; i++) { - if (*memberInfo->resultSignature) { - mob.addMethod(memberInfo->methodSignature, memberInfo->resultSignature); - } else { - mob.addMethod(memberInfo->methodSignature); - } - memberInfo->metaIndex = relativeMethodIndex; - memberInfo++; - relativeMethodIndex++; - } - - // TODO Support default properties. - //mob.addClassInfo("DefaultProperty", "objects"); - - QMetaObject *mo = mob.toMetaObject(); - - // Turn the relative indexes into absolute indexes. - memberInfo = typeInfo->fields; - int propOffset = mo->propertyOffset(); - for (int i = 0; i < typeInfo->fieldsLen; i++) { - memberInfo->metaIndex += propOffset; - memberInfo++; - } - memberInfo = typeInfo->methods; - int methodOffset = mo->methodOffset(); - for (int i = 0; i < typeInfo->methodsLen; i++) { - memberInfo->metaIndex += methodOffset; - memberInfo++; - } - - typeInfo->metaObject = mo; - return mo; -} - -// vim:ts=4:sw=4:et:ft=cpp diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/cpp/govalue.h b/Godeps/_workspace/src/github.com/obscuren/qml/cpp/govalue.h deleted file mode 100644 index aa6ddd10c8..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/cpp/govalue.h +++ /dev/null @@ -1,56 +0,0 @@ -#ifndef GOVALUE_H -#define GOVALUE_H - -// Unfortunatley we need access to private bits, because the -// whole dynamic meta-object concept is sadly being hidden -// away, and without it this package wouldn't exist. -#include - -#include -#include - -#include "capi.h" - -class GoValueMetaObject; - -QMetaObject *metaObjectFor(GoTypeInfo *typeInfo); - -class GoValue : public QObject -{ - Q_OBJECT - -public: - GoAddr *addr; - GoTypeInfo *typeInfo; - - GoValue(GoAddr *addr, GoTypeInfo *typeInfo, QObject *parent); - virtual ~GoValue(); - - void activate(int propIndex); - -private: - GoValueMetaObject *valueMeta; -}; - -class GoPaintedValue : public QQuickPaintedItem -{ - Q_OBJECT - -public: - GoAddr *addr; - GoTypeInfo *typeInfo; - - GoPaintedValue(GoAddr *addr, GoTypeInfo *typeInfo, QObject *parent); - virtual ~GoPaintedValue(); - - void activate(int propIndex); - - virtual void paint(QPainter *painter); - -private: - GoValueMetaObject *valueMeta; -}; - -#endif // GOVALUE_H - -// vim:ts=4:sw=4:et:ft=cpp diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/cpp/govaluetype.cpp b/Godeps/_workspace/src/github.com/obscuren/qml/cpp/govaluetype.cpp deleted file mode 100644 index 925045390c..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/cpp/govaluetype.cpp +++ /dev/null @@ -1,254 +0,0 @@ -#include "govaluetype.h" - -#define DEFINE_GOVALUETYPE(N) \ - template<> QMetaObject GoValueType::staticMetaObject = QMetaObject(); \ - template<> GoTypeInfo *GoValueType::typeInfo = 0; \ - template<> GoTypeSpec_ *GoValueType::typeSpec = 0; - -#define DEFINE_GOPAINTEDVALUETYPE(N) \ - template<> QMetaObject GoPaintedValueType::staticMetaObject = QMetaObject(); \ - template<> GoTypeInfo *GoPaintedValueType::typeInfo = 0; \ - template<> GoTypeSpec_ *GoPaintedValueType::typeSpec = 0; - -DEFINE_GOVALUETYPE(1) -DEFINE_GOVALUETYPE(2) -DEFINE_GOVALUETYPE(3) -DEFINE_GOVALUETYPE(4) -DEFINE_GOVALUETYPE(5) -DEFINE_GOVALUETYPE(6) -DEFINE_GOVALUETYPE(7) -DEFINE_GOVALUETYPE(8) -DEFINE_GOVALUETYPE(9) -DEFINE_GOVALUETYPE(10) -DEFINE_GOVALUETYPE(11) -DEFINE_GOVALUETYPE(12) -DEFINE_GOVALUETYPE(13) -DEFINE_GOVALUETYPE(14) -DEFINE_GOVALUETYPE(15) -DEFINE_GOVALUETYPE(16) -DEFINE_GOVALUETYPE(17) -DEFINE_GOVALUETYPE(18) -DEFINE_GOVALUETYPE(19) -DEFINE_GOVALUETYPE(20) -DEFINE_GOVALUETYPE(21) -DEFINE_GOVALUETYPE(22) -DEFINE_GOVALUETYPE(23) -DEFINE_GOVALUETYPE(24) -DEFINE_GOVALUETYPE(25) -DEFINE_GOVALUETYPE(26) -DEFINE_GOVALUETYPE(27) -DEFINE_GOVALUETYPE(28) -DEFINE_GOVALUETYPE(29) -DEFINE_GOVALUETYPE(30) - -DEFINE_GOPAINTEDVALUETYPE(1) -DEFINE_GOPAINTEDVALUETYPE(2) -DEFINE_GOPAINTEDVALUETYPE(3) -DEFINE_GOPAINTEDVALUETYPE(4) -DEFINE_GOPAINTEDVALUETYPE(5) -DEFINE_GOPAINTEDVALUETYPE(6) -DEFINE_GOPAINTEDVALUETYPE(7) -DEFINE_GOPAINTEDVALUETYPE(8) -DEFINE_GOPAINTEDVALUETYPE(9) -DEFINE_GOPAINTEDVALUETYPE(10) -DEFINE_GOPAINTEDVALUETYPE(11) -DEFINE_GOPAINTEDVALUETYPE(12) -DEFINE_GOPAINTEDVALUETYPE(13) -DEFINE_GOPAINTEDVALUETYPE(14) -DEFINE_GOPAINTEDVALUETYPE(15) -DEFINE_GOPAINTEDVALUETYPE(16) -DEFINE_GOPAINTEDVALUETYPE(17) -DEFINE_GOPAINTEDVALUETYPE(18) -DEFINE_GOPAINTEDVALUETYPE(19) -DEFINE_GOPAINTEDVALUETYPE(20) -DEFINE_GOPAINTEDVALUETYPE(21) -DEFINE_GOPAINTEDVALUETYPE(22) -DEFINE_GOPAINTEDVALUETYPE(23) -DEFINE_GOPAINTEDVALUETYPE(24) -DEFINE_GOPAINTEDVALUETYPE(25) -DEFINE_GOPAINTEDVALUETYPE(26) -DEFINE_GOPAINTEDVALUETYPE(27) -DEFINE_GOPAINTEDVALUETYPE(28) -DEFINE_GOPAINTEDVALUETYPE(29) -DEFINE_GOPAINTEDVALUETYPE(30) - -static int goValueTypeN = 0; -static int goPaintedValueTypeN = 0; - -template -int registerSingletonN(char *location, int major, int minor, char *name, GoTypeInfo *info, GoTypeSpec_ *spec) { - GoValueType::init(info, spec); - return qmlRegisterSingletonType< GoValueType >(location, major, minor, name, [](QQmlEngine *qmlEngine, QJSEngine *jsEngine) -> QObject* { - QObject *singleton = new GoValueType(); - QQmlEngine::setContextForObject(singleton, qmlEngine->rootContext()); - return singleton; - }); -} - -template -int registerPaintedSingletonN(char *location, int major, int minor, char *name, GoTypeInfo *info, GoTypeSpec_ *spec) { - GoPaintedValueType::init(info, spec); - return qmlRegisterSingletonType< GoPaintedValueType >(location, major, minor, name, [](QQmlEngine *qmlEngine, QJSEngine *jsEngine) -> QObject* { - QObject *singleton = new GoPaintedValueType(); - QQmlEngine::setContextForObject(singleton, qmlEngine->rootContext()); - return singleton; - }); -} - -#define GOVALUETYPE_CASE_SINGLETON(N) \ - case N: return registerSingletonN(location, major, minor, name, info, spec); -#define GOPAINTEDVALUETYPE_CASE_SINGLETON(N) \ - case N: return registerPaintedSingletonN(location, major, minor, name, info, spec); - -int registerSingleton(char *location, int major, int minor, char *name, GoTypeInfo *info, GoTypeSpec_ *spec) -{ - if (!info->paint) { - switch (++goValueTypeN) { - GOVALUETYPE_CASE_SINGLETON(1) - GOVALUETYPE_CASE_SINGLETON(2) - GOVALUETYPE_CASE_SINGLETON(3) - GOVALUETYPE_CASE_SINGLETON(4) - GOVALUETYPE_CASE_SINGLETON(5) - GOVALUETYPE_CASE_SINGLETON(6) - GOVALUETYPE_CASE_SINGLETON(7) - GOVALUETYPE_CASE_SINGLETON(8) - GOVALUETYPE_CASE_SINGLETON(9) - GOVALUETYPE_CASE_SINGLETON(10) - GOVALUETYPE_CASE_SINGLETON(11) - GOVALUETYPE_CASE_SINGLETON(12) - GOVALUETYPE_CASE_SINGLETON(13) - GOVALUETYPE_CASE_SINGLETON(14) - GOVALUETYPE_CASE_SINGLETON(15) - GOVALUETYPE_CASE_SINGLETON(16) - GOVALUETYPE_CASE_SINGLETON(17) - GOVALUETYPE_CASE_SINGLETON(18) - GOVALUETYPE_CASE_SINGLETON(19) - GOVALUETYPE_CASE_SINGLETON(20) - GOVALUETYPE_CASE_SINGLETON(21) - GOVALUETYPE_CASE_SINGLETON(22) - GOVALUETYPE_CASE_SINGLETON(23) - GOVALUETYPE_CASE_SINGLETON(24) - GOVALUETYPE_CASE_SINGLETON(25) - GOVALUETYPE_CASE_SINGLETON(26) - GOVALUETYPE_CASE_SINGLETON(27) - GOVALUETYPE_CASE_SINGLETON(28) - GOVALUETYPE_CASE_SINGLETON(29) - GOVALUETYPE_CASE_SINGLETON(30) - } - } else { - switch (++goPaintedValueTypeN) { - GOPAINTEDVALUETYPE_CASE_SINGLETON(1) - GOPAINTEDVALUETYPE_CASE_SINGLETON(2) - GOPAINTEDVALUETYPE_CASE_SINGLETON(3) - GOPAINTEDVALUETYPE_CASE_SINGLETON(4) - GOPAINTEDVALUETYPE_CASE_SINGLETON(5) - GOPAINTEDVALUETYPE_CASE_SINGLETON(6) - GOPAINTEDVALUETYPE_CASE_SINGLETON(7) - GOPAINTEDVALUETYPE_CASE_SINGLETON(8) - GOPAINTEDVALUETYPE_CASE_SINGLETON(9) - GOPAINTEDVALUETYPE_CASE_SINGLETON(10) - GOPAINTEDVALUETYPE_CASE_SINGLETON(11) - GOPAINTEDVALUETYPE_CASE_SINGLETON(12) - GOPAINTEDVALUETYPE_CASE_SINGLETON(13) - GOPAINTEDVALUETYPE_CASE_SINGLETON(14) - GOPAINTEDVALUETYPE_CASE_SINGLETON(15) - GOPAINTEDVALUETYPE_CASE_SINGLETON(16) - GOPAINTEDVALUETYPE_CASE_SINGLETON(17) - GOPAINTEDVALUETYPE_CASE_SINGLETON(18) - GOPAINTEDVALUETYPE_CASE_SINGLETON(19) - GOPAINTEDVALUETYPE_CASE_SINGLETON(20) - GOPAINTEDVALUETYPE_CASE_SINGLETON(21) - GOPAINTEDVALUETYPE_CASE_SINGLETON(22) - GOPAINTEDVALUETYPE_CASE_SINGLETON(23) - GOPAINTEDVALUETYPE_CASE_SINGLETON(24) - GOPAINTEDVALUETYPE_CASE_SINGLETON(25) - GOPAINTEDVALUETYPE_CASE_SINGLETON(26) - GOPAINTEDVALUETYPE_CASE_SINGLETON(27) - GOPAINTEDVALUETYPE_CASE_SINGLETON(28) - GOPAINTEDVALUETYPE_CASE_SINGLETON(29) - GOPAINTEDVALUETYPE_CASE_SINGLETON(30) - } - } - panicf("too many registered types; please contact the Go QML developers"); - return 0; -} - -#define GOVALUETYPE_CASE(N) \ - case N: GoValueType::init(info, spec); return qmlRegisterType< GoValueType >(location, major, minor, name); -#define GOPAINTEDVALUETYPE_CASE(N) \ - case N: GoPaintedValueType::init(info, spec); return qmlRegisterType< GoPaintedValueType >(location, major, minor, name); - -int registerType(char *location, int major, int minor, char *name, GoTypeInfo *info, GoTypeSpec_ *spec) -{ - if (!info->paint) { - switch (++goValueTypeN) { - GOVALUETYPE_CASE(1) - GOVALUETYPE_CASE(2) - GOVALUETYPE_CASE(3) - GOVALUETYPE_CASE(4) - GOVALUETYPE_CASE(5) - GOVALUETYPE_CASE(6) - GOVALUETYPE_CASE(7) - GOVALUETYPE_CASE(8) - GOVALUETYPE_CASE(9) - GOVALUETYPE_CASE(10) - GOVALUETYPE_CASE(11) - GOVALUETYPE_CASE(12) - GOVALUETYPE_CASE(13) - GOVALUETYPE_CASE(14) - GOVALUETYPE_CASE(15) - GOVALUETYPE_CASE(16) - GOVALUETYPE_CASE(17) - GOVALUETYPE_CASE(18) - GOVALUETYPE_CASE(19) - GOVALUETYPE_CASE(20) - GOVALUETYPE_CASE(21) - GOVALUETYPE_CASE(22) - GOVALUETYPE_CASE(23) - GOVALUETYPE_CASE(24) - GOVALUETYPE_CASE(25) - GOVALUETYPE_CASE(26) - GOVALUETYPE_CASE(27) - GOVALUETYPE_CASE(28) - GOVALUETYPE_CASE(29) - GOVALUETYPE_CASE(30) - } - } else { - switch (++goPaintedValueTypeN) { - GOPAINTEDVALUETYPE_CASE(1) - GOPAINTEDVALUETYPE_CASE(2) - GOPAINTEDVALUETYPE_CASE(3) - GOPAINTEDVALUETYPE_CASE(4) - GOPAINTEDVALUETYPE_CASE(5) - GOPAINTEDVALUETYPE_CASE(6) - GOPAINTEDVALUETYPE_CASE(7) - GOPAINTEDVALUETYPE_CASE(8) - GOPAINTEDVALUETYPE_CASE(9) - GOPAINTEDVALUETYPE_CASE(10) - GOPAINTEDVALUETYPE_CASE(11) - GOPAINTEDVALUETYPE_CASE(12) - GOPAINTEDVALUETYPE_CASE(13) - GOPAINTEDVALUETYPE_CASE(14) - GOPAINTEDVALUETYPE_CASE(15) - GOPAINTEDVALUETYPE_CASE(16) - GOPAINTEDVALUETYPE_CASE(17) - GOPAINTEDVALUETYPE_CASE(18) - GOPAINTEDVALUETYPE_CASE(19) - GOPAINTEDVALUETYPE_CASE(20) - GOPAINTEDVALUETYPE_CASE(21) - GOPAINTEDVALUETYPE_CASE(22) - GOPAINTEDVALUETYPE_CASE(23) - GOPAINTEDVALUETYPE_CASE(24) - GOPAINTEDVALUETYPE_CASE(25) - GOPAINTEDVALUETYPE_CASE(26) - GOPAINTEDVALUETYPE_CASE(27) - GOPAINTEDVALUETYPE_CASE(28) - GOPAINTEDVALUETYPE_CASE(29) - GOPAINTEDVALUETYPE_CASE(30) - } - } - panicf("too many registered types; please contact the Go QML developers"); - return 0; -} - -// vim:sw=4:st=4:et:ft=cpp diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/cpp/govaluetype.h b/Godeps/_workspace/src/github.com/obscuren/qml/cpp/govaluetype.h deleted file mode 100644 index 6007d394c5..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/cpp/govaluetype.h +++ /dev/null @@ -1,48 +0,0 @@ -#ifndef GOVALUETYPE_H -#define GOVALUETYPE_H - -#include "govalue.h" - -template -class GoValueType : public GoValue -{ -public: - - GoValueType() - : GoValue(hookGoValueTypeNew(this, typeSpec), typeInfo, 0) {}; - - static void init(GoTypeInfo *info, GoTypeSpec_ *spec) - { - typeInfo = info; - typeSpec = spec; - static_cast(staticMetaObject) = *metaObjectFor(typeInfo); - }; - - static GoTypeSpec_ *typeSpec; - static GoTypeInfo *typeInfo; - static QMetaObject staticMetaObject; -}; - -template -class GoPaintedValueType : public GoPaintedValue -{ -public: - - GoPaintedValueType() - : GoPaintedValue(hookGoValueTypeNew(this, typeSpec), typeInfo, 0) {}; - - static void init(GoTypeInfo *info, GoTypeSpec_ *spec) - { - typeInfo = info; - typeSpec = spec; - static_cast(staticMetaObject) = *metaObjectFor(typeInfo); - }; - - static GoTypeSpec_ *typeSpec; - static GoTypeInfo *typeInfo; - static QMetaObject staticMetaObject; -}; - -#endif // GOVALUETYPE_H - -// vim:ts=4:sw=4:et diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/cpp/idletimer.cpp b/Godeps/_workspace/src/github.com/obscuren/qml/cpp/idletimer.cpp deleted file mode 100644 index 3bd0975088..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/cpp/idletimer.cpp +++ /dev/null @@ -1,58 +0,0 @@ -#include -#include -#include -#include - -#include "capi.h" - -class IdleTimer : public QObject -{ - Q_OBJECT - - public: - - static IdleTimer *singleton() { - static IdleTimer singleton; - return &singleton; - } - - void init(int32_t *guiIdleRun) - { - this->guiIdleRun = guiIdleRun; - } - - Q_INVOKABLE void start() - { - timer.start(0, this); - } - - protected: - - void timerEvent(QTimerEvent *event) - { - __sync_synchronize(); - if (*guiIdleRun > 0) { - hookIdleTimer(); - } else { - timer.stop(); - } - } - - private: - - int32_t *guiIdleRun; - - QBasicTimer timer; -}; - -void idleTimerInit(int32_t *guiIdleRun) -{ - IdleTimer::singleton()->init(guiIdleRun); -} - -void idleTimerStart() -{ - QMetaObject::invokeMethod(IdleTimer::singleton(), "start", Qt::QueuedConnection); -} - -// vim:ts=4:sw=4:et:ft=cpp diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/cpp/mmemwin.cpp b/Godeps/_workspace/src/github.com/obscuren/qml/cpp/mmemwin.cpp deleted file mode 100644 index 7aa3bff2ba..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/cpp/mmemwin.cpp +++ /dev/null @@ -1,27 +0,0 @@ -#include - -#define protREAD 1 -#define protWRITE 2 -#define protEXEC 4 - -extern "C" { - -int mprotect(void *addr, size_t len, int prot) -{ - DWORD wprot = 0; - if (prot & protWRITE) { - wprot = PAGE_READWRITE; - } else if (prot & protREAD) { - wprot = PAGE_READONLY; - } - if (prot & protEXEC) { - wprot <<= 4; - } - DWORD oldwprot; - if (!VirtualProtect(addr, len, wprot, &oldwprot)) { - return -1; - } - return 0; -} - -} // extern "C" diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/cpp/moc_all.cpp b/Godeps/_workspace/src/github.com/obscuren/qml/cpp/moc_all.cpp deleted file mode 100644 index cff0970589..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/cpp/moc_all.cpp +++ /dev/null @@ -1,4 +0,0 @@ -// This file is automatically generated by cpp/update-moc.sh -#include "cpp/moc_connector.cpp" -#include "cpp/moc_govalue.cpp" -#include "cpp/moc_idletimer.cpp" diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/cpp/moc_connector.cpp b/Godeps/_workspace/src/github.com/obscuren/qml/cpp/moc_connector.cpp deleted file mode 100644 index 2de2d827a6..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/cpp/moc_connector.cpp +++ /dev/null @@ -1,211 +0,0 @@ -/**************************************************************************** -** Meta object code from reading C++ file 'connector.h' -** -** Created by: The Qt Meta Object Compiler version 67 (Qt 5.2.1) -** -** WARNING! All changes made in this file will be lost! -*****************************************************************************/ - -#include "connector.h" -#include -#include -#if !defined(Q_MOC_OUTPUT_REVISION) -#error "The header file 'connector.h' doesn't include ." -#elif Q_MOC_OUTPUT_REVISION != 67 -#error "This file was generated using the moc from 5.2.1. It" -#error "cannot be used with the include files from this version of Qt." -#error "(The moc has changed too much.)" -#endif - -QT_BEGIN_MOC_NAMESPACE -struct qt_meta_stringdata_Connector_t { - QByteArrayData data[3]; - char stringdata[19]; -}; -#define QT_MOC_LITERAL(idx, ofs, len) \ - Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \ - offsetof(qt_meta_stringdata_Connector_t, stringdata) + ofs \ - - idx * sizeof(QByteArrayData) \ - ) -static const qt_meta_stringdata_Connector_t qt_meta_stringdata_Connector = { - { -QT_MOC_LITERAL(0, 0, 9), -QT_MOC_LITERAL(1, 10, 6), -QT_MOC_LITERAL(2, 17, 0) - }, - "Connector\0invoke\0\0" -}; -#undef QT_MOC_LITERAL - -static const uint qt_meta_data_Connector[] = { - - // content: - 7, // revision - 0, // classname - 0, 0, // classinfo - 1, 14, // methods - 0, 0, // properties - 0, 0, // enums/sets - 0, 0, // constructors - 0, // flags - 0, // signalCount - - // slots: name, argc, parameters, tag, flags - 1, 0, 19, 2, 0x0a, - - // slots: parameters - QMetaType::Void, - - 0 // eod -}; - -void Connector::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) -{ - if (_c == QMetaObject::InvokeMetaMethod) { - Connector *_t = static_cast(_o); - switch (_id) { - case 0: _t->invoke(); break; - default: ; - } - } - Q_UNUSED(_a); -} - -const QMetaObject Connector::staticMetaObject = { - { &QObject::staticMetaObject, qt_meta_stringdata_Connector.data, - qt_meta_data_Connector, qt_static_metacall, 0, 0} -}; - - -const QMetaObject *Connector::metaObject() const -{ - return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; -} - -void *Connector::qt_metacast(const char *_clname) -{ - if (!_clname) return 0; - if (!strcmp(_clname, qt_meta_stringdata_Connector.stringdata)) - return static_cast(const_cast< Connector*>(this)); - return QObject::qt_metacast(_clname); -} - -int Connector::standard_qt_metacall(QMetaObject::Call _c, int _id, void **_a) -{ - _id = QObject::qt_metacall(_c, _id, _a); - if (_id < 0) - return _id; - if (_c == QMetaObject::InvokeMetaMethod) { - if (_id < 1) - qt_static_metacall(this, _c, _id, _a); - _id -= 1; - } else if (_c == QMetaObject::RegisterMethodArgumentMetaType) { - if (_id < 1) - *reinterpret_cast(_a[0]) = -1; - _id -= 1; - } - return _id; -} -struct qt_meta_stringdata_PlainObject_t { - QByteArrayData data[3]; - char stringdata[33]; -}; -#define QT_MOC_LITERAL(idx, ofs, len) \ - Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \ - offsetof(qt_meta_stringdata_PlainObject_t, stringdata) + ofs \ - - idx * sizeof(QByteArrayData) \ - ) -static const qt_meta_stringdata_PlainObject_t qt_meta_stringdata_PlainObject = { - { -QT_MOC_LITERAL(0, 0, 11), -QT_MOC_LITERAL(1, 12, 9), -QT_MOC_LITERAL(2, 22, 9) - }, - "PlainObject\0plainType\0plainAddr\0" -}; -#undef QT_MOC_LITERAL - -static const uint qt_meta_data_PlainObject[] = { - - // content: - 7, // revision - 0, // classname - 0, 0, // classinfo - 0, 0, // methods - 2, 14, // properties - 0, 0, // enums/sets - 0, 0, // constructors - 0, // flags - 0, // signalCount - - // properties: name, type, flags - 1, QMetaType::QString, 0x00095001, - 2, QMetaType::VoidStar, 0x00095001, - - 0 // eod -}; - -void PlainObject::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) -{ - Q_UNUSED(_o); - Q_UNUSED(_id); - Q_UNUSED(_c); - Q_UNUSED(_a); -} - -const QMetaObject PlainObject::staticMetaObject = { - { &QObject::staticMetaObject, qt_meta_stringdata_PlainObject.data, - qt_meta_data_PlainObject, qt_static_metacall, 0, 0} -}; - - -const QMetaObject *PlainObject::metaObject() const -{ - return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; -} - -void *PlainObject::qt_metacast(const char *_clname) -{ - if (!_clname) return 0; - if (!strcmp(_clname, qt_meta_stringdata_PlainObject.stringdata)) - return static_cast(const_cast< PlainObject*>(this)); - return QObject::qt_metacast(_clname); -} - -int PlainObject::qt_metacall(QMetaObject::Call _c, int _id, void **_a) -{ - _id = QObject::qt_metacall(_c, _id, _a); - if (_id < 0) - return _id; - -#ifndef QT_NO_PROPERTIES - if (_c == QMetaObject::ReadProperty) { - void *_v = _a[0]; - switch (_id) { - case 0: *reinterpret_cast< QString*>(_v) = getPlainType(); break; - case 1: *reinterpret_cast< void**>(_v) = getPlainAddr(); break; - } - _id -= 2; - } else if (_c == QMetaObject::WriteProperty) { - _id -= 2; - } else if (_c == QMetaObject::ResetProperty) { - _id -= 2; - } else if (_c == QMetaObject::QueryPropertyDesignable) { - _id -= 2; - } else if (_c == QMetaObject::QueryPropertyScriptable) { - _id -= 2; - } else if (_c == QMetaObject::QueryPropertyStored) { - _id -= 2; - } else if (_c == QMetaObject::QueryPropertyEditable) { - _id -= 2; - } else if (_c == QMetaObject::QueryPropertyUser) { - _id -= 2; - } else if (_c == QMetaObject::RegisterPropertyMetaType) { - if (_id < 2) - *reinterpret_cast(_a[0]) = -1; - _id -= 2; - } -#endif // QT_NO_PROPERTIES - return _id; -} -QT_END_MOC_NAMESPACE diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/cpp/moc_govalue.cpp b/Godeps/_workspace/src/github.com/obscuren/qml/cpp/moc_govalue.cpp deleted file mode 100644 index e41f86042a..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/cpp/moc_govalue.cpp +++ /dev/null @@ -1,155 +0,0 @@ -/**************************************************************************** -** Meta object code from reading C++ file 'govalue.h' -** -** Created by: The Qt Meta Object Compiler version 67 (Qt 5.2.1) -** -** WARNING! All changes made in this file will be lost! -*****************************************************************************/ - -#include "govalue.h" -#include -#include -#if !defined(Q_MOC_OUTPUT_REVISION) -#error "The header file 'govalue.h' doesn't include ." -#elif Q_MOC_OUTPUT_REVISION != 67 -#error "This file was generated using the moc from 5.2.1. It" -#error "cannot be used with the include files from this version of Qt." -#error "(The moc has changed too much.)" -#endif - -QT_BEGIN_MOC_NAMESPACE -struct qt_meta_stringdata_GoValue_t { - QByteArrayData data[1]; - char stringdata[9]; -}; -#define QT_MOC_LITERAL(idx, ofs, len) \ - Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \ - offsetof(qt_meta_stringdata_GoValue_t, stringdata) + ofs \ - - idx * sizeof(QByteArrayData) \ - ) -static const qt_meta_stringdata_GoValue_t qt_meta_stringdata_GoValue = { - { -QT_MOC_LITERAL(0, 0, 7) - }, - "GoValue\0" -}; -#undef QT_MOC_LITERAL - -static const uint qt_meta_data_GoValue[] = { - - // content: - 7, // revision - 0, // classname - 0, 0, // classinfo - 0, 0, // methods - 0, 0, // properties - 0, 0, // enums/sets - 0, 0, // constructors - 0, // flags - 0, // signalCount - - 0 // eod -}; - -void GoValue::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) -{ - Q_UNUSED(_o); - Q_UNUSED(_id); - Q_UNUSED(_c); - Q_UNUSED(_a); -} - -const QMetaObject GoValue::staticMetaObject = { - { &QObject::staticMetaObject, qt_meta_stringdata_GoValue.data, - qt_meta_data_GoValue, qt_static_metacall, 0, 0} -}; - - -const QMetaObject *GoValue::metaObject() const -{ - return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; -} - -void *GoValue::qt_metacast(const char *_clname) -{ - if (!_clname) return 0; - if (!strcmp(_clname, qt_meta_stringdata_GoValue.stringdata)) - return static_cast(const_cast< GoValue*>(this)); - return QObject::qt_metacast(_clname); -} - -int GoValue::qt_metacall(QMetaObject::Call _c, int _id, void **_a) -{ - _id = QObject::qt_metacall(_c, _id, _a); - if (_id < 0) - return _id; - return _id; -} -struct qt_meta_stringdata_GoPaintedValue_t { - QByteArrayData data[1]; - char stringdata[16]; -}; -#define QT_MOC_LITERAL(idx, ofs, len) \ - Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \ - offsetof(qt_meta_stringdata_GoPaintedValue_t, stringdata) + ofs \ - - idx * sizeof(QByteArrayData) \ - ) -static const qt_meta_stringdata_GoPaintedValue_t qt_meta_stringdata_GoPaintedValue = { - { -QT_MOC_LITERAL(0, 0, 14) - }, - "GoPaintedValue\0" -}; -#undef QT_MOC_LITERAL - -static const uint qt_meta_data_GoPaintedValue[] = { - - // content: - 7, // revision - 0, // classname - 0, 0, // classinfo - 0, 0, // methods - 0, 0, // properties - 0, 0, // enums/sets - 0, 0, // constructors - 0, // flags - 0, // signalCount - - 0 // eod -}; - -void GoPaintedValue::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) -{ - Q_UNUSED(_o); - Q_UNUSED(_id); - Q_UNUSED(_c); - Q_UNUSED(_a); -} - -const QMetaObject GoPaintedValue::staticMetaObject = { - { &QQuickPaintedItem::staticMetaObject, qt_meta_stringdata_GoPaintedValue.data, - qt_meta_data_GoPaintedValue, qt_static_metacall, 0, 0} -}; - - -const QMetaObject *GoPaintedValue::metaObject() const -{ - return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; -} - -void *GoPaintedValue::qt_metacast(const char *_clname) -{ - if (!_clname) return 0; - if (!strcmp(_clname, qt_meta_stringdata_GoPaintedValue.stringdata)) - return static_cast(const_cast< GoPaintedValue*>(this)); - return QQuickPaintedItem::qt_metacast(_clname); -} - -int GoPaintedValue::qt_metacall(QMetaObject::Call _c, int _id, void **_a) -{ - _id = QQuickPaintedItem::qt_metacall(_c, _id, _a); - if (_id < 0) - return _id; - return _id; -} -QT_END_MOC_NAMESPACE diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/cpp/moc_idletimer.cpp b/Godeps/_workspace/src/github.com/obscuren/qml/cpp/moc_idletimer.cpp deleted file mode 100644 index 98dda16e35..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/cpp/moc_idletimer.cpp +++ /dev/null @@ -1,108 +0,0 @@ -/**************************************************************************** -** Meta object code from reading C++ file 'idletimer.cpp' -** -** Created by: The Qt Meta Object Compiler version 67 (Qt 5.2.1) -** -** WARNING! All changes made in this file will be lost! -*****************************************************************************/ - -#include -#include -#if !defined(Q_MOC_OUTPUT_REVISION) -#error "The header file 'idletimer.cpp' doesn't include ." -#elif Q_MOC_OUTPUT_REVISION != 67 -#error "This file was generated using the moc from 5.2.1. It" -#error "cannot be used with the include files from this version of Qt." -#error "(The moc has changed too much.)" -#endif - -QT_BEGIN_MOC_NAMESPACE -struct qt_meta_stringdata_IdleTimer_t { - QByteArrayData data[3]; - char stringdata[18]; -}; -#define QT_MOC_LITERAL(idx, ofs, len) \ - Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \ - offsetof(qt_meta_stringdata_IdleTimer_t, stringdata) + ofs \ - - idx * sizeof(QByteArrayData) \ - ) -static const qt_meta_stringdata_IdleTimer_t qt_meta_stringdata_IdleTimer = { - { -QT_MOC_LITERAL(0, 0, 9), -QT_MOC_LITERAL(1, 10, 5), -QT_MOC_LITERAL(2, 16, 0) - }, - "IdleTimer\0start\0\0" -}; -#undef QT_MOC_LITERAL - -static const uint qt_meta_data_IdleTimer[] = { - - // content: - 7, // revision - 0, // classname - 0, 0, // classinfo - 1, 14, // methods - 0, 0, // properties - 0, 0, // enums/sets - 0, 0, // constructors - 0, // flags - 0, // signalCount - - // methods: name, argc, parameters, tag, flags - 1, 0, 19, 2, 0x02, - - // methods: parameters - QMetaType::Void, - - 0 // eod -}; - -void IdleTimer::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) -{ - if (_c == QMetaObject::InvokeMetaMethod) { - IdleTimer *_t = static_cast(_o); - switch (_id) { - case 0: _t->start(); break; - default: ; - } - } - Q_UNUSED(_a); -} - -const QMetaObject IdleTimer::staticMetaObject = { - { &QObject::staticMetaObject, qt_meta_stringdata_IdleTimer.data, - qt_meta_data_IdleTimer, qt_static_metacall, 0, 0} -}; - - -const QMetaObject *IdleTimer::metaObject() const -{ - return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; -} - -void *IdleTimer::qt_metacast(const char *_clname) -{ - if (!_clname) return 0; - if (!strcmp(_clname, qt_meta_stringdata_IdleTimer.stringdata)) - return static_cast(const_cast< IdleTimer*>(this)); - return QObject::qt_metacast(_clname); -} - -int IdleTimer::qt_metacall(QMetaObject::Call _c, int _id, void **_a) -{ - _id = QObject::qt_metacall(_c, _id, _a); - if (_id < 0) - return _id; - if (_c == QMetaObject::InvokeMetaMethod) { - if (_id < 1) - qt_static_metacall(this, _c, _id, _a); - _id -= 1; - } else if (_c == QMetaObject::RegisterMethodArgumentMetaType) { - if (_id < 1) - *reinterpret_cast(_a[0]) = -1; - _id -= 1; - } - return _id; -} -QT_END_MOC_NAMESPACE diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/cpp/private/qmetaobject_p.h b/Godeps/_workspace/src/github.com/obscuren/qml/cpp/private/qmetaobject_p.h deleted file mode 100644 index af506e54f8..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/cpp/private/qmetaobject_p.h +++ /dev/null @@ -1,2 +0,0 @@ -#include "private/qtheader.h" -#include QT_PRIVATE_HEADER(QtCore,qmetaobject_p.h) diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/cpp/private/qmetaobjectbuilder_p.h b/Godeps/_workspace/src/github.com/obscuren/qml/cpp/private/qmetaobjectbuilder_p.h deleted file mode 100644 index 47cd9b77fc..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/cpp/private/qmetaobjectbuilder_p.h +++ /dev/null @@ -1,2 +0,0 @@ -#include "private/qtheader.h" -#include QT_PRIVATE_HEADER(QtCore,qmetaobjectbuilder_p.h) diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/cpp/private/qobject_p.h b/Godeps/_workspace/src/github.com/obscuren/qml/cpp/private/qobject_p.h deleted file mode 100644 index 75c7f84b43..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/cpp/private/qobject_p.h +++ /dev/null @@ -1,2 +0,0 @@ -#include "private/qtheader.h" -#include QT_PRIVATE_HEADER(QtCore,qobject_p.h) diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/cpp/private/qtheader.h b/Godeps/_workspace/src/github.com/obscuren/qml/cpp/private/qtheader.h deleted file mode 100644 index efa8b87c4f..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/cpp/private/qtheader.h +++ /dev/null @@ -1,70 +0,0 @@ -#ifndef QTPRIVATE_H -#define QTPRIVATE_H - -#include - -#define QT_MAJOR_ (QT_VERSION>>16) -#define QT_MINOR_ (QT_VERSION>>8&0xFF) -#define QT_MICRO_ (QT_VERSION&0xFF) - -#if QT_MAJOR_ == 5 -#define QT_MAJOR 5 -#else -#error Unupported Qt major version. Please report. -#endif - -#if QT_MINOR_ == 0 -#define QT_MINOR 0 -#elif QT_MINOR_ == 1 -#define QT_MINOR 1 -#elif QT_MINOR_ == 2 -#define QT_MINOR 2 -#elif QT_MINOR_ == 3 -#define QT_MINOR 3 -#elif QT_MINOR_ == 4 -#define QT_MINOR 4 -#elif QT_MINOR_ == 5 -#define QT_MINOR 5 -#elif QT_MINOR_ == 6 -#define QT_MINOR 6 -#elif QT_MINOR_ == 7 -#define QT_MINOR 7 -#elif QT_MINOR_ == 8 -#define QT_MINOR 8 -#elif QT_MINOR_ == 9 -#define QT_MINOR 9 -#elif QT_MINOR_ == 10 -#define QT_MINOR 10 -#else -#error Unupported Qt minor version. Please report. -#endif - -#if QT_MICRO_ == 0 -#define QT_MICRO 0 -#elif QT_MICRO_ == 1 -#define QT_MICRO 1 -#elif QT_MICRO_ == 2 -#define QT_MICRO 2 -#elif QT_MICRO_ == 3 -#define QT_MICRO 3 -#elif QT_MICRO_ == 4 -#define QT_MICRO 4 -#elif QT_MICRO_ == 5 -#define QT_MICRO 5 -#elif QT_MICRO_ == 6 -#define QT_MICRO 6 -#elif QT_MICRO_ == 7 -#define QT_MICRO 7 -#elif QT_MICRO_ == 8 -#define QT_MICRO 8 -#elif QT_MICRO_ == 9 -#define QT_MICRO 9 -#elif QT_MICRO_ == 10 -#define QT_MICRO 10 -#else -#error Unupported Qt micro version. Please report. -#endif - -#define QT_PRIVATE_HEADER(dir,file) - -#endif // QTPRIVATE_H diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/cpp/update-moc.sh b/Godeps/_workspace/src/github.com/obscuren/qml/cpp/update-moc.sh deleted file mode 100644 index 135840f452..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/cpp/update-moc.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/sh - -set -e -cd `dirname $0` - -subdir=`basename $PWD` - -export QT_SELECT=5 - -ALL=moc_all.cpp - -echo "// This file is automatically generated by cpp/update-moc.sh" > $ALL - -for file in `grep -l Q_''OBJECT *`; do - mocfile=`echo $file | awk -F. '{print("moc_"$1".cpp")}'` - mochack=`sed -n 's,^ *// MOC HACK: \(.*\),\1,p' $file` - moc $file | sed "$mochack" > $mocfile - echo "#include \"$subdir/$mocfile\"" >> $ALL -done diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/cpptest/cpptest.cpp b/Godeps/_workspace/src/github.com/obscuren/qml/cpptest/cpptest.cpp deleted file mode 100644 index e0b25699f4..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/cpptest/cpptest.cpp +++ /dev/null @@ -1,14 +0,0 @@ -#include - -#include "cpptest.h" -#include "testtype.h" - -TestType_ *newTestType() -{ - return new TestType(); -} - -int plainTestTypeN(PlainTestType_ *plain) -{ - return static_cast(plain)->n; -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/cpptest/cpptest.go b/Godeps/_workspace/src/github.com/obscuren/qml/cpptest/cpptest.go deleted file mode 100644 index 4ba24bce0e..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/cpptest/cpptest.go +++ /dev/null @@ -1,30 +0,0 @@ -// Package cpptest is an internal test helper. -package cpptest - -// #cgo CXXFLAGS: -std=c++0x -Wall -fno-strict-aliasing -I.. -// #cgo LDFLAGS: -lstdc++ -// -// #cgo pkg-config: Qt5Core -// -// #include "cpptest.h" -// -import "C" - -import ( - "unsafe" - - "gopkg.in/qml.v1" -) - -func NewTestType(engine *qml.Engine) qml.Object { - var obj qml.Object - qml.RunMain(func() { - addr := C.newTestType() - obj = qml.CommonOf(addr, engine) - }) - return obj -} - -func PlainTestTypeN(obj qml.Object) int { - return int(C.plainTestTypeN(unsafe.Pointer(obj.Property("plainAddr").(uintptr)))) -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/cpptest/cpptest.h b/Godeps/_workspace/src/github.com/obscuren/qml/cpptest/cpptest.h deleted file mode 100644 index e06a8af3ff..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/cpptest/cpptest.h +++ /dev/null @@ -1,23 +0,0 @@ -#ifndef UONEAUTH_H -#define UONEAUTH_H - -#include -#include -#include - -typedef void TestType_; -typedef void PlainTestType_; - -#ifdef __cplusplus -extern "C" { -#endif - -TestType_ *newTestType(); - -int plainTestTypeN(PlainTestType_ *plain); - -#ifdef __cplusplus -} -#endif - -#endif // UONEAUTH_H diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/cpptest/moc_testtype.cpp b/Godeps/_workspace/src/github.com/obscuren/qml/cpptest/moc_testtype.cpp deleted file mode 100644 index f958d1b8cf..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/cpptest/moc_testtype.cpp +++ /dev/null @@ -1,202 +0,0 @@ -/**************************************************************************** -** Meta object code from reading C++ file 'testtype.h' -** -** Created by: The Qt Meta Object Compiler version 67 (Qt 5.2.1) -** -** WARNING! All changes made in this file will be lost! -*****************************************************************************/ - -#include "testtype.h" -#include -#include -#if !defined(Q_MOC_OUTPUT_REVISION) -#error "The header file 'testtype.h' doesn't include ." -#elif Q_MOC_OUTPUT_REVISION != 67 -#error "This file was generated using the moc from 5.2.1. It" -#error "cannot be used with the include files from this version of Qt." -#error "(The moc has changed too much.)" -#endif - -QT_BEGIN_MOC_NAMESPACE -struct qt_meta_stringdata_TestType_t { - QByteArrayData data[10]; - char stringdata[119]; -}; -#define QT_MOC_LITERAL(idx, ofs, len) \ - Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \ - offsetof(qt_meta_stringdata_TestType_t, stringdata) + ofs \ - - idx * sizeof(QByteArrayData) \ - ) -static const qt_meta_stringdata_TestType_t qt_meta_stringdata_TestType = { - { -QT_MOC_LITERAL(0, 0, 8), -QT_MOC_LITERAL(1, 9, 15), -QT_MOC_LITERAL(2, 25, 0), -QT_MOC_LITERAL(3, 26, 13), -QT_MOC_LITERAL(4, 40, 5), -QT_MOC_LITERAL(5, 46, 15), -QT_MOC_LITERAL(6, 62, 15), -QT_MOC_LITERAL(7, 78, 20), -QT_MOC_LITERAL(8, 99, 9), -QT_MOC_LITERAL(9, 109, 8) - }, - "TestType\0plainEmittedCpy\0\0PlainTestType\0" - "plain\0plainEmittedRef\0plainEmittedPtr\0" - "const PlainTestType*\0emitPlain\0voidAddr\0" -}; -#undef QT_MOC_LITERAL - -static const uint qt_meta_data_TestType[] = { - - // content: - 7, // revision - 0, // classname - 0, 0, // classinfo - 4, 14, // methods - 1, 44, // properties - 0, 0, // enums/sets - 0, 0, // constructors - 0, // flags - 3, // signalCount - - // signals: name, argc, parameters, tag, flags - 1, 1, 34, 2, 0x06, - 5, 1, 37, 2, 0x06, - 6, 1, 40, 2, 0x06, - - // methods: name, argc, parameters, tag, flags - 8, 0, 43, 2, 0x02, - - // signals: parameters - QMetaType::Void, 0x80000000 | 3, 4, - QMetaType::Void, 0x80000000 | 3, 4, - QMetaType::Void, 0x80000000 | 7, 4, - - // methods: parameters - QMetaType::Void, - - // properties: name, type, flags - 9, QMetaType::VoidStar, 0x00095001, - - 0 // eod -}; - -void TestType::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) -{ - if (_c == QMetaObject::InvokeMetaMethod) { - TestType *_t = static_cast(_o); - switch (_id) { - case 0: _t->plainEmittedCpy((*reinterpret_cast< const PlainTestType(*)>(_a[1]))); break; - case 1: _t->plainEmittedRef((*reinterpret_cast< const PlainTestType(*)>(_a[1]))); break; - case 2: _t->plainEmittedPtr((*reinterpret_cast< const PlainTestType*(*)>(_a[1]))); break; - case 3: _t->emitPlain(); break; - default: ; - } - } else if (_c == QMetaObject::IndexOfMethod) { - int *result = reinterpret_cast(_a[0]); - void **func = reinterpret_cast(_a[1]); - { - typedef void (TestType::*_t)(const PlainTestType ); - if (*reinterpret_cast<_t *>(func) == static_cast<_t>(&TestType::plainEmittedCpy)) { - *result = 0; - } - } - { - typedef void (TestType::*_t)(const PlainTestType & ); - if (*reinterpret_cast<_t *>(func) == static_cast<_t>(&TestType::plainEmittedRef)) { - *result = 1; - } - } - { - typedef void (TestType::*_t)(const PlainTestType * ); - if (*reinterpret_cast<_t *>(func) == static_cast<_t>(&TestType::plainEmittedPtr)) { - *result = 2; - } - } - } -} - -const QMetaObject TestType::staticMetaObject = { - { &QObject::staticMetaObject, qt_meta_stringdata_TestType.data, - qt_meta_data_TestType, qt_static_metacall, 0, 0} -}; - - -const QMetaObject *TestType::metaObject() const -{ - return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; -} - -void *TestType::qt_metacast(const char *_clname) -{ - if (!_clname) return 0; - if (!strcmp(_clname, qt_meta_stringdata_TestType.stringdata)) - return static_cast(const_cast< TestType*>(this)); - return QObject::qt_metacast(_clname); -} - -int TestType::qt_metacall(QMetaObject::Call _c, int _id, void **_a) -{ - _id = QObject::qt_metacall(_c, _id, _a); - if (_id < 0) - return _id; - if (_c == QMetaObject::InvokeMetaMethod) { - if (_id < 4) - qt_static_metacall(this, _c, _id, _a); - _id -= 4; - } else if (_c == QMetaObject::RegisterMethodArgumentMetaType) { - if (_id < 4) - *reinterpret_cast(_a[0]) = -1; - _id -= 4; - } -#ifndef QT_NO_PROPERTIES - else if (_c == QMetaObject::ReadProperty) { - void *_v = _a[0]; - switch (_id) { - case 0: *reinterpret_cast< void**>(_v) = getVoidAddr(); break; - } - _id -= 1; - } else if (_c == QMetaObject::WriteProperty) { - _id -= 1; - } else if (_c == QMetaObject::ResetProperty) { - _id -= 1; - } else if (_c == QMetaObject::QueryPropertyDesignable) { - _id -= 1; - } else if (_c == QMetaObject::QueryPropertyScriptable) { - _id -= 1; - } else if (_c == QMetaObject::QueryPropertyStored) { - _id -= 1; - } else if (_c == QMetaObject::QueryPropertyEditable) { - _id -= 1; - } else if (_c == QMetaObject::QueryPropertyUser) { - _id -= 1; - } else if (_c == QMetaObject::RegisterPropertyMetaType) { - if (_id < 1) - *reinterpret_cast(_a[0]) = -1; - _id -= 1; - } -#endif // QT_NO_PROPERTIES - return _id; -} - -// SIGNAL 0 -void TestType::plainEmittedCpy(const PlainTestType _t1) -{ - void *_a[] = { 0, const_cast(reinterpret_cast(&_t1)) }; - QMetaObject::activate(this, &staticMetaObject, 0, _a); -} - -// SIGNAL 1 -void TestType::plainEmittedRef(const PlainTestType & _t1) -{ - void *_a[] = { 0, const_cast(reinterpret_cast(&_t1)) }; - QMetaObject::activate(this, &staticMetaObject, 1, _a); -} - -// SIGNAL 2 -void TestType::plainEmittedPtr(const PlainTestType * _t1) -{ - void *_a[] = { 0, const_cast(reinterpret_cast(&_t1)) }; - QMetaObject::activate(this, &staticMetaObject, 2, _a); -} -QT_END_MOC_NAMESPACE diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/cpptest/testtype.h b/Godeps/_workspace/src/github.com/obscuren/qml/cpptest/testtype.h deleted file mode 100644 index 4d281b98f2..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/cpptest/testtype.h +++ /dev/null @@ -1,45 +0,0 @@ -#ifndef TESTTYPE_H -#define TESTTYPE_H - -#include - -class PlainTestType { - - public: - - PlainTestType(int n) : n(n) {}; - - int n; -}; - -class TestType : public QObject -{ - Q_OBJECT - - Q_PROPERTY(void *voidAddr READ getVoidAddr) - - void *voidAddr; - - public: - - TestType(QObject *parent = 0) : QObject(parent), voidAddr((void*)42) {}; - - void *getVoidAddr() { return voidAddr; }; - - Q_INVOKABLE void emitPlain() { - PlainTestType plain = PlainTestType(42); - emit plainEmittedCpy(plain); - emit plainEmittedRef(plain); - emit plainEmittedPtr(&plain); - }; - - signals: - - void plainEmittedCpy(const PlainTestType plain); - void plainEmittedRef(const PlainTestType &plain); - void plainEmittedPtr(const PlainTestType *plain); -}; - -#endif // TESTTYPE_H - -// vim:ts=4:sw=4:et diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/cpptest/update-moc.sh b/Godeps/_workspace/src/github.com/obscuren/qml/cpptest/update-moc.sh deleted file mode 100644 index 9abbfdf2b9..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/cpptest/update-moc.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh - -set -e -cd `dirname $0` - -export QT_SELECT=5 - -for file in `grep -l Q_''OBJECT *`; do - mocfile=`echo $file | awk -F. '{print("moc_"$1".cpp")}'` - mochack=`sed -n 's,^ *// MOC HACK: \(.*\),\1,p' $file` - moc $file | sed "$mochack" > $mocfile -done diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/datatype.go b/Godeps/_workspace/src/github.com/obscuren/qml/datatype.go deleted file mode 100644 index 875c54622d..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/datatype.go +++ /dev/null @@ -1,531 +0,0 @@ -package qml - -// #include -// #include "capi.h" -import "C" - -import ( - "bytes" - "fmt" - "image/color" - "reflect" - "strings" - "unicode" - "unsafe" -) - -var ( - intIs64 bool - intDT C.DataType - - ptrSize = C.size_t(unsafe.Sizeof(uintptr(0))) - - nilPtr = unsafe.Pointer(uintptr(0)) - nilCharPtr = (*C.char)(nilPtr) - - typeString = reflect.TypeOf("") - typeBool = reflect.TypeOf(false) - typeInt = reflect.TypeOf(int(0)) - typeInt64 = reflect.TypeOf(int64(0)) - typeInt32 = reflect.TypeOf(int32(0)) - typeFloat64 = reflect.TypeOf(float64(0)) - typeFloat32 = reflect.TypeOf(float32(0)) - typeIface = reflect.TypeOf(new(interface{})).Elem() - typeRGBA = reflect.TypeOf(color.RGBA{}) - typeObjSlice = reflect.TypeOf([]Object(nil)) - typeObject = reflect.TypeOf([]Object(nil)).Elem() - typePainter = reflect.TypeOf(&Painter{}) - typeList = reflect.TypeOf(&List{}) - typeMap = reflect.TypeOf(&Map{}) - typeGenericMap = reflect.TypeOf(map[string]interface{}(nil)) -) - -func init() { - var i int = 1<<31 - 1 - intIs64 = (i+1 > 0) - if intIs64 { - intDT = C.DTInt64 - } else { - intDT = C.DTInt32 - } -} - -// packDataValue packs the provided Go value into a C.DataValue for -// shiping into C++ land. -// -// For simple types (bool, int, etc) value is converted into a -// native C++ value. For anything else, including cases when value -// has a type that has an underlying simple type, the Go value itself -// is encapsulated into a C++ wrapper so that field access and method -// calls work. -// -// This must be run from the main GUI thread due to the cases where -// calling wrapGoValue is necessary. -func packDataValue(value interface{}, dvalue *C.DataValue, engine *Engine, owner valueOwner) { - datap := unsafe.Pointer(&dvalue.data) - if value == nil { - dvalue.dataType = C.DTInvalid - return - } - switch value := value.(type) { - case string: - dvalue.dataType = C.DTString - cstr, cstrlen := unsafeStringData(value) - *(**C.char)(datap) = cstr - dvalue.len = cstrlen - case bool: - dvalue.dataType = C.DTBool - *(*bool)(datap) = value - case int: - if value > 1<<31-1 { - dvalue.dataType = C.DTInt64 - *(*int64)(datap) = int64(value) - } else { - dvalue.dataType = C.DTInt32 - *(*int32)(datap) = int32(value) - } - case int64: - dvalue.dataType = C.DTInt64 - *(*int64)(datap) = value - case int32: - dvalue.dataType = C.DTInt32 - *(*int32)(datap) = value - case uint64: - dvalue.dataType = C.DTUint64 - *(*uint64)(datap) = value - case uint32: - dvalue.dataType = C.DTUint32 - *(*uint32)(datap) = value - case float64: - dvalue.dataType = C.DTFloat64 - *(*float64)(datap) = value - case float32: - dvalue.dataType = C.DTFloat32 - *(*float32)(datap) = value - case *Common: - dvalue.dataType = C.DTObject - *(*unsafe.Pointer)(datap) = value.addr - case color.RGBA: - dvalue.dataType = C.DTColor - *(*uint32)(datap) = uint32(value.A)<<24 | uint32(value.R)<<16 | uint32(value.G)<<8 | uint32(value.B) - default: - dvalue.dataType = C.DTObject - if obj, ok := value.(Object); ok { - *(*unsafe.Pointer)(datap) = obj.Common().addr - } else { - *(*unsafe.Pointer)(datap) = wrapGoValue(engine, value, owner) - } - } -} - -// TODO Handle byte slices. - -// unpackDataValue converts a value shipped by C++ into a native Go value. -// -// HEADS UP: This is considered safe to be run out of the main GUI thread. -// If that changes, fix the call sites. -func unpackDataValue(dvalue *C.DataValue, engine *Engine) interface{} { - datap := unsafe.Pointer(&dvalue.data) - switch dvalue.dataType { - case C.DTString: - s := C.GoStringN(*(**C.char)(datap), dvalue.len) - // TODO If we move all unpackDataValue calls to the GUI thread, - // can we get rid of this allocation somehow? - C.free(unsafe.Pointer(*(**C.char)(datap))) - return s - case C.DTBool: - return *(*bool)(datap) - case C.DTInt64: - return *(*int64)(datap) - case C.DTInt32: - return int(*(*int32)(datap)) - case C.DTUint64: - return *(*uint64)(datap) - case C.DTUint32: - return *(*uint32)(datap) - case C.DTUintptr: - return *(*uintptr)(datap) - case C.DTFloat64: - return *(*float64)(datap) - case C.DTFloat32: - return *(*float32)(datap) - case C.DTColor: - var c uint32 = *(*uint32)(datap) - return color.RGBA{byte(c >> 16), byte(c >> 8), byte(c), byte(c >> 24)} - case C.DTGoAddr: - // ObjectByName also does this fold conversion, to have access - // to the cvalue. Perhaps the fold should be returned. - fold := (*(**valueFold)(datap)) - ensureEngine(engine.addr, unsafe.Pointer(fold)) - return fold.gvalue - case C.DTInvalid: - return nil - case C.DTObject: - // TODO Would be good to preserve identity on the Go side. See initGoType as well. - obj := &Common{ - engine: engine, - addr: *(*unsafe.Pointer)(datap), - } - if len(converters) > 0 { - // TODO Embed the type name in DataValue to drop these calls. - typeName := obj.TypeName() - if typeName == "PlainObject" { - typeName = strings.TrimRight(obj.String("plainType"), "&*") - if strings.HasPrefix(typeName, "const ") { - typeName = typeName[6:] - } - } - if f, ok := converters[typeName]; ok { - return f(engine, obj) - } - } - return obj - case C.DTValueList, C.DTValueMap: - var dvlist []C.DataValue - var dvlisth = (*reflect.SliceHeader)(unsafe.Pointer(&dvlist)) - dvlisth.Data = uintptr(*(*unsafe.Pointer)(datap)) - dvlisth.Len = int(dvalue.len) - dvlisth.Cap = int(dvalue.len) - result := make([]interface{}, len(dvlist)) - for i := range result { - result[i] = unpackDataValue(&dvlist[i], engine) - } - C.free(*(*unsafe.Pointer)(datap)) - if dvalue.dataType == C.DTValueList { - return &List{result} - } else { - return &Map{result} - } - } - panic(fmt.Sprintf("unsupported data type: %d", dvalue.dataType)) -} - -func dataTypeOf(typ reflect.Type) C.DataType { - // Compare against the specific types rather than their kind. - // Custom types may have methods that must be supported. - switch typ { - case typeString: - return C.DTString - case typeBool: - return C.DTBool - case typeInt: - return intDT - case typeInt64: - return C.DTInt64 - case typeInt32: - return C.DTInt32 - case typeFloat32: - return C.DTFloat32 - case typeFloat64: - return C.DTFloat64 - case typeIface: - return C.DTAny - case typeRGBA: - return C.DTColor - case typeObjSlice: - return C.DTListProperty - } - return C.DTObject -} - -var typeInfoSize = C.size_t(unsafe.Sizeof(C.GoTypeInfo{})) -var memberInfoSize = C.size_t(unsafe.Sizeof(C.GoMemberInfo{})) - -var typeInfoCache = make(map[reflect.Type]*C.GoTypeInfo) - -func appendLoweredName(buf []byte, name string) []byte { - var last rune - var lasti int - for i, rune := range name { - if !unicode.IsUpper(rune) { - if lasti == 0 { - last = unicode.ToLower(last) - } - buf = append(buf, string(last)...) - buf = append(buf, name[i:]...) - return buf - } - if i > 0 { - buf = append(buf, string(unicode.ToLower(last))...) - } - lasti, last = i, rune - } - return append(buf, string(unicode.ToLower(last))...) -} - -func typeInfo(v interface{}) *C.GoTypeInfo { - vt := reflect.TypeOf(v) - for vt.Kind() == reflect.Ptr { - vt = vt.Elem() - } - - typeInfo := typeInfoCache[vt] - if typeInfo != nil { - return typeInfo - } - - typeInfo = (*C.GoTypeInfo)(C.malloc(typeInfoSize)) - typeInfo.typeName = C.CString(vt.Name()) - typeInfo.metaObject = nilPtr - typeInfo.paint = (*C.GoMemberInfo)(nilPtr) - - var setters map[string]int - var getters map[string]int - - // TODO Only do that if it's a struct? - vtptr := reflect.PtrTo(vt) - - if vt.Kind() != reflect.Struct { - panic(fmt.Sprintf("handling of %s (%#v) is incomplete; please report to the developers", vt, v)) - } - - numField := vt.NumField() - numMethod := vtptr.NumMethod() - privateFields := 0 - privateMethods := 0 - - // struct { FooBar T; Baz T } => "fooBar\0baz\0" - namesLen := 0 - for i := 0; i < numField; i++ { - field := vt.Field(i) - if field.PkgPath != "" { - privateFields++ - continue - } - namesLen += len(field.Name) + 1 - } - for i := 0; i < numMethod; i++ { - method := vtptr.Method(i) - if method.PkgPath != "" { - privateMethods++ - continue - } - namesLen += len(method.Name) + 1 - - // Track setters and getters. - if len(method.Name) > 3 && method.Name[:3] == "Set" { - if method.Type.NumIn() == 2 { - if setters == nil { - setters = make(map[string]int) - } - setters[method.Name[3:]] = i - } - } else if method.Type.NumIn() == 1 && method.Type.NumOut() == 1 { - if getters == nil { - getters = make(map[string]int) - } - getters[method.Name] = i - } - } - names := make([]byte, 0, namesLen) - for i := 0; i < numField; i++ { - field := vt.Field(i) - if field.PkgPath != "" { - continue // not exported - } - names = appendLoweredName(names, field.Name) - names = append(names, 0) - } - for i := 0; i < numMethod; i++ { - method := vtptr.Method(i) - if method.PkgPath != "" { - continue // not exported - } - if _, ok := getters[method.Name]; !ok { - continue - } - if _, ok := setters[method.Name]; !ok { - delete(getters, method.Name) - continue - } - // This is a getter method - names = appendLoweredName(names, method.Name) - names = append(names, 0) - } - for i := 0; i < numMethod; i++ { - method := vtptr.Method(i) - if method.PkgPath != "" { - continue // not exported - } - if _, ok := getters[method.Name]; ok { - continue // getter already handled above - } - names = appendLoweredName(names, method.Name) - names = append(names, 0) - } - if len(names) != namesLen { - panic("pre-allocated buffer size was wrong") - } - typeInfo.memberNames = C.CString(string(names)) - - // Assemble information on members. - membersLen := numField - privateFields + numMethod - privateMethods - membersi := uintptr(0) - mnamesi := uintptr(0) - members := uintptr(C.malloc(memberInfoSize * C.size_t(membersLen))) - mnames := uintptr(unsafe.Pointer(typeInfo.memberNames)) - for i := 0; i < numField; i++ { - field := vt.Field(i) - if field.PkgPath != "" { - continue // not exported - } - memberInfo := (*C.GoMemberInfo)(unsafe.Pointer(members + uintptr(memberInfoSize)*membersi)) - memberInfo.memberName = (*C.char)(unsafe.Pointer(mnames + mnamesi)) - memberInfo.memberType = dataTypeOf(field.Type) - memberInfo.reflectIndex = C.int(i) - memberInfo.reflectGetIndex = -1 - memberInfo.reflectSetIndex = -1 - memberInfo.addrOffset = C.int(field.Offset) - membersi += 1 - mnamesi += uintptr(len(field.Name)) + 1 - if methodIndex, ok := setters[field.Name]; ok { - memberInfo.reflectSetIndex = C.int(methodIndex) - } - } - for i := 0; i < numMethod; i++ { - method := vtptr.Method(i) - if method.PkgPath != "" { - continue // not exported - } - if _, ok := getters[method.Name]; !ok { - continue // not a getter - } - memberInfo := (*C.GoMemberInfo)(unsafe.Pointer(members + uintptr(memberInfoSize)*membersi)) - memberInfo.memberName = (*C.char)(unsafe.Pointer(mnames + mnamesi)) - memberInfo.memberType = dataTypeOf(method.Type.Out(0)) - memberInfo.reflectIndex = -1 - memberInfo.reflectGetIndex = C.int(getters[method.Name]) - memberInfo.reflectSetIndex = C.int(setters[method.Name]) - memberInfo.addrOffset = 0 - membersi += 1 - mnamesi += uintptr(len(method.Name)) + 1 - } - for i := 0; i < numMethod; i++ { - method := vtptr.Method(i) - if method.PkgPath != "" { - continue // not exported - } - if _, ok := getters[method.Name]; ok { - continue // getter already handled above - } - memberInfo := (*C.GoMemberInfo)(unsafe.Pointer(members + uintptr(memberInfoSize)*membersi)) - memberInfo.memberName = (*C.char)(unsafe.Pointer(mnames + mnamesi)) - memberInfo.memberType = C.DTMethod - memberInfo.reflectIndex = C.int(i) - memberInfo.reflectGetIndex = -1 - memberInfo.reflectSetIndex = -1 - memberInfo.addrOffset = 0 - signature, result := methodQtSignature(method) - // TODO The signature data might be embedded in the same array as the member names. - memberInfo.methodSignature = C.CString(signature) - memberInfo.resultSignature = C.CString(result) - // TODO Sort out methods with a variable number of arguments. - // It's called while bound, so drop the receiver. - memberInfo.numIn = C.int(method.Type.NumIn() - 1) - memberInfo.numOut = C.int(method.Type.NumOut()) - membersi += 1 - mnamesi += uintptr(len(method.Name)) + 1 - - if method.Name == "Paint" && memberInfo.numIn == 1 && memberInfo.numOut == 0 && method.Type.In(1) == typePainter { - typeInfo.paint = memberInfo - } - } - typeInfo.members = (*C.GoMemberInfo)(unsafe.Pointer(members)) - typeInfo.membersLen = C.int(membersLen) - - typeInfo.fields = typeInfo.members - typeInfo.fieldsLen = C.int(numField - privateFields + len(getters)) - typeInfo.methods = (*C.GoMemberInfo)(unsafe.Pointer(members + uintptr(memberInfoSize)*uintptr(typeInfo.fieldsLen))) - typeInfo.methodsLen = C.int(numMethod - privateMethods - len(getters)) - - if int(membersi) != membersLen { - panic("used more space than allocated for member names") - } - if int(mnamesi) != namesLen { - panic("allocated buffer doesn't match used space") - } - if typeInfo.fieldsLen+typeInfo.methodsLen != typeInfo.membersLen { - panic("lengths are inconsistent") - } - - typeInfoCache[vt] = typeInfo - return typeInfo -} - -func methodQtSignature(method reflect.Method) (signature, result string) { - var buf bytes.Buffer - for i, rune := range method.Name { - if i == 0 { - buf.WriteRune(unicode.ToLower(rune)) - } else { - buf.WriteString(method.Name[i:]) - break - } - } - buf.WriteByte('(') - n := method.Type.NumIn() - for i := 1; i < n; i++ { - if i > 1 { - buf.WriteByte(',') - } - buf.WriteString("QVariant") - } - buf.WriteByte(')') - signature = buf.String() - - switch method.Type.NumOut() { - case 0: - // keep it as "" - case 1: - result = "QVariant" - default: - result = "QVariantList" - } - return -} - -func hashable(value interface{}) (hashable bool) { - defer func() { recover() }() - return value == value -} - -// unsafeString returns a Go string backed by C data. -// -// If the C data is deallocated or moved, the string will be -// invalid and will crash the program if used. As such, the -// resulting string must only be used inside the implementation -// of the qml package and while the life time of the C data -// is guaranteed. -func unsafeString(data *C.char, size C.int) string { - var s string - sh := (*reflect.StringHeader)(unsafe.Pointer(&s)) - sh.Data = uintptr(unsafe.Pointer(data)) - sh.Len = int(size) - return s -} - -// unsafeStringData returns a C string backed by Go data. The C -// string is NOT null-terminated, so its length must be taken -// into account. -// -// If the s Go string is garbage collected, the returned C data -// will be invalid and will crash the program if used. As such, -// the resulting data must only be used inside the implementation -// of the qml package and while the life time of the Go string -// is guaranteed. -func unsafeStringData(s string) (*C.char, C.int) { - return *(**C.char)(unsafe.Pointer(&s)), C.int(len(s)) -} - -// unsafeBytesData returns a C string backed by Go data. The C -// string is NOT null-terminated, so its length must be taken -// into account. -// -// If the array backing the b Go slice is garbage collected, the -// returned C data will be invalid and will crash the program if -// used. As such, the resulting data must only be used inside the -// implementation of the qml package and while the life time of -// the Go array is guaranteed. -func unsafeBytesData(b []byte) (*C.char, C.int) { - return *(**C.char)(unsafe.Pointer(&b)), C.int(len(b)) -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/doc.go b/Godeps/_workspace/src/github.com/obscuren/qml/doc.go deleted file mode 100644 index 94b2404a9d..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/doc.go +++ /dev/null @@ -1,199 +0,0 @@ -// Package qml offers graphical QML application support for the Go language. -// -// Attention -// -// This package is in an alpha stage, and still in heavy development. APIs may -// change, and things may break. -// -// At this time contributors and developers that are interested in tracking the -// development closely are encouraged to use it. If you'd prefer a more stable -// release, please hold on a bit and subscribe to the mailing list for news. It's -// in a pretty good state, so it shall not take too long. -// -// See http://github.com/go-qml/qml for details. -// -// -// Introduction -// -// The qml package enables Go programs to display and manipulate graphical content -// using Qt's QML framework. QML uses a declarative language to express structure -// and style, and supports JavaScript for in-place manipulation of the described -// content. When using the Go qml package, such QML content can also interact with -// Go values, making use of its exported fields and methods, and even explicitly -// creating new instances of registered Go types. -// -// A simple Go application that integrates with QML may perform the following steps -// for offering a graphical interface: -// -// * Call qml.Run from function main providing a function with the logic below -// * Create an engine for loading and running QML content (see NewEngine) -// * Make Go values and types available to QML (see Context.SetVar and RegisterType) -// * Load QML content (see Engine.LoadString and Engine.LoadFile) -// * Create a new window for the content (see Component.CreateWindow) -// * Show the window and wait for it to be closed (see Window.Show and Window.Wait) -// -// Some of these topics are covered below, and may also be observed in practice -// in the following examples: -// -// https://github.com/go-qml/qml/tree/v1/examples -// -// -// Simple example -// -// The following logic demonstrates loading a QML file into a window: -// -// func main() { -// err := qml.Run(run) -// ... -// } -// -// func run() error { -// engine := qml.NewEngine() -// component, err := engine.LoadFile("file.qml") -// if err != nil { -// return err -// } -// win := component.CreateWindow(nil) -// win.Show() -// win.Wait() -// return nil -// } -// -// Handling QML objects in Go -// -// Any QML object may be manipulated by Go via the Object interface. That -// interface is implemented both by dynamic QML values obtained from a running -// engine, and by Go types in the qml package that represent QML values, such as -// Window, Context, and Engine. -// -// For example, the following logic creates a window and prints its width -// whenever it's made visible: -// -// win := component.CreateWindow(nil) -// win.On("visibleChanged", func(visible bool) { -// if (visible) { -// fmt.Println("Width:", win.Int("width")) -// } -// }) -// -// Information about the methods, properties, and signals that are available for QML -// objects may be obtained in the Qt documentation. As a reference, the "visibleChanged" -// signal and the "width" property used in the example above are described at: -// -// http://qt-project.org/doc/qt-5.0/qtgui/qwindow.html -// -// When in doubt about what type is being manipulated, the Object.TypeName method -// provides the type name of the underlying value. -// -// -// Publishing Go values to QML -// -// The simplest way of making a Go value available to QML code is setting it -// as a variable of the engine's root context, as in: -// -// context := engine.Context() -// context.SetVar("person", &Person{Name: "Ale"}) -// -// This logic would enable the following QML code to successfully run: -// -// import QtQuick 2.0 -// Item { -// Component.onCompleted: console.log("Name is", person.name) -// } -// -// -// Publishing Go types to QML -// -// While registering an individual Go value as described above is a quick way to get -// started, it is also fairly limited. For more flexibility, a Go type may be -// registered so that QML code can natively create new instances in an arbitrary -// position of the structure. This may be achieved via the RegisterType function, as -// the following example demonstrates: -// -// qml.RegisterTypes("GoExtensions", 1, 0, []qml.TypeSpec{{ -// Init: func(p *Person, obj qml.Object) { p.Name = "" }, -// }}) -// -// With this logic in place, QML code can create new instances of Person by itself: -// -// import QtQuick 2.0 -// import GoExtensions 1.0 -// Item{ -// Person { -// id: person -// name: "Ale" -// } -// Component.onCompleted: console.log("Name is", person.name) -// } -// -// -// Lowercasing of names -// -// Independently from the mechanism used to publish a Go value to QML code, its methods -// and fields are available to QML logic as methods and properties of the -// respective QML object representing it. As required by QML, though, the Go -// method and field names are lowercased according to the following scheme when -// being accesed from QML: -// -// value.Name => value.name -// value.UPPERName => value.upperName -// value.UPPER => value.upper -// -// -// Setters and getters -// -// While QML code can directly read and write exported fields of Go values, as described -// above, a Go type can also intercept writes to specific fields by declaring a setter -// method according to common Go conventions. This is often useful for updating the -// internal state or the visible content of a Go-defined type. -// -// For example: -// -// type Person struct { -// Name string -// } -// -// func (p *Person) SetName(name string) { -// fmt.Println("Old name is", p.Name) -// p.Name = name -// fmt.Println("New name is", p.Name) -// } -// -// In the example above, whenever QML code attempts to update the Person.Name field -// via any means (direct assignment, object declarations, etc) the SetName method -// is invoked with the provided value instead. -// -// A setter method may also be used in conjunction with a getter method rather -// than a real type field. A method is only considered a getter in the presence -// of the respective setter, and according to common Go conventions it must not -// have the Get prefix. -// -// Inside QML logic, the getter and setter pair is seen as a single object property. -// -// -// Painting -// -// Custom types implemented in Go may have displayable content by defining -// a Paint method such as: -// -// func (p *Person) Paint(painter *qml.Painter) { -// // ... OpenGL calls with the gopkg.in/qml.v1/gl/ package ... -// } -// -// A simple example is available at: -// -// https://github.com/go-qml/qml/tree/v1/examples/painting -// -// -// Packing resources into the Go qml binary -// -// Resource files (qml code, images, etc) may be packed into the Go qml application -// binary to simplify its handling and distribution. This is done with the genqrc tool: -// -// http://gopkg.in/qml.v1/cmd/genqrc#usage -// -// The following blog post provides more details: -// -// http://blog.labix.org/2014/09/26/packing-resources-into-go-qml-binaries -// -package qml diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/.gitignore b/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/.gitignore deleted file mode 100644 index 309fbb35db..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -basiclayouts/basiclayouts -gallery/gallery -splitview/splitview -tableview/tableview -touch/touch diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/README.md b/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/README.md deleted file mode 100644 index 201846d890..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/README.md +++ /dev/null @@ -1,8 +0,0 @@ -These examples were ported from [qtquickcontrols](git@gitorious.org:qt/qtquickcontrols.git). - -Only the basic ones were ported, in order to demonstrate how easy it is to create a full-fledged UI with Go and QML. - -There were a few more, but they that had native modules and those were omitted due to laziness. - -In order to run them you might need some extra Qt5 plugins. On Ubuntu those can be installed using this command: - sudo apt-get install qtdeclarative5-controls-plugin qtdeclarative5-xmllistmodel-plugin diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/basiclayouts/basiclayouts.go b/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/basiclayouts/basiclayouts.go deleted file mode 100644 index a16b6b1abf..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/basiclayouts/basiclayouts.go +++ /dev/null @@ -1,29 +0,0 @@ -package main - -import ( - "fmt" - "gopkg.in/qml.v1" - "os" -) - -func main() { - if err := qml.Run(run); err != nil { - fmt.Fprintf(os.Stderr, "error: %v\n", err) - os.Exit(1) - } -} - -func run() error { - engine := qml.NewEngine() - - controls, err := engine.LoadFile("main.qml") - if err != nil { - return err - } - - window := controls.CreateWindow(nil) - - window.Show() - window.Wait() - return nil -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/basiclayouts/main.qml b/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/basiclayouts/main.qml deleted file mode 100644 index ecbbb75a18..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/basiclayouts/main.qml +++ /dev/null @@ -1,116 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal -** -** This file is part of the Qt Quick Controls module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names -** of its contributors may be used to endorse or promote products derived -** from this software without specific prior written permission. -** -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - - - - - -import QtQuick 2.2 -import QtQuick.Controls 1.1 -import QtQuick.Layouts 1.0 - -ApplicationWindow { - visible: true - title: "Basic layouts" - property int margin: 11 - width: mainLayout.implicitWidth + 2 * margin - height: mainLayout.implicitHeight + 2 * margin - minimumWidth: mainLayout.Layout.minimumWidth + 2 * margin - minimumHeight: mainLayout.Layout.minimumHeight + 2 * margin - - ColumnLayout { - id: mainLayout - anchors.fill: parent - anchors.margins: margin - GroupBox { - id: rowBox - title: "Row layout" - Layout.fillWidth: true - - RowLayout { - id: rowLayout - anchors.fill: parent - TextField { - placeholderText: "This wants to grow horizontally" - Layout.fillWidth: true - } - Button { - text: "Button" - } - } - } - - GroupBox { - id: gridBox - title: "Grid layout" - Layout.fillWidth: true - - GridLayout { - id: gridLayout - rows: 3 - flow: GridLayout.TopToBottom - anchors.fill: parent - - Label { text: "Line 1" } - Label { text: "Line 2" } - Label { text: "Line 3" } - - TextField { } - TextField { } - TextField { } - - TextArea { - text: "This widget spans over three rows in the GridLayout.\n" - + "All items in the GridLayout are implicitly positioned from top to bottom." - Layout.rowSpan: 3 - Layout.fillHeight: true - Layout.fillWidth: true - } - } - } - TextArea { - id: t3 - text: "This fills the whole cell" - Layout.minimumHeight: 30 - Layout.fillHeight: true - Layout.fillWidth: true - } - } -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/content/AboutDialog.qml b/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/content/AboutDialog.qml deleted file mode 100644 index aec7b60439..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/content/AboutDialog.qml +++ /dev/null @@ -1,48 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal -** -** This file is part of the Qt Quick Controls module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names -** of its contributors may be used to endorse or promote products derived -** from this software without specific prior written permission. -** -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** -** $QT_END_LICENSE$ -** -****************************************************************************/ -import QtQuick 2.2 -import QtQuick.Dialogs 1.1 - -MessageDialog { - icon: StandardIcon.Information - text: "QtQuick.Controls gallery example" - detailedText: "This example demonstrates most of the available Qt Quick Controls." - title: "About Gallery" -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/content/ChildWindow.qml b/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/content/ChildWindow.qml deleted file mode 100644 index 08925f6323..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/content/ChildWindow.qml +++ /dev/null @@ -1,122 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal -** -** This file is part of the Qt Quick Controls module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names -** of its contributors may be used to endorse or promote products derived -** from this software without specific prior written permission. -** -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - - - - - -import QtQuick 2.2 -import QtQuick.Window 2.1 -import QtQuick.Controls 1.1 - -Window { - id: window1 - - width: 400 - height: 400 - - title: "child window" - flags: Qt.Dialog - - Rectangle { - color: syspal.window - anchors.fill: parent - - Label { - id: dimensionsText - anchors.horizontalCenter: parent.horizontalCenter - anchors.top: parent.top - width: parent.width - horizontalAlignment: Text.AlignHCenter - } - - Label { - id: availableDimensionsText - anchors.horizontalCenter: parent.horizontalCenter - anchors.top: dimensionsText.bottom - width: parent.width - horizontalAlignment: Text.AlignHCenter - } - - Label { - id: closeText - anchors.horizontalCenter: parent.horizontalCenter - anchors.top: availableDimensionsText.bottom - text: "This is a new Window, press the\nbutton below to close it again." - } - Button { - anchors.horizontalCenter: closeText.horizontalCenter - anchors.top: closeText.bottom - id: closeWindowButton - text:"Close" - width: 98 - tooltip:"Press me, to close this window again" - onClicked: window1.visible = false - } - Button { - anchors.horizontalCenter: closeText.horizontalCenter - anchors.top: closeWindowButton.bottom - id: maximizeWindowButton - text:"Maximize" - width: 98 - tooltip:"Press me, to maximize this window again" - onClicked: window1.visibility = Window.Maximized; - } - Button { - anchors.horizontalCenter: closeText.horizontalCenter - anchors.top: maximizeWindowButton.bottom - id: normalizeWindowButton - text:"Normalize" - width: 98 - tooltip:"Press me, to normalize this window again" - onClicked: window1.visibility = Window.Windowed; - } - Button { - anchors.horizontalCenter: closeText.horizontalCenter - anchors.top: normalizeWindowButton.bottom - id: minimizeWindowButton - text:"Minimize" - width: 98 - tooltip:"Press me, to minimize this window again" - onClicked: window1.visibility = Window.Minimized; - } - } -} - diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/content/Controls.qml b/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/content/Controls.qml deleted file mode 100644 index b7e461881c..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/content/Controls.qml +++ /dev/null @@ -1,229 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal -** -** This file is part of the Qt Quick Controls module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names -** of its contributors may be used to endorse or promote products derived -** from this software without specific prior written permission. -** -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - - - - - -import QtQuick 2.2 -import QtQuick.Controls 1.1 -import QtQuick.Layouts 1.1 -import QtQuick.Controls.Styles 1.1 - -Item { - id: flickable - anchors.fill: parent - enabled: enabledCheck.checked - - property int tabPosition: tabPositionGroup.current === r2 ? Qt.BottomEdge : Qt.TopEdge - - RowLayout { - id: contentRow - anchors.fill:parent - anchors.margins: 8 - spacing: 16 - ColumnLayout { - id: firstColumn - Layout.minimumWidth: implicitWidth - Layout.fillWidth: false - RowLayout { - id: buttonrow - Button { - id: button1 - text: "Button 1" - tooltip:"This is an interesting tool tip" - Layout.fillWidth: true - } - Button { - id:button2 - text:"Button 2" - Layout.fillWidth: true - menu: Menu { - MenuItem { text: "This Button" } - MenuItem { text: "Happens To Have" } - MenuItem { text: "A Menu Assigned" } - } - } - } - ComboBox { - id: combo - model: choices - currentIndex: 2 - Layout.fillWidth: true - } - ComboBox { - model: Qt.fontFamilies() - Layout.fillWidth: true - currentIndex: 47 - } - ComboBox { - id: editableCombo - editable: true - model: choices - Layout.fillWidth: true - currentIndex: 2 - onAccepted: { - if (editableCombo.find(currentText) === -1) { - choices.append({text: editText}) - currentIndex = editableCombo.find(editText) - } - } - } - RowLayout { - SpinBox { - id: t1 - Layout.fillWidth: true - minimumValue: -50 - value: -20 - } - SpinBox { - id: t2 - Layout.fillWidth: true - } - } - TextField { - id: t3 - placeholderText: "This is a placeholder for a TextField" - Layout.fillWidth: true - } - ProgressBar { - // normalize value [0.0 .. 1.0] - value: (slider.value - slider.minimumValue) / (slider.maximumValue - slider.minimumValue) - Layout.fillWidth: true - } - ProgressBar { - indeterminate: true - Layout.fillWidth: true - } - Slider { - id: slider - value: 0.5 - Layout.fillWidth: true - tickmarksEnabled: tickmarkCheck.checked - stepSize: tickmarksEnabled ? 0.1 : 0 - } - MouseArea { - id: busyCheck - Layout.fillWidth: true - Layout.fillHeight: true - hoverEnabled:true - Layout.preferredHeight: busyIndicator.height - BusyIndicator { - id: busyIndicator - running: busyCheck.containsMouse - anchors.horizontalCenter: parent.horizontalCenter - } - } - } - ColumnLayout { - id: rightcol - Layout.fillWidth: true - anchors { - top: parent.top - bottom: parent.bottom - } - - GroupBox { - id: group1 - title: "CheckBox" - Layout.fillWidth: true - RowLayout { - Layout.fillWidth: true - CheckBox { - id: frameCheckbox - text: "Text frame" - checked: true - Layout.minimumWidth: 100 - } - CheckBox { - id: tickmarkCheck - text: "Tickmarks" - checked: false - Layout.minimumWidth: 100 - } - CheckBox { - id: wrapCheck - text: "Word wrap" - checked: true - Layout.minimumWidth: 100 - } - } - } - GroupBox { - id: group2 - title:"Tab Position" - Layout.fillWidth: true - RowLayout { - ExclusiveGroup { id: tabPositionGroup } - RadioButton { - id: r1 - text: "Top" - checked: true - exclusiveGroup: tabPositionGroup - Layout.minimumWidth: 100 - } - RadioButton { - id: r2 - text: "Bottom" - exclusiveGroup: tabPositionGroup - Layout.minimumWidth: 100 - } - } - } - - TextArea { - id: area - frameVisible: frameCheckbox.checked - text: loremIpsum + loremIpsum - textFormat: Qt.RichText - wrapMode: wrapCheck.checked ? TextEdit.WordWrap : TextEdit.NoWrap - Layout.fillWidth: true - Layout.fillHeight: true - MouseArea { - id: contextMenu - parent: area.viewport - anchors.fill: parent - acceptedButtons: Qt.RightButton - onPressed: editmenu.popup() - } - } - } - } -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/content/ImageViewer.qml b/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/content/ImageViewer.qml deleted file mode 100644 index 01f24ab331..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/content/ImageViewer.qml +++ /dev/null @@ -1,58 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal -** -** This file is part of the Qt Quick Controls module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names -** of its contributors may be used to endorse or promote products derived -** from this software without specific prior written permission. -** -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** -** $QT_END_LICENSE$ -** -****************************************************************************/ -import QtQuick 2.2 -import QtQuick.Window 2.1 - -Window { - id: imageViewer - minimumWidth: viewerImage.width - minimumHeight: viewerImage.height - function open(source) { - viewerImage.source = source - width = viewerImage.implicitWidth + 20 - height = viewerImage.implicitHeight + 20 - title = source - visible = true - } - Image { - id: viewerImage - anchors.centerIn: parent - } -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/content/Layouts.qml b/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/content/Layouts.qml deleted file mode 100644 index 0cb234c393..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/content/Layouts.qml +++ /dev/null @@ -1,107 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal -** -** This file is part of the Qt Quick Controls module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names -** of its contributors may be used to endorse or promote products derived -** from this software without specific prior written permission. -** -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick 2.2 -import QtQuick.Controls 1.1 -import QtQuick.Layouts 1.0 - -Item { - id:root - anchors.fill: parent - anchors.margins: 8 - - ColumnLayout { - id: mainLayout - anchors.fill: parent - spacing: 4 - GroupBox { - id: rowBox - title: "Row layout" - Layout.fillWidth: true - RowLayout { - id: rowLayout - anchors.fill: parent - TextField { - placeholderText: "This wants to grow horizontally" - Layout.fillWidth: true - } - Button { - text: "Button" - } - } - } - - GroupBox { - id: gridBox - title: "Grid layout" - Layout.fillWidth: true - - GridLayout { - id: gridLayout - anchors.fill: parent - rows: 3 - flow: GridLayout.TopToBottom - - Label { text: "Line 1" } - Label { text: "Line 2" } - Label { text: "Line 3" } - - TextField { } - TextField { } - TextField { } - - TextArea { - text: "This widget spans over three rows in the GridLayout.\n" - + "All items in the GridLayout are implicitly positioned from top to bottom." - Layout.rowSpan: 3 - Layout.fillHeight: true - Layout.fillWidth: true - } - } - } - TextArea { - id: t3 - text: "This fills the whole cell" - Layout.minimumHeight: 30 - Layout.fillHeight: true - Layout.fillWidth: true - } - } -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/content/ModelView.qml b/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/content/ModelView.qml deleted file mode 100644 index be334458d8..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/content/ModelView.qml +++ /dev/null @@ -1,103 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal -** -** This file is part of the Qt Quick Controls module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names -** of its contributors may be used to endorse or promote products derived -** from this software without specific prior written permission. -** -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - - - - - -import QtQuick 2.2 -import QtQuick.Controls 1.1 -//import QtQuick.XmlListModel 2.1 - -Item { - id: root - width: 600 - height: 300 - anchors.fill: parent - anchors.margins: Qt.platform.os === "osx" ? 12 : 6 - -// XmlListModel { -// id: flickerModel -// source: "http://api.flickr.com/services/feeds/photos_public.gne?format=rss2&tags=" + "Cat" -// query: "/rss/channel/item" -// namespaceDeclarations: "declare namespace media=\"http://search.yahoo.com/mrss/\";" -// XmlRole { name: "title"; query: "title/string()" } -// XmlRole { name: "imagesource"; query: "media:thumbnail/@url/string()" } -// XmlRole { name: "credit"; query: "media:credit/string()" } -// } - - ListModel { - id: dummyModel - Component.onCompleted: { - for (var i = 0 ; i < 100 ; ++i) { - append({"index": i, "title": "A title " + i, "imagesource" :"http://someurl.com", "credit" : "N/A"}) - } - } - } - - TableView{ - model: dummyModel - anchors.fill: parent - - TableViewColumn { - role: "index" - title: "#" - width: 36 - resizable: false - movable: false - } - TableViewColumn { - role: "title" - title: "Title" - width: 120 - } - TableViewColumn { - role: "credit" - title: "Credit" - width: 120 - } - TableViewColumn { - role: "imagesource" - title: "Image source" - width: 200 - visible: true - } - } -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/content/Styles.qml b/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/content/Styles.qml deleted file mode 100644 index ed237d82b8..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/content/Styles.qml +++ /dev/null @@ -1,387 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal -** -** This file is part of the Qt Quick Controls module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names -** of its contributors may be used to endorse or promote products derived -** from this software without specific prior written permission. -** -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - - - - - -import QtQuick 2.2 -import QtQuick.Controls 1.1 -import QtQuick.Controls.Styles 1.1 -import QtQuick.Particles 2.0 -import QtQuick.Layouts 1.0 - -Item { - id: root - width: 300 - height: 200 - - property int columnWidth: 120 - GridLayout { - rowSpacing: 12 - columnSpacing: 30 - anchors.top: parent.top - anchors.horizontalCenter: parent.horizontalCenter - anchors.margins: 30 - - Button { - text: "Push me" - style: ButtonStyle { } - implicitWidth: columnWidth - } - Button { - text: "Push me" - style: ButtonStyle { - background: BorderImage { - source: control.pressed ? "../images/button-pressed.png" : "../images/button.png" - border.left: 4 ; border.right: 4 ; border.top: 4 ; border.bottom: 4 - } - } - implicitWidth: columnWidth - } - Button { - text: "Push me" - style: buttonStyle - implicitWidth: columnWidth - } - - TextField { - Layout.row: 1 - style: TextFieldStyle { } - implicitWidth: columnWidth - } - TextField { - style: TextFieldStyle { - background: BorderImage { - source: "../images/textfield.png" - border.left: 4 ; border.right: 4 ; border.top: 4 ; border.bottom: 4 - } - } - implicitWidth: columnWidth - } - TextField { - style: textfieldStyle - implicitWidth: columnWidth - } - - Slider { - id: slider1 - Layout.row: 2 - value: 0.5 - implicitWidth: columnWidth - style: SliderStyle { } - } - Slider { - id: slider2 - value: 0.5 - implicitWidth: columnWidth - style: SliderStyle { - groove: BorderImage { - height: 6 - border.top: 1 - border.bottom: 1 - source: "../images/progress-background.png" - border.left: 6 - border.right: 6 - BorderImage { - anchors.verticalCenter: parent.verticalCenter - source: "../images/progress-fill.png" - border.left: 5 ; border.top: 1 - border.right: 5 ; border.bottom: 1 - width: styleData.handlePosition - height: parent.height - } - } - handle: Item { - width: 13 - height: 13 - Image { - anchors.centerIn: parent - source: "../images/slider-handle.png" - } - } - } - } - Slider { - id: slider3 - value: 0.5 - implicitWidth: columnWidth - style: sliderStyle - } - - ProgressBar { - Layout.row: 3 - value: slider1.value - implicitWidth: columnWidth - style: ProgressBarStyle{ } - } - ProgressBar { - value: slider2.value - implicitWidth: columnWidth - style: progressBarStyle - } - ProgressBar { - value: slider3.value - implicitWidth: columnWidth - style: progressBarStyle2 - } - - CheckBox { - text: "CheckBox" - style: CheckBoxStyle{} - Layout.row: 4 - implicitWidth: columnWidth - } - RadioButton { - style: RadioButtonStyle{} - text: "RadioButton" - implicitWidth: columnWidth - } - - ComboBox { - model: ["Paris", "Oslo", "New York"] - style: ComboBoxStyle{} - implicitWidth: columnWidth - } - - TabView { - Layout.row: 5 - Layout.columnSpan: 3 - Layout.fillWidth: true - implicitHeight: 30 - Tab { title: "One" ; Item {}} - Tab { title: "Two" ; Item {}} - Tab { title: "Three" ; Item {}} - Tab { title: "Four" ; Item {}} - style: TabViewStyle {} - } - - TabView { - Layout.row: 6 - Layout.columnSpan: 3 - Layout.fillWidth: true - implicitHeight: 30 - Tab { title: "One" ; Item {}} - Tab { title: "Two" ; Item {}} - Tab { title: "Three" ; Item {}} - Tab { title: "Four" ; Item {}} - style: tabViewStyle - } - } - - // Style delegates: - - property Component buttonStyle: ButtonStyle { - background: Rectangle { - implicitHeight: 22 - implicitWidth: columnWidth - color: control.pressed ? "darkGray" : control.activeFocus ? "#cdd" : "#ccc" - antialiasing: true - border.color: "gray" - radius: height/2 - Rectangle { - anchors.fill: parent - anchors.margins: 1 - color: "transparent" - antialiasing: true - visible: !control.pressed - border.color: "#aaffffff" - radius: height/2 - } - } - } - - property Component textfieldStyle: TextFieldStyle { - background: Rectangle { - implicitWidth: columnWidth - implicitHeight: 22 - color: "#f0f0f0" - antialiasing: true - border.color: "gray" - radius: height/2 - Rectangle { - anchors.fill: parent - anchors.margins: 1 - color: "transparent" - antialiasing: true - border.color: "#aaffffff" - radius: height/2 - } - } - } - - property Component sliderStyle: SliderStyle { - handle: Rectangle { - width: 18 - height: 18 - color: control.pressed ? "darkGray" : "lightGray" - border.color: "gray" - antialiasing: true - radius: height/2 - Rectangle { - anchors.fill: parent - anchors.margins: 1 - color: "transparent" - antialiasing: true - border.color: "#eee" - radius: height/2 - } - } - - groove: Rectangle { - height: 8 - implicitWidth: columnWidth - implicitHeight: 22 - - antialiasing: true - color: "#ccc" - border.color: "#777" - radius: height/2 - Rectangle { - anchors.fill: parent - anchors.margins: 1 - color: "transparent" - antialiasing: true - border.color: "#66ffffff" - radius: height/2 - } - } - } - - property Component progressBarStyle: ProgressBarStyle { - background: BorderImage { - source: "../images/progress-background.png" - border.left: 2 ; border.right: 2 ; border.top: 2 ; border.bottom: 2 - } - progress: Item { - clip: true - BorderImage { - anchors.fill: parent - anchors.rightMargin: (control.value < control.maximumValue) ? -4 : 0 - source: "../images/progress-fill.png" - border.left: 10 ; border.right: 10 - Rectangle { - width: 1 - color: "#a70" - opacity: 0.8 - anchors.top: parent.top - anchors.bottom: parent.bottom - anchors.bottomMargin: 1 - anchors.right: parent.right - visible: control.value < control.maximumValue - anchors.rightMargin: -parent.anchors.rightMargin - } - } - ParticleSystem{ id: bubbles; running: visible } - ImageParticle{ - id: fireball - system: bubbles - source: "../images/bubble.png" - opacity: 0.7 - } - Emitter{ - system: bubbles - anchors.bottom: parent.bottom - anchors.margins: 4 - anchors.bottomMargin: -4 - anchors.left: parent.left - anchors.right: parent.right - size: 4 - sizeVariation: 4 - acceleration: PointDirection{ y: -6; xVariation: 3 } - emitRate: 6 * control.value - lifeSpan: 3000 - } - } - } - - property Component progressBarStyle2: ProgressBarStyle { - background: Rectangle { - implicitWidth: columnWidth - implicitHeight: 24 - color: "#f0f0f0" - border.color: "gray" - } - progress: Rectangle { - color: "#ccc" - border.color: "gray" - Rectangle { - color: "transparent" - border.color: "#44ffffff" - anchors.fill: parent - anchors.margins: 1 - } - } - } - - property Component tabViewStyle: TabViewStyle { - tabOverlap: 16 - frameOverlap: 4 - tabsMovable: true - - frame: Rectangle { - gradient: Gradient{ - GradientStop { color: "#e5e5e5" ; position: 0 } - GradientStop { color: "#e0e0e0" ; position: 1 } - } - border.color: "#898989" - Rectangle { anchors.fill: parent ; anchors.margins: 1 ; border.color: "white" ; color: "transparent" } - } - tab: Item { - property int totalOverlap: tabOverlap * (control.count - 1) - implicitWidth: Math.min ((styleData.availableWidth + totalOverlap)/control.count - 4, image.sourceSize.width) - implicitHeight: image.sourceSize.height - BorderImage { - id: image - anchors.fill: parent - source: styleData.selected ? "../images/tab_selected.png" : "../images/tab.png" - border.left: 30 - smooth: false - border.right: 30 - } - Text { - text: styleData.title - anchors.centerIn: parent - } - } - leftCorner: Item { implicitWidth: 12 } - } -} - diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/gallery.go b/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/gallery.go deleted file mode 100644 index a16b6b1abf..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/gallery.go +++ /dev/null @@ -1,29 +0,0 @@ -package main - -import ( - "fmt" - "gopkg.in/qml.v1" - "os" -) - -func main() { - if err := qml.Run(run); err != nil { - fmt.Fprintf(os.Stderr, "error: %v\n", err) - os.Exit(1) - } -} - -func run() error { - engine := qml.NewEngine() - - controls, err := engine.LoadFile("main.qml") - if err != nil { - return err - } - - window := controls.CreateWindow(nil) - - window.Show() - window.Wait() - return nil -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/images/bubble.png b/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/images/bubble.png deleted file mode 100644 index 62aa1efe54c76991fdaea3a103d362bcc635e5c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 214 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqY)RhkE(~)SY8aIDBX`UIif|Tq zL>4nJa0`PlBg3pY5H=O_PcDXyxg)u2ilr|Ldl*kjv*44ThDJ4JZ!+@e9?Vw zHvdHLg@z%OdgrHlB`>)o5b2N^aU!p$tKDC&vB5Ikxj3}HLypt`jRa@>kB4_Y6&+{4 zAG5;Zf|pcsW072d%?cg+*N?7$$$2sJ@qyoBn~n#cwKskxC7pKh=vtt444$rjF6*2U FngDAvM$-TQ diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/images/button-pressed.png b/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/images/button-pressed.png deleted file mode 100644 index d64cdaa7876296e8ff5fe0953c5f364a0a6be118..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3094 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 diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/images/document-save-as.png b/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/images/document-save-as.png deleted file mode 100644 index 5c9f6b343bdff4e1295342362486b2cc37387ecb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1837 zcmV+|2h#Y7P)W5YejnogQRf&kAw6ru-H~|Vtq)@O46<|mV0o#}a z?Bi~Ix4Sdb57<}RkYbvk{-x2*>^*wschAiHH4Fb|i8}>Uu6VIt8?jCb(+DDnAZ3(3 zj1jMP@7wb3Jp(9P(pG5O?jNF&oH?^uKz#9J|QnC2i$pz7d-u^^Q*QNeL*9V;K*9TLtcVE65K6Ade@_~wyfE}>N zxQb-jqcA^0EE)=bcbCAthFs{B{S`oCF(q*mw)`19~~b3d&SaUK3P~4 z{q6ddb8@fW$lxoDF@}=DD8GB{aN?7}p}BXv6ms;yx{;n`gt_Qz_4xS70lNRT^^e!C z4gKkCcfYbNiRWuFo+dTq@wG2kL@msQyO|uuRiJ$N_Ep-5nul{w>^8={90&v!Se7*g za?pz~H0ePWHOA??mc&;#_d+Nr+5N^_d_C_B#+YopQc8KA_nPB4>-X*3ml+RWj~-}k zU6k7Yr`Gz{>(;GX*xcNVlro#p7(>#@@aX1OkP=*9qqX72kVi>jKGKe`bLUQsF{7Kc zYuBzP+S}XT2VVNG02xnToL%+t4RKA(Uc7iQe}21@@3p;oOWAB&B80&86j~d!G2{d+ zQfZeNtA8~n_8ar7dA4;K?d|QGfE|DtlWX*#|G@KCf|FK#tLd@F3N6c`entsD**KS1 z-sogu!&eB0f>=^uTM_}do<*i%hDKG}!>-dP?zN>uqn={GJ&!@Jwwps|W zaL=AS2R;*ESR0ovT}m>U#Pd9s)K}1d&0+7+fAQ!ewe$}R;iP>G24ik6i<9wr{opyA zj8D9}1m8__@^m-9`Tjz*@=2vqELyaPQ>RXS2N(k|W`nI-wd(%j;^KuD2#;|xRD{@ zxF~&dNlS}zsk|?b14lpL2W#V0-j|0l1|bB-7(CCTsi`R#2n06V7GS}G1-204>3BR& zGMU7-ZHzG}rSN?p<$L^e!)$_hobSHOLo=oj4BRx*yl9YzYD#$P=m#{|lU1G5qb#-->9UUEuZvhZO ze0#}~B_t9F0DRxa7?Vw6j6rKnz%u-NL!7hcFLG@l!HP#J>H4Ub#K0iWG*{!gE}rM% zc^Gap~2Q#Z-ikV5JIet$KxD1a)geK4t(Ed zqFNt^uFfNLb>2DFwr%R_>Zq@;XaD~FPXWIeF`_TUVlj>%KhBypYsksTnJ~cJD3i&s zd-rY{8XC}AKLG!6!W`Fi(ONTU(j*QZJUF3*^XJc}w6v6-o}LNChr?mC*7WuDW%o(e zibu*GjYhHU+d1^DibkVjo)guTD_64p>`Ws>xw*Ln0)Yu7%FWFk^PH$g=7Lc^F!~a4 zucegA_QzCU#4?+koByX|caq~cNGZouAPboNU1wGq1=d5(WSI$uvu4_fOpK*%00%@23%*zuB-vh1Gx^>I>4 zUFz@ee*p-N+=@fMWS{`Z1A@TBj>5#{a`Qtd4J3f8z}3;$asfn#TZr3yHGNL`!z~RY bhk^JvK%sGhfx2y<00000NkvXXu0mjf^huI9 diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/images/document-save-as@2x.png b/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/images/document-save-as@2x.png deleted file mode 100644 index a15e34c924abc6f343e2a3ff35368035930488d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4500 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 N002ovPDHLkV1nxxBC7xZ diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/images/go-next.png b/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/images/go-next.png deleted file mode 100644 index a68e2db77531cb15a2cddd62f567f030513b60fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1219 zcmV;!1U&nRP)Fd(Ls*Wa_5Q6f;u`ihh?a=O`)@EeXr|Ly9sZ zC=5b3BMHKwqR9S{L?bMO)t&cFZZhGEqz3tp@_}5zJx)hL7Fu!o|&;^gZF(;OA_T|6Jgd0l0 zQ!YoFtGH)szVrIL_irC&WgjdkwrAWh0$K+ogE&WzfXLJ-$IL-MSSuAOasO zUW;WpNF+iC1OlQMW=di6=cym@wTspYgC;v`G*d=DNO?_Zvij)GJxLkNulYHuasf`17F3`RqsJv{BAO(1|N{Zb&|wbRsAkC0$F63Z4?wm{kfX$hnR>7?EXgTQEmj=+Th zBftpm9{&V+vB_-Nv97bV{o?A%Rl$m@5$HA-(h^83jJCiEqm%*>-f0XN9VuV{gDqk_ zJn32dxHjLHZRkvNbiP@=T5SSMUj#(@e?q4Adnv=Gj=;NA5Fr7B(czN=!<<~E-TXZD zC+mWWnzFXmMzi41W>rh-@Kfm|G6~3Z1zvn$MHf({f{-csg-rFk?97+=fs0nDnqy)U zxi|M|D);X84j!qkJM~Af@JtP7!@A)lU)~*iYJmV)yXBJ}E_Ju!B`dHTfewf7*6jP3 z6w7D(FQv(b(+xY1Y*fqITZpIEC1dx^Bwzqt^+hlo7y>w`BrDJ-@t5M)`FKpTs@ zMm|o=9Y;y&2KV28F0QHlMy&(|e#QnLmxOBGD zl>D?laqd`h>9HTwt}s7xmA3A42uTCJLYcHe7Jw~=FfC^x`}gk)cK!ZqOXEKM%E@wd zA_Lq{i&uOx^+dn`UI-Wg2jRUI(I5$o@}aDv+&yq)@4@;V{-UPC{FgyAiZ1kgEcfSQ z(!K&5WI>UAAuo5F-*oR-4&_N(%y0 z5>0!N*ydiwAf#TXK|#&u+I8MN-n)D6dFaLezuUdn zt@c3g_Jtq6Kj+W+{l4e-bPh~m3X{a*Mpa+k;JJzJmy_@&-_4*5MM?B?En1DCl4OLCdP2wL~vvkw^MfWcAl~faU4&#hKb))y# zbnn)-H&(y1@ZriOetXwRtkaVsFy;tE8`Sz)GiQIa^~L5gZ+fMZirm! zX(y4oiggBS4aRAtkTk#c3D#L02J37n1{Z2$4ez$RIW(>a)NGH;cfuTAyKLi}MU_wZ z9bG3#X8LfroMGz>vA@2>SdFn79cp8LEuYP}Ar=UgG=Tt*hHHWA>f% zMBC*b$(nTd*Ws`r92SGc;H1W)aW2rqF)Z5E>^93kF=VQpA&j5w_d2v}>Yg$IL~1bsu- z(Ix`~&Xo`W861O|9{MwJ`m@)`*i_I74x9yR9acN6aTx9Jh>+H)v87<{c~fzYv%5at zzjO1mOJ6Ee(&x;z7^NjX(gQ;pEz%$jQVE0eKqI`+;L&rJi zLF$6qDTsJM)JJMV3CL3|x^3PPmK?K(TW=(~?p|8;O6hOi2Z^WuMCCbISxMj(d^M~U}#=vBJDZBI{MqIT6&Ya^XQzjA)?mw<#9)WLfnH2<5K ze2i%nyO5m&Z0|LOPJC##WjA(i{$ik|Va=-g$nE9jobEq_P$rk-zU@?5)7sQNni*_7dh2=V#2i?Mte=T z5x!mgjJqHe2QR12tca+xvPTv?qe@gMM`K607_;veow%4pHY8WjhNIPh3k}#j(SUdE zXWc$C)X O0000vW`Lad_VL}O~L?M$bw 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 diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/images/slider-handle.png b/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/images/slider-handle.png deleted file mode 100644 index ac4d4a0d981cf7257756d5ecd7951154b70b87d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3523 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 z zq)MeirBaD>UGHS6RH90yLZ)fb$;nAmQIu@}lf8f#5&1Ov^t@6O<-^|I-WSe!*f0z{ z)jW(b#N%<8rg@jiWYlan`xU^QPahGH58?xaWm$f+zrX)|Zf-78tJUz_h{a;4R;#V8 zt*v*5hle_VdjJj*xx#~19ZRRvpCn0&)a!K&6NX`6c6K(hv$ONrql|gI#Du`037m5& znM`ijwv9nU`eav-Tne;(cmJnSsr6_yI^J%#F-o-CZA7Ed@l-0c9;_<_ z&v0>ZaY+yaIF2(Ch~qdA1ObUeVmYV~T_BN2Bt9%ny=a@Bo{secp;oI^|Eq_i1!D}2 zM&p++o{vB-E-ubo*F`848VMj23c+<?|dwWVp=uBXZ!kLlV80H;tW6g5rzXj#_1BuN8z#27;?7DJ=axX)xV z=|Z7U^mVIqF8x$kQIzfD9XHJ&bY9!u*5l+ xEX%50US6K{a>jrS(?9k2|94w?>3i3o0RZ1U8blv$D8>K)002ovPDHLkV1kt{o6`UQ diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/images/tab.png b/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/images/tab.png deleted file mode 100644 index 74fefab78a719e4883756d2bcc1b968835dd4fa0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9877 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 e>ji&^9V diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/images/tab_selected.png b/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/images/tab_selected.png deleted file mode 100644 index 665400ccfd2da9264fa4cf0e653e2573a8f7daf7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10184 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 FV1isSCa3@a diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/images/window-new@2x.png b/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/gallery/images/window-new@2x.png deleted file mode 100644 index 36503018ef4157fa20f6cfdaf9fb851137384c53..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1900 zcmV-y2b1`TP)Dzc_jFQd##dSKIBDn4MW5ma_wa5wm1vvEu>QBC+rrSV+h_R=ff1 zSXc;|2QYgys~L}EE}m{rcU5;?@_K?rW;J#33}8Gcn+z$Xl(I5Q@#i0Z{Bd+rxW%E0 za88$)E*=qS7@+0_`d)^6`zC?oIgd)5$can=^`cq_3N~9)Fp^6k$i@@3rzloh`))De<=V@pFZuR zX&N;(`42w$B>3=Ke>xow=XZTuOnvK)JYRj6#fs!a(m$}UI!d&EqJ)h5q zpMQ4t%}+l1=(qD70G>Q~GLGZ;H$_qW05DBVUPKx6X7qb=y74vLctzY<6NM>Zm|?vF zV;mI#hN85jX+V;OtkxZttC;1g&-G&Hmg~tM*X#7hj~_ptTYxYOe;x$E_Z~fZWWq3P zpLDic<{hKJw4^)muKWf*{tMA2>dewb53B-@V#?N`?k zg>y>^my(wmd8w4@ac?^1{z>RBt{43Zs?DF6iuphLaz445D zlR3xZYo@~$K`_LaF~%DL;SB(;oa5XjS@svs=NFt^p7HvNSN!Bh_wntD!C>CG0YIw& zpw|f-1%QY$87fBu$5FpvJjfaMbH=@lFzjQzyBO~nV~!9yRi|K$m5#+z1Mpgad0=mNYM>SCgxq!X2(DaI67n|oXk*nb)fZ6pKYD5Kl)=|mn; zAcVf)TQDZTNPw6KV>%dbgt6bK@5({npc-K`Kuv&eQ$k;W0ucpOgT)?{z@Qs8i~$*O z6c7bIfp4+aV8md=)kekvTD3s8s_!ZQt*?O*hY^FdrnWu;h@j|ON}y>P;E1A-zz^|k zh>-xrf@BB@um67Oo+T0Xw|kwR%jX5y>o@?73dp8XXIs%QhSK$qS~b>Lz1*ph-@*y zxvE|s{qWlj905eMGyUA?O)!0a5}>kea=kg0}#j16?|uW5#lV%6*UldEQ~Q zPO}{+xY0pvnhgYC1dI^50$rdamC~aKGjNw6b81PeL{J?_A7upG0giw%$e1iY<7y$v z4FDSvRMmz8AaxS!+UJ+`@MBRTpa;4E1)vKOf%NL6Cn(3j6qu6buj}V*S>b&qG%p6I zP7%qdyt=6;T}LYcK;gF-6rO;-Tsz z#6TZpfs!IM0E$=ZL9YUi5y%wPV+_-J#t=Cufo3yc6UV3q2ob9NS{GJ8hHk9~KmZa~ z?N3Ii-l^Gelc(&6V6!z~KZYnhL}sX7R~>+q&El^j)o85UEg|$^E598EY>&gYCp?r1 z$OOnhQ}jjz{kjB#uNbrUN?_vyZXXbJ!uWgMVaMR^Cx3H(-~?|c0RPFdy1rEdZjlJS zuazc|)-pgu4!gkZ)_`{^1F2S=_k2K$;;;?2Ndyl7Xp;yYw84!JXbS`C<2GC2_uK~C zR067sG3JH=t?dE_MyM?suw{mJ0ciG`;Mea2TVsXyiZuOl!NqTZf^xIl&D8tsRCAtZ>^(V8;lx z%?cj?(EJS&UmpX^z7=js2e>(Jy$G89HrN&h?6g7WoN0pqZbzQy0T3F%&$7(6tpuEN zKG3y5uwj6R5XW&FlE*pcvH4!WIhV|4v;5VoSH89Oogez&jHmz0`(D0$StLpF>Ba}- zFJ8R(^}~k`zx(|8^Y8HfKAUqu_8x^Rd545`?-?p0nx^T;&z?Q|6_9NjqDQrrI;@YN zK5Tt$v(etWWo+N*YOWh?fFZP#U6P80000W z7}6Lff2wOX1&VMMctjR6FmMZlFeAgPITAoY_7YEDSN7YiB79tOD^GkB2MS4+xJHyX z=jZ08=9Mrw7o{eaq^2m8XO?6rxO@5rgg5em6z%tPaSVw#{5I?&*I@;oJw1Q^tN-HG zK2Z~t&z~BweBE8E7LoT0IpQ8aoivNfQ=+BVuh)xxfu?HrE@uv@dV>F(*u#>-!8bDZG(C%!&AZJOU6Q*}+}Jn;&_9hHv`l*e4m{qjv@mpSY*F)i(cZbG>p%UNdia{&_eURuluy3dnpdTgXm+OJ&Kj@;Pged?3 diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/tableview/images/selectedrow.png b/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/tableview/images/selectedrow.png deleted file mode 100644 index 71192ea4e2b72d820f7afa745d50275fa8a1fb82..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 303 zcmeAS@N?(olHy`uVBq!ia0vp^Hb5-S!2~34eBFHkNHG=%xjQkeJ16rJ$YD$Jc6VVg zV@P9|{Hdd9u5x{>`#VLEnAyZgM3Yj~thCwDh^WP*K0.5 ? "Male" : "Female"}) - } - } - - Column { - anchors.top: toolbar.bottom - anchors.right: parent.right - anchors.left: parent.left - anchors.bottom: parent.bottom - anchors.margins: 8 - - TabView { - id:frame - focus:true - enabled: enabledCheck.checked - - property int margins: Qt.platform.os === "osx" ? 16 : 0 - - height: parent.height - 34 - anchors.right: parent.right - anchors.left: parent.left - anchors.margins: margins - - Tab { - title: "XmlListModel" - - TableView { - model: flickerModel - anchors.fill: parent - anchors.margins: 12 - - TableViewColumn { - role: "title" - title: "Title" - width: 120 - } - TableViewColumn { - role: "credit" - title: "Credit" - width: 120 - } - TableViewColumn { - role: "imagesource" - title: "Image source" - width: 200 - visible: true - } - - frameVisible: frameCheckbox.checked - headerVisible: headerCheckbox.checked - sortIndicatorVisible: sortableCheckbox.checked - alternatingRowColors: alternateCheckbox.checked - } - } - Tab { - title: "Multivalue" - - TableView { - model: nestedModel - anchors.fill: parent - anchors.margins: 12 - - TableViewColumn { - role: "content" - title: "Text and Color" - width: 220 - } - - itemDelegate: Item { - Rectangle{ - color: styleData.value.get(0).color - anchors.top:parent.top - anchors.right:parent.right - anchors.bottom:parent.bottom - anchors.margins: 4 - width:32 - border.color:"#666" - } - Text { - width: parent.width - anchors.margins: 4 - anchors.left: parent.left - anchors.verticalCenter: parent.verticalCenter - elide: styleData.elideMode - text: styleData.value.get(0).description - color: styleData.textColor - } - } - - frameVisible: frameCheckbox.checked - headerVisible: headerCheckbox.checked - sortIndicatorVisible: sortableCheckbox.checked - alternatingRowColors: alternateCheckbox.checked - } - } - Tab { - title: "Generated" - - TableView { - model: largeModel - anchors.margins: 12 - anchors.fill: parent - TableViewColumn { - role: "name" - title: "Name" - width: 120 - } - TableViewColumn { - role: "age" - title: "Age" - width: 120 - } - TableViewColumn { - role: "gender" - title: "Gender" - width: 120 - } - frameVisible: frameCheckbox.checked - headerVisible: headerCheckbox.checked - sortIndicatorVisible: sortableCheckbox.checked - alternatingRowColors: alternateCheckbox.checked - } - } - - Tab { - title: "Delegates" - Item { - anchors.fill: parent - - Component { - id: delegate1 - Item { - clip: true - Text { - width: parent.width - anchors.margins: 4 - anchors.left: parent.left - anchors.verticalCenter: parent.verticalCenter - elide: styleData.elideMode - text: styleData.value !== undefined ? styleData.value : "" - color: styleData.textColor - } - } - } - - Component { - id: delegate2 - Text { - width: parent.width - anchors.margins: 4 - anchors.left: parent.left - anchors.verticalCenter: parent.verticalCenter - elide: styleData.elideMode - text: styleData.value !== undefined ? styleData.value : "" - color: styleData.textColor - } - } - - Component { - id: editableDelegate - Item { - - Text { - width: parent.width - anchors.margins: 4 - anchors.left: parent.left - anchors.verticalCenter: parent.verticalCenter - elide: styleData.elideMode - text: styleData.value !== undefined ? styleData.value : "" - color: styleData.textColor - visible: !styleData.selected - } - Loader { // Initialize text editor lazily to improve performance - id: loaderEditor - anchors.fill: parent - anchors.margins: 4 - Connections { - target: loaderEditor.item - onAccepted: { - if (typeof styleData.value === 'number') - largeModel.setProperty(styleData.row, styleData.role, Number(parseFloat(loaderEditor.item.text).toFixed(0))) - else - largeModel.setProperty(styleData.row, styleData.role, loaderEditor.item.text) - } - } - sourceComponent: styleData.selected ? editor : null - Component { - id: editor - TextInput { - id: textinput - color: styleData.textColor - text: styleData.value - MouseArea { - id: mouseArea - anchors.fill: parent - hoverEnabled: true - onClicked: textinput.forceActiveFocus() - } - } - } - } - } - } - TableView { - model: largeModel - anchors.margins: 12 - anchors.fill:parent - frameVisible: frameCheckbox.checked - headerVisible: headerCheckbox.checked - sortIndicatorVisible: sortableCheckbox.checked - alternatingRowColors: alternateCheckbox.checked - - TableViewColumn { - role: "name" - title: "Name" - width: 120 - } - TableViewColumn { - role: "age" - title: "Age" - width: 120 - } - TableViewColumn { - role: "gender" - title: "Gender" - width: 120 - } - - headerDelegate: BorderImage{ - source: "images/header.png" - border{left:2;right:2;top:2;bottom:2} - Text { - text: styleData.value - anchors.centerIn:parent - color:"#333" - } - } - - rowDelegate: Rectangle { - height: (delegateChooser.currentIndex == 1 && styleData.selected) ? 30 : 20 - Behavior on height{ NumberAnimation{} } - - color: styleData.selected ? "#448" : (styleData.alternate? "#eee" : "#fff") - BorderImage{ - id: selected - anchors.fill: parent - source: "images/selectedrow.png" - visible: styleData.selected - border{left:2; right:2; top:2; bottom:2} - SequentialAnimation { - running: true; loops: Animation.Infinite - NumberAnimation { target:selected; property: "opacity"; to: 1.0; duration: 900} - NumberAnimation { target:selected; property: "opacity"; to: 0.5; duration: 900} - } - } - } - - itemDelegate: { - if (delegateChooser.currentIndex == 2) - return editableDelegate; - else - return delegate1; - } - } - } - } - } - Row{ - x: 12 - height: 34 - CheckBox{ - id: alternateCheckbox - checked: true - text: "Alternate" - anchors.verticalCenter: parent.verticalCenter - } - CheckBox{ - id: sortableCheckbox - checked: false - text: "Sort indicator" - anchors.verticalCenter: parent.verticalCenter - } - CheckBox{ - id: frameCheckbox - checked: true - text: "Frame" - anchors.verticalCenter: parent.verticalCenter - } - CheckBox{ - id: headerCheckbox - checked: true - text: "Headers" - anchors.verticalCenter: parent.verticalCenter - } - } - } -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/tableview/tableview.go b/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/tableview/tableview.go deleted file mode 100644 index a16b6b1abf..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/tableview/tableview.go +++ /dev/null @@ -1,29 +0,0 @@ -package main - -import ( - "fmt" - "gopkg.in/qml.v1" - "os" -) - -func main() { - if err := qml.Run(run); err != nil { - fmt.Fprintf(os.Stderr, "error: %v\n", err) - os.Exit(1) - } -} - -func run() error { - engine := qml.NewEngine() - - controls, err := engine.LoadFile("main.qml") - if err != nil { - return err - } - - window := controls.CreateWindow(nil) - - window.Show() - window.Wait() - return nil -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/touch/content/AndroidDelegate.qml b/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/touch/content/AndroidDelegate.qml deleted file mode 100644 index 21ee8e680b..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/touch/content/AndroidDelegate.qml +++ /dev/null @@ -1,92 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal -** -** This file is part of the Qt Quick Controls module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names -** of its contributors may be used to endorse or promote products derived -** from this software without specific prior written permission. -** -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - - - - - -import QtQuick 2.2 - -Item { - id: root - width: parent.width - height: 88 - - property alias text: textitem.text - signal clicked - - Rectangle { - anchors.fill: parent - color: "#11ffffff" - visible: mouse.pressed - } - - Text { - id: textitem - color: "white" - font.pixelSize: 32 - text: modelData - anchors.verticalCenter: parent.verticalCenter - anchors.left: parent.left - anchors.leftMargin: 30 - } - - Rectangle { - anchors.left: parent.left - anchors.right: parent.right - anchors.margins: 15 - height: 1 - color: "#424246" - } - - Image { - anchors.right: parent.right - anchors.rightMargin: 20 - anchors.verticalCenter: parent.verticalCenter - source: "../images/navigation_next_item.png" - } - - MouseArea { - id: mouse - anchors.fill: parent - onClicked: root.clicked() - - } -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/touch/content/ButtonPage.qml b/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/touch/content/ButtonPage.qml deleted file mode 100644 index 6058671c55..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/touch/content/ButtonPage.qml +++ /dev/null @@ -1,176 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal -** -** This file is part of the Qt Quick Controls module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names -** of its contributors may be used to endorse or promote products derived -** from this software without specific prior written permission. -** -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - - - - - -import QtQuick 2.2 -import QtQuick.Controls 1.1 -import QtQuick.Controls.Styles 1.1 - -Item { - width: parent.width - height: parent.height - - property real progress: 0 - SequentialAnimation on progress { - loops: Animation.Infinite - running: true - NumberAnimation { - from: 0 - to: 1 - duration: 3000 - } - NumberAnimation { - from: 1 - to: 0 - duration: 3000 - } - } - - Column { - spacing: 40 - anchors.centerIn: parent - - Button { - text: "Press me" - style: touchStyle - } - - Button { - style: touchStyle - text: "Press me too" - } - - Button { - anchors.margins: 20 - style: touchStyle - text: "Don't press me" - onClicked: if (stackView) stackView.pop() - } - - Row { - spacing: 20 - Switch { - style: switchStyle - } - Switch { - style: switchStyle - } - } - - } - - Component { - id: touchStyle - ButtonStyle { - panel: Item { - implicitHeight: 50 - implicitWidth: 320 - BorderImage { - anchors.fill: parent - antialiasing: true - border.bottom: 8 - border.top: 8 - border.left: 8 - border.right: 8 - anchors.margins: control.pressed ? -4 : 0 - source: control.pressed ? "../images/button_pressed.png" : "../images/button_default.png" - Text { - text: control.text - anchors.centerIn: parent - color: "white" - font.pixelSize: 23 - renderType: Text.NativeRendering - } - } - } - } - } - - Component { - id: switchStyle - SwitchStyle { - - groove: Rectangle { - implicitHeight: 50 - implicitWidth: 1.1 - Rectangle { - anchors.top: parent.top - anchors.left: parent.left - anchors.bottom: parent.bottom - width: parent.width/2 - 2 - height: 20 - anchors.margins: 2 - color: control.checked ? "#468bb7" : "#222" - Behavior on color {ColorAnimation {}} - Text { - font.pixelSize: 23 - color: "white" - anchors.centerIn: parent - text: "ON" - } - } - Item { - width: parent.width/2 - height: parent.height - anchors.right: parent.right - Text { - font.pixelSize: 23 - color: "white" - anchors.centerIn: parent - text: "OFF" - } - } - color: "#222" - border.color: "#444" - border.width: 2 - } - handle: Rectangle { - width: parent.parent.width/2 - height: control.height - color: "#444" - border.color: "#555" - border.width: 2 - } - } - } -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/touch/content/ListPage.qml b/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/touch/content/ListPage.qml deleted file mode 100644 index 65dc99f51c..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/touch/content/ListPage.qml +++ /dev/null @@ -1,82 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal -** -** This file is part of the Qt Quick Controls module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names -** of its contributors may be used to endorse or promote products derived -** from this software without specific prior written permission. -** -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - - - - - -import QtQuick 2.2 -import QtQuick.Controls 1.1 -import QtQuick.Controls.Styles 1.1 - -ScrollView { - width: parent.width - height: parent.height - - flickableItem.interactive: true - - ListView { - anchors.fill: parent - model: 100 - delegate: AndroidDelegate { - text: "Item #" + modelData - } - } - - style: ScrollViewStyle { - transientScrollBars: true - handle: Item { - implicitWidth: 14 - implicitHeight: 26 - Rectangle { - color: "#424246" - anchors.fill: parent - anchors.topMargin: 6 - anchors.leftMargin: 4 - anchors.rightMargin: 4 - anchors.bottomMargin: 6 - } - } - scrollBarBackground: Item { - implicitWidth: 14 - implicitHeight: 26 - } - } -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/touch/content/ProgressBarPage.qml b/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/touch/content/ProgressBarPage.qml deleted file mode 100644 index 019d720618..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/touch/content/ProgressBarPage.qml +++ /dev/null @@ -1,114 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal -** -** This file is part of the Qt Quick Controls module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names -** of its contributors may be used to endorse or promote products derived -** from this software without specific prior written permission. -** -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - - - - - -import QtQuick 2.2 -import QtQuick.Controls 1.1 -import QtQuick.Controls.Styles 1.1 - -Item { - width: parent.width - height: parent.height - - property real progress: 0 - SequentialAnimation on progress { - loops: Animation.Infinite - running: true - NumberAnimation { - from: 0 - to: 1 - duration: 3000 - } - NumberAnimation { - from: 1 - to: 0 - duration: 3000 - } - } - - Column { - spacing: 40 - anchors.centerIn: parent - - ProgressBar { - anchors.margins: 20 - style: touchStyle - width: 400 - value: progress - } - - ProgressBar { - anchors.margins: 20 - style: touchStyle - width: 400 - value: 1 - progress - } - - ProgressBar { - anchors.margins: 20 - style: touchStyle - value: 1 - width: 400 - } - - } - - Component { - id: touchStyle - ProgressBarStyle { - panel: Rectangle { - implicitHeight: 15 - implicitWidth: 400 - color: "#444" - opacity: 0.8 - Rectangle { - antialiasing: true - radius: 1 - color: "#468bb7" - height: parent.height - width: parent.width * control.value / control.maximumValue - } - } - } - } -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/touch/content/SliderPage.qml b/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/touch/content/SliderPage.qml deleted file mode 100644 index 95009e4f2f..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/touch/content/SliderPage.qml +++ /dev/null @@ -1,106 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal -** -** This file is part of the Qt Quick Controls module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names -** of its contributors may be used to endorse or promote products derived -** from this software without specific prior written permission. -** -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - - - - - -import QtQuick 2.2 -import QtQuick.Controls 1.1 -import QtQuick.Controls.Styles 1.1 - -Item { - width: parent.width - height: parent.height - - Column { - spacing: 12 - anchors.centerIn: parent - - Slider { - anchors.margins: 20 - style: touchStyle - value: 0 - } - Slider { - anchors.margins: 20 - style: touchStyle - value: 0.5 - } - Slider { - anchors.margins: 20 - style: touchStyle - value: 1.0 - } - - } - - Component { - id: touchStyle - SliderStyle { - handle: Rectangle { - width: 30 - height: 30 - radius: height - antialiasing: true - color: Qt.lighter("#468bb7", 1.1) - } - - groove: Item { - implicitHeight: 50 - implicitWidth: 400 - Rectangle { - height: 8 - width: parent.width - anchors.verticalCenter: parent.verticalCenter - color: "#444" - opacity: 0.8 - Rectangle { - antialiasing: true - radius: 1 - color: "#468bb7" - height: parent.height - width: parent.width * control.value / control.maximumValue - } - } - } - } - } -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/touch/content/TabBarPage.qml b/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/touch/content/TabBarPage.qml deleted file mode 100644 index c9bebccd32..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/touch/content/TabBarPage.qml +++ /dev/null @@ -1,102 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal -** -** This file is part of the Qt Quick Controls module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names -** of its contributors may be used to endorse or promote products derived -** from this software without specific prior written permission. -** -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - - - - - -import QtQuick 2.2 -import QtQuick.Controls 1.1 -import QtQuick.Controls.Styles 1.1 - -Item { - width: parent.width - height: parent.height - - TabView { - anchors.fill: parent - style: touchStyle - Tab { - title: "Buttons" - ButtonPage{ visible: true } - } - Tab { - title: "Sliders" - SliderPage{ visible: true } - } - Tab { - title: "Progress" - ProgressBarPage{ visible: true } - } - } - - Component { - id: touchStyle - TabViewStyle { - tabsAlignment: Qt.AlignVCenter - tabOverlap: 0 - frame: Item { } - tab: Item { - implicitWidth: control.width/control.count - implicitHeight: 50 - BorderImage { - anchors.fill: parent - border.bottom: 8 - border.top: 8 - source: styleData.selected ? "../images/tab_selected.png":"../images/tabs_standard.png" - Text { - anchors.centerIn: parent - color: "white" - text: styleData.title.toUpperCase() - font.pixelSize: 16 - } - Rectangle { - visible: index > 0 - anchors.top: parent.top - anchors.bottom: parent.bottom - anchors.margins: 10 - width:1 - color: "#3a3a3a" - } - } - } - } - } -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/touch/content/TextInputPage.qml b/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/touch/content/TextInputPage.qml deleted file mode 100644 index 0eeea03a2f..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/touch/content/TextInputPage.qml +++ /dev/null @@ -1,106 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal -** -** This file is part of the Qt Quick Controls module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names -** of its contributors may be used to endorse or promote products derived -** from this software without specific prior written permission. -** -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - - - - - -import QtQuick 2.2 -import QtQuick.Controls 1.1 -import QtQuick.Controls.Styles 1.1 - -Item { - width: parent.width - height: parent.height - - property real progress: 0 - SequentialAnimation on progress { - loops: Animation.Infinite - running: true - NumberAnimation { - from: 0 - to: 1 - duration: 3000 - } - NumberAnimation { - from: 1 - to: 0 - duration: 3000 - } - } - - Column { - spacing: 40 - anchors.centerIn: parent - - TextField { - anchors.margins: 20 - text: "Text input" - style: touchStyle - } - - TextField { - anchors.margins: 20 - text: "Readonly Text input" - style: touchStyle - readOnly: true - } - } - Component { - id: touchStyle - - TextFieldStyle { - textColor: "white" - font.pixelSize: 28 - background: Item { - implicitHeight: 50 - implicitWidth: 320 - BorderImage { - source: "../images/textinput.png" - border.left: 8 - border.right: 8 - anchors.bottom: parent.bottom - anchors.left: parent.left - anchors.right: parent.right - } - } - } - } -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/touch/images/NOTICE.txt b/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/touch/images/NOTICE.txt deleted file mode 100644 index 93a9afc8c8..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/touch/images/NOTICE.txt +++ /dev/null @@ -1,2 +0,0 @@ -Notice some of these images are derived from Google applications resources. They were provided under the following license: -You may use the materials in this directory without restriction to develop your apps and to use in your apps. diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/touch/images/button_default.png b/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/touch/images/button_default.png deleted file mode 100644 index 6d6cfd9ad25d629e34c4341542fce7fab8bd685a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1406 zcmeAS@N?(olHy`uVBq!ia0vp^wm_`O!3HGTR25Tz6lZ})WHAE+w=f7ZGR&GI!N9e?g*F{zaLoz;FhIrk$aUK86^Q z55aPgL8-<0Ii+Cr=0;Er$b#q^obz)Fic*VR> zydB(G$bwJ}R156XicB1V4U)kOY>=oGI88*jWag&kfy2WL7~)tZkh}+$ch1krFA6S5 zOir~kGc`2^h9kN#x(={akqE0yP^?0dz#A}--~#4cJ1$`Qg_Qz!Trx@YqT@i}*& zo!xwU$EsD{k<*@Qbd{OCd3|}?TT>I?;4iiH^2a}>9^p1Do%8(XJ&W#y1J%r_>}Aut zyG!q-%zJM7A(uJ3@Lme@f(DI@6)h$cGJ`fYs9p}>%v89%B#F^`*+QX94$C}`GEMVw zR$bEQGr5aZXJ(t12lGrdQSJyM-l-GVjC{4kHl#>tDe|Vw3eib8X%gZjb;4w2#DOT^ z+plYQ)LRbr8%wq+zTTy$oWi2=yyRZM^{>gZmI>cc;JswB_h)|X7RwtfLFek%Y_GN1 YKU>(9<>GXYS)dZq)78&qol`;+0G?sUi2wiq diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/touch/images/button_pressed.png b/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/touch/images/button_pressed.png deleted file mode 100644 index ab78b6ea363a132ed3210c611bc2622984601e90..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1694 zcmeAS@N?(olHy`uVBq!ia0vp^Ejq&N#aB8wRqxP?KOkzv*x2?hoh zjm(gUk_cZPtK|G#y~LFKq*T3%+ybC#1_ql7DKQ57aVaP$*c7FtSp~VcLA3*Uwn`Z#B?VUc`sL;2 zdgaD?`9*7iAWdWaj57fXq!y z$}cUkRZ;?31P4%e<`%#$$}5KY3g|!mio^naLp=k1xXD0`Hb6gG`R1o&rd7HmmZaJl z85kPt8W`#tnuHjdSs55wnOoZEqp3mI3D)ggl$uzQUlfv`pJNx0S&^EP3*ssm0YkzB zq8C{ORI`mf$QMYy0tXq$L1^NHd|Q&4h6q;_?}B77{R2 z*6QV1q=hz-c1FB{MfQ4;&t57B>1=C6K%amUqt2$u9~n zNK8((Gcz?c28JWLFuD$~Rgnm*Oi-*slE51f8Hb zYQ4)b>C}}*+dW+tH>wpylyUSZwQrr)d;2q6iA~st=GA(BE|X&p=IY}8I33BJ_v~X_F;H9F(OwL6nH%nTk^n2}BF}7&2{L7bEnf7o|qXGL8i4d1n7ri#Ep6qNc zlOtk2<(G%Ys+;d#o|~lm?8<^Wt?reAelOBa$G@oi#9h8WH1FX%7nkJ;Ri&3sH`J}Z z8vEvZ(%H0yVKW!U|5(pg7OtneQ~qB(!{z5Ij2QUYct88gyc6G*U-RQ`=9!CT40-}d uzYp$RTK8I!?cejS?=w2~^L?B5{XN5ax!s9|^H*DeY7kFXKbLh*2~7YeJyo&* diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/touch/images/navigation_next_item.png b/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/touch/images/navigation_next_item.png deleted file mode 100644 index 6665c9d85b8ac4717ccfa7ae07d06c188cd93735..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1341 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 diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/touch/images/tab_selected.png b/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/touch/images/tab_selected.png deleted file mode 100644 index 2345f7a8ef06a6ed09d6c14d7988e24a279da70b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 217 zcmeAS@N?(olHy`uVBq!ia0vp^fEamT(fRh;MqVaEp4Nx|UBiNc6z(#tjA-amm6+&yqrK}N*Eti97bOo>%tOjvE zUvu}oA>WP1HFwqS3o2)SPVAb?)ALl+w0`&N$A7nF)$FsEGA(4;!+1wr&XxN_+)1Fb O7(8A5T-G@yGywo&no&Fe diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/touch/images/tabs_standard.png b/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/touch/images/tabs_standard.png deleted file mode 100644 index 7140ab7b75b2ae40deb654405a6632964705c11c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1230 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 diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/touch/images/toolbar.png b/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/touch/images/toolbar.png deleted file mode 100644 index e9eba4c7442d595517fe863682e58535226eaae4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1643 zcmeAS@N?(olHy`uVBq!ia0vp^@<1%j!2~3^V-HsVDb50q$YLN*7=#%aX3ddcU|`Y6 z42dX-@b$4u&d=3LOvz75)vL%Y0IFtSu&J;DGILW)5)~?PbMlI0o zV7bVk)Z+Y{Qm}e+V1Qr{W(nL)Xu{~aA`tR+ zaAzS4LN!n=uv05CaRfF<1~afhqE_HE5#f@Vo04`X16W0gSi9$4NvKPSH^xF9h( z)y~Y+)EF3!=)&kaz*a>ftTHl3whBoCZ@@r;3z&25xPa*wRtng0d0NkxW?*1^>FMGa z;=wyN^mgD81A*@1f6G~SEnu!%B(jS4(!M>?>IaMGDQ??3sqC*+)a~!Nw{JD}Z+XW2 zo}btB`4-(B3mhtZgp#-PUi)v-5o*8F=fKUC+ybq=yFxTm+fFu`#BepHWgm!`ppYoF z+VL&3{qnf^&(C_TiraosX`%sJkmBMMk+Wpm9k?RqYTV&pytI~G#yhC}x&EuYnvzy~ z)pos4dR$s1e~(}8;7aE04ZHc)>o!;kSMjkb-rRmdzxc~Mj_8SH&l2aV?O5l~bY0PA z*%XGOvH7;|lTNMc4p_yy$@Xy0&k)(m9)InQYHdDqY2~vwt<9cQigI3@JD-;EyjINaO&!(VFm|1u@k~(m z!}I-}%X+0He>zVN$`Y#)ezu3P^69LOCv#T^Zfu^S*`dEhXzQlV6T4;SE%|Y#I%>no zb8{Sdb!*ZSU3Wd1`pMuC=hjbmY>q0vpSXEPSz1boj$drd!8-Z>M$Zz|*7amR3@Ev_ zXvMtjbBr>QZ@=DpsJj0%dqQWC|Mz&- QpP=f%)78&qol`;+0Qv(+s{jB1 diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/touch/main.qml b/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/touch/main.qml deleted file mode 100644 index c794f7dcc8..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/touch/main.qml +++ /dev/null @@ -1,147 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal -** -** This file is part of the Qt Quick Controls module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names -** of its contributors may be used to endorse or promote products derived -** from this software without specific prior written permission. -** -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick 2.2 -import QtQuick.Controls 1.1 -import "content" - -ApplicationWindow { - visible: true - width: 800 - height: 1280 - - Rectangle { - color: "#212126" - anchors.fill: parent - } - - toolBar: BorderImage { - border.bottom: 8 - source: "images/toolbar.png" - width: parent.width - height: 100 - - Rectangle { - id: backButton - width: opacity ? 60 : 0 - anchors.left: parent.left - anchors.leftMargin: 20 - opacity: stackView.depth > 1 ? 1 : 0 - anchors.verticalCenter: parent.verticalCenter - antialiasing: true - height: 60 - radius: 4 - color: backmouse.pressed ? "#222" : "transparent" - Behavior on opacity { NumberAnimation{} } - Image { - anchors.verticalCenter: parent.verticalCenter - source: "images/navigation_previous_item.png" - } - MouseArea { - id: backmouse - anchors.fill: parent - anchors.margins: -10 - onClicked: stackView.pop() - } - } - - Text { - font.pixelSize: 42 - Behavior on x { NumberAnimation{ easing.type: Easing.OutCubic} } - x: backButton.x + backButton.width + 20 - anchors.verticalCenter: parent.verticalCenter - color: "white" - text: "Widget Gallery" - } - } - - ListModel { - id: pageModel - ListElement { - title: "Buttons" - page: "content/ButtonPage.qml" - } - ListElement { - title: "Sliders" - page: "content/SliderPage.qml" - } - ListElement { - title: "ProgressBar" - page: "content/ProgressBarPage.qml" - } - ListElement { - title: "Tabs" - page: "content/TabBarPage.qml" - } - ListElement { - title: "TextInput" - page: "content/TextInputPage.qml" - } - ListElement { - title: "List" - page: "content/ListPage.qml" - } - } - - StackView { - id: stackView - anchors.fill: parent - // Implements back key navigation - focus: true - Keys.onReleased: if (event.key === Qt.Key_Back && stackView.depth > 1) { - stackView.pop(); - event.accepted = true; - } - - initialItem: Item { - width: parent.width - height: parent.height - ListView { - model: pageModel - anchors.fill: parent - delegate: AndroidDelegate { - text: title - onClicked: stackView.push(Qt.resolvedUrl(page)) - } - } - } - } - -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/touch/touch.go b/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/touch/touch.go deleted file mode 100644 index a16b6b1abf..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/examples/controls/touch/touch.go +++ /dev/null @@ -1,29 +0,0 @@ -package main - -import ( - "fmt" - "gopkg.in/qml.v1" - "os" -) - -func main() { - if err := qml.Run(run); err != nil { - fmt.Fprintf(os.Stderr, "error: %v\n", err) - os.Exit(1) - } -} - -func run() error { - engine := qml.NewEngine() - - controls, err := engine.LoadFile("main.qml") - if err != nil { - return err - } - - window := controls.CreateWindow(nil) - - window.Show() - window.Wait() - return nil -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/examples/customtype/customtype.go b/Godeps/_workspace/src/github.com/obscuren/qml/examples/customtype/customtype.go deleted file mode 100644 index 1433d6ed82..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/examples/customtype/customtype.go +++ /dev/null @@ -1,48 +0,0 @@ -package main - -import ( - "fmt" - "os" - - "gopkg.in/qml.v1" -) - -func main() { - if err := qml.Run(run); err != nil { - fmt.Fprintf(os.Stderr, "error: %v\n", err) - os.Exit(1) - } -} - -type GoType struct { - Text string -} - -func (v *GoType) SetText(text string) { - fmt.Println("Text changing to:", text) - v.Text = text -} - -type GoSingleton struct { - Event string -} - -func run() error { - qml.RegisterTypes("GoExtensions", 1, 0, []qml.TypeSpec{{ - Init: func(v *GoType, obj qml.Object) {}, - }, { - Init: func(v *GoSingleton, obj qml.Object) { v.Event = "birthday" }, - - Singleton: true, - }}) - - engine := qml.NewEngine() - component, err := engine.LoadFile("customtype.qml") - if err != nil { - return err - } - - value := component.Create(nil) - fmt.Println("Text is:", value.Interface().(*GoType).Text) - return nil -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/examples/customtype/customtype.qml b/Godeps/_workspace/src/github.com/obscuren/qml/examples/customtype/customtype.qml deleted file mode 100644 index 54f7aa046f..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/examples/customtype/customtype.qml +++ /dev/null @@ -1,5 +0,0 @@ -import GoExtensions 1.0 - -GoType { - text: "Happy " + GoSingleton.event + ", Go!" -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/examples/gopher/gopher.go b/Godeps/_workspace/src/github.com/obscuren/qml/examples/gopher/gopher.go deleted file mode 100644 index 45f18789f1..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/examples/gopher/gopher.go +++ /dev/null @@ -1,117 +0,0 @@ -package main - -import ( - "fmt" - "gopkg.in/qml.v1" - "gopkg.in/qml.v1/gl/2.0" - "os" -) - -var filename = "gopher.qml" - -func main() { - if len(os.Args) == 2 { - filename = os.Args[1] - } - if err := qml.Run(run); err != nil { - fmt.Fprintf(os.Stderr, "error: %v\n", err) - os.Exit(1) - } -} - -func run() error { - engine := qml.NewEngine() - - model, err := Read("model/gopher.obj") - if err != nil { - return err - } - - qml.RegisterTypes("GoExtensions", 1, 0, []qml.TypeSpec{{ - Init: func(g *Gopher, obj qml.Object) { - g.Object = obj - g.model = model - }, - }}) - - component, err := engine.LoadFile(filename) - if err != nil { - return err - } - - win := component.CreateWindow(nil) - win.Set("x", 560) - win.Set("y", 320) - win.Show() - win.Wait() - return nil -} - -type Gopher struct { - qml.Object - - model map[string]*Object - - Rotation int -} - -func (r *Gopher) SetRotation(rotation int) { - r.Rotation = rotation - r.Call("update") -} - -func (r *Gopher) Paint(p *qml.Painter) { - gl := GL.API(p) - - width := float32(r.Int("width")) - - gl.Enable(GL.BLEND) - gl.BlendFunc(GL.SRC_ALPHA, GL.ONE_MINUS_SRC_ALPHA) - - gl.ShadeModel(GL.SMOOTH) - gl.Enable(GL.DEPTH_TEST) - gl.DepthMask(true) - gl.Enable(GL.NORMALIZE) - - gl.Clear(GL.DEPTH_BUFFER_BIT) - - gl.Scalef(width/3, width/3, width/3) - - lka := []float32{0.3, 0.3, 0.3, 1.0} - lkd := []float32{1.0, 1.0, 1.0, 0.0} - lks := []float32{1.0, 1.0, 1.0, 1.0} - lpos := []float32{-2, 6, 3, 1.0} - - gl.Enable(GL.LIGHTING) - gl.Lightfv(GL.LIGHT0, GL.AMBIENT, lka) - gl.Lightfv(GL.LIGHT0, GL.DIFFUSE, lkd) - gl.Lightfv(GL.LIGHT0, GL.SPECULAR, lks) - gl.Lightfv(GL.LIGHT0, GL.POSITION, lpos) - gl.Enable(GL.LIGHT0) - - gl.EnableClientState(GL.NORMAL_ARRAY) - gl.EnableClientState(GL.VERTEX_ARRAY) - - gl.Translatef(1.5, 1.5, 0) - gl.Rotatef(-90, 0, 0, 1) - gl.Rotatef(float32(90+((36000+r.Rotation)%360)), 1, 0, 0) - - gl.Disable(GL.COLOR_MATERIAL) - - for _, obj := range r.model { - for _, group := range obj.Groups { - gl.Materialfv(GL.FRONT, GL.AMBIENT, group.Material.Ambient) - gl.Materialfv(GL.FRONT, GL.DIFFUSE, group.Material.Diffuse) - gl.Materialfv(GL.FRONT, GL.SPECULAR, group.Material.Specular) - gl.Materialf(GL.FRONT, GL.SHININESS, group.Material.Shininess) - gl.VertexPointer(3, GL.FLOAT, 0, group.Vertexes) - gl.NormalPointer(GL.FLOAT, 0, group.Normals) - gl.DrawArrays(GL.TRIANGLES, 0, len(group.Vertexes)/3) - } - } - - gl.Enable(GL.COLOR_MATERIAL) - - gl.DisableClientState(GL.NORMAL_ARRAY) - gl.DisableClientState(GL.VERTEX_ARRAY) -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/examples/gopher/gopher.qml b/Godeps/_workspace/src/github.com/obscuren/qml/examples/gopher/gopher.qml deleted file mode 100644 index 1f4be6dd43..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/examples/gopher/gopher.qml +++ /dev/null @@ -1,42 +0,0 @@ -import QtQuick 2.0 -import GoExtensions 1.0 - -Rectangle { - width: 640; height: 400 - color: "black" - - Gopher { - id: gopher - width: 300; height: 300 - anchors.centerIn: parent - - NumberAnimation on rotation { - id: anim - from: 360; to: 0 - duration: 5000 - loops: Animation.Infinite - } - - MouseArea { - anchors.fill: parent - - property real startX - property real startR - - onPressed: { - startX = mouse.x - startR = gopher.rotation - anim.running = false - } - onReleased: { - anim.from = gopher.rotation + 360 - anim.to = gopher.rotation - anim.running = true - } - onPositionChanged: { - gopher.rotation = (36000 + (startR - (mouse.x - startX))) % 360 - } - } - - } -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/examples/gopher/mix.qml b/Godeps/_workspace/src/github.com/obscuren/qml/examples/gopher/mix.qml deleted file mode 100644 index 0a9541ffe3..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/examples/gopher/mix.qml +++ /dev/null @@ -1,68 +0,0 @@ -import QtQuick 2.0 -import GoExtensions 1.0 - -Rectangle { - id: root - - width: 640 - height: 220 - color: "black" - - Rectangle { - x: 20; y: 20; width: 100; height: 100 - color: "red" - - SequentialAnimation on x { - loops: Animation.Infinite - NumberAnimation { from: 20; to: 120; duration: 4000; easing.type: Easing.InOutQuad } - NumberAnimation { from: 120; to: 20; duration: 4000; easing.type: Easing.InOutQuad } - } - } - - Rectangle { - x: 40; y: 40; width: 100; height: 100 - color: "yellow" - opacity: 0.7 - - SequentialAnimation on x { - loops: Animation.Infinite - NumberAnimation { from: 40; to: 220; duration: 4000; easing.type: Easing.InOutQuad } - NumberAnimation { from: 220; to: 40; duration: 4000; easing.type: Easing.InOutQuad } - } - } - - Gopher { - id: gopher - - x: 60; y: 60; width: 100; height: 100 - - SequentialAnimation on x { - loops: Animation.Infinite - NumberAnimation { from: 60; to: 320; duration: 4000; easing.type: Easing.InOutQuad } - NumberAnimation { from: 320; to: 60; duration: 4000; easing.type: Easing.InOutQuad } - } - } - - Rectangle { - x: 80; y: 80; width: 100; height: 100 - color: "yellow" - opacity: 0.7 - - SequentialAnimation on x { - loops: Animation.Infinite - NumberAnimation { from: 80; to: 420; duration: 4000; easing.type: Easing.InOutQuad } - NumberAnimation { from: 420; to: 80; duration: 4000; easing.type: Easing.InOutQuad } - } - } - - Rectangle { - x: 100; y: 100; width: 100; height: 100 - color: "red" - - SequentialAnimation on x { - loops: Animation.Infinite - NumberAnimation { from: 100; to: 520; duration: 4000; easing.type: Easing.InOutQuad } - NumberAnimation { from: 520; to: 100; duration: 4000; easing.type: Easing.InOutQuad } - } - } -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/examples/gopher/model/README.md b/Godeps/_workspace/src/github.com/obscuren/qml/examples/gopher/model/README.md deleted file mode 100644 index 77af729105..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/examples/gopher/model/README.md +++ /dev/null @@ -1,10 +0,0 @@ - -Author ------- - - * https://github.com/golang-samples/gopher-3d - -License -------- - - * http://creativecommons.org/licenses/by/3.0/deed.en diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/examples/gopher/model/gopher.blend b/Godeps/_workspace/src/github.com/obscuren/qml/examples/gopher/model/gopher.blend deleted file mode 100644 index 89c92b0da822ede87da7f48b88b62a9b13861973..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1370816 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

#IxY$jy{z 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

a#9cNf2;3X5^445 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

v$M>c1r0}CqUCoO; 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�Mz?eaGkG2cSC}_At)aJQ8$?io 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 CfTDu{ diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/examples/gopher/model/gopher.mtl b/Godeps/_workspace/src/github.com/obscuren/qml/examples/gopher/model/gopher.mtl deleted file mode 100644 index 532f5dc6c9..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/examples/gopher/model/gopher.mtl +++ /dev/null @@ -1,65 +0,0 @@ -# Blender MTL File: 'gopher.blend' -# Material Count: 7 - -newmtl Body -Ns 96.078431 -Ka 0.000000 0.000000 0.000000 -Kd 0.000000 0.429367 0.640000 -Ks 0.500000 0.500000 0.500000 -Ni 1.000000 -d 1.000000 -illum 2 - -newmtl Eye-White -Ns 96.078431 -Ka 0.000000 0.000000 0.000000 -Kd 0.800000 0.800000 0.800000 -Ks 1.000000 1.000000 1.000000 -Ni 1.000000 -d 1.000000 -illum 2 - -newmtl Material -Ns 96.078431 -Ka 0.000000 0.000000 0.000000 -Kd 0.640000 0.640000 0.640000 -Ks 0.500000 0.500000 0.500000 -Ni 1.000000 -d 1.000000 -illum 2 - -newmtl Material.001 -Ns 96.078431 -Ka 0.000000 0.000000 0.000000 -Kd 0.000000 0.000000 0.000000 -Ks 0.000000 0.000000 0.000000 -Ni 1.000000 -d 1.000000 -illum 2 - -newmtl NoseTop -Ns 96.078431 -Ka 0.000000 0.000000 0.000000 -Kd 0.000000 0.000000 0.000000 -Ks 0.000000 0.000000 0.000000 -Ni 1.000000 -d 1.000000 -illum 2 - -newmtl SkinColor -Ns 96.078431 -Ka 0.000000 0.000000 0.000000 -Kd 0.609017 0.353452 0.144174 -Ks 0.500000 0.500000 0.500000 -Ni 1.000000 -d 1.000000 -illum 2 - -newmtl Tooth -Ns 96.078431 -Ka 0.000000 0.000000 0.000000 -Kd 0.640000 0.640000 0.640000 -Ks 0.500000 0.500000 0.500000 -Ni 1.000000 -d 1.000000 -illum 2 diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/examples/gopher/model/gopher.obj b/Godeps/_workspace/src/github.com/obscuren/qml/examples/gopher/model/gopher.obj deleted file mode 100644 index 478a52be5d..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/examples/gopher/model/gopher.obj +++ /dev/null @@ -1,31375 +0,0 @@ -# Blender v2.68 (sub 0) OBJ File: 'gopher.blend' -# www.blender.org -mtllib gopher.mtl -o Tail_Sphere.015 -v 0.836333 -0.874988 0.092526 -v 0.823645 -0.873627 0.085005 -v 0.812676 -0.872312 0.074263 -v 0.803848 -0.871095 0.060713 -v 0.796247 -0.876140 0.053739 -v 0.789379 -0.876140 0.037016 -v 0.785150 -0.876140 0.018871 -v 0.783722 -0.876140 -0.000000 -v 0.785150 -0.876140 -0.018871 -v 0.789379 -0.876140 -0.037016 -v 0.796247 -0.876140 -0.053739 -v 0.805489 -0.876140 -0.068397 -v 0.816750 -0.876140 -0.080426 -v 0.829598 -0.876140 -0.089365 -v 0.843539 -0.876140 -0.094869 -v 0.836872 -0.867136 0.092646 -v 0.824701 -0.858223 0.085240 -v 0.814209 -0.849949 0.074605 -v 0.805800 -0.842633 0.061148 -v 0.797434 -0.842508 0.053739 -v 0.790698 -0.838771 0.037016 -v 0.786551 -0.836469 0.018871 -v 0.785150 -0.835692 -0.000000 -v 0.786551 -0.836469 -0.018871 -v 0.790698 -0.838770 -0.037016 -v 0.797434 -0.842508 -0.053739 -v 0.806498 -0.847539 -0.068397 -v 0.817543 -0.853668 -0.080426 -v 0.830145 -0.860661 -0.089365 -v 0.843818 -0.868249 -0.094869 -v 0.837938 -0.859636 0.092845 -v 0.826792 -0.843511 0.085631 -v 0.817245 -0.828592 0.075171 -v 0.809664 -0.815450 0.061869 -v 0.800950 -0.810169 0.053739 -v 0.794605 -0.802837 0.037016 -v 0.790698 -0.798322 0.018871 -v 0.789379 -0.796797 -0.000000 -v 0.790698 -0.798322 -0.018871 -v 0.794605 -0.802837 -0.037016 -v 0.800950 -0.810169 -0.053739 -v 0.809489 -0.820036 -0.068397 -v 0.819893 -0.832060 -0.080426 -v 0.831763 -0.845777 -0.089365 -v 0.844643 -0.860661 -0.094869 -v 0.839491 -0.852777 0.093115 -v 0.829838 -0.830057 0.086161 -v 0.821667 -0.809059 0.075942 -v 0.815293 -0.790590 0.062850 -v 0.806660 -0.780365 0.053739 -v 0.800950 -0.769721 0.037016 -v 0.797434 -0.763166 0.018871 -v 0.796247 -0.760952 -0.000000 -v 0.797434 -0.763166 -0.018871 -v 0.800950 -0.769721 -0.037016 -v 0.806660 -0.780365 -0.053739 -v 0.814345 -0.794690 -0.068397 -v 0.823708 -0.812145 -0.080426 -v 0.834391 -0.832060 -0.089365 -v 0.845982 -0.853668 -0.094869 -v 0.841471 -0.846823 0.093447 -v 0.833722 -0.818378 0.086812 -v 0.827306 -0.792103 0.076886 -v 0.822469 -0.769009 0.064052 -v 0.814345 -0.754242 0.053739 -v 0.809489 -0.740694 0.037016 -v 0.806498 -0.732351 0.018871 -v 0.805489 -0.729534 -0.000000 -v 0.806498 -0.732351 -0.018871 -v 0.809489 -0.740694 -0.037016 -v 0.814345 -0.754242 -0.053739 -v 0.820880 -0.772474 -0.068397 -v 0.828843 -0.794690 -0.080426 -v 0.837928 -0.820036 -0.089365 -v 0.847785 -0.847539 -0.094869 -v 0.843802 -0.842002 0.093827 -v 0.838294 -0.808922 0.087557 -v 0.833943 -0.778375 0.077968 -v 0.830917 -0.751536 0.065429 -v 0.823708 -0.732803 0.053739 -v 0.819893 -0.716872 0.037016 -v 0.817543 -0.707062 0.018871 -v 0.816750 -0.703750 0.000000 -v 0.817543 -0.707062 -0.018871 -v 0.819893 -0.716872 -0.037016 -v 0.823708 -0.732803 -0.053739 -v 0.828843 -0.754242 -0.068397 -v 0.835099 -0.780365 -0.080426 -v 0.842237 -0.810169 -0.089365 -v 0.849982 -0.842508 -0.094869 -v 0.846394 -0.838500 0.094241 -v 0.843379 -0.802052 0.088369 -v 0.841325 -0.768402 0.079147 -v 0.840312 -0.738843 0.066929 -v 0.834391 -0.716872 0.053739 -v 0.831763 -0.699171 0.037016 -v 0.830145 -0.688271 0.018871 -v 0.829598 -0.684590 0.000000 -v 0.830145 -0.688271 -0.018871 -v 0.831763 -0.699171 -0.037016 -v 0.834391 -0.716872 -0.053739 -v 0.837928 -0.740694 -0.068397 -v 0.842237 -0.769721 -0.080426 -v 0.847154 -0.802837 -0.089365 -v 0.852489 -0.838770 -0.094869 -v 0.849148 -0.836451 0.094672 -v 0.848781 -0.798033 0.089215 -v 0.849168 -0.762567 0.080376 -v 0.850294 -0.731417 0.068493 -v 0.845982 -0.707062 0.053739 -v 0.844643 -0.688271 0.037016 -v 0.843818 -0.676699 0.018871 -v 0.843539 -0.672792 0.000000 -v 0.843818 -0.676699 -0.018871 -v 0.844643 -0.688271 -0.037016 -v 0.845982 -0.707062 -0.053739 -v 0.847785 -0.732351 -0.068397 -v 0.849982 -0.763166 -0.080426 -v 0.852489 -0.798322 -0.089365 -v 0.855209 -0.836469 -0.094869 -v 0.851958 -0.835934 0.095105 -v 0.854293 -0.797019 0.090064 -v 0.857170 -0.761096 0.081608 -v 0.860479 -0.729544 0.070062 -v 0.858037 -0.703750 0.053739 -v 0.858037 -0.684590 0.037016 -v 0.858037 -0.672792 0.018871 -v 0.858037 -0.668808 0.000000 -v 0.858037 -0.672792 -0.018871 -v 0.858037 -0.684590 -0.037016 -v 0.858037 -0.703750 -0.053739 -v 0.858037 -0.729534 -0.068397 -v 0.858037 -0.760952 -0.080426 -v 0.858037 -0.796797 -0.089365 -v 0.858037 -0.835691 -0.094869 -v 0.854716 -0.836969 0.095522 -v 0.859703 -0.799050 0.090883 -v 0.865024 -0.764043 0.082797 -v 0.870475 -0.733295 0.071575 -v 0.870092 -0.707062 0.053739 -v 0.871432 -0.688271 0.037016 -v 0.872257 -0.676699 0.018871 -v 0.872535 -0.672792 0.000000 -v 0.872257 -0.676699 -0.018871 -v 0.871432 -0.688271 -0.037016 -v 0.870092 -0.707062 -0.053739 -v 0.868289 -0.732351 -0.068397 -v 0.866092 -0.763166 -0.080426 -v 0.863585 -0.798322 -0.089365 -v 0.860866 -0.836469 -0.094869 -v 0.857315 -0.839517 0.095908 -v 0.864802 -0.804046 0.091640 -v 0.872427 -0.771297 0.083896 -v 0.879898 -0.742528 0.072974 -v 0.881683 -0.716872 0.053739 -v 0.884311 -0.699171 0.037016 -v 0.885930 -0.688271 0.018871 -v 0.886476 -0.684590 0.000000 -v 0.885930 -0.688271 -0.018871 -v 0.884311 -0.699171 -0.037016 -v 0.881683 -0.716872 -0.053739 -v 0.878147 -0.740694 -0.068397 -v 0.873837 -0.769721 -0.080426 -v 0.868920 -0.802837 -0.089365 -v 0.863585 -0.838770 -0.094869 -v 0.859657 -0.843478 0.096248 -v 0.869396 -0.811817 0.092306 -v 0.879096 -0.782578 0.084863 -v 0.888386 -0.756886 0.074205 -v 0.892366 -0.732803 0.053739 -v 0.896182 -0.716872 0.037016 -v 0.898531 -0.707062 0.018871 -v 0.899324 -0.703750 0.000000 -v 0.898531 -0.707062 -0.018871 -v 0.896182 -0.716872 -0.037016 -v 0.892366 -0.732803 -0.053739 -v 0.887232 -0.754242 -0.068397 -v 0.880975 -0.780365 -0.080426 -v 0.873837 -0.810169 -0.089365 -v 0.866092 -0.842508 -0.094869 -v 0.861651 -0.848701 0.096528 -v 0.873307 -0.822063 0.092857 -v 0.884775 -0.797453 0.085662 -v 0.895613 -0.775818 0.075221 -v 0.901730 -0.754242 0.053739 -v 0.906586 -0.740694 0.037016 -v 0.909576 -0.732351 0.018871 -v 0.910586 -0.729534 -0.000000 -v 0.909576 -0.732351 -0.018871 -v 0.906586 -0.740694 -0.037016 -v 0.901730 -0.754242 -0.053739 -v 0.895195 -0.772474 -0.068397 -v 0.887232 -0.794690 -0.080426 -v 0.878147 -0.820036 -0.089365 -v 0.868289 -0.847539 -0.094869 -v 0.863221 -0.854986 0.096739 -v 0.876386 -0.834390 0.093269 -v 0.889244 -0.815350 0.086261 -v 0.901301 -0.798597 0.075984 -v 0.909414 -0.780365 0.053739 -v 0.915124 -0.769721 0.037016 -v 0.918640 -0.763166 0.018871 -v 0.919828 -0.760953 -0.000000 -v 0.918640 -0.763166 -0.018871 -v 0.915124 -0.769721 -0.037016 -v 0.909414 -0.780365 -0.053739 -v 0.901730 -0.794690 -0.068397 -v 0.892366 -0.812145 -0.080426 -v 0.881683 -0.832060 -0.089365 -v 0.870092 -0.853668 -0.094869 -v 0.864305 -0.862090 0.096871 -v 0.878513 -0.848326 0.093528 -v 0.892332 -0.835581 0.086637 -v 0.905232 -0.824346 0.076463 -v 0.915124 -0.810169 0.053739 -v 0.921469 -0.802837 0.037016 -v 0.925376 -0.798322 0.018871 -v 0.926695 -0.796798 -0.000000 -v 0.925376 -0.798322 -0.018871 -v 0.921469 -0.802837 -0.037016 -v 0.915124 -0.810169 -0.053739 -v 0.906586 -0.820036 -0.068397 -v 0.896182 -0.832060 -0.080426 -v 0.884311 -0.845777 -0.089365 -v 0.871432 -0.860661 -0.094869 -v 0.864863 -0.869741 0.096920 -v 0.879607 -0.863334 0.093624 -v 0.893921 -0.857370 0.086777 -v 0.907254 -0.852077 0.076640 -v 0.918640 -0.842508 0.053739 -v 0.925376 -0.838771 0.037016 -v 0.929524 -0.836469 0.018871 -v 0.930924 -0.835692 -0.000000 -v 0.929524 -0.836469 -0.018871 -v 0.925376 -0.838771 -0.037016 -v 0.918640 -0.842508 -0.053739 -v 0.909576 -0.847539 -0.068397 -v 0.898531 -0.853668 -0.080426 -v 0.885930 -0.860661 -0.089365 -v 0.872257 -0.868249 -0.094869 -v 0.864873 -0.877645 0.096884 -v 0.879627 -0.878838 0.093553 -v 0.893949 -0.879878 0.086673 -v 0.907290 -0.880725 0.076509 -v 0.919828 -0.876140 0.053739 -v 0.926695 -0.876140 0.037016 -v 0.930924 -0.876140 0.018871 -v 0.932352 -0.876140 -0.000000 -v 0.930924 -0.876140 -0.018871 -v 0.926695 -0.876140 -0.037016 -v 0.919828 -0.876140 -0.053739 -v 0.910586 -0.876140 -0.068397 -v 0.899324 -0.876140 -0.080426 -v 0.886476 -0.876140 -0.089365 -v 0.872535 -0.876140 -0.094869 -v 0.864334 -0.885498 0.096764 -v 0.878570 -0.894241 0.093318 -v 0.892416 -0.902240 0.086332 -v 0.905338 -0.909187 0.076074 -v 0.918640 -0.909772 0.053739 -v 0.925376 -0.913510 0.037016 -v 0.929524 -0.915811 0.018871 -v 0.930924 -0.916589 -0.000000 -v 0.929524 -0.915811 -0.018871 -v 0.925376 -0.913510 -0.037016 -v 0.918640 -0.909772 -0.053739 -v 0.909576 -0.904741 -0.068397 -v 0.898531 -0.898612 -0.080426 -v 0.885930 -0.891619 -0.089365 -v 0.872257 -0.884031 -0.094869 -v 0.863268 -0.892998 0.096565 -v 0.876479 -0.908953 0.092927 -v 0.889380 -0.923598 0.085765 -v 0.901474 -0.936370 0.075352 -v 0.915124 -0.942111 0.053739 -v 0.921469 -0.949443 0.037016 -v 0.925376 -0.953958 0.018870 -v 0.926695 -0.955483 -0.000000 -v 0.925376 -0.953958 -0.018871 -v 0.921469 -0.949443 -0.037016 -v 0.915124 -0.942111 -0.053739 -v 0.906586 -0.932244 -0.068397 -v 0.896182 -0.920220 -0.080426 -v 0.884311 -0.906503 -0.089365 -v 0.871432 -0.891619 -0.094869 -v 0.861715 -0.899857 0.096294 -v 0.873433 -0.922407 0.092397 -v 0.884957 -0.943130 0.084994 -v 0.895845 -0.961230 0.074372 -v 0.909414 -0.971915 0.053739 -v 0.915124 -0.982559 0.037016 -v 0.918640 -0.989114 0.018870 -v 0.919828 -0.991328 -0.000000 -v 0.918640 -0.989114 -0.018871 -v 0.915124 -0.982559 -0.037016 -v 0.909414 -0.971915 -0.053739 -v 0.901730 -0.957590 -0.068397 -v 0.892366 -0.940135 -0.080426 -v 0.881683 -0.920220 -0.089365 -v 0.870092 -0.898612 -0.094869 -v 0.859735 -0.905811 0.095962 -v 0.869549 -0.934087 0.091746 -v 0.879319 -0.960086 0.084050 -v 0.888669 -0.982811 0.073170 -v 0.901730 -0.998038 0.053739 -v 0.906586 -1.011586 0.037016 -v 0.909576 -1.019929 0.018870 -v 0.910586 -1.022746 -0.000000 -v 0.909576 -1.019929 -0.018871 -v 0.906586 -1.011586 -0.037016 -v 0.901730 -0.998038 -0.053739 -v 0.895195 -0.979806 -0.068397 -v 0.887232 -0.957590 -0.080426 -v 0.878147 -0.932244 -0.089365 -v 0.868289 -0.904741 -0.094869 -v 0.857405 -0.910632 0.095582 -v 0.864977 -0.943543 0.091001 -v 0.872681 -0.973815 0.082968 -v 0.880221 -1.000284 0.071792 -v 0.892366 -1.019477 0.053739 -v 0.896182 -1.035408 0.037016 -v 0.898531 -1.045218 0.018870 -v 0.899324 -1.048530 -0.000000 -v 0.898531 -1.045218 -0.018871 -v 0.896182 -1.035408 -0.037016 -v 0.892366 -1.019477 -0.053739 -v 0.887232 -0.998038 -0.068397 -v 0.880975 -0.971915 -0.080426 -v 0.873837 -0.942111 -0.089365 -v 0.866092 -0.909772 -0.094869 -v 0.858037 -0.876140 -0.096728 -v 0.854812 -0.914134 0.095169 -v 0.859892 -0.950413 0.090189 -v 0.865299 -0.983788 0.081790 -v 0.870826 -1.012977 0.070293 -v 0.881683 -1.035408 0.053739 -v 0.884311 -1.053109 0.037016 -v 0.885930 -1.064009 0.018870 -v 0.886476 -1.067690 -0.000000 -v 0.885930 -1.064009 -0.018871 -v 0.884311 -1.053109 -0.037016 -v 0.881683 -1.035408 -0.053739 -v 0.878147 -1.011586 -0.068397 -v 0.873837 -0.982559 -0.080426 -v 0.868920 -0.949443 -0.089365 -v 0.863585 -0.913509 -0.094869 -v 0.852058 -0.916182 0.094737 -v 0.854490 -0.954431 0.089343 -v 0.857457 -0.989622 0.080561 -v 0.860844 -1.020403 0.068729 -v 0.870092 -1.045218 0.053739 -v 0.871432 -1.064009 0.037016 -v 0.872257 -1.075581 0.018870 -v 0.872535 -1.079488 -0.000000 -v 0.872257 -1.075581 -0.018871 -v 0.871432 -1.064009 -0.037016 -v 0.870092 -1.045218 -0.053739 -v 0.868289 -1.019929 -0.068397 -v 0.866092 -0.989114 -0.080426 -v 0.863585 -0.953958 -0.089365 -v 0.860866 -0.915811 -0.094869 -v 0.849249 -0.916699 0.094304 -v 0.848979 -0.955445 0.088494 -v 0.849455 -0.991094 0.079328 -v 0.850659 -1.022276 0.067160 -v 0.858037 -1.048530 0.053739 -v 0.858037 -1.067690 0.037016 -v 0.858037 -1.079488 0.018870 -v 0.858037 -1.083472 -0.000000 -v 0.858037 -1.079488 -0.018871 -v 0.858037 -1.067690 -0.037016 -v 0.858037 -1.048530 -0.053739 -v 0.858037 -1.022746 -0.068397 -v 0.858037 -0.991327 -0.080426 -v 0.858037 -0.955482 -0.089365 -v 0.858037 -0.916588 -0.094869 -v 0.846491 -0.915664 0.093887 -v 0.843569 -0.953415 0.087675 -v 0.841601 -0.988146 0.078140 -v 0.840663 -1.018525 0.065647 -v 0.845982 -1.045218 0.053739 -v 0.844643 -1.064009 0.037016 -v 0.843818 -1.075581 0.018870 -v 0.843539 -1.079488 -0.000000 -v 0.843818 -1.075581 -0.018871 -v 0.844643 -1.064009 -0.037016 -v 0.845982 -1.045218 -0.053739 -v 0.847785 -1.019929 -0.068397 -v 0.849982 -0.989114 -0.080426 -v 0.852489 -0.953958 -0.089365 -v 0.855209 -0.915811 -0.094869 -v 0.843891 -0.913117 0.093501 -v 0.838469 -0.948418 0.086918 -v 0.834198 -0.980893 0.077040 -v 0.831240 -1.009292 0.064248 -v 0.834391 -1.035408 0.053739 -v 0.831763 -1.053109 0.037016 -v 0.830145 -1.064009 0.018870 -v 0.829598 -1.067690 -0.000000 -v 0.830145 -1.064009 -0.018871 -v 0.831763 -1.053109 -0.037016 -v 0.834391 -1.035408 -0.053739 -v 0.837928 -1.011586 -0.068397 -v 0.842237 -0.982559 -0.080426 -v 0.847154 -0.949443 -0.089365 -v 0.852489 -0.913509 -0.094869 -v 0.841549 -0.909156 0.093161 -v 0.833875 -0.940648 0.086252 -v 0.827529 -0.969612 0.076073 -v 0.822752 -0.994934 0.063017 -v 0.823708 -1.019477 0.053739 -v 0.819893 -1.035408 0.037016 -v 0.817543 -1.045218 0.018870 -v 0.816750 -1.048530 -0.000000 -v 0.817543 -1.045218 -0.018871 -v 0.819893 -1.035408 -0.037016 -v 0.823708 -1.019477 -0.053739 -v 0.828843 -0.998038 -0.068397 -v 0.835099 -0.971915 -0.080426 -v 0.842237 -0.942111 -0.089365 -v 0.849982 -0.909772 -0.094869 -v 0.839555 -0.903932 0.092881 -v 0.829964 -0.930402 0.085701 -v 0.821850 -0.954737 0.075274 -v 0.815525 -0.976002 0.062000 -v 0.814345 -0.998038 0.053739 -v 0.809489 -1.011586 0.037016 -v 0.806498 -1.019929 0.018870 -v 0.805489 -1.022746 -0.000000 -v 0.806498 -1.019929 -0.018871 -v 0.809489 -1.011586 -0.037016 -v 0.814345 -0.998038 -0.053739 -v 0.820880 -0.979806 -0.068397 -v 0.828843 -0.957590 -0.080426 -v 0.837928 -0.932244 -0.089365 -v 0.847785 -0.904741 -0.094869 -v 0.837986 -0.897648 0.092671 -v 0.826886 -0.918074 0.085289 -v 0.817381 -0.936840 0.074675 -v 0.809837 -0.953223 0.061238 -v 0.806660 -0.971915 0.053739 -v 0.800950 -0.982559 0.037016 -v 0.797434 -0.989114 0.018870 -v 0.796247 -0.991327 -0.000000 -v 0.797434 -0.989114 -0.018871 -v 0.800950 -0.982559 -0.037016 -v 0.806660 -0.971915 -0.053739 -v 0.814345 -0.957590 -0.068397 -v 0.823708 -0.940135 -0.080426 -v 0.834391 -0.920220 -0.089365 -v 0.845982 -0.898612 -0.094869 -v 0.850254 -0.876345 0.096537 -v 0.836901 -0.890543 0.092538 -v 0.824759 -0.904138 0.085030 -v 0.814293 -0.916608 0.074299 -v 0.805907 -0.927474 0.060759 -v 0.800950 -0.942111 0.053739 -v 0.794605 -0.949443 0.037016 -v 0.790698 -0.953958 0.018870 -v 0.789379 -0.955482 -0.000000 -v 0.790698 -0.953958 -0.018871 -v 0.794605 -0.949443 -0.037016 -v 0.800950 -0.942111 -0.053739 -v 0.809489 -0.932244 -0.068397 -v 0.819893 -0.920220 -0.080426 -v 0.831763 -0.906503 -0.089365 -v 0.844643 -0.891619 -0.094869 -v 0.836343 -0.882892 0.092489 -v 0.823664 -0.889130 0.084934 -v 0.812704 -0.894820 0.074160 -v 0.803884 -0.899742 0.060582 -v 0.797434 -0.909772 0.053739 -v 0.790698 -0.913509 0.037016 -v 0.786551 -0.915811 0.018871 -v 0.785150 -0.916588 -0.000000 -v 0.786551 -0.915811 -0.018871 -v 0.790698 -0.913509 -0.037016 -v 0.797434 -0.909772 -0.053739 -v 0.806498 -0.904741 -0.068397 -v 0.817543 -0.898612 -0.080426 -v 0.830145 -0.891619 -0.089365 -v 0.843818 -0.884031 -0.094869 -vn -0.474349 0.000000 -0.880306 -vn -0.655507 0.000000 -0.755150 -vn -0.647633 0.046113 -0.760521 -vn -0.988464 0.000000 -0.151402 -vn -0.999969 0.000000 0.000000 -vn -0.997345 0.072542 0.000000 -vn -0.765252 0.020234 0.643361 -vn -0.773370 0.019623 0.633595 -vn -0.748558 0.065889 0.659749 -vn -0.251717 0.000000 -0.967772 -vn -0.467391 0.032685 -0.883419 -vn -0.952696 0.000000 -0.303873 -vn -0.985443 0.071627 -0.153996 -vn -0.820399 -0.001923 0.571764 -vn -0.889187 0.000000 -0.457533 -vn -0.948637 0.068850 -0.308725 -vn -0.952696 0.000000 0.303873 -vn -0.948637 0.068850 0.308725 -vn -0.792291 0.000000 -0.610096 -vn -0.883602 0.063936 -0.463820 -vn -0.988464 0.000000 0.151402 -vn -0.985443 0.071627 0.154027 -vn -0.610096 0.012482 0.792199 -vn -0.398755 0.004120 0.917020 -vn -0.600971 0.045442 0.797937 -vn -0.785180 0.056490 -0.616627 -vn -0.763176 0.066286 0.642750 -vn -0.623493 0.092318 -0.776330 -vn -0.988678 0.149998 0.000000 -vn -0.726035 0.115757 0.677816 -vn -0.247871 0.016572 -0.968627 -vn -0.446333 0.065004 -0.892483 -vn -0.975585 0.147893 -0.162267 -vn -0.813562 0.056154 0.578722 -vn -0.798059 0.118290 0.590808 -vn -0.935453 0.141453 -0.323862 -vn -0.935453 0.141453 0.323862 -vn -0.865780 0.130345 -0.483108 -vn -0.975585 0.147893 0.162267 -vn -0.393628 0.020753 0.919004 -vn -0.578478 0.077517 0.811975 -vn -0.762963 0.114109 -0.636250 -vn -0.737999 0.112491 0.665304 -vn -0.380627 0.037080 0.923948 -vn -0.541765 0.108127 0.833522 -vn -0.722526 0.174047 -0.669057 -vn -0.971160 0.238380 0.000000 -vn -0.695730 0.158147 0.700644 -vn -0.581256 0.138615 -0.801782 -vn -0.694723 0.165868 0.699850 -vn -0.236000 0.033082 -0.971160 -vn -0.410535 0.096469 -0.906705 -vn -0.955840 0.234291 -0.177343 -vn -0.771081 0.184210 0.609455 -vn -0.909665 0.222144 -0.350932 -vn -0.909665 0.222144 0.350932 -vn -0.832057 0.202002 -0.516556 -vn -0.955840 0.234291 0.177343 -vn -0.863491 0.316263 0.392804 -vn -0.774987 0.281594 -0.565752 -vn -0.919065 0.338603 0.201514 -vn -0.359539 0.052492 0.931639 -vn -0.489944 0.136296 0.860988 -vn -0.658132 0.236946 -0.714621 -vn -0.938078 0.346385 0.000000 -vn -0.632801 0.202429 0.747368 -vn -0.517869 0.184515 -0.835292 -vn -0.647328 0.220069 0.729728 -vn -0.215888 0.049043 -0.975158 -vn -0.359264 0.126194 -0.924650 -vn -0.919065 0.338603 -0.201514 -vn -0.726005 0.259590 0.636799 -vn -0.863491 0.316263 -0.392804 -vn -0.849025 0.471603 -0.238166 -vn -0.649464 0.347636 0.676229 -vn -0.781121 0.429792 -0.452834 -vn -0.781121 0.429792 0.452834 -vn -0.681265 0.370678 -0.631214 -vn -0.849025 0.471572 0.238166 -vn -0.330454 0.066439 0.941465 -vn -0.422285 0.160894 0.892056 -vn -0.561144 0.301920 -0.770653 -vn -0.873379 0.487014 0.000000 -vn -0.544939 0.243538 0.802301 -vn -0.429518 0.228523 -0.873653 -vn -0.575243 0.279366 0.768761 -vn -0.187597 0.063875 -0.980132 -vn -0.291940 0.153142 -0.944060 -vn -0.312937 0.267800 -0.911222 -vn -0.738243 0.674490 0.000000 -vn -0.466842 0.344157 0.814600 -vn -0.151463 0.077120 -0.985443 -vn -0.208625 0.176000 -0.962004 -vn -0.708945 0.643117 -0.289438 -vn -0.518967 0.448225 0.727805 -vn -0.632313 0.564592 -0.530412 -vn -0.632313 0.564592 0.530412 -vn -0.530625 0.466109 -0.707907 -vn -0.708945 0.643117 0.289438 -vn -0.293710 0.078433 0.952666 -vn -0.338694 0.180486 0.923399 -vn -0.421216 0.364910 -0.830287 -vn -0.428510 0.278115 0.859645 -vn -0.231147 0.416120 -0.879421 -vn -0.456832 0.889523 0.000000 -vn -0.282876 0.301004 0.910672 -vn -0.167486 0.297586 -0.939848 -vn -0.304575 0.412214 0.858638 -vn -0.108036 0.088382 -0.990204 -vn -0.110172 0.192907 -0.975005 -vn -0.433058 0.832545 -0.345378 -vn -0.305216 0.546983 0.779473 -vn -0.373699 0.700034 -0.608478 -vn -0.373699 0.700034 0.608478 -vn -0.301431 0.551836 -0.777551 -vn -0.433058 0.832545 0.345378 -vn -0.249733 0.088198 0.964263 -vn -0.239937 0.193182 0.951353 -vn 0.000000 0.589892 -0.807459 -vn 0.000000 0.928312 0.371776 -vn -0.198462 0.095065 0.975463 -vn -0.130131 0.194739 0.972167 -vn 0.000000 0.437483 -0.899197 -vn 0.000000 1.000000 0.000000 -vn -0.116214 0.304025 0.945524 -vn 0.000000 0.309641 -0.950835 -vn -0.079653 0.456710 0.886013 -vn -0.057314 0.097201 -0.993591 -vn 0.000000 0.199774 -0.979827 -vn 0.000000 0.928312 -0.371776 -vn -0.007996 0.604389 0.796625 -vn 0.000000 0.764885 -0.644154 -vn 0.000000 0.764885 0.644154 -vn 0.190344 0.451918 0.871487 -vn 0.301431 0.551836 -0.777551 -vn 0.312357 0.582080 0.750694 -vn 0.231117 0.416120 -0.879421 -vn 0.373699 0.700034 0.608478 -vn -0.141118 0.096316 0.985290 -vn -0.084964 0.089877 0.992309 -vn 0.167486 0.297586 -0.939848 -vn 0.433058 0.832545 0.345378 -vn -0.021851 0.182775 0.982910 -vn 0.110172 0.192907 -0.975005 -vn 0.433058 0.832545 -0.345378 -vn 0.048067 0.283486 0.957762 -vn 0.000000 0.101108 -0.994873 -vn 0.057314 0.097201 -0.993591 -vn 0.373699 0.700034 -0.608478 -vn 0.456832 0.889523 0.000000 -vn 0.708945 0.643117 -0.289438 -vn 0.190039 0.247749 0.949980 -vn 0.108036 0.088382 -0.990204 -vn 0.632313 0.564592 -0.530412 -vn 0.416395 0.396496 0.818140 -vn 0.530625 0.466109 -0.707907 -vn 0.560320 0.496719 0.662770 -vn 0.421216 0.364910 -0.830287 -vn 0.632313 0.564592 0.530412 -vn -0.035615 0.079226 0.996216 -vn 0.312937 0.267800 -0.911222 -vn 0.708945 0.643117 0.289468 -vn 0.074343 0.162053 0.983947 -vn 0.208625 0.176000 -0.962004 -vn 0.429518 0.228492 -0.873653 -vn 0.738243 0.674490 0.000000 -vn 0.849025 0.471603 0.238166 -vn 0.155705 0.136418 0.978332 -vn 0.291940 0.153142 -0.944060 -vn 0.849025 0.471603 -0.238166 -vn 0.304086 0.204810 0.930357 -vn 0.151494 0.077120 -0.985443 -vn 0.781121 0.429792 -0.452834 -vn 0.571764 0.317209 0.756584 -vn 0.681265 0.370678 -0.631214 -vn 0.719779 0.392926 0.572283 -vn 0.561144 0.301920 -0.770653 -vn 0.781121 0.429792 0.452834 -vn 0.006561 0.066561 0.997742 -vn 0.658132 0.236946 -0.714621 -vn 0.863491 0.316263 0.392804 -vn 0.041444 0.052217 0.997772 -vn 0.517869 0.184515 -0.835292 -vn 0.873379 0.487014 0.000000 -vn 0.919065 0.338603 0.201514 -vn 0.221351 0.107547 0.969237 -vn 0.359264 0.126194 -0.924650 -vn 0.919065 0.338603 -0.201514 -vn 0.390820 0.158757 0.906644 -vn 0.187597 0.063906 -0.980163 -vn 0.863491 0.316263 -0.392804 -vn 0.668630 0.236610 0.704886 -vn 0.774987 0.281594 -0.565752 -vn 0.812281 0.294595 0.503342 -vn 0.725761 0.162084 0.668538 -vn 0.832057 0.202002 -0.516556 -vn 0.863643 0.208136 0.459059 -vn 0.722526 0.174047 -0.669057 -vn 0.909665 0.222144 0.350902 -vn 0.068514 0.036592 0.996979 -vn 0.581256 0.138615 -0.801782 -vn 0.938078 0.346385 0.000000 -vn 0.955840 0.234291 0.177343 -vn 0.271065 0.076571 0.959471 -vn 0.410535 0.096469 -0.906705 -vn 0.955840 0.234291 -0.177343 -vn 0.453108 0.111942 0.884365 -vn 0.215888 0.049043 -0.975158 -vn 0.909665 0.222144 -0.350902 -vn 0.971160 0.238380 0.000000 -vn 0.975585 0.147893 -0.162267 -vn 0.494186 0.065462 0.866848 -vn 0.236030 0.033082 -0.971160 -vn 0.935453 0.141453 -0.323862 -vn 0.756218 0.093966 0.647481 -vn 0.865780 0.130345 -0.483108 -vn 0.890439 0.132023 0.435469 -vn 0.762963 0.114109 -0.636250 -vn 0.935453 0.141453 0.323862 -vn 0.087374 0.020142 0.995972 -vn 0.623493 0.092318 -0.776330 -vn 0.975585 0.147893 0.162267 -vn 0.305277 0.044527 0.951201 -vn 0.446333 0.065004 -0.892483 -vn 0.647633 0.046113 -0.760521 -vn 0.988678 0.149998 0.000000 -vn 0.985443 0.071627 0.154027 -vn 0.324534 0.012085 0.945769 -vn 0.467391 0.032685 -0.883419 -vn 0.985443 0.071627 -0.154027 -vn 0.516739 0.019532 0.855892 -vn 0.247871 0.016572 -0.968627 -vn 0.948637 0.068850 -0.308725 -vn 0.767357 0.030549 0.640461 -vn 0.883602 0.063936 -0.463820 -vn 0.901456 0.062929 0.428266 -vn 0.785180 0.056490 -0.616627 -vn 0.948637 0.068850 0.308725 -vn 0.097934 0.003418 0.995178 -vn 0.792291 0.000000 -0.610096 -vn 0.952696 0.000000 0.303873 -vn 0.100528 -0.013092 0.994842 -vn 0.655507 0.000000 -0.755150 -vn 0.997345 0.072542 0.000000 -vn 0.988464 0.000000 0.151402 -vn 0.329356 -0.020356 0.943968 -vn 0.474349 0.000000 -0.880306 -vn 0.988464 0.000000 -0.151402 -vn 0.522233 -0.026002 0.852382 -vn 0.251717 0.000000 -0.967772 -vn 0.952696 0.000000 -0.303873 -vn 0.762444 -0.030000 0.646321 -vn 0.889187 0.000000 -0.457533 -vn 0.900571 -0.002441 0.434675 -vn 0.948637 -0.068850 -0.308725 -vn 0.948637 -0.068850 0.308725 -vn 0.883602 -0.063936 -0.463820 -vn 0.985443 -0.071627 0.154027 -vn 0.319773 -0.052461 0.946013 -vn 0.785180 -0.056490 -0.616627 -vn 1.000000 0.000000 0.000000 -vn 0.997345 -0.072542 0.000000 -vn 0.511002 -0.071200 0.856594 -vn 0.647633 -0.046113 -0.760521 -vn 0.739006 -0.082705 0.668569 -vn 0.467391 -0.032685 -0.883419 -vn 0.985443 -0.071627 -0.154027 -vn 0.696951 -0.147862 0.701682 -vn 0.247841 -0.016572 -0.968627 -vn 0.446333 -0.065004 -0.892483 -vn 0.975585 -0.147893 -0.162267 -vn 0.891446 -0.062014 0.448836 -vn 0.870388 -0.132664 0.474136 -vn 0.935453 -0.141453 -0.323862 -vn 0.935453 -0.141453 0.323862 -vn 0.865780 -0.130345 -0.483108 -vn 0.975585 -0.147893 0.162267 -vn 0.095340 -0.029481 0.994995 -vn 0.295663 -0.083834 0.951567 -vn 0.762963 -0.114109 -0.636250 -vn 0.988678 -0.149998 0.000000 -vn 0.482406 -0.116214 0.868191 -vn 0.623493 -0.092318 -0.776330 -vn 0.971160 -0.238380 0.000000 -vn 0.434706 -0.160985 0.886044 -vn 0.581256 -0.138615 -0.801782 -vn 0.637593 -0.208747 0.741539 -vn 0.236000 -0.033082 -0.971160 -vn 0.410535 -0.096469 -0.906705 -vn 0.955840 -0.234291 -0.177343 -vn 0.832209 -0.203070 0.515915 -vn 0.909665 -0.222144 -0.350932 -vn 0.909665 -0.222144 0.350902 -vn 0.832057 -0.202002 -0.516556 -vn 0.955840 -0.234291 0.177343 -vn 0.082064 -0.045534 0.995575 -vn 0.256508 -0.113987 0.959777 -vn 0.722526 -0.174047 -0.669057 -vn 0.774987 -0.281594 -0.565752 -vn 0.919065 -0.338603 0.201514 -vn 0.060488 -0.060823 0.996307 -vn 0.201636 -0.142125 0.969085 -vn 0.658132 -0.236946 -0.714621 -vn 0.938078 -0.346385 0.000000 -vn 0.364940 -0.204962 0.908170 -vn 0.517869 -0.184515 -0.835292 -vn 0.550890 -0.270608 0.789453 -vn 0.215888 -0.049043 -0.975158 -vn 0.359264 -0.126194 -0.924650 -vn 0.919065 -0.338603 -0.201514 -vn 0.771477 -0.280831 0.570879 -vn 0.863491 -0.316263 -0.392804 -vn 0.863491 -0.316263 0.392804 -vn 0.781121 -0.429792 -0.452834 -vn 0.781121 -0.429792 0.452834 -vn 0.681265 -0.370678 -0.631214 -vn 0.849025 -0.471603 0.238166 -vn 0.030824 -0.074740 0.996704 -vn 0.130833 -0.167150 0.977203 -vn 0.561144 -0.301920 -0.770653 -vn 0.873379 -0.487014 0.000000 -vn 0.269753 -0.246559 0.930784 -vn 0.429518 -0.228492 -0.873653 -vn 0.428663 -0.331248 0.840510 -vn 0.187597 -0.063906 -0.980163 -vn 0.291940 -0.153142 -0.944060 -vn 0.849025 -0.471603 -0.238166 -vn 0.675710 -0.367534 0.638966 -vn 0.263527 -0.384533 0.884671 -vn 0.151494 -0.077120 -0.985443 -vn 0.208655 -0.176000 -0.962004 -vn 0.708945 -0.643117 -0.289468 -vn 0.525498 -0.460768 0.715201 -vn 0.632313 -0.564592 -0.530412 -vn 0.632313 -0.564592 0.530412 -vn 0.530625 -0.466109 -0.707907 -vn 0.708945 -0.643117 0.289438 -vn -0.006500 -0.086886 0.996185 -vn 0.044496 -0.187719 0.981201 -vn 0.421216 -0.364910 -0.830287 -vn 0.738243 -0.674490 0.000000 -vn 0.146733 -0.282876 0.947844 -vn 0.312937 -0.267800 -0.911222 -vn 0.456832 -0.889523 0.000000 -vn -0.003662 -0.308847 0.951079 -vn 0.167486 -0.297586 -0.939848 -vn 0.049257 -0.434462 0.899319 -vn 0.108036 -0.088382 -0.990204 -vn 0.110172 -0.192907 -0.975005 -vn 0.433058 -0.832545 -0.345378 -vn 0.288614 -0.540483 0.790277 -vn 0.373699 -0.700034 -0.608478 -vn 0.373699 -0.700034 0.608478 -vn 0.301431 -0.551836 -0.777551 -vn 0.433058 -0.832545 0.345378 -vn -0.050996 -0.096957 0.993957 -vn -0.056215 -0.201880 0.977783 -vn 0.231117 -0.416120 -0.879421 -vn 0.000000 -0.589892 -0.807459 -vn 0.000000 -0.928312 0.371776 -vn -0.102664 -0.104282 0.989227 -vn -0.166997 -0.205145 0.964354 -vn 0.000000 -0.437483 -0.899197 -vn 0.000000 -1.000000 0.000000 -vn -0.172643 -0.315592 0.933042 -vn 0.000000 -0.309641 -0.950835 -vn -0.174261 -0.448103 0.876797 -vn 0.057314 -0.097232 -0.993591 -vn 0.000000 -0.199774 -0.979827 -vn 0.000000 -0.928312 -0.371776 -vn 0.000000 -0.764885 -0.644154 -vn 0.000000 -0.764885 0.644154 -vn -0.301431 -0.551836 -0.777551 -vn 0.000946 -0.567644 0.823237 -vn -0.288766 -0.529832 0.797388 -vn -0.231147 -0.416120 -0.879421 -vn -0.373699 -0.700034 0.608478 -vn -0.160222 -0.106052 0.981353 -vn -0.216468 -0.100040 0.971129 -vn -0.167516 -0.297586 -0.939848 -vn -0.433058 -0.832545 0.345378 -vn -0.275094 -0.194525 0.941527 -vn -0.110172 -0.192907 -0.975005 -vn -0.433058 -0.832545 -0.345378 -vn -0.336253 -0.297891 0.893399 -vn 0.000000 -0.101108 -0.994873 -vn -0.057283 -0.097201 -0.993591 -vn -0.373699 -0.700034 -0.608478 -vn -0.397290 -0.408582 0.821680 -vn -0.108036 -0.088382 -0.990204 -vn -0.632313 -0.564592 -0.530412 -vn -0.564409 -0.343852 0.750450 -vn -0.530625 -0.466109 -0.707907 -vn -0.507706 -0.447005 0.736442 -vn -0.421216 -0.364910 -0.830287 -vn -0.632313 -0.564592 0.530412 -vn -0.265603 -0.089602 0.959899 -vn -0.312937 -0.267800 -0.911222 -vn -0.456832 -0.889523 0.000000 -vn -0.708945 -0.643117 0.289438 -vn -0.369793 -0.174444 0.912564 -vn -0.208655 -0.176000 -0.962004 -vn -0.708945 -0.643117 -0.289438 -vn -0.474197 -0.263222 0.840114 -vn -0.448561 -0.148778 0.881252 -vn -0.291940 -0.153142 -0.944060 -vn -0.738243 -0.674490 0.000000 -vn -0.849025 -0.471572 -0.238166 -vn -0.581683 -0.219764 0.783135 -vn -0.151463 -0.077120 -0.985443 -vn -0.781121 -0.429792 -0.452834 -vn -0.675222 -0.272042 0.685568 -vn -0.681265 -0.370678 -0.631214 -vn -0.650624 -0.355327 0.671102 -vn -0.561144 -0.301920 -0.770653 -vn -0.781121 -0.429792 0.452834 -vn -0.307321 -0.076937 0.948454 -vn -0.429518 -0.228492 -0.873653 -vn -0.849025 -0.471603 0.238166 -vn -0.863491 -0.316263 0.392804 -vn -0.341594 -0.062441 0.937742 -vn -0.517869 -0.184515 -0.835292 -vn -0.873379 -0.487014 0.000000 -vn -0.919065 -0.338603 0.201514 -vn -0.510971 -0.119327 0.851253 -vn -0.359264 -0.126194 -0.924650 -vn -0.919065 -0.338603 -0.201514 -vn -0.660726 -0.172308 0.730552 -vn -0.187597 -0.063875 -0.980163 -vn -0.863491 -0.316263 -0.392804 -vn -0.740806 -0.201972 0.640614 -vn -0.774987 -0.281594 -0.565752 -vn -0.737144 -0.269326 0.619709 -vn -0.658132 -0.236946 -0.714621 -vn -0.832057 -0.202002 -0.516556 -vn -0.785943 -0.192419 0.587573 -vn -0.722526 -0.174047 -0.669057 -vn -0.909665 -0.222144 0.350932 -vn -0.367992 -0.046541 0.928648 -vn -0.581256 -0.138615 -0.801782 -vn -0.938078 -0.346385 0.000000 -vn -0.955840 -0.234291 0.177343 -vn -0.557390 -0.087497 0.825587 -vn -0.410535 -0.096469 -0.906705 -vn -0.955840 -0.234291 -0.177343 -vn -0.715659 -0.123692 0.687399 -vn -0.215888 -0.049043 -0.975158 -vn -0.909665 -0.222144 -0.350932 -vn -0.772942 -0.137364 0.619373 -vn -0.236000 -0.033082 -0.971160 -vn -0.935453 -0.141453 -0.323862 -vn -0.782128 -0.079409 0.618000 -vn -0.865780 -0.130345 -0.483108 -vn -0.810572 -0.123783 0.572375 -vn -0.762963 -0.114109 -0.636250 -vn -0.935453 -0.141453 0.323862 -vn -0.386242 -0.029756 0.921903 -vn -0.623493 -0.092318 -0.776330 -vn -0.971160 -0.238380 0.000000 -vn -0.975585 -0.147893 0.162267 -vn -0.588763 -0.054415 0.806452 -vn -0.446333 -0.065004 -0.892483 -vn -0.975585 -0.147893 -0.162267 -vn -0.750755 -0.075289 0.656240 -vn -0.606067 -0.020905 0.795099 -vn -0.467391 -0.032685 -0.883419 -vn -0.988678 -0.149998 0.000000 -vn -0.985443 -0.071657 -0.154027 -vn -0.769402 -0.027558 0.638142 -vn -0.247871 -0.016572 -0.968627 -vn -0.948637 -0.068850 -0.308725 -vn -0.777337 -0.027436 0.628437 -vn -0.883602 -0.063936 -0.463820 -vn -0.820246 -0.061220 0.568712 -vn -0.785180 -0.056490 -0.616627 -vn -0.948637 -0.068850 0.308725 -vn -0.396374 -0.012726 0.917997 -vn -0.647633 -0.046113 -0.760521 -vn -0.985443 -0.071657 0.154027 -vn 0.000000 0.000000 -1.000000 -vn -0.151952 -0.004700 0.988372 -vn -0.997345 -0.072542 0.000000 -usemtl SkinColor -s 1 -f 14//1 13//2 28//3 -f 9//4 8//5 23//6 -f 4//7 3//8 19//9 -f 15//10 14//1 29//11 -f 10//12 9//4 24//13 -f 5//14 4//7 19//9 -f 11//15 10//12 25//16 -f 6//17 5//14 21//18 -f 12//19 11//15 26//20 -f 7//21 6//17 22//22 -f 2//23 1//24 17//25 -f 13//2 12//19 27//26 -f 8//5 7//21 23//6 -f 3//8 2//23 18//27 -f 29//11 28//3 43//28 -f 24//13 23//6 38//29 -f 19//9 18//27 34//30 -f 30//31 29//11 44//32 -f 25//16 24//13 39//33 -f 20//34 19//9 35//35 -f 26//20 25//16 40//36 -f 21//18 20//34 36//37 -f 27//26 26//20 41//38 -f 22//22 21//18 37//39 -f 17//25 16//40 32//41 -f 28//3 27//26 42//42 -f 23//6 22//22 38//29 -f 18//27 17//25 33//43 -f 32//41 31//44 47//45 -f 43//28 42//42 57//46 -f 38//29 37//39 53//47 -f 33//43 32//41 48//48 -f 44//32 43//28 58//49 -f 39//33 38//29 53//47 -f 34//30 33//43 49//50 -f 45//51 44//32 59//52 -f 40//36 39//33 54//53 -f 35//35 34//30 50//54 -f 41//38 40//36 55//55 -f 36//37 35//35 51//56 -f 42//42 41//38 56//57 -f 37//39 36//37 52//58 -f 51//56 50//54 66//59 -f 57//46 56//57 71//60 -f 52//58 51//56 67//61 -f 47//45 46//62 62//63 -f 58//49 57//46 72//64 -f 53//47 52//58 68//65 -f 48//48 47//45 63//66 -f 59//52 58//49 73//67 -f 54//53 53//47 68//65 -f 49//50 48//48 64//68 -f 60//69 59//52 74//70 -f 55//55 54//53 69//71 -f 50//54 49//50 65//72 -f 56//57 55//55 70//73 -f 70//73 69//71 84//74 -f 65//72 64//68 80//75 -f 71//60 70//73 85//76 -f 66//59 65//72 81//77 -f 72//64 71//60 86//78 -f 67//61 66//59 82//79 -f 62//63 61//80 77//81 -f 73//67 72//64 87//82 -f 68//65 67//61 83//83 -f 63//66 62//63 78//84 -f 74//70 73//67 88//85 -f 69//71 68//65 83//83 -f 64//68 63//66 79//86 -f 75//87 74//70 89//88 -f 89//88 88//85 103//89 -f 84//74 83//83 98//90 -f 79//86 78//84 94//91 -f 90//92 89//88 104//93 -f 85//76 84//74 99//94 -f 80//75 79//86 95//95 -f 86//78 85//76 100//96 -f 81//77 80//75 96//97 -f 87//82 86//78 101//98 -f 82//79 81//77 97//99 -f 77//81 76//100 92//101 -f 88//85 87//82 102//102 -f 83//83 82//79 98//90 -f 78//84 77//81 93//103 -f 103//89 102//102 117//104 -f 98//90 97//99 113//105 -f 93//103 92//101 108//106 -f 104//93 103//89 118//107 -f 99//94 98//90 113//105 -f 94//91 93//103 109//108 -f 105//109 104//93 119//110 -f 100//96 99//94 114//111 -f 95//95 94//91 110//112 -f 101//98 100//96 115//113 -f 96//97 95//95 111//114 -f 102//102 101//98 116//115 -f 97//99 96//97 112//116 -f 92//101 91//117 107//118 -f 117//104 116//115 131//119 -f 112//116 111//114 127//120 -f 107//118 106//121 122//122 -f 118//107 117//104 132//123 -f 113//105 112//116 128//124 -f 108//106 107//118 123//125 -f 119//110 118//107 133//126 -f 114//111 113//105 128//124 -f 109//108 108//106 124//127 -f 120//128 119//110 134//129 -f 115//113 114//111 129//130 -f 110//112 109//108 125//131 -f 116//115 115//113 130//132 -f 111//114 110//112 126//133 -f 125//131 124//127 139//134 -f 131//119 130//132 146//135 -f 126//133 125//131 140//136 -f 132//123 131//119 147//137 -f 127//120 126//133 141//138 -f 122//122 121//139 136//140 -f 133//126 132//123 148//141 -f 128//124 127//120 142//142 -f 123//125 122//122 137//143 -f 134//129 133//126 149//144 -f 129//130 128//124 144//145 -f 124//127 123//125 138//146 -f 135//147 134//129 150//148 -f 130//132 129//130 145//149 -f 144//145 143//150 159//151 -f 139//134 138//146 153//152 -f 150//148 149//144 165//153 -f 145//149 144//145 160//154 -f 140//136 139//134 154//155 -f 146//135 145//149 161//156 -f 141//138 140//136 155//157 -f 147//137 146//135 162//158 -f 142//142 141//138 156//159 -f 137//143 136//140 151//160 -f 148//141 147//137 163//161 -f 143//150 142//142 157//162 -f 138//146 137//143 152//163 -f 149//144 148//141 164//164 -f 163//161 162//158 178//165 -f 158//166 157//162 172//167 -f 153//152 152//163 167//168 -f 164//164 163//161 179//169 -f 159//151 158//166 174//170 -f 154//155 153//152 168//171 -f 165//153 164//164 180//172 -f 160//154 159//151 175//173 -f 155//157 154//155 169//174 -f 161//156 160//154 176//175 -f 156//159 155//157 170//176 -f 162//158 161//156 177//177 -f 157//162 156//159 171//178 -f 152//163 151//160 166//179 -f 177//177 176//175 192//180 -f 172//167 171//178 186//181 -f 167//168 166//179 181//182 -f 178//165 177//177 193//183 -f 173//184 172//167 187//185 -f 168//171 167//168 182//186 -f 179//169 178//165 194//187 -f 174//170 173//184 189//188 -f 169//174 168//171 183//189 -f 180//172 179//169 195//190 -f 175//173 174//170 190//191 -f 170//176 169//174 184//192 -f 176//175 175//173 191//193 -f 171//178 170//176 185//194 -f 185//194 184//192 199//195 -f 191//193 190//191 206//196 -f 186//181 185//194 200//197 -f 192//180 191//193 207//198 -f 187//185 186//181 201//199 -f 182//186 181//182 196//200 -f 193//183 192//180 208//201 -f 188//202 187//185 202//203 -f 183//189 182//186 197//204 -f 194//187 193//183 209//205 -f 189//188 188//202 204//206 -f 184//192 183//189 198//207 -f 195//190 194//187 210//208 -f 190//191 189//188 205//209 -f 204//206 203//210 219//211 -f 199//195 198//207 213//212 -f 210//208 209//205 225//213 -f 205//209 204//206 220//214 -f 200//197 199//195 214//215 -f 206//196 205//209 221//216 -f 201//199 200//197 215//217 -f 207//198 206//196 222//218 -f 202//203 201//199 216//219 -f 197//204 196//200 211//220 -f 208//201 207//198 223//221 -f 203//210 202//203 217//222 -f 198//207 197//204 212//223 -f 209//205 208//201 224//224 -f 223//221 222//218 238//225 -f 218//226 217//222 232//227 -f 213//212 212//223 227//228 -f 224//224 223//221 239//229 -f 219//211 218//226 234//230 -f 214//215 213//212 228//231 -f 225//213 224//224 240//232 -f 220//214 219//211 235//233 -f 215//217 214//215 229//234 -f 221//216 220//214 236//235 -f 216//219 215//217 230//236 -f 222//218 221//216 237//237 -f 217//222 216//219 231//238 -f 212//223 211//220 226//239 -f 237//237 236//235 252//240 -f 232//227 231//238 246//241 -f 227//228 226//239 241//242 -f 238//225 237//237 253//243 -f 233//244 232//227 247//245 -f 228//231 227//228 242//246 -f 239//229 238//225 254//247 -f 234//230 233//244 249//248 -f 229//234 228//231 243//249 -f 240//232 239//229 255//250 -f 235//233 234//230 250//251 -f 230//236 229//234 244//252 -f 236//235 235//233 251//253 -f 231//238 230//236 245//254 -f 251//253 250//251 265//255 -f 246//241 245//254 261//256 -f 252//240 251//253 266//257 -f 247//245 246//241 262//258 -f 242//246 241//242 257//259 -f 253//243 252//240 267//260 -f 248//261 247//245 263//262 -f 243//249 242//246 258//263 -f 254//247 253//243 268//264 -f 249//248 248//261 263//262 -f 244//252 243//249 259//265 -f 255//250 254//247 269//266 -f 250//251 249//248 264//267 -f 245//254 244//252 259//265 -f 259//265 258//263 274//268 -f 270//269 269//266 284//270 -f 265//255 264//267 279//271 -f 260//272 259//265 275//273 -f 266//257 265//255 280//274 -f 261//256 260//272 276//275 -f 267//260 266//257 281//276 -f 262//258 261//256 277//277 -f 257//259 256//278 272//279 -f 268//264 267//260 282//280 -f 263//262 262//258 278//281 -f 258//263 257//259 273//282 -f 269//266 268//264 283//283 -f 264//267 263//262 278//281 -f 278//281 277//277 293//284 -f 273//282 272//279 288//285 -f 284//270 283//283 298//286 -f 279//271 278//281 293//284 -f 274//268 273//282 289//287 -f 285//288 284//270 299//289 -f 280//274 279//271 294//290 -f 275//273 274//268 290//291 -f 281//276 280//274 295//292 -f 276//275 275//273 291//293 -f 282//280 281//276 296//294 -f 277//277 276//275 292//295 -f 272//279 271//296 287//297 -f 283//283 282//280 297//298 -f 297//298 296//294 311//299 -f 292//295 291//293 307//300 -f 287//297 286//301 302//302 -f 298//286 297//298 312//303 -f 293//284 292//295 308//304 -f 288//285 287//297 303//305 -f 299//289 298//286 313//306 -f 294//290 293//284 308//304 -f 289//287 288//285 304//307 -f 300//308 299//289 314//309 -f 295//292 294//290 309//310 -f 290//291 289//287 305//311 -f 296//294 295//292 310//312 -f 291//293 290//291 306//313 -f 311//299 310//312 325//314 -f 306//313 305//311 321//315 -f 312//303 311//299 326//316 -f 307//300 306//313 322//317 -f 302//302 301//318 317//319 -f 313//306 312//303 327//320 -f 308//304 307//300 323//321 -f 303//305 302//302 318//322 -f 314//309 313//306 328//323 -f 309//310 308//304 323//321 -f 304//307 303//305 319//324 -f 315//325 314//309 329//326 -f 310//312 309//310 324//327 -f 305//311 304//307 320//328 -f 319//324 318//322 335//329 -f 330//330 329//326 345//331 -f 325//314 324//327 340//332 -f 320//328 319//324 336//333 -f 326//316 325//314 341//334 -f 321//315 320//328 337//335 -f 327//320 326//316 342//336 -f 322//317 321//315 338//337 -f 317//319 316//338 333//339 -f 328//323 327//320 343//340 -f 323//321 322//317 339//341 -f 318//322 317//319 334//342 -f 329//326 328//323 344//343 -f 324//327 323//321 339//341 -f 339//341 338//337 354//344 -f 334//342 333//339 349//345 -f 345//331 344//343 359//346 -f 340//332 339//341 354//344 -f 335//329 334//342 350//347 -f 346//348 345//331 360//349 -f 341//334 340//332 355//350 -f 336//333 335//329 351//351 -f 342//336 341//334 356//352 -f 337//335 336//333 352//353 -f 343//340 342//336 357//354 -f 338//337 337//335 353//355 -f 333//339 332//356 348//357 -f 344//343 343//340 358//358 -f 358//358 357//354 372//359 -f 353//355 352//353 368//360 -f 348//357 347//361 363//362 -f 359//346 358//358 373//363 -f 354//344 353//355 369//364 -f 349//345 348//357 364//365 -f 360//349 359//346 374//366 -f 355//350 354//344 369//364 -f 350//347 349//345 365//367 -f 361//368 360//349 375//369 -f 356//352 355//350 370//370 -f 351//351 350//347 365//367 -f 357//354 356//352 371//371 -f 352//353 351//351 367//372 -f 372//359 371//371 387//373 -f 367//372 366//374 381//375 -f 373//363 372//359 388//376 -f 368//360 367//372 382//377 -f 363//362 362//378 377//379 -f 374//366 373//363 389//380 -f 369//364 368//360 383//381 -f 364//365 363//362 378//382 -f 375//369 374//366 390//383 -f 370//370 369//364 385//384 -f 365//367 364//365 379//385 -f 376//386 375//369 391//387 -f 371//371 370//370 386//388 -f 366//374 365//367 380//389 -f 391//387 390//383 406//390 -f 386//388 385//384 401//391 -f 381//375 380//389 395//392 -f 387//373 386//388 402//393 -f 382//377 381//375 396//394 -f 388//376 387//373 403//395 -f 383//381 382//377 397//396 -f 378//382 377//379 392//397 -f 389//380 388//376 404//398 -f 384//399 383//381 398//400 -f 379//385 378//382 393//401 -f 390//383 389//380 405//402 -f 385//384 384//399 400//403 -f 380//389 379//385 394//404 -f 394//404 393//401 408//405 -f 405//402 404//398 420//406 -f 400//403 399//407 415//408 -f 395//392 394//404 409//409 -f 406//390 405//402 421//410 -f 401//391 400//403 416//411 -f 396//394 395//392 410//412 -f 402//393 401//391 417//413 -f 397//396 396//394 411//414 -f 403//395 402//393 418//415 -f 398//400 397//396 412//416 -f 393//401 392//397 407//417 -f 404//398 403//395 419//418 -f 399//407 398//400 413//419 -f 413//419 412//416 427//420 -f 408//405 407//417 422//421 -f 419//418 418//415 434//422 -f 414//423 413//419 428//424 -f 409//409 408//405 423//425 -f 420//406 419//418 435//426 -f 415//408 414//423 430//427 -f 410//412 409//409 424//428 -f 421//410 420//406 436//429 -f 416//411 415//408 431//430 -f 411//414 410//412 425//431 -f 417//413 416//411 432//432 -f 412//416 411//414 426//433 -f 418//415 417//413 433//434 -f 432//432 431//430 447//435 -f 427//420 426//433 441//436 -f 433//434 432//432 448//437 -f 428//424 427//420 442//438 -f 423//425 422//421 437//439 -f 434//422 433//434 449//440 -f 429//441 428//424 443//442 -f 424//428 423//425 438//443 -f 435//426 434//422 450//444 -f 430//427 429//441 445//445 -f 425//431 424//428 439//446 -f 436//429 435//426 451//447 -f 431//430 430//427 446//448 -f 426//433 425//431 440//449 -f 451//447 450//444 467//450 -f 446//448 445//445 462//451 -f 441//436 440//449 456//452 -f 447//435 446//448 463//453 -f 442//438 441//436 457//454 -f 448//437 447//435 464//455 -f 443//442 442//438 458//456 -f 438//443 437//439 453//457 -f 449//440 448//437 465//458 -f 444//459 443//442 459//460 -f 439//446 438//443 454//461 -f 450//444 449//440 466//462 -f 445//445 444//459 461//463 -f 440//449 439//446 455//464 -f 455//464 454//461 469//465 -f 466//462 465//458 481//466 -f 461//463 460//467 476//468 -f 456//452 455//464 470//469 -f 467//450 466//462 482//470 -f 462//451 461//463 477//471 -f 457//454 456//452 471//472 -f 463//453 462//451 478//473 -f 458//456 457//454 472//474 -f 464//455 463//453 479//475 -f 459//460 458//456 473//476 -f 454//461 453//457 468//477 -f 465//458 464//455 480//478 -f 460//467 459//460 474//479 -f 331//480 15//10 30//31 -f 1//24 452//481 16//40 -f 331//480 30//31 45//51 -f 16//40 452//481 31//44 -f 331//480 45//51 60//69 -f 31//44 452//481 46//62 -f 46//62 452//481 61//80 -f 331//480 60//69 75//87 -f 331//480 75//87 90//92 -f 61//80 452//481 76//100 -f 331//480 90//92 105//109 -f 76//100 452//481 91//117 -f 331//480 105//109 120//128 -f 91//117 452//481 106//121 -f 106//121 452//481 121//139 -f 331//480 120//128 135//147 -f 331//480 135//147 150//148 -f 121//139 452//481 136//140 -f 331//480 150//148 165//153 -f 136//140 452//481 151//160 -f 331//480 165//153 180//172 -f 151//160 452//481 166//179 -f 166//179 452//481 181//182 -f 331//480 180//172 195//190 -f 331//480 195//190 210//208 -f 181//182 452//481 196//200 -f 331//480 210//208 225//213 -f 196//200 452//481 211//220 -f 331//480 225//213 240//232 -f 211//220 452//481 226//239 -f 331//480 240//232 255//250 -f 226//239 452//481 241//242 -f 331//480 255//250 270//269 -f 241//242 452//481 256//278 -f 331//480 270//269 285//288 -f 256//278 452//481 271//296 -f 331//480 285//288 300//308 -f 271//296 452//481 286//301 -f 331//480 300//308 315//325 -f 286//301 452//481 301//318 -f 331//480 315//325 330//330 -f 301//318 452//481 316//338 -f 331//480 330//330 346//348 -f 316//338 452//481 332//356 -f 331//480 346//348 361//368 -f 332//356 452//481 347//361 -f 331//480 361//368 376//386 -f 347//361 452//481 362//378 -f 331//480 376//386 391//387 -f 362//378 452//481 377//379 -f 331//480 391//387 406//390 -f 377//379 452//481 392//397 -f 331//480 406//390 421//410 -f 392//397 452//481 407//417 -f 331//480 421//410 436//429 -f 407//417 452//481 422//421 -f 422//421 452//481 437//439 -f 331//480 436//429 451//447 -f 331//480 451//447 467//450 -f 437//439 452//481 453//457 -f 331//480 467//450 482//470 -f 453//457 452//481 468//477 -f 474//479 473//476 6//17 -f 469//465 468//477 1//24 -f 480//478 479//475 13//2 -f 475//482 474//479 7//21 -f 470//469 469//465 2//23 -f 481//466 480//478 14//1 -f 476//468 475//482 9//4 -f 471//472 470//469 3//8 -f 482//470 481//466 15//10 -f 477//471 476//468 10//12 -f 472//474 471//472 4//7 -f 331//480 482//470 15//10 -f 478//473 477//471 11//15 -f 473//476 472//474 5//14 -f 468//477 452//481 1//24 -f 479//475 478//473 12//19 -f 29//11 14//1 28//3 -f 24//13 9//4 23//6 -f 3//8 18//27 19//9 -f 30//31 15//10 29//11 -f 25//16 10//12 24//13 -f 20//34 5//14 19//9 -f 26//20 11//15 25//16 -f 5//14 20//34 21//18 -f 27//26 12//19 26//20 -f 6//17 21//18 22//22 -f 1//24 16//40 17//25 -f 28//3 13//2 27//26 -f 7//21 22//22 23//6 -f 2//23 17//25 18//27 -f 44//32 29//11 43//28 -f 39//33 24//13 38//29 -f 18//27 33//43 34//30 -f 45//51 30//31 44//32 -f 40//36 25//16 39//33 -f 19//9 34//30 35//35 -f 41//38 26//20 40//36 -f 20//34 35//35 36//37 -f 42//42 27//26 41//38 -f 21//18 36//37 37//39 -f 16//40 31//44 32//41 -f 43//28 28//3 42//42 -f 22//22 37//39 38//29 -f 17//25 32//41 33//43 -f 31//44 46//62 47//45 -f 58//49 43//28 57//46 -f 37//39 52//58 53//47 -f 32//41 47//45 48//48 -f 59//52 44//32 58//49 -f 54//53 39//33 53//47 -f 33//43 48//48 49//50 -f 60//69 45//51 59//52 -f 55//55 40//36 54//53 -f 34//30 49//50 50//54 -f 56//57 41//38 55//55 -f 35//35 50//54 51//56 -f 57//46 42//42 56//57 -f 36//37 51//56 52//58 -f 50//54 65//72 66//59 -f 72//64 57//46 71//60 -f 51//56 66//59 67//61 -f 46//62 61//80 62//63 -f 73//67 58//49 72//64 -f 52//58 67//61 68//65 -f 47//45 62//63 63//66 -f 74//70 59//52 73//67 -f 69//71 54//53 68//65 -f 48//48 63//66 64//68 -f 75//87 60//69 74//70 -f 70//73 55//55 69//71 -f 49//50 64//68 65//72 -f 71//60 56//57 70//73 -f 85//76 70//73 84//74 -f 64//68 79//86 80//75 -f 86//78 71//60 85//76 -f 65//72 80//75 81//77 -f 87//82 72//64 86//78 -f 66//59 81//77 82//79 -f 61//80 76//100 77//81 -f 88//85 73//67 87//82 -f 67//61 82//79 83//83 -f 62//63 77//81 78//84 -f 89//88 74//70 88//85 -f 84//74 69//71 83//83 -f 63//66 78//84 79//86 -f 90//92 75//87 89//88 -f 104//93 89//88 103//89 -f 99//94 84//74 98//90 -f 78//84 93//103 94//91 -f 105//109 90//92 104//93 -f 100//96 85//76 99//94 -f 79//86 94//91 95//95 -f 101//98 86//78 100//96 -f 80//75 95//95 96//97 -f 102//102 87//82 101//98 -f 81//77 96//97 97//99 -f 76//100 91//117 92//101 -f 103//89 88//85 102//102 -f 82//79 97//99 98//90 -f 77//81 92//101 93//103 -f 118//107 103//89 117//104 -f 97//99 112//116 113//105 -f 92//101 107//118 108//106 -f 119//110 104//93 118//107 -f 114//111 99//94 113//105 -f 93//103 108//106 109//108 -f 120//128 105//109 119//110 -f 115//113 100//96 114//111 -f 94//91 109//108 110//112 -f 116//115 101//98 115//113 -f 95//95 110//112 111//114 -f 117//104 102//102 116//115 -f 96//97 111//114 112//116 -f 91//117 106//121 107//118 -f 132//123 117//104 131//119 -f 111//114 126//133 127//120 -f 106//121 121//139 122//122 -f 133//126 118//107 132//123 -f 112//116 127//120 128//124 -f 107//118 122//122 123//125 -f 134//129 119//110 133//126 -f 129//130 114//111 128//124 -f 108//106 123//125 124//127 -f 135//147 120//128 134//129 -f 130//132 115//113 129//130 -f 109//108 124//127 125//131 -f 131//119 116//115 130//132 -f 110//112 125//131 126//133 -f 140//136 125//131 139//134 -f 130//132 145//149 146//135 -f 141//138 126//133 140//136 -f 131//119 146//135 147//137 -f 142//142 127//120 141//138 -f 137//143 122//122 136//140 -f 132//123 147//137 148//141 -f 143//150 128//124 142//142 -f 138//146 123//125 137//143 -f 133//126 148//141 149//144 -f 128//124 143//150 144//145 -f 139//134 124//127 138//146 -f 134//129 149//144 150//148 -f 129//130 144//145 145//149 -f 143//150 158//166 159//151 -f 154//155 139//134 153//152 -f 149//144 164//164 165//153 -f 144//145 159//151 160//154 -f 155//157 140//136 154//155 -f 145//149 160//154 161//156 -f 156//159 141//138 155//157 -f 146//135 161//156 162//158 -f 157//162 142//142 156//159 -f 152//163 137//143 151//160 -f 147//137 162//158 163//161 -f 158//166 143//150 157//162 -f 153//152 138//146 152//163 -f 148//141 163//161 164//164 -f 162//158 177//177 178//165 -f 173//184 158//166 172//167 -f 168//171 153//152 167//168 -f 163//161 178//165 179//169 -f 158//166 173//184 174//170 -f 169//174 154//155 168//171 -f 164//164 179//169 180//172 -f 159//151 174//170 175//173 -f 170//176 155//157 169//174 -f 160//154 175//173 176//175 -f 171//178 156//159 170//176 -f 161//156 176//175 177//177 -f 172//167 157//162 171//178 -f 167//168 152//163 166//179 -f 176//175 191//193 192//180 -f 187//185 172//167 186//181 -f 182//186 167//168 181//182 -f 177//177 192//180 193//183 -f 188//202 173//184 187//185 -f 183//189 168//171 182//186 -f 178//165 193//183 194//187 -f 173//184 188//202 189//188 -f 184//192 169//174 183//189 -f 179//169 194//187 195//190 -f 174//170 189//188 190//191 -f 185//194 170//176 184//192 -f 175//173 190//191 191//193 -f 186//181 171//178 185//194 -f 200//197 185//194 199//195 -f 190//191 205//209 206//196 -f 201//199 186//181 200//197 -f 191//193 206//196 207//198 -f 202//203 187//185 201//199 -f 197//204 182//186 196//200 -f 192//180 207//198 208//201 -f 203//210 188//202 202//203 -f 198//207 183//189 197//204 -f 193//183 208//201 209//205 -f 188//202 203//210 204//206 -f 199//195 184//192 198//207 -f 194//187 209//205 210//208 -f 189//188 204//206 205//209 -f 203//210 218//226 219//211 -f 214//215 199//195 213//212 -f 209//205 224//224 225//213 -f 204//206 219//211 220//214 -f 215//217 200//197 214//215 -f 205//209 220//214 221//216 -f 216//219 201//199 215//217 -f 206//196 221//216 222//218 -f 217//222 202//203 216//219 -f 212//223 197//204 211//220 -f 207//198 222//218 223//221 -f 218//226 203//210 217//222 -f 213//212 198//207 212//223 -f 208//201 223//221 224//224 -f 222//218 237//237 238//225 -f 233//244 218//226 232//227 -f 228//231 213//212 227//228 -f 223//221 238//225 239//229 -f 218//226 233//244 234//230 -f 229//234 214//215 228//231 -f 224//224 239//229 240//232 -f 219//211 234//230 235//233 -f 230//236 215//217 229//234 -f 220//214 235//233 236//235 -f 231//238 216//219 230//236 -f 221//216 236//235 237//237 -f 232//227 217//222 231//238 -f 227//228 212//223 226//239 -f 236//235 251//253 252//240 -f 247//245 232//227 246//241 -f 242//246 227//228 241//242 -f 237//237 252//240 253//243 -f 248//261 233//244 247//245 -f 243//249 228//231 242//246 -f 238//225 253//243 254//247 -f 233//244 248//261 249//248 -f 244//252 229//234 243//249 -f 239//229 254//247 255//250 -f 234//230 249//248 250//251 -f 245//254 230//236 244//252 -f 235//233 250//251 251//253 -f 246//241 231//238 245//254 -f 266//257 251//253 265//255 -f 245//254 260//272 261//256 -f 267//260 252//240 266//257 -f 246//241 261//256 262//258 -f 241//242 256//278 257//259 -f 268//264 253//243 267//260 -f 247//245 262//258 263//262 -f 242//246 257//259 258//263 -f 269//266 254//247 268//264 -f 264//267 249//248 263//262 -f 243//249 258//263 259//265 -f 270//269 255//250 269//266 -f 265//255 250//251 264//267 -f 260//272 245//254 259//265 -f 258//263 273//282 274//268 -f 285//288 270//269 284//270 -f 280//274 265//255 279//271 -f 259//265 274//268 275//273 -f 281//276 266//257 280//274 -f 260//272 275//273 276//275 -f 282//280 267//260 281//276 -f 261//256 276//275 277//277 -f 256//278 271//296 272//279 -f 283//283 268//264 282//280 -f 262//258 277//277 278//281 -f 257//259 272//279 273//282 -f 284//270 269//266 283//283 -f 279//271 264//267 278//281 -f 277//277 292//295 293//284 -f 272//279 287//297 288//285 -f 299//289 284//270 298//286 -f 294//290 279//271 293//284 -f 273//282 288//285 289//287 -f 300//308 285//288 299//289 -f 295//292 280//274 294//290 -f 274//268 289//287 290//291 -f 296//294 281//276 295//292 -f 275//273 290//291 291//293 -f 297//298 282//280 296//294 -f 276//275 291//293 292//295 -f 271//296 286//301 287//297 -f 298//286 283//283 297//298 -f 312//303 297//298 311//299 -f 291//293 306//313 307//300 -f 286//301 301//318 302//302 -f 313//306 298//286 312//303 -f 292//295 307//300 308//304 -f 287//297 302//302 303//305 -f 314//309 299//289 313//306 -f 309//310 294//290 308//304 -f 288//285 303//305 304//307 -f 315//325 300//308 314//309 -f 310//312 295//292 309//310 -f 289//287 304//307 305//311 -f 311//299 296//294 310//312 -f 290//291 305//311 306//313 -f 326//316 311//299 325//314 -f 305//311 320//328 321//315 -f 327//320 312//303 326//316 -f 306//313 321//315 322//317 -f 301//318 316//338 317//319 -f 328//323 313//306 327//320 -f 307//300 322//317 323//321 -f 302//302 317//319 318//322 -f 329//326 314//309 328//323 -f 324//327 309//310 323//321 -f 303//305 318//322 319//324 -f 330//330 315//325 329//326 -f 325//314 310//312 324//327 -f 304//307 319//324 320//328 -f 318//322 334//342 335//329 -f 346//348 330//330 345//331 -f 341//334 325//314 340//332 -f 319//324 335//329 336//333 -f 342//336 326//316 341//334 -f 320//328 336//333 337//335 -f 343//340 327//320 342//336 -f 321//315 337//335 338//337 -f 316//338 332//356 333//339 -f 344//343 328//323 343//340 -f 322//317 338//337 339//341 -f 317//319 333//339 334//342 -f 345//331 329//326 344//343 -f 340//332 324//327 339//341 -f 338//337 353//355 354//344 -f 333//339 348//357 349//345 -f 360//349 345//331 359//346 -f 355//350 340//332 354//344 -f 334//342 349//345 350//347 -f 361//368 346//348 360//349 -f 356//352 341//334 355//350 -f 335//329 350//347 351//351 -f 357//354 342//336 356//352 -f 336//333 351//351 352//353 -f 358//358 343//340 357//354 -f 337//335 352//353 353//355 -f 332//356 347//361 348//357 -f 359//346 344//343 358//358 -f 373//363 358//358 372//359 -f 352//353 367//372 368//360 -f 347//361 362//378 363//362 -f 374//366 359//346 373//363 -f 353//355 368//360 369//364 -f 348//357 363//362 364//365 -f 375//369 360//349 374//366 -f 370//370 355//350 369//364 -f 349//345 364//365 365//367 -f 376//386 361//368 375//369 -f 371//371 356//352 370//370 -f 366//374 351//351 365//367 -f 372//359 357//354 371//371 -f 351//351 366//374 367//372 -f 371//371 386//388 387//373 -f 382//377 367//372 381//375 -f 372//359 387//373 388//376 -f 383//381 368//360 382//377 -f 378//382 363//362 377//379 -f 373//363 388//376 389//380 -f 384//399 369//364 383//381 -f 379//385 364//365 378//382 -f 374//366 389//380 390//383 -f 369//364 384//399 385//384 -f 380//389 365//367 379//385 -f 375//369 390//383 391//387 -f 370//370 385//384 386//388 -f 381//375 366//374 380//389 -f 390//383 405//402 406//390 -f 385//384 400//403 401//391 -f 396//394 381//375 395//392 -f 386//388 401//391 402//393 -f 397//396 382//377 396//394 -f 387//373 402//393 403//395 -f 398//400 383//381 397//396 -f 393//401 378//382 392//397 -f 388//376 403//395 404//398 -f 399//407 384//399 398//400 -f 394//404 379//385 393//401 -f 389//380 404//398 405//402 -f 384//399 399//407 400//403 -f 395//392 380//389 394//404 -f 409//409 394//404 408//405 -f 404//398 419//418 420//406 -f 399//407 414//423 415//408 -f 410//412 395//392 409//409 -f 405//402 420//406 421//410 -f 400//403 415//408 416//411 -f 411//414 396//394 410//412 -f 401//391 416//411 417//413 -f 412//416 397//396 411//414 -f 402//393 417//413 418//415 -f 413//419 398//400 412//416 -f 408//405 393//401 407//417 -f 403//395 418//415 419//418 -f 414//423 399//407 413//419 -f 428//424 413//419 427//420 -f 423//425 408//405 422//421 -f 418//415 433//434 434//422 -f 429//441 414//423 428//424 -f 424//428 409//409 423//425 -f 419//418 434//422 435//426 -f 414//423 429//441 430//427 -f 425//431 410//412 424//428 -f 420//406 435//426 436//429 -f 415//408 430//427 431//430 -f 426//433 411//414 425//431 -f 416//411 431//430 432//432 -f 427//420 412//416 426//433 -f 417//413 432//432 433//434 -f 431//430 446//448 447//435 -f 442//438 427//420 441//436 -f 432//432 447//435 448//437 -f 443//442 428//424 442//438 -f 438//443 423//425 437//439 -f 433//434 448//437 449//440 -f 444//459 429//441 443//442 -f 439//446 424//428 438//443 -f 434//422 449//440 450//444 -f 429//441 444//459 445//445 -f 440//449 425//431 439//446 -f 435//426 450//444 451//447 -f 430//427 445//445 446//448 -f 441//436 426//433 440//449 -f 450//444 466//462 467//450 -f 445//445 461//463 462//451 -f 457//454 441//436 456//452 -f 446//448 462//451 463//453 -f 458//456 442//438 457//454 -f 447//435 463//453 464//455 -f 459//460 443//442 458//456 -f 454//461 438//443 453//457 -f 448//437 464//455 465//458 -f 460//467 444//459 459//460 -f 455//464 439//446 454//461 -f 449//440 465//458 466//462 -f 444//459 460//467 461//463 -f 456//452 440//449 455//464 -f 470//469 455//464 469//465 -f 465//458 480//478 481//466 -f 460//467 475//482 476//468 -f 471//472 456//452 470//469 -f 466//462 481//466 482//470 -f 461//463 476//468 477//471 -f 472//474 457//454 471//472 -f 462//451 477//471 478//473 -f 473//476 458//456 472//474 -f 463//453 478//473 479//475 -f 474//479 459//460 473//476 -f 469//465 454//461 468//477 -f 464//455 479//475 480//478 -f 475//482 460//467 474//479 -f 7//21 474//479 6//17 -f 2//23 469//465 1//24 -f 479//475 12//19 13//2 -f 8//5 475//482 7//21 -f 3//8 470//469 2//23 -f 480//478 13//2 14//1 -f 475//482 8//5 9//4 -f 4//7 471//472 3//8 -f 481//466 14//1 15//10 -f 476//468 9//4 10//12 -f 5//14 472//474 4//7 -f 477//471 10//12 11//15 -f 6//17 473//476 5//14 -f 478//473 11//15 12//19 -o Foot_R.001_Sphere.014 -v 1.075241 0.496383 0.547398 -v 1.072531 0.479456 0.520507 -v 1.071806 0.464152 0.495335 -v 1.073094 0.451061 0.472848 -v 1.076347 0.440684 0.453912 -v 1.081437 0.433421 0.439254 -v 1.088171 0.429551 0.429436 -v 1.096290 0.429222 0.424838 -v 1.105480 0.432448 0.425634 -v 1.115390 0.439104 0.431795 -v 1.125638 0.448934 0.443084 -v 1.135830 0.461562 0.459067 -v 1.145576 0.476500 0.479129 -v 1.154499 0.493176 0.502500 -v 1.162258 0.510949 0.528282 -v 1.075570 0.500339 0.546759 -v 1.073176 0.487215 0.519253 -v 1.072743 0.475417 0.493515 -v 1.074287 0.465397 0.470532 -v 1.077749 0.457542 0.451188 -v 1.082996 0.452153 0.436227 -v 1.089826 0.449436 0.426224 -v 1.097976 0.449498 0.421562 -v 1.107134 0.452334 0.422421 -v 1.116948 0.457836 0.428768 -v 1.127040 0.465793 0.440360 -v 1.137023 0.475899 0.456750 -v 1.146513 0.487765 0.477309 -v 1.155145 0.500935 0.501247 -v 1.162587 0.514904 0.527643 -v 1.076095 0.504836 0.547197 -v 1.074207 0.496036 0.520113 -v 1.074240 0.488223 0.494762 -v 1.076192 0.481697 0.472119 -v 1.079989 0.476708 0.453055 -v 1.085485 0.473449 0.438301 -v 1.092468 0.472044 0.428425 -v 1.100670 0.472548 0.423807 -v 1.109777 0.474941 0.424623 -v 1.119437 0.479132 0.430843 -v 1.129280 0.484959 0.442227 -v 1.138928 0.492198 0.458338 -v 1.148009 0.500571 0.478557 -v 1.156176 0.509757 0.502106 -v 1.163113 0.519401 0.528081 -v 1.076797 0.509701 0.548695 -v 1.075584 0.505580 0.523052 -v 1.076239 0.502079 0.499029 -v 1.078736 0.499332 0.477550 -v 1.082981 0.497444 0.459441 -v 1.088809 0.496490 0.445397 -v 1.095997 0.496504 0.435958 -v 1.104268 0.497488 0.431487 -v 1.113306 0.499402 0.432155 -v 1.122761 0.502173 0.437938 -v 1.132272 0.505695 0.448612 -v 1.141472 0.509833 0.463768 -v 1.150008 0.514427 0.482823 -v 1.157552 0.519301 0.505045 -v 1.163815 0.524267 0.529580 -v 1.077649 0.514748 0.551196 -v 1.077254 0.515480 0.527957 -v 1.078663 0.516451 0.506151 -v 1.081822 0.517625 0.486615 -v 1.086609 0.518955 0.470100 -v 1.092840 0.520391 0.457240 -v 1.100277 0.521878 0.448531 -v 1.108632 0.523358 0.444306 -v 1.117585 0.524775 0.444729 -v 1.126793 0.526074 0.449782 -v 1.135900 0.527206 0.459271 -v 1.144558 0.528126 0.472833 -v 1.152433 0.528800 0.489945 -v 1.159222 0.529201 0.509951 -v 1.164666 0.529314 0.532081 -v 1.078617 0.519783 0.554604 -v 1.079153 0.525356 0.534642 -v 1.081419 0.530789 0.515855 -v 1.085330 0.535873 0.498965 -v 1.090734 0.540413 0.484623 -v 1.097424 0.544234 0.473377 -v 1.105143 0.547189 0.465662 -v 1.113594 0.549165 0.461773 -v 1.122452 0.550086 0.461860 -v 1.131377 0.549917 0.465919 -v 1.140026 0.548664 0.473794 -v 1.148066 0.546374 0.485184 -v 1.155189 0.543137 0.499649 -v 1.161121 0.539077 0.516635 -v 1.165634 0.534349 0.535488 -v 1.079664 0.524612 0.558787 -v 1.081207 0.534828 0.542847 -v 1.084402 0.544541 0.527767 -v 1.089127 0.553375 0.514127 -v 1.095199 0.560993 0.502451 -v 1.102385 0.567102 0.493187 -v 1.110409 0.571466 0.486692 -v 1.118963 0.573917 0.483215 -v 1.127718 0.574363 0.482890 -v 1.136337 0.572785 0.485729 -v 1.144490 0.569244 0.491623 -v 1.151863 0.563877 0.500346 -v 1.158172 0.556889 0.511562 -v 1.163176 0.548549 0.524841 -v 1.166681 0.539178 0.539671 -v 1.080751 0.529050 0.563585 -v 1.083339 0.543533 0.552259 -v 1.087497 0.557178 0.541431 -v 1.093065 0.569459 0.531518 -v 1.099830 0.579906 0.522900 -v 1.107531 0.588116 0.515909 -v 1.115872 0.593774 0.510814 -v 1.124533 0.596663 0.507809 -v 1.133181 0.596672 0.507011 -v 1.141483 0.593799 0.508451 -v 1.149121 0.588157 0.512072 -v 1.155801 0.579960 0.517736 -v 1.161267 0.569526 0.525226 -v 1.165307 0.557253 0.534252 -v 1.167768 0.543615 0.544469 -v 1.081835 0.532925 0.568814 -v 1.085465 0.551135 0.562515 -v 1.090584 0.568214 0.556321 -v 1.096995 0.583506 0.550469 -v 1.104450 0.596423 0.545184 -v 1.112665 0.606469 0.540670 -v 1.121322 0.613258 0.537100 -v 1.130090 0.616529 0.534610 -v 1.138631 0.616155 0.533297 -v 1.146617 0.612152 0.533212 -v 1.153742 0.604674 0.534356 -v 1.159731 0.594007 0.536687 -v 1.164354 0.580562 0.540115 -v 1.167434 0.564855 0.544509 -v 1.168852 0.547491 0.549698 -v 1.082875 0.536090 0.574272 -v 1.087505 0.557343 0.573222 -v 1.093546 0.577226 0.571864 -v 1.100764 0.594976 0.570252 -v 1.108882 0.609911 0.568447 -v 1.117589 0.621456 0.566518 -v 1.126550 0.629168 0.564539 -v 1.135420 0.632750 0.562587 -v 1.143859 0.632065 0.560737 -v 1.151542 0.627139 0.559059 -v 1.158174 0.618162 0.557619 -v 1.163500 0.605478 0.556470 -v 1.167315 0.589574 0.555659 -v 1.169474 0.571063 0.555215 -v 1.169892 0.550655 0.555156 -v 1.083830 0.538422 0.579750 -v 1.089380 0.561917 0.583967 -v 1.096267 0.583868 0.587464 -v 1.104228 0.603429 0.590107 -v 1.112956 0.619851 0.591794 -v 1.122115 0.632500 0.592459 -v 1.131355 0.640892 0.592079 -v 1.140319 0.644704 0.590666 -v 1.148664 0.643789 0.588276 -v 1.156068 0.638183 0.585001 -v 1.162247 0.628101 0.580965 -v 1.166964 0.613930 0.576325 -v 1.170037 0.596216 0.571259 -v 1.171348 0.575638 0.565960 -v 1.170848 0.552987 0.560634 -v 1.084665 0.539832 0.585037 -v 1.091017 0.564683 0.594338 -v 1.098645 0.587883 0.602521 -v 1.107254 0.608540 0.609270 -v 1.116514 0.625860 0.614328 -v 1.126069 0.639178 0.617498 -v 1.135552 0.647981 0.618659 -v 1.144598 0.651932 0.617768 -v 1.152861 0.650878 0.614857 -v 1.160021 0.644861 0.610039 -v 1.165805 0.634111 0.603499 -v 1.169990 0.619041 0.595489 -v 1.172414 0.600231 0.586315 -v 1.172986 0.578404 0.576332 -v 1.171683 0.554397 0.565921 -v 1.085347 0.540266 0.589930 -v 1.092355 0.565534 0.603937 -v 1.100587 0.589118 0.616456 -v 1.109725 0.610112 0.627006 -v 1.119420 0.627709 0.635183 -v 1.129298 0.641232 0.640671 -v 1.138980 0.650162 0.643260 -v 1.148093 0.654155 0.642850 -v 1.156289 0.653059 0.639457 -v 1.163250 0.646915 0.633212 -v 1.168711 0.635959 0.624355 -v 1.172461 0.620613 0.613225 -v 1.174356 0.601466 0.600250 -v 1.174324 0.579255 0.585930 -v 1.172364 0.554831 0.570815 -v 1.085850 0.539706 0.594242 -v 1.093341 0.564437 0.612394 -v 1.102018 0.587526 0.628734 -v 1.111547 0.608085 0.642633 -v 1.121562 0.625325 0.653558 -v 1.131678 0.638583 0.661088 -v 1.141507 0.647350 0.664935 -v 1.150670 0.651289 0.664950 -v 1.158816 0.650247 0.661132 -v 1.165631 0.644267 0.653629 -v 1.170853 0.633576 0.642730 -v 1.174283 0.618586 0.628851 -v 1.175788 0.599874 0.612528 -v 1.175310 0.578158 0.594387 -v 1.172867 0.554272 0.575126 -v 1.086154 0.538176 0.597805 -v 1.093938 0.561435 0.619385 -v 1.102884 0.583167 0.638882 -v 1.112649 0.602537 0.655550 -v 1.122858 0.618801 0.668746 -v 1.133119 0.631334 0.677965 -v 1.143036 0.639655 0.682851 -v 1.152229 0.643442 0.683217 -v 1.160345 0.642552 0.679048 -v 1.167071 0.637018 0.670506 -v 1.172150 0.627052 0.657918 -v 1.175385 0.613038 0.641768 -v 1.176654 0.595515 0.622677 -v 1.175906 0.575155 0.601378 -v 1.173171 0.552741 0.578690 -v 1.086248 0.535732 0.600485 -v 1.094122 0.556642 0.624640 -v 1.103152 0.576209 0.646512 -v 1.112990 0.593681 0.665261 -v 1.123259 0.608388 0.680165 -v 1.133564 0.619763 0.690652 -v 1.143508 0.627371 0.696320 -v 1.152711 0.630918 0.696950 -v 1.160817 0.630268 0.692518 -v 1.167516 0.625447 0.683194 -v 1.172550 0.616639 0.669337 -v 1.175726 0.604182 0.651479 -v 1.176921 0.588557 0.630307 -v 1.176091 0.570362 0.606633 -v 1.173265 0.550298 0.581369 -v 1.086128 0.532470 0.602176 -v 1.093887 0.550243 0.627958 -v 1.102811 0.566919 0.651329 -v 1.112556 0.581857 0.671392 -v 1.122748 0.594485 0.687375 -v 1.132996 0.604315 0.698664 -v 1.142906 0.610971 0.704824 -v 1.152097 0.614197 0.705621 -v 1.160215 0.613869 0.701022 -v 1.166949 0.609998 0.691205 -v 1.172040 0.602735 0.676547 -v 1.175292 0.592359 0.657610 -v 1.176580 0.579267 0.635124 -v 1.175856 0.563963 0.609952 -v 1.173145 0.547036 0.583061 -v 1.085799 0.528515 0.602815 -v 1.093242 0.542484 0.629212 -v 1.101874 0.555654 0.653149 -v 1.111363 0.567521 0.673708 -v 1.121346 0.577626 0.690099 -v 1.131438 0.585583 0.701690 -v 1.141252 0.591085 0.708037 -v 1.150410 0.593922 0.708897 -v 1.158561 0.593983 0.704235 -v 1.165390 0.591266 0.694232 -v 1.170637 0.585877 0.679270 -v 1.174099 0.578022 0.659927 -v 1.175643 0.568003 0.636944 -v 1.175210 0.556204 0.611205 -v 1.172816 0.543080 0.583700 -v 1.085274 0.524018 0.602377 -v 1.092211 0.533663 0.628353 -v 1.100377 0.542848 0.651902 -v 1.109458 0.551222 0.672121 -v 1.119106 0.558461 0.688232 -v 1.128949 0.564287 0.699616 -v 1.138610 0.568478 0.705836 -v 1.147716 0.570871 0.706652 -v 1.155918 0.571375 0.702033 -v 1.162902 0.569971 0.692157 -v 1.168397 0.566711 0.677404 -v 1.172194 0.561723 0.658339 -v 1.174147 0.555196 0.635697 -v 1.174179 0.547383 0.610346 -v 1.172291 0.538583 0.583262 -v 1.084572 0.519152 0.600879 -v 1.090834 0.524119 0.625414 -v 1.098378 0.528993 0.647635 -v 1.106914 0.533587 0.666690 -v 1.116114 0.537724 0.681846 -v 1.125625 0.541246 0.692521 -v 1.135081 0.544017 0.698303 -v 1.144118 0.545932 0.698972 -v 1.152390 0.546915 0.694501 -v 1.159577 0.546929 0.685062 -v 1.165406 0.545975 0.671018 -v 1.169650 0.544088 0.652909 -v 1.172148 0.541341 0.631430 -v 1.172802 0.537839 0.607407 -v 1.171589 0.533718 0.581763 -v 1.083720 0.514105 0.598378 -v 1.089164 0.514219 0.620508 -v 1.095954 0.514620 0.640513 -v 1.103829 0.515293 0.657626 -v 1.112486 0.516214 0.671187 -v 1.121593 0.517345 0.680677 -v 1.130801 0.518644 0.685730 -v 1.139754 0.520061 0.686152 -v 1.148110 0.521541 0.681928 -v 1.155546 0.523028 0.673218 -v 1.161777 0.524464 0.660359 -v 1.166564 0.525795 0.643844 -v 1.169723 0.526968 0.624308 -v 1.171132 0.527939 0.602501 -v 1.170738 0.528671 0.579262 -v 1.082752 0.509071 0.594971 -v 1.087265 0.504343 0.613824 -v 1.093197 0.500282 0.630809 -v 1.100320 0.497045 0.645275 -v 1.108361 0.494756 0.656664 -v 1.117010 0.493502 0.664540 -v 1.125934 0.493333 0.668599 -v 1.134793 0.494254 0.668686 -v 1.143243 0.496230 0.664797 -v 1.150962 0.499185 0.657081 -v 1.157652 0.503006 0.645836 -v 1.163056 0.507546 0.631493 -v 1.166967 0.512630 0.614604 -v 1.169234 0.518063 0.595817 -v 1.169770 0.523636 0.575855 -v 1.168554 0.529135 0.555484 -v 1.081705 0.504242 0.590787 -v 1.085210 0.494870 0.605618 -v 1.090214 0.486531 0.618897 -v 1.096524 0.479543 0.630113 -v 1.103896 0.474175 0.638836 -v 1.112049 0.470634 0.644730 -v 1.120669 0.469056 0.647569 -v 1.129423 0.469502 0.647243 -v 1.137977 0.471954 0.643766 -v 1.146002 0.476318 0.637271 -v 1.153188 0.482426 0.628007 -v 1.159260 0.490044 0.616331 -v 1.163984 0.498879 0.602691 -v 1.167179 0.508591 0.587611 -v 1.168722 0.518807 0.571672 -v 1.080618 0.499804 0.585989 -v 1.083079 0.486166 0.596206 -v 1.087120 0.473894 0.605233 -v 1.092585 0.463459 0.612722 -v 1.099265 0.455263 0.618386 -v 1.106903 0.449620 0.622008 -v 1.115206 0.446748 0.623447 -v 1.123853 0.446756 0.622649 -v 1.132514 0.449645 0.619645 -v 1.140856 0.455303 0.614549 -v 1.148556 0.463513 0.607558 -v 1.155321 0.473960 0.598941 -v 1.160889 0.486242 0.589027 -v 1.165047 0.499886 0.578200 -v 1.167636 0.514370 0.566874 -v 1.079534 0.495929 0.580761 -v 1.080952 0.478564 0.585950 -v 1.084032 0.462857 0.590343 -v 1.088656 0.449412 0.593771 -v 1.094645 0.438745 0.596102 -v 1.101769 0.431267 0.597247 -v 1.109755 0.427264 0.597161 -v 1.118297 0.426891 0.595849 -v 1.127064 0.430161 0.593359 -v 1.135722 0.436950 0.589789 -v 1.143936 0.446996 0.585274 -v 1.151392 0.459913 0.579990 -v 1.157802 0.475205 0.574138 -v 1.162921 0.492284 0.567944 -v 1.166551 0.510494 0.561645 -v 1.078494 0.492764 0.575303 -v 1.078912 0.472356 0.575244 -v 1.081071 0.453845 0.574800 -v 1.084886 0.437942 0.573988 -v 1.090213 0.425258 0.572840 -v 1.096845 0.416280 0.571399 -v 1.104527 0.411354 0.569722 -v 1.112966 0.410669 0.567871 -v 1.121836 0.414252 0.565919 -v 1.130797 0.421963 0.563941 -v 1.139504 0.433508 0.562012 -v 1.147622 0.448443 0.560207 -v 1.154841 0.466193 0.558594 -v 1.160881 0.486077 0.557237 -v 1.165511 0.507330 0.556187 -v 1.077538 0.490432 0.569825 -v 1.077038 0.467781 0.564498 -v 1.078349 0.447204 0.559200 -v 1.081422 0.429489 0.554133 -v 1.086139 0.415318 0.549493 -v 1.092318 0.405236 0.545458 -v 1.099723 0.399630 0.542182 -v 1.108067 0.398715 0.539792 -v 1.117031 0.402527 0.538380 -v 1.126271 0.410919 0.537999 -v 1.135431 0.423569 0.538665 -v 1.144158 0.439990 0.540352 -v 1.152119 0.459552 0.542995 -v 1.159006 0.481502 0.546492 -v 1.164556 0.504997 0.550709 -v 1.076704 0.489022 0.564537 -v 1.075400 0.465016 0.554127 -v 1.075972 0.443188 0.544143 -v 1.078396 0.424378 0.534970 -v 1.082581 0.409308 0.526959 -v 1.088365 0.398558 0.520419 -v 1.095526 0.392541 0.515602 -v 1.103788 0.391487 0.512691 -v 1.112834 0.395438 0.511799 -v 1.122317 0.404242 0.512961 -v 1.131873 0.417559 0.516131 -v 1.141132 0.434879 0.521188 -v 1.149742 0.455536 0.527938 -v 1.157369 0.478736 0.536121 -v 1.163721 0.503587 0.545422 -v 1.076022 0.488588 0.559644 -v 1.074063 0.464165 0.544528 -v 1.074030 0.441953 0.530208 -v 1.075925 0.422806 0.517234 -v 1.079675 0.407460 0.506104 -v 1.085136 0.396504 0.497246 -v 1.092098 0.390360 0.491001 -v 1.100293 0.389264 0.487609 -v 1.109407 0.393258 0.487199 -v 1.119088 0.402188 0.489788 -v 1.128966 0.415711 0.495276 -v 1.138661 0.433307 0.503452 -v 1.147800 0.454301 0.514003 -v 1.156031 0.477885 0.526522 -v 1.163039 0.503154 0.540528 -v 1.075519 0.489147 0.555333 -v 1.073077 0.465262 0.536071 -v 1.072599 0.443545 0.517931 -v 1.074103 0.424833 0.501607 -v 1.077533 0.409843 0.487729 -v 1.082756 0.399153 0.476829 -v 1.089571 0.393172 0.469326 -v 1.097716 0.392131 0.465509 -v 1.106879 0.396069 0.465524 -v 1.116708 0.404836 0.469371 -v 1.126824 0.418094 0.476901 -v 1.136839 0.435334 0.487826 -v 1.146368 0.455893 0.501725 -v 1.155045 0.478982 0.518065 -v 1.162536 0.503713 0.536217 -v 1.079832 0.514284 0.574974 -v 1.075215 0.490678 0.551769 -v 1.072480 0.468264 0.529081 -v 1.071732 0.447905 0.507782 -v 1.073001 0.430381 0.488690 -v 1.076236 0.416367 0.472540 -v 1.081315 0.406402 0.459953 -v 1.088042 0.400867 0.451410 -v 1.096157 0.399977 0.447242 -v 1.105350 0.403765 0.447608 -v 1.115268 0.412085 0.452494 -v 1.125528 0.424618 0.461712 -v 1.135737 0.440882 0.474909 -v 1.145502 0.460253 0.491576 -v 1.154449 0.481985 0.511074 -v 1.162232 0.505244 0.532653 -v 1.075121 0.493121 0.549090 -v 1.072296 0.473057 0.523825 -v 1.071465 0.454863 0.500152 -v 1.072660 0.439237 0.478980 -v 1.075836 0.426781 0.461122 -v 1.080870 0.417973 0.447265 -v 1.087569 0.413151 0.437941 -v 1.095675 0.412501 0.433509 -v 1.104878 0.416048 0.434139 -v 1.114823 0.423656 0.439806 -v 1.125127 0.435031 0.450294 -v 1.135396 0.449738 0.465198 -v 1.145234 0.467211 0.483947 -v 1.154264 0.486778 0.505819 -v 1.162138 0.507687 0.529974 -v 1.070255 0.396948 0.582602 -v 1.067545 0.380021 0.555711 -v 1.066820 0.364717 0.530538 -v 1.068109 0.351625 0.508052 -v 1.071361 0.341249 0.489116 -v 1.076452 0.333986 0.474457 -v 1.083186 0.330116 0.464640 -v 1.091304 0.329787 0.460041 -v 1.100495 0.333013 0.460838 -v 1.110404 0.339669 0.466999 -v 1.120652 0.349499 0.478287 -v 1.130845 0.362126 0.494270 -v 1.140590 0.377065 0.514333 -v 1.149514 0.393741 0.537704 -v 1.157272 0.411514 0.563486 -v 1.070584 0.400904 0.581962 -v 1.068190 0.387780 0.554457 -v 1.067757 0.375982 0.528718 -v 1.069301 0.365962 0.505735 -v 1.072763 0.358107 0.486392 -v 1.078010 0.352718 0.471431 -v 1.084840 0.350001 0.461427 -v 1.092991 0.350062 0.456765 -v 1.102149 0.352899 0.457625 -v 1.111962 0.358401 0.463972 -v 1.122055 0.366358 0.475564 -v 1.132037 0.376463 0.491954 -v 1.141527 0.388330 0.512513 -v 1.150159 0.401500 0.536450 -v 1.157601 0.415469 0.562847 -v 1.071110 0.405401 0.582401 -v 1.069221 0.396601 0.555316 -v 1.069254 0.388788 0.529966 -v 1.071206 0.382261 0.507323 -v 1.075003 0.377273 0.488258 -v 1.080499 0.374013 0.473505 -v 1.087482 0.372609 0.463629 -v 1.095685 0.373113 0.459010 -v 1.104791 0.375506 0.459827 -v 1.114451 0.379697 0.466046 -v 1.124295 0.385523 0.477430 -v 1.133942 0.392762 0.493541 -v 1.143024 0.401136 0.513760 -v 1.151190 0.410321 0.537310 -v 1.158127 0.419966 0.563285 -v 1.071812 0.410266 0.583899 -v 1.070598 0.406145 0.558255 -v 1.071253 0.402643 0.534232 -v 1.073750 0.399896 0.512753 -v 1.077995 0.398009 0.494644 -v 1.083823 0.397055 0.480600 -v 1.091011 0.397069 0.471161 -v 1.099283 0.398053 0.466690 -v 1.108320 0.399967 0.467359 -v 1.117776 0.402738 0.473142 -v 1.127286 0.406260 0.483816 -v 1.136486 0.410397 0.498972 -v 1.145023 0.414991 0.518027 -v 1.152567 0.419865 0.540249 -v 1.158829 0.424832 0.564783 -v 1.072663 0.415313 0.586400 -v 1.072268 0.416045 0.563161 -v 1.073677 0.417016 0.541354 -v 1.076836 0.418190 0.521818 -v 1.081623 0.419520 0.505303 -v 1.087855 0.420956 0.492444 -v 1.095291 0.422443 0.483735 -v 1.103646 0.423923 0.479510 -v 1.112600 0.425340 0.479932 -v 1.121807 0.426639 0.484985 -v 1.130914 0.427771 0.494475 -v 1.139572 0.428691 0.508037 -v 1.147447 0.429364 0.525149 -v 1.154237 0.429766 0.545154 -v 1.159680 0.429879 0.567284 -v 1.073631 0.420348 0.589807 -v 1.074167 0.425921 0.569845 -v 1.076434 0.431354 0.551058 -v 1.080345 0.436438 0.534169 -v 1.085749 0.440978 0.519826 -v 1.092439 0.444799 0.508581 -v 1.100157 0.447754 0.500866 -v 1.108608 0.449730 0.496976 -v 1.117466 0.450651 0.497063 -v 1.126391 0.450482 0.501122 -v 1.135040 0.449228 0.508998 -v 1.143080 0.446939 0.520387 -v 1.150204 0.443702 0.534853 -v 1.156135 0.439642 0.551839 -v 1.160648 0.434914 0.570692 -v 1.074678 0.425177 0.593991 -v 1.076222 0.435393 0.578051 -v 1.079417 0.445106 0.562971 -v 1.084141 0.453940 0.549331 -v 1.090213 0.461558 0.537655 -v 1.097399 0.467667 0.528391 -v 1.105423 0.472030 0.521896 -v 1.113977 0.474482 0.518419 -v 1.122732 0.474928 0.518093 -v 1.131351 0.473350 0.520932 -v 1.139504 0.469809 0.526827 -v 1.146877 0.464442 0.535549 -v 1.153186 0.457454 0.546766 -v 1.158190 0.449114 0.560044 -v 1.161696 0.439742 0.574875 -v 1.075765 0.429614 0.598789 -v 1.078353 0.444098 0.587462 -v 1.082511 0.457742 0.576635 -v 1.088080 0.470024 0.566722 -v 1.094844 0.480471 0.558104 -v 1.102545 0.488681 0.551113 -v 1.110886 0.494339 0.546017 -v 1.119547 0.497228 0.543013 -v 1.128195 0.497236 0.542215 -v 1.136497 0.494364 0.543654 -v 1.144135 0.488721 0.547276 -v 1.150816 0.480525 0.552940 -v 1.156281 0.470090 0.560429 -v 1.160322 0.457818 0.569456 -v 1.162782 0.444180 0.579673 -v 1.076849 0.433490 0.604017 -v 1.080480 0.451700 0.597719 -v 1.085599 0.468779 0.591524 -v 1.092009 0.484071 0.585673 -v 1.099465 0.496988 0.580388 -v 1.107679 0.507034 0.575874 -v 1.116336 0.513823 0.572303 -v 1.125104 0.517093 0.569814 -v 1.133645 0.516720 0.568501 -v 1.141631 0.512717 0.568415 -v 1.148756 0.505239 0.569560 -v 1.154745 0.494572 0.571891 -v 1.159368 0.481127 0.575319 -v 1.162448 0.465420 0.579712 -v 1.163867 0.448055 0.584902 -v 1.077889 0.436655 0.609475 -v 1.082520 0.457908 0.608425 -v 1.088560 0.477791 0.607068 -v 1.095778 0.495541 0.605456 -v 1.103897 0.510476 0.603650 -v 1.112604 0.522021 0.601721 -v 1.121564 0.529733 0.599743 -v 1.130434 0.533315 0.597791 -v 1.138873 0.532630 0.595941 -v 1.146556 0.527704 0.594263 -v 1.153188 0.518726 0.592822 -v 1.158514 0.506042 0.591674 -v 1.162330 0.490139 0.590862 -v 1.164488 0.471628 0.590419 -v 1.164906 0.451220 0.590360 -v 1.078845 0.438987 0.614953 -v 1.084394 0.462482 0.619170 -v 1.091282 0.484433 0.622668 -v 1.099242 0.503994 0.625310 -v 1.107970 0.520415 0.626997 -v 1.117130 0.533065 0.627663 -v 1.126369 0.541457 0.627282 -v 1.135333 0.545269 0.625870 -v 1.143678 0.544354 0.623480 -v 1.151082 0.538748 0.620204 -v 1.157261 0.528666 0.616169 -v 1.161978 0.514495 0.611529 -v 1.165051 0.496781 0.606462 -v 1.166363 0.476203 0.601164 -v 1.165862 0.453552 0.595838 -v 1.079680 0.440397 0.620240 -v 1.086032 0.465248 0.629542 -v 1.093659 0.488448 0.637724 -v 1.102268 0.509105 0.644474 -v 1.111528 0.526425 0.649531 -v 1.121083 0.539742 0.652701 -v 1.130566 0.548546 0.653863 -v 1.139613 0.552497 0.652971 -v 1.147875 0.551443 0.650061 -v 1.155035 0.545426 0.645243 -v 1.160819 0.534676 0.638703 -v 1.165004 0.519606 0.630692 -v 1.167429 0.500796 0.621519 -v 1.168000 0.478969 0.611535 -v 1.166697 0.454962 0.601125 -v 1.080361 0.440831 0.625134 -v 1.087369 0.466099 0.639140 -v 1.095601 0.489683 0.651659 -v 1.104739 0.510677 0.662210 -v 1.114434 0.528274 0.670386 -v 1.124312 0.541797 0.675874 -v 1.133994 0.550726 0.678463 -v 1.143108 0.554720 0.678054 -v 1.151303 0.553624 0.674661 -v 1.158265 0.547480 0.668416 -v 1.163725 0.536524 0.659558 -v 1.167475 0.521178 0.648428 -v 1.169371 0.502031 0.635454 -v 1.169338 0.479819 0.621134 -v 1.167379 0.455396 0.606018 -v 1.080864 0.440271 0.629445 -v 1.088355 0.465002 0.647597 -v 1.097032 0.488091 0.663937 -v 1.106561 0.508650 0.677836 -v 1.116576 0.525890 0.688761 -v 1.126693 0.539148 0.696292 -v 1.136521 0.547915 0.700138 -v 1.145684 0.551853 0.700153 -v 1.153830 0.550812 0.696336 -v 1.160645 0.544831 0.688833 -v 1.165868 0.534141 0.677933 -v 1.169297 0.519151 0.664055 -v 1.170802 0.500439 0.647732 -v 1.170324 0.478722 0.629591 -v 1.167881 0.454837 0.610329 -v 1.081168 0.438741 0.633009 -v 1.088952 0.461999 0.654588 -v 1.097898 0.483732 0.674086 -v 1.107664 0.503102 0.690753 -v 1.117873 0.519366 0.703950 -v 1.128133 0.531899 0.713168 -v 1.138050 0.540220 0.718054 -v 1.147243 0.544007 0.718420 -v 1.155359 0.543117 0.714252 -v 1.162085 0.537583 0.705710 -v 1.167164 0.527617 0.693122 -v 1.170400 0.513603 0.676972 -v 1.171668 0.496080 0.657880 -v 1.170921 0.475720 0.636581 -v 1.168186 0.453306 0.613893 -v 1.081262 0.436297 0.635688 -v 1.089136 0.457207 0.659843 -v 1.098166 0.476773 0.681716 -v 1.108004 0.494246 0.700464 -v 1.118273 0.508953 0.715369 -v 1.128578 0.520328 0.725856 -v 1.138523 0.527936 0.731524 -v 1.147725 0.531483 0.732153 -v 1.155831 0.530833 0.727721 -v 1.162531 0.526012 0.718397 -v 1.167565 0.517203 0.704540 -v 1.170740 0.504747 0.686682 -v 1.171936 0.489121 0.665510 -v 1.171105 0.470927 0.641837 -v 1.168280 0.450863 0.616572 -v 1.081143 0.433035 0.637380 -v 1.088901 0.450808 0.663162 -v 1.097825 0.467484 0.686533 -v 1.107570 0.482422 0.706595 -v 1.117763 0.495050 0.722578 -v 1.128011 0.504880 0.733867 -v 1.137920 0.511536 0.740028 -v 1.147111 0.514762 0.740824 -v 1.155229 0.514433 0.736226 -v 1.161963 0.510563 0.726409 -v 1.167054 0.503300 0.711750 -v 1.170306 0.492923 0.692814 -v 1.171595 0.479832 0.670327 -v 1.170870 0.464528 0.645155 -v 1.168160 0.447601 0.618264 -v 1.080813 0.429080 0.638019 -v 1.088256 0.443049 0.664415 -v 1.096888 0.456219 0.688353 -v 1.106378 0.468085 0.708912 -v 1.116360 0.478191 0.725302 -v 1.126452 0.486148 0.736894 -v 1.136266 0.491650 0.743241 -v 1.145424 0.494486 0.744100 -v 1.153575 0.494548 0.739439 -v 1.160405 0.491831 0.729435 -v 1.165652 0.486442 0.714474 -v 1.169114 0.478587 0.695130 -v 1.170658 0.468567 0.672148 -v 1.170224 0.456769 0.646409 -v 1.167831 0.443645 0.618903 -v 1.080288 0.424583 0.637581 -v 1.087225 0.434228 0.663556 -v 1.095391 0.443413 0.687106 -v 1.104473 0.451786 0.707324 -v 1.114120 0.459026 0.723435 -v 1.123963 0.464852 0.734819 -v 1.133624 0.469043 0.741039 -v 1.142730 0.471436 0.741855 -v 1.150933 0.471940 0.737237 -v 1.157916 0.470535 0.727361 -v 1.163412 0.467276 0.712607 -v 1.167209 0.462288 0.693543 -v 1.169161 0.455761 0.670900 -v 1.169194 0.447948 0.645550 -v 1.167305 0.439148 0.618465 -v 1.079586 0.419717 0.636083 -v 1.085848 0.424684 0.660617 -v 1.093392 0.429557 0.682839 -v 1.101928 0.434151 0.701894 -v 1.111129 0.438289 0.717050 -v 1.120639 0.441811 0.727724 -v 1.130095 0.444582 0.733507 -v 1.139132 0.446496 0.734175 -v 1.147404 0.447480 0.729704 -v 1.154592 0.447494 0.720266 -v 1.160420 0.446540 0.706222 -v 1.164664 0.444653 0.688112 -v 1.167162 0.441905 0.666633 -v 1.167817 0.438404 0.642611 -v 1.166603 0.434283 0.616967 -v 1.078735 0.414670 0.633582 -v 1.084178 0.414783 0.655711 -v 1.090968 0.415185 0.675717 -v 1.098843 0.415858 0.692829 -v 1.107500 0.416778 0.706391 -v 1.116608 0.417910 0.715880 -v 1.125815 0.419209 0.720933 -v 1.134769 0.420626 0.721356 -v 1.143124 0.422106 0.717131 -v 1.150560 0.423593 0.708422 -v 1.156792 0.425029 0.695562 -v 1.161579 0.426359 0.679047 -v 1.164738 0.427533 0.659511 -v 1.166147 0.428504 0.637705 -v 1.165752 0.429236 0.614466 -v 1.077767 0.409635 0.630174 -v 1.082279 0.404907 0.649027 -v 1.088211 0.400847 0.666013 -v 1.095334 0.397610 0.680478 -v 1.103375 0.395321 0.691868 -v 1.112024 0.394067 0.699743 -v 1.120949 0.393898 0.703802 -v 1.129807 0.394819 0.703889 -v 1.138258 0.396795 0.700000 -v 1.145976 0.399750 0.692285 -v 1.152666 0.403571 0.681040 -v 1.158070 0.408111 0.666697 -v 1.161981 0.413195 0.649807 -v 1.164248 0.418628 0.631021 -v 1.164784 0.424201 0.611058 -v 1.163568 0.429700 0.590688 -v 1.076719 0.404806 0.625991 -v 1.080225 0.395435 0.640822 -v 1.085228 0.387095 0.654100 -v 1.091538 0.380107 0.665316 -v 1.098911 0.374740 0.674039 -v 1.107064 0.371199 0.679933 -v 1.115683 0.369621 0.682772 -v 1.124438 0.370067 0.682447 -v 1.132992 0.372519 0.678970 -v 1.141016 0.376882 0.672475 -v 1.148202 0.382991 0.663211 -v 1.154274 0.390609 0.651535 -v 1.158998 0.399443 0.637895 -v 1.162193 0.409156 0.622815 -v 1.163736 0.419372 0.606875 -v 1.075633 0.400369 0.621193 -v 1.078093 0.386731 0.631410 -v 1.082134 0.374459 0.640436 -v 1.087599 0.364024 0.647926 -v 1.094279 0.355828 0.653590 -v 1.101918 0.350185 0.657211 -v 1.110220 0.347313 0.658651 -v 1.118868 0.347321 0.657853 -v 1.127529 0.350210 0.654848 -v 1.135870 0.355868 0.649753 -v 1.143571 0.364078 0.642762 -v 1.150335 0.374525 0.634144 -v 1.155904 0.386807 0.624231 -v 1.160062 0.400451 0.613403 -v 1.162650 0.414935 0.602077 -v 1.074548 0.396493 0.615964 -v 1.075967 0.379129 0.621154 -v 1.079047 0.363422 0.625547 -v 1.083670 0.349977 0.628975 -v 1.089659 0.339310 0.631306 -v 1.096784 0.331832 0.632451 -v 1.104770 0.327829 0.632365 -v 1.113311 0.327456 0.631052 -v 1.122079 0.330726 0.628563 -v 1.130736 0.337515 0.624992 -v 1.138950 0.347561 0.620478 -v 1.146406 0.360478 0.615193 -v 1.152816 0.375770 0.609341 -v 1.157935 0.392849 0.603147 -v 1.161566 0.411059 0.596849 -v 1.073509 0.393329 0.610506 -v 1.073927 0.372921 0.610447 -v 1.076085 0.354410 0.610003 -v 1.079901 0.338507 0.609192 -v 1.085227 0.325823 0.608044 -v 1.091859 0.316845 0.606603 -v 1.099542 0.311919 0.604925 -v 1.107980 0.311234 0.603075 -v 1.116851 0.314816 0.601123 -v 1.125811 0.322528 0.599144 -v 1.134518 0.334073 0.597215 -v 1.142637 0.349008 0.595410 -v 1.149855 0.366758 0.593798 -v 1.155895 0.386641 0.592441 -v 1.160526 0.407894 0.591390 -v 1.072553 0.390997 0.605028 -v 1.072052 0.368346 0.599702 -v 1.073364 0.347768 0.594404 -v 1.076437 0.330054 0.589337 -v 1.081154 0.315883 0.584697 -v 1.087333 0.305801 0.580661 -v 1.094737 0.300195 0.577386 -v 1.103082 0.299280 0.574996 -v 1.112046 0.303092 0.573583 -v 1.121285 0.311484 0.573203 -v 1.130445 0.324134 0.573869 -v 1.139173 0.340555 0.575555 -v 1.147133 0.360116 0.578198 -v 1.154021 0.382067 0.581695 -v 1.159570 0.405562 0.585913 -v 1.071718 0.389587 0.599741 -v 1.070414 0.365580 0.589331 -v 1.070986 0.343753 0.579347 -v 1.073411 0.324943 0.570173 -v 1.077595 0.309873 0.562163 -v 1.083379 0.299123 0.555623 -v 1.090540 0.293106 0.550805 -v 1.098802 0.292052 0.547894 -v 1.107849 0.296003 0.547003 -v 1.117332 0.304807 0.548164 -v 1.126887 0.318124 0.551335 -v 1.136147 0.335444 0.556392 -v 1.144756 0.356101 0.563141 -v 1.152383 0.379301 0.571324 -v 1.158735 0.404152 0.580625 -v 1.071036 0.389153 0.594848 -v 1.069077 0.364730 0.579732 -v 1.069044 0.342518 0.565412 -v 1.070939 0.323371 0.552438 -v 1.074690 0.308025 0.541308 -v 1.080150 0.297069 0.532450 -v 1.087112 0.290925 0.526205 -v 1.095307 0.289829 0.522812 -v 1.104421 0.293823 0.522402 -v 1.114103 0.302752 0.524991 -v 1.123981 0.316275 0.530479 -v 1.133675 0.333872 0.538656 -v 1.142814 0.354866 0.549206 -v 1.151046 0.378450 0.561725 -v 1.158053 0.403718 0.575732 -v 1.070533 0.389712 0.590536 -v 1.068091 0.365826 0.571275 -v 1.067613 0.344110 0.553134 -v 1.069118 0.325398 0.536811 -v 1.072547 0.310408 0.522933 -v 1.077770 0.299718 0.512033 -v 1.084585 0.293737 0.504530 -v 1.092731 0.292696 0.500713 -v 1.101894 0.296634 0.500728 -v 1.111722 0.305401 0.504574 -v 1.121838 0.318659 0.512105 -v 1.131854 0.335899 0.523029 -v 1.141383 0.356458 0.536929 -v 1.150059 0.379547 0.553268 -v 1.157551 0.404278 0.571421 -v 1.074846 0.414849 0.610178 -v 1.070229 0.391243 0.586972 -v 1.067494 0.368829 0.564284 -v 1.066747 0.348469 0.542985 -v 1.068015 0.330946 0.523894 -v 1.071251 0.316932 0.507744 -v 1.076329 0.306967 0.495156 -v 1.083056 0.301432 0.486614 -v 1.091172 0.300542 0.482445 -v 1.100365 0.304330 0.482811 -v 1.110282 0.312650 0.487697 -v 1.120542 0.325183 0.496916 -v 1.130751 0.341447 0.510112 -v 1.140516 0.360817 0.526780 -v 1.149463 0.382550 0.546278 -v 1.157247 0.405808 0.567857 -v 1.070135 0.393686 0.584293 -v 1.067310 0.373622 0.559029 -v 1.066479 0.355428 0.535356 -v 1.067675 0.339802 0.514183 -v 1.070850 0.327346 0.496325 -v 1.075884 0.318537 0.482468 -v 1.082583 0.313716 0.473145 -v 1.090690 0.313066 0.468712 -v 1.099892 0.316613 0.469342 -v 1.109837 0.324221 0.475010 -v 1.120142 0.335596 0.485497 -v 1.130410 0.350303 0.500402 -v 1.140249 0.367776 0.519150 -v 1.149279 0.387342 0.541022 -v 1.157153 0.408252 0.565178 -vn -0.672781 -0.204535 -0.710959 -vn -0.898373 -0.088931 -0.430067 -vn -0.876644 0.072756 -0.475539 -vn -0.997467 0.068545 0.018494 -vn -0.993500 0.086367 0.074129 -vn -0.992523 0.102908 0.065584 -vn 0.941404 -0.153844 -0.300119 -vn 0.908231 -0.176580 -0.379315 -vn 0.937925 -0.100772 -0.331828 -vn -0.152104 -0.310160 -0.938414 -vn -0.198889 -0.023286 -0.979736 -vn -0.997772 0.047273 -0.046663 -vn -0.994812 0.101535 0.001404 -vn 0.962035 -0.135166 -0.236976 -vn 0.961150 -0.101779 -0.256539 -vn 0.412458 -0.301157 -0.859737 -vn 0.343089 -0.060488 -0.937315 -vn -0.991333 0.019440 -0.129917 -vn -0.992401 0.099338 -0.072451 -vn 0.976043 -0.118656 -0.182318 -vn 0.976135 -0.101993 -0.191595 -vn 0.719718 -0.248726 -0.648152 -vn 0.676351 -0.081973 -0.731986 -vn -0.968688 -0.021241 -0.247261 -vn -0.981689 0.095645 -0.164678 -vn 0.848048 -0.206641 -0.487930 -vn 0.827662 -0.093204 -0.553392 -vn -0.952849 0.088565 -0.290139 -vn 0.899289 -0.098392 -0.426069 -vn -0.665792 0.034822 -0.745293 -vn -0.846431 0.208655 -0.489853 -vn -0.991119 0.118686 0.059786 -vn 0.933683 -0.046907 -0.354991 -vn -0.228523 0.209021 -0.950804 -vn -0.991028 0.133061 -0.010193 -vn 0.960173 -0.068239 -0.270821 -vn 0.277139 0.153752 -0.948424 -vn -0.984832 0.148473 -0.089450 -vn 0.976409 -0.085635 -0.198157 -vn 0.626759 0.080386 -0.775018 -vn -0.968413 0.165899 -0.185949 -vn 0.802332 0.021424 -0.596423 -vn -0.931425 0.186224 -0.312632 -vn 0.888028 -0.018738 -0.459365 -vn 0.776208 0.130039 -0.616901 -vn -0.908689 0.270241 -0.318155 -vn 0.876247 0.058138 -0.478256 -vn -0.643361 0.224097 -0.732017 -vn -0.815516 0.319437 -0.482528 -vn -0.989441 0.133274 0.056642 -vn 0.929441 0.005188 -0.368877 -vn -0.245003 0.383892 -0.890255 -vn -0.986602 0.162206 -0.016449 -vn 0.959471 -0.035951 -0.279458 -vn 0.222266 0.328990 -0.917783 -vn -0.976226 0.193304 -0.097964 -vn 0.976836 -0.070193 -0.202002 -vn 0.579180 0.226264 -0.783135 -vn -0.953795 0.228553 -0.194952 -vn 0.977538 -0.056124 -0.203040 -vn 0.539903 0.351177 -0.764946 -vn -0.939543 0.282876 -0.192877 -vn 0.753441 0.227729 -0.616779 -vn -0.887509 0.341136 -0.309702 -vn 0.866146 0.128880 -0.482833 -vn -0.617603 0.368267 -0.694906 -vn -0.788049 0.409223 -0.459883 -vn -0.987640 0.146306 0.056093 -vn 0.926176 0.053438 -0.373211 -vn -0.252632 0.515458 -0.818781 -vn -0.981933 0.188269 -0.017457 -vn 0.959319 -0.006195 -0.282235 -vn 0.181738 0.468245 -0.864681 -vn -0.967498 0.232887 -0.098361 -vn -0.977447 0.210639 -0.013398 -vn 0.960021 0.019868 -0.279122 -vn 0.156011 0.579455 -0.799890 -vn -0.959441 0.266671 -0.091220 -vn 0.978515 -0.043947 -0.201361 -vn 0.512742 0.455367 -0.727805 -vn -0.926969 0.328654 -0.180822 -vn 0.737602 0.311899 -0.598865 -vn -0.869625 0.399915 -0.289468 -vn 0.859706 0.190771 -0.473769 -vn -0.594195 0.479232 -0.645924 -vn -0.765801 0.482040 -0.425611 -vn -0.985809 0.157445 0.058077 -vn 0.924833 0.095828 -0.368084 -vn -0.254433 0.617847 -0.743980 -vn -0.575182 0.566820 -0.589770 -vn -0.749413 0.541063 -0.381573 -vn -0.984039 0.166540 0.062349 -vn 0.926054 0.130741 -0.353923 -vn -0.252022 0.701041 -0.667074 -vn -0.973418 0.228889 -0.004578 -vn 0.961852 0.041292 -0.270394 -vn 0.144475 0.670217 -0.727958 -vn -0.952635 0.294168 -0.076998 -vn 0.979766 -0.034028 -0.197089 -vn 0.499863 0.540849 -0.676443 -vn -0.916837 0.365856 -0.159734 -vn 0.731132 0.381237 -0.565752 -vn -0.855892 0.447584 -0.258950 -vn 0.858486 0.241798 -0.452193 -vn 0.735557 0.435041 -0.519272 -vn -0.738945 0.588336 -0.328318 -vn 0.863369 0.280618 -0.419263 -vn -0.560869 0.637928 -0.527665 -vn -0.551073 0.696860 -0.458968 -vn -0.982421 0.173345 0.068819 -vn 0.930296 0.157018 -0.331462 -vn -0.246101 0.771630 -0.586505 -vn -0.970061 0.242653 0.008667 -vn 0.964843 0.057344 -0.256386 -vn 0.146641 0.746055 -0.649495 -vn -0.947386 0.315043 -0.056307 -vn 0.981323 -0.026582 -0.190435 -vn 0.502518 0.609516 -0.613117 -vn -0.909635 0.394391 -0.130345 -vn 0.968993 0.067476 -0.237648 -vn 0.162847 0.810358 -0.562792 -vn -0.846767 0.484756 -0.219001 -vn -0.842189 0.511643 -0.169958 -vn 0.521378 0.662160 -0.538224 -vn -0.734153 0.624866 -0.265572 -vn 0.751366 0.472518 -0.460555 -vn -0.545396 0.746117 -0.381878 -vn -0.967437 0.251656 0.026002 -vn 0.874599 0.306070 -0.375988 -vn -0.236579 0.833583 -0.499130 -vn -0.943876 0.328959 -0.029603 -vn 0.937498 0.173742 -0.301431 -vn -0.905423 0.414075 -0.093265 -vn 0.947325 0.180242 -0.264657 -vn -0.222541 0.888974 -0.400189 -vn -0.904111 0.424451 -0.048921 -vn 0.983123 -0.021821 -0.181585 -vn 0.974059 0.071322 -0.214667 -vn 0.194128 0.864284 -0.464003 -vn -0.841853 0.527909 -0.111942 -vn 0.556658 0.697928 -0.450545 -vn -0.734581 0.650655 -0.192328 -vn 0.778161 0.492233 -0.390027 -vn -0.543321 0.786554 -0.293374 -vn -0.980987 0.177831 0.077303 -vn -0.965606 0.255593 0.046937 -vn 0.891568 0.317057 -0.323283 -vn -0.941984 0.335551 0.002533 -vn -0.979766 0.179785 0.087619 -vn -0.964476 0.254311 0.071078 -vn 0.912961 0.312510 -0.262276 -vn -0.202246 0.937559 -0.282876 -vn -0.941557 0.334452 0.039460 -vn 0.958953 0.175939 -0.222266 -vn -0.905209 0.424940 0.002136 -vn 0.985107 -0.019868 -0.170721 -vn 0.979736 0.068575 -0.188147 -vn 0.242317 0.905911 -0.347209 -vn -0.845149 0.532579 -0.044771 -vn 0.607868 0.713858 -0.347667 -vn -0.739555 0.664510 -0.106906 -vn 0.814203 0.492172 -0.307871 -vn -0.544053 0.817408 -0.189245 -vn -0.747826 0.663808 -0.007324 -vn 0.856349 0.469527 -0.214789 -vn -0.546098 0.835261 -0.063662 -vn -0.978759 0.179113 0.099521 -vn -0.963897 0.247597 0.097720 -vn 0.936521 0.291574 -0.194586 -vn -0.172582 0.975341 -0.137455 -vn -0.942167 0.325297 0.080508 -vn 0.971221 0.160680 -0.175665 -vn -0.907987 0.414686 0.059420 -vn 0.987182 -0.020905 -0.158086 -vn 0.985473 0.059206 -0.159062 -vn 0.309305 0.928678 -0.204505 -vn -0.851039 0.524094 0.031678 -vn 0.672811 0.704062 -0.227058 -vn 0.394635 0.918393 -0.027894 -vn -0.857936 0.500168 0.117161 -vn 0.746147 0.659902 -0.087893 -vn -0.757225 0.644093 0.108249 -vn 0.899625 0.421735 -0.113041 -vn -0.546434 0.832606 0.090152 -vn -0.977935 0.175726 0.112766 -vn -0.963652 0.235450 0.126164 -vn 0.959380 0.254067 -0.122593 -vn -0.129063 0.990448 0.048250 -vn -0.943266 0.307718 0.124638 -vn 0.982727 0.134770 -0.126621 -vn -0.911496 0.392743 0.121952 -vn 0.989227 -0.025056 -0.144139 -vn 0.990753 0.043428 -0.128483 -vn 0.992035 0.099155 -0.077273 -vn -0.067629 0.956816 0.282693 -vn -0.914487 0.358104 0.188299 -vn 0.991058 -0.032136 -0.129307 -vn 0.994964 0.021851 -0.097629 -vn 0.491501 0.851314 0.183416 -vn -0.863643 0.457991 0.210425 -vn 0.817621 0.572069 0.064760 -vn -0.764183 0.598590 0.240181 -vn 0.937468 0.347911 -0.007447 -vn -0.539506 0.794885 0.277505 -vn -0.977294 0.169591 0.126957 -vn -0.963500 0.217780 0.155644 -vn 0.978332 0.200964 -0.049623 -vn -0.944243 0.281503 0.170690 -vn -0.976745 0.160680 0.141728 -vn -0.963225 0.194769 0.185003 -vn 0.990692 0.134587 0.019929 -vn -0.517350 0.699820 0.492477 -vn -0.944487 0.246529 0.217017 -vn 0.998016 0.055269 -0.030091 -vn 0.009095 0.835170 0.549883 -vn -0.915586 0.309976 0.256050 -vn 0.992553 -0.042146 -0.114078 -vn 0.997681 -0.004883 -0.067843 -vn 0.583148 0.701956 0.408826 -vn -0.865474 0.394910 0.308145 -vn 0.873012 0.437117 0.216193 -vn -0.763482 0.519150 0.384075 -vn 0.963469 0.250710 0.093905 -vn -0.860775 0.309885 0.403668 -vn 0.973693 0.137883 0.181341 -vn -0.749626 0.400525 0.526872 -vn -0.976348 0.148991 0.156529 -vn -0.962737 0.166814 0.212714 -vn 0.994934 0.059145 0.081149 -vn -0.474044 0.529954 0.703116 -vn -0.943602 0.203375 0.261116 -vn 0.999908 0.005371 0.012055 -vn 0.087130 0.605884 0.790735 -vn -0.913724 0.248634 0.321360 -vn 0.993530 -0.054872 -0.099124 -vn 0.998505 -0.035646 -0.040925 -vn 0.647694 0.470229 0.599414 -vn 0.900327 0.267037 0.343608 -vn 0.672781 0.204535 0.710959 -vn -0.908231 0.176580 0.379345 -vn 0.968688 0.021241 0.247261 -vn -0.848048 0.206641 0.487960 -vn 0.991333 -0.019440 0.129917 -vn -0.719718 0.248726 0.648152 -vn -0.976104 0.134678 0.170446 -vn -0.976043 0.118625 0.182318 -vn 0.997772 -0.047273 0.046663 -vn -0.412458 0.301126 0.859737 -vn -0.962035 0.135166 0.236976 -vn 0.997467 -0.068545 -0.018494 -vn 0.152104 0.310160 0.938414 -vn -0.941404 0.153844 0.300119 -vn 0.993866 -0.069948 -0.085452 -vn 0.993469 -0.086398 -0.074099 -vn 0.994812 -0.101505 -0.001434 -vn 0.198889 0.023316 0.979736 -vn -0.937925 0.100772 0.331828 -vn 0.992523 -0.102908 -0.065554 -vn 0.898373 0.088931 0.430067 -vn 0.876644 -0.072756 0.475539 -vn -0.899289 0.098392 0.426069 -vn 0.952849 -0.088565 0.290139 -vn -0.827662 0.093204 0.553392 -vn 0.981689 -0.095645 0.164678 -vn -0.676351 0.081973 0.731986 -vn -0.976135 0.102023 0.191595 -vn 0.992401 -0.099338 0.072481 -vn -0.343089 0.060488 0.937315 -vn -0.961150 0.101749 0.256539 -vn 0.984832 -0.148503 0.089450 -vn -0.277139 -0.153752 0.948424 -vn -0.960173 0.068209 0.270821 -vn 0.991028 -0.133061 0.010193 -vn 0.665822 -0.034822 0.745293 -vn 0.228523 -0.209021 0.950804 -vn -0.933683 0.046937 0.354991 -vn 0.991119 -0.118686 -0.059786 -vn 0.846431 -0.208625 0.489853 -vn -0.888028 0.018738 0.459365 -vn 0.931425 -0.186224 0.312632 -vn -0.802332 -0.021424 0.596454 -vn 0.968413 -0.165899 0.185949 -vn -0.626789 -0.080386 0.775018 -vn -0.976409 0.085665 0.198157 -vn 0.953795 -0.228523 0.194952 -vn -0.579180 -0.226264 0.783135 -vn -0.976836 0.070193 0.201972 -vn 0.976226 -0.193304 0.097964 -vn -0.222236 -0.328990 0.917783 -vn -0.959471 0.035951 0.279458 -vn 0.986602 -0.162206 0.016449 -vn 0.643361 -0.224097 0.732017 -vn 0.245003 -0.383892 0.890255 -vn -0.929441 -0.005188 0.368908 -vn 0.989441 -0.133274 -0.056642 -vn 0.815516 -0.319437 0.482528 -vn -0.876247 -0.058168 0.478256 -vn 0.908689 -0.270241 0.318155 -vn -0.776208 -0.130039 0.616901 -vn -0.866146 -0.128880 0.482833 -vn 0.887509 -0.341136 0.309702 -vn -0.753441 -0.227729 0.616779 -vn 0.939543 -0.282876 0.192877 -vn -0.539872 -0.351177 0.764946 -vn -0.977538 0.056154 0.203040 -vn 0.967498 -0.232887 0.098361 -vn -0.181738 -0.468245 0.864681 -vn -0.959319 0.006195 0.282235 -vn 0.981933 -0.188269 0.017457 -vn 0.617573 -0.368267 0.694906 -vn 0.252632 -0.515458 0.818781 -vn -0.926176 -0.053438 0.373211 -vn 0.987640 -0.146275 -0.056093 -vn 0.788049 -0.409223 0.459883 -vn 0.594226 -0.479202 0.645924 -vn 0.254433 -0.617847 0.743980 -vn -0.924833 -0.095828 0.368084 -vn 0.985809 -0.157445 -0.058077 -vn 0.765801 -0.482040 0.425611 -vn -0.859706 -0.190741 0.473769 -vn 0.869625 -0.399915 0.289468 -vn -0.737602 -0.311899 0.598865 -vn 0.926969 -0.328654 0.180822 -vn -0.512742 -0.455367 0.727805 -vn -0.978515 0.043947 0.201361 -vn 0.959441 -0.266671 0.091220 -vn -0.156011 -0.579455 0.799890 -vn -0.960021 -0.019868 0.279122 -vn 0.977447 -0.210639 0.013398 -vn 0.952635 -0.294137 0.076998 -vn -0.144475 -0.670217 0.727958 -vn -0.961852 -0.041292 0.270394 -vn 0.973418 -0.228889 0.004578 -vn 0.575182 -0.566820 0.589770 -vn 0.252022 -0.701041 0.667074 -vn -0.926084 -0.130741 0.353923 -vn 0.984039 -0.166540 -0.062349 -vn 0.749413 -0.541063 0.381573 -vn -0.858486 -0.241798 0.452193 -vn 0.855892 -0.447584 0.258950 -vn -0.731132 -0.381237 0.565752 -vn 0.916837 -0.365856 0.159734 -vn -0.499863 -0.540849 0.676443 -vn -0.979766 0.033998 0.197089 -vn 0.909604 -0.394421 0.130345 -vn -0.502518 -0.609516 0.613117 -vn -0.981323 0.026582 0.190435 -vn 0.947386 -0.315043 0.056307 -vn -0.146641 -0.746055 0.649525 -vn -0.964843 -0.057314 0.256417 -vn 0.970061 -0.242653 -0.008667 -vn 0.560869 -0.637928 0.527665 -vn 0.246101 -0.771630 0.586505 -vn -0.930296 -0.157018 0.331462 -vn 0.982421 -0.173376 -0.068819 -vn 0.551073 -0.696860 0.458968 -vn -0.863369 -0.280618 0.419263 -vn 0.738945 -0.588336 0.328318 -vn -0.735527 -0.435041 0.519272 -vn -0.751396 -0.472488 0.460555 -vn 0.846767 -0.484756 0.219001 -vn 0.734153 -0.624866 0.265572 -vn -0.521378 -0.662160 0.538224 -vn 0.842189 -0.511673 0.169988 -vn -0.162816 -0.810389 0.562792 -vn -0.968993 -0.067476 0.237648 -vn 0.905423 -0.414075 0.093265 -vn -0.937498 -0.173742 0.301431 -vn 0.943876 -0.328959 0.029603 -vn 0.236549 -0.833583 0.499130 -vn -0.874599 -0.306070 0.375988 -vn 0.967467 -0.251625 -0.025971 -vn 0.545396 -0.746117 0.381878 -vn 0.222541 -0.888974 0.400189 -vn -0.891568 -0.317057 0.323283 -vn 0.980987 -0.177831 -0.077303 -vn 0.965606 -0.255593 -0.046968 -vn 0.543321 -0.786554 0.293374 -vn -0.778161 -0.492233 0.390027 -vn 0.734611 -0.650624 0.192328 -vn -0.556658 -0.697928 0.450545 -vn 0.841853 -0.527909 0.111942 -vn -0.194098 -0.864284 0.464003 -vn -0.983123 0.021821 0.181585 -vn -0.974059 -0.071322 0.214667 -vn 0.904111 -0.424451 0.048921 -vn -0.947325 -0.180242 0.264687 -vn 0.941984 -0.335551 -0.002533 -vn 0.905179 -0.424940 -0.002136 -vn 0.202246 -0.937559 0.282876 -vn -0.958953 -0.175939 0.222266 -vn 0.941557 -0.334452 -0.039491 -vn -0.912961 -0.312510 0.262276 -vn 0.979766 -0.179785 -0.087588 -vn 0.964476 -0.254311 -0.071078 -vn 0.544053 -0.817408 0.189245 -vn -0.814203 -0.492141 0.307871 -vn 0.739555 -0.664510 0.106906 -vn -0.607868 -0.713828 0.347697 -vn 0.845149 -0.532579 0.044771 -vn -0.242317 -0.905911 0.347209 -vn -0.985107 0.019868 0.170721 -vn -0.979736 -0.068575 0.188147 -vn 0.851039 -0.524094 -0.031678 -vn -0.309305 -0.928709 0.204505 -vn -0.987182 0.020905 0.158086 -vn -0.985473 -0.059206 0.159062 -vn 0.907987 -0.414686 -0.059420 -vn 0.172582 -0.975341 0.137455 -vn -0.971221 -0.160649 0.175665 -vn 0.942167 -0.325297 -0.080508 -vn -0.936521 -0.291574 0.194586 -vn 0.978759 -0.179113 -0.099521 -vn 0.963897 -0.247597 -0.097720 -vn 0.546098 -0.835261 0.063662 -vn -0.856349 -0.469527 0.214789 -vn 0.747826 -0.663808 0.007324 -vn -0.672811 -0.704062 0.227027 -vn 0.757225 -0.644093 -0.108249 -vn -0.746147 -0.659902 0.087893 -vn 0.857936 -0.500168 -0.117161 -vn -0.394635 -0.918393 0.027894 -vn -0.989227 0.025056 0.144108 -vn -0.990753 -0.043458 0.128483 -vn 0.911496 -0.392743 -0.121952 -vn 0.129063 -0.990448 -0.048250 -vn -0.982727 -0.134770 0.126621 -vn 0.943266 -0.307718 -0.124638 -vn -0.959380 -0.254067 0.122593 -vn 0.977935 -0.175695 -0.112766 -vn 0.963652 -0.235420 -0.126164 -vn 0.546434 -0.832606 -0.090152 -vn -0.899625 -0.421766 0.113010 -vn -0.978332 -0.200934 0.049623 -vn 0.977294 -0.169561 -0.126988 -vn 0.963500 -0.217780 -0.155614 -vn 0.539506 -0.794885 -0.277505 -vn -0.937468 -0.347911 0.007447 -vn 0.764183 -0.598590 -0.240181 -vn -0.817621 -0.572069 -0.064760 -vn 0.863643 -0.458022 -0.210425 -vn -0.491501 -0.851314 -0.183416 -vn -0.991058 0.032167 0.129276 -vn -0.994964 -0.021851 0.097598 -vn 0.914487 -0.358104 -0.188299 -vn 0.067629 -0.956816 -0.282693 -vn -0.992035 -0.099155 0.077273 -vn 0.944243 -0.281503 -0.170690 -vn -0.009095 -0.835170 -0.549883 -vn -0.998016 -0.055269 0.030091 -vn 0.944487 -0.246559 -0.217017 -vn 0.517350 -0.699820 -0.492477 -vn -0.990692 -0.134587 -0.019929 -vn 0.976745 -0.160680 -0.141728 -vn 0.963225 -0.194769 -0.185003 -vn -0.963469 -0.250710 -0.093905 -vn 0.763482 -0.519150 -0.384075 -vn -0.873012 -0.437117 -0.216193 -vn 0.865474 -0.394910 -0.308145 -vn -0.583148 -0.701956 -0.408826 -vn -0.992553 0.042146 0.114078 -vn -0.997681 0.004852 0.067843 -vn 0.915586 -0.309976 -0.256050 -vn 0.860775 -0.309915 -0.403668 -vn -0.647694 -0.470260 -0.599414 -vn -0.993530 0.054872 0.099124 -vn -0.998505 0.035646 0.040925 -vn 0.913724 -0.248634 -0.321360 -vn -0.087130 -0.605914 -0.790735 -vn -0.999908 -0.005371 -0.012055 -vn 0.943602 -0.203375 -0.261116 -vn 0.474044 -0.529954 -0.703116 -vn -0.994934 -0.059175 -0.081149 -vn 0.976348 -0.148991 -0.156560 -vn 0.962737 -0.166784 -0.212714 -vn 0.749626 -0.400525 -0.526872 -vn -0.973693 -0.137883 -0.181341 -vn -0.900327 -0.267037 -0.343608 -vn 0.986389 -0.102298 -0.128636 -vn -0.986389 0.102298 0.128636 -vn 0.976104 -0.134739 -0.170446 -vn -0.993866 0.069948 0.085452 -vn -0.992523 0.102878 0.065584 -vn 0.908231 -0.176580 -0.379345 -vn 0.937925 -0.100742 -0.331828 -vn -0.198889 -0.023316 -0.979736 -vn -0.994812 0.101505 0.001434 -vn -0.992401 0.099338 -0.072481 -vn 0.976043 -0.118625 -0.182318 -vn 0.848048 -0.206641 -0.487960 -vn -0.846431 0.208625 -0.489853 -vn 0.933683 -0.046937 -0.354991 -vn 0.960173 -0.068209 -0.270821 -vn -0.984832 0.148473 -0.089480 -vn 0.976409 -0.085665 -0.198157 -vn 0.802332 0.021424 -0.596454 -vn 0.876247 0.058168 -0.478256 -vn 0.959471 -0.035920 -0.279458 -vn 0.222236 0.328990 -0.917783 -vn 0.977538 -0.056154 -0.203040 -vn -0.617573 0.368267 -0.694906 -vn 0.926176 0.053407 -0.373211 -vn -0.967498 0.232917 -0.098361 -vn 0.156011 0.579485 -0.799890 -vn 0.859706 0.190741 -0.473769 -vn -0.594226 0.479202 -0.645924 -vn 0.924833 0.095798 -0.368084 -vn -0.254402 0.617847 -0.743980 -vn 0.926084 0.130741 -0.353923 -vn -0.855892 0.447554 -0.258950 -vn 0.735557 0.435072 -0.519272 -vn -0.738945 0.588305 -0.328318 -vn -0.982421 0.173376 0.068819 -vn 0.964843 0.057344 -0.256417 -vn -0.909604 0.394421 -0.130345 -vn 0.162816 0.810389 -0.562792 -vn -0.842189 0.511643 -0.169988 -vn 0.751396 0.472488 -0.460555 -vn -0.967467 0.251625 0.025971 -vn -0.236549 0.833583 -0.499130 -vn 0.947325 0.180242 -0.264687 -vn 0.194098 0.864284 -0.464003 -vn -0.734611 0.650624 -0.192328 -vn -0.965606 0.255593 0.046968 -vn 0.891568 0.317087 -0.323283 -vn -0.979766 0.179785 0.087588 -vn -0.941557 0.334452 0.039491 -vn -0.905179 0.424940 0.002136 -vn 0.985107 -0.019868 -0.170690 -vn 0.607868 0.713828 -0.347697 -vn -0.747826 0.663839 -0.007324 -vn 0.856380 0.469527 -0.214789 -vn -0.963897 0.247627 0.097720 -vn 0.936521 0.291543 -0.194586 -vn 0.985473 0.059175 -0.159062 -vn -0.851039 0.524094 0.031648 -vn 0.394665 0.918393 -0.027894 -vn 0.899625 0.421766 -0.113010 -vn -0.977935 0.175695 0.112766 -vn -0.963652 0.235420 0.126164 -vn 0.989227 -0.025025 -0.144139 -vn 0.990753 0.043458 -0.128483 -vn -0.067598 0.956816 0.282693 -vn 0.991058 -0.032136 -0.129276 -vn -0.863643 0.458022 0.210425 -vn -0.977294 0.169561 0.126988 -vn 0.978332 0.200934 -0.049623 -vn -0.944487 0.246559 0.217017 -vn -0.915586 0.309946 0.256081 -vn 0.997681 -0.004852 -0.067843 -vn -0.860805 0.309885 0.403668 -vn -0.962737 0.166784 0.212714 -vn 0.994934 0.059175 0.081149 -vn -0.474044 0.529923 0.703116 -vn 0.087130 0.605914 0.790735 -vn 0.993530 -0.054903 -0.099124 -vn 0.647694 0.470260 0.599414 -vn -0.976043 0.118656 0.182318 -vn -0.343089 0.060518 0.937315 -vn -0.961150 0.101779 0.256539 -vn 0.984832 -0.148473 0.089480 -vn -0.960173 0.068239 0.270821 -vn 0.665792 -0.034822 0.745293 -vn -0.933683 0.046907 0.354991 -vn 0.846431 -0.208655 0.489853 -vn -0.976409 0.085635 0.198157 -vn 0.953795 -0.228553 0.194952 -vn -0.976867 0.070193 0.201972 -vn -0.222266 -0.328990 0.917783 -vn -0.959471 0.035981 0.279458 -vn 0.986602 -0.162236 0.016449 -vn 0.245033 -0.383892 0.890255 -vn -0.929441 -0.005219 0.368877 -vn 0.989441 -0.133244 -0.056642 -vn -0.876247 -0.058138 0.478256 -vn -0.753441 -0.227760 0.616779 -vn -0.539903 -0.351177 0.764946 -vn -0.977538 0.056124 0.203040 -vn 0.967498 -0.232887 0.098392 -vn 0.252632 -0.515488 0.818781 -vn 0.985809 -0.157476 -0.058077 -vn -0.978515 0.043977 0.201361 -vn -0.156041 -0.579455 0.799890 -vn 0.952635 -0.294168 0.076998 -vn -0.926054 -0.130741 0.353923 -vn 0.984039 -0.166509 -0.062349 -vn -0.979766 0.034028 0.197089 -vn 0.909635 -0.394391 0.130345 -vn -0.502518 -0.609516 0.613147 -vn -0.146641 -0.746055 0.649495 -vn -0.964843 -0.057344 0.256417 -vn 0.982421 -0.173345 -0.068819 -vn -0.735557 -0.435041 0.519272 -vn -0.751366 -0.472518 0.460555 -vn 0.842189 -0.511673 0.169958 -vn -0.162816 -0.810358 0.562792 -vn 0.967437 -0.251656 -0.025971 -vn -0.194128 -0.864284 0.464003 -vn 0.905209 -0.424940 -0.002136 -vn 0.979766 -0.179785 -0.087619 -vn -0.814203 -0.492172 0.307871 -vn -0.607868 -0.713858 0.347667 -vn 0.845180 -0.532579 0.044771 -vn 0.851039 -0.524094 -0.031648 -vn -0.309305 -0.928678 0.204505 -vn 0.907987 -0.414716 -0.059420 -vn -0.971221 -0.160680 0.175665 -vn -0.856380 -0.469527 0.214789 -vn 0.857936 -0.500137 -0.117161 -vn -0.989227 0.025056 0.144139 -vn -0.990753 -0.043428 0.128483 -vn -0.899625 -0.421735 0.113041 -vn 0.977294 -0.169561 -0.126957 -vn 0.963500 -0.217780 -0.155644 -vn 0.863643 -0.457991 -0.210425 -vn -0.991058 0.032136 0.129307 -vn -0.994964 -0.021851 0.097629 -vn 0.067598 -0.956816 -0.282693 -vn 0.944487 -0.246529 -0.217017 -vn -0.997681 0.004883 0.067843 -vn -0.647694 -0.470229 -0.599414 -vn -0.993530 0.054903 0.099124 -vn 0.962737 -0.166814 -0.212714 -vn 0.976104 -0.134709 -0.170446 -usemtl SkinColor -s 1 -f 489//483 488//484 503//485 -f 484//486 483//487 498//488 -f 495//489 494//490 510//491 -f 490//492 489//483 505//493 -f 485//494 484//486 499//495 -f 496//496 495//489 511//497 -f 491//498 490//492 506//499 -f 486//500 485//494 500//501 -f 497//502 496//496 512//503 -f 492//504 491//498 507//505 -f 487//506 486//500 501//507 -f 493//508 492//504 508//509 -f 488//484 487//506 502//510 -f 494//490 493//508 509//511 -f 504//512 503//485 518//513 -f 499//495 498//488 513//514 -f 510//491 509//511 525//515 -f 505//493 504//512 520//516 -f 500//501 499//495 514//517 -f 511//497 510//491 526//518 -f 506//499 505//493 521//519 -f 501//507 500//501 515//520 -f 512//503 511//497 527//521 -f 507//505 506//499 522//522 -f 502//510 501//507 516//523 -f 508//509 507//505 523//524 -f 503//485 502//510 517//525 -f 509//511 508//509 524//526 -f 523//524 522//522 538//527 -f 518//513 517//525 532//528 -f 524//526 523//524 539//529 -f 519//530 518//513 533//531 -f 514//517 513//514 528//532 -f 525//515 524//526 540//533 -f 520//516 519//530 535//534 -f 515//520 514//517 529//535 -f 526//518 525//515 541//536 -f 521//519 520//516 536//537 -f 516//523 515//520 530//538 -f 527//521 526//518 542//539 -f 522//522 521//519 537//540 -f 517//525 516//523 531//541 -f 542//539 541//536 557//542 -f 537//540 536//537 552//543 -f 532//528 531//541 546//544 -f 538//527 537//540 553//545 -f 533//531 532//528 547//546 -f 539//529 538//527 554//547 -f 534//548 533//531 548//549 -f 529//535 528//532 543//550 -f 540//533 539//529 555//551 -f 535//534 534//548 550//552 -f 530//538 529//535 544//553 -f 541//536 540//533 556//554 -f 536//537 535//534 551//555 -f 531//541 530//538 545//556 -f 545//556 544//553 559//557 -f 556//554 555//551 571//558 -f 551//555 550//552 566//559 -f 546//544 545//556 560//560 -f 557//542 556//554 572//561 -f 552//543 551//555 567//562 -f 547//546 546//544 561//563 -f 553//545 552//543 568//564 -f 548//549 547//546 562//565 -f 554//547 553//545 569//566 -f 549//567 548//549 563//568 -f 544//553 543//550 558//569 -f 555//551 554//547 570//570 -f 550//552 549//567 565//571 -f 564//572 563//568 578//573 -f 559//557 558//569 573//574 -f 570//570 569//566 585//575 -f 565//571 564//572 580//576 -f 560//560 559//557 574//577 -f 571//558 570//570 586//578 -f 566//559 565//571 581//579 -f 561//563 560//560 575//580 -f 572//561 571//558 587//581 -f 567//562 566//559 582//582 -f 562//565 561//563 576//583 -f 568//564 567//562 583//584 -f 563//568 562//565 577//585 -f 569//566 568//564 584//586 -f 583//584 582//582 598//587 -f 578//573 577//585 593//588 -f 584//586 583//584 599//589 -f 579//590 578//573 594//591 -f 574//577 573//574 588//592 -f 585//575 584//586 600//593 -f 580//576 579//590 595//594 -f 575//580 574//577 589//595 -f 586//578 585//575 601//596 -f 581//579 580//576 596//597 -f 576//583 575//580 590//598 -f 587//581 586//578 602//599 -f 582//582 581//579 597//600 -f 577//585 576//583 591//601 -f 602//599 601//596 616//602 -f 597//600 596//597 611//603 -f 592//604 591//601 607//605 -f 598//587 597//600 612//606 -f 593//588 592//604 608//607 -f 599//589 598//587 613//608 -f 594//591 593//588 609//609 -f 589//595 588//592 604//610 -f 600//593 599//589 614//611 -f 595//594 594//591 610//612 -f 590//598 589//595 605//613 -f 601//596 600//593 615//614 -f 596//597 595//594 611//603 -f 591//601 590//598 606//615 -f 616//602 615//614 630//616 -f 611//603 610//612 625//617 -f 606//615 605//613 621//618 -f 617//619 616//602 631//620 -f 612//606 611//603 626//621 -f 607//605 606//615 622//622 -f 613//608 612//606 627//623 -f 608//607 607//605 623//624 -f 614//611 613//608 628//625 -f 609//609 608//607 624//626 -f 604//610 603//627 619//628 -f 615//614 614//611 629//629 -f 610//612 609//609 625//617 -f 605//613 604//610 620//630 -f 619//628 618//631 634//632 -f 630//616 629//629 644//633 -f 625//617 624//626 640//634 -f 620//630 619//628 635//635 -f 631//620 630//616 645//636 -f 626//621 625//617 640//634 -f 621//618 620//630 636//637 -f 632//638 631//620 646//639 -f 627//623 626//621 641//640 -f 622//622 621//618 637//641 -f 628//625 627//623 642//642 -f 623//624 622//622 638//643 -f 629//629 628//625 643//644 -f 624//626 623//624 639//645 -f 638//643 637//641 653//646 -f 644//633 643//644 658//647 -f 639//645 638//643 654//648 -f 634//632 633//649 649//650 -f 645//636 644//633 659//651 -f 640//634 639//645 655//652 -f 635//635 634//632 650//653 -f 646//639 645//636 660//654 -f 641//640 640//634 655//652 -f 636//637 635//635 651//655 -f 647//656 646//639 661//657 -f 642//642 641//640 656//658 -f 637//641 636//637 652//659 -f 643//644 642//642 657//660 -f 657//660 656//658 671//661 -f 652//659 651//655 667//662 -f 658//647 657//660 672//663 -f 653//646 652//659 668//664 -f 659//651 658//647 673//665 -f 654//648 653//646 669//666 -f 649//650 648//667 664//668 -f 660//654 659//651 674//669 -f 655//652 654//648 670//670 -f 650//653 649//650 665//671 -f 661//657 660//654 675//672 -f 656//658 655//652 670//670 -f 651//655 650//653 666//673 -f 662//674 661//657 676//675 -f 676//675 675//672 690//676 -f 671//661 670//670 685//677 -f 666//673 665//671 681//678 -f 677//679 676//675 691//680 -f 672//663 671//661 686//681 -f 667//662 666//673 682//682 -f 673//665 672//663 687//683 -f 668//664 667//662 683//684 -f 674//669 673//665 688//685 -f 669//666 668//664 684//686 -f 664//668 663//687 679//688 -f 675//672 674//669 689//689 -f 670//670 669//666 685//677 -f 665//671 664//668 680//690 -f 679//688 678//691 694//692 -f 690//676 689//689 704//693 -f 685//677 684//686 699//694 -f 680//690 679//688 695//695 -f 691//680 690//676 705//696 -f 686//681 685//677 700//697 -f 681//678 680//690 696//698 -f 692//699 691//680 706//700 -f 687//683 686//681 701//701 -f 682//682 681//678 697//702 -f 688//685 687//683 702//703 -f 683//684 682//682 698//704 -f 689//689 688//685 703//705 -f 684//686 683//684 699//694 -f 698//704 697//702 712//706 -f 704//693 703//705 718//707 -f 699//694 698//704 713//708 -f 694//692 693//709 709//710 -f 705//696 704//693 719//711 -f 700//697 699//694 714//712 -f 695//695 694//692 710//713 -f 706//700 705//696 720//714 -f 701//701 700//697 715//715 -f 696//698 695//695 711//716 -f 707//717 706//700 721//718 -f 702//703 701//701 716//719 -f 697//702 696//698 712//706 -f 703//705 702//703 717//720 -f 717//720 716//719 731//721 -f 712//706 711//716 726//722 -f 718//707 717//720 733//723 -f 713//708 712//706 727//724 -f 719//711 718//707 734//725 -f 714//712 713//708 728//726 -f 709//710 708//727 723//728 -f 720//714 719//711 735//729 -f 715//715 714//712 729//730 -f 710//713 709//710 724//731 -f 721//718 720//714 736//732 -f 716//719 715//715 730//733 -f 711//716 710//713 725//734 -f 722//735 721//718 737//736 -f 736//732 735//729 751//737 -f 731//721 730//733 745//738 -f 726//722 725//734 740//739 -f 737//736 736//732 752//740 -f 732//741 731//721 747//742 -f 727//724 726//722 741//743 -f 733//723 732//741 748//744 -f 728//726 727//724 742//745 -f 734//725 733//723 749//746 -f 729//730 728//726 743//747 -f 724//731 723//728 738//748 -f 735//729 734//725 750//749 -f 730//733 729//730 744//750 -f 725//734 724//731 739//751 -f 750//749 749//746 765//752 -f 745//738 744//750 759//753 -f 740//739 739//751 754//754 -f 751//737 750//749 766//755 -f 746//756 745//738 760//757 -f 741//743 740//739 755//758 -f 752//740 751//737 767//759 -f 747//742 746//756 762//760 -f 742//745 741//743 756//761 -f 748//744 747//742 763//762 -f 743//747 742//745 757//763 -f 749//746 748//744 764//764 -f 744//750 743//747 758//765 -f 739//751 738//748 753//766 -f 764//764 763//762 779//767 -f 759//753 758//765 773//768 -f 754//754 753//766 768//769 -f 765//752 764//764 780//770 -f 760//757 759//753 774//771 -f 755//758 754//754 769//772 -f 766//755 765//752 781//773 -f 761//774 760//757 775//775 -f 756//761 755//758 770//776 -f 767//759 766//755 782//777 -f 762//760 761//774 777//778 -f 757//763 756//761 771//779 -f 763//762 762//760 778//780 -f 758//765 757//763 772//781 -f 772//781 771//779 786//782 -f 778//780 777//778 793//783 -f 773//768 772//781 787//784 -f 779//767 778//780 794//785 -f 774//771 773//768 788//786 -f 769//772 768//769 783//787 -f 780//770 779//767 795//788 -f 775//775 774//771 789//789 -f 770//776 769//772 784//790 -f 781//773 780//770 796//791 -f 776//792 775//775 790//793 -f 771//779 770//776 785//794 -f 782//777 781//773 797//795 -f 777//778 776//792 792//796 -f 791//797 790//793 805//798 -f 786//782 785//794 800//799 -f 797//795 796//791 812//800 -f 792//796 791//797 807//801 -f 787//784 786//782 801//802 -f 793//783 792//796 808//803 -f 788//786 787//784 802//804 -f 794//785 793//783 809//805 -f 789//789 788//786 803//806 -f 784//790 783//787 798//807 -f 795//788 794//785 810//808 -f 790//793 789//789 804//809 -f 785//794 784//790 799//810 -f 796//791 795//788 811//811 -f 810//808 809//805 826//812 -f 805//798 804//809 820//813 -f 800//799 799//810 815//814 -f 811//811 810//808 827//815 -f 806//816 805//798 821//817 -f 801//802 800//799 816//818 -f 812//800 811//811 828//819 -f 807//801 806//816 823//820 -f 802//804 801//802 817//821 -f 808//803 807//801 824//822 -f 803//806 802//804 818//823 -f 809//805 808//803 825//824 -f 804//809 803//806 819//825 -f 799//810 798//807 814//826 -f 825//824 824//822 840//827 -f 820//813 819//825 834//828 -f 815//814 814//826 829//829 -f 826//812 825//824 841//830 -f 821//817 820//813 835//831 -f 816//818 815//814 830//832 -f 827//815 826//812 842//833 -f 822//834 821//817 836//835 -f 817//821 816//818 831//836 -f 828//819 827//815 843//837 -f 823//820 822//834 837//838 -f 818//823 817//821 832//839 -f 824//822 823//820 838//840 -f 819//825 818//823 833//841 -f 833//841 832//839 848//842 -f 839//843 838//840 853//844 -f 834//828 833//841 849//845 -f 840//827 839//843 854//846 -f 835//831 834//828 850//847 -f 830//832 829//829 845//848 -f 841//830 840//827 855//849 -f 836//835 835//831 850//847 -f 831//836 830//832 846//850 -f 842//833 841//830 856//851 -f 837//838 836//835 851//852 -f 832//839 831//836 847//853 -f 843//837 842//833 857//854 -f 838//840 837//838 852//855 -f 852//855 851//852 866//856 -f 847//853 846//850 862//857 -f 858//858 857//854 872//859 -f 853//844 852//855 867//860 -f 848//842 847//853 863//861 -f 854//846 853//844 868//862 -f 849//845 848//842 864//863 -f 855//849 854//846 869//864 -f 850//847 849//845 865//865 -f 845//848 844//866 860//867 -f 856//851 855//849 870//868 -f 851//852 850//847 866//856 -f 846//850 845//848 861//869 -f 857//854 856//851 871//870 -f 871//870 870//868 885//871 -f 866//856 865//865 881//872 -f 861//869 860//867 876//873 -f 872//859 871//870 886//874 -f 867//860 866//856 881//872 -f 862//857 861//869 877//875 -f 873//876 872//859 887//877 -f 868//862 867//860 882//878 -f 863//861 862//857 878//879 -f 869//864 868//862 883//880 -f 864//863 863//861 879//881 -f 870//868 869//864 884//882 -f 865//865 864//863 880//883 -f 860//867 859//884 875//885 -f 885//871 884//882 899//886 -f 880//883 879//881 895//887 -f 875//885 874//888 890//889 -f 886//874 885//871 900//890 -f 881//872 880//883 896//891 -f 876//873 875//885 891//892 -f 887//877 886//874 901//893 -f 882//878 881//872 896//891 -f 877//875 876//873 892//894 -f 888//895 887//877 902//896 -f 883//880 882//878 897//897 -f 878//879 877//875 893//898 -f 884//882 883//880 898//899 -f 879//881 878//879 894//900 -f 899//886 898//899 913//901 -f 894//900 893//898 909//902 -f 900//890 899//886 914//903 -f 895//887 894//900 910//904 -f 890//889 889//905 905//906 -f 901//893 900//890 915//907 -f 896//891 895//887 911//908 -f 891//892 890//889 906//909 -f 902//896 901//893 916//910 -f 897//897 896//891 911//908 -f 892//894 891//892 907//911 -f 903//912 902//896 917//913 -f 898//899 897//897 912//914 -f 893//898 892//894 908//915 -f 907//911 906//909 922//916 -f 918//917 917//913 932//918 -f 913//901 912//914 927//919 -f 908//915 907//911 923//920 -f 914//903 913//901 928//921 -f 909//902 908//915 924//922 -f 915//907 914//903 929//923 -f 910//904 909//902 925//924 -f 905//906 904//925 920//926 -f 916//910 915//907 930//927 -f 911//908 910//904 926//928 -f 906//909 905//906 921//929 -f 917//913 916//910 931//930 -f 912//914 911//908 926//928 -f 926//928 925//924 942//931 -f 921//929 920//926 937//932 -f 932//918 931//930 947//933 -f 927//919 926//928 943//934 -f 922//916 921//929 938//935 -f 933//936 932//918 948//937 -f 928//921 927//919 943//934 -f 923//920 922//916 939//938 -f 929//923 928//921 944//939 -f 924//922 923//920 940//940 -f 930//927 929//923 945//941 -f 925//924 924//922 941//942 -f 920//926 919//943 936//944 -f 931//930 930//927 946//945 -f 946//945 945//941 960//946 -f 941//942 940//940 956//947 -f 936//944 935//948 951//949 -f 947//933 946//945 961//950 -f 942//931 941//942 957//951 -f 937//932 936//944 952//952 -f 948//937 947//933 962//953 -f 943//934 942//931 958//954 -f 938//935 937//932 953//955 -f 949//956 948//937 963//957 -f 944//939 943//934 959//958 -f 939//938 938//935 954//959 -f 945//941 944//939 960//946 -f 940//940 939//938 955//960 -f 813//961 497//502 512//503 -f 483//487 934//962 498//488 -f 813//961 512//503 527//521 -f 498//488 934//962 513//514 -f 513//514 934//962 528//532 -f 813//961 527//521 542//539 -f 813//961 542//539 557//542 -f 528//532 934//962 543//550 -f 813//961 557//542 572//561 -f 543//550 934//962 558//569 -f 813//961 572//561 587//581 -f 558//569 934//962 573//574 -f 573//574 934//962 588//592 -f 813//961 587//581 602//599 -f 813//961 602//599 617//619 -f 588//592 934//962 603//627 -f 813//961 617//619 632//638 -f 603//627 934//962 618//631 -f 813//961 632//638 647//656 -f 618//631 934//962 633//649 -f 633//649 934//962 648//667 -f 813//961 647//656 662//674 -f 813//961 662//674 677//679 -f 648//667 934//962 663//687 -f 813//961 677//679 692//699 -f 663//687 934//962 678//691 -f 813//961 692//699 707//717 -f 678//691 934//962 693//709 -f 693//709 934//962 708//727 -f 813//961 707//717 722//735 -f 813//961 722//735 737//736 -f 708//727 934//962 723//728 -f 813//961 737//736 752//740 -f 723//728 934//962 738//748 -f 813//961 752//740 767//759 -f 738//748 934//962 753//766 -f 753//766 934//962 768//769 -f 813//961 767//759 782//777 -f 813//961 782//777 797//795 -f 768//769 934//962 783//787 -f 813//961 797//795 812//800 -f 783//787 934//962 798//807 -f 813//961 812//800 828//819 -f 798//807 934//962 814//826 -f 814//826 934//962 829//829 -f 813//961 828//819 843//837 -f 813//961 843//837 858//858 -f 829//829 934//962 844//866 -f 813//961 858//858 873//876 -f 844//866 934//962 859//884 -f 813//961 873//876 888//895 -f 859//884 934//962 874//888 -f 813//961 888//895 903//912 -f 874//888 934//962 889//905 -f 813//961 903//912 918//917 -f 889//905 934//962 904//925 -f 813//961 918//917 933//936 -f 904//925 934//962 919//943 -f 813//961 933//936 949//956 -f 919//943 934//962 935//948 -f 813//961 949//956 964//963 -f 935//948 934//962 950//964 -f 813//961 964//963 497//502 -f 960//946 959//958 493//508 -f 955//960 954//959 487//506 -f 950//964 934//962 483//487 -f 961//950 960//946 494//490 -f 956//947 955//960 489//483 -f 951//949 950//964 483//487 -f 962//953 961//950 495//489 -f 957//951 956//947 490//492 -f 952//952 951//949 484//486 -f 963//957 962//953 496//496 -f 958//954 957//951 491//498 -f 953//955 952//952 485//494 -f 964//963 963//957 497//502 -f 959//958 958//954 492//504 -f 954//959 953//955 486//500 -f 971//483 970//484 985//485 -f 966//486 965//487 980//965 -f 977//489 976//966 992//967 -f 972//492 971//483 987//968 -f 967//494 966//486 981//969 -f 978//496 977//489 993//497 -f 973//498 972//492 988//499 -f 968//500 967//494 982//970 -f 979//971 978//496 994//503 -f 974//504 973//498 989//505 -f 969//506 968//500 983//507 -f 975//972 974//504 990//509 -f 970//484 969//506 984//510 -f 976//966 975//972 991//511 -f 986//512 985//485 1000//973 -f 981//969 980//965 995//514 -f 992//967 991//511 1007//974 -f 987//968 986//512 1002//516 -f 982//970 981//969 996//517 -f 993//497 992//967 1008//975 -f 988//499 987//968 1003//519 -f 983//507 982//970 997//976 -f 994//503 993//497 1009//977 -f 989//505 988//499 1004//522 -f 984//510 983//507 998//523 -f 990//509 989//505 1005//978 -f 985//485 984//510 999//525 -f 991//511 990//509 1006//526 -f 1005//978 1004//522 1020//527 -f 1000//973 999//525 1014//528 -f 1006//526 1005//978 1021//979 -f 1001//530 1000//973 1015//531 -f 996//517 995//514 1010//532 -f 1007//974 1006//526 1022//533 -f 1002//516 1001//530 1017//534 -f 997//976 996//517 1011//535 -f 1008//975 1007//974 1023//980 -f 1003//519 1002//516 1018//981 -f 998//523 997//976 1012//538 -f 1009//977 1008//975 1024//539 -f 1004//522 1003//519 1019//540 -f 999//525 998//523 1013//541 -f 1024//539 1023//980 1039//982 -f 1019//540 1018//981 1034//543 -f 1014//528 1013//541 1028//544 -f 1020//527 1019//540 1035//545 -f 1015//531 1014//528 1029//546 -f 1021//979 1020//527 1036//547 -f 1016//983 1015//531 1030//549 -f 1011//535 1010//532 1025//550 -f 1022//533 1021//979 1037//984 -f 1017//534 1016//983 1032//552 -f 1012//538 1011//535 1026//553 -f 1023//980 1022//533 1038//554 -f 1018//981 1017//534 1033//555 -f 1013//541 1012//538 1027//985 -f 1027//985 1026//553 1041//557 -f 1038//554 1037//984 1053//558 -f 1033//555 1032//552 1048//986 -f 1028//544 1027//985 1042//560 -f 1039//982 1038//554 1054//561 -f 1034//543 1033//555 1049//562 -f 1029//546 1028//544 1043//563 -f 1035//545 1034//543 1050//564 -f 1030//549 1029//546 1044//565 -f 1036//547 1035//545 1051//987 -f 1031//988 1030//549 1045//568 -f 1026//553 1025//550 1040//569 -f 1037//984 1036//547 1052//989 -f 1032//552 1031//988 1047//990 -f 1046//572 1045//568 1060//573 -f 1041//557 1040//569 1055//574 -f 1052//989 1051//987 1067//991 -f 1047//990 1046//572 1062//576 -f 1042//560 1041//557 1056//577 -f 1053//558 1052//989 1068//578 -f 1048//986 1047//990 1063//579 -f 1043//563 1042//560 1057//580 -f 1054//561 1053//558 1069//581 -f 1049//562 1048//986 1064//582 -f 1044//565 1043//563 1058//583 -f 1050//564 1049//562 1065//584 -f 1045//568 1044//565 1059//992 -f 1051//987 1050//564 1066//586 -f 1065//584 1064//582 1080//993 -f 1060//573 1059//992 1075//994 -f 1066//586 1065//584 1081//589 -f 1061//590 1060//573 1076//591 -f 1056//577 1055//574 1070//995 -f 1067//991 1066//586 1082//593 -f 1062//576 1061//590 1077//594 -f 1057//580 1056//577 1071//595 -f 1068//578 1067//991 1083//996 -f 1063//579 1062//576 1078//597 -f 1058//583 1057//580 1072//598 -f 1069//581 1068//578 1084//599 -f 1064//582 1063//579 1079//600 -f 1059//992 1058//583 1073//997 -f 1084//599 1083//996 1098//602 -f 1079//600 1078//597 1093//998 -f 1074//604 1073//997 1089//999 -f 1080//993 1079//600 1094//606 -f 1075//994 1074//604 1090//607 -f 1081//589 1080//993 1095//1000 -f 1076//591 1075//994 1091//609 -f 1071//595 1070//995 1086//1001 -f 1082//593 1081//589 1096//611 -f 1077//594 1076//591 1092//1002 -f 1072//598 1071//595 1087//613 -f 1083//996 1082//593 1097//614 -f 1078//597 1077//594 1093//998 -f 1073//997 1072//598 1088//615 -f 1098//602 1097//614 1112//1003 -f 1093//998 1092//1002 1107//617 -f 1088//615 1087//613 1103//618 -f 1099//619 1098//602 1113//620 -f 1094//606 1093//998 1108//1004 -f 1089//999 1088//615 1104//622 -f 1095//1000 1094//606 1109//623 -f 1090//607 1089//999 1105//1005 -f 1096//611 1095//1000 1110//625 -f 1091//609 1090//607 1106//626 -f 1086//1001 1085//627 1101//1006 -f 1097//614 1096//611 1111//1007 -f 1092//1002 1091//609 1107//617 -f 1087//613 1086//1001 1102//630 -f 1101//1006 1100//1008 1116//632 -f 1112//1003 1111//1007 1126//633 -f 1107//617 1106//626 1122//634 -f 1102//630 1101//1006 1117//1009 -f 1113//620 1112//1003 1127//636 -f 1108//1004 1107//617 1122//634 -f 1103//618 1102//630 1118//1010 -f 1114//1011 1113//620 1128//639 -f 1109//623 1108//1004 1123//640 -f 1104//622 1103//618 1119//641 -f 1110//625 1109//623 1124//1012 -f 1105//1005 1104//622 1120//643 -f 1111//1007 1110//625 1125//644 -f 1106//626 1105//1005 1121//645 -f 1120//643 1119//641 1135//1013 -f 1126//633 1125//644 1140//1014 -f 1121//645 1120//643 1136//648 -f 1116//632 1115//649 1131//1015 -f 1127//636 1126//633 1141//1016 -f 1122//634 1121//645 1137//652 -f 1117//1009 1116//632 1132//653 -f 1128//639 1127//636 1142//654 -f 1123//640 1122//634 1137//652 -f 1118//1010 1117//1009 1133//655 -f 1129//656 1128//639 1143//1017 -f 1124//1012 1123//640 1138//658 -f 1119//641 1118//1010 1134//1018 -f 1125//644 1124//1012 1139//660 -f 1139//660 1138//658 1153//1019 -f 1134//1018 1133//655 1149//662 -f 1140//1014 1139//660 1154//663 -f 1135//1013 1134//1018 1150//664 -f 1141//1016 1140//1014 1155//1020 -f 1136//648 1135//1013 1151//666 -f 1131//1015 1130//1021 1146//1022 -f 1142//654 1141//1016 1156//669 -f 1137//652 1136//648 1152//670 -f 1132//653 1131//1015 1147//671 -f 1143//1017 1142//654 1157//672 -f 1138//658 1137//652 1152//670 -f 1133//655 1132//653 1148//673 -f 1144//1023 1143//1017 1158//1024 -f 1158//1024 1157//672 1172//676 -f 1153//1019 1152//670 1167//1025 -f 1148//673 1147//671 1163//678 -f 1159//1026 1158//1024 1173//680 -f 1154//663 1153//1019 1168//681 -f 1149//662 1148//673 1164//1027 -f 1155//1020 1154//663 1169//683 -f 1150//664 1149//662 1165//684 -f 1156//669 1155//1020 1170//685 -f 1151//666 1150//664 1166//686 -f 1146//1022 1145//1028 1161//688 -f 1157//672 1156//669 1171//1029 -f 1152//670 1151//666 1167//1025 -f 1147//671 1146//1022 1162//690 -f 1161//688 1160//691 1176//692 -f 1172//676 1171//1029 1186//693 -f 1167//1025 1166//686 1181//694 -f 1162//690 1161//688 1177//1030 -f 1173//680 1172//676 1187//696 -f 1168//681 1167//1025 1182//697 -f 1163//678 1162//690 1178//1031 -f 1174//699 1173//680 1188//1032 -f 1169//683 1168//681 1183//701 -f 1164//1027 1163//678 1179//702 -f 1170//685 1169//683 1184//703 -f 1165//684 1164//1027 1180//704 -f 1171//1029 1170//685 1185//705 -f 1166//686 1165//684 1181//694 -f 1180//704 1179//702 1194//1033 -f 1186//693 1185//705 1200//707 -f 1181//694 1180//704 1195//708 -f 1176//692 1175//709 1191//1034 -f 1187//696 1186//693 1201//1035 -f 1182//697 1181//694 1196//1036 -f 1177//1030 1176//692 1192//713 -f 1188//1032 1187//696 1202//714 -f 1183//701 1182//697 1197//1037 -f 1178//1031 1177//1030 1193//716 -f 1189//1038 1188//1032 1203//718 -f 1184//703 1183//701 1198//1039 -f 1179//702 1178//1031 1194//1033 -f 1185//705 1184//703 1199//720 -f 1199//720 1198//1039 1213//721 -f 1194//1033 1193//716 1208//722 -f 1200//707 1199//720 1215//723 -f 1195//708 1194//1033 1209//724 -f 1201//1035 1200//707 1216//725 -f 1196//1036 1195//708 1210//726 -f 1191//1034 1190//727 1205//1040 -f 1202//714 1201//1035 1217//729 -f 1197//1037 1196//1036 1211//730 -f 1192//713 1191//1034 1206//731 -f 1203//718 1202//714 1218//732 -f 1198//1039 1197//1037 1212//733 -f 1193//716 1192//713 1207//734 -f 1204//735 1203//718 1219//736 -f 1218//732 1217//729 1233//737 -f 1213//721 1212//733 1227//738 -f 1208//722 1207//734 1222//739 -f 1219//736 1218//732 1234//740 -f 1214//741 1213//721 1229//742 -f 1209//724 1208//722 1223//743 -f 1215//723 1214//741 1230//744 -f 1210//726 1209//724 1224//745 -f 1216//725 1215//723 1231//746 -f 1211//730 1210//726 1225//747 -f 1206//731 1205//1040 1220//748 -f 1217//729 1216//725 1232//749 -f 1212//733 1211//730 1226//1041 -f 1207//734 1206//731 1221//1042 -f 1232//749 1231//746 1247//1043 -f 1227//738 1226//1041 1241//753 -f 1222//739 1221//1042 1236//1044 -f 1233//737 1232//749 1248//755 -f 1228//1045 1227//738 1242//757 -f 1223//743 1222//739 1237//1046 -f 1234//740 1233//737 1249//759 -f 1229//742 1228//1045 1244//1047 -f 1224//745 1223//743 1238//761 -f 1230//744 1229//742 1245//762 -f 1225//747 1224//745 1239//763 -f 1231//746 1230//744 1246//764 -f 1226//1041 1225//747 1240//765 -f 1221//1042 1220//748 1235//1048 -f 1246//764 1245//762 1261//1049 -f 1241//753 1240//765 1255//768 -f 1236//1044 1235//1048 1250//1050 -f 1247//1043 1246//764 1262//770 -f 1242//757 1241//753 1256//1051 -f 1237//1046 1236//1044 1251//1052 -f 1248//755 1247//1043 1263//1053 -f 1243//774 1242//757 1257//1054 -f 1238//761 1237//1046 1252//1055 -f 1249//759 1248//755 1264//1056 -f 1244//1047 1243//774 1259//778 -f 1239//763 1238//761 1253//1057 -f 1245//762 1244//1047 1260//780 -f 1240//765 1239//763 1254//781 -f 1254//781 1253//1057 1268//782 -f 1260//780 1259//778 1275//783 -f 1255//768 1254//781 1269//1058 -f 1261//1049 1260//780 1276//785 -f 1256//1051 1255//768 1270//1059 -f 1251//1052 1250//1050 1265//1060 -f 1262//770 1261//1049 1277//1061 -f 1257//1054 1256//1051 1271//789 -f 1252//1055 1251//1052 1266//790 -f 1263//1053 1262//770 1278//791 -f 1258//792 1257//1054 1272//1062 -f 1253//1057 1252//1055 1267//794 -f 1264//1056 1263//1053 1279//795 -f 1259//778 1258//792 1274//796 -f 1273//797 1272//1062 1287//798 -f 1268//782 1267//794 1282//799 -f 1279//795 1278//791 1294//1063 -f 1274//796 1273//797 1289//801 -f 1269//1058 1268//782 1283//802 -f 1275//783 1274//796 1290//803 -f 1270//1059 1269//1058 1284//804 -f 1276//785 1275//783 1291//805 -f 1271//789 1270//1059 1285//806 -f 1266//790 1265//1060 1280//1064 -f 1277//1061 1276//785 1292//808 -f 1272//1062 1271//789 1286//1065 -f 1267//794 1266//790 1281//810 -f 1278//791 1277//1061 1293//811 -f 1292//808 1291//805 1308//1066 -f 1287//798 1286//1065 1302//813 -f 1282//799 1281//810 1297//814 -f 1293//811 1292//808 1309//815 -f 1288//816 1287//798 1303//817 -f 1283//802 1282//799 1298//1067 -f 1294//1063 1293//811 1310//1068 -f 1289//801 1288//816 1305//820 -f 1284//804 1283//802 1299//821 -f 1290//803 1289//801 1306//822 -f 1285//806 1284//804 1300//823 -f 1291//805 1290//803 1307//824 -f 1286//1065 1285//806 1301//825 -f 1281//810 1280//1064 1296//1069 -f 1307//824 1306//822 1322//1070 -f 1302//813 1301//825 1316//1071 -f 1297//814 1296//1069 1311//829 -f 1308//1066 1307//824 1323//830 -f 1303//817 1302//813 1317//1072 -f 1298//1067 1297//814 1312//1073 -f 1309//815 1308//1066 1324//833 -f 1304//834 1303//817 1318//835 -f 1299//821 1298//1067 1313//836 -f 1310//1068 1309//815 1325//1074 -f 1305//820 1304//834 1319//838 -f 1300//823 1299//821 1314//839 -f 1306//822 1305//820 1320//840 -f 1301//825 1300//823 1315//1075 -f 1315//1075 1314//839 1330//1076 -f 1321//843 1320//840 1335//844 -f 1316//1071 1315//1075 1331//845 -f 1322//1070 1321//843 1336//1077 -f 1317//1072 1316//1071 1332//1078 -f 1312//1073 1311//829 1327//848 -f 1323//830 1322//1070 1337//849 -f 1318//835 1317//1072 1332//1078 -f 1313//836 1312//1073 1328//850 -f 1324//833 1323//830 1338//851 -f 1319//838 1318//835 1333//852 -f 1314//839 1313//836 1329//853 -f 1325//1074 1324//833 1339//1079 -f 1320//840 1319//838 1334//855 -f 1334//855 1333//852 1348//856 -f 1329//853 1328//850 1344//857 -f 1340//858 1339//1079 1354//859 -f 1335//844 1334//855 1349//860 -f 1330//1076 1329//853 1345//861 -f 1336//1077 1335//844 1350//862 -f 1331//845 1330//1076 1346//863 -f 1337//849 1336//1077 1351//864 -f 1332//1078 1331//845 1347//1080 -f 1327//848 1326//866 1342//867 -f 1338//851 1337//849 1352//868 -f 1333//852 1332//1078 1348//856 -f 1328//850 1327//848 1343//869 -f 1339//1079 1338//851 1353//870 -f 1353//870 1352//868 1367//1081 -f 1348//856 1347//1080 1363//872 -f 1343//869 1342//867 1358//873 -f 1354//859 1353//870 1368//874 -f 1349//860 1348//856 1363//872 -f 1344//857 1343//869 1359//875 -f 1355//1082 1354//859 1369//877 -f 1350//862 1349//860 1364//878 -f 1345//861 1344//857 1360//1083 -f 1351//864 1350//862 1365//880 -f 1346//863 1345//861 1361//1084 -f 1352//868 1351//864 1366//1085 -f 1347//1080 1346//863 1362//883 -f 1342//867 1341//884 1357//885 -f 1367//1081 1366//1085 1381//1086 -f 1362//883 1361//1084 1377//1087 -f 1357//885 1356//888 1372//889 -f 1368//874 1367//1081 1382//1088 -f 1363//872 1362//883 1378//891 -f 1358//873 1357//885 1373//1089 -f 1369//877 1368//874 1383//893 -f 1364//878 1363//872 1378//891 -f 1359//875 1358//873 1374//894 -f 1370//895 1369//877 1384//896 -f 1365//880 1364//878 1379//897 -f 1360//1083 1359//875 1375//1090 -f 1366//1085 1365//880 1380//899 -f 1361//1084 1360//1083 1376//900 -f 1381//1086 1380//899 1395//901 -f 1376//900 1375//1090 1391//902 -f 1382//1088 1381//1086 1396//1091 -f 1377//1087 1376//900 1392//904 -f 1372//889 1371//1092 1387//1093 -f 1383//893 1382//1088 1397//907 -f 1378//891 1377//1087 1393//908 -f 1373//1089 1372//889 1388//909 -f 1384//896 1383//893 1398//910 -f 1379//897 1378//891 1393//908 -f 1374//894 1373//1089 1389//911 -f 1385//912 1384//896 1399//913 -f 1380//899 1379//897 1394//914 -f 1375//1090 1374//894 1390//1094 -f 1389//911 1388//909 1404//916 -f 1400//1095 1399//913 1414//1096 -f 1395//901 1394//914 1409//919 -f 1390//1094 1389//911 1405//920 -f 1396//1091 1395//901 1410//921 -f 1391//902 1390//1094 1406//922 -f 1397//907 1396//1091 1411//1097 -f 1392//904 1391//902 1407//924 -f 1387//1093 1386//1098 1402//1099 -f 1398//910 1397//907 1412//927 -f 1393//908 1392//904 1408//1100 -f 1388//909 1387//1093 1403//929 -f 1399//913 1398//910 1413//930 -f 1394//914 1393//908 1408//1100 -f 1408//1100 1407//924 1424//931 -f 1403//929 1402//1099 1419//932 -f 1414//1096 1413//930 1429//1101 -f 1409//919 1408//1100 1425//934 -f 1404//916 1403//929 1420//935 -f 1415//936 1414//1096 1430//937 -f 1410//921 1409//919 1425//934 -f 1405//920 1404//916 1421//938 -f 1411//1097 1410//921 1426//939 -f 1406//922 1405//920 1422//940 -f 1412//927 1411//1097 1427//941 -f 1407//924 1406//922 1423//942 -f 1402//1099 1401//943 1418//1102 -f 1413//930 1412//927 1428//945 -f 1428//945 1427//941 1442//946 -f 1423//942 1422//940 1438//1103 -f 1418//1102 1417//1104 1433//949 -f 1429//1101 1428//945 1443//950 -f 1424//931 1423//942 1439//951 -f 1419//932 1418//1102 1434//952 -f 1430//937 1429//1101 1444//953 -f 1425//934 1424//931 1440//954 -f 1420//935 1419//932 1435//955 -f 1431//956 1430//937 1445//1105 -f 1426//939 1425//934 1441//958 -f 1421//938 1420//935 1436//959 -f 1427//941 1426//939 1442//946 -f 1422//940 1421//938 1437//960 -f 1295//961 979//971 994//503 -f 965//487 1416//962 980//965 -f 1295//961 994//503 1009//977 -f 980//965 1416//962 995//514 -f 995//514 1416//962 1010//532 -f 1295//961 1009//977 1024//539 -f 1295//961 1024//539 1039//982 -f 1010//532 1416//962 1025//550 -f 1295//961 1039//982 1054//561 -f 1025//550 1416//962 1040//569 -f 1295//961 1054//561 1069//581 -f 1040//569 1416//962 1055//574 -f 1055//574 1416//962 1070//995 -f 1295//961 1069//581 1084//599 -f 1295//961 1084//599 1099//619 -f 1070//995 1416//962 1085//627 -f 1295//961 1099//619 1114//1011 -f 1085//627 1416//962 1100//1008 -f 1295//961 1114//1011 1129//656 -f 1100//1008 1416//962 1115//649 -f 1115//649 1416//962 1130//1021 -f 1295//961 1129//656 1144//1023 -f 1295//961 1144//1023 1159//1026 -f 1130//1021 1416//962 1145//1028 -f 1295//961 1159//1026 1174//699 -f 1145//1028 1416//962 1160//691 -f 1295//961 1174//699 1189//1038 -f 1160//691 1416//962 1175//709 -f 1175//709 1416//962 1190//727 -f 1295//961 1189//1038 1204//735 -f 1295//961 1204//735 1219//736 -f 1190//727 1416//962 1205//1040 -f 1295//961 1219//736 1234//740 -f 1205//1040 1416//962 1220//748 -f 1295//961 1234//740 1249//759 -f 1220//748 1416//962 1235//1048 -f 1235//1048 1416//962 1250//1050 -f 1295//961 1249//759 1264//1056 -f 1295//961 1264//1056 1279//795 -f 1250//1050 1416//962 1265//1060 -f 1295//961 1279//795 1294//1063 -f 1265//1060 1416//962 1280//1064 -f 1295//961 1294//1063 1310//1068 -f 1280//1064 1416//962 1296//1069 -f 1296//1069 1416//962 1311//829 -f 1295//961 1310//1068 1325//1074 -f 1295//961 1325//1074 1340//858 -f 1311//829 1416//962 1326//866 -f 1295//961 1340//858 1355//1082 -f 1326//866 1416//962 1341//884 -f 1295//961 1355//1082 1370//895 -f 1341//884 1416//962 1356//888 -f 1295//961 1370//895 1385//912 -f 1356//888 1416//962 1371//1092 -f 1295//961 1385//912 1400//1095 -f 1371//1092 1416//962 1386//1098 -f 1295//961 1400//1095 1415//936 -f 1386//1098 1416//962 1401//943 -f 1295//961 1415//936 1431//956 -f 1401//943 1416//962 1417//1104 -f 1295//961 1431//956 1446//1106 -f 1417//1104 1416//962 1432//964 -f 1295//961 1446//1106 979//971 -f 1442//946 1441//958 975//972 -f 1437//960 1436//959 969//506 -f 1432//964 1416//962 965//487 -f 1443//950 1442//946 976//966 -f 1438//1103 1437//960 971//483 -f 1433//949 1432//964 965//487 -f 1444//953 1443//950 977//489 -f 1439//951 1438//1103 972//492 -f 1434//952 1433//949 966//486 -f 1445//1105 1444//953 978//496 -f 1440//954 1439//951 973//498 -f 1435//955 1434//952 967//494 -f 1446//1106 1445//1105 979//971 -f 1441//958 1440//954 974//504 -f 1436//959 1435//955 968//500 -f 504//512 489//483 503//485 -f 499//495 484//486 498//488 -f 494//490 509//511 510//491 -f 489//483 504//512 505//493 -f 500//501 485//494 499//495 -f 495//489 510//491 511//497 -f 490//492 505//493 506//499 -f 501//507 486//500 500//501 -f 496//496 511//497 512//503 -f 491//498 506//499 507//505 -f 502//510 487//506 501//507 -f 492//504 507//505 508//509 -f 503//485 488//484 502//510 -f 493//508 508//509 509//511 -f 519//530 504//512 518//513 -f 514//517 499//495 513//514 -f 509//511 524//526 525//515 -f 504//512 519//530 520//516 -f 515//520 500//501 514//517 -f 510//491 525//515 526//518 -f 505//493 520//516 521//519 -f 516//523 501//507 515//520 -f 511//497 526//518 527//521 -f 506//499 521//519 522//522 -f 517//525 502//510 516//523 -f 507//505 522//522 523//524 -f 518//513 503//485 517//525 -f 508//509 523//524 524//526 -f 522//522 537//540 538//527 -f 533//531 518//513 532//528 -f 523//524 538//527 539//529 -f 534//548 519//530 533//531 -f 529//535 514//517 528//532 -f 524//526 539//529 540//533 -f 519//530 534//548 535//534 -f 530//538 515//520 529//535 -f 525//515 540//533 541//536 -f 520//516 535//534 536//537 -f 531//541 516//523 530//538 -f 526//518 541//536 542//539 -f 521//519 536//537 537//540 -f 532//528 517//525 531//541 -f 541//536 556//554 557//542 -f 536//537 551//555 552//543 -f 547//546 532//528 546//544 -f 537//540 552//543 553//545 -f 548//549 533//531 547//546 -f 538//527 553//545 554//547 -f 549//567 534//548 548//549 -f 544//553 529//535 543//550 -f 539//529 554//547 555//551 -f 534//548 549//567 550//552 -f 545//556 530//538 544//553 -f 540//533 555//551 556//554 -f 535//534 550//552 551//555 -f 546//544 531//541 545//556 -f 560//560 545//556 559//557 -f 555//551 570//570 571//558 -f 550//552 565//571 566//559 -f 561//563 546//544 560//560 -f 556//554 571//558 572//561 -f 551//555 566//559 567//562 -f 562//565 547//546 561//563 -f 552//543 567//562 568//564 -f 563//568 548//549 562//565 -f 553//545 568//564 569//566 -f 564//572 549//567 563//568 -f 559//557 544//553 558//569 -f 554//547 569//566 570//570 -f 549//567 564//572 565//571 -f 579//590 564//572 578//573 -f 574//577 559//557 573//574 -f 569//566 584//586 585//575 -f 564//572 579//590 580//576 -f 575//580 560//560 574//577 -f 570//570 585//575 586//578 -f 565//571 580//576 581//579 -f 576//583 561//563 575//580 -f 571//558 586//578 587//581 -f 566//559 581//579 582//582 -f 577//585 562//565 576//583 -f 567//562 582//582 583//584 -f 578//573 563//568 577//585 -f 568//564 583//584 584//586 -f 582//582 597//600 598//587 -f 577//585 592//604 593//588 -f 583//584 598//587 599//589 -f 578//573 593//588 594//591 -f 589//595 574//577 588//592 -f 584//586 599//589 600//593 -f 579//590 594//591 595//594 -f 590//598 575//580 589//595 -f 585//575 600//593 601//596 -f 580//576 595//594 596//597 -f 591//601 576//583 590//598 -f 586//578 601//596 602//599 -f 581//579 596//597 597//600 -f 592//604 577//585 591//601 -f 617//619 602//599 616//602 -f 612//606 597//600 611//603 -f 591//601 606//615 607//605 -f 613//608 598//587 612//606 -f 592//604 607//605 608//607 -f 614//611 599//589 613//608 -f 593//588 608//607 609//609 -f 588//592 603//627 604//610 -f 615//614 600//593 614//611 -f 594//591 609//609 610//612 -f 589//595 604//610 605//613 -f 616//602 601//596 615//614 -f 595//594 610//612 611//603 -f 590//598 605//613 606//615 -f 631//620 616//602 630//616 -f 626//621 611//603 625//617 -f 605//613 620//630 621//618 -f 632//638 617//619 631//620 -f 627//623 612//606 626//621 -f 606//615 621//618 622//622 -f 628//625 613//608 627//623 -f 607//605 622//622 623//624 -f 629//629 614//611 628//625 -f 608//607 623//624 624//626 -f 603//627 618//631 619//628 -f 630//616 615//614 629//629 -f 609//609 624//626 625//617 -f 604//610 619//628 620//630 -f 618//631 633//649 634//632 -f 645//636 630//616 644//633 -f 624//626 639//645 640//634 -f 619//628 634//632 635//635 -f 646//639 631//620 645//636 -f 641//640 626//621 640//634 -f 620//630 635//635 636//637 -f 647//656 632//638 646//639 -f 642//642 627//623 641//640 -f 621//618 636//637 637//641 -f 643//644 628//625 642//642 -f 622//622 637//641 638//643 -f 644//633 629//629 643//644 -f 623//624 638//643 639//645 -f 637//641 652//659 653//646 -f 659//651 644//633 658//647 -f 638//643 653//646 654//648 -f 633//649 648//667 649//650 -f 660//654 645//636 659//651 -f 639//645 654//648 655//652 -f 634//632 649//650 650//653 -f 661//657 646//639 660//654 -f 656//658 641//640 655//652 -f 635//635 650//653 651//655 -f 662//674 647//656 661//657 -f 657//660 642//642 656//658 -f 636//637 651//655 652//659 -f 658//647 643//644 657//660 -f 672//663 657//660 671//661 -f 651//655 666//673 667//662 -f 673//665 658//647 672//663 -f 652//659 667//662 668//664 -f 674//669 659//651 673//665 -f 653//646 668//664 669//666 -f 648//667 663//687 664//668 -f 675//672 660//654 674//669 -f 654//648 669//666 670//670 -f 649//650 664//668 665//671 -f 676//675 661//657 675//672 -f 671//661 656//658 670//670 -f 650//653 665//671 666//673 -f 677//679 662//674 676//675 -f 691//680 676//675 690//676 -f 686//681 671//661 685//677 -f 665//671 680//690 681//678 -f 692//699 677//679 691//680 -f 687//683 672//663 686//681 -f 666//673 681//678 682//682 -f 688//685 673//665 687//683 -f 667//662 682//682 683//684 -f 689//689 674//669 688//685 -f 668//664 683//684 684//686 -f 663//687 678//691 679//688 -f 690//676 675//672 689//689 -f 669//666 684//686 685//677 -f 664//668 679//688 680//690 -f 678//691 693//709 694//692 -f 705//696 690//676 704//693 -f 700//697 685//677 699//694 -f 679//688 694//692 695//695 -f 706//700 691//680 705//696 -f 701//701 686//681 700//697 -f 680//690 695//695 696//698 -f 707//717 692//699 706//700 -f 702//703 687//683 701//701 -f 681//678 696//698 697//702 -f 703//705 688//685 702//703 -f 682//682 697//702 698//704 -f 704//693 689//689 703//705 -f 683//684 698//704 699//694 -f 713//708 698//704 712//706 -f 719//711 704//693 718//707 -f 714//712 699//694 713//708 -f 693//709 708//727 709//710 -f 720//714 705//696 719//711 -f 715//715 700//697 714//712 -f 694//692 709//710 710//713 -f 721//718 706//700 720//714 -f 716//719 701//701 715//715 -f 695//695 710//713 711//716 -f 722//735 707//717 721//718 -f 717//720 702//703 716//719 -f 696//698 711//716 712//706 -f 718//707 703//705 717//720 -f 732//741 717//720 731//721 -f 727//724 712//706 726//722 -f 717//720 732//741 733//723 -f 728//726 713//708 727//724 -f 718//707 733//723 734//725 -f 729//730 714//712 728//726 -f 724//731 709//710 723//728 -f 719//711 734//725 735//729 -f 730//733 715//715 729//730 -f 725//734 710//713 724//731 -f 720//714 735//729 736//732 -f 731//721 716//719 730//733 -f 726//722 711//716 725//734 -f 721//718 736//732 737//736 -f 735//729 750//749 751//737 -f 746//756 731//721 745//738 -f 741//743 726//722 740//739 -f 736//732 751//737 752//740 -f 731//721 746//756 747//742 -f 742//745 727//724 741//743 -f 732//741 747//742 748//744 -f 743//747 728//726 742//745 -f 733//723 748//744 749//746 -f 744//750 729//730 743//747 -f 739//751 724//731 738//748 -f 734//725 749//746 750//749 -f 745//738 730//733 744//750 -f 740//739 725//734 739//751 -f 749//746 764//764 765//752 -f 760//757 745//738 759//753 -f 755//758 740//739 754//754 -f 750//749 765//752 766//755 -f 761//774 746//756 760//757 -f 756//761 741//743 755//758 -f 751//737 766//755 767//759 -f 746//756 761//774 762//760 -f 757//763 742//745 756//761 -f 747//742 762//760 763//762 -f 758//765 743//747 757//763 -f 748//744 763//762 764//764 -f 759//753 744//750 758//765 -f 754//754 739//751 753//766 -f 763//762 778//780 779//767 -f 774//771 759//753 773//768 -f 769//772 754//754 768//769 -f 764//764 779//767 780//770 -f 775//775 760//757 774//771 -f 770//776 755//758 769//772 -f 765//752 780//770 781//773 -f 776//792 761//774 775//775 -f 771//779 756//761 770//776 -f 766//755 781//773 782//777 -f 761//774 776//792 777//778 -f 772//781 757//763 771//779 -f 762//760 777//778 778//780 -f 773//768 758//765 772//781 -f 787//784 772//781 786//782 -f 777//778 792//796 793//783 -f 788//786 773//768 787//784 -f 778//780 793//783 794//785 -f 789//789 774//771 788//786 -f 784//790 769//772 783//787 -f 779//767 794//785 795//788 -f 790//793 775//775 789//789 -f 785//794 770//776 784//790 -f 780//770 795//788 796//791 -f 791//797 776//792 790//793 -f 786//782 771//779 785//794 -f 781//773 796//791 797//795 -f 776//792 791//797 792//796 -f 806//816 791//797 805//798 -f 801//802 786//782 800//799 -f 796//791 811//811 812//800 -f 791//797 806//816 807//801 -f 802//804 787//784 801//802 -f 792//796 807//801 808//803 -f 803//806 788//786 802//804 -f 793//783 808//803 809//805 -f 804//809 789//789 803//806 -f 799//810 784//790 798//807 -f 794//785 809//805 810//808 -f 805//798 790//793 804//809 -f 800//799 785//794 799//810 -f 795//788 810//808 811//811 -f 809//805 825//824 826//812 -f 821//817 805//798 820//813 -f 816//818 800//799 815//814 -f 810//808 826//812 827//815 -f 822//834 806//816 821//817 -f 817//821 801//802 816//818 -f 811//811 827//815 828//819 -f 806//816 822//834 823//820 -f 818//823 802//804 817//821 -f 807//801 823//820 824//822 -f 819//825 803//806 818//823 -f 808//803 824//822 825//824 -f 820//813 804//809 819//825 -f 815//814 799//810 814//826 -f 824//822 839//843 840//827 -f 835//831 820//813 834//828 -f 830//832 815//814 829//829 -f 825//824 840//827 841//830 -f 836//835 821//817 835//831 -f 831//836 816//818 830//832 -f 826//812 841//830 842//833 -f 837//838 822//834 836//835 -f 832//839 817//821 831//836 -f 827//815 842//833 843//837 -f 838//840 823//820 837//838 -f 833//841 818//823 832//839 -f 839//843 824//822 838//840 -f 834//828 819//825 833//841 -f 832//839 847//853 848//842 -f 854//846 839//843 853//844 -f 833//841 848//842 849//845 -f 855//849 840//827 854//846 -f 834//828 849//845 850//847 -f 829//829 844//866 845//848 -f 856//851 841//830 855//849 -f 851//852 836//835 850//847 -f 830//832 845//848 846//850 -f 857//854 842//833 856//851 -f 852//855 837//838 851//852 -f 831//836 846//850 847//853 -f 858//858 843//837 857//854 -f 853//844 838//840 852//855 -f 867//860 852//855 866//856 -f 846//850 861//869 862//857 -f 873//876 858//858 872//859 -f 868//862 853//844 867//860 -f 847//853 862//857 863//861 -f 869//864 854//846 868//862 -f 848//842 863//861 864//863 -f 870//868 855//849 869//864 -f 849//845 864//863 865//865 -f 844//866 859//884 860//867 -f 871//870 856//851 870//868 -f 850//847 865//865 866//856 -f 845//848 860//867 861//869 -f 872//859 857//854 871//870 -f 886//874 871//870 885//871 -f 865//865 880//883 881//872 -f 860//867 875//885 876//873 -f 887//877 872//859 886//874 -f 882//878 867//860 881//872 -f 861//869 876//873 877//875 -f 888//895 873//876 887//877 -f 883//880 868//862 882//878 -f 862//857 877//875 878//879 -f 884//882 869//864 883//880 -f 863//861 878//879 879//881 -f 885//871 870//868 884//882 -f 864//863 879//881 880//883 -f 859//884 874//888 875//885 -f 900//890 885//871 899//886 -f 879//881 894//900 895//887 -f 874//888 889//905 890//889 -f 901//893 886//874 900//890 -f 880//883 895//887 896//891 -f 875//885 890//889 891//892 -f 902//896 887//877 901//893 -f 897//897 882//878 896//891 -f 876//873 891//892 892//894 -f 903//912 888//895 902//896 -f 898//899 883//880 897//897 -f 877//875 892//894 893//898 -f 899//886 884//882 898//899 -f 878//879 893//898 894//900 -f 914//903 899//886 913//901 -f 893//898 908//915 909//902 -f 915//907 900//890 914//903 -f 894//900 909//902 910//904 -f 889//905 904//925 905//906 -f 916//910 901//893 915//907 -f 895//887 910//904 911//908 -f 890//889 905//906 906//909 -f 917//913 902//896 916//910 -f 912//914 897//897 911//908 -f 891//892 906//909 907//911 -f 918//917 903//912 917//913 -f 913//901 898//899 912//914 -f 892//894 907//911 908//915 -f 906//909 921//929 922//916 -f 933//936 918//917 932//918 -f 928//921 913//901 927//919 -f 907//911 922//916 923//920 -f 929//923 914//903 928//921 -f 908//915 923//920 924//922 -f 930//927 915//907 929//923 -f 909//902 924//922 925//924 -f 904//925 919//943 920//926 -f 931//930 916//910 930//927 -f 910//904 925//924 926//928 -f 905//906 920//926 921//929 -f 932//918 917//913 931//930 -f 927//919 912//914 926//928 -f 925//924 941//942 942//931 -f 920//926 936//944 937//932 -f 948//937 932//918 947//933 -f 926//928 942//931 943//934 -f 921//929 937//932 938//935 -f 949//956 933//936 948//937 -f 944//939 928//921 943//934 -f 922//916 938//935 939//938 -f 945//941 929//923 944//939 -f 923//920 939//938 940//940 -f 946//945 930//927 945//941 -f 924//922 940//940 941//942 -f 919//943 935//948 936//944 -f 947//933 931//930 946//945 -f 961//950 946//945 960//946 -f 940//940 955//960 956//947 -f 935//948 950//964 951//949 -f 962//953 947//933 961//950 -f 941//942 956//947 957//951 -f 936//944 951//949 952//952 -f 963//957 948//937 962//953 -f 942//931 957//951 958//954 -f 937//932 952//952 953//955 -f 964//963 949//956 963//957 -f 943//934 958//954 959//958 -f 938//935 953//955 954//959 -f 944//939 959//958 960//946 -f 939//938 954//959 955//960 -f 959//958 492//504 493//508 -f 488//484 955//960 487//506 -f 960//946 493//508 494//490 -f 955//960 488//484 489//483 -f 484//486 951//949 483//487 -f 961//950 494//490 495//489 -f 956//947 489//483 490//492 -f 485//494 952//952 484//486 -f 962//953 495//489 496//496 -f 957//951 490//492 491//498 -f 486//500 953//955 485//494 -f 963//957 496//496 497//502 -f 958//954 491//498 492//504 -f 487//506 954//959 486//500 -f 986//512 971//483 985//485 -f 981//969 966//486 980//965 -f 976//966 991//511 992//967 -f 971//483 986//512 987//968 -f 982//970 967//494 981//969 -f 977//489 992//967 993//497 -f 972//492 987//968 988//499 -f 983//507 968//500 982//970 -f 978//496 993//497 994//503 -f 973//498 988//499 989//505 -f 984//510 969//506 983//507 -f 974//504 989//505 990//509 -f 985//485 970//484 984//510 -f 975//972 990//509 991//511 -f 1001//530 986//512 1000//973 -f 996//517 981//969 995//514 -f 991//511 1006//526 1007//974 -f 986//512 1001//530 1002//516 -f 997//976 982//970 996//517 -f 992//967 1007//974 1008//975 -f 987//968 1002//516 1003//519 -f 998//523 983//507 997//976 -f 993//497 1008//975 1009//977 -f 988//499 1003//519 1004//522 -f 999//525 984//510 998//523 -f 989//505 1004//522 1005//978 -f 1000//973 985//485 999//525 -f 990//509 1005//978 1006//526 -f 1004//522 1019//540 1020//527 -f 1015//531 1000//973 1014//528 -f 1005//978 1020//527 1021//979 -f 1016//983 1001//530 1015//531 -f 1011//535 996//517 1010//532 -f 1006//526 1021//979 1022//533 -f 1001//530 1016//983 1017//534 -f 1012//538 997//976 1011//535 -f 1007//974 1022//533 1023//980 -f 1002//516 1017//534 1018//981 -f 1013//541 998//523 1012//538 -f 1008//975 1023//980 1024//539 -f 1003//519 1018//981 1019//540 -f 1014//528 999//525 1013//541 -f 1023//980 1038//554 1039//982 -f 1018//981 1033//555 1034//543 -f 1029//546 1014//528 1028//544 -f 1019//540 1034//543 1035//545 -f 1030//549 1015//531 1029//546 -f 1020//527 1035//545 1036//547 -f 1031//988 1016//983 1030//549 -f 1026//553 1011//535 1025//550 -f 1021//979 1036//547 1037//984 -f 1016//983 1031//988 1032//552 -f 1027//985 1012//538 1026//553 -f 1022//533 1037//984 1038//554 -f 1017//534 1032//552 1033//555 -f 1028//544 1013//541 1027//985 -f 1042//560 1027//985 1041//557 -f 1037//984 1052//989 1053//558 -f 1032//552 1047//990 1048//986 -f 1043//563 1028//544 1042//560 -f 1038//554 1053//558 1054//561 -f 1033//555 1048//986 1049//562 -f 1044//565 1029//546 1043//563 -f 1034//543 1049//562 1050//564 -f 1045//568 1030//549 1044//565 -f 1035//545 1050//564 1051//987 -f 1046//572 1031//988 1045//568 -f 1041//557 1026//553 1040//569 -f 1036//547 1051//987 1052//989 -f 1031//988 1046//572 1047//990 -f 1061//590 1046//572 1060//573 -f 1056//577 1041//557 1055//574 -f 1051//987 1066//586 1067//991 -f 1046//572 1061//590 1062//576 -f 1057//580 1042//560 1056//577 -f 1052//989 1067//991 1068//578 -f 1047//990 1062//576 1063//579 -f 1058//583 1043//563 1057//580 -f 1053//558 1068//578 1069//581 -f 1048//986 1063//579 1064//582 -f 1059//992 1044//565 1058//583 -f 1049//562 1064//582 1065//584 -f 1060//573 1045//568 1059//992 -f 1050//564 1065//584 1066//586 -f 1064//582 1079//600 1080//993 -f 1059//992 1074//604 1075//994 -f 1065//584 1080//993 1081//589 -f 1060//573 1075//994 1076//591 -f 1071//595 1056//577 1070//995 -f 1066//586 1081//589 1082//593 -f 1061//590 1076//591 1077//594 -f 1072//598 1057//580 1071//595 -f 1067//991 1082//593 1083//996 -f 1062//576 1077//594 1078//597 -f 1073//997 1058//583 1072//598 -f 1068//578 1083//996 1084//599 -f 1063//579 1078//597 1079//600 -f 1074//604 1059//992 1073//997 -f 1099//619 1084//599 1098//602 -f 1094//606 1079//600 1093//998 -f 1073//997 1088//615 1089//999 -f 1095//1000 1080//993 1094//606 -f 1074//604 1089//999 1090//607 -f 1096//611 1081//589 1095//1000 -f 1075//994 1090//607 1091//609 -f 1070//995 1085//627 1086//1001 -f 1097//614 1082//593 1096//611 -f 1076//591 1091//609 1092//1002 -f 1071//595 1086//1001 1087//613 -f 1098//602 1083//996 1097//614 -f 1077//594 1092//1002 1093//998 -f 1072//598 1087//613 1088//615 -f 1113//620 1098//602 1112//1003 -f 1108//1004 1093//998 1107//617 -f 1087//613 1102//630 1103//618 -f 1114//1011 1099//619 1113//620 -f 1109//623 1094//606 1108//1004 -f 1088//615 1103//618 1104//622 -f 1110//625 1095//1000 1109//623 -f 1089//999 1104//622 1105//1005 -f 1111//1007 1096//611 1110//625 -f 1090//607 1105//1005 1106//626 -f 1085//627 1100//1008 1101//1006 -f 1112//1003 1097//614 1111//1007 -f 1091//609 1106//626 1107//617 -f 1086//1001 1101//1006 1102//630 -f 1100//1008 1115//649 1116//632 -f 1127//636 1112//1003 1126//633 -f 1106//626 1121//645 1122//634 -f 1101//1006 1116//632 1117//1009 -f 1128//639 1113//620 1127//636 -f 1123//640 1108//1004 1122//634 -f 1102//630 1117//1009 1118//1010 -f 1129//656 1114//1011 1128//639 -f 1124//1012 1109//623 1123//640 -f 1103//618 1118//1010 1119//641 -f 1125//644 1110//625 1124//1012 -f 1104//622 1119//641 1120//643 -f 1126//633 1111//1007 1125//644 -f 1105//1005 1120//643 1121//645 -f 1119//641 1134//1018 1135//1013 -f 1141//1016 1126//633 1140//1014 -f 1120//643 1135//1013 1136//648 -f 1115//649 1130//1021 1131//1015 -f 1142//654 1127//636 1141//1016 -f 1121//645 1136//648 1137//652 -f 1116//632 1131//1015 1132//653 -f 1143//1017 1128//639 1142//654 -f 1138//658 1123//640 1137//652 -f 1117//1009 1132//653 1133//655 -f 1144//1023 1129//656 1143//1017 -f 1139//660 1124//1012 1138//658 -f 1118//1010 1133//655 1134//1018 -f 1140//1014 1125//644 1139//660 -f 1154//663 1139//660 1153//1019 -f 1133//655 1148//673 1149//662 -f 1155//1020 1140//1014 1154//663 -f 1134//1018 1149//662 1150//664 -f 1156//669 1141//1016 1155//1020 -f 1135//1013 1150//664 1151//666 -f 1130//1021 1145//1028 1146//1022 -f 1157//672 1142//654 1156//669 -f 1136//648 1151//666 1152//670 -f 1131//1015 1146//1022 1147//671 -f 1158//1024 1143//1017 1157//672 -f 1153//1019 1138//658 1152//670 -f 1132//653 1147//671 1148//673 -f 1159//1026 1144//1023 1158//1024 -f 1173//680 1158//1024 1172//676 -f 1168//681 1153//1019 1167//1025 -f 1147//671 1162//690 1163//678 -f 1174//699 1159//1026 1173//680 -f 1169//683 1154//663 1168//681 -f 1148//673 1163//678 1164//1027 -f 1170//685 1155//1020 1169//683 -f 1149//662 1164//1027 1165//684 -f 1171//1029 1156//669 1170//685 -f 1150//664 1165//684 1166//686 -f 1145//1028 1160//691 1161//688 -f 1172//676 1157//672 1171//1029 -f 1151//666 1166//686 1167//1025 -f 1146//1022 1161//688 1162//690 -f 1160//691 1175//709 1176//692 -f 1187//696 1172//676 1186//693 -f 1182//697 1167//1025 1181//694 -f 1161//688 1176//692 1177//1030 -f 1188//1032 1173//680 1187//696 -f 1183//701 1168//681 1182//697 -f 1162//690 1177//1030 1178//1031 -f 1189//1038 1174//699 1188//1032 -f 1184//703 1169//683 1183//701 -f 1163//678 1178//1031 1179//702 -f 1185//705 1170//685 1184//703 -f 1164//1027 1179//702 1180//704 -f 1186//693 1171//1029 1185//705 -f 1165//684 1180//704 1181//694 -f 1195//708 1180//704 1194//1033 -f 1201//1035 1186//693 1200//707 -f 1196//1036 1181//694 1195//708 -f 1175//709 1190//727 1191//1034 -f 1202//714 1187//696 1201//1035 -f 1197//1037 1182//697 1196//1036 -f 1176//692 1191//1034 1192//713 -f 1203//718 1188//1032 1202//714 -f 1198//1039 1183//701 1197//1037 -f 1177//1030 1192//713 1193//716 -f 1204//735 1189//1038 1203//718 -f 1199//720 1184//703 1198//1039 -f 1178//1031 1193//716 1194//1033 -f 1200//707 1185//705 1199//720 -f 1214//741 1199//720 1213//721 -f 1209//724 1194//1033 1208//722 -f 1199//720 1214//741 1215//723 -f 1210//726 1195//708 1209//724 -f 1200//707 1215//723 1216//725 -f 1211//730 1196//1036 1210//726 -f 1206//731 1191//1034 1205//1040 -f 1201//1035 1216//725 1217//729 -f 1212//733 1197//1037 1211//730 -f 1207//734 1192//713 1206//731 -f 1202//714 1217//729 1218//732 -f 1213//721 1198//1039 1212//733 -f 1208//722 1193//716 1207//734 -f 1203//718 1218//732 1219//736 -f 1217//729 1232//749 1233//737 -f 1228//1045 1213//721 1227//738 -f 1223//743 1208//722 1222//739 -f 1218//732 1233//737 1234//740 -f 1213//721 1228//1045 1229//742 -f 1224//745 1209//724 1223//743 -f 1214//741 1229//742 1230//744 -f 1225//747 1210//726 1224//745 -f 1215//723 1230//744 1231//746 -f 1226//1041 1211//730 1225//747 -f 1221//1042 1206//731 1220//748 -f 1216//725 1231//746 1232//749 -f 1227//738 1212//733 1226//1041 -f 1222//739 1207//734 1221//1042 -f 1231//746 1246//764 1247//1043 -f 1242//757 1227//738 1241//753 -f 1237//1046 1222//739 1236//1044 -f 1232//749 1247//1043 1248//755 -f 1243//774 1228//1045 1242//757 -f 1238//761 1223//743 1237//1046 -f 1233//737 1248//755 1249//759 -f 1228//1045 1243//774 1244//1047 -f 1239//763 1224//745 1238//761 -f 1229//742 1244//1047 1245//762 -f 1240//765 1225//747 1239//763 -f 1230//744 1245//762 1246//764 -f 1241//753 1226//1041 1240//765 -f 1236//1044 1221//1042 1235//1048 -f 1245//762 1260//780 1261//1049 -f 1256//1051 1241//753 1255//768 -f 1251//1052 1236//1044 1250//1050 -f 1246//764 1261//1049 1262//770 -f 1257//1054 1242//757 1256//1051 -f 1252//1055 1237//1046 1251//1052 -f 1247//1043 1262//770 1263//1053 -f 1258//792 1243//774 1257//1054 -f 1253//1057 1238//761 1252//1055 -f 1248//755 1263//1053 1264//1056 -f 1243//774 1258//792 1259//778 -f 1254//781 1239//763 1253//1057 -f 1244//1047 1259//778 1260//780 -f 1255//768 1240//765 1254//781 -f 1269//1058 1254//781 1268//782 -f 1259//778 1274//796 1275//783 -f 1270//1059 1255//768 1269//1058 -f 1260//780 1275//783 1276//785 -f 1271//789 1256//1051 1270//1059 -f 1266//790 1251//1052 1265//1060 -f 1261//1049 1276//785 1277//1061 -f 1272//1062 1257//1054 1271//789 -f 1267//794 1252//1055 1266//790 -f 1262//770 1277//1061 1278//791 -f 1273//797 1258//792 1272//1062 -f 1268//782 1253//1057 1267//794 -f 1263//1053 1278//791 1279//795 -f 1258//792 1273//797 1274//796 -f 1288//816 1273//797 1287//798 -f 1283//802 1268//782 1282//799 -f 1278//791 1293//811 1294//1063 -f 1273//797 1288//816 1289//801 -f 1284//804 1269//1058 1283//802 -f 1274//796 1289//801 1290//803 -f 1285//806 1270//1059 1284//804 -f 1275//783 1290//803 1291//805 -f 1286//1065 1271//789 1285//806 -f 1281//810 1266//790 1280//1064 -f 1276//785 1291//805 1292//808 -f 1287//798 1272//1062 1286//1065 -f 1282//799 1267//794 1281//810 -f 1277//1061 1292//808 1293//811 -f 1291//805 1307//824 1308//1066 -f 1303//817 1287//798 1302//813 -f 1298//1067 1282//799 1297//814 -f 1292//808 1308//1066 1309//815 -f 1304//834 1288//816 1303//817 -f 1299//821 1283//802 1298//1067 -f 1293//811 1309//815 1310//1068 -f 1288//816 1304//834 1305//820 -f 1300//823 1284//804 1299//821 -f 1289//801 1305//820 1306//822 -f 1301//825 1285//806 1300//823 -f 1290//803 1306//822 1307//824 -f 1302//813 1286//1065 1301//825 -f 1297//814 1281//810 1296//1069 -f 1306//822 1321//843 1322//1070 -f 1317//1072 1302//813 1316//1071 -f 1312//1073 1297//814 1311//829 -f 1307//824 1322//1070 1323//830 -f 1318//835 1303//817 1317//1072 -f 1313//836 1298//1067 1312//1073 -f 1308//1066 1323//830 1324//833 -f 1319//838 1304//834 1318//835 -f 1314//839 1299//821 1313//836 -f 1309//815 1324//833 1325//1074 -f 1320//840 1305//820 1319//838 -f 1315//1075 1300//823 1314//839 -f 1321//843 1306//822 1320//840 -f 1316//1071 1301//825 1315//1075 -f 1314//839 1329//853 1330//1076 -f 1336//1077 1321//843 1335//844 -f 1315//1075 1330//1076 1331//845 -f 1337//849 1322//1070 1336//1077 -f 1316//1071 1331//845 1332//1078 -f 1311//829 1326//866 1327//848 -f 1338//851 1323//830 1337//849 -f 1333//852 1318//835 1332//1078 -f 1312//1073 1327//848 1328//850 -f 1339//1079 1324//833 1338//851 -f 1334//855 1319//838 1333//852 -f 1313//836 1328//850 1329//853 -f 1340//858 1325//1074 1339//1079 -f 1335//844 1320//840 1334//855 -f 1349//860 1334//855 1348//856 -f 1328//850 1343//869 1344//857 -f 1355//1082 1340//858 1354//859 -f 1350//862 1335//844 1349//860 -f 1329//853 1344//857 1345//861 -f 1351//864 1336//1077 1350//862 -f 1330//1076 1345//861 1346//863 -f 1352//868 1337//849 1351//864 -f 1331//845 1346//863 1347//1080 -f 1326//866 1341//884 1342//867 -f 1353//870 1338//851 1352//868 -f 1332//1078 1347//1080 1348//856 -f 1327//848 1342//867 1343//869 -f 1354//859 1339//1079 1353//870 -f 1368//874 1353//870 1367//1081 -f 1347//1080 1362//883 1363//872 -f 1342//867 1357//885 1358//873 -f 1369//877 1354//859 1368//874 -f 1364//878 1349//860 1363//872 -f 1343//869 1358//873 1359//875 -f 1370//895 1355//1082 1369//877 -f 1365//880 1350//862 1364//878 -f 1344//857 1359//875 1360//1083 -f 1366//1085 1351//864 1365//880 -f 1345//861 1360//1083 1361//1084 -f 1367//1081 1352//868 1366//1085 -f 1346//863 1361//1084 1362//883 -f 1341//884 1356//888 1357//885 -f 1382//1088 1367//1081 1381//1086 -f 1361//1084 1376//900 1377//1087 -f 1356//888 1371//1092 1372//889 -f 1383//893 1368//874 1382//1088 -f 1362//883 1377//1087 1378//891 -f 1357//885 1372//889 1373//1089 -f 1384//896 1369//877 1383//893 -f 1379//897 1364//878 1378//891 -f 1358//873 1373//1089 1374//894 -f 1385//912 1370//895 1384//896 -f 1380//899 1365//880 1379//897 -f 1359//875 1374//894 1375//1090 -f 1381//1086 1366//1085 1380//899 -f 1360//1083 1375//1090 1376//900 -f 1396//1091 1381//1086 1395//901 -f 1375//1090 1390//1094 1391//902 -f 1397//907 1382//1088 1396//1091 -f 1376//900 1391//902 1392//904 -f 1371//1092 1386//1098 1387//1093 -f 1398//910 1383//893 1397//907 -f 1377//1087 1392//904 1393//908 -f 1372//889 1387//1093 1388//909 -f 1399//913 1384//896 1398//910 -f 1394//914 1379//897 1393//908 -f 1373//1089 1388//909 1389//911 -f 1400//1095 1385//912 1399//913 -f 1395//901 1380//899 1394//914 -f 1374//894 1389//911 1390//1094 -f 1388//909 1403//929 1404//916 -f 1415//936 1400//1095 1414//1096 -f 1410//921 1395//901 1409//919 -f 1389//911 1404//916 1405//920 -f 1411//1097 1396//1091 1410//921 -f 1390//1094 1405//920 1406//922 -f 1412//927 1397//907 1411//1097 -f 1391//902 1406//922 1407//924 -f 1386//1098 1401//943 1402//1099 -f 1413//930 1398//910 1412//927 -f 1392//904 1407//924 1408//1100 -f 1387//1093 1402//1099 1403//929 -f 1414//1096 1399//913 1413//930 -f 1409//919 1394//914 1408//1100 -f 1407//924 1423//942 1424//931 -f 1402//1099 1418//1102 1419//932 -f 1430//937 1414//1096 1429//1101 -f 1408//1100 1424//931 1425//934 -f 1403//929 1419//932 1420//935 -f 1431//956 1415//936 1430//937 -f 1426//939 1410//921 1425//934 -f 1404//916 1420//935 1421//938 -f 1427//941 1411//1097 1426//939 -f 1405//920 1421//938 1422//940 -f 1428//945 1412//927 1427//941 -f 1406//922 1422//940 1423//942 -f 1401//943 1417//1104 1418//1102 -f 1429//1101 1413//930 1428//945 -f 1443//950 1428//945 1442//946 -f 1422//940 1437//960 1438//1103 -f 1417//1104 1432//964 1433//949 -f 1444//953 1429//1101 1443//950 -f 1423//942 1438//1103 1439//951 -f 1418//1102 1433//949 1434//952 -f 1445//1105 1430//937 1444//953 -f 1424//931 1439//951 1440//954 -f 1419//932 1434//952 1435//955 -f 1446//1106 1431//956 1445//1105 -f 1425//934 1440//954 1441//958 -f 1420//935 1435//955 1436//959 -f 1426//939 1441//958 1442//946 -f 1421//938 1436//959 1437//960 -f 1441//958 974//504 975//972 -f 970//484 1437//960 969//506 -f 1442//946 975//972 976//966 -f 1437//960 970//484 971//483 -f 966//486 1433//949 965//487 -f 1443//950 976//966 977//489 -f 1438//1103 971//483 972//492 -f 967//494 1434//952 966//486 -f 1444//953 977//489 978//496 -f 1439//951 972//492 973//498 -f 968//500 1435//955 967//494 -f 1445//1105 978//496 979//971 -f 1440//954 973//498 974//504 -f 969//506 1436//959 968//500 -o Foot_R_Sphere.013 -v 1.070087 0.436287 -0.613739 -v 1.067775 0.408819 -0.597702 -v 1.067363 0.383059 -0.583396 -v 1.068870 0.359998 -0.571371 -v 1.072236 0.340521 -0.562090 -v 1.077332 0.325377 -0.555908 -v 1.083963 0.315147 -0.553064 -v 1.091874 0.310225 -0.553667 -v 1.100760 0.310801 -0.557693 -v 1.110280 0.316851 -0.564988 -v 1.120069 0.328144 -0.575272 -v 1.129750 0.344245 -0.588149 -v 1.138951 0.364536 -0.603124 -v 1.147318 0.388237 -0.619623 -v 1.154530 0.414437 -0.637010 -v 1.070029 0.435806 -0.617730 -v 1.067660 0.407876 -0.605530 -v 1.067197 0.381690 -0.594761 -v 1.068659 0.358255 -0.585837 -v 1.071988 0.338472 -0.579100 -v 1.077056 0.323099 -0.574808 -v 1.083670 0.312730 -0.573128 -v 1.091575 0.307761 -0.574124 -v 1.100467 0.308383 -0.577757 -v 1.110004 0.314574 -0.583888 -v 1.119821 0.326095 -0.592281 -v 1.129539 0.342502 -0.602614 -v 1.138785 0.363167 -0.614490 -v 1.147204 0.387294 -0.627451 -v 1.154472 0.413956 -0.641001 -v 1.070163 0.436416 -0.622236 -v 1.067924 0.409072 -0.614368 -v 1.067580 0.383428 -0.607592 -v 1.069145 0.360466 -0.602167 -v 1.072560 0.341072 -0.598302 -v 1.077693 0.325989 -0.596145 -v 1.084346 0.315797 -0.595780 -v 1.092264 0.310888 -0.597219 -v 1.101142 0.311450 -0.600408 -v 1.110641 0.317463 -0.605225 -v 1.120393 0.328695 -0.611484 -v 1.130026 0.344713 -0.618945 -v 1.139167 0.364904 -0.627320 -v 1.147467 0.388490 -0.636289 -v 1.154606 0.414566 -0.645507 -v 1.070485 0.438093 -0.627082 -v 1.068555 0.412363 -0.623876 -v 1.068496 0.388205 -0.621395 -v 1.070312 0.366547 -0.619735 -v 1.073931 0.348221 -0.618960 -v 1.079216 0.333933 -0.619099 -v 1.085963 0.324230 -0.620147 -v 1.093913 0.319486 -0.622064 -v 1.102760 0.319884 -0.624776 -v 1.112164 0.325407 -0.628179 -v 1.121764 0.335844 -0.632142 -v 1.131192 0.350794 -0.636513 -v 1.140084 0.369681 -0.641123 -v 1.148098 0.391781 -0.645797 -v 1.154928 0.416243 -0.650353 -v 1.070982 0.440774 -0.632085 -v 1.069529 0.417621 -0.633688 -v 1.069911 0.395838 -0.635640 -v 1.072112 0.376262 -0.637865 -v 1.076049 0.359645 -0.640278 -v 1.081569 0.346627 -0.642787 -v 1.088461 0.337706 -0.645294 -v 1.096459 0.333226 -0.647703 -v 1.105257 0.333360 -0.649923 -v 1.114517 0.338101 -0.651867 -v 1.123882 0.347268 -0.653460 -v 1.132992 0.360509 -0.654643 -v 1.141498 0.377315 -0.655368 -v 1.149073 0.397039 -0.655609 -v 1.155425 0.418924 -0.655356 -v 1.071635 0.444354 -0.637050 -v 1.070810 0.424644 -0.643427 -v 1.071770 0.406034 -0.649779 -v 1.074478 0.389240 -0.655861 -v 1.078831 0.374905 -0.661439 -v 1.084660 0.363582 -0.666299 -v 1.091742 0.355706 -0.670255 -v 1.099805 0.351579 -0.673153 -v 1.108539 0.351360 -0.674883 -v 1.117608 0.355057 -0.675379 -v 1.126664 0.362528 -0.674621 -v 1.135358 0.373487 -0.672638 -v 1.143357 0.387511 -0.669507 -v 1.150353 0.404062 -0.665348 -v 1.156078 0.422504 -0.660321 -v 1.072418 0.448697 -0.641787 -v 1.072347 0.433163 -0.652719 -v 1.074001 0.418402 -0.663269 -v 1.077318 0.404980 -0.673030 -v 1.082170 0.393414 -0.681628 -v 1.088371 0.384149 -0.688732 -v 1.095682 0.377539 -0.694069 -v 1.103822 0.373840 -0.697434 -v 1.112479 0.373193 -0.698698 -v 1.121319 0.375623 -0.697812 -v 1.130004 0.381037 -0.694810 -v 1.138198 0.389227 -0.689808 -v 1.145589 0.399878 -0.682997 -v 1.151890 0.412581 -0.674640 -v 1.156861 0.426847 -0.665058 -v 1.073303 0.453636 -0.646114 -v 1.074082 0.442850 -0.661207 -v 1.076520 0.432465 -0.675592 -v 1.080524 0.422879 -0.688714 -v 1.085940 0.414462 -0.700070 -v 1.092559 0.407535 -0.709224 -v 1.100128 0.402366 -0.715823 -v 1.108355 0.399153 -0.719615 -v 1.116925 0.398020 -0.720452 -v 1.125507 0.399010 -0.718304 -v 1.133773 0.402085 -0.713252 -v 1.141404 0.407126 -0.705492 -v 1.148107 0.413942 -0.695320 -v 1.153625 0.422268 -0.683128 -v 1.157746 0.431786 -0.669385 -v 1.074254 0.458980 -0.649865 -v 1.075948 0.453333 -0.668565 -v 1.079229 0.447684 -0.686273 -v 1.083971 0.442249 -0.702309 -v 1.089994 0.437238 -0.716057 -v 1.097064 0.432843 -0.726987 -v 1.104910 0.429232 -0.734680 -v 1.113231 0.426546 -0.738841 -v 1.121707 0.424886 -0.739309 -v 1.130012 0.424317 -0.736067 -v 1.137827 0.424861 -0.729239 -v 1.144851 0.426496 -0.719087 -v 1.150816 0.429160 -0.706001 -v 1.155491 0.432751 -0.690486 -v 1.158697 0.437130 -0.673136 -v 1.075235 0.464524 -0.652895 -v 1.077873 0.464209 -0.674509 -v 1.082023 0.463473 -0.694903 -v 1.087528 0.462345 -0.713293 -v 1.094176 0.460868 -0.728972 -v 1.101711 0.459099 -0.741338 -v 1.109844 0.457106 -0.749916 -v 1.118261 0.454966 -0.754375 -v 1.126640 0.452760 -0.754545 -v 1.134659 0.450574 -0.750418 -v 1.142009 0.448491 -0.742154 -v 1.148408 0.446592 -0.730071 -v 1.153611 0.444949 -0.714632 -v 1.157416 0.443626 -0.696430 -v 1.159678 0.442674 -0.676166 -v 1.076209 0.470056 -0.655089 -v 1.079783 0.475059 -0.678813 -v 1.084797 0.479226 -0.701150 -v 1.091058 0.482394 -0.721244 -v 1.098327 0.484444 -0.738322 -v 1.106323 0.485295 -0.751727 -v 1.114740 0.484916 -0.760944 -v 1.123253 0.483320 -0.765619 -v 1.131536 0.480569 -0.765573 -v 1.139271 0.476770 -0.760807 -v 1.146160 0.472067 -0.751504 -v 1.151938 0.466641 -0.738022 -v 1.156384 0.460702 -0.720879 -v 1.159326 0.454477 -0.700733 -v 1.160652 0.448206 -0.678360 -v 1.077138 0.475362 -0.656361 -v 1.081605 0.485468 -0.681309 -v 1.087442 0.494337 -0.704774 -v 1.094425 0.501627 -0.725857 -v 1.102286 0.507059 -0.743745 -v 1.110722 0.510424 -0.757753 -v 1.119410 0.511593 -0.767341 -v 1.128015 0.510520 -0.772142 -v 1.136207 0.507246 -0.771970 -v 1.143670 0.501899 -0.766833 -v 1.150119 0.494682 -0.756927 -v 1.155306 0.485874 -0.742634 -v 1.159030 0.475813 -0.724503 -v 1.161149 0.464886 -0.703229 -v 1.161581 0.453512 -0.679632 -v 1.077987 0.480239 -0.656664 -v 1.083269 0.495035 -0.681902 -v 1.089858 0.508226 -0.705636 -v 1.097500 0.519305 -0.726953 -v 1.105902 0.527846 -0.745034 -v 1.114740 0.533521 -0.759185 -v 1.123675 0.536112 -0.768862 -v 1.132364 0.535519 -0.773692 -v 1.140472 0.531765 -0.773491 -v 1.147688 0.524995 -0.768265 -v 1.153735 0.515469 -0.758216 -v 1.158380 0.503552 -0.743730 -v 1.161445 0.489702 -0.725364 -v 1.162813 0.474453 -0.703823 -v 1.162430 0.458389 -0.679935 -v 1.078722 0.484500 -0.655985 -v 1.084711 0.503392 -0.680570 -v 1.091952 0.520359 -0.703701 -v 1.100165 0.534747 -0.724491 -v 1.109035 0.546004 -0.742140 -v 1.118221 0.553697 -0.755969 -v 1.127371 0.557530 -0.765448 -v 1.136132 0.557357 -0.770211 -v 1.144168 0.553184 -0.770076 -v 1.151169 0.545171 -0.765049 -v 1.156868 0.533627 -0.755322 -v 1.161045 0.518994 -0.741269 -v 1.163539 0.501835 -0.723430 -v 1.164255 0.482810 -0.702490 -v 1.163165 0.462650 -0.679256 -v 1.079315 0.487980 -0.654350 -v 1.085876 0.510219 -0.677363 -v 1.093642 0.530269 -0.699046 -v 1.102317 0.547360 -0.718566 -v 1.111565 0.560836 -0.735172 -v 1.121033 0.570177 -0.748227 -v 1.130355 0.575026 -0.757229 -v 1.139175 0.575196 -0.761832 -v 1.147152 0.570680 -0.761858 -v 1.153981 0.561652 -0.757307 -v 1.159398 0.548459 -0.748354 -v 1.163197 0.531607 -0.735343 -v 1.165230 0.511746 -0.718774 -v 1.165419 0.489637 -0.699284 -v 1.163758 0.466130 -0.677621 -v 1.079745 0.490546 -0.651822 -v 1.086718 0.515252 -0.672405 -v 1.094865 0.537576 -0.691848 -v 1.103873 0.556661 -0.709405 -v 1.113395 0.571772 -0.724400 -v 1.123066 0.582329 -0.736258 -v 1.132514 0.587926 -0.744522 -v 1.141376 0.588349 -0.748876 -v 1.149311 0.583580 -0.749151 -v 1.156014 0.573803 -0.745338 -v 1.161228 0.559395 -0.737582 -v 1.164753 0.540908 -0.726182 -v 1.166453 0.519053 -0.711577 -v 1.166262 0.494670 -0.694326 -v 1.164188 0.468696 -0.675093 -v 1.079993 0.492099 -0.648499 -v 1.087206 0.518299 -0.665887 -v 1.095573 0.542000 -0.682385 -v 1.104774 0.562291 -0.697360 -v 1.114455 0.578392 -0.710237 -v 1.124243 0.589685 -0.720521 -v 1.133764 0.595735 -0.727816 -v 1.142650 0.596310 -0.731842 -v 1.150560 0.591389 -0.732445 -v 1.157191 0.581159 -0.729601 -v 1.162288 0.566015 -0.723419 -v 1.165654 0.546538 -0.714138 -v 1.167160 0.523476 -0.702113 -v 1.166749 0.497717 -0.687807 -v 1.164436 0.470249 -0.671770 -v 1.080052 0.492580 -0.644508 -v 1.087320 0.519242 -0.658058 -v 1.095739 0.543369 -0.671019 -v 1.104985 0.564033 -0.682895 -v 1.114703 0.580441 -0.693228 -v 1.124519 0.591962 -0.701621 -v 1.134057 0.598152 -0.707752 -v 1.142949 0.598775 -0.711385 -v 1.150853 0.593806 -0.712381 -v 1.157467 0.583436 -0.710701 -v 1.162536 0.568064 -0.706410 -v 1.165865 0.548280 -0.699672 -v 1.167326 0.524845 -0.690748 -v 1.166864 0.498660 -0.679979 -v 1.164495 0.470730 -0.667779 -v 1.079917 0.491970 -0.640003 -v 1.087057 0.518046 -0.649220 -v 1.095356 0.541632 -0.658189 -v 1.104498 0.561822 -0.666564 -v 1.114131 0.577841 -0.674025 -v 1.123883 0.589073 -0.680284 -v 1.133381 0.595085 -0.685101 -v 1.142260 0.595648 -0.688290 -v 1.150178 0.590739 -0.689730 -v 1.156831 0.580547 -0.689364 -v 1.161964 0.565464 -0.687207 -v 1.165378 0.546069 -0.683342 -v 1.166944 0.523108 -0.677917 -v 1.166600 0.497463 -0.671141 -v 1.164360 0.470120 -0.663274 -v 1.079596 0.490292 -0.635156 -v 1.086425 0.514755 -0.639712 -v 1.094440 0.536855 -0.644386 -v 1.103332 0.555742 -0.648996 -v 1.112759 0.570692 -0.653367 -v 1.122360 0.581128 -0.657331 -v 1.131764 0.586652 -0.660733 -v 1.140611 0.587049 -0.663445 -v 1.148561 0.582306 -0.665362 -v 1.155308 0.572603 -0.666410 -v 1.160592 0.558315 -0.666549 -v 1.164212 0.539989 -0.665774 -v 1.166028 0.518331 -0.664114 -v 1.165969 0.494173 -0.661633 -v 1.164039 0.468442 -0.658427 -v 1.079099 0.487612 -0.630154 -v 1.085451 0.509497 -0.629900 -v 1.093026 0.529221 -0.630141 -v 1.101532 0.546027 -0.630866 -v 1.110642 0.559267 -0.632049 -v 1.120007 0.568435 -0.633642 -v 1.129266 0.573176 -0.635586 -v 1.138065 0.573309 -0.637806 -v 1.146063 0.568830 -0.640215 -v 1.152955 0.559909 -0.642722 -v 1.158475 0.546890 -0.645231 -v 1.162411 0.530274 -0.647644 -v 1.164613 0.510698 -0.649869 -v 1.164994 0.488915 -0.651821 -v 1.163542 0.465762 -0.653425 -v 1.078446 0.484031 -0.625189 -v 1.084170 0.502474 -0.620161 -v 1.091167 0.519025 -0.616002 -v 1.099166 0.533049 -0.612871 -v 1.107860 0.544007 -0.610888 -v 1.116916 0.551479 -0.610130 -v 1.125985 0.555176 -0.610626 -v 1.134719 0.554956 -0.612356 -v 1.142781 0.550829 -0.615255 -v 1.149864 0.542953 -0.619210 -v 1.155693 0.531630 -0.624070 -v 1.160046 0.517296 -0.629648 -v 1.162754 0.500501 -0.635730 -v 1.163714 0.481891 -0.642082 -v 1.162889 0.462181 -0.648460 -v 1.160311 0.442129 -0.654618 -v 1.077662 0.479688 -0.620452 -v 1.082633 0.493955 -0.610869 -v 1.088935 0.506657 -0.602512 -v 1.096325 0.517308 -0.595701 -v 1.104520 0.525498 -0.590699 -v 1.113205 0.530912 -0.587697 -v 1.122045 0.533343 -0.586811 -v 1.130702 0.532696 -0.588075 -v 1.138842 0.528996 -0.591440 -v 1.146153 0.522387 -0.596777 -v 1.152353 0.513121 -0.603881 -v 1.157205 0.501555 -0.612479 -v 1.160522 0.488134 -0.622240 -v 1.162177 0.473372 -0.632790 -v 1.162105 0.457838 -0.643723 -v 1.076778 0.474750 -0.616124 -v 1.080899 0.484268 -0.602381 -v 1.086416 0.492594 -0.590189 -v 1.093120 0.499409 -0.580018 -v 1.100751 0.504451 -0.572257 -v 1.109017 0.507526 -0.567205 -v 1.117599 0.508516 -0.565057 -v 1.126169 0.507383 -0.565895 -v 1.134396 0.504170 -0.569686 -v 1.141965 0.499001 -0.576285 -v 1.148584 0.492074 -0.585439 -v 1.154000 0.483656 -0.596795 -v 1.158004 0.474071 -0.609918 -v 1.160442 0.463686 -0.624302 -v 1.161221 0.452900 -0.639395 -v 1.075827 0.469406 -0.612374 -v 1.079033 0.473785 -0.595023 -v 1.083708 0.477376 -0.579508 -v 1.089672 0.480040 -0.566422 -v 1.096697 0.481675 -0.556271 -v 1.104512 0.482218 -0.549442 -v 1.112817 0.481649 -0.546200 -v 1.121293 0.479990 -0.546668 -v 1.129614 0.477303 -0.550829 -v 1.137460 0.473693 -0.558522 -v 1.144530 0.469298 -0.569453 -v 1.150552 0.464287 -0.583200 -v 1.155295 0.458852 -0.599236 -v 1.158576 0.453203 -0.616944 -v 1.160270 0.447556 -0.635645 -v 1.074845 0.463862 -0.609343 -v 1.077108 0.462909 -0.589079 -v 1.080913 0.461586 -0.570878 -v 1.086115 0.459944 -0.555438 -v 1.092515 0.458045 -0.543355 -v 1.099865 0.455962 -0.535091 -v 1.107883 0.453776 -0.530965 -v 1.116263 0.451570 -0.531134 -v 1.124680 0.449430 -0.535594 -v 1.132813 0.447437 -0.544171 -v 1.140348 0.445668 -0.556537 -v 1.146995 0.444191 -0.572216 -v 1.152500 0.443063 -0.590606 -v 1.156651 0.442327 -0.611000 -v 1.159288 0.442012 -0.632614 -v 1.073872 0.458330 -0.607149 -v 1.075197 0.452059 -0.584776 -v 1.078140 0.445834 -0.564631 -v 1.082585 0.439894 -0.547487 -v 1.088364 0.434469 -0.534005 -v 1.095253 0.429766 -0.524702 -v 1.102987 0.425966 -0.519936 -v 1.111271 0.423216 -0.519890 -v 1.119784 0.421620 -0.524565 -v 1.128201 0.421241 -0.533782 -v 1.136197 0.422092 -0.547187 -v 1.143465 0.424141 -0.564265 -v 1.149727 0.427310 -0.584359 -v 1.154741 0.431476 -0.606697 -v 1.158315 0.436480 -0.630420 -v 1.072943 0.453024 -0.605877 -v 1.073375 0.441650 -0.582280 -v 1.075494 0.430722 -0.561007 -v 1.079218 0.420661 -0.542875 -v 1.084404 0.411853 -0.528582 -v 1.090853 0.404637 -0.518676 -v 1.098317 0.399289 -0.513539 -v 1.106509 0.396016 -0.513367 -v 1.115114 0.394943 -0.518168 -v 1.123801 0.396112 -0.527756 -v 1.132238 0.399476 -0.541764 -v 1.140098 0.404908 -0.559653 -v 1.147081 0.412199 -0.580735 -v 1.152919 0.421067 -0.604201 -v 1.157386 0.431174 -0.629148 -v 1.072094 0.448146 -0.605574 -v 1.071711 0.432083 -0.581686 -v 1.073078 0.416833 -0.560145 -v 1.076143 0.402984 -0.541779 -v 1.080789 0.391067 -0.527293 -v 1.086836 0.381541 -0.517244 -v 1.094052 0.374770 -0.512018 -v 1.102160 0.371017 -0.511817 -v 1.110849 0.370424 -0.516647 -v 1.119784 0.373015 -0.526324 -v 1.128622 0.378690 -0.540475 -v 1.137023 0.387231 -0.558556 -v 1.144665 0.398310 -0.579874 -v 1.151255 0.411501 -0.603607 -v 1.156537 0.426296 -0.628845 -v 1.071359 0.443886 -0.606254 -v 1.070269 0.423726 -0.583019 -v 1.070985 0.404701 -0.562080 -v 1.073479 0.387542 -0.544241 -v 1.077656 0.372909 -0.530187 -v 1.083354 0.361364 -0.520460 -v 1.090356 0.353352 -0.515433 -v 1.098392 0.349178 -0.515298 -v 1.107153 0.349005 -0.520062 -v 1.116302 0.352839 -0.529540 -v 1.125489 0.360532 -0.543369 -v 1.134359 0.371789 -0.561018 -v 1.142572 0.386177 -0.581808 -v 1.149812 0.403143 -0.604940 -v 1.155802 0.422036 -0.629525 -v 1.074213 0.464407 -0.630891 -v 1.070765 0.440406 -0.607888 -v 1.069104 0.416899 -0.586225 -v 1.069294 0.394790 -0.566735 -v 1.071327 0.374928 -0.550166 -v 1.075125 0.358077 -0.537155 -v 1.080543 0.344884 -0.528202 -v 1.087372 0.335856 -0.523651 -v 1.095349 0.331340 -0.523678 -v 1.104168 0.331510 -0.528280 -v 1.113491 0.336358 -0.537282 -v 1.122959 0.345700 -0.550337 -v 1.132207 0.359175 -0.566943 -v 1.140881 0.376267 -0.586463 -v 1.148648 0.396317 -0.608146 -v 1.155208 0.418556 -0.631159 -v 1.070336 0.437840 -0.610416 -v 1.068262 0.411866 -0.591183 -v 1.068071 0.387483 -0.573933 -v 1.069771 0.365628 -0.559327 -v 1.073295 0.347141 -0.547927 -v 1.078510 0.332732 -0.540171 -v 1.085213 0.322956 -0.536358 -v 1.093148 0.318187 -0.536633 -v 1.102010 0.318610 -0.540987 -v 1.111458 0.324207 -0.549251 -v 1.121129 0.334764 -0.561109 -v 1.130651 0.349875 -0.576104 -v 1.139659 0.368959 -0.593661 -v 1.147806 0.391284 -0.613104 -v 1.154779 0.415990 -0.633687 -v 1.075639 0.467351 -0.512964 -v 1.073326 0.439884 -0.496926 -v 1.072915 0.414124 -0.482621 -v 1.074422 0.391063 -0.470596 -v 1.077788 0.371585 -0.461315 -v 1.082884 0.356441 -0.455133 -v 1.089515 0.346212 -0.452289 -v 1.097425 0.341290 -0.452892 -v 1.106312 0.341865 -0.456918 -v 1.115832 0.347916 -0.464213 -v 1.125621 0.359208 -0.474496 -v 1.135301 0.375310 -0.487373 -v 1.144502 0.395600 -0.502349 -v 1.152870 0.419301 -0.518847 -v 1.160082 0.445501 -0.536235 -v 1.075581 0.466870 -0.516955 -v 1.073212 0.438940 -0.504755 -v 1.072749 0.412755 -0.493986 -v 1.074210 0.389320 -0.485061 -v 1.077539 0.369536 -0.478324 -v 1.082608 0.354164 -0.474033 -v 1.089222 0.343794 -0.472353 -v 1.097127 0.338825 -0.473349 -v 1.106019 0.339448 -0.476982 -v 1.115556 0.345639 -0.483113 -v 1.125372 0.357159 -0.491506 -v 1.135090 0.373567 -0.501839 -v 1.144336 0.394231 -0.513714 -v 1.152755 0.418358 -0.526676 -v 1.160024 0.445020 -0.540226 -v 1.075715 0.467480 -0.521460 -v 1.073475 0.440137 -0.513593 -v 1.073132 0.414492 -0.506817 -v 1.074697 0.391531 -0.501392 -v 1.078112 0.372136 -0.497527 -v 1.083244 0.357053 -0.495370 -v 1.089897 0.346861 -0.495004 -v 1.097815 0.341952 -0.496444 -v 1.106694 0.342515 -0.499633 -v 1.116192 0.348528 -0.504450 -v 1.125945 0.359759 -0.510709 -v 1.135577 0.375778 -0.518169 -v 1.144719 0.395968 -0.526545 -v 1.153019 0.419555 -0.535514 -v 1.160158 0.445630 -0.544731 -v 1.076037 0.469158 -0.526307 -v 1.074107 0.443428 -0.523101 -v 1.074048 0.419269 -0.520620 -v 1.075863 0.397611 -0.518960 -v 1.079483 0.379286 -0.518184 -v 1.084768 0.364997 -0.518323 -v 1.091515 0.355295 -0.519371 -v 1.099465 0.350551 -0.521288 -v 1.108312 0.350948 -0.524000 -v 1.117716 0.356472 -0.527403 -v 1.127316 0.366909 -0.531366 -v 1.136743 0.381858 -0.535737 -v 1.145635 0.400746 -0.540348 -v 1.153650 0.422845 -0.545022 -v 1.160480 0.447308 -0.549578 -v 1.076534 0.471838 -0.531309 -v 1.075081 0.448686 -0.532913 -v 1.075463 0.426903 -0.534865 -v 1.077664 0.407327 -0.537090 -v 1.081600 0.390710 -0.539503 -v 1.087121 0.377691 -0.542011 -v 1.094012 0.368770 -0.544519 -v 1.102011 0.364291 -0.546928 -v 1.110809 0.364424 -0.549147 -v 1.120069 0.369166 -0.551091 -v 1.129433 0.378333 -0.552685 -v 1.138544 0.391574 -0.553867 -v 1.147050 0.408379 -0.554593 -v 1.154625 0.428103 -0.554833 -v 1.160977 0.449988 -0.554580 -v 1.077186 0.475419 -0.536274 -v 1.076361 0.455709 -0.542652 -v 1.077322 0.437099 -0.549004 -v 1.080030 0.420304 -0.555085 -v 1.084382 0.405970 -0.560664 -v 1.090212 0.394647 -0.565524 -v 1.097294 0.386771 -0.569479 -v 1.105357 0.382644 -0.572378 -v 1.114091 0.382425 -0.574108 -v 1.123160 0.386122 -0.574604 -v 1.132215 0.393593 -0.573846 -v 1.140910 0.404551 -0.571863 -v 1.148909 0.418575 -0.568732 -v 1.155905 0.435127 -0.564573 -v 1.161629 0.453569 -0.559545 -v 1.077970 0.479762 -0.541011 -v 1.077899 0.464228 -0.551944 -v 1.079553 0.449466 -0.562494 -v 1.082870 0.436045 -0.572255 -v 1.087722 0.424479 -0.580853 -v 1.093923 0.415213 -0.587957 -v 1.101233 0.408604 -0.593294 -v 1.109374 0.404905 -0.596659 -v 1.118030 0.404258 -0.597923 -v 1.126871 0.406688 -0.597037 -v 1.135555 0.412102 -0.594035 -v 1.143750 0.420292 -0.589033 -v 1.151140 0.430943 -0.582222 -v 1.157442 0.443646 -0.573865 -v 1.162413 0.457912 -0.564282 -v 1.078855 0.484700 -0.545338 -v 1.079633 0.473915 -0.560432 -v 1.082072 0.463530 -0.574816 -v 1.086076 0.453944 -0.587939 -v 1.091491 0.445526 -0.599295 -v 1.098111 0.438600 -0.608449 -v 1.105680 0.433431 -0.615048 -v 1.113907 0.430218 -0.618839 -v 1.122476 0.429084 -0.619677 -v 1.131059 0.430074 -0.617529 -v 1.139325 0.433149 -0.612477 -v 1.146956 0.438191 -0.604716 -v 1.153659 0.445006 -0.594545 -v 1.159177 0.453332 -0.582353 -v 1.163297 0.462850 -0.568609 -v 1.079806 0.490044 -0.549089 -v 1.081499 0.484398 -0.567790 -v 1.084780 0.478748 -0.585498 -v 1.089523 0.473314 -0.601534 -v 1.095545 0.468302 -0.615281 -v 1.102615 0.463907 -0.626212 -v 1.110461 0.460297 -0.633905 -v 1.118782 0.457610 -0.638066 -v 1.127258 0.455951 -0.638534 -v 1.135563 0.455382 -0.635291 -v 1.143378 0.455925 -0.628463 -v 1.150403 0.457561 -0.618311 -v 1.156368 0.460225 -0.605226 -v 1.161043 0.463815 -0.589710 -v 1.164249 0.468194 -0.572360 -v 1.080787 0.495589 -0.552120 -v 1.083424 0.495273 -0.573734 -v 1.087575 0.494537 -0.594128 -v 1.093080 0.493409 -0.612518 -v 1.099728 0.491933 -0.628197 -v 1.107263 0.490164 -0.640563 -v 1.115395 0.488171 -0.649140 -v 1.123813 0.486030 -0.653600 -v 1.132192 0.483824 -0.653769 -v 1.140211 0.481638 -0.649643 -v 1.147561 0.479555 -0.641379 -v 1.153960 0.477656 -0.629295 -v 1.159162 0.476014 -0.613856 -v 1.162968 0.474691 -0.595655 -v 1.165230 0.473739 -0.575391 -v 1.081761 0.501120 -0.554313 -v 1.085335 0.506124 -0.578037 -v 1.090348 0.510290 -0.600375 -v 1.096610 0.513459 -0.620469 -v 1.103879 0.515508 -0.637547 -v 1.111875 0.516360 -0.650951 -v 1.120291 0.515980 -0.660169 -v 1.128805 0.514385 -0.664844 -v 1.137088 0.511634 -0.664798 -v 1.144823 0.507834 -0.660031 -v 1.151712 0.503131 -0.650728 -v 1.157490 0.497706 -0.637246 -v 1.161936 0.491767 -0.620103 -v 1.164878 0.485542 -0.599958 -v 1.166204 0.479270 -0.577584 -v 1.082690 0.506427 -0.555586 -v 1.087157 0.516533 -0.580533 -v 1.092994 0.525402 -0.603999 -v 1.099977 0.532692 -0.625081 -v 1.107838 0.538124 -0.642970 -v 1.116274 0.541489 -0.656978 -v 1.124962 0.542657 -0.666566 -v 1.133567 0.541584 -0.671367 -v 1.141758 0.538311 -0.671195 -v 1.149222 0.532963 -0.666058 -v 1.155671 0.525747 -0.656152 -v 1.160857 0.516939 -0.641859 -v 1.164581 0.506878 -0.623727 -v 1.166700 0.495951 -0.602454 -v 1.167133 0.484577 -0.578857 -v 1.083538 0.511304 -0.555888 -v 1.088821 0.526100 -0.581127 -v 1.095410 0.539290 -0.604860 -v 1.103052 0.550369 -0.626178 -v 1.111454 0.558910 -0.644259 -v 1.120292 0.564585 -0.658410 -v 1.129227 0.567176 -0.668087 -v 1.137915 0.566583 -0.672917 -v 1.146023 0.562830 -0.672716 -v 1.153240 0.556060 -0.667490 -v 1.159287 0.546533 -0.657441 -v 1.163932 0.534616 -0.642955 -v 1.166997 0.520767 -0.624589 -v 1.168365 0.505517 -0.603047 -v 1.167981 0.489454 -0.579159 -v 1.084273 0.515564 -0.555209 -v 1.090263 0.534457 -0.579794 -v 1.097503 0.551423 -0.602926 -v 1.105717 0.565811 -0.623716 -v 1.114587 0.577068 -0.641364 -v 1.123773 0.584761 -0.655194 -v 1.132923 0.588595 -0.664672 -v 1.141683 0.588422 -0.669436 -v 1.149719 0.584249 -0.669301 -v 1.156721 0.576236 -0.664274 -v 1.162420 0.564691 -0.654546 -v 1.166597 0.550058 -0.640493 -v 1.169091 0.532900 -0.622654 -v 1.169806 0.513875 -0.601715 -v 1.168716 0.493714 -0.578480 -v 1.084867 0.519044 -0.553575 -v 1.091428 0.541283 -0.576588 -v 1.099194 0.561334 -0.598271 -v 1.107868 0.578425 -0.617791 -v 1.117117 0.591900 -0.634397 -v 1.126584 0.601242 -0.647452 -v 1.135907 0.606091 -0.656454 -v 1.144727 0.606260 -0.661056 -v 1.152704 0.601744 -0.661083 -v 1.159532 0.592716 -0.656532 -v 1.164950 0.579523 -0.647579 -v 1.168748 0.562672 -0.634568 -v 1.170781 0.542810 -0.617999 -v 1.170971 0.520701 -0.598508 -v 1.169310 0.497194 -0.576846 -v 1.085297 0.521610 -0.551047 -v 1.092270 0.546317 -0.571630 -v 1.100417 0.568641 -0.591073 -v 1.109425 0.587725 -0.608630 -v 1.118947 0.602836 -0.623625 -v 1.128618 0.613393 -0.635483 -v 1.138066 0.618991 -0.643747 -v 1.146927 0.619413 -0.648101 -v 1.154862 0.614645 -0.648376 -v 1.161566 0.604868 -0.644563 -v 1.166780 0.590459 -0.636807 -v 1.170305 0.571972 -0.625407 -v 1.172004 0.550117 -0.610801 -v 1.171813 0.525734 -0.593551 -v 1.169739 0.499760 -0.574318 -v 1.085545 0.523164 -0.547724 -v 1.092757 0.549364 -0.565111 -v 1.101125 0.573064 -0.581610 -v 1.110326 0.593355 -0.596585 -v 1.120007 0.609456 -0.609462 -v 1.129795 0.620749 -0.619746 -v 1.139315 0.626799 -0.627041 -v 1.148202 0.627375 -0.631067 -v 1.156112 0.622453 -0.631669 -v 1.162743 0.612224 -0.628825 -v 1.167840 0.597079 -0.622644 -v 1.171206 0.577602 -0.613362 -v 1.172712 0.554541 -0.601338 -v 1.172301 0.528781 -0.587032 -v 1.169988 0.501314 -0.570995 -v 1.085603 0.523645 -0.543733 -v 1.092872 0.550307 -0.557283 -v 1.101291 0.574434 -0.570244 -v 1.110537 0.595098 -0.582119 -v 1.120255 0.611506 -0.592452 -v 1.130071 0.623026 -0.600845 -v 1.139608 0.629217 -0.606976 -v 1.148500 0.629840 -0.610610 -v 1.156405 0.624871 -0.611605 -v 1.163019 0.614501 -0.609925 -v 1.168088 0.599129 -0.605634 -v 1.171417 0.579345 -0.598897 -v 1.172878 0.555910 -0.589972 -v 1.172415 0.529724 -0.579203 -v 1.170046 0.501794 -0.567004 -v 1.085469 0.523034 -0.539227 -v 1.092608 0.549110 -0.548445 -v 1.100908 0.572696 -0.557413 -v 1.110050 0.592887 -0.565789 -v 1.119682 0.608906 -0.573250 -v 1.129435 0.620137 -0.579509 -v 1.138933 0.626150 -0.584325 -v 1.147812 0.626713 -0.587515 -v 1.155730 0.621804 -0.588954 -v 1.162383 0.611612 -0.588589 -v 1.167515 0.596529 -0.586432 -v 1.170930 0.577134 -0.582566 -v 1.172495 0.554173 -0.577142 -v 1.172152 0.528528 -0.570365 -v 1.169912 0.501184 -0.562498 -v 1.085147 0.521357 -0.534380 -v 1.091977 0.545820 -0.538937 -v 1.099992 0.567919 -0.543610 -v 1.108884 0.586807 -0.548221 -v 1.118311 0.601756 -0.552592 -v 1.127911 0.612193 -0.556555 -v 1.137316 0.617716 -0.559958 -v 1.146163 0.618114 -0.562670 -v 1.154112 0.613370 -0.564587 -v 1.160859 0.603668 -0.565635 -v 1.166144 0.589379 -0.565774 -v 1.169764 0.571054 -0.564999 -v 1.171579 0.549396 -0.563339 -v 1.171521 0.525237 -0.560858 -v 1.169590 0.499507 -0.557651 -v 1.084651 0.518676 -0.529378 -v 1.091003 0.540561 -0.529125 -v 1.098577 0.560286 -0.529366 -v 1.107083 0.577091 -0.530091 -v 1.116194 0.590332 -0.531273 -v 1.125559 0.599499 -0.532867 -v 1.134818 0.604241 -0.534811 -v 1.143616 0.604374 -0.537030 -v 1.151615 0.599894 -0.539440 -v 1.158507 0.590974 -0.541947 -v 1.164027 0.577955 -0.544455 -v 1.167963 0.561338 -0.546869 -v 1.170165 0.541762 -0.549094 -v 1.170546 0.519979 -0.551046 -v 1.169093 0.496826 -0.552649 -v 1.083998 0.515096 -0.524413 -v 1.089722 0.533538 -0.519386 -v 1.096718 0.550089 -0.515227 -v 1.104717 0.564114 -0.512096 -v 1.113412 0.575072 -0.510113 -v 1.122468 0.582543 -0.509355 -v 1.131536 0.586240 -0.509850 -v 1.140270 0.586021 -0.511581 -v 1.148333 0.581894 -0.514479 -v 1.155415 0.574018 -0.518435 -v 1.161245 0.562695 -0.523295 -v 1.165597 0.548361 -0.528873 -v 1.168306 0.531566 -0.534955 -v 1.169266 0.512956 -0.541307 -v 1.168441 0.493246 -0.547684 -v 1.165862 0.473193 -0.553843 -v 1.083214 0.510753 -0.519676 -v 1.088185 0.525019 -0.510094 -v 1.094487 0.537722 -0.501737 -v 1.101877 0.548373 -0.494926 -v 1.110072 0.556563 -0.489924 -v 1.118756 0.561977 -0.486922 -v 1.127597 0.564407 -0.486036 -v 1.136253 0.563760 -0.487299 -v 1.144394 0.560061 -0.490664 -v 1.151704 0.553451 -0.496002 -v 1.157905 0.544186 -0.503106 -v 1.162757 0.532620 -0.511703 -v 1.166074 0.519198 -0.521465 -v 1.167729 0.504437 -0.532015 -v 1.167657 0.488903 -0.542947 -v 1.082330 0.505815 -0.515349 -v 1.086450 0.515332 -0.501606 -v 1.091968 0.523659 -0.489414 -v 1.098672 0.530474 -0.479242 -v 1.106303 0.535516 -0.471482 -v 1.114568 0.538591 -0.466430 -v 1.123151 0.539580 -0.464282 -v 1.131720 0.538447 -0.465119 -v 1.139948 0.535234 -0.468911 -v 1.147516 0.530065 -0.475510 -v 1.154136 0.523139 -0.484663 -v 1.159552 0.514721 -0.496020 -v 1.163556 0.505135 -0.509142 -v 1.165994 0.494750 -0.523527 -v 1.166773 0.483965 -0.538620 -v 1.081379 0.500471 -0.511598 -v 1.084584 0.504850 -0.494248 -v 1.089260 0.508440 -0.478732 -v 1.095224 0.511104 -0.465647 -v 1.102249 0.512739 -0.455495 -v 1.110064 0.513283 -0.448667 -v 1.118369 0.512714 -0.445425 -v 1.126845 0.511054 -0.445893 -v 1.135166 0.508368 -0.450054 -v 1.143012 0.504758 -0.457747 -v 1.150082 0.500362 -0.468677 -v 1.156104 0.495351 -0.482425 -v 1.160847 0.489917 -0.498461 -v 1.164128 0.484267 -0.516169 -v 1.165822 0.478621 -0.534869 -v 1.080397 0.494926 -0.508568 -v 1.082659 0.493974 -0.488304 -v 1.086465 0.492651 -0.470102 -v 1.091667 0.491008 -0.454663 -v 1.098066 0.489109 -0.442579 -v 1.105416 0.487027 -0.434316 -v 1.113435 0.484840 -0.430189 -v 1.121814 0.482635 -0.430359 -v 1.130232 0.480494 -0.434818 -v 1.138364 0.478501 -0.443396 -v 1.145899 0.476732 -0.455761 -v 1.152547 0.475255 -0.471441 -v 1.158052 0.474127 -0.489830 -v 1.162203 0.473392 -0.510224 -v 1.164840 0.473076 -0.531839 -v 1.079423 0.489395 -0.506374 -v 1.080749 0.483123 -0.484001 -v 1.083691 0.476898 -0.463855 -v 1.088137 0.470959 -0.446712 -v 1.093915 0.465534 -0.433230 -v 1.100804 0.460831 -0.423927 -v 1.108539 0.457031 -0.419161 -v 1.116822 0.454280 -0.419115 -v 1.125336 0.452685 -0.423790 -v 1.133752 0.452305 -0.433007 -v 1.141749 0.453157 -0.446412 -v 1.149017 0.455206 -0.463490 -v 1.155279 0.458375 -0.483583 -v 1.160293 0.462541 -0.505921 -v 1.163866 0.467545 -0.529645 -v 1.078494 0.484088 -0.505102 -v 1.078927 0.472714 -0.481504 -v 1.081046 0.461787 -0.460231 -v 1.084770 0.451726 -0.442100 -v 1.089956 0.442918 -0.427807 -v 1.096405 0.435702 -0.417901 -v 1.103869 0.430354 -0.412764 -v 1.112061 0.427081 -0.412592 -v 1.120666 0.426008 -0.417392 -v 1.129353 0.427176 -0.426981 -v 1.137789 0.430541 -0.440989 -v 1.145650 0.435973 -0.458877 -v 1.152633 0.443263 -0.479960 -v 1.158470 0.452132 -0.503425 -v 1.162937 0.462238 -0.528373 -v 1.077646 0.479211 -0.504799 -v 1.077263 0.463147 -0.480911 -v 1.078630 0.447898 -0.459370 -v 1.081695 0.434049 -0.441004 -v 1.086341 0.422132 -0.426517 -v 1.092388 0.412605 -0.416469 -v 1.099604 0.405835 -0.411243 -v 1.107712 0.402081 -0.411041 -v 1.116400 0.401489 -0.415872 -v 1.125335 0.404080 -0.425548 -v 1.134174 0.409755 -0.439699 -v 1.142575 0.418296 -0.457781 -v 1.150217 0.429374 -0.479098 -v 1.156806 0.442565 -0.502832 -v 1.162089 0.457361 -0.528070 -v 1.076911 0.474951 -0.505478 -v 1.075821 0.454790 -0.482243 -v 1.076536 0.435765 -0.461304 -v 1.079031 0.418607 -0.443465 -v 1.083207 0.403974 -0.429412 -v 1.088906 0.392429 -0.419685 -v 1.095908 0.384416 -0.414658 -v 1.103944 0.380243 -0.414523 -v 1.112705 0.380070 -0.419286 -v 1.121854 0.383904 -0.428765 -v 1.131040 0.391597 -0.442594 -v 1.139911 0.402854 -0.460243 -v 1.148124 0.417242 -0.481032 -v 1.155364 0.434208 -0.504164 -v 1.161354 0.453101 -0.528749 -v 1.079765 0.495471 -0.530116 -v 1.076317 0.471470 -0.507113 -v 1.074656 0.447964 -0.485450 -v 1.074846 0.425855 -0.465960 -v 1.076879 0.405993 -0.449390 -v 1.080677 0.389142 -0.436379 -v 1.086095 0.375948 -0.427427 -v 1.092923 0.366920 -0.422876 -v 1.100901 0.362405 -0.422902 -v 1.109720 0.362574 -0.427505 -v 1.119043 0.367423 -0.436507 -v 1.128510 0.376765 -0.449561 -v 1.137759 0.390240 -0.466168 -v 1.146433 0.407331 -0.485688 -v 1.154200 0.427381 -0.507371 -v 1.160760 0.449620 -0.530384 -v 1.075888 0.468904 -0.509640 -v 1.073814 0.442930 -0.490408 -v 1.073623 0.418547 -0.473157 -v 1.075323 0.396692 -0.458551 -v 1.078847 0.378205 -0.447152 -v 1.084061 0.363797 -0.439396 -v 1.090765 0.354020 -0.435583 -v 1.098700 0.349252 -0.435858 -v 1.107561 0.349674 -0.440212 -v 1.117009 0.355271 -0.448476 -v 1.126680 0.365828 -0.460334 -v 1.136203 0.380939 -0.475329 -v 1.145210 0.400024 -0.492886 -v 1.153357 0.422348 -0.512329 -v 1.160331 0.447054 -0.532911 -vn -0.681265 -0.692312 0.237709 -vn -0.904202 -0.398114 0.154515 -vn -0.899167 -0.437422 -0.010163 -vn -0.997864 0.060305 0.024537 -vn -0.993133 0.116459 0.008606 -vn -0.994049 0.108585 -0.008240 -vn 0.937773 -0.342936 0.054415 -vn 0.903439 -0.421674 0.077029 -vn 0.928129 -0.372173 0.000702 -vn -0.163366 -0.944243 0.285836 -vn -0.237678 -0.971313 0.003082 -vn -0.999023 -0.005646 0.043184 -vn -0.998962 0.044557 -0.009156 -vn 0.959319 -0.279885 0.036439 -vn 0.954558 -0.297952 0.002503 -vn 0.400891 -0.887326 0.227851 -vn 0.306772 -0.951720 -0.008209 -vn -0.993652 -0.090213 0.066988 -vn -0.999512 -0.029389 -0.010102 -vn 0.974090 -0.225135 0.020844 -vn 0.972289 -0.233711 0.003906 -vn 0.710898 -0.685812 0.155644 -vn 0.649068 -0.760643 -0.009552 -vn -0.972472 -0.209967 0.100833 -vn -0.992462 -0.122013 -0.011048 -vn 0.841639 -0.529069 0.108188 -vn 0.808283 -0.588733 -0.005341 -vn -0.968505 -0.248695 -0.011597 -vn 0.885464 -0.464644 -0.001770 -vn -0.697470 -0.716575 -0.002472 -vn -0.882015 -0.447066 -0.148717 -vn -0.994324 0.103427 -0.024293 -vn 0.918058 -0.392804 -0.053377 -vn -0.286966 -0.931303 -0.224189 -vn -0.998535 0.034150 -0.041353 -vn 0.949950 -0.310739 -0.031312 -vn 0.221259 -0.951018 -0.215766 -vn -0.997162 -0.044527 -0.060366 -vn 0.970763 -0.239570 -0.012604 -vn 0.583178 -0.794702 -0.168218 -vn -0.986541 -0.140751 -0.083010 -vn 0.770867 -0.625782 -0.118748 -vn -0.956969 -0.267769 -0.111606 -vn 0.865627 -0.494003 -0.081301 -vn 0.734123 -0.640522 -0.225196 -vn -0.942198 -0.270577 -0.197516 -vn 0.846126 -0.509140 -0.157476 -vn -0.691702 -0.696066 -0.192328 -vn -0.860988 -0.436171 -0.261513 -vn -0.994110 0.100864 -0.039064 -vn 0.908505 -0.404279 -0.105411 -vn -0.316630 -0.862697 -0.394269 -vn -0.997040 0.028993 -0.071017 -vn 0.945952 -0.317942 -0.063692 -vn 0.152104 -0.910764 -0.383831 -vn -0.993011 -0.051424 -0.106113 -vn 0.969665 -0.242744 -0.028199 -vn 0.522294 -0.794671 -0.309305 -vn -0.978027 -0.147618 -0.147038 -vn 0.969024 -0.243233 -0.042268 -vn 0.472671 -0.769616 -0.429243 -vn -0.968688 -0.143742 -0.202338 -vn 0.702658 -0.635334 -0.320322 -vn -0.927183 -0.259926 -0.269662 -vn 0.829463 -0.510239 -0.227088 -vn -0.677541 -0.653829 -0.336711 -vn -0.840815 -0.410779 -0.352489 -vn -0.993530 0.100803 -0.052217 -vn 0.900723 -0.406415 -0.153264 -vn -0.333079 -0.785394 -0.521683 -vn -0.994812 0.028932 -0.097415 -vn 0.942961 -0.319437 -0.093387 -vn 0.101444 -0.850185 -0.516587 -vn -0.987945 -0.050478 -0.146306 -vn -0.992187 0.033753 -0.119938 -vn 0.941465 -0.315226 -0.119297 -vn 0.068545 -0.779717 -0.622333 -vn -0.982665 -0.042177 -0.180364 -vn 0.968963 -0.241066 -0.054415 -vn 0.437788 -0.726981 -0.528947 -vn -0.959807 -0.130222 -0.248573 -vn 0.680013 -0.613208 -0.401868 -vn -0.913846 -0.237892 -0.329020 -vn 0.817866 -0.498276 -0.287698 -vn -0.662252 -0.601062 -0.447310 -vn -0.823817 -0.374310 -0.425642 -vn -0.992615 0.103183 -0.063448 -vn 0.895749 -0.399396 -0.195105 -vn -0.340922 -0.706229 -0.620441 -vn -0.648854 -0.541978 -0.534043 -vn -0.810968 -0.328440 -0.484146 -vn -0.991516 0.107791 -0.072451 -vn 0.894436 -0.383801 -0.229408 -vn -0.342784 -0.625996 -0.700430 -vn -0.989471 0.043184 -0.138096 -vn 0.941710 -0.305643 -0.140446 -vn 0.051912 -0.703543 -0.708731 -vn -0.977783 -0.027100 -0.207801 -vn 0.969512 -0.236396 -0.064272 -vn 0.419446 -0.671529 -0.610767 -vn -0.952208 -0.108005 -0.285684 -vn 0.668722 -0.576891 -0.468978 -vn -0.903226 -0.205908 -0.376507 -vn 0.812922 -0.474502 -0.337535 -vn 0.670217 -0.528398 -0.521104 -vn -0.802545 -0.273659 -0.530045 -vn 0.815699 -0.440138 -0.375317 -vn -0.638386 -0.477462 -0.603687 -vn -0.631031 -0.406751 -0.660512 -vn -0.990265 0.114475 -0.079134 -vn 0.897214 -0.360424 -0.255074 -vn -0.339854 -0.542741 -0.768029 -vn -0.986785 0.056887 -0.151585 -vn 0.943846 -0.291116 -0.156133 -vn 0.050569 -0.622059 -0.781304 -vn -0.973571 -0.005737 -0.228248 -vn 0.970641 -0.229530 -0.071535 -vn 0.418561 -0.605487 -0.676870 -vn -0.946348 -0.077731 -0.313608 -vn 0.947844 -0.272134 -0.165868 -vn 0.064547 -0.533372 -0.843379 -vn -0.895779 -0.164769 -0.412793 -vn -0.891568 -0.114872 -0.438032 -vn 0.435743 -0.529191 -0.728050 -vn -0.798425 -0.209632 -0.564379 -vn 0.685110 -0.468764 -0.557512 -vn -0.626576 -0.327891 -0.706992 -vn -0.984283 0.074465 -0.160100 -vn 0.826380 -0.396283 -0.399976 -vn -0.332224 -0.453230 -0.827143 -vn -0.970183 0.021363 -0.241371 -vn 0.904172 -0.329997 -0.271218 -vn -0.942381 -0.040010 -0.332102 -vn 0.914914 -0.293435 -0.277139 -vn -0.319071 -0.352641 -0.879665 -vn -0.940092 0.004639 -0.340831 -vn 0.972381 -0.220557 -0.076113 -vn 0.953520 -0.249214 -0.169256 -vn 0.095004 -0.433637 -0.896054 -vn -0.890225 -0.056246 -0.451949 -vn 0.471389 -0.441481 -0.763451 -vn -0.798059 -0.135380 -0.587115 -vn 0.712973 -0.398541 -0.576861 -vn -0.624378 -0.237892 -0.743980 -vn -0.988861 0.123081 -0.083377 -vn -0.981903 0.095523 -0.163366 -vn 0.844539 -0.343883 -0.410413 -vn -0.967559 0.053652 -0.246834 -vn -0.987396 0.133366 -0.085025 -vn -0.979644 0.119510 -0.161260 -vn 0.868831 -0.284005 -0.405469 -vn -0.298257 -0.234230 -0.925291 -vn -0.965423 0.090487 -0.244331 -vn 0.928678 -0.251717 -0.272256 -vn -0.939055 0.055696 -0.339213 -vn 0.974639 -0.209693 -0.077792 -vn 0.960540 -0.223090 -0.166021 -vn 0.144200 -0.317118 -0.937346 -vn -0.891079 0.011109 -0.453688 -vn 0.525285 -0.340129 -0.779962 -vn -0.800623 -0.049318 -0.597125 -vn 0.752373 -0.317942 -0.576891 -vn -0.623463 -0.132572 -0.770501 -vn -0.804498 0.050356 -0.591754 -vn 0.800348 -0.227638 -0.554613 -vn -0.621754 -0.006378 -0.783166 -vn -0.985809 0.145207 -0.083987 -vn -0.977294 0.145787 -0.153600 -vn 0.897092 -0.218238 -0.384136 -vn -0.265938 -0.088595 -0.959899 -vn -0.963439 0.131077 -0.233558 -vn 0.944273 -0.206336 -0.256355 -vn -0.938444 0.112522 -0.326518 -vn 0.977355 -0.197211 -0.076449 -vn 0.968352 -0.194678 -0.156072 -vn 0.214881 -0.176305 -0.960570 -vn -0.892880 0.087313 -0.441694 -vn 0.595965 -0.222633 -0.771508 -vn 0.308267 -0.003754 -0.951262 -vn -0.893918 0.171911 -0.413892 -vn 0.678854 -0.088473 -0.728874 -vn -0.807123 0.165288 -0.566729 -vn 0.852046 -0.129795 -0.507065 -vn -0.615253 0.147099 -0.774438 -vn -0.984130 0.158269 -0.080172 -vn -0.974731 0.173650 -0.140385 -vn 0.926298 -0.148839 -0.346110 -vn -0.216071 0.095767 -0.971648 -vn -0.961058 0.174444 -0.214240 -vn 0.960173 -0.158940 -0.229743 -vn -0.937284 0.174139 -0.301889 -vn 0.980346 -0.183538 -0.071993 -vn 0.976318 -0.165014 -0.139683 -vn 0.974761 -0.111576 -0.193213 -vn -0.141850 0.325968 -0.934660 -vn -0.934263 0.239021 -0.264534 -vn 0.983459 -0.169134 -0.064486 -vn 0.983795 -0.135289 -0.117374 -vn 0.419752 0.200537 -0.885189 -vn -0.891812 0.263436 -0.367748 -vn 0.764458 0.057344 -0.642079 -vn -0.804285 0.295297 -0.515641 -vn 0.900937 -0.029054 -0.432966 -vn -0.596942 0.332255 -0.730216 -vn -0.982299 0.172155 -0.073550 -vn -0.971709 0.202277 -0.121677 -vn 0.953093 -0.079043 -0.292154 -vn -0.957671 0.219337 -0.186254 -vn -0.980346 0.186499 -0.064180 -vn -0.968108 0.230628 -0.097659 -vn 0.974364 -0.012909 -0.224555 -vn -0.557085 0.541917 -0.629231 -vn -0.952788 0.264077 -0.149632 -vn 0.986694 -0.066561 -0.148259 -vn -0.043062 0.584490 -0.810236 -vn -0.928129 0.304666 -0.213874 -vn 0.986511 -0.154393 -0.054079 -vn 0.990204 -0.106845 -0.089846 -vn 0.534135 0.415540 -0.736198 -vn -0.883724 0.358348 -0.300974 -vn 0.838252 0.200598 -0.506974 -vn -0.790246 0.435530 -0.431013 -vn 0.939940 0.066958 -0.334666 -vn -0.867275 0.449873 -0.213080 -vn 0.964049 0.148991 -0.219916 -vn -0.759606 0.572436 -0.308664 -vn -0.978240 0.200751 -0.052004 -vn -0.963927 0.257057 -0.068789 -vn 0.988037 0.044771 -0.147496 -vn -0.489608 0.743217 -0.455947 -vn -0.946135 0.306223 -0.105045 -vn 0.994903 -0.026673 -0.097140 -vn 0.065615 0.812037 -0.579852 -vn -0.917905 0.367138 -0.150456 -vn 0.989288 -0.140049 -0.040925 -vn 0.994964 -0.081301 -0.058260 -vn 0.627491 0.593371 -0.504105 -vn 0.886288 0.319407 -0.335276 -vn 0.681265 0.692312 -0.237678 -vn -0.903439 0.421705 -0.077029 -vn 0.972472 0.209998 -0.100833 -vn -0.841639 0.529069 -0.108188 -vn 0.993652 0.090213 -0.066988 -vn -0.710898 0.685812 -0.155644 -vn -0.976104 0.213996 -0.037294 -vn -0.974090 0.225166 -0.020844 -vn 0.999023 0.005646 -0.043153 -vn -0.400891 0.887326 -0.227821 -vn -0.959319 0.279885 -0.036439 -vn 0.997864 -0.060305 -0.024537 -vn 0.163366 0.944243 -0.285806 -vn -0.937773 0.342936 -0.054415 -vn 0.991546 -0.127049 -0.025422 -vn 0.993133 -0.116428 -0.008606 -vn 0.998962 -0.044557 0.009156 -vn 0.237678 0.971313 -0.003082 -vn -0.928129 0.372173 -0.000702 -vn 0.994049 -0.108585 0.008240 -vn 0.904202 0.398114 -0.154515 -vn 0.899167 0.437422 0.010163 -vn -0.885464 0.464644 0.001770 -vn 0.968505 0.248695 0.011597 -vn -0.808283 0.588733 0.005341 -vn 0.992462 0.122013 0.011048 -vn -0.649068 0.760643 0.009552 -vn -0.972289 0.233711 -0.003906 -vn 0.999512 0.029389 0.010102 -vn -0.306772 0.951720 0.008209 -vn -0.954558 0.297952 -0.002503 -vn 0.997162 0.044527 0.060366 -vn -0.221259 0.951018 0.215766 -vn -0.949950 0.310739 0.031312 -vn 0.998535 -0.034150 0.041353 -vn 0.697470 0.716575 0.002472 -vn 0.286966 0.931303 0.224189 -vn -0.918058 0.392804 0.053377 -vn 0.994324 -0.103427 0.024293 -vn 0.882015 0.447066 0.148717 -vn -0.865627 0.494003 0.081301 -vn 0.956969 0.267769 0.111606 -vn -0.770867 0.625782 0.118748 -vn 0.986541 0.140751 0.083010 -vn -0.583209 0.794702 0.168218 -vn -0.970763 0.239570 0.012604 -vn 0.978027 0.147618 0.147038 -vn -0.522294 0.794671 0.309305 -vn -0.969665 0.242744 0.028199 -vn 0.993011 0.051424 0.106113 -vn -0.152104 0.910764 0.383831 -vn -0.945952 0.317942 0.063692 -vn 0.997040 -0.028993 0.071017 -vn 0.691702 0.696066 0.192328 -vn 0.316630 0.862697 0.394269 -vn -0.908505 0.404279 0.105411 -vn 0.994110 -0.100864 0.039064 -vn 0.860988 0.436171 0.261513 -vn -0.846126 0.509140 0.157476 -vn 0.942198 0.270577 0.197516 -vn -0.734123 0.640522 0.225196 -vn -0.829463 0.510239 0.227088 -vn 0.927183 0.259926 0.269662 -vn -0.702658 0.635334 0.320322 -vn 0.968688 0.143742 0.202338 -vn -0.472671 0.769616 0.429243 -vn -0.969024 0.243233 0.042268 -vn 0.987945 0.050478 0.146336 -vn -0.101444 0.850185 0.516587 -vn -0.942961 0.319437 0.093387 -vn 0.994812 -0.028901 0.097415 -vn 0.677572 0.653829 0.336711 -vn 0.333079 0.785394 0.521683 -vn -0.900723 0.406384 0.153264 -vn 0.993530 -0.100803 0.052217 -vn 0.840815 0.410779 0.352489 -vn 0.662252 0.601062 0.447310 -vn 0.340922 0.706229 0.620441 -vn -0.895749 0.399396 0.195105 -vn 0.992615 -0.103183 0.063417 -vn 0.823817 0.374310 0.425642 -vn -0.817835 0.498306 0.287698 -vn 0.913846 0.237892 0.329020 -vn -0.680013 0.613208 0.401868 -vn 0.959807 0.130222 0.248573 -vn -0.437788 0.726981 0.528947 -vn -0.968963 0.241066 0.054415 -vn 0.982665 0.042177 0.180364 -vn -0.068545 0.779717 0.622333 -vn -0.941465 0.315226 0.119297 -vn 0.992187 -0.033753 0.119938 -vn 0.977783 0.027100 0.207801 -vn -0.051912 0.703543 0.708731 -vn -0.941710 0.305643 0.140446 -vn 0.989471 -0.043214 0.138096 -vn 0.648854 0.541978 0.534043 -vn 0.342784 0.625996 0.700430 -vn -0.894436 0.383801 0.229408 -vn 0.991516 -0.107791 0.072451 -vn 0.810968 0.328440 0.484146 -vn -0.812922 0.474502 0.337535 -vn 0.903226 0.205908 0.376507 -vn -0.668722 0.576891 0.468978 -vn 0.952208 0.108005 0.285684 -vn -0.419446 0.671529 0.610767 -vn -0.969512 0.236427 0.064272 -vn 0.946348 0.077731 0.313608 -vn -0.418561 0.605487 0.676870 -vn -0.970641 0.229530 0.071535 -vn 0.973571 0.005707 0.228248 -vn -0.050569 0.622059 0.781304 -vn -0.943846 0.291116 0.156133 -vn 0.986785 -0.056887 0.151585 -vn 0.638386 0.477493 0.603687 -vn 0.339854 0.542741 0.768029 -vn -0.897214 0.360424 0.255074 -vn 0.990265 -0.114444 0.079134 -vn 0.631062 0.406751 0.660512 -vn -0.815699 0.440138 0.375317 -vn 0.802545 0.273659 0.530045 -vn -0.670217 0.528398 0.521104 -vn -0.685110 0.468764 0.557512 -vn 0.895779 0.164800 0.412793 -vn 0.798425 0.209632 0.564379 -vn -0.435743 0.529191 0.728050 -vn 0.891568 0.114872 0.438032 -vn -0.064547 0.533372 0.843410 -vn -0.947844 0.272134 0.165868 -vn 0.942381 0.040010 0.332102 -vn -0.904172 0.329997 0.271218 -vn 0.970183 -0.021363 0.241371 -vn 0.332224 0.453230 0.827143 -vn -0.826380 0.396283 0.399976 -vn 0.984283 -0.074465 0.160100 -vn 0.626545 0.327891 0.706992 -vn 0.319071 0.352641 0.879665 -vn -0.844539 0.343883 0.410413 -vn 0.988861 -0.123051 0.083377 -vn 0.981903 -0.095523 0.163366 -vn 0.624378 0.237892 0.743980 -vn -0.712973 0.398541 0.576861 -vn 0.798059 0.135380 0.587115 -vn -0.471389 0.441481 0.763451 -vn 0.890225 0.056246 0.451979 -vn -0.095004 0.433637 0.896054 -vn -0.972381 0.220557 0.076113 -vn -0.953520 0.249214 0.169256 -vn 0.940092 -0.004639 0.340831 -vn -0.914914 0.293405 0.277139 -vn 0.967559 -0.053652 0.246834 -vn 0.939055 -0.055696 0.339213 -vn 0.298257 0.234230 0.925291 -vn -0.928678 0.251717 0.272256 -vn 0.965423 -0.090487 0.244362 -vn -0.868831 0.284005 0.405469 -vn 0.987396 -0.133396 0.085055 -vn 0.979644 -0.119510 0.161260 -vn 0.623463 0.132572 0.770501 -vn -0.752373 0.317942 0.576891 -vn 0.800623 0.049318 0.597125 -vn -0.525285 0.340098 0.779962 -vn 0.891079 -0.011109 0.453688 -vn -0.144200 0.317118 0.937346 -vn -0.974639 0.209693 0.077792 -vn -0.960540 0.223060 0.166021 -vn 0.892880 -0.087313 0.441694 -vn -0.214881 0.176305 0.960570 -vn -0.977355 0.197211 0.076449 -vn -0.968352 0.194678 0.156072 -vn 0.938444 -0.112522 0.326518 -vn 0.265938 0.088595 0.959899 -vn -0.944273 0.206336 0.256355 -vn 0.963439 -0.131077 0.233558 -vn -0.897092 0.218238 0.384136 -vn 0.985809 -0.145207 0.083987 -vn 0.977294 -0.145787 0.153600 -vn 0.621754 0.006378 0.783166 -vn -0.800348 0.227638 0.554613 -vn 0.804498 -0.050356 0.591754 -vn -0.595965 0.222633 0.771508 -vn 0.807123 -0.165288 0.566729 -vn -0.678854 0.088473 0.728874 -vn 0.893918 -0.171911 0.413892 -vn -0.308267 0.003754 0.951262 -vn -0.980346 0.183538 0.071993 -vn -0.976318 0.165014 0.139683 -vn 0.937284 -0.174169 0.301889 -vn 0.216071 -0.095767 0.971648 -vn -0.960173 0.158940 0.229743 -vn 0.961058 -0.174444 0.214240 -vn -0.926298 0.148839 0.346110 -vn 0.984130 -0.158269 0.080172 -vn 0.974731 -0.173650 0.140385 -vn 0.615253 -0.147099 0.774438 -vn -0.852046 0.129795 0.507065 -vn -0.953063 0.079043 0.292154 -vn 0.982299 -0.172155 0.073550 -vn 0.971709 -0.202277 0.121677 -vn 0.596942 -0.332255 0.730216 -vn -0.900937 0.029054 0.432966 -vn 0.804285 -0.295297 0.515641 -vn -0.764458 -0.057344 0.642079 -vn 0.891812 -0.263436 0.367748 -vn -0.419752 -0.200537 0.885189 -vn -0.983459 0.169103 0.064486 -vn -0.983795 0.135289 0.117374 -vn 0.934263 -0.239021 0.264534 -vn 0.141850 -0.325968 0.934660 -vn -0.974761 0.111576 0.193213 -vn 0.957671 -0.219337 0.186254 -vn 0.043062 -0.584490 0.810236 -vn -0.986694 0.066561 0.148259 -vn 0.952788 -0.264077 0.149632 -vn 0.557085 -0.541887 0.629231 -vn -0.974364 0.012909 0.224555 -vn 0.980346 -0.186499 0.064180 -vn 0.968108 -0.230628 0.097659 -vn -0.939940 -0.066958 0.334666 -vn 0.790246 -0.435530 0.431013 -vn -0.838282 -0.200598 0.506974 -vn 0.883724 -0.358348 0.300974 -vn -0.534104 -0.415571 0.736198 -vn -0.986511 0.154393 0.054079 -vn -0.990204 0.106815 0.089846 -vn 0.928129 -0.304666 0.213874 -vn 0.867275 -0.449873 0.213080 -vn -0.627491 -0.593371 0.504135 -vn -0.989288 0.140049 0.040925 -vn -0.994964 0.081301 0.058260 -vn 0.917905 -0.367138 0.150456 -vn -0.065615 -0.812037 0.579882 -vn -0.994903 0.026673 0.097140 -vn 0.946135 -0.306223 0.105045 -vn 0.489608 -0.743217 0.455947 -vn -0.988037 -0.044771 0.147496 -vn 0.978240 -0.200751 0.052004 -vn 0.963927 -0.257057 0.068789 -vn 0.759606 -0.572436 0.308664 -vn -0.964049 -0.148991 0.219916 -vn -0.886288 -0.319407 0.335276 -vn 0.985198 -0.171270 0.005707 -vn -0.985198 0.171270 -0.005707 -vn 0.976104 -0.213996 0.037294 -vn -0.991546 0.127079 0.025422 -vn -0.993133 0.116428 0.008606 -vn 0.928159 -0.372173 0.000702 -vn 0.974090 -0.225166 0.020814 -vn 0.841609 -0.529069 0.108188 -vn 0.583209 -0.794702 -0.168218 -vn 0.865627 -0.494034 -0.081301 -vn 0.846126 -0.509110 -0.157476 -vn -0.994110 0.100864 -0.039094 -vn 0.152074 -0.910764 -0.383831 -vn 0.969665 -0.242744 -0.028169 -vn 0.472640 -0.769616 -0.429243 -vn 0.702658 -0.635304 -0.320322 -vn -0.927183 -0.259896 -0.269662 -vn -0.987945 -0.050478 -0.146336 -vn -0.982665 -0.042207 -0.180364 -vn -0.959807 -0.130253 -0.248573 -vn -0.992615 0.103183 -0.063417 -vn -0.340922 -0.706259 -0.620441 -vn -0.342784 -0.625965 -0.700430 -vn 0.969512 -0.236427 -0.064272 -vn -0.952208 -0.107974 -0.285684 -vn -0.638386 -0.477462 -0.603656 -vn -0.339824 -0.542741 -0.768029 -vn 0.970641 -0.229499 -0.071535 -vn 0.064547 -0.533372 -0.843410 -vn -0.798425 -0.209662 -0.564379 -vn -0.626545 -0.327891 -0.707022 -vn -0.984283 0.074465 -0.160070 -vn 0.914914 -0.293405 -0.277139 -vn -0.940092 0.004608 -0.340831 -vn -0.890225 -0.056246 -0.451979 -vn -0.967559 0.053682 -0.246834 -vn -0.987396 0.133396 -0.085025 -vn -0.979644 0.119480 -0.161260 -vn -0.965423 0.090487 -0.244362 -vn 0.144200 -0.317148 -0.937346 -vn 0.525285 -0.340098 -0.779962 -vn -0.800623 -0.049348 -0.597125 -vn -0.621723 -0.006378 -0.783166 -vn -0.985809 0.145268 -0.083987 -vn -0.938444 0.112552 -0.326487 -vn 0.595935 -0.222633 -0.771508 -vn 0.852046 -0.129765 -0.507065 -vn 0.926267 -0.148869 -0.346110 -vn -0.961058 0.174413 -0.214240 -vn -0.937284 0.174169 -0.301889 -vn 0.983459 -0.169073 -0.064516 -vn -0.982299 0.172124 -0.073550 -vn -0.971709 0.202307 -0.121677 -vn 0.953063 -0.079043 -0.292154 -vn -0.957701 0.219337 -0.186254 -vn -0.557085 0.541887 -0.629231 -vn 0.990173 -0.106845 -0.089846 -vn 0.534104 0.415571 -0.736198 -vn 0.838282 0.200568 -0.506974 -vn 0.988037 0.044771 -0.147465 -vn -0.489578 0.743217 -0.455947 -vn 0.989288 -0.140080 -0.040925 -vn 0.627461 0.593371 -0.504135 -vn 0.972472 0.209967 -0.100833 -vn -0.976104 0.213996 -0.037263 -vn 0.999023 0.005646 -0.043184 -vn -0.959319 0.279885 -0.036409 -vn 0.998962 -0.044588 0.009156 -vn 0.237678 0.971313 -0.003113 -vn -0.928159 0.372173 -0.000702 -vn -0.808283 0.588733 0.005310 -vn -0.972259 0.233741 -0.003906 -vn 0.993011 0.051424 0.106082 -vn -0.152104 0.910764 0.383862 -vn 0.316630 0.862697 0.394299 -vn 0.860988 0.436201 0.261513 -vn -0.846126 0.509110 0.157476 -vn -0.829463 0.510239 0.227119 -vn 0.927183 0.259896 0.269662 -vn -0.702658 0.635304 0.320322 -vn -0.472640 0.769616 0.429243 -vn 0.987945 0.050478 0.146306 -vn 0.994812 -0.028932 0.097415 -vn 0.677541 0.653829 0.336711 -vn -0.900723 0.406415 0.153264 -vn 0.340922 0.706259 0.620441 -vn -0.817866 0.498276 0.287698 -vn 0.982665 0.042177 0.180395 -vn 0.989471 -0.043184 0.138096 -vn 0.342784 0.625965 0.700430 -vn 0.952208 0.107974 0.285684 -vn -0.970641 0.229499 0.071535 -vn 0.973571 0.005737 0.228248 -vn 0.638386 0.477462 0.603656 -vn 0.339824 0.542741 0.768029 -vn -0.897214 0.360424 0.255043 -vn 0.990265 -0.114475 0.079134 -vn 0.631031 0.406751 0.660512 -vn -0.670217 0.528367 0.521104 -vn 0.895779 0.164769 0.412793 -vn 0.798425 0.209662 0.564379 -vn -0.904141 0.330027 0.271218 -vn 0.984283 -0.074496 0.160100 -vn 0.626545 0.327891 0.707022 -vn 0.890225 0.056246 0.451949 -vn 0.940092 -0.004608 0.340831 -vn 0.967559 -0.053682 0.246834 -vn 0.987396 -0.133366 0.085055 -vn 0.979644 -0.119480 0.161260 -vn -0.960540 0.223090 0.166021 -vn -0.977355 0.197180 0.076449 -vn -0.944273 0.206336 0.256386 -vn 0.985809 -0.145238 0.083987 -vn -0.976318 0.165044 0.139683 -vn -0.926298 0.148869 0.346110 -vn 0.974731 -0.173681 0.140385 -vn 0.615253 -0.147099 0.774468 -vn -0.852046 0.129765 0.507065 -vn 0.971709 -0.202307 0.121677 -vn -0.974761 0.111545 0.193213 -vn 0.957701 -0.219306 0.186254 -vn 0.043092 -0.584490 0.810236 -vn -0.990204 0.106845 0.089846 -vn 0.928098 -0.304666 0.213874 -vn -0.065615 -0.812037 0.579852 -vn 0.978240 -0.200751 0.052034 -usemtl SkinColor -s 1 -f 1453//1107 1452//1108 1467//1109 -f 1448//1110 1447//1111 1462//1112 -f 1459//1113 1458//1114 1474//1115 -f 1454//1116 1453//1107 1469//1117 -f 1449//1118 1448//1110 1463//1119 -f 1460//1120 1459//1113 1475//1121 -f 1455//1122 1454//1116 1470//1123 -f 1450//1124 1449//1118 1464//1125 -f 1461//1126 1460//1120 1476//1127 -f 1456//1128 1455//1122 1471//1129 -f 1451//1130 1450//1124 1465//1131 -f 1457//1132 1456//1128 1472//1133 -f 1452//1108 1451//1130 1466//1134 -f 1458//1114 1457//1132 1473//1135 -f 1468//1136 1467//1109 1482//1137 -f 1463//1119 1462//1112 1477//1138 -f 1474//1115 1473//1135 1489//1139 -f 1469//1117 1468//1136 1484//1140 -f 1464//1125 1463//1119 1478//1141 -f 1475//1121 1474//1115 1490//1142 -f 1470//1123 1469//1117 1485//1143 -f 1465//1131 1464//1125 1479//1144 -f 1476//1127 1475//1121 1491//1145 -f 1471//1129 1470//1123 1486//1146 -f 1466//1134 1465//1131 1480//1147 -f 1472//1133 1471//1129 1487//1148 -f 1467//1109 1466//1134 1481//1149 -f 1473//1135 1472//1133 1488//1150 -f 1487//1148 1486//1146 1502//1151 -f 1482//1137 1481//1149 1496//1152 -f 1488//1150 1487//1148 1503//1153 -f 1483//1154 1482//1137 1497//1155 -f 1478//1141 1477//1138 1492//1156 -f 1489//1139 1488//1150 1504//1157 -f 1484//1140 1483//1154 1499//1158 -f 1479//1144 1478//1141 1493//1159 -f 1490//1142 1489//1139 1505//1160 -f 1485//1143 1484//1140 1500//1161 -f 1480//1147 1479//1144 1494//1162 -f 1491//1145 1490//1142 1506//1163 -f 1486//1146 1485//1143 1501//1164 -f 1481//1149 1480//1147 1495//1165 -f 1506//1163 1505//1160 1521//1166 -f 1501//1164 1500//1161 1516//1167 -f 1496//1152 1495//1165 1510//1168 -f 1502//1151 1501//1164 1517//1169 -f 1497//1155 1496//1152 1511//1170 -f 1503//1153 1502//1151 1518//1171 -f 1498//1172 1497//1155 1512//1173 -f 1493//1159 1492//1156 1507//1174 -f 1504//1157 1503//1153 1519//1175 -f 1499//1158 1498//1172 1514//1176 -f 1494//1162 1493//1159 1508//1177 -f 1505//1160 1504//1157 1520//1178 -f 1500//1161 1499//1158 1515//1179 -f 1495//1165 1494//1162 1509//1180 -f 1509//1180 1508//1177 1523//1181 -f 1520//1178 1519//1175 1535//1182 -f 1515//1179 1514//1176 1530//1183 -f 1510//1168 1509//1180 1524//1184 -f 1521//1166 1520//1178 1536//1185 -f 1516//1167 1515//1179 1531//1186 -f 1511//1170 1510//1168 1525//1187 -f 1517//1169 1516//1167 1532//1188 -f 1512//1173 1511//1170 1526//1189 -f 1518//1171 1517//1169 1533//1190 -f 1513//1191 1512//1173 1527//1192 -f 1508//1177 1507//1174 1522//1193 -f 1519//1175 1518//1171 1534//1194 -f 1514//1176 1513//1191 1529//1195 -f 1528//1196 1527//1192 1542//1197 -f 1523//1181 1522//1193 1537//1198 -f 1534//1194 1533//1190 1549//1199 -f 1529//1195 1528//1196 1544//1200 -f 1524//1184 1523//1181 1538//1201 -f 1535//1182 1534//1194 1550//1202 -f 1530//1183 1529//1195 1545//1203 -f 1525//1187 1524//1184 1539//1204 -f 1536//1185 1535//1182 1551//1205 -f 1531//1186 1530//1183 1546//1206 -f 1526//1189 1525//1187 1540//1207 -f 1532//1188 1531//1186 1547//1208 -f 1527//1192 1526//1189 1541//1209 -f 1533//1190 1532//1188 1548//1210 -f 1547//1208 1546//1206 1562//1211 -f 1542//1197 1541//1209 1557//1212 -f 1548//1210 1547//1208 1563//1213 -f 1543//1214 1542//1197 1558//1215 -f 1538//1201 1537//1198 1552//1216 -f 1549//1199 1548//1210 1564//1217 -f 1544//1200 1543//1214 1559//1218 -f 1539//1204 1538//1201 1553//1219 -f 1550//1202 1549//1199 1565//1220 -f 1545//1203 1544//1200 1560//1221 -f 1540//1207 1539//1204 1554//1222 -f 1551//1205 1550//1202 1566//1223 -f 1546//1206 1545//1203 1561//1224 -f 1541//1209 1540//1207 1555//1225 -f 1566//1223 1565//1220 1580//1226 -f 1561//1224 1560//1221 1575//1227 -f 1556//1228 1555//1225 1571//1229 -f 1562//1211 1561//1224 1576//1230 -f 1557//1212 1556//1228 1572//1231 -f 1563//1213 1562//1211 1577//1232 -f 1558//1215 1557//1212 1573//1233 -f 1553//1219 1552//1216 1568//1234 -f 1564//1217 1563//1213 1578//1235 -f 1559//1218 1558//1215 1574//1236 -f 1554//1222 1553//1219 1569//1237 -f 1565//1220 1564//1217 1579//1238 -f 1560//1221 1559//1218 1575//1227 -f 1555//1225 1554//1222 1570//1239 -f 1580//1226 1579//1238 1594//1240 -f 1575//1227 1574//1236 1589//1241 -f 1570//1239 1569//1237 1585//1242 -f 1581//1243 1580//1226 1595//1244 -f 1576//1230 1575//1227 1590//1245 -f 1571//1229 1570//1239 1586//1246 -f 1577//1232 1576//1230 1591//1247 -f 1572//1231 1571//1229 1587//1248 -f 1578//1235 1577//1232 1592//1249 -f 1573//1233 1572//1231 1588//1250 -f 1568//1234 1567//1251 1583//1252 -f 1579//1238 1578//1235 1593//1253 -f 1574//1236 1573//1233 1589//1241 -f 1569//1237 1568//1234 1584//1254 -f 1583//1252 1582//1255 1598//1256 -f 1594//1240 1593//1253 1608//1257 -f 1589//1241 1588//1250 1604//1258 -f 1584//1254 1583//1252 1599//1259 -f 1595//1244 1594//1240 1609//1260 -f 1590//1245 1589//1241 1604//1258 -f 1585//1242 1584//1254 1600//1261 -f 1596//1262 1595//1244 1610//1263 -f 1591//1247 1590//1245 1605//1264 -f 1586//1246 1585//1242 1601//1265 -f 1592//1249 1591//1247 1606//1266 -f 1587//1248 1586//1246 1602//1267 -f 1593//1253 1592//1249 1607//1268 -f 1588//1250 1587//1248 1603//1269 -f 1602//1267 1601//1265 1617//1270 -f 1608//1257 1607//1268 1622//1271 -f 1603//1269 1602//1267 1618//1272 -f 1598//1256 1597//1273 1613//1274 -f 1609//1260 1608//1257 1623//1275 -f 1604//1258 1603//1269 1619//1276 -f 1599//1259 1598//1256 1614//1277 -f 1610//1263 1609//1260 1624//1278 -f 1605//1264 1604//1258 1619//1276 -f 1600//1261 1599//1259 1615//1279 -f 1611//1280 1610//1263 1625//1281 -f 1606//1266 1605//1264 1620//1282 -f 1601//1265 1600//1261 1616//1283 -f 1607//1268 1606//1266 1621//1284 -f 1621//1284 1620//1282 1635//1285 -f 1616//1283 1615//1279 1631//1286 -f 1622//1271 1621//1284 1636//1287 -f 1617//1270 1616//1283 1632//1288 -f 1623//1275 1622//1271 1637//1289 -f 1618//1272 1617//1270 1633//1290 -f 1613//1274 1612//1291 1628//1292 -f 1624//1278 1623//1275 1638//1293 -f 1619//1276 1618//1272 1634//1294 -f 1614//1277 1613//1274 1629//1295 -f 1625//1281 1624//1278 1639//1296 -f 1620//1282 1619//1276 1634//1294 -f 1615//1279 1614//1277 1630//1297 -f 1626//1298 1625//1281 1640//1299 -f 1640//1299 1639//1296 1654//1300 -f 1635//1285 1634//1294 1649//1301 -f 1630//1297 1629//1295 1645//1302 -f 1641//1303 1640//1299 1655//1304 -f 1636//1287 1635//1285 1650//1305 -f 1631//1286 1630//1297 1646//1306 -f 1637//1289 1636//1287 1651//1307 -f 1632//1288 1631//1286 1647//1308 -f 1638//1293 1637//1289 1652//1309 -f 1633//1290 1632//1288 1648//1310 -f 1628//1292 1627//1311 1643//1312 -f 1639//1296 1638//1293 1653//1313 -f 1634//1294 1633//1290 1649//1301 -f 1629//1295 1628//1292 1644//1314 -f 1643//1312 1642//1315 1658//1316 -f 1654//1300 1653//1313 1668//1317 -f 1649//1301 1648//1310 1663//1318 -f 1644//1314 1643//1312 1659//1319 -f 1655//1304 1654//1300 1669//1320 -f 1650//1305 1649//1301 1664//1321 -f 1645//1302 1644//1314 1660//1322 -f 1656//1323 1655//1304 1670//1324 -f 1651//1307 1650//1305 1665//1325 -f 1646//1306 1645//1302 1661//1326 -f 1652//1309 1651//1307 1666//1327 -f 1647//1308 1646//1306 1662//1328 -f 1653//1313 1652//1309 1667//1329 -f 1648//1310 1647//1308 1663//1318 -f 1662//1328 1661//1326 1676//1330 -f 1668//1317 1667//1329 1682//1331 -f 1663//1318 1662//1328 1677//1332 -f 1658//1316 1657//1333 1673//1334 -f 1669//1320 1668//1317 1683//1335 -f 1664//1321 1663//1318 1678//1336 -f 1659//1319 1658//1316 1674//1337 -f 1670//1324 1669//1320 1684//1338 -f 1665//1325 1664//1321 1679//1339 -f 1660//1322 1659//1319 1675//1340 -f 1671//1341 1670//1324 1685//1342 -f 1666//1327 1665//1325 1680//1343 -f 1661//1326 1660//1322 1676//1330 -f 1667//1329 1666//1327 1681//1344 -f 1681//1344 1680//1343 1695//1345 -f 1676//1330 1675//1340 1690//1346 -f 1682//1331 1681//1344 1697//1347 -f 1677//1332 1676//1330 1691//1348 -f 1683//1335 1682//1331 1698//1349 -f 1678//1336 1677//1332 1692//1350 -f 1673//1334 1672//1351 1687//1352 -f 1684//1338 1683//1335 1699//1353 -f 1679//1339 1678//1336 1693//1354 -f 1674//1337 1673//1334 1688//1355 -f 1685//1342 1684//1338 1700//1356 -f 1680//1343 1679//1339 1694//1357 -f 1675//1340 1674//1337 1689//1358 -f 1686//1359 1685//1342 1701//1360 -f 1700//1356 1699//1353 1715//1361 -f 1695//1345 1694//1357 1709//1362 -f 1690//1346 1689//1358 1704//1363 -f 1701//1360 1700//1356 1716//1364 -f 1696//1365 1695//1345 1711//1366 -f 1691//1348 1690//1346 1705//1367 -f 1697//1347 1696//1365 1712//1368 -f 1692//1350 1691//1348 1706//1369 -f 1698//1349 1697//1347 1713//1370 -f 1693//1354 1692//1350 1707//1371 -f 1688//1355 1687//1352 1702//1372 -f 1699//1353 1698//1349 1714//1373 -f 1694//1357 1693//1354 1708//1374 -f 1689//1358 1688//1355 1703//1375 -f 1714//1373 1713//1370 1729//1376 -f 1709//1362 1708//1374 1723//1377 -f 1704//1363 1703//1375 1718//1378 -f 1715//1361 1714//1373 1730//1379 -f 1710//1380 1709//1362 1724//1381 -f 1705//1367 1704//1363 1719//1382 -f 1716//1364 1715//1361 1731//1383 -f 1711//1366 1710//1380 1726//1384 -f 1706//1369 1705//1367 1720//1385 -f 1712//1368 1711//1366 1727//1386 -f 1707//1371 1706//1369 1721//1387 -f 1713//1370 1712//1368 1728//1388 -f 1708//1374 1707//1371 1722//1389 -f 1703//1375 1702//1372 1717//1390 -f 1728//1388 1727//1386 1743//1391 -f 1723//1377 1722//1389 1737//1392 -f 1718//1378 1717//1390 1732//1393 -f 1729//1376 1728//1388 1744//1394 -f 1724//1381 1723//1377 1738//1395 -f 1719//1382 1718//1378 1733//1396 -f 1730//1379 1729//1376 1745//1397 -f 1725//1398 1724//1381 1739//1399 -f 1720//1385 1719//1382 1734//1400 -f 1731//1383 1730//1379 1746//1401 -f 1726//1384 1725//1398 1741//1402 -f 1721//1387 1720//1385 1735//1403 -f 1727//1386 1726//1384 1742//1404 -f 1722//1389 1721//1387 1736//1405 -f 1736//1405 1735//1403 1750//1406 -f 1742//1404 1741//1402 1757//1407 -f 1737//1392 1736//1405 1751//1408 -f 1743//1391 1742//1404 1758//1409 -f 1738//1395 1737//1392 1752//1410 -f 1733//1396 1732//1393 1747//1411 -f 1744//1394 1743//1391 1759//1412 -f 1739//1399 1738//1395 1753//1413 -f 1734//1400 1733//1396 1748//1414 -f 1745//1397 1744//1394 1760//1415 -f 1740//1416 1739//1399 1754//1417 -f 1735//1403 1734//1400 1749//1418 -f 1746//1401 1745//1397 1761//1419 -f 1741//1402 1740//1416 1756//1420 -f 1755//1421 1754//1417 1769//1422 -f 1750//1406 1749//1418 1764//1423 -f 1761//1419 1760//1415 1776//1424 -f 1756//1420 1755//1421 1771//1425 -f 1751//1408 1750//1406 1765//1426 -f 1757//1407 1756//1420 1772//1427 -f 1752//1410 1751//1408 1766//1428 -f 1758//1409 1757//1407 1773//1429 -f 1753//1413 1752//1410 1767//1430 -f 1748//1414 1747//1411 1762//1431 -f 1759//1412 1758//1409 1774//1432 -f 1754//1417 1753//1413 1768//1433 -f 1749//1418 1748//1414 1763//1434 -f 1760//1415 1759//1412 1775//1435 -f 1774//1432 1773//1429 1790//1436 -f 1769//1422 1768//1433 1784//1437 -f 1764//1423 1763//1434 1779//1438 -f 1775//1435 1774//1432 1791//1439 -f 1770//1440 1769//1422 1785//1441 -f 1765//1426 1764//1423 1780//1442 -f 1776//1424 1775//1435 1792//1443 -f 1771//1425 1770//1440 1787//1444 -f 1766//1428 1765//1426 1781//1445 -f 1772//1427 1771//1425 1788//1446 -f 1767//1430 1766//1428 1782//1447 -f 1773//1429 1772//1427 1789//1448 -f 1768//1433 1767//1430 1783//1449 -f 1763//1434 1762//1431 1778//1450 -f 1789//1448 1788//1446 1804//1451 -f 1784//1437 1783//1449 1798//1452 -f 1779//1438 1778//1450 1793//1453 -f 1790//1436 1789//1448 1805//1454 -f 1785//1441 1784//1437 1799//1455 -f 1780//1442 1779//1438 1794//1456 -f 1791//1439 1790//1436 1806//1457 -f 1786//1458 1785//1441 1800//1459 -f 1781//1445 1780//1442 1795//1460 -f 1792//1443 1791//1439 1807//1461 -f 1787//1444 1786//1458 1801//1462 -f 1782//1447 1781//1445 1796//1463 -f 1788//1446 1787//1444 1802//1464 -f 1783//1449 1782//1447 1797//1465 -f 1797//1465 1796//1463 1812//1466 -f 1803//1467 1802//1464 1817//1468 -f 1798//1452 1797//1465 1813//1469 -f 1804//1451 1803//1467 1818//1470 -f 1799//1455 1798//1452 1814//1471 -f 1794//1456 1793//1453 1809//1472 -f 1805//1454 1804//1451 1819//1473 -f 1800//1459 1799//1455 1814//1471 -f 1795//1460 1794//1456 1810//1474 -f 1806//1457 1805//1454 1820//1475 -f 1801//1462 1800//1459 1815//1476 -f 1796//1463 1795//1460 1811//1477 -f 1807//1461 1806//1457 1821//1478 -f 1802//1464 1801//1462 1816//1479 -f 1816//1479 1815//1476 1830//1480 -f 1811//1477 1810//1474 1826//1481 -f 1822//1482 1821//1478 1836//1483 -f 1817//1468 1816//1479 1831//1484 -f 1812//1466 1811//1477 1827//1485 -f 1818//1470 1817//1468 1832//1486 -f 1813//1469 1812//1466 1828//1487 -f 1819//1473 1818//1470 1833//1488 -f 1814//1471 1813//1469 1829//1489 -f 1809//1472 1808//1490 1824//1491 -f 1820//1475 1819//1473 1834//1492 -f 1815//1476 1814//1471 1830//1480 -f 1810//1474 1809//1472 1825//1493 -f 1821//1478 1820//1475 1835//1494 -f 1835//1494 1834//1492 1849//1495 -f 1830//1480 1829//1489 1845//1496 -f 1825//1493 1824//1491 1840//1497 -f 1836//1483 1835//1494 1850//1498 -f 1831//1484 1830//1480 1845//1496 -f 1826//1481 1825//1493 1841//1499 -f 1837//1500 1836//1483 1851//1501 -f 1832//1486 1831//1484 1846//1502 -f 1827//1485 1826//1481 1842//1503 -f 1833//1488 1832//1486 1847//1504 -f 1828//1487 1827//1485 1843//1505 -f 1834//1492 1833//1488 1848//1506 -f 1829//1489 1828//1487 1844//1507 -f 1824//1491 1823//1508 1839//1509 -f 1849//1495 1848//1506 1863//1510 -f 1844//1507 1843//1505 1859//1511 -f 1839//1509 1838//1512 1854//1513 -f 1850//1498 1849//1495 1864//1514 -f 1845//1496 1844//1507 1860//1515 -f 1840//1497 1839//1509 1855//1516 -f 1851//1501 1850//1498 1865//1517 -f 1846//1502 1845//1496 1860//1515 -f 1841//1499 1840//1497 1856//1518 -f 1852//1519 1851//1501 1866//1520 -f 1847//1504 1846//1502 1861//1521 -f 1842//1503 1841//1499 1857//1522 -f 1848//1506 1847//1504 1862//1523 -f 1843//1505 1842//1503 1858//1524 -f 1863//1510 1862//1523 1877//1525 -f 1858//1524 1857//1522 1873//1526 -f 1864//1514 1863//1510 1878//1527 -f 1859//1511 1858//1524 1874//1528 -f 1854//1513 1853//1529 1869//1530 -f 1865//1517 1864//1514 1879//1531 -f 1860//1515 1859//1511 1875//1532 -f 1855//1516 1854//1513 1870//1533 -f 1866//1520 1865//1517 1880//1534 -f 1861//1521 1860//1515 1875//1532 -f 1856//1518 1855//1516 1871//1535 -f 1867//1536 1866//1520 1881//1537 -f 1862//1523 1861//1521 1876//1538 -f 1857//1522 1856//1518 1872//1539 -f 1871//1535 1870//1533 1886//1540 -f 1882//1541 1881//1537 1896//1542 -f 1877//1525 1876//1538 1891//1543 -f 1872//1539 1871//1535 1887//1544 -f 1878//1527 1877//1525 1892//1545 -f 1873//1526 1872//1539 1888//1546 -f 1879//1531 1878//1527 1893//1547 -f 1874//1528 1873//1526 1889//1548 -f 1869//1530 1868//1549 1884//1550 -f 1880//1534 1879//1531 1894//1551 -f 1875//1532 1874//1528 1890//1552 -f 1870//1533 1869//1530 1885//1553 -f 1881//1537 1880//1534 1895//1554 -f 1876//1538 1875//1532 1890//1552 -f 1890//1552 1889//1548 1906//1555 -f 1885//1553 1884//1550 1901//1556 -f 1896//1542 1895//1554 1911//1557 -f 1891//1543 1890//1552 1907//1558 -f 1886//1540 1885//1553 1902//1559 -f 1897//1560 1896//1542 1912//1561 -f 1892//1545 1891//1543 1907//1558 -f 1887//1544 1886//1540 1903//1562 -f 1893//1547 1892//1545 1908//1563 -f 1888//1546 1887//1544 1904//1564 -f 1894//1551 1893//1547 1909//1565 -f 1889//1548 1888//1546 1905//1566 -f 1884//1550 1883//1567 1900//1568 -f 1895//1554 1894//1551 1910//1569 -f 1910//1569 1909//1565 1924//1570 -f 1905//1566 1904//1564 1920//1571 -f 1900//1568 1899//1572 1915//1573 -f 1911//1557 1910//1569 1925//1574 -f 1906//1555 1905//1566 1921//1575 -f 1901//1556 1900//1568 1916//1576 -f 1912//1561 1911//1557 1926//1577 -f 1907//1558 1906//1555 1922//1578 -f 1902//1559 1901//1556 1917//1579 -f 1913//1580 1912//1561 1927//1581 -f 1908//1563 1907//1558 1923//1582 -f 1903//1562 1902//1559 1918//1583 -f 1909//1565 1908//1563 1924//1570 -f 1904//1564 1903//1562 1919//1584 -f 1777//1585 1461//1126 1476//1127 -f 1447//1111 1898//1586 1462//1112 -f 1777//1585 1476//1127 1491//1145 -f 1462//1112 1898//1586 1477//1138 -f 1477//1138 1898//1586 1492//1156 -f 1777//1585 1491//1145 1506//1163 -f 1777//1585 1506//1163 1521//1166 -f 1492//1156 1898//1586 1507//1174 -f 1777//1585 1521//1166 1536//1185 -f 1507//1174 1898//1586 1522//1193 -f 1777//1585 1536//1185 1551//1205 -f 1522//1193 1898//1586 1537//1198 -f 1537//1198 1898//1586 1552//1216 -f 1777//1585 1551//1205 1566//1223 -f 1777//1585 1566//1223 1581//1243 -f 1552//1216 1898//1586 1567//1251 -f 1777//1585 1581//1243 1596//1262 -f 1567//1251 1898//1586 1582//1255 -f 1777//1585 1596//1262 1611//1280 -f 1582//1255 1898//1586 1597//1273 -f 1597//1273 1898//1586 1612//1291 -f 1777//1585 1611//1280 1626//1298 -f 1777//1585 1626//1298 1641//1303 -f 1612//1291 1898//1586 1627//1311 -f 1777//1585 1641//1303 1656//1323 -f 1627//1311 1898//1586 1642//1315 -f 1777//1585 1656//1323 1671//1341 -f 1642//1315 1898//1586 1657//1333 -f 1657//1333 1898//1586 1672//1351 -f 1777//1585 1671//1341 1686//1359 -f 1777//1585 1686//1359 1701//1360 -f 1672//1351 1898//1586 1687//1352 -f 1777//1585 1701//1360 1716//1364 -f 1687//1352 1898//1586 1702//1372 -f 1777//1585 1716//1364 1731//1383 -f 1702//1372 1898//1586 1717//1390 -f 1717//1390 1898//1586 1732//1393 -f 1777//1585 1731//1383 1746//1401 -f 1777//1585 1746//1401 1761//1419 -f 1732//1393 1898//1586 1747//1411 -f 1777//1585 1761//1419 1776//1424 -f 1747//1411 1898//1586 1762//1431 -f 1777//1585 1776//1424 1792//1443 -f 1762//1431 1898//1586 1778//1450 -f 1778//1450 1898//1586 1793//1453 -f 1777//1585 1792//1443 1807//1461 -f 1777//1585 1807//1461 1822//1482 -f 1793//1453 1898//1586 1808//1490 -f 1777//1585 1822//1482 1837//1500 -f 1808//1490 1898//1586 1823//1508 -f 1777//1585 1837//1500 1852//1519 -f 1823//1508 1898//1586 1838//1512 -f 1777//1585 1852//1519 1867//1536 -f 1838//1512 1898//1586 1853//1529 -f 1777//1585 1867//1536 1882//1541 -f 1853//1529 1898//1586 1868//1549 -f 1777//1585 1882//1541 1897//1560 -f 1868//1549 1898//1586 1883//1567 -f 1777//1585 1897//1560 1913//1580 -f 1883//1567 1898//1586 1899//1572 -f 1777//1585 1913//1580 1928//1587 -f 1899//1572 1898//1586 1914//1588 -f 1777//1585 1928//1587 1461//1126 -f 1924//1570 1923//1582 1457//1132 -f 1919//1584 1918//1583 1451//1130 -f 1914//1588 1898//1586 1447//1111 -f 1925//1574 1924//1570 1458//1114 -f 1920//1571 1919//1584 1453//1107 -f 1915//1573 1914//1588 1447//1111 -f 1926//1577 1925//1574 1459//1113 -f 1921//1575 1920//1571 1454//1116 -f 1916//1576 1915//1573 1448//1110 -f 1927//1581 1926//1577 1460//1120 -f 1922//1578 1921//1575 1455//1122 -f 1917//1579 1916//1576 1449//1118 -f 1928//1587 1927//1581 1461//1126 -f 1923//1582 1922//1578 1456//1128 -f 1918//1583 1917//1579 1450//1124 -f 1935//1107 1934//1108 1949//1109 -f 1930//1110 1929//1589 1944//1112 -f 1941//1113 1940//1114 1956//1590 -f 1936//1116 1935//1107 1951//1117 -f 1931//1118 1930//1110 1945//1119 -f 1942//1120 1941//1113 1957//1121 -f 1937//1122 1936//1116 1952//1123 -f 1932//1124 1931//1118 1946//1125 -f 1943//1591 1942//1120 1958//1127 -f 1938//1128 1937//1122 1953//1129 -f 1933//1130 1932//1124 1947//1131 -f 1939//1592 1938//1128 1954//1133 -f 1934//1108 1933//1130 1948//1134 -f 1940//1114 1939//1592 1955//1135 -f 1950//1136 1949//1109 1964//1137 -f 1945//1119 1944//1112 1959//1138 -f 1956//1590 1955//1135 1971//1139 -f 1951//1117 1950//1136 1966//1140 -f 1946//1125 1945//1119 1960//1141 -f 1957//1121 1956//1590 1972//1142 -f 1952//1123 1951//1117 1967//1143 -f 1947//1131 1946//1125 1961//1144 -f 1958//1127 1957//1121 1973//1145 -f 1953//1129 1952//1123 1968//1593 -f 1948//1134 1947//1131 1962//1147 -f 1954//1133 1953//1129 1969//1148 -f 1949//1109 1948//1134 1963//1149 -f 1955//1135 1954//1133 1970//1594 -f 1969//1148 1968//1593 1984//1151 -f 1964//1137 1963//1149 1978//1152 -f 1970//1594 1969//1148 1985//1595 -f 1965//1154 1964//1137 1979//1155 -f 1960//1141 1959//1138 1974//1596 -f 1971//1139 1970//1594 1986//1157 -f 1966//1140 1965//1154 1981//1158 -f 1961//1144 1960//1141 1975//1159 -f 1972//1142 1971//1139 1987//1160 -f 1967//1143 1966//1140 1982//1597 -f 1962//1147 1961//1144 1976//1162 -f 1973//1145 1972//1142 1988//1598 -f 1968//1593 1967//1143 1983//1164 -f 1963//1149 1962//1147 1977//1165 -f 1988//1598 1987//1160 2003//1166 -f 1983//1164 1982//1597 1998//1599 -f 1978//1152 1977//1165 1992//1168 -f 1984//1151 1983//1164 1999//1600 -f 1979//1155 1978//1152 1993//1601 -f 1985//1595 1984//1151 2000//1171 -f 1980//1172 1979//1155 1994//1173 -f 1975//1159 1974//1596 1989//1174 -f 1986//1157 1985//1595 2001//1175 -f 1981//1158 1980//1172 1996//1176 -f 1976//1162 1975//1159 1990//1177 -f 1987//1160 1986//1157 2002//1178 -f 1982//1597 1981//1158 1997//1179 -f 1977//1165 1976//1162 1991//1602 -f 1991//1602 1990//1177 2005//1181 -f 2002//1178 2001//1175 2017//1182 -f 1997//1179 1996//1176 2012//1183 -f 1992//1168 1991//1602 2006//1603 -f 2003//1166 2002//1178 2018//1185 -f 1998//1599 1997//1179 2013//1186 -f 1993//1601 1992//1168 2007//1604 -f 1999//1600 1998//1599 2014//1188 -f 1994//1173 1993//1601 2008//1189 -f 2000//1171 1999//1600 2015//1190 -f 1995//1191 1994//1173 2009//1192 -f 1990//1177 1989//1174 2004//1605 -f 2001//1175 2000//1171 2016//1194 -f 1996//1176 1995//1191 2011//1606 -f 2010//1196 2009//1192 2024//1197 -f 2005//1181 2004//1605 2019//1198 -f 2016//1194 2015//1190 2031//1199 -f 2011//1606 2010//1196 2026//1607 -f 2006//1603 2005//1181 2020//1201 -f 2017//1182 2016//1194 2032//1202 -f 2012//1183 2011//1606 2027//1203 -f 2007//1604 2006//1603 2021//1204 -f 2018//1185 2017//1182 2033//1608 -f 2013//1186 2012//1183 2028//1206 -f 2008//1189 2007//1604 2022//1609 -f 2014//1188 2013//1186 2029//1208 -f 2009//1192 2008//1189 2023//1209 -f 2015//1190 2014//1188 2030//1210 -f 2029//1208 2028//1206 2044//1211 -f 2024//1197 2023//1209 2039//1212 -f 2030//1210 2029//1208 2045//1213 -f 2025//1610 2024//1197 2040//1215 -f 2020//1201 2019//1198 2034//1216 -f 2031//1199 2030//1210 2046//1217 -f 2026//1607 2025//1610 2041//1611 -f 2021//1204 2020//1201 2035//1219 -f 2032//1202 2031//1199 2047//1220 -f 2027//1203 2026//1607 2042//1221 -f 2022//1609 2021//1204 2036//1222 -f 2033//1608 2032//1202 2048//1612 -f 2028//1206 2027//1203 2043//1224 -f 2023//1209 2022//1609 2037//1225 -f 2048//1612 2047//1220 2062//1226 -f 2043//1224 2042//1221 2057//1613 -f 2038//1228 2037//1225 2053//1229 -f 2044//1211 2043//1224 2058//1230 -f 2039//1212 2038//1228 2054//1614 -f 2045//1213 2044//1211 2059//1232 -f 2040//1215 2039//1212 2055//1615 -f 2035//1219 2034//1216 2050//1616 -f 2046//1217 2045//1213 2060//1235 -f 2041//1611 2040//1215 2056//1236 -f 2036//1222 2035//1219 2051//1237 -f 2047//1220 2046//1217 2061//1238 -f 2042//1221 2041//1611 2057//1613 -f 2037//1225 2036//1222 2052//1239 -f 2062//1226 2061//1238 2076//1617 -f 2057//1613 2056//1236 2071//1241 -f 2052//1239 2051//1237 2067//1618 -f 2063//1243 2062//1226 2077//1244 -f 2058//1230 2057//1613 2072//1245 -f 2053//1229 2052//1239 2068//1619 -f 2059//1232 2058//1230 2073//1247 -f 2054//1614 2053//1229 2069//1248 -f 2060//1235 2059//1232 2074//1249 -f 2055//1615 2054//1614 2070//1250 -f 2050//1616 2049//1251 2065//1252 -f 2061//1238 2060//1235 2075//1253 -f 2056//1236 2055//1615 2071//1241 -f 2051//1237 2050//1616 2066//1620 -f 2065//1252 2064//1621 2080//1622 -f 2076//1617 2075//1253 2090//1257 -f 2071//1241 2070//1250 2086//1258 -f 2066//1620 2065//1252 2081//1623 -f 2077//1244 2076//1617 2091//1260 -f 2072//1245 2071//1241 2086//1258 -f 2067//1618 2066//1620 2082//1261 -f 2078//1262 2077//1244 2092//1263 -f 2073//1247 2072//1245 2087//1624 -f 2068//1619 2067//1618 2083//1265 -f 2074//1249 2073//1247 2088//1625 -f 2069//1248 2068//1619 2084//1626 -f 2075//1253 2074//1249 2089//1268 -f 2070//1250 2069//1248 2085//1269 -f 2084//1626 2083//1265 2099//1270 -f 2090//1257 2089//1268 2104//1271 -f 2085//1269 2084//1626 2100//1627 -f 2080//1622 2079//1628 2095//1274 -f 2091//1260 2090//1257 2105//1275 -f 2086//1258 2085//1269 2101//1276 -f 2081//1623 2080//1622 2096//1277 -f 2092//1263 2091//1260 2106//1278 -f 2087//1624 2086//1258 2101//1276 -f 2082//1261 2081//1623 2097//1629 -f 2093//1280 2092//1263 2107//1281 -f 2088//1625 2087//1624 2102//1282 -f 2083//1265 2082//1261 2098//1283 -f 2089//1268 2088//1625 2103//1630 -f 2103//1630 2102//1282 2117//1285 -f 2098//1283 2097//1629 2113//1286 -f 2104//1271 2103//1630 2118//1287 -f 2099//1270 2098//1283 2114//1288 -f 2105//1275 2104//1271 2119//1631 -f 2100//1627 2099//1270 2115//1290 -f 2095//1274 2094//1291 2110//1292 -f 2106//1278 2105//1275 2120//1632 -f 2101//1276 2100//1627 2116//1294 -f 2096//1277 2095//1274 2111//1633 -f 2107//1281 2106//1278 2121//1296 -f 2102//1282 2101//1276 2116//1294 -f 2097//1629 2096//1277 2112//1634 -f 2108//1298 2107//1281 2122//1299 -f 2122//1299 2121//1296 2136//1300 -f 2117//1285 2116//1294 2131//1301 -f 2112//1634 2111//1633 2127//1302 -f 2123//1635 2122//1299 2137//1304 -f 2118//1287 2117//1285 2132//1305 -f 2113//1286 2112//1634 2128//1306 -f 2119//1631 2118//1287 2133//1307 -f 2114//1288 2113//1286 2129//1308 -f 2120//1632 2119//1631 2134//1309 -f 2115//1290 2114//1288 2130//1310 -f 2110//1292 2109//1636 2125//1637 -f 2121//1296 2120//1632 2135//1638 -f 2116//1294 2115//1290 2131//1301 -f 2111//1633 2110//1292 2126//1639 -f 2125//1637 2124//1315 2140//1316 -f 2136//1300 2135//1638 2150//1317 -f 2131//1301 2130//1310 2145//1640 -f 2126//1639 2125//1637 2141//1319 -f 2137//1304 2136//1300 2151//1320 -f 2132//1305 2131//1301 2146//1321 -f 2127//1302 2126//1639 2142//1322 -f 2138//1323 2137//1304 2152//1641 -f 2133//1307 2132//1305 2147//1642 -f 2128//1306 2127//1302 2143//1326 -f 2134//1309 2133//1307 2148//1643 -f 2129//1308 2128//1306 2144//1328 -f 2135//1638 2134//1309 2149//1329 -f 2130//1310 2129//1308 2145//1640 -f 2144//1328 2143//1326 2158//1330 -f 2150//1317 2149//1329 2164//1331 -f 2145//1640 2144//1328 2159//1332 -f 2140//1316 2139//1333 2155//1334 -f 2151//1320 2150//1317 2165//1644 -f 2146//1321 2145//1640 2160//1645 -f 2141//1319 2140//1316 2156//1337 -f 2152//1641 2151//1320 2166//1338 -f 2147//1642 2146//1321 2161//1339 -f 2142//1322 2141//1319 2157//1340 -f 2153//1646 2152//1641 2167//1342 -f 2148//1643 2147//1642 2162//1647 -f 2143//1326 2142//1322 2158//1330 -f 2149//1329 2148//1643 2163//1344 -f 2163//1344 2162//1647 2177//1345 -f 2158//1330 2157//1340 2172//1346 -f 2164//1331 2163//1344 2179//1648 -f 2159//1332 2158//1330 2173//1348 -f 2165//1644 2164//1331 2180//1349 -f 2160//1645 2159//1332 2174//1350 -f 2155//1334 2154//1649 2169//1352 -f 2166//1338 2165//1644 2181//1650 -f 2161//1339 2160//1645 2175//1354 -f 2156//1337 2155//1334 2170//1651 -f 2167//1342 2166//1338 2182//1356 -f 2162//1647 2161//1339 2176//1357 -f 2157//1340 2156//1337 2171//1358 -f 2168//1359 2167//1342 2183//1360 -f 2182//1356 2181//1650 2197//1652 -f 2177//1345 2176//1357 2191//1653 -f 2172//1346 2171//1358 2186//1654 -f 2183//1360 2182//1356 2198//1364 -f 2178//1365 2177//1345 2193//1366 -f 2173//1348 2172//1346 2187//1367 -f 2179//1648 2178//1365 2194//1368 -f 2174//1350 2173//1348 2188//1655 -f 2180//1349 2179//1648 2195//1370 -f 2175//1354 2174//1350 2189//1371 -f 2170//1651 2169//1352 2184//1656 -f 2181//1650 2180//1349 2196//1373 -f 2176//1357 2175//1354 2190//1374 -f 2171//1358 2170//1651 2185//1375 -f 2196//1373 2195//1370 2211//1376 -f 2191//1653 2190//1374 2205//1377 -f 2186//1654 2185//1375 2200//1378 -f 2197//1652 2196//1373 2212//1379 -f 2192//1380 2191//1653 2206//1381 -f 2187//1367 2186//1654 2201//1382 -f 2198//1364 2197//1652 2213//1383 -f 2193//1366 2192//1380 2208//1384 -f 2188//1655 2187//1367 2202//1385 -f 2194//1368 2193//1366 2209//1386 -f 2189//1371 2188//1655 2203//1387 -f 2195//1370 2194//1368 2210//1388 -f 2190//1374 2189//1371 2204//1389 -f 2185//1375 2184//1656 2199//1390 -f 2210//1388 2209//1386 2225//1391 -f 2205//1377 2204//1389 2219//1392 -f 2200//1378 2199//1390 2214//1393 -f 2211//1376 2210//1388 2226//1657 -f 2206//1381 2205//1377 2220//1658 -f 2201//1382 2200//1378 2215//1396 -f 2212//1379 2211//1376 2227//1397 -f 2207//1398 2206//1381 2221//1659 -f 2202//1385 2201//1382 2216//1400 -f 2213//1383 2212//1379 2228//1401 -f 2208//1384 2207//1398 2223//1660 -f 2203//1387 2202//1385 2217//1661 -f 2209//1386 2208//1384 2224//1404 -f 2204//1389 2203//1387 2218//1405 -f 2218//1405 2217//1661 2232//1662 -f 2224//1404 2223//1660 2239//1663 -f 2219//1392 2218//1405 2233//1664 -f 2225//1391 2224//1404 2240//1409 -f 2220//1658 2219//1392 2234//1665 -f 2215//1396 2214//1393 2229//1411 -f 2226//1657 2225//1391 2241//1666 -f 2221//1659 2220//1658 2235//1413 -f 2216//1400 2215//1396 2230//1414 -f 2227//1397 2226//1657 2242//1667 -f 2222//1668 2221//1659 2236//1417 -f 2217//1661 2216//1400 2231//1669 -f 2228//1401 2227//1397 2243//1419 -f 2223//1660 2222//1668 2238//1420 -f 2237//1421 2236//1417 2251//1670 -f 2232//1662 2231//1669 2246//1423 -f 2243//1419 2242//1667 2258//1424 -f 2238//1420 2237//1421 2253//1425 -f 2233//1664 2232//1662 2247//1671 -f 2239//1663 2238//1420 2254//1427 -f 2234//1665 2233//1664 2248//1428 -f 2240//1409 2239//1663 2255//1429 -f 2235//1413 2234//1665 2249//1430 -f 2230//1414 2229//1411 2244//1431 -f 2241//1666 2240//1409 2256//1672 -f 2236//1417 2235//1413 2250//1433 -f 2231//1669 2230//1414 2245//1434 -f 2242//1667 2241//1666 2257//1435 -f 2256//1672 2255//1429 2272//1436 -f 2251//1670 2250//1433 2266//1437 -f 2246//1423 2245//1434 2261//1438 -f 2257//1435 2256//1672 2273//1673 -f 2252//1440 2251//1670 2267//1674 -f 2247//1671 2246//1423 2262//1442 -f 2258//1424 2257//1435 2274//1443 -f 2253//1425 2252//1440 2269//1444 -f 2248//1428 2247//1671 2263//1445 -f 2254//1427 2253//1425 2270//1446 -f 2249//1430 2248//1428 2264//1447 -f 2255//1429 2254//1427 2271//1675 -f 2250//1433 2249//1430 2265//1449 -f 2245//1434 2244//1431 2260//1450 -f 2271//1675 2270//1446 2286//1451 -f 2266//1437 2265//1449 2280//1452 -f 2261//1438 2260//1450 2275//1676 -f 2272//1436 2271//1675 2287//1677 -f 2267//1674 2266//1437 2281//1455 -f 2262//1442 2261//1438 2276//1456 -f 2273//1673 2272//1436 2288//1457 -f 2268//1678 2267//1674 2282//1679 -f 2263//1445 2262//1442 2277//1680 -f 2274//1443 2273//1673 2289//1681 -f 2269//1444 2268//1678 2283//1682 -f 2264//1447 2263//1445 2278//1463 -f 2270//1446 2269//1444 2284//1464 -f 2265//1449 2264//1447 2279//1683 -f 2279//1683 2278//1463 2294//1466 -f 2285//1684 2284//1464 2299//1685 -f 2280//1452 2279//1683 2295//1469 -f 2286//1451 2285//1684 2300//1470 -f 2281//1455 2280//1452 2296//1471 -f 2276//1456 2275//1676 2291//1472 -f 2287//1677 2286//1451 2301//1473 -f 2282//1679 2281//1455 2296//1471 -f 2277//1680 2276//1456 2292//1686 -f 2288//1457 2287//1677 2302//1475 -f 2283//1682 2282//1679 2297//1476 -f 2278//1463 2277//1680 2293//1477 -f 2289//1681 2288//1457 2303//1687 -f 2284//1464 2283//1682 2298//1688 -f 2298//1688 2297//1476 2312//1480 -f 2293//1477 2292//1686 2308//1481 -f 2304//1482 2303//1687 2318//1483 -f 2299//1685 2298//1688 2313//1484 -f 2294//1466 2293//1477 2309//1485 -f 2300//1470 2299//1685 2314//1486 -f 2295//1469 2294//1466 2310//1487 -f 2301//1473 2300//1470 2315//1689 -f 2296//1471 2295//1469 2311//1489 -f 2291//1472 2290//1490 2306//1491 -f 2302//1475 2301//1473 2316//1690 -f 2297//1476 2296//1471 2312//1480 -f 2292//1686 2291//1472 2307//1493 -f 2303//1687 2302//1475 2317//1691 -f 2317//1691 2316//1690 2331//1495 -f 2312//1480 2311//1489 2327//1496 -f 2307//1493 2306//1491 2322//1497 -f 2318//1483 2317//1691 2332//1498 -f 2313//1484 2312//1480 2327//1496 -f 2308//1481 2307//1493 2323//1499 -f 2319//1692 2318//1483 2333//1693 -f 2314//1486 2313//1484 2328//1502 -f 2309//1485 2308//1481 2324//1503 -f 2315//1689 2314//1486 2329//1504 -f 2310//1487 2309//1485 2325//1505 -f 2316//1690 2315//1689 2330//1506 -f 2311//1489 2310//1487 2326//1507 -f 2306//1491 2305//1508 2321//1694 -f 2331//1495 2330//1506 2345//1510 -f 2326//1507 2325//1505 2341//1511 -f 2321//1694 2320//1695 2336//1513 -f 2332//1498 2331//1495 2346//1514 -f 2327//1496 2326//1507 2342//1515 -f 2322//1497 2321//1694 2337//1696 -f 2333//1693 2332//1498 2347//1517 -f 2328//1502 2327//1496 2342//1515 -f 2323//1499 2322//1497 2338//1518 -f 2334//1697 2333//1693 2348//1520 -f 2329//1504 2328//1502 2343//1521 -f 2324//1503 2323//1499 2339//1522 -f 2330//1506 2329//1504 2344//1523 -f 2325//1505 2324//1503 2340//1524 -f 2345//1510 2344//1523 2359//1525 -f 2340//1524 2339//1522 2355//1526 -f 2346//1514 2345//1510 2360//1527 -f 2341//1511 2340//1524 2356//1528 -f 2336//1513 2335//1529 2351//1698 -f 2347//1517 2346//1514 2361//1531 -f 2342//1515 2341//1511 2357//1532 -f 2337//1696 2336//1513 2352//1533 -f 2348//1520 2347//1517 2362//1534 -f 2343//1521 2342//1515 2357//1532 -f 2338//1518 2337//1696 2353//1699 -f 2349//1536 2348//1520 2363//1700 -f 2344//1523 2343//1521 2358//1701 -f 2339//1522 2338//1518 2354//1702 -f 2353//1699 2352//1533 2368//1540 -f 2364//1541 2363//1700 2378//1703 -f 2359//1525 2358//1701 2373//1543 -f 2354//1702 2353//1699 2369//1544 -f 2360//1527 2359//1525 2374//1545 -f 2355//1526 2354//1702 2370//1546 -f 2361//1531 2360//1527 2375//1547 -f 2356//1528 2355//1526 2371//1548 -f 2351//1698 2350//1549 2366//1550 -f 2362//1534 2361//1531 2376//1551 -f 2357//1532 2356//1528 2372//1552 -f 2352//1533 2351//1698 2367//1704 -f 2363//1700 2362//1534 2377//1705 -f 2358//1701 2357//1532 2372//1552 -f 2372//1552 2371//1548 2388//1706 -f 2367//1704 2366//1550 2383//1556 -f 2378//1703 2377//1705 2393//1557 -f 2373//1543 2372//1552 2389//1558 -f 2368//1540 2367//1704 2384//1559 -f 2379//1560 2378//1703 2394//1561 -f 2374//1545 2373//1543 2389//1558 -f 2369//1544 2368//1540 2385//1562 -f 2375//1547 2374//1545 2390//1563 -f 2370//1546 2369//1544 2386//1564 -f 2376//1551 2375//1547 2391//1565 -f 2371//1548 2370//1546 2387//1566 -f 2366//1550 2365//1567 2382//1707 -f 2377//1705 2376//1551 2392//1708 -f 2392//1708 2391//1565 2406//1570 -f 2387//1566 2386//1564 2402//1571 -f 2382//1707 2381//1572 2397//1573 -f 2393//1557 2392//1708 2407//1574 -f 2388//1706 2387//1566 2403//1709 -f 2383//1556 2382//1707 2398//1576 -f 2394//1561 2393//1557 2408//1577 -f 2389//1558 2388//1706 2404//1578 -f 2384//1559 2383//1556 2399//1579 -f 2395//1710 2394//1561 2409//1581 -f 2390//1563 2389//1558 2405//1582 -f 2385//1562 2384//1559 2400//1583 -f 2391//1565 2390//1563 2406//1570 -f 2386//1564 2385//1562 2401//1584 -f 2259//1585 1943//1591 1958//1127 -f 1929//1589 2380//1586 1944//1112 -f 2259//1585 1958//1127 1973//1145 -f 1944//1112 2380//1586 1959//1138 -f 1959//1138 2380//1586 1974//1596 -f 2259//1585 1973//1145 1988//1598 -f 2259//1585 1988//1598 2003//1166 -f 1974//1596 2380//1586 1989//1174 -f 2259//1585 2003//1166 2018//1185 -f 1989//1174 2380//1586 2004//1605 -f 2259//1585 2018//1185 2033//1608 -f 2004//1605 2380//1586 2019//1198 -f 2019//1198 2380//1586 2034//1216 -f 2259//1585 2033//1608 2048//1612 -f 2259//1585 2048//1612 2063//1243 -f 2034//1216 2380//1586 2049//1251 -f 2259//1585 2063//1243 2078//1262 -f 2049//1251 2380//1586 2064//1621 -f 2259//1585 2078//1262 2093//1280 -f 2064//1621 2380//1586 2079//1628 -f 2079//1628 2380//1586 2094//1291 -f 2259//1585 2093//1280 2108//1298 -f 2259//1585 2108//1298 2123//1635 -f 2094//1291 2380//1586 2109//1636 -f 2259//1585 2123//1635 2138//1323 -f 2109//1636 2380//1586 2124//1315 -f 2259//1585 2138//1323 2153//1646 -f 2124//1315 2380//1586 2139//1333 -f 2139//1333 2380//1586 2154//1649 -f 2259//1585 2153//1646 2168//1359 -f 2259//1585 2168//1359 2183//1360 -f 2154//1649 2380//1586 2169//1352 -f 2259//1585 2183//1360 2198//1364 -f 2169//1352 2380//1586 2184//1656 -f 2259//1585 2198//1364 2213//1383 -f 2184//1656 2380//1586 2199//1390 -f 2199//1390 2380//1586 2214//1393 -f 2259//1585 2213//1383 2228//1401 -f 2259//1585 2228//1401 2243//1419 -f 2214//1393 2380//1586 2229//1411 -f 2259//1585 2243//1419 2258//1424 -f 2229//1411 2380//1586 2244//1431 -f 2259//1585 2258//1424 2274//1443 -f 2244//1431 2380//1586 2260//1450 -f 2260//1450 2380//1586 2275//1676 -f 2259//1585 2274//1443 2289//1681 -f 2259//1585 2289//1681 2304//1482 -f 2275//1676 2380//1586 2290//1490 -f 2259//1585 2304//1482 2319//1692 -f 2290//1490 2380//1586 2305//1508 -f 2259//1585 2319//1692 2334//1697 -f 2305//1508 2380//1586 2320//1695 -f 2259//1585 2334//1697 2349//1536 -f 2320//1695 2380//1586 2335//1529 -f 2259//1585 2349//1536 2364//1541 -f 2335//1529 2380//1586 2350//1549 -f 2259//1585 2364//1541 2379//1560 -f 2350//1549 2380//1586 2365//1567 -f 2259//1585 2379//1560 2395//1710 -f 2365//1567 2380//1586 2381//1572 -f 2259//1585 2395//1710 2410//1587 -f 2381//1572 2380//1586 2396//1588 -f 2259//1585 2410//1587 1943//1591 -f 2406//1570 2405//1582 1939//1592 -f 2401//1584 2400//1583 1933//1130 -f 2396//1588 2380//1586 1929//1589 -f 2407//1574 2406//1570 1940//1114 -f 2402//1571 2401//1584 1935//1107 -f 2397//1573 2396//1588 1929//1589 -f 2408//1577 2407//1574 1941//1113 -f 2403//1709 2402//1571 1936//1116 -f 2398//1576 2397//1573 1930//1110 -f 2409//1581 2408//1577 1942//1120 -f 2404//1578 2403//1709 1937//1122 -f 2399//1579 2398//1576 1931//1118 -f 2410//1587 2409//1581 1943//1591 -f 2405//1582 2404//1578 1938//1128 -f 2400//1583 2399//1579 1932//1124 -f 1468//1136 1453//1107 1467//1109 -f 1463//1119 1448//1110 1462//1112 -f 1458//1114 1473//1135 1474//1115 -f 1453//1107 1468//1136 1469//1117 -f 1464//1125 1449//1118 1463//1119 -f 1459//1113 1474//1115 1475//1121 -f 1454//1116 1469//1117 1470//1123 -f 1465//1131 1450//1124 1464//1125 -f 1460//1120 1475//1121 1476//1127 -f 1455//1122 1470//1123 1471//1129 -f 1466//1134 1451//1130 1465//1131 -f 1456//1128 1471//1129 1472//1133 -f 1467//1109 1452//1108 1466//1134 -f 1457//1132 1472//1133 1473//1135 -f 1483//1154 1468//1136 1482//1137 -f 1478//1141 1463//1119 1477//1138 -f 1473//1135 1488//1150 1489//1139 -f 1468//1136 1483//1154 1484//1140 -f 1479//1144 1464//1125 1478//1141 -f 1474//1115 1489//1139 1490//1142 -f 1469//1117 1484//1140 1485//1143 -f 1480//1147 1465//1131 1479//1144 -f 1475//1121 1490//1142 1491//1145 -f 1470//1123 1485//1143 1486//1146 -f 1481//1149 1466//1134 1480//1147 -f 1471//1129 1486//1146 1487//1148 -f 1482//1137 1467//1109 1481//1149 -f 1472//1133 1487//1148 1488//1150 -f 1486//1146 1501//1164 1502//1151 -f 1497//1155 1482//1137 1496//1152 -f 1487//1148 1502//1151 1503//1153 -f 1498//1172 1483//1154 1497//1155 -f 1493//1159 1478//1141 1492//1156 -f 1488//1150 1503//1153 1504//1157 -f 1483//1154 1498//1172 1499//1158 -f 1494//1162 1479//1144 1493//1159 -f 1489//1139 1504//1157 1505//1160 -f 1484//1140 1499//1158 1500//1161 -f 1495//1165 1480//1147 1494//1162 -f 1490//1142 1505//1160 1506//1163 -f 1485//1143 1500//1161 1501//1164 -f 1496//1152 1481//1149 1495//1165 -f 1505//1160 1520//1178 1521//1166 -f 1500//1161 1515//1179 1516//1167 -f 1511//1170 1496//1152 1510//1168 -f 1501//1164 1516//1167 1517//1169 -f 1512//1173 1497//1155 1511//1170 -f 1502//1151 1517//1169 1518//1171 -f 1513//1191 1498//1172 1512//1173 -f 1508//1177 1493//1159 1507//1174 -f 1503//1153 1518//1171 1519//1175 -f 1498//1172 1513//1191 1514//1176 -f 1509//1180 1494//1162 1508//1177 -f 1504//1157 1519//1175 1520//1178 -f 1499//1158 1514//1176 1515//1179 -f 1510//1168 1495//1165 1509//1180 -f 1524//1184 1509//1180 1523//1181 -f 1519//1175 1534//1194 1535//1182 -f 1514//1176 1529//1195 1530//1183 -f 1525//1187 1510//1168 1524//1184 -f 1520//1178 1535//1182 1536//1185 -f 1515//1179 1530//1183 1531//1186 -f 1526//1189 1511//1170 1525//1187 -f 1516//1167 1531//1186 1532//1188 -f 1527//1192 1512//1173 1526//1189 -f 1517//1169 1532//1188 1533//1190 -f 1528//1196 1513//1191 1527//1192 -f 1523//1181 1508//1177 1522//1193 -f 1518//1171 1533//1190 1534//1194 -f 1513//1191 1528//1196 1529//1195 -f 1543//1214 1528//1196 1542//1197 -f 1538//1201 1523//1181 1537//1198 -f 1533//1190 1548//1210 1549//1199 -f 1528//1196 1543//1214 1544//1200 -f 1539//1204 1524//1184 1538//1201 -f 1534//1194 1549//1199 1550//1202 -f 1529//1195 1544//1200 1545//1203 -f 1540//1207 1525//1187 1539//1204 -f 1535//1182 1550//1202 1551//1205 -f 1530//1183 1545//1203 1546//1206 -f 1541//1209 1526//1189 1540//1207 -f 1531//1186 1546//1206 1547//1208 -f 1542//1197 1527//1192 1541//1209 -f 1532//1188 1547//1208 1548//1210 -f 1546//1206 1561//1224 1562//1211 -f 1541//1209 1556//1228 1557//1212 -f 1547//1208 1562//1211 1563//1213 -f 1542//1197 1557//1212 1558//1215 -f 1553//1219 1538//1201 1552//1216 -f 1548//1210 1563//1213 1564//1217 -f 1543//1214 1558//1215 1559//1218 -f 1554//1222 1539//1204 1553//1219 -f 1549//1199 1564//1217 1565//1220 -f 1544//1200 1559//1218 1560//1221 -f 1555//1225 1540//1207 1554//1222 -f 1550//1202 1565//1220 1566//1223 -f 1545//1203 1560//1221 1561//1224 -f 1556//1228 1541//1209 1555//1225 -f 1581//1243 1566//1223 1580//1226 -f 1576//1230 1561//1224 1575//1227 -f 1555//1225 1570//1239 1571//1229 -f 1577//1232 1562//1211 1576//1230 -f 1556//1228 1571//1229 1572//1231 -f 1578//1235 1563//1213 1577//1232 -f 1557//1212 1572//1231 1573//1233 -f 1552//1216 1567//1251 1568//1234 -f 1579//1238 1564//1217 1578//1235 -f 1558//1215 1573//1233 1574//1236 -f 1553//1219 1568//1234 1569//1237 -f 1580//1226 1565//1220 1579//1238 -f 1559//1218 1574//1236 1575//1227 -f 1554//1222 1569//1237 1570//1239 -f 1595//1244 1580//1226 1594//1240 -f 1590//1245 1575//1227 1589//1241 -f 1569//1237 1584//1254 1585//1242 -f 1596//1262 1581//1243 1595//1244 -f 1591//1247 1576//1230 1590//1245 -f 1570//1239 1585//1242 1586//1246 -f 1592//1249 1577//1232 1591//1247 -f 1571//1229 1586//1246 1587//1248 -f 1593//1253 1578//1235 1592//1249 -f 1572//1231 1587//1248 1588//1250 -f 1567//1251 1582//1255 1583//1252 -f 1594//1240 1579//1238 1593//1253 -f 1573//1233 1588//1250 1589//1241 -f 1568//1234 1583//1252 1584//1254 -f 1582//1255 1597//1273 1598//1256 -f 1609//1260 1594//1240 1608//1257 -f 1588//1250 1603//1269 1604//1258 -f 1583//1252 1598//1256 1599//1259 -f 1610//1263 1595//1244 1609//1260 -f 1605//1264 1590//1245 1604//1258 -f 1584//1254 1599//1259 1600//1261 -f 1611//1280 1596//1262 1610//1263 -f 1606//1266 1591//1247 1605//1264 -f 1585//1242 1600//1261 1601//1265 -f 1607//1268 1592//1249 1606//1266 -f 1586//1246 1601//1265 1602//1267 -f 1608//1257 1593//1253 1607//1268 -f 1587//1248 1602//1267 1603//1269 -f 1601//1265 1616//1283 1617//1270 -f 1623//1275 1608//1257 1622//1271 -f 1602//1267 1617//1270 1618//1272 -f 1597//1273 1612//1291 1613//1274 -f 1624//1278 1609//1260 1623//1275 -f 1603//1269 1618//1272 1619//1276 -f 1598//1256 1613//1274 1614//1277 -f 1625//1281 1610//1263 1624//1278 -f 1620//1282 1605//1264 1619//1276 -f 1599//1259 1614//1277 1615//1279 -f 1626//1298 1611//1280 1625//1281 -f 1621//1284 1606//1266 1620//1282 -f 1600//1261 1615//1279 1616//1283 -f 1622//1271 1607//1268 1621//1284 -f 1636//1287 1621//1284 1635//1285 -f 1615//1279 1630//1297 1631//1286 -f 1637//1289 1622//1271 1636//1287 -f 1616//1283 1631//1286 1632//1288 -f 1638//1293 1623//1275 1637//1289 -f 1617//1270 1632//1288 1633//1290 -f 1612//1291 1627//1311 1628//1292 -f 1639//1296 1624//1278 1638//1293 -f 1618//1272 1633//1290 1634//1294 -f 1613//1274 1628//1292 1629//1295 -f 1640//1299 1625//1281 1639//1296 -f 1635//1285 1620//1282 1634//1294 -f 1614//1277 1629//1295 1630//1297 -f 1641//1303 1626//1298 1640//1299 -f 1655//1304 1640//1299 1654//1300 -f 1650//1305 1635//1285 1649//1301 -f 1629//1295 1644//1314 1645//1302 -f 1656//1323 1641//1303 1655//1304 -f 1651//1307 1636//1287 1650//1305 -f 1630//1297 1645//1302 1646//1306 -f 1652//1309 1637//1289 1651//1307 -f 1631//1286 1646//1306 1647//1308 -f 1653//1313 1638//1293 1652//1309 -f 1632//1288 1647//1308 1648//1310 -f 1627//1311 1642//1315 1643//1312 -f 1654//1300 1639//1296 1653//1313 -f 1633//1290 1648//1310 1649//1301 -f 1628//1292 1643//1312 1644//1314 -f 1642//1315 1657//1333 1658//1316 -f 1669//1320 1654//1300 1668//1317 -f 1664//1321 1649//1301 1663//1318 -f 1643//1312 1658//1316 1659//1319 -f 1670//1324 1655//1304 1669//1320 -f 1665//1325 1650//1305 1664//1321 -f 1644//1314 1659//1319 1660//1322 -f 1671//1341 1656//1323 1670//1324 -f 1666//1327 1651//1307 1665//1325 -f 1645//1302 1660//1322 1661//1326 -f 1667//1329 1652//1309 1666//1327 -f 1646//1306 1661//1326 1662//1328 -f 1668//1317 1653//1313 1667//1329 -f 1647//1308 1662//1328 1663//1318 -f 1677//1332 1662//1328 1676//1330 -f 1683//1335 1668//1317 1682//1331 -f 1678//1336 1663//1318 1677//1332 -f 1657//1333 1672//1351 1673//1334 -f 1684//1338 1669//1320 1683//1335 -f 1679//1339 1664//1321 1678//1336 -f 1658//1316 1673//1334 1674//1337 -f 1685//1342 1670//1324 1684//1338 -f 1680//1343 1665//1325 1679//1339 -f 1659//1319 1674//1337 1675//1340 -f 1686//1359 1671//1341 1685//1342 -f 1681//1344 1666//1327 1680//1343 -f 1660//1322 1675//1340 1676//1330 -f 1682//1331 1667//1329 1681//1344 -f 1696//1365 1681//1344 1695//1345 -f 1691//1348 1676//1330 1690//1346 -f 1681//1344 1696//1365 1697//1347 -f 1692//1350 1677//1332 1691//1348 -f 1682//1331 1697//1347 1698//1349 -f 1693//1354 1678//1336 1692//1350 -f 1688//1355 1673//1334 1687//1352 -f 1683//1335 1698//1349 1699//1353 -f 1694//1357 1679//1339 1693//1354 -f 1689//1358 1674//1337 1688//1355 -f 1684//1338 1699//1353 1700//1356 -f 1695//1345 1680//1343 1694//1357 -f 1690//1346 1675//1340 1689//1358 -f 1685//1342 1700//1356 1701//1360 -f 1699//1353 1714//1373 1715//1361 -f 1710//1380 1695//1345 1709//1362 -f 1705//1367 1690//1346 1704//1363 -f 1700//1356 1715//1361 1716//1364 -f 1695//1345 1710//1380 1711//1366 -f 1706//1369 1691//1348 1705//1367 -f 1696//1365 1711//1366 1712//1368 -f 1707//1371 1692//1350 1706//1369 -f 1697//1347 1712//1368 1713//1370 -f 1708//1374 1693//1354 1707//1371 -f 1703//1375 1688//1355 1702//1372 -f 1698//1349 1713//1370 1714//1373 -f 1709//1362 1694//1357 1708//1374 -f 1704//1363 1689//1358 1703//1375 -f 1713//1370 1728//1388 1729//1376 -f 1724//1381 1709//1362 1723//1377 -f 1719//1382 1704//1363 1718//1378 -f 1714//1373 1729//1376 1730//1379 -f 1725//1398 1710//1380 1724//1381 -f 1720//1385 1705//1367 1719//1382 -f 1715//1361 1730//1379 1731//1383 -f 1710//1380 1725//1398 1726//1384 -f 1721//1387 1706//1369 1720//1385 -f 1711//1366 1726//1384 1727//1386 -f 1722//1389 1707//1371 1721//1387 -f 1712//1368 1727//1386 1728//1388 -f 1723//1377 1708//1374 1722//1389 -f 1718//1378 1703//1375 1717//1390 -f 1727//1386 1742//1404 1743//1391 -f 1738//1395 1723//1377 1737//1392 -f 1733//1396 1718//1378 1732//1393 -f 1728//1388 1743//1391 1744//1394 -f 1739//1399 1724//1381 1738//1395 -f 1734//1400 1719//1382 1733//1396 -f 1729//1376 1744//1394 1745//1397 -f 1740//1416 1725//1398 1739//1399 -f 1735//1403 1720//1385 1734//1400 -f 1730//1379 1745//1397 1746//1401 -f 1725//1398 1740//1416 1741//1402 -f 1736//1405 1721//1387 1735//1403 -f 1726//1384 1741//1402 1742//1404 -f 1737//1392 1722//1389 1736//1405 -f 1751//1408 1736//1405 1750//1406 -f 1741//1402 1756//1420 1757//1407 -f 1752//1410 1737//1392 1751//1408 -f 1742//1404 1757//1407 1758//1409 -f 1753//1413 1738//1395 1752//1410 -f 1748//1414 1733//1396 1747//1411 -f 1743//1391 1758//1409 1759//1412 -f 1754//1417 1739//1399 1753//1413 -f 1749//1418 1734//1400 1748//1414 -f 1744//1394 1759//1412 1760//1415 -f 1755//1421 1740//1416 1754//1417 -f 1750//1406 1735//1403 1749//1418 -f 1745//1397 1760//1415 1761//1419 -f 1740//1416 1755//1421 1756//1420 -f 1770//1440 1755//1421 1769//1422 -f 1765//1426 1750//1406 1764//1423 -f 1760//1415 1775//1435 1776//1424 -f 1755//1421 1770//1440 1771//1425 -f 1766//1428 1751//1408 1765//1426 -f 1756//1420 1771//1425 1772//1427 -f 1767//1430 1752//1410 1766//1428 -f 1757//1407 1772//1427 1773//1429 -f 1768//1433 1753//1413 1767//1430 -f 1763//1434 1748//1414 1762//1431 -f 1758//1409 1773//1429 1774//1432 -f 1769//1422 1754//1417 1768//1433 -f 1764//1423 1749//1418 1763//1434 -f 1759//1412 1774//1432 1775//1435 -f 1773//1429 1789//1448 1790//1436 -f 1785//1441 1769//1422 1784//1437 -f 1780//1442 1764//1423 1779//1438 -f 1774//1432 1790//1436 1791//1439 -f 1786//1458 1770//1440 1785//1441 -f 1781//1445 1765//1426 1780//1442 -f 1775//1435 1791//1439 1792//1443 -f 1770//1440 1786//1458 1787//1444 -f 1782//1447 1766//1428 1781//1445 -f 1771//1425 1787//1444 1788//1446 -f 1783//1449 1767//1430 1782//1447 -f 1772//1427 1788//1446 1789//1448 -f 1784//1437 1768//1433 1783//1449 -f 1779//1438 1763//1434 1778//1450 -f 1788//1446 1803//1467 1804//1451 -f 1799//1455 1784//1437 1798//1452 -f 1794//1456 1779//1438 1793//1453 -f 1789//1448 1804//1451 1805//1454 -f 1800//1459 1785//1441 1799//1455 -f 1795//1460 1780//1442 1794//1456 -f 1790//1436 1805//1454 1806//1457 -f 1801//1462 1786//1458 1800//1459 -f 1796//1463 1781//1445 1795//1460 -f 1791//1439 1806//1457 1807//1461 -f 1802//1464 1787//1444 1801//1462 -f 1797//1465 1782//1447 1796//1463 -f 1803//1467 1788//1446 1802//1464 -f 1798//1452 1783//1449 1797//1465 -f 1796//1463 1811//1477 1812//1466 -f 1818//1470 1803//1467 1817//1468 -f 1797//1465 1812//1466 1813//1469 -f 1819//1473 1804//1451 1818//1470 -f 1798//1452 1813//1469 1814//1471 -f 1793//1453 1808//1490 1809//1472 -f 1820//1475 1805//1454 1819//1473 -f 1815//1476 1800//1459 1814//1471 -f 1794//1456 1809//1472 1810//1474 -f 1821//1478 1806//1457 1820//1475 -f 1816//1479 1801//1462 1815//1476 -f 1795//1460 1810//1474 1811//1477 -f 1822//1482 1807//1461 1821//1478 -f 1817//1468 1802//1464 1816//1479 -f 1831//1484 1816//1479 1830//1480 -f 1810//1474 1825//1493 1826//1481 -f 1837//1500 1822//1482 1836//1483 -f 1832//1486 1817//1468 1831//1484 -f 1811//1477 1826//1481 1827//1485 -f 1833//1488 1818//1470 1832//1486 -f 1812//1466 1827//1485 1828//1487 -f 1834//1492 1819//1473 1833//1488 -f 1813//1469 1828//1487 1829//1489 -f 1808//1490 1823//1508 1824//1491 -f 1835//1494 1820//1475 1834//1492 -f 1814//1471 1829//1489 1830//1480 -f 1809//1472 1824//1491 1825//1493 -f 1836//1483 1821//1478 1835//1494 -f 1850//1498 1835//1494 1849//1495 -f 1829//1489 1844//1507 1845//1496 -f 1824//1491 1839//1509 1840//1497 -f 1851//1501 1836//1483 1850//1498 -f 1846//1502 1831//1484 1845//1496 -f 1825//1493 1840//1497 1841//1499 -f 1852//1519 1837//1500 1851//1501 -f 1847//1504 1832//1486 1846//1502 -f 1826//1481 1841//1499 1842//1503 -f 1848//1506 1833//1488 1847//1504 -f 1827//1485 1842//1503 1843//1505 -f 1849//1495 1834//1492 1848//1506 -f 1828//1487 1843//1505 1844//1507 -f 1823//1508 1838//1512 1839//1509 -f 1864//1514 1849//1495 1863//1510 -f 1843//1505 1858//1524 1859//1511 -f 1838//1512 1853//1529 1854//1513 -f 1865//1517 1850//1498 1864//1514 -f 1844//1507 1859//1511 1860//1515 -f 1839//1509 1854//1513 1855//1516 -f 1866//1520 1851//1501 1865//1517 -f 1861//1521 1846//1502 1860//1515 -f 1840//1497 1855//1516 1856//1518 -f 1867//1536 1852//1519 1866//1520 -f 1862//1523 1847//1504 1861//1521 -f 1841//1499 1856//1518 1857//1522 -f 1863//1510 1848//1506 1862//1523 -f 1842//1503 1857//1522 1858//1524 -f 1878//1527 1863//1510 1877//1525 -f 1857//1522 1872//1539 1873//1526 -f 1879//1531 1864//1514 1878//1527 -f 1858//1524 1873//1526 1874//1528 -f 1853//1529 1868//1549 1869//1530 -f 1880//1534 1865//1517 1879//1531 -f 1859//1511 1874//1528 1875//1532 -f 1854//1513 1869//1530 1870//1533 -f 1881//1537 1866//1520 1880//1534 -f 1876//1538 1861//1521 1875//1532 -f 1855//1516 1870//1533 1871//1535 -f 1882//1541 1867//1536 1881//1537 -f 1877//1525 1862//1523 1876//1538 -f 1856//1518 1871//1535 1872//1539 -f 1870//1533 1885//1553 1886//1540 -f 1897//1560 1882//1541 1896//1542 -f 1892//1545 1877//1525 1891//1543 -f 1871//1535 1886//1540 1887//1544 -f 1893//1547 1878//1527 1892//1545 -f 1872//1539 1887//1544 1888//1546 -f 1894//1551 1879//1531 1893//1547 -f 1873//1526 1888//1546 1889//1548 -f 1868//1549 1883//1567 1884//1550 -f 1895//1554 1880//1534 1894//1551 -f 1874//1528 1889//1548 1890//1552 -f 1869//1530 1884//1550 1885//1553 -f 1896//1542 1881//1537 1895//1554 -f 1891//1543 1876//1538 1890//1552 -f 1889//1548 1905//1566 1906//1555 -f 1884//1550 1900//1568 1901//1556 -f 1912//1561 1896//1542 1911//1557 -f 1890//1552 1906//1555 1907//1558 -f 1885//1553 1901//1556 1902//1559 -f 1913//1580 1897//1560 1912//1561 -f 1908//1563 1892//1545 1907//1558 -f 1886//1540 1902//1559 1903//1562 -f 1909//1565 1893//1547 1908//1563 -f 1887//1544 1903//1562 1904//1564 -f 1910//1569 1894//1551 1909//1565 -f 1888//1546 1904//1564 1905//1566 -f 1883//1567 1899//1572 1900//1568 -f 1911//1557 1895//1554 1910//1569 -f 1925//1574 1910//1569 1924//1570 -f 1904//1564 1919//1584 1920//1571 -f 1899//1572 1914//1588 1915//1573 -f 1926//1577 1911//1557 1925//1574 -f 1905//1566 1920//1571 1921//1575 -f 1900//1568 1915//1573 1916//1576 -f 1927//1581 1912//1561 1926//1577 -f 1906//1555 1921//1575 1922//1578 -f 1901//1556 1916//1576 1917//1579 -f 1928//1587 1913//1580 1927//1581 -f 1907//1558 1922//1578 1923//1582 -f 1902//1559 1917//1579 1918//1583 -f 1908//1563 1923//1582 1924//1570 -f 1903//1562 1918//1583 1919//1584 -f 1923//1582 1456//1128 1457//1132 -f 1452//1108 1919//1584 1451//1130 -f 1924//1570 1457//1132 1458//1114 -f 1919//1584 1452//1108 1453//1107 -f 1448//1110 1915//1573 1447//1111 -f 1925//1574 1458//1114 1459//1113 -f 1920//1571 1453//1107 1454//1116 -f 1449//1118 1916//1576 1448//1110 -f 1926//1577 1459//1113 1460//1120 -f 1921//1575 1454//1116 1455//1122 -f 1450//1124 1917//1579 1449//1118 -f 1927//1581 1460//1120 1461//1126 -f 1922//1578 1455//1122 1456//1128 -f 1451//1130 1918//1583 1450//1124 -f 1950//1136 1935//1107 1949//1109 -f 1945//1119 1930//1110 1944//1112 -f 1940//1114 1955//1135 1956//1590 -f 1935//1107 1950//1136 1951//1117 -f 1946//1125 1931//1118 1945//1119 -f 1941//1113 1956//1590 1957//1121 -f 1936//1116 1951//1117 1952//1123 -f 1947//1131 1932//1124 1946//1125 -f 1942//1120 1957//1121 1958//1127 -f 1937//1122 1952//1123 1953//1129 -f 1948//1134 1933//1130 1947//1131 -f 1938//1128 1953//1129 1954//1133 -f 1949//1109 1934//1108 1948//1134 -f 1939//1592 1954//1133 1955//1135 -f 1965//1154 1950//1136 1964//1137 -f 1960//1141 1945//1119 1959//1138 -f 1955//1135 1970//1594 1971//1139 -f 1950//1136 1965//1154 1966//1140 -f 1961//1144 1946//1125 1960//1141 -f 1956//1590 1971//1139 1972//1142 -f 1951//1117 1966//1140 1967//1143 -f 1962//1147 1947//1131 1961//1144 -f 1957//1121 1972//1142 1973//1145 -f 1952//1123 1967//1143 1968//1593 -f 1963//1149 1948//1134 1962//1147 -f 1953//1129 1968//1593 1969//1148 -f 1964//1137 1949//1109 1963//1149 -f 1954//1133 1969//1148 1970//1594 -f 1968//1593 1983//1164 1984//1151 -f 1979//1155 1964//1137 1978//1152 -f 1969//1148 1984//1151 1985//1595 -f 1980//1172 1965//1154 1979//1155 -f 1975//1159 1960//1141 1974//1596 -f 1970//1594 1985//1595 1986//1157 -f 1965//1154 1980//1172 1981//1158 -f 1976//1162 1961//1144 1975//1159 -f 1971//1139 1986//1157 1987//1160 -f 1966//1140 1981//1158 1982//1597 -f 1977//1165 1962//1147 1976//1162 -f 1972//1142 1987//1160 1988//1598 -f 1967//1143 1982//1597 1983//1164 -f 1978//1152 1963//1149 1977//1165 -f 1987//1160 2002//1178 2003//1166 -f 1982//1597 1997//1179 1998//1599 -f 1993//1601 1978//1152 1992//1168 -f 1983//1164 1998//1599 1999//1600 -f 1994//1173 1979//1155 1993//1601 -f 1984//1151 1999//1600 2000//1171 -f 1995//1191 1980//1172 1994//1173 -f 1990//1177 1975//1159 1989//1174 -f 1985//1595 2000//1171 2001//1175 -f 1980//1172 1995//1191 1996//1176 -f 1991//1602 1976//1162 1990//1177 -f 1986//1157 2001//1175 2002//1178 -f 1981//1158 1996//1176 1997//1179 -f 1992//1168 1977//1165 1991//1602 -f 2006//1603 1991//1602 2005//1181 -f 2001//1175 2016//1194 2017//1182 -f 1996//1176 2011//1606 2012//1183 -f 2007//1604 1992//1168 2006//1603 -f 2002//1178 2017//1182 2018//1185 -f 1997//1179 2012//1183 2013//1186 -f 2008//1189 1993//1601 2007//1604 -f 1998//1599 2013//1186 2014//1188 -f 2009//1192 1994//1173 2008//1189 -f 1999//1600 2014//1188 2015//1190 -f 2010//1196 1995//1191 2009//1192 -f 2005//1181 1990//1177 2004//1605 -f 2000//1171 2015//1190 2016//1194 -f 1995//1191 2010//1196 2011//1606 -f 2025//1610 2010//1196 2024//1197 -f 2020//1201 2005//1181 2019//1198 -f 2015//1190 2030//1210 2031//1199 -f 2010//1196 2025//1610 2026//1607 -f 2021//1204 2006//1603 2020//1201 -f 2016//1194 2031//1199 2032//1202 -f 2011//1606 2026//1607 2027//1203 -f 2022//1609 2007//1604 2021//1204 -f 2017//1182 2032//1202 2033//1608 -f 2012//1183 2027//1203 2028//1206 -f 2023//1209 2008//1189 2022//1609 -f 2013//1186 2028//1206 2029//1208 -f 2024//1197 2009//1192 2023//1209 -f 2014//1188 2029//1208 2030//1210 -f 2028//1206 2043//1224 2044//1211 -f 2023//1209 2038//1228 2039//1212 -f 2029//1208 2044//1211 2045//1213 -f 2024//1197 2039//1212 2040//1215 -f 2035//1219 2020//1201 2034//1216 -f 2030//1210 2045//1213 2046//1217 -f 2025//1610 2040//1215 2041//1611 -f 2036//1222 2021//1204 2035//1219 -f 2031//1199 2046//1217 2047//1220 -f 2026//1607 2041//1611 2042//1221 -f 2037//1225 2022//1609 2036//1222 -f 2032//1202 2047//1220 2048//1612 -f 2027//1203 2042//1221 2043//1224 -f 2038//1228 2023//1209 2037//1225 -f 2063//1243 2048//1612 2062//1226 -f 2058//1230 2043//1224 2057//1613 -f 2037//1225 2052//1239 2053//1229 -f 2059//1232 2044//1211 2058//1230 -f 2038//1228 2053//1229 2054//1614 -f 2060//1235 2045//1213 2059//1232 -f 2039//1212 2054//1614 2055//1615 -f 2034//1216 2049//1251 2050//1616 -f 2061//1238 2046//1217 2060//1235 -f 2040//1215 2055//1615 2056//1236 -f 2035//1219 2050//1616 2051//1237 -f 2062//1226 2047//1220 2061//1238 -f 2041//1611 2056//1236 2057//1613 -f 2036//1222 2051//1237 2052//1239 -f 2077//1244 2062//1226 2076//1617 -f 2072//1245 2057//1613 2071//1241 -f 2051//1237 2066//1620 2067//1618 -f 2078//1262 2063//1243 2077//1244 -f 2073//1247 2058//1230 2072//1245 -f 2052//1239 2067//1618 2068//1619 -f 2074//1249 2059//1232 2073//1247 -f 2053//1229 2068//1619 2069//1248 -f 2075//1253 2060//1235 2074//1249 -f 2054//1614 2069//1248 2070//1250 -f 2049//1251 2064//1621 2065//1252 -f 2076//1617 2061//1238 2075//1253 -f 2055//1615 2070//1250 2071//1241 -f 2050//1616 2065//1252 2066//1620 -f 2064//1621 2079//1628 2080//1622 -f 2091//1260 2076//1617 2090//1257 -f 2070//1250 2085//1269 2086//1258 -f 2065//1252 2080//1622 2081//1623 -f 2092//1263 2077//1244 2091//1260 -f 2087//1624 2072//1245 2086//1258 -f 2066//1620 2081//1623 2082//1261 -f 2093//1280 2078//1262 2092//1263 -f 2088//1625 2073//1247 2087//1624 -f 2067//1618 2082//1261 2083//1265 -f 2089//1268 2074//1249 2088//1625 -f 2068//1619 2083//1265 2084//1626 -f 2090//1257 2075//1253 2089//1268 -f 2069//1248 2084//1626 2085//1269 -f 2083//1265 2098//1283 2099//1270 -f 2105//1275 2090//1257 2104//1271 -f 2084//1626 2099//1270 2100//1627 -f 2079//1628 2094//1291 2095//1274 -f 2106//1278 2091//1260 2105//1275 -f 2085//1269 2100//1627 2101//1276 -f 2080//1622 2095//1274 2096//1277 -f 2107//1281 2092//1263 2106//1278 -f 2102//1282 2087//1624 2101//1276 -f 2081//1623 2096//1277 2097//1629 -f 2108//1298 2093//1280 2107//1281 -f 2103//1630 2088//1625 2102//1282 -f 2082//1261 2097//1629 2098//1283 -f 2104//1271 2089//1268 2103//1630 -f 2118//1287 2103//1630 2117//1285 -f 2097//1629 2112//1634 2113//1286 -f 2119//1631 2104//1271 2118//1287 -f 2098//1283 2113//1286 2114//1288 -f 2120//1632 2105//1275 2119//1631 -f 2099//1270 2114//1288 2115//1290 -f 2094//1291 2109//1636 2110//1292 -f 2121//1296 2106//1278 2120//1632 -f 2100//1627 2115//1290 2116//1294 -f 2095//1274 2110//1292 2111//1633 -f 2122//1299 2107//1281 2121//1296 -f 2117//1285 2102//1282 2116//1294 -f 2096//1277 2111//1633 2112//1634 -f 2123//1635 2108//1298 2122//1299 -f 2137//1304 2122//1299 2136//1300 -f 2132//1305 2117//1285 2131//1301 -f 2111//1633 2126//1639 2127//1302 -f 2138//1323 2123//1635 2137//1304 -f 2133//1307 2118//1287 2132//1305 -f 2112//1634 2127//1302 2128//1306 -f 2134//1309 2119//1631 2133//1307 -f 2113//1286 2128//1306 2129//1308 -f 2135//1638 2120//1632 2134//1309 -f 2114//1288 2129//1308 2130//1310 -f 2109//1636 2124//1315 2125//1637 -f 2136//1300 2121//1296 2135//1638 -f 2115//1290 2130//1310 2131//1301 -f 2110//1292 2125//1637 2126//1639 -f 2124//1315 2139//1333 2140//1316 -f 2151//1320 2136//1300 2150//1317 -f 2146//1321 2131//1301 2145//1640 -f 2125//1637 2140//1316 2141//1319 -f 2152//1641 2137//1304 2151//1320 -f 2147//1642 2132//1305 2146//1321 -f 2126//1639 2141//1319 2142//1322 -f 2153//1646 2138//1323 2152//1641 -f 2148//1643 2133//1307 2147//1642 -f 2127//1302 2142//1322 2143//1326 -f 2149//1329 2134//1309 2148//1643 -f 2128//1306 2143//1326 2144//1328 -f 2150//1317 2135//1638 2149//1329 -f 2129//1308 2144//1328 2145//1640 -f 2159//1332 2144//1328 2158//1330 -f 2165//1644 2150//1317 2164//1331 -f 2160//1645 2145//1640 2159//1332 -f 2139//1333 2154//1649 2155//1334 -f 2166//1338 2151//1320 2165//1644 -f 2161//1339 2146//1321 2160//1645 -f 2140//1316 2155//1334 2156//1337 -f 2167//1342 2152//1641 2166//1338 -f 2162//1647 2147//1642 2161//1339 -f 2141//1319 2156//1337 2157//1340 -f 2168//1359 2153//1646 2167//1342 -f 2163//1344 2148//1643 2162//1647 -f 2142//1322 2157//1340 2158//1330 -f 2164//1331 2149//1329 2163//1344 -f 2178//1365 2163//1344 2177//1345 -f 2173//1348 2158//1330 2172//1346 -f 2163//1344 2178//1365 2179//1648 -f 2174//1350 2159//1332 2173//1348 -f 2164//1331 2179//1648 2180//1349 -f 2175//1354 2160//1645 2174//1350 -f 2170//1651 2155//1334 2169//1352 -f 2165//1644 2180//1349 2181//1650 -f 2176//1357 2161//1339 2175//1354 -f 2171//1358 2156//1337 2170//1651 -f 2166//1338 2181//1650 2182//1356 -f 2177//1345 2162//1647 2176//1357 -f 2172//1346 2157//1340 2171//1358 -f 2167//1342 2182//1356 2183//1360 -f 2181//1650 2196//1373 2197//1652 -f 2192//1380 2177//1345 2191//1653 -f 2187//1367 2172//1346 2186//1654 -f 2182//1356 2197//1652 2198//1364 -f 2177//1345 2192//1380 2193//1366 -f 2188//1655 2173//1348 2187//1367 -f 2178//1365 2193//1366 2194//1368 -f 2189//1371 2174//1350 2188//1655 -f 2179//1648 2194//1368 2195//1370 -f 2190//1374 2175//1354 2189//1371 -f 2185//1375 2170//1651 2184//1656 -f 2180//1349 2195//1370 2196//1373 -f 2191//1653 2176//1357 2190//1374 -f 2186//1654 2171//1358 2185//1375 -f 2195//1370 2210//1388 2211//1376 -f 2206//1381 2191//1653 2205//1377 -f 2201//1382 2186//1654 2200//1378 -f 2196//1373 2211//1376 2212//1379 -f 2207//1398 2192//1380 2206//1381 -f 2202//1385 2187//1367 2201//1382 -f 2197//1652 2212//1379 2213//1383 -f 2192//1380 2207//1398 2208//1384 -f 2203//1387 2188//1655 2202//1385 -f 2193//1366 2208//1384 2209//1386 -f 2204//1389 2189//1371 2203//1387 -f 2194//1368 2209//1386 2210//1388 -f 2205//1377 2190//1374 2204//1389 -f 2200//1378 2185//1375 2199//1390 -f 2209//1386 2224//1404 2225//1391 -f 2220//1658 2205//1377 2219//1392 -f 2215//1396 2200//1378 2214//1393 -f 2210//1388 2225//1391 2226//1657 -f 2221//1659 2206//1381 2220//1658 -f 2216//1400 2201//1382 2215//1396 -f 2211//1376 2226//1657 2227//1397 -f 2222//1668 2207//1398 2221//1659 -f 2217//1661 2202//1385 2216//1400 -f 2212//1379 2227//1397 2228//1401 -f 2207//1398 2222//1668 2223//1660 -f 2218//1405 2203//1387 2217//1661 -f 2208//1384 2223//1660 2224//1404 -f 2219//1392 2204//1389 2218//1405 -f 2233//1664 2218//1405 2232//1662 -f 2223//1660 2238//1420 2239//1663 -f 2234//1665 2219//1392 2233//1664 -f 2224//1404 2239//1663 2240//1409 -f 2235//1413 2220//1658 2234//1665 -f 2230//1414 2215//1396 2229//1411 -f 2225//1391 2240//1409 2241//1666 -f 2236//1417 2221//1659 2235//1413 -f 2231//1669 2216//1400 2230//1414 -f 2226//1657 2241//1666 2242//1667 -f 2237//1421 2222//1668 2236//1417 -f 2232//1662 2217//1661 2231//1669 -f 2227//1397 2242//1667 2243//1419 -f 2222//1668 2237//1421 2238//1420 -f 2252//1440 2237//1421 2251//1670 -f 2247//1671 2232//1662 2246//1423 -f 2242//1667 2257//1435 2258//1424 -f 2237//1421 2252//1440 2253//1425 -f 2248//1428 2233//1664 2247//1671 -f 2238//1420 2253//1425 2254//1427 -f 2249//1430 2234//1665 2248//1428 -f 2239//1663 2254//1427 2255//1429 -f 2250//1433 2235//1413 2249//1430 -f 2245//1434 2230//1414 2244//1431 -f 2240//1409 2255//1429 2256//1672 -f 2251//1670 2236//1417 2250//1433 -f 2246//1423 2231//1669 2245//1434 -f 2241//1666 2256//1672 2257//1435 -f 2255//1429 2271//1675 2272//1436 -f 2267//1674 2251//1670 2266//1437 -f 2262//1442 2246//1423 2261//1438 -f 2256//1672 2272//1436 2273//1673 -f 2268//1678 2252//1440 2267//1674 -f 2263//1445 2247//1671 2262//1442 -f 2257//1435 2273//1673 2274//1443 -f 2252//1440 2268//1678 2269//1444 -f 2264//1447 2248//1428 2263//1445 -f 2253//1425 2269//1444 2270//1446 -f 2265//1449 2249//1430 2264//1447 -f 2254//1427 2270//1446 2271//1675 -f 2266//1437 2250//1433 2265//1449 -f 2261//1438 2245//1434 2260//1450 -f 2270//1446 2285//1684 2286//1451 -f 2281//1455 2266//1437 2280//1452 -f 2276//1456 2261//1438 2275//1676 -f 2271//1675 2286//1451 2287//1677 -f 2282//1679 2267//1674 2281//1455 -f 2277//1680 2262//1442 2276//1456 -f 2272//1436 2287//1677 2288//1457 -f 2283//1682 2268//1678 2282//1679 -f 2278//1463 2263//1445 2277//1680 -f 2273//1673 2288//1457 2289//1681 -f 2284//1464 2269//1444 2283//1682 -f 2279//1683 2264//1447 2278//1463 -f 2285//1684 2270//1446 2284//1464 -f 2280//1452 2265//1449 2279//1683 -f 2278//1463 2293//1477 2294//1466 -f 2300//1470 2285//1684 2299//1685 -f 2279//1683 2294//1466 2295//1469 -f 2301//1473 2286//1451 2300//1470 -f 2280//1452 2295//1469 2296//1471 -f 2275//1676 2290//1490 2291//1472 -f 2302//1475 2287//1677 2301//1473 -f 2297//1476 2282//1679 2296//1471 -f 2276//1456 2291//1472 2292//1686 -f 2303//1687 2288//1457 2302//1475 -f 2298//1688 2283//1682 2297//1476 -f 2277//1680 2292//1686 2293//1477 -f 2304//1482 2289//1681 2303//1687 -f 2299//1685 2284//1464 2298//1688 -f 2313//1484 2298//1688 2312//1480 -f 2292//1686 2307//1493 2308//1481 -f 2319//1692 2304//1482 2318//1483 -f 2314//1486 2299//1685 2313//1484 -f 2293//1477 2308//1481 2309//1485 -f 2315//1689 2300//1470 2314//1486 -f 2294//1466 2309//1485 2310//1487 -f 2316//1690 2301//1473 2315//1689 -f 2295//1469 2310//1487 2311//1489 -f 2290//1490 2305//1508 2306//1491 -f 2317//1691 2302//1475 2316//1690 -f 2296//1471 2311//1489 2312//1480 -f 2291//1472 2306//1491 2307//1493 -f 2318//1483 2303//1687 2317//1691 -f 2332//1498 2317//1691 2331//1495 -f 2311//1489 2326//1507 2327//1496 -f 2306//1491 2321//1694 2322//1497 -f 2333//1693 2318//1483 2332//1498 -f 2328//1502 2313//1484 2327//1496 -f 2307//1493 2322//1497 2323//1499 -f 2334//1697 2319//1692 2333//1693 -f 2329//1504 2314//1486 2328//1502 -f 2308//1481 2323//1499 2324//1503 -f 2330//1506 2315//1689 2329//1504 -f 2309//1485 2324//1503 2325//1505 -f 2331//1495 2316//1690 2330//1506 -f 2310//1487 2325//1505 2326//1507 -f 2305//1508 2320//1695 2321//1694 -f 2346//1514 2331//1495 2345//1510 -f 2325//1505 2340//1524 2341//1511 -f 2320//1695 2335//1529 2336//1513 -f 2347//1517 2332//1498 2346//1514 -f 2326//1507 2341//1511 2342//1515 -f 2321//1694 2336//1513 2337//1696 -f 2348//1520 2333//1693 2347//1517 -f 2343//1521 2328//1502 2342//1515 -f 2322//1497 2337//1696 2338//1518 -f 2349//1536 2334//1697 2348//1520 -f 2344//1523 2329//1504 2343//1521 -f 2323//1499 2338//1518 2339//1522 -f 2345//1510 2330//1506 2344//1523 -f 2324//1503 2339//1522 2340//1524 -f 2360//1527 2345//1510 2359//1525 -f 2339//1522 2354//1702 2355//1526 -f 2361//1531 2346//1514 2360//1527 -f 2340//1524 2355//1526 2356//1528 -f 2335//1529 2350//1549 2351//1698 -f 2362//1534 2347//1517 2361//1531 -f 2341//1511 2356//1528 2357//1532 -f 2336//1513 2351//1698 2352//1533 -f 2363//1700 2348//1520 2362//1534 -f 2358//1701 2343//1521 2357//1532 -f 2337//1696 2352//1533 2353//1699 -f 2364//1541 2349//1536 2363//1700 -f 2359//1525 2344//1523 2358//1701 -f 2338//1518 2353//1699 2354//1702 -f 2352//1533 2367//1704 2368//1540 -f 2379//1560 2364//1541 2378//1703 -f 2374//1545 2359//1525 2373//1543 -f 2353//1699 2368//1540 2369//1544 -f 2375//1547 2360//1527 2374//1545 -f 2354//1702 2369//1544 2370//1546 -f 2376//1551 2361//1531 2375//1547 -f 2355//1526 2370//1546 2371//1548 -f 2350//1549 2365//1567 2366//1550 -f 2377//1705 2362//1534 2376//1551 -f 2356//1528 2371//1548 2372//1552 -f 2351//1698 2366//1550 2367//1704 -f 2378//1703 2363//1700 2377//1705 -f 2373//1543 2358//1701 2372//1552 -f 2371//1548 2387//1566 2388//1706 -f 2366//1550 2382//1707 2383//1556 -f 2394//1561 2378//1703 2393//1557 -f 2372//1552 2388//1706 2389//1558 -f 2367//1704 2383//1556 2384//1559 -f 2395//1710 2379//1560 2394//1561 -f 2390//1563 2374//1545 2389//1558 -f 2368//1540 2384//1559 2385//1562 -f 2391//1565 2375//1547 2390//1563 -f 2369//1544 2385//1562 2386//1564 -f 2392//1708 2376//1551 2391//1565 -f 2370//1546 2386//1564 2387//1566 -f 2365//1567 2381//1572 2382//1707 -f 2393//1557 2377//1705 2392//1708 -f 2407//1574 2392//1708 2406//1570 -f 2386//1564 2401//1584 2402//1571 -f 2381//1572 2396//1588 2397//1573 -f 2408//1577 2393//1557 2407//1574 -f 2387//1566 2402//1571 2403//1709 -f 2382//1707 2397//1573 2398//1576 -f 2409//1581 2394//1561 2408//1577 -f 2388//1706 2403//1709 2404//1578 -f 2383//1556 2398//1576 2399//1579 -f 2410//1587 2395//1710 2409//1581 -f 2389//1558 2404//1578 2405//1582 -f 2384//1559 2399//1579 2400//1583 -f 2390//1563 2405//1582 2406//1570 -f 2385//1562 2400//1583 2401//1584 -f 2405//1582 1938//1128 1939//1592 -f 1934//1108 2401//1584 1933//1130 -f 2406//1570 1939//1592 1940//1114 -f 2401//1584 1934//1108 1935//1107 -f 1930//1110 2397//1573 1929//1589 -f 2407//1574 1940//1114 1941//1113 -f 2402//1571 1935//1107 1936//1116 -f 1931//1118 2398//1576 1930//1110 -f 2408//1577 1941//1113 1942//1120 -f 2403//1709 1936//1116 1937//1122 -f 1932//1124 2399//1579 1931//1118 -f 2409//1581 1942//1120 1943//1591 -f 2404//1578 1937//1122 1938//1128 -f 1933//1130 2400//1583 1932//1124 -o Hnad_L_Sphere.012 -v 0.398410 0.221774 0.909033 -v 0.378940 0.206049 0.909266 -v 0.360366 0.192203 0.911041 -v 0.343400 0.180768 0.914290 -v 0.328695 0.172185 0.918888 -v 0.316816 0.166782 0.924658 -v 0.308220 0.164768 0.931379 -v 0.303236 0.166220 0.938792 -v 0.302057 0.171081 0.946613 -v 0.304727 0.179166 0.954540 -v 0.311144 0.190164 0.962270 -v 0.321062 0.203651 0.969505 -v 0.334099 0.219110 0.975966 -v 0.349754 0.235947 0.981407 -v 0.367426 0.253514 0.985617 -v 0.400727 0.220453 0.910024 -v 0.383486 0.203457 0.911210 -v 0.366965 0.188440 0.913864 -v 0.351800 0.175979 0.917884 -v 0.338572 0.166554 0.923114 -v 0.327791 0.160525 0.929354 -v 0.319871 0.158126 0.936364 -v 0.315115 0.159447 0.943874 -v 0.313708 0.164439 0.951597 -v 0.315702 0.172909 0.959235 -v 0.321021 0.184533 0.966495 -v 0.329462 0.198862 0.973098 -v 0.340698 0.215347 0.978790 -v 0.354300 0.233355 0.983352 -v 0.369743 0.252192 0.986609 -v 0.403698 0.219848 0.911057 -v 0.389313 0.202270 0.913236 -v 0.375425 0.186717 0.916806 -v 0.362567 0.173786 0.921627 -v 0.351233 0.163974 0.927515 -v 0.341859 0.157659 0.934245 -v 0.334805 0.155083 0.941556 -v 0.330342 0.156345 0.949168 -v 0.328642 0.161396 0.956790 -v 0.329770 0.170043 0.964126 -v 0.333682 0.181953 0.970897 -v 0.340229 0.196669 0.976842 -v 0.349158 0.213624 0.981731 -v 0.360127 0.232168 0.985378 -v 0.372714 0.251587 0.987642 -v 0.407207 0.219982 0.912091 -v 0.396197 0.202533 0.915266 -v 0.385419 0.187098 0.919752 -v 0.375287 0.174272 0.925376 -v 0.366191 0.164546 0.931924 -v 0.358479 0.158294 0.939144 -v 0.352449 0.155757 0.946757 -v 0.348332 0.157032 0.954471 -v 0.346286 0.162070 0.961990 -v 0.346390 0.170678 0.969025 -v 0.348640 0.182524 0.975306 -v 0.352949 0.197154 0.980591 -v 0.359152 0.214006 0.984677 -v 0.367011 0.232431 0.987407 -v 0.376223 0.251721 0.988676 -v 0.411121 0.220850 0.913088 -v 0.403874 0.204236 0.917220 -v 0.396564 0.189571 0.922589 -v 0.389472 0.177418 0.928988 -v 0.382871 0.168246 0.936171 -v 0.377013 0.162405 0.943862 -v 0.372124 0.160122 0.951766 -v 0.368392 0.161482 0.959579 -v 0.365961 0.166435 0.967000 -v 0.364923 0.174790 0.973744 -v 0.365320 0.186225 0.979553 -v 0.367134 0.200301 0.984203 -v 0.370298 0.216478 0.987515 -v 0.374688 0.234134 0.989362 -v 0.380137 0.252589 0.989673 -v 0.415288 0.222419 0.914008 -v 0.412049 0.207314 0.919025 -v 0.408432 0.194039 0.925209 -v 0.404577 0.183105 0.932323 -v 0.400632 0.174933 0.940092 -v 0.396748 0.169836 0.948219 -v 0.393075 0.168010 0.956392 -v 0.389753 0.169525 0.964295 -v 0.386912 0.174323 0.971625 -v 0.384659 0.182220 0.978101 -v 0.383081 0.192912 0.983474 -v 0.382239 0.205988 0.987537 -v 0.382165 0.220946 0.990135 -v 0.382863 0.237211 0.991166 -v 0.384304 0.254158 0.990593 -v 0.419549 0.224628 0.914816 -v 0.420407 0.211648 0.920611 -v 0.420566 0.200331 0.927511 -v 0.420021 0.191114 0.935253 -v 0.418792 0.184350 0.943538 -v 0.416926 0.180299 0.952047 -v 0.414496 0.179117 0.960455 -v 0.411594 0.180850 0.968438 -v 0.408333 0.185431 0.975689 -v 0.404837 0.192683 0.981929 -v 0.401241 0.202329 0.986919 -v 0.397682 0.213997 0.990467 -v 0.394299 0.227238 0.992437 -v 0.391221 0.241545 0.992752 -v 0.388565 0.256368 0.991401 -v 0.423740 0.227394 0.915482 -v 0.428627 0.217072 0.921916 -v 0.432500 0.208205 0.929407 -v 0.435210 0.201136 0.937665 -v 0.436652 0.196134 0.946374 -v 0.436772 0.193394 0.955199 -v 0.435564 0.193018 0.963801 -v 0.433075 0.195024 0.971850 -v 0.429401 0.199332 0.979035 -v 0.424682 0.205778 0.985081 -v 0.419101 0.214113 0.989756 -v 0.412872 0.224019 0.992880 -v 0.406233 0.235113 0.994332 -v 0.399441 0.246969 0.994058 -v 0.392756 0.259133 0.992067 -v 0.427699 0.230608 0.915979 -v 0.436394 0.223377 0.922891 -v 0.443776 0.217359 0.930822 -v 0.449561 0.212786 0.939467 -v 0.453527 0.209834 0.948493 -v 0.455522 0.208616 0.957554 -v 0.455469 0.209178 0.966301 -v 0.453370 0.211500 0.974398 -v 0.449306 0.215492 0.981535 -v 0.443433 0.221000 0.987436 -v 0.435976 0.227813 0.991875 -v 0.427223 0.235669 0.994682 -v 0.417509 0.244267 0.995748 -v 0.407208 0.253275 0.995033 -v 0.396715 0.262347 0.992564 -v 0.431275 0.234148 0.916289 -v 0.443409 0.230321 0.923499 -v 0.453959 0.227441 0.931704 -v 0.462522 0.225618 0.940590 -v 0.468768 0.224922 0.949813 -v 0.472457 0.225381 0.959021 -v 0.473447 0.226976 0.967858 -v 0.471701 0.229647 0.975986 -v 0.467284 0.233289 0.983092 -v 0.460368 0.237765 0.988903 -v 0.451217 0.242901 0.993195 -v 0.440184 0.248501 0.995804 -v 0.427693 0.254348 0.996630 -v 0.414222 0.260219 0.995640 -v 0.400291 0.265888 0.992873 -v 0.434331 0.237878 0.916399 -v 0.449402 0.237638 0.923715 -v 0.462660 0.238063 0.932019 -v 0.473596 0.239137 0.940990 -v 0.481790 0.240819 0.950284 -v 0.486926 0.243045 0.959543 -v 0.488807 0.245728 0.968413 -v 0.487361 0.248766 0.976551 -v 0.482644 0.252041 0.983646 -v 0.474836 0.255429 0.989425 -v 0.464239 0.258798 0.993665 -v 0.451258 0.262020 0.996204 -v 0.436393 0.264970 0.996944 -v 0.420215 0.267536 0.995857 -v 0.403347 0.269618 0.992984 -v 0.436748 0.241655 0.916306 -v 0.454143 0.245045 0.923533 -v 0.469543 0.248817 0.931753 -v 0.482356 0.252825 0.940652 -v 0.492091 0.256914 0.949886 -v 0.498372 0.260928 0.959102 -v 0.500958 0.264713 0.967944 -v 0.499750 0.268122 0.976073 -v 0.494795 0.271026 0.983178 -v 0.486282 0.273312 0.988983 -v 0.474540 0.274893 0.993268 -v 0.460018 0.275707 0.995866 -v 0.443276 0.275724 0.996679 -v 0.424956 0.274943 0.995674 -v 0.405764 0.273394 0.992891 -v 0.438433 0.245332 0.916012 -v 0.457450 0.252259 0.922957 -v 0.474344 0.259290 0.930918 -v 0.488467 0.266154 0.939589 -v 0.499276 0.272588 0.948636 -v 0.506355 0.278344 0.957713 -v 0.509433 0.283202 0.966470 -v 0.508391 0.286973 0.974570 -v 0.503270 0.289515 0.981703 -v 0.494266 0.290728 0.987595 -v 0.481725 0.290567 0.992018 -v 0.466128 0.289037 0.994803 -v 0.448077 0.286197 0.995843 -v 0.428263 0.282157 0.995099 -v 0.407449 0.277072 0.992597 -v 0.439323 0.248770 0.915530 -v 0.459195 0.259002 0.922012 -v 0.476878 0.269079 0.929545 -v 0.491692 0.278614 0.937841 -v 0.503068 0.287239 0.946582 -v 0.510569 0.294623 0.955430 -v 0.513907 0.300483 0.964046 -v 0.512953 0.304594 0.972099 -v 0.507744 0.306797 0.979280 -v 0.498480 0.307007 0.985312 -v 0.485517 0.305218 0.989963 -v 0.469354 0.301497 0.993056 -v 0.450611 0.295987 0.994471 -v 0.430009 0.288900 0.994153 -v 0.408339 0.280509 0.992115 -v 0.439383 0.251835 0.914878 -v 0.459313 0.265015 0.920732 -v 0.477048 0.277809 0.927688 -v 0.491909 0.289724 0.935477 -v 0.503323 0.300304 0.943802 -v 0.510853 0.309140 0.952341 -v 0.514208 0.315894 0.960767 -v 0.513260 0.320307 0.968756 -v 0.508045 0.322208 0.976001 -v 0.498763 0.321524 0.982223 -v 0.485772 0.318283 0.987183 -v 0.469571 0.312607 0.990692 -v 0.450782 0.304716 0.992613 -v 0.430126 0.294913 0.992874 -v 0.408399 0.283575 0.991463 -v 0.438611 0.254411 0.914081 -v 0.457797 0.270067 0.919168 -v 0.474848 0.285143 0.925417 -v 0.489109 0.299059 0.932587 -v 0.500031 0.311280 0.940403 -v 0.507194 0.321337 0.948565 -v 0.510324 0.328842 0.956758 -v 0.509300 0.333508 0.964668 -v 0.504161 0.335156 0.971992 -v 0.495105 0.333721 0.978446 -v 0.482480 0.329259 0.983785 -v 0.466771 0.321942 0.987802 -v 0.448581 0.312051 0.990342 -v 0.428611 0.299965 0.991309 -v 0.407627 0.286150 0.990665 -v 0.437035 0.256397 0.913169 -v 0.454707 0.273964 0.917379 -v 0.470362 0.290801 0.922820 -v 0.483399 0.306260 0.929282 -v 0.493317 0.319747 0.936516 -v 0.499734 0.330744 0.944246 -v 0.502404 0.338829 0.952173 -v 0.501225 0.343691 0.959994 -v 0.496241 0.345143 0.967407 -v 0.487645 0.343129 0.974128 -v 0.475766 0.337726 0.979898 -v 0.461061 0.329142 0.984496 -v 0.444095 0.317708 0.987745 -v 0.425521 0.303862 0.989520 -v 0.406051 0.288137 0.989754 -v 0.434718 0.257719 0.912177 -v 0.450161 0.276556 0.915434 -v 0.463763 0.294563 0.919996 -v 0.474999 0.311049 0.925688 -v 0.483440 0.325378 0.932291 -v 0.488759 0.337002 0.939551 -v 0.490753 0.345472 0.947189 -v 0.489346 0.350464 0.954912 -v 0.484590 0.351785 0.962422 -v 0.476670 0.349386 0.969433 -v 0.465889 0.343357 0.975673 -v 0.452661 0.333931 0.980903 -v 0.437496 0.321471 0.984922 -v 0.420975 0.306454 0.987576 -v 0.403734 0.289458 0.988762 -v 0.431747 0.258324 0.911144 -v 0.444334 0.277743 0.913408 -v 0.455303 0.296287 0.917055 -v 0.464232 0.313242 0.921945 -v 0.470779 0.327958 0.927889 -v 0.474691 0.339868 0.934660 -v 0.475819 0.348515 0.941997 -v 0.474119 0.353566 0.949618 -v 0.469656 0.354828 0.957230 -v 0.462602 0.352252 0.964542 -v 0.453228 0.345937 0.971271 -v 0.441894 0.336125 0.977159 -v 0.429036 0.323194 0.981981 -v 0.415148 0.307641 0.985550 -v 0.400763 0.290063 0.987729 -v 0.428238 0.258190 0.910110 -v 0.437450 0.277480 0.911379 -v 0.445309 0.295905 0.914109 -v 0.451512 0.312756 0.918195 -v 0.455821 0.327386 0.923480 -v 0.458071 0.339233 0.929761 -v 0.458175 0.347841 0.936796 -v 0.456129 0.352879 0.944315 -v 0.452012 0.354154 0.952029 -v 0.445982 0.351617 0.959643 -v 0.438270 0.345365 0.966862 -v 0.429174 0.335639 0.973410 -v 0.419042 0.322812 0.979035 -v 0.408264 0.307378 0.983520 -v 0.397254 0.289929 0.986695 -v 0.424324 0.257321 0.909114 -v 0.429773 0.275777 0.909425 -v 0.434163 0.293433 0.911272 -v 0.437327 0.309610 0.914584 -v 0.439141 0.323686 0.919233 -v 0.439537 0.335121 0.925042 -v 0.438500 0.343476 0.931786 -v 0.436069 0.348429 0.939208 -v 0.432337 0.349789 0.947020 -v 0.427448 0.347505 0.954924 -v 0.421590 0.341665 0.962615 -v 0.414989 0.332492 0.969798 -v 0.407896 0.320340 0.976197 -v 0.400587 0.305675 0.981566 -v 0.393340 0.289061 0.985698 -v 0.420157 0.255752 0.908194 -v 0.421598 0.272699 0.907620 -v 0.422296 0.288964 0.908651 -v 0.422222 0.303923 0.911249 -v 0.421380 0.316999 0.915312 -v 0.419802 0.327691 0.920685 -v 0.417549 0.335588 0.927161 -v 0.414707 0.340386 0.934491 -v 0.411386 0.341901 0.942395 -v 0.407713 0.340075 0.950567 -v 0.403829 0.334978 0.958694 -v 0.399884 0.326805 0.966463 -v 0.396029 0.315872 0.973577 -v 0.392412 0.302597 0.979761 -v 0.389173 0.287492 0.984778 -v 0.386435 0.271136 0.988436 -v 0.415896 0.253543 0.907385 -v 0.413240 0.268365 0.906034 -v 0.410162 0.282672 0.906349 -v 0.406778 0.295914 0.908319 -v 0.403220 0.307582 0.911867 -v 0.399624 0.317228 0.916857 -v 0.396128 0.324480 0.923097 -v 0.392867 0.329061 0.930348 -v 0.389965 0.330793 0.938331 -v 0.387535 0.329612 0.946739 -v 0.385669 0.325561 0.955249 -v 0.384440 0.318797 0.963533 -v 0.383895 0.309580 0.971275 -v 0.384054 0.298263 0.978176 -v 0.384912 0.285282 0.983970 -v 0.411705 0.250778 0.906720 -v 0.405020 0.262941 0.904729 -v 0.398228 0.274798 0.904454 -v 0.391589 0.285892 0.905907 -v 0.385360 0.295797 0.909030 -v 0.379779 0.304133 0.913705 -v 0.375060 0.310579 0.919751 -v 0.371386 0.314887 0.926937 -v 0.368897 0.316892 0.934985 -v 0.367689 0.316517 0.943587 -v 0.367809 0.313776 0.952412 -v 0.369251 0.308775 0.961121 -v 0.371961 0.301705 0.969380 -v 0.375834 0.292839 0.976870 -v 0.380721 0.282517 0.983304 -v 0.407746 0.247563 0.906222 -v 0.397253 0.256636 0.903753 -v 0.386952 0.265644 0.903038 -v 0.377238 0.274242 0.904104 -v 0.368485 0.282098 0.906911 -v 0.361028 0.288911 0.911350 -v 0.355155 0.294419 0.917252 -v 0.351091 0.298411 0.924388 -v 0.348992 0.300732 0.932485 -v 0.348939 0.301295 0.941232 -v 0.350934 0.300077 0.950293 -v 0.354900 0.297124 0.959319 -v 0.360685 0.292552 0.967964 -v 0.368067 0.286534 0.975895 -v 0.376762 0.279303 0.982807 -v 0.404169 0.244023 0.905913 -v 0.390239 0.249692 0.903146 -v 0.376768 0.255563 0.902156 -v 0.364277 0.261410 0.902982 -v 0.353244 0.267010 0.905591 -v 0.344093 0.272146 0.909884 -v 0.337177 0.276621 0.915694 -v 0.332760 0.280264 0.922800 -v 0.331014 0.282935 0.930928 -v 0.332004 0.284530 0.939766 -v 0.335693 0.284988 0.948973 -v 0.341939 0.284293 0.958196 -v 0.350501 0.282470 0.967082 -v 0.361052 0.279590 0.975287 -v 0.373186 0.275763 0.982498 -v 0.401114 0.240293 0.905802 -v 0.384246 0.242375 0.902929 -v 0.368068 0.244941 0.901842 -v 0.353203 0.247891 0.902582 -v 0.340222 0.251113 0.905121 -v 0.329625 0.254482 0.909361 -v 0.321817 0.257870 0.915140 -v 0.317100 0.261145 0.922235 -v 0.315654 0.264183 0.930373 -v 0.317535 0.266866 0.939243 -v 0.322671 0.269092 0.948503 -v 0.330865 0.270774 0.957796 -v 0.341801 0.271848 0.966767 -v 0.355059 0.272273 0.975071 -v 0.370130 0.272033 0.982387 -v 0.398697 0.236517 0.905896 -v 0.379504 0.234968 0.903112 -v 0.361185 0.234187 0.902108 -v 0.344443 0.234203 0.902920 -v 0.329921 0.235018 0.905518 -v 0.318179 0.236599 0.909803 -v 0.309666 0.238885 0.915609 -v 0.304711 0.241788 0.922713 -v 0.303503 0.245198 0.930842 -v 0.306089 0.248983 0.939685 -v 0.312370 0.252997 0.948900 -v 0.322105 0.257086 0.958134 -v 0.334918 0.261094 0.967033 -v 0.350318 0.264866 0.975254 -v 0.367713 0.268256 0.982480 -v 0.397011 0.232839 0.906189 -v 0.376198 0.227754 0.903688 -v 0.356384 0.223713 0.902943 -v 0.338332 0.220874 0.903983 -v 0.322736 0.219344 0.906768 -v 0.310195 0.219183 0.911192 -v 0.301191 0.220396 0.917083 -v 0.296070 0.222937 0.924216 -v 0.295028 0.226709 0.932317 -v 0.298106 0.231567 0.941073 -v 0.305185 0.237323 0.950150 -v 0.315994 0.243757 0.959198 -v 0.330117 0.250621 0.967868 -v 0.347011 0.257652 0.975829 -v 0.366028 0.264579 0.982774 -v 0.396122 0.229402 0.906671 -v 0.374452 0.221011 0.904633 -v 0.353850 0.213924 0.904315 -v 0.335107 0.208414 0.905730 -v 0.318944 0.204693 0.908823 -v 0.305981 0.202903 0.913474 -v 0.296717 0.203114 0.919506 -v 0.291508 0.205317 0.926687 -v 0.290554 0.209427 0.934740 -v 0.293892 0.215287 0.943356 -v 0.301392 0.222672 0.952204 -v 0.312769 0.231297 0.960945 -v 0.327583 0.240831 0.969241 -v 0.345266 0.250908 0.976774 -v 0.365138 0.261141 0.983256 -v 0.418026 0.238775 0.910350 -v 0.396062 0.226336 0.907323 -v 0.374335 0.214998 0.905913 -v 0.353679 0.205194 0.906173 -v 0.334890 0.197304 0.908094 -v 0.318689 0.191628 0.911603 -v 0.305698 0.188387 0.916563 -v 0.296416 0.187703 0.922786 -v 0.291201 0.189604 0.930030 -v 0.290253 0.194016 0.938019 -v 0.293608 0.200771 0.946445 -v 0.301138 0.209607 0.954984 -v 0.312552 0.220186 0.963309 -v 0.327412 0.232102 0.971098 -v 0.345148 0.244895 0.978054 -v 0.365078 0.258076 0.983908 -v 0.396834 0.223761 0.908121 -v 0.375850 0.209946 0.907477 -v 0.355880 0.197860 0.908444 -v 0.337690 0.187969 0.910985 -v 0.321981 0.180652 0.915001 -v 0.309356 0.176190 0.920340 -v 0.300300 0.174755 0.926795 -v 0.295161 0.176403 0.934118 -v 0.294137 0.181069 0.942028 -v 0.297267 0.188574 0.950222 -v 0.304430 0.198631 0.958383 -v 0.315352 0.210852 0.966199 -v 0.329613 0.224767 0.973369 -v 0.346664 0.239843 0.979618 -v 0.365850 0.255500 0.984705 -v 0.345359 0.270175 0.883207 -v 0.325889 0.254450 0.883440 -v 0.307315 0.240604 0.885215 -v 0.290349 0.229170 0.888464 -v 0.275644 0.220586 0.893062 -v 0.263765 0.215183 0.898832 -v 0.255169 0.213169 0.905553 -v 0.250185 0.214621 0.912967 -v 0.249006 0.219483 0.920787 -v 0.251676 0.227568 0.928714 -v 0.258093 0.238565 0.936444 -v 0.268011 0.252052 0.943679 -v 0.281048 0.267511 0.950141 -v 0.296703 0.284348 0.955581 -v 0.314375 0.301915 0.959791 -v 0.347676 0.268854 0.884198 -v 0.330435 0.251858 0.885385 -v 0.313914 0.236841 0.888038 -v 0.298749 0.224381 0.892058 -v 0.285521 0.214955 0.897288 -v 0.274740 0.208926 0.903528 -v 0.266820 0.206527 0.910538 -v 0.262064 0.207848 0.918049 -v 0.260657 0.212840 0.925771 -v 0.262651 0.221310 0.933410 -v 0.267970 0.232934 0.940669 -v 0.276411 0.247263 0.947272 -v 0.287647 0.263749 0.952964 -v 0.301249 0.281756 0.957526 -v 0.316692 0.300593 0.960783 -v 0.350647 0.268249 0.885231 -v 0.336262 0.250671 0.887411 -v 0.322374 0.235118 0.890980 -v 0.309516 0.222187 0.895801 -v 0.298182 0.212375 0.901689 -v 0.288808 0.206060 0.908419 -v 0.281754 0.203484 0.915730 -v 0.277291 0.204746 0.923343 -v 0.275591 0.209797 0.930964 -v 0.276719 0.218444 0.938301 -v 0.280631 0.230354 0.945071 -v 0.287178 0.245070 0.951016 -v 0.296107 0.262025 0.955905 -v 0.307076 0.280569 0.959552 -v 0.319663 0.299988 0.961816 -v 0.354156 0.268383 0.886265 -v 0.343146 0.250934 0.889440 -v 0.332368 0.235499 0.893926 -v 0.322236 0.222673 0.899551 -v 0.313140 0.212947 0.906098 -v 0.305428 0.206695 0.913318 -v 0.299398 0.204158 0.920931 -v 0.295281 0.205433 0.928645 -v 0.293235 0.210471 0.936164 -v 0.293339 0.219079 0.943200 -v 0.295589 0.230926 0.949480 -v 0.299898 0.245556 0.954765 -v 0.306101 0.262407 0.958851 -v 0.313960 0.280832 0.961581 -v 0.323172 0.300122 0.962850 -v 0.358070 0.269251 0.887262 -v 0.350823 0.252637 0.891394 -v 0.343513 0.237972 0.896763 -v 0.336421 0.225820 0.903162 -v 0.329820 0.216647 0.910345 -v 0.323962 0.210807 0.918036 -v 0.319073 0.208523 0.925940 -v 0.315341 0.209883 0.933753 -v 0.312910 0.214836 0.941174 -v 0.311872 0.223191 0.947918 -v 0.312269 0.234626 0.953727 -v 0.314083 0.248702 0.958377 -v 0.317247 0.264879 0.961689 -v 0.321637 0.282535 0.963536 -v 0.327086 0.300991 0.963847 -v 0.362237 0.270820 0.888182 -v 0.358998 0.255715 0.893199 -v 0.355381 0.242440 0.899383 -v 0.351526 0.231507 0.906497 -v 0.347581 0.223334 0.914267 -v 0.343697 0.218237 0.922394 -v 0.340024 0.216411 0.930566 -v 0.336702 0.217926 0.938469 -v 0.333861 0.222724 0.945799 -v 0.331608 0.230621 0.952275 -v 0.330030 0.241313 0.957648 -v 0.329188 0.254389 0.961711 -v 0.329114 0.269347 0.964309 -v 0.329812 0.285613 0.965340 -v 0.331253 0.302560 0.964767 -v 0.366498 0.273030 0.888990 -v 0.367356 0.260049 0.894785 -v 0.367515 0.248732 0.901685 -v 0.366970 0.239515 0.909427 -v 0.365741 0.232751 0.917712 -v 0.363875 0.228700 0.926222 -v 0.361445 0.227519 0.934629 -v 0.358543 0.229251 0.942612 -v 0.355282 0.233832 0.949863 -v 0.351786 0.241084 0.956103 -v 0.348190 0.250730 0.961093 -v 0.344631 0.262398 0.964641 -v 0.341248 0.275640 0.966611 -v 0.338170 0.289947 0.966926 -v 0.335514 0.304769 0.965575 -v 0.370689 0.275795 0.889656 -v 0.375576 0.265473 0.896090 -v 0.379449 0.256607 0.903581 -v 0.382159 0.249537 0.911839 -v 0.383601 0.244536 0.920548 -v 0.383721 0.241795 0.929373 -v 0.382513 0.241420 0.937975 -v 0.380024 0.243425 0.946024 -v 0.376350 0.247733 0.953209 -v 0.371631 0.254179 0.959255 -v 0.366050 0.262515 0.963930 -v 0.359821 0.272420 0.967054 -v 0.353182 0.283514 0.968506 -v 0.346390 0.295371 0.968232 -v 0.339705 0.307534 0.966241 -v 0.374648 0.279009 0.890153 -v 0.383343 0.271778 0.897066 -v 0.390725 0.265760 0.904997 -v 0.396510 0.261188 0.913641 -v 0.400476 0.258235 0.922667 -v 0.402471 0.257017 0.931728 -v 0.402418 0.257580 0.940475 -v 0.400319 0.259901 0.948572 -v 0.396255 0.263893 0.955709 -v 0.390382 0.269401 0.961610 -v 0.382925 0.276214 0.966049 -v 0.374172 0.284070 0.968856 -v 0.364458 0.292668 0.969922 -v 0.354157 0.301676 0.969207 -v 0.343664 0.310749 0.966738 -v 0.378224 0.282549 0.890463 -v 0.390358 0.278722 0.897673 -v 0.400909 0.275842 0.905879 -v 0.409471 0.274019 0.914764 -v 0.415717 0.273324 0.923987 -v 0.419406 0.273782 0.933195 -v 0.420396 0.275377 0.942032 -v 0.418650 0.278048 0.950160 -v 0.414233 0.281691 0.957266 -v 0.407317 0.286166 0.963077 -v 0.398166 0.291302 0.967369 -v 0.387133 0.296902 0.969978 -v 0.374642 0.302749 0.970804 -v 0.361171 0.308620 0.969814 -v 0.347240 0.314289 0.967048 -v 0.381280 0.286279 0.890573 -v 0.396351 0.286039 0.897890 -v 0.409609 0.286464 0.906193 -v 0.420545 0.287538 0.915164 -v 0.428739 0.289220 0.924458 -v 0.433875 0.291446 0.933717 -v 0.435756 0.294129 0.942587 -v 0.434310 0.297167 0.950726 -v 0.429593 0.300442 0.957821 -v 0.421785 0.303830 0.963599 -v 0.411188 0.307199 0.967839 -v 0.398207 0.310421 0.970378 -v 0.383342 0.313371 0.971118 -v 0.367164 0.315937 0.970031 -v 0.350296 0.318019 0.967158 -v 0.383697 0.290056 0.890480 -v 0.401092 0.293446 0.897707 -v 0.416492 0.297218 0.905927 -v 0.429305 0.301226 0.914826 -v 0.439040 0.305315 0.924060 -v 0.445321 0.309329 0.933276 -v 0.447907 0.313114 0.942118 -v 0.446699 0.316524 0.950248 -v 0.441744 0.319427 0.957352 -v 0.433231 0.321713 0.963158 -v 0.421489 0.323294 0.967442 -v 0.406967 0.324109 0.970040 -v 0.390225 0.324125 0.970853 -v 0.371905 0.323344 0.969848 -v 0.352713 0.321795 0.967065 -v 0.385382 0.293733 0.890187 -v 0.404399 0.300660 0.897131 -v 0.421293 0.307691 0.905092 -v 0.435416 0.314555 0.913763 -v 0.446225 0.320989 0.922810 -v 0.453304 0.326745 0.931887 -v 0.456382 0.331603 0.940644 -v 0.455340 0.335375 0.948744 -v 0.450219 0.337916 0.955877 -v 0.441215 0.339129 0.961769 -v 0.428674 0.338968 0.966192 -v 0.413078 0.337438 0.968977 -v 0.395026 0.334599 0.970017 -v 0.375212 0.330558 0.969273 -v 0.354398 0.325473 0.966771 -v 0.386272 0.297171 0.889705 -v 0.406144 0.307403 0.896186 -v 0.423827 0.317481 0.903719 -v 0.438641 0.327015 0.912016 -v 0.450017 0.335640 0.920756 -v 0.457518 0.343025 0.929604 -v 0.460856 0.348885 0.938220 -v 0.459902 0.352995 0.946273 -v 0.454693 0.355198 0.953454 -v 0.445429 0.355409 0.959486 -v 0.432466 0.353619 0.964138 -v 0.416303 0.349898 0.967230 -v 0.397560 0.344388 0.968645 -v 0.376958 0.337301 0.968327 -v 0.355288 0.328910 0.966289 -v 0.386332 0.300236 0.889052 -v 0.406262 0.313417 0.894906 -v 0.423997 0.326210 0.901862 -v 0.438858 0.338126 0.909651 -v 0.450272 0.348705 0.917976 -v 0.457802 0.357541 0.926515 -v 0.461157 0.364296 0.934941 -v 0.460209 0.368708 0.942930 -v 0.454994 0.370609 0.950175 -v 0.445712 0.369925 0.956397 -v 0.432721 0.366684 0.961358 -v 0.416520 0.361008 0.964866 -v 0.397731 0.353118 0.966787 -v 0.377075 0.343314 0.967048 -v 0.355348 0.331976 0.965637 -v 0.385560 0.302812 0.888255 -v 0.404746 0.318469 0.893342 -v 0.421797 0.333545 0.899591 -v 0.436058 0.347460 0.906761 -v 0.446980 0.359681 0.914577 -v 0.454143 0.369738 0.922739 -v 0.457273 0.377243 0.930932 -v 0.456248 0.381909 0.938842 -v 0.451110 0.383557 0.946166 -v 0.442054 0.382122 0.952621 -v 0.429429 0.377660 0.957959 -v 0.413720 0.370343 0.961976 -v 0.395530 0.360452 0.964516 -v 0.375560 0.348366 0.965483 -v 0.354576 0.334551 0.964840 -v 0.383984 0.304798 0.887343 -v 0.401656 0.322365 0.891553 -v 0.417311 0.339202 0.896994 -v 0.430348 0.354661 0.903456 -v 0.440266 0.368148 0.910690 -v 0.446683 0.379146 0.918420 -v 0.449353 0.387230 0.926347 -v 0.448174 0.392092 0.934168 -v 0.443190 0.393544 0.941581 -v 0.434594 0.391530 0.948302 -v 0.422715 0.386127 0.954072 -v 0.408010 0.377544 0.958670 -v 0.391044 0.366109 0.961919 -v 0.372470 0.352263 0.963695 -v 0.353000 0.336538 0.963928 -v 0.381667 0.306120 0.886351 -v 0.397110 0.324957 0.889608 -v 0.410712 0.342964 0.894170 -v 0.421948 0.359450 0.899862 -v 0.430389 0.373779 0.906465 -v 0.435708 0.385403 0.913725 -v 0.437702 0.393873 0.921363 -v 0.436295 0.398865 0.929086 -v 0.431539 0.400186 0.936597 -v 0.423619 0.397787 0.943607 -v 0.412838 0.391758 0.949847 -v 0.399610 0.382333 0.955077 -v 0.384445 0.369872 0.959096 -v 0.367924 0.354855 0.961750 -v 0.350683 0.337859 0.962936 -v 0.378696 0.306725 0.885319 -v 0.391283 0.326144 0.887582 -v 0.402252 0.344688 0.891229 -v 0.411181 0.361643 0.896119 -v 0.417728 0.376359 0.902063 -v 0.421640 0.388269 0.908834 -v 0.422768 0.396916 0.916171 -v 0.421068 0.401967 0.923792 -v 0.416605 0.403229 0.931404 -v 0.409551 0.400653 0.938716 -v 0.400177 0.394338 0.945445 -v 0.388843 0.384526 0.951333 -v 0.375985 0.371595 0.956155 -v 0.362097 0.356042 0.959724 -v 0.347712 0.338464 0.961903 -v 0.375187 0.306591 0.884284 -v 0.384399 0.325881 0.885553 -v 0.392258 0.344306 0.888283 -v 0.398461 0.361158 0.892369 -v 0.402770 0.375788 0.897654 -v 0.405020 0.387634 0.903935 -v 0.405124 0.396242 0.910970 -v 0.403078 0.401280 0.918489 -v 0.398961 0.402555 0.926204 -v 0.392931 0.400018 0.933817 -v 0.385219 0.393766 0.941036 -v 0.376123 0.384040 0.947584 -v 0.365991 0.371214 0.953209 -v 0.355213 0.355779 0.957695 -v 0.344203 0.338330 0.960869 -v 0.371273 0.305723 0.883288 -v 0.376722 0.324178 0.883599 -v 0.381112 0.341834 0.885446 -v 0.384276 0.358011 0.888758 -v 0.386090 0.372087 0.893407 -v 0.386487 0.383522 0.899216 -v 0.385449 0.391877 0.905961 -v 0.383018 0.396830 0.913382 -v 0.379286 0.398190 0.921194 -v 0.374397 0.395907 0.929098 -v 0.368539 0.390066 0.936789 -v 0.361938 0.380893 0.943972 -v 0.354845 0.368741 0.950371 -v 0.347536 0.354076 0.955740 -v 0.340289 0.337462 0.959872 -v 0.367106 0.304154 0.882368 -v 0.368547 0.321101 0.881794 -v 0.369245 0.337366 0.882826 -v 0.369171 0.352324 0.885423 -v 0.368329 0.365400 0.889486 -v 0.366751 0.376092 0.894859 -v 0.364498 0.383989 0.901335 -v 0.361656 0.388787 0.908666 -v 0.358335 0.390302 0.916569 -v 0.354662 0.388476 0.924741 -v 0.350778 0.383379 0.932868 -v 0.346833 0.375207 0.940637 -v 0.342978 0.364273 0.947751 -v 0.339361 0.350998 0.953935 -v 0.336122 0.335893 0.958952 -v 0.333384 0.319537 0.962610 -v 0.362845 0.301944 0.881559 -v 0.360189 0.316766 0.880208 -v 0.357111 0.331074 0.880524 -v 0.353727 0.344315 0.882493 -v 0.350169 0.355983 0.886041 -v 0.346573 0.365629 0.891031 -v 0.343077 0.372881 0.897271 -v 0.339816 0.377462 0.904522 -v 0.336914 0.379194 0.912505 -v 0.334484 0.378013 0.920913 -v 0.332618 0.373962 0.929423 -v 0.331389 0.367198 0.937708 -v 0.330844 0.357981 0.945449 -v 0.331003 0.346664 0.952350 -v 0.331861 0.333683 0.958144 -v 0.358654 0.299179 0.880894 -v 0.351969 0.311343 0.878903 -v 0.345177 0.323199 0.878628 -v 0.338538 0.334293 0.880081 -v 0.332309 0.344199 0.883204 -v 0.326728 0.352534 0.887879 -v 0.322009 0.358980 0.893925 -v 0.318335 0.363288 0.901111 -v 0.315846 0.365293 0.909159 -v 0.314638 0.364918 0.917761 -v 0.314758 0.362177 0.926586 -v 0.316200 0.357176 0.935295 -v 0.318910 0.350107 0.943554 -v 0.322783 0.341240 0.951044 -v 0.327670 0.330918 0.957479 -v 0.354695 0.295965 0.880396 -v 0.344202 0.305037 0.877927 -v 0.333901 0.314045 0.877212 -v 0.324187 0.322643 0.878279 -v 0.315434 0.330499 0.881085 -v 0.307977 0.337312 0.885525 -v 0.302104 0.342820 0.891426 -v 0.298040 0.346812 0.898562 -v 0.295941 0.349134 0.906659 -v 0.295888 0.349696 0.915406 -v 0.297883 0.348478 0.924467 -v 0.301849 0.345526 0.933493 -v 0.307634 0.340953 0.942138 -v 0.315016 0.334935 0.950069 -v 0.323711 0.327704 0.956981 -v 0.351119 0.292424 0.880087 -v 0.337188 0.298093 0.877320 -v 0.323717 0.303964 0.876330 -v 0.311226 0.309811 0.877156 -v 0.300193 0.315411 0.879765 -v 0.291042 0.320547 0.884058 -v 0.284126 0.325022 0.889869 -v 0.279709 0.328665 0.896974 -v 0.277963 0.331336 0.905102 -v 0.278953 0.332931 0.913940 -v 0.282642 0.333390 0.923147 -v 0.288888 0.332694 0.932371 -v 0.297450 0.330871 0.941256 -v 0.308001 0.327991 0.949461 -v 0.320135 0.324164 0.956672 -v 0.348063 0.288694 0.879976 -v 0.331195 0.290776 0.877103 -v 0.315017 0.293342 0.876016 -v 0.300152 0.296292 0.876756 -v 0.287171 0.299514 0.879295 -v 0.276574 0.302883 0.883535 -v 0.268766 0.306271 0.889314 -v 0.264049 0.309546 0.896409 -v 0.262603 0.312584 0.904547 -v 0.264484 0.315267 0.913417 -v 0.269620 0.317493 0.922677 -v 0.277814 0.319175 0.931971 -v 0.288750 0.320249 0.940942 -v 0.302008 0.320674 0.949245 -v 0.317079 0.320434 0.956561 -v 0.345646 0.284918 0.880070 -v 0.326453 0.283369 0.877286 -v 0.308134 0.282588 0.876282 -v 0.291392 0.282605 0.877094 -v 0.276870 0.283419 0.879692 -v 0.265128 0.285000 0.883977 -v 0.256615 0.287286 0.889783 -v 0.251660 0.290189 0.896887 -v 0.250452 0.293599 0.905016 -v 0.253038 0.297384 0.913859 -v 0.259319 0.301398 0.923074 -v 0.269054 0.305487 0.932309 -v 0.281867 0.309495 0.941207 -v 0.297267 0.313267 0.949428 -v 0.314662 0.316657 0.956654 -v 0.343960 0.281240 0.880363 -v 0.323147 0.276155 0.877862 -v 0.303333 0.272115 0.877117 -v 0.285281 0.269275 0.878157 -v 0.269685 0.267745 0.880942 -v 0.257144 0.267584 0.885366 -v 0.248140 0.268797 0.891257 -v 0.243019 0.271339 0.898390 -v 0.241977 0.275110 0.906491 -v 0.245055 0.279968 0.915248 -v 0.252134 0.285724 0.924324 -v 0.262943 0.292158 0.933372 -v 0.277066 0.299022 0.942042 -v 0.293960 0.306053 0.950003 -v 0.312976 0.312980 0.956948 -v 0.343071 0.277803 0.880845 -v 0.321401 0.269412 0.878807 -v 0.300799 0.262325 0.878490 -v 0.282056 0.256815 0.879904 -v 0.265893 0.253094 0.882997 -v 0.252930 0.251305 0.887648 -v 0.243666 0.251515 0.893680 -v 0.238457 0.253718 0.900861 -v 0.237503 0.257829 0.908914 -v 0.240840 0.263689 0.917530 -v 0.248342 0.271073 0.926379 -v 0.259718 0.279698 0.935119 -v 0.274532 0.289233 0.943415 -v 0.292215 0.299310 0.950949 -v 0.312087 0.309542 0.957430 -v 0.364975 0.287176 0.884525 -v 0.343011 0.274737 0.881497 -v 0.321284 0.263399 0.880087 -v 0.300628 0.253596 0.880347 -v 0.281839 0.245705 0.882268 -v 0.265638 0.240029 0.885777 -v 0.252647 0.236788 0.890737 -v 0.243365 0.236104 0.896960 -v 0.238150 0.238005 0.904204 -v 0.237202 0.242418 0.912193 -v 0.240557 0.249172 0.920619 -v 0.248087 0.258008 0.929159 -v 0.259501 0.268588 0.937483 -v 0.274361 0.280503 0.945273 -v 0.292097 0.293297 0.952228 -v 0.312027 0.306477 0.958082 -v 0.343783 0.272162 0.882295 -v 0.322799 0.258347 0.881651 -v 0.302829 0.246261 0.882618 -v 0.284639 0.236370 0.885159 -v 0.268930 0.229053 0.889175 -v 0.256305 0.224591 0.894514 -v 0.247249 0.223156 0.900969 -v 0.242110 0.224804 0.908292 -v 0.241086 0.229470 0.916202 -v 0.244216 0.236975 0.924396 -v 0.251379 0.247032 0.932557 -v 0.262301 0.259253 0.940373 -v 0.276562 0.273169 0.947544 -v 0.293613 0.288245 0.953792 -v 0.312799 0.303901 0.958880 -vn -0.457839 -0.781518 -0.423750 -vn -0.223029 -0.673574 -0.704642 -vn -0.075198 -0.813440 -0.576739 -vn 0.188421 -0.315073 -0.930143 -vn 0.237678 -0.259987 -0.935881 -vn 0.254982 -0.277749 -0.926176 -vn -0.419538 0.028382 0.907285 -vn -0.475234 -0.052797 0.878231 -vn -0.363811 -0.022614 0.931181 -vn -0.664296 -0.746788 0.031007 -vn -0.251381 -0.932798 -0.258187 -vn 0.129276 -0.377697 -0.916837 -vn 0.222175 -0.351207 -0.909513 -vn -0.371807 0.093417 0.923582 -vn -0.336650 0.059999 0.939695 -vn -0.701468 -0.541581 0.463240 -vn -0.416791 -0.889676 0.186377 -vn 0.052278 -0.453749 -0.889584 -vn 0.181555 -0.434950 -0.881954 -vn -0.328257 0.149602 0.932646 -vn -0.310587 0.132694 0.941221 -vn -0.627064 -0.321024 0.709708 -vn -0.460280 -0.434584 0.774102 -vn -0.057039 -0.551073 -0.832484 -vn 0.127140 -0.535997 -0.834559 -vn -0.543626 -0.162542 0.823389 -vn -0.426374 -0.254494 0.867977 -vn 0.047731 -0.662618 -0.747398 -vn -0.393414 -0.123234 0.911039 -vn 0.075259 -0.892026 -0.445631 -vn 0.273049 -0.291879 -0.916623 -vn -0.306375 -0.062563 0.949828 -vn -0.049165 -0.992737 -0.109500 -vn 0.257790 -0.380444 -0.888119 -vn -0.300272 0.033357 0.953246 -vn -0.476608 -0.671621 0.567186 -vn -0.265786 -0.729972 0.629627 -vn 0.236885 -0.480453 -0.844386 -vn -0.292428 0.119358 0.948790 -vn -0.299600 -0.502945 0.810694 -vn 0.206091 -0.598498 -0.774132 -vn -0.309793 -0.318613 0.895810 -vn 0.157018 -0.739464 -0.654622 -vn -0.310251 -0.176244 0.934141 -vn -0.201758 -0.357830 0.911710 -vn 0.261330 -0.782128 -0.565630 -vn -0.230537 -0.212165 0.949614 -vn 0.211371 -0.920133 -0.329600 -vn 0.290933 -0.302255 -0.907712 -vn -0.250252 -0.091128 0.963866 -vn -0.182501 -0.935881 0.301279 -vn 0.121921 -0.992492 0.006439 -vn 0.293588 -0.401959 -0.867275 -vn -0.264290 0.013825 0.964324 -vn -0.090060 -0.742607 0.663594 -vn 0.292306 -0.512894 -0.807123 -vn -0.274606 0.109653 0.955260 -vn -0.157903 -0.536241 0.829127 -vn 0.283914 -0.639729 -0.714194 -vn -0.257668 0.103580 0.960662 -vn -0.037233 -0.544359 0.838008 -vn 0.357402 -0.660604 -0.660146 -vn -0.105411 -0.376049 0.920560 -vn 0.356365 -0.796319 -0.488723 -vn -0.157109 -0.232185 0.959868 -vn 0.328745 -0.914212 -0.236793 -vn 0.308145 -0.308756 -0.899808 -vn -0.197333 -0.108432 0.974303 -vn 0.008362 -0.926206 0.376843 -vn 0.260598 -0.961241 0.089969 -vn 0.328257 -0.415357 -0.848323 -vn -0.230018 0.001556 0.973174 -vn 0.051912 -0.729331 0.682150 -vn 0.345622 -0.531938 -0.773003 -vn 0.360698 -0.420545 -0.832453 -vn -0.198431 -0.003418 0.980102 -vn 0.158483 -0.891140 0.425092 -vn 0.167791 -0.700797 0.693319 -vn 0.395276 -0.537950 -0.744530 -vn -0.242073 0.101138 0.964965 -vn 0.064638 -0.534104 0.842921 -vn 0.424818 -0.663442 -0.615925 -vn -0.021363 -0.376843 0.926023 -vn 0.441206 -0.788537 -0.428358 -vn -0.091342 -0.237709 0.967009 -vn 0.429548 -0.887173 -0.168432 -vn 0.324137 -0.311350 -0.893277 -vn -0.149113 -0.114780 0.982116 -vn 0.374584 -0.915433 0.147099 -vn 0.517838 -0.846583 -0.122929 -vn 0.338359 -0.310068 -0.888424 -vn -0.106632 -0.110660 0.988098 -vn 0.279061 -0.844997 0.456160 -vn 0.472060 -0.862178 0.183752 -vn 0.389935 -0.417707 -0.820612 -vn -0.170385 -0.001251 0.985351 -vn 0.264748 -0.661702 0.701437 -vn 0.440077 -0.531754 -0.723563 -vn -0.228248 0.102268 0.968200 -vn 0.151006 -0.509445 0.847133 -vn 0.485336 -0.650594 -0.584033 -vn 0.050935 -0.362682 0.930509 -vn 0.516709 -0.764000 -0.386303 -vn -0.033998 -0.229957 0.972594 -vn 0.112369 -0.335002 0.935453 -vn 0.584063 -0.725913 -0.363140 -vn 0.014618 -0.209815 0.977599 -vn 0.597247 -0.795984 -0.098361 -vn 0.350505 -0.305155 -0.885433 -vn -0.070589 -0.096500 0.992798 -vn 0.380108 -0.792871 0.476272 -vn 0.559313 -0.803491 0.203864 -vn 0.415113 -0.407239 -0.813501 -vn -0.146611 0.007843 0.989135 -vn 0.348430 -0.613514 0.708609 -vn 0.479049 -0.514359 -0.711264 -vn -0.216559 0.106845 0.970397 -vn 0.224677 -0.472274 0.852321 -vn 0.538652 -0.624134 -0.565935 -vn -0.127567 0.023591 0.991516 -vn 0.287759 -0.422712 0.859340 -vn 0.643910 -0.675680 -0.358867 -vn 0.163396 -0.294351 0.941618 -vn 0.670370 -0.736045 -0.093600 -vn 0.054231 -0.177770 0.982543 -vn 0.640919 -0.738456 0.209418 -vn 0.435621 -0.389691 -0.811365 -vn 0.468917 -0.735588 0.488845 -vn 0.550737 -0.671651 0.495499 -vn 0.511429 -0.486648 -0.708213 -vn -0.041597 -0.072756 0.996460 -vn 0.422803 -0.555620 0.715873 -vn 0.584277 -0.585253 -0.562151 -vn -0.020203 -0.039766 0.998993 -vn 0.490616 -0.485641 0.723472 -vn 0.621326 -0.534745 -0.572680 -vn -0.207160 0.114658 0.971526 -vn -0.113773 0.045656 0.992431 -vn 0.695944 -0.613361 -0.373333 -vn 0.341441 -0.359630 0.868343 -vn 0.738456 -0.665487 -0.108493 -vn 0.204230 -0.240364 0.948943 -vn 0.720023 -0.664296 0.200598 -vn 0.360271 -0.296823 -0.884335 -vn 0.450880 -0.365551 -0.814264 -vn 0.084384 -0.134068 0.987365 -vn 0.629322 -0.597919 0.496384 -vn 0.536363 -0.449324 -0.714408 -vn 0.367504 -0.285287 -0.885159 -vn 0.460250 -0.335429 -0.821955 -vn 0.104526 -0.078646 0.991394 -vn 0.707297 -0.509049 0.490463 -vn 0.552690 -0.403119 -0.729362 -vn -0.006989 0.002045 0.999969 -vn 0.648244 -0.472793 -0.596789 -vn -0.200323 0.125614 0.971618 -vn -0.105625 0.073611 0.991668 -vn 0.553362 -0.399365 0.730918 -vn 0.738609 -0.537919 -0.406262 -vn 0.385968 -0.280496 0.878811 -vn 0.800958 -0.581164 -0.143803 -vn 0.234352 -0.172124 0.956786 -vn 0.798212 -0.576128 0.175756 -vn 0.854823 -0.478378 -0.201025 -vn 0.252510 -0.088015 0.963561 -vn 0.874722 -0.466475 0.131260 -vn 0.371868 -0.270699 -0.887906 -vn 0.463027 -0.300119 -0.833949 -vn 0.113620 -0.011383 0.993439 -vn 0.785638 -0.396802 0.474624 -vn 0.559221 -0.348979 -0.751946 -vn -0.002594 0.052187 0.998627 -vn 0.662862 -0.399701 -0.633106 -vn -0.196204 0.139500 0.970580 -vn -0.103458 0.106906 0.988861 -vn 0.611103 -0.290201 0.736412 -vn 0.768639 -0.447645 -0.456893 -vn 0.420148 -0.181494 0.889096 -vn 0.660878 -0.148473 0.735649 -vn 0.780847 -0.341227 -0.523240 -vn 0.440870 -0.057497 0.895688 -vn 0.892788 -0.351787 -0.281289 -vn 0.256417 0.013520 0.966460 -vn 0.943632 -0.325144 0.061708 -vn 0.373089 -0.253456 -0.892483 -vn 0.458846 -0.260781 -0.849361 -vn 0.110446 0.067568 0.991577 -vn 0.861446 -0.248756 0.442701 -vn 0.554765 -0.288247 -0.780450 -vn -0.007538 0.109897 0.993896 -vn 0.662343 -0.316202 -0.679159 -vn -0.195044 0.156041 0.968291 -vn -0.107578 0.144688 0.983581 -vn -0.022462 0.173925 0.984497 -vn 0.693655 0.037599 0.719291 -vn 0.644032 -0.224311 -0.731346 -vn -0.196966 0.174841 0.964660 -vn -0.118107 0.186041 0.975402 -vn 0.768395 -0.219398 -0.601154 -vn 0.441908 0.096377 0.891842 -vn 0.902219 -0.197851 -0.383190 -vn 0.242653 0.133396 0.960875 -vn 0.989196 -0.141240 -0.038545 -vn 0.370983 -0.234107 -0.898618 -vn 0.447462 -0.218635 -0.867153 -vn 0.093448 0.157414 0.983093 -vn 0.921995 -0.049165 0.384014 -vn 0.538438 -0.222785 -0.812677 -vn 0.365520 -0.213202 -0.906034 -vn 0.428846 -0.175268 -0.886196 -vn 0.061007 0.255684 0.964812 -vn 0.935392 0.209876 0.284555 -vn 0.509842 -0.155156 -0.846126 -vn -0.047792 0.242317 0.968993 -vn 0.688955 0.274575 0.670766 -vn 0.606037 -0.127842 -0.785089 -vn -0.202094 0.195410 0.959655 -vn -0.135166 0.229621 0.963836 -vn 0.724845 -0.087039 -0.683370 -vn 0.412915 0.281045 0.866298 -vn 0.866146 -0.020386 -0.499344 -vn 0.206793 0.269601 0.940489 -vn 0.981506 0.086917 -0.170507 -vn 0.771966 0.162420 -0.614521 -vn 0.144810 0.414136 0.898587 -vn 0.886258 0.333201 -0.321696 -vn 0.356548 -0.191351 -0.914457 -vn 0.403302 -0.132633 -0.905393 -vn 0.012055 0.357280 0.933897 -vn 0.854671 0.500107 0.139195 -vn 0.469527 -0.088870 -0.878414 -vn -0.083712 0.311838 0.946410 -vn 0.615253 0.542741 0.571703 -vn 0.548509 -0.032929 -0.835475 -vn -0.210547 0.217200 0.953124 -vn -0.158818 0.273598 0.948637 -vn 0.647847 0.045106 -0.760430 -vn 0.341319 0.484207 0.805597 -vn 0.223029 0.673574 0.704642 -vn 0.543626 0.162572 -0.823389 -vn 0.057039 0.551073 0.832484 -vn 0.627064 0.321024 -0.709708 -vn -0.052278 0.453749 0.889584 -vn 0.701468 0.541581 -0.463240 -vn 0.344005 -0.169622 -0.923490 -vn 0.328257 -0.149602 -0.932646 -vn -0.129276 0.377697 0.916837 -vn 0.664296 0.746788 -0.031007 -vn 0.419538 -0.028382 -0.907254 -vn -0.188421 0.315073 0.930143 -vn 0.457839 0.781518 0.423750 -vn 0.475234 0.052797 -0.878231 -vn -0.222480 0.239265 0.945097 -vn -0.237678 0.259987 0.935881 -vn -0.222175 0.351238 0.909513 -vn 0.251381 0.932798 0.258187 -vn 0.363811 0.022614 -0.931181 -vn -0.254982 0.277718 0.926176 -vn 0.075198 0.813440 0.576739 -vn 0.393414 0.123234 -0.911039 -vn -0.047731 0.662618 0.747398 -vn 0.426374 0.254494 -0.867977 -vn -0.127140 0.535997 0.834559 -vn 0.460280 0.434584 -0.774102 -vn 0.371807 -0.093417 -0.923582 -vn 0.310587 -0.132664 -0.941221 -vn -0.181555 0.434950 0.881954 -vn 0.416791 0.889676 -0.186377 -vn 0.336650 -0.059999 -0.939695 -vn -0.236885 0.480453 0.844386 -vn 0.476608 0.671621 -0.567186 -vn 0.265786 0.729972 -0.629658 -vn 0.300241 -0.033357 -0.953246 -vn -0.257790 0.380444 0.888119 -vn 0.049165 0.992737 0.109531 -vn 0.306406 0.062563 -0.949828 -vn -0.273019 0.291879 0.916623 -vn -0.075259 0.892026 0.445631 -vn 0.310221 0.176244 -0.934141 -vn -0.157018 0.739433 0.654622 -vn 0.309793 0.318613 -0.895810 -vn -0.206091 0.598498 0.774132 -vn 0.299600 0.502945 -0.810694 -vn 0.292428 -0.119358 -0.948790 -vn -0.283914 0.639729 0.714225 -vn 0.157903 0.536241 -0.829127 -vn 0.274606 -0.109653 -0.955260 -vn -0.292306 0.512894 0.807123 -vn 0.182501 0.935881 -0.301248 -vn 0.090060 0.742607 -0.663594 -vn 0.264290 -0.013825 -0.964324 -vn -0.293588 0.401959 0.867306 -vn -0.121921 0.992492 -0.006439 -vn 0.250252 0.091128 -0.963866 -vn -0.290963 0.302255 0.907712 -vn -0.211371 0.920133 0.329600 -vn 0.230537 0.212165 -0.949614 -vn -0.261330 0.782128 0.565630 -vn 0.201758 0.357799 -0.911710 -vn 0.157109 0.232185 -0.959868 -vn -0.356334 0.796319 0.488723 -vn 0.105411 0.376049 -0.920560 -vn -0.357402 0.660604 0.660146 -vn 0.037202 0.544359 -0.838008 -vn 0.257637 -0.103580 -0.960662 -vn -0.345653 0.531938 0.773003 -vn -0.008362 0.926206 -0.376843 -vn -0.051943 0.729331 -0.682150 -vn 0.230018 -0.001556 -0.973174 -vn -0.328257 0.415357 0.848323 -vn -0.260598 0.961241 -0.089969 -vn 0.197333 0.108432 -0.974303 -vn -0.308176 0.308756 0.899808 -vn -0.328745 0.914212 0.236793 -vn -0.158483 0.891140 -0.425092 -vn -0.374584 0.915433 -0.147099 -vn 0.149144 0.114780 -0.982116 -vn -0.324137 0.311350 0.893277 -vn -0.429548 0.887173 0.168432 -vn 0.091342 0.237709 -0.967009 -vn -0.441206 0.788568 0.428327 -vn 0.021363 0.376843 -0.926023 -vn -0.424818 0.663442 0.615894 -vn -0.064638 0.534104 -0.842921 -vn 0.242073 -0.101138 -0.964965 -vn -0.395276 0.537950 0.744530 -vn -0.167791 0.700797 -0.693319 -vn 0.198431 0.003418 -0.980102 -vn -0.360698 0.420545 0.832453 -vn -0.440077 0.531754 0.723563 -vn -0.279061 0.844997 -0.456160 -vn -0.264748 0.661702 -0.701437 -vn 0.170385 0.001251 -0.985351 -vn -0.389935 0.417707 0.820643 -vn -0.472060 0.862178 -0.183752 -vn 0.106632 0.110660 -0.988098 -vn -0.338359 0.310068 0.888424 -vn -0.517808 0.846583 0.122929 -vn 0.033998 0.229957 -0.972594 -vn -0.516709 0.764000 0.386303 -vn -0.050935 0.362682 -0.930509 -vn -0.485336 0.650594 0.584033 -vn -0.151006 0.509445 -0.847133 -vn 0.228248 -0.102268 -0.968200 -vn -0.538652 0.624134 0.565935 -vn -0.224677 0.472274 -0.852321 -vn 0.216559 -0.106845 -0.970397 -vn -0.479049 0.514359 0.711264 -vn -0.380108 0.792871 -0.476272 -vn -0.348430 0.613514 -0.708609 -vn 0.146611 -0.007843 -0.989135 -vn -0.415113 0.407239 0.813501 -vn -0.559313 0.803491 -0.203833 -vn 0.070589 0.096500 -0.992798 -vn -0.350505 0.305155 0.885433 -vn -0.597247 0.795984 0.098361 -vn -0.014618 0.209815 -0.977599 -vn -0.584063 0.725913 0.363140 -vn -0.112369 0.335002 -0.935453 -vn -0.054231 0.177770 -0.982543 -vn -0.670370 0.736045 0.093600 -vn -0.163396 0.294351 -0.941618 -vn -0.643910 0.675680 0.358867 -vn -0.287759 0.422712 -0.859340 -vn 0.127598 -0.023591 -0.991516 -vn -0.584277 0.585253 0.562151 -vn -0.468947 0.735588 -0.488845 -vn -0.422803 0.555620 -0.715873 -vn 0.041597 0.072756 -0.996460 -vn -0.511429 0.486648 0.708213 -vn -0.550737 0.671651 -0.495499 -vn -0.435621 0.389691 0.811365 -vn -0.640919 0.738456 -0.209418 -vn -0.629322 0.597919 -0.496384 -vn -0.084384 0.134068 -0.987365 -vn -0.360271 0.296823 0.884335 -vn -0.450880 0.365551 0.814264 -vn -0.720023 0.664296 -0.200598 -vn -0.204230 0.240364 -0.948943 -vn -0.738456 0.665487 0.108493 -vn -0.341441 0.359630 -0.868343 -vn -0.695944 0.613361 0.373333 -vn -0.490616 0.485641 -0.723472 -vn 0.207160 -0.114658 -0.971557 -vn 0.113773 -0.045656 -0.992431 -vn -0.621326 0.534745 0.572680 -vn 0.020203 0.039766 -0.998993 -vn -0.536363 0.449324 0.714408 -vn -0.648244 0.472793 0.596789 -vn -0.707297 0.509049 -0.490463 -vn 0.007019 -0.002045 -0.999969 -vn -0.552690 0.403119 0.729362 -vn -0.104495 0.078646 -0.991394 -vn -0.367504 0.285287 0.885159 -vn -0.460219 0.335429 0.821955 -vn -0.798212 0.576098 -0.175756 -vn -0.234352 0.172124 -0.956786 -vn -0.800958 0.581164 0.143803 -vn -0.385968 0.280496 -0.878811 -vn -0.738609 0.537919 0.406262 -vn -0.553392 0.399365 -0.730888 -vn 0.200323 -0.125614 -0.971618 -vn 0.105625 -0.073641 -0.991668 -vn -0.768639 0.447645 0.456893 -vn -0.611103 0.290201 -0.736412 -vn 0.196204 -0.139500 -0.970580 -vn 0.103458 -0.106906 -0.988861 -vn -0.662862 0.399701 0.633106 -vn -0.785638 0.396802 -0.474593 -vn 0.002594 -0.052187 -0.998627 -vn -0.559221 0.348979 0.751946 -vn -0.113620 0.011383 -0.993439 -vn -0.371868 0.270699 0.887906 -vn -0.463027 0.300119 0.833949 -vn -0.874722 0.466475 -0.131260 -vn -0.252510 0.088015 -0.963561 -vn -0.854793 0.478378 0.201025 -vn -0.420179 0.181463 -0.889096 -vn -0.892788 0.351787 0.281289 -vn -0.440870 0.057497 -0.895688 -vn -0.780847 0.341227 0.523240 -vn -0.660878 0.148442 -0.735649 -vn 0.195044 -0.156041 -0.968291 -vn 0.107578 -0.144688 -0.983581 -vn -0.662374 0.316202 0.679159 -vn -0.861446 0.248756 -0.442701 -vn 0.007538 -0.109897 -0.993896 -vn -0.554765 0.288247 0.780450 -vn -0.110446 -0.067598 -0.991577 -vn -0.373089 0.253456 0.892483 -vn -0.458846 0.260781 0.849361 -vn -0.943632 0.325144 -0.061708 -vn -0.256417 -0.013520 -0.966460 -vn -0.093448 -0.157414 -0.983093 -vn -0.371014 0.234107 0.898618 -vn -0.447462 0.218635 0.867153 -vn -0.989196 0.141240 0.038575 -vn -0.242653 -0.133396 -0.960875 -vn -0.902219 0.197851 0.383190 -vn -0.441908 -0.096377 -0.891842 -vn -0.768395 0.219398 0.601154 -vn -0.693655 -0.037599 -0.719291 -vn 0.196966 -0.174841 -0.964660 -vn 0.118107 -0.186041 -0.975402 -vn -0.644032 0.224311 0.731346 -vn 0.022462 -0.173925 -0.984497 -vn -0.538408 0.222785 0.812677 -vn -0.921995 0.049165 -0.384014 -vn -0.688955 -0.274575 -0.670766 -vn 0.047792 -0.242317 -0.968993 -vn -0.509842 0.155156 0.846126 -vn -0.935392 -0.209876 -0.284555 -vn -0.061007 -0.255684 -0.964812 -vn -0.365520 0.213202 0.906034 -vn -0.428877 0.175268 0.886196 -vn -0.981506 -0.086917 0.170507 -vn -0.206824 -0.269601 -0.940489 -vn -0.866146 0.020386 0.499344 -vn -0.412946 -0.281045 -0.866298 -vn -0.724845 0.087039 0.683370 -vn 0.202094 -0.195410 -0.959655 -vn 0.135166 -0.229621 -0.963836 -vn -0.606037 0.127842 0.785089 -vn -0.647816 -0.045106 0.760430 -vn -0.615253 -0.542711 -0.571703 -vn 0.210547 -0.217200 -0.953124 -vn 0.158788 -0.273598 -0.948637 -vn -0.548509 0.032929 0.835475 -vn 0.083712 -0.311838 -0.946410 -vn -0.469527 0.088870 0.878414 -vn -0.854671 -0.500107 -0.139195 -vn -0.012055 -0.357280 -0.933897 -vn -0.356548 0.191382 0.914457 -vn -0.403302 0.132633 0.905393 -vn -0.886258 -0.333201 0.321696 -vn -0.144810 -0.414136 -0.898587 -vn -0.771966 -0.162420 0.614521 -vn -0.341319 -0.484207 -0.805597 -vn -0.284280 0.205390 0.936460 -vn 0.284280 -0.205390 -0.936460 -vn -0.344005 0.169622 0.923490 -vn 0.222480 -0.239265 -0.945097 -vn -0.223060 -0.673574 -0.704642 -vn 0.254982 -0.277718 -0.926176 -vn -0.419538 0.028382 0.907254 -vn 0.222175 -0.351207 -0.909543 -vn 0.181555 -0.434950 -0.881924 -vn -0.328288 0.149602 0.932646 -vn -0.310617 0.132664 0.941221 -vn -0.543626 -0.162572 0.823389 -vn 0.273049 -0.291849 -0.916623 -vn -0.306406 -0.062563 0.949828 -vn -0.300241 0.033357 0.953246 -vn 0.157018 -0.739433 -0.654622 -vn -0.310221 -0.176244 0.934141 -vn -0.201758 -0.357799 0.911710 -vn -0.230537 -0.212165 0.949644 -vn 0.290994 -0.302255 -0.907712 -vn -0.182501 -0.935881 0.301248 -vn 0.293588 -0.401959 -0.867306 -vn -0.274575 0.109653 0.955260 -vn -0.157872 -0.536241 0.829127 -vn 0.283914 -0.639729 -0.714225 -vn -0.037202 -0.544359 0.838008 -vn -0.105441 -0.376049 0.920560 -vn 0.308176 -0.308756 -0.899808 -vn 0.051943 -0.729331 0.682150 -vn 0.345653 -0.531938 -0.773003 -vn 0.395306 -0.537919 -0.744530 -vn -0.242103 0.101138 0.964934 -vn 0.441206 -0.788568 -0.428358 -vn -0.149144 -0.114780 0.982116 -vn -0.228278 0.102268 0.968200 -vn 0.112339 -0.335002 0.935453 -vn -0.127598 0.023591 0.991516 -vn 0.468947 -0.735588 0.488845 -vn 0.695944 -0.613361 -0.373363 -vn 0.341472 -0.359630 0.868343 -vn 0.629322 -0.597919 0.496414 -vn 0.104495 -0.078646 0.991394 -vn -0.007019 0.002045 0.999969 -vn 0.553392 -0.399365 0.730918 -vn 0.800958 -0.581133 -0.143803 -vn 0.798212 -0.576098 0.175756 -vn 0.785638 -0.396802 0.474593 -vn -0.002564 0.052187 0.998627 -vn 0.420148 -0.181463 0.889096 -vn 0.660878 -0.148442 0.735649 -vn 0.780847 -0.341227 -0.523270 -vn 0.371014 -0.234107 -0.898618 -vn 0.538408 -0.222785 -0.812677 -vn 0.365520 -0.213172 -0.906034 -vn 0.428846 -0.175237 -0.886196 -vn 0.606006 -0.127842 -0.785089 -vn 0.412946 0.281045 0.866298 -vn 0.356517 -0.191382 -0.914457 -vn -0.210517 0.217200 0.953124 -vn 0.647816 0.045106 -0.760430 -vn 0.627033 0.321024 -0.709708 -vn 0.344005 -0.169652 -0.923490 -vn 0.328288 -0.149602 -0.932646 -vn -0.222449 0.239265 0.945097 -vn -0.222144 0.351238 0.909543 -vn 0.426405 0.254494 -0.867977 -vn 0.265786 0.729972 -0.629627 -vn 0.049165 0.992737 0.109500 -vn -0.273049 0.291879 0.916623 -vn 0.310251 0.176244 -0.934141 -vn -0.283914 0.639729 0.714194 -vn 0.157872 0.536241 -0.829127 -vn 0.182501 0.935881 -0.301279 -vn 0.090030 0.742607 -0.663594 -vn -0.293588 0.401959 0.867275 -vn 0.250221 0.091128 -0.963866 -vn 0.201758 0.357830 -0.911710 -vn -0.356365 0.796319 0.488723 -vn 0.105441 0.376049 -0.920560 -vn 0.257668 -0.103580 -0.960631 -vn -0.051943 0.729362 -0.682150 -vn 0.197363 0.108432 -0.974303 -vn -0.324107 0.311350 0.893277 -vn -0.424818 0.663442 0.615925 -vn 0.242103 -0.101138 -0.964934 -vn -0.395306 0.537950 0.744530 -vn -0.360729 0.420545 0.832453 -vn -0.440046 0.531754 0.723563 -vn -0.389935 0.417707 0.820612 -vn -0.338359 0.310068 0.888455 -vn 0.216529 -0.106845 -0.970397 -vn -0.350475 0.305155 0.885433 -vn -0.112339 0.335002 -0.935453 -vn 0.127567 -0.023591 -0.991516 -vn -0.629322 0.597919 -0.496414 -vn -0.360271 0.296854 0.884335 -vn 0.006989 -0.002045 -0.999969 -vn -0.798212 0.576128 -0.175756 -vn -0.553362 0.399365 -0.730918 -vn -0.768670 0.447645 0.456862 -vn -0.854823 0.478378 0.201025 -vn -0.420179 0.181494 -0.889096 -vn -0.660878 0.148473 -0.735649 -vn -0.662343 0.316202 0.679159 -vn -0.110446 -0.067568 -0.991577 -vn -0.538438 0.222785 0.812647 -vn -0.365520 0.213172 0.906034 -vn -0.428846 0.175268 0.886196 -vn -0.412915 -0.281045 -0.866298 -vn -0.606006 0.127842 0.785089 -vn -0.615253 -0.542711 -0.571734 -vn 0.158818 -0.273598 -0.948637 -vn -0.403272 0.132633 0.905393 -vn 0.222480 -0.239296 -0.945097 -usemtl SkinColor -s 1 -f 2417//1711 2416//1712 2431//1713 -f 2412//1714 2411//1715 2426//1716 -f 2423//1717 2422//1718 2438//1719 -f 2418//1720 2417//1711 2432//1721 -f 2413//1722 2412//1714 2427//1723 -f 2424//1724 2423//1717 2439//1725 -f 2419//1726 2418//1720 2433//1727 -f 2414//1728 2413//1722 2428//1729 -f 2425//1730 2424//1724 2440//1731 -f 2420//1732 2419//1726 2435//1733 -f 2415//1734 2414//1728 2429//1735 -f 2421//1736 2420//1732 2436//1737 -f 2416//1712 2415//1734 2430//1738 -f 2422//1718 2421//1736 2437//1739 -f 2432//1721 2431//1713 2446//1740 -f 2427//1723 2426//1716 2441//1741 -f 2438//1719 2437//1739 2453//1742 -f 2433//1727 2432//1721 2447//1743 -f 2428//1729 2427//1723 2442//1744 -f 2439//1725 2438//1719 2454//1745 -f 2434//1746 2433//1727 2449//1747 -f 2429//1735 2428//1729 2443//1748 -f 2440//1731 2439//1725 2455//1749 -f 2435//1733 2434//1746 2450//1750 -f 2430//1738 2429//1735 2444//1751 -f 2436//1737 2435//1733 2451//1752 -f 2431//1713 2430//1738 2445//1753 -f 2437//1739 2436//1737 2452//1754 -f 2451//1752 2450//1750 2466//1755 -f 2446//1740 2445//1753 2460//1756 -f 2452//1754 2451//1752 2467//1757 -f 2447//1743 2446//1740 2461//1758 -f 2442//1744 2441//1741 2456//1759 -f 2453//1742 2452//1754 2468//1760 -f 2448//1761 2447//1743 2462//1762 -f 2443//1748 2442//1744 2457//1763 -f 2454//1745 2453//1742 2469//1764 -f 2449//1747 2448//1761 2464//1765 -f 2444//1751 2443//1748 2458//1766 -f 2455//1749 2454//1745 2470//1767 -f 2450//1750 2449//1747 2465//1768 -f 2445//1753 2444//1751 2459//1769 -f 2470//1767 2469//1764 2485//1770 -f 2465//1768 2464//1765 2480//1771 -f 2460//1756 2459//1769 2474//1772 -f 2466//1755 2465//1768 2481//1773 -f 2461//1758 2460//1756 2475//1774 -f 2467//1757 2466//1755 2482//1775 -f 2462//1762 2461//1758 2476//1776 -f 2457//1763 2456//1759 2471//1777 -f 2468//1760 2467//1757 2483//1778 -f 2463//1779 2462//1762 2477//1780 -f 2458//1766 2457//1763 2472//1781 -f 2469//1764 2468//1760 2484//1782 -f 2464//1765 2463//1779 2479//1783 -f 2459//1769 2458//1766 2473//1784 -f 2473//1784 2472//1781 2487//1785 -f 2484//1782 2483//1778 2499//1786 -f 2479//1783 2478//1787 2494//1788 -f 2474//1772 2473//1784 2488//1789 -f 2485//1770 2484//1782 2500//1790 -f 2480//1771 2479//1783 2495//1791 -f 2475//1774 2474//1772 2489//1792 -f 2481//1773 2480//1771 2496//1793 -f 2476//1776 2475//1774 2490//1794 -f 2482//1775 2481//1773 2497//1795 -f 2477//1780 2476//1776 2491//1796 -f 2472//1781 2471//1777 2486//1797 -f 2483//1778 2482//1775 2498//1798 -f 2478//1787 2477//1780 2492//1799 -f 2492//1799 2491//1796 2506//1800 -f 2487//1785 2486//1797 2501//1801 -f 2498//1798 2497//1795 2513//1802 -f 2493//1803 2492//1799 2507//1804 -f 2488//1789 2487//1785 2502//1805 -f 2499//1786 2498//1798 2514//1806 -f 2494//1788 2493//1803 2509//1807 -f 2489//1792 2488//1789 2503//1808 -f 2500//1790 2499//1786 2515//1809 -f 2495//1791 2494//1788 2510//1810 -f 2490//1794 2489//1792 2504//1811 -f 2496//1793 2495//1791 2511//1812 -f 2491//1796 2490//1794 2505//1813 -f 2497//1795 2496//1793 2512//1814 -f 2511//1812 2510//1810 2526//1815 -f 2506//1800 2505//1813 2520//1816 -f 2512//1814 2511//1812 2527//1817 -f 2507//1804 2506//1800 2521//1818 -f 2502//1805 2501//1801 2516//1819 -f 2513//1802 2512//1814 2528//1820 -f 2508//1821 2507//1804 2522//1822 -f 2503//1808 2502//1805 2517//1823 -f 2514//1806 2513//1802 2529//1824 -f 2509//1807 2508//1821 2524//1825 -f 2504//1811 2503//1808 2518//1826 -f 2515//1809 2514//1806 2530//1827 -f 2510//1810 2509//1807 2525//1828 -f 2505//1813 2504//1811 2519//1829 -f 2530//1827 2529//1824 2544//1830 -f 2525//1828 2524//1825 2540//1831 -f 2520//1816 2519//1829 2535//1832 -f 2526//1815 2525//1828 2541//1833 -f 2521//1818 2520//1816 2536//1834 -f 2527//1817 2526//1815 2542//1835 -f 2522//1822 2521//1818 2537//1836 -f 2517//1823 2516//1819 2532//1837 -f 2528//1820 2527//1817 2542//1835 -f 2523//1838 2522//1822 2538//1839 -f 2518//1826 2517//1823 2533//1840 -f 2529//1824 2528//1820 2543//1841 -f 2524//1825 2523//1838 2539//1842 -f 2519//1829 2518//1826 2534//1843 -f 2544//1830 2543//1841 2558//1844 -f 2539//1842 2538//1839 2554//1845 -f 2534//1843 2533//1840 2549//1846 -f 2545//1847 2544//1830 2559//1848 -f 2540//1831 2539//1842 2554//1845 -f 2535//1832 2534//1843 2550//1849 -f 2541//1833 2540//1831 2555//1850 -f 2536//1834 2535//1832 2551//1851 -f 2542//1835 2541//1833 2556//1852 -f 2537//1836 2536//1834 2552//1853 -f 2532//1837 2531//1854 2547//1855 -f 2543//1841 2542//1835 2557//1856 -f 2538//1839 2537//1836 2553//1857 -f 2533//1840 2532//1837 2548//1858 -f 2547//1855 2546//1859 2562//1860 -f 2558//1844 2557//1856 2572//1861 -f 2553//1857 2552//1853 2568//1862 -f 2548//1858 2547//1855 2563//1863 -f 2559//1848 2558//1844 2573//1864 -f 2554//1845 2553//1857 2568//1862 -f 2549//1846 2548//1858 2564//1865 -f 2560//1866 2559//1848 2574//1867 -f 2555//1850 2554//1845 2569//1868 -f 2550//1849 2549//1846 2565//1869 -f 2556//1852 2555//1850 2570//1870 -f 2551//1851 2550//1849 2566//1871 -f 2557//1856 2556//1852 2571//1872 -f 2552//1853 2551//1851 2567//1873 -f 2566//1871 2565//1869 2581//1874 -f 2572//1861 2571//1872 2586//1875 -f 2567//1873 2566//1871 2582//1876 -f 2562//1860 2561//1877 2577//1878 -f 2573//1864 2572//1861 2587//1879 -f 2568//1862 2567//1873 2583//1880 -f 2563//1863 2562//1860 2578//1881 -f 2574//1867 2573//1864 2588//1882 -f 2569//1868 2568//1862 2583//1880 -f 2564//1865 2563//1863 2579//1883 -f 2575//1884 2574//1867 2589//1885 -f 2570//1870 2569//1868 2584//1886 -f 2565//1869 2564//1865 2580//1887 -f 2571//1872 2570//1870 2585//1888 -f 2585//1888 2584//1886 2599//1889 -f 2580//1887 2579//1883 2595//1890 -f 2586//1875 2585//1888 2600//1891 -f 2581//1874 2580//1887 2596//1892 -f 2587//1879 2586//1875 2601//1893 -f 2582//1876 2581//1874 2597//1894 -f 2577//1878 2576//1895 2592//1896 -f 2588//1882 2587//1879 2602//1897 -f 2583//1880 2582//1876 2598//1898 -f 2578//1881 2577//1878 2593//1899 -f 2589//1885 2588//1882 2603//1900 -f 2584//1886 2583//1880 2598//1898 -f 2579//1883 2578//1881 2594//1901 -f 2590//1902 2589//1885 2604//1903 -f 2604//1903 2603//1900 2618//1904 -f 2599//1889 2598//1898 2614//1905 -f 2594//1901 2593//1899 2609//1906 -f 2605//1907 2604//1903 2619//1908 -f 2600//1891 2599//1889 2614//1905 -f 2595//1890 2594//1901 2610//1909 -f 2601//1893 2600//1891 2615//1910 -f 2596//1892 2595//1890 2611//1911 -f 2602//1897 2601//1893 2616//1912 -f 2597//1894 2596//1892 2612//1913 -f 2592//1896 2591//1914 2607//1915 -f 2603//1900 2602//1897 2617//1916 -f 2598//1898 2597//1894 2613//1917 -f 2593//1899 2592//1896 2608//1918 -f 2607//1915 2606//1919 2622//1920 -f 2618//1904 2617//1916 2632//1921 -f 2613//1917 2612//1913 2628//1922 -f 2608//1918 2607//1915 2623//1923 -f 2619//1908 2618//1904 2633//1924 -f 2614//1905 2613//1917 2629//1925 -f 2609//1906 2608//1918 2624//1926 -f 2620//1927 2619//1908 2634//1928 -f 2615//1910 2614//1905 2629//1925 -f 2610//1909 2609//1906 2625//1929 -f 2616//1912 2615//1910 2630//1930 -f 2611//1911 2610//1909 2626//1931 -f 2617//1916 2616//1912 2631//1932 -f 2612//1913 2611//1911 2627//1933 -f 2626//1931 2625//1929 2641//1934 -f 2632//1921 2631//1932 2646//1935 -f 2627//1933 2626//1931 2642//1936 -f 2622//1920 2621//1937 2637//1938 -f 2633//1924 2632//1921 2647//1939 -f 2628//1922 2627//1933 2643//1940 -f 2623//1923 2622//1920 2638//1941 -f 2634//1928 2633//1924 2648//1942 -f 2629//1925 2628//1922 2644//1943 -f 2624//1926 2623//1923 2639//1944 -f 2635//1945 2634//1928 2649//1946 -f 2630//1930 2629//1925 2644//1943 -f 2625//1929 2624//1926 2640//1947 -f 2631//1932 2630//1930 2645//1948 -f 2645//1948 2644//1943 2660//1949 -f 2640//1947 2639//1944 2655//1950 -f 2646//1935 2645//1948 2661//1951 -f 2641//1934 2640//1947 2656//1952 -f 2647//1939 2646//1935 2662//1953 -f 2642//1936 2641//1934 2657//1954 -f 2637//1938 2636//1955 2651//1956 -f 2648//1942 2647//1939 2663//1957 -f 2643//1940 2642//1936 2658//1958 -f 2638//1941 2637//1938 2653//1959 -f 2649//1946 2648//1942 2664//1960 -f 2644//1943 2643//1940 2659//1961 -f 2639//1944 2638//1941 2654//1962 -f 2650//1963 2649//1946 2665//1964 -f 2664//1960 2663//1957 2679//1965 -f 2659//1961 2658//1958 2674//1966 -f 2654//1962 2653//1959 2668//1967 -f 2665//1964 2664//1960 2680//1968 -f 2660//1949 2659//1961 2675//1969 -f 2655//1950 2654//1962 2669//1970 -f 2661//1951 2660//1949 2676//1971 -f 2656//1952 2655//1950 2670//1972 -f 2662//1953 2661//1951 2677//1973 -f 2657//1954 2656//1952 2671//1974 -f 2652//1975 2651//1956 2666//1976 -f 2663//1957 2662//1953 2678//1977 -f 2658//1958 2657//1954 2673//1978 -f 2653//1959 2652//1975 2667//1979 -f 2678//1977 2677//1973 2693//1980 -f 2673//1978 2672//1981 2687//1982 -f 2668//1967 2667//1979 2682//1983 -f 2679//1965 2678//1977 2694//1984 -f 2674//1966 2673//1978 2689//1985 -f 2669//1970 2668//1967 2683//1986 -f 2680//1968 2679//1965 2695//1987 -f 2675//1969 2674//1966 2690//1988 -f 2670//1972 2669//1970 2684//1989 -f 2676//1971 2675//1969 2691//1990 -f 2671//1974 2670//1972 2685//1991 -f 2677//1973 2676//1971 2692//1992 -f 2672//1981 2671//1974 2686//1993 -f 2667//1979 2666//1976 2681//1994 -f 2692//1992 2691//1990 2707//1995 -f 2687//1982 2686//1993 2701//1996 -f 2682//1983 2681//1994 2696//1997 -f 2693//1980 2692//1992 2708//1998 -f 2688//1999 2687//1982 2702//2000 -f 2683//1986 2682//1983 2697//2001 -f 2694//1984 2693//1980 2709//2002 -f 2689//1985 2688//1999 2704//2003 -f 2684//1989 2683//1986 2698//2004 -f 2695//1987 2694//1984 2710//2005 -f 2690//1988 2689//1985 2705//2006 -f 2685//1991 2684//1989 2699//2007 -f 2691//1990 2690//1988 2706//2008 -f 2686//1993 2685//1991 2700//2009 -f 2700//2009 2699//2007 2714//2010 -f 2706//2008 2705//2006 2721//2011 -f 2701//1996 2700//2009 2715//2012 -f 2707//1995 2706//2008 2722//2013 -f 2702//2000 2701//1996 2716//2014 -f 2697//2001 2696//1997 2711//2015 -f 2708//1998 2707//1995 2723//2016 -f 2703//2017 2702//2000 2717//2018 -f 2698//2004 2697//2001 2712//2019 -f 2709//2002 2708//1998 2724//2020 -f 2704//2003 2703//2017 2719//2021 -f 2699//2007 2698//2004 2713//2022 -f 2710//2005 2709//2002 2725//2023 -f 2705//2006 2704//2003 2720//2024 -f 2719//2021 2718//2025 2734//2026 -f 2714//2010 2713//2022 2728//2027 -f 2725//2023 2724//2020 2740//2028 -f 2720//2024 2719//2021 2735//2029 -f 2715//2012 2714//2010 2729//2030 -f 2721//2011 2720//2024 2736//2031 -f 2716//2014 2715//2012 2730//2032 -f 2722//2013 2721//2011 2737//2033 -f 2717//2018 2716//2014 2731//2034 -f 2712//2019 2711//2015 2726//2035 -f 2723//2016 2722//2013 2738//2036 -f 2718//2025 2717//2018 2732//2037 -f 2713//2022 2712//2019 2727//2038 -f 2724//2020 2723//2016 2739//2039 -f 2738//2036 2737//2033 2754//2040 -f 2733//2041 2732//2037 2748//2042 -f 2728//2027 2727//2038 2743//2043 -f 2739//2039 2738//2036 2755//2044 -f 2734//2026 2733//2041 2750//2045 -f 2729//2030 2728//2027 2744//2046 -f 2740//2028 2739//2039 2756//2047 -f 2735//2029 2734//2026 2751//2048 -f 2730//2032 2729//2030 2745//2049 -f 2736//2031 2735//2029 2752//2050 -f 2731//2034 2730//2032 2746//2051 -f 2737//2033 2736//2031 2753//2052 -f 2732//2037 2731//2034 2747//2053 -f 2727//2038 2726//2035 2742//2054 -f 2753//2052 2752//2050 2768//2055 -f 2748//2042 2747//2053 2762//2056 -f 2743//2043 2742//2054 2757//2057 -f 2754//2040 2753//2052 2769//2058 -f 2749//2059 2748//2042 2763//2060 -f 2744//2046 2743//2043 2758//2061 -f 2755//2044 2754//2040 2770//2062 -f 2750//2045 2749//2059 2765//2063 -f 2745//2049 2744//2046 2759//2064 -f 2756//2047 2755//2044 2771//2065 -f 2751//2048 2750//2045 2766//2066 -f 2746//2051 2745//2049 2760//2067 -f 2752//2050 2751//2048 2767//2068 -f 2747//2053 2746//2051 2761//2069 -f 2761//2069 2760//2067 2775//2070 -f 2767//2068 2766//2066 2781//2071 -f 2762//2056 2761//2069 2776//2072 -f 2768//2055 2767//2068 2782//2073 -f 2763//2060 2762//2056 2777//2074 -f 2758//2061 2757//2057 2773//2075 -f 2769//2058 2768//2055 2783//2076 -f 2764//2077 2763//2060 2778//2078 -f 2759//2064 2758//2061 2774//2079 -f 2770//2062 2769//2058 2784//2080 -f 2765//2063 2764//2077 2779//2081 -f 2760//2067 2759//2064 2775//2070 -f 2771//2065 2770//2062 2785//2082 -f 2766//2066 2765//2063 2780//2083 -f 2780//2083 2779//2081 2794//2084 -f 2775//2070 2774//2079 2790//2085 -f 2786//2086 2785//2082 2800//2087 -f 2781//2071 2780//2083 2795//2088 -f 2776//2072 2775//2070 2791//2089 -f 2782//2073 2781//2071 2796//2090 -f 2777//2074 2776//2072 2792//2091 -f 2783//2076 2782//2073 2797//2092 -f 2778//2078 2777//2074 2793//2093 -f 2773//2075 2772//2094 2788//2095 -f 2784//2080 2783//2076 2798//2096 -f 2779//2081 2778//2078 2793//2093 -f 2774//2079 2773//2075 2789//2097 -f 2785//2082 2784//2080 2799//2098 -f 2799//2098 2798//2096 2813//2099 -f 2794//2084 2793//2093 2809//2100 -f 2789//2097 2788//2095 2804//2101 -f 2800//2087 2799//2098 2814//2102 -f 2795//2088 2794//2084 2809//2100 -f 2790//2085 2789//2097 2805//2103 -f 2801//2104 2800//2087 2815//2105 -f 2796//2090 2795//2088 2810//2106 -f 2791//2089 2790//2085 2806//2107 -f 2797//2092 2796//2090 2811//2108 -f 2792//2091 2791//2089 2807//2109 -f 2798//2096 2797//2092 2812//2110 -f 2793//2093 2792//2091 2808//2111 -f 2788//2095 2787//2112 2803//2113 -f 2813//2099 2812//2110 2827//2114 -f 2808//2111 2807//2109 2823//2115 -f 2803//2113 2802//2116 2818//2117 -f 2814//2102 2813//2099 2828//2118 -f 2809//2100 2808//2111 2824//2119 -f 2804//2101 2803//2113 2819//2120 -f 2815//2105 2814//2102 2829//2121 -f 2810//2106 2809//2100 2824//2119 -f 2805//2103 2804//2101 2820//2122 -f 2816//2123 2815//2105 2830//2124 -f 2811//2108 2810//2106 2825//2125 -f 2806//2107 2805//2103 2821//2126 -f 2812//2110 2811//2108 2826//2127 -f 2807//2109 2806//2107 2822//2128 -f 2827//2114 2826//2127 2841//2129 -f 2822//2128 2821//2126 2837//2130 -f 2828//2118 2827//2114 2842//2131 -f 2823//2115 2822//2128 2838//2132 -f 2818//2117 2817//2133 2833//2134 -f 2829//2121 2828//2118 2843//2135 -f 2824//2119 2823//2115 2839//2136 -f 2819//2120 2818//2117 2834//2137 -f 2830//2124 2829//2121 2844//2138 -f 2825//2125 2824//2119 2839//2136 -f 2820//2122 2819//2120 2835//2139 -f 2831//2140 2830//2124 2845//2141 -f 2826//2127 2825//2125 2840//2142 -f 2821//2126 2820//2122 2836//2143 -f 2835//2139 2834//2137 2850//2144 -f 2846//2145 2845//2141 2860//2146 -f 2841//2129 2840//2142 2855//2147 -f 2836//2143 2835//2139 2851//2148 -f 2842//2131 2841//2129 2856//2149 -f 2837//2130 2836//2143 2852//2150 -f 2843//2135 2842//2131 2857//2151 -f 2838//2132 2837//2130 2853//2152 -f 2833//2134 2832//2153 2848//2154 -f 2844//2138 2843//2135 2858//2155 -f 2839//2136 2838//2132 2853//2152 -f 2834//2137 2833//2134 2849//2156 -f 2845//2141 2844//2138 2859//2157 -f 2840//2142 2839//2136 2854//2158 -f 2854//2158 2853//2152 2869//2159 -f 2849//2156 2848//2154 2865//2160 -f 2860//2146 2859//2157 2875//2161 -f 2855//2147 2854//2158 2870//2162 -f 2850//2144 2849//2156 2866//2163 -f 2861//2164 2860//2146 2876//2165 -f 2856//2149 2855//2147 2871//2166 -f 2851//2148 2850//2144 2867//2167 -f 2857//2151 2856//2149 2872//2168 -f 2852//2150 2851//2148 2868//2169 -f 2858//2155 2857//2151 2873//2170 -f 2853//2152 2852//2150 2869//2159 -f 2848//2154 2847//2171 2864//2172 -f 2859//2157 2858//2155 2874//2173 -f 2874//2173 2873//2170 2888//2174 -f 2869//2159 2868//2169 2884//2175 -f 2864//2172 2863//2176 2879//2177 -f 2875//2161 2874//2173 2889//2178 -f 2870//2162 2869//2159 2884//2175 -f 2865//2160 2864//2172 2880//2179 -f 2876//2165 2875//2161 2890//2180 -f 2871//2166 2870//2162 2885//2181 -f 2866//2163 2865//2160 2881//2182 -f 2877//2183 2876//2165 2891//2184 -f 2872//2168 2871//2166 2886//2185 -f 2867//2167 2866//2163 2882//2186 -f 2873//2170 2872//2168 2887//2187 -f 2868//2169 2867//2167 2883//2188 -f 2741//2189 2425//1730 2440//1731 -f 2411//1715 2862//2190 2426//1716 -f 2741//2189 2440//1731 2455//1749 -f 2426//1716 2862//2190 2441//1741 -f 2441//1741 2862//2190 2456//1759 -f 2741//2189 2455//1749 2470//1767 -f 2741//2189 2470//1767 2485//1770 -f 2456//1759 2862//2190 2471//1777 -f 2741//2189 2485//1770 2500//1790 -f 2471//1777 2862//2190 2486//1797 -f 2741//2189 2500//1790 2515//1809 -f 2486//1797 2862//2190 2501//1801 -f 2501//1801 2862//2190 2516//1819 -f 2741//2189 2515//1809 2530//1827 -f 2741//2189 2530//1827 2545//1847 -f 2516//1819 2862//2190 2531//1854 -f 2741//2189 2545//1847 2560//1866 -f 2531//1854 2862//2190 2546//1859 -f 2741//2189 2560//1866 2575//1884 -f 2546//1859 2862//2190 2561//1877 -f 2561//1877 2862//2190 2576//1895 -f 2741//2189 2575//1884 2590//1902 -f 2741//2189 2590//1902 2605//1907 -f 2576//1895 2862//2190 2591//1914 -f 2741//2189 2605//1907 2620//1927 -f 2591//1914 2862//2190 2606//1919 -f 2741//2189 2620//1927 2635//1945 -f 2606//1919 2862//2190 2621//1937 -f 2621//1937 2862//2190 2636//1955 -f 2741//2189 2635//1945 2650//1963 -f 2741//2189 2650//1963 2665//1964 -f 2636//1955 2862//2190 2651//1956 -f 2741//2189 2665//1964 2680//1968 -f 2651//1956 2862//2190 2666//1976 -f 2741//2189 2680//1968 2695//1987 -f 2666//1976 2862//2190 2681//1994 -f 2681//1994 2862//2190 2696//1997 -f 2741//2189 2695//1987 2710//2005 -f 2741//2189 2710//2005 2725//2023 -f 2696//1997 2862//2190 2711//2015 -f 2741//2189 2725//2023 2740//2028 -f 2711//2015 2862//2190 2726//2035 -f 2741//2189 2740//2028 2756//2047 -f 2726//2035 2862//2190 2742//2054 -f 2742//2054 2862//2190 2757//2057 -f 2741//2189 2756//2047 2771//2065 -f 2741//2189 2771//2065 2786//2086 -f 2757//2057 2862//2190 2772//2094 -f 2741//2189 2786//2086 2801//2104 -f 2772//2094 2862//2190 2787//2112 -f 2741//2189 2801//2104 2816//2123 -f 2787//2112 2862//2190 2802//2116 -f 2741//2189 2816//2123 2831//2140 -f 2802//2116 2862//2190 2817//2133 -f 2741//2189 2831//2140 2846//2145 -f 2817//2133 2862//2190 2832//2153 -f 2741//2189 2846//2145 2861//2164 -f 2832//2153 2862//2190 2847//2171 -f 2741//2189 2861//2164 2877//2183 -f 2847//2171 2862//2190 2863//2176 -f 2741//2189 2877//2183 2892//2191 -f 2863//2176 2862//2190 2878//2192 -f 2741//2189 2892//2191 2425//1730 -f 2888//2174 2887//2187 2420//1732 -f 2883//2188 2882//2186 2415//1734 -f 2878//2192 2862//2190 2411//1715 -f 2889//2178 2888//2174 2421//1736 -f 2884//2175 2883//2188 2416//1712 -f 2879//2177 2878//2192 2411//1715 -f 2890//2180 2889//2178 2422//1718 -f 2885//2181 2884//2175 2417//1711 -f 2880//2179 2879//2177 2412//1714 -f 2891//2184 2890//2180 2423//1717 -f 2886//2185 2885//2181 2418//1720 -f 2881//2182 2880//2179 2413//1722 -f 2892//2191 2891//2184 2425//1730 -f 2887//2187 2886//2185 2419//1726 -f 2882//2186 2881//2182 2414//1728 -f 2899//1711 2898//2193 2913//1713 -f 2894//1714 2893//1715 2908//2194 -f 2905//2195 2904//1718 2920//1719 -f 2900//1720 2899//1711 2914//1721 -f 2895//1722 2894//1714 2909//2196 -f 2906//1724 2905//2195 2921//1725 -f 2901//1726 2900//1720 2915//1727 -f 2896//1728 2895//1722 2910//2197 -f 2907//2198 2906//1724 2922//2199 -f 2902//1732 2901//1726 2917//1733 -f 2897//1734 2896//1728 2911//1735 -f 2903//2200 2902//1732 2918//1737 -f 2898//2193 2897//1734 2912//1738 -f 2904//1718 2903//2200 2919//1739 -f 2914//1721 2913//1713 2928//1740 -f 2909//2196 2908//2194 2923//2201 -f 2920//1719 2919//1739 2935//2202 -f 2915//1727 2914//1721 2929//1743 -f 2910//2197 2909//2196 2924//1744 -f 2921//1725 2920//1719 2936//2203 -f 2916//1746 2915//1727 2931//1747 -f 2911//1735 2910//2197 2925//1748 -f 2922//2199 2921//1725 2937//1749 -f 2917//1733 2916//1746 2932//1750 -f 2912//1738 2911//1735 2926//1751 -f 2918//1737 2917//1733 2933//1752 -f 2913//1713 2912//1738 2927//2204 -f 2919//1739 2918//1737 2934//2205 -f 2933//1752 2932//1750 2948//2206 -f 2928//1740 2927//2204 2942//1756 -f 2934//2205 2933//1752 2949//2207 -f 2929//1743 2928//1740 2943//1758 -f 2924//1744 2923//2201 2938//2208 -f 2935//2202 2934//2205 2950//1760 -f 2930//2209 2929//1743 2944//1762 -f 2925//1748 2924//1744 2939//2210 -f 2936//2203 2935//2202 2951//1764 -f 2931//1747 2930//2209 2946//1765 -f 2926//1751 2925//1748 2940//1766 -f 2937//1749 2936//2203 2952//2211 -f 2932//1750 2931//1747 2947//2212 -f 2927//2204 2926//1751 2941//2213 -f 2952//2211 2951//1764 2967//1770 -f 2947//2212 2946//1765 2962//2214 -f 2942//1756 2941//2213 2956//1772 -f 2948//2206 2947//2212 2963//2215 -f 2943//1758 2942//1756 2957//1774 -f 2949//2207 2948//2206 2964//1775 -f 2944//1762 2943//1758 2958//1776 -f 2939//2210 2938//2208 2953//2216 -f 2950//1760 2949//2207 2965//1778 -f 2945//1779 2944//1762 2959//1780 -f 2940//1766 2939//2210 2954//1781 -f 2951//1764 2950//1760 2966//1782 -f 2946//1765 2945//1779 2961//2217 -f 2941//2213 2940//1766 2955//2218 -f 2955//2218 2954//1781 2969//1785 -f 2966//1782 2965//1778 2981//1786 -f 2961//2217 2960//1787 2976//1788 -f 2956//1772 2955//2218 2970//2219 -f 2967//1770 2966//1782 2982//2220 -f 2962//2214 2961//2217 2977//1791 -f 2957//1774 2956//1772 2971//1792 -f 2963//2215 2962//2214 2978//1793 -f 2958//1776 2957//1774 2972//2221 -f 2964//1775 2963//2215 2979//1795 -f 2959//1780 2958//1776 2973//1796 -f 2954//1781 2953//2216 2968//1797 -f 2965//1778 2964//1775 2980//2222 -f 2960//1787 2959//1780 2974//1799 -f 2974//1799 2973//1796 2988//1800 -f 2969//1785 2968//1797 2983//1801 -f 2980//2222 2979//1795 2995//1802 -f 2975//1803 2974//1799 2989//1804 -f 2970//2219 2969//1785 2984//1805 -f 2981//1786 2980//2222 2996//1806 -f 2976//1788 2975//1803 2991//1807 -f 2971//1792 2970//2219 2985//1808 -f 2982//2220 2981//1786 2997//2223 -f 2977//1791 2976//1788 2992//1810 -f 2972//2221 2971//1792 2986//1811 -f 2978//1793 2977//1791 2993//1812 -f 2973//1796 2972//2221 2987//1813 -f 2979//1795 2978//1793 2994//1814 -f 2993//1812 2992//1810 3008//2224 -f 2988//1800 2987//1813 3002//1816 -f 2994//1814 2993//1812 3009//1817 -f 2989//1804 2988//1800 3003//1818 -f 2984//1805 2983//1801 2998//1819 -f 2995//1802 2994//1814 3010//1820 -f 2990//1821 2989//1804 3004//1822 -f 2985//1808 2984//1805 2999//1823 -f 2996//1806 2995//1802 3011//1824 -f 2991//1807 2990//1821 3006//1825 -f 2986//1811 2985//1808 3000//1826 -f 2997//2223 2996//1806 3012//1827 -f 2992//1810 2991//1807 3007//1828 -f 2987//1813 2986//1811 3001//1829 -f 3012//1827 3011//1824 3026//2225 -f 3007//1828 3006//1825 3022//1831 -f 3002//1816 3001//1829 3017//1832 -f 3008//2224 3007//1828 3023//1833 -f 3003//1818 3002//1816 3018//1834 -f 3009//1817 3008//2224 3024//1835 -f 3004//1822 3003//1818 3019//1836 -f 2999//1823 2998//1819 3014//1837 -f 3010//1820 3009//1817 3024//1835 -f 3005//2226 3004//1822 3020//1839 -f 3000//1826 2999//1823 3015//1840 -f 3011//1824 3010//1820 3025//1841 -f 3006//1825 3005//2226 3021//1842 -f 3001//1829 3000//1826 3016//1843 -f 3026//2225 3025//1841 3040//1844 -f 3021//1842 3020//1839 3036//1845 -f 3016//1843 3015//1840 3031//1846 -f 3027//1847 3026//2225 3041//1848 -f 3022//1831 3021//1842 3036//1845 -f 3017//1832 3016//1843 3032//2227 -f 3023//1833 3022//1831 3037//2228 -f 3018//1834 3017//1832 3033//1851 -f 3024//1835 3023//1833 3038//1852 -f 3019//1836 3018//1834 3034//1853 -f 3014//1837 3013//1854 3029//1855 -f 3025//1841 3024//1835 3039//1856 -f 3020//1839 3019//1836 3035//2229 -f 3015//1840 3014//1837 3030//1858 -f 3029//1855 3028//1859 3044//1860 -f 3040//1844 3039//1856 3054//2230 -f 3035//2229 3034//1853 3050//1862 -f 3030//1858 3029//1855 3045//1863 -f 3041//1848 3040//1844 3055//2231 -f 3036//1845 3035//2229 3050//1862 -f 3031//1846 3030//1858 3046//1865 -f 3042//1866 3041//1848 3056//1867 -f 3037//2228 3036//1845 3051//2232 -f 3032//2227 3031//1846 3047//1869 -f 3038//1852 3037//2228 3052//1870 -f 3033//1851 3032//2227 3048//2233 -f 3039//1856 3038//1852 3053//1872 -f 3034//1853 3033//1851 3049//2234 -f 3048//2233 3047//1869 3063//1874 -f 3054//2230 3053//1872 3068//1875 -f 3049//2234 3048//2233 3064//1876 -f 3044//1860 3043//1877 3059//1878 -f 3055//2231 3054//2230 3069//1879 -f 3050//1862 3049//2234 3065//2235 -f 3045//1863 3044//1860 3060//1881 -f 3056//1867 3055//2231 3070//2236 -f 3051//2232 3050//1862 3065//2235 -f 3046//1865 3045//1863 3061//1883 -f 3057//1884 3056//1867 3071//1885 -f 3052//1870 3051//2232 3066//1886 -f 3047//1869 3046//1865 3062//1887 -f 3053//1872 3052//1870 3067//2237 -f 3067//2237 3066//1886 3081//2238 -f 3062//1887 3061//1883 3077//2239 -f 3068//1875 3067//2237 3082//1891 -f 3063//1874 3062//1887 3078//1892 -f 3069//1879 3068//1875 3083//1893 -f 3064//1876 3063//1874 3079//1894 -f 3059//1878 3058//1895 3074//1896 -f 3070//2236 3069//1879 3084//1897 -f 3065//2235 3064//1876 3080//1898 -f 3060//1881 3059//1878 3075//1899 -f 3071//1885 3070//2236 3085//1900 -f 3066//1886 3065//2235 3080//1898 -f 3061//1883 3060//1881 3076//1901 -f 3072//1902 3071//1885 3086//1903 -f 3086//1903 3085//1900 3100//1904 -f 3081//2238 3080//1898 3096//1905 -f 3076//1901 3075//1899 3091//1906 -f 3087//1907 3086//1903 3101//1908 -f 3082//1891 3081//2238 3096//1905 -f 3077//2239 3076//1901 3092//1909 -f 3083//1893 3082//1891 3097//1910 -f 3078//1892 3077//2239 3093//1911 -f 3084//1897 3083//1893 3098//1912 -f 3079//1894 3078//1892 3094//1913 -f 3074//1896 3073//2240 3089//1915 -f 3085//1900 3084//1897 3099//1916 -f 3080//1898 3079//1894 3095//1917 -f 3075//1899 3074//1896 3090//2241 -f 3089//1915 3088//2242 3104//2243 -f 3100//1904 3099//1916 3114//1921 -f 3095//1917 3094//1913 3110//1922 -f 3090//2241 3089//1915 3105//1923 -f 3101//1908 3100//1904 3115//1924 -f 3096//1905 3095//1917 3111//1925 -f 3091//1906 3090//2241 3106//2244 -f 3102//1927 3101//1908 3116//1928 -f 3097//1910 3096//1905 3111//1925 -f 3092//1909 3091//1906 3107//1929 -f 3098//1912 3097//1910 3112//2245 -f 3093//1911 3092//1909 3108//1931 -f 3099//1916 3098//1912 3113//1932 -f 3094//1913 3093//1911 3109//1933 -f 3108//1931 3107//1929 3123//1934 -f 3114//1921 3113//1932 3128//1935 -f 3109//1933 3108//1931 3124//1936 -f 3104//2243 3103//2246 3119//1938 -f 3115//1924 3114//1921 3129//1939 -f 3110//1922 3109//1933 3125//1940 -f 3105//1923 3104//2243 3120//1941 -f 3116//1928 3115//1924 3130//1942 -f 3111//1925 3110//1922 3126//1943 -f 3106//2244 3105//1923 3121//1944 -f 3117//2247 3116//1928 3131//1946 -f 3112//2245 3111//1925 3126//1943 -f 3107//1929 3106//2244 3122//2248 -f 3113//1932 3112//2245 3127//1948 -f 3127//1948 3126//1943 3142//1949 -f 3122//2248 3121//1944 3137//1950 -f 3128//1935 3127//1948 3143//1951 -f 3123//1934 3122//2248 3138//2249 -f 3129//1939 3128//1935 3144//1953 -f 3124//1936 3123//1934 3139//1954 -f 3119//1938 3118//2250 3133//2251 -f 3130//1942 3129//1939 3145//1957 -f 3125//1940 3124//1936 3140//1958 -f 3120//1941 3119//1938 3135//1959 -f 3131//1946 3130//1942 3146//1960 -f 3126//1943 3125//1940 3141//1961 -f 3121//1944 3120//1941 3136//1962 -f 3132//2252 3131//1946 3147//1964 -f 3146//1960 3145//1957 3161//2253 -f 3141//1961 3140//1958 3156//1966 -f 3136//1962 3135//1959 3150//1967 -f 3147//1964 3146//1960 3162//1968 -f 3142//1949 3141//1961 3157//1969 -f 3137//1950 3136//1962 3151//1970 -f 3143//1951 3142//1949 3158//1971 -f 3138//2249 3137//1950 3152//2254 -f 3144//1953 3143//1951 3159//1973 -f 3139//1954 3138//2249 3153//1974 -f 3134//1975 3133//2251 3148//1976 -f 3145//1957 3144//1953 3160//1977 -f 3140//1958 3139//1954 3155//1978 -f 3135//1959 3134//1975 3149//1979 -f 3160//1977 3159//1973 3175//1980 -f 3155//1978 3154//1981 3169//2255 -f 3150//1967 3149//1979 3164//1983 -f 3161//2253 3160//1977 3176//1984 -f 3156//1966 3155//1978 3171//2256 -f 3151//1970 3150//1967 3165//1986 -f 3162//1968 3161//2253 3177//2257 -f 3157//1969 3156//1966 3172//1988 -f 3152//2254 3151//1970 3166//2258 -f 3158//1971 3157//1969 3173//1990 -f 3153//1974 3152//2254 3167//1991 -f 3159//1973 3158//1971 3174//1992 -f 3154//1981 3153//1974 3168//1993 -f 3149//1979 3148//1976 3163//1994 -f 3174//1992 3173//1990 3189//2259 -f 3169//2255 3168//1993 3183//2260 -f 3164//1983 3163//1994 3178//1997 -f 3175//1980 3174//1992 3190//1998 -f 3170//2261 3169//2255 3184//2262 -f 3165//1986 3164//1983 3179//2001 -f 3176//1984 3175//1980 3191//2263 -f 3171//2256 3170//2261 3186//2003 -f 3166//2258 3165//1986 3180//2264 -f 3177//2257 3176//1984 3192//2005 -f 3172//1988 3171//2256 3187//2006 -f 3167//1991 3166//2258 3181//2007 -f 3173//1990 3172//1988 3188//2008 -f 3168//1993 3167//1991 3182//2265 -f 3182//2265 3181//2007 3196//2010 -f 3188//2008 3187//2006 3203//2266 -f 3183//2260 3182//2265 3197//2267 -f 3189//2259 3188//2008 3204//2013 -f 3184//2262 3183//2260 3198//2014 -f 3179//2001 3178//1997 3193//2268 -f 3190//1998 3189//2259 3205//2016 -f 3185//2017 3184//2262 3199//2269 -f 3180//2264 3179//2001 3194//2019 -f 3191//2263 3190//1998 3206//2020 -f 3186//2003 3185//2017 3201//2021 -f 3181//2007 3180//2264 3195//2270 -f 3192//2005 3191//2263 3207//2023 -f 3187//2006 3186//2003 3202//2024 -f 3201//2021 3200//2025 3216//2026 -f 3196//2010 3195//2270 3210//2027 -f 3207//2023 3206//2020 3222//2271 -f 3202//2024 3201//2021 3217//2029 -f 3197//2267 3196//2010 3211//2030 -f 3203//2266 3202//2024 3218//2031 -f 3198//2014 3197//2267 3212//2032 -f 3204//2013 3203//2266 3219//2272 -f 3199//2269 3198//2014 3213//2034 -f 3194//2019 3193//2268 3208//2273 -f 3205//2016 3204//2013 3220//2274 -f 3200//2025 3199//2269 3214//2037 -f 3195//2270 3194//2019 3209//2038 -f 3206//2020 3205//2016 3221//2275 -f 3220//2274 3219//2272 3236//2276 -f 3215//2041 3214//2037 3230//2042 -f 3210//2027 3209//2038 3225//2043 -f 3221//2275 3220//2274 3237//2277 -f 3216//2026 3215//2041 3232//2045 -f 3211//2030 3210//2027 3226//2046 -f 3222//2271 3221//2275 3238//2278 -f 3217//2029 3216//2026 3233//2048 -f 3212//2032 3211//2030 3227//2049 -f 3218//2031 3217//2029 3234//2050 -f 3213//2034 3212//2032 3228//2051 -f 3219//2272 3218//2031 3235//2052 -f 3214//2037 3213//2034 3229//2053 -f 3209//2038 3208//2273 3224//2054 -f 3235//2052 3234//2050 3250//2055 -f 3230//2042 3229//2053 3244//2056 -f 3225//2043 3224//2054 3239//2279 -f 3236//2276 3235//2052 3251//2058 -f 3231//2059 3230//2042 3245//2060 -f 3226//2046 3225//2043 3240//2061 -f 3237//2277 3236//2276 3252//2062 -f 3232//2045 3231//2059 3247//2063 -f 3227//2049 3226//2046 3241//2064 -f 3238//2278 3237//2277 3253//2280 -f 3233//2048 3232//2045 3248//2066 -f 3228//2051 3227//2049 3242//2067 -f 3234//2050 3233//2048 3249//2068 -f 3229//2053 3228//2051 3243//2281 -f 3243//2281 3242//2067 3257//2070 -f 3249//2068 3248//2066 3263//2071 -f 3244//2056 3243//2281 3258//2072 -f 3250//2055 3249//2068 3264//2073 -f 3245//2060 3244//2056 3259//2074 -f 3240//2061 3239//2279 3255//2282 -f 3251//2058 3250//2055 3265//2076 -f 3246//2077 3245//2060 3260//2078 -f 3241//2064 3240//2061 3256//2079 -f 3252//2062 3251//2058 3266//2080 -f 3247//2063 3246//2077 3261//2081 -f 3242//2067 3241//2064 3257//2070 -f 3253//2280 3252//2062 3267//2082 -f 3248//2066 3247//2063 3262//2083 -f 3262//2083 3261//2081 3276//2283 -f 3257//2070 3256//2079 3272//2085 -f 3268//2284 3267//2082 3282//2087 -f 3263//2071 3262//2083 3277//2088 -f 3258//2072 3257//2070 3273//2089 -f 3264//2073 3263//2071 3278//2090 -f 3259//2074 3258//2072 3274//2091 -f 3265//2076 3264//2073 3279//2092 -f 3260//2078 3259//2074 3275//2093 -f 3255//2282 3254//2094 3270//2095 -f 3266//2080 3265//2076 3280//2096 -f 3261//2081 3260//2078 3275//2093 -f 3256//2079 3255//2282 3271//2097 -f 3267//2082 3266//2080 3281//2098 -f 3281//2098 3280//2096 3295//2099 -f 3276//2283 3275//2093 3291//2100 -f 3271//2097 3270//2095 3286//2285 -f 3282//2087 3281//2098 3296//2102 -f 3277//2088 3276//2283 3291//2100 -f 3272//2085 3271//2097 3287//2103 -f 3283//2104 3282//2087 3297//2105 -f 3278//2090 3277//2088 3292//2286 -f 3273//2089 3272//2085 3288//2107 -f 3279//2092 3278//2090 3293//2108 -f 3274//2091 3273//2089 3289//2109 -f 3280//2096 3279//2092 3294//2110 -f 3275//2093 3274//2091 3290//2287 -f 3270//2095 3269//2112 3285//2113 -f 3295//2099 3294//2110 3309//2288 -f 3290//2287 3289//2109 3305//2115 -f 3285//2113 3284//2116 3300//2117 -f 3296//2102 3295//2099 3310//2118 -f 3291//2100 3290//2287 3306//2119 -f 3286//2285 3285//2113 3301//2120 -f 3297//2105 3296//2102 3311//2121 -f 3292//2286 3291//2100 3306//2119 -f 3287//2103 3286//2285 3302//2122 -f 3298//2123 3297//2105 3312//2124 -f 3293//2108 3292//2286 3307//2125 -f 3288//2107 3287//2103 3303//2126 -f 3294//2110 3293//2108 3308//2289 -f 3289//2109 3288//2107 3304//2290 -f 3309//2288 3308//2289 3323//2129 -f 3304//2290 3303//2126 3319//2130 -f 3310//2118 3309//2288 3324//2131 -f 3305//2115 3304//2290 3320//2291 -f 3300//2117 3299//2133 3315//2134 -f 3311//2121 3310//2118 3325//2292 -f 3306//2119 3305//2115 3321//2136 -f 3301//2120 3300//2117 3316//2137 -f 3312//2124 3311//2121 3326//2138 -f 3307//2125 3306//2119 3321//2136 -f 3302//2122 3301//2120 3317//2293 -f 3313//2140 3312//2124 3327//2141 -f 3308//2289 3307//2125 3322//2142 -f 3303//2126 3302//2122 3318//2143 -f 3317//2293 3316//2137 3332//2144 -f 3328//2145 3327//2141 3342//2146 -f 3323//2129 3322//2142 3337//2147 -f 3318//2143 3317//2293 3333//2148 -f 3324//2131 3323//2129 3338//2149 -f 3319//2130 3318//2143 3334//2150 -f 3325//2292 3324//2131 3339//2151 -f 3320//2291 3319//2130 3335//2152 -f 3315//2134 3314//2153 3330//2154 -f 3326//2138 3325//2292 3340//2155 -f 3321//2136 3320//2291 3335//2152 -f 3316//2137 3315//2134 3331//2156 -f 3327//2141 3326//2138 3341//2294 -f 3322//2142 3321//2136 3336//2158 -f 3336//2158 3335//2152 3351//2159 -f 3331//2156 3330//2154 3347//2160 -f 3342//2146 3341//2294 3357//2161 -f 3337//2147 3336//2158 3352//2162 -f 3332//2144 3331//2156 3348//2163 -f 3343//2295 3342//2146 3358//2296 -f 3338//2149 3337//2147 3353//2166 -f 3333//2148 3332//2144 3349//2167 -f 3339//2151 3338//2149 3354//2168 -f 3334//2150 3333//2148 3350//2297 -f 3340//2155 3339//2151 3355//2170 -f 3335//2152 3334//2150 3351//2159 -f 3330//2154 3329//2171 3346//2172 -f 3341//2294 3340//2155 3356//2298 -f 3356//2298 3355//2170 3370//2174 -f 3351//2159 3350//2297 3366//2299 -f 3346//2172 3345//2176 3361//2300 -f 3357//2161 3356//2298 3371//2178 -f 3352//2162 3351//2159 3366//2299 -f 3347//2160 3346//2172 3362//2179 -f 3358//2296 3357//2161 3372//2180 -f 3353//2166 3352//2162 3367//2181 -f 3348//2163 3347//2160 3363//2182 -f 3359//2183 3358//2296 3373//2301 -f 3354//2168 3353//2166 3368//2185 -f 3349//2167 3348//2163 3364//2186 -f 3355//2170 3354//2168 3369//2187 -f 3350//2297 3349//2167 3365//2188 -f 3223//2189 2907//2198 2922//2199 -f 2893//1715 3344//2190 2908//2194 -f 3223//2189 2922//2199 2937//1749 -f 2908//2194 3344//2190 2923//2201 -f 2923//2201 3344//2190 2938//2208 -f 3223//2189 2937//1749 2952//2211 -f 3223//2189 2952//2211 2967//1770 -f 2938//2208 3344//2190 2953//2216 -f 3223//2189 2967//1770 2982//2220 -f 2953//2216 3344//2190 2968//1797 -f 3223//2189 2982//2220 2997//2223 -f 2968//1797 3344//2190 2983//1801 -f 2983//1801 3344//2190 2998//1819 -f 3223//2189 2997//2223 3012//1827 -f 3223//2189 3012//1827 3027//1847 -f 2998//1819 3344//2190 3013//1854 -f 3223//2189 3027//1847 3042//1866 -f 3013//1854 3344//2190 3028//1859 -f 3223//2189 3042//1866 3057//1884 -f 3028//1859 3344//2190 3043//1877 -f 3043//1877 3344//2190 3058//1895 -f 3223//2189 3057//1884 3072//1902 -f 3223//2189 3072//1902 3087//1907 -f 3058//1895 3344//2190 3073//2240 -f 3223//2189 3087//1907 3102//1927 -f 3073//2240 3344//2190 3088//2242 -f 3223//2189 3102//1927 3117//2247 -f 3088//2242 3344//2190 3103//2246 -f 3103//2246 3344//2190 3118//2250 -f 3223//2189 3117//2247 3132//2252 -f 3223//2189 3132//2252 3147//1964 -f 3118//2250 3344//2190 3133//2251 -f 3223//2189 3147//1964 3162//1968 -f 3133//2251 3344//2190 3148//1976 -f 3223//2189 3162//1968 3177//2257 -f 3148//1976 3344//2190 3163//1994 -f 3163//1994 3344//2190 3178//1997 -f 3223//2189 3177//2257 3192//2005 -f 3223//2189 3192//2005 3207//2023 -f 3178//1997 3344//2190 3193//2268 -f 3223//2189 3207//2023 3222//2271 -f 3193//2268 3344//2190 3208//2273 -f 3223//2189 3222//2271 3238//2278 -f 3208//2273 3344//2190 3224//2054 -f 3224//2054 3344//2190 3239//2279 -f 3223//2189 3238//2278 3253//2280 -f 3223//2189 3253//2280 3268//2284 -f 3239//2279 3344//2190 3254//2094 -f 3223//2189 3268//2284 3283//2104 -f 3254//2094 3344//2190 3269//2112 -f 3223//2189 3283//2104 3298//2123 -f 3269//2112 3344//2190 3284//2116 -f 3223//2189 3298//2123 3313//2140 -f 3284//2116 3344//2190 3299//2133 -f 3223//2189 3313//2140 3328//2145 -f 3299//2133 3344//2190 3314//2153 -f 3223//2189 3328//2145 3343//2295 -f 3314//2153 3344//2190 3329//2171 -f 3223//2189 3343//2295 3359//2183 -f 3329//2171 3344//2190 3345//2176 -f 3223//2189 3359//2183 3374//2191 -f 3345//2176 3344//2190 3360//2302 -f 3223//2189 3374//2191 2907//2198 -f 3370//2174 3369//2187 2902//1732 -f 3365//2188 3364//2186 2897//1734 -f 3360//2302 3344//2190 2893//1715 -f 3371//2178 3370//2174 2903//2200 -f 3366//2299 3365//2188 2898//2193 -f 3361//2300 3360//2302 2893//1715 -f 3372//2180 3371//2178 2904//1718 -f 3367//2181 3366//2299 2899//1711 -f 3362//2179 3361//2300 2894//1714 -f 3373//2301 3372//2180 2905//2195 -f 3368//2185 3367//2181 2900//1720 -f 3363//2182 3362//2179 2895//1722 -f 3374//2191 3373//2301 2907//2198 -f 3369//2187 3368//2185 2901//1726 -f 3364//2186 3363//2182 2896//1728 -f 2432//1721 2417//1711 2431//1713 -f 2427//1723 2412//1714 2426//1716 -f 2422//1718 2437//1739 2438//1719 -f 2433//1727 2418//1720 2432//1721 -f 2428//1729 2413//1722 2427//1723 -f 2423//1717 2438//1719 2439//1725 -f 2434//1746 2419//1726 2433//1727 -f 2429//1735 2414//1728 2428//1729 -f 2424//1724 2439//1725 2440//1731 -f 2419//1726 2434//1746 2435//1733 -f 2430//1738 2415//1734 2429//1735 -f 2420//1732 2435//1733 2436//1737 -f 2431//1713 2416//1712 2430//1738 -f 2421//1736 2436//1737 2437//1739 -f 2447//1743 2432//1721 2446//1740 -f 2442//1744 2427//1723 2441//1741 -f 2437//1739 2452//1754 2453//1742 -f 2448//1761 2433//1727 2447//1743 -f 2443//1748 2428//1729 2442//1744 -f 2438//1719 2453//1742 2454//1745 -f 2433//1727 2448//1761 2449//1747 -f 2444//1751 2429//1735 2443//1748 -f 2439//1725 2454//1745 2455//1749 -f 2434//1746 2449//1747 2450//1750 -f 2445//1753 2430//1738 2444//1751 -f 2435//1733 2450//1750 2451//1752 -f 2446//1740 2431//1713 2445//1753 -f 2436//1737 2451//1752 2452//1754 -f 2450//1750 2465//1768 2466//1755 -f 2461//1758 2446//1740 2460//1756 -f 2451//1752 2466//1755 2467//1757 -f 2462//1762 2447//1743 2461//1758 -f 2457//1763 2442//1744 2456//1759 -f 2452//1754 2467//1757 2468//1760 -f 2463//1779 2448//1761 2462//1762 -f 2458//1766 2443//1748 2457//1763 -f 2453//1742 2468//1760 2469//1764 -f 2448//1761 2463//1779 2464//1765 -f 2459//1769 2444//1751 2458//1766 -f 2454//1745 2469//1764 2470//1767 -f 2449//1747 2464//1765 2465//1768 -f 2460//1756 2445//1753 2459//1769 -f 2469//1764 2484//1782 2485//1770 -f 2464//1765 2479//1783 2480//1771 -f 2475//1774 2460//1756 2474//1772 -f 2465//1768 2480//1771 2481//1773 -f 2476//1776 2461//1758 2475//1774 -f 2466//1755 2481//1773 2482//1775 -f 2477//1780 2462//1762 2476//1776 -f 2472//1781 2457//1763 2471//1777 -f 2467//1757 2482//1775 2483//1778 -f 2478//1787 2463//1779 2477//1780 -f 2473//1784 2458//1766 2472//1781 -f 2468//1760 2483//1778 2484//1782 -f 2463//1779 2478//1787 2479//1783 -f 2474//1772 2459//1769 2473//1784 -f 2488//1789 2473//1784 2487//1785 -f 2483//1778 2498//1798 2499//1786 -f 2478//1787 2493//1803 2494//1788 -f 2489//1792 2474//1772 2488//1789 -f 2484//1782 2499//1786 2500//1790 -f 2479//1783 2494//1788 2495//1791 -f 2490//1794 2475//1774 2489//1792 -f 2480//1771 2495//1791 2496//1793 -f 2491//1796 2476//1776 2490//1794 -f 2481//1773 2496//1793 2497//1795 -f 2492//1799 2477//1780 2491//1796 -f 2487//1785 2472//1781 2486//1797 -f 2482//1775 2497//1795 2498//1798 -f 2493//1803 2478//1787 2492//1799 -f 2507//1804 2492//1799 2506//1800 -f 2502//1805 2487//1785 2501//1801 -f 2497//1795 2512//1814 2513//1802 -f 2508//1821 2493//1803 2507//1804 -f 2503//1808 2488//1789 2502//1805 -f 2498//1798 2513//1802 2514//1806 -f 2493//1803 2508//1821 2509//1807 -f 2504//1811 2489//1792 2503//1808 -f 2499//1786 2514//1806 2515//1809 -f 2494//1788 2509//1807 2510//1810 -f 2505//1813 2490//1794 2504//1811 -f 2495//1791 2510//1810 2511//1812 -f 2506//1800 2491//1796 2505//1813 -f 2496//1793 2511//1812 2512//1814 -f 2510//1810 2525//1828 2526//1815 -f 2521//1818 2506//1800 2520//1816 -f 2511//1812 2526//1815 2527//1817 -f 2522//1822 2507//1804 2521//1818 -f 2517//1823 2502//1805 2516//1819 -f 2512//1814 2527//1817 2528//1820 -f 2523//1838 2508//1821 2522//1822 -f 2518//1826 2503//1808 2517//1823 -f 2513//1802 2528//1820 2529//1824 -f 2508//1821 2523//1838 2524//1825 -f 2519//1829 2504//1811 2518//1826 -f 2514//1806 2529//1824 2530//1827 -f 2509//1807 2524//1825 2525//1828 -f 2520//1816 2505//1813 2519//1829 -f 2545//1847 2530//1827 2544//1830 -f 2524//1825 2539//1842 2540//1831 -f 2519//1829 2534//1843 2535//1832 -f 2525//1828 2540//1831 2541//1833 -f 2520//1816 2535//1832 2536//1834 -f 2526//1815 2541//1833 2542//1835 -f 2521//1818 2536//1834 2537//1836 -f 2516//1819 2531//1854 2532//1837 -f 2543//1841 2528//1820 2542//1835 -f 2522//1822 2537//1836 2538//1839 -f 2517//1823 2532//1837 2533//1840 -f 2544//1830 2529//1824 2543//1841 -f 2523//1838 2538//1839 2539//1842 -f 2518//1826 2533//1840 2534//1843 -f 2559//1848 2544//1830 2558//1844 -f 2538//1839 2553//1857 2554//1845 -f 2533//1840 2548//1858 2549//1846 -f 2560//1866 2545//1847 2559//1848 -f 2555//1850 2540//1831 2554//1845 -f 2534//1843 2549//1846 2550//1849 -f 2556//1852 2541//1833 2555//1850 -f 2535//1832 2550//1849 2551//1851 -f 2557//1856 2542//1835 2556//1852 -f 2536//1834 2551//1851 2552//1853 -f 2531//1854 2546//1859 2547//1855 -f 2558//1844 2543//1841 2557//1856 -f 2537//1836 2552//1853 2553//1857 -f 2532//1837 2547//1855 2548//1858 -f 2546//1859 2561//1877 2562//1860 -f 2573//1864 2558//1844 2572//1861 -f 2552//1853 2567//1873 2568//1862 -f 2547//1855 2562//1860 2563//1863 -f 2574//1867 2559//1848 2573//1864 -f 2569//1868 2554//1845 2568//1862 -f 2548//1858 2563//1863 2564//1865 -f 2575//1884 2560//1866 2574//1867 -f 2570//1870 2555//1850 2569//1868 -f 2549//1846 2564//1865 2565//1869 -f 2571//1872 2556//1852 2570//1870 -f 2550//1849 2565//1869 2566//1871 -f 2572//1861 2557//1856 2571//1872 -f 2551//1851 2566//1871 2567//1873 -f 2565//1869 2580//1887 2581//1874 -f 2587//1879 2572//1861 2586//1875 -f 2566//1871 2581//1874 2582//1876 -f 2561//1877 2576//1895 2577//1878 -f 2588//1882 2573//1864 2587//1879 -f 2567//1873 2582//1876 2583//1880 -f 2562//1860 2577//1878 2578//1881 -f 2589//1885 2574//1867 2588//1882 -f 2584//1886 2569//1868 2583//1880 -f 2563//1863 2578//1881 2579//1883 -f 2590//1902 2575//1884 2589//1885 -f 2585//1888 2570//1870 2584//1886 -f 2564//1865 2579//1883 2580//1887 -f 2586//1875 2571//1872 2585//1888 -f 2600//1891 2585//1888 2599//1889 -f 2579//1883 2594//1901 2595//1890 -f 2601//1893 2586//1875 2600//1891 -f 2580//1887 2595//1890 2596//1892 -f 2602//1897 2587//1879 2601//1893 -f 2581//1874 2596//1892 2597//1894 -f 2576//1895 2591//1914 2592//1896 -f 2603//1900 2588//1882 2602//1897 -f 2582//1876 2597//1894 2598//1898 -f 2577//1878 2592//1896 2593//1899 -f 2604//1903 2589//1885 2603//1900 -f 2599//1889 2584//1886 2598//1898 -f 2578//1881 2593//1899 2594//1901 -f 2605//1907 2590//1902 2604//1903 -f 2619//1908 2604//1903 2618//1904 -f 2598//1898 2613//1917 2614//1905 -f 2593//1899 2608//1918 2609//1906 -f 2620//1927 2605//1907 2619//1908 -f 2615//1910 2600//1891 2614//1905 -f 2594//1901 2609//1906 2610//1909 -f 2616//1912 2601//1893 2615//1910 -f 2595//1890 2610//1909 2611//1911 -f 2617//1916 2602//1897 2616//1912 -f 2596//1892 2611//1911 2612//1913 -f 2591//1914 2606//1919 2607//1915 -f 2618//1904 2603//1900 2617//1916 -f 2597//1894 2612//1913 2613//1917 -f 2592//1896 2607//1915 2608//1918 -f 2606//1919 2621//1937 2622//1920 -f 2633//1924 2618//1904 2632//1921 -f 2612//1913 2627//1933 2628//1922 -f 2607//1915 2622//1920 2623//1923 -f 2634//1928 2619//1908 2633//1924 -f 2613//1917 2628//1922 2629//1925 -f 2608//1918 2623//1923 2624//1926 -f 2635//1945 2620//1927 2634//1928 -f 2630//1930 2615//1910 2629//1925 -f 2609//1906 2624//1926 2625//1929 -f 2631//1932 2616//1912 2630//1930 -f 2610//1909 2625//1929 2626//1931 -f 2632//1921 2617//1916 2631//1932 -f 2611//1911 2626//1931 2627//1933 -f 2625//1929 2640//1947 2641//1934 -f 2647//1939 2632//1921 2646//1935 -f 2626//1931 2641//1934 2642//1936 -f 2621//1937 2636//1955 2637//1938 -f 2648//1942 2633//1924 2647//1939 -f 2627//1933 2642//1936 2643//1940 -f 2622//1920 2637//1938 2638//1941 -f 2649//1946 2634//1928 2648//1942 -f 2628//1922 2643//1940 2644//1943 -f 2623//1923 2638//1941 2639//1944 -f 2650//1963 2635//1945 2649//1946 -f 2645//1948 2630//1930 2644//1943 -f 2624//1926 2639//1944 2640//1947 -f 2646//1935 2631//1932 2645//1948 -f 2644//1943 2659//1961 2660//1949 -f 2639//1944 2654//1962 2655//1950 -f 2645//1948 2660//1949 2661//1951 -f 2640//1947 2655//1950 2656//1952 -f 2646//1935 2661//1951 2662//1953 -f 2641//1934 2656//1952 2657//1954 -f 2652//1975 2637//1938 2651//1956 -f 2647//1939 2662//1953 2663//1957 -f 2642//1936 2657//1954 2658//1958 -f 2637//1938 2652//1975 2653//1959 -f 2648//1942 2663//1957 2664//1960 -f 2643//1940 2658//1958 2659//1961 -f 2638//1941 2653//1959 2654//1962 -f 2649//1946 2664//1960 2665//1964 -f 2663//1957 2678//1977 2679//1965 -f 2658//1958 2673//1978 2674//1966 -f 2669//1970 2654//1962 2668//1967 -f 2664//1960 2679//1965 2680//1968 -f 2659//1961 2674//1966 2675//1969 -f 2670//1972 2655//1950 2669//1970 -f 2660//1949 2675//1969 2676//1971 -f 2671//1974 2656//1952 2670//1972 -f 2661//1951 2676//1971 2677//1973 -f 2672//1981 2657//1954 2671//1974 -f 2667//1979 2652//1975 2666//1976 -f 2662//1953 2677//1973 2678//1977 -f 2657//1954 2672//1981 2673//1978 -f 2668//1967 2653//1959 2667//1979 -f 2677//1973 2692//1992 2693//1980 -f 2688//1999 2673//1978 2687//1982 -f 2683//1986 2668//1967 2682//1983 -f 2678//1977 2693//1980 2694//1984 -f 2673//1978 2688//1999 2689//1985 -f 2684//1989 2669//1970 2683//1986 -f 2679//1965 2694//1984 2695//1987 -f 2674//1966 2689//1985 2690//1988 -f 2685//1991 2670//1972 2684//1989 -f 2675//1969 2690//1988 2691//1990 -f 2686//1993 2671//1974 2685//1991 -f 2676//1971 2691//1990 2692//1992 -f 2687//1982 2672//1981 2686//1993 -f 2682//1983 2667//1979 2681//1994 -f 2691//1990 2706//2008 2707//1995 -f 2702//2000 2687//1982 2701//1996 -f 2697//2001 2682//1983 2696//1997 -f 2692//1992 2707//1995 2708//1998 -f 2703//2017 2688//1999 2702//2000 -f 2698//2004 2683//1986 2697//2001 -f 2693//1980 2708//1998 2709//2002 -f 2688//1999 2703//2017 2704//2003 -f 2699//2007 2684//1989 2698//2004 -f 2694//1984 2709//2002 2710//2005 -f 2689//1985 2704//2003 2705//2006 -f 2700//2009 2685//1991 2699//2007 -f 2690//1988 2705//2006 2706//2008 -f 2701//1996 2686//1993 2700//2009 -f 2715//2012 2700//2009 2714//2010 -f 2705//2006 2720//2024 2721//2011 -f 2716//2014 2701//1996 2715//2012 -f 2706//2008 2721//2011 2722//2013 -f 2717//2018 2702//2000 2716//2014 -f 2712//2019 2697//2001 2711//2015 -f 2707//1995 2722//2013 2723//2016 -f 2718//2025 2703//2017 2717//2018 -f 2713//2022 2698//2004 2712//2019 -f 2708//1998 2723//2016 2724//2020 -f 2703//2017 2718//2025 2719//2021 -f 2714//2010 2699//2007 2713//2022 -f 2709//2002 2724//2020 2725//2023 -f 2704//2003 2719//2021 2720//2024 -f 2718//2025 2733//2041 2734//2026 -f 2729//2030 2714//2010 2728//2027 -f 2724//2020 2739//2039 2740//2028 -f 2719//2021 2734//2026 2735//2029 -f 2730//2032 2715//2012 2729//2030 -f 2720//2024 2735//2029 2736//2031 -f 2731//2034 2716//2014 2730//2032 -f 2721//2011 2736//2031 2737//2033 -f 2732//2037 2717//2018 2731//2034 -f 2727//2038 2712//2019 2726//2035 -f 2722//2013 2737//2033 2738//2036 -f 2733//2041 2718//2025 2732//2037 -f 2728//2027 2713//2022 2727//2038 -f 2723//2016 2738//2036 2739//2039 -f 2737//2033 2753//2052 2754//2040 -f 2749//2059 2733//2041 2748//2042 -f 2744//2046 2728//2027 2743//2043 -f 2738//2036 2754//2040 2755//2044 -f 2733//2041 2749//2059 2750//2045 -f 2745//2049 2729//2030 2744//2046 -f 2739//2039 2755//2044 2756//2047 -f 2734//2026 2750//2045 2751//2048 -f 2746//2051 2730//2032 2745//2049 -f 2735//2029 2751//2048 2752//2050 -f 2747//2053 2731//2034 2746//2051 -f 2736//2031 2752//2050 2753//2052 -f 2748//2042 2732//2037 2747//2053 -f 2743//2043 2727//2038 2742//2054 -f 2752//2050 2767//2068 2768//2055 -f 2763//2060 2748//2042 2762//2056 -f 2758//2061 2743//2043 2757//2057 -f 2753//2052 2768//2055 2769//2058 -f 2764//2077 2749//2059 2763//2060 -f 2759//2064 2744//2046 2758//2061 -f 2754//2040 2769//2058 2770//2062 -f 2749//2059 2764//2077 2765//2063 -f 2760//2067 2745//2049 2759//2064 -f 2755//2044 2770//2062 2771//2065 -f 2750//2045 2765//2063 2766//2066 -f 2761//2069 2746//2051 2760//2067 -f 2751//2048 2766//2066 2767//2068 -f 2762//2056 2747//2053 2761//2069 -f 2776//2072 2761//2069 2775//2070 -f 2782//2073 2767//2068 2781//2071 -f 2777//2074 2762//2056 2776//2072 -f 2783//2076 2768//2055 2782//2073 -f 2778//2078 2763//2060 2777//2074 -f 2757//2057 2772//2094 2773//2075 -f 2784//2080 2769//2058 2783//2076 -f 2779//2081 2764//2077 2778//2078 -f 2758//2061 2773//2075 2774//2079 -f 2785//2082 2770//2062 2784//2080 -f 2780//2083 2765//2063 2779//2081 -f 2759//2064 2774//2079 2775//2070 -f 2786//2086 2771//2065 2785//2082 -f 2781//2071 2766//2066 2780//2083 -f 2795//2088 2780//2083 2794//2084 -f 2774//2079 2789//2097 2790//2085 -f 2801//2104 2786//2086 2800//2087 -f 2796//2090 2781//2071 2795//2088 -f 2775//2070 2790//2085 2791//2089 -f 2797//2092 2782//2073 2796//2090 -f 2776//2072 2791//2089 2792//2091 -f 2798//2096 2783//2076 2797//2092 -f 2777//2074 2792//2091 2793//2093 -f 2772//2094 2787//2112 2788//2095 -f 2799//2098 2784//2080 2798//2096 -f 2794//2084 2779//2081 2793//2093 -f 2773//2075 2788//2095 2789//2097 -f 2800//2087 2785//2082 2799//2098 -f 2814//2102 2799//2098 2813//2099 -f 2793//2093 2808//2111 2809//2100 -f 2788//2095 2803//2113 2804//2101 -f 2815//2105 2800//2087 2814//2102 -f 2810//2106 2795//2088 2809//2100 -f 2789//2097 2804//2101 2805//2103 -f 2816//2123 2801//2104 2815//2105 -f 2811//2108 2796//2090 2810//2106 -f 2790//2085 2805//2103 2806//2107 -f 2812//2110 2797//2092 2811//2108 -f 2791//2089 2806//2107 2807//2109 -f 2813//2099 2798//2096 2812//2110 -f 2792//2091 2807//2109 2808//2111 -f 2787//2112 2802//2116 2803//2113 -f 2828//2118 2813//2099 2827//2114 -f 2807//2109 2822//2128 2823//2115 -f 2802//2116 2817//2133 2818//2117 -f 2829//2121 2814//2102 2828//2118 -f 2808//2111 2823//2115 2824//2119 -f 2803//2113 2818//2117 2819//2120 -f 2830//2124 2815//2105 2829//2121 -f 2825//2125 2810//2106 2824//2119 -f 2804//2101 2819//2120 2820//2122 -f 2831//2140 2816//2123 2830//2124 -f 2826//2127 2811//2108 2825//2125 -f 2805//2103 2820//2122 2821//2126 -f 2827//2114 2812//2110 2826//2127 -f 2806//2107 2821//2126 2822//2128 -f 2842//2131 2827//2114 2841//2129 -f 2821//2126 2836//2143 2837//2130 -f 2843//2135 2828//2118 2842//2131 -f 2822//2128 2837//2130 2838//2132 -f 2817//2133 2832//2153 2833//2134 -f 2844//2138 2829//2121 2843//2135 -f 2823//2115 2838//2132 2839//2136 -f 2818//2117 2833//2134 2834//2137 -f 2845//2141 2830//2124 2844//2138 -f 2840//2142 2825//2125 2839//2136 -f 2819//2120 2834//2137 2835//2139 -f 2846//2145 2831//2140 2845//2141 -f 2841//2129 2826//2127 2840//2142 -f 2820//2122 2835//2139 2836//2143 -f 2834//2137 2849//2156 2850//2144 -f 2861//2164 2846//2145 2860//2146 -f 2856//2149 2841//2129 2855//2147 -f 2835//2139 2850//2144 2851//2148 -f 2857//2151 2842//2131 2856//2149 -f 2836//2143 2851//2148 2852//2150 -f 2858//2155 2843//2135 2857//2151 -f 2837//2130 2852//2150 2853//2152 -f 2832//2153 2847//2171 2848//2154 -f 2859//2157 2844//2138 2858//2155 -f 2854//2158 2839//2136 2853//2152 -f 2833//2134 2848//2154 2849//2156 -f 2860//2146 2845//2141 2859//2157 -f 2855//2147 2840//2142 2854//2158 -f 2870//2162 2854//2158 2869//2159 -f 2848//2154 2864//2172 2865//2160 -f 2876//2165 2860//2146 2875//2161 -f 2871//2166 2855//2147 2870//2162 -f 2849//2156 2865//2160 2866//2163 -f 2877//2183 2861//2164 2876//2165 -f 2872//2168 2856//2149 2871//2166 -f 2850//2144 2866//2163 2867//2167 -f 2873//2170 2857//2151 2872//2168 -f 2851//2148 2867//2167 2868//2169 -f 2874//2173 2858//2155 2873//2170 -f 2852//2150 2868//2169 2869//2159 -f 2847//2171 2863//2176 2864//2172 -f 2875//2161 2859//2157 2874//2173 -f 2889//2178 2874//2173 2888//2174 -f 2868//2169 2883//2188 2884//2175 -f 2863//2176 2878//2192 2879//2177 -f 2890//2180 2875//2161 2889//2178 -f 2885//2181 2870//2162 2884//2175 -f 2864//2172 2879//2177 2880//2179 -f 2891//2184 2876//2165 2890//2180 -f 2886//2185 2871//2166 2885//2181 -f 2865//2160 2880//2179 2881//2182 -f 2892//2191 2877//2183 2891//2184 -f 2887//2187 2872//2168 2886//2185 -f 2866//2163 2881//2182 2882//2186 -f 2888//2174 2873//2170 2887//2187 -f 2867//2167 2882//2186 2883//2188 -f 2421//1736 2888//2174 2420//1732 -f 2416//1712 2883//2188 2415//1734 -f 2422//1718 2889//2178 2421//1736 -f 2417//1711 2884//2175 2416//1712 -f 2412//1714 2879//2177 2411//1715 -f 2423//1717 2890//2180 2422//1718 -f 2418//1720 2885//2181 2417//1711 -f 2413//1722 2880//2179 2412//1714 -f 2424//1724 2891//2184 2423//1717 -f 2419//1726 2886//2185 2418//1720 -f 2414//1728 2881//2182 2413//1722 -f 2891//2184 2424//1724 2425//1730 -f 2420//1732 2887//2187 2419//1726 -f 2415//1734 2882//2186 2414//1728 -f 2914//1721 2899//1711 2913//1713 -f 2909//2196 2894//1714 2908//2194 -f 2904//1718 2919//1739 2920//1719 -f 2915//1727 2900//1720 2914//1721 -f 2910//2197 2895//1722 2909//2196 -f 2905//2195 2920//1719 2921//1725 -f 2916//1746 2901//1726 2915//1727 -f 2911//1735 2896//1728 2910//2197 -f 2906//1724 2921//1725 2922//2199 -f 2901//1726 2916//1746 2917//1733 -f 2912//1738 2897//1734 2911//1735 -f 2902//1732 2917//1733 2918//1737 -f 2913//1713 2898//2193 2912//1738 -f 2903//2200 2918//1737 2919//1739 -f 2929//1743 2914//1721 2928//1740 -f 2924//1744 2909//2196 2923//2201 -f 2919//1739 2934//2205 2935//2202 -f 2930//2209 2915//1727 2929//1743 -f 2925//1748 2910//2197 2924//1744 -f 2920//1719 2935//2202 2936//2203 -f 2915//1727 2930//2209 2931//1747 -f 2926//1751 2911//1735 2925//1748 -f 2921//1725 2936//2203 2937//1749 -f 2916//1746 2931//1747 2932//1750 -f 2927//2204 2912//1738 2926//1751 -f 2917//1733 2932//1750 2933//1752 -f 2928//1740 2913//1713 2927//2204 -f 2918//1737 2933//1752 2934//2205 -f 2932//1750 2947//2212 2948//2206 -f 2943//1758 2928//1740 2942//1756 -f 2933//1752 2948//2206 2949//2207 -f 2944//1762 2929//1743 2943//1758 -f 2939//2210 2924//1744 2938//2208 -f 2934//2205 2949//2207 2950//1760 -f 2945//1779 2930//2209 2944//1762 -f 2940//1766 2925//1748 2939//2210 -f 2935//2202 2950//1760 2951//1764 -f 2930//2209 2945//1779 2946//1765 -f 2941//2213 2926//1751 2940//1766 -f 2936//2203 2951//1764 2952//2211 -f 2931//1747 2946//1765 2947//2212 -f 2942//1756 2927//2204 2941//2213 -f 2951//1764 2966//1782 2967//1770 -f 2946//1765 2961//2217 2962//2214 -f 2957//1774 2942//1756 2956//1772 -f 2947//2212 2962//2214 2963//2215 -f 2958//1776 2943//1758 2957//1774 -f 2948//2206 2963//2215 2964//1775 -f 2959//1780 2944//1762 2958//1776 -f 2954//1781 2939//2210 2953//2216 -f 2949//2207 2964//1775 2965//1778 -f 2960//1787 2945//1779 2959//1780 -f 2955//2218 2940//1766 2954//1781 -f 2950//1760 2965//1778 2966//1782 -f 2945//1779 2960//1787 2961//2217 -f 2956//1772 2941//2213 2955//2218 -f 2970//2219 2955//2218 2969//1785 -f 2965//1778 2980//2222 2981//1786 -f 2960//1787 2975//1803 2976//1788 -f 2971//1792 2956//1772 2970//2219 -f 2966//1782 2981//1786 2982//2220 -f 2961//2217 2976//1788 2977//1791 -f 2972//2221 2957//1774 2971//1792 -f 2962//2214 2977//1791 2978//1793 -f 2973//1796 2958//1776 2972//2221 -f 2963//2215 2978//1793 2979//1795 -f 2974//1799 2959//1780 2973//1796 -f 2969//1785 2954//1781 2968//1797 -f 2964//1775 2979//1795 2980//2222 -f 2975//1803 2960//1787 2974//1799 -f 2989//1804 2974//1799 2988//1800 -f 2984//1805 2969//1785 2983//1801 -f 2979//1795 2994//1814 2995//1802 -f 2990//1821 2975//1803 2989//1804 -f 2985//1808 2970//2219 2984//1805 -f 2980//2222 2995//1802 2996//1806 -f 2975//1803 2990//1821 2991//1807 -f 2986//1811 2971//1792 2985//1808 -f 2981//1786 2996//1806 2997//2223 -f 2976//1788 2991//1807 2992//1810 -f 2987//1813 2972//2221 2986//1811 -f 2977//1791 2992//1810 2993//1812 -f 2988//1800 2973//1796 2987//1813 -f 2978//1793 2993//1812 2994//1814 -f 2992//1810 3007//1828 3008//2224 -f 3003//1818 2988//1800 3002//1816 -f 2993//1812 3008//2224 3009//1817 -f 3004//1822 2989//1804 3003//1818 -f 2999//1823 2984//1805 2998//1819 -f 2994//1814 3009//1817 3010//1820 -f 3005//2226 2990//1821 3004//1822 -f 3000//1826 2985//1808 2999//1823 -f 2995//1802 3010//1820 3011//1824 -f 2990//1821 3005//2226 3006//1825 -f 3001//1829 2986//1811 3000//1826 -f 2996//1806 3011//1824 3012//1827 -f 2991//1807 3006//1825 3007//1828 -f 3002//1816 2987//1813 3001//1829 -f 3027//1847 3012//1827 3026//2225 -f 3006//1825 3021//1842 3022//1831 -f 3001//1829 3016//1843 3017//1832 -f 3007//1828 3022//1831 3023//1833 -f 3002//1816 3017//1832 3018//1834 -f 3008//2224 3023//1833 3024//1835 -f 3003//1818 3018//1834 3019//1836 -f 2998//1819 3013//1854 3014//1837 -f 3025//1841 3010//1820 3024//1835 -f 3004//1822 3019//1836 3020//1839 -f 2999//1823 3014//1837 3015//1840 -f 3026//2225 3011//1824 3025//1841 -f 3005//2226 3020//1839 3021//1842 -f 3000//1826 3015//1840 3016//1843 -f 3041//1848 3026//2225 3040//1844 -f 3020//1839 3035//2229 3036//1845 -f 3015//1840 3030//1858 3031//1846 -f 3042//1866 3027//1847 3041//1848 -f 3037//2228 3022//1831 3036//1845 -f 3016//1843 3031//1846 3032//2227 -f 3038//1852 3023//1833 3037//2228 -f 3017//1832 3032//2227 3033//1851 -f 3039//1856 3024//1835 3038//1852 -f 3018//1834 3033//1851 3034//1853 -f 3013//1854 3028//1859 3029//1855 -f 3040//1844 3025//1841 3039//1856 -f 3019//1836 3034//1853 3035//2229 -f 3014//1837 3029//1855 3030//1858 -f 3028//1859 3043//1877 3044//1860 -f 3055//2231 3040//1844 3054//2230 -f 3034//1853 3049//2234 3050//1862 -f 3029//1855 3044//1860 3045//1863 -f 3056//1867 3041//1848 3055//2231 -f 3051//2232 3036//1845 3050//1862 -f 3030//1858 3045//1863 3046//1865 -f 3057//1884 3042//1866 3056//1867 -f 3052//1870 3037//2228 3051//2232 -f 3031//1846 3046//1865 3047//1869 -f 3053//1872 3038//1852 3052//1870 -f 3032//2227 3047//1869 3048//2233 -f 3054//2230 3039//1856 3053//1872 -f 3033//1851 3048//2233 3049//2234 -f 3047//1869 3062//1887 3063//1874 -f 3069//1879 3054//2230 3068//1875 -f 3048//2233 3063//1874 3064//1876 -f 3043//1877 3058//1895 3059//1878 -f 3070//2236 3055//2231 3069//1879 -f 3049//2234 3064//1876 3065//2235 -f 3044//1860 3059//1878 3060//1881 -f 3071//1885 3056//1867 3070//2236 -f 3066//1886 3051//2232 3065//2235 -f 3045//1863 3060//1881 3061//1883 -f 3072//1902 3057//1884 3071//1885 -f 3067//2237 3052//1870 3066//1886 -f 3046//1865 3061//1883 3062//1887 -f 3068//1875 3053//1872 3067//2237 -f 3082//1891 3067//2237 3081//2238 -f 3061//1883 3076//1901 3077//2239 -f 3083//1893 3068//1875 3082//1891 -f 3062//1887 3077//2239 3078//1892 -f 3084//1897 3069//1879 3083//1893 -f 3063//1874 3078//1892 3079//1894 -f 3058//1895 3073//2240 3074//1896 -f 3085//1900 3070//2236 3084//1897 -f 3064//1876 3079//1894 3080//1898 -f 3059//1878 3074//1896 3075//1899 -f 3086//1903 3071//1885 3085//1900 -f 3081//2238 3066//1886 3080//1898 -f 3060//1881 3075//1899 3076//1901 -f 3087//1907 3072//1902 3086//1903 -f 3101//1908 3086//1903 3100//1904 -f 3080//1898 3095//1917 3096//1905 -f 3075//1899 3090//2241 3091//1906 -f 3102//1927 3087//1907 3101//1908 -f 3097//1910 3082//1891 3096//1905 -f 3076//1901 3091//1906 3092//1909 -f 3098//1912 3083//1893 3097//1910 -f 3077//2239 3092//1909 3093//1911 -f 3099//1916 3084//1897 3098//1912 -f 3078//1892 3093//1911 3094//1913 -f 3073//2240 3088//2242 3089//1915 -f 3100//1904 3085//1900 3099//1916 -f 3079//1894 3094//1913 3095//1917 -f 3074//1896 3089//1915 3090//2241 -f 3088//2242 3103//2246 3104//2243 -f 3115//1924 3100//1904 3114//1921 -f 3094//1913 3109//1933 3110//1922 -f 3089//1915 3104//2243 3105//1923 -f 3116//1928 3101//1908 3115//1924 -f 3095//1917 3110//1922 3111//1925 -f 3090//2241 3105//1923 3106//2244 -f 3117//2247 3102//1927 3116//1928 -f 3112//2245 3097//1910 3111//1925 -f 3091//1906 3106//2244 3107//1929 -f 3113//1932 3098//1912 3112//2245 -f 3092//1909 3107//1929 3108//1931 -f 3114//1921 3099//1916 3113//1932 -f 3093//1911 3108//1931 3109//1933 -f 3107//1929 3122//2248 3123//1934 -f 3129//1939 3114//1921 3128//1935 -f 3108//1931 3123//1934 3124//1936 -f 3103//2246 3118//2250 3119//1938 -f 3130//1942 3115//1924 3129//1939 -f 3109//1933 3124//1936 3125//1940 -f 3104//2243 3119//1938 3120//1941 -f 3131//1946 3116//1928 3130//1942 -f 3110//1922 3125//1940 3126//1943 -f 3105//1923 3120//1941 3121//1944 -f 3132//2252 3117//2247 3131//1946 -f 3127//1948 3112//2245 3126//1943 -f 3106//2244 3121//1944 3122//2248 -f 3128//1935 3113//1932 3127//1948 -f 3126//1943 3141//1961 3142//1949 -f 3121//1944 3136//1962 3137//1950 -f 3127//1948 3142//1949 3143//1951 -f 3122//2248 3137//1950 3138//2249 -f 3128//1935 3143//1951 3144//1953 -f 3123//1934 3138//2249 3139//1954 -f 3134//1975 3119//1938 3133//2251 -f 3129//1939 3144//1953 3145//1957 -f 3124//1936 3139//1954 3140//1958 -f 3119//1938 3134//1975 3135//1959 -f 3130//1942 3145//1957 3146//1960 -f 3125//1940 3140//1958 3141//1961 -f 3120//1941 3135//1959 3136//1962 -f 3131//1946 3146//1960 3147//1964 -f 3145//1957 3160//1977 3161//2253 -f 3140//1958 3155//1978 3156//1966 -f 3151//1970 3136//1962 3150//1967 -f 3146//1960 3161//2253 3162//1968 -f 3141//1961 3156//1966 3157//1969 -f 3152//2254 3137//1950 3151//1970 -f 3142//1949 3157//1969 3158//1971 -f 3153//1974 3138//2249 3152//2254 -f 3143//1951 3158//1971 3159//1973 -f 3154//1981 3139//1954 3153//1974 -f 3149//1979 3134//1975 3148//1976 -f 3144//1953 3159//1973 3160//1977 -f 3139//1954 3154//1981 3155//1978 -f 3150//1967 3135//1959 3149//1979 -f 3159//1973 3174//1992 3175//1980 -f 3170//2261 3155//1978 3169//2255 -f 3165//1986 3150//1967 3164//1983 -f 3160//1977 3175//1980 3176//1984 -f 3155//1978 3170//2261 3171//2256 -f 3166//2258 3151//1970 3165//1986 -f 3161//2253 3176//1984 3177//2257 -f 3156//1966 3171//2256 3172//1988 -f 3167//1991 3152//2254 3166//2258 -f 3157//1969 3172//1988 3173//1990 -f 3168//1993 3153//1974 3167//1991 -f 3158//1971 3173//1990 3174//1992 -f 3169//2255 3154//1981 3168//1993 -f 3164//1983 3149//1979 3163//1994 -f 3173//1990 3188//2008 3189//2259 -f 3184//2262 3169//2255 3183//2260 -f 3179//2001 3164//1983 3178//1997 -f 3174//1992 3189//2259 3190//1998 -f 3185//2017 3170//2261 3184//2262 -f 3180//2264 3165//1986 3179//2001 -f 3175//1980 3190//1998 3191//2263 -f 3170//2261 3185//2017 3186//2003 -f 3181//2007 3166//2258 3180//2264 -f 3176//1984 3191//2263 3192//2005 -f 3171//2256 3186//2003 3187//2006 -f 3182//2265 3167//1991 3181//2007 -f 3172//1988 3187//2006 3188//2008 -f 3183//2260 3168//1993 3182//2265 -f 3197//2267 3182//2265 3196//2010 -f 3187//2006 3202//2024 3203//2266 -f 3198//2014 3183//2260 3197//2267 -f 3188//2008 3203//2266 3204//2013 -f 3199//2269 3184//2262 3198//2014 -f 3194//2019 3179//2001 3193//2268 -f 3189//2259 3204//2013 3205//2016 -f 3200//2025 3185//2017 3199//2269 -f 3195//2270 3180//2264 3194//2019 -f 3190//1998 3205//2016 3206//2020 -f 3185//2017 3200//2025 3201//2021 -f 3196//2010 3181//2007 3195//2270 -f 3191//2263 3206//2020 3207//2023 -f 3186//2003 3201//2021 3202//2024 -f 3200//2025 3215//2041 3216//2026 -f 3211//2030 3196//2010 3210//2027 -f 3206//2020 3221//2275 3222//2271 -f 3201//2021 3216//2026 3217//2029 -f 3212//2032 3197//2267 3211//2030 -f 3202//2024 3217//2029 3218//2031 -f 3213//2034 3198//2014 3212//2032 -f 3203//2266 3218//2031 3219//2272 -f 3214//2037 3199//2269 3213//2034 -f 3209//2038 3194//2019 3208//2273 -f 3204//2013 3219//2272 3220//2274 -f 3215//2041 3200//2025 3214//2037 -f 3210//2027 3195//2270 3209//2038 -f 3205//2016 3220//2274 3221//2275 -f 3219//2272 3235//2052 3236//2276 -f 3231//2059 3215//2041 3230//2042 -f 3226//2046 3210//2027 3225//2043 -f 3220//2274 3236//2276 3237//2277 -f 3215//2041 3231//2059 3232//2045 -f 3227//2049 3211//2030 3226//2046 -f 3221//2275 3237//2277 3238//2278 -f 3216//2026 3232//2045 3233//2048 -f 3228//2051 3212//2032 3227//2049 -f 3217//2029 3233//2048 3234//2050 -f 3229//2053 3213//2034 3228//2051 -f 3218//2031 3234//2050 3235//2052 -f 3230//2042 3214//2037 3229//2053 -f 3225//2043 3209//2038 3224//2054 -f 3234//2050 3249//2068 3250//2055 -f 3245//2060 3230//2042 3244//2056 -f 3240//2061 3225//2043 3239//2279 -f 3235//2052 3250//2055 3251//2058 -f 3246//2077 3231//2059 3245//2060 -f 3241//2064 3226//2046 3240//2061 -f 3236//2276 3251//2058 3252//2062 -f 3231//2059 3246//2077 3247//2063 -f 3242//2067 3227//2049 3241//2064 -f 3237//2277 3252//2062 3253//2280 -f 3232//2045 3247//2063 3248//2066 -f 3243//2281 3228//2051 3242//2067 -f 3233//2048 3248//2066 3249//2068 -f 3244//2056 3229//2053 3243//2281 -f 3258//2072 3243//2281 3257//2070 -f 3264//2073 3249//2068 3263//2071 -f 3259//2074 3244//2056 3258//2072 -f 3265//2076 3250//2055 3264//2073 -f 3260//2078 3245//2060 3259//2074 -f 3239//2279 3254//2094 3255//2282 -f 3266//2080 3251//2058 3265//2076 -f 3261//2081 3246//2077 3260//2078 -f 3240//2061 3255//2282 3256//2079 -f 3267//2082 3252//2062 3266//2080 -f 3262//2083 3247//2063 3261//2081 -f 3241//2064 3256//2079 3257//2070 -f 3268//2284 3253//2280 3267//2082 -f 3263//2071 3248//2066 3262//2083 -f 3277//2088 3262//2083 3276//2283 -f 3256//2079 3271//2097 3272//2085 -f 3283//2104 3268//2284 3282//2087 -f 3278//2090 3263//2071 3277//2088 -f 3257//2070 3272//2085 3273//2089 -f 3279//2092 3264//2073 3278//2090 -f 3258//2072 3273//2089 3274//2091 -f 3280//2096 3265//2076 3279//2092 -f 3259//2074 3274//2091 3275//2093 -f 3254//2094 3269//2112 3270//2095 -f 3281//2098 3266//2080 3280//2096 -f 3276//2283 3261//2081 3275//2093 -f 3255//2282 3270//2095 3271//2097 -f 3282//2087 3267//2082 3281//2098 -f 3296//2102 3281//2098 3295//2099 -f 3275//2093 3290//2287 3291//2100 -f 3270//2095 3285//2113 3286//2285 -f 3297//2105 3282//2087 3296//2102 -f 3292//2286 3277//2088 3291//2100 -f 3271//2097 3286//2285 3287//2103 -f 3298//2123 3283//2104 3297//2105 -f 3293//2108 3278//2090 3292//2286 -f 3272//2085 3287//2103 3288//2107 -f 3294//2110 3279//2092 3293//2108 -f 3273//2089 3288//2107 3289//2109 -f 3295//2099 3280//2096 3294//2110 -f 3274//2091 3289//2109 3290//2287 -f 3269//2112 3284//2116 3285//2113 -f 3310//2118 3295//2099 3309//2288 -f 3289//2109 3304//2290 3305//2115 -f 3284//2116 3299//2133 3300//2117 -f 3311//2121 3296//2102 3310//2118 -f 3290//2287 3305//2115 3306//2119 -f 3285//2113 3300//2117 3301//2120 -f 3312//2124 3297//2105 3311//2121 -f 3307//2125 3292//2286 3306//2119 -f 3286//2285 3301//2120 3302//2122 -f 3313//2140 3298//2123 3312//2124 -f 3308//2289 3293//2108 3307//2125 -f 3287//2103 3302//2122 3303//2126 -f 3309//2288 3294//2110 3308//2289 -f 3288//2107 3303//2126 3304//2290 -f 3324//2131 3309//2288 3323//2129 -f 3303//2126 3318//2143 3319//2130 -f 3325//2292 3310//2118 3324//2131 -f 3304//2290 3319//2130 3320//2291 -f 3299//2133 3314//2153 3315//2134 -f 3326//2138 3311//2121 3325//2292 -f 3305//2115 3320//2291 3321//2136 -f 3300//2117 3315//2134 3316//2137 -f 3327//2141 3312//2124 3326//2138 -f 3322//2142 3307//2125 3321//2136 -f 3301//2120 3316//2137 3317//2293 -f 3328//2145 3313//2140 3327//2141 -f 3323//2129 3308//2289 3322//2142 -f 3302//2122 3317//2293 3318//2143 -f 3316//2137 3331//2156 3332//2144 -f 3343//2295 3328//2145 3342//2146 -f 3338//2149 3323//2129 3337//2147 -f 3317//2293 3332//2144 3333//2148 -f 3339//2151 3324//2131 3338//2149 -f 3318//2143 3333//2148 3334//2150 -f 3340//2155 3325//2292 3339//2151 -f 3319//2130 3334//2150 3335//2152 -f 3314//2153 3329//2171 3330//2154 -f 3341//2294 3326//2138 3340//2155 -f 3336//2158 3321//2136 3335//2152 -f 3315//2134 3330//2154 3331//2156 -f 3342//2146 3327//2141 3341//2294 -f 3337//2147 3322//2142 3336//2158 -f 3352//2162 3336//2158 3351//2159 -f 3330//2154 3346//2172 3347//2160 -f 3358//2296 3342//2146 3357//2161 -f 3353//2166 3337//2147 3352//2162 -f 3331//2156 3347//2160 3348//2163 -f 3359//2183 3343//2295 3358//2296 -f 3354//2168 3338//2149 3353//2166 -f 3332//2144 3348//2163 3349//2167 -f 3355//2170 3339//2151 3354//2168 -f 3333//2148 3349//2167 3350//2297 -f 3356//2298 3340//2155 3355//2170 -f 3334//2150 3350//2297 3351//2159 -f 3329//2171 3345//2176 3346//2172 -f 3357//2161 3341//2294 3356//2298 -f 3371//2178 3356//2298 3370//2174 -f 3350//2297 3365//2188 3366//2299 -f 3345//2176 3360//2302 3361//2300 -f 3372//2180 3357//2161 3371//2178 -f 3367//2181 3352//2162 3366//2299 -f 3346//2172 3361//2300 3362//2179 -f 3373//2301 3358//2296 3372//2180 -f 3368//2185 3353//2166 3367//2181 -f 3347//2160 3362//2179 3363//2182 -f 3374//2191 3359//2183 3373//2301 -f 3369//2187 3354//2168 3368//2185 -f 3348//2163 3363//2182 3364//2186 -f 3370//2174 3355//2170 3369//2187 -f 3349//2167 3364//2186 3365//2188 -f 2903//2200 3370//2174 2902//1732 -f 2898//2193 3365//2188 2897//1734 -f 2904//1718 3371//2178 2903//2200 -f 2899//1711 3366//2299 2898//2193 -f 2894//1714 3361//2300 2893//1715 -f 2905//2195 3372//2180 2904//1718 -f 2900//1720 3367//2181 2899//1711 -f 2895//1722 3362//2179 2894//1714 -f 2906//1724 3373//2301 2905//2195 -f 2901//1726 3368//2185 2900//1720 -f 2896//1728 3363//2182 2895//1722 -f 3373//2301 2906//1724 2907//2198 -f 2902//1732 3369//2187 2901//1726 -f 2897//1734 3364//2186 2896//1728 -o Hand_R_Sphere.011 -v 0.276990 0.207506 -0.985293 -v 0.262213 0.191256 -0.973294 -v 0.249047 0.176916 -0.960609 -v 0.238000 0.165034 -0.947728 -v 0.229496 0.156070 -0.935144 -v 0.223861 0.150366 -0.923341 -v 0.221312 0.148142 -0.912773 -v 0.221947 0.149484 -0.903846 -v 0.225742 0.154339 -0.896902 -v 0.232551 0.162523 -0.892210 -v 0.242112 0.173718 -0.889948 -v 0.254057 0.187497 -0.890205 -v 0.267928 0.203329 -0.892970 -v 0.283192 0.220605 -0.898136 -v 0.299262 0.238662 -0.905506 -v 0.279455 0.206252 -0.985965 -v 0.267048 0.188797 -0.974612 -v 0.256066 0.173344 -0.962524 -v 0.246934 0.160489 -0.950164 -v 0.240001 0.150725 -0.938009 -v 0.235533 0.144427 -0.926524 -v 0.233703 0.141838 -0.916152 -v 0.234581 0.143056 -0.907291 -v 0.238133 0.148035 -0.900282 -v 0.244223 0.156584 -0.895393 -v 0.252616 0.168374 -0.892813 -v 0.262991 0.182952 -0.892641 -v 0.274947 0.199757 -0.894884 -v 0.288027 0.218145 -0.899455 -v 0.301727 0.237408 -0.906178 -v 0.282442 0.205732 -0.986998 -v 0.272906 0.187776 -0.976639 -v 0.264571 0.171863 -0.965467 -v 0.257758 0.158603 -0.953910 -v 0.252729 0.148507 -0.942413 -v 0.249676 0.141963 -0.931418 -v 0.248717 0.139222 -0.921348 -v 0.249889 0.140389 -0.912589 -v 0.253147 0.145419 -0.905477 -v 0.258366 0.154120 -0.900287 -v 0.265344 0.166156 -0.897218 -v 0.273815 0.181066 -0.896387 -v 0.283452 0.198276 -0.897827 -v 0.293885 0.217125 -0.901482 -v 0.304713 0.236888 -0.907212 -v 0.285835 0.205965 -0.988353 -v 0.279562 0.188234 -0.979297 -v 0.274235 0.172527 -0.969325 -v 0.270057 0.159449 -0.958821 -v 0.267191 0.149502 -0.948188 -v 0.265746 0.143068 -0.937835 -v 0.265777 0.140395 -0.928160 -v 0.267283 0.141585 -0.919534 -v 0.270207 0.146593 -0.912289 -v 0.274436 0.155225 -0.906704 -v 0.279807 0.167151 -0.902993 -v 0.286114 0.181912 -0.901298 -v 0.293115 0.198940 -0.901685 -v 0.300541 0.217582 -0.904140 -v 0.308106 0.237121 -0.908567 -v 0.289505 0.206943 -0.989978 -v 0.286761 0.190152 -0.982483 -v 0.284686 0.175313 -0.973951 -v 0.283359 0.162995 -0.964709 -v 0.282832 0.153671 -0.955111 -v 0.283125 0.147701 -0.945527 -v 0.284226 0.145313 -0.936326 -v 0.286094 0.146599 -0.927860 -v 0.288657 0.151510 -0.920455 -v 0.291815 0.159857 -0.914396 -v 0.295448 0.171320 -0.909916 -v 0.299416 0.185457 -0.907186 -v 0.303566 0.201726 -0.906311 -v 0.307740 0.219501 -0.907326 -v 0.311776 0.238100 -0.910191 -v 0.293310 0.208629 -0.991809 -v 0.294225 0.193458 -0.986076 -v 0.295522 0.180112 -0.979166 -v 0.297152 0.169103 -0.971346 -v 0.299050 0.160854 -0.962916 -v 0.301146 0.155682 -0.954200 -v 0.303357 0.153786 -0.945533 -v 0.305600 0.155238 -0.937247 -v 0.307787 0.159983 -0.929662 -v 0.309836 0.167838 -0.923069 -v 0.311666 0.178503 -0.917721 -v 0.313208 0.191566 -0.913823 -v 0.314403 0.206525 -0.911527 -v 0.315204 0.222807 -0.910919 -v 0.315582 0.239785 -0.912023 -v 0.297105 0.210956 -0.993777 -v 0.301669 0.198024 -0.989936 -v 0.306329 0.186741 -0.984771 -v 0.310905 0.177540 -0.978479 -v 0.315223 0.170775 -0.971304 -v 0.319116 0.166705 -0.963520 -v 0.322434 0.165488 -0.955427 -v 0.325051 0.167169 -0.947335 -v 0.326864 0.171685 -0.939556 -v 0.327806 0.178862 -0.932389 -v 0.327839 0.188423 -0.926108 -v 0.326962 0.200003 -0.920957 -v 0.325209 0.213154 -0.917131 -v 0.322648 0.227373 -0.914779 -v 0.319376 0.242113 -0.913991 -v 0.300743 0.213837 -0.995806 -v 0.308805 0.203675 -0.993916 -v 0.316689 0.194945 -0.990549 -v 0.324091 0.187981 -0.985834 -v 0.330728 0.183052 -0.979951 -v 0.336344 0.180347 -0.973128 -v 0.340724 0.179970 -0.965627 -v 0.343699 0.181935 -0.957735 -v 0.345154 0.186167 -0.949757 -v 0.345034 0.192504 -0.941997 -v 0.343344 0.200701 -0.934756 -v 0.340148 0.210444 -0.928311 -v 0.335570 0.221358 -0.922909 -v 0.329784 0.233024 -0.918759 -v 0.323014 0.244993 -0.916020 -v 0.304085 0.217160 -0.997818 -v 0.315360 0.210193 -0.997863 -v 0.326205 0.204408 -0.996279 -v 0.336203 0.200025 -0.993126 -v 0.344970 0.197214 -0.988527 -v 0.352169 0.196083 -0.982657 -v 0.357524 0.196675 -0.975742 -v 0.360827 0.198968 -0.968049 -v 0.361954 0.202873 -0.959872 -v 0.360859 0.208240 -0.951526 -v 0.357586 0.214863 -0.943331 -v 0.352260 0.222488 -0.935603 -v 0.345086 0.230821 -0.928639 -v 0.336339 0.239542 -0.922706 -v 0.326356 0.248316 -0.918032 -v 0.307001 0.220797 -0.999736 -v 0.321082 0.217328 -1.001625 -v 0.334512 0.214766 -1.001740 -v 0.346776 0.213209 -1.000077 -v 0.357402 0.212717 -0.996700 -v 0.365983 0.213309 -0.991738 -v 0.372188 0.214962 -0.985383 -v 0.375779 0.217613 -0.977879 -v 0.376618 0.221160 -0.969513 -v 0.374673 0.225466 -0.960607 -v 0.370018 0.230366 -0.951505 -v 0.362832 0.235672 -0.942554 -v 0.353392 0.241179 -0.934100 -v 0.342061 0.246677 -0.926467 -v 0.329273 0.251954 -0.919949 -v 0.309381 0.224610 -1.001486 -v 0.325750 0.224806 -1.005057 -v 0.341289 0.225623 -1.006723 -v 0.355402 0.227027 -1.006419 -v 0.367545 0.228965 -1.004157 -v 0.377253 0.231363 -1.000025 -v 0.384153 0.234128 -0.994180 -v 0.387978 0.237154 -0.986847 -v 0.388583 0.240325 -0.978309 -v 0.385943 0.243519 -0.968893 -v 0.380161 0.246614 -0.958962 -v 0.371459 0.249489 -0.948896 -v 0.360170 0.252036 -0.939083 -v 0.346729 0.254155 -0.929900 -v 0.331653 0.255766 -0.921699 -v 0.311133 0.228450 -1.003000 -v 0.329186 0.232340 -1.008028 -v 0.346277 0.236559 -1.011036 -v 0.361750 0.240947 -1.011908 -v 0.375011 0.245333 -1.010612 -v 0.385548 0.249550 -1.007197 -v 0.392959 0.253435 -1.001794 -v 0.396957 0.256840 -0.994611 -v 0.397389 0.259633 -0.985923 -v 0.394238 0.261706 -0.976066 -v 0.387626 0.262982 -0.965417 -v 0.377807 0.263409 -0.954385 -v 0.365158 0.262972 -0.943396 -v 0.350165 0.261688 -0.932871 -v 0.333404 0.259606 -0.923214 -v 0.312189 0.232171 -1.004221 -v 0.331257 0.239639 -1.010423 -v 0.349284 0.247156 -1.014513 -v 0.365578 0.254434 -1.016334 -v 0.379511 0.261192 -1.015816 -v 0.390549 0.267172 -1.012979 -v 0.398267 0.272143 -1.007932 -v 0.402369 0.275914 -1.000870 -v 0.402697 0.278340 -0.992062 -v 0.399239 0.279329 -0.981848 -v 0.392127 0.278841 -0.970621 -v 0.381635 0.276896 -0.958811 -v 0.368165 0.273569 -0.946873 -v 0.352236 0.268988 -0.935266 -v 0.334460 0.263328 -0.924435 -v 0.312509 0.235630 -1.005102 -v 0.331884 0.246424 -1.012151 -v 0.350195 0.257006 -1.017021 -v 0.366737 0.266971 -1.019526 -v 0.380874 0.275934 -1.019570 -v 0.392063 0.283552 -1.017150 -v 0.399874 0.289531 -1.012360 -v 0.404008 0.293643 -1.005384 -v 0.404305 0.295729 -0.996490 -v 0.400753 0.295708 -0.986019 -v 0.393489 0.293582 -0.974374 -v 0.382793 0.289433 -0.962003 -v 0.369076 0.283419 -0.949381 -v 0.352864 0.275773 -0.936993 -v 0.334780 0.266786 -0.925315 -v 0.312080 0.238694 -1.005608 -v 0.331043 0.252433 -1.013144 -v 0.348974 0.265731 -1.018463 -v 0.365182 0.278074 -1.021362 -v 0.379046 0.288991 -1.021729 -v 0.390032 0.298060 -1.019549 -v 0.397719 0.304933 -1.014906 -v 0.401810 0.309346 -1.007980 -v 0.402149 0.311130 -0.999036 -v 0.398722 0.310216 -0.988418 -v 0.391662 0.306639 -0.976533 -v 0.381239 0.300537 -0.963839 -v 0.367854 0.292144 -0.950824 -v 0.352022 0.281782 -0.937987 -v 0.334351 0.269850 -0.925822 -v 0.310919 0.241244 -1.005721 -v 0.328766 0.257436 -1.013366 -v 0.345668 0.272994 -1.018785 -v 0.360975 0.287319 -1.021771 -v 0.374098 0.299861 -1.022209 -v 0.384535 0.310138 -1.020083 -v 0.391882 0.317756 -1.015474 -v 0.395859 0.322420 -1.008559 -v 0.396312 0.323953 -0.999603 -v 0.393224 0.322295 -0.988952 -v 0.386714 0.317510 -0.977014 -v 0.377031 0.309782 -0.964248 -v 0.364548 0.299407 -0.951145 -v 0.349745 0.286785 -0.938208 -v 0.333190 0.272401 -0.925935 -v 0.309071 0.243184 -1.005436 -v 0.325140 0.261241 -1.012806 -v 0.340404 0.278517 -1.017973 -v 0.354275 0.294349 -1.020737 -v 0.366221 0.308128 -1.020994 -v 0.375781 0.319324 -1.018733 -v 0.382590 0.327507 -1.014040 -v 0.386385 0.332362 -1.007097 -v 0.387020 0.333704 -0.998169 -v 0.384471 0.331480 -0.987601 -v 0.378836 0.325776 -0.975798 -v 0.370332 0.316812 -0.963214 -v 0.359285 0.304931 -0.950333 -v 0.346120 0.290590 -0.937649 -v 0.331342 0.274340 -0.925650 -v 0.306606 0.244438 -1.004764 -v 0.320306 0.263701 -1.011487 -v 0.333385 0.282089 -1.016058 -v 0.345342 0.298894 -1.018301 -v 0.355716 0.313472 -1.018129 -v 0.364109 0.325262 -1.015549 -v 0.370199 0.333811 -1.010660 -v 0.373751 0.338790 -1.003651 -v 0.374629 0.340009 -0.994790 -v 0.372799 0.337419 -0.984418 -v 0.368332 0.331121 -0.972933 -v 0.361398 0.321357 -0.960778 -v 0.352266 0.308502 -0.948419 -v 0.341285 0.293050 -0.936330 -v 0.328877 0.275594 -0.924977 -v 0.303619 0.244958 -1.003730 -v 0.314447 0.264722 -1.009460 -v 0.324880 0.283570 -1.013115 -v 0.334517 0.300780 -1.014555 -v 0.342988 0.315690 -1.013724 -v 0.349967 0.327726 -1.010655 -v 0.355185 0.336427 -1.005465 -v 0.358443 0.341458 -0.998354 -v 0.359615 0.342624 -0.989594 -v 0.358656 0.339883 -0.979524 -v 0.355604 0.333339 -0.968529 -v 0.350574 0.323243 -0.957032 -v 0.343761 0.309984 -0.945476 -v 0.335427 0.294070 -0.934303 -v 0.325891 0.276115 -0.923944 -v 0.300226 0.244725 -1.002375 -v 0.307791 0.264264 -1.006802 -v 0.315217 0.282906 -1.009257 -v 0.322218 0.299934 -1.009644 -v 0.328525 0.314695 -1.007950 -v 0.333897 0.326621 -1.004239 -v 0.338126 0.335254 -0.998653 -v 0.341049 0.340261 -0.991409 -v 0.342556 0.341451 -0.982783 -v 0.342587 0.338778 -0.973107 -v 0.341141 0.332344 -0.962754 -v 0.338275 0.322397 -0.952121 -v 0.334098 0.309319 -0.941617 -v 0.328770 0.293612 -0.931645 -v 0.322497 0.275881 -0.922589 -v 0.296556 0.243747 -1.000751 -v 0.300592 0.262345 -1.003616 -v 0.304766 0.280120 -1.004631 -v 0.308917 0.296389 -1.003757 -v 0.312885 0.310526 -1.001027 -v 0.316517 0.321989 -0.996546 -v 0.319676 0.330336 -0.990487 -v 0.322238 0.335247 -0.983082 -v 0.324106 0.336533 -0.974617 -v 0.325207 0.334145 -0.965415 -v 0.325500 0.328175 -0.955831 -v 0.324973 0.318852 -0.946234 -v 0.323647 0.306533 -0.936991 -v 0.321572 0.291694 -0.928459 -v 0.318828 0.274903 -0.920965 -v 0.292751 0.242061 -0.998920 -v 0.293128 0.259039 -1.000024 -v 0.293929 0.275321 -0.999416 -v 0.295124 0.290281 -0.997119 -v 0.296666 0.303344 -0.993221 -v 0.298497 0.314008 -0.987873 -v 0.300545 0.321863 -0.981280 -v 0.302732 0.326608 -0.973695 -v 0.304975 0.328061 -0.965410 -v 0.307186 0.326164 -0.956742 -v 0.309282 0.320992 -0.948026 -v 0.311181 0.312743 -0.939596 -v 0.312810 0.301734 -0.931776 -v 0.314107 0.288388 -0.924866 -v 0.315022 0.273218 -0.919133 -v 0.315520 0.256806 -0.914796 -v 0.288956 0.239734 -0.996952 -v 0.285684 0.254473 -0.996163 -v 0.283123 0.268692 -0.993811 -v 0.281370 0.281844 -0.989986 -v 0.280494 0.293423 -0.984834 -v 0.280527 0.302984 -0.978554 -v 0.281468 0.310161 -0.971386 -v 0.283282 0.314677 -0.963607 -v 0.285898 0.316358 -0.955516 -v 0.289216 0.315141 -0.947422 -v 0.293109 0.311071 -0.939638 -v 0.297427 0.304306 -0.932463 -v 0.302004 0.295105 -0.926171 -v 0.306664 0.283822 -0.921006 -v 0.311228 0.270890 -0.917165 -v 0.285318 0.236853 -0.994923 -v 0.278548 0.248822 -0.992183 -v 0.272763 0.260488 -0.988033 -v 0.268184 0.271403 -0.982632 -v 0.264988 0.281145 -0.976186 -v 0.263298 0.289342 -0.968945 -v 0.263178 0.295679 -0.961186 -v 0.264634 0.299911 -0.953207 -v 0.267608 0.301876 -0.945315 -v 0.271988 0.301499 -0.937814 -v 0.277604 0.298794 -0.930991 -v 0.284241 0.293865 -0.925109 -v 0.291644 0.286902 -0.920393 -v 0.299527 0.278171 -0.917026 -v 0.307589 0.268009 -0.915136 -v 0.281976 0.233530 -0.992911 -v 0.271993 0.242304 -0.988237 -v 0.263246 0.251026 -0.982303 -v 0.256072 0.259359 -0.975339 -v 0.250746 0.266983 -0.967611 -v 0.247473 0.273606 -0.959417 -v 0.246379 0.278973 -0.951071 -v 0.247505 0.282878 -0.942894 -v 0.250809 0.285171 -0.935200 -v 0.256163 0.285763 -0.928286 -v 0.263362 0.284632 -0.922416 -v 0.272129 0.281821 -0.917816 -v 0.282127 0.277439 -0.914664 -v 0.292972 0.271653 -0.913079 -v 0.304248 0.264686 -0.913124 -v 0.279060 0.229892 -0.990993 -v 0.266272 0.235169 -0.984475 -v 0.254940 0.240667 -0.976842 -v 0.245500 0.246175 -0.968388 -v 0.238315 0.251480 -0.959438 -v 0.233660 0.256380 -0.950335 -v 0.231715 0.260687 -0.941430 -v 0.232554 0.264233 -0.933064 -v 0.236145 0.266884 -0.925559 -v 0.242350 0.268537 -0.919204 -v 0.250930 0.269129 -0.914242 -v 0.261557 0.268637 -0.910865 -v 0.273821 0.267080 -0.909202 -v 0.287251 0.264518 -0.909318 -v 0.301331 0.261049 -0.911206 -v 0.276680 0.226080 -0.989243 -v 0.261603 0.227691 -0.981043 -v 0.248162 0.229811 -0.971859 -v 0.236874 0.232357 -0.962046 -v 0.228171 0.235233 -0.951980 -v 0.222389 0.238327 -0.942049 -v 0.219750 0.241521 -0.932633 -v 0.220354 0.244692 -0.924095 -v 0.224180 0.247719 -0.916763 -v 0.231079 0.250484 -0.910918 -v 0.240787 0.252881 -0.906785 -v 0.252931 0.254820 -0.904523 -v 0.267043 0.256224 -0.904220 -v 0.282582 0.257040 -0.905885 -v 0.298951 0.257237 -0.909457 -v 0.274928 0.222240 -0.987729 -v 0.258167 0.220158 -0.978072 -v 0.243174 0.218874 -0.967546 -v 0.230525 0.218437 -0.956557 -v 0.220706 0.218865 -0.945526 -v 0.214094 0.220140 -0.934877 -v 0.210944 0.222214 -0.925019 -v 0.211376 0.225007 -0.916332 -v 0.215374 0.228411 -0.909149 -v 0.222784 0.232296 -0.903746 -v 0.233322 0.236513 -0.900330 -v 0.246582 0.240900 -0.899034 -v 0.262055 0.245287 -0.899907 -v 0.279146 0.249506 -0.902915 -v 0.297199 0.253396 -0.907942 -v 0.273872 0.218519 -0.986508 -v 0.256096 0.212858 -0.975677 -v 0.240167 0.208277 -0.964069 -v 0.226698 0.204950 -0.952131 -v 0.216205 0.203005 -0.940322 -v 0.209094 0.202518 -0.929094 -v 0.205635 0.203506 -0.918880 -v 0.205963 0.205932 -0.910073 -v 0.210065 0.209704 -0.903010 -v 0.217783 0.214674 -0.897963 -v 0.228821 0.220654 -0.895126 -v 0.242755 0.227412 -0.894608 -v 0.259048 0.234690 -0.896429 -v 0.277075 0.242207 -0.900519 -v 0.296143 0.249675 -0.906721 -v 0.273552 0.215060 -0.985627 -v 0.255469 0.206074 -0.973949 -v 0.239257 0.198427 -0.961561 -v 0.225539 0.192413 -0.948939 -v 0.214843 0.188264 -0.936568 -v 0.207580 0.186138 -0.924923 -v 0.204028 0.186117 -0.914453 -v 0.204324 0.188203 -0.905558 -v 0.208458 0.192315 -0.898582 -v 0.216269 0.198295 -0.893792 -v 0.227459 0.205912 -0.891373 -v 0.241596 0.214876 -0.891416 -v 0.258137 0.224840 -0.893921 -v 0.276448 0.235422 -0.898792 -v 0.295824 0.246216 -0.905840 -v 0.292812 0.225040 -0.996146 -v 0.273981 0.211996 -0.985120 -v 0.256310 0.200064 -0.972956 -v 0.240478 0.189703 -0.960119 -v 0.227093 0.181309 -0.947103 -v 0.216671 0.175207 -0.934409 -v 0.209610 0.171630 -0.922525 -v 0.206184 0.170716 -0.911906 -v 0.206523 0.172500 -0.902962 -v 0.210614 0.176913 -0.896036 -v 0.218300 0.183787 -0.891394 -v 0.229286 0.192856 -0.889214 -v 0.243150 0.203772 -0.889580 -v 0.259359 0.216116 -0.892479 -v 0.277289 0.229413 -0.897798 -v 0.296253 0.243153 -0.905334 -v 0.275142 0.209446 -0.985008 -v 0.258587 0.195061 -0.972734 -v 0.243784 0.182439 -0.959797 -v 0.231301 0.172065 -0.946694 -v 0.221618 0.164336 -0.933928 -v 0.215108 0.159551 -0.921991 -v 0.212020 0.157893 -0.911339 -v 0.212473 0.159426 -0.902384 -v 0.216450 0.164090 -0.895469 -v 0.223798 0.171708 -0.890859 -v 0.234234 0.181985 -0.888733 -v 0.247358 0.194527 -0.889171 -v 0.262665 0.208852 -0.892158 -v 0.279566 0.224410 -0.897577 -v 0.297413 0.240602 -0.905221 -v 0.218203 0.254350 -0.972109 -v 0.203426 0.238100 -0.960110 -v 0.190261 0.223760 -0.947426 -v 0.179213 0.211878 -0.934544 -v 0.170709 0.202914 -0.921960 -v 0.165074 0.197210 -0.910158 -v 0.162525 0.194986 -0.899589 -v 0.163160 0.196328 -0.890662 -v 0.166955 0.201183 -0.883719 -v 0.173764 0.209366 -0.879026 -v 0.183325 0.220562 -0.876765 -v 0.195270 0.234341 -0.877021 -v 0.209141 0.250173 -0.879786 -v 0.224405 0.267449 -0.884953 -v 0.240475 0.285506 -0.892323 -v 0.220668 0.253096 -0.972782 -v 0.208261 0.235641 -0.961429 -v 0.197280 0.220188 -0.949340 -v 0.188147 0.207333 -0.936981 -v 0.181214 0.197569 -0.924825 -v 0.176746 0.191271 -0.913341 -v 0.174916 0.188682 -0.902969 -v 0.175794 0.189900 -0.894108 -v 0.179346 0.194879 -0.887098 -v 0.185436 0.203428 -0.882210 -v 0.193829 0.215218 -0.879630 -v 0.204204 0.229796 -0.879458 -v 0.216160 0.246601 -0.881701 -v 0.229240 0.264989 -0.886271 -v 0.242940 0.284252 -0.892995 -v 0.223655 0.252576 -0.973815 -v 0.214119 0.234620 -0.963456 -v 0.205784 0.218707 -0.952283 -v 0.198971 0.205447 -0.940727 -v 0.193942 0.195351 -0.929230 -v 0.190889 0.188807 -0.918235 -v 0.189930 0.186066 -0.908164 -v 0.191102 0.187233 -0.899405 -v 0.194360 0.192263 -0.892294 -v 0.199579 0.200964 -0.887104 -v 0.206557 0.213000 -0.884034 -v 0.215028 0.227910 -0.883204 -v 0.224665 0.245120 -0.884644 -v 0.235098 0.263969 -0.888299 -v 0.245926 0.283732 -0.894028 -v 0.227048 0.252809 -0.975170 -v 0.220775 0.235078 -0.966114 -v 0.215448 0.219371 -0.956142 -v 0.211271 0.206293 -0.945638 -v 0.208404 0.196346 -0.935005 -v 0.206959 0.189912 -0.924652 -v 0.206990 0.187239 -0.914976 -v 0.208496 0.188429 -0.906350 -v 0.211420 0.193437 -0.899106 -v 0.215649 0.202069 -0.893520 -v 0.221020 0.213995 -0.889809 -v 0.227327 0.228756 -0.888115 -v 0.234328 0.245784 -0.888502 -v 0.241754 0.264426 -0.890956 -v 0.249319 0.283965 -0.895383 -v 0.230718 0.253787 -0.976794 -v 0.227974 0.236996 -0.969300 -v 0.225899 0.222157 -0.960768 -v 0.224572 0.209839 -0.951525 -v 0.224045 0.200515 -0.941928 -v 0.224338 0.194545 -0.932344 -v 0.225440 0.192157 -0.923142 -v 0.227307 0.193443 -0.914677 -v 0.229870 0.198354 -0.907272 -v 0.233028 0.206701 -0.901213 -v 0.236661 0.218164 -0.896732 -v 0.240629 0.232301 -0.894002 -v 0.244779 0.248570 -0.893128 -v 0.248953 0.266345 -0.894143 -v 0.252989 0.284944 -0.897008 -v 0.234523 0.255472 -0.978626 -v 0.235438 0.240302 -0.972892 -v 0.236735 0.226956 -0.965983 -v 0.238365 0.215947 -0.958163 -v 0.240264 0.207698 -0.949733 -v 0.242359 0.202526 -0.941017 -v 0.244570 0.200629 -0.932349 -v 0.246813 0.202082 -0.924064 -v 0.249001 0.206827 -0.916479 -v 0.251049 0.214682 -0.909886 -v 0.252879 0.225347 -0.904537 -v 0.254422 0.238410 -0.900640 -v 0.255616 0.253369 -0.898343 -v 0.256418 0.269651 -0.897735 -v 0.256795 0.286629 -0.898839 -v 0.238318 0.257800 -0.980594 -v 0.242882 0.244868 -0.976753 -v 0.247542 0.233585 -0.971587 -v 0.252118 0.224384 -0.965296 -v 0.256436 0.217619 -0.958120 -v 0.260329 0.213549 -0.950336 -v 0.263647 0.212332 -0.942243 -v 0.266264 0.214013 -0.934152 -v 0.268077 0.218529 -0.926373 -v 0.269019 0.225706 -0.919205 -v 0.269052 0.235267 -0.912925 -v 0.268175 0.246847 -0.907773 -v 0.266422 0.259998 -0.903948 -v 0.263861 0.274217 -0.901596 -v 0.260589 0.288957 -0.900807 -v 0.241956 0.260681 -0.982623 -v 0.250018 0.250519 -0.980733 -v 0.257902 0.241789 -0.977365 -v 0.265305 0.234825 -0.972650 -v 0.271941 0.229896 -0.966768 -v 0.277558 0.227191 -0.959945 -v 0.281937 0.226814 -0.952444 -v 0.284912 0.228779 -0.944552 -v 0.286367 0.233011 -0.936573 -v 0.286247 0.239348 -0.928814 -v 0.284557 0.247545 -0.921573 -v 0.281361 0.257288 -0.915127 -v 0.276783 0.268202 -0.909726 -v 0.270997 0.279868 -0.905576 -v 0.264227 0.291837 -0.902836 -v 0.245298 0.264004 -0.984635 -v 0.256573 0.257037 -0.984680 -v 0.267418 0.251252 -0.983095 -v 0.277416 0.246869 -0.979943 -v 0.286184 0.244058 -0.975343 -v 0.293383 0.242927 -0.969473 -v 0.298737 0.243519 -0.962559 -v 0.302041 0.245812 -0.954865 -v 0.303167 0.249717 -0.946688 -v 0.302072 0.255084 -0.938342 -v 0.298799 0.261707 -0.930148 -v 0.293473 0.269332 -0.922420 -v 0.286299 0.277665 -0.915456 -v 0.277552 0.286386 -0.909522 -v 0.267569 0.295160 -0.904848 -v 0.248215 0.267641 -0.986552 -v 0.262295 0.264172 -0.988441 -v 0.275725 0.261610 -0.988557 -v 0.287989 0.260053 -0.986894 -v 0.298615 0.259561 -0.983517 -v 0.307196 0.260153 -0.978555 -v 0.313401 0.261806 -0.972200 -v 0.316992 0.264457 -0.964695 -v 0.317831 0.268004 -0.956329 -v 0.315886 0.272310 -0.947424 -v 0.311231 0.277210 -0.938321 -v 0.304045 0.282516 -0.929371 -v 0.294606 0.288023 -0.920917 -v 0.283274 0.293521 -0.913284 -v 0.270486 0.298798 -0.906766 -v 0.250594 0.271454 -0.988302 -v 0.266963 0.271650 -0.991874 -v 0.282502 0.272467 -0.993539 -v 0.296615 0.273871 -0.993236 -v 0.308758 0.275809 -0.990974 -v 0.318466 0.278207 -0.986841 -v 0.325366 0.280972 -0.980996 -v 0.329191 0.283998 -0.973664 -v 0.329796 0.287169 -0.965126 -v 0.327156 0.290363 -0.955710 -v 0.321374 0.293457 -0.945778 -v 0.312672 0.296333 -0.935713 -v 0.301383 0.298880 -0.925900 -v 0.287942 0.300999 -0.916716 -v 0.272866 0.302610 -0.908516 -v 0.252346 0.275294 -0.989817 -v 0.270399 0.279184 -0.994844 -v 0.287490 0.283403 -0.997852 -v 0.302964 0.287791 -0.998725 -v 0.316224 0.292177 -0.997429 -v 0.326762 0.296394 -0.994013 -v 0.334172 0.300279 -0.988610 -v 0.338170 0.303684 -0.981427 -v 0.338602 0.306476 -0.972740 -v 0.335451 0.308550 -0.962882 -v 0.328840 0.309826 -0.952233 -v 0.319020 0.310253 -0.941202 -v 0.306371 0.309816 -0.930213 -v 0.291378 0.308532 -0.919687 -v 0.274617 0.306450 -0.910030 -v 0.253402 0.279015 -0.991038 -v 0.272470 0.286483 -0.997240 -v 0.290498 0.294000 -1.001330 -v 0.306791 0.301278 -1.003151 -v 0.320724 0.308036 -1.002633 -v 0.331762 0.314016 -0.999796 -v 0.339480 0.318987 -0.994749 -v 0.343582 0.322758 -0.987686 -v 0.343910 0.325184 -0.978878 -v 0.340452 0.326172 -0.968665 -v 0.333340 0.325685 -0.957437 -v 0.322848 0.323740 -0.945628 -v 0.309378 0.320413 -0.933690 -v 0.293450 0.315832 -0.922082 -v 0.275673 0.310172 -0.911251 -v 0.253722 0.282474 -0.991919 -v 0.273097 0.293268 -0.998967 -v 0.291408 0.303850 -1.003838 -v 0.307950 0.313814 -1.006343 -v 0.322087 0.322778 -1.006386 -v 0.333276 0.330396 -1.003967 -v 0.341088 0.336375 -0.999177 -v 0.345221 0.340487 -0.992200 -v 0.345518 0.342573 -0.983306 -v 0.341966 0.342552 -0.972835 -v 0.334702 0.340426 -0.961191 -v 0.324006 0.336277 -0.948820 -v 0.310289 0.330263 -0.936198 -v 0.294077 0.322616 -0.923810 -v 0.275993 0.313630 -0.912132 -v 0.253293 0.285538 -0.992425 -v 0.272256 0.299277 -0.999961 -v 0.290187 0.312575 -1.005280 -v 0.306395 0.324918 -1.008179 -v 0.320259 0.335835 -1.008545 -v 0.331245 0.344904 -1.006365 -v 0.338932 0.351777 -1.001723 -v 0.343023 0.356190 -0.994797 -v 0.343362 0.357974 -0.985852 -v 0.339935 0.357060 -0.975234 -v 0.332875 0.353483 -0.963350 -v 0.322452 0.347381 -0.950656 -v 0.309068 0.338988 -0.937640 -v 0.293235 0.328626 -0.924803 -v 0.275564 0.316694 -0.912638 -v 0.252132 0.288088 -0.992538 -v 0.269979 0.304280 -1.000182 -v 0.286881 0.319838 -1.005601 -v 0.302188 0.334163 -1.008588 -v 0.315311 0.346705 -1.009026 -v 0.325748 0.356982 -1.006900 -v 0.333095 0.364600 -1.002290 -v 0.337072 0.369264 -0.995375 -v 0.337525 0.370797 -0.986420 -v 0.334438 0.369139 -0.975768 -v 0.327927 0.364354 -0.963830 -v 0.318244 0.356626 -0.951065 -v 0.305762 0.346251 -0.937962 -v 0.290958 0.333629 -0.925025 -v 0.274403 0.319245 -0.912751 -v 0.250284 0.290028 -0.992253 -v 0.266353 0.308085 -0.999623 -v 0.281617 0.325361 -1.004789 -v 0.295488 0.341193 -1.007554 -v 0.307434 0.354972 -1.007810 -v 0.316995 0.366168 -1.005549 -v 0.323803 0.374351 -1.000857 -v 0.327598 0.379206 -0.993913 -v 0.328233 0.380548 -0.984986 -v 0.325684 0.378324 -0.974418 -v 0.320050 0.372620 -0.962615 -v 0.311545 0.363656 -0.950031 -v 0.300498 0.351775 -0.937149 -v 0.287333 0.337434 -0.924465 -v 0.272555 0.321184 -0.912466 -v 0.247819 0.291282 -0.991580 -v 0.261519 0.310545 -0.998304 -v 0.274598 0.328933 -1.002875 -v 0.286555 0.345738 -1.005117 -v 0.296929 0.360316 -1.004946 -v 0.305322 0.372106 -1.002366 -v 0.311412 0.380655 -0.997477 -v 0.314964 0.385634 -0.990468 -v 0.315842 0.386853 -0.981607 -v 0.314012 0.384263 -0.971235 -v 0.309545 0.377965 -0.959750 -v 0.302612 0.368201 -0.947595 -v 0.293479 0.355346 -0.935235 -v 0.282498 0.339894 -0.923147 -v 0.270090 0.322438 -0.911794 -v 0.244833 0.291802 -0.990547 -v 0.255661 0.311566 -0.996277 -v 0.266094 0.330414 -0.999932 -v 0.275730 0.347624 -1.001372 -v 0.284201 0.362534 -1.000541 -v 0.291180 0.374570 -0.997472 -v 0.296398 0.383271 -0.992282 -v 0.299656 0.388301 -0.985170 -v 0.300828 0.389468 -0.976411 -v 0.299870 0.386727 -0.966341 -v 0.296817 0.380183 -0.955346 -v 0.291787 0.370087 -0.943849 -v 0.284974 0.356828 -0.932292 -v 0.276640 0.340914 -0.921120 -v 0.267104 0.322959 -0.910760 -v 0.241439 0.291569 -0.989192 -v 0.249004 0.311108 -0.993619 -v 0.256430 0.329750 -0.996073 -v 0.263431 0.346778 -0.996461 -v 0.269739 0.361539 -0.994766 -v 0.275110 0.373465 -0.991055 -v 0.279339 0.382098 -0.985470 -v 0.282262 0.387105 -0.978225 -v 0.283769 0.388295 -0.969599 -v 0.283800 0.385622 -0.959924 -v 0.282354 0.379188 -0.949571 -v 0.279488 0.369241 -0.938938 -v 0.275311 0.356163 -0.928434 -v 0.269983 0.340456 -0.918462 -v 0.263711 0.322725 -0.909405 -v 0.237769 0.290591 -0.987568 -v 0.241805 0.309189 -0.990433 -v 0.245979 0.326964 -0.991448 -v 0.250130 0.343233 -0.990573 -v 0.254098 0.357370 -0.987843 -v 0.257731 0.368833 -0.983363 -v 0.260889 0.377180 -0.977304 -v 0.263451 0.382091 -0.969899 -v 0.265319 0.383377 -0.961433 -v 0.266420 0.380989 -0.952232 -v 0.266713 0.375019 -0.942648 -v 0.266186 0.365695 -0.933050 -v 0.264860 0.353377 -0.923808 -v 0.262785 0.338538 -0.915275 -v 0.260041 0.321747 -0.907781 -v 0.233964 0.288905 -0.985736 -v 0.234341 0.305883 -0.986840 -v 0.235142 0.322165 -0.986232 -v 0.236337 0.337124 -0.983935 -v 0.237879 0.350187 -0.980038 -v 0.239710 0.360852 -0.974690 -v 0.241758 0.368707 -0.968097 -v 0.243945 0.373452 -0.960512 -v 0.246188 0.374905 -0.952226 -v 0.248400 0.373008 -0.943559 -v 0.250495 0.367836 -0.934843 -v 0.252394 0.359587 -0.926413 -v 0.254023 0.348578 -0.918593 -v 0.255320 0.335232 -0.911683 -v 0.256235 0.320062 -0.905950 -v 0.256733 0.303650 -0.901613 -v 0.230169 0.286578 -0.983768 -v 0.226898 0.301317 -0.982980 -v 0.224336 0.315536 -0.980628 -v 0.222583 0.328688 -0.976802 -v 0.221707 0.340267 -0.971650 -v 0.221740 0.349828 -0.965370 -v 0.222681 0.357005 -0.958203 -v 0.224495 0.361521 -0.950424 -v 0.227111 0.363202 -0.942332 -v 0.230430 0.361985 -0.934239 -v 0.234322 0.357915 -0.926455 -v 0.238640 0.351150 -0.919279 -v 0.243217 0.341949 -0.912988 -v 0.247877 0.330666 -0.907823 -v 0.252441 0.317734 -0.903982 -v 0.226531 0.283697 -0.981739 -v 0.219761 0.295666 -0.979000 -v 0.213976 0.307332 -0.974850 -v 0.209397 0.318247 -0.969448 -v 0.206201 0.327989 -0.963003 -v 0.204511 0.336186 -0.955762 -v 0.204391 0.342523 -0.948002 -v 0.205847 0.346755 -0.940024 -v 0.208822 0.348720 -0.932132 -v 0.213201 0.348343 -0.924630 -v 0.218817 0.345638 -0.917808 -v 0.225454 0.340709 -0.911925 -v 0.232857 0.333746 -0.907210 -v 0.240740 0.325015 -0.903843 -v 0.248803 0.314853 -0.901953 -v 0.223190 0.280374 -0.979727 -v 0.213206 0.289148 -0.975053 -v 0.204460 0.297870 -0.969120 -v 0.197285 0.306203 -0.962156 -v 0.191959 0.313827 -0.954428 -v 0.188686 0.320450 -0.946233 -v 0.187592 0.325817 -0.937887 -v 0.188718 0.329722 -0.929710 -v 0.192022 0.332015 -0.922017 -v 0.197376 0.332607 -0.915102 -v 0.204575 0.331476 -0.909232 -v 0.213342 0.328665 -0.904633 -v 0.223340 0.324283 -0.901480 -v 0.234186 0.318497 -0.899896 -v 0.245461 0.311530 -0.899941 -v 0.220273 0.276736 -0.977810 -v 0.207485 0.282013 -0.971291 -v 0.196153 0.287511 -0.963659 -v 0.186713 0.293018 -0.955205 -v 0.179528 0.298324 -0.946254 -v 0.174873 0.303224 -0.937152 -v 0.172928 0.307530 -0.928246 -v 0.173767 0.311077 -0.919880 -v 0.177358 0.313728 -0.912376 -v 0.183563 0.315381 -0.906020 -v 0.192143 0.315973 -0.901059 -v 0.202770 0.315481 -0.897682 -v 0.215034 0.313924 -0.896019 -v 0.228464 0.311362 -0.896134 -v 0.242544 0.307893 -0.898023 -v 0.217893 0.272924 -0.976060 -v 0.202816 0.274535 -0.967859 -v 0.189375 0.276655 -0.958676 -v 0.178087 0.279201 -0.948863 -v 0.169384 0.282077 -0.938797 -v 0.163602 0.285171 -0.928865 -v 0.160963 0.288365 -0.919450 -v 0.161567 0.291536 -0.910912 -v 0.165393 0.294562 -0.903579 -v 0.172292 0.297328 -0.897734 -v 0.182000 0.299725 -0.893602 -v 0.194144 0.301664 -0.891340 -v 0.208256 0.303068 -0.891036 -v 0.223795 0.303884 -0.892702 -v 0.240164 0.304081 -0.896273 -v 0.216141 0.269084 -0.974545 -v 0.199380 0.267002 -0.964888 -v 0.184387 0.265718 -0.954363 -v 0.171738 0.265281 -0.943374 -v 0.161919 0.265709 -0.932342 -v 0.155307 0.266984 -0.921693 -v 0.152157 0.269058 -0.911836 -v 0.152589 0.271851 -0.903148 -v 0.156587 0.275255 -0.895965 -v 0.163997 0.279140 -0.890562 -v 0.174535 0.283357 -0.887147 -v 0.187795 0.287744 -0.885851 -v 0.203268 0.292131 -0.886723 -v 0.220360 0.296350 -0.889731 -v 0.238412 0.300240 -0.894759 -v 0.215085 0.265363 -0.973324 -v 0.197309 0.259702 -0.962493 -v 0.181380 0.255121 -0.950886 -v 0.167911 0.251794 -0.938948 -v 0.157419 0.249849 -0.927138 -v 0.150307 0.249362 -0.915911 -v 0.146848 0.250350 -0.905697 -v 0.147176 0.252776 -0.896889 -v 0.151278 0.256547 -0.889826 -v 0.158996 0.261518 -0.884780 -v 0.170034 0.267498 -0.881943 -v 0.183968 0.274256 -0.881425 -v 0.200261 0.281534 -0.883246 -v 0.218288 0.289051 -0.887336 -v 0.237357 0.296519 -0.893538 -v 0.214765 0.261904 -0.972444 -v 0.196682 0.252918 -0.960766 -v 0.180470 0.245271 -0.948378 -v 0.166752 0.239257 -0.935756 -v 0.156056 0.235108 -0.923385 -v 0.148793 0.232982 -0.911740 -v 0.145241 0.232961 -0.901269 -v 0.145538 0.235047 -0.892375 -v 0.149671 0.239159 -0.885399 -v 0.157483 0.245138 -0.880609 -v 0.168672 0.252756 -0.878189 -v 0.182809 0.261720 -0.878233 -v 0.199351 0.271684 -0.880738 -v 0.217661 0.282266 -0.885608 -v 0.237037 0.293060 -0.892657 -v 0.234025 0.271884 -0.982963 -v 0.215194 0.258840 -0.971937 -v 0.197523 0.246908 -0.959772 -v 0.181691 0.236547 -0.946935 -v 0.168306 0.228153 -0.933920 -v 0.157884 0.222051 -0.921226 -v 0.150824 0.218474 -0.909341 -v 0.147397 0.217560 -0.898723 -v 0.147736 0.219344 -0.889779 -v 0.151827 0.223757 -0.882853 -v 0.159513 0.230630 -0.878210 -v 0.170500 0.239699 -0.876030 -v 0.184363 0.250616 -0.876397 -v 0.200572 0.262960 -0.879295 -v 0.218502 0.276257 -0.884615 -v 0.237466 0.289997 -0.892151 -v 0.216355 0.256290 -0.971824 -v 0.199800 0.241905 -0.959551 -v 0.184997 0.229283 -0.946614 -v 0.172514 0.218909 -0.933511 -v 0.162831 0.211180 -0.920745 -v 0.156321 0.206395 -0.908807 -v 0.153233 0.204737 -0.898156 -v 0.153686 0.206270 -0.889201 -v 0.157663 0.210934 -0.882285 -v 0.165011 0.218552 -0.877676 -v 0.175447 0.228829 -0.875550 -v 0.188571 0.241371 -0.875988 -v 0.203878 0.255696 -0.878974 -v 0.220779 0.271254 -0.884393 -v 0.238627 0.287446 -0.892038 -vn -0.603229 -0.795221 -0.060915 -vn -0.595019 -0.681906 -0.425306 -vn -0.396496 -0.817225 -0.418165 -vn -0.419721 -0.313150 -0.851894 -vn -0.385907 -0.256752 -0.886074 -vn -0.365856 -0.273995 -0.889401 -vn 0.230811 0.020173 0.972777 -vn 0.171026 -0.062593 0.983245 -vn 0.290597 -0.029206 0.956389 -vn -0.484970 -0.764519 0.424574 -vn -0.335093 -0.940214 -0.060579 -vn -0.456465 -0.377300 -0.805750 -vn -0.379620 -0.348277 -0.857051 -vn 0.276864 0.086550 0.956999 -vn 0.315195 0.054170 0.947447 -vn -0.251717 -0.558855 0.790124 -vn -0.191076 -0.900021 0.391644 -vn -0.498306 -0.455336 -0.737785 -vn -0.392468 -0.432966 -0.811457 -vn 0.315348 0.143895 0.937986 -vn 0.334941 0.127537 0.933561 -vn -0.046052 -0.335459 0.940916 -vn 0.127384 -0.444197 0.886807 -vn -0.546587 -0.555406 -0.626667 -vn -0.403516 -0.535295 -0.741997 -vn 0.085971 -0.174383 0.980895 -vn 0.207831 -0.262917 0.942137 -vn -0.409009 -0.663747 -0.626179 -vn 0.257241 -0.130680 0.957457 -vn -0.195349 -0.891232 -0.409284 -vn -0.345470 -0.287576 -0.893246 -vn 0.348155 -0.067507 0.934965 -vn -0.082888 -0.994110 -0.069613 -vn -0.337718 -0.376446 -0.862667 -vn 0.352824 0.028565 0.935240 -vn -0.007752 -0.682333 0.730949 -vn 0.197821 -0.734703 0.648885 -vn -0.324717 -0.476821 -0.816797 -vn 0.354167 0.114750 0.928098 -vn 0.277871 -0.508042 0.815271 -vn -0.302683 -0.595416 -0.744194 -vn 0.318125 -0.323740 0.891018 -vn -0.263985 -0.737236 -0.621906 -vn 0.338145 -0.181310 0.923460 -vn 0.413770 -0.359905 0.836177 -vn -0.126011 -0.776727 -0.617084 -vn 0.411145 -0.214972 0.885830 -vn -0.016022 -0.915189 -0.402661 -vn -0.325632 -0.297433 -0.897458 -vn 0.401624 -0.094485 0.910886 -vn 0.065065 -0.939421 0.336436 -vn 0.123203 -0.988769 -0.084262 -vn -0.296182 -0.396893 -0.868740 -vn 0.388409 0.010071 0.921415 -vn 0.357158 -0.742424 0.566729 -vn -0.257363 -0.507614 -0.822199 -vn 0.372417 0.105533 0.922025 -vn 0.401379 -0.537400 0.741661 -vn -0.203497 -0.634297 -0.745811 -vn 0.389233 0.099948 0.915677 -vn 0.501846 -0.542161 0.673910 -vn -0.111850 -0.652974 -0.749046 -vn 0.495315 -0.375500 0.783319 -vn -0.003479 -0.788049 -0.615589 -vn 0.475661 -0.232948 0.848201 -vn 0.133396 -0.905759 -0.402203 -vn -0.307016 -0.303446 -0.902005 -vn 0.450026 -0.110294 0.886166 -vn 0.261513 -0.924284 0.277963 -vn 0.283059 -0.953429 -0.103916 -vn -0.256935 -0.409284 -0.875454 -vn 0.421064 -0.001221 0.907010 -vn 0.479873 -0.725211 0.493698 -vn -0.193945 -0.525071 -0.828639 -vn -0.221473 -0.413526 -0.883114 -vn 0.450270 -0.005341 0.892850 -vn 0.408460 -0.884945 0.223548 -vn 0.577136 -0.693472 0.431257 -vn -0.137181 -0.529618 -0.837062 -vn 0.404187 0.097934 0.909391 -vn 0.584674 -0.529099 0.614917 -vn -0.031495 -0.653798 -0.755974 -vn 0.564745 -0.373974 0.735618 -vn 0.100314 -0.777764 -0.620472 -vn 0.531846 -0.236641 0.813074 -vn 0.254219 -0.875729 -0.410413 -vn -0.290414 -0.305582 -0.906766 -vn 0.492874 -0.115299 0.862392 -vn 0.406873 -0.904324 -0.128819 -vn 0.350749 -0.832575 -0.428632 -vn -0.276254 -0.303903 -0.911740 -vn 0.529862 -0.109989 0.840877 -vn 0.521287 -0.835414 0.174047 -vn 0.504807 -0.848323 -0.159551 -vn -0.191290 -0.409833 -0.891842 -vn 0.475509 -0.002380 0.879696 -vn 0.657369 -0.651723 0.378216 -vn -0.089175 -0.522141 -0.848170 -vn 0.417005 0.099460 0.903439 -vn 0.654500 -0.502121 0.565203 -vn 0.035432 -0.639210 -0.768181 -vn 0.624012 -0.357830 0.694632 -vn 0.185034 -0.751030 -0.633778 -vn 0.580157 -0.227332 0.782098 -vn 0.674673 -0.328471 0.660970 -vn 0.251381 -0.711020 -0.656697 -vn 0.620991 -0.205847 0.756279 -vn 0.427107 -0.779748 -0.457747 -vn -0.264992 -0.298654 -0.916807 -vn 0.560778 -0.094852 0.822504 -vn 0.611866 -0.780511 0.128117 -vn 0.584399 -0.787194 -0.196875 -vn -0.167364 -0.398694 -0.901669 -vn 0.496323 0.007355 0.868068 -vn 0.726402 -0.601245 0.332804 -vn -0.051393 -0.503647 -0.862362 -vn 0.427442 0.104373 0.897977 -vn 0.714713 -0.462905 0.524247 -vn 0.087893 -0.611225 -0.786523 -vn 0.512375 0.023652 0.858425 -vn 0.767449 -0.411634 0.491470 -vn 0.299844 -0.659139 -0.689627 -vn 0.717612 -0.286416 0.634785 -vn 0.486099 -0.717826 -0.498367 -vn 0.654408 -0.172735 0.736106 -vn 0.650410 -0.719962 -0.242042 -vn -0.150334 -0.380566 -0.912412 -vn 0.688040 -0.720756 0.083895 -vn 0.754906 -0.654622 0.039430 -vn -0.024689 -0.475051 -0.879604 -vn 0.585253 -0.070284 0.807764 -vn 0.787957 -0.541307 0.293374 -vn 0.125156 -0.571123 -0.811243 -vn 0.602832 -0.036714 0.796991 -vn 0.844264 -0.469497 0.258400 -vn 0.146550 -0.519639 -0.841700 -vn 0.435347 0.112461 0.893185 -vn 0.523240 0.046083 0.850917 -vn 0.330271 -0.595477 -0.732292 -vn 0.813715 -0.347056 0.466231 -vn 0.528672 -0.645497 -0.551164 -vn 0.752922 -0.231330 0.616077 -vn 0.705344 -0.643696 -0.296823 -vn -0.256844 -0.290048 -0.921873 -vn -0.140690 -0.356029 -0.923795 -vn 0.680044 -0.128208 0.721854 -vn 0.815455 -0.578753 -0.007355 -vn -0.009857 -0.437086 -0.899350 -vn -0.251930 -0.278298 -0.926847 -vn -0.138829 -0.325694 -0.935209 -vn 0.697043 -0.072237 0.713370 -vn 0.870937 -0.487808 -0.058992 -vn -0.007324 -0.390484 -0.920560 -vn 0.612812 0.005432 0.790185 -vn 0.151311 -0.457076 -0.876431 -vn 0.440504 0.123569 0.889187 -vn 0.528520 0.074252 0.845637 -vn 0.896115 -0.381512 0.226630 -vn 0.341655 -0.519028 -0.783471 -vn 0.853267 -0.266732 0.448042 -vn 0.553972 -0.559618 -0.616382 -vn 0.779809 -0.162236 0.604572 -vn 0.749321 -0.553514 -0.363475 -vn 0.558458 -0.455611 -0.693167 -vn 0.796289 -0.077670 0.599872 -vn 0.779290 -0.442000 -0.444166 -vn -0.250557 -0.263619 -0.931486 -vn -0.144871 -0.290384 -0.945860 -vn 0.703879 -0.004730 0.710288 -vn 0.920011 -0.373547 -0.118320 -vn -0.017457 -0.336283 -0.941588 -vn 0.614246 0.055666 0.787103 -vn 0.138585 -0.383740 -0.912961 -vn 0.442763 0.137577 0.885983 -vn 0.527696 0.107578 0.842586 -vn 0.942289 -0.270791 0.196814 -vn 0.331828 -0.428144 -0.840541 -vn 0.884152 -0.166784 0.436384 -vn 0.977538 -0.127750 0.167425 -vn 0.297830 -0.321696 -0.898770 -vn 0.901578 -0.042238 0.430494 -vn 0.535630 -0.328318 -0.777978 -vn 0.798761 0.023988 0.601123 -vn 0.787103 -0.299081 -0.539445 -vn -0.252815 -0.246376 -0.935575 -vn -0.158635 -0.251198 -0.954833 -vn 0.698355 0.074129 0.711875 -vn 0.956328 -0.223579 -0.188147 -vn -0.040010 -0.275796 -0.960356 -vn 0.606067 0.113224 0.787286 -vn 0.107761 -0.300455 -0.947661 -vn 0.441877 0.154118 0.883694 -vn 0.520310 0.145207 0.841517 -vn 0.587024 0.176763 0.790002 -vn 0.988800 0.059053 0.136937 -vn 0.058931 -0.209296 -0.976043 -vn 0.437696 0.172826 0.882321 -vn 0.505997 0.186224 0.842158 -vn 0.237007 -0.200537 -0.950560 -vn 0.896359 0.111576 0.428999 -vn 0.476394 -0.174535 -0.861721 -vn 0.781671 0.143406 0.606952 -vn 0.756523 -0.114353 -0.643880 -vn -0.258705 -0.227119 -0.938841 -vn -0.179571 -0.209449 -0.961180 -vn 0.677633 0.163427 0.717002 -vn 0.962889 -0.022645 -0.268929 -vn -0.074343 -0.210913 -0.974639 -vn -0.268136 -0.206397 -0.941008 -vn -0.206977 -0.166662 -0.964019 -vn 0.638508 0.260689 0.724082 -vn 0.905759 0.236335 -0.351726 -vn -0.119053 -0.144200 -0.982330 -vn 0.555925 0.244392 0.794458 -vn 0.949492 0.295633 0.105014 -vn -0.006409 -0.114078 -0.993439 -vn 0.430067 0.193243 0.881832 -vn 0.484390 0.229316 0.844234 -vn 0.148839 -0.069704 -0.986389 -vn 0.853420 0.295297 0.429426 -vn 0.372051 0.001404 -0.928190 -vn 0.737663 0.278512 0.615009 -vn 0.663472 0.113041 -0.739586 -vn 0.222510 0.181219 -0.957915 -vn 0.659658 0.421155 0.622456 -vn 0.489334 0.356090 -0.796045 -vn -0.280892 -0.184851 -0.941740 -vn -0.239967 -0.124821 -0.962706 -vn 0.578539 0.360820 0.731468 -vn 0.745598 0.523728 -0.411969 -vn -0.172246 -0.079196 -0.981842 -vn 0.512131 0.312815 0.799890 -vn 0.824000 0.561357 0.076510 -vn -0.084994 -0.020936 -0.996155 -vn 0.418897 0.214789 0.882229 -vn 0.455397 0.272561 0.847530 -vn 0.037568 0.060030 -0.997467 -vn 0.754845 0.496200 0.428877 -vn 0.595019 0.681936 0.425306 -vn -0.086001 0.174383 -0.980895 -vn 0.546587 0.555406 0.626667 -vn 0.046052 0.335459 -0.940916 -vn 0.498306 0.455336 0.737785 -vn 0.251717 0.558855 -0.790094 -vn -0.296823 -0.163488 -0.940825 -vn -0.315348 -0.143925 -0.937986 -vn 0.456465 0.377300 0.805750 -vn 0.484970 0.764519 -0.424574 -vn -0.230811 -0.020173 -0.972777 -vn 0.419721 0.313120 0.851894 -vn 0.603229 0.795221 0.060915 -vn -0.171026 0.062593 -0.983245 -vn 0.404035 0.236488 0.883633 -vn 0.385876 0.256752 0.886074 -vn 0.379620 0.348277 0.857051 -vn 0.335063 0.940214 0.060549 -vn -0.290597 0.029206 -0.956389 -vn 0.365856 0.273995 0.889401 -vn 0.396496 0.817225 0.418165 -vn -0.257241 0.130680 -0.957457 -vn 0.409009 0.663747 0.626179 -vn -0.207831 0.262917 -0.942137 -vn 0.403546 0.535325 0.741997 -vn -0.127384 0.444197 -0.886807 -vn -0.276864 -0.086550 -0.956969 -vn -0.334910 -0.127537 -0.933561 -vn 0.392468 0.432966 0.811457 -vn 0.191076 0.900021 -0.391644 -vn -0.315226 -0.054170 -0.947447 -vn 0.324717 0.476821 0.816797 -vn 0.007721 0.682333 -0.730949 -vn -0.197821 0.734703 -0.648885 -vn -0.352824 -0.028565 -0.935240 -vn 0.337718 0.376446 0.862667 -vn 0.082888 0.994110 0.069613 -vn -0.348155 0.067507 -0.934996 -vn 0.345470 0.287576 0.893246 -vn 0.195349 0.891232 0.409284 -vn -0.338145 0.181310 -0.923429 -vn 0.263985 0.737236 0.621906 -vn -0.318125 0.323740 -0.891018 -vn 0.302683 0.595416 0.744163 -vn -0.277840 0.508042 -0.815271 -vn -0.354167 -0.114750 -0.928098 -vn 0.203497 0.634297 0.745811 -vn -0.401379 0.537400 -0.741661 -vn -0.372417 -0.105533 -0.922025 -vn 0.257363 0.507614 0.822230 -vn -0.065035 0.939451 -0.336436 -vn -0.357158 0.742424 -0.566729 -vn -0.388379 -0.010071 -0.921415 -vn 0.296213 0.396893 0.868740 -vn -0.123203 0.988769 0.084262 -vn -0.401624 0.094485 -0.910886 -vn 0.325632 0.297433 0.897458 -vn 0.016022 0.915189 0.402661 -vn -0.411145 0.214972 -0.885830 -vn 0.126011 0.776727 0.617084 -vn -0.413770 0.359905 -0.836177 -vn -0.475661 0.232948 -0.848201 -vn 0.003479 0.788049 0.615589 -vn -0.495315 0.375500 -0.783319 -vn 0.111850 0.652974 0.749046 -vn -0.501846 0.542161 -0.673910 -vn -0.389233 -0.099948 -0.915677 -vn 0.193945 0.525071 0.828639 -vn -0.261513 0.924284 -0.277963 -vn -0.479873 0.725211 -0.493698 -vn -0.421064 0.001221 -0.907010 -vn 0.256905 0.409284 0.875454 -vn -0.283059 0.953429 0.103916 -vn -0.450026 0.110294 -0.886166 -vn 0.307047 0.303446 0.901975 -vn -0.133396 0.905759 0.402203 -vn -0.408460 0.884945 -0.223548 -vn -0.406873 0.904324 0.128849 -vn -0.492874 0.115299 -0.862392 -vn 0.290414 0.305582 0.906766 -vn -0.254219 0.875729 0.410413 -vn -0.531846 0.236641 -0.813074 -vn -0.100314 0.777764 0.620472 -vn -0.564745 0.373974 -0.735618 -vn 0.031495 0.653798 0.755974 -vn -0.584674 0.529099 -0.614917 -vn -0.404187 -0.097934 -0.909391 -vn 0.137181 0.529618 0.837031 -vn -0.577105 0.693472 -0.431257 -vn -0.450270 0.005341 -0.892850 -vn 0.221473 0.413526 0.883114 -vn 0.089175 0.522141 0.848170 -vn -0.521287 0.835414 -0.174047 -vn -0.657369 0.651723 -0.378216 -vn -0.475509 0.002380 -0.879696 -vn 0.191290 0.409833 0.891842 -vn -0.504807 0.848323 0.159551 -vn -0.529893 0.109989 -0.840877 -vn 0.276254 0.303903 0.911740 -vn -0.350749 0.832575 0.428632 -vn -0.580157 0.227302 -0.782098 -vn -0.185034 0.751030 0.633778 -vn -0.624012 0.357830 -0.694632 -vn -0.035432 0.639210 0.768181 -vn -0.654500 0.502121 -0.565203 -vn -0.417005 -0.099460 -0.903439 -vn -0.087893 0.611225 0.786523 -vn -0.714713 0.462905 -0.524247 -vn -0.427442 -0.104373 -0.897977 -vn 0.051363 0.503647 0.862362 -vn -0.611866 0.780480 -0.128117 -vn -0.726402 0.601245 -0.332835 -vn -0.496323 -0.007355 -0.868068 -vn 0.167333 0.398694 0.901669 -vn -0.584399 0.787194 0.196875 -vn -0.560778 0.094852 -0.822504 -vn 0.264992 0.298654 0.916807 -vn -0.427107 0.779748 0.457717 -vn -0.620991 0.205847 -0.756279 -vn -0.251381 0.710990 0.656697 -vn -0.674673 0.328471 -0.660970 -vn -0.654408 0.172735 -0.736106 -vn -0.486099 0.717826 0.498367 -vn -0.717612 0.286416 -0.634785 -vn -0.299844 0.659139 0.689627 -vn -0.767449 0.411634 -0.491470 -vn -0.512375 -0.023652 -0.858425 -vn -0.125156 0.571123 0.811243 -vn -0.688040 0.720756 -0.083895 -vn -0.787957 0.541337 -0.293344 -vn -0.585253 0.070284 -0.807764 -vn 0.024689 0.475051 0.879604 -vn -0.754906 0.654622 -0.039430 -vn 0.150334 0.380566 0.912412 -vn -0.650410 0.719962 0.242042 -vn -0.815455 0.578753 0.007355 -vn -0.680044 0.128178 -0.721854 -vn 0.256844 0.290048 0.921873 -vn 0.140690 0.356029 0.923795 -vn -0.705344 0.643696 0.296823 -vn -0.752922 0.231330 -0.616077 -vn -0.528703 0.645497 0.551164 -vn -0.813715 0.347087 -0.466231 -vn -0.330271 0.595508 0.732292 -vn -0.844264 0.469497 -0.258400 -vn -0.435347 -0.112461 -0.893185 -vn -0.523240 -0.046083 -0.850917 -vn -0.146550 0.519639 0.841700 -vn -0.602832 0.036714 -0.796991 -vn 0.009857 0.437056 0.899350 -vn -0.151311 0.457076 0.876431 -vn -0.870937 0.487808 0.058992 -vn -0.612812 -0.005432 -0.790185 -vn 0.007355 0.390515 0.920560 -vn -0.697043 0.072237 -0.713370 -vn 0.251930 0.278298 0.926847 -vn 0.138829 0.325694 0.935209 -vn -0.749321 0.553514 0.363475 -vn -0.779809 0.162236 -0.604572 -vn -0.553972 0.559618 0.616382 -vn -0.853267 0.266732 -0.448042 -vn -0.341655 0.519028 0.783471 -vn -0.896115 0.381512 -0.226630 -vn -0.440504 -0.123569 -0.889187 -vn -0.528520 -0.074282 -0.845637 -vn -0.331828 0.428144 0.840571 -vn -0.942289 0.270791 -0.196783 -vn -0.442763 -0.137577 -0.885983 -vn -0.527696 -0.107578 -0.842586 -vn -0.138615 0.383740 0.912961 -vn -0.920011 0.373547 0.118320 -vn -0.614277 -0.055666 -0.787103 -vn 0.017457 0.336283 0.941588 -vn -0.703879 0.004730 -0.710288 -vn 0.250557 0.263619 0.931486 -vn 0.144871 0.290384 0.945860 -vn -0.779290 0.442000 0.444166 -vn -0.796289 0.077670 -0.599872 -vn -0.558458 0.455611 0.693167 -vn -0.884152 0.166784 -0.436384 -vn -0.535661 0.328318 0.777978 -vn -0.901578 0.042268 -0.430494 -vn -0.297830 0.321696 0.898770 -vn -0.977538 0.127750 -0.167425 -vn -0.441877 -0.154118 -0.883724 -vn -0.520310 -0.145207 -0.841517 -vn -0.107761 0.300455 0.947661 -vn -0.956328 0.223579 0.188147 -vn -0.606067 -0.113224 -0.787286 -vn 0.040010 0.275796 0.960356 -vn -0.698355 -0.074129 -0.711875 -vn 0.252815 0.246376 0.935606 -vn 0.158635 0.251198 0.954833 -vn -0.787072 0.299081 0.539445 -vn -0.798761 -0.023957 -0.601154 -vn -0.677633 -0.163427 -0.717002 -vn 0.258736 0.227119 0.938841 -vn 0.179601 0.209449 0.961150 -vn -0.756523 0.114353 0.643880 -vn -0.781671 -0.143406 -0.606952 -vn -0.476394 0.174535 0.861721 -vn -0.896359 -0.111576 -0.428999 -vn -0.237007 0.200537 0.950560 -vn -0.988800 -0.059084 -0.136937 -vn -0.437666 -0.172857 -0.882351 -vn -0.505997 -0.186224 -0.842158 -vn -0.058931 0.209296 0.976074 -vn -0.587024 -0.176763 -0.790002 -vn 0.074343 0.210913 0.974639 -vn -0.962889 0.022645 0.268929 -vn -0.949492 -0.295633 -0.105014 -vn -0.555956 -0.244392 -0.794458 -vn 0.119053 0.144230 0.982330 -vn -0.905759 -0.236305 0.351726 -vn -0.638508 -0.260689 -0.724082 -vn 0.268105 0.206397 0.941008 -vn 0.206977 0.166662 0.964019 -vn -0.663472 -0.113041 0.739586 -vn -0.737663 -0.278512 -0.615009 -vn -0.372021 -0.001404 0.928190 -vn -0.853420 -0.295297 -0.429426 -vn -0.148808 0.069704 0.986389 -vn -0.430067 -0.193243 -0.881863 -vn -0.484390 -0.229316 -0.844234 -vn 0.006409 0.114078 0.993439 -vn -0.037568 -0.060030 0.997467 -vn -0.824030 -0.561327 -0.076510 -vn -0.418897 -0.214789 -0.882229 -vn -0.455397 -0.272561 -0.847530 -vn 0.084994 0.020936 0.996155 -vn -0.512131 -0.312815 -0.799890 -vn 0.172246 0.079196 0.981842 -vn -0.745628 -0.523728 0.411969 -vn -0.578539 -0.360820 -0.731468 -vn 0.280862 0.184851 0.941771 -vn 0.239937 0.124821 0.962706 -vn -0.489334 -0.356090 0.796045 -vn -0.659658 -0.421155 -0.622456 -vn -0.222510 -0.181219 0.957915 -vn -0.754845 -0.496200 -0.428877 -vn 0.350932 0.200903 0.914579 -vn -0.350932 -0.200903 -0.914579 -vn 0.296823 0.163488 0.940794 -vn -0.404035 -0.236488 -0.883633 -vn -0.595019 -0.681936 -0.425306 -vn -0.385876 -0.256752 -0.886074 -vn 0.290567 -0.029206 0.956389 -vn -0.335063 -0.940214 -0.060579 -vn 0.276864 0.086550 0.956969 -vn 0.315226 0.054170 0.947447 -vn 0.315348 0.143925 0.937986 -vn 0.334910 0.127537 0.933561 -vn -0.403546 -0.535295 -0.741997 -vn 0.207801 -0.262917 0.942137 -vn -0.345439 -0.287576 -0.893246 -vn 0.354198 0.114750 0.928098 -vn -0.302652 -0.595447 -0.744194 -vn 0.413770 -0.359935 0.836177 -vn 0.065035 -0.939421 0.336436 -vn -0.296213 -0.396893 -0.868740 -vn 0.388379 0.010071 0.921415 -vn -0.257393 -0.507614 -0.822199 -vn 0.389203 0.099948 0.915677 -vn -0.307047 -0.303446 -0.901975 -vn -0.256905 -0.409284 -0.875454 -vn 0.421094 -0.001221 0.907010 -vn -0.221503 -0.413526 -0.883114 -vn 0.450301 -0.005341 0.892850 -vn 0.577105 -0.693472 0.431257 -vn -0.137181 -0.529618 -0.837031 -vn 0.404157 0.097934 0.909391 -vn 0.564745 -0.373974 0.735649 -vn -0.290445 -0.305582 -0.906766 -vn 0.406873 -0.904324 -0.128849 -vn -0.276284 -0.303903 -0.911740 -vn 0.657399 -0.651723 0.378216 -vn 0.417005 0.099460 0.903409 -vn 0.654530 -0.502121 0.565172 -vn 0.580157 -0.227302 0.782098 -vn 0.251381 -0.711020 -0.656667 -vn 0.560778 -0.094852 0.822474 -vn -0.167333 -0.398694 -0.901669 -vn 0.787957 -0.541307 0.293344 -vn 0.330302 -0.595477 -0.732292 -vn 0.813715 -0.347087 0.466231 -vn 0.528703 -0.645497 -0.551164 -vn 0.680044 -0.128178 0.721854 -vn -0.251961 -0.278298 -0.926847 -vn -0.007324 -0.390515 -0.920560 -vn 0.612812 0.005402 0.790185 -vn 0.440535 0.123569 0.889157 -vn 0.558458 -0.455611 -0.693197 -vn -0.144902 -0.290384 -0.945860 -vn 0.614277 0.055666 0.787103 -vn 0.138615 -0.383740 -0.912961 -vn 0.331828 -0.428144 -0.840571 -vn 0.798761 0.023957 0.601154 -vn 0.787072 -0.299081 -0.539445 -vn -0.252815 -0.246376 -0.935606 -vn -0.040040 -0.275796 -0.960356 -vn 0.988800 0.059084 0.136937 -vn 0.058931 -0.209296 -0.976074 -vn 0.437666 0.172857 0.882351 -vn 0.962889 -0.022614 -0.268929 -vn -0.074343 -0.210913 -0.974670 -vn 0.905759 0.236305 -0.351726 -vn 0.555956 0.244392 0.794458 -vn 0.430036 0.193243 0.881863 -vn 0.484390 0.229286 0.844234 -vn 0.148808 -0.069704 -0.986389 -vn 0.372021 0.001404 -0.928190 -vn 0.659658 0.421155 0.622425 -vn -0.239937 -0.124821 -0.962706 -vn 0.745628 0.523728 -0.411969 -vn -0.172277 -0.079196 -0.981842 -vn 0.037538 0.060030 -0.997467 -vn 0.251717 0.558855 -0.790124 -vn -0.296854 -0.163488 -0.940794 -vn 0.484970 0.764519 -0.424604 -vn 0.419721 0.313150 0.851894 -vn 0.365886 0.273995 0.889401 -vn 0.403516 0.535325 0.741997 -vn 0.007752 0.682333 -0.730949 -vn -0.352824 -0.028596 -0.935240 -vn -0.338115 0.181310 -0.923460 -vn 0.302683 0.595416 0.744194 -vn -0.277871 0.508042 -0.815271 -vn 0.257393 0.507614 0.822199 -vn -0.357189 0.742424 -0.566729 -vn 0.296182 0.396893 0.868740 -vn 0.003449 0.788049 0.615589 -vn -0.389203 -0.099948 -0.915708 -vn 0.256874 0.409284 0.875454 -vn -0.450026 0.110294 -0.886135 -vn -0.408460 0.884976 -0.223548 -vn -0.564745 0.373974 -0.735649 -vn -0.404157 -0.097934 -0.909421 -vn -0.450301 0.005341 -0.892850 -vn 0.276284 0.303903 0.911740 -vn -0.580157 0.227332 -0.782098 -vn -0.654530 0.502121 -0.565172 -vn -0.417005 -0.099460 -0.903409 -vn -0.611866 0.780511 -0.128117 -vn -0.726402 0.601245 -0.332804 -vn -0.427137 0.779748 0.457747 -vn -0.251381 0.711020 0.656667 -vn -0.787957 0.541307 -0.293344 -vn -0.528672 0.645497 0.551164 -vn -0.612812 -0.005402 -0.790185 -vn 0.007324 0.390515 0.920560 -vn 0.251961 0.278329 0.926817 -vn -0.440535 -0.123569 -0.889157 -vn -0.528520 -0.074252 -0.845637 -vn -0.331828 0.428144 0.840541 -vn -0.138585 0.383740 0.912961 -vn -0.614246 -0.055666 -0.787103 -vn -0.535630 0.328318 0.777978 -vn 0.258705 0.227119 0.938841 -vn 0.179571 0.209449 0.961150 -vn -0.988800 -0.059053 -0.136937 -vn 0.074313 0.210913 0.974639 -vn -0.430067 -0.193243 -0.881832 -vn -0.824000 -0.561327 -0.076510 -vn -0.418867 -0.214789 -0.882260 -vn 0.280892 0.184851 0.941740 -vn 0.239967 0.124821 0.962706 -vn 0.296854 0.163488 0.940794 -vn -0.404004 -0.236488 -0.883633 -usemtl SkinColor -s 1 -f 3381//2303 3380//2304 3395//2305 -f 3376//2306 3375//2307 3390//2308 -f 3387//2309 3386//2310 3402//2311 -f 3382//2312 3381//2303 3396//2313 -f 3377//2314 3376//2306 3391//2315 -f 3388//2316 3387//2309 3403//2317 -f 3383//2318 3382//2312 3397//2319 -f 3378//2320 3377//2314 3392//2321 -f 3389//2322 3388//2316 3404//2323 -f 3384//2324 3383//2318 3399//2325 -f 3379//2326 3378//2320 3393//2327 -f 3385//2328 3384//2324 3400//2329 -f 3380//2304 3379//2326 3394//2330 -f 3386//2310 3385//2328 3401//2331 -f 3396//2313 3395//2305 3410//2332 -f 3391//2315 3390//2308 3405//2333 -f 3402//2311 3401//2331 3417//2334 -f 3397//2319 3396//2313 3411//2335 -f 3392//2321 3391//2315 3406//2336 -f 3403//2317 3402//2311 3418//2337 -f 3398//2338 3397//2319 3413//2339 -f 3393//2327 3392//2321 3407//2340 -f 3404//2323 3403//2317 3419//2341 -f 3399//2325 3398//2338 3414//2342 -f 3394//2330 3393//2327 3408//2343 -f 3400//2329 3399//2325 3415//2344 -f 3395//2305 3394//2330 3409//2345 -f 3401//2331 3400//2329 3416//2346 -f 3415//2344 3414//2342 3430//2347 -f 3410//2332 3409//2345 3424//2348 -f 3416//2346 3415//2344 3431//2349 -f 3411//2335 3410//2332 3425//2350 -f 3406//2336 3405//2333 3420//2351 -f 3417//2334 3416//2346 3432//2352 -f 3412//2353 3411//2335 3426//2354 -f 3407//2340 3406//2336 3421//2355 -f 3418//2337 3417//2334 3433//2356 -f 3413//2339 3412//2353 3428//2357 -f 3408//2343 3407//2340 3422//2358 -f 3419//2341 3418//2337 3434//2359 -f 3414//2342 3413//2339 3429//2360 -f 3409//2345 3408//2343 3423//2361 -f 3434//2359 3433//2356 3449//2362 -f 3429//2360 3428//2357 3444//2363 -f 3424//2348 3423//2361 3438//2364 -f 3430//2347 3429//2360 3445//2365 -f 3425//2350 3424//2348 3439//2366 -f 3431//2349 3430//2347 3446//2367 -f 3426//2354 3425//2350 3440//2368 -f 3421//2355 3420//2351 3435//2369 -f 3432//2352 3431//2349 3447//2370 -f 3427//2371 3426//2354 3441//2372 -f 3422//2358 3421//2355 3436//2373 -f 3433//2356 3432//2352 3448//2374 -f 3428//2357 3427//2371 3443//2375 -f 3423//2361 3422//2358 3437//2376 -f 3437//2376 3436//2373 3451//2377 -f 3448//2374 3447//2370 3463//2378 -f 3443//2375 3442//2379 3458//2380 -f 3438//2364 3437//2376 3452//2381 -f 3449//2362 3448//2374 3464//2382 -f 3444//2363 3443//2375 3459//2383 -f 3439//2366 3438//2364 3453//2384 -f 3445//2365 3444//2363 3460//2385 -f 3440//2368 3439//2366 3454//2386 -f 3446//2367 3445//2365 3461//2387 -f 3441//2372 3440//2368 3455//2388 -f 3436//2373 3435//2369 3450//2389 -f 3447//2370 3446//2367 3462//2390 -f 3442//2379 3441//2372 3456//2391 -f 3456//2391 3455//2388 3470//2392 -f 3451//2377 3450//2389 3465//2393 -f 3462//2390 3461//2387 3477//2394 -f 3457//2395 3456//2391 3471//2396 -f 3452//2381 3451//2377 3466//2397 -f 3463//2378 3462//2390 3478//2398 -f 3458//2380 3457//2395 3473//2399 -f 3453//2384 3452//2381 3467//2400 -f 3464//2382 3463//2378 3479//2401 -f 3459//2383 3458//2380 3474//2402 -f 3454//2386 3453//2384 3468//2403 -f 3460//2385 3459//2383 3475//2404 -f 3455//2388 3454//2386 3469//2405 -f 3461//2387 3460//2385 3476//2406 -f 3475//2404 3474//2402 3490//2407 -f 3470//2392 3469//2405 3484//2408 -f 3476//2406 3475//2404 3491//2409 -f 3471//2396 3470//2392 3485//2410 -f 3466//2397 3465//2393 3480//2411 -f 3477//2394 3476//2406 3492//2412 -f 3472//2413 3471//2396 3486//2414 -f 3467//2400 3466//2397 3481//2415 -f 3478//2398 3477//2394 3493//2416 -f 3473//2399 3472//2413 3488//2417 -f 3468//2403 3467//2400 3482//2418 -f 3479//2401 3478//2398 3494//2419 -f 3474//2402 3473//2399 3489//2420 -f 3469//2405 3468//2403 3483//2421 -f 3494//2419 3493//2416 3508//2422 -f 3489//2420 3488//2417 3504//2423 -f 3484//2408 3483//2421 3499//2424 -f 3490//2407 3489//2420 3505//2425 -f 3485//2410 3484//2408 3500//2426 -f 3491//2409 3490//2407 3506//2427 -f 3486//2414 3485//2410 3501//2428 -f 3481//2415 3480//2411 3496//2429 -f 3492//2412 3491//2409 3506//2427 -f 3487//2430 3486//2414 3502//2431 -f 3482//2418 3481//2415 3497//2432 -f 3493//2416 3492//2412 3507//2433 -f 3488//2417 3487//2430 3503//2434 -f 3483//2421 3482//2418 3498//2435 -f 3508//2422 3507//2433 3522//2436 -f 3503//2434 3502//2431 3518//2437 -f 3498//2435 3497//2432 3513//2438 -f 3509//2439 3508//2422 3523//2440 -f 3504//2423 3503//2434 3518//2437 -f 3499//2424 3498//2435 3514//2441 -f 3505//2425 3504//2423 3519//2442 -f 3500//2426 3499//2424 3515//2443 -f 3506//2427 3505//2425 3520//2444 -f 3501//2428 3500//2426 3516//2445 -f 3496//2429 3495//2446 3511//2447 -f 3507//2433 3506//2427 3521//2448 -f 3502//2431 3501//2428 3517//2449 -f 3497//2432 3496//2429 3512//2450 -f 3511//2447 3510//2451 3526//2452 -f 3522//2436 3521//2448 3536//2453 -f 3517//2449 3516//2445 3532//2454 -f 3512//2450 3511//2447 3527//2455 -f 3523//2440 3522//2436 3537//2456 -f 3518//2437 3517//2449 3532//2454 -f 3513//2438 3512//2450 3528//2457 -f 3524//2458 3523//2440 3538//2459 -f 3519//2442 3518//2437 3533//2460 -f 3514//2441 3513//2438 3529//2461 -f 3520//2444 3519//2442 3534//2462 -f 3515//2443 3514//2441 3530//2463 -f 3521//2448 3520//2444 3535//2464 -f 3516//2445 3515//2443 3531//2465 -f 3530//2463 3529//2461 3545//2466 -f 3536//2453 3535//2464 3550//2467 -f 3531//2465 3530//2463 3546//2468 -f 3526//2452 3525//2469 3541//2470 -f 3537//2456 3536//2453 3551//2471 -f 3532//2454 3531//2465 3547//2472 -f 3527//2455 3526//2452 3542//2473 -f 3538//2459 3537//2456 3552//2474 -f 3533//2460 3532//2454 3547//2472 -f 3528//2457 3527//2455 3543//2475 -f 3539//2476 3538//2459 3553//2477 -f 3534//2462 3533//2460 3548//2478 -f 3529//2461 3528//2457 3544//2479 -f 3535//2464 3534//2462 3549//2480 -f 3549//2480 3548//2478 3563//2481 -f 3544//2479 3543//2475 3559//2482 -f 3550//2467 3549//2480 3564//2483 -f 3545//2466 3544//2479 3560//2484 -f 3551//2471 3550//2467 3565//2485 -f 3546//2468 3545//2466 3561//2486 -f 3541//2470 3540//2487 3556//2488 -f 3552//2474 3551//2471 3566//2489 -f 3547//2472 3546//2468 3562//2490 -f 3542//2473 3541//2470 3557//2491 -f 3553//2477 3552//2474 3567//2492 -f 3548//2478 3547//2472 3562//2490 -f 3543//2475 3542//2473 3558//2493 -f 3554//2494 3553//2477 3568//2495 -f 3568//2495 3567//2492 3582//2496 -f 3563//2481 3562//2490 3578//2497 -f 3558//2493 3557//2491 3573//2498 -f 3569//2499 3568//2495 3583//2500 -f 3564//2483 3563//2481 3578//2497 -f 3559//2482 3558//2493 3574//2501 -f 3565//2485 3564//2483 3579//2502 -f 3560//2484 3559//2482 3575//2503 -f 3566//2489 3565//2485 3580//2504 -f 3561//2486 3560//2484 3576//2505 -f 3556//2488 3555//2506 3571//2507 -f 3567//2492 3566//2489 3581//2508 -f 3562//2490 3561//2486 3577//2509 -f 3557//2491 3556//2488 3572//2510 -f 3571//2507 3570//2511 3586//2512 -f 3582//2496 3581//2508 3596//2513 -f 3577//2509 3576//2505 3592//2514 -f 3572//2510 3571//2507 3587//2515 -f 3583//2500 3582//2496 3597//2516 -f 3578//2497 3577//2509 3593//2517 -f 3573//2498 3572//2510 3588//2518 -f 3584//2519 3583//2500 3598//2520 -f 3579//2502 3578//2497 3593//2517 -f 3574//2501 3573//2498 3589//2521 -f 3580//2504 3579//2502 3594//2522 -f 3575//2503 3574//2501 3590//2523 -f 3581//2508 3580//2504 3595//2524 -f 3576//2505 3575//2503 3591//2525 -f 3590//2523 3589//2521 3605//2526 -f 3596//2513 3595//2524 3610//2527 -f 3591//2525 3590//2523 3606//2528 -f 3586//2512 3585//2529 3601//2530 -f 3597//2516 3596//2513 3611//2531 -f 3592//2514 3591//2525 3607//2532 -f 3587//2515 3586//2512 3602//2533 -f 3598//2520 3597//2516 3612//2534 -f 3593//2517 3592//2514 3608//2535 -f 3588//2518 3587//2515 3603//2536 -f 3599//2537 3598//2520 3613//2538 -f 3594//2522 3593//2517 3608//2535 -f 3589//2521 3588//2518 3604//2539 -f 3595//2524 3594//2522 3609//2540 -f 3609//2540 3608//2535 3624//2541 -f 3604//2539 3603//2536 3619//2542 -f 3610//2527 3609//2540 3625//2543 -f 3605//2526 3604//2539 3620//2544 -f 3611//2531 3610//2527 3626//2545 -f 3606//2528 3605//2526 3621//2546 -f 3601//2530 3600//2547 3615//2548 -f 3612//2534 3611//2531 3627//2549 -f 3607//2532 3606//2528 3622//2550 -f 3602//2533 3601//2530 3617//2551 -f 3613//2538 3612//2534 3628//2552 -f 3608//2535 3607//2532 3623//2553 -f 3603//2536 3602//2533 3618//2554 -f 3614//2555 3613//2538 3629//2556 -f 3628//2552 3627//2549 3643//2557 -f 3623//2553 3622//2550 3638//2558 -f 3618//2554 3617//2551 3632//2559 -f 3629//2556 3628//2552 3644//2560 -f 3624//2541 3623//2553 3639//2561 -f 3619//2542 3618//2554 3633//2562 -f 3625//2543 3624//2541 3640//2563 -f 3620//2544 3619//2542 3634//2564 -f 3626//2545 3625//2543 3641//2565 -f 3621//2546 3620//2544 3635//2566 -f 3616//2567 3615//2548 3630//2568 -f 3627//2549 3626//2545 3642//2569 -f 3622//2550 3621//2546 3637//2570 -f 3617//2551 3616//2567 3631//2571 -f 3642//2569 3641//2565 3657//2572 -f 3637//2570 3636//2573 3651//2574 -f 3632//2559 3631//2571 3646//2575 -f 3643//2557 3642//2569 3658//2576 -f 3638//2558 3637//2570 3653//2577 -f 3633//2562 3632//2559 3647//2578 -f 3644//2560 3643//2557 3659//2579 -f 3639//2561 3638//2558 3654//2580 -f 3634//2564 3633//2562 3648//2581 -f 3640//2563 3639//2561 3655//2582 -f 3635//2566 3634//2564 3649//2583 -f 3641//2565 3640//2563 3656//2584 -f 3636//2573 3635//2566 3650//2585 -f 3631//2571 3630//2568 3645//2586 -f 3656//2584 3655//2582 3671//2587 -f 3651//2574 3650//2585 3665//2588 -f 3646//2575 3645//2586 3660//2589 -f 3657//2572 3656//2584 3672//2590 -f 3652//2591 3651//2574 3666//2592 -f 3647//2578 3646//2575 3661//2593 -f 3658//2576 3657//2572 3673//2594 -f 3653//2577 3652//2591 3668//2595 -f 3648//2581 3647//2578 3662//2596 -f 3659//2579 3658//2576 3674//2597 -f 3654//2580 3653//2577 3669//2598 -f 3649//2583 3648//2581 3663//2599 -f 3655//2582 3654//2580 3670//2600 -f 3650//2585 3649//2583 3664//2601 -f 3664//2601 3663//2599 3678//2602 -f 3670//2600 3669//2598 3685//2603 -f 3665//2588 3664//2601 3679//2604 -f 3671//2587 3670//2600 3686//2605 -f 3666//2592 3665//2588 3680//2606 -f 3661//2593 3660//2589 3675//2607 -f 3672//2590 3671//2587 3687//2608 -f 3667//2609 3666//2592 3681//2610 -f 3662//2596 3661//2593 3676//2611 -f 3673//2594 3672//2590 3688//2612 -f 3668//2595 3667//2609 3683//2613 -f 3663//2599 3662//2596 3677//2614 -f 3674//2597 3673//2594 3689//2615 -f 3669//2598 3668//2595 3684//2616 -f 3683//2613 3682//2617 3698//2618 -f 3678//2602 3677//2614 3692//2619 -f 3689//2615 3688//2612 3704//2620 -f 3684//2616 3683//2613 3699//2621 -f 3679//2604 3678//2602 3693//2622 -f 3685//2603 3684//2616 3700//2623 -f 3680//2606 3679//2604 3694//2624 -f 3686//2605 3685//2603 3701//2625 -f 3681//2610 3680//2606 3695//2626 -f 3676//2611 3675//2607 3690//2627 -f 3687//2608 3686//2605 3702//2628 -f 3682//2617 3681//2610 3696//2629 -f 3677//2614 3676//2611 3691//2630 -f 3688//2612 3687//2608 3703//2631 -f 3702//2628 3701//2625 3718//2632 -f 3697//2633 3696//2629 3712//2634 -f 3692//2619 3691//2630 3707//2635 -f 3703//2631 3702//2628 3719//2636 -f 3698//2618 3697//2633 3714//2637 -f 3693//2622 3692//2619 3708//2638 -f 3704//2620 3703//2631 3720//2639 -f 3699//2621 3698//2618 3715//2640 -f 3694//2624 3693//2622 3709//2641 -f 3700//2623 3699//2621 3716//2642 -f 3695//2626 3694//2624 3710//2643 -f 3701//2625 3700//2623 3717//2644 -f 3696//2629 3695//2626 3711//2645 -f 3691//2630 3690//2627 3706//2646 -f 3717//2644 3716//2642 3732//2647 -f 3712//2634 3711//2645 3726//2648 -f 3707//2635 3706//2646 3721//2649 -f 3718//2632 3717//2644 3733//2650 -f 3713//2651 3712//2634 3727//2652 -f 3708//2638 3707//2635 3722//2653 -f 3719//2636 3718//2632 3734//2654 -f 3714//2637 3713//2651 3729//2655 -f 3709//2641 3708//2638 3723//2656 -f 3720//2639 3719//2636 3735//2657 -f 3715//2640 3714//2637 3730//2658 -f 3710//2643 3709//2641 3724//2659 -f 3716//2642 3715//2640 3731//2660 -f 3711//2645 3710//2643 3725//2661 -f 3725//2661 3724//2659 3739//2662 -f 3731//2660 3730//2658 3745//2663 -f 3726//2648 3725//2661 3740//2664 -f 3732//2647 3731//2660 3746//2665 -f 3727//2652 3726//2648 3741//2666 -f 3722//2653 3721//2649 3737//2667 -f 3733//2650 3732//2647 3747//2668 -f 3728//2669 3727//2652 3742//2670 -f 3723//2656 3722//2653 3738//2671 -f 3734//2654 3733//2650 3748//2672 -f 3729//2655 3728//2669 3743//2673 -f 3724//2659 3723//2656 3739//2662 -f 3735//2657 3734//2654 3749//2674 -f 3730//2658 3729//2655 3744//2675 -f 3744//2675 3743//2673 3758//2676 -f 3739//2662 3738//2671 3754//2677 -f 3750//2678 3749//2674 3764//2679 -f 3745//2663 3744//2675 3759//2680 -f 3740//2664 3739//2662 3755//2681 -f 3746//2665 3745//2663 3760//2682 -f 3741//2666 3740//2664 3756//2683 -f 3747//2668 3746//2665 3761//2684 -f 3742//2670 3741//2666 3757//2685 -f 3737//2667 3736//2686 3752//2687 -f 3748//2672 3747//2668 3762//2688 -f 3743//2673 3742//2670 3757//2685 -f 3738//2671 3737//2667 3753//2689 -f 3749//2674 3748//2672 3763//2690 -f 3763//2690 3762//2688 3777//2691 -f 3758//2676 3757//2685 3773//2692 -f 3753//2689 3752//2687 3768//2693 -f 3764//2679 3763//2690 3778//2694 -f 3759//2680 3758//2676 3773//2692 -f 3754//2677 3753//2689 3769//2695 -f 3765//2696 3764//2679 3779//2697 -f 3760//2682 3759//2680 3774//2698 -f 3755//2681 3754//2677 3770//2699 -f 3761//2684 3760//2682 3775//2700 -f 3756//2683 3755//2681 3771//2701 -f 3762//2688 3761//2684 3776//2702 -f 3757//2685 3756//2683 3772//2703 -f 3752//2687 3751//2704 3767//2705 -f 3777//2691 3776//2702 3791//2706 -f 3772//2703 3771//2701 3787//2707 -f 3767//2705 3766//2708 3782//2709 -f 3778//2694 3777//2691 3792//2710 -f 3773//2692 3772//2703 3788//2711 -f 3768//2693 3767//2705 3783//2712 -f 3779//2697 3778//2694 3793//2713 -f 3774//2698 3773//2692 3788//2711 -f 3769//2695 3768//2693 3784//2714 -f 3780//2715 3779//2697 3794//2716 -f 3775//2700 3774//2698 3789//2717 -f 3770//2699 3769//2695 3785//2718 -f 3776//2702 3775//2700 3790//2719 -f 3771//2701 3770//2699 3786//2720 -f 3791//2706 3790//2719 3805//2721 -f 3786//2720 3785//2718 3801//2722 -f 3792//2710 3791//2706 3806//2723 -f 3787//2707 3786//2720 3802//2724 -f 3782//2709 3781//2725 3797//2726 -f 3793//2713 3792//2710 3807//2727 -f 3788//2711 3787//2707 3803//2728 -f 3783//2712 3782//2709 3798//2729 -f 3794//2716 3793//2713 3808//2730 -f 3789//2717 3788//2711 3803//2728 -f 3784//2714 3783//2712 3799//2731 -f 3795//2732 3794//2716 3809//2733 -f 3790//2719 3789//2717 3804//2734 -f 3785//2718 3784//2714 3800//2735 -f 3799//2731 3798//2729 3814//2736 -f 3810//2737 3809//2733 3824//2738 -f 3805//2721 3804//2734 3819//2739 -f 3800//2735 3799//2731 3815//2740 -f 3806//2723 3805//2721 3820//2741 -f 3801//2722 3800//2735 3816//2742 -f 3807//2727 3806//2723 3821//2743 -f 3802//2724 3801//2722 3817//2744 -f 3797//2726 3796//2745 3812//2746 -f 3808//2730 3807//2727 3822//2747 -f 3803//2728 3802//2724 3817//2744 -f 3798//2729 3797//2726 3813//2748 -f 3809//2733 3808//2730 3823//2749 -f 3804//2734 3803//2728 3818//2750 -f 3818//2750 3817//2744 3833//2751 -f 3813//2748 3812//2746 3829//2752 -f 3824//2738 3823//2749 3839//2753 -f 3819//2739 3818//2750 3834//2754 -f 3814//2736 3813//2748 3830//2755 -f 3825//2756 3824//2738 3840//2757 -f 3820//2741 3819//2739 3835//2758 -f 3815//2740 3814//2736 3831//2759 -f 3821//2743 3820//2741 3836//2760 -f 3816//2742 3815//2740 3832//2761 -f 3822//2747 3821//2743 3837//2762 -f 3817//2744 3816//2742 3833//2751 -f 3812//2746 3811//2763 3828//2764 -f 3823//2749 3822//2747 3838//2765 -f 3838//2765 3837//2762 3852//2766 -f 3833//2751 3832//2761 3848//2767 -f 3828//2764 3827//2768 3843//2769 -f 3839//2753 3838//2765 3853//2770 -f 3834//2754 3833//2751 3848//2767 -f 3829//2752 3828//2764 3844//2771 -f 3840//2757 3839//2753 3854//2772 -f 3835//2758 3834//2754 3849//2773 -f 3830//2755 3829//2752 3845//2774 -f 3841//2775 3840//2757 3855//2776 -f 3836//2760 3835//2758 3850//2777 -f 3831//2759 3830//2755 3846//2778 -f 3837//2762 3836//2760 3851//2779 -f 3832//2761 3831//2759 3847//2780 -f 3705//2781 3389//2322 3404//2323 -f 3375//2307 3826//2782 3390//2308 -f 3705//2781 3404//2323 3419//2341 -f 3390//2308 3826//2782 3405//2333 -f 3405//2333 3826//2782 3420//2351 -f 3705//2781 3419//2341 3434//2359 -f 3705//2781 3434//2359 3449//2362 -f 3420//2351 3826//2782 3435//2369 -f 3705//2781 3449//2362 3464//2382 -f 3435//2369 3826//2782 3450//2389 -f 3705//2781 3464//2382 3479//2401 -f 3450//2389 3826//2782 3465//2393 -f 3465//2393 3826//2782 3480//2411 -f 3705//2781 3479//2401 3494//2419 -f 3705//2781 3494//2419 3509//2439 -f 3480//2411 3826//2782 3495//2446 -f 3705//2781 3509//2439 3524//2458 -f 3495//2446 3826//2782 3510//2451 -f 3705//2781 3524//2458 3539//2476 -f 3510//2451 3826//2782 3525//2469 -f 3525//2469 3826//2782 3540//2487 -f 3705//2781 3539//2476 3554//2494 -f 3705//2781 3554//2494 3569//2499 -f 3540//2487 3826//2782 3555//2506 -f 3705//2781 3569//2499 3584//2519 -f 3555//2506 3826//2782 3570//2511 -f 3705//2781 3584//2519 3599//2537 -f 3570//2511 3826//2782 3585//2529 -f 3585//2529 3826//2782 3600//2547 -f 3705//2781 3599//2537 3614//2555 -f 3705//2781 3614//2555 3629//2556 -f 3600//2547 3826//2782 3615//2548 -f 3705//2781 3629//2556 3644//2560 -f 3615//2548 3826//2782 3630//2568 -f 3705//2781 3644//2560 3659//2579 -f 3630//2568 3826//2782 3645//2586 -f 3645//2586 3826//2782 3660//2589 -f 3705//2781 3659//2579 3674//2597 -f 3705//2781 3674//2597 3689//2615 -f 3660//2589 3826//2782 3675//2607 -f 3705//2781 3689//2615 3704//2620 -f 3675//2607 3826//2782 3690//2627 -f 3705//2781 3704//2620 3720//2639 -f 3690//2627 3826//2782 3706//2646 -f 3706//2646 3826//2782 3721//2649 -f 3705//2781 3720//2639 3735//2657 -f 3705//2781 3735//2657 3750//2678 -f 3721//2649 3826//2782 3736//2686 -f 3705//2781 3750//2678 3765//2696 -f 3736//2686 3826//2782 3751//2704 -f 3705//2781 3765//2696 3780//2715 -f 3751//2704 3826//2782 3766//2708 -f 3705//2781 3780//2715 3795//2732 -f 3766//2708 3826//2782 3781//2725 -f 3705//2781 3795//2732 3810//2737 -f 3781//2725 3826//2782 3796//2745 -f 3705//2781 3810//2737 3825//2756 -f 3796//2745 3826//2782 3811//2763 -f 3705//2781 3825//2756 3841//2775 -f 3811//2763 3826//2782 3827//2768 -f 3705//2781 3841//2775 3856//2783 -f 3827//2768 3826//2782 3842//2784 -f 3705//2781 3856//2783 3389//2322 -f 3852//2766 3851//2779 3384//2324 -f 3847//2780 3846//2778 3379//2326 -f 3842//2784 3826//2782 3375//2307 -f 3853//2770 3852//2766 3385//2328 -f 3848//2767 3847//2780 3380//2304 -f 3843//2769 3842//2784 3375//2307 -f 3854//2772 3853//2770 3386//2310 -f 3849//2773 3848//2767 3381//2303 -f 3844//2771 3843//2769 3376//2306 -f 3855//2776 3854//2772 3387//2309 -f 3850//2777 3849//2773 3382//2312 -f 3845//2774 3844//2771 3377//2314 -f 3856//2783 3855//2776 3389//2322 -f 3851//2779 3850//2777 3383//2318 -f 3846//2778 3845//2774 3378//2320 -f 3863//2303 3862//2785 3877//2305 -f 3858//2306 3857//2786 3872//2308 -f 3869//2309 3868//2310 3884//2787 -f 3864//2312 3863//2303 3878//2788 -f 3859//2314 3858//2306 3873//2315 -f 3870//2789 3869//2309 3885//2790 -f 3865//2318 3864//2312 3879//2319 -f 3860//2320 3859//2314 3874//2321 -f 3871//2791 3870//2789 3886//2792 -f 3866//2324 3865//2318 3881//2325 -f 3861//2326 3860//2320 3875//2793 -f 3867//2328 3866//2324 3882//2794 -f 3862//2785 3861//2326 3876//2330 -f 3868//2310 3867//2328 3883//2331 -f 3878//2788 3877//2305 3892//2332 -f 3873//2315 3872//2308 3887//2795 -f 3884//2787 3883//2331 3899//2334 -f 3879//2319 3878//2788 3893//2335 -f 3874//2321 3873//2315 3888//2336 -f 3885//2790 3884//2787 3900//2337 -f 3880//2338 3879//2319 3895//2339 -f 3875//2793 3874//2321 3889//2340 -f 3886//2792 3885//2790 3901//2796 -f 3881//2325 3880//2338 3896//2342 -f 3876//2330 3875//2793 3890//2797 -f 3882//2794 3881//2325 3897//2344 -f 3877//2305 3876//2330 3891//2345 -f 3883//2331 3882//2794 3898//2346 -f 3897//2344 3896//2342 3912//2798 -f 3892//2332 3891//2345 3906//2348 -f 3898//2346 3897//2344 3913//2349 -f 3893//2335 3892//2332 3907//2350 -f 3888//2336 3887//2795 3902//2351 -f 3899//2334 3898//2346 3914//2352 -f 3894//2799 3893//2335 3908//2354 -f 3889//2340 3888//2336 3903//2800 -f 3900//2337 3899//2334 3915//2801 -f 3895//2339 3894//2799 3910//2357 -f 3890//2797 3889//2340 3904//2802 -f 3901//2796 3900//2337 3916//2359 -f 3896//2342 3895//2339 3911//2360 -f 3891//2345 3890//2797 3905//2361 -f 3916//2359 3915//2801 3931//2803 -f 3911//2360 3910//2357 3926//2363 -f 3906//2348 3905//2361 3920//2364 -f 3912//2798 3911//2360 3927//2365 -f 3907//2350 3906//2348 3921//2366 -f 3913//2349 3912//2798 3928//2367 -f 3908//2354 3907//2350 3922//2368 -f 3903//2800 3902//2351 3917//2804 -f 3914//2352 3913//2349 3929//2370 -f 3909//2371 3908//2354 3923//2372 -f 3904//2802 3903//2800 3918//2805 -f 3915//2801 3914//2352 3930//2806 -f 3910//2357 3909//2371 3925//2375 -f 3905//2361 3904//2802 3919//2376 -f 3919//2376 3918//2805 3933//2807 -f 3930//2806 3929//2370 3945//2808 -f 3925//2375 3924//2379 3940//2809 -f 3920//2364 3919//2376 3934//2810 -f 3931//2803 3930//2806 3946//2811 -f 3926//2363 3925//2375 3941//2383 -f 3921//2366 3920//2364 3935//2384 -f 3927//2365 3926//2363 3942//2812 -f 3922//2368 3921//2366 3936//2386 -f 3928//2367 3927//2365 3943//2387 -f 3923//2372 3922//2368 3937//2388 -f 3918//2805 3917//2804 3932//2813 -f 3929//2370 3928//2367 3944//2390 -f 3924//2379 3923//2372 3938//2814 -f 3938//2814 3937//2388 3952//2392 -f 3933//2807 3932//2813 3947//2815 -f 3944//2390 3943//2387 3959//2394 -f 3939//2395 3938//2814 3953//2396 -f 3934//2810 3933//2807 3948//2397 -f 3945//2808 3944//2390 3960//2398 -f 3940//2809 3939//2395 3955//2816 -f 3935//2384 3934//2810 3949//2400 -f 3946//2811 3945//2808 3961//2817 -f 3941//2383 3940//2809 3956//2818 -f 3936//2386 3935//2384 3950//2403 -f 3942//2812 3941//2383 3957//2404 -f 3937//2388 3936//2386 3951//2405 -f 3943//2387 3942//2812 3958//2819 -f 3957//2404 3956//2818 3972//2407 -f 3952//2392 3951//2405 3966//2820 -f 3958//2819 3957//2404 3973//2409 -f 3953//2396 3952//2392 3967//2410 -f 3948//2397 3947//2815 3962//2411 -f 3959//2394 3958//2819 3974//2821 -f 3954//2413 3953//2396 3968//2414 -f 3949//2400 3948//2397 3963//2822 -f 3960//2398 3959//2394 3975//2416 -f 3955//2816 3954//2413 3970//2417 -f 3950//2403 3949//2400 3964//2418 -f 3961//2817 3960//2398 3976//2419 -f 3956//2818 3955//2816 3971//2420 -f 3951//2405 3950//2403 3965//2421 -f 3976//2419 3975//2416 3990//2422 -f 3971//2420 3970//2417 3986//2423 -f 3966//2820 3965//2421 3981//2424 -f 3972//2407 3971//2420 3987//2425 -f 3967//2410 3966//2820 3982//2426 -f 3973//2409 3972//2407 3988//2427 -f 3968//2414 3967//2410 3983//2428 -f 3963//2822 3962//2411 3978//2429 -f 3974//2821 3973//2409 3988//2427 -f 3969//2430 3968//2414 3984//2431 -f 3964//2418 3963//2822 3979//2432 -f 3975//2416 3974//2821 3989//2433 -f 3970//2417 3969//2430 3985//2823 -f 3965//2421 3964//2418 3980//2435 -f 3990//2422 3989//2433 4004//2436 -f 3985//2823 3984//2431 4000//2437 -f 3980//2435 3979//2432 3995//2438 -f 3991//2439 3990//2422 4005//2440 -f 3986//2423 3985//2823 4000//2437 -f 3981//2424 3980//2435 3996//2824 -f 3987//2425 3986//2423 4001//2825 -f 3982//2426 3981//2424 3997//2826 -f 3988//2427 3987//2425 4002//2444 -f 3983//2428 3982//2426 3998//2445 -f 3978//2429 3977//2446 3993//2447 -f 3989//2433 3988//2427 4003//2827 -f 3984//2431 3983//2428 3999//2449 -f 3979//2432 3978//2429 3994//2450 -f 3993//2447 3992//2828 4008//2452 -f 4004//2436 4003//2827 4018//2453 -f 3999//2449 3998//2445 4014//2454 -f 3994//2450 3993//2447 4009//2829 -f 4005//2440 4004//2436 4019//2830 -f 4000//2437 3999//2449 4014//2454 -f 3995//2438 3994//2450 4010//2457 -f 4006//2831 4005//2440 4020//2459 -f 4001//2825 4000//2437 4015//2460 -f 3996//2824 3995//2438 4011//2461 -f 4002//2444 4001//2825 4016//2462 -f 3997//2826 3996//2824 4012//2463 -f 4003//2827 4002//2444 4017//2464 -f 3998//2445 3997//2826 4013//2465 -f 4012//2463 4011//2461 4027//2832 -f 4018//2453 4017//2464 4032//2467 -f 4013//2465 4012//2463 4028//2468 -f 4008//2452 4007//2469 4023//2833 -f 4019//2830 4018//2453 4033//2471 -f 4014//2454 4013//2465 4029//2472 -f 4009//2829 4008//2452 4024//2473 -f 4020//2459 4019//2830 4034//2834 -f 4015//2460 4014//2454 4029//2472 -f 4010//2457 4009//2829 4025//2835 -f 4021//2476 4020//2459 4035//2477 -f 4016//2462 4015//2460 4030//2478 -f 4011//2461 4010//2457 4026//2836 -f 4017//2464 4016//2462 4031//2480 -f 4031//2480 4030//2478 4045//2481 -f 4026//2836 4025//2835 4041//2482 -f 4032//2467 4031//2480 4046//2483 -f 4027//2832 4026//2836 4042//2484 -f 4033//2471 4032//2467 4047//2837 -f 4028//2468 4027//2832 4043//2838 -f 4023//2833 4022//2839 4038//2488 -f 4034//2834 4033//2471 4048//2489 -f 4029//2472 4028//2468 4044//2490 -f 4024//2473 4023//2833 4039//2840 -f 4035//2477 4034//2834 4049//2492 -f 4030//2478 4029//2472 4044//2490 -f 4025//2835 4024//2473 4040//2493 -f 4036//2494 4035//2477 4050//2495 -f 4050//2495 4049//2492 4064//2496 -f 4045//2481 4044//2490 4060//2841 -f 4040//2493 4039//2840 4055//2842 -f 4051//2843 4050//2495 4065//2500 -f 4046//2483 4045//2481 4060//2841 -f 4041//2482 4040//2493 4056//2501 -f 4047//2837 4046//2483 4061//2502 -f 4042//2484 4041//2482 4057//2503 -f 4048//2489 4047//2837 4062//2504 -f 4043//2838 4042//2484 4058//2505 -f 4038//2488 4037//2506 4053//2507 -f 4049//2492 4048//2489 4063//2508 -f 4044//2490 4043//2838 4059//2844 -f 4039//2840 4038//2488 4054//2845 -f 4053//2507 4052//2511 4068//2512 -f 4064//2496 4063//2508 4078//2513 -f 4059//2844 4058//2505 4074//2846 -f 4054//2845 4053//2507 4069//2515 -f 4065//2500 4064//2496 4079//2847 -f 4060//2841 4059//2844 4075//2517 -f 4055//2842 4054//2845 4070//2518 -f 4066//2848 4065//2500 4080//2849 -f 4061//2502 4060//2841 4075//2517 -f 4056//2501 4055//2842 4071//2850 -f 4062//2504 4061//2502 4076//2522 -f 4057//2503 4056//2501 4072//2851 -f 4063//2508 4062//2504 4077//2524 -f 4058//2505 4057//2503 4073//2525 -f 4072//2851 4071//2850 4087//2526 -f 4078//2513 4077//2524 4092//2852 -f 4073//2525 4072//2851 4088//2528 -f 4068//2512 4067//2529 4083//2853 -f 4079//2847 4078//2513 4093//2531 -f 4074//2846 4073//2525 4089//2854 -f 4069//2515 4068//2512 4084//2855 -f 4080//2849 4079//2847 4094//2534 -f 4075//2517 4074//2846 4090//2535 -f 4070//2518 4069//2515 4085//2536 -f 4081//2537 4080//2849 4095//2538 -f 4076//2522 4075//2517 4090//2535 -f 4071//2850 4070//2518 4086//2856 -f 4077//2524 4076//2522 4091//2540 -f 4091//2540 4090//2535 4106//2541 -f 4086//2856 4085//2536 4101//2542 -f 4092//2852 4091//2540 4107//2543 -f 4087//2526 4086//2856 4102//2544 -f 4093//2531 4092//2852 4108//2545 -f 4088//2528 4087//2526 4103//2857 -f 4083//2853 4082//2858 4097//2548 -f 4094//2534 4093//2531 4109//2549 -f 4089//2854 4088//2528 4104//2859 -f 4084//2855 4083//2853 4099//2551 -f 4095//2538 4094//2534 4110//2860 -f 4090//2535 4089//2854 4105//2553 -f 4085//2536 4084//2855 4100//2554 -f 4096//2555 4095//2538 4111//2556 -f 4110//2860 4109//2549 4125//2557 -f 4105//2553 4104//2859 4120//2558 -f 4100//2554 4099//2551 4114//2559 -f 4111//2556 4110//2860 4126//2861 -f 4106//2541 4105//2553 4121//2561 -f 4101//2542 4100//2554 4115//2562 -f 4107//2543 4106//2541 4122//2563 -f 4102//2544 4101//2542 4116//2564 -f 4108//2545 4107//2543 4123//2862 -f 4103//2857 4102//2544 4117//2566 -f 4098//2567 4097//2548 4112//2568 -f 4109//2549 4108//2545 4124//2569 -f 4104//2859 4103//2857 4119//2570 -f 4099//2551 4098//2567 4113//2571 -f 4124//2569 4123//2862 4139//2572 -f 4119//2570 4118//2863 4133//2574 -f 4114//2559 4113//2571 4128//2864 -f 4125//2557 4124//2569 4140//2576 -f 4120//2558 4119//2570 4135//2577 -f 4115//2562 4114//2559 4129//2578 -f 4126//2861 4125//2557 4141//2579 -f 4121//2561 4120//2558 4136//2580 -f 4116//2564 4115//2562 4130//2865 -f 4122//2563 4121//2561 4137//2582 -f 4117//2566 4116//2564 4131//2583 -f 4123//2862 4122//2563 4138//2866 -f 4118//2863 4117//2566 4132//2867 -f 4113//2571 4112//2568 4127//2586 -f 4138//2866 4137//2582 4153//2587 -f 4133//2574 4132//2867 4147//2588 -f 4128//2864 4127//2586 4142//2589 -f 4139//2572 4138//2866 4154//2868 -f 4134//2591 4133//2574 4148//2869 -f 4129//2578 4128//2864 4143//2593 -f 4140//2576 4139//2572 4155//2870 -f 4135//2577 4134//2591 4150//2595 -f 4130//2865 4129//2578 4144//2596 -f 4141//2579 4140//2576 4156//2597 -f 4136//2580 4135//2577 4151//2598 -f 4131//2583 4130//2865 4145//2599 -f 4137//2582 4136//2580 4152//2600 -f 4132//2867 4131//2583 4146//2601 -f 4146//2601 4145//2599 4160//2602 -f 4152//2600 4151//2598 4167//2871 -f 4147//2588 4146//2601 4161//2604 -f 4153//2587 4152//2600 4168//2605 -f 4148//2869 4147//2588 4162//2606 -f 4143//2593 4142//2589 4157//2872 -f 4154//2868 4153//2587 4169//2608 -f 4149//2609 4148//2869 4163//2610 -f 4144//2596 4143//2593 4158//2611 -f 4155//2870 4154//2868 4170//2873 -f 4150//2595 4149//2609 4165//2613 -f 4145//2599 4144//2596 4159//2874 -f 4156//2597 4155//2870 4171//2615 -f 4151//2598 4150//2595 4166//2616 -f 4165//2613 4164//2875 4180//2618 -f 4160//2602 4159//2874 4174//2619 -f 4171//2615 4170//2873 4186//2620 -f 4166//2616 4165//2613 4181//2621 -f 4161//2604 4160//2602 4175//2622 -f 4167//2871 4166//2616 4182//2623 -f 4162//2606 4161//2604 4176//2876 -f 4168//2605 4167//2871 4183//2625 -f 4163//2610 4162//2606 4177//2626 -f 4158//2611 4157//2872 4172//2877 -f 4169//2608 4168//2605 4184//2628 -f 4164//2875 4163//2610 4178//2629 -f 4159//2874 4158//2611 4173//2878 -f 4170//2873 4169//2608 4185//2631 -f 4184//2628 4183//2625 4200//2632 -f 4179//2633 4178//2629 4194//2634 -f 4174//2619 4173//2878 4189//2635 -f 4185//2631 4184//2628 4201//2636 -f 4180//2618 4179//2633 4196//2637 -f 4175//2622 4174//2619 4190//2638 -f 4186//2620 4185//2631 4202//2879 -f 4181//2621 4180//2618 4197//2640 -f 4176//2876 4175//2622 4191//2880 -f 4182//2623 4181//2621 4198//2642 -f 4177//2626 4176//2876 4192//2643 -f 4183//2625 4182//2623 4199//2644 -f 4178//2629 4177//2626 4193//2881 -f 4173//2878 4172//2877 4188//2882 -f 4199//2644 4198//2642 4214//2647 -f 4194//2634 4193//2881 4208//2648 -f 4189//2635 4188//2882 4203//2649 -f 4200//2632 4199//2644 4215//2650 -f 4195//2883 4194//2634 4209//2884 -f 4190//2638 4189//2635 4204//2653 -f 4201//2636 4200//2632 4216//2654 -f 4196//2637 4195//2883 4211//2655 -f 4191//2880 4190//2638 4205//2656 -f 4202//2879 4201//2636 4217//2657 -f 4197//2640 4196//2637 4212//2885 -f 4192//2643 4191//2880 4206//2659 -f 4198//2642 4197//2640 4213//2886 -f 4193//2881 4192//2643 4207//2661 -f 4207//2661 4206//2659 4221//2662 -f 4213//2886 4212//2885 4227//2663 -f 4208//2648 4207//2661 4222//2664 -f 4214//2647 4213//2886 4228//2665 -f 4209//2884 4208//2648 4223//2666 -f 4204//2653 4203//2649 4219//2667 -f 4215//2650 4214//2647 4229//2668 -f 4210//2669 4209//2884 4224//2887 -f 4205//2656 4204//2653 4220//2671 -f 4216//2654 4215//2650 4230//2672 -f 4211//2655 4210//2669 4225//2673 -f 4206//2659 4205//2656 4221//2662 -f 4217//2657 4216//2654 4231//2674 -f 4212//2885 4211//2655 4226//2675 -f 4226//2675 4225//2673 4240//2676 -f 4221//2662 4220//2671 4236//2677 -f 4232//2678 4231//2674 4246//2679 -f 4227//2663 4226//2675 4241//2680 -f 4222//2664 4221//2662 4237//2681 -f 4228//2665 4227//2663 4242//2888 -f 4223//2666 4222//2664 4238//2683 -f 4229//2668 4228//2665 4243//2684 -f 4224//2887 4223//2666 4239//2685 -f 4219//2667 4218//2686 4234//2687 -f 4230//2672 4229//2668 4244//2688 -f 4225//2673 4224//2887 4239//2685 -f 4220//2671 4219//2667 4235//2689 -f 4231//2674 4230//2672 4245//2690 -f 4245//2690 4244//2688 4259//2691 -f 4240//2676 4239//2685 4255//2692 -f 4235//2689 4234//2687 4250//2889 -f 4246//2679 4245//2690 4260//2890 -f 4241//2680 4240//2676 4255//2692 -f 4236//2677 4235//2689 4251//2695 -f 4247//2891 4246//2679 4261//2697 -f 4242//2888 4241//2680 4256//2698 -f 4237//2681 4236//2677 4252//2699 -f 4243//2684 4242//2888 4257//2700 -f 4238//2683 4237//2681 4253//2701 -f 4244//2688 4243//2684 4258//2702 -f 4239//2685 4238//2683 4254//2703 -f 4234//2687 4233//2892 4249//2893 -f 4259//2691 4258//2702 4273//2894 -f 4254//2703 4253//2701 4269//2707 -f 4249//2893 4248//2708 4264//2709 -f 4260//2890 4259//2691 4274//2895 -f 4255//2692 4254//2703 4270//2711 -f 4250//2889 4249//2893 4265//2896 -f 4261//2697 4260//2890 4275//2713 -f 4256//2698 4255//2692 4270//2711 -f 4251//2695 4250//2889 4266//2714 -f 4262//2715 4261//2697 4276//2716 -f 4257//2700 4256//2698 4271//2717 -f 4252//2699 4251//2695 4267//2718 -f 4258//2702 4257//2700 4272//2719 -f 4253//2701 4252//2699 4268//2720 -f 4273//2894 4272//2719 4287//2897 -f 4268//2720 4267//2718 4283//2722 -f 4274//2895 4273//2894 4288//2723 -f 4269//2707 4268//2720 4284//2724 -f 4264//2709 4263//2725 4279//2726 -f 4275//2713 4274//2895 4289//2727 -f 4270//2711 4269//2707 4285//2728 -f 4265//2896 4264//2709 4280//2729 -f 4276//2716 4275//2713 4290//2730 -f 4271//2717 4270//2711 4285//2728 -f 4266//2714 4265//2896 4281//2731 -f 4277//2732 4276//2716 4291//2733 -f 4272//2719 4271//2717 4286//2734 -f 4267//2718 4266//2714 4282//2735 -f 4281//2731 4280//2729 4296//2736 -f 4292//2898 4291//2733 4306//2899 -f 4287//2897 4286//2734 4301//2739 -f 4282//2735 4281//2731 4297//2740 -f 4288//2723 4287//2897 4302//2741 -f 4283//2722 4282//2735 4298//2742 -f 4289//2727 4288//2723 4303//2743 -f 4284//2724 4283//2722 4299//2900 -f 4279//2726 4278//2745 4294//2746 -f 4290//2730 4289//2727 4304//2747 -f 4285//2728 4284//2724 4299//2900 -f 4280//2729 4279//2726 4295//2748 -f 4291//2733 4290//2730 4305//2901 -f 4286//2734 4285//2728 4300//2750 -f 4300//2750 4299//2900 4315//2751 -f 4295//2748 4294//2746 4311//2752 -f 4306//2899 4305//2901 4321//2753 -f 4301//2739 4300//2750 4316//2754 -f 4296//2736 4295//2748 4312//2755 -f 4307//2756 4306//2899 4322//2757 -f 4302//2741 4301//2739 4317//2758 -f 4297//2740 4296//2736 4313//2759 -f 4303//2743 4302//2741 4318//2760 -f 4298//2742 4297//2740 4314//2761 -f 4304//2747 4303//2743 4319//2762 -f 4299//2900 4298//2742 4315//2751 -f 4294//2746 4293//2902 4310//2764 -f 4305//2901 4304//2747 4320//2765 -f 4320//2765 4319//2762 4334//2766 -f 4315//2751 4314//2761 4330//2903 -f 4310//2764 4309//2904 4325//2769 -f 4321//2753 4320//2765 4335//2770 -f 4316//2754 4315//2751 4330//2903 -f 4311//2752 4310//2764 4326//2771 -f 4322//2757 4321//2753 4336//2772 -f 4317//2758 4316//2754 4331//2773 -f 4312//2755 4311//2752 4327//2774 -f 4323//2905 4322//2757 4337//2906 -f 4318//2760 4317//2758 4332//2777 -f 4313//2759 4312//2755 4328//2778 -f 4319//2762 4318//2760 4333//2779 -f 4314//2761 4313//2759 4329//2780 -f 4187//2781 3871//2791 3886//2792 -f 3857//2786 4308//2782 3872//2308 -f 4187//2781 3886//2792 3901//2796 -f 3872//2308 4308//2782 3887//2795 -f 3887//2795 4308//2782 3902//2351 -f 4187//2781 3901//2796 3916//2359 -f 4187//2781 3916//2359 3931//2803 -f 3902//2351 4308//2782 3917//2804 -f 4187//2781 3931//2803 3946//2811 -f 3917//2804 4308//2782 3932//2813 -f 4187//2781 3946//2811 3961//2817 -f 3932//2813 4308//2782 3947//2815 -f 3947//2815 4308//2782 3962//2411 -f 4187//2781 3961//2817 3976//2419 -f 4187//2781 3976//2419 3991//2439 -f 3962//2411 4308//2782 3977//2446 -f 4187//2781 3991//2439 4006//2831 -f 3977//2446 4308//2782 3992//2828 -f 4187//2781 4006//2831 4021//2476 -f 3992//2828 4308//2782 4007//2469 -f 4007//2469 4308//2782 4022//2839 -f 4187//2781 4021//2476 4036//2494 -f 4187//2781 4036//2494 4051//2843 -f 4022//2839 4308//2782 4037//2506 -f 4187//2781 4051//2843 4066//2848 -f 4037//2506 4308//2782 4052//2511 -f 4187//2781 4066//2848 4081//2537 -f 4052//2511 4308//2782 4067//2529 -f 4067//2529 4308//2782 4082//2858 -f 4187//2781 4081//2537 4096//2555 -f 4187//2781 4096//2555 4111//2556 -f 4082//2858 4308//2782 4097//2548 -f 4187//2781 4111//2556 4126//2861 -f 4097//2548 4308//2782 4112//2568 -f 4187//2781 4126//2861 4141//2579 -f 4112//2568 4308//2782 4127//2586 -f 4127//2586 4308//2782 4142//2589 -f 4187//2781 4141//2579 4156//2597 -f 4187//2781 4156//2597 4171//2615 -f 4142//2589 4308//2782 4157//2872 -f 4187//2781 4171//2615 4186//2620 -f 4157//2872 4308//2782 4172//2877 -f 4187//2781 4186//2620 4202//2879 -f 4172//2877 4308//2782 4188//2882 -f 4188//2882 4308//2782 4203//2649 -f 4187//2781 4202//2879 4217//2657 -f 4187//2781 4217//2657 4232//2678 -f 4203//2649 4308//2782 4218//2686 -f 4187//2781 4232//2678 4247//2891 -f 4218//2686 4308//2782 4233//2892 -f 4187//2781 4247//2891 4262//2715 -f 4233//2892 4308//2782 4248//2708 -f 4187//2781 4262//2715 4277//2732 -f 4248//2708 4308//2782 4263//2725 -f 4187//2781 4277//2732 4292//2898 -f 4263//2725 4308//2782 4278//2745 -f 4187//2781 4292//2898 4307//2756 -f 4278//2745 4308//2782 4293//2902 -f 4187//2781 4307//2756 4323//2905 -f 4293//2902 4308//2782 4309//2904 -f 4187//2781 4323//2905 4338//2907 -f 4309//2904 4308//2782 4324//2908 -f 4187//2781 4338//2907 3871//2791 -f 4334//2766 4333//2779 3866//2324 -f 4329//2780 4328//2778 3861//2326 -f 4324//2908 4308//2782 3857//2786 -f 4335//2770 4334//2766 3867//2328 -f 4330//2903 4329//2780 3862//2785 -f 4325//2769 4324//2908 3857//2786 -f 4336//2772 4335//2770 3868//2310 -f 4331//2773 4330//2903 3863//2303 -f 4326//2771 4325//2769 3858//2306 -f 4337//2906 4336//2772 3869//2309 -f 4332//2777 4331//2773 3864//2312 -f 4327//2774 4326//2771 3859//2314 -f 4338//2907 4337//2906 3871//2791 -f 4333//2779 4332//2777 3865//2318 -f 4328//2778 4327//2774 3860//2320 -f 3396//2313 3381//2303 3395//2305 -f 3391//2315 3376//2306 3390//2308 -f 3386//2310 3401//2331 3402//2311 -f 3397//2319 3382//2312 3396//2313 -f 3392//2321 3377//2314 3391//2315 -f 3387//2309 3402//2311 3403//2317 -f 3398//2338 3383//2318 3397//2319 -f 3393//2327 3378//2320 3392//2321 -f 3388//2316 3403//2317 3404//2323 -f 3383//2318 3398//2338 3399//2325 -f 3394//2330 3379//2326 3393//2327 -f 3384//2324 3399//2325 3400//2329 -f 3395//2305 3380//2304 3394//2330 -f 3385//2328 3400//2329 3401//2331 -f 3411//2335 3396//2313 3410//2332 -f 3406//2336 3391//2315 3405//2333 -f 3401//2331 3416//2346 3417//2334 -f 3412//2353 3397//2319 3411//2335 -f 3407//2340 3392//2321 3406//2336 -f 3402//2311 3417//2334 3418//2337 -f 3397//2319 3412//2353 3413//2339 -f 3408//2343 3393//2327 3407//2340 -f 3403//2317 3418//2337 3419//2341 -f 3398//2338 3413//2339 3414//2342 -f 3409//2345 3394//2330 3408//2343 -f 3399//2325 3414//2342 3415//2344 -f 3410//2332 3395//2305 3409//2345 -f 3400//2329 3415//2344 3416//2346 -f 3414//2342 3429//2360 3430//2347 -f 3425//2350 3410//2332 3424//2348 -f 3415//2344 3430//2347 3431//2349 -f 3426//2354 3411//2335 3425//2350 -f 3421//2355 3406//2336 3420//2351 -f 3416//2346 3431//2349 3432//2352 -f 3427//2371 3412//2353 3426//2354 -f 3422//2358 3407//2340 3421//2355 -f 3417//2334 3432//2352 3433//2356 -f 3412//2353 3427//2371 3428//2357 -f 3423//2361 3408//2343 3422//2358 -f 3418//2337 3433//2356 3434//2359 -f 3413//2339 3428//2357 3429//2360 -f 3424//2348 3409//2345 3423//2361 -f 3433//2356 3448//2374 3449//2362 -f 3428//2357 3443//2375 3444//2363 -f 3439//2366 3424//2348 3438//2364 -f 3429//2360 3444//2363 3445//2365 -f 3440//2368 3425//2350 3439//2366 -f 3430//2347 3445//2365 3446//2367 -f 3441//2372 3426//2354 3440//2368 -f 3436//2373 3421//2355 3435//2369 -f 3431//2349 3446//2367 3447//2370 -f 3442//2379 3427//2371 3441//2372 -f 3437//2376 3422//2358 3436//2373 -f 3432//2352 3447//2370 3448//2374 -f 3427//2371 3442//2379 3443//2375 -f 3438//2364 3423//2361 3437//2376 -f 3452//2381 3437//2376 3451//2377 -f 3447//2370 3462//2390 3463//2378 -f 3442//2379 3457//2395 3458//2380 -f 3453//2384 3438//2364 3452//2381 -f 3448//2374 3463//2378 3464//2382 -f 3443//2375 3458//2380 3459//2383 -f 3454//2386 3439//2366 3453//2384 -f 3444//2363 3459//2383 3460//2385 -f 3455//2388 3440//2368 3454//2386 -f 3445//2365 3460//2385 3461//2387 -f 3456//2391 3441//2372 3455//2388 -f 3451//2377 3436//2373 3450//2389 -f 3446//2367 3461//2387 3462//2390 -f 3457//2395 3442//2379 3456//2391 -f 3471//2396 3456//2391 3470//2392 -f 3466//2397 3451//2377 3465//2393 -f 3461//2387 3476//2406 3477//2394 -f 3472//2413 3457//2395 3471//2396 -f 3467//2400 3452//2381 3466//2397 -f 3462//2390 3477//2394 3478//2398 -f 3457//2395 3472//2413 3473//2399 -f 3468//2403 3453//2384 3467//2400 -f 3463//2378 3478//2398 3479//2401 -f 3458//2380 3473//2399 3474//2402 -f 3469//2405 3454//2386 3468//2403 -f 3459//2383 3474//2402 3475//2404 -f 3470//2392 3455//2388 3469//2405 -f 3460//2385 3475//2404 3476//2406 -f 3474//2402 3489//2420 3490//2407 -f 3485//2410 3470//2392 3484//2408 -f 3475//2404 3490//2407 3491//2409 -f 3486//2414 3471//2396 3485//2410 -f 3481//2415 3466//2397 3480//2411 -f 3476//2406 3491//2409 3492//2412 -f 3487//2430 3472//2413 3486//2414 -f 3482//2418 3467//2400 3481//2415 -f 3477//2394 3492//2412 3493//2416 -f 3472//2413 3487//2430 3488//2417 -f 3483//2421 3468//2403 3482//2418 -f 3478//2398 3493//2416 3494//2419 -f 3473//2399 3488//2417 3489//2420 -f 3484//2408 3469//2405 3483//2421 -f 3509//2439 3494//2419 3508//2422 -f 3488//2417 3503//2434 3504//2423 -f 3483//2421 3498//2435 3499//2424 -f 3489//2420 3504//2423 3505//2425 -f 3484//2408 3499//2424 3500//2426 -f 3490//2407 3505//2425 3506//2427 -f 3485//2410 3500//2426 3501//2428 -f 3480//2411 3495//2446 3496//2429 -f 3507//2433 3492//2412 3506//2427 -f 3486//2414 3501//2428 3502//2431 -f 3481//2415 3496//2429 3497//2432 -f 3508//2422 3493//2416 3507//2433 -f 3487//2430 3502//2431 3503//2434 -f 3482//2418 3497//2432 3498//2435 -f 3523//2440 3508//2422 3522//2436 -f 3502//2431 3517//2449 3518//2437 -f 3497//2432 3512//2450 3513//2438 -f 3524//2458 3509//2439 3523//2440 -f 3519//2442 3504//2423 3518//2437 -f 3498//2435 3513//2438 3514//2441 -f 3520//2444 3505//2425 3519//2442 -f 3499//2424 3514//2441 3515//2443 -f 3521//2448 3506//2427 3520//2444 -f 3500//2426 3515//2443 3516//2445 -f 3495//2446 3510//2451 3511//2447 -f 3522//2436 3507//2433 3521//2448 -f 3501//2428 3516//2445 3517//2449 -f 3496//2429 3511//2447 3512//2450 -f 3510//2451 3525//2469 3526//2452 -f 3537//2456 3522//2436 3536//2453 -f 3516//2445 3531//2465 3532//2454 -f 3511//2447 3526//2452 3527//2455 -f 3538//2459 3523//2440 3537//2456 -f 3533//2460 3518//2437 3532//2454 -f 3512//2450 3527//2455 3528//2457 -f 3539//2476 3524//2458 3538//2459 -f 3534//2462 3519//2442 3533//2460 -f 3513//2438 3528//2457 3529//2461 -f 3535//2464 3520//2444 3534//2462 -f 3514//2441 3529//2461 3530//2463 -f 3536//2453 3521//2448 3535//2464 -f 3515//2443 3530//2463 3531//2465 -f 3529//2461 3544//2479 3545//2466 -f 3551//2471 3536//2453 3550//2467 -f 3530//2463 3545//2466 3546//2468 -f 3525//2469 3540//2487 3541//2470 -f 3552//2474 3537//2456 3551//2471 -f 3531//2465 3546//2468 3547//2472 -f 3526//2452 3541//2470 3542//2473 -f 3553//2477 3538//2459 3552//2474 -f 3548//2478 3533//2460 3547//2472 -f 3527//2455 3542//2473 3543//2475 -f 3554//2494 3539//2476 3553//2477 -f 3549//2480 3534//2462 3548//2478 -f 3528//2457 3543//2475 3544//2479 -f 3550//2467 3535//2464 3549//2480 -f 3564//2483 3549//2480 3563//2481 -f 3543//2475 3558//2493 3559//2482 -f 3565//2485 3550//2467 3564//2483 -f 3544//2479 3559//2482 3560//2484 -f 3566//2489 3551//2471 3565//2485 -f 3545//2466 3560//2484 3561//2486 -f 3540//2487 3555//2506 3556//2488 -f 3567//2492 3552//2474 3566//2489 -f 3546//2468 3561//2486 3562//2490 -f 3541//2470 3556//2488 3557//2491 -f 3568//2495 3553//2477 3567//2492 -f 3563//2481 3548//2478 3562//2490 -f 3542//2473 3557//2491 3558//2493 -f 3569//2499 3554//2494 3568//2495 -f 3583//2500 3568//2495 3582//2496 -f 3562//2490 3577//2509 3578//2497 -f 3557//2491 3572//2510 3573//2498 -f 3584//2519 3569//2499 3583//2500 -f 3579//2502 3564//2483 3578//2497 -f 3558//2493 3573//2498 3574//2501 -f 3580//2504 3565//2485 3579//2502 -f 3559//2482 3574//2501 3575//2503 -f 3581//2508 3566//2489 3580//2504 -f 3560//2484 3575//2503 3576//2505 -f 3555//2506 3570//2511 3571//2507 -f 3582//2496 3567//2492 3581//2508 -f 3561//2486 3576//2505 3577//2509 -f 3556//2488 3571//2507 3572//2510 -f 3570//2511 3585//2529 3586//2512 -f 3597//2516 3582//2496 3596//2513 -f 3576//2505 3591//2525 3592//2514 -f 3571//2507 3586//2512 3587//2515 -f 3598//2520 3583//2500 3597//2516 -f 3577//2509 3592//2514 3593//2517 -f 3572//2510 3587//2515 3588//2518 -f 3599//2537 3584//2519 3598//2520 -f 3594//2522 3579//2502 3593//2517 -f 3573//2498 3588//2518 3589//2521 -f 3595//2524 3580//2504 3594//2522 -f 3574//2501 3589//2521 3590//2523 -f 3596//2513 3581//2508 3595//2524 -f 3575//2503 3590//2523 3591//2525 -f 3589//2521 3604//2539 3605//2526 -f 3611//2531 3596//2513 3610//2527 -f 3590//2523 3605//2526 3606//2528 -f 3585//2529 3600//2547 3601//2530 -f 3612//2534 3597//2516 3611//2531 -f 3591//2525 3606//2528 3607//2532 -f 3586//2512 3601//2530 3602//2533 -f 3613//2538 3598//2520 3612//2534 -f 3592//2514 3607//2532 3608//2535 -f 3587//2515 3602//2533 3603//2536 -f 3614//2555 3599//2537 3613//2538 -f 3609//2540 3594//2522 3608//2535 -f 3588//2518 3603//2536 3604//2539 -f 3610//2527 3595//2524 3609//2540 -f 3608//2535 3623//2553 3624//2541 -f 3603//2536 3618//2554 3619//2542 -f 3609//2540 3624//2541 3625//2543 -f 3604//2539 3619//2542 3620//2544 -f 3610//2527 3625//2543 3626//2545 -f 3605//2526 3620//2544 3621//2546 -f 3616//2567 3601//2530 3615//2548 -f 3611//2531 3626//2545 3627//2549 -f 3606//2528 3621//2546 3622//2550 -f 3601//2530 3616//2567 3617//2551 -f 3612//2534 3627//2549 3628//2552 -f 3607//2532 3622//2550 3623//2553 -f 3602//2533 3617//2551 3618//2554 -f 3613//2538 3628//2552 3629//2556 -f 3627//2549 3642//2569 3643//2557 -f 3622//2550 3637//2570 3638//2558 -f 3633//2562 3618//2554 3632//2559 -f 3628//2552 3643//2557 3644//2560 -f 3623//2553 3638//2558 3639//2561 -f 3634//2564 3619//2542 3633//2562 -f 3624//2541 3639//2561 3640//2563 -f 3635//2566 3620//2544 3634//2564 -f 3625//2543 3640//2563 3641//2565 -f 3636//2573 3621//2546 3635//2566 -f 3631//2571 3616//2567 3630//2568 -f 3626//2545 3641//2565 3642//2569 -f 3621//2546 3636//2573 3637//2570 -f 3632//2559 3617//2551 3631//2571 -f 3641//2565 3656//2584 3657//2572 -f 3652//2591 3637//2570 3651//2574 -f 3647//2578 3632//2559 3646//2575 -f 3642//2569 3657//2572 3658//2576 -f 3637//2570 3652//2591 3653//2577 -f 3648//2581 3633//2562 3647//2578 -f 3643//2557 3658//2576 3659//2579 -f 3638//2558 3653//2577 3654//2580 -f 3649//2583 3634//2564 3648//2581 -f 3639//2561 3654//2580 3655//2582 -f 3650//2585 3635//2566 3649//2583 -f 3640//2563 3655//2582 3656//2584 -f 3651//2574 3636//2573 3650//2585 -f 3646//2575 3631//2571 3645//2586 -f 3655//2582 3670//2600 3671//2587 -f 3666//2592 3651//2574 3665//2588 -f 3661//2593 3646//2575 3660//2589 -f 3656//2584 3671//2587 3672//2590 -f 3667//2609 3652//2591 3666//2592 -f 3662//2596 3647//2578 3661//2593 -f 3657//2572 3672//2590 3673//2594 -f 3652//2591 3667//2609 3668//2595 -f 3663//2599 3648//2581 3662//2596 -f 3658//2576 3673//2594 3674//2597 -f 3653//2577 3668//2595 3669//2598 -f 3664//2601 3649//2583 3663//2599 -f 3654//2580 3669//2598 3670//2600 -f 3665//2588 3650//2585 3664//2601 -f 3679//2604 3664//2601 3678//2602 -f 3669//2598 3684//2616 3685//2603 -f 3680//2606 3665//2588 3679//2604 -f 3670//2600 3685//2603 3686//2605 -f 3681//2610 3666//2592 3680//2606 -f 3676//2611 3661//2593 3675//2607 -f 3671//2587 3686//2605 3687//2608 -f 3682//2617 3667//2609 3681//2610 -f 3677//2614 3662//2596 3676//2611 -f 3672//2590 3687//2608 3688//2612 -f 3667//2609 3682//2617 3683//2613 -f 3678//2602 3663//2599 3677//2614 -f 3673//2594 3688//2612 3689//2615 -f 3668//2595 3683//2613 3684//2616 -f 3682//2617 3697//2633 3698//2618 -f 3693//2622 3678//2602 3692//2619 -f 3688//2612 3703//2631 3704//2620 -f 3683//2613 3698//2618 3699//2621 -f 3694//2624 3679//2604 3693//2622 -f 3684//2616 3699//2621 3700//2623 -f 3695//2626 3680//2606 3694//2624 -f 3685//2603 3700//2623 3701//2625 -f 3696//2629 3681//2610 3695//2626 -f 3691//2630 3676//2611 3690//2627 -f 3686//2605 3701//2625 3702//2628 -f 3697//2633 3682//2617 3696//2629 -f 3692//2619 3677//2614 3691//2630 -f 3687//2608 3702//2628 3703//2631 -f 3701//2625 3717//2644 3718//2632 -f 3713//2651 3697//2633 3712//2634 -f 3708//2638 3692//2619 3707//2635 -f 3702//2628 3718//2632 3719//2636 -f 3697//2633 3713//2651 3714//2637 -f 3709//2641 3693//2622 3708//2638 -f 3703//2631 3719//2636 3720//2639 -f 3698//2618 3714//2637 3715//2640 -f 3710//2643 3694//2624 3709//2641 -f 3699//2621 3715//2640 3716//2642 -f 3711//2645 3695//2626 3710//2643 -f 3700//2623 3716//2642 3717//2644 -f 3712//2634 3696//2629 3711//2645 -f 3707//2635 3691//2630 3706//2646 -f 3716//2642 3731//2660 3732//2647 -f 3727//2652 3712//2634 3726//2648 -f 3722//2653 3707//2635 3721//2649 -f 3717//2644 3732//2647 3733//2650 -f 3728//2669 3713//2651 3727//2652 -f 3723//2656 3708//2638 3722//2653 -f 3718//2632 3733//2650 3734//2654 -f 3713//2651 3728//2669 3729//2655 -f 3724//2659 3709//2641 3723//2656 -f 3719//2636 3734//2654 3735//2657 -f 3714//2637 3729//2655 3730//2658 -f 3725//2661 3710//2643 3724//2659 -f 3715//2640 3730//2658 3731//2660 -f 3726//2648 3711//2645 3725//2661 -f 3740//2664 3725//2661 3739//2662 -f 3746//2665 3731//2660 3745//2663 -f 3741//2666 3726//2648 3740//2664 -f 3747//2668 3732//2647 3746//2665 -f 3742//2670 3727//2652 3741//2666 -f 3721//2649 3736//2686 3737//2667 -f 3748//2672 3733//2650 3747//2668 -f 3743//2673 3728//2669 3742//2670 -f 3722//2653 3737//2667 3738//2671 -f 3749//2674 3734//2654 3748//2672 -f 3744//2675 3729//2655 3743//2673 -f 3723//2656 3738//2671 3739//2662 -f 3750//2678 3735//2657 3749//2674 -f 3745//2663 3730//2658 3744//2675 -f 3759//2680 3744//2675 3758//2676 -f 3738//2671 3753//2689 3754//2677 -f 3765//2696 3750//2678 3764//2679 -f 3760//2682 3745//2663 3759//2680 -f 3739//2662 3754//2677 3755//2681 -f 3761//2684 3746//2665 3760//2682 -f 3740//2664 3755//2681 3756//2683 -f 3762//2688 3747//2668 3761//2684 -f 3741//2666 3756//2683 3757//2685 -f 3736//2686 3751//2704 3752//2687 -f 3763//2690 3748//2672 3762//2688 -f 3758//2676 3743//2673 3757//2685 -f 3737//2667 3752//2687 3753//2689 -f 3764//2679 3749//2674 3763//2690 -f 3778//2694 3763//2690 3777//2691 -f 3757//2685 3772//2703 3773//2692 -f 3752//2687 3767//2705 3768//2693 -f 3779//2697 3764//2679 3778//2694 -f 3774//2698 3759//2680 3773//2692 -f 3753//2689 3768//2693 3769//2695 -f 3780//2715 3765//2696 3779//2697 -f 3775//2700 3760//2682 3774//2698 -f 3754//2677 3769//2695 3770//2699 -f 3776//2702 3761//2684 3775//2700 -f 3755//2681 3770//2699 3771//2701 -f 3777//2691 3762//2688 3776//2702 -f 3756//2683 3771//2701 3772//2703 -f 3751//2704 3766//2708 3767//2705 -f 3792//2710 3777//2691 3791//2706 -f 3771//2701 3786//2720 3787//2707 -f 3766//2708 3781//2725 3782//2709 -f 3793//2713 3778//2694 3792//2710 -f 3772//2703 3787//2707 3788//2711 -f 3767//2705 3782//2709 3783//2712 -f 3794//2716 3779//2697 3793//2713 -f 3789//2717 3774//2698 3788//2711 -f 3768//2693 3783//2712 3784//2714 -f 3795//2732 3780//2715 3794//2716 -f 3790//2719 3775//2700 3789//2717 -f 3769//2695 3784//2714 3785//2718 -f 3791//2706 3776//2702 3790//2719 -f 3770//2699 3785//2718 3786//2720 -f 3806//2723 3791//2706 3805//2721 -f 3785//2718 3800//2735 3801//2722 -f 3807//2727 3792//2710 3806//2723 -f 3786//2720 3801//2722 3802//2724 -f 3781//2725 3796//2745 3797//2726 -f 3808//2730 3793//2713 3807//2727 -f 3787//2707 3802//2724 3803//2728 -f 3782//2709 3797//2726 3798//2729 -f 3809//2733 3794//2716 3808//2730 -f 3804//2734 3789//2717 3803//2728 -f 3783//2712 3798//2729 3799//2731 -f 3810//2737 3795//2732 3809//2733 -f 3805//2721 3790//2719 3804//2734 -f 3784//2714 3799//2731 3800//2735 -f 3798//2729 3813//2748 3814//2736 -f 3825//2756 3810//2737 3824//2738 -f 3820//2741 3805//2721 3819//2739 -f 3799//2731 3814//2736 3815//2740 -f 3821//2743 3806//2723 3820//2741 -f 3800//2735 3815//2740 3816//2742 -f 3822//2747 3807//2727 3821//2743 -f 3801//2722 3816//2742 3817//2744 -f 3796//2745 3811//2763 3812//2746 -f 3823//2749 3808//2730 3822//2747 -f 3818//2750 3803//2728 3817//2744 -f 3797//2726 3812//2746 3813//2748 -f 3824//2738 3809//2733 3823//2749 -f 3819//2739 3804//2734 3818//2750 -f 3834//2754 3818//2750 3833//2751 -f 3812//2746 3828//2764 3829//2752 -f 3840//2757 3824//2738 3839//2753 -f 3835//2758 3819//2739 3834//2754 -f 3813//2748 3829//2752 3830//2755 -f 3841//2775 3825//2756 3840//2757 -f 3836//2760 3820//2741 3835//2758 -f 3814//2736 3830//2755 3831//2759 -f 3837//2762 3821//2743 3836//2760 -f 3815//2740 3831//2759 3832//2761 -f 3838//2765 3822//2747 3837//2762 -f 3816//2742 3832//2761 3833//2751 -f 3811//2763 3827//2768 3828//2764 -f 3839//2753 3823//2749 3838//2765 -f 3853//2770 3838//2765 3852//2766 -f 3832//2761 3847//2780 3848//2767 -f 3827//2768 3842//2784 3843//2769 -f 3854//2772 3839//2753 3853//2770 -f 3849//2773 3834//2754 3848//2767 -f 3828//2764 3843//2769 3844//2771 -f 3855//2776 3840//2757 3854//2772 -f 3850//2777 3835//2758 3849//2773 -f 3829//2752 3844//2771 3845//2774 -f 3856//2783 3841//2775 3855//2776 -f 3851//2779 3836//2760 3850//2777 -f 3830//2755 3845//2774 3846//2778 -f 3852//2766 3837//2762 3851//2779 -f 3831//2759 3846//2778 3847//2780 -f 3385//2328 3852//2766 3384//2324 -f 3380//2304 3847//2780 3379//2326 -f 3386//2310 3853//2770 3385//2328 -f 3381//2303 3848//2767 3380//2304 -f 3376//2306 3843//2769 3375//2307 -f 3387//2309 3854//2772 3386//2310 -f 3382//2312 3849//2773 3381//2303 -f 3377//2314 3844//2771 3376//2306 -f 3388//2316 3855//2776 3387//2309 -f 3383//2318 3850//2777 3382//2312 -f 3378//2320 3845//2774 3377//2314 -f 3855//2776 3388//2316 3389//2322 -f 3384//2324 3851//2779 3383//2318 -f 3379//2326 3846//2778 3378//2320 -f 3878//2788 3863//2303 3877//2305 -f 3873//2315 3858//2306 3872//2308 -f 3868//2310 3883//2331 3884//2787 -f 3879//2319 3864//2312 3878//2788 -f 3874//2321 3859//2314 3873//2315 -f 3869//2309 3884//2787 3885//2790 -f 3880//2338 3865//2318 3879//2319 -f 3875//2793 3860//2320 3874//2321 -f 3870//2789 3885//2790 3886//2792 -f 3865//2318 3880//2338 3881//2325 -f 3876//2330 3861//2326 3875//2793 -f 3866//2324 3881//2325 3882//2794 -f 3877//2305 3862//2785 3876//2330 -f 3867//2328 3882//2794 3883//2331 -f 3893//2335 3878//2788 3892//2332 -f 3888//2336 3873//2315 3887//2795 -f 3883//2331 3898//2346 3899//2334 -f 3894//2799 3879//2319 3893//2335 -f 3889//2340 3874//2321 3888//2336 -f 3884//2787 3899//2334 3900//2337 -f 3879//2319 3894//2799 3895//2339 -f 3890//2797 3875//2793 3889//2340 -f 3885//2790 3900//2337 3901//2796 -f 3880//2338 3895//2339 3896//2342 -f 3891//2345 3876//2330 3890//2797 -f 3881//2325 3896//2342 3897//2344 -f 3892//2332 3877//2305 3891//2345 -f 3882//2794 3897//2344 3898//2346 -f 3896//2342 3911//2360 3912//2798 -f 3907//2350 3892//2332 3906//2348 -f 3897//2344 3912//2798 3913//2349 -f 3908//2354 3893//2335 3907//2350 -f 3903//2800 3888//2336 3902//2351 -f 3898//2346 3913//2349 3914//2352 -f 3909//2371 3894//2799 3908//2354 -f 3904//2802 3889//2340 3903//2800 -f 3899//2334 3914//2352 3915//2801 -f 3894//2799 3909//2371 3910//2357 -f 3905//2361 3890//2797 3904//2802 -f 3900//2337 3915//2801 3916//2359 -f 3895//2339 3910//2357 3911//2360 -f 3906//2348 3891//2345 3905//2361 -f 3915//2801 3930//2806 3931//2803 -f 3910//2357 3925//2375 3926//2363 -f 3921//2366 3906//2348 3920//2364 -f 3911//2360 3926//2363 3927//2365 -f 3922//2368 3907//2350 3921//2366 -f 3912//2798 3927//2365 3928//2367 -f 3923//2372 3908//2354 3922//2368 -f 3918//2805 3903//2800 3917//2804 -f 3913//2349 3928//2367 3929//2370 -f 3924//2379 3909//2371 3923//2372 -f 3919//2376 3904//2802 3918//2805 -f 3914//2352 3929//2370 3930//2806 -f 3909//2371 3924//2379 3925//2375 -f 3920//2364 3905//2361 3919//2376 -f 3934//2810 3919//2376 3933//2807 -f 3929//2370 3944//2390 3945//2808 -f 3924//2379 3939//2395 3940//2809 -f 3935//2384 3920//2364 3934//2810 -f 3930//2806 3945//2808 3946//2811 -f 3925//2375 3940//2809 3941//2383 -f 3936//2386 3921//2366 3935//2384 -f 3926//2363 3941//2383 3942//2812 -f 3937//2388 3922//2368 3936//2386 -f 3927//2365 3942//2812 3943//2387 -f 3938//2814 3923//2372 3937//2388 -f 3933//2807 3918//2805 3932//2813 -f 3928//2367 3943//2387 3944//2390 -f 3939//2395 3924//2379 3938//2814 -f 3953//2396 3938//2814 3952//2392 -f 3948//2397 3933//2807 3947//2815 -f 3943//2387 3958//2819 3959//2394 -f 3954//2413 3939//2395 3953//2396 -f 3949//2400 3934//2810 3948//2397 -f 3944//2390 3959//2394 3960//2398 -f 3939//2395 3954//2413 3955//2816 -f 3950//2403 3935//2384 3949//2400 -f 3945//2808 3960//2398 3961//2817 -f 3940//2809 3955//2816 3956//2818 -f 3951//2405 3936//2386 3950//2403 -f 3941//2383 3956//2818 3957//2404 -f 3952//2392 3937//2388 3951//2405 -f 3942//2812 3957//2404 3958//2819 -f 3956//2818 3971//2420 3972//2407 -f 3967//2410 3952//2392 3966//2820 -f 3957//2404 3972//2407 3973//2409 -f 3968//2414 3953//2396 3967//2410 -f 3963//2822 3948//2397 3962//2411 -f 3958//2819 3973//2409 3974//2821 -f 3969//2430 3954//2413 3968//2414 -f 3964//2418 3949//2400 3963//2822 -f 3959//2394 3974//2821 3975//2416 -f 3954//2413 3969//2430 3970//2417 -f 3965//2421 3950//2403 3964//2418 -f 3960//2398 3975//2416 3976//2419 -f 3955//2816 3970//2417 3971//2420 -f 3966//2820 3951//2405 3965//2421 -f 3991//2439 3976//2419 3990//2422 -f 3970//2417 3985//2823 3986//2423 -f 3965//2421 3980//2435 3981//2424 -f 3971//2420 3986//2423 3987//2425 -f 3966//2820 3981//2424 3982//2426 -f 3972//2407 3987//2425 3988//2427 -f 3967//2410 3982//2426 3983//2428 -f 3962//2411 3977//2446 3978//2429 -f 3989//2433 3974//2821 3988//2427 -f 3968//2414 3983//2428 3984//2431 -f 3963//2822 3978//2429 3979//2432 -f 3990//2422 3975//2416 3989//2433 -f 3969//2430 3984//2431 3985//2823 -f 3964//2418 3979//2432 3980//2435 -f 4005//2440 3990//2422 4004//2436 -f 3984//2431 3999//2449 4000//2437 -f 3979//2432 3994//2450 3995//2438 -f 4006//2831 3991//2439 4005//2440 -f 4001//2825 3986//2423 4000//2437 -f 3980//2435 3995//2438 3996//2824 -f 4002//2444 3987//2425 4001//2825 -f 3981//2424 3996//2824 3997//2826 -f 4003//2827 3988//2427 4002//2444 -f 3982//2426 3997//2826 3998//2445 -f 3977//2446 3992//2828 3993//2447 -f 4004//2436 3989//2433 4003//2827 -f 3983//2428 3998//2445 3999//2449 -f 3978//2429 3993//2447 3994//2450 -f 3992//2828 4007//2469 4008//2452 -f 4019//2830 4004//2436 4018//2453 -f 3998//2445 4013//2465 4014//2454 -f 3993//2447 4008//2452 4009//2829 -f 4020//2459 4005//2440 4019//2830 -f 4015//2460 4000//2437 4014//2454 -f 3994//2450 4009//2829 4010//2457 -f 4021//2476 4006//2831 4020//2459 -f 4016//2462 4001//2825 4015//2460 -f 3995//2438 4010//2457 4011//2461 -f 4017//2464 4002//2444 4016//2462 -f 3996//2824 4011//2461 4012//2463 -f 4018//2453 4003//2827 4017//2464 -f 3997//2826 4012//2463 4013//2465 -f 4011//2461 4026//2836 4027//2832 -f 4033//2471 4018//2453 4032//2467 -f 4012//2463 4027//2832 4028//2468 -f 4007//2469 4022//2839 4023//2833 -f 4034//2834 4019//2830 4033//2471 -f 4013//2465 4028//2468 4029//2472 -f 4008//2452 4023//2833 4024//2473 -f 4035//2477 4020//2459 4034//2834 -f 4030//2478 4015//2460 4029//2472 -f 4009//2829 4024//2473 4025//2835 -f 4036//2494 4021//2476 4035//2477 -f 4031//2480 4016//2462 4030//2478 -f 4010//2457 4025//2835 4026//2836 -f 4032//2467 4017//2464 4031//2480 -f 4046//2483 4031//2480 4045//2481 -f 4025//2835 4040//2493 4041//2482 -f 4047//2837 4032//2467 4046//2483 -f 4026//2836 4041//2482 4042//2484 -f 4048//2489 4033//2471 4047//2837 -f 4027//2832 4042//2484 4043//2838 -f 4022//2839 4037//2506 4038//2488 -f 4049//2492 4034//2834 4048//2489 -f 4028//2468 4043//2838 4044//2490 -f 4023//2833 4038//2488 4039//2840 -f 4050//2495 4035//2477 4049//2492 -f 4045//2481 4030//2478 4044//2490 -f 4024//2473 4039//2840 4040//2493 -f 4051//2843 4036//2494 4050//2495 -f 4065//2500 4050//2495 4064//2496 -f 4044//2490 4059//2844 4060//2841 -f 4039//2840 4054//2845 4055//2842 -f 4066//2848 4051//2843 4065//2500 -f 4061//2502 4046//2483 4060//2841 -f 4040//2493 4055//2842 4056//2501 -f 4062//2504 4047//2837 4061//2502 -f 4041//2482 4056//2501 4057//2503 -f 4063//2508 4048//2489 4062//2504 -f 4042//2484 4057//2503 4058//2505 -f 4037//2506 4052//2511 4053//2507 -f 4064//2496 4049//2492 4063//2508 -f 4043//2838 4058//2505 4059//2844 -f 4038//2488 4053//2507 4054//2845 -f 4052//2511 4067//2529 4068//2512 -f 4079//2847 4064//2496 4078//2513 -f 4058//2505 4073//2525 4074//2846 -f 4053//2507 4068//2512 4069//2515 -f 4080//2849 4065//2500 4079//2847 -f 4059//2844 4074//2846 4075//2517 -f 4054//2845 4069//2515 4070//2518 -f 4081//2537 4066//2848 4080//2849 -f 4076//2522 4061//2502 4075//2517 -f 4055//2842 4070//2518 4071//2850 -f 4077//2524 4062//2504 4076//2522 -f 4056//2501 4071//2850 4072//2851 -f 4078//2513 4063//2508 4077//2524 -f 4057//2503 4072//2851 4073//2525 -f 4071//2850 4086//2856 4087//2526 -f 4093//2531 4078//2513 4092//2852 -f 4072//2851 4087//2526 4088//2528 -f 4067//2529 4082//2858 4083//2853 -f 4094//2534 4079//2847 4093//2531 -f 4073//2525 4088//2528 4089//2854 -f 4068//2512 4083//2853 4084//2855 -f 4095//2538 4080//2849 4094//2534 -f 4074//2846 4089//2854 4090//2535 -f 4069//2515 4084//2855 4085//2536 -f 4096//2555 4081//2537 4095//2538 -f 4091//2540 4076//2522 4090//2535 -f 4070//2518 4085//2536 4086//2856 -f 4092//2852 4077//2524 4091//2540 -f 4090//2535 4105//2553 4106//2541 -f 4085//2536 4100//2554 4101//2542 -f 4091//2540 4106//2541 4107//2543 -f 4086//2856 4101//2542 4102//2544 -f 4092//2852 4107//2543 4108//2545 -f 4087//2526 4102//2544 4103//2857 -f 4098//2567 4083//2853 4097//2548 -f 4093//2531 4108//2545 4109//2549 -f 4088//2528 4103//2857 4104//2859 -f 4083//2853 4098//2567 4099//2551 -f 4094//2534 4109//2549 4110//2860 -f 4089//2854 4104//2859 4105//2553 -f 4084//2855 4099//2551 4100//2554 -f 4095//2538 4110//2860 4111//2556 -f 4109//2549 4124//2569 4125//2557 -f 4104//2859 4119//2570 4120//2558 -f 4115//2562 4100//2554 4114//2559 -f 4110//2860 4125//2557 4126//2861 -f 4105//2553 4120//2558 4121//2561 -f 4116//2564 4101//2542 4115//2562 -f 4106//2541 4121//2561 4122//2563 -f 4117//2566 4102//2544 4116//2564 -f 4107//2543 4122//2563 4123//2862 -f 4118//2863 4103//2857 4117//2566 -f 4113//2571 4098//2567 4112//2568 -f 4108//2545 4123//2862 4124//2569 -f 4103//2857 4118//2863 4119//2570 -f 4114//2559 4099//2551 4113//2571 -f 4123//2862 4138//2866 4139//2572 -f 4134//2591 4119//2570 4133//2574 -f 4129//2578 4114//2559 4128//2864 -f 4124//2569 4139//2572 4140//2576 -f 4119//2570 4134//2591 4135//2577 -f 4130//2865 4115//2562 4129//2578 -f 4125//2557 4140//2576 4141//2579 -f 4120//2558 4135//2577 4136//2580 -f 4131//2583 4116//2564 4130//2865 -f 4121//2561 4136//2580 4137//2582 -f 4132//2867 4117//2566 4131//2583 -f 4122//2563 4137//2582 4138//2866 -f 4133//2574 4118//2863 4132//2867 -f 4128//2864 4113//2571 4127//2586 -f 4137//2582 4152//2600 4153//2587 -f 4148//2869 4133//2574 4147//2588 -f 4143//2593 4128//2864 4142//2589 -f 4138//2866 4153//2587 4154//2868 -f 4149//2609 4134//2591 4148//2869 -f 4144//2596 4129//2578 4143//2593 -f 4139//2572 4154//2868 4155//2870 -f 4134//2591 4149//2609 4150//2595 -f 4145//2599 4130//2865 4144//2596 -f 4140//2576 4155//2870 4156//2597 -f 4135//2577 4150//2595 4151//2598 -f 4146//2601 4131//2583 4145//2599 -f 4136//2580 4151//2598 4152//2600 -f 4147//2588 4132//2867 4146//2601 -f 4161//2604 4146//2601 4160//2602 -f 4151//2598 4166//2616 4167//2871 -f 4162//2606 4147//2588 4161//2604 -f 4152//2600 4167//2871 4168//2605 -f 4163//2610 4148//2869 4162//2606 -f 4158//2611 4143//2593 4157//2872 -f 4153//2587 4168//2605 4169//2608 -f 4164//2875 4149//2609 4163//2610 -f 4159//2874 4144//2596 4158//2611 -f 4154//2868 4169//2608 4170//2873 -f 4149//2609 4164//2875 4165//2613 -f 4160//2602 4145//2599 4159//2874 -f 4155//2870 4170//2873 4171//2615 -f 4150//2595 4165//2613 4166//2616 -f 4164//2875 4179//2633 4180//2618 -f 4175//2622 4160//2602 4174//2619 -f 4170//2873 4185//2631 4186//2620 -f 4165//2613 4180//2618 4181//2621 -f 4176//2876 4161//2604 4175//2622 -f 4166//2616 4181//2621 4182//2623 -f 4177//2626 4162//2606 4176//2876 -f 4167//2871 4182//2623 4183//2625 -f 4178//2629 4163//2610 4177//2626 -f 4173//2878 4158//2611 4172//2877 -f 4168//2605 4183//2625 4184//2628 -f 4179//2633 4164//2875 4178//2629 -f 4174//2619 4159//2874 4173//2878 -f 4169//2608 4184//2628 4185//2631 -f 4183//2625 4199//2644 4200//2632 -f 4195//2883 4179//2633 4194//2634 -f 4190//2638 4174//2619 4189//2635 -f 4184//2628 4200//2632 4201//2636 -f 4179//2633 4195//2883 4196//2637 -f 4191//2880 4175//2622 4190//2638 -f 4185//2631 4201//2636 4202//2879 -f 4180//2618 4196//2637 4197//2640 -f 4192//2643 4176//2876 4191//2880 -f 4181//2621 4197//2640 4198//2642 -f 4193//2881 4177//2626 4192//2643 -f 4182//2623 4198//2642 4199//2644 -f 4194//2634 4178//2629 4193//2881 -f 4189//2635 4173//2878 4188//2882 -f 4198//2642 4213//2886 4214//2647 -f 4209//2884 4194//2634 4208//2648 -f 4204//2653 4189//2635 4203//2649 -f 4199//2644 4214//2647 4215//2650 -f 4210//2669 4195//2883 4209//2884 -f 4205//2656 4190//2638 4204//2653 -f 4200//2632 4215//2650 4216//2654 -f 4195//2883 4210//2669 4211//2655 -f 4206//2659 4191//2880 4205//2656 -f 4201//2636 4216//2654 4217//2657 -f 4196//2637 4211//2655 4212//2885 -f 4207//2661 4192//2643 4206//2659 -f 4197//2640 4212//2885 4213//2886 -f 4208//2648 4193//2881 4207//2661 -f 4222//2664 4207//2661 4221//2662 -f 4228//2665 4213//2886 4227//2663 -f 4223//2666 4208//2648 4222//2664 -f 4229//2668 4214//2647 4228//2665 -f 4224//2887 4209//2884 4223//2666 -f 4203//2649 4218//2686 4219//2667 -f 4230//2672 4215//2650 4229//2668 -f 4225//2673 4210//2669 4224//2887 -f 4204//2653 4219//2667 4220//2671 -f 4231//2674 4216//2654 4230//2672 -f 4226//2675 4211//2655 4225//2673 -f 4205//2656 4220//2671 4221//2662 -f 4232//2678 4217//2657 4231//2674 -f 4227//2663 4212//2885 4226//2675 -f 4241//2680 4226//2675 4240//2676 -f 4220//2671 4235//2689 4236//2677 -f 4247//2891 4232//2678 4246//2679 -f 4242//2888 4227//2663 4241//2680 -f 4221//2662 4236//2677 4237//2681 -f 4243//2684 4228//2665 4242//2888 -f 4222//2664 4237//2681 4238//2683 -f 4244//2688 4229//2668 4243//2684 -f 4223//2666 4238//2683 4239//2685 -f 4218//2686 4233//2892 4234//2687 -f 4245//2690 4230//2672 4244//2688 -f 4240//2676 4225//2673 4239//2685 -f 4219//2667 4234//2687 4235//2689 -f 4246//2679 4231//2674 4245//2690 -f 4260//2890 4245//2690 4259//2691 -f 4239//2685 4254//2703 4255//2692 -f 4234//2687 4249//2893 4250//2889 -f 4261//2697 4246//2679 4260//2890 -f 4256//2698 4241//2680 4255//2692 -f 4235//2689 4250//2889 4251//2695 -f 4262//2715 4247//2891 4261//2697 -f 4257//2700 4242//2888 4256//2698 -f 4236//2677 4251//2695 4252//2699 -f 4258//2702 4243//2684 4257//2700 -f 4237//2681 4252//2699 4253//2701 -f 4259//2691 4244//2688 4258//2702 -f 4238//2683 4253//2701 4254//2703 -f 4233//2892 4248//2708 4249//2893 -f 4274//2895 4259//2691 4273//2894 -f 4253//2701 4268//2720 4269//2707 -f 4248//2708 4263//2725 4264//2709 -f 4275//2713 4260//2890 4274//2895 -f 4254//2703 4269//2707 4270//2711 -f 4249//2893 4264//2709 4265//2896 -f 4276//2716 4261//2697 4275//2713 -f 4271//2717 4256//2698 4270//2711 -f 4250//2889 4265//2896 4266//2714 -f 4277//2732 4262//2715 4276//2716 -f 4272//2719 4257//2700 4271//2717 -f 4251//2695 4266//2714 4267//2718 -f 4273//2894 4258//2702 4272//2719 -f 4252//2699 4267//2718 4268//2720 -f 4288//2723 4273//2894 4287//2897 -f 4267//2718 4282//2735 4283//2722 -f 4289//2727 4274//2895 4288//2723 -f 4268//2720 4283//2722 4284//2724 -f 4263//2725 4278//2745 4279//2726 -f 4290//2730 4275//2713 4289//2727 -f 4269//2707 4284//2724 4285//2728 -f 4264//2709 4279//2726 4280//2729 -f 4291//2733 4276//2716 4290//2730 -f 4286//2734 4271//2717 4285//2728 -f 4265//2896 4280//2729 4281//2731 -f 4292//2898 4277//2732 4291//2733 -f 4287//2897 4272//2719 4286//2734 -f 4266//2714 4281//2731 4282//2735 -f 4280//2729 4295//2748 4296//2736 -f 4307//2756 4292//2898 4306//2899 -f 4302//2741 4287//2897 4301//2739 -f 4281//2731 4296//2736 4297//2740 -f 4303//2743 4288//2723 4302//2741 -f 4282//2735 4297//2740 4298//2742 -f 4304//2747 4289//2727 4303//2743 -f 4283//2722 4298//2742 4299//2900 -f 4278//2745 4293//2902 4294//2746 -f 4305//2901 4290//2730 4304//2747 -f 4300//2750 4285//2728 4299//2900 -f 4279//2726 4294//2746 4295//2748 -f 4306//2899 4291//2733 4305//2901 -f 4301//2739 4286//2734 4300//2750 -f 4316//2754 4300//2750 4315//2751 -f 4294//2746 4310//2764 4311//2752 -f 4322//2757 4306//2899 4321//2753 -f 4317//2758 4301//2739 4316//2754 -f 4295//2748 4311//2752 4312//2755 -f 4323//2905 4307//2756 4322//2757 -f 4318//2760 4302//2741 4317//2758 -f 4296//2736 4312//2755 4313//2759 -f 4319//2762 4303//2743 4318//2760 -f 4297//2740 4313//2759 4314//2761 -f 4320//2765 4304//2747 4319//2762 -f 4298//2742 4314//2761 4315//2751 -f 4293//2902 4309//2904 4310//2764 -f 4321//2753 4305//2901 4320//2765 -f 4335//2770 4320//2765 4334//2766 -f 4314//2761 4329//2780 4330//2903 -f 4309//2904 4324//2908 4325//2769 -f 4336//2772 4321//2753 4335//2770 -f 4331//2773 4316//2754 4330//2903 -f 4310//2764 4325//2769 4326//2771 -f 4337//2906 4322//2757 4336//2772 -f 4332//2777 4317//2758 4331//2773 -f 4311//2752 4326//2771 4327//2774 -f 4338//2907 4323//2905 4337//2906 -f 4333//2779 4318//2760 4332//2777 -f 4312//2755 4327//2774 4328//2778 -f 4334//2766 4319//2762 4333//2779 -f 4313//2759 4328//2778 4329//2780 -f 3867//2328 4334//2766 3866//2324 -f 3862//2785 4329//2780 3861//2326 -f 3868//2310 4335//2770 3867//2328 -f 3863//2303 4330//2903 3862//2785 -f 3858//2306 4325//2769 3857//2786 -f 3869//2309 4336//2772 3868//2310 -f 3864//2312 4331//2773 3863//2303 -f 3859//2314 4326//2771 3858//2306 -f 3870//2789 4337//2906 3869//2309 -f 3865//2318 4332//2777 3864//2312 -f 3860//2320 4327//2774 3859//2314 -f 4337//2906 3870//2789 3871//2791 -f 3866//2324 4333//2779 3865//2318 -f 3861//2326 4328//2778 3860//2320 -o Tooth_Sphere.009 -v -0.011752 1.034128 -0.041332 -v -0.030343 1.032763 -0.041332 -v -0.047476 1.030545 -0.041332 -v -0.062494 1.027561 -0.041332 -v -0.074818 1.023925 -0.041332 -v -0.083976 1.019777 -0.041332 -v -0.089616 1.015275 -0.041332 -v -0.091520 1.010594 -0.041332 -v -0.089616 1.005913 -0.041332 -v -0.083976 1.001411 -0.041332 -v -0.074818 0.997263 -0.041332 -v -0.062494 0.993627 -0.041332 -v -0.047476 0.990643 -0.041332 -v -0.030343 0.988425 -0.041332 -v -0.011752 0.987060 -0.041332 -v -0.011380 1.034128 -0.043251 -v -0.029614 1.032763 -0.045097 -v -0.046418 1.030545 -0.046797 -v -0.061147 1.027561 -0.048288 -v -0.073235 1.023925 -0.049511 -v -0.082217 1.019777 -0.050420 -v -0.087748 1.015275 -0.050980 -v -0.089616 1.010594 -0.051169 -v -0.087748 1.005913 -0.050980 -v -0.082217 1.001411 -0.050420 -v -0.073235 0.997263 -0.049511 -v -0.061147 0.993627 -0.048288 -v -0.046418 0.990643 -0.046797 -v -0.029614 0.988425 -0.045097 -v -0.011380 0.987060 -0.043251 -v -0.010280 1.034128 -0.045097 -v -0.027456 1.032763 -0.048716 -v -0.043285 1.030545 -0.052052 -v -0.057159 1.027561 -0.054976 -v -0.068546 1.023925 -0.057376 -v -0.077007 1.019777 -0.059159 -v -0.082217 1.015275 -0.060257 -v -0.083976 1.010594 -0.060628 -v -0.082217 1.005913 -0.060257 -v -0.077007 1.001411 -0.059159 -v -0.068546 0.997263 -0.057376 -v -0.057159 0.993627 -0.054976 -v -0.043285 0.990643 -0.052052 -v -0.027456 0.988425 -0.048716 -v -0.010280 0.987060 -0.045097 -v -0.008494 1.034128 -0.046797 -v -0.023951 1.032763 -0.052052 -v -0.038197 1.030545 -0.056895 -v -0.050684 1.027561 -0.061140 -v -0.060931 1.023925 -0.064624 -v -0.068546 1.019777 -0.067213 -v -0.073235 1.015275 -0.068807 -v -0.074818 1.010594 -0.069345 -v -0.073235 1.005913 -0.068807 -v -0.068546 1.001411 -0.067213 -v -0.060931 0.997263 -0.064624 -v -0.050684 0.993627 -0.061140 -v -0.038197 0.990643 -0.056895 -v -0.023951 0.988425 -0.052052 -v -0.008494 0.987060 -0.046797 -v -0.006089 1.034128 -0.048288 -v -0.019235 1.032763 -0.054976 -v -0.031350 1.030545 -0.061140 -v -0.041969 1.027561 -0.066543 -v -0.050684 1.023925 -0.070977 -v -0.057159 1.019777 -0.074272 -v -0.061147 1.015275 -0.076301 -v -0.062494 1.010594 -0.076986 -v -0.061147 1.005913 -0.076301 -v -0.057159 1.001411 -0.074272 -v -0.050684 0.997263 -0.070977 -v -0.041969 0.993627 -0.066543 -v -0.031350 0.990643 -0.061140 -v -0.019235 0.988425 -0.054976 -v -0.006089 0.987060 -0.048288 -v -0.003159 1.034128 -0.049511 -v -0.013488 1.032763 -0.057376 -v -0.023007 1.030545 -0.064624 -v -0.031350 1.027561 -0.070977 -v -0.038197 1.023925 -0.076191 -v -0.043285 1.019777 -0.080065 -v -0.046418 1.015275 -0.082451 -v -0.047476 1.010594 -0.083256 -v -0.046418 1.005913 -0.082451 -v -0.043285 1.001411 -0.080065 -v -0.038197 0.997263 -0.076191 -v -0.031350 0.993627 -0.070977 -v -0.023007 0.990643 -0.064624 -v -0.013488 0.988425 -0.057376 -v -0.003159 0.987060 -0.049511 -v 0.000183 1.034128 -0.050420 -v -0.006931 1.032763 -0.059159 -v -0.013488 1.030545 -0.067213 -v -0.019235 1.027561 -0.074272 -v -0.023951 1.023925 -0.080065 -v -0.027456 1.019777 -0.084370 -v -0.029614 1.015275 -0.087020 -v -0.030343 1.010594 -0.087916 -v -0.029614 1.005913 -0.087020 -v -0.027456 1.001411 -0.084370 -v -0.023951 0.997263 -0.080065 -v -0.019235 0.993627 -0.074272 -v -0.013488 0.990643 -0.067213 -v -0.006931 0.988425 -0.059159 -v 0.000183 0.987060 -0.050420 -v 0.003810 1.034128 -0.050980 -v 0.000183 1.032763 -0.060257 -v -0.003159 1.030545 -0.068807 -v -0.006089 1.027561 -0.076301 -v -0.008494 1.023925 -0.082451 -v -0.010280 1.019777 -0.087020 -v -0.011380 1.015275 -0.089835 -v -0.011752 1.010594 -0.090785 -v -0.011380 1.005913 -0.089835 -v -0.010280 1.001411 -0.087020 -v -0.008494 0.997263 -0.082451 -v -0.006089 0.993627 -0.076301 -v -0.003159 0.990643 -0.068807 -v 0.000183 0.988425 -0.060257 -v 0.003810 0.987060 -0.050980 -v 0.007582 1.034128 -0.051169 -v 0.007582 1.032763 -0.060628 -v 0.007582 1.030545 -0.069345 -v 0.007582 1.027561 -0.076986 -v 0.007582 1.023925 -0.083256 -v 0.007582 1.019777 -0.087916 -v 0.007582 1.015275 -0.090785 -v 0.007582 1.010594 -0.091754 -v 0.007582 1.005913 -0.090785 -v 0.007582 1.001411 -0.087916 -v 0.007582 0.997263 -0.083256 -v 0.007582 0.993627 -0.076986 -v 0.007582 0.990643 -0.069345 -v 0.007582 0.988425 -0.060628 -v 0.007582 0.987060 -0.051169 -v 0.011354 1.034128 -0.050980 -v 0.014981 1.032763 -0.060257 -v 0.018323 1.030545 -0.068807 -v 0.021253 1.027561 -0.076301 -v 0.023657 1.023925 -0.082451 -v 0.025444 1.019777 -0.087020 -v 0.026544 1.015275 -0.089835 -v 0.026916 1.010594 -0.090785 -v 0.026544 1.005913 -0.089835 -v 0.025444 1.001411 -0.087020 -v 0.023657 0.997263 -0.082451 -v 0.021253 0.993627 -0.076301 -v 0.018323 0.990643 -0.068807 -v 0.014981 0.988425 -0.060257 -v 0.011354 0.987060 -0.050980 -v 0.014981 1.034128 -0.050420 -v 0.022095 1.032763 -0.059159 -v 0.028652 1.030545 -0.067213 -v 0.034399 1.027561 -0.074272 -v 0.039115 1.023925 -0.080065 -v 0.042620 1.019777 -0.084370 -v 0.044778 1.015275 -0.087020 -v 0.045506 1.010594 -0.087916 -v 0.044778 1.005913 -0.087020 -v 0.042620 1.001411 -0.084370 -v 0.039115 0.997263 -0.080065 -v 0.034399 0.993627 -0.074272 -v 0.028652 0.990643 -0.067213 -v 0.022095 0.988425 -0.059159 -v 0.014981 0.987060 -0.050420 -v 0.018323 1.034128 -0.049511 -v 0.028652 1.032763 -0.057376 -v 0.038170 1.030545 -0.064624 -v 0.046514 1.027561 -0.070977 -v 0.053361 1.023925 -0.076191 -v 0.058449 1.019777 -0.080065 -v 0.061582 1.015275 -0.082451 -v 0.062640 1.010594 -0.083256 -v 0.061582 1.005913 -0.082451 -v 0.058449 1.001411 -0.080065 -v 0.053361 0.997263 -0.076191 -v 0.046514 0.993627 -0.070977 -v 0.038170 0.990643 -0.064624 -v 0.028652 0.988425 -0.057376 -v 0.018323 0.987060 -0.049511 -v 0.021253 1.034128 -0.048288 -v 0.034399 1.032763 -0.054976 -v 0.046514 1.030545 -0.061140 -v 0.057133 1.027561 -0.066543 -v 0.065848 1.023925 -0.070977 -v 0.072323 1.019777 -0.074272 -v 0.076311 1.015275 -0.076301 -v 0.077657 1.010594 -0.076986 -v 0.076311 1.005913 -0.076301 -v 0.072323 1.001411 -0.074272 -v 0.065848 0.997263 -0.070977 -v 0.057133 0.993627 -0.066543 -v 0.046514 0.990643 -0.061140 -v 0.034399 0.988425 -0.054976 -v 0.021253 0.987060 -0.048288 -v 0.023657 1.034128 -0.046797 -v 0.039115 1.032763 -0.052052 -v 0.053361 1.030545 -0.056895 -v 0.065848 1.027561 -0.061140 -v 0.076095 1.023925 -0.064624 -v 0.083710 1.019777 -0.067213 -v 0.088399 1.015275 -0.068807 -v 0.089982 1.010594 -0.069345 -v 0.088399 1.005913 -0.068807 -v 0.083710 1.001411 -0.067213 -v 0.076095 0.997263 -0.064624 -v 0.065848 0.993627 -0.061140 -v 0.053361 0.990643 -0.056895 -v 0.039115 0.988425 -0.052052 -v 0.023657 0.987060 -0.046797 -v 0.025444 1.034128 -0.045097 -v 0.042620 1.032763 -0.048716 -v 0.058449 1.030545 -0.052052 -v 0.072323 1.027561 -0.054976 -v 0.083710 1.023925 -0.057376 -v 0.092170 1.019777 -0.059159 -v 0.097381 1.015275 -0.060257 -v 0.099140 1.010594 -0.060628 -v 0.097381 1.005913 -0.060257 -v 0.092170 1.001411 -0.059159 -v 0.083710 0.997263 -0.057376 -v 0.072323 0.993627 -0.054976 -v 0.058449 0.990643 -0.052052 -v 0.042620 0.988425 -0.048716 -v 0.025444 0.987060 -0.045097 -v 0.026544 1.034128 -0.043251 -v 0.044778 1.032763 -0.045097 -v 0.061582 1.030545 -0.046797 -v 0.076311 1.027561 -0.048288 -v 0.088399 1.023925 -0.049511 -v 0.097381 1.019777 -0.050420 -v 0.102912 1.015275 -0.050980 -v 0.104779 1.010594 -0.051169 -v 0.102912 1.005913 -0.050980 -v 0.097381 1.001411 -0.050420 -v 0.088399 0.997263 -0.049511 -v 0.076311 0.993627 -0.048288 -v 0.061582 0.990643 -0.046797 -v 0.044778 0.988425 -0.045097 -v 0.026544 0.987060 -0.043251 -v 0.026916 1.034128 -0.041332 -v 0.045506 1.032763 -0.041332 -v 0.062640 1.030545 -0.041332 -v 0.077657 1.027561 -0.041332 -v 0.089982 1.023925 -0.041332 -v 0.099140 1.019777 -0.041332 -v 0.104779 1.015275 -0.041332 -v 0.106684 1.010594 -0.041332 -v 0.104779 1.005913 -0.041332 -v 0.099140 1.001411 -0.041332 -v 0.089982 0.997263 -0.041332 -v 0.077657 0.993627 -0.041332 -v 0.062640 0.990643 -0.041332 -v 0.045506 0.988425 -0.041332 -v 0.026916 0.987060 -0.041332 -v 0.026544 1.034128 -0.039413 -v 0.044778 1.032763 -0.037568 -v 0.061582 1.030545 -0.035867 -v 0.076311 1.027561 -0.034377 -v 0.088399 1.023925 -0.033154 -v 0.097381 1.019777 -0.032245 -v 0.102912 1.015275 -0.031685 -v 0.104779 1.010594 -0.031496 -v 0.102912 1.005913 -0.031685 -v 0.097381 1.001411 -0.032245 -v 0.088399 0.997263 -0.033154 -v 0.076311 0.993627 -0.034377 -v 0.061582 0.990643 -0.035867 -v 0.044778 0.988425 -0.037568 -v 0.026544 0.987060 -0.039413 -v 0.025444 1.034128 -0.037568 -v 0.042620 1.032763 -0.033948 -v 0.058449 1.030545 -0.030612 -v 0.072323 1.027561 -0.027689 -v 0.083710 1.023925 -0.025289 -v 0.092170 1.019777 -0.023506 -v 0.097381 1.015275 -0.022408 -v 0.099140 1.010594 -0.022037 -v 0.097381 1.005913 -0.022408 -v 0.092170 1.001411 -0.023506 -v 0.083710 0.997263 -0.025289 -v 0.072323 0.993627 -0.027689 -v 0.058449 0.990643 -0.030612 -v 0.042620 0.988425 -0.033948 -v 0.025444 0.987060 -0.037568 -v 0.023657 1.034128 -0.035867 -v 0.039115 1.032763 -0.030612 -v 0.053361 1.030545 -0.025770 -v 0.065847 1.027561 -0.021525 -v 0.076095 1.023925 -0.018041 -v 0.083710 1.019777 -0.015452 -v 0.088399 1.015275 -0.013858 -v 0.089982 1.010594 -0.013320 -v 0.088399 1.005913 -0.013858 -v 0.083710 1.001411 -0.015452 -v 0.076095 0.997263 -0.018041 -v 0.065847 0.993627 -0.021525 -v 0.053361 0.990643 -0.025770 -v 0.039115 0.988425 -0.030612 -v 0.023657 0.987060 -0.035867 -v 0.021253 1.034128 -0.034377 -v 0.034399 1.032763 -0.027689 -v 0.046514 1.030545 -0.021525 -v 0.057133 1.027561 -0.016122 -v 0.065847 1.023925 -0.011688 -v 0.072323 1.019777 -0.008393 -v 0.076311 1.015275 -0.006364 -v 0.077657 1.010594 -0.005679 -v 0.076311 1.005913 -0.006364 -v 0.072323 1.001411 -0.008393 -v 0.065847 0.997263 -0.011688 -v 0.057133 0.993627 -0.016122 -v 0.046514 0.990643 -0.021525 -v 0.034399 0.988425 -0.027689 -v 0.021253 0.987060 -0.034377 -v 0.018323 1.034128 -0.033154 -v 0.028652 1.032763 -0.025289 -v 0.038170 1.030545 -0.018041 -v 0.046514 1.027561 -0.011688 -v 0.053361 1.023925 -0.006474 -v 0.058449 1.019777 -0.002600 -v 0.061582 1.015275 -0.000214 -v 0.062640 1.010594 0.000591 -v 0.061582 1.005913 -0.000214 -v 0.058449 1.001411 -0.002600 -v 0.053361 0.997263 -0.006474 -v 0.046514 0.993627 -0.011688 -v 0.038170 0.990643 -0.018041 -v 0.028652 0.988425 -0.025289 -v 0.018323 0.987060 -0.033154 -v 0.007582 0.986599 -0.041332 -v 0.014981 1.034128 -0.032245 -v 0.022095 1.032763 -0.023506 -v 0.028652 1.030545 -0.015452 -v 0.034399 1.027561 -0.008393 -v 0.039115 1.023925 -0.002600 -v 0.042620 1.019777 0.001705 -v 0.044778 1.015275 0.004356 -v 0.045506 1.010594 0.005251 -v 0.044778 1.005913 0.004356 -v 0.042620 1.001411 0.001705 -v 0.039115 0.997263 -0.002600 -v 0.034399 0.993627 -0.008393 -v 0.028652 0.990643 -0.015452 -v 0.022095 0.988425 -0.023506 -v 0.014981 0.987060 -0.032245 -v 0.011354 1.034128 -0.031685 -v 0.014981 1.032763 -0.022408 -v 0.018323 1.030545 -0.013858 -v 0.021253 1.027561 -0.006364 -v 0.023657 1.023925 -0.000214 -v 0.025444 1.019777 0.004356 -v 0.026544 1.015275 0.007170 -v 0.026916 1.010594 0.008120 -v 0.026544 1.005913 0.007170 -v 0.025444 1.001411 0.004356 -v 0.023657 0.997263 -0.000214 -v 0.021253 0.993627 -0.006364 -v 0.018323 0.990643 -0.013858 -v 0.014981 0.988425 -0.022408 -v 0.011354 0.987060 -0.031685 -v 0.007582 1.034128 -0.031496 -v 0.007582 1.032763 -0.022037 -v 0.007582 1.030545 -0.013320 -v 0.007582 1.027561 -0.005679 -v 0.007582 1.023925 0.000591 -v 0.007582 1.019777 0.005251 -v 0.007582 1.015275 0.008120 -v 0.007582 1.010594 0.009089 -v 0.007582 1.005913 0.008120 -v 0.007582 1.001411 0.005251 -v 0.007582 0.997263 0.000591 -v 0.007582 0.993627 -0.005679 -v 0.007582 0.990643 -0.013320 -v 0.007582 0.988425 -0.022037 -v 0.007582 0.987060 -0.031496 -v 0.003810 1.034128 -0.031685 -v 0.000183 1.032763 -0.022408 -v -0.003159 1.030545 -0.013858 -v -0.006089 1.027561 -0.006364 -v -0.008494 1.023925 -0.000214 -v -0.010280 1.019777 0.004356 -v -0.011380 1.015275 0.007170 -v -0.011752 1.010594 0.008120 -v -0.011380 1.005913 0.007170 -v -0.010280 1.001411 0.004356 -v -0.008494 0.997263 -0.000214 -v -0.006089 0.993627 -0.006364 -v -0.003159 0.990643 -0.013858 -v 0.000183 0.988425 -0.022408 -v 0.003810 0.987060 -0.031685 -v 0.000183 1.034128 -0.032245 -v -0.006931 1.032763 -0.023506 -v -0.013488 1.030545 -0.015452 -v -0.019235 1.027561 -0.008393 -v -0.023951 1.023925 -0.002600 -v -0.027456 1.019777 0.001705 -v -0.029614 1.015275 0.004356 -v -0.030343 1.010594 0.005251 -v -0.029614 1.005913 0.004356 -v -0.027456 1.001411 0.001705 -v -0.023951 0.997263 -0.002600 -v -0.019235 0.993627 -0.008393 -v -0.013488 0.990643 -0.015452 -v -0.006931 0.988425 -0.023506 -v 0.000183 0.987060 -0.032245 -v -0.003159 1.034128 -0.033154 -v -0.013488 1.032763 -0.025289 -v -0.023007 1.030545 -0.018041 -v -0.031350 1.027561 -0.011688 -v -0.038197 1.023925 -0.006474 -v -0.043285 1.019777 -0.002600 -v -0.046418 1.015275 -0.000214 -v -0.047476 1.010594 0.000591 -v -0.046418 1.005913 -0.000214 -v -0.043285 1.001411 -0.002600 -v -0.038197 0.997263 -0.006474 -v -0.031350 0.993627 -0.011688 -v -0.023007 0.990643 -0.018041 -v -0.013488 0.988425 -0.025289 -v -0.003159 0.987060 -0.033154 -v -0.006089 1.034128 -0.034377 -v -0.019235 1.032763 -0.027689 -v -0.031350 1.030545 -0.021525 -v -0.041969 1.027561 -0.016122 -v -0.050684 1.023925 -0.011688 -v -0.057159 1.019777 -0.008393 -v -0.061147 1.015275 -0.006364 -v -0.062494 1.010594 -0.005679 -v -0.061147 1.005913 -0.006364 -v -0.057159 1.001411 -0.008393 -v -0.050684 0.997263 -0.011688 -v -0.041969 0.993627 -0.016122 -v -0.031350 0.990643 -0.021525 -v -0.019235 0.988425 -0.027689 -v -0.006089 0.987060 -0.034377 -v -0.008494 1.034128 -0.035867 -v -0.023951 1.032763 -0.030613 -v -0.038197 1.030545 -0.025770 -v -0.050684 1.027561 -0.021525 -v -0.060931 1.023925 -0.018041 -v -0.068546 1.019777 -0.015452 -v -0.073235 1.015275 -0.013858 -v -0.074818 1.010594 -0.013320 -v -0.073235 1.005913 -0.013858 -v -0.068546 1.001411 -0.015452 -v -0.060931 0.997263 -0.018041 -v -0.050684 0.993627 -0.021525 -v -0.038197 0.990643 -0.025770 -v -0.023951 0.988425 -0.030613 -v -0.008494 0.987060 -0.035867 -v 0.007582 1.034589 -0.041332 -v -0.010280 1.034128 -0.037568 -v -0.027456 1.032763 -0.033948 -v -0.043285 1.030545 -0.030613 -v -0.057159 1.027561 -0.027689 -v -0.068546 1.023925 -0.025289 -v -0.077007 1.019777 -0.023506 -v -0.082217 1.015275 -0.022408 -v -0.083976 1.010594 -0.022037 -v -0.082217 1.005913 -0.022408 -v -0.077007 1.001411 -0.023506 -v -0.068546 0.997263 -0.025289 -v -0.057159 0.993627 -0.027689 -v -0.043285 0.990643 -0.030613 -v -0.027456 0.988425 -0.033948 -v -0.010280 0.987060 -0.037568 -v -0.011380 1.034128 -0.039413 -v -0.029614 1.032763 -0.037568 -v -0.046418 1.030545 -0.035867 -v -0.061147 1.027561 -0.034377 -v -0.073235 1.023925 -0.033154 -v -0.082217 1.019777 -0.032245 -v -0.087748 1.015275 -0.031685 -v -0.089615 1.010594 -0.031496 -v -0.087748 1.005913 -0.031685 -v -0.082217 1.001411 -0.032245 -v -0.073235 0.997263 -0.033154 -v -0.061147 0.993627 -0.034377 -v -0.046418 0.990643 -0.035867 -v -0.029614 0.988425 -0.037568 -v -0.011380 0.987060 -0.039413 -v -0.009875 1.033703 0.012545 -v -0.028466 1.032337 0.012545 -v -0.045600 1.030120 0.012545 -v -0.060617 1.027136 0.012545 -v -0.072942 1.023500 0.012545 -v -0.082100 1.019351 0.012545 -v -0.087739 1.014850 0.012545 -v -0.089643 1.010168 0.012545 -v -0.087739 1.005487 0.012545 -v -0.082100 1.000986 0.012545 -v -0.072942 0.996837 0.012545 -v -0.060617 0.993201 0.012545 -v -0.045600 0.990217 0.012545 -v -0.028466 0.988000 0.012545 -v -0.009875 0.986634 0.012545 -v -0.009504 1.033703 0.010626 -v -0.027738 1.032337 0.008781 -v -0.044542 1.030120 0.007080 -v -0.059271 1.027136 0.005589 -v -0.071358 1.023500 0.004366 -v -0.080340 1.019351 0.003457 -v -0.085871 1.014850 0.002897 -v -0.087739 1.010168 0.002708 -v -0.085871 1.005487 0.002897 -v -0.080340 1.000986 0.003457 -v -0.071358 0.996837 0.004366 -v -0.059271 0.993201 0.005589 -v -0.044542 0.990217 0.007080 -v -0.027737 0.988000 0.008781 -v -0.009504 0.986634 0.010626 -v -0.008404 1.033703 0.008780 -v -0.025579 1.032337 0.005161 -v -0.041409 1.030120 0.001825 -v -0.055283 1.027136 -0.001099 -v -0.066669 1.023500 -0.003499 -v -0.075130 1.019351 -0.005282 -v -0.080340 1.014850 -0.006380 -v -0.082100 1.010168 -0.006751 -v -0.080340 1.005487 -0.006380 -v -0.075130 1.000986 -0.005282 -v -0.066669 0.996837 -0.003499 -v -0.055283 0.993201 -0.001099 -v -0.041409 0.990217 0.001825 -v -0.025579 0.988000 0.005161 -v -0.008404 0.986634 0.008781 -v -0.006617 1.033703 0.007080 -v -0.022075 1.032337 0.001825 -v -0.036321 1.030120 -0.003018 -v -0.048807 1.027136 -0.007263 -v -0.059055 1.023500 -0.010747 -v -0.066669 1.019351 -0.013335 -v -0.071358 1.014850 -0.014929 -v -0.072942 1.010168 -0.015468 -v -0.071358 1.005487 -0.014929 -v -0.066669 1.000986 -0.013335 -v -0.059055 0.996837 -0.010747 -v -0.048807 0.993201 -0.007263 -v -0.036321 0.990217 -0.003018 -v -0.022075 0.988000 0.001825 -v -0.006617 0.986634 0.007080 -v -0.004213 1.033703 0.005589 -v -0.017358 1.032337 -0.001099 -v -0.029473 1.030120 -0.007263 -v -0.040092 1.027136 -0.012666 -v -0.048807 1.023500 -0.017100 -v -0.055283 1.019351 -0.020394 -v -0.059271 1.014850 -0.022423 -v -0.060617 1.010168 -0.023108 -v -0.059271 1.005487 -0.022423 -v -0.055283 1.000986 -0.020394 -v -0.048807 0.996837 -0.017100 -v -0.040092 0.993201 -0.012666 -v -0.029473 0.990217 -0.007263 -v -0.017358 0.988000 -0.001099 -v -0.004213 0.986634 0.005589 -v -0.001283 1.033703 0.004366 -v -0.011611 1.032337 -0.003499 -v -0.021130 1.030120 -0.010747 -v -0.029473 1.027136 -0.017100 -v -0.036321 1.023500 -0.022313 -v -0.041409 1.019351 -0.026188 -v -0.044542 1.014850 -0.028573 -v -0.045600 1.010168 -0.029379 -v -0.044542 1.005487 -0.028573 -v -0.041409 1.000986 -0.026188 -v -0.036321 0.996837 -0.022313 -v -0.029473 0.993201 -0.017100 -v -0.021130 0.990217 -0.010747 -v -0.011611 0.988000 -0.003499 -v -0.001283 0.986634 0.004366 -v 0.002060 1.033703 0.003457 -v -0.005055 1.032337 -0.005282 -v -0.011611 1.030120 -0.013335 -v -0.017358 1.027136 -0.020394 -v -0.022075 1.023500 -0.026188 -v -0.025579 1.019351 -0.030492 -v -0.027737 1.014850 -0.033143 -v -0.028466 1.010168 -0.034038 -v -0.027737 1.005487 -0.033143 -v -0.025579 1.000986 -0.030492 -v -0.022075 0.996837 -0.026188 -v -0.017358 0.993201 -0.020394 -v -0.011611 0.990217 -0.013335 -v -0.005055 0.988000 -0.005282 -v 0.002060 0.986634 0.003457 -v 0.005687 1.033703 0.002897 -v 0.002060 1.032337 -0.006380 -v -0.001283 1.030120 -0.014929 -v -0.004213 1.027136 -0.022423 -v -0.006617 1.023500 -0.028573 -v -0.008404 1.019351 -0.033143 -v -0.009504 1.014850 -0.035957 -v -0.009875 1.010168 -0.036908 -v -0.009504 1.005487 -0.035957 -v -0.008404 1.000986 -0.033143 -v -0.006617 0.996837 -0.028573 -v -0.004213 0.993201 -0.022423 -v -0.001283 0.990217 -0.014929 -v 0.002060 0.988000 -0.006380 -v 0.005687 0.986634 0.002897 -v 0.009458 1.033703 0.002708 -v 0.009458 1.032337 -0.006751 -v 0.009458 1.030120 -0.015468 -v 0.009458 1.027136 -0.023108 -v 0.009458 1.023500 -0.029379 -v 0.009458 1.019351 -0.034038 -v 0.009458 1.014850 -0.036908 -v 0.009458 1.010168 -0.037876 -v 0.009458 1.005487 -0.036908 -v 0.009458 1.000986 -0.034038 -v 0.009458 0.996837 -0.029379 -v 0.009458 0.993201 -0.023108 -v 0.009458 0.990217 -0.015468 -v 0.009458 0.988000 -0.006751 -v 0.009458 0.986634 0.002708 -v 0.013230 1.033703 0.002897 -v 0.016857 1.032337 -0.006380 -v 0.020200 1.030120 -0.014929 -v 0.023129 1.027136 -0.022423 -v 0.025534 1.023500 -0.028573 -v 0.027320 1.019351 -0.033143 -v 0.028421 1.014850 -0.035957 -v 0.028792 1.010168 -0.036908 -v 0.028421 1.005487 -0.035957 -v 0.027320 1.000986 -0.033143 -v 0.025534 0.996837 -0.028573 -v 0.023129 0.993201 -0.022423 -v 0.020200 0.990217 -0.014929 -v 0.016857 0.988000 -0.006380 -v 0.013230 0.986634 0.002897 -v 0.016857 1.033703 0.003457 -v 0.023971 1.032337 -0.005282 -v 0.030528 1.030120 -0.013335 -v 0.036275 1.027136 -0.020394 -v 0.040992 1.023500 -0.026188 -v 0.044496 1.019351 -0.030492 -v 0.046654 1.014850 -0.033143 -v 0.047383 1.010168 -0.034038 -v 0.046654 1.005487 -0.033143 -v 0.044496 1.000986 -0.030492 -v 0.040992 0.996837 -0.026188 -v 0.036275 0.993201 -0.020394 -v 0.030528 0.990217 -0.013335 -v 0.023971 0.988000 -0.005282 -v 0.016857 0.986634 0.003457 -v 0.020200 1.033703 0.004366 -v 0.030528 1.032337 -0.003499 -v 0.040047 1.030120 -0.010747 -v 0.048390 1.027136 -0.017100 -v 0.055237 1.023500 -0.022313 -v 0.060325 1.019351 -0.026188 -v 0.063458 1.014850 -0.028573 -v 0.064516 1.010168 -0.029379 -v 0.063458 1.005487 -0.028573 -v 0.060325 1.000986 -0.026188 -v 0.055237 0.996837 -0.022313 -v 0.048390 0.993201 -0.017100 -v 0.040047 0.990217 -0.010747 -v 0.030528 0.988000 -0.003499 -v 0.020200 0.986634 0.004366 -v 0.023129 1.033703 0.005589 -v 0.036275 1.032337 -0.001099 -v 0.048390 1.030120 -0.007263 -v 0.059009 1.027136 -0.012666 -v 0.067724 1.023500 -0.017100 -v 0.074200 1.019351 -0.020394 -v 0.078187 1.014850 -0.022423 -v 0.079534 1.010168 -0.023108 -v 0.078187 1.005487 -0.022423 -v 0.074200 1.000986 -0.020394 -v 0.067724 0.996837 -0.017100 -v 0.059009 0.993201 -0.012666 -v 0.048390 0.990217 -0.007263 -v 0.036275 0.988000 -0.001099 -v 0.023129 0.986634 0.005589 -v 0.025534 1.033703 0.007080 -v 0.040992 1.032337 0.001825 -v 0.055237 1.030120 -0.003018 -v 0.067724 1.027136 -0.007263 -v 0.077971 1.023500 -0.010747 -v 0.085586 1.019351 -0.013335 -v 0.090275 1.014850 -0.014929 -v 0.091858 1.010168 -0.015468 -v 0.090275 1.005487 -0.014929 -v 0.085586 1.000986 -0.013335 -v 0.077971 0.996837 -0.010747 -v 0.067724 0.993201 -0.007263 -v 0.055237 0.990217 -0.003018 -v 0.040991 0.988000 0.001825 -v 0.025534 0.986634 0.007080 -v 0.027320 1.033703 0.008781 -v 0.044496 1.032337 0.005161 -v 0.060325 1.030120 0.001825 -v 0.074200 1.027136 -0.001099 -v 0.085586 1.023500 -0.003499 -v 0.094047 1.019351 -0.005282 -v 0.099257 1.014850 -0.006380 -v 0.101016 1.010168 -0.006751 -v 0.099257 1.005487 -0.006380 -v 0.094047 1.000986 -0.005282 -v 0.085586 0.996837 -0.003499 -v 0.074200 0.993201 -0.001099 -v 0.060325 0.990217 0.001825 -v 0.044496 0.988000 0.005161 -v 0.027320 0.986634 0.008781 -v 0.028421 1.033703 0.010626 -v 0.046654 1.032337 0.008781 -v 0.063458 1.030120 0.007080 -v 0.078187 1.027136 0.005589 -v 0.090275 1.023500 0.004366 -v 0.099257 1.019351 0.003457 -v 0.104788 1.014850 0.002897 -v 0.106656 1.010168 0.002708 -v 0.104788 1.005487 0.002897 -v 0.099257 1.000986 0.003457 -v 0.090275 0.996837 0.004366 -v 0.078187 0.993201 0.005589 -v 0.063458 0.990217 0.007080 -v 0.046654 0.988000 0.008781 -v 0.028421 0.986634 0.010626 -v 0.028792 1.033703 0.012545 -v 0.047383 1.032337 0.012545 -v 0.064516 1.030120 0.012545 -v 0.079534 1.027136 0.012545 -v 0.091858 1.023500 0.012545 -v 0.101016 1.019351 0.012545 -v 0.106656 1.014850 0.012545 -v 0.108560 1.010168 0.012545 -v 0.106656 1.005487 0.012545 -v 0.101016 1.000986 0.012545 -v 0.091858 0.996837 0.012545 -v 0.079534 0.993201 0.012545 -v 0.064516 0.990217 0.012545 -v 0.047383 0.988000 0.012545 -v 0.028792 0.986634 0.012545 -v 0.028421 1.033703 0.014464 -v 0.046654 1.032337 0.016309 -v 0.063458 1.030120 0.018010 -v 0.078187 1.027136 0.019500 -v 0.090275 1.023500 0.020724 -v 0.099257 1.019351 0.021633 -v 0.104788 1.014850 0.022193 -v 0.106656 1.010168 0.022382 -v 0.104788 1.005487 0.022193 -v 0.099257 1.000986 0.021633 -v 0.090275 0.996837 0.020724 -v 0.078187 0.993201 0.019500 -v 0.063458 0.990217 0.018010 -v 0.046654 0.988000 0.016309 -v 0.028421 0.986634 0.014464 -v 0.027320 1.033703 0.016309 -v 0.044496 1.032337 0.019929 -v 0.060325 1.030120 0.023265 -v 0.074200 1.027136 0.026189 -v 0.085586 1.023500 0.028588 -v 0.094047 1.019351 0.030371 -v 0.099257 1.014850 0.031469 -v 0.101016 1.010168 0.031840 -v 0.099257 1.005487 0.031469 -v 0.094047 1.000986 0.030371 -v 0.085586 0.996837 0.028588 -v 0.074200 0.993201 0.026189 -v 0.060325 0.990217 0.023265 -v 0.044496 0.988000 0.019929 -v 0.027320 0.986634 0.016309 -v 0.025534 1.033703 0.018010 -v 0.040991 1.032337 0.023265 -v 0.055237 1.030120 0.028108 -v 0.067724 1.027136 0.032353 -v 0.077971 1.023500 0.035836 -v 0.085586 1.019351 0.038425 -v 0.090275 1.014850 0.040019 -v 0.091858 1.010168 0.040557 -v 0.090275 1.005487 0.040019 -v 0.085586 1.000986 0.038425 -v 0.077971 0.996837 0.035836 -v 0.067724 0.993201 0.032353 -v 0.055237 0.990217 0.028108 -v 0.040991 0.988000 0.023265 -v 0.025534 0.986634 0.018010 -v 0.023129 1.033703 0.019500 -v 0.036275 1.032337 0.026189 -v 0.048390 1.030120 0.032353 -v 0.059009 1.027136 0.037755 -v 0.067724 1.023500 0.042189 -v 0.074200 1.019351 0.045484 -v 0.078187 1.014850 0.047513 -v 0.079534 1.010168 0.048198 -v 0.078187 1.005487 0.047513 -v 0.074200 1.000986 0.045484 -v 0.067724 0.996837 0.042189 -v 0.059009 0.993201 0.037755 -v 0.048390 0.990217 0.032353 -v 0.036275 0.988000 0.026189 -v 0.023129 0.986634 0.019500 -v 0.020200 1.033703 0.020724 -v 0.030528 1.032337 0.028588 -v 0.040047 1.030120 0.035836 -v 0.048390 1.027136 0.042189 -v 0.055237 1.023500 0.047403 -v 0.060325 1.019351 0.051277 -v 0.063458 1.014850 0.053663 -v 0.064516 1.010168 0.054469 -v 0.063458 1.005487 0.053663 -v 0.060325 1.000986 0.051277 -v 0.055237 0.996837 0.047403 -v 0.048390 0.993201 0.042189 -v 0.040047 0.990217 0.035836 -v 0.030528 0.988000 0.028588 -v 0.020200 0.986634 0.020724 -v 0.009458 0.986173 0.012545 -v 0.016857 1.033703 0.021633 -v 0.023971 1.032337 0.030371 -v 0.030528 1.030120 0.038425 -v 0.036275 1.027136 0.045484 -v 0.040991 1.023500 0.051277 -v 0.044496 1.019351 0.055582 -v 0.046654 1.014850 0.058233 -v 0.047383 1.010168 0.059128 -v 0.046654 1.005487 0.058233 -v 0.044496 1.000986 0.055582 -v 0.040991 0.996837 0.051277 -v 0.036275 0.993201 0.045484 -v 0.030528 0.990217 0.038425 -v 0.023971 0.988000 0.030371 -v 0.016857 0.986634 0.021633 -v 0.013230 1.033703 0.022193 -v 0.016857 1.032337 0.031469 -v 0.020200 1.030120 0.040019 -v 0.023129 1.027136 0.047513 -v 0.025534 1.023500 0.053663 -v 0.027320 1.019351 0.058233 -v 0.028421 1.014850 0.061047 -v 0.028792 1.010168 0.061997 -v 0.028421 1.005487 0.061047 -v 0.027320 1.000986 0.058233 -v 0.025534 0.996837 0.053663 -v 0.023129 0.993201 0.047513 -v 0.020200 0.990217 0.040019 -v 0.016857 0.988000 0.031469 -v 0.013230 0.986634 0.022193 -v 0.009458 1.033703 0.022382 -v 0.009458 1.032337 0.031840 -v 0.009458 1.030120 0.040557 -v 0.009458 1.027136 0.048198 -v 0.009458 1.023500 0.054469 -v 0.009458 1.019351 0.059128 -v 0.009458 1.014850 0.061997 -v 0.009458 1.010168 0.062966 -v 0.009458 1.005487 0.061997 -v 0.009458 1.000986 0.059128 -v 0.009458 0.996837 0.054469 -v 0.009458 0.993201 0.048198 -v 0.009458 0.990217 0.040557 -v 0.009458 0.988000 0.031840 -v 0.009458 0.986634 0.022382 -v 0.005687 1.033703 0.022193 -v 0.002060 1.032337 0.031469 -v -0.001283 1.030120 0.040019 -v -0.004213 1.027136 0.047513 -v -0.006617 1.023500 0.053663 -v -0.008404 1.019351 0.058233 -v -0.009504 1.014850 0.061047 -v -0.009875 1.010168 0.061997 -v -0.009504 1.005487 0.061047 -v -0.008404 1.000986 0.058233 -v -0.006617 0.996837 0.053663 -v -0.004213 0.993201 0.047513 -v -0.001283 0.990217 0.040019 -v 0.002060 0.988000 0.031469 -v 0.005687 0.986634 0.022193 -v 0.002060 1.033703 0.021633 -v -0.005055 1.032337 0.030371 -v -0.011611 1.030120 0.038425 -v -0.017358 1.027136 0.045484 -v -0.022075 1.023500 0.051277 -v -0.025579 1.019351 0.055582 -v -0.027737 1.014850 0.058233 -v -0.028466 1.010168 0.059128 -v -0.027737 1.005487 0.058233 -v -0.025579 1.000986 0.055582 -v -0.022075 0.996837 0.051277 -v -0.017358 0.993201 0.045484 -v -0.011611 0.990217 0.038425 -v -0.005055 0.988000 0.030371 -v 0.002060 0.986634 0.021633 -v -0.001283 1.033703 0.020724 -v -0.011611 1.032337 0.028588 -v -0.021130 1.030120 0.035836 -v -0.029473 1.027136 0.042189 -v -0.036321 1.023500 0.047403 -v -0.041409 1.019351 0.051277 -v -0.044542 1.014850 0.053663 -v -0.045600 1.010168 0.054468 -v -0.044542 1.005487 0.053663 -v -0.041408 1.000986 0.051277 -v -0.036321 0.996837 0.047403 -v -0.029473 0.993201 0.042189 -v -0.021130 0.990217 0.035836 -v -0.011611 0.988000 0.028588 -v -0.001283 0.986634 0.020724 -v -0.004213 1.033703 0.019500 -v -0.017358 1.032337 0.026189 -v -0.029473 1.030120 0.032353 -v -0.040092 1.027136 0.037755 -v -0.048807 1.023500 0.042189 -v -0.055283 1.019351 0.045484 -v -0.059271 1.014850 0.047513 -v -0.060617 1.010168 0.048198 -v -0.059271 1.005487 0.047513 -v -0.055283 1.000986 0.045484 -v -0.048807 0.996837 0.042189 -v -0.040092 0.993201 0.037755 -v -0.029473 0.990217 0.032353 -v -0.017358 0.988000 0.026189 -v -0.004213 0.986634 0.019500 -v -0.006617 1.033703 0.018010 -v -0.022075 1.032337 0.023265 -v -0.036321 1.030120 0.028108 -v -0.048807 1.027136 0.032353 -v -0.059055 1.023500 0.035836 -v -0.066669 1.019351 0.038425 -v -0.071358 1.014850 0.040019 -v -0.072942 1.010168 0.040557 -v -0.071358 1.005487 0.040019 -v -0.066669 1.000986 0.038425 -v -0.059055 0.996837 0.035836 -v -0.048807 0.993201 0.032353 -v -0.036321 0.990217 0.028108 -v -0.022075 0.988000 0.023265 -v -0.006617 0.986634 0.018010 -v 0.009458 1.034164 0.012545 -v -0.008404 1.033703 0.016309 -v -0.025579 1.032337 0.019929 -v -0.041408 1.030120 0.023265 -v -0.055283 1.027136 0.026189 -v -0.066669 1.023500 0.028588 -v -0.075130 1.019351 0.030371 -v -0.080340 1.014850 0.031469 -v -0.082100 1.010168 0.031840 -v -0.080340 1.005487 0.031469 -v -0.075130 1.000986 0.030371 -v -0.066669 0.996837 0.028588 -v -0.055283 0.993201 0.026189 -v -0.041408 0.990217 0.023265 -v -0.025579 0.988000 0.019929 -v -0.008404 0.986634 0.016309 -v -0.009504 1.033703 0.014464 -v -0.027737 1.032337 0.016309 -v -0.044542 1.030120 0.018010 -v -0.059271 1.027136 0.019500 -v -0.071358 1.023500 0.020724 -v -0.080340 1.019351 0.021633 -v -0.085871 1.014850 0.022193 -v -0.087739 1.010168 0.022382 -v -0.085871 1.005487 0.022192 -v -0.080340 1.000986 0.021633 -v -0.071358 0.996837 0.020724 -v -0.059271 0.993201 0.019500 -v -0.044542 0.990217 0.018010 -v -0.027737 0.988000 0.016309 -v -0.009504 0.986634 0.014464 -vn -0.811518 0.584307 0.000000 -vn -0.533006 0.846095 0.000000 -vn -0.513047 0.834559 -0.200568 -vn -0.104160 0.994537 0.000000 -vn -0.051546 0.998657 0.000031 -vn -0.050203 0.998505 -0.020386 -vn -0.165685 -0.986145 0.000000 -vn -0.244362 -0.969665 0.000000 -vn -0.161748 -0.984710 -0.064211 -vn -1.000000 0.000000 0.000000 -vn -0.767876 0.569903 -0.292459 -vn -0.165685 0.986145 0.000000 -vn -0.101688 0.993957 -0.040651 -vn -0.104160 -0.994537 0.000000 -vn -0.101688 -0.993957 -0.040620 -vn -0.811518 -0.584307 0.000000 -vn -0.767876 -0.569903 -0.292459 -vn -0.244362 0.969665 0.000000 -vn -0.161779 0.984710 -0.064211 -vn -0.051546 -0.998657 0.000000 -vn -0.050203 -0.998505 -0.020417 -vn -0.533006 -0.846095 0.000000 -vn -0.513047 -0.834559 -0.200598 -vn -0.355968 0.934477 0.000000 -vn -0.238197 0.966613 -0.094272 -vn -0.355968 -0.934477 0.000000 -vn -0.345683 -0.928373 -0.136296 -vn -0.345683 0.928373 -0.136296 -vn -0.238197 -0.966613 -0.094241 -vn -0.460768 0.804498 -0.374737 -vn -0.046510 0.998138 -0.039369 -vn -0.150700 -0.980682 -0.124516 -vn -0.937864 0.000000 -0.346965 -vn -0.662038 0.533647 -0.526200 -vn -0.094790 0.992340 -0.078829 -vn -0.094790 -0.992370 -0.078799 -vn -0.662038 -0.533647 -0.526200 -vn -0.150700 0.980682 -0.124516 -vn -0.046510 -0.998138 -0.039369 -vn -0.460738 -0.804498 -0.374737 -vn -0.220954 0.958129 -0.181921 -vn -0.317423 -0.911802 -0.260384 -vn -0.317423 0.911802 -0.260353 -vn -0.220954 -0.958129 -0.181951 -vn -0.276437 -0.888882 -0.365307 -vn -0.276437 0.888882 -0.365307 -vn -0.195044 -0.946013 -0.258797 -vn -0.390362 0.765465 -0.511521 -vn -0.041139 0.997559 -0.056124 -vn -0.133854 -0.974822 -0.178289 -vn -0.789727 0.000000 -0.613422 -vn -0.535539 0.489547 -0.688101 -vn -0.084323 0.989990 -0.113010 -vn -0.084323 -0.989990 -0.112980 -vn -0.535539 -0.489547 -0.688101 -vn -0.133854 0.974822 -0.178259 -vn -0.041139 -0.997559 -0.056124 -vn -0.390362 -0.765435 -0.511521 -vn -0.195044 0.946013 -0.258827 -vn -0.034425 -0.996918 -0.070345 -vn -0.312601 -0.726188 -0.612293 -vn -0.162603 0.932432 -0.322642 -vn -0.227241 -0.864162 -0.448927 -vn -0.227241 0.864162 -0.448927 -vn -0.162603 -0.932432 -0.322642 -vn -0.312601 0.726188 -0.612293 -vn -0.034425 0.996918 -0.070345 -vn -0.112369 -0.968108 -0.223853 -vn -0.620777 0.000000 -0.783959 -vn -0.411817 0.448561 -0.793207 -vn -0.070925 0.987274 -0.142216 -vn -0.070925 -0.987274 -0.142186 -vn -0.411817 -0.448561 -0.793176 -vn -0.112369 0.968108 -0.223853 -vn -0.055177 0.984619 -0.165685 -vn -0.055177 -0.984619 -0.165654 -vn -0.465529 0.000000 -0.885006 -vn -0.297830 -0.415754 -0.859310 -vn -0.087252 0.961608 -0.260109 -vn -0.026673 -0.996277 -0.081698 -vn -0.233192 -0.692373 -0.682791 -vn -0.125462 0.919523 -0.372417 -vn -0.173223 -0.841548 -0.511643 -vn -0.173223 0.841548 -0.511612 -vn -0.125462 -0.919523 -0.372417 -vn -0.233192 0.692373 -0.682791 -vn -0.026673 0.996277 -0.081698 -vn -0.087252 -0.961608 -0.260140 -vn -0.297830 0.415754 -0.859310 -vn -0.154454 0.667013 -0.728843 -vn -0.018159 0.995758 -0.089908 -vn -0.059511 -0.956236 -0.286386 -vn -0.330424 0.000000 -0.943815 -vn -0.193091 0.392499 -0.899228 -vn -0.037690 0.982421 -0.182775 -vn -0.037690 -0.982421 -0.182745 -vn -0.193121 -0.392499 -0.899228 -vn -0.059511 0.956236 -0.286355 -vn -0.018159 -0.995758 -0.089908 -vn -0.154454 -0.667013 -0.728843 -vn -0.085177 0.909055 -0.407819 -vn -0.116550 -0.823725 -0.554826 -vn -0.116550 0.823725 -0.554857 -vn -0.085177 -0.909055 -0.407819 -vn -0.058535 -0.812433 -0.580096 -vn -0.058535 0.812433 -0.580065 -vn -0.043031 -0.902280 -0.428938 -vn -0.076876 0.651418 -0.754784 -vn -0.009156 0.995422 -0.094852 -vn -0.030152 -0.952757 -0.302225 -vn -0.211585 0.000000 -0.977355 -vn -0.094913 0.378796 -0.920560 -vn -0.019105 0.980956 -0.193121 -vn -0.019105 -0.980956 -0.193121 -vn -0.094913 -0.378796 -0.920591 -vn -0.030152 0.952757 -0.302225 -vn -0.009156 -0.995422 -0.094821 -vn -0.076876 -0.651418 -0.754784 -vn -0.043031 0.902280 -0.428938 -vn 0.000000 -0.995331 -0.096469 -vn 0.000000 -0.646168 -0.763176 -vn 0.000000 0.899930 -0.435957 -vn 0.000000 -0.808557 -0.588366 -vn 0.000000 0.808557 -0.588366 -vn 0.000000 -0.899960 -0.435957 -vn 0.000000 0.646168 -0.763176 -vn 0.000000 0.995331 -0.096469 -vn 0.000000 -0.951537 -0.307505 -vn -0.103244 0.000000 -0.994629 -vn 0.000000 0.374279 -0.927305 -vn 0.000000 0.980468 -0.196570 -vn 0.000000 -0.980468 -0.196570 -vn 0.000000 -0.374248 -0.927305 -vn 0.000000 0.951537 -0.307505 -vn 0.030152 -0.952727 -0.302225 -vn 0.000000 0.000000 -0.999969 -vn 0.103244 0.000000 -0.994629 -vn 0.043031 0.902280 -0.428938 -vn 0.019105 -0.980956 -0.193121 -vn 0.094913 -0.378796 -0.920591 -vn 0.058535 0.812433 -0.580065 -vn 0.076876 -0.651418 -0.754784 -vn 0.076876 0.651418 -0.754784 -vn 0.058535 -0.812433 -0.580096 -vn 0.094913 0.378796 -0.920591 -vn 0.019105 0.980956 -0.193121 -vn 0.043031 -0.902280 -0.428938 -vn 0.030152 0.952757 -0.302225 -vn 0.009156 0.995422 -0.094852 -vn 0.037690 0.982421 -0.182775 -vn 0.085177 -0.909055 -0.407819 -vn 0.211585 0.000000 -0.977355 -vn 0.059511 0.956236 -0.286355 -vn 0.059511 -0.956236 -0.286386 -vn 0.085177 0.909055 -0.407819 -vn 0.009156 -0.995422 -0.094821 -vn 0.037690 -0.982421 -0.182745 -vn 0.193121 -0.392499 -0.899228 -vn 0.116550 0.823725 -0.554857 -vn 0.154454 -0.667013 -0.728843 -vn 0.154454 0.667013 -0.728813 -vn 0.116550 -0.823725 -0.554857 -vn 0.193121 0.392499 -0.899228 -vn 0.233192 0.692373 -0.682791 -vn 0.173223 -0.841548 -0.511643 -vn 0.297830 0.415754 -0.859310 -vn 0.018159 0.995758 -0.089908 -vn 0.055177 0.984619 -0.165654 -vn 0.125462 -0.919523 -0.372417 -vn 0.330424 0.000000 -0.943815 -vn 0.087252 0.961608 -0.260109 -vn 0.087252 -0.961608 -0.260109 -vn 0.125462 0.919523 -0.372417 -vn 0.018159 -0.995758 -0.089908 -vn 0.055177 -0.984619 -0.165654 -vn 0.297830 -0.415754 -0.859310 -vn 0.173223 0.841548 -0.511643 -vn 0.233192 -0.692373 -0.682791 -vn 0.411817 -0.448561 -0.793176 -vn 0.227241 0.864162 -0.448927 -vn 0.312601 -0.726188 -0.612262 -vn 0.312601 0.726188 -0.612293 -vn 0.227241 -0.864162 -0.448927 -vn 0.411817 0.448561 -0.793176 -vn 0.026673 0.996277 -0.081698 -vn 0.070925 0.987274 -0.142216 -vn 0.162603 -0.932432 -0.322642 -vn 0.465529 0.000000 -0.885006 -vn 0.112369 0.968108 -0.223853 -vn 0.112369 -0.968108 -0.223853 -vn 0.162603 0.932432 -0.322642 -vn 0.026673 -0.996277 -0.081668 -vn 0.070925 -0.987274 -0.142216 -vn 0.133854 -0.974822 -0.178289 -vn 0.620777 0.000000 -0.783959 -vn 0.195044 0.946013 -0.258797 -vn 0.034425 -0.996918 -0.070345 -vn 0.084323 -0.989990 -0.112980 -vn 0.535539 -0.489547 -0.688101 -vn 0.276437 0.888882 -0.365307 -vn 0.390362 -0.765465 -0.511521 -vn 0.390362 0.765465 -0.511521 -vn 0.276437 -0.888882 -0.365307 -vn 0.535539 0.489547 -0.688101 -vn 0.034425 0.996918 -0.070376 -vn 0.084323 0.989990 -0.113010 -vn 0.195044 -0.946013 -0.258797 -vn 0.133854 0.974822 -0.178259 -vn 0.041139 0.997559 -0.056124 -vn 0.094790 0.992370 -0.078799 -vn 0.220954 -0.958129 -0.181921 -vn 0.789727 0.000000 -0.613422 -vn 0.150700 0.980682 -0.124516 -vn 0.150700 -0.980682 -0.124546 -vn 0.220954 0.958129 -0.181921 -vn 0.041139 -0.997559 -0.056124 -vn 0.094790 -0.992370 -0.078799 -vn 0.662038 -0.533647 -0.526200 -vn 0.317423 0.911802 -0.260353 -vn 0.460738 -0.804498 -0.374737 -vn 0.460768 0.804498 -0.374737 -vn 0.317423 -0.911802 -0.260384 -vn 0.662038 0.533647 -0.526200 -vn 0.513047 0.834559 -0.200568 -vn 0.345683 -0.928373 -0.136296 -vn 0.767876 0.569903 -0.292459 -vn 0.046510 0.998138 -0.039399 -vn 0.101688 0.993957 -0.040620 -vn 0.238197 -0.966613 -0.094241 -vn 0.937864 0.000000 -0.346965 -vn 0.161779 0.984710 -0.064241 -vn 0.161748 -0.984710 -0.064241 -vn 0.238197 0.966613 -0.094241 -vn 0.046510 -0.998138 -0.039369 -vn 0.101688 -0.993957 -0.040620 -vn 0.767876 -0.569903 -0.292459 -vn 0.345683 0.928373 -0.136296 -vn 0.513047 -0.834559 -0.200598 -vn 0.811518 -0.584307 0.000000 -vn 0.355968 0.934477 0.000000 -vn 0.533006 -0.846065 0.000000 -vn 0.533006 0.846095 0.000000 -vn 0.355968 -0.934477 0.000000 -vn 0.811518 0.584307 0.000000 -vn 0.050203 0.998505 -0.020447 -vn 0.104160 0.994537 0.000000 -vn 0.244362 -0.969665 0.000000 -vn 0.165685 0.986145 0.000000 -vn 0.165685 -0.986145 0.000000 -vn 0.244362 0.969665 0.000000 -vn 0.050203 -0.998505 -0.020417 -vn 0.104160 -0.994537 0.000000 -vn 0.101688 -0.993957 0.040620 -vn 0.767876 -0.569903 0.292459 -vn 0.161779 0.984710 0.064241 -vn 0.051546 -0.998657 0.000000 -vn 0.050203 -0.998505 0.020417 -vn 0.513047 -0.834559 0.200598 -vn 0.238197 0.966613 0.094241 -vn 0.345683 -0.928373 0.136296 -vn 0.345683 0.928373 0.136296 -vn 0.238197 -0.966613 0.094241 -vn 0.513047 0.834559 0.200568 -vn 0.051546 0.998657 0.000000 -vn 0.050203 0.998505 0.020386 -vn 0.161748 -0.984710 0.064211 -vn 0.767876 0.569903 0.292459 -vn 0.101688 0.993957 0.040620 -vn 0.150700 -0.980682 0.124516 -vn 0.937864 0.000000 0.346965 -vn 0.662038 0.533647 0.526200 -vn 0.094790 0.992340 0.078829 -vn 0.094790 -0.992370 0.078799 -vn 0.662038 -0.533647 0.526200 -vn 0.150700 0.980682 0.124516 -vn 0.046510 -0.998138 0.039369 -vn 0.460738 -0.804498 0.374737 -vn 0.220954 0.958129 0.181951 -vn 0.317423 -0.911802 0.260384 -vn 0.317423 0.911802 0.260384 -vn 0.220954 -0.958129 0.181951 -vn 0.460768 0.804498 0.374737 -vn 0.046510 0.998138 0.039369 -vn 0.195044 -0.946013 0.258797 -vn 0.390362 0.765465 0.511521 -vn 0.041139 0.997559 0.056124 -vn 0.133854 -0.974822 0.178289 -vn 0.789727 0.000000 0.613422 -vn 0.535539 0.489547 0.688101 -vn 0.084323 0.989990 0.113010 -vn 0.084323 -0.989990 0.112980 -vn 0.535539 -0.489547 0.688101 -vn 0.133854 0.974822 0.178259 -vn 0.041139 -0.997559 0.056124 -vn 0.390362 -0.765465 0.511521 -vn 0.195044 0.946013 0.258797 -vn 0.276437 -0.888882 0.365307 -vn 0.276437 0.888882 0.365307 -vn 0.162603 0.932432 0.322642 -vn 0.227241 -0.864162 0.448927 -vn 0.227241 0.864162 0.448927 -vn 0.162603 -0.932432 0.322642 -vn 0.312601 0.726188 0.612293 -vn 0.034425 0.996918 0.070345 -vn 0.112369 -0.968108 0.223884 -vn 0.620777 0.000000 0.783959 -vn 0.411817 0.448561 0.793176 -vn 0.070925 0.987274 0.142216 -vn 0.070925 -0.987274 0.142186 -vn 0.411817 -0.448561 0.793176 -vn 0.112369 0.968108 0.223853 -vn 0.034425 -0.996918 0.070345 -vn 0.312601 -0.726188 0.612293 -vn 0.465529 0.000000 0.885006 -vn 0.297830 -0.415754 0.859310 -vn 0.087252 0.961608 0.260109 -vn 0.026673 -0.996277 0.081668 -vn 0.233192 -0.692373 0.682791 -vn 0.125462 0.919523 0.372417 -vn 0.173223 -0.841548 0.511643 -vn 0.173223 0.841517 0.511643 -vn 0.125462 -0.919523 0.372417 -vn 0.233192 0.692373 0.682791 -vn 0.026673 0.996277 0.081698 -vn 0.087252 -0.961608 0.260109 -vn 0.297830 0.415723 0.859310 -vn 0.055177 0.984619 0.165685 -vn 0.055177 -0.984619 0.165654 -vn 0.059511 -0.956236 0.286386 -vn 0.330393 0.000000 0.943815 -vn 0.193121 0.392499 0.899228 -vn 0.037690 0.982421 0.182775 -vn 0.037690 -0.982421 0.182775 -vn 0.193121 -0.392499 0.899228 -vn 0.059511 0.956236 0.286386 -vn 0.018159 -0.995758 0.089877 -vn 0.154454 -0.667013 0.728843 -vn 0.085177 0.909055 0.407819 -vn 0.116550 -0.823725 0.554826 -vn 0.116550 0.823725 0.554857 -vn 0.085177 -0.909055 0.407819 -vn 0.154454 0.667013 0.728843 -vn 0.018159 0.995758 0.089908 -vn 0.043031 -0.902280 0.428938 -vn 0.076876 0.651418 0.754784 -vn 0.009156 0.995422 0.094852 -vn 0.030152 -0.952757 0.302225 -vn 0.211585 0.000000 0.977355 -vn 0.094913 0.378796 0.920591 -vn 0.019105 0.980956 0.193121 -vn 0.019105 -0.980956 0.193121 -vn 0.094913 -0.378796 0.920591 -vn 0.030152 0.952727 0.302225 -vn 0.009156 -0.995422 0.094821 -vn 0.076876 -0.651418 0.754784 -vn 0.043031 0.902280 0.428938 -vn 0.058535 -0.812433 0.580065 -vn 0.058535 0.812433 0.580096 -vn 0.000000 0.899960 0.435957 -vn 0.000000 -0.808557 0.588366 -vn 0.000000 0.808557 0.588366 -vn 0.000000 -0.899930 0.435957 -vn 0.000000 0.646168 0.763176 -vn 0.000000 0.995331 0.096469 -vn 0.000000 -0.951537 0.307505 -vn 0.103244 0.000000 0.994629 -vn 0.000000 0.374279 0.927305 -vn 0.000000 0.980468 0.196570 -vn 0.000000 -0.980468 0.196570 -vn 0.000000 -0.374279 0.927305 -vn 0.000000 0.951537 0.307505 -vn 0.000000 -0.995331 0.096469 -vn 0.000000 -0.646168 0.763146 -vn 0.000000 0.000000 1.000000 -vn -0.103244 0.000000 0.994629 -vn -0.043031 0.902280 0.428938 -vn -0.019105 -0.980956 0.193121 -vn -0.094913 -0.378796 0.920591 -vn -0.058535 0.812433 0.580096 -vn -0.076876 -0.651418 0.754784 -vn -0.076876 0.651418 0.754784 -vn -0.058535 -0.812433 0.580096 -vn -0.094913 0.378796 0.920591 -vn -0.019105 0.980956 0.193121 -vn -0.043031 -0.902280 0.428938 -vn -0.030152 0.952757 0.302225 -vn -0.030152 -0.952727 0.302225 -vn -0.085177 -0.909055 0.407819 -vn -0.211585 0.000000 0.977355 -vn -0.059511 0.956236 0.286386 -vn -0.059511 -0.956236 0.286386 -vn -0.085177 0.909055 0.407819 -vn -0.009156 -0.995422 0.094821 -vn -0.037690 -0.982421 0.182745 -vn -0.193121 -0.392499 0.899228 -vn -0.116550 0.823725 0.554857 -vn -0.154454 -0.667013 0.728843 -vn -0.154454 0.667013 0.728843 -vn -0.116550 -0.823725 0.554857 -vn -0.193121 0.392499 0.899228 -vn -0.009156 0.995422 0.094852 -vn -0.037690 0.982421 0.182775 -vn -0.173223 -0.841548 0.511643 -vn -0.297830 0.415723 0.859310 -vn -0.018159 0.995758 0.089908 -vn -0.055177 0.984619 0.165685 -vn -0.125462 -0.919523 0.372417 -vn -0.330424 0.000000 0.943815 -vn -0.087252 0.961608 0.260109 -vn -0.087252 -0.961608 0.260109 -vn -0.125462 0.919523 0.372417 -vn -0.018159 -0.995758 0.089908 -vn -0.055177 -0.984619 0.165654 -vn -0.297830 -0.415754 0.859310 -vn -0.173223 0.841548 0.511643 -vn -0.233192 -0.692373 0.682760 -vn -0.233192 0.692373 0.682791 -vn -0.312601 -0.726188 0.612262 -vn -0.312601 0.726188 0.612293 -vn -0.227241 -0.864162 0.448927 -vn -0.411817 0.448561 0.793176 -vn -0.026673 0.996277 0.081698 -vn -0.070925 0.987274 0.142216 -vn -0.162603 -0.932432 0.322642 -vn -0.465529 0.000000 0.885006 -vn -0.112369 0.968108 0.223853 -vn -0.112369 -0.968108 0.223884 -vn -0.162603 0.932432 0.322642 -vn -0.026673 -0.996277 0.081698 -vn -0.070925 -0.987274 0.142247 -vn -0.411817 -0.448561 0.793176 -vn -0.227241 0.864162 0.448927 -vn -0.195044 0.946013 0.258797 -vn -0.034425 -0.996918 0.070345 -vn -0.084323 -0.989990 0.112980 -vn -0.535539 -0.489547 0.688101 -vn -0.276437 0.888882 0.365307 -vn -0.390362 -0.765465 0.511521 -vn -0.390362 0.765435 0.511521 -vn -0.276437 -0.888882 0.365307 -vn -0.535539 0.489547 0.688101 -vn -0.034425 0.996918 0.070345 -vn -0.084323 0.989990 0.113010 -vn -0.195044 -0.946013 0.258797 -vn -0.620777 0.000000 0.783959 -vn -0.133854 0.974822 0.178259 -vn -0.133854 -0.974822 0.178289 -vn -0.789727 0.000000 0.613422 -vn -0.150700 0.980682 0.124516 -vn -0.150700 -0.980682 0.124516 -vn -0.220954 0.958129 0.181921 -vn -0.041139 -0.997559 0.056124 -vn -0.094790 -0.992370 0.078799 -vn -0.662038 -0.533647 0.526200 -vn -0.317423 0.911802 0.260353 -vn -0.460738 -0.804498 0.374737 -vn -0.460738 0.804498 0.374737 -vn -0.317423 -0.911802 0.260384 -vn -0.662038 0.533647 0.526200 -vn -0.041139 0.997559 0.056093 -vn -0.094790 0.992370 0.078799 -vn -0.220954 -0.958129 0.181951 -vn -0.345683 -0.928373 0.136296 -vn -0.767876 0.569903 0.292459 -vn -0.046510 0.998138 0.039369 -vn -0.101688 0.993957 0.040620 -vn -0.238197 -0.966613 0.094241 -vn -0.937864 0.000000 0.346965 -vn -0.161779 0.984710 0.064241 -vn -0.161748 -0.984710 0.064211 -vn -0.238197 0.966613 0.094272 -vn -0.046510 -0.998138 0.039369 -vn -0.101688 -0.993957 0.040620 -vn -0.767876 -0.569903 0.292459 -vn -0.345683 0.928373 0.136296 -vn -0.513047 -0.834559 0.200568 -vn -0.513047 0.834559 0.200598 -vn -0.050203 -0.998505 0.020417 -vn -0.050203 0.998505 0.020447 -vn -0.513047 0.834559 -0.200598 -vn -0.051546 0.998657 0.000000 -vn -0.050203 0.998505 -0.020417 -vn -0.101688 -0.993957 -0.040651 -vn -0.161779 0.984710 -0.064241 -vn -0.050203 -0.998505 -0.020447 -vn -0.513047 -0.834559 -0.200568 -vn -0.460738 0.804498 -0.374737 -vn -0.094790 0.992370 -0.078799 -vn -0.220954 0.958129 -0.181951 -vn -0.317423 0.911802 -0.260384 -vn -0.220954 -0.958129 -0.181921 -vn -0.041139 0.997559 -0.056154 -vn -0.133854 -0.974822 -0.178259 -vn -0.390362 -0.765465 -0.511521 -vn -0.195044 0.946013 -0.258797 -vn -0.034425 -0.996918 -0.070376 -vn -0.312601 -0.726188 -0.612262 -vn -0.162603 -0.932432 -0.322672 -vn -0.312601 0.726188 -0.612262 -vn -0.034425 0.996918 -0.070376 -vn -0.411817 0.448561 -0.793176 -vn -0.070925 -0.987274 -0.142216 -vn -0.055177 0.984619 -0.165654 -vn -0.297830 -0.415723 -0.859310 -vn -0.173223 0.841548 -0.511643 -vn -0.087252 -0.961608 -0.260109 -vn -0.297830 0.415723 -0.859310 -vn -0.330393 0.000000 -0.943815 -vn -0.193121 0.392499 -0.899228 -vn -0.059511 0.956236 -0.286386 -vn -0.018159 -0.995758 -0.089938 -vn -0.154454 -0.667013 -0.728813 -vn -0.116550 0.823725 -0.554826 -vn -0.009156 0.995422 -0.094821 -vn -0.211554 0.000000 -0.977355 -vn -0.094913 0.378796 -0.920591 -vn -0.019105 -0.980987 -0.193121 -vn -0.030152 0.952757 -0.302194 -vn 0.000000 -0.646168 -0.763146 -vn 0.000000 0.646168 -0.763146 -vn 0.000000 -0.374279 -0.927305 -vn 0.030152 -0.952757 -0.302225 -vn 0.019105 -0.980987 -0.193121 -vn 0.058535 0.812433 -0.580096 -vn 0.059511 0.956236 -0.286386 -vn 0.154454 -0.667013 -0.728813 -vn 0.154454 0.667013 -0.728843 -vn 0.116550 -0.823725 -0.554826 -vn 0.297830 0.415723 -0.859310 -vn 0.087252 -0.961608 -0.260140 -vn 0.297830 -0.415723 -0.859310 -vn 0.312601 -0.726188 -0.612293 -vn 0.026673 -0.996277 -0.081698 -vn 0.133854 -0.974822 -0.178259 -vn 0.195044 0.946013 -0.258827 -vn 0.034425 -0.996918 -0.070376 -vn 0.276437 0.888852 -0.365307 -vn 0.535539 0.489547 -0.688131 -vn 0.034425 0.996918 -0.070345 -vn 0.084323 0.989990 -0.112980 -vn 0.041139 0.997559 -0.056154 -vn 0.220954 -0.958129 -0.181951 -vn 0.150700 -0.980682 -0.124516 -vn 0.317423 0.911802 -0.260384 -vn 0.046510 0.998138 -0.039369 -vn 0.101688 0.993957 -0.040651 -vn 0.161748 -0.984710 -0.064211 -vn 0.513047 -0.834559 -0.200568 -vn 0.533006 0.846065 0.000000 -vn 0.050203 0.998505 -0.020417 -vn 0.050203 -0.998505 -0.020447 -vn 0.101688 -0.993957 0.040651 -vn 0.050203 -0.998505 0.020447 -vn 0.513047 -0.834559 0.200568 -vn 0.513047 0.834559 0.200598 -vn 0.050203 0.998505 0.020417 -vn 0.101688 0.993957 0.040651 -vn 0.662038 0.533647 0.526231 -vn 0.094790 0.992370 0.078799 -vn 0.220954 -0.958129 0.181921 -vn 0.460738 0.804498 0.374737 -vn 0.046510 0.998138 0.039399 -vn 0.041139 0.997559 0.056154 -vn 0.133854 -0.974822 0.178259 -vn 0.133854 0.974822 0.178289 -vn 0.195044 0.946013 0.258827 -vn 0.312601 0.726188 0.612262 -vn 0.112369 -0.968108 0.223853 -vn 0.411817 0.448561 0.793207 -vn 0.070925 -0.987274 0.142216 -vn 0.034425 -0.996918 0.070376 -vn 0.312601 -0.726188 0.612262 -vn 0.297830 -0.415723 0.859310 -vn 0.026673 -0.996277 0.081698 -vn 0.173223 0.841548 0.511643 -vn 0.087252 -0.961608 0.260140 -vn 0.055177 0.984619 0.165654 -vn 0.059511 -0.956236 0.286355 -vn 0.018159 -0.995758 0.089908 -vn 0.154454 -0.667013 0.728813 -vn 0.116550 -0.823725 0.554857 -vn 0.116550 0.823725 0.554826 -vn 0.043031 -0.902280 0.428968 -vn 0.030152 0.952757 0.302225 -vn 0.058535 -0.812433 0.580096 -vn 0.000000 -0.899960 0.435957 -vn 0.000000 0.646168 0.763146 -vn -0.058535 0.812433 0.580065 -vn -0.030152 -0.952757 0.302225 -vn -0.059511 0.956236 0.286355 -vn -0.116550 0.823725 0.554826 -vn -0.154454 -0.667013 0.728813 -vn -0.173223 -0.841548 0.511612 -vn -0.018159 0.995758 0.089877 -vn -0.330393 0.000000 0.943815 -vn -0.087252 -0.961608 0.260140 -vn -0.297830 -0.415723 0.859310 -vn -0.233192 -0.692373 0.682791 -vn -0.312601 -0.726188 0.612293 -vn -0.026673 0.996277 0.081668 -vn -0.162603 -0.932432 0.322672 -vn -0.112369 -0.968108 0.223853 -vn -0.070925 -0.987274 0.142216 -vn -0.195044 0.946013 0.258827 -vn -0.034425 -0.996918 0.070315 -vn -0.390362 0.765465 0.511521 -vn -0.084323 0.989990 0.112980 -vn -0.133854 0.974822 0.178289 -vn -0.133854 -0.974822 0.178259 -vn -0.150700 0.980682 0.124546 -vn -0.220954 0.958129 0.181951 -vn -0.317454 -0.911802 0.260353 -vn -0.041139 0.997559 0.056124 -vn -0.046510 0.998138 0.039399 -vn -0.101688 0.993957 0.040651 -vn -0.238197 -0.966613 0.094272 -vn -0.238197 0.966613 0.094241 -vn -0.513047 -0.834559 0.200598 -vn -0.050203 -0.998505 0.020447 -vn -0.050203 0.998505 0.020417 -usemtl Tooth -s 1 -f 4345//2909 4344//2910 4359//2911 -f 4340//2912 4339//2913 4354//2914 -f 4351//2915 4350//2916 4366//2917 -f 4346//2918 4345//2909 4360//2919 -f 4341//2920 4340//2912 4355//2921 -f 4352//2922 4351//2915 4367//2923 -f 4347//2924 4346//2918 4362//2925 -f 4342//2926 4341//2920 4356//2927 -f 4353//2928 4352//2922 4368//2929 -f 4348//2930 4347//2924 4363//2931 -f 4343//2932 4342//2926 4357//2933 -f 4349//2934 4348//2930 4364//2935 -f 4344//2910 4343//2932 4358//2936 -f 4350//2916 4349//2934 4365//2937 -f 4360//2919 4359//2911 4374//2938 -f 4355//2921 4354//2914 4369//2939 -f 4366//2917 4365//2937 4381//2940 -f 4361//2941 4360//2919 4375//2942 -f 4356//2927 4355//2921 4370//2943 -f 4367//2923 4366//2917 4382//2944 -f 4362//2925 4361//2941 4377//2945 -f 4357//2933 4356//2927 4371//2946 -f 4368//2929 4367//2923 4383//2947 -f 4363//2931 4362//2925 4378//2948 -f 4358//2936 4357//2933 4372//2949 -f 4364//2935 4363//2931 4379//2950 -f 4359//2911 4358//2936 4373//2951 -f 4365//2937 4364//2935 4380//2952 -f 4379//2950 4378//2948 4394//2953 -f 4374//2938 4373//2951 4388//2954 -f 4380//2952 4379//2950 4395//2955 -f 4375//2942 4374//2938 4389//2956 -f 4370//2943 4369//2939 4384//2957 -f 4381//2940 4380//2952 4396//2958 -f 4376//2959 4375//2942 4390//2960 -f 4371//2946 4370//2943 4385//2961 -f 4382//2944 4381//2940 4397//2962 -f 4377//2945 4376//2959 4392//2963 -f 4372//2949 4371//2946 4386//2964 -f 4383//2947 4382//2944 4398//2965 -f 4378//2948 4377//2945 4393//2966 -f 4373//2951 4372//2949 4387//2967 -f 4398//2965 4397//2962 4413//2968 -f 4393//2966 4392//2963 4408//2969 -f 4388//2954 4387//2967 4402//2970 -f 4394//2953 4393//2966 4409//2971 -f 4389//2956 4388//2954 4403//2972 -f 4395//2955 4394//2953 4410//2973 -f 4390//2960 4389//2956 4404//2974 -f 4385//2961 4384//2957 4399//2975 -f 4396//2958 4395//2955 4411//2976 -f 4391//2977 4390//2960 4405//2978 -f 4386//2964 4385//2961 4400//2979 -f 4397//2962 4396//2958 4412//2980 -f 4392//2963 4391//2977 4407//2981 -f 4387//2967 4386//2964 4401//2982 -f 4401//2982 4400//2979 4415//2983 -f 4412//2980 4411//2976 4427//2984 -f 4407//2981 4406//2985 4422//2986 -f 4402//2970 4401//2982 4416//2987 -f 4413//2968 4412//2980 4428//2988 -f 4408//2969 4407//2981 4423//2989 -f 4403//2972 4402//2970 4417//2990 -f 4409//2971 4408//2969 4424//2991 -f 4404//2974 4403//2972 4418//2992 -f 4410//2973 4409//2971 4425//2993 -f 4405//2978 4404//2974 4419//2994 -f 4400//2979 4399//2975 4414//2995 -f 4411//2976 4410//2973 4426//2996 -f 4406//2985 4405//2978 4420//2997 -f 4420//2997 4419//2994 4434//2998 -f 4415//2983 4414//2995 4429//2999 -f 4426//2996 4425//2993 4441//3000 -f 4421//3001 4420//2997 4435//3002 -f 4416//2987 4415//2983 4430//3003 -f 4427//2984 4426//2996 4442//3004 -f 4422//2986 4421//3001 4437//3005 -f 4417//2990 4416//2987 4431//3006 -f 4428//2988 4427//2984 4443//3007 -f 4423//2989 4422//2986 4438//3008 -f 4418//2992 4417//2990 4432//3009 -f 4424//2991 4423//2989 4439//3010 -f 4419//2994 4418//2992 4433//3011 -f 4425//2993 4424//2991 4440//3012 -f 4439//3010 4438//3008 4454//3013 -f 4434//2998 4433//3011 4448//3014 -f 4440//3012 4439//3010 4455//3015 -f 4435//3002 4434//2998 4449//3016 -f 4430//3003 4429//2999 4444//3017 -f 4441//3000 4440//3012 4456//3018 -f 4436//3019 4435//3002 4450//3020 -f 4431//3006 4430//3003 4445//3021 -f 4442//3004 4441//3000 4457//3022 -f 4437//3005 4436//3019 4452//3023 -f 4432//3009 4431//3006 4446//3024 -f 4443//3007 4442//3004 4458//3025 -f 4438//3008 4437//3005 4453//3026 -f 4433//3011 4432//3009 4447//3027 -f 4458//3025 4457//3022 4473//3028 -f 4453//3026 4452//3023 4468//3029 -f 4448//3014 4447//3027 4462//3030 -f 4454//3013 4453//3026 4469//3031 -f 4449//3016 4448//3014 4463//3032 -f 4455//3015 4454//3013 4470//3033 -f 4450//3020 4449//3016 4464//3034 -f 4445//3021 4444//3017 4459//3035 -f 4456//3018 4455//3015 4471//3036 -f 4451//3037 4450//3020 4465//3038 -f 4446//3024 4445//3021 4460//3039 -f 4457//3022 4456//3018 4472//3040 -f 4452//3023 4451//3037 4467//3041 -f 4447//3027 4446//3024 4461//3042 -f 4472//3040 4471//3036 4486//3043 -f 4467//3041 4466//3044 4481//3045 -f 4462//3030 4461//3042 4477//3046 -f 4473//3028 4472//3040 4487//3047 -f 4468//3029 4467//3041 4482//3048 -f 4463//3032 4462//3030 4478//3049 -f 4469//3031 4468//3029 4483//3050 -f 4464//3034 4463//3032 4479//3051 -f 4470//3033 4469//3031 4484//3052 -f 4465//3038 4464//3034 4480//3053 -f 4460//3039 4459//3035 4475//3054 -f 4471//3036 4470//3033 4485//3055 -f 4466//3044 4465//3038 4481//3045 -f 4461//3042 4460//3039 4476//3056 -f 4475//3054 4474//3057 4490//3058 -f 4486//3043 4485//3055 4500//3059 -f 4481//3045 4480//3053 4496//3060 -f 4476//3056 4475//3054 4491//3061 -f 4487//3047 4486//3043 4501//3062 -f 4482//3048 4481//3045 4496//3060 -f 4477//3046 4476//3056 4492//3063 -f 4488//3064 4487//3047 4502//3065 -f 4483//3050 4482//3048 4497//3066 -f 4478//3049 4477//3046 4493//3067 -f 4484//3052 4483//3050 4498//3068 -f 4479//3051 4478//3049 4494//3069 -f 4485//3055 4484//3052 4499//3070 -f 4480//3053 4479//3051 4495//3071 -f 4494//3069 4493//3067 4509//3072 -f 4500//3059 4499//3070 4514//3073 -f 4495//3071 4494//3069 4510//3074 -f 4490//3058 4489//3075 4505//3076 -f 4501//3062 4500//3059 4515//3077 -f 4496//3060 4495//3071 4511//3078 -f 4491//3061 4490//3058 4506//3079 -f 4502//3065 4501//3062 4516//3080 -f 4497//3066 4496//3060 4511//3078 -f 4492//3063 4491//3061 4507//3081 -f 4503//3082 4502//3065 4517//3083 -f 4498//3068 4497//3066 4512//3084 -f 4493//3067 4492//3063 4508//3085 -f 4499//3070 4498//3068 4513//3086 -f 4513//3086 4512//3084 4527//3087 -f 4508//3085 4507//3081 4523//3088 -f 4514//3073 4513//3086 4528//3089 -f 4509//3072 4508//3085 4524//3090 -f 4515//3077 4514//3073 4529//3091 -f 4510//3074 4509//3072 4525//3092 -f 4505//3076 4504//3093 4520//3094 -f 4516//3080 4515//3077 4530//3095 -f 4511//3078 4510//3074 4526//3096 -f 4506//3079 4505//3076 4521//3097 -f 4517//3083 4516//3080 4531//3098 -f 4512//3084 4511//3078 4526//3096 -f 4507//3081 4506//3079 4522//3099 -f 4518//3100 4517//3083 4532//3101 -f 4532//3101 4531//3098 4546//3102 -f 4527//3087 4526//3096 4541//3103 -f 4522//3099 4521//3097 4537//3104 -f 4533//3105 4532//3101 4547//3106 -f 4528//3089 4527//3087 4542//3107 -f 4523//3088 4522//3099 4538//3108 -f 4529//3091 4528//3089 4543//3109 -f 4524//3090 4523//3088 4539//3110 -f 4530//3095 4529//3091 4544//3111 -f 4525//3092 4524//3090 4540//3112 -f 4520//3094 4519//3113 4535//3114 -f 4531//3098 4530//3095 4545//3115 -f 4526//3096 4525//3092 4541//3103 -f 4521//3097 4520//3094 4536//3116 -f 4535//3114 4534//3117 4550//3118 -f 4546//3102 4545//3115 4560//3119 -f 4541//3103 4540//3112 4556//3120 -f 4536//3116 4535//3114 4551//3121 -f 4547//3106 4546//3102 4561//3122 -f 4542//3107 4541//3103 4556//3120 -f 4537//3104 4536//3116 4552//3123 -f 4548//3124 4547//3106 4562//3125 -f 4543//3109 4542//3107 4557//3126 -f 4538//3108 4537//3104 4553//3127 -f 4544//3111 4543//3109 4558//3128 -f 4539//3110 4538//3108 4554//3129 -f 4545//3115 4544//3111 4559//3130 -f 4540//3112 4539//3110 4555//3131 -f 4554//3129 4553//3127 4569//3132 -f 4560//3119 4559//3130 4574//3133 -f 4555//3131 4554//3129 4570//3134 -f 4550//3118 4549//3135 4565//3136 -f 4561//3122 4560//3119 4575//3137 -f 4556//3120 4555//3131 4571//3138 -f 4551//3121 4550//3118 4566//3139 -f 4562//3125 4561//3122 4576//3140 -f 4557//3126 4556//3120 4571//3138 -f 4552//3123 4551//3121 4567//3141 -f 4563//3142 4562//3125 4577//3143 -f 4558//3128 4557//3126 4572//3144 -f 4553//3127 4552//3123 4568//3145 -f 4559//3130 4558//3128 4573//3146 -f 4573//3146 4572//3144 4587//3147 -f 4568//3145 4567//3141 4583//3148 -f 4574//3133 4573//3146 4588//3149 -f 4569//3132 4568//3145 4584//3150 -f 4575//3137 4574//3133 4589//3151 -f 4570//3134 4569//3132 4585//3152 -f 4565//3136 4564//3153 4580//3154 -f 4576//3140 4575//3137 4590//3155 -f 4571//3138 4570//3134 4586//261 -f 4566//3139 4565//3136 4581//3156 -f 4577//3143 4576//3140 4591//3157 -f 4572//3144 4571//3138 4586//261 -f 4567//3141 4566//3139 4582//3158 -f 4578//3159 4577//3143 4592//3160 -f 4592//3160 4591//3157 4607//3161 -f 4587//3147 4586//261 4602//3162 -f 4582//3158 4581//3156 4596//3163 -f 4593//3164 4592//3160 4608//3165 -f 4588//3149 4587//3147 4603//3166 -f 4583//3148 4582//3158 4597//3167 -f 4589//3151 4588//3149 4604//3168 -f 4584//3150 4583//3148 4598//3169 -f 4590//3155 4589//3151 4605//3170 -f 4585//3152 4584//3150 4599//3171 -f 4580//3154 4579//3172 4594//3173 -f 4591//3157 4590//3155 4606//3174 -f 4586//261 4585//3152 4600//3175 -f 4581//3156 4580//3154 4595//3176 -f 4606//3174 4605//3170 4621//3177 -f 4601//3178 4600//3175 4615//3179 -f 4596//3163 4595//3176 4610//3180 -f 4607//3161 4606//3174 4622//3181 -f 4602//3162 4601//3178 4617//3182 -f 4597//3167 4596//3163 4611//3183 -f 4608//3165 4607//3161 4623//3184 -f 4603//3166 4602//3162 4618//3185 -f 4598//3169 4597//3167 4612//3186 -f 4604//3168 4603//3166 4619//3187 -f 4599//3171 4598//3169 4613//3188 -f 4605//3170 4604//3168 4620//3189 -f 4600//3175 4599//3171 4614//3190 -f 4595//3176 4594//3173 4609//3191 -f 4620//3189 4619//3187 4635//3192 -f 4615//3179 4614//3190 4629//3193 -f 4610//3180 4609//3191 4624//3194 -f 4621//3177 4620//3189 4636//3195 -f 4616//3196 4615//3179 4630//3197 -f 4611//3183 4610//3180 4625//3198 -f 4622//3181 4621//3177 4637//3199 -f 4617//3182 4616//3196 4632//3200 -f 4612//3186 4611//3183 4626//3201 -f 4623//3184 4622//3181 4638//3202 -f 4618//3185 4617//3182 4633//3203 -f 4613//3188 4612//3186 4627//3204 -f 4619//3187 4618//3185 4634//3205 -f 4614//3190 4613//3188 4628//3206 -f 4628//3206 4627//3204 4642//3207 -f 4634//3205 4633//3203 4649//3208 -f 4629//3193 4628//3206 4643//3209 -f 4635//3192 4634//3205 4650//3210 -f 4630//3197 4629//3193 4644//3211 -f 4625//3198 4624//3194 4639//3212 -f 4636//3195 4635//3192 4651//3213 -f 4631//3214 4630//3197 4645//3215 -f 4626//3201 4625//3198 4640//3216 -f 4637//3199 4636//3195 4652//3217 -f 4632//3200 4631//3214 4647//3218 -f 4627//3204 4626//3201 4641//3219 -f 4638//3202 4637//3199 4653//3220 -f 4633//3203 4632//3200 4648//3221 -f 4647//3218 4646//3222 4662//3223 -f 4642//3207 4641//3219 4656//3224 -f 4653//3220 4652//3217 4668//3225 -f 4648//3221 4647//3218 4663//3226 -f 4643//3209 4642//3207 4657//3227 -f 4649//3208 4648//3221 4664//3228 -f 4644//3211 4643//3209 4658//3229 -f 4650//3210 4649//3208 4665//3230 -f 4645//3215 4644//3211 4659//3231 -f 4640//3216 4639//3212 4654//3232 -f 4651//3213 4650//3210 4666//3233 -f 4646//3222 4645//3215 4660//3234 -f 4641//3219 4640//3216 4655//3235 -f 4652//3217 4651//3213 4667//3236 -f 4666//3233 4665//3230 4682//3237 -f 4661//3238 4660//3234 4676//3239 -f 4656//3224 4655//3235 4671//3240 -f 4667//3236 4666//3233 4683//3241 -f 4662//3223 4661//3238 4678//3242 -f 4657//3227 4656//3224 4672//3243 -f 4668//3225 4667//3236 4684//3244 -f 4663//3226 4662//3223 4679//3245 -f 4658//3229 4657//3227 4673//3246 -f 4664//3228 4663//3226 4680//3247 -f 4659//3231 4658//3229 4674//3248 -f 4665//3230 4664//3228 4681//3249 -f 4660//3234 4659//3231 4675//3250 -f 4655//3235 4654//3232 4670//3251 -f 4681//3249 4680//3247 4696//3252 -f 4676//3239 4675//3250 4690//3253 -f 4671//3240 4670//3251 4685//3254 -f 4682//3237 4681//3249 4697//3255 -f 4677//3256 4676//3239 4691//3257 -f 4672//3243 4671//3240 4686//3258 -f 4683//3241 4682//3237 4698//3259 -f 4678//3242 4677//3256 4693//3260 -f 4673//3246 4672//3243 4687//3261 -f 4684//3244 4683//3241 4699//3262 -f 4679//3245 4678//3242 4694//3263 -f 4674//3248 4673//3246 4688//3264 -f 4680//3247 4679//3245 4695//3265 -f 4675//3250 4674//3248 4689//3266 -f 4689//3266 4688//3264 4703//3267 -f 4695//3265 4694//3263 4710//3268 -f 4690//3253 4689//3266 4704//3269 -f 4696//3252 4695//3265 4711//3270 -f 4691//3257 4690//3253 4705//3271 -f 4686//3258 4685//3254 4700//3272 -f 4697//3255 4696//3252 4712//3273 -f 4692//3274 4691//3257 4706//3275 -f 4687//3261 4686//3258 4701//3276 -f 4698//3259 4697//3255 4713//3277 -f 4693//3260 4692//3274 4708//3278 -f 4688//3264 4687//3261 4702//3279 -f 4699//3262 4698//3259 4714//3280 -f 4694//3263 4693//3260 4709//3281 -f 4708//3278 4707//3282 4722//3283 -f 4703//3267 4702//3279 4718//3284 -f 4714//3280 4713//3277 4728//3285 -f 4709//3281 4708//3278 4723//3286 -f 4704//3269 4703//3267 4719//3287 -f 4710//3268 4709//3281 4724//3288 -f 4705//3271 4704//3269 4720//3289 -f 4711//3270 4710//3268 4725//3290 -f 4706//3275 4705//3271 4721//3291 -f 4701//3276 4700//3272 4716//3292 -f 4712//3273 4711//3270 4726//3293 -f 4707//3282 4706//3275 4722//3283 -f 4702//3279 4701//3276 4717//3294 -f 4713//3277 4712//3273 4727//3295 -f 4727//3295 4726//3293 4741//3296 -f 4722//3283 4721//3291 4737//3297 -f 4717//3294 4716//3292 4732//3298 -f 4728//3285 4727//3295 4742//3299 -f 4723//3286 4722//3283 4737//3297 -f 4718//3284 4717//3294 4733//3300 -f 4729//3301 4728//3285 4743//3302 -f 4724//3288 4723//3286 4738//3303 -f 4719//3287 4718//3284 4734//3304 -f 4725//3290 4724//3288 4739//3305 -f 4720//3289 4719//3287 4735//3306 -f 4726//3293 4725//3290 4740//3307 -f 4721//3291 4720//3289 4736//3308 -f 4716//3292 4715//3309 4731//3310 -f 4741//3296 4740//3307 4755//3311 -f 4736//3308 4735//3306 4751//3312 -f 4731//3310 4730//3313 4746//3314 -f 4742//3299 4741//3296 4756//3315 -f 4737//3297 4736//3308 4752//3316 -f 4732//3298 4731//3310 4747//3317 -f 4743//3302 4742//3299 4757//3318 -f 4738//3303 4737//3297 4752//3316 -f 4733//3300 4732//3298 4748//3319 -f 4744//3320 4743//3302 4758//3321 -f 4739//3305 4738//3303 4753//3322 -f 4734//3304 4733//3300 4749//3323 -f 4740//3307 4739//3305 4754//3324 -f 4735//3306 4734//3304 4750//3325 -f 4755//3311 4754//3324 4769//3326 -f 4750//3325 4749//3323 4765//3327 -f 4756//3315 4755//3311 4770//3328 -f 4751//3312 4750//3325 4766//3329 -f 4746//3314 4745//3330 4761//3331 -f 4757//3318 4756//3315 4771//3332 -f 4752//3316 4751//3312 4767//3333 -f 4747//3317 4746//3314 4762//3334 -f 4758//3321 4757//3318 4772//3335 -f 4753//3322 4752//3316 4767//3333 -f 4748//3319 4747//3317 4763//3336 -f 4759//3337 4758//3321 4773//3338 -f 4754//3324 4753//3322 4768//3339 -f 4749//3323 4748//3319 4764//3340 -f 4763//3336 4762//3334 4778//3341 -f 4774//3342 4773//3338 4788//3343 -f 4769//3326 4768//3339 4783//3344 -f 4764//3340 4763//3336 4779//3345 -f 4770//3328 4769//3326 4784//3346 -f 4765//3327 4764//3340 4780//3347 -f 4771//3332 4770//3328 4785//3348 -f 4766//3329 4765//3327 4781//3349 -f 4761//3331 4760//3350 4776//3351 -f 4772//3335 4771//3332 4786//3352 -f 4767//3333 4766//3329 4782//3353 -f 4762//3334 4761//3331 4777//3354 -f 4773//3338 4772//3335 4787//3355 -f 4768//3339 4767//3333 4782//3353 -f 4782//3353 4781//3349 4798//3356 -f 4777//3354 4776//3351 4793//3357 -f 4788//3343 4787//3355 4803//3358 -f 4783//3344 4782//3353 4798//3356 -f 4778//3341 4777//3354 4794//3359 -f 4789//3360 4788//3343 4804//3361 -f 4784//3346 4783//3344 4799//3362 -f 4779//3345 4778//3341 4795//3363 -f 4785//3348 4784//3346 4800//3364 -f 4780//3347 4779//3345 4796//3365 -f 4786//3352 4785//3348 4801//3366 -f 4781//3349 4780//3347 4797//3367 -f 4776//3351 4775//3368 4792//3369 -f 4787//3355 4786//3352 4802//3370 -f 4802//3370 4801//3366 4816//3371 -f 4797//3367 4796//3365 4812//3372 -f 4792//3369 4791//3373 4807//3374 -f 4803//3358 4802//3370 4817//3375 -f 4798//3356 4797//3367 4813//3376 -f 4793//3357 4792//3369 4808//3377 -f 4804//3361 4803//3358 4818//3378 -f 4799//3362 4798//3356 4813//3376 -f 4794//3359 4793//3357 4809//3379 -f 4805//3380 4804//3361 4819//3381 -f 4800//3364 4799//3362 4814//3382 -f 4795//3363 4794//3359 4810//3383 -f 4801//3366 4800//3364 4815//3384 -f 4796//3365 4795//3363 4811//3385 -f 4669//364 4353//2928 4368//2929 -f 4339//2913 4790//124 4354//2914 -f 4669//364 4368//2929 4383//2947 -f 4354//2914 4790//124 4369//2939 -f 4369//2939 4790//124 4384//2957 -f 4669//364 4383//2947 4398//2965 -f 4669//364 4398//2965 4413//2968 -f 4384//2957 4790//124 4399//2975 -f 4669//364 4413//2968 4428//2988 -f 4399//2975 4790//124 4414//2995 -f 4669//364 4428//2988 4443//3007 -f 4414//2995 4790//124 4429//2999 -f 4429//2999 4790//124 4444//3017 -f 4669//364 4443//3007 4458//3025 -f 4669//364 4458//3025 4473//3028 -f 4444//3017 4790//124 4459//3035 -f 4669//364 4473//3028 4488//3064 -f 4459//3035 4790//124 4474//3057 -f 4669//364 4488//3064 4503//3082 -f 4474//3057 4790//124 4489//3075 -f 4489//3075 4790//124 4504//3093 -f 4669//364 4503//3082 4518//3100 -f 4669//364 4518//3100 4533//3105 -f 4504//3093 4790//124 4519//3113 -f 4669//364 4533//3105 4548//3124 -f 4519//3113 4790//124 4534//3117 -f 4669//364 4548//3124 4563//3142 -f 4534//3117 4790//124 4549//3135 -f 4549//3135 4790//124 4564//3153 -f 4669//364 4563//3142 4578//3159 -f 4669//364 4578//3159 4593//3164 -f 4564//3153 4790//124 4579//3172 -f 4669//364 4593//3164 4608//3165 -f 4579//3172 4790//124 4594//3173 -f 4669//364 4608//3165 4623//3184 -f 4594//3173 4790//124 4609//3191 -f 4609//3191 4790//124 4624//3194 -f 4669//364 4623//3184 4638//3202 -f 4669//364 4638//3202 4653//3220 -f 4624//3194 4790//124 4639//3212 -f 4669//364 4653//3220 4668//3225 -f 4639//3212 4790//124 4654//3232 -f 4669//364 4668//3225 4684//3244 -f 4654//3232 4790//124 4670//3251 -f 4670//3251 4790//124 4685//3254 -f 4669//364 4684//3244 4699//3262 -f 4669//364 4699//3262 4714//3280 -f 4685//3254 4790//124 4700//3272 -f 4669//364 4714//3280 4729//3301 -f 4700//3272 4790//124 4715//3309 -f 4669//364 4729//3301 4744//3320 -f 4715//3309 4790//124 4730//3313 -f 4669//364 4744//3320 4759//3337 -f 4730//3313 4790//124 4745//3330 -f 4669//364 4759//3337 4774//3342 -f 4745//3330 4790//124 4760//3350 -f 4669//364 4774//3342 4789//3360 -f 4760//3350 4790//124 4775//3368 -f 4669//364 4789//3360 4805//3380 -f 4775//3368 4790//124 4791//3373 -f 4669//364 4805//3380 4820//3386 -f 4791//3373 4790//124 4806//3387 -f 4669//364 4820//3386 4353//2928 -f 4816//3371 4815//3384 4348//2930 -f 4811//3385 4810//3383 4344//2910 -f 4806//3387 4790//124 4339//2913 -f 4817//3375 4816//3371 4349//2934 -f 4812//3372 4811//3385 4345//2909 -f 4807//3374 4806//3387 4340//2912 -f 4818//3378 4817//3375 4350//2916 -f 4813//3376 4812//3372 4346//2918 -f 4808//3377 4807//3374 4341//2920 -f 4819//3381 4818//3378 4351//2915 -f 4814//3382 4813//3376 4346//2918 -f 4809//3379 4808//3377 4342//2926 -f 4820//3386 4819//3381 4352//2922 -f 4815//3384 4814//3382 4347//2924 -f 4810//3383 4809//3379 4343//2932 -f 4827//2909 4826//2910 4841//3388 -f 4822//2912 4821//3389 4836//3390 -f 4833//2915 4832//2916 4848//2917 -f 4828//5 4827//2909 4842//2919 -f 4823//2920 4822//2912 4837//2921 -f 4834//2922 4833//2915 4849//3391 -f 4829//2924 4828//5 4844//2925 -f 4824//2926 4823//2920 4838//3392 -f 4835//2928 4834//2922 4850//3393 -f 4830//2930 4829//2924 4845//3394 -f 4825//2932 4824//2926 4839//2933 -f 4831//2934 4830//2930 4846//2935 -f 4826//2910 4825//2932 4840//2936 -f 4832//2916 4831//2934 4847//2937 -f 4842//2919 4841//3388 4856//3395 -f 4837//2921 4836//3390 4851//2939 -f 4848//2917 4847//2937 4863//2940 -f 4843//2941 4842//2919 4857//2942 -f 4838//3392 4837//2921 4852//3396 -f 4849//3391 4848//2917 4864//2944 -f 4844//2925 4843//2941 4859//2945 -f 4839//2933 4838//3392 4853//2946 -f 4850//3393 4849//3391 4865//2947 -f 4845//3394 4844//2925 4860//2948 -f 4840//2936 4839//2933 4854//3397 -f 4846//2935 4845//3394 4861//2950 -f 4841//3388 4840//2936 4855//3398 -f 4847//2937 4846//2935 4862//3399 -f 4861//2950 4860//2948 4876//2953 -f 4856//3395 4855//3398 4870//2954 -f 4862//3399 4861//2950 4877//2955 -f 4857//2942 4856//3395 4871//2956 -f 4852//3396 4851//2939 4866//3400 -f 4863//2940 4862//3399 4878//3401 -f 4858//2959 4857//2942 4872//2960 -f 4853//2946 4852//3396 4867//2961 -f 4864//2944 4863//2940 4879//2962 -f 4859//2945 4858//2959 4874//2963 -f 4854//3397 4853//2946 4868//2964 -f 4865//2947 4864//2944 4880//2965 -f 4860//2948 4859//2945 4875//3402 -f 4855//3398 4854//3397 4869//3403 -f 4880//2965 4879//2962 4895//3404 -f 4875//3402 4874//2963 4890//3405 -f 4870//2954 4869//3403 4884//2970 -f 4876//2953 4875//3402 4891//2971 -f 4871//2956 4870//2954 4885//2972 -f 4877//2955 4876//2953 4892//3406 -f 4872//2960 4871//2956 4886//3407 -f 4867//2961 4866//3400 4881//3408 -f 4878//3401 4877//2955 4893//2976 -f 4873//2977 4872//2960 4887//3409 -f 4868//2964 4867//2961 4882//2979 -f 4879//2962 4878//3401 4894//3410 -f 4874//2963 4873//2977 4889//2981 -f 4869//3403 4868//2964 4883//2982 -f 4883//2982 4882//2979 4897//3411 -f 4894//3410 4893//2976 4909//2984 -f 4889//2981 4888//2985 4904//3412 -f 4884//2970 4883//2982 4898//2987 -f 4895//3404 4894//3410 4910//2988 -f 4890//3405 4889//2981 4905//2989 -f 4885//2972 4884//2970 4899//2990 -f 4891//2971 4890//3405 4906//2991 -f 4886//3407 4885//2972 4900//3413 -f 4892//3406 4891//2971 4907//2993 -f 4887//3409 4886//3407 4901//2994 -f 4882//2979 4881//3408 4896//2995 -f 4893//2976 4892//3406 4908//3414 -f 4888//2985 4887//3409 4902//3415 -f 4902//3415 4901//2994 4916//2998 -f 4897//3411 4896//2995 4911//2999 -f 4908//3414 4907//2993 4923//3000 -f 4903//3416 4902//3415 4917//3417 -f 4898//2987 4897//3411 4912//3003 -f 4909//2984 4908//3414 4924//3004 -f 4904//3412 4903//3416 4919//3005 -f 4899//2990 4898//2987 4913//3418 -f 4910//2988 4909//2984 4925//3419 -f 4905//2989 4904//3412 4920//3420 -f 4900//3413 4899//2990 4914//3009 -f 4906//2991 4905//2989 4921//3010 -f 4901//2994 4900//3413 4915//3421 -f 4907//2993 4906//2991 4922//3012 -f 4921//3010 4920//3420 4936//3013 -f 4916//2998 4915//3421 4930//3014 -f 4922//3012 4921//3010 4937//3015 -f 4917//3417 4916//2998 4931//3016 -f 4912//3003 4911//2999 4926//3422 -f 4923//3000 4922//3012 4938//3018 -f 4918//3423 4917//3417 4932//3424 -f 4913//3418 4912//3003 4927//3021 -f 4924//3004 4923//3000 4939//3425 -f 4919//3005 4918//3423 4934//3023 -f 4914//3009 4913//3418 4928//3426 -f 4925//3419 4924//3004 4940//3025 -f 4920//3420 4919//3005 4935//3026 -f 4915//3421 4914//3009 4929//3027 -f 4940//3025 4939//3425 4955//3028 -f 4935//3026 4934//3023 4950//3427 -f 4930//3014 4929//3027 4944//3030 -f 4936//3013 4935//3026 4951//3031 -f 4931//3016 4930//3014 4945//3032 -f 4937//3015 4936//3013 4952//3033 -f 4932//3424 4931//3016 4946//3428 -f 4927//3021 4926//3422 4941//3035 -f 4938//3018 4937//3015 4953//3036 -f 4933//3037 4932//3424 4947//3038 -f 4928//3426 4927//3021 4942//3039 -f 4939//3425 4938//3018 4954//3040 -f 4934//3023 4933//3037 4949//3429 -f 4929//3027 4928//3426 4943//3042 -f 4954//3040 4953//3036 4968//3430 -f 4949//3429 4948//480 4963//3045 -f 4944//3030 4943//3042 4959//3046 -f 4955//3028 4954//3040 4969//3431 -f 4950//3427 4949//3429 4964//3048 -f 4945//3032 4944//3030 4960//3432 -f 4951//3031 4950//3427 4965//3050 -f 4946//3428 4945//3032 4961//3051 -f 4952//3033 4951//3031 4966//3052 -f 4947//3038 4946//3428 4962//3053 -f 4942//3039 4941//3035 4957//3054 -f 4953//3036 4952//3033 4967//3055 -f 4948//480 4947//3038 4963//3045 -f 4943//3042 4942//3039 4958//3056 -f 4957//3054 4956//3057 4972//3058 -f 4968//3430 4967//3055 4982//3059 -f 4963//3045 4962//3053 4978//3060 -f 4958//3056 4957//3054 4973//3433 -f 4969//3431 4968//3430 4983//3062 -f 4964//3048 4963//3045 4978//3060 -f 4959//3046 4958//3056 4974//3063 -f 4970//3064 4969//3431 4984//3065 -f 4965//3050 4964//3048 4979//3066 -f 4960//3432 4959//3046 4975//3067 -f 4966//3052 4965//3050 4980//3434 -f 4961//3051 4960//3432 4976//3435 -f 4967//3055 4966//3052 4981//3436 -f 4962//3053 4961//3051 4977//3071 -f 4976//3435 4975//3067 4991//3072 -f 4982//3059 4981//3436 4996//3073 -f 4977//3071 4976//3435 4992//3437 -f 4972//3058 4971//3075 4987//3076 -f 4983//3062 4982//3059 4997//3077 -f 4978//3060 4977//3071 4993//3078 -f 4973//3433 4972//3058 4988//3079 -f 4984//3065 4983//3062 4998//3438 -f 4979//3066 4978//3060 4993//3078 -f 4974//3063 4973//3433 4989//3081 -f 4985//3082 4984//3065 4999//3083 -f 4980//3434 4979//3066 4994//3439 -f 4975//3067 4974//3063 4990//3085 -f 4981//3436 4980//3434 4995//3086 -f 4995//3086 4994//3439 5009//3087 -f 4990//3085 4989//3081 5005//3088 -f 4996//3073 4995//3086 5010//3440 -f 4991//3072 4990//3085 5006//3090 -f 4997//3077 4996//3073 5011//3091 -f 4992//3437 4991//3072 5007//3092 -f 4987//3076 4986//3093 5002//3094 -f 4998//3438 4997//3077 5012//3095 -f 4993//3078 4992//3437 5008//3096 -f 4988//3079 4987//3076 5003//3097 -f 4999//3083 4998//3438 5013//3098 -f 4994//3439 4993//3078 5008//3096 -f 4989//3081 4988//3079 5004//3099 -f 5000//3441 4999//3083 5014//3101 -f 5014//3101 5013//3098 5028//3442 -f 5009//3087 5008//3096 5023//3103 -f 5004//3099 5003//3097 5019//3443 -f 5015//3444 5014//3101 5029//3106 -f 5010//3440 5009//3087 5024//3107 -f 5005//3088 5004//3099 5020//3445 -f 5011//3091 5010//3440 5025//3109 -f 5006//3090 5005//3088 5021//3110 -f 5012//3095 5011//3091 5026//3111 -f 5007//3092 5006//3090 5022//3446 -f 5002//3094 5001//3447 5017//3448 -f 5013//3098 5012//3095 5027//3115 -f 5008//3096 5007//3092 5023//3103 -f 5003//3097 5002//3094 5018//3116 -f 5017//3448 5016//3449 5032//3118 -f 5028//3442 5027//3115 5042//3450 -f 5023//3103 5022//3446 5038//3120 -f 5018//3116 5017//3448 5033//3121 -f 5029//3106 5028//3442 5043//3451 -f 5024//3107 5023//3103 5038//3120 -f 5019//3443 5018//3116 5034//3123 -f 5030//3124 5029//3106 5044//3125 -f 5025//3109 5024//3107 5039//3126 -f 5020//3445 5019//3443 5035//3452 -f 5026//3111 5025//3109 5040//3128 -f 5021//3110 5020//3445 5036//3129 -f 5027//3115 5026//3111 5041//3130 -f 5022//3446 5021//3110 5037//3131 -f 5036//3129 5035//3452 5051//3132 -f 5042//3450 5041//3130 5056//3133 -f 5037//3131 5036//3129 5052//3134 -f 5032//3118 5031//3453 5047//3454 -f 5043//3451 5042//3450 5057//3137 -f 5038//3120 5037//3131 5053//3138 -f 5033//3121 5032//3118 5048//3139 -f 5044//3125 5043//3451 5058//3455 -f 5039//3126 5038//3120 5053//3138 -f 5034//3123 5033//3121 5049//3141 -f 5045//3142 5044//3125 5059//3143 -f 5040//3128 5039//3126 5054//3144 -f 5035//3452 5034//3123 5050//3145 -f 5041//3130 5040//3128 5055//3456 -f 5055//3456 5054//3144 5069//3147 -f 5050//3145 5049//3141 5065//3148 -f 5056//3133 5055//3456 5070//3149 -f 5051//3132 5050//3145 5066//3457 -f 5057//3137 5056//3133 5071//3151 -f 5052//3134 5051//3132 5067//3152 -f 5047//3454 5046//3458 5062//3154 -f 5058//3455 5057//3137 5072//3155 -f 5053//3138 5052//3134 5068//261 -f 5048//3139 5047//3454 5063//3156 -f 5059//3143 5058//3455 5073//3157 -f 5054//3144 5053//3138 5068//261 -f 5049//3141 5048//3139 5064//3158 -f 5060//3459 5059//3143 5074//3160 -f 5074//3160 5073//3157 5089//3460 -f 5069//3147 5068//261 5084//3162 -f 5064//3158 5063//3156 5078//3163 -f 5075//3164 5074//3160 5090//3461 -f 5070//3149 5069//3147 5085//3462 -f 5065//3148 5064//3158 5079//3167 -f 5071//3151 5070//3149 5086//3168 -f 5066//3457 5065//3148 5080//3169 -f 5072//3155 5071//3151 5087//3170 -f 5067//3152 5066//3457 5081//3463 -f 5062//3154 5061//3172 5076//3464 -f 5073//3157 5072//3155 5088//3174 -f 5068//261 5067//3152 5082//3175 -f 5063//3156 5062//3154 5077//3465 -f 5088//3174 5087//3170 5103//3177 -f 5083//3178 5082//3175 5097//3466 -f 5078//3163 5077//3465 5092//3467 -f 5089//3460 5088//3174 5104//3181 -f 5084//3162 5083//3178 5099//3182 -f 5079//3167 5078//3163 5093//3183 -f 5090//3461 5089//3460 5105//3184 -f 5085//3462 5084//3162 5100//3185 -f 5080//3169 5079//3167 5094//3186 -f 5086//3168 5085//3462 5101//3187 -f 5081//3463 5080//3169 5095//3188 -f 5087//3170 5086//3168 5102//3468 -f 5082//3175 5081//3463 5096//3469 -f 5077//3465 5076//3464 5091//3470 -f 5102//3468 5101//3187 5117//3192 -f 5097//3466 5096//3469 5111//3193 -f 5092//3467 5091//3470 5106//3471 -f 5103//3177 5102//3468 5118//3472 -f 5098//3196 5097//3466 5112//3197 -f 5093//3183 5092//3467 5107//3198 -f 5104//3181 5103//3177 5119//3199 -f 5099//3182 5098//3196 5114//3200 -f 5094//3186 5093//3183 5108//3473 -f 5105//3184 5104//3181 5120//3202 -f 5100//3185 5099//3182 5115//3203 -f 5095//3188 5094//3186 5109//3474 -f 5101//3187 5100//3185 5116//3205 -f 5096//3469 5095//3188 5110//3206 -f 5110//3206 5109//3474 5124//3207 -f 5116//3205 5115//3203 5131//3208 -f 5111//3193 5110//3206 5125//3209 -f 5117//3192 5116//3205 5132//3210 -f 5112//3197 5111//3193 5126//3475 -f 5107//3198 5106//3471 5121//3212 -f 5118//3472 5117//3192 5133//3476 -f 5113//3214 5112//3197 5127//3477 -f 5108//3473 5107//3198 5122//3216 -f 5119//3199 5118//3472 5134//3478 -f 5114//3200 5113//3214 5129//3218 -f 5109//3474 5108//3473 5123//3219 -f 5120//3202 5119//3199 5135//3479 -f 5115//3203 5114//3200 5130//3480 -f 5129//3218 5128//3222 5144//3481 -f 5124//3207 5123//3219 5138//3224 -f 5135//3479 5134//3478 5150//3482 -f 5130//3480 5129//3218 5145//3226 -f 5125//3209 5124//3207 5139//3227 -f 5131//3208 5130//3480 5146//3228 -f 5126//3475 5125//3209 5140//3483 -f 5132//3210 5131//3208 5147//3230 -f 5127//3477 5126//3475 5141//3231 -f 5122//3216 5121//3212 5136//3232 -f 5133//3476 5132//3210 5148//3484 -f 5128//3222 5127//3477 5142//3234 -f 5123//3219 5122//3216 5137//3485 -f 5134//3478 5133//3476 5149//3236 -f 5148//3484 5147//3230 5164//3486 -f 5143//3238 5142//3234 5158//3239 -f 5138//3224 5137//3485 5153//3240 -f 5149//3236 5148//3484 5165//3241 -f 5144//3481 5143//3238 5160//3242 -f 5139//3227 5138//3224 5154//3243 -f 5150//3482 5149//3236 5166//3487 -f 5145//3226 5144//3481 5161//3488 -f 5140//3483 5139//3227 5155//3246 -f 5146//3228 5145//3226 5162//3489 -f 5141//3231 5140//3483 5156//3490 -f 5147//3230 5146//3228 5163//3249 -f 5142//3234 5141//3231 5157//3250 -f 5137//3485 5136//3232 5152//3251 -f 5163//3249 5162//3489 5178//3491 -f 5158//3239 5157//3250 5172//3253 -f 5153//3240 5152//3251 5167//3254 -f 5164//3486 5163//3249 5179//3255 -f 5159//3256 5158//3239 5173//3257 -f 5154//3243 5153//3240 5168//3258 -f 5165//3241 5164//3486 5180//3259 -f 5160//3242 5159//3256 5175//3260 -f 5155//3246 5154//3243 5169//3492 -f 5166//3487 5165//3241 5181//3262 -f 5161//3488 5160//3242 5176//3263 -f 5156//3490 5155//3246 5170//3264 -f 5162//3489 5161//3488 5177//3493 -f 5157//3250 5156//3490 5171//3266 -f 5171//3266 5170//3264 5185//3267 -f 5177//3493 5176//3263 5192//3268 -f 5172//3253 5171//3266 5186//3269 -f 5178//3491 5177//3493 5193//3494 -f 5173//3257 5172//3253 5187//3495 -f 5168//3258 5167//3254 5182//3272 -f 5179//3255 5178//3491 5194//3273 -f 5174//3274 5173//3257 5188//3275 -f 5169//3492 5168//3258 5183//3276 -f 5180//3259 5179//3255 5195//3277 -f 5175//3260 5174//3274 5190//3278 -f 5170//3264 5169//3492 5184//3279 -f 5181//3262 5180//3259 5196//3280 -f 5176//3263 5175//3260 5191//3281 -f 5190//3278 5189//3282 5204//3283 -f 5185//3267 5184//3279 5200//3284 -f 5196//3280 5195//3277 5210//3285 -f 5191//3281 5190//3278 5205//3286 -f 5186//3269 5185//3267 5201//3496 -f 5192//3268 5191//3281 5206//3288 -f 5187//3495 5186//3269 5202//3289 -f 5193//3494 5192//3268 5207//3290 -f 5188//3275 5187//3495 5203//3291 -f 5183//3276 5182//3272 5198//3292 -f 5194//3273 5193//3494 5208//3293 -f 5189//3282 5188//3275 5204//3283 -f 5184//3279 5183//3276 5199//3294 -f 5195//3277 5194//3273 5209//3497 -f 5209//3497 5208//3293 5223//3296 -f 5204//3283 5203//3291 5219//3297 -f 5199//3294 5198//3292 5214//3498 -f 5210//3285 5209//3497 5224//3299 -f 5205//3286 5204//3283 5219//3297 -f 5200//3284 5199//3294 5215//3300 -f 5211//3301 5210//3285 5225//3302 -f 5206//3288 5205//3286 5220//3303 -f 5201//3496 5200//3284 5216//3499 -f 5207//3290 5206//3288 5221//3500 -f 5202//3289 5201//3496 5217//3306 -f 5208//3293 5207//3290 5222//3307 -f 5203//3291 5202//3289 5218//3308 -f 5198//3292 5197//3309 5213//3310 -f 5223//3296 5222//3307 5237//3501 -f 5218//3308 5217//3306 5233//3312 -f 5213//3310 5212//3502 5228//3314 -f 5224//3299 5223//3296 5238//3315 -f 5219//3297 5218//3308 5234//3503 -f 5214//3498 5213//3310 5229//3317 -f 5225//3302 5224//3299 5239//3504 -f 5220//3303 5219//3297 5234//3503 -f 5215//3300 5214//3498 5230//3319 -f 5226//3320 5225//3302 5240//3321 -f 5221//3500 5220//3303 5235//3505 -f 5216//3499 5215//3300 5231//3323 -f 5222//3307 5221//3500 5236//3506 -f 5217//3306 5216//3499 5232//3325 -f 5237//3501 5236//3506 5251//3507 -f 5232//3325 5231//3323 5247//3327 -f 5238//3315 5237//3501 5252//3328 -f 5233//3312 5232//3325 5248//3329 -f 5228//3314 5227//3508 5243//3331 -f 5239//3504 5238//3315 5253//3509 -f 5234//3503 5233//3312 5249//3333 -f 5229//3317 5228//3314 5244//3334 -f 5240//3321 5239//3504 5254//3510 -f 5235//3505 5234//3503 5249//3333 -f 5230//3319 5229//3317 5245//3336 -f 5241//3337 5240//3321 5255//3511 -f 5236//3506 5235//3505 5250//3339 -f 5231//3323 5230//3319 5246//3340 -f 5245//3336 5244//3334 5260//3512 -f 5256//3513 5255//3511 5270//3343 -f 5251//3507 5250//3339 5265//3344 -f 5246//3340 5245//3336 5261//3345 -f 5252//3328 5251//3507 5266//3346 -f 5247//3327 5246//3340 5262//3514 -f 5253//3509 5252//3328 5267//3348 -f 5248//3329 5247//3327 5263//3349 -f 5243//3331 5242//3350 5258//3515 -f 5254//3510 5253//3509 5268//3352 -f 5249//3333 5248//3329 5264//3353 -f 5244//3334 5243//3331 5259//3516 -f 5255//3511 5254//3510 5269//3517 -f 5250//3339 5249//3333 5264//3353 -f 5264//3353 5263//3349 5280//3356 -f 5259//3516 5258//3515 5275//3518 -f 5270//3343 5269//3517 5285//3358 -f 5265//3344 5264//3353 5280//3356 -f 5260//3512 5259//3516 5276//3519 -f 5271//3360 5270//3343 5286//3361 -f 5266//3346 5265//3344 5281//3362 -f 5261//3345 5260//3512 5277//3363 -f 5267//3348 5266//3346 5282//3364 -f 5262//3514 5261//3345 5278//3365 -f 5268//3352 5267//3348 5283//3520 -f 5263//3349 5262//3514 5279//3367 -f 5258//3515 5257//3521 5274//3369 -f 5269//3517 5268//3352 5284//3370 -f 5284//3370 5283//3520 5298//3371 -f 5279//3367 5278//3365 5294//3372 -f 5274//3369 5273//3522 5289//3523 -f 5285//3358 5284//3370 5299//3524 -f 5280//3356 5279//3367 5295//3376 -f 5275//3518 5274//3369 5290//3377 -f 5286//3361 5285//3358 5300//3378 -f 5281//3362 5280//3356 5295//3376 -f 5276//3519 5275//3518 5291//3525 -f 5287//3380 5286//3361 5301//3381 -f 5282//3364 5281//3362 5296//3382 -f 5277//3363 5276//3519 5292//3383 -f 5283//3520 5282//3364 5297//3526 -f 5278//3365 5277//3363 5293//3385 -f 5151//364 4835//2928 4850//3393 -f 4821//3389 5272//124 4836//3390 -f 5151//364 4850//3393 4865//2947 -f 4836//3390 5272//124 4851//2939 -f 4851//2939 5272//124 4866//3400 -f 5151//364 4865//2947 4880//2965 -f 5151//364 4880//2965 4895//3404 -f 4866//3400 5272//124 4881//3408 -f 5151//364 4895//3404 4910//2988 -f 4881//3408 5272//124 4896//2995 -f 5151//364 4910//2988 4925//3419 -f 4896//2995 5272//124 4911//2999 -f 4911//2999 5272//124 4926//3422 -f 5151//364 4925//3419 4940//3025 -f 5151//364 4940//3025 4955//3028 -f 4926//3422 5272//124 4941//3035 -f 5151//364 4955//3028 4970//3064 -f 4941//3035 5272//124 4956//3057 -f 5151//364 4970//3064 4985//3082 -f 4956//3057 5272//124 4971//3075 -f 4971//3075 5272//124 4986//3093 -f 5151//364 4985//3082 5000//3441 -f 5151//364 5000//3441 5015//3444 -f 4986//3093 5272//124 5001//3447 -f 5151//364 5015//3444 5030//3124 -f 5001//3447 5272//124 5016//3449 -f 5151//364 5030//3124 5045//3142 -f 5016//3449 5272//124 5031//3453 -f 5031//3453 5272//124 5046//3458 -f 5151//364 5045//3142 5060//3459 -f 5151//364 5060//3459 5075//3164 -f 5046//3458 5272//124 5061//3172 -f 5151//364 5075//3164 5090//3461 -f 5061//3172 5272//124 5076//3464 -f 5151//364 5090//3461 5105//3184 -f 5076//3464 5272//124 5091//3470 -f 5091//3470 5272//124 5106//3471 -f 5151//364 5105//3184 5120//3202 -f 5151//364 5120//3202 5135//3479 -f 5106//3471 5272//124 5121//3212 -f 5151//364 5135//3479 5150//3482 -f 5121//3212 5272//124 5136//3232 -f 5151//364 5150//3482 5166//3487 -f 5136//3232 5272//124 5152//3251 -f 5152//3251 5272//124 5167//3254 -f 5151//364 5166//3487 5181//3262 -f 5151//364 5181//3262 5196//3280 -f 5167//3254 5272//124 5182//3272 -f 5151//364 5196//3280 5211//3301 -f 5182//3272 5272//124 5197//3309 -f 5151//364 5211//3301 5226//3320 -f 5197//3309 5272//124 5212//3502 -f 5151//364 5226//3320 5241//3337 -f 5212//3502 5272//124 5227//3508 -f 5151//364 5241//3337 5256//3513 -f 5227//3508 5272//124 5242//3350 -f 5151//364 5256//3513 5271//3360 -f 5242//3350 5272//124 5257//3521 -f 5151//364 5271//3360 5287//3380 -f 5257//3521 5272//124 5273//3522 -f 5151//364 5287//3380 5302//3527 -f 5273//3522 5272//124 5288//3528 -f 5151//364 5302//3527 4835//2928 -f 5298//3371 5297//3526 4830//2930 -f 5293//3385 5292//3383 4826//2910 -f 5288//3528 5272//124 4821//3389 -f 5299//3524 5298//3371 4831//2934 -f 5294//3372 5293//3385 4827//2909 -f 5289//3523 5288//3528 4822//2912 -f 5300//3378 5299//3524 4832//2916 -f 5295//3376 5294//3372 4828//5 -f 5290//3377 5289//3523 4823//2920 -f 5301//3381 5300//3378 4833//2915 -f 5296//3382 5295//3376 4828//5 -f 5291//3525 5290//3377 4824//2926 -f 5302//3527 5301//3381 4834//2922 -f 5297//3526 5296//3382 4829//2924 -f 5292//3383 5291//3525 4825//2932 -f 4360//2919 4345//2909 4359//2911 -f 4355//2921 4340//2912 4354//2914 -f 4350//2916 4365//2937 4366//2917 -f 4361//2941 4346//2918 4360//2919 -f 4356//2927 4341//2920 4355//2921 -f 4351//2915 4366//2917 4367//2923 -f 4346//2918 4361//2941 4362//2925 -f 4357//2933 4342//2926 4356//2927 -f 4352//2922 4367//2923 4368//2929 -f 4347//2924 4362//2925 4363//2931 -f 4358//2936 4343//2932 4357//2933 -f 4348//2930 4363//2931 4364//2935 -f 4359//2911 4344//2910 4358//2936 -f 4349//2934 4364//2935 4365//2937 -f 4375//2942 4360//2919 4374//2938 -f 4370//2943 4355//2921 4369//2939 -f 4365//2937 4380//2952 4381//2940 -f 4376//2959 4361//2941 4375//2942 -f 4371//2946 4356//2927 4370//2943 -f 4366//2917 4381//2940 4382//2944 -f 4361//2941 4376//2959 4377//2945 -f 4372//2949 4357//2933 4371//2946 -f 4367//2923 4382//2944 4383//2947 -f 4362//2925 4377//2945 4378//2948 -f 4373//2951 4358//2936 4372//2949 -f 4363//2931 4378//2948 4379//2950 -f 4374//2938 4359//2911 4373//2951 -f 4364//2935 4379//2950 4380//2952 -f 4378//2948 4393//2966 4394//2953 -f 4389//2956 4374//2938 4388//2954 -f 4379//2950 4394//2953 4395//2955 -f 4390//2960 4375//2942 4389//2956 -f 4385//2961 4370//2943 4384//2957 -f 4380//2952 4395//2955 4396//2958 -f 4391//2977 4376//2959 4390//2960 -f 4386//2964 4371//2946 4385//2961 -f 4381//2940 4396//2958 4397//2962 -f 4376//2959 4391//2977 4392//2963 -f 4387//2967 4372//2949 4386//2964 -f 4382//2944 4397//2962 4398//2965 -f 4377//2945 4392//2963 4393//2966 -f 4388//2954 4373//2951 4387//2967 -f 4397//2962 4412//2980 4413//2968 -f 4392//2963 4407//2981 4408//2969 -f 4403//2972 4388//2954 4402//2970 -f 4393//2966 4408//2969 4409//2971 -f 4404//2974 4389//2956 4403//2972 -f 4394//2953 4409//2971 4410//2973 -f 4405//2978 4390//2960 4404//2974 -f 4400//2979 4385//2961 4399//2975 -f 4395//2955 4410//2973 4411//2976 -f 4406//2985 4391//2977 4405//2978 -f 4401//2982 4386//2964 4400//2979 -f 4396//2958 4411//2976 4412//2980 -f 4391//2977 4406//2985 4407//2981 -f 4402//2970 4387//2967 4401//2982 -f 4416//2987 4401//2982 4415//2983 -f 4411//2976 4426//2996 4427//2984 -f 4406//2985 4421//3001 4422//2986 -f 4417//2990 4402//2970 4416//2987 -f 4412//2980 4427//2984 4428//2988 -f 4407//2981 4422//2986 4423//2989 -f 4418//2992 4403//2972 4417//2990 -f 4408//2969 4423//2989 4424//2991 -f 4419//2994 4404//2974 4418//2992 -f 4409//2971 4424//2991 4425//2993 -f 4420//2997 4405//2978 4419//2994 -f 4415//2983 4400//2979 4414//2995 -f 4410//2973 4425//2993 4426//2996 -f 4421//3001 4406//2985 4420//2997 -f 4435//3002 4420//2997 4434//2998 -f 4430//3003 4415//2983 4429//2999 -f 4425//2993 4440//3012 4441//3000 -f 4436//3019 4421//3001 4435//3002 -f 4431//3006 4416//2987 4430//3003 -f 4426//2996 4441//3000 4442//3004 -f 4421//3001 4436//3019 4437//3005 -f 4432//3009 4417//2990 4431//3006 -f 4427//2984 4442//3004 4443//3007 -f 4422//2986 4437//3005 4438//3008 -f 4433//3011 4418//2992 4432//3009 -f 4423//2989 4438//3008 4439//3010 -f 4434//2998 4419//2994 4433//3011 -f 4424//2991 4439//3010 4440//3012 -f 4438//3008 4453//3026 4454//3013 -f 4449//3016 4434//2998 4448//3014 -f 4439//3010 4454//3013 4455//3015 -f 4450//3020 4435//3002 4449//3016 -f 4445//3021 4430//3003 4444//3017 -f 4440//3012 4455//3015 4456//3018 -f 4451//3037 4436//3019 4450//3020 -f 4446//3024 4431//3006 4445//3021 -f 4441//3000 4456//3018 4457//3022 -f 4436//3019 4451//3037 4452//3023 -f 4447//3027 4432//3009 4446//3024 -f 4442//3004 4457//3022 4458//3025 -f 4437//3005 4452//3023 4453//3026 -f 4448//3014 4433//3011 4447//3027 -f 4457//3022 4472//3040 4473//3028 -f 4452//3023 4467//3041 4468//3029 -f 4463//3032 4448//3014 4462//3030 -f 4453//3026 4468//3029 4469//3031 -f 4464//3034 4449//3016 4463//3032 -f 4454//3013 4469//3031 4470//3033 -f 4465//3038 4450//3020 4464//3034 -f 4460//3039 4445//3021 4459//3035 -f 4455//3015 4470//3033 4471//3036 -f 4466//3044 4451//3037 4465//3038 -f 4461//3042 4446//3024 4460//3039 -f 4456//3018 4471//3036 4472//3040 -f 4451//3037 4466//3044 4467//3041 -f 4462//3030 4447//3027 4461//3042 -f 4487//3047 4472//3040 4486//3043 -f 4482//3048 4467//3041 4481//3045 -f 4461//3042 4476//3056 4477//3046 -f 4488//3064 4473//3028 4487//3047 -f 4483//3050 4468//3029 4482//3048 -f 4462//3030 4477//3046 4478//3049 -f 4484//3052 4469//3031 4483//3050 -f 4463//3032 4478//3049 4479//3051 -f 4485//3055 4470//3033 4484//3052 -f 4464//3034 4479//3051 4480//3053 -f 4459//3035 4474//3057 4475//3054 -f 4486//3043 4471//3036 4485//3055 -f 4465//3038 4480//3053 4481//3045 -f 4460//3039 4475//3054 4476//3056 -f 4474//3057 4489//3075 4490//3058 -f 4501//3062 4486//3043 4500//3059 -f 4480//3053 4495//3071 4496//3060 -f 4475//3054 4490//3058 4491//3061 -f 4502//3065 4487//3047 4501//3062 -f 4497//3066 4482//3048 4496//3060 -f 4476//3056 4491//3061 4492//3063 -f 4503//3082 4488//3064 4502//3065 -f 4498//3068 4483//3050 4497//3066 -f 4477//3046 4492//3063 4493//3067 -f 4499//3070 4484//3052 4498//3068 -f 4478//3049 4493//3067 4494//3069 -f 4500//3059 4485//3055 4499//3070 -f 4479//3051 4494//3069 4495//3071 -f 4493//3067 4508//3085 4509//3072 -f 4515//3077 4500//3059 4514//3073 -f 4494//3069 4509//3072 4510//3074 -f 4489//3075 4504//3093 4505//3076 -f 4516//3080 4501//3062 4515//3077 -f 4495//3071 4510//3074 4511//3078 -f 4490//3058 4505//3076 4506//3079 -f 4517//3083 4502//3065 4516//3080 -f 4512//3084 4497//3066 4511//3078 -f 4491//3061 4506//3079 4507//3081 -f 4518//3100 4503//3082 4517//3083 -f 4513//3086 4498//3068 4512//3084 -f 4492//3063 4507//3081 4508//3085 -f 4514//3073 4499//3070 4513//3086 -f 4528//3089 4513//3086 4527//3087 -f 4507//3081 4522//3099 4523//3088 -f 4529//3091 4514//3073 4528//3089 -f 4508//3085 4523//3088 4524//3090 -f 4530//3095 4515//3077 4529//3091 -f 4509//3072 4524//3090 4525//3092 -f 4504//3093 4519//3113 4520//3094 -f 4531//3098 4516//3080 4530//3095 -f 4510//3074 4525//3092 4526//3096 -f 4505//3076 4520//3094 4521//3097 -f 4532//3101 4517//3083 4531//3098 -f 4527//3087 4512//3084 4526//3096 -f 4506//3079 4521//3097 4522//3099 -f 4533//3105 4518//3100 4532//3101 -f 4547//3106 4532//3101 4546//3102 -f 4542//3107 4527//3087 4541//3103 -f 4521//3097 4536//3116 4537//3104 -f 4548//3124 4533//3105 4547//3106 -f 4543//3109 4528//3089 4542//3107 -f 4522//3099 4537//3104 4538//3108 -f 4544//3111 4529//3091 4543//3109 -f 4523//3088 4538//3108 4539//3110 -f 4545//3115 4530//3095 4544//3111 -f 4524//3090 4539//3110 4540//3112 -f 4519//3113 4534//3117 4535//3114 -f 4546//3102 4531//3098 4545//3115 -f 4525//3092 4540//3112 4541//3103 -f 4520//3094 4535//3114 4536//3116 -f 4534//3117 4549//3135 4550//3118 -f 4561//3122 4546//3102 4560//3119 -f 4540//3112 4555//3131 4556//3120 -f 4535//3114 4550//3118 4551//3121 -f 4562//3125 4547//3106 4561//3122 -f 4557//3126 4542//3107 4556//3120 -f 4536//3116 4551//3121 4552//3123 -f 4563//3142 4548//3124 4562//3125 -f 4558//3128 4543//3109 4557//3126 -f 4537//3104 4552//3123 4553//3127 -f 4559//3130 4544//3111 4558//3128 -f 4538//3108 4553//3127 4554//3129 -f 4560//3119 4545//3115 4559//3130 -f 4539//3110 4554//3129 4555//3131 -f 4553//3127 4568//3145 4569//3132 -f 4575//3137 4560//3119 4574//3133 -f 4554//3129 4569//3132 4570//3134 -f 4549//3135 4564//3153 4565//3136 -f 4576//3140 4561//3122 4575//3137 -f 4555//3131 4570//3134 4571//3138 -f 4550//3118 4565//3136 4566//3139 -f 4577//3143 4562//3125 4576//3140 -f 4572//3144 4557//3126 4571//3138 -f 4551//3121 4566//3139 4567//3141 -f 4578//3159 4563//3142 4577//3143 -f 4573//3146 4558//3128 4572//3144 -f 4552//3123 4567//3141 4568//3145 -f 4574//3133 4559//3130 4573//3146 -f 4588//3149 4573//3146 4587//3147 -f 4567//3141 4582//3158 4583//3148 -f 4589//3151 4574//3133 4588//3149 -f 4568//3145 4583//3148 4584//3150 -f 4590//3155 4575//3137 4589//3151 -f 4569//3132 4584//3150 4585//3152 -f 4564//3153 4579//3172 4580//3154 -f 4591//3157 4576//3140 4590//3155 -f 4570//3134 4585//3152 4586//261 -f 4565//3136 4580//3154 4581//3156 -f 4592//3160 4577//3143 4591//3157 -f 4587//3147 4572//3144 4586//261 -f 4566//3139 4581//3156 4582//3158 -f 4593//3164 4578//3159 4592//3160 -f 4591//3157 4606//3174 4607//3161 -f 4586//261 4601//3178 4602//3162 -f 4597//3167 4582//3158 4596//3163 -f 4592//3160 4607//3161 4608//3165 -f 4587//3147 4602//3162 4603//3166 -f 4598//3169 4583//3148 4597//3167 -f 4588//3149 4603//3166 4604//3168 -f 4599//3171 4584//3150 4598//3169 -f 4589//3151 4604//3168 4605//3170 -f 4600//3175 4585//3152 4599//3171 -f 4595//3176 4580//3154 4594//3173 -f 4590//3155 4605//3170 4606//3174 -f 4601//3178 4586//261 4600//3175 -f 4596//3163 4581//3156 4595//3176 -f 4605//3170 4620//3189 4621//3177 -f 4616//3196 4601//3178 4615//3179 -f 4611//3183 4596//3163 4610//3180 -f 4606//3174 4621//3177 4622//3181 -f 4601//3178 4616//3196 4617//3182 -f 4612//3186 4597//3167 4611//3183 -f 4607//3161 4622//3181 4623//3184 -f 4602//3162 4617//3182 4618//3185 -f 4613//3188 4598//3169 4612//3186 -f 4603//3166 4618//3185 4619//3187 -f 4614//3190 4599//3171 4613//3188 -f 4604//3168 4619//3187 4620//3189 -f 4615//3179 4600//3175 4614//3190 -f 4610//3180 4595//3176 4609//3191 -f 4619//3187 4634//3205 4635//3192 -f 4630//3197 4615//3179 4629//3193 -f 4625//3198 4610//3180 4624//3194 -f 4620//3189 4635//3192 4636//3195 -f 4631//3214 4616//3196 4630//3197 -f 4626//3201 4611//3183 4625//3198 -f 4621//3177 4636//3195 4637//3199 -f 4616//3196 4631//3214 4632//3200 -f 4627//3204 4612//3186 4626//3201 -f 4622//3181 4637//3199 4638//3202 -f 4617//3182 4632//3200 4633//3203 -f 4628//3206 4613//3188 4627//3204 -f 4618//3185 4633//3203 4634//3205 -f 4629//3193 4614//3190 4628//3206 -f 4643//3209 4628//3206 4642//3207 -f 4633//3203 4648//3221 4649//3208 -f 4644//3211 4629//3193 4643//3209 -f 4634//3205 4649//3208 4650//3210 -f 4645//3215 4630//3197 4644//3211 -f 4640//3216 4625//3198 4639//3212 -f 4635//3192 4650//3210 4651//3213 -f 4646//3222 4631//3214 4645//3215 -f 4641//3219 4626//3201 4640//3216 -f 4636//3195 4651//3213 4652//3217 -f 4631//3214 4646//3222 4647//3218 -f 4642//3207 4627//3204 4641//3219 -f 4637//3199 4652//3217 4653//3220 -f 4632//3200 4647//3218 4648//3221 -f 4646//3222 4661//3238 4662//3223 -f 4657//3227 4642//3207 4656//3224 -f 4652//3217 4667//3236 4668//3225 -f 4647//3218 4662//3223 4663//3226 -f 4658//3229 4643//3209 4657//3227 -f 4648//3221 4663//3226 4664//3228 -f 4659//3231 4644//3211 4658//3229 -f 4649//3208 4664//3228 4665//3230 -f 4660//3234 4645//3215 4659//3231 -f 4655//3235 4640//3216 4654//3232 -f 4650//3210 4665//3230 4666//3233 -f 4661//3238 4646//3222 4660//3234 -f 4656//3224 4641//3219 4655//3235 -f 4651//3213 4666//3233 4667//3236 -f 4665//3230 4681//3249 4682//3237 -f 4677//3256 4661//3238 4676//3239 -f 4672//3243 4656//3224 4671//3240 -f 4666//3233 4682//3237 4683//3241 -f 4661//3238 4677//3256 4678//3242 -f 4673//3246 4657//3227 4672//3243 -f 4667//3236 4683//3241 4684//3244 -f 4662//3223 4678//3242 4679//3245 -f 4674//3248 4658//3229 4673//3246 -f 4663//3226 4679//3245 4680//3247 -f 4675//3250 4659//3231 4674//3248 -f 4664//3228 4680//3247 4681//3249 -f 4676//3239 4660//3234 4675//3250 -f 4671//3240 4655//3235 4670//3251 -f 4680//3247 4695//3265 4696//3252 -f 4691//3257 4676//3239 4690//3253 -f 4686//3258 4671//3240 4685//3254 -f 4681//3249 4696//3252 4697//3255 -f 4692//3274 4677//3256 4691//3257 -f 4687//3261 4672//3243 4686//3258 -f 4682//3237 4697//3255 4698//3259 -f 4677//3256 4692//3274 4693//3260 -f 4688//3264 4673//3246 4687//3261 -f 4683//3241 4698//3259 4699//3262 -f 4678//3242 4693//3260 4694//3263 -f 4689//3266 4674//3248 4688//3264 -f 4679//3245 4694//3263 4695//3265 -f 4690//3253 4675//3250 4689//3266 -f 4704//3269 4689//3266 4703//3267 -f 4694//3263 4709//3281 4710//3268 -f 4705//3271 4690//3253 4704//3269 -f 4695//3265 4710//3268 4711//3270 -f 4706//3275 4691//3257 4705//3271 -f 4701//3276 4686//3258 4700//3272 -f 4696//3252 4711//3270 4712//3273 -f 4707//3282 4692//3274 4706//3275 -f 4702//3279 4687//3261 4701//3276 -f 4697//3255 4712//3273 4713//3277 -f 4692//3274 4707//3282 4708//3278 -f 4703//3267 4688//3264 4702//3279 -f 4698//3259 4713//3277 4714//3280 -f 4693//3260 4708//3278 4709//3281 -f 4723//3286 4708//3278 4722//3283 -f 4702//3279 4717//3294 4718//3284 -f 4729//3301 4714//3280 4728//3285 -f 4724//3288 4709//3281 4723//3286 -f 4703//3267 4718//3284 4719//3287 -f 4725//3290 4710//3268 4724//3288 -f 4704//3269 4719//3287 4720//3289 -f 4726//3293 4711//3270 4725//3290 -f 4705//3271 4720//3289 4721//3291 -f 4700//3272 4715//3309 4716//3292 -f 4727//3295 4712//3273 4726//3293 -f 4706//3275 4721//3291 4722//3283 -f 4701//3276 4716//3292 4717//3294 -f 4728//3285 4713//3277 4727//3295 -f 4742//3299 4727//3295 4741//3296 -f 4721//3291 4736//3308 4737//3297 -f 4716//3292 4731//3310 4732//3298 -f 4743//3302 4728//3285 4742//3299 -f 4738//3303 4723//3286 4737//3297 -f 4717//3294 4732//3298 4733//3300 -f 4744//3320 4729//3301 4743//3302 -f 4739//3305 4724//3288 4738//3303 -f 4718//3284 4733//3300 4734//3304 -f 4740//3307 4725//3290 4739//3305 -f 4719//3287 4734//3304 4735//3306 -f 4741//3296 4726//3293 4740//3307 -f 4720//3289 4735//3306 4736//3308 -f 4715//3309 4730//3313 4731//3310 -f 4756//3315 4741//3296 4755//3311 -f 4735//3306 4750//3325 4751//3312 -f 4730//3313 4745//3330 4746//3314 -f 4757//3318 4742//3299 4756//3315 -f 4736//3308 4751//3312 4752//3316 -f 4731//3310 4746//3314 4747//3317 -f 4758//3321 4743//3302 4757//3318 -f 4753//3322 4738//3303 4752//3316 -f 4732//3298 4747//3317 4748//3319 -f 4759//3337 4744//3320 4758//3321 -f 4754//3324 4739//3305 4753//3322 -f 4733//3300 4748//3319 4749//3323 -f 4755//3311 4740//3307 4754//3324 -f 4734//3304 4749//3323 4750//3325 -f 4770//3328 4755//3311 4769//3326 -f 4749//3323 4764//3340 4765//3327 -f 4771//3332 4756//3315 4770//3328 -f 4750//3325 4765//3327 4766//3329 -f 4745//3330 4760//3350 4761//3331 -f 4772//3335 4757//3318 4771//3332 -f 4751//3312 4766//3329 4767//3333 -f 4746//3314 4761//3331 4762//3334 -f 4773//3338 4758//3321 4772//3335 -f 4768//3339 4753//3322 4767//3333 -f 4747//3317 4762//3334 4763//3336 -f 4774//3342 4759//3337 4773//3338 -f 4769//3326 4754//3324 4768//3339 -f 4748//3319 4763//3336 4764//3340 -f 4762//3334 4777//3354 4778//3341 -f 4789//3360 4774//3342 4788//3343 -f 4784//3346 4769//3326 4783//3344 -f 4763//3336 4778//3341 4779//3345 -f 4785//3348 4770//3328 4784//3346 -f 4764//3340 4779//3345 4780//3347 -f 4786//3352 4771//3332 4785//3348 -f 4765//3327 4780//3347 4781//3349 -f 4760//3350 4775//3368 4776//3351 -f 4787//3355 4772//3335 4786//3352 -f 4766//3329 4781//3349 4782//3353 -f 4761//3331 4776//3351 4777//3354 -f 4788//3343 4773//3338 4787//3355 -f 4783//3344 4768//3339 4782//3353 -f 4781//3349 4797//3367 4798//3356 -f 4776//3351 4792//3369 4793//3357 -f 4804//3361 4788//3343 4803//3358 -f 4799//3362 4783//3344 4798//3356 -f 4777//3354 4793//3357 4794//3359 -f 4805//3380 4789//3360 4804//3361 -f 4800//3364 4784//3346 4799//3362 -f 4778//3341 4794//3359 4795//3363 -f 4801//3366 4785//3348 4800//3364 -f 4779//3345 4795//3363 4796//3365 -f 4802//3370 4786//3352 4801//3366 -f 4780//3347 4796//3365 4797//3367 -f 4775//3368 4791//3373 4792//3369 -f 4803//3358 4787//3355 4802//3370 -f 4817//3375 4802//3370 4816//3371 -f 4796//3365 4811//3385 4812//3372 -f 4791//3373 4806//3387 4807//3374 -f 4818//3378 4803//3358 4817//3375 -f 4797//3367 4812//3372 4813//3376 -f 4792//3369 4807//3374 4808//3377 -f 4819//3381 4804//3361 4818//3378 -f 4814//3382 4799//3362 4813//3376 -f 4793//3357 4808//3377 4809//3379 -f 4820//3386 4805//3380 4819//3381 -f 4815//3384 4800//3364 4814//3382 -f 4794//3359 4809//3379 4810//3383 -f 4816//3371 4801//3366 4815//3384 -f 4795//3363 4810//3383 4811//3385 -f 4349//2934 4816//3371 4348//2930 -f 4810//3383 4343//2932 4344//2910 -f 4350//2916 4817//3375 4349//2934 -f 4811//3385 4344//2910 4345//2909 -f 4806//3387 4339//2913 4340//2912 -f 4351//2915 4818//3378 4350//2916 -f 4812//3372 4345//2909 4346//2918 -f 4807//3374 4340//2912 4341//2920 -f 4352//2922 4819//3381 4351//2915 -f 4347//2924 4814//3382 4346//2918 -f 4808//3377 4341//2920 4342//2926 -f 4353//2928 4820//3386 4352//2922 -f 4348//2930 4815//3384 4347//2924 -f 4809//3379 4342//2926 4343//2932 -f 4842//2919 4827//2909 4841//3388 -f 4837//2921 4822//2912 4836//3390 -f 4832//2916 4847//2937 4848//2917 -f 4843//2941 4828//5 4842//2919 -f 4838//3392 4823//2920 4837//2921 -f 4833//2915 4848//2917 4849//3391 -f 4828//5 4843//2941 4844//2925 -f 4839//2933 4824//2926 4838//3392 -f 4834//2922 4849//3391 4850//3393 -f 4829//2924 4844//2925 4845//3394 -f 4840//2936 4825//2932 4839//2933 -f 4830//2930 4845//3394 4846//2935 -f 4841//3388 4826//2910 4840//2936 -f 4831//2934 4846//2935 4847//2937 -f 4857//2942 4842//2919 4856//3395 -f 4852//3396 4837//2921 4851//2939 -f 4847//2937 4862//3399 4863//2940 -f 4858//2959 4843//2941 4857//2942 -f 4853//2946 4838//3392 4852//3396 -f 4848//2917 4863//2940 4864//2944 -f 4843//2941 4858//2959 4859//2945 -f 4854//3397 4839//2933 4853//2946 -f 4849//3391 4864//2944 4865//2947 -f 4844//2925 4859//2945 4860//2948 -f 4855//3398 4840//2936 4854//3397 -f 4845//3394 4860//2948 4861//2950 -f 4856//3395 4841//3388 4855//3398 -f 4846//2935 4861//2950 4862//3399 -f 4860//2948 4875//3402 4876//2953 -f 4871//2956 4856//3395 4870//2954 -f 4861//2950 4876//2953 4877//2955 -f 4872//2960 4857//2942 4871//2956 -f 4867//2961 4852//3396 4866//3400 -f 4862//3399 4877//2955 4878//3401 -f 4873//2977 4858//2959 4872//2960 -f 4868//2964 4853//2946 4867//2961 -f 4863//2940 4878//3401 4879//2962 -f 4858//2959 4873//2977 4874//2963 -f 4869//3403 4854//3397 4868//2964 -f 4864//2944 4879//2962 4880//2965 -f 4859//2945 4874//2963 4875//3402 -f 4870//2954 4855//3398 4869//3403 -f 4879//2962 4894//3410 4895//3404 -f 4874//2963 4889//2981 4890//3405 -f 4885//2972 4870//2954 4884//2970 -f 4875//3402 4890//3405 4891//2971 -f 4886//3407 4871//2956 4885//2972 -f 4876//2953 4891//2971 4892//3406 -f 4887//3409 4872//2960 4886//3407 -f 4882//2979 4867//2961 4881//3408 -f 4877//2955 4892//3406 4893//2976 -f 4888//2985 4873//2977 4887//3409 -f 4883//2982 4868//2964 4882//2979 -f 4878//3401 4893//2976 4894//3410 -f 4873//2977 4888//2985 4889//2981 -f 4884//2970 4869//3403 4883//2982 -f 4898//2987 4883//2982 4897//3411 -f 4893//2976 4908//3414 4909//2984 -f 4888//2985 4903//3416 4904//3412 -f 4899//2990 4884//2970 4898//2987 -f 4894//3410 4909//2984 4910//2988 -f 4889//2981 4904//3412 4905//2989 -f 4900//3413 4885//2972 4899//2990 -f 4890//3405 4905//2989 4906//2991 -f 4901//2994 4886//3407 4900//3413 -f 4891//2971 4906//2991 4907//2993 -f 4902//3415 4887//3409 4901//2994 -f 4897//3411 4882//2979 4896//2995 -f 4892//3406 4907//2993 4908//3414 -f 4903//3416 4888//2985 4902//3415 -f 4917//3417 4902//3415 4916//2998 -f 4912//3003 4897//3411 4911//2999 -f 4907//2993 4922//3012 4923//3000 -f 4918//3423 4903//3416 4917//3417 -f 4913//3418 4898//2987 4912//3003 -f 4908//3414 4923//3000 4924//3004 -f 4903//3416 4918//3423 4919//3005 -f 4914//3009 4899//2990 4913//3418 -f 4909//2984 4924//3004 4925//3419 -f 4904//3412 4919//3005 4920//3420 -f 4915//3421 4900//3413 4914//3009 -f 4905//2989 4920//3420 4921//3010 -f 4916//2998 4901//2994 4915//3421 -f 4906//2991 4921//3010 4922//3012 -f 4920//3420 4935//3026 4936//3013 -f 4931//3016 4916//2998 4930//3014 -f 4921//3010 4936//3013 4937//3015 -f 4932//3424 4917//3417 4931//3016 -f 4927//3021 4912//3003 4926//3422 -f 4922//3012 4937//3015 4938//3018 -f 4933//3037 4918//3423 4932//3424 -f 4928//3426 4913//3418 4927//3021 -f 4923//3000 4938//3018 4939//3425 -f 4918//3423 4933//3037 4934//3023 -f 4929//3027 4914//3009 4928//3426 -f 4924//3004 4939//3425 4940//3025 -f 4919//3005 4934//3023 4935//3026 -f 4930//3014 4915//3421 4929//3027 -f 4939//3425 4954//3040 4955//3028 -f 4934//3023 4949//3429 4950//3427 -f 4945//3032 4930//3014 4944//3030 -f 4935//3026 4950//3427 4951//3031 -f 4946//3428 4931//3016 4945//3032 -f 4936//3013 4951//3031 4952//3033 -f 4947//3038 4932//3424 4946//3428 -f 4942//3039 4927//3021 4941//3035 -f 4937//3015 4952//3033 4953//3036 -f 4948//480 4933//3037 4947//3038 -f 4943//3042 4928//3426 4942//3039 -f 4938//3018 4953//3036 4954//3040 -f 4933//3037 4948//480 4949//3429 -f 4944//3030 4929//3027 4943//3042 -f 4969//3431 4954//3040 4968//3430 -f 4964//3048 4949//3429 4963//3045 -f 4943//3042 4958//3056 4959//3046 -f 4970//3064 4955//3028 4969//3431 -f 4965//3050 4950//3427 4964//3048 -f 4944//3030 4959//3046 4960//3432 -f 4966//3052 4951//3031 4965//3050 -f 4945//3032 4960//3432 4961//3051 -f 4967//3055 4952//3033 4966//3052 -f 4946//3428 4961//3051 4962//3053 -f 4941//3035 4956//3057 4957//3054 -f 4968//3430 4953//3036 4967//3055 -f 4947//3038 4962//3053 4963//3045 -f 4942//3039 4957//3054 4958//3056 -f 4956//3057 4971//3075 4972//3058 -f 4983//3062 4968//3430 4982//3059 -f 4962//3053 4977//3071 4978//3060 -f 4957//3054 4972//3058 4973//3433 -f 4984//3065 4969//3431 4983//3062 -f 4979//3066 4964//3048 4978//3060 -f 4958//3056 4973//3433 4974//3063 -f 4985//3082 4970//3064 4984//3065 -f 4980//3434 4965//3050 4979//3066 -f 4959//3046 4974//3063 4975//3067 -f 4981//3436 4966//3052 4980//3434 -f 4960//3432 4975//3067 4976//3435 -f 4982//3059 4967//3055 4981//3436 -f 4961//3051 4976//3435 4977//3071 -f 4975//3067 4990//3085 4991//3072 -f 4997//3077 4982//3059 4996//3073 -f 4976//3435 4991//3072 4992//3437 -f 4971//3075 4986//3093 4987//3076 -f 4998//3438 4983//3062 4997//3077 -f 4977//3071 4992//3437 4993//3078 -f 4972//3058 4987//3076 4988//3079 -f 4999//3083 4984//3065 4998//3438 -f 4994//3439 4979//3066 4993//3078 -f 4973//3433 4988//3079 4989//3081 -f 5000//3441 4985//3082 4999//3083 -f 4995//3086 4980//3434 4994//3439 -f 4974//3063 4989//3081 4990//3085 -f 4996//3073 4981//3436 4995//3086 -f 5010//3440 4995//3086 5009//3087 -f 4989//3081 5004//3099 5005//3088 -f 5011//3091 4996//3073 5010//3440 -f 4990//3085 5005//3088 5006//3090 -f 5012//3095 4997//3077 5011//3091 -f 4991//3072 5006//3090 5007//3092 -f 4986//3093 5001//3447 5002//3094 -f 5013//3098 4998//3438 5012//3095 -f 4992//3437 5007//3092 5008//3096 -f 4987//3076 5002//3094 5003//3097 -f 5014//3101 4999//3083 5013//3098 -f 5009//3087 4994//3439 5008//3096 -f 4988//3079 5003//3097 5004//3099 -f 5015//3444 5000//3441 5014//3101 -f 5029//3106 5014//3101 5028//3442 -f 5024//3107 5009//3087 5023//3103 -f 5003//3097 5018//3116 5019//3443 -f 5030//3124 5015//3444 5029//3106 -f 5025//3109 5010//3440 5024//3107 -f 5004//3099 5019//3443 5020//3445 -f 5026//3111 5011//3091 5025//3109 -f 5005//3088 5020//3445 5021//3110 -f 5027//3115 5012//3095 5026//3111 -f 5006//3090 5021//3110 5022//3446 -f 5001//3447 5016//3449 5017//3448 -f 5028//3442 5013//3098 5027//3115 -f 5007//3092 5022//3446 5023//3103 -f 5002//3094 5017//3448 5018//3116 -f 5016//3449 5031//3453 5032//3118 -f 5043//3451 5028//3442 5042//3450 -f 5022//3446 5037//3131 5038//3120 -f 5017//3448 5032//3118 5033//3121 -f 5044//3125 5029//3106 5043//3451 -f 5039//3126 5024//3107 5038//3120 -f 5018//3116 5033//3121 5034//3123 -f 5045//3142 5030//3124 5044//3125 -f 5040//3128 5025//3109 5039//3126 -f 5019//3443 5034//3123 5035//3452 -f 5041//3130 5026//3111 5040//3128 -f 5020//3445 5035//3452 5036//3129 -f 5042//3450 5027//3115 5041//3130 -f 5021//3110 5036//3129 5037//3131 -f 5035//3452 5050//3145 5051//3132 -f 5057//3137 5042//3450 5056//3133 -f 5036//3129 5051//3132 5052//3134 -f 5031//3453 5046//3458 5047//3454 -f 5058//3455 5043//3451 5057//3137 -f 5037//3131 5052//3134 5053//3138 -f 5032//3118 5047//3454 5048//3139 -f 5059//3143 5044//3125 5058//3455 -f 5054//3144 5039//3126 5053//3138 -f 5033//3121 5048//3139 5049//3141 -f 5060//3459 5045//3142 5059//3143 -f 5055//3456 5040//3128 5054//3144 -f 5034//3123 5049//3141 5050//3145 -f 5056//3133 5041//3130 5055//3456 -f 5070//3149 5055//3456 5069//3147 -f 5049//3141 5064//3158 5065//3148 -f 5071//3151 5056//3133 5070//3149 -f 5050//3145 5065//3148 5066//3457 -f 5072//3155 5057//3137 5071//3151 -f 5051//3132 5066//3457 5067//3152 -f 5046//3458 5061//3172 5062//3154 -f 5073//3157 5058//3455 5072//3155 -f 5052//3134 5067//3152 5068//261 -f 5047//3454 5062//3154 5063//3156 -f 5074//3160 5059//3143 5073//3157 -f 5069//3147 5054//3144 5068//261 -f 5048//3139 5063//3156 5064//3158 -f 5075//3164 5060//3459 5074//3160 -f 5073//3157 5088//3174 5089//3460 -f 5068//261 5083//3178 5084//3162 -f 5079//3167 5064//3158 5078//3163 -f 5074//3160 5089//3460 5090//3461 -f 5069//3147 5084//3162 5085//3462 -f 5080//3169 5065//3148 5079//3167 -f 5070//3149 5085//3462 5086//3168 -f 5081//3463 5066//3457 5080//3169 -f 5071//3151 5086//3168 5087//3170 -f 5082//3175 5067//3152 5081//3463 -f 5077//3465 5062//3154 5076//3464 -f 5072//3155 5087//3170 5088//3174 -f 5083//3178 5068//261 5082//3175 -f 5078//3163 5063//3156 5077//3465 -f 5087//3170 5102//3468 5103//3177 -f 5098//3196 5083//3178 5097//3466 -f 5093//3183 5078//3163 5092//3467 -f 5088//3174 5103//3177 5104//3181 -f 5083//3178 5098//3196 5099//3182 -f 5094//3186 5079//3167 5093//3183 -f 5089//3460 5104//3181 5105//3184 -f 5084//3162 5099//3182 5100//3185 -f 5095//3188 5080//3169 5094//3186 -f 5085//3462 5100//3185 5101//3187 -f 5096//3469 5081//3463 5095//3188 -f 5086//3168 5101//3187 5102//3468 -f 5097//3466 5082//3175 5096//3469 -f 5092//3467 5077//3465 5091//3470 -f 5101//3187 5116//3205 5117//3192 -f 5112//3197 5097//3466 5111//3193 -f 5107//3198 5092//3467 5106//3471 -f 5102//3468 5117//3192 5118//3472 -f 5113//3214 5098//3196 5112//3197 -f 5108//3473 5093//3183 5107//3198 -f 5103//3177 5118//3472 5119//3199 -f 5098//3196 5113//3214 5114//3200 -f 5109//3474 5094//3186 5108//3473 -f 5104//3181 5119//3199 5120//3202 -f 5099//3182 5114//3200 5115//3203 -f 5110//3206 5095//3188 5109//3474 -f 5100//3185 5115//3203 5116//3205 -f 5111//3193 5096//3469 5110//3206 -f 5125//3209 5110//3206 5124//3207 -f 5115//3203 5130//3480 5131//3208 -f 5126//3475 5111//3193 5125//3209 -f 5116//3205 5131//3208 5132//3210 -f 5127//3477 5112//3197 5126//3475 -f 5122//3216 5107//3198 5121//3212 -f 5117//3192 5132//3210 5133//3476 -f 5128//3222 5113//3214 5127//3477 -f 5123//3219 5108//3473 5122//3216 -f 5118//3472 5133//3476 5134//3478 -f 5113//3214 5128//3222 5129//3218 -f 5124//3207 5109//3474 5123//3219 -f 5119//3199 5134//3478 5135//3479 -f 5114//3200 5129//3218 5130//3480 -f 5128//3222 5143//3238 5144//3481 -f 5139//3227 5124//3207 5138//3224 -f 5134//3478 5149//3236 5150//3482 -f 5129//3218 5144//3481 5145//3226 -f 5140//3483 5125//3209 5139//3227 -f 5130//3480 5145//3226 5146//3228 -f 5141//3231 5126//3475 5140//3483 -f 5131//3208 5146//3228 5147//3230 -f 5142//3234 5127//3477 5141//3231 -f 5137//3485 5122//3216 5136//3232 -f 5132//3210 5147//3230 5148//3484 -f 5143//3238 5128//3222 5142//3234 -f 5138//3224 5123//3219 5137//3485 -f 5133//3476 5148//3484 5149//3236 -f 5147//3230 5163//3249 5164//3486 -f 5159//3256 5143//3238 5158//3239 -f 5154//3243 5138//3224 5153//3240 -f 5148//3484 5164//3486 5165//3241 -f 5143//3238 5159//3256 5160//3242 -f 5155//3246 5139//3227 5154//3243 -f 5149//3236 5165//3241 5166//3487 -f 5144//3481 5160//3242 5161//3488 -f 5156//3490 5140//3483 5155//3246 -f 5145//3226 5161//3488 5162//3489 -f 5157//3250 5141//3231 5156//3490 -f 5146//3228 5162//3489 5163//3249 -f 5158//3239 5142//3234 5157//3250 -f 5153//3240 5137//3485 5152//3251 -f 5162//3489 5177//3493 5178//3491 -f 5173//3257 5158//3239 5172//3253 -f 5168//3258 5153//3240 5167//3254 -f 5163//3249 5178//3491 5179//3255 -f 5174//3274 5159//3256 5173//3257 -f 5169//3492 5154//3243 5168//3258 -f 5164//3486 5179//3255 5180//3259 -f 5159//3256 5174//3274 5175//3260 -f 5170//3264 5155//3246 5169//3492 -f 5165//3241 5180//3259 5181//3262 -f 5160//3242 5175//3260 5176//3263 -f 5171//3266 5156//3490 5170//3264 -f 5161//3488 5176//3263 5177//3493 -f 5172//3253 5157//3250 5171//3266 -f 5186//3269 5171//3266 5185//3267 -f 5176//3263 5191//3281 5192//3268 -f 5187//3495 5172//3253 5186//3269 -f 5177//3493 5192//3268 5193//3494 -f 5188//3275 5173//3257 5187//3495 -f 5183//3276 5168//3258 5182//3272 -f 5178//3491 5193//3494 5194//3273 -f 5189//3282 5174//3274 5188//3275 -f 5184//3279 5169//3492 5183//3276 -f 5179//3255 5194//3273 5195//3277 -f 5174//3274 5189//3282 5190//3278 -f 5185//3267 5170//3264 5184//3279 -f 5180//3259 5195//3277 5196//3280 -f 5175//3260 5190//3278 5191//3281 -f 5205//3286 5190//3278 5204//3283 -f 5184//3279 5199//3294 5200//3284 -f 5211//3301 5196//3280 5210//3285 -f 5206//3288 5191//3281 5205//3286 -f 5185//3267 5200//3284 5201//3496 -f 5207//3290 5192//3268 5206//3288 -f 5186//3269 5201//3496 5202//3289 -f 5208//3293 5193//3494 5207//3290 -f 5187//3495 5202//3289 5203//3291 -f 5182//3272 5197//3309 5198//3292 -f 5209//3497 5194//3273 5208//3293 -f 5188//3275 5203//3291 5204//3283 -f 5183//3276 5198//3292 5199//3294 -f 5210//3285 5195//3277 5209//3497 -f 5224//3299 5209//3497 5223//3296 -f 5203//3291 5218//3308 5219//3297 -f 5198//3292 5213//3310 5214//3498 -f 5225//3302 5210//3285 5224//3299 -f 5220//3303 5205//3286 5219//3297 -f 5199//3294 5214//3498 5215//3300 -f 5226//3320 5211//3301 5225//3302 -f 5221//3500 5206//3288 5220//3303 -f 5200//3284 5215//3300 5216//3499 -f 5222//3307 5207//3290 5221//3500 -f 5201//3496 5216//3499 5217//3306 -f 5223//3296 5208//3293 5222//3307 -f 5202//3289 5217//3306 5218//3308 -f 5197//3309 5212//3502 5213//3310 -f 5238//3315 5223//3296 5237//3501 -f 5217//3306 5232//3325 5233//3312 -f 5212//3502 5227//3508 5228//3314 -f 5239//3504 5224//3299 5238//3315 -f 5218//3308 5233//3312 5234//3503 -f 5213//3310 5228//3314 5229//3317 -f 5240//3321 5225//3302 5239//3504 -f 5235//3505 5220//3303 5234//3503 -f 5214//3498 5229//3317 5230//3319 -f 5241//3337 5226//3320 5240//3321 -f 5236//3506 5221//3500 5235//3505 -f 5215//3300 5230//3319 5231//3323 -f 5237//3501 5222//3307 5236//3506 -f 5216//3499 5231//3323 5232//3325 -f 5252//3328 5237//3501 5251//3507 -f 5231//3323 5246//3340 5247//3327 -f 5253//3509 5238//3315 5252//3328 -f 5232//3325 5247//3327 5248//3329 -f 5227//3508 5242//3350 5243//3331 -f 5254//3510 5239//3504 5253//3509 -f 5233//3312 5248//3329 5249//3333 -f 5228//3314 5243//3331 5244//3334 -f 5255//3511 5240//3321 5254//3510 -f 5250//3339 5235//3505 5249//3333 -f 5229//3317 5244//3334 5245//3336 -f 5256//3513 5241//3337 5255//3511 -f 5251//3507 5236//3506 5250//3339 -f 5230//3319 5245//3336 5246//3340 -f 5244//3334 5259//3516 5260//3512 -f 5271//3360 5256//3513 5270//3343 -f 5266//3346 5251//3507 5265//3344 -f 5245//3336 5260//3512 5261//3345 -f 5267//3348 5252//3328 5266//3346 -f 5246//3340 5261//3345 5262//3514 -f 5268//3352 5253//3509 5267//3348 -f 5247//3327 5262//3514 5263//3349 -f 5242//3350 5257//3521 5258//3515 -f 5269//3517 5254//3510 5268//3352 -f 5248//3329 5263//3349 5264//3353 -f 5243//3331 5258//3515 5259//3516 -f 5270//3343 5255//3511 5269//3517 -f 5265//3344 5250//3339 5264//3353 -f 5263//3349 5279//3367 5280//3356 -f 5258//3515 5274//3369 5275//3518 -f 5286//3361 5270//3343 5285//3358 -f 5281//3362 5265//3344 5280//3356 -f 5259//3516 5275//3518 5276//3519 -f 5287//3380 5271//3360 5286//3361 -f 5282//3364 5266//3346 5281//3362 -f 5260//3512 5276//3519 5277//3363 -f 5283//3520 5267//3348 5282//3364 -f 5261//3345 5277//3363 5278//3365 -f 5284//3370 5268//3352 5283//3520 -f 5262//3514 5278//3365 5279//3367 -f 5257//3521 5273//3522 5274//3369 -f 5285//3358 5269//3517 5284//3370 -f 5299//3524 5284//3370 5298//3371 -f 5278//3365 5293//3385 5294//3372 -f 5273//3522 5288//3528 5289//3523 -f 5300//3378 5285//3358 5299//3524 -f 5279//3367 5294//3372 5295//3376 -f 5274//3369 5289//3523 5290//3377 -f 5301//3381 5286//3361 5300//3378 -f 5296//3382 5281//3362 5295//3376 -f 5275//3518 5290//3377 5291//3525 -f 5302//3527 5287//3380 5301//3381 -f 5297//3526 5282//3364 5296//3382 -f 5276//3519 5291//3525 5292//3383 -f 5298//3371 5283//3520 5297//3526 -f 5277//3363 5292//3383 5293//3385 -f 4831//2934 5298//3371 4830//2930 -f 5292//3383 4825//2932 4826//2910 -f 4832//2916 5299//3524 4831//2934 -f 5293//3385 4826//2910 4827//2909 -f 5288//3528 4821//3389 4822//2912 -f 4833//2915 5300//3378 4832//2916 -f 5294//3372 4827//2909 4828//5 -f 5289//3523 4822//2912 4823//2920 -f 4834//2922 5301//3381 4833//2915 -f 4829//2924 5296//3382 4828//5 -f 5290//3377 4823//2920 4824//2926 -f 4835//2928 5302//3527 4834//2922 -f 4830//2930 5297//3526 4829//2924 -f 5291//3525 4824//2926 4825//2932 -o Ear_R_Sphere.008 -v -0.942135 0.123766 -0.790557 -v -0.971285 0.138857 -0.773109 -v -1.001178 0.167463 -0.755604 -v -1.023476 0.202632 -0.742670 -v -1.050742 0.188359 -0.726125 -v -1.065738 0.156697 -0.716845 -v -1.074973 0.122343 -0.711131 -v -1.078091 0.086615 -0.709202 -v -1.074973 0.050887 -0.711131 -v -1.065738 0.016532 -0.716845 -v -1.050742 -0.015129 -0.726125 -v -1.030561 -0.042881 -0.738613 -v -1.005970 -0.065656 -0.753829 -v -0.977914 -0.082579 -0.771190 -v -0.947472 -0.093001 -0.790027 -v -0.944261 0.123101 -0.795974 -v -0.975586 0.137204 -0.783938 -v -1.007664 0.166926 -0.771946 -v -1.030584 0.203090 -0.763045 -v -1.060842 0.188359 -0.751290 -v -1.076960 0.156697 -0.744808 -v -1.086886 0.122343 -0.740816 -v -1.090238 0.086615 -0.739468 -v -1.086886 0.050887 -0.740816 -v -1.076960 0.016532 -0.744808 -v -1.060842 -0.015129 -0.751290 -v -1.039150 -0.042881 -0.760014 -v -1.012718 -0.065656 -0.770644 -v -0.982563 -0.082579 -0.782772 -v -0.949842 -0.093001 -0.795932 -v -0.945127 0.122652 -0.801955 -v -0.977082 0.135311 -0.795837 -v -1.008829 0.160888 -0.789698 -v -1.033925 0.195448 -0.784816 -v -1.065368 0.188359 -0.778698 -v -1.081990 0.156697 -0.775261 -v -1.092225 0.122343 -0.773145 -v -1.095681 0.086615 -0.772431 -v -1.092225 0.050887 -0.773145 -v -1.081990 0.016532 -0.775261 -v -1.065368 -0.015129 -0.778698 -v -1.042999 -0.042881 -0.783322 -v -1.015743 -0.065656 -0.788957 -v -0.984646 -0.082579 -0.795386 -v -0.950904 -0.093001 -0.802362 -v -0.944911 0.122893 -0.808257 -v -0.976676 0.135723 -0.808342 -v -1.008549 0.161499 -0.808326 -v -1.033513 0.196247 -0.807634 -v -1.064147 0.188359 -0.807293 -v -1.080633 0.156697 -0.807035 -v -1.090785 0.122343 -0.806876 -v -1.094213 0.086615 -0.806822 -v -1.090785 0.050887 -0.806876 -v -1.080633 0.016532 -0.807035 -v -1.064147 -0.015129 -0.807293 -v -1.041961 -0.042881 -0.807641 -v -1.014927 -0.065656 -0.808064 -v -0.984084 -0.082579 -0.808547 -v -0.950617 -0.093001 -0.809072 -v -0.943535 0.123924 -0.814504 -v -0.973927 0.138486 -0.820733 -v -1.005204 0.165323 -0.826896 -v -1.030109 0.201373 -0.830949 -v -1.057226 0.188359 -0.835978 -v -1.072942 0.156697 -0.838908 -v -1.082621 0.122343 -0.840712 -v -1.085889 0.086615 -0.841321 -v -1.082621 0.050887 -0.840712 -v -1.072942 0.016532 -0.838908 -v -1.057226 -0.015129 -0.835978 -v -1.036075 -0.042881 -0.832035 -v -1.010302 -0.065656 -0.827231 -v -0.980898 -0.082579 -0.821750 -v -0.948993 -0.093001 -0.815802 -v -0.940978 0.125439 -0.820358 -v -0.968637 0.142257 -0.832291 -v -0.996932 0.172381 -0.843906 -v -1.025553 0.216049 -0.855564 -v -1.044870 0.188359 -0.863650 -v -1.059213 0.156697 -0.869655 -v -1.068046 0.122343 -0.873353 -v -1.071028 0.086615 -0.874601 -v -1.068046 0.050887 -0.873353 -v -1.059213 0.016532 -0.869655 -v -1.044870 -0.015129 -0.863650 -v -1.025567 -0.042881 -0.855568 -v -1.002046 -0.065656 -0.845720 -v -0.975212 -0.082579 -0.834485 -v -0.946094 -0.093001 -0.822295 -v -0.937450 0.126946 -0.825647 -v -0.961464 0.145298 -0.842862 -v -0.986055 0.174750 -0.860010 -v -1.010841 0.216110 -0.877335 -v -1.027555 0.188359 -0.889245 -v -1.039974 0.156697 -0.898095 -v -1.047621 0.122343 -0.903544 -v -1.050203 0.086615 -0.905385 -v -1.047621 0.050887 -0.903544 -v -1.039974 0.016532 -0.898095 -v -1.027555 -0.015129 -0.889245 -v -1.010841 -0.042881 -0.877335 -v -0.990476 -0.065656 -0.862823 -v -0.967242 -0.082579 -0.846266 -v -0.942032 -0.093001 -0.828300 -v -0.933134 0.128348 -0.830246 -v -0.952672 0.148285 -0.852147 -v -0.972676 0.179365 -0.874011 -v -0.992464 0.216111 -0.896500 -v -1.005945 0.188359 -0.911780 -v -1.015962 0.156697 -0.923135 -v -1.022131 0.122343 -0.930127 -v -1.024214 0.086615 -0.932487 -v -1.022131 0.050887 -0.930127 -v -1.015962 0.016532 -0.923135 -v -1.005945 -0.015129 -0.911780 -v -0.992464 -0.042881 -0.896500 -v -0.976037 -0.065656 -0.877880 -v -0.957296 -0.082579 -0.856637 -v -0.936961 -0.093001 -0.833588 -v -0.928187 0.129502 -0.834049 -v -0.942604 0.150704 -0.859907 -v -0.957388 0.183964 -0.885989 -v -0.971141 0.216109 -0.912325 -v -0.980872 0.188359 -0.930389 -v -0.988102 0.156697 -0.943812 -v -0.992555 0.122343 -0.952078 -v -0.994059 0.086615 -0.954869 -v -0.992555 0.050887 -0.952078 -v -0.988103 0.016532 -0.943812 -v -0.980872 -0.015129 -0.930389 -v -0.971141 -0.042881 -0.912325 -v -0.959284 -0.065656 -0.890314 -v -0.945756 -0.082579 -0.865202 -v -0.931078 -0.093001 -0.837954 -v -0.922745 0.129042 -0.837001 -v -0.931452 0.151400 -0.865836 -v -0.940188 0.184892 -0.895103 -v -0.947692 0.216111 -0.924204 -v -0.953298 0.188359 -0.944357 -v -0.957465 0.156697 -0.959332 -v -0.960030 0.122343 -0.968554 -v -0.960896 0.086615 -0.971668 -v -0.960030 0.050887 -0.968554 -v -0.957465 0.016532 -0.959332 -v -0.953298 -0.015129 -0.944357 -v -0.947692 -0.042881 -0.924204 -v -0.940860 -0.065656 -0.899647 -v -0.933066 -0.082579 -0.871631 -v -0.924609 -0.093001 -0.841231 -v -0.916880 0.128290 -0.838922 -v -0.919681 0.151673 -0.869631 -v -0.922271 0.186622 -0.900985 -v -0.923018 0.216110 -0.931679 -v -0.924285 0.188359 -0.953147 -v -0.925226 0.156697 -0.969099 -v -0.925806 0.122343 -0.978922 -v -0.926002 0.086615 -0.982239 -v -0.925806 0.050887 -0.978922 -v -0.925226 0.016532 -0.969099 -v -0.924285 -0.015129 -0.953147 -v -0.923018 -0.042881 -0.931679 -v -0.921474 -0.065656 -0.905521 -v -0.919712 -0.082579 -0.875677 -v -0.917801 -0.093001 -0.843294 -v -0.910856 0.127918 -0.839532 -v -0.907678 0.150681 -0.871020 -v -0.904089 0.185445 -0.903392 -v -0.898066 0.216110 -0.934464 -v -0.894945 0.188359 -0.956421 -v -0.892626 0.156697 -0.972737 -v -0.891198 0.122343 -0.982784 -v -0.890715 0.086615 -0.986177 -v -0.891198 0.050887 -0.982784 -v -0.892626 0.016532 -0.972737 -v -0.894945 -0.015129 -0.956421 -v -0.898066 -0.042881 -0.934464 -v -0.901870 -0.065656 -0.907708 -v -0.906209 -0.082579 -0.877184 -v -0.910917 -0.093001 -0.844062 -v -0.904956 0.127171 -0.838878 -v -0.895610 0.147650 -0.869788 -v -0.885492 0.179325 -0.901411 -v -0.873797 0.216110 -0.932450 -v -0.866408 0.188359 -0.954054 -v -0.860917 0.156697 -0.970107 -v -0.857535 0.122343 -0.979992 -v -0.856394 0.086615 -0.983330 -v -0.857535 0.050887 -0.979992 -v -0.860917 0.016532 -0.970107 -v -0.866408 -0.015129 -0.954054 -v -0.873797 -0.042881 -0.932450 -v -0.882801 -0.065656 -0.906127 -v -0.893074 -0.082579 -0.876094 -v -0.904221 -0.093001 -0.843507 -v -0.899294 0.127919 -0.836889 -v -0.884081 0.144468 -0.866086 -v -0.868120 0.174695 -0.895671 -v -0.851143 0.216110 -0.925717 -v -0.839769 0.188359 -0.946136 -v -0.831317 0.156697 -0.961308 -v -0.826113 0.122343 -0.970652 -v -0.824355 0.086615 -0.973807 -v -0.826113 0.050887 -0.970652 -v -0.831317 0.016532 -0.961308 -v -0.839769 -0.015129 -0.946136 -v -0.851143 -0.042881 -0.925717 -v -0.865002 -0.065656 -0.900836 -v -0.880814 -0.082579 -0.872450 -v -0.897971 -0.093001 -0.841649 -v -0.894021 0.126810 -0.833847 -v -0.873585 0.143014 -0.860071 -v -0.852517 0.173311 -0.886802 -v -0.830973 0.216110 -0.914521 -v -0.816052 0.188359 -0.932971 -v -0.804965 0.156697 -0.946681 -v -0.798137 0.122343 -0.955123 -v -0.795832 0.086615 -0.957974 -v -0.798137 0.050887 -0.955123 -v -0.804965 0.016532 -0.946681 -v -0.816052 -0.015129 -0.932971 -v -0.830973 -0.042881 -0.914521 -v -0.849155 -0.065656 -0.892040 -v -0.869898 -0.082579 -0.866391 -v -0.892406 -0.093001 -0.838560 -v -0.889469 0.126849 -0.829710 -v -0.864688 0.144003 -0.851969 -v -0.839410 0.174862 -0.874905 -v -0.814065 0.216110 -0.899294 -v -0.796169 0.188359 -0.915066 -v -0.782872 0.156697 -0.926786 -v -0.774684 0.122343 -0.934003 -v -0.771919 0.086615 -0.936440 -v -0.774684 0.050887 -0.934003 -v -0.782872 0.016532 -0.926786 -v -0.796169 -0.015129 -0.915066 -v -0.814065 -0.042881 -0.899294 -v -0.835870 -0.065656 -0.880076 -v -0.860747 -0.082579 -0.858150 -v -0.887741 -0.093001 -0.834359 -v -0.885964 0.128240 -0.824736 -v -0.857824 0.146043 -0.842318 -v -0.829233 0.178931 -0.860559 -v -0.801066 0.216110 -0.880621 -v -0.780884 0.188359 -0.893109 -v -0.765888 0.156697 -0.902389 -v -0.756654 0.122343 -0.908103 -v -0.753536 0.086615 -0.910032 -v -0.756654 0.050887 -0.908103 -v -0.765888 0.016532 -0.902389 -v -0.780884 -0.015129 -0.893109 -v -0.801066 -0.042881 -0.880621 -v -0.825657 -0.065656 -0.865405 -v -0.853712 -0.082579 -0.848044 -v -0.884154 -0.093001 -0.829207 -v -0.883748 0.130413 -0.819310 -v -0.853554 0.149753 -0.831679 -v -0.822847 0.184895 -0.844910 -v -0.792477 0.216110 -0.859220 -v -0.770785 0.188359 -0.867944 -v -0.754666 0.156697 -0.874426 -v -0.744740 0.122343 -0.878418 -v -0.741389 0.086615 -0.879766 -v -0.744740 0.050887 -0.878418 -v -0.754666 0.016532 -0.874426 -v -0.770785 -0.015129 -0.867944 -v -0.792477 -0.042881 -0.859220 -v -0.818908 -0.065656 -0.848589 -v -0.849064 -0.082579 -0.836462 -v -0.881785 -0.093001 -0.823302 -v -0.882854 0.132691 -0.813648 -v -0.851758 0.151597 -0.820254 -v -0.820580 0.180369 -0.827765 -v -0.788627 0.216110 -0.835912 -v -0.766258 0.188359 -0.840536 -v -0.749637 0.156697 -0.843973 -v -0.739401 0.122343 -0.846089 -v -0.735945 0.086615 -0.846803 -v -0.739401 0.050887 -0.846089 -v -0.749637 0.016532 -0.843973 -v -0.766258 -0.015129 -0.840536 -v -0.788627 -0.042881 -0.835912 -v -0.815884 -0.065656 -0.830277 -v -0.846981 -0.082579 -0.823848 -v -0.880723 -0.093001 -0.816872 -v -0.883030 0.134321 -0.807614 -v -0.852360 0.153154 -0.808200 -v -0.821482 0.179462 -0.809593 -v -0.789666 0.216110 -0.811593 -v -0.767479 0.188359 -0.811941 -v -0.750994 0.156697 -0.812199 -v -0.740842 0.122343 -0.812358 -v -0.737414 0.086615 -0.812412 -v -0.740842 0.050887 -0.812358 -v -0.750994 0.016532 -0.812199 -v -0.767479 -0.015129 -0.811941 -v -0.789666 -0.042881 -0.811593 -v -0.816700 -0.065656 -0.811170 -v -0.847543 -0.082579 -0.810687 -v -0.881009 -0.093001 -0.810162 -v -0.884243 0.136298 -0.801513 -v -0.855270 0.153953 -0.796135 -v -0.825879 0.181847 -0.791462 -v -0.795552 0.216110 -0.787199 -v -0.774401 0.188359 -0.783256 -v -0.758684 0.156697 -0.780326 -v -0.749006 0.122343 -0.778522 -v -0.745738 0.086615 -0.777913 -v -0.749006 0.050887 -0.778522 -v -0.758684 0.016532 -0.780326 -v -0.774401 -0.015129 -0.783256 -v -0.795552 -0.042881 -0.787199 -v -0.821325 -0.065656 -0.792003 -v -0.850728 -0.082579 -0.797484 -v -0.882633 -0.093001 -0.803432 -v -0.886581 0.138241 -0.795686 -v -0.860284 0.155550 -0.784594 -v -0.833500 0.185355 -0.774090 -v -0.806060 0.216110 -0.763666 -v -0.786757 0.188359 -0.755584 -v -0.772413 0.156697 -0.749579 -v -0.763581 0.122343 -0.745881 -v -0.760598 0.086615 -0.744633 -v -0.763581 0.050887 -0.745881 -v -0.772413 0.016532 -0.749579 -v -0.786757 -0.015129 -0.755584 -v -0.806060 -0.042881 -0.763666 -v -0.829580 -0.065656 -0.773514 -v -0.856415 -0.082579 -0.784748 -v -0.885532 -0.093001 -0.796939 -v -0.915813 -0.096520 -0.809617 -v -0.890038 0.139261 -0.790392 -v -0.867286 0.157379 -0.773981 -v -0.844186 0.189447 -0.758088 -v -0.820785 0.216110 -0.741899 -v -0.804072 0.188359 -0.729989 -v -0.791653 0.156697 -0.721139 -v -0.784005 0.122343 -0.715690 -v -0.781423 0.086615 -0.713849 -v -0.784006 0.050887 -0.715690 -v -0.791653 0.016532 -0.721139 -v -0.804072 -0.015129 -0.729989 -v -0.820785 -0.042881 -0.741899 -v -0.841150 -0.065656 -0.756411 -v -0.864384 -0.082579 -0.772968 -v -0.889595 -0.093001 -0.790934 -v -0.894322 0.139212 -0.785920 -v -0.876044 0.159367 -0.764598 -v -0.857691 0.195978 -0.743844 -v -0.839163 0.216110 -0.722734 -v -0.825682 0.188359 -0.707454 -v -0.815664 0.156697 -0.696100 -v -0.809496 0.122343 -0.689107 -v -0.807413 0.086615 -0.686747 -v -0.809496 0.050887 -0.689107 -v -0.815664 0.016532 -0.696100 -v -0.825682 -0.015129 -0.707454 -v -0.839163 -0.042881 -0.722734 -v -0.855589 -0.065656 -0.741354 -v -0.874330 -0.082579 -0.762596 -v -0.894665 -0.093001 -0.785646 -v -0.899407 0.136902 -0.782364 -v -0.886212 0.160376 -0.756934 -v -0.873610 0.206155 -0.731793 -v -0.860485 0.216111 -0.706908 -v -0.850755 0.188359 -0.688845 -v -0.843524 0.156697 -0.675422 -v -0.839072 0.122343 -0.667156 -v -0.837568 0.086615 -0.664366 -v -0.839072 0.050887 -0.667156 -v -0.843524 0.016532 -0.675422 -v -0.850755 -0.015129 -0.688845 -v -0.860486 -0.042881 -0.706909 -v -0.872343 -0.065656 -0.728920 -v -0.885870 -0.082579 -0.754032 -v -0.900548 -0.093001 -0.781280 -v -0.905213 0.133682 -0.779686 -v -0.897519 0.154168 -0.751266 -v -0.891018 0.190104 -0.722776 -v -0.883939 0.216085 -0.695043 -v -0.878328 0.188359 -0.674877 -v -0.874162 0.156697 -0.659902 -v -0.871597 0.122343 -0.650680 -v -0.870730 0.086615 -0.647566 -v -0.871597 0.050887 -0.650680 -v -0.874162 0.016532 -0.659902 -v -0.878328 -0.015129 -0.674877 -v -0.883935 -0.042881 -0.695030 -v -0.890767 -0.065656 -0.719586 -v -0.898561 -0.082579 -0.747603 -v -0.907018 -0.093001 -0.778003 -v -0.911472 0.130539 -0.777970 -v -0.909697 0.147283 -0.747585 -v -0.908971 0.177925 -0.716975 -v -0.908611 0.216063 -0.687581 -v -0.907342 0.188359 -0.666087 -v -0.906401 0.156697 -0.650135 -v -0.905821 0.122343 -0.640312 -v -0.905625 0.086615 -0.636995 -v -0.905821 0.050887 -0.640312 -v -0.906401 0.016532 -0.650135 -v -0.907342 -0.015129 -0.666087 -v -0.908609 -0.042881 -0.687555 -v -0.910153 -0.065656 -0.713713 -v -0.911914 -0.082579 -0.743557 -v -0.913826 -0.093001 -0.775940 -v -0.917902 0.128120 -0.777332 -v -0.922567 0.142034 -0.746162 -v -0.927843 0.174388 -0.715452 -v -0.933559 0.216099 -0.684777 -v -0.936682 0.188359 -0.662813 -v -0.939001 0.156697 -0.646497 -v -0.940429 0.122343 -0.636450 -v -0.940911 0.086615 -0.633057 -v -0.940429 0.050887 -0.636450 -v -0.939001 0.016532 -0.646497 -v -0.936682 -0.015129 -0.662813 -v -0.933560 -0.042881 -0.684770 -v -0.929757 -0.065656 -0.711526 -v -0.925418 -0.082579 -0.742050 -v -0.920710 -0.093001 -0.775172 -v -0.924157 0.126903 -0.777864 -v -0.934944 0.144173 -0.747654 -v -0.946151 0.174107 -0.717342 -v -0.957829 0.216110 -0.686784 -v -0.965219 0.188359 -0.665180 -v -0.970710 0.156697 -0.649127 -v -0.974091 0.122343 -0.639242 -v -0.975233 0.086615 -0.635904 -v -0.974091 0.050887 -0.639242 -v -0.970710 0.016532 -0.649127 -v -0.965219 -0.015129 -0.665180 -v -0.957829 -0.042881 -0.686784 -v -0.948825 -0.065656 -0.713107 -v -0.938552 -0.082579 -0.743140 -v -0.927406 -0.093001 -0.775727 -v -0.929866 0.126199 -0.779497 -v -0.946461 0.143623 -0.750732 -v -0.963214 0.173672 -0.722347 -v -0.980484 0.216110 -0.693517 -v -0.991858 0.188359 -0.673098 -v -1.000310 0.156697 -0.657926 -v -1.005514 0.122343 -0.648582 -v -1.007271 0.086615 -0.645427 -v -1.005514 0.050887 -0.648582 -v -1.000310 0.016532 -0.657925 -v -0.991858 -0.015129 -0.673098 -v -0.980484 -0.042881 -0.693517 -v -0.966625 -0.065656 -0.718398 -v -0.950813 -0.082579 -0.746784 -v -0.933656 -0.093001 -0.777585 -v -0.913940 0.125338 -0.808007 -v -0.934807 0.125877 -0.782239 -v -0.956393 0.142260 -0.756222 -v -0.978324 0.173236 -0.730608 -v -1.000652 0.216104 -0.704714 -v -1.015574 0.188359 -0.686263 -v -1.026662 0.156697 -0.672553 -v -1.033490 0.122343 -0.664111 -v -1.035795 0.086615 -0.661260 -v -1.033490 0.050887 -0.664111 -v -1.026662 0.016532 -0.672553 -v -1.015574 -0.015129 -0.686263 -v -1.000653 -0.042881 -0.704713 -v -0.982472 -0.065656 -0.727194 -v -0.961728 -0.082579 -0.752843 -v -0.939221 -0.093001 -0.780674 -v -0.938915 0.124942 -0.785940 -v -0.964687 0.141063 -0.763793 -v -0.990995 0.171360 -0.741843 -v -1.012732 0.204442 -0.723513 -v -1.035457 0.188359 -0.704168 -v -1.048754 0.156697 -0.692448 -v -1.056943 0.122343 -0.685231 -v -1.059708 0.086615 -0.682794 -v -1.056943 0.050887 -0.685231 -v -1.048754 0.016532 -0.692448 -v -1.035457 -0.015129 -0.704168 -v -1.017562 -0.042881 -0.719940 -v -0.995757 -0.065656 -0.739158 -v -0.970879 -0.082579 -0.761084 -v -0.943886 -0.093001 -0.784875 -vn -0.861873 0.201025 0.465529 -vn -0.809168 0.392834 0.436903 -vn -0.887997 0.386761 0.248665 -vn 0.394879 0.839015 -0.374310 -vn 0.094180 0.969878 -0.224616 -vn 0.142857 0.980804 -0.132603 -vn -0.480361 -0.838008 0.258736 -vn -0.613453 -0.717124 0.330729 -vn -0.532456 -0.833369 0.148076 -vn -0.879818 0.000000 0.475295 -vn -0.943876 0.197516 0.264595 -vn 0.590258 0.691916 -0.415693 -vn 0.474441 0.846034 -0.243110 -vn -0.331217 -0.926572 0.178137 -vn -0.368175 -0.924131 0.101962 -vn -0.861873 -0.201025 0.465529 -vn -0.943907 -0.197516 0.264595 -vn 0.189673 0.975921 -0.107700 -vn 0.702384 0.658223 -0.270852 -vn -0.171422 -0.980865 0.091922 -vn -0.190832 -0.980193 0.052400 -vn -0.809168 -0.392834 0.436903 -vn -0.887997 -0.386761 0.248665 -vn -0.605640 0.725700 0.326365 -vn 0.164586 0.966399 -0.197302 -vn -0.724815 -0.567095 0.391125 -vn -0.797845 -0.560015 0.223029 -vn -0.655782 0.738701 0.155553 -vn -0.677633 -0.710685 0.188971 -vn -0.711539 -0.701315 0.042573 -vn -0.924009 0.378124 0.056398 -vn 0.155950 0.987335 -0.028169 -vn -0.561846 -0.826563 0.033082 -vn -0.962828 0.000000 0.269997 -vn -0.979430 0.192572 0.060091 -vn 0.498184 0.863155 -0.082034 -vn -0.389996 -0.920530 0.022462 -vn -0.979430 -0.192572 0.060091 -vn 0.703879 0.698325 -0.129795 -vn -0.202521 -0.979186 0.011109 -vn -0.924009 -0.378124 0.056398 -vn 0.289987 0.948912 -0.124119 -vn -0.833705 -0.549883 0.050478 -vn -0.624317 0.780145 0.039735 -vn -0.834376 -0.538530 -0.117313 -vn -0.651082 0.755608 -0.071535 -vn -0.715964 -0.690725 -0.101138 -vn -0.920560 0.368603 -0.128971 -vn 0.161199 0.979705 0.118992 -vn -0.568407 -0.818751 -0.080813 -vn -0.998108 0.000000 0.061342 -vn -0.972869 0.187139 -0.135990 -vn 0.502365 0.849117 0.163060 -vn -0.396313 -0.916318 -0.056887 -vn -0.972869 -0.187139 -0.135990 -vn 0.718192 0.680074 0.147099 -vn -0.206183 -0.978027 -0.030183 -vn -0.920560 -0.368603 -0.128971 -vn 0.332011 0.932249 0.143742 -vn -0.202002 -0.976867 -0.069918 -vn -0.883328 -0.359722 -0.300485 -vn 0.224616 0.896847 0.380993 -vn -0.803980 -0.527818 -0.273812 -vn -0.724967 0.662526 -0.188147 -vn -0.693411 -0.680563 -0.236610 -vn -0.883328 0.359722 -0.300485 -vn 0.152043 0.954375 0.256935 -vn -0.553331 -0.811121 -0.189276 -vn -0.990356 0.000000 -0.138340 -vn -0.930937 0.182104 -0.316446 -vn 0.647175 0.650899 0.396802 -vn -0.387463 -0.912198 -0.133030 -vn -0.930937 -0.182104 -0.316446 -vn 0.461715 0.803247 0.376232 -vn 0.588702 0.623493 0.514420 -vn -0.364360 -0.908750 -0.203345 -vn -0.946806 0.000000 -0.321757 -vn -0.860256 -0.178137 -0.477645 -vn -0.084719 0.987396 0.133488 -vn -0.190283 -0.975890 -0.106662 -vn -0.818018 -0.352641 -0.454360 -vn -0.747002 -0.519181 -0.415174 -vn -0.746849 0.519608 -0.414899 -vn -0.646901 -0.672262 -0.359874 -vn -0.818018 0.352641 -0.454360 -vn 0.428510 0.772362 0.468825 -vn -0.518448 -0.804834 -0.288797 -vn -0.860256 0.178137 -0.477645 -vn -0.729270 0.348094 -0.589038 -vn 0.136876 0.934690 0.327982 -vn 0.369884 0.764306 0.528153 -vn -0.465773 -0.800714 -0.376690 -vn -0.874264 0.000000 -0.485366 -vn -0.765893 0.175604 -0.618519 -vn 0.524979 0.645924 0.554186 -vn -0.328166 -0.906461 -0.265633 -vn -0.765893 -0.175604 -0.618519 -vn -0.171667 -0.975249 -0.139225 -vn -0.729270 -0.348094 -0.589038 -vn -0.030244 0.999146 -0.027039 -vn -0.667379 -0.513627 -0.539201 -vn -0.667379 0.513627 -0.539201 -vn -0.579516 -0.666860 -0.468398 -vn -0.568072 -0.511704 -0.644520 -vn -0.568072 0.511704 -0.644520 -vn -0.493789 -0.664968 -0.560259 -vn -0.620228 0.346538 -0.703696 -vn 0.113315 0.925291 0.361888 -vn 0.312662 0.748924 0.584246 -vn -0.397351 -0.799249 -0.450850 -vn -0.777978 0.000000 -0.628254 -vn -0.651021 0.174718 -0.738639 -vn 0.385876 0.662557 0.641926 -vn -0.280313 -0.905667 -0.318033 -vn -0.651021 -0.174718 -0.738639 -vn -0.047487 0.998260 -0.034089 -vn -0.146794 -0.975036 -0.166570 -vn -0.620228 -0.346538 -0.703696 -vn -0.222327 -0.906461 -0.358989 -vn -0.517441 -0.175573 -0.837489 -vn -0.451125 0.513596 -0.729850 -vn -0.492782 -0.348064 -0.797479 -vn -0.492782 0.348064 -0.797479 -vn -0.451125 -0.513565 -0.729850 -vn -0.517441 0.175573 -0.837489 -vn 0.094211 0.919401 0.381848 -vn 0.285684 0.740074 0.608783 -vn -0.391919 -0.666799 -0.633808 -vn -0.661184 0.000000 -0.750175 -vn -0.525559 0.000000 -0.850734 -vn 0.319163 0.676260 0.663900 -vn -0.315226 -0.800653 -0.509445 -vn -0.058168 0.996155 -0.065340 -vn 0.244942 0.685903 0.685171 -vn -0.221473 -0.804743 -0.550707 -vn -0.371807 0.000000 -0.928281 -vn -0.043703 0.994903 -0.090762 -vn -0.116581 -0.975249 -0.187811 -vn -0.156041 -0.908719 -0.387097 -vn -0.365917 -0.178076 -0.913419 -vn -0.318155 0.519089 -0.793268 -vn -0.348125 -0.352550 -0.868618 -vn -0.348125 0.352550 -0.868618 -vn -0.318155 -0.519089 -0.793268 -vn -0.365917 0.178076 -0.913419 -vn 0.166204 0.917997 0.359996 -vn 0.236641 0.738182 0.631703 -vn -0.275857 -0.672170 -0.687063 -vn -0.197211 0.182043 -0.963286 -vn 0.235359 0.912442 0.334666 -vn 0.169317 0.729820 0.662282 -vn -0.147832 -0.680410 -0.717734 -vn -0.200507 0.000000 -0.979675 -vn 0.147557 0.690542 0.708029 -vn -0.118442 -0.811029 -0.572863 -vn -0.033296 0.993622 -0.107547 -vn -0.081942 -0.975890 -0.202216 -vn -0.083438 -0.912137 -0.401227 -vn -0.197211 -0.182043 -0.963286 -vn -0.170873 0.527665 -0.832057 -vn -0.187353 -0.359600 -0.914090 -vn -0.187353 0.359600 -0.914090 -vn -0.170873 -0.527665 -0.832057 -vn -0.012696 -0.368450 -0.929533 -vn -0.012696 0.368450 -0.929533 -vn -0.011902 -0.538347 -0.842616 -vn -0.013123 0.187048 -0.982238 -vn 0.163793 0.919126 0.358226 -vn 0.124119 0.733299 0.668477 -vn -0.010712 -0.690542 -0.723167 -vn -0.013276 0.000000 -0.999908 -vn 0.119846 0.670827 0.731834 -vn -0.009033 -0.818628 -0.574236 -vn -0.004913 0.993805 -0.110752 -vn -0.044038 -0.976836 -0.209235 -vn -0.006806 -0.916257 -0.400464 -vn -0.013123 -0.187048 -0.982238 -vn -0.011902 0.538347 -0.842616 -vn -0.004120 -0.977996 -0.208441 -vn 0.071078 -0.920469 -0.384289 -vn 0.182073 -0.192480 -0.964232 -vn 0.154302 0.549699 -0.820948 -vn 0.171484 -0.378002 -0.909757 -vn 0.171484 0.378002 -0.909757 -vn 0.154302 -0.549699 -0.820948 -vn 0.182073 0.192480 -0.964232 -vn 0.086184 0.925077 0.369793 -vn -0.064669 0.946013 0.317515 -vn 0.131230 -0.701163 -0.700797 -vn 0.185644 0.000000 -0.982604 -vn 0.061098 0.764367 0.641865 -vn 0.103092 -0.826441 -0.553453 -vn 0.023621 0.996399 -0.081210 -vn 0.213416 -0.833277 -0.509964 -vn 0.388104 0.000000 -0.921598 -vn 0.023347 0.660939 0.750053 -vn 0.026734 0.998230 -0.052797 -vn 0.036348 -0.979186 -0.199622 -vn 0.147160 -0.924070 -0.352672 -vn 0.380383 -0.197455 -0.903500 -vn 0.320933 0.559893 -0.763848 -vn 0.357585 -0.386639 -0.850063 -vn 0.357585 0.386639 -0.850063 -vn 0.320933 -0.559893 -0.763848 -vn 0.380383 0.197455 -0.903500 -vn -0.084780 0.949034 0.303476 -vn 0.272164 -0.710532 -0.648854 -vn -0.090457 0.807550 0.582781 -vn -0.091128 0.962859 0.254067 -vn 0.404706 -0.717032 -0.567461 -vn 0.581317 0.000000 -0.813654 -vn -0.194952 0.679647 0.707144 -vn -0.317576 0.829768 0.458876 -vn 0.316660 -0.837947 -0.444411 -vn 0.027711 0.998840 -0.038850 -vn 0.075838 -0.980193 -0.182867 -vn 0.218085 -0.926542 -0.306467 -vn 0.569384 -0.200995 -0.797082 -vn 0.478500 0.567003 -0.670431 -vn 0.534410 -0.392773 -0.748375 -vn 0.534410 0.392773 -0.748375 -vn 0.478500 -0.567003 -0.670431 -vn 0.569384 0.200995 -0.797082 -vn 0.688894 0.395001 -0.607746 -vn 0.616321 -0.569597 -0.543718 -vn 0.734367 0.202277 -0.647877 -vn -0.496139 0.814081 0.301798 -vn 0.520859 -0.719382 -0.459517 -vn 0.749870 0.000000 -0.661550 -vn -0.421827 0.695151 0.582049 -vn -0.596637 0.698996 0.394177 -vn 0.407270 -0.839625 -0.359294 -vn 0.035035 0.998749 -0.034913 -vn 0.112613 -0.980865 -0.158666 -vn 0.280435 -0.927427 -0.247414 -vn 0.734367 -0.202277 -0.647877 -vn 0.616321 0.569597 -0.543718 -vn 0.688894 -0.395001 -0.607746 -vn 0.809168 -0.392834 -0.436903 -vn 0.052553 0.997986 -0.034700 -vn 0.724845 -0.567095 -0.391125 -vn 0.724845 0.567095 -0.391125 -vn 0.613453 -0.717124 -0.330729 -vn 0.809168 0.392834 -0.436903 -vn -0.268136 0.958678 0.094790 -vn -0.612995 0.781426 0.116489 -vn 0.480361 -0.838008 -0.258736 -vn 0.861873 0.201025 -0.465529 -vn -0.699850 0.692343 0.175634 -vn 0.331217 -0.926572 -0.178137 -vn 0.861873 -0.201025 -0.465529 -vn 0.144963 -0.981109 -0.127903 -vn 0.171422 -0.980865 -0.091922 -vn 0.368175 -0.924131 -0.101962 -vn 0.879818 0.000000 -0.475295 -vn 0.943907 -0.197516 -0.264595 -vn 0.078158 0.996704 -0.021363 -vn 0.190832 -0.980193 -0.052400 -vn 0.887997 -0.386761 -0.248665 -vn 0.797845 -0.560015 -0.223029 -vn 0.797845 0.560015 -0.223029 -vn 0.677633 -0.710685 -0.188971 -vn 0.887997 0.386761 -0.248665 -vn -0.388928 0.916501 -0.093387 -vn -0.661489 0.749840 -0.011048 -vn 0.532456 -0.833369 -0.148076 -vn 0.943907 0.197516 -0.264595 -vn -0.682669 0.715537 0.148015 -vn -0.437452 0.870724 -0.224525 -vn -0.430403 0.866634 -0.252235 -vn 0.561846 -0.826563 -0.033082 -vn 0.962828 0.000000 -0.269997 -vn 0.979430 0.192572 -0.060091 -vn -0.628407 0.775262 -0.063478 -vn 0.389996 -0.920530 -0.022462 -vn 0.979430 -0.192572 -0.060091 -vn -0.678762 0.723991 0.122898 -vn 0.202490 -0.979186 -0.011109 -vn 0.924009 -0.378124 -0.056398 -vn 0.075320 0.997131 0.005707 -vn 0.833705 -0.549883 -0.050478 -vn 0.833705 0.549883 -0.050478 -vn 0.711539 -0.701315 -0.042573 -vn 0.924009 0.378124 -0.056398 -vn 0.834376 0.538530 0.117313 -vn 0.715995 -0.690725 0.101138 -vn 0.920560 0.368603 0.128971 -vn -0.399030 0.868129 -0.295114 -vn 0.568407 -0.818751 0.080813 -vn 0.998108 0.000000 -0.061373 -vn 0.972839 0.187139 0.135990 -vn -0.590625 0.791253 -0.158269 -vn 0.396313 -0.916318 0.056887 -vn 0.972839 -0.187139 0.135990 -vn -0.701682 0.700797 -0.128239 -vn 0.206183 -0.978027 0.030183 -vn 0.920560 -0.368603 0.128971 -vn 0.070742 0.997406 0.011719 -vn 0.834376 -0.538530 0.117313 -vn 0.883328 -0.359722 0.300485 -vn 0.082125 0.996277 0.024995 -vn 0.803980 -0.527818 0.273812 -vn 0.803980 0.527818 0.273812 -vn 0.693411 -0.680563 0.236610 -vn 0.883328 0.359722 0.300485 -vn -0.353648 0.861049 -0.365368 -vn 0.553362 -0.811121 0.189276 -vn 0.990356 0.000000 0.138340 -vn 0.930937 0.182104 0.316446 -vn -0.557207 0.784204 -0.272958 -vn 0.387463 -0.912198 0.133030 -vn 0.930937 -0.182104 0.316446 -vn -0.661977 0.674215 -0.327342 -vn 0.202002 -0.976867 0.069918 -vn 0.364360 -0.908750 0.203345 -vn 0.946806 0.000000 0.321757 -vn 0.860256 -0.178137 0.477676 -vn -0.585620 0.668844 -0.457839 -vn 0.190283 -0.975890 0.106662 -vn 0.818018 -0.352641 0.454360 -vn 0.099612 0.993957 0.046022 -vn 0.747002 -0.519181 0.415174 -vn 0.747002 0.519181 0.415174 -vn 0.646901 -0.672262 0.359874 -vn 0.818018 0.352641 0.454360 -vn -0.511399 0.759301 -0.402326 -vn 0.518448 -0.804834 0.288797 -vn 0.860256 0.178137 0.477645 -vn 0.465773 -0.800714 0.376690 -vn 0.874264 0.000000 0.485397 -vn 0.765893 0.175604 0.618519 -vn -0.463149 0.689291 -0.557085 -vn 0.328166 -0.906461 0.265633 -vn 0.765893 -0.175604 0.618519 -vn 0.171667 -0.975249 0.139225 -vn 0.729270 -0.348094 0.589038 -vn 0.099399 0.991485 0.083743 -vn 0.667379 -0.513627 0.539201 -vn 0.667379 0.513627 0.539201 -vn 0.579516 -0.666860 0.468398 -vn 0.729270 0.348094 0.589038 -vn -0.317911 0.862300 -0.394116 -vn -0.449049 0.737602 -0.504227 -vn 0.493789 -0.664998 0.560259 -vn 0.620228 0.346538 0.703696 -vn -0.344127 0.863186 -0.369366 -vn -0.418256 0.689077 -0.591754 -vn 0.397351 -0.799249 0.450850 -vn 0.777978 0.000000 0.628254 -vn 0.651021 0.174718 0.738639 -vn -0.235389 0.724601 -0.647694 -vn 0.280313 -0.905667 0.318033 -vn 0.651021 -0.174718 0.738639 -vn 0.132908 0.984802 0.111545 -vn 0.146794 -0.975036 0.166570 -vn 0.620228 -0.346538 0.703696 -vn 0.568072 -0.511704 0.644520 -vn 0.568072 0.511704 0.644520 -vn 0.451125 0.513565 0.729850 -vn 0.492782 -0.348064 0.797479 -vn 0.492782 0.348064 0.797479 -vn 0.451125 -0.513565 0.729850 -vn 0.517441 0.175573 0.837489 -vn -0.451216 0.846889 -0.281289 -vn -0.526963 0.814142 -0.243812 -vn 0.391919 -0.666799 0.633808 -vn 0.661184 0.000000 0.750175 -vn 0.525559 0.000000 0.850734 -vn -0.366588 0.825587 -0.428938 -vn 0.315226 -0.800653 0.509445 -vn 0.090823 0.976196 0.196814 -vn 0.222327 -0.906461 0.358989 -vn 0.517441 -0.175573 0.837489 -vn 0.371807 0.000000 0.928281 -vn -0.623188 0.634205 -0.457564 -vn 0.116581 -0.975249 0.187811 -vn 0.156041 -0.908719 0.387097 -vn 0.365917 -0.178076 0.913419 -vn 0.318033 0.519303 0.793176 -vn 0.348125 -0.352550 0.868618 -vn 0.348125 0.352550 0.868618 -vn 0.318155 -0.519089 0.793268 -vn 0.365917 0.178076 0.913419 -vn -0.512467 0.624989 -0.588794 -vn -0.520829 0.813623 -0.258309 -vn 0.275857 -0.672170 0.687063 -vn -0.570544 0.649983 -0.501968 -vn 0.221473 -0.804743 0.550707 -vn 0.147832 -0.680410 0.717734 -vn 0.200507 0.000000 0.979675 -vn -0.453413 0.716880 -0.529557 -vn 0.118442 -0.811029 0.572863 -vn -0.000916 0.994751 0.102298 -vn -0.361278 0.629170 -0.688162 -vn 0.081942 -0.975890 0.202246 -vn 0.083438 -0.912137 0.401227 -vn 0.197211 -0.182043 0.963286 -vn 0.170751 0.528184 0.831751 -vn 0.187353 -0.359600 0.914090 -vn 0.187353 0.359600 0.914090 -vn 0.170873 -0.527665 0.832057 -vn 0.197211 0.182043 0.963286 -vn -0.427473 0.859035 -0.281533 -vn 0.011902 -0.538347 0.842616 -vn 0.013123 0.187048 0.982238 -vn -0.241737 0.920347 -0.307382 -vn 0.010712 -0.690542 0.723167 -vn 0.013276 0.000000 0.999908 -vn -0.077853 0.826014 -0.558214 -vn 0.009033 -0.818628 0.574236 -vn 0.016114 0.999054 0.040284 -vn 0.003021 0.999298 0.036927 -vn 0.044038 -0.976836 0.209235 -vn 0.006806 -0.916257 0.400464 -vn 0.013123 -0.187048 0.982238 -vn 0.012024 0.538621 0.842433 -vn 0.012696 -0.368450 0.929533 -vn 0.012696 0.368450 0.929533 -vn -0.154271 0.549730 0.820948 -vn -0.171484 -0.378002 0.909757 -vn -0.171484 0.378002 0.909757 -vn -0.154332 -0.549699 0.820948 -vn -0.182073 0.192480 0.964232 -vn 0.154027 0.811884 -0.563097 -vn -0.131230 -0.701163 0.700797 -vn -0.185675 0.000000 0.982604 -vn -0.054781 0.636555 -0.769250 -vn 0.137852 0.661641 -0.736991 -vn -0.103092 -0.826441 0.553453 -vn 0.002106 0.999268 0.037935 -vn 0.004120 -0.977996 0.208441 -vn -0.071078 -0.920469 0.384289 -vn -0.182073 -0.192480 0.964232 -vn -0.388104 0.000000 0.921598 -vn -0.010132 0.999207 0.038087 -vn -0.036348 -0.979186 0.199622 -vn -0.147160 -0.924070 0.352672 -vn -0.380383 -0.197455 0.903500 -vn -0.320933 0.559893 0.763848 -vn -0.357585 -0.386639 0.850063 -vn -0.357585 0.386639 0.850063 -vn -0.320933 -0.559893 0.763848 -vn -0.380383 0.197455 0.903500 -vn -0.087680 0.942198 -0.323313 -vn 0.161962 0.802240 -0.574541 -vn -0.272134 -0.710532 0.648854 -vn 0.266884 0.674306 -0.688498 -vn -0.213416 -0.833277 0.509964 -vn -0.404706 -0.717032 0.567461 -vn -0.581317 0.000000 0.813654 -vn 0.383526 0.676107 -0.629078 -vn -0.316660 -0.837947 0.444441 -vn -0.134465 0.988800 -0.064394 -vn -0.075838 -0.980193 0.182867 -vn -0.218085 -0.926542 0.306467 -vn -0.569384 -0.200995 0.797082 -vn -0.478500 0.567064 0.670400 -vn -0.534410 -0.392773 0.748375 -vn -0.534410 0.392773 0.748375 -vn -0.478500 -0.567003 0.670431 -vn -0.569384 0.200995 0.797082 -vn 0.022523 0.957884 -0.286233 -vn 0.260842 0.812372 -0.521470 -vn -0.616321 -0.569597 0.543718 -vn -0.734367 0.202277 0.647877 -vn 0.057894 0.960967 -0.270486 -vn 0.049989 0.958129 -0.281869 -vn -0.520829 -0.719382 0.459517 -vn -0.749870 0.000000 0.661550 -vn 0.336131 0.820551 -0.462233 -vn -0.407270 -0.839625 0.359294 -vn 0.446883 0.688650 -0.570971 -vn -0.112613 -0.980865 0.158666 -vn -0.280435 -0.927427 0.247414 -vn -0.734367 -0.202277 0.647877 -vn -0.592700 0.669393 0.447829 -vn -0.688894 -0.395001 0.607746 -vn -0.688894 0.395001 0.607746 -vn -0.159246 0.985504 -0.057985 -vn -0.144963 -0.981109 0.127903 -vn -0.023957 0.937956 -0.345897 -usemtl Body -s 1 -f 5309//3529 5308//3530 5323//3531 -f 5304//3532 5303//3533 5318//3534 -f 5315//3535 5314//3536 5330//3537 -f 5310//3538 5309//3529 5324//3539 -f 5305//3540 5304//3532 5319//3541 -f 5316//3542 5315//3535 5331//3543 -f 5311//3544 5310//3538 5326//3545 -f 5306//3546 5305//3540 5320//3547 -f 5317//3548 5316//3542 5332//3549 -f 5312//3550 5311//3544 5327//3551 -f 5307//3552 5306//3546 5321//3553 -f 5313//3554 5312//3550 5328//3555 -f 5308//3530 5307//3552 5322//3556 -f 5314//3536 5313//3554 5329//3557 -f 5329//3557 5328//3555 5344//3558 -f 5324//3539 5323//3531 5338//3559 -f 5319//3541 5318//3534 5333//3560 -f 5330//3537 5329//3557 5345//3561 -f 5325//3562 5324//3539 5339//3563 -f 5320//3547 5319//3541 5334//3564 -f 5331//3543 5330//3537 5346//3565 -f 5326//3545 5325//3562 5341//3566 -f 5321//3553 5320//3547 5335//3567 -f 5332//3549 5331//3543 5347//3568 -f 5327//3551 5326//3545 5342//3569 -f 5322//3556 5321//3553 5336//3570 -f 5328//3555 5327//3551 5343//3571 -f 5323//3531 5322//3556 5337//3572 -f 5343//3571 5342//3569 5358//3573 -f 5338//3559 5337//3572 5352//3574 -f 5344//3558 5343//3571 5359//3575 -f 5339//3563 5338//3559 5353//3576 -f 5334//3564 5333//3560 5348//3577 -f 5345//3561 5344//3558 5360//3578 -f 5340//3579 5339//3563 5354//3580 -f 5335//3567 5334//3564 5349//3581 -f 5346//3565 5345//3561 5361//3582 -f 5341//3566 5340//3579 5356//3583 -f 5336//3570 5335//3567 5350//3584 -f 5347//3568 5346//3565 5362//3585 -f 5342//3569 5341//3566 5357//3586 -f 5337//3572 5336//3570 5351//3587 -f 5362//3585 5361//3582 5377//3588 -f 5357//3586 5356//3583 5372//3589 -f 5352//3574 5351//3587 5366//3590 -f 5358//3573 5357//3586 5373//3591 -f 5353//3576 5352//3574 5367//3592 -f 5359//3575 5358//3573 5374//3593 -f 5354//3580 5353//3576 5368//3594 -f 5349//3581 5348//3577 5363//3595 -f 5360//3578 5359//3575 5375//3596 -f 5355//3597 5354//3580 5369//3598 -f 5350//3584 5349//3581 5365//3599 -f 5361//3582 5360//3578 5376//3600 -f 5356//3583 5355//3597 5371//3601 -f 5351//3587 5350//3584 5366//3590 -f 5365//3599 5364//3602 5380//3603 -f 5376//3600 5375//3596 5391//3604 -f 5371//3601 5370//3605 5386//3606 -f 5366//3590 5365//3599 5381//3607 -f 5377//3588 5376//3600 5392//3608 -f 5372//3589 5371//3601 5387//3609 -f 5367//3592 5366//3590 5381//3607 -f 5373//3591 5372//3589 5388//3610 -f 5368//3594 5367//3592 5382//3611 -f 5374//3593 5373//3591 5389//3612 -f 5369//3598 5368//3594 5383//3613 -f 5364//3602 5363//3595 5379//3614 -f 5375//3596 5374//3593 5390//3615 -f 5370//3605 5369//3598 5384//3616 -f 5384//3616 5383//3613 5398//3617 -f 5379//3614 5378//3618 5394//3619 -f 5390//3615 5389//3612 5405//3620 -f 5385//3621 5384//3616 5399//3622 -f 5380//3603 5379//3614 5395//3623 -f 5391//3604 5390//3615 5406//3624 -f 5386//3606 5385//3621 5401//3625 -f 5381//3607 5380//3603 5395//3623 -f 5392//3608 5391//3604 5407//3626 -f 5387//3609 5386//3606 5402//3627 -f 5382//3611 5381//3607 5396//3628 -f 5388//3610 5387//3609 5403//3629 -f 5383//3613 5382//3611 5397//3630 -f 5389//3612 5388//3610 5404//3631 -f 5403//3629 5402//3627 5418//3632 -f 5398//3617 5397//3630 5412//3633 -f 5404//3631 5403//3629 5419//3634 -f 5399//3622 5398//3617 5413//3635 -f 5394//3619 5393//3636 5409//3637 -f 5405//3620 5404//3631 5420//3638 -f 5400//3639 5399//3622 5414//3640 -f 5395//3623 5394//3619 5410//3641 -f 5406//3624 5405//3620 5421//3642 -f 5401//3625 5400//3639 5416//3643 -f 5396//3628 5395//3623 5411//3644 -f 5407//3626 5406//3624 5422//3645 -f 5402//3627 5401//3625 5417//3646 -f 5397//3630 5396//3628 5411//3644 -f 5422//3645 5421//3642 5436//3647 -f 5417//3646 5416//3643 5431//3648 -f 5412//3633 5411//3644 5427//3649 -f 5418//3632 5417//3646 5432//3650 -f 5413//3635 5412//3633 5428//3651 -f 5419//3634 5418//3632 5433//3652 -f 5414//3640 5413//3635 5429//3653 -f 5409//3637 5408//3654 5424//3655 -f 5420//3638 5419//3634 5434//3656 -f 5415//3657 5414//3640 5430//3658 -f 5410//3641 5409//3637 5425//3659 -f 5421//3642 5420//3638 5435//3660 -f 5416//3643 5415//3657 5430//3658 -f 5411//3644 5410//3641 5426//3661 -f 5425//3659 5424//3655 5440//3662 -f 5436//3647 5435//3660 5450//3663 -f 5431//3648 5430//3658 5445//3664 -f 5426//3661 5425//3659 5441//3665 -f 5437//3666 5436//3647 5451//3667 -f 5432//3650 5431//3648 5446//3668 -f 5427//3649 5426//3661 5442//3669 -f 5433//3652 5432//3650 5447//3670 -f 5428//3651 5427//3649 5443//3671 -f 5434//3656 5433//3652 5448//3672 -f 5429//3653 5428//3651 5444//3673 -f 5424//3655 5423//3674 5439//3675 -f 5435//3660 5434//3656 5449//3676 -f 5430//3658 5429//3653 5445//3664 -f 5444//3673 5443//3671 5459//3677 -f 5439//3675 5438//3678 5454//3679 -f 5450//3663 5449//3676 5464//3680 -f 5445//3664 5444//3673 5460//3681 -f 5440//3662 5439//3675 5455//3682 -f 5451//3667 5450//3663 5465//3683 -f 5446//3668 5445//3664 5460//3681 -f 5441//3665 5440//3662 5456//3684 -f 5452//3685 5451//3667 5466//3686 -f 5447//3670 5446//3668 5461//3687 -f 5442//3669 5441//3665 5457//3688 -f 5448//3672 5447//3670 5462//3689 -f 5443//3671 5442//3669 5458//3690 -f 5449//3676 5448//3672 5463//3691 -f 5463//3691 5462//3689 5477//3692 -f 5458//3690 5457//3688 5473//3693 -f 5464//3680 5463//3691 5478//3694 -f 5459//3677 5458//3690 5474//3695 -f 5454//3679 5453//3696 5469//3697 -f 5465//3683 5464//3680 5479//3698 -f 5460//3681 5459//3677 5475//3699 -f 5455//3682 5454//3679 5470//3700 -f 5466//3686 5465//3683 5480//3701 -f 5461//3687 5460//3681 5475//3699 -f 5456//3684 5455//3682 5471//3702 -f 5467//3703 5466//3686 5481//3704 -f 5462//3689 5461//3687 5476//3705 -f 5457//3688 5456//3684 5472//3706 -f 5482//3707 5481//3704 5496//3708 -f 5477//3692 5476//3705 5491//3709 -f 5472//3706 5471//3702 5487//3710 -f 5478//3694 5477//3692 5492//3711 -f 5473//3693 5472//3706 5488//3712 -f 5479//3698 5478//3694 5493//3713 -f 5474//3695 5473//3693 5489//3714 -f 5469//3697 5468//3715 5483//3716 -f 5480//3701 5479//3698 5494//3717 -f 5475//3699 5474//3695 5490//3718 -f 5470//3700 5469//3697 5484//3719 -f 5481//3704 5480//3701 5495//3720 -f 5476//3705 5475//3699 5490//3718 -f 5471//3702 5470//3700 5486//3721 -f 5496//3708 5495//3720 5510//3722 -f 5491//3709 5490//3718 5505//3723 -f 5486//3721 5485//3724 5501//3725 -f 5497//3726 5496//3708 5511//3727 -f 5492//3711 5491//3709 5506//3728 -f 5487//3710 5486//3721 5502//3729 -f 5493//3713 5492//3711 5507//3730 -f 5488//3712 5487//3710 5503//3731 -f 5494//3717 5493//3713 5508//3732 -f 5489//3714 5488//3712 5504//3733 -f 5484//3719 5483//3716 5498//3734 -f 5495//3720 5494//3717 5509//3735 -f 5490//3718 5489//3714 5505//3723 -f 5485//3724 5484//3719 5499//3736 -f 5499//3736 5498//3734 5513//3737 -f 5510//3722 5509//3735 5524//3738 -f 5505//3723 5504//3733 5520//3739 -f 5500//3740 5499//3736 5514//3741 -f 5511//3727 5510//3722 5525//3742 -f 5506//3728 5505//3723 5520//3739 -f 5501//3725 5500//3740 5516//3743 -f 5512//3744 5511//3727 5526//3745 -f 5507//3730 5506//3728 5521//3746 -f 5502//3729 5501//3725 5517//3747 -f 5508//3732 5507//3730 5522//3748 -f 5503//3731 5502//3729 5518//3749 -f 5509//3735 5508//3732 5523//3750 -f 5504//3733 5503//3731 5519//3751 -f 5518//3749 5517//3747 5533//3752 -f 5524//3738 5523//3750 5538//3753 -f 5519//3751 5518//3749 5534//3754 -f 5514//3741 5513//3737 5529//3755 -f 5525//3742 5524//3738 5539//3756 -f 5520//3739 5519//3751 5535//3757 -f 5515//3758 5514//3741 5530//3759 -f 5526//3745 5525//3742 5540//3760 -f 5521//3746 5520//3739 5535//3757 -f 5516//3743 5515//3758 5531//3761 -f 5527//3762 5526//3745 5541//3763 -f 5522//3748 5521//3746 5536//3764 -f 5517//3747 5516//3743 5532//3765 -f 5523//3750 5522//3748 5537//3766 -f 5537//3766 5536//3764 5552//3767 -f 5532//3765 5531//3761 5546//3768 -f 5538//3753 5537//3766 5553//3769 -f 5533//3752 5532//3765 5547//3770 -f 5539//3756 5538//3753 5554//3771 -f 5534//3754 5533//3752 5548//3772 -f 5529//3755 5528//3773 5544//3774 -f 5540//3760 5539//3756 5555//3775 -f 5535//3757 5534//3754 5549//3776 -f 5530//3759 5529//3755 5545//3777 -f 5541//3763 5540//3760 5556//3778 -f 5536//3764 5535//3757 5551//3779 -f 5531//3761 5530//3759 5546//3768 -f 5542//3780 5541//3763 5557//3781 -f 5556//3778 5555//3775 5571//3782 -f 5551//3779 5550//3783 5566//3784 -f 5546//3768 5545//3777 5561//3785 -f 5557//3781 5556//3778 5572//3786 -f 5552//3767 5551//3779 5567//3787 -f 5547//3770 5546//3768 5561//3785 -f 5553//3769 5552//3767 5568//3788 -f 5548//3772 5547//3770 5562//3789 -f 5554//3771 5553//3769 5569//3790 -f 5549//3776 5548//3772 5563//3791 -f 5544//3774 5543//3792 5559//3793 -f 5555//3775 5554//3771 5570//3794 -f 5550//3783 5549//3776 5564//3795 -f 5545//3777 5544//3774 5560//3796 -f 5559//3793 5558//3797 5573//3798 -f 5570//3794 5569//3790 5585//3799 -f 5565//3800 5564//3795 5579//3801 -f 5560//3796 5559//3793 5574//3802 -f 5571//3782 5570//3794 5586//3803 -f 5566//3784 5565//3800 5581//3804 -f 5561//3785 5560//3796 5575//3805 -f 5572//3786 5571//3782 5587//3806 -f 5567//3787 5566//3784 5582//3807 -f 5562//3789 5561//3785 5576//3808 -f 5568//3788 5567//3787 5583//3809 -f 5563//3791 5562//3789 5577//3810 -f 5569//3790 5568//3788 5584//3811 -f 5564//3795 5563//3791 5578//3812 -f 5578//3812 5577//3810 5592//3813 -f 5584//3811 5583//3809 5599//3814 -f 5579//3801 5578//3812 5593//3815 -f 5574//3802 5573//3798 5588//3816 -f 5585//3799 5584//3811 5600//3817 -f 5580//3818 5579//3801 5594//3819 -f 5575//3805 5574//3802 5589//3820 -f 5586//3803 5585//3799 5601//3821 -f 5581//3804 5580//3818 5596//3822 -f 5576//3808 5575//3805 5590//3823 -f 5587//3806 5586//3803 5602//3824 -f 5582//3807 5581//3804 5597//3825 -f 5577//3810 5576//3808 5591//3826 -f 5583//3809 5582//3807 5598//3827 -f 5597//3825 5596//3822 5612//3828 -f 5592//3813 5591//3826 5606//3829 -f 5598//3827 5597//3825 5613//3830 -f 5593//3815 5592//3813 5607//3831 -f 5599//3814 5598//3827 5614//3832 -f 5594//3819 5593//3815 5608//3833 -f 5589//3820 5588//3816 5603//3834 -f 5600//3817 5599//3814 5615//3835 -f 5595//3836 5594//3819 5609//3837 -f 5590//3823 5589//3820 5604//3838 -f 5601//3821 5600//3817 5616//3839 -f 5596//3822 5595//3836 5611//3840 -f 5591//3826 5590//3823 5605//3841 -f 5602//3824 5601//3821 5617//3842 -f 5616//3839 5615//3835 5631//3843 -f 5611//3840 5610//3844 5626//3845 -f 5606//3829 5605//3841 5620//3846 -f 5617//3842 5616//3839 5632//3847 -f 5612//3828 5611//3840 5627//3848 -f 5607//3831 5606//3829 5621//3849 -f 5613//3830 5612//3828 5628//3850 -f 5608//3833 5607//3831 5622//3851 -f 5614//3832 5613//3830 5629//3852 -f 5609//3837 5608//3833 5623//3853 -f 5604//3838 5603//3834 5619//3854 -f 5615//3835 5614//3832 5630//3855 -f 5610//3844 5609//3837 5624//3856 -f 5605//3841 5604//3838 5620//3846 -f 5630//3855 5629//3852 5646//3857 -f 5625//3858 5624//3856 5640//3859 -f 5620//3846 5619//3854 5636//3860 -f 5631//3843 5630//3855 5647//3861 -f 5626//3845 5625//3858 5642//3862 -f 5621//3849 5620//3846 5636//3860 -f 5632//3847 5631//3843 5648//3863 -f 5627//3848 5626//3845 5643//3864 -f 5622//3851 5621//3849 5637//3865 -f 5628//3850 5627//3848 5644//3866 -f 5623//3853 5622//3851 5638//3867 -f 5629//3852 5628//3850 5645//3868 -f 5624//3856 5623//3853 5639//3869 -f 5619//3854 5618//3870 5635//3871 -f 5645//3868 5644//3866 5660//3872 -f 5640//3859 5639//3869 5654//3873 -f 5635//3871 5634//3874 5650//3875 -f 5646//3857 5645//3868 5661//3876 -f 5641//3877 5640//3859 5655//3878 -f 5636//3860 5635//3871 5651//3879 -f 5647//3861 5646//3857 5662//3880 -f 5642//3862 5641//3877 5657//3881 -f 5637//3865 5636//3860 5652//3882 -f 5648//3863 5647//3861 5663//3883 -f 5643//3864 5642//3862 5658//3884 -f 5638//3867 5637//3865 5652//3882 -f 5644//3866 5643//3864 5659//3885 -f 5639//3869 5638//3867 5653//3886 -f 5653//3886 5652//3882 5668//3887 -f 5659//3885 5658//3884 5673//3888 -f 5654//3873 5653//3886 5669//3889 -f 5660//3872 5659//3885 5674//3890 -f 5655//3878 5654//3873 5670//3891 -f 5650//3875 5649//3892 5664//3893 -f 5661//3876 5660//3872 5675//3894 -f 5656//3895 5655//3878 5671//3896 -f 5651//3879 5650//3875 5666//3897 -f 5662//3880 5661//3876 5676//3898 -f 5657//3881 5656//3895 5671//3896 -f 5652//3882 5651//3879 5667//3899 -f 5663//3883 5662//3880 5677//3900 -f 5658//3884 5657//3881 5672//3901 -f 5672//3901 5671//3896 5686//3902 -f 5667//3899 5666//3897 5681//3903 -f 5678//3904 5677//3900 5692//3905 -f 5673//3888 5672//3901 5687//3906 -f 5668//3887 5667//3899 5683//3907 -f 5674//3890 5673//3888 5688//3908 -f 5669//3889 5668//3887 5684//3909 -f 5675//3894 5674//3890 5689//3910 -f 5670//3891 5669//3889 5685//3911 -f 5665//3912 5664//3893 5679//3913 -f 5676//3898 5675//3894 5690//3914 -f 5671//3896 5670//3891 5686//3902 -f 5666//3897 5665//3912 5680//3915 -f 5677//3900 5676//3898 5691//3916 -f 5691//3916 5690//3914 5705//3917 -f 5686//3902 5685//3911 5701//3918 -f 5681//3903 5680//3915 5695//3919 -f 5692//3905 5691//3916 5706//3920 -f 5687//3906 5686//3902 5701//3918 -f 5682//3921 5681//3903 5696//3922 -f 5693//3923 5692//3905 5707//3924 -f 5688//3908 5687//3906 5702//3925 -f 5683//3907 5682//3921 5698//3926 -f 5689//3910 5688//3908 5703//3927 -f 5684//3909 5683//3907 5699//3928 -f 5690//3914 5689//3910 5704//3929 -f 5685//3911 5684//3909 5700//3930 -f 5680//3915 5679//3913 5694//3931 -f 5705//3917 5704//3929 5719//3932 -f 5700//3930 5699//3928 5715//3933 -f 5695//3919 5694//3931 5709//3934 -f 5706//3920 5705//3917 5720//3935 -f 5701//3918 5700//3930 5716//3936 -f 5696//3922 5695//3919 5710//3937 -f 5707//3924 5706//3920 5721//3938 -f 5702//3925 5701//3918 5716//3936 -f 5697//3939 5696//3922 5712//3940 -f 5708//3941 5707//3924 5722//3942 -f 5703//3927 5702//3925 5717//3943 -f 5698//3926 5697//3939 5713//3944 -f 5704//3929 5703//3927 5718//3945 -f 5699//3928 5698//3926 5714//3946 -f 5713//3944 5712//3940 5728//3947 -f 5719//3932 5718//3945 5733//3948 -f 5714//3946 5713//3944 5729//3949 -f 5720//3935 5719//3932 5734//3950 -f 5715//3933 5714//3946 5730//3951 -f 5710//3937 5709//3934 5725//3952 -f 5721//3938 5720//3935 5735//3953 -f 5716//3936 5715//3933 5731//3954 -f 5711//3955 5710//3937 5726//3956 -f 5722//3942 5721//3938 5736//3957 -f 5717//3943 5716//3936 5731//3954 -f 5712//3940 5711//3955 5727//3958 -f 5723//3959 5722//3942 5737//3960 -f 5718//3945 5717//3943 5732//3961 -f 5732//3961 5731//3954 5746//3962 -f 5727//3958 5726//3956 5742//3963 -f 5738//3964 5737//3960 5752//3965 -f 5733//3948 5732//3961 5747//3966 -f 5728//3947 5727//3958 5743//3967 -f 5734//3950 5733//3948 5748//3968 -f 5729//3949 5728//3947 5744//3969 -f 5735//3953 5734//3950 5749//3970 -f 5730//3951 5729//3949 5745//3971 -f 5725//3952 5724//3972 5740//3973 -f 5736//3957 5735//3953 5750//3974 -f 5731//3954 5730//3951 5746//3962 -f 5726//3956 5725//3952 5741//3975 -f 5737//3960 5736//3957 5751//3976 -f 5751//3976 5750//3974 5766//3977 -f 5746//3962 5745//3971 5762//3978 -f 5741//3975 5740//3973 5757//3979 -f 5752//3965 5751//3976 5767//3980 -f 5747//3966 5746//3962 5762//3978 -f 5742//3963 5741//3975 5758//3981 -f 5753//3982 5752//3965 5768//3983 -f 5748//3968 5747//3966 5763//3984 -f 5743//3967 5742//3963 5759//3985 -f 5749//3970 5748//3968 5764//3986 -f 5744//3969 5743//3967 5760//3987 -f 5750//3974 5749//3970 5765//3988 -f 5745//3971 5744//3969 5761//3989 -f 5740//3973 5739//3990 5756//3991 -f 5766//3977 5765//3988 5780//3992 -f 5761//3989 5760//3987 5776//3993 -f 5756//3991 5755//3994 5770//3995 -f 5767//3980 5766//3977 5781//3996 -f 5762//3978 5761//3989 5777//3997 -f 5757//3979 5756//3991 5771//3998 -f 5768//3983 5767//3980 5782//3999 -f 5763//3984 5762//3978 5777//3997 -f 5758//3981 5757//3979 5772//4000 -f 5769//4001 5768//3983 5783//4002 -f 5764//3986 5763//3984 5778//4003 -f 5759//3985 5758//3981 5774//4004 -f 5765//3988 5764//3986 5779//4005 -f 5760//3987 5759//3985 5775//4006 -f 5633//364 5317//3548 5332//3549 -f 5303//3533 5754//4007 5318//3534 -f 5633//364 5332//3549 5347//3568 -f 5318//3534 5754//4007 5333//3560 -f 5633//364 5347//3568 5362//3585 -f 5333//3560 5754//4007 5348//3577 -f 5633//364 5362//3585 5377//3588 -f 5348//3577 5754//4007 5363//3595 -f 5633//364 5377//3588 5392//3608 -f 5363//3595 5754//4007 5378//3618 -f 5633//364 5392//3608 5407//3626 -f 5378//3618 5754//4007 5393//3636 -f 5393//3636 5754//4007 5408//3654 -f 5633//364 5407//3626 5422//3645 -f 5633//364 5422//3645 5437//3666 -f 5408//3654 5754//4007 5423//3674 -f 5633//364 5437//3666 5452//3685 -f 5423//3674 5754//4007 5438//3678 -f 5633//364 5452//3685 5467//3703 -f 5438//3678 5754//4007 5453//3696 -f 5453//3696 5754//4007 5468//3715 -f 5633//364 5467//3703 5482//3707 -f 5633//364 5482//3707 5497//3726 -f 5468//3715 5754//4007 5483//3716 -f 5633//364 5497//3726 5512//3744 -f 5483//3716 5754//4007 5498//3734 -f 5633//364 5512//3744 5527//3762 -f 5498//3734 5754//4007 5513//3737 -f 5513//3737 5754//4007 5528//3773 -f 5633//364 5527//3762 5542//3780 -f 5633//364 5542//3780 5557//3781 -f 5528//3773 5754//4007 5543//3792 -f 5633//364 5557//3781 5572//3786 -f 5543//3792 5754//4007 5558//3797 -f 5633//364 5572//3786 5587//3806 -f 5558//3797 5754//4007 5573//3798 -f 5573//3798 5754//4007 5588//3816 -f 5633//364 5587//3806 5602//3824 -f 5633//364 5602//3824 5617//3842 -f 5588//3816 5754//4007 5603//3834 -f 5633//364 5617//3842 5632//3847 -f 5603//3834 5754//4007 5618//3870 -f 5633//364 5632//3847 5648//3863 -f 5618//3870 5754//4007 5634//3874 -f 5634//3874 5754//4007 5649//3892 -f 5633//364 5648//3863 5663//3883 -f 5633//364 5663//3883 5678//3904 -f 5649//3892 5754//4007 5664//3893 -f 5633//364 5678//3904 5693//3923 -f 5664//3893 5754//4007 5679//3913 -f 5633//364 5693//3923 5708//3941 -f 5679//3913 5754//4007 5694//3931 -f 5694//3931 5754//4007 5709//3934 -f 5633//364 5708//3941 5723//3959 -f 5633//364 5723//3959 5738//3964 -f 5709//3934 5754//4007 5724//3972 -f 5633//364 5738//3964 5753//3982 -f 5724//3972 5754//4007 5739//3990 -f 5633//364 5753//3982 5769//4001 -f 5739//3990 5754//4007 5755//3994 -f 5633//364 5769//4001 5784//4008 -f 5755//3994 5754//4007 5770//3995 -f 5633//364 5784//4008 5317//3548 -f 5780//3992 5779//4005 5313//3554 -f 5775//4006 5774//4004 5307//3552 -f 5770//3995 5754//4007 5303//3533 -f 5781//3996 5780//3992 5314//3536 -f 5776//3993 5775//4006 5308//3530 -f 5771//3998 5770//3995 5303//3533 -f 5782//3999 5781//3996 5315//3535 -f 5777//3997 5776//3993 5309//3529 -f 5772//4000 5771//3998 5304//3532 -f 5783//4002 5782//3999 5316//3542 -f 5778//4003 5777//3997 5311//3544 -f 5773//4009 5772//4000 5305//3540 -f 5784//4008 5783//4002 5317//3548 -f 5779//4005 5778//4003 5312//3550 -f 5774//4004 5773//4009 5306//3546 -f 5324//3539 5309//3529 5323//3531 -f 5319//3541 5304//3532 5318//3534 -f 5314//3536 5329//3557 5330//3537 -f 5325//3562 5310//3538 5324//3539 -f 5320//3547 5305//3540 5319//3541 -f 5315//3535 5330//3537 5331//3543 -f 5310//3538 5325//3562 5326//3545 -f 5321//3553 5306//3546 5320//3547 -f 5316//3542 5331//3543 5332//3549 -f 5311//3544 5326//3545 5327//3551 -f 5322//3556 5307//3552 5321//3553 -f 5312//3550 5327//3551 5328//3555 -f 5323//3531 5308//3530 5322//3556 -f 5313//3554 5328//3555 5329//3557 -f 5328//3555 5343//3571 5344//3558 -f 5339//3563 5324//3539 5338//3559 -f 5334//3564 5319//3541 5333//3560 -f 5329//3557 5344//3558 5345//3561 -f 5340//3579 5325//3562 5339//3563 -f 5335//3567 5320//3547 5334//3564 -f 5330//3537 5345//3561 5346//3565 -f 5325//3562 5340//3579 5341//3566 -f 5336//3570 5321//3553 5335//3567 -f 5331//3543 5346//3565 5347//3568 -f 5326//3545 5341//3566 5342//3569 -f 5337//3572 5322//3556 5336//3570 -f 5327//3551 5342//3569 5343//3571 -f 5338//3559 5323//3531 5337//3572 -f 5342//3569 5357//3586 5358//3573 -f 5353//3576 5338//3559 5352//3574 -f 5343//3571 5358//3573 5359//3575 -f 5354//3580 5339//3563 5353//3576 -f 5349//3581 5334//3564 5348//3577 -f 5344//3558 5359//3575 5360//3578 -f 5355//3597 5340//3579 5354//3580 -f 5350//3584 5335//3567 5349//3581 -f 5345//3561 5360//3578 5361//3582 -f 5340//3579 5355//3597 5356//3583 -f 5351//3587 5336//3570 5350//3584 -f 5346//3565 5361//3582 5362//3585 -f 5341//3566 5356//3583 5357//3586 -f 5352//3574 5337//3572 5351//3587 -f 5361//3582 5376//3600 5377//3588 -f 5356//3583 5371//3601 5372//3589 -f 5367//3592 5352//3574 5366//3590 -f 5357//3586 5372//3589 5373//3591 -f 5368//3594 5353//3576 5367//3592 -f 5358//3573 5373//3591 5374//3593 -f 5369//3598 5354//3580 5368//3594 -f 5364//3602 5349//3581 5363//3595 -f 5359//3575 5374//3593 5375//3596 -f 5370//3605 5355//3597 5369//3598 -f 5349//3581 5364//3602 5365//3599 -f 5360//3578 5375//3596 5376//3600 -f 5355//3597 5370//3605 5371//3601 -f 5350//3584 5365//3599 5366//3590 -f 5364//3602 5379//3614 5380//3603 -f 5375//3596 5390//3615 5391//3604 -f 5370//3605 5385//3621 5386//3606 -f 5365//3599 5380//3603 5381//3607 -f 5376//3600 5391//3604 5392//3608 -f 5371//3601 5386//3606 5387//3609 -f 5382//3611 5367//3592 5381//3607 -f 5372//3589 5387//3609 5388//3610 -f 5383//3613 5368//3594 5382//3611 -f 5373//3591 5388//3610 5389//3612 -f 5384//3616 5369//3598 5383//3613 -f 5363//3595 5378//3618 5379//3614 -f 5374//3593 5389//3612 5390//3615 -f 5385//3621 5370//3605 5384//3616 -f 5399//3622 5384//3616 5398//3617 -f 5378//3618 5393//3636 5394//3619 -f 5389//3612 5404//3631 5405//3620 -f 5400//3639 5385//3621 5399//3622 -f 5379//3614 5394//3619 5395//3623 -f 5390//3615 5405//3620 5406//3624 -f 5385//3621 5400//3639 5401//3625 -f 5396//3628 5381//3607 5395//3623 -f 5391//3604 5406//3624 5407//3626 -f 5386//3606 5401//3625 5402//3627 -f 5397//3630 5382//3611 5396//3628 -f 5387//3609 5402//3627 5403//3629 -f 5398//3617 5383//3613 5397//3630 -f 5388//3610 5403//3629 5404//3631 -f 5402//3627 5417//3646 5418//3632 -f 5413//3635 5398//3617 5412//3633 -f 5403//3629 5418//3632 5419//3634 -f 5414//3640 5399//3622 5413//3635 -f 5393//3636 5408//3654 5409//3637 -f 5404//3631 5419//3634 5420//3638 -f 5415//3657 5400//3639 5414//3640 -f 5394//3619 5409//3637 5410//3641 -f 5405//3620 5420//3638 5421//3642 -f 5400//3639 5415//3657 5416//3643 -f 5395//3623 5410//3641 5411//3644 -f 5406//3624 5421//3642 5422//3645 -f 5401//3625 5416//3643 5417//3646 -f 5412//3633 5397//3630 5411//3644 -f 5437//3666 5422//3645 5436//3647 -f 5432//3650 5417//3646 5431//3648 -f 5411//3644 5426//3661 5427//3649 -f 5433//3652 5418//3632 5432//3650 -f 5412//3633 5427//3649 5428//3651 -f 5434//3656 5419//3634 5433//3652 -f 5413//3635 5428//3651 5429//3653 -f 5408//3654 5423//3674 5424//3655 -f 5435//3660 5420//3638 5434//3656 -f 5414//3640 5429//3653 5430//3658 -f 5409//3637 5424//3655 5425//3659 -f 5436//3647 5421//3642 5435//3660 -f 5431//3648 5416//3643 5430//3658 -f 5410//3641 5425//3659 5426//3661 -f 5424//3655 5439//3675 5440//3662 -f 5451//3667 5436//3647 5450//3663 -f 5446//3668 5431//3648 5445//3664 -f 5425//3659 5440//3662 5441//3665 -f 5452//3685 5437//3666 5451//3667 -f 5447//3670 5432//3650 5446//3668 -f 5426//3661 5441//3665 5442//3669 -f 5448//3672 5433//3652 5447//3670 -f 5427//3649 5442//3669 5443//3671 -f 5449//3676 5434//3656 5448//3672 -f 5428//3651 5443//3671 5444//3673 -f 5423//3674 5438//3678 5439//3675 -f 5450//3663 5435//3660 5449//3676 -f 5429//3653 5444//3673 5445//3664 -f 5443//3671 5458//3690 5459//3677 -f 5438//3678 5453//3696 5454//3679 -f 5465//3683 5450//3663 5464//3680 -f 5444//3673 5459//3677 5460//3681 -f 5439//3675 5454//3679 5455//3682 -f 5466//3686 5451//3667 5465//3683 -f 5461//3687 5446//3668 5460//3681 -f 5440//3662 5455//3682 5456//3684 -f 5467//3703 5452//3685 5466//3686 -f 5462//3689 5447//3670 5461//3687 -f 5441//3665 5456//3684 5457//3688 -f 5463//3691 5448//3672 5462//3689 -f 5442//3669 5457//3688 5458//3690 -f 5464//3680 5449//3676 5463//3691 -f 5478//3694 5463//3691 5477//3692 -f 5457//3688 5472//3706 5473//3693 -f 5479//3698 5464//3680 5478//3694 -f 5458//3690 5473//3693 5474//3695 -f 5453//3696 5468//3715 5469//3697 -f 5480//3701 5465//3683 5479//3698 -f 5459//3677 5474//3695 5475//3699 -f 5454//3679 5469//3697 5470//3700 -f 5481//3704 5466//3686 5480//3701 -f 5476//3705 5461//3687 5475//3699 -f 5455//3682 5470//3700 5471//3702 -f 5482//3707 5467//3703 5481//3704 -f 5477//3692 5462//3689 5476//3705 -f 5456//3684 5471//3702 5472//3706 -f 5497//3726 5482//3707 5496//3708 -f 5492//3711 5477//3692 5491//3709 -f 5471//3702 5486//3721 5487//3710 -f 5493//3713 5478//3694 5492//3711 -f 5472//3706 5487//3710 5488//3712 -f 5494//3717 5479//3698 5493//3713 -f 5473//3693 5488//3712 5489//3714 -f 5484//3719 5469//3697 5483//3716 -f 5495//3720 5480//3701 5494//3717 -f 5474//3695 5489//3714 5490//3718 -f 5485//3724 5470//3700 5484//3719 -f 5496//3708 5481//3704 5495//3720 -f 5491//3709 5476//3705 5490//3718 -f 5470//3700 5485//3724 5486//3721 -f 5511//3727 5496//3708 5510//3722 -f 5506//3728 5491//3709 5505//3723 -f 5485//3724 5500//3740 5501//3725 -f 5512//3744 5497//3726 5511//3727 -f 5507//3730 5492//3711 5506//3728 -f 5486//3721 5501//3725 5502//3729 -f 5508//3732 5493//3713 5507//3730 -f 5487//3710 5502//3729 5503//3731 -f 5509//3735 5494//3717 5508//3732 -f 5488//3712 5503//3731 5504//3733 -f 5499//3736 5484//3719 5498//3734 -f 5510//3722 5495//3720 5509//3735 -f 5489//3714 5504//3733 5505//3723 -f 5500//3740 5485//3724 5499//3736 -f 5514//3741 5499//3736 5513//3737 -f 5525//3742 5510//3722 5524//3738 -f 5504//3733 5519//3751 5520//3739 -f 5515//3758 5500//3740 5514//3741 -f 5526//3745 5511//3727 5525//3742 -f 5521//3746 5506//3728 5520//3739 -f 5500//3740 5515//3758 5516//3743 -f 5527//3762 5512//3744 5526//3745 -f 5522//3748 5507//3730 5521//3746 -f 5501//3725 5516//3743 5517//3747 -f 5523//3750 5508//3732 5522//3748 -f 5502//3729 5517//3747 5518//3749 -f 5524//3738 5509//3735 5523//3750 -f 5503//3731 5518//3749 5519//3751 -f 5517//3747 5532//3765 5533//3752 -f 5539//3756 5524//3738 5538//3753 -f 5518//3749 5533//3752 5534//3754 -f 5513//3737 5528//3773 5529//3755 -f 5540//3760 5525//3742 5539//3756 -f 5519//3751 5534//3754 5535//3757 -f 5514//3741 5529//3755 5530//3759 -f 5541//3763 5526//3745 5540//3760 -f 5536//3764 5521//3746 5535//3757 -f 5515//3758 5530//3759 5531//3761 -f 5542//3780 5527//3762 5541//3763 -f 5537//3766 5522//3748 5536//3764 -f 5516//3743 5531//3761 5532//3765 -f 5538//3753 5523//3750 5537//3766 -f 5536//3764 5551//3779 5552//3767 -f 5547//3770 5532//3765 5546//3768 -f 5537//3766 5552//3767 5553//3769 -f 5548//3772 5533//3752 5547//3770 -f 5538//3753 5553//3769 5554//3771 -f 5549//3776 5534//3754 5548//3772 -f 5528//3773 5543//3792 5544//3774 -f 5539//3756 5554//3771 5555//3775 -f 5550//3783 5535//3757 5549//3776 -f 5529//3755 5544//3774 5545//3777 -f 5540//3760 5555//3775 5556//3778 -f 5535//3757 5550//3783 5551//3779 -f 5530//3759 5545//3777 5546//3768 -f 5541//3763 5556//3778 5557//3781 -f 5555//3775 5570//3794 5571//3782 -f 5550//3783 5565//3800 5566//3784 -f 5545//3777 5560//3796 5561//3785 -f 5556//3778 5571//3782 5572//3786 -f 5551//3779 5566//3784 5567//3787 -f 5562//3789 5547//3770 5561//3785 -f 5552//3767 5567//3787 5568//3788 -f 5563//3791 5548//3772 5562//3789 -f 5553//3769 5568//3788 5569//3790 -f 5564//3795 5549//3776 5563//3791 -f 5543//3792 5558//3797 5559//3793 -f 5554//3771 5569//3790 5570//3794 -f 5565//3800 5550//3783 5564//3795 -f 5544//3774 5559//3793 5560//3796 -f 5574//3802 5559//3793 5573//3798 -f 5569//3790 5584//3811 5585//3799 -f 5580//3818 5565//3800 5579//3801 -f 5575//3805 5560//3796 5574//3802 -f 5570//3794 5585//3799 5586//3803 -f 5565//3800 5580//3818 5581//3804 -f 5576//3808 5561//3785 5575//3805 -f 5571//3782 5586//3803 5587//3806 -f 5566//3784 5581//3804 5582//3807 -f 5577//3810 5562//3789 5576//3808 -f 5567//3787 5582//3807 5583//3809 -f 5578//3812 5563//3791 5577//3810 -f 5568//3788 5583//3809 5584//3811 -f 5579//3801 5564//3795 5578//3812 -f 5593//3815 5578//3812 5592//3813 -f 5583//3809 5598//3827 5599//3814 -f 5594//3819 5579//3801 5593//3815 -f 5589//3820 5574//3802 5588//3816 -f 5584//3811 5599//3814 5600//3817 -f 5595//3836 5580//3818 5594//3819 -f 5590//3823 5575//3805 5589//3820 -f 5585//3799 5600//3817 5601//3821 -f 5580//3818 5595//3836 5596//3822 -f 5591//3826 5576//3808 5590//3823 -f 5586//3803 5601//3821 5602//3824 -f 5581//3804 5596//3822 5597//3825 -f 5592//3813 5577//3810 5591//3826 -f 5582//3807 5597//3825 5598//3827 -f 5596//3822 5611//3840 5612//3828 -f 5607//3831 5592//3813 5606//3829 -f 5597//3825 5612//3828 5613//3830 -f 5608//3833 5593//3815 5607//3831 -f 5598//3827 5613//3830 5614//3832 -f 5609//3837 5594//3819 5608//3833 -f 5604//3838 5589//3820 5603//3834 -f 5599//3814 5614//3832 5615//3835 -f 5610//3844 5595//3836 5609//3837 -f 5605//3841 5590//3823 5604//3838 -f 5600//3817 5615//3835 5616//3839 -f 5595//3836 5610//3844 5611//3840 -f 5606//3829 5591//3826 5605//3841 -f 5601//3821 5616//3839 5617//3842 -f 5615//3835 5630//3855 5631//3843 -f 5610//3844 5625//3858 5626//3845 -f 5621//3849 5606//3829 5620//3846 -f 5616//3839 5631//3843 5632//3847 -f 5611//3840 5626//3845 5627//3848 -f 5622//3851 5607//3831 5621//3849 -f 5612//3828 5627//3848 5628//3850 -f 5623//3853 5608//3833 5622//3851 -f 5613//3830 5628//3850 5629//3852 -f 5624//3856 5609//3837 5623//3853 -f 5603//3834 5618//3870 5619//3854 -f 5614//3832 5629//3852 5630//3855 -f 5625//3858 5610//3844 5624//3856 -f 5604//3838 5619//3854 5620//3846 -f 5629//3852 5645//3868 5646//3857 -f 5641//3877 5625//3858 5640//3859 -f 5619//3854 5635//3871 5636//3860 -f 5630//3855 5646//3857 5647//3861 -f 5625//3858 5641//3877 5642//3862 -f 5637//3865 5621//3849 5636//3860 -f 5631//3843 5647//3861 5648//3863 -f 5626//3845 5642//3862 5643//3864 -f 5638//3867 5622//3851 5637//3865 -f 5627//3848 5643//3864 5644//3866 -f 5639//3869 5623//3853 5638//3867 -f 5628//3850 5644//3866 5645//3868 -f 5640//3859 5624//3856 5639//3869 -f 5618//3870 5634//3874 5635//3871 -f 5644//3866 5659//3885 5660//3872 -f 5655//3878 5640//3859 5654//3873 -f 5634//3874 5649//3892 5650//3875 -f 5645//3868 5660//3872 5661//3876 -f 5656//3895 5641//3877 5655//3878 -f 5635//3871 5650//3875 5651//3879 -f 5646//3857 5661//3876 5662//3880 -f 5641//3877 5656//3895 5657//3881 -f 5636//3860 5651//3879 5652//3882 -f 5647//3861 5662//3880 5663//3883 -f 5642//3862 5657//3881 5658//3884 -f 5653//3886 5638//3867 5652//3882 -f 5643//3864 5658//3884 5659//3885 -f 5654//3873 5639//3869 5653//3886 -f 5652//3882 5667//3899 5668//3887 -f 5674//3890 5659//3885 5673//3888 -f 5653//3886 5668//3887 5669//3889 -f 5675//3894 5660//3872 5674//3890 -f 5654//3873 5669//3889 5670//3891 -f 5665//3912 5650//3875 5664//3893 -f 5676//3898 5661//3876 5675//3894 -f 5655//3878 5670//3891 5671//3896 -f 5650//3875 5665//3912 5666//3897 -f 5677//3900 5662//3880 5676//3898 -f 5672//3901 5657//3881 5671//3896 -f 5651//3879 5666//3897 5667//3899 -f 5678//3904 5663//3883 5677//3900 -f 5673//3888 5658//3884 5672//3901 -f 5687//3906 5672//3901 5686//3902 -f 5682//3921 5667//3899 5681//3903 -f 5693//3923 5678//3904 5692//3905 -f 5688//3908 5673//3888 5687//3906 -f 5667//3899 5682//3921 5683//3907 -f 5689//3910 5674//3890 5688//3908 -f 5668//3887 5683//3907 5684//3909 -f 5690//3914 5675//3894 5689//3910 -f 5669//3889 5684//3909 5685//3911 -f 5680//3915 5665//3912 5679//3913 -f 5691//3916 5676//3898 5690//3914 -f 5670//3891 5685//3911 5686//3902 -f 5681//3903 5666//3897 5680//3915 -f 5692//3905 5677//3900 5691//3916 -f 5706//3920 5691//3916 5705//3917 -f 5685//3911 5700//3930 5701//3918 -f 5696//3922 5681//3903 5695//3919 -f 5707//3924 5692//3905 5706//3920 -f 5702//3925 5687//3906 5701//3918 -f 5697//3939 5682//3921 5696//3922 -f 5708//3941 5693//3923 5707//3924 -f 5703//3927 5688//3908 5702//3925 -f 5682//3921 5697//3939 5698//3926 -f 5704//3929 5689//3910 5703//3927 -f 5683//3907 5698//3926 5699//3928 -f 5705//3917 5690//3914 5704//3929 -f 5684//3909 5699//3928 5700//3930 -f 5695//3919 5680//3915 5694//3931 -f 5720//3935 5705//3917 5719//3932 -f 5699//3928 5714//3946 5715//3933 -f 5710//3937 5695//3919 5709//3934 -f 5721//3938 5706//3920 5720//3935 -f 5700//3930 5715//3933 5716//3936 -f 5711//3955 5696//3922 5710//3937 -f 5722//3942 5707//3924 5721//3938 -f 5717//3943 5702//3925 5716//3936 -f 5696//3922 5711//3955 5712//3940 -f 5723//3959 5708//3941 5722//3942 -f 5718//3945 5703//3927 5717//3943 -f 5697//3939 5712//3940 5713//3944 -f 5719//3932 5704//3929 5718//3945 -f 5698//3926 5713//3944 5714//3946 -f 5712//3940 5727//3958 5728//3947 -f 5734//3950 5719//3932 5733//3948 -f 5713//3944 5728//3947 5729//3949 -f 5735//3953 5720//3935 5734//3950 -f 5714//3946 5729//3949 5730//3951 -f 5709//3934 5724//3972 5725//3952 -f 5736//3957 5721//3938 5735//3953 -f 5715//3933 5730//3951 5731//3954 -f 5710//3937 5725//3952 5726//3956 -f 5737//3960 5722//3942 5736//3957 -f 5732//3961 5717//3943 5731//3954 -f 5711//3955 5726//3956 5727//3958 -f 5738//3964 5723//3959 5737//3960 -f 5733//3948 5718//3945 5732//3961 -f 5747//3966 5732//3961 5746//3962 -f 5726//3956 5741//3975 5742//3963 -f 5753//3982 5738//3964 5752//3965 -f 5748//3968 5733//3948 5747//3966 -f 5727//3958 5742//3963 5743//3967 -f 5749//3970 5734//3950 5748//3968 -f 5728//3947 5743//3967 5744//3969 -f 5750//3974 5735//3953 5749//3970 -f 5729//3949 5744//3969 5745//3971 -f 5724//3972 5739//3990 5740//3973 -f 5751//3976 5736//3957 5750//3974 -f 5730//3951 5745//3971 5746//3962 -f 5725//3952 5740//3973 5741//3975 -f 5752//3965 5737//3960 5751//3976 -f 5767//3980 5751//3976 5766//3977 -f 5745//3971 5761//3989 5762//3978 -f 5740//3973 5756//3991 5757//3979 -f 5768//3983 5752//3965 5767//3980 -f 5763//3984 5747//3966 5762//3978 -f 5741//3975 5757//3979 5758//3981 -f 5769//4001 5753//3982 5768//3983 -f 5764//3986 5748//3968 5763//3984 -f 5742//3963 5758//3981 5759//3985 -f 5765//3988 5749//3970 5764//3986 -f 5743//3967 5759//3985 5760//3987 -f 5766//3977 5750//3974 5765//3988 -f 5744//3969 5760//3987 5761//3989 -f 5739//3990 5755//3994 5756//3991 -f 5781//3996 5766//3977 5780//3992 -f 5760//3987 5775//4006 5776//3993 -f 5771//3998 5756//3991 5770//3995 -f 5782//3999 5767//3980 5781//3996 -f 5761//3989 5776//3993 5777//3997 -f 5772//4000 5757//3979 5771//3998 -f 5783//4002 5768//3983 5782//3999 -f 5778//4003 5763//3984 5777//3997 -f 5773//4009 5758//3981 5772//4000 -f 5784//4008 5769//4001 5783//4002 -f 5779//4005 5764//3986 5778//4003 -f 5758//3981 5773//4009 5774//4004 -f 5780//3992 5765//3988 5779//4005 -f 5759//3985 5774//4004 5775//4006 -f 5779//4005 5312//3550 5313//3554 -f 5308//3530 5775//4006 5307//3552 -f 5780//3992 5313//3554 5314//3536 -f 5309//3529 5776//3993 5308//3530 -f 5304//3532 5771//3998 5303//3533 -f 5781//3996 5314//3536 5315//3535 -f 5310//3538 5777//3997 5309//3529 -f 5305//3540 5772//4000 5304//3532 -f 5782//3999 5315//3535 5316//3542 -f 5777//3997 5310//3538 5311//3544 -f 5306//3546 5773//4009 5305//3540 -f 5783//4002 5316//3542 5317//3548 -f 5778//4003 5311//3544 5312//3550 -f 5307//3552 5774//4004 5306//3546 -o Ear_L_Sphere.007 -v -0.915017 0.106478 0.822725 -v -0.944167 0.121570 0.840173 -v -0.974060 0.150175 0.857679 -v -0.996357 0.185345 0.870613 -v -1.023624 0.171071 0.887158 -v -1.038620 0.139410 0.896437 -v -1.047854 0.105055 0.902151 -v -1.050972 0.069327 0.904081 -v -1.047854 0.033599 0.902151 -v -1.038620 -0.000755 0.896437 -v -1.023624 -0.032417 0.887158 -v -1.003443 -0.060169 0.874670 -v -0.978852 -0.082944 0.859453 -v -0.950796 -0.099867 0.842093 -v -0.920354 -0.110289 0.823256 -v -0.917142 0.105813 0.817309 -v -0.948467 0.119916 0.829345 -v -0.980546 0.149639 0.841337 -v -1.003465 0.185802 0.850238 -v -1.033723 0.171071 0.861992 -v -1.049842 0.139410 0.868475 -v -1.059768 0.105055 0.872466 -v -1.063119 0.069327 0.873814 -v -1.059768 0.033599 0.872466 -v -1.049842 -0.000755 0.868475 -v -1.033723 -0.032417 0.861992 -v -1.012032 -0.060169 0.853268 -v -0.985600 -0.082944 0.842638 -v -0.955444 -0.099867 0.830510 -v -0.922723 -0.110289 0.817351 -v -0.918009 0.105364 0.811327 -v -0.949964 0.118024 0.817446 -v -0.981711 0.143600 0.823584 -v -1.006807 0.178160 0.828467 -v -1.038250 0.171071 0.834585 -v -1.054871 0.139410 0.838021 -v -1.065107 0.105055 0.840137 -v -1.068563 0.069327 0.840852 -v -1.065107 0.033599 0.840137 -v -1.054871 -0.000755 0.838021 -v -1.038250 -0.032417 0.834585 -v -1.015881 -0.060169 0.829960 -v -0.988624 -0.082944 0.824325 -v -0.957527 -0.099867 0.817896 -v -0.923785 -0.110289 0.810920 -v -0.917793 0.105605 0.805026 -v -0.949557 0.118435 0.804940 -v -0.981430 0.144211 0.804957 -v -1.006395 0.178959 0.805648 -v -1.037029 0.171071 0.805989 -v -1.053515 0.139410 0.806248 -v -1.063667 0.105055 0.806407 -v -1.067095 0.069327 0.806460 -v -1.063667 0.033599 0.806407 -v -1.053515 -0.000755 0.806248 -v -1.037029 -0.032417 0.805989 -v -1.014843 -0.060169 0.805642 -v -0.987808 -0.082944 0.805218 -v -0.956966 -0.099867 0.804735 -v -0.923499 -0.110289 0.804211 -v -0.916416 0.106636 0.798779 -v -0.946809 0.121198 0.792549 -v -0.978086 0.148035 0.786387 -v -1.002990 0.184085 0.782334 -v -1.030107 0.171071 0.777305 -v -1.045824 0.139410 0.774375 -v -1.055502 0.105055 0.772571 -v -1.058770 0.069327 0.771962 -v -1.055502 0.033599 0.772571 -v -1.045824 -0.000755 0.774375 -v -1.030107 -0.032417 0.777305 -v -1.008956 -0.060169 0.781247 -v -0.983184 -0.082944 0.786052 -v -0.953780 -0.099867 0.791533 -v -0.921875 -0.110289 0.797480 -v -0.913859 0.108151 0.792925 -v -0.941519 0.124970 0.780992 -v -0.969813 0.155093 0.769376 -v -0.998435 0.198761 0.757718 -v -1.017752 0.171071 0.749633 -v -1.032095 0.139410 0.743628 -v -1.040928 0.105055 0.739930 -v -1.043910 0.069327 0.738681 -v -1.040928 0.033599 0.739930 -v -1.032095 -0.000755 0.743628 -v -1.017752 -0.032417 0.749633 -v -0.998449 -0.060169 0.757715 -v -0.974928 -0.082944 0.767562 -v -0.948093 -0.099867 0.778797 -v -0.918976 -0.110289 0.790988 -v -0.910332 0.109658 0.787636 -v -0.934346 0.128011 0.770420 -v -0.958936 0.157463 0.753273 -v -0.983723 0.198822 0.735948 -v -1.000436 0.171071 0.724038 -v -1.012855 0.139410 0.715188 -v -1.020503 0.105055 0.709738 -v -1.023085 0.069327 0.707898 -v -1.020503 0.033599 0.709738 -v -1.012855 -0.000755 0.715188 -v -1.000436 -0.032417 0.724038 -v -0.983723 -0.060169 0.735948 -v -0.963358 -0.082944 0.750460 -v -0.940124 -0.099867 0.767017 -v -0.914913 -0.110289 0.784982 -v -0.906016 0.111060 0.783036 -v -0.925554 0.130997 0.761135 -v -0.945557 0.162077 0.739272 -v -0.965346 0.198823 0.716783 -v -0.978827 0.171071 0.701502 -v -0.988844 0.139410 0.690148 -v -0.995013 0.105055 0.683156 -v -0.997096 0.069327 0.680795 -v -0.995013 0.033599 0.683156 -v -0.988844 -0.000755 0.690148 -v -0.978827 -0.032417 0.701502 -v -0.965346 -0.060169 0.716783 -v -0.948919 -0.082944 0.735402 -v -0.930178 -0.099867 0.756645 -v -0.909843 -0.110289 0.779695 -v -0.901069 0.112214 0.779233 -v -0.915486 0.133416 0.753375 -v -0.930270 0.166676 0.727294 -v -0.944022 0.198821 0.700958 -v -0.953753 0.171071 0.682893 -v -0.960984 0.139410 0.669471 -v -0.965437 0.105055 0.661205 -v -0.966940 0.069327 0.658414 -v -0.965437 0.033599 0.661205 -v -0.960984 -0.000755 0.669471 -v -0.953753 -0.032417 0.682893 -v -0.944023 -0.060169 0.700957 -v -0.932166 -0.082944 0.722968 -v -0.918638 -0.099867 0.748080 -v -0.903960 -0.110289 0.775328 -v -0.895626 0.111755 0.776282 -v -0.904334 0.134112 0.747446 -v -0.913069 0.167604 0.718179 -v -0.920573 0.198823 0.689078 -v -0.926180 0.171071 0.668925 -v -0.930346 0.139410 0.653950 -v -0.932912 0.105055 0.644729 -v -0.933778 0.069327 0.641615 -v -0.932912 0.033599 0.644729 -v -0.930346 -0.000755 0.653950 -v -0.926180 -0.032417 0.668925 -v -0.920573 -0.060169 0.689078 -v -0.913742 -0.082944 0.713635 -v -0.905947 -0.099867 0.741651 -v -0.897490 -0.110289 0.772051 -v -0.889762 0.111002 0.774361 -v -0.892562 0.134385 0.743651 -v -0.895152 0.169335 0.712297 -v -0.895899 0.198823 0.681603 -v -0.897166 0.171071 0.660135 -v -0.898108 0.139410 0.644183 -v -0.898687 0.105055 0.634360 -v -0.898883 0.069327 0.631043 -v -0.898687 0.033599 0.634360 -v -0.898108 -0.000755 0.644183 -v -0.897166 -0.032417 0.660135 -v -0.895899 -0.060169 0.681603 -v -0.894355 -0.082944 0.707762 -v -0.892594 -0.099867 0.737606 -v -0.890683 -0.110289 0.769989 -v -0.883738 0.110630 0.773750 -v -0.880559 0.133393 0.742262 -v -0.876971 0.168158 0.709891 -v -0.870948 0.198823 0.678819 -v -0.867827 0.171071 0.656861 -v -0.865507 0.139410 0.640545 -v -0.864079 0.105055 0.630498 -v -0.863597 0.069327 0.627105 -v -0.864079 0.033599 0.630498 -v -0.865507 -0.000755 0.640545 -v -0.867827 -0.032417 0.656861 -v -0.870948 -0.060169 0.678819 -v -0.874751 -0.082944 0.705574 -v -0.879090 -0.099867 0.736099 -v -0.883799 -0.110289 0.769220 -v -0.877838 0.109884 0.774405 -v -0.868491 0.130362 0.743495 -v -0.858373 0.162037 0.711872 -v -0.846679 0.198823 0.680832 -v -0.839289 0.171071 0.659229 -v -0.833798 0.139410 0.643176 -v -0.830417 0.105055 0.633291 -v -0.829275 0.069327 0.629953 -v -0.830417 0.033599 0.633291 -v -0.833798 -0.000755 0.643176 -v -0.839289 -0.032417 0.659229 -v -0.846679 -0.060169 0.680832 -v -0.855683 -0.082944 0.707156 -v -0.865956 -0.099867 0.737189 -v -0.877103 -0.110289 0.769776 -v -0.872176 0.110631 0.776393 -v -0.856963 0.127180 0.747197 -v -0.841001 0.157407 0.717612 -v -0.824024 0.198823 0.687566 -v -0.812650 0.171071 0.667147 -v -0.804199 0.139410 0.651974 -v -0.798994 0.105055 0.642631 -v -0.797237 0.069327 0.639476 -v -0.798994 0.033599 0.642631 -v -0.804199 -0.000755 0.651974 -v -0.812650 -0.032417 0.667147 -v -0.824024 -0.060169 0.687566 -v -0.837883 -0.082944 0.712447 -v -0.853695 -0.099867 0.740833 -v -0.870852 -0.110289 0.771634 -v -0.866903 0.109523 0.779436 -v -0.846467 0.125727 0.753212 -v -0.825399 0.156023 0.726481 -v -0.803855 0.198823 0.698761 -v -0.788934 0.171071 0.680311 -v -0.777846 0.139410 0.666602 -v -0.771019 0.105055 0.658159 -v -0.768713 0.069327 0.655308 -v -0.771019 0.033599 0.658159 -v -0.777846 -0.000755 0.666602 -v -0.788934 -0.032417 0.680311 -v -0.803855 -0.060169 0.698761 -v -0.822037 -0.082944 0.721243 -v -0.842780 -0.099867 0.746892 -v -0.865288 -0.110289 0.774723 -v -0.862351 0.109562 0.783572 -v -0.837570 0.126715 0.761314 -v -0.812291 0.157574 0.738378 -v -0.786946 0.198823 0.713988 -v -0.769051 0.171071 0.698216 -v -0.755754 0.139410 0.686496 -v -0.747565 0.105055 0.679279 -v -0.744800 0.069327 0.676842 -v -0.747565 0.033599 0.679279 -v -0.755754 -0.000755 0.686496 -v -0.769051 -0.032417 0.698216 -v -0.786946 -0.060169 0.713988 -v -0.808751 -0.082944 0.733206 -v -0.833629 -0.099867 0.755132 -v -0.860622 -0.110289 0.778924 -v -0.858846 0.110952 0.788547 -v -0.830706 0.128755 0.770964 -v -0.802114 0.161643 0.752724 -v -0.773947 0.198823 0.732661 -v -0.753766 0.171071 0.720173 -v -0.738770 0.139410 0.710894 -v -0.729536 0.105055 0.705180 -v -0.726417 0.069327 0.703250 -v -0.729536 0.033599 0.705180 -v -0.738770 -0.000755 0.710894 -v -0.753766 -0.032417 0.720173 -v -0.773947 -0.060169 0.732661 -v -0.798538 -0.082944 0.747878 -v -0.826594 -0.099867 0.765238 -v -0.857036 -0.110289 0.784075 -v -0.856630 0.113125 0.793972 -v -0.826435 0.132465 0.781603 -v -0.795729 0.167607 0.768372 -v -0.765358 0.198823 0.754063 -v -0.743666 0.171071 0.745339 -v -0.727548 0.139410 0.738857 -v -0.717622 0.105055 0.734865 -v -0.714271 0.069327 0.733517 -v -0.717622 0.033599 0.734865 -v -0.727548 -0.000755 0.738857 -v -0.743666 -0.032417 0.745339 -v -0.765358 -0.060169 0.754063 -v -0.791790 -0.082944 0.764693 -v -0.821946 -0.099867 0.776821 -v -0.854666 -0.110289 0.789980 -v -0.855735 0.115404 0.799635 -v -0.824640 0.134309 0.793029 -v -0.793462 0.163081 0.785518 -v -0.761509 0.198823 0.777371 -v -0.739140 0.171071 0.772746 -v -0.722518 0.139410 0.769310 -v -0.712283 0.105055 0.767194 -v -0.708827 0.069327 0.766479 -v -0.712283 0.033599 0.767194 -v -0.722519 -0.000755 0.769310 -v -0.739140 -0.032417 0.772746 -v -0.761509 -0.060169 0.777371 -v -0.788766 -0.082944 0.783006 -v -0.819862 -0.099867 0.789435 -v -0.853604 -0.110289 0.796411 -v -0.855912 0.117033 0.805669 -v -0.825242 0.135866 0.805083 -v -0.794364 0.162174 0.803689 -v -0.762547 0.198823 0.801689 -v -0.740361 0.171071 0.801342 -v -0.723875 0.139410 0.801083 -v -0.713723 0.105055 0.800924 -v -0.710295 0.069327 0.800871 -v -0.713723 0.033599 0.800924 -v -0.723875 -0.000755 0.801083 -v -0.740361 -0.032417 0.801342 -v -0.762547 -0.060169 0.801689 -v -0.789581 -0.082944 0.802113 -v -0.820424 -0.099867 0.802596 -v -0.853891 -0.110289 0.803120 -v -0.857125 0.119010 0.811770 -v -0.828152 0.136665 0.817148 -v -0.798761 0.164559 0.821820 -v -0.768434 0.198823 0.826084 -v -0.747282 0.171071 0.830026 -v -0.731566 0.139410 0.832956 -v -0.721888 0.105055 0.834760 -v -0.718620 0.069327 0.835370 -v -0.721888 0.033599 0.834760 -v -0.731566 -0.000755 0.832956 -v -0.747282 -0.032417 0.830026 -v -0.768434 -0.060169 0.826084 -v -0.794206 -0.082944 0.821279 -v -0.823610 -0.099867 0.815798 -v -0.855515 -0.110289 0.809851 -v -0.859463 0.120953 0.817597 -v -0.833166 0.138262 0.828689 -v -0.806381 0.168068 0.839193 -v -0.778941 0.198823 0.849616 -v -0.759638 0.171071 0.857698 -v -0.745295 0.139410 0.863703 -v -0.736462 0.105055 0.867401 -v -0.733480 0.069327 0.868650 -v -0.736462 0.033599 0.867401 -v -0.745295 -0.000755 0.863703 -v -0.759638 -0.032417 0.857698 -v -0.778941 -0.060169 0.849616 -v -0.802462 -0.082944 0.839769 -v -0.829297 -0.099867 0.828534 -v -0.858414 -0.110289 0.816343 -v -0.888695 -0.113807 0.803666 -v -0.862920 0.121973 0.822890 -v -0.840167 0.140091 0.839301 -v -0.817067 0.172159 0.855194 -v -0.793667 0.198823 0.871383 -v -0.776954 0.171071 0.883293 -v -0.764535 0.139410 0.892143 -v -0.756887 0.105055 0.897593 -v -0.754305 0.069327 0.899433 -v -0.756887 0.033599 0.897593 -v -0.764535 -0.000755 0.892143 -v -0.776954 -0.032417 0.883293 -v -0.793667 -0.060169 0.871383 -v -0.814032 -0.082944 0.856871 -v -0.837266 -0.099867 0.840314 -v -0.862477 -0.110289 0.822349 -v -0.867203 0.121924 0.827362 -v -0.848925 0.142079 0.848684 -v -0.830572 0.178690 0.869438 -v -0.812044 0.198823 0.890548 -v -0.798563 0.171071 0.905829 -v -0.788546 0.139410 0.917183 -v -0.782377 0.105055 0.924175 -v -0.780294 0.069327 0.926536 -v -0.782377 0.033599 0.924175 -v -0.788546 -0.000755 0.917183 -v -0.798563 -0.032417 0.905829 -v -0.812044 -0.060169 0.890548 -v -0.828471 -0.082944 0.871929 -v -0.847212 -0.099867 0.850686 -v -0.867547 -0.110289 0.827636 -v -0.872288 0.119615 0.830918 -v -0.859094 0.143088 0.856348 -v -0.846492 0.188867 0.881489 -v -0.833367 0.198823 0.906374 -v -0.823636 0.171071 0.924438 -v -0.816406 0.139410 0.937860 -v -0.811953 0.105055 0.946126 -v -0.810450 0.069327 0.948917 -v -0.811953 0.033599 0.946126 -v -0.816406 -0.000755 0.937860 -v -0.823636 -0.032417 0.924438 -v -0.833367 -0.060169 0.906374 -v -0.845224 -0.082944 0.884363 -v -0.858752 -0.099867 0.859251 -v -0.873430 -0.110289 0.832003 -v -0.878094 0.116394 0.833596 -v -0.870401 0.136881 0.862016 -v -0.863899 0.172816 0.890506 -v -0.856820 0.198797 0.918239 -v -0.851210 0.171071 0.938406 -v -0.847044 0.139410 0.953381 -v -0.844478 0.105055 0.962602 -v -0.843612 0.069327 0.965716 -v -0.844478 0.033599 0.962602 -v -0.847044 -0.000755 0.953381 -v -0.851210 -0.032417 0.938406 -v -0.856816 -0.060169 0.918253 -v -0.863648 -0.082944 0.893696 -v -0.871442 -0.099867 0.865680 -v -0.879900 -0.110289 0.835280 -v -0.884354 0.113251 0.835312 -v -0.882579 0.129995 0.865697 -v -0.881852 0.160637 0.896308 -v -0.881493 0.198775 0.925701 -v -0.880224 0.171071 0.947196 -v -0.879282 0.139410 0.963148 -v -0.878702 0.105055 0.972971 -v -0.878507 0.069327 0.976288 -v -0.878702 0.033599 0.972971 -v -0.879282 -0.000755 0.963148 -v -0.880224 -0.032417 0.947196 -v -0.881491 -0.060169 0.925728 -v -0.883035 -0.082944 0.899569 -v -0.884796 -0.099867 0.869725 -v -0.886707 -0.110289 0.837342 -v -0.890784 0.110833 0.835950 -v -0.895449 0.124746 0.867121 -v -0.900725 0.157100 0.897831 -v -0.906441 0.198811 0.928505 -v -0.909563 0.171071 0.950470 -v -0.911882 0.139410 0.966786 -v -0.913311 0.105055 0.976833 -v -0.913793 0.069327 0.980225 -v -0.913311 0.033599 0.976833 -v -0.911882 -0.000755 0.966786 -v -0.909563 -0.032417 0.950470 -v -0.906442 -0.060169 0.928512 -v -0.902639 -0.082944 0.901757 -v -0.898300 -0.099867 0.871232 -v -0.893591 -0.110289 0.838111 -v -0.897038 0.109615 0.835419 -v -0.907826 0.126885 0.865629 -v -0.919032 0.156820 0.895940 -v -0.930711 0.198823 0.926499 -v -0.938101 0.171071 0.948102 -v -0.943592 0.139410 0.964155 -v -0.946973 0.105055 0.974040 -v -0.948115 0.069327 0.977378 -v -0.946973 0.033599 0.974040 -v -0.943592 -0.000755 0.964155 -v -0.938101 -0.032417 0.948102 -v -0.930711 -0.060169 0.926499 -v -0.921707 -0.082944 0.900175 -v -0.911434 -0.099867 0.870142 -v -0.900287 -0.110289 0.837555 -v -0.902747 0.108911 0.833785 -v -0.919343 0.126336 0.862550 -v -0.936096 0.156384 0.890935 -v -0.953366 0.198823 0.919765 -v -0.964740 0.171071 0.940184 -v -0.973191 0.139410 0.955357 -v -0.978396 0.105055 0.964700 -v -0.980153 0.069327 0.967855 -v -0.978396 0.033599 0.964700 -v -0.973191 -0.000755 0.955357 -v -0.964740 -0.032417 0.940184 -v -0.953366 -0.060169 0.919765 -v -0.939506 -0.082944 0.894884 -v -0.923694 -0.099867 0.866498 -v -0.906538 -0.110289 0.835697 -v -0.886821 0.108050 0.805276 -v -0.907688 0.108589 0.831044 -v -0.929275 0.124972 0.857060 -v -0.951206 0.155948 0.882674 -v -0.973533 0.198816 0.908568 -v -0.988456 0.171071 0.927020 -v -0.999544 0.139410 0.940729 -v -1.006371 0.105055 0.949172 -v -1.008677 0.069327 0.952022 -v -1.006371 0.033599 0.949172 -v -0.999544 -0.000755 0.940729 -v -0.988456 -0.032417 0.927020 -v -0.973535 -0.060169 0.908570 -v -0.955353 -0.082944 0.886088 -v -0.934610 -0.099867 0.860439 -v -0.912102 -0.110289 0.832609 -v -0.911797 0.107654 0.827343 -v -0.937569 0.123775 0.849490 -v -0.963876 0.154073 0.871440 -v -0.985613 0.187155 0.889769 -v -1.008339 0.171071 0.909115 -v -1.021636 0.139410 0.920835 -v -1.029824 0.105055 0.928052 -v -1.032589 0.069327 0.930489 -v -1.029825 0.033599 0.928052 -v -1.021636 -0.000755 0.920835 -v -1.008339 -0.032417 0.909115 -v -0.990444 -0.060169 0.893343 -v -0.968638 -0.082944 0.874125 -v -0.943761 -0.099867 0.852199 -v -0.916767 -0.110289 0.828407 -vn -0.943907 0.197516 0.264595 -vn 0.474410 0.846034 -0.243110 -vn 0.189673 0.975890 -0.107700 -vn -0.724845 -0.567095 0.391125 -vn -0.202490 -0.979186 0.011109 -vn -0.998108 0.000000 0.061373 -vn -0.972839 0.187139 -0.135990 -vn -0.860256 -0.178137 -0.477676 -vn 0.428510 0.772362 0.468856 -vn 0.369884 0.764306 0.528184 -vn -0.874294 0.000000 -0.485366 -vn -0.328166 -0.906491 -0.265633 -vn -0.030274 0.999146 -0.027039 -vn -0.493789 -0.664998 -0.560259 -vn 0.312662 0.748894 0.584246 -vn 0.166234 0.917997 0.359996 -vn -0.081942 -0.975890 -0.202246 -vn -0.009033 -0.818598 -0.574236 -vn -0.064699 0.946013 0.317515 -vn 0.026704 0.998230 -0.052797 -vn 0.272134 -0.710532 -0.648854 -vn -0.317606 0.829768 0.458876 -vn 0.316660 -0.837947 -0.444441 -vn 0.478469 0.567003 -0.670431 -vn 0.532487 -0.833369 -0.148076 -vn 0.972869 0.187139 0.135990 -vn 0.553331 -0.811121 0.189276 -vn 0.387494 -0.912198 0.133030 -vn 0.860256 0.178137 0.477676 -vn 0.171636 -0.975249 0.139225 -vn -0.344157 0.863186 -0.369366 -vn -0.512497 0.624989 -0.588794 -vn 0.081942 -0.975890 0.202216 -vn 0.009033 -0.818598 0.574236 -vn 0.044038 -0.976867 0.209235 -vn -0.154302 -0.549699 0.820948 -vn 0.154057 0.811884 -0.563097 -vn -0.054750 0.636555 -0.769250 -vn 0.002075 0.999268 0.037935 -vn -0.071047 -0.920469 0.384289 -vn -0.010163 0.999207 0.038087 -vn -0.087680 0.942198 -0.323344 -vn 0.161962 0.802271 -0.574541 -vn -0.272164 -0.710532 0.648854 -vn -0.213446 -0.833277 0.509964 -vn -0.520859 -0.719382 0.459517 -vn 0.336100 0.820551 -0.462233 -usemtl Body -s 1 -f 5791//3529 5790//3530 5805//3531 -f 5786//3532 5785//3533 5800//3534 -f 5797//3535 5796//3536 5812//3537 -f 5792//3538 5791//3529 5806//4010 -f 5787//3540 5786//3532 5801//4011 -f 5798//3542 5797//3535 5813//3543 -f 5793//3544 5792//3538 5808//3545 -f 5788//4012 5787//3540 5802//3547 -f 5799//3548 5798//3542 5814//3549 -f 5794//3550 5793//3544 5809//3551 -f 5789//3552 5788//4012 5803//3553 -f 5795//4013 5794//3550 5810//3555 -f 5790//3530 5789//3552 5804//3556 -f 5796//3536 5795//4013 5811//3557 -f 5811//3557 5810//3555 5826//3558 -f 5806//4010 5805//3531 5820//3559 -f 5801//4011 5800//3534 5815//3560 -f 5812//3537 5811//3557 5827//3561 -f 5807//3562 5806//4010 5821//3563 -f 5802//3547 5801//4011 5816//3564 -f 5813//3543 5812//3537 5828//3565 -f 5808//3545 5807//3562 5823//3566 -f 5803//3553 5802//3547 5817//3567 -f 5814//3549 5813//3543 5829//4014 -f 5809//3551 5808//3545 5824//3569 -f 5804//3556 5803//3553 5818//3570 -f 5810//3555 5809//3551 5825//3571 -f 5805//3531 5804//3556 5819//3572 -f 5825//3571 5824//3569 5840//3573 -f 5820//3559 5819//3572 5834//3574 -f 5826//3558 5825//3571 5841//3575 -f 5821//3563 5820//3559 5835//3576 -f 5816//3564 5815//3560 5830//3577 -f 5827//3561 5826//3558 5842//3578 -f 5822//4015 5821//3563 5836//4016 -f 5817//3567 5816//3564 5831//3581 -f 5828//3565 5827//3561 5843//3582 -f 5823//3566 5822//4015 5838//3583 -f 5818//3570 5817//3567 5832//3584 -f 5829//4014 5828//3565 5844//3585 -f 5824//3569 5823//3566 5839//3586 -f 5819//3572 5818//3570 5833//3587 -f 5844//3585 5843//3582 5859//3588 -f 5839//3586 5838//3583 5854//3589 -f 5834//3574 5833//3587 5848//3590 -f 5840//3573 5839//3586 5855//3591 -f 5835//3576 5834//3574 5849//3592 -f 5841//3575 5840//3573 5856//3593 -f 5836//4016 5835//3576 5850//3594 -f 5831//3581 5830//3577 5845//3595 -f 5842//3578 5841//3575 5857//3596 -f 5837//3597 5836//4016 5851//3598 -f 5832//3584 5831//3581 5847//3599 -f 5843//3582 5842//3578 5858//3600 -f 5838//3583 5837//3597 5853//3601 -f 5833//3587 5832//3584 5848//3590 -f 5847//3599 5846//3602 5862//3603 -f 5858//3600 5857//3596 5873//3604 -f 5853//3601 5852//3605 5868//4017 -f 5848//3590 5847//3599 5863//3607 -f 5859//3588 5858//3600 5874//3608 -f 5854//3589 5853//3601 5869//3609 -f 5849//3592 5848//3590 5863//3607 -f 5855//3591 5854//3589 5870//3610 -f 5850//3594 5849//3592 5864//3611 -f 5856//3593 5855//3591 5871//3612 -f 5851//3598 5850//3594 5865//3613 -f 5846//3602 5845//3595 5861//4018 -f 5857//3596 5856//3593 5872//3615 -f 5852//3605 5851//3598 5866//3616 -f 5866//3616 5865//3613 5880//3617 -f 5861//4018 5860//3618 5876//4019 -f 5872//3615 5871//3612 5887//3620 -f 5867//4020 5866//3616 5881//3622 -f 5862//3603 5861//4018 5877//3623 -f 5873//3604 5872//3615 5888//4021 -f 5868//4017 5867//4020 5883//3625 -f 5863//3607 5862//3603 5877//3623 -f 5874//3608 5873//3604 5889//3626 -f 5869//3609 5868//4017 5884//3627 -f 5864//3611 5863//3607 5878//4022 -f 5870//3610 5869//3609 5885//3629 -f 5865//3613 5864//3611 5879//3630 -f 5871//3612 5870//3610 5886//3631 -f 5885//3629 5884//3627 5900//3632 -f 5880//3617 5879//3630 5894//3633 -f 5886//3631 5885//3629 5901//4023 -f 5881//3622 5880//3617 5895//3635 -f 5876//4019 5875//3636 5891//4024 -f 5887//3620 5886//3631 5902//3638 -f 5882//3639 5881//3622 5896//3640 -f 5877//3623 5876//4019 5892//3641 -f 5888//4021 5887//3620 5903//3642 -f 5883//3625 5882//3639 5898//3643 -f 5878//4022 5877//3623 5893//3644 -f 5889//3626 5888//4021 5904//3645 -f 5884//3627 5883//3625 5899//3646 -f 5879//3630 5878//4022 5893//3644 -f 5904//3645 5903//3642 5918//3647 -f 5899//3646 5898//3643 5913//3648 -f 5894//3633 5893//3644 5909//3649 -f 5900//3632 5899//3646 5914//3650 -f 5895//3635 5894//3633 5910//3651 -f 5901//4023 5900//3632 5915//3652 -f 5896//3640 5895//3635 5911//3653 -f 5891//4024 5890//3654 5906//3655 -f 5902//3638 5901//4023 5916//3656 -f 5897//3657 5896//3640 5912//3658 -f 5892//3641 5891//4024 5907//3659 -f 5903//3642 5902//3638 5917//3660 -f 5898//3643 5897//3657 5912//3658 -f 5893//3644 5892//3641 5908//3661 -f 5907//3659 5906//3655 5922//3662 -f 5918//3647 5917//3660 5932//3663 -f 5913//3648 5912//3658 5927//3664 -f 5908//3661 5907//3659 5923//3665 -f 5919//3666 5918//3647 5933//3667 -f 5914//3650 5913//3648 5928//3668 -f 5909//3649 5908//3661 5924//3669 -f 5915//3652 5914//3650 5929//3670 -f 5910//3651 5909//3649 5925//3671 -f 5916//3656 5915//3652 5930//3672 -f 5911//3653 5910//3651 5926//3673 -f 5906//3655 5905//4025 5921//3675 -f 5917//3660 5916//3656 5931//3676 -f 5912//3658 5911//3653 5927//3664 -f 5926//3673 5925//3671 5941//3677 -f 5921//3675 5920//3678 5936//3679 -f 5932//3663 5931//3676 5946//3680 -f 5927//3664 5926//3673 5942//3681 -f 5922//3662 5921//3675 5937//3682 -f 5933//3667 5932//3663 5947//3683 -f 5928//3668 5927//3664 5942//3681 -f 5923//3665 5922//3662 5938//3684 -f 5934//4026 5933//3667 5948//3686 -f 5929//3670 5928//3668 5943//3687 -f 5924//3669 5923//3665 5939//3688 -f 5930//3672 5929//3670 5944//3689 -f 5925//3671 5924//3669 5940//3690 -f 5931//3676 5930//3672 5945//3691 -f 5945//3691 5944//3689 5959//3692 -f 5940//3690 5939//3688 5955//3693 -f 5946//3680 5945//3691 5960//3694 -f 5941//3677 5940//3690 5956//3695 -f 5936//3679 5935//3696 5951//3697 -f 5947//3683 5946//3680 5961//3698 -f 5942//3681 5941//3677 5957//3699 -f 5937//3682 5936//3679 5952//3700 -f 5948//3686 5947//3683 5962//4027 -f 5943//3687 5942//3681 5957//3699 -f 5938//3684 5937//3682 5953//3702 -f 5949//3703 5948//3686 5963//3704 -f 5944//3689 5943//3687 5958//3705 -f 5939//3688 5938//3684 5954//3706 -f 5964//3707 5963//3704 5978//3708 -f 5959//3692 5958//3705 5973//3709 -f 5954//3706 5953//3702 5969//3710 -f 5960//3694 5959//3692 5974//3711 -f 5955//3693 5954//3706 5970//3712 -f 5961//3698 5960//3694 5975//3713 -f 5956//3695 5955//3693 5971//3714 -f 5951//3697 5950//3715 5965//4028 -f 5962//4027 5961//3698 5976//3717 -f 5957//3699 5956//3695 5972//3718 -f 5952//3700 5951//3697 5966//3719 -f 5963//3704 5962//4027 5977//3720 -f 5958//3705 5957//3699 5972//3718 -f 5953//3702 5952//3700 5968//3721 -f 5978//3708 5977//3720 5992//3722 -f 5973//3709 5972//3718 5987//3723 -f 5968//3721 5967//3724 5983//4029 -f 5979//3726 5978//3708 5993//3727 -f 5974//3711 5973//3709 5988//3728 -f 5969//3710 5968//3721 5984//3729 -f 5975//3713 5974//3711 5989//3730 -f 5970//3712 5969//3710 5985//3731 -f 5976//3717 5975//3713 5990//3732 -f 5971//3714 5970//3712 5986//3733 -f 5966//3719 5965//4028 5980//3734 -f 5977//3720 5976//3717 5991//4030 -f 5972//3718 5971//3714 5987//3723 -f 5967//3724 5966//3719 5981//3736 -f 5981//3736 5980//3734 5995//3737 -f 5992//3722 5991//4030 6006//3738 -f 5987//3723 5986//3733 6002//3739 -f 5982//3740 5981//3736 5996//4031 -f 5993//3727 5992//3722 6007//4032 -f 5988//3728 5987//3723 6002//3739 -f 5983//4029 5982//3740 5998//3743 -f 5994//3744 5993//3727 6008//3745 -f 5989//3730 5988//3728 6003//3746 -f 5984//3729 5983//4029 5999//4033 -f 5990//3732 5989//3730 6004//3748 -f 5985//3731 5984//3729 6000//3749 -f 5991//4030 5990//3732 6005//3750 -f 5986//3733 5985//3731 6001//3751 -f 6000//3749 5999//4033 6015//3752 -f 6006//3738 6005//3750 6020//3753 -f 6001//3751 6000//3749 6016//3754 -f 5996//4031 5995//3737 6011//3755 -f 6007//4032 6006//3738 6021//3756 -f 6002//3739 6001//3751 6017//3757 -f 5997//3758 5996//4031 6012//3759 -f 6008//3745 6007//4032 6022//3760 -f 6003//3746 6002//3739 6017//3757 -f 5998//3743 5997//3758 6013//3761 -f 6009//3762 6008//3745 6023//3763 -f 6004//3748 6003//3746 6018//3764 -f 5999//4033 5998//3743 6014//3765 -f 6005//3750 6004//3748 6019//3766 -f 6019//3766 6018//3764 6034//3767 -f 6014//3765 6013//3761 6028//3768 -f 6020//3753 6019//3766 6035//3769 -f 6015//3752 6014//3765 6029//3770 -f 6021//3756 6020//3753 6036//3771 -f 6016//3754 6015//3752 6030//3772 -f 6011//3755 6010//3773 6026//3774 -f 6022//3760 6021//3756 6037//3775 -f 6017//3757 6016//3754 6031//3776 -f 6012//3759 6011//3755 6027//3777 -f 6023//3763 6022//3760 6038//3778 -f 6018//3764 6017//3757 6033//3779 -f 6013//3761 6012//3759 6028//3768 -f 6024//3780 6023//3763 6039//3781 -f 6038//3778 6037//3775 6053//3782 -f 6033//3779 6032//3783 6048//3784 -f 6028//3768 6027//3777 6043//3785 -f 6039//3781 6038//3778 6054//3786 -f 6034//3767 6033//3779 6049//3787 -f 6029//3770 6028//3768 6043//3785 -f 6035//3769 6034//3767 6050//3788 -f 6030//3772 6029//3770 6044//3789 -f 6036//3771 6035//3769 6051//3790 -f 6031//3776 6030//3772 6045//3791 -f 6026//3774 6025//3792 6041//3793 -f 6037//3775 6036//3771 6052//4034 -f 6032//3783 6031//3776 6046//3795 -f 6027//3777 6026//3774 6042//3796 -f 6041//3793 6040//3797 6055//3798 -f 6052//4034 6051//3790 6067//3799 -f 6047//3800 6046//3795 6061//3801 -f 6042//3796 6041//3793 6056//3802 -f 6053//3782 6052//4034 6068//3803 -f 6048//3784 6047//3800 6063//3804 -f 6043//3785 6042//3796 6057//3805 -f 6054//3786 6053//3782 6069//3806 -f 6049//3787 6048//3784 6064//3807 -f 6044//3789 6043//3785 6058//3808 -f 6050//3788 6049//3787 6065//3809 -f 6045//3791 6044//3789 6059//3810 -f 6051//3790 6050//3788 6066//3811 -f 6046//3795 6045//3791 6060//3812 -f 6060//3812 6059//3810 6074//3813 -f 6066//3811 6065//3809 6081//3814 -f 6061//3801 6060//3812 6075//3815 -f 6056//3802 6055//3798 6070//3816 -f 6067//3799 6066//3811 6082//3817 -f 6062//3818 6061//3801 6076//4035 -f 6057//3805 6056//3802 6071//3820 -f 6068//3803 6067//3799 6083//3821 -f 6063//3804 6062//3818 6078//3822 -f 6058//3808 6057//3805 6072//3823 -f 6069//3806 6068//3803 6084//3824 -f 6064//3807 6063//3804 6079//3825 -f 6059//3810 6058//3808 6073//3826 -f 6065//3809 6064//3807 6080//3827 -f 6079//3825 6078//3822 6094//3828 -f 6074//3813 6073//3826 6088//3829 -f 6080//3827 6079//3825 6095//3830 -f 6075//3815 6074//3813 6089//3831 -f 6081//3814 6080//3827 6096//3832 -f 6076//4035 6075//3815 6090//3833 -f 6071//3820 6070//3816 6085//3834 -f 6082//3817 6081//3814 6097//4036 -f 6077//3836 6076//4035 6091//3837 -f 6072//3823 6071//3820 6086//3838 -f 6083//3821 6082//3817 6098//4037 -f 6078//3822 6077//3836 6093//3840 -f 6073//3826 6072//3823 6087//3841 -f 6084//3824 6083//3821 6099//3842 -f 6098//4037 6097//4036 6113//3843 -f 6093//3840 6092//3844 6108//3845 -f 6088//3829 6087//3841 6102//3846 -f 6099//3842 6098//4037 6114//3847 -f 6094//3828 6093//3840 6109//3848 -f 6089//3831 6088//3829 6103//3849 -f 6095//3830 6094//3828 6110//3850 -f 6090//3833 6089//3831 6104//3851 -f 6096//3832 6095//3830 6111//3852 -f 6091//3837 6090//3833 6105//3853 -f 6086//3838 6085//3834 6101//3854 -f 6097//4036 6096//3832 6112//3855 -f 6092//3844 6091//3837 6106//4038 -f 6087//3841 6086//3838 6102//3846 -f 6112//3855 6111//3852 6128//3857 -f 6107//3858 6106//4038 6122//3859 -f 6102//3846 6101//3854 6118//3860 -f 6113//3843 6112//3855 6129//3861 -f 6108//3845 6107//3858 6124//3862 -f 6103//3849 6102//3846 6118//3860 -f 6114//3847 6113//3843 6130//4039 -f 6109//3848 6108//3845 6125//3864 -f 6104//3851 6103//3849 6119//3865 -f 6110//3850 6109//3848 6126//3866 -f 6105//3853 6104//3851 6120//3867 -f 6111//3852 6110//3850 6127//3868 -f 6106//4038 6105//3853 6121//3869 -f 6101//3854 6100//3870 6117//3871 -f 6127//3868 6126//3866 6142//3872 -f 6122//3859 6121//3869 6136//3873 -f 6117//3871 6116//4040 6132//3875 -f 6128//3857 6127//3868 6143//3876 -f 6123//3877 6122//3859 6137//3878 -f 6118//3860 6117//3871 6133//3879 -f 6129//3861 6128//3857 6144//3880 -f 6124//3862 6123//3877 6139//3881 -f 6119//3865 6118//3860 6134//3882 -f 6130//4039 6129//3861 6145//3883 -f 6125//3864 6124//3862 6140//3884 -f 6120//3867 6119//3865 6134//3882 -f 6126//3866 6125//3864 6141//3885 -f 6121//3869 6120//3867 6135//3886 -f 6135//3886 6134//3882 6150//3887 -f 6141//3885 6140//3884 6155//3888 -f 6136//3873 6135//3886 6151//3889 -f 6142//3872 6141//3885 6156//3890 -f 6137//3878 6136//3873 6152//3891 -f 6132//3875 6131//3892 6146//3893 -f 6143//3876 6142//3872 6157//3894 -f 6138//3895 6137//3878 6153//3896 -f 6133//3879 6132//3875 6148//3897 -f 6144//3880 6143//3876 6158//3898 -f 6139//3881 6138//3895 6153//3896 -f 6134//3882 6133//3879 6149//3899 -f 6145//3883 6144//3880 6159//3900 -f 6140//3884 6139//3881 6154//3901 -f 6154//3901 6153//3896 6168//3902 -f 6149//3899 6148//3897 6163//3903 -f 6160//3904 6159//3900 6174//3905 -f 6155//3888 6154//3901 6169//3906 -f 6150//3887 6149//3899 6165//3907 -f 6156//3890 6155//3888 6170//3908 -f 6151//3889 6150//3887 6166//3909 -f 6157//3894 6156//3890 6171//3910 -f 6152//3891 6151//3889 6167//3911 -f 6147//4041 6146//3893 6161//3913 -f 6158//3898 6157//3894 6172//3914 -f 6153//3896 6152//3891 6168//3902 -f 6148//3897 6147//4041 6162//3915 -f 6159//3900 6158//3898 6173//3916 -f 6173//3916 6172//3914 6187//3917 -f 6168//3902 6167//3911 6183//3918 -f 6163//3903 6162//3915 6177//3919 -f 6174//3905 6173//3916 6188//3920 -f 6169//3906 6168//3902 6183//3918 -f 6164//3921 6163//3903 6178//3922 -f 6175//4042 6174//3905 6189//3924 -f 6170//3908 6169//3906 6184//3925 -f 6165//3907 6164//3921 6180//3926 -f 6171//3910 6170//3908 6185//3927 -f 6166//3909 6165//3907 6181//3928 -f 6172//3914 6171//3910 6186//3929 -f 6167//3911 6166//3909 6182//3930 -f 6162//3915 6161//3913 6176//3931 -f 6187//3917 6186//3929 6201//3932 -f 6182//3930 6181//3928 6197//3933 -f 6177//3919 6176//3931 6191//3934 -f 6188//3920 6187//3917 6202//3935 -f 6183//3918 6182//3930 6198//3936 -f 6178//3922 6177//3919 6192//3937 -f 6189//3924 6188//3920 6203//4043 -f 6184//3925 6183//3918 6198//3936 -f 6179//3939 6178//3922 6194//3940 -f 6190//4044 6189//3924 6204//3942 -f 6185//3927 6184//3925 6199//3943 -f 6180//3926 6179//3939 6195//3944 -f 6186//3929 6185//3927 6200//3945 -f 6181//3928 6180//3926 6196//3946 -f 6195//3944 6194//3940 6210//3947 -f 6201//3932 6200//3945 6215//3948 -f 6196//3946 6195//3944 6211//3949 -f 6202//3935 6201//3932 6216//4045 -f 6197//3933 6196//3946 6212//3951 -f 6192//3937 6191//3934 6207//4046 -f 6203//4043 6202//3935 6217//3953 -f 6198//3936 6197//3933 6213//3954 -f 6193//4047 6192//3937 6208//3956 -f 6204//3942 6203//4043 6218//3957 -f 6199//3943 6198//3936 6213//3954 -f 6194//3940 6193//4047 6209//4048 -f 6205//3959 6204//3942 6219//4049 -f 6200//3945 6199//3943 6214//3961 -f 6214//3961 6213//3954 6228//3962 -f 6209//4048 6208//3956 6224//4050 -f 6220//3964 6219//4049 6234//3965 -f 6215//3948 6214//3961 6229//3966 -f 6210//3947 6209//4048 6225//3967 -f 6216//4045 6215//3948 6230//3968 -f 6211//3949 6210//3947 6226//3969 -f 6217//3953 6216//4045 6231//3970 -f 6212//3951 6211//3949 6227//3971 -f 6207//4046 6206//4051 6222//4052 -f 6218//3957 6217//3953 6232//4053 -f 6213//3954 6212//3951 6228//3962 -f 6208//3956 6207//4046 6223//3975 -f 6219//4049 6218//3957 6233//4054 -f 6233//4054 6232//4053 6248//3977 -f 6228//3962 6227//3971 6244//3978 -f 6223//3975 6222//4052 6239//3979 -f 6234//3965 6233//4054 6249//3980 -f 6229//3966 6228//3962 6244//3978 -f 6224//4050 6223//3975 6240//3981 -f 6235//3982 6234//3965 6250//3983 -f 6230//3968 6229//3966 6245//3984 -f 6225//3967 6224//4050 6241//3985 -f 6231//3970 6230//3968 6246//3986 -f 6226//3969 6225//3967 6242//3987 -f 6232//4053 6231//3970 6247//3988 -f 6227//3971 6226//3969 6243//3989 -f 6222//4052 6221//3990 6238//3991 -f 6248//3977 6247//3988 6262//3992 -f 6243//3989 6242//3987 6258//3993 -f 6238//3991 6237//3994 6252//3995 -f 6249//3980 6248//3977 6263//4055 -f 6244//3978 6243//3989 6259//3997 -f 6239//3979 6238//3991 6253//4056 -f 6250//3983 6249//3980 6264//3999 -f 6245//3984 6244//3978 6259//3997 -f 6240//3981 6239//3979 6254//4000 -f 6251//4001 6250//3983 6265//4002 -f 6246//3986 6245//3984 6260//4003 -f 6241//3985 6240//3981 6256//4004 -f 6247//3988 6246//3986 6261//4005 -f 6242//3987 6241//3985 6257//4006 -f 6115//364 5799//3548 5814//3549 -f 5785//3533 6236//4007 5800//3534 -f 6115//364 5814//3549 5829//4014 -f 5800//3534 6236//4007 5815//3560 -f 6115//364 5829//4014 5844//3585 -f 5815//3560 6236//4007 5830//3577 -f 6115//364 5844//3585 5859//3588 -f 5830//3577 6236//4007 5845//3595 -f 6115//364 5859//3588 5874//3608 -f 5845//3595 6236//4007 5860//3618 -f 6115//364 5874//3608 5889//3626 -f 5860//3618 6236//4007 5875//3636 -f 5875//3636 6236//4007 5890//3654 -f 6115//364 5889//3626 5904//3645 -f 6115//364 5904//3645 5919//3666 -f 5890//3654 6236//4007 5905//4025 -f 6115//364 5919//3666 5934//4026 -f 5905//4025 6236//4007 5920//3678 -f 6115//364 5934//4026 5949//3703 -f 5920//3678 6236//4007 5935//3696 -f 5935//3696 6236//4007 5950//3715 -f 6115//364 5949//3703 5964//3707 -f 6115//364 5964//3707 5979//3726 -f 5950//3715 6236//4007 5965//4028 -f 6115//364 5979//3726 5994//3744 -f 5965//4028 6236//4007 5980//3734 -f 6115//364 5994//3744 6009//3762 -f 5980//3734 6236//4007 5995//3737 -f 5995//3737 6236//4007 6010//3773 -f 6115//364 6009//3762 6024//3780 -f 6115//364 6024//3780 6039//3781 -f 6010//3773 6236//4007 6025//3792 -f 6115//364 6039//3781 6054//3786 -f 6025//3792 6236//4007 6040//3797 -f 6115//364 6054//3786 6069//3806 -f 6040//3797 6236//4007 6055//3798 -f 6055//3798 6236//4007 6070//3816 -f 6115//364 6069//3806 6084//3824 -f 6115//364 6084//3824 6099//3842 -f 6070//3816 6236//4007 6085//3834 -f 6115//364 6099//3842 6114//3847 -f 6085//3834 6236//4007 6100//3870 -f 6115//364 6114//3847 6130//4039 -f 6100//3870 6236//4007 6116//4040 -f 6116//4040 6236//4007 6131//3892 -f 6115//364 6130//4039 6145//3883 -f 6115//364 6145//3883 6160//3904 -f 6131//3892 6236//4007 6146//3893 -f 6115//364 6160//3904 6175//4042 -f 6146//3893 6236//4007 6161//3913 -f 6115//364 6175//4042 6190//4044 -f 6161//3913 6236//4007 6176//3931 -f 6176//3931 6236//4007 6191//3934 -f 6115//364 6190//4044 6205//3959 -f 6115//364 6205//3959 6220//3964 -f 6191//3934 6236//4007 6206//4051 -f 6115//364 6220//3964 6235//3982 -f 6206//4051 6236//4007 6221//3990 -f 6115//364 6235//3982 6251//4001 -f 6221//3990 6236//4007 6237//3994 -f 6115//364 6251//4001 6266//4008 -f 6237//3994 6236//4007 6252//3995 -f 6115//364 6266//4008 5799//3548 -f 6262//3992 6261//4005 5795//4013 -f 6257//4006 6256//4004 5789//3552 -f 6252//3995 6236//4007 5785//3533 -f 6263//4055 6262//3992 5796//3536 -f 6258//3993 6257//4006 5790//3530 -f 6253//4056 6252//3995 5785//3533 -f 6264//3999 6263//4055 5797//3535 -f 6259//3997 6258//3993 5791//3529 -f 6254//4000 6253//4056 5786//3532 -f 6265//4002 6264//3999 5798//3542 -f 6260//4003 6259//3997 5793//3544 -f 6255//4009 6254//4000 5787//3540 -f 6266//4008 6265//4002 5799//3548 -f 6261//4005 6260//4003 5794//3550 -f 6256//4004 6255//4009 5788//4012 -f 5806//4010 5791//3529 5805//3531 -f 5801//4011 5786//3532 5800//3534 -f 5796//3536 5811//3557 5812//3537 -f 5807//3562 5792//3538 5806//4010 -f 5802//3547 5787//3540 5801//4011 -f 5797//3535 5812//3537 5813//3543 -f 5792//3538 5807//3562 5808//3545 -f 5803//3553 5788//4012 5802//3547 -f 5798//3542 5813//3543 5814//3549 -f 5793//3544 5808//3545 5809//3551 -f 5804//3556 5789//3552 5803//3553 -f 5794//3550 5809//3551 5810//3555 -f 5805//3531 5790//3530 5804//3556 -f 5795//4013 5810//3555 5811//3557 -f 5810//3555 5825//3571 5826//3558 -f 5821//3563 5806//4010 5820//3559 -f 5816//3564 5801//4011 5815//3560 -f 5811//3557 5826//3558 5827//3561 -f 5822//4015 5807//3562 5821//3563 -f 5817//3567 5802//3547 5816//3564 -f 5812//3537 5827//3561 5828//3565 -f 5807//3562 5822//4015 5823//3566 -f 5818//3570 5803//3553 5817//3567 -f 5813//3543 5828//3565 5829//4014 -f 5808//3545 5823//3566 5824//3569 -f 5819//3572 5804//3556 5818//3570 -f 5809//3551 5824//3569 5825//3571 -f 5820//3559 5805//3531 5819//3572 -f 5824//3569 5839//3586 5840//3573 -f 5835//3576 5820//3559 5834//3574 -f 5825//3571 5840//3573 5841//3575 -f 5836//4016 5821//3563 5835//3576 -f 5831//3581 5816//3564 5830//3577 -f 5826//3558 5841//3575 5842//3578 -f 5837//3597 5822//4015 5836//4016 -f 5832//3584 5817//3567 5831//3581 -f 5827//3561 5842//3578 5843//3582 -f 5822//4015 5837//3597 5838//3583 -f 5833//3587 5818//3570 5832//3584 -f 5828//3565 5843//3582 5844//3585 -f 5823//3566 5838//3583 5839//3586 -f 5834//3574 5819//3572 5833//3587 -f 5843//3582 5858//3600 5859//3588 -f 5838//3583 5853//3601 5854//3589 -f 5849//3592 5834//3574 5848//3590 -f 5839//3586 5854//3589 5855//3591 -f 5850//3594 5835//3576 5849//3592 -f 5840//3573 5855//3591 5856//3593 -f 5851//3598 5836//4016 5850//3594 -f 5846//3602 5831//3581 5845//3595 -f 5841//3575 5856//3593 5857//3596 -f 5852//3605 5837//3597 5851//3598 -f 5831//3581 5846//3602 5847//3599 -f 5842//3578 5857//3596 5858//3600 -f 5837//3597 5852//3605 5853//3601 -f 5832//3584 5847//3599 5848//3590 -f 5846//3602 5861//4018 5862//3603 -f 5857//3596 5872//3615 5873//3604 -f 5852//3605 5867//4020 5868//4017 -f 5847//3599 5862//3603 5863//3607 -f 5858//3600 5873//3604 5874//3608 -f 5853//3601 5868//4017 5869//3609 -f 5864//3611 5849//3592 5863//3607 -f 5854//3589 5869//3609 5870//3610 -f 5865//3613 5850//3594 5864//3611 -f 5855//3591 5870//3610 5871//3612 -f 5866//3616 5851//3598 5865//3613 -f 5845//3595 5860//3618 5861//4018 -f 5856//3593 5871//3612 5872//3615 -f 5867//4020 5852//3605 5866//3616 -f 5881//3622 5866//3616 5880//3617 -f 5860//3618 5875//3636 5876//4019 -f 5871//3612 5886//3631 5887//3620 -f 5882//3639 5867//4020 5881//3622 -f 5861//4018 5876//4019 5877//3623 -f 5872//3615 5887//3620 5888//4021 -f 5867//4020 5882//3639 5883//3625 -f 5878//4022 5863//3607 5877//3623 -f 5873//3604 5888//4021 5889//3626 -f 5868//4017 5883//3625 5884//3627 -f 5879//3630 5864//3611 5878//4022 -f 5869//3609 5884//3627 5885//3629 -f 5880//3617 5865//3613 5879//3630 -f 5870//3610 5885//3629 5886//3631 -f 5884//3627 5899//3646 5900//3632 -f 5895//3635 5880//3617 5894//3633 -f 5885//3629 5900//3632 5901//4023 -f 5896//3640 5881//3622 5895//3635 -f 5875//3636 5890//3654 5891//4024 -f 5886//3631 5901//4023 5902//3638 -f 5897//3657 5882//3639 5896//3640 -f 5876//4019 5891//4024 5892//3641 -f 5887//3620 5902//3638 5903//3642 -f 5882//3639 5897//3657 5898//3643 -f 5877//3623 5892//3641 5893//3644 -f 5888//4021 5903//3642 5904//3645 -f 5883//3625 5898//3643 5899//3646 -f 5894//3633 5879//3630 5893//3644 -f 5919//3666 5904//3645 5918//3647 -f 5914//3650 5899//3646 5913//3648 -f 5893//3644 5908//3661 5909//3649 -f 5915//3652 5900//3632 5914//3650 -f 5894//3633 5909//3649 5910//3651 -f 5916//3656 5901//4023 5915//3652 -f 5895//3635 5910//3651 5911//3653 -f 5890//3654 5905//4025 5906//3655 -f 5917//3660 5902//3638 5916//3656 -f 5896//3640 5911//3653 5912//3658 -f 5891//4024 5906//3655 5907//3659 -f 5918//3647 5903//3642 5917//3660 -f 5913//3648 5898//3643 5912//3658 -f 5892//3641 5907//3659 5908//3661 -f 5906//3655 5921//3675 5922//3662 -f 5933//3667 5918//3647 5932//3663 -f 5928//3668 5913//3648 5927//3664 -f 5907//3659 5922//3662 5923//3665 -f 5934//4026 5919//3666 5933//3667 -f 5929//3670 5914//3650 5928//3668 -f 5908//3661 5923//3665 5924//3669 -f 5930//3672 5915//3652 5929//3670 -f 5909//3649 5924//3669 5925//3671 -f 5931//3676 5916//3656 5930//3672 -f 5910//3651 5925//3671 5926//3673 -f 5905//4025 5920//3678 5921//3675 -f 5932//3663 5917//3660 5931//3676 -f 5911//3653 5926//3673 5927//3664 -f 5925//3671 5940//3690 5941//3677 -f 5920//3678 5935//3696 5936//3679 -f 5947//3683 5932//3663 5946//3680 -f 5926//3673 5941//3677 5942//3681 -f 5921//3675 5936//3679 5937//3682 -f 5948//3686 5933//3667 5947//3683 -f 5943//3687 5928//3668 5942//3681 -f 5922//3662 5937//3682 5938//3684 -f 5949//3703 5934//4026 5948//3686 -f 5944//3689 5929//3670 5943//3687 -f 5923//3665 5938//3684 5939//3688 -f 5945//3691 5930//3672 5944//3689 -f 5924//3669 5939//3688 5940//3690 -f 5946//3680 5931//3676 5945//3691 -f 5960//3694 5945//3691 5959//3692 -f 5939//3688 5954//3706 5955//3693 -f 5961//3698 5946//3680 5960//3694 -f 5940//3690 5955//3693 5956//3695 -f 5935//3696 5950//3715 5951//3697 -f 5962//4027 5947//3683 5961//3698 -f 5941//3677 5956//3695 5957//3699 -f 5936//3679 5951//3697 5952//3700 -f 5963//3704 5948//3686 5962//4027 -f 5958//3705 5943//3687 5957//3699 -f 5937//3682 5952//3700 5953//3702 -f 5964//3707 5949//3703 5963//3704 -f 5959//3692 5944//3689 5958//3705 -f 5938//3684 5953//3702 5954//3706 -f 5979//3726 5964//3707 5978//3708 -f 5974//3711 5959//3692 5973//3709 -f 5953//3702 5968//3721 5969//3710 -f 5975//3713 5960//3694 5974//3711 -f 5954//3706 5969//3710 5970//3712 -f 5976//3717 5961//3698 5975//3713 -f 5955//3693 5970//3712 5971//3714 -f 5966//3719 5951//3697 5965//4028 -f 5977//3720 5962//4027 5976//3717 -f 5956//3695 5971//3714 5972//3718 -f 5967//3724 5952//3700 5966//3719 -f 5978//3708 5963//3704 5977//3720 -f 5973//3709 5958//3705 5972//3718 -f 5952//3700 5967//3724 5968//3721 -f 5993//3727 5978//3708 5992//3722 -f 5988//3728 5973//3709 5987//3723 -f 5967//3724 5982//3740 5983//4029 -f 5994//3744 5979//3726 5993//3727 -f 5989//3730 5974//3711 5988//3728 -f 5968//3721 5983//4029 5984//3729 -f 5990//3732 5975//3713 5989//3730 -f 5969//3710 5984//3729 5985//3731 -f 5991//4030 5976//3717 5990//3732 -f 5970//3712 5985//3731 5986//3733 -f 5981//3736 5966//3719 5980//3734 -f 5992//3722 5977//3720 5991//4030 -f 5971//3714 5986//3733 5987//3723 -f 5982//3740 5967//3724 5981//3736 -f 5996//4031 5981//3736 5995//3737 -f 6007//4032 5992//3722 6006//3738 -f 5986//3733 6001//3751 6002//3739 -f 5997//3758 5982//3740 5996//4031 -f 6008//3745 5993//3727 6007//4032 -f 6003//3746 5988//3728 6002//3739 -f 5982//3740 5997//3758 5998//3743 -f 6009//3762 5994//3744 6008//3745 -f 6004//3748 5989//3730 6003//3746 -f 5983//4029 5998//3743 5999//4033 -f 6005//3750 5990//3732 6004//3748 -f 5984//3729 5999//4033 6000//3749 -f 6006//3738 5991//4030 6005//3750 -f 5985//3731 6000//3749 6001//3751 -f 5999//4033 6014//3765 6015//3752 -f 6021//3756 6006//3738 6020//3753 -f 6000//3749 6015//3752 6016//3754 -f 5995//3737 6010//3773 6011//3755 -f 6022//3760 6007//4032 6021//3756 -f 6001//3751 6016//3754 6017//3757 -f 5996//4031 6011//3755 6012//3759 -f 6023//3763 6008//3745 6022//3760 -f 6018//3764 6003//3746 6017//3757 -f 5997//3758 6012//3759 6013//3761 -f 6024//3780 6009//3762 6023//3763 -f 6019//3766 6004//3748 6018//3764 -f 5998//3743 6013//3761 6014//3765 -f 6020//3753 6005//3750 6019//3766 -f 6018//3764 6033//3779 6034//3767 -f 6029//3770 6014//3765 6028//3768 -f 6019//3766 6034//3767 6035//3769 -f 6030//3772 6015//3752 6029//3770 -f 6020//3753 6035//3769 6036//3771 -f 6031//3776 6016//3754 6030//3772 -f 6010//3773 6025//3792 6026//3774 -f 6021//3756 6036//3771 6037//3775 -f 6032//3783 6017//3757 6031//3776 -f 6011//3755 6026//3774 6027//3777 -f 6022//3760 6037//3775 6038//3778 -f 6017//3757 6032//3783 6033//3779 -f 6012//3759 6027//3777 6028//3768 -f 6023//3763 6038//3778 6039//3781 -f 6037//3775 6052//4034 6053//3782 -f 6032//3783 6047//3800 6048//3784 -f 6027//3777 6042//3796 6043//3785 -f 6038//3778 6053//3782 6054//3786 -f 6033//3779 6048//3784 6049//3787 -f 6044//3789 6029//3770 6043//3785 -f 6034//3767 6049//3787 6050//3788 -f 6045//3791 6030//3772 6044//3789 -f 6035//3769 6050//3788 6051//3790 -f 6046//3795 6031//3776 6045//3791 -f 6025//3792 6040//3797 6041//3793 -f 6036//3771 6051//3790 6052//4034 -f 6047//3800 6032//3783 6046//3795 -f 6026//3774 6041//3793 6042//3796 -f 6056//3802 6041//3793 6055//3798 -f 6051//3790 6066//3811 6067//3799 -f 6062//3818 6047//3800 6061//3801 -f 6057//3805 6042//3796 6056//3802 -f 6052//4034 6067//3799 6068//3803 -f 6047//3800 6062//3818 6063//3804 -f 6058//3808 6043//3785 6057//3805 -f 6053//3782 6068//3803 6069//3806 -f 6048//3784 6063//3804 6064//3807 -f 6059//3810 6044//3789 6058//3808 -f 6049//3787 6064//3807 6065//3809 -f 6060//3812 6045//3791 6059//3810 -f 6050//3788 6065//3809 6066//3811 -f 6061//3801 6046//3795 6060//3812 -f 6075//3815 6060//3812 6074//3813 -f 6065//3809 6080//3827 6081//3814 -f 6076//4035 6061//3801 6075//3815 -f 6071//3820 6056//3802 6070//3816 -f 6066//3811 6081//3814 6082//3817 -f 6077//3836 6062//3818 6076//4035 -f 6072//3823 6057//3805 6071//3820 -f 6067//3799 6082//3817 6083//3821 -f 6062//3818 6077//3836 6078//3822 -f 6073//3826 6058//3808 6072//3823 -f 6068//3803 6083//3821 6084//3824 -f 6063//3804 6078//3822 6079//3825 -f 6074//3813 6059//3810 6073//3826 -f 6064//3807 6079//3825 6080//3827 -f 6078//3822 6093//3840 6094//3828 -f 6089//3831 6074//3813 6088//3829 -f 6079//3825 6094//3828 6095//3830 -f 6090//3833 6075//3815 6089//3831 -f 6080//3827 6095//3830 6096//3832 -f 6091//3837 6076//4035 6090//3833 -f 6086//3838 6071//3820 6085//3834 -f 6081//3814 6096//3832 6097//4036 -f 6092//3844 6077//3836 6091//3837 -f 6087//3841 6072//3823 6086//3838 -f 6082//3817 6097//4036 6098//4037 -f 6077//3836 6092//3844 6093//3840 -f 6088//3829 6073//3826 6087//3841 -f 6083//3821 6098//4037 6099//3842 -f 6097//4036 6112//3855 6113//3843 -f 6092//3844 6107//3858 6108//3845 -f 6103//3849 6088//3829 6102//3846 -f 6098//4037 6113//3843 6114//3847 -f 6093//3840 6108//3845 6109//3848 -f 6104//3851 6089//3831 6103//3849 -f 6094//3828 6109//3848 6110//3850 -f 6105//3853 6090//3833 6104//3851 -f 6095//3830 6110//3850 6111//3852 -f 6106//4038 6091//3837 6105//3853 -f 6085//3834 6100//3870 6101//3854 -f 6096//3832 6111//3852 6112//3855 -f 6107//3858 6092//3844 6106//4038 -f 6086//3838 6101//3854 6102//3846 -f 6111//3852 6127//3868 6128//3857 -f 6123//3877 6107//3858 6122//3859 -f 6101//3854 6117//3871 6118//3860 -f 6112//3855 6128//3857 6129//3861 -f 6107//3858 6123//3877 6124//3862 -f 6119//3865 6103//3849 6118//3860 -f 6113//3843 6129//3861 6130//4039 -f 6108//3845 6124//3862 6125//3864 -f 6120//3867 6104//3851 6119//3865 -f 6109//3848 6125//3864 6126//3866 -f 6121//3869 6105//3853 6120//3867 -f 6110//3850 6126//3866 6127//3868 -f 6122//3859 6106//4038 6121//3869 -f 6100//3870 6116//4040 6117//3871 -f 6126//3866 6141//3885 6142//3872 -f 6137//3878 6122//3859 6136//3873 -f 6116//4040 6131//3892 6132//3875 -f 6127//3868 6142//3872 6143//3876 -f 6138//3895 6123//3877 6137//3878 -f 6117//3871 6132//3875 6133//3879 -f 6128//3857 6143//3876 6144//3880 -f 6123//3877 6138//3895 6139//3881 -f 6118//3860 6133//3879 6134//3882 -f 6129//3861 6144//3880 6145//3883 -f 6124//3862 6139//3881 6140//3884 -f 6135//3886 6120//3867 6134//3882 -f 6125//3864 6140//3884 6141//3885 -f 6136//3873 6121//3869 6135//3886 -f 6134//3882 6149//3899 6150//3887 -f 6156//3890 6141//3885 6155//3888 -f 6135//3886 6150//3887 6151//3889 -f 6157//3894 6142//3872 6156//3890 -f 6136//3873 6151//3889 6152//3891 -f 6147//4041 6132//3875 6146//3893 -f 6158//3898 6143//3876 6157//3894 -f 6137//3878 6152//3891 6153//3896 -f 6132//3875 6147//4041 6148//3897 -f 6159//3900 6144//3880 6158//3898 -f 6154//3901 6139//3881 6153//3896 -f 6133//3879 6148//3897 6149//3899 -f 6160//3904 6145//3883 6159//3900 -f 6155//3888 6140//3884 6154//3901 -f 6169//3906 6154//3901 6168//3902 -f 6164//3921 6149//3899 6163//3903 -f 6175//4042 6160//3904 6174//3905 -f 6170//3908 6155//3888 6169//3906 -f 6149//3899 6164//3921 6165//3907 -f 6171//3910 6156//3890 6170//3908 -f 6150//3887 6165//3907 6166//3909 -f 6172//3914 6157//3894 6171//3910 -f 6151//3889 6166//3909 6167//3911 -f 6162//3915 6147//4041 6161//3913 -f 6173//3916 6158//3898 6172//3914 -f 6152//3891 6167//3911 6168//3902 -f 6163//3903 6148//3897 6162//3915 -f 6174//3905 6159//3900 6173//3916 -f 6188//3920 6173//3916 6187//3917 -f 6167//3911 6182//3930 6183//3918 -f 6178//3922 6163//3903 6177//3919 -f 6189//3924 6174//3905 6188//3920 -f 6184//3925 6169//3906 6183//3918 -f 6179//3939 6164//3921 6178//3922 -f 6190//4044 6175//4042 6189//3924 -f 6185//3927 6170//3908 6184//3925 -f 6164//3921 6179//3939 6180//3926 -f 6186//3929 6171//3910 6185//3927 -f 6165//3907 6180//3926 6181//3928 -f 6187//3917 6172//3914 6186//3929 -f 6166//3909 6181//3928 6182//3930 -f 6177//3919 6162//3915 6176//3931 -f 6202//3935 6187//3917 6201//3932 -f 6181//3928 6196//3946 6197//3933 -f 6192//3937 6177//3919 6191//3934 -f 6203//4043 6188//3920 6202//3935 -f 6182//3930 6197//3933 6198//3936 -f 6193//4047 6178//3922 6192//3937 -f 6204//3942 6189//3924 6203//4043 -f 6199//3943 6184//3925 6198//3936 -f 6178//3922 6193//4047 6194//3940 -f 6205//3959 6190//4044 6204//3942 -f 6200//3945 6185//3927 6199//3943 -f 6179//3939 6194//3940 6195//3944 -f 6201//3932 6186//3929 6200//3945 -f 6180//3926 6195//3944 6196//3946 -f 6194//3940 6209//4048 6210//3947 -f 6216//4045 6201//3932 6215//3948 -f 6195//3944 6210//3947 6211//3949 -f 6217//3953 6202//3935 6216//4045 -f 6196//3946 6211//3949 6212//3951 -f 6191//3934 6206//4051 6207//4046 -f 6218//3957 6203//4043 6217//3953 -f 6197//3933 6212//3951 6213//3954 -f 6192//3937 6207//4046 6208//3956 -f 6219//4049 6204//3942 6218//3957 -f 6214//3961 6199//3943 6213//3954 -f 6193//4047 6208//3956 6209//4048 -f 6220//3964 6205//3959 6219//4049 -f 6215//3948 6200//3945 6214//3961 -f 6229//3966 6214//3961 6228//3962 -f 6208//3956 6223//3975 6224//4050 -f 6235//3982 6220//3964 6234//3965 -f 6230//3968 6215//3948 6229//3966 -f 6209//4048 6224//4050 6225//3967 -f 6231//3970 6216//4045 6230//3968 -f 6210//3947 6225//3967 6226//3969 -f 6232//4053 6217//3953 6231//3970 -f 6211//3949 6226//3969 6227//3971 -f 6206//4051 6221//3990 6222//4052 -f 6233//4054 6218//3957 6232//4053 -f 6212//3951 6227//3971 6228//3962 -f 6207//4046 6222//4052 6223//3975 -f 6234//3965 6219//4049 6233//4054 -f 6249//3980 6233//4054 6248//3977 -f 6227//3971 6243//3989 6244//3978 -f 6222//4052 6238//3991 6239//3979 -f 6250//3983 6234//3965 6249//3980 -f 6245//3984 6229//3966 6244//3978 -f 6223//3975 6239//3979 6240//3981 -f 6251//4001 6235//3982 6250//3983 -f 6246//3986 6230//3968 6245//3984 -f 6224//4050 6240//3981 6241//3985 -f 6247//3988 6231//3970 6246//3986 -f 6225//3967 6241//3985 6242//3987 -f 6248//3977 6232//4053 6247//3988 -f 6226//3969 6242//3987 6243//3989 -f 6221//3990 6237//3994 6238//3991 -f 6263//4055 6248//3977 6262//3992 -f 6242//3987 6257//4006 6258//3993 -f 6253//4056 6238//3991 6252//3995 -f 6264//3999 6249//3980 6263//4055 -f 6243//3989 6258//3993 6259//3997 -f 6254//4000 6239//3979 6253//4056 -f 6265//4002 6250//3983 6264//3999 -f 6260//4003 6245//3984 6259//3997 -f 6255//4009 6240//3981 6254//4000 -f 6266//4008 6251//4001 6265//4002 -f 6261//4005 6246//3986 6260//4003 -f 6240//3981 6255//4009 6256//4004 -f 6262//3992 6247//3988 6261//4005 -f 6241//3985 6256//4004 6257//4006 -f 6261//4005 5794//3550 5795//4013 -f 5790//3530 6257//4006 5789//3552 -f 6262//3992 5795//4013 5796//3536 -f 5791//3529 6258//3993 5790//3530 -f 5786//3532 6253//4056 5785//3533 -f 6263//4055 5796//3536 5797//3535 -f 5792//3538 6259//3997 5791//3529 -f 5787//3540 6254//4000 5786//3532 -f 6264//3999 5797//3535 5798//3542 -f 6259//3997 5792//3538 5793//3544 -f 5788//4012 6255//4009 5787//3540 -f 6265//4002 5798//3542 5799//3548 -f 6260//4003 5793//3544 5794//3550 -f 5789//3552 6256//4004 5788//4012 -o Nose_Sphere -v -0.159802 1.092958 -0.013143 -v -0.180371 1.079367 -0.014504 -v -0.198152 1.059956 -0.015819 -v -0.212461 1.035470 -0.017036 -v -0.224784 1.022868 -0.011991 -v -0.235916 0.992648 -0.011991 -v -0.242772 0.959858 -0.011991 -v -0.245086 0.925758 -0.011991 -v -0.242772 0.891657 -0.011991 -v -0.235916 0.858867 -0.011991 -v -0.224784 0.828648 -0.011991 -v -0.209802 0.802160 -0.011991 -v -0.191547 0.780422 -0.011991 -v -0.170720 0.764269 -0.011991 -v -0.148121 0.754323 -0.011991 -v -0.158929 1.093175 -0.020995 -v -0.178659 1.079792 -0.029908 -v -0.195666 1.060573 -0.038182 -v -0.209297 1.036256 -0.045498 -v -0.222859 1.022868 -0.045623 -v -0.233778 0.992648 -0.049360 -v -0.240501 0.959858 -0.051662 -v -0.242772 0.925758 -0.052439 -v -0.240501 0.891657 -0.051662 -v -0.233778 0.858867 -0.049360 -v -0.222859 0.828648 -0.045623 -v -0.208166 0.802160 -0.040592 -v -0.190261 0.780422 -0.034463 -v -0.169834 0.764269 -0.027470 -v -0.147670 0.754323 -0.019882 -v -0.157201 1.093534 -0.028495 -v -0.175268 1.080498 -0.044620 -v -0.190744 1.061598 -0.059539 -v -0.203033 1.037560 -0.072681 -v -0.217159 1.022868 -0.077962 -v -0.227444 0.992648 -0.085294 -v -0.233778 0.959858 -0.089809 -v -0.235916 0.925758 -0.091334 -v -0.233778 0.891657 -0.089809 -v -0.227444 0.858867 -0.085294 -v -0.217159 0.828648 -0.077962 -v -0.203318 0.802160 -0.068095 -v -0.186453 0.780422 -0.056071 -v -0.167211 0.764269 -0.042354 -v -0.146332 0.754323 -0.027470 -v -0.154683 1.094023 -0.035354 -v -0.170331 1.081457 -0.058074 -v -0.183576 1.062990 -0.079072 -v -0.193910 1.039332 -0.097541 -v -0.207903 1.022868 -0.107766 -v -0.217159 0.992648 -0.118410 -v -0.222859 0.959858 -0.124965 -v -0.224784 0.925758 -0.127179 -v -0.222859 0.891657 -0.124965 -v -0.217159 0.858867 -0.118410 -v -0.207903 0.828648 -0.107766 -v -0.195446 0.802160 -0.093441 -v -0.180268 0.780422 -0.075986 -v -0.162951 0.764269 -0.056071 -v -0.144160 0.754323 -0.034463 -v -0.151474 1.094623 -0.041308 -v -0.164035 1.082633 -0.069753 -v -0.174436 1.064697 -0.096028 -v -0.182277 1.041504 -0.119122 -v -0.195446 1.022868 -0.133889 -v -0.203318 0.992648 -0.147437 -v -0.208166 0.959858 -0.155780 -v -0.209802 0.925758 -0.158597 -v -0.208166 0.891657 -0.155780 -v -0.203318 0.858867 -0.147437 -v -0.195446 0.828648 -0.133889 -v -0.184853 0.802160 -0.115657 -v -0.171944 0.780422 -0.093441 -v -0.157217 0.764269 -0.068095 -v -0.141238 0.754323 -0.040592 -v -0.147696 1.095309 -0.046129 -v -0.156623 1.083979 -0.079210 -v -0.163676 1.066652 -0.109756 -v -0.168582 1.043993 -0.136595 -v -0.180268 1.022868 -0.155328 -v -0.186453 0.992648 -0.171259 -v -0.190261 0.959858 -0.181069 -v -0.191547 0.925758 -0.184381 -v -0.190261 0.891657 -0.181069 -v -0.186453 0.858867 -0.171259 -v -0.180268 0.828648 -0.155328 -v -0.171944 0.802160 -0.133889 -v -0.161802 0.780422 -0.107766 -v -0.150231 0.764269 -0.077962 -v -0.137676 0.754323 -0.045623 -v -0.143493 1.096057 -0.049631 -v -0.148381 1.085446 -0.086079 -v -0.151709 1.068781 -0.119729 -v -0.153352 1.046703 -0.149288 -v -0.162951 1.022868 -0.171259 -v -0.167211 0.992648 -0.188960 -v -0.169834 0.959858 -0.199860 -v -0.170720 0.925758 -0.203541 -v -0.169834 0.891657 -0.199860 -v -0.167211 0.858867 -0.188960 -v -0.162951 0.828648 -0.171259 -v -0.157217 0.802160 -0.147437 -v -0.150231 0.780422 -0.118410 -v -0.142261 0.764269 -0.085294 -v -0.133613 0.754323 -0.049360 -v -0.139029 1.096837 -0.051680 -v -0.139624 1.086976 -0.090098 -v -0.138996 1.071002 -0.125564 -v -0.137171 1.049529 -0.156714 -v -0.144160 1.022868 -0.181069 -v -0.146332 0.992648 -0.199860 -v -0.147670 0.959858 -0.211432 -v -0.148121 0.925758 -0.215339 -v -0.147670 0.891657 -0.211432 -v -0.146332 0.858867 -0.199860 -v -0.144160 0.828648 -0.181069 -v -0.141238 0.802160 -0.155780 -v -0.137676 0.780422 -0.124965 -v -0.133613 0.764269 -0.089809 -v -0.129204 0.754323 -0.051662 -v -0.134474 1.097619 -0.052197 -v -0.130689 1.088510 -0.091112 -v -0.126025 1.073229 -0.127035 -v -0.120661 1.052364 -0.158587 -v -0.124619 1.022868 -0.184381 -v -0.124619 0.992648 -0.203541 -v -0.124619 0.959858 -0.215339 -v -0.124619 0.925758 -0.219323 -v -0.124619 0.891657 -0.215339 -v -0.124619 0.858867 -0.203541 -v -0.124619 0.828648 -0.184381 -v -0.124619 0.802160 -0.158597 -v -0.124619 0.780422 -0.127178 -v -0.124619 0.764269 -0.091334 -v -0.124619 0.754323 -0.052439 -v -0.130004 1.098373 -0.051162 -v -0.121920 1.089989 -0.089081 -v -0.113294 1.075377 -0.124088 -v -0.104457 1.055098 -0.154836 -v -0.105078 1.022868 -0.181069 -v -0.102906 0.992648 -0.199860 -v -0.101569 0.959858 -0.211432 -v -0.101117 0.925758 -0.215339 -v -0.101569 0.891657 -0.211432 -v -0.102906 0.858867 -0.199860 -v -0.105078 0.828648 -0.181069 -v -0.108001 0.802160 -0.155780 -v -0.111562 0.780422 -0.124965 -v -0.115625 0.764269 -0.089809 -v -0.120034 0.754323 -0.051662 -v -0.125789 1.099071 -0.048614 -v -0.113653 1.091357 -0.084085 -v -0.101292 1.077363 -0.116834 -v -0.089182 1.057626 -0.145603 -v -0.086288 1.022868 -0.171259 -v -0.082027 0.992648 -0.188960 -v -0.079404 0.959858 -0.199860 -v -0.078518 0.925758 -0.203541 -v -0.079404 0.891657 -0.199860 -v -0.082027 0.858867 -0.188960 -v -0.086288 0.828648 -0.171259 -v -0.092021 0.802160 -0.147437 -v -0.099007 0.780422 -0.118410 -v -0.106977 0.764269 -0.085294 -v -0.115625 0.754323 -0.049360 -v -0.121993 1.099684 -0.044653 -v -0.106206 1.092562 -0.076314 -v -0.090481 1.079112 -0.105553 -v -0.075423 1.059851 -0.131245 -v -0.068970 1.022868 -0.155328 -v -0.062786 0.992648 -0.171259 -v -0.058977 0.959858 -0.181069 -v -0.057691 0.925758 -0.184381 -v -0.058977 0.891657 -0.181069 -v -0.062786 0.858867 -0.171259 -v -0.068970 0.828648 -0.155328 -v -0.077294 0.802160 -0.133889 -v -0.087436 0.780422 -0.107766 -v -0.099007 0.764269 -0.077962 -v -0.111562 0.754323 -0.045623 -v -0.118761 1.100191 -0.039430 -v -0.099866 1.093556 -0.066068 -v -0.081277 1.080555 -0.090678 -v -0.063708 1.061688 -0.112313 -v -0.053792 1.022868 -0.133889 -v -0.045920 0.992648 -0.147437 -v -0.041073 0.959858 -0.155780 -v -0.039436 0.925758 -0.158597 -v -0.041073 0.891657 -0.155780 -v -0.045920 0.858867 -0.147437 -v -0.053792 0.828648 -0.133889 -v -0.064385 0.802160 -0.115657 -v -0.077294 0.780422 -0.093441 -v -0.092021 0.764269 -0.068095 -v -0.108001 0.754323 -0.040592 -v -0.116217 1.100571 -0.033145 -v -0.094876 1.094301 -0.053741 -v -0.074032 1.081637 -0.072781 -v -0.054487 1.063065 -0.089535 -v -0.041335 1.022868 -0.107766 -v -0.032079 0.992648 -0.118410 -v -0.026379 0.959858 -0.124965 -v -0.024454 0.925758 -0.127178 -v -0.026379 0.891657 -0.124965 -v -0.032079 0.858867 -0.118410 -v -0.041335 0.828648 -0.107766 -v -0.053792 0.802160 -0.093441 -v -0.068970 0.780422 -0.075986 -v -0.086288 0.764269 -0.056071 -v -0.105078 0.754323 -0.034463 -v -0.114459 1.100810 -0.026041 -v -0.091427 1.094770 -0.039805 -v -0.069026 1.082317 -0.052550 -v -0.048115 1.063931 -0.063785 -v -0.032079 1.022868 -0.077962 -v -0.021794 0.992648 -0.085294 -v -0.015460 0.959858 -0.089809 -v -0.013322 0.925758 -0.091333 -v -0.015460 0.891657 -0.089809 -v -0.021794 0.858867 -0.085294 -v -0.032079 0.828648 -0.077962 -v -0.045920 0.802160 -0.068095 -v -0.062786 0.780422 -0.056071 -v -0.082027 0.764269 -0.042354 -v -0.102906 0.754323 -0.027470 -v -0.113554 1.100899 -0.018390 -v -0.089653 1.094943 -0.024797 -v -0.066450 1.082569 -0.030761 -v -0.044837 1.064251 -0.036054 -v -0.026379 1.022868 -0.045623 -v -0.015460 0.992648 -0.049360 -v -0.008737 0.959858 -0.051662 -v -0.006467 0.925758 -0.052439 -v -0.008737 0.891657 -0.051662 -v -0.015460 0.858867 -0.049360 -v -0.026379 0.828648 -0.045623 -v -0.041073 0.802160 -0.040592 -v -0.058977 0.780422 -0.034463 -v -0.079404 0.764269 -0.027470 -v -0.101569 0.754323 -0.019882 -v -0.113538 1.100833 -0.010486 -v -0.089622 1.094815 -0.009293 -v -0.066405 1.082383 -0.008253 -v -0.044779 1.064014 -0.007406 -v -0.024454 1.022868 -0.011991 -v -0.013322 0.992648 -0.011991 -v -0.006467 0.959858 -0.011991 -v -0.004152 0.925758 -0.011991 -v -0.006467 0.891657 -0.011991 -v -0.013322 0.858867 -0.011991 -v -0.024454 0.828648 -0.011991 -v -0.039436 0.802160 -0.011991 -v -0.057691 0.780422 -0.011991 -v -0.078518 0.764269 -0.011991 -v -0.101117 0.754323 -0.011991 -v -0.114411 1.100616 -0.002633 -v -0.091334 1.094390 0.006110 -v -0.068890 1.081765 0.014109 -v -0.047943 1.063228 0.021056 -v -0.026379 1.022868 0.021641 -v -0.015460 0.992648 0.025379 -v -0.008737 0.959858 0.027680 -v -0.006467 0.925758 0.028458 -v -0.008737 0.891657 0.027680 -v -0.015460 0.858867 0.025379 -v -0.026379 0.828648 0.021641 -v -0.041073 0.802160 0.016610 -v -0.058977 0.780422 0.010481 -v -0.079404 0.764269 0.003488 -v -0.101569 0.754323 -0.004100 -v -0.116139 1.100257 0.004867 -v -0.094724 1.093684 0.020822 -v -0.073812 1.080741 0.035467 -v -0.054207 1.061924 0.048239 -v -0.032079 1.022868 0.053980 -v -0.021794 0.992648 0.061312 -v -0.015460 0.959858 0.065827 -v -0.013322 0.925758 0.067352 -v -0.015460 0.891657 0.065827 -v -0.021794 0.858867 0.061312 -v -0.032079 0.828648 0.053980 -v -0.045920 0.802160 0.044113 -v -0.062786 0.780422 0.032089 -v -0.082027 0.764269 0.018372 -v -0.102906 0.754323 0.003488 -v -0.118657 1.099768 0.011726 -v -0.099662 1.092725 0.034276 -v -0.080980 1.079349 0.054999 -v -0.063330 1.060152 0.073099 -v -0.041335 1.022868 0.083784 -v -0.032079 0.992648 0.094428 -v -0.026379 0.959858 0.100983 -v -0.024454 0.925758 0.103197 -v -0.026379 0.891657 0.100983 -v -0.032079 0.858867 0.094428 -v -0.041335 0.828648 0.083784 -v -0.053792 0.802160 0.069459 -v -0.068970 0.780422 0.052004 -v -0.086288 0.764269 0.032089 -v -0.105078 0.754323 0.010481 -v -0.121866 1.099168 0.017680 -v -0.105957 1.091549 0.045956 -v -0.090120 1.077642 0.071955 -v -0.074963 1.057980 0.094680 -v -0.053792 1.022868 0.109907 -v -0.045920 0.992648 0.123455 -v -0.041073 0.959858 0.131798 -v -0.039436 0.925758 0.134615 -v -0.041073 0.891657 0.131798 -v -0.045920 0.858867 0.123455 -v -0.053792 0.828648 0.109907 -v -0.064385 0.802160 0.091675 -v -0.077294 0.780422 0.069459 -v -0.092021 0.764269 0.044113 -v -0.108001 0.754323 0.016610 -v -0.125645 1.098482 0.022501 -v -0.113369 1.090202 0.055412 -v -0.100880 1.075686 0.085684 -v -0.088658 1.055492 0.112153 -v -0.068970 1.022868 0.131346 -v -0.062786 0.992648 0.147277 -v -0.058977 0.959858 0.157087 -v -0.057691 0.925758 0.160399 -v -0.058977 0.891657 0.157087 -v -0.062786 0.858867 0.147277 -v -0.068970 0.828648 0.131346 -v -0.077294 0.802160 0.109907 -v -0.087436 0.780422 0.083784 -v -0.099007 0.764269 0.053980 -v -0.111562 0.754323 0.021641 -v -0.124619 0.750964 -0.011991 -v -0.129847 1.097734 0.026003 -v -0.121612 1.088736 0.062281 -v -0.112847 1.073557 0.095657 -v -0.103888 1.052782 0.124846 -v -0.086288 1.022868 0.147277 -v -0.082028 0.992648 0.164978 -v -0.079404 0.959858 0.175878 -v -0.078518 0.925758 0.179559 -v -0.079404 0.891657 0.175878 -v -0.082027 0.858867 0.164978 -v -0.086288 0.828648 0.147277 -v -0.092021 0.802160 0.123455 -v -0.099007 0.780422 0.094428 -v -0.106977 0.764269 0.061312 -v -0.115625 0.754323 0.025379 -v -0.134311 1.096954 0.028051 -v -0.130369 1.087206 0.066300 -v -0.125560 1.071337 0.101491 -v -0.120069 1.049955 0.132272 -v -0.105078 1.022868 0.157087 -v -0.102906 0.992648 0.175878 -v -0.101569 0.959858 0.187450 -v -0.101117 0.925758 0.191357 -v -0.101569 0.891657 0.187450 -v -0.102906 0.858867 0.175878 -v -0.105078 0.828648 0.157087 -v -0.108001 0.802160 0.131798 -v -0.111562 0.780422 0.100983 -v -0.115625 0.764269 0.065827 -v -0.120034 0.754323 0.027680 -v -0.138866 1.096172 0.028568 -v -0.139303 1.085672 0.067314 -v -0.138531 1.069110 0.102963 -v -0.136579 1.047121 0.134145 -v -0.124619 1.022868 0.160399 -v -0.124619 0.992648 0.179559 -v -0.124619 0.959858 0.191357 -v -0.124619 0.925758 0.195341 -v -0.124619 0.891657 0.191357 -v -0.124619 0.858867 0.179559 -v -0.124619 0.828648 0.160399 -v -0.124619 0.802160 0.134615 -v -0.124619 0.780422 0.103197 -v -0.124619 0.764269 0.067352 -v -0.124619 0.754323 0.028458 -v -0.143336 1.095418 0.027533 -v -0.148073 1.084193 0.065284 -v -0.151262 1.066962 0.100015 -v -0.152783 1.044387 0.130393 -v -0.144160 1.022868 0.157087 -v -0.146332 0.992648 0.175878 -v -0.147670 0.959858 0.187450 -v -0.148121 0.925758 0.191357 -v -0.147670 0.891657 0.187450 -v -0.146332 0.858867 0.175878 -v -0.144160 0.828648 0.157087 -v -0.141238 0.802160 0.131798 -v -0.137676 0.780422 0.100983 -v -0.133613 0.764269 0.065827 -v -0.129204 0.754323 0.027680 -v -0.147551 1.094720 0.024986 -v -0.156340 1.082824 0.060287 -v -0.163264 1.064975 0.092762 -v -0.168058 1.041859 0.121161 -v -0.162951 1.022868 0.147277 -v -0.167211 0.992648 0.164978 -v -0.169834 0.959858 0.175878 -v -0.170720 0.925758 0.179559 -v -0.169834 0.891657 0.175878 -v -0.167211 0.858867 0.164978 -v -0.162951 0.828648 0.147277 -v -0.157217 0.802160 0.123455 -v -0.150231 0.780422 0.094428 -v -0.142261 0.764269 0.061312 -v -0.133613 0.754323 0.025379 -v -0.151347 1.094107 0.021025 -v -0.163786 1.081620 0.052517 -v -0.174075 1.063227 0.081481 -v -0.181817 1.039634 0.106803 -v -0.180268 1.022868 0.131346 -v -0.186453 0.992648 0.147277 -v -0.190261 0.959858 0.157087 -v -0.191547 0.925758 0.160399 -v -0.190261 0.891657 0.157087 -v -0.186453 0.858867 0.147277 -v -0.180268 0.828648 0.131346 -v -0.171944 0.802160 0.109907 -v -0.161802 0.780422 0.083784 -v -0.150231 0.764269 0.053980 -v -0.137676 0.754323 0.021641 -v -0.154579 1.093600 0.015801 -v -0.170126 1.080626 0.042271 -v -0.183279 1.061784 0.066606 -v -0.193532 1.037797 0.087871 -v -0.195446 1.022868 0.109907 -v -0.203318 0.992648 0.123455 -v -0.208166 0.959858 0.131798 -v -0.209802 0.925758 0.134615 -v -0.208166 0.891657 0.131798 -v -0.203318 0.858867 0.123455 -v -0.195446 0.828648 0.109907 -v -0.184853 0.802160 0.091675 -v -0.171944 0.780422 0.069459 -v -0.157217 0.764269 0.044113 -v -0.141238 0.754323 0.016610 -v -0.157123 1.093220 0.009517 -v -0.175117 1.079881 0.029943 -v -0.190524 1.060701 0.048709 -v -0.202753 1.036419 0.065092 -v -0.207903 1.022868 0.083784 -v -0.217159 0.992648 0.094428 -v -0.222859 0.959858 0.100983 -v -0.224784 0.925758 0.103196 -v -0.222859 0.891657 0.100983 -v -0.217159 0.858867 0.094428 -v -0.207903 0.828648 0.083784 -v -0.195446 0.802160 0.069459 -v -0.180268 0.780422 0.052004 -v -0.162951 0.764269 0.032089 -v -0.144160 0.754323 0.010481 -v -0.137235 1.100206 -0.011786 -v -0.158881 1.092981 0.002412 -v -0.178565 1.079412 0.016007 -v -0.195530 1.060021 0.028477 -v -0.209125 1.035554 0.039343 -v -0.217159 1.022868 0.053980 -v -0.227444 0.992648 0.061312 -v -0.233778 0.959858 0.065827 -v -0.235916 0.925758 0.067351 -v -0.233778 0.891657 0.065827 -v -0.227444 0.858867 0.061312 -v -0.217159 0.828648 0.053980 -v -0.203318 0.802160 0.044113 -v -0.186453 0.780422 0.032089 -v -0.167211 0.764269 0.018372 -v -0.146332 0.754323 0.003488 -v -0.159786 1.092892 -0.005239 -v -0.180339 1.079239 0.000999 -v -0.198106 1.059770 0.006689 -v -0.212403 1.035233 0.011611 -v -0.222859 1.022868 0.021641 -v -0.233778 0.992648 0.025378 -v -0.240501 0.959858 0.027680 -v -0.242772 0.925758 0.028457 -v -0.240501 0.891657 0.027680 -v -0.233778 0.858867 0.025379 -v -0.222859 0.828648 0.021641 -v -0.208166 0.802160 0.016610 -v -0.190261 0.780422 0.010481 -v -0.169834 0.764269 0.003488 -v -0.147670 0.754323 -0.004100 -vn -0.514939 -0.857204 0.000000 -vn -0.695212 -0.718772 0.000000 -vn -0.686117 -0.723106 -0.079501 -vn -0.990661 -0.136143 0.000000 -vn -0.993225 0.000000 -0.116092 -vn -0.797174 0.602863 -0.031526 -vn -0.805200 0.592029 -0.033174 -vn -0.779168 0.617084 -0.109775 -vn -0.279244 -0.960204 0.000000 -vn -0.507035 -0.859920 -0.058229 -vn -0.961364 -0.275185 0.000000 -vn -0.983734 -0.137883 -0.114963 -vn -0.846065 0.533036 0.001099 -vn -0.907865 -0.419233 0.000000 -vn -0.953948 -0.278481 -0.111423 -vn -0.961364 0.275185 0.000000 -vn -0.953948 0.278481 -0.111423 -vn -0.822626 -0.568529 0.000000 -vn -0.899686 -0.423688 -0.104953 -vn -0.990661 0.136143 0.000000 -vn -0.983734 0.137883 -0.114963 -vn -0.813746 -0.573443 -0.094699 -vn -0.651082 0.758660 -0.021790 -vn -0.792688 0.599231 -0.112003 -vn -0.658254 -0.735832 -0.158757 -vn -0.971587 0.000000 -0.236671 -vn -0.752586 0.629994 -0.191534 -vn -0.274667 -0.961028 -0.030824 -vn -0.483169 -0.867855 -0.115482 -vn -0.961577 -0.143223 -0.234169 -vn -0.836879 0.538957 -0.095462 -vn -0.930296 -0.288522 -0.226386 -vn -0.930296 0.288522 -0.226386 -vn -0.873928 -0.437117 -0.212348 -vn -0.961577 0.143223 -0.234169 -vn -0.786065 -0.588031 -0.190497 -vn -0.640584 0.763726 -0.079470 -vn -0.763115 0.617847 -0.189459 -vn -0.736595 -0.611957 -0.287912 -vn -0.930540 0.000000 -0.366100 -vn -0.615345 0.776543 -0.135228 -vn -0.714682 0.647328 -0.264809 -vn -0.609943 -0.756096 -0.237159 -vn -0.714133 0.643666 -0.275063 -vn -0.260842 -0.963439 -0.061007 -vn -0.442885 -0.880154 -0.170660 -vn -0.919706 -0.152440 -0.361736 -vn -0.814631 0.545915 -0.195654 -vn -0.775445 0.555406 -0.300272 -vn -0.886135 -0.305734 -0.348186 -vn -0.886135 0.305734 -0.348186 -vn -0.826746 -0.459700 -0.324198 -vn -0.919706 0.152440 -0.361736 -vn -0.813318 0.330302 -0.478927 -vn -0.751091 -0.491134 -0.441115 -vn -0.849422 0.165838 -0.500931 -vn -0.660237 -0.644124 -0.386212 -vn -0.861263 0.000000 -0.508133 -vn -0.574755 0.796442 -0.187933 -vn -0.644642 0.686453 -0.336406 -vn -0.538469 -0.782250 -0.313150 -vn -0.657186 0.660909 -0.362316 -vn -0.237770 -0.967132 -0.089785 -vn -0.385571 -0.895505 -0.222205 -vn -0.849422 -0.165838 -0.500931 -vn -0.712607 0.567461 -0.412488 -vn -0.813318 -0.330302 -0.478927 -vn -0.736229 -0.183203 -0.651448 -vn -0.614612 0.582446 -0.531907 -vn -0.698904 -0.361461 -0.617084 -vn -0.698904 0.361461 -0.617084 -vn -0.636860 -0.529527 -0.560289 -vn -0.736198 0.183203 -0.651448 -vn -0.550523 -0.681631 -0.481918 -vn -0.748650 0.000000 -0.662923 -vn -0.518143 0.822077 -0.236000 -vn -0.549821 0.732719 -0.400983 -vn -0.441054 -0.811365 -0.383557 -vn -0.572985 0.682669 -0.453413 -vn -0.205603 -0.971679 -0.116184 -vn -0.310953 -0.911832 -0.267953 -vn -0.316080 -0.838862 -0.443129 -vn -0.572100 0.000000 -0.820154 -vn -0.451399 0.706778 -0.544633 -vn -0.164708 -0.976440 -0.139256 -vn -0.219672 -0.926633 -0.305032 -vn -0.560656 -0.202704 -0.802850 -vn -0.467483 0.598224 -0.650777 -vn -0.526963 -0.395459 -0.752251 -vn -0.526963 0.395459 -0.752251 -vn -0.473006 -0.569720 -0.672018 -vn -0.560656 0.202704 -0.802820 -vn -0.401654 -0.718986 -0.567186 -vn -0.444960 0.851497 -0.277322 -vn -0.428205 0.781823 -0.453139 -vn -0.213813 -0.747581 -0.628773 -vn -0.316630 0.000000 -0.948515 -vn -0.355571 0.882046 -0.309061 -vn -0.281625 0.827570 -0.485580 -vn -0.165960 -0.859004 -0.484298 -vn -0.288858 0.732231 -0.616718 -vn -0.115726 -0.980651 -0.157720 -vn -0.114139 -0.937071 -0.329844 -vn -0.309336 -0.219367 -0.925291 -vn -0.266823 0.602985 -0.751793 -vn -0.288247 -0.423780 -0.858638 -vn -0.288247 0.423780 -0.858638 -vn -0.255470 -0.601917 -0.756554 -vn -0.309336 0.219367 -0.925291 -vn 0.000000 -0.614490 -0.788903 -vn 0.000000 0.226112 -0.974090 -vn 0.000000 -0.758446 -0.651692 -vn -0.252144 0.910459 -0.327799 -vn -0.118686 0.863002 -0.491012 -vn 0.000000 -0.866451 -0.499191 -vn -0.069491 0.744591 -0.663869 -vn -0.059969 -0.983581 -0.170080 -vn 0.000000 -0.940886 -0.338694 -vn 0.000000 -0.226112 -0.974090 -vn 0.000000 -0.435102 -0.900357 -vn 0.000000 0.435102 -0.900357 -vn -0.006378 0.592059 -0.805841 -vn 0.165624 0.732536 -0.660237 -vn 0.255470 -0.601917 -0.756554 -vn 0.260140 0.562822 -0.784539 -vn 0.213813 -0.747581 -0.628773 -vn 0.288247 0.423780 -0.858638 -vn 0.165960 -0.859004 -0.484268 -vn 0.309336 0.219367 -0.925291 -vn -0.139927 0.933470 -0.330149 -vn -0.027406 0.948698 -0.314890 -vn 0.114139 -0.937071 -0.329844 -vn 0.309336 -0.219367 -0.925291 -vn 0.045106 0.883175 -0.466811 -vn 0.000000 -0.984649 -0.174505 -vn 0.059969 -0.983581 -0.170080 -vn 0.288247 -0.423780 -0.858638 -vn 0.316630 0.000000 -0.948515 -vn 0.560656 -0.202704 -0.802820 -vn 0.194006 0.887753 -0.417402 -vn 0.115726 -0.980651 -0.157720 -vn 0.526963 -0.395489 -0.752251 -vn 0.381359 0.704642 -0.598346 -vn 0.473006 -0.569720 -0.672018 -vn 0.490677 0.517380 -0.701071 -vn 0.401654 -0.718986 -0.567186 -vn 0.526963 0.395459 -0.752251 -vn 0.316080 -0.838862 -0.443129 -vn 0.560656 0.202704 -0.802820 -vn 0.076815 0.955657 -0.284249 -vn 0.219672 -0.926633 -0.305032 -vn 0.441054 -0.811365 -0.383557 -vn 0.572100 0.000000 -0.820154 -vn 0.736229 0.183203 -0.651448 -vn 0.167150 0.955687 -0.242195 -vn 0.310953 -0.911832 -0.267953 -vn 0.736229 -0.183203 -0.651448 -vn 0.318369 0.880520 -0.351115 -vn 0.164708 -0.976440 -0.139225 -vn 0.698904 -0.361461 -0.617084 -vn 0.548967 0.670980 -0.498367 -vn 0.636860 -0.529527 -0.560289 -vn 0.662526 0.470107 -0.583117 -vn 0.550523 -0.681631 -0.481918 -vn 0.698904 0.361461 -0.617084 -vn 0.660237 -0.644124 -0.386212 -vn 0.813318 0.330302 -0.478927 -vn 0.538469 -0.782250 -0.313150 -vn 0.748650 0.000000 -0.662923 -vn 0.849422 0.165838 -0.500931 -vn 0.240852 0.951262 -0.192419 -vn 0.385571 -0.895505 -0.222205 -vn 0.849422 -0.165838 -0.500931 -vn 0.415357 0.866909 -0.275552 -vn 0.205603 -0.971679 -0.116184 -vn 0.813318 -0.330302 -0.478927 -vn 0.665120 0.640492 -0.383831 -vn 0.751091 -0.491134 -0.441115 -vn 0.778466 0.431745 -0.455550 -vn 0.739006 0.617817 -0.268532 -vn 0.826746 -0.459700 -0.324198 -vn 0.851558 0.406201 -0.331370 -vn 0.736595 -0.611957 -0.287912 -vn 0.886135 0.305734 -0.348186 -vn 0.609943 -0.756096 -0.237159 -vn 0.861263 0.000000 -0.508133 -vn 0.919706 0.152440 -0.361736 -vn 0.297037 0.944823 -0.137852 -vn 0.442885 -0.880154 -0.170660 -vn 0.919706 -0.152440 -0.361736 -vn 0.485946 0.851711 -0.195868 -vn 0.237770 -0.967132 -0.089785 -vn 0.886135 -0.305734 -0.348186 -vn 0.930540 0.000000 -0.366100 -vn 0.961577 -0.143223 -0.234169 -vn 0.532701 0.838435 -0.115024 -vn 0.260842 -0.963439 -0.061007 -vn 0.930296 -0.288522 -0.226386 -vn 0.780816 0.604541 -0.157598 -vn 0.873928 -0.437117 -0.212348 -vn 0.894131 0.393170 -0.214240 -vn 0.786065 -0.588031 -0.190497 -vn 0.930296 0.288522 -0.226386 -vn 0.658254 -0.735832 -0.158757 -vn 0.961577 0.143223 -0.234169 -vn 0.335795 0.938475 -0.080599 -vn 0.483169 -0.867855 -0.115482 -vn 0.686117 -0.723106 -0.079501 -vn 0.971587 0.000000 -0.236671 -vn 0.983734 0.137883 -0.114963 -vn 0.357494 0.933622 -0.022156 -vn 0.507035 -0.859920 -0.058229 -vn 0.983734 -0.137883 -0.114963 -vn 0.557939 0.829157 -0.034425 -vn 0.274667 -0.961028 -0.030824 -vn 0.953948 -0.278481 -0.111423 -vn 0.797754 0.600757 -0.051546 -vn 0.899686 -0.423688 -0.104953 -vn 0.914457 0.391186 -0.103427 -vn 0.813746 -0.573443 -0.094699 -vn 0.953948 0.278481 -0.111423 -vn 0.822626 -0.568529 0.000000 -vn 0.961364 0.275185 0.000000 -vn 0.695212 -0.718772 0.000000 -vn 0.993225 0.000000 -0.116092 -vn 0.990661 0.136143 0.000000 -vn 0.362560 0.931211 0.036378 -vn 0.514939 -0.857204 0.000000 -vn 0.990661 -0.136143 0.000000 -vn 0.563280 0.824976 0.045381 -vn 0.279244 -0.960204 0.000000 -vn 0.961364 -0.275185 0.000000 -vn 0.793847 0.605945 0.050661 -vn 0.907865 -0.419233 0.000000 -vn 0.916959 0.398907 0.003296 -vn 0.953948 -0.278481 0.111423 -vn 0.953948 0.278481 0.111423 -vn 0.899686 -0.423688 0.104953 -vn 0.983734 0.137883 0.114963 -vn 0.813746 -0.573443 0.094699 -vn 0.993225 0.000000 0.116092 -vn 0.549303 0.826289 0.124302 -vn 0.686117 -0.723106 0.079501 -vn 0.770409 0.619465 0.150639 -vn 0.507035 -0.859920 0.058229 -vn 0.983734 -0.137883 0.114963 -vn 0.723502 0.646840 0.240974 -vn 0.274667 -0.961028 0.030824 -vn 0.483169 -0.867855 0.115482 -vn 0.961577 -0.143223 0.234169 -vn 0.903134 0.415326 0.108646 -vn 0.930296 -0.288522 0.226386 -vn 0.930296 0.288522 0.226386 -vn 0.873928 -0.437117 0.212348 -vn 0.961577 0.143223 0.234169 -vn 0.786065 -0.588031 0.190497 -vn 0.971587 0.000000 0.236671 -vn 0.351177 0.931547 0.094089 -vn 0.515458 0.832759 0.201941 -vn 0.658254 -0.735832 0.158757 -vn 0.930540 0.000000 0.366100 -vn 0.323252 0.934324 0.149998 -vn 0.460219 0.843257 0.277657 -vn 0.609943 -0.756096 0.237159 -vn 0.647175 0.680319 0.343974 -vn 0.260842 -0.963439 0.061007 -vn 0.442885 -0.880154 0.170660 -vn 0.919706 -0.152440 0.361736 -vn 0.876583 0.433119 0.209693 -vn 0.826838 0.458083 0.326304 -vn 0.886135 -0.305734 0.348186 -vn 0.886135 0.305734 0.348186 -vn 0.826746 -0.459700 0.324198 -vn 0.919706 0.152440 0.361736 -vn 0.736564 -0.611957 0.287912 -vn 0.751091 -0.491134 0.441115 -vn 0.849422 0.165838 0.500931 -vn 0.660237 -0.644124 0.386212 -vn 0.861263 0.000000 0.508133 -vn 0.278512 0.938719 0.202887 -vn 0.381359 0.855708 0.349712 -vn 0.538469 -0.782250 0.313150 -vn 0.549120 0.711600 0.438215 -vn 0.237770 -0.967132 0.089785 -vn 0.385571 -0.895505 0.222205 -vn 0.849422 -0.165838 0.500931 -vn 0.748222 0.495621 0.440962 -vn 0.813318 -0.330302 0.478927 -vn 0.813318 0.330302 0.478927 -vn 0.698904 -0.361461 0.617084 -vn 0.698904 0.361461 0.617084 -vn 0.636860 -0.529527 0.560289 -vn 0.736229 0.183203 0.651448 -vn 0.550523 -0.681631 0.481918 -vn 0.748650 0.000000 0.662923 -vn 0.216742 0.943327 0.251228 -vn 0.276742 0.866787 0.414777 -vn 0.441054 -0.811365 0.383557 -vn 0.417280 0.741905 0.524796 -vn 0.205603 -0.971679 0.116184 -vn 0.310953 -0.911832 0.267953 -vn 0.736229 -0.183203 0.651448 -vn 0.632618 0.537614 0.557390 -vn 0.245094 0.754112 0.609241 -vn 0.164708 -0.976440 0.139225 -vn 0.219672 -0.926633 0.305032 -vn 0.560656 -0.202704 0.802820 -vn 0.458968 0.587359 0.666555 -vn 0.526963 -0.395459 0.752251 -vn 0.526963 0.395459 0.752251 -vn 0.473006 -0.569720 0.672018 -vn 0.560656 0.202704 0.802850 -vn 0.401654 -0.718986 0.567186 -vn 0.572100 0.000000 0.820154 -vn 0.138066 0.946104 0.292856 -vn 0.145878 0.871914 0.467391 -vn 0.316080 -0.838862 0.443129 -vn 0.316630 0.000000 0.948515 -vn 0.043703 0.944731 0.324839 -vn -0.007447 0.865871 0.500168 -vn 0.165960 -0.859004 0.484298 -vn 0.058351 0.751823 0.656728 -vn 0.115726 -0.980651 0.157720 -vn 0.114139 -0.937071 0.329844 -vn 0.309336 -0.219367 0.925291 -vn 0.288247 -0.423780 0.858638 -vn 0.288247 0.423780 0.858638 -vn 0.255470 -0.601917 0.756554 -vn 0.309336 0.219367 0.925291 -vn 0.213813 -0.747581 0.628773 -vn 0.000000 -0.614490 0.788903 -vn 0.000000 0.226112 0.974090 -vn 0.000000 -0.758446 0.651692 -vn -0.063234 0.936918 0.343730 -vn -0.172887 0.845149 0.505753 -vn 0.000000 -0.866451 0.499191 -vn -0.161382 0.734306 0.659291 -vn 0.059969 -0.983581 0.170080 -vn 0.000000 -0.940886 0.338694 -vn 0.000000 -0.226112 0.974090 -vn 0.249763 0.628559 0.736534 -vn 0.000000 -0.435102 0.900357 -vn 0.000000 0.435102 0.900357 -vn -0.255470 -0.601917 0.756554 -vn 0.002136 0.641591 0.767022 -vn -0.245430 0.631153 0.735771 -vn -0.213813 -0.747581 0.628773 -vn -0.288247 0.423780 0.858638 -vn -0.165960 -0.859004 0.484268 -vn -0.309336 0.219367 0.925291 -vn -0.176702 0.921354 0.346141 -vn -0.287942 0.898648 0.330821 -vn -0.114139 -0.937071 0.329844 -vn -0.309336 -0.219367 0.925291 -vn -0.334208 0.810236 0.481399 -vn 0.000000 -0.984649 0.174505 -vn -0.059969 -0.983581 0.170080 -vn -0.288247 -0.423780 0.858638 -vn -0.368816 0.696921 0.615009 -vn -0.115726 -0.980651 0.157720 -vn -0.526963 -0.395459 0.752251 -vn -0.539537 0.650319 0.534715 -vn -0.473006 -0.569720 0.672018 -vn -0.456343 0.603473 0.653859 -vn -0.401654 -0.718986 0.567186 -vn -0.526963 0.395459 0.752251 -vn -0.316080 -0.838862 0.443129 -vn -0.316630 0.000000 0.948515 -vn -0.560656 0.202704 0.802820 -vn -0.388684 0.871120 0.299997 -vn -0.219672 -0.926633 0.305032 -vn -0.560656 -0.202704 0.802820 -vn -0.476333 0.765984 0.431654 -vn -0.474075 0.841914 0.257698 -vn -0.310953 -0.911832 0.267953 -vn -0.572100 0.000000 0.820154 -vn -0.736229 -0.183203 0.651448 -vn -0.591449 0.719016 0.364910 -vn -0.164708 -0.976440 0.139225 -vn -0.698904 -0.361461 0.617084 -vn -0.664083 0.607868 0.435255 -vn -0.636860 -0.529527 0.560289 -vn -0.614277 0.571032 0.544542 -vn -0.550523 -0.681631 0.481918 -vn -0.698904 0.361461 0.617084 -vn -0.441054 -0.811365 0.383557 -vn -0.736229 0.183203 0.651448 -vn -0.813318 0.330302 0.478927 -vn -0.538469 -0.782250 0.313150 -vn -0.748650 0.000000 0.662923 -vn -0.849422 0.165838 0.500931 -vn -0.542253 0.814112 0.207648 -vn -0.385571 -0.895505 0.222205 -vn -0.849422 -0.165838 0.500931 -vn -0.678640 0.675253 0.288827 -vn -0.205603 -0.971679 0.116184 -vn -0.813318 -0.330302 0.478927 -vn -0.744896 0.579577 0.330424 -vn -0.751091 -0.491134 0.441115 -vn -0.721854 0.544542 0.427045 -vn -0.660237 -0.644124 0.386212 -vn -0.826746 -0.459700 0.324198 -vn -0.789148 0.529160 0.311686 -vn -0.736595 -0.611957 0.287912 -vn -0.886135 0.305734 0.348186 -vn -0.609943 -0.756096 0.237159 -vn -0.861263 0.000000 0.508133 -vn -0.919706 0.152440 0.361736 -vn -0.593280 0.790338 0.152837 -vn -0.442885 -0.880154 0.170660 -vn -0.919706 -0.152440 0.361736 -vn -0.740440 0.638844 0.208716 -vn -0.237770 -0.967132 0.089785 -vn -0.886135 -0.305734 0.348186 -vn -0.789636 0.569292 0.228828 -vn -0.260842 -0.963439 0.061007 -vn -0.930296 -0.288522 0.226386 -vn -0.807459 0.574297 0.134648 -vn -0.873928 -0.437117 0.212348 -vn -0.826899 0.524644 0.202399 -vn -0.786065 -0.588031 0.190497 -vn -0.930296 0.288522 0.226386 -vn -0.658254 -0.735832 0.158757 -vn -0.930540 0.000000 0.366100 -vn -0.961577 0.143223 0.234169 -vn -0.627888 0.772423 0.095370 -vn -0.483169 -0.867855 0.115482 -vn -0.961577 -0.143223 0.234169 -vn -0.780328 0.612171 0.127537 -vn -0.646931 0.761650 0.036775 -vn -0.507035 -0.859920 0.058199 -vn -0.971587 0.000000 0.236671 -vn -0.983734 -0.137883 0.114963 -vn -0.801294 0.596393 0.046724 -vn -0.274667 -0.961028 0.030824 -vn -0.953948 -0.278481 0.111423 -vn -0.807581 0.587695 0.048647 -vn -0.899686 -0.423688 0.104953 -vn -0.843806 0.527329 0.099399 -vn -0.813746 -0.573443 0.094699 -vn -0.953948 0.278481 0.111423 -vn -0.686117 -0.723106 0.079501 -vn -0.983734 0.137883 0.114963 -vn -0.993225 0.000000 0.116092 -vn -0.436445 0.899686 -0.007599 -vn -0.430372 0.901822 -0.038118 -vn -0.415540 0.907041 -0.067476 -vn -0.391919 0.915067 -0.094852 -vn -0.359569 0.925413 -0.119358 -vn -0.318857 0.937376 -0.140019 -vn -0.270363 0.950072 -0.155644 -vn -0.215308 0.962523 -0.164800 -vn -0.156194 0.973693 -0.165838 -vn -0.097232 0.982604 -0.158025 -vn -0.042512 0.988861 -0.142582 -vn 0.005341 0.992584 -0.121403 -vn 0.045167 0.994324 -0.096133 -vn 0.076144 0.994751 -0.067965 -vn 0.097903 0.994446 -0.037965 -vn 0.110294 0.993866 -0.007080 -vn 0.113285 0.993255 0.023957 -vn 0.106937 0.992767 0.054476 -vn 0.091281 0.992279 0.083865 -vn 0.066408 0.991546 0.111301 -vn 0.032533 0.990173 0.135899 -vn -0.009735 0.987579 0.156621 -vn -0.059664 0.983215 0.172338 -vn -0.115696 0.976531 0.181555 -vn -0.175146 0.967437 0.182592 -vn -0.233772 0.956450 0.174749 -vn -0.287484 0.944426 0.159246 -vn -0.333995 0.932401 0.138005 -vn -0.372204 0.921262 0.112644 -vn -0.401654 0.911863 0.084414 -vn -0.422163 0.904843 0.054384 -vn -0.433729 0.900723 0.023408 -vn -0.168279 0.985687 0.008484 -usemtl SkinColor -s 1 -f 6280//4057 6279//4058 6294//4059 -f 6275//4060 6274//2918 6289//4061 -f 6270//4062 6269//4063 6285//4064 -f 6281//4065 6280//4057 6295//4066 -f 6276//4067 6275//4060 6290//4068 -f 6271//4069 6270//4062 6285//4064 -f 6277//4070 6276//4067 6291//4071 -f 6272//4072 6271//4069 6287//4073 -f 6278//4074 6277//4070 6292//4075 -f 6273//4076 6272//4072 6288//4077 -f 6279//4058 6278//4074 6293//4078 -f 6274//2918 6273//4076 6289//4061 -f 6269//4063 6268//4079 6284//4080 -f 6295//4066 6294//4059 6309//4081 -f 6290//4068 6289//4061 6304//4082 -f 6285//4064 6284//4080 6300//4083 -f 6296//4084 6295//4066 6310//4085 -f 6291//4071 6290//4068 6305//4086 -f 6286//4087 6285//4064 6300//4083 -f 6292//4075 6291//4071 6306//4088 -f 6287//4073 6286//4087 6302//4089 -f 6293//4078 6292//4075 6307//4090 -f 6288//4077 6287//4073 6303//4091 -f 6294//4059 6293//4078 6308//4092 -f 6289//4061 6288//4077 6304//4082 -f 6284//4080 6283//4093 6299//4094 -f 6309//4081 6308//4092 6323//4095 -f 6304//4082 6303//4091 6319//4096 -f 6299//4094 6298//4097 6314//4098 -f 6310//4085 6309//4081 6324//4099 -f 6305//4086 6304//4082 6319//4096 -f 6300//4083 6299//4094 6315//4100 -f 6311//4101 6310//4085 6325//4102 -f 6306//4088 6305//4086 6320//4103 -f 6301//4104 6300//4083 6316//4105 -f 6307//4090 6306//4088 6321//4106 -f 6302//4089 6301//4104 6317//4107 -f 6308//4092 6307//4090 6322//4108 -f 6303//4091 6302//4089 6318//4109 -f 6317//4107 6316//4105 6332//4110 -f 6323//4095 6322//4108 6337//4111 -f 6318//4109 6317//4107 6333//4112 -f 6324//4099 6323//4095 6338//4113 -f 6319//4096 6318//4109 6334//4114 -f 6314//4098 6313//4115 6329//4116 -f 6325//4102 6324//4099 6339//4117 -f 6320//4103 6319//4096 6334//4114 -f 6315//4100 6314//4098 6330//4118 -f 6326//4119 6325//4102 6340//4120 -f 6321//4106 6320//4103 6335//4121 -f 6316//4105 6315//4100 6331//4122 -f 6322//4108 6321//4106 6336//4123 -f 6336//4123 6335//4121 6350//4124 -f 6331//4122 6330//4118 6346//4125 -f 6337//4111 6336//4123 6351//4126 -f 6332//4110 6331//4122 6347//4127 -f 6338//4113 6337//4111 6352//4128 -f 6333//4112 6332//4110 6348//4129 -f 6339//4117 6338//4113 6353//4130 -f 6334//4114 6333//4112 6349//4131 -f 6329//4116 6328//4132 6344//4133 -f 6340//4120 6339//4117 6354//4134 -f 6335//4121 6334//4114 6349//4131 -f 6330//4118 6329//4116 6345//4135 -f 6341//4136 6340//4120 6355//4137 -f 6355//4137 6354//4134 6369//4138 -f 6350//4124 6349//4131 6364//4139 -f 6345//4135 6344//4133 6360//4140 -f 6356//4141 6355//4137 6370//4142 -f 6351//4126 6350//4124 6365//4143 -f 6346//4125 6345//4135 6361//4144 -f 6352//4128 6351//4126 6366//4145 -f 6347//4127 6346//4125 6362//4146 -f 6353//4130 6352//4128 6367//4147 -f 6348//4129 6347//4127 6363//4148 -f 6354//4134 6353//4130 6368//4149 -f 6349//4131 6348//4129 6364//4139 -f 6344//4133 6343//4150 6359//4151 -f 6369//4138 6368//4149 6383//4152 -f 6364//4139 6363//4148 6379//4153 -f 6359//4151 6358//4154 6374//4155 -f 6370//4142 6369//4138 6384//4156 -f 6365//4143 6364//4139 6379//4153 -f 6360//4140 6359//4151 6375//4157 -f 6371//4158 6370//4142 6385//4159 -f 6366//4145 6365//4143 6380//4160 -f 6361//4144 6360//4140 6376//4161 -f 6367//4147 6366//4145 6381//4162 -f 6362//4146 6361//4144 6377//4163 -f 6368//4149 6367//4147 6382//4164 -f 6363//4148 6362//4146 6378//4165 -f 6383//4152 6382//4164 6397//4166 -f 6378//4165 6377//4163 6393//4167 -f 6384//4156 6383//4152 6398//4168 -f 6379//4153 6378//4165 6394//3044 -f 6374//4155 6373//4169 6389//4170 -f 6385//4159 6384//4156 6399//4171 -f 6380//4160 6379//4153 6394//3044 -f 6375//4157 6374//4155 6390//4172 -f 6386//4173 6385//4159 6400//4174 -f 6381//4162 6380//4160 6395//4175 -f 6376//4161 6375//4157 6390//4172 -f 6382//4164 6381//4162 6396//4176 -f 6377//4163 6376//4161 6392//4177 -f 6391//4178 6390//4172 6405//4179 -f 6397//4166 6396//4176 6412//4180 -f 6392//4177 6391//4178 6406//4181 -f 6398//4168 6397//4166 6413//4182 -f 6393//4167 6392//4177 6407//4183 -f 6399//4171 6398//4168 6414//4184 -f 6394//3044 6393//4167 6408//4185 -f 6389//4170 6388//4186 6403//4187 -f 6400//4174 6399//4171 6415//4188 -f 6395//4175 6394//3044 6410//4189 -f 6390//4172 6389//4170 6404//4190 -f 6401//4191 6400//4174 6416//4192 -f 6396//4176 6395//4175 6411//4193 -f 6410//4189 6409//4194 6425//4195 -f 6405//4179 6404//4190 6419//4196 -f 6416//4192 6415//4188 6431//4197 -f 6411//4193 6410//4189 6426//4198 -f 6406//4181 6405//4179 6420//4199 -f 6412//4180 6411//4193 6427//4200 -f 6407//4183 6406//4181 6421//4201 -f 6413//4182 6412//4180 6428//4202 -f 6408//4185 6407//4183 6422//4203 -f 6414//4184 6413//4182 6429//4204 -f 6409//4194 6408//4185 6423//4205 -f 6404//4190 6403//4187 6418//4206 -f 6415//4188 6414//4184 6430//4207 -f 6429//4204 6428//4202 6444//4208 -f 6424//4209 6423//4205 6438//4210 -f 6419//4196 6418//4206 6433//4211 -f 6430//4207 6429//4204 6445//4212 -f 6425//4195 6424//4209 6440//4213 -f 6420//4199 6419//4196 6434//4214 -f 6431//4197 6430//4207 6446//4215 -f 6426//4198 6425//4195 6441//4216 -f 6421//4201 6420//4199 6435//4217 -f 6427//4200 6426//4198 6442//4218 -f 6422//4203 6421//4201 6436//4219 -f 6428//4202 6427//4200 6443//4220 -f 6423//4205 6422//4203 6437//4221 -f 6443//4220 6442//4218 6458//4222 -f 6438//4210 6437//4221 6452//4223 -f 6444//4208 6443//4220 6459//4224 -f 6439//4225 6438//4210 6453//4226 -f 6434//4214 6433//4211 6448//4227 -f 6445//4212 6444//4208 6460//4228 -f 6440//4213 6439//4225 6455//4229 -f 6435//4217 6434//4214 6449//4230 -f 6446//4215 6445//4212 6461//4231 -f 6441//4216 6440//4213 6456//4232 -f 6436//4219 6435//4217 6450//4233 -f 6442//4218 6441//4216 6457//4234 -f 6437//4221 6436//4219 6451//4235 -f 6451//4235 6450//4233 6465//4236 -f 6457//4234 6456//4232 6472//4237 -f 6452//4223 6451//4235 6466//4238 -f 6458//4222 6457//4234 6473//4239 -f 6453//4226 6452//4223 6467//4240 -f 6459//4224 6458//4222 6474//4241 -f 6454//4242 6453//4226 6468//4243 -f 6449//4230 6448//4227 6463//4244 -f 6460//4228 6459//4224 6475//4245 -f 6455//4229 6454//4242 6470//4246 -f 6450//4233 6449//4230 6464//4247 -f 6461//4231 6460//4228 6476//4248 -f 6456//4232 6455//4229 6471//4249 -f 6470//4246 6469//4250 6485//4251 -f 6465//4236 6464//4247 6479//4252 -f 6476//4248 6475//4245 6491//4253 -f 6471//4249 6470//4246 6486//4254 -f 6466//4238 6465//4236 6480//4255 -f 6472//4237 6471//4249 6487//4256 -f 6467//4240 6466//4238 6481//4257 -f 6473//4239 6472//4237 6488//4258 -f 6468//4243 6467//4240 6482//4259 -f 6474//4241 6473//4239 6489//4260 -f 6469//4250 6468//4243 6483//4261 -f 6464//4247 6463//4244 6478//4262 -f 6475//4245 6474//4241 6490//4263 -f 6489//4260 6488//4258 6504//4264 -f 6484//4265 6483//4261 6498//4266 -f 6479//4252 6478//4262 6493//4267 -f 6490//4263 6489//4260 6505//4268 -f 6485//4251 6484//4265 6500//4269 -f 6480//4255 6479//4252 6494//4270 -f 6491//4253 6490//4263 6506//4271 -f 6486//4254 6485//4251 6501//4272 -f 6481//4257 6480//4255 6495//4273 -f 6487//4256 6486//4254 6502//4274 -f 6482//4259 6481//4257 6496//4275 -f 6488//4258 6487//4256 6503//4276 -f 6483//4261 6482//4259 6497//4277 -f 6503//4276 6502//4274 6518//4278 -f 6498//4266 6497//4277 6512//4279 -f 6504//4264 6503//4276 6519//4280 -f 6499//4281 6498//4266 6513//4282 -f 6494//4270 6493//4267 6508//4283 -f 6505//4268 6504//4264 6520//4284 -f 6500//4269 6499//4281 6515//4285 -f 6495//4273 6494//4270 6509//4286 -f 6506//4271 6505//4268 6521//4287 -f 6501//4272 6500//4269 6516//4288 -f 6496//4275 6495//4273 6510//4289 -f 6502//4274 6501//4272 6517//4290 -f 6497//4277 6496//4275 6511//4291 -f 6517//4290 6516//4288 6531//4292 -f 6512//4279 6511//4291 6527//4293 -f 6518//4278 6517//4290 6532//4294 -f 6513//4282 6512//4279 6528//4295 -f 6519//4280 6518//4278 6533//4296 -f 6514//261 6513//4282 6529//4297 -f 6509//4286 6508//4283 6524//4298 -f 6520//4284 6519//4280 6534//4299 -f 6515//4285 6514//261 6529//4297 -f 6510//4289 6509//4286 6525//4300 -f 6521//4287 6520//4284 6535//4301 -f 6516//4288 6515//4285 6530//4302 -f 6511//4291 6510//4289 6525//4300 -f 6525//4300 6524//4298 6540//4303 -f 6536//4304 6535//4301 6550//4305 -f 6531//4292 6530//4302 6545//4306 -f 6526//4307 6525//4300 6540//4303 -f 6532//4294 6531//4292 6546//4308 -f 6527//4293 6526//4307 6542//4309 -f 6533//4296 6532//4294 6547//4310 -f 6528//4295 6527//4293 6543//4311 -f 6534//4299 6533//4296 6548//4312 -f 6529//4297 6528//4295 6544//4313 -f 6524//4298 6523//4314 6539//4315 -f 6535//4301 6534//4299 6549//4316 -f 6530//4302 6529//4297 6544//4313 -f 6544//4313 6543//4311 6559//4317 -f 6539//4315 6538//4318 6554//4319 -f 6550//4305 6549//4316 6564//4320 -f 6545//4306 6544//4313 6559//4317 -f 6540//4303 6539//4315 6555//4321 -f 6551//4322 6550//4305 6565//4323 -f 6546//4308 6545//4306 6560//4324 -f 6541//4325 6540//4303 6556//4326 -f 6547//4310 6546//4308 6561//4327 -f 6542//4309 6541//4325 6557//4328 -f 6548//4312 6547//4310 6562//4329 -f 6543//4311 6542//4309 6558//4330 -f 6549//4316 6548//4312 6563//4331 -f 6563//4331 6562//4329 6577//4332 -f 6558//4330 6557//4328 6573//4333 -f 6564//4320 6563//4331 6578//4334 -f 6559//4317 6558//4330 6574//4335 -f 6554//4319 6553//4336 6569//4337 -f 6565//4323 6564//4320 6579//4338 -f 6560//4324 6559//4317 6574//4335 -f 6555//4321 6554//4319 6570//4339 -f 6566//4340 6565//4323 6580//4341 -f 6561//4327 6560//4324 6575//4342 -f 6556//4326 6555//4321 6571//4343 -f 6562//4329 6561//4327 6576//4344 -f 6557//4328 6556//4326 6572//4345 -f 6577//4332 6576//4344 6591//4346 -f 6572//4345 6571//4343 6587//4347 -f 6578//4334 6577//4332 6592//4348 -f 6573//4333 6572//4345 6588//4349 -f 6579//4338 6578//4334 6593//4350 -f 6574//4335 6573//4333 6589//4351 -f 6569//4337 6568//4352 6584//4353 -f 6580//4341 6579//4338 6594//4354 -f 6575//4342 6574//4335 6589//4351 -f 6570//4339 6569//4337 6585//4355 -f 6581//4356 6580//4341 6595//4357 -f 6576//4344 6575//4342 6590//4358 -f 6571//4343 6570//4339 6586//4359 -f 6585//4355 6584//4353 6601//4360 -f 6596//4361 6595//4357 6611//4362 -f 6591//4346 6590//4358 6606//4363 -f 6586//4359 6585//4355 6602//4364 -f 6592//4348 6591//4346 6607//4365 -f 6587//4347 6586//4359 6603//4366 -f 6593//4350 6592//4348 6608//4367 -f 6588//4349 6587//4347 6604//4368 -f 6594//4354 6593//4350 6609//4369 -f 6589//4351 6588//4349 6605//4370 -f 6584//4353 6583//4371 6600//4372 -f 6595//4357 6594//4354 6610//4373 -f 6590//4358 6589//4351 6605//4370 -f 6605//4370 6604//4368 6620//4374 -f 6600//4372 6599//4375 6615//4376 -f 6611//4362 6610//4373 6625//4377 -f 6606//4363 6605//4370 6620//4374 -f 6601//4360 6600//4372 6616//4378 -f 6612//4379 6611//4362 6626//4380 -f 6607//4365 6606//4363 6621//4381 -f 6602//4364 6601//4360 6616//4378 -f 6608//4367 6607//4365 6622//4382 -f 6603//4366 6602//4364 6618//4383 -f 6609//4369 6608//4367 6623//4384 -f 6604//4368 6603//4366 6619//4385 -f 6610//4373 6609//4369 6624//4386 -f 6624//4386 6623//4384 6638//4387 -f 6619//4385 6618//4383 6634//4388 -f 6625//4377 6624//4386 6639//4389 -f 6620//4374 6619//4385 6635//3282 -f 6615//4376 6614//4390 6630//4391 -f 6626//4380 6625//4377 6640//4392 -f 6621//4381 6620//4374 6635//3282 -f 6616//4378 6615//4376 6631//4393 -f 6627//4394 6626//4380 6641//4395 -f 6622//4382 6621//4381 6636//4396 -f 6617//4397 6616//4378 6631//4393 -f 6623//4384 6622//4382 6637//4398 -f 6618//4383 6617//4397 6633//4399 -f 6638//4387 6637//4398 6653//4400 -f 6633//4399 6632//4401 6647//4402 -f 6639//4389 6638//4387 6654//4403 -f 6634//4388 6633//4399 6648//4404 -f 6640//4392 6639//4389 6655//4405 -f 6635//3282 6634//4388 6649//4406 -f 6630//4391 6629//4407 6644//4408 -f 6641//4395 6640//4392 6656//4409 -f 6636//4396 6635//3282 6651//4410 -f 6631//4393 6630//4391 6645//4411 -f 6642//4412 6641//4395 6657//4413 -f 6637//4398 6636//4396 6652//4414 -f 6632//4401 6631//4393 6646//4415 -f 6657//4413 6656//4409 6672//4416 -f 6652//4414 6651//4410 6667//4417 -f 6647//4402 6646//4415 6661//4418 -f 6653//4400 6652//4414 6668//4419 -f 6648//4404 6647//4402 6662//4420 -f 6654//4403 6653//4400 6669//4421 -f 6649//4406 6648//4404 6663//4422 -f 6655//4405 6654//4403 6670//4423 -f 6650//4424 6649//4406 6664//4425 -f 6645//4411 6644//4408 6659//4426 -f 6656//4409 6655//4405 6671//4427 -f 6651//4410 6650//4424 6666//4428 -f 6646//4415 6645//4411 6660//4429 -f 6660//4429 6659//4426 6674//4430 -f 6671//4427 6670//4423 6686//4431 -f 6666//4428 6665//4432 6681//4433 -f 6661//4418 6660//4429 6675//4434 -f 6672//4416 6671//4427 6687//4435 -f 6667//4417 6666//4428 6682//4436 -f 6662//4420 6661//4418 6676//4437 -f 6668//4419 6667//4417 6683//4438 -f 6663//4422 6662//4420 6677//4439 -f 6669//4421 6668//4419 6684//4440 -f 6664//4425 6663//4422 6678//4441 -f 6670//4423 6669//4421 6685//4442 -f 6665//4432 6664//4425 6679//4443 -f 6679//4443 6678//4441 6693//4444 -f 6685//4442 6684//4440 6700//4445 -f 6680//4446 6679//4443 6694//4447 -f 6675//4434 6674//4430 6689//4448 -f 6686//4431 6685//4442 6701//4449 -f 6681//4433 6680//4446 6696//4450 -f 6676//4437 6675//4434 6690//4451 -f 6687//4435 6686//4431 6702//4452 -f 6682//4436 6681//4433 6697//4453 -f 6677//4439 6676//4437 6691//4454 -f 6683//4438 6682//4436 6698//4455 -f 6678//4441 6677//4439 6692//4456 -f 6684//4440 6683//4438 6699//4457 -f 6698//4455 6697//4453 6713//4458 -f 6693//4444 6692//4456 6707//4459 -f 6699//4457 6698//4455 6714//4460 -f 6694//4447 6693//4444 6708//4461 -f 6700//4445 6699//4457 6715//4462 -f 6695//4463 6694//4447 6709//4464 -f 6690//4451 6689//4448 6704//4465 -f 6701//4449 6700//4445 6716//4466 -f 6696//4450 6695//4463 6711//4467 -f 6691//4454 6690//4451 6705//4468 -f 6702//4452 6701//4449 6717//4469 -f 6697//4453 6696//4450 6712//4470 -f 6692//4456 6691//4454 6706//4471 -f 6717//4469 6716//4466 6733//4472 -f 6712//4470 6711//4467 6728//4473 -f 6707//4459 6706//4471 6722//4474 -f 6713//4458 6712//4470 6729//4475 -f 6708//4461 6707//4459 6723//4476 -f 6714//4460 6713//4458 6730//4477 -f 6709//4464 6708//4461 6724//4478 -f 6715//4462 6714//4460 6731//4479 -f 6710//4480 6709//4464 6725//4481 -f 6705//4468 6704//4465 6720//4482 -f 6716//4466 6715//4462 6732//4483 -f 6711//4467 6710//4480 6727//4484 -f 6706//4471 6705//4468 6721//4485 -f 6721//4485 6720//4482 6735//4486 -f 6732//4483 6731//4479 6747//4487 -f 6727//4484 6726//4488 6742//4489 -f 6722//4474 6721//4485 6736//4490 -f 6733//4472 6732//4483 6748//4491 -f 6728//4473 6727//4484 6743//4492 -f 6723//4476 6722//4474 6737//4493 -f 6729//4475 6728//4473 6744//4494 -f 6724//4478 6723//4476 6738//4495 -f 6730//4477 6729//4475 6745//4496 -f 6725//4481 6724//4478 6739//4497 -f 6731//4479 6730//4477 6746//4498 -f 6726//4488 6725//4481 6740//4499 -f 6597//364 6281//4065 6296//4084 -f 6597//364 6296//4084 6311//4101 -f 6597//364 6311//4101 6326//4119 -f 6597//364 6326//4119 6341//4136 -f 6597//364 6341//4136 6356//4141 -f 6597//364 6356//4141 6371//4158 -f 6597//364 6371//4158 6386//4173 -f 6597//364 6386//4173 6401//4191 -f 6597//364 6401//4191 6416//4192 -f 6597//364 6416//4192 6431//4197 -f 6597//364 6431//4197 6446//4215 -f 6597//364 6446//4215 6461//4231 -f 6597//364 6461//4231 6476//4248 -f 6597//364 6476//4248 6491//4253 -f 6597//364 6491//4253 6506//4271 -f 6597//364 6506//4271 6521//4287 -f 6597//364 6521//4287 6536//4304 -f 6597//364 6536//4304 6551//4322 -f 6597//364 6551//4322 6566//4340 -f 6597//364 6566//4340 6581//4356 -f 6597//364 6581//4356 6596//4361 -f 6597//364 6596//4361 6612//4379 -f 6597//364 6612//4379 6627//4394 -f 6597//364 6627//4394 6642//4412 -f 6597//364 6642//4412 6657//4413 -f 6597//364 6657//4413 6672//4416 -f 6597//364 6672//4416 6687//4435 -f 6597//364 6687//4435 6702//4452 -f 6597//364 6702//4452 6717//4469 -f 6597//364 6717//4469 6733//4472 -f 6597//364 6733//4472 6748//4491 -f 6740//4499 6739//4497 6272//4072 -f 6746//4498 6745//4496 6279//4058 -f 6741//4500 6740//4499 6273//4076 -f 6736//4490 6735//4486 6268//4079 -f 6747//4487 6746//4498 6280//4057 -f 6742//4489 6741//4500 6275//4060 -f 6737//4493 6736//4490 6269//4063 -f 6748//4491 6747//4487 6281//4065 -f 6743//4492 6742//4489 6276//4067 -f 6738//4495 6737//4493 6270//4062 -f 6597//364 6748//4491 6281//4065 -f 6744//4494 6743//4492 6277//4070 -f 6739//4497 6738//4495 6271//4069 -f 6745//4496 6744//4494 6278//4074 -f 6295//4066 6280//4057 6294//4059 -f 6290//4068 6275//4060 6289//4061 -f 6269//4063 6284//4080 6285//4064 -f 6296//4084 6281//4065 6295//4066 -f 6291//4071 6276//4067 6290//4068 -f 6286//4087 6271//4069 6285//4064 -f 6292//4075 6277//4070 6291//4071 -f 6271//4069 6286//4087 6287//4073 -f 6293//4078 6278//4074 6292//4075 -f 6272//4072 6287//4073 6288//4077 -f 6294//4059 6279//4058 6293//4078 -f 6273//4076 6288//4077 6289//4061 -f 6268//4079 6283//4093 6284//4080 -f 6310//4085 6295//4066 6309//4081 -f 6305//4086 6290//4068 6304//4082 -f 6284//4080 6299//4094 6300//4083 -f 6311//4101 6296//4084 6310//4085 -f 6306//4088 6291//4071 6305//4086 -f 6301//4104 6286//4087 6300//4083 -f 6307//4090 6292//4075 6306//4088 -f 6286//4087 6301//4104 6302//4089 -f 6308//4092 6293//4078 6307//4090 -f 6287//4073 6302//4089 6303//4091 -f 6309//4081 6294//4059 6308//4092 -f 6288//4077 6303//4091 6304//4082 -f 6283//4093 6298//4097 6299//4094 -f 6324//4099 6309//4081 6323//4095 -f 6303//4091 6318//4109 6319//4096 -f 6298//4097 6313//4115 6314//4098 -f 6325//4102 6310//4085 6324//4099 -f 6320//4103 6305//4086 6319//4096 -f 6299//4094 6314//4098 6315//4100 -f 6326//4119 6311//4101 6325//4102 -f 6321//4106 6306//4088 6320//4103 -f 6300//4083 6315//4100 6316//4105 -f 6322//4108 6307//4090 6321//4106 -f 6301//4104 6316//4105 6317//4107 -f 6323//4095 6308//4092 6322//4108 -f 6302//4089 6317//4107 6318//4109 -f 6316//4105 6331//4122 6332//4110 -f 6338//4113 6323//4095 6337//4111 -f 6317//4107 6332//4110 6333//4112 -f 6339//4117 6324//4099 6338//4113 -f 6318//4109 6333//4112 6334//4114 -f 6313//4115 6328//4132 6329//4116 -f 6340//4120 6325//4102 6339//4117 -f 6335//4121 6320//4103 6334//4114 -f 6314//4098 6329//4116 6330//4118 -f 6341//4136 6326//4119 6340//4120 -f 6336//4123 6321//4106 6335//4121 -f 6315//4100 6330//4118 6331//4122 -f 6337//4111 6322//4108 6336//4123 -f 6351//4126 6336//4123 6350//4124 -f 6330//4118 6345//4135 6346//4125 -f 6352//4128 6337//4111 6351//4126 -f 6331//4122 6346//4125 6347//4127 -f 6353//4130 6338//4113 6352//4128 -f 6332//4110 6347//4127 6348//4129 -f 6354//4134 6339//4117 6353//4130 -f 6333//4112 6348//4129 6349//4131 -f 6328//4132 6343//4150 6344//4133 -f 6355//4137 6340//4120 6354//4134 -f 6350//4124 6335//4121 6349//4131 -f 6329//4116 6344//4133 6345//4135 -f 6356//4141 6341//4136 6355//4137 -f 6370//4142 6355//4137 6369//4138 -f 6365//4143 6350//4124 6364//4139 -f 6344//4133 6359//4151 6360//4140 -f 6371//4158 6356//4141 6370//4142 -f 6366//4145 6351//4126 6365//4143 -f 6345//4135 6360//4140 6361//4144 -f 6367//4147 6352//4128 6366//4145 -f 6346//4125 6361//4144 6362//4146 -f 6368//4149 6353//4130 6367//4147 -f 6347//4127 6362//4146 6363//4148 -f 6369//4138 6354//4134 6368//4149 -f 6348//4129 6363//4148 6364//4139 -f 6343//4150 6358//4154 6359//4151 -f 6384//4156 6369//4138 6383//4152 -f 6363//4148 6378//4165 6379//4153 -f 6358//4154 6373//4169 6374//4155 -f 6385//4159 6370//4142 6384//4156 -f 6380//4160 6365//4143 6379//4153 -f 6359//4151 6374//4155 6375//4157 -f 6386//4173 6371//4158 6385//4159 -f 6381//4162 6366//4145 6380//4160 -f 6360//4140 6375//4157 6376//4161 -f 6382//4164 6367//4147 6381//4162 -f 6361//4144 6376//4161 6377//4163 -f 6383//4152 6368//4149 6382//4164 -f 6362//4146 6377//4163 6378//4165 -f 6398//4168 6383//4152 6397//4166 -f 6377//4163 6392//4177 6393//4167 -f 6399//4171 6384//4156 6398//4168 -f 6378//4165 6393//4167 6394//3044 -f 6373//4169 6388//4186 6389//4170 -f 6400//4174 6385//4159 6399//4171 -f 6395//4175 6380//4160 6394//3044 -f 6374//4155 6389//4170 6390//4172 -f 6401//4191 6386//4173 6400//4174 -f 6396//4176 6381//4162 6395//4175 -f 6391//4178 6376//4161 6390//4172 -f 6397//4166 6382//4164 6396//4176 -f 6376//4161 6391//4178 6392//4177 -f 6406//4181 6391//4178 6405//4179 -f 6396//4176 6411//4193 6412//4180 -f 6407//4183 6392//4177 6406//4181 -f 6397//4166 6412//4180 6413//4182 -f 6408//4185 6393//4167 6407//4183 -f 6398//4168 6413//4182 6414//4184 -f 6409//4194 6394//3044 6408//4185 -f 6404//4190 6389//4170 6403//4187 -f 6399//4171 6414//4184 6415//4188 -f 6394//3044 6409//4194 6410//4189 -f 6405//4179 6390//4172 6404//4190 -f 6400//4174 6415//4188 6416//4192 -f 6395//4175 6410//4189 6411//4193 -f 6409//4194 6424//4209 6425//4195 -f 6420//4199 6405//4179 6419//4196 -f 6415//4188 6430//4207 6431//4197 -f 6410//4189 6425//4195 6426//4198 -f 6421//4201 6406//4181 6420//4199 -f 6411//4193 6426//4198 6427//4200 -f 6422//4203 6407//4183 6421//4201 -f 6412//4180 6427//4200 6428//4202 -f 6423//4205 6408//4185 6422//4203 -f 6413//4182 6428//4202 6429//4204 -f 6424//4209 6409//4194 6423//4205 -f 6419//4196 6404//4190 6418//4206 -f 6414//4184 6429//4204 6430//4207 -f 6428//4202 6443//4220 6444//4208 -f 6439//4225 6424//4209 6438//4210 -f 6434//4214 6419//4196 6433//4211 -f 6429//4204 6444//4208 6445//4212 -f 6424//4209 6439//4225 6440//4213 -f 6435//4217 6420//4199 6434//4214 -f 6430//4207 6445//4212 6446//4215 -f 6425//4195 6440//4213 6441//4216 -f 6436//4219 6421//4201 6435//4217 -f 6426//4198 6441//4216 6442//4218 -f 6437//4221 6422//4203 6436//4219 -f 6427//4200 6442//4218 6443//4220 -f 6438//4210 6423//4205 6437//4221 -f 6442//4218 6457//4234 6458//4222 -f 6453//4226 6438//4210 6452//4223 -f 6443//4220 6458//4222 6459//4224 -f 6454//4242 6439//4225 6453//4226 -f 6449//4230 6434//4214 6448//4227 -f 6444//4208 6459//4224 6460//4228 -f 6439//4225 6454//4242 6455//4229 -f 6450//4233 6435//4217 6449//4230 -f 6445//4212 6460//4228 6461//4231 -f 6440//4213 6455//4229 6456//4232 -f 6451//4235 6436//4219 6450//4233 -f 6441//4216 6456//4232 6457//4234 -f 6452//4223 6437//4221 6451//4235 -f 6466//4238 6451//4235 6465//4236 -f 6456//4232 6471//4249 6472//4237 -f 6467//4240 6452//4223 6466//4238 -f 6457//4234 6472//4237 6473//4239 -f 6468//4243 6453//4226 6467//4240 -f 6458//4222 6473//4239 6474//4241 -f 6469//4250 6454//4242 6468//4243 -f 6464//4247 6449//4230 6463//4244 -f 6459//4224 6474//4241 6475//4245 -f 6454//4242 6469//4250 6470//4246 -f 6465//4236 6450//4233 6464//4247 -f 6460//4228 6475//4245 6476//4248 -f 6455//4229 6470//4246 6471//4249 -f 6469//4250 6484//4265 6485//4251 -f 6480//4255 6465//4236 6479//4252 -f 6475//4245 6490//4263 6491//4253 -f 6470//4246 6485//4251 6486//4254 -f 6481//4257 6466//4238 6480//4255 -f 6471//4249 6486//4254 6487//4256 -f 6482//4259 6467//4240 6481//4257 -f 6472//4237 6487//4256 6488//4258 -f 6483//4261 6468//4243 6482//4259 -f 6473//4239 6488//4258 6489//4260 -f 6484//4265 6469//4250 6483//4261 -f 6479//4252 6464//4247 6478//4262 -f 6474//4241 6489//4260 6490//4263 -f 6488//4258 6503//4276 6504//4264 -f 6499//4281 6484//4265 6498//4266 -f 6494//4270 6479//4252 6493//4267 -f 6489//4260 6504//4264 6505//4268 -f 6484//4265 6499//4281 6500//4269 -f 6495//4273 6480//4255 6494//4270 -f 6490//4263 6505//4268 6506//4271 -f 6485//4251 6500//4269 6501//4272 -f 6496//4275 6481//4257 6495//4273 -f 6486//4254 6501//4272 6502//4274 -f 6497//4277 6482//4259 6496//4275 -f 6487//4256 6502//4274 6503//4276 -f 6498//4266 6483//4261 6497//4277 -f 6502//4274 6517//4290 6518//4278 -f 6513//4282 6498//4266 6512//4279 -f 6503//4276 6518//4278 6519//4280 -f 6514//261 6499//4281 6513//4282 -f 6509//4286 6494//4270 6508//4283 -f 6504//4264 6519//4280 6520//4284 -f 6499//4281 6514//261 6515//4285 -f 6510//4289 6495//4273 6509//4286 -f 6505//4268 6520//4284 6521//4287 -f 6500//4269 6515//4285 6516//4288 -f 6511//4291 6496//4275 6510//4289 -f 6501//4272 6516//4288 6517//4290 -f 6512//4279 6497//4277 6511//4291 -f 6532//4294 6517//4290 6531//4292 -f 6511//4291 6526//4307 6527//4293 -f 6533//4296 6518//4278 6532//4294 -f 6512//4279 6527//4293 6528//4295 -f 6534//4299 6519//4280 6533//4296 -f 6513//4282 6528//4295 6529//4297 -f 6508//4283 6523//4314 6524//4298 -f 6535//4301 6520//4284 6534//4299 -f 6530//4302 6515//4285 6529//4297 -f 6509//4286 6524//4298 6525//4300 -f 6536//4304 6521//4287 6535//4301 -f 6531//4292 6516//4288 6530//4302 -f 6526//4307 6511//4291 6525//4300 -f 6524//4298 6539//4315 6540//4303 -f 6551//4322 6536//4304 6550//4305 -f 6546//4308 6531//4292 6545//4306 -f 6541//4325 6526//4307 6540//4303 -f 6547//4310 6532//4294 6546//4308 -f 6526//4307 6541//4325 6542//4309 -f 6548//4312 6533//4296 6547//4310 -f 6527//4293 6542//4309 6543//4311 -f 6549//4316 6534//4299 6548//4312 -f 6528//4295 6543//4311 6544//4313 -f 6523//4314 6538//4318 6539//4315 -f 6550//4305 6535//4301 6549//4316 -f 6545//4306 6530//4302 6544//4313 -f 6543//4311 6558//4330 6559//4317 -f 6538//4318 6553//4336 6554//4319 -f 6565//4323 6550//4305 6564//4320 -f 6560//4324 6545//4306 6559//4317 -f 6539//4315 6554//4319 6555//4321 -f 6566//4340 6551//4322 6565//4323 -f 6561//4327 6546//4308 6560//4324 -f 6540//4303 6555//4321 6556//4326 -f 6562//4329 6547//4310 6561//4327 -f 6541//4325 6556//4326 6557//4328 -f 6563//4331 6548//4312 6562//4329 -f 6542//4309 6557//4328 6558//4330 -f 6564//4320 6549//4316 6563//4331 -f 6578//4334 6563//4331 6577//4332 -f 6557//4328 6572//4345 6573//4333 -f 6579//4338 6564//4320 6578//4334 -f 6558//4330 6573//4333 6574//4335 -f 6553//4336 6568//4352 6569//4337 -f 6580//4341 6565//4323 6579//4338 -f 6575//4342 6560//4324 6574//4335 -f 6554//4319 6569//4337 6570//4339 -f 6581//4356 6566//4340 6580//4341 -f 6576//4344 6561//4327 6575//4342 -f 6555//4321 6570//4339 6571//4343 -f 6577//4332 6562//4329 6576//4344 -f 6556//4326 6571//4343 6572//4345 -f 6592//4348 6577//4332 6591//4346 -f 6571//4343 6586//4359 6587//4347 -f 6593//4350 6578//4334 6592//4348 -f 6572//4345 6587//4347 6588//4349 -f 6594//4354 6579//4338 6593//4350 -f 6573//4333 6588//4349 6589//4351 -f 6568//4352 6583//4371 6584//4353 -f 6595//4357 6580//4341 6594//4354 -f 6590//4358 6575//4342 6589//4351 -f 6569//4337 6584//4353 6585//4355 -f 6596//4361 6581//4356 6595//4357 -f 6591//4346 6576//4344 6590//4358 -f 6570//4339 6585//4355 6586//4359 -f 6584//4353 6600//4372 6601//4360 -f 6612//4379 6596//4361 6611//4362 -f 6607//4365 6591//4346 6606//4363 -f 6585//4355 6601//4360 6602//4364 -f 6608//4367 6592//4348 6607//4365 -f 6586//4359 6602//4364 6603//4366 -f 6609//4369 6593//4350 6608//4367 -f 6587//4347 6603//4366 6604//4368 -f 6610//4373 6594//4354 6609//4369 -f 6588//4349 6604//4368 6605//4370 -f 6583//4371 6599//4375 6600//4372 -f 6611//4362 6595//4357 6610//4373 -f 6606//4363 6590//4358 6605//4370 -f 6604//4368 6619//4385 6620//4374 -f 6599//4375 6614//4390 6615//4376 -f 6626//4380 6611//4362 6625//4377 -f 6621//4381 6606//4363 6620//4374 -f 6600//4372 6615//4376 6616//4378 -f 6627//4394 6612//4379 6626//4380 -f 6622//4382 6607//4365 6621//4381 -f 6617//4397 6602//4364 6616//4378 -f 6623//4384 6608//4367 6622//4382 -f 6602//4364 6617//4397 6618//4383 -f 6624//4386 6609//4369 6623//4384 -f 6603//4366 6618//4383 6619//4385 -f 6625//4377 6610//4373 6624//4386 -f 6639//4389 6624//4386 6638//4387 -f 6618//4383 6633//4399 6634//4388 -f 6640//4392 6625//4377 6639//4389 -f 6619//4385 6634//4388 6635//3282 -f 6614//4390 6629//4407 6630//4391 -f 6641//4395 6626//4380 6640//4392 -f 6636//4396 6621//4381 6635//3282 -f 6615//4376 6630//4391 6631//4393 -f 6642//4412 6627//4394 6641//4395 -f 6637//4398 6622//4382 6636//4396 -f 6632//4401 6617//4397 6631//4393 -f 6638//4387 6623//4384 6637//4398 -f 6617//4397 6632//4401 6633//4399 -f 6637//4398 6652//4414 6653//4400 -f 6648//4404 6633//4399 6647//4402 -f 6638//4387 6653//4400 6654//4403 -f 6649//4406 6634//4388 6648//4404 -f 6639//4389 6654//4403 6655//4405 -f 6650//4424 6635//3282 6649//4406 -f 6645//4411 6630//4391 6644//4408 -f 6640//4392 6655//4405 6656//4409 -f 6635//3282 6650//4424 6651//4410 -f 6646//4415 6631//4393 6645//4411 -f 6641//4395 6656//4409 6657//4413 -f 6636//4396 6651//4410 6652//4414 -f 6647//4402 6632//4401 6646//4415 -f 6656//4409 6671//4427 6672//4416 -f 6651//4410 6666//4428 6667//4417 -f 6662//4420 6647//4402 6661//4418 -f 6652//4414 6667//4417 6668//4419 -f 6663//4422 6648//4404 6662//4420 -f 6653//4400 6668//4419 6669//4421 -f 6664//4425 6649//4406 6663//4422 -f 6654//4403 6669//4421 6670//4423 -f 6665//4432 6650//4424 6664//4425 -f 6660//4429 6645//4411 6659//4426 -f 6655//4405 6670//4423 6671//4427 -f 6650//4424 6665//4432 6666//4428 -f 6661//4418 6646//4415 6660//4429 -f 6675//4434 6660//4429 6674//4430 -f 6670//4423 6685//4442 6686//4431 -f 6665//4432 6680//4446 6681//4433 -f 6676//4437 6661//4418 6675//4434 -f 6671//4427 6686//4431 6687//4435 -f 6666//4428 6681//4433 6682//4436 -f 6677//4439 6662//4420 6676//4437 -f 6667//4417 6682//4436 6683//4438 -f 6678//4441 6663//4422 6677//4439 -f 6668//4419 6683//4438 6684//4440 -f 6679//4443 6664//4425 6678//4441 -f 6669//4421 6684//4440 6685//4442 -f 6680//4446 6665//4432 6679//4443 -f 6694//4447 6679//4443 6693//4444 -f 6684//4440 6699//4457 6700//4445 -f 6695//4463 6680//4446 6694//4447 -f 6690//4451 6675//4434 6689//4448 -f 6685//4442 6700//4445 6701//4449 -f 6680//4446 6695//4463 6696//4450 -f 6691//4454 6676//4437 6690//4451 -f 6686//4431 6701//4449 6702//4452 -f 6681//4433 6696//4450 6697//4453 -f 6692//4456 6677//4439 6691//4454 -f 6682//4436 6697//4453 6698//4455 -f 6693//4444 6678//4441 6692//4456 -f 6683//4438 6698//4455 6699//4457 -f 6697//4453 6712//4470 6713//4458 -f 6708//4461 6693//4444 6707//4459 -f 6698//4455 6713//4458 6714//4460 -f 6709//4464 6694//4447 6708//4461 -f 6699//4457 6714//4460 6715//4462 -f 6710//4480 6695//4463 6709//4464 -f 6705//4468 6690//4451 6704//4465 -f 6700//4445 6715//4462 6716//4466 -f 6695//4463 6710//4480 6711//4467 -f 6706//4471 6691//4454 6705//4468 -f 6701//4449 6716//4466 6717//4469 -f 6696//4450 6711//4467 6712//4470 -f 6707//4459 6692//4456 6706//4471 -f 6716//4466 6732//4483 6733//4472 -f 6711//4467 6727//4484 6728//4473 -f 6723//4476 6707//4459 6722//4474 -f 6712//4470 6728//4473 6729//4475 -f 6724//4478 6708//4461 6723//4476 -f 6713//4458 6729//4475 6730//4477 -f 6725//4481 6709//4464 6724//4478 -f 6714//4460 6730//4477 6731//4479 -f 6726//4488 6710//4480 6725//4481 -f 6721//4485 6705//4468 6720//4482 -f 6715//4462 6731//4479 6732//4483 -f 6710//4480 6726//4488 6727//4484 -f 6722//4474 6706//4471 6721//4485 -f 6736//4490 6721//4485 6735//4486 -f 6731//4479 6746//4498 6747//4487 -f 6726//4488 6741//4500 6742//4489 -f 6737//4493 6722//4474 6736//4490 -f 6732//4483 6747//4487 6748//4491 -f 6727//4484 6742//4489 6743//4492 -f 6738//4495 6723//4476 6737//4493 -f 6728//4473 6743//4492 6744//4494 -f 6739//4497 6724//4478 6738//4495 -f 6729//4475 6744//4494 6745//4496 -f 6740//4499 6725//4481 6739//4497 -f 6730//4477 6745//4496 6746//4498 -f 6741//4500 6726//4488 6740//4499 -f 6273//4076 6740//4499 6272//4072 -f 6745//4496 6278//4074 6279//4058 -f 6274//2918 6741//4500 6273//4076 -f 6269//4063 6736//4490 6268//4079 -f 6746//4498 6279//4058 6280//4057 -f 6741//4500 6274//2918 6275//4060 -f 6270//4062 6737//4493 6269//4063 -f 6747//4487 6280//4057 6281//4065 -f 6742//4489 6275//4060 6276//4067 -f 6271//4069 6738//4495 6270//4062 -f 6743//4492 6276//4067 6277//4070 -f 6272//4072 6739//4497 6271//4069 -f 6744//4494 6277//4070 6278//4074 -usemtl NoseTop -f 6268//4079 6267//4501 6283//4093 -f 6283//4093 6282//4502 6298//4097 -f 6298//4097 6297//4503 6313//4115 -f 6313//4115 6312//4504 6328//4132 -f 6328//4132 6327//4505 6343//4150 -f 6343//4150 6342//4506 6358//4154 -f 6358//4154 6357//4507 6373//4169 -f 6373//4169 6372//4508 6388//4186 -f 6388//4186 6387//4509 6402//4510 -f 6403//4187 6402//4510 6417//4511 -f 6418//4206 6417//4511 6432//4512 -f 6433//4211 6432//4512 6447//4513 -f 6448//4227 6447//4513 6462//4514 -f 6463//4244 6462//4514 6477//4515 -f 6478//4262 6477//4515 6492//4516 -f 6493//4267 6492//4516 6507//4517 -f 6508//4283 6507//4517 6523//4314 -f 6523//4314 6522//4518 6538//4318 -f 6538//4318 6537//4519 6553//4336 -f 6553//4336 6552//4520 6568//4352 -f 6568//4352 6567//4521 6583//4371 -f 6583//4371 6582//4522 6599//4375 -f 6599//4375 6598//4523 6614//4390 -f 6614//4390 6613//4524 6629//4407 -f 6629//4407 6628//4525 6643//4526 -f 6644//4408 6643//4526 6658//4527 -f 6659//4426 6658//4527 6673//4528 -f 6674//4430 6673//4528 6688//4529 -f 6689//4448 6688//4529 6703//4530 -f 6704//4465 6703//4530 6719//4531 -f 6720//4482 6719//4531 6734//4532 -f 6267//4501 6718//4533 6282//4502 -f 6282//4502 6718//4533 6297//4503 -f 6297//4503 6718//4533 6312//4504 -f 6312//4504 6718//4533 6327//4505 -f 6327//4505 6718//4533 6342//4506 -f 6342//4506 6718//4533 6357//4507 -f 6357//4507 6718//4533 6372//4508 -f 6372//4508 6718//4533 6387//4509 -f 6387//4509 6718//4533 6402//4510 -f 6402//4510 6718//4533 6417//4511 -f 6417//4511 6718//4533 6432//4512 -f 6432//4512 6718//4533 6447//4513 -f 6447//4513 6718//4533 6462//4514 -f 6462//4514 6718//4533 6477//4515 -f 6477//4515 6718//4533 6492//4516 -f 6492//4516 6718//4533 6507//4517 -f 6507//4517 6718//4533 6522//4518 -f 6522//4518 6718//4533 6537//4519 -f 6537//4519 6718//4533 6552//4520 -f 6552//4520 6718//4533 6567//4521 -f 6567//4521 6718//4533 6582//4522 -f 6582//4522 6718//4533 6598//4523 -f 6598//4523 6718//4533 6613//4524 -f 6613//4524 6718//4533 6628//4525 -f 6628//4525 6718//4533 6643//4526 -f 6643//4526 6718//4533 6658//4527 -f 6658//4527 6718//4533 6673//4528 -f 6673//4528 6718//4533 6688//4529 -f 6688//4529 6718//4533 6703//4530 -f 6703//4530 6718//4533 6719//4531 -f 6719//4531 6718//4533 6734//4532 -f 6735//4486 6734//4532 6267//4501 -f 6734//4532 6718//4533 6267//4501 -f 6267//4501 6282//4502 6283//4093 -f 6282//4502 6297//4503 6298//4097 -f 6297//4503 6312//4504 6313//4115 -f 6312//4504 6327//4505 6328//4132 -f 6327//4505 6342//4506 6343//4150 -f 6342//4506 6357//4507 6358//4154 -f 6357//4507 6372//4508 6373//4169 -f 6372//4508 6387//4509 6388//4186 -f 6403//4187 6388//4186 6402//4510 -f 6418//4206 6403//4187 6417//4511 -f 6433//4211 6418//4206 6432//4512 -f 6448//4227 6433//4211 6447//4513 -f 6463//4244 6448//4227 6462//4514 -f 6478//4262 6463//4244 6477//4515 -f 6493//4267 6478//4262 6492//4516 -f 6508//4283 6493//4267 6507//4517 -f 6507//4517 6522//4518 6523//4314 -f 6522//4518 6537//4519 6538//4318 -f 6537//4519 6552//4520 6553//4336 -f 6552//4520 6567//4521 6568//4352 -f 6567//4521 6582//4522 6583//4371 -f 6582//4522 6598//4523 6599//4375 -f 6598//4523 6613//4524 6614//4390 -f 6613//4524 6628//4525 6629//4407 -f 6644//4408 6629//4407 6643//4526 -f 6659//4426 6644//4408 6658//4527 -f 6674//4430 6659//4426 6673//4528 -f 6689//4448 6674//4430 6688//4529 -f 6704//4465 6689//4448 6703//4530 -f 6720//4482 6704//4465 6719//4531 -f 6735//4486 6720//4482 6734//4532 -f 6268//4079 6735//4486 6267//4501 -o Eye_R_Sphere.006 -v -0.524476 0.974916 -0.429854 -v -0.531200 0.971113 -0.437667 -v -0.521508 0.974612 -0.432816 -v -0.529686 0.970959 -0.439177 -v -0.519084 0.973822 -0.436159 -v -0.528450 0.970556 -0.440881 -v -0.517299 0.972578 -0.439756 -v -0.527540 0.969921 -0.442715 -v -0.516221 0.970925 -0.443469 -v -0.526991 0.969079 -0.444608 -v -0.515891 0.968928 -0.447154 -v -0.526823 0.968061 -0.446487 -v -0.516322 0.966664 -0.450671 -v -0.527043 0.966907 -0.448279 -v -0.517498 0.964220 -0.453883 -v -0.527642 0.965661 -0.449917 -v -0.519374 0.961690 -0.456668 -v -0.528598 0.964371 -0.451337 -v -0.521876 0.959170 -0.458918 -v -0.529874 0.963086 -0.452484 -v -0.524910 0.956758 -0.460548 -v -0.531421 0.961856 -0.453314 -v -0.528358 0.954546 -0.461493 -v -0.533179 0.960729 -0.453797 -v -0.532089 0.952620 -0.461719 -v -0.535080 0.959747 -0.453912 -v -0.535957 0.951053 -0.461216 -v -0.537053 0.958948 -0.453655 -v -0.539816 0.949906 -0.460004 -v -0.539020 0.958363 -0.453038 -v -0.543517 0.949222 -0.458129 -v -0.540906 0.958015 -0.452082 -v -0.546917 0.949029 -0.455664 -v -0.542640 0.957916 -0.450825 -v -0.549886 0.949332 -0.452703 -v -0.544153 0.958071 -0.449315 -v -0.552309 0.950122 -0.449359 -v -0.545389 0.958474 -0.447611 -v -0.554094 0.951367 -0.445762 -v -0.546299 0.959108 -0.445777 -v -0.555173 0.953019 -0.442049 -v -0.546848 0.959951 -0.443884 -v -0.555502 0.955016 -0.438364 -v -0.547016 0.960968 -0.442005 -v -0.537332 0.965373 -0.444748 -v -0.555071 0.957280 -0.434848 -v -0.546796 0.962123 -0.440213 -v -0.553895 0.959724 -0.431635 -v -0.546197 0.963369 -0.438575 -v -0.552019 0.962255 -0.428850 -v -0.545241 0.964659 -0.437155 -v -0.549517 0.964774 -0.426600 -v -0.543965 0.965943 -0.436008 -v -0.546483 0.967187 -0.424971 -v -0.542418 0.967173 -0.435178 -v -0.543035 0.969398 -0.424025 -v -0.540661 0.968301 -0.434695 -v -0.539305 0.971325 -0.423799 -v -0.538759 0.969283 -0.434580 -v -0.535436 0.972891 -0.424302 -v -0.536787 0.970081 -0.434837 -v -0.531577 0.974039 -0.425514 -v -0.534819 0.970666 -0.435455 -v -0.527876 0.974722 -0.427389 -v -0.532933 0.971015 -0.436410 -v -0.527903 0.973309 -0.433843 -v -0.525649 0.973078 -0.436092 -v -0.522998 0.974809 -0.431345 -v -0.530446 0.971047 -0.438426 -v -0.523808 0.972479 -0.438630 -v -0.520299 0.974262 -0.434501 -v -0.529071 0.970768 -0.440034 -v -0.522453 0.971533 -0.441362 -v -0.527998 0.970250 -0.441803 -v -0.518193 0.973244 -0.437974 -v -0.521634 0.970279 -0.444180 -v -0.516760 0.971794 -0.441632 -v -0.527268 0.969511 -0.443667 -v -0.521384 0.968763 -0.446979 -v -0.516056 0.969968 -0.445334 -v -0.526909 0.968580 -0.445553 -v -0.521712 0.967044 -0.449649 -v -0.516107 0.967836 -0.448938 -v -0.526935 0.967494 -0.447389 -v -0.522605 0.965188 -0.452088 -v -0.527345 0.966294 -0.449105 -v -0.516911 0.965480 -0.452305 -v -0.524029 0.963266 -0.454202 -v -0.518438 0.962990 -0.455306 -v -0.528123 0.965025 -0.450634 -v -0.525929 0.961353 -0.455911 -v -0.520629 0.960463 -0.457826 -v -0.529239 0.963738 -0.451918 -v -0.528232 0.959522 -0.457148 -v -0.523399 0.957995 -0.459767 -v -0.530651 0.962480 -0.452907 -v -0.530850 0.957842 -0.457866 -v -0.532303 0.961302 -0.453563 -v -0.526643 0.955681 -0.461056 -v -0.533683 0.956380 -0.458038 -v -0.530235 0.953610 -0.461642 -v -0.534133 0.960247 -0.453862 -v -0.536620 0.955190 -0.457656 -v -0.534038 0.951862 -0.461504 -v -0.536071 0.959356 -0.453791 -v -0.539550 0.954319 -0.456735 -v -0.537905 0.950504 -0.460645 -v -0.538041 0.958664 -0.453354 -v -0.542360 0.953800 -0.455312 -v -0.541688 0.949588 -0.459101 -v -0.539968 0.958197 -0.452567 -v -0.544942 0.953653 -0.453440 -v -0.545241 0.949149 -0.456929 -v -0.541779 0.957974 -0.451461 -v -0.547196 0.953884 -0.451191 -v -0.548429 0.949204 -0.454213 -v -0.543402 0.958002 -0.450077 -v -0.549036 0.954483 -0.448653 -v -0.551127 0.949751 -0.451058 -v -0.544777 0.958281 -0.448469 -v -0.550391 0.955428 -0.445921 -v -0.553233 0.950769 -0.447585 -v -0.545850 0.958799 -0.446700 -v -0.551210 0.956683 -0.443102 -v -0.554666 0.952219 -0.443927 -v -0.546580 0.959538 -0.444836 -v -0.551460 0.958199 -0.440304 -v -0.542328 0.963416 -0.443519 -v -0.555370 0.954045 -0.440225 -v -0.546939 0.960468 -0.442950 -v -0.551133 0.959918 -0.437634 -v -0.555319 0.956177 -0.436621 -v -0.546913 0.961555 -0.441114 -v -0.550240 0.961774 -0.435195 -v -0.554515 0.958533 -0.433253 -v -0.546503 0.962755 -0.439398 -v -0.548816 0.963695 -0.433081 -v -0.545726 0.964023 -0.437869 -v -0.552988 0.961023 -0.430252 -v -0.546916 0.965609 -0.431372 -v -0.550797 0.963550 -0.427733 -v -0.544609 0.965311 -0.436586 -v -0.544612 0.967440 -0.430135 -v -0.548027 0.966018 -0.425791 -v -0.543198 0.966568 -0.435597 -v -0.541994 0.969119 -0.429417 -v -0.544783 0.968332 -0.424502 -v -0.541545 0.967747 -0.434940 -v -0.539162 0.970582 -0.429245 -v -0.539715 0.968802 -0.434641 -v -0.541191 0.970403 -0.423916 -v -0.536224 0.971772 -0.429627 -v -0.537388 0.972151 -0.424055 -v -0.537778 0.969693 -0.434712 -v -0.533294 0.972643 -0.430547 -v -0.533521 0.973509 -0.424913 -v -0.535807 0.970385 -0.435149 -v -0.530484 0.973162 -0.431971 -v -0.529738 0.974425 -0.426458 -v -0.533880 0.970852 -0.435936 -v -0.534371 0.968519 -0.441337 -v -0.533610 0.968441 -0.442096 -v -0.532988 0.968239 -0.442954 -v -0.532531 0.967919 -0.443876 -v -0.532254 0.967496 -0.444829 -v -0.532170 0.966984 -0.445774 -v -0.532280 0.966403 -0.446676 -v -0.532582 0.965776 -0.447499 -v -0.533063 0.965127 -0.448214 -v -0.533705 0.964481 -0.448791 -v -0.534483 0.963862 -0.449209 -v -0.535367 0.963295 -0.449451 -v -0.536324 0.962801 -0.449509 -v -0.537316 0.962399 -0.449380 -v -0.538306 0.962105 -0.449069 -v -0.539255 0.961930 -0.448588 -v -0.540127 0.961880 -0.447956 -v -0.540888 0.961958 -0.447197 -v -0.541509 0.962160 -0.446339 -v -0.541967 0.962480 -0.445417 -v -0.542244 0.962904 -0.444464 -v -0.542218 0.963996 -0.442618 -v -0.541916 0.964623 -0.441794 -v -0.541435 0.965272 -0.441079 -v -0.540793 0.965918 -0.440502 -v -0.540015 0.966537 -0.440085 -v -0.539131 0.967104 -0.439842 -v -0.538174 0.967598 -0.439784 -v -0.537182 0.968000 -0.439913 -v -0.536192 0.968294 -0.440224 -v -0.535243 0.968470 -0.440705 -v -0.532070 0.971075 -0.437043 -v -0.526185 0.974864 -0.428630 -v -0.526781 0.973219 -0.434975 -v -0.524733 0.972804 -0.437370 -v -0.523134 0.972031 -0.440006 -v -0.522047 0.970930 -0.442783 -v -0.521512 0.969544 -0.445593 -v -0.521551 0.967926 -0.448328 -v -0.522161 0.966138 -0.450884 -v -0.523320 0.964248 -0.453162 -v -0.524983 0.962330 -0.455074 -v -0.527086 0.960457 -0.456548 -v -0.529548 0.958700 -0.457526 -v -0.532274 0.957129 -0.457971 -v -0.535161 0.955802 -0.457866 -v -0.538096 0.954771 -0.457214 -v -0.540967 0.954075 -0.456042 -v -0.543664 0.953742 -0.454393 -v -0.546083 0.953784 -0.452332 -v -0.548132 0.954199 -0.449937 -v -0.549730 0.954972 -0.447301 -v -0.550818 0.956073 -0.444524 -v -0.551353 0.957459 -0.441714 -v -0.551314 0.959077 -0.438979 -v -0.550703 0.960865 -0.436423 -v -0.549544 0.962755 -0.434145 -v -0.547881 0.964673 -0.432233 -v -0.545779 0.966546 -0.430759 -v -0.543317 0.968303 -0.429781 -v -0.540590 0.969874 -0.429336 -v -0.537704 0.971201 -0.429441 -v -0.534768 0.972232 -0.430093 -v -0.531897 0.972928 -0.431265 -v -0.529200 0.973261 -0.432914 -v -0.278633 0.972176 -0.169592 -v -0.294496 0.987579 -0.191783 -v -0.315813 0.996242 -0.220002 -v -0.345297 1.010831 -0.259381 -v -0.379326 1.021626 -0.304026 -v -0.414714 1.021300 -0.348918 -v -0.450102 1.009866 -0.392330 -v -0.238105 0.964990 -0.207660 -v -0.256320 0.980810 -0.227642 -v -0.281455 0.990149 -0.252275 -v -0.316078 1.005650 -0.286827 -v -0.356369 1.017555 -0.325590 -v -0.398901 1.018496 -0.363771 -v -0.442040 1.008437 -0.399903 -v -0.205451 0.952861 -0.251590 -v -0.225560 0.969385 -0.269024 -v -0.253772 0.979867 -0.289517 -v -0.292535 0.996905 -0.318499 -v -0.337872 1.010685 -0.350475 -v -0.386160 1.013764 -0.380912 -v -0.435545 1.006024 -0.408641 -v -0.181925 0.936256 -0.299696 -v -0.203399 0.953743 -0.314338 -v -0.233828 0.965789 -0.330299 -v -0.275574 0.984934 -0.353181 -v -0.324545 1.001278 -0.377724 -v -0.376981 1.007284 -0.399682 -v -0.430865 1.002721 -0.418210 -v -0.168432 0.915812 -0.350127 -v -0.190689 0.934485 -0.361843 -v -0.222389 0.948458 -0.373053 -v -0.265846 0.970195 -0.389540 -v -0.316902 0.989698 -0.406291 -v -0.371716 0.999308 -0.419359 -v -0.428182 0.998655 -0.428241 -v -0.165490 0.892316 -0.400946 -v -0.187918 0.912352 -0.409714 -v -0.219895 0.928539 -0.416135 -v -0.263725 0.953255 -0.426178 -v -0.315236 0.976388 -0.435078 -v -0.370568 0.990140 -0.439188 -v -0.427596 0.993981 -0.438350 -v -0.173213 0.866670 -0.450200 -v -0.195192 0.888194 -0.456110 -v -0.226441 0.906797 -0.457890 -v -0.269293 0.934765 -0.461688 -v -0.319610 0.961861 -0.462978 -v -0.373581 0.980133 -0.458405 -v -0.429132 0.988880 -0.448147 -v -0.191302 0.839860 -0.495996 -v -0.212232 0.862940 -0.499249 -v -0.241777 0.884069 -0.496714 -v -0.282335 0.915436 -0.494706 -v -0.329857 0.946674 -0.488919 -v -0.380639 0.969673 -0.476274 -v -0.432731 0.983547 -0.457256 -v -0.219064 0.812916 -0.536574 -v -0.238383 0.837559 -0.537473 -v -0.265313 0.861227 -0.531115 -v -0.302350 0.896011 -0.523961 -v -0.345583 0.931412 -0.511905 -v -0.391472 0.959160 -0.492107 -v -0.438253 0.978187 -0.465328 -v -0.255432 0.786873 -0.570376 -v -0.272641 0.813028 -0.569313 -v -0.296143 0.839149 -0.559771 -v -0.328569 0.877235 -0.548330 -v -0.366183 0.916660 -0.531052 -v -0.405661 0.948999 -0.505296 -v -0.445487 0.973007 -0.472051 -v -0.299007 0.762734 -0.596101 -v -0.313688 0.790289 -0.593546 -v -0.333085 0.818684 -0.581579 -v -0.359985 0.859831 -0.566877 -v -0.390867 0.902986 -0.545624 -v -0.422664 0.939580 -0.515333 -v -0.454154 0.968206 -0.477168 -v -0.348115 0.741424 -0.612761 -v -0.359947 0.770215 -0.609240 -v -0.374717 0.800619 -0.595703 -v -0.395391 0.844468 -0.578889 -v -0.418684 0.890915 -0.555062 -v -0.441825 0.931265 -0.521834 -v -0.463923 0.963967 -0.480482 -v -0.400870 0.723763 -0.619717 -v -0.409640 0.753579 -0.615791 -v -0.419440 0.785647 -0.601600 -v -0.433424 0.831735 -0.583903 -v -0.448567 0.880911 -0.559002 -v -0.462409 0.924374 -0.524548 -v -0.474416 0.960454 -0.481866 -v -0.455243 0.710430 -0.616700 -v -0.460859 0.741020 -0.612950 -v -0.465535 0.774344 -0.599042 -v -0.472625 0.822123 -0.581728 -v -0.479367 0.873359 -0.557293 -v -0.483624 0.919172 -0.523371 -v -0.485232 0.957802 -0.481266 -v -0.509145 0.701937 -0.603827 -v -0.511634 0.733020 -0.600823 -v -0.511231 0.767144 -0.588129 -v -0.511487 0.816000 -0.572447 -v -0.509901 0.868548 -0.550001 -v -0.504656 0.915858 -0.518348 -v -0.495954 0.956113 -0.478705 -v -0.560505 0.698611 -0.581592 -v -0.560014 0.729886 -0.579879 -v -0.554772 0.764324 -0.569279 -v -0.548515 0.813601 -0.556417 -v -0.538994 0.866663 -0.537406 -v -0.524695 0.914560 -0.509672 -v -0.506170 0.955451 -0.474282 -v -0.607349 0.700579 -0.550850 -v -0.604140 0.731740 -0.550920 -v -0.594485 0.765992 -0.543217 -v -0.582288 0.815020 -0.534253 -v -0.565529 0.867778 -0.519992 -v -0.542973 0.915328 -0.497677 -v -0.515488 0.955842 -0.468167 -v -0.647877 0.707765 -0.512782 -v -0.642316 0.738510 -0.515061 -v -0.628843 0.772084 -0.510945 -v -0.611507 0.820201 -0.506808 -v -0.588486 0.871849 -0.498428 -v -0.558786 0.918132 -0.482824 -v -0.523804 0.953636 -0.459109 -v -0.680531 0.719894 -0.468852 -v -0.673076 0.749935 -0.473679 -v -0.656525 0.782367 -0.473702 -v -0.635049 0.828946 -0.475135 -v -0.606983 0.878720 -0.473543 -v -0.571527 0.922864 -0.465683 -v -0.531714 0.953934 -0.450611 -v -0.704057 0.736500 -0.420746 -v -0.695237 0.765577 -0.428365 -v -0.676470 0.796444 -0.432921 -v -0.652010 0.840918 -0.440454 -v -0.620309 0.888126 -0.446294 -v -0.580706 0.929344 -0.446913 -v -0.536923 0.956848 -0.440806 -v -0.717550 0.756943 -0.370315 -v -0.707947 0.784834 -0.380860 -v -0.687909 0.813776 -0.390167 -v -0.661738 0.855657 -0.404095 -v -0.627952 0.899706 -0.417727 -v -0.585971 0.937320 -0.427236 -v -0.539247 0.961473 -0.430560 -v -0.720492 0.780440 -0.319496 -v -0.710718 0.806967 -0.332990 -v -0.690402 0.833695 -0.347085 -v -0.663859 0.872597 -0.367456 -v -0.629619 0.913016 -0.388940 -v -0.587119 0.946488 -0.407407 -v -0.538122 0.967966 -0.420997 -v -0.484129 0.987764 -0.432596 -v -0.712770 0.806086 -0.270242 -v -0.703444 0.831125 -0.286594 -v -0.683856 0.855436 -0.305330 -v -0.658292 0.891086 -0.331946 -v -0.625244 0.927543 -0.361040 -v -0.584106 0.956495 -0.388189 -v -0.536457 0.976829 -0.412351 -v -0.694680 0.832896 -0.224446 -v -0.686404 0.856380 -0.243454 -v -0.668520 0.878165 -0.266505 -v -0.645250 0.910415 -0.298929 -v -0.614998 0.942730 -0.335099 -v -0.577048 0.966955 -0.370321 -v -0.532859 0.982162 -0.403242 -v -0.666918 0.859839 -0.183868 -v -0.660252 0.881760 -0.205230 -v -0.644985 0.901007 -0.232105 -v -0.625235 0.929841 -0.269673 -v -0.599272 0.957992 -0.312113 -v -0.566216 0.977468 -0.354488 -v -0.527337 0.987521 -0.395170 -v -0.630551 0.885882 -0.150066 -v -0.625995 0.906292 -0.173390 -v -0.614154 0.923084 -0.203449 -v -0.599015 0.948616 -0.245304 -v -0.578671 0.972744 -0.292966 -v -0.552026 0.987630 -0.341299 -v -0.520103 0.992701 -0.388447 -v -0.586976 0.910022 -0.124341 -v -0.584948 0.929031 -0.149158 -v -0.577213 0.943549 -0.181641 -v -0.567599 0.966020 -0.226757 -v -0.553988 0.986418 -0.278394 -v -0.535023 0.997048 -0.331262 -v -0.511435 0.997503 -0.383330 -v -0.537867 0.931331 -0.107681 -v -0.538689 0.949104 -0.133464 -v -0.535581 0.961614 -0.167517 -v -0.532194 0.981383 -0.214746 -v -0.526170 0.998489 -0.268956 -v -0.515862 1.005363 -0.324761 -v -0.501667 1.001742 -0.380015 -v -0.485113 0.948992 -0.100725 -v -0.488996 0.965740 -0.126912 -v -0.490858 0.976587 -0.161620 -v -0.494160 0.994116 -0.209731 -v -0.496287 1.008493 -0.265017 -v -0.495279 1.012254 -0.322047 -v -0.491173 1.005255 -0.378632 -v -0.430740 0.962325 -0.103742 -v -0.437777 0.978299 -0.129754 -v -0.444762 0.987890 -0.164178 -v -0.454959 1.003729 -0.211906 -v -0.465487 1.016046 -0.266725 -v -0.474063 1.017456 -0.323224 -v -0.480358 1.007907 -0.379232 -v -0.376837 0.970818 -0.116615 -v -0.387002 0.986300 -0.141880 -v -0.399066 0.995090 -0.175091 -v -0.416098 1.009852 -0.221187 -v -0.434954 1.020856 -0.274017 -v -0.453032 1.020770 -0.328247 -v -0.469636 1.009596 -0.381793 -v -0.325477 0.974144 -0.138850 -v -0.338622 0.989433 -0.162825 -v -0.355525 0.997910 -0.193941 -v -0.379070 1.012250 -0.237218 -v -0.405861 1.022741 -0.286613 -v -0.432992 1.022068 -0.336923 -v -0.459420 1.010258 -0.386215 -v -0.415446 0.857282 -0.444361 -v -0.417073 0.866694 -0.445501 -v -0.432496 1.017174 -0.370947 -v -0.420489 1.015045 -0.382225 -v -0.406800 1.020138 -0.356382 -v -0.446078 1.009213 -0.396135 -v -0.410815 1.011451 -0.395240 -v -0.392511 1.016366 -0.372392 -v -0.438798 1.007291 -0.404292 -v -0.403845 1.006532 -0.409491 -v -0.433209 1.004433 -0.413448 -v -0.381542 1.010756 -0.390363 -v -0.399848 1.000475 -0.424432 -v -0.374314 1.003522 -0.409602 -v -0.429526 1.000747 -0.423250 -v -0.398976 0.993514 -0.439488 -v -0.371104 0.994942 -0.429372 -v -0.427891 0.996376 -0.433322 -v -0.401264 0.985916 -0.454079 -v -0.372038 0.985347 -0.448912 -v -0.428367 0.991487 -0.443278 -v -0.406623 0.977974 -0.467647 -v -0.430935 0.986269 -0.452733 -v -0.377078 0.975105 -0.467471 -v -0.414848 0.969991 -0.479669 -v -0.386031 0.964609 -0.484336 -v -0.435496 0.980922 -0.461325 -v -0.425622 0.962276 -0.489683 -v -0.398552 0.954263 -0.498859 -v -0.441876 0.975651 -0.468725 -v -0.438531 0.955124 -0.497304 -v -0.414161 0.944465 -0.510482 -v -0.449828 0.970659 -0.474646 -v -0.453080 0.948811 -0.502240 -v -0.459048 0.966137 -0.478863 -v -0.432258 0.935591 -0.518758 -v -0.468709 0.943579 -0.504300 -v -0.452147 0.927981 -0.523369 -v -0.469181 0.962261 -0.481212 -v -0.484818 0.939629 -0.503407 -v -0.473065 0.921930 -0.524138 -v -0.479838 0.959177 -0.481604 -v -0.500787 0.937113 -0.499593 -v -0.494206 0.917668 -0.521035 -v -0.490609 0.957006 -0.480023 -v -0.516003 0.936127 -0.493006 -v -0.514759 0.915360 -0.514180 -v -0.501081 0.955831 -0.476531 -v -0.529881 0.936710 -0.483898 -v -0.533934 0.915095 -0.503836 -v -0.510850 0.955695 -0.471260 -v -0.540733 0.936655 -0.470678 -v -0.550994 0.916883 -0.490401 -v -0.517062 0.957178 -0.461155 -v -0.550829 0.939020 -0.457830 -v -0.565283 0.920654 -0.474390 -v -0.526043 0.955162 -0.453987 -v -0.557939 0.943609 -0.443723 -v -0.576252 0.926265 -0.456420 -v -0.532387 0.956737 -0.445250 -v -0.561669 0.949869 -0.428975 -v -0.583480 0.933499 -0.437180 -v -0.536014 0.960367 -0.435597 -v -0.561843 0.957783 -0.414486 -v -0.520832 0.975010 -0.425454 -v -0.586689 0.942078 -0.417410 -v -0.536532 0.965659 -0.426069 -v -0.561113 0.967968 -0.400765 -v -0.585756 0.951673 -0.397871 -v -0.533283 0.973412 -0.417979 -v -0.555753 0.975910 -0.387198 -v -0.580716 0.961916 -0.379312 -v -0.534685 0.979550 -0.407818 -v -0.547529 0.983893 -0.375176 -v -0.530123 0.984897 -0.399225 -v -0.571763 0.972411 -0.362447 -v -0.536754 0.991608 -0.365162 -v -0.559242 0.982757 -0.347924 -v -0.523744 0.990168 -0.391826 -v -0.523845 0.998760 -0.357541 -v -0.543633 0.992555 -0.336301 -v -0.515791 0.995160 -0.385904 -v -0.509296 1.005073 -0.352605 -v -0.525536 1.001430 -0.328025 -v -0.506571 0.999681 -0.381688 -v -0.493667 1.010305 -0.350544 -v -0.496438 1.003558 -0.379339 -v -0.505646 1.009039 -0.323414 -v -0.477559 1.014255 -0.351438 -v -0.484729 1.015090 -0.322645 -v -0.485781 1.006641 -0.378947 -v -0.461589 1.016771 -0.355252 -v -0.463588 1.019352 -0.325747 -v -0.475010 1.008812 -0.380527 -v -0.446374 1.017757 -0.361839 -v -0.443035 1.021660 -0.332602 -v -0.464539 1.009988 -0.384020 -v -0.467412 1.000360 -0.413046 -v -0.463357 0.999641 -0.416855 -v -0.460089 0.998427 -0.421251 -v -0.457735 0.996765 -0.426065 -v -0.456385 0.994720 -0.431111 -v -0.456091 0.992368 -0.436197 -v -0.456863 0.989802 -0.441125 -v -0.458674 0.987119 -0.445708 -v -0.461452 0.984423 -0.449768 -v -0.465091 0.981817 -0.453151 -v -0.469451 0.979402 -0.455725 -v -0.474365 0.977269 -0.457392 -v -0.479644 0.975502 -0.458088 -v -0.485085 0.974168 -0.457786 -v -0.490479 0.973318 -0.456498 -v -0.495618 0.972985 -0.454273 -v -0.500306 0.973182 -0.451197 -v -0.511379 0.965548 -0.450617 -v -0.517597 0.964818 -0.445377 -v -0.521351 0.966678 -0.438652 -v -0.522773 0.969998 -0.431599 -v -0.510855 0.983740 -0.423117 -v -0.509045 0.986422 -0.418535 -v -0.506266 0.989119 -0.414474 -v -0.502627 0.991724 -0.411092 -v -0.498267 0.994140 -0.408518 -v -0.493353 0.996272 -0.406851 -v -0.488074 0.998040 -0.406155 -v -0.482633 0.999374 -0.406457 -v -0.477239 1.000224 -0.407745 -v -0.472100 1.000557 -0.409970 -v -0.454769 1.010123 -0.389290 -v -0.423860 1.021925 -0.342946 -v -0.426497 1.016246 -0.376617 -v -0.415652 1.013384 -0.388769 -v -0.407326 1.009125 -0.402409 -v -0.401839 1.003634 -0.417013 -v -0.399404 0.997122 -0.432018 -v -0.400112 0.989839 -0.446849 -v -0.403937 0.982065 -0.460936 -v -0.410733 0.974099 -0.473737 -v -0.420237 0.966246 -0.484760 -v -0.432085 0.958809 -0.493582 -v -0.445820 0.952073 -0.499864 -v -0.460917 0.946298 -0.503364 -v -0.476793 0.941704 -0.503947 -v -0.492840 0.938470 -0.501592 -v -0.508440 0.936718 -0.496389 -v -0.522994 0.936517 -0.488538 -v -0.534619 0.936980 -0.476557 -v -0.545722 0.937873 -0.464221 -v -0.554352 0.941408 -0.450806 -v -0.559776 0.946836 -0.436369 -v -0.561683 0.953847 -0.421735 -v -0.560447 0.962830 -0.407806 -v -0.558503 0.972054 -0.394021 -v -0.551708 0.980021 -0.381220 -v -0.542203 0.987873 -0.370197 -v -0.530356 0.995311 -0.361375 -v -0.516620 1.002046 -0.355094 -v -0.501524 1.007822 -0.351594 -v -0.485647 1.012415 -0.351010 -v -0.469600 1.015650 -0.353365 -v -0.454000 1.017401 -0.358568 -v -0.439446 1.017603 -0.366419 -vn 0.210974 0.967528 0.139164 -vn 0.223701 0.962066 0.156041 -vn 0.306406 0.950591 0.049532 -vn 0.124363 0.991882 0.025971 -vn 0.203894 0.977783 -0.048402 -vn 0.022462 0.994324 -0.103732 -vn 0.291482 0.924070 0.247169 -vn 0.361278 0.866878 0.343425 -vn 0.400739 0.904691 0.144536 -vn 0.321390 0.944731 0.064272 -vn 0.400098 0.915494 -0.041566 -vn 0.383282 0.922025 -0.053865 -vn 0.081088 0.983428 -0.162053 -vn 0.267800 0.954039 -0.134404 -vn 0.481491 0.845576 0.230537 -vn 0.488784 0.871975 0.026124 -vn 0.552202 0.827204 -0.103549 -vn 0.438704 0.882931 -0.167150 -vn 0.313883 0.921506 -0.228614 -vn 0.128025 0.965697 -0.225837 -vn 0.578326 0.809595 0.100253 -vn 0.648091 0.760338 -0.042390 -vn 0.688131 0.699728 -0.191961 -vn 0.456801 0.875484 -0.157537 -vn 0.489334 0.826197 -0.279092 -vn 0.470473 0.834803 -0.285897 -vn 0.161718 0.941496 -0.295572 -vn 0.340281 0.881497 -0.327342 -vn 0.180883 0.911802 -0.368603 -vn 0.346233 0.835414 -0.426771 -vn 0.588580 0.772088 -0.239509 -vn 0.696829 0.630024 -0.342662 -vn 0.496445 0.769555 -0.401593 -vn 0.477401 0.779473 -0.405560 -vn 0.459212 0.719077 -0.521531 -vn 0.330699 0.785363 -0.523240 -vn 0.175787 0.840907 -0.511795 -vn 0.596515 0.708762 -0.376537 -vn 0.575701 0.639607 -0.509323 -vn 0.477828 0.707724 -0.520341 -vn 0.526933 0.567339 -0.632801 -vn 0.416608 0.655934 -0.629383 -vn 0.295480 0.732780 -0.612934 -vn 0.673940 0.553972 -0.488754 -vn 0.620289 0.474471 -0.624561 -vn 0.452101 0.494675 -0.742180 -vn 0.434217 0.643117 -0.630726 -vn 0.367290 0.578173 -0.728538 -vn 0.351238 0.592517 -0.724937 -vn 0.146641 0.801691 -0.579424 -vn 0.241310 0.679922 -0.692404 -vn 0.169958 0.629078 -0.758507 -vn 0.056154 0.726920 -0.684378 -vn 0.537950 0.394574 -0.744896 -vn 0.430097 0.317331 -0.845149 -vn 0.279611 0.515397 -0.810022 -vn 0.265603 0.531175 -0.804529 -vn 0.174596 0.457198 -0.872036 -vn 0.084658 0.581805 -0.808893 -vn -0.006653 0.691916 -0.721915 -vn 0.354045 0.424482 -0.833338 -vn 0.300882 0.245735 -0.921445 -vn 0.236549 0.359386 -0.902676 -vn 0.104160 0.301950 -0.947600 -vn 0.162999 0.474349 -0.865078 -vn 0.047365 0.424177 -0.904324 -vn -0.011475 0.540086 -0.841517 -vn -0.077548 0.660939 -0.746391 -vn 0.155217 0.182531 -0.970855 -vn -0.038057 0.254341 -0.966338 -vn 0.056215 0.405835 -0.912198 -vn -0.070925 0.363262 -0.928953 -vn -0.076815 0.382580 -0.920713 -vn -0.114841 0.505661 -0.855037 -vn -0.155278 0.633076 -0.758324 -vn -0.221229 0.479171 -0.849361 -vn -0.001190 0.130161 -0.991485 -vn -0.162450 0.090609 -0.982513 -vn -0.202002 0.331126 -0.921690 -vn -0.204871 0.351177 -0.913602 -vn -0.326762 0.462752 -0.824030 -vn -0.310526 0.603320 -0.734519 -vn -0.184637 0.218390 -0.958220 -vn -0.329966 0.195471 -0.923521 -vn -0.331919 0.310648 -0.890652 -vn -0.331767 0.331187 -0.883297 -vn -0.455733 0.302622 -0.837062 -vn -0.452712 0.323344 -0.830927 -vn -0.427290 0.456435 -0.780389 -vn -0.387432 0.596515 -0.702872 -vn -0.322306 0.065432 -0.944365 -vn -0.468429 0.186529 -0.863552 -vn -0.474624 0.055574 -0.878414 -vn -0.594714 0.191809 -0.780694 -vn -0.568651 0.307352 -0.762963 -vn -0.563005 0.327982 -0.758538 -vn -0.519089 0.460097 -0.720267 -vn -0.457930 0.613758 -0.643086 -vn -0.598437 0.474166 -0.645741 -vn -0.613544 0.061403 -0.787225 -vn -0.733757 0.082705 -0.674337 -vn -0.704001 0.211188 -0.678060 -vn -0.658437 0.344920 -0.668905 -vn -0.662465 0.497726 -0.559771 -vn -0.491714 0.649556 -0.579852 -vn -0.792016 0.243904 -0.559618 -vn -0.666341 0.324686 -0.671194 -vn -0.745079 0.353923 -0.565294 -vn -0.735343 0.373455 -0.565447 -vn -0.855464 0.288675 -0.429914 -vn -0.801782 0.393963 -0.449324 -vn -0.708274 0.530595 -0.465590 -vn -0.547624 0.694357 -0.466811 -vn -0.830592 0.118686 -0.544053 -vn -0.900357 0.167943 -0.401379 -vn -0.891842 0.343791 -0.293954 -vn -0.790735 0.412580 -0.452193 -vn -0.822504 0.460707 -0.333445 -vn -0.734977 0.570269 -0.366771 -vn -0.740440 0.616596 -0.267403 -vn -0.581835 0.737846 -0.342082 -vn -0.940367 0.228553 -0.251839 -vn -0.899777 0.407117 -0.156926 -vn -0.834315 0.443251 -0.327769 -vn -0.841395 0.499863 -0.205267 -vn -0.829432 0.516037 -0.213782 -vn -0.725455 0.666677 -0.170843 -vn -0.949095 0.298257 -0.101108 -vn -0.926206 0.374310 0.044923 -vn -0.878933 0.476272 -0.024140 -vn -0.822779 0.561693 -0.086550 -vn -0.811243 0.576434 -0.097812 -vn -0.779168 0.626331 0.023835 -vn -0.690023 0.719169 -0.081179 -vn -0.597766 0.756615 -0.264870 -vn -0.872555 0.453810 0.180761 -vn -0.830164 0.548540 0.099307 -vn -0.790216 0.533708 0.301096 -vn -0.755333 0.621204 0.208686 -vn -0.768670 0.639546 0.010010 -vn -0.712241 0.691275 0.121647 -vn -0.635823 0.771813 -0.001617 -vn -0.580157 0.793603 -0.183233 -vn -0.564531 0.822871 0.064364 -vn -0.489669 0.868374 -0.078310 -vn -0.682363 0.610950 0.401349 -vn -0.624592 0.754051 0.203131 -vn -0.703299 0.702994 0.105564 -vn -0.617664 0.764306 0.185156 -vn -0.479110 0.870235 0.114536 -vn -0.425916 0.903958 -0.037935 -vn -0.657277 0.691397 0.299814 -vn -0.553117 0.682546 0.477615 -vn -0.519547 0.812250 0.265114 -vn -0.515030 0.821162 0.245735 -vn -0.401166 0.863613 0.305277 -vn -0.382977 0.911893 0.147374 -vn -0.539781 0.756493 0.369182 -vn -0.407483 0.745750 0.527055 -vn -0.407392 0.813929 0.414106 -vn -0.251045 0.798120 0.547655 -vn -0.273995 0.906186 0.322062 -vn -0.399426 0.871334 0.284951 -vn -0.275185 0.912931 0.301340 -vn -0.352153 0.935789 -0.015412 -vn -0.279733 0.946440 0.161199 -vn -0.173315 0.972564 0.155065 -vn -0.201025 0.979522 -0.009857 -vn -0.265175 0.861568 0.432844 -vn -0.089785 0.837672 0.538713 -vn -0.142918 0.938322 0.314798 -vn -0.147160 0.944304 0.294229 -vn -0.067812 0.989227 0.129643 -vn -0.120304 0.992370 -0.026673 -vn -0.118564 0.897488 0.424726 -vn 0.070040 0.862850 0.500534 -vn -0.013001 0.958800 0.283761 -vn -0.020234 0.964324 0.263924 -vn 0.110782 0.966796 0.230171 -vn 0.032899 0.995697 0.086520 -vn 0.026734 0.920408 0.389996 -vn 0.222358 0.872707 0.434584 -vn 0.165197 0.929380 0.330058 -vn 0.100681 0.972137 0.211554 -vn 0.048250 0.989959 -0.132664 -vn 0.101382 0.976196 -0.191687 -vn 0.142277 0.955596 -0.258034 -vn 0.169347 0.928953 -0.329112 -vn 0.181585 0.897305 -0.402234 -vn 0.182653 0.879025 -0.440382 -vn 0.177984 0.860134 -0.477950 -vn 0.160222 0.824030 -0.543352 -vn 0.127415 0.785211 -0.605914 -vn 0.105502 0.764672 -0.635701 -vn 0.078921 0.745140 -0.662191 -vn 0.020936 0.708975 -0.704917 -vn -0.046175 0.676229 -0.735221 -vn -0.119877 0.648213 -0.751946 -vn -0.193609 0.626881 -0.754662 -vn -0.234596 0.617054 -0.751091 -vn -0.275491 0.610370 -0.742637 -vn -0.351451 0.602008 -0.716941 -vn -0.419050 0.601062 -0.680502 -vn -0.463057 0.637104 -0.616138 -vn -0.495712 0.667684 -0.555345 -vn -0.517838 0.675344 -0.525040 -vn -0.528306 0.690207 -0.494400 -vn -0.549638 0.711570 -0.437605 -vn -0.562700 0.720267 -0.405621 -vn -0.564898 0.736930 -0.371197 -vn -0.582324 0.754143 -0.303507 -vn -0.594317 0.773431 -0.220344 -vn -0.561510 0.812250 -0.157781 -vn -0.539445 0.832240 -0.127750 -vn -0.513016 0.852321 -0.101535 -vn -0.455031 0.888516 -0.058809 -vn -0.391247 0.919797 -0.029633 -vn -0.317789 0.948057 -0.012238 -vn -0.277627 0.960631 -0.007996 -vn -0.236763 0.971496 -0.009247 -vn -0.158574 0.987091 -0.021088 -vn -0.086123 0.995239 -0.045228 -vn -0.047731 0.996857 -0.062899 -vn -0.011841 0.996277 -0.085299 -vn -0.194830 0.936521 -0.291391 -vn -0.156560 0.954192 -0.254860 -vn -0.133274 0.951018 -0.278878 -vn -0.158269 0.929136 -0.334117 -vn -0.113315 0.945433 -0.305368 -vn -0.094485 0.938383 -0.332347 -vn -0.129734 0.915311 -0.381207 -vn -0.079562 0.929136 -0.361034 -vn -0.065950 0.918455 -0.389904 -vn -0.110324 0.895688 -0.430738 -vn -0.056612 0.905881 -0.419691 -vn -0.048708 0.892026 -0.449293 -vn -0.100772 0.870937 -0.480880 -vn -0.045320 0.876614 -0.478988 -vn -0.043428 0.860103 -0.508225 -vn -0.101474 0.842067 -0.529679 -vn -0.046144 0.842463 -0.536729 -vn -0.050325 0.823908 -0.564470 -vn -0.112369 0.810175 -0.575304 -vn -0.059023 0.804712 -0.590686 -vn -0.069155 0.784814 -0.615833 -vn -0.133061 0.776452 -0.615925 -vn -0.083499 0.764824 -0.638783 -vn -0.099124 0.744346 -0.660390 -vn -0.162725 0.742210 -0.650075 -vn -0.118595 0.724326 -0.679159 -vn -0.139164 0.704031 -0.696371 -vn -0.200262 0.708792 -0.676382 -vn -0.162969 0.684774 -0.710257 -vn -0.187689 0.665456 -0.722434 -vn -0.244209 0.677450 -0.693838 -vn -0.214972 0.647725 -0.730888 -vn -0.242836 0.630085 -0.737541 -vn -0.292825 0.649373 -0.701773 -vn -0.272530 0.614551 -0.740287 -vn -0.302469 0.599292 -0.741172 -vn -0.344371 0.625690 -0.699911 -vn -0.333445 0.586535 -0.738060 -vn -0.364360 0.574236 -0.733116 -vn -0.396741 0.607318 -0.688253 -vn -0.395428 0.564776 -0.724326 -vn -0.426069 0.555864 -0.713736 -vn -0.447981 0.594897 -0.667348 -vn -0.456008 0.550066 -0.699576 -vn -0.485275 0.544939 -0.683737 -vn -0.496109 0.588946 -0.637928 -vn -0.512986 0.543046 -0.664754 -vn -0.539628 0.541856 -0.644307 -vn -0.539293 0.589709 -0.601123 -vn -0.564043 0.543931 -0.621235 -vn -0.587146 0.546709 -0.596942 -vn -0.575823 0.597125 -0.558397 -vn -0.607288 0.552690 -0.570696 -vn -0.625904 0.559313 -0.543474 -vn -0.604358 0.610920 -0.511338 -vn -0.641011 0.568987 -0.515061 -vn -0.654439 0.579241 -0.485977 -vn -0.623768 0.630543 -0.461806 -vn -0.663991 0.592242 -0.456435 -vn -0.671682 0.605670 -0.426557 -vn -0.633320 0.655263 -0.411664 -vn -0.675283 0.621509 -0.397107 -vn -0.676962 0.637593 -0.367595 -vn -0.632618 0.684164 -0.362835 -vn -0.674459 0.655660 -0.339366 -vn -0.670064 0.673788 -0.311411 -vn -0.621723 0.716086 -0.317240 -vn -0.661580 0.693411 -0.285409 -vn -0.651234 0.712912 -0.259987 -vn -0.601062 0.749779 -0.276620 -vn -0.637104 0.733299 -0.237312 -vn -0.621265 0.753349 -0.215491 -vn -0.571368 0.784020 -0.242439 -vn -0.602008 0.773797 -0.196966 -vn -0.581225 0.793664 -0.179510 -vn -0.533860 0.817469 -0.216132 -vn -0.557604 0.813349 -0.165868 -vn -0.532701 0.832240 -0.153417 -vn -0.489914 0.848781 -0.198706 -vn -0.505631 0.850429 -0.145177 -vn -0.477523 0.867641 -0.138279 -vn -0.441237 0.876858 -0.190741 -vn -0.448073 0.883602 -0.135807 -vn -0.417890 0.898434 -0.134709 -vn -0.389752 0.900510 -0.192633 -vn -0.387127 0.911618 -0.138035 -vn -0.356029 0.923490 -0.142735 -vn -0.337352 0.918943 -0.204260 -vn -0.325175 0.933378 -0.151769 -vn -0.294290 0.941832 -0.162114 -vn -0.286111 0.931333 -0.225196 -vn -0.264534 0.948057 -0.176519 -vn -0.235115 0.952757 -0.192083 -vn -0.383465 0.797235 -0.466201 -vn -0.328898 0.853908 -0.403272 -vn -0.314951 0.852504 -0.417158 -vn -0.303568 0.848781 -0.432844 -vn -0.295206 0.842921 -0.449751 -vn -0.290139 0.835170 -0.467208 -vn -0.288583 0.825800 -0.484451 -vn -0.290628 0.815210 -0.500931 -vn -0.296152 0.803735 -0.515976 -vn -0.304941 0.791864 -0.529069 -vn -0.316660 0.780023 -0.539659 -vn -0.330912 0.768731 -0.547258 -vn -0.347118 0.758324 -0.551744 -vn -0.364574 0.749290 -0.552812 -vn -0.382702 0.741966 -0.550432 -vn -0.400830 0.736564 -0.544755 -vn -0.418165 0.733360 -0.535966 -vn -0.434126 0.732444 -0.524400 -vn -0.448073 0.733909 -0.510453 -vn -0.459426 0.737571 -0.494827 -vn -0.467818 0.743431 -0.477950 -vn -0.472884 0.751183 -0.460524 -vn -0.474410 0.760521 -0.443251 -vn -0.472396 0.771172 -0.426710 -vn -0.466872 0.782617 -0.411664 -vn -0.458083 0.794488 -0.398602 -vn -0.446364 0.806299 -0.388043 -vn -0.432112 0.817621 -0.380413 -vn -0.415937 0.828028 -0.375958 -vn -0.398450 0.837062 -0.374889 -vn -0.380291 0.844386 -0.377270 -vn -0.362163 0.849788 -0.382946 -vn -0.344859 0.852962 -0.391766 -vn -0.238014 0.937284 -0.254616 -vn -0.207617 0.955077 -0.211310 -vn -0.180731 0.955870 -0.231513 -vn -0.259590 0.899075 -0.352489 -vn -0.172674 0.934965 -0.309793 -vn -0.271981 0.901151 -0.337535 -vn -0.213233 0.939116 -0.269326 -vn -0.234840 0.894070 -0.381420 -vn -0.139531 0.924161 -0.355510 -vn -0.244514 0.898312 -0.364971 -vn -0.215583 0.884732 -0.413160 -vn -0.115146 0.907163 -0.404675 -vn -0.222114 0.891018 -0.395856 -vn -0.202429 0.871456 -0.446669 -vn -0.100406 0.884548 -0.455458 -vn -0.205603 0.879513 -0.429121 -vn -0.196020 0.854762 -0.480544 -vn -0.095889 0.857295 -0.505783 -vn -0.195624 0.864193 -0.463515 -vn -0.196448 0.835170 -0.513627 -vn -0.101779 0.826319 -0.553880 -vn -0.192572 0.845759 -0.497574 -vn -0.203833 0.813623 -0.544450 -vn -0.117862 0.792932 -0.597736 -vn -0.196570 0.824793 -0.530137 -vn -0.217811 0.790857 -0.571886 -vn -0.143498 0.758354 -0.635823 -vn -0.207465 0.802149 -0.559862 -vn -0.237861 0.767693 -0.595019 -vn -0.177709 0.723899 -0.666585 -vn -0.224799 0.778771 -0.585620 -vn -0.263253 0.745048 -0.612812 -vn -0.219184 0.690939 -0.688864 -vn -0.247963 0.755455 -0.606433 -vn -0.292947 0.723869 -0.624622 -vn -0.266274 0.660665 -0.701834 -vn -0.276040 0.733116 -0.621540 -vn -0.325877 0.704947 -0.629933 -vn -0.317301 0.634358 -0.704886 -vn -0.307932 0.712668 -0.630268 -vn -0.360698 0.688894 -0.628712 -vn -0.370159 0.612934 -0.698019 -vn -0.342448 0.694845 -0.632344 -vn -0.396130 0.676443 -0.620838 -vn -0.422926 0.597278 -0.681448 -vn -0.378246 0.680319 -0.627735 -vn -0.430769 0.668050 -0.606708 -vn -0.473525 0.587909 -0.655812 -vn -0.413953 0.669698 -0.616504 -vn -0.463332 0.664052 -0.586779 -vn -0.519974 0.585284 -0.622120 -vn -0.448195 0.663411 -0.599139 -vn -0.492508 0.664541 -0.561937 -vn -0.560564 0.589435 -0.581622 -vn -0.479659 0.661580 -0.576342 -vn -0.517228 0.669576 -0.533006 -vn -0.593677 0.600238 -0.535905 -vn -0.507096 0.664418 -0.548936 -vn -0.536515 0.678854 -0.501236 -vn -0.618061 0.617237 -0.486770 -vn -0.529557 0.671712 -0.518021 -vn -0.549669 0.692190 -0.467635 -vn -0.632832 0.639821 -0.436018 -vn -0.546068 0.683218 -0.484725 -vn -0.556078 0.708884 -0.433821 -vn -0.637318 0.667135 -0.385632 -vn -0.556047 0.698538 -0.450331 -vn -0.555620 0.728416 -0.400800 -vn -0.631428 0.698050 -0.337565 -vn -0.559099 0.717002 -0.416272 -vn -0.548265 0.749992 -0.369945 -vn -0.615345 0.731468 -0.293710 -vn -0.555101 0.737938 -0.383709 -vn -0.534288 0.772820 -0.342418 -vn -0.589709 0.766076 -0.255593 -vn -0.544206 0.760552 -0.354015 -vn -0.514206 0.795953 -0.319376 -vn -0.555528 0.800501 -0.224830 -vn -0.526841 0.783990 -0.328227 -vn -0.488815 0.818567 -0.301614 -vn -0.514054 0.833461 -0.202612 -vn -0.503708 0.807276 -0.307443 -vn -0.459120 0.839747 -0.289773 -vn -0.466933 0.863704 -0.189642 -vn -0.475631 0.829615 -0.292337 -vn -0.426221 0.858730 -0.284402 -vn -0.415937 0.890011 -0.186560 -vn -0.443709 0.850093 -0.283578 -vn -0.391369 0.874722 -0.285714 -vn -0.363018 0.911466 -0.193426 -vn -0.409223 0.867916 -0.281503 -vn -0.355998 0.887173 -0.293558 -vn -0.310312 0.927122 -0.209998 -vn -0.373424 0.882382 -0.286172 -vn -0.321329 0.895566 -0.307657 -vn -0.259713 0.936460 -0.235664 -vn -0.337718 0.893002 -0.297372 -vn -0.303446 0.899350 -0.314707 -vn -0.288736 0.899594 -0.327616 -vn -0.040223 0.973144 -0.226539 -vn -0.003021 0.963347 -0.268227 -vn 0.025513 0.948729 -0.315012 -vn 0.044313 0.929899 -0.365093 -vn 0.052675 0.907559 -0.416547 -vn 0.050233 0.882595 -0.467422 -vn 0.037141 0.855922 -0.515732 -vn 0.013825 0.828578 -0.559648 -vn -0.018738 0.801660 -0.597461 -vn -0.059389 0.776147 -0.627705 -vn -0.106479 0.753044 -0.649251 -vn -0.158269 0.733238 -0.661245 -vn -0.212714 0.717490 -0.663259 -vn -0.267769 0.706381 -0.655171 -vn -0.321268 0.700400 -0.637349 -vn -0.371197 0.699698 -0.610401 -vn -0.511979 0.737114 -0.441054 -vn -0.426923 0.764824 -0.482437 -vn -0.423017 0.776543 -0.466933 -vn -0.432417 0.785943 -0.441908 -vn -0.447127 0.785028 -0.428663 -vn -0.495315 0.720420 -0.485397 -vn -0.492965 0.821589 -0.286233 -vn -0.469680 0.848903 -0.242317 -vn -0.437086 0.875851 -0.204505 -vn -0.396435 0.901334 -0.174261 -vn -0.349315 0.924467 -0.152715 -vn -0.297555 0.944243 -0.140721 -vn -0.243080 0.960021 -0.138707 -vn -0.188055 0.971099 -0.146794 -vn -0.134556 0.977111 -0.164617 -vn -0.268075 0.864223 -0.425642 -vn -0.179052 0.919553 -0.349712 -vn -0.164800 0.917020 -0.363109 -vn -0.153325 0.912778 -0.378552 -vn -0.145054 0.906919 -0.395489 -vn -0.140294 0.899747 -0.413221 -vn -0.139256 0.891476 -0.431104 -vn -0.141972 0.882443 -0.448439 -vn -0.148350 0.873012 -0.464553 -vn -0.158116 0.863521 -0.478805 -vn -0.170904 0.854366 -0.490707 -vn -0.186224 0.845882 -0.499771 -vn -0.203497 0.838374 -0.505631 -vn -0.222053 0.832179 -0.508072 -vn -0.241188 0.827479 -0.507004 -vn -0.260170 0.824488 -0.502487 -vn -0.278237 0.823328 -0.494644 -vn -0.435316 0.832057 -0.343669 -vn -0.492935 0.797113 -0.348735 -vn -0.424390 0.795648 -0.432173 -vn -0.409894 0.792291 -0.451888 -vn -0.408918 0.780175 -0.473373 -vn -0.413160 0.717277 -0.561052 -vn -0.357555 0.754265 -0.550645 -vn -0.325449 0.870571 -0.369030 -vn -0.315683 0.880032 -0.354747 -vn -0.302866 0.889187 -0.342845 -vn -0.287545 0.897702 -0.333811 -vn -0.270272 0.905179 -0.327921 -vn -0.251717 0.911405 -0.325480 -vn -0.232582 0.916105 -0.326548 -vn -0.213599 0.919095 -0.331065 -vn -0.195532 0.920255 -0.338908 -vn -0.084628 0.977813 -0.191565 -vn -0.106571 0.950163 -0.292856 -vn -0.017609 0.969573 -0.244118 -vn -0.119327 0.953032 -0.278298 -vn -0.059175 0.976928 -0.205115 -vn -0.081423 0.943541 -0.321024 -vn 0.015809 0.957121 -0.289163 -vn -0.091189 0.948057 -0.304727 -vn -0.062105 0.933683 -0.352641 -vn 0.039918 0.940123 -0.338450 -vn -0.068545 0.939634 -0.335215 -vn -0.049379 0.920927 -0.386547 -vn 0.053774 0.919156 -0.390149 -vn -0.052217 0.928098 -0.368572 -vn -0.043733 0.905820 -0.421339 -vn 0.056764 0.895077 -0.442244 -vn -0.042848 0.913938 -0.403577 -vn -0.045381 0.888943 -0.455733 -vn 0.048860 0.868801 -0.492721 -vn -0.040803 0.897610 -0.438826 -vn -0.054262 0.870907 -0.488418 -vn 0.030305 0.841304 -0.539659 -vn -0.046175 0.879818 -0.473006 -vn -0.070009 0.852443 -0.518082 -vn 0.001862 0.813685 -0.581256 -vn -0.058718 0.861232 -0.504776 -vn -0.092074 0.834223 -0.543657 -vn -0.035371 0.786981 -0.615925 -vn -0.077975 0.842524 -0.532945 -vn -0.119541 0.816950 -0.564135 -vn -0.080050 0.762261 -0.642293 -vn -0.103214 0.824458 -0.556383 -vn -0.151402 0.801355 -0.578692 -vn -0.130375 0.740410 -0.659352 -vn -0.133457 0.807703 -0.574236 -vn -0.186407 0.787957 -0.586810 -vn -0.184454 0.722312 -0.666494 -vn -0.167547 0.792932 -0.585803 -vn -0.223212 0.777306 -0.588153 -vn -0.240181 0.708640 -0.663381 -vn -0.204138 0.780663 -0.590625 -vn -0.260445 0.769799 -0.582690 -vn -0.295450 0.699942 -0.650197 -vn -0.241859 0.771416 -0.588519 -vn -0.296609 0.765740 -0.570635 -vn -0.348094 0.696524 -0.627400 -vn -0.279275 0.765526 -0.579608 -vn -0.330393 0.765282 -0.552416 -vn -0.494949 0.705496 -0.507218 -vn -0.314890 0.763207 -0.564165 -vn -0.552904 0.768364 -0.322275 -vn -0.457961 0.759026 -0.462691 -vn -0.489914 0.762749 -0.422071 -vn -0.447127 0.776940 -0.443159 -vn -0.423292 0.771905 -0.474288 -vn -0.491501 0.773614 -0.399884 -vn -0.428724 0.778161 -0.458907 -vn -0.427625 0.781396 -0.454451 -vn -0.433607 0.777703 -0.455092 -vn -0.431806 0.781243 -0.450697 -vn -0.437971 0.786584 -0.435255 -vn -0.428968 0.780541 -0.454634 -vn -0.437239 0.766991 -0.469558 -vn -0.461043 0.762108 -0.454512 -vn -0.433454 0.777581 -0.455458 -vn -0.450789 0.666128 -0.594134 -vn -0.527757 0.738304 -0.419874 -vn -0.447188 0.729270 -0.517838 -vn -0.412732 0.847682 -0.333201 -vn -0.485611 0.834162 -0.261330 -vn -0.461348 0.734153 -0.498123 -vn -0.396985 0.866176 -0.303507 -vn -0.457167 0.861782 -0.219733 -vn -0.408002 0.856380 -0.316355 -vn -0.374920 0.884365 -0.277963 -vn -0.419874 0.888485 -0.185095 -vn -0.388745 0.875088 -0.288217 -vn -0.347453 0.901639 -0.257485 -vn -0.375225 0.913236 -0.158727 -vn -0.363506 0.893155 -0.264748 -vn -0.315592 0.917234 -0.242927 -vn -0.324870 0.935057 -0.141636 -vn -0.333262 0.909909 -0.246895 -vn -0.280587 0.930631 -0.234809 -vn -0.270821 0.953154 -0.134526 -vn -0.299203 0.924680 -0.235359 -vn -0.243751 0.941282 -0.233467 -vn -0.215064 0.966826 -0.137608 -vn -0.262581 0.936949 -0.230506 -vn -0.206549 0.948790 -0.238929 -vn -0.159825 0.975524 -0.150792 -vn -0.224860 0.946196 -0.232612 -vn -0.170354 0.952849 -0.250984 -vn -0.107181 0.978942 -0.173589 -vn -0.187445 0.952086 -0.241554 -vn -0.151830 0.954405 -0.256966 -vn -0.136601 0.953337 -0.269204 -usemtl Eye-White -s 1 -f 6977//4534 6976//4535 6984//4536 -f 6978//4537 6977//4534 6985//4538 -f 6979//4539 6978//4537 6985//4538 -f 6975//4540 6974//4541 6982//4542 -f 6976//4535 6975//4540 6983//4543 -f 6984//4536 6983//4543 6990//4544 -f 6985//4538 6984//4536 6991//4545 -f 6986//4546 6985//4538 6992//4547 -f 6982//4542 6981//4548 6989//4549 -f 6983//4543 6982//4542 6989//4549 -f 6990//4544 6989//4549 6996//4550 -f 6991//4545 6990//4544 6998//4551 -f 6992//4547 6991//4545 6999//4552 -f 6993//4553 6992//4547 6999//4552 -f 6989//4549 6988//4554 6996//4550 -f 6996//4550 6995//4555 7002//4556 -f 6997//4557 6996//4550 7004//4558 -f 6998//4551 6997//4557 7005//4559 -f 6999//4552 6998//4551 7005//4559 -f 7000//4560 6999//4552 7006//4561 -f 7007//4562 7006//4561 7013//4563 -f 7003//4564 7002//4556 7009//4565 -f 7004//4558 7003//4564 7011//4566 -f 7005//4559 7004//4558 7011//4566 -f 7006//4561 7005//4559 7013//4563 -f 7012//4567 7011//4566 7019//4568 -f 7013//4563 7012//4567 7020//4569 -f 7013//4563 7020//4569 7021//4570 -f 7010//4571 7009//4565 7017//4572 -f 7011//4566 7010//4571 7018//4573 -f 7018//4573 7017//4572 7024//4574 -f 7019//4568 7018//4573 7026//4575 -f 7020//4569 7019//4568 7026//4575 -f 7021//4570 7020//4569 7027//4576 -f 7017//4572 7016//4577 7024//4574 -f 7024//4574 7023//4578 7031//4579 -f 7025//4580 7024//4574 7032//4581 -f 7026//4575 7025//4580 7033//4582 -f 7027//4576 7026//4575 7033//4582 -f 7028//4583 7027//4576 7034//4584 -f 7034//4584 7041//4585 7042//4586 -f 7031//4579 7030//4587 7037//4588 -f 7032//4581 7031//4579 7039//4589 -f 7033//4582 7032//4581 7039//4589 -f 7034//4584 7033//4582 7041//4585 -f 7040//4590 7039//4589 7046//4591 -f 7041//4585 7040//4590 7048//4592 -f 7041//4585 7048//4592 7049//4593 -f 7038//4594 7037//4588 7044//4595 -f 7039//4589 7038//4594 7046//4591 -f 7046//4591 7045//4596 7052//4597 -f 7047//4598 7046//4591 7054//4599 -f 7048//4592 7047//4598 7054//4599 -f 7048//4592 7055//4600 7056//4601 -f 7045//4596 7044//4595 7051//4602 -f 7052//4597 7051//4602 7059//4603 -f 7053//4604 7052//4597 7060//4605 -f 7054//4599 7053//4604 7061//4606 -f 7055//4600 7054//4599 7061//4606 -f 7055//4600 7062//4607 7063//4608 -f 7063//4608 7062//4607 7069//4609 -f 7059//4603 7058//4610 7065//4611 -f 7060//4605 7059//4603 7067//4612 -f 7061//4606 7060//4605 7068//4613 -f 7062//4607 7061//4606 7069//4609 -f 7069//4609 7068//4613 7076//4614 -f 7069//4609 7076//4614 7077//4615 -f 7066//4616 7065//4611 7073//4617 -f 7067//4612 7066//4616 7074//4618 -f 7068//4613 7067//4612 7075//4619 -f 7074//4618 7073//4617 7081//4620 -f 7075//4619 7074//4618 7081//4620 -f 7076//4614 7075//4619 7082//4621 -f 7076//4614 7083//4622 7084//4623 -f 7073//4617 7072//4624 7080//4625 -f 7080//4625 7079//4626 7087//4627 -f 7081//4620 7080//4625 7088//4628 -f 7082//4621 7081//4620 7089//4629 -f 7083//4622 7082//4621 7090//4630 -f 7084//4623 7083//4622 7090//4630 -f 7091//4631 7090//4630 7097//4632 -f 7087//4627 7086//4633 7093//4634 -f 7088//4628 7087//4627 7094//4635 -f 7089//4629 7088//4628 7096//4636 -f 7090//4630 7089//4629 7097//4632 -f 7097//4632 7096//4636 7104//4637 -f 7098//4638 7097//4632 7104//4637 -f 7094//4635 7093//4634 7101//4639 -f 7095//4640 7094//4635 7102//4641 -f 7096//4636 7095//4640 7103//4642 -f 7102//4641 7101//4639 7108//4643 -f 7103//4642 7102//4641 7109//4644 -f 7104//4637 7103//4642 7111//4645 -f 7104//4637 7111//4645 7112//4646 -f 7101//4639 7100//4647 7108//4643 -f 7108//4643 7107//4648 7115//4649 -f 7109//4644 7108//4643 7115//4649 -f 7110//4650 7109//4644 7117//4651 -f 7111//4645 7110//4650 7118//4652 -f 7112//4646 7111//4645 7118//4652 -f 7118//4652 7125//4653 7126//4654 -f 7115//4649 7114//4655 7122//4656 -f 7116//4657 7115//4649 7123//4658 -f 7117//4651 7116//4657 7124//4659 -f 7118//4652 7117//4651 7124//4659 -f 7125//4653 7124//4659 7133//4660 -f 7126//4654 7125//4653 7133//4660 -f 7122//4656 7121//4661 7129//4662 -f 7123//4658 7122//4656 7130//4663 -f 7124//4659 7123//4658 7131//4664 -f 7132//4665 7131//4664 7138//4666 -f 7133//4660 7132//4665 7140//4667 -f 7134//4668 7133//4660 7140//4667 -f 7130//4663 7129//4662 7136//4669 -f 7131//4664 7130//4663 7138//4666 -f 7137//4670 7136//4669 7143//4671 -f 7138//4666 7137//4670 7144//4672 -f 7139//4673 7138//4666 7145//4674 -f 7140//4667 7139//4673 7147//4675 -f 7141//4676 7140//4667 7147//4675 -f 7147//4675 7154//4677 7155//4678 -f 7144//4672 7143//4671 7150//4679 -f 7145//4674 7144//4672 7152//4680 -f 7146//4681 7145//4674 7153//4682 -f 7147//4675 7146//4681 7154//4677 -f 7154//4677 7153//4682 7161//4683 -f 7154//4677 7161//4683 7162//4684 -f 7151//4685 7150//4679 7157//4686 -f 7152//4680 7151//4685 7159//4687 -f 7153//4682 7152//4680 7160//4688 -f 7160//4688 7159//4687 7166//4689 -f 7161//4683 7160//4688 7168//4690 -f 7162//4684 7161//4683 7168//4690 -f 7158//4691 7157//4686 7164//4692 -f 7159//4687 7158//4691 7165//4693 -f 7165//4693 7164//4692 7171//4694 -f 7166//4689 7165//4693 7173//4695 -f 7167//4696 7166//4689 7173//4695 -f 7168//4690 7167//4696 7174//4697 -f 7169//4698 7168//4690 7175//4699 -f 7175//4699 7182//4700 7183//4701 -f 7172//4702 7171//4694 7178//4703 -f 7173//4695 7172//4702 7180//4704 -f 7174//4697 7173//4695 7181//4705 -f 7175//4699 7174//4697 7181//4705 -f 7182//4700 7181//4705 7189//4706 -f 7182//4700 7189//4706 7190//4707 -f 7179//4708 7178//4703 7185//4709 -f 7180//4704 7179//4708 7187//4710 -f 7181//4705 7180//4704 7188//4711 -f 7188//4711 7187//4710 7194//4712 -f 7189//4706 7188//4711 7196//4713 -f 7190//4707 7189//4706 7196//4713 -f 7186//4714 7185//4709 7192//4715 -f 7187//4710 7186//4714 7193//4716 -f 7194//4712 7193//4716 6975//4540 -f 7195//4717 7194//4712 6976//4535 -f 7196//4713 7195//4717 6977//4534 -f 7196//4713 6978//4537 6979//4539 -f 7193//4716 7192//4715 6974//4541 -f 6976//4535 6983//4543 6984//4536 -f 6977//4534 6984//4536 6985//4538 -f 7203//4718 6979//4539 6985//4538 -f 6986//4546 7203//4718 6985//4538 -f 6974//4541 6981//4548 6982//4542 -f 6975//4540 6982//4542 6983//4543 -f 6991//4545 6984//4536 6990//4544 -f 6992//4547 6985//4538 6991//4545 -f 7206//4719 6986//4546 6992//4547 -f 6993//4553 7206//4719 6992//4547 -f 6981//4548 6988//4554 6989//4549 -f 6990//4544 6983//4543 6989//4549 -f 6997//4557 6990//4544 6996//4550 -f 6990//4544 6997//4557 6998//4551 -f 6991//4545 6998//4551 6999//4552 -f 7210//4720 6993//4553 6999//4552 -f 7000//4560 7210//4720 6999//4552 -f 6988//4554 6995//4555 6996//4550 -f 7003//4564 6996//4550 7002//4556 -f 6996//4550 7003//4564 7004//4558 -f 6997//4557 7004//4558 7005//4559 -f 7006//4561 6999//4552 7005//4559 -f 7212//4721 7000//4560 7006//4561 -f 7007//4562 7212//4721 7006//4561 -f 7215//4722 7007//4562 7013//4563 -f 7014//4723 7215//4722 7013//4563 -f 7010//4571 7003//4564 7009//4565 -f 7003//4564 7010//4571 7011//4566 -f 7012//4567 7005//4559 7011//4566 -f 7005//4559 7012//4567 7013//4563 -f 7011//4566 7018//4573 7019//4568 -f 7012//4567 7019//4568 7020//4569 -f 7014//4723 7013//4563 7218//4724 -f 7013//4563 7021//4570 7218//4724 -f 7009//4565 7016//4577 7017//4572 -f 7010//4571 7017//4572 7018//4573 -f 7025//4580 7018//4573 7024//4574 -f 7018//4573 7025//4580 7026//4575 -f 7027//4576 7020//4569 7026//4575 -f 7222//4725 7021//4570 7027//4576 -f 7028//4583 7222//4725 7027//4576 -f 7016//4577 7023//4578 7024//4574 -f 7023//4578 7030//4587 7031//4579 -f 7024//4574 7031//4579 7032//4581 -f 7025//4580 7032//4581 7033//4582 -f 7034//4584 7027//4576 7033//4582 -f 7224//4726 7028//4583 7034//4584 -f 7035//4727 7224//4726 7034//4584 -f 7035//4727 7034//4584 7227//4728 -f 7034//4584 7042//4586 7227//4728 -f 7038//4594 7031//4579 7037//4588 -f 7031//4579 7038//4594 7039//4589 -f 7040//4590 7033//4582 7039//4589 -f 7033//4582 7040//4590 7041//4585 -f 7047//4598 7040//4590 7046//4591 -f 7040//4590 7047//4598 7048//4592 -f 7042//4586 7041//4585 7230//4729 -f 7041//4585 7049//4593 7230//4729 -f 7045//4596 7038//4594 7044//4595 -f 7038//4594 7045//4596 7046//4591 -f 7053//4604 7046//4591 7052//4597 -f 7046//4591 7053//4604 7054//4599 -f 7055//4600 7048//4592 7054//4599 -f 7049//4593 7048//4592 7234//4730 -f 7048//4592 7056//4601 7234//4730 -f 7052//4597 7045//4596 7051//4602 -f 7051//4602 7058//4610 7059//4603 -f 7052//4597 7059//4603 7060//4605 -f 7053//4604 7060//4605 7061//4606 -f 7062//4607 7055//4600 7061//4606 -f 7056//4601 7055//4600 7236//4731 -f 7055//4600 7063//4608 7236//4731 -f 7239//4732 7063//4608 7069//4609 -f 7070//4733 7239//4732 7069//4609 -f 7066//4616 7059//4603 7065//4611 -f 7059//4603 7066//4616 7067//4612 -f 7060//4605 7067//4612 7068//4613 -f 7061//4606 7068//4613 7069//4609 -f 7068//4613 7075//4619 7076//4614 -f 7070//4733 7069//4609 7242//4734 -f 7069//4609 7077//4615 7242//4734 -f 7065//4611 7072//4624 7073//4617 -f 7066//4616 7073//4617 7074//4618 -f 7067//4612 7074//4618 7075//4619 -f 7073//4617 7080//4625 7081//4620 -f 7082//4621 7075//4619 7081//4620 -f 7083//4622 7076//4614 7082//4621 -f 7077//4615 7076//4614 7245//4735 -f 7076//4614 7084//4623 7245//4735 -f 7072//4624 7079//4626 7080//4625 -f 7079//4626 7086//4633 7087//4627 -f 7080//4625 7087//4627 7088//4628 -f 7081//4620 7088//4628 7089//4629 -f 7082//4621 7089//4629 7090//4630 -f 7248//4736 7084//4623 7090//4630 -f 7091//4631 7248//4736 7090//4630 -f 7251//4737 7091//4631 7097//4632 -f 7098//4638 7251//4737 7097//4632 -f 7094//4635 7087//4627 7093//4634 -f 7095//4640 7088//4628 7094//4635 -f 7088//4628 7095//4640 7096//4636 -f 7089//4629 7096//4636 7097//4632 -f 7096//4636 7103//4642 7104//4637 -f 7254//4738 7098//4638 7104//4637 -f 7105//4739 7254//4738 7104//4637 -f 7093//4634 7100//4647 7101//4639 -f 7094//4635 7101//4639 7102//4641 -f 7095//4640 7102//4641 7103//4642 -f 7109//4644 7102//4641 7108//4643 -f 7110//4650 7103//4642 7109//4644 -f 7103//4642 7110//4650 7111//4645 -f 7105//4739 7104//4637 7257//4740 -f 7104//4637 7112//4646 7257//4740 -f 7100//4647 7107//4648 7108//4643 -f 7107//4648 7114//4655 7115//4649 -f 7116//4657 7109//4644 7115//4649 -f 7109//4644 7116//4657 7117//4651 -f 7110//4650 7117//4651 7118//4652 -f 7260//4741 7112//4646 7118//4652 -f 7119//4742 7260//4741 7118//4652 -f 7119//4742 7118//4652 7264//4743 -f 7118//4652 7126//4654 7264//4743 -f 7114//4655 7121//4661 7122//4656 -f 7115//4649 7122//4656 7123//4658 -f 7116//4657 7123//4658 7124//4659 -f 7125//4653 7118//4652 7124//4659 -f 7124//4659 7132//4665 7133//4660 -f 7267//4744 7126//4654 7133//4660 -f 7134//4668 7267//4744 7133//4660 -f 7130//4663 7122//4656 7129//4662 -f 7131//4664 7123//4658 7130//4663 -f 7132//4665 7124//4659 7131//4664 -f 7139//4673 7132//4665 7138//4666 -f 7132//4665 7139//4673 7140//4667 -f 7270//4745 7134//4668 7140//4667 -f 7141//4676 7270//4745 7140//4667 -f 7137//4670 7130//4663 7136//4669 -f 7130//4663 7137//4670 7138//4666 -f 7144//4672 7137//4670 7143//4671 -f 7145//4674 7138//4666 7144//4672 -f 7146//4681 7139//4673 7145//4674 -f 7139//4673 7146//4681 7147//4675 -f 7274//4746 7141//4676 7147//4675 -f 7148//4747 7274//4746 7147//4675 -f 7148//4747 7147//4675 7276//4748 -f 7147//4675 7155//4678 7276//4748 -f 7151//4685 7144//4672 7150//4679 -f 7144//4672 7151//4685 7152//4680 -f 7145//4674 7152//4680 7153//4682 -f 7146//4681 7153//4682 7154//4677 -f 7153//4682 7160//4688 7161//4683 -f 7155//4678 7154//4677 7279//4749 -f 7154//4677 7162//4684 7279//4749 -f 7158//4691 7151//4685 7157//4686 -f 7151//4685 7158//4691 7159//4687 -f 7152//4680 7159//4687 7160//4688 -f 7167//4696 7160//4688 7166//4689 -f 7160//4688 7167//4696 7168//4690 -f 7282//4750 7162//4684 7168//4690 -f 7169//4698 7282//4750 7168//4690 -f 7165//4693 7158//4691 7164//4692 -f 7166//4689 7159//4687 7165//4693 -f 7172//4702 7165//4693 7171//4694 -f 7165//4693 7172//4702 7173//4695 -f 7174//4697 7167//4696 7173//4695 -f 7175//4699 7168//4690 7174//4697 -f 7286//4751 7169//4698 7175//4699 -f 7176//4752 7286//4751 7175//4699 -f 7176//4752 7175//4699 7288//4753 -f 7175//4699 7183//4701 7288//4753 -f 7179//4708 7172//4702 7178//4703 -f 7172//4702 7179//4708 7180//4704 -f 7173//4695 7180//4704 7181//4705 -f 7182//4700 7175//4699 7181//4705 -f 7181//4705 7188//4711 7189//4706 -f 7183//4701 7182//4700 7291//4754 -f 7182//4700 7190//4707 7291//4754 -f 7186//4714 7179//4708 7185//4709 -f 7179//4708 7186//4714 7187//4710 -f 7180//4704 7187//4710 7188//4711 -f 7195//4717 7188//4711 7194//4712 -f 7188//4711 7195//4717 7196//4713 -f 7294//4755 7190//4707 7196//4713 -f 7197//4756 7294//4755 7196//4713 -f 7193//4716 7186//4714 7192//4715 -f 7194//4712 7187//4710 7193//4716 -f 6976//4535 7194//4712 6975//4540 -f 6977//4534 7195//4717 6976//4535 -f 6978//4537 7196//4713 6977//4534 -f 7197//4756 7196//4713 7328//4757 -f 7196//4713 6979//4539 7328//4757 -f 6975//4540 7193//4716 6974//4541 -usemtl Material -f 6942//4758 6816//4759 6751//4760 -f 6943//4761 6819//4762 6753//4763 -f 6944//4764 6823//4765 6755//4766 -f 6945//4767 6825//4768 6757//4769 -f 6946//4770 6828//4771 6759//4772 -f 6947//4773 6831//4774 6761//4775 -f 6948//4776 6835//4777 6763//4778 -f 6949//4779 6837//4780 6765//4781 -f 6950//4782 6840//4783 6767//4784 -f 6951//4785 6843//4786 6769//4787 -f 6952//4788 6847//4789 6771//4790 -f 6953//4791 6849//4792 6773//4793 -f 6954//4794 6852//4795 6775//4796 -f 6955//4797 6855//4798 6777//4799 -f 6956//4800 6858//4801 6779//4802 -f 6957//4803 6861//4804 6781//4805 -f 6958//4806 6864//4807 6783//4808 -f 6959//4809 6867//4810 6785//4811 -f 6960//4812 6870//4813 6787//4814 -f 6961//4815 6873//4816 6789//4817 -f 6962//4818 6877//4819 6791//4820 -f 6963//4821 6880//4822 6794//4823 -f 6964//4824 6883//4825 6796//4826 -f 6965//4827 6887//4828 6798//4829 -f 6966//4830 6889//4831 6800//4832 -f 6967//4833 6892//4834 6802//4835 -f 6968//4836 6895//4837 6804//4838 -f 6969//4839 6899//4840 6806//4841 -f 6970//4842 6901//4843 6808//4844 -f 6971//4845 6904//4846 6810//4847 -f 6972//4848 6907//4849 6812//4850 -f 6793//4851 6909//4852 6910//4853 -f 6793//4851 6910//4853 6911//4854 -f 6793//4851 6911//4854 6912//4855 -f 6793//4851 6912//4855 6913//4856 -f 6793//4851 6913//4856 6914//4857 -f 6793//4851 6914//4857 6915//4858 -f 6793//4851 6915//4858 6916//4859 -f 6793//4851 6916//4859 6917//4860 -f 6793//4851 6917//4860 6918//4861 -f 6793//4851 6918//4861 6919//4862 -f 6793//4851 6919//4862 6920//4863 -f 6793//4851 6920//4863 6921//4864 -f 6793//4851 6921//4864 6922//4865 -f 6793//4851 6922//4865 6923//4866 -f 6793//4851 6923//4866 6924//4867 -f 6793//4851 6924//4867 6925//4868 -f 6793//4851 6925//4868 6926//4869 -f 6793//4851 6926//4869 6927//4870 -f 6793//4851 6927//4870 6928//4871 -f 6793//4851 6928//4871 6929//4872 -f 6793//4851 6929//4872 6876//4873 -f 6793//4851 6876//4873 6930//4874 -f 6793//4851 6930//4874 6931//4875 -f 6793//4851 6931//4875 6932//4876 -f 6793//4851 6932//4876 6933//4877 -f 6793//4851 6933//4877 6934//4878 -f 6793//4851 6934//4878 6935//4879 -f 6793//4851 6935//4879 6936//4880 -f 6793//4851 6936//4880 6937//4881 -f 6793//4851 6937//4881 6938//4882 -f 6793//4851 6938//4882 6939//4883 -f 6793//4851 6939//4883 6909//4852 -f 6973//4884 6941//4885 6749//4886 -f 6817//4887 6942//4758 6815//4888 -f 6750//4889 6814//4890 6817//4887 -f 6814//4890 6749//4886 6942//4758 -f 6820//4891 6943//4761 6818//4892 -f 6752//4893 6815//4888 6820//4891 -f 6815//4888 6751//4760 6943//4761 -f 6822//4894 6944//4764 6821//4895 -f 6754//4896 6818//4892 6822//4894 -f 6818//4892 6753//4763 6944//4764 -f 6826//4897 6945//4767 6824//4898 -f 6756//4899 6821//4895 6826//4897 -f 6821//4895 6755//4766 6945//4767 -f 6829//4900 6946//4770 6827//4901 -f 6758//4902 6824//4898 6829//4900 -f 6824//4898 6757//4769 6946//4770 -f 6832//4903 6947//4773 6830//4904 -f 6760//4905 6827//4901 6832//4903 -f 6827//4901 6759//4772 6947//4773 -f 6834//4906 6948//4776 6833//4907 -f 6762//4908 6830//4904 6834//4906 -f 6830//4904 6761//4775 6948//4776 -f 6838//4909 6949//4779 6836//4910 -f 6764//4911 6833//4907 6838//4909 -f 6833//4907 6763//4778 6949//4779 -f 6841//4912 6950//4782 6839//4913 -f 6766//4914 6836//4910 6841//4912 -f 6836//4910 6765//4781 6950//4782 -f 6844//4915 6951//4785 6842//4916 -f 6768//4917 6839//4913 6844//4915 -f 6839//4913 6767//4784 6951//4785 -f 6846//4918 6952//4788 6845//4919 -f 6770//4920 6842//4916 6846//4918 -f 6842//4916 6769//4787 6952//4788 -f 6850//4921 6953//4791 6848//4922 -f 6772//4923 6845//4919 6850//4921 -f 6845//4919 6771//4790 6953//4791 -f 6853//4924 6954//4794 6851//4925 -f 6774//4926 6848//4922 6853//4924 -f 6848//4922 6773//4793 6954//4794 -f 6856//4927 6955//4797 6854//4928 -f 6776//4929 6851//4925 6856//4927 -f 6851//4925 6775//4796 6955//4797 -f 6859//4930 6956//4800 6857//4931 -f 6778//4932 6854//4928 6859//4930 -f 6854//4928 6777//4799 6956//4800 -f 6862//4933 6957//4803 6860//4934 -f 6780//4935 6857//4931 6862//4933 -f 6857//4931 6779//4802 6957//4803 -f 6865//4936 6958//4806 6863//4937 -f 6782//4938 6860//4934 6865//4936 -f 6860//4934 6781//4805 6958//4806 -f 6868//4939 6959//4809 6866//4940 -f 6784//4941 6863//4937 6868//4939 -f 6863//4937 6783//4808 6959//4809 -f 6871//4942 6960//4812 6869//4943 -f 6786//4944 6866//4940 6871//4942 -f 6866//4940 6785//4811 6960//4812 -f 6874//4945 6961//4815 6872//4946 -f 6788//4947 6869//4943 6874//4945 -f 6869//4943 6787//4814 6961//4815 -f 6878//4948 6962//4818 6875//4949 -f 6790//4950 6872//4946 6878//4948 -f 6872//4946 6789//4817 6962//4818 -f 6881//4951 6963//4821 6879//4952 -f 6792//4953 6875//4949 6881//4951 -f 6875//4949 6791//4820 6963//4821 -f 6884//4954 6964//4824 6882//4955 -f 6795//4956 6879//4952 6884//4954 -f 6879//4952 6794//4823 6964//4824 -f 6886//4957 6965//4827 6885//4958 -f 6797//4959 6882//4955 6886//4957 -f 6882//4955 6796//4826 6965//4827 -f 6890//4960 6966//4830 6888//4961 -f 6799//4962 6885//4958 6890//4960 -f 6885//4958 6798//4829 6966//4830 -f 6893//4963 6967//4833 6891//4964 -f 6801//4965 6888//4961 6893//4963 -f 6888//4961 6800//4832 6967//4833 -f 6896//4966 6968//4836 6894//4967 -f 6803//4968 6891//4964 6896//4966 -f 6891//4964 6802//4835 6968//4836 -f 6898//4969 6969//4839 6897//4970 -f 6805//4971 6894//4967 6898//4969 -f 6894//4967 6804//4838 6969//4839 -f 6902//4972 6970//4842 6900//4973 -f 6807//4974 6897//4970 6902//4972 -f 6897//4970 6806//4841 6970//4842 -f 6905//4975 6971//4845 6903//4976 -f 6809//4977 6900//4973 6905//4975 -f 6900//4973 6808//4844 6971//4845 -f 6908//4978 6972//4848 6906//4979 -f 6811//4980 6903//4976 6908//4978 -f 6903//4976 6810//4847 6972//4848 -f 6910//4853 6817//4887 6752//4893 -f 6910//4853 6909//4852 6817//4887 -f 6909//4852 6750//4889 6817//4887 -f 6911//4854 6820//4891 6754//4896 -f 6911//4854 6910//4853 6820//4891 -f 6910//4853 6752//4893 6820//4891 -f 6912//4855 6822//4894 6756//4899 -f 6912//4855 6911//4854 6822//4894 -f 6911//4854 6754//4896 6822//4894 -f 6913//4856 6826//4897 6758//4902 -f 6913//4856 6912//4855 6826//4897 -f 6912//4855 6756//4899 6826//4897 -f 6914//4857 6829//4900 6760//4905 -f 6914//4857 6913//4856 6829//4900 -f 6913//4856 6758//4902 6829//4900 -f 6915//4858 6832//4903 6762//4908 -f 6915//4858 6914//4857 6832//4903 -f 6914//4857 6760//4905 6832//4903 -f 6916//4859 6834//4906 6764//4911 -f 6916//4859 6915//4858 6834//4906 -f 6915//4858 6762//4908 6834//4906 -f 6917//4860 6838//4909 6766//4914 -f 6917//4860 6916//4859 6838//4909 -f 6916//4859 6764//4911 6838//4909 -f 6918//4861 6841//4912 6768//4917 -f 6918//4861 6917//4860 6841//4912 -f 6917//4860 6766//4914 6841//4912 -f 6919//4862 6844//4915 6770//4920 -f 6919//4862 6918//4861 6844//4915 -f 6918//4861 6768//4917 6844//4915 -f 6920//4863 6846//4918 6772//4923 -f 6920//4863 6919//4862 6846//4918 -f 6919//4862 6770//4920 6846//4918 -f 6921//4864 6850//4921 6774//4926 -f 6921//4864 6920//4863 6850//4921 -f 6920//4863 6772//4923 6850//4921 -f 6922//4865 6853//4924 6776//4929 -f 6922//4865 6921//4864 6853//4924 -f 6921//4864 6774//4926 6853//4924 -f 6923//4866 6856//4927 6778//4932 -f 6923//4866 6922//4865 6856//4927 -f 6922//4865 6776//4929 6856//4927 -f 6924//4867 6859//4930 6780//4935 -f 6924//4867 6923//4866 6859//4930 -f 6923//4866 6778//4932 6859//4930 -f 6925//4868 6862//4933 6782//4938 -f 6925//4868 6924//4867 6862//4933 -f 6924//4867 6780//4935 6862//4933 -f 6926//4869 6865//4936 6784//4941 -f 6926//4869 6925//4868 6865//4936 -f 6925//4868 6782//4938 6865//4936 -f 6927//4870 6868//4939 6786//4944 -f 6927//4870 6926//4869 6868//4939 -f 6926//4869 6784//4941 6868//4939 -f 6928//4871 6871//4942 6788//4947 -f 6928//4871 6927//4870 6871//4942 -f 6927//4870 6786//4944 6871//4942 -f 6929//4872 6874//4945 6790//4950 -f 6929//4872 6928//4871 6874//4945 -f 6928//4871 6788//4947 6874//4945 -f 6876//4873 6878//4948 6792//4953 -f 6876//4873 6929//4872 6878//4948 -f 6929//4872 6790//4950 6878//4948 -f 6930//4874 6881//4951 6795//4956 -f 6930//4874 6876//4873 6881//4951 -f 6876//4873 6792//4953 6881//4951 -f 6931//4875 6884//4954 6797//4959 -f 6931//4875 6930//4874 6884//4954 -f 6930//4874 6795//4956 6884//4954 -f 6932//4876 6886//4957 6799//4962 -f 6932//4876 6931//4875 6886//4957 -f 6931//4875 6797//4959 6886//4957 -f 6933//4877 6890//4960 6801//4965 -f 6933//4877 6932//4876 6890//4960 -f 6932//4876 6799//4962 6890//4960 -f 6934//4878 6893//4963 6803//4968 -f 6934//4878 6933//4877 6893//4963 -f 6933//4877 6801//4965 6893//4963 -f 6935//4879 6896//4966 6805//4971 -f 6935//4879 6934//4878 6896//4966 -f 6934//4878 6803//4968 6896//4966 -f 6936//4880 6898//4969 6807//4974 -f 6936//4880 6935//4879 6898//4969 -f 6935//4879 6805//4971 6898//4969 -f 6937//4881 6902//4972 6809//4977 -f 6937//4881 6936//4880 6902//4972 -f 6936//4880 6807//4974 6902//4972 -f 6938//4882 6905//4975 6811//4980 -f 6938//4882 6937//4881 6905//4975 -f 6937//4881 6809//4977 6905//4975 -f 6939//4883 6908//4978 6813//4981 -f 6939//4883 6938//4882 6908//4978 -f 6938//4882 6811//4980 6908//4978 -f 6909//4852 6940//4982 6750//4889 -f 6909//4852 6939//4883 6940//4982 -f 6939//4883 6813//4981 6940//4982 -f 6940//4982 6973//4884 6814//4890 -f 6813//4981 6906//4979 6940//4982 -f 6906//4979 6812//4850 6973//4884 -f 6815//4888 6942//4758 6751//4760 -f 6818//4892 6943//4761 6753//4763 -f 6821//4895 6944//4764 6755//4766 -f 6824//4898 6945//4767 6757//4769 -f 6827//4901 6946//4770 6759//4772 -f 6830//4904 6947//4773 6761//4775 -f 6833//4907 6948//4776 6763//4778 -f 6836//4910 6949//4779 6765//4781 -f 6839//4913 6950//4782 6767//4784 -f 6842//4916 6951//4785 6769//4787 -f 6845//4919 6952//4788 6771//4790 -f 6848//4922 6953//4791 6773//4793 -f 6851//4925 6954//4794 6775//4796 -f 6854//4928 6955//4797 6777//4799 -f 6857//4931 6956//4800 6779//4802 -f 6860//4934 6957//4803 6781//4805 -f 6863//4937 6958//4806 6783//4808 -f 6866//4940 6959//4809 6785//4811 -f 6869//4943 6960//4812 6787//4814 -f 6872//4946 6961//4815 6789//4817 -f 6875//4949 6962//4818 6791//4820 -f 6879//4952 6963//4821 6794//4823 -f 6882//4955 6964//4824 6796//4826 -f 6885//4958 6965//4827 6798//4829 -f 6888//4961 6966//4830 6800//4832 -f 6891//4964 6967//4833 6802//4835 -f 6894//4967 6968//4836 6804//4838 -f 6897//4970 6969//4839 6806//4841 -f 6900//4973 6970//4842 6808//4844 -f 6903//4976 6971//4845 6810//4847 -f 6906//4979 6972//4848 6812//4850 -f 6814//4890 6973//4884 6749//4886 -f 6752//4893 6817//4887 6815//4888 -f 6814//4890 6942//4758 6817//4887 -f 6749//4886 6816//4759 6942//4758 -f 6754//4896 6820//4891 6818//4892 -f 6815//4888 6943//4761 6820//4891 -f 6751//4760 6819//4762 6943//4761 -f 6756//4899 6822//4894 6821//4895 -f 6818//4892 6944//4764 6822//4894 -f 6753//4763 6823//4765 6944//4764 -f 6758//4902 6826//4897 6824//4898 -f 6821//4895 6945//4767 6826//4897 -f 6755//4766 6825//4768 6945//4767 -f 6760//4905 6829//4900 6827//4901 -f 6824//4898 6946//4770 6829//4900 -f 6757//4769 6828//4771 6946//4770 -f 6762//4908 6832//4903 6830//4904 -f 6827//4901 6947//4773 6832//4903 -f 6759//4772 6831//4774 6947//4773 -f 6764//4911 6834//4906 6833//4907 -f 6830//4904 6948//4776 6834//4906 -f 6761//4775 6835//4777 6948//4776 -f 6766//4914 6838//4909 6836//4910 -f 6833//4907 6949//4779 6838//4909 -f 6763//4778 6837//4780 6949//4779 -f 6768//4917 6841//4912 6839//4913 -f 6836//4910 6950//4782 6841//4912 -f 6765//4781 6840//4783 6950//4782 -f 6770//4920 6844//4915 6842//4916 -f 6839//4913 6951//4785 6844//4915 -f 6767//4784 6843//4786 6951//4785 -f 6772//4923 6846//4918 6845//4919 -f 6842//4916 6952//4788 6846//4918 -f 6769//4787 6847//4789 6952//4788 -f 6774//4926 6850//4921 6848//4922 -f 6845//4919 6953//4791 6850//4921 -f 6771//4790 6849//4792 6953//4791 -f 6776//4929 6853//4924 6851//4925 -f 6848//4922 6954//4794 6853//4924 -f 6773//4793 6852//4795 6954//4794 -f 6778//4932 6856//4927 6854//4928 -f 6851//4925 6955//4797 6856//4927 -f 6775//4796 6855//4798 6955//4797 -f 6780//4935 6859//4930 6857//4931 -f 6854//4928 6956//4800 6859//4930 -f 6777//4799 6858//4801 6956//4800 -f 6782//4938 6862//4933 6860//4934 -f 6857//4931 6957//4803 6862//4933 -f 6779//4802 6861//4804 6957//4803 -f 6784//4941 6865//4936 6863//4937 -f 6860//4934 6958//4806 6865//4936 -f 6781//4805 6864//4807 6958//4806 -f 6786//4944 6868//4939 6866//4940 -f 6863//4937 6959//4809 6868//4939 -f 6783//4808 6867//4810 6959//4809 -f 6788//4947 6871//4942 6869//4943 -f 6866//4940 6960//4812 6871//4942 -f 6785//4811 6870//4813 6960//4812 -f 6790//4950 6874//4945 6872//4946 -f 6869//4943 6961//4815 6874//4945 -f 6787//4814 6873//4816 6961//4815 -f 6792//4953 6878//4948 6875//4949 -f 6872//4946 6962//4818 6878//4948 -f 6789//4817 6877//4819 6962//4818 -f 6795//4956 6881//4951 6879//4952 -f 6875//4949 6963//4821 6881//4951 -f 6791//4820 6880//4822 6963//4821 -f 6797//4959 6884//4954 6882//4955 -f 6879//4952 6964//4824 6884//4954 -f 6794//4823 6883//4825 6964//4824 -f 6799//4962 6886//4957 6885//4958 -f 6882//4955 6965//4827 6886//4957 -f 6796//4826 6887//4828 6965//4827 -f 6801//4965 6890//4960 6888//4961 -f 6885//4958 6966//4830 6890//4960 -f 6798//4829 6889//4831 6966//4830 -f 6803//4968 6893//4963 6891//4964 -f 6888//4961 6967//4833 6893//4963 -f 6800//4832 6892//4834 6967//4833 -f 6805//4971 6896//4966 6894//4967 -f 6891//4964 6968//4836 6896//4966 -f 6802//4835 6895//4837 6968//4836 -f 6807//4974 6898//4969 6897//4970 -f 6894//4967 6969//4839 6898//4969 -f 6804//4838 6899//4840 6969//4839 -f 6809//4977 6902//4972 6900//4973 -f 6897//4970 6970//4842 6902//4972 -f 6806//4841 6901//4843 6970//4842 -f 6811//4980 6905//4975 6903//4976 -f 6900//4973 6971//4845 6905//4975 -f 6808//4844 6904//4846 6971//4845 -f 6813//4981 6908//4978 6906//4979 -f 6903//4976 6972//4848 6908//4978 -f 6810//4847 6907//4849 6972//4848 -f 6750//4889 6940//4982 6814//4890 -f 6906//4979 6973//4884 6940//4982 -f 6812//4850 6941//4885 6973//4884 -usemtl Material.001 -f 7329//4983 7203//4718 6986//4546 -f 7330//4984 7206//4719 6993//4553 -f 7331//4985 7210//4720 7000//4560 -f 7332//4986 7212//4721 7007//4562 -f 7333//4987 7215//4722 7014//4723 -f 7334//4988 7218//4724 7021//4570 -f 7335//4989 7222//4725 7028//4583 -f 7336//4990 7224//4726 7035//4727 -f 7337//4991 7227//4728 7042//4586 -f 7338//4992 7230//4729 7049//4593 -f 7339//4993 7234//4730 7056//4601 -f 7340//4994 7236//4731 7063//4608 -f 7341//4995 7239//4732 7070//4733 -f 7342//4996 7242//4734 7077//4615 -f 7343//4997 7245//4735 7084//4623 -f 7344//4998 7248//4736 7091//4631 -f 7345//4999 7251//4737 7098//4638 -f 7346//5000 7254//4738 7105//4739 -f 7347//5001 7257//4740 7112//4646 -f 7348//5002 7260//4741 7119//4742 -f 7349//5003 7264//4743 7126//4654 -f 7350//5004 7267//4744 7134//4668 -f 7351//5005 7270//4745 7141//4676 -f 7352//5006 7274//4746 7148//4747 -f 7353//5007 7276//4748 7155//4678 -f 7354//5008 7279//4749 7162//4684 -f 7355//5009 7282//4750 7169//4698 -f 7356//5010 7286//4751 7176//4752 -f 7357//5011 7288//4753 7183//4701 -f 7358//5012 7291//4754 7190//4707 -f 7359//5013 7294//4755 7197//4756 -f 7128//5014 7296//5015 7297//5016 -f 7128//5014 7297//5016 7298//5017 -f 7128//5014 7298//5017 7299//5018 -f 7128//5014 7299//5018 7300//5019 -f 7128//5014 7300//5019 7301//5020 -f 7128//5014 7301//5020 7302//5021 -f 7128//5014 7302//5021 7303//5022 -f 7128//5014 7303//5022 7304//5023 -f 7128//5014 7304//5023 7305//5024 -f 7128//5014 7305//5024 7306//5025 -f 7128//5014 7306//5025 7307//5026 -f 7128//5014 7307//5026 7308//5027 -f 7128//5014 7308//5027 7309//5028 -f 7128//5014 7309//5028 7310//5029 -f 7128//5014 7310//5029 7311//5030 -f 7128//5014 7311//5030 7312//5031 -f 7128//5014 7312//5031 7313//5032 -f 7128//5014 7313//5032 7314//5033 -f 7128//5014 7314//5033 7315//5034 -f 7128//5014 7315//5034 7316//5035 -f 7128//5014 7316//5035 7263//5036 -f 7128//5014 7263//5036 7317//5037 -f 7128//5014 7317//5037 7318//5038 -f 7128//5014 7318//5038 7319//5039 -f 7128//5014 7319//5039 7320//5040 -f 7128//5014 7320//5040 7321//5041 -f 7128//5014 7321//5041 7322//5042 -f 7128//5014 7322//5042 7323//5043 -f 7128//5014 7323//5043 7324//5044 -f 7128//5014 7324//5044 7325//5045 -f 7128//5014 7325//5045 7326//5046 -f 7128//5014 7326//5046 7296//5015 -f 7360//5047 7328//4757 6979//4539 -f 7204//5048 7329//4983 7202//5049 -f 6980//5050 7201//5051 7204//5048 -f 7201//5051 6979//4539 7329//4983 -f 7207//5052 7330//4984 7205//5053 -f 6987//5054 7202//5049 7207//5052 -f 7202//5049 6986//4546 7330//4984 -f 7209//5055 7331//4985 7208//5056 -f 6994//5057 7205//5053 7209//5055 -f 7205//5053 6993//4553 7331//4985 -f 7213//5058 7332//4986 7211//5059 -f 7001//5060 7208//5056 7213//5058 -f 7208//5056 7000//4560 7332//4986 -f 7216//5061 7333//4987 7214//5062 -f 7008//5063 7211//5059 7216//5061 -f 7211//5059 7007//4562 7333//4987 -f 7219//5064 7334//4988 7217//5065 -f 7015//5066 7214//5062 7219//5064 -f 7214//5062 7014//4723 7334//4988 -f 7221//5067 7335//4989 7220//5068 -f 7022//5069 7217//5065 7221//5067 -f 7217//5065 7021//4570 7335//4989 -f 7225//5070 7336//4990 7223//5071 -f 7029//5072 7220//5068 7225//5070 -f 7220//5068 7028//4583 7336//4990 -f 7228//5073 7337//4991 7226//5074 -f 7036//5075 7223//5071 7228//5073 -f 7223//5071 7035//4727 7337//4991 -f 7231//5076 7338//4992 7229//5077 -f 7043//5078 7226//5074 7231//5076 -f 7226//5074 7042//4586 7338//4992 -f 7233//5079 7339//4993 7232//5080 -f 7050//5081 7229//5077 7233//5079 -f 7229//5077 7049//4593 7339//4993 -f 7237//5082 7340//4994 7235//5083 -f 7057//5084 7232//5080 7237//5082 -f 7232//5080 7056//4601 7340//4994 -f 7240//5085 7341//4995 7238//5086 -f 7064//5087 7235//5083 7240//5085 -f 7235//5083 7063//4608 7341//4995 -f 7243//5088 7342//4996 7241//5089 -f 7071//5090 7238//5086 7243//5088 -f 7238//5086 7070//4733 7342//4996 -f 7246//5091 7343//4997 7244//5092 -f 7078//5093 7241//5089 7246//5091 -f 7241//5089 7077//4615 7343//4997 -f 7249//5094 7344//4998 7247//5095 -f 7085//5096 7244//5092 7249//5094 -f 7244//5092 7084//4623 7344//4998 -f 7252//5097 7345//4999 7250//5098 -f 7092//5099 7247//5095 7252//5097 -f 7247//5095 7091//4631 7345//4999 -f 7255//5100 7346//5000 7253//5101 -f 7099//5102 7250//5098 7255//5100 -f 7250//5098 7098//4638 7346//5000 -f 7258//5103 7347//5001 7256//5104 -f 7106//5105 7253//5101 7258//5103 -f 7253//5101 7105//4739 7347//5001 -f 7261//5106 7348//5002 7259//5107 -f 7113//5108 7256//5104 7261//5106 -f 7256//5104 7112//4646 7348//5002 -f 7265//5109 7349//5003 7262//5110 -f 7120//5111 7259//5107 7265//5109 -f 7259//5107 7119//4742 7349//5003 -f 7268//5112 7350//5004 7266//5113 -f 7127//5114 7262//5110 7268//5112 -f 7262//5110 7126//4654 7350//5004 -f 7271//5115 7351//5005 7269//5116 -f 7135//5117 7266//5113 7271//5115 -f 7266//5113 7134//4668 7351//5005 -f 7273//5118 7352//5006 7272//5119 -f 7142//5120 7269//5116 7273//5118 -f 7269//5116 7141//4676 7352//5006 -f 7277//5121 7353//5007 7275//5122 -f 7149//5123 7272//5119 7277//5121 -f 7272//5119 7148//4747 7353//5007 -f 7280//5124 7354//5008 7278//5125 -f 7156//5126 7275//5122 7280//5124 -f 7275//5122 7155//4678 7354//5008 -f 7283//5127 7355//5009 7281//5128 -f 7163//5129 7278//5125 7283//5127 -f 7278//5125 7162//4684 7355//5009 -f 7285//5130 7356//5010 7284//5131 -f 7170//5132 7281//5128 7285//5130 -f 7281//5128 7169//4698 7356//5010 -f 7289//5133 7357//5011 7287//5134 -f 7177//5135 7284//5131 7289//5133 -f 7284//5131 7176//4752 7357//5011 -f 7292//5136 7358//5012 7290//5137 -f 7184//5138 7287//5134 7292//5136 -f 7287//5134 7183//4701 7358//5012 -f 7295//5139 7359//5013 7293//5140 -f 7191//5141 7290//5137 7295//5139 -f 7290//5137 7190//4707 7359//5013 -f 7297//5016 7204//5048 6987//5054 -f 7297//5016 7296//5015 7204//5048 -f 7296//5015 6980//5050 7204//5048 -f 7298//5017 7207//5052 6994//5057 -f 7298//5017 7297//5016 7207//5052 -f 7297//5016 6987//5054 7207//5052 -f 7299//5018 7209//5055 7001//5060 -f 7299//5018 7298//5017 7209//5055 -f 7298//5017 6994//5057 7209//5055 -f 7300//5019 7213//5058 7008//5063 -f 7300//5019 7299//5018 7213//5058 -f 7299//5018 7001//5060 7213//5058 -f 7301//5020 7216//5061 7015//5066 -f 7301//5020 7300//5019 7216//5061 -f 7300//5019 7008//5063 7216//5061 -f 7302//5021 7219//5064 7022//5069 -f 7302//5021 7301//5020 7219//5064 -f 7301//5020 7015//5066 7219//5064 -f 7303//5022 7221//5067 7029//5072 -f 7303//5022 7302//5021 7221//5067 -f 7302//5021 7022//5069 7221//5067 -f 7304//5023 7225//5070 7036//5075 -f 7304//5023 7303//5022 7225//5070 -f 7303//5022 7029//5072 7225//5070 -f 7305//5024 7228//5073 7043//5078 -f 7305//5024 7304//5023 7228//5073 -f 7304//5023 7036//5075 7228//5073 -f 7306//5025 7231//5076 7050//5081 -f 7306//5025 7305//5024 7231//5076 -f 7305//5024 7043//5078 7231//5076 -f 7307//5026 7233//5079 7057//5084 -f 7307//5026 7306//5025 7233//5079 -f 7306//5025 7050//5081 7233//5079 -f 7308//5027 7237//5082 7064//5087 -f 7308//5027 7307//5026 7237//5082 -f 7307//5026 7057//5084 7237//5082 -f 7309//5028 7240//5085 7071//5090 -f 7309//5028 7308//5027 7240//5085 -f 7308//5027 7064//5087 7240//5085 -f 7310//5029 7243//5088 7078//5093 -f 7310//5029 7309//5028 7243//5088 -f 7309//5028 7071//5090 7243//5088 -f 7311//5030 7246//5091 7085//5096 -f 7311//5030 7310//5029 7246//5091 -f 7310//5029 7078//5093 7246//5091 -f 7312//5031 7249//5094 7092//5099 -f 7312//5031 7311//5030 7249//5094 -f 7311//5030 7085//5096 7249//5094 -f 7313//5032 7252//5097 7099//5102 -f 7313//5032 7312//5031 7252//5097 -f 7312//5031 7092//5099 7252//5097 -f 7314//5033 7255//5100 7106//5105 -f 7314//5033 7313//5032 7255//5100 -f 7313//5032 7099//5102 7255//5100 -f 7315//5034 7258//5103 7113//5108 -f 7315//5034 7314//5033 7258//5103 -f 7314//5033 7106//5105 7258//5103 -f 7316//5035 7261//5106 7120//5111 -f 7316//5035 7315//5034 7261//5106 -f 7315//5034 7113//5108 7261//5106 -f 7263//5036 7265//5109 7127//5114 -f 7263//5036 7316//5035 7265//5109 -f 7316//5035 7120//5111 7265//5109 -f 7317//5037 7268//5112 7135//5117 -f 7317//5037 7263//5036 7268//5112 -f 7263//5036 7127//5114 7268//5112 -f 7318//5038 7271//5115 7142//5120 -f 7318//5038 7317//5037 7271//5115 -f 7317//5037 7135//5117 7271//5115 -f 7319//5039 7273//5118 7149//5123 -f 7319//5039 7318//5038 7273//5118 -f 7318//5038 7142//5120 7273//5118 -f 7320//5040 7277//5121 7156//5126 -f 7320//5040 7319//5039 7277//5121 -f 7319//5039 7149//5123 7277//5121 -f 7321//5041 7280//5124 7163//5129 -f 7321//5041 7320//5040 7280//5124 -f 7320//5040 7156//5126 7280//5124 -f 7322//5042 7283//5127 7170//5132 -f 7322//5042 7321//5041 7283//5127 -f 7321//5041 7163//5129 7283//5127 -f 7323//5043 7285//5130 7177//5135 -f 7323//5043 7322//5042 7285//5130 -f 7322//5042 7170//5132 7285//5130 -f 7324//5044 7289//5133 7184//5138 -f 7324//5044 7323//5043 7289//5133 -f 7323//5043 7177//5135 7289//5133 -f 7325//5045 7292//5136 7191//5141 -f 7325//5045 7324//5044 7292//5136 -f 7324//5044 7184//5138 7292//5136 -f 7326//5046 7295//5139 7198//5142 -f 7326//5046 7325//5045 7295//5139 -f 7325//5045 7191//5141 7295//5139 -f 7296//5015 7327//5143 6980//5050 -f 7296//5015 7326//5046 7327//5143 -f 7326//5046 7198//5142 7327//5143 -f 7327//5143 7360//5047 7201//5051 -f 7198//5142 7293//5140 7327//5143 -f 7293//5140 7197//4756 7360//5047 -f 7202//5049 7329//4983 6986//4546 -f 7205//5053 7330//4984 6993//4553 -f 7208//5056 7331//4985 7000//4560 -f 7211//5059 7332//4986 7007//4562 -f 7214//5062 7333//4987 7014//4723 -f 7217//5065 7334//4988 7021//4570 -f 7220//5068 7335//4989 7028//4583 -f 7223//5071 7336//4990 7035//4727 -f 7226//5074 7337//4991 7042//4586 -f 7229//5077 7338//4992 7049//4593 -f 7232//5080 7339//4993 7056//4601 -f 7235//5083 7340//4994 7063//4608 -f 7238//5086 7341//4995 7070//4733 -f 7241//5089 7342//4996 7077//4615 -f 7244//5092 7343//4997 7084//4623 -f 7247//5095 7344//4998 7091//4631 -f 7250//5098 7345//4999 7098//4638 -f 7253//5101 7346//5000 7105//4739 -f 7256//5104 7347//5001 7112//4646 -f 7259//5107 7348//5002 7119//4742 -f 7262//5110 7349//5003 7126//4654 -f 7266//5113 7350//5004 7134//4668 -f 7269//5116 7351//5005 7141//4676 -f 7272//5119 7352//5006 7148//4747 -f 7275//5122 7353//5007 7155//4678 -f 7278//5125 7354//5008 7162//4684 -f 7281//5128 7355//5009 7169//4698 -f 7284//5131 7356//5010 7176//4752 -f 7287//5134 7357//5011 7183//4701 -f 7290//5137 7358//5012 7190//4707 -f 7293//5140 7359//5013 7197//4756 -f 7201//5051 7360//5047 6979//4539 -f 6987//5054 7204//5048 7202//5049 -f 7201//5051 7329//4983 7204//5048 -f 6979//4539 7203//4718 7329//4983 -f 6994//5057 7207//5052 7205//5053 -f 7202//5049 7330//4984 7207//5052 -f 6986//4546 7206//4719 7330//4984 -f 7001//5060 7209//5055 7208//5056 -f 7205//5053 7331//4985 7209//5055 -f 6993//4553 7210//4720 7331//4985 -f 7008//5063 7213//5058 7211//5059 -f 7208//5056 7332//4986 7213//5058 -f 7000//4560 7212//4721 7332//4986 -f 7015//5066 7216//5061 7214//5062 -f 7211//5059 7333//4987 7216//5061 -f 7007//4562 7215//4722 7333//4987 -f 7022//5069 7219//5064 7217//5065 -f 7214//5062 7334//4988 7219//5064 -f 7014//4723 7218//4724 7334//4988 -f 7029//5072 7221//5067 7220//5068 -f 7217//5065 7335//4989 7221//5067 -f 7021//4570 7222//4725 7335//4989 -f 7036//5075 7225//5070 7223//5071 -f 7220//5068 7336//4990 7225//5070 -f 7028//4583 7224//4726 7336//4990 -f 7043//5078 7228//5073 7226//5074 -f 7223//5071 7337//4991 7228//5073 -f 7035//4727 7227//4728 7337//4991 -f 7050//5081 7231//5076 7229//5077 -f 7226//5074 7338//4992 7231//5076 -f 7042//4586 7230//4729 7338//4992 -f 7057//5084 7233//5079 7232//5080 -f 7229//5077 7339//4993 7233//5079 -f 7049//4593 7234//4730 7339//4993 -f 7064//5087 7237//5082 7235//5083 -f 7232//5080 7340//4994 7237//5082 -f 7056//4601 7236//4731 7340//4994 -f 7071//5090 7240//5085 7238//5086 -f 7235//5083 7341//4995 7240//5085 -f 7063//4608 7239//4732 7341//4995 -f 7078//5093 7243//5088 7241//5089 -f 7238//5086 7342//4996 7243//5088 -f 7070//4733 7242//4734 7342//4996 -f 7085//5096 7246//5091 7244//5092 -f 7241//5089 7343//4997 7246//5091 -f 7077//4615 7245//4735 7343//4997 -f 7092//5099 7249//5094 7247//5095 -f 7244//5092 7344//4998 7249//5094 -f 7084//4623 7248//4736 7344//4998 -f 7099//5102 7252//5097 7250//5098 -f 7247//5095 7345//4999 7252//5097 -f 7091//4631 7251//4737 7345//4999 -f 7106//5105 7255//5100 7253//5101 -f 7250//5098 7346//5000 7255//5100 -f 7098//4638 7254//4738 7346//5000 -f 7113//5108 7258//5103 7256//5104 -f 7253//5101 7347//5001 7258//5103 -f 7105//4739 7257//4740 7347//5001 -f 7120//5111 7261//5106 7259//5107 -f 7256//5104 7348//5002 7261//5106 -f 7112//4646 7260//4741 7348//5002 -f 7127//5114 7265//5109 7262//5110 -f 7259//5107 7349//5003 7265//5109 -f 7119//4742 7264//4743 7349//5003 -f 7135//5117 7268//5112 7266//5113 -f 7262//5110 7350//5004 7268//5112 -f 7126//4654 7267//4744 7350//5004 -f 7142//5120 7271//5115 7269//5116 -f 7266//5113 7351//5005 7271//5115 -f 7134//4668 7270//4745 7351//5005 -f 7149//5123 7273//5118 7272//5119 -f 7269//5116 7352//5006 7273//5118 -f 7141//4676 7274//4746 7352//5006 -f 7156//5126 7277//5121 7275//5122 -f 7272//5119 7353//5007 7277//5121 -f 7148//4747 7276//4748 7353//5007 -f 7163//5129 7280//5124 7278//5125 -f 7275//5122 7354//5008 7280//5124 -f 7155//4678 7279//4749 7354//5008 -f 7170//5132 7283//5127 7281//5128 -f 7278//5125 7355//5009 7283//5127 -f 7162//4684 7282//4750 7355//5009 -f 7177//5135 7285//5130 7284//5131 -f 7281//5128 7356//5010 7285//5130 -f 7169//4698 7286//4751 7356//5010 -f 7184//5138 7289//5133 7287//5134 -f 7284//5131 7357//5011 7289//5133 -f 7176//4752 7288//4753 7357//5011 -f 7191//5141 7292//5136 7290//5137 -f 7287//5134 7358//5012 7292//5136 -f 7183//4701 7291//4754 7358//5012 -f 7198//5142 7295//5139 7293//5140 -f 7290//5137 7359//5013 7295//5139 -f 7190//4707 7294//4755 7359//5013 -f 6980//5050 7327//5143 7201//5051 -f 7293//5140 7360//5047 7327//5143 -f 7197//4756 7328//4757 7360//5047 -l 7199 7200 -o Eye_L_Sphere.004 -v -0.483685 1.010693 0.349484 -v -0.489504 1.014649 0.341047 -v -0.480361 1.012142 0.347357 -v -0.487809 1.015388 0.339963 -v -0.477556 1.013611 0.344591 -v -0.486379 1.016137 0.338553 -v -0.475379 1.015045 0.341293 -v -0.485269 1.016868 0.336871 -v -0.473913 1.016386 0.337588 -v -0.484522 1.017552 0.334982 -v -0.473215 1.017585 0.333619 -v -0.484166 1.018163 0.332959 -v -0.473311 1.018595 0.329539 -v -0.484215 1.018678 0.330879 -v -0.474199 1.019378 0.325504 -v -0.484668 1.019077 0.328822 -v -0.475842 1.019902 0.321670 -v -0.485506 1.019344 0.326867 -v -0.478180 1.020149 0.318184 -v -0.486697 1.019470 0.325090 -v -0.481121 1.020108 0.315180 -v -0.488197 1.019449 0.323559 -v -0.484553 1.019781 0.312773 -v -0.489946 1.019282 0.322332 -v -0.488343 1.019181 0.311056 -v -0.491879 1.018976 0.321457 -v -0.492347 1.018330 0.310095 -v -0.493920 1.018543 0.320967 -v -0.496410 1.017262 0.309927 -v -0.495991 1.017998 0.320881 -v -0.500376 1.016018 0.310558 -v -0.498013 1.017364 0.321202 -v -0.504093 1.014645 0.311964 -v -0.499908 1.016664 0.321919 -v -0.507417 1.013196 0.314090 -v -0.501602 1.015925 0.323003 -v -0.510222 1.011726 0.316856 -v -0.503032 1.015176 0.324413 -v -0.512399 1.010293 0.320155 -v -0.504142 1.014446 0.326095 -v -0.513865 1.008951 0.323860 -v -0.504889 1.013762 0.327984 -v -0.514563 1.007752 0.327829 -v -0.505245 1.013150 0.330007 -v -0.494982 1.016666 0.331739 -v -0.514467 1.006742 0.331909 -v -0.505196 1.012635 0.332087 -v -0.513579 1.005960 0.335944 -v -0.504744 1.012237 0.334144 -v -0.511935 1.005435 0.339778 -v -0.503906 1.011969 0.336098 -v -0.509598 1.005189 0.343264 -v -0.502714 1.011844 0.337876 -v -0.506657 1.005230 0.346268 -v -0.501215 1.011864 0.339407 -v -0.503225 1.005557 0.348674 -v -0.499465 1.012031 0.340634 -v -0.499435 1.006157 0.350391 -v -0.497533 1.012337 0.341509 -v -0.495431 1.007007 0.351352 -v -0.495492 1.012771 0.341999 -v -0.491368 1.008075 0.351521 -v -0.493421 1.013315 0.342085 -v -0.487402 1.009320 0.350890 -v -0.491399 1.013949 0.341763 -v -0.486626 1.012941 0.345419 -v -0.484102 1.014042 0.343804 -v -0.482024 1.011457 0.348446 -v -0.488658 1.015030 0.340510 -v -0.481972 1.015157 0.341704 -v -0.478957 1.012917 0.345998 -v -0.487096 1.015774 0.339262 -v -0.480319 1.016246 0.339199 -v -0.485825 1.016514 0.337716 -v -0.476464 1.014370 0.342963 -v -0.479206 1.017264 0.336386 -v -0.474641 1.015758 0.339458 -v -0.484897 1.017222 0.335930 -v -0.478676 1.018175 0.333372 -v -0.473558 1.017030 0.335617 -v -0.484345 1.017869 0.333974 -v -0.478749 1.018942 0.330274 -v -0.473257 1.018135 0.331590 -v -0.484192 1.018432 0.331922 -v -0.479423 1.019536 0.327211 -v -0.484442 1.018889 0.329853 -v -0.473749 1.019032 0.327529 -v -0.480671 1.019934 0.324300 -v -0.475016 1.019686 0.323591 -v -0.485088 1.019223 0.327847 -v -0.482446 1.020121 0.321653 -v -0.477008 1.020072 0.319928 -v -0.486103 1.019419 0.325980 -v -0.484679 1.020090 0.319372 -v -0.479649 1.020175 0.316681 -v -0.487448 1.019472 0.324326 -v -0.487285 1.019842 0.317545 -v -0.489073 1.019378 0.322946 -v -0.482838 1.019991 0.313973 -v -0.490163 1.019386 0.316241 -v -0.486453 1.019527 0.311909 -v -0.490915 1.019141 0.321895 -v -0.493203 1.018740 0.315511 -v -0.490353 1.018801 0.310569 -v -0.492902 1.018772 0.321212 -v -0.496288 1.017930 0.315383 -v -0.494390 1.017841 0.310004 -v -0.494958 1.018283 0.320924 -v -0.499299 1.016985 0.315862 -v -0.498408 1.016684 0.310235 -v -0.497005 1.017693 0.321042 -v -0.502121 1.015942 0.316930 -v -0.502252 1.015374 0.311255 -v -0.498964 1.017026 0.321561 -v -0.504646 1.014842 0.318545 -v -0.505776 1.013961 0.313022 -v -0.500759 1.016306 0.322462 -v -0.506775 1.013726 0.320645 -v -0.508843 1.012501 0.315471 -v -0.502322 1.015562 0.323709 -v -0.508428 1.012638 0.323150 -v -0.511336 1.011048 0.318506 -v -0.503592 1.014822 0.325256 -v -0.509541 1.011619 0.325963 -v -0.513159 1.009660 0.322011 -v -0.504521 1.014114 0.327041 -v -0.510071 1.010709 0.328976 -v -0.500228 1.015201 0.330945 -v -0.514242 1.008388 0.325851 -v -0.505073 1.013467 0.328998 -v -0.509998 1.009942 0.332074 -v -0.514543 1.007283 0.329879 -v -0.505226 1.012903 0.331050 -v -0.509324 1.009348 0.335138 -v -0.514051 1.006386 0.333939 -v -0.504975 1.012447 0.333119 -v -0.508076 1.008950 0.338049 -v -0.504330 1.012113 0.335125 -v -0.512784 1.005732 0.337877 -v -0.506301 1.008762 0.340696 -v -0.510792 1.005346 0.341540 -v -0.503315 1.011917 0.336991 -v -0.504068 1.008794 0.342976 -v -0.508151 1.005243 0.344788 -v -0.501969 1.011864 0.338646 -v -0.501463 1.009042 0.344804 -v -0.504961 1.005427 0.347495 -v -0.500344 1.011958 0.340025 -v -0.498584 1.009497 0.346108 -v -0.498503 1.012195 0.341077 -v -0.501347 1.005891 0.349559 -v -0.495544 1.010143 0.346837 -v -0.497447 1.006617 0.350899 -v -0.496516 1.012564 0.341759 -v -0.492460 1.010954 0.346965 -v -0.493410 1.007577 0.351464 -v -0.494459 1.013053 0.342047 -v -0.489448 1.011899 0.346486 -v -0.489392 1.008734 0.351233 -v -0.492412 1.013643 0.341929 -v -0.492309 1.015955 0.336499 -v -0.491456 1.016326 0.335953 -v -0.490737 1.016703 0.335244 -v -0.490179 1.017071 0.334398 -v -0.489803 1.017415 0.333448 -v -0.489624 1.017722 0.332430 -v -0.489648 1.017981 0.331383 -v -0.489876 1.018182 0.330349 -v -0.490298 1.018317 0.329365 -v -0.490897 1.018380 0.328471 -v -0.491651 1.018369 0.327701 -v -0.492531 1.018286 0.327084 -v -0.493504 1.018131 0.326643 -v -0.494530 1.017913 0.326397 -v -0.495572 1.017640 0.326354 -v -0.496589 1.017320 0.326516 -v -0.497543 1.016968 0.326876 -v -0.498395 1.016597 0.327421 -v -0.499115 1.016220 0.328131 -v -0.499673 1.015852 0.328977 -v -0.500049 1.015508 0.329927 -v -0.500203 1.014942 0.331991 -v -0.499976 1.014741 0.333026 -v -0.499554 1.014606 0.334009 -v -0.498955 1.014543 0.334903 -v -0.498200 1.014554 0.335674 -v -0.497320 1.014638 0.336291 -v -0.496348 1.014791 0.336731 -v -0.495321 1.015010 0.336978 -v -0.494279 1.015283 0.337021 -v -0.493262 1.015603 0.336859 -v -0.490453 1.014310 0.341410 -v -0.485548 1.010044 0.350214 -v -0.485366 1.013515 0.344624 -v -0.483038 1.014624 0.342766 -v -0.481146 1.015726 0.340462 -v -0.479762 1.016780 0.337802 -v -0.478940 1.017745 0.334887 -v -0.478712 1.018584 0.331830 -v -0.479085 1.019265 0.328748 -v -0.480047 1.019762 0.325759 -v -0.481559 1.020054 0.322979 -v -0.483564 1.020133 0.320514 -v -0.485984 1.019993 0.318458 -v -0.488728 1.019641 0.316892 -v -0.491688 1.019090 0.315875 -v -0.494752 1.018361 0.315446 -v -0.497802 1.017483 0.315621 -v -0.500720 1.016489 0.316395 -v -0.503394 1.015417 0.317737 -v -0.505723 1.014308 0.319595 -v -0.507615 1.013206 0.321899 -v -0.508998 1.012151 0.324559 -v -0.509820 1.011186 0.327474 -v -0.510049 1.010347 0.330531 -v -0.509675 1.009667 0.333613 -v -0.508714 1.009170 0.336602 -v -0.507202 1.008878 0.339382 -v -0.505197 1.008799 0.341847 -v -0.502776 1.008939 0.343903 -v -0.500033 1.009291 0.345469 -v -0.497072 1.009842 0.346486 -v -0.494008 1.010571 0.346915 -v -0.490959 1.011449 0.346739 -v -0.488041 1.012443 0.345966 -v -0.277543 0.786707 0.537948 -v -0.288994 0.815456 0.533079 -v -0.305471 0.844683 0.518935 -v -0.328026 0.887146 0.501019 -v -0.354605 0.931433 0.476525 -v -0.383290 0.968461 0.443756 -v -0.412980 0.996808 0.403974 -v -0.232706 0.802725 0.508343 -v -0.246759 0.830544 0.505192 -v -0.267461 0.858262 0.493837 -v -0.295701 0.898694 0.479675 -v -0.329207 0.940506 0.459755 -v -0.365796 0.974710 0.432205 -v -0.404061 0.999994 0.398085 -v -0.195180 0.820703 0.470769 -v -0.211410 0.847479 0.469798 -v -0.235647 0.873503 0.461983 -v -0.268646 0.911656 0.452586 -v -0.307950 0.950690 0.438470 -v -0.351154 0.981725 0.417544 -v -0.396597 1.003570 0.390611 -v -0.166405 0.839951 0.426668 -v -0.184304 0.865610 0.428256 -v -0.211253 0.889820 0.424597 -v -0.247900 0.925533 0.420791 -v -0.291650 0.961593 0.413490 -v -0.339926 0.989235 0.400337 -v -0.390873 1.007398 0.381839 -v -0.147488 0.859728 0.377737 -v -0.166485 0.884240 0.382163 -v -0.195216 0.906587 0.383114 -v -0.234262 0.939792 0.385513 -v -0.280935 0.972796 0.385772 -v -0.332545 0.996952 0.381245 -v -0.387111 1.011332 0.372106 -v -0.139156 0.879276 0.325854 -v -0.158636 0.902654 0.333291 -v -0.188153 0.923159 0.339131 -v -0.228255 0.953885 0.348108 -v -0.276215 0.983869 0.356383 -v -0.329294 1.004579 0.361001 -v -0.385453 1.015221 0.361786 -v -0.141728 0.897842 0.273015 -v -0.161060 0.920143 0.283518 -v -0.190334 0.938898 0.294336 -v -0.230110 0.967270 0.310013 -v -0.277672 0.994386 0.326452 -v -0.330298 1.011823 0.340385 -v -0.385965 1.018914 0.351275 -v -0.155107 0.914714 0.221250 -v -0.173662 0.936036 0.234756 -v -0.201675 0.953201 0.250451 -v -0.239755 0.979434 0.272692 -v -0.285250 1.003943 0.297129 -v -0.335518 1.018407 0.320187 -v -0.388626 1.022270 0.340979 -v -0.178777 0.929242 0.172547 -v -0.195959 0.949721 0.188879 -v -0.221742 0.965518 0.209163 -v -0.256821 0.989908 0.237580 -v -0.298659 1.012172 0.269541 -v -0.344754 1.024075 0.301184 -v -0.393334 1.025160 0.331291 -v -0.211830 0.940869 0.128779 -v -0.227094 0.960673 0.147651 -v -0.249763 0.975375 0.172058 -v -0.280650 0.998291 0.206025 -v -0.317382 1.018759 0.244749 -v -0.357650 1.028612 0.284106 -v -0.399909 1.027472 0.322585 -v -0.252995 0.949148 0.091628 -v -0.265871 0.968472 0.112655 -v -0.284661 0.982393 0.140563 -v -0.310328 1.004259 0.179240 -v -0.340700 1.023448 0.223704 -v -0.373712 1.031842 0.269611 -v -0.408097 1.029119 0.315195 -v -0.300690 0.953760 0.062521 -v -0.310798 0.972816 0.085236 -v -0.325095 0.986303 0.115887 -v -0.344715 1.007585 0.158255 -v -0.367717 1.026061 0.207217 -v -0.392322 1.033641 0.258254 -v -0.417584 1.030036 0.309405 -v -0.353083 0.954529 0.042576 -v -0.360151 0.973540 0.066449 -v -0.369511 0.986955 0.098979 -v -0.382487 1.008139 0.143876 -v -0.397395 1.026496 0.195919 -v -0.412764 1.033941 0.250472 -v -0.428006 1.030189 0.305438 -v -0.408159 0.951424 0.032561 -v -0.412031 0.970616 0.057016 -v -0.416202 0.984323 0.090489 -v -0.422195 1.005901 0.136656 -v -0.428593 1.024737 0.190246 -v -0.434254 1.032730 0.246564 -v -0.438961 1.029572 0.303446 -v -0.463802 0.944565 0.032861 -v -0.464446 0.964155 0.057297 -v -0.463374 0.978508 0.090743 -v -0.462312 1.000956 0.136871 -v -0.460112 1.020852 0.190415 -v -0.455965 1.030054 0.246681 -v -0.450029 1.028207 0.303506 -v -0.517874 0.934216 0.043462 -v -0.515381 0.954407 0.067284 -v -0.509215 0.969735 0.099731 -v -0.501296 0.993495 0.144515 -v -0.490742 1.014990 0.196421 -v -0.477063 1.026016 0.250818 -v -0.460785 1.026149 0.305614 -v -0.568297 0.920775 0.063960 -v -0.562879 0.941745 0.086592 -v -0.551961 0.958340 0.117107 -v -0.537649 0.983804 0.159293 -v -0.519304 1.007376 0.208032 -v -0.496737 1.020771 0.258815 -v -0.470815 1.023475 0.309692 -v -0.613134 0.904757 0.093564 -v -0.605114 0.926657 0.114479 -v -0.589972 0.944761 0.142205 -v -0.569974 0.972256 0.180636 -v -0.544702 0.998303 0.224802 -v -0.514231 1.014522 0.270366 -v -0.480455 1.016774 0.313963 -v -0.650660 0.886779 0.131139 -v -0.640463 0.909722 0.149873 -v -0.621785 0.929520 0.174059 -v -0.597029 0.959294 0.207726 -v -0.565959 0.988119 0.246086 -v -0.528874 1.007507 0.285027 -v -0.489434 1.012130 0.319679 -v -0.679435 0.867532 0.175239 -v -0.667568 0.891591 0.191415 -v -0.646179 0.913202 0.211446 -v -0.617775 0.945418 0.239521 -v -0.582259 0.977216 0.271067 -v -0.540101 0.999997 0.302234 -v -0.495741 1.007945 0.328309 -v -0.698352 0.847754 0.224171 -v -0.685388 0.872961 0.237508 -v -0.662217 0.896436 0.252928 -v -0.631413 0.931159 0.274799 -v -0.592974 0.966013 0.298784 -v -0.547482 0.992280 0.321327 -v -0.499139 1.004188 0.338610 -v -0.706684 0.828206 0.276053 -v -0.693237 0.854547 0.286380 -v -0.669280 0.879864 0.296912 -v -0.637420 0.917066 0.312204 -v -0.597694 0.954940 0.328173 -v -0.550733 0.984653 0.341570 -v -0.498901 1.001679 0.349947 -v -0.442533 1.015384 0.358706 -v -0.704112 0.809640 0.328892 -v -0.690813 0.837058 0.336153 -v -0.667099 0.864124 0.341706 -v -0.635565 0.903680 0.350298 -v -0.596237 0.944423 0.358104 -v -0.549729 0.977409 0.362187 -v -0.497830 1.001369 0.362390 -v -0.690733 0.792768 0.380658 -v -0.678211 0.821166 0.384915 -v -0.655757 0.849821 0.385591 -v -0.625920 0.891516 0.387619 -v -0.588658 0.934866 0.387427 -v -0.544509 0.970826 0.382385 -v -0.495169 0.998013 0.372687 -v -0.667063 0.778240 0.429360 -v -0.655914 0.807480 0.430792 -v -0.635691 0.837505 0.426879 -v -0.608854 0.881042 0.422732 -v -0.575250 0.926637 0.415015 -v -0.535273 0.965157 0.401388 -v -0.490460 0.995123 0.382374 -v -0.634010 0.766613 0.473128 -v -0.624779 0.796528 0.472020 -v -0.607670 0.827648 0.463984 -v -0.585025 0.872659 0.454287 -v -0.556527 0.920050 0.439807 -v -0.522377 0.960620 0.418465 -v -0.483886 0.992811 0.391080 -v -0.592845 0.758335 0.510280 -v -0.586002 0.788730 0.507016 -v -0.572772 0.820629 0.495479 -v -0.555346 0.866691 0.481071 -v -0.533209 0.915361 0.460852 -v -0.506315 0.957390 0.432961 -v -0.475698 0.991164 0.398470 -v -0.545150 0.753722 0.539387 -v -0.541074 0.784385 0.534435 -v -0.532338 0.816719 0.520155 -v -0.520960 0.863366 0.502056 -v -0.506192 0.912748 0.477340 -v -0.487705 0.955591 0.444318 -v -0.466210 0.990246 0.404260 -v -0.492758 0.752954 0.559331 -v -0.491722 0.783661 0.553222 -v -0.487922 0.816068 0.537063 -v -0.483188 0.862811 0.516435 -v -0.476514 0.912313 0.488637 -v -0.467263 0.955291 0.452100 -v -0.455789 0.990094 0.408227 -v -0.437681 0.756058 0.569346 -v -0.439842 0.786585 0.562656 -v -0.441231 0.818700 0.545553 -v -0.443480 0.865050 0.523656 -v -0.445316 0.914072 0.494310 -v -0.445773 0.956502 0.456007 -v -0.444834 0.990711 0.410219 -v -0.382038 0.762917 0.569047 -v -0.387427 0.793046 0.562374 -v -0.394059 0.824514 0.545299 -v -0.403363 0.869995 0.523440 -v -0.413797 0.917957 0.494141 -v -0.424062 0.959178 0.455890 -v -0.433766 0.992075 0.410160 -v -0.327966 0.773266 0.558445 -v -0.336492 0.802794 0.552387 -v -0.348218 0.833287 0.536312 -v -0.364379 0.877456 0.515796 -v -0.383167 0.923819 0.488135 -v -0.402964 0.963216 0.451754 -v -0.423010 0.994134 0.408051 -v -0.377985 0.891508 0.314816 -v -0.379611 0.900920 0.313675 -v -0.398062 0.983969 0.424789 -v -0.384779 0.988715 0.416018 -v -0.374513 0.971776 0.438129 -v -0.408520 0.998457 0.401060 -v -0.373661 0.994041 0.404886 -v -0.358431 0.978413 0.425012 -v -0.400327 1.001839 0.394377 -v -0.365136 0.999743 0.391821 -v -0.393731 1.005542 0.386253 -v -0.345486 0.985682 0.409064 -v -0.359532 1.005602 0.377325 -v -0.336174 0.993302 0.390899 -v -0.388987 1.009424 0.376998 -v -0.357064 1.011394 0.361954 -v -0.330853 1.000980 0.371215 -v -0.386276 1.013336 0.366969 -v -0.357826 1.016894 0.346300 -v -0.329728 1.008422 0.350767 -v -0.385703 1.017128 0.356551 -v -0.361789 1.021892 0.330964 -v -0.387290 1.020653 0.346145 -v -0.332843 1.015342 0.330343 -v -0.368802 1.026197 0.316536 -v -0.340077 1.021473 0.310726 -v -0.390976 1.023776 0.336151 -v -0.378594 1.029641 0.303569 -v -0.351153 1.026580 0.292671 -v -0.396619 1.026378 0.326952 -v -0.390790 1.032094 0.292562 -v -0.365644 1.030466 0.276871 -v -0.404002 1.028359 0.318902 -v -0.404920 1.033460 0.283939 -v -0.412841 1.029641 0.312311 -v -0.382994 1.032983 0.263933 -v -0.420441 1.033688 0.278030 -v -0.402537 1.034034 0.254356 -v -0.422798 1.030176 0.307432 -v -0.436758 1.032768 0.275063 -v -0.423521 1.033578 0.248506 -v -0.433489 1.029944 0.304451 -v -0.453243 1.030736 0.275152 -v -0.445139 1.031632 0.246609 -v -0.444503 1.028953 0.303485 -v -0.469262 1.027670 0.278293 -v -0.466562 1.028273 0.248738 -v -0.455417 1.027241 0.304569 -v -0.484201 1.023688 0.284366 -v -0.486965 1.023627 0.254810 -v -0.465812 1.024874 0.307663 -v -0.496772 1.015887 0.292947 -v -0.505565 1.017875 0.264592 -v -0.473255 1.019645 0.315419 -v -0.508371 1.009900 0.303056 -v -0.521647 1.011238 0.277709 -v -0.483273 1.014518 0.318496 -v -0.517039 1.004095 0.315776 -v -0.534592 1.003969 0.293657 -v -0.490648 1.010345 0.325370 -v -0.522337 0.998472 0.330299 -v -0.543904 0.996349 0.311822 -v -0.495320 1.006522 0.334484 -v -0.523969 0.993633 0.345999 -v -0.480696 1.007079 0.352749 -v -0.549225 0.988671 0.331506 -v -0.496785 1.003461 0.344855 -v -0.524437 0.990763 0.362854 -v -0.550349 0.981229 0.351954 -v -0.494152 1.002545 0.356183 -v -0.520474 0.985765 0.378190 -v -0.547235 0.974309 0.372378 -v -0.496519 0.999748 0.367562 -v -0.513461 0.981461 0.392619 -v -0.492833 0.996624 0.377556 -v -0.540001 0.968178 0.391995 -v -0.503669 0.978016 0.405586 -v -0.528925 0.963071 0.410051 -v -0.487190 0.994022 0.386755 -v -0.491473 0.975564 0.416592 -v -0.514434 0.959185 0.425850 -v -0.479807 0.992042 0.394805 -v -0.477343 0.974197 0.425215 -v -0.497084 0.956668 0.438788 -v -0.470968 0.990760 0.401396 -v -0.461821 0.973969 0.431124 -v -0.461011 0.990224 0.406276 -v -0.477541 0.955617 0.448365 -v -0.445505 0.974889 0.434091 -v -0.456557 0.956073 0.454215 -v -0.450320 0.990457 0.409256 -v -0.429020 0.976921 0.434002 -v -0.434939 0.958019 0.456112 -v -0.439306 0.991448 0.410223 -v -0.413000 0.979987 0.430861 -v -0.413516 0.961378 0.453983 -v -0.428392 0.993160 0.409138 -v -0.427857 1.007615 0.382042 -v -0.423371 1.009218 0.379079 -v -0.419616 1.011017 0.375319 -v -0.416736 1.012943 0.370907 -v -0.414843 1.014922 0.366010 -v -0.414010 1.016878 0.360818 -v -0.414267 1.018736 0.355531 -v -0.415606 1.020425 0.350351 -v -0.417974 1.021878 0.345478 -v -0.421282 1.023042 0.341098 -v -0.425401 1.023870 0.337380 -v -0.430174 1.024332 0.334468 -v -0.435416 1.024409 0.332472 -v -0.440928 1.024098 0.331470 -v -0.446496 1.023412 0.331500 -v -0.451907 1.022376 0.332561 -v -0.456952 1.021031 0.334612 -v -0.468517 1.017045 0.328992 -v -0.475444 1.013756 0.331794 -v -0.479959 1.010818 0.337605 -v -0.482112 1.008299 0.344802 -v -0.470543 1.009910 0.361122 -v -0.469204 1.008222 0.366302 -v -0.466835 1.006768 0.371176 -v -0.463528 1.005605 0.375556 -v -0.459409 1.004776 0.379273 -v -0.454636 1.004315 0.382186 -v -0.449393 1.004238 0.384182 -v -0.443882 1.004549 0.385184 -v -0.438314 1.005235 0.385154 -v -0.432903 1.006270 0.384093 -v -0.417997 0.995526 0.406044 -v -0.393113 0.966024 0.447911 -v -0.391411 0.986459 0.420481 -v -0.379205 0.991497 0.410525 -v -0.369379 0.997014 0.398420 -v -0.362311 1.002798 0.384633 -v -0.358272 1.008626 0.369692 -v -0.357419 1.014275 0.354172 -v -0.359783 1.019527 0.338669 -v -0.365274 1.024180 0.323780 -v -0.373680 1.028056 0.310075 -v -0.384679 1.031006 0.298083 -v -0.397849 1.032917 0.288263 -v -0.412682 1.033714 0.280994 -v -0.428609 1.033368 0.276554 -v -0.445018 1.031892 0.275114 -v -0.461278 1.029341 0.276729 -v -0.476764 1.025816 0.281338 -v -0.489888 1.019368 0.289406 -v -0.502516 1.012886 0.298052 -v -0.512663 1.007077 0.309465 -v -0.519650 1.001359 0.323095 -v -0.523079 0.996059 0.338165 -v -0.523164 0.992139 0.354316 -v -0.522510 0.988382 0.370575 -v -0.517020 0.983729 0.385465 -v -0.508613 0.979852 0.399169 -v -0.497614 0.976902 0.411161 -v -0.484445 0.974992 0.420981 -v -0.469612 0.974194 0.428251 -v -0.453684 0.974541 0.432691 -v -0.437276 0.976017 0.434130 -v -0.421016 0.978567 0.432515 -v -0.405529 0.982093 0.427906 -vn 0.258370 0.533799 0.805139 -vn 0.268197 0.516129 0.813410 -vn 0.363964 0.571520 0.735435 -vn 0.190466 0.644063 0.740837 -vn 0.278390 0.675283 0.682974 -vn 0.108158 0.753349 0.648640 -vn 0.319651 0.415021 0.851802 -vn 0.370983 0.296793 0.879910 -vn 0.503952 0.344279 0.792108 -vn 0.376263 0.554735 0.742058 -vn 0.466720 0.598071 0.651479 -vn 0.452315 0.613849 0.646962 -vn 0.173437 0.778497 0.603168 -vn 0.351848 0.710471 0.609394 -vn 0.440535 0.458205 0.771966 -vn 0.541704 0.506668 0.670675 -vn 0.619282 0.558550 0.551775 -vn 0.536088 0.644490 0.545152 -vn 0.408338 0.748039 0.523118 -vn 0.227454 0.804559 0.548540 -vn 0.615253 0.397595 0.680685 -vn 0.700583 0.454695 0.549883 -vn 0.670278 0.611896 0.419843 -vn 0.581683 0.692160 0.427229 -vn 0.520066 0.659169 0.543107 -vn 0.564623 0.705741 0.427900 -vn 0.445021 0.786981 0.427259 -vn 0.297281 0.859554 0.415632 -vn 0.461715 0.825037 0.325663 -vn 0.756706 0.513352 0.404767 -vn 0.781396 0.571306 0.250893 -vn 0.601764 0.739280 0.302164 -vn 0.584246 0.751762 0.305734 -vn 0.595569 0.784020 0.174780 -vn 0.456282 0.861599 0.222297 -vn 0.305673 0.914975 0.263344 -vn 0.692740 0.664602 0.279977 -vn 0.685812 0.714652 0.137516 -vn 0.649739 0.760125 -0.002014 -vn 0.578173 0.795495 0.181310 -vn 0.546678 0.835200 0.059420 -vn 0.430280 0.894559 0.120853 -vn 0.773766 0.626392 0.094211 -vn 0.734092 0.676412 -0.059297 -vn 0.585925 0.799310 -0.133335 -vn 0.563311 0.824702 0.049989 -vn 0.490951 0.869411 -0.055239 -vn 0.283547 0.940519 0.187078 -vn 0.383923 0.923002 0.025483 -vn 0.248909 0.961455 0.116733 -vn 0.319376 0.945677 -0.060305 -vn 0.663900 0.719504 -0.203742 -vn 0.565874 0.753990 -0.333537 -vn 0.506272 0.859706 -0.067385 -vn 0.426588 0.887753 -0.172887 -vn 0.413099 0.896786 -0.158300 -vn 0.327372 0.907712 -0.262429 -vn 0.238655 0.961943 -0.132847 -vn 0.144200 0.989532 0.002564 -vn 0.496811 0.830653 -0.251320 -vn 0.443800 0.778527 -0.443709 -vn 0.385815 0.852962 -0.351482 -vn 0.257241 0.865413 -0.429975 -vn 0.316172 0.916288 -0.245766 -vn 0.203864 0.927152 -0.314310 -vn 0.145268 0.970977 -0.189856 -vn 0.075381 0.996338 -0.039857 -vn 0.302347 0.792199 -0.530045 -vn 0.115970 0.867458 -0.483718 -vn 0.212378 0.918821 -0.332591 -vn 0.086093 0.920682 -0.380688 -vn 0.080508 0.928953 -0.361278 -vn 0.042604 0.972533 -0.228706 -vn -0.001648 0.997406 -0.071718 -vn -0.065127 0.966369 -0.248756 -vn 0.146977 0.794488 -0.589190 -vn -0.016327 0.785272 -0.618885 -vn -0.046632 0.913175 -0.404828 -vn -0.049165 0.921659 -0.384838 -vn -0.174047 0.953001 -0.247932 -vn -0.160466 0.983459 -0.083865 -vn -0.032472 0.859096 -0.510727 -vn -0.182501 0.840602 -0.509934 -vn -0.180761 0.896664 -0.404096 -vn -0.180181 0.905484 -0.384136 -vn -0.328288 0.812708 -0.481338 -vn -0.311106 0.871700 -0.378521 -vn -0.279916 0.932798 -0.226966 -vn -0.241310 0.967864 -0.070437 -vn -0.181371 0.764946 -0.618000 -vn -0.341716 0.734245 -0.586566 -vn -0.464217 0.776482 -0.426069 -vn -0.432661 0.839320 -0.329142 -vn -0.307505 0.881130 -0.359172 -vn -0.426221 0.849483 -0.310923 -vn -0.378704 0.906400 -0.187017 -vn -0.318094 0.947844 -0.019959 -vn -0.466567 0.874966 -0.129276 -vn -0.491256 0.694388 -0.525773 -vn -0.585101 0.733299 -0.346263 -vn -0.540727 0.800684 -0.257759 -vn -0.531785 0.811762 -0.241218 -vn -0.539811 0.839930 -0.055361 -vn -0.392438 0.914274 0.100253 -vn -0.624226 0.646870 -0.437971 -vn -0.735527 0.593554 -0.326548 -vn -0.631184 0.757347 -0.167180 -vn -0.620167 0.769433 -0.152715 -vn -0.686270 0.684805 -0.244972 -vn -0.700552 0.710959 -0.060884 -vn -0.596423 0.802057 0.030671 -vn -0.763848 0.632923 -0.126072 -vn -0.820856 0.536485 -0.195746 -vn -0.814844 0.579608 0.005829 -vn -0.687918 0.724113 -0.048891 -vn -0.732475 0.677541 0.066286 -vn -0.633168 0.763543 0.126682 -vn -0.450942 0.866421 0.214362 -vn -0.649648 0.725150 0.228217 -vn -0.876980 0.477828 -0.050630 -vn -0.837306 0.526902 0.145695 -vn -0.746147 0.663289 0.057039 -vn -0.766259 0.616169 0.182104 -vn -0.752068 0.631519 0.188452 -vn -0.644765 0.688650 0.331614 -vn -0.471847 0.838008 0.274026 -vn -0.901669 0.419843 0.103214 -vn -0.894040 0.364788 0.259926 -vn -0.830378 0.476852 0.288156 -vn -0.760033 0.571398 0.309488 -vn -0.746025 0.587786 0.312876 -vn -0.714530 0.548051 0.434767 -vn -0.618244 0.655934 0.432997 -vn -0.492691 0.762169 0.419904 -vn -0.854366 0.314768 0.413434 -vn -0.727805 0.530747 0.434248 -vn -0.794305 0.431349 0.427717 -vn -0.784173 0.271676 0.557878 -vn -0.670736 0.495712 0.551653 -vn -0.572192 0.627155 0.528398 -vn -0.507370 0.604572 0.614002 -vn -0.410199 0.725974 0.551958 -vn -0.730491 0.392193 0.559038 -vn -0.686148 0.237190 0.687674 -vn -0.591052 0.467696 0.657155 -vn -0.658773 0.513840 0.549455 -vn -0.580950 0.486465 0.652516 -vn -0.426649 0.588549 0.686697 -vn -0.350322 0.712088 0.608386 -vn -0.641377 0.360851 0.677023 -vn -0.564074 0.212653 0.797845 -vn -0.491836 0.447737 0.746727 -vn -0.484024 0.466994 0.739982 -vn -0.376873 0.436628 0.816889 -vn -0.333323 0.579333 0.743797 -vn -0.530412 0.338511 0.777184 -vn -0.422620 0.198950 0.884182 -vn -0.401807 0.326090 0.855678 -vn -0.267220 0.196692 0.943327 -vn -0.250557 0.434767 0.864956 -vn -0.371715 0.456130 0.808527 -vn -0.248360 0.454329 0.855495 -vn -0.278390 0.706839 0.650258 -vn -0.230811 0.577624 0.782952 -vn -0.122990 0.583911 0.802423 -vn -0.126743 0.710135 0.692526 -vn -0.260567 0.324015 0.909452 -vn -0.103885 0.205878 0.973022 -vn -0.117801 0.442244 0.889096 -vn -0.118656 0.461623 0.879086 -vn -0.014039 0.597522 0.801721 -vn -0.043764 0.718741 0.693838 -vn -0.112064 0.332377 0.936430 -vn 0.061098 0.226234 0.972137 -vn 0.016297 0.458785 0.888363 -vn 0.012329 0.477767 0.878384 -vn 0.146641 0.483718 0.862819 -vn 0.091922 0.617420 0.781213 -vn 0.037904 0.350871 0.935636 -vn 0.221442 0.256935 0.940703 -vn 0.183691 0.378765 0.907041 -vn 0.139653 0.502152 0.853420 -vn 0.137364 0.767022 0.626698 -vn 0.197119 0.791528 0.578448 -vn 0.245308 0.818384 0.519669 -vn 0.265969 0.832698 0.485641 -vn 0.281381 0.847896 0.449293 -vn 0.300119 0.874966 0.379925 -vn 0.305216 0.889309 0.340465 -vn 0.304483 0.903775 0.300699 -vn 0.293497 0.928159 0.228706 -vn 0.267098 0.950926 0.156041 -vn 0.226447 0.969909 0.089084 -vn 0.200537 0.978027 0.056612 -vn 0.170293 0.984985 0.027863 -vn 0.105899 0.994171 -0.019684 -vn 0.033448 0.997925 -0.054811 -vn -0.040498 0.996307 -0.075411 -vn -0.082186 0.993225 -0.081912 -vn -0.124241 0.988769 -0.082766 -vn -0.203436 0.976226 -0.074557 -vn -0.275338 0.959868 -0.053133 -vn -0.325236 0.945494 0.015259 -vn -0.354930 0.933622 0.048494 -vn -0.366375 0.926969 0.080355 -vn -0.400922 0.906583 0.131565 -vn -0.422010 0.892666 0.158086 -vn -0.431684 0.881405 0.191595 -vn -0.452345 0.856624 0.248085 -vn -0.478347 0.821619 0.309976 -vn -0.497269 0.799921 0.335856 -vn -0.499557 0.776391 0.384198 -vn -0.474075 0.754753 0.453352 -vn -0.455031 0.743797 0.489517 -vn -0.431166 0.734977 0.523301 -vn -0.377270 0.720725 0.581530 -vn -0.316111 0.711844 0.627125 -vn -0.243995 0.707816 0.662862 -vn -0.204016 0.707389 0.676717 -vn -0.162694 0.709586 0.685537 -vn -0.082705 0.716910 0.692190 -vn -0.007202 0.728751 0.684683 -vn 0.033296 0.736656 0.675436 -vn 0.071810 0.746757 0.661184 -vn -0.084292 0.879818 0.467727 -vn -0.050356 0.860195 0.507401 -vn -0.024201 0.871609 0.489578 -vn -0.042756 0.899625 0.434553 -vn -0.001221 0.883602 0.468154 -vn 0.020631 0.895108 0.445326 -vn -0.008972 0.919279 0.393414 -vn 0.038697 0.906919 0.419507 -vn 0.055422 0.918058 0.392499 -vn 0.015687 0.938078 0.345988 -vn 0.067934 0.929136 0.363384 -vn 0.078890 0.939482 0.333323 -vn 0.030366 0.955321 0.293924 -vn 0.085299 0.949522 0.301767 -vn 0.090060 0.958678 0.269845 -vn 0.034425 0.970306 0.239357 -vn 0.090091 0.967223 0.237342 -vn 0.088504 0.974822 0.204566 -vn 0.027741 0.982452 0.184332 -vn 0.082217 0.981597 0.172246 -vn 0.074313 0.987335 0.140019 -vn 0.010620 0.991302 0.131046 -vn 0.061922 0.992065 0.109134 -vn 0.048036 0.995727 0.078738 -vn -0.016358 0.996521 0.081454 -vn 0.029969 0.998260 0.050417 -vn 0.010620 0.999664 0.022919 -vn -0.052126 0.997925 0.037416 -vn -0.012268 0.999908 -0.001556 -vn -0.036378 0.999023 -0.025056 -vn -0.095340 0.995422 0.000732 -vn -0.063387 0.996948 -0.045015 -vn -0.091250 0.993774 -0.063540 -vn -0.144261 0.989135 -0.027161 -vn -0.121311 0.989532 -0.078066 -vn -0.151860 0.984191 -0.091006 -vn -0.197119 0.979308 -0.045320 -vn -0.183813 0.977905 -0.099521 -vn -0.215918 0.970580 -0.106388 -vn -0.251778 0.966308 -0.052980 -vn -0.248482 0.962523 -0.108554 -vn -0.280892 0.953520 -0.109043 -vn -0.306192 0.950652 -0.049837 -vn -0.312845 0.943968 -0.104862 -vn -0.344340 0.933592 -0.098972 -vn -0.358318 0.932890 -0.036042 -vn -0.374493 0.922971 -0.088504 -vn -0.403760 0.911649 -0.076510 -vn -0.406018 0.913755 -0.012085 -vn -0.430921 0.900357 -0.060244 -vn -0.456923 0.888455 -0.042482 -vn -0.447584 0.893979 0.021058 -vn -0.480056 0.876949 -0.020936 -vn -0.501816 0.864956 0.001770 -vn -0.481338 0.874294 0.062136 -vn -0.520035 0.853664 0.027650 -vn -0.536607 0.842036 0.054445 -vn -0.506027 0.855495 0.109653 -vn -0.549242 0.831416 0.083834 -vn -0.560045 0.820582 0.113834 -vn -0.520707 0.838282 0.161657 -vn -0.566576 0.811029 0.145390 -vn -0.571215 0.801416 0.177252 -vn -0.524796 0.823298 0.216163 -vn -0.571398 0.793359 0.209906 -vn -0.569689 0.785241 0.242470 -vn -0.518113 0.811151 0.271218 -vn -0.563524 0.778954 0.274972 -vn -0.555498 0.772729 0.306986 -vn -0.500961 0.802301 0.324534 -vn -0.543229 0.768517 0.337992 -vn -0.529191 0.764336 0.368328 -vn -0.473952 0.797082 0.374157 -vn -0.511307 0.762322 0.396741 -vn -0.491836 0.760399 0.424116 -vn -0.438185 0.795679 0.418165 -vn -0.468978 0.760643 0.448775 -vn -0.444777 0.761040 0.472152 -vn -0.394971 0.798181 0.454848 -vn -0.417859 0.763573 0.492203 -vn -0.389874 0.766289 0.510636 -vn -0.346049 0.804437 0.482803 -vn -0.359966 0.771050 0.525224 -vn -0.329264 0.775903 0.538072 -vn -0.293191 0.814295 0.500931 -vn -0.297464 0.782678 0.546709 -vn -0.265236 0.789483 0.553453 -vn -0.238533 0.827296 0.508591 -vn -0.232795 0.798059 0.555742 -vn -0.200262 0.806574 0.556139 -vn -0.184088 0.842982 0.505448 -vn -0.168432 0.816614 0.552049 -vn -0.136814 0.826472 0.546037 -vn -0.256111 0.936888 0.237953 -vn -0.206946 0.922849 0.324747 -vn -0.191351 0.929655 0.314798 -vn -0.178198 0.936552 0.301798 -vn -0.167974 0.943266 0.286355 -vn -0.161107 0.949553 0.268960 -vn -0.157811 0.955199 0.250313 -vn -0.158269 0.959899 0.231269 -vn -0.162420 0.963591 0.212348 -vn -0.170141 0.966063 0.194281 -vn -0.181127 0.967223 0.177892 -vn -0.194891 0.967009 0.163884 -vn -0.211066 0.965484 0.152562 -vn -0.228828 0.962676 0.144444 -vn -0.247566 0.958678 0.139958 -vn -0.266640 0.953673 0.139195 -vn -0.285195 0.947844 0.142186 -vn -0.302683 0.941374 0.148747 -vn -0.318308 0.934599 0.158696 -vn -0.331431 0.927732 0.171606 -vn -0.341655 0.920988 0.187170 -vn -0.348521 0.914670 0.204596 -vn -0.351817 0.909055 0.223151 -vn -0.351360 0.904324 0.242347 -vn -0.347209 0.900632 0.261238 -vn -0.339488 0.898190 0.279153 -vn -0.328501 0.897031 0.295572 -vn -0.314707 0.897214 0.309702 -vn -0.298593 0.898740 0.320994 -vn -0.280801 0.901578 0.329020 -vn -0.262032 0.905545 0.333537 -vn -0.242988 0.910581 0.334330 -vn -0.224372 0.916410 0.331370 -vn -0.132023 0.860714 0.491623 -vn -0.106815 0.837581 0.535722 -vn -0.077395 0.848445 0.523576 -vn -0.142369 0.907315 0.395581 -vn -0.059938 0.888516 0.454878 -vn -0.156590 0.899960 0.406842 -vn -0.105380 0.868709 0.483932 -vn -0.114292 0.920682 0.373180 -vn -0.021607 0.908597 0.417035 -vn -0.125858 0.913388 0.387097 -vn -0.091464 0.933988 0.345378 -vn 0.008118 0.928159 0.371990 -vn -0.099918 0.926969 0.361553 -vn -0.074740 0.946715 0.313211 -vn 0.028138 0.946501 0.321360 -vn -0.079745 0.940245 0.330973 -vn -0.064852 0.958342 0.278146 -vn 0.037690 0.962920 0.267037 -vn -0.066195 0.952635 0.296731 -vn -0.062075 0.968444 0.241249 -vn 0.036378 0.976714 0.211280 -vn -0.059725 0.963713 0.260048 -vn -0.066591 0.976684 0.203986 -vn 0.024232 0.987396 0.156194 -vn -0.060640 0.973083 0.222297 -vn -0.078188 0.982696 0.167882 -vn 0.001801 0.994598 0.103732 -vn -0.068819 0.980316 0.184881 -vn -0.096438 0.986206 0.134434 -vn -0.030122 0.997955 0.056124 -vn -0.084017 0.985168 0.149480 -vn -0.120640 0.987152 0.104678 -vn -0.070345 0.997406 0.015046 -vn -0.105655 0.987457 0.117222 -vn -0.149846 0.985473 0.079806 -vn -0.117252 0.992920 -0.017823 -vn -0.132908 0.987060 0.089389 -vn -0.182928 0.981231 0.060945 -vn -0.169042 0.984741 -0.041261 -vn -0.164647 0.984039 0.067110 -vn -0.218696 0.974548 0.048677 -vn -0.223823 0.973083 -0.054445 -vn -0.199683 0.978484 0.051271 -vn -0.255654 0.965758 0.043489 -vn -0.279305 0.958495 -0.056734 -vn -0.236763 0.970611 0.042390 -vn -0.292459 0.955168 0.045595 -vn -0.333506 0.941496 -0.048097 -vn -0.274300 0.960753 0.040803 -vn -0.327647 0.943175 0.054903 -vn -0.384350 0.922727 -0.028871 -vn -0.311075 0.949217 0.046632 -vn -0.359966 0.930235 0.071169 -vn -0.429792 0.902921 0.000153 -vn -0.345408 0.936521 0.059633 -vn -0.388012 0.916868 0.093539 -vn -0.468123 0.882839 0.037996 -vn -0.376202 0.923124 0.079348 -vn -0.410871 0.903562 0.121433 -vn -0.497879 0.863247 0.083041 -vn -0.402112 0.909543 0.104892 -vn -0.427564 0.890866 0.153386 -vn -0.517899 0.844905 0.133702 -vn -0.422285 0.896268 0.135441 -vn -0.437483 0.879177 0.188665 -vn -0.527451 0.828516 0.187933 -vn -0.435835 0.883847 0.169683 -vn -0.440230 0.869076 0.225562 -vn -0.526139 0.814722 0.243690 -vn -0.442305 0.872738 0.206580 -vn -0.435743 0.860866 0.262642 -vn -0.513993 0.804010 0.298898 -vn -0.441420 0.863430 0.244118 -vn -0.424116 0.854854 0.298837 -vn -0.491531 0.796838 0.351238 -vn -0.433210 0.856166 0.281533 -vn -0.405896 0.851314 0.332408 -vn -0.459578 0.793481 0.398938 -vn -0.418012 0.851314 0.316996 -vn -0.381695 0.850398 0.362072 -vn -0.419385 0.794031 0.439985 -vn -0.396374 0.849025 0.349284 -vn -0.352489 0.852077 0.386853 -vn -0.372448 0.798517 0.472884 -vn -0.369182 0.849422 0.377026 -vn -0.319346 0.856319 0.405805 -vn -0.320688 0.806696 0.496353 -vn -0.337382 0.852443 0.399335 -vn -0.283670 0.862972 0.418073 -vn -0.265908 0.818323 0.509476 -vn -0.302316 0.857997 0.415235 -vn -0.246681 0.871761 0.423231 -vn -0.210395 0.832911 0.511795 -vn -0.265297 0.865841 0.424116 -vn -0.209876 0.882351 0.421155 -vn -0.156194 0.849940 0.503159 -vn -0.227729 0.875729 0.425672 -vn -0.190985 0.887234 0.419843 -vn -0.174657 0.894375 0.411786 -vn 0.061892 0.835566 0.545854 -vn 0.103763 0.852840 0.511704 -vn 0.137455 0.871761 0.470199 -vn 0.161718 0.891598 0.422895 -vn 0.175573 0.911588 0.371654 -vn 0.178472 0.930967 0.318430 -vn 0.170385 0.948973 0.265267 -vn 0.151555 0.964934 0.214179 -vn 0.122715 0.978240 0.167180 -vn 0.084994 0.988372 0.126041 -vn 0.039827 0.994903 0.092349 -vn -0.011017 0.997650 0.067446 -vn -0.065645 0.996460 0.052187 -vn -0.121921 0.991394 0.047273 -vn -0.177709 0.982635 0.052797 -vn -0.230811 0.970550 0.068606 -vn -0.390851 0.897061 0.206030 -vn -0.299081 0.932707 0.201392 -vn -0.296548 0.929136 0.220740 -vn -0.308664 0.919218 0.244331 -vn -0.325114 0.911405 0.252174 -vn -0.369396 0.914640 0.164190 -vn -0.387707 0.842158 0.374676 -vn -0.368877 0.826197 0.425764 -vn -0.340068 0.812922 0.472762 -vn -0.302316 0.802789 0.513871 -vn -0.257149 0.796228 0.547563 -vn -0.206275 0.793512 0.572497 -vn -0.151646 0.794702 0.587725 -vn -0.095370 0.799768 0.592669 -vn -0.039613 0.808496 0.587115 -vn -0.143040 0.936674 0.319590 -vn -0.061800 0.907254 0.415937 -vn -0.046022 0.912900 0.405530 -vn -0.032807 0.919218 0.392315 -vn -0.022675 0.925993 0.376782 -vn -0.016022 0.932951 0.359569 -vn -0.013092 0.939817 0.341350 -vn -0.014008 0.946379 0.322733 -vn -0.018708 0.952300 0.304544 -vn -0.027039 0.957396 0.287393 -vn -0.038667 0.961486 0.272011 -vn -0.053163 0.964415 0.258919 -vn -0.069918 0.966033 0.248695 -vn -0.088351 0.966308 0.241676 -vn -0.107730 0.965209 0.238136 -vn -0.127323 0.962798 0.238258 -vn -0.146336 0.959166 0.241981 -vn -0.321970 0.881527 0.345286 -vn -0.380688 0.869778 0.313913 -vn -0.301431 0.917783 0.258431 -vn -0.284585 0.927305 0.243080 -vn -0.281472 0.934080 0.219550 -vn -0.277902 0.953856 0.113437 -vn -0.221809 0.963469 0.149876 -vn -0.207160 0.909391 0.360607 -vn -0.198828 0.904294 0.377728 -vn -0.187201 0.900204 0.393139 -vn -0.172704 0.897275 0.406201 -vn -0.155950 0.895657 0.416456 -vn -0.137516 0.895383 0.423475 -vn -0.118137 0.896481 0.426984 -vn -0.098544 0.898892 0.426893 -vn -0.079531 0.902524 0.423139 -vn 0.013459 0.820582 0.571306 -vn 0.003998 0.876949 0.480544 -vn 0.086428 0.842189 0.532151 -vn -0.010376 0.870479 0.492050 -vn 0.040468 0.825770 0.562487 -vn 0.032319 0.888638 0.457442 -vn 0.124882 0.860622 0.493637 -vn 0.020692 0.881588 0.471511 -vn 0.055086 0.901425 0.429395 -vn 0.154393 0.880367 0.448439 -vn 0.046724 0.894070 0.445448 -vn 0.071505 0.914823 0.397382 -vn 0.173772 0.900632 0.398267 -vn 0.066713 0.907407 0.414838 -vn 0.080874 0.928343 0.362774 -vn 0.182318 0.920652 0.345103 -vn 0.079836 0.921140 0.380871 -vn 0.082827 0.941435 0.326762 -vn 0.179662 0.939695 0.290933 -vn 0.085604 0.934690 0.344920 -vn 0.077364 0.953642 0.290780 -vn 0.165960 0.956999 0.237861 -vn 0.083834 0.947600 0.308237 -vn 0.064638 0.964415 0.256294 -vn 0.141697 0.971892 0.187964 -vn 0.074526 0.959288 0.272286 -vn 0.045106 0.973418 0.224494 -vn 0.107822 0.983795 0.143101 -vn 0.058107 0.969359 0.238533 -vn 0.019623 0.980255 0.196661 -vn 0.065615 0.992279 0.105014 -vn 0.035188 0.977447 0.208136 -vn -0.010895 0.984680 0.173894 -vn 0.016724 0.997009 0.075167 -vn 0.006623 0.983184 0.182379 -vn -0.045289 0.986541 0.157018 -vn -0.036927 0.997803 0.054720 -vn -0.026460 0.986389 0.162175 -vn -0.082247 0.985717 0.146733 -vn -0.093387 0.994629 0.044465 -vn -0.062777 0.986938 0.148350 -vn -0.120304 0.982299 0.143406 -vn -0.150426 0.987579 0.044771 -vn -0.101016 0.984771 0.141392 -vn -0.157994 0.976409 0.147160 -vn -0.205847 0.976989 0.055635 -vn -0.139622 0.980010 0.141606 -vn -0.193915 0.968230 0.157842 -vn -0.367077 0.919828 0.138340 -vn -0.177129 0.972839 0.148961 -vn -0.445692 0.840266 0.308634 -vn -0.332926 0.919370 0.209418 -vn -0.369915 0.897885 0.238655 -vn -0.323679 0.916166 0.236274 -vn -0.296152 0.931211 0.212287 -vn -0.373791 0.889798 0.261757 -vn -0.303201 0.925413 0.227180 -vn -0.302530 0.924284 0.232643 -vn -0.308603 0.923124 0.229255 -vn -0.307169 0.922178 0.234931 -vn -0.315043 0.915769 0.249153 -vn -0.303903 0.924039 0.231819 -vn -0.310923 0.926603 0.211371 -vn -0.336894 0.916135 0.217170 -vn -0.308420 0.923276 0.228919 -vn -0.314097 0.947935 0.051973 -vn -0.409345 0.885220 0.220801 -vn -0.316691 0.936521 0.150365 -vn -0.300027 0.881405 0.364788 -vn -0.383038 0.831996 0.401288 -vn -0.333079 0.928007 0.166845 -vn -0.287301 0.870602 0.399335 -vn -0.358776 0.817103 0.451186 -vn -0.297067 0.874691 0.382916 -vn -0.267800 0.861629 0.431104 -vn -0.324900 0.805170 0.496048 -vn -0.280648 0.864589 0.416700 -vn -0.242286 0.854762 0.458937 -vn -0.282693 0.796686 0.534135 -vn -0.257729 0.856533 0.447096 -vn -0.211737 0.850337 0.481704 -vn -0.233802 0.791955 0.563982 -vn -0.229163 0.850795 0.472854 -vn -0.177343 0.848506 0.498581 -vn -0.180120 0.791192 0.584429 -vn -0.196051 0.847591 0.493057 -vn -0.140385 0.849300 0.508866 -vn -0.123661 0.794366 0.594684 -vn -0.159703 0.847072 0.506882 -vn -0.102329 0.852718 0.512192 -vn -0.066622 0.801386 0.594378 -vn -0.121494 0.849208 0.513840 -vn -0.064638 0.858638 0.508469 -vn -0.011200 0.812006 0.583514 -vn -0.082888 0.853969 0.513627 -vn -0.045381 0.861141 0.506272 -vn -0.028718 0.866817 0.497757 -usemtl Eye-White -s 1 -f 7589//5144 7588//5145 7596//5146 -f 7590//5147 7589//5144 7597//5148 -f 7591//5149 7590//5147 7597//5148 -f 7587//5150 7586//5151 7593//5152 -f 7588//5145 7587//5150 7595//5153 -f 7596//5146 7595//5153 7602//5154 -f 7597//5148 7596//5146 7603//5155 -f 7598//5156 7597//5148 7604//5157 -f 7594//5158 7593//5152 7601//5159 -f 7595//5153 7594//5158 7602//5154 -f 7602//5154 7601//5159 7608//5160 -f 7603//5155 7602//5154 7609//5161 -f 7604//5157 7603//5155 7611//5162 -f 7605//5163 7604//5157 7611//5162 -f 7601//5159 7600//5164 7608//5160 -f 7608//5160 7607//5165 7615//5166 -f 7609//5161 7608//5160 7616//5167 -f 7610//5168 7609//5161 7617//5169 -f 7611//5162 7610//5168 7618//5170 -f 7611//5162 7618//5170 7619//5171 -f 7619//5171 7618//5170 7625//5172 -f 7615//5166 7614//5173 7621//5174 -f 7616//5167 7615//5166 7623//5175 -f 7617//5169 7616//5167 7623//5175 -f 7618//5170 7617//5169 7625//5172 -f 7624//5176 7623//5175 7630//5177 -f 7625//5172 7624//5176 7632//5178 -f 7625//5172 7632//5178 7633//5179 -f 7622//5180 7621//5174 7629//5181 -f 7623//5175 7622//5180 7630//5177 -f 7630//5177 7629//5181 7636//5182 -f 7631//5183 7630//5177 7638//5184 -f 7632//5178 7631//5183 7638//5184 -f 7633//5179 7632//5178 7639//5185 -f 7629//5181 7628//5186 7636//5182 -f 7636//5182 7635//5187 7643//5188 -f 7637//5189 7636//5182 7643//5188 -f 7638//5184 7637//5189 7645//5190 -f 7639//5185 7638//5184 7645//5190 -f 7640//5191 7639//5185 7646//5192 -f 7647//5193 7646//5192 7653//5194 -f 7643//5188 7642//5195 7649//5196 -f 7644//5197 7643//5188 7651//5198 -f 7645//5190 7644//5197 7652//5199 -f 7646//5192 7645//5190 7653//5194 -f 7652//5199 7651//5198 7658//5200 -f 7653//5194 7652//5199 7660//5201 -f 7653//5194 7660//5201 7661//5202 -f 7650//5203 7649//5196 7656//5204 -f 7651//5198 7650//5203 7658//5200 -f 7658//5200 7657//5205 7664//5206 -f 7659//5207 7658//5200 7666//5208 -f 7660//5201 7659//5207 7667//5209 -f 7660//5201 7667//5209 7668//5210 -f 7657//5205 7656//5204 7663//5211 -f 7664//5206 7663//5211 7671//5212 -f 7665//5213 7664//5206 7672//5214 -f 7666//5208 7665//5213 7673//5215 -f 7667//5209 7666//5208 7673//5215 -f 7667//5209 7674//5216 7675//5217 -f 7675//5217 7674//5216 7681//5218 -f 7671//5212 7670//5219 7677//5220 -f 7672//5214 7671//5212 7679//5221 -f 7673//5215 7672//5214 7680//5222 -f 7674//5216 7673//5215 7681//5218 -f 7681//5218 7680//5222 7688//5223 -f 7681//5218 7688//5223 7689//5224 -f 7678//5225 7677//5220 7685//5226 -f 7679//5221 7678//5225 7686//5227 -f 7680//5222 7679//5221 7687//5228 -f 7686//5227 7685//5226 7692//5229 -f 7687//5228 7686//5227 7693//5230 -f 7688//5223 7687//5228 7695//5231 -f 7688//5223 7695//5231 7696//5232 -f 7685//5226 7684//5233 7691//5234 -f 7692//5229 7691//5234 7699//5235 -f 7693//5230 7692//5229 7700//5236 -f 7694//5237 7693//5230 7701//5238 -f 7695//5231 7694//5237 7702//5239 -f 7696//5232 7695//5231 7702//5239 -f 7703//5240 7702//5239 7709//5241 -f 7699//5235 7698//5242 7706//5243 -f 7700//5236 7699//5235 7707//5244 -f 7701//5238 7700//5236 7707//5244 -f 7702//5239 7701//5238 7709//5241 -f 7709//5241 7708//5245 7716//5246 -f 7709//5241 7716//5246 7717//5247 -f 7706//5243 7705//5248 7712//5249 -f 7707//5244 7706//5243 7714//5250 -f 7708//5245 7707//5244 7715//5251 -f 7714//5250 7713//5252 7721//5253 -f 7715//5251 7714//5250 7721//5253 -f 7716//5246 7715//5251 7723//5254 -f 7717//5247 7716//5246 7723//5254 -f 7713//5252 7712//5249 7720//5255 -f 7720//5255 7719//5256 7727//5257 -f 7721//5253 7720//5255 7727//5257 -f 7722//5258 7721//5253 7729//5259 -f 7723//5254 7722//5258 7730//5260 -f 7723//5254 7730//5260 7731//5261 -f 7731//5261 7730//5260 7737//5262 -f 7727//5257 7726//5263 7734//5264 -f 7728//5265 7727//5257 7735//5266 -f 7729//5259 7728//5265 7736//5267 -f 7730//5260 7729//5259 7736//5267 -f 7737//5262 7736//5267 7745//5268 -f 7738//5269 7737//5262 7745//5268 -f 7734//5264 7733//5270 7741//5271 -f 7735//5266 7734//5264 7742//5272 -f 7736//5267 7735//5266 7743//5273 -f 7744//5274 7743//5273 7751//5275 -f 7745//5268 7744//5274 7752//5276 -f 7745//5268 7752//5276 7753//5277 -f 7742//5272 7741//5271 7748//5278 -f 7743//5273 7742//5272 7750//5279 -f 7749//5280 7748//5278 7755//5281 -f 7750//5279 7749//5280 7757//5282 -f 7751//5275 7750//5279 7757//5282 -f 7752//5276 7751//5275 7759//5283 -f 7753//5277 7752//5276 7759//5283 -f 7759//5283 7766//5284 7767//5285 -f 7756//5286 7755//5281 7762//5287 -f 7757//5282 7756//5286 7764//5288 -f 7758//5289 7757//5282 7765//5290 -f 7759//5283 7758//5289 7766//5284 -f 7766//5284 7765//5290 7773//5291 -f 7766//5284 7773//5291 7774//5292 -f 7763//5293 7762//5287 7769//5294 -f 7764//5288 7763//5293 7771//5295 -f 7765//5290 7764//5288 7772//5296 -f 7772//5296 7771//5295 7778//5297 -f 7773//5291 7772//5296 7780//5298 -f 7774//5292 7773//5291 7780//5298 -f 7770//5299 7769//5294 7776//5300 -f 7771//5295 7770//5299 7777//5301 -f 7777//5301 7776//5300 7783//5302 -f 7778//5297 7777//5301 7785//5303 -f 7779//5304 7778//5297 7785//5303 -f 7780//5298 7779//5304 7786//5305 -f 7781//5306 7780//5298 7787//5307 -f 7787//5307 7794//5308 7795//5309 -f 7784//5310 7783//5302 7790//5311 -f 7785//5303 7784//5310 7792//5312 -f 7786//5305 7785//5303 7793//5313 -f 7787//5307 7786//5305 7793//5313 -f 7794//5308 7793//5313 7801//5314 -f 7794//5308 7801//5314 7802//5315 -f 7791//5316 7790//5311 7797//5317 -f 7792//5312 7791//5316 7799//5318 -f 7793//5313 7792//5312 7800//5319 -f 7800//5319 7799//5318 7806//5320 -f 7801//5314 7800//5319 7808//5321 -f 7802//5315 7801//5314 7808//5321 -f 7798//5322 7797//5317 7804//5323 -f 7799//5318 7798//5322 7806//5320 -f 7806//5320 7805//5324 7587//5150 -f 7807//5325 7806//5320 7588//5145 -f 7808//5321 7807//5325 7589//5144 -f 7808//5321 7590//5147 7591//5149 -f 7805//5324 7804//5323 7586//5151 -f 7588//5145 7595//5153 7596//5146 -f 7589//5144 7596//5146 7597//5148 -f 7815//5326 7591//5149 7597//5148 -f 7598//5156 7815//5326 7597//5148 -f 7594//5158 7587//5150 7593//5152 -f 7587//5150 7594//5158 7595//5153 -f 7603//5155 7596//5146 7602//5154 -f 7604//5157 7597//5148 7603//5155 -f 7818//5327 7598//5156 7604//5157 -f 7605//5163 7818//5327 7604//5157 -f 7593//5152 7600//5164 7601//5159 -f 7594//5158 7601//5159 7602//5154 -f 7609//5161 7602//5154 7608//5160 -f 7610//5168 7603//5155 7609//5161 -f 7603//5155 7610//5168 7611//5162 -f 7822//5328 7605//5163 7611//5162 -f 7612//5329 7822//5328 7611//5162 -f 7600//5164 7607//5165 7608//5160 -f 7607//5165 7614//5173 7615//5166 -f 7608//5160 7615//5166 7616//5167 -f 7609//5161 7616//5167 7617//5169 -f 7610//5168 7617//5169 7618//5170 -f 7612//5329 7611//5162 7824//5330 -f 7611//5162 7619//5171 7824//5330 -f 7827//5331 7619//5171 7625//5172 -f 7626//5332 7827//5331 7625//5172 -f 7622//5180 7615//5166 7621//5174 -f 7615//5166 7622//5180 7623//5175 -f 7624//5176 7617//5169 7623//5175 -f 7617//5169 7624//5176 7625//5172 -f 7631//5183 7624//5176 7630//5177 -f 7624//5176 7631//5183 7632//5178 -f 7626//5332 7625//5172 7830//5333 -f 7625//5172 7633//5179 7830//5333 -f 7621//5174 7628//5186 7629//5181 -f 7622//5180 7629//5181 7630//5177 -f 7637//5189 7630//5177 7636//5182 -f 7630//5177 7637//5189 7638//5184 -f 7639//5185 7632//5178 7638//5184 -f 7834//5334 7633//5179 7639//5185 -f 7640//5191 7834//5334 7639//5185 -f 7628//5186 7635//5187 7636//5182 -f 7635//5187 7642//5195 7643//5188 -f 7644//5197 7637//5189 7643//5188 -f 7637//5189 7644//5197 7645//5190 -f 7646//5192 7639//5185 7645//5190 -f 7836//5335 7640//5191 7646//5192 -f 7647//5193 7836//5335 7646//5192 -f 7839//5336 7647//5193 7653//5194 -f 7654//5337 7839//5336 7653//5194 -f 7650//5203 7643//5188 7649//5196 -f 7643//5188 7650//5203 7651//5198 -f 7644//5197 7651//5198 7652//5199 -f 7645//5190 7652//5199 7653//5194 -f 7659//5207 7652//5199 7658//5200 -f 7652//5199 7659//5207 7660//5201 -f 7654//5337 7653//5194 7842//5338 -f 7653//5194 7661//5202 7842//5338 -f 7657//5205 7650//5203 7656//5204 -f 7650//5203 7657//5205 7658//5200 -f 7665//5213 7658//5200 7664//5206 -f 7658//5200 7665//5213 7666//5208 -f 7659//5207 7666//5208 7667//5209 -f 7661//5202 7660//5201 7846//5339 -f 7660//5201 7668//5210 7846//5339 -f 7664//5206 7657//5205 7663//5211 -f 7663//5211 7670//5219 7671//5212 -f 7664//5206 7671//5212 7672//5214 -f 7665//5213 7672//5214 7673//5215 -f 7674//5216 7667//5209 7673//5215 -f 7668//5210 7667//5209 7848//5340 -f 7667//5209 7675//5217 7848//5340 -f 7851//5341 7675//5217 7681//5218 -f 7682//5342 7851//5341 7681//5218 -f 7678//5225 7671//5212 7677//5220 -f 7671//5212 7678//5225 7679//5221 -f 7672//5214 7679//5221 7680//5222 -f 7673//5215 7680//5222 7681//5218 -f 7680//5222 7687//5228 7688//5223 -f 7682//5342 7681//5218 7854//5343 -f 7681//5218 7689//5224 7854//5343 -f 7677//5220 7684//5233 7685//5226 -f 7678//5225 7685//5226 7686//5227 -f 7679//5221 7686//5227 7687//5228 -f 7693//5230 7686//5227 7692//5229 -f 7694//5237 7687//5228 7693//5230 -f 7687//5228 7694//5237 7695//5231 -f 7689//5224 7688//5223 7857//5344 -f 7688//5223 7696//5232 7857//5344 -f 7692//5229 7685//5226 7691//5234 -f 7691//5234 7698//5242 7699//5235 -f 7692//5229 7699//5235 7700//5236 -f 7693//5230 7700//5236 7701//5238 -f 7694//5237 7701//5238 7702//5239 -f 7860//5345 7696//5232 7702//5239 -f 7703//5240 7860//5345 7702//5239 -f 7863//5346 7703//5240 7709//5241 -f 7710//5347 7863//5346 7709//5241 -f 7698//5242 7705//5248 7706//5243 -f 7699//5235 7706//5243 7707//5244 -f 7708//5245 7701//5238 7707//5244 -f 7701//5238 7708//5245 7709//5241 -f 7708//5245 7715//5251 7716//5246 -f 7710//5347 7709//5241 7866//5348 -f 7709//5241 7717//5247 7866//5348 -f 7713//5252 7706//5243 7712//5249 -f 7706//5243 7713//5252 7714//5250 -f 7707//5244 7714//5250 7715//5251 -f 7713//5252 7720//5255 7721//5253 -f 7722//5258 7715//5251 7721//5253 -f 7715//5251 7722//5258 7723//5254 -f 7869//5349 7717//5247 7723//5254 -f 7724//5350 7869//5349 7723//5254 -f 7712//5249 7719//5256 7720//5255 -f 7719//5256 7726//5263 7727//5257 -f 7728//5265 7721//5253 7727//5257 -f 7721//5253 7728//5265 7729//5259 -f 7722//5258 7729//5259 7730//5260 -f 7724//5350 7723//5254 7872//5351 -f 7723//5254 7731//5261 7872//5351 -f 7876//5352 7731//5261 7737//5262 -f 7738//5269 7876//5352 7737//5262 -f 7726//5263 7733//5270 7734//5264 -f 7727//5257 7734//5264 7735//5266 -f 7728//5265 7735//5266 7736//5267 -f 7737//5262 7730//5260 7736//5267 -f 7736//5267 7744//5274 7745//5268 -f 7879//5353 7738//5269 7745//5268 -f 7746//5354 7879//5353 7745//5268 -f 7742//5272 7734//5264 7741//5271 -f 7743//5273 7735//5266 7742//5272 -f 7744//5274 7736//5267 7743//5273 -f 7743//5273 7750//5279 7751//5275 -f 7744//5274 7751//5275 7752//5276 -f 7746//5354 7745//5268 7882//5355 -f 7745//5268 7753//5277 7882//5355 -f 7749//5280 7742//5272 7748//5278 -f 7742//5272 7749//5280 7750//5279 -f 7756//5286 7749//5280 7755//5281 -f 7749//5280 7756//5286 7757//5282 -f 7758//5289 7751//5275 7757//5282 -f 7751//5275 7758//5289 7759//5283 -f 7886//5356 7753//5277 7759//5283 -f 7760//5357 7886//5356 7759//5283 -f 7760//5357 7759//5283 7888//5358 -f 7759//5283 7767//5285 7888//5358 -f 7763//5293 7756//5286 7762//5287 -f 7756//5286 7763//5293 7764//5288 -f 7757//5282 7764//5288 7765//5290 -f 7758//5289 7765//5290 7766//5284 -f 7765//5290 7772//5296 7773//5291 -f 7767//5285 7766//5284 7891//5359 -f 7766//5284 7774//5292 7891//5359 -f 7770//5299 7763//5293 7769//5294 -f 7763//5293 7770//5299 7771//5295 -f 7764//5288 7771//5295 7772//5296 -f 7779//5304 7772//5296 7778//5297 -f 7772//5296 7779//5304 7780//5298 -f 7894//5360 7774//5292 7780//5298 -f 7781//5306 7894//5360 7780//5298 -f 7777//5301 7770//5299 7776//5300 -f 7778//5297 7771//5295 7777//5301 -f 7784//5310 7777//5301 7783//5302 -f 7777//5301 7784//5310 7785//5303 -f 7786//5305 7779//5304 7785//5303 -f 7787//5307 7780//5298 7786//5305 -f 7898//5361 7781//5306 7787//5307 -f 7788//5362 7898//5361 7787//5307 -f 7788//5362 7787//5307 7900//5363 -f 7787//5307 7795//5309 7900//5363 -f 7791//5316 7784//5310 7790//5311 -f 7784//5310 7791//5316 7792//5312 -f 7785//5303 7792//5312 7793//5313 -f 7794//5308 7787//5307 7793//5313 -f 7793//5313 7800//5319 7801//5314 -f 7795//5309 7794//5308 7903//5364 -f 7794//5308 7802//5315 7903//5364 -f 7798//5322 7791//5316 7797//5317 -f 7791//5316 7798//5322 7799//5318 -f 7792//5312 7799//5318 7800//5319 -f 7807//5325 7800//5319 7806//5320 -f 7800//5319 7807//5325 7808//5321 -f 7906//5365 7802//5315 7808//5321 -f 7809//5366 7906//5365 7808//5321 -f 7805//5324 7798//5322 7804//5323 -f 7798//5322 7805//5324 7806//5320 -f 7588//5145 7806//5320 7587//5150 -f 7589//5144 7807//5325 7588//5145 -f 7590//5147 7808//5321 7589//5144 -f 7809//5366 7808//5321 7940//5367 -f 7808//5321 7591//5149 7940//5367 -f 7587//5150 7805//5324 7586//5151 -usemtl Material -f 7554//5368 7428//5369 7363//5370 -f 7555//5371 7431//5372 7365//5373 -f 7556//5374 7435//5375 7367//5376 -f 7557//5377 7437//5378 7369//5379 -f 7558//5380 7440//5381 7371//5382 -f 7559//5383 7443//5384 7373//5385 -f 7560//5386 7447//5387 7375//5388 -f 7561//5389 7449//5390 7377//5391 -f 7562//5392 7452//5393 7379//5394 -f 7563//5395 7455//5396 7381//5397 -f 7564//5398 7459//5399 7383//5400 -f 7565//5401 7461//5402 7385//5403 -f 7566//5404 7464//5405 7387//5406 -f 7567//5407 7467//5408 7389//5409 -f 7568//5410 7470//5411 7391//5412 -f 7569//5413 7473//5414 7393//5415 -f 7570//5416 7476//5417 7395//5418 -f 7571//5419 7479//5420 7397//5421 -f 7572//5422 7482//5423 7399//5424 -f 7573//5425 7485//5426 7401//5427 -f 7574//5428 7489//5429 7403//5430 -f 7575//5431 7492//5432 7406//5433 -f 7576//5434 7495//5435 7408//5436 -f 7577//5437 7499//5438 7410//5439 -f 7578//5440 7501//5441 7412//5442 -f 7579//5443 7504//5444 7414//5445 -f 7580//5446 7507//5447 7416//5448 -f 7581//5449 7511//5450 7418//5451 -f 7582//5452 7513//5453 7420//5454 -f 7583//5455 7516//5456 7422//5457 -f 7584//5458 7519//5459 7424//5460 -f 7405//5461 7521//5462 7522//5463 -f 7405//5461 7522//5463 7523//5464 -f 7405//5461 7523//5464 7524//5465 -f 7405//5461 7524//5465 7525//5466 -f 7405//5461 7525//5466 7526//5467 -f 7405//5461 7526//5467 7527//5468 -f 7405//5461 7527//5468 7528//5469 -f 7405//5461 7528//5469 7529//5470 -f 7405//5461 7529//5470 7530//5471 -f 7405//5461 7530//5471 7531//5472 -f 7405//5461 7531//5472 7532//5473 -f 7405//5461 7532//5473 7533//5474 -f 7405//5461 7533//5474 7534//5475 -f 7405//5461 7534//5475 7535//5476 -f 7405//5461 7535//5476 7536//5477 -f 7405//5461 7536//5477 7537//5478 -f 7405//5461 7537//5478 7538//5479 -f 7405//5461 7538//5479 7539//5480 -f 7405//5461 7539//5480 7540//5481 -f 7405//5461 7540//5481 7541//5482 -f 7405//5461 7541//5482 7488//5483 -f 7405//5461 7488//5483 7542//5484 -f 7405//5461 7542//5484 7543//5485 -f 7405//5461 7543//5485 7544//5486 -f 7405//5461 7544//5486 7545//5487 -f 7405//5461 7545//5487 7546//5488 -f 7405//5461 7546//5488 7547//5489 -f 7405//5461 7547//5489 7548//5490 -f 7405//5461 7548//5490 7549//5491 -f 7405//5461 7549//5491 7550//5492 -f 7405//5461 7550//5492 7551//5493 -f 7405//5461 7551//5493 7521//5462 -f 7585//5494 7553//5495 7361//5496 -f 7429//5497 7554//5368 7427//5498 -f 7362//5499 7426//5500 7429//5497 -f 7426//5500 7361//5496 7554//5368 -f 7432//5501 7555//5371 7430//5502 -f 7364//5503 7427//5498 7432//5501 -f 7427//5498 7363//5370 7555//5371 -f 7434//5504 7556//5374 7433//5505 -f 7366//5506 7430//5502 7434//5504 -f 7430//5502 7365//5373 7556//5374 -f 7438//5507 7557//5377 7436//5508 -f 7368//5509 7433//5505 7438//5507 -f 7433//5505 7367//5376 7557//5377 -f 7441//5510 7558//5380 7439//5511 -f 7370//5512 7436//5508 7441//5510 -f 7436//5508 7369//5379 7558//5380 -f 7444//5513 7559//5383 7442//5514 -f 7372//5515 7439//5511 7444//5513 -f 7439//5511 7371//5382 7559//5383 -f 7446//5516 7560//5386 7445//5517 -f 7374//5518 7442//5514 7446//5516 -f 7442//5514 7373//5385 7560//5386 -f 7450//5519 7561//5389 7448//5520 -f 7376//5521 7445//5517 7450//5519 -f 7445//5517 7375//5388 7561//5389 -f 7453//5522 7562//5392 7451//5523 -f 7378//5524 7448//5520 7453//5522 -f 7448//5520 7377//5391 7562//5392 -f 7456//5525 7563//5395 7454//5526 -f 7380//5527 7451//5523 7456//5525 -f 7451//5523 7379//5394 7563//5395 -f 7458//5528 7564//5398 7457//5529 -f 7382//5530 7454//5526 7458//5528 -f 7454//5526 7381//5397 7564//5398 -f 7462//5531 7565//5401 7460//5532 -f 7384//5533 7457//5529 7462//5531 -f 7457//5529 7383//5400 7565//5401 -f 7465//5534 7566//5404 7463//5535 -f 7386//5536 7460//5532 7465//5534 -f 7460//5532 7385//5403 7566//5404 -f 7468//5537 7567//5407 7466//5538 -f 7388//5539 7463//5535 7468//5537 -f 7463//5535 7387//5406 7567//5407 -f 7471//5540 7568//5410 7469//5541 -f 7390//5542 7466//5538 7471//5540 -f 7466//5538 7389//5409 7568//5410 -f 7474//5543 7569//5413 7472//5544 -f 7392//5545 7469//5541 7474//5543 -f 7469//5541 7391//5412 7569//5413 -f 7477//5546 7570//5416 7475//5547 -f 7394//5548 7472//5544 7477//5546 -f 7472//5544 7393//5415 7570//5416 -f 7480//5549 7571//5419 7478//5550 -f 7396//5551 7475//5547 7480//5549 -f 7475//5547 7395//5418 7571//5419 -f 7483//5552 7572//5422 7481//5553 -f 7398//5554 7478//5550 7483//5552 -f 7478//5550 7397//5421 7572//5422 -f 7486//5555 7573//5425 7484//5556 -f 7400//5557 7481//5553 7486//5555 -f 7481//5553 7399//5424 7573//5425 -f 7490//5558 7574//5428 7487//5559 -f 7402//5560 7484//5556 7490//5558 -f 7484//5556 7401//5427 7574//5428 -f 7493//5561 7575//5431 7491//5562 -f 7404//5563 7487//5559 7493//5561 -f 7487//5559 7403//5430 7575//5431 -f 7496//5564 7576//5434 7494//5565 -f 7407//5566 7491//5562 7496//5564 -f 7491//5562 7406//5433 7576//5434 -f 7498//5567 7577//5437 7497//5568 -f 7409//5569 7494//5565 7498//5567 -f 7494//5565 7408//5436 7577//5437 -f 7502//5570 7578//5440 7500//5571 -f 7411//5572 7497//5568 7502//5570 -f 7497//5568 7410//5439 7578//5440 -f 7505//5573 7579//5443 7503//5574 -f 7413//5575 7500//5571 7505//5573 -f 7500//5571 7412//5442 7579//5443 -f 7508//5576 7580//5446 7506//5577 -f 7415//5578 7503//5574 7508//5576 -f 7503//5574 7414//5445 7580//5446 -f 7510//5579 7581//5449 7509//5580 -f 7417//5581 7506//5577 7510//5579 -f 7506//5577 7416//5448 7581//5449 -f 7514//5582 7582//5452 7512//5583 -f 7419//5584 7509//5580 7514//5582 -f 7509//5580 7418//5451 7582//5452 -f 7517//5585 7583//5455 7515//5586 -f 7421//5587 7512//5583 7517//5585 -f 7512//5583 7420//5454 7583//5455 -f 7520//5588 7584//5458 7518//5589 -f 7423//5590 7515//5586 7520//5588 -f 7515//5586 7422//5457 7584//5458 -f 7522//5463 7429//5497 7364//5503 -f 7522//5463 7521//5462 7429//5497 -f 7521//5462 7362//5499 7429//5497 -f 7523//5464 7432//5501 7366//5506 -f 7523//5464 7522//5463 7432//5501 -f 7522//5463 7364//5503 7432//5501 -f 7524//5465 7434//5504 7368//5509 -f 7524//5465 7523//5464 7434//5504 -f 7523//5464 7366//5506 7434//5504 -f 7525//5466 7438//5507 7370//5512 -f 7525//5466 7524//5465 7438//5507 -f 7524//5465 7368//5509 7438//5507 -f 7526//5467 7441//5510 7372//5515 -f 7526//5467 7525//5466 7441//5510 -f 7525//5466 7370//5512 7441//5510 -f 7527//5468 7444//5513 7374//5518 -f 7527//5468 7526//5467 7444//5513 -f 7526//5467 7372//5515 7444//5513 -f 7528//5469 7446//5516 7376//5521 -f 7528//5469 7527//5468 7446//5516 -f 7527//5468 7374//5518 7446//5516 -f 7529//5470 7450//5519 7378//5524 -f 7529//5470 7528//5469 7450//5519 -f 7528//5469 7376//5521 7450//5519 -f 7530//5471 7453//5522 7380//5527 -f 7530//5471 7529//5470 7453//5522 -f 7529//5470 7378//5524 7453//5522 -f 7531//5472 7456//5525 7382//5530 -f 7531//5472 7530//5471 7456//5525 -f 7530//5471 7380//5527 7456//5525 -f 7532//5473 7458//5528 7384//5533 -f 7532//5473 7531//5472 7458//5528 -f 7531//5472 7382//5530 7458//5528 -f 7533//5474 7462//5531 7386//5536 -f 7533//5474 7532//5473 7462//5531 -f 7532//5473 7384//5533 7462//5531 -f 7534//5475 7465//5534 7388//5539 -f 7534//5475 7533//5474 7465//5534 -f 7533//5474 7386//5536 7465//5534 -f 7535//5476 7468//5537 7390//5542 -f 7535//5476 7534//5475 7468//5537 -f 7534//5475 7388//5539 7468//5537 -f 7536//5477 7471//5540 7392//5545 -f 7536//5477 7535//5476 7471//5540 -f 7535//5476 7390//5542 7471//5540 -f 7537//5478 7474//5543 7394//5548 -f 7537//5478 7536//5477 7474//5543 -f 7536//5477 7392//5545 7474//5543 -f 7538//5479 7477//5546 7396//5551 -f 7538//5479 7537//5478 7477//5546 -f 7537//5478 7394//5548 7477//5546 -f 7539//5480 7480//5549 7398//5554 -f 7539//5480 7538//5479 7480//5549 -f 7538//5479 7396//5551 7480//5549 -f 7540//5481 7483//5552 7400//5557 -f 7540//5481 7539//5480 7483//5552 -f 7539//5480 7398//5554 7483//5552 -f 7541//5482 7486//5555 7402//5560 -f 7541//5482 7540//5481 7486//5555 -f 7540//5481 7400//5557 7486//5555 -f 7488//5483 7490//5558 7404//5563 -f 7488//5483 7541//5482 7490//5558 -f 7541//5482 7402//5560 7490//5558 -f 7542//5484 7493//5561 7407//5566 -f 7542//5484 7488//5483 7493//5561 -f 7488//5483 7404//5563 7493//5561 -f 7543//5485 7496//5564 7409//5569 -f 7543//5485 7542//5484 7496//5564 -f 7542//5484 7407//5566 7496//5564 -f 7544//5486 7498//5567 7411//5572 -f 7544//5486 7543//5485 7498//5567 -f 7543//5485 7409//5569 7498//5567 -f 7545//5487 7502//5570 7413//5575 -f 7545//5487 7544//5486 7502//5570 -f 7544//5486 7411//5572 7502//5570 -f 7546//5488 7505//5573 7415//5578 -f 7546//5488 7545//5487 7505//5573 -f 7545//5487 7413//5575 7505//5573 -f 7547//5489 7508//5576 7417//5581 -f 7547//5489 7546//5488 7508//5576 -f 7546//5488 7415//5578 7508//5576 -f 7548//5490 7510//5579 7419//5584 -f 7548//5490 7547//5489 7510//5579 -f 7547//5489 7417//5581 7510//5579 -f 7549//5491 7514//5582 7421//5587 -f 7549//5491 7548//5490 7514//5582 -f 7548//5490 7419//5584 7514//5582 -f 7550//5492 7517//5585 7423//5590 -f 7550//5492 7549//5491 7517//5585 -f 7549//5491 7421//5587 7517//5585 -f 7551//5493 7520//5588 7425//5591 -f 7551//5493 7550//5492 7520//5588 -f 7550//5492 7423//5590 7520//5588 -f 7521//5462 7552//5592 7362//5499 -f 7521//5462 7551//5493 7552//5592 -f 7551//5493 7425//5591 7552//5592 -f 7552//5592 7585//5494 7426//5500 -f 7425//5591 7518//5589 7552//5592 -f 7518//5589 7424//5460 7585//5494 -f 7427//5498 7554//5368 7363//5370 -f 7430//5502 7555//5371 7365//5373 -f 7433//5505 7556//5374 7367//5376 -f 7436//5508 7557//5377 7369//5379 -f 7439//5511 7558//5380 7371//5382 -f 7442//5514 7559//5383 7373//5385 -f 7445//5517 7560//5386 7375//5388 -f 7448//5520 7561//5389 7377//5391 -f 7451//5523 7562//5392 7379//5394 -f 7454//5526 7563//5395 7381//5397 -f 7457//5529 7564//5398 7383//5400 -f 7460//5532 7565//5401 7385//5403 -f 7463//5535 7566//5404 7387//5406 -f 7466//5538 7567//5407 7389//5409 -f 7469//5541 7568//5410 7391//5412 -f 7472//5544 7569//5413 7393//5415 -f 7475//5547 7570//5416 7395//5418 -f 7478//5550 7571//5419 7397//5421 -f 7481//5553 7572//5422 7399//5424 -f 7484//5556 7573//5425 7401//5427 -f 7487//5559 7574//5428 7403//5430 -f 7491//5562 7575//5431 7406//5433 -f 7494//5565 7576//5434 7408//5436 -f 7497//5568 7577//5437 7410//5439 -f 7500//5571 7578//5440 7412//5442 -f 7503//5574 7579//5443 7414//5445 -f 7506//5577 7580//5446 7416//5448 -f 7509//5580 7581//5449 7418//5451 -f 7512//5583 7582//5452 7420//5454 -f 7515//5586 7583//5455 7422//5457 -f 7518//5589 7584//5458 7424//5460 -f 7426//5500 7585//5494 7361//5496 -f 7364//5503 7429//5497 7427//5498 -f 7426//5500 7554//5368 7429//5497 -f 7361//5496 7428//5369 7554//5368 -f 7366//5506 7432//5501 7430//5502 -f 7427//5498 7555//5371 7432//5501 -f 7363//5370 7431//5372 7555//5371 -f 7368//5509 7434//5504 7433//5505 -f 7430//5502 7556//5374 7434//5504 -f 7365//5373 7435//5375 7556//5374 -f 7370//5512 7438//5507 7436//5508 -f 7433//5505 7557//5377 7438//5507 -f 7367//5376 7437//5378 7557//5377 -f 7372//5515 7441//5510 7439//5511 -f 7436//5508 7558//5380 7441//5510 -f 7369//5379 7440//5381 7558//5380 -f 7374//5518 7444//5513 7442//5514 -f 7439//5511 7559//5383 7444//5513 -f 7371//5382 7443//5384 7559//5383 -f 7376//5521 7446//5516 7445//5517 -f 7442//5514 7560//5386 7446//5516 -f 7373//5385 7447//5387 7560//5386 -f 7378//5524 7450//5519 7448//5520 -f 7445//5517 7561//5389 7450//5519 -f 7375//5388 7449//5390 7561//5389 -f 7380//5527 7453//5522 7451//5523 -f 7448//5520 7562//5392 7453//5522 -f 7377//5391 7452//5393 7562//5392 -f 7382//5530 7456//5525 7454//5526 -f 7451//5523 7563//5395 7456//5525 -f 7379//5394 7455//5396 7563//5395 -f 7384//5533 7458//5528 7457//5529 -f 7454//5526 7564//5398 7458//5528 -f 7381//5397 7459//5399 7564//5398 -f 7386//5536 7462//5531 7460//5532 -f 7457//5529 7565//5401 7462//5531 -f 7383//5400 7461//5402 7565//5401 -f 7388//5539 7465//5534 7463//5535 -f 7460//5532 7566//5404 7465//5534 -f 7385//5403 7464//5405 7566//5404 -f 7390//5542 7468//5537 7466//5538 -f 7463//5535 7567//5407 7468//5537 -f 7387//5406 7467//5408 7567//5407 -f 7392//5545 7471//5540 7469//5541 -f 7466//5538 7568//5410 7471//5540 -f 7389//5409 7470//5411 7568//5410 -f 7394//5548 7474//5543 7472//5544 -f 7469//5541 7569//5413 7474//5543 -f 7391//5412 7473//5414 7569//5413 -f 7396//5551 7477//5546 7475//5547 -f 7472//5544 7570//5416 7477//5546 -f 7393//5415 7476//5417 7570//5416 -f 7398//5554 7480//5549 7478//5550 -f 7475//5547 7571//5419 7480//5549 -f 7395//5418 7479//5420 7571//5419 -f 7400//5557 7483//5552 7481//5553 -f 7478//5550 7572//5422 7483//5552 -f 7397//5421 7482//5423 7572//5422 -f 7402//5560 7486//5555 7484//5556 -f 7481//5553 7573//5425 7486//5555 -f 7399//5424 7485//5426 7573//5425 -f 7404//5563 7490//5558 7487//5559 -f 7484//5556 7574//5428 7490//5558 -f 7401//5427 7489//5429 7574//5428 -f 7407//5566 7493//5561 7491//5562 -f 7487//5559 7575//5431 7493//5561 -f 7403//5430 7492//5432 7575//5431 -f 7409//5569 7496//5564 7494//5565 -f 7491//5562 7576//5434 7496//5564 -f 7406//5433 7495//5435 7576//5434 -f 7411//5572 7498//5567 7497//5568 -f 7494//5565 7577//5437 7498//5567 -f 7408//5436 7499//5438 7577//5437 -f 7413//5575 7502//5570 7500//5571 -f 7497//5568 7578//5440 7502//5570 -f 7410//5439 7501//5441 7578//5440 -f 7415//5578 7505//5573 7503//5574 -f 7500//5571 7579//5443 7505//5573 -f 7412//5442 7504//5444 7579//5443 -f 7417//5581 7508//5576 7506//5577 -f 7503//5574 7580//5446 7508//5576 -f 7414//5445 7507//5447 7580//5446 -f 7419//5584 7510//5579 7509//5580 -f 7506//5577 7581//5449 7510//5579 -f 7416//5448 7511//5450 7581//5449 -f 7421//5587 7514//5582 7512//5583 -f 7509//5580 7582//5452 7514//5582 -f 7418//5451 7513//5453 7582//5452 -f 7423//5590 7517//5585 7515//5586 -f 7512//5583 7583//5455 7517//5585 -f 7420//5454 7516//5456 7583//5455 -f 7425//5591 7520//5588 7518//5589 -f 7515//5586 7584//5458 7520//5588 -f 7422//5457 7519//5459 7584//5458 -f 7362//5499 7552//5592 7426//5500 -f 7518//5589 7585//5494 7552//5592 -f 7424//5460 7553//5495 7585//5494 -usemtl Material.001 -f 7941//5593 7815//5326 7598//5156 -f 7942//5594 7818//5327 7605//5163 -f 7943//5595 7822//5328 7612//5329 -f 7944//5596 7824//5330 7619//5171 -f 7945//5597 7827//5331 7626//5332 -f 7946//5598 7830//5333 7633//5179 -f 7947//5599 7834//5334 7640//5191 -f 7948//5600 7836//5335 7647//5193 -f 7949//5601 7839//5336 7654//5337 -f 7950//5602 7842//5338 7661//5202 -f 7951//5603 7846//5339 7668//5210 -f 7952//5604 7848//5340 7675//5217 -f 7953//5605 7851//5341 7682//5342 -f 7954//5606 7854//5343 7689//5224 -f 7955//5607 7857//5344 7696//5232 -f 7956//5608 7860//5345 7703//5240 -f 7957//5609 7863//5346 7710//5347 -f 7958//5610 7866//5348 7717//5247 -f 7959//5611 7869//5349 7724//5350 -f 7960//5612 7872//5351 7731//5261 -f 7961//5613 7876//5352 7738//5269 -f 7962//5614 7879//5353 7746//5354 -f 7963//5615 7882//5355 7753//5277 -f 7964//5616 7886//5356 7760//5357 -f 7965//5617 7888//5358 7767//5285 -f 7966//5618 7891//5359 7774//5292 -f 7967//5619 7894//5360 7781//5306 -f 7968//5620 7898//5361 7788//5362 -f 7969//5621 7900//5363 7795//5309 -f 7970//5622 7903//5364 7802//5315 -f 7971//5623 7906//5365 7809//5366 -f 7740//5624 7908//5625 7909//5626 -f 7740//5624 7909//5626 7910//5627 -f 7740//5624 7910//5627 7911//5628 -f 7740//5624 7911//5628 7912//5629 -f 7740//5624 7912//5629 7913//5630 -f 7740//5624 7913//5630 7914//5631 -f 7740//5624 7914//5631 7915//5632 -f 7740//5624 7915//5632 7916//5633 -f 7740//5624 7916//5633 7917//5634 -f 7740//5624 7917//5634 7918//5635 -f 7740//5624 7918//5635 7919//5636 -f 7740//5624 7919//5636 7920//5637 -f 7740//5624 7920//5637 7921//5638 -f 7740//5624 7921//5638 7922//5639 -f 7740//5624 7922//5639 7923//5640 -f 7740//5624 7923//5640 7924//5641 -f 7740//5624 7924//5641 7925//5642 -f 7740//5624 7925//5642 7926//5643 -f 7740//5624 7926//5643 7927//5644 -f 7740//5624 7927//5644 7928//5645 -f 7740//5624 7928//5645 7875//5646 -f 7740//5624 7875//5646 7929//5647 -f 7740//5624 7929//5647 7930//5648 -f 7740//5624 7930//5648 7931//5649 -f 7740//5624 7931//5649 7932//5650 -f 7740//5624 7932//5650 7933//5651 -f 7740//5624 7933//5651 7934//5652 -f 7740//5624 7934//5652 7935//5653 -f 7740//5624 7935//5653 7936//5654 -f 7740//5624 7936//5654 7937//5655 -f 7740//5624 7937//5655 7938//5656 -f 7740//5624 7938//5656 7908//5625 -f 7972//5657 7940//5367 7591//5149 -f 7816//5658 7941//5593 7814//5659 -f 7592//5660 7813//5661 7816//5658 -f 7813//5661 7591//5149 7941//5593 -f 7819//5662 7942//5594 7817//5663 -f 7599//5664 7814//5659 7819//5662 -f 7814//5659 7598//5156 7942//5594 -f 7821//5665 7943//5595 7820//5666 -f 7606//5667 7817//5663 7821//5665 -f 7817//5663 7605//5163 7943//5595 -f 7825//5668 7944//5596 7823//5669 -f 7613//5670 7820//5666 7825//5668 -f 7820//5666 7612//5329 7944//5596 -f 7828//5671 7945//5597 7826//5672 -f 7620//5673 7823//5669 7828//5671 -f 7823//5669 7619//5171 7945//5597 -f 7831//5674 7946//5598 7829//5675 -f 7627//5676 7826//5672 7831//5674 -f 7826//5672 7626//5332 7946//5598 -f 7833//5677 7947//5599 7832//5678 -f 7634//5679 7829//5675 7833//5677 -f 7829//5675 7633//5179 7947//5599 -f 7837//5680 7948//5600 7835//5681 -f 7641//5682 7832//5678 7837//5680 -f 7832//5678 7640//5191 7948//5600 -f 7840//5683 7949//5601 7838//5684 -f 7648//5685 7835//5681 7840//5683 -f 7835//5681 7647//5193 7949//5601 -f 7843//5686 7950//5602 7841//5687 -f 7655//5688 7838//5684 7843//5686 -f 7838//5684 7654//5337 7950//5602 -f 7845//5689 7951//5603 7844//5690 -f 7662//5691 7841//5687 7845//5689 -f 7841//5687 7661//5202 7951//5603 -f 7849//5692 7952//5604 7847//5693 -f 7669//5694 7844//5690 7849//5692 -f 7844//5690 7668//5210 7952//5604 -f 7852//5695 7953//5605 7850//5696 -f 7676//5697 7847//5693 7852//5695 -f 7847//5693 7675//5217 7953//5605 -f 7855//5698 7954//5606 7853//5699 -f 7683//5700 7850//5696 7855//5698 -f 7850//5696 7682//5342 7954//5606 -f 7858//5701 7955//5607 7856//5702 -f 7690//5703 7853//5699 7858//5701 -f 7853//5699 7689//5224 7955//5607 -f 7861//5704 7956//5608 7859//5705 -f 7697//5706 7856//5702 7861//5704 -f 7856//5702 7696//5232 7956//5608 -f 7864//5707 7957//5609 7862//5708 -f 7704//5709 7859//5705 7864//5707 -f 7859//5705 7703//5240 7957//5609 -f 7867//5710 7958//5610 7865//5711 -f 7711//5712 7862//5708 7867//5710 -f 7862//5708 7710//5347 7958//5610 -f 7870//5713 7959//5611 7868//5714 -f 7718//5715 7865//5711 7870//5713 -f 7865//5711 7717//5247 7959//5611 -f 7873//5716 7960//5612 7871//5717 -f 7725//5718 7868//5714 7873//5716 -f 7868//5714 7724//5350 7960//5612 -f 7877//5719 7961//5613 7874//5720 -f 7732//5721 7871//5717 7877//5719 -f 7871//5717 7731//5261 7961//5613 -f 7880//5722 7962//5614 7878//5723 -f 7739//5724 7874//5720 7880//5722 -f 7874//5720 7738//5269 7962//5614 -f 7883//5725 7963//5615 7881//5726 -f 7747//5727 7878//5723 7883//5725 -f 7878//5723 7746//5354 7963//5615 -f 7885//5728 7964//5616 7884//5729 -f 7754//5730 7881//5726 7885//5728 -f 7881//5726 7753//5277 7964//5616 -f 7889//5731 7965//5617 7887//5732 -f 7761//5733 7884//5729 7889//5731 -f 7884//5729 7760//5357 7965//5617 -f 7892//5734 7966//5618 7890//5735 -f 7768//5736 7887//5732 7892//5734 -f 7887//5732 7767//5285 7966//5618 -f 7895//5737 7967//5619 7893//5738 -f 7775//5739 7890//5735 7895//5737 -f 7890//5735 7774//5292 7967//5619 -f 7897//5740 7968//5620 7896//5741 -f 7782//5742 7893//5738 7897//5740 -f 7893//5738 7781//5306 7968//5620 -f 7901//5743 7969//5621 7899//5744 -f 7789//5745 7896//5741 7901//5743 -f 7896//5741 7788//5362 7969//5621 -f 7904//5746 7970//5622 7902//5747 -f 7796//5748 7899//5744 7904//5746 -f 7899//5744 7795//5309 7970//5622 -f 7907//5749 7971//5623 7905//5750 -f 7803//5751 7902//5747 7907//5749 -f 7902//5747 7802//5315 7971//5623 -f 7909//5626 7816//5658 7599//5664 -f 7909//5626 7908//5625 7816//5658 -f 7908//5625 7592//5660 7816//5658 -f 7910//5627 7819//5662 7606//5667 -f 7910//5627 7909//5626 7819//5662 -f 7909//5626 7599//5664 7819//5662 -f 7911//5628 7821//5665 7613//5670 -f 7911//5628 7910//5627 7821//5665 -f 7910//5627 7606//5667 7821//5665 -f 7912//5629 7825//5668 7620//5673 -f 7912//5629 7911//5628 7825//5668 -f 7911//5628 7613//5670 7825//5668 -f 7913//5630 7828//5671 7627//5676 -f 7913//5630 7912//5629 7828//5671 -f 7912//5629 7620//5673 7828//5671 -f 7914//5631 7831//5674 7634//5679 -f 7914//5631 7913//5630 7831//5674 -f 7913//5630 7627//5676 7831//5674 -f 7915//5632 7833//5677 7641//5682 -f 7915//5632 7914//5631 7833//5677 -f 7914//5631 7634//5679 7833//5677 -f 7916//5633 7837//5680 7648//5685 -f 7916//5633 7915//5632 7837//5680 -f 7915//5632 7641//5682 7837//5680 -f 7917//5634 7840//5683 7655//5688 -f 7917//5634 7916//5633 7840//5683 -f 7916//5633 7648//5685 7840//5683 -f 7918//5635 7843//5686 7662//5691 -f 7918//5635 7917//5634 7843//5686 -f 7917//5634 7655//5688 7843//5686 -f 7919//5636 7845//5689 7669//5694 -f 7919//5636 7918//5635 7845//5689 -f 7918//5635 7662//5691 7845//5689 -f 7920//5637 7849//5692 7676//5697 -f 7920//5637 7919//5636 7849//5692 -f 7919//5636 7669//5694 7849//5692 -f 7921//5638 7852//5695 7683//5700 -f 7921//5638 7920//5637 7852//5695 -f 7920//5637 7676//5697 7852//5695 -f 7922//5639 7855//5698 7690//5703 -f 7922//5639 7921//5638 7855//5698 -f 7921//5638 7683//5700 7855//5698 -f 7923//5640 7858//5701 7697//5706 -f 7923//5640 7922//5639 7858//5701 -f 7922//5639 7690//5703 7858//5701 -f 7924//5641 7861//5704 7704//5709 -f 7924//5641 7923//5640 7861//5704 -f 7923//5640 7697//5706 7861//5704 -f 7925//5642 7864//5707 7711//5712 -f 7925//5642 7924//5641 7864//5707 -f 7924//5641 7704//5709 7864//5707 -f 7926//5643 7867//5710 7718//5715 -f 7926//5643 7925//5642 7867//5710 -f 7925//5642 7711//5712 7867//5710 -f 7927//5644 7870//5713 7725//5718 -f 7927//5644 7926//5643 7870//5713 -f 7926//5643 7718//5715 7870//5713 -f 7928//5645 7873//5716 7732//5721 -f 7928//5645 7927//5644 7873//5716 -f 7927//5644 7725//5718 7873//5716 -f 7875//5646 7877//5719 7739//5724 -f 7875//5646 7928//5645 7877//5719 -f 7928//5645 7732//5721 7877//5719 -f 7929//5647 7880//5722 7747//5727 -f 7929//5647 7875//5646 7880//5722 -f 7875//5646 7739//5724 7880//5722 -f 7930//5648 7883//5725 7754//5730 -f 7930//5648 7929//5647 7883//5725 -f 7929//5647 7747//5727 7883//5725 -f 7931//5649 7885//5728 7761//5733 -f 7931//5649 7930//5648 7885//5728 -f 7930//5648 7754//5730 7885//5728 -f 7932//5650 7889//5731 7768//5736 -f 7932//5650 7931//5649 7889//5731 -f 7931//5649 7761//5733 7889//5731 -f 7933//5651 7892//5734 7775//5739 -f 7933//5651 7932//5650 7892//5734 -f 7932//5650 7768//5736 7892//5734 -f 7934//5652 7895//5737 7782//5742 -f 7934//5652 7933//5651 7895//5737 -f 7933//5651 7775//5739 7895//5737 -f 7935//5653 7897//5740 7789//5745 -f 7935//5653 7934//5652 7897//5740 -f 7934//5652 7782//5742 7897//5740 -f 7936//5654 7901//5743 7796//5748 -f 7936//5654 7935//5653 7901//5743 -f 7935//5653 7789//5745 7901//5743 -f 7937//5655 7904//5746 7803//5751 -f 7937//5655 7936//5654 7904//5746 -f 7936//5654 7796//5748 7904//5746 -f 7938//5656 7907//5749 7810//5752 -f 7938//5656 7937//5655 7907//5749 -f 7937//5655 7803//5751 7907//5749 -f 7908//5625 7939//5753 7592//5660 -f 7908//5625 7938//5656 7939//5753 -f 7938//5656 7810//5752 7939//5753 -f 7939//5753 7972//5657 7813//5661 -f 7810//5752 7905//5750 7939//5753 -f 7905//5750 7809//5366 7972//5657 -f 7814//5659 7941//5593 7598//5156 -f 7817//5663 7942//5594 7605//5163 -f 7820//5666 7943//5595 7612//5329 -f 7823//5669 7944//5596 7619//5171 -f 7826//5672 7945//5597 7626//5332 -f 7829//5675 7946//5598 7633//5179 -f 7832//5678 7947//5599 7640//5191 -f 7835//5681 7948//5600 7647//5193 -f 7838//5684 7949//5601 7654//5337 -f 7841//5687 7950//5602 7661//5202 -f 7844//5690 7951//5603 7668//5210 -f 7847//5693 7952//5604 7675//5217 -f 7850//5696 7953//5605 7682//5342 -f 7853//5699 7954//5606 7689//5224 -f 7856//5702 7955//5607 7696//5232 -f 7859//5705 7956//5608 7703//5240 -f 7862//5708 7957//5609 7710//5347 -f 7865//5711 7958//5610 7717//5247 -f 7868//5714 7959//5611 7724//5350 -f 7871//5717 7960//5612 7731//5261 -f 7874//5720 7961//5613 7738//5269 -f 7878//5723 7962//5614 7746//5354 -f 7881//5726 7963//5615 7753//5277 -f 7884//5729 7964//5616 7760//5357 -f 7887//5732 7965//5617 7767//5285 -f 7890//5735 7966//5618 7774//5292 -f 7893//5738 7967//5619 7781//5306 -f 7896//5741 7968//5620 7788//5362 -f 7899//5744 7969//5621 7795//5309 -f 7902//5747 7970//5622 7802//5315 -f 7905//5750 7971//5623 7809//5366 -f 7813//5661 7972//5657 7591//5149 -f 7599//5664 7816//5658 7814//5659 -f 7813//5661 7941//5593 7816//5658 -f 7591//5149 7815//5326 7941//5593 -f 7606//5667 7819//5662 7817//5663 -f 7814//5659 7942//5594 7819//5662 -f 7598//5156 7818//5327 7942//5594 -f 7613//5670 7821//5665 7820//5666 -f 7817//5663 7943//5595 7821//5665 -f 7605//5163 7822//5328 7943//5595 -f 7620//5673 7825//5668 7823//5669 -f 7820//5666 7944//5596 7825//5668 -f 7612//5329 7824//5330 7944//5596 -f 7627//5676 7828//5671 7826//5672 -f 7823//5669 7945//5597 7828//5671 -f 7619//5171 7827//5331 7945//5597 -f 7634//5679 7831//5674 7829//5675 -f 7826//5672 7946//5598 7831//5674 -f 7626//5332 7830//5333 7946//5598 -f 7641//5682 7833//5677 7832//5678 -f 7829//5675 7947//5599 7833//5677 -f 7633//5179 7834//5334 7947//5599 -f 7648//5685 7837//5680 7835//5681 -f 7832//5678 7948//5600 7837//5680 -f 7640//5191 7836//5335 7948//5600 -f 7655//5688 7840//5683 7838//5684 -f 7835//5681 7949//5601 7840//5683 -f 7647//5193 7839//5336 7949//5601 -f 7662//5691 7843//5686 7841//5687 -f 7838//5684 7950//5602 7843//5686 -f 7654//5337 7842//5338 7950//5602 -f 7669//5694 7845//5689 7844//5690 -f 7841//5687 7951//5603 7845//5689 -f 7661//5202 7846//5339 7951//5603 -f 7676//5697 7849//5692 7847//5693 -f 7844//5690 7952//5604 7849//5692 -f 7668//5210 7848//5340 7952//5604 -f 7683//5700 7852//5695 7850//5696 -f 7847//5693 7953//5605 7852//5695 -f 7675//5217 7851//5341 7953//5605 -f 7690//5703 7855//5698 7853//5699 -f 7850//5696 7954//5606 7855//5698 -f 7682//5342 7854//5343 7954//5606 -f 7697//5706 7858//5701 7856//5702 -f 7853//5699 7955//5607 7858//5701 -f 7689//5224 7857//5344 7955//5607 -f 7704//5709 7861//5704 7859//5705 -f 7856//5702 7956//5608 7861//5704 -f 7696//5232 7860//5345 7956//5608 -f 7711//5712 7864//5707 7862//5708 -f 7859//5705 7957//5609 7864//5707 -f 7703//5240 7863//5346 7957//5609 -f 7718//5715 7867//5710 7865//5711 -f 7862//5708 7958//5610 7867//5710 -f 7710//5347 7866//5348 7958//5610 -f 7725//5718 7870//5713 7868//5714 -f 7865//5711 7959//5611 7870//5713 -f 7717//5247 7869//5349 7959//5611 -f 7732//5721 7873//5716 7871//5717 -f 7868//5714 7960//5612 7873//5716 -f 7724//5350 7872//5351 7960//5612 -f 7739//5724 7877//5719 7874//5720 -f 7871//5717 7961//5613 7877//5719 -f 7731//5261 7876//5352 7961//5613 -f 7747//5727 7880//5722 7878//5723 -f 7874//5720 7962//5614 7880//5722 -f 7738//5269 7879//5353 7962//5614 -f 7754//5730 7883//5725 7881//5726 -f 7878//5723 7963//5615 7883//5725 -f 7746//5354 7882//5355 7963//5615 -f 7761//5733 7885//5728 7884//5729 -f 7881//5726 7964//5616 7885//5728 -f 7753//5277 7886//5356 7964//5616 -f 7768//5736 7889//5731 7887//5732 -f 7884//5729 7965//5617 7889//5731 -f 7760//5357 7888//5358 7965//5617 -f 7775//5739 7892//5734 7890//5735 -f 7887//5732 7966//5618 7892//5734 -f 7767//5285 7891//5359 7966//5618 -f 7782//5742 7895//5737 7893//5738 -f 7890//5735 7967//5619 7895//5737 -f 7774//5292 7894//5360 7967//5619 -f 7789//5745 7897//5740 7896//5741 -f 7893//5738 7968//5620 7897//5740 -f 7781//5306 7898//5361 7968//5620 -f 7796//5748 7901//5743 7899//5744 -f 7896//5741 7969//5621 7901//5743 -f 7788//5362 7900//5363 7969//5621 -f 7803//5751 7904//5746 7902//5747 -f 7899//5744 7970//5622 7904//5746 -f 7795//5309 7903//5364 7970//5622 -f 7810//5752 7907//5749 7905//5750 -f 7902//5747 7971//5623 7907//5749 -f 7802//5315 7906//5365 7971//5623 -f 7592//5660 7939//5753 7813//5661 -f 7905//5750 7972//5657 7939//5753 -f 7809//5366 7940//5367 7972//5657 -l 7811 7812 -o Body_Sphere.002 -v 1.170026 0.251981 0.110623 -v 1.168350 0.409033 0.206367 -v 1.143010 0.551349 0.294090 -v 1.114024 0.673459 0.370420 -v 0.955484 0.770670 0.432424 -v 0.777509 0.839246 0.477720 -v 0.586939 0.876553 0.504566 -v -0.480150 0.831895 0.501455 -v -0.673737 0.803618 0.489056 -v -0.768059 0.743547 0.457369 -v -0.935192 0.653991 0.407613 -v -1.079141 0.538391 0.341698 -v -1.194375 0.401190 0.262159 -v -1.276466 0.247660 0.172051 -v -1.322257 0.083702 0.074839 -v 1.169478 0.268339 0.076058 -v 1.167277 0.441121 0.138565 -v 1.141450 0.597933 0.195657 -v 1.112040 0.732748 0.245138 -v 0.953150 0.840387 0.285108 -v 0.774916 0.916712 0.314031 -v 0.584186 0.958790 0.330795 -v -0.482956 0.915743 0.324280 -v -0.676490 0.885855 0.315285 -v -0.770652 0.821013 0.293681 -v -0.937526 0.723708 0.260297 -v -1.081126 0.597681 0.216416 -v -1.195935 0.447774 0.163726 -v -1.277540 0.279748 0.104249 -v -1.322805 0.100060 0.040274 -v 1.169391 0.277653 0.038965 -v 1.167106 0.459392 0.065805 -v 1.141203 0.624459 0.090026 -v 1.111725 0.766510 0.110696 -v 0.952780 0.880086 0.127021 -v 0.774505 0.960823 0.138373 -v 0.583750 1.005618 0.144318 -v -0.483401 0.963489 0.134150 -v -0.676926 0.932684 0.128808 -v -0.771063 0.865124 0.118023 -v -0.937896 0.763407 0.102209 -v -1.081441 0.631442 0.081974 -v -1.196182 0.474300 0.058095 -v -1.277710 0.298019 0.031490 -v -1.322891 0.109375 0.003181 -v 1.169769 0.279567 0.000770 -v 1.167847 0.463146 -0.009116 -v 1.142278 0.629908 -0.018743 -v 1.113093 0.773445 -0.027741 -v 0.954389 0.888242 -0.035764 -v 0.776292 0.969885 -0.042503 -v 0.585647 1.015238 -0.047700 -v -0.481466 0.973298 -0.061629 -v -0.675029 0.942304 -0.063209 -v -0.769276 0.874186 -0.062853 -v -0.936287 0.771563 -0.060576 -v -1.080073 0.638378 -0.056463 -v -1.195107 0.479749 -0.050675 -v -1.276970 0.301773 -0.043432 -v -1.322514 0.111288 -0.035014 -v 1.170596 0.274006 -0.037058 -v 1.169469 0.452237 -0.083320 -v 1.144634 0.614071 -0.126471 -v 1.116091 0.753289 -0.164852 -v 0.957914 0.864540 -0.196989 -v 0.780209 0.943549 -0.221647 -v 0.589806 0.987280 -0.237878 -v -0.477227 0.944792 -0.255534 -v -0.670871 0.914345 -0.253388 -v -0.765359 0.847849 -0.241998 -v -0.932762 0.747861 -0.221801 -v -1.077075 0.618221 -0.193574 -v -1.192752 0.463912 -0.158402 -v -1.275347 0.290864 -0.117636 -v -1.321687 0.105727 -0.072843 -v 1.171840 0.261183 -0.073068 -v 1.171911 0.427085 -0.153955 -v 1.148179 0.577556 -0.229017 -v 1.120603 0.706814 -0.295368 -v 0.963220 0.809891 -0.350460 -v 0.786105 0.882827 -0.392175 -v 0.594635 0.922509 -0.418819 -v -0.470858 0.879065 -0.440112 -v -0.664612 0.849883 -0.434419 -v -0.759463 0.787128 -0.412525 -v -0.927456 0.693212 -0.375272 -v -1.072562 0.571746 -0.324090 -v -1.189206 0.427397 -0.260948 -v -1.272905 0.265712 -0.188271 -v -1.320442 0.092905 -0.108852 -v 1.173456 0.241593 -0.105874 -v 1.175079 0.388657 -0.218306 -v 1.152778 0.521767 -0.322441 -v 1.126457 0.635808 -0.414274 -v 0.970103 0.726397 -0.490279 -v 0.793753 0.790052 -0.547533 -v 0.603244 0.824142 -0.583748 -v -0.141841 0.757556 -0.567727 -v -0.636989 0.753823 -0.599597 -v -0.753183 0.694974 -0.568368 -v -0.920573 0.609718 -0.515090 -v -1.066709 0.500740 -0.442996 -v -1.184607 0.371608 -0.354372 -v -1.269737 0.227284 -0.252622 -v -1.318827 0.073314 -0.141658 -v 1.175379 0.215987 -0.134216 -v 1.178851 0.338429 -0.273901 -v 1.158254 0.448847 -0.403152 -v 1.133427 0.542998 -0.517000 -v 0.978299 0.617264 -0.611071 -v 0.802860 0.668791 -0.681750 -v 0.613862 0.695602 -0.726323 -v -0.045623 0.621289 -0.682280 -v -0.501306 0.649655 -0.755550 -v -0.756130 0.580078 -0.708091 -v -0.912376 0.500585 -0.635882 -v -1.059739 0.407930 -0.545722 -v -1.179131 0.298688 -0.435083 -v -1.265965 0.177056 -0.308217 -v -1.316904 0.047708 -0.170000 -v 1.177536 0.185349 -0.157005 -v 1.183083 0.278331 -0.318603 -v 1.164397 0.361599 -0.468048 -v 1.141245 0.431952 -0.599598 -v 0.987493 0.486688 -0.708196 -v 0.813075 0.523703 -0.789670 -v 0.607618 0.536290 -0.831925 -v -0.016459 0.475452 -0.784209 -v -0.469195 0.511069 -0.903810 -v -0.816490 0.428845 -0.810804 -v -0.903183 0.370009 -0.733008 -v -1.051920 0.296884 -0.628320 -v -1.172988 0.211440 -0.499979 -v -1.261733 0.116958 -0.352918 -v -1.314747 0.017071 -0.192789 -v 1.179844 0.150858 -0.173364 -v 1.187611 0.210673 -0.350694 -v 1.170971 0.263375 -0.514637 -v 1.149612 0.306938 -0.658894 -v 0.997330 0.339686 -0.777921 -v 0.824003 0.360358 -0.867132 -v 0.466183 0.334358 -0.812978 -v -0.044104 0.313668 -0.867533 -v -0.488226 0.303455 -0.941785 -v -0.810803 0.264560 -0.887196 -v -0.893342 0.223005 -0.802724 -v -1.043554 0.171870 -0.687616 -v -1.166414 0.113216 -0.546568 -v -1.257206 0.049300 -0.385009 -v -1.312438 -0.017421 -0.209148 -v 1.182215 0.113837 -0.182667 -v 1.192261 0.138056 -0.368940 -v 1.177722 0.157951 -0.541127 -v 1.158205 0.172758 -0.692609 -v 1.007435 0.181908 -0.817567 -v 0.835030 0.184958 -0.910662 -v 0.450410 0.158526 -0.840500 -v -0.042604 0.136737 -0.867782 -v -0.553344 0.109950 -0.964634 -v -0.798504 0.088943 -0.927640 -v -0.883079 0.065187 -0.842022 -v -1.034961 0.037690 -0.721332 -v -1.159663 0.007792 -0.573058 -v -1.252555 -0.023317 -0.403256 -v -1.310068 -0.054441 -0.218451 -v 1.184557 0.075711 -0.184554 -v 1.196855 0.063269 -0.372642 -v 1.184392 0.049377 -0.546500 -v 1.166694 0.034570 -0.699448 -v 1.017383 0.019417 -0.825538 -v 0.844563 0.004561 -0.917578 -v 0.503968 -0.006608 -0.888890 -v 0.006670 -0.025496 -0.854412 -v -0.456641 -0.067888 -0.958529 -v -0.764428 -0.089275 -0.929270 -v -0.876402 -0.097433 -0.850188 -v -1.026453 -0.100495 -0.728142 -v -1.152993 -0.100782 -0.578431 -v -1.247961 -0.098104 -0.406957 -v -1.307725 -0.092567 -0.220337 -v 1.186780 0.037945 -0.178953 -v 1.201217 -0.010813 -0.361656 -v 1.190724 -0.058173 -0.530551 -v 1.174753 -0.102316 -0.679148 -v 1.026743 -0.141479 -0.801446 -v 0.851393 -0.172787 -0.887069 -v 0.532145 -0.182662 -0.887325 -v 0.058786 -0.176775 -0.830105 -v -0.369879 -0.239324 -0.908436 -v -0.680602 -0.263016 -0.898859 -v -0.871201 -0.260408 -0.830650 -v -1.021784 -0.238164 -0.710148 -v -1.146661 -0.208332 -0.562482 -v -1.243599 -0.172186 -0.395971 -v -1.305502 -0.130334 -0.214737 -v 1.188800 0.001989 -0.166080 -v 1.205178 -0.081343 -0.336404 -v 1.196475 -0.160567 -0.493891 -v 1.182072 -0.232639 -0.632490 -v 1.035221 -0.294568 -0.746381 -v 0.855982 -0.339241 -0.821388 -v 0.528492 -0.341555 -0.811172 -v 0.089816 -0.316378 -0.749180 -v -0.314099 -0.376406 -0.804710 -v -0.604131 -0.418183 -0.821949 -v -0.856762 -0.435491 -0.805552 -v -1.032427 -0.376249 -0.677646 -v -1.141438 -0.310852 -0.526033 -v -1.239638 -0.242716 -0.370719 -v -1.303483 -0.166290 -0.201864 -v 1.190538 -0.030775 -0.146429 -v 1.208587 -0.145612 -0.297857 -v 1.201423 -0.253870 -0.437930 -v 1.188371 -0.351391 -0.561265 -v 1.042584 -0.434072 -0.662626 -v 0.861424 -0.489870 -0.726461 -v 0.535224 -0.479332 -0.706059 -v 0.118240 -0.447841 -0.657629 -v -0.289889 -0.479721 -0.673794 -v -0.556585 -0.531586 -0.697052 -v -0.820025 -0.569757 -0.705469 -v -1.034142 -0.506114 -0.612872 -v -1.137452 -0.404445 -0.470328 -v -1.236230 -0.306984 -0.332173 -v -1.301745 -0.199053 -0.182213 -v 1.191927 -0.059087 -0.120755 -v 1.211312 -0.201148 -0.247497 -v 1.205380 -0.334496 -0.364818 -v 1.193406 -0.454009 -0.468211 -v 1.048613 -0.554800 -0.553429 -v 0.868724 -0.621876 -0.607199 -v 0.551781 -0.603082 -0.586171 -v 0.141882 -0.558404 -0.542041 -v -0.255361 -0.573527 -0.545677 -v -0.520518 -0.617642 -0.560960 -v -0.788935 -0.695637 -0.589723 -v -1.026482 -0.615123 -0.511853 -v -1.135105 -0.485933 -0.397545 -v -1.233504 -0.362521 -0.281813 -v -1.300355 -0.227366 -0.156539 -v 1.192914 -0.081860 -0.090046 -v 1.213249 -0.245818 -0.187258 -v 1.208191 -0.399347 -0.277365 -v 1.196985 -0.536548 -0.356905 -v 1.052972 -0.652048 -0.422758 -v 0.878573 -0.732351 -0.466904 -v 0.574862 -0.710197 -0.450470 -v 0.152302 -0.657719 -0.418195 -v -0.201642 -0.646087 -0.408551 -v -0.490517 -0.692532 -0.424318 -v -0.766150 -0.781431 -0.450915 -v -1.021193 -0.703857 -0.399212 -v -1.133385 -0.550988 -0.309953 -v -1.231568 -0.407191 -0.221574 -v -1.299368 -0.250138 -0.125830 -v 1.193462 -0.098218 -0.055481 -v 1.214323 -0.277905 -0.119456 -v 1.209751 -0.445931 -0.178932 -v 1.198969 -0.595838 -0.231623 -v 1.055364 -0.721857 -0.275500 -v 0.885055 -0.813473 -0.306814 -v 0.601112 -0.795985 -0.298868 -v 0.178243 -0.727458 -0.275527 -v -0.159195 -0.695518 -0.266070 -v -0.467766 -0.742134 -0.280394 -v -0.758102 -0.833252 -0.299626 -v -1.005275 -0.748882 -0.265650 -v -1.129849 -0.596890 -0.211123 -v -1.230493 -0.439278 -0.153772 -v -1.298820 -0.266496 -0.091265 -v 1.193549 -0.107533 -0.018388 -v 1.214493 -0.296177 -0.046697 -v 1.209998 -0.472457 -0.073302 -v 1.199284 -0.629600 -0.097181 -v 1.055739 -0.761566 -0.117416 -v 0.887365 -0.860117 -0.132756 -v 0.628538 -0.857493 -0.133145 -v 0.199313 -0.773585 -0.123536 -v -0.132514 -0.725518 -0.121035 -v -0.446784 -0.766974 -0.132601 -v -0.771414 -0.827424 -0.136850 -v -0.991911 -0.762915 -0.125202 -v -1.127415 -0.622549 -0.105222 -v -1.230323 -0.457550 -0.081012 -v -1.298734 -0.275811 -0.054172 -v 1.193171 -0.109446 0.019807 -v 1.213752 -0.299931 0.028225 -v 1.208923 -0.477907 0.035468 -v 1.197916 -0.636535 0.041256 -v 1.054131 -0.769721 0.045368 -v 0.886460 -0.870880 0.047565 -v 0.652570 -0.888116 0.044837 -v 0.216101 -0.789321 0.036283 -v -0.115915 -0.731150 0.027219 -v -0.429533 -0.764740 0.017879 -v -0.764277 -0.813153 0.014237 -v -0.991789 -0.766912 0.012182 -v -1.128355 -0.627948 0.003532 -v -1.231064 -0.461303 -0.006091 -v -1.299111 -0.277724 -0.015977 -v 1.192344 -0.103885 0.057636 -v 1.212130 -0.289022 0.102429 -v 1.206568 -0.462069 0.143195 -v 1.194918 -0.616378 0.178367 -v 1.050605 -0.746018 0.206594 -v 0.883054 -0.845665 0.226701 -v 0.663915 -0.876175 0.228465 -v 0.222684 -0.773574 0.198548 -v -0.112693 -0.712770 0.176470 -v -0.428049 -0.742911 0.168776 -v -0.757560 -0.792337 0.166993 -v -0.992496 -0.744249 0.148011 -v -1.130772 -0.612180 0.111253 -v -1.232686 -0.450395 0.068113 -v -1.299939 -0.272163 0.021851 -v 1.191099 -0.091063 0.093645 -v 1.209688 -0.263870 0.173064 -v 1.203023 -0.425554 0.245741 -v 1.190406 -0.569904 0.308883 -v 1.045299 -0.691370 0.360065 -v 0.877299 -0.785269 0.397311 -v 0.664523 -0.821507 0.406446 -v 0.217102 -0.727817 0.356521 -v -0.125261 -0.672088 0.322781 -v -0.447424 -0.713146 0.319925 -v -0.762455 -0.793627 0.325218 -v -1.001917 -0.706727 0.279637 -v -1.134504 -0.575787 0.213837 -v -1.235128 -0.425243 0.138748 -v -1.301183 -0.259341 0.057861 -v -1.329990 -0.084384 -0.025743 -v 1.189484 -0.071472 0.126451 -v 1.206520 -0.225441 0.237415 -v 1.198423 -0.369765 0.339164 -v 1.184552 -0.498897 0.427789 -v 1.038416 -0.607875 0.499883 -v 0.869659 -0.692513 0.552677 -v 0.660566 -0.730856 0.570304 -v 0.200657 -0.653684 0.504463 -v -0.149387 -0.609356 0.461289 -v -0.478713 -0.683345 0.478874 -v -0.789194 -0.747580 0.484899 -v -1.021586 -0.647070 0.405307 -v -1.139924 -0.520356 0.307494 -v -1.238296 -0.386814 0.203099 -v -1.302798 -0.239750 0.090667 -v 1.187561 -0.045866 0.154793 -v 1.202748 -0.175213 0.293010 -v 1.192947 -0.296845 0.419875 -v 1.177582 -0.406088 0.530515 -v 1.030220 -0.498743 0.620675 -v 0.860551 -0.571249 0.686893 -v 0.654934 -0.609524 0.714114 -v 0.176148 -0.551206 0.636425 -v -0.186749 -0.524303 0.590501 -v -0.515034 -0.613565 0.632753 -v -0.816389 -0.635426 0.617641 -v -1.033123 -0.550978 0.512622 -v -1.145560 -0.447451 0.388352 -v -1.242068 -0.336586 0.258694 -v -1.304721 -0.214144 0.119009 -v 1.185404 -0.015229 0.177582 -v 1.198516 -0.115116 0.337711 -v 1.186804 -0.209597 0.484772 -v 1.169764 -0.295042 0.613112 -v 1.021026 -0.368167 0.717800 -v 0.850337 -0.426162 0.794814 -v 0.648436 -0.461197 0.831559 -v 0.180867 -0.415546 0.736738 -v -0.236050 -0.423315 0.712625 -v -0.556370 -0.507463 0.775262 -v -0.851295 -0.506838 0.734483 -v -1.034265 -0.434724 0.591930 -v -1.150877 -0.359852 0.452968 -v -1.246300 -0.276489 0.303395 -v -1.306879 -0.183507 0.141797 -v 1.183095 0.019263 0.193941 -v 1.193989 -0.047458 0.369802 -v 1.180231 -0.111374 0.531361 -v 1.161397 -0.170027 0.672408 -v 1.011189 -0.221165 0.787525 -v 0.839405 -0.262822 0.872287 -v 0.644075 -0.291929 0.918848 -v 0.161990 -0.265251 0.802916 -v -0.307243 -0.298719 0.815489 -v -0.615181 -0.356512 0.876354 -v -0.878254 -0.344664 0.794119 -v -1.034928 -0.305863 0.645856 -v -1.157154 -0.261533 0.499429 -v -1.250827 -0.208831 0.335486 -v -1.309187 -0.149015 0.158157 -v 1.180725 0.056283 0.203243 -v 1.189338 0.025159 0.388049 -v 1.173479 -0.005949 0.557850 -v 1.152804 -0.035848 0.706124 -v 1.001085 -0.063387 0.827170 -v 0.828178 -0.087507 0.916338 -v 0.638413 -0.107237 0.969312 -v 0.130850 -0.107358 0.850958 -v -0.362991 -0.141709 0.872963 -v -0.672017 -0.177250 0.891682 -v -0.885841 -0.178825 0.799926 -v -1.040438 -0.170928 0.677456 -v -1.163906 -0.156109 0.525919 -v -1.255478 -0.136214 0.353733 -v -1.311558 -0.111995 0.167459 -v 1.178383 0.094409 0.205130 -v 1.184744 0.099946 0.391750 -v 1.166809 0.102624 0.563224 -v 1.144315 0.102340 0.712963 -v 0.991102 0.099105 0.835212 -v 0.817086 0.093044 0.925274 -v 0.628946 0.084388 0.979685 -v 0.100723 0.057570 0.856166 -v -0.401542 0.027638 0.895254 -v -0.728480 -0.002655 0.904905 -v -0.899573 -0.017574 0.810400 -v -1.048850 -0.032728 0.684241 -v -1.170576 -0.047535 0.531293 -v -1.260072 -0.061427 0.357434 -v -1.313900 -0.073869 0.169346 -v 1.176159 0.132176 0.199530 -v 1.180382 0.174028 0.380764 -v 1.160477 0.210174 0.547274 -v 1.136256 0.239226 0.692663 -v 0.981626 0.260066 0.811342 -v 0.806557 0.271894 0.898750 -v 0.617674 0.274235 0.951460 -v 0.063238 0.223971 0.839858 -v -0.455144 0.206294 0.901867 -v -0.740857 0.176476 0.879052 -v -0.909050 0.143387 0.786530 -v -1.056909 0.104158 0.663941 -v -1.176908 0.060015 0.515343 -v -1.264434 0.012655 0.346448 -v -1.316123 -0.036103 0.163745 -v 1.174140 0.168132 0.186656 -v 1.176421 0.244558 0.355512 -v 1.154727 0.312568 0.510615 -v 1.128937 0.369549 0.646004 -v 0.973019 0.413309 0.756477 -v 0.796993 0.442169 0.837788 -v 0.604243 0.454236 0.885228 -v 0.004683 0.393361 0.808195 -v -0.513573 0.399796 0.897164 -v -0.763628 0.349293 0.823998 -v -0.917657 0.296630 0.731665 -v -1.064229 0.234481 0.617282 -v -1.182659 0.162409 0.478684 -v -1.268395 0.083185 0.321196 -v -1.318143 -0.000147 0.150872 -v 1.200648 0.086226 0.010537 -v 1.172402 0.200896 0.167005 -v 1.173012 0.308826 0.316966 -v 1.149778 0.405871 0.454654 -v 1.122639 0.488301 0.574779 -v 0.965613 0.552947 0.672725 -v 0.788764 0.597326 0.744728 -v 0.588576 0.617843 0.785979 -v -0.127622 0.553786 0.736012 -v -0.626691 0.567583 0.801105 -v -0.794315 0.515991 0.743870 -v -0.925065 0.436268 0.647914 -v -1.070527 0.353233 0.546057 -v -1.187607 0.255712 0.422723 -v -1.271803 0.147454 0.282650 -v -1.319880 0.032617 0.131221 -v 1.171013 0.229208 0.141332 -v 1.170287 0.364363 0.266605 -v 1.145822 0.486498 0.381542 -v 1.117603 0.590918 0.481726 -v 0.959692 0.673613 0.563306 -v 0.782185 0.731402 0.623148 -v 0.589864 0.761636 0.658639 -v -0.473998 0.715069 0.658733 -v -0.664633 0.689706 0.643674 -v -0.766485 0.635908 0.602887 -v -0.930984 0.556934 0.538494 -v -1.075563 0.455851 0.453004 -v -1.191563 0.336338 0.349611 -v -1.274529 0.202990 0.232290 -v -1.321270 0.060929 0.105548 -vn -0.374462 0.791803 0.482437 -vn -0.096896 0.852321 0.513932 -vn -0.379284 0.870022 0.314890 -vn 0.830714 0.485824 0.271767 -vn 0.984283 0.160680 0.073092 -vn 0.983917 0.170660 0.052400 -vn -0.989471 0.112491 0.090701 -vn -0.942656 0.275948 0.187597 -vn -0.990051 0.129337 0.055086 -vn -0.555315 0.709464 0.433882 -vn 0.502792 0.746544 0.435713 -vn 0.829218 0.528428 0.181982 -vn -0.600574 0.679464 0.421430 -vn -0.602893 0.749321 0.273782 -vn 0.324931 0.814142 0.481185 -vn 0.322947 0.891842 0.316660 -vn -0.744346 0.564867 0.356120 -vn -0.746330 0.624409 0.230293 -vn 0.098239 0.853572 0.511582 -vn 0.095035 0.937407 0.335002 -vn 0.996216 0.082614 0.026032 -vn 0.996704 0.077548 0.023041 -vn 0.996643 0.079165 0.019532 -vn -0.859859 0.428663 0.277200 -vn -0.861446 0.475600 0.178014 -vn -0.099521 0.936430 0.336344 -vn 0.996155 0.084780 0.021546 -vn -0.943754 0.308451 0.118870 -vn -0.943937 0.326975 0.045106 -vn -0.379833 0.915098 0.135075 -vn 0.983856 0.176305 0.030091 -vn -0.990143 0.138951 0.016877 -vn -0.557329 0.779962 0.284555 -vn 0.500443 0.816401 0.288064 -vn 0.500076 0.856197 0.129612 -vn -0.603290 0.789117 0.115360 -vn 0.322520 0.936003 0.140812 -vn -0.746666 0.658315 0.095279 -vn 0.094607 0.984558 0.147191 -vn 0.996643 0.080111 0.015778 -vn -0.861690 0.502304 0.071566 -vn -0.099948 0.984161 0.146397 -vn 0.996124 0.086001 0.016663 -vn -0.860622 0.507797 -0.037996 -vn 0.096438 0.994263 -0.046205 -vn 0.984100 0.177313 0.007111 -vn -0.377453 0.924650 -0.050020 -vn 0.828974 0.552660 0.085604 -vn 0.830012 0.557543 -0.013642 -vn -0.943175 0.330790 -0.030793 -vn -0.557848 0.821162 0.120212 -vn -0.555620 0.829951 -0.048952 -vn -0.601672 0.797296 -0.047761 -vn 0.324320 0.945067 -0.040193 -vn -0.745293 0.665273 -0.043703 -vn 0.996185 0.086245 0.011658 -vn -0.742271 0.645039 -0.181402 -vn 0.100925 0.965789 -0.238838 -vn 0.996673 0.080325 0.011902 -vn 0.996307 0.085452 0.006714 -vn -0.858241 0.491836 -0.146519 -vn -0.098086 0.993957 -0.049196 -vn 0.984649 0.173711 -0.015534 -vn -0.941527 0.319742 -0.106021 -vn -0.372204 0.898251 -0.233528 -vn 0.832270 0.542924 -0.111881 -vn -0.989746 0.140904 -0.022431 -vn -0.988891 0.135197 -0.061403 -vn -0.550768 0.805994 -0.216742 -vn 0.501694 0.864376 -0.033509 -vn 0.505234 0.840602 -0.195105 -vn -0.598132 0.773522 -0.209357 -vn 0.327860 0.918729 -0.219977 -vn 0.510544 0.785852 -0.348918 -vn -0.592822 0.718772 -0.363170 -vn 0.332560 0.858425 -0.390484 -vn -0.737754 0.598376 -0.312479 -vn 0.105289 0.901059 -0.420698 -vn 0.996765 0.079806 0.008057 -vn 0.996460 0.083712 0.002045 -vn -0.093966 0.965453 -0.242958 -vn -0.099857 0.799524 -0.592242 -vn 0.985473 0.165624 -0.036927 -vn -0.854671 0.455061 -0.249855 -vn -0.340678 0.828852 -0.443709 -vn 0.835658 0.509384 -0.205298 -vn -0.987610 0.121982 -0.098483 -vn -0.536943 0.751122 -0.384014 -vn -0.038148 0.650563 -0.758476 -vn 0.840052 0.458266 -0.290262 -vn -0.939055 0.294229 -0.177618 -vn -0.985961 0.101779 -0.132298 -vn -0.264687 0.744194 -0.613239 -vn -0.588122 0.634327 -0.501694 -vn 0.517441 0.702170 -0.489059 -vn -0.731864 0.527055 -0.431898 -vn 0.340617 0.765465 -0.545885 -vn 0.996887 0.078555 0.004395 -vn 0.996673 0.081088 -0.002136 -vn -0.850032 0.398846 -0.343974 -vn 0.096255 0.797418 -0.595691 -vn 0.986541 0.153478 -0.056215 -vn -0.935850 0.255287 -0.242836 -vn -0.844508 0.325388 -0.425306 -vn 0.084933 0.645466 -0.759026 -vn 0.987793 0.137791 -0.072573 -vn -0.932035 0.204382 -0.299173 -vn -0.009064 0.612293 -0.790551 -vn 0.845302 0.391552 -0.363475 -vn -0.983978 0.075411 -0.161473 -vn -0.481857 0.692221 -0.537187 -vn -0.053896 0.769066 -0.636860 -vn 0.525651 0.592792 -0.610126 -vn -0.602557 0.519761 -0.605579 -vn 0.342418 0.638813 -0.688925 -vn 0.997040 0.076601 0.001007 -vn 0.996948 0.077700 -0.005737 -vn -0.724845 0.433851 -0.535081 -vn -0.677541 0.374004 -0.633259 -vn 0.103519 0.231452 -0.967315 -vn 0.997223 0.074038 -0.001923 -vn 0.997223 0.073672 -0.008576 -vn -0.838313 0.237465 -0.490707 -vn 0.989166 0.119327 -0.085421 -vn -0.927732 0.143468 -0.344493 -vn 0.019135 0.513871 -0.857631 -vn 0.851131 0.311930 -0.422163 -vn -0.981750 0.043855 -0.184973 -vn -0.442152 0.644002 -0.624256 -vn -0.569414 0.479659 -0.667562 -vn 0.534867 0.461898 -0.707450 -vn 0.266182 0.458602 -0.847804 -vn 0.544725 0.314585 -0.777337 -vn -0.695486 0.202673 -0.689322 -vn -0.717002 0.322336 -0.618030 -vn -0.708579 0.196783 -0.677602 -vn 0.011689 0.027253 -0.999542 -vn 0.997467 0.070956 -0.004334 -vn 0.997528 0.069185 -0.010559 -vn -0.831690 0.138493 -0.537645 -vn 0.099307 0.208991 -0.972839 -vn 0.990600 0.098788 -0.094302 -vn -0.923154 0.074892 -0.377026 -vn 0.002625 0.489303 -0.872066 -vn 0.020844 0.160680 -0.986755 -vn 0.857387 0.222449 -0.464064 -vn -0.979369 0.008332 -0.201819 -vn -0.506485 0.240120 -0.828120 -vn -0.025788 0.037629 -0.998932 -vn 0.863765 0.126591 -0.487655 -vn -0.976928 -0.029786 -0.211402 -vn -0.440474 0.059725 -0.895749 -vn 0.552660 0.154241 -0.818995 -vn -0.679556 0.067385 -0.730491 -vn 0.148991 0.335887 -0.930021 -vn -0.699423 0.061739 -0.712027 -vn -0.039399 0.206763 -0.977569 -vn 0.997681 0.067415 -0.006134 -vn 0.997833 0.064425 -0.011628 -vn 0.116916 0.000183 -0.993133 -vn 0.992096 0.077090 -0.098941 -vn -0.918424 0.001282 -0.395520 -vn -0.824885 0.032289 -0.564318 -vn -0.818140 -0.077120 -0.569781 -vn -0.047792 0.098483 -0.993988 -vn 0.993530 0.055025 -0.099277 -vn 0.067293 -0.084353 -0.994140 -vn 0.870022 0.028016 -0.492203 -vn -0.974517 -0.069063 -0.213324 -vn 0.064119 -0.114505 -0.991333 -vn -0.580645 -0.108310 -0.806909 -vn 0.149022 0.146641 -0.977874 -vn 0.184820 -0.040223 -0.981933 -vn -0.696280 -0.062716 -0.714988 -vn 0.997925 0.063601 -0.007202 -vn 0.998138 0.059572 -0.011719 -vn -0.697043 -0.116947 -0.707389 -vn 0.220588 -0.247017 -0.943541 -vn 0.998169 0.059633 -0.007477 -vn 0.998413 0.054811 -0.010895 -vn -0.828303 -0.157170 -0.537767 -vn -0.042360 -0.236274 -0.970733 -vn 0.994873 0.033479 -0.095340 -vn -0.913785 -0.074496 -0.399274 -vn -0.909360 -0.149571 -0.388134 -vn 0.041353 -0.322794 -0.945555 -vn 0.875729 -0.069643 -0.477706 -vn -0.972228 -0.107944 -0.207556 -vn -0.332499 -0.191137 -0.923521 -vn 0.103122 -0.396741 -0.912107 -vn 0.555406 -0.011780 -0.831446 -vn -0.162389 -0.368084 -0.915464 -vn -0.452315 -0.181341 -0.873196 -vn 0.038057 -0.573077 -0.818598 -vn 0.552324 -0.178899 -0.814173 -vn 0.210028 -0.430799 -0.877621 -vn -0.327464 -0.422651 -0.845027 -vn -0.081271 -0.515397 -0.853053 -vn 0.998413 0.055666 -0.006989 -vn 0.998688 0.050325 -0.009186 -vn -0.702872 -0.252235 -0.665059 -vn 0.996063 0.013184 -0.087405 -vn -0.905789 -0.220252 -0.361888 -vn 0.029267 -0.537767 -0.842555 -vn 0.880825 -0.162633 -0.444594 -vn -0.970153 -0.144993 -0.194311 -vn 0.134312 -0.645802 -0.751579 -vn 0.885372 -0.246895 -0.393811 -vn -0.968352 -0.178747 -0.174047 -vn 0.128208 -0.765648 -0.630299 -vn 0.549120 -0.333811 -0.766167 -vn 0.143864 -0.751610 -0.643696 -vn 0.549181 -0.482040 -0.682638 -vn -0.175512 -0.654378 -0.735496 -vn 0.187567 -0.594287 -0.782037 -vn 0.998627 0.051851 -0.005707 -vn 0.998901 0.046297 -0.006623 -vn -0.853938 -0.245888 -0.458571 -vn -0.670614 -0.441908 -0.595782 -vn -0.107700 -0.650716 -0.751610 -vn 0.997101 -0.005097 -0.075808 -vn -0.904141 -0.281625 -0.321207 -vn -0.011414 -0.662282 -0.749138 -vn -0.117283 -0.747246 -0.654073 -vn 0.997894 -0.020783 -0.060976 -vn -0.859615 -0.325175 -0.394055 -vn -0.854366 -0.394971 -0.337687 -vn -0.050935 -0.760033 -0.647847 -vn 0.889370 -0.319346 -0.327067 -vn -0.966918 -0.207923 -0.147618 -vn 0.099796 -0.824946 -0.556291 -vn 0.553301 -0.604297 -0.573229 -vn 0.204932 -0.808802 -0.551195 -vn -0.073000 -0.776666 -0.625629 -vn 0.180944 -0.718009 -0.672048 -vn 0.998810 0.048341 -0.003693 -vn 0.999054 0.042817 -0.003388 -vn -0.646107 -0.587115 -0.487625 -vn -0.019105 -0.898770 -0.437941 -vn 0.197272 -0.824274 -0.530686 -vn 0.998962 0.045289 -0.001007 -vn 0.999176 0.040010 0.000458 -vn -0.607379 -0.713370 -0.349498 -vn -0.115207 -0.834712 -0.538438 -vn 0.998474 -0.033357 -0.043519 -vn -0.903104 -0.336406 -0.266762 -vn -0.901120 -0.381298 -0.206275 -vn -0.082034 -0.850948 -0.518754 -vn 0.892331 -0.377514 -0.247353 -vn -0.965911 -0.231361 -0.115970 -vn 0.053468 -0.905911 -0.420026 -vn 0.568773 -0.696371 -0.437635 -vn 0.236244 -0.869198 -0.434339 -vn 0.231239 -0.933744 -0.273141 -vn 0.586627 -0.758263 -0.284341 -vn -0.017426 -0.984619 -0.173711 -vn 0.217109 -0.908811 -0.356212 -vn 0.999054 0.042848 0.002197 -vn 0.999237 0.038026 0.004761 -vn -0.853908 -0.457167 -0.248512 -vn -0.832453 -0.533799 -0.148473 -vn -0.106052 -0.912839 -0.394238 -vn 0.998810 -0.042390 -0.024049 -vn -0.128910 -0.931150 -0.341014 -vn 0.893887 -0.419416 -0.158147 -vn -0.897885 -0.417493 -0.139500 -vn 0.019929 -0.961455 -0.274148 -vn 0.894131 -0.443342 -0.062655 -vn -0.965331 -0.248207 -0.080386 -vn -0.965239 -0.257820 -0.042177 -vn -0.009186 -0.992706 -0.120182 -vn 0.596912 -0.793634 -0.117466 -vn 0.174871 -0.981048 -0.083041 -vn 0.245796 -0.955657 -0.162114 -vn -0.563860 -0.815821 -0.128208 -vn -0.516037 -0.856197 -0.024018 -vn 0.999115 0.041078 0.005860 -vn 0.999268 0.036866 0.009339 -vn -0.798791 -0.597980 -0.065584 -vn -0.085543 -0.968596 -0.233375 -vn 0.998840 -0.047578 -0.003204 -vn -0.165990 -0.971129 -0.171270 -vn -0.057222 -0.997742 -0.034883 -vn 0.999207 0.036622 0.014100 -vn -0.895840 -0.438978 -0.068789 -vn -0.785607 -0.618397 0.019715 -vn -0.195471 -0.980560 0.015503 -vn 0.998627 -0.048769 0.018189 -vn -0.965636 -0.259774 -0.002808 -vn -0.036744 -0.998199 0.047029 -vn 0.893124 -0.448347 0.035615 -vn -0.053377 -0.997528 0.045076 -vn 0.127384 -0.989074 0.074068 -vn 0.286538 -0.957549 0.030885 -vn -0.481368 -0.873867 0.067965 -vn 0.999146 0.040071 0.009827 -vn 0.999084 0.039888 0.013886 -vn -0.027955 -0.992798 0.116337 -vn -0.023347 -0.997650 0.063936 -vn 0.320963 -0.920042 0.224586 -vn 0.998993 0.040498 0.017914 -vn -0.787011 -0.604694 0.122166 -vn -0.038575 -0.981384 0.187994 -vn 0.999115 0.037263 0.018799 -vn -0.896512 -0.442946 0.006958 -vn -0.206641 -0.960448 0.186590 -vn 0.998138 -0.045900 0.039491 -vn -0.966491 -0.254067 0.036134 -vn -0.046693 -0.980499 0.190863 -vn 0.598987 -0.799341 0.046968 -vn 0.890927 -0.434187 0.133030 -vn 0.132786 -0.978179 0.159764 -vn -0.057192 -0.981994 0.179876 -vn 0.597552 -0.774041 0.209204 -vn 0.339274 -0.848323 0.406446 -vn -0.491562 -0.858241 0.147496 -vn 0.998871 0.041932 0.021729 -vn -0.565081 -0.786493 0.249062 -vn -0.021790 -0.920469 0.390179 -vn 0.998962 0.038789 0.023316 -vn -0.898312 -0.431593 0.082034 -vn -0.799982 -0.556658 0.223914 -vn -0.020203 -0.945341 0.325388 -vn 0.997436 -0.039033 0.059908 -vn -0.967772 -0.240852 0.073214 -vn 0.169836 -0.959868 0.223090 -vn 0.592792 -0.718802 0.363170 -vn -0.900967 -0.405744 0.153661 -vn -0.969451 -0.220679 0.106998 -vn 0.170904 -0.916013 0.362896 -vn 0.887600 -0.401379 0.225837 -vn 0.883297 -0.351177 0.310526 -vn -0.143468 -0.883145 0.446577 -vn 0.348155 -0.746879 0.566485 -vn -0.635243 -0.684622 0.357341 -vn 0.998688 0.044069 0.025178 -vn -0.824061 -0.487320 0.288766 -vn -0.203467 -0.917539 0.341594 -vn -0.189062 -0.843776 0.502243 -vn 0.998749 0.041169 0.027436 -vn -0.904904 -0.366100 0.217048 -vn 0.028748 -0.876370 0.480758 -vn 0.996460 -0.028382 0.078738 -vn 0.998505 0.044282 0.031068 -vn -0.838893 -0.393567 0.375927 -vn 0.070132 -0.790216 0.608753 -vn 0.995331 -0.014252 0.095279 -vn -0.971435 -0.194281 0.136204 -vn 0.132603 -0.823817 0.551073 -vn 0.585925 -0.635090 0.503311 -vn 0.577715 -0.525712 0.624378 -vn -0.249458 -0.730308 0.635884 -vn -0.677450 -0.511155 0.528886 -vn -0.000641 -0.823328 0.567522 -vn 0.354869 -0.618183 0.701315 -vn 0.998505 0.046815 0.028108 -vn -0.153081 -0.708701 0.688681 -vn 0.015046 -0.693136 0.720603 -vn 0.359874 -0.466201 0.808130 -vn 0.998260 0.050081 0.030427 -vn -0.712210 -0.368603 0.597339 -vn 0.015076 -0.534349 0.845119 -vn 0.998260 0.048097 0.034028 -vn -0.908902 -0.314097 0.274178 -vn -0.837275 -0.318339 0.444472 -vn 0.112522 -0.657094 0.745354 -vn 0.878140 -0.285440 0.383862 -vn 0.994049 0.002838 0.108890 -vn -0.973632 -0.162725 0.159673 -vn 0.079043 -0.651418 0.754570 -vn 0.872341 -0.206641 0.443007 -vn -0.379650 -0.543687 0.748466 -vn -0.475265 -0.251350 0.843135 -vn 0.568499 -0.394848 0.721702 -vn 0.558641 -0.247505 0.791589 -vn -0.732963 -0.233222 0.638997 -vn 0.366466 -0.297952 0.881405 -vn 0.998016 0.053743 0.032044 -vn -0.831690 -0.223701 0.508103 -vn -0.116092 -0.513871 0.849940 -vn -0.092380 -0.363811 0.926847 -vn 0.997955 0.052400 0.036225 -vn -0.912351 -0.254799 0.320383 -vn 0.122623 -0.418348 0.899960 -vn 0.992615 0.022370 0.118992 -vn -0.976012 -0.127201 0.176519 -vn -0.035859 -0.338450 0.940275 -vn -0.916684 -0.186743 0.353252 -vn -0.978454 -0.089053 0.186102 -vn -0.152043 -0.137059 0.978820 -vn 0.866146 -0.117771 0.485672 -vn 0.548509 -0.089358 0.831324 -vn -0.499710 -0.087191 0.861782 -vn -0.712699 -0.118076 0.691427 -vn 0.022614 -0.362712 0.931608 -vn 0.369549 -0.117771 0.921690 -vn 0.997772 0.057619 0.032899 -vn -0.083590 -0.177953 0.980468 -vn 0.997650 0.057070 0.037538 -vn -0.921384 -0.113132 0.371746 -vn 0.063601 -0.211982 0.975188 -vn 0.991150 0.043672 0.125126 -vn 0.997345 0.061953 0.037935 -vn -0.829279 -0.132756 0.542802 -vn -0.926054 -0.037324 0.375500 -vn 0.037690 -0.054811 0.997772 -vn 0.859767 -0.022187 0.510178 -vn 0.989685 0.065889 0.127018 -vn -0.980865 -0.049776 0.188055 -vn -0.245125 -0.018342 0.969298 -vn 0.538499 0.073458 0.839381 -vn -0.552080 -0.018647 0.833552 -vn 0.364238 0.066408 0.928922 -vn -0.711478 -0.011475 0.702597 -vn 0.031343 -0.158574 0.986847 -vn 0.997528 0.061586 0.033021 -vn -0.071932 0.012207 0.997314 -vn 0.029176 0.043703 0.998596 -vn 0.039552 0.239692 0.970031 -vn 0.997314 0.065462 0.032350 -vn -0.835902 -0.023438 0.548357 -vn -0.842280 0.084902 0.532273 -vn -0.048036 0.122135 0.991333 -vn 0.997040 0.066836 0.037324 -vn -0.930479 0.037751 0.364360 -vn -0.014863 0.022034 0.999634 -vn 0.853420 0.076388 0.515549 -vn 0.988281 0.088198 0.124454 -vn -0.983154 -0.010895 0.182287 -vn -0.287851 0.176611 0.941221 -vn 0.847407 0.174261 0.501480 -vn -0.576708 0.166082 0.799860 -vn 0.352794 0.248085 0.902188 -vn -0.722007 0.128758 0.679739 -vn -0.605853 0.304514 0.734947 -vn 0.529008 0.234779 0.815485 -vn 0.337230 0.419202 0.842891 -vn -0.729362 0.259651 0.632893 -vn 0.055849 0.427595 0.902219 -vn 0.997101 0.069124 0.030946 -vn -0.848079 0.188055 0.495346 -vn -0.022523 0.291757 0.956206 -vn 0.996765 0.071535 0.035768 -vn -0.934477 0.109226 0.338755 -vn -0.066775 0.265389 0.961821 -vn 0.986969 0.109684 0.117496 -vn -0.985260 0.026124 0.169042 -vn -0.423841 0.260079 0.867550 -vn 0.520371 0.388379 0.760491 -vn -0.987030 0.059877 0.148778 -vn -0.553056 0.497757 0.668050 -vn 0.841914 0.267617 0.468520 -vn 0.512955 0.528306 0.676534 -vn -0.643544 0.442030 0.624805 -vn 0.324656 0.574297 0.751488 -vn -0.735710 0.378918 0.561357 -vn 0.074831 0.583087 0.808924 -vn 0.996948 0.072420 0.028871 -vn -0.853053 0.282083 0.438978 -vn -0.013337 0.395398 0.918393 -vn 0.996551 0.075838 0.033326 -vn -0.937956 0.174383 0.299692 -vn -0.186468 0.593951 0.782556 -vn 0.985839 0.129490 0.106296 -vn -0.940703 0.230659 0.248634 -vn -0.325968 0.706595 0.628040 -vn 0.837184 0.352794 0.417859 -vn 0.984924 0.146733 0.091311 -vn -0.543962 0.651540 0.528703 -vn 0.507004 0.649251 0.566881 -vn 0.325358 0.705710 0.629353 -vn -0.599200 0.581439 0.550340 -vn 0.996796 0.075259 0.026185 -vn -0.857051 0.363323 0.365307 -vn -0.103153 0.562700 0.820154 -vn 0.996368 0.079592 0.030030 -vn -0.998047 -0.060671 -0.012879 -vn 0.998047 0.060671 0.012879 -vn -0.988464 0.089053 0.122349 -vn -0.740745 0.481979 0.467910 -vn 0.102420 0.732994 0.672445 -vn 0.833399 0.426496 0.351421 -usemtl Body -s 1 -f 7981//5754 7980//5755 7996//5756 -f 7976//5757 7975//5758 7990//5759 -f 7987//5760 7986//5761 8002//5762 -f 7982//5763 7981//5754 7996//5756 -f 7977//5764 7976//5757 7991//5765 -f 7983//5766 7982//5763 7998//5767 -f 7978//5768 7977//5764 7993//5769 -f 7984//5770 7983//5766 7999//5771 -f 7979//5772 7978//5768 7994//5773 -f 7974//5774 7973//5775 7988//5776 -f 7985//5777 7984//5770 8000//5778 -f 7980//5755 7979//5772 7995//5779 -f 7975//5758 7974//5774 7989//5780 -f 7986//5761 7985//5777 8000//5778 -f 8001//5781 8000//5778 8016//5782 -f 7996//5756 7995//5779 8011//5783 -f 7991//5765 7990//5759 8005//5784 -f 8002//5762 8001//5781 8017//5785 -f 7997//5786 7996//5756 8011//5783 -f 7992//5787 7991//5765 8007//5788 -f 7998//5767 7997//5786 8013//5789 -f 7993//5769 7992//5787 8008//5790 -f 7999//5771 7998//5767 8014//5791 -f 7994//5773 7993//5769 8009//5792 -f 7989//5780 7988//5776 8003//5793 -f 8000//5778 7999//5771 8015//5794 -f 7995//5779 7994//5773 8010//5795 -f 7990//5759 7989//5780 8004//5796 -f 8015//5794 8014//5791 8030//5797 -f 8010//5795 8009//5792 8024//5798 -f 8005//5784 8004//5796 8020//5799 -f 8016//5782 8015//5794 8030//5797 -f 8011//5783 8010//5795 8026//5800 -f 8006//5801 8005//5784 8021//5802 -f 8017//5785 8016//5782 8031//5803 -f 8012//5804 8011//5783 8027//5805 -f 8007//5788 8006//5801 8021//5802 -f 8013//5789 8012//5804 8028//5806 -f 8008//5790 8007//5788 8023//5807 -f 8014//5791 8013//5789 8029//5808 -f 8009//5792 8008//5790 8024//5798 -f 8004//5796 8003//5793 8019//5809 -f 8029//5808 8028//5806 8044//5810 -f 8024//5798 8023//5807 8039//5811 -f 8019//5809 8018//5812 8034//5813 -f 8030//5797 8029//5808 8045//5814 -f 8025//5815 8024//5798 8039//5811 -f 8020//5799 8019//5809 8035//5816 -f 8031//5803 8030//5797 8046//5817 -f 8026//5800 8025//5815 8041//5818 -f 8021//5802 8020//5799 8036//5819 -f 8032//5820 8031//5803 8047//5821 -f 8027//5805 8026//5800 8042//5822 -f 8022//5823 8021//5802 8037//5824 -f 8028//5806 8027//5805 8043//5825 -f 8023//5807 8022//5823 8038//5826 -f 8037//5824 8036//5819 8052//5827 -f 8043//5825 8042//5822 8058//5828 -f 8038//5826 8037//5824 8053//5829 -f 8044//5810 8043//5825 8059//5830 -f 8039//5811 8038//5826 8054//5831 -f 8034//5813 8033//5832 8049//5833 -f 8045//5814 8044//5810 8059//5830 -f 8040//5834 8039//5811 8055//5835 -f 8035//5816 8034//5813 8050//5836 -f 8046//5817 8045//5814 8060//5837 -f 8041//5818 8040//5834 8056//5838 -f 8036//5819 8035//5816 8051//5839 -f 8047//5821 8046//5817 8062//5840 -f 8042//5822 8041//5818 8057//5841 -f 8056//5838 8055//5835 8070//5842 -f 8051//5839 8050//5836 8066//5843 -f 8062//5840 8061//5844 8077//5845 -f 8057//5841 8056//5838 8071//5846 -f 8052//5827 8051//5839 8066//5843 -f 8058//5828 8057//5841 8073//5847 -f 8053//5829 8052//5827 8067//5848 -f 8059//5830 8058//5828 8074//5849 -f 8054//5831 8053//5829 8068//5850 -f 8049//5833 8048//5851 8064//5852 -f 8060//5837 8059//5830 8075//5853 -f 8055//5835 8054//5831 8069//5854 -f 8050//5836 8049//5833 8065//5855 -f 8061//5844 8060//5837 8076//5856 -f 8075//5853 8074//5849 8090//5857 -f 8070//5842 8069//5854 8084//5858 -f 8065//5855 8064//5852 8080//5859 -f 8076//5856 8075//5853 8091//5860 -f 8071//5846 8070//5842 8085//5861 -f 8066//5843 8065//5855 8081//5862 -f 8077//5845 8076//5856 8092//5863 -f 8072//5864 8071//5846 8086//5865 -f 8067//5848 8066//5843 8082//5866 -f 8073//5847 8072//5864 8088//5867 -f 8068//5850 8067//5848 8083//5868 -f 8074//5849 8073//5847 8088//5867 -f 8069//5854 8068//5850 8083//5868 -f 8064//5852 8063//5869 8079//5870 -f 8089//5871 8088//5867 8103//5872 -f 8084//5858 8083//5868 8099//5873 -f 8079//5870 8078//5874 8094//5875 -f 8090//5857 8089//5871 8105//5876 -f 8085//5861 8084//5858 8099//5873 -f 8080//5859 8079//5870 8095//5877 -f 8091//5860 8090//5857 8106//5878 -f 8086//5865 8085//5861 8100//5879 -f 8081//5862 8080//5859 8096//5880 -f 8092//5863 8091//5860 8107//5881 -f 8087//5882 8086//5865 8102//5883 -f 8082//5866 8081//5862 8097//5884 -f 8088//5867 8087//5882 8103//5872 -f 8083//5868 8082//5866 8098//5885 -f 8097//5884 8096//5880 8112//5886 -f 8103//5872 8102//5883 8118//5887 -f 8098//5885 8097//5884 8112//5886 -f 8104//5888 8103//5872 8119//5889 -f 8099//5873 8098//5885 8114//5890 -f 8094//5875 8093//5891 8109//5892 -f 8105//5876 8104//5888 8120//5893 -f 8100//5879 8099//5873 8115//5894 -f 8095//5877 8094//5875 8110//5895 -f 8106//5878 8105//5876 8121//5896 -f 8101//5897 8100//5879 8116//5898 -f 8096//5880 8095//5877 8111//5899 -f 8107//5881 8106//5878 8122//5900 -f 8102//5883 8101//5897 8117//5901 -f 8116//5898 8115//5894 8131//5902 -f 8111//5899 8110//5895 8126//5903 -f 8122//5900 8121//5896 8137//5904 -f 8117//5901 8116//5898 8132//5905 -f 8112//5886 8111//5899 8127//5906 -f 8118//5887 8117//5901 8133//5907 -f 8113//5908 8112//5886 8127//5906 -f 8119//5889 8118//5887 8134//5909 -f 8114//5890 8113//5908 8129//5910 -f 8109//5892 8108//5911 8124//5912 -f 8120//5893 8119//5889 8134//5909 -f 8115//5894 8114//5890 8130//5913 -f 8110//5895 8109//5892 8125//5914 -f 8121//5896 8120//5893 8136//5915 -f 8135//5916 8134//5909 8150//5917 -f 8130//5913 8129//5910 8144//5918 -f 8125//5914 8124//5912 8140//5919 -f 8136//5915 8135//5916 8150//5917 -f 8131//5902 8130//5913 8145//5920 -f 8126//5903 8125//5914 8141//5921 -f 8137//5904 8136//5915 8152//5922 -f 8132//5905 8131//5902 8146//5923 -f 8127//5906 8126//5903 8141//5921 -f 8133//5907 8132//5905 8148//5924 -f 8128//5925 8127//5906 8143//5926 -f 8134//5909 8133//5907 8149//5927 -f 8129//5910 8128//5925 8143//5926 -f 8124//5912 8123//5928 8139//5929 -f 8149//5927 8148//5924 8164//5930 -f 8144//5918 8143//5926 8158//5931 -f 8139//5929 8138//5932 8154//5933 -f 8150//5917 8149//5927 8165//5934 -f 8145//5920 8144//5918 8159//5935 -f 8140//5919 8139//5929 8155//5936 -f 8151//5937 8150//5917 8166//5938 -f 8146//5923 8145//5920 8160//5939 -f 8141//5921 8140//5919 8156//5940 -f 8152//5922 8151//5937 8167//5941 -f 8147//5942 8146//5923 8161//5943 -f 8142//5944 8141//5921 8156//5940 -f 8148//5924 8147//5942 8162//5945 -f 8143//5926 8142//5944 8158//5931 -f 8163//5946 8162//5945 8177//5947 -f 8158//5931 8157//5948 8173//5949 -f 8164//5930 8163//5946 8178//5950 -f 8159//5935 8158//5931 8174//5951 -f 8154//5933 8153//5952 8169//5953 -f 8165//5934 8164//5930 8179//5954 -f 8160//5939 8159//5935 8174//5951 -f 8155//5936 8154//5933 8170//5955 -f 8166//5938 8165//5934 8181//5956 -f 8161//5943 8160//5939 8175//5957 -f 8156//5940 8155//5936 8171//5958 -f 8167//5941 8166//5938 8182//5959 -f 8162//5945 8161//5943 8176//5960 -f 8157//5948 8156//5940 8171//5958 -f 8171//5958 8170//5955 8186//5961 -f 8182//5959 8181//5956 8197//5962 -f 8177//5947 8176//5960 8191//5963 -f 8172//5964 8171//5958 8186//5961 -f 8178//5950 8177//5947 8192//5965 -f 8173//5949 8172//5964 8187//5966 -f 8179//5954 8178//5950 8193//5967 -f 8174//5951 8173//5949 8188//5968 -f 8169//5953 8168//5969 8184//5970 -f 8180//5971 8179//5954 8194//5972 -f 8175//5957 8174//5951 8189//5973 -f 8170//5955 8169//5953 8185//5974 -f 8181//5956 8180//5971 8196//5975 -f 8176//5960 8175//5957 8190//5976 -f 8190//5976 8189//5973 8204//5977 -f 8185//5974 8184//5970 8200//5978 -f 8196//5975 8195//5979 8210//5980 -f 8191//5963 8190//5976 8205//5981 -f 8186//5961 8185//5974 8201//5982 -f 8197//5962 8196//5975 8212//5983 -f 8192//5965 8191//5963 8206//5984 -f 8187//5966 8186//5961 8202//5985 -f 8193//5967 8192//5965 8207//5986 -f 8188//5968 8187//5966 8202//5985 -f 8194//5972 8193//5967 8208//5987 -f 8189//5973 8188//5968 8203//5988 -f 8184//5970 8183//5989 8199//5990 -f 8195//5979 8194//5972 8209//5991 -f 8209//5991 8208//5987 8223//5992 -f 8204//5977 8203//5988 8218//5993 -f 8199//5990 8198//5994 8214//5995 -f 8210//5980 8209//5991 8224//5996 -f 8205//5981 8204//5977 8219//5997 -f 8200//5978 8199//5990 8215//5998 -f 8211//5999 8210//5980 8226//6000 -f 8206//5984 8205//5981 8220//6001 -f 8201//5982 8200//5978 8216//6002 -f 8212//5983 8211//5999 8227//6003 -f 8207//5986 8206//5984 8221//6004 -f 8202//5985 8201//5982 8217//6005 -f 8208//5987 8207//5986 8222//6006 -f 8203//5988 8202//5985 8217//6005 -f 8223//5992 8222//6006 8237//6007 -f 8218//5993 8217//6005 8232//6008 -f 8224//5996 8223//5992 8238//6009 -f 8219//5997 8218//5993 8233//6010 -f 8214//5995 8213//6011 8229//6012 -f 8225//6013 8224//5996 8240//6014 -f 8220//6001 8219//5997 8234//6015 -f 8215//5998 8214//5995 8230//6016 -f 8226//6000 8225//6013 8240//6014 -f 8221//6004 8220//6001 8235//6017 -f 8216//6002 8215//5998 8231//6018 -f 8227//6003 8226//6000 8241//6019 -f 8222//6006 8221//6004 8236//6020 -f 8217//6005 8216//6002 8232//6008 -f 8231//6018 8230//6016 8246//6021 -f 8242//6022 8241//6019 8257//6023 -f 8237//6007 8236//6020 8251//6024 -f 8232//6008 8231//6018 8247//6025 -f 8238//6009 8237//6007 8252//6026 -f 8233//6010 8232//6008 8248//6027 -f 8239//6028 8238//6009 8254//6029 -f 8234//6015 8233//6010 8248//6027 -f 8229//6012 8228//6030 8244//6031 -f 8240//6014 8239//6028 8255//6032 -f 8235//6017 8234//6015 8249//6033 -f 8230//6016 8229//6012 8245//6034 -f 8241//6019 8240//6014 8255//6032 -f 8236//6020 8235//6017 8250//6035 -f 8250//6035 8249//6033 8264//6036 -f 8245//6034 8244//6031 8259//6037 -f 8256//6038 8255//6032 8270//6039 -f 8251//6024 8250//6035 8265//6040 -f 8246//6021 8245//6034 8260//6041 -f 8257//6023 8256//6038 8272//6042 -f 8252//6026 8251//6024 8266//6043 -f 8247//6025 8246//6021 8261//6044 -f 8253//6045 8252//6026 8267//6046 -f 8248//6027 8247//6025 8263//6047 -f 8254//6029 8253//6045 8269//6048 -f 8249//6033 8248//6027 8263//6047 -f 8244//6031 8243//6049 8258//6050 -f 8255//6032 8254//6029 8270//6039 -f 8269//6048 8268//6051 8283//6052 -f 8264//6036 8263//6047 8278//6053 -f 8259//6037 8258//6050 8273//6054 -f 8270//6039 8269//6048 8285//6055 -f 8265//6040 8264//6036 8279//6056 -f 8260//6041 8259//6037 8274//6057 -f 8271//6058 8270//6039 8285//6055 -f 8266//6043 8265//6040 8280//6059 -f 8261//6044 8260//6041 8275//6060 -f 8272//6042 8271//6058 8287//6061 -f 8267//6046 8266//6043 8281//6062 -f 8262//6063 8261//6044 8276//6064 -f 8268//6051 8267//6046 8282//6065 -f 8263//6047 8262//6063 8278//6053 -f 8283//6052 8282//6065 8298//6066 -f 8278//6053 8277//6067 8293//6068 -f 8284//6069 8283//6052 8298//6066 -f 8279//6056 8278//6053 8293//6068 -f 8274//6057 8273//6054 8288//6070 -f 8285//6055 8284//6069 8299//6071 -f 8280//6059 8279//6056 8294//6072 -f 8275//6060 8274//6057 8289//6073 -f 8286//6074 8285//6055 8300//6075 -f 8281//6062 8280//6059 8296//6076 -f 8276//6064 8275//6060 8290//6077 -f 8287//6061 8286//6074 8302//6078 -f 8282//6065 8281//6062 8297//6079 -f 8277//6067 8276//6064 8292//6080 -f 8302//6078 8301//6081 8318//6082 -f 8297//6079 8296//6076 8313//6083 -f 8292//6080 8291//6084 8307//6085 -f 8298//6066 8297//6079 8314//6086 -f 8293//6068 8292//6080 8309//6087 -f 8299//6071 8298//6066 8315//6088 -f 8294//6072 8293//6068 8309//6087 -f 8289//6073 8288//6070 8304//6089 -f 8300//6075 8299//6071 8316//6090 -f 8295//6091 8294//6072 8311//6092 -f 8290//6077 8289//6073 8305//6093 -f 8301//6081 8300//6075 8317//6094 -f 8296//6076 8295//6091 8312//6095 -f 8291//6084 8290//6077 8306//6096 -f 8306//6096 8305//6093 8320//6097 -f 8317//6094 8316//6090 8331//6098 -f 8312//6095 8311//6092 8327//6099 -f 8307//6085 8306//6096 8321//6100 -f 8318//6082 8317//6094 8333//6101 -f 8313//6083 8312//6095 8328//6102 -f 8308//6103 8307//6085 8323//6104 -f 8314//6086 8313//6083 8329//6105 -f 8309//6087 8308//6103 8323//6104 -f 8315//6088 8314//6086 8330//6106 -f 8310//6107 8309//6087 8324//6108 -f 8305//6093 8304//6089 8319//6109 -f 8316//6090 8315//6088 8331//6098 -f 8311//6092 8310//6107 8326//6110 -f 8325//6111 8324//6108 8339//6112 -f 8320//6097 8319//6109 8334//6113 -f 8331//6098 8330//6106 8345//6114 -f 8326//6110 8325//6111 8340//6115 -f 8321//6100 8320//6097 8335//6116 -f 8332//6117 8331//6098 8346//6118 -f 8327//6099 8326//6110 8342//6119 -f 8322//6120 8321//6100 8336//6121 -f 8333//6101 8332//6117 8348//6122 -f 8328//6102 8327//6099 8343//6123 -f 8323//6104 8322//6120 8337//6124 -f 8329//6105 8328//6102 8344//6125 -f 8324//6108 8323//6104 8339//6112 -f 8330//6106 8329//6105 8345//6114 -f 8344//6125 8343//6123 8359//6126 -f 8339//6112 8338//6127 8353//6128 -f 8345//6114 8344//6125 8360//6129 -f 8340//6115 8339//6112 8354//6130 -f 8335//6116 8334//6113 8349//6131 -f 8346//6118 8345//6114 8361//6132 -f 8341//6133 8340//6115 8356//6134 -f 8336//6121 8335//6116 8350//6135 -f 8347//6136 8346//6118 8361//6132 -f 8342//6119 8341//6133 8357//6137 -f 8337//6124 8336//6121 8351//6138 -f 8348//6122 8347//6136 8363//6139 -f 8343//6123 8342//6119 8358//6140 -f 8338//6127 8337//6124 8353//6128 -f 8363//6139 8362//6141 8378//6142 -f 8358//6140 8357//6137 8373//6143 -f 8353//6128 8352//6144 8368//6145 -f 8359//6126 8358//6140 8374//6146 -f 8354//6130 8353//6128 8368//6145 -f 8360//6129 8359//6126 8375//6147 -f 8355//6148 8354//6130 8369//6149 -f 8350//6135 8349//6131 8364//6150 -f 8361//6132 8360//6129 8375//6147 -f 8356//6134 8355//6148 8371//6151 -f 8351//6138 8350//6135 8365//6152 -f 8362//6141 8361//6132 8377//6153 -f 8357//6137 8356//6134 8372//6154 -f 8352//6144 8351//6138 8366//6155 -f 8366//6155 8365//6152 8380//6156 -f 8377//6153 8376//6157 8392//6158 -f 8372//6154 8371//6151 8387//6159 -f 8367//6160 8366//6155 8381//6161 -f 8378//6142 8377//6153 8393//6162 -f 8373//6143 8372//6154 8388//6163 -f 8368//6145 8367//6160 8383//6164 -f 8374//6146 8373//6143 8389//6165 -f 8369//6149 8368//6145 8384//6166 -f 8375//6147 8374//6146 8390//6167 -f 8370//6168 8369//6149 8384//6166 -f 8365//6152 8364//6150 8379//6169 -f 8376//6157 8375//6147 8390//6167 -f 8371//6151 8370//6168 8386//6170 -f 8385//6171 8384//6166 8400//6172 -f 8380//6156 8379//6169 8394//6173 -f 8391//6174 8390//6167 8406//6175 -f 8386//6170 8385//6171 8401//6176 -f 8381//6161 8380//6156 8395//6177 -f 8392//6158 8391//6174 8407//6178 -f 8387//6159 8386//6170 8402//6179 -f 8382//6180 8381//6161 8396//6181 -f 8393//6162 8392//6158 8408//6182 -f 8388//6163 8387//6159 8403//6183 -f 8383//6164 8382//6180 8397//6184 -f 8389//6165 8388//6163 8404//6185 -f 8384//6166 8383//6164 8399//6186 -f 8390//6167 8389//6165 8405//6187 -f 8404//6185 8403//6183 8419//6188 -f 8399//6186 8398//6189 8414//6190 -f 8405//6187 8404//6185 8420//6191 -f 8400//6172 8399//6186 8415//6192 -f 8395//6177 8394//6173 8409//6193 -f 8406//6175 8405//6187 8421//6194 -f 8401//6176 8400//6172 8416//6195 -f 8396//6181 8395//6177 8410//6196 -f 8407//6178 8406//6175 8422//6197 -f 8402//6179 8401//6176 8417//6198 -f 8397//6184 8396//6181 8411//6199 -f 8408//6182 8407//6178 8423//6200 -f 8403//6183 8402//6179 8418//6201 -f 8398//6189 8397//6184 8413//6202 -f 8423//6200 8422//6197 8439//6203 -f 8418//6201 8417//6198 8434//6204 -f 8413//6202 8412//6205 8429//6206 -f 8419//6188 8418//6201 8435//6207 -f 8414//6190 8413//6202 8430//6208 -f 8420//6191 8419//6188 8436//6209 -f 8415//6192 8414//6190 8431//6210 -f 8410//6196 8409//6193 8425//6211 -f 8421//6194 8420//6191 8437//6212 -f 8416//6195 8415//6192 8432//6213 -f 8411//6199 8410//6196 8426//6214 -f 8422//6197 8421//6194 8438//6215 -f 8417//6198 8416//6195 8433//6216 -f 8412//6205 8411//6199 8427//6217 -f 8438//6215 8437//6212 8453//6218 -f 8433//6216 8432//6213 8448//6219 -f 8428//6220 8427//6217 8442//6221 -f 8439//6203 8438//6215 8453//6218 -f 8434//6204 8433//6216 8449//6222 -f 8429//6206 8428//6220 8444//6223 -f 8435//6207 8434//6204 8449//6222 -f 8430//6208 8429//6206 8445//6224 -f 8436//6209 8435//6207 8450//6225 -f 8431//6210 8430//6208 8445//6224 -f 8426//6214 8425//6211 8440//6226 -f 8437//6212 8436//6209 8452//6227 -f 8432//6213 8431//6210 8447//6228 -f 8427//6217 8426//6214 8441//6229 -f 8303//6230 7987//5760 8002//5762 -f 7973//5775 8424//6231 7988//5776 -f 8303//6230 8002//5762 8017//5785 -f 7988//5776 8424//6231 8003//5793 -f 8303//6230 8017//5785 8032//5820 -f 8003//5793 8424//6231 8018//5812 -f 8018//5812 8424//6231 8033//5832 -f 8303//6230 8032//5820 8047//5821 -f 8303//6230 8047//5821 8062//5840 -f 8033//5832 8424//6231 8048//5851 -f 8303//6230 8062//5840 8077//5845 -f 8048//5851 8424//6231 8063//5869 -f 8303//6230 8077//5845 8092//5863 -f 8063//5869 8424//6231 8078//5874 -f 8078//5874 8424//6231 8093//5891 -f 8303//6230 8092//5863 8107//5881 -f 8303//6230 8107//5881 8122//5900 -f 8093//5891 8424//6231 8108//5911 -f 8303//6230 8122//5900 8137//5904 -f 8108//5911 8424//6231 8123//5928 -f 8303//6230 8137//5904 8152//5922 -f 8123//5928 8424//6231 8138//5932 -f 8303//6230 8152//5922 8167//5941 -f 8138//5932 8424//6231 8153//5952 -f 8303//6230 8167//5941 8182//5959 -f 8153//5952 8424//6231 8168//5969 -f 8303//6230 8182//5959 8197//5962 -f 8168//5969 8424//6231 8183//5989 -f 8303//6230 8197//5962 8212//5983 -f 8183//5989 8424//6231 8198//5994 -f 8303//6230 8212//5983 8227//6003 -f 8198//5994 8424//6231 8213//6011 -f 8303//6230 8227//6003 8242//6022 -f 8213//6011 8424//6231 8228//6030 -f 8303//6230 8242//6022 8257//6023 -f 8228//6030 8424//6231 8243//6049 -f 8303//6230 8257//6023 8272//6042 -f 8243//6049 8424//6231 8258//6050 -f 8303//6230 8272//6042 8287//6061 -f 8258//6050 8424//6231 8273//6054 -f 8303//6230 8287//6061 8302//6078 -f 8273//6054 8424//6231 8288//6070 -f 8303//6230 8302//6078 8318//6082 -f 8288//6070 8424//6231 8304//6089 -f 8303//6230 8318//6082 8333//6101 -f 8304//6089 8424//6231 8319//6109 -f 8303//6230 8333//6101 8348//6122 -f 8319//6109 8424//6231 8334//6113 -f 8334//6113 8424//6231 8349//6131 -f 8303//6230 8348//6122 8363//6139 -f 8303//6230 8363//6139 8378//6142 -f 8349//6131 8424//6231 8364//6150 -f 8303//6230 8378//6142 8393//6162 -f 8364//6150 8424//6231 8379//6169 -f 8303//6230 8393//6162 8408//6182 -f 8379//6169 8424//6231 8394//6173 -f 8394//6173 8424//6231 8409//6193 -f 8303//6230 8408//6182 8423//6200 -f 8303//6230 8423//6200 8439//6203 -f 8409//6193 8424//6231 8425//6211 -f 8303//6230 8439//6203 8454//6232 -f 8425//6211 8424//6231 8440//6226 -f 8441//6229 8440//6226 7973//5775 -f 8452//6227 8451//6233 7984//5770 -f 8447//6228 8446//6234 7979//5772 -f 8442//6221 8441//6229 7974//5774 -f 8453//6218 8452//6227 7985//5777 -f 8448//6219 8447//6228 7981//5754 -f 8443//6235 8442//6221 7975//5758 -f 8454//6232 8453//6218 7986//5761 -f 8449//6222 8448//6219 7981//5754 -f 8444//6223 8443//6235 7977//5764 -f 8303//6230 8454//6232 7987//5760 -f 8450//6225 8449//6222 7982//5763 -f 8445//6224 8444//6223 7978//5768 -f 8440//6226 8424//6231 7973//5775 -f 8451//6233 8450//6225 7983//5766 -f 8446//6234 8445//6224 7978//5768 -f 7980//5755 7995//5779 7996//5756 -f 7991//5765 7976//5757 7990//5759 -f 7986//5761 8001//5781 8002//5762 -f 7997//5786 7982//5763 7996//5756 -f 7992//5787 7977//5764 7991//5765 -f 7982//5763 7997//5786 7998//5767 -f 7977//5764 7992//5787 7993//5769 -f 7983//5766 7998//5767 7999//5771 -f 7978//5768 7993//5769 7994//5773 -f 7989//5780 7974//5774 7988//5776 -f 7984//5770 7999//5771 8000//5778 -f 7979//5772 7994//5773 7995//5779 -f 7990//5759 7975//5758 7989//5780 -f 8001//5781 7986//5761 8000//5778 -f 8000//5778 8015//5794 8016//5782 -f 7995//5779 8010//5795 8011//5783 -f 8006//5801 7991//5765 8005//5784 -f 8001//5781 8016//5782 8017//5785 -f 8012//5804 7997//5786 8011//5783 -f 7991//5765 8006//5801 8007//5788 -f 7997//5786 8012//5804 8013//5789 -f 7992//5787 8007//5788 8008//5790 -f 7998//5767 8013//5789 8014//5791 -f 7993//5769 8008//5790 8009//5792 -f 8004//5796 7989//5780 8003//5793 -f 7999//5771 8014//5791 8015//5794 -f 7994//5773 8009//5792 8010//5795 -f 8005//5784 7990//5759 8004//5796 -f 8014//5791 8029//5808 8030//5797 -f 8025//5815 8010//5795 8024//5798 -f 8004//5796 8019//5809 8020//5799 -f 8031//5803 8016//5782 8030//5797 -f 8010//5795 8025//5815 8026//5800 -f 8005//5784 8020//5799 8021//5802 -f 8032//5820 8017//5785 8031//5803 -f 8011//5783 8026//5800 8027//5805 -f 8022//5823 8007//5788 8021//5802 -f 8012//5804 8027//5805 8028//5806 -f 8007//5788 8022//5823 8023//5807 -f 8013//5789 8028//5806 8029//5808 -f 8008//5790 8023//5807 8024//5798 -f 8003//5793 8018//5812 8019//5809 -f 8028//5806 8043//5825 8044//5810 -f 8023//5807 8038//5826 8039//5811 -f 8018//5812 8033//5832 8034//5813 -f 8029//5808 8044//5810 8045//5814 -f 8040//5834 8025//5815 8039//5811 -f 8019//5809 8034//5813 8035//5816 -f 8030//5797 8045//5814 8046//5817 -f 8025//5815 8040//5834 8041//5818 -f 8020//5799 8035//5816 8036//5819 -f 8031//5803 8046//5817 8047//5821 -f 8026//5800 8041//5818 8042//5822 -f 8021//5802 8036//5819 8037//5824 -f 8027//5805 8042//5822 8043//5825 -f 8022//5823 8037//5824 8038//5826 -f 8036//5819 8051//5839 8052//5827 -f 8042//5822 8057//5841 8058//5828 -f 8037//5824 8052//5827 8053//5829 -f 8043//5825 8058//5828 8059//5830 -f 8038//5826 8053//5829 8054//5831 -f 8033//5832 8048//5851 8049//5833 -f 8060//5837 8045//5814 8059//5830 -f 8039//5811 8054//5831 8055//5835 -f 8034//5813 8049//5833 8050//5836 -f 8061//5844 8046//5817 8060//5837 -f 8040//5834 8055//5835 8056//5838 -f 8035//5816 8050//5836 8051//5839 -f 8046//5817 8061//5844 8062//5840 -f 8041//5818 8056//5838 8057//5841 -f 8071//5846 8056//5838 8070//5842 -f 8050//5836 8065//5855 8066//5843 -f 8061//5844 8076//5856 8077//5845 -f 8072//5864 8057//5841 8071//5846 -f 8067//5848 8052//5827 8066//5843 -f 8057//5841 8072//5864 8073//5847 -f 8068//5850 8053//5829 8067//5848 -f 8058//5828 8073//5847 8074//5849 -f 8069//5854 8054//5831 8068//5850 -f 8048//5851 8063//5869 8064//5852 -f 8059//5830 8074//5849 8075//5853 -f 8070//5842 8055//5835 8069//5854 -f 8049//5833 8064//5852 8065//5855 -f 8060//5837 8075//5853 8076//5856 -f 8074//5849 8089//5871 8090//5857 -f 8085//5861 8070//5842 8084//5858 -f 8064//5852 8079//5870 8080//5859 -f 8075//5853 8090//5857 8091//5860 -f 8086//5865 8071//5846 8085//5861 -f 8065//5855 8080//5859 8081//5862 -f 8076//5856 8091//5860 8092//5863 -f 8087//5882 8072//5864 8086//5865 -f 8066//5843 8081//5862 8082//5866 -f 8072//5864 8087//5882 8088//5867 -f 8067//5848 8082//5866 8083//5868 -f 8089//5871 8074//5849 8088//5867 -f 8084//5858 8069//5854 8083//5868 -f 8063//5869 8078//5874 8079//5870 -f 8104//5888 8089//5871 8103//5872 -f 8083//5868 8098//5885 8099//5873 -f 8078//5874 8093//5891 8094//5875 -f 8089//5871 8104//5888 8105//5876 -f 8100//5879 8085//5861 8099//5873 -f 8079//5870 8094//5875 8095//5877 -f 8090//5857 8105//5876 8106//5878 -f 8101//5897 8086//5865 8100//5879 -f 8080//5859 8095//5877 8096//5880 -f 8091//5860 8106//5878 8107//5881 -f 8086//5865 8101//5897 8102//5883 -f 8081//5862 8096//5880 8097//5884 -f 8087//5882 8102//5883 8103//5872 -f 8082//5866 8097//5884 8098//5885 -f 8096//5880 8111//5899 8112//5886 -f 8102//5883 8117//5901 8118//5887 -f 8113//5908 8098//5885 8112//5886 -f 8103//5872 8118//5887 8119//5889 -f 8098//5885 8113//5908 8114//5890 -f 8093//5891 8108//5911 8109//5892 -f 8104//5888 8119//5889 8120//5893 -f 8099//5873 8114//5890 8115//5894 -f 8094//5875 8109//5892 8110//5895 -f 8105//5876 8120//5893 8121//5896 -f 8100//5879 8115//5894 8116//5898 -f 8095//5877 8110//5895 8111//5899 -f 8106//5878 8121//5896 8122//5900 -f 8101//5897 8116//5898 8117//5901 -f 8115//5894 8130//5913 8131//5902 -f 8110//5895 8125//5914 8126//5903 -f 8121//5896 8136//5915 8137//5904 -f 8116//5898 8131//5902 8132//5905 -f 8111//5899 8126//5903 8127//5906 -f 8117//5901 8132//5905 8133//5907 -f 8128//5925 8113//5908 8127//5906 -f 8118//5887 8133//5907 8134//5909 -f 8113//5908 8128//5925 8129//5910 -f 8108//5911 8123//5928 8124//5912 -f 8135//5916 8120//5893 8134//5909 -f 8114//5890 8129//5910 8130//5913 -f 8109//5892 8124//5912 8125//5914 -f 8120//5893 8135//5916 8136//5915 -f 8134//5909 8149//5927 8150//5917 -f 8145//5920 8130//5913 8144//5918 -f 8124//5912 8139//5929 8140//5919 -f 8151//5937 8136//5915 8150//5917 -f 8146//5923 8131//5902 8145//5920 -f 8125//5914 8140//5919 8141//5921 -f 8136//5915 8151//5937 8152//5922 -f 8147//5942 8132//5905 8146//5923 -f 8142//5944 8127//5906 8141//5921 -f 8132//5905 8147//5942 8148//5924 -f 8127//5906 8142//5944 8143//5926 -f 8133//5907 8148//5924 8149//5927 -f 8144//5918 8129//5910 8143//5926 -f 8123//5928 8138//5932 8139//5929 -f 8148//5924 8163//5946 8164//5930 -f 8159//5935 8144//5918 8158//5931 -f 8138//5932 8153//5952 8154//5933 -f 8149//5927 8164//5930 8165//5934 -f 8160//5939 8145//5920 8159//5935 -f 8139//5929 8154//5933 8155//5936 -f 8150//5917 8165//5934 8166//5938 -f 8161//5943 8146//5923 8160//5939 -f 8140//5919 8155//5936 8156//5940 -f 8151//5937 8166//5938 8167//5941 -f 8162//5945 8147//5942 8161//5943 -f 8157//5948 8142//5944 8156//5940 -f 8163//5946 8148//5924 8162//5945 -f 8142//5944 8157//5948 8158//5931 -f 8178//5950 8163//5946 8177//5947 -f 8157//5948 8172//5964 8173//5949 -f 8179//5954 8164//5930 8178//5950 -f 8158//5931 8173//5949 8174//5951 -f 8153//5952 8168//5969 8169//5953 -f 8180//5971 8165//5934 8179//5954 -f 8175//5957 8160//5939 8174//5951 -f 8154//5933 8169//5953 8170//5955 -f 8165//5934 8180//5971 8181//5956 -f 8176//5960 8161//5943 8175//5957 -f 8155//5936 8170//5955 8171//5958 -f 8166//5938 8181//5956 8182//5959 -f 8177//5947 8162//5945 8176//5960 -f 8172//5964 8157//5948 8171//5958 -f 8170//5955 8185//5974 8186//5961 -f 8181//5956 8196//5975 8197//5962 -f 8192//5965 8177//5947 8191//5963 -f 8187//5966 8172//5964 8186//5961 -f 8193//5967 8178//5950 8192//5965 -f 8188//5968 8173//5949 8187//5966 -f 8194//5972 8179//5954 8193//5967 -f 8189//5973 8174//5951 8188//5968 -f 8168//5969 8183//5989 8184//5970 -f 8195//5979 8180//5971 8194//5972 -f 8190//5976 8175//5957 8189//5973 -f 8169//5953 8184//5970 8185//5974 -f 8180//5971 8195//5979 8196//5975 -f 8191//5963 8176//5960 8190//5976 -f 8205//5981 8190//5976 8204//5977 -f 8184//5970 8199//5990 8200//5978 -f 8211//5999 8196//5975 8210//5980 -f 8206//5984 8191//5963 8205//5981 -f 8185//5974 8200//5978 8201//5982 -f 8196//5975 8211//5999 8212//5983 -f 8207//5986 8192//5965 8206//5984 -f 8186//5961 8201//5982 8202//5985 -f 8208//5987 8193//5967 8207//5986 -f 8203//5988 8188//5968 8202//5985 -f 8209//5991 8194//5972 8208//5987 -f 8204//5977 8189//5973 8203//5988 -f 8183//5989 8198//5994 8199//5990 -f 8210//5980 8195//5979 8209//5991 -f 8224//5996 8209//5991 8223//5992 -f 8219//5997 8204//5977 8218//5993 -f 8198//5994 8213//6011 8214//5995 -f 8225//6013 8210//5980 8224//5996 -f 8220//6001 8205//5981 8219//5997 -f 8199//5990 8214//5995 8215//5998 -f 8210//5980 8225//6013 8226//6000 -f 8221//6004 8206//5984 8220//6001 -f 8200//5978 8215//5998 8216//6002 -f 8211//5999 8226//6000 8227//6003 -f 8222//6006 8207//5986 8221//6004 -f 8201//5982 8216//6002 8217//6005 -f 8223//5992 8208//5987 8222//6006 -f 8218//5993 8203//5988 8217//6005 -f 8238//6009 8223//5992 8237//6007 -f 8233//6010 8218//5993 8232//6008 -f 8239//6028 8224//5996 8238//6009 -f 8234//6015 8219//5997 8233//6010 -f 8213//6011 8228//6030 8229//6012 -f 8224//5996 8239//6028 8240//6014 -f 8235//6017 8220//6001 8234//6015 -f 8214//5995 8229//6012 8230//6016 -f 8241//6019 8226//6000 8240//6014 -f 8236//6020 8221//6004 8235//6017 -f 8215//5998 8230//6016 8231//6018 -f 8242//6022 8227//6003 8241//6019 -f 8237//6007 8222//6006 8236//6020 -f 8216//6002 8231//6018 8232//6008 -f 8230//6016 8245//6034 8246//6021 -f 8241//6019 8256//6038 8257//6023 -f 8252//6026 8237//6007 8251//6024 -f 8231//6018 8246//6021 8247//6025 -f 8253//6045 8238//6009 8252//6026 -f 8232//6008 8247//6025 8248//6027 -f 8238//6009 8253//6045 8254//6029 -f 8249//6033 8234//6015 8248//6027 -f 8228//6030 8243//6049 8244//6031 -f 8239//6028 8254//6029 8255//6032 -f 8250//6035 8235//6017 8249//6033 -f 8229//6012 8244//6031 8245//6034 -f 8256//6038 8241//6019 8255//6032 -f 8251//6024 8236//6020 8250//6035 -f 8265//6040 8250//6035 8264//6036 -f 8260//6041 8245//6034 8259//6037 -f 8271//6058 8256//6038 8270//6039 -f 8266//6043 8251//6024 8265//6040 -f 8261//6044 8246//6021 8260//6041 -f 8256//6038 8271//6058 8272//6042 -f 8267//6046 8252//6026 8266//6043 -f 8262//6063 8247//6025 8261//6044 -f 8268//6051 8253//6045 8267//6046 -f 8247//6025 8262//6063 8263//6047 -f 8253//6045 8268//6051 8269//6048 -f 8264//6036 8249//6033 8263//6047 -f 8259//6037 8244//6031 8258//6050 -f 8254//6029 8269//6048 8270//6039 -f 8284//6069 8269//6048 8283//6052 -f 8279//6056 8264//6036 8278//6053 -f 8274//6057 8259//6037 8273//6054 -f 8269//6048 8284//6069 8285//6055 -f 8280//6059 8265//6040 8279//6056 -f 8275//6060 8260//6041 8274//6057 -f 8286//6074 8271//6058 8285//6055 -f 8281//6062 8266//6043 8280//6059 -f 8276//6064 8261//6044 8275//6060 -f 8271//6058 8286//6074 8287//6061 -f 8282//6065 8267//6046 8281//6062 -f 8277//6067 8262//6063 8276//6064 -f 8283//6052 8268//6051 8282//6065 -f 8262//6063 8277//6067 8278//6053 -f 8282//6065 8297//6079 8298//6066 -f 8277//6067 8292//6080 8293//6068 -f 8299//6071 8284//6069 8298//6066 -f 8294//6072 8279//6056 8293//6068 -f 8289//6073 8274//6057 8288//6070 -f 8300//6075 8285//6055 8299//6071 -f 8295//6091 8280//6059 8294//6072 -f 8290//6077 8275//6060 8289//6073 -f 8301//6081 8286//6074 8300//6075 -f 8280//6059 8295//6091 8296//6076 -f 8291//6084 8276//6064 8290//6077 -f 8286//6074 8301//6081 8302//6078 -f 8281//6062 8296//6076 8297//6079 -f 8276//6064 8291//6084 8292//6080 -f 8301//6081 8317//6094 8318//6082 -f 8296//6076 8312//6095 8313//6083 -f 8308//6103 8292//6080 8307//6085 -f 8297//6079 8313//6083 8314//6086 -f 8292//6080 8308//6103 8309//6087 -f 8298//6066 8314//6086 8315//6088 -f 8310//6107 8294//6072 8309//6087 -f 8305//6093 8289//6073 8304//6089 -f 8299//6071 8315//6088 8316//6090 -f 8294//6072 8310//6107 8311//6092 -f 8306//6096 8290//6077 8305//6093 -f 8300//6075 8316//6090 8317//6094 -f 8295//6091 8311//6092 8312//6095 -f 8307//6085 8291//6084 8306//6096 -f 8321//6100 8306//6096 8320//6097 -f 8332//6117 8317//6094 8331//6098 -f 8311//6092 8326//6110 8327//6099 -f 8322//6120 8307//6085 8321//6100 -f 8317//6094 8332//6117 8333//6101 -f 8312//6095 8327//6099 8328//6102 -f 8307//6085 8322//6120 8323//6104 -f 8313//6083 8328//6102 8329//6105 -f 8324//6108 8309//6087 8323//6104 -f 8314//6086 8329//6105 8330//6106 -f 8325//6111 8310//6107 8324//6108 -f 8320//6097 8305//6093 8319//6109 -f 8315//6088 8330//6106 8331//6098 -f 8310//6107 8325//6111 8326//6110 -f 8340//6115 8325//6111 8339//6112 -f 8335//6116 8320//6097 8334//6113 -f 8346//6118 8331//6098 8345//6114 -f 8341//6133 8326//6110 8340//6115 -f 8336//6121 8321//6100 8335//6116 -f 8347//6136 8332//6117 8346//6118 -f 8326//6110 8341//6133 8342//6119 -f 8337//6124 8322//6120 8336//6121 -f 8332//6117 8347//6136 8348//6122 -f 8327//6099 8342//6119 8343//6123 -f 8338//6127 8323//6104 8337//6124 -f 8328//6102 8343//6123 8344//6125 -f 8323//6104 8338//6127 8339//6112 -f 8329//6105 8344//6125 8345//6114 -f 8343//6123 8358//6140 8359//6126 -f 8354//6130 8339//6112 8353//6128 -f 8344//6125 8359//6126 8360//6129 -f 8355//6148 8340//6115 8354//6130 -f 8350//6135 8335//6116 8349//6131 -f 8345//6114 8360//6129 8361//6132 -f 8340//6115 8355//6148 8356//6134 -f 8351//6138 8336//6121 8350//6135 -f 8362//6141 8347//6136 8361//6132 -f 8341//6133 8356//6134 8357//6137 -f 8352//6144 8337//6124 8351//6138 -f 8347//6136 8362//6141 8363//6139 -f 8342//6119 8357//6137 8358//6140 -f 8337//6124 8352//6144 8353//6128 -f 8362//6141 8377//6153 8378//6142 -f 8357//6137 8372//6154 8373//6143 -f 8352//6144 8367//6160 8368//6145 -f 8358//6140 8373//6143 8374//6146 -f 8369//6149 8354//6130 8368//6145 -f 8359//6126 8374//6146 8375//6147 -f 8370//6168 8355//6148 8369//6149 -f 8365//6152 8350//6135 8364//6150 -f 8376//6157 8361//6132 8375//6147 -f 8355//6148 8370//6168 8371//6151 -f 8366//6155 8351//6138 8365//6152 -f 8361//6132 8376//6157 8377//6153 -f 8356//6134 8371//6151 8372//6154 -f 8367//6160 8352//6144 8366//6155 -f 8381//6161 8366//6155 8380//6156 -f 8376//6157 8391//6174 8392//6158 -f 8371//6151 8386//6170 8387//6159 -f 8382//6180 8367//6160 8381//6161 -f 8377//6153 8392//6158 8393//6162 -f 8372//6154 8387//6159 8388//6163 -f 8367//6160 8382//6180 8383//6164 -f 8373//6143 8388//6163 8389//6165 -f 8368//6145 8383//6164 8384//6166 -f 8374//6146 8389//6165 8390//6167 -f 8385//6171 8370//6168 8384//6166 -f 8380//6156 8365//6152 8379//6169 -f 8391//6174 8376//6157 8390//6167 -f 8370//6168 8385//6171 8386//6170 -f 8384//6166 8399//6186 8400//6172 -f 8395//6177 8380//6156 8394//6173 -f 8390//6167 8405//6187 8406//6175 -f 8385//6171 8400//6172 8401//6176 -f 8396//6181 8381//6161 8395//6177 -f 8391//6174 8406//6175 8407//6178 -f 8386//6170 8401//6176 8402//6179 -f 8397//6184 8382//6180 8396//6181 -f 8392//6158 8407//6178 8408//6182 -f 8387//6159 8402//6179 8403//6183 -f 8398//6189 8383//6164 8397//6184 -f 8388//6163 8403//6183 8404//6185 -f 8383//6164 8398//6189 8399//6186 -f 8389//6165 8404//6185 8405//6187 -f 8403//6183 8418//6201 8419//6188 -f 8398//6189 8413//6202 8414//6190 -f 8404//6185 8419//6188 8420//6191 -f 8399//6186 8414//6190 8415//6192 -f 8410//6196 8395//6177 8409//6193 -f 8405//6187 8420//6191 8421//6194 -f 8400//6172 8415//6192 8416//6195 -f 8411//6199 8396//6181 8410//6196 -f 8406//6175 8421//6194 8422//6197 -f 8401//6176 8416//6195 8417//6198 -f 8412//6205 8397//6184 8411//6199 -f 8407//6178 8422//6197 8423//6200 -f 8402//6179 8417//6198 8418//6201 -f 8397//6184 8412//6205 8413//6202 -f 8422//6197 8438//6215 8439//6203 -f 8417//6198 8433//6216 8434//6204 -f 8412//6205 8428//6220 8429//6206 -f 8418//6201 8434//6204 8435//6207 -f 8413//6202 8429//6206 8430//6208 -f 8419//6188 8435//6207 8436//6209 -f 8414//6190 8430//6208 8431//6210 -f 8426//6214 8410//6196 8425//6211 -f 8420//6191 8436//6209 8437//6212 -f 8415//6192 8431//6210 8432//6213 -f 8427//6217 8411//6199 8426//6214 -f 8421//6194 8437//6212 8438//6215 -f 8416//6195 8432//6213 8433//6216 -f 8428//6220 8412//6205 8427//6217 -f 8437//6212 8452//6227 8453//6218 -f 8432//6213 8447//6228 8448//6219 -f 8443//6235 8428//6220 8442//6221 -f 8454//6232 8439//6203 8453//6218 -f 8433//6216 8448//6219 8449//6222 -f 8428//6220 8443//6235 8444//6223 -f 8450//6225 8435//6207 8449//6222 -f 8429//6206 8444//6223 8445//6224 -f 8451//6233 8436//6209 8450//6225 -f 8446//6234 8431//6210 8445//6224 -f 8441//6229 8426//6214 8440//6226 -f 8436//6209 8451//6233 8452//6227 -f 8431//6210 8446//6234 8447//6228 -f 8442//6221 8427//6217 8441//6229 -f 7974//5774 8441//6229 7973//5775 -f 7985//5777 8452//6227 7984//5770 -f 7980//5755 8447//6228 7979//5772 -f 7975//5758 8442//6221 7974//5774 -f 7986//5761 8453//6218 7985//5777 -f 8447//6228 7980//5755 7981//5754 -f 7976//5757 8443//6235 7975//5758 -f 7987//5760 8454//6232 7986//5761 -f 7982//5763 8449//6222 7981//5754 -f 8443//6235 7976//5757 7977//5764 -f 7983//5766 8450//6225 7982//5763 -f 8444//6223 7977//5764 7978//5768 -f 7984//5770 8451//6233 7983//5766 -f 7979//5772 8446//6234 7978//5768 diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/examples/gopher/wavefront.go b/Godeps/_workspace/src/github.com/obscuren/qml/examples/gopher/wavefront.go deleted file mode 100644 index 964f8b8304..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/examples/gopher/wavefront.go +++ /dev/null @@ -1,280 +0,0 @@ -package main - -import ( - "bufio" - "fmt" - "os" - "path/filepath" - "strconv" - "strings" -) - -type Object struct { - Name string - Groups []*Group -} - -type Group struct { - Vertexes []float32 - Normals []float32 - Material *Material -} - -type Material struct { - Name string - Ambient []float32 - Diffuse []float32 - Specular []float32 - Shininess float32 -} - -func Read(filename string) (map[string]*Object, error) { - file, err := os.Open(filename) - if err != nil { - return nil, err - } - defer file.Close() - - var materials map[string]*Material - var objects = make(map[string]*Object) - var object *Object - var group *Group - var vertex []float32 - var normal []float32 - - lno := 0 - line := "" - scanner := bufio.NewScanner(file) - - fail := func(msg string) error { - return fmt.Errorf(msg+" at %s:%d: %s", filename, lno, line) - } - - for scanner.Scan() { - lno++ - line = scanner.Text() - if strings.HasPrefix(line, "#") { - continue - } - - fields := strings.Fields(line) - if len(fields) == 0 { - continue - } - - if fields[0] == "mtllib" { - if len(fields) != 2 { - return nil, fail("unsupported materials library line") - } - materials, err = readMaterials(filepath.Join(filepath.Dir(filename), fields[1])) - if err != nil { - return nil, err - } - continue - } - - if fields[0] == "o" { - if len(fields) != 2 { - return nil, fail("unsupported object line") - } - object = &Object{Name: fields[1]} - objects[object.Name] = object - group = nil - continue - } - - if object == nil { - return nil, fail("found data before object") - } - - if fields[0] == "usemtl" { - group = &Group{} - object.Groups = append(object.Groups, group) - } - - switch fields[0] { - case "usemtl": - if len(fields) != 2 { - return nil, fail("unsupported material usage line") - } - group.Material = materials[fields[1]] - if group.Material == nil { - return nil, fmt.Errorf("material %q not defined", fields[1]) - } - case "v": - if len(fields) != 4 { - return nil, fail("unsupported vertex line") - } - for i := 0; i < 3; i++ { - f, err := strconv.ParseFloat(fields[i+1], 32) - if err != nil { - return nil, fail("cannot parse float") - } - vertex = append(vertex, float32(f)) - } - case "vn": - if len(fields) != 4 { - return nil, fail("unsupported vertex normal line") - } - for i := 0; i < 3; i++ { - f, err := strconv.ParseFloat(fields[i+1], 32) - if err != nil { - return nil, fail("cannot parse float") - } - normal = append(normal, float32(f)) - } - case "f": - if len(fields) != 4 { - return nil, fail("unsupported face line") - } - for i := 0; i < 3; i++ { - face := strings.Split(fields[i+1], "/") - if len(face) != 3 { - return nil, fail("unsupported face shape (not a triangle)") - } - vi, err := strconv.Atoi(face[0]) - if err != nil { - return nil, fail("unsupported face vertex index") - } - ni, err := strconv.Atoi(face[2]) - if err != nil { - return nil, fail("unsupported face normal index") - } - vi = (vi - 1) * 3 - ni = (ni - 1) * 3 - group.Vertexes = append(group.Vertexes, vertex[vi], vertex[vi+1], vertex[vi+2]) - group.Normals = append(group.Normals, normal[ni], normal[ni+1], normal[ni+2]) - } - } - } - if err := scanner.Err(); err != nil { - return nil, err - } - return objects, nil -} - -func readMaterials(filename string) (map[string]*Material, error) { - file, err := os.Open(filename) - if err != nil { - return nil, fmt.Errorf("cannot read referenced material library: %v", err) - } - defer file.Close() - - var materials = make(map[string]*Material) - var material *Material - - lno := 0 - line := "" - scanner := bufio.NewScanner(file) - - fail := func(msg string) error { - return fmt.Errorf(msg+" at %s:%d: %s", filename, lno, line) - } - - for scanner.Scan() { - lno++ - line = scanner.Text() - if strings.HasPrefix(line, "#") { - continue - } - - fields := strings.Fields(line) - if len(fields) == 0 { - continue - } - - if fields[0] == "newmtl" { - if len(fields) != 2 { - return nil, fail("unsupported material definition") - } - material = &Material{Name: fields[1]} - material.Ambient = []float32{0.2, 0.2, 0.2, 1.0} - material.Diffuse = []float32{0.8, 0.8, 0.8, 1.0} - material.Specular = []float32{0.0, 0.0, 0.0, 1.0} - materials[material.Name] = material - continue - } - - if material == nil { - return nil, fail("found data before material") - } - - switch fields[0] { - case "Ka": - if len(fields) != 4 { - return nil, fail("unsupported ambient color line") - } - for i := 0; i < 3; i++ { - f, err := strconv.ParseFloat(fields[i+1], 32) - if err != nil { - return nil, fail("cannot parse float") - } - material.Ambient[i] = float32(f) - } - case "Kd": - if len(fields) != 4 { - return nil, fail("unsupported diffuse color line") - } - for i := 0; i < 3; i++ { - f, err := strconv.ParseFloat(fields[i+1], 32) - if err != nil { - return nil, fail("cannot parse float") - } - material.Diffuse[i] = float32(f) - } - case "Ks": - if len(fields) != 4 { - return nil, fail("unsupported specular color line") - } - for i := 0; i < 3; i++ { - f, err := strconv.ParseFloat(fields[i+1], 32) - if err != nil { - return nil, fail("cannot parse float") - } - material.Specular[i] = float32(f) - } - case "Ns": - if len(fields) != 2 { - return nil, fail("unsupported shininess line") - } - f, err := strconv.ParseFloat(fields[1], 32) - if err != nil { - return nil, fail("cannot parse float") - } - material.Shininess = float32(f / 1000 * 128) - case "d": - if len(fields) != 2 { - return nil, fail("unsupported transparency line") - } - f, err := strconv.ParseFloat(fields[1], 32) - if err != nil { - return nil, fail("cannot parse float") - } - material.Ambient[3] = float32(f) - material.Diffuse[3] = float32(f) - material.Specular[3] = float32(f) - } - } - if err := scanner.Err(); err != nil { - return nil, err - } - - // Exporting from blender seems to show everything too dark in - // practice, so hack colors to look closer to what we see there. - // TODO This needs more real world checking. - for _, material := range materials { - if material.Ambient[0] == 0 && material.Ambient[1] == 0 && material.Ambient[2] == 0 && material.Ambient[3] == 1 { - material.Ambient[0] = material.Diffuse[0] * 0.7 - material.Ambient[1] = material.Diffuse[1] * 0.7 - material.Ambient[2] = material.Diffuse[2] * 0.7 - } - for i := 0; i < 3; i++ { - material.Diffuse[i] *= 1.3 - if material.Diffuse[i] > 1 { - material.Diffuse[i] = 1 - } - } - } - - return materials, nil -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/examples/imgprovider/imgprovider.go b/Godeps/_workspace/src/github.com/obscuren/qml/examples/imgprovider/imgprovider.go deleted file mode 100644 index 533a23b867..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/examples/imgprovider/imgprovider.go +++ /dev/null @@ -1,43 +0,0 @@ -package main - -import ( - "fmt" - "gopkg.in/qml.v1" - "image" - "image/png" - "os" -) - -func main() { - if err := qml.Run(run); err != nil { - fmt.Fprintf(os.Stderr, "error: %v\n", err) - os.Exit(1) - } -} - -func run() error { - engine := qml.NewEngine() - engine.AddImageProvider("pwd", func(id string, width, height int) image.Image { - f, err := os.Open(id) - if err != nil { - panic(err) - } - defer f.Close() - image, err := png.Decode(f) - if err != nil { - panic(err) - } - return image - }) - - component, err := engine.LoadFile("imgprovider.qml") - if err != nil { - return err - } - - win := component.CreateWindow(nil) - win.Show() - win.Wait() - - return nil -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/examples/imgprovider/imgprovider.qml b/Godeps/_workspace/src/github.com/obscuren/qml/examples/imgprovider/imgprovider.qml deleted file mode 100644 index 0c5c747f0d..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/examples/imgprovider/imgprovider.qml +++ /dev/null @@ -1,5 +0,0 @@ -import QtQuick 2.0 - -Image { - source: "image://pwd/ubuntu-gopher.png" -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/examples/imgprovider/ubuntu-gopher.png b/Godeps/_workspace/src/github.com/obscuren/qml/examples/imgprovider/ubuntu-gopher.png deleted file mode 100644 index 3f51d379886da0dd5d44046a2879eb441ed7599b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 59635 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%0D2Qb3x!rGzuEKZ%p2raNRvvfV4{8SVX z8OkYm*1JJ;J^2WIN=hI`N05+*{Uw;)GD)b=($;c|45B*Oe`BP{_}SF$<}19$J3;&P zflAC17muT)u6Z9`CYFU_YWcsZ-ggxD1eG>vS7IO|amj1r{^r8K2VY;zq+QBUzA5#k z(^FnZ!pU+*Ks;^G?{+vVjW~UvHm;%Y!FbD`4(ZeP{U#}{-+B%@`_E)8={c6Qg`vlE z_+|1kF5~v^9*KOCBBI`5a}?sc?o+FXHHlL#%GHMX*< zeiOW~y9htAEp zEIJ9P8(aP!hFeR}c3AnA6!}2u&_+#nl>04%Ee|9KY8o}bDE;cCUCnr0-80p%moCU~ zZbbJTYsa8am1OX2&ep;#Glkp6f`VczUr17jour^YEm*VBr7A@(@T8d}CtECk>lK;36T5V#0L3($ za#5~R`|jiNMag;9%LZVPpLf|~eA5}Kk;6xdlIl+udVPGWbk-%|z?CCS4H1UJt+Kjv zr#dldmRWguJQ=CHtc=X^jk_AJ8SlR;w2K)u*N)(@yM855qv(M-WR>#3lL|c;8{Xcb zX|&7zkRrvB2<2svXgPPflM-@EiYh7;R&PbAf|`Asw?|0*6IODJdm^#mQ(_kl)e3# zR+jO1H;Brv?H$Mx7l&dAyejK|7~V7r@%?7*e*e4ij6%!UpDR>aTv4<%dq8*e=$Fx> z&zt=sG*Y0|t3c_7{aOuw^wsu5O85;Oq$CwaxeqA{z~c8qIEfU|B@g%vbe~K4s`(0LIa+BG5}VM3`smGj~&1-GXZIxERiuc5=Idnh=Wr`ue6TMFObjF02Y`$3NS zG7EXc`zeKb4&Ll&;H~97{ZheK(5`9-*=d_X*4fp#$oU}?T{A&>`lPhU9S;+2zv02( z5LJ8orX=n3#T|pFGbrEgK$yW>^ew!$*_J(c=@zF-sNo-yewSPofW>*{SM+04)| zeLR0yWXy0%138%XW<)5vUD$R0g4Dr-cj*TZ4vd^_*LzF!??9Z;FaAYECno=>ER#h9<8Y3X}>VW0?!A*Q~2f3))w1gmmic7KE3 z-#wXSSnUWr-=6Mb)GdP&eeHX44@Ie9Q{Buttw1Ws;D6$U*etsWU19l#SNmBM z>MnA1TuxTzCB`k{QXuG=_36`H5D8h5SYIq*%{``VyeLJ=zIaLsPF_1)p;I_FAcW1= z^?*#h%E+Dz_T8JNHr2m29a=jue+K1w87c=FwAHTcA)MV=1o%ob%BI{6rj%h|-`|Yt zNmE2qf}Bg!lC^5vF0vfdhyS|8l43MXOQe zx}8Rj+*3JKq9i}$fQ=ysOl{;P4!SU{b@&`=K$3-pe)Jd;``4s02z0OwP1E}si$uN+vjqgK^XYSlgg9l1IOA>m0y*OLJA%d*T6BGz17Z)4yQ%+7js`Q|P6m{doLT#NEcCkC4QA-JzLp(miKXXMO>_)c2l}A^?PUTwQgOhN&9MjZ zX5fM7mdg~048Nk^!zsB2q3^T9AV7*<>j|4W^rBg5X>thZFa4+x1m6XK1wIYis9?l0 zb?aU3>vKwCrco8CcLsTlSSS*$>2Up}KXQIFrP{tHgSAHVZ4V)wQr^?1wGT2+U99buaL-`eE6e<+i*k6aFxK`%hP${j%^~JuYudiid zl^;t^Tq}{{-~it@=CZtKiCQ%OUMq>D`)MS|Q7mgHTH(qIwcGO7~w%8Cgk6Sjj1}U8dl#i}l<{i(p`DcuQt+xm?JU zZpq~QYHGlv z&)hSvC(jv|ylUkQBB?-fe~+Hk4a*Uey$YHaAV-%62XJ23|7Jeajer~#n(X)*NHr<8 z={x`88FcD;5FBm>oX1}x0&fxBz1P>nCT{0G|A%LQ6aVQ#6NeOKeoC5ESjUV85Zn}? zq@h#i*y)k%dineI_atS{ z%W#_f`^DRFszlOWoZGE(h!@-g6qzgu|M6qQ^+QT8w?me0gSC;f8sLqK2tD2q1)C%e zE0>%KExwg_uAtcPo3BlF*(%ua%iFDB5}xX0c{UmLsNDLg=)(_++rnVkqr3jRuy!AQ zMCV=~(WOB8$Rvtm{cxSel6w&15@0X?e9-Qr2J*zu%<0z^_dm3Si_eh zDoFwkQ}2)8eRtU{s(~DZ8hl~t<;#Z8!!4xUbM}--n46=cBUXTLvUF=+ zdV(gV4vBavRj#&XcjxgkwrAoB6-X~XjA$-iGB0q1L>Wy`Eb*Ku0gXG?T|TwxuBE4^ z2u}tcsOb)xMgcvF`J%B61~6;j5)#oXy-KHk`Ryow)D%nu&h~N&qRR&XMa69LMAk%+01Fy8Ky(9Xk`2zE`sDu+(JH6gxyAjjP*)D{!s&s~-||zsHh6(fGpckH zx~qdy(M6^ELgU!`?pZb(sV?ZQ)DQF(OzZ5uIN;(^cx}`5AdFrd(K14?Rq|@cf@yH$ zdyBt^wN9x+>0SZL9JB{efRM49THs~8F$<0C88@oT&U@DtiBP^65I~FZ-MbVT;fhL1 zCFUKMu1NRjmso{+N*J#Ylh-Hg_kGw) z3SW?;FUGJfvPP|RKS+VwLaB@Qd_5lYX2j~@kcXhR>$i*M8IZP-eUVWH1#_^%er)~pncro2$MPRh{fL|YmNt^G#D7)c+d(P+ zdy`Lk!Q5>vKe)XTuEQd^BIoY}o8U%mFEpP;V(2i8D|BE?^-Np4! zDYSLfB8!}jW3eoj#CTb98O|_lN7ktaMITFHhcL7O8d4SRmRT>FIs0~b=}N^Ebepa#3U)~lX&+VRr+43&E^>kc(BY~n1lL?^Yzn%{@s z)GeCZ*QV^=f|bZXR)S+O*-s!H0&d~Je*nMVgL?nrV)mC!X`dKhXMHaC@jgyQ8kzAa znDK{mgcQ?Kw$zlA>riB^aJHnSwRICwhIa;Vo7Avjt#`wfg1PkNN>jMHW{vzNOHvsJ z^uC2b!{)QWaB_0Rn7LZ7P{@`*aFGe9s>|`X-+SzRj~ffZ0uI z?ouSX4BP(g+PZCNUS-(Mb+P5sgWk)nrwK-81AT>l*_^Owvas@Bes&xf;SE`L9=j|L z=VoPb_Ql=pDa7ihS(23qan<>(li{TG1#;Xrof=Z>zxC%c4QuwL4=KA% zy>TQAr?mZ?3b<46$y@?^O5Y{v5n(3+%YCEhoo8PVOz)>3?5TldrnlmUM|3IAGfW7j z5j=*RAq_fADsMPMP2qEWc>z4+%^3)7T=!kd(3&HbMr zy49xKZ7e;--T1xCgr-m%ZVV}K$zi5nuc9OWAuNBMlizTM%B5(mD5Ln%Bi+-}Qrnhv z;>FctN>Tc{lShRdeO} zyOhmMg)y{+PcObM#nO~+?RjgwrkJ-N0$Kln$hxcOZlCM7s6PKcCC^sJ%?N&D--{MA zY49utaVFCCGz=hyLT!w)V2lDMMWq=b!gN1S69s=x)G#5wQW+dTc|kPZlH9k1N-A!> z$CMvn(;(OZ*Qdodt**auSOQE|1M-c~vni2AhDV3^)Mt1;>JKkfy6?2=+na2bKE1fIdo(j;05F|Et0=9U`PJ^cGIft{9+=(64cnO3qEV zJ-&3lL#1x92@T6;9X8leRAMsn^B;~qYO%bhW&9qUJ@M&Vp=oO|pzqLKsgXumkmSyS z)@7Uk0R*a?ktQflN1TB91dgDDr& zwD>ayU*hAM|1OgP0Y_9~F5ufN#+ftx#>3d$#Nh7K{0LM&g0>QsTRWzahFAR?FQ<2B ze*8$+^z9o0uY+E$y(DME5`onLKfgH#6lJ*9DF^g(p;i&zf!T!u1I0O+PcSgpFR+PU ztpstOtE&wnOwXOVq6aoBu<#8P9{>*dZ`fh`l!GNOb|3*l==?w?9EXXT4z)!;H(Xsc zK01SgI~Qe_1?z}Q2{FJ8E$pZn8Rbc_Nb$e10PbGI`i(AScF(}_t@G4usJA6Z8rK~i zEHmg?U9h&Q{m8R9r&Ni|149bdD~?};McAvJ8v-&9&aMKnY*gAZzy}RBmq+T_%Ep{T zHo+Ss8;UsM%^bH!7qCHY2Q_K}&z2Wx8-u0{?~&@}iXj_y>8}XP3mDm>ON)w%!g08+ zB|?mtTcHuO2^MDbOQ}piqd%aLQ~U)F;;&~9sV)Qlroh^7E)sOS>k<^s7CdJ+}R*|VvBmrpkyPWwV?rDPUh%;sLk(ku@zahZ;vJ1P6h7^9^1y!*m z80oyUETB?-fZ; z4)frF@;c4(Jo%MAAfwm-FTKce56D^jLcBMiXYnFP=Pa;2^q19cav!YtOFp&8ooMm; zHw}odb$-nVpOX(qXmEwjh5}}O6FTW4YDoo)B&ySYZ|N9&r2=WVC17zNJKUqCW5^C? z4<8WT<&TqqVSM{wJ%i^s(BP;J0!y+b%N1nL^J}*Bx?O-nP6WGp1VgFg!V(hlp*cXN z>+&$j9uCKDC=W#vD3spB72?Fu(Che>y@NsM*=f%*&Sg-p1}Rh9zG){B(Zwy2=U{Np ztk35A9Av|p>iU*V^i3h0L30F-m4Cf8dkh6!V z_*F_-gw#kGSX8X0u5D`ULa)PATd#S21P=rtRLD*v*H1+mdQ zuxYU4i($(hQx1^1J>=G-;N!?NW|xPwKT66PM5irWQ5_=7o)XNKEI9xG`2$55SixQV zt#SI=Y{@!ol^#yD)UdmA$;O2Nsw=w?upYQ48Xg+(Y{4Wa-Xw21)VkIKA$^Sd+_I}NIKs=zp?j|lI_MjY@}>W;vDQb z;iu8+_wR=yJa{{R%NSk`puVvI$PIy~7jZb-@D}EoH!wCz$i_JKxNkC-QiqZs0;+=i z{<-4~>Htwfko(p{l~ByEz=Y;))mrEZGBO6SaDR-Q#NT)MyYdKtdrDws?H+E|OU~W3O1q^zy z+O24AZtnQ8M+iUgE?(996T4Exv4jrZ)BaBhBYA}4oWiQqlr!wQ2yz)XT5=j18qDf6 z^!2lW55Te~lcV>vfunHqJGW0c&cZ>R42F!{G-V91sVB|5#kw@Qp^kNv$K8byF z1EtO;2i~zVqZRGDaYKp)#QEP*|u$k1H zI){IEajd!|EcNu`$L+fSVYGDyg02$p12Ry>32J9?PYDr^=vq2D`fvK|C;`np=b!X~ zEaSh`hDCFQY}~fP8xh@8m9~m3c7M=#O*uJcQ58NY zv7;wqdHQ#Mc8y&le%^9p&Q>z5Z%o0xw{SmSk=lb@%l_YM6vMqT`T&pf2%g;Q05Sy2 zv4+?5K**ZOG6@}m^`I)c8;bp2>KWpQnQCUaO7vn8HR9Xe9If%Cz=~~K4?S4rnqOE{ zgg$n82Cl_kpM!oMQtC8D-k@hM5J^Al0(;ziQlak(zCu;K@k+;+S#!c>_XcR+G=Q61 zLf}Z{=9J$#RzlwWYX}q*Mz?`{h(+(FKKsly9MszJLt)aDdP{RUKj^=d4vnJOGc4#G z%MY_Wb0jI@`z&G*p3vJYRdsk8W}?^yJn%AXLW@99uB8$ybRV$RIJQQG?~%XjaMvM% z4>qbXD4&VK+AvLSG_X+W0VUy;l~kSo!2*Pi7H4EN>TV`>wCa`en7&5VHcGe(}VrclR0ZhkgjnNu;zF`s?di<4X zX0sCKk#{@0ge=E*2Q>Z+y0(hFiNBNwv^UT*vt4ou1plWkR#>Co!0{c@;JcH4;_W+e z$HK{-*Zk4p9mv#WkAVfq?d6@UY5(Jj2885yLGJ=V)^&Kxa~CR=jf~E}THIbU~Sd#ZHQy=8^5hHi8SPTCU9o zB#th zirm)N+i?6^n@va{@)B#hFAJr7M-_KAzZT9LBx)XEd}|z2)6YYcLaPCDYz~wjGi1fCxn?8`9k&?Q?^Ue;v~6V=v%Fp2g1-_Bv?%ht$wj=yaTaZ@=J zq0bL3v2uY$Y za>C(8I^y{GX=sBl1;&~c&_VAuOCDZ^{-!Gz%H-#qlP$H4SgEI#3KdSlSW?A_LZpmd zB2Zih{qZn=^%A20gEXW2pY{9N0JK#5q?3uVvh{v&0``pumN1#51OCS4k zpGPM_p5(bq2)YX*+r5BU1W@>Oi2F=UP3;0cAHbo&rhwtL-bac>qefX*bc1vOTbEv_EI(C(*brE=)NY^!2;W)2C z3fB5$K?C%R&*6*@a?HBxB6oaac-$>=GWqj4RX(*?q&-$ z^@6=-!3y$PA3>_DA*`P7Bh0w!`apY82=5x)9aY@GuVJnTkz=Nt;U+?H_7@|xw#u>n zlnBo)^@R(`2?q=2vUE)Wfq~B5Dt9a)4*=zf?;C$k*td%8Td;giNJJI{B{gGL(N51% zL76e;a|db|TfZk=-&=F9*#c1f!U)iU=kD8@TKh{%`Tdchr60=* zrmB(QHM5ri`~xot*s;XM__!sPgv}Hai<$PgEwIrqCv?bjoqGx_Zh&*H+IY#lF9kqM z?@ranoQ%OK=_y|sxaU1wcRfV~KOiRuoP073CiS%l~HX`3ct|9c&CAj>8sVrfR9c>D!NgN^U5TD*oexinujEe7v zGKTGf99OHly?p^vtC$||t_U4~EvL$Y^f+v)oceqQTYVF2(8}9sW|V+GK|92J&@OAH=BF zld1n3Ciu}LRVQBAal~JJ`KCeM7l!A)=97qn3NxAqAA>#iEQG$Z5J0ax@Vu1(t7V@N z=e7vrs;z#6PZIXbFeg^D+~-L7->e`Yx$xr{$E+`#sDMCkJ0AatDgEpo;-QLLcCmpd z43{>J37N&6@lW0si_BiWlNuzUZuay|yhV;MvOogq@M>rEaJX8x`Xk%r;U^1OXGEX- z%#1ZZjJ-E#49J-Q~PY{_-J`T#hn-)mAL(SGPWw>CUaHdJIw7dDksV9UKbh?`D#aQ&N@vc2Kg1yPaAol1E&c+z0)WAnN40mgdT?8Pkx86V>hli_BibQ)xY(;9--{-G?bG6AL zEAx)RYEi;L4(rPdfX+XL=)f=Ny<7m7+ITYafyK}6ZpTlUgQs0bsx>u|t}48JBhRme z{m=UphujMsex_1rvHUZx^Ni2m#wN(rd;fTk6lFJoV0tRX4FKKXI54NrLPJw{rN4lo z*7V$IHRkb#jVpNo)g|b;M01|mo#xuwQ%6_awuPBIIZvdcvSdK!r959z_EM&ZZkXc2yW3%KT*pkXoPK^q(k9bmWp^laH!6!_YalEZH9|Rkc({C2 z`wT#ufe3l-Uu2EP!Q9{h4>*22(t9>C`1<_NvbXDMREKBUGbkb@Jifoa?6vIC1n}h9 z@kpPY$UxBGu_lk!snACz4(*2civF$bgd=9$`bg)!Yw!Q>x@VX1%r5(MPu0}CJYv;# zdRQw1=k?QL;N$c+lchL)nhN@#H=k&X8yFZsIMF$f-lnV~Wi>T5O{1d^SHtr?Qyrf7 zfH`CAdAOc%b9k$?j2dai0FiR{>p`N2f-4<(;gO~Js?jI-PBmN;+P!LJ@*IXp)87t| zZd-Twi@h_-Tvr0|pYUwtG%jj7xq4cRLUyBJG6`@E=0hV*mD{&&*~!XpyZUUq2EzHK z=Huhzj$uLq3RDo*wpd*a@!2<-mv6i3mRq`67t3|zxmJ2Amct)J_TS!{C(2VxX<-)@ z7Y`cR934L-U>q>G-{5RlK#w6zRf_y2H#VRBW}nz)s67+58c zzjcX0IoU;edXZ$DnYsCTNxm019FXs)ZdSi%(=C0fE3r4wF&%B4hlWNYG6_4tRUA{d zS5?;vhE^PuWM4&eAwp(g24z!hM~*+U(H%#aU1m)CQ1t%BiJAHnTHLYpxkpE#yHc(x z(jAtZ_+V1PGu#lRBxC=>nga@M3;*>I<^$(s6~>Zx{e;DMo($J9Dpc%qZ!J`KuLi?p zhha3^ogt_0i{u*UuKxbWk)5~^{NC_(ZS{=!G9EldBysi|I-&rLqcKD)rk@2lY%0-^aEs zO68QzHJGf1Xc#*pE#xTl*JsZhj-CmA&@m1H zP7Y{J@q8RCpX-Mksz=3tf6qwh7dBhN>5M!v$)9Z z?(U8$G?O#Fum5Gg!8wrDcq`cCnI*24RNprGXx8ppPJd5;7oD<$A#RafY%9v<1A0l( zJTKBzrQpeYX^9uve6x+rfkD3do@h7LfM z2_@Cm2KqdyU0)&89S|rC-|vIGTSmooSM<<0Bq-B}4-=~P*S)-GkJ1CQi|pn$wjQbA zxUsjS+|wjRnW!))(g&STRkz*@s!OJeivRl6b$KSuPEm+GmRN{{XZ~eCbexx^7mmxQ z`fm`8v}EX${JkEH5t^+r_j%p!hB`EEyf)AY*I=2Kqnt0*n9k&A6@3h+CR5Ek-3NvdL?XPEk?iKbNm{VXVDUpk= z6MI%Y?82Q#i87QGA`KUCy@x~2P6Y&n>GjqS*QQ66=2{d!RHt{7>zBhuM_m-xo;vS} z`r08a&bB(@2MvB9sZQkCim?CZ8j3U;1;d0j8WkRbn%8^LI%ZeV9L*n*%A3@@jP*UM zL8&hOb%ZYA$UnrW=F71!=H6)y3-PUY_;e8nG1+;QoJi>qgZ3Ket$%d#Q86)fn)%oK zNv;W{#F;C_eOIt5x^3h5CMnk_#3jXLmKD{R^h!hRwwKq3?W>MT!%zq_v+cdSO|QKK zHjE=QAuxOVc)YX2-JPa6`~d>_>)6<pZG zMuXk!b3W+8r_l7G?r5)Wy;7i#Dkm>2k&Os2V|Z?f%rwnRm9HPh=Fmz?pXh>Vlp+{n(0%C^qsZ zaU4R^4|SwS7oX$`o9L0UDL9*h&9Z_3i6gJD4T55h{Q^odUoXXLcFH#a~p&==Cb$x8+a9@B?!@K;fS#<5K zs^=Bx1SOK|zzilJV(xA(N9=E#jGQb{30zR%4L8}RI&?{q_|BO9-EqXg2UEo)SNTP= zrY3&D{1jnEt>&F({a_FA)E<)}%0d!eFqB`F58+2ux2+yk@3jwbdGD(nR6Vy< zRh3*VA54?IkVz^ObHuSe233(gU@Ms@7umjZ8S&@q;313cUjU<3eh9;m9tq}r#( zBVGCIQCj_B53Q|=Sb0<&Wat@`nOYArUu!m69uD#{e8_S6Zh1i`ou*wZtj`E1GGgXG zhqcH;hj@5#1yiE1@FA$SWW3>_<$T_-Es9H8@vAM|LoWTee4~heMz6 z0|T{&=#$PWBv=eLOC_&-JI*3vNSIOm-5s~O=iO!3NWn6(?5(iVJXCP8c!?UpF>UbB2_GV{4Bo*ustK?EyN~DoH2lH;H{~FMowBK2z{g67MTswx7Xz%OOyb&fc zc#ugdFB;81>RfR)HtuGM3)(I!Y0VCIUyA~@2r|vhf5){oVPoU8G8-N|gm};-+nvi2 zE6>kN%D}Km%aWU!sx?bTsu;{PVdT(70{mrjut!hDY{{;z$yj|Xx)nZ{lX63&P0cE4 zXtUmCAo4Uts&J7+Vz+qM+RYmM{AeQ7DAne6-2n;y%Q`v$EZe%jznUeqL1m9{Aig4G z)#mR(gT2tf%KJ@F(ivduy&ls972i4rj%@->-@hx^*OSsR?jG#-jri2(%8UOfO+K3D zDx+XhKS-v?i@efyR9qY6^($g4?y{54iOmALn5WW1#e2ef5ftn_@4PJXoY~9zrJH*^ z9Q}JACGR;BHog-1x{2ePX12GDS1NYe8=!7H5NM!iNk~ZKovwiO5df(YDu_{V!2b^J z{z>;Mx_`t)5AOB3w3Ww7c#>hWgrnemyQ~l7W2UA30>PQvW@F%cS)74OzwZXlXE!n` zDpE3he?NNiH*?L_pfw<;hCJ+Gw7kPRMQBQ@d-h1H7Q{FX7&~lISTm!F--5ZQwKi^iZD)RxyRMV4SCl1(e0=TE)FtWY~-Zzho+-n{dbBjUACI)FiV>6oT|h(rDubC`rcX<@96iAye3)B4)l$sa#?ji%59Jb;y^IA9gf26_Z8vpn6rSs%9 zH2Qwu20l2Li9|yX1uG>)DwR$Mb1+k-NEIl{^2dOc<;w&AO6*=lyUh=L6eoSB(MNCJ z=TG7rZ~;TqNs(ht(pz>7AAG)rNgD>n!UHSom%{jNJP|T8m12Dtsg|a+he{lW0Dx0q zABpnqlc?US z@bs9VNVRFT98pp&oAkykDpZyVO!N-Ne3!&29+?T{Ok&g@9^}dRB^+5Th;}S*UmU$w zE=tW1K0WQ(5f6?VsvSH?UmHH7yHQ{rxG<2SIF(_PGL9$HJ@2hvD>7)4{^$FZZL;Vo zy>2r4KRr1J0>D_UNE`=(mKVXPfj@56f7z@=Q+Qe@-Gwap=)aRtzZ-P{Te#dvDTzX9 zU4dm|pm1KTJtMjgv6r`YCxtGs!j~;B+|VMDDmjtv%Xd5Fq=jQ6>_w^`QRTD%voG0s z4AH~HE;>=o8&FUq0nZz5VP_5$X4@Ng8pW^Qq20S~kCJ0VivlLW)NQA@n1 z)$AKMzMyDlmIh)hk`L}EkW?>`sBs{lMcVK_0DAK3uQOt>*f-)%`bxm~V45zeefu(y z{=PW5ggv|}`9J@;5kqQG)la;c(Lvl<@Jhos_|i}cQ)4D?kT7*3l}1)#;ikp6>r$`5 zfDu&=Q=9&5mD+YXE!NKJ$`seAsIC9jsXt}00?b)Nnjh^>R?1u?F^>})RM9O;`=;bQ ztTA}gspKcm@0k<%9;l&vLZl+@B0ro0H`&8Qjn>wAo=k^H(|2OMB5wDdM9y31&+ebe z3^_cjo)dH?ZTo=Lx;>SH+H)25%OV zM*h6>O$HV@Y>=E9r3uHivRM}Wk|3?6)Re327P*1Nc1eVt!{jspEp-54NTSZR%LP+akLPhGp*v!?qPeO?d) zozsLKdV)QC-uX=8i&q+n$?3`R>4P8Fc>JRj9DK-&N5;ynnfap`=rqeNeOT*bIX235 zJUy{0C{i;o_>xu;&y-(UjA+JzjZ>wRj0$YT1KPfc_^=CV6ul#?sEo5?R8Eopikz-O zc;~FhfCq67w9*Nj75ft$^X_6Zjng`AatEB@g$B=jvZ zzBc~~o92F1+u0sg6w&6nM@pZZbLK_mDjAvSrmo);G_kMZIXI0*$){5VB1P(}&5mj0 zMhj@U>@fungmfxgU=OP(I5lr?j&>F{PRNeSLiMu1i7P7kTG;T#v_I z&s<1y7pKptA7Hqd`TL#WgGi{#@JJ!fpGScwIh6Gycz7SBBXy52M+xiKpmyQX{BE&J zpC%t6-}hvD`!n;~ff?;MKdpkktnISnU9Ei=)D{k-ycS+Z2eNCJVSR-)yB6NSyiFS#3&5U8nT3k&X3ZwUSD2 zN+TUf=Cbg=mF%(SF#>vgGLu;L>U>I`<0+Wbq41gqdzCabOW6DbnYNQza`OZ~_c)sy ztFc5GuP$k!3~g0f>NZAAuBumU*vcQwza^C%@d^rF`+i@NABEkH zfb)-L#JsyRTaXqkA_vi~k0W~p}T?x&s}b7`D8OYC<9191T8DAi4naq?0qL? zvn;~+my7G<%2b2s+HMs?e9i&SzI)E8-Fv2tb(mQK)_O(w^KCpg_pgv}j%_lw^e&!e z)fJJN-HdH~0qGHCLjC+|FxxVx+ej(%gmcQkH`?l9ZqG9keS1f9Pd4t+#1q!N!jotg z`k e^Qg7vOe|lX^L3Rhec_;i)Amv)^91tFgCkXbWc8H=(QAm+GaN0^R_V)^HEsq zTdk%SoT#*3qwF8C#3CW2KcA2+7Ej-m|hQC_Dq=c=0Jd`)_EQ_yAL zFgV=cu$?Cdl>4<<;?s6xpEomy3ajJ9OcKe$ZIkt@EPR@ySLn(nS4^k=dB(Sv5BX;V z+tjq?yS?js8lDf9%N!4P_Np}ZTYK=~k~#LrF4-Tt29AeG3|)o^OAXbVmLm_X#-!Sm zi8IoMX5%jgH*)w4W$uVDIa(1pk&QvRSGtmjXXx=^o~Ntpm)al3@zz&~G`nfL#Q7Ne z1!wJDz7-xrF@f|mTKkI95K+g$rW*KUyxg)h_ewaXsirdIz%lsX0`vUR@eI@;m?T2T zmuwsl7)J)4?+G%isR;d08`$p0oXPkWz5k4u(^n8)6w~wETgU6{nYhQCB~hnz`a4!J zC46{=V?We-w}d0wDKq?VIW}ugh7Em&_#CMcDd1xNP$5!Mby~WL5IuOeX4@5i*iQaq zso_L#Hw97egTOg05PiQ_8ecO1zG%OMefmj4p^`UFTz~GF%^UqZ8R|B2&A8p+%F=rw zRiY&iy^}RgCwd)E_wAmQ?Qq>X?O;iMAv0In!BWKf=Q^Lgk5$pPAD>>#)szLN^4&~g zwppDR!3~mIPhj`}Z&S>R2Y*jLfUScKSjsBdUaCmYyxeRa8W&=;7wfZ3Yc3JN3(nxr z&9oYFiCN0{{JUqP{?SRG-8 zqTQJ^@fKcZOWE-zw3ld;dS>Hp4AEF&`Z_*PY;KAE8h^q9BFTjPd}u&e-1P9UVh+p6 zd3NCPM4@Dbg#Qs0s`KZx`LdIqzpaDx*%F?%x^*?yoIJ^G!rV)L%!1QM9~sFfPJP|{ zMhv!YU0Rd6;~aP&S#cve1ornL5kH-#{jCY}(mj5=5|m_#DjONZiLY*%V7(YDlV@sJ zO9TR3Qc5M7WUT_TTt5BWEx4F>B-&>Nz)dk*pVm=iny?^yFwbNe z(zGnEWZ_fh^u3}yuYP9q*`VuUMQ>(qg3fD~iV~wpebGsAhtEd&>-ios*tP2PxqL@a znhoPhFYLX+nc#0fYCW(+?HSKxnF;Q!AG$nP9ApxB1F!bb&=2cqv`Wb^JmeDQw(+uAJ)4!|9fhtYq5Mes-Q6Cx`#|iAbtLlW1enS0*|y zF-AG6Gn?YQHEL+EwV9p=GaO)E)yZ7P#iXw|#tVf#fLG>e0M8MG5RhWevjLdwSw8|D zuhsAfhEd!df^ArA-nL0W%try}N6#(n2}a&~HjZ3K1|mYlq5;_jfW`*`(KwJuF^0aF zr|o?q9tcN*0bGIM4C4r3BJqHu(7x$~T@X|zFe7+8*#8m!?`2AGwkkTtGl1Oy=)z}^ za?OjA&6)WL6h>fq1P)}{8Ug2Y{)hlFC`Rwu^8|a|n->6P9tZ))^CJcdb95FnFqIco-dA~TBvoZEtK3xiQ00Nnht$!z>dj77iw^4%*jqDp zZD1CAt~vjv$|vGRaP<8{tX^>mj-pqPqBoYlt$tiP2UO4awgu8L>g9a^HftXLG|wl< z_dubRj^6csCNE_t0!@Bc=vDb2Gx}h141K;yv1t6N z@~vY~yv9W(!@+w;iAO4L4;GiR<^30@7ZB=z zn!ZBk!aAnfmthA}fMheB+Tv7T@{3nr@9t&K{~=@$rCk7(@3;zVH! zvloHbj!dUC%TCG`;L#&_FJ$XtpU+m~XD1CuI zc@2l1<)Sa-o^Ue7qb+KR6O3Nz=1lO&iqE=DX=|0Rn@J7;KJ%G;oE1#M-Frdf!wD`X z?0tf5l1|YPARrR`(9I|SiAL&X!V~vHCYyK{k|O{Dgl?cqi8vhSmEQ8??O1QAM}TM# nN5v_UffYd2w;a8m{}o^W-^qmk*A=;y00000NkvXXu0mjf5*>;S diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/examples/particle/particle.qml b/Godeps/_workspace/src/github.com/obscuren/qml/examples/particle/particle.qml deleted file mode 100644 index 1fd1f1c8b5..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/examples/particle/particle.qml +++ /dev/null @@ -1,89 +0,0 @@ -import QtQuick 2.0 -import QtQuick.Particles 2.0 -import QtGraphicalEffects 1.0; - -Rectangle { - id: root - - width: 640 - height: 480 - - gradient: Gradient { - GradientStop { position: 0.0; color: "#3a2c32"; } - GradientStop { position: 0.8; color: "#875864"; } - GradientStop { position: 1.0; color: "#9b616c"; } - } - - Text { - text: ctrl.message - - Component.onCompleted: { - x = parent.width/2 - width/2 - y = parent.height/2 - height/2 - } - - color: "white" - font.bold: true - font.pointSize: 20 - - MouseArea { - id: mouseArea - anchors.fill: parent - drag.target: parent - onReleased: ctrl.textReleased(parent) - } - } - - ParticleSystem { id: sys } - - ImageParticle { - system: sys - source: "particle.png" - color: "white" - colorVariation: 1.0 - alpha: 0.1 - } - - property var emitterComponent: Component { - id: emitterComponent - Emitter { - id: container - system: sys - Emitter { - system: sys - emitRate: 128 - lifeSpan: 600 - size: 16 - endSize: 8 - velocity: AngleDirection { angleVariation:360; magnitude: 60 } - } - - property int life: 2600 - property real targetX: 0 - property real targetY: 0 - emitRate: 128 - lifeSpan: 600 - size: 24 - endSize: 8 - NumberAnimation on x { - objectName: "xAnim" - id: xAnim; - to: targetX - duration: life - running: false - } - NumberAnimation on y { - objectName: "yAnim" - id: yAnim; - to: targetY - duration: life - running: false - } - Timer { - interval: life - running: true - onTriggered: ctrl.done(container) - } - } - } -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/examples/qmlscene/Cell.qml b/Godeps/_workspace/src/github.com/obscuren/qml/examples/qmlscene/Cell.qml deleted file mode 100644 index 998a49242b..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/examples/qmlscene/Cell.qml +++ /dev/null @@ -1,20 +0,0 @@ -import QtQuick 2.0 - -Item { - id: container - property alias cellColor: rectangle.color - signal clicked(color cellColor) - - width: 40; height: 25 - - Rectangle { - id: rectangle - border.color: "white" - anchors.fill: parent - } - - MouseArea { - anchors.fill: parent - onClicked: container.clicked(container.cellColor) - } -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/examples/qmlscene/qmlscene.go b/Godeps/_workspace/src/github.com/obscuren/qml/examples/qmlscene/qmlscene.go deleted file mode 100644 index 6124ac5684..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/examples/qmlscene/qmlscene.go +++ /dev/null @@ -1,33 +0,0 @@ -package main - -import ( - "fmt" - "gopkg.in/qml.v1" - "os" -) - -func main() { - if len(os.Args) != 2 { - fmt.Fprintf(os.Stderr, "usage: %s \n", os.Args[0]) - os.Exit(1) - } - if err := qml.Run(run); err != nil { - fmt.Fprintf(os.Stderr, "error: %v\n", err) - os.Exit(1) - } -} - -func run() error { - engine := qml.NewEngine() - - engine.On("quit", func() { os.Exit(0) }) - - component, err := engine.LoadFile(os.Args[1]) - if err != nil { - return err - } - window := component.CreateWindow(nil) - window.Show() - window.Wait() - return nil -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/examples/qmlscene/tutorial1.qml b/Godeps/_workspace/src/github.com/obscuren/qml/examples/qmlscene/tutorial1.qml deleted file mode 100644 index e42216e6ab..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/examples/qmlscene/tutorial1.qml +++ /dev/null @@ -1,17 +0,0 @@ -// See http://qt-project.org/doc/qt-5.1/qtquick/qml-tutorial1.html - -import QtQuick 2.0 - -Rectangle { - id: page - width: 320; height: 480 - color: "lightgray" - - Text { - id: helloText - text: "Hello world!" - y: 30 - anchors.horizontalCenter: page.horizontalCenter - font.pointSize: 24; font.bold: true - } -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/examples/qmlscene/tutorial2.qml b/Godeps/_workspace/src/github.com/obscuren/qml/examples/qmlscene/tutorial2.qml deleted file mode 100644 index aa64bc1aa0..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/examples/qmlscene/tutorial2.qml +++ /dev/null @@ -1,30 +0,0 @@ -// See http://qt-project.org/doc/qt-5.1/qtquick/qml-tutorial2.html - -import QtQuick 2.0 - -Rectangle { - id: page - width: 320; height: 480 - color: "lightgray" - - Text { - id: helloText - text: "Hello world!" - y: 30 - anchors.horizontalCenter: page.horizontalCenter - font.pointSize: 24; font.bold: true - } - - Grid { - id: colorPicker - x: 4; anchors.bottom: page.bottom; anchors.bottomMargin: 4 - rows: 2; columns: 3; spacing: 3 - - Cell { cellColor: "red"; onClicked: helloText.color = cellColor } - Cell { cellColor: "green"; onClicked: helloText.color = cellColor } - Cell { cellColor: "blue"; onClicked: helloText.color = cellColor } - Cell { cellColor: "yellow"; onClicked: helloText.color = cellColor } - Cell { cellColor: "steelblue"; onClicked: helloText.color = cellColor } - Cell { cellColor: "black"; onClicked: helloText.color = cellColor } - } -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/examples/qmlscene/tutorial3.qml b/Godeps/_workspace/src/github.com/obscuren/qml/examples/qmlscene/tutorial3.qml deleted file mode 100644 index e5eabab10b..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/examples/qmlscene/tutorial3.qml +++ /dev/null @@ -1,45 +0,0 @@ -// See http://qt-project.org/doc/qt-5.1/qtquick/qml-tutorial3.html - -import QtQuick 2.0 - -Rectangle { - id: page - width: 320; height: 480 - color: "lightgray" - - Text { - id: helloText - text: "Hello world!" - y: 30 - anchors.horizontalCenter: page.horizontalCenter - font.pointSize: 24; font.bold: true - - MouseArea { id: mouseArea; anchors.fill: parent } - - states: State { - name: "down"; when: mouseArea.pressed == true - PropertyChanges { target: helloText; y: 160; rotation: 180; color: "red" } - } - - transitions: Transition { - from: ""; to: "down"; reversible: true - ParallelAnimation { - NumberAnimation { properties: "y,rotation"; duration: 500; easing.type: Easing.InOutQuad } - ColorAnimation { duration: 500 } - } - } - } - - Grid { - id: colorPicker - x: 4; anchors.bottom: page.bottom; anchors.bottomMargin: 4 - rows: 2; columns: 3; spacing: 3 - - Cell { cellColor: "red"; onClicked: helloText.color = cellColor } - Cell { cellColor: "green"; onClicked: helloText.color = cellColor } - Cell { cellColor: "blue"; onClicked: helloText.color = cellColor } - Cell { cellColor: "yellow"; onClicked: helloText.color = cellColor } - Cell { cellColor: "steelblue"; onClicked: helloText.color = cellColor } - Cell { cellColor: "black"; onClicked: helloText.color = cellColor } - } -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/examples/qrcpacking/assets/particle.png b/Godeps/_workspace/src/github.com/obscuren/qml/examples/qrcpacking/assets/particle.png deleted file mode 100644 index 5c83896d22cdc3c352ff8db97b0b1f2cd2b27125..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 861 zcmV-j1ETziP)+uAJ)4!|9fhtYq5Mes-Q6Cx`#|iAbtLlW1enS0*|y zF-AG6Gn?YQHEL+EwV9p=GaO)E)yZ7P#iXw|#tVf#fLG>e0M8MG5RhWevjLdwSw8|D zuhsAfhEd!df^ArA-nL0W%try}N6#(n2}a&~HjZ3K1|mYlq5;_jfW`*`(KwJuF^0aF zr|o?q9tcN*0bGIM4C4r3BJqHu(7x$~T@X|zFe7+8*#8m!?`2AGwkkTtGl1Oy=)z}^ za?OjA&6)WL6h>fq1P)}{8Ug2Y{)hlFC`Rwu^8|a|n->6P9tZ))^CJcdb95FnFqIco-dA~TBvoZEtK3xiQ00Nnht$!z>dj77iw^4%*jqDp zZD1CAt~vjv$|vGRaP<8{tX^>mj-pqPqBoYlt$tiP2UO4awgu8L>g9a^HftXLG|wl< z_dubRj^6csCNE_t0!@Bc=vDb2Gx}h141K;yv1t6N z@~vY~yv9W(!@+w;iAO4L4;GiR<^30@7ZB=z zn!ZBk!aAnfmthA}fMheB+Tv7T@{3nr@9t&K{~=@$rCk7(@3;zVH! zvloHbj!dUC%TCG`;L#&_FJ$XtpU+m~XD1CuI zc@2l1<)Sa-o^Ue7qb+KR6O3Nz=1lO&iqE=DX=|0Rn@J7;KJ%G;oE1#M-Frdf!wD`X z?0tf5l1|YPARrR`(9I|SiAL&X!V~vHCYyK{k|O{Dgl?cqi8vhSmEQ8??O1QAM}TM# nN5v_UffYd2w;a8m{}o^W-^qmk*A=;y00000NkvXXu0mjf5*>;S diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/examples/qrcpacking/assets/particle.qml b/Godeps/_workspace/src/github.com/obscuren/qml/examples/qrcpacking/assets/particle.qml deleted file mode 100644 index 2708a3dfc0..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/examples/qrcpacking/assets/particle.qml +++ /dev/null @@ -1,89 +0,0 @@ -import QtQuick 2.0 -import QtQuick.Particles 2.0 -import QtGraphicalEffects 1.0; - -Rectangle { - id: root - - width: 640 - height: 480 - - gradient: Gradient { - GradientStop { position: 0.0; color: "#3a2c32"; } - GradientStop { position: 0.8; color: "#875864"; } - GradientStop { position: 1.0; color: "#9b616c"; } - } - - Text { - text: ctrl.message - - Component.onCompleted: { - x = parent.width/2 - width/2 - y = parent.height/2 - height/2 - } - - color: "white" - font.bold: true - font.pointSize: 20 - - MouseArea { - id: mouseArea - anchors.fill: parent - drag.target: parent - onReleased: ctrl.textReleased(parent) - } - } - - ParticleSystem { id: sys } - - ImageParticle { - system: sys - source: "qrc:///assets/particle.png" - color: "white" - colorVariation: 1.0 - alpha: 0.1 - } - - property var emitterComponent: Component { - id: emitterComponent - Emitter { - id: container - system: sys - Emitter { - system: sys - emitRate: 128 - lifeSpan: 600 - size: 16 - endSize: 8 - velocity: AngleDirection { angleVariation:360; magnitude: 60 } - } - - property int life: 2600 - property real targetX: 0 - property real targetY: 0 - emitRate: 128 - lifeSpan: 600 - size: 24 - endSize: 8 - NumberAnimation on x { - objectName: "xAnim" - id: xAnim; - to: targetX - duration: life - running: false - } - NumberAnimation on y { - objectName: "yAnim" - id: yAnim; - to: targetY - duration: life - running: false - } - Timer { - interval: life - running: true - onTriggered: ctrl.done(container) - } - } - } -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/examples/qrcpacking/main.go b/Godeps/_workspace/src/github.com/obscuren/qml/examples/qrcpacking/main.go deleted file mode 100644 index a151cdb490..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/examples/qrcpacking/main.go +++ /dev/null @@ -1,86 +0,0 @@ -package main - -//go:generate genqrc assets - -import ( - "fmt" - "math/rand" - "os" - "time" - - "gopkg.in/qml.v1" -) - -func main() { - if err := qml.Run(run); err != nil { - fmt.Fprintf(os.Stderr, "error: %v\n", err) - os.Exit(1) - } -} - -func run() error { - engine := qml.NewEngine() - component, err := engine.LoadFile("qrc:///assets/particle.qml") - if err != nil { - return err - } - - ctrl := Control{Message: "Hello from Go!"} - - context := engine.Context() - context.SetVar("ctrl", &ctrl) - - window := component.CreateWindow(nil) - - ctrl.Root = window.Root() - - rand.Seed(time.Now().Unix()) - - window.Show() - window.Wait() - - return nil -} - -type Control struct { - Root qml.Object - Message string -} - -func (ctrl *Control) TextReleased(text qml.Object) { - x := text.Int("x") - y := text.Int("y") - width := text.Int("width") - height := text.Int("height") - - ctrl.Emit(x+15, y+height/2) - ctrl.Emit(x+width/2, 1.0*y+height/2) - ctrl.Emit(x+width-15, 1.0*y+height/2) - - go func() { - time.Sleep(500 * time.Millisecond) - messages := []string{"Hello", "Hello", "Hacks"} - ctrl.Message = messages[rand.Intn(len(messages))] + " from Go!" - qml.Changed(ctrl, &ctrl.Message) - }() -} - -func (ctrl *Control) Emit(x, y int) { - component := ctrl.Root.Object("emitterComponent") - for i := 0; i < 8; i++ { - emitter := component.Create(nil) - emitter.Set("x", x) - emitter.Set("y", y) - emitter.Set("targetX", rand.Intn(240)-120+x) - emitter.Set("targetY", rand.Intn(240)-120+y) - emitter.Set("life", rand.Intn(2400)+200) - emitter.Set("emitRate", rand.Intn(32)+32) - emitter.ObjectByName("xAnim").Call("start") - emitter.ObjectByName("yAnim").Call("start") - emitter.Set("enabled", true) - } -} - -func (ctrl *Control) Done(emitter qml.Object) { - emitter.Destroy() -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/examples/qrcpacking/qrc.go b/Godeps/_workspace/src/github.com/obscuren/qml/examples/qrcpacking/qrc.go deleted file mode 100644 index 7002e67f5a..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/examples/qrcpacking/qrc.go +++ /dev/null @@ -1,58 +0,0 @@ -package main - -// This file is automatically generated by gopkg.in/qml.v1/cmd/genqrc - -import ( - "io/ioutil" - "os" - "path/filepath" - - "gopkg.in/qml.v1" -) - -func init() { - var r *qml.Resources - var err error - if os.Getenv("QRC_REPACK") == "1" { - err = qrcRepackResources() - if err != nil { - panic("cannot repack qrc resources: " + err.Error()) - } - r, err = qml.ParseResources(qrcResourcesRepacked) - } else { - r, err = qml.ParseResourcesString(qrcResourcesData) - } - if err != nil { - panic("cannot parse bundled resources data: " + err.Error()) - } - qml.LoadResources(r) -} - -func qrcRepackResources() error { - subdirs := []string{"assets"} - var rp qml.ResourcesPacker - for _, subdir := range subdirs { - err := filepath.Walk(subdir, func(path string, info os.FileInfo, err error) error { - if err != nil { - return err - } - if info.IsDir() { - return nil - } - data, err := ioutil.ReadFile(path) - if err != nil { - return err - } - rp.Add(filepath.ToSlash(path), data) - return nil - }) - if err != nil { - return err - } - } - qrcResourcesRepacked = rp.Pack().Bytes() - return nil -} - -var qrcResourcesRepacked []byte -var qrcResourcesData = "qres\x00\x00\x00\x01\x00\x00\t\xeb\x00\x00\x00\x14\x00\x00\t\x9d\x00\x00\x03]\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00 \x00\x00\x00 \b\x06\x00\x00\x00szz\xf4\x00\x00\x00\x19tEXtSoftware\x00Adobe ImageReadyq\xc9e<\x00\x00\x02\xffIDATxڔWM\x8f\xd40\fM\xd2t\x96\x0f\xed\xc2a\xf7\x00\a~\x01\xff\xff\x9fp\xe2\xc0\x05\x84\x84\x90X\x81\xc4\x0e\xdb6&\xae\x9c\xea\xcd\xc3閑\xacd\xda\xd4~v\x9e\x1d'\x87\xff\xf8\x89H\xaaC\x93hc\xd1W&:/1F9\xaa3\x9b\xe2\xbd5jh\xb0\xb5\x99\x9e\a3\x1c`^\xd5\xc9\\\xc7Ť\xaf8\xc6\v\x85=\x80W\xe6i\x00\xcf\x11\x84\x10\x90bϳ\x01\x98\xecY?\x02\x1d\xaf\xd5\xf0\b\x86Q\xdc\x1d\x82mXl\u07b6IA\xccG\x01\xe8G\xcf-\xec\tF\xde{6\x8e\\H\x06\"BĢ\x01\xd9\x05\x80\xc6\a\x02\xd18\x90H1\x86\xbe\x98\xa7\xed}!\x1e\bG\x82\x01\\\x81\xe1\f\xe3\b`\"\xf1\x80\xa3о\xe9\x85]\x10T&0#x<\xd8\xff\x11\xfe\xefeJp\xb6*:\xc63\x80\xdd\x00\xe8\xc2g\x90r͋\x93͙\xf9\t\x14F`y\x04\x0ed\xda\x1a\x01\xe7t\xfe\x88\x002(F\xef\xd9\xf3\x04{ޛ\x17\x00\x96\x81\x98\x02\xeb\xb6\"\xd6\x00\x8c\xf00\x01\xe1\xd8x\xa4T\x8c\x94~b\xdf,\xf0\xae9Q(3V\x00\xc9\xca+\xa7\xda@F\xd8x\xdaIS/:\x19\xb6\xb7\x8dj;採\xc1\xa9zhDS\xf5]\x95[c\xfb\xf7*\x9f\xab\xfc&\x1e\b\x01\xc7\xf3#\x06\nst\x1630\x95\x17U\xdeWym$Ue/\xab\xdcT\xf9P\xe5\x81·\xd4ѹ\xea\xcdNU\x8b\x0e\xeb\x11\xd8[3vm`\x16{\xae9\xff\xa6\xca'\xe2Fp\xf4\xfdC\xac^q\t\x8e\xa2W\x90\xa27\x96\xbe\xad~\\;\aT\xcf\xf8\xb6\x05\xd21\xea\xe5}\x006k\x1e\xff4\xcf'\xc8\xf7@\xa1\x96\x8e\xde\xf5}&/e'\x02M~X\xe8U\xf9\x1f3\xfa`r\x0f \x84\xb6\x82\x8fmi\x00\x8as\xa8`\xe1\xc0:\xaf\n\xbf\x1a\xe9f\x8b`\xb1h\xfc\xaa\xf2\xadcP\xbc\xc6E%\xc3\xc1\x80\v\x17\xe2\a\x82SO?V\xb93>Lf\\S\xf1\xdc1Th\xdc\xdegz\x89G*o\x0f\x16\x97\xb3\xe5\xfd\x17\xa7\x17\x10ꀚ\xbeB\xe7\xc2:\xa6ڗa\aS\x80d3\x9d\xe5\x05\xfa<\x9e\xb3\x0e!\xe33\x91t\xb1\x9ep;\v&\xaa\u05ed\x8dJ\xce\xe9\x17\bX\x8fh\xec\xc8\xe2Da\v\xb3\x17\x81؎L\xa74\xcbN\xca\x16\xe0\xd1#y/d\xebb\x9f\xcfV\xe3g'\rG:\xb2{-\x99P\x9d\xc0\bx\x1c\xb8\xe8\x88\xdaG'\xe8\xeb8\x9c\x83S\xd7y\r\x87\x9d\xe5\xa2/\xe4\x9ep2ţ-j\x8a\x13\x8c^\xe9\xe6L\xf0ȊϺMik\x95\xb0\x9bI\x0e\x00>\xf3\x99|\x9c\x15L\xc2\xdd{A\xe3\xc3\t.&\xec}\x82m\x92N\xd1\x11 \x12\xfd\xd0\xcd(\x00\x89F\xeaf\xc2\x13\xf7C&\x9bx\x17\x92#\x00\x02\x84n\xa0K\x898\x1c\xe8\x95\xde\xf2\xe4\xedXo\xa9G\x80h\x0fG\xc5)\x92\x81\x15@շ\x1c\xbd\x9e\xff\x15`\x00\xdfɄ\xff\xd7\x15\xb9\x95\x00\x00\x00\x00IEND\xaeB`\x82\x00\x00\x06$import QtQuick 2.0\nimport QtQuick.Particles 2.0\nimport QtGraphicalEffects 1.0;\n\nRectangle {\n\tid: root\n\n\twidth: 640\n\theight: 480\n\n\tgradient: Gradient {\n\t\tGradientStop { position: 0.0; color: \"#3a2c32\"; }\n\t\tGradientStop { position: 0.8; color: \"#875864\"; }\n\t\tGradientStop { position: 1.0; color: \"#9b616c\"; }\n\t}\n\n\tText {\n\t\ttext: ctrl.message\n\n\t\tComponent.onCompleted: {\n\t\t\tx = parent.width/2 - width/2\n\t\t\ty = parent.height/2 - height/2\n\t\t}\n\n\t\tcolor: \"white\"\n\t\tfont.bold: true\n\t\tfont.pointSize: 20\n\n\t\tMouseArea {\n\t\t id: mouseArea\n\t\t anchors.fill: parent\n\t\t drag.target: parent\n onReleased: ctrl.textReleased(parent)\n\t\t}\n\t}\n\n\tParticleSystem { id: sys }\n\n\tImageParticle {\n\t\tsystem: sys\n\t\tsource: \"qrc:///assets/particle.png\"\n\t\tcolor: \"white\"\n\t\tcolorVariation: 1.0\n\t\talpha: 0.1\n\t}\n\n\tproperty var emitterComponent: Component {\n\t\tid: emitterComponent\n\t\tEmitter {\n\t\t\tid: container\n\t\t\tsystem: sys\n\t\t\tEmitter {\n\t\t\t\tsystem: sys\n\t\t\t\temitRate: 128\n\t\t\t\tlifeSpan: 600\n\t\t\t\tsize: 16\n\t\t\t\tendSize: 8\n\t\t\t\tvelocity: AngleDirection { angleVariation:360; magnitude: 60 }\n\t\t\t}\n\n\t\t\tproperty int life: 2600\n\t\t\tproperty real targetX: 0\n\t\t\tproperty real targetY: 0\n\t\t\temitRate: 128\n\t\t\tlifeSpan: 600\n\t\t\tsize: 24\n\t\t\tendSize: 8\n\t\t\tNumberAnimation on x {\n\t\t\t\tobjectName: \"xAnim\"\n\t\t\t\tid: xAnim;\n\t\t\t\tto: targetX\n\t\t\t\tduration: life\n\t\t\t\trunning: false\n\t\t\t}\n\t\t\tNumberAnimation on y {\n\t\t\t\tobjectName: \"yAnim\"\n\t\t\t\tid: yAnim;\n\t\t\t\tto: targetY\n\t\t\t\tduration: life\n\t\t\t\trunning: false\n\t\t\t}\n\t\t\tTimer {\n\t\t\t\tinterval: life\n\t\t\t\trunning: true\n\t\t\t\tonTriggered: ctrl.done(container)\n\t\t\t}\n\t\t}\n\t}\n}\n\x00\x06\x06\x8a\x9c\xb3\x00a\x00s\x00s\x00e\x00t\x00s\x00\f\b\xf9b\xa7\x00p\x00a\x00r\x00t\x00i\x00c\x00l\x00e\x00.\x00p\x00n\x00g\x00\f\b\xf9e\xdc\x00p\x00a\x00r\x00t\x00i\x00c\x00l\x00e\x00.\x00q\x00m\x00l\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x12\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x000\x00\x00\x00\x00\x00\x01\x00\x00\x03a" diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/examples/reparent/base.qml b/Godeps/_workspace/src/github.com/obscuren/qml/examples/reparent/base.qml deleted file mode 100644 index a77243e379..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/examples/reparent/base.qml +++ /dev/null @@ -1,7 +0,0 @@ -import QtQuick 2.0 - -Rectangle { - width: 640 - height: 480 - color: "black" -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/examples/reparent/rect.qml b/Godeps/_workspace/src/github.com/obscuren/qml/examples/reparent/rect.qml deleted file mode 100644 index 21eda2feaa..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/examples/reparent/rect.qml +++ /dev/null @@ -1,8 +0,0 @@ -import QtQuick 2.0 - -Rectangle { - anchors.centerIn: parent - width: 50 - height: 50 - color: "red" -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/examples/reparent/reparent.go b/Godeps/_workspace/src/github.com/obscuren/qml/examples/reparent/reparent.go deleted file mode 100644 index c1399f88c7..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/examples/reparent/reparent.go +++ /dev/null @@ -1,37 +0,0 @@ -package main - -import ( - "fmt" - "gopkg.in/qml.v1" - "os" -) - -func main() { - if err := qml.Run(run); err != nil { - fmt.Fprintf(os.Stderr, "error: %v\n", err) - os.Exit(1) - } -} - -func run() error { - engine := qml.NewEngine() - - base, err := engine.LoadFile("base.qml") - if err != nil { - return err - } - rect, err := engine.LoadFile("rect.qml") - if err != nil { - return err - } - - win := base.CreateWindow(nil) - obj := rect.Create(nil) - - obj.Set("parent", win.Root()) - - win.Show() - win.Wait() - - return nil -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/examples/snapweb/snapweb.go b/Godeps/_workspace/src/github.com/obscuren/qml/examples/snapweb/snapweb.go deleted file mode 100644 index 53d1d6210b..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/examples/snapweb/snapweb.go +++ /dev/null @@ -1,70 +0,0 @@ -package main - -import ( - "fmt" - "gopkg.in/qml.v1" - "image/png" - "os" -) - -const webview = ` -import QtQuick 2.0 -import QtWebKit 3.0 - -WebView { - width: 1024 - height: 768 -} -` - -func main() { - if len(os.Args) != 3 { - fmt.Fprintf(os.Stderr, "usage: %s \n", os.Args[0]) - os.Exit(1) - } - if err := qml.Run(run); err != nil { - fmt.Fprintf(os.Stderr, "error: %v\n", err) - os.Exit(1) - } -} - -func run() error { - engine := qml.NewEngine() - component, err := engine.LoadString("webview.qml", webview) - if err != nil { - return err - } - ctrl := &Control{ - done: make(chan error), - win: component.CreateWindow(nil), - } - engine.Context().SetVar("ctrl", ctrl) - root := ctrl.win.Root() - root.On("loadingChanged", ctrl.Snapshot) - root.Set("url", os.Args[1]) - ctrl.win.Show() - return <-ctrl.done -} - -type Control struct { - win *qml.Window - done chan error -} - -func (ctrl *Control) Snapshot(request qml.Object) { - if request.Int("status") != 2 { - return - } - f, err := os.Create(os.Args[2]) - if err != nil { - ctrl.done <- err - return - } - defer f.Close() - img := ctrl.win.Snapshot() - err = png.Encode(f, img) - if err != nil { - os.Remove(os.Args[2]) - } - ctrl.done <- err -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/1.0/funcs.cpp b/Godeps/_workspace/src/github.com/obscuren/qml/gl/1.0/funcs.cpp deleted file mode 100644 index d7d9cf6576..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/1.0/funcs.cpp +++ /dev/null @@ -1,1848 +0,0 @@ - -// ** file automatically generated by glgen -- do not edit manually ** - -#include -#include - -#include "funcs.h" - -void *gl1_0_funcs() { - QOpenGLFunctions_1_0* funcs = QOpenGLContext::currentContext()->versionFunctions(); - if (!funcs) { - return 0; - } - funcs->initializeOpenGLFunctions(); - return funcs; -} - - -void gl1_0_glViewport(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glViewport(x, y, width, height); -} - -void gl1_0_glDepthRange(void *_glfuncs, GLdouble nearVal, GLdouble farVal) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthRange(nearVal, farVal); -} - -GLboolean gl1_0_glIsEnabled(void *_glfuncs, GLenum cap) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsEnabled(cap); -} - -void gl1_0_glGetTexLevelParameteriv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLint* params) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexLevelParameteriv(target, level, pname, params); -} - -void gl1_0_glGetTexLevelParameterfv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexLevelParameterfv(target, level, pname, params); -} - -void gl1_0_glGetTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameteriv(target, pname, params); -} - -void gl1_0_glGetTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameterfv(target, pname, params); -} - -void gl1_0_glGetTexImage(void *_glfuncs, GLenum target, GLint level, GLenum format, GLenum gltype, GLvoid* pixels) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexImage(target, level, format, gltype, pixels); -} - -void gl1_0_glGetIntegerv(void *_glfuncs, GLenum pname, GLint* params) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetIntegerv(pname, params); -} - -void gl1_0_glGetFloatv(void *_glfuncs, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetFloatv(pname, params); -} - -GLenum gl1_0_glGetError(void *_glfuncs) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetError(); -} - -void gl1_0_glGetDoublev(void *_glfuncs, GLenum pname, GLdouble* params) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetDoublev(pname, params); -} - -void gl1_0_glGetBooleanv(void *_glfuncs, GLenum pname, GLboolean* params) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBooleanv(pname, params); -} - -void gl1_0_glReadPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum gltype, GLvoid* pixels) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glReadPixels(x, y, width, height, format, gltype, pixels); -} - -void gl1_0_glReadBuffer(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glReadBuffer(mode); -} - -void gl1_0_glPixelStorei(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelStorei(pname, param); -} - -void gl1_0_glPixelStoref(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelStoref(pname, param); -} - -void gl1_0_glDepthFunc(void *_glfuncs, GLenum glfunc) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthFunc(glfunc); -} - -void gl1_0_glStencilOp(void *_glfuncs, GLenum fail, GLenum zfail, GLenum zpass) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilOp(fail, zfail, zpass); -} - -void gl1_0_glStencilFunc(void *_glfuncs, GLenum glfunc, GLint ref, GLuint mask) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilFunc(glfunc, ref, mask); -} - -void gl1_0_glLogicOp(void *_glfuncs, GLenum opcode) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLogicOp(opcode); -} - -void gl1_0_glBlendFunc(void *_glfuncs, GLenum sfactor, GLenum dfactor) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendFunc(sfactor, dfactor); -} - -void gl1_0_glFlush(void *_glfuncs) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFlush(); -} - -void gl1_0_glFinish(void *_glfuncs) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFinish(); -} - -void gl1_0_glEnable(void *_glfuncs, GLenum cap) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnable(cap); -} - -void gl1_0_glDisable(void *_glfuncs, GLenum cap) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDisable(cap); -} - -void gl1_0_glDepthMask(void *_glfuncs, GLboolean flag) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthMask(flag); -} - -void gl1_0_glColorMask(void *_glfuncs, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorMask(red, green, blue, alpha); -} - -void gl1_0_glStencilMask(void *_glfuncs, GLuint mask) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilMask(mask); -} - -void gl1_0_glClearDepth(void *_glfuncs, GLdouble depth) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearDepth(depth); -} - -void gl1_0_glClearStencil(void *_glfuncs, GLint s) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearStencil(s); -} - -void gl1_0_glClearColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearColor(red, green, blue, alpha); -} - -void gl1_0_glClear(void *_glfuncs, GLbitfield mask) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClear(mask); -} - -void gl1_0_glDrawBuffer(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawBuffer(mode); -} - -void gl1_0_glTexImage2D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage2D(target, level, internalFormat, width, height, border, format, gltype, pixels); -} - -void gl1_0_glTexImage1D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage1D(target, level, internalFormat, width, border, format, gltype, pixels); -} - -void gl1_0_glTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameteriv(target, pname, params); -} - -void gl1_0_glTexParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint param) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameteri(target, pname, param); -} - -void gl1_0_glTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterfv(target, pname, params); -} - -void gl1_0_glTexParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterf(target, pname, param); -} - -void gl1_0_glScissor(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScissor(x, y, width, height); -} - -void gl1_0_glPolygonMode(void *_glfuncs, GLenum face, GLenum mode) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPolygonMode(face, mode); -} - -void gl1_0_glPointSize(void *_glfuncs, GLfloat size) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointSize(size); -} - -void gl1_0_glLineWidth(void *_glfuncs, GLfloat width) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLineWidth(width); -} - -void gl1_0_glHint(void *_glfuncs, GLenum target, GLenum mode) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glHint(target, mode); -} - -void gl1_0_glFrontFace(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFrontFace(mode); -} - -void gl1_0_glCullFace(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCullFace(mode); -} - -void gl1_0_glTranslatef(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTranslatef(x, y, z); -} - -void gl1_0_glTranslated(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTranslated(x, y, z); -} - -void gl1_0_glScalef(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScalef(x, y, z); -} - -void gl1_0_glScaled(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScaled(x, y, z); -} - -void gl1_0_glRotatef(void *_glfuncs, GLfloat angle, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRotatef(angle, x, y, z); -} - -void gl1_0_glRotated(void *_glfuncs, GLdouble angle, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRotated(angle, x, y, z); -} - -void gl1_0_glPushMatrix(void *_glfuncs) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPushMatrix(); -} - -void gl1_0_glPopMatrix(void *_glfuncs) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPopMatrix(); -} - -void gl1_0_glOrtho(void *_glfuncs, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glOrtho(left, right, bottom, top, zNear, zFar); -} - -void gl1_0_glMultMatrixd(void *_glfuncs, const GLdouble* m) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultMatrixd(m); -} - -void gl1_0_glMultMatrixf(void *_glfuncs, const GLfloat* m) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultMatrixf(m); -} - -void gl1_0_glMatrixMode(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMatrixMode(mode); -} - -void gl1_0_glLoadMatrixd(void *_glfuncs, const GLdouble* m) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadMatrixd(m); -} - -void gl1_0_glLoadMatrixf(void *_glfuncs, const GLfloat* m) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadMatrixf(m); -} - -void gl1_0_glLoadIdentity(void *_glfuncs) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadIdentity(); -} - -void gl1_0_glFrustum(void *_glfuncs, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFrustum(left, right, bottom, top, zNear, zFar); -} - -GLboolean gl1_0_glIsList(void *_glfuncs, GLuint list) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsList(list); -} - -void gl1_0_glGetTexGeniv(void *_glfuncs, GLenum coord, GLenum pname, GLint* params) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexGeniv(coord, pname, params); -} - -void gl1_0_glGetTexGenfv(void *_glfuncs, GLenum coord, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexGenfv(coord, pname, params); -} - -void gl1_0_glGetTexGendv(void *_glfuncs, GLenum coord, GLenum pname, GLdouble* params) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexGendv(coord, pname, params); -} - -void gl1_0_glGetTexEnviv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexEnviv(target, pname, params); -} - -void gl1_0_glGetTexEnvfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexEnvfv(target, pname, params); -} - -void gl1_0_glGetPolygonStipple(void *_glfuncs, GLubyte* mask) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetPolygonStipple(mask); -} - -void gl1_0_glGetPixelMapusv(void *_glfuncs, GLenum glmap, GLushort* values) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetPixelMapusv(glmap, values); -} - -void gl1_0_glGetPixelMapuiv(void *_glfuncs, GLenum glmap, GLuint* values) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetPixelMapuiv(glmap, values); -} - -void gl1_0_glGetPixelMapfv(void *_glfuncs, GLenum glmap, GLfloat* values) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetPixelMapfv(glmap, values); -} - -void gl1_0_glGetMaterialiv(void *_glfuncs, GLenum face, GLenum pname, GLint* params) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMaterialiv(face, pname, params); -} - -void gl1_0_glGetMaterialfv(void *_glfuncs, GLenum face, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMaterialfv(face, pname, params); -} - -void gl1_0_glGetMapiv(void *_glfuncs, GLenum target, GLenum query, GLint* v) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMapiv(target, query, v); -} - -void gl1_0_glGetMapfv(void *_glfuncs, GLenum target, GLenum query, GLfloat* v) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMapfv(target, query, v); -} - -void gl1_0_glGetMapdv(void *_glfuncs, GLenum target, GLenum query, GLdouble* v) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMapdv(target, query, v); -} - -void gl1_0_glGetLightiv(void *_glfuncs, GLenum light, GLenum pname, GLint* params) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetLightiv(light, pname, params); -} - -void gl1_0_glGetLightfv(void *_glfuncs, GLenum light, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetLightfv(light, pname, params); -} - -void gl1_0_glGetClipPlane(void *_glfuncs, GLenum plane, GLdouble* equation) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetClipPlane(plane, equation); -} - -void gl1_0_glDrawPixels(void *_glfuncs, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawPixels(width, height, format, gltype, pixels); -} - -void gl1_0_glCopyPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum gltype) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyPixels(x, y, width, height, gltype); -} - -void gl1_0_glPixelMapusv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLushort* values) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelMapusv(glmap, mapsize, values); -} - -void gl1_0_glPixelMapuiv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLuint* values) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelMapuiv(glmap, mapsize, values); -} - -void gl1_0_glPixelMapfv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLfloat* values) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelMapfv(glmap, mapsize, values); -} - -void gl1_0_glPixelTransferi(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelTransferi(pname, param); -} - -void gl1_0_glPixelTransferf(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelTransferf(pname, param); -} - -void gl1_0_glPixelZoom(void *_glfuncs, GLfloat xfactor, GLfloat yfactor) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelZoom(xfactor, yfactor); -} - -void gl1_0_glAlphaFunc(void *_glfuncs, GLenum glfunc, GLfloat ref) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glAlphaFunc(glfunc, ref); -} - -void gl1_0_glEvalPoint2(void *_glfuncs, GLint i, GLint j) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalPoint2(i, j); -} - -void gl1_0_glEvalMesh2(void *_glfuncs, GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalMesh2(mode, i1, i2, j1, j2); -} - -void gl1_0_glEvalPoint1(void *_glfuncs, GLint i) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalPoint1(i); -} - -void gl1_0_glEvalMesh1(void *_glfuncs, GLenum mode, GLint i1, GLint i2) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalMesh1(mode, i1, i2); -} - -void gl1_0_glEvalCoord2fv(void *_glfuncs, const GLfloat* u) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord2fv(u); -} - -void gl1_0_glEvalCoord2f(void *_glfuncs, GLfloat u, GLfloat v) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord2f(u, v); -} - -void gl1_0_glEvalCoord2dv(void *_glfuncs, const GLdouble* u) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord2dv(u); -} - -void gl1_0_glEvalCoord2d(void *_glfuncs, GLdouble u, GLdouble v) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord2d(u, v); -} - -void gl1_0_glEvalCoord1fv(void *_glfuncs, const GLfloat* u) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord1fv(u); -} - -void gl1_0_glEvalCoord1f(void *_glfuncs, GLfloat u) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord1f(u); -} - -void gl1_0_glEvalCoord1dv(void *_glfuncs, const GLdouble* u) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord1dv(u); -} - -void gl1_0_glEvalCoord1d(void *_glfuncs, GLdouble u) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord1d(u); -} - -void gl1_0_glMapGrid2f(void *_glfuncs, GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMapGrid2f(un, u1, u2, vn, v1, v2); -} - -void gl1_0_glMapGrid2d(void *_glfuncs, GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMapGrid2d(un, u1, u2, vn, v1, v2); -} - -void gl1_0_glMapGrid1f(void *_glfuncs, GLint un, GLfloat u1, GLfloat u2) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMapGrid1f(un, u1, u2); -} - -void gl1_0_glMapGrid1d(void *_glfuncs, GLint un, GLdouble u1, GLdouble u2) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMapGrid1d(un, u1, u2); -} - -void gl1_0_glMap2f(void *_glfuncs, GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat* points) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMap2f(target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points); -} - -void gl1_0_glMap2d(void *_glfuncs, GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble* points) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMap2d(target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points); -} - -void gl1_0_glMap1f(void *_glfuncs, GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat* points) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMap1f(target, u1, u2, stride, order, points); -} - -void gl1_0_glMap1d(void *_glfuncs, GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble* points) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMap1d(target, u1, u2, stride, order, points); -} - -void gl1_0_glPushAttrib(void *_glfuncs, GLbitfield mask) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPushAttrib(mask); -} - -void gl1_0_glPopAttrib(void *_glfuncs) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPopAttrib(); -} - -void gl1_0_glAccum(void *_glfuncs, GLenum op, GLfloat value) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glAccum(op, value); -} - -void gl1_0_glIndexMask(void *_glfuncs, GLuint mask) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexMask(mask); -} - -void gl1_0_glClearIndex(void *_glfuncs, GLfloat c) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearIndex(c); -} - -void gl1_0_glClearAccum(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearAccum(red, green, blue, alpha); -} - -void gl1_0_glPushName(void *_glfuncs, GLuint name) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPushName(name); -} - -void gl1_0_glPopName(void *_glfuncs) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPopName(); -} - -void gl1_0_glPassThrough(void *_glfuncs, GLfloat token) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPassThrough(token); -} - -void gl1_0_glLoadName(void *_glfuncs, GLuint name) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadName(name); -} - -void gl1_0_glInitNames(void *_glfuncs) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glInitNames(); -} - -GLint gl1_0_glRenderMode(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glRenderMode(mode); -} - -void gl1_0_glSelectBuffer(void *_glfuncs, GLsizei size, GLuint* buffer) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSelectBuffer(size, buffer); -} - -void gl1_0_glFeedbackBuffer(void *_glfuncs, GLsizei size, GLenum gltype, GLfloat* buffer) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFeedbackBuffer(size, gltype, buffer); -} - -void gl1_0_glTexGeniv(void *_glfuncs, GLenum coord, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGeniv(coord, pname, params); -} - -void gl1_0_glTexGeni(void *_glfuncs, GLenum coord, GLenum pname, GLint param) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGeni(coord, pname, param); -} - -void gl1_0_glTexGenfv(void *_glfuncs, GLenum coord, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGenfv(coord, pname, params); -} - -void gl1_0_glTexGenf(void *_glfuncs, GLenum coord, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGenf(coord, pname, param); -} - -void gl1_0_glTexGendv(void *_glfuncs, GLenum coord, GLenum pname, const GLdouble* params) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGendv(coord, pname, params); -} - -void gl1_0_glTexGend(void *_glfuncs, GLenum coord, GLenum pname, GLdouble param) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGend(coord, pname, param); -} - -void gl1_0_glTexEnviv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexEnviv(target, pname, params); -} - -void gl1_0_glTexEnvi(void *_glfuncs, GLenum target, GLenum pname, GLint param) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexEnvi(target, pname, param); -} - -void gl1_0_glTexEnvfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexEnvfv(target, pname, params); -} - -void gl1_0_glTexEnvf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexEnvf(target, pname, param); -} - -void gl1_0_glShadeModel(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glShadeModel(mode); -} - -void gl1_0_glPolygonStipple(void *_glfuncs, const GLubyte* mask) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPolygonStipple(mask); -} - -void gl1_0_glMaterialiv(void *_glfuncs, GLenum face, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMaterialiv(face, pname, params); -} - -void gl1_0_glMateriali(void *_glfuncs, GLenum face, GLenum pname, GLint param) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMateriali(face, pname, param); -} - -void gl1_0_glMaterialfv(void *_glfuncs, GLenum face, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMaterialfv(face, pname, params); -} - -void gl1_0_glMaterialf(void *_glfuncs, GLenum face, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMaterialf(face, pname, param); -} - -void gl1_0_glLineStipple(void *_glfuncs, GLint factor, GLushort pattern) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLineStipple(factor, pattern); -} - -void gl1_0_glLightModeliv(void *_glfuncs, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightModeliv(pname, params); -} - -void gl1_0_glLightModeli(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightModeli(pname, param); -} - -void gl1_0_glLightModelfv(void *_glfuncs, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightModelfv(pname, params); -} - -void gl1_0_glLightModelf(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightModelf(pname, param); -} - -void gl1_0_glLightiv(void *_glfuncs, GLenum light, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightiv(light, pname, params); -} - -void gl1_0_glLighti(void *_glfuncs, GLenum light, GLenum pname, GLint param) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLighti(light, pname, param); -} - -void gl1_0_glLightfv(void *_glfuncs, GLenum light, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightfv(light, pname, params); -} - -void gl1_0_glLightf(void *_glfuncs, GLenum light, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightf(light, pname, param); -} - -void gl1_0_glFogiv(void *_glfuncs, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogiv(pname, params); -} - -void gl1_0_glFogi(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogi(pname, param); -} - -void gl1_0_glFogfv(void *_glfuncs, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogfv(pname, params); -} - -void gl1_0_glFogf(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogf(pname, param); -} - -void gl1_0_glColorMaterial(void *_glfuncs, GLenum face, GLenum mode) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorMaterial(face, mode); -} - -void gl1_0_glClipPlane(void *_glfuncs, GLenum plane, const GLdouble* equation) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClipPlane(plane, equation); -} - -void gl1_0_glVertex4sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4sv(v); -} - -void gl1_0_glVertex4s(void *_glfuncs, GLshort x, GLshort y, GLshort z, GLshort w) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4s(x, y, z, w); -} - -void gl1_0_glVertex4iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4iv(v); -} - -void gl1_0_glVertex4i(void *_glfuncs, GLint x, GLint y, GLint z, GLint w) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4i(x, y, z, w); -} - -void gl1_0_glVertex4fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4fv(v); -} - -void gl1_0_glVertex4f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z, GLfloat w) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4f(x, y, z, w); -} - -void gl1_0_glVertex4dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4dv(v); -} - -void gl1_0_glVertex4d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z, GLdouble w) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4d(x, y, z, w); -} - -void gl1_0_glVertex3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3sv(v); -} - -void gl1_0_glVertex3s(void *_glfuncs, GLshort x, GLshort y, GLshort z) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3s(x, y, z); -} - -void gl1_0_glVertex3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3iv(v); -} - -void gl1_0_glVertex3i(void *_glfuncs, GLint x, GLint y, GLint z) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3i(x, y, z); -} - -void gl1_0_glVertex3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3fv(v); -} - -void gl1_0_glVertex3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3f(x, y, z); -} - -void gl1_0_glVertex3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3dv(v); -} - -void gl1_0_glVertex3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3d(x, y, z); -} - -void gl1_0_glVertex2sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2sv(v); -} - -void gl1_0_glVertex2s(void *_glfuncs, GLshort x, GLshort y) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2s(x, y); -} - -void gl1_0_glVertex2iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2iv(v); -} - -void gl1_0_glVertex2i(void *_glfuncs, GLint x, GLint y) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2i(x, y); -} - -void gl1_0_glVertex2fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2fv(v); -} - -void gl1_0_glVertex2f(void *_glfuncs, GLfloat x, GLfloat y) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2f(x, y); -} - -void gl1_0_glVertex2dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2dv(v); -} - -void gl1_0_glVertex2d(void *_glfuncs, GLdouble x, GLdouble y) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2d(x, y); -} - -void gl1_0_glTexCoord4sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4sv(v); -} - -void gl1_0_glTexCoord4s(void *_glfuncs, GLshort s, GLshort t, GLshort r, GLshort q) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4s(s, t, r, q); -} - -void gl1_0_glTexCoord4iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4iv(v); -} - -void gl1_0_glTexCoord4i(void *_glfuncs, GLint s, GLint t, GLint r, GLint q) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4i(s, t, r, q); -} - -void gl1_0_glTexCoord4fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4fv(v); -} - -void gl1_0_glTexCoord4f(void *_glfuncs, GLfloat s, GLfloat t, GLfloat r, GLfloat q) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4f(s, t, r, q); -} - -void gl1_0_glTexCoord4dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4dv(v); -} - -void gl1_0_glTexCoord4d(void *_glfuncs, GLdouble s, GLdouble t, GLdouble r, GLdouble q) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4d(s, t, r, q); -} - -void gl1_0_glTexCoord3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3sv(v); -} - -void gl1_0_glTexCoord3s(void *_glfuncs, GLshort s, GLshort t, GLshort r) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3s(s, t, r); -} - -void gl1_0_glTexCoord3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3iv(v); -} - -void gl1_0_glTexCoord3i(void *_glfuncs, GLint s, GLint t, GLint r) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3i(s, t, r); -} - -void gl1_0_glTexCoord3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3fv(v); -} - -void gl1_0_glTexCoord3f(void *_glfuncs, GLfloat s, GLfloat t, GLfloat r) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3f(s, t, r); -} - -void gl1_0_glTexCoord3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3dv(v); -} - -void gl1_0_glTexCoord3d(void *_glfuncs, GLdouble s, GLdouble t, GLdouble r) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3d(s, t, r); -} - -void gl1_0_glTexCoord2sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2sv(v); -} - -void gl1_0_glTexCoord2s(void *_glfuncs, GLshort s, GLshort t) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2s(s, t); -} - -void gl1_0_glTexCoord2iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2iv(v); -} - -void gl1_0_glTexCoord2i(void *_glfuncs, GLint s, GLint t) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2i(s, t); -} - -void gl1_0_glTexCoord2fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2fv(v); -} - -void gl1_0_glTexCoord2f(void *_glfuncs, GLfloat s, GLfloat t) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2f(s, t); -} - -void gl1_0_glTexCoord2dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2dv(v); -} - -void gl1_0_glTexCoord2d(void *_glfuncs, GLdouble s, GLdouble t) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2d(s, t); -} - -void gl1_0_glTexCoord1sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1sv(v); -} - -void gl1_0_glTexCoord1s(void *_glfuncs, GLshort s) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1s(s); -} - -void gl1_0_glTexCoord1iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1iv(v); -} - -void gl1_0_glTexCoord1i(void *_glfuncs, GLint s) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1i(s); -} - -void gl1_0_glTexCoord1fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1fv(v); -} - -void gl1_0_glTexCoord1f(void *_glfuncs, GLfloat s) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1f(s); -} - -void gl1_0_glTexCoord1dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1dv(v); -} - -void gl1_0_glTexCoord1d(void *_glfuncs, GLdouble s) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1d(s); -} - -void gl1_0_glRectsv(void *_glfuncs, const GLshort* v1, const GLshort* v2) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectsv(v1, v2); -} - -void gl1_0_glRects(void *_glfuncs, GLshort x1, GLshort y1, GLshort x2, GLshort y2) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRects(x1, y1, x2, y2); -} - -void gl1_0_glRectiv(void *_glfuncs, const GLint* v1, const GLint* v2) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectiv(v1, v2); -} - -void gl1_0_glRecti(void *_glfuncs, GLint x1, GLint y1, GLint x2, GLint y2) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRecti(x1, y1, x2, y2); -} - -void gl1_0_glRectfv(void *_glfuncs, const GLfloat* v1, const GLfloat* v2) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectfv(v1, v2); -} - -void gl1_0_glRectf(void *_glfuncs, GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectf(x1, y1, x2, y2); -} - -void gl1_0_glRectdv(void *_glfuncs, const GLdouble* v1, const GLdouble* v2) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectdv(v1, v2); -} - -void gl1_0_glRectd(void *_glfuncs, GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectd(x1, y1, x2, y2); -} - -void gl1_0_glRasterPos4sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4sv(v); -} - -void gl1_0_glRasterPos4s(void *_glfuncs, GLshort x, GLshort y, GLshort z, GLshort w) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4s(x, y, z, w); -} - -void gl1_0_glRasterPos4iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4iv(v); -} - -void gl1_0_glRasterPos4i(void *_glfuncs, GLint x, GLint y, GLint z, GLint w) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4i(x, y, z, w); -} - -void gl1_0_glRasterPos4fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4fv(v); -} - -void gl1_0_glRasterPos4f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z, GLfloat w) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4f(x, y, z, w); -} - -void gl1_0_glRasterPos4dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4dv(v); -} - -void gl1_0_glRasterPos4d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z, GLdouble w) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4d(x, y, z, w); -} - -void gl1_0_glRasterPos3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3sv(v); -} - -void gl1_0_glRasterPos3s(void *_glfuncs, GLshort x, GLshort y, GLshort z) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3s(x, y, z); -} - -void gl1_0_glRasterPos3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3iv(v); -} - -void gl1_0_glRasterPos3i(void *_glfuncs, GLint x, GLint y, GLint z) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3i(x, y, z); -} - -void gl1_0_glRasterPos3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3fv(v); -} - -void gl1_0_glRasterPos3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3f(x, y, z); -} - -void gl1_0_glRasterPos3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3dv(v); -} - -void gl1_0_glRasterPos3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3d(x, y, z); -} - -void gl1_0_glRasterPos2sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2sv(v); -} - -void gl1_0_glRasterPos2s(void *_glfuncs, GLshort x, GLshort y) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2s(x, y); -} - -void gl1_0_glRasterPos2iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2iv(v); -} - -void gl1_0_glRasterPos2i(void *_glfuncs, GLint x, GLint y) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2i(x, y); -} - -void gl1_0_glRasterPos2fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2fv(v); -} - -void gl1_0_glRasterPos2f(void *_glfuncs, GLfloat x, GLfloat y) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2f(x, y); -} - -void gl1_0_glRasterPos2dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2dv(v); -} - -void gl1_0_glRasterPos2d(void *_glfuncs, GLdouble x, GLdouble y) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2d(x, y); -} - -void gl1_0_glNormal3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3sv(v); -} - -void gl1_0_glNormal3s(void *_glfuncs, GLshort nx, GLshort ny, GLshort nz) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3s(nx, ny, nz); -} - -void gl1_0_glNormal3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3iv(v); -} - -void gl1_0_glNormal3i(void *_glfuncs, GLint nx, GLint ny, GLint nz) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3i(nx, ny, nz); -} - -void gl1_0_glNormal3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3fv(v); -} - -void gl1_0_glNormal3f(void *_glfuncs, GLfloat nx, GLfloat ny, GLfloat nz) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3f(nx, ny, nz); -} - -void gl1_0_glNormal3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3dv(v); -} - -void gl1_0_glNormal3d(void *_glfuncs, GLdouble nx, GLdouble ny, GLdouble nz) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3d(nx, ny, nz); -} - -void gl1_0_glNormal3bv(void *_glfuncs, const GLbyte* v) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3bv(v); -} - -void gl1_0_glNormal3b(void *_glfuncs, GLbyte nx, GLbyte ny, GLbyte nz) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3b(nx, ny, nz); -} - -void gl1_0_glIndexsv(void *_glfuncs, const GLshort* c) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexsv(c); -} - -void gl1_0_glIndexs(void *_glfuncs, GLshort c) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexs(c); -} - -void gl1_0_glIndexiv(void *_glfuncs, const GLint* c) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexiv(c); -} - -void gl1_0_glIndexi(void *_glfuncs, GLint c) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexi(c); -} - -void gl1_0_glIndexfv(void *_glfuncs, const GLfloat* c) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexfv(c); -} - -void gl1_0_glIndexf(void *_glfuncs, GLfloat c) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexf(c); -} - -void gl1_0_glIndexdv(void *_glfuncs, const GLdouble* c) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexdv(c); -} - -void gl1_0_glIndexd(void *_glfuncs, GLdouble c) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexd(c); -} - -void gl1_0_glEnd(void *_glfuncs) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnd(); -} - -void gl1_0_glEdgeFlagv(void *_glfuncs, const GLboolean* flag) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEdgeFlagv(flag); -} - -void gl1_0_glEdgeFlag(void *_glfuncs, GLboolean flag) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEdgeFlag(flag); -} - -void gl1_0_glColor4usv(void *_glfuncs, const GLushort* v) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4usv(v); -} - -void gl1_0_glColor4us(void *_glfuncs, GLushort red, GLushort green, GLushort blue, GLushort alpha) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4us(red, green, blue, alpha); -} - -void gl1_0_glColor4uiv(void *_glfuncs, const GLuint* v) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4uiv(v); -} - -void gl1_0_glColor4ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue, GLuint alpha) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4ui(red, green, blue, alpha); -} - -void gl1_0_glColor4ubv(void *_glfuncs, const GLubyte* v) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4ubv(v); -} - -void gl1_0_glColor4ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4ub(red, green, blue, alpha); -} - -void gl1_0_glColor4sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4sv(v); -} - -void gl1_0_glColor4s(void *_glfuncs, GLshort red, GLshort green, GLshort blue, GLshort alpha) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4s(red, green, blue, alpha); -} - -void gl1_0_glColor4iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4iv(v); -} - -void gl1_0_glColor4i(void *_glfuncs, GLint red, GLint green, GLint blue, GLint alpha) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4i(red, green, blue, alpha); -} - -void gl1_0_glColor4fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4fv(v); -} - -void gl1_0_glColor4f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4f(red, green, blue, alpha); -} - -void gl1_0_glColor4dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4dv(v); -} - -void gl1_0_glColor4d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4d(red, green, blue, alpha); -} - -void gl1_0_glColor4bv(void *_glfuncs, const GLbyte* v) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4bv(v); -} - -void gl1_0_glColor4b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4b(red, green, blue, alpha); -} - -void gl1_0_glColor3usv(void *_glfuncs, const GLushort* v) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3usv(v); -} - -void gl1_0_glColor3us(void *_glfuncs, GLushort red, GLushort green, GLushort blue) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3us(red, green, blue); -} - -void gl1_0_glColor3uiv(void *_glfuncs, const GLuint* v) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3uiv(v); -} - -void gl1_0_glColor3ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3ui(red, green, blue); -} - -void gl1_0_glColor3ubv(void *_glfuncs, const GLubyte* v) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3ubv(v); -} - -void gl1_0_glColor3ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3ub(red, green, blue); -} - -void gl1_0_glColor3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3sv(v); -} - -void gl1_0_glColor3s(void *_glfuncs, GLshort red, GLshort green, GLshort blue) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3s(red, green, blue); -} - -void gl1_0_glColor3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3iv(v); -} - -void gl1_0_glColor3i(void *_glfuncs, GLint red, GLint green, GLint blue) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3i(red, green, blue); -} - -void gl1_0_glColor3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3fv(v); -} - -void gl1_0_glColor3f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3f(red, green, blue); -} - -void gl1_0_glColor3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3dv(v); -} - -void gl1_0_glColor3d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3d(red, green, blue); -} - -void gl1_0_glColor3bv(void *_glfuncs, const GLbyte* v) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3bv(v); -} - -void gl1_0_glColor3b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3b(red, green, blue); -} - -void gl1_0_glBitmap(void *_glfuncs, GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte* bitmap) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBitmap(width, height, xorig, yorig, xmove, ymove, bitmap); -} - -void gl1_0_glBegin(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBegin(mode); -} - -void gl1_0_glListBase(void *_glfuncs, GLuint base) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glListBase(base); -} - -GLuint gl1_0_glGenLists(void *_glfuncs, GLsizei range_) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGenLists(range_); -} - -void gl1_0_glDeleteLists(void *_glfuncs, GLuint list, GLsizei range_) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteLists(list, range_); -} - -void gl1_0_glCallLists(void *_glfuncs, GLsizei n, GLenum gltype, const GLvoid* lists) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCallLists(n, gltype, lists); -} - -void gl1_0_glCallList(void *_glfuncs, GLuint list) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCallList(list); -} - -void gl1_0_glEndList(void *_glfuncs) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndList(); -} - -void gl1_0_glNewList(void *_glfuncs, GLuint list, GLenum mode) -{ - QOpenGLFunctions_1_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNewList(list, mode); -} - diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/1.0/funcs.h b/Godeps/_workspace/src/github.com/obscuren/qml/gl/1.0/funcs.h deleted file mode 100644 index c016eec7b8..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/1.0/funcs.h +++ /dev/null @@ -1,347 +0,0 @@ - -// ** file automatically generated by glgen -- do not edit manually ** - -#ifndef __cplusplus -#include -#include -typedef unsigned int GLenum; -typedef unsigned char GLboolean; -typedef unsigned int GLbitfield; -typedef void GLvoid; -typedef char GLchar; -typedef signed char GLbyte; /* 1-byte signed */ -typedef short GLshort; /* 2-byte signed */ -typedef int GLint; /* 4-byte signed */ -typedef unsigned char GLubyte; /* 1-byte unsigned */ -typedef unsigned short GLushort; /* 2-byte unsigned */ -typedef unsigned int GLuint; /* 4-byte unsigned */ -typedef int GLsizei; /* 4-byte signed */ -typedef float GLfloat; /* single precision float */ -typedef float GLclampf; /* single precision float in [0,1] */ -typedef double GLdouble; /* double precision float */ -typedef double GLclampd; /* double precision float in [0,1] */ -typedef int64_t GLint64; -typedef uint64_t GLuint64; -typedef ptrdiff_t GLintptr; -typedef ptrdiff_t GLsizeiptr; -typedef ptrdiff_t GLintptrARB; -typedef ptrdiff_t GLsizeiptrARB; -typedef struct __GLsync *GLsync; -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -void *gl1_0_funcs(); - -void gl1_0_glViewport(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height); -void gl1_0_glDepthRange(void *_glfuncs, GLdouble nearVal, GLdouble farVal); -GLboolean gl1_0_glIsEnabled(void *_glfuncs, GLenum cap); -void gl1_0_glGetTexLevelParameteriv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLint* params); -void gl1_0_glGetTexLevelParameterfv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLfloat* params); -void gl1_0_glGetTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl1_0_glGetTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl1_0_glGetTexImage(void *_glfuncs, GLenum target, GLint level, GLenum format, GLenum gltype, GLvoid* pixels); -void gl1_0_glGetIntegerv(void *_glfuncs, GLenum pname, GLint* params); -void gl1_0_glGetFloatv(void *_glfuncs, GLenum pname, GLfloat* params); -GLenum gl1_0_glGetError(void *_glfuncs); -void gl1_0_glGetDoublev(void *_glfuncs, GLenum pname, GLdouble* params); -void gl1_0_glGetBooleanv(void *_glfuncs, GLenum pname, GLboolean* params); -void gl1_0_glReadPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum gltype, GLvoid* pixels); -void gl1_0_glReadBuffer(void *_glfuncs, GLenum mode); -void gl1_0_glPixelStorei(void *_glfuncs, GLenum pname, GLint param); -void gl1_0_glPixelStoref(void *_glfuncs, GLenum pname, GLfloat param); -void gl1_0_glDepthFunc(void *_glfuncs, GLenum glfunc); -void gl1_0_glStencilOp(void *_glfuncs, GLenum fail, GLenum zfail, GLenum zpass); -void gl1_0_glStencilFunc(void *_glfuncs, GLenum glfunc, GLint ref, GLuint mask); -void gl1_0_glLogicOp(void *_glfuncs, GLenum opcode); -void gl1_0_glBlendFunc(void *_glfuncs, GLenum sfactor, GLenum dfactor); -void gl1_0_glFlush(void *_glfuncs); -void gl1_0_glFinish(void *_glfuncs); -void gl1_0_glEnable(void *_glfuncs, GLenum cap); -void gl1_0_glDisable(void *_glfuncs, GLenum cap); -void gl1_0_glDepthMask(void *_glfuncs, GLboolean flag); -void gl1_0_glColorMask(void *_glfuncs, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); -void gl1_0_glStencilMask(void *_glfuncs, GLuint mask); -void gl1_0_glClearDepth(void *_glfuncs, GLdouble depth); -void gl1_0_glClearStencil(void *_glfuncs, GLint s); -void gl1_0_glClearColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl1_0_glClear(void *_glfuncs, GLbitfield mask); -void gl1_0_glDrawBuffer(void *_glfuncs, GLenum mode); -void gl1_0_glTexImage2D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl1_0_glTexImage1D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl1_0_glTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl1_0_glTexParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint param); -void gl1_0_glTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params); -void gl1_0_glTexParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param); -void gl1_0_glScissor(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height); -void gl1_0_glPolygonMode(void *_glfuncs, GLenum face, GLenum mode); -void gl1_0_glPointSize(void *_glfuncs, GLfloat size); -void gl1_0_glLineWidth(void *_glfuncs, GLfloat width); -void gl1_0_glHint(void *_glfuncs, GLenum target, GLenum mode); -void gl1_0_glFrontFace(void *_glfuncs, GLenum mode); -void gl1_0_glCullFace(void *_glfuncs, GLenum mode); -void gl1_0_glTranslatef(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl1_0_glTranslated(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl1_0_glScalef(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl1_0_glScaled(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl1_0_glRotatef(void *_glfuncs, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); -void gl1_0_glRotated(void *_glfuncs, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); -void gl1_0_glPushMatrix(void *_glfuncs); -void gl1_0_glPopMatrix(void *_glfuncs); -void gl1_0_glOrtho(void *_glfuncs, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -void gl1_0_glMultMatrixd(void *_glfuncs, const GLdouble* m); -void gl1_0_glMultMatrixf(void *_glfuncs, const GLfloat* m); -void gl1_0_glMatrixMode(void *_glfuncs, GLenum mode); -void gl1_0_glLoadMatrixd(void *_glfuncs, const GLdouble* m); -void gl1_0_glLoadMatrixf(void *_glfuncs, const GLfloat* m); -void gl1_0_glLoadIdentity(void *_glfuncs); -void gl1_0_glFrustum(void *_glfuncs, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -GLboolean gl1_0_glIsList(void *_glfuncs, GLuint list); -void gl1_0_glGetTexGeniv(void *_glfuncs, GLenum coord, GLenum pname, GLint* params); -void gl1_0_glGetTexGenfv(void *_glfuncs, GLenum coord, GLenum pname, GLfloat* params); -void gl1_0_glGetTexGendv(void *_glfuncs, GLenum coord, GLenum pname, GLdouble* params); -void gl1_0_glGetTexEnviv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl1_0_glGetTexEnvfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl1_0_glGetPolygonStipple(void *_glfuncs, GLubyte* mask); -void gl1_0_glGetPixelMapusv(void *_glfuncs, GLenum glmap, GLushort* values); -void gl1_0_glGetPixelMapuiv(void *_glfuncs, GLenum glmap, GLuint* values); -void gl1_0_glGetPixelMapfv(void *_glfuncs, GLenum glmap, GLfloat* values); -void gl1_0_glGetMaterialiv(void *_glfuncs, GLenum face, GLenum pname, GLint* params); -void gl1_0_glGetMaterialfv(void *_glfuncs, GLenum face, GLenum pname, GLfloat* params); -void gl1_0_glGetMapiv(void *_glfuncs, GLenum target, GLenum query, GLint* v); -void gl1_0_glGetMapfv(void *_glfuncs, GLenum target, GLenum query, GLfloat* v); -void gl1_0_glGetMapdv(void *_glfuncs, GLenum target, GLenum query, GLdouble* v); -void gl1_0_glGetLightiv(void *_glfuncs, GLenum light, GLenum pname, GLint* params); -void gl1_0_glGetLightfv(void *_glfuncs, GLenum light, GLenum pname, GLfloat* params); -void gl1_0_glGetClipPlane(void *_glfuncs, GLenum plane, GLdouble* equation); -void gl1_0_glDrawPixels(void *_glfuncs, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl1_0_glCopyPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum gltype); -void gl1_0_glPixelMapusv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLushort* values); -void gl1_0_glPixelMapuiv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLuint* values); -void gl1_0_glPixelMapfv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLfloat* values); -void gl1_0_glPixelTransferi(void *_glfuncs, GLenum pname, GLint param); -void gl1_0_glPixelTransferf(void *_glfuncs, GLenum pname, GLfloat param); -void gl1_0_glPixelZoom(void *_glfuncs, GLfloat xfactor, GLfloat yfactor); -void gl1_0_glAlphaFunc(void *_glfuncs, GLenum glfunc, GLfloat ref); -void gl1_0_glEvalPoint2(void *_glfuncs, GLint i, GLint j); -void gl1_0_glEvalMesh2(void *_glfuncs, GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2); -void gl1_0_glEvalPoint1(void *_glfuncs, GLint i); -void gl1_0_glEvalMesh1(void *_glfuncs, GLenum mode, GLint i1, GLint i2); -void gl1_0_glEvalCoord2fv(void *_glfuncs, const GLfloat* u); -void gl1_0_glEvalCoord2f(void *_glfuncs, GLfloat u, GLfloat v); -void gl1_0_glEvalCoord2dv(void *_glfuncs, const GLdouble* u); -void gl1_0_glEvalCoord2d(void *_glfuncs, GLdouble u, GLdouble v); -void gl1_0_glEvalCoord1fv(void *_glfuncs, const GLfloat* u); -void gl1_0_glEvalCoord1f(void *_glfuncs, GLfloat u); -void gl1_0_glEvalCoord1dv(void *_glfuncs, const GLdouble* u); -void gl1_0_glEvalCoord1d(void *_glfuncs, GLdouble u); -void gl1_0_glMapGrid2f(void *_glfuncs, GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2); -void gl1_0_glMapGrid2d(void *_glfuncs, GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2); -void gl1_0_glMapGrid1f(void *_glfuncs, GLint un, GLfloat u1, GLfloat u2); -void gl1_0_glMapGrid1d(void *_glfuncs, GLint un, GLdouble u1, GLdouble u2); -void gl1_0_glMap2f(void *_glfuncs, GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat* points); -void gl1_0_glMap2d(void *_glfuncs, GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble* points); -void gl1_0_glMap1f(void *_glfuncs, GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat* points); -void gl1_0_glMap1d(void *_glfuncs, GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble* points); -void gl1_0_glPushAttrib(void *_glfuncs, GLbitfield mask); -void gl1_0_glPopAttrib(void *_glfuncs); -void gl1_0_glAccum(void *_glfuncs, GLenum op, GLfloat value); -void gl1_0_glIndexMask(void *_glfuncs, GLuint mask); -void gl1_0_glClearIndex(void *_glfuncs, GLfloat c); -void gl1_0_glClearAccum(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl1_0_glPushName(void *_glfuncs, GLuint name); -void gl1_0_glPopName(void *_glfuncs); -void gl1_0_glPassThrough(void *_glfuncs, GLfloat token); -void gl1_0_glLoadName(void *_glfuncs, GLuint name); -void gl1_0_glInitNames(void *_glfuncs); -GLint gl1_0_glRenderMode(void *_glfuncs, GLenum mode); -void gl1_0_glSelectBuffer(void *_glfuncs, GLsizei size, GLuint* buffer); -void gl1_0_glFeedbackBuffer(void *_glfuncs, GLsizei size, GLenum gltype, GLfloat* buffer); -void gl1_0_glTexGeniv(void *_glfuncs, GLenum coord, GLenum pname, const GLint* params); -void gl1_0_glTexGeni(void *_glfuncs, GLenum coord, GLenum pname, GLint param); -void gl1_0_glTexGenfv(void *_glfuncs, GLenum coord, GLenum pname, const GLfloat* params); -void gl1_0_glTexGenf(void *_glfuncs, GLenum coord, GLenum pname, GLfloat param); -void gl1_0_glTexGendv(void *_glfuncs, GLenum coord, GLenum pname, const GLdouble* params); -void gl1_0_glTexGend(void *_glfuncs, GLenum coord, GLenum pname, GLdouble param); -void gl1_0_glTexEnviv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl1_0_glTexEnvi(void *_glfuncs, GLenum target, GLenum pname, GLint param); -void gl1_0_glTexEnvfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params); -void gl1_0_glTexEnvf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param); -void gl1_0_glShadeModel(void *_glfuncs, GLenum mode); -void gl1_0_glPolygonStipple(void *_glfuncs, const GLubyte* mask); -void gl1_0_glMaterialiv(void *_glfuncs, GLenum face, GLenum pname, const GLint* params); -void gl1_0_glMateriali(void *_glfuncs, GLenum face, GLenum pname, GLint param); -void gl1_0_glMaterialfv(void *_glfuncs, GLenum face, GLenum pname, const GLfloat* params); -void gl1_0_glMaterialf(void *_glfuncs, GLenum face, GLenum pname, GLfloat param); -void gl1_0_glLineStipple(void *_glfuncs, GLint factor, GLushort pattern); -void gl1_0_glLightModeliv(void *_glfuncs, GLenum pname, const GLint* params); -void gl1_0_glLightModeli(void *_glfuncs, GLenum pname, GLint param); -void gl1_0_glLightModelfv(void *_glfuncs, GLenum pname, const GLfloat* params); -void gl1_0_glLightModelf(void *_glfuncs, GLenum pname, GLfloat param); -void gl1_0_glLightiv(void *_glfuncs, GLenum light, GLenum pname, const GLint* params); -void gl1_0_glLighti(void *_glfuncs, GLenum light, GLenum pname, GLint param); -void gl1_0_glLightfv(void *_glfuncs, GLenum light, GLenum pname, const GLfloat* params); -void gl1_0_glLightf(void *_glfuncs, GLenum light, GLenum pname, GLfloat param); -void gl1_0_glFogiv(void *_glfuncs, GLenum pname, const GLint* params); -void gl1_0_glFogi(void *_glfuncs, GLenum pname, GLint param); -void gl1_0_glFogfv(void *_glfuncs, GLenum pname, const GLfloat* params); -void gl1_0_glFogf(void *_glfuncs, GLenum pname, GLfloat param); -void gl1_0_glColorMaterial(void *_glfuncs, GLenum face, GLenum mode); -void gl1_0_glClipPlane(void *_glfuncs, GLenum plane, const GLdouble* equation); -void gl1_0_glVertex4sv(void *_glfuncs, const GLshort* v); -void gl1_0_glVertex4s(void *_glfuncs, GLshort x, GLshort y, GLshort z, GLshort w); -void gl1_0_glVertex4iv(void *_glfuncs, const GLint* v); -void gl1_0_glVertex4i(void *_glfuncs, GLint x, GLint y, GLint z, GLint w); -void gl1_0_glVertex4fv(void *_glfuncs, const GLfloat* v); -void gl1_0_glVertex4f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -void gl1_0_glVertex4dv(void *_glfuncs, const GLdouble* v); -void gl1_0_glVertex4d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -void gl1_0_glVertex3sv(void *_glfuncs, const GLshort* v); -void gl1_0_glVertex3s(void *_glfuncs, GLshort x, GLshort y, GLshort z); -void gl1_0_glVertex3iv(void *_glfuncs, const GLint* v); -void gl1_0_glVertex3i(void *_glfuncs, GLint x, GLint y, GLint z); -void gl1_0_glVertex3fv(void *_glfuncs, const GLfloat* v); -void gl1_0_glVertex3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl1_0_glVertex3dv(void *_glfuncs, const GLdouble* v); -void gl1_0_glVertex3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl1_0_glVertex2sv(void *_glfuncs, const GLshort* v); -void gl1_0_glVertex2s(void *_glfuncs, GLshort x, GLshort y); -void gl1_0_glVertex2iv(void *_glfuncs, const GLint* v); -void gl1_0_glVertex2i(void *_glfuncs, GLint x, GLint y); -void gl1_0_glVertex2fv(void *_glfuncs, const GLfloat* v); -void gl1_0_glVertex2f(void *_glfuncs, GLfloat x, GLfloat y); -void gl1_0_glVertex2dv(void *_glfuncs, const GLdouble* v); -void gl1_0_glVertex2d(void *_glfuncs, GLdouble x, GLdouble y); -void gl1_0_glTexCoord4sv(void *_glfuncs, const GLshort* v); -void gl1_0_glTexCoord4s(void *_glfuncs, GLshort s, GLshort t, GLshort r, GLshort q); -void gl1_0_glTexCoord4iv(void *_glfuncs, const GLint* v); -void gl1_0_glTexCoord4i(void *_glfuncs, GLint s, GLint t, GLint r, GLint q); -void gl1_0_glTexCoord4fv(void *_glfuncs, const GLfloat* v); -void gl1_0_glTexCoord4f(void *_glfuncs, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -void gl1_0_glTexCoord4dv(void *_glfuncs, const GLdouble* v); -void gl1_0_glTexCoord4d(void *_glfuncs, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -void gl1_0_glTexCoord3sv(void *_glfuncs, const GLshort* v); -void gl1_0_glTexCoord3s(void *_glfuncs, GLshort s, GLshort t, GLshort r); -void gl1_0_glTexCoord3iv(void *_glfuncs, const GLint* v); -void gl1_0_glTexCoord3i(void *_glfuncs, GLint s, GLint t, GLint r); -void gl1_0_glTexCoord3fv(void *_glfuncs, const GLfloat* v); -void gl1_0_glTexCoord3f(void *_glfuncs, GLfloat s, GLfloat t, GLfloat r); -void gl1_0_glTexCoord3dv(void *_glfuncs, const GLdouble* v); -void gl1_0_glTexCoord3d(void *_glfuncs, GLdouble s, GLdouble t, GLdouble r); -void gl1_0_glTexCoord2sv(void *_glfuncs, const GLshort* v); -void gl1_0_glTexCoord2s(void *_glfuncs, GLshort s, GLshort t); -void gl1_0_glTexCoord2iv(void *_glfuncs, const GLint* v); -void gl1_0_glTexCoord2i(void *_glfuncs, GLint s, GLint t); -void gl1_0_glTexCoord2fv(void *_glfuncs, const GLfloat* v); -void gl1_0_glTexCoord2f(void *_glfuncs, GLfloat s, GLfloat t); -void gl1_0_glTexCoord2dv(void *_glfuncs, const GLdouble* v); -void gl1_0_glTexCoord2d(void *_glfuncs, GLdouble s, GLdouble t); -void gl1_0_glTexCoord1sv(void *_glfuncs, const GLshort* v); -void gl1_0_glTexCoord1s(void *_glfuncs, GLshort s); -void gl1_0_glTexCoord1iv(void *_glfuncs, const GLint* v); -void gl1_0_glTexCoord1i(void *_glfuncs, GLint s); -void gl1_0_glTexCoord1fv(void *_glfuncs, const GLfloat* v); -void gl1_0_glTexCoord1f(void *_glfuncs, GLfloat s); -void gl1_0_glTexCoord1dv(void *_glfuncs, const GLdouble* v); -void gl1_0_glTexCoord1d(void *_glfuncs, GLdouble s); -void gl1_0_glRectsv(void *_glfuncs, const GLshort* v1, const GLshort* v2); -void gl1_0_glRects(void *_glfuncs, GLshort x1, GLshort y1, GLshort x2, GLshort y2); -void gl1_0_glRectiv(void *_glfuncs, const GLint* v1, const GLint* v2); -void gl1_0_glRecti(void *_glfuncs, GLint x1, GLint y1, GLint x2, GLint y2); -void gl1_0_glRectfv(void *_glfuncs, const GLfloat* v1, const GLfloat* v2); -void gl1_0_glRectf(void *_glfuncs, GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2); -void gl1_0_glRectdv(void *_glfuncs, const GLdouble* v1, const GLdouble* v2); -void gl1_0_glRectd(void *_glfuncs, GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2); -void gl1_0_glRasterPos4sv(void *_glfuncs, const GLshort* v); -void gl1_0_glRasterPos4s(void *_glfuncs, GLshort x, GLshort y, GLshort z, GLshort w); -void gl1_0_glRasterPos4iv(void *_glfuncs, const GLint* v); -void gl1_0_glRasterPos4i(void *_glfuncs, GLint x, GLint y, GLint z, GLint w); -void gl1_0_glRasterPos4fv(void *_glfuncs, const GLfloat* v); -void gl1_0_glRasterPos4f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -void gl1_0_glRasterPos4dv(void *_glfuncs, const GLdouble* v); -void gl1_0_glRasterPos4d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -void gl1_0_glRasterPos3sv(void *_glfuncs, const GLshort* v); -void gl1_0_glRasterPos3s(void *_glfuncs, GLshort x, GLshort y, GLshort z); -void gl1_0_glRasterPos3iv(void *_glfuncs, const GLint* v); -void gl1_0_glRasterPos3i(void *_glfuncs, GLint x, GLint y, GLint z); -void gl1_0_glRasterPos3fv(void *_glfuncs, const GLfloat* v); -void gl1_0_glRasterPos3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl1_0_glRasterPos3dv(void *_glfuncs, const GLdouble* v); -void gl1_0_glRasterPos3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl1_0_glRasterPos2sv(void *_glfuncs, const GLshort* v); -void gl1_0_glRasterPos2s(void *_glfuncs, GLshort x, GLshort y); -void gl1_0_glRasterPos2iv(void *_glfuncs, const GLint* v); -void gl1_0_glRasterPos2i(void *_glfuncs, GLint x, GLint y); -void gl1_0_glRasterPos2fv(void *_glfuncs, const GLfloat* v); -void gl1_0_glRasterPos2f(void *_glfuncs, GLfloat x, GLfloat y); -void gl1_0_glRasterPos2dv(void *_glfuncs, const GLdouble* v); -void gl1_0_glRasterPos2d(void *_glfuncs, GLdouble x, GLdouble y); -void gl1_0_glNormal3sv(void *_glfuncs, const GLshort* v); -void gl1_0_glNormal3s(void *_glfuncs, GLshort nx, GLshort ny, GLshort nz); -void gl1_0_glNormal3iv(void *_glfuncs, const GLint* v); -void gl1_0_glNormal3i(void *_glfuncs, GLint nx, GLint ny, GLint nz); -void gl1_0_glNormal3fv(void *_glfuncs, const GLfloat* v); -void gl1_0_glNormal3f(void *_glfuncs, GLfloat nx, GLfloat ny, GLfloat nz); -void gl1_0_glNormal3dv(void *_glfuncs, const GLdouble* v); -void gl1_0_glNormal3d(void *_glfuncs, GLdouble nx, GLdouble ny, GLdouble nz); -void gl1_0_glNormal3bv(void *_glfuncs, const GLbyte* v); -void gl1_0_glNormal3b(void *_glfuncs, GLbyte nx, GLbyte ny, GLbyte nz); -void gl1_0_glIndexsv(void *_glfuncs, const GLshort* c); -void gl1_0_glIndexs(void *_glfuncs, GLshort c); -void gl1_0_glIndexiv(void *_glfuncs, const GLint* c); -void gl1_0_glIndexi(void *_glfuncs, GLint c); -void gl1_0_glIndexfv(void *_glfuncs, const GLfloat* c); -void gl1_0_glIndexf(void *_glfuncs, GLfloat c); -void gl1_0_glIndexdv(void *_glfuncs, const GLdouble* c); -void gl1_0_glIndexd(void *_glfuncs, GLdouble c); -void gl1_0_glEnd(void *_glfuncs); -void gl1_0_glEdgeFlagv(void *_glfuncs, const GLboolean* flag); -void gl1_0_glEdgeFlag(void *_glfuncs, GLboolean flag); -void gl1_0_glColor4usv(void *_glfuncs, const GLushort* v); -void gl1_0_glColor4us(void *_glfuncs, GLushort red, GLushort green, GLushort blue, GLushort alpha); -void gl1_0_glColor4uiv(void *_glfuncs, const GLuint* v); -void gl1_0_glColor4ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue, GLuint alpha); -void gl1_0_glColor4ubv(void *_glfuncs, const GLubyte* v); -void gl1_0_glColor4ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha); -void gl1_0_glColor4sv(void *_glfuncs, const GLshort* v); -void gl1_0_glColor4s(void *_glfuncs, GLshort red, GLshort green, GLshort blue, GLshort alpha); -void gl1_0_glColor4iv(void *_glfuncs, const GLint* v); -void gl1_0_glColor4i(void *_glfuncs, GLint red, GLint green, GLint blue, GLint alpha); -void gl1_0_glColor4fv(void *_glfuncs, const GLfloat* v); -void gl1_0_glColor4f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl1_0_glColor4dv(void *_glfuncs, const GLdouble* v); -void gl1_0_glColor4d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha); -void gl1_0_glColor4bv(void *_glfuncs, const GLbyte* v); -void gl1_0_glColor4b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha); -void gl1_0_glColor3usv(void *_glfuncs, const GLushort* v); -void gl1_0_glColor3us(void *_glfuncs, GLushort red, GLushort green, GLushort blue); -void gl1_0_glColor3uiv(void *_glfuncs, const GLuint* v); -void gl1_0_glColor3ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue); -void gl1_0_glColor3ubv(void *_glfuncs, const GLubyte* v); -void gl1_0_glColor3ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue); -void gl1_0_glColor3sv(void *_glfuncs, const GLshort* v); -void gl1_0_glColor3s(void *_glfuncs, GLshort red, GLshort green, GLshort blue); -void gl1_0_glColor3iv(void *_glfuncs, const GLint* v); -void gl1_0_glColor3i(void *_glfuncs, GLint red, GLint green, GLint blue); -void gl1_0_glColor3fv(void *_glfuncs, const GLfloat* v); -void gl1_0_glColor3f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue); -void gl1_0_glColor3dv(void *_glfuncs, const GLdouble* v); -void gl1_0_glColor3d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue); -void gl1_0_glColor3bv(void *_glfuncs, const GLbyte* v); -void gl1_0_glColor3b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue); -void gl1_0_glBitmap(void *_glfuncs, GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte* bitmap); -void gl1_0_glBegin(void *_glfuncs, GLenum mode); -void gl1_0_glListBase(void *_glfuncs, GLuint base); -GLuint gl1_0_glGenLists(void *_glfuncs, GLsizei range_); -void gl1_0_glDeleteLists(void *_glfuncs, GLuint list, GLsizei range_); -void gl1_0_glCallLists(void *_glfuncs, GLsizei n, GLenum gltype, const GLvoid* lists); -void gl1_0_glCallList(void *_glfuncs, GLuint list); -void gl1_0_glEndList(void *_glfuncs); -void gl1_0_glNewList(void *_glfuncs, GLuint list, GLenum mode); - - -#ifdef __cplusplus -} // extern "C" -#endif diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/1.0/gl.go b/Godeps/_workspace/src/github.com/obscuren/qml/gl/1.0/gl.go deleted file mode 100644 index ce6c47ce45..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/1.0/gl.go +++ /dev/null @@ -1,2528 +0,0 @@ -// ** file automatically generated by glgen -- do not edit manually ** - -package GL - -// #cgo CXXFLAGS: -std=c++0x -pedantic-errors -Wall -fno-strict-aliasing -// #cgo LDFLAGS: -lstdc++ -// #cgo pkg-config: Qt5Core Qt5OpenGL -// -// #include "funcs.h" -// -// void free(void*); -// -import "C" - -import ( - "fmt" - "reflect" - "unsafe" - - "gopkg.in/qml.v1/gl/glbase" -) - -// API returns a value that offers methods matching the OpenGL version 1.0 API. -// -// The returned API must not be used after the provided OpenGL context becomes invalid. -func API(context glbase.Contexter) *GL { - gl := &GL{} - gl.funcs = C.gl1_0_funcs() - if gl.funcs == nil { - panic(fmt.Errorf("OpenGL version 1.0 is not available")) - } - return gl -} - -// GL implements the OpenGL version 1.0 API. Values of this -// type must be created via the API function, and it must not be used after -// the associated OpenGL context becomes invalid. -type GL struct { - funcs unsafe.Pointer -} - -const ( - FALSE = 0 - TRUE = 1 - NONE = 0 - - BYTE = 0x1400 - UNSIGNED_BYTE = 0x1401 - SHORT = 0x1402 - UNSIGNED_SHORT = 0x1403 - INT = 0x1404 - UNSIGNED_INT = 0x1405 - FLOAT = 0x1406 - N2_BYTES = 0x1407 - N3_BYTES = 0x1408 - N4_BYTES = 0x1409 - DOUBLE = 0x140A - - ACCUM = 0x0100 - LOAD = 0x0101 - RETURN = 0x0102 - MULT = 0x0103 - ADD = 0x0104 - - ACCUM_BUFFER_BIT = 0x00000200 - ALL_ATTRIB_BITS = 0xFFFFFFFF - COLOR_BUFFER_BIT = 0x00004000 - CURRENT_BIT = 0x00000001 - DEPTH_BUFFER_BIT = 0x00000100 - ENABLE_BIT = 0x00002000 - EVAL_BIT = 0x00010000 - FOG_BIT = 0x00000080 - HINT_BIT = 0x00008000 - LIGHTING_BIT = 0x00000040 - LINE_BIT = 0x00000004 - LIST_BIT = 0x00020000 - PIXEL_MODE_BIT = 0x00000020 - POINT_BIT = 0x00000002 - POLYGON_BIT = 0x00000008 - POLYGON_STIPPLE_BIT = 0x00000010 - SCISSOR_BIT = 0x00080000 - STENCIL_BUFFER_BIT = 0x00000400 - TEXTURE_BIT = 0x00040000 - TRANSFORM_BIT = 0x00001000 - VIEWPORT_BIT = 0x00000800 - - ALWAYS = 0x0207 - EQUAL = 0x0202 - GEQUAL = 0x0206 - GREATER = 0x0204 - LEQUAL = 0x0203 - LESS = 0x0201 - NEVER = 0x0200 - NOTEQUAL = 0x0205 - - LOGIC_OP = 0x0BF1 - - DST_ALPHA = 0x0304 - ONE = 1 - ONE_MINUS_DST_ALPHA = 0x0305 - ONE_MINUS_SRC_ALPHA = 0x0303 - ONE_MINUS_SRC_COLOR = 0x0301 - SRC_ALPHA = 0x0302 - SRC_COLOR = 0x0300 - ZERO = 0 - - DST_COLOR = 0x0306 - ONE_MINUS_DST_COLOR = 0x0307 - SRC_ALPHA_SATURATE = 0x0308 - - CLIENT_ALL_ATTRIB_BITS = 0xFFFFFFFF - CLIENT_PIXEL_STORE_BIT = 0x00000001 - CLIENT_VERTEX_ARRAY_BIT = 0x00000002 - - CLIP_PLANE0 = 0x3000 - CLIP_PLANE1 = 0x3001 - CLIP_PLANE2 = 0x3002 - CLIP_PLANE3 = 0x3003 - CLIP_PLANE4 = 0x3004 - CLIP_PLANE5 = 0x3005 - - BACK = 0x0405 - FRONT = 0x0404 - FRONT_AND_BACK = 0x0408 - - AMBIENT = 0x1200 - AMBIENT_AND_DIFFUSE = 0x1602 - DIFFUSE = 0x1201 - EMISSION = 0x1600 - SPECULAR = 0x1202 - - AUX0 = 0x0409 - AUX1 = 0x040A - AUX2 = 0x040B - AUX3 = 0x040C - BACK_LEFT = 0x0402 - BACK_RIGHT = 0x0403 - FRONT_LEFT = 0x0400 - FRONT_RIGHT = 0x0401 - LEFT = 0x0406 - RIGHT = 0x0407 - - ALPHA_TEST = 0x0BC0 - AUTO_NORMAL = 0x0D80 - BLEND = 0x0BE2 - COLOR_ARRAY = 0x8076 - COLOR_LOGIC_OP = 0x0BF2 - COLOR_MATERIAL = 0x0B57 - CULL_FACE = 0x0B44 - DEPTH_TEST = 0x0B71 - DITHER = 0x0BD0 - EDGE_FLAG_ARRAY = 0x8079 - FOG = 0x0B60 - INDEX_ARRAY = 0x8077 - INDEX_LOGIC_OP = 0x0BF1 - LIGHT0 = 0x4000 - LIGHT1 = 0x4001 - LIGHT2 = 0x4002 - LIGHT3 = 0x4003 - LIGHT4 = 0x4004 - LIGHT5 = 0x4005 - LIGHT6 = 0x4006 - LIGHT7 = 0x4007 - LIGHTING = 0x0B50 - LINE_SMOOTH = 0x0B20 - LINE_STIPPLE = 0x0B24 - MAP1_COLOR_4 = 0x0D90 - MAP1_INDEX = 0x0D91 - MAP1_NORMAL = 0x0D92 - MAP1_TEXTURE_COORD_1 = 0x0D93 - MAP1_TEXTURE_COORD_2 = 0x0D94 - MAP1_TEXTURE_COORD_3 = 0x0D95 - MAP1_TEXTURE_COORD_4 = 0x0D96 - MAP1_VERTEX_3 = 0x0D97 - MAP1_VERTEX_4 = 0x0D98 - MAP2_COLOR_4 = 0x0DB0 - MAP2_INDEX = 0x0DB1 - MAP2_NORMAL = 0x0DB2 - MAP2_TEXTURE_COORD_1 = 0x0DB3 - MAP2_TEXTURE_COORD_2 = 0x0DB4 - MAP2_TEXTURE_COORD_3 = 0x0DB5 - MAP2_TEXTURE_COORD_4 = 0x0DB6 - MAP2_VERTEX_3 = 0x0DB7 - MAP2_VERTEX_4 = 0x0DB8 - NORMALIZE = 0x0BA1 - NORMAL_ARRAY = 0x8075 - POINT_SMOOTH = 0x0B10 - POLYGON_OFFSET_FILL = 0x8037 - POLYGON_OFFSET_LINE = 0x2A02 - POLYGON_OFFSET_POINT = 0x2A01 - POLYGON_SMOOTH = 0x0B41 - POLYGON_STIPPLE = 0x0B42 - SCISSOR_TEST = 0x0C11 - STENCIL_TEST = 0x0B90 - TEXTURE_1D = 0x0DE0 - TEXTURE_2D = 0x0DE1 - TEXTURE_COORD_ARRAY = 0x8078 - TEXTURE_GEN_Q = 0x0C63 - TEXTURE_GEN_R = 0x0C62 - TEXTURE_GEN_S = 0x0C60 - TEXTURE_GEN_T = 0x0C61 - VERTEX_ARRAY = 0x8074 - - INVALID_ENUM = 0x0500 - INVALID_OPERATION = 0x0502 - INVALID_VALUE = 0x0501 - NO_ERROR = 0 - OUT_OF_MEMORY = 0x0505 - STACK_OVERFLOW = 0x0503 - STACK_UNDERFLOW = 0x0504 - - N2D = 0x0600 - N3D = 0x0601 - N3D_COLOR = 0x0602 - N3D_COLOR_TEXTURE = 0x0603 - N4D_COLOR_TEXTURE = 0x0604 - - BITMAP_TOKEN = 0x0704 - COPY_PIXEL_TOKEN = 0x0706 - DRAW_PIXEL_TOKEN = 0x0705 - LINE_RESET_TOKEN = 0x0707 - LINE_TOKEN = 0x0702 - PASS_THROUGH_TOKEN = 0x0700 - POINT_TOKEN = 0x0701 - POLYGON_TOKEN = 0x0703 - - EXP = 0x0800 - EXP2 = 0x0801 - LINEAR = 0x2601 - - FOG_COLOR = 0x0B66 - FOG_DENSITY = 0x0B62 - FOG_END = 0x0B64 - FOG_INDEX = 0x0B61 - FOG_MODE = 0x0B65 - FOG_START = 0x0B63 - - CCW = 0x0901 - CW = 0x0900 - - COEFF = 0x0A00 - DOMAIN = 0x0A02 - ORDER = 0x0A01 - - PIXEL_MAP_A_TO_A = 0x0C79 - PIXEL_MAP_B_TO_B = 0x0C78 - PIXEL_MAP_G_TO_G = 0x0C77 - PIXEL_MAP_I_TO_A = 0x0C75 - PIXEL_MAP_I_TO_B = 0x0C74 - PIXEL_MAP_I_TO_G = 0x0C73 - PIXEL_MAP_I_TO_I = 0x0C70 - PIXEL_MAP_I_TO_R = 0x0C72 - PIXEL_MAP_R_TO_R = 0x0C76 - PIXEL_MAP_S_TO_S = 0x0C71 - - ACCUM_ALPHA_BITS = 0x0D5B - ACCUM_BLUE_BITS = 0x0D5A - ACCUM_CLEAR_VALUE = 0x0B80 - ACCUM_GREEN_BITS = 0x0D59 - ACCUM_RED_BITS = 0x0D58 - ALPHA_BIAS = 0x0D1D - ALPHA_BITS = 0x0D55 - ALPHA_SCALE = 0x0D1C - ALPHA_TEST_FUNC = 0x0BC1 - ALPHA_TEST_REF = 0x0BC2 - ATTRIB_STACK_DEPTH = 0x0BB0 - AUX_BUFFERS = 0x0C00 - BLEND_DST = 0x0BE0 - BLEND_SRC = 0x0BE1 - BLUE_BIAS = 0x0D1B - BLUE_BITS = 0x0D54 - BLUE_SCALE = 0x0D1A - CLIENT_ATTRIB_STACK_DEPTH = 0x0BB1 - COLOR_ARRAY_SIZE = 0x8081 - COLOR_ARRAY_STRIDE = 0x8083 - COLOR_ARRAY_TYPE = 0x8082 - COLOR_CLEAR_VALUE = 0x0C22 - COLOR_MATERIAL_FACE = 0x0B55 - COLOR_MATERIAL_PARAMETER = 0x0B56 - COLOR_WRITEMASK = 0x0C23 - CULL_FACE_MODE = 0x0B45 - CURRENT_COLOR = 0x0B00 - CURRENT_INDEX = 0x0B01 - CURRENT_NORMAL = 0x0B02 - CURRENT_RASTER_COLOR = 0x0B04 - CURRENT_RASTER_DISTANCE = 0x0B09 - CURRENT_RASTER_INDEX = 0x0B05 - CURRENT_RASTER_POSITION = 0x0B07 - CURRENT_RASTER_POSITION_VALID = 0x0B08 - CURRENT_RASTER_TEXTURE_COORDS = 0x0B06 - CURRENT_TEXTURE_COORDS = 0x0B03 - DEPTH_BIAS = 0x0D1F - DEPTH_BITS = 0x0D56 - DEPTH_CLEAR_VALUE = 0x0B73 - DEPTH_FUNC = 0x0B74 - DEPTH_RANGE = 0x0B70 - DEPTH_SCALE = 0x0D1E - DEPTH_WRITEMASK = 0x0B72 - DOUBLEBUFFER = 0x0C32 - DRAW_BUFFER = 0x0C01 - EDGE_FLAG = 0x0B43 - EDGE_FLAG_ARRAY_STRIDE = 0x808C - FEEDBACK_BUFFER_SIZE = 0x0DF1 - FEEDBACK_BUFFER_TYPE = 0x0DF2 - FOG_HINT = 0x0C54 - FRONT_FACE = 0x0B46 - GREEN_BIAS = 0x0D19 - GREEN_BITS = 0x0D53 - GREEN_SCALE = 0x0D18 - INDEX_ARRAY_STRIDE = 0x8086 - INDEX_ARRAY_TYPE = 0x8085 - INDEX_BITS = 0x0D51 - INDEX_CLEAR_VALUE = 0x0C20 - INDEX_MODE = 0x0C30 - INDEX_OFFSET = 0x0D13 - INDEX_SHIFT = 0x0D12 - INDEX_WRITEMASK = 0x0C21 - LIGHT_MODEL_AMBIENT = 0x0B53 - LIGHT_MODEL_LOCAL_VIEWER = 0x0B51 - LIGHT_MODEL_TWO_SIDE = 0x0B52 - LINE_SMOOTH_HINT = 0x0C52 - LINE_STIPPLE_PATTERN = 0x0B25 - LINE_STIPPLE_REPEAT = 0x0B26 - LINE_WIDTH = 0x0B21 - LINE_WIDTH_GRANULARITY = 0x0B23 - LINE_WIDTH_RANGE = 0x0B22 - LIST_BASE = 0x0B32 - LIST_INDEX = 0x0B33 - LIST_MODE = 0x0B30 - LOGIC_OP_MODE = 0x0BF0 - MAP1_GRID_DOMAIN = 0x0DD0 - MAP1_GRID_SEGMENTS = 0x0DD1 - MAP2_GRID_DOMAIN = 0x0DD2 - MAP2_GRID_SEGMENTS = 0x0DD3 - MAP_COLOR = 0x0D10 - MAP_STENCIL = 0x0D11 - MATRIX_MODE = 0x0BA0 - MAX_ATTRIB_STACK_DEPTH = 0x0D35 - MAX_CLIENT_ATTRIB_STACK_DEPTH = 0x0D3B - MAX_CLIP_PLANES = 0x0D32 - MAX_EVAL_ORDER = 0x0D30 - MAX_LIGHTS = 0x0D31 - MAX_LIST_NESTING = 0x0B31 - MAX_MODELVIEW_STACK_DEPTH = 0x0D36 - MAX_NAME_STACK_DEPTH = 0x0D37 - MAX_PIXEL_MAP_TABLE = 0x0D34 - MAX_PROJECTION_STACK_DEPTH = 0x0D38 - MAX_TEXTURE_SIZE = 0x0D33 - MAX_TEXTURE_STACK_DEPTH = 0x0D39 - MAX_VIEWPORT_DIMS = 0x0D3A - MODELVIEW_MATRIX = 0x0BA6 - MODELVIEW_STACK_DEPTH = 0x0BA3 - NAME_STACK_DEPTH = 0x0D70 - NORMAL_ARRAY_STRIDE = 0x807F - NORMAL_ARRAY_TYPE = 0x807E - PACK_ALIGNMENT = 0x0D05 - PACK_LSB_FIRST = 0x0D01 - PACK_ROW_LENGTH = 0x0D02 - PACK_SKIP_PIXELS = 0x0D04 - PACK_SKIP_ROWS = 0x0D03 - PACK_SWAP_BYTES = 0x0D00 - PERSPECTIVE_CORRECTION_HINT = 0x0C50 - PIXEL_MAP_A_TO_A_SIZE = 0x0CB9 - PIXEL_MAP_B_TO_B_SIZE = 0x0CB8 - PIXEL_MAP_G_TO_G_SIZE = 0x0CB7 - PIXEL_MAP_I_TO_A_SIZE = 0x0CB5 - PIXEL_MAP_I_TO_B_SIZE = 0x0CB4 - PIXEL_MAP_I_TO_G_SIZE = 0x0CB3 - PIXEL_MAP_I_TO_I_SIZE = 0x0CB0 - PIXEL_MAP_I_TO_R_SIZE = 0x0CB2 - PIXEL_MAP_R_TO_R_SIZE = 0x0CB6 - PIXEL_MAP_S_TO_S_SIZE = 0x0CB1 - POINT_SIZE = 0x0B11 - POINT_SIZE_GRANULARITY = 0x0B13 - POINT_SIZE_RANGE = 0x0B12 - POINT_SMOOTH_HINT = 0x0C51 - POLYGON_MODE = 0x0B40 - POLYGON_OFFSET_FACTOR = 0x8038 - POLYGON_OFFSET_UNITS = 0x2A00 - POLYGON_SMOOTH_HINT = 0x0C53 - PROJECTION_MATRIX = 0x0BA7 - PROJECTION_STACK_DEPTH = 0x0BA4 - READ_BUFFER = 0x0C02 - RED_BIAS = 0x0D15 - RED_BITS = 0x0D52 - RED_SCALE = 0x0D14 - RENDER_MODE = 0x0C40 - RGBA_MODE = 0x0C31 - SCISSOR_BOX = 0x0C10 - SELECTION_BUFFER_SIZE = 0x0DF4 - SHADE_MODEL = 0x0B54 - STENCIL_BITS = 0x0D57 - STENCIL_CLEAR_VALUE = 0x0B91 - STENCIL_FAIL = 0x0B94 - STENCIL_FUNC = 0x0B92 - STENCIL_PASS_DEPTH_FAIL = 0x0B95 - STENCIL_PASS_DEPTH_PASS = 0x0B96 - STENCIL_REF = 0x0B97 - STENCIL_VALUE_MASK = 0x0B93 - STENCIL_WRITEMASK = 0x0B98 - STEREO = 0x0C33 - SUBPIXEL_BITS = 0x0D50 - TEXTURE_BINDING_1D = 0x8068 - TEXTURE_BINDING_2D = 0x8069 - TEXTURE_COORD_ARRAY_SIZE = 0x8088 - TEXTURE_COORD_ARRAY_STRIDE = 0x808A - TEXTURE_COORD_ARRAY_TYPE = 0x8089 - TEXTURE_MATRIX = 0x0BA8 - TEXTURE_STACK_DEPTH = 0x0BA5 - UNPACK_ALIGNMENT = 0x0CF5 - UNPACK_LSB_FIRST = 0x0CF1 - UNPACK_ROW_LENGTH = 0x0CF2 - UNPACK_SKIP_PIXELS = 0x0CF4 - UNPACK_SKIP_ROWS = 0x0CF3 - UNPACK_SWAP_BYTES = 0x0CF0 - VERTEX_ARRAY_SIZE = 0x807A - VERTEX_ARRAY_STRIDE = 0x807C - VERTEX_ARRAY_TYPE = 0x807B - VIEWPORT = 0x0BA2 - ZOOM_X = 0x0D16 - ZOOM_Y = 0x0D17 - - COLOR_ARRAY_POINTER = 0x8090 - EDGE_FLAG_ARRAY_POINTER = 0x8093 - FEEDBACK_BUFFER_POINTER = 0x0DF0 - INDEX_ARRAY_POINTER = 0x8091 - NORMAL_ARRAY_POINTER = 0x808F - SELECTION_BUFFER_POINTER = 0x0DF3 - TEXTURE_COORD_ARRAY_POINTER = 0x8092 - VERTEX_ARRAY_POINTER = 0x808E - - TEXTURE_ALPHA_SIZE = 0x805F - TEXTURE_BLUE_SIZE = 0x805E - TEXTURE_BORDER = 0x1005 - TEXTURE_BORDER_COLOR = 0x1004 - TEXTURE_COMPONENTS = 0x1003 - TEXTURE_GREEN_SIZE = 0x805D - TEXTURE_HEIGHT = 0x1001 - TEXTURE_INTENSITY_SIZE = 0x8061 - TEXTURE_INTERNAL_FORMAT = 0x1003 - TEXTURE_LUMINANCE_SIZE = 0x8060 - TEXTURE_MAG_FILTER = 0x2800 - TEXTURE_MIN_FILTER = 0x2801 - TEXTURE_PRIORITY = 0x8066 - TEXTURE_RED_SIZE = 0x805C - TEXTURE_RESIDENT = 0x8067 - TEXTURE_WIDTH = 0x1000 - TEXTURE_WRAP_S = 0x2802 - TEXTURE_WRAP_T = 0x2803 - - DONT_CARE = 0x1100 - FASTEST = 0x1101 - NICEST = 0x1102 - - C3F_V3F = 0x2A24 - C4F_N3F_V3F = 0x2A26 - C4UB_V2F = 0x2A22 - C4UB_V3F = 0x2A23 - N3F_V3F = 0x2A25 - T2F_C3F_V3F = 0x2A2A - T2F_C4F_N3F_V3F = 0x2A2C - T2F_C4UB_V3F = 0x2A29 - T2F_N3F_V3F = 0x2A2B - T2F_V3F = 0x2A27 - T4F_C4F_N3F_V4F = 0x2A2D - T4F_V4F = 0x2A28 - V2F = 0x2A20 - V3F = 0x2A21 - - MODULATE = 0x2100 - REPLACE = 0x1E01 - - CONSTANT_ATTENUATION = 0x1207 - LINEAR_ATTENUATION = 0x1208 - POSITION = 0x1203 - QUADRATIC_ATTENUATION = 0x1209 - SPOT_CUTOFF = 0x1206 - SPOT_DIRECTION = 0x1204 - SPOT_EXPONENT = 0x1205 - - COMPILE = 0x1300 - COMPILE_AND_EXECUTE = 0x1301 - - AND = 0x1501 - AND_INVERTED = 0x1504 - AND_REVERSE = 0x1502 - CLEAR = 0x1500 - COPY = 0x1503 - COPY_INVERTED = 0x150C - EQUIV = 0x1509 - INVERT = 0x150A - NAND = 0x150E - NOOP = 0x1505 - NOR = 0x1508 - OR = 0x1507 - OR_INVERTED = 0x150D - OR_REVERSE = 0x150B - SET = 0x150F - XOR = 0x1506 - - COLOR_INDEXES = 0x1603 - SHININESS = 0x1601 - - MODELVIEW = 0x1700 - PROJECTION = 0x1701 - TEXTURE = 0x1702 - - LINE = 0x1B01 - POINT = 0x1B00 - - FILL = 0x1B02 - - COLOR = 0x1800 - DEPTH = 0x1801 - STENCIL = 0x1802 - - ALPHA = 0x1906 - BLUE = 0x1905 - COLOR_INDEX = 0x1900 - DEPTH_COMPONENT = 0x1902 - GREEN = 0x1904 - LUMINANCE = 0x1909 - LUMINANCE_ALPHA = 0x190A - RED = 0x1903 - RGB = 0x1907 - RGBA = 0x1908 - STENCIL_INDEX = 0x1901 - - ALPHA12 = 0x803D - ALPHA16 = 0x803E - ALPHA4 = 0x803B - ALPHA8 = 0x803C - INTENSITY = 0x8049 - INTENSITY12 = 0x804C - INTENSITY16 = 0x804D - INTENSITY4 = 0x804A - INTENSITY8 = 0x804B - LUMINANCE12 = 0x8041 - LUMINANCE12_ALPHA12 = 0x8047 - LUMINANCE12_ALPHA4 = 0x8046 - LUMINANCE16 = 0x8042 - LUMINANCE16_ALPHA16 = 0x8048 - LUMINANCE4 = 0x803F - LUMINANCE4_ALPHA4 = 0x8043 - LUMINANCE6_ALPHA2 = 0x8044 - LUMINANCE8 = 0x8040 - LUMINANCE8_ALPHA8 = 0x8045 - R3_G3_B2 = 0x2A10 - RGB10 = 0x8052 - RGB10_A2 = 0x8059 - RGB12 = 0x8053 - RGB16 = 0x8054 - RGB4 = 0x804F - RGB5 = 0x8050 - RGB5_A1 = 0x8057 - RGB8 = 0x8051 - RGBA12 = 0x805A - RGBA16 = 0x805B - RGBA2 = 0x8055 - RGBA4 = 0x8056 - RGBA8 = 0x8058 - - BITMAP = 0x1A00 - - LINES = 0x0001 - LINE_LOOP = 0x0002 - LINE_STRIP = 0x0003 - POINTS = 0x0000 - POLYGON = 0x0009 - QUADS = 0x0007 - QUAD_STRIP = 0x0008 - TRIANGLES = 0x0004 - TRIANGLE_FAN = 0x0006 - TRIANGLE_STRIP = 0x0005 - - FEEDBACK = 0x1C01 - RENDER = 0x1C00 - SELECT = 0x1C02 - - FLAT = 0x1D00 - SMOOTH = 0x1D01 - - DECR = 0x1E03 - INCR = 0x1E02 - KEEP = 0x1E00 - - EXTENSIONS = 0x1F03 - RENDERER = 0x1F01 - VENDOR = 0x1F00 - VERSION = 0x1F02 - - S = 0x2000 - T = 0x2001 - R = 0x2002 - Q = 0x2003 - - DECAL = 0x2101 - - TEXTURE_ENV_COLOR = 0x2201 - TEXTURE_ENV_MODE = 0x2200 - - TEXTURE_ENV = 0x2300 - - EYE_LINEAR = 0x2400 - OBJECT_LINEAR = 0x2401 - SPHERE_MAP = 0x2402 - - EYE_PLANE = 0x2502 - OBJECT_PLANE = 0x2501 - TEXTURE_GEN_MODE = 0x2500 - - NEAREST = 0x2600 - - LINEAR_MIPMAP_LINEAR = 0x2703 - LINEAR_MIPMAP_NEAREST = 0x2701 - NEAREST_MIPMAP_LINEAR = 0x2702 - NEAREST_MIPMAP_NEAREST = 0x2700 - - PROXY_TEXTURE_1D = 0x8063 - PROXY_TEXTURE_2D = 0x8064 - - CLAMP = 0x2900 - REPEAT = 0x2901 -) - -// https://www.opengl.org/sdk/docs/man2/xhtml/glViewport.xml -func (gl *GL) Viewport(x, y, width, height int) { - C.gl1_0_glViewport(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// DepthRange specifies the mapping of depth values from normalized device -// coordinates to window coordinates. -// -// Parameter nearVal specifies the mapping of the near clipping plane to window -// coordinates (defaults to 0), while farVal specifies the mapping of the far -// clipping plane to window coordinates (defaults to 1). -// -// After clipping and division by w, depth coordinates range from -1 to 1, -// corresponding to the near and far clipping planes. DepthRange specifies a -// linear mapping of the normalized depth coordinates in this range to window -// depth coordinates. Regardless of the actual depth buffer implementation, -// window coordinate depth values are treated as though they range from 0 through 1 -// (like color components). Thus, the values accepted by DepthRange are both -// clamped to this range before they are accepted. -// -// The default setting of (0, 1) maps the near plane to 0 and the far plane to 1. -// With this mapping, the depth buffer range is fully utilized. -// -// It is not necessary that nearVal be less than farVal. Reverse mappings such as -// nearVal 1, and farVal 0 are acceptable. -// -// GL.INVALID_OPERATION is generated if DepthRange is executed between the -// execution of Begin and the corresponding execution of End. -func (gl *GL) DepthRange(nearVal, farVal float64) { - C.gl1_0_glDepthRange(gl.funcs, C.GLdouble(nearVal), C.GLdouble(farVal)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIsEnabled.xml -func (gl *GL) IsEnabled(cap glbase.Enum) bool { - glresult := C.gl1_0_glIsEnabled(gl.funcs, C.GLenum(cap)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexLevelParameteriv.xml -func (gl *GL) GetTexLevelParameteriv(target glbase.Enum, level int, pname glbase.Enum, params []int32) { - C.gl1_0_glGetTexLevelParameteriv(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexLevelParameterfv.xml -func (gl *GL) GetTexLevelParameterfv(target glbase.Enum, level int, pname glbase.Enum, params []float32) { - C.gl1_0_glGetTexLevelParameterfv(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexParameteriv.xml -func (gl *GL) GetTexParameteriv(target, pname glbase.Enum, params []int32) { - C.gl1_0_glGetTexParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexParameterfv.xml -func (gl *GL) GetTexParameterfv(target, pname glbase.Enum, params []float32) { - C.gl1_0_glGetTexParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexImage.xml -func (gl *GL) GetTexImage(target glbase.Enum, level int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl1_0_glGetTexImage(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetIntegerv.xml -func (gl *GL) GetIntegerv(pname glbase.Enum, params []int32) { - C.gl1_0_glGetIntegerv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetFloatv.xml -func (gl *GL) GetFloatv(pname glbase.Enum, params []float32) { - C.gl1_0_glGetFloatv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetError.xml -func (gl *GL) GetError() glbase.Enum { - glresult := C.gl1_0_glGetError(gl.funcs) - return glbase.Enum(glresult) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetDoublev.xml -func (gl *GL) GetDoublev(pname glbase.Enum, params []float64) { - C.gl1_0_glGetDoublev(gl.funcs, C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetBooleanv.xml -func (gl *GL) GetBooleanv(pname glbase.Enum, params []bool) { - C.gl1_0_glGetBooleanv(gl.funcs, C.GLenum(pname), (*C.GLboolean)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glReadPixels.xml -func (gl *GL) ReadPixels(x, y, width, height int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl1_0_glReadPixels(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glReadBuffer.xml -func (gl *GL) ReadBuffer(mode glbase.Enum) { - C.gl1_0_glReadBuffer(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPixelStorei.xml -func (gl *GL) PixelStorei(pname glbase.Enum, param int32) { - C.gl1_0_glPixelStorei(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPixelStoref.xml -func (gl *GL) PixelStoref(pname glbase.Enum, param float32) { - C.gl1_0_glPixelStoref(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDepthFunc.xml -func (gl *GL) DepthFunc(glfunc glbase.Enum) { - C.gl1_0_glDepthFunc(gl.funcs, C.GLenum(glfunc)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glStencilOp.xml -func (gl *GL) StencilOp(fail, zfail, zpass glbase.Enum) { - C.gl1_0_glStencilOp(gl.funcs, C.GLenum(fail), C.GLenum(zfail), C.GLenum(zpass)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glStencilFunc.xml -func (gl *GL) StencilFunc(glfunc glbase.Enum, ref int32, mask uint32) { - C.gl1_0_glStencilFunc(gl.funcs, C.GLenum(glfunc), C.GLint(ref), C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLogicOp.xml -func (gl *GL) LogicOp(opcode glbase.Enum) { - C.gl1_0_glLogicOp(gl.funcs, C.GLenum(opcode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glBlendFunc.xml -func (gl *GL) BlendFunc(sfactor, dfactor glbase.Enum) { - C.gl1_0_glBlendFunc(gl.funcs, C.GLenum(sfactor), C.GLenum(dfactor)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFlush.xml -func (gl *GL) Flush() { - C.gl1_0_glFlush(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFinish.xml -func (gl *GL) Finish() { - C.gl1_0_glFinish(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEnable.xml -func (gl *GL) Enable(cap glbase.Enum) { - C.gl1_0_glEnable(gl.funcs, C.GLenum(cap)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDisable.xml -func (gl *GL) Disable(cap glbase.Enum) { - C.gl1_0_glDisable(gl.funcs, C.GLenum(cap)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDepthMask.xml -func (gl *GL) DepthMask(flag bool) { - C.gl1_0_glDepthMask(gl.funcs, *(*C.GLboolean)(unsafe.Pointer(&flag))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColorMask.xml -func (gl *GL) ColorMask(red, green, blue, alpha bool) { - C.gl1_0_glColorMask(gl.funcs, *(*C.GLboolean)(unsafe.Pointer(&red)), *(*C.GLboolean)(unsafe.Pointer(&green)), *(*C.GLboolean)(unsafe.Pointer(&blue)), *(*C.GLboolean)(unsafe.Pointer(&alpha))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glStencilMask.xml -func (gl *GL) StencilMask(mask uint32) { - C.gl1_0_glStencilMask(gl.funcs, C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glClearDepth.xml -func (gl *GL) ClearDepth(depth float64) { - C.gl1_0_glClearDepth(gl.funcs, C.GLdouble(depth)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glClearStencil.xml -func (gl *GL) ClearStencil(s int32) { - C.gl1_0_glClearStencil(gl.funcs, C.GLint(s)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glClearColor.xml -func (gl *GL) ClearColor(red, green, blue, alpha float32) { - C.gl1_0_glClearColor(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glClear.xml -func (gl *GL) Clear(mask glbase.Bitfield) { - C.gl1_0_glClear(gl.funcs, C.GLbitfield(mask)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDrawBuffer.xml -func (gl *GL) DrawBuffer(mode glbase.Enum) { - C.gl1_0_glDrawBuffer(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexImage2D.xml -func (gl *GL) TexImage2D(target glbase.Enum, level int, internalFormat int32, width, height, border int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl1_0_glTexImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLint(border), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexImage1D.xml -func (gl *GL) TexImage1D(target glbase.Enum, level int, internalFormat int32, width, border int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl1_0_glTexImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(internalFormat), C.GLsizei(width), C.GLint(border), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexParameteriv.xml -func (gl *GL) TexParameteriv(target, pname glbase.Enum, params []int32) { - C.gl1_0_glTexParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexParameteri.xml -func (gl *GL) TexParameteri(target, pname glbase.Enum, param int32) { - C.gl1_0_glTexParameteri(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexParameterfv.xml -func (gl *GL) TexParameterfv(target, pname glbase.Enum, params []float32) { - C.gl1_0_glTexParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexParameterf.xml -func (gl *GL) TexParameterf(target, pname glbase.Enum, param float32) { - C.gl1_0_glTexParameterf(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glScissor.xml -func (gl *GL) Scissor(x, y, width, height int) { - C.gl1_0_glScissor(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPolygonMode.xml -func (gl *GL) PolygonMode(face, mode glbase.Enum) { - C.gl1_0_glPolygonMode(gl.funcs, C.GLenum(face), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPointSize.xml -func (gl *GL) PointSize(size float32) { - C.gl1_0_glPointSize(gl.funcs, C.GLfloat(size)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLineWidth.xml -func (gl *GL) LineWidth(width float32) { - C.gl1_0_glLineWidth(gl.funcs, C.GLfloat(width)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glHint.xml -func (gl *GL) Hint(target, mode glbase.Enum) { - C.gl1_0_glHint(gl.funcs, C.GLenum(target), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFrontFace.xml -func (gl *GL) FrontFace(mode glbase.Enum) { - C.gl1_0_glFrontFace(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCullFace.xml -func (gl *GL) CullFace(mode glbase.Enum) { - C.gl1_0_glCullFace(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTranslatef.xml -func (gl *GL) Translatef(x, y, z float32) { - C.gl1_0_glTranslatef(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTranslated.xml -func (gl *GL) Translated(x, y, z float64) { - C.gl1_0_glTranslated(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glScalef.xml -func (gl *GL) Scalef(x, y, z float32) { - C.gl1_0_glScalef(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glScaled.xml -func (gl *GL) Scaled(x, y, z float64) { - C.gl1_0_glScaled(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRotatef.xml -func (gl *GL) Rotatef(angle, x, y, z float32) { - C.gl1_0_glRotatef(gl.funcs, C.GLfloat(angle), C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRotated.xml -func (gl *GL) Rotated(angle, x, y, z float64) { - C.gl1_0_glRotated(gl.funcs, C.GLdouble(angle), C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPushMatrix.xml -func (gl *GL) PushMatrix() { - C.gl1_0_glPushMatrix(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPopMatrix.xml -func (gl *GL) PopMatrix() { - C.gl1_0_glPopMatrix(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glOrtho.xml -func (gl *GL) Ortho(left, right, bottom, top, zNear, zFar float64) { - C.gl1_0_glOrtho(gl.funcs, C.GLdouble(left), C.GLdouble(right), C.GLdouble(bottom), C.GLdouble(top), C.GLdouble(zNear), C.GLdouble(zFar)) -} - -// MultMatrixd multiplies the current matrix with the provided matrix. -// -// The m parameter must hold 16 consecutive elements of a 4x4 column-major matrix. -// -// The current matrix is determined by the current matrix mode (see -// MatrixMode). It is either the projection matrix, modelview matrix, or the -// texture matrix. -// -// For example, if the current matrix is C and the coordinates to be transformed -// are v = (v[0], v[1], v[2], v[3]), then the current transformation is C × v, or -// -// c[0] c[4] c[8] c[12] v[0] -// c[1] c[5] c[9] c[13] v[1] -// c[2] c[6] c[10] c[14] X v[2] -// c[3] c[7] c[11] c[15] v[3] -// -// Calling MultMatrix with an argument of m = m[0], m[1], ..., m[15] -// replaces the current transformation with (C X M) x v, or -// -// c[0] c[4] c[8] c[12] m[0] m[4] m[8] m[12] v[0] -// c[1] c[5] c[9] c[13] m[1] m[5] m[9] m[13] v[1] -// c[2] c[6] c[10] c[14] X m[2] m[6] m[10] m[14] X v[2] -// c[3] c[7] c[11] c[15] m[3] m[7] m[11] m[15] v[3] -// -// Where 'X' denotes matrix multiplication, and v is represented as a 4x1 matrix. -// -// While the elements of the matrix may be specified with single or double -// precision, the GL may store or operate on these values in less-than-single -// precision. -// -// In many computer languages, 4×4 arrays are represented in row-major -// order. The transformations just described represent these matrices in -// column-major order. The order of the multiplication is important. For -// example, if the current transformation is a rotation, and MultMatrix is -// called with a translation matrix, the translation is done directly on the -// coordinates to be transformed, while the rotation is done on the results -// of that translation. -// -// GL.INVALID_OPERATION is generated if MultMatrix is executed between the -// execution of Begin and the corresponding execution of End. -func (gl *GL) MultMatrixd(m []float64) { - if len(m) != 16 { - panic("parameter m must have length 16 for the 4x4 matrix") - } - C.gl1_0_glMultMatrixd(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&m[0]))) -} - -// MultMatrixf multiplies the current matrix with the provided matrix. -// -// The m parameter must hold 16 consecutive elements of a 4x4 column-major matrix. -// -// The current matrix is determined by the current matrix mode (see -// MatrixMode). It is either the projection matrix, modelview matrix, or the -// texture matrix. -// -// For example, if the current matrix is C and the coordinates to be transformed -// are v = (v[0], v[1], v[2], v[3]), then the current transformation is C × v, or -// -// c[0] c[4] c[8] c[12] v[0] -// c[1] c[5] c[9] c[13] v[1] -// c[2] c[6] c[10] c[14] X v[2] -// c[3] c[7] c[11] c[15] v[3] -// -// Calling MultMatrix with an argument of m = m[0], m[1], ..., m[15] -// replaces the current transformation with (C X M) x v, or -// -// c[0] c[4] c[8] c[12] m[0] m[4] m[8] m[12] v[0] -// c[1] c[5] c[9] c[13] m[1] m[5] m[9] m[13] v[1] -// c[2] c[6] c[10] c[14] X m[2] m[6] m[10] m[14] X v[2] -// c[3] c[7] c[11] c[15] m[3] m[7] m[11] m[15] v[3] -// -// Where 'X' denotes matrix multiplication, and v is represented as a 4x1 matrix. -// -// While the elements of the matrix may be specified with single or double -// precision, the GL may store or operate on these values in less-than-single -// precision. -// -// In many computer languages, 4×4 arrays are represented in row-major -// order. The transformations just described represent these matrices in -// column-major order. The order of the multiplication is important. For -// example, if the current transformation is a rotation, and MultMatrix is -// called with a translation matrix, the translation is done directly on the -// coordinates to be transformed, while the rotation is done on the results -// of that translation. -// -// GL.INVALID_OPERATION is generated if MultMatrix is executed between the -// execution of Begin and the corresponding execution of End. -func (gl *GL) MultMatrixf(m []float32) { - if len(m) != 16 { - panic("parameter m must have length 16 for the 4x4 matrix") - } - C.gl1_0_glMultMatrixf(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMatrixMode.xml -func (gl *GL) MatrixMode(mode glbase.Enum) { - C.gl1_0_glMatrixMode(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLoadMatrixd.xml -func (gl *GL) LoadMatrixd(m []float64) { - C.gl1_0_glLoadMatrixd(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLoadMatrixf.xml -func (gl *GL) LoadMatrixf(m []float32) { - C.gl1_0_glLoadMatrixf(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLoadIdentity.xml -func (gl *GL) LoadIdentity() { - C.gl1_0_glLoadIdentity(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFrustum.xml -func (gl *GL) Frustum(left, right, bottom, top, zNear, zFar float64) { - C.gl1_0_glFrustum(gl.funcs, C.GLdouble(left), C.GLdouble(right), C.GLdouble(bottom), C.GLdouble(top), C.GLdouble(zNear), C.GLdouble(zFar)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIsList.xml -func (gl *GL) IsList(list uint32) bool { - glresult := C.gl1_0_glIsList(gl.funcs, C.GLuint(list)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexGeniv.xml -func (gl *GL) GetTexGeniv(coord, pname glbase.Enum, params []int32) { - C.gl1_0_glGetTexGeniv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexGenfv.xml -func (gl *GL) GetTexGenfv(coord, pname glbase.Enum, params []float32) { - C.gl1_0_glGetTexGenfv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexGendv.xml -func (gl *GL) GetTexGendv(coord, pname glbase.Enum, params []float64) { - C.gl1_0_glGetTexGendv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexEnviv.xml -func (gl *GL) GetTexEnviv(target, pname glbase.Enum, params []int32) { - C.gl1_0_glGetTexEnviv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexEnvfv.xml -func (gl *GL) GetTexEnvfv(target, pname glbase.Enum, params []float32) { - C.gl1_0_glGetTexEnvfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetPolygonStipple.xml -func (gl *GL) GetPolygonStipple(mask []uint8) { - C.gl1_0_glGetPolygonStipple(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&mask[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetPixelMapusv.xml -func (gl *GL) GetPixelMapusv(glmap glbase.Enum, values []uint16) { - C.gl1_0_glGetPixelMapusv(gl.funcs, C.GLenum(glmap), (*C.GLushort)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetPixelMapuiv.xml -func (gl *GL) GetPixelMapuiv(glmap glbase.Enum, values []uint32) { - C.gl1_0_glGetPixelMapuiv(gl.funcs, C.GLenum(glmap), (*C.GLuint)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetPixelMapfv.xml -func (gl *GL) GetPixelMapfv(glmap glbase.Enum, values []float32) { - C.gl1_0_glGetPixelMapfv(gl.funcs, C.GLenum(glmap), (*C.GLfloat)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetMaterialiv.xml -func (gl *GL) GetMaterialiv(face, pname glbase.Enum, params []int32) { - C.gl1_0_glGetMaterialiv(gl.funcs, C.GLenum(face), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetMaterialfv.xml -func (gl *GL) GetMaterialfv(face, pname glbase.Enum, params []float32) { - C.gl1_0_glGetMaterialfv(gl.funcs, C.GLenum(face), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetMapiv.xml -func (gl *GL) GetMapiv(target, query glbase.Enum, v []int32) { - C.gl1_0_glGetMapiv(gl.funcs, C.GLenum(target), C.GLenum(query), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetMapfv.xml -func (gl *GL) GetMapfv(target, query glbase.Enum, v []float32) { - C.gl1_0_glGetMapfv(gl.funcs, C.GLenum(target), C.GLenum(query), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetMapdv.xml -func (gl *GL) GetMapdv(target, query glbase.Enum, v []float64) { - C.gl1_0_glGetMapdv(gl.funcs, C.GLenum(target), C.GLenum(query), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetLightiv.xml -func (gl *GL) GetLightiv(light, pname glbase.Enum, params []int32) { - C.gl1_0_glGetLightiv(gl.funcs, C.GLenum(light), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetLightfv.xml -func (gl *GL) GetLightfv(light, pname glbase.Enum, params []float32) { - C.gl1_0_glGetLightfv(gl.funcs, C.GLenum(light), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetClipPlane.xml -func (gl *GL) GetClipPlane(plane glbase.Enum, equation []float64) { - C.gl1_0_glGetClipPlane(gl.funcs, C.GLenum(plane), (*C.GLdouble)(unsafe.Pointer(&equation[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDrawPixels.xml -func (gl *GL) DrawPixels(width, height int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl1_0_glDrawPixels(gl.funcs, C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyPixels.xml -func (gl *GL) CopyPixels(x, y, width, height int, gltype glbase.Enum) { - C.gl1_0_glCopyPixels(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height), C.GLenum(gltype)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPixelMapusv.xml -func (gl *GL) PixelMapusv(glmap glbase.Enum, mapsize int32, values []uint16) { - C.gl1_0_glPixelMapusv(gl.funcs, C.GLenum(glmap), C.GLint(mapsize), (*C.GLushort)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPixelMapuiv.xml -func (gl *GL) PixelMapuiv(glmap glbase.Enum, mapsize int32, values []uint32) { - C.gl1_0_glPixelMapuiv(gl.funcs, C.GLenum(glmap), C.GLint(mapsize), (*C.GLuint)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPixelMapfv.xml -func (gl *GL) PixelMapfv(glmap glbase.Enum, mapsize int32, values []float32) { - C.gl1_0_glPixelMapfv(gl.funcs, C.GLenum(glmap), C.GLint(mapsize), (*C.GLfloat)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPixelTransferi.xml -func (gl *GL) PixelTransferi(pname glbase.Enum, param int32) { - C.gl1_0_glPixelTransferi(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPixelTransferf.xml -func (gl *GL) PixelTransferf(pname glbase.Enum, param float32) { - C.gl1_0_glPixelTransferf(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPixelZoom.xml -func (gl *GL) PixelZoom(xfactor, yfactor float32) { - C.gl1_0_glPixelZoom(gl.funcs, C.GLfloat(xfactor), C.GLfloat(yfactor)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glAlphaFunc.xml -func (gl *GL) AlphaFunc(glfunc glbase.Enum, ref float32) { - C.gl1_0_glAlphaFunc(gl.funcs, C.GLenum(glfunc), C.GLfloat(ref)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalPoint2.xml -func (gl *GL) EvalPoint2(i, j int32) { - C.gl1_0_glEvalPoint2(gl.funcs, C.GLint(i), C.GLint(j)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalMesh2.xml -func (gl *GL) EvalMesh2(mode glbase.Enum, i1, i2, j1, j2 int32) { - C.gl1_0_glEvalMesh2(gl.funcs, C.GLenum(mode), C.GLint(i1), C.GLint(i2), C.GLint(j1), C.GLint(j2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalPoint1.xml -func (gl *GL) EvalPoint1(i int32) { - C.gl1_0_glEvalPoint1(gl.funcs, C.GLint(i)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalMesh1.xml -func (gl *GL) EvalMesh1(mode glbase.Enum, i1, i2 int32) { - C.gl1_0_glEvalMesh1(gl.funcs, C.GLenum(mode), C.GLint(i1), C.GLint(i2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalCoord2fv.xml -func (gl *GL) EvalCoord2fv(u []float32) { - if len(u) != 2 { - panic("parameter u has incorrect length") - } - C.gl1_0_glEvalCoord2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&u[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalCoord2f.xml -func (gl *GL) EvalCoord2f(u, v float32) { - C.gl1_0_glEvalCoord2f(gl.funcs, C.GLfloat(u), C.GLfloat(v)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalCoord2dv.xml -func (gl *GL) EvalCoord2dv(u []float64) { - if len(u) != 2 { - panic("parameter u has incorrect length") - } - C.gl1_0_glEvalCoord2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&u[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalCoord2d.xml -func (gl *GL) EvalCoord2d(u, v float64) { - C.gl1_0_glEvalCoord2d(gl.funcs, C.GLdouble(u), C.GLdouble(v)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalCoord1fv.xml -func (gl *GL) EvalCoord1fv(u []float32) { - C.gl1_0_glEvalCoord1fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&u[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalCoord1f.xml -func (gl *GL) EvalCoord1f(u float32) { - C.gl1_0_glEvalCoord1f(gl.funcs, C.GLfloat(u)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalCoord1dv.xml -func (gl *GL) EvalCoord1dv(u []float64) { - C.gl1_0_glEvalCoord1dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&u[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalCoord1d.xml -func (gl *GL) EvalCoord1d(u float64) { - C.gl1_0_glEvalCoord1d(gl.funcs, C.GLdouble(u)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMapGrid2f.xml -func (gl *GL) MapGrid2f(un int32, u1, u2 float32, vn int32, v1, v2 float32) { - C.gl1_0_glMapGrid2f(gl.funcs, C.GLint(un), C.GLfloat(u1), C.GLfloat(u2), C.GLint(vn), C.GLfloat(v1), C.GLfloat(v2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMapGrid2d.xml -func (gl *GL) MapGrid2d(un int32, u1, u2 float64, vn int32, v1, v2 float64) { - C.gl1_0_glMapGrid2d(gl.funcs, C.GLint(un), C.GLdouble(u1), C.GLdouble(u2), C.GLint(vn), C.GLdouble(v1), C.GLdouble(v2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMapGrid1f.xml -func (gl *GL) MapGrid1f(un int32, u1, u2 float32) { - C.gl1_0_glMapGrid1f(gl.funcs, C.GLint(un), C.GLfloat(u1), C.GLfloat(u2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMapGrid1d.xml -func (gl *GL) MapGrid1d(un int32, u1, u2 float64) { - C.gl1_0_glMapGrid1d(gl.funcs, C.GLint(un), C.GLdouble(u1), C.GLdouble(u2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMap2f.xml -func (gl *GL) Map2f(target glbase.Enum, u1, u2 float32, ustride, uorder int32, v1, v2 float32, vstride, vorder int32, points []float32) { - C.gl1_0_glMap2f(gl.funcs, C.GLenum(target), C.GLfloat(u1), C.GLfloat(u2), C.GLint(ustride), C.GLint(uorder), C.GLfloat(v1), C.GLfloat(v2), C.GLint(vstride), C.GLint(vorder), (*C.GLfloat)(unsafe.Pointer(&points[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMap2d.xml -func (gl *GL) Map2d(target glbase.Enum, u1, u2 float64, ustride, uorder int32, v1, v2 float64, vstride, vorder int32, points []float64) { - C.gl1_0_glMap2d(gl.funcs, C.GLenum(target), C.GLdouble(u1), C.GLdouble(u2), C.GLint(ustride), C.GLint(uorder), C.GLdouble(v1), C.GLdouble(v2), C.GLint(vstride), C.GLint(vorder), (*C.GLdouble)(unsafe.Pointer(&points[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMap1f.xml -func (gl *GL) Map1f(target glbase.Enum, u1, u2 float32, stride, order int, points []float32) { - C.gl1_0_glMap1f(gl.funcs, C.GLenum(target), C.GLfloat(u1), C.GLfloat(u2), C.GLint(stride), C.GLint(order), (*C.GLfloat)(unsafe.Pointer(&points[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMap1d.xml -func (gl *GL) Map1d(target glbase.Enum, u1, u2 float64, stride, order int, points []float64) { - C.gl1_0_glMap1d(gl.funcs, C.GLenum(target), C.GLdouble(u1), C.GLdouble(u2), C.GLint(stride), C.GLint(order), (*C.GLdouble)(unsafe.Pointer(&points[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPushAttrib.xml -func (gl *GL) PushAttrib(mask glbase.Bitfield) { - C.gl1_0_glPushAttrib(gl.funcs, C.GLbitfield(mask)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPopAttrib.xml -func (gl *GL) PopAttrib() { - C.gl1_0_glPopAttrib(gl.funcs) -} - -// Accum executes an operation on the accumulation buffer. -// -// Parameter op defines the accumulation buffer operation (GL.ACCUM, GL.LOAD, -// GL.ADD, GL.MULT, or GL.RETURN) and specifies how the value parameter is -// used. -// -// The accumulation buffer is an extended-range color buffer. Images are not -// rendered into it. Rather, images rendered into one of the color buffers -// are added to the contents of the accumulation buffer after rendering. -// Effects such as antialiasing (of points, lines, and polygons), motion -// blur, and depth of field can be created by accumulating images generated -// with different transformation matrices. -// -// Each pixel in the accumulation buffer consists of red, green, blue, and -// alpha values. The number of bits per component in the accumulation buffer -// depends on the implementation. You can examine this number by calling -// GetIntegerv four times, with arguments GL.ACCUM_RED_BITS, -// GL.ACCUM_GREEN_BITS, GL.ACCUM_BLUE_BITS, and GL.ACCUM_ALPHA_BITS. -// Regardless of the number of bits per component, the range of values stored -// by each component is (-1, 1). The accumulation buffer pixels are mapped -// one-to-one with frame buffer pixels. -// -// All accumulation buffer operations are limited to the area of the current -// scissor box and applied identically to the red, green, blue, and alpha -// components of each pixel. If a Accum operation results in a value outside -// the range (-1, 1), the contents of an accumulation buffer pixel component -// are undefined. -// -// The operations are as follows: -// -// GL.ACCUM -// Obtains R, G, B, and A values from the buffer currently selected for -// reading (see ReadBuffer). Each component value is divided by 2 n - -// 1 , where n is the number of bits allocated to each color component -// in the currently selected buffer. The result is a floating-point -// value in the range 0 1 , which is multiplied by value and added to -// the corresponding pixel component in the accumulation buffer, -// thereby updating the accumulation buffer. -// -// GL.LOAD -// Similar to GL.ACCUM, except that the current value in the -// accumulation buffer is not used in the calculation of the new value. -// That is, the R, G, B, and A values from the currently selected -// buffer are divided by 2 n - 1 , multiplied by value, and then stored -// in the corresponding accumulation buffer cell, overwriting the -// current value. -// -// GL.ADD -// Adds value to each R, G, B, and A in the accumulation buffer. -// -// GL.MULT -// Multiplies each R, G, B, and A in the accumulation buffer by value -// and returns the scaled component to its corresponding accumulation -// buffer location. -// -// GL.RETURN -// Transfers accumulation buffer values to the color buffer or buffers -// currently selected for writing. Each R, G, B, and A component is -// multiplied by value, then multiplied by 2 n - 1 , clamped to the -// range 0 2 n - 1 , and stored in the corresponding display buffer -// cell. The only fragment operations that are applied to this transfer -// are pixel ownership, scissor, dithering, and color writemasks. -// -// To clear the accumulation buffer, call ClearAccum with R, G, B, and A -// values to set it to, then call Clear with the accumulation buffer -// enabled. -// -// Error GL.INVALID_ENUM is generated if op is not an accepted value. -// GL.INVALID_OPERATION is generated if there is no accumulation buffer. -// GL.INVALID_OPERATION is generated if Accum is executed between the -// execution of Begin and the corresponding execution of End. -func (gl *GL) Accum(op glbase.Enum, value float32) { - C.gl1_0_glAccum(gl.funcs, C.GLenum(op), C.GLfloat(value)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexMask.xml -func (gl *GL) IndexMask(mask uint32) { - C.gl1_0_glIndexMask(gl.funcs, C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glClearIndex.xml -func (gl *GL) ClearIndex(c float32) { - C.gl1_0_glClearIndex(gl.funcs, C.GLfloat(c)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glClearAccum.xml -func (gl *GL) ClearAccum(red, green, blue, alpha float32) { - C.gl1_0_glClearAccum(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPushName.xml -func (gl *GL) PushName(name uint32) { - C.gl1_0_glPushName(gl.funcs, C.GLuint(name)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPopName.xml -func (gl *GL) PopName() { - C.gl1_0_glPopName(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPassThrough.xml -func (gl *GL) PassThrough(token float32) { - C.gl1_0_glPassThrough(gl.funcs, C.GLfloat(token)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLoadName.xml -func (gl *GL) LoadName(name uint32) { - C.gl1_0_glLoadName(gl.funcs, C.GLuint(name)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glInitNames.xml -func (gl *GL) InitNames() { - C.gl1_0_glInitNames(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRenderMode.xml -func (gl *GL) RenderMode(mode glbase.Enum) int32 { - glresult := C.gl1_0_glRenderMode(gl.funcs, C.GLenum(mode)) - return int32(glresult) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSelectBuffer.xml -func (gl *GL) SelectBuffer(size int, buffer []glbase.Buffer) { - C.gl1_0_glSelectBuffer(gl.funcs, C.GLsizei(size), (*C.GLuint)(unsafe.Pointer(&buffer[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFeedbackBuffer.xml -func (gl *GL) FeedbackBuffer(size int, gltype glbase.Enum, buffer []float32) { - C.gl1_0_glFeedbackBuffer(gl.funcs, C.GLsizei(size), C.GLenum(gltype), (*C.GLfloat)(unsafe.Pointer(&buffer[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexGeniv.xml -func (gl *GL) TexGeniv(coord, pname glbase.Enum, params []int32) { - C.gl1_0_glTexGeniv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexGeni.xml -func (gl *GL) TexGeni(coord, pname glbase.Enum, param int32) { - C.gl1_0_glTexGeni(gl.funcs, C.GLenum(coord), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexGenfv.xml -func (gl *GL) TexGenfv(coord, pname glbase.Enum, params []float32) { - C.gl1_0_glTexGenfv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexGenf.xml -func (gl *GL) TexGenf(coord, pname glbase.Enum, param float32) { - C.gl1_0_glTexGenf(gl.funcs, C.GLenum(coord), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexGendv.xml -func (gl *GL) TexGendv(coord, pname glbase.Enum, params []float64) { - C.gl1_0_glTexGendv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexGend.xml -func (gl *GL) TexGend(coord, pname glbase.Enum, param float64) { - C.gl1_0_glTexGend(gl.funcs, C.GLenum(coord), C.GLenum(pname), C.GLdouble(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexEnviv.xml -func (gl *GL) TexEnviv(target, pname glbase.Enum, params []int32) { - C.gl1_0_glTexEnviv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexEnvi.xml -func (gl *GL) TexEnvi(target, pname glbase.Enum, param int32) { - C.gl1_0_glTexEnvi(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexEnvfv.xml -func (gl *GL) TexEnvfv(target, pname glbase.Enum, params []float32) { - C.gl1_0_glTexEnvfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexEnvf.xml -func (gl *GL) TexEnvf(target, pname glbase.Enum, param float32) { - C.gl1_0_glTexEnvf(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glShadeModel.xml -func (gl *GL) ShadeModel(mode glbase.Enum) { - C.gl1_0_glShadeModel(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPolygonStipple.xml -func (gl *GL) PolygonStipple(mask []uint8) { - C.gl1_0_glPolygonStipple(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&mask[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMaterialiv.xml -func (gl *GL) Materialiv(face, pname glbase.Enum, params []int32) { - C.gl1_0_glMaterialiv(gl.funcs, C.GLenum(face), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMateriali.xml -func (gl *GL) Materiali(face, pname glbase.Enum, param int32) { - C.gl1_0_glMateriali(gl.funcs, C.GLenum(face), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMaterialfv.xml -func (gl *GL) Materialfv(face, pname glbase.Enum, params []float32) { - C.gl1_0_glMaterialfv(gl.funcs, C.GLenum(face), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMaterialf.xml -func (gl *GL) Materialf(face, pname glbase.Enum, param float32) { - C.gl1_0_glMaterialf(gl.funcs, C.GLenum(face), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLineStipple.xml -func (gl *GL) LineStipple(factor int32, pattern uint16) { - C.gl1_0_glLineStipple(gl.funcs, C.GLint(factor), C.GLushort(pattern)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLightModeliv.xml -func (gl *GL) LightModeliv(pname glbase.Enum, params []int32) { - C.gl1_0_glLightModeliv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLightModeli.xml -func (gl *GL) LightModeli(pname glbase.Enum, param int32) { - C.gl1_0_glLightModeli(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLightModelfv.xml -func (gl *GL) LightModelfv(pname glbase.Enum, params []float32) { - C.gl1_0_glLightModelfv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLightModelf.xml -func (gl *GL) LightModelf(pname glbase.Enum, param float32) { - C.gl1_0_glLightModelf(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLightiv.xml -func (gl *GL) Lightiv(light, pname glbase.Enum, params []int32) { - C.gl1_0_glLightiv(gl.funcs, C.GLenum(light), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLighti.xml -func (gl *GL) Lighti(light, pname glbase.Enum, param int32) { - C.gl1_0_glLighti(gl.funcs, C.GLenum(light), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLightfv.xml -func (gl *GL) Lightfv(light, pname glbase.Enum, params []float32) { - C.gl1_0_glLightfv(gl.funcs, C.GLenum(light), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLightf.xml -func (gl *GL) Lightf(light, pname glbase.Enum, param float32) { - C.gl1_0_glLightf(gl.funcs, C.GLenum(light), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFogiv.xml -func (gl *GL) Fogiv(pname glbase.Enum, params []int32) { - C.gl1_0_glFogiv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFogi.xml -func (gl *GL) Fogi(pname glbase.Enum, param int32) { - C.gl1_0_glFogi(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFogfv.xml -func (gl *GL) Fogfv(pname glbase.Enum, params []float32) { - C.gl1_0_glFogfv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFogf.xml -func (gl *GL) Fogf(pname glbase.Enum, param float32) { - C.gl1_0_glFogf(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColorMaterial.xml -func (gl *GL) ColorMaterial(face, mode glbase.Enum) { - C.gl1_0_glColorMaterial(gl.funcs, C.GLenum(face), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glClipPlane.xml -func (gl *GL) ClipPlane(plane glbase.Enum, equation []float64) { - C.gl1_0_glClipPlane(gl.funcs, C.GLenum(plane), (*C.GLdouble)(unsafe.Pointer(&equation[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex4sv.xml -func (gl *GL) Vertex4sv(v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_0_glVertex4sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex4s.xml -func (gl *GL) Vertex4s(x, y, z, w int16) { - C.gl1_0_glVertex4s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z), C.GLshort(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex4iv.xml -func (gl *GL) Vertex4iv(v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_0_glVertex4iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex4i.xml -func (gl *GL) Vertex4i(x, y, z, w int) { - C.gl1_0_glVertex4i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z), C.GLint(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex4fv.xml -func (gl *GL) Vertex4fv(v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_0_glVertex4fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex4f.xml -func (gl *GL) Vertex4f(x, y, z, w float32) { - C.gl1_0_glVertex4f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z), C.GLfloat(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex4dv.xml -func (gl *GL) Vertex4dv(v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_0_glVertex4dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex4d.xml -func (gl *GL) Vertex4d(x, y, z, w float64) { - C.gl1_0_glVertex4d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z), C.GLdouble(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex3sv.xml -func (gl *GL) Vertex3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_0_glVertex3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex3s.xml -func (gl *GL) Vertex3s(x, y, z int16) { - C.gl1_0_glVertex3s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex3iv.xml -func (gl *GL) Vertex3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_0_glVertex3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex3i.xml -func (gl *GL) Vertex3i(x, y, z int) { - C.gl1_0_glVertex3i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex3fv.xml -func (gl *GL) Vertex3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_0_glVertex3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex3f.xml -func (gl *GL) Vertex3f(x, y, z float32) { - C.gl1_0_glVertex3f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex3dv.xml -func (gl *GL) Vertex3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_0_glVertex3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex3d.xml -func (gl *GL) Vertex3d(x, y, z float64) { - C.gl1_0_glVertex3d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex2sv.xml -func (gl *GL) Vertex2sv(v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_0_glVertex2sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex2s.xml -func (gl *GL) Vertex2s(x, y int16) { - C.gl1_0_glVertex2s(gl.funcs, C.GLshort(x), C.GLshort(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex2iv.xml -func (gl *GL) Vertex2iv(v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_0_glVertex2iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex2i.xml -func (gl *GL) Vertex2i(x, y int) { - C.gl1_0_glVertex2i(gl.funcs, C.GLint(x), C.GLint(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex2fv.xml -func (gl *GL) Vertex2fv(v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_0_glVertex2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex2f.xml -func (gl *GL) Vertex2f(x, y float32) { - C.gl1_0_glVertex2f(gl.funcs, C.GLfloat(x), C.GLfloat(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex2dv.xml -func (gl *GL) Vertex2dv(v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_0_glVertex2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex2d.xml -func (gl *GL) Vertex2d(x, y float64) { - C.gl1_0_glVertex2d(gl.funcs, C.GLdouble(x), C.GLdouble(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord4sv.xml -func (gl *GL) TexCoord4sv(v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_0_glTexCoord4sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord4s.xml -func (gl *GL) TexCoord4s(s, t, r, q int16) { - C.gl1_0_glTexCoord4s(gl.funcs, C.GLshort(s), C.GLshort(t), C.GLshort(r), C.GLshort(q)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord4iv.xml -func (gl *GL) TexCoord4iv(v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_0_glTexCoord4iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord4i.xml -func (gl *GL) TexCoord4i(s, t, r, q int32) { - C.gl1_0_glTexCoord4i(gl.funcs, C.GLint(s), C.GLint(t), C.GLint(r), C.GLint(q)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord4fv.xml -func (gl *GL) TexCoord4fv(v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_0_glTexCoord4fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord4f.xml -func (gl *GL) TexCoord4f(s, t, r, q float32) { - C.gl1_0_glTexCoord4f(gl.funcs, C.GLfloat(s), C.GLfloat(t), C.GLfloat(r), C.GLfloat(q)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord4dv.xml -func (gl *GL) TexCoord4dv(v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_0_glTexCoord4dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord4d.xml -func (gl *GL) TexCoord4d(s, t, r, q float64) { - C.gl1_0_glTexCoord4d(gl.funcs, C.GLdouble(s), C.GLdouble(t), C.GLdouble(r), C.GLdouble(q)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord3sv.xml -func (gl *GL) TexCoord3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_0_glTexCoord3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord3s.xml -func (gl *GL) TexCoord3s(s, t, r int16) { - C.gl1_0_glTexCoord3s(gl.funcs, C.GLshort(s), C.GLshort(t), C.GLshort(r)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord3iv.xml -func (gl *GL) TexCoord3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_0_glTexCoord3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord3i.xml -func (gl *GL) TexCoord3i(s, t, r int32) { - C.gl1_0_glTexCoord3i(gl.funcs, C.GLint(s), C.GLint(t), C.GLint(r)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord3fv.xml -func (gl *GL) TexCoord3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_0_glTexCoord3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord3f.xml -func (gl *GL) TexCoord3f(s, t, r float32) { - C.gl1_0_glTexCoord3f(gl.funcs, C.GLfloat(s), C.GLfloat(t), C.GLfloat(r)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord3dv.xml -func (gl *GL) TexCoord3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_0_glTexCoord3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord3d.xml -func (gl *GL) TexCoord3d(s, t, r float64) { - C.gl1_0_glTexCoord3d(gl.funcs, C.GLdouble(s), C.GLdouble(t), C.GLdouble(r)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord2sv.xml -func (gl *GL) TexCoord2sv(v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_0_glTexCoord2sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord2s.xml -func (gl *GL) TexCoord2s(s, t int16) { - C.gl1_0_glTexCoord2s(gl.funcs, C.GLshort(s), C.GLshort(t)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord2iv.xml -func (gl *GL) TexCoord2iv(v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_0_glTexCoord2iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord2i.xml -func (gl *GL) TexCoord2i(s, t int32) { - C.gl1_0_glTexCoord2i(gl.funcs, C.GLint(s), C.GLint(t)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord2fv.xml -func (gl *GL) TexCoord2fv(v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_0_glTexCoord2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord2f.xml -func (gl *GL) TexCoord2f(s, t float32) { - C.gl1_0_glTexCoord2f(gl.funcs, C.GLfloat(s), C.GLfloat(t)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord2dv.xml -func (gl *GL) TexCoord2dv(v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_0_glTexCoord2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord2d.xml -func (gl *GL) TexCoord2d(s, t float64) { - C.gl1_0_glTexCoord2d(gl.funcs, C.GLdouble(s), C.GLdouble(t)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord1sv.xml -func (gl *GL) TexCoord1sv(v []int16) { - C.gl1_0_glTexCoord1sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord1s.xml -func (gl *GL) TexCoord1s(s int16) { - C.gl1_0_glTexCoord1s(gl.funcs, C.GLshort(s)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord1iv.xml -func (gl *GL) TexCoord1iv(v []int32) { - C.gl1_0_glTexCoord1iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord1i.xml -func (gl *GL) TexCoord1i(s int32) { - C.gl1_0_glTexCoord1i(gl.funcs, C.GLint(s)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord1fv.xml -func (gl *GL) TexCoord1fv(v []float32) { - C.gl1_0_glTexCoord1fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord1f.xml -func (gl *GL) TexCoord1f(s float32) { - C.gl1_0_glTexCoord1f(gl.funcs, C.GLfloat(s)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord1dv.xml -func (gl *GL) TexCoord1dv(v []float64) { - C.gl1_0_glTexCoord1dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord1d.xml -func (gl *GL) TexCoord1d(s float64) { - C.gl1_0_glTexCoord1d(gl.funcs, C.GLdouble(s)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRectsv.xml -func (gl *GL) Rectsv(v1, v2 []int16) { - C.gl1_0_glRectsv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v1[0])), (*C.GLshort)(unsafe.Pointer(&v2[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRects.xml -func (gl *GL) Rects(x1, y1, x2, y2 int16) { - C.gl1_0_glRects(gl.funcs, C.GLshort(x1), C.GLshort(y1), C.GLshort(x2), C.GLshort(y2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRectiv.xml -func (gl *GL) Rectiv(v1, v2 []int32) { - C.gl1_0_glRectiv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v1[0])), (*C.GLint)(unsafe.Pointer(&v2[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRecti.xml -func (gl *GL) Recti(x1, y1, x2, y2 int32) { - C.gl1_0_glRecti(gl.funcs, C.GLint(x1), C.GLint(y1), C.GLint(x2), C.GLint(y2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRectfv.xml -func (gl *GL) Rectfv(v1, v2 []float32) { - C.gl1_0_glRectfv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v1[0])), (*C.GLfloat)(unsafe.Pointer(&v2[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRectf.xml -func (gl *GL) Rectf(x1, y1, x2, y2 float32) { - C.gl1_0_glRectf(gl.funcs, C.GLfloat(x1), C.GLfloat(y1), C.GLfloat(x2), C.GLfloat(y2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRectdv.xml -func (gl *GL) Rectdv(v1, v2 []float64) { - C.gl1_0_glRectdv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v1[0])), (*C.GLdouble)(unsafe.Pointer(&v2[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRectd.xml -func (gl *GL) Rectd(x1, y1, x2, y2 float64) { - C.gl1_0_glRectd(gl.funcs, C.GLdouble(x1), C.GLdouble(y1), C.GLdouble(x2), C.GLdouble(y2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos4sv.xml -func (gl *GL) RasterPos4sv(v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_0_glRasterPos4sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos4s.xml -func (gl *GL) RasterPos4s(x, y, z, w int16) { - C.gl1_0_glRasterPos4s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z), C.GLshort(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos4iv.xml -func (gl *GL) RasterPos4iv(v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_0_glRasterPos4iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos4i.xml -func (gl *GL) RasterPos4i(x, y, z, w int) { - C.gl1_0_glRasterPos4i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z), C.GLint(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos4fv.xml -func (gl *GL) RasterPos4fv(v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_0_glRasterPos4fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos4f.xml -func (gl *GL) RasterPos4f(x, y, z, w float32) { - C.gl1_0_glRasterPos4f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z), C.GLfloat(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos4dv.xml -func (gl *GL) RasterPos4dv(v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_0_glRasterPos4dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos4d.xml -func (gl *GL) RasterPos4d(x, y, z, w float64) { - C.gl1_0_glRasterPos4d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z), C.GLdouble(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos3sv.xml -func (gl *GL) RasterPos3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_0_glRasterPos3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos3s.xml -func (gl *GL) RasterPos3s(x, y, z int16) { - C.gl1_0_glRasterPos3s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos3iv.xml -func (gl *GL) RasterPos3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_0_glRasterPos3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos3i.xml -func (gl *GL) RasterPos3i(x, y, z int) { - C.gl1_0_glRasterPos3i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos3fv.xml -func (gl *GL) RasterPos3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_0_glRasterPos3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos3f.xml -func (gl *GL) RasterPos3f(x, y, z float32) { - C.gl1_0_glRasterPos3f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos3dv.xml -func (gl *GL) RasterPos3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_0_glRasterPos3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos3d.xml -func (gl *GL) RasterPos3d(x, y, z float64) { - C.gl1_0_glRasterPos3d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos2sv.xml -func (gl *GL) RasterPos2sv(v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_0_glRasterPos2sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos2s.xml -func (gl *GL) RasterPos2s(x, y int16) { - C.gl1_0_glRasterPos2s(gl.funcs, C.GLshort(x), C.GLshort(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos2iv.xml -func (gl *GL) RasterPos2iv(v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_0_glRasterPos2iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos2i.xml -func (gl *GL) RasterPos2i(x, y int) { - C.gl1_0_glRasterPos2i(gl.funcs, C.GLint(x), C.GLint(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos2fv.xml -func (gl *GL) RasterPos2fv(v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_0_glRasterPos2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos2f.xml -func (gl *GL) RasterPos2f(x, y float32) { - C.gl1_0_glRasterPos2f(gl.funcs, C.GLfloat(x), C.GLfloat(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos2dv.xml -func (gl *GL) RasterPos2dv(v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_0_glRasterPos2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos2d.xml -func (gl *GL) RasterPos2d(x, y float64) { - C.gl1_0_glRasterPos2d(gl.funcs, C.GLdouble(x), C.GLdouble(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3sv.xml -func (gl *GL) Normal3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_0_glNormal3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3s.xml -func (gl *GL) Normal3s(nx, ny, nz int16) { - C.gl1_0_glNormal3s(gl.funcs, C.GLshort(nx), C.GLshort(ny), C.GLshort(nz)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3iv.xml -func (gl *GL) Normal3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_0_glNormal3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3i.xml -func (gl *GL) Normal3i(nx, ny, nz int32) { - C.gl1_0_glNormal3i(gl.funcs, C.GLint(nx), C.GLint(ny), C.GLint(nz)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3fv.xml -func (gl *GL) Normal3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_0_glNormal3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3f.xml -func (gl *GL) Normal3f(nx, ny, nz float32) { - C.gl1_0_glNormal3f(gl.funcs, C.GLfloat(nx), C.GLfloat(ny), C.GLfloat(nz)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3dv.xml -func (gl *GL) Normal3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_0_glNormal3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3d.xml -func (gl *GL) Normal3d(nx, ny, nz float64) { - C.gl1_0_glNormal3d(gl.funcs, C.GLdouble(nx), C.GLdouble(ny), C.GLdouble(nz)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3bv.xml -func (gl *GL) Normal3bv(v []byte) { - C.gl1_0_glNormal3bv(gl.funcs, (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3b.xml -func (gl *GL) Normal3b(nx, ny, nz byte) { - C.gl1_0_glNormal3b(gl.funcs, C.GLbyte(nx), C.GLbyte(ny), C.GLbyte(nz)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexsv.xml -func (gl *GL) Indexsv(c []int16) { - C.gl1_0_glIndexsv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexs.xml -func (gl *GL) Indexs(c int16) { - C.gl1_0_glIndexs(gl.funcs, C.GLshort(c)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexiv.xml -func (gl *GL) Indexiv(c []int32) { - C.gl1_0_glIndexiv(gl.funcs, (*C.GLint)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexi.xml -func (gl *GL) Indexi(c int32) { - C.gl1_0_glIndexi(gl.funcs, C.GLint(c)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexfv.xml -func (gl *GL) Indexfv(c []float32) { - C.gl1_0_glIndexfv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexf.xml -func (gl *GL) Indexf(c float32) { - C.gl1_0_glIndexf(gl.funcs, C.GLfloat(c)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexdv.xml -func (gl *GL) Indexdv(c []float64) { - C.gl1_0_glIndexdv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexd.xml -func (gl *GL) Indexd(c float64) { - C.gl1_0_glIndexd(gl.funcs, C.GLdouble(c)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEnd.xml -func (gl *GL) End() { - C.gl1_0_glEnd(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEdgeFlagv.xml -func (gl *GL) EdgeFlagv(flag []bool) { - C.gl1_0_glEdgeFlagv(gl.funcs, (*C.GLboolean)(unsafe.Pointer(&flag[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEdgeFlag.xml -func (gl *GL) EdgeFlag(flag bool) { - C.gl1_0_glEdgeFlag(gl.funcs, *(*C.GLboolean)(unsafe.Pointer(&flag))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4usv.xml -func (gl *GL) Color4usv(v []uint16) { - C.gl1_0_glColor4usv(gl.funcs, (*C.GLushort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4us.xml -func (gl *GL) Color4us(red, green, blue, alpha uint16) { - C.gl1_0_glColor4us(gl.funcs, C.GLushort(red), C.GLushort(green), C.GLushort(blue), C.GLushort(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4uiv.xml -func (gl *GL) Color4uiv(v []uint32) { - C.gl1_0_glColor4uiv(gl.funcs, (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4ui.xml -func (gl *GL) Color4ui(red, green, blue, alpha uint32) { - C.gl1_0_glColor4ui(gl.funcs, C.GLuint(red), C.GLuint(green), C.GLuint(blue), C.GLuint(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4ubv.xml -func (gl *GL) Color4ubv(v []uint8) { - C.gl1_0_glColor4ubv(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4ub.xml -func (gl *GL) Color4ub(red, green, blue, alpha uint8) { - C.gl1_0_glColor4ub(gl.funcs, C.GLubyte(red), C.GLubyte(green), C.GLubyte(blue), C.GLubyte(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4sv.xml -func (gl *GL) Color4sv(v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_0_glColor4sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4s.xml -func (gl *GL) Color4s(red, green, blue, alpha int16) { - C.gl1_0_glColor4s(gl.funcs, C.GLshort(red), C.GLshort(green), C.GLshort(blue), C.GLshort(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4iv.xml -func (gl *GL) Color4iv(v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_0_glColor4iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4i.xml -func (gl *GL) Color4i(red, green, blue, alpha int32) { - C.gl1_0_glColor4i(gl.funcs, C.GLint(red), C.GLint(green), C.GLint(blue), C.GLint(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4fv.xml -func (gl *GL) Color4fv(v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_0_glColor4fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4f.xml -func (gl *GL) Color4f(red, green, blue, alpha float32) { - C.gl1_0_glColor4f(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4dv.xml -func (gl *GL) Color4dv(v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_0_glColor4dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4d.xml -func (gl *GL) Color4d(red, green, blue, alpha float64) { - C.gl1_0_glColor4d(gl.funcs, C.GLdouble(red), C.GLdouble(green), C.GLdouble(blue), C.GLdouble(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4bv.xml -func (gl *GL) Color4bv(v []byte) { - C.gl1_0_glColor4bv(gl.funcs, (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4b.xml -func (gl *GL) Color4b(red, green, blue, alpha byte) { - C.gl1_0_glColor4b(gl.funcs, C.GLbyte(red), C.GLbyte(green), C.GLbyte(blue), C.GLbyte(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3usv.xml -func (gl *GL) Color3usv(v []uint16) { - C.gl1_0_glColor3usv(gl.funcs, (*C.GLushort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3us.xml -func (gl *GL) Color3us(red, green, blue uint16) { - C.gl1_0_glColor3us(gl.funcs, C.GLushort(red), C.GLushort(green), C.GLushort(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3uiv.xml -func (gl *GL) Color3uiv(v []uint32) { - C.gl1_0_glColor3uiv(gl.funcs, (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3ui.xml -func (gl *GL) Color3ui(red, green, blue uint32) { - C.gl1_0_glColor3ui(gl.funcs, C.GLuint(red), C.GLuint(green), C.GLuint(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3ubv.xml -func (gl *GL) Color3ubv(v []uint8) { - C.gl1_0_glColor3ubv(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3ub.xml -func (gl *GL) Color3ub(red, green, blue uint8) { - C.gl1_0_glColor3ub(gl.funcs, C.GLubyte(red), C.GLubyte(green), C.GLubyte(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3sv.xml -func (gl *GL) Color3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_0_glColor3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3s.xml -func (gl *GL) Color3s(red, green, blue int16) { - C.gl1_0_glColor3s(gl.funcs, C.GLshort(red), C.GLshort(green), C.GLshort(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3iv.xml -func (gl *GL) Color3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_0_glColor3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3i.xml -func (gl *GL) Color3i(red, green, blue int32) { - C.gl1_0_glColor3i(gl.funcs, C.GLint(red), C.GLint(green), C.GLint(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3fv.xml -func (gl *GL) Color3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_0_glColor3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3f.xml -func (gl *GL) Color3f(red, green, blue float32) { - C.gl1_0_glColor3f(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3dv.xml -func (gl *GL) Color3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_0_glColor3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3d.xml -func (gl *GL) Color3d(red, green, blue float64) { - C.gl1_0_glColor3d(gl.funcs, C.GLdouble(red), C.GLdouble(green), C.GLdouble(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3bv.xml -func (gl *GL) Color3bv(v []byte) { - C.gl1_0_glColor3bv(gl.funcs, (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3b.xml -func (gl *GL) Color3b(red, green, blue byte) { - C.gl1_0_glColor3b(gl.funcs, C.GLbyte(red), C.GLbyte(green), C.GLbyte(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glBitmap.xml -func (gl *GL) Bitmap(width, height int, xorig, yorig, xmove, ymove float32, bitmap []uint8) { - C.gl1_0_glBitmap(gl.funcs, C.GLsizei(width), C.GLsizei(height), C.GLfloat(xorig), C.GLfloat(yorig), C.GLfloat(xmove), C.GLfloat(ymove), (*C.GLubyte)(unsafe.Pointer(&bitmap[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glBegin.xml -func (gl *GL) Begin(mode glbase.Enum) { - C.gl1_0_glBegin(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glListBase.xml -func (gl *GL) ListBase(base uint32) { - C.gl1_0_glListBase(gl.funcs, C.GLuint(base)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGenLists.xml -func (gl *GL) GenLists(range_ int32) uint32 { - glresult := C.gl1_0_glGenLists(gl.funcs, C.GLsizei(range_)) - return uint32(glresult) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDeleteLists.xml -func (gl *GL) DeleteLists(list uint32, range_ int32) { - C.gl1_0_glDeleteLists(gl.funcs, C.GLuint(list), C.GLsizei(range_)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCallLists.xml -func (gl *GL) CallLists(n int, gltype glbase.Enum, lists interface{}) { - var lists_ptr unsafe.Pointer - var lists_v = reflect.ValueOf(lists) - if lists != nil && lists_v.Kind() != reflect.Slice { - panic("parameter lists must be a slice") - } - if lists != nil { - lists_ptr = unsafe.Pointer(lists_v.Index(0).Addr().Pointer()) - } - C.gl1_0_glCallLists(gl.funcs, C.GLsizei(n), C.GLenum(gltype), lists_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCallList.xml -func (gl *GL) CallList(list uint32) { - C.gl1_0_glCallList(gl.funcs, C.GLuint(list)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEndList.xml -func (gl *GL) EndList() { - C.gl1_0_glEndList(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNewList.xml -func (gl *GL) NewList(list uint32, mode glbase.Enum) { - C.gl1_0_glNewList(gl.funcs, C.GLuint(list), C.GLenum(mode)) -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/1.1/funcs.cpp b/Godeps/_workspace/src/github.com/obscuren/qml/gl/1.1/funcs.cpp deleted file mode 100644 index 1c0f0adbde..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/1.1/funcs.cpp +++ /dev/null @@ -1,2022 +0,0 @@ - -// ** file automatically generated by glgen -- do not edit manually ** - -#include -#include - -#include "funcs.h" - -void *gl1_1_funcs() { - QOpenGLFunctions_1_1* funcs = QOpenGLContext::currentContext()->versionFunctions(); - if (!funcs) { - return 0; - } - funcs->initializeOpenGLFunctions(); - return funcs; -} - - -void gl1_1_glViewport(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glViewport(x, y, width, height); -} - -void gl1_1_glDepthRange(void *_glfuncs, GLdouble nearVal, GLdouble farVal) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthRange(nearVal, farVal); -} - -GLboolean gl1_1_glIsEnabled(void *_glfuncs, GLenum cap) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsEnabled(cap); -} - -void gl1_1_glGetTexLevelParameteriv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLint* params) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexLevelParameteriv(target, level, pname, params); -} - -void gl1_1_glGetTexLevelParameterfv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexLevelParameterfv(target, level, pname, params); -} - -void gl1_1_glGetTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameteriv(target, pname, params); -} - -void gl1_1_glGetTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameterfv(target, pname, params); -} - -void gl1_1_glGetTexImage(void *_glfuncs, GLenum target, GLint level, GLenum format, GLenum gltype, GLvoid* pixels) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexImage(target, level, format, gltype, pixels); -} - -void gl1_1_glGetIntegerv(void *_glfuncs, GLenum pname, GLint* params) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetIntegerv(pname, params); -} - -void gl1_1_glGetFloatv(void *_glfuncs, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetFloatv(pname, params); -} - -GLenum gl1_1_glGetError(void *_glfuncs) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetError(); -} - -void gl1_1_glGetDoublev(void *_glfuncs, GLenum pname, GLdouble* params) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetDoublev(pname, params); -} - -void gl1_1_glGetBooleanv(void *_glfuncs, GLenum pname, GLboolean* params) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBooleanv(pname, params); -} - -void gl1_1_glReadPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum gltype, GLvoid* pixels) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glReadPixels(x, y, width, height, format, gltype, pixels); -} - -void gl1_1_glReadBuffer(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glReadBuffer(mode); -} - -void gl1_1_glPixelStorei(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelStorei(pname, param); -} - -void gl1_1_glPixelStoref(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelStoref(pname, param); -} - -void gl1_1_glDepthFunc(void *_glfuncs, GLenum glfunc) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthFunc(glfunc); -} - -void gl1_1_glStencilOp(void *_glfuncs, GLenum fail, GLenum zfail, GLenum zpass) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilOp(fail, zfail, zpass); -} - -void gl1_1_glStencilFunc(void *_glfuncs, GLenum glfunc, GLint ref, GLuint mask) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilFunc(glfunc, ref, mask); -} - -void gl1_1_glLogicOp(void *_glfuncs, GLenum opcode) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLogicOp(opcode); -} - -void gl1_1_glBlendFunc(void *_glfuncs, GLenum sfactor, GLenum dfactor) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendFunc(sfactor, dfactor); -} - -void gl1_1_glFlush(void *_glfuncs) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFlush(); -} - -void gl1_1_glFinish(void *_glfuncs) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFinish(); -} - -void gl1_1_glEnable(void *_glfuncs, GLenum cap) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnable(cap); -} - -void gl1_1_glDisable(void *_glfuncs, GLenum cap) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDisable(cap); -} - -void gl1_1_glDepthMask(void *_glfuncs, GLboolean flag) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthMask(flag); -} - -void gl1_1_glColorMask(void *_glfuncs, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorMask(red, green, blue, alpha); -} - -void gl1_1_glStencilMask(void *_glfuncs, GLuint mask) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilMask(mask); -} - -void gl1_1_glClearDepth(void *_glfuncs, GLdouble depth) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearDepth(depth); -} - -void gl1_1_glClearStencil(void *_glfuncs, GLint s) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearStencil(s); -} - -void gl1_1_glClearColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearColor(red, green, blue, alpha); -} - -void gl1_1_glClear(void *_glfuncs, GLbitfield mask) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClear(mask); -} - -void gl1_1_glDrawBuffer(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawBuffer(mode); -} - -void gl1_1_glTexImage2D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage2D(target, level, internalFormat, width, height, border, format, gltype, pixels); -} - -void gl1_1_glTexImage1D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage1D(target, level, internalFormat, width, border, format, gltype, pixels); -} - -void gl1_1_glTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameteriv(target, pname, params); -} - -void gl1_1_glTexParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint param) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameteri(target, pname, param); -} - -void gl1_1_glTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterfv(target, pname, params); -} - -void gl1_1_glTexParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterf(target, pname, param); -} - -void gl1_1_glScissor(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScissor(x, y, width, height); -} - -void gl1_1_glPolygonMode(void *_glfuncs, GLenum face, GLenum mode) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPolygonMode(face, mode); -} - -void gl1_1_glPointSize(void *_glfuncs, GLfloat size) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointSize(size); -} - -void gl1_1_glLineWidth(void *_glfuncs, GLfloat width) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLineWidth(width); -} - -void gl1_1_glHint(void *_glfuncs, GLenum target, GLenum mode) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glHint(target, mode); -} - -void gl1_1_glFrontFace(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFrontFace(mode); -} - -void gl1_1_glCullFace(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCullFace(mode); -} - -void gl1_1_glIndexubv(void *_glfuncs, const GLubyte* c) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexubv(c); -} - -void gl1_1_glIndexub(void *_glfuncs, GLubyte c) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexub(c); -} - -GLboolean gl1_1_glIsTexture(void *_glfuncs, GLuint texture) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsTexture(texture); -} - -void gl1_1_glGenTextures(void *_glfuncs, GLsizei n, GLuint* textures) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenTextures(n, textures); -} - -void gl1_1_glDeleteTextures(void *_glfuncs, GLsizei n, const GLuint* textures) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteTextures(n, textures); -} - -void gl1_1_glBindTexture(void *_glfuncs, GLenum target, GLuint texture) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindTexture(target, texture); -} - -void gl1_1_glTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, gltype, pixels); -} - -void gl1_1_glTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexSubImage1D(target, level, xoffset, width, format, gltype, pixels); -} - -void gl1_1_glCopyTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height); -} - -void gl1_1_glCopyTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexSubImage1D(target, level, xoffset, x, y, width); -} - -void gl1_1_glCopyTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexImage2D(target, level, internalFormat, x, y, width, height, border); -} - -void gl1_1_glCopyTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexImage1D(target, level, internalFormat, x, y, width, border); -} - -void gl1_1_glPolygonOffset(void *_glfuncs, GLfloat factor, GLfloat units) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPolygonOffset(factor, units); -} - -void gl1_1_glDrawElements(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElements(mode, count, gltype, indices); -} - -void gl1_1_glDrawArrays(void *_glfuncs, GLenum mode, GLint first, GLsizei count) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawArrays(mode, first, count); -} - -void gl1_1_glTranslatef(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTranslatef(x, y, z); -} - -void gl1_1_glTranslated(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTranslated(x, y, z); -} - -void gl1_1_glScalef(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScalef(x, y, z); -} - -void gl1_1_glScaled(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScaled(x, y, z); -} - -void gl1_1_glRotatef(void *_glfuncs, GLfloat angle, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRotatef(angle, x, y, z); -} - -void gl1_1_glRotated(void *_glfuncs, GLdouble angle, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRotated(angle, x, y, z); -} - -void gl1_1_glPushMatrix(void *_glfuncs) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPushMatrix(); -} - -void gl1_1_glPopMatrix(void *_glfuncs) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPopMatrix(); -} - -void gl1_1_glOrtho(void *_glfuncs, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glOrtho(left, right, bottom, top, zNear, zFar); -} - -void gl1_1_glMultMatrixd(void *_glfuncs, const GLdouble* m) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultMatrixd(m); -} - -void gl1_1_glMultMatrixf(void *_glfuncs, const GLfloat* m) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultMatrixf(m); -} - -void gl1_1_glMatrixMode(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMatrixMode(mode); -} - -void gl1_1_glLoadMatrixd(void *_glfuncs, const GLdouble* m) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadMatrixd(m); -} - -void gl1_1_glLoadMatrixf(void *_glfuncs, const GLfloat* m) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadMatrixf(m); -} - -void gl1_1_glLoadIdentity(void *_glfuncs) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadIdentity(); -} - -void gl1_1_glFrustum(void *_glfuncs, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFrustum(left, right, bottom, top, zNear, zFar); -} - -GLboolean gl1_1_glIsList(void *_glfuncs, GLuint list) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsList(list); -} - -void gl1_1_glGetTexGeniv(void *_glfuncs, GLenum coord, GLenum pname, GLint* params) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexGeniv(coord, pname, params); -} - -void gl1_1_glGetTexGenfv(void *_glfuncs, GLenum coord, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexGenfv(coord, pname, params); -} - -void gl1_1_glGetTexGendv(void *_glfuncs, GLenum coord, GLenum pname, GLdouble* params) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexGendv(coord, pname, params); -} - -void gl1_1_glGetTexEnviv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexEnviv(target, pname, params); -} - -void gl1_1_glGetTexEnvfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexEnvfv(target, pname, params); -} - -void gl1_1_glGetPolygonStipple(void *_glfuncs, GLubyte* mask) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetPolygonStipple(mask); -} - -void gl1_1_glGetPixelMapusv(void *_glfuncs, GLenum glmap, GLushort* values) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetPixelMapusv(glmap, values); -} - -void gl1_1_glGetPixelMapuiv(void *_glfuncs, GLenum glmap, GLuint* values) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetPixelMapuiv(glmap, values); -} - -void gl1_1_glGetPixelMapfv(void *_glfuncs, GLenum glmap, GLfloat* values) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetPixelMapfv(glmap, values); -} - -void gl1_1_glGetMaterialiv(void *_glfuncs, GLenum face, GLenum pname, GLint* params) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMaterialiv(face, pname, params); -} - -void gl1_1_glGetMaterialfv(void *_glfuncs, GLenum face, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMaterialfv(face, pname, params); -} - -void gl1_1_glGetMapiv(void *_glfuncs, GLenum target, GLenum query, GLint* v) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMapiv(target, query, v); -} - -void gl1_1_glGetMapfv(void *_glfuncs, GLenum target, GLenum query, GLfloat* v) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMapfv(target, query, v); -} - -void gl1_1_glGetMapdv(void *_glfuncs, GLenum target, GLenum query, GLdouble* v) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMapdv(target, query, v); -} - -void gl1_1_glGetLightiv(void *_glfuncs, GLenum light, GLenum pname, GLint* params) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetLightiv(light, pname, params); -} - -void gl1_1_glGetLightfv(void *_glfuncs, GLenum light, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetLightfv(light, pname, params); -} - -void gl1_1_glGetClipPlane(void *_glfuncs, GLenum plane, GLdouble* equation) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetClipPlane(plane, equation); -} - -void gl1_1_glDrawPixels(void *_glfuncs, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawPixels(width, height, format, gltype, pixels); -} - -void gl1_1_glCopyPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum gltype) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyPixels(x, y, width, height, gltype); -} - -void gl1_1_glPixelMapusv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLushort* values) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelMapusv(glmap, mapsize, values); -} - -void gl1_1_glPixelMapuiv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLuint* values) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelMapuiv(glmap, mapsize, values); -} - -void gl1_1_glPixelMapfv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLfloat* values) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelMapfv(glmap, mapsize, values); -} - -void gl1_1_glPixelTransferi(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelTransferi(pname, param); -} - -void gl1_1_glPixelTransferf(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelTransferf(pname, param); -} - -void gl1_1_glPixelZoom(void *_glfuncs, GLfloat xfactor, GLfloat yfactor) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelZoom(xfactor, yfactor); -} - -void gl1_1_glAlphaFunc(void *_glfuncs, GLenum glfunc, GLfloat ref) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glAlphaFunc(glfunc, ref); -} - -void gl1_1_glEvalPoint2(void *_glfuncs, GLint i, GLint j) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalPoint2(i, j); -} - -void gl1_1_glEvalMesh2(void *_glfuncs, GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalMesh2(mode, i1, i2, j1, j2); -} - -void gl1_1_glEvalPoint1(void *_glfuncs, GLint i) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalPoint1(i); -} - -void gl1_1_glEvalMesh1(void *_glfuncs, GLenum mode, GLint i1, GLint i2) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalMesh1(mode, i1, i2); -} - -void gl1_1_glEvalCoord2fv(void *_glfuncs, const GLfloat* u) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord2fv(u); -} - -void gl1_1_glEvalCoord2f(void *_glfuncs, GLfloat u, GLfloat v) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord2f(u, v); -} - -void gl1_1_glEvalCoord2dv(void *_glfuncs, const GLdouble* u) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord2dv(u); -} - -void gl1_1_glEvalCoord2d(void *_glfuncs, GLdouble u, GLdouble v) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord2d(u, v); -} - -void gl1_1_glEvalCoord1fv(void *_glfuncs, const GLfloat* u) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord1fv(u); -} - -void gl1_1_glEvalCoord1f(void *_glfuncs, GLfloat u) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord1f(u); -} - -void gl1_1_glEvalCoord1dv(void *_glfuncs, const GLdouble* u) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord1dv(u); -} - -void gl1_1_glEvalCoord1d(void *_glfuncs, GLdouble u) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord1d(u); -} - -void gl1_1_glMapGrid2f(void *_glfuncs, GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMapGrid2f(un, u1, u2, vn, v1, v2); -} - -void gl1_1_glMapGrid2d(void *_glfuncs, GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMapGrid2d(un, u1, u2, vn, v1, v2); -} - -void gl1_1_glMapGrid1f(void *_glfuncs, GLint un, GLfloat u1, GLfloat u2) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMapGrid1f(un, u1, u2); -} - -void gl1_1_glMapGrid1d(void *_glfuncs, GLint un, GLdouble u1, GLdouble u2) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMapGrid1d(un, u1, u2); -} - -void gl1_1_glMap2f(void *_glfuncs, GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat* points) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMap2f(target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points); -} - -void gl1_1_glMap2d(void *_glfuncs, GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble* points) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMap2d(target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points); -} - -void gl1_1_glMap1f(void *_glfuncs, GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat* points) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMap1f(target, u1, u2, stride, order, points); -} - -void gl1_1_glMap1d(void *_glfuncs, GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble* points) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMap1d(target, u1, u2, stride, order, points); -} - -void gl1_1_glPushAttrib(void *_glfuncs, GLbitfield mask) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPushAttrib(mask); -} - -void gl1_1_glPopAttrib(void *_glfuncs) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPopAttrib(); -} - -void gl1_1_glAccum(void *_glfuncs, GLenum op, GLfloat value) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glAccum(op, value); -} - -void gl1_1_glIndexMask(void *_glfuncs, GLuint mask) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexMask(mask); -} - -void gl1_1_glClearIndex(void *_glfuncs, GLfloat c) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearIndex(c); -} - -void gl1_1_glClearAccum(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearAccum(red, green, blue, alpha); -} - -void gl1_1_glPushName(void *_glfuncs, GLuint name) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPushName(name); -} - -void gl1_1_glPopName(void *_glfuncs) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPopName(); -} - -void gl1_1_glPassThrough(void *_glfuncs, GLfloat token) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPassThrough(token); -} - -void gl1_1_glLoadName(void *_glfuncs, GLuint name) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadName(name); -} - -void gl1_1_glInitNames(void *_glfuncs) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glInitNames(); -} - -GLint gl1_1_glRenderMode(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glRenderMode(mode); -} - -void gl1_1_glSelectBuffer(void *_glfuncs, GLsizei size, GLuint* buffer) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSelectBuffer(size, buffer); -} - -void gl1_1_glFeedbackBuffer(void *_glfuncs, GLsizei size, GLenum gltype, GLfloat* buffer) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFeedbackBuffer(size, gltype, buffer); -} - -void gl1_1_glTexGeniv(void *_glfuncs, GLenum coord, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGeniv(coord, pname, params); -} - -void gl1_1_glTexGeni(void *_glfuncs, GLenum coord, GLenum pname, GLint param) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGeni(coord, pname, param); -} - -void gl1_1_glTexGenfv(void *_glfuncs, GLenum coord, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGenfv(coord, pname, params); -} - -void gl1_1_glTexGenf(void *_glfuncs, GLenum coord, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGenf(coord, pname, param); -} - -void gl1_1_glTexGendv(void *_glfuncs, GLenum coord, GLenum pname, const GLdouble* params) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGendv(coord, pname, params); -} - -void gl1_1_glTexGend(void *_glfuncs, GLenum coord, GLenum pname, GLdouble param) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGend(coord, pname, param); -} - -void gl1_1_glTexEnviv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexEnviv(target, pname, params); -} - -void gl1_1_glTexEnvi(void *_glfuncs, GLenum target, GLenum pname, GLint param) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexEnvi(target, pname, param); -} - -void gl1_1_glTexEnvfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexEnvfv(target, pname, params); -} - -void gl1_1_glTexEnvf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexEnvf(target, pname, param); -} - -void gl1_1_glShadeModel(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glShadeModel(mode); -} - -void gl1_1_glPolygonStipple(void *_glfuncs, const GLubyte* mask) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPolygonStipple(mask); -} - -void gl1_1_glMaterialiv(void *_glfuncs, GLenum face, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMaterialiv(face, pname, params); -} - -void gl1_1_glMateriali(void *_glfuncs, GLenum face, GLenum pname, GLint param) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMateriali(face, pname, param); -} - -void gl1_1_glMaterialfv(void *_glfuncs, GLenum face, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMaterialfv(face, pname, params); -} - -void gl1_1_glMaterialf(void *_glfuncs, GLenum face, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMaterialf(face, pname, param); -} - -void gl1_1_glLineStipple(void *_glfuncs, GLint factor, GLushort pattern) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLineStipple(factor, pattern); -} - -void gl1_1_glLightModeliv(void *_glfuncs, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightModeliv(pname, params); -} - -void gl1_1_glLightModeli(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightModeli(pname, param); -} - -void gl1_1_glLightModelfv(void *_glfuncs, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightModelfv(pname, params); -} - -void gl1_1_glLightModelf(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightModelf(pname, param); -} - -void gl1_1_glLightiv(void *_glfuncs, GLenum light, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightiv(light, pname, params); -} - -void gl1_1_glLighti(void *_glfuncs, GLenum light, GLenum pname, GLint param) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLighti(light, pname, param); -} - -void gl1_1_glLightfv(void *_glfuncs, GLenum light, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightfv(light, pname, params); -} - -void gl1_1_glLightf(void *_glfuncs, GLenum light, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightf(light, pname, param); -} - -void gl1_1_glFogiv(void *_glfuncs, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogiv(pname, params); -} - -void gl1_1_glFogi(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogi(pname, param); -} - -void gl1_1_glFogfv(void *_glfuncs, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogfv(pname, params); -} - -void gl1_1_glFogf(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogf(pname, param); -} - -void gl1_1_glColorMaterial(void *_glfuncs, GLenum face, GLenum mode) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorMaterial(face, mode); -} - -void gl1_1_glClipPlane(void *_glfuncs, GLenum plane, const GLdouble* equation) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClipPlane(plane, equation); -} - -void gl1_1_glVertex4sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4sv(v); -} - -void gl1_1_glVertex4s(void *_glfuncs, GLshort x, GLshort y, GLshort z, GLshort w) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4s(x, y, z, w); -} - -void gl1_1_glVertex4iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4iv(v); -} - -void gl1_1_glVertex4i(void *_glfuncs, GLint x, GLint y, GLint z, GLint w) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4i(x, y, z, w); -} - -void gl1_1_glVertex4fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4fv(v); -} - -void gl1_1_glVertex4f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z, GLfloat w) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4f(x, y, z, w); -} - -void gl1_1_glVertex4dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4dv(v); -} - -void gl1_1_glVertex4d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z, GLdouble w) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4d(x, y, z, w); -} - -void gl1_1_glVertex3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3sv(v); -} - -void gl1_1_glVertex3s(void *_glfuncs, GLshort x, GLshort y, GLshort z) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3s(x, y, z); -} - -void gl1_1_glVertex3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3iv(v); -} - -void gl1_1_glVertex3i(void *_glfuncs, GLint x, GLint y, GLint z) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3i(x, y, z); -} - -void gl1_1_glVertex3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3fv(v); -} - -void gl1_1_glVertex3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3f(x, y, z); -} - -void gl1_1_glVertex3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3dv(v); -} - -void gl1_1_glVertex3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3d(x, y, z); -} - -void gl1_1_glVertex2sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2sv(v); -} - -void gl1_1_glVertex2s(void *_glfuncs, GLshort x, GLshort y) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2s(x, y); -} - -void gl1_1_glVertex2iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2iv(v); -} - -void gl1_1_glVertex2i(void *_glfuncs, GLint x, GLint y) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2i(x, y); -} - -void gl1_1_glVertex2fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2fv(v); -} - -void gl1_1_glVertex2f(void *_glfuncs, GLfloat x, GLfloat y) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2f(x, y); -} - -void gl1_1_glVertex2dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2dv(v); -} - -void gl1_1_glVertex2d(void *_glfuncs, GLdouble x, GLdouble y) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2d(x, y); -} - -void gl1_1_glTexCoord4sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4sv(v); -} - -void gl1_1_glTexCoord4s(void *_glfuncs, GLshort s, GLshort t, GLshort r, GLshort q) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4s(s, t, r, q); -} - -void gl1_1_glTexCoord4iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4iv(v); -} - -void gl1_1_glTexCoord4i(void *_glfuncs, GLint s, GLint t, GLint r, GLint q) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4i(s, t, r, q); -} - -void gl1_1_glTexCoord4fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4fv(v); -} - -void gl1_1_glTexCoord4f(void *_glfuncs, GLfloat s, GLfloat t, GLfloat r, GLfloat q) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4f(s, t, r, q); -} - -void gl1_1_glTexCoord4dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4dv(v); -} - -void gl1_1_glTexCoord4d(void *_glfuncs, GLdouble s, GLdouble t, GLdouble r, GLdouble q) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4d(s, t, r, q); -} - -void gl1_1_glTexCoord3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3sv(v); -} - -void gl1_1_glTexCoord3s(void *_glfuncs, GLshort s, GLshort t, GLshort r) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3s(s, t, r); -} - -void gl1_1_glTexCoord3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3iv(v); -} - -void gl1_1_glTexCoord3i(void *_glfuncs, GLint s, GLint t, GLint r) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3i(s, t, r); -} - -void gl1_1_glTexCoord3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3fv(v); -} - -void gl1_1_glTexCoord3f(void *_glfuncs, GLfloat s, GLfloat t, GLfloat r) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3f(s, t, r); -} - -void gl1_1_glTexCoord3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3dv(v); -} - -void gl1_1_glTexCoord3d(void *_glfuncs, GLdouble s, GLdouble t, GLdouble r) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3d(s, t, r); -} - -void gl1_1_glTexCoord2sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2sv(v); -} - -void gl1_1_glTexCoord2s(void *_glfuncs, GLshort s, GLshort t) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2s(s, t); -} - -void gl1_1_glTexCoord2iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2iv(v); -} - -void gl1_1_glTexCoord2i(void *_glfuncs, GLint s, GLint t) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2i(s, t); -} - -void gl1_1_glTexCoord2fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2fv(v); -} - -void gl1_1_glTexCoord2f(void *_glfuncs, GLfloat s, GLfloat t) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2f(s, t); -} - -void gl1_1_glTexCoord2dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2dv(v); -} - -void gl1_1_glTexCoord2d(void *_glfuncs, GLdouble s, GLdouble t) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2d(s, t); -} - -void gl1_1_glTexCoord1sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1sv(v); -} - -void gl1_1_glTexCoord1s(void *_glfuncs, GLshort s) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1s(s); -} - -void gl1_1_glTexCoord1iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1iv(v); -} - -void gl1_1_glTexCoord1i(void *_glfuncs, GLint s) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1i(s); -} - -void gl1_1_glTexCoord1fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1fv(v); -} - -void gl1_1_glTexCoord1f(void *_glfuncs, GLfloat s) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1f(s); -} - -void gl1_1_glTexCoord1dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1dv(v); -} - -void gl1_1_glTexCoord1d(void *_glfuncs, GLdouble s) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1d(s); -} - -void gl1_1_glRectsv(void *_glfuncs, const GLshort* v1, const GLshort* v2) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectsv(v1, v2); -} - -void gl1_1_glRects(void *_glfuncs, GLshort x1, GLshort y1, GLshort x2, GLshort y2) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRects(x1, y1, x2, y2); -} - -void gl1_1_glRectiv(void *_glfuncs, const GLint* v1, const GLint* v2) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectiv(v1, v2); -} - -void gl1_1_glRecti(void *_glfuncs, GLint x1, GLint y1, GLint x2, GLint y2) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRecti(x1, y1, x2, y2); -} - -void gl1_1_glRectfv(void *_glfuncs, const GLfloat* v1, const GLfloat* v2) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectfv(v1, v2); -} - -void gl1_1_glRectf(void *_glfuncs, GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectf(x1, y1, x2, y2); -} - -void gl1_1_glRectdv(void *_glfuncs, const GLdouble* v1, const GLdouble* v2) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectdv(v1, v2); -} - -void gl1_1_glRectd(void *_glfuncs, GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectd(x1, y1, x2, y2); -} - -void gl1_1_glRasterPos4sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4sv(v); -} - -void gl1_1_glRasterPos4s(void *_glfuncs, GLshort x, GLshort y, GLshort z, GLshort w) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4s(x, y, z, w); -} - -void gl1_1_glRasterPos4iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4iv(v); -} - -void gl1_1_glRasterPos4i(void *_glfuncs, GLint x, GLint y, GLint z, GLint w) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4i(x, y, z, w); -} - -void gl1_1_glRasterPos4fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4fv(v); -} - -void gl1_1_glRasterPos4f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z, GLfloat w) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4f(x, y, z, w); -} - -void gl1_1_glRasterPos4dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4dv(v); -} - -void gl1_1_glRasterPos4d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z, GLdouble w) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4d(x, y, z, w); -} - -void gl1_1_glRasterPos3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3sv(v); -} - -void gl1_1_glRasterPos3s(void *_glfuncs, GLshort x, GLshort y, GLshort z) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3s(x, y, z); -} - -void gl1_1_glRasterPos3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3iv(v); -} - -void gl1_1_glRasterPos3i(void *_glfuncs, GLint x, GLint y, GLint z) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3i(x, y, z); -} - -void gl1_1_glRasterPos3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3fv(v); -} - -void gl1_1_glRasterPos3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3f(x, y, z); -} - -void gl1_1_glRasterPos3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3dv(v); -} - -void gl1_1_glRasterPos3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3d(x, y, z); -} - -void gl1_1_glRasterPos2sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2sv(v); -} - -void gl1_1_glRasterPos2s(void *_glfuncs, GLshort x, GLshort y) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2s(x, y); -} - -void gl1_1_glRasterPos2iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2iv(v); -} - -void gl1_1_glRasterPos2i(void *_glfuncs, GLint x, GLint y) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2i(x, y); -} - -void gl1_1_glRasterPos2fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2fv(v); -} - -void gl1_1_glRasterPos2f(void *_glfuncs, GLfloat x, GLfloat y) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2f(x, y); -} - -void gl1_1_glRasterPos2dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2dv(v); -} - -void gl1_1_glRasterPos2d(void *_glfuncs, GLdouble x, GLdouble y) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2d(x, y); -} - -void gl1_1_glNormal3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3sv(v); -} - -void gl1_1_glNormal3s(void *_glfuncs, GLshort nx, GLshort ny, GLshort nz) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3s(nx, ny, nz); -} - -void gl1_1_glNormal3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3iv(v); -} - -void gl1_1_glNormal3i(void *_glfuncs, GLint nx, GLint ny, GLint nz) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3i(nx, ny, nz); -} - -void gl1_1_glNormal3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3fv(v); -} - -void gl1_1_glNormal3f(void *_glfuncs, GLfloat nx, GLfloat ny, GLfloat nz) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3f(nx, ny, nz); -} - -void gl1_1_glNormal3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3dv(v); -} - -void gl1_1_glNormal3d(void *_glfuncs, GLdouble nx, GLdouble ny, GLdouble nz) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3d(nx, ny, nz); -} - -void gl1_1_glNormal3bv(void *_glfuncs, const GLbyte* v) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3bv(v); -} - -void gl1_1_glNormal3b(void *_glfuncs, GLbyte nx, GLbyte ny, GLbyte nz) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3b(nx, ny, nz); -} - -void gl1_1_glIndexsv(void *_glfuncs, const GLshort* c) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexsv(c); -} - -void gl1_1_glIndexs(void *_glfuncs, GLshort c) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexs(c); -} - -void gl1_1_glIndexiv(void *_glfuncs, const GLint* c) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexiv(c); -} - -void gl1_1_glIndexi(void *_glfuncs, GLint c) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexi(c); -} - -void gl1_1_glIndexfv(void *_glfuncs, const GLfloat* c) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexfv(c); -} - -void gl1_1_glIndexf(void *_glfuncs, GLfloat c) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexf(c); -} - -void gl1_1_glIndexdv(void *_glfuncs, const GLdouble* c) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexdv(c); -} - -void gl1_1_glIndexd(void *_glfuncs, GLdouble c) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexd(c); -} - -void gl1_1_glEnd(void *_glfuncs) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnd(); -} - -void gl1_1_glEdgeFlagv(void *_glfuncs, const GLboolean* flag) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEdgeFlagv(flag); -} - -void gl1_1_glEdgeFlag(void *_glfuncs, GLboolean flag) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEdgeFlag(flag); -} - -void gl1_1_glColor4usv(void *_glfuncs, const GLushort* v) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4usv(v); -} - -void gl1_1_glColor4us(void *_glfuncs, GLushort red, GLushort green, GLushort blue, GLushort alpha) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4us(red, green, blue, alpha); -} - -void gl1_1_glColor4uiv(void *_glfuncs, const GLuint* v) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4uiv(v); -} - -void gl1_1_glColor4ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue, GLuint alpha) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4ui(red, green, blue, alpha); -} - -void gl1_1_glColor4ubv(void *_glfuncs, const GLubyte* v) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4ubv(v); -} - -void gl1_1_glColor4ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4ub(red, green, blue, alpha); -} - -void gl1_1_glColor4sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4sv(v); -} - -void gl1_1_glColor4s(void *_glfuncs, GLshort red, GLshort green, GLshort blue, GLshort alpha) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4s(red, green, blue, alpha); -} - -void gl1_1_glColor4iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4iv(v); -} - -void gl1_1_glColor4i(void *_glfuncs, GLint red, GLint green, GLint blue, GLint alpha) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4i(red, green, blue, alpha); -} - -void gl1_1_glColor4fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4fv(v); -} - -void gl1_1_glColor4f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4f(red, green, blue, alpha); -} - -void gl1_1_glColor4dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4dv(v); -} - -void gl1_1_glColor4d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4d(red, green, blue, alpha); -} - -void gl1_1_glColor4bv(void *_glfuncs, const GLbyte* v) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4bv(v); -} - -void gl1_1_glColor4b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4b(red, green, blue, alpha); -} - -void gl1_1_glColor3usv(void *_glfuncs, const GLushort* v) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3usv(v); -} - -void gl1_1_glColor3us(void *_glfuncs, GLushort red, GLushort green, GLushort blue) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3us(red, green, blue); -} - -void gl1_1_glColor3uiv(void *_glfuncs, const GLuint* v) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3uiv(v); -} - -void gl1_1_glColor3ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3ui(red, green, blue); -} - -void gl1_1_glColor3ubv(void *_glfuncs, const GLubyte* v) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3ubv(v); -} - -void gl1_1_glColor3ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3ub(red, green, blue); -} - -void gl1_1_glColor3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3sv(v); -} - -void gl1_1_glColor3s(void *_glfuncs, GLshort red, GLshort green, GLshort blue) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3s(red, green, blue); -} - -void gl1_1_glColor3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3iv(v); -} - -void gl1_1_glColor3i(void *_glfuncs, GLint red, GLint green, GLint blue) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3i(red, green, blue); -} - -void gl1_1_glColor3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3fv(v); -} - -void gl1_1_glColor3f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3f(red, green, blue); -} - -void gl1_1_glColor3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3dv(v); -} - -void gl1_1_glColor3d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3d(red, green, blue); -} - -void gl1_1_glColor3bv(void *_glfuncs, const GLbyte* v) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3bv(v); -} - -void gl1_1_glColor3b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3b(red, green, blue); -} - -void gl1_1_glBitmap(void *_glfuncs, GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte* bitmap) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBitmap(width, height, xorig, yorig, xmove, ymove, bitmap); -} - -void gl1_1_glBegin(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBegin(mode); -} - -void gl1_1_glListBase(void *_glfuncs, GLuint base) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glListBase(base); -} - -GLuint gl1_1_glGenLists(void *_glfuncs, GLsizei range_) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGenLists(range_); -} - -void gl1_1_glDeleteLists(void *_glfuncs, GLuint list, GLsizei range_) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteLists(list, range_); -} - -void gl1_1_glCallLists(void *_glfuncs, GLsizei n, GLenum gltype, const GLvoid* lists) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCallLists(n, gltype, lists); -} - -void gl1_1_glCallList(void *_glfuncs, GLuint list) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCallList(list); -} - -void gl1_1_glEndList(void *_glfuncs) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndList(); -} - -void gl1_1_glNewList(void *_glfuncs, GLuint list, GLenum mode) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNewList(list, mode); -} - -void gl1_1_glPushClientAttrib(void *_glfuncs, GLbitfield mask) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPushClientAttrib(mask); -} - -void gl1_1_glPopClientAttrib(void *_glfuncs) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPopClientAttrib(); -} - -void gl1_1_glPrioritizeTextures(void *_glfuncs, GLsizei n, const GLuint* textures, const GLfloat* priorities) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPrioritizeTextures(n, textures, priorities); -} - -GLboolean gl1_1_glAreTexturesResident(void *_glfuncs, GLsizei n, const GLuint* textures, GLboolean* residences) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glAreTexturesResident(n, textures, residences); -} - -void gl1_1_glVertexPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexPointer(size, gltype, stride, pointer); -} - -void gl1_1_glTexCoordPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordPointer(size, gltype, stride, pointer); -} - -void gl1_1_glNormalPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormalPointer(gltype, stride, pointer); -} - -void gl1_1_glInterleavedArrays(void *_glfuncs, GLenum format, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glInterleavedArrays(format, stride, pointer); -} - -void gl1_1_glIndexPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexPointer(gltype, stride, pointer); -} - -void gl1_1_glEnableClientState(void *_glfuncs, GLenum array) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnableClientState(array); -} - -void gl1_1_glEdgeFlagPointer(void *_glfuncs, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEdgeFlagPointer(stride, pointer); -} - -void gl1_1_glDisableClientState(void *_glfuncs, GLenum array) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDisableClientState(array); -} - -void gl1_1_glColorPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorPointer(size, gltype, stride, pointer); -} - -void gl1_1_glArrayElement(void *_glfuncs, GLint i) -{ - QOpenGLFunctions_1_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glArrayElement(i); -} - diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/1.1/funcs.h b/Godeps/_workspace/src/github.com/obscuren/qml/gl/1.1/funcs.h deleted file mode 100644 index f89c6a4522..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/1.1/funcs.h +++ /dev/null @@ -1,376 +0,0 @@ - -// ** file automatically generated by glgen -- do not edit manually ** - -#ifndef __cplusplus -#include -#include -typedef unsigned int GLenum; -typedef unsigned char GLboolean; -typedef unsigned int GLbitfield; -typedef void GLvoid; -typedef char GLchar; -typedef signed char GLbyte; /* 1-byte signed */ -typedef short GLshort; /* 2-byte signed */ -typedef int GLint; /* 4-byte signed */ -typedef unsigned char GLubyte; /* 1-byte unsigned */ -typedef unsigned short GLushort; /* 2-byte unsigned */ -typedef unsigned int GLuint; /* 4-byte unsigned */ -typedef int GLsizei; /* 4-byte signed */ -typedef float GLfloat; /* single precision float */ -typedef float GLclampf; /* single precision float in [0,1] */ -typedef double GLdouble; /* double precision float */ -typedef double GLclampd; /* double precision float in [0,1] */ -typedef int64_t GLint64; -typedef uint64_t GLuint64; -typedef ptrdiff_t GLintptr; -typedef ptrdiff_t GLsizeiptr; -typedef ptrdiff_t GLintptrARB; -typedef ptrdiff_t GLsizeiptrARB; -typedef struct __GLsync *GLsync; -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -void *gl1_1_funcs(); - -void gl1_1_glViewport(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height); -void gl1_1_glDepthRange(void *_glfuncs, GLdouble nearVal, GLdouble farVal); -GLboolean gl1_1_glIsEnabled(void *_glfuncs, GLenum cap); -void gl1_1_glGetTexLevelParameteriv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLint* params); -void gl1_1_glGetTexLevelParameterfv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLfloat* params); -void gl1_1_glGetTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl1_1_glGetTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl1_1_glGetTexImage(void *_glfuncs, GLenum target, GLint level, GLenum format, GLenum gltype, GLvoid* pixels); -void gl1_1_glGetIntegerv(void *_glfuncs, GLenum pname, GLint* params); -void gl1_1_glGetFloatv(void *_glfuncs, GLenum pname, GLfloat* params); -GLenum gl1_1_glGetError(void *_glfuncs); -void gl1_1_glGetDoublev(void *_glfuncs, GLenum pname, GLdouble* params); -void gl1_1_glGetBooleanv(void *_glfuncs, GLenum pname, GLboolean* params); -void gl1_1_glReadPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum gltype, GLvoid* pixels); -void gl1_1_glReadBuffer(void *_glfuncs, GLenum mode); -void gl1_1_glPixelStorei(void *_glfuncs, GLenum pname, GLint param); -void gl1_1_glPixelStoref(void *_glfuncs, GLenum pname, GLfloat param); -void gl1_1_glDepthFunc(void *_glfuncs, GLenum glfunc); -void gl1_1_glStencilOp(void *_glfuncs, GLenum fail, GLenum zfail, GLenum zpass); -void gl1_1_glStencilFunc(void *_glfuncs, GLenum glfunc, GLint ref, GLuint mask); -void gl1_1_glLogicOp(void *_glfuncs, GLenum opcode); -void gl1_1_glBlendFunc(void *_glfuncs, GLenum sfactor, GLenum dfactor); -void gl1_1_glFlush(void *_glfuncs); -void gl1_1_glFinish(void *_glfuncs); -void gl1_1_glEnable(void *_glfuncs, GLenum cap); -void gl1_1_glDisable(void *_glfuncs, GLenum cap); -void gl1_1_glDepthMask(void *_glfuncs, GLboolean flag); -void gl1_1_glColorMask(void *_glfuncs, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); -void gl1_1_glStencilMask(void *_glfuncs, GLuint mask); -void gl1_1_glClearDepth(void *_glfuncs, GLdouble depth); -void gl1_1_glClearStencil(void *_glfuncs, GLint s); -void gl1_1_glClearColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl1_1_glClear(void *_glfuncs, GLbitfield mask); -void gl1_1_glDrawBuffer(void *_glfuncs, GLenum mode); -void gl1_1_glTexImage2D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl1_1_glTexImage1D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl1_1_glTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl1_1_glTexParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint param); -void gl1_1_glTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params); -void gl1_1_glTexParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param); -void gl1_1_glScissor(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height); -void gl1_1_glPolygonMode(void *_glfuncs, GLenum face, GLenum mode); -void gl1_1_glPointSize(void *_glfuncs, GLfloat size); -void gl1_1_glLineWidth(void *_glfuncs, GLfloat width); -void gl1_1_glHint(void *_glfuncs, GLenum target, GLenum mode); -void gl1_1_glFrontFace(void *_glfuncs, GLenum mode); -void gl1_1_glCullFace(void *_glfuncs, GLenum mode); -void gl1_1_glIndexubv(void *_glfuncs, const GLubyte* c); -void gl1_1_glIndexub(void *_glfuncs, GLubyte c); -GLboolean gl1_1_glIsTexture(void *_glfuncs, GLuint texture); -void gl1_1_glGenTextures(void *_glfuncs, GLsizei n, GLuint* textures); -void gl1_1_glDeleteTextures(void *_glfuncs, GLsizei n, const GLuint* textures); -void gl1_1_glBindTexture(void *_glfuncs, GLenum target, GLuint texture); -void gl1_1_glTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl1_1_glTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl1_1_glCopyTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -void gl1_1_glCopyTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -void gl1_1_glCopyTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -void gl1_1_glCopyTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border); -void gl1_1_glPolygonOffset(void *_glfuncs, GLfloat factor, GLfloat units); -void gl1_1_glDrawElements(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices); -void gl1_1_glDrawArrays(void *_glfuncs, GLenum mode, GLint first, GLsizei count); -void gl1_1_glTranslatef(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl1_1_glTranslated(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl1_1_glScalef(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl1_1_glScaled(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl1_1_glRotatef(void *_glfuncs, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); -void gl1_1_glRotated(void *_glfuncs, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); -void gl1_1_glPushMatrix(void *_glfuncs); -void gl1_1_glPopMatrix(void *_glfuncs); -void gl1_1_glOrtho(void *_glfuncs, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -void gl1_1_glMultMatrixd(void *_glfuncs, const GLdouble* m); -void gl1_1_glMultMatrixf(void *_glfuncs, const GLfloat* m); -void gl1_1_glMatrixMode(void *_glfuncs, GLenum mode); -void gl1_1_glLoadMatrixd(void *_glfuncs, const GLdouble* m); -void gl1_1_glLoadMatrixf(void *_glfuncs, const GLfloat* m); -void gl1_1_glLoadIdentity(void *_glfuncs); -void gl1_1_glFrustum(void *_glfuncs, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -GLboolean gl1_1_glIsList(void *_glfuncs, GLuint list); -void gl1_1_glGetTexGeniv(void *_glfuncs, GLenum coord, GLenum pname, GLint* params); -void gl1_1_glGetTexGenfv(void *_glfuncs, GLenum coord, GLenum pname, GLfloat* params); -void gl1_1_glGetTexGendv(void *_glfuncs, GLenum coord, GLenum pname, GLdouble* params); -void gl1_1_glGetTexEnviv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl1_1_glGetTexEnvfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl1_1_glGetPolygonStipple(void *_glfuncs, GLubyte* mask); -void gl1_1_glGetPixelMapusv(void *_glfuncs, GLenum glmap, GLushort* values); -void gl1_1_glGetPixelMapuiv(void *_glfuncs, GLenum glmap, GLuint* values); -void gl1_1_glGetPixelMapfv(void *_glfuncs, GLenum glmap, GLfloat* values); -void gl1_1_glGetMaterialiv(void *_glfuncs, GLenum face, GLenum pname, GLint* params); -void gl1_1_glGetMaterialfv(void *_glfuncs, GLenum face, GLenum pname, GLfloat* params); -void gl1_1_glGetMapiv(void *_glfuncs, GLenum target, GLenum query, GLint* v); -void gl1_1_glGetMapfv(void *_glfuncs, GLenum target, GLenum query, GLfloat* v); -void gl1_1_glGetMapdv(void *_glfuncs, GLenum target, GLenum query, GLdouble* v); -void gl1_1_glGetLightiv(void *_glfuncs, GLenum light, GLenum pname, GLint* params); -void gl1_1_glGetLightfv(void *_glfuncs, GLenum light, GLenum pname, GLfloat* params); -void gl1_1_glGetClipPlane(void *_glfuncs, GLenum plane, GLdouble* equation); -void gl1_1_glDrawPixels(void *_glfuncs, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl1_1_glCopyPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum gltype); -void gl1_1_glPixelMapusv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLushort* values); -void gl1_1_glPixelMapuiv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLuint* values); -void gl1_1_glPixelMapfv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLfloat* values); -void gl1_1_glPixelTransferi(void *_glfuncs, GLenum pname, GLint param); -void gl1_1_glPixelTransferf(void *_glfuncs, GLenum pname, GLfloat param); -void gl1_1_glPixelZoom(void *_glfuncs, GLfloat xfactor, GLfloat yfactor); -void gl1_1_glAlphaFunc(void *_glfuncs, GLenum glfunc, GLfloat ref); -void gl1_1_glEvalPoint2(void *_glfuncs, GLint i, GLint j); -void gl1_1_glEvalMesh2(void *_glfuncs, GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2); -void gl1_1_glEvalPoint1(void *_glfuncs, GLint i); -void gl1_1_glEvalMesh1(void *_glfuncs, GLenum mode, GLint i1, GLint i2); -void gl1_1_glEvalCoord2fv(void *_glfuncs, const GLfloat* u); -void gl1_1_glEvalCoord2f(void *_glfuncs, GLfloat u, GLfloat v); -void gl1_1_glEvalCoord2dv(void *_glfuncs, const GLdouble* u); -void gl1_1_glEvalCoord2d(void *_glfuncs, GLdouble u, GLdouble v); -void gl1_1_glEvalCoord1fv(void *_glfuncs, const GLfloat* u); -void gl1_1_glEvalCoord1f(void *_glfuncs, GLfloat u); -void gl1_1_glEvalCoord1dv(void *_glfuncs, const GLdouble* u); -void gl1_1_glEvalCoord1d(void *_glfuncs, GLdouble u); -void gl1_1_glMapGrid2f(void *_glfuncs, GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2); -void gl1_1_glMapGrid2d(void *_glfuncs, GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2); -void gl1_1_glMapGrid1f(void *_glfuncs, GLint un, GLfloat u1, GLfloat u2); -void gl1_1_glMapGrid1d(void *_glfuncs, GLint un, GLdouble u1, GLdouble u2); -void gl1_1_glMap2f(void *_glfuncs, GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat* points); -void gl1_1_glMap2d(void *_glfuncs, GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble* points); -void gl1_1_glMap1f(void *_glfuncs, GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat* points); -void gl1_1_glMap1d(void *_glfuncs, GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble* points); -void gl1_1_glPushAttrib(void *_glfuncs, GLbitfield mask); -void gl1_1_glPopAttrib(void *_glfuncs); -void gl1_1_glAccum(void *_glfuncs, GLenum op, GLfloat value); -void gl1_1_glIndexMask(void *_glfuncs, GLuint mask); -void gl1_1_glClearIndex(void *_glfuncs, GLfloat c); -void gl1_1_glClearAccum(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl1_1_glPushName(void *_glfuncs, GLuint name); -void gl1_1_glPopName(void *_glfuncs); -void gl1_1_glPassThrough(void *_glfuncs, GLfloat token); -void gl1_1_glLoadName(void *_glfuncs, GLuint name); -void gl1_1_glInitNames(void *_glfuncs); -GLint gl1_1_glRenderMode(void *_glfuncs, GLenum mode); -void gl1_1_glSelectBuffer(void *_glfuncs, GLsizei size, GLuint* buffer); -void gl1_1_glFeedbackBuffer(void *_glfuncs, GLsizei size, GLenum gltype, GLfloat* buffer); -void gl1_1_glTexGeniv(void *_glfuncs, GLenum coord, GLenum pname, const GLint* params); -void gl1_1_glTexGeni(void *_glfuncs, GLenum coord, GLenum pname, GLint param); -void gl1_1_glTexGenfv(void *_glfuncs, GLenum coord, GLenum pname, const GLfloat* params); -void gl1_1_glTexGenf(void *_glfuncs, GLenum coord, GLenum pname, GLfloat param); -void gl1_1_glTexGendv(void *_glfuncs, GLenum coord, GLenum pname, const GLdouble* params); -void gl1_1_glTexGend(void *_glfuncs, GLenum coord, GLenum pname, GLdouble param); -void gl1_1_glTexEnviv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl1_1_glTexEnvi(void *_glfuncs, GLenum target, GLenum pname, GLint param); -void gl1_1_glTexEnvfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params); -void gl1_1_glTexEnvf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param); -void gl1_1_glShadeModel(void *_glfuncs, GLenum mode); -void gl1_1_glPolygonStipple(void *_glfuncs, const GLubyte* mask); -void gl1_1_glMaterialiv(void *_glfuncs, GLenum face, GLenum pname, const GLint* params); -void gl1_1_glMateriali(void *_glfuncs, GLenum face, GLenum pname, GLint param); -void gl1_1_glMaterialfv(void *_glfuncs, GLenum face, GLenum pname, const GLfloat* params); -void gl1_1_glMaterialf(void *_glfuncs, GLenum face, GLenum pname, GLfloat param); -void gl1_1_glLineStipple(void *_glfuncs, GLint factor, GLushort pattern); -void gl1_1_glLightModeliv(void *_glfuncs, GLenum pname, const GLint* params); -void gl1_1_glLightModeli(void *_glfuncs, GLenum pname, GLint param); -void gl1_1_glLightModelfv(void *_glfuncs, GLenum pname, const GLfloat* params); -void gl1_1_glLightModelf(void *_glfuncs, GLenum pname, GLfloat param); -void gl1_1_glLightiv(void *_glfuncs, GLenum light, GLenum pname, const GLint* params); -void gl1_1_glLighti(void *_glfuncs, GLenum light, GLenum pname, GLint param); -void gl1_1_glLightfv(void *_glfuncs, GLenum light, GLenum pname, const GLfloat* params); -void gl1_1_glLightf(void *_glfuncs, GLenum light, GLenum pname, GLfloat param); -void gl1_1_glFogiv(void *_glfuncs, GLenum pname, const GLint* params); -void gl1_1_glFogi(void *_glfuncs, GLenum pname, GLint param); -void gl1_1_glFogfv(void *_glfuncs, GLenum pname, const GLfloat* params); -void gl1_1_glFogf(void *_glfuncs, GLenum pname, GLfloat param); -void gl1_1_glColorMaterial(void *_glfuncs, GLenum face, GLenum mode); -void gl1_1_glClipPlane(void *_glfuncs, GLenum plane, const GLdouble* equation); -void gl1_1_glVertex4sv(void *_glfuncs, const GLshort* v); -void gl1_1_glVertex4s(void *_glfuncs, GLshort x, GLshort y, GLshort z, GLshort w); -void gl1_1_glVertex4iv(void *_glfuncs, const GLint* v); -void gl1_1_glVertex4i(void *_glfuncs, GLint x, GLint y, GLint z, GLint w); -void gl1_1_glVertex4fv(void *_glfuncs, const GLfloat* v); -void gl1_1_glVertex4f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -void gl1_1_glVertex4dv(void *_glfuncs, const GLdouble* v); -void gl1_1_glVertex4d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -void gl1_1_glVertex3sv(void *_glfuncs, const GLshort* v); -void gl1_1_glVertex3s(void *_glfuncs, GLshort x, GLshort y, GLshort z); -void gl1_1_glVertex3iv(void *_glfuncs, const GLint* v); -void gl1_1_glVertex3i(void *_glfuncs, GLint x, GLint y, GLint z); -void gl1_1_glVertex3fv(void *_glfuncs, const GLfloat* v); -void gl1_1_glVertex3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl1_1_glVertex3dv(void *_glfuncs, const GLdouble* v); -void gl1_1_glVertex3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl1_1_glVertex2sv(void *_glfuncs, const GLshort* v); -void gl1_1_glVertex2s(void *_glfuncs, GLshort x, GLshort y); -void gl1_1_glVertex2iv(void *_glfuncs, const GLint* v); -void gl1_1_glVertex2i(void *_glfuncs, GLint x, GLint y); -void gl1_1_glVertex2fv(void *_glfuncs, const GLfloat* v); -void gl1_1_glVertex2f(void *_glfuncs, GLfloat x, GLfloat y); -void gl1_1_glVertex2dv(void *_glfuncs, const GLdouble* v); -void gl1_1_glVertex2d(void *_glfuncs, GLdouble x, GLdouble y); -void gl1_1_glTexCoord4sv(void *_glfuncs, const GLshort* v); -void gl1_1_glTexCoord4s(void *_glfuncs, GLshort s, GLshort t, GLshort r, GLshort q); -void gl1_1_glTexCoord4iv(void *_glfuncs, const GLint* v); -void gl1_1_glTexCoord4i(void *_glfuncs, GLint s, GLint t, GLint r, GLint q); -void gl1_1_glTexCoord4fv(void *_glfuncs, const GLfloat* v); -void gl1_1_glTexCoord4f(void *_glfuncs, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -void gl1_1_glTexCoord4dv(void *_glfuncs, const GLdouble* v); -void gl1_1_glTexCoord4d(void *_glfuncs, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -void gl1_1_glTexCoord3sv(void *_glfuncs, const GLshort* v); -void gl1_1_glTexCoord3s(void *_glfuncs, GLshort s, GLshort t, GLshort r); -void gl1_1_glTexCoord3iv(void *_glfuncs, const GLint* v); -void gl1_1_glTexCoord3i(void *_glfuncs, GLint s, GLint t, GLint r); -void gl1_1_glTexCoord3fv(void *_glfuncs, const GLfloat* v); -void gl1_1_glTexCoord3f(void *_glfuncs, GLfloat s, GLfloat t, GLfloat r); -void gl1_1_glTexCoord3dv(void *_glfuncs, const GLdouble* v); -void gl1_1_glTexCoord3d(void *_glfuncs, GLdouble s, GLdouble t, GLdouble r); -void gl1_1_glTexCoord2sv(void *_glfuncs, const GLshort* v); -void gl1_1_glTexCoord2s(void *_glfuncs, GLshort s, GLshort t); -void gl1_1_glTexCoord2iv(void *_glfuncs, const GLint* v); -void gl1_1_glTexCoord2i(void *_glfuncs, GLint s, GLint t); -void gl1_1_glTexCoord2fv(void *_glfuncs, const GLfloat* v); -void gl1_1_glTexCoord2f(void *_glfuncs, GLfloat s, GLfloat t); -void gl1_1_glTexCoord2dv(void *_glfuncs, const GLdouble* v); -void gl1_1_glTexCoord2d(void *_glfuncs, GLdouble s, GLdouble t); -void gl1_1_glTexCoord1sv(void *_glfuncs, const GLshort* v); -void gl1_1_glTexCoord1s(void *_glfuncs, GLshort s); -void gl1_1_glTexCoord1iv(void *_glfuncs, const GLint* v); -void gl1_1_glTexCoord1i(void *_glfuncs, GLint s); -void gl1_1_glTexCoord1fv(void *_glfuncs, const GLfloat* v); -void gl1_1_glTexCoord1f(void *_glfuncs, GLfloat s); -void gl1_1_glTexCoord1dv(void *_glfuncs, const GLdouble* v); -void gl1_1_glTexCoord1d(void *_glfuncs, GLdouble s); -void gl1_1_glRectsv(void *_glfuncs, const GLshort* v1, const GLshort* v2); -void gl1_1_glRects(void *_glfuncs, GLshort x1, GLshort y1, GLshort x2, GLshort y2); -void gl1_1_glRectiv(void *_glfuncs, const GLint* v1, const GLint* v2); -void gl1_1_glRecti(void *_glfuncs, GLint x1, GLint y1, GLint x2, GLint y2); -void gl1_1_glRectfv(void *_glfuncs, const GLfloat* v1, const GLfloat* v2); -void gl1_1_glRectf(void *_glfuncs, GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2); -void gl1_1_glRectdv(void *_glfuncs, const GLdouble* v1, const GLdouble* v2); -void gl1_1_glRectd(void *_glfuncs, GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2); -void gl1_1_glRasterPos4sv(void *_glfuncs, const GLshort* v); -void gl1_1_glRasterPos4s(void *_glfuncs, GLshort x, GLshort y, GLshort z, GLshort w); -void gl1_1_glRasterPos4iv(void *_glfuncs, const GLint* v); -void gl1_1_glRasterPos4i(void *_glfuncs, GLint x, GLint y, GLint z, GLint w); -void gl1_1_glRasterPos4fv(void *_glfuncs, const GLfloat* v); -void gl1_1_glRasterPos4f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -void gl1_1_glRasterPos4dv(void *_glfuncs, const GLdouble* v); -void gl1_1_glRasterPos4d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -void gl1_1_glRasterPos3sv(void *_glfuncs, const GLshort* v); -void gl1_1_glRasterPos3s(void *_glfuncs, GLshort x, GLshort y, GLshort z); -void gl1_1_glRasterPos3iv(void *_glfuncs, const GLint* v); -void gl1_1_glRasterPos3i(void *_glfuncs, GLint x, GLint y, GLint z); -void gl1_1_glRasterPos3fv(void *_glfuncs, const GLfloat* v); -void gl1_1_glRasterPos3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl1_1_glRasterPos3dv(void *_glfuncs, const GLdouble* v); -void gl1_1_glRasterPos3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl1_1_glRasterPos2sv(void *_glfuncs, const GLshort* v); -void gl1_1_glRasterPos2s(void *_glfuncs, GLshort x, GLshort y); -void gl1_1_glRasterPos2iv(void *_glfuncs, const GLint* v); -void gl1_1_glRasterPos2i(void *_glfuncs, GLint x, GLint y); -void gl1_1_glRasterPos2fv(void *_glfuncs, const GLfloat* v); -void gl1_1_glRasterPos2f(void *_glfuncs, GLfloat x, GLfloat y); -void gl1_1_glRasterPos2dv(void *_glfuncs, const GLdouble* v); -void gl1_1_glRasterPos2d(void *_glfuncs, GLdouble x, GLdouble y); -void gl1_1_glNormal3sv(void *_glfuncs, const GLshort* v); -void gl1_1_glNormal3s(void *_glfuncs, GLshort nx, GLshort ny, GLshort nz); -void gl1_1_glNormal3iv(void *_glfuncs, const GLint* v); -void gl1_1_glNormal3i(void *_glfuncs, GLint nx, GLint ny, GLint nz); -void gl1_1_glNormal3fv(void *_glfuncs, const GLfloat* v); -void gl1_1_glNormal3f(void *_glfuncs, GLfloat nx, GLfloat ny, GLfloat nz); -void gl1_1_glNormal3dv(void *_glfuncs, const GLdouble* v); -void gl1_1_glNormal3d(void *_glfuncs, GLdouble nx, GLdouble ny, GLdouble nz); -void gl1_1_glNormal3bv(void *_glfuncs, const GLbyte* v); -void gl1_1_glNormal3b(void *_glfuncs, GLbyte nx, GLbyte ny, GLbyte nz); -void gl1_1_glIndexsv(void *_glfuncs, const GLshort* c); -void gl1_1_glIndexs(void *_glfuncs, GLshort c); -void gl1_1_glIndexiv(void *_glfuncs, const GLint* c); -void gl1_1_glIndexi(void *_glfuncs, GLint c); -void gl1_1_glIndexfv(void *_glfuncs, const GLfloat* c); -void gl1_1_glIndexf(void *_glfuncs, GLfloat c); -void gl1_1_glIndexdv(void *_glfuncs, const GLdouble* c); -void gl1_1_glIndexd(void *_glfuncs, GLdouble c); -void gl1_1_glEnd(void *_glfuncs); -void gl1_1_glEdgeFlagv(void *_glfuncs, const GLboolean* flag); -void gl1_1_glEdgeFlag(void *_glfuncs, GLboolean flag); -void gl1_1_glColor4usv(void *_glfuncs, const GLushort* v); -void gl1_1_glColor4us(void *_glfuncs, GLushort red, GLushort green, GLushort blue, GLushort alpha); -void gl1_1_glColor4uiv(void *_glfuncs, const GLuint* v); -void gl1_1_glColor4ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue, GLuint alpha); -void gl1_1_glColor4ubv(void *_glfuncs, const GLubyte* v); -void gl1_1_glColor4ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha); -void gl1_1_glColor4sv(void *_glfuncs, const GLshort* v); -void gl1_1_glColor4s(void *_glfuncs, GLshort red, GLshort green, GLshort blue, GLshort alpha); -void gl1_1_glColor4iv(void *_glfuncs, const GLint* v); -void gl1_1_glColor4i(void *_glfuncs, GLint red, GLint green, GLint blue, GLint alpha); -void gl1_1_glColor4fv(void *_glfuncs, const GLfloat* v); -void gl1_1_glColor4f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl1_1_glColor4dv(void *_glfuncs, const GLdouble* v); -void gl1_1_glColor4d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha); -void gl1_1_glColor4bv(void *_glfuncs, const GLbyte* v); -void gl1_1_glColor4b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha); -void gl1_1_glColor3usv(void *_glfuncs, const GLushort* v); -void gl1_1_glColor3us(void *_glfuncs, GLushort red, GLushort green, GLushort blue); -void gl1_1_glColor3uiv(void *_glfuncs, const GLuint* v); -void gl1_1_glColor3ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue); -void gl1_1_glColor3ubv(void *_glfuncs, const GLubyte* v); -void gl1_1_glColor3ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue); -void gl1_1_glColor3sv(void *_glfuncs, const GLshort* v); -void gl1_1_glColor3s(void *_glfuncs, GLshort red, GLshort green, GLshort blue); -void gl1_1_glColor3iv(void *_glfuncs, const GLint* v); -void gl1_1_glColor3i(void *_glfuncs, GLint red, GLint green, GLint blue); -void gl1_1_glColor3fv(void *_glfuncs, const GLfloat* v); -void gl1_1_glColor3f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue); -void gl1_1_glColor3dv(void *_glfuncs, const GLdouble* v); -void gl1_1_glColor3d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue); -void gl1_1_glColor3bv(void *_glfuncs, const GLbyte* v); -void gl1_1_glColor3b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue); -void gl1_1_glBitmap(void *_glfuncs, GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte* bitmap); -void gl1_1_glBegin(void *_glfuncs, GLenum mode); -void gl1_1_glListBase(void *_glfuncs, GLuint base); -GLuint gl1_1_glGenLists(void *_glfuncs, GLsizei range_); -void gl1_1_glDeleteLists(void *_glfuncs, GLuint list, GLsizei range_); -void gl1_1_glCallLists(void *_glfuncs, GLsizei n, GLenum gltype, const GLvoid* lists); -void gl1_1_glCallList(void *_glfuncs, GLuint list); -void gl1_1_glEndList(void *_glfuncs); -void gl1_1_glNewList(void *_glfuncs, GLuint list, GLenum mode); -void gl1_1_glPushClientAttrib(void *_glfuncs, GLbitfield mask); -void gl1_1_glPopClientAttrib(void *_glfuncs); -void gl1_1_glPrioritizeTextures(void *_glfuncs, GLsizei n, const GLuint* textures, const GLfloat* priorities); -GLboolean gl1_1_glAreTexturesResident(void *_glfuncs, GLsizei n, const GLuint* textures, GLboolean* residences); -void gl1_1_glVertexPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl1_1_glTexCoordPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl1_1_glNormalPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl1_1_glInterleavedArrays(void *_glfuncs, GLenum format, GLsizei stride, const GLvoid* pointer); -void gl1_1_glIndexPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl1_1_glEnableClientState(void *_glfuncs, GLenum array); -void gl1_1_glEdgeFlagPointer(void *_glfuncs, GLsizei stride, const GLvoid* pointer); -void gl1_1_glDisableClientState(void *_glfuncs, GLenum array); -void gl1_1_glColorPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl1_1_glArrayElement(void *_glfuncs, GLint i); - - -#ifdef __cplusplus -} // extern "C" -#endif diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/1.1/gl.go b/Godeps/_workspace/src/github.com/obscuren/qml/gl/1.1/gl.go deleted file mode 100644 index 268e1c083f..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/1.1/gl.go +++ /dev/null @@ -1,2789 +0,0 @@ -// ** file automatically generated by glgen -- do not edit manually ** - -package GL - -// #cgo CXXFLAGS: -std=c++0x -pedantic-errors -Wall -fno-strict-aliasing -// #cgo LDFLAGS: -lstdc++ -// #cgo pkg-config: Qt5Core Qt5OpenGL -// -// #include "funcs.h" -// -// void free(void*); -// -import "C" - -import ( - "fmt" - "reflect" - "unsafe" - - "gopkg.in/qml.v1/gl/glbase" -) - -// API returns a value that offers methods matching the OpenGL version 1.1 API. -// -// The returned API must not be used after the provided OpenGL context becomes invalid. -func API(context glbase.Contexter) *GL { - gl := &GL{} - gl.funcs = C.gl1_1_funcs() - if gl.funcs == nil { - panic(fmt.Errorf("OpenGL version 1.1 is not available")) - } - return gl -} - -// GL implements the OpenGL version 1.1 API. Values of this -// type must be created via the API function, and it must not be used after -// the associated OpenGL context becomes invalid. -type GL struct { - funcs unsafe.Pointer -} - -const ( - FALSE = 0 - TRUE = 1 - NONE = 0 - - BYTE = 0x1400 - UNSIGNED_BYTE = 0x1401 - SHORT = 0x1402 - UNSIGNED_SHORT = 0x1403 - INT = 0x1404 - UNSIGNED_INT = 0x1405 - FLOAT = 0x1406 - N2_BYTES = 0x1407 - N3_BYTES = 0x1408 - N4_BYTES = 0x1409 - DOUBLE = 0x140A - - ACCUM = 0x0100 - LOAD = 0x0101 - RETURN = 0x0102 - MULT = 0x0103 - ADD = 0x0104 - - ACCUM_BUFFER_BIT = 0x00000200 - ALL_ATTRIB_BITS = 0xFFFFFFFF - COLOR_BUFFER_BIT = 0x00004000 - CURRENT_BIT = 0x00000001 - DEPTH_BUFFER_BIT = 0x00000100 - ENABLE_BIT = 0x00002000 - EVAL_BIT = 0x00010000 - FOG_BIT = 0x00000080 - HINT_BIT = 0x00008000 - LIGHTING_BIT = 0x00000040 - LINE_BIT = 0x00000004 - LIST_BIT = 0x00020000 - PIXEL_MODE_BIT = 0x00000020 - POINT_BIT = 0x00000002 - POLYGON_BIT = 0x00000008 - POLYGON_STIPPLE_BIT = 0x00000010 - SCISSOR_BIT = 0x00080000 - STENCIL_BUFFER_BIT = 0x00000400 - TEXTURE_BIT = 0x00040000 - TRANSFORM_BIT = 0x00001000 - VIEWPORT_BIT = 0x00000800 - - ALWAYS = 0x0207 - EQUAL = 0x0202 - GEQUAL = 0x0206 - GREATER = 0x0204 - LEQUAL = 0x0203 - LESS = 0x0201 - NEVER = 0x0200 - NOTEQUAL = 0x0205 - - LOGIC_OP = 0x0BF1 - - DST_ALPHA = 0x0304 - ONE = 1 - ONE_MINUS_DST_ALPHA = 0x0305 - ONE_MINUS_SRC_ALPHA = 0x0303 - ONE_MINUS_SRC_COLOR = 0x0301 - SRC_ALPHA = 0x0302 - SRC_COLOR = 0x0300 - ZERO = 0 - - DST_COLOR = 0x0306 - ONE_MINUS_DST_COLOR = 0x0307 - SRC_ALPHA_SATURATE = 0x0308 - - CLIENT_ALL_ATTRIB_BITS = 0xFFFFFFFF - CLIENT_PIXEL_STORE_BIT = 0x00000001 - CLIENT_VERTEX_ARRAY_BIT = 0x00000002 - - CLIP_PLANE0 = 0x3000 - CLIP_PLANE1 = 0x3001 - CLIP_PLANE2 = 0x3002 - CLIP_PLANE3 = 0x3003 - CLIP_PLANE4 = 0x3004 - CLIP_PLANE5 = 0x3005 - - BACK = 0x0405 - FRONT = 0x0404 - FRONT_AND_BACK = 0x0408 - - AMBIENT = 0x1200 - AMBIENT_AND_DIFFUSE = 0x1602 - DIFFUSE = 0x1201 - EMISSION = 0x1600 - SPECULAR = 0x1202 - - AUX0 = 0x0409 - AUX1 = 0x040A - AUX2 = 0x040B - AUX3 = 0x040C - BACK_LEFT = 0x0402 - BACK_RIGHT = 0x0403 - FRONT_LEFT = 0x0400 - FRONT_RIGHT = 0x0401 - LEFT = 0x0406 - RIGHT = 0x0407 - - ALPHA_TEST = 0x0BC0 - AUTO_NORMAL = 0x0D80 - BLEND = 0x0BE2 - COLOR_ARRAY = 0x8076 - COLOR_LOGIC_OP = 0x0BF2 - COLOR_MATERIAL = 0x0B57 - CULL_FACE = 0x0B44 - DEPTH_TEST = 0x0B71 - DITHER = 0x0BD0 - EDGE_FLAG_ARRAY = 0x8079 - FOG = 0x0B60 - INDEX_ARRAY = 0x8077 - INDEX_LOGIC_OP = 0x0BF1 - LIGHT0 = 0x4000 - LIGHT1 = 0x4001 - LIGHT2 = 0x4002 - LIGHT3 = 0x4003 - LIGHT4 = 0x4004 - LIGHT5 = 0x4005 - LIGHT6 = 0x4006 - LIGHT7 = 0x4007 - LIGHTING = 0x0B50 - LINE_SMOOTH = 0x0B20 - LINE_STIPPLE = 0x0B24 - MAP1_COLOR_4 = 0x0D90 - MAP1_INDEX = 0x0D91 - MAP1_NORMAL = 0x0D92 - MAP1_TEXTURE_COORD_1 = 0x0D93 - MAP1_TEXTURE_COORD_2 = 0x0D94 - MAP1_TEXTURE_COORD_3 = 0x0D95 - MAP1_TEXTURE_COORD_4 = 0x0D96 - MAP1_VERTEX_3 = 0x0D97 - MAP1_VERTEX_4 = 0x0D98 - MAP2_COLOR_4 = 0x0DB0 - MAP2_INDEX = 0x0DB1 - MAP2_NORMAL = 0x0DB2 - MAP2_TEXTURE_COORD_1 = 0x0DB3 - MAP2_TEXTURE_COORD_2 = 0x0DB4 - MAP2_TEXTURE_COORD_3 = 0x0DB5 - MAP2_TEXTURE_COORD_4 = 0x0DB6 - MAP2_VERTEX_3 = 0x0DB7 - MAP2_VERTEX_4 = 0x0DB8 - NORMALIZE = 0x0BA1 - NORMAL_ARRAY = 0x8075 - POINT_SMOOTH = 0x0B10 - POLYGON_OFFSET_FILL = 0x8037 - POLYGON_OFFSET_LINE = 0x2A02 - POLYGON_OFFSET_POINT = 0x2A01 - POLYGON_SMOOTH = 0x0B41 - POLYGON_STIPPLE = 0x0B42 - SCISSOR_TEST = 0x0C11 - STENCIL_TEST = 0x0B90 - TEXTURE_1D = 0x0DE0 - TEXTURE_2D = 0x0DE1 - TEXTURE_COORD_ARRAY = 0x8078 - TEXTURE_GEN_Q = 0x0C63 - TEXTURE_GEN_R = 0x0C62 - TEXTURE_GEN_S = 0x0C60 - TEXTURE_GEN_T = 0x0C61 - VERTEX_ARRAY = 0x8074 - - INVALID_ENUM = 0x0500 - INVALID_OPERATION = 0x0502 - INVALID_VALUE = 0x0501 - NO_ERROR = 0 - OUT_OF_MEMORY = 0x0505 - STACK_OVERFLOW = 0x0503 - STACK_UNDERFLOW = 0x0504 - - N2D = 0x0600 - N3D = 0x0601 - N3D_COLOR = 0x0602 - N3D_COLOR_TEXTURE = 0x0603 - N4D_COLOR_TEXTURE = 0x0604 - - BITMAP_TOKEN = 0x0704 - COPY_PIXEL_TOKEN = 0x0706 - DRAW_PIXEL_TOKEN = 0x0705 - LINE_RESET_TOKEN = 0x0707 - LINE_TOKEN = 0x0702 - PASS_THROUGH_TOKEN = 0x0700 - POINT_TOKEN = 0x0701 - POLYGON_TOKEN = 0x0703 - - EXP = 0x0800 - EXP2 = 0x0801 - LINEAR = 0x2601 - - FOG_COLOR = 0x0B66 - FOG_DENSITY = 0x0B62 - FOG_END = 0x0B64 - FOG_INDEX = 0x0B61 - FOG_MODE = 0x0B65 - FOG_START = 0x0B63 - - CCW = 0x0901 - CW = 0x0900 - - COEFF = 0x0A00 - DOMAIN = 0x0A02 - ORDER = 0x0A01 - - PIXEL_MAP_A_TO_A = 0x0C79 - PIXEL_MAP_B_TO_B = 0x0C78 - PIXEL_MAP_G_TO_G = 0x0C77 - PIXEL_MAP_I_TO_A = 0x0C75 - PIXEL_MAP_I_TO_B = 0x0C74 - PIXEL_MAP_I_TO_G = 0x0C73 - PIXEL_MAP_I_TO_I = 0x0C70 - PIXEL_MAP_I_TO_R = 0x0C72 - PIXEL_MAP_R_TO_R = 0x0C76 - PIXEL_MAP_S_TO_S = 0x0C71 - - ACCUM_ALPHA_BITS = 0x0D5B - ACCUM_BLUE_BITS = 0x0D5A - ACCUM_CLEAR_VALUE = 0x0B80 - ACCUM_GREEN_BITS = 0x0D59 - ACCUM_RED_BITS = 0x0D58 - ALPHA_BIAS = 0x0D1D - ALPHA_BITS = 0x0D55 - ALPHA_SCALE = 0x0D1C - ALPHA_TEST_FUNC = 0x0BC1 - ALPHA_TEST_REF = 0x0BC2 - ATTRIB_STACK_DEPTH = 0x0BB0 - AUX_BUFFERS = 0x0C00 - BLEND_DST = 0x0BE0 - BLEND_SRC = 0x0BE1 - BLUE_BIAS = 0x0D1B - BLUE_BITS = 0x0D54 - BLUE_SCALE = 0x0D1A - CLIENT_ATTRIB_STACK_DEPTH = 0x0BB1 - COLOR_ARRAY_SIZE = 0x8081 - COLOR_ARRAY_STRIDE = 0x8083 - COLOR_ARRAY_TYPE = 0x8082 - COLOR_CLEAR_VALUE = 0x0C22 - COLOR_MATERIAL_FACE = 0x0B55 - COLOR_MATERIAL_PARAMETER = 0x0B56 - COLOR_WRITEMASK = 0x0C23 - CULL_FACE_MODE = 0x0B45 - CURRENT_COLOR = 0x0B00 - CURRENT_INDEX = 0x0B01 - CURRENT_NORMAL = 0x0B02 - CURRENT_RASTER_COLOR = 0x0B04 - CURRENT_RASTER_DISTANCE = 0x0B09 - CURRENT_RASTER_INDEX = 0x0B05 - CURRENT_RASTER_POSITION = 0x0B07 - CURRENT_RASTER_POSITION_VALID = 0x0B08 - CURRENT_RASTER_TEXTURE_COORDS = 0x0B06 - CURRENT_TEXTURE_COORDS = 0x0B03 - DEPTH_BIAS = 0x0D1F - DEPTH_BITS = 0x0D56 - DEPTH_CLEAR_VALUE = 0x0B73 - DEPTH_FUNC = 0x0B74 - DEPTH_RANGE = 0x0B70 - DEPTH_SCALE = 0x0D1E - DEPTH_WRITEMASK = 0x0B72 - DOUBLEBUFFER = 0x0C32 - DRAW_BUFFER = 0x0C01 - EDGE_FLAG = 0x0B43 - EDGE_FLAG_ARRAY_STRIDE = 0x808C - FEEDBACK_BUFFER_SIZE = 0x0DF1 - FEEDBACK_BUFFER_TYPE = 0x0DF2 - FOG_HINT = 0x0C54 - FRONT_FACE = 0x0B46 - GREEN_BIAS = 0x0D19 - GREEN_BITS = 0x0D53 - GREEN_SCALE = 0x0D18 - INDEX_ARRAY_STRIDE = 0x8086 - INDEX_ARRAY_TYPE = 0x8085 - INDEX_BITS = 0x0D51 - INDEX_CLEAR_VALUE = 0x0C20 - INDEX_MODE = 0x0C30 - INDEX_OFFSET = 0x0D13 - INDEX_SHIFT = 0x0D12 - INDEX_WRITEMASK = 0x0C21 - LIGHT_MODEL_AMBIENT = 0x0B53 - LIGHT_MODEL_LOCAL_VIEWER = 0x0B51 - LIGHT_MODEL_TWO_SIDE = 0x0B52 - LINE_SMOOTH_HINT = 0x0C52 - LINE_STIPPLE_PATTERN = 0x0B25 - LINE_STIPPLE_REPEAT = 0x0B26 - LINE_WIDTH = 0x0B21 - LINE_WIDTH_GRANULARITY = 0x0B23 - LINE_WIDTH_RANGE = 0x0B22 - LIST_BASE = 0x0B32 - LIST_INDEX = 0x0B33 - LIST_MODE = 0x0B30 - LOGIC_OP_MODE = 0x0BF0 - MAP1_GRID_DOMAIN = 0x0DD0 - MAP1_GRID_SEGMENTS = 0x0DD1 - MAP2_GRID_DOMAIN = 0x0DD2 - MAP2_GRID_SEGMENTS = 0x0DD3 - MAP_COLOR = 0x0D10 - MAP_STENCIL = 0x0D11 - MATRIX_MODE = 0x0BA0 - MAX_ATTRIB_STACK_DEPTH = 0x0D35 - MAX_CLIENT_ATTRIB_STACK_DEPTH = 0x0D3B - MAX_CLIP_PLANES = 0x0D32 - MAX_EVAL_ORDER = 0x0D30 - MAX_LIGHTS = 0x0D31 - MAX_LIST_NESTING = 0x0B31 - MAX_MODELVIEW_STACK_DEPTH = 0x0D36 - MAX_NAME_STACK_DEPTH = 0x0D37 - MAX_PIXEL_MAP_TABLE = 0x0D34 - MAX_PROJECTION_STACK_DEPTH = 0x0D38 - MAX_TEXTURE_SIZE = 0x0D33 - MAX_TEXTURE_STACK_DEPTH = 0x0D39 - MAX_VIEWPORT_DIMS = 0x0D3A - MODELVIEW_MATRIX = 0x0BA6 - MODELVIEW_STACK_DEPTH = 0x0BA3 - NAME_STACK_DEPTH = 0x0D70 - NORMAL_ARRAY_STRIDE = 0x807F - NORMAL_ARRAY_TYPE = 0x807E - PACK_ALIGNMENT = 0x0D05 - PACK_LSB_FIRST = 0x0D01 - PACK_ROW_LENGTH = 0x0D02 - PACK_SKIP_PIXELS = 0x0D04 - PACK_SKIP_ROWS = 0x0D03 - PACK_SWAP_BYTES = 0x0D00 - PERSPECTIVE_CORRECTION_HINT = 0x0C50 - PIXEL_MAP_A_TO_A_SIZE = 0x0CB9 - PIXEL_MAP_B_TO_B_SIZE = 0x0CB8 - PIXEL_MAP_G_TO_G_SIZE = 0x0CB7 - PIXEL_MAP_I_TO_A_SIZE = 0x0CB5 - PIXEL_MAP_I_TO_B_SIZE = 0x0CB4 - PIXEL_MAP_I_TO_G_SIZE = 0x0CB3 - PIXEL_MAP_I_TO_I_SIZE = 0x0CB0 - PIXEL_MAP_I_TO_R_SIZE = 0x0CB2 - PIXEL_MAP_R_TO_R_SIZE = 0x0CB6 - PIXEL_MAP_S_TO_S_SIZE = 0x0CB1 - POINT_SIZE = 0x0B11 - POINT_SIZE_GRANULARITY = 0x0B13 - POINT_SIZE_RANGE = 0x0B12 - POINT_SMOOTH_HINT = 0x0C51 - POLYGON_MODE = 0x0B40 - POLYGON_OFFSET_FACTOR = 0x8038 - POLYGON_OFFSET_UNITS = 0x2A00 - POLYGON_SMOOTH_HINT = 0x0C53 - PROJECTION_MATRIX = 0x0BA7 - PROJECTION_STACK_DEPTH = 0x0BA4 - READ_BUFFER = 0x0C02 - RED_BIAS = 0x0D15 - RED_BITS = 0x0D52 - RED_SCALE = 0x0D14 - RENDER_MODE = 0x0C40 - RGBA_MODE = 0x0C31 - SCISSOR_BOX = 0x0C10 - SELECTION_BUFFER_SIZE = 0x0DF4 - SHADE_MODEL = 0x0B54 - STENCIL_BITS = 0x0D57 - STENCIL_CLEAR_VALUE = 0x0B91 - STENCIL_FAIL = 0x0B94 - STENCIL_FUNC = 0x0B92 - STENCIL_PASS_DEPTH_FAIL = 0x0B95 - STENCIL_PASS_DEPTH_PASS = 0x0B96 - STENCIL_REF = 0x0B97 - STENCIL_VALUE_MASK = 0x0B93 - STENCIL_WRITEMASK = 0x0B98 - STEREO = 0x0C33 - SUBPIXEL_BITS = 0x0D50 - TEXTURE_BINDING_1D = 0x8068 - TEXTURE_BINDING_2D = 0x8069 - TEXTURE_COORD_ARRAY_SIZE = 0x8088 - TEXTURE_COORD_ARRAY_STRIDE = 0x808A - TEXTURE_COORD_ARRAY_TYPE = 0x8089 - TEXTURE_MATRIX = 0x0BA8 - TEXTURE_STACK_DEPTH = 0x0BA5 - UNPACK_ALIGNMENT = 0x0CF5 - UNPACK_LSB_FIRST = 0x0CF1 - UNPACK_ROW_LENGTH = 0x0CF2 - UNPACK_SKIP_PIXELS = 0x0CF4 - UNPACK_SKIP_ROWS = 0x0CF3 - UNPACK_SWAP_BYTES = 0x0CF0 - VERTEX_ARRAY_SIZE = 0x807A - VERTEX_ARRAY_STRIDE = 0x807C - VERTEX_ARRAY_TYPE = 0x807B - VIEWPORT = 0x0BA2 - ZOOM_X = 0x0D16 - ZOOM_Y = 0x0D17 - - COLOR_ARRAY_POINTER = 0x8090 - EDGE_FLAG_ARRAY_POINTER = 0x8093 - FEEDBACK_BUFFER_POINTER = 0x0DF0 - INDEX_ARRAY_POINTER = 0x8091 - NORMAL_ARRAY_POINTER = 0x808F - SELECTION_BUFFER_POINTER = 0x0DF3 - TEXTURE_COORD_ARRAY_POINTER = 0x8092 - VERTEX_ARRAY_POINTER = 0x808E - - TEXTURE_ALPHA_SIZE = 0x805F - TEXTURE_BLUE_SIZE = 0x805E - TEXTURE_BORDER = 0x1005 - TEXTURE_BORDER_COLOR = 0x1004 - TEXTURE_COMPONENTS = 0x1003 - TEXTURE_GREEN_SIZE = 0x805D - TEXTURE_HEIGHT = 0x1001 - TEXTURE_INTENSITY_SIZE = 0x8061 - TEXTURE_INTERNAL_FORMAT = 0x1003 - TEXTURE_LUMINANCE_SIZE = 0x8060 - TEXTURE_MAG_FILTER = 0x2800 - TEXTURE_MIN_FILTER = 0x2801 - TEXTURE_PRIORITY = 0x8066 - TEXTURE_RED_SIZE = 0x805C - TEXTURE_RESIDENT = 0x8067 - TEXTURE_WIDTH = 0x1000 - TEXTURE_WRAP_S = 0x2802 - TEXTURE_WRAP_T = 0x2803 - - DONT_CARE = 0x1100 - FASTEST = 0x1101 - NICEST = 0x1102 - - C3F_V3F = 0x2A24 - C4F_N3F_V3F = 0x2A26 - C4UB_V2F = 0x2A22 - C4UB_V3F = 0x2A23 - N3F_V3F = 0x2A25 - T2F_C3F_V3F = 0x2A2A - T2F_C4F_N3F_V3F = 0x2A2C - T2F_C4UB_V3F = 0x2A29 - T2F_N3F_V3F = 0x2A2B - T2F_V3F = 0x2A27 - T4F_C4F_N3F_V4F = 0x2A2D - T4F_V4F = 0x2A28 - V2F = 0x2A20 - V3F = 0x2A21 - - MODULATE = 0x2100 - REPLACE = 0x1E01 - - CONSTANT_ATTENUATION = 0x1207 - LINEAR_ATTENUATION = 0x1208 - POSITION = 0x1203 - QUADRATIC_ATTENUATION = 0x1209 - SPOT_CUTOFF = 0x1206 - SPOT_DIRECTION = 0x1204 - SPOT_EXPONENT = 0x1205 - - COMPILE = 0x1300 - COMPILE_AND_EXECUTE = 0x1301 - - AND = 0x1501 - AND_INVERTED = 0x1504 - AND_REVERSE = 0x1502 - CLEAR = 0x1500 - COPY = 0x1503 - COPY_INVERTED = 0x150C - EQUIV = 0x1509 - INVERT = 0x150A - NAND = 0x150E - NOOP = 0x1505 - NOR = 0x1508 - OR = 0x1507 - OR_INVERTED = 0x150D - OR_REVERSE = 0x150B - SET = 0x150F - XOR = 0x1506 - - COLOR_INDEXES = 0x1603 - SHININESS = 0x1601 - - MODELVIEW = 0x1700 - PROJECTION = 0x1701 - TEXTURE = 0x1702 - - LINE = 0x1B01 - POINT = 0x1B00 - - FILL = 0x1B02 - - COLOR = 0x1800 - DEPTH = 0x1801 - STENCIL = 0x1802 - - ALPHA = 0x1906 - BLUE = 0x1905 - COLOR_INDEX = 0x1900 - DEPTH_COMPONENT = 0x1902 - GREEN = 0x1904 - LUMINANCE = 0x1909 - LUMINANCE_ALPHA = 0x190A - RED = 0x1903 - RGB = 0x1907 - RGBA = 0x1908 - STENCIL_INDEX = 0x1901 - - ALPHA12 = 0x803D - ALPHA16 = 0x803E - ALPHA4 = 0x803B - ALPHA8 = 0x803C - INTENSITY = 0x8049 - INTENSITY12 = 0x804C - INTENSITY16 = 0x804D - INTENSITY4 = 0x804A - INTENSITY8 = 0x804B - LUMINANCE12 = 0x8041 - LUMINANCE12_ALPHA12 = 0x8047 - LUMINANCE12_ALPHA4 = 0x8046 - LUMINANCE16 = 0x8042 - LUMINANCE16_ALPHA16 = 0x8048 - LUMINANCE4 = 0x803F - LUMINANCE4_ALPHA4 = 0x8043 - LUMINANCE6_ALPHA2 = 0x8044 - LUMINANCE8 = 0x8040 - LUMINANCE8_ALPHA8 = 0x8045 - R3_G3_B2 = 0x2A10 - RGB10 = 0x8052 - RGB10_A2 = 0x8059 - RGB12 = 0x8053 - RGB16 = 0x8054 - RGB4 = 0x804F - RGB5 = 0x8050 - RGB5_A1 = 0x8057 - RGB8 = 0x8051 - RGBA12 = 0x805A - RGBA16 = 0x805B - RGBA2 = 0x8055 - RGBA4 = 0x8056 - RGBA8 = 0x8058 - - BITMAP = 0x1A00 - - LINES = 0x0001 - LINE_LOOP = 0x0002 - LINE_STRIP = 0x0003 - POINTS = 0x0000 - POLYGON = 0x0009 - QUADS = 0x0007 - QUAD_STRIP = 0x0008 - TRIANGLES = 0x0004 - TRIANGLE_FAN = 0x0006 - TRIANGLE_STRIP = 0x0005 - - FEEDBACK = 0x1C01 - RENDER = 0x1C00 - SELECT = 0x1C02 - - FLAT = 0x1D00 - SMOOTH = 0x1D01 - - DECR = 0x1E03 - INCR = 0x1E02 - KEEP = 0x1E00 - - EXTENSIONS = 0x1F03 - RENDERER = 0x1F01 - VENDOR = 0x1F00 - VERSION = 0x1F02 - - S = 0x2000 - T = 0x2001 - R = 0x2002 - Q = 0x2003 - - DECAL = 0x2101 - - TEXTURE_ENV_COLOR = 0x2201 - TEXTURE_ENV_MODE = 0x2200 - - TEXTURE_ENV = 0x2300 - - EYE_LINEAR = 0x2400 - OBJECT_LINEAR = 0x2401 - SPHERE_MAP = 0x2402 - - EYE_PLANE = 0x2502 - OBJECT_PLANE = 0x2501 - TEXTURE_GEN_MODE = 0x2500 - - NEAREST = 0x2600 - - LINEAR_MIPMAP_LINEAR = 0x2703 - LINEAR_MIPMAP_NEAREST = 0x2701 - NEAREST_MIPMAP_LINEAR = 0x2702 - NEAREST_MIPMAP_NEAREST = 0x2700 - - PROXY_TEXTURE_1D = 0x8063 - PROXY_TEXTURE_2D = 0x8064 - - CLAMP = 0x2900 - REPEAT = 0x2901 -) - -// https://www.opengl.org/sdk/docs/man2/xhtml/glViewport.xml -func (gl *GL) Viewport(x, y, width, height int) { - C.gl1_1_glViewport(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// DepthRange specifies the mapping of depth values from normalized device -// coordinates to window coordinates. -// -// Parameter nearVal specifies the mapping of the near clipping plane to window -// coordinates (defaults to 0), while farVal specifies the mapping of the far -// clipping plane to window coordinates (defaults to 1). -// -// After clipping and division by w, depth coordinates range from -1 to 1, -// corresponding to the near and far clipping planes. DepthRange specifies a -// linear mapping of the normalized depth coordinates in this range to window -// depth coordinates. Regardless of the actual depth buffer implementation, -// window coordinate depth values are treated as though they range from 0 through 1 -// (like color components). Thus, the values accepted by DepthRange are both -// clamped to this range before they are accepted. -// -// The default setting of (0, 1) maps the near plane to 0 and the far plane to 1. -// With this mapping, the depth buffer range is fully utilized. -// -// It is not necessary that nearVal be less than farVal. Reverse mappings such as -// nearVal 1, and farVal 0 are acceptable. -// -// GL.INVALID_OPERATION is generated if DepthRange is executed between the -// execution of Begin and the corresponding execution of End. -func (gl *GL) DepthRange(nearVal, farVal float64) { - C.gl1_1_glDepthRange(gl.funcs, C.GLdouble(nearVal), C.GLdouble(farVal)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIsEnabled.xml -func (gl *GL) IsEnabled(cap glbase.Enum) bool { - glresult := C.gl1_1_glIsEnabled(gl.funcs, C.GLenum(cap)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexLevelParameteriv.xml -func (gl *GL) GetTexLevelParameteriv(target glbase.Enum, level int, pname glbase.Enum, params []int32) { - C.gl1_1_glGetTexLevelParameteriv(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexLevelParameterfv.xml -func (gl *GL) GetTexLevelParameterfv(target glbase.Enum, level int, pname glbase.Enum, params []float32) { - C.gl1_1_glGetTexLevelParameterfv(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexParameteriv.xml -func (gl *GL) GetTexParameteriv(target, pname glbase.Enum, params []int32) { - C.gl1_1_glGetTexParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexParameterfv.xml -func (gl *GL) GetTexParameterfv(target, pname glbase.Enum, params []float32) { - C.gl1_1_glGetTexParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexImage.xml -func (gl *GL) GetTexImage(target glbase.Enum, level int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl1_1_glGetTexImage(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetIntegerv.xml -func (gl *GL) GetIntegerv(pname glbase.Enum, params []int32) { - C.gl1_1_glGetIntegerv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetFloatv.xml -func (gl *GL) GetFloatv(pname glbase.Enum, params []float32) { - C.gl1_1_glGetFloatv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetError.xml -func (gl *GL) GetError() glbase.Enum { - glresult := C.gl1_1_glGetError(gl.funcs) - return glbase.Enum(glresult) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetDoublev.xml -func (gl *GL) GetDoublev(pname glbase.Enum, params []float64) { - C.gl1_1_glGetDoublev(gl.funcs, C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetBooleanv.xml -func (gl *GL) GetBooleanv(pname glbase.Enum, params []bool) { - C.gl1_1_glGetBooleanv(gl.funcs, C.GLenum(pname), (*C.GLboolean)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glReadPixels.xml -func (gl *GL) ReadPixels(x, y, width, height int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl1_1_glReadPixels(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glReadBuffer.xml -func (gl *GL) ReadBuffer(mode glbase.Enum) { - C.gl1_1_glReadBuffer(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPixelStorei.xml -func (gl *GL) PixelStorei(pname glbase.Enum, param int32) { - C.gl1_1_glPixelStorei(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPixelStoref.xml -func (gl *GL) PixelStoref(pname glbase.Enum, param float32) { - C.gl1_1_glPixelStoref(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDepthFunc.xml -func (gl *GL) DepthFunc(glfunc glbase.Enum) { - C.gl1_1_glDepthFunc(gl.funcs, C.GLenum(glfunc)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glStencilOp.xml -func (gl *GL) StencilOp(fail, zfail, zpass glbase.Enum) { - C.gl1_1_glStencilOp(gl.funcs, C.GLenum(fail), C.GLenum(zfail), C.GLenum(zpass)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glStencilFunc.xml -func (gl *GL) StencilFunc(glfunc glbase.Enum, ref int32, mask uint32) { - C.gl1_1_glStencilFunc(gl.funcs, C.GLenum(glfunc), C.GLint(ref), C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLogicOp.xml -func (gl *GL) LogicOp(opcode glbase.Enum) { - C.gl1_1_glLogicOp(gl.funcs, C.GLenum(opcode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glBlendFunc.xml -func (gl *GL) BlendFunc(sfactor, dfactor glbase.Enum) { - C.gl1_1_glBlendFunc(gl.funcs, C.GLenum(sfactor), C.GLenum(dfactor)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFlush.xml -func (gl *GL) Flush() { - C.gl1_1_glFlush(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFinish.xml -func (gl *GL) Finish() { - C.gl1_1_glFinish(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEnable.xml -func (gl *GL) Enable(cap glbase.Enum) { - C.gl1_1_glEnable(gl.funcs, C.GLenum(cap)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDisable.xml -func (gl *GL) Disable(cap glbase.Enum) { - C.gl1_1_glDisable(gl.funcs, C.GLenum(cap)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDepthMask.xml -func (gl *GL) DepthMask(flag bool) { - C.gl1_1_glDepthMask(gl.funcs, *(*C.GLboolean)(unsafe.Pointer(&flag))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColorMask.xml -func (gl *GL) ColorMask(red, green, blue, alpha bool) { - C.gl1_1_glColorMask(gl.funcs, *(*C.GLboolean)(unsafe.Pointer(&red)), *(*C.GLboolean)(unsafe.Pointer(&green)), *(*C.GLboolean)(unsafe.Pointer(&blue)), *(*C.GLboolean)(unsafe.Pointer(&alpha))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glStencilMask.xml -func (gl *GL) StencilMask(mask uint32) { - C.gl1_1_glStencilMask(gl.funcs, C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glClearDepth.xml -func (gl *GL) ClearDepth(depth float64) { - C.gl1_1_glClearDepth(gl.funcs, C.GLdouble(depth)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glClearStencil.xml -func (gl *GL) ClearStencil(s int32) { - C.gl1_1_glClearStencil(gl.funcs, C.GLint(s)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glClearColor.xml -func (gl *GL) ClearColor(red, green, blue, alpha float32) { - C.gl1_1_glClearColor(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glClear.xml -func (gl *GL) Clear(mask glbase.Bitfield) { - C.gl1_1_glClear(gl.funcs, C.GLbitfield(mask)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDrawBuffer.xml -func (gl *GL) DrawBuffer(mode glbase.Enum) { - C.gl1_1_glDrawBuffer(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexImage2D.xml -func (gl *GL) TexImage2D(target glbase.Enum, level int, internalFormat int32, width, height, border int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl1_1_glTexImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLint(border), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexImage1D.xml -func (gl *GL) TexImage1D(target glbase.Enum, level int, internalFormat int32, width, border int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl1_1_glTexImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(internalFormat), C.GLsizei(width), C.GLint(border), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexParameteriv.xml -func (gl *GL) TexParameteriv(target, pname glbase.Enum, params []int32) { - C.gl1_1_glTexParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexParameteri.xml -func (gl *GL) TexParameteri(target, pname glbase.Enum, param int32) { - C.gl1_1_glTexParameteri(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexParameterfv.xml -func (gl *GL) TexParameterfv(target, pname glbase.Enum, params []float32) { - C.gl1_1_glTexParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexParameterf.xml -func (gl *GL) TexParameterf(target, pname glbase.Enum, param float32) { - C.gl1_1_glTexParameterf(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glScissor.xml -func (gl *GL) Scissor(x, y, width, height int) { - C.gl1_1_glScissor(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPolygonMode.xml -func (gl *GL) PolygonMode(face, mode glbase.Enum) { - C.gl1_1_glPolygonMode(gl.funcs, C.GLenum(face), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPointSize.xml -func (gl *GL) PointSize(size float32) { - C.gl1_1_glPointSize(gl.funcs, C.GLfloat(size)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLineWidth.xml -func (gl *GL) LineWidth(width float32) { - C.gl1_1_glLineWidth(gl.funcs, C.GLfloat(width)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glHint.xml -func (gl *GL) Hint(target, mode glbase.Enum) { - C.gl1_1_glHint(gl.funcs, C.GLenum(target), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFrontFace.xml -func (gl *GL) FrontFace(mode glbase.Enum) { - C.gl1_1_glFrontFace(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCullFace.xml -func (gl *GL) CullFace(mode glbase.Enum) { - C.gl1_1_glCullFace(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexubv.xml -func (gl *GL) Indexubv(c []uint8) { - C.gl1_1_glIndexubv(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexub.xml -func (gl *GL) Indexub(c uint8) { - C.gl1_1_glIndexub(gl.funcs, C.GLubyte(c)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIsTexture.xml -func (gl *GL) IsTexture(texture glbase.Texture) bool { - glresult := C.gl1_1_glIsTexture(gl.funcs, C.GLuint(texture)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// GenTextures returns n texture names in textures. There is no guarantee -// that the names form a contiguous set of integers; however, it is -// guaranteed that none of the returned names was in use immediately before -// the call to GenTextures. -// -// The generated textures have no dimensionality; they assume the -// dimensionality of the texture target to which they are first bound (see -// BindTexture). -// -// Texture names returned by a call to GenTextures are not returned by -// subsequent calls, unless they are first deleted with DeleteTextures. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// GenTextures is available in GL version 2.0 or greater. -func (gl *GL) GenTextures(n int) []glbase.Texture { - if n == 0 { - return nil - } - textures := make([]glbase.Texture, n) - C.gl1_1_glGenTextures(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0]))) - return textures -} - -// DeleteTextures deletes the textures objects whose names are stored -// in the textures slice. After a texture is deleted, it has no contents or -// dimensionality, and its name is free for reuse (for example by -// GenTextures). If a texture that is currently bound is deleted, the binding -// reverts to 0 (the default texture). -// -// DeleteTextures silently ignores 0's and names that do not correspond to -// existing textures. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// DeleteTextures is available in GL version 2.0 or greater. -func (gl *GL) DeleteTextures(textures []glbase.Texture) { - n := len(textures) - if n == 0 { - return - } - C.gl1_1_glDeleteTextures(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glBindTexture.xml -func (gl *GL) BindTexture(target glbase.Enum, texture glbase.Texture) { - C.gl1_1_glBindTexture(gl.funcs, C.GLenum(target), C.GLuint(texture)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexSubImage2D.xml -func (gl *GL) TexSubImage2D(target glbase.Enum, level, xoffset, yoffset, width, height int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl1_1_glTexSubImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexSubImage1D.xml -func (gl *GL) TexSubImage1D(target glbase.Enum, level, xoffset, width int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl1_1_glTexSubImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLsizei(width), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyTexSubImage2D.xml -func (gl *GL) CopyTexSubImage2D(target glbase.Enum, level, xoffset, yoffset, x, y, width, height int) { - C.gl1_1_glCopyTexSubImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyTexSubImage1D.xml -func (gl *GL) CopyTexSubImage1D(target glbase.Enum, level, xoffset, x, y, width int) { - C.gl1_1_glCopyTexSubImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(x), C.GLint(y), C.GLsizei(width)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyTexImage2D.xml -func (gl *GL) CopyTexImage2D(target glbase.Enum, level int, internalFormat glbase.Enum, x, y, width, height, border int) { - C.gl1_1_glCopyTexImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height), C.GLint(border)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyTexImage1D.xml -func (gl *GL) CopyTexImage1D(target glbase.Enum, level int, internalFormat glbase.Enum, x, y, width, border int) { - C.gl1_1_glCopyTexImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLint(border)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPolygonOffset.xml -func (gl *GL) PolygonOffset(factor, units float32) { - C.gl1_1_glPolygonOffset(gl.funcs, C.GLfloat(factor), C.GLfloat(units)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDrawElements.xml -func (gl *GL) DrawElements(mode glbase.Enum, count int, gltype glbase.Enum, indices interface{}) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl1_1_glDrawElements(gl.funcs, C.GLenum(mode), C.GLsizei(count), C.GLenum(gltype), indices_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDrawArrays.xml -func (gl *GL) DrawArrays(mode glbase.Enum, first, count int) { - C.gl1_1_glDrawArrays(gl.funcs, C.GLenum(mode), C.GLint(first), C.GLsizei(count)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTranslatef.xml -func (gl *GL) Translatef(x, y, z float32) { - C.gl1_1_glTranslatef(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTranslated.xml -func (gl *GL) Translated(x, y, z float64) { - C.gl1_1_glTranslated(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glScalef.xml -func (gl *GL) Scalef(x, y, z float32) { - C.gl1_1_glScalef(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glScaled.xml -func (gl *GL) Scaled(x, y, z float64) { - C.gl1_1_glScaled(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRotatef.xml -func (gl *GL) Rotatef(angle, x, y, z float32) { - C.gl1_1_glRotatef(gl.funcs, C.GLfloat(angle), C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRotated.xml -func (gl *GL) Rotated(angle, x, y, z float64) { - C.gl1_1_glRotated(gl.funcs, C.GLdouble(angle), C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPushMatrix.xml -func (gl *GL) PushMatrix() { - C.gl1_1_glPushMatrix(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPopMatrix.xml -func (gl *GL) PopMatrix() { - C.gl1_1_glPopMatrix(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glOrtho.xml -func (gl *GL) Ortho(left, right, bottom, top, zNear, zFar float64) { - C.gl1_1_glOrtho(gl.funcs, C.GLdouble(left), C.GLdouble(right), C.GLdouble(bottom), C.GLdouble(top), C.GLdouble(zNear), C.GLdouble(zFar)) -} - -// MultMatrixd multiplies the current matrix with the provided matrix. -// -// The m parameter must hold 16 consecutive elements of a 4x4 column-major matrix. -// -// The current matrix is determined by the current matrix mode (see -// MatrixMode). It is either the projection matrix, modelview matrix, or the -// texture matrix. -// -// For example, if the current matrix is C and the coordinates to be transformed -// are v = (v[0], v[1], v[2], v[3]), then the current transformation is C × v, or -// -// c[0] c[4] c[8] c[12] v[0] -// c[1] c[5] c[9] c[13] v[1] -// c[2] c[6] c[10] c[14] X v[2] -// c[3] c[7] c[11] c[15] v[3] -// -// Calling MultMatrix with an argument of m = m[0], m[1], ..., m[15] -// replaces the current transformation with (C X M) x v, or -// -// c[0] c[4] c[8] c[12] m[0] m[4] m[8] m[12] v[0] -// c[1] c[5] c[9] c[13] m[1] m[5] m[9] m[13] v[1] -// c[2] c[6] c[10] c[14] X m[2] m[6] m[10] m[14] X v[2] -// c[3] c[7] c[11] c[15] m[3] m[7] m[11] m[15] v[3] -// -// Where 'X' denotes matrix multiplication, and v is represented as a 4x1 matrix. -// -// While the elements of the matrix may be specified with single or double -// precision, the GL may store or operate on these values in less-than-single -// precision. -// -// In many computer languages, 4×4 arrays are represented in row-major -// order. The transformations just described represent these matrices in -// column-major order. The order of the multiplication is important. For -// example, if the current transformation is a rotation, and MultMatrix is -// called with a translation matrix, the translation is done directly on the -// coordinates to be transformed, while the rotation is done on the results -// of that translation. -// -// GL.INVALID_OPERATION is generated if MultMatrix is executed between the -// execution of Begin and the corresponding execution of End. -func (gl *GL) MultMatrixd(m []float64) { - if len(m) != 16 { - panic("parameter m must have length 16 for the 4x4 matrix") - } - C.gl1_1_glMultMatrixd(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&m[0]))) -} - -// MultMatrixf multiplies the current matrix with the provided matrix. -// -// The m parameter must hold 16 consecutive elements of a 4x4 column-major matrix. -// -// The current matrix is determined by the current matrix mode (see -// MatrixMode). It is either the projection matrix, modelview matrix, or the -// texture matrix. -// -// For example, if the current matrix is C and the coordinates to be transformed -// are v = (v[0], v[1], v[2], v[3]), then the current transformation is C × v, or -// -// c[0] c[4] c[8] c[12] v[0] -// c[1] c[5] c[9] c[13] v[1] -// c[2] c[6] c[10] c[14] X v[2] -// c[3] c[7] c[11] c[15] v[3] -// -// Calling MultMatrix with an argument of m = m[0], m[1], ..., m[15] -// replaces the current transformation with (C X M) x v, or -// -// c[0] c[4] c[8] c[12] m[0] m[4] m[8] m[12] v[0] -// c[1] c[5] c[9] c[13] m[1] m[5] m[9] m[13] v[1] -// c[2] c[6] c[10] c[14] X m[2] m[6] m[10] m[14] X v[2] -// c[3] c[7] c[11] c[15] m[3] m[7] m[11] m[15] v[3] -// -// Where 'X' denotes matrix multiplication, and v is represented as a 4x1 matrix. -// -// While the elements of the matrix may be specified with single or double -// precision, the GL may store or operate on these values in less-than-single -// precision. -// -// In many computer languages, 4×4 arrays are represented in row-major -// order. The transformations just described represent these matrices in -// column-major order. The order of the multiplication is important. For -// example, if the current transformation is a rotation, and MultMatrix is -// called with a translation matrix, the translation is done directly on the -// coordinates to be transformed, while the rotation is done on the results -// of that translation. -// -// GL.INVALID_OPERATION is generated if MultMatrix is executed between the -// execution of Begin and the corresponding execution of End. -func (gl *GL) MultMatrixf(m []float32) { - if len(m) != 16 { - panic("parameter m must have length 16 for the 4x4 matrix") - } - C.gl1_1_glMultMatrixf(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMatrixMode.xml -func (gl *GL) MatrixMode(mode glbase.Enum) { - C.gl1_1_glMatrixMode(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLoadMatrixd.xml -func (gl *GL) LoadMatrixd(m []float64) { - C.gl1_1_glLoadMatrixd(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLoadMatrixf.xml -func (gl *GL) LoadMatrixf(m []float32) { - C.gl1_1_glLoadMatrixf(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLoadIdentity.xml -func (gl *GL) LoadIdentity() { - C.gl1_1_glLoadIdentity(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFrustum.xml -func (gl *GL) Frustum(left, right, bottom, top, zNear, zFar float64) { - C.gl1_1_glFrustum(gl.funcs, C.GLdouble(left), C.GLdouble(right), C.GLdouble(bottom), C.GLdouble(top), C.GLdouble(zNear), C.GLdouble(zFar)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIsList.xml -func (gl *GL) IsList(list uint32) bool { - glresult := C.gl1_1_glIsList(gl.funcs, C.GLuint(list)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexGeniv.xml -func (gl *GL) GetTexGeniv(coord, pname glbase.Enum, params []int32) { - C.gl1_1_glGetTexGeniv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexGenfv.xml -func (gl *GL) GetTexGenfv(coord, pname glbase.Enum, params []float32) { - C.gl1_1_glGetTexGenfv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexGendv.xml -func (gl *GL) GetTexGendv(coord, pname glbase.Enum, params []float64) { - C.gl1_1_glGetTexGendv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexEnviv.xml -func (gl *GL) GetTexEnviv(target, pname glbase.Enum, params []int32) { - C.gl1_1_glGetTexEnviv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexEnvfv.xml -func (gl *GL) GetTexEnvfv(target, pname glbase.Enum, params []float32) { - C.gl1_1_glGetTexEnvfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetPolygonStipple.xml -func (gl *GL) GetPolygonStipple(mask []uint8) { - C.gl1_1_glGetPolygonStipple(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&mask[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetPixelMapusv.xml -func (gl *GL) GetPixelMapusv(glmap glbase.Enum, values []uint16) { - C.gl1_1_glGetPixelMapusv(gl.funcs, C.GLenum(glmap), (*C.GLushort)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetPixelMapuiv.xml -func (gl *GL) GetPixelMapuiv(glmap glbase.Enum, values []uint32) { - C.gl1_1_glGetPixelMapuiv(gl.funcs, C.GLenum(glmap), (*C.GLuint)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetPixelMapfv.xml -func (gl *GL) GetPixelMapfv(glmap glbase.Enum, values []float32) { - C.gl1_1_glGetPixelMapfv(gl.funcs, C.GLenum(glmap), (*C.GLfloat)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetMaterialiv.xml -func (gl *GL) GetMaterialiv(face, pname glbase.Enum, params []int32) { - C.gl1_1_glGetMaterialiv(gl.funcs, C.GLenum(face), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetMaterialfv.xml -func (gl *GL) GetMaterialfv(face, pname glbase.Enum, params []float32) { - C.gl1_1_glGetMaterialfv(gl.funcs, C.GLenum(face), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetMapiv.xml -func (gl *GL) GetMapiv(target, query glbase.Enum, v []int32) { - C.gl1_1_glGetMapiv(gl.funcs, C.GLenum(target), C.GLenum(query), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetMapfv.xml -func (gl *GL) GetMapfv(target, query glbase.Enum, v []float32) { - C.gl1_1_glGetMapfv(gl.funcs, C.GLenum(target), C.GLenum(query), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetMapdv.xml -func (gl *GL) GetMapdv(target, query glbase.Enum, v []float64) { - C.gl1_1_glGetMapdv(gl.funcs, C.GLenum(target), C.GLenum(query), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetLightiv.xml -func (gl *GL) GetLightiv(light, pname glbase.Enum, params []int32) { - C.gl1_1_glGetLightiv(gl.funcs, C.GLenum(light), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetLightfv.xml -func (gl *GL) GetLightfv(light, pname glbase.Enum, params []float32) { - C.gl1_1_glGetLightfv(gl.funcs, C.GLenum(light), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetClipPlane.xml -func (gl *GL) GetClipPlane(plane glbase.Enum, equation []float64) { - C.gl1_1_glGetClipPlane(gl.funcs, C.GLenum(plane), (*C.GLdouble)(unsafe.Pointer(&equation[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDrawPixels.xml -func (gl *GL) DrawPixels(width, height int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl1_1_glDrawPixels(gl.funcs, C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyPixels.xml -func (gl *GL) CopyPixels(x, y, width, height int, gltype glbase.Enum) { - C.gl1_1_glCopyPixels(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height), C.GLenum(gltype)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPixelMapusv.xml -func (gl *GL) PixelMapusv(glmap glbase.Enum, mapsize int32, values []uint16) { - C.gl1_1_glPixelMapusv(gl.funcs, C.GLenum(glmap), C.GLint(mapsize), (*C.GLushort)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPixelMapuiv.xml -func (gl *GL) PixelMapuiv(glmap glbase.Enum, mapsize int32, values []uint32) { - C.gl1_1_glPixelMapuiv(gl.funcs, C.GLenum(glmap), C.GLint(mapsize), (*C.GLuint)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPixelMapfv.xml -func (gl *GL) PixelMapfv(glmap glbase.Enum, mapsize int32, values []float32) { - C.gl1_1_glPixelMapfv(gl.funcs, C.GLenum(glmap), C.GLint(mapsize), (*C.GLfloat)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPixelTransferi.xml -func (gl *GL) PixelTransferi(pname glbase.Enum, param int32) { - C.gl1_1_glPixelTransferi(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPixelTransferf.xml -func (gl *GL) PixelTransferf(pname glbase.Enum, param float32) { - C.gl1_1_glPixelTransferf(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPixelZoom.xml -func (gl *GL) PixelZoom(xfactor, yfactor float32) { - C.gl1_1_glPixelZoom(gl.funcs, C.GLfloat(xfactor), C.GLfloat(yfactor)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glAlphaFunc.xml -func (gl *GL) AlphaFunc(glfunc glbase.Enum, ref float32) { - C.gl1_1_glAlphaFunc(gl.funcs, C.GLenum(glfunc), C.GLfloat(ref)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalPoint2.xml -func (gl *GL) EvalPoint2(i, j int32) { - C.gl1_1_glEvalPoint2(gl.funcs, C.GLint(i), C.GLint(j)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalMesh2.xml -func (gl *GL) EvalMesh2(mode glbase.Enum, i1, i2, j1, j2 int32) { - C.gl1_1_glEvalMesh2(gl.funcs, C.GLenum(mode), C.GLint(i1), C.GLint(i2), C.GLint(j1), C.GLint(j2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalPoint1.xml -func (gl *GL) EvalPoint1(i int32) { - C.gl1_1_glEvalPoint1(gl.funcs, C.GLint(i)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalMesh1.xml -func (gl *GL) EvalMesh1(mode glbase.Enum, i1, i2 int32) { - C.gl1_1_glEvalMesh1(gl.funcs, C.GLenum(mode), C.GLint(i1), C.GLint(i2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalCoord2fv.xml -func (gl *GL) EvalCoord2fv(u []float32) { - if len(u) != 2 { - panic("parameter u has incorrect length") - } - C.gl1_1_glEvalCoord2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&u[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalCoord2f.xml -func (gl *GL) EvalCoord2f(u, v float32) { - C.gl1_1_glEvalCoord2f(gl.funcs, C.GLfloat(u), C.GLfloat(v)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalCoord2dv.xml -func (gl *GL) EvalCoord2dv(u []float64) { - if len(u) != 2 { - panic("parameter u has incorrect length") - } - C.gl1_1_glEvalCoord2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&u[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalCoord2d.xml -func (gl *GL) EvalCoord2d(u, v float64) { - C.gl1_1_glEvalCoord2d(gl.funcs, C.GLdouble(u), C.GLdouble(v)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalCoord1fv.xml -func (gl *GL) EvalCoord1fv(u []float32) { - C.gl1_1_glEvalCoord1fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&u[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalCoord1f.xml -func (gl *GL) EvalCoord1f(u float32) { - C.gl1_1_glEvalCoord1f(gl.funcs, C.GLfloat(u)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalCoord1dv.xml -func (gl *GL) EvalCoord1dv(u []float64) { - C.gl1_1_glEvalCoord1dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&u[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalCoord1d.xml -func (gl *GL) EvalCoord1d(u float64) { - C.gl1_1_glEvalCoord1d(gl.funcs, C.GLdouble(u)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMapGrid2f.xml -func (gl *GL) MapGrid2f(un int32, u1, u2 float32, vn int32, v1, v2 float32) { - C.gl1_1_glMapGrid2f(gl.funcs, C.GLint(un), C.GLfloat(u1), C.GLfloat(u2), C.GLint(vn), C.GLfloat(v1), C.GLfloat(v2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMapGrid2d.xml -func (gl *GL) MapGrid2d(un int32, u1, u2 float64, vn int32, v1, v2 float64) { - C.gl1_1_glMapGrid2d(gl.funcs, C.GLint(un), C.GLdouble(u1), C.GLdouble(u2), C.GLint(vn), C.GLdouble(v1), C.GLdouble(v2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMapGrid1f.xml -func (gl *GL) MapGrid1f(un int32, u1, u2 float32) { - C.gl1_1_glMapGrid1f(gl.funcs, C.GLint(un), C.GLfloat(u1), C.GLfloat(u2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMapGrid1d.xml -func (gl *GL) MapGrid1d(un int32, u1, u2 float64) { - C.gl1_1_glMapGrid1d(gl.funcs, C.GLint(un), C.GLdouble(u1), C.GLdouble(u2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMap2f.xml -func (gl *GL) Map2f(target glbase.Enum, u1, u2 float32, ustride, uorder int32, v1, v2 float32, vstride, vorder int32, points []float32) { - C.gl1_1_glMap2f(gl.funcs, C.GLenum(target), C.GLfloat(u1), C.GLfloat(u2), C.GLint(ustride), C.GLint(uorder), C.GLfloat(v1), C.GLfloat(v2), C.GLint(vstride), C.GLint(vorder), (*C.GLfloat)(unsafe.Pointer(&points[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMap2d.xml -func (gl *GL) Map2d(target glbase.Enum, u1, u2 float64, ustride, uorder int32, v1, v2 float64, vstride, vorder int32, points []float64) { - C.gl1_1_glMap2d(gl.funcs, C.GLenum(target), C.GLdouble(u1), C.GLdouble(u2), C.GLint(ustride), C.GLint(uorder), C.GLdouble(v1), C.GLdouble(v2), C.GLint(vstride), C.GLint(vorder), (*C.GLdouble)(unsafe.Pointer(&points[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMap1f.xml -func (gl *GL) Map1f(target glbase.Enum, u1, u2 float32, stride, order int, points []float32) { - C.gl1_1_glMap1f(gl.funcs, C.GLenum(target), C.GLfloat(u1), C.GLfloat(u2), C.GLint(stride), C.GLint(order), (*C.GLfloat)(unsafe.Pointer(&points[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMap1d.xml -func (gl *GL) Map1d(target glbase.Enum, u1, u2 float64, stride, order int, points []float64) { - C.gl1_1_glMap1d(gl.funcs, C.GLenum(target), C.GLdouble(u1), C.GLdouble(u2), C.GLint(stride), C.GLint(order), (*C.GLdouble)(unsafe.Pointer(&points[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPushAttrib.xml -func (gl *GL) PushAttrib(mask glbase.Bitfield) { - C.gl1_1_glPushAttrib(gl.funcs, C.GLbitfield(mask)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPopAttrib.xml -func (gl *GL) PopAttrib() { - C.gl1_1_glPopAttrib(gl.funcs) -} - -// Accum executes an operation on the accumulation buffer. -// -// Parameter op defines the accumulation buffer operation (GL.ACCUM, GL.LOAD, -// GL.ADD, GL.MULT, or GL.RETURN) and specifies how the value parameter is -// used. -// -// The accumulation buffer is an extended-range color buffer. Images are not -// rendered into it. Rather, images rendered into one of the color buffers -// are added to the contents of the accumulation buffer after rendering. -// Effects such as antialiasing (of points, lines, and polygons), motion -// blur, and depth of field can be created by accumulating images generated -// with different transformation matrices. -// -// Each pixel in the accumulation buffer consists of red, green, blue, and -// alpha values. The number of bits per component in the accumulation buffer -// depends on the implementation. You can examine this number by calling -// GetIntegerv four times, with arguments GL.ACCUM_RED_BITS, -// GL.ACCUM_GREEN_BITS, GL.ACCUM_BLUE_BITS, and GL.ACCUM_ALPHA_BITS. -// Regardless of the number of bits per component, the range of values stored -// by each component is (-1, 1). The accumulation buffer pixels are mapped -// one-to-one with frame buffer pixels. -// -// All accumulation buffer operations are limited to the area of the current -// scissor box and applied identically to the red, green, blue, and alpha -// components of each pixel. If a Accum operation results in a value outside -// the range (-1, 1), the contents of an accumulation buffer pixel component -// are undefined. -// -// The operations are as follows: -// -// GL.ACCUM -// Obtains R, G, B, and A values from the buffer currently selected for -// reading (see ReadBuffer). Each component value is divided by 2 n - -// 1 , where n is the number of bits allocated to each color component -// in the currently selected buffer. The result is a floating-point -// value in the range 0 1 , which is multiplied by value and added to -// the corresponding pixel component in the accumulation buffer, -// thereby updating the accumulation buffer. -// -// GL.LOAD -// Similar to GL.ACCUM, except that the current value in the -// accumulation buffer is not used in the calculation of the new value. -// That is, the R, G, B, and A values from the currently selected -// buffer are divided by 2 n - 1 , multiplied by value, and then stored -// in the corresponding accumulation buffer cell, overwriting the -// current value. -// -// GL.ADD -// Adds value to each R, G, B, and A in the accumulation buffer. -// -// GL.MULT -// Multiplies each R, G, B, and A in the accumulation buffer by value -// and returns the scaled component to its corresponding accumulation -// buffer location. -// -// GL.RETURN -// Transfers accumulation buffer values to the color buffer or buffers -// currently selected for writing. Each R, G, B, and A component is -// multiplied by value, then multiplied by 2 n - 1 , clamped to the -// range 0 2 n - 1 , and stored in the corresponding display buffer -// cell. The only fragment operations that are applied to this transfer -// are pixel ownership, scissor, dithering, and color writemasks. -// -// To clear the accumulation buffer, call ClearAccum with R, G, B, and A -// values to set it to, then call Clear with the accumulation buffer -// enabled. -// -// Error GL.INVALID_ENUM is generated if op is not an accepted value. -// GL.INVALID_OPERATION is generated if there is no accumulation buffer. -// GL.INVALID_OPERATION is generated if Accum is executed between the -// execution of Begin and the corresponding execution of End. -func (gl *GL) Accum(op glbase.Enum, value float32) { - C.gl1_1_glAccum(gl.funcs, C.GLenum(op), C.GLfloat(value)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexMask.xml -func (gl *GL) IndexMask(mask uint32) { - C.gl1_1_glIndexMask(gl.funcs, C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glClearIndex.xml -func (gl *GL) ClearIndex(c float32) { - C.gl1_1_glClearIndex(gl.funcs, C.GLfloat(c)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glClearAccum.xml -func (gl *GL) ClearAccum(red, green, blue, alpha float32) { - C.gl1_1_glClearAccum(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPushName.xml -func (gl *GL) PushName(name uint32) { - C.gl1_1_glPushName(gl.funcs, C.GLuint(name)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPopName.xml -func (gl *GL) PopName() { - C.gl1_1_glPopName(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPassThrough.xml -func (gl *GL) PassThrough(token float32) { - C.gl1_1_glPassThrough(gl.funcs, C.GLfloat(token)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLoadName.xml -func (gl *GL) LoadName(name uint32) { - C.gl1_1_glLoadName(gl.funcs, C.GLuint(name)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glInitNames.xml -func (gl *GL) InitNames() { - C.gl1_1_glInitNames(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRenderMode.xml -func (gl *GL) RenderMode(mode glbase.Enum) int32 { - glresult := C.gl1_1_glRenderMode(gl.funcs, C.GLenum(mode)) - return int32(glresult) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSelectBuffer.xml -func (gl *GL) SelectBuffer(size int, buffer []glbase.Buffer) { - C.gl1_1_glSelectBuffer(gl.funcs, C.GLsizei(size), (*C.GLuint)(unsafe.Pointer(&buffer[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFeedbackBuffer.xml -func (gl *GL) FeedbackBuffer(size int, gltype glbase.Enum, buffer []float32) { - C.gl1_1_glFeedbackBuffer(gl.funcs, C.GLsizei(size), C.GLenum(gltype), (*C.GLfloat)(unsafe.Pointer(&buffer[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexGeniv.xml -func (gl *GL) TexGeniv(coord, pname glbase.Enum, params []int32) { - C.gl1_1_glTexGeniv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexGeni.xml -func (gl *GL) TexGeni(coord, pname glbase.Enum, param int32) { - C.gl1_1_glTexGeni(gl.funcs, C.GLenum(coord), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexGenfv.xml -func (gl *GL) TexGenfv(coord, pname glbase.Enum, params []float32) { - C.gl1_1_glTexGenfv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexGenf.xml -func (gl *GL) TexGenf(coord, pname glbase.Enum, param float32) { - C.gl1_1_glTexGenf(gl.funcs, C.GLenum(coord), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexGendv.xml -func (gl *GL) TexGendv(coord, pname glbase.Enum, params []float64) { - C.gl1_1_glTexGendv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexGend.xml -func (gl *GL) TexGend(coord, pname glbase.Enum, param float64) { - C.gl1_1_glTexGend(gl.funcs, C.GLenum(coord), C.GLenum(pname), C.GLdouble(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexEnviv.xml -func (gl *GL) TexEnviv(target, pname glbase.Enum, params []int32) { - C.gl1_1_glTexEnviv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexEnvi.xml -func (gl *GL) TexEnvi(target, pname glbase.Enum, param int32) { - C.gl1_1_glTexEnvi(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexEnvfv.xml -func (gl *GL) TexEnvfv(target, pname glbase.Enum, params []float32) { - C.gl1_1_glTexEnvfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexEnvf.xml -func (gl *GL) TexEnvf(target, pname glbase.Enum, param float32) { - C.gl1_1_glTexEnvf(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glShadeModel.xml -func (gl *GL) ShadeModel(mode glbase.Enum) { - C.gl1_1_glShadeModel(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPolygonStipple.xml -func (gl *GL) PolygonStipple(mask []uint8) { - C.gl1_1_glPolygonStipple(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&mask[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMaterialiv.xml -func (gl *GL) Materialiv(face, pname glbase.Enum, params []int32) { - C.gl1_1_glMaterialiv(gl.funcs, C.GLenum(face), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMateriali.xml -func (gl *GL) Materiali(face, pname glbase.Enum, param int32) { - C.gl1_1_glMateriali(gl.funcs, C.GLenum(face), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMaterialfv.xml -func (gl *GL) Materialfv(face, pname glbase.Enum, params []float32) { - C.gl1_1_glMaterialfv(gl.funcs, C.GLenum(face), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMaterialf.xml -func (gl *GL) Materialf(face, pname glbase.Enum, param float32) { - C.gl1_1_glMaterialf(gl.funcs, C.GLenum(face), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLineStipple.xml -func (gl *GL) LineStipple(factor int32, pattern uint16) { - C.gl1_1_glLineStipple(gl.funcs, C.GLint(factor), C.GLushort(pattern)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLightModeliv.xml -func (gl *GL) LightModeliv(pname glbase.Enum, params []int32) { - C.gl1_1_glLightModeliv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLightModeli.xml -func (gl *GL) LightModeli(pname glbase.Enum, param int32) { - C.gl1_1_glLightModeli(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLightModelfv.xml -func (gl *GL) LightModelfv(pname glbase.Enum, params []float32) { - C.gl1_1_glLightModelfv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLightModelf.xml -func (gl *GL) LightModelf(pname glbase.Enum, param float32) { - C.gl1_1_glLightModelf(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLightiv.xml -func (gl *GL) Lightiv(light, pname glbase.Enum, params []int32) { - C.gl1_1_glLightiv(gl.funcs, C.GLenum(light), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLighti.xml -func (gl *GL) Lighti(light, pname glbase.Enum, param int32) { - C.gl1_1_glLighti(gl.funcs, C.GLenum(light), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLightfv.xml -func (gl *GL) Lightfv(light, pname glbase.Enum, params []float32) { - C.gl1_1_glLightfv(gl.funcs, C.GLenum(light), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLightf.xml -func (gl *GL) Lightf(light, pname glbase.Enum, param float32) { - C.gl1_1_glLightf(gl.funcs, C.GLenum(light), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFogiv.xml -func (gl *GL) Fogiv(pname glbase.Enum, params []int32) { - C.gl1_1_glFogiv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFogi.xml -func (gl *GL) Fogi(pname glbase.Enum, param int32) { - C.gl1_1_glFogi(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFogfv.xml -func (gl *GL) Fogfv(pname glbase.Enum, params []float32) { - C.gl1_1_glFogfv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFogf.xml -func (gl *GL) Fogf(pname glbase.Enum, param float32) { - C.gl1_1_glFogf(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColorMaterial.xml -func (gl *GL) ColorMaterial(face, mode glbase.Enum) { - C.gl1_1_glColorMaterial(gl.funcs, C.GLenum(face), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glClipPlane.xml -func (gl *GL) ClipPlane(plane glbase.Enum, equation []float64) { - C.gl1_1_glClipPlane(gl.funcs, C.GLenum(plane), (*C.GLdouble)(unsafe.Pointer(&equation[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex4sv.xml -func (gl *GL) Vertex4sv(v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_1_glVertex4sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex4s.xml -func (gl *GL) Vertex4s(x, y, z, w int16) { - C.gl1_1_glVertex4s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z), C.GLshort(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex4iv.xml -func (gl *GL) Vertex4iv(v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_1_glVertex4iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex4i.xml -func (gl *GL) Vertex4i(x, y, z, w int) { - C.gl1_1_glVertex4i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z), C.GLint(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex4fv.xml -func (gl *GL) Vertex4fv(v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_1_glVertex4fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex4f.xml -func (gl *GL) Vertex4f(x, y, z, w float32) { - C.gl1_1_glVertex4f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z), C.GLfloat(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex4dv.xml -func (gl *GL) Vertex4dv(v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_1_glVertex4dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex4d.xml -func (gl *GL) Vertex4d(x, y, z, w float64) { - C.gl1_1_glVertex4d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z), C.GLdouble(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex3sv.xml -func (gl *GL) Vertex3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_1_glVertex3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex3s.xml -func (gl *GL) Vertex3s(x, y, z int16) { - C.gl1_1_glVertex3s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex3iv.xml -func (gl *GL) Vertex3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_1_glVertex3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex3i.xml -func (gl *GL) Vertex3i(x, y, z int) { - C.gl1_1_glVertex3i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex3fv.xml -func (gl *GL) Vertex3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_1_glVertex3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex3f.xml -func (gl *GL) Vertex3f(x, y, z float32) { - C.gl1_1_glVertex3f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex3dv.xml -func (gl *GL) Vertex3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_1_glVertex3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex3d.xml -func (gl *GL) Vertex3d(x, y, z float64) { - C.gl1_1_glVertex3d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex2sv.xml -func (gl *GL) Vertex2sv(v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_1_glVertex2sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex2s.xml -func (gl *GL) Vertex2s(x, y int16) { - C.gl1_1_glVertex2s(gl.funcs, C.GLshort(x), C.GLshort(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex2iv.xml -func (gl *GL) Vertex2iv(v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_1_glVertex2iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex2i.xml -func (gl *GL) Vertex2i(x, y int) { - C.gl1_1_glVertex2i(gl.funcs, C.GLint(x), C.GLint(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex2fv.xml -func (gl *GL) Vertex2fv(v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_1_glVertex2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex2f.xml -func (gl *GL) Vertex2f(x, y float32) { - C.gl1_1_glVertex2f(gl.funcs, C.GLfloat(x), C.GLfloat(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex2dv.xml -func (gl *GL) Vertex2dv(v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_1_glVertex2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex2d.xml -func (gl *GL) Vertex2d(x, y float64) { - C.gl1_1_glVertex2d(gl.funcs, C.GLdouble(x), C.GLdouble(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord4sv.xml -func (gl *GL) TexCoord4sv(v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_1_glTexCoord4sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord4s.xml -func (gl *GL) TexCoord4s(s, t, r, q int16) { - C.gl1_1_glTexCoord4s(gl.funcs, C.GLshort(s), C.GLshort(t), C.GLshort(r), C.GLshort(q)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord4iv.xml -func (gl *GL) TexCoord4iv(v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_1_glTexCoord4iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord4i.xml -func (gl *GL) TexCoord4i(s, t, r, q int32) { - C.gl1_1_glTexCoord4i(gl.funcs, C.GLint(s), C.GLint(t), C.GLint(r), C.GLint(q)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord4fv.xml -func (gl *GL) TexCoord4fv(v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_1_glTexCoord4fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord4f.xml -func (gl *GL) TexCoord4f(s, t, r, q float32) { - C.gl1_1_glTexCoord4f(gl.funcs, C.GLfloat(s), C.GLfloat(t), C.GLfloat(r), C.GLfloat(q)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord4dv.xml -func (gl *GL) TexCoord4dv(v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_1_glTexCoord4dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord4d.xml -func (gl *GL) TexCoord4d(s, t, r, q float64) { - C.gl1_1_glTexCoord4d(gl.funcs, C.GLdouble(s), C.GLdouble(t), C.GLdouble(r), C.GLdouble(q)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord3sv.xml -func (gl *GL) TexCoord3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_1_glTexCoord3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord3s.xml -func (gl *GL) TexCoord3s(s, t, r int16) { - C.gl1_1_glTexCoord3s(gl.funcs, C.GLshort(s), C.GLshort(t), C.GLshort(r)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord3iv.xml -func (gl *GL) TexCoord3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_1_glTexCoord3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord3i.xml -func (gl *GL) TexCoord3i(s, t, r int32) { - C.gl1_1_glTexCoord3i(gl.funcs, C.GLint(s), C.GLint(t), C.GLint(r)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord3fv.xml -func (gl *GL) TexCoord3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_1_glTexCoord3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord3f.xml -func (gl *GL) TexCoord3f(s, t, r float32) { - C.gl1_1_glTexCoord3f(gl.funcs, C.GLfloat(s), C.GLfloat(t), C.GLfloat(r)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord3dv.xml -func (gl *GL) TexCoord3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_1_glTexCoord3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord3d.xml -func (gl *GL) TexCoord3d(s, t, r float64) { - C.gl1_1_glTexCoord3d(gl.funcs, C.GLdouble(s), C.GLdouble(t), C.GLdouble(r)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord2sv.xml -func (gl *GL) TexCoord2sv(v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_1_glTexCoord2sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord2s.xml -func (gl *GL) TexCoord2s(s, t int16) { - C.gl1_1_glTexCoord2s(gl.funcs, C.GLshort(s), C.GLshort(t)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord2iv.xml -func (gl *GL) TexCoord2iv(v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_1_glTexCoord2iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord2i.xml -func (gl *GL) TexCoord2i(s, t int32) { - C.gl1_1_glTexCoord2i(gl.funcs, C.GLint(s), C.GLint(t)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord2fv.xml -func (gl *GL) TexCoord2fv(v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_1_glTexCoord2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord2f.xml -func (gl *GL) TexCoord2f(s, t float32) { - C.gl1_1_glTexCoord2f(gl.funcs, C.GLfloat(s), C.GLfloat(t)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord2dv.xml -func (gl *GL) TexCoord2dv(v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_1_glTexCoord2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord2d.xml -func (gl *GL) TexCoord2d(s, t float64) { - C.gl1_1_glTexCoord2d(gl.funcs, C.GLdouble(s), C.GLdouble(t)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord1sv.xml -func (gl *GL) TexCoord1sv(v []int16) { - C.gl1_1_glTexCoord1sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord1s.xml -func (gl *GL) TexCoord1s(s int16) { - C.gl1_1_glTexCoord1s(gl.funcs, C.GLshort(s)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord1iv.xml -func (gl *GL) TexCoord1iv(v []int32) { - C.gl1_1_glTexCoord1iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord1i.xml -func (gl *GL) TexCoord1i(s int32) { - C.gl1_1_glTexCoord1i(gl.funcs, C.GLint(s)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord1fv.xml -func (gl *GL) TexCoord1fv(v []float32) { - C.gl1_1_glTexCoord1fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord1f.xml -func (gl *GL) TexCoord1f(s float32) { - C.gl1_1_glTexCoord1f(gl.funcs, C.GLfloat(s)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord1dv.xml -func (gl *GL) TexCoord1dv(v []float64) { - C.gl1_1_glTexCoord1dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord1d.xml -func (gl *GL) TexCoord1d(s float64) { - C.gl1_1_glTexCoord1d(gl.funcs, C.GLdouble(s)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRectsv.xml -func (gl *GL) Rectsv(v1, v2 []int16) { - C.gl1_1_glRectsv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v1[0])), (*C.GLshort)(unsafe.Pointer(&v2[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRects.xml -func (gl *GL) Rects(x1, y1, x2, y2 int16) { - C.gl1_1_glRects(gl.funcs, C.GLshort(x1), C.GLshort(y1), C.GLshort(x2), C.GLshort(y2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRectiv.xml -func (gl *GL) Rectiv(v1, v2 []int32) { - C.gl1_1_glRectiv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v1[0])), (*C.GLint)(unsafe.Pointer(&v2[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRecti.xml -func (gl *GL) Recti(x1, y1, x2, y2 int32) { - C.gl1_1_glRecti(gl.funcs, C.GLint(x1), C.GLint(y1), C.GLint(x2), C.GLint(y2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRectfv.xml -func (gl *GL) Rectfv(v1, v2 []float32) { - C.gl1_1_glRectfv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v1[0])), (*C.GLfloat)(unsafe.Pointer(&v2[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRectf.xml -func (gl *GL) Rectf(x1, y1, x2, y2 float32) { - C.gl1_1_glRectf(gl.funcs, C.GLfloat(x1), C.GLfloat(y1), C.GLfloat(x2), C.GLfloat(y2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRectdv.xml -func (gl *GL) Rectdv(v1, v2 []float64) { - C.gl1_1_glRectdv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v1[0])), (*C.GLdouble)(unsafe.Pointer(&v2[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRectd.xml -func (gl *GL) Rectd(x1, y1, x2, y2 float64) { - C.gl1_1_glRectd(gl.funcs, C.GLdouble(x1), C.GLdouble(y1), C.GLdouble(x2), C.GLdouble(y2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos4sv.xml -func (gl *GL) RasterPos4sv(v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_1_glRasterPos4sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos4s.xml -func (gl *GL) RasterPos4s(x, y, z, w int16) { - C.gl1_1_glRasterPos4s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z), C.GLshort(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos4iv.xml -func (gl *GL) RasterPos4iv(v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_1_glRasterPos4iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos4i.xml -func (gl *GL) RasterPos4i(x, y, z, w int) { - C.gl1_1_glRasterPos4i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z), C.GLint(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos4fv.xml -func (gl *GL) RasterPos4fv(v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_1_glRasterPos4fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos4f.xml -func (gl *GL) RasterPos4f(x, y, z, w float32) { - C.gl1_1_glRasterPos4f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z), C.GLfloat(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos4dv.xml -func (gl *GL) RasterPos4dv(v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_1_glRasterPos4dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos4d.xml -func (gl *GL) RasterPos4d(x, y, z, w float64) { - C.gl1_1_glRasterPos4d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z), C.GLdouble(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos3sv.xml -func (gl *GL) RasterPos3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_1_glRasterPos3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos3s.xml -func (gl *GL) RasterPos3s(x, y, z int16) { - C.gl1_1_glRasterPos3s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos3iv.xml -func (gl *GL) RasterPos3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_1_glRasterPos3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos3i.xml -func (gl *GL) RasterPos3i(x, y, z int) { - C.gl1_1_glRasterPos3i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos3fv.xml -func (gl *GL) RasterPos3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_1_glRasterPos3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos3f.xml -func (gl *GL) RasterPos3f(x, y, z float32) { - C.gl1_1_glRasterPos3f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos3dv.xml -func (gl *GL) RasterPos3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_1_glRasterPos3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos3d.xml -func (gl *GL) RasterPos3d(x, y, z float64) { - C.gl1_1_glRasterPos3d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos2sv.xml -func (gl *GL) RasterPos2sv(v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_1_glRasterPos2sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos2s.xml -func (gl *GL) RasterPos2s(x, y int16) { - C.gl1_1_glRasterPos2s(gl.funcs, C.GLshort(x), C.GLshort(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos2iv.xml -func (gl *GL) RasterPos2iv(v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_1_glRasterPos2iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos2i.xml -func (gl *GL) RasterPos2i(x, y int) { - C.gl1_1_glRasterPos2i(gl.funcs, C.GLint(x), C.GLint(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos2fv.xml -func (gl *GL) RasterPos2fv(v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_1_glRasterPos2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos2f.xml -func (gl *GL) RasterPos2f(x, y float32) { - C.gl1_1_glRasterPos2f(gl.funcs, C.GLfloat(x), C.GLfloat(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos2dv.xml -func (gl *GL) RasterPos2dv(v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_1_glRasterPos2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos2d.xml -func (gl *GL) RasterPos2d(x, y float64) { - C.gl1_1_glRasterPos2d(gl.funcs, C.GLdouble(x), C.GLdouble(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3sv.xml -func (gl *GL) Normal3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_1_glNormal3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3s.xml -func (gl *GL) Normal3s(nx, ny, nz int16) { - C.gl1_1_glNormal3s(gl.funcs, C.GLshort(nx), C.GLshort(ny), C.GLshort(nz)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3iv.xml -func (gl *GL) Normal3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_1_glNormal3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3i.xml -func (gl *GL) Normal3i(nx, ny, nz int32) { - C.gl1_1_glNormal3i(gl.funcs, C.GLint(nx), C.GLint(ny), C.GLint(nz)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3fv.xml -func (gl *GL) Normal3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_1_glNormal3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3f.xml -func (gl *GL) Normal3f(nx, ny, nz float32) { - C.gl1_1_glNormal3f(gl.funcs, C.GLfloat(nx), C.GLfloat(ny), C.GLfloat(nz)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3dv.xml -func (gl *GL) Normal3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_1_glNormal3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3d.xml -func (gl *GL) Normal3d(nx, ny, nz float64) { - C.gl1_1_glNormal3d(gl.funcs, C.GLdouble(nx), C.GLdouble(ny), C.GLdouble(nz)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3bv.xml -func (gl *GL) Normal3bv(v []byte) { - C.gl1_1_glNormal3bv(gl.funcs, (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3b.xml -func (gl *GL) Normal3b(nx, ny, nz byte) { - C.gl1_1_glNormal3b(gl.funcs, C.GLbyte(nx), C.GLbyte(ny), C.GLbyte(nz)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexsv.xml -func (gl *GL) Indexsv(c []int16) { - C.gl1_1_glIndexsv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexs.xml -func (gl *GL) Indexs(c int16) { - C.gl1_1_glIndexs(gl.funcs, C.GLshort(c)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexiv.xml -func (gl *GL) Indexiv(c []int32) { - C.gl1_1_glIndexiv(gl.funcs, (*C.GLint)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexi.xml -func (gl *GL) Indexi(c int32) { - C.gl1_1_glIndexi(gl.funcs, C.GLint(c)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexfv.xml -func (gl *GL) Indexfv(c []float32) { - C.gl1_1_glIndexfv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexf.xml -func (gl *GL) Indexf(c float32) { - C.gl1_1_glIndexf(gl.funcs, C.GLfloat(c)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexdv.xml -func (gl *GL) Indexdv(c []float64) { - C.gl1_1_glIndexdv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexd.xml -func (gl *GL) Indexd(c float64) { - C.gl1_1_glIndexd(gl.funcs, C.GLdouble(c)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEnd.xml -func (gl *GL) End() { - C.gl1_1_glEnd(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEdgeFlagv.xml -func (gl *GL) EdgeFlagv(flag []bool) { - C.gl1_1_glEdgeFlagv(gl.funcs, (*C.GLboolean)(unsafe.Pointer(&flag[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEdgeFlag.xml -func (gl *GL) EdgeFlag(flag bool) { - C.gl1_1_glEdgeFlag(gl.funcs, *(*C.GLboolean)(unsafe.Pointer(&flag))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4usv.xml -func (gl *GL) Color4usv(v []uint16) { - C.gl1_1_glColor4usv(gl.funcs, (*C.GLushort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4us.xml -func (gl *GL) Color4us(red, green, blue, alpha uint16) { - C.gl1_1_glColor4us(gl.funcs, C.GLushort(red), C.GLushort(green), C.GLushort(blue), C.GLushort(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4uiv.xml -func (gl *GL) Color4uiv(v []uint32) { - C.gl1_1_glColor4uiv(gl.funcs, (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4ui.xml -func (gl *GL) Color4ui(red, green, blue, alpha uint32) { - C.gl1_1_glColor4ui(gl.funcs, C.GLuint(red), C.GLuint(green), C.GLuint(blue), C.GLuint(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4ubv.xml -func (gl *GL) Color4ubv(v []uint8) { - C.gl1_1_glColor4ubv(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4ub.xml -func (gl *GL) Color4ub(red, green, blue, alpha uint8) { - C.gl1_1_glColor4ub(gl.funcs, C.GLubyte(red), C.GLubyte(green), C.GLubyte(blue), C.GLubyte(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4sv.xml -func (gl *GL) Color4sv(v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_1_glColor4sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4s.xml -func (gl *GL) Color4s(red, green, blue, alpha int16) { - C.gl1_1_glColor4s(gl.funcs, C.GLshort(red), C.GLshort(green), C.GLshort(blue), C.GLshort(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4iv.xml -func (gl *GL) Color4iv(v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_1_glColor4iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4i.xml -func (gl *GL) Color4i(red, green, blue, alpha int32) { - C.gl1_1_glColor4i(gl.funcs, C.GLint(red), C.GLint(green), C.GLint(blue), C.GLint(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4fv.xml -func (gl *GL) Color4fv(v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_1_glColor4fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4f.xml -func (gl *GL) Color4f(red, green, blue, alpha float32) { - C.gl1_1_glColor4f(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4dv.xml -func (gl *GL) Color4dv(v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_1_glColor4dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4d.xml -func (gl *GL) Color4d(red, green, blue, alpha float64) { - C.gl1_1_glColor4d(gl.funcs, C.GLdouble(red), C.GLdouble(green), C.GLdouble(blue), C.GLdouble(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4bv.xml -func (gl *GL) Color4bv(v []byte) { - C.gl1_1_glColor4bv(gl.funcs, (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4b.xml -func (gl *GL) Color4b(red, green, blue, alpha byte) { - C.gl1_1_glColor4b(gl.funcs, C.GLbyte(red), C.GLbyte(green), C.GLbyte(blue), C.GLbyte(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3usv.xml -func (gl *GL) Color3usv(v []uint16) { - C.gl1_1_glColor3usv(gl.funcs, (*C.GLushort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3us.xml -func (gl *GL) Color3us(red, green, blue uint16) { - C.gl1_1_glColor3us(gl.funcs, C.GLushort(red), C.GLushort(green), C.GLushort(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3uiv.xml -func (gl *GL) Color3uiv(v []uint32) { - C.gl1_1_glColor3uiv(gl.funcs, (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3ui.xml -func (gl *GL) Color3ui(red, green, blue uint32) { - C.gl1_1_glColor3ui(gl.funcs, C.GLuint(red), C.GLuint(green), C.GLuint(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3ubv.xml -func (gl *GL) Color3ubv(v []uint8) { - C.gl1_1_glColor3ubv(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3ub.xml -func (gl *GL) Color3ub(red, green, blue uint8) { - C.gl1_1_glColor3ub(gl.funcs, C.GLubyte(red), C.GLubyte(green), C.GLubyte(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3sv.xml -func (gl *GL) Color3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_1_glColor3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3s.xml -func (gl *GL) Color3s(red, green, blue int16) { - C.gl1_1_glColor3s(gl.funcs, C.GLshort(red), C.GLshort(green), C.GLshort(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3iv.xml -func (gl *GL) Color3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_1_glColor3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3i.xml -func (gl *GL) Color3i(red, green, blue int32) { - C.gl1_1_glColor3i(gl.funcs, C.GLint(red), C.GLint(green), C.GLint(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3fv.xml -func (gl *GL) Color3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_1_glColor3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3f.xml -func (gl *GL) Color3f(red, green, blue float32) { - C.gl1_1_glColor3f(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3dv.xml -func (gl *GL) Color3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_1_glColor3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3d.xml -func (gl *GL) Color3d(red, green, blue float64) { - C.gl1_1_glColor3d(gl.funcs, C.GLdouble(red), C.GLdouble(green), C.GLdouble(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3bv.xml -func (gl *GL) Color3bv(v []byte) { - C.gl1_1_glColor3bv(gl.funcs, (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3b.xml -func (gl *GL) Color3b(red, green, blue byte) { - C.gl1_1_glColor3b(gl.funcs, C.GLbyte(red), C.GLbyte(green), C.GLbyte(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glBitmap.xml -func (gl *GL) Bitmap(width, height int, xorig, yorig, xmove, ymove float32, bitmap []uint8) { - C.gl1_1_glBitmap(gl.funcs, C.GLsizei(width), C.GLsizei(height), C.GLfloat(xorig), C.GLfloat(yorig), C.GLfloat(xmove), C.GLfloat(ymove), (*C.GLubyte)(unsafe.Pointer(&bitmap[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glBegin.xml -func (gl *GL) Begin(mode glbase.Enum) { - C.gl1_1_glBegin(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glListBase.xml -func (gl *GL) ListBase(base uint32) { - C.gl1_1_glListBase(gl.funcs, C.GLuint(base)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGenLists.xml -func (gl *GL) GenLists(range_ int32) uint32 { - glresult := C.gl1_1_glGenLists(gl.funcs, C.GLsizei(range_)) - return uint32(glresult) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDeleteLists.xml -func (gl *GL) DeleteLists(list uint32, range_ int32) { - C.gl1_1_glDeleteLists(gl.funcs, C.GLuint(list), C.GLsizei(range_)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCallLists.xml -func (gl *GL) CallLists(n int, gltype glbase.Enum, lists interface{}) { - var lists_ptr unsafe.Pointer - var lists_v = reflect.ValueOf(lists) - if lists != nil && lists_v.Kind() != reflect.Slice { - panic("parameter lists must be a slice") - } - if lists != nil { - lists_ptr = unsafe.Pointer(lists_v.Index(0).Addr().Pointer()) - } - C.gl1_1_glCallLists(gl.funcs, C.GLsizei(n), C.GLenum(gltype), lists_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCallList.xml -func (gl *GL) CallList(list uint32) { - C.gl1_1_glCallList(gl.funcs, C.GLuint(list)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEndList.xml -func (gl *GL) EndList() { - C.gl1_1_glEndList(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNewList.xml -func (gl *GL) NewList(list uint32, mode glbase.Enum) { - C.gl1_1_glNewList(gl.funcs, C.GLuint(list), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPushClientAttrib.xml -func (gl *GL) PushClientAttrib(mask glbase.Bitfield) { - C.gl1_1_glPushClientAttrib(gl.funcs, C.GLbitfield(mask)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPopClientAttrib.xml -func (gl *GL) PopClientAttrib() { - C.gl1_1_glPopClientAttrib(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPrioritizeTextures.xml -func (gl *GL) PrioritizeTextures(n int, textures []glbase.Texture, priorities []float32) { - C.gl1_1_glPrioritizeTextures(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0])), (*C.GLfloat)(unsafe.Pointer(&priorities[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glAreTexturesResident.xml -func (gl *GL) AreTexturesResident(n int, textures []glbase.Texture, residences []bool) bool { - glresult := C.gl1_1_glAreTexturesResident(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0])), (*C.GLboolean)(unsafe.Pointer(&residences[0]))) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexPointer.xml -func (gl *GL) VertexPointer(size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl1_1_glVertexPointer(gl.funcs, C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoordPointer.xml -func (gl *GL) TexCoordPointer(size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl1_1_glTexCoordPointer(gl.funcs, C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormalPointer.xml -func (gl *GL) NormalPointer(gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl1_1_glNormalPointer(gl.funcs, C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glInterleavedArrays.xml -func (gl *GL) InterleavedArrays(format glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl1_1_glInterleavedArrays(gl.funcs, C.GLenum(format), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexPointer.xml -func (gl *GL) IndexPointer(gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl1_1_glIndexPointer(gl.funcs, C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEnableClientState.xml -func (gl *GL) EnableClientState(array glbase.Enum) { - C.gl1_1_glEnableClientState(gl.funcs, C.GLenum(array)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEdgeFlagPointer.xml -func (gl *GL) EdgeFlagPointer(stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl1_1_glEdgeFlagPointer(gl.funcs, C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDisableClientState.xml -func (gl *GL) DisableClientState(array glbase.Enum) { - C.gl1_1_glDisableClientState(gl.funcs, C.GLenum(array)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColorPointer.xml -func (gl *GL) ColorPointer(size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl1_1_glColorPointer(gl.funcs, C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glArrayElement.xml -func (gl *GL) ArrayElement(i int32) { - C.gl1_1_glArrayElement(gl.funcs, C.GLint(i)) -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/1.2/funcs.cpp b/Godeps/_workspace/src/github.com/obscuren/qml/gl/1.2/funcs.cpp deleted file mode 100644 index 328f40f850..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/1.2/funcs.cpp +++ /dev/null @@ -1,2250 +0,0 @@ - -// ** file automatically generated by glgen -- do not edit manually ** - -#include -#include - -#include "funcs.h" - -void *gl1_2_funcs() { - QOpenGLFunctions_1_2* funcs = QOpenGLContext::currentContext()->versionFunctions(); - if (!funcs) { - return 0; - } - funcs->initializeOpenGLFunctions(); - return funcs; -} - - -void gl1_2_glViewport(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glViewport(x, y, width, height); -} - -void gl1_2_glDepthRange(void *_glfuncs, GLdouble nearVal, GLdouble farVal) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthRange(nearVal, farVal); -} - -GLboolean gl1_2_glIsEnabled(void *_glfuncs, GLenum cap) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsEnabled(cap); -} - -void gl1_2_glGetTexLevelParameteriv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLint* params) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexLevelParameteriv(target, level, pname, params); -} - -void gl1_2_glGetTexLevelParameterfv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexLevelParameterfv(target, level, pname, params); -} - -void gl1_2_glGetTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameteriv(target, pname, params); -} - -void gl1_2_glGetTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameterfv(target, pname, params); -} - -void gl1_2_glGetTexImage(void *_glfuncs, GLenum target, GLint level, GLenum format, GLenum gltype, GLvoid* pixels) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexImage(target, level, format, gltype, pixels); -} - -void gl1_2_glGetIntegerv(void *_glfuncs, GLenum pname, GLint* params) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetIntegerv(pname, params); -} - -void gl1_2_glGetFloatv(void *_glfuncs, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetFloatv(pname, params); -} - -GLenum gl1_2_glGetError(void *_glfuncs) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetError(); -} - -void gl1_2_glGetDoublev(void *_glfuncs, GLenum pname, GLdouble* params) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetDoublev(pname, params); -} - -void gl1_2_glGetBooleanv(void *_glfuncs, GLenum pname, GLboolean* params) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBooleanv(pname, params); -} - -void gl1_2_glReadPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum gltype, GLvoid* pixels) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glReadPixels(x, y, width, height, format, gltype, pixels); -} - -void gl1_2_glReadBuffer(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glReadBuffer(mode); -} - -void gl1_2_glPixelStorei(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelStorei(pname, param); -} - -void gl1_2_glPixelStoref(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelStoref(pname, param); -} - -void gl1_2_glDepthFunc(void *_glfuncs, GLenum glfunc) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthFunc(glfunc); -} - -void gl1_2_glStencilOp(void *_glfuncs, GLenum fail, GLenum zfail, GLenum zpass) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilOp(fail, zfail, zpass); -} - -void gl1_2_glStencilFunc(void *_glfuncs, GLenum glfunc, GLint ref, GLuint mask) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilFunc(glfunc, ref, mask); -} - -void gl1_2_glLogicOp(void *_glfuncs, GLenum opcode) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLogicOp(opcode); -} - -void gl1_2_glBlendFunc(void *_glfuncs, GLenum sfactor, GLenum dfactor) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendFunc(sfactor, dfactor); -} - -void gl1_2_glFlush(void *_glfuncs) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFlush(); -} - -void gl1_2_glFinish(void *_glfuncs) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFinish(); -} - -void gl1_2_glEnable(void *_glfuncs, GLenum cap) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnable(cap); -} - -void gl1_2_glDisable(void *_glfuncs, GLenum cap) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDisable(cap); -} - -void gl1_2_glDepthMask(void *_glfuncs, GLboolean flag) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthMask(flag); -} - -void gl1_2_glColorMask(void *_glfuncs, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorMask(red, green, blue, alpha); -} - -void gl1_2_glStencilMask(void *_glfuncs, GLuint mask) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilMask(mask); -} - -void gl1_2_glClearDepth(void *_glfuncs, GLdouble depth) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearDepth(depth); -} - -void gl1_2_glClearStencil(void *_glfuncs, GLint s) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearStencil(s); -} - -void gl1_2_glClearColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearColor(red, green, blue, alpha); -} - -void gl1_2_glClear(void *_glfuncs, GLbitfield mask) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClear(mask); -} - -void gl1_2_glDrawBuffer(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawBuffer(mode); -} - -void gl1_2_glTexImage2D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage2D(target, level, internalFormat, width, height, border, format, gltype, pixels); -} - -void gl1_2_glTexImage1D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage1D(target, level, internalFormat, width, border, format, gltype, pixels); -} - -void gl1_2_glTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameteriv(target, pname, params); -} - -void gl1_2_glTexParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint param) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameteri(target, pname, param); -} - -void gl1_2_glTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterfv(target, pname, params); -} - -void gl1_2_glTexParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterf(target, pname, param); -} - -void gl1_2_glScissor(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScissor(x, y, width, height); -} - -void gl1_2_glPolygonMode(void *_glfuncs, GLenum face, GLenum mode) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPolygonMode(face, mode); -} - -void gl1_2_glPointSize(void *_glfuncs, GLfloat size) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointSize(size); -} - -void gl1_2_glLineWidth(void *_glfuncs, GLfloat width) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLineWidth(width); -} - -void gl1_2_glHint(void *_glfuncs, GLenum target, GLenum mode) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glHint(target, mode); -} - -void gl1_2_glFrontFace(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFrontFace(mode); -} - -void gl1_2_glCullFace(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCullFace(mode); -} - -void gl1_2_glIndexubv(void *_glfuncs, const GLubyte* c) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexubv(c); -} - -void gl1_2_glIndexub(void *_glfuncs, GLubyte c) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexub(c); -} - -GLboolean gl1_2_glIsTexture(void *_glfuncs, GLuint texture) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsTexture(texture); -} - -void gl1_2_glGenTextures(void *_glfuncs, GLsizei n, GLuint* textures) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenTextures(n, textures); -} - -void gl1_2_glDeleteTextures(void *_glfuncs, GLsizei n, const GLuint* textures) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteTextures(n, textures); -} - -void gl1_2_glBindTexture(void *_glfuncs, GLenum target, GLuint texture) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindTexture(target, texture); -} - -void gl1_2_glTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, gltype, pixels); -} - -void gl1_2_glTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexSubImage1D(target, level, xoffset, width, format, gltype, pixels); -} - -void gl1_2_glCopyTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height); -} - -void gl1_2_glCopyTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexSubImage1D(target, level, xoffset, x, y, width); -} - -void gl1_2_glCopyTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexImage2D(target, level, internalFormat, x, y, width, height, border); -} - -void gl1_2_glCopyTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexImage1D(target, level, internalFormat, x, y, width, border); -} - -void gl1_2_glPolygonOffset(void *_glfuncs, GLfloat factor, GLfloat units) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPolygonOffset(factor, units); -} - -void gl1_2_glDrawElements(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElements(mode, count, gltype, indices); -} - -void gl1_2_glDrawArrays(void *_glfuncs, GLenum mode, GLint first, GLsizei count) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawArrays(mode, first, count); -} - -void gl1_2_glCopyTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexSubImage3D(target, level, xoffset, yoffset, zoffset, x, y, width, height); -} - -void gl1_2_glTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, gltype, pixels); -} - -void gl1_2_glTexImage3D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage3D(target, level, internalFormat, width, height, depth, border, format, gltype, pixels); -} - -void gl1_2_glDrawRangeElements(void *_glfuncs, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum gltype, const GLvoid* indices) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawRangeElements(mode, start, end, count, gltype, indices); -} - -void gl1_2_glBlendEquation(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendEquation(mode); -} - -void gl1_2_glBlendColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendColor(red, green, blue, alpha); -} - -void gl1_2_glTranslatef(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTranslatef(x, y, z); -} - -void gl1_2_glTranslated(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTranslated(x, y, z); -} - -void gl1_2_glScalef(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScalef(x, y, z); -} - -void gl1_2_glScaled(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScaled(x, y, z); -} - -void gl1_2_glRotatef(void *_glfuncs, GLfloat angle, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRotatef(angle, x, y, z); -} - -void gl1_2_glRotated(void *_glfuncs, GLdouble angle, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRotated(angle, x, y, z); -} - -void gl1_2_glPushMatrix(void *_glfuncs) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPushMatrix(); -} - -void gl1_2_glPopMatrix(void *_glfuncs) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPopMatrix(); -} - -void gl1_2_glOrtho(void *_glfuncs, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glOrtho(left, right, bottom, top, zNear, zFar); -} - -void gl1_2_glMultMatrixd(void *_glfuncs, const GLdouble* m) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultMatrixd(m); -} - -void gl1_2_glMultMatrixf(void *_glfuncs, const GLfloat* m) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultMatrixf(m); -} - -void gl1_2_glMatrixMode(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMatrixMode(mode); -} - -void gl1_2_glLoadMatrixd(void *_glfuncs, const GLdouble* m) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadMatrixd(m); -} - -void gl1_2_glLoadMatrixf(void *_glfuncs, const GLfloat* m) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadMatrixf(m); -} - -void gl1_2_glLoadIdentity(void *_glfuncs) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadIdentity(); -} - -void gl1_2_glFrustum(void *_glfuncs, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFrustum(left, right, bottom, top, zNear, zFar); -} - -GLboolean gl1_2_glIsList(void *_glfuncs, GLuint list) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsList(list); -} - -void gl1_2_glGetTexGeniv(void *_glfuncs, GLenum coord, GLenum pname, GLint* params) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexGeniv(coord, pname, params); -} - -void gl1_2_glGetTexGenfv(void *_glfuncs, GLenum coord, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexGenfv(coord, pname, params); -} - -void gl1_2_glGetTexGendv(void *_glfuncs, GLenum coord, GLenum pname, GLdouble* params) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexGendv(coord, pname, params); -} - -void gl1_2_glGetTexEnviv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexEnviv(target, pname, params); -} - -void gl1_2_glGetTexEnvfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexEnvfv(target, pname, params); -} - -void gl1_2_glGetPolygonStipple(void *_glfuncs, GLubyte* mask) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetPolygonStipple(mask); -} - -void gl1_2_glGetPixelMapusv(void *_glfuncs, GLenum glmap, GLushort* values) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetPixelMapusv(glmap, values); -} - -void gl1_2_glGetPixelMapuiv(void *_glfuncs, GLenum glmap, GLuint* values) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetPixelMapuiv(glmap, values); -} - -void gl1_2_glGetPixelMapfv(void *_glfuncs, GLenum glmap, GLfloat* values) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetPixelMapfv(glmap, values); -} - -void gl1_2_glGetMaterialiv(void *_glfuncs, GLenum face, GLenum pname, GLint* params) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMaterialiv(face, pname, params); -} - -void gl1_2_glGetMaterialfv(void *_glfuncs, GLenum face, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMaterialfv(face, pname, params); -} - -void gl1_2_glGetMapiv(void *_glfuncs, GLenum target, GLenum query, GLint* v) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMapiv(target, query, v); -} - -void gl1_2_glGetMapfv(void *_glfuncs, GLenum target, GLenum query, GLfloat* v) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMapfv(target, query, v); -} - -void gl1_2_glGetMapdv(void *_glfuncs, GLenum target, GLenum query, GLdouble* v) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMapdv(target, query, v); -} - -void gl1_2_glGetLightiv(void *_glfuncs, GLenum light, GLenum pname, GLint* params) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetLightiv(light, pname, params); -} - -void gl1_2_glGetLightfv(void *_glfuncs, GLenum light, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetLightfv(light, pname, params); -} - -void gl1_2_glGetClipPlane(void *_glfuncs, GLenum plane, GLdouble* equation) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetClipPlane(plane, equation); -} - -void gl1_2_glDrawPixels(void *_glfuncs, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawPixels(width, height, format, gltype, pixels); -} - -void gl1_2_glCopyPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum gltype) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyPixels(x, y, width, height, gltype); -} - -void gl1_2_glPixelMapusv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLushort* values) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelMapusv(glmap, mapsize, values); -} - -void gl1_2_glPixelMapuiv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLuint* values) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelMapuiv(glmap, mapsize, values); -} - -void gl1_2_glPixelMapfv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLfloat* values) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelMapfv(glmap, mapsize, values); -} - -void gl1_2_glPixelTransferi(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelTransferi(pname, param); -} - -void gl1_2_glPixelTransferf(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelTransferf(pname, param); -} - -void gl1_2_glPixelZoom(void *_glfuncs, GLfloat xfactor, GLfloat yfactor) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelZoom(xfactor, yfactor); -} - -void gl1_2_glAlphaFunc(void *_glfuncs, GLenum glfunc, GLfloat ref) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glAlphaFunc(glfunc, ref); -} - -void gl1_2_glEvalPoint2(void *_glfuncs, GLint i, GLint j) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalPoint2(i, j); -} - -void gl1_2_glEvalMesh2(void *_glfuncs, GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalMesh2(mode, i1, i2, j1, j2); -} - -void gl1_2_glEvalPoint1(void *_glfuncs, GLint i) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalPoint1(i); -} - -void gl1_2_glEvalMesh1(void *_glfuncs, GLenum mode, GLint i1, GLint i2) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalMesh1(mode, i1, i2); -} - -void gl1_2_glEvalCoord2fv(void *_glfuncs, const GLfloat* u) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord2fv(u); -} - -void gl1_2_glEvalCoord2f(void *_glfuncs, GLfloat u, GLfloat v) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord2f(u, v); -} - -void gl1_2_glEvalCoord2dv(void *_glfuncs, const GLdouble* u) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord2dv(u); -} - -void gl1_2_glEvalCoord2d(void *_glfuncs, GLdouble u, GLdouble v) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord2d(u, v); -} - -void gl1_2_glEvalCoord1fv(void *_glfuncs, const GLfloat* u) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord1fv(u); -} - -void gl1_2_glEvalCoord1f(void *_glfuncs, GLfloat u) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord1f(u); -} - -void gl1_2_glEvalCoord1dv(void *_glfuncs, const GLdouble* u) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord1dv(u); -} - -void gl1_2_glEvalCoord1d(void *_glfuncs, GLdouble u) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord1d(u); -} - -void gl1_2_glMapGrid2f(void *_glfuncs, GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMapGrid2f(un, u1, u2, vn, v1, v2); -} - -void gl1_2_glMapGrid2d(void *_glfuncs, GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMapGrid2d(un, u1, u2, vn, v1, v2); -} - -void gl1_2_glMapGrid1f(void *_glfuncs, GLint un, GLfloat u1, GLfloat u2) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMapGrid1f(un, u1, u2); -} - -void gl1_2_glMapGrid1d(void *_glfuncs, GLint un, GLdouble u1, GLdouble u2) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMapGrid1d(un, u1, u2); -} - -void gl1_2_glMap2f(void *_glfuncs, GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat* points) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMap2f(target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points); -} - -void gl1_2_glMap2d(void *_glfuncs, GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble* points) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMap2d(target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points); -} - -void gl1_2_glMap1f(void *_glfuncs, GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat* points) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMap1f(target, u1, u2, stride, order, points); -} - -void gl1_2_glMap1d(void *_glfuncs, GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble* points) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMap1d(target, u1, u2, stride, order, points); -} - -void gl1_2_glPushAttrib(void *_glfuncs, GLbitfield mask) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPushAttrib(mask); -} - -void gl1_2_glPopAttrib(void *_glfuncs) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPopAttrib(); -} - -void gl1_2_glAccum(void *_glfuncs, GLenum op, GLfloat value) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glAccum(op, value); -} - -void gl1_2_glIndexMask(void *_glfuncs, GLuint mask) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexMask(mask); -} - -void gl1_2_glClearIndex(void *_glfuncs, GLfloat c) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearIndex(c); -} - -void gl1_2_glClearAccum(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearAccum(red, green, blue, alpha); -} - -void gl1_2_glPushName(void *_glfuncs, GLuint name) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPushName(name); -} - -void gl1_2_glPopName(void *_glfuncs) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPopName(); -} - -void gl1_2_glPassThrough(void *_glfuncs, GLfloat token) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPassThrough(token); -} - -void gl1_2_glLoadName(void *_glfuncs, GLuint name) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadName(name); -} - -void gl1_2_glInitNames(void *_glfuncs) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glInitNames(); -} - -GLint gl1_2_glRenderMode(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glRenderMode(mode); -} - -void gl1_2_glSelectBuffer(void *_glfuncs, GLsizei size, GLuint* buffer) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSelectBuffer(size, buffer); -} - -void gl1_2_glFeedbackBuffer(void *_glfuncs, GLsizei size, GLenum gltype, GLfloat* buffer) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFeedbackBuffer(size, gltype, buffer); -} - -void gl1_2_glTexGeniv(void *_glfuncs, GLenum coord, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGeniv(coord, pname, params); -} - -void gl1_2_glTexGeni(void *_glfuncs, GLenum coord, GLenum pname, GLint param) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGeni(coord, pname, param); -} - -void gl1_2_glTexGenfv(void *_glfuncs, GLenum coord, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGenfv(coord, pname, params); -} - -void gl1_2_glTexGenf(void *_glfuncs, GLenum coord, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGenf(coord, pname, param); -} - -void gl1_2_glTexGendv(void *_glfuncs, GLenum coord, GLenum pname, const GLdouble* params) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGendv(coord, pname, params); -} - -void gl1_2_glTexGend(void *_glfuncs, GLenum coord, GLenum pname, GLdouble param) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGend(coord, pname, param); -} - -void gl1_2_glTexEnviv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexEnviv(target, pname, params); -} - -void gl1_2_glTexEnvi(void *_glfuncs, GLenum target, GLenum pname, GLint param) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexEnvi(target, pname, param); -} - -void gl1_2_glTexEnvfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexEnvfv(target, pname, params); -} - -void gl1_2_glTexEnvf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexEnvf(target, pname, param); -} - -void gl1_2_glShadeModel(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glShadeModel(mode); -} - -void gl1_2_glPolygonStipple(void *_glfuncs, const GLubyte* mask) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPolygonStipple(mask); -} - -void gl1_2_glMaterialiv(void *_glfuncs, GLenum face, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMaterialiv(face, pname, params); -} - -void gl1_2_glMateriali(void *_glfuncs, GLenum face, GLenum pname, GLint param) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMateriali(face, pname, param); -} - -void gl1_2_glMaterialfv(void *_glfuncs, GLenum face, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMaterialfv(face, pname, params); -} - -void gl1_2_glMaterialf(void *_glfuncs, GLenum face, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMaterialf(face, pname, param); -} - -void gl1_2_glLineStipple(void *_glfuncs, GLint factor, GLushort pattern) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLineStipple(factor, pattern); -} - -void gl1_2_glLightModeliv(void *_glfuncs, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightModeliv(pname, params); -} - -void gl1_2_glLightModeli(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightModeli(pname, param); -} - -void gl1_2_glLightModelfv(void *_glfuncs, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightModelfv(pname, params); -} - -void gl1_2_glLightModelf(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightModelf(pname, param); -} - -void gl1_2_glLightiv(void *_glfuncs, GLenum light, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightiv(light, pname, params); -} - -void gl1_2_glLighti(void *_glfuncs, GLenum light, GLenum pname, GLint param) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLighti(light, pname, param); -} - -void gl1_2_glLightfv(void *_glfuncs, GLenum light, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightfv(light, pname, params); -} - -void gl1_2_glLightf(void *_glfuncs, GLenum light, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightf(light, pname, param); -} - -void gl1_2_glFogiv(void *_glfuncs, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogiv(pname, params); -} - -void gl1_2_glFogi(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogi(pname, param); -} - -void gl1_2_glFogfv(void *_glfuncs, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogfv(pname, params); -} - -void gl1_2_glFogf(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogf(pname, param); -} - -void gl1_2_glColorMaterial(void *_glfuncs, GLenum face, GLenum mode) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorMaterial(face, mode); -} - -void gl1_2_glClipPlane(void *_glfuncs, GLenum plane, const GLdouble* equation) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClipPlane(plane, equation); -} - -void gl1_2_glVertex4sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4sv(v); -} - -void gl1_2_glVertex4s(void *_glfuncs, GLshort x, GLshort y, GLshort z, GLshort w) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4s(x, y, z, w); -} - -void gl1_2_glVertex4iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4iv(v); -} - -void gl1_2_glVertex4i(void *_glfuncs, GLint x, GLint y, GLint z, GLint w) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4i(x, y, z, w); -} - -void gl1_2_glVertex4fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4fv(v); -} - -void gl1_2_glVertex4f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z, GLfloat w) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4f(x, y, z, w); -} - -void gl1_2_glVertex4dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4dv(v); -} - -void gl1_2_glVertex4d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z, GLdouble w) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4d(x, y, z, w); -} - -void gl1_2_glVertex3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3sv(v); -} - -void gl1_2_glVertex3s(void *_glfuncs, GLshort x, GLshort y, GLshort z) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3s(x, y, z); -} - -void gl1_2_glVertex3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3iv(v); -} - -void gl1_2_glVertex3i(void *_glfuncs, GLint x, GLint y, GLint z) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3i(x, y, z); -} - -void gl1_2_glVertex3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3fv(v); -} - -void gl1_2_glVertex3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3f(x, y, z); -} - -void gl1_2_glVertex3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3dv(v); -} - -void gl1_2_glVertex3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3d(x, y, z); -} - -void gl1_2_glVertex2sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2sv(v); -} - -void gl1_2_glVertex2s(void *_glfuncs, GLshort x, GLshort y) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2s(x, y); -} - -void gl1_2_glVertex2iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2iv(v); -} - -void gl1_2_glVertex2i(void *_glfuncs, GLint x, GLint y) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2i(x, y); -} - -void gl1_2_glVertex2fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2fv(v); -} - -void gl1_2_glVertex2f(void *_glfuncs, GLfloat x, GLfloat y) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2f(x, y); -} - -void gl1_2_glVertex2dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2dv(v); -} - -void gl1_2_glVertex2d(void *_glfuncs, GLdouble x, GLdouble y) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2d(x, y); -} - -void gl1_2_glTexCoord4sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4sv(v); -} - -void gl1_2_glTexCoord4s(void *_glfuncs, GLshort s, GLshort t, GLshort r, GLshort q) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4s(s, t, r, q); -} - -void gl1_2_glTexCoord4iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4iv(v); -} - -void gl1_2_glTexCoord4i(void *_glfuncs, GLint s, GLint t, GLint r, GLint q) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4i(s, t, r, q); -} - -void gl1_2_glTexCoord4fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4fv(v); -} - -void gl1_2_glTexCoord4f(void *_glfuncs, GLfloat s, GLfloat t, GLfloat r, GLfloat q) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4f(s, t, r, q); -} - -void gl1_2_glTexCoord4dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4dv(v); -} - -void gl1_2_glTexCoord4d(void *_glfuncs, GLdouble s, GLdouble t, GLdouble r, GLdouble q) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4d(s, t, r, q); -} - -void gl1_2_glTexCoord3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3sv(v); -} - -void gl1_2_glTexCoord3s(void *_glfuncs, GLshort s, GLshort t, GLshort r) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3s(s, t, r); -} - -void gl1_2_glTexCoord3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3iv(v); -} - -void gl1_2_glTexCoord3i(void *_glfuncs, GLint s, GLint t, GLint r) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3i(s, t, r); -} - -void gl1_2_glTexCoord3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3fv(v); -} - -void gl1_2_glTexCoord3f(void *_glfuncs, GLfloat s, GLfloat t, GLfloat r) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3f(s, t, r); -} - -void gl1_2_glTexCoord3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3dv(v); -} - -void gl1_2_glTexCoord3d(void *_glfuncs, GLdouble s, GLdouble t, GLdouble r) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3d(s, t, r); -} - -void gl1_2_glTexCoord2sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2sv(v); -} - -void gl1_2_glTexCoord2s(void *_glfuncs, GLshort s, GLshort t) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2s(s, t); -} - -void gl1_2_glTexCoord2iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2iv(v); -} - -void gl1_2_glTexCoord2i(void *_glfuncs, GLint s, GLint t) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2i(s, t); -} - -void gl1_2_glTexCoord2fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2fv(v); -} - -void gl1_2_glTexCoord2f(void *_glfuncs, GLfloat s, GLfloat t) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2f(s, t); -} - -void gl1_2_glTexCoord2dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2dv(v); -} - -void gl1_2_glTexCoord2d(void *_glfuncs, GLdouble s, GLdouble t) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2d(s, t); -} - -void gl1_2_glTexCoord1sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1sv(v); -} - -void gl1_2_glTexCoord1s(void *_glfuncs, GLshort s) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1s(s); -} - -void gl1_2_glTexCoord1iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1iv(v); -} - -void gl1_2_glTexCoord1i(void *_glfuncs, GLint s) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1i(s); -} - -void gl1_2_glTexCoord1fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1fv(v); -} - -void gl1_2_glTexCoord1f(void *_glfuncs, GLfloat s) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1f(s); -} - -void gl1_2_glTexCoord1dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1dv(v); -} - -void gl1_2_glTexCoord1d(void *_glfuncs, GLdouble s) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1d(s); -} - -void gl1_2_glRectsv(void *_glfuncs, const GLshort* v1, const GLshort* v2) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectsv(v1, v2); -} - -void gl1_2_glRects(void *_glfuncs, GLshort x1, GLshort y1, GLshort x2, GLshort y2) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRects(x1, y1, x2, y2); -} - -void gl1_2_glRectiv(void *_glfuncs, const GLint* v1, const GLint* v2) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectiv(v1, v2); -} - -void gl1_2_glRecti(void *_glfuncs, GLint x1, GLint y1, GLint x2, GLint y2) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRecti(x1, y1, x2, y2); -} - -void gl1_2_glRectfv(void *_glfuncs, const GLfloat* v1, const GLfloat* v2) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectfv(v1, v2); -} - -void gl1_2_glRectf(void *_glfuncs, GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectf(x1, y1, x2, y2); -} - -void gl1_2_glRectdv(void *_glfuncs, const GLdouble* v1, const GLdouble* v2) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectdv(v1, v2); -} - -void gl1_2_glRectd(void *_glfuncs, GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectd(x1, y1, x2, y2); -} - -void gl1_2_glRasterPos4sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4sv(v); -} - -void gl1_2_glRasterPos4s(void *_glfuncs, GLshort x, GLshort y, GLshort z, GLshort w) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4s(x, y, z, w); -} - -void gl1_2_glRasterPos4iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4iv(v); -} - -void gl1_2_glRasterPos4i(void *_glfuncs, GLint x, GLint y, GLint z, GLint w) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4i(x, y, z, w); -} - -void gl1_2_glRasterPos4fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4fv(v); -} - -void gl1_2_glRasterPos4f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z, GLfloat w) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4f(x, y, z, w); -} - -void gl1_2_glRasterPos4dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4dv(v); -} - -void gl1_2_glRasterPos4d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z, GLdouble w) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4d(x, y, z, w); -} - -void gl1_2_glRasterPos3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3sv(v); -} - -void gl1_2_glRasterPos3s(void *_glfuncs, GLshort x, GLshort y, GLshort z) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3s(x, y, z); -} - -void gl1_2_glRasterPos3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3iv(v); -} - -void gl1_2_glRasterPos3i(void *_glfuncs, GLint x, GLint y, GLint z) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3i(x, y, z); -} - -void gl1_2_glRasterPos3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3fv(v); -} - -void gl1_2_glRasterPos3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3f(x, y, z); -} - -void gl1_2_glRasterPos3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3dv(v); -} - -void gl1_2_glRasterPos3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3d(x, y, z); -} - -void gl1_2_glRasterPos2sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2sv(v); -} - -void gl1_2_glRasterPos2s(void *_glfuncs, GLshort x, GLshort y) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2s(x, y); -} - -void gl1_2_glRasterPos2iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2iv(v); -} - -void gl1_2_glRasterPos2i(void *_glfuncs, GLint x, GLint y) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2i(x, y); -} - -void gl1_2_glRasterPos2fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2fv(v); -} - -void gl1_2_glRasterPos2f(void *_glfuncs, GLfloat x, GLfloat y) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2f(x, y); -} - -void gl1_2_glRasterPos2dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2dv(v); -} - -void gl1_2_glRasterPos2d(void *_glfuncs, GLdouble x, GLdouble y) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2d(x, y); -} - -void gl1_2_glNormal3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3sv(v); -} - -void gl1_2_glNormal3s(void *_glfuncs, GLshort nx, GLshort ny, GLshort nz) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3s(nx, ny, nz); -} - -void gl1_2_glNormal3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3iv(v); -} - -void gl1_2_glNormal3i(void *_glfuncs, GLint nx, GLint ny, GLint nz) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3i(nx, ny, nz); -} - -void gl1_2_glNormal3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3fv(v); -} - -void gl1_2_glNormal3f(void *_glfuncs, GLfloat nx, GLfloat ny, GLfloat nz) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3f(nx, ny, nz); -} - -void gl1_2_glNormal3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3dv(v); -} - -void gl1_2_glNormal3d(void *_glfuncs, GLdouble nx, GLdouble ny, GLdouble nz) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3d(nx, ny, nz); -} - -void gl1_2_glNormal3bv(void *_glfuncs, const GLbyte* v) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3bv(v); -} - -void gl1_2_glNormal3b(void *_glfuncs, GLbyte nx, GLbyte ny, GLbyte nz) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3b(nx, ny, nz); -} - -void gl1_2_glIndexsv(void *_glfuncs, const GLshort* c) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexsv(c); -} - -void gl1_2_glIndexs(void *_glfuncs, GLshort c) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexs(c); -} - -void gl1_2_glIndexiv(void *_glfuncs, const GLint* c) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexiv(c); -} - -void gl1_2_glIndexi(void *_glfuncs, GLint c) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexi(c); -} - -void gl1_2_glIndexfv(void *_glfuncs, const GLfloat* c) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexfv(c); -} - -void gl1_2_glIndexf(void *_glfuncs, GLfloat c) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexf(c); -} - -void gl1_2_glIndexdv(void *_glfuncs, const GLdouble* c) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexdv(c); -} - -void gl1_2_glIndexd(void *_glfuncs, GLdouble c) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexd(c); -} - -void gl1_2_glEnd(void *_glfuncs) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnd(); -} - -void gl1_2_glEdgeFlagv(void *_glfuncs, const GLboolean* flag) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEdgeFlagv(flag); -} - -void gl1_2_glEdgeFlag(void *_glfuncs, GLboolean flag) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEdgeFlag(flag); -} - -void gl1_2_glColor4usv(void *_glfuncs, const GLushort* v) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4usv(v); -} - -void gl1_2_glColor4us(void *_glfuncs, GLushort red, GLushort green, GLushort blue, GLushort alpha) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4us(red, green, blue, alpha); -} - -void gl1_2_glColor4uiv(void *_glfuncs, const GLuint* v) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4uiv(v); -} - -void gl1_2_glColor4ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue, GLuint alpha) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4ui(red, green, blue, alpha); -} - -void gl1_2_glColor4ubv(void *_glfuncs, const GLubyte* v) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4ubv(v); -} - -void gl1_2_glColor4ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4ub(red, green, blue, alpha); -} - -void gl1_2_glColor4sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4sv(v); -} - -void gl1_2_glColor4s(void *_glfuncs, GLshort red, GLshort green, GLshort blue, GLshort alpha) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4s(red, green, blue, alpha); -} - -void gl1_2_glColor4iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4iv(v); -} - -void gl1_2_glColor4i(void *_glfuncs, GLint red, GLint green, GLint blue, GLint alpha) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4i(red, green, blue, alpha); -} - -void gl1_2_glColor4fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4fv(v); -} - -void gl1_2_glColor4f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4f(red, green, blue, alpha); -} - -void gl1_2_glColor4dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4dv(v); -} - -void gl1_2_glColor4d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4d(red, green, blue, alpha); -} - -void gl1_2_glColor4bv(void *_glfuncs, const GLbyte* v) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4bv(v); -} - -void gl1_2_glColor4b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4b(red, green, blue, alpha); -} - -void gl1_2_glColor3usv(void *_glfuncs, const GLushort* v) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3usv(v); -} - -void gl1_2_glColor3us(void *_glfuncs, GLushort red, GLushort green, GLushort blue) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3us(red, green, blue); -} - -void gl1_2_glColor3uiv(void *_glfuncs, const GLuint* v) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3uiv(v); -} - -void gl1_2_glColor3ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3ui(red, green, blue); -} - -void gl1_2_glColor3ubv(void *_glfuncs, const GLubyte* v) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3ubv(v); -} - -void gl1_2_glColor3ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3ub(red, green, blue); -} - -void gl1_2_glColor3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3sv(v); -} - -void gl1_2_glColor3s(void *_glfuncs, GLshort red, GLshort green, GLshort blue) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3s(red, green, blue); -} - -void gl1_2_glColor3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3iv(v); -} - -void gl1_2_glColor3i(void *_glfuncs, GLint red, GLint green, GLint blue) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3i(red, green, blue); -} - -void gl1_2_glColor3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3fv(v); -} - -void gl1_2_glColor3f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3f(red, green, blue); -} - -void gl1_2_glColor3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3dv(v); -} - -void gl1_2_glColor3d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3d(red, green, blue); -} - -void gl1_2_glColor3bv(void *_glfuncs, const GLbyte* v) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3bv(v); -} - -void gl1_2_glColor3b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3b(red, green, blue); -} - -void gl1_2_glBitmap(void *_glfuncs, GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte* bitmap) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBitmap(width, height, xorig, yorig, xmove, ymove, bitmap); -} - -void gl1_2_glBegin(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBegin(mode); -} - -void gl1_2_glListBase(void *_glfuncs, GLuint base) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glListBase(base); -} - -GLuint gl1_2_glGenLists(void *_glfuncs, GLsizei range_) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGenLists(range_); -} - -void gl1_2_glDeleteLists(void *_glfuncs, GLuint list, GLsizei range_) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteLists(list, range_); -} - -void gl1_2_glCallLists(void *_glfuncs, GLsizei n, GLenum gltype, const GLvoid* lists) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCallLists(n, gltype, lists); -} - -void gl1_2_glCallList(void *_glfuncs, GLuint list) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCallList(list); -} - -void gl1_2_glEndList(void *_glfuncs) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndList(); -} - -void gl1_2_glNewList(void *_glfuncs, GLuint list, GLenum mode) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNewList(list, mode); -} - -void gl1_2_glPushClientAttrib(void *_glfuncs, GLbitfield mask) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPushClientAttrib(mask); -} - -void gl1_2_glPopClientAttrib(void *_glfuncs) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPopClientAttrib(); -} - -void gl1_2_glPrioritizeTextures(void *_glfuncs, GLsizei n, const GLuint* textures, const GLfloat* priorities) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPrioritizeTextures(n, textures, priorities); -} - -GLboolean gl1_2_glAreTexturesResident(void *_glfuncs, GLsizei n, const GLuint* textures, GLboolean* residences) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glAreTexturesResident(n, textures, residences); -} - -void gl1_2_glVertexPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexPointer(size, gltype, stride, pointer); -} - -void gl1_2_glTexCoordPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordPointer(size, gltype, stride, pointer); -} - -void gl1_2_glNormalPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormalPointer(gltype, stride, pointer); -} - -void gl1_2_glInterleavedArrays(void *_glfuncs, GLenum format, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glInterleavedArrays(format, stride, pointer); -} - -void gl1_2_glIndexPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexPointer(gltype, stride, pointer); -} - -void gl1_2_glEnableClientState(void *_glfuncs, GLenum array) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnableClientState(array); -} - -void gl1_2_glEdgeFlagPointer(void *_glfuncs, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEdgeFlagPointer(stride, pointer); -} - -void gl1_2_glDisableClientState(void *_glfuncs, GLenum array) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDisableClientState(array); -} - -void gl1_2_glColorPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorPointer(size, gltype, stride, pointer); -} - -void gl1_2_glArrayElement(void *_glfuncs, GLint i) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glArrayElement(i); -} - -void gl1_2_glResetMinmax(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glResetMinmax(target); -} - -void gl1_2_glResetHistogram(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glResetHistogram(target); -} - -void gl1_2_glMinmax(void *_glfuncs, GLenum target, GLenum internalFormat, GLboolean sink) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMinmax(target, internalFormat, sink); -} - -void gl1_2_glHistogram(void *_glfuncs, GLenum target, GLsizei width, GLenum internalFormat, GLboolean sink) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glHistogram(target, width, internalFormat, sink); -} - -void gl1_2_glGetMinmaxParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMinmaxParameteriv(target, pname, params); -} - -void gl1_2_glGetMinmaxParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMinmaxParameterfv(target, pname, params); -} - -void gl1_2_glGetMinmax(void *_glfuncs, GLenum target, GLboolean reset, GLenum format, GLenum gltype, GLvoid* values) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMinmax(target, reset, format, gltype, values); -} - -void gl1_2_glGetHistogramParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetHistogramParameteriv(target, pname, params); -} - -void gl1_2_glGetHistogramParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetHistogramParameterfv(target, pname, params); -} - -void gl1_2_glGetHistogram(void *_glfuncs, GLenum target, GLboolean reset, GLenum format, GLenum gltype, GLvoid* values) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetHistogram(target, reset, format, gltype, values); -} - -void gl1_2_glSeparableFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* row, const GLvoid* column) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSeparableFilter2D(target, internalFormat, width, height, format, gltype, row, column); -} - -void gl1_2_glGetSeparableFilter(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* row, GLvoid* column, GLvoid* span) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetSeparableFilter(target, format, gltype, row, column, span); -} - -void gl1_2_glGetConvolutionParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetConvolutionParameteriv(target, pname, params); -} - -void gl1_2_glGetConvolutionParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetConvolutionParameterfv(target, pname, params); -} - -void gl1_2_glGetConvolutionFilter(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* image) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetConvolutionFilter(target, format, gltype, image); -} - -void gl1_2_glCopyConvolutionFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyConvolutionFilter2D(target, internalFormat, x, y, width, height); -} - -void gl1_2_glCopyConvolutionFilter1D(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyConvolutionFilter1D(target, internalFormat, x, y, width); -} - -void gl1_2_glConvolutionParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionParameteriv(target, pname, params); -} - -void gl1_2_glConvolutionParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint params) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionParameteri(target, pname, params); -} - -void gl1_2_glConvolutionParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionParameterfv(target, pname, params); -} - -void gl1_2_glConvolutionParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat params) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionParameterf(target, pname, params); -} - -void gl1_2_glConvolutionFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* image) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionFilter2D(target, internalFormat, width, height, format, gltype, image); -} - -void gl1_2_glConvolutionFilter1D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum gltype, const GLvoid* image) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionFilter1D(target, internalFormat, width, format, gltype, image); -} - -void gl1_2_glCopyColorSubTable(void *_glfuncs, GLenum target, GLsizei start, GLint x, GLint y, GLsizei width) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyColorSubTable(target, start, x, y, width); -} - -void gl1_2_glColorSubTable(void *_glfuncs, GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum gltype, const GLvoid* data) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorSubTable(target, start, count, format, gltype, data); -} - -void gl1_2_glGetColorTableParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetColorTableParameteriv(target, pname, params); -} - -void gl1_2_glGetColorTableParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetColorTableParameterfv(target, pname, params); -} - -void gl1_2_glGetColorTable(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* table) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetColorTable(target, format, gltype, table); -} - -void gl1_2_glCopyColorTable(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyColorTable(target, internalFormat, x, y, width); -} - -void gl1_2_glColorTableParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorTableParameteriv(target, pname, params); -} - -void gl1_2_glColorTableParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorTableParameterfv(target, pname, params); -} - -void gl1_2_glColorTable(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum gltype, const GLvoid* table) -{ - QOpenGLFunctions_1_2* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorTable(target, internalFormat, width, format, gltype, table); -} - diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/1.2/funcs.h b/Godeps/_workspace/src/github.com/obscuren/qml/gl/1.2/funcs.h deleted file mode 100644 index 958c34935d..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/1.2/funcs.h +++ /dev/null @@ -1,414 +0,0 @@ - -// ** file automatically generated by glgen -- do not edit manually ** - -#ifndef __cplusplus -#include -#include -typedef unsigned int GLenum; -typedef unsigned char GLboolean; -typedef unsigned int GLbitfield; -typedef void GLvoid; -typedef char GLchar; -typedef signed char GLbyte; /* 1-byte signed */ -typedef short GLshort; /* 2-byte signed */ -typedef int GLint; /* 4-byte signed */ -typedef unsigned char GLubyte; /* 1-byte unsigned */ -typedef unsigned short GLushort; /* 2-byte unsigned */ -typedef unsigned int GLuint; /* 4-byte unsigned */ -typedef int GLsizei; /* 4-byte signed */ -typedef float GLfloat; /* single precision float */ -typedef float GLclampf; /* single precision float in [0,1] */ -typedef double GLdouble; /* double precision float */ -typedef double GLclampd; /* double precision float in [0,1] */ -typedef int64_t GLint64; -typedef uint64_t GLuint64; -typedef ptrdiff_t GLintptr; -typedef ptrdiff_t GLsizeiptr; -typedef ptrdiff_t GLintptrARB; -typedef ptrdiff_t GLsizeiptrARB; -typedef struct __GLsync *GLsync; -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -void *gl1_2_funcs(); - -void gl1_2_glViewport(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height); -void gl1_2_glDepthRange(void *_glfuncs, GLdouble nearVal, GLdouble farVal); -GLboolean gl1_2_glIsEnabled(void *_glfuncs, GLenum cap); -void gl1_2_glGetTexLevelParameteriv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLint* params); -void gl1_2_glGetTexLevelParameterfv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLfloat* params); -void gl1_2_glGetTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl1_2_glGetTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl1_2_glGetTexImage(void *_glfuncs, GLenum target, GLint level, GLenum format, GLenum gltype, GLvoid* pixels); -void gl1_2_glGetIntegerv(void *_glfuncs, GLenum pname, GLint* params); -void gl1_2_glGetFloatv(void *_glfuncs, GLenum pname, GLfloat* params); -GLenum gl1_2_glGetError(void *_glfuncs); -void gl1_2_glGetDoublev(void *_glfuncs, GLenum pname, GLdouble* params); -void gl1_2_glGetBooleanv(void *_glfuncs, GLenum pname, GLboolean* params); -void gl1_2_glReadPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum gltype, GLvoid* pixels); -void gl1_2_glReadBuffer(void *_glfuncs, GLenum mode); -void gl1_2_glPixelStorei(void *_glfuncs, GLenum pname, GLint param); -void gl1_2_glPixelStoref(void *_glfuncs, GLenum pname, GLfloat param); -void gl1_2_glDepthFunc(void *_glfuncs, GLenum glfunc); -void gl1_2_glStencilOp(void *_glfuncs, GLenum fail, GLenum zfail, GLenum zpass); -void gl1_2_glStencilFunc(void *_glfuncs, GLenum glfunc, GLint ref, GLuint mask); -void gl1_2_glLogicOp(void *_glfuncs, GLenum opcode); -void gl1_2_glBlendFunc(void *_glfuncs, GLenum sfactor, GLenum dfactor); -void gl1_2_glFlush(void *_glfuncs); -void gl1_2_glFinish(void *_glfuncs); -void gl1_2_glEnable(void *_glfuncs, GLenum cap); -void gl1_2_glDisable(void *_glfuncs, GLenum cap); -void gl1_2_glDepthMask(void *_glfuncs, GLboolean flag); -void gl1_2_glColorMask(void *_glfuncs, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); -void gl1_2_glStencilMask(void *_glfuncs, GLuint mask); -void gl1_2_glClearDepth(void *_glfuncs, GLdouble depth); -void gl1_2_glClearStencil(void *_glfuncs, GLint s); -void gl1_2_glClearColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl1_2_glClear(void *_glfuncs, GLbitfield mask); -void gl1_2_glDrawBuffer(void *_glfuncs, GLenum mode); -void gl1_2_glTexImage2D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl1_2_glTexImage1D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl1_2_glTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl1_2_glTexParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint param); -void gl1_2_glTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params); -void gl1_2_glTexParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param); -void gl1_2_glScissor(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height); -void gl1_2_glPolygonMode(void *_glfuncs, GLenum face, GLenum mode); -void gl1_2_glPointSize(void *_glfuncs, GLfloat size); -void gl1_2_glLineWidth(void *_glfuncs, GLfloat width); -void gl1_2_glHint(void *_glfuncs, GLenum target, GLenum mode); -void gl1_2_glFrontFace(void *_glfuncs, GLenum mode); -void gl1_2_glCullFace(void *_glfuncs, GLenum mode); -void gl1_2_glIndexubv(void *_glfuncs, const GLubyte* c); -void gl1_2_glIndexub(void *_glfuncs, GLubyte c); -GLboolean gl1_2_glIsTexture(void *_glfuncs, GLuint texture); -void gl1_2_glGenTextures(void *_glfuncs, GLsizei n, GLuint* textures); -void gl1_2_glDeleteTextures(void *_glfuncs, GLsizei n, const GLuint* textures); -void gl1_2_glBindTexture(void *_glfuncs, GLenum target, GLuint texture); -void gl1_2_glTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl1_2_glTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl1_2_glCopyTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -void gl1_2_glCopyTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -void gl1_2_glCopyTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -void gl1_2_glCopyTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border); -void gl1_2_glPolygonOffset(void *_glfuncs, GLfloat factor, GLfloat units); -void gl1_2_glDrawElements(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices); -void gl1_2_glDrawArrays(void *_glfuncs, GLenum mode, GLint first, GLsizei count); -void gl1_2_glCopyTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -void gl1_2_glTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl1_2_glTexImage3D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl1_2_glDrawRangeElements(void *_glfuncs, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum gltype, const GLvoid* indices); -void gl1_2_glBlendEquation(void *_glfuncs, GLenum mode); -void gl1_2_glBlendColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl1_2_glTranslatef(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl1_2_glTranslated(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl1_2_glScalef(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl1_2_glScaled(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl1_2_glRotatef(void *_glfuncs, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); -void gl1_2_glRotated(void *_glfuncs, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); -void gl1_2_glPushMatrix(void *_glfuncs); -void gl1_2_glPopMatrix(void *_glfuncs); -void gl1_2_glOrtho(void *_glfuncs, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -void gl1_2_glMultMatrixd(void *_glfuncs, const GLdouble* m); -void gl1_2_glMultMatrixf(void *_glfuncs, const GLfloat* m); -void gl1_2_glMatrixMode(void *_glfuncs, GLenum mode); -void gl1_2_glLoadMatrixd(void *_glfuncs, const GLdouble* m); -void gl1_2_glLoadMatrixf(void *_glfuncs, const GLfloat* m); -void gl1_2_glLoadIdentity(void *_glfuncs); -void gl1_2_glFrustum(void *_glfuncs, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -GLboolean gl1_2_glIsList(void *_glfuncs, GLuint list); -void gl1_2_glGetTexGeniv(void *_glfuncs, GLenum coord, GLenum pname, GLint* params); -void gl1_2_glGetTexGenfv(void *_glfuncs, GLenum coord, GLenum pname, GLfloat* params); -void gl1_2_glGetTexGendv(void *_glfuncs, GLenum coord, GLenum pname, GLdouble* params); -void gl1_2_glGetTexEnviv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl1_2_glGetTexEnvfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl1_2_glGetPolygonStipple(void *_glfuncs, GLubyte* mask); -void gl1_2_glGetPixelMapusv(void *_glfuncs, GLenum glmap, GLushort* values); -void gl1_2_glGetPixelMapuiv(void *_glfuncs, GLenum glmap, GLuint* values); -void gl1_2_glGetPixelMapfv(void *_glfuncs, GLenum glmap, GLfloat* values); -void gl1_2_glGetMaterialiv(void *_glfuncs, GLenum face, GLenum pname, GLint* params); -void gl1_2_glGetMaterialfv(void *_glfuncs, GLenum face, GLenum pname, GLfloat* params); -void gl1_2_glGetMapiv(void *_glfuncs, GLenum target, GLenum query, GLint* v); -void gl1_2_glGetMapfv(void *_glfuncs, GLenum target, GLenum query, GLfloat* v); -void gl1_2_glGetMapdv(void *_glfuncs, GLenum target, GLenum query, GLdouble* v); -void gl1_2_glGetLightiv(void *_glfuncs, GLenum light, GLenum pname, GLint* params); -void gl1_2_glGetLightfv(void *_glfuncs, GLenum light, GLenum pname, GLfloat* params); -void gl1_2_glGetClipPlane(void *_glfuncs, GLenum plane, GLdouble* equation); -void gl1_2_glDrawPixels(void *_glfuncs, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl1_2_glCopyPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum gltype); -void gl1_2_glPixelMapusv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLushort* values); -void gl1_2_glPixelMapuiv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLuint* values); -void gl1_2_glPixelMapfv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLfloat* values); -void gl1_2_glPixelTransferi(void *_glfuncs, GLenum pname, GLint param); -void gl1_2_glPixelTransferf(void *_glfuncs, GLenum pname, GLfloat param); -void gl1_2_glPixelZoom(void *_glfuncs, GLfloat xfactor, GLfloat yfactor); -void gl1_2_glAlphaFunc(void *_glfuncs, GLenum glfunc, GLfloat ref); -void gl1_2_glEvalPoint2(void *_glfuncs, GLint i, GLint j); -void gl1_2_glEvalMesh2(void *_glfuncs, GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2); -void gl1_2_glEvalPoint1(void *_glfuncs, GLint i); -void gl1_2_glEvalMesh1(void *_glfuncs, GLenum mode, GLint i1, GLint i2); -void gl1_2_glEvalCoord2fv(void *_glfuncs, const GLfloat* u); -void gl1_2_glEvalCoord2f(void *_glfuncs, GLfloat u, GLfloat v); -void gl1_2_glEvalCoord2dv(void *_glfuncs, const GLdouble* u); -void gl1_2_glEvalCoord2d(void *_glfuncs, GLdouble u, GLdouble v); -void gl1_2_glEvalCoord1fv(void *_glfuncs, const GLfloat* u); -void gl1_2_glEvalCoord1f(void *_glfuncs, GLfloat u); -void gl1_2_glEvalCoord1dv(void *_glfuncs, const GLdouble* u); -void gl1_2_glEvalCoord1d(void *_glfuncs, GLdouble u); -void gl1_2_glMapGrid2f(void *_glfuncs, GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2); -void gl1_2_glMapGrid2d(void *_glfuncs, GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2); -void gl1_2_glMapGrid1f(void *_glfuncs, GLint un, GLfloat u1, GLfloat u2); -void gl1_2_glMapGrid1d(void *_glfuncs, GLint un, GLdouble u1, GLdouble u2); -void gl1_2_glMap2f(void *_glfuncs, GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat* points); -void gl1_2_glMap2d(void *_glfuncs, GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble* points); -void gl1_2_glMap1f(void *_glfuncs, GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat* points); -void gl1_2_glMap1d(void *_glfuncs, GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble* points); -void gl1_2_glPushAttrib(void *_glfuncs, GLbitfield mask); -void gl1_2_glPopAttrib(void *_glfuncs); -void gl1_2_glAccum(void *_glfuncs, GLenum op, GLfloat value); -void gl1_2_glIndexMask(void *_glfuncs, GLuint mask); -void gl1_2_glClearIndex(void *_glfuncs, GLfloat c); -void gl1_2_glClearAccum(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl1_2_glPushName(void *_glfuncs, GLuint name); -void gl1_2_glPopName(void *_glfuncs); -void gl1_2_glPassThrough(void *_glfuncs, GLfloat token); -void gl1_2_glLoadName(void *_glfuncs, GLuint name); -void gl1_2_glInitNames(void *_glfuncs); -GLint gl1_2_glRenderMode(void *_glfuncs, GLenum mode); -void gl1_2_glSelectBuffer(void *_glfuncs, GLsizei size, GLuint* buffer); -void gl1_2_glFeedbackBuffer(void *_glfuncs, GLsizei size, GLenum gltype, GLfloat* buffer); -void gl1_2_glTexGeniv(void *_glfuncs, GLenum coord, GLenum pname, const GLint* params); -void gl1_2_glTexGeni(void *_glfuncs, GLenum coord, GLenum pname, GLint param); -void gl1_2_glTexGenfv(void *_glfuncs, GLenum coord, GLenum pname, const GLfloat* params); -void gl1_2_glTexGenf(void *_glfuncs, GLenum coord, GLenum pname, GLfloat param); -void gl1_2_glTexGendv(void *_glfuncs, GLenum coord, GLenum pname, const GLdouble* params); -void gl1_2_glTexGend(void *_glfuncs, GLenum coord, GLenum pname, GLdouble param); -void gl1_2_glTexEnviv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl1_2_glTexEnvi(void *_glfuncs, GLenum target, GLenum pname, GLint param); -void gl1_2_glTexEnvfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params); -void gl1_2_glTexEnvf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param); -void gl1_2_glShadeModel(void *_glfuncs, GLenum mode); -void gl1_2_glPolygonStipple(void *_glfuncs, const GLubyte* mask); -void gl1_2_glMaterialiv(void *_glfuncs, GLenum face, GLenum pname, const GLint* params); -void gl1_2_glMateriali(void *_glfuncs, GLenum face, GLenum pname, GLint param); -void gl1_2_glMaterialfv(void *_glfuncs, GLenum face, GLenum pname, const GLfloat* params); -void gl1_2_glMaterialf(void *_glfuncs, GLenum face, GLenum pname, GLfloat param); -void gl1_2_glLineStipple(void *_glfuncs, GLint factor, GLushort pattern); -void gl1_2_glLightModeliv(void *_glfuncs, GLenum pname, const GLint* params); -void gl1_2_glLightModeli(void *_glfuncs, GLenum pname, GLint param); -void gl1_2_glLightModelfv(void *_glfuncs, GLenum pname, const GLfloat* params); -void gl1_2_glLightModelf(void *_glfuncs, GLenum pname, GLfloat param); -void gl1_2_glLightiv(void *_glfuncs, GLenum light, GLenum pname, const GLint* params); -void gl1_2_glLighti(void *_glfuncs, GLenum light, GLenum pname, GLint param); -void gl1_2_glLightfv(void *_glfuncs, GLenum light, GLenum pname, const GLfloat* params); -void gl1_2_glLightf(void *_glfuncs, GLenum light, GLenum pname, GLfloat param); -void gl1_2_glFogiv(void *_glfuncs, GLenum pname, const GLint* params); -void gl1_2_glFogi(void *_glfuncs, GLenum pname, GLint param); -void gl1_2_glFogfv(void *_glfuncs, GLenum pname, const GLfloat* params); -void gl1_2_glFogf(void *_glfuncs, GLenum pname, GLfloat param); -void gl1_2_glColorMaterial(void *_glfuncs, GLenum face, GLenum mode); -void gl1_2_glClipPlane(void *_glfuncs, GLenum plane, const GLdouble* equation); -void gl1_2_glVertex4sv(void *_glfuncs, const GLshort* v); -void gl1_2_glVertex4s(void *_glfuncs, GLshort x, GLshort y, GLshort z, GLshort w); -void gl1_2_glVertex4iv(void *_glfuncs, const GLint* v); -void gl1_2_glVertex4i(void *_glfuncs, GLint x, GLint y, GLint z, GLint w); -void gl1_2_glVertex4fv(void *_glfuncs, const GLfloat* v); -void gl1_2_glVertex4f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -void gl1_2_glVertex4dv(void *_glfuncs, const GLdouble* v); -void gl1_2_glVertex4d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -void gl1_2_glVertex3sv(void *_glfuncs, const GLshort* v); -void gl1_2_glVertex3s(void *_glfuncs, GLshort x, GLshort y, GLshort z); -void gl1_2_glVertex3iv(void *_glfuncs, const GLint* v); -void gl1_2_glVertex3i(void *_glfuncs, GLint x, GLint y, GLint z); -void gl1_2_glVertex3fv(void *_glfuncs, const GLfloat* v); -void gl1_2_glVertex3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl1_2_glVertex3dv(void *_glfuncs, const GLdouble* v); -void gl1_2_glVertex3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl1_2_glVertex2sv(void *_glfuncs, const GLshort* v); -void gl1_2_glVertex2s(void *_glfuncs, GLshort x, GLshort y); -void gl1_2_glVertex2iv(void *_glfuncs, const GLint* v); -void gl1_2_glVertex2i(void *_glfuncs, GLint x, GLint y); -void gl1_2_glVertex2fv(void *_glfuncs, const GLfloat* v); -void gl1_2_glVertex2f(void *_glfuncs, GLfloat x, GLfloat y); -void gl1_2_glVertex2dv(void *_glfuncs, const GLdouble* v); -void gl1_2_glVertex2d(void *_glfuncs, GLdouble x, GLdouble y); -void gl1_2_glTexCoord4sv(void *_glfuncs, const GLshort* v); -void gl1_2_glTexCoord4s(void *_glfuncs, GLshort s, GLshort t, GLshort r, GLshort q); -void gl1_2_glTexCoord4iv(void *_glfuncs, const GLint* v); -void gl1_2_glTexCoord4i(void *_glfuncs, GLint s, GLint t, GLint r, GLint q); -void gl1_2_glTexCoord4fv(void *_glfuncs, const GLfloat* v); -void gl1_2_glTexCoord4f(void *_glfuncs, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -void gl1_2_glTexCoord4dv(void *_glfuncs, const GLdouble* v); -void gl1_2_glTexCoord4d(void *_glfuncs, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -void gl1_2_glTexCoord3sv(void *_glfuncs, const GLshort* v); -void gl1_2_glTexCoord3s(void *_glfuncs, GLshort s, GLshort t, GLshort r); -void gl1_2_glTexCoord3iv(void *_glfuncs, const GLint* v); -void gl1_2_glTexCoord3i(void *_glfuncs, GLint s, GLint t, GLint r); -void gl1_2_glTexCoord3fv(void *_glfuncs, const GLfloat* v); -void gl1_2_glTexCoord3f(void *_glfuncs, GLfloat s, GLfloat t, GLfloat r); -void gl1_2_glTexCoord3dv(void *_glfuncs, const GLdouble* v); -void gl1_2_glTexCoord3d(void *_glfuncs, GLdouble s, GLdouble t, GLdouble r); -void gl1_2_glTexCoord2sv(void *_glfuncs, const GLshort* v); -void gl1_2_glTexCoord2s(void *_glfuncs, GLshort s, GLshort t); -void gl1_2_glTexCoord2iv(void *_glfuncs, const GLint* v); -void gl1_2_glTexCoord2i(void *_glfuncs, GLint s, GLint t); -void gl1_2_glTexCoord2fv(void *_glfuncs, const GLfloat* v); -void gl1_2_glTexCoord2f(void *_glfuncs, GLfloat s, GLfloat t); -void gl1_2_glTexCoord2dv(void *_glfuncs, const GLdouble* v); -void gl1_2_glTexCoord2d(void *_glfuncs, GLdouble s, GLdouble t); -void gl1_2_glTexCoord1sv(void *_glfuncs, const GLshort* v); -void gl1_2_glTexCoord1s(void *_glfuncs, GLshort s); -void gl1_2_glTexCoord1iv(void *_glfuncs, const GLint* v); -void gl1_2_glTexCoord1i(void *_glfuncs, GLint s); -void gl1_2_glTexCoord1fv(void *_glfuncs, const GLfloat* v); -void gl1_2_glTexCoord1f(void *_glfuncs, GLfloat s); -void gl1_2_glTexCoord1dv(void *_glfuncs, const GLdouble* v); -void gl1_2_glTexCoord1d(void *_glfuncs, GLdouble s); -void gl1_2_glRectsv(void *_glfuncs, const GLshort* v1, const GLshort* v2); -void gl1_2_glRects(void *_glfuncs, GLshort x1, GLshort y1, GLshort x2, GLshort y2); -void gl1_2_glRectiv(void *_glfuncs, const GLint* v1, const GLint* v2); -void gl1_2_glRecti(void *_glfuncs, GLint x1, GLint y1, GLint x2, GLint y2); -void gl1_2_glRectfv(void *_glfuncs, const GLfloat* v1, const GLfloat* v2); -void gl1_2_glRectf(void *_glfuncs, GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2); -void gl1_2_glRectdv(void *_glfuncs, const GLdouble* v1, const GLdouble* v2); -void gl1_2_glRectd(void *_glfuncs, GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2); -void gl1_2_glRasterPos4sv(void *_glfuncs, const GLshort* v); -void gl1_2_glRasterPos4s(void *_glfuncs, GLshort x, GLshort y, GLshort z, GLshort w); -void gl1_2_glRasterPos4iv(void *_glfuncs, const GLint* v); -void gl1_2_glRasterPos4i(void *_glfuncs, GLint x, GLint y, GLint z, GLint w); -void gl1_2_glRasterPos4fv(void *_glfuncs, const GLfloat* v); -void gl1_2_glRasterPos4f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -void gl1_2_glRasterPos4dv(void *_glfuncs, const GLdouble* v); -void gl1_2_glRasterPos4d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -void gl1_2_glRasterPos3sv(void *_glfuncs, const GLshort* v); -void gl1_2_glRasterPos3s(void *_glfuncs, GLshort x, GLshort y, GLshort z); -void gl1_2_glRasterPos3iv(void *_glfuncs, const GLint* v); -void gl1_2_glRasterPos3i(void *_glfuncs, GLint x, GLint y, GLint z); -void gl1_2_glRasterPos3fv(void *_glfuncs, const GLfloat* v); -void gl1_2_glRasterPos3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl1_2_glRasterPos3dv(void *_glfuncs, const GLdouble* v); -void gl1_2_glRasterPos3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl1_2_glRasterPos2sv(void *_glfuncs, const GLshort* v); -void gl1_2_glRasterPos2s(void *_glfuncs, GLshort x, GLshort y); -void gl1_2_glRasterPos2iv(void *_glfuncs, const GLint* v); -void gl1_2_glRasterPos2i(void *_glfuncs, GLint x, GLint y); -void gl1_2_glRasterPos2fv(void *_glfuncs, const GLfloat* v); -void gl1_2_glRasterPos2f(void *_glfuncs, GLfloat x, GLfloat y); -void gl1_2_glRasterPos2dv(void *_glfuncs, const GLdouble* v); -void gl1_2_glRasterPos2d(void *_glfuncs, GLdouble x, GLdouble y); -void gl1_2_glNormal3sv(void *_glfuncs, const GLshort* v); -void gl1_2_glNormal3s(void *_glfuncs, GLshort nx, GLshort ny, GLshort nz); -void gl1_2_glNormal3iv(void *_glfuncs, const GLint* v); -void gl1_2_glNormal3i(void *_glfuncs, GLint nx, GLint ny, GLint nz); -void gl1_2_glNormal3fv(void *_glfuncs, const GLfloat* v); -void gl1_2_glNormal3f(void *_glfuncs, GLfloat nx, GLfloat ny, GLfloat nz); -void gl1_2_glNormal3dv(void *_glfuncs, const GLdouble* v); -void gl1_2_glNormal3d(void *_glfuncs, GLdouble nx, GLdouble ny, GLdouble nz); -void gl1_2_glNormal3bv(void *_glfuncs, const GLbyte* v); -void gl1_2_glNormal3b(void *_glfuncs, GLbyte nx, GLbyte ny, GLbyte nz); -void gl1_2_glIndexsv(void *_glfuncs, const GLshort* c); -void gl1_2_glIndexs(void *_glfuncs, GLshort c); -void gl1_2_glIndexiv(void *_glfuncs, const GLint* c); -void gl1_2_glIndexi(void *_glfuncs, GLint c); -void gl1_2_glIndexfv(void *_glfuncs, const GLfloat* c); -void gl1_2_glIndexf(void *_glfuncs, GLfloat c); -void gl1_2_glIndexdv(void *_glfuncs, const GLdouble* c); -void gl1_2_glIndexd(void *_glfuncs, GLdouble c); -void gl1_2_glEnd(void *_glfuncs); -void gl1_2_glEdgeFlagv(void *_glfuncs, const GLboolean* flag); -void gl1_2_glEdgeFlag(void *_glfuncs, GLboolean flag); -void gl1_2_glColor4usv(void *_glfuncs, const GLushort* v); -void gl1_2_glColor4us(void *_glfuncs, GLushort red, GLushort green, GLushort blue, GLushort alpha); -void gl1_2_glColor4uiv(void *_glfuncs, const GLuint* v); -void gl1_2_glColor4ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue, GLuint alpha); -void gl1_2_glColor4ubv(void *_glfuncs, const GLubyte* v); -void gl1_2_glColor4ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha); -void gl1_2_glColor4sv(void *_glfuncs, const GLshort* v); -void gl1_2_glColor4s(void *_glfuncs, GLshort red, GLshort green, GLshort blue, GLshort alpha); -void gl1_2_glColor4iv(void *_glfuncs, const GLint* v); -void gl1_2_glColor4i(void *_glfuncs, GLint red, GLint green, GLint blue, GLint alpha); -void gl1_2_glColor4fv(void *_glfuncs, const GLfloat* v); -void gl1_2_glColor4f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl1_2_glColor4dv(void *_glfuncs, const GLdouble* v); -void gl1_2_glColor4d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha); -void gl1_2_glColor4bv(void *_glfuncs, const GLbyte* v); -void gl1_2_glColor4b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha); -void gl1_2_glColor3usv(void *_glfuncs, const GLushort* v); -void gl1_2_glColor3us(void *_glfuncs, GLushort red, GLushort green, GLushort blue); -void gl1_2_glColor3uiv(void *_glfuncs, const GLuint* v); -void gl1_2_glColor3ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue); -void gl1_2_glColor3ubv(void *_glfuncs, const GLubyte* v); -void gl1_2_glColor3ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue); -void gl1_2_glColor3sv(void *_glfuncs, const GLshort* v); -void gl1_2_glColor3s(void *_glfuncs, GLshort red, GLshort green, GLshort blue); -void gl1_2_glColor3iv(void *_glfuncs, const GLint* v); -void gl1_2_glColor3i(void *_glfuncs, GLint red, GLint green, GLint blue); -void gl1_2_glColor3fv(void *_glfuncs, const GLfloat* v); -void gl1_2_glColor3f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue); -void gl1_2_glColor3dv(void *_glfuncs, const GLdouble* v); -void gl1_2_glColor3d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue); -void gl1_2_glColor3bv(void *_glfuncs, const GLbyte* v); -void gl1_2_glColor3b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue); -void gl1_2_glBitmap(void *_glfuncs, GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte* bitmap); -void gl1_2_glBegin(void *_glfuncs, GLenum mode); -void gl1_2_glListBase(void *_glfuncs, GLuint base); -GLuint gl1_2_glGenLists(void *_glfuncs, GLsizei range_); -void gl1_2_glDeleteLists(void *_glfuncs, GLuint list, GLsizei range_); -void gl1_2_glCallLists(void *_glfuncs, GLsizei n, GLenum gltype, const GLvoid* lists); -void gl1_2_glCallList(void *_glfuncs, GLuint list); -void gl1_2_glEndList(void *_glfuncs); -void gl1_2_glNewList(void *_glfuncs, GLuint list, GLenum mode); -void gl1_2_glPushClientAttrib(void *_glfuncs, GLbitfield mask); -void gl1_2_glPopClientAttrib(void *_glfuncs); -void gl1_2_glPrioritizeTextures(void *_glfuncs, GLsizei n, const GLuint* textures, const GLfloat* priorities); -GLboolean gl1_2_glAreTexturesResident(void *_glfuncs, GLsizei n, const GLuint* textures, GLboolean* residences); -void gl1_2_glVertexPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl1_2_glTexCoordPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl1_2_glNormalPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl1_2_glInterleavedArrays(void *_glfuncs, GLenum format, GLsizei stride, const GLvoid* pointer); -void gl1_2_glIndexPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl1_2_glEnableClientState(void *_glfuncs, GLenum array); -void gl1_2_glEdgeFlagPointer(void *_glfuncs, GLsizei stride, const GLvoid* pointer); -void gl1_2_glDisableClientState(void *_glfuncs, GLenum array); -void gl1_2_glColorPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl1_2_glArrayElement(void *_glfuncs, GLint i); -void gl1_2_glResetMinmax(void *_glfuncs, GLenum target); -void gl1_2_glResetHistogram(void *_glfuncs, GLenum target); -void gl1_2_glMinmax(void *_glfuncs, GLenum target, GLenum internalFormat, GLboolean sink); -void gl1_2_glHistogram(void *_glfuncs, GLenum target, GLsizei width, GLenum internalFormat, GLboolean sink); -void gl1_2_glGetMinmaxParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl1_2_glGetMinmaxParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl1_2_glGetMinmax(void *_glfuncs, GLenum target, GLboolean reset, GLenum format, GLenum gltype, GLvoid* values); -void gl1_2_glGetHistogramParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl1_2_glGetHistogramParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl1_2_glGetHistogram(void *_glfuncs, GLenum target, GLboolean reset, GLenum format, GLenum gltype, GLvoid* values); -void gl1_2_glSeparableFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* row, const GLvoid* column); -void gl1_2_glGetSeparableFilter(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* row, GLvoid* column, GLvoid* span); -void gl1_2_glGetConvolutionParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl1_2_glGetConvolutionParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl1_2_glGetConvolutionFilter(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* image); -void gl1_2_glCopyConvolutionFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height); -void gl1_2_glCopyConvolutionFilter1D(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width); -void gl1_2_glConvolutionParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl1_2_glConvolutionParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint params); -void gl1_2_glConvolutionParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params); -void gl1_2_glConvolutionParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat params); -void gl1_2_glConvolutionFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* image); -void gl1_2_glConvolutionFilter1D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum gltype, const GLvoid* image); -void gl1_2_glCopyColorSubTable(void *_glfuncs, GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); -void gl1_2_glColorSubTable(void *_glfuncs, GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum gltype, const GLvoid* data); -void gl1_2_glGetColorTableParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl1_2_glGetColorTableParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl1_2_glGetColorTable(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* table); -void gl1_2_glCopyColorTable(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width); -void gl1_2_glColorTableParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl1_2_glColorTableParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params); -void gl1_2_glColorTable(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum gltype, const GLvoid* table); - - -#ifdef __cplusplus -} // extern "C" -#endif diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/1.2/gl.go b/Godeps/_workspace/src/github.com/obscuren/qml/gl/1.2/gl.go deleted file mode 100644 index a3f089e74a..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/1.2/gl.go +++ /dev/null @@ -1,3152 +0,0 @@ -// ** file automatically generated by glgen -- do not edit manually ** - -package GL - -// #cgo CXXFLAGS: -std=c++0x -pedantic-errors -Wall -fno-strict-aliasing -// #cgo LDFLAGS: -lstdc++ -// #cgo pkg-config: Qt5Core Qt5OpenGL -// -// #include "funcs.h" -// -// void free(void*); -// -import "C" - -import ( - "fmt" - "reflect" - "unsafe" - - "gopkg.in/qml.v1/gl/glbase" -) - -// API returns a value that offers methods matching the OpenGL version 1.2 API. -// -// The returned API must not be used after the provided OpenGL context becomes invalid. -func API(context glbase.Contexter) *GL { - gl := &GL{} - gl.funcs = C.gl1_2_funcs() - if gl.funcs == nil { - panic(fmt.Errorf("OpenGL version 1.2 is not available")) - } - return gl -} - -// GL implements the OpenGL version 1.2 API. Values of this -// type must be created via the API function, and it must not be used after -// the associated OpenGL context becomes invalid. -type GL struct { - funcs unsafe.Pointer -} - -const ( - FALSE = 0 - TRUE = 1 - NONE = 0 - - BYTE = 0x1400 - UNSIGNED_BYTE = 0x1401 - SHORT = 0x1402 - UNSIGNED_SHORT = 0x1403 - INT = 0x1404 - UNSIGNED_INT = 0x1405 - FLOAT = 0x1406 - N2_BYTES = 0x1407 - N3_BYTES = 0x1408 - N4_BYTES = 0x1409 - DOUBLE = 0x140A - - ACCUM = 0x0100 - LOAD = 0x0101 - RETURN = 0x0102 - MULT = 0x0103 - ADD = 0x0104 - - ACCUM_BUFFER_BIT = 0x00000200 - ALL_ATTRIB_BITS = 0xFFFFFFFF - COLOR_BUFFER_BIT = 0x00004000 - CURRENT_BIT = 0x00000001 - DEPTH_BUFFER_BIT = 0x00000100 - ENABLE_BIT = 0x00002000 - EVAL_BIT = 0x00010000 - FOG_BIT = 0x00000080 - HINT_BIT = 0x00008000 - LIGHTING_BIT = 0x00000040 - LINE_BIT = 0x00000004 - LIST_BIT = 0x00020000 - PIXEL_MODE_BIT = 0x00000020 - POINT_BIT = 0x00000002 - POLYGON_BIT = 0x00000008 - POLYGON_STIPPLE_BIT = 0x00000010 - SCISSOR_BIT = 0x00080000 - STENCIL_BUFFER_BIT = 0x00000400 - TEXTURE_BIT = 0x00040000 - TRANSFORM_BIT = 0x00001000 - VIEWPORT_BIT = 0x00000800 - - ALWAYS = 0x0207 - EQUAL = 0x0202 - GEQUAL = 0x0206 - GREATER = 0x0204 - LEQUAL = 0x0203 - LESS = 0x0201 - NEVER = 0x0200 - NOTEQUAL = 0x0205 - - LOGIC_OP = 0x0BF1 - - DST_ALPHA = 0x0304 - ONE = 1 - ONE_MINUS_DST_ALPHA = 0x0305 - ONE_MINUS_SRC_ALPHA = 0x0303 - ONE_MINUS_SRC_COLOR = 0x0301 - SRC_ALPHA = 0x0302 - SRC_COLOR = 0x0300 - ZERO = 0 - - DST_COLOR = 0x0306 - ONE_MINUS_DST_COLOR = 0x0307 - SRC_ALPHA_SATURATE = 0x0308 - - CLIENT_ALL_ATTRIB_BITS = 0xFFFFFFFF - CLIENT_PIXEL_STORE_BIT = 0x00000001 - CLIENT_VERTEX_ARRAY_BIT = 0x00000002 - - CLIP_PLANE0 = 0x3000 - CLIP_PLANE1 = 0x3001 - CLIP_PLANE2 = 0x3002 - CLIP_PLANE3 = 0x3003 - CLIP_PLANE4 = 0x3004 - CLIP_PLANE5 = 0x3005 - - BACK = 0x0405 - FRONT = 0x0404 - FRONT_AND_BACK = 0x0408 - - AMBIENT = 0x1200 - AMBIENT_AND_DIFFUSE = 0x1602 - DIFFUSE = 0x1201 - EMISSION = 0x1600 - SPECULAR = 0x1202 - - AUX0 = 0x0409 - AUX1 = 0x040A - AUX2 = 0x040B - AUX3 = 0x040C - BACK_LEFT = 0x0402 - BACK_RIGHT = 0x0403 - FRONT_LEFT = 0x0400 - FRONT_RIGHT = 0x0401 - LEFT = 0x0406 - RIGHT = 0x0407 - - ALPHA_TEST = 0x0BC0 - AUTO_NORMAL = 0x0D80 - BLEND = 0x0BE2 - COLOR_ARRAY = 0x8076 - COLOR_LOGIC_OP = 0x0BF2 - COLOR_MATERIAL = 0x0B57 - CULL_FACE = 0x0B44 - DEPTH_TEST = 0x0B71 - DITHER = 0x0BD0 - EDGE_FLAG_ARRAY = 0x8079 - FOG = 0x0B60 - INDEX_ARRAY = 0x8077 - INDEX_LOGIC_OP = 0x0BF1 - LIGHT0 = 0x4000 - LIGHT1 = 0x4001 - LIGHT2 = 0x4002 - LIGHT3 = 0x4003 - LIGHT4 = 0x4004 - LIGHT5 = 0x4005 - LIGHT6 = 0x4006 - LIGHT7 = 0x4007 - LIGHTING = 0x0B50 - LINE_SMOOTH = 0x0B20 - LINE_STIPPLE = 0x0B24 - MAP1_COLOR_4 = 0x0D90 - MAP1_INDEX = 0x0D91 - MAP1_NORMAL = 0x0D92 - MAP1_TEXTURE_COORD_1 = 0x0D93 - MAP1_TEXTURE_COORD_2 = 0x0D94 - MAP1_TEXTURE_COORD_3 = 0x0D95 - MAP1_TEXTURE_COORD_4 = 0x0D96 - MAP1_VERTEX_3 = 0x0D97 - MAP1_VERTEX_4 = 0x0D98 - MAP2_COLOR_4 = 0x0DB0 - MAP2_INDEX = 0x0DB1 - MAP2_NORMAL = 0x0DB2 - MAP2_TEXTURE_COORD_1 = 0x0DB3 - MAP2_TEXTURE_COORD_2 = 0x0DB4 - MAP2_TEXTURE_COORD_3 = 0x0DB5 - MAP2_TEXTURE_COORD_4 = 0x0DB6 - MAP2_VERTEX_3 = 0x0DB7 - MAP2_VERTEX_4 = 0x0DB8 - NORMALIZE = 0x0BA1 - NORMAL_ARRAY = 0x8075 - POINT_SMOOTH = 0x0B10 - POLYGON_OFFSET_FILL = 0x8037 - POLYGON_OFFSET_LINE = 0x2A02 - POLYGON_OFFSET_POINT = 0x2A01 - POLYGON_SMOOTH = 0x0B41 - POLYGON_STIPPLE = 0x0B42 - SCISSOR_TEST = 0x0C11 - STENCIL_TEST = 0x0B90 - TEXTURE_1D = 0x0DE0 - TEXTURE_2D = 0x0DE1 - TEXTURE_COORD_ARRAY = 0x8078 - TEXTURE_GEN_Q = 0x0C63 - TEXTURE_GEN_R = 0x0C62 - TEXTURE_GEN_S = 0x0C60 - TEXTURE_GEN_T = 0x0C61 - VERTEX_ARRAY = 0x8074 - - INVALID_ENUM = 0x0500 - INVALID_OPERATION = 0x0502 - INVALID_VALUE = 0x0501 - NO_ERROR = 0 - OUT_OF_MEMORY = 0x0505 - STACK_OVERFLOW = 0x0503 - STACK_UNDERFLOW = 0x0504 - - N2D = 0x0600 - N3D = 0x0601 - N3D_COLOR = 0x0602 - N3D_COLOR_TEXTURE = 0x0603 - N4D_COLOR_TEXTURE = 0x0604 - - BITMAP_TOKEN = 0x0704 - COPY_PIXEL_TOKEN = 0x0706 - DRAW_PIXEL_TOKEN = 0x0705 - LINE_RESET_TOKEN = 0x0707 - LINE_TOKEN = 0x0702 - PASS_THROUGH_TOKEN = 0x0700 - POINT_TOKEN = 0x0701 - POLYGON_TOKEN = 0x0703 - - EXP = 0x0800 - EXP2 = 0x0801 - LINEAR = 0x2601 - - FOG_COLOR = 0x0B66 - FOG_DENSITY = 0x0B62 - FOG_END = 0x0B64 - FOG_INDEX = 0x0B61 - FOG_MODE = 0x0B65 - FOG_START = 0x0B63 - - CCW = 0x0901 - CW = 0x0900 - - COEFF = 0x0A00 - DOMAIN = 0x0A02 - ORDER = 0x0A01 - - PIXEL_MAP_A_TO_A = 0x0C79 - PIXEL_MAP_B_TO_B = 0x0C78 - PIXEL_MAP_G_TO_G = 0x0C77 - PIXEL_MAP_I_TO_A = 0x0C75 - PIXEL_MAP_I_TO_B = 0x0C74 - PIXEL_MAP_I_TO_G = 0x0C73 - PIXEL_MAP_I_TO_I = 0x0C70 - PIXEL_MAP_I_TO_R = 0x0C72 - PIXEL_MAP_R_TO_R = 0x0C76 - PIXEL_MAP_S_TO_S = 0x0C71 - - ACCUM_ALPHA_BITS = 0x0D5B - ACCUM_BLUE_BITS = 0x0D5A - ACCUM_CLEAR_VALUE = 0x0B80 - ACCUM_GREEN_BITS = 0x0D59 - ACCUM_RED_BITS = 0x0D58 - ALIASED_LINE_WIDTH_RANGE = 0x846E - ALIASED_POINT_SIZE_RANGE = 0x846D - ALPHA_BIAS = 0x0D1D - ALPHA_BITS = 0x0D55 - ALPHA_SCALE = 0x0D1C - ALPHA_TEST_FUNC = 0x0BC1 - ALPHA_TEST_REF = 0x0BC2 - ATTRIB_STACK_DEPTH = 0x0BB0 - AUX_BUFFERS = 0x0C00 - BLEND_DST = 0x0BE0 - BLEND_SRC = 0x0BE1 - BLUE_BIAS = 0x0D1B - BLUE_BITS = 0x0D54 - BLUE_SCALE = 0x0D1A - CLIENT_ATTRIB_STACK_DEPTH = 0x0BB1 - COLOR_ARRAY_SIZE = 0x8081 - COLOR_ARRAY_STRIDE = 0x8083 - COLOR_ARRAY_TYPE = 0x8082 - COLOR_CLEAR_VALUE = 0x0C22 - COLOR_MATERIAL_FACE = 0x0B55 - COLOR_MATERIAL_PARAMETER = 0x0B56 - COLOR_WRITEMASK = 0x0C23 - CULL_FACE_MODE = 0x0B45 - CURRENT_COLOR = 0x0B00 - CURRENT_INDEX = 0x0B01 - CURRENT_NORMAL = 0x0B02 - CURRENT_RASTER_COLOR = 0x0B04 - CURRENT_RASTER_DISTANCE = 0x0B09 - CURRENT_RASTER_INDEX = 0x0B05 - CURRENT_RASTER_POSITION = 0x0B07 - CURRENT_RASTER_POSITION_VALID = 0x0B08 - CURRENT_RASTER_TEXTURE_COORDS = 0x0B06 - CURRENT_TEXTURE_COORDS = 0x0B03 - DEPTH_BIAS = 0x0D1F - DEPTH_BITS = 0x0D56 - DEPTH_CLEAR_VALUE = 0x0B73 - DEPTH_FUNC = 0x0B74 - DEPTH_RANGE = 0x0B70 - DEPTH_SCALE = 0x0D1E - DEPTH_WRITEMASK = 0x0B72 - DOUBLEBUFFER = 0x0C32 - DRAW_BUFFER = 0x0C01 - EDGE_FLAG = 0x0B43 - EDGE_FLAG_ARRAY_STRIDE = 0x808C - FEEDBACK_BUFFER_SIZE = 0x0DF1 - FEEDBACK_BUFFER_TYPE = 0x0DF2 - FOG_HINT = 0x0C54 - FRONT_FACE = 0x0B46 - GREEN_BIAS = 0x0D19 - GREEN_BITS = 0x0D53 - GREEN_SCALE = 0x0D18 - INDEX_ARRAY_STRIDE = 0x8086 - INDEX_ARRAY_TYPE = 0x8085 - INDEX_BITS = 0x0D51 - INDEX_CLEAR_VALUE = 0x0C20 - INDEX_MODE = 0x0C30 - INDEX_OFFSET = 0x0D13 - INDEX_SHIFT = 0x0D12 - INDEX_WRITEMASK = 0x0C21 - LIGHT_MODEL_AMBIENT = 0x0B53 - LIGHT_MODEL_COLOR_CONTROL = 0x81F8 - LIGHT_MODEL_LOCAL_VIEWER = 0x0B51 - LIGHT_MODEL_TWO_SIDE = 0x0B52 - LINE_SMOOTH_HINT = 0x0C52 - LINE_STIPPLE_PATTERN = 0x0B25 - LINE_STIPPLE_REPEAT = 0x0B26 - LINE_WIDTH = 0x0B21 - LINE_WIDTH_GRANULARITY = 0x0B23 - LINE_WIDTH_RANGE = 0x0B22 - LIST_BASE = 0x0B32 - LIST_INDEX = 0x0B33 - LIST_MODE = 0x0B30 - LOGIC_OP_MODE = 0x0BF0 - MAP1_GRID_DOMAIN = 0x0DD0 - MAP1_GRID_SEGMENTS = 0x0DD1 - MAP2_GRID_DOMAIN = 0x0DD2 - MAP2_GRID_SEGMENTS = 0x0DD3 - MAP_COLOR = 0x0D10 - MAP_STENCIL = 0x0D11 - MATRIX_MODE = 0x0BA0 - MAX_ATTRIB_STACK_DEPTH = 0x0D35 - MAX_CLIENT_ATTRIB_STACK_DEPTH = 0x0D3B - MAX_CLIP_PLANES = 0x0D32 - MAX_EVAL_ORDER = 0x0D30 - MAX_LIGHTS = 0x0D31 - MAX_LIST_NESTING = 0x0B31 - MAX_MODELVIEW_STACK_DEPTH = 0x0D36 - MAX_NAME_STACK_DEPTH = 0x0D37 - MAX_PIXEL_MAP_TABLE = 0x0D34 - MAX_PROJECTION_STACK_DEPTH = 0x0D38 - MAX_TEXTURE_SIZE = 0x0D33 - MAX_TEXTURE_STACK_DEPTH = 0x0D39 - MAX_VIEWPORT_DIMS = 0x0D3A - MODELVIEW_MATRIX = 0x0BA6 - MODELVIEW_STACK_DEPTH = 0x0BA3 - NAME_STACK_DEPTH = 0x0D70 - NORMAL_ARRAY_STRIDE = 0x807F - NORMAL_ARRAY_TYPE = 0x807E - PACK_ALIGNMENT = 0x0D05 - PACK_LSB_FIRST = 0x0D01 - PACK_ROW_LENGTH = 0x0D02 - PACK_SKIP_PIXELS = 0x0D04 - PACK_SKIP_ROWS = 0x0D03 - PACK_SWAP_BYTES = 0x0D00 - PERSPECTIVE_CORRECTION_HINT = 0x0C50 - PIXEL_MAP_A_TO_A_SIZE = 0x0CB9 - PIXEL_MAP_B_TO_B_SIZE = 0x0CB8 - PIXEL_MAP_G_TO_G_SIZE = 0x0CB7 - PIXEL_MAP_I_TO_A_SIZE = 0x0CB5 - PIXEL_MAP_I_TO_B_SIZE = 0x0CB4 - PIXEL_MAP_I_TO_G_SIZE = 0x0CB3 - PIXEL_MAP_I_TO_I_SIZE = 0x0CB0 - PIXEL_MAP_I_TO_R_SIZE = 0x0CB2 - PIXEL_MAP_R_TO_R_SIZE = 0x0CB6 - PIXEL_MAP_S_TO_S_SIZE = 0x0CB1 - POINT_SIZE = 0x0B11 - POINT_SIZE_GRANULARITY = 0x0B13 - POINT_SIZE_RANGE = 0x0B12 - POINT_SMOOTH_HINT = 0x0C51 - POLYGON_MODE = 0x0B40 - POLYGON_OFFSET_FACTOR = 0x8038 - POLYGON_OFFSET_UNITS = 0x2A00 - POLYGON_SMOOTH_HINT = 0x0C53 - PROJECTION_MATRIX = 0x0BA7 - PROJECTION_STACK_DEPTH = 0x0BA4 - READ_BUFFER = 0x0C02 - RED_BIAS = 0x0D15 - RED_BITS = 0x0D52 - RED_SCALE = 0x0D14 - RENDER_MODE = 0x0C40 - RGBA_MODE = 0x0C31 - SCISSOR_BOX = 0x0C10 - SELECTION_BUFFER_SIZE = 0x0DF4 - SHADE_MODEL = 0x0B54 - SMOOTH_LINE_WIDTH_GRANULARITY = 0x0B23 - SMOOTH_LINE_WIDTH_RANGE = 0x0B22 - SMOOTH_POINT_SIZE_GRANULARITY = 0x0B13 - SMOOTH_POINT_SIZE_RANGE = 0x0B12 - STENCIL_BITS = 0x0D57 - STENCIL_CLEAR_VALUE = 0x0B91 - STENCIL_FAIL = 0x0B94 - STENCIL_FUNC = 0x0B92 - STENCIL_PASS_DEPTH_FAIL = 0x0B95 - STENCIL_PASS_DEPTH_PASS = 0x0B96 - STENCIL_REF = 0x0B97 - STENCIL_VALUE_MASK = 0x0B93 - STENCIL_WRITEMASK = 0x0B98 - STEREO = 0x0C33 - SUBPIXEL_BITS = 0x0D50 - TEXTURE_BINDING_1D = 0x8068 - TEXTURE_BINDING_2D = 0x8069 - TEXTURE_BINDING_3D = 0x806A - TEXTURE_COORD_ARRAY_SIZE = 0x8088 - TEXTURE_COORD_ARRAY_STRIDE = 0x808A - TEXTURE_COORD_ARRAY_TYPE = 0x8089 - TEXTURE_MATRIX = 0x0BA8 - TEXTURE_STACK_DEPTH = 0x0BA5 - UNPACK_ALIGNMENT = 0x0CF5 - UNPACK_LSB_FIRST = 0x0CF1 - UNPACK_ROW_LENGTH = 0x0CF2 - UNPACK_SKIP_PIXELS = 0x0CF4 - UNPACK_SKIP_ROWS = 0x0CF3 - UNPACK_SWAP_BYTES = 0x0CF0 - VERTEX_ARRAY_SIZE = 0x807A - VERTEX_ARRAY_STRIDE = 0x807C - VERTEX_ARRAY_TYPE = 0x807B - VIEWPORT = 0x0BA2 - ZOOM_X = 0x0D16 - ZOOM_Y = 0x0D17 - - COLOR_ARRAY_POINTER = 0x8090 - EDGE_FLAG_ARRAY_POINTER = 0x8093 - FEEDBACK_BUFFER_POINTER = 0x0DF0 - INDEX_ARRAY_POINTER = 0x8091 - NORMAL_ARRAY_POINTER = 0x808F - SELECTION_BUFFER_POINTER = 0x0DF3 - TEXTURE_COORD_ARRAY_POINTER = 0x8092 - VERTEX_ARRAY_POINTER = 0x808E - - TEXTURE_ALPHA_SIZE = 0x805F - TEXTURE_BLUE_SIZE = 0x805E - TEXTURE_BORDER = 0x1005 - TEXTURE_BORDER_COLOR = 0x1004 - TEXTURE_COMPONENTS = 0x1003 - TEXTURE_GREEN_SIZE = 0x805D - TEXTURE_HEIGHT = 0x1001 - TEXTURE_INTENSITY_SIZE = 0x8061 - TEXTURE_INTERNAL_FORMAT = 0x1003 - TEXTURE_LUMINANCE_SIZE = 0x8060 - TEXTURE_MAG_FILTER = 0x2800 - TEXTURE_MIN_FILTER = 0x2801 - TEXTURE_PRIORITY = 0x8066 - TEXTURE_RED_SIZE = 0x805C - TEXTURE_RESIDENT = 0x8067 - TEXTURE_WIDTH = 0x1000 - TEXTURE_WRAP_S = 0x2802 - TEXTURE_WRAP_T = 0x2803 - - DONT_CARE = 0x1100 - FASTEST = 0x1101 - NICEST = 0x1102 - - C3F_V3F = 0x2A24 - C4F_N3F_V3F = 0x2A26 - C4UB_V2F = 0x2A22 - C4UB_V3F = 0x2A23 - N3F_V3F = 0x2A25 - T2F_C3F_V3F = 0x2A2A - T2F_C4F_N3F_V3F = 0x2A2C - T2F_C4UB_V3F = 0x2A29 - T2F_N3F_V3F = 0x2A2B - T2F_V3F = 0x2A27 - T4F_C4F_N3F_V4F = 0x2A2D - T4F_V4F = 0x2A28 - V2F = 0x2A20 - V3F = 0x2A21 - - MODULATE = 0x2100 - REPLACE = 0x1E01 - - SEPARATE_SPECULAR_COLOR = 0x81FA - SINGLE_COLOR = 0x81F9 - - CONSTANT_ATTENUATION = 0x1207 - LINEAR_ATTENUATION = 0x1208 - POSITION = 0x1203 - QUADRATIC_ATTENUATION = 0x1209 - SPOT_CUTOFF = 0x1206 - SPOT_DIRECTION = 0x1204 - SPOT_EXPONENT = 0x1205 - - COMPILE = 0x1300 - COMPILE_AND_EXECUTE = 0x1301 - - AND = 0x1501 - AND_INVERTED = 0x1504 - AND_REVERSE = 0x1502 - CLEAR = 0x1500 - COPY = 0x1503 - COPY_INVERTED = 0x150C - EQUIV = 0x1509 - INVERT = 0x150A - NAND = 0x150E - NOOP = 0x1505 - NOR = 0x1508 - OR = 0x1507 - OR_INVERTED = 0x150D - OR_REVERSE = 0x150B - SET = 0x150F - XOR = 0x1506 - - COLOR_INDEXES = 0x1603 - SHININESS = 0x1601 - - MODELVIEW = 0x1700 - PROJECTION = 0x1701 - TEXTURE = 0x1702 - - LINE = 0x1B01 - POINT = 0x1B00 - - FILL = 0x1B02 - - COLOR = 0x1800 - DEPTH = 0x1801 - STENCIL = 0x1802 - - ALPHA = 0x1906 - BLUE = 0x1905 - COLOR_INDEX = 0x1900 - DEPTH_COMPONENT = 0x1902 - GREEN = 0x1904 - LUMINANCE = 0x1909 - LUMINANCE_ALPHA = 0x190A - RED = 0x1903 - RGB = 0x1907 - RGBA = 0x1908 - STENCIL_INDEX = 0x1901 - - ALPHA12 = 0x803D - ALPHA16 = 0x803E - ALPHA4 = 0x803B - ALPHA8 = 0x803C - INTENSITY = 0x8049 - INTENSITY12 = 0x804C - INTENSITY16 = 0x804D - INTENSITY4 = 0x804A - INTENSITY8 = 0x804B - LUMINANCE12 = 0x8041 - LUMINANCE12_ALPHA12 = 0x8047 - LUMINANCE12_ALPHA4 = 0x8046 - LUMINANCE16 = 0x8042 - LUMINANCE16_ALPHA16 = 0x8048 - LUMINANCE4 = 0x803F - LUMINANCE4_ALPHA4 = 0x8043 - LUMINANCE6_ALPHA2 = 0x8044 - LUMINANCE8 = 0x8040 - LUMINANCE8_ALPHA8 = 0x8045 - R3_G3_B2 = 0x2A10 - RGB10 = 0x8052 - RGB10_A2 = 0x8059 - RGB12 = 0x8053 - RGB16 = 0x8054 - RGB4 = 0x804F - RGB5 = 0x8050 - RGB5_A1 = 0x8057 - RGB8 = 0x8051 - RGBA12 = 0x805A - RGBA16 = 0x805B - RGBA2 = 0x8055 - RGBA4 = 0x8056 - RGBA8 = 0x8058 - - PACK_IMAGE_HEIGHT = 0x806C - PACK_SKIP_IMAGES = 0x806B - UNPACK_IMAGE_HEIGHT = 0x806E - UNPACK_SKIP_IMAGES = 0x806D - - BITMAP = 0x1A00 - UNSIGNED_BYTE_3_3_2 = 0x8032 - UNSIGNED_INT_10_10_10_2 = 0x8036 - UNSIGNED_INT_8_8_8_8 = 0x8035 - UNSIGNED_SHORT_4_4_4_4 = 0x8033 - UNSIGNED_SHORT_5_5_5_1 = 0x8034 - - LINES = 0x0001 - LINE_LOOP = 0x0002 - LINE_STRIP = 0x0003 - POINTS = 0x0000 - POLYGON = 0x0009 - QUADS = 0x0007 - QUAD_STRIP = 0x0008 - TRIANGLES = 0x0004 - TRIANGLE_FAN = 0x0006 - TRIANGLE_STRIP = 0x0005 - - FEEDBACK = 0x1C01 - RENDER = 0x1C00 - SELECT = 0x1C02 - - FLAT = 0x1D00 - SMOOTH = 0x1D01 - - DECR = 0x1E03 - INCR = 0x1E02 - KEEP = 0x1E00 - - EXTENSIONS = 0x1F03 - RENDERER = 0x1F01 - VENDOR = 0x1F00 - VERSION = 0x1F02 - - S = 0x2000 - T = 0x2001 - R = 0x2002 - Q = 0x2003 - - DECAL = 0x2101 - - TEXTURE_ENV_COLOR = 0x2201 - TEXTURE_ENV_MODE = 0x2200 - - TEXTURE_ENV = 0x2300 - - EYE_LINEAR = 0x2400 - OBJECT_LINEAR = 0x2401 - SPHERE_MAP = 0x2402 - - EYE_PLANE = 0x2502 - OBJECT_PLANE = 0x2501 - TEXTURE_GEN_MODE = 0x2500 - - NEAREST = 0x2600 - - LINEAR_MIPMAP_LINEAR = 0x2703 - LINEAR_MIPMAP_NEAREST = 0x2701 - NEAREST_MIPMAP_LINEAR = 0x2702 - NEAREST_MIPMAP_NEAREST = 0x2700 - - TEXTURE_WRAP_R = 0x8072 - - PROXY_TEXTURE_1D = 0x8063 - PROXY_TEXTURE_2D = 0x8064 - PROXY_TEXTURE_3D = 0x8070 - TEXTURE_3D = 0x806F - TEXTURE_BASE_LEVEL = 0x813C - TEXTURE_MAX_LEVEL = 0x813D - TEXTURE_MAX_LOD = 0x813B - TEXTURE_MIN_LOD = 0x813A - - CLAMP = 0x2900 - CLAMP_TO_EDGE = 0x812F - REPEAT = 0x2901 - - RESCALE_NORMAL = 0x803A - TEXTURE_DEPTH = 0x8071 - MAX_3D_TEXTURE_SIZE = 0x8073 - BGR = 0x80E0 - BGRA = 0x80E1 - MAX_ELEMENTS_VERTICES = 0x80E8 - MAX_ELEMENTS_INDICES = 0x80E9 - UNSIGNED_BYTE_2_3_3_REV = 0x8362 - UNSIGNED_SHORT_5_6_5 = 0x8363 - UNSIGNED_SHORT_5_6_5_REV = 0x8364 - UNSIGNED_SHORT_4_4_4_4_REV = 0x8365 - UNSIGNED_SHORT_1_5_5_5_REV = 0x8366 - UNSIGNED_INT_8_8_8_8_REV = 0x8367 - UNSIGNED_INT_2_10_10_10_REV = 0x8368 -) - -// https://www.opengl.org/sdk/docs/man2/xhtml/glViewport.xml -func (gl *GL) Viewport(x, y, width, height int) { - C.gl1_2_glViewport(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// DepthRange specifies the mapping of depth values from normalized device -// coordinates to window coordinates. -// -// Parameter nearVal specifies the mapping of the near clipping plane to window -// coordinates (defaults to 0), while farVal specifies the mapping of the far -// clipping plane to window coordinates (defaults to 1). -// -// After clipping and division by w, depth coordinates range from -1 to 1, -// corresponding to the near and far clipping planes. DepthRange specifies a -// linear mapping of the normalized depth coordinates in this range to window -// depth coordinates. Regardless of the actual depth buffer implementation, -// window coordinate depth values are treated as though they range from 0 through 1 -// (like color components). Thus, the values accepted by DepthRange are both -// clamped to this range before they are accepted. -// -// The default setting of (0, 1) maps the near plane to 0 and the far plane to 1. -// With this mapping, the depth buffer range is fully utilized. -// -// It is not necessary that nearVal be less than farVal. Reverse mappings such as -// nearVal 1, and farVal 0 are acceptable. -// -// GL.INVALID_OPERATION is generated if DepthRange is executed between the -// execution of Begin and the corresponding execution of End. -func (gl *GL) DepthRange(nearVal, farVal float64) { - C.gl1_2_glDepthRange(gl.funcs, C.GLdouble(nearVal), C.GLdouble(farVal)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIsEnabled.xml -func (gl *GL) IsEnabled(cap glbase.Enum) bool { - glresult := C.gl1_2_glIsEnabled(gl.funcs, C.GLenum(cap)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexLevelParameteriv.xml -func (gl *GL) GetTexLevelParameteriv(target glbase.Enum, level int, pname glbase.Enum, params []int32) { - C.gl1_2_glGetTexLevelParameteriv(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexLevelParameterfv.xml -func (gl *GL) GetTexLevelParameterfv(target glbase.Enum, level int, pname glbase.Enum, params []float32) { - C.gl1_2_glGetTexLevelParameterfv(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexParameteriv.xml -func (gl *GL) GetTexParameteriv(target, pname glbase.Enum, params []int32) { - C.gl1_2_glGetTexParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexParameterfv.xml -func (gl *GL) GetTexParameterfv(target, pname glbase.Enum, params []float32) { - C.gl1_2_glGetTexParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexImage.xml -func (gl *GL) GetTexImage(target glbase.Enum, level int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl1_2_glGetTexImage(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetIntegerv.xml -func (gl *GL) GetIntegerv(pname glbase.Enum, params []int32) { - C.gl1_2_glGetIntegerv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetFloatv.xml -func (gl *GL) GetFloatv(pname glbase.Enum, params []float32) { - C.gl1_2_glGetFloatv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetError.xml -func (gl *GL) GetError() glbase.Enum { - glresult := C.gl1_2_glGetError(gl.funcs) - return glbase.Enum(glresult) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetDoublev.xml -func (gl *GL) GetDoublev(pname glbase.Enum, params []float64) { - C.gl1_2_glGetDoublev(gl.funcs, C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetBooleanv.xml -func (gl *GL) GetBooleanv(pname glbase.Enum, params []bool) { - C.gl1_2_glGetBooleanv(gl.funcs, C.GLenum(pname), (*C.GLboolean)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glReadPixels.xml -func (gl *GL) ReadPixels(x, y, width, height int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl1_2_glReadPixels(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glReadBuffer.xml -func (gl *GL) ReadBuffer(mode glbase.Enum) { - C.gl1_2_glReadBuffer(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPixelStorei.xml -func (gl *GL) PixelStorei(pname glbase.Enum, param int32) { - C.gl1_2_glPixelStorei(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPixelStoref.xml -func (gl *GL) PixelStoref(pname glbase.Enum, param float32) { - C.gl1_2_glPixelStoref(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDepthFunc.xml -func (gl *GL) DepthFunc(glfunc glbase.Enum) { - C.gl1_2_glDepthFunc(gl.funcs, C.GLenum(glfunc)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glStencilOp.xml -func (gl *GL) StencilOp(fail, zfail, zpass glbase.Enum) { - C.gl1_2_glStencilOp(gl.funcs, C.GLenum(fail), C.GLenum(zfail), C.GLenum(zpass)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glStencilFunc.xml -func (gl *GL) StencilFunc(glfunc glbase.Enum, ref int32, mask uint32) { - C.gl1_2_glStencilFunc(gl.funcs, C.GLenum(glfunc), C.GLint(ref), C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLogicOp.xml -func (gl *GL) LogicOp(opcode glbase.Enum) { - C.gl1_2_glLogicOp(gl.funcs, C.GLenum(opcode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glBlendFunc.xml -func (gl *GL) BlendFunc(sfactor, dfactor glbase.Enum) { - C.gl1_2_glBlendFunc(gl.funcs, C.GLenum(sfactor), C.GLenum(dfactor)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFlush.xml -func (gl *GL) Flush() { - C.gl1_2_glFlush(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFinish.xml -func (gl *GL) Finish() { - C.gl1_2_glFinish(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEnable.xml -func (gl *GL) Enable(cap glbase.Enum) { - C.gl1_2_glEnable(gl.funcs, C.GLenum(cap)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDisable.xml -func (gl *GL) Disable(cap glbase.Enum) { - C.gl1_2_glDisable(gl.funcs, C.GLenum(cap)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDepthMask.xml -func (gl *GL) DepthMask(flag bool) { - C.gl1_2_glDepthMask(gl.funcs, *(*C.GLboolean)(unsafe.Pointer(&flag))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColorMask.xml -func (gl *GL) ColorMask(red, green, blue, alpha bool) { - C.gl1_2_glColorMask(gl.funcs, *(*C.GLboolean)(unsafe.Pointer(&red)), *(*C.GLboolean)(unsafe.Pointer(&green)), *(*C.GLboolean)(unsafe.Pointer(&blue)), *(*C.GLboolean)(unsafe.Pointer(&alpha))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glStencilMask.xml -func (gl *GL) StencilMask(mask uint32) { - C.gl1_2_glStencilMask(gl.funcs, C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glClearDepth.xml -func (gl *GL) ClearDepth(depth float64) { - C.gl1_2_glClearDepth(gl.funcs, C.GLdouble(depth)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glClearStencil.xml -func (gl *GL) ClearStencil(s int32) { - C.gl1_2_glClearStencil(gl.funcs, C.GLint(s)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glClearColor.xml -func (gl *GL) ClearColor(red, green, blue, alpha float32) { - C.gl1_2_glClearColor(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glClear.xml -func (gl *GL) Clear(mask glbase.Bitfield) { - C.gl1_2_glClear(gl.funcs, C.GLbitfield(mask)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDrawBuffer.xml -func (gl *GL) DrawBuffer(mode glbase.Enum) { - C.gl1_2_glDrawBuffer(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexImage2D.xml -func (gl *GL) TexImage2D(target glbase.Enum, level int, internalFormat int32, width, height, border int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl1_2_glTexImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLint(border), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexImage1D.xml -func (gl *GL) TexImage1D(target glbase.Enum, level int, internalFormat int32, width, border int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl1_2_glTexImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(internalFormat), C.GLsizei(width), C.GLint(border), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexParameteriv.xml -func (gl *GL) TexParameteriv(target, pname glbase.Enum, params []int32) { - C.gl1_2_glTexParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexParameteri.xml -func (gl *GL) TexParameteri(target, pname glbase.Enum, param int32) { - C.gl1_2_glTexParameteri(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexParameterfv.xml -func (gl *GL) TexParameterfv(target, pname glbase.Enum, params []float32) { - C.gl1_2_glTexParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexParameterf.xml -func (gl *GL) TexParameterf(target, pname glbase.Enum, param float32) { - C.gl1_2_glTexParameterf(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glScissor.xml -func (gl *GL) Scissor(x, y, width, height int) { - C.gl1_2_glScissor(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPolygonMode.xml -func (gl *GL) PolygonMode(face, mode glbase.Enum) { - C.gl1_2_glPolygonMode(gl.funcs, C.GLenum(face), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPointSize.xml -func (gl *GL) PointSize(size float32) { - C.gl1_2_glPointSize(gl.funcs, C.GLfloat(size)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLineWidth.xml -func (gl *GL) LineWidth(width float32) { - C.gl1_2_glLineWidth(gl.funcs, C.GLfloat(width)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glHint.xml -func (gl *GL) Hint(target, mode glbase.Enum) { - C.gl1_2_glHint(gl.funcs, C.GLenum(target), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFrontFace.xml -func (gl *GL) FrontFace(mode glbase.Enum) { - C.gl1_2_glFrontFace(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCullFace.xml -func (gl *GL) CullFace(mode glbase.Enum) { - C.gl1_2_glCullFace(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexubv.xml -func (gl *GL) Indexubv(c []uint8) { - C.gl1_2_glIndexubv(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexub.xml -func (gl *GL) Indexub(c uint8) { - C.gl1_2_glIndexub(gl.funcs, C.GLubyte(c)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIsTexture.xml -func (gl *GL) IsTexture(texture glbase.Texture) bool { - glresult := C.gl1_2_glIsTexture(gl.funcs, C.GLuint(texture)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// GenTextures returns n texture names in textures. There is no guarantee -// that the names form a contiguous set of integers; however, it is -// guaranteed that none of the returned names was in use immediately before -// the call to GenTextures. -// -// The generated textures have no dimensionality; they assume the -// dimensionality of the texture target to which they are first bound (see -// BindTexture). -// -// Texture names returned by a call to GenTextures are not returned by -// subsequent calls, unless they are first deleted with DeleteTextures. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// GenTextures is available in GL version 2.0 or greater. -func (gl *GL) GenTextures(n int) []glbase.Texture { - if n == 0 { - return nil - } - textures := make([]glbase.Texture, n) - C.gl1_2_glGenTextures(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0]))) - return textures -} - -// DeleteTextures deletes the textures objects whose names are stored -// in the textures slice. After a texture is deleted, it has no contents or -// dimensionality, and its name is free for reuse (for example by -// GenTextures). If a texture that is currently bound is deleted, the binding -// reverts to 0 (the default texture). -// -// DeleteTextures silently ignores 0's and names that do not correspond to -// existing textures. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// DeleteTextures is available in GL version 2.0 or greater. -func (gl *GL) DeleteTextures(textures []glbase.Texture) { - n := len(textures) - if n == 0 { - return - } - C.gl1_2_glDeleteTextures(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glBindTexture.xml -func (gl *GL) BindTexture(target glbase.Enum, texture glbase.Texture) { - C.gl1_2_glBindTexture(gl.funcs, C.GLenum(target), C.GLuint(texture)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexSubImage2D.xml -func (gl *GL) TexSubImage2D(target glbase.Enum, level, xoffset, yoffset, width, height int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl1_2_glTexSubImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexSubImage1D.xml -func (gl *GL) TexSubImage1D(target glbase.Enum, level, xoffset, width int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl1_2_glTexSubImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLsizei(width), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyTexSubImage2D.xml -func (gl *GL) CopyTexSubImage2D(target glbase.Enum, level, xoffset, yoffset, x, y, width, height int) { - C.gl1_2_glCopyTexSubImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyTexSubImage1D.xml -func (gl *GL) CopyTexSubImage1D(target glbase.Enum, level, xoffset, x, y, width int) { - C.gl1_2_glCopyTexSubImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(x), C.GLint(y), C.GLsizei(width)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyTexImage2D.xml -func (gl *GL) CopyTexImage2D(target glbase.Enum, level int, internalFormat glbase.Enum, x, y, width, height, border int) { - C.gl1_2_glCopyTexImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height), C.GLint(border)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyTexImage1D.xml -func (gl *GL) CopyTexImage1D(target glbase.Enum, level int, internalFormat glbase.Enum, x, y, width, border int) { - C.gl1_2_glCopyTexImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLint(border)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPolygonOffset.xml -func (gl *GL) PolygonOffset(factor, units float32) { - C.gl1_2_glPolygonOffset(gl.funcs, C.GLfloat(factor), C.GLfloat(units)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDrawElements.xml -func (gl *GL) DrawElements(mode glbase.Enum, count int, gltype glbase.Enum, indices interface{}) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl1_2_glDrawElements(gl.funcs, C.GLenum(mode), C.GLsizei(count), C.GLenum(gltype), indices_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDrawArrays.xml -func (gl *GL) DrawArrays(mode glbase.Enum, first, count int) { - C.gl1_2_glDrawArrays(gl.funcs, C.GLenum(mode), C.GLint(first), C.GLsizei(count)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyTexSubImage3D.xml -func (gl *GL) CopyTexSubImage3D(target glbase.Enum, level, xoffset, yoffset int, zoffset int32, x, y, width, height int) { - C.gl1_2_glCopyTexSubImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(zoffset), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexSubImage3D.xml -func (gl *GL) TexSubImage3D(target glbase.Enum, level, xoffset, yoffset int, zoffset int32, width, height int, depth int32, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl1_2_glTexSubImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(zoffset), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexImage3D.xml -func (gl *GL) TexImage3D(target glbase.Enum, level int, internalFormat int32, width, height int, depth int32, border int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl1_2_glTexImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLint(border), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDrawRangeElements.xml -func (gl *GL) DrawRangeElements(mode glbase.Enum, start, end uint32, count int, gltype glbase.Enum, indices interface{}) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl1_2_glDrawRangeElements(gl.funcs, C.GLenum(mode), C.GLuint(start), C.GLuint(end), C.GLsizei(count), C.GLenum(gltype), indices_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glBlendEquation.xml -func (gl *GL) BlendEquation(mode glbase.Enum) { - C.gl1_2_glBlendEquation(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glBlendColor.xml -func (gl *GL) BlendColor(red, green, blue, alpha float32) { - C.gl1_2_glBlendColor(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTranslatef.xml -func (gl *GL) Translatef(x, y, z float32) { - C.gl1_2_glTranslatef(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTranslated.xml -func (gl *GL) Translated(x, y, z float64) { - C.gl1_2_glTranslated(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glScalef.xml -func (gl *GL) Scalef(x, y, z float32) { - C.gl1_2_glScalef(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glScaled.xml -func (gl *GL) Scaled(x, y, z float64) { - C.gl1_2_glScaled(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRotatef.xml -func (gl *GL) Rotatef(angle, x, y, z float32) { - C.gl1_2_glRotatef(gl.funcs, C.GLfloat(angle), C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRotated.xml -func (gl *GL) Rotated(angle, x, y, z float64) { - C.gl1_2_glRotated(gl.funcs, C.GLdouble(angle), C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPushMatrix.xml -func (gl *GL) PushMatrix() { - C.gl1_2_glPushMatrix(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPopMatrix.xml -func (gl *GL) PopMatrix() { - C.gl1_2_glPopMatrix(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glOrtho.xml -func (gl *GL) Ortho(left, right, bottom, top, zNear, zFar float64) { - C.gl1_2_glOrtho(gl.funcs, C.GLdouble(left), C.GLdouble(right), C.GLdouble(bottom), C.GLdouble(top), C.GLdouble(zNear), C.GLdouble(zFar)) -} - -// MultMatrixd multiplies the current matrix with the provided matrix. -// -// The m parameter must hold 16 consecutive elements of a 4x4 column-major matrix. -// -// The current matrix is determined by the current matrix mode (see -// MatrixMode). It is either the projection matrix, modelview matrix, or the -// texture matrix. -// -// For example, if the current matrix is C and the coordinates to be transformed -// are v = (v[0], v[1], v[2], v[3]), then the current transformation is C × v, or -// -// c[0] c[4] c[8] c[12] v[0] -// c[1] c[5] c[9] c[13] v[1] -// c[2] c[6] c[10] c[14] X v[2] -// c[3] c[7] c[11] c[15] v[3] -// -// Calling MultMatrix with an argument of m = m[0], m[1], ..., m[15] -// replaces the current transformation with (C X M) x v, or -// -// c[0] c[4] c[8] c[12] m[0] m[4] m[8] m[12] v[0] -// c[1] c[5] c[9] c[13] m[1] m[5] m[9] m[13] v[1] -// c[2] c[6] c[10] c[14] X m[2] m[6] m[10] m[14] X v[2] -// c[3] c[7] c[11] c[15] m[3] m[7] m[11] m[15] v[3] -// -// Where 'X' denotes matrix multiplication, and v is represented as a 4x1 matrix. -// -// While the elements of the matrix may be specified with single or double -// precision, the GL may store or operate on these values in less-than-single -// precision. -// -// In many computer languages, 4×4 arrays are represented in row-major -// order. The transformations just described represent these matrices in -// column-major order. The order of the multiplication is important. For -// example, if the current transformation is a rotation, and MultMatrix is -// called with a translation matrix, the translation is done directly on the -// coordinates to be transformed, while the rotation is done on the results -// of that translation. -// -// GL.INVALID_OPERATION is generated if MultMatrix is executed between the -// execution of Begin and the corresponding execution of End. -func (gl *GL) MultMatrixd(m []float64) { - if len(m) != 16 { - panic("parameter m must have length 16 for the 4x4 matrix") - } - C.gl1_2_glMultMatrixd(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&m[0]))) -} - -// MultMatrixf multiplies the current matrix with the provided matrix. -// -// The m parameter must hold 16 consecutive elements of a 4x4 column-major matrix. -// -// The current matrix is determined by the current matrix mode (see -// MatrixMode). It is either the projection matrix, modelview matrix, or the -// texture matrix. -// -// For example, if the current matrix is C and the coordinates to be transformed -// are v = (v[0], v[1], v[2], v[3]), then the current transformation is C × v, or -// -// c[0] c[4] c[8] c[12] v[0] -// c[1] c[5] c[9] c[13] v[1] -// c[2] c[6] c[10] c[14] X v[2] -// c[3] c[7] c[11] c[15] v[3] -// -// Calling MultMatrix with an argument of m = m[0], m[1], ..., m[15] -// replaces the current transformation with (C X M) x v, or -// -// c[0] c[4] c[8] c[12] m[0] m[4] m[8] m[12] v[0] -// c[1] c[5] c[9] c[13] m[1] m[5] m[9] m[13] v[1] -// c[2] c[6] c[10] c[14] X m[2] m[6] m[10] m[14] X v[2] -// c[3] c[7] c[11] c[15] m[3] m[7] m[11] m[15] v[3] -// -// Where 'X' denotes matrix multiplication, and v is represented as a 4x1 matrix. -// -// While the elements of the matrix may be specified with single or double -// precision, the GL may store or operate on these values in less-than-single -// precision. -// -// In many computer languages, 4×4 arrays are represented in row-major -// order. The transformations just described represent these matrices in -// column-major order. The order of the multiplication is important. For -// example, if the current transformation is a rotation, and MultMatrix is -// called with a translation matrix, the translation is done directly on the -// coordinates to be transformed, while the rotation is done on the results -// of that translation. -// -// GL.INVALID_OPERATION is generated if MultMatrix is executed between the -// execution of Begin and the corresponding execution of End. -func (gl *GL) MultMatrixf(m []float32) { - if len(m) != 16 { - panic("parameter m must have length 16 for the 4x4 matrix") - } - C.gl1_2_glMultMatrixf(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMatrixMode.xml -func (gl *GL) MatrixMode(mode glbase.Enum) { - C.gl1_2_glMatrixMode(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLoadMatrixd.xml -func (gl *GL) LoadMatrixd(m []float64) { - C.gl1_2_glLoadMatrixd(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLoadMatrixf.xml -func (gl *GL) LoadMatrixf(m []float32) { - C.gl1_2_glLoadMatrixf(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLoadIdentity.xml -func (gl *GL) LoadIdentity() { - C.gl1_2_glLoadIdentity(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFrustum.xml -func (gl *GL) Frustum(left, right, bottom, top, zNear, zFar float64) { - C.gl1_2_glFrustum(gl.funcs, C.GLdouble(left), C.GLdouble(right), C.GLdouble(bottom), C.GLdouble(top), C.GLdouble(zNear), C.GLdouble(zFar)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIsList.xml -func (gl *GL) IsList(list uint32) bool { - glresult := C.gl1_2_glIsList(gl.funcs, C.GLuint(list)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexGeniv.xml -func (gl *GL) GetTexGeniv(coord, pname glbase.Enum, params []int32) { - C.gl1_2_glGetTexGeniv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexGenfv.xml -func (gl *GL) GetTexGenfv(coord, pname glbase.Enum, params []float32) { - C.gl1_2_glGetTexGenfv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexGendv.xml -func (gl *GL) GetTexGendv(coord, pname glbase.Enum, params []float64) { - C.gl1_2_glGetTexGendv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexEnviv.xml -func (gl *GL) GetTexEnviv(target, pname glbase.Enum, params []int32) { - C.gl1_2_glGetTexEnviv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexEnvfv.xml -func (gl *GL) GetTexEnvfv(target, pname glbase.Enum, params []float32) { - C.gl1_2_glGetTexEnvfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetPolygonStipple.xml -func (gl *GL) GetPolygonStipple(mask []uint8) { - C.gl1_2_glGetPolygonStipple(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&mask[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetPixelMapusv.xml -func (gl *GL) GetPixelMapusv(glmap glbase.Enum, values []uint16) { - C.gl1_2_glGetPixelMapusv(gl.funcs, C.GLenum(glmap), (*C.GLushort)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetPixelMapuiv.xml -func (gl *GL) GetPixelMapuiv(glmap glbase.Enum, values []uint32) { - C.gl1_2_glGetPixelMapuiv(gl.funcs, C.GLenum(glmap), (*C.GLuint)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetPixelMapfv.xml -func (gl *GL) GetPixelMapfv(glmap glbase.Enum, values []float32) { - C.gl1_2_glGetPixelMapfv(gl.funcs, C.GLenum(glmap), (*C.GLfloat)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetMaterialiv.xml -func (gl *GL) GetMaterialiv(face, pname glbase.Enum, params []int32) { - C.gl1_2_glGetMaterialiv(gl.funcs, C.GLenum(face), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetMaterialfv.xml -func (gl *GL) GetMaterialfv(face, pname glbase.Enum, params []float32) { - C.gl1_2_glGetMaterialfv(gl.funcs, C.GLenum(face), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetMapiv.xml -func (gl *GL) GetMapiv(target, query glbase.Enum, v []int32) { - C.gl1_2_glGetMapiv(gl.funcs, C.GLenum(target), C.GLenum(query), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetMapfv.xml -func (gl *GL) GetMapfv(target, query glbase.Enum, v []float32) { - C.gl1_2_glGetMapfv(gl.funcs, C.GLenum(target), C.GLenum(query), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetMapdv.xml -func (gl *GL) GetMapdv(target, query glbase.Enum, v []float64) { - C.gl1_2_glGetMapdv(gl.funcs, C.GLenum(target), C.GLenum(query), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetLightiv.xml -func (gl *GL) GetLightiv(light, pname glbase.Enum, params []int32) { - C.gl1_2_glGetLightiv(gl.funcs, C.GLenum(light), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetLightfv.xml -func (gl *GL) GetLightfv(light, pname glbase.Enum, params []float32) { - C.gl1_2_glGetLightfv(gl.funcs, C.GLenum(light), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetClipPlane.xml -func (gl *GL) GetClipPlane(plane glbase.Enum, equation []float64) { - C.gl1_2_glGetClipPlane(gl.funcs, C.GLenum(plane), (*C.GLdouble)(unsafe.Pointer(&equation[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDrawPixels.xml -func (gl *GL) DrawPixels(width, height int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl1_2_glDrawPixels(gl.funcs, C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyPixels.xml -func (gl *GL) CopyPixels(x, y, width, height int, gltype glbase.Enum) { - C.gl1_2_glCopyPixels(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height), C.GLenum(gltype)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPixelMapusv.xml -func (gl *GL) PixelMapusv(glmap glbase.Enum, mapsize int32, values []uint16) { - C.gl1_2_glPixelMapusv(gl.funcs, C.GLenum(glmap), C.GLint(mapsize), (*C.GLushort)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPixelMapuiv.xml -func (gl *GL) PixelMapuiv(glmap glbase.Enum, mapsize int32, values []uint32) { - C.gl1_2_glPixelMapuiv(gl.funcs, C.GLenum(glmap), C.GLint(mapsize), (*C.GLuint)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPixelMapfv.xml -func (gl *GL) PixelMapfv(glmap glbase.Enum, mapsize int32, values []float32) { - C.gl1_2_glPixelMapfv(gl.funcs, C.GLenum(glmap), C.GLint(mapsize), (*C.GLfloat)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPixelTransferi.xml -func (gl *GL) PixelTransferi(pname glbase.Enum, param int32) { - C.gl1_2_glPixelTransferi(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPixelTransferf.xml -func (gl *GL) PixelTransferf(pname glbase.Enum, param float32) { - C.gl1_2_glPixelTransferf(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPixelZoom.xml -func (gl *GL) PixelZoom(xfactor, yfactor float32) { - C.gl1_2_glPixelZoom(gl.funcs, C.GLfloat(xfactor), C.GLfloat(yfactor)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glAlphaFunc.xml -func (gl *GL) AlphaFunc(glfunc glbase.Enum, ref float32) { - C.gl1_2_glAlphaFunc(gl.funcs, C.GLenum(glfunc), C.GLfloat(ref)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalPoint2.xml -func (gl *GL) EvalPoint2(i, j int32) { - C.gl1_2_glEvalPoint2(gl.funcs, C.GLint(i), C.GLint(j)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalMesh2.xml -func (gl *GL) EvalMesh2(mode glbase.Enum, i1, i2, j1, j2 int32) { - C.gl1_2_glEvalMesh2(gl.funcs, C.GLenum(mode), C.GLint(i1), C.GLint(i2), C.GLint(j1), C.GLint(j2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalPoint1.xml -func (gl *GL) EvalPoint1(i int32) { - C.gl1_2_glEvalPoint1(gl.funcs, C.GLint(i)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalMesh1.xml -func (gl *GL) EvalMesh1(mode glbase.Enum, i1, i2 int32) { - C.gl1_2_glEvalMesh1(gl.funcs, C.GLenum(mode), C.GLint(i1), C.GLint(i2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalCoord2fv.xml -func (gl *GL) EvalCoord2fv(u []float32) { - if len(u) != 2 { - panic("parameter u has incorrect length") - } - C.gl1_2_glEvalCoord2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&u[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalCoord2f.xml -func (gl *GL) EvalCoord2f(u, v float32) { - C.gl1_2_glEvalCoord2f(gl.funcs, C.GLfloat(u), C.GLfloat(v)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalCoord2dv.xml -func (gl *GL) EvalCoord2dv(u []float64) { - if len(u) != 2 { - panic("parameter u has incorrect length") - } - C.gl1_2_glEvalCoord2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&u[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalCoord2d.xml -func (gl *GL) EvalCoord2d(u, v float64) { - C.gl1_2_glEvalCoord2d(gl.funcs, C.GLdouble(u), C.GLdouble(v)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalCoord1fv.xml -func (gl *GL) EvalCoord1fv(u []float32) { - C.gl1_2_glEvalCoord1fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&u[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalCoord1f.xml -func (gl *GL) EvalCoord1f(u float32) { - C.gl1_2_glEvalCoord1f(gl.funcs, C.GLfloat(u)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalCoord1dv.xml -func (gl *GL) EvalCoord1dv(u []float64) { - C.gl1_2_glEvalCoord1dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&u[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalCoord1d.xml -func (gl *GL) EvalCoord1d(u float64) { - C.gl1_2_glEvalCoord1d(gl.funcs, C.GLdouble(u)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMapGrid2f.xml -func (gl *GL) MapGrid2f(un int32, u1, u2 float32, vn int32, v1, v2 float32) { - C.gl1_2_glMapGrid2f(gl.funcs, C.GLint(un), C.GLfloat(u1), C.GLfloat(u2), C.GLint(vn), C.GLfloat(v1), C.GLfloat(v2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMapGrid2d.xml -func (gl *GL) MapGrid2d(un int32, u1, u2 float64, vn int32, v1, v2 float64) { - C.gl1_2_glMapGrid2d(gl.funcs, C.GLint(un), C.GLdouble(u1), C.GLdouble(u2), C.GLint(vn), C.GLdouble(v1), C.GLdouble(v2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMapGrid1f.xml -func (gl *GL) MapGrid1f(un int32, u1, u2 float32) { - C.gl1_2_glMapGrid1f(gl.funcs, C.GLint(un), C.GLfloat(u1), C.GLfloat(u2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMapGrid1d.xml -func (gl *GL) MapGrid1d(un int32, u1, u2 float64) { - C.gl1_2_glMapGrid1d(gl.funcs, C.GLint(un), C.GLdouble(u1), C.GLdouble(u2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMap2f.xml -func (gl *GL) Map2f(target glbase.Enum, u1, u2 float32, ustride, uorder int32, v1, v2 float32, vstride, vorder int32, points []float32) { - C.gl1_2_glMap2f(gl.funcs, C.GLenum(target), C.GLfloat(u1), C.GLfloat(u2), C.GLint(ustride), C.GLint(uorder), C.GLfloat(v1), C.GLfloat(v2), C.GLint(vstride), C.GLint(vorder), (*C.GLfloat)(unsafe.Pointer(&points[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMap2d.xml -func (gl *GL) Map2d(target glbase.Enum, u1, u2 float64, ustride, uorder int32, v1, v2 float64, vstride, vorder int32, points []float64) { - C.gl1_2_glMap2d(gl.funcs, C.GLenum(target), C.GLdouble(u1), C.GLdouble(u2), C.GLint(ustride), C.GLint(uorder), C.GLdouble(v1), C.GLdouble(v2), C.GLint(vstride), C.GLint(vorder), (*C.GLdouble)(unsafe.Pointer(&points[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMap1f.xml -func (gl *GL) Map1f(target glbase.Enum, u1, u2 float32, stride, order int, points []float32) { - C.gl1_2_glMap1f(gl.funcs, C.GLenum(target), C.GLfloat(u1), C.GLfloat(u2), C.GLint(stride), C.GLint(order), (*C.GLfloat)(unsafe.Pointer(&points[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMap1d.xml -func (gl *GL) Map1d(target glbase.Enum, u1, u2 float64, stride, order int, points []float64) { - C.gl1_2_glMap1d(gl.funcs, C.GLenum(target), C.GLdouble(u1), C.GLdouble(u2), C.GLint(stride), C.GLint(order), (*C.GLdouble)(unsafe.Pointer(&points[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPushAttrib.xml -func (gl *GL) PushAttrib(mask glbase.Bitfield) { - C.gl1_2_glPushAttrib(gl.funcs, C.GLbitfield(mask)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPopAttrib.xml -func (gl *GL) PopAttrib() { - C.gl1_2_glPopAttrib(gl.funcs) -} - -// Accum executes an operation on the accumulation buffer. -// -// Parameter op defines the accumulation buffer operation (GL.ACCUM, GL.LOAD, -// GL.ADD, GL.MULT, or GL.RETURN) and specifies how the value parameter is -// used. -// -// The accumulation buffer is an extended-range color buffer. Images are not -// rendered into it. Rather, images rendered into one of the color buffers -// are added to the contents of the accumulation buffer after rendering. -// Effects such as antialiasing (of points, lines, and polygons), motion -// blur, and depth of field can be created by accumulating images generated -// with different transformation matrices. -// -// Each pixel in the accumulation buffer consists of red, green, blue, and -// alpha values. The number of bits per component in the accumulation buffer -// depends on the implementation. You can examine this number by calling -// GetIntegerv four times, with arguments GL.ACCUM_RED_BITS, -// GL.ACCUM_GREEN_BITS, GL.ACCUM_BLUE_BITS, and GL.ACCUM_ALPHA_BITS. -// Regardless of the number of bits per component, the range of values stored -// by each component is (-1, 1). The accumulation buffer pixels are mapped -// one-to-one with frame buffer pixels. -// -// All accumulation buffer operations are limited to the area of the current -// scissor box and applied identically to the red, green, blue, and alpha -// components of each pixel. If a Accum operation results in a value outside -// the range (-1, 1), the contents of an accumulation buffer pixel component -// are undefined. -// -// The operations are as follows: -// -// GL.ACCUM -// Obtains R, G, B, and A values from the buffer currently selected for -// reading (see ReadBuffer). Each component value is divided by 2 n - -// 1 , where n is the number of bits allocated to each color component -// in the currently selected buffer. The result is a floating-point -// value in the range 0 1 , which is multiplied by value and added to -// the corresponding pixel component in the accumulation buffer, -// thereby updating the accumulation buffer. -// -// GL.LOAD -// Similar to GL.ACCUM, except that the current value in the -// accumulation buffer is not used in the calculation of the new value. -// That is, the R, G, B, and A values from the currently selected -// buffer are divided by 2 n - 1 , multiplied by value, and then stored -// in the corresponding accumulation buffer cell, overwriting the -// current value. -// -// GL.ADD -// Adds value to each R, G, B, and A in the accumulation buffer. -// -// GL.MULT -// Multiplies each R, G, B, and A in the accumulation buffer by value -// and returns the scaled component to its corresponding accumulation -// buffer location. -// -// GL.RETURN -// Transfers accumulation buffer values to the color buffer or buffers -// currently selected for writing. Each R, G, B, and A component is -// multiplied by value, then multiplied by 2 n - 1 , clamped to the -// range 0 2 n - 1 , and stored in the corresponding display buffer -// cell. The only fragment operations that are applied to this transfer -// are pixel ownership, scissor, dithering, and color writemasks. -// -// To clear the accumulation buffer, call ClearAccum with R, G, B, and A -// values to set it to, then call Clear with the accumulation buffer -// enabled. -// -// Error GL.INVALID_ENUM is generated if op is not an accepted value. -// GL.INVALID_OPERATION is generated if there is no accumulation buffer. -// GL.INVALID_OPERATION is generated if Accum is executed between the -// execution of Begin and the corresponding execution of End. -func (gl *GL) Accum(op glbase.Enum, value float32) { - C.gl1_2_glAccum(gl.funcs, C.GLenum(op), C.GLfloat(value)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexMask.xml -func (gl *GL) IndexMask(mask uint32) { - C.gl1_2_glIndexMask(gl.funcs, C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glClearIndex.xml -func (gl *GL) ClearIndex(c float32) { - C.gl1_2_glClearIndex(gl.funcs, C.GLfloat(c)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glClearAccum.xml -func (gl *GL) ClearAccum(red, green, blue, alpha float32) { - C.gl1_2_glClearAccum(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPushName.xml -func (gl *GL) PushName(name uint32) { - C.gl1_2_glPushName(gl.funcs, C.GLuint(name)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPopName.xml -func (gl *GL) PopName() { - C.gl1_2_glPopName(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPassThrough.xml -func (gl *GL) PassThrough(token float32) { - C.gl1_2_glPassThrough(gl.funcs, C.GLfloat(token)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLoadName.xml -func (gl *GL) LoadName(name uint32) { - C.gl1_2_glLoadName(gl.funcs, C.GLuint(name)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glInitNames.xml -func (gl *GL) InitNames() { - C.gl1_2_glInitNames(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRenderMode.xml -func (gl *GL) RenderMode(mode glbase.Enum) int32 { - glresult := C.gl1_2_glRenderMode(gl.funcs, C.GLenum(mode)) - return int32(glresult) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSelectBuffer.xml -func (gl *GL) SelectBuffer(size int, buffer []glbase.Buffer) { - C.gl1_2_glSelectBuffer(gl.funcs, C.GLsizei(size), (*C.GLuint)(unsafe.Pointer(&buffer[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFeedbackBuffer.xml -func (gl *GL) FeedbackBuffer(size int, gltype glbase.Enum, buffer []float32) { - C.gl1_2_glFeedbackBuffer(gl.funcs, C.GLsizei(size), C.GLenum(gltype), (*C.GLfloat)(unsafe.Pointer(&buffer[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexGeniv.xml -func (gl *GL) TexGeniv(coord, pname glbase.Enum, params []int32) { - C.gl1_2_glTexGeniv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexGeni.xml -func (gl *GL) TexGeni(coord, pname glbase.Enum, param int32) { - C.gl1_2_glTexGeni(gl.funcs, C.GLenum(coord), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexGenfv.xml -func (gl *GL) TexGenfv(coord, pname glbase.Enum, params []float32) { - C.gl1_2_glTexGenfv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexGenf.xml -func (gl *GL) TexGenf(coord, pname glbase.Enum, param float32) { - C.gl1_2_glTexGenf(gl.funcs, C.GLenum(coord), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexGendv.xml -func (gl *GL) TexGendv(coord, pname glbase.Enum, params []float64) { - C.gl1_2_glTexGendv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexGend.xml -func (gl *GL) TexGend(coord, pname glbase.Enum, param float64) { - C.gl1_2_glTexGend(gl.funcs, C.GLenum(coord), C.GLenum(pname), C.GLdouble(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexEnviv.xml -func (gl *GL) TexEnviv(target, pname glbase.Enum, params []int32) { - C.gl1_2_glTexEnviv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexEnvi.xml -func (gl *GL) TexEnvi(target, pname glbase.Enum, param int32) { - C.gl1_2_glTexEnvi(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexEnvfv.xml -func (gl *GL) TexEnvfv(target, pname glbase.Enum, params []float32) { - C.gl1_2_glTexEnvfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexEnvf.xml -func (gl *GL) TexEnvf(target, pname glbase.Enum, param float32) { - C.gl1_2_glTexEnvf(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glShadeModel.xml -func (gl *GL) ShadeModel(mode glbase.Enum) { - C.gl1_2_glShadeModel(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPolygonStipple.xml -func (gl *GL) PolygonStipple(mask []uint8) { - C.gl1_2_glPolygonStipple(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&mask[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMaterialiv.xml -func (gl *GL) Materialiv(face, pname glbase.Enum, params []int32) { - C.gl1_2_glMaterialiv(gl.funcs, C.GLenum(face), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMateriali.xml -func (gl *GL) Materiali(face, pname glbase.Enum, param int32) { - C.gl1_2_glMateriali(gl.funcs, C.GLenum(face), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMaterialfv.xml -func (gl *GL) Materialfv(face, pname glbase.Enum, params []float32) { - C.gl1_2_glMaterialfv(gl.funcs, C.GLenum(face), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMaterialf.xml -func (gl *GL) Materialf(face, pname glbase.Enum, param float32) { - C.gl1_2_glMaterialf(gl.funcs, C.GLenum(face), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLineStipple.xml -func (gl *GL) LineStipple(factor int32, pattern uint16) { - C.gl1_2_glLineStipple(gl.funcs, C.GLint(factor), C.GLushort(pattern)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLightModeliv.xml -func (gl *GL) LightModeliv(pname glbase.Enum, params []int32) { - C.gl1_2_glLightModeliv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLightModeli.xml -func (gl *GL) LightModeli(pname glbase.Enum, param int32) { - C.gl1_2_glLightModeli(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLightModelfv.xml -func (gl *GL) LightModelfv(pname glbase.Enum, params []float32) { - C.gl1_2_glLightModelfv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLightModelf.xml -func (gl *GL) LightModelf(pname glbase.Enum, param float32) { - C.gl1_2_glLightModelf(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLightiv.xml -func (gl *GL) Lightiv(light, pname glbase.Enum, params []int32) { - C.gl1_2_glLightiv(gl.funcs, C.GLenum(light), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLighti.xml -func (gl *GL) Lighti(light, pname glbase.Enum, param int32) { - C.gl1_2_glLighti(gl.funcs, C.GLenum(light), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLightfv.xml -func (gl *GL) Lightfv(light, pname glbase.Enum, params []float32) { - C.gl1_2_glLightfv(gl.funcs, C.GLenum(light), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLightf.xml -func (gl *GL) Lightf(light, pname glbase.Enum, param float32) { - C.gl1_2_glLightf(gl.funcs, C.GLenum(light), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFogiv.xml -func (gl *GL) Fogiv(pname glbase.Enum, params []int32) { - C.gl1_2_glFogiv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFogi.xml -func (gl *GL) Fogi(pname glbase.Enum, param int32) { - C.gl1_2_glFogi(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFogfv.xml -func (gl *GL) Fogfv(pname glbase.Enum, params []float32) { - C.gl1_2_glFogfv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFogf.xml -func (gl *GL) Fogf(pname glbase.Enum, param float32) { - C.gl1_2_glFogf(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColorMaterial.xml -func (gl *GL) ColorMaterial(face, mode glbase.Enum) { - C.gl1_2_glColorMaterial(gl.funcs, C.GLenum(face), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glClipPlane.xml -func (gl *GL) ClipPlane(plane glbase.Enum, equation []float64) { - C.gl1_2_glClipPlane(gl.funcs, C.GLenum(plane), (*C.GLdouble)(unsafe.Pointer(&equation[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex4sv.xml -func (gl *GL) Vertex4sv(v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_2_glVertex4sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex4s.xml -func (gl *GL) Vertex4s(x, y, z, w int16) { - C.gl1_2_glVertex4s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z), C.GLshort(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex4iv.xml -func (gl *GL) Vertex4iv(v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_2_glVertex4iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex4i.xml -func (gl *GL) Vertex4i(x, y, z, w int) { - C.gl1_2_glVertex4i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z), C.GLint(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex4fv.xml -func (gl *GL) Vertex4fv(v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_2_glVertex4fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex4f.xml -func (gl *GL) Vertex4f(x, y, z, w float32) { - C.gl1_2_glVertex4f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z), C.GLfloat(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex4dv.xml -func (gl *GL) Vertex4dv(v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_2_glVertex4dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex4d.xml -func (gl *GL) Vertex4d(x, y, z, w float64) { - C.gl1_2_glVertex4d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z), C.GLdouble(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex3sv.xml -func (gl *GL) Vertex3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_2_glVertex3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex3s.xml -func (gl *GL) Vertex3s(x, y, z int16) { - C.gl1_2_glVertex3s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex3iv.xml -func (gl *GL) Vertex3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_2_glVertex3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex3i.xml -func (gl *GL) Vertex3i(x, y, z int) { - C.gl1_2_glVertex3i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex3fv.xml -func (gl *GL) Vertex3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_2_glVertex3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex3f.xml -func (gl *GL) Vertex3f(x, y, z float32) { - C.gl1_2_glVertex3f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex3dv.xml -func (gl *GL) Vertex3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_2_glVertex3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex3d.xml -func (gl *GL) Vertex3d(x, y, z float64) { - C.gl1_2_glVertex3d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex2sv.xml -func (gl *GL) Vertex2sv(v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_2_glVertex2sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex2s.xml -func (gl *GL) Vertex2s(x, y int16) { - C.gl1_2_glVertex2s(gl.funcs, C.GLshort(x), C.GLshort(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex2iv.xml -func (gl *GL) Vertex2iv(v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_2_glVertex2iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex2i.xml -func (gl *GL) Vertex2i(x, y int) { - C.gl1_2_glVertex2i(gl.funcs, C.GLint(x), C.GLint(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex2fv.xml -func (gl *GL) Vertex2fv(v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_2_glVertex2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex2f.xml -func (gl *GL) Vertex2f(x, y float32) { - C.gl1_2_glVertex2f(gl.funcs, C.GLfloat(x), C.GLfloat(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex2dv.xml -func (gl *GL) Vertex2dv(v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_2_glVertex2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex2d.xml -func (gl *GL) Vertex2d(x, y float64) { - C.gl1_2_glVertex2d(gl.funcs, C.GLdouble(x), C.GLdouble(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord4sv.xml -func (gl *GL) TexCoord4sv(v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_2_glTexCoord4sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord4s.xml -func (gl *GL) TexCoord4s(s, t, r, q int16) { - C.gl1_2_glTexCoord4s(gl.funcs, C.GLshort(s), C.GLshort(t), C.GLshort(r), C.GLshort(q)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord4iv.xml -func (gl *GL) TexCoord4iv(v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_2_glTexCoord4iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord4i.xml -func (gl *GL) TexCoord4i(s, t, r, q int32) { - C.gl1_2_glTexCoord4i(gl.funcs, C.GLint(s), C.GLint(t), C.GLint(r), C.GLint(q)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord4fv.xml -func (gl *GL) TexCoord4fv(v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_2_glTexCoord4fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord4f.xml -func (gl *GL) TexCoord4f(s, t, r, q float32) { - C.gl1_2_glTexCoord4f(gl.funcs, C.GLfloat(s), C.GLfloat(t), C.GLfloat(r), C.GLfloat(q)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord4dv.xml -func (gl *GL) TexCoord4dv(v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_2_glTexCoord4dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord4d.xml -func (gl *GL) TexCoord4d(s, t, r, q float64) { - C.gl1_2_glTexCoord4d(gl.funcs, C.GLdouble(s), C.GLdouble(t), C.GLdouble(r), C.GLdouble(q)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord3sv.xml -func (gl *GL) TexCoord3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_2_glTexCoord3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord3s.xml -func (gl *GL) TexCoord3s(s, t, r int16) { - C.gl1_2_glTexCoord3s(gl.funcs, C.GLshort(s), C.GLshort(t), C.GLshort(r)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord3iv.xml -func (gl *GL) TexCoord3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_2_glTexCoord3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord3i.xml -func (gl *GL) TexCoord3i(s, t, r int32) { - C.gl1_2_glTexCoord3i(gl.funcs, C.GLint(s), C.GLint(t), C.GLint(r)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord3fv.xml -func (gl *GL) TexCoord3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_2_glTexCoord3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord3f.xml -func (gl *GL) TexCoord3f(s, t, r float32) { - C.gl1_2_glTexCoord3f(gl.funcs, C.GLfloat(s), C.GLfloat(t), C.GLfloat(r)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord3dv.xml -func (gl *GL) TexCoord3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_2_glTexCoord3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord3d.xml -func (gl *GL) TexCoord3d(s, t, r float64) { - C.gl1_2_glTexCoord3d(gl.funcs, C.GLdouble(s), C.GLdouble(t), C.GLdouble(r)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord2sv.xml -func (gl *GL) TexCoord2sv(v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_2_glTexCoord2sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord2s.xml -func (gl *GL) TexCoord2s(s, t int16) { - C.gl1_2_glTexCoord2s(gl.funcs, C.GLshort(s), C.GLshort(t)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord2iv.xml -func (gl *GL) TexCoord2iv(v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_2_glTexCoord2iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord2i.xml -func (gl *GL) TexCoord2i(s, t int32) { - C.gl1_2_glTexCoord2i(gl.funcs, C.GLint(s), C.GLint(t)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord2fv.xml -func (gl *GL) TexCoord2fv(v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_2_glTexCoord2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord2f.xml -func (gl *GL) TexCoord2f(s, t float32) { - C.gl1_2_glTexCoord2f(gl.funcs, C.GLfloat(s), C.GLfloat(t)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord2dv.xml -func (gl *GL) TexCoord2dv(v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_2_glTexCoord2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord2d.xml -func (gl *GL) TexCoord2d(s, t float64) { - C.gl1_2_glTexCoord2d(gl.funcs, C.GLdouble(s), C.GLdouble(t)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord1sv.xml -func (gl *GL) TexCoord1sv(v []int16) { - C.gl1_2_glTexCoord1sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord1s.xml -func (gl *GL) TexCoord1s(s int16) { - C.gl1_2_glTexCoord1s(gl.funcs, C.GLshort(s)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord1iv.xml -func (gl *GL) TexCoord1iv(v []int32) { - C.gl1_2_glTexCoord1iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord1i.xml -func (gl *GL) TexCoord1i(s int32) { - C.gl1_2_glTexCoord1i(gl.funcs, C.GLint(s)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord1fv.xml -func (gl *GL) TexCoord1fv(v []float32) { - C.gl1_2_glTexCoord1fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord1f.xml -func (gl *GL) TexCoord1f(s float32) { - C.gl1_2_glTexCoord1f(gl.funcs, C.GLfloat(s)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord1dv.xml -func (gl *GL) TexCoord1dv(v []float64) { - C.gl1_2_glTexCoord1dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord1d.xml -func (gl *GL) TexCoord1d(s float64) { - C.gl1_2_glTexCoord1d(gl.funcs, C.GLdouble(s)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRectsv.xml -func (gl *GL) Rectsv(v1, v2 []int16) { - C.gl1_2_glRectsv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v1[0])), (*C.GLshort)(unsafe.Pointer(&v2[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRects.xml -func (gl *GL) Rects(x1, y1, x2, y2 int16) { - C.gl1_2_glRects(gl.funcs, C.GLshort(x1), C.GLshort(y1), C.GLshort(x2), C.GLshort(y2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRectiv.xml -func (gl *GL) Rectiv(v1, v2 []int32) { - C.gl1_2_glRectiv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v1[0])), (*C.GLint)(unsafe.Pointer(&v2[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRecti.xml -func (gl *GL) Recti(x1, y1, x2, y2 int32) { - C.gl1_2_glRecti(gl.funcs, C.GLint(x1), C.GLint(y1), C.GLint(x2), C.GLint(y2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRectfv.xml -func (gl *GL) Rectfv(v1, v2 []float32) { - C.gl1_2_glRectfv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v1[0])), (*C.GLfloat)(unsafe.Pointer(&v2[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRectf.xml -func (gl *GL) Rectf(x1, y1, x2, y2 float32) { - C.gl1_2_glRectf(gl.funcs, C.GLfloat(x1), C.GLfloat(y1), C.GLfloat(x2), C.GLfloat(y2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRectdv.xml -func (gl *GL) Rectdv(v1, v2 []float64) { - C.gl1_2_glRectdv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v1[0])), (*C.GLdouble)(unsafe.Pointer(&v2[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRectd.xml -func (gl *GL) Rectd(x1, y1, x2, y2 float64) { - C.gl1_2_glRectd(gl.funcs, C.GLdouble(x1), C.GLdouble(y1), C.GLdouble(x2), C.GLdouble(y2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos4sv.xml -func (gl *GL) RasterPos4sv(v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_2_glRasterPos4sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos4s.xml -func (gl *GL) RasterPos4s(x, y, z, w int16) { - C.gl1_2_glRasterPos4s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z), C.GLshort(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos4iv.xml -func (gl *GL) RasterPos4iv(v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_2_glRasterPos4iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos4i.xml -func (gl *GL) RasterPos4i(x, y, z, w int) { - C.gl1_2_glRasterPos4i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z), C.GLint(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos4fv.xml -func (gl *GL) RasterPos4fv(v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_2_glRasterPos4fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos4f.xml -func (gl *GL) RasterPos4f(x, y, z, w float32) { - C.gl1_2_glRasterPos4f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z), C.GLfloat(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos4dv.xml -func (gl *GL) RasterPos4dv(v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_2_glRasterPos4dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos4d.xml -func (gl *GL) RasterPos4d(x, y, z, w float64) { - C.gl1_2_glRasterPos4d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z), C.GLdouble(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos3sv.xml -func (gl *GL) RasterPos3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_2_glRasterPos3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos3s.xml -func (gl *GL) RasterPos3s(x, y, z int16) { - C.gl1_2_glRasterPos3s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos3iv.xml -func (gl *GL) RasterPos3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_2_glRasterPos3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos3i.xml -func (gl *GL) RasterPos3i(x, y, z int) { - C.gl1_2_glRasterPos3i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos3fv.xml -func (gl *GL) RasterPos3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_2_glRasterPos3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos3f.xml -func (gl *GL) RasterPos3f(x, y, z float32) { - C.gl1_2_glRasterPos3f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos3dv.xml -func (gl *GL) RasterPos3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_2_glRasterPos3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos3d.xml -func (gl *GL) RasterPos3d(x, y, z float64) { - C.gl1_2_glRasterPos3d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos2sv.xml -func (gl *GL) RasterPos2sv(v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_2_glRasterPos2sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos2s.xml -func (gl *GL) RasterPos2s(x, y int16) { - C.gl1_2_glRasterPos2s(gl.funcs, C.GLshort(x), C.GLshort(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos2iv.xml -func (gl *GL) RasterPos2iv(v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_2_glRasterPos2iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos2i.xml -func (gl *GL) RasterPos2i(x, y int) { - C.gl1_2_glRasterPos2i(gl.funcs, C.GLint(x), C.GLint(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos2fv.xml -func (gl *GL) RasterPos2fv(v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_2_glRasterPos2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos2f.xml -func (gl *GL) RasterPos2f(x, y float32) { - C.gl1_2_glRasterPos2f(gl.funcs, C.GLfloat(x), C.GLfloat(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos2dv.xml -func (gl *GL) RasterPos2dv(v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_2_glRasterPos2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos2d.xml -func (gl *GL) RasterPos2d(x, y float64) { - C.gl1_2_glRasterPos2d(gl.funcs, C.GLdouble(x), C.GLdouble(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3sv.xml -func (gl *GL) Normal3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_2_glNormal3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3s.xml -func (gl *GL) Normal3s(nx, ny, nz int16) { - C.gl1_2_glNormal3s(gl.funcs, C.GLshort(nx), C.GLshort(ny), C.GLshort(nz)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3iv.xml -func (gl *GL) Normal3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_2_glNormal3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3i.xml -func (gl *GL) Normal3i(nx, ny, nz int32) { - C.gl1_2_glNormal3i(gl.funcs, C.GLint(nx), C.GLint(ny), C.GLint(nz)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3fv.xml -func (gl *GL) Normal3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_2_glNormal3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3f.xml -func (gl *GL) Normal3f(nx, ny, nz float32) { - C.gl1_2_glNormal3f(gl.funcs, C.GLfloat(nx), C.GLfloat(ny), C.GLfloat(nz)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3dv.xml -func (gl *GL) Normal3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_2_glNormal3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3d.xml -func (gl *GL) Normal3d(nx, ny, nz float64) { - C.gl1_2_glNormal3d(gl.funcs, C.GLdouble(nx), C.GLdouble(ny), C.GLdouble(nz)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3bv.xml -func (gl *GL) Normal3bv(v []byte) { - C.gl1_2_glNormal3bv(gl.funcs, (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3b.xml -func (gl *GL) Normal3b(nx, ny, nz byte) { - C.gl1_2_glNormal3b(gl.funcs, C.GLbyte(nx), C.GLbyte(ny), C.GLbyte(nz)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexsv.xml -func (gl *GL) Indexsv(c []int16) { - C.gl1_2_glIndexsv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexs.xml -func (gl *GL) Indexs(c int16) { - C.gl1_2_glIndexs(gl.funcs, C.GLshort(c)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexiv.xml -func (gl *GL) Indexiv(c []int32) { - C.gl1_2_glIndexiv(gl.funcs, (*C.GLint)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexi.xml -func (gl *GL) Indexi(c int32) { - C.gl1_2_glIndexi(gl.funcs, C.GLint(c)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexfv.xml -func (gl *GL) Indexfv(c []float32) { - C.gl1_2_glIndexfv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexf.xml -func (gl *GL) Indexf(c float32) { - C.gl1_2_glIndexf(gl.funcs, C.GLfloat(c)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexdv.xml -func (gl *GL) Indexdv(c []float64) { - C.gl1_2_glIndexdv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexd.xml -func (gl *GL) Indexd(c float64) { - C.gl1_2_glIndexd(gl.funcs, C.GLdouble(c)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEnd.xml -func (gl *GL) End() { - C.gl1_2_glEnd(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEdgeFlagv.xml -func (gl *GL) EdgeFlagv(flag []bool) { - C.gl1_2_glEdgeFlagv(gl.funcs, (*C.GLboolean)(unsafe.Pointer(&flag[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEdgeFlag.xml -func (gl *GL) EdgeFlag(flag bool) { - C.gl1_2_glEdgeFlag(gl.funcs, *(*C.GLboolean)(unsafe.Pointer(&flag))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4usv.xml -func (gl *GL) Color4usv(v []uint16) { - C.gl1_2_glColor4usv(gl.funcs, (*C.GLushort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4us.xml -func (gl *GL) Color4us(red, green, blue, alpha uint16) { - C.gl1_2_glColor4us(gl.funcs, C.GLushort(red), C.GLushort(green), C.GLushort(blue), C.GLushort(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4uiv.xml -func (gl *GL) Color4uiv(v []uint32) { - C.gl1_2_glColor4uiv(gl.funcs, (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4ui.xml -func (gl *GL) Color4ui(red, green, blue, alpha uint32) { - C.gl1_2_glColor4ui(gl.funcs, C.GLuint(red), C.GLuint(green), C.GLuint(blue), C.GLuint(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4ubv.xml -func (gl *GL) Color4ubv(v []uint8) { - C.gl1_2_glColor4ubv(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4ub.xml -func (gl *GL) Color4ub(red, green, blue, alpha uint8) { - C.gl1_2_glColor4ub(gl.funcs, C.GLubyte(red), C.GLubyte(green), C.GLubyte(blue), C.GLubyte(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4sv.xml -func (gl *GL) Color4sv(v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_2_glColor4sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4s.xml -func (gl *GL) Color4s(red, green, blue, alpha int16) { - C.gl1_2_glColor4s(gl.funcs, C.GLshort(red), C.GLshort(green), C.GLshort(blue), C.GLshort(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4iv.xml -func (gl *GL) Color4iv(v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_2_glColor4iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4i.xml -func (gl *GL) Color4i(red, green, blue, alpha int32) { - C.gl1_2_glColor4i(gl.funcs, C.GLint(red), C.GLint(green), C.GLint(blue), C.GLint(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4fv.xml -func (gl *GL) Color4fv(v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_2_glColor4fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4f.xml -func (gl *GL) Color4f(red, green, blue, alpha float32) { - C.gl1_2_glColor4f(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4dv.xml -func (gl *GL) Color4dv(v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_2_glColor4dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4d.xml -func (gl *GL) Color4d(red, green, blue, alpha float64) { - C.gl1_2_glColor4d(gl.funcs, C.GLdouble(red), C.GLdouble(green), C.GLdouble(blue), C.GLdouble(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4bv.xml -func (gl *GL) Color4bv(v []byte) { - C.gl1_2_glColor4bv(gl.funcs, (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4b.xml -func (gl *GL) Color4b(red, green, blue, alpha byte) { - C.gl1_2_glColor4b(gl.funcs, C.GLbyte(red), C.GLbyte(green), C.GLbyte(blue), C.GLbyte(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3usv.xml -func (gl *GL) Color3usv(v []uint16) { - C.gl1_2_glColor3usv(gl.funcs, (*C.GLushort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3us.xml -func (gl *GL) Color3us(red, green, blue uint16) { - C.gl1_2_glColor3us(gl.funcs, C.GLushort(red), C.GLushort(green), C.GLushort(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3uiv.xml -func (gl *GL) Color3uiv(v []uint32) { - C.gl1_2_glColor3uiv(gl.funcs, (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3ui.xml -func (gl *GL) Color3ui(red, green, blue uint32) { - C.gl1_2_glColor3ui(gl.funcs, C.GLuint(red), C.GLuint(green), C.GLuint(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3ubv.xml -func (gl *GL) Color3ubv(v []uint8) { - C.gl1_2_glColor3ubv(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3ub.xml -func (gl *GL) Color3ub(red, green, blue uint8) { - C.gl1_2_glColor3ub(gl.funcs, C.GLubyte(red), C.GLubyte(green), C.GLubyte(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3sv.xml -func (gl *GL) Color3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_2_glColor3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3s.xml -func (gl *GL) Color3s(red, green, blue int16) { - C.gl1_2_glColor3s(gl.funcs, C.GLshort(red), C.GLshort(green), C.GLshort(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3iv.xml -func (gl *GL) Color3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_2_glColor3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3i.xml -func (gl *GL) Color3i(red, green, blue int32) { - C.gl1_2_glColor3i(gl.funcs, C.GLint(red), C.GLint(green), C.GLint(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3fv.xml -func (gl *GL) Color3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_2_glColor3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3f.xml -func (gl *GL) Color3f(red, green, blue float32) { - C.gl1_2_glColor3f(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3dv.xml -func (gl *GL) Color3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_2_glColor3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3d.xml -func (gl *GL) Color3d(red, green, blue float64) { - C.gl1_2_glColor3d(gl.funcs, C.GLdouble(red), C.GLdouble(green), C.GLdouble(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3bv.xml -func (gl *GL) Color3bv(v []byte) { - C.gl1_2_glColor3bv(gl.funcs, (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3b.xml -func (gl *GL) Color3b(red, green, blue byte) { - C.gl1_2_glColor3b(gl.funcs, C.GLbyte(red), C.GLbyte(green), C.GLbyte(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glBitmap.xml -func (gl *GL) Bitmap(width, height int, xorig, yorig, xmove, ymove float32, bitmap []uint8) { - C.gl1_2_glBitmap(gl.funcs, C.GLsizei(width), C.GLsizei(height), C.GLfloat(xorig), C.GLfloat(yorig), C.GLfloat(xmove), C.GLfloat(ymove), (*C.GLubyte)(unsafe.Pointer(&bitmap[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glBegin.xml -func (gl *GL) Begin(mode glbase.Enum) { - C.gl1_2_glBegin(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glListBase.xml -func (gl *GL) ListBase(base uint32) { - C.gl1_2_glListBase(gl.funcs, C.GLuint(base)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGenLists.xml -func (gl *GL) GenLists(range_ int32) uint32 { - glresult := C.gl1_2_glGenLists(gl.funcs, C.GLsizei(range_)) - return uint32(glresult) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDeleteLists.xml -func (gl *GL) DeleteLists(list uint32, range_ int32) { - C.gl1_2_glDeleteLists(gl.funcs, C.GLuint(list), C.GLsizei(range_)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCallLists.xml -func (gl *GL) CallLists(n int, gltype glbase.Enum, lists interface{}) { - var lists_ptr unsafe.Pointer - var lists_v = reflect.ValueOf(lists) - if lists != nil && lists_v.Kind() != reflect.Slice { - panic("parameter lists must be a slice") - } - if lists != nil { - lists_ptr = unsafe.Pointer(lists_v.Index(0).Addr().Pointer()) - } - C.gl1_2_glCallLists(gl.funcs, C.GLsizei(n), C.GLenum(gltype), lists_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCallList.xml -func (gl *GL) CallList(list uint32) { - C.gl1_2_glCallList(gl.funcs, C.GLuint(list)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEndList.xml -func (gl *GL) EndList() { - C.gl1_2_glEndList(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNewList.xml -func (gl *GL) NewList(list uint32, mode glbase.Enum) { - C.gl1_2_glNewList(gl.funcs, C.GLuint(list), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPushClientAttrib.xml -func (gl *GL) PushClientAttrib(mask glbase.Bitfield) { - C.gl1_2_glPushClientAttrib(gl.funcs, C.GLbitfield(mask)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPopClientAttrib.xml -func (gl *GL) PopClientAttrib() { - C.gl1_2_glPopClientAttrib(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPrioritizeTextures.xml -func (gl *GL) PrioritizeTextures(n int, textures []glbase.Texture, priorities []float32) { - C.gl1_2_glPrioritizeTextures(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0])), (*C.GLfloat)(unsafe.Pointer(&priorities[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glAreTexturesResident.xml -func (gl *GL) AreTexturesResident(n int, textures []glbase.Texture, residences []bool) bool { - glresult := C.gl1_2_glAreTexturesResident(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0])), (*C.GLboolean)(unsafe.Pointer(&residences[0]))) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexPointer.xml -func (gl *GL) VertexPointer(size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl1_2_glVertexPointer(gl.funcs, C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoordPointer.xml -func (gl *GL) TexCoordPointer(size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl1_2_glTexCoordPointer(gl.funcs, C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormalPointer.xml -func (gl *GL) NormalPointer(gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl1_2_glNormalPointer(gl.funcs, C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glInterleavedArrays.xml -func (gl *GL) InterleavedArrays(format glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl1_2_glInterleavedArrays(gl.funcs, C.GLenum(format), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexPointer.xml -func (gl *GL) IndexPointer(gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl1_2_glIndexPointer(gl.funcs, C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEnableClientState.xml -func (gl *GL) EnableClientState(array glbase.Enum) { - C.gl1_2_glEnableClientState(gl.funcs, C.GLenum(array)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEdgeFlagPointer.xml -func (gl *GL) EdgeFlagPointer(stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl1_2_glEdgeFlagPointer(gl.funcs, C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDisableClientState.xml -func (gl *GL) DisableClientState(array glbase.Enum) { - C.gl1_2_glDisableClientState(gl.funcs, C.GLenum(array)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColorPointer.xml -func (gl *GL) ColorPointer(size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl1_2_glColorPointer(gl.funcs, C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glArrayElement.xml -func (gl *GL) ArrayElement(i int32) { - C.gl1_2_glArrayElement(gl.funcs, C.GLint(i)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glResetMinmax.xml -func (gl *GL) ResetMinmax(target glbase.Enum) { - C.gl1_2_glResetMinmax(gl.funcs, C.GLenum(target)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glResetHistogram.xml -func (gl *GL) ResetHistogram(target glbase.Enum) { - C.gl1_2_glResetHistogram(gl.funcs, C.GLenum(target)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMinmax.xml -func (gl *GL) Minmax(target, internalFormat glbase.Enum, sink bool) { - C.gl1_2_glMinmax(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), *(*C.GLboolean)(unsafe.Pointer(&sink))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glHistogram.xml -func (gl *GL) Histogram(target glbase.Enum, width int, internalFormat glbase.Enum, sink bool) { - C.gl1_2_glHistogram(gl.funcs, C.GLenum(target), C.GLsizei(width), C.GLenum(internalFormat), *(*C.GLboolean)(unsafe.Pointer(&sink))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetMinmaxParameteriv.xml -func (gl *GL) GetMinmaxParameteriv(target, pname glbase.Enum, params []int32) { - C.gl1_2_glGetMinmaxParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetMinmaxParameterfv.xml -func (gl *GL) GetMinmaxParameterfv(target, pname glbase.Enum, params []float32) { - C.gl1_2_glGetMinmaxParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetMinmax.xml -func (gl *GL) GetMinmax(target glbase.Enum, reset bool, format, gltype glbase.Enum, values interface{}) { - var values_ptr unsafe.Pointer - var values_v = reflect.ValueOf(values) - if values != nil && values_v.Kind() != reflect.Slice { - panic("parameter values must be a slice") - } - if values != nil { - values_ptr = unsafe.Pointer(values_v.Index(0).Addr().Pointer()) - } - C.gl1_2_glGetMinmax(gl.funcs, C.GLenum(target), *(*C.GLboolean)(unsafe.Pointer(&reset)), C.GLenum(format), C.GLenum(gltype), values_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetHistogramParameteriv.xml -func (gl *GL) GetHistogramParameteriv(target, pname glbase.Enum, params []int32) { - C.gl1_2_glGetHistogramParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetHistogramParameterfv.xml -func (gl *GL) GetHistogramParameterfv(target, pname glbase.Enum, params []float32) { - C.gl1_2_glGetHistogramParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetHistogram.xml -func (gl *GL) GetHistogram(target glbase.Enum, reset bool, format, gltype glbase.Enum, values interface{}) { - var values_ptr unsafe.Pointer - var values_v = reflect.ValueOf(values) - if values != nil && values_v.Kind() != reflect.Slice { - panic("parameter values must be a slice") - } - if values != nil { - values_ptr = unsafe.Pointer(values_v.Index(0).Addr().Pointer()) - } - C.gl1_2_glGetHistogram(gl.funcs, C.GLenum(target), *(*C.GLboolean)(unsafe.Pointer(&reset)), C.GLenum(format), C.GLenum(gltype), values_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSeparableFilter2D.xml -func (gl *GL) SeparableFilter2D(target, internalFormat glbase.Enum, width, height int, format, gltype glbase.Enum, row, column interface{}) { - var row_ptr unsafe.Pointer - var row_v = reflect.ValueOf(row) - if row != nil && row_v.Kind() != reflect.Slice { - panic("parameter row must be a slice") - } - if row != nil { - row_ptr = unsafe.Pointer(row_v.Index(0).Addr().Pointer()) - } - var column_ptr unsafe.Pointer - var column_v = reflect.ValueOf(column) - if column != nil && column_v.Kind() != reflect.Slice { - panic("parameter column must be a slice") - } - if column != nil { - column_ptr = unsafe.Pointer(column_v.Index(0).Addr().Pointer()) - } - C.gl1_2_glSeparableFilter2D(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), row_ptr, column_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetSeparableFilter.xml -func (gl *GL) GetSeparableFilter(target, format, gltype glbase.Enum, row, column, span interface{}) { - var row_ptr unsafe.Pointer - var row_v = reflect.ValueOf(row) - if row != nil && row_v.Kind() != reflect.Slice { - panic("parameter row must be a slice") - } - if row != nil { - row_ptr = unsafe.Pointer(row_v.Index(0).Addr().Pointer()) - } - var column_ptr unsafe.Pointer - var column_v = reflect.ValueOf(column) - if column != nil && column_v.Kind() != reflect.Slice { - panic("parameter column must be a slice") - } - if column != nil { - column_ptr = unsafe.Pointer(column_v.Index(0).Addr().Pointer()) - } - var span_ptr unsafe.Pointer - var span_v = reflect.ValueOf(span) - if span != nil && span_v.Kind() != reflect.Slice { - panic("parameter span must be a slice") - } - if span != nil { - span_ptr = unsafe.Pointer(span_v.Index(0).Addr().Pointer()) - } - C.gl1_2_glGetSeparableFilter(gl.funcs, C.GLenum(target), C.GLenum(format), C.GLenum(gltype), row_ptr, column_ptr, span_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetConvolutionParameteriv.xml -func (gl *GL) GetConvolutionParameteriv(target, pname glbase.Enum, params []int32) { - C.gl1_2_glGetConvolutionParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetConvolutionParameterfv.xml -func (gl *GL) GetConvolutionParameterfv(target, pname glbase.Enum, params []float32) { - C.gl1_2_glGetConvolutionParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetConvolutionFilter.xml -func (gl *GL) GetConvolutionFilter(target, format, gltype glbase.Enum, image interface{}) { - var image_ptr unsafe.Pointer - var image_v = reflect.ValueOf(image) - if image != nil && image_v.Kind() != reflect.Slice { - panic("parameter image must be a slice") - } - if image != nil { - image_ptr = unsafe.Pointer(image_v.Index(0).Addr().Pointer()) - } - C.gl1_2_glGetConvolutionFilter(gl.funcs, C.GLenum(target), C.GLenum(format), C.GLenum(gltype), image_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyConvolutionFilter2D.xml -func (gl *GL) CopyConvolutionFilter2D(target, internalFormat glbase.Enum, x, y, width, height int) { - C.gl1_2_glCopyConvolutionFilter2D(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyConvolutionFilter1D.xml -func (gl *GL) CopyConvolutionFilter1D(target, internalFormat glbase.Enum, x, y, width int) { - C.gl1_2_glCopyConvolutionFilter1D(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glConvolutionParameteriv.xml -func (gl *GL) ConvolutionParameteriv(target, pname glbase.Enum, params []int32) { - C.gl1_2_glConvolutionParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glConvolutionParameteri.xml -func (gl *GL) ConvolutionParameteri(target, pname glbase.Enum, params int32) { - C.gl1_2_glConvolutionParameteri(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLint(params)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glConvolutionParameterfv.xml -func (gl *GL) ConvolutionParameterfv(target, pname glbase.Enum, params []float32) { - C.gl1_2_glConvolutionParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glConvolutionParameterf.xml -func (gl *GL) ConvolutionParameterf(target, pname glbase.Enum, params float32) { - C.gl1_2_glConvolutionParameterf(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLfloat(params)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glConvolutionFilter2D.xml -func (gl *GL) ConvolutionFilter2D(target, internalFormat glbase.Enum, width, height int, format, gltype glbase.Enum, image interface{}) { - var image_ptr unsafe.Pointer - var image_v = reflect.ValueOf(image) - if image != nil && image_v.Kind() != reflect.Slice { - panic("parameter image must be a slice") - } - if image != nil { - image_ptr = unsafe.Pointer(image_v.Index(0).Addr().Pointer()) - } - C.gl1_2_glConvolutionFilter2D(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), image_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glConvolutionFilter1D.xml -func (gl *GL) ConvolutionFilter1D(target, internalFormat glbase.Enum, width int, format, gltype glbase.Enum, image interface{}) { - var image_ptr unsafe.Pointer - var image_v = reflect.ValueOf(image) - if image != nil && image_v.Kind() != reflect.Slice { - panic("parameter image must be a slice") - } - if image != nil { - image_ptr = unsafe.Pointer(image_v.Index(0).Addr().Pointer()) - } - C.gl1_2_glConvolutionFilter1D(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLsizei(width), C.GLenum(format), C.GLenum(gltype), image_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyColorSubTable.xml -func (gl *GL) CopyColorSubTable(target glbase.Enum, start int32, x, y, width int) { - C.gl1_2_glCopyColorSubTable(gl.funcs, C.GLenum(target), C.GLsizei(start), C.GLint(x), C.GLint(y), C.GLsizei(width)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColorSubTable.xml -func (gl *GL) ColorSubTable(target glbase.Enum, start int32, count int, format, gltype glbase.Enum, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl1_2_glColorSubTable(gl.funcs, C.GLenum(target), C.GLsizei(start), C.GLsizei(count), C.GLenum(format), C.GLenum(gltype), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetColorTableParameteriv.xml -func (gl *GL) GetColorTableParameteriv(target, pname glbase.Enum, params []int32) { - C.gl1_2_glGetColorTableParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetColorTableParameterfv.xml -func (gl *GL) GetColorTableParameterfv(target, pname glbase.Enum, params []float32) { - C.gl1_2_glGetColorTableParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetColorTable.xml -func (gl *GL) GetColorTable(target, format, gltype glbase.Enum, table interface{}) { - var table_ptr unsafe.Pointer - var table_v = reflect.ValueOf(table) - if table != nil && table_v.Kind() != reflect.Slice { - panic("parameter table must be a slice") - } - if table != nil { - table_ptr = unsafe.Pointer(table_v.Index(0).Addr().Pointer()) - } - C.gl1_2_glGetColorTable(gl.funcs, C.GLenum(target), C.GLenum(format), C.GLenum(gltype), table_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyColorTable.xml -func (gl *GL) CopyColorTable(target, internalFormat glbase.Enum, x, y, width int) { - C.gl1_2_glCopyColorTable(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColorTableParameteriv.xml -func (gl *GL) ColorTableParameteriv(target, pname glbase.Enum, params []int32) { - C.gl1_2_glColorTableParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColorTableParameterfv.xml -func (gl *GL) ColorTableParameterfv(target, pname glbase.Enum, params []float32) { - C.gl1_2_glColorTableParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColorTable.xml -func (gl *GL) ColorTable(target, internalFormat glbase.Enum, width int, format, gltype glbase.Enum, table interface{}) { - var table_ptr unsafe.Pointer - var table_v = reflect.ValueOf(table) - if table != nil && table_v.Kind() != reflect.Slice { - panic("parameter table must be a slice") - } - if table != nil { - table_ptr = unsafe.Pointer(table_v.Index(0).Addr().Pointer()) - } - C.gl1_2_glColorTable(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLsizei(width), C.GLenum(format), C.GLenum(gltype), table_ptr) -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/1.3/funcs.cpp b/Godeps/_workspace/src/github.com/obscuren/qml/gl/1.3/funcs.cpp deleted file mode 100644 index 582d209070..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/1.3/funcs.cpp +++ /dev/null @@ -1,2526 +0,0 @@ - -// ** file automatically generated by glgen -- do not edit manually ** - -#include -#include - -#include "funcs.h" - -void *gl1_3_funcs() { - QOpenGLFunctions_1_3* funcs = QOpenGLContext::currentContext()->versionFunctions(); - if (!funcs) { - return 0; - } - funcs->initializeOpenGLFunctions(); - return funcs; -} - - -void gl1_3_glViewport(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glViewport(x, y, width, height); -} - -void gl1_3_glDepthRange(void *_glfuncs, GLdouble nearVal, GLdouble farVal) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthRange(nearVal, farVal); -} - -GLboolean gl1_3_glIsEnabled(void *_glfuncs, GLenum cap) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsEnabled(cap); -} - -void gl1_3_glGetTexLevelParameteriv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLint* params) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexLevelParameteriv(target, level, pname, params); -} - -void gl1_3_glGetTexLevelParameterfv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexLevelParameterfv(target, level, pname, params); -} - -void gl1_3_glGetTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameteriv(target, pname, params); -} - -void gl1_3_glGetTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameterfv(target, pname, params); -} - -void gl1_3_glGetTexImage(void *_glfuncs, GLenum target, GLint level, GLenum format, GLenum gltype, GLvoid* pixels) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexImage(target, level, format, gltype, pixels); -} - -void gl1_3_glGetIntegerv(void *_glfuncs, GLenum pname, GLint* params) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetIntegerv(pname, params); -} - -void gl1_3_glGetFloatv(void *_glfuncs, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetFloatv(pname, params); -} - -GLenum gl1_3_glGetError(void *_glfuncs) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetError(); -} - -void gl1_3_glGetDoublev(void *_glfuncs, GLenum pname, GLdouble* params) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetDoublev(pname, params); -} - -void gl1_3_glGetBooleanv(void *_glfuncs, GLenum pname, GLboolean* params) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBooleanv(pname, params); -} - -void gl1_3_glReadPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum gltype, GLvoid* pixels) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glReadPixels(x, y, width, height, format, gltype, pixels); -} - -void gl1_3_glReadBuffer(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glReadBuffer(mode); -} - -void gl1_3_glPixelStorei(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelStorei(pname, param); -} - -void gl1_3_glPixelStoref(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelStoref(pname, param); -} - -void gl1_3_glDepthFunc(void *_glfuncs, GLenum glfunc) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthFunc(glfunc); -} - -void gl1_3_glStencilOp(void *_glfuncs, GLenum fail, GLenum zfail, GLenum zpass) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilOp(fail, zfail, zpass); -} - -void gl1_3_glStencilFunc(void *_glfuncs, GLenum glfunc, GLint ref, GLuint mask) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilFunc(glfunc, ref, mask); -} - -void gl1_3_glLogicOp(void *_glfuncs, GLenum opcode) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLogicOp(opcode); -} - -void gl1_3_glBlendFunc(void *_glfuncs, GLenum sfactor, GLenum dfactor) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendFunc(sfactor, dfactor); -} - -void gl1_3_glFlush(void *_glfuncs) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFlush(); -} - -void gl1_3_glFinish(void *_glfuncs) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFinish(); -} - -void gl1_3_glEnable(void *_glfuncs, GLenum cap) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnable(cap); -} - -void gl1_3_glDisable(void *_glfuncs, GLenum cap) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDisable(cap); -} - -void gl1_3_glDepthMask(void *_glfuncs, GLboolean flag) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthMask(flag); -} - -void gl1_3_glColorMask(void *_glfuncs, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorMask(red, green, blue, alpha); -} - -void gl1_3_glStencilMask(void *_glfuncs, GLuint mask) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilMask(mask); -} - -void gl1_3_glClearDepth(void *_glfuncs, GLdouble depth) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearDepth(depth); -} - -void gl1_3_glClearStencil(void *_glfuncs, GLint s) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearStencil(s); -} - -void gl1_3_glClearColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearColor(red, green, blue, alpha); -} - -void gl1_3_glClear(void *_glfuncs, GLbitfield mask) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClear(mask); -} - -void gl1_3_glDrawBuffer(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawBuffer(mode); -} - -void gl1_3_glTexImage2D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage2D(target, level, internalFormat, width, height, border, format, gltype, pixels); -} - -void gl1_3_glTexImage1D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage1D(target, level, internalFormat, width, border, format, gltype, pixels); -} - -void gl1_3_glTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameteriv(target, pname, params); -} - -void gl1_3_glTexParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint param) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameteri(target, pname, param); -} - -void gl1_3_glTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterfv(target, pname, params); -} - -void gl1_3_glTexParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterf(target, pname, param); -} - -void gl1_3_glScissor(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScissor(x, y, width, height); -} - -void gl1_3_glPolygonMode(void *_glfuncs, GLenum face, GLenum mode) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPolygonMode(face, mode); -} - -void gl1_3_glPointSize(void *_glfuncs, GLfloat size) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointSize(size); -} - -void gl1_3_glLineWidth(void *_glfuncs, GLfloat width) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLineWidth(width); -} - -void gl1_3_glHint(void *_glfuncs, GLenum target, GLenum mode) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glHint(target, mode); -} - -void gl1_3_glFrontFace(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFrontFace(mode); -} - -void gl1_3_glCullFace(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCullFace(mode); -} - -void gl1_3_glIndexubv(void *_glfuncs, const GLubyte* c) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexubv(c); -} - -void gl1_3_glIndexub(void *_glfuncs, GLubyte c) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexub(c); -} - -GLboolean gl1_3_glIsTexture(void *_glfuncs, GLuint texture) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsTexture(texture); -} - -void gl1_3_glGenTextures(void *_glfuncs, GLsizei n, GLuint* textures) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenTextures(n, textures); -} - -void gl1_3_glDeleteTextures(void *_glfuncs, GLsizei n, const GLuint* textures) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteTextures(n, textures); -} - -void gl1_3_glBindTexture(void *_glfuncs, GLenum target, GLuint texture) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindTexture(target, texture); -} - -void gl1_3_glTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, gltype, pixels); -} - -void gl1_3_glTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexSubImage1D(target, level, xoffset, width, format, gltype, pixels); -} - -void gl1_3_glCopyTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height); -} - -void gl1_3_glCopyTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexSubImage1D(target, level, xoffset, x, y, width); -} - -void gl1_3_glCopyTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexImage2D(target, level, internalFormat, x, y, width, height, border); -} - -void gl1_3_glCopyTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexImage1D(target, level, internalFormat, x, y, width, border); -} - -void gl1_3_glPolygonOffset(void *_glfuncs, GLfloat factor, GLfloat units) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPolygonOffset(factor, units); -} - -void gl1_3_glDrawElements(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElements(mode, count, gltype, indices); -} - -void gl1_3_glDrawArrays(void *_glfuncs, GLenum mode, GLint first, GLsizei count) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawArrays(mode, first, count); -} - -void gl1_3_glCopyTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexSubImage3D(target, level, xoffset, yoffset, zoffset, x, y, width, height); -} - -void gl1_3_glTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, gltype, pixels); -} - -void gl1_3_glTexImage3D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage3D(target, level, internalFormat, width, height, depth, border, format, gltype, pixels); -} - -void gl1_3_glDrawRangeElements(void *_glfuncs, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum gltype, const GLvoid* indices) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawRangeElements(mode, start, end, count, gltype, indices); -} - -void gl1_3_glBlendEquation(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendEquation(mode); -} - -void gl1_3_glBlendColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendColor(red, green, blue, alpha); -} - -void gl1_3_glGetCompressedTexImage(void *_glfuncs, GLenum target, GLint level, GLvoid* img) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetCompressedTexImage(target, level, img); -} - -void gl1_3_glCompressedTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexSubImage1D(target, level, xoffset, width, format, imageSize, data); -} - -void gl1_3_glCompressedTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data); -} - -void gl1_3_glCompressedTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data); -} - -void gl1_3_glCompressedTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexImage1D(target, level, internalFormat, width, border, imageSize, data); -} - -void gl1_3_glCompressedTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexImage2D(target, level, internalFormat, width, height, border, imageSize, data); -} - -void gl1_3_glCompressedTexImage3D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexImage3D(target, level, internalFormat, width, height, depth, border, imageSize, data); -} - -void gl1_3_glSampleCoverage(void *_glfuncs, GLfloat value, GLboolean invert) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSampleCoverage(value, invert); -} - -void gl1_3_glActiveTexture(void *_glfuncs, GLenum texture) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glActiveTexture(texture); -} - -void gl1_3_glTranslatef(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTranslatef(x, y, z); -} - -void gl1_3_glTranslated(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTranslated(x, y, z); -} - -void gl1_3_glScalef(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScalef(x, y, z); -} - -void gl1_3_glScaled(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScaled(x, y, z); -} - -void gl1_3_glRotatef(void *_glfuncs, GLfloat angle, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRotatef(angle, x, y, z); -} - -void gl1_3_glRotated(void *_glfuncs, GLdouble angle, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRotated(angle, x, y, z); -} - -void gl1_3_glPushMatrix(void *_glfuncs) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPushMatrix(); -} - -void gl1_3_glPopMatrix(void *_glfuncs) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPopMatrix(); -} - -void gl1_3_glOrtho(void *_glfuncs, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glOrtho(left, right, bottom, top, zNear, zFar); -} - -void gl1_3_glMultMatrixd(void *_glfuncs, const GLdouble* m) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultMatrixd(m); -} - -void gl1_3_glMultMatrixf(void *_glfuncs, const GLfloat* m) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultMatrixf(m); -} - -void gl1_3_glMatrixMode(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMatrixMode(mode); -} - -void gl1_3_glLoadMatrixd(void *_glfuncs, const GLdouble* m) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadMatrixd(m); -} - -void gl1_3_glLoadMatrixf(void *_glfuncs, const GLfloat* m) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadMatrixf(m); -} - -void gl1_3_glLoadIdentity(void *_glfuncs) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadIdentity(); -} - -void gl1_3_glFrustum(void *_glfuncs, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFrustum(left, right, bottom, top, zNear, zFar); -} - -GLboolean gl1_3_glIsList(void *_glfuncs, GLuint list) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsList(list); -} - -void gl1_3_glGetTexGeniv(void *_glfuncs, GLenum coord, GLenum pname, GLint* params) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexGeniv(coord, pname, params); -} - -void gl1_3_glGetTexGenfv(void *_glfuncs, GLenum coord, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexGenfv(coord, pname, params); -} - -void gl1_3_glGetTexGendv(void *_glfuncs, GLenum coord, GLenum pname, GLdouble* params) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexGendv(coord, pname, params); -} - -void gl1_3_glGetTexEnviv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexEnviv(target, pname, params); -} - -void gl1_3_glGetTexEnvfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexEnvfv(target, pname, params); -} - -void gl1_3_glGetPolygonStipple(void *_glfuncs, GLubyte* mask) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetPolygonStipple(mask); -} - -void gl1_3_glGetPixelMapusv(void *_glfuncs, GLenum glmap, GLushort* values) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetPixelMapusv(glmap, values); -} - -void gl1_3_glGetPixelMapuiv(void *_glfuncs, GLenum glmap, GLuint* values) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetPixelMapuiv(glmap, values); -} - -void gl1_3_glGetPixelMapfv(void *_glfuncs, GLenum glmap, GLfloat* values) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetPixelMapfv(glmap, values); -} - -void gl1_3_glGetMaterialiv(void *_glfuncs, GLenum face, GLenum pname, GLint* params) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMaterialiv(face, pname, params); -} - -void gl1_3_glGetMaterialfv(void *_glfuncs, GLenum face, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMaterialfv(face, pname, params); -} - -void gl1_3_glGetMapiv(void *_glfuncs, GLenum target, GLenum query, GLint* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMapiv(target, query, v); -} - -void gl1_3_glGetMapfv(void *_glfuncs, GLenum target, GLenum query, GLfloat* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMapfv(target, query, v); -} - -void gl1_3_glGetMapdv(void *_glfuncs, GLenum target, GLenum query, GLdouble* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMapdv(target, query, v); -} - -void gl1_3_glGetLightiv(void *_glfuncs, GLenum light, GLenum pname, GLint* params) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetLightiv(light, pname, params); -} - -void gl1_3_glGetLightfv(void *_glfuncs, GLenum light, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetLightfv(light, pname, params); -} - -void gl1_3_glGetClipPlane(void *_glfuncs, GLenum plane, GLdouble* equation) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetClipPlane(plane, equation); -} - -void gl1_3_glDrawPixels(void *_glfuncs, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawPixels(width, height, format, gltype, pixels); -} - -void gl1_3_glCopyPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum gltype) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyPixels(x, y, width, height, gltype); -} - -void gl1_3_glPixelMapusv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLushort* values) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelMapusv(glmap, mapsize, values); -} - -void gl1_3_glPixelMapuiv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLuint* values) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelMapuiv(glmap, mapsize, values); -} - -void gl1_3_glPixelMapfv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLfloat* values) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelMapfv(glmap, mapsize, values); -} - -void gl1_3_glPixelTransferi(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelTransferi(pname, param); -} - -void gl1_3_glPixelTransferf(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelTransferf(pname, param); -} - -void gl1_3_glPixelZoom(void *_glfuncs, GLfloat xfactor, GLfloat yfactor) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelZoom(xfactor, yfactor); -} - -void gl1_3_glAlphaFunc(void *_glfuncs, GLenum glfunc, GLfloat ref) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glAlphaFunc(glfunc, ref); -} - -void gl1_3_glEvalPoint2(void *_glfuncs, GLint i, GLint j) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalPoint2(i, j); -} - -void gl1_3_glEvalMesh2(void *_glfuncs, GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalMesh2(mode, i1, i2, j1, j2); -} - -void gl1_3_glEvalPoint1(void *_glfuncs, GLint i) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalPoint1(i); -} - -void gl1_3_glEvalMesh1(void *_glfuncs, GLenum mode, GLint i1, GLint i2) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalMesh1(mode, i1, i2); -} - -void gl1_3_glEvalCoord2fv(void *_glfuncs, const GLfloat* u) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord2fv(u); -} - -void gl1_3_glEvalCoord2f(void *_glfuncs, GLfloat u, GLfloat v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord2f(u, v); -} - -void gl1_3_glEvalCoord2dv(void *_glfuncs, const GLdouble* u) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord2dv(u); -} - -void gl1_3_glEvalCoord2d(void *_glfuncs, GLdouble u, GLdouble v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord2d(u, v); -} - -void gl1_3_glEvalCoord1fv(void *_glfuncs, const GLfloat* u) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord1fv(u); -} - -void gl1_3_glEvalCoord1f(void *_glfuncs, GLfloat u) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord1f(u); -} - -void gl1_3_glEvalCoord1dv(void *_glfuncs, const GLdouble* u) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord1dv(u); -} - -void gl1_3_glEvalCoord1d(void *_glfuncs, GLdouble u) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord1d(u); -} - -void gl1_3_glMapGrid2f(void *_glfuncs, GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMapGrid2f(un, u1, u2, vn, v1, v2); -} - -void gl1_3_glMapGrid2d(void *_glfuncs, GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMapGrid2d(un, u1, u2, vn, v1, v2); -} - -void gl1_3_glMapGrid1f(void *_glfuncs, GLint un, GLfloat u1, GLfloat u2) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMapGrid1f(un, u1, u2); -} - -void gl1_3_glMapGrid1d(void *_glfuncs, GLint un, GLdouble u1, GLdouble u2) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMapGrid1d(un, u1, u2); -} - -void gl1_3_glMap2f(void *_glfuncs, GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat* points) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMap2f(target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points); -} - -void gl1_3_glMap2d(void *_glfuncs, GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble* points) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMap2d(target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points); -} - -void gl1_3_glMap1f(void *_glfuncs, GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat* points) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMap1f(target, u1, u2, stride, order, points); -} - -void gl1_3_glMap1d(void *_glfuncs, GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble* points) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMap1d(target, u1, u2, stride, order, points); -} - -void gl1_3_glPushAttrib(void *_glfuncs, GLbitfield mask) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPushAttrib(mask); -} - -void gl1_3_glPopAttrib(void *_glfuncs) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPopAttrib(); -} - -void gl1_3_glAccum(void *_glfuncs, GLenum op, GLfloat value) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glAccum(op, value); -} - -void gl1_3_glIndexMask(void *_glfuncs, GLuint mask) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexMask(mask); -} - -void gl1_3_glClearIndex(void *_glfuncs, GLfloat c) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearIndex(c); -} - -void gl1_3_glClearAccum(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearAccum(red, green, blue, alpha); -} - -void gl1_3_glPushName(void *_glfuncs, GLuint name) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPushName(name); -} - -void gl1_3_glPopName(void *_glfuncs) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPopName(); -} - -void gl1_3_glPassThrough(void *_glfuncs, GLfloat token) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPassThrough(token); -} - -void gl1_3_glLoadName(void *_glfuncs, GLuint name) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadName(name); -} - -void gl1_3_glInitNames(void *_glfuncs) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glInitNames(); -} - -GLint gl1_3_glRenderMode(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glRenderMode(mode); -} - -void gl1_3_glSelectBuffer(void *_glfuncs, GLsizei size, GLuint* buffer) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSelectBuffer(size, buffer); -} - -void gl1_3_glFeedbackBuffer(void *_glfuncs, GLsizei size, GLenum gltype, GLfloat* buffer) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFeedbackBuffer(size, gltype, buffer); -} - -void gl1_3_glTexGeniv(void *_glfuncs, GLenum coord, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGeniv(coord, pname, params); -} - -void gl1_3_glTexGeni(void *_glfuncs, GLenum coord, GLenum pname, GLint param) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGeni(coord, pname, param); -} - -void gl1_3_glTexGenfv(void *_glfuncs, GLenum coord, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGenfv(coord, pname, params); -} - -void gl1_3_glTexGenf(void *_glfuncs, GLenum coord, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGenf(coord, pname, param); -} - -void gl1_3_glTexGendv(void *_glfuncs, GLenum coord, GLenum pname, const GLdouble* params) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGendv(coord, pname, params); -} - -void gl1_3_glTexGend(void *_glfuncs, GLenum coord, GLenum pname, GLdouble param) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGend(coord, pname, param); -} - -void gl1_3_glTexEnviv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexEnviv(target, pname, params); -} - -void gl1_3_glTexEnvi(void *_glfuncs, GLenum target, GLenum pname, GLint param) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexEnvi(target, pname, param); -} - -void gl1_3_glTexEnvfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexEnvfv(target, pname, params); -} - -void gl1_3_glTexEnvf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexEnvf(target, pname, param); -} - -void gl1_3_glShadeModel(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glShadeModel(mode); -} - -void gl1_3_glPolygonStipple(void *_glfuncs, const GLubyte* mask) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPolygonStipple(mask); -} - -void gl1_3_glMaterialiv(void *_glfuncs, GLenum face, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMaterialiv(face, pname, params); -} - -void gl1_3_glMateriali(void *_glfuncs, GLenum face, GLenum pname, GLint param) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMateriali(face, pname, param); -} - -void gl1_3_glMaterialfv(void *_glfuncs, GLenum face, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMaterialfv(face, pname, params); -} - -void gl1_3_glMaterialf(void *_glfuncs, GLenum face, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMaterialf(face, pname, param); -} - -void gl1_3_glLineStipple(void *_glfuncs, GLint factor, GLushort pattern) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLineStipple(factor, pattern); -} - -void gl1_3_glLightModeliv(void *_glfuncs, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightModeliv(pname, params); -} - -void gl1_3_glLightModeli(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightModeli(pname, param); -} - -void gl1_3_glLightModelfv(void *_glfuncs, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightModelfv(pname, params); -} - -void gl1_3_glLightModelf(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightModelf(pname, param); -} - -void gl1_3_glLightiv(void *_glfuncs, GLenum light, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightiv(light, pname, params); -} - -void gl1_3_glLighti(void *_glfuncs, GLenum light, GLenum pname, GLint param) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLighti(light, pname, param); -} - -void gl1_3_glLightfv(void *_glfuncs, GLenum light, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightfv(light, pname, params); -} - -void gl1_3_glLightf(void *_glfuncs, GLenum light, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightf(light, pname, param); -} - -void gl1_3_glFogiv(void *_glfuncs, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogiv(pname, params); -} - -void gl1_3_glFogi(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogi(pname, param); -} - -void gl1_3_glFogfv(void *_glfuncs, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogfv(pname, params); -} - -void gl1_3_glFogf(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogf(pname, param); -} - -void gl1_3_glColorMaterial(void *_glfuncs, GLenum face, GLenum mode) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorMaterial(face, mode); -} - -void gl1_3_glClipPlane(void *_glfuncs, GLenum plane, const GLdouble* equation) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClipPlane(plane, equation); -} - -void gl1_3_glVertex4sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4sv(v); -} - -void gl1_3_glVertex4s(void *_glfuncs, GLshort x, GLshort y, GLshort z, GLshort w) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4s(x, y, z, w); -} - -void gl1_3_glVertex4iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4iv(v); -} - -void gl1_3_glVertex4i(void *_glfuncs, GLint x, GLint y, GLint z, GLint w) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4i(x, y, z, w); -} - -void gl1_3_glVertex4fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4fv(v); -} - -void gl1_3_glVertex4f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z, GLfloat w) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4f(x, y, z, w); -} - -void gl1_3_glVertex4dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4dv(v); -} - -void gl1_3_glVertex4d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z, GLdouble w) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4d(x, y, z, w); -} - -void gl1_3_glVertex3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3sv(v); -} - -void gl1_3_glVertex3s(void *_glfuncs, GLshort x, GLshort y, GLshort z) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3s(x, y, z); -} - -void gl1_3_glVertex3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3iv(v); -} - -void gl1_3_glVertex3i(void *_glfuncs, GLint x, GLint y, GLint z) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3i(x, y, z); -} - -void gl1_3_glVertex3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3fv(v); -} - -void gl1_3_glVertex3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3f(x, y, z); -} - -void gl1_3_glVertex3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3dv(v); -} - -void gl1_3_glVertex3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3d(x, y, z); -} - -void gl1_3_glVertex2sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2sv(v); -} - -void gl1_3_glVertex2s(void *_glfuncs, GLshort x, GLshort y) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2s(x, y); -} - -void gl1_3_glVertex2iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2iv(v); -} - -void gl1_3_glVertex2i(void *_glfuncs, GLint x, GLint y) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2i(x, y); -} - -void gl1_3_glVertex2fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2fv(v); -} - -void gl1_3_glVertex2f(void *_glfuncs, GLfloat x, GLfloat y) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2f(x, y); -} - -void gl1_3_glVertex2dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2dv(v); -} - -void gl1_3_glVertex2d(void *_glfuncs, GLdouble x, GLdouble y) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2d(x, y); -} - -void gl1_3_glTexCoord4sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4sv(v); -} - -void gl1_3_glTexCoord4s(void *_glfuncs, GLshort s, GLshort t, GLshort r, GLshort q) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4s(s, t, r, q); -} - -void gl1_3_glTexCoord4iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4iv(v); -} - -void gl1_3_glTexCoord4i(void *_glfuncs, GLint s, GLint t, GLint r, GLint q) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4i(s, t, r, q); -} - -void gl1_3_glTexCoord4fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4fv(v); -} - -void gl1_3_glTexCoord4f(void *_glfuncs, GLfloat s, GLfloat t, GLfloat r, GLfloat q) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4f(s, t, r, q); -} - -void gl1_3_glTexCoord4dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4dv(v); -} - -void gl1_3_glTexCoord4d(void *_glfuncs, GLdouble s, GLdouble t, GLdouble r, GLdouble q) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4d(s, t, r, q); -} - -void gl1_3_glTexCoord3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3sv(v); -} - -void gl1_3_glTexCoord3s(void *_glfuncs, GLshort s, GLshort t, GLshort r) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3s(s, t, r); -} - -void gl1_3_glTexCoord3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3iv(v); -} - -void gl1_3_glTexCoord3i(void *_glfuncs, GLint s, GLint t, GLint r) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3i(s, t, r); -} - -void gl1_3_glTexCoord3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3fv(v); -} - -void gl1_3_glTexCoord3f(void *_glfuncs, GLfloat s, GLfloat t, GLfloat r) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3f(s, t, r); -} - -void gl1_3_glTexCoord3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3dv(v); -} - -void gl1_3_glTexCoord3d(void *_glfuncs, GLdouble s, GLdouble t, GLdouble r) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3d(s, t, r); -} - -void gl1_3_glTexCoord2sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2sv(v); -} - -void gl1_3_glTexCoord2s(void *_glfuncs, GLshort s, GLshort t) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2s(s, t); -} - -void gl1_3_glTexCoord2iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2iv(v); -} - -void gl1_3_glTexCoord2i(void *_glfuncs, GLint s, GLint t) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2i(s, t); -} - -void gl1_3_glTexCoord2fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2fv(v); -} - -void gl1_3_glTexCoord2f(void *_glfuncs, GLfloat s, GLfloat t) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2f(s, t); -} - -void gl1_3_glTexCoord2dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2dv(v); -} - -void gl1_3_glTexCoord2d(void *_glfuncs, GLdouble s, GLdouble t) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2d(s, t); -} - -void gl1_3_glTexCoord1sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1sv(v); -} - -void gl1_3_glTexCoord1s(void *_glfuncs, GLshort s) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1s(s); -} - -void gl1_3_glTexCoord1iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1iv(v); -} - -void gl1_3_glTexCoord1i(void *_glfuncs, GLint s) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1i(s); -} - -void gl1_3_glTexCoord1fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1fv(v); -} - -void gl1_3_glTexCoord1f(void *_glfuncs, GLfloat s) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1f(s); -} - -void gl1_3_glTexCoord1dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1dv(v); -} - -void gl1_3_glTexCoord1d(void *_glfuncs, GLdouble s) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1d(s); -} - -void gl1_3_glRectsv(void *_glfuncs, const GLshort* v1, const GLshort* v2) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectsv(v1, v2); -} - -void gl1_3_glRects(void *_glfuncs, GLshort x1, GLshort y1, GLshort x2, GLshort y2) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRects(x1, y1, x2, y2); -} - -void gl1_3_glRectiv(void *_glfuncs, const GLint* v1, const GLint* v2) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectiv(v1, v2); -} - -void gl1_3_glRecti(void *_glfuncs, GLint x1, GLint y1, GLint x2, GLint y2) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRecti(x1, y1, x2, y2); -} - -void gl1_3_glRectfv(void *_glfuncs, const GLfloat* v1, const GLfloat* v2) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectfv(v1, v2); -} - -void gl1_3_glRectf(void *_glfuncs, GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectf(x1, y1, x2, y2); -} - -void gl1_3_glRectdv(void *_glfuncs, const GLdouble* v1, const GLdouble* v2) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectdv(v1, v2); -} - -void gl1_3_glRectd(void *_glfuncs, GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectd(x1, y1, x2, y2); -} - -void gl1_3_glRasterPos4sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4sv(v); -} - -void gl1_3_glRasterPos4s(void *_glfuncs, GLshort x, GLshort y, GLshort z, GLshort w) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4s(x, y, z, w); -} - -void gl1_3_glRasterPos4iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4iv(v); -} - -void gl1_3_glRasterPos4i(void *_glfuncs, GLint x, GLint y, GLint z, GLint w) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4i(x, y, z, w); -} - -void gl1_3_glRasterPos4fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4fv(v); -} - -void gl1_3_glRasterPos4f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z, GLfloat w) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4f(x, y, z, w); -} - -void gl1_3_glRasterPos4dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4dv(v); -} - -void gl1_3_glRasterPos4d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z, GLdouble w) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4d(x, y, z, w); -} - -void gl1_3_glRasterPos3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3sv(v); -} - -void gl1_3_glRasterPos3s(void *_glfuncs, GLshort x, GLshort y, GLshort z) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3s(x, y, z); -} - -void gl1_3_glRasterPos3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3iv(v); -} - -void gl1_3_glRasterPos3i(void *_glfuncs, GLint x, GLint y, GLint z) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3i(x, y, z); -} - -void gl1_3_glRasterPos3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3fv(v); -} - -void gl1_3_glRasterPos3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3f(x, y, z); -} - -void gl1_3_glRasterPos3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3dv(v); -} - -void gl1_3_glRasterPos3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3d(x, y, z); -} - -void gl1_3_glRasterPos2sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2sv(v); -} - -void gl1_3_glRasterPos2s(void *_glfuncs, GLshort x, GLshort y) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2s(x, y); -} - -void gl1_3_glRasterPos2iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2iv(v); -} - -void gl1_3_glRasterPos2i(void *_glfuncs, GLint x, GLint y) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2i(x, y); -} - -void gl1_3_glRasterPos2fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2fv(v); -} - -void gl1_3_glRasterPos2f(void *_glfuncs, GLfloat x, GLfloat y) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2f(x, y); -} - -void gl1_3_glRasterPos2dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2dv(v); -} - -void gl1_3_glRasterPos2d(void *_glfuncs, GLdouble x, GLdouble y) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2d(x, y); -} - -void gl1_3_glNormal3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3sv(v); -} - -void gl1_3_glNormal3s(void *_glfuncs, GLshort nx, GLshort ny, GLshort nz) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3s(nx, ny, nz); -} - -void gl1_3_glNormal3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3iv(v); -} - -void gl1_3_glNormal3i(void *_glfuncs, GLint nx, GLint ny, GLint nz) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3i(nx, ny, nz); -} - -void gl1_3_glNormal3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3fv(v); -} - -void gl1_3_glNormal3f(void *_glfuncs, GLfloat nx, GLfloat ny, GLfloat nz) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3f(nx, ny, nz); -} - -void gl1_3_glNormal3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3dv(v); -} - -void gl1_3_glNormal3d(void *_glfuncs, GLdouble nx, GLdouble ny, GLdouble nz) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3d(nx, ny, nz); -} - -void gl1_3_glNormal3bv(void *_glfuncs, const GLbyte* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3bv(v); -} - -void gl1_3_glNormal3b(void *_glfuncs, GLbyte nx, GLbyte ny, GLbyte nz) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3b(nx, ny, nz); -} - -void gl1_3_glIndexsv(void *_glfuncs, const GLshort* c) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexsv(c); -} - -void gl1_3_glIndexs(void *_glfuncs, GLshort c) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexs(c); -} - -void gl1_3_glIndexiv(void *_glfuncs, const GLint* c) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexiv(c); -} - -void gl1_3_glIndexi(void *_glfuncs, GLint c) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexi(c); -} - -void gl1_3_glIndexfv(void *_glfuncs, const GLfloat* c) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexfv(c); -} - -void gl1_3_glIndexf(void *_glfuncs, GLfloat c) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexf(c); -} - -void gl1_3_glIndexdv(void *_glfuncs, const GLdouble* c) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexdv(c); -} - -void gl1_3_glIndexd(void *_glfuncs, GLdouble c) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexd(c); -} - -void gl1_3_glEnd(void *_glfuncs) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnd(); -} - -void gl1_3_glEdgeFlagv(void *_glfuncs, const GLboolean* flag) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEdgeFlagv(flag); -} - -void gl1_3_glEdgeFlag(void *_glfuncs, GLboolean flag) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEdgeFlag(flag); -} - -void gl1_3_glColor4usv(void *_glfuncs, const GLushort* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4usv(v); -} - -void gl1_3_glColor4us(void *_glfuncs, GLushort red, GLushort green, GLushort blue, GLushort alpha) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4us(red, green, blue, alpha); -} - -void gl1_3_glColor4uiv(void *_glfuncs, const GLuint* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4uiv(v); -} - -void gl1_3_glColor4ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue, GLuint alpha) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4ui(red, green, blue, alpha); -} - -void gl1_3_glColor4ubv(void *_glfuncs, const GLubyte* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4ubv(v); -} - -void gl1_3_glColor4ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4ub(red, green, blue, alpha); -} - -void gl1_3_glColor4sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4sv(v); -} - -void gl1_3_glColor4s(void *_glfuncs, GLshort red, GLshort green, GLshort blue, GLshort alpha) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4s(red, green, blue, alpha); -} - -void gl1_3_glColor4iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4iv(v); -} - -void gl1_3_glColor4i(void *_glfuncs, GLint red, GLint green, GLint blue, GLint alpha) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4i(red, green, blue, alpha); -} - -void gl1_3_glColor4fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4fv(v); -} - -void gl1_3_glColor4f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4f(red, green, blue, alpha); -} - -void gl1_3_glColor4dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4dv(v); -} - -void gl1_3_glColor4d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4d(red, green, blue, alpha); -} - -void gl1_3_glColor4bv(void *_glfuncs, const GLbyte* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4bv(v); -} - -void gl1_3_glColor4b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4b(red, green, blue, alpha); -} - -void gl1_3_glColor3usv(void *_glfuncs, const GLushort* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3usv(v); -} - -void gl1_3_glColor3us(void *_glfuncs, GLushort red, GLushort green, GLushort blue) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3us(red, green, blue); -} - -void gl1_3_glColor3uiv(void *_glfuncs, const GLuint* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3uiv(v); -} - -void gl1_3_glColor3ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3ui(red, green, blue); -} - -void gl1_3_glColor3ubv(void *_glfuncs, const GLubyte* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3ubv(v); -} - -void gl1_3_glColor3ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3ub(red, green, blue); -} - -void gl1_3_glColor3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3sv(v); -} - -void gl1_3_glColor3s(void *_glfuncs, GLshort red, GLshort green, GLshort blue) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3s(red, green, blue); -} - -void gl1_3_glColor3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3iv(v); -} - -void gl1_3_glColor3i(void *_glfuncs, GLint red, GLint green, GLint blue) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3i(red, green, blue); -} - -void gl1_3_glColor3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3fv(v); -} - -void gl1_3_glColor3f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3f(red, green, blue); -} - -void gl1_3_glColor3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3dv(v); -} - -void gl1_3_glColor3d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3d(red, green, blue); -} - -void gl1_3_glColor3bv(void *_glfuncs, const GLbyte* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3bv(v); -} - -void gl1_3_glColor3b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3b(red, green, blue); -} - -void gl1_3_glBitmap(void *_glfuncs, GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte* bitmap) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBitmap(width, height, xorig, yorig, xmove, ymove, bitmap); -} - -void gl1_3_glBegin(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBegin(mode); -} - -void gl1_3_glListBase(void *_glfuncs, GLuint base) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glListBase(base); -} - -GLuint gl1_3_glGenLists(void *_glfuncs, GLsizei range_) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGenLists(range_); -} - -void gl1_3_glDeleteLists(void *_glfuncs, GLuint list, GLsizei range_) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteLists(list, range_); -} - -void gl1_3_glCallLists(void *_glfuncs, GLsizei n, GLenum gltype, const GLvoid* lists) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCallLists(n, gltype, lists); -} - -void gl1_3_glCallList(void *_glfuncs, GLuint list) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCallList(list); -} - -void gl1_3_glEndList(void *_glfuncs) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndList(); -} - -void gl1_3_glNewList(void *_glfuncs, GLuint list, GLenum mode) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNewList(list, mode); -} - -void gl1_3_glPushClientAttrib(void *_glfuncs, GLbitfield mask) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPushClientAttrib(mask); -} - -void gl1_3_glPopClientAttrib(void *_glfuncs) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPopClientAttrib(); -} - -void gl1_3_glPrioritizeTextures(void *_glfuncs, GLsizei n, const GLuint* textures, const GLfloat* priorities) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPrioritizeTextures(n, textures, priorities); -} - -GLboolean gl1_3_glAreTexturesResident(void *_glfuncs, GLsizei n, const GLuint* textures, GLboolean* residences) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glAreTexturesResident(n, textures, residences); -} - -void gl1_3_glVertexPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexPointer(size, gltype, stride, pointer); -} - -void gl1_3_glTexCoordPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordPointer(size, gltype, stride, pointer); -} - -void gl1_3_glNormalPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormalPointer(gltype, stride, pointer); -} - -void gl1_3_glInterleavedArrays(void *_glfuncs, GLenum format, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glInterleavedArrays(format, stride, pointer); -} - -void gl1_3_glIndexPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexPointer(gltype, stride, pointer); -} - -void gl1_3_glEnableClientState(void *_glfuncs, GLenum array) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnableClientState(array); -} - -void gl1_3_glEdgeFlagPointer(void *_glfuncs, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEdgeFlagPointer(stride, pointer); -} - -void gl1_3_glDisableClientState(void *_glfuncs, GLenum array) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDisableClientState(array); -} - -void gl1_3_glColorPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorPointer(size, gltype, stride, pointer); -} - -void gl1_3_glArrayElement(void *_glfuncs, GLint i) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glArrayElement(i); -} - -void gl1_3_glResetMinmax(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glResetMinmax(target); -} - -void gl1_3_glResetHistogram(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glResetHistogram(target); -} - -void gl1_3_glMinmax(void *_glfuncs, GLenum target, GLenum internalFormat, GLboolean sink) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMinmax(target, internalFormat, sink); -} - -void gl1_3_glHistogram(void *_glfuncs, GLenum target, GLsizei width, GLenum internalFormat, GLboolean sink) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glHistogram(target, width, internalFormat, sink); -} - -void gl1_3_glGetMinmaxParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMinmaxParameteriv(target, pname, params); -} - -void gl1_3_glGetMinmaxParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMinmaxParameterfv(target, pname, params); -} - -void gl1_3_glGetMinmax(void *_glfuncs, GLenum target, GLboolean reset, GLenum format, GLenum gltype, GLvoid* values) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMinmax(target, reset, format, gltype, values); -} - -void gl1_3_glGetHistogramParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetHistogramParameteriv(target, pname, params); -} - -void gl1_3_glGetHistogramParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetHistogramParameterfv(target, pname, params); -} - -void gl1_3_glGetHistogram(void *_glfuncs, GLenum target, GLboolean reset, GLenum format, GLenum gltype, GLvoid* values) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetHistogram(target, reset, format, gltype, values); -} - -void gl1_3_glSeparableFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* row, const GLvoid* column) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSeparableFilter2D(target, internalFormat, width, height, format, gltype, row, column); -} - -void gl1_3_glGetSeparableFilter(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* row, GLvoid* column, GLvoid* span) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetSeparableFilter(target, format, gltype, row, column, span); -} - -void gl1_3_glGetConvolutionParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetConvolutionParameteriv(target, pname, params); -} - -void gl1_3_glGetConvolutionParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetConvolutionParameterfv(target, pname, params); -} - -void gl1_3_glGetConvolutionFilter(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* image) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetConvolutionFilter(target, format, gltype, image); -} - -void gl1_3_glCopyConvolutionFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyConvolutionFilter2D(target, internalFormat, x, y, width, height); -} - -void gl1_3_glCopyConvolutionFilter1D(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyConvolutionFilter1D(target, internalFormat, x, y, width); -} - -void gl1_3_glConvolutionParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionParameteriv(target, pname, params); -} - -void gl1_3_glConvolutionParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint params) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionParameteri(target, pname, params); -} - -void gl1_3_glConvolutionParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionParameterfv(target, pname, params); -} - -void gl1_3_glConvolutionParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat params) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionParameterf(target, pname, params); -} - -void gl1_3_glConvolutionFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* image) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionFilter2D(target, internalFormat, width, height, format, gltype, image); -} - -void gl1_3_glConvolutionFilter1D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum gltype, const GLvoid* image) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionFilter1D(target, internalFormat, width, format, gltype, image); -} - -void gl1_3_glCopyColorSubTable(void *_glfuncs, GLenum target, GLsizei start, GLint x, GLint y, GLsizei width) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyColorSubTable(target, start, x, y, width); -} - -void gl1_3_glColorSubTable(void *_glfuncs, GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum gltype, const GLvoid* data) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorSubTable(target, start, count, format, gltype, data); -} - -void gl1_3_glGetColorTableParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetColorTableParameteriv(target, pname, params); -} - -void gl1_3_glGetColorTableParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetColorTableParameterfv(target, pname, params); -} - -void gl1_3_glGetColorTable(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* table) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetColorTable(target, format, gltype, table); -} - -void gl1_3_glCopyColorTable(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyColorTable(target, internalFormat, x, y, width); -} - -void gl1_3_glColorTableParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorTableParameteriv(target, pname, params); -} - -void gl1_3_glColorTableParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorTableParameterfv(target, pname, params); -} - -void gl1_3_glColorTable(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum gltype, const GLvoid* table) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorTable(target, internalFormat, width, format, gltype, table); -} - -void gl1_3_glMultTransposeMatrixd(void *_glfuncs, const GLdouble* m) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultTransposeMatrixd(m); -} - -void gl1_3_glMultTransposeMatrixf(void *_glfuncs, const GLfloat* m) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultTransposeMatrixf(m); -} - -void gl1_3_glLoadTransposeMatrixd(void *_glfuncs, const GLdouble* m) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadTransposeMatrixd(m); -} - -void gl1_3_glLoadTransposeMatrixf(void *_glfuncs, const GLfloat* m) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadTransposeMatrixf(m); -} - -void gl1_3_glMultiTexCoord4sv(void *_glfuncs, GLenum target, const GLshort* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4sv(target, v); -} - -void gl1_3_glMultiTexCoord4s(void *_glfuncs, GLenum target, GLshort s, GLshort t, GLshort r, GLshort q) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4s(target, s, t, r, q); -} - -void gl1_3_glMultiTexCoord4iv(void *_glfuncs, GLenum target, const GLint* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4iv(target, v); -} - -void gl1_3_glMultiTexCoord4i(void *_glfuncs, GLenum target, GLint s, GLint t, GLint r, GLint q) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4i(target, s, t, r, q); -} - -void gl1_3_glMultiTexCoord4fv(void *_glfuncs, GLenum target, const GLfloat* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4fv(target, v); -} - -void gl1_3_glMultiTexCoord4f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4f(target, s, t, r, q); -} - -void gl1_3_glMultiTexCoord4dv(void *_glfuncs, GLenum target, const GLdouble* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4dv(target, v); -} - -void gl1_3_glMultiTexCoord4d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4d(target, s, t, r, q); -} - -void gl1_3_glMultiTexCoord3sv(void *_glfuncs, GLenum target, const GLshort* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3sv(target, v); -} - -void gl1_3_glMultiTexCoord3s(void *_glfuncs, GLenum target, GLshort s, GLshort t, GLshort r) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3s(target, s, t, r); -} - -void gl1_3_glMultiTexCoord3iv(void *_glfuncs, GLenum target, const GLint* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3iv(target, v); -} - -void gl1_3_glMultiTexCoord3i(void *_glfuncs, GLenum target, GLint s, GLint t, GLint r) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3i(target, s, t, r); -} - -void gl1_3_glMultiTexCoord3fv(void *_glfuncs, GLenum target, const GLfloat* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3fv(target, v); -} - -void gl1_3_glMultiTexCoord3f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t, GLfloat r) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3f(target, s, t, r); -} - -void gl1_3_glMultiTexCoord3dv(void *_glfuncs, GLenum target, const GLdouble* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3dv(target, v); -} - -void gl1_3_glMultiTexCoord3d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t, GLdouble r) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3d(target, s, t, r); -} - -void gl1_3_glMultiTexCoord2sv(void *_glfuncs, GLenum target, const GLshort* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2sv(target, v); -} - -void gl1_3_glMultiTexCoord2s(void *_glfuncs, GLenum target, GLshort s, GLshort t) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2s(target, s, t); -} - -void gl1_3_glMultiTexCoord2iv(void *_glfuncs, GLenum target, const GLint* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2iv(target, v); -} - -void gl1_3_glMultiTexCoord2i(void *_glfuncs, GLenum target, GLint s, GLint t) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2i(target, s, t); -} - -void gl1_3_glMultiTexCoord2fv(void *_glfuncs, GLenum target, const GLfloat* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2fv(target, v); -} - -void gl1_3_glMultiTexCoord2f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2f(target, s, t); -} - -void gl1_3_glMultiTexCoord2dv(void *_glfuncs, GLenum target, const GLdouble* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2dv(target, v); -} - -void gl1_3_glMultiTexCoord2d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2d(target, s, t); -} - -void gl1_3_glMultiTexCoord1sv(void *_glfuncs, GLenum target, const GLshort* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1sv(target, v); -} - -void gl1_3_glMultiTexCoord1s(void *_glfuncs, GLenum target, GLshort s) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1s(target, s); -} - -void gl1_3_glMultiTexCoord1iv(void *_glfuncs, GLenum target, const GLint* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1iv(target, v); -} - -void gl1_3_glMultiTexCoord1i(void *_glfuncs, GLenum target, GLint s) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1i(target, s); -} - -void gl1_3_glMultiTexCoord1fv(void *_glfuncs, GLenum target, const GLfloat* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1fv(target, v); -} - -void gl1_3_glMultiTexCoord1f(void *_glfuncs, GLenum target, GLfloat s) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1f(target, s); -} - -void gl1_3_glMultiTexCoord1dv(void *_glfuncs, GLenum target, const GLdouble* v) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1dv(target, v); -} - -void gl1_3_glMultiTexCoord1d(void *_glfuncs, GLenum target, GLdouble s) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1d(target, s); -} - -void gl1_3_glClientActiveTexture(void *_glfuncs, GLenum texture) -{ - QOpenGLFunctions_1_3* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClientActiveTexture(texture); -} - diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/1.3/funcs.h b/Godeps/_workspace/src/github.com/obscuren/qml/gl/1.3/funcs.h deleted file mode 100644 index 9d3944383b..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/1.3/funcs.h +++ /dev/null @@ -1,460 +0,0 @@ - -// ** file automatically generated by glgen -- do not edit manually ** - -#ifndef __cplusplus -#include -#include -typedef unsigned int GLenum; -typedef unsigned char GLboolean; -typedef unsigned int GLbitfield; -typedef void GLvoid; -typedef char GLchar; -typedef signed char GLbyte; /* 1-byte signed */ -typedef short GLshort; /* 2-byte signed */ -typedef int GLint; /* 4-byte signed */ -typedef unsigned char GLubyte; /* 1-byte unsigned */ -typedef unsigned short GLushort; /* 2-byte unsigned */ -typedef unsigned int GLuint; /* 4-byte unsigned */ -typedef int GLsizei; /* 4-byte signed */ -typedef float GLfloat; /* single precision float */ -typedef float GLclampf; /* single precision float in [0,1] */ -typedef double GLdouble; /* double precision float */ -typedef double GLclampd; /* double precision float in [0,1] */ -typedef int64_t GLint64; -typedef uint64_t GLuint64; -typedef ptrdiff_t GLintptr; -typedef ptrdiff_t GLsizeiptr; -typedef ptrdiff_t GLintptrARB; -typedef ptrdiff_t GLsizeiptrARB; -typedef struct __GLsync *GLsync; -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -void *gl1_3_funcs(); - -void gl1_3_glViewport(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height); -void gl1_3_glDepthRange(void *_glfuncs, GLdouble nearVal, GLdouble farVal); -GLboolean gl1_3_glIsEnabled(void *_glfuncs, GLenum cap); -void gl1_3_glGetTexLevelParameteriv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLint* params); -void gl1_3_glGetTexLevelParameterfv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLfloat* params); -void gl1_3_glGetTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl1_3_glGetTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl1_3_glGetTexImage(void *_glfuncs, GLenum target, GLint level, GLenum format, GLenum gltype, GLvoid* pixels); -void gl1_3_glGetIntegerv(void *_glfuncs, GLenum pname, GLint* params); -void gl1_3_glGetFloatv(void *_glfuncs, GLenum pname, GLfloat* params); -GLenum gl1_3_glGetError(void *_glfuncs); -void gl1_3_glGetDoublev(void *_glfuncs, GLenum pname, GLdouble* params); -void gl1_3_glGetBooleanv(void *_glfuncs, GLenum pname, GLboolean* params); -void gl1_3_glReadPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum gltype, GLvoid* pixels); -void gl1_3_glReadBuffer(void *_glfuncs, GLenum mode); -void gl1_3_glPixelStorei(void *_glfuncs, GLenum pname, GLint param); -void gl1_3_glPixelStoref(void *_glfuncs, GLenum pname, GLfloat param); -void gl1_3_glDepthFunc(void *_glfuncs, GLenum glfunc); -void gl1_3_glStencilOp(void *_glfuncs, GLenum fail, GLenum zfail, GLenum zpass); -void gl1_3_glStencilFunc(void *_glfuncs, GLenum glfunc, GLint ref, GLuint mask); -void gl1_3_glLogicOp(void *_glfuncs, GLenum opcode); -void gl1_3_glBlendFunc(void *_glfuncs, GLenum sfactor, GLenum dfactor); -void gl1_3_glFlush(void *_glfuncs); -void gl1_3_glFinish(void *_glfuncs); -void gl1_3_glEnable(void *_glfuncs, GLenum cap); -void gl1_3_glDisable(void *_glfuncs, GLenum cap); -void gl1_3_glDepthMask(void *_glfuncs, GLboolean flag); -void gl1_3_glColorMask(void *_glfuncs, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); -void gl1_3_glStencilMask(void *_glfuncs, GLuint mask); -void gl1_3_glClearDepth(void *_glfuncs, GLdouble depth); -void gl1_3_glClearStencil(void *_glfuncs, GLint s); -void gl1_3_glClearColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl1_3_glClear(void *_glfuncs, GLbitfield mask); -void gl1_3_glDrawBuffer(void *_glfuncs, GLenum mode); -void gl1_3_glTexImage2D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl1_3_glTexImage1D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl1_3_glTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl1_3_glTexParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint param); -void gl1_3_glTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params); -void gl1_3_glTexParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param); -void gl1_3_glScissor(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height); -void gl1_3_glPolygonMode(void *_glfuncs, GLenum face, GLenum mode); -void gl1_3_glPointSize(void *_glfuncs, GLfloat size); -void gl1_3_glLineWidth(void *_glfuncs, GLfloat width); -void gl1_3_glHint(void *_glfuncs, GLenum target, GLenum mode); -void gl1_3_glFrontFace(void *_glfuncs, GLenum mode); -void gl1_3_glCullFace(void *_glfuncs, GLenum mode); -void gl1_3_glIndexubv(void *_glfuncs, const GLubyte* c); -void gl1_3_glIndexub(void *_glfuncs, GLubyte c); -GLboolean gl1_3_glIsTexture(void *_glfuncs, GLuint texture); -void gl1_3_glGenTextures(void *_glfuncs, GLsizei n, GLuint* textures); -void gl1_3_glDeleteTextures(void *_glfuncs, GLsizei n, const GLuint* textures); -void gl1_3_glBindTexture(void *_glfuncs, GLenum target, GLuint texture); -void gl1_3_glTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl1_3_glTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl1_3_glCopyTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -void gl1_3_glCopyTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -void gl1_3_glCopyTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -void gl1_3_glCopyTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border); -void gl1_3_glPolygonOffset(void *_glfuncs, GLfloat factor, GLfloat units); -void gl1_3_glDrawElements(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices); -void gl1_3_glDrawArrays(void *_glfuncs, GLenum mode, GLint first, GLsizei count); -void gl1_3_glCopyTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -void gl1_3_glTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl1_3_glTexImage3D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl1_3_glDrawRangeElements(void *_glfuncs, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum gltype, const GLvoid* indices); -void gl1_3_glBlendEquation(void *_glfuncs, GLenum mode); -void gl1_3_glBlendColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl1_3_glGetCompressedTexImage(void *_glfuncs, GLenum target, GLint level, GLvoid* img); -void gl1_3_glCompressedTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid* data); -void gl1_3_glCompressedTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data); -void gl1_3_glCompressedTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data); -void gl1_3_glCompressedTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid* data); -void gl1_3_glCompressedTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data); -void gl1_3_glCompressedTexImage3D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data); -void gl1_3_glSampleCoverage(void *_glfuncs, GLfloat value, GLboolean invert); -void gl1_3_glActiveTexture(void *_glfuncs, GLenum texture); -void gl1_3_glTranslatef(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl1_3_glTranslated(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl1_3_glScalef(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl1_3_glScaled(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl1_3_glRotatef(void *_glfuncs, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); -void gl1_3_glRotated(void *_glfuncs, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); -void gl1_3_glPushMatrix(void *_glfuncs); -void gl1_3_glPopMatrix(void *_glfuncs); -void gl1_3_glOrtho(void *_glfuncs, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -void gl1_3_glMultMatrixd(void *_glfuncs, const GLdouble* m); -void gl1_3_glMultMatrixf(void *_glfuncs, const GLfloat* m); -void gl1_3_glMatrixMode(void *_glfuncs, GLenum mode); -void gl1_3_glLoadMatrixd(void *_glfuncs, const GLdouble* m); -void gl1_3_glLoadMatrixf(void *_glfuncs, const GLfloat* m); -void gl1_3_glLoadIdentity(void *_glfuncs); -void gl1_3_glFrustum(void *_glfuncs, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -GLboolean gl1_3_glIsList(void *_glfuncs, GLuint list); -void gl1_3_glGetTexGeniv(void *_glfuncs, GLenum coord, GLenum pname, GLint* params); -void gl1_3_glGetTexGenfv(void *_glfuncs, GLenum coord, GLenum pname, GLfloat* params); -void gl1_3_glGetTexGendv(void *_glfuncs, GLenum coord, GLenum pname, GLdouble* params); -void gl1_3_glGetTexEnviv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl1_3_glGetTexEnvfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl1_3_glGetPolygonStipple(void *_glfuncs, GLubyte* mask); -void gl1_3_glGetPixelMapusv(void *_glfuncs, GLenum glmap, GLushort* values); -void gl1_3_glGetPixelMapuiv(void *_glfuncs, GLenum glmap, GLuint* values); -void gl1_3_glGetPixelMapfv(void *_glfuncs, GLenum glmap, GLfloat* values); -void gl1_3_glGetMaterialiv(void *_glfuncs, GLenum face, GLenum pname, GLint* params); -void gl1_3_glGetMaterialfv(void *_glfuncs, GLenum face, GLenum pname, GLfloat* params); -void gl1_3_glGetMapiv(void *_glfuncs, GLenum target, GLenum query, GLint* v); -void gl1_3_glGetMapfv(void *_glfuncs, GLenum target, GLenum query, GLfloat* v); -void gl1_3_glGetMapdv(void *_glfuncs, GLenum target, GLenum query, GLdouble* v); -void gl1_3_glGetLightiv(void *_glfuncs, GLenum light, GLenum pname, GLint* params); -void gl1_3_glGetLightfv(void *_glfuncs, GLenum light, GLenum pname, GLfloat* params); -void gl1_3_glGetClipPlane(void *_glfuncs, GLenum plane, GLdouble* equation); -void gl1_3_glDrawPixels(void *_glfuncs, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl1_3_glCopyPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum gltype); -void gl1_3_glPixelMapusv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLushort* values); -void gl1_3_glPixelMapuiv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLuint* values); -void gl1_3_glPixelMapfv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLfloat* values); -void gl1_3_glPixelTransferi(void *_glfuncs, GLenum pname, GLint param); -void gl1_3_glPixelTransferf(void *_glfuncs, GLenum pname, GLfloat param); -void gl1_3_glPixelZoom(void *_glfuncs, GLfloat xfactor, GLfloat yfactor); -void gl1_3_glAlphaFunc(void *_glfuncs, GLenum glfunc, GLfloat ref); -void gl1_3_glEvalPoint2(void *_glfuncs, GLint i, GLint j); -void gl1_3_glEvalMesh2(void *_glfuncs, GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2); -void gl1_3_glEvalPoint1(void *_glfuncs, GLint i); -void gl1_3_glEvalMesh1(void *_glfuncs, GLenum mode, GLint i1, GLint i2); -void gl1_3_glEvalCoord2fv(void *_glfuncs, const GLfloat* u); -void gl1_3_glEvalCoord2f(void *_glfuncs, GLfloat u, GLfloat v); -void gl1_3_glEvalCoord2dv(void *_glfuncs, const GLdouble* u); -void gl1_3_glEvalCoord2d(void *_glfuncs, GLdouble u, GLdouble v); -void gl1_3_glEvalCoord1fv(void *_glfuncs, const GLfloat* u); -void gl1_3_glEvalCoord1f(void *_glfuncs, GLfloat u); -void gl1_3_glEvalCoord1dv(void *_glfuncs, const GLdouble* u); -void gl1_3_glEvalCoord1d(void *_glfuncs, GLdouble u); -void gl1_3_glMapGrid2f(void *_glfuncs, GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2); -void gl1_3_glMapGrid2d(void *_glfuncs, GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2); -void gl1_3_glMapGrid1f(void *_glfuncs, GLint un, GLfloat u1, GLfloat u2); -void gl1_3_glMapGrid1d(void *_glfuncs, GLint un, GLdouble u1, GLdouble u2); -void gl1_3_glMap2f(void *_glfuncs, GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat* points); -void gl1_3_glMap2d(void *_glfuncs, GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble* points); -void gl1_3_glMap1f(void *_glfuncs, GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat* points); -void gl1_3_glMap1d(void *_glfuncs, GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble* points); -void gl1_3_glPushAttrib(void *_glfuncs, GLbitfield mask); -void gl1_3_glPopAttrib(void *_glfuncs); -void gl1_3_glAccum(void *_glfuncs, GLenum op, GLfloat value); -void gl1_3_glIndexMask(void *_glfuncs, GLuint mask); -void gl1_3_glClearIndex(void *_glfuncs, GLfloat c); -void gl1_3_glClearAccum(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl1_3_glPushName(void *_glfuncs, GLuint name); -void gl1_3_glPopName(void *_glfuncs); -void gl1_3_glPassThrough(void *_glfuncs, GLfloat token); -void gl1_3_glLoadName(void *_glfuncs, GLuint name); -void gl1_3_glInitNames(void *_glfuncs); -GLint gl1_3_glRenderMode(void *_glfuncs, GLenum mode); -void gl1_3_glSelectBuffer(void *_glfuncs, GLsizei size, GLuint* buffer); -void gl1_3_glFeedbackBuffer(void *_glfuncs, GLsizei size, GLenum gltype, GLfloat* buffer); -void gl1_3_glTexGeniv(void *_glfuncs, GLenum coord, GLenum pname, const GLint* params); -void gl1_3_glTexGeni(void *_glfuncs, GLenum coord, GLenum pname, GLint param); -void gl1_3_glTexGenfv(void *_glfuncs, GLenum coord, GLenum pname, const GLfloat* params); -void gl1_3_glTexGenf(void *_glfuncs, GLenum coord, GLenum pname, GLfloat param); -void gl1_3_glTexGendv(void *_glfuncs, GLenum coord, GLenum pname, const GLdouble* params); -void gl1_3_glTexGend(void *_glfuncs, GLenum coord, GLenum pname, GLdouble param); -void gl1_3_glTexEnviv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl1_3_glTexEnvi(void *_glfuncs, GLenum target, GLenum pname, GLint param); -void gl1_3_glTexEnvfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params); -void gl1_3_glTexEnvf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param); -void gl1_3_glShadeModel(void *_glfuncs, GLenum mode); -void gl1_3_glPolygonStipple(void *_glfuncs, const GLubyte* mask); -void gl1_3_glMaterialiv(void *_glfuncs, GLenum face, GLenum pname, const GLint* params); -void gl1_3_glMateriali(void *_glfuncs, GLenum face, GLenum pname, GLint param); -void gl1_3_glMaterialfv(void *_glfuncs, GLenum face, GLenum pname, const GLfloat* params); -void gl1_3_glMaterialf(void *_glfuncs, GLenum face, GLenum pname, GLfloat param); -void gl1_3_glLineStipple(void *_glfuncs, GLint factor, GLushort pattern); -void gl1_3_glLightModeliv(void *_glfuncs, GLenum pname, const GLint* params); -void gl1_3_glLightModeli(void *_glfuncs, GLenum pname, GLint param); -void gl1_3_glLightModelfv(void *_glfuncs, GLenum pname, const GLfloat* params); -void gl1_3_glLightModelf(void *_glfuncs, GLenum pname, GLfloat param); -void gl1_3_glLightiv(void *_glfuncs, GLenum light, GLenum pname, const GLint* params); -void gl1_3_glLighti(void *_glfuncs, GLenum light, GLenum pname, GLint param); -void gl1_3_glLightfv(void *_glfuncs, GLenum light, GLenum pname, const GLfloat* params); -void gl1_3_glLightf(void *_glfuncs, GLenum light, GLenum pname, GLfloat param); -void gl1_3_glFogiv(void *_glfuncs, GLenum pname, const GLint* params); -void gl1_3_glFogi(void *_glfuncs, GLenum pname, GLint param); -void gl1_3_glFogfv(void *_glfuncs, GLenum pname, const GLfloat* params); -void gl1_3_glFogf(void *_glfuncs, GLenum pname, GLfloat param); -void gl1_3_glColorMaterial(void *_glfuncs, GLenum face, GLenum mode); -void gl1_3_glClipPlane(void *_glfuncs, GLenum plane, const GLdouble* equation); -void gl1_3_glVertex4sv(void *_glfuncs, const GLshort* v); -void gl1_3_glVertex4s(void *_glfuncs, GLshort x, GLshort y, GLshort z, GLshort w); -void gl1_3_glVertex4iv(void *_glfuncs, const GLint* v); -void gl1_3_glVertex4i(void *_glfuncs, GLint x, GLint y, GLint z, GLint w); -void gl1_3_glVertex4fv(void *_glfuncs, const GLfloat* v); -void gl1_3_glVertex4f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -void gl1_3_glVertex4dv(void *_glfuncs, const GLdouble* v); -void gl1_3_glVertex4d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -void gl1_3_glVertex3sv(void *_glfuncs, const GLshort* v); -void gl1_3_glVertex3s(void *_glfuncs, GLshort x, GLshort y, GLshort z); -void gl1_3_glVertex3iv(void *_glfuncs, const GLint* v); -void gl1_3_glVertex3i(void *_glfuncs, GLint x, GLint y, GLint z); -void gl1_3_glVertex3fv(void *_glfuncs, const GLfloat* v); -void gl1_3_glVertex3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl1_3_glVertex3dv(void *_glfuncs, const GLdouble* v); -void gl1_3_glVertex3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl1_3_glVertex2sv(void *_glfuncs, const GLshort* v); -void gl1_3_glVertex2s(void *_glfuncs, GLshort x, GLshort y); -void gl1_3_glVertex2iv(void *_glfuncs, const GLint* v); -void gl1_3_glVertex2i(void *_glfuncs, GLint x, GLint y); -void gl1_3_glVertex2fv(void *_glfuncs, const GLfloat* v); -void gl1_3_glVertex2f(void *_glfuncs, GLfloat x, GLfloat y); -void gl1_3_glVertex2dv(void *_glfuncs, const GLdouble* v); -void gl1_3_glVertex2d(void *_glfuncs, GLdouble x, GLdouble y); -void gl1_3_glTexCoord4sv(void *_glfuncs, const GLshort* v); -void gl1_3_glTexCoord4s(void *_glfuncs, GLshort s, GLshort t, GLshort r, GLshort q); -void gl1_3_glTexCoord4iv(void *_glfuncs, const GLint* v); -void gl1_3_glTexCoord4i(void *_glfuncs, GLint s, GLint t, GLint r, GLint q); -void gl1_3_glTexCoord4fv(void *_glfuncs, const GLfloat* v); -void gl1_3_glTexCoord4f(void *_glfuncs, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -void gl1_3_glTexCoord4dv(void *_glfuncs, const GLdouble* v); -void gl1_3_glTexCoord4d(void *_glfuncs, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -void gl1_3_glTexCoord3sv(void *_glfuncs, const GLshort* v); -void gl1_3_glTexCoord3s(void *_glfuncs, GLshort s, GLshort t, GLshort r); -void gl1_3_glTexCoord3iv(void *_glfuncs, const GLint* v); -void gl1_3_glTexCoord3i(void *_glfuncs, GLint s, GLint t, GLint r); -void gl1_3_glTexCoord3fv(void *_glfuncs, const GLfloat* v); -void gl1_3_glTexCoord3f(void *_glfuncs, GLfloat s, GLfloat t, GLfloat r); -void gl1_3_glTexCoord3dv(void *_glfuncs, const GLdouble* v); -void gl1_3_glTexCoord3d(void *_glfuncs, GLdouble s, GLdouble t, GLdouble r); -void gl1_3_glTexCoord2sv(void *_glfuncs, const GLshort* v); -void gl1_3_glTexCoord2s(void *_glfuncs, GLshort s, GLshort t); -void gl1_3_glTexCoord2iv(void *_glfuncs, const GLint* v); -void gl1_3_glTexCoord2i(void *_glfuncs, GLint s, GLint t); -void gl1_3_glTexCoord2fv(void *_glfuncs, const GLfloat* v); -void gl1_3_glTexCoord2f(void *_glfuncs, GLfloat s, GLfloat t); -void gl1_3_glTexCoord2dv(void *_glfuncs, const GLdouble* v); -void gl1_3_glTexCoord2d(void *_glfuncs, GLdouble s, GLdouble t); -void gl1_3_glTexCoord1sv(void *_glfuncs, const GLshort* v); -void gl1_3_glTexCoord1s(void *_glfuncs, GLshort s); -void gl1_3_glTexCoord1iv(void *_glfuncs, const GLint* v); -void gl1_3_glTexCoord1i(void *_glfuncs, GLint s); -void gl1_3_glTexCoord1fv(void *_glfuncs, const GLfloat* v); -void gl1_3_glTexCoord1f(void *_glfuncs, GLfloat s); -void gl1_3_glTexCoord1dv(void *_glfuncs, const GLdouble* v); -void gl1_3_glTexCoord1d(void *_glfuncs, GLdouble s); -void gl1_3_glRectsv(void *_glfuncs, const GLshort* v1, const GLshort* v2); -void gl1_3_glRects(void *_glfuncs, GLshort x1, GLshort y1, GLshort x2, GLshort y2); -void gl1_3_glRectiv(void *_glfuncs, const GLint* v1, const GLint* v2); -void gl1_3_glRecti(void *_glfuncs, GLint x1, GLint y1, GLint x2, GLint y2); -void gl1_3_glRectfv(void *_glfuncs, const GLfloat* v1, const GLfloat* v2); -void gl1_3_glRectf(void *_glfuncs, GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2); -void gl1_3_glRectdv(void *_glfuncs, const GLdouble* v1, const GLdouble* v2); -void gl1_3_glRectd(void *_glfuncs, GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2); -void gl1_3_glRasterPos4sv(void *_glfuncs, const GLshort* v); -void gl1_3_glRasterPos4s(void *_glfuncs, GLshort x, GLshort y, GLshort z, GLshort w); -void gl1_3_glRasterPos4iv(void *_glfuncs, const GLint* v); -void gl1_3_glRasterPos4i(void *_glfuncs, GLint x, GLint y, GLint z, GLint w); -void gl1_3_glRasterPos4fv(void *_glfuncs, const GLfloat* v); -void gl1_3_glRasterPos4f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -void gl1_3_glRasterPos4dv(void *_glfuncs, const GLdouble* v); -void gl1_3_glRasterPos4d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -void gl1_3_glRasterPos3sv(void *_glfuncs, const GLshort* v); -void gl1_3_glRasterPos3s(void *_glfuncs, GLshort x, GLshort y, GLshort z); -void gl1_3_glRasterPos3iv(void *_glfuncs, const GLint* v); -void gl1_3_glRasterPos3i(void *_glfuncs, GLint x, GLint y, GLint z); -void gl1_3_glRasterPos3fv(void *_glfuncs, const GLfloat* v); -void gl1_3_glRasterPos3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl1_3_glRasterPos3dv(void *_glfuncs, const GLdouble* v); -void gl1_3_glRasterPos3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl1_3_glRasterPos2sv(void *_glfuncs, const GLshort* v); -void gl1_3_glRasterPos2s(void *_glfuncs, GLshort x, GLshort y); -void gl1_3_glRasterPos2iv(void *_glfuncs, const GLint* v); -void gl1_3_glRasterPos2i(void *_glfuncs, GLint x, GLint y); -void gl1_3_glRasterPos2fv(void *_glfuncs, const GLfloat* v); -void gl1_3_glRasterPos2f(void *_glfuncs, GLfloat x, GLfloat y); -void gl1_3_glRasterPos2dv(void *_glfuncs, const GLdouble* v); -void gl1_3_glRasterPos2d(void *_glfuncs, GLdouble x, GLdouble y); -void gl1_3_glNormal3sv(void *_glfuncs, const GLshort* v); -void gl1_3_glNormal3s(void *_glfuncs, GLshort nx, GLshort ny, GLshort nz); -void gl1_3_glNormal3iv(void *_glfuncs, const GLint* v); -void gl1_3_glNormal3i(void *_glfuncs, GLint nx, GLint ny, GLint nz); -void gl1_3_glNormal3fv(void *_glfuncs, const GLfloat* v); -void gl1_3_glNormal3f(void *_glfuncs, GLfloat nx, GLfloat ny, GLfloat nz); -void gl1_3_glNormal3dv(void *_glfuncs, const GLdouble* v); -void gl1_3_glNormal3d(void *_glfuncs, GLdouble nx, GLdouble ny, GLdouble nz); -void gl1_3_glNormal3bv(void *_glfuncs, const GLbyte* v); -void gl1_3_glNormal3b(void *_glfuncs, GLbyte nx, GLbyte ny, GLbyte nz); -void gl1_3_glIndexsv(void *_glfuncs, const GLshort* c); -void gl1_3_glIndexs(void *_glfuncs, GLshort c); -void gl1_3_glIndexiv(void *_glfuncs, const GLint* c); -void gl1_3_glIndexi(void *_glfuncs, GLint c); -void gl1_3_glIndexfv(void *_glfuncs, const GLfloat* c); -void gl1_3_glIndexf(void *_glfuncs, GLfloat c); -void gl1_3_glIndexdv(void *_glfuncs, const GLdouble* c); -void gl1_3_glIndexd(void *_glfuncs, GLdouble c); -void gl1_3_glEnd(void *_glfuncs); -void gl1_3_glEdgeFlagv(void *_glfuncs, const GLboolean* flag); -void gl1_3_glEdgeFlag(void *_glfuncs, GLboolean flag); -void gl1_3_glColor4usv(void *_glfuncs, const GLushort* v); -void gl1_3_glColor4us(void *_glfuncs, GLushort red, GLushort green, GLushort blue, GLushort alpha); -void gl1_3_glColor4uiv(void *_glfuncs, const GLuint* v); -void gl1_3_glColor4ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue, GLuint alpha); -void gl1_3_glColor4ubv(void *_glfuncs, const GLubyte* v); -void gl1_3_glColor4ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha); -void gl1_3_glColor4sv(void *_glfuncs, const GLshort* v); -void gl1_3_glColor4s(void *_glfuncs, GLshort red, GLshort green, GLshort blue, GLshort alpha); -void gl1_3_glColor4iv(void *_glfuncs, const GLint* v); -void gl1_3_glColor4i(void *_glfuncs, GLint red, GLint green, GLint blue, GLint alpha); -void gl1_3_glColor4fv(void *_glfuncs, const GLfloat* v); -void gl1_3_glColor4f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl1_3_glColor4dv(void *_glfuncs, const GLdouble* v); -void gl1_3_glColor4d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha); -void gl1_3_glColor4bv(void *_glfuncs, const GLbyte* v); -void gl1_3_glColor4b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha); -void gl1_3_glColor3usv(void *_glfuncs, const GLushort* v); -void gl1_3_glColor3us(void *_glfuncs, GLushort red, GLushort green, GLushort blue); -void gl1_3_glColor3uiv(void *_glfuncs, const GLuint* v); -void gl1_3_glColor3ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue); -void gl1_3_glColor3ubv(void *_glfuncs, const GLubyte* v); -void gl1_3_glColor3ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue); -void gl1_3_glColor3sv(void *_glfuncs, const GLshort* v); -void gl1_3_glColor3s(void *_glfuncs, GLshort red, GLshort green, GLshort blue); -void gl1_3_glColor3iv(void *_glfuncs, const GLint* v); -void gl1_3_glColor3i(void *_glfuncs, GLint red, GLint green, GLint blue); -void gl1_3_glColor3fv(void *_glfuncs, const GLfloat* v); -void gl1_3_glColor3f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue); -void gl1_3_glColor3dv(void *_glfuncs, const GLdouble* v); -void gl1_3_glColor3d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue); -void gl1_3_glColor3bv(void *_glfuncs, const GLbyte* v); -void gl1_3_glColor3b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue); -void gl1_3_glBitmap(void *_glfuncs, GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte* bitmap); -void gl1_3_glBegin(void *_glfuncs, GLenum mode); -void gl1_3_glListBase(void *_glfuncs, GLuint base); -GLuint gl1_3_glGenLists(void *_glfuncs, GLsizei range_); -void gl1_3_glDeleteLists(void *_glfuncs, GLuint list, GLsizei range_); -void gl1_3_glCallLists(void *_glfuncs, GLsizei n, GLenum gltype, const GLvoid* lists); -void gl1_3_glCallList(void *_glfuncs, GLuint list); -void gl1_3_glEndList(void *_glfuncs); -void gl1_3_glNewList(void *_glfuncs, GLuint list, GLenum mode); -void gl1_3_glPushClientAttrib(void *_glfuncs, GLbitfield mask); -void gl1_3_glPopClientAttrib(void *_glfuncs); -void gl1_3_glPrioritizeTextures(void *_glfuncs, GLsizei n, const GLuint* textures, const GLfloat* priorities); -GLboolean gl1_3_glAreTexturesResident(void *_glfuncs, GLsizei n, const GLuint* textures, GLboolean* residences); -void gl1_3_glVertexPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl1_3_glTexCoordPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl1_3_glNormalPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl1_3_glInterleavedArrays(void *_glfuncs, GLenum format, GLsizei stride, const GLvoid* pointer); -void gl1_3_glIndexPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl1_3_glEnableClientState(void *_glfuncs, GLenum array); -void gl1_3_glEdgeFlagPointer(void *_glfuncs, GLsizei stride, const GLvoid* pointer); -void gl1_3_glDisableClientState(void *_glfuncs, GLenum array); -void gl1_3_glColorPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl1_3_glArrayElement(void *_glfuncs, GLint i); -void gl1_3_glResetMinmax(void *_glfuncs, GLenum target); -void gl1_3_glResetHistogram(void *_glfuncs, GLenum target); -void gl1_3_glMinmax(void *_glfuncs, GLenum target, GLenum internalFormat, GLboolean sink); -void gl1_3_glHistogram(void *_glfuncs, GLenum target, GLsizei width, GLenum internalFormat, GLboolean sink); -void gl1_3_glGetMinmaxParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl1_3_glGetMinmaxParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl1_3_glGetMinmax(void *_glfuncs, GLenum target, GLboolean reset, GLenum format, GLenum gltype, GLvoid* values); -void gl1_3_glGetHistogramParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl1_3_glGetHistogramParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl1_3_glGetHistogram(void *_glfuncs, GLenum target, GLboolean reset, GLenum format, GLenum gltype, GLvoid* values); -void gl1_3_glSeparableFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* row, const GLvoid* column); -void gl1_3_glGetSeparableFilter(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* row, GLvoid* column, GLvoid* span); -void gl1_3_glGetConvolutionParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl1_3_glGetConvolutionParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl1_3_glGetConvolutionFilter(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* image); -void gl1_3_glCopyConvolutionFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height); -void gl1_3_glCopyConvolutionFilter1D(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width); -void gl1_3_glConvolutionParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl1_3_glConvolutionParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint params); -void gl1_3_glConvolutionParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params); -void gl1_3_glConvolutionParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat params); -void gl1_3_glConvolutionFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* image); -void gl1_3_glConvolutionFilter1D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum gltype, const GLvoid* image); -void gl1_3_glCopyColorSubTable(void *_glfuncs, GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); -void gl1_3_glColorSubTable(void *_glfuncs, GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum gltype, const GLvoid* data); -void gl1_3_glGetColorTableParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl1_3_glGetColorTableParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl1_3_glGetColorTable(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* table); -void gl1_3_glCopyColorTable(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width); -void gl1_3_glColorTableParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl1_3_glColorTableParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params); -void gl1_3_glColorTable(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum gltype, const GLvoid* table); -void gl1_3_glMultTransposeMatrixd(void *_glfuncs, const GLdouble* m); -void gl1_3_glMultTransposeMatrixf(void *_glfuncs, const GLfloat* m); -void gl1_3_glLoadTransposeMatrixd(void *_glfuncs, const GLdouble* m); -void gl1_3_glLoadTransposeMatrixf(void *_glfuncs, const GLfloat* m); -void gl1_3_glMultiTexCoord4sv(void *_glfuncs, GLenum target, const GLshort* v); -void gl1_3_glMultiTexCoord4s(void *_glfuncs, GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); -void gl1_3_glMultiTexCoord4iv(void *_glfuncs, GLenum target, const GLint* v); -void gl1_3_glMultiTexCoord4i(void *_glfuncs, GLenum target, GLint s, GLint t, GLint r, GLint q); -void gl1_3_glMultiTexCoord4fv(void *_glfuncs, GLenum target, const GLfloat* v); -void gl1_3_glMultiTexCoord4f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -void gl1_3_glMultiTexCoord4dv(void *_glfuncs, GLenum target, const GLdouble* v); -void gl1_3_glMultiTexCoord4d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -void gl1_3_glMultiTexCoord3sv(void *_glfuncs, GLenum target, const GLshort* v); -void gl1_3_glMultiTexCoord3s(void *_glfuncs, GLenum target, GLshort s, GLshort t, GLshort r); -void gl1_3_glMultiTexCoord3iv(void *_glfuncs, GLenum target, const GLint* v); -void gl1_3_glMultiTexCoord3i(void *_glfuncs, GLenum target, GLint s, GLint t, GLint r); -void gl1_3_glMultiTexCoord3fv(void *_glfuncs, GLenum target, const GLfloat* v); -void gl1_3_glMultiTexCoord3f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t, GLfloat r); -void gl1_3_glMultiTexCoord3dv(void *_glfuncs, GLenum target, const GLdouble* v); -void gl1_3_glMultiTexCoord3d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t, GLdouble r); -void gl1_3_glMultiTexCoord2sv(void *_glfuncs, GLenum target, const GLshort* v); -void gl1_3_glMultiTexCoord2s(void *_glfuncs, GLenum target, GLshort s, GLshort t); -void gl1_3_glMultiTexCoord2iv(void *_glfuncs, GLenum target, const GLint* v); -void gl1_3_glMultiTexCoord2i(void *_glfuncs, GLenum target, GLint s, GLint t); -void gl1_3_glMultiTexCoord2fv(void *_glfuncs, GLenum target, const GLfloat* v); -void gl1_3_glMultiTexCoord2f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t); -void gl1_3_glMultiTexCoord2dv(void *_glfuncs, GLenum target, const GLdouble* v); -void gl1_3_glMultiTexCoord2d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t); -void gl1_3_glMultiTexCoord1sv(void *_glfuncs, GLenum target, const GLshort* v); -void gl1_3_glMultiTexCoord1s(void *_glfuncs, GLenum target, GLshort s); -void gl1_3_glMultiTexCoord1iv(void *_glfuncs, GLenum target, const GLint* v); -void gl1_3_glMultiTexCoord1i(void *_glfuncs, GLenum target, GLint s); -void gl1_3_glMultiTexCoord1fv(void *_glfuncs, GLenum target, const GLfloat* v); -void gl1_3_glMultiTexCoord1f(void *_glfuncs, GLenum target, GLfloat s); -void gl1_3_glMultiTexCoord1dv(void *_glfuncs, GLenum target, const GLdouble* v); -void gl1_3_glMultiTexCoord1d(void *_glfuncs, GLenum target, GLdouble s); -void gl1_3_glClientActiveTexture(void *_glfuncs, GLenum texture); - - -#ifdef __cplusplus -} // extern "C" -#endif diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/1.3/gl.go b/Godeps/_workspace/src/github.com/obscuren/qml/gl/1.3/gl.go deleted file mode 100644 index 6df8965a3e..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/1.3/gl.go +++ /dev/null @@ -1,3571 +0,0 @@ -// ** file automatically generated by glgen -- do not edit manually ** - -package GL - -// #cgo CXXFLAGS: -std=c++0x -pedantic-errors -Wall -fno-strict-aliasing -// #cgo LDFLAGS: -lstdc++ -// #cgo pkg-config: Qt5Core Qt5OpenGL -// -// #include "funcs.h" -// -// void free(void*); -// -import "C" - -import ( - "fmt" - "reflect" - "unsafe" - - "gopkg.in/qml.v1/gl/glbase" -) - -// API returns a value that offers methods matching the OpenGL version 1.3 API. -// -// The returned API must not be used after the provided OpenGL context becomes invalid. -func API(context glbase.Contexter) *GL { - gl := &GL{} - gl.funcs = C.gl1_3_funcs() - if gl.funcs == nil { - panic(fmt.Errorf("OpenGL version 1.3 is not available")) - } - return gl -} - -// GL implements the OpenGL version 1.3 API. Values of this -// type must be created via the API function, and it must not be used after -// the associated OpenGL context becomes invalid. -type GL struct { - funcs unsafe.Pointer -} - -const ( - FALSE = 0 - TRUE = 1 - NONE = 0 - - BYTE = 0x1400 - UNSIGNED_BYTE = 0x1401 - SHORT = 0x1402 - UNSIGNED_SHORT = 0x1403 - INT = 0x1404 - UNSIGNED_INT = 0x1405 - FLOAT = 0x1406 - N2_BYTES = 0x1407 - N3_BYTES = 0x1408 - N4_BYTES = 0x1409 - DOUBLE = 0x140A - - ACCUM = 0x0100 - LOAD = 0x0101 - RETURN = 0x0102 - MULT = 0x0103 - ADD = 0x0104 - - ACCUM_BUFFER_BIT = 0x00000200 - ALL_ATTRIB_BITS = 0xFFFFFFFF - COLOR_BUFFER_BIT = 0x00004000 - CURRENT_BIT = 0x00000001 - DEPTH_BUFFER_BIT = 0x00000100 - ENABLE_BIT = 0x00002000 - EVAL_BIT = 0x00010000 - FOG_BIT = 0x00000080 - HINT_BIT = 0x00008000 - LIGHTING_BIT = 0x00000040 - LINE_BIT = 0x00000004 - LIST_BIT = 0x00020000 - MULTISAMPLE_BIT = 0x20000000 - PIXEL_MODE_BIT = 0x00000020 - POINT_BIT = 0x00000002 - POLYGON_BIT = 0x00000008 - POLYGON_STIPPLE_BIT = 0x00000010 - SCISSOR_BIT = 0x00080000 - STENCIL_BUFFER_BIT = 0x00000400 - TEXTURE_BIT = 0x00040000 - TRANSFORM_BIT = 0x00001000 - VIEWPORT_BIT = 0x00000800 - - ALWAYS = 0x0207 - EQUAL = 0x0202 - GEQUAL = 0x0206 - GREATER = 0x0204 - LEQUAL = 0x0203 - LESS = 0x0201 - NEVER = 0x0200 - NOTEQUAL = 0x0205 - - LOGIC_OP = 0x0BF1 - - DST_ALPHA = 0x0304 - ONE = 1 - ONE_MINUS_DST_ALPHA = 0x0305 - ONE_MINUS_SRC_ALPHA = 0x0303 - ONE_MINUS_SRC_COLOR = 0x0301 - SRC_ALPHA = 0x0302 - SRC_COLOR = 0x0300 - ZERO = 0 - - DST_COLOR = 0x0306 - ONE_MINUS_DST_COLOR = 0x0307 - SRC_ALPHA_SATURATE = 0x0308 - - CLIENT_ALL_ATTRIB_BITS = 0xFFFFFFFF - CLIENT_PIXEL_STORE_BIT = 0x00000001 - CLIENT_VERTEX_ARRAY_BIT = 0x00000002 - - CLIP_PLANE0 = 0x3000 - CLIP_PLANE1 = 0x3001 - CLIP_PLANE2 = 0x3002 - CLIP_PLANE3 = 0x3003 - CLIP_PLANE4 = 0x3004 - CLIP_PLANE5 = 0x3005 - - BACK = 0x0405 - FRONT = 0x0404 - FRONT_AND_BACK = 0x0408 - - AMBIENT = 0x1200 - AMBIENT_AND_DIFFUSE = 0x1602 - DIFFUSE = 0x1201 - EMISSION = 0x1600 - SPECULAR = 0x1202 - - AUX0 = 0x0409 - AUX1 = 0x040A - AUX2 = 0x040B - AUX3 = 0x040C - BACK_LEFT = 0x0402 - BACK_RIGHT = 0x0403 - FRONT_LEFT = 0x0400 - FRONT_RIGHT = 0x0401 - LEFT = 0x0406 - RIGHT = 0x0407 - - ALPHA_TEST = 0x0BC0 - AUTO_NORMAL = 0x0D80 - BLEND = 0x0BE2 - COLOR_ARRAY = 0x8076 - COLOR_LOGIC_OP = 0x0BF2 - COLOR_MATERIAL = 0x0B57 - CULL_FACE = 0x0B44 - DEPTH_TEST = 0x0B71 - DITHER = 0x0BD0 - EDGE_FLAG_ARRAY = 0x8079 - FOG = 0x0B60 - INDEX_ARRAY = 0x8077 - INDEX_LOGIC_OP = 0x0BF1 - LIGHT0 = 0x4000 - LIGHT1 = 0x4001 - LIGHT2 = 0x4002 - LIGHT3 = 0x4003 - LIGHT4 = 0x4004 - LIGHT5 = 0x4005 - LIGHT6 = 0x4006 - LIGHT7 = 0x4007 - LIGHTING = 0x0B50 - LINE_SMOOTH = 0x0B20 - LINE_STIPPLE = 0x0B24 - MAP1_COLOR_4 = 0x0D90 - MAP1_INDEX = 0x0D91 - MAP1_NORMAL = 0x0D92 - MAP1_TEXTURE_COORD_1 = 0x0D93 - MAP1_TEXTURE_COORD_2 = 0x0D94 - MAP1_TEXTURE_COORD_3 = 0x0D95 - MAP1_TEXTURE_COORD_4 = 0x0D96 - MAP1_VERTEX_3 = 0x0D97 - MAP1_VERTEX_4 = 0x0D98 - MAP2_COLOR_4 = 0x0DB0 - MAP2_INDEX = 0x0DB1 - MAP2_NORMAL = 0x0DB2 - MAP2_TEXTURE_COORD_1 = 0x0DB3 - MAP2_TEXTURE_COORD_2 = 0x0DB4 - MAP2_TEXTURE_COORD_3 = 0x0DB5 - MAP2_TEXTURE_COORD_4 = 0x0DB6 - MAP2_VERTEX_3 = 0x0DB7 - MAP2_VERTEX_4 = 0x0DB8 - NORMALIZE = 0x0BA1 - NORMAL_ARRAY = 0x8075 - POINT_SMOOTH = 0x0B10 - POLYGON_OFFSET_FILL = 0x8037 - POLYGON_OFFSET_LINE = 0x2A02 - POLYGON_OFFSET_POINT = 0x2A01 - POLYGON_SMOOTH = 0x0B41 - POLYGON_STIPPLE = 0x0B42 - SCISSOR_TEST = 0x0C11 - STENCIL_TEST = 0x0B90 - TEXTURE_1D = 0x0DE0 - TEXTURE_2D = 0x0DE1 - TEXTURE_COORD_ARRAY = 0x8078 - TEXTURE_GEN_Q = 0x0C63 - TEXTURE_GEN_R = 0x0C62 - TEXTURE_GEN_S = 0x0C60 - TEXTURE_GEN_T = 0x0C61 - VERTEX_ARRAY = 0x8074 - - INVALID_ENUM = 0x0500 - INVALID_OPERATION = 0x0502 - INVALID_VALUE = 0x0501 - NO_ERROR = 0 - OUT_OF_MEMORY = 0x0505 - STACK_OVERFLOW = 0x0503 - STACK_UNDERFLOW = 0x0504 - - N2D = 0x0600 - N3D = 0x0601 - N3D_COLOR = 0x0602 - N3D_COLOR_TEXTURE = 0x0603 - N4D_COLOR_TEXTURE = 0x0604 - - BITMAP_TOKEN = 0x0704 - COPY_PIXEL_TOKEN = 0x0706 - DRAW_PIXEL_TOKEN = 0x0705 - LINE_RESET_TOKEN = 0x0707 - LINE_TOKEN = 0x0702 - PASS_THROUGH_TOKEN = 0x0700 - POINT_TOKEN = 0x0701 - POLYGON_TOKEN = 0x0703 - - EXP = 0x0800 - EXP2 = 0x0801 - LINEAR = 0x2601 - - FOG_COLOR = 0x0B66 - FOG_DENSITY = 0x0B62 - FOG_END = 0x0B64 - FOG_INDEX = 0x0B61 - FOG_MODE = 0x0B65 - FOG_START = 0x0B63 - - CCW = 0x0901 - CW = 0x0900 - - COEFF = 0x0A00 - DOMAIN = 0x0A02 - ORDER = 0x0A01 - - PIXEL_MAP_A_TO_A = 0x0C79 - PIXEL_MAP_B_TO_B = 0x0C78 - PIXEL_MAP_G_TO_G = 0x0C77 - PIXEL_MAP_I_TO_A = 0x0C75 - PIXEL_MAP_I_TO_B = 0x0C74 - PIXEL_MAP_I_TO_G = 0x0C73 - PIXEL_MAP_I_TO_I = 0x0C70 - PIXEL_MAP_I_TO_R = 0x0C72 - PIXEL_MAP_R_TO_R = 0x0C76 - PIXEL_MAP_S_TO_S = 0x0C71 - - ACCUM_ALPHA_BITS = 0x0D5B - ACCUM_BLUE_BITS = 0x0D5A - ACCUM_CLEAR_VALUE = 0x0B80 - ACCUM_GREEN_BITS = 0x0D59 - ACCUM_RED_BITS = 0x0D58 - ALIASED_LINE_WIDTH_RANGE = 0x846E - ALIASED_POINT_SIZE_RANGE = 0x846D - ALPHA_BIAS = 0x0D1D - ALPHA_BITS = 0x0D55 - ALPHA_SCALE = 0x0D1C - ALPHA_TEST_FUNC = 0x0BC1 - ALPHA_TEST_REF = 0x0BC2 - ATTRIB_STACK_DEPTH = 0x0BB0 - AUX_BUFFERS = 0x0C00 - BLEND_DST = 0x0BE0 - BLEND_SRC = 0x0BE1 - BLUE_BIAS = 0x0D1B - BLUE_BITS = 0x0D54 - BLUE_SCALE = 0x0D1A - CLIENT_ATTRIB_STACK_DEPTH = 0x0BB1 - COLOR_ARRAY_SIZE = 0x8081 - COLOR_ARRAY_STRIDE = 0x8083 - COLOR_ARRAY_TYPE = 0x8082 - COLOR_CLEAR_VALUE = 0x0C22 - COLOR_MATERIAL_FACE = 0x0B55 - COLOR_MATERIAL_PARAMETER = 0x0B56 - COLOR_WRITEMASK = 0x0C23 - CULL_FACE_MODE = 0x0B45 - CURRENT_COLOR = 0x0B00 - CURRENT_INDEX = 0x0B01 - CURRENT_NORMAL = 0x0B02 - CURRENT_RASTER_COLOR = 0x0B04 - CURRENT_RASTER_DISTANCE = 0x0B09 - CURRENT_RASTER_INDEX = 0x0B05 - CURRENT_RASTER_POSITION = 0x0B07 - CURRENT_RASTER_POSITION_VALID = 0x0B08 - CURRENT_RASTER_TEXTURE_COORDS = 0x0B06 - CURRENT_TEXTURE_COORDS = 0x0B03 - DEPTH_BIAS = 0x0D1F - DEPTH_BITS = 0x0D56 - DEPTH_CLEAR_VALUE = 0x0B73 - DEPTH_FUNC = 0x0B74 - DEPTH_RANGE = 0x0B70 - DEPTH_SCALE = 0x0D1E - DEPTH_WRITEMASK = 0x0B72 - DOUBLEBUFFER = 0x0C32 - DRAW_BUFFER = 0x0C01 - EDGE_FLAG = 0x0B43 - EDGE_FLAG_ARRAY_STRIDE = 0x808C - FEEDBACK_BUFFER_SIZE = 0x0DF1 - FEEDBACK_BUFFER_TYPE = 0x0DF2 - FOG_HINT = 0x0C54 - FRONT_FACE = 0x0B46 - GREEN_BIAS = 0x0D19 - GREEN_BITS = 0x0D53 - GREEN_SCALE = 0x0D18 - INDEX_ARRAY_STRIDE = 0x8086 - INDEX_ARRAY_TYPE = 0x8085 - INDEX_BITS = 0x0D51 - INDEX_CLEAR_VALUE = 0x0C20 - INDEX_MODE = 0x0C30 - INDEX_OFFSET = 0x0D13 - INDEX_SHIFT = 0x0D12 - INDEX_WRITEMASK = 0x0C21 - LIGHT_MODEL_AMBIENT = 0x0B53 - LIGHT_MODEL_COLOR_CONTROL = 0x81F8 - LIGHT_MODEL_LOCAL_VIEWER = 0x0B51 - LIGHT_MODEL_TWO_SIDE = 0x0B52 - LINE_SMOOTH_HINT = 0x0C52 - LINE_STIPPLE_PATTERN = 0x0B25 - LINE_STIPPLE_REPEAT = 0x0B26 - LINE_WIDTH = 0x0B21 - LINE_WIDTH_GRANULARITY = 0x0B23 - LINE_WIDTH_RANGE = 0x0B22 - LIST_BASE = 0x0B32 - LIST_INDEX = 0x0B33 - LIST_MODE = 0x0B30 - LOGIC_OP_MODE = 0x0BF0 - MAP1_GRID_DOMAIN = 0x0DD0 - MAP1_GRID_SEGMENTS = 0x0DD1 - MAP2_GRID_DOMAIN = 0x0DD2 - MAP2_GRID_SEGMENTS = 0x0DD3 - MAP_COLOR = 0x0D10 - MAP_STENCIL = 0x0D11 - MATRIX_MODE = 0x0BA0 - MAX_ATTRIB_STACK_DEPTH = 0x0D35 - MAX_CLIENT_ATTRIB_STACK_DEPTH = 0x0D3B - MAX_CLIP_PLANES = 0x0D32 - MAX_EVAL_ORDER = 0x0D30 - MAX_LIGHTS = 0x0D31 - MAX_LIST_NESTING = 0x0B31 - MAX_MODELVIEW_STACK_DEPTH = 0x0D36 - MAX_NAME_STACK_DEPTH = 0x0D37 - MAX_PIXEL_MAP_TABLE = 0x0D34 - MAX_PROJECTION_STACK_DEPTH = 0x0D38 - MAX_TEXTURE_SIZE = 0x0D33 - MAX_TEXTURE_STACK_DEPTH = 0x0D39 - MAX_VIEWPORT_DIMS = 0x0D3A - MODELVIEW_MATRIX = 0x0BA6 - MODELVIEW_STACK_DEPTH = 0x0BA3 - NAME_STACK_DEPTH = 0x0D70 - NORMAL_ARRAY_STRIDE = 0x807F - NORMAL_ARRAY_TYPE = 0x807E - PACK_ALIGNMENT = 0x0D05 - PACK_LSB_FIRST = 0x0D01 - PACK_ROW_LENGTH = 0x0D02 - PACK_SKIP_PIXELS = 0x0D04 - PACK_SKIP_ROWS = 0x0D03 - PACK_SWAP_BYTES = 0x0D00 - PERSPECTIVE_CORRECTION_HINT = 0x0C50 - PIXEL_MAP_A_TO_A_SIZE = 0x0CB9 - PIXEL_MAP_B_TO_B_SIZE = 0x0CB8 - PIXEL_MAP_G_TO_G_SIZE = 0x0CB7 - PIXEL_MAP_I_TO_A_SIZE = 0x0CB5 - PIXEL_MAP_I_TO_B_SIZE = 0x0CB4 - PIXEL_MAP_I_TO_G_SIZE = 0x0CB3 - PIXEL_MAP_I_TO_I_SIZE = 0x0CB0 - PIXEL_MAP_I_TO_R_SIZE = 0x0CB2 - PIXEL_MAP_R_TO_R_SIZE = 0x0CB6 - PIXEL_MAP_S_TO_S_SIZE = 0x0CB1 - POINT_SIZE = 0x0B11 - POINT_SIZE_GRANULARITY = 0x0B13 - POINT_SIZE_RANGE = 0x0B12 - POINT_SMOOTH_HINT = 0x0C51 - POLYGON_MODE = 0x0B40 - POLYGON_OFFSET_FACTOR = 0x8038 - POLYGON_OFFSET_UNITS = 0x2A00 - POLYGON_SMOOTH_HINT = 0x0C53 - PROJECTION_MATRIX = 0x0BA7 - PROJECTION_STACK_DEPTH = 0x0BA4 - READ_BUFFER = 0x0C02 - RED_BIAS = 0x0D15 - RED_BITS = 0x0D52 - RED_SCALE = 0x0D14 - RENDER_MODE = 0x0C40 - RGBA_MODE = 0x0C31 - SCISSOR_BOX = 0x0C10 - SELECTION_BUFFER_SIZE = 0x0DF4 - SHADE_MODEL = 0x0B54 - SMOOTH_LINE_WIDTH_GRANULARITY = 0x0B23 - SMOOTH_LINE_WIDTH_RANGE = 0x0B22 - SMOOTH_POINT_SIZE_GRANULARITY = 0x0B13 - SMOOTH_POINT_SIZE_RANGE = 0x0B12 - STENCIL_BITS = 0x0D57 - STENCIL_CLEAR_VALUE = 0x0B91 - STENCIL_FAIL = 0x0B94 - STENCIL_FUNC = 0x0B92 - STENCIL_PASS_DEPTH_FAIL = 0x0B95 - STENCIL_PASS_DEPTH_PASS = 0x0B96 - STENCIL_REF = 0x0B97 - STENCIL_VALUE_MASK = 0x0B93 - STENCIL_WRITEMASK = 0x0B98 - STEREO = 0x0C33 - SUBPIXEL_BITS = 0x0D50 - TEXTURE_BINDING_1D = 0x8068 - TEXTURE_BINDING_2D = 0x8069 - TEXTURE_BINDING_3D = 0x806A - TEXTURE_COORD_ARRAY_SIZE = 0x8088 - TEXTURE_COORD_ARRAY_STRIDE = 0x808A - TEXTURE_COORD_ARRAY_TYPE = 0x8089 - TEXTURE_MATRIX = 0x0BA8 - TEXTURE_STACK_DEPTH = 0x0BA5 - UNPACK_ALIGNMENT = 0x0CF5 - UNPACK_LSB_FIRST = 0x0CF1 - UNPACK_ROW_LENGTH = 0x0CF2 - UNPACK_SKIP_PIXELS = 0x0CF4 - UNPACK_SKIP_ROWS = 0x0CF3 - UNPACK_SWAP_BYTES = 0x0CF0 - VERTEX_ARRAY_SIZE = 0x807A - VERTEX_ARRAY_STRIDE = 0x807C - VERTEX_ARRAY_TYPE = 0x807B - VIEWPORT = 0x0BA2 - ZOOM_X = 0x0D16 - ZOOM_Y = 0x0D17 - - COLOR_ARRAY_POINTER = 0x8090 - EDGE_FLAG_ARRAY_POINTER = 0x8093 - FEEDBACK_BUFFER_POINTER = 0x0DF0 - INDEX_ARRAY_POINTER = 0x8091 - NORMAL_ARRAY_POINTER = 0x808F - SELECTION_BUFFER_POINTER = 0x0DF3 - TEXTURE_COORD_ARRAY_POINTER = 0x8092 - VERTEX_ARRAY_POINTER = 0x808E - - TEXTURE_ALPHA_SIZE = 0x805F - TEXTURE_BLUE_SIZE = 0x805E - TEXTURE_BORDER = 0x1005 - TEXTURE_BORDER_COLOR = 0x1004 - TEXTURE_COMPONENTS = 0x1003 - TEXTURE_GREEN_SIZE = 0x805D - TEXTURE_HEIGHT = 0x1001 - TEXTURE_INTENSITY_SIZE = 0x8061 - TEXTURE_INTERNAL_FORMAT = 0x1003 - TEXTURE_LUMINANCE_SIZE = 0x8060 - TEXTURE_MAG_FILTER = 0x2800 - TEXTURE_MIN_FILTER = 0x2801 - TEXTURE_PRIORITY = 0x8066 - TEXTURE_RED_SIZE = 0x805C - TEXTURE_RESIDENT = 0x8067 - TEXTURE_WIDTH = 0x1000 - TEXTURE_WRAP_S = 0x2802 - TEXTURE_WRAP_T = 0x2803 - - DONT_CARE = 0x1100 - FASTEST = 0x1101 - NICEST = 0x1102 - - TEXTURE_COMPRESSION_HINT = 0x84EF - - C3F_V3F = 0x2A24 - C4F_N3F_V3F = 0x2A26 - C4UB_V2F = 0x2A22 - C4UB_V3F = 0x2A23 - N3F_V3F = 0x2A25 - T2F_C3F_V3F = 0x2A2A - T2F_C4F_N3F_V3F = 0x2A2C - T2F_C4UB_V3F = 0x2A29 - T2F_N3F_V3F = 0x2A2B - T2F_V3F = 0x2A27 - T4F_C4F_N3F_V4F = 0x2A2D - T4F_V4F = 0x2A28 - V2F = 0x2A20 - V3F = 0x2A21 - - MODULATE = 0x2100 - REPLACE = 0x1E01 - - SEPARATE_SPECULAR_COLOR = 0x81FA - SINGLE_COLOR = 0x81F9 - - CONSTANT_ATTENUATION = 0x1207 - LINEAR_ATTENUATION = 0x1208 - POSITION = 0x1203 - QUADRATIC_ATTENUATION = 0x1209 - SPOT_CUTOFF = 0x1206 - SPOT_DIRECTION = 0x1204 - SPOT_EXPONENT = 0x1205 - - COMPILE = 0x1300 - COMPILE_AND_EXECUTE = 0x1301 - - AND = 0x1501 - AND_INVERTED = 0x1504 - AND_REVERSE = 0x1502 - CLEAR = 0x1500 - COPY = 0x1503 - COPY_INVERTED = 0x150C - EQUIV = 0x1509 - INVERT = 0x150A - NAND = 0x150E - NOOP = 0x1505 - NOR = 0x1508 - OR = 0x1507 - OR_INVERTED = 0x150D - OR_REVERSE = 0x150B - SET = 0x150F - XOR = 0x1506 - - COLOR_INDEXES = 0x1603 - SHININESS = 0x1601 - - MODELVIEW = 0x1700 - PROJECTION = 0x1701 - TEXTURE = 0x1702 - - LINE = 0x1B01 - POINT = 0x1B00 - - FILL = 0x1B02 - - COLOR = 0x1800 - DEPTH = 0x1801 - STENCIL = 0x1802 - - ALPHA = 0x1906 - BLUE = 0x1905 - COLOR_INDEX = 0x1900 - DEPTH_COMPONENT = 0x1902 - GREEN = 0x1904 - LUMINANCE = 0x1909 - LUMINANCE_ALPHA = 0x190A - RED = 0x1903 - RGB = 0x1907 - RGBA = 0x1908 - STENCIL_INDEX = 0x1901 - - ALPHA12 = 0x803D - ALPHA16 = 0x803E - ALPHA4 = 0x803B - ALPHA8 = 0x803C - INTENSITY = 0x8049 - INTENSITY12 = 0x804C - INTENSITY16 = 0x804D - INTENSITY4 = 0x804A - INTENSITY8 = 0x804B - LUMINANCE12 = 0x8041 - LUMINANCE12_ALPHA12 = 0x8047 - LUMINANCE12_ALPHA4 = 0x8046 - LUMINANCE16 = 0x8042 - LUMINANCE16_ALPHA16 = 0x8048 - LUMINANCE4 = 0x803F - LUMINANCE4_ALPHA4 = 0x8043 - LUMINANCE6_ALPHA2 = 0x8044 - LUMINANCE8 = 0x8040 - LUMINANCE8_ALPHA8 = 0x8045 - R3_G3_B2 = 0x2A10 - RGB10 = 0x8052 - RGB10_A2 = 0x8059 - RGB12 = 0x8053 - RGB16 = 0x8054 - RGB4 = 0x804F - RGB5 = 0x8050 - RGB5_A1 = 0x8057 - RGB8 = 0x8051 - RGBA12 = 0x805A - RGBA16 = 0x805B - RGBA2 = 0x8055 - RGBA4 = 0x8056 - RGBA8 = 0x8058 - - PACK_IMAGE_HEIGHT = 0x806C - PACK_SKIP_IMAGES = 0x806B - UNPACK_IMAGE_HEIGHT = 0x806E - UNPACK_SKIP_IMAGES = 0x806D - - BITMAP = 0x1A00 - UNSIGNED_BYTE_3_3_2 = 0x8032 - UNSIGNED_INT_10_10_10_2 = 0x8036 - UNSIGNED_INT_8_8_8_8 = 0x8035 - UNSIGNED_SHORT_4_4_4_4 = 0x8033 - UNSIGNED_SHORT_5_5_5_1 = 0x8034 - - LINES = 0x0001 - LINE_LOOP = 0x0002 - LINE_STRIP = 0x0003 - POINTS = 0x0000 - POLYGON = 0x0009 - QUADS = 0x0007 - QUAD_STRIP = 0x0008 - TRIANGLES = 0x0004 - TRIANGLE_FAN = 0x0006 - TRIANGLE_STRIP = 0x0005 - - FEEDBACK = 0x1C01 - RENDER = 0x1C00 - SELECT = 0x1C02 - - FLAT = 0x1D00 - SMOOTH = 0x1D01 - - DECR = 0x1E03 - INCR = 0x1E02 - KEEP = 0x1E00 - - EXTENSIONS = 0x1F03 - RENDERER = 0x1F01 - VENDOR = 0x1F00 - VERSION = 0x1F02 - - S = 0x2000 - T = 0x2001 - R = 0x2002 - Q = 0x2003 - - DECAL = 0x2101 - - TEXTURE_ENV_COLOR = 0x2201 - TEXTURE_ENV_MODE = 0x2200 - - TEXTURE_ENV = 0x2300 - - EYE_LINEAR = 0x2400 - OBJECT_LINEAR = 0x2401 - SPHERE_MAP = 0x2402 - - EYE_PLANE = 0x2502 - OBJECT_PLANE = 0x2501 - TEXTURE_GEN_MODE = 0x2500 - - NEAREST = 0x2600 - - LINEAR_MIPMAP_LINEAR = 0x2703 - LINEAR_MIPMAP_NEAREST = 0x2701 - NEAREST_MIPMAP_LINEAR = 0x2702 - NEAREST_MIPMAP_NEAREST = 0x2700 - - TEXTURE_WRAP_R = 0x8072 - - PROXY_TEXTURE_1D = 0x8063 - PROXY_TEXTURE_2D = 0x8064 - PROXY_TEXTURE_3D = 0x8070 - TEXTURE_3D = 0x806F - TEXTURE_BASE_LEVEL = 0x813C - TEXTURE_MAX_LEVEL = 0x813D - TEXTURE_MAX_LOD = 0x813B - TEXTURE_MIN_LOD = 0x813A - - CLAMP = 0x2900 - CLAMP_TO_BORDER = 0x812D - CLAMP_TO_EDGE = 0x812F - REPEAT = 0x2901 - - RESCALE_NORMAL = 0x803A - TEXTURE_DEPTH = 0x8071 - MAX_3D_TEXTURE_SIZE = 0x8073 - MULTISAMPLE = 0x809D - SAMPLE_ALPHA_TO_COVERAGE = 0x809E - SAMPLE_ALPHA_TO_ONE = 0x809F - SAMPLE_COVERAGE = 0x80A0 - SAMPLE_BUFFERS = 0x80A8 - SAMPLES = 0x80A9 - SAMPLE_COVERAGE_VALUE = 0x80AA - SAMPLE_COVERAGE_INVERT = 0x80AB - BGR = 0x80E0 - BGRA = 0x80E1 - MAX_ELEMENTS_VERTICES = 0x80E8 - MAX_ELEMENTS_INDICES = 0x80E9 - UNSIGNED_BYTE_2_3_3_REV = 0x8362 - UNSIGNED_SHORT_5_6_5 = 0x8363 - UNSIGNED_SHORT_5_6_5_REV = 0x8364 - UNSIGNED_SHORT_4_4_4_4_REV = 0x8365 - UNSIGNED_SHORT_1_5_5_5_REV = 0x8366 - UNSIGNED_INT_8_8_8_8_REV = 0x8367 - UNSIGNED_INT_2_10_10_10_REV = 0x8368 - TEXTURE0 = 0x84C0 - TEXTURE1 = 0x84C1 - TEXTURE2 = 0x84C2 - TEXTURE3 = 0x84C3 - TEXTURE4 = 0x84C4 - TEXTURE5 = 0x84C5 - TEXTURE6 = 0x84C6 - TEXTURE7 = 0x84C7 - TEXTURE8 = 0x84C8 - TEXTURE9 = 0x84C9 - TEXTURE10 = 0x84CA - TEXTURE11 = 0x84CB - TEXTURE12 = 0x84CC - TEXTURE13 = 0x84CD - TEXTURE14 = 0x84CE - TEXTURE15 = 0x84CF - TEXTURE16 = 0x84D0 - TEXTURE17 = 0x84D1 - TEXTURE18 = 0x84D2 - TEXTURE19 = 0x84D3 - TEXTURE20 = 0x84D4 - TEXTURE21 = 0x84D5 - TEXTURE22 = 0x84D6 - TEXTURE23 = 0x84D7 - TEXTURE24 = 0x84D8 - TEXTURE25 = 0x84D9 - TEXTURE26 = 0x84DA - TEXTURE27 = 0x84DB - TEXTURE28 = 0x84DC - TEXTURE29 = 0x84DD - TEXTURE30 = 0x84DE - TEXTURE31 = 0x84DF - ACTIVE_TEXTURE = 0x84E0 - CLIENT_ACTIVE_TEXTURE = 0x84E1 - MAX_TEXTURE_UNITS = 0x84E2 - TRANSPOSE_MODELVIEW_MATRIX = 0x84E3 - TRANSPOSE_PROJECTION_MATRIX = 0x84E4 - TRANSPOSE_TEXTURE_MATRIX = 0x84E5 - TRANSPOSE_COLOR_MATRIX = 0x84E6 - SUBTRACT = 0x84E7 - COMPRESSED_ALPHA = 0x84E9 - COMPRESSED_LUMINANCE = 0x84EA - COMPRESSED_LUMINANCE_ALPHA = 0x84EB - COMPRESSED_INTENSITY = 0x84EC - COMPRESSED_RGB = 0x84ED - COMPRESSED_RGBA = 0x84EE - NORMAL_MAP = 0x8511 - REFLECTION_MAP = 0x8512 - TEXTURE_CUBE_MAP = 0x8513 - TEXTURE_BINDING_CUBE_MAP = 0x8514 - TEXTURE_CUBE_MAP_POSITIVE_X = 0x8515 - TEXTURE_CUBE_MAP_NEGATIVE_X = 0x8516 - TEXTURE_CUBE_MAP_POSITIVE_Y = 0x8517 - TEXTURE_CUBE_MAP_NEGATIVE_Y = 0x8518 - TEXTURE_CUBE_MAP_POSITIVE_Z = 0x8519 - TEXTURE_CUBE_MAP_NEGATIVE_Z = 0x851A - PROXY_TEXTURE_CUBE_MAP = 0x851B - MAX_CUBE_MAP_TEXTURE_SIZE = 0x851C - COMBINE = 0x8570 - COMBINE_RGB = 0x8571 - COMBINE_ALPHA = 0x8572 - RGB_SCALE = 0x8573 - ADD_SIGNED = 0x8574 - INTERPOLATE = 0x8575 - CONSTANT = 0x8576 - PRIMARY_COLOR = 0x8577 - PREVIOUS = 0x8578 - SOURCE0_RGB = 0x8580 - SOURCE1_RGB = 0x8581 - SOURCE2_RGB = 0x8582 - SOURCE0_ALPHA = 0x8588 - SOURCE1_ALPHA = 0x8589 - SOURCE2_ALPHA = 0x858A - OPERAND0_RGB = 0x8590 - OPERAND1_RGB = 0x8591 - OPERAND2_RGB = 0x8592 - OPERAND0_ALPHA = 0x8598 - OPERAND1_ALPHA = 0x8599 - OPERAND2_ALPHA = 0x859A - TEXTURE_COMPRESSED_IMAGE_SIZE = 0x86A0 - TEXTURE_COMPRESSED = 0x86A1 - NUM_COMPRESSED_TEXTURE_FORMATS = 0x86A2 - COMPRESSED_TEXTURE_FORMATS = 0x86A3 - DOT3_RGB = 0x86AE - DOT3_RGBA = 0x86AF -) - -// https://www.opengl.org/sdk/docs/man2/xhtml/glViewport.xml -func (gl *GL) Viewport(x, y, width, height int) { - C.gl1_3_glViewport(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// DepthRange specifies the mapping of depth values from normalized device -// coordinates to window coordinates. -// -// Parameter nearVal specifies the mapping of the near clipping plane to window -// coordinates (defaults to 0), while farVal specifies the mapping of the far -// clipping plane to window coordinates (defaults to 1). -// -// After clipping and division by w, depth coordinates range from -1 to 1, -// corresponding to the near and far clipping planes. DepthRange specifies a -// linear mapping of the normalized depth coordinates in this range to window -// depth coordinates. Regardless of the actual depth buffer implementation, -// window coordinate depth values are treated as though they range from 0 through 1 -// (like color components). Thus, the values accepted by DepthRange are both -// clamped to this range before they are accepted. -// -// The default setting of (0, 1) maps the near plane to 0 and the far plane to 1. -// With this mapping, the depth buffer range is fully utilized. -// -// It is not necessary that nearVal be less than farVal. Reverse mappings such as -// nearVal 1, and farVal 0 are acceptable. -// -// GL.INVALID_OPERATION is generated if DepthRange is executed between the -// execution of Begin and the corresponding execution of End. -func (gl *GL) DepthRange(nearVal, farVal float64) { - C.gl1_3_glDepthRange(gl.funcs, C.GLdouble(nearVal), C.GLdouble(farVal)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIsEnabled.xml -func (gl *GL) IsEnabled(cap glbase.Enum) bool { - glresult := C.gl1_3_glIsEnabled(gl.funcs, C.GLenum(cap)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexLevelParameteriv.xml -func (gl *GL) GetTexLevelParameteriv(target glbase.Enum, level int, pname glbase.Enum, params []int32) { - C.gl1_3_glGetTexLevelParameteriv(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexLevelParameterfv.xml -func (gl *GL) GetTexLevelParameterfv(target glbase.Enum, level int, pname glbase.Enum, params []float32) { - C.gl1_3_glGetTexLevelParameterfv(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexParameteriv.xml -func (gl *GL) GetTexParameteriv(target, pname glbase.Enum, params []int32) { - C.gl1_3_glGetTexParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexParameterfv.xml -func (gl *GL) GetTexParameterfv(target, pname glbase.Enum, params []float32) { - C.gl1_3_glGetTexParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexImage.xml -func (gl *GL) GetTexImage(target glbase.Enum, level int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl1_3_glGetTexImage(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetIntegerv.xml -func (gl *GL) GetIntegerv(pname glbase.Enum, params []int32) { - C.gl1_3_glGetIntegerv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetFloatv.xml -func (gl *GL) GetFloatv(pname glbase.Enum, params []float32) { - C.gl1_3_glGetFloatv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetError.xml -func (gl *GL) GetError() glbase.Enum { - glresult := C.gl1_3_glGetError(gl.funcs) - return glbase.Enum(glresult) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetDoublev.xml -func (gl *GL) GetDoublev(pname glbase.Enum, params []float64) { - C.gl1_3_glGetDoublev(gl.funcs, C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetBooleanv.xml -func (gl *GL) GetBooleanv(pname glbase.Enum, params []bool) { - C.gl1_3_glGetBooleanv(gl.funcs, C.GLenum(pname), (*C.GLboolean)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glReadPixels.xml -func (gl *GL) ReadPixels(x, y, width, height int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl1_3_glReadPixels(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glReadBuffer.xml -func (gl *GL) ReadBuffer(mode glbase.Enum) { - C.gl1_3_glReadBuffer(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPixelStorei.xml -func (gl *GL) PixelStorei(pname glbase.Enum, param int32) { - C.gl1_3_glPixelStorei(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPixelStoref.xml -func (gl *GL) PixelStoref(pname glbase.Enum, param float32) { - C.gl1_3_glPixelStoref(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDepthFunc.xml -func (gl *GL) DepthFunc(glfunc glbase.Enum) { - C.gl1_3_glDepthFunc(gl.funcs, C.GLenum(glfunc)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glStencilOp.xml -func (gl *GL) StencilOp(fail, zfail, zpass glbase.Enum) { - C.gl1_3_glStencilOp(gl.funcs, C.GLenum(fail), C.GLenum(zfail), C.GLenum(zpass)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glStencilFunc.xml -func (gl *GL) StencilFunc(glfunc glbase.Enum, ref int32, mask uint32) { - C.gl1_3_glStencilFunc(gl.funcs, C.GLenum(glfunc), C.GLint(ref), C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLogicOp.xml -func (gl *GL) LogicOp(opcode glbase.Enum) { - C.gl1_3_glLogicOp(gl.funcs, C.GLenum(opcode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glBlendFunc.xml -func (gl *GL) BlendFunc(sfactor, dfactor glbase.Enum) { - C.gl1_3_glBlendFunc(gl.funcs, C.GLenum(sfactor), C.GLenum(dfactor)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFlush.xml -func (gl *GL) Flush() { - C.gl1_3_glFlush(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFinish.xml -func (gl *GL) Finish() { - C.gl1_3_glFinish(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEnable.xml -func (gl *GL) Enable(cap glbase.Enum) { - C.gl1_3_glEnable(gl.funcs, C.GLenum(cap)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDisable.xml -func (gl *GL) Disable(cap glbase.Enum) { - C.gl1_3_glDisable(gl.funcs, C.GLenum(cap)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDepthMask.xml -func (gl *GL) DepthMask(flag bool) { - C.gl1_3_glDepthMask(gl.funcs, *(*C.GLboolean)(unsafe.Pointer(&flag))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColorMask.xml -func (gl *GL) ColorMask(red, green, blue, alpha bool) { - C.gl1_3_glColorMask(gl.funcs, *(*C.GLboolean)(unsafe.Pointer(&red)), *(*C.GLboolean)(unsafe.Pointer(&green)), *(*C.GLboolean)(unsafe.Pointer(&blue)), *(*C.GLboolean)(unsafe.Pointer(&alpha))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glStencilMask.xml -func (gl *GL) StencilMask(mask uint32) { - C.gl1_3_glStencilMask(gl.funcs, C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glClearDepth.xml -func (gl *GL) ClearDepth(depth float64) { - C.gl1_3_glClearDepth(gl.funcs, C.GLdouble(depth)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glClearStencil.xml -func (gl *GL) ClearStencil(s int32) { - C.gl1_3_glClearStencil(gl.funcs, C.GLint(s)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glClearColor.xml -func (gl *GL) ClearColor(red, green, blue, alpha float32) { - C.gl1_3_glClearColor(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glClear.xml -func (gl *GL) Clear(mask glbase.Bitfield) { - C.gl1_3_glClear(gl.funcs, C.GLbitfield(mask)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDrawBuffer.xml -func (gl *GL) DrawBuffer(mode glbase.Enum) { - C.gl1_3_glDrawBuffer(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexImage2D.xml -func (gl *GL) TexImage2D(target glbase.Enum, level int, internalFormat int32, width, height, border int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl1_3_glTexImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLint(border), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexImage1D.xml -func (gl *GL) TexImage1D(target glbase.Enum, level int, internalFormat int32, width, border int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl1_3_glTexImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(internalFormat), C.GLsizei(width), C.GLint(border), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexParameteriv.xml -func (gl *GL) TexParameteriv(target, pname glbase.Enum, params []int32) { - C.gl1_3_glTexParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexParameteri.xml -func (gl *GL) TexParameteri(target, pname glbase.Enum, param int32) { - C.gl1_3_glTexParameteri(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexParameterfv.xml -func (gl *GL) TexParameterfv(target, pname glbase.Enum, params []float32) { - C.gl1_3_glTexParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexParameterf.xml -func (gl *GL) TexParameterf(target, pname glbase.Enum, param float32) { - C.gl1_3_glTexParameterf(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glScissor.xml -func (gl *GL) Scissor(x, y, width, height int) { - C.gl1_3_glScissor(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPolygonMode.xml -func (gl *GL) PolygonMode(face, mode glbase.Enum) { - C.gl1_3_glPolygonMode(gl.funcs, C.GLenum(face), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPointSize.xml -func (gl *GL) PointSize(size float32) { - C.gl1_3_glPointSize(gl.funcs, C.GLfloat(size)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLineWidth.xml -func (gl *GL) LineWidth(width float32) { - C.gl1_3_glLineWidth(gl.funcs, C.GLfloat(width)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glHint.xml -func (gl *GL) Hint(target, mode glbase.Enum) { - C.gl1_3_glHint(gl.funcs, C.GLenum(target), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFrontFace.xml -func (gl *GL) FrontFace(mode glbase.Enum) { - C.gl1_3_glFrontFace(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCullFace.xml -func (gl *GL) CullFace(mode glbase.Enum) { - C.gl1_3_glCullFace(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexubv.xml -func (gl *GL) Indexubv(c []uint8) { - C.gl1_3_glIndexubv(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexub.xml -func (gl *GL) Indexub(c uint8) { - C.gl1_3_glIndexub(gl.funcs, C.GLubyte(c)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIsTexture.xml -func (gl *GL) IsTexture(texture glbase.Texture) bool { - glresult := C.gl1_3_glIsTexture(gl.funcs, C.GLuint(texture)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// GenTextures returns n texture names in textures. There is no guarantee -// that the names form a contiguous set of integers; however, it is -// guaranteed that none of the returned names was in use immediately before -// the call to GenTextures. -// -// The generated textures have no dimensionality; they assume the -// dimensionality of the texture target to which they are first bound (see -// BindTexture). -// -// Texture names returned by a call to GenTextures are not returned by -// subsequent calls, unless they are first deleted with DeleteTextures. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// GenTextures is available in GL version 2.0 or greater. -func (gl *GL) GenTextures(n int) []glbase.Texture { - if n == 0 { - return nil - } - textures := make([]glbase.Texture, n) - C.gl1_3_glGenTextures(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0]))) - return textures -} - -// DeleteTextures deletes the textures objects whose names are stored -// in the textures slice. After a texture is deleted, it has no contents or -// dimensionality, and its name is free for reuse (for example by -// GenTextures). If a texture that is currently bound is deleted, the binding -// reverts to 0 (the default texture). -// -// DeleteTextures silently ignores 0's and names that do not correspond to -// existing textures. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// DeleteTextures is available in GL version 2.0 or greater. -func (gl *GL) DeleteTextures(textures []glbase.Texture) { - n := len(textures) - if n == 0 { - return - } - C.gl1_3_glDeleteTextures(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glBindTexture.xml -func (gl *GL) BindTexture(target glbase.Enum, texture glbase.Texture) { - C.gl1_3_glBindTexture(gl.funcs, C.GLenum(target), C.GLuint(texture)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexSubImage2D.xml -func (gl *GL) TexSubImage2D(target glbase.Enum, level, xoffset, yoffset, width, height int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl1_3_glTexSubImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexSubImage1D.xml -func (gl *GL) TexSubImage1D(target glbase.Enum, level, xoffset, width int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl1_3_glTexSubImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLsizei(width), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyTexSubImage2D.xml -func (gl *GL) CopyTexSubImage2D(target glbase.Enum, level, xoffset, yoffset, x, y, width, height int) { - C.gl1_3_glCopyTexSubImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyTexSubImage1D.xml -func (gl *GL) CopyTexSubImage1D(target glbase.Enum, level, xoffset, x, y, width int) { - C.gl1_3_glCopyTexSubImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(x), C.GLint(y), C.GLsizei(width)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyTexImage2D.xml -func (gl *GL) CopyTexImage2D(target glbase.Enum, level int, internalFormat glbase.Enum, x, y, width, height, border int) { - C.gl1_3_glCopyTexImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height), C.GLint(border)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyTexImage1D.xml -func (gl *GL) CopyTexImage1D(target glbase.Enum, level int, internalFormat glbase.Enum, x, y, width, border int) { - C.gl1_3_glCopyTexImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLint(border)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPolygonOffset.xml -func (gl *GL) PolygonOffset(factor, units float32) { - C.gl1_3_glPolygonOffset(gl.funcs, C.GLfloat(factor), C.GLfloat(units)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDrawElements.xml -func (gl *GL) DrawElements(mode glbase.Enum, count int, gltype glbase.Enum, indices interface{}) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl1_3_glDrawElements(gl.funcs, C.GLenum(mode), C.GLsizei(count), C.GLenum(gltype), indices_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDrawArrays.xml -func (gl *GL) DrawArrays(mode glbase.Enum, first, count int) { - C.gl1_3_glDrawArrays(gl.funcs, C.GLenum(mode), C.GLint(first), C.GLsizei(count)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyTexSubImage3D.xml -func (gl *GL) CopyTexSubImage3D(target glbase.Enum, level, xoffset, yoffset int, zoffset int32, x, y, width, height int) { - C.gl1_3_glCopyTexSubImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(zoffset), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexSubImage3D.xml -func (gl *GL) TexSubImage3D(target glbase.Enum, level, xoffset, yoffset int, zoffset int32, width, height int, depth int32, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl1_3_glTexSubImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(zoffset), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexImage3D.xml -func (gl *GL) TexImage3D(target glbase.Enum, level int, internalFormat int32, width, height int, depth int32, border int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl1_3_glTexImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLint(border), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDrawRangeElements.xml -func (gl *GL) DrawRangeElements(mode glbase.Enum, start, end uint32, count int, gltype glbase.Enum, indices interface{}) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl1_3_glDrawRangeElements(gl.funcs, C.GLenum(mode), C.GLuint(start), C.GLuint(end), C.GLsizei(count), C.GLenum(gltype), indices_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glBlendEquation.xml -func (gl *GL) BlendEquation(mode glbase.Enum) { - C.gl1_3_glBlendEquation(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glBlendColor.xml -func (gl *GL) BlendColor(red, green, blue, alpha float32) { - C.gl1_3_glBlendColor(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetCompressedTexImage.xml -func (gl *GL) GetCompressedTexImage(target glbase.Enum, level int, img interface{}) { - var img_ptr unsafe.Pointer - var img_v = reflect.ValueOf(img) - if img != nil && img_v.Kind() != reflect.Slice { - panic("parameter img must be a slice") - } - if img != nil { - img_ptr = unsafe.Pointer(img_v.Index(0).Addr().Pointer()) - } - C.gl1_3_glGetCompressedTexImage(gl.funcs, C.GLenum(target), C.GLint(level), img_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCompressedTexSubImage1D.xml -func (gl *GL) CompressedTexSubImage1D(target glbase.Enum, level, xoffset, width int, format glbase.Enum, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl1_3_glCompressedTexSubImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLsizei(width), C.GLenum(format), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCompressedTexSubImage2D.xml -func (gl *GL) CompressedTexSubImage2D(target glbase.Enum, level, xoffset, yoffset, width, height int, format glbase.Enum, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl1_3_glCompressedTexSubImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCompressedTexSubImage3D.xml -func (gl *GL) CompressedTexSubImage3D(target glbase.Enum, level, xoffset, yoffset int, zoffset int32, width, height int, depth int32, format glbase.Enum, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl1_3_glCompressedTexSubImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(zoffset), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLenum(format), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCompressedTexImage1D.xml -func (gl *GL) CompressedTexImage1D(target glbase.Enum, level int, internalFormat glbase.Enum, width, border, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl1_3_glCompressedTexImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLsizei(width), C.GLint(border), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCompressedTexImage2D.xml -func (gl *GL) CompressedTexImage2D(target glbase.Enum, level int, internalFormat glbase.Enum, width, height, border, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl1_3_glCompressedTexImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLint(border), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCompressedTexImage3D.xml -func (gl *GL) CompressedTexImage3D(target glbase.Enum, level int, internalFormat glbase.Enum, width, height int, depth int32, border, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl1_3_glCompressedTexImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLint(border), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSampleCoverage.xml -func (gl *GL) SampleCoverage(value float32, invert bool) { - C.gl1_3_glSampleCoverage(gl.funcs, C.GLfloat(value), *(*C.GLboolean)(unsafe.Pointer(&invert))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glActiveTexture.xml -func (gl *GL) ActiveTexture(texture glbase.Enum) { - C.gl1_3_glActiveTexture(gl.funcs, C.GLenum(texture)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTranslatef.xml -func (gl *GL) Translatef(x, y, z float32) { - C.gl1_3_glTranslatef(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTranslated.xml -func (gl *GL) Translated(x, y, z float64) { - C.gl1_3_glTranslated(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glScalef.xml -func (gl *GL) Scalef(x, y, z float32) { - C.gl1_3_glScalef(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glScaled.xml -func (gl *GL) Scaled(x, y, z float64) { - C.gl1_3_glScaled(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRotatef.xml -func (gl *GL) Rotatef(angle, x, y, z float32) { - C.gl1_3_glRotatef(gl.funcs, C.GLfloat(angle), C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRotated.xml -func (gl *GL) Rotated(angle, x, y, z float64) { - C.gl1_3_glRotated(gl.funcs, C.GLdouble(angle), C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPushMatrix.xml -func (gl *GL) PushMatrix() { - C.gl1_3_glPushMatrix(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPopMatrix.xml -func (gl *GL) PopMatrix() { - C.gl1_3_glPopMatrix(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glOrtho.xml -func (gl *GL) Ortho(left, right, bottom, top, zNear, zFar float64) { - C.gl1_3_glOrtho(gl.funcs, C.GLdouble(left), C.GLdouble(right), C.GLdouble(bottom), C.GLdouble(top), C.GLdouble(zNear), C.GLdouble(zFar)) -} - -// MultMatrixd multiplies the current matrix with the provided matrix. -// -// The m parameter must hold 16 consecutive elements of a 4x4 column-major matrix. -// -// The current matrix is determined by the current matrix mode (see -// MatrixMode). It is either the projection matrix, modelview matrix, or the -// texture matrix. -// -// For example, if the current matrix is C and the coordinates to be transformed -// are v = (v[0], v[1], v[2], v[3]), then the current transformation is C × v, or -// -// c[0] c[4] c[8] c[12] v[0] -// c[1] c[5] c[9] c[13] v[1] -// c[2] c[6] c[10] c[14] X v[2] -// c[3] c[7] c[11] c[15] v[3] -// -// Calling MultMatrix with an argument of m = m[0], m[1], ..., m[15] -// replaces the current transformation with (C X M) x v, or -// -// c[0] c[4] c[8] c[12] m[0] m[4] m[8] m[12] v[0] -// c[1] c[5] c[9] c[13] m[1] m[5] m[9] m[13] v[1] -// c[2] c[6] c[10] c[14] X m[2] m[6] m[10] m[14] X v[2] -// c[3] c[7] c[11] c[15] m[3] m[7] m[11] m[15] v[3] -// -// Where 'X' denotes matrix multiplication, and v is represented as a 4x1 matrix. -// -// While the elements of the matrix may be specified with single or double -// precision, the GL may store or operate on these values in less-than-single -// precision. -// -// In many computer languages, 4×4 arrays are represented in row-major -// order. The transformations just described represent these matrices in -// column-major order. The order of the multiplication is important. For -// example, if the current transformation is a rotation, and MultMatrix is -// called with a translation matrix, the translation is done directly on the -// coordinates to be transformed, while the rotation is done on the results -// of that translation. -// -// GL.INVALID_OPERATION is generated if MultMatrix is executed between the -// execution of Begin and the corresponding execution of End. -func (gl *GL) MultMatrixd(m []float64) { - if len(m) != 16 { - panic("parameter m must have length 16 for the 4x4 matrix") - } - C.gl1_3_glMultMatrixd(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&m[0]))) -} - -// MultMatrixf multiplies the current matrix with the provided matrix. -// -// The m parameter must hold 16 consecutive elements of a 4x4 column-major matrix. -// -// The current matrix is determined by the current matrix mode (see -// MatrixMode). It is either the projection matrix, modelview matrix, or the -// texture matrix. -// -// For example, if the current matrix is C and the coordinates to be transformed -// are v = (v[0], v[1], v[2], v[3]), then the current transformation is C × v, or -// -// c[0] c[4] c[8] c[12] v[0] -// c[1] c[5] c[9] c[13] v[1] -// c[2] c[6] c[10] c[14] X v[2] -// c[3] c[7] c[11] c[15] v[3] -// -// Calling MultMatrix with an argument of m = m[0], m[1], ..., m[15] -// replaces the current transformation with (C X M) x v, or -// -// c[0] c[4] c[8] c[12] m[0] m[4] m[8] m[12] v[0] -// c[1] c[5] c[9] c[13] m[1] m[5] m[9] m[13] v[1] -// c[2] c[6] c[10] c[14] X m[2] m[6] m[10] m[14] X v[2] -// c[3] c[7] c[11] c[15] m[3] m[7] m[11] m[15] v[3] -// -// Where 'X' denotes matrix multiplication, and v is represented as a 4x1 matrix. -// -// While the elements of the matrix may be specified with single or double -// precision, the GL may store or operate on these values in less-than-single -// precision. -// -// In many computer languages, 4×4 arrays are represented in row-major -// order. The transformations just described represent these matrices in -// column-major order. The order of the multiplication is important. For -// example, if the current transformation is a rotation, and MultMatrix is -// called with a translation matrix, the translation is done directly on the -// coordinates to be transformed, while the rotation is done on the results -// of that translation. -// -// GL.INVALID_OPERATION is generated if MultMatrix is executed between the -// execution of Begin and the corresponding execution of End. -func (gl *GL) MultMatrixf(m []float32) { - if len(m) != 16 { - panic("parameter m must have length 16 for the 4x4 matrix") - } - C.gl1_3_glMultMatrixf(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMatrixMode.xml -func (gl *GL) MatrixMode(mode glbase.Enum) { - C.gl1_3_glMatrixMode(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLoadMatrixd.xml -func (gl *GL) LoadMatrixd(m []float64) { - C.gl1_3_glLoadMatrixd(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLoadMatrixf.xml -func (gl *GL) LoadMatrixf(m []float32) { - C.gl1_3_glLoadMatrixf(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLoadIdentity.xml -func (gl *GL) LoadIdentity() { - C.gl1_3_glLoadIdentity(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFrustum.xml -func (gl *GL) Frustum(left, right, bottom, top, zNear, zFar float64) { - C.gl1_3_glFrustum(gl.funcs, C.GLdouble(left), C.GLdouble(right), C.GLdouble(bottom), C.GLdouble(top), C.GLdouble(zNear), C.GLdouble(zFar)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIsList.xml -func (gl *GL) IsList(list uint32) bool { - glresult := C.gl1_3_glIsList(gl.funcs, C.GLuint(list)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexGeniv.xml -func (gl *GL) GetTexGeniv(coord, pname glbase.Enum, params []int32) { - C.gl1_3_glGetTexGeniv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexGenfv.xml -func (gl *GL) GetTexGenfv(coord, pname glbase.Enum, params []float32) { - C.gl1_3_glGetTexGenfv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexGendv.xml -func (gl *GL) GetTexGendv(coord, pname glbase.Enum, params []float64) { - C.gl1_3_glGetTexGendv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexEnviv.xml -func (gl *GL) GetTexEnviv(target, pname glbase.Enum, params []int32) { - C.gl1_3_glGetTexEnviv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexEnvfv.xml -func (gl *GL) GetTexEnvfv(target, pname glbase.Enum, params []float32) { - C.gl1_3_glGetTexEnvfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetPolygonStipple.xml -func (gl *GL) GetPolygonStipple(mask []uint8) { - C.gl1_3_glGetPolygonStipple(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&mask[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetPixelMapusv.xml -func (gl *GL) GetPixelMapusv(glmap glbase.Enum, values []uint16) { - C.gl1_3_glGetPixelMapusv(gl.funcs, C.GLenum(glmap), (*C.GLushort)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetPixelMapuiv.xml -func (gl *GL) GetPixelMapuiv(glmap glbase.Enum, values []uint32) { - C.gl1_3_glGetPixelMapuiv(gl.funcs, C.GLenum(glmap), (*C.GLuint)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetPixelMapfv.xml -func (gl *GL) GetPixelMapfv(glmap glbase.Enum, values []float32) { - C.gl1_3_glGetPixelMapfv(gl.funcs, C.GLenum(glmap), (*C.GLfloat)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetMaterialiv.xml -func (gl *GL) GetMaterialiv(face, pname glbase.Enum, params []int32) { - C.gl1_3_glGetMaterialiv(gl.funcs, C.GLenum(face), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetMaterialfv.xml -func (gl *GL) GetMaterialfv(face, pname glbase.Enum, params []float32) { - C.gl1_3_glGetMaterialfv(gl.funcs, C.GLenum(face), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetMapiv.xml -func (gl *GL) GetMapiv(target, query glbase.Enum, v []int32) { - C.gl1_3_glGetMapiv(gl.funcs, C.GLenum(target), C.GLenum(query), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetMapfv.xml -func (gl *GL) GetMapfv(target, query glbase.Enum, v []float32) { - C.gl1_3_glGetMapfv(gl.funcs, C.GLenum(target), C.GLenum(query), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetMapdv.xml -func (gl *GL) GetMapdv(target, query glbase.Enum, v []float64) { - C.gl1_3_glGetMapdv(gl.funcs, C.GLenum(target), C.GLenum(query), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetLightiv.xml -func (gl *GL) GetLightiv(light, pname glbase.Enum, params []int32) { - C.gl1_3_glGetLightiv(gl.funcs, C.GLenum(light), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetLightfv.xml -func (gl *GL) GetLightfv(light, pname glbase.Enum, params []float32) { - C.gl1_3_glGetLightfv(gl.funcs, C.GLenum(light), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetClipPlane.xml -func (gl *GL) GetClipPlane(plane glbase.Enum, equation []float64) { - C.gl1_3_glGetClipPlane(gl.funcs, C.GLenum(plane), (*C.GLdouble)(unsafe.Pointer(&equation[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDrawPixels.xml -func (gl *GL) DrawPixels(width, height int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl1_3_glDrawPixels(gl.funcs, C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyPixels.xml -func (gl *GL) CopyPixels(x, y, width, height int, gltype glbase.Enum) { - C.gl1_3_glCopyPixels(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height), C.GLenum(gltype)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPixelMapusv.xml -func (gl *GL) PixelMapusv(glmap glbase.Enum, mapsize int32, values []uint16) { - C.gl1_3_glPixelMapusv(gl.funcs, C.GLenum(glmap), C.GLint(mapsize), (*C.GLushort)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPixelMapuiv.xml -func (gl *GL) PixelMapuiv(glmap glbase.Enum, mapsize int32, values []uint32) { - C.gl1_3_glPixelMapuiv(gl.funcs, C.GLenum(glmap), C.GLint(mapsize), (*C.GLuint)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPixelMapfv.xml -func (gl *GL) PixelMapfv(glmap glbase.Enum, mapsize int32, values []float32) { - C.gl1_3_glPixelMapfv(gl.funcs, C.GLenum(glmap), C.GLint(mapsize), (*C.GLfloat)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPixelTransferi.xml -func (gl *GL) PixelTransferi(pname glbase.Enum, param int32) { - C.gl1_3_glPixelTransferi(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPixelTransferf.xml -func (gl *GL) PixelTransferf(pname glbase.Enum, param float32) { - C.gl1_3_glPixelTransferf(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPixelZoom.xml -func (gl *GL) PixelZoom(xfactor, yfactor float32) { - C.gl1_3_glPixelZoom(gl.funcs, C.GLfloat(xfactor), C.GLfloat(yfactor)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glAlphaFunc.xml -func (gl *GL) AlphaFunc(glfunc glbase.Enum, ref float32) { - C.gl1_3_glAlphaFunc(gl.funcs, C.GLenum(glfunc), C.GLfloat(ref)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalPoint2.xml -func (gl *GL) EvalPoint2(i, j int32) { - C.gl1_3_glEvalPoint2(gl.funcs, C.GLint(i), C.GLint(j)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalMesh2.xml -func (gl *GL) EvalMesh2(mode glbase.Enum, i1, i2, j1, j2 int32) { - C.gl1_3_glEvalMesh2(gl.funcs, C.GLenum(mode), C.GLint(i1), C.GLint(i2), C.GLint(j1), C.GLint(j2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalPoint1.xml -func (gl *GL) EvalPoint1(i int32) { - C.gl1_3_glEvalPoint1(gl.funcs, C.GLint(i)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalMesh1.xml -func (gl *GL) EvalMesh1(mode glbase.Enum, i1, i2 int32) { - C.gl1_3_glEvalMesh1(gl.funcs, C.GLenum(mode), C.GLint(i1), C.GLint(i2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalCoord2fv.xml -func (gl *GL) EvalCoord2fv(u []float32) { - if len(u) != 2 { - panic("parameter u has incorrect length") - } - C.gl1_3_glEvalCoord2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&u[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalCoord2f.xml -func (gl *GL) EvalCoord2f(u, v float32) { - C.gl1_3_glEvalCoord2f(gl.funcs, C.GLfloat(u), C.GLfloat(v)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalCoord2dv.xml -func (gl *GL) EvalCoord2dv(u []float64) { - if len(u) != 2 { - panic("parameter u has incorrect length") - } - C.gl1_3_glEvalCoord2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&u[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalCoord2d.xml -func (gl *GL) EvalCoord2d(u, v float64) { - C.gl1_3_glEvalCoord2d(gl.funcs, C.GLdouble(u), C.GLdouble(v)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalCoord1fv.xml -func (gl *GL) EvalCoord1fv(u []float32) { - C.gl1_3_glEvalCoord1fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&u[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalCoord1f.xml -func (gl *GL) EvalCoord1f(u float32) { - C.gl1_3_glEvalCoord1f(gl.funcs, C.GLfloat(u)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalCoord1dv.xml -func (gl *GL) EvalCoord1dv(u []float64) { - C.gl1_3_glEvalCoord1dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&u[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalCoord1d.xml -func (gl *GL) EvalCoord1d(u float64) { - C.gl1_3_glEvalCoord1d(gl.funcs, C.GLdouble(u)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMapGrid2f.xml -func (gl *GL) MapGrid2f(un int32, u1, u2 float32, vn int32, v1, v2 float32) { - C.gl1_3_glMapGrid2f(gl.funcs, C.GLint(un), C.GLfloat(u1), C.GLfloat(u2), C.GLint(vn), C.GLfloat(v1), C.GLfloat(v2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMapGrid2d.xml -func (gl *GL) MapGrid2d(un int32, u1, u2 float64, vn int32, v1, v2 float64) { - C.gl1_3_glMapGrid2d(gl.funcs, C.GLint(un), C.GLdouble(u1), C.GLdouble(u2), C.GLint(vn), C.GLdouble(v1), C.GLdouble(v2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMapGrid1f.xml -func (gl *GL) MapGrid1f(un int32, u1, u2 float32) { - C.gl1_3_glMapGrid1f(gl.funcs, C.GLint(un), C.GLfloat(u1), C.GLfloat(u2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMapGrid1d.xml -func (gl *GL) MapGrid1d(un int32, u1, u2 float64) { - C.gl1_3_glMapGrid1d(gl.funcs, C.GLint(un), C.GLdouble(u1), C.GLdouble(u2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMap2f.xml -func (gl *GL) Map2f(target glbase.Enum, u1, u2 float32, ustride, uorder int32, v1, v2 float32, vstride, vorder int32, points []float32) { - C.gl1_3_glMap2f(gl.funcs, C.GLenum(target), C.GLfloat(u1), C.GLfloat(u2), C.GLint(ustride), C.GLint(uorder), C.GLfloat(v1), C.GLfloat(v2), C.GLint(vstride), C.GLint(vorder), (*C.GLfloat)(unsafe.Pointer(&points[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMap2d.xml -func (gl *GL) Map2d(target glbase.Enum, u1, u2 float64, ustride, uorder int32, v1, v2 float64, vstride, vorder int32, points []float64) { - C.gl1_3_glMap2d(gl.funcs, C.GLenum(target), C.GLdouble(u1), C.GLdouble(u2), C.GLint(ustride), C.GLint(uorder), C.GLdouble(v1), C.GLdouble(v2), C.GLint(vstride), C.GLint(vorder), (*C.GLdouble)(unsafe.Pointer(&points[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMap1f.xml -func (gl *GL) Map1f(target glbase.Enum, u1, u2 float32, stride, order int, points []float32) { - C.gl1_3_glMap1f(gl.funcs, C.GLenum(target), C.GLfloat(u1), C.GLfloat(u2), C.GLint(stride), C.GLint(order), (*C.GLfloat)(unsafe.Pointer(&points[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMap1d.xml -func (gl *GL) Map1d(target glbase.Enum, u1, u2 float64, stride, order int, points []float64) { - C.gl1_3_glMap1d(gl.funcs, C.GLenum(target), C.GLdouble(u1), C.GLdouble(u2), C.GLint(stride), C.GLint(order), (*C.GLdouble)(unsafe.Pointer(&points[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPushAttrib.xml -func (gl *GL) PushAttrib(mask glbase.Bitfield) { - C.gl1_3_glPushAttrib(gl.funcs, C.GLbitfield(mask)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPopAttrib.xml -func (gl *GL) PopAttrib() { - C.gl1_3_glPopAttrib(gl.funcs) -} - -// Accum executes an operation on the accumulation buffer. -// -// Parameter op defines the accumulation buffer operation (GL.ACCUM, GL.LOAD, -// GL.ADD, GL.MULT, or GL.RETURN) and specifies how the value parameter is -// used. -// -// The accumulation buffer is an extended-range color buffer. Images are not -// rendered into it. Rather, images rendered into one of the color buffers -// are added to the contents of the accumulation buffer after rendering. -// Effects such as antialiasing (of points, lines, and polygons), motion -// blur, and depth of field can be created by accumulating images generated -// with different transformation matrices. -// -// Each pixel in the accumulation buffer consists of red, green, blue, and -// alpha values. The number of bits per component in the accumulation buffer -// depends on the implementation. You can examine this number by calling -// GetIntegerv four times, with arguments GL.ACCUM_RED_BITS, -// GL.ACCUM_GREEN_BITS, GL.ACCUM_BLUE_BITS, and GL.ACCUM_ALPHA_BITS. -// Regardless of the number of bits per component, the range of values stored -// by each component is (-1, 1). The accumulation buffer pixels are mapped -// one-to-one with frame buffer pixels. -// -// All accumulation buffer operations are limited to the area of the current -// scissor box and applied identically to the red, green, blue, and alpha -// components of each pixel. If a Accum operation results in a value outside -// the range (-1, 1), the contents of an accumulation buffer pixel component -// are undefined. -// -// The operations are as follows: -// -// GL.ACCUM -// Obtains R, G, B, and A values from the buffer currently selected for -// reading (see ReadBuffer). Each component value is divided by 2 n - -// 1 , where n is the number of bits allocated to each color component -// in the currently selected buffer. The result is a floating-point -// value in the range 0 1 , which is multiplied by value and added to -// the corresponding pixel component in the accumulation buffer, -// thereby updating the accumulation buffer. -// -// GL.LOAD -// Similar to GL.ACCUM, except that the current value in the -// accumulation buffer is not used in the calculation of the new value. -// That is, the R, G, B, and A values from the currently selected -// buffer are divided by 2 n - 1 , multiplied by value, and then stored -// in the corresponding accumulation buffer cell, overwriting the -// current value. -// -// GL.ADD -// Adds value to each R, G, B, and A in the accumulation buffer. -// -// GL.MULT -// Multiplies each R, G, B, and A in the accumulation buffer by value -// and returns the scaled component to its corresponding accumulation -// buffer location. -// -// GL.RETURN -// Transfers accumulation buffer values to the color buffer or buffers -// currently selected for writing. Each R, G, B, and A component is -// multiplied by value, then multiplied by 2 n - 1 , clamped to the -// range 0 2 n - 1 , and stored in the corresponding display buffer -// cell. The only fragment operations that are applied to this transfer -// are pixel ownership, scissor, dithering, and color writemasks. -// -// To clear the accumulation buffer, call ClearAccum with R, G, B, and A -// values to set it to, then call Clear with the accumulation buffer -// enabled. -// -// Error GL.INVALID_ENUM is generated if op is not an accepted value. -// GL.INVALID_OPERATION is generated if there is no accumulation buffer. -// GL.INVALID_OPERATION is generated if Accum is executed between the -// execution of Begin and the corresponding execution of End. -func (gl *GL) Accum(op glbase.Enum, value float32) { - C.gl1_3_glAccum(gl.funcs, C.GLenum(op), C.GLfloat(value)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexMask.xml -func (gl *GL) IndexMask(mask uint32) { - C.gl1_3_glIndexMask(gl.funcs, C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glClearIndex.xml -func (gl *GL) ClearIndex(c float32) { - C.gl1_3_glClearIndex(gl.funcs, C.GLfloat(c)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glClearAccum.xml -func (gl *GL) ClearAccum(red, green, blue, alpha float32) { - C.gl1_3_glClearAccum(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPushName.xml -func (gl *GL) PushName(name uint32) { - C.gl1_3_glPushName(gl.funcs, C.GLuint(name)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPopName.xml -func (gl *GL) PopName() { - C.gl1_3_glPopName(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPassThrough.xml -func (gl *GL) PassThrough(token float32) { - C.gl1_3_glPassThrough(gl.funcs, C.GLfloat(token)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLoadName.xml -func (gl *GL) LoadName(name uint32) { - C.gl1_3_glLoadName(gl.funcs, C.GLuint(name)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glInitNames.xml -func (gl *GL) InitNames() { - C.gl1_3_glInitNames(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRenderMode.xml -func (gl *GL) RenderMode(mode glbase.Enum) int32 { - glresult := C.gl1_3_glRenderMode(gl.funcs, C.GLenum(mode)) - return int32(glresult) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSelectBuffer.xml -func (gl *GL) SelectBuffer(size int, buffer []glbase.Buffer) { - C.gl1_3_glSelectBuffer(gl.funcs, C.GLsizei(size), (*C.GLuint)(unsafe.Pointer(&buffer[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFeedbackBuffer.xml -func (gl *GL) FeedbackBuffer(size int, gltype glbase.Enum, buffer []float32) { - C.gl1_3_glFeedbackBuffer(gl.funcs, C.GLsizei(size), C.GLenum(gltype), (*C.GLfloat)(unsafe.Pointer(&buffer[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexGeniv.xml -func (gl *GL) TexGeniv(coord, pname glbase.Enum, params []int32) { - C.gl1_3_glTexGeniv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexGeni.xml -func (gl *GL) TexGeni(coord, pname glbase.Enum, param int32) { - C.gl1_3_glTexGeni(gl.funcs, C.GLenum(coord), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexGenfv.xml -func (gl *GL) TexGenfv(coord, pname glbase.Enum, params []float32) { - C.gl1_3_glTexGenfv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexGenf.xml -func (gl *GL) TexGenf(coord, pname glbase.Enum, param float32) { - C.gl1_3_glTexGenf(gl.funcs, C.GLenum(coord), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexGendv.xml -func (gl *GL) TexGendv(coord, pname glbase.Enum, params []float64) { - C.gl1_3_glTexGendv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexGend.xml -func (gl *GL) TexGend(coord, pname glbase.Enum, param float64) { - C.gl1_3_glTexGend(gl.funcs, C.GLenum(coord), C.GLenum(pname), C.GLdouble(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexEnviv.xml -func (gl *GL) TexEnviv(target, pname glbase.Enum, params []int32) { - C.gl1_3_glTexEnviv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexEnvi.xml -func (gl *GL) TexEnvi(target, pname glbase.Enum, param int32) { - C.gl1_3_glTexEnvi(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexEnvfv.xml -func (gl *GL) TexEnvfv(target, pname glbase.Enum, params []float32) { - C.gl1_3_glTexEnvfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexEnvf.xml -func (gl *GL) TexEnvf(target, pname glbase.Enum, param float32) { - C.gl1_3_glTexEnvf(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glShadeModel.xml -func (gl *GL) ShadeModel(mode glbase.Enum) { - C.gl1_3_glShadeModel(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPolygonStipple.xml -func (gl *GL) PolygonStipple(mask []uint8) { - C.gl1_3_glPolygonStipple(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&mask[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMaterialiv.xml -func (gl *GL) Materialiv(face, pname glbase.Enum, params []int32) { - C.gl1_3_glMaterialiv(gl.funcs, C.GLenum(face), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMateriali.xml -func (gl *GL) Materiali(face, pname glbase.Enum, param int32) { - C.gl1_3_glMateriali(gl.funcs, C.GLenum(face), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMaterialfv.xml -func (gl *GL) Materialfv(face, pname glbase.Enum, params []float32) { - C.gl1_3_glMaterialfv(gl.funcs, C.GLenum(face), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMaterialf.xml -func (gl *GL) Materialf(face, pname glbase.Enum, param float32) { - C.gl1_3_glMaterialf(gl.funcs, C.GLenum(face), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLineStipple.xml -func (gl *GL) LineStipple(factor int32, pattern uint16) { - C.gl1_3_glLineStipple(gl.funcs, C.GLint(factor), C.GLushort(pattern)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLightModeliv.xml -func (gl *GL) LightModeliv(pname glbase.Enum, params []int32) { - C.gl1_3_glLightModeliv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLightModeli.xml -func (gl *GL) LightModeli(pname glbase.Enum, param int32) { - C.gl1_3_glLightModeli(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLightModelfv.xml -func (gl *GL) LightModelfv(pname glbase.Enum, params []float32) { - C.gl1_3_glLightModelfv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLightModelf.xml -func (gl *GL) LightModelf(pname glbase.Enum, param float32) { - C.gl1_3_glLightModelf(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLightiv.xml -func (gl *GL) Lightiv(light, pname glbase.Enum, params []int32) { - C.gl1_3_glLightiv(gl.funcs, C.GLenum(light), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLighti.xml -func (gl *GL) Lighti(light, pname glbase.Enum, param int32) { - C.gl1_3_glLighti(gl.funcs, C.GLenum(light), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLightfv.xml -func (gl *GL) Lightfv(light, pname glbase.Enum, params []float32) { - C.gl1_3_glLightfv(gl.funcs, C.GLenum(light), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLightf.xml -func (gl *GL) Lightf(light, pname glbase.Enum, param float32) { - C.gl1_3_glLightf(gl.funcs, C.GLenum(light), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFogiv.xml -func (gl *GL) Fogiv(pname glbase.Enum, params []int32) { - C.gl1_3_glFogiv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFogi.xml -func (gl *GL) Fogi(pname glbase.Enum, param int32) { - C.gl1_3_glFogi(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFogfv.xml -func (gl *GL) Fogfv(pname glbase.Enum, params []float32) { - C.gl1_3_glFogfv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFogf.xml -func (gl *GL) Fogf(pname glbase.Enum, param float32) { - C.gl1_3_glFogf(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColorMaterial.xml -func (gl *GL) ColorMaterial(face, mode glbase.Enum) { - C.gl1_3_glColorMaterial(gl.funcs, C.GLenum(face), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glClipPlane.xml -func (gl *GL) ClipPlane(plane glbase.Enum, equation []float64) { - C.gl1_3_glClipPlane(gl.funcs, C.GLenum(plane), (*C.GLdouble)(unsafe.Pointer(&equation[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex4sv.xml -func (gl *GL) Vertex4sv(v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_3_glVertex4sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex4s.xml -func (gl *GL) Vertex4s(x, y, z, w int16) { - C.gl1_3_glVertex4s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z), C.GLshort(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex4iv.xml -func (gl *GL) Vertex4iv(v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_3_glVertex4iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex4i.xml -func (gl *GL) Vertex4i(x, y, z, w int) { - C.gl1_3_glVertex4i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z), C.GLint(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex4fv.xml -func (gl *GL) Vertex4fv(v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_3_glVertex4fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex4f.xml -func (gl *GL) Vertex4f(x, y, z, w float32) { - C.gl1_3_glVertex4f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z), C.GLfloat(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex4dv.xml -func (gl *GL) Vertex4dv(v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_3_glVertex4dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex4d.xml -func (gl *GL) Vertex4d(x, y, z, w float64) { - C.gl1_3_glVertex4d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z), C.GLdouble(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex3sv.xml -func (gl *GL) Vertex3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_3_glVertex3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex3s.xml -func (gl *GL) Vertex3s(x, y, z int16) { - C.gl1_3_glVertex3s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex3iv.xml -func (gl *GL) Vertex3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_3_glVertex3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex3i.xml -func (gl *GL) Vertex3i(x, y, z int) { - C.gl1_3_glVertex3i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex3fv.xml -func (gl *GL) Vertex3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_3_glVertex3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex3f.xml -func (gl *GL) Vertex3f(x, y, z float32) { - C.gl1_3_glVertex3f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex3dv.xml -func (gl *GL) Vertex3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_3_glVertex3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex3d.xml -func (gl *GL) Vertex3d(x, y, z float64) { - C.gl1_3_glVertex3d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex2sv.xml -func (gl *GL) Vertex2sv(v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_3_glVertex2sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex2s.xml -func (gl *GL) Vertex2s(x, y int16) { - C.gl1_3_glVertex2s(gl.funcs, C.GLshort(x), C.GLshort(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex2iv.xml -func (gl *GL) Vertex2iv(v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_3_glVertex2iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex2i.xml -func (gl *GL) Vertex2i(x, y int) { - C.gl1_3_glVertex2i(gl.funcs, C.GLint(x), C.GLint(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex2fv.xml -func (gl *GL) Vertex2fv(v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_3_glVertex2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex2f.xml -func (gl *GL) Vertex2f(x, y float32) { - C.gl1_3_glVertex2f(gl.funcs, C.GLfloat(x), C.GLfloat(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex2dv.xml -func (gl *GL) Vertex2dv(v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_3_glVertex2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex2d.xml -func (gl *GL) Vertex2d(x, y float64) { - C.gl1_3_glVertex2d(gl.funcs, C.GLdouble(x), C.GLdouble(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord4sv.xml -func (gl *GL) TexCoord4sv(v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_3_glTexCoord4sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord4s.xml -func (gl *GL) TexCoord4s(s, t, r, q int16) { - C.gl1_3_glTexCoord4s(gl.funcs, C.GLshort(s), C.GLshort(t), C.GLshort(r), C.GLshort(q)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord4iv.xml -func (gl *GL) TexCoord4iv(v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_3_glTexCoord4iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord4i.xml -func (gl *GL) TexCoord4i(s, t, r, q int32) { - C.gl1_3_glTexCoord4i(gl.funcs, C.GLint(s), C.GLint(t), C.GLint(r), C.GLint(q)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord4fv.xml -func (gl *GL) TexCoord4fv(v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_3_glTexCoord4fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord4f.xml -func (gl *GL) TexCoord4f(s, t, r, q float32) { - C.gl1_3_glTexCoord4f(gl.funcs, C.GLfloat(s), C.GLfloat(t), C.GLfloat(r), C.GLfloat(q)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord4dv.xml -func (gl *GL) TexCoord4dv(v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_3_glTexCoord4dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord4d.xml -func (gl *GL) TexCoord4d(s, t, r, q float64) { - C.gl1_3_glTexCoord4d(gl.funcs, C.GLdouble(s), C.GLdouble(t), C.GLdouble(r), C.GLdouble(q)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord3sv.xml -func (gl *GL) TexCoord3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_3_glTexCoord3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord3s.xml -func (gl *GL) TexCoord3s(s, t, r int16) { - C.gl1_3_glTexCoord3s(gl.funcs, C.GLshort(s), C.GLshort(t), C.GLshort(r)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord3iv.xml -func (gl *GL) TexCoord3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_3_glTexCoord3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord3i.xml -func (gl *GL) TexCoord3i(s, t, r int32) { - C.gl1_3_glTexCoord3i(gl.funcs, C.GLint(s), C.GLint(t), C.GLint(r)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord3fv.xml -func (gl *GL) TexCoord3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_3_glTexCoord3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord3f.xml -func (gl *GL) TexCoord3f(s, t, r float32) { - C.gl1_3_glTexCoord3f(gl.funcs, C.GLfloat(s), C.GLfloat(t), C.GLfloat(r)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord3dv.xml -func (gl *GL) TexCoord3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_3_glTexCoord3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord3d.xml -func (gl *GL) TexCoord3d(s, t, r float64) { - C.gl1_3_glTexCoord3d(gl.funcs, C.GLdouble(s), C.GLdouble(t), C.GLdouble(r)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord2sv.xml -func (gl *GL) TexCoord2sv(v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_3_glTexCoord2sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord2s.xml -func (gl *GL) TexCoord2s(s, t int16) { - C.gl1_3_glTexCoord2s(gl.funcs, C.GLshort(s), C.GLshort(t)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord2iv.xml -func (gl *GL) TexCoord2iv(v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_3_glTexCoord2iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord2i.xml -func (gl *GL) TexCoord2i(s, t int32) { - C.gl1_3_glTexCoord2i(gl.funcs, C.GLint(s), C.GLint(t)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord2fv.xml -func (gl *GL) TexCoord2fv(v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_3_glTexCoord2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord2f.xml -func (gl *GL) TexCoord2f(s, t float32) { - C.gl1_3_glTexCoord2f(gl.funcs, C.GLfloat(s), C.GLfloat(t)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord2dv.xml -func (gl *GL) TexCoord2dv(v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_3_glTexCoord2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord2d.xml -func (gl *GL) TexCoord2d(s, t float64) { - C.gl1_3_glTexCoord2d(gl.funcs, C.GLdouble(s), C.GLdouble(t)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord1sv.xml -func (gl *GL) TexCoord1sv(v []int16) { - C.gl1_3_glTexCoord1sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord1s.xml -func (gl *GL) TexCoord1s(s int16) { - C.gl1_3_glTexCoord1s(gl.funcs, C.GLshort(s)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord1iv.xml -func (gl *GL) TexCoord1iv(v []int32) { - C.gl1_3_glTexCoord1iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord1i.xml -func (gl *GL) TexCoord1i(s int32) { - C.gl1_3_glTexCoord1i(gl.funcs, C.GLint(s)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord1fv.xml -func (gl *GL) TexCoord1fv(v []float32) { - C.gl1_3_glTexCoord1fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord1f.xml -func (gl *GL) TexCoord1f(s float32) { - C.gl1_3_glTexCoord1f(gl.funcs, C.GLfloat(s)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord1dv.xml -func (gl *GL) TexCoord1dv(v []float64) { - C.gl1_3_glTexCoord1dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord1d.xml -func (gl *GL) TexCoord1d(s float64) { - C.gl1_3_glTexCoord1d(gl.funcs, C.GLdouble(s)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRectsv.xml -func (gl *GL) Rectsv(v1, v2 []int16) { - C.gl1_3_glRectsv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v1[0])), (*C.GLshort)(unsafe.Pointer(&v2[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRects.xml -func (gl *GL) Rects(x1, y1, x2, y2 int16) { - C.gl1_3_glRects(gl.funcs, C.GLshort(x1), C.GLshort(y1), C.GLshort(x2), C.GLshort(y2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRectiv.xml -func (gl *GL) Rectiv(v1, v2 []int32) { - C.gl1_3_glRectiv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v1[0])), (*C.GLint)(unsafe.Pointer(&v2[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRecti.xml -func (gl *GL) Recti(x1, y1, x2, y2 int32) { - C.gl1_3_glRecti(gl.funcs, C.GLint(x1), C.GLint(y1), C.GLint(x2), C.GLint(y2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRectfv.xml -func (gl *GL) Rectfv(v1, v2 []float32) { - C.gl1_3_glRectfv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v1[0])), (*C.GLfloat)(unsafe.Pointer(&v2[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRectf.xml -func (gl *GL) Rectf(x1, y1, x2, y2 float32) { - C.gl1_3_glRectf(gl.funcs, C.GLfloat(x1), C.GLfloat(y1), C.GLfloat(x2), C.GLfloat(y2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRectdv.xml -func (gl *GL) Rectdv(v1, v2 []float64) { - C.gl1_3_glRectdv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v1[0])), (*C.GLdouble)(unsafe.Pointer(&v2[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRectd.xml -func (gl *GL) Rectd(x1, y1, x2, y2 float64) { - C.gl1_3_glRectd(gl.funcs, C.GLdouble(x1), C.GLdouble(y1), C.GLdouble(x2), C.GLdouble(y2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos4sv.xml -func (gl *GL) RasterPos4sv(v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_3_glRasterPos4sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos4s.xml -func (gl *GL) RasterPos4s(x, y, z, w int16) { - C.gl1_3_glRasterPos4s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z), C.GLshort(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos4iv.xml -func (gl *GL) RasterPos4iv(v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_3_glRasterPos4iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos4i.xml -func (gl *GL) RasterPos4i(x, y, z, w int) { - C.gl1_3_glRasterPos4i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z), C.GLint(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos4fv.xml -func (gl *GL) RasterPos4fv(v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_3_glRasterPos4fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos4f.xml -func (gl *GL) RasterPos4f(x, y, z, w float32) { - C.gl1_3_glRasterPos4f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z), C.GLfloat(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos4dv.xml -func (gl *GL) RasterPos4dv(v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_3_glRasterPos4dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos4d.xml -func (gl *GL) RasterPos4d(x, y, z, w float64) { - C.gl1_3_glRasterPos4d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z), C.GLdouble(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos3sv.xml -func (gl *GL) RasterPos3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_3_glRasterPos3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos3s.xml -func (gl *GL) RasterPos3s(x, y, z int16) { - C.gl1_3_glRasterPos3s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos3iv.xml -func (gl *GL) RasterPos3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_3_glRasterPos3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos3i.xml -func (gl *GL) RasterPos3i(x, y, z int) { - C.gl1_3_glRasterPos3i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos3fv.xml -func (gl *GL) RasterPos3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_3_glRasterPos3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos3f.xml -func (gl *GL) RasterPos3f(x, y, z float32) { - C.gl1_3_glRasterPos3f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos3dv.xml -func (gl *GL) RasterPos3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_3_glRasterPos3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos3d.xml -func (gl *GL) RasterPos3d(x, y, z float64) { - C.gl1_3_glRasterPos3d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos2sv.xml -func (gl *GL) RasterPos2sv(v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_3_glRasterPos2sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos2s.xml -func (gl *GL) RasterPos2s(x, y int16) { - C.gl1_3_glRasterPos2s(gl.funcs, C.GLshort(x), C.GLshort(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos2iv.xml -func (gl *GL) RasterPos2iv(v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_3_glRasterPos2iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos2i.xml -func (gl *GL) RasterPos2i(x, y int) { - C.gl1_3_glRasterPos2i(gl.funcs, C.GLint(x), C.GLint(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos2fv.xml -func (gl *GL) RasterPos2fv(v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_3_glRasterPos2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos2f.xml -func (gl *GL) RasterPos2f(x, y float32) { - C.gl1_3_glRasterPos2f(gl.funcs, C.GLfloat(x), C.GLfloat(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos2dv.xml -func (gl *GL) RasterPos2dv(v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_3_glRasterPos2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos2d.xml -func (gl *GL) RasterPos2d(x, y float64) { - C.gl1_3_glRasterPos2d(gl.funcs, C.GLdouble(x), C.GLdouble(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3sv.xml -func (gl *GL) Normal3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_3_glNormal3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3s.xml -func (gl *GL) Normal3s(nx, ny, nz int16) { - C.gl1_3_glNormal3s(gl.funcs, C.GLshort(nx), C.GLshort(ny), C.GLshort(nz)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3iv.xml -func (gl *GL) Normal3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_3_glNormal3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3i.xml -func (gl *GL) Normal3i(nx, ny, nz int32) { - C.gl1_3_glNormal3i(gl.funcs, C.GLint(nx), C.GLint(ny), C.GLint(nz)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3fv.xml -func (gl *GL) Normal3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_3_glNormal3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3f.xml -func (gl *GL) Normal3f(nx, ny, nz float32) { - C.gl1_3_glNormal3f(gl.funcs, C.GLfloat(nx), C.GLfloat(ny), C.GLfloat(nz)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3dv.xml -func (gl *GL) Normal3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_3_glNormal3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3d.xml -func (gl *GL) Normal3d(nx, ny, nz float64) { - C.gl1_3_glNormal3d(gl.funcs, C.GLdouble(nx), C.GLdouble(ny), C.GLdouble(nz)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3bv.xml -func (gl *GL) Normal3bv(v []byte) { - C.gl1_3_glNormal3bv(gl.funcs, (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3b.xml -func (gl *GL) Normal3b(nx, ny, nz byte) { - C.gl1_3_glNormal3b(gl.funcs, C.GLbyte(nx), C.GLbyte(ny), C.GLbyte(nz)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexsv.xml -func (gl *GL) Indexsv(c []int16) { - C.gl1_3_glIndexsv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexs.xml -func (gl *GL) Indexs(c int16) { - C.gl1_3_glIndexs(gl.funcs, C.GLshort(c)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexiv.xml -func (gl *GL) Indexiv(c []int32) { - C.gl1_3_glIndexiv(gl.funcs, (*C.GLint)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexi.xml -func (gl *GL) Indexi(c int32) { - C.gl1_3_glIndexi(gl.funcs, C.GLint(c)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexfv.xml -func (gl *GL) Indexfv(c []float32) { - C.gl1_3_glIndexfv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexf.xml -func (gl *GL) Indexf(c float32) { - C.gl1_3_glIndexf(gl.funcs, C.GLfloat(c)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexdv.xml -func (gl *GL) Indexdv(c []float64) { - C.gl1_3_glIndexdv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexd.xml -func (gl *GL) Indexd(c float64) { - C.gl1_3_glIndexd(gl.funcs, C.GLdouble(c)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEnd.xml -func (gl *GL) End() { - C.gl1_3_glEnd(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEdgeFlagv.xml -func (gl *GL) EdgeFlagv(flag []bool) { - C.gl1_3_glEdgeFlagv(gl.funcs, (*C.GLboolean)(unsafe.Pointer(&flag[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEdgeFlag.xml -func (gl *GL) EdgeFlag(flag bool) { - C.gl1_3_glEdgeFlag(gl.funcs, *(*C.GLboolean)(unsafe.Pointer(&flag))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4usv.xml -func (gl *GL) Color4usv(v []uint16) { - C.gl1_3_glColor4usv(gl.funcs, (*C.GLushort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4us.xml -func (gl *GL) Color4us(red, green, blue, alpha uint16) { - C.gl1_3_glColor4us(gl.funcs, C.GLushort(red), C.GLushort(green), C.GLushort(blue), C.GLushort(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4uiv.xml -func (gl *GL) Color4uiv(v []uint32) { - C.gl1_3_glColor4uiv(gl.funcs, (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4ui.xml -func (gl *GL) Color4ui(red, green, blue, alpha uint32) { - C.gl1_3_glColor4ui(gl.funcs, C.GLuint(red), C.GLuint(green), C.GLuint(blue), C.GLuint(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4ubv.xml -func (gl *GL) Color4ubv(v []uint8) { - C.gl1_3_glColor4ubv(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4ub.xml -func (gl *GL) Color4ub(red, green, blue, alpha uint8) { - C.gl1_3_glColor4ub(gl.funcs, C.GLubyte(red), C.GLubyte(green), C.GLubyte(blue), C.GLubyte(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4sv.xml -func (gl *GL) Color4sv(v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_3_glColor4sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4s.xml -func (gl *GL) Color4s(red, green, blue, alpha int16) { - C.gl1_3_glColor4s(gl.funcs, C.GLshort(red), C.GLshort(green), C.GLshort(blue), C.GLshort(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4iv.xml -func (gl *GL) Color4iv(v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_3_glColor4iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4i.xml -func (gl *GL) Color4i(red, green, blue, alpha int32) { - C.gl1_3_glColor4i(gl.funcs, C.GLint(red), C.GLint(green), C.GLint(blue), C.GLint(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4fv.xml -func (gl *GL) Color4fv(v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_3_glColor4fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4f.xml -func (gl *GL) Color4f(red, green, blue, alpha float32) { - C.gl1_3_glColor4f(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4dv.xml -func (gl *GL) Color4dv(v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_3_glColor4dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4d.xml -func (gl *GL) Color4d(red, green, blue, alpha float64) { - C.gl1_3_glColor4d(gl.funcs, C.GLdouble(red), C.GLdouble(green), C.GLdouble(blue), C.GLdouble(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4bv.xml -func (gl *GL) Color4bv(v []byte) { - C.gl1_3_glColor4bv(gl.funcs, (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4b.xml -func (gl *GL) Color4b(red, green, blue, alpha byte) { - C.gl1_3_glColor4b(gl.funcs, C.GLbyte(red), C.GLbyte(green), C.GLbyte(blue), C.GLbyte(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3usv.xml -func (gl *GL) Color3usv(v []uint16) { - C.gl1_3_glColor3usv(gl.funcs, (*C.GLushort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3us.xml -func (gl *GL) Color3us(red, green, blue uint16) { - C.gl1_3_glColor3us(gl.funcs, C.GLushort(red), C.GLushort(green), C.GLushort(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3uiv.xml -func (gl *GL) Color3uiv(v []uint32) { - C.gl1_3_glColor3uiv(gl.funcs, (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3ui.xml -func (gl *GL) Color3ui(red, green, blue uint32) { - C.gl1_3_glColor3ui(gl.funcs, C.GLuint(red), C.GLuint(green), C.GLuint(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3ubv.xml -func (gl *GL) Color3ubv(v []uint8) { - C.gl1_3_glColor3ubv(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3ub.xml -func (gl *GL) Color3ub(red, green, blue uint8) { - C.gl1_3_glColor3ub(gl.funcs, C.GLubyte(red), C.GLubyte(green), C.GLubyte(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3sv.xml -func (gl *GL) Color3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_3_glColor3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3s.xml -func (gl *GL) Color3s(red, green, blue int16) { - C.gl1_3_glColor3s(gl.funcs, C.GLshort(red), C.GLshort(green), C.GLshort(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3iv.xml -func (gl *GL) Color3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_3_glColor3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3i.xml -func (gl *GL) Color3i(red, green, blue int32) { - C.gl1_3_glColor3i(gl.funcs, C.GLint(red), C.GLint(green), C.GLint(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3fv.xml -func (gl *GL) Color3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_3_glColor3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3f.xml -func (gl *GL) Color3f(red, green, blue float32) { - C.gl1_3_glColor3f(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3dv.xml -func (gl *GL) Color3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_3_glColor3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3d.xml -func (gl *GL) Color3d(red, green, blue float64) { - C.gl1_3_glColor3d(gl.funcs, C.GLdouble(red), C.GLdouble(green), C.GLdouble(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3bv.xml -func (gl *GL) Color3bv(v []byte) { - C.gl1_3_glColor3bv(gl.funcs, (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3b.xml -func (gl *GL) Color3b(red, green, blue byte) { - C.gl1_3_glColor3b(gl.funcs, C.GLbyte(red), C.GLbyte(green), C.GLbyte(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glBitmap.xml -func (gl *GL) Bitmap(width, height int, xorig, yorig, xmove, ymove float32, bitmap []uint8) { - C.gl1_3_glBitmap(gl.funcs, C.GLsizei(width), C.GLsizei(height), C.GLfloat(xorig), C.GLfloat(yorig), C.GLfloat(xmove), C.GLfloat(ymove), (*C.GLubyte)(unsafe.Pointer(&bitmap[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glBegin.xml -func (gl *GL) Begin(mode glbase.Enum) { - C.gl1_3_glBegin(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glListBase.xml -func (gl *GL) ListBase(base uint32) { - C.gl1_3_glListBase(gl.funcs, C.GLuint(base)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGenLists.xml -func (gl *GL) GenLists(range_ int32) uint32 { - glresult := C.gl1_3_glGenLists(gl.funcs, C.GLsizei(range_)) - return uint32(glresult) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDeleteLists.xml -func (gl *GL) DeleteLists(list uint32, range_ int32) { - C.gl1_3_glDeleteLists(gl.funcs, C.GLuint(list), C.GLsizei(range_)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCallLists.xml -func (gl *GL) CallLists(n int, gltype glbase.Enum, lists interface{}) { - var lists_ptr unsafe.Pointer - var lists_v = reflect.ValueOf(lists) - if lists != nil && lists_v.Kind() != reflect.Slice { - panic("parameter lists must be a slice") - } - if lists != nil { - lists_ptr = unsafe.Pointer(lists_v.Index(0).Addr().Pointer()) - } - C.gl1_3_glCallLists(gl.funcs, C.GLsizei(n), C.GLenum(gltype), lists_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCallList.xml -func (gl *GL) CallList(list uint32) { - C.gl1_3_glCallList(gl.funcs, C.GLuint(list)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEndList.xml -func (gl *GL) EndList() { - C.gl1_3_glEndList(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNewList.xml -func (gl *GL) NewList(list uint32, mode glbase.Enum) { - C.gl1_3_glNewList(gl.funcs, C.GLuint(list), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPushClientAttrib.xml -func (gl *GL) PushClientAttrib(mask glbase.Bitfield) { - C.gl1_3_glPushClientAttrib(gl.funcs, C.GLbitfield(mask)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPopClientAttrib.xml -func (gl *GL) PopClientAttrib() { - C.gl1_3_glPopClientAttrib(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPrioritizeTextures.xml -func (gl *GL) PrioritizeTextures(n int, textures []glbase.Texture, priorities []float32) { - C.gl1_3_glPrioritizeTextures(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0])), (*C.GLfloat)(unsafe.Pointer(&priorities[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glAreTexturesResident.xml -func (gl *GL) AreTexturesResident(n int, textures []glbase.Texture, residences []bool) bool { - glresult := C.gl1_3_glAreTexturesResident(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0])), (*C.GLboolean)(unsafe.Pointer(&residences[0]))) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexPointer.xml -func (gl *GL) VertexPointer(size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl1_3_glVertexPointer(gl.funcs, C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoordPointer.xml -func (gl *GL) TexCoordPointer(size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl1_3_glTexCoordPointer(gl.funcs, C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormalPointer.xml -func (gl *GL) NormalPointer(gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl1_3_glNormalPointer(gl.funcs, C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glInterleavedArrays.xml -func (gl *GL) InterleavedArrays(format glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl1_3_glInterleavedArrays(gl.funcs, C.GLenum(format), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexPointer.xml -func (gl *GL) IndexPointer(gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl1_3_glIndexPointer(gl.funcs, C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEnableClientState.xml -func (gl *GL) EnableClientState(array glbase.Enum) { - C.gl1_3_glEnableClientState(gl.funcs, C.GLenum(array)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEdgeFlagPointer.xml -func (gl *GL) EdgeFlagPointer(stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl1_3_glEdgeFlagPointer(gl.funcs, C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDisableClientState.xml -func (gl *GL) DisableClientState(array glbase.Enum) { - C.gl1_3_glDisableClientState(gl.funcs, C.GLenum(array)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColorPointer.xml -func (gl *GL) ColorPointer(size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl1_3_glColorPointer(gl.funcs, C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glArrayElement.xml -func (gl *GL) ArrayElement(i int32) { - C.gl1_3_glArrayElement(gl.funcs, C.GLint(i)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glResetMinmax.xml -func (gl *GL) ResetMinmax(target glbase.Enum) { - C.gl1_3_glResetMinmax(gl.funcs, C.GLenum(target)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glResetHistogram.xml -func (gl *GL) ResetHistogram(target glbase.Enum) { - C.gl1_3_glResetHistogram(gl.funcs, C.GLenum(target)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMinmax.xml -func (gl *GL) Minmax(target, internalFormat glbase.Enum, sink bool) { - C.gl1_3_glMinmax(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), *(*C.GLboolean)(unsafe.Pointer(&sink))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glHistogram.xml -func (gl *GL) Histogram(target glbase.Enum, width int, internalFormat glbase.Enum, sink bool) { - C.gl1_3_glHistogram(gl.funcs, C.GLenum(target), C.GLsizei(width), C.GLenum(internalFormat), *(*C.GLboolean)(unsafe.Pointer(&sink))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetMinmaxParameteriv.xml -func (gl *GL) GetMinmaxParameteriv(target, pname glbase.Enum, params []int32) { - C.gl1_3_glGetMinmaxParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetMinmaxParameterfv.xml -func (gl *GL) GetMinmaxParameterfv(target, pname glbase.Enum, params []float32) { - C.gl1_3_glGetMinmaxParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetMinmax.xml -func (gl *GL) GetMinmax(target glbase.Enum, reset bool, format, gltype glbase.Enum, values interface{}) { - var values_ptr unsafe.Pointer - var values_v = reflect.ValueOf(values) - if values != nil && values_v.Kind() != reflect.Slice { - panic("parameter values must be a slice") - } - if values != nil { - values_ptr = unsafe.Pointer(values_v.Index(0).Addr().Pointer()) - } - C.gl1_3_glGetMinmax(gl.funcs, C.GLenum(target), *(*C.GLboolean)(unsafe.Pointer(&reset)), C.GLenum(format), C.GLenum(gltype), values_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetHistogramParameteriv.xml -func (gl *GL) GetHistogramParameteriv(target, pname glbase.Enum, params []int32) { - C.gl1_3_glGetHistogramParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetHistogramParameterfv.xml -func (gl *GL) GetHistogramParameterfv(target, pname glbase.Enum, params []float32) { - C.gl1_3_glGetHistogramParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetHistogram.xml -func (gl *GL) GetHistogram(target glbase.Enum, reset bool, format, gltype glbase.Enum, values interface{}) { - var values_ptr unsafe.Pointer - var values_v = reflect.ValueOf(values) - if values != nil && values_v.Kind() != reflect.Slice { - panic("parameter values must be a slice") - } - if values != nil { - values_ptr = unsafe.Pointer(values_v.Index(0).Addr().Pointer()) - } - C.gl1_3_glGetHistogram(gl.funcs, C.GLenum(target), *(*C.GLboolean)(unsafe.Pointer(&reset)), C.GLenum(format), C.GLenum(gltype), values_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSeparableFilter2D.xml -func (gl *GL) SeparableFilter2D(target, internalFormat glbase.Enum, width, height int, format, gltype glbase.Enum, row, column interface{}) { - var row_ptr unsafe.Pointer - var row_v = reflect.ValueOf(row) - if row != nil && row_v.Kind() != reflect.Slice { - panic("parameter row must be a slice") - } - if row != nil { - row_ptr = unsafe.Pointer(row_v.Index(0).Addr().Pointer()) - } - var column_ptr unsafe.Pointer - var column_v = reflect.ValueOf(column) - if column != nil && column_v.Kind() != reflect.Slice { - panic("parameter column must be a slice") - } - if column != nil { - column_ptr = unsafe.Pointer(column_v.Index(0).Addr().Pointer()) - } - C.gl1_3_glSeparableFilter2D(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), row_ptr, column_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetSeparableFilter.xml -func (gl *GL) GetSeparableFilter(target, format, gltype glbase.Enum, row, column, span interface{}) { - var row_ptr unsafe.Pointer - var row_v = reflect.ValueOf(row) - if row != nil && row_v.Kind() != reflect.Slice { - panic("parameter row must be a slice") - } - if row != nil { - row_ptr = unsafe.Pointer(row_v.Index(0).Addr().Pointer()) - } - var column_ptr unsafe.Pointer - var column_v = reflect.ValueOf(column) - if column != nil && column_v.Kind() != reflect.Slice { - panic("parameter column must be a slice") - } - if column != nil { - column_ptr = unsafe.Pointer(column_v.Index(0).Addr().Pointer()) - } - var span_ptr unsafe.Pointer - var span_v = reflect.ValueOf(span) - if span != nil && span_v.Kind() != reflect.Slice { - panic("parameter span must be a slice") - } - if span != nil { - span_ptr = unsafe.Pointer(span_v.Index(0).Addr().Pointer()) - } - C.gl1_3_glGetSeparableFilter(gl.funcs, C.GLenum(target), C.GLenum(format), C.GLenum(gltype), row_ptr, column_ptr, span_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetConvolutionParameteriv.xml -func (gl *GL) GetConvolutionParameteriv(target, pname glbase.Enum, params []int32) { - C.gl1_3_glGetConvolutionParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetConvolutionParameterfv.xml -func (gl *GL) GetConvolutionParameterfv(target, pname glbase.Enum, params []float32) { - C.gl1_3_glGetConvolutionParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetConvolutionFilter.xml -func (gl *GL) GetConvolutionFilter(target, format, gltype glbase.Enum, image interface{}) { - var image_ptr unsafe.Pointer - var image_v = reflect.ValueOf(image) - if image != nil && image_v.Kind() != reflect.Slice { - panic("parameter image must be a slice") - } - if image != nil { - image_ptr = unsafe.Pointer(image_v.Index(0).Addr().Pointer()) - } - C.gl1_3_glGetConvolutionFilter(gl.funcs, C.GLenum(target), C.GLenum(format), C.GLenum(gltype), image_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyConvolutionFilter2D.xml -func (gl *GL) CopyConvolutionFilter2D(target, internalFormat glbase.Enum, x, y, width, height int) { - C.gl1_3_glCopyConvolutionFilter2D(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyConvolutionFilter1D.xml -func (gl *GL) CopyConvolutionFilter1D(target, internalFormat glbase.Enum, x, y, width int) { - C.gl1_3_glCopyConvolutionFilter1D(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glConvolutionParameteriv.xml -func (gl *GL) ConvolutionParameteriv(target, pname glbase.Enum, params []int32) { - C.gl1_3_glConvolutionParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glConvolutionParameteri.xml -func (gl *GL) ConvolutionParameteri(target, pname glbase.Enum, params int32) { - C.gl1_3_glConvolutionParameteri(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLint(params)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glConvolutionParameterfv.xml -func (gl *GL) ConvolutionParameterfv(target, pname glbase.Enum, params []float32) { - C.gl1_3_glConvolutionParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glConvolutionParameterf.xml -func (gl *GL) ConvolutionParameterf(target, pname glbase.Enum, params float32) { - C.gl1_3_glConvolutionParameterf(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLfloat(params)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glConvolutionFilter2D.xml -func (gl *GL) ConvolutionFilter2D(target, internalFormat glbase.Enum, width, height int, format, gltype glbase.Enum, image interface{}) { - var image_ptr unsafe.Pointer - var image_v = reflect.ValueOf(image) - if image != nil && image_v.Kind() != reflect.Slice { - panic("parameter image must be a slice") - } - if image != nil { - image_ptr = unsafe.Pointer(image_v.Index(0).Addr().Pointer()) - } - C.gl1_3_glConvolutionFilter2D(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), image_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glConvolutionFilter1D.xml -func (gl *GL) ConvolutionFilter1D(target, internalFormat glbase.Enum, width int, format, gltype glbase.Enum, image interface{}) { - var image_ptr unsafe.Pointer - var image_v = reflect.ValueOf(image) - if image != nil && image_v.Kind() != reflect.Slice { - panic("parameter image must be a slice") - } - if image != nil { - image_ptr = unsafe.Pointer(image_v.Index(0).Addr().Pointer()) - } - C.gl1_3_glConvolutionFilter1D(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLsizei(width), C.GLenum(format), C.GLenum(gltype), image_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyColorSubTable.xml -func (gl *GL) CopyColorSubTable(target glbase.Enum, start int32, x, y, width int) { - C.gl1_3_glCopyColorSubTable(gl.funcs, C.GLenum(target), C.GLsizei(start), C.GLint(x), C.GLint(y), C.GLsizei(width)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColorSubTable.xml -func (gl *GL) ColorSubTable(target glbase.Enum, start int32, count int, format, gltype glbase.Enum, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl1_3_glColorSubTable(gl.funcs, C.GLenum(target), C.GLsizei(start), C.GLsizei(count), C.GLenum(format), C.GLenum(gltype), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetColorTableParameteriv.xml -func (gl *GL) GetColorTableParameteriv(target, pname glbase.Enum, params []int32) { - C.gl1_3_glGetColorTableParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetColorTableParameterfv.xml -func (gl *GL) GetColorTableParameterfv(target, pname glbase.Enum, params []float32) { - C.gl1_3_glGetColorTableParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetColorTable.xml -func (gl *GL) GetColorTable(target, format, gltype glbase.Enum, table interface{}) { - var table_ptr unsafe.Pointer - var table_v = reflect.ValueOf(table) - if table != nil && table_v.Kind() != reflect.Slice { - panic("parameter table must be a slice") - } - if table != nil { - table_ptr = unsafe.Pointer(table_v.Index(0).Addr().Pointer()) - } - C.gl1_3_glGetColorTable(gl.funcs, C.GLenum(target), C.GLenum(format), C.GLenum(gltype), table_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyColorTable.xml -func (gl *GL) CopyColorTable(target, internalFormat glbase.Enum, x, y, width int) { - C.gl1_3_glCopyColorTable(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColorTableParameteriv.xml -func (gl *GL) ColorTableParameteriv(target, pname glbase.Enum, params []int32) { - C.gl1_3_glColorTableParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColorTableParameterfv.xml -func (gl *GL) ColorTableParameterfv(target, pname glbase.Enum, params []float32) { - C.gl1_3_glColorTableParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColorTable.xml -func (gl *GL) ColorTable(target, internalFormat glbase.Enum, width int, format, gltype glbase.Enum, table interface{}) { - var table_ptr unsafe.Pointer - var table_v = reflect.ValueOf(table) - if table != nil && table_v.Kind() != reflect.Slice { - panic("parameter table must be a slice") - } - if table != nil { - table_ptr = unsafe.Pointer(table_v.Index(0).Addr().Pointer()) - } - C.gl1_3_glColorTable(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLsizei(width), C.GLenum(format), C.GLenum(gltype), table_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultTransposeMatrixd.xml -func (gl *GL) MultTransposeMatrixd(m []float64) { - C.gl1_3_glMultTransposeMatrixd(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultTransposeMatrixf.xml -func (gl *GL) MultTransposeMatrixf(m []float32) { - C.gl1_3_glMultTransposeMatrixf(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLoadTransposeMatrixd.xml -func (gl *GL) LoadTransposeMatrixd(m []float64) { - C.gl1_3_glLoadTransposeMatrixd(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLoadTransposeMatrixf.xml -func (gl *GL) LoadTransposeMatrixf(m []float32) { - C.gl1_3_glLoadTransposeMatrixf(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord4sv.xml -func (gl *GL) MultiTexCoord4sv(target glbase.Enum, v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_3_glMultiTexCoord4sv(gl.funcs, C.GLenum(target), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord4s.xml -func (gl *GL) MultiTexCoord4s(target glbase.Enum, s, t, r, q int16) { - C.gl1_3_glMultiTexCoord4s(gl.funcs, C.GLenum(target), C.GLshort(s), C.GLshort(t), C.GLshort(r), C.GLshort(q)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord4iv.xml -func (gl *GL) MultiTexCoord4iv(target glbase.Enum, v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_3_glMultiTexCoord4iv(gl.funcs, C.GLenum(target), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord4i.xml -func (gl *GL) MultiTexCoord4i(target glbase.Enum, s, t, r, q int32) { - C.gl1_3_glMultiTexCoord4i(gl.funcs, C.GLenum(target), C.GLint(s), C.GLint(t), C.GLint(r), C.GLint(q)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord4fv.xml -func (gl *GL) MultiTexCoord4fv(target glbase.Enum, v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_3_glMultiTexCoord4fv(gl.funcs, C.GLenum(target), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord4f.xml -func (gl *GL) MultiTexCoord4f(target glbase.Enum, s, t, r, q float32) { - C.gl1_3_glMultiTexCoord4f(gl.funcs, C.GLenum(target), C.GLfloat(s), C.GLfloat(t), C.GLfloat(r), C.GLfloat(q)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord4dv.xml -func (gl *GL) MultiTexCoord4dv(target glbase.Enum, v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_3_glMultiTexCoord4dv(gl.funcs, C.GLenum(target), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord4d.xml -func (gl *GL) MultiTexCoord4d(target glbase.Enum, s, t, r, q float64) { - C.gl1_3_glMultiTexCoord4d(gl.funcs, C.GLenum(target), C.GLdouble(s), C.GLdouble(t), C.GLdouble(r), C.GLdouble(q)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord3sv.xml -func (gl *GL) MultiTexCoord3sv(target glbase.Enum, v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_3_glMultiTexCoord3sv(gl.funcs, C.GLenum(target), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord3s.xml -func (gl *GL) MultiTexCoord3s(target glbase.Enum, s, t, r int16) { - C.gl1_3_glMultiTexCoord3s(gl.funcs, C.GLenum(target), C.GLshort(s), C.GLshort(t), C.GLshort(r)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord3iv.xml -func (gl *GL) MultiTexCoord3iv(target glbase.Enum, v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_3_glMultiTexCoord3iv(gl.funcs, C.GLenum(target), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord3i.xml -func (gl *GL) MultiTexCoord3i(target glbase.Enum, s, t, r int32) { - C.gl1_3_glMultiTexCoord3i(gl.funcs, C.GLenum(target), C.GLint(s), C.GLint(t), C.GLint(r)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord3fv.xml -func (gl *GL) MultiTexCoord3fv(target glbase.Enum, v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_3_glMultiTexCoord3fv(gl.funcs, C.GLenum(target), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord3f.xml -func (gl *GL) MultiTexCoord3f(target glbase.Enum, s, t, r float32) { - C.gl1_3_glMultiTexCoord3f(gl.funcs, C.GLenum(target), C.GLfloat(s), C.GLfloat(t), C.GLfloat(r)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord3dv.xml -func (gl *GL) MultiTexCoord3dv(target glbase.Enum, v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_3_glMultiTexCoord3dv(gl.funcs, C.GLenum(target), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord3d.xml -func (gl *GL) MultiTexCoord3d(target glbase.Enum, s, t, r float64) { - C.gl1_3_glMultiTexCoord3d(gl.funcs, C.GLenum(target), C.GLdouble(s), C.GLdouble(t), C.GLdouble(r)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord2sv.xml -func (gl *GL) MultiTexCoord2sv(target glbase.Enum, v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_3_glMultiTexCoord2sv(gl.funcs, C.GLenum(target), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord2s.xml -func (gl *GL) MultiTexCoord2s(target glbase.Enum, s, t int16) { - C.gl1_3_glMultiTexCoord2s(gl.funcs, C.GLenum(target), C.GLshort(s), C.GLshort(t)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord2iv.xml -func (gl *GL) MultiTexCoord2iv(target glbase.Enum, v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_3_glMultiTexCoord2iv(gl.funcs, C.GLenum(target), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord2i.xml -func (gl *GL) MultiTexCoord2i(target glbase.Enum, s, t int32) { - C.gl1_3_glMultiTexCoord2i(gl.funcs, C.GLenum(target), C.GLint(s), C.GLint(t)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord2fv.xml -func (gl *GL) MultiTexCoord2fv(target glbase.Enum, v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_3_glMultiTexCoord2fv(gl.funcs, C.GLenum(target), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord2f.xml -func (gl *GL) MultiTexCoord2f(target glbase.Enum, s, t float32) { - C.gl1_3_glMultiTexCoord2f(gl.funcs, C.GLenum(target), C.GLfloat(s), C.GLfloat(t)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord2dv.xml -func (gl *GL) MultiTexCoord2dv(target glbase.Enum, v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_3_glMultiTexCoord2dv(gl.funcs, C.GLenum(target), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord2d.xml -func (gl *GL) MultiTexCoord2d(target glbase.Enum, s, t float64) { - C.gl1_3_glMultiTexCoord2d(gl.funcs, C.GLenum(target), C.GLdouble(s), C.GLdouble(t)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord1sv.xml -func (gl *GL) MultiTexCoord1sv(target glbase.Enum, v []int16) { - C.gl1_3_glMultiTexCoord1sv(gl.funcs, C.GLenum(target), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord1s.xml -func (gl *GL) MultiTexCoord1s(target glbase.Enum, s int16) { - C.gl1_3_glMultiTexCoord1s(gl.funcs, C.GLenum(target), C.GLshort(s)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord1iv.xml -func (gl *GL) MultiTexCoord1iv(target glbase.Enum, v []int32) { - C.gl1_3_glMultiTexCoord1iv(gl.funcs, C.GLenum(target), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord1i.xml -func (gl *GL) MultiTexCoord1i(target glbase.Enum, s int32) { - C.gl1_3_glMultiTexCoord1i(gl.funcs, C.GLenum(target), C.GLint(s)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord1fv.xml -func (gl *GL) MultiTexCoord1fv(target glbase.Enum, v []float32) { - C.gl1_3_glMultiTexCoord1fv(gl.funcs, C.GLenum(target), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord1f.xml -func (gl *GL) MultiTexCoord1f(target glbase.Enum, s float32) { - C.gl1_3_glMultiTexCoord1f(gl.funcs, C.GLenum(target), C.GLfloat(s)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord1dv.xml -func (gl *GL) MultiTexCoord1dv(target glbase.Enum, v []float64) { - C.gl1_3_glMultiTexCoord1dv(gl.funcs, C.GLenum(target), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord1d.xml -func (gl *GL) MultiTexCoord1d(target glbase.Enum, s float64) { - C.gl1_3_glMultiTexCoord1d(gl.funcs, C.GLenum(target), C.GLdouble(s)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glClientActiveTexture.xml -func (gl *GL) ClientActiveTexture(texture glbase.Enum) { - C.gl1_3_glClientActiveTexture(gl.funcs, C.GLenum(texture)) -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/1.4/funcs.cpp b/Godeps/_workspace/src/github.com/obscuren/qml/gl/1.4/funcs.cpp deleted file mode 100644 index 0aed105f5a..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/1.4/funcs.cpp +++ /dev/null @@ -1,2790 +0,0 @@ - -// ** file automatically generated by glgen -- do not edit manually ** - -#include -#include - -#include "funcs.h" - -void *gl1_4_funcs() { - QOpenGLFunctions_1_4* funcs = QOpenGLContext::currentContext()->versionFunctions(); - if (!funcs) { - return 0; - } - funcs->initializeOpenGLFunctions(); - return funcs; -} - - -void gl1_4_glViewport(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glViewport(x, y, width, height); -} - -void gl1_4_glDepthRange(void *_glfuncs, GLdouble nearVal, GLdouble farVal) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthRange(nearVal, farVal); -} - -GLboolean gl1_4_glIsEnabled(void *_glfuncs, GLenum cap) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsEnabled(cap); -} - -void gl1_4_glGetTexLevelParameteriv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLint* params) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexLevelParameteriv(target, level, pname, params); -} - -void gl1_4_glGetTexLevelParameterfv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexLevelParameterfv(target, level, pname, params); -} - -void gl1_4_glGetTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameteriv(target, pname, params); -} - -void gl1_4_glGetTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameterfv(target, pname, params); -} - -void gl1_4_glGetTexImage(void *_glfuncs, GLenum target, GLint level, GLenum format, GLenum gltype, GLvoid* pixels) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexImage(target, level, format, gltype, pixels); -} - -void gl1_4_glGetIntegerv(void *_glfuncs, GLenum pname, GLint* params) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetIntegerv(pname, params); -} - -void gl1_4_glGetFloatv(void *_glfuncs, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetFloatv(pname, params); -} - -GLenum gl1_4_glGetError(void *_glfuncs) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetError(); -} - -void gl1_4_glGetDoublev(void *_glfuncs, GLenum pname, GLdouble* params) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetDoublev(pname, params); -} - -void gl1_4_glGetBooleanv(void *_glfuncs, GLenum pname, GLboolean* params) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBooleanv(pname, params); -} - -void gl1_4_glReadPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum gltype, GLvoid* pixels) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glReadPixels(x, y, width, height, format, gltype, pixels); -} - -void gl1_4_glReadBuffer(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glReadBuffer(mode); -} - -void gl1_4_glPixelStorei(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelStorei(pname, param); -} - -void gl1_4_glPixelStoref(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelStoref(pname, param); -} - -void gl1_4_glDepthFunc(void *_glfuncs, GLenum glfunc) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthFunc(glfunc); -} - -void gl1_4_glStencilOp(void *_glfuncs, GLenum fail, GLenum zfail, GLenum zpass) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilOp(fail, zfail, zpass); -} - -void gl1_4_glStencilFunc(void *_glfuncs, GLenum glfunc, GLint ref, GLuint mask) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilFunc(glfunc, ref, mask); -} - -void gl1_4_glLogicOp(void *_glfuncs, GLenum opcode) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLogicOp(opcode); -} - -void gl1_4_glBlendFunc(void *_glfuncs, GLenum sfactor, GLenum dfactor) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendFunc(sfactor, dfactor); -} - -void gl1_4_glFlush(void *_glfuncs) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFlush(); -} - -void gl1_4_glFinish(void *_glfuncs) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFinish(); -} - -void gl1_4_glEnable(void *_glfuncs, GLenum cap) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnable(cap); -} - -void gl1_4_glDisable(void *_glfuncs, GLenum cap) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDisable(cap); -} - -void gl1_4_glDepthMask(void *_glfuncs, GLboolean flag) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthMask(flag); -} - -void gl1_4_glColorMask(void *_glfuncs, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorMask(red, green, blue, alpha); -} - -void gl1_4_glStencilMask(void *_glfuncs, GLuint mask) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilMask(mask); -} - -void gl1_4_glClearDepth(void *_glfuncs, GLdouble depth) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearDepth(depth); -} - -void gl1_4_glClearStencil(void *_glfuncs, GLint s) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearStencil(s); -} - -void gl1_4_glClearColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearColor(red, green, blue, alpha); -} - -void gl1_4_glClear(void *_glfuncs, GLbitfield mask) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClear(mask); -} - -void gl1_4_glDrawBuffer(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawBuffer(mode); -} - -void gl1_4_glTexImage2D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage2D(target, level, internalFormat, width, height, border, format, gltype, pixels); -} - -void gl1_4_glTexImage1D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage1D(target, level, internalFormat, width, border, format, gltype, pixels); -} - -void gl1_4_glTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameteriv(target, pname, params); -} - -void gl1_4_glTexParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint param) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameteri(target, pname, param); -} - -void gl1_4_glTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterfv(target, pname, params); -} - -void gl1_4_glTexParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterf(target, pname, param); -} - -void gl1_4_glScissor(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScissor(x, y, width, height); -} - -void gl1_4_glPolygonMode(void *_glfuncs, GLenum face, GLenum mode) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPolygonMode(face, mode); -} - -void gl1_4_glPointSize(void *_glfuncs, GLfloat size) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointSize(size); -} - -void gl1_4_glLineWidth(void *_glfuncs, GLfloat width) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLineWidth(width); -} - -void gl1_4_glHint(void *_glfuncs, GLenum target, GLenum mode) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glHint(target, mode); -} - -void gl1_4_glFrontFace(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFrontFace(mode); -} - -void gl1_4_glCullFace(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCullFace(mode); -} - -void gl1_4_glIndexubv(void *_glfuncs, const GLubyte* c) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexubv(c); -} - -void gl1_4_glIndexub(void *_glfuncs, GLubyte c) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexub(c); -} - -GLboolean gl1_4_glIsTexture(void *_glfuncs, GLuint texture) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsTexture(texture); -} - -void gl1_4_glGenTextures(void *_glfuncs, GLsizei n, GLuint* textures) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenTextures(n, textures); -} - -void gl1_4_glDeleteTextures(void *_glfuncs, GLsizei n, const GLuint* textures) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteTextures(n, textures); -} - -void gl1_4_glBindTexture(void *_glfuncs, GLenum target, GLuint texture) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindTexture(target, texture); -} - -void gl1_4_glTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, gltype, pixels); -} - -void gl1_4_glTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexSubImage1D(target, level, xoffset, width, format, gltype, pixels); -} - -void gl1_4_glCopyTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height); -} - -void gl1_4_glCopyTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexSubImage1D(target, level, xoffset, x, y, width); -} - -void gl1_4_glCopyTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexImage2D(target, level, internalFormat, x, y, width, height, border); -} - -void gl1_4_glCopyTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexImage1D(target, level, internalFormat, x, y, width, border); -} - -void gl1_4_glPolygonOffset(void *_glfuncs, GLfloat factor, GLfloat units) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPolygonOffset(factor, units); -} - -void gl1_4_glDrawElements(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElements(mode, count, gltype, indices); -} - -void gl1_4_glDrawArrays(void *_glfuncs, GLenum mode, GLint first, GLsizei count) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawArrays(mode, first, count); -} - -void gl1_4_glCopyTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexSubImage3D(target, level, xoffset, yoffset, zoffset, x, y, width, height); -} - -void gl1_4_glTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, gltype, pixels); -} - -void gl1_4_glTexImage3D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage3D(target, level, internalFormat, width, height, depth, border, format, gltype, pixels); -} - -void gl1_4_glDrawRangeElements(void *_glfuncs, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum gltype, const GLvoid* indices) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawRangeElements(mode, start, end, count, gltype, indices); -} - -void gl1_4_glBlendEquation(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendEquation(mode); -} - -void gl1_4_glBlendColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendColor(red, green, blue, alpha); -} - -void gl1_4_glGetCompressedTexImage(void *_glfuncs, GLenum target, GLint level, GLvoid* img) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetCompressedTexImage(target, level, img); -} - -void gl1_4_glCompressedTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexSubImage1D(target, level, xoffset, width, format, imageSize, data); -} - -void gl1_4_glCompressedTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data); -} - -void gl1_4_glCompressedTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data); -} - -void gl1_4_glCompressedTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexImage1D(target, level, internalFormat, width, border, imageSize, data); -} - -void gl1_4_glCompressedTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexImage2D(target, level, internalFormat, width, height, border, imageSize, data); -} - -void gl1_4_glCompressedTexImage3D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexImage3D(target, level, internalFormat, width, height, depth, border, imageSize, data); -} - -void gl1_4_glSampleCoverage(void *_glfuncs, GLfloat value, GLboolean invert) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSampleCoverage(value, invert); -} - -void gl1_4_glActiveTexture(void *_glfuncs, GLenum texture) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glActiveTexture(texture); -} - -void gl1_4_glPointParameteriv(void *_glfuncs, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameteriv(pname, params); -} - -void gl1_4_glPointParameteri(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameteri(pname, param); -} - -void gl1_4_glPointParameterfv(void *_glfuncs, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameterfv(pname, params); -} - -void gl1_4_glPointParameterf(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameterf(pname, param); -} - -void gl1_4_glMultiDrawArrays(void *_glfuncs, GLenum mode, const GLint* first, const GLsizei* count, GLsizei drawcount) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiDrawArrays(mode, first, count, drawcount); -} - -void gl1_4_glBlendFuncSeparate(void *_glfuncs, GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendFuncSeparate(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha); -} - -void gl1_4_glTranslatef(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTranslatef(x, y, z); -} - -void gl1_4_glTranslated(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTranslated(x, y, z); -} - -void gl1_4_glScalef(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScalef(x, y, z); -} - -void gl1_4_glScaled(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScaled(x, y, z); -} - -void gl1_4_glRotatef(void *_glfuncs, GLfloat angle, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRotatef(angle, x, y, z); -} - -void gl1_4_glRotated(void *_glfuncs, GLdouble angle, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRotated(angle, x, y, z); -} - -void gl1_4_glPushMatrix(void *_glfuncs) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPushMatrix(); -} - -void gl1_4_glPopMatrix(void *_glfuncs) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPopMatrix(); -} - -void gl1_4_glOrtho(void *_glfuncs, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glOrtho(left, right, bottom, top, zNear, zFar); -} - -void gl1_4_glMultMatrixd(void *_glfuncs, const GLdouble* m) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultMatrixd(m); -} - -void gl1_4_glMultMatrixf(void *_glfuncs, const GLfloat* m) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultMatrixf(m); -} - -void gl1_4_glMatrixMode(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMatrixMode(mode); -} - -void gl1_4_glLoadMatrixd(void *_glfuncs, const GLdouble* m) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadMatrixd(m); -} - -void gl1_4_glLoadMatrixf(void *_glfuncs, const GLfloat* m) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadMatrixf(m); -} - -void gl1_4_glLoadIdentity(void *_glfuncs) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadIdentity(); -} - -void gl1_4_glFrustum(void *_glfuncs, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFrustum(left, right, bottom, top, zNear, zFar); -} - -GLboolean gl1_4_glIsList(void *_glfuncs, GLuint list) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsList(list); -} - -void gl1_4_glGetTexGeniv(void *_glfuncs, GLenum coord, GLenum pname, GLint* params) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexGeniv(coord, pname, params); -} - -void gl1_4_glGetTexGenfv(void *_glfuncs, GLenum coord, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexGenfv(coord, pname, params); -} - -void gl1_4_glGetTexGendv(void *_glfuncs, GLenum coord, GLenum pname, GLdouble* params) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexGendv(coord, pname, params); -} - -void gl1_4_glGetTexEnviv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexEnviv(target, pname, params); -} - -void gl1_4_glGetTexEnvfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexEnvfv(target, pname, params); -} - -void gl1_4_glGetPolygonStipple(void *_glfuncs, GLubyte* mask) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetPolygonStipple(mask); -} - -void gl1_4_glGetPixelMapusv(void *_glfuncs, GLenum glmap, GLushort* values) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetPixelMapusv(glmap, values); -} - -void gl1_4_glGetPixelMapuiv(void *_glfuncs, GLenum glmap, GLuint* values) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetPixelMapuiv(glmap, values); -} - -void gl1_4_glGetPixelMapfv(void *_glfuncs, GLenum glmap, GLfloat* values) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetPixelMapfv(glmap, values); -} - -void gl1_4_glGetMaterialiv(void *_glfuncs, GLenum face, GLenum pname, GLint* params) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMaterialiv(face, pname, params); -} - -void gl1_4_glGetMaterialfv(void *_glfuncs, GLenum face, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMaterialfv(face, pname, params); -} - -void gl1_4_glGetMapiv(void *_glfuncs, GLenum target, GLenum query, GLint* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMapiv(target, query, v); -} - -void gl1_4_glGetMapfv(void *_glfuncs, GLenum target, GLenum query, GLfloat* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMapfv(target, query, v); -} - -void gl1_4_glGetMapdv(void *_glfuncs, GLenum target, GLenum query, GLdouble* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMapdv(target, query, v); -} - -void gl1_4_glGetLightiv(void *_glfuncs, GLenum light, GLenum pname, GLint* params) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetLightiv(light, pname, params); -} - -void gl1_4_glGetLightfv(void *_glfuncs, GLenum light, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetLightfv(light, pname, params); -} - -void gl1_4_glGetClipPlane(void *_glfuncs, GLenum plane, GLdouble* equation) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetClipPlane(plane, equation); -} - -void gl1_4_glDrawPixels(void *_glfuncs, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawPixels(width, height, format, gltype, pixels); -} - -void gl1_4_glCopyPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum gltype) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyPixels(x, y, width, height, gltype); -} - -void gl1_4_glPixelMapusv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLushort* values) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelMapusv(glmap, mapsize, values); -} - -void gl1_4_glPixelMapuiv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLuint* values) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelMapuiv(glmap, mapsize, values); -} - -void gl1_4_glPixelMapfv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLfloat* values) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelMapfv(glmap, mapsize, values); -} - -void gl1_4_glPixelTransferi(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelTransferi(pname, param); -} - -void gl1_4_glPixelTransferf(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelTransferf(pname, param); -} - -void gl1_4_glPixelZoom(void *_glfuncs, GLfloat xfactor, GLfloat yfactor) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelZoom(xfactor, yfactor); -} - -void gl1_4_glAlphaFunc(void *_glfuncs, GLenum glfunc, GLfloat ref) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glAlphaFunc(glfunc, ref); -} - -void gl1_4_glEvalPoint2(void *_glfuncs, GLint i, GLint j) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalPoint2(i, j); -} - -void gl1_4_glEvalMesh2(void *_glfuncs, GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalMesh2(mode, i1, i2, j1, j2); -} - -void gl1_4_glEvalPoint1(void *_glfuncs, GLint i) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalPoint1(i); -} - -void gl1_4_glEvalMesh1(void *_glfuncs, GLenum mode, GLint i1, GLint i2) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalMesh1(mode, i1, i2); -} - -void gl1_4_glEvalCoord2fv(void *_glfuncs, const GLfloat* u) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord2fv(u); -} - -void gl1_4_glEvalCoord2f(void *_glfuncs, GLfloat u, GLfloat v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord2f(u, v); -} - -void gl1_4_glEvalCoord2dv(void *_glfuncs, const GLdouble* u) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord2dv(u); -} - -void gl1_4_glEvalCoord2d(void *_glfuncs, GLdouble u, GLdouble v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord2d(u, v); -} - -void gl1_4_glEvalCoord1fv(void *_glfuncs, const GLfloat* u) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord1fv(u); -} - -void gl1_4_glEvalCoord1f(void *_glfuncs, GLfloat u) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord1f(u); -} - -void gl1_4_glEvalCoord1dv(void *_glfuncs, const GLdouble* u) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord1dv(u); -} - -void gl1_4_glEvalCoord1d(void *_glfuncs, GLdouble u) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord1d(u); -} - -void gl1_4_glMapGrid2f(void *_glfuncs, GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMapGrid2f(un, u1, u2, vn, v1, v2); -} - -void gl1_4_glMapGrid2d(void *_glfuncs, GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMapGrid2d(un, u1, u2, vn, v1, v2); -} - -void gl1_4_glMapGrid1f(void *_glfuncs, GLint un, GLfloat u1, GLfloat u2) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMapGrid1f(un, u1, u2); -} - -void gl1_4_glMapGrid1d(void *_glfuncs, GLint un, GLdouble u1, GLdouble u2) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMapGrid1d(un, u1, u2); -} - -void gl1_4_glMap2f(void *_glfuncs, GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat* points) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMap2f(target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points); -} - -void gl1_4_glMap2d(void *_glfuncs, GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble* points) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMap2d(target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points); -} - -void gl1_4_glMap1f(void *_glfuncs, GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat* points) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMap1f(target, u1, u2, stride, order, points); -} - -void gl1_4_glMap1d(void *_glfuncs, GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble* points) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMap1d(target, u1, u2, stride, order, points); -} - -void gl1_4_glPushAttrib(void *_glfuncs, GLbitfield mask) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPushAttrib(mask); -} - -void gl1_4_glPopAttrib(void *_glfuncs) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPopAttrib(); -} - -void gl1_4_glAccum(void *_glfuncs, GLenum op, GLfloat value) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glAccum(op, value); -} - -void gl1_4_glIndexMask(void *_glfuncs, GLuint mask) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexMask(mask); -} - -void gl1_4_glClearIndex(void *_glfuncs, GLfloat c) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearIndex(c); -} - -void gl1_4_glClearAccum(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearAccum(red, green, blue, alpha); -} - -void gl1_4_glPushName(void *_glfuncs, GLuint name) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPushName(name); -} - -void gl1_4_glPopName(void *_glfuncs) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPopName(); -} - -void gl1_4_glPassThrough(void *_glfuncs, GLfloat token) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPassThrough(token); -} - -void gl1_4_glLoadName(void *_glfuncs, GLuint name) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadName(name); -} - -void gl1_4_glInitNames(void *_glfuncs) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glInitNames(); -} - -GLint gl1_4_glRenderMode(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glRenderMode(mode); -} - -void gl1_4_glSelectBuffer(void *_glfuncs, GLsizei size, GLuint* buffer) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSelectBuffer(size, buffer); -} - -void gl1_4_glFeedbackBuffer(void *_glfuncs, GLsizei size, GLenum gltype, GLfloat* buffer) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFeedbackBuffer(size, gltype, buffer); -} - -void gl1_4_glTexGeniv(void *_glfuncs, GLenum coord, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGeniv(coord, pname, params); -} - -void gl1_4_glTexGeni(void *_glfuncs, GLenum coord, GLenum pname, GLint param) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGeni(coord, pname, param); -} - -void gl1_4_glTexGenfv(void *_glfuncs, GLenum coord, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGenfv(coord, pname, params); -} - -void gl1_4_glTexGenf(void *_glfuncs, GLenum coord, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGenf(coord, pname, param); -} - -void gl1_4_glTexGendv(void *_glfuncs, GLenum coord, GLenum pname, const GLdouble* params) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGendv(coord, pname, params); -} - -void gl1_4_glTexGend(void *_glfuncs, GLenum coord, GLenum pname, GLdouble param) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGend(coord, pname, param); -} - -void gl1_4_glTexEnviv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexEnviv(target, pname, params); -} - -void gl1_4_glTexEnvi(void *_glfuncs, GLenum target, GLenum pname, GLint param) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexEnvi(target, pname, param); -} - -void gl1_4_glTexEnvfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexEnvfv(target, pname, params); -} - -void gl1_4_glTexEnvf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexEnvf(target, pname, param); -} - -void gl1_4_glShadeModel(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glShadeModel(mode); -} - -void gl1_4_glPolygonStipple(void *_glfuncs, const GLubyte* mask) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPolygonStipple(mask); -} - -void gl1_4_glMaterialiv(void *_glfuncs, GLenum face, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMaterialiv(face, pname, params); -} - -void gl1_4_glMateriali(void *_glfuncs, GLenum face, GLenum pname, GLint param) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMateriali(face, pname, param); -} - -void gl1_4_glMaterialfv(void *_glfuncs, GLenum face, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMaterialfv(face, pname, params); -} - -void gl1_4_glMaterialf(void *_glfuncs, GLenum face, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMaterialf(face, pname, param); -} - -void gl1_4_glLineStipple(void *_glfuncs, GLint factor, GLushort pattern) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLineStipple(factor, pattern); -} - -void gl1_4_glLightModeliv(void *_glfuncs, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightModeliv(pname, params); -} - -void gl1_4_glLightModeli(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightModeli(pname, param); -} - -void gl1_4_glLightModelfv(void *_glfuncs, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightModelfv(pname, params); -} - -void gl1_4_glLightModelf(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightModelf(pname, param); -} - -void gl1_4_glLightiv(void *_glfuncs, GLenum light, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightiv(light, pname, params); -} - -void gl1_4_glLighti(void *_glfuncs, GLenum light, GLenum pname, GLint param) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLighti(light, pname, param); -} - -void gl1_4_glLightfv(void *_glfuncs, GLenum light, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightfv(light, pname, params); -} - -void gl1_4_glLightf(void *_glfuncs, GLenum light, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightf(light, pname, param); -} - -void gl1_4_glFogiv(void *_glfuncs, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogiv(pname, params); -} - -void gl1_4_glFogi(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogi(pname, param); -} - -void gl1_4_glFogfv(void *_glfuncs, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogfv(pname, params); -} - -void gl1_4_glFogf(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogf(pname, param); -} - -void gl1_4_glColorMaterial(void *_glfuncs, GLenum face, GLenum mode) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorMaterial(face, mode); -} - -void gl1_4_glClipPlane(void *_glfuncs, GLenum plane, const GLdouble* equation) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClipPlane(plane, equation); -} - -void gl1_4_glVertex4sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4sv(v); -} - -void gl1_4_glVertex4s(void *_glfuncs, GLshort x, GLshort y, GLshort z, GLshort w) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4s(x, y, z, w); -} - -void gl1_4_glVertex4iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4iv(v); -} - -void gl1_4_glVertex4i(void *_glfuncs, GLint x, GLint y, GLint z, GLint w) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4i(x, y, z, w); -} - -void gl1_4_glVertex4fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4fv(v); -} - -void gl1_4_glVertex4f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z, GLfloat w) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4f(x, y, z, w); -} - -void gl1_4_glVertex4dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4dv(v); -} - -void gl1_4_glVertex4d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z, GLdouble w) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4d(x, y, z, w); -} - -void gl1_4_glVertex3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3sv(v); -} - -void gl1_4_glVertex3s(void *_glfuncs, GLshort x, GLshort y, GLshort z) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3s(x, y, z); -} - -void gl1_4_glVertex3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3iv(v); -} - -void gl1_4_glVertex3i(void *_glfuncs, GLint x, GLint y, GLint z) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3i(x, y, z); -} - -void gl1_4_glVertex3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3fv(v); -} - -void gl1_4_glVertex3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3f(x, y, z); -} - -void gl1_4_glVertex3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3dv(v); -} - -void gl1_4_glVertex3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3d(x, y, z); -} - -void gl1_4_glVertex2sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2sv(v); -} - -void gl1_4_glVertex2s(void *_glfuncs, GLshort x, GLshort y) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2s(x, y); -} - -void gl1_4_glVertex2iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2iv(v); -} - -void gl1_4_glVertex2i(void *_glfuncs, GLint x, GLint y) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2i(x, y); -} - -void gl1_4_glVertex2fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2fv(v); -} - -void gl1_4_glVertex2f(void *_glfuncs, GLfloat x, GLfloat y) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2f(x, y); -} - -void gl1_4_glVertex2dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2dv(v); -} - -void gl1_4_glVertex2d(void *_glfuncs, GLdouble x, GLdouble y) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2d(x, y); -} - -void gl1_4_glTexCoord4sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4sv(v); -} - -void gl1_4_glTexCoord4s(void *_glfuncs, GLshort s, GLshort t, GLshort r, GLshort q) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4s(s, t, r, q); -} - -void gl1_4_glTexCoord4iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4iv(v); -} - -void gl1_4_glTexCoord4i(void *_glfuncs, GLint s, GLint t, GLint r, GLint q) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4i(s, t, r, q); -} - -void gl1_4_glTexCoord4fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4fv(v); -} - -void gl1_4_glTexCoord4f(void *_glfuncs, GLfloat s, GLfloat t, GLfloat r, GLfloat q) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4f(s, t, r, q); -} - -void gl1_4_glTexCoord4dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4dv(v); -} - -void gl1_4_glTexCoord4d(void *_glfuncs, GLdouble s, GLdouble t, GLdouble r, GLdouble q) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4d(s, t, r, q); -} - -void gl1_4_glTexCoord3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3sv(v); -} - -void gl1_4_glTexCoord3s(void *_glfuncs, GLshort s, GLshort t, GLshort r) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3s(s, t, r); -} - -void gl1_4_glTexCoord3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3iv(v); -} - -void gl1_4_glTexCoord3i(void *_glfuncs, GLint s, GLint t, GLint r) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3i(s, t, r); -} - -void gl1_4_glTexCoord3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3fv(v); -} - -void gl1_4_glTexCoord3f(void *_glfuncs, GLfloat s, GLfloat t, GLfloat r) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3f(s, t, r); -} - -void gl1_4_glTexCoord3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3dv(v); -} - -void gl1_4_glTexCoord3d(void *_glfuncs, GLdouble s, GLdouble t, GLdouble r) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3d(s, t, r); -} - -void gl1_4_glTexCoord2sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2sv(v); -} - -void gl1_4_glTexCoord2s(void *_glfuncs, GLshort s, GLshort t) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2s(s, t); -} - -void gl1_4_glTexCoord2iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2iv(v); -} - -void gl1_4_glTexCoord2i(void *_glfuncs, GLint s, GLint t) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2i(s, t); -} - -void gl1_4_glTexCoord2fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2fv(v); -} - -void gl1_4_glTexCoord2f(void *_glfuncs, GLfloat s, GLfloat t) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2f(s, t); -} - -void gl1_4_glTexCoord2dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2dv(v); -} - -void gl1_4_glTexCoord2d(void *_glfuncs, GLdouble s, GLdouble t) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2d(s, t); -} - -void gl1_4_glTexCoord1sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1sv(v); -} - -void gl1_4_glTexCoord1s(void *_glfuncs, GLshort s) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1s(s); -} - -void gl1_4_glTexCoord1iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1iv(v); -} - -void gl1_4_glTexCoord1i(void *_glfuncs, GLint s) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1i(s); -} - -void gl1_4_glTexCoord1fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1fv(v); -} - -void gl1_4_glTexCoord1f(void *_glfuncs, GLfloat s) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1f(s); -} - -void gl1_4_glTexCoord1dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1dv(v); -} - -void gl1_4_glTexCoord1d(void *_glfuncs, GLdouble s) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1d(s); -} - -void gl1_4_glRectsv(void *_glfuncs, const GLshort* v1, const GLshort* v2) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectsv(v1, v2); -} - -void gl1_4_glRects(void *_glfuncs, GLshort x1, GLshort y1, GLshort x2, GLshort y2) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRects(x1, y1, x2, y2); -} - -void gl1_4_glRectiv(void *_glfuncs, const GLint* v1, const GLint* v2) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectiv(v1, v2); -} - -void gl1_4_glRecti(void *_glfuncs, GLint x1, GLint y1, GLint x2, GLint y2) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRecti(x1, y1, x2, y2); -} - -void gl1_4_glRectfv(void *_glfuncs, const GLfloat* v1, const GLfloat* v2) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectfv(v1, v2); -} - -void gl1_4_glRectf(void *_glfuncs, GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectf(x1, y1, x2, y2); -} - -void gl1_4_glRectdv(void *_glfuncs, const GLdouble* v1, const GLdouble* v2) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectdv(v1, v2); -} - -void gl1_4_glRectd(void *_glfuncs, GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectd(x1, y1, x2, y2); -} - -void gl1_4_glRasterPos4sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4sv(v); -} - -void gl1_4_glRasterPos4s(void *_glfuncs, GLshort x, GLshort y, GLshort z, GLshort w) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4s(x, y, z, w); -} - -void gl1_4_glRasterPos4iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4iv(v); -} - -void gl1_4_glRasterPos4i(void *_glfuncs, GLint x, GLint y, GLint z, GLint w) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4i(x, y, z, w); -} - -void gl1_4_glRasterPos4fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4fv(v); -} - -void gl1_4_glRasterPos4f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z, GLfloat w) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4f(x, y, z, w); -} - -void gl1_4_glRasterPos4dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4dv(v); -} - -void gl1_4_glRasterPos4d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z, GLdouble w) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4d(x, y, z, w); -} - -void gl1_4_glRasterPos3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3sv(v); -} - -void gl1_4_glRasterPos3s(void *_glfuncs, GLshort x, GLshort y, GLshort z) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3s(x, y, z); -} - -void gl1_4_glRasterPos3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3iv(v); -} - -void gl1_4_glRasterPos3i(void *_glfuncs, GLint x, GLint y, GLint z) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3i(x, y, z); -} - -void gl1_4_glRasterPos3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3fv(v); -} - -void gl1_4_glRasterPos3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3f(x, y, z); -} - -void gl1_4_glRasterPos3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3dv(v); -} - -void gl1_4_glRasterPos3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3d(x, y, z); -} - -void gl1_4_glRasterPos2sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2sv(v); -} - -void gl1_4_glRasterPos2s(void *_glfuncs, GLshort x, GLshort y) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2s(x, y); -} - -void gl1_4_glRasterPos2iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2iv(v); -} - -void gl1_4_glRasterPos2i(void *_glfuncs, GLint x, GLint y) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2i(x, y); -} - -void gl1_4_glRasterPos2fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2fv(v); -} - -void gl1_4_glRasterPos2f(void *_glfuncs, GLfloat x, GLfloat y) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2f(x, y); -} - -void gl1_4_glRasterPos2dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2dv(v); -} - -void gl1_4_glRasterPos2d(void *_glfuncs, GLdouble x, GLdouble y) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2d(x, y); -} - -void gl1_4_glNormal3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3sv(v); -} - -void gl1_4_glNormal3s(void *_glfuncs, GLshort nx, GLshort ny, GLshort nz) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3s(nx, ny, nz); -} - -void gl1_4_glNormal3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3iv(v); -} - -void gl1_4_glNormal3i(void *_glfuncs, GLint nx, GLint ny, GLint nz) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3i(nx, ny, nz); -} - -void gl1_4_glNormal3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3fv(v); -} - -void gl1_4_glNormal3f(void *_glfuncs, GLfloat nx, GLfloat ny, GLfloat nz) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3f(nx, ny, nz); -} - -void gl1_4_glNormal3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3dv(v); -} - -void gl1_4_glNormal3d(void *_glfuncs, GLdouble nx, GLdouble ny, GLdouble nz) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3d(nx, ny, nz); -} - -void gl1_4_glNormal3bv(void *_glfuncs, const GLbyte* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3bv(v); -} - -void gl1_4_glNormal3b(void *_glfuncs, GLbyte nx, GLbyte ny, GLbyte nz) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3b(nx, ny, nz); -} - -void gl1_4_glIndexsv(void *_glfuncs, const GLshort* c) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexsv(c); -} - -void gl1_4_glIndexs(void *_glfuncs, GLshort c) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexs(c); -} - -void gl1_4_glIndexiv(void *_glfuncs, const GLint* c) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexiv(c); -} - -void gl1_4_glIndexi(void *_glfuncs, GLint c) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexi(c); -} - -void gl1_4_glIndexfv(void *_glfuncs, const GLfloat* c) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexfv(c); -} - -void gl1_4_glIndexf(void *_glfuncs, GLfloat c) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexf(c); -} - -void gl1_4_glIndexdv(void *_glfuncs, const GLdouble* c) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexdv(c); -} - -void gl1_4_glIndexd(void *_glfuncs, GLdouble c) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexd(c); -} - -void gl1_4_glEnd(void *_glfuncs) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnd(); -} - -void gl1_4_glEdgeFlagv(void *_glfuncs, const GLboolean* flag) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEdgeFlagv(flag); -} - -void gl1_4_glEdgeFlag(void *_glfuncs, GLboolean flag) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEdgeFlag(flag); -} - -void gl1_4_glColor4usv(void *_glfuncs, const GLushort* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4usv(v); -} - -void gl1_4_glColor4us(void *_glfuncs, GLushort red, GLushort green, GLushort blue, GLushort alpha) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4us(red, green, blue, alpha); -} - -void gl1_4_glColor4uiv(void *_glfuncs, const GLuint* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4uiv(v); -} - -void gl1_4_glColor4ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue, GLuint alpha) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4ui(red, green, blue, alpha); -} - -void gl1_4_glColor4ubv(void *_glfuncs, const GLubyte* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4ubv(v); -} - -void gl1_4_glColor4ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4ub(red, green, blue, alpha); -} - -void gl1_4_glColor4sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4sv(v); -} - -void gl1_4_glColor4s(void *_glfuncs, GLshort red, GLshort green, GLshort blue, GLshort alpha) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4s(red, green, blue, alpha); -} - -void gl1_4_glColor4iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4iv(v); -} - -void gl1_4_glColor4i(void *_glfuncs, GLint red, GLint green, GLint blue, GLint alpha) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4i(red, green, blue, alpha); -} - -void gl1_4_glColor4fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4fv(v); -} - -void gl1_4_glColor4f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4f(red, green, blue, alpha); -} - -void gl1_4_glColor4dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4dv(v); -} - -void gl1_4_glColor4d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4d(red, green, blue, alpha); -} - -void gl1_4_glColor4bv(void *_glfuncs, const GLbyte* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4bv(v); -} - -void gl1_4_glColor4b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4b(red, green, blue, alpha); -} - -void gl1_4_glColor3usv(void *_glfuncs, const GLushort* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3usv(v); -} - -void gl1_4_glColor3us(void *_glfuncs, GLushort red, GLushort green, GLushort blue) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3us(red, green, blue); -} - -void gl1_4_glColor3uiv(void *_glfuncs, const GLuint* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3uiv(v); -} - -void gl1_4_glColor3ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3ui(red, green, blue); -} - -void gl1_4_glColor3ubv(void *_glfuncs, const GLubyte* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3ubv(v); -} - -void gl1_4_glColor3ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3ub(red, green, blue); -} - -void gl1_4_glColor3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3sv(v); -} - -void gl1_4_glColor3s(void *_glfuncs, GLshort red, GLshort green, GLshort blue) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3s(red, green, blue); -} - -void gl1_4_glColor3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3iv(v); -} - -void gl1_4_glColor3i(void *_glfuncs, GLint red, GLint green, GLint blue) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3i(red, green, blue); -} - -void gl1_4_glColor3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3fv(v); -} - -void gl1_4_glColor3f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3f(red, green, blue); -} - -void gl1_4_glColor3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3dv(v); -} - -void gl1_4_glColor3d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3d(red, green, blue); -} - -void gl1_4_glColor3bv(void *_glfuncs, const GLbyte* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3bv(v); -} - -void gl1_4_glColor3b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3b(red, green, blue); -} - -void gl1_4_glBitmap(void *_glfuncs, GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte* bitmap) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBitmap(width, height, xorig, yorig, xmove, ymove, bitmap); -} - -void gl1_4_glBegin(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBegin(mode); -} - -void gl1_4_glListBase(void *_glfuncs, GLuint base) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glListBase(base); -} - -GLuint gl1_4_glGenLists(void *_glfuncs, GLsizei range_) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGenLists(range_); -} - -void gl1_4_glDeleteLists(void *_glfuncs, GLuint list, GLsizei range_) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteLists(list, range_); -} - -void gl1_4_glCallLists(void *_glfuncs, GLsizei n, GLenum gltype, const GLvoid* lists) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCallLists(n, gltype, lists); -} - -void gl1_4_glCallList(void *_glfuncs, GLuint list) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCallList(list); -} - -void gl1_4_glEndList(void *_glfuncs) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndList(); -} - -void gl1_4_glNewList(void *_glfuncs, GLuint list, GLenum mode) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNewList(list, mode); -} - -void gl1_4_glPushClientAttrib(void *_glfuncs, GLbitfield mask) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPushClientAttrib(mask); -} - -void gl1_4_glPopClientAttrib(void *_glfuncs) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPopClientAttrib(); -} - -void gl1_4_glPrioritizeTextures(void *_glfuncs, GLsizei n, const GLuint* textures, const GLfloat* priorities) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPrioritizeTextures(n, textures, priorities); -} - -GLboolean gl1_4_glAreTexturesResident(void *_glfuncs, GLsizei n, const GLuint* textures, GLboolean* residences) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glAreTexturesResident(n, textures, residences); -} - -void gl1_4_glVertexPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexPointer(size, gltype, stride, pointer); -} - -void gl1_4_glTexCoordPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordPointer(size, gltype, stride, pointer); -} - -void gl1_4_glNormalPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormalPointer(gltype, stride, pointer); -} - -void gl1_4_glInterleavedArrays(void *_glfuncs, GLenum format, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glInterleavedArrays(format, stride, pointer); -} - -void gl1_4_glIndexPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexPointer(gltype, stride, pointer); -} - -void gl1_4_glEnableClientState(void *_glfuncs, GLenum array) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnableClientState(array); -} - -void gl1_4_glEdgeFlagPointer(void *_glfuncs, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEdgeFlagPointer(stride, pointer); -} - -void gl1_4_glDisableClientState(void *_glfuncs, GLenum array) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDisableClientState(array); -} - -void gl1_4_glColorPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorPointer(size, gltype, stride, pointer); -} - -void gl1_4_glArrayElement(void *_glfuncs, GLint i) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glArrayElement(i); -} - -void gl1_4_glResetMinmax(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glResetMinmax(target); -} - -void gl1_4_glResetHistogram(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glResetHistogram(target); -} - -void gl1_4_glMinmax(void *_glfuncs, GLenum target, GLenum internalFormat, GLboolean sink) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMinmax(target, internalFormat, sink); -} - -void gl1_4_glHistogram(void *_glfuncs, GLenum target, GLsizei width, GLenum internalFormat, GLboolean sink) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glHistogram(target, width, internalFormat, sink); -} - -void gl1_4_glGetMinmaxParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMinmaxParameteriv(target, pname, params); -} - -void gl1_4_glGetMinmaxParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMinmaxParameterfv(target, pname, params); -} - -void gl1_4_glGetMinmax(void *_glfuncs, GLenum target, GLboolean reset, GLenum format, GLenum gltype, GLvoid* values) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMinmax(target, reset, format, gltype, values); -} - -void gl1_4_glGetHistogramParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetHistogramParameteriv(target, pname, params); -} - -void gl1_4_glGetHistogramParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetHistogramParameterfv(target, pname, params); -} - -void gl1_4_glGetHistogram(void *_glfuncs, GLenum target, GLboolean reset, GLenum format, GLenum gltype, GLvoid* values) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetHistogram(target, reset, format, gltype, values); -} - -void gl1_4_glSeparableFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* row, const GLvoid* column) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSeparableFilter2D(target, internalFormat, width, height, format, gltype, row, column); -} - -void gl1_4_glGetSeparableFilter(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* row, GLvoid* column, GLvoid* span) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetSeparableFilter(target, format, gltype, row, column, span); -} - -void gl1_4_glGetConvolutionParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetConvolutionParameteriv(target, pname, params); -} - -void gl1_4_glGetConvolutionParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetConvolutionParameterfv(target, pname, params); -} - -void gl1_4_glGetConvolutionFilter(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* image) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetConvolutionFilter(target, format, gltype, image); -} - -void gl1_4_glCopyConvolutionFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyConvolutionFilter2D(target, internalFormat, x, y, width, height); -} - -void gl1_4_glCopyConvolutionFilter1D(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyConvolutionFilter1D(target, internalFormat, x, y, width); -} - -void gl1_4_glConvolutionParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionParameteriv(target, pname, params); -} - -void gl1_4_glConvolutionParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint params) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionParameteri(target, pname, params); -} - -void gl1_4_glConvolutionParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionParameterfv(target, pname, params); -} - -void gl1_4_glConvolutionParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat params) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionParameterf(target, pname, params); -} - -void gl1_4_glConvolutionFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* image) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionFilter2D(target, internalFormat, width, height, format, gltype, image); -} - -void gl1_4_glConvolutionFilter1D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum gltype, const GLvoid* image) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionFilter1D(target, internalFormat, width, format, gltype, image); -} - -void gl1_4_glCopyColorSubTable(void *_glfuncs, GLenum target, GLsizei start, GLint x, GLint y, GLsizei width) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyColorSubTable(target, start, x, y, width); -} - -void gl1_4_glColorSubTable(void *_glfuncs, GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum gltype, const GLvoid* data) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorSubTable(target, start, count, format, gltype, data); -} - -void gl1_4_glGetColorTableParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetColorTableParameteriv(target, pname, params); -} - -void gl1_4_glGetColorTableParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetColorTableParameterfv(target, pname, params); -} - -void gl1_4_glGetColorTable(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* table) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetColorTable(target, format, gltype, table); -} - -void gl1_4_glCopyColorTable(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyColorTable(target, internalFormat, x, y, width); -} - -void gl1_4_glColorTableParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorTableParameteriv(target, pname, params); -} - -void gl1_4_glColorTableParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorTableParameterfv(target, pname, params); -} - -void gl1_4_glColorTable(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum gltype, const GLvoid* table) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorTable(target, internalFormat, width, format, gltype, table); -} - -void gl1_4_glMultTransposeMatrixd(void *_glfuncs, const GLdouble* m) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultTransposeMatrixd(m); -} - -void gl1_4_glMultTransposeMatrixf(void *_glfuncs, const GLfloat* m) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultTransposeMatrixf(m); -} - -void gl1_4_glLoadTransposeMatrixd(void *_glfuncs, const GLdouble* m) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadTransposeMatrixd(m); -} - -void gl1_4_glLoadTransposeMatrixf(void *_glfuncs, const GLfloat* m) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadTransposeMatrixf(m); -} - -void gl1_4_glMultiTexCoord4sv(void *_glfuncs, GLenum target, const GLshort* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4sv(target, v); -} - -void gl1_4_glMultiTexCoord4s(void *_glfuncs, GLenum target, GLshort s, GLshort t, GLshort r, GLshort q) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4s(target, s, t, r, q); -} - -void gl1_4_glMultiTexCoord4iv(void *_glfuncs, GLenum target, const GLint* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4iv(target, v); -} - -void gl1_4_glMultiTexCoord4i(void *_glfuncs, GLenum target, GLint s, GLint t, GLint r, GLint q) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4i(target, s, t, r, q); -} - -void gl1_4_glMultiTexCoord4fv(void *_glfuncs, GLenum target, const GLfloat* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4fv(target, v); -} - -void gl1_4_glMultiTexCoord4f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4f(target, s, t, r, q); -} - -void gl1_4_glMultiTexCoord4dv(void *_glfuncs, GLenum target, const GLdouble* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4dv(target, v); -} - -void gl1_4_glMultiTexCoord4d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4d(target, s, t, r, q); -} - -void gl1_4_glMultiTexCoord3sv(void *_glfuncs, GLenum target, const GLshort* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3sv(target, v); -} - -void gl1_4_glMultiTexCoord3s(void *_glfuncs, GLenum target, GLshort s, GLshort t, GLshort r) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3s(target, s, t, r); -} - -void gl1_4_glMultiTexCoord3iv(void *_glfuncs, GLenum target, const GLint* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3iv(target, v); -} - -void gl1_4_glMultiTexCoord3i(void *_glfuncs, GLenum target, GLint s, GLint t, GLint r) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3i(target, s, t, r); -} - -void gl1_4_glMultiTexCoord3fv(void *_glfuncs, GLenum target, const GLfloat* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3fv(target, v); -} - -void gl1_4_glMultiTexCoord3f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t, GLfloat r) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3f(target, s, t, r); -} - -void gl1_4_glMultiTexCoord3dv(void *_glfuncs, GLenum target, const GLdouble* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3dv(target, v); -} - -void gl1_4_glMultiTexCoord3d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t, GLdouble r) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3d(target, s, t, r); -} - -void gl1_4_glMultiTexCoord2sv(void *_glfuncs, GLenum target, const GLshort* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2sv(target, v); -} - -void gl1_4_glMultiTexCoord2s(void *_glfuncs, GLenum target, GLshort s, GLshort t) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2s(target, s, t); -} - -void gl1_4_glMultiTexCoord2iv(void *_glfuncs, GLenum target, const GLint* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2iv(target, v); -} - -void gl1_4_glMultiTexCoord2i(void *_glfuncs, GLenum target, GLint s, GLint t) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2i(target, s, t); -} - -void gl1_4_glMultiTexCoord2fv(void *_glfuncs, GLenum target, const GLfloat* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2fv(target, v); -} - -void gl1_4_glMultiTexCoord2f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2f(target, s, t); -} - -void gl1_4_glMultiTexCoord2dv(void *_glfuncs, GLenum target, const GLdouble* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2dv(target, v); -} - -void gl1_4_glMultiTexCoord2d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2d(target, s, t); -} - -void gl1_4_glMultiTexCoord1sv(void *_glfuncs, GLenum target, const GLshort* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1sv(target, v); -} - -void gl1_4_glMultiTexCoord1s(void *_glfuncs, GLenum target, GLshort s) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1s(target, s); -} - -void gl1_4_glMultiTexCoord1iv(void *_glfuncs, GLenum target, const GLint* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1iv(target, v); -} - -void gl1_4_glMultiTexCoord1i(void *_glfuncs, GLenum target, GLint s) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1i(target, s); -} - -void gl1_4_glMultiTexCoord1fv(void *_glfuncs, GLenum target, const GLfloat* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1fv(target, v); -} - -void gl1_4_glMultiTexCoord1f(void *_glfuncs, GLenum target, GLfloat s) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1f(target, s); -} - -void gl1_4_glMultiTexCoord1dv(void *_glfuncs, GLenum target, const GLdouble* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1dv(target, v); -} - -void gl1_4_glMultiTexCoord1d(void *_glfuncs, GLenum target, GLdouble s) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1d(target, s); -} - -void gl1_4_glClientActiveTexture(void *_glfuncs, GLenum texture) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClientActiveTexture(texture); -} - -void gl1_4_glWindowPos3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3sv(v); -} - -void gl1_4_glWindowPos3s(void *_glfuncs, GLshort x, GLshort y, GLshort z) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3s(x, y, z); -} - -void gl1_4_glWindowPos3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3iv(v); -} - -void gl1_4_glWindowPos3i(void *_glfuncs, GLint x, GLint y, GLint z) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3i(x, y, z); -} - -void gl1_4_glWindowPos3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3fv(v); -} - -void gl1_4_glWindowPos3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3f(x, y, z); -} - -void gl1_4_glWindowPos3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3dv(v); -} - -void gl1_4_glWindowPos3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3d(x, y, z); -} - -void gl1_4_glWindowPos2sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2sv(v); -} - -void gl1_4_glWindowPos2s(void *_glfuncs, GLshort x, GLshort y) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2s(x, y); -} - -void gl1_4_glWindowPos2iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2iv(v); -} - -void gl1_4_glWindowPos2i(void *_glfuncs, GLint x, GLint y) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2i(x, y); -} - -void gl1_4_glWindowPos2fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2fv(v); -} - -void gl1_4_glWindowPos2f(void *_glfuncs, GLfloat x, GLfloat y) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2f(x, y); -} - -void gl1_4_glWindowPos2dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2dv(v); -} - -void gl1_4_glWindowPos2d(void *_glfuncs, GLdouble x, GLdouble y) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2d(x, y); -} - -void gl1_4_glSecondaryColorPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColorPointer(size, gltype, stride, pointer); -} - -void gl1_4_glSecondaryColor3usv(void *_glfuncs, const GLushort* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3usv(v); -} - -void gl1_4_glSecondaryColor3us(void *_glfuncs, GLushort red, GLushort green, GLushort blue) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3us(red, green, blue); -} - -void gl1_4_glSecondaryColor3uiv(void *_glfuncs, const GLuint* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3uiv(v); -} - -void gl1_4_glSecondaryColor3ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3ui(red, green, blue); -} - -void gl1_4_glSecondaryColor3ubv(void *_glfuncs, const GLubyte* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3ubv(v); -} - -void gl1_4_glSecondaryColor3ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3ub(red, green, blue); -} - -void gl1_4_glSecondaryColor3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3sv(v); -} - -void gl1_4_glSecondaryColor3s(void *_glfuncs, GLshort red, GLshort green, GLshort blue) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3s(red, green, blue); -} - -void gl1_4_glSecondaryColor3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3iv(v); -} - -void gl1_4_glSecondaryColor3i(void *_glfuncs, GLint red, GLint green, GLint blue) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3i(red, green, blue); -} - -void gl1_4_glSecondaryColor3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3fv(v); -} - -void gl1_4_glSecondaryColor3f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3f(red, green, blue); -} - -void gl1_4_glSecondaryColor3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3dv(v); -} - -void gl1_4_glSecondaryColor3d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3d(red, green, blue); -} - -void gl1_4_glSecondaryColor3bv(void *_glfuncs, const GLbyte* v) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3bv(v); -} - -void gl1_4_glSecondaryColor3b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3b(red, green, blue); -} - -void gl1_4_glFogCoordPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogCoordPointer(gltype, stride, pointer); -} - -void gl1_4_glFogCoorddv(void *_glfuncs, const GLdouble* coord) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogCoorddv(coord); -} - -void gl1_4_glFogCoordd(void *_glfuncs, GLdouble coord) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogCoordd(coord); -} - -void gl1_4_glFogCoordfv(void *_glfuncs, const GLfloat* coord) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogCoordfv(coord); -} - -void gl1_4_glFogCoordf(void *_glfuncs, GLfloat coord) -{ - QOpenGLFunctions_1_4* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogCoordf(coord); -} - diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/1.4/funcs.h b/Godeps/_workspace/src/github.com/obscuren/qml/gl/1.4/funcs.h deleted file mode 100644 index ea657e0801..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/1.4/funcs.h +++ /dev/null @@ -1,504 +0,0 @@ - -// ** file automatically generated by glgen -- do not edit manually ** - -#ifndef __cplusplus -#include -#include -typedef unsigned int GLenum; -typedef unsigned char GLboolean; -typedef unsigned int GLbitfield; -typedef void GLvoid; -typedef char GLchar; -typedef signed char GLbyte; /* 1-byte signed */ -typedef short GLshort; /* 2-byte signed */ -typedef int GLint; /* 4-byte signed */ -typedef unsigned char GLubyte; /* 1-byte unsigned */ -typedef unsigned short GLushort; /* 2-byte unsigned */ -typedef unsigned int GLuint; /* 4-byte unsigned */ -typedef int GLsizei; /* 4-byte signed */ -typedef float GLfloat; /* single precision float */ -typedef float GLclampf; /* single precision float in [0,1] */ -typedef double GLdouble; /* double precision float */ -typedef double GLclampd; /* double precision float in [0,1] */ -typedef int64_t GLint64; -typedef uint64_t GLuint64; -typedef ptrdiff_t GLintptr; -typedef ptrdiff_t GLsizeiptr; -typedef ptrdiff_t GLintptrARB; -typedef ptrdiff_t GLsizeiptrARB; -typedef struct __GLsync *GLsync; -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -void *gl1_4_funcs(); - -void gl1_4_glViewport(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height); -void gl1_4_glDepthRange(void *_glfuncs, GLdouble nearVal, GLdouble farVal); -GLboolean gl1_4_glIsEnabled(void *_glfuncs, GLenum cap); -void gl1_4_glGetTexLevelParameteriv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLint* params); -void gl1_4_glGetTexLevelParameterfv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLfloat* params); -void gl1_4_glGetTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl1_4_glGetTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl1_4_glGetTexImage(void *_glfuncs, GLenum target, GLint level, GLenum format, GLenum gltype, GLvoid* pixels); -void gl1_4_glGetIntegerv(void *_glfuncs, GLenum pname, GLint* params); -void gl1_4_glGetFloatv(void *_glfuncs, GLenum pname, GLfloat* params); -GLenum gl1_4_glGetError(void *_glfuncs); -void gl1_4_glGetDoublev(void *_glfuncs, GLenum pname, GLdouble* params); -void gl1_4_glGetBooleanv(void *_glfuncs, GLenum pname, GLboolean* params); -void gl1_4_glReadPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum gltype, GLvoid* pixels); -void gl1_4_glReadBuffer(void *_glfuncs, GLenum mode); -void gl1_4_glPixelStorei(void *_glfuncs, GLenum pname, GLint param); -void gl1_4_glPixelStoref(void *_glfuncs, GLenum pname, GLfloat param); -void gl1_4_glDepthFunc(void *_glfuncs, GLenum glfunc); -void gl1_4_glStencilOp(void *_glfuncs, GLenum fail, GLenum zfail, GLenum zpass); -void gl1_4_glStencilFunc(void *_glfuncs, GLenum glfunc, GLint ref, GLuint mask); -void gl1_4_glLogicOp(void *_glfuncs, GLenum opcode); -void gl1_4_glBlendFunc(void *_glfuncs, GLenum sfactor, GLenum dfactor); -void gl1_4_glFlush(void *_glfuncs); -void gl1_4_glFinish(void *_glfuncs); -void gl1_4_glEnable(void *_glfuncs, GLenum cap); -void gl1_4_glDisable(void *_glfuncs, GLenum cap); -void gl1_4_glDepthMask(void *_glfuncs, GLboolean flag); -void gl1_4_glColorMask(void *_glfuncs, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); -void gl1_4_glStencilMask(void *_glfuncs, GLuint mask); -void gl1_4_glClearDepth(void *_glfuncs, GLdouble depth); -void gl1_4_glClearStencil(void *_glfuncs, GLint s); -void gl1_4_glClearColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl1_4_glClear(void *_glfuncs, GLbitfield mask); -void gl1_4_glDrawBuffer(void *_glfuncs, GLenum mode); -void gl1_4_glTexImage2D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl1_4_glTexImage1D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl1_4_glTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl1_4_glTexParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint param); -void gl1_4_glTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params); -void gl1_4_glTexParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param); -void gl1_4_glScissor(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height); -void gl1_4_glPolygonMode(void *_glfuncs, GLenum face, GLenum mode); -void gl1_4_glPointSize(void *_glfuncs, GLfloat size); -void gl1_4_glLineWidth(void *_glfuncs, GLfloat width); -void gl1_4_glHint(void *_glfuncs, GLenum target, GLenum mode); -void gl1_4_glFrontFace(void *_glfuncs, GLenum mode); -void gl1_4_glCullFace(void *_glfuncs, GLenum mode); -void gl1_4_glIndexubv(void *_glfuncs, const GLubyte* c); -void gl1_4_glIndexub(void *_glfuncs, GLubyte c); -GLboolean gl1_4_glIsTexture(void *_glfuncs, GLuint texture); -void gl1_4_glGenTextures(void *_glfuncs, GLsizei n, GLuint* textures); -void gl1_4_glDeleteTextures(void *_glfuncs, GLsizei n, const GLuint* textures); -void gl1_4_glBindTexture(void *_glfuncs, GLenum target, GLuint texture); -void gl1_4_glTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl1_4_glTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl1_4_glCopyTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -void gl1_4_glCopyTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -void gl1_4_glCopyTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -void gl1_4_glCopyTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border); -void gl1_4_glPolygonOffset(void *_glfuncs, GLfloat factor, GLfloat units); -void gl1_4_glDrawElements(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices); -void gl1_4_glDrawArrays(void *_glfuncs, GLenum mode, GLint first, GLsizei count); -void gl1_4_glCopyTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -void gl1_4_glTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl1_4_glTexImage3D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl1_4_glDrawRangeElements(void *_glfuncs, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum gltype, const GLvoid* indices); -void gl1_4_glBlendEquation(void *_glfuncs, GLenum mode); -void gl1_4_glBlendColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl1_4_glGetCompressedTexImage(void *_glfuncs, GLenum target, GLint level, GLvoid* img); -void gl1_4_glCompressedTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid* data); -void gl1_4_glCompressedTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data); -void gl1_4_glCompressedTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data); -void gl1_4_glCompressedTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid* data); -void gl1_4_glCompressedTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data); -void gl1_4_glCompressedTexImage3D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data); -void gl1_4_glSampleCoverage(void *_glfuncs, GLfloat value, GLboolean invert); -void gl1_4_glActiveTexture(void *_glfuncs, GLenum texture); -void gl1_4_glPointParameteriv(void *_glfuncs, GLenum pname, const GLint* params); -void gl1_4_glPointParameteri(void *_glfuncs, GLenum pname, GLint param); -void gl1_4_glPointParameterfv(void *_glfuncs, GLenum pname, const GLfloat* params); -void gl1_4_glPointParameterf(void *_glfuncs, GLenum pname, GLfloat param); -void gl1_4_glMultiDrawArrays(void *_glfuncs, GLenum mode, const GLint* first, const GLsizei* count, GLsizei drawcount); -void gl1_4_glBlendFuncSeparate(void *_glfuncs, GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -void gl1_4_glTranslatef(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl1_4_glTranslated(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl1_4_glScalef(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl1_4_glScaled(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl1_4_glRotatef(void *_glfuncs, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); -void gl1_4_glRotated(void *_glfuncs, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); -void gl1_4_glPushMatrix(void *_glfuncs); -void gl1_4_glPopMatrix(void *_glfuncs); -void gl1_4_glOrtho(void *_glfuncs, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -void gl1_4_glMultMatrixd(void *_glfuncs, const GLdouble* m); -void gl1_4_glMultMatrixf(void *_glfuncs, const GLfloat* m); -void gl1_4_glMatrixMode(void *_glfuncs, GLenum mode); -void gl1_4_glLoadMatrixd(void *_glfuncs, const GLdouble* m); -void gl1_4_glLoadMatrixf(void *_glfuncs, const GLfloat* m); -void gl1_4_glLoadIdentity(void *_glfuncs); -void gl1_4_glFrustum(void *_glfuncs, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -GLboolean gl1_4_glIsList(void *_glfuncs, GLuint list); -void gl1_4_glGetTexGeniv(void *_glfuncs, GLenum coord, GLenum pname, GLint* params); -void gl1_4_glGetTexGenfv(void *_glfuncs, GLenum coord, GLenum pname, GLfloat* params); -void gl1_4_glGetTexGendv(void *_glfuncs, GLenum coord, GLenum pname, GLdouble* params); -void gl1_4_glGetTexEnviv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl1_4_glGetTexEnvfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl1_4_glGetPolygonStipple(void *_glfuncs, GLubyte* mask); -void gl1_4_glGetPixelMapusv(void *_glfuncs, GLenum glmap, GLushort* values); -void gl1_4_glGetPixelMapuiv(void *_glfuncs, GLenum glmap, GLuint* values); -void gl1_4_glGetPixelMapfv(void *_glfuncs, GLenum glmap, GLfloat* values); -void gl1_4_glGetMaterialiv(void *_glfuncs, GLenum face, GLenum pname, GLint* params); -void gl1_4_glGetMaterialfv(void *_glfuncs, GLenum face, GLenum pname, GLfloat* params); -void gl1_4_glGetMapiv(void *_glfuncs, GLenum target, GLenum query, GLint* v); -void gl1_4_glGetMapfv(void *_glfuncs, GLenum target, GLenum query, GLfloat* v); -void gl1_4_glGetMapdv(void *_glfuncs, GLenum target, GLenum query, GLdouble* v); -void gl1_4_glGetLightiv(void *_glfuncs, GLenum light, GLenum pname, GLint* params); -void gl1_4_glGetLightfv(void *_glfuncs, GLenum light, GLenum pname, GLfloat* params); -void gl1_4_glGetClipPlane(void *_glfuncs, GLenum plane, GLdouble* equation); -void gl1_4_glDrawPixels(void *_glfuncs, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl1_4_glCopyPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum gltype); -void gl1_4_glPixelMapusv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLushort* values); -void gl1_4_glPixelMapuiv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLuint* values); -void gl1_4_glPixelMapfv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLfloat* values); -void gl1_4_glPixelTransferi(void *_glfuncs, GLenum pname, GLint param); -void gl1_4_glPixelTransferf(void *_glfuncs, GLenum pname, GLfloat param); -void gl1_4_glPixelZoom(void *_glfuncs, GLfloat xfactor, GLfloat yfactor); -void gl1_4_glAlphaFunc(void *_glfuncs, GLenum glfunc, GLfloat ref); -void gl1_4_glEvalPoint2(void *_glfuncs, GLint i, GLint j); -void gl1_4_glEvalMesh2(void *_glfuncs, GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2); -void gl1_4_glEvalPoint1(void *_glfuncs, GLint i); -void gl1_4_glEvalMesh1(void *_glfuncs, GLenum mode, GLint i1, GLint i2); -void gl1_4_glEvalCoord2fv(void *_glfuncs, const GLfloat* u); -void gl1_4_glEvalCoord2f(void *_glfuncs, GLfloat u, GLfloat v); -void gl1_4_glEvalCoord2dv(void *_glfuncs, const GLdouble* u); -void gl1_4_glEvalCoord2d(void *_glfuncs, GLdouble u, GLdouble v); -void gl1_4_glEvalCoord1fv(void *_glfuncs, const GLfloat* u); -void gl1_4_glEvalCoord1f(void *_glfuncs, GLfloat u); -void gl1_4_glEvalCoord1dv(void *_glfuncs, const GLdouble* u); -void gl1_4_glEvalCoord1d(void *_glfuncs, GLdouble u); -void gl1_4_glMapGrid2f(void *_glfuncs, GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2); -void gl1_4_glMapGrid2d(void *_glfuncs, GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2); -void gl1_4_glMapGrid1f(void *_glfuncs, GLint un, GLfloat u1, GLfloat u2); -void gl1_4_glMapGrid1d(void *_glfuncs, GLint un, GLdouble u1, GLdouble u2); -void gl1_4_glMap2f(void *_glfuncs, GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat* points); -void gl1_4_glMap2d(void *_glfuncs, GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble* points); -void gl1_4_glMap1f(void *_glfuncs, GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat* points); -void gl1_4_glMap1d(void *_glfuncs, GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble* points); -void gl1_4_glPushAttrib(void *_glfuncs, GLbitfield mask); -void gl1_4_glPopAttrib(void *_glfuncs); -void gl1_4_glAccum(void *_glfuncs, GLenum op, GLfloat value); -void gl1_4_glIndexMask(void *_glfuncs, GLuint mask); -void gl1_4_glClearIndex(void *_glfuncs, GLfloat c); -void gl1_4_glClearAccum(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl1_4_glPushName(void *_glfuncs, GLuint name); -void gl1_4_glPopName(void *_glfuncs); -void gl1_4_glPassThrough(void *_glfuncs, GLfloat token); -void gl1_4_glLoadName(void *_glfuncs, GLuint name); -void gl1_4_glInitNames(void *_glfuncs); -GLint gl1_4_glRenderMode(void *_glfuncs, GLenum mode); -void gl1_4_glSelectBuffer(void *_glfuncs, GLsizei size, GLuint* buffer); -void gl1_4_glFeedbackBuffer(void *_glfuncs, GLsizei size, GLenum gltype, GLfloat* buffer); -void gl1_4_glTexGeniv(void *_glfuncs, GLenum coord, GLenum pname, const GLint* params); -void gl1_4_glTexGeni(void *_glfuncs, GLenum coord, GLenum pname, GLint param); -void gl1_4_glTexGenfv(void *_glfuncs, GLenum coord, GLenum pname, const GLfloat* params); -void gl1_4_glTexGenf(void *_glfuncs, GLenum coord, GLenum pname, GLfloat param); -void gl1_4_glTexGendv(void *_glfuncs, GLenum coord, GLenum pname, const GLdouble* params); -void gl1_4_glTexGend(void *_glfuncs, GLenum coord, GLenum pname, GLdouble param); -void gl1_4_glTexEnviv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl1_4_glTexEnvi(void *_glfuncs, GLenum target, GLenum pname, GLint param); -void gl1_4_glTexEnvfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params); -void gl1_4_glTexEnvf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param); -void gl1_4_glShadeModel(void *_glfuncs, GLenum mode); -void gl1_4_glPolygonStipple(void *_glfuncs, const GLubyte* mask); -void gl1_4_glMaterialiv(void *_glfuncs, GLenum face, GLenum pname, const GLint* params); -void gl1_4_glMateriali(void *_glfuncs, GLenum face, GLenum pname, GLint param); -void gl1_4_glMaterialfv(void *_glfuncs, GLenum face, GLenum pname, const GLfloat* params); -void gl1_4_glMaterialf(void *_glfuncs, GLenum face, GLenum pname, GLfloat param); -void gl1_4_glLineStipple(void *_glfuncs, GLint factor, GLushort pattern); -void gl1_4_glLightModeliv(void *_glfuncs, GLenum pname, const GLint* params); -void gl1_4_glLightModeli(void *_glfuncs, GLenum pname, GLint param); -void gl1_4_glLightModelfv(void *_glfuncs, GLenum pname, const GLfloat* params); -void gl1_4_glLightModelf(void *_glfuncs, GLenum pname, GLfloat param); -void gl1_4_glLightiv(void *_glfuncs, GLenum light, GLenum pname, const GLint* params); -void gl1_4_glLighti(void *_glfuncs, GLenum light, GLenum pname, GLint param); -void gl1_4_glLightfv(void *_glfuncs, GLenum light, GLenum pname, const GLfloat* params); -void gl1_4_glLightf(void *_glfuncs, GLenum light, GLenum pname, GLfloat param); -void gl1_4_glFogiv(void *_glfuncs, GLenum pname, const GLint* params); -void gl1_4_glFogi(void *_glfuncs, GLenum pname, GLint param); -void gl1_4_glFogfv(void *_glfuncs, GLenum pname, const GLfloat* params); -void gl1_4_glFogf(void *_glfuncs, GLenum pname, GLfloat param); -void gl1_4_glColorMaterial(void *_glfuncs, GLenum face, GLenum mode); -void gl1_4_glClipPlane(void *_glfuncs, GLenum plane, const GLdouble* equation); -void gl1_4_glVertex4sv(void *_glfuncs, const GLshort* v); -void gl1_4_glVertex4s(void *_glfuncs, GLshort x, GLshort y, GLshort z, GLshort w); -void gl1_4_glVertex4iv(void *_glfuncs, const GLint* v); -void gl1_4_glVertex4i(void *_glfuncs, GLint x, GLint y, GLint z, GLint w); -void gl1_4_glVertex4fv(void *_glfuncs, const GLfloat* v); -void gl1_4_glVertex4f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -void gl1_4_glVertex4dv(void *_glfuncs, const GLdouble* v); -void gl1_4_glVertex4d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -void gl1_4_glVertex3sv(void *_glfuncs, const GLshort* v); -void gl1_4_glVertex3s(void *_glfuncs, GLshort x, GLshort y, GLshort z); -void gl1_4_glVertex3iv(void *_glfuncs, const GLint* v); -void gl1_4_glVertex3i(void *_glfuncs, GLint x, GLint y, GLint z); -void gl1_4_glVertex3fv(void *_glfuncs, const GLfloat* v); -void gl1_4_glVertex3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl1_4_glVertex3dv(void *_glfuncs, const GLdouble* v); -void gl1_4_glVertex3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl1_4_glVertex2sv(void *_glfuncs, const GLshort* v); -void gl1_4_glVertex2s(void *_glfuncs, GLshort x, GLshort y); -void gl1_4_glVertex2iv(void *_glfuncs, const GLint* v); -void gl1_4_glVertex2i(void *_glfuncs, GLint x, GLint y); -void gl1_4_glVertex2fv(void *_glfuncs, const GLfloat* v); -void gl1_4_glVertex2f(void *_glfuncs, GLfloat x, GLfloat y); -void gl1_4_glVertex2dv(void *_glfuncs, const GLdouble* v); -void gl1_4_glVertex2d(void *_glfuncs, GLdouble x, GLdouble y); -void gl1_4_glTexCoord4sv(void *_glfuncs, const GLshort* v); -void gl1_4_glTexCoord4s(void *_glfuncs, GLshort s, GLshort t, GLshort r, GLshort q); -void gl1_4_glTexCoord4iv(void *_glfuncs, const GLint* v); -void gl1_4_glTexCoord4i(void *_glfuncs, GLint s, GLint t, GLint r, GLint q); -void gl1_4_glTexCoord4fv(void *_glfuncs, const GLfloat* v); -void gl1_4_glTexCoord4f(void *_glfuncs, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -void gl1_4_glTexCoord4dv(void *_glfuncs, const GLdouble* v); -void gl1_4_glTexCoord4d(void *_glfuncs, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -void gl1_4_glTexCoord3sv(void *_glfuncs, const GLshort* v); -void gl1_4_glTexCoord3s(void *_glfuncs, GLshort s, GLshort t, GLshort r); -void gl1_4_glTexCoord3iv(void *_glfuncs, const GLint* v); -void gl1_4_glTexCoord3i(void *_glfuncs, GLint s, GLint t, GLint r); -void gl1_4_glTexCoord3fv(void *_glfuncs, const GLfloat* v); -void gl1_4_glTexCoord3f(void *_glfuncs, GLfloat s, GLfloat t, GLfloat r); -void gl1_4_glTexCoord3dv(void *_glfuncs, const GLdouble* v); -void gl1_4_glTexCoord3d(void *_glfuncs, GLdouble s, GLdouble t, GLdouble r); -void gl1_4_glTexCoord2sv(void *_glfuncs, const GLshort* v); -void gl1_4_glTexCoord2s(void *_glfuncs, GLshort s, GLshort t); -void gl1_4_glTexCoord2iv(void *_glfuncs, const GLint* v); -void gl1_4_glTexCoord2i(void *_glfuncs, GLint s, GLint t); -void gl1_4_glTexCoord2fv(void *_glfuncs, const GLfloat* v); -void gl1_4_glTexCoord2f(void *_glfuncs, GLfloat s, GLfloat t); -void gl1_4_glTexCoord2dv(void *_glfuncs, const GLdouble* v); -void gl1_4_glTexCoord2d(void *_glfuncs, GLdouble s, GLdouble t); -void gl1_4_glTexCoord1sv(void *_glfuncs, const GLshort* v); -void gl1_4_glTexCoord1s(void *_glfuncs, GLshort s); -void gl1_4_glTexCoord1iv(void *_glfuncs, const GLint* v); -void gl1_4_glTexCoord1i(void *_glfuncs, GLint s); -void gl1_4_glTexCoord1fv(void *_glfuncs, const GLfloat* v); -void gl1_4_glTexCoord1f(void *_glfuncs, GLfloat s); -void gl1_4_glTexCoord1dv(void *_glfuncs, const GLdouble* v); -void gl1_4_glTexCoord1d(void *_glfuncs, GLdouble s); -void gl1_4_glRectsv(void *_glfuncs, const GLshort* v1, const GLshort* v2); -void gl1_4_glRects(void *_glfuncs, GLshort x1, GLshort y1, GLshort x2, GLshort y2); -void gl1_4_glRectiv(void *_glfuncs, const GLint* v1, const GLint* v2); -void gl1_4_glRecti(void *_glfuncs, GLint x1, GLint y1, GLint x2, GLint y2); -void gl1_4_glRectfv(void *_glfuncs, const GLfloat* v1, const GLfloat* v2); -void gl1_4_glRectf(void *_glfuncs, GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2); -void gl1_4_glRectdv(void *_glfuncs, const GLdouble* v1, const GLdouble* v2); -void gl1_4_glRectd(void *_glfuncs, GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2); -void gl1_4_glRasterPos4sv(void *_glfuncs, const GLshort* v); -void gl1_4_glRasterPos4s(void *_glfuncs, GLshort x, GLshort y, GLshort z, GLshort w); -void gl1_4_glRasterPos4iv(void *_glfuncs, const GLint* v); -void gl1_4_glRasterPos4i(void *_glfuncs, GLint x, GLint y, GLint z, GLint w); -void gl1_4_glRasterPos4fv(void *_glfuncs, const GLfloat* v); -void gl1_4_glRasterPos4f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -void gl1_4_glRasterPos4dv(void *_glfuncs, const GLdouble* v); -void gl1_4_glRasterPos4d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -void gl1_4_glRasterPos3sv(void *_glfuncs, const GLshort* v); -void gl1_4_glRasterPos3s(void *_glfuncs, GLshort x, GLshort y, GLshort z); -void gl1_4_glRasterPos3iv(void *_glfuncs, const GLint* v); -void gl1_4_glRasterPos3i(void *_glfuncs, GLint x, GLint y, GLint z); -void gl1_4_glRasterPos3fv(void *_glfuncs, const GLfloat* v); -void gl1_4_glRasterPos3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl1_4_glRasterPos3dv(void *_glfuncs, const GLdouble* v); -void gl1_4_glRasterPos3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl1_4_glRasterPos2sv(void *_glfuncs, const GLshort* v); -void gl1_4_glRasterPos2s(void *_glfuncs, GLshort x, GLshort y); -void gl1_4_glRasterPos2iv(void *_glfuncs, const GLint* v); -void gl1_4_glRasterPos2i(void *_glfuncs, GLint x, GLint y); -void gl1_4_glRasterPos2fv(void *_glfuncs, const GLfloat* v); -void gl1_4_glRasterPos2f(void *_glfuncs, GLfloat x, GLfloat y); -void gl1_4_glRasterPos2dv(void *_glfuncs, const GLdouble* v); -void gl1_4_glRasterPos2d(void *_glfuncs, GLdouble x, GLdouble y); -void gl1_4_glNormal3sv(void *_glfuncs, const GLshort* v); -void gl1_4_glNormal3s(void *_glfuncs, GLshort nx, GLshort ny, GLshort nz); -void gl1_4_glNormal3iv(void *_glfuncs, const GLint* v); -void gl1_4_glNormal3i(void *_glfuncs, GLint nx, GLint ny, GLint nz); -void gl1_4_glNormal3fv(void *_glfuncs, const GLfloat* v); -void gl1_4_glNormal3f(void *_glfuncs, GLfloat nx, GLfloat ny, GLfloat nz); -void gl1_4_glNormal3dv(void *_glfuncs, const GLdouble* v); -void gl1_4_glNormal3d(void *_glfuncs, GLdouble nx, GLdouble ny, GLdouble nz); -void gl1_4_glNormal3bv(void *_glfuncs, const GLbyte* v); -void gl1_4_glNormal3b(void *_glfuncs, GLbyte nx, GLbyte ny, GLbyte nz); -void gl1_4_glIndexsv(void *_glfuncs, const GLshort* c); -void gl1_4_glIndexs(void *_glfuncs, GLshort c); -void gl1_4_glIndexiv(void *_glfuncs, const GLint* c); -void gl1_4_glIndexi(void *_glfuncs, GLint c); -void gl1_4_glIndexfv(void *_glfuncs, const GLfloat* c); -void gl1_4_glIndexf(void *_glfuncs, GLfloat c); -void gl1_4_glIndexdv(void *_glfuncs, const GLdouble* c); -void gl1_4_glIndexd(void *_glfuncs, GLdouble c); -void gl1_4_glEnd(void *_glfuncs); -void gl1_4_glEdgeFlagv(void *_glfuncs, const GLboolean* flag); -void gl1_4_glEdgeFlag(void *_glfuncs, GLboolean flag); -void gl1_4_glColor4usv(void *_glfuncs, const GLushort* v); -void gl1_4_glColor4us(void *_glfuncs, GLushort red, GLushort green, GLushort blue, GLushort alpha); -void gl1_4_glColor4uiv(void *_glfuncs, const GLuint* v); -void gl1_4_glColor4ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue, GLuint alpha); -void gl1_4_glColor4ubv(void *_glfuncs, const GLubyte* v); -void gl1_4_glColor4ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha); -void gl1_4_glColor4sv(void *_glfuncs, const GLshort* v); -void gl1_4_glColor4s(void *_glfuncs, GLshort red, GLshort green, GLshort blue, GLshort alpha); -void gl1_4_glColor4iv(void *_glfuncs, const GLint* v); -void gl1_4_glColor4i(void *_glfuncs, GLint red, GLint green, GLint blue, GLint alpha); -void gl1_4_glColor4fv(void *_glfuncs, const GLfloat* v); -void gl1_4_glColor4f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl1_4_glColor4dv(void *_glfuncs, const GLdouble* v); -void gl1_4_glColor4d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha); -void gl1_4_glColor4bv(void *_glfuncs, const GLbyte* v); -void gl1_4_glColor4b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha); -void gl1_4_glColor3usv(void *_glfuncs, const GLushort* v); -void gl1_4_glColor3us(void *_glfuncs, GLushort red, GLushort green, GLushort blue); -void gl1_4_glColor3uiv(void *_glfuncs, const GLuint* v); -void gl1_4_glColor3ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue); -void gl1_4_glColor3ubv(void *_glfuncs, const GLubyte* v); -void gl1_4_glColor3ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue); -void gl1_4_glColor3sv(void *_glfuncs, const GLshort* v); -void gl1_4_glColor3s(void *_glfuncs, GLshort red, GLshort green, GLshort blue); -void gl1_4_glColor3iv(void *_glfuncs, const GLint* v); -void gl1_4_glColor3i(void *_glfuncs, GLint red, GLint green, GLint blue); -void gl1_4_glColor3fv(void *_glfuncs, const GLfloat* v); -void gl1_4_glColor3f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue); -void gl1_4_glColor3dv(void *_glfuncs, const GLdouble* v); -void gl1_4_glColor3d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue); -void gl1_4_glColor3bv(void *_glfuncs, const GLbyte* v); -void gl1_4_glColor3b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue); -void gl1_4_glBitmap(void *_glfuncs, GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte* bitmap); -void gl1_4_glBegin(void *_glfuncs, GLenum mode); -void gl1_4_glListBase(void *_glfuncs, GLuint base); -GLuint gl1_4_glGenLists(void *_glfuncs, GLsizei range_); -void gl1_4_glDeleteLists(void *_glfuncs, GLuint list, GLsizei range_); -void gl1_4_glCallLists(void *_glfuncs, GLsizei n, GLenum gltype, const GLvoid* lists); -void gl1_4_glCallList(void *_glfuncs, GLuint list); -void gl1_4_glEndList(void *_glfuncs); -void gl1_4_glNewList(void *_glfuncs, GLuint list, GLenum mode); -void gl1_4_glPushClientAttrib(void *_glfuncs, GLbitfield mask); -void gl1_4_glPopClientAttrib(void *_glfuncs); -void gl1_4_glPrioritizeTextures(void *_glfuncs, GLsizei n, const GLuint* textures, const GLfloat* priorities); -GLboolean gl1_4_glAreTexturesResident(void *_glfuncs, GLsizei n, const GLuint* textures, GLboolean* residences); -void gl1_4_glVertexPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl1_4_glTexCoordPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl1_4_glNormalPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl1_4_glInterleavedArrays(void *_glfuncs, GLenum format, GLsizei stride, const GLvoid* pointer); -void gl1_4_glIndexPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl1_4_glEnableClientState(void *_glfuncs, GLenum array); -void gl1_4_glEdgeFlagPointer(void *_glfuncs, GLsizei stride, const GLvoid* pointer); -void gl1_4_glDisableClientState(void *_glfuncs, GLenum array); -void gl1_4_glColorPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl1_4_glArrayElement(void *_glfuncs, GLint i); -void gl1_4_glResetMinmax(void *_glfuncs, GLenum target); -void gl1_4_glResetHistogram(void *_glfuncs, GLenum target); -void gl1_4_glMinmax(void *_glfuncs, GLenum target, GLenum internalFormat, GLboolean sink); -void gl1_4_glHistogram(void *_glfuncs, GLenum target, GLsizei width, GLenum internalFormat, GLboolean sink); -void gl1_4_glGetMinmaxParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl1_4_glGetMinmaxParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl1_4_glGetMinmax(void *_glfuncs, GLenum target, GLboolean reset, GLenum format, GLenum gltype, GLvoid* values); -void gl1_4_glGetHistogramParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl1_4_glGetHistogramParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl1_4_glGetHistogram(void *_glfuncs, GLenum target, GLboolean reset, GLenum format, GLenum gltype, GLvoid* values); -void gl1_4_glSeparableFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* row, const GLvoid* column); -void gl1_4_glGetSeparableFilter(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* row, GLvoid* column, GLvoid* span); -void gl1_4_glGetConvolutionParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl1_4_glGetConvolutionParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl1_4_glGetConvolutionFilter(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* image); -void gl1_4_glCopyConvolutionFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height); -void gl1_4_glCopyConvolutionFilter1D(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width); -void gl1_4_glConvolutionParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl1_4_glConvolutionParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint params); -void gl1_4_glConvolutionParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params); -void gl1_4_glConvolutionParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat params); -void gl1_4_glConvolutionFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* image); -void gl1_4_glConvolutionFilter1D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum gltype, const GLvoid* image); -void gl1_4_glCopyColorSubTable(void *_glfuncs, GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); -void gl1_4_glColorSubTable(void *_glfuncs, GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum gltype, const GLvoid* data); -void gl1_4_glGetColorTableParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl1_4_glGetColorTableParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl1_4_glGetColorTable(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* table); -void gl1_4_glCopyColorTable(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width); -void gl1_4_glColorTableParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl1_4_glColorTableParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params); -void gl1_4_glColorTable(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum gltype, const GLvoid* table); -void gl1_4_glMultTransposeMatrixd(void *_glfuncs, const GLdouble* m); -void gl1_4_glMultTransposeMatrixf(void *_glfuncs, const GLfloat* m); -void gl1_4_glLoadTransposeMatrixd(void *_glfuncs, const GLdouble* m); -void gl1_4_glLoadTransposeMatrixf(void *_glfuncs, const GLfloat* m); -void gl1_4_glMultiTexCoord4sv(void *_glfuncs, GLenum target, const GLshort* v); -void gl1_4_glMultiTexCoord4s(void *_glfuncs, GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); -void gl1_4_glMultiTexCoord4iv(void *_glfuncs, GLenum target, const GLint* v); -void gl1_4_glMultiTexCoord4i(void *_glfuncs, GLenum target, GLint s, GLint t, GLint r, GLint q); -void gl1_4_glMultiTexCoord4fv(void *_glfuncs, GLenum target, const GLfloat* v); -void gl1_4_glMultiTexCoord4f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -void gl1_4_glMultiTexCoord4dv(void *_glfuncs, GLenum target, const GLdouble* v); -void gl1_4_glMultiTexCoord4d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -void gl1_4_glMultiTexCoord3sv(void *_glfuncs, GLenum target, const GLshort* v); -void gl1_4_glMultiTexCoord3s(void *_glfuncs, GLenum target, GLshort s, GLshort t, GLshort r); -void gl1_4_glMultiTexCoord3iv(void *_glfuncs, GLenum target, const GLint* v); -void gl1_4_glMultiTexCoord3i(void *_glfuncs, GLenum target, GLint s, GLint t, GLint r); -void gl1_4_glMultiTexCoord3fv(void *_glfuncs, GLenum target, const GLfloat* v); -void gl1_4_glMultiTexCoord3f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t, GLfloat r); -void gl1_4_glMultiTexCoord3dv(void *_glfuncs, GLenum target, const GLdouble* v); -void gl1_4_glMultiTexCoord3d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t, GLdouble r); -void gl1_4_glMultiTexCoord2sv(void *_glfuncs, GLenum target, const GLshort* v); -void gl1_4_glMultiTexCoord2s(void *_glfuncs, GLenum target, GLshort s, GLshort t); -void gl1_4_glMultiTexCoord2iv(void *_glfuncs, GLenum target, const GLint* v); -void gl1_4_glMultiTexCoord2i(void *_glfuncs, GLenum target, GLint s, GLint t); -void gl1_4_glMultiTexCoord2fv(void *_glfuncs, GLenum target, const GLfloat* v); -void gl1_4_glMultiTexCoord2f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t); -void gl1_4_glMultiTexCoord2dv(void *_glfuncs, GLenum target, const GLdouble* v); -void gl1_4_glMultiTexCoord2d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t); -void gl1_4_glMultiTexCoord1sv(void *_glfuncs, GLenum target, const GLshort* v); -void gl1_4_glMultiTexCoord1s(void *_glfuncs, GLenum target, GLshort s); -void gl1_4_glMultiTexCoord1iv(void *_glfuncs, GLenum target, const GLint* v); -void gl1_4_glMultiTexCoord1i(void *_glfuncs, GLenum target, GLint s); -void gl1_4_glMultiTexCoord1fv(void *_glfuncs, GLenum target, const GLfloat* v); -void gl1_4_glMultiTexCoord1f(void *_glfuncs, GLenum target, GLfloat s); -void gl1_4_glMultiTexCoord1dv(void *_glfuncs, GLenum target, const GLdouble* v); -void gl1_4_glMultiTexCoord1d(void *_glfuncs, GLenum target, GLdouble s); -void gl1_4_glClientActiveTexture(void *_glfuncs, GLenum texture); -void gl1_4_glWindowPos3sv(void *_glfuncs, const GLshort* v); -void gl1_4_glWindowPos3s(void *_glfuncs, GLshort x, GLshort y, GLshort z); -void gl1_4_glWindowPos3iv(void *_glfuncs, const GLint* v); -void gl1_4_glWindowPos3i(void *_glfuncs, GLint x, GLint y, GLint z); -void gl1_4_glWindowPos3fv(void *_glfuncs, const GLfloat* v); -void gl1_4_glWindowPos3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl1_4_glWindowPos3dv(void *_glfuncs, const GLdouble* v); -void gl1_4_glWindowPos3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl1_4_glWindowPos2sv(void *_glfuncs, const GLshort* v); -void gl1_4_glWindowPos2s(void *_glfuncs, GLshort x, GLshort y); -void gl1_4_glWindowPos2iv(void *_glfuncs, const GLint* v); -void gl1_4_glWindowPos2i(void *_glfuncs, GLint x, GLint y); -void gl1_4_glWindowPos2fv(void *_glfuncs, const GLfloat* v); -void gl1_4_glWindowPos2f(void *_glfuncs, GLfloat x, GLfloat y); -void gl1_4_glWindowPos2dv(void *_glfuncs, const GLdouble* v); -void gl1_4_glWindowPos2d(void *_glfuncs, GLdouble x, GLdouble y); -void gl1_4_glSecondaryColorPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl1_4_glSecondaryColor3usv(void *_glfuncs, const GLushort* v); -void gl1_4_glSecondaryColor3us(void *_glfuncs, GLushort red, GLushort green, GLushort blue); -void gl1_4_glSecondaryColor3uiv(void *_glfuncs, const GLuint* v); -void gl1_4_glSecondaryColor3ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue); -void gl1_4_glSecondaryColor3ubv(void *_glfuncs, const GLubyte* v); -void gl1_4_glSecondaryColor3ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue); -void gl1_4_glSecondaryColor3sv(void *_glfuncs, const GLshort* v); -void gl1_4_glSecondaryColor3s(void *_glfuncs, GLshort red, GLshort green, GLshort blue); -void gl1_4_glSecondaryColor3iv(void *_glfuncs, const GLint* v); -void gl1_4_glSecondaryColor3i(void *_glfuncs, GLint red, GLint green, GLint blue); -void gl1_4_glSecondaryColor3fv(void *_glfuncs, const GLfloat* v); -void gl1_4_glSecondaryColor3f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue); -void gl1_4_glSecondaryColor3dv(void *_glfuncs, const GLdouble* v); -void gl1_4_glSecondaryColor3d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue); -void gl1_4_glSecondaryColor3bv(void *_glfuncs, const GLbyte* v); -void gl1_4_glSecondaryColor3b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue); -void gl1_4_glFogCoordPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl1_4_glFogCoorddv(void *_glfuncs, const GLdouble* coord); -void gl1_4_glFogCoordd(void *_glfuncs, GLdouble coord); -void gl1_4_glFogCoordfv(void *_glfuncs, const GLfloat* coord); -void gl1_4_glFogCoordf(void *_glfuncs, GLfloat coord); - - -#ifdef __cplusplus -} // extern "C" -#endif diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/1.4/gl.go b/Godeps/_workspace/src/github.com/obscuren/qml/gl/1.4/gl.go deleted file mode 100644 index 6ddbc24415..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/1.4/gl.go +++ /dev/null @@ -1,3892 +0,0 @@ -// ** file automatically generated by glgen -- do not edit manually ** - -package GL - -// #cgo CXXFLAGS: -std=c++0x -pedantic-errors -Wall -fno-strict-aliasing -// #cgo LDFLAGS: -lstdc++ -// #cgo pkg-config: Qt5Core Qt5OpenGL -// -// #include "funcs.h" -// -// void free(void*); -// -import "C" - -import ( - "fmt" - "reflect" - "unsafe" - - "gopkg.in/qml.v1/gl/glbase" -) - -// API returns a value that offers methods matching the OpenGL version 1.4 API. -// -// The returned API must not be used after the provided OpenGL context becomes invalid. -func API(context glbase.Contexter) *GL { - gl := &GL{} - gl.funcs = C.gl1_4_funcs() - if gl.funcs == nil { - panic(fmt.Errorf("OpenGL version 1.4 is not available")) - } - return gl -} - -// GL implements the OpenGL version 1.4 API. Values of this -// type must be created via the API function, and it must not be used after -// the associated OpenGL context becomes invalid. -type GL struct { - funcs unsafe.Pointer -} - -const ( - FALSE = 0 - TRUE = 1 - NONE = 0 - - BYTE = 0x1400 - UNSIGNED_BYTE = 0x1401 - SHORT = 0x1402 - UNSIGNED_SHORT = 0x1403 - INT = 0x1404 - UNSIGNED_INT = 0x1405 - FLOAT = 0x1406 - N2_BYTES = 0x1407 - N3_BYTES = 0x1408 - N4_BYTES = 0x1409 - DOUBLE = 0x140A - - ACCUM = 0x0100 - LOAD = 0x0101 - RETURN = 0x0102 - MULT = 0x0103 - ADD = 0x0104 - - ACCUM_BUFFER_BIT = 0x00000200 - ALL_ATTRIB_BITS = 0xFFFFFFFF - COLOR_BUFFER_BIT = 0x00004000 - CURRENT_BIT = 0x00000001 - DEPTH_BUFFER_BIT = 0x00000100 - ENABLE_BIT = 0x00002000 - EVAL_BIT = 0x00010000 - FOG_BIT = 0x00000080 - HINT_BIT = 0x00008000 - LIGHTING_BIT = 0x00000040 - LINE_BIT = 0x00000004 - LIST_BIT = 0x00020000 - MULTISAMPLE_BIT = 0x20000000 - PIXEL_MODE_BIT = 0x00000020 - POINT_BIT = 0x00000002 - POLYGON_BIT = 0x00000008 - POLYGON_STIPPLE_BIT = 0x00000010 - SCISSOR_BIT = 0x00080000 - STENCIL_BUFFER_BIT = 0x00000400 - TEXTURE_BIT = 0x00040000 - TRANSFORM_BIT = 0x00001000 - VIEWPORT_BIT = 0x00000800 - - ALWAYS = 0x0207 - EQUAL = 0x0202 - GEQUAL = 0x0206 - GREATER = 0x0204 - LEQUAL = 0x0203 - LESS = 0x0201 - NEVER = 0x0200 - NOTEQUAL = 0x0205 - - LOGIC_OP = 0x0BF1 - - DST_ALPHA = 0x0304 - ONE = 1 - ONE_MINUS_DST_ALPHA = 0x0305 - ONE_MINUS_SRC_ALPHA = 0x0303 - ONE_MINUS_SRC_COLOR = 0x0301 - SRC_ALPHA = 0x0302 - SRC_COLOR = 0x0300 - ZERO = 0 - - DST_COLOR = 0x0306 - ONE_MINUS_DST_COLOR = 0x0307 - SRC_ALPHA_SATURATE = 0x0308 - - CLIENT_ALL_ATTRIB_BITS = 0xFFFFFFFF - CLIENT_PIXEL_STORE_BIT = 0x00000001 - CLIENT_VERTEX_ARRAY_BIT = 0x00000002 - - CLIP_PLANE0 = 0x3000 - CLIP_PLANE1 = 0x3001 - CLIP_PLANE2 = 0x3002 - CLIP_PLANE3 = 0x3003 - CLIP_PLANE4 = 0x3004 - CLIP_PLANE5 = 0x3005 - - BACK = 0x0405 - FRONT = 0x0404 - FRONT_AND_BACK = 0x0408 - - AMBIENT = 0x1200 - AMBIENT_AND_DIFFUSE = 0x1602 - DIFFUSE = 0x1201 - EMISSION = 0x1600 - SPECULAR = 0x1202 - - AUX0 = 0x0409 - AUX1 = 0x040A - AUX2 = 0x040B - AUX3 = 0x040C - BACK_LEFT = 0x0402 - BACK_RIGHT = 0x0403 - FRONT_LEFT = 0x0400 - FRONT_RIGHT = 0x0401 - LEFT = 0x0406 - RIGHT = 0x0407 - - ALPHA_TEST = 0x0BC0 - AUTO_NORMAL = 0x0D80 - BLEND = 0x0BE2 - COLOR_ARRAY = 0x8076 - COLOR_LOGIC_OP = 0x0BF2 - COLOR_MATERIAL = 0x0B57 - CULL_FACE = 0x0B44 - DEPTH_TEST = 0x0B71 - DITHER = 0x0BD0 - EDGE_FLAG_ARRAY = 0x8079 - FOG = 0x0B60 - INDEX_ARRAY = 0x8077 - INDEX_LOGIC_OP = 0x0BF1 - LIGHT0 = 0x4000 - LIGHT1 = 0x4001 - LIGHT2 = 0x4002 - LIGHT3 = 0x4003 - LIGHT4 = 0x4004 - LIGHT5 = 0x4005 - LIGHT6 = 0x4006 - LIGHT7 = 0x4007 - LIGHTING = 0x0B50 - LINE_SMOOTH = 0x0B20 - LINE_STIPPLE = 0x0B24 - MAP1_COLOR_4 = 0x0D90 - MAP1_INDEX = 0x0D91 - MAP1_NORMAL = 0x0D92 - MAP1_TEXTURE_COORD_1 = 0x0D93 - MAP1_TEXTURE_COORD_2 = 0x0D94 - MAP1_TEXTURE_COORD_3 = 0x0D95 - MAP1_TEXTURE_COORD_4 = 0x0D96 - MAP1_VERTEX_3 = 0x0D97 - MAP1_VERTEX_4 = 0x0D98 - MAP2_COLOR_4 = 0x0DB0 - MAP2_INDEX = 0x0DB1 - MAP2_NORMAL = 0x0DB2 - MAP2_TEXTURE_COORD_1 = 0x0DB3 - MAP2_TEXTURE_COORD_2 = 0x0DB4 - MAP2_TEXTURE_COORD_3 = 0x0DB5 - MAP2_TEXTURE_COORD_4 = 0x0DB6 - MAP2_VERTEX_3 = 0x0DB7 - MAP2_VERTEX_4 = 0x0DB8 - NORMALIZE = 0x0BA1 - NORMAL_ARRAY = 0x8075 - POINT_SMOOTH = 0x0B10 - POLYGON_OFFSET_FILL = 0x8037 - POLYGON_OFFSET_LINE = 0x2A02 - POLYGON_OFFSET_POINT = 0x2A01 - POLYGON_SMOOTH = 0x0B41 - POLYGON_STIPPLE = 0x0B42 - SCISSOR_TEST = 0x0C11 - STENCIL_TEST = 0x0B90 - TEXTURE_1D = 0x0DE0 - TEXTURE_2D = 0x0DE1 - TEXTURE_COORD_ARRAY = 0x8078 - TEXTURE_GEN_Q = 0x0C63 - TEXTURE_GEN_R = 0x0C62 - TEXTURE_GEN_S = 0x0C60 - TEXTURE_GEN_T = 0x0C61 - VERTEX_ARRAY = 0x8074 - - INVALID_ENUM = 0x0500 - INVALID_OPERATION = 0x0502 - INVALID_VALUE = 0x0501 - NO_ERROR = 0 - OUT_OF_MEMORY = 0x0505 - STACK_OVERFLOW = 0x0503 - STACK_UNDERFLOW = 0x0504 - - N2D = 0x0600 - N3D = 0x0601 - N3D_COLOR = 0x0602 - N3D_COLOR_TEXTURE = 0x0603 - N4D_COLOR_TEXTURE = 0x0604 - - BITMAP_TOKEN = 0x0704 - COPY_PIXEL_TOKEN = 0x0706 - DRAW_PIXEL_TOKEN = 0x0705 - LINE_RESET_TOKEN = 0x0707 - LINE_TOKEN = 0x0702 - PASS_THROUGH_TOKEN = 0x0700 - POINT_TOKEN = 0x0701 - POLYGON_TOKEN = 0x0703 - - EXP = 0x0800 - EXP2 = 0x0801 - LINEAR = 0x2601 - - FOG_COLOR = 0x0B66 - FOG_DENSITY = 0x0B62 - FOG_END = 0x0B64 - FOG_INDEX = 0x0B61 - FOG_MODE = 0x0B65 - FOG_START = 0x0B63 - - CCW = 0x0901 - CW = 0x0900 - - COEFF = 0x0A00 - DOMAIN = 0x0A02 - ORDER = 0x0A01 - - PIXEL_MAP_A_TO_A = 0x0C79 - PIXEL_MAP_B_TO_B = 0x0C78 - PIXEL_MAP_G_TO_G = 0x0C77 - PIXEL_MAP_I_TO_A = 0x0C75 - PIXEL_MAP_I_TO_B = 0x0C74 - PIXEL_MAP_I_TO_G = 0x0C73 - PIXEL_MAP_I_TO_I = 0x0C70 - PIXEL_MAP_I_TO_R = 0x0C72 - PIXEL_MAP_R_TO_R = 0x0C76 - PIXEL_MAP_S_TO_S = 0x0C71 - - ACCUM_ALPHA_BITS = 0x0D5B - ACCUM_BLUE_BITS = 0x0D5A - ACCUM_CLEAR_VALUE = 0x0B80 - ACCUM_GREEN_BITS = 0x0D59 - ACCUM_RED_BITS = 0x0D58 - ALIASED_LINE_WIDTH_RANGE = 0x846E - ALIASED_POINT_SIZE_RANGE = 0x846D - ALPHA_BIAS = 0x0D1D - ALPHA_BITS = 0x0D55 - ALPHA_SCALE = 0x0D1C - ALPHA_TEST_FUNC = 0x0BC1 - ALPHA_TEST_REF = 0x0BC2 - ATTRIB_STACK_DEPTH = 0x0BB0 - AUX_BUFFERS = 0x0C00 - BLEND_DST = 0x0BE0 - BLEND_SRC = 0x0BE1 - BLUE_BIAS = 0x0D1B - BLUE_BITS = 0x0D54 - BLUE_SCALE = 0x0D1A - CLIENT_ATTRIB_STACK_DEPTH = 0x0BB1 - COLOR_ARRAY_SIZE = 0x8081 - COLOR_ARRAY_STRIDE = 0x8083 - COLOR_ARRAY_TYPE = 0x8082 - COLOR_CLEAR_VALUE = 0x0C22 - COLOR_MATERIAL_FACE = 0x0B55 - COLOR_MATERIAL_PARAMETER = 0x0B56 - COLOR_WRITEMASK = 0x0C23 - CULL_FACE_MODE = 0x0B45 - CURRENT_COLOR = 0x0B00 - CURRENT_INDEX = 0x0B01 - CURRENT_NORMAL = 0x0B02 - CURRENT_RASTER_COLOR = 0x0B04 - CURRENT_RASTER_DISTANCE = 0x0B09 - CURRENT_RASTER_INDEX = 0x0B05 - CURRENT_RASTER_POSITION = 0x0B07 - CURRENT_RASTER_POSITION_VALID = 0x0B08 - CURRENT_RASTER_TEXTURE_COORDS = 0x0B06 - CURRENT_TEXTURE_COORDS = 0x0B03 - DEPTH_BIAS = 0x0D1F - DEPTH_BITS = 0x0D56 - DEPTH_CLEAR_VALUE = 0x0B73 - DEPTH_FUNC = 0x0B74 - DEPTH_RANGE = 0x0B70 - DEPTH_SCALE = 0x0D1E - DEPTH_WRITEMASK = 0x0B72 - DOUBLEBUFFER = 0x0C32 - DRAW_BUFFER = 0x0C01 - EDGE_FLAG = 0x0B43 - EDGE_FLAG_ARRAY_STRIDE = 0x808C - FEEDBACK_BUFFER_SIZE = 0x0DF1 - FEEDBACK_BUFFER_TYPE = 0x0DF2 - FOG_HINT = 0x0C54 - FRONT_FACE = 0x0B46 - GREEN_BIAS = 0x0D19 - GREEN_BITS = 0x0D53 - GREEN_SCALE = 0x0D18 - INDEX_ARRAY_STRIDE = 0x8086 - INDEX_ARRAY_TYPE = 0x8085 - INDEX_BITS = 0x0D51 - INDEX_CLEAR_VALUE = 0x0C20 - INDEX_MODE = 0x0C30 - INDEX_OFFSET = 0x0D13 - INDEX_SHIFT = 0x0D12 - INDEX_WRITEMASK = 0x0C21 - LIGHT_MODEL_AMBIENT = 0x0B53 - LIGHT_MODEL_COLOR_CONTROL = 0x81F8 - LIGHT_MODEL_LOCAL_VIEWER = 0x0B51 - LIGHT_MODEL_TWO_SIDE = 0x0B52 - LINE_SMOOTH_HINT = 0x0C52 - LINE_STIPPLE_PATTERN = 0x0B25 - LINE_STIPPLE_REPEAT = 0x0B26 - LINE_WIDTH = 0x0B21 - LINE_WIDTH_GRANULARITY = 0x0B23 - LINE_WIDTH_RANGE = 0x0B22 - LIST_BASE = 0x0B32 - LIST_INDEX = 0x0B33 - LIST_MODE = 0x0B30 - LOGIC_OP_MODE = 0x0BF0 - MAP1_GRID_DOMAIN = 0x0DD0 - MAP1_GRID_SEGMENTS = 0x0DD1 - MAP2_GRID_DOMAIN = 0x0DD2 - MAP2_GRID_SEGMENTS = 0x0DD3 - MAP_COLOR = 0x0D10 - MAP_STENCIL = 0x0D11 - MATRIX_MODE = 0x0BA0 - MAX_ATTRIB_STACK_DEPTH = 0x0D35 - MAX_CLIENT_ATTRIB_STACK_DEPTH = 0x0D3B - MAX_CLIP_PLANES = 0x0D32 - MAX_EVAL_ORDER = 0x0D30 - MAX_LIGHTS = 0x0D31 - MAX_LIST_NESTING = 0x0B31 - MAX_MODELVIEW_STACK_DEPTH = 0x0D36 - MAX_NAME_STACK_DEPTH = 0x0D37 - MAX_PIXEL_MAP_TABLE = 0x0D34 - MAX_PROJECTION_STACK_DEPTH = 0x0D38 - MAX_TEXTURE_SIZE = 0x0D33 - MAX_TEXTURE_STACK_DEPTH = 0x0D39 - MAX_VIEWPORT_DIMS = 0x0D3A - MODELVIEW_MATRIX = 0x0BA6 - MODELVIEW_STACK_DEPTH = 0x0BA3 - NAME_STACK_DEPTH = 0x0D70 - NORMAL_ARRAY_STRIDE = 0x807F - NORMAL_ARRAY_TYPE = 0x807E - PACK_ALIGNMENT = 0x0D05 - PACK_LSB_FIRST = 0x0D01 - PACK_ROW_LENGTH = 0x0D02 - PACK_SKIP_PIXELS = 0x0D04 - PACK_SKIP_ROWS = 0x0D03 - PACK_SWAP_BYTES = 0x0D00 - PERSPECTIVE_CORRECTION_HINT = 0x0C50 - PIXEL_MAP_A_TO_A_SIZE = 0x0CB9 - PIXEL_MAP_B_TO_B_SIZE = 0x0CB8 - PIXEL_MAP_G_TO_G_SIZE = 0x0CB7 - PIXEL_MAP_I_TO_A_SIZE = 0x0CB5 - PIXEL_MAP_I_TO_B_SIZE = 0x0CB4 - PIXEL_MAP_I_TO_G_SIZE = 0x0CB3 - PIXEL_MAP_I_TO_I_SIZE = 0x0CB0 - PIXEL_MAP_I_TO_R_SIZE = 0x0CB2 - PIXEL_MAP_R_TO_R_SIZE = 0x0CB6 - PIXEL_MAP_S_TO_S_SIZE = 0x0CB1 - POINT_SIZE = 0x0B11 - POINT_SIZE_GRANULARITY = 0x0B13 - POINT_SIZE_RANGE = 0x0B12 - POINT_SMOOTH_HINT = 0x0C51 - POLYGON_MODE = 0x0B40 - POLYGON_OFFSET_FACTOR = 0x8038 - POLYGON_OFFSET_UNITS = 0x2A00 - POLYGON_SMOOTH_HINT = 0x0C53 - PROJECTION_MATRIX = 0x0BA7 - PROJECTION_STACK_DEPTH = 0x0BA4 - READ_BUFFER = 0x0C02 - RED_BIAS = 0x0D15 - RED_BITS = 0x0D52 - RED_SCALE = 0x0D14 - RENDER_MODE = 0x0C40 - RGBA_MODE = 0x0C31 - SCISSOR_BOX = 0x0C10 - SELECTION_BUFFER_SIZE = 0x0DF4 - SHADE_MODEL = 0x0B54 - SMOOTH_LINE_WIDTH_GRANULARITY = 0x0B23 - SMOOTH_LINE_WIDTH_RANGE = 0x0B22 - SMOOTH_POINT_SIZE_GRANULARITY = 0x0B13 - SMOOTH_POINT_SIZE_RANGE = 0x0B12 - STENCIL_BITS = 0x0D57 - STENCIL_CLEAR_VALUE = 0x0B91 - STENCIL_FAIL = 0x0B94 - STENCIL_FUNC = 0x0B92 - STENCIL_PASS_DEPTH_FAIL = 0x0B95 - STENCIL_PASS_DEPTH_PASS = 0x0B96 - STENCIL_REF = 0x0B97 - STENCIL_VALUE_MASK = 0x0B93 - STENCIL_WRITEMASK = 0x0B98 - STEREO = 0x0C33 - SUBPIXEL_BITS = 0x0D50 - TEXTURE_BINDING_1D = 0x8068 - TEXTURE_BINDING_2D = 0x8069 - TEXTURE_BINDING_3D = 0x806A - TEXTURE_COORD_ARRAY_SIZE = 0x8088 - TEXTURE_COORD_ARRAY_STRIDE = 0x808A - TEXTURE_COORD_ARRAY_TYPE = 0x8089 - TEXTURE_MATRIX = 0x0BA8 - TEXTURE_STACK_DEPTH = 0x0BA5 - UNPACK_ALIGNMENT = 0x0CF5 - UNPACK_LSB_FIRST = 0x0CF1 - UNPACK_ROW_LENGTH = 0x0CF2 - UNPACK_SKIP_PIXELS = 0x0CF4 - UNPACK_SKIP_ROWS = 0x0CF3 - UNPACK_SWAP_BYTES = 0x0CF0 - VERTEX_ARRAY_SIZE = 0x807A - VERTEX_ARRAY_STRIDE = 0x807C - VERTEX_ARRAY_TYPE = 0x807B - VIEWPORT = 0x0BA2 - ZOOM_X = 0x0D16 - ZOOM_Y = 0x0D17 - - COLOR_ARRAY_POINTER = 0x8090 - EDGE_FLAG_ARRAY_POINTER = 0x8093 - FEEDBACK_BUFFER_POINTER = 0x0DF0 - INDEX_ARRAY_POINTER = 0x8091 - NORMAL_ARRAY_POINTER = 0x808F - SELECTION_BUFFER_POINTER = 0x0DF3 - TEXTURE_COORD_ARRAY_POINTER = 0x8092 - VERTEX_ARRAY_POINTER = 0x808E - - TEXTURE_ALPHA_SIZE = 0x805F - TEXTURE_BLUE_SIZE = 0x805E - TEXTURE_BORDER = 0x1005 - TEXTURE_BORDER_COLOR = 0x1004 - TEXTURE_COMPONENTS = 0x1003 - TEXTURE_GREEN_SIZE = 0x805D - TEXTURE_HEIGHT = 0x1001 - TEXTURE_INTENSITY_SIZE = 0x8061 - TEXTURE_INTERNAL_FORMAT = 0x1003 - TEXTURE_LUMINANCE_SIZE = 0x8060 - TEXTURE_MAG_FILTER = 0x2800 - TEXTURE_MIN_FILTER = 0x2801 - TEXTURE_PRIORITY = 0x8066 - TEXTURE_RED_SIZE = 0x805C - TEXTURE_RESIDENT = 0x8067 - TEXTURE_WIDTH = 0x1000 - TEXTURE_WRAP_S = 0x2802 - TEXTURE_WRAP_T = 0x2803 - - DONT_CARE = 0x1100 - FASTEST = 0x1101 - NICEST = 0x1102 - - GENERATE_MIPMAP_HINT = 0x8192 - TEXTURE_COMPRESSION_HINT = 0x84EF - - C3F_V3F = 0x2A24 - C4F_N3F_V3F = 0x2A26 - C4UB_V2F = 0x2A22 - C4UB_V3F = 0x2A23 - N3F_V3F = 0x2A25 - T2F_C3F_V3F = 0x2A2A - T2F_C4F_N3F_V3F = 0x2A2C - T2F_C4UB_V3F = 0x2A29 - T2F_N3F_V3F = 0x2A2B - T2F_V3F = 0x2A27 - T4F_C4F_N3F_V4F = 0x2A2D - T4F_V4F = 0x2A28 - V2F = 0x2A20 - V3F = 0x2A21 - - MODULATE = 0x2100 - REPLACE = 0x1E01 - - SEPARATE_SPECULAR_COLOR = 0x81FA - SINGLE_COLOR = 0x81F9 - - CONSTANT_ATTENUATION = 0x1207 - LINEAR_ATTENUATION = 0x1208 - POSITION = 0x1203 - QUADRATIC_ATTENUATION = 0x1209 - SPOT_CUTOFF = 0x1206 - SPOT_DIRECTION = 0x1204 - SPOT_EXPONENT = 0x1205 - - COMPILE = 0x1300 - COMPILE_AND_EXECUTE = 0x1301 - - AND = 0x1501 - AND_INVERTED = 0x1504 - AND_REVERSE = 0x1502 - CLEAR = 0x1500 - COPY = 0x1503 - COPY_INVERTED = 0x150C - EQUIV = 0x1509 - INVERT = 0x150A - NAND = 0x150E - NOOP = 0x1505 - NOR = 0x1508 - OR = 0x1507 - OR_INVERTED = 0x150D - OR_REVERSE = 0x150B - SET = 0x150F - XOR = 0x1506 - - COLOR_INDEXES = 0x1603 - SHININESS = 0x1601 - - MODELVIEW = 0x1700 - PROJECTION = 0x1701 - TEXTURE = 0x1702 - - LINE = 0x1B01 - POINT = 0x1B00 - - FILL = 0x1B02 - - COLOR = 0x1800 - DEPTH = 0x1801 - STENCIL = 0x1802 - - ALPHA = 0x1906 - BLUE = 0x1905 - COLOR_INDEX = 0x1900 - DEPTH_COMPONENT = 0x1902 - GREEN = 0x1904 - LUMINANCE = 0x1909 - LUMINANCE_ALPHA = 0x190A - RED = 0x1903 - RGB = 0x1907 - RGBA = 0x1908 - STENCIL_INDEX = 0x1901 - - ALPHA12 = 0x803D - ALPHA16 = 0x803E - ALPHA4 = 0x803B - ALPHA8 = 0x803C - INTENSITY = 0x8049 - INTENSITY12 = 0x804C - INTENSITY16 = 0x804D - INTENSITY4 = 0x804A - INTENSITY8 = 0x804B - LUMINANCE12 = 0x8041 - LUMINANCE12_ALPHA12 = 0x8047 - LUMINANCE12_ALPHA4 = 0x8046 - LUMINANCE16 = 0x8042 - LUMINANCE16_ALPHA16 = 0x8048 - LUMINANCE4 = 0x803F - LUMINANCE4_ALPHA4 = 0x8043 - LUMINANCE6_ALPHA2 = 0x8044 - LUMINANCE8 = 0x8040 - LUMINANCE8_ALPHA8 = 0x8045 - R3_G3_B2 = 0x2A10 - RGB10 = 0x8052 - RGB10_A2 = 0x8059 - RGB12 = 0x8053 - RGB16 = 0x8054 - RGB4 = 0x804F - RGB5 = 0x8050 - RGB5_A1 = 0x8057 - RGB8 = 0x8051 - RGBA12 = 0x805A - RGBA16 = 0x805B - RGBA2 = 0x8055 - RGBA4 = 0x8056 - RGBA8 = 0x8058 - - PACK_IMAGE_HEIGHT = 0x806C - PACK_SKIP_IMAGES = 0x806B - UNPACK_IMAGE_HEIGHT = 0x806E - UNPACK_SKIP_IMAGES = 0x806D - - BITMAP = 0x1A00 - UNSIGNED_BYTE_3_3_2 = 0x8032 - UNSIGNED_INT_10_10_10_2 = 0x8036 - UNSIGNED_INT_8_8_8_8 = 0x8035 - UNSIGNED_SHORT_4_4_4_4 = 0x8033 - UNSIGNED_SHORT_5_5_5_1 = 0x8034 - - POINT_DISTANCE_ATTENUATION = 0x8129 - POINT_FADE_THRESHOLD_SIZE = 0x8128 - POINT_SIZE_MAX = 0x8127 - POINT_SIZE_MIN = 0x8126 - - LINES = 0x0001 - LINE_LOOP = 0x0002 - LINE_STRIP = 0x0003 - POINTS = 0x0000 - POLYGON = 0x0009 - QUADS = 0x0007 - QUAD_STRIP = 0x0008 - TRIANGLES = 0x0004 - TRIANGLE_FAN = 0x0006 - TRIANGLE_STRIP = 0x0005 - - FEEDBACK = 0x1C01 - RENDER = 0x1C00 - SELECT = 0x1C02 - - FLAT = 0x1D00 - SMOOTH = 0x1D01 - - DECR = 0x1E03 - INCR = 0x1E02 - KEEP = 0x1E00 - - EXTENSIONS = 0x1F03 - RENDERER = 0x1F01 - VENDOR = 0x1F00 - VERSION = 0x1F02 - - S = 0x2000 - T = 0x2001 - R = 0x2002 - Q = 0x2003 - - DECAL = 0x2101 - - TEXTURE_ENV_COLOR = 0x2201 - TEXTURE_ENV_MODE = 0x2200 - - TEXTURE_ENV = 0x2300 - - EYE_LINEAR = 0x2400 - OBJECT_LINEAR = 0x2401 - SPHERE_MAP = 0x2402 - - EYE_PLANE = 0x2502 - OBJECT_PLANE = 0x2501 - TEXTURE_GEN_MODE = 0x2500 - - NEAREST = 0x2600 - - LINEAR_MIPMAP_LINEAR = 0x2703 - LINEAR_MIPMAP_NEAREST = 0x2701 - NEAREST_MIPMAP_LINEAR = 0x2702 - NEAREST_MIPMAP_NEAREST = 0x2700 - - GENERATE_MIPMAP = 0x8191 - TEXTURE_WRAP_R = 0x8072 - - PROXY_TEXTURE_1D = 0x8063 - PROXY_TEXTURE_2D = 0x8064 - PROXY_TEXTURE_3D = 0x8070 - TEXTURE_3D = 0x806F - TEXTURE_BASE_LEVEL = 0x813C - TEXTURE_MAX_LEVEL = 0x813D - TEXTURE_MAX_LOD = 0x813B - TEXTURE_MIN_LOD = 0x813A - - CLAMP = 0x2900 - CLAMP_TO_BORDER = 0x812D - CLAMP_TO_EDGE = 0x812F - REPEAT = 0x2901 - - CONSTANT_COLOR = 0x8001 - ONE_MINUS_CONSTANT_COLOR = 0x8002 - CONSTANT_ALPHA = 0x8003 - ONE_MINUS_CONSTANT_ALPHA = 0x8004 - FUNC_ADD = 0x8006 - MIN = 0x8007 - MAX = 0x8008 - FUNC_SUBTRACT = 0x800A - FUNC_REVERSE_SUBTRACT = 0x800B - RESCALE_NORMAL = 0x803A - TEXTURE_DEPTH = 0x8071 - MAX_3D_TEXTURE_SIZE = 0x8073 - MULTISAMPLE = 0x809D - SAMPLE_ALPHA_TO_COVERAGE = 0x809E - SAMPLE_ALPHA_TO_ONE = 0x809F - SAMPLE_COVERAGE = 0x80A0 - SAMPLE_BUFFERS = 0x80A8 - SAMPLES = 0x80A9 - SAMPLE_COVERAGE_VALUE = 0x80AA - SAMPLE_COVERAGE_INVERT = 0x80AB - BLEND_DST_RGB = 0x80C8 - BLEND_SRC_RGB = 0x80C9 - BLEND_DST_ALPHA = 0x80CA - BLEND_SRC_ALPHA = 0x80CB - BGR = 0x80E0 - BGRA = 0x80E1 - MAX_ELEMENTS_VERTICES = 0x80E8 - MAX_ELEMENTS_INDICES = 0x80E9 - DEPTH_COMPONENT16 = 0x81A5 - DEPTH_COMPONENT24 = 0x81A6 - DEPTH_COMPONENT32 = 0x81A7 - UNSIGNED_BYTE_2_3_3_REV = 0x8362 - UNSIGNED_SHORT_5_6_5 = 0x8363 - UNSIGNED_SHORT_5_6_5_REV = 0x8364 - UNSIGNED_SHORT_4_4_4_4_REV = 0x8365 - UNSIGNED_SHORT_1_5_5_5_REV = 0x8366 - UNSIGNED_INT_8_8_8_8_REV = 0x8367 - UNSIGNED_INT_2_10_10_10_REV = 0x8368 - MIRRORED_REPEAT = 0x8370 - FOG_COORDINATE_SOURCE = 0x8450 - FOG_COORDINATE = 0x8451 - FRAGMENT_DEPTH = 0x8452 - CURRENT_FOG_COORDINATE = 0x8453 - FOG_COORDINATE_ARRAY_TYPE = 0x8454 - FOG_COORDINATE_ARRAY_STRIDE = 0x8455 - FOG_COORDINATE_ARRAY_POINTER = 0x8456 - FOG_COORDINATE_ARRAY = 0x8457 - COLOR_SUM = 0x8458 - CURRENT_SECONDARY_COLOR = 0x8459 - SECONDARY_COLOR_ARRAY_SIZE = 0x845A - SECONDARY_COLOR_ARRAY_TYPE = 0x845B - SECONDARY_COLOR_ARRAY_STRIDE = 0x845C - SECONDARY_COLOR_ARRAY_POINTER = 0x845D - SECONDARY_COLOR_ARRAY = 0x845E - TEXTURE0 = 0x84C0 - TEXTURE1 = 0x84C1 - TEXTURE2 = 0x84C2 - TEXTURE3 = 0x84C3 - TEXTURE4 = 0x84C4 - TEXTURE5 = 0x84C5 - TEXTURE6 = 0x84C6 - TEXTURE7 = 0x84C7 - TEXTURE8 = 0x84C8 - TEXTURE9 = 0x84C9 - TEXTURE10 = 0x84CA - TEXTURE11 = 0x84CB - TEXTURE12 = 0x84CC - TEXTURE13 = 0x84CD - TEXTURE14 = 0x84CE - TEXTURE15 = 0x84CF - TEXTURE16 = 0x84D0 - TEXTURE17 = 0x84D1 - TEXTURE18 = 0x84D2 - TEXTURE19 = 0x84D3 - TEXTURE20 = 0x84D4 - TEXTURE21 = 0x84D5 - TEXTURE22 = 0x84D6 - TEXTURE23 = 0x84D7 - TEXTURE24 = 0x84D8 - TEXTURE25 = 0x84D9 - TEXTURE26 = 0x84DA - TEXTURE27 = 0x84DB - TEXTURE28 = 0x84DC - TEXTURE29 = 0x84DD - TEXTURE30 = 0x84DE - TEXTURE31 = 0x84DF - ACTIVE_TEXTURE = 0x84E0 - CLIENT_ACTIVE_TEXTURE = 0x84E1 - MAX_TEXTURE_UNITS = 0x84E2 - TRANSPOSE_MODELVIEW_MATRIX = 0x84E3 - TRANSPOSE_PROJECTION_MATRIX = 0x84E4 - TRANSPOSE_TEXTURE_MATRIX = 0x84E5 - TRANSPOSE_COLOR_MATRIX = 0x84E6 - SUBTRACT = 0x84E7 - COMPRESSED_ALPHA = 0x84E9 - COMPRESSED_LUMINANCE = 0x84EA - COMPRESSED_LUMINANCE_ALPHA = 0x84EB - COMPRESSED_INTENSITY = 0x84EC - COMPRESSED_RGB = 0x84ED - COMPRESSED_RGBA = 0x84EE - MAX_TEXTURE_LOD_BIAS = 0x84FD - TEXTURE_FILTER_CONTROL = 0x8500 - TEXTURE_LOD_BIAS = 0x8501 - INCR_WRAP = 0x8507 - DECR_WRAP = 0x8508 - NORMAL_MAP = 0x8511 - REFLECTION_MAP = 0x8512 - TEXTURE_CUBE_MAP = 0x8513 - TEXTURE_BINDING_CUBE_MAP = 0x8514 - TEXTURE_CUBE_MAP_POSITIVE_X = 0x8515 - TEXTURE_CUBE_MAP_NEGATIVE_X = 0x8516 - TEXTURE_CUBE_MAP_POSITIVE_Y = 0x8517 - TEXTURE_CUBE_MAP_NEGATIVE_Y = 0x8518 - TEXTURE_CUBE_MAP_POSITIVE_Z = 0x8519 - TEXTURE_CUBE_MAP_NEGATIVE_Z = 0x851A - PROXY_TEXTURE_CUBE_MAP = 0x851B - MAX_CUBE_MAP_TEXTURE_SIZE = 0x851C - COMBINE = 0x8570 - COMBINE_RGB = 0x8571 - COMBINE_ALPHA = 0x8572 - RGB_SCALE = 0x8573 - ADD_SIGNED = 0x8574 - INTERPOLATE = 0x8575 - CONSTANT = 0x8576 - PRIMARY_COLOR = 0x8577 - PREVIOUS = 0x8578 - SOURCE0_RGB = 0x8580 - SOURCE1_RGB = 0x8581 - SOURCE2_RGB = 0x8582 - SOURCE0_ALPHA = 0x8588 - SOURCE1_ALPHA = 0x8589 - SOURCE2_ALPHA = 0x858A - OPERAND0_RGB = 0x8590 - OPERAND1_RGB = 0x8591 - OPERAND2_RGB = 0x8592 - OPERAND0_ALPHA = 0x8598 - OPERAND1_ALPHA = 0x8599 - OPERAND2_ALPHA = 0x859A - TEXTURE_COMPRESSED_IMAGE_SIZE = 0x86A0 - TEXTURE_COMPRESSED = 0x86A1 - NUM_COMPRESSED_TEXTURE_FORMATS = 0x86A2 - COMPRESSED_TEXTURE_FORMATS = 0x86A3 - DOT3_RGB = 0x86AE - DOT3_RGBA = 0x86AF - TEXTURE_DEPTH_SIZE = 0x884A - DEPTH_TEXTURE_MODE = 0x884B - TEXTURE_COMPARE_MODE = 0x884C - TEXTURE_COMPARE_FUNC = 0x884D - COMPARE_R_TO_TEXTURE = 0x884E -) - -// https://www.opengl.org/sdk/docs/man2/xhtml/glViewport.xml -func (gl *GL) Viewport(x, y, width, height int) { - C.gl1_4_glViewport(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// DepthRange specifies the mapping of depth values from normalized device -// coordinates to window coordinates. -// -// Parameter nearVal specifies the mapping of the near clipping plane to window -// coordinates (defaults to 0), while farVal specifies the mapping of the far -// clipping plane to window coordinates (defaults to 1). -// -// After clipping and division by w, depth coordinates range from -1 to 1, -// corresponding to the near and far clipping planes. DepthRange specifies a -// linear mapping of the normalized depth coordinates in this range to window -// depth coordinates. Regardless of the actual depth buffer implementation, -// window coordinate depth values are treated as though they range from 0 through 1 -// (like color components). Thus, the values accepted by DepthRange are both -// clamped to this range before they are accepted. -// -// The default setting of (0, 1) maps the near plane to 0 and the far plane to 1. -// With this mapping, the depth buffer range is fully utilized. -// -// It is not necessary that nearVal be less than farVal. Reverse mappings such as -// nearVal 1, and farVal 0 are acceptable. -// -// GL.INVALID_OPERATION is generated if DepthRange is executed between the -// execution of Begin and the corresponding execution of End. -func (gl *GL) DepthRange(nearVal, farVal float64) { - C.gl1_4_glDepthRange(gl.funcs, C.GLdouble(nearVal), C.GLdouble(farVal)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIsEnabled.xml -func (gl *GL) IsEnabled(cap glbase.Enum) bool { - glresult := C.gl1_4_glIsEnabled(gl.funcs, C.GLenum(cap)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexLevelParameteriv.xml -func (gl *GL) GetTexLevelParameteriv(target glbase.Enum, level int, pname glbase.Enum, params []int32) { - C.gl1_4_glGetTexLevelParameteriv(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexLevelParameterfv.xml -func (gl *GL) GetTexLevelParameterfv(target glbase.Enum, level int, pname glbase.Enum, params []float32) { - C.gl1_4_glGetTexLevelParameterfv(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexParameteriv.xml -func (gl *GL) GetTexParameteriv(target, pname glbase.Enum, params []int32) { - C.gl1_4_glGetTexParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexParameterfv.xml -func (gl *GL) GetTexParameterfv(target, pname glbase.Enum, params []float32) { - C.gl1_4_glGetTexParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexImage.xml -func (gl *GL) GetTexImage(target glbase.Enum, level int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl1_4_glGetTexImage(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetIntegerv.xml -func (gl *GL) GetIntegerv(pname glbase.Enum, params []int32) { - C.gl1_4_glGetIntegerv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetFloatv.xml -func (gl *GL) GetFloatv(pname glbase.Enum, params []float32) { - C.gl1_4_glGetFloatv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetError.xml -func (gl *GL) GetError() glbase.Enum { - glresult := C.gl1_4_glGetError(gl.funcs) - return glbase.Enum(glresult) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetDoublev.xml -func (gl *GL) GetDoublev(pname glbase.Enum, params []float64) { - C.gl1_4_glGetDoublev(gl.funcs, C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetBooleanv.xml -func (gl *GL) GetBooleanv(pname glbase.Enum, params []bool) { - C.gl1_4_glGetBooleanv(gl.funcs, C.GLenum(pname), (*C.GLboolean)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glReadPixels.xml -func (gl *GL) ReadPixels(x, y, width, height int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl1_4_glReadPixels(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glReadBuffer.xml -func (gl *GL) ReadBuffer(mode glbase.Enum) { - C.gl1_4_glReadBuffer(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPixelStorei.xml -func (gl *GL) PixelStorei(pname glbase.Enum, param int32) { - C.gl1_4_glPixelStorei(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPixelStoref.xml -func (gl *GL) PixelStoref(pname glbase.Enum, param float32) { - C.gl1_4_glPixelStoref(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDepthFunc.xml -func (gl *GL) DepthFunc(glfunc glbase.Enum) { - C.gl1_4_glDepthFunc(gl.funcs, C.GLenum(glfunc)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glStencilOp.xml -func (gl *GL) StencilOp(fail, zfail, zpass glbase.Enum) { - C.gl1_4_glStencilOp(gl.funcs, C.GLenum(fail), C.GLenum(zfail), C.GLenum(zpass)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glStencilFunc.xml -func (gl *GL) StencilFunc(glfunc glbase.Enum, ref int32, mask uint32) { - C.gl1_4_glStencilFunc(gl.funcs, C.GLenum(glfunc), C.GLint(ref), C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLogicOp.xml -func (gl *GL) LogicOp(opcode glbase.Enum) { - C.gl1_4_glLogicOp(gl.funcs, C.GLenum(opcode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glBlendFunc.xml -func (gl *GL) BlendFunc(sfactor, dfactor glbase.Enum) { - C.gl1_4_glBlendFunc(gl.funcs, C.GLenum(sfactor), C.GLenum(dfactor)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFlush.xml -func (gl *GL) Flush() { - C.gl1_4_glFlush(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFinish.xml -func (gl *GL) Finish() { - C.gl1_4_glFinish(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEnable.xml -func (gl *GL) Enable(cap glbase.Enum) { - C.gl1_4_glEnable(gl.funcs, C.GLenum(cap)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDisable.xml -func (gl *GL) Disable(cap glbase.Enum) { - C.gl1_4_glDisable(gl.funcs, C.GLenum(cap)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDepthMask.xml -func (gl *GL) DepthMask(flag bool) { - C.gl1_4_glDepthMask(gl.funcs, *(*C.GLboolean)(unsafe.Pointer(&flag))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColorMask.xml -func (gl *GL) ColorMask(red, green, blue, alpha bool) { - C.gl1_4_glColorMask(gl.funcs, *(*C.GLboolean)(unsafe.Pointer(&red)), *(*C.GLboolean)(unsafe.Pointer(&green)), *(*C.GLboolean)(unsafe.Pointer(&blue)), *(*C.GLboolean)(unsafe.Pointer(&alpha))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glStencilMask.xml -func (gl *GL) StencilMask(mask uint32) { - C.gl1_4_glStencilMask(gl.funcs, C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glClearDepth.xml -func (gl *GL) ClearDepth(depth float64) { - C.gl1_4_glClearDepth(gl.funcs, C.GLdouble(depth)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glClearStencil.xml -func (gl *GL) ClearStencil(s int32) { - C.gl1_4_glClearStencil(gl.funcs, C.GLint(s)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glClearColor.xml -func (gl *GL) ClearColor(red, green, blue, alpha float32) { - C.gl1_4_glClearColor(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glClear.xml -func (gl *GL) Clear(mask glbase.Bitfield) { - C.gl1_4_glClear(gl.funcs, C.GLbitfield(mask)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDrawBuffer.xml -func (gl *GL) DrawBuffer(mode glbase.Enum) { - C.gl1_4_glDrawBuffer(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexImage2D.xml -func (gl *GL) TexImage2D(target glbase.Enum, level int, internalFormat int32, width, height, border int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl1_4_glTexImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLint(border), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexImage1D.xml -func (gl *GL) TexImage1D(target glbase.Enum, level int, internalFormat int32, width, border int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl1_4_glTexImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(internalFormat), C.GLsizei(width), C.GLint(border), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexParameteriv.xml -func (gl *GL) TexParameteriv(target, pname glbase.Enum, params []int32) { - C.gl1_4_glTexParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexParameteri.xml -func (gl *GL) TexParameteri(target, pname glbase.Enum, param int32) { - C.gl1_4_glTexParameteri(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexParameterfv.xml -func (gl *GL) TexParameterfv(target, pname glbase.Enum, params []float32) { - C.gl1_4_glTexParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexParameterf.xml -func (gl *GL) TexParameterf(target, pname glbase.Enum, param float32) { - C.gl1_4_glTexParameterf(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glScissor.xml -func (gl *GL) Scissor(x, y, width, height int) { - C.gl1_4_glScissor(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPolygonMode.xml -func (gl *GL) PolygonMode(face, mode glbase.Enum) { - C.gl1_4_glPolygonMode(gl.funcs, C.GLenum(face), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPointSize.xml -func (gl *GL) PointSize(size float32) { - C.gl1_4_glPointSize(gl.funcs, C.GLfloat(size)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLineWidth.xml -func (gl *GL) LineWidth(width float32) { - C.gl1_4_glLineWidth(gl.funcs, C.GLfloat(width)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glHint.xml -func (gl *GL) Hint(target, mode glbase.Enum) { - C.gl1_4_glHint(gl.funcs, C.GLenum(target), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFrontFace.xml -func (gl *GL) FrontFace(mode glbase.Enum) { - C.gl1_4_glFrontFace(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCullFace.xml -func (gl *GL) CullFace(mode glbase.Enum) { - C.gl1_4_glCullFace(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexubv.xml -func (gl *GL) Indexubv(c []uint8) { - C.gl1_4_glIndexubv(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexub.xml -func (gl *GL) Indexub(c uint8) { - C.gl1_4_glIndexub(gl.funcs, C.GLubyte(c)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIsTexture.xml -func (gl *GL) IsTexture(texture glbase.Texture) bool { - glresult := C.gl1_4_glIsTexture(gl.funcs, C.GLuint(texture)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// GenTextures returns n texture names in textures. There is no guarantee -// that the names form a contiguous set of integers; however, it is -// guaranteed that none of the returned names was in use immediately before -// the call to GenTextures. -// -// The generated textures have no dimensionality; they assume the -// dimensionality of the texture target to which they are first bound (see -// BindTexture). -// -// Texture names returned by a call to GenTextures are not returned by -// subsequent calls, unless they are first deleted with DeleteTextures. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// GenTextures is available in GL version 2.0 or greater. -func (gl *GL) GenTextures(n int) []glbase.Texture { - if n == 0 { - return nil - } - textures := make([]glbase.Texture, n) - C.gl1_4_glGenTextures(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0]))) - return textures -} - -// DeleteTextures deletes the textures objects whose names are stored -// in the textures slice. After a texture is deleted, it has no contents or -// dimensionality, and its name is free for reuse (for example by -// GenTextures). If a texture that is currently bound is deleted, the binding -// reverts to 0 (the default texture). -// -// DeleteTextures silently ignores 0's and names that do not correspond to -// existing textures. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// DeleteTextures is available in GL version 2.0 or greater. -func (gl *GL) DeleteTextures(textures []glbase.Texture) { - n := len(textures) - if n == 0 { - return - } - C.gl1_4_glDeleteTextures(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glBindTexture.xml -func (gl *GL) BindTexture(target glbase.Enum, texture glbase.Texture) { - C.gl1_4_glBindTexture(gl.funcs, C.GLenum(target), C.GLuint(texture)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexSubImage2D.xml -func (gl *GL) TexSubImage2D(target glbase.Enum, level, xoffset, yoffset, width, height int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl1_4_glTexSubImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexSubImage1D.xml -func (gl *GL) TexSubImage1D(target glbase.Enum, level, xoffset, width int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl1_4_glTexSubImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLsizei(width), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyTexSubImage2D.xml -func (gl *GL) CopyTexSubImage2D(target glbase.Enum, level, xoffset, yoffset, x, y, width, height int) { - C.gl1_4_glCopyTexSubImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyTexSubImage1D.xml -func (gl *GL) CopyTexSubImage1D(target glbase.Enum, level, xoffset, x, y, width int) { - C.gl1_4_glCopyTexSubImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(x), C.GLint(y), C.GLsizei(width)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyTexImage2D.xml -func (gl *GL) CopyTexImage2D(target glbase.Enum, level int, internalFormat glbase.Enum, x, y, width, height, border int) { - C.gl1_4_glCopyTexImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height), C.GLint(border)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyTexImage1D.xml -func (gl *GL) CopyTexImage1D(target glbase.Enum, level int, internalFormat glbase.Enum, x, y, width, border int) { - C.gl1_4_glCopyTexImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLint(border)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPolygonOffset.xml -func (gl *GL) PolygonOffset(factor, units float32) { - C.gl1_4_glPolygonOffset(gl.funcs, C.GLfloat(factor), C.GLfloat(units)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDrawElements.xml -func (gl *GL) DrawElements(mode glbase.Enum, count int, gltype glbase.Enum, indices interface{}) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl1_4_glDrawElements(gl.funcs, C.GLenum(mode), C.GLsizei(count), C.GLenum(gltype), indices_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDrawArrays.xml -func (gl *GL) DrawArrays(mode glbase.Enum, first, count int) { - C.gl1_4_glDrawArrays(gl.funcs, C.GLenum(mode), C.GLint(first), C.GLsizei(count)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyTexSubImage3D.xml -func (gl *GL) CopyTexSubImage3D(target glbase.Enum, level, xoffset, yoffset int, zoffset int32, x, y, width, height int) { - C.gl1_4_glCopyTexSubImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(zoffset), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexSubImage3D.xml -func (gl *GL) TexSubImage3D(target glbase.Enum, level, xoffset, yoffset int, zoffset int32, width, height int, depth int32, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl1_4_glTexSubImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(zoffset), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexImage3D.xml -func (gl *GL) TexImage3D(target glbase.Enum, level int, internalFormat int32, width, height int, depth int32, border int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl1_4_glTexImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLint(border), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDrawRangeElements.xml -func (gl *GL) DrawRangeElements(mode glbase.Enum, start, end uint32, count int, gltype glbase.Enum, indices interface{}) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl1_4_glDrawRangeElements(gl.funcs, C.GLenum(mode), C.GLuint(start), C.GLuint(end), C.GLsizei(count), C.GLenum(gltype), indices_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glBlendEquation.xml -func (gl *GL) BlendEquation(mode glbase.Enum) { - C.gl1_4_glBlendEquation(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glBlendColor.xml -func (gl *GL) BlendColor(red, green, blue, alpha float32) { - C.gl1_4_glBlendColor(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetCompressedTexImage.xml -func (gl *GL) GetCompressedTexImage(target glbase.Enum, level int, img interface{}) { - var img_ptr unsafe.Pointer - var img_v = reflect.ValueOf(img) - if img != nil && img_v.Kind() != reflect.Slice { - panic("parameter img must be a slice") - } - if img != nil { - img_ptr = unsafe.Pointer(img_v.Index(0).Addr().Pointer()) - } - C.gl1_4_glGetCompressedTexImage(gl.funcs, C.GLenum(target), C.GLint(level), img_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCompressedTexSubImage1D.xml -func (gl *GL) CompressedTexSubImage1D(target glbase.Enum, level, xoffset, width int, format glbase.Enum, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl1_4_glCompressedTexSubImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLsizei(width), C.GLenum(format), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCompressedTexSubImage2D.xml -func (gl *GL) CompressedTexSubImage2D(target glbase.Enum, level, xoffset, yoffset, width, height int, format glbase.Enum, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl1_4_glCompressedTexSubImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCompressedTexSubImage3D.xml -func (gl *GL) CompressedTexSubImage3D(target glbase.Enum, level, xoffset, yoffset int, zoffset int32, width, height int, depth int32, format glbase.Enum, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl1_4_glCompressedTexSubImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(zoffset), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLenum(format), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCompressedTexImage1D.xml -func (gl *GL) CompressedTexImage1D(target glbase.Enum, level int, internalFormat glbase.Enum, width, border, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl1_4_glCompressedTexImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLsizei(width), C.GLint(border), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCompressedTexImage2D.xml -func (gl *GL) CompressedTexImage2D(target glbase.Enum, level int, internalFormat glbase.Enum, width, height, border, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl1_4_glCompressedTexImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLint(border), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCompressedTexImage3D.xml -func (gl *GL) CompressedTexImage3D(target glbase.Enum, level int, internalFormat glbase.Enum, width, height int, depth int32, border, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl1_4_glCompressedTexImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLint(border), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSampleCoverage.xml -func (gl *GL) SampleCoverage(value float32, invert bool) { - C.gl1_4_glSampleCoverage(gl.funcs, C.GLfloat(value), *(*C.GLboolean)(unsafe.Pointer(&invert))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glActiveTexture.xml -func (gl *GL) ActiveTexture(texture glbase.Enum) { - C.gl1_4_glActiveTexture(gl.funcs, C.GLenum(texture)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPointParameteriv.xml -func (gl *GL) PointParameteriv(pname glbase.Enum, params []int32) { - C.gl1_4_glPointParameteriv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPointParameteri.xml -func (gl *GL) PointParameteri(pname glbase.Enum, param int32) { - C.gl1_4_glPointParameteri(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPointParameterfv.xml -func (gl *GL) PointParameterfv(pname glbase.Enum, params []float32) { - C.gl1_4_glPointParameterfv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPointParameterf.xml -func (gl *GL) PointParameterf(pname glbase.Enum, param float32) { - C.gl1_4_glPointParameterf(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiDrawArrays.xml -func (gl *GL) MultiDrawArrays(mode glbase.Enum, first, count []int, drawcount int32) { - C.gl1_4_glMultiDrawArrays(gl.funcs, C.GLenum(mode), (*C.GLint)(unsafe.Pointer(&first[0])), (*C.GLsizei)(unsafe.Pointer(&count[0])), C.GLsizei(drawcount)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glBlendFuncSeparate.xml -func (gl *GL) BlendFuncSeparate(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha glbase.Enum) { - C.gl1_4_glBlendFuncSeparate(gl.funcs, C.GLenum(sfactorRGB), C.GLenum(dfactorRGB), C.GLenum(sfactorAlpha), C.GLenum(dfactorAlpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTranslatef.xml -func (gl *GL) Translatef(x, y, z float32) { - C.gl1_4_glTranslatef(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTranslated.xml -func (gl *GL) Translated(x, y, z float64) { - C.gl1_4_glTranslated(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glScalef.xml -func (gl *GL) Scalef(x, y, z float32) { - C.gl1_4_glScalef(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glScaled.xml -func (gl *GL) Scaled(x, y, z float64) { - C.gl1_4_glScaled(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRotatef.xml -func (gl *GL) Rotatef(angle, x, y, z float32) { - C.gl1_4_glRotatef(gl.funcs, C.GLfloat(angle), C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRotated.xml -func (gl *GL) Rotated(angle, x, y, z float64) { - C.gl1_4_glRotated(gl.funcs, C.GLdouble(angle), C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPushMatrix.xml -func (gl *GL) PushMatrix() { - C.gl1_4_glPushMatrix(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPopMatrix.xml -func (gl *GL) PopMatrix() { - C.gl1_4_glPopMatrix(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glOrtho.xml -func (gl *GL) Ortho(left, right, bottom, top, zNear, zFar float64) { - C.gl1_4_glOrtho(gl.funcs, C.GLdouble(left), C.GLdouble(right), C.GLdouble(bottom), C.GLdouble(top), C.GLdouble(zNear), C.GLdouble(zFar)) -} - -// MultMatrixd multiplies the current matrix with the provided matrix. -// -// The m parameter must hold 16 consecutive elements of a 4x4 column-major matrix. -// -// The current matrix is determined by the current matrix mode (see -// MatrixMode). It is either the projection matrix, modelview matrix, or the -// texture matrix. -// -// For example, if the current matrix is C and the coordinates to be transformed -// are v = (v[0], v[1], v[2], v[3]), then the current transformation is C × v, or -// -// c[0] c[4] c[8] c[12] v[0] -// c[1] c[5] c[9] c[13] v[1] -// c[2] c[6] c[10] c[14] X v[2] -// c[3] c[7] c[11] c[15] v[3] -// -// Calling MultMatrix with an argument of m = m[0], m[1], ..., m[15] -// replaces the current transformation with (C X M) x v, or -// -// c[0] c[4] c[8] c[12] m[0] m[4] m[8] m[12] v[0] -// c[1] c[5] c[9] c[13] m[1] m[5] m[9] m[13] v[1] -// c[2] c[6] c[10] c[14] X m[2] m[6] m[10] m[14] X v[2] -// c[3] c[7] c[11] c[15] m[3] m[7] m[11] m[15] v[3] -// -// Where 'X' denotes matrix multiplication, and v is represented as a 4x1 matrix. -// -// While the elements of the matrix may be specified with single or double -// precision, the GL may store or operate on these values in less-than-single -// precision. -// -// In many computer languages, 4×4 arrays are represented in row-major -// order. The transformations just described represent these matrices in -// column-major order. The order of the multiplication is important. For -// example, if the current transformation is a rotation, and MultMatrix is -// called with a translation matrix, the translation is done directly on the -// coordinates to be transformed, while the rotation is done on the results -// of that translation. -// -// GL.INVALID_OPERATION is generated if MultMatrix is executed between the -// execution of Begin and the corresponding execution of End. -func (gl *GL) MultMatrixd(m []float64) { - if len(m) != 16 { - panic("parameter m must have length 16 for the 4x4 matrix") - } - C.gl1_4_glMultMatrixd(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&m[0]))) -} - -// MultMatrixf multiplies the current matrix with the provided matrix. -// -// The m parameter must hold 16 consecutive elements of a 4x4 column-major matrix. -// -// The current matrix is determined by the current matrix mode (see -// MatrixMode). It is either the projection matrix, modelview matrix, or the -// texture matrix. -// -// For example, if the current matrix is C and the coordinates to be transformed -// are v = (v[0], v[1], v[2], v[3]), then the current transformation is C × v, or -// -// c[0] c[4] c[8] c[12] v[0] -// c[1] c[5] c[9] c[13] v[1] -// c[2] c[6] c[10] c[14] X v[2] -// c[3] c[7] c[11] c[15] v[3] -// -// Calling MultMatrix with an argument of m = m[0], m[1], ..., m[15] -// replaces the current transformation with (C X M) x v, or -// -// c[0] c[4] c[8] c[12] m[0] m[4] m[8] m[12] v[0] -// c[1] c[5] c[9] c[13] m[1] m[5] m[9] m[13] v[1] -// c[2] c[6] c[10] c[14] X m[2] m[6] m[10] m[14] X v[2] -// c[3] c[7] c[11] c[15] m[3] m[7] m[11] m[15] v[3] -// -// Where 'X' denotes matrix multiplication, and v is represented as a 4x1 matrix. -// -// While the elements of the matrix may be specified with single or double -// precision, the GL may store or operate on these values in less-than-single -// precision. -// -// In many computer languages, 4×4 arrays are represented in row-major -// order. The transformations just described represent these matrices in -// column-major order. The order of the multiplication is important. For -// example, if the current transformation is a rotation, and MultMatrix is -// called with a translation matrix, the translation is done directly on the -// coordinates to be transformed, while the rotation is done on the results -// of that translation. -// -// GL.INVALID_OPERATION is generated if MultMatrix is executed between the -// execution of Begin and the corresponding execution of End. -func (gl *GL) MultMatrixf(m []float32) { - if len(m) != 16 { - panic("parameter m must have length 16 for the 4x4 matrix") - } - C.gl1_4_glMultMatrixf(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMatrixMode.xml -func (gl *GL) MatrixMode(mode glbase.Enum) { - C.gl1_4_glMatrixMode(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLoadMatrixd.xml -func (gl *GL) LoadMatrixd(m []float64) { - C.gl1_4_glLoadMatrixd(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLoadMatrixf.xml -func (gl *GL) LoadMatrixf(m []float32) { - C.gl1_4_glLoadMatrixf(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLoadIdentity.xml -func (gl *GL) LoadIdentity() { - C.gl1_4_glLoadIdentity(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFrustum.xml -func (gl *GL) Frustum(left, right, bottom, top, zNear, zFar float64) { - C.gl1_4_glFrustum(gl.funcs, C.GLdouble(left), C.GLdouble(right), C.GLdouble(bottom), C.GLdouble(top), C.GLdouble(zNear), C.GLdouble(zFar)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIsList.xml -func (gl *GL) IsList(list uint32) bool { - glresult := C.gl1_4_glIsList(gl.funcs, C.GLuint(list)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexGeniv.xml -func (gl *GL) GetTexGeniv(coord, pname glbase.Enum, params []int32) { - C.gl1_4_glGetTexGeniv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexGenfv.xml -func (gl *GL) GetTexGenfv(coord, pname glbase.Enum, params []float32) { - C.gl1_4_glGetTexGenfv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexGendv.xml -func (gl *GL) GetTexGendv(coord, pname glbase.Enum, params []float64) { - C.gl1_4_glGetTexGendv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexEnviv.xml -func (gl *GL) GetTexEnviv(target, pname glbase.Enum, params []int32) { - C.gl1_4_glGetTexEnviv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexEnvfv.xml -func (gl *GL) GetTexEnvfv(target, pname glbase.Enum, params []float32) { - C.gl1_4_glGetTexEnvfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetPolygonStipple.xml -func (gl *GL) GetPolygonStipple(mask []uint8) { - C.gl1_4_glGetPolygonStipple(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&mask[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetPixelMapusv.xml -func (gl *GL) GetPixelMapusv(glmap glbase.Enum, values []uint16) { - C.gl1_4_glGetPixelMapusv(gl.funcs, C.GLenum(glmap), (*C.GLushort)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetPixelMapuiv.xml -func (gl *GL) GetPixelMapuiv(glmap glbase.Enum, values []uint32) { - C.gl1_4_glGetPixelMapuiv(gl.funcs, C.GLenum(glmap), (*C.GLuint)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetPixelMapfv.xml -func (gl *GL) GetPixelMapfv(glmap glbase.Enum, values []float32) { - C.gl1_4_glGetPixelMapfv(gl.funcs, C.GLenum(glmap), (*C.GLfloat)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetMaterialiv.xml -func (gl *GL) GetMaterialiv(face, pname glbase.Enum, params []int32) { - C.gl1_4_glGetMaterialiv(gl.funcs, C.GLenum(face), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetMaterialfv.xml -func (gl *GL) GetMaterialfv(face, pname glbase.Enum, params []float32) { - C.gl1_4_glGetMaterialfv(gl.funcs, C.GLenum(face), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetMapiv.xml -func (gl *GL) GetMapiv(target, query glbase.Enum, v []int32) { - C.gl1_4_glGetMapiv(gl.funcs, C.GLenum(target), C.GLenum(query), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetMapfv.xml -func (gl *GL) GetMapfv(target, query glbase.Enum, v []float32) { - C.gl1_4_glGetMapfv(gl.funcs, C.GLenum(target), C.GLenum(query), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetMapdv.xml -func (gl *GL) GetMapdv(target, query glbase.Enum, v []float64) { - C.gl1_4_glGetMapdv(gl.funcs, C.GLenum(target), C.GLenum(query), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetLightiv.xml -func (gl *GL) GetLightiv(light, pname glbase.Enum, params []int32) { - C.gl1_4_glGetLightiv(gl.funcs, C.GLenum(light), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetLightfv.xml -func (gl *GL) GetLightfv(light, pname glbase.Enum, params []float32) { - C.gl1_4_glGetLightfv(gl.funcs, C.GLenum(light), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetClipPlane.xml -func (gl *GL) GetClipPlane(plane glbase.Enum, equation []float64) { - C.gl1_4_glGetClipPlane(gl.funcs, C.GLenum(plane), (*C.GLdouble)(unsafe.Pointer(&equation[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDrawPixels.xml -func (gl *GL) DrawPixels(width, height int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl1_4_glDrawPixels(gl.funcs, C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyPixels.xml -func (gl *GL) CopyPixels(x, y, width, height int, gltype glbase.Enum) { - C.gl1_4_glCopyPixels(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height), C.GLenum(gltype)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPixelMapusv.xml -func (gl *GL) PixelMapusv(glmap glbase.Enum, mapsize int32, values []uint16) { - C.gl1_4_glPixelMapusv(gl.funcs, C.GLenum(glmap), C.GLint(mapsize), (*C.GLushort)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPixelMapuiv.xml -func (gl *GL) PixelMapuiv(glmap glbase.Enum, mapsize int32, values []uint32) { - C.gl1_4_glPixelMapuiv(gl.funcs, C.GLenum(glmap), C.GLint(mapsize), (*C.GLuint)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPixelMapfv.xml -func (gl *GL) PixelMapfv(glmap glbase.Enum, mapsize int32, values []float32) { - C.gl1_4_glPixelMapfv(gl.funcs, C.GLenum(glmap), C.GLint(mapsize), (*C.GLfloat)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPixelTransferi.xml -func (gl *GL) PixelTransferi(pname glbase.Enum, param int32) { - C.gl1_4_glPixelTransferi(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPixelTransferf.xml -func (gl *GL) PixelTransferf(pname glbase.Enum, param float32) { - C.gl1_4_glPixelTransferf(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPixelZoom.xml -func (gl *GL) PixelZoom(xfactor, yfactor float32) { - C.gl1_4_glPixelZoom(gl.funcs, C.GLfloat(xfactor), C.GLfloat(yfactor)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glAlphaFunc.xml -func (gl *GL) AlphaFunc(glfunc glbase.Enum, ref float32) { - C.gl1_4_glAlphaFunc(gl.funcs, C.GLenum(glfunc), C.GLfloat(ref)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalPoint2.xml -func (gl *GL) EvalPoint2(i, j int32) { - C.gl1_4_glEvalPoint2(gl.funcs, C.GLint(i), C.GLint(j)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalMesh2.xml -func (gl *GL) EvalMesh2(mode glbase.Enum, i1, i2, j1, j2 int32) { - C.gl1_4_glEvalMesh2(gl.funcs, C.GLenum(mode), C.GLint(i1), C.GLint(i2), C.GLint(j1), C.GLint(j2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalPoint1.xml -func (gl *GL) EvalPoint1(i int32) { - C.gl1_4_glEvalPoint1(gl.funcs, C.GLint(i)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalMesh1.xml -func (gl *GL) EvalMesh1(mode glbase.Enum, i1, i2 int32) { - C.gl1_4_glEvalMesh1(gl.funcs, C.GLenum(mode), C.GLint(i1), C.GLint(i2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalCoord2fv.xml -func (gl *GL) EvalCoord2fv(u []float32) { - if len(u) != 2 { - panic("parameter u has incorrect length") - } - C.gl1_4_glEvalCoord2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&u[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalCoord2f.xml -func (gl *GL) EvalCoord2f(u, v float32) { - C.gl1_4_glEvalCoord2f(gl.funcs, C.GLfloat(u), C.GLfloat(v)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalCoord2dv.xml -func (gl *GL) EvalCoord2dv(u []float64) { - if len(u) != 2 { - panic("parameter u has incorrect length") - } - C.gl1_4_glEvalCoord2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&u[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalCoord2d.xml -func (gl *GL) EvalCoord2d(u, v float64) { - C.gl1_4_glEvalCoord2d(gl.funcs, C.GLdouble(u), C.GLdouble(v)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalCoord1fv.xml -func (gl *GL) EvalCoord1fv(u []float32) { - C.gl1_4_glEvalCoord1fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&u[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalCoord1f.xml -func (gl *GL) EvalCoord1f(u float32) { - C.gl1_4_glEvalCoord1f(gl.funcs, C.GLfloat(u)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalCoord1dv.xml -func (gl *GL) EvalCoord1dv(u []float64) { - C.gl1_4_glEvalCoord1dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&u[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalCoord1d.xml -func (gl *GL) EvalCoord1d(u float64) { - C.gl1_4_glEvalCoord1d(gl.funcs, C.GLdouble(u)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMapGrid2f.xml -func (gl *GL) MapGrid2f(un int32, u1, u2 float32, vn int32, v1, v2 float32) { - C.gl1_4_glMapGrid2f(gl.funcs, C.GLint(un), C.GLfloat(u1), C.GLfloat(u2), C.GLint(vn), C.GLfloat(v1), C.GLfloat(v2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMapGrid2d.xml -func (gl *GL) MapGrid2d(un int32, u1, u2 float64, vn int32, v1, v2 float64) { - C.gl1_4_glMapGrid2d(gl.funcs, C.GLint(un), C.GLdouble(u1), C.GLdouble(u2), C.GLint(vn), C.GLdouble(v1), C.GLdouble(v2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMapGrid1f.xml -func (gl *GL) MapGrid1f(un int32, u1, u2 float32) { - C.gl1_4_glMapGrid1f(gl.funcs, C.GLint(un), C.GLfloat(u1), C.GLfloat(u2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMapGrid1d.xml -func (gl *GL) MapGrid1d(un int32, u1, u2 float64) { - C.gl1_4_glMapGrid1d(gl.funcs, C.GLint(un), C.GLdouble(u1), C.GLdouble(u2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMap2f.xml -func (gl *GL) Map2f(target glbase.Enum, u1, u2 float32, ustride, uorder int32, v1, v2 float32, vstride, vorder int32, points []float32) { - C.gl1_4_glMap2f(gl.funcs, C.GLenum(target), C.GLfloat(u1), C.GLfloat(u2), C.GLint(ustride), C.GLint(uorder), C.GLfloat(v1), C.GLfloat(v2), C.GLint(vstride), C.GLint(vorder), (*C.GLfloat)(unsafe.Pointer(&points[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMap2d.xml -func (gl *GL) Map2d(target glbase.Enum, u1, u2 float64, ustride, uorder int32, v1, v2 float64, vstride, vorder int32, points []float64) { - C.gl1_4_glMap2d(gl.funcs, C.GLenum(target), C.GLdouble(u1), C.GLdouble(u2), C.GLint(ustride), C.GLint(uorder), C.GLdouble(v1), C.GLdouble(v2), C.GLint(vstride), C.GLint(vorder), (*C.GLdouble)(unsafe.Pointer(&points[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMap1f.xml -func (gl *GL) Map1f(target glbase.Enum, u1, u2 float32, stride, order int, points []float32) { - C.gl1_4_glMap1f(gl.funcs, C.GLenum(target), C.GLfloat(u1), C.GLfloat(u2), C.GLint(stride), C.GLint(order), (*C.GLfloat)(unsafe.Pointer(&points[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMap1d.xml -func (gl *GL) Map1d(target glbase.Enum, u1, u2 float64, stride, order int, points []float64) { - C.gl1_4_glMap1d(gl.funcs, C.GLenum(target), C.GLdouble(u1), C.GLdouble(u2), C.GLint(stride), C.GLint(order), (*C.GLdouble)(unsafe.Pointer(&points[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPushAttrib.xml -func (gl *GL) PushAttrib(mask glbase.Bitfield) { - C.gl1_4_glPushAttrib(gl.funcs, C.GLbitfield(mask)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPopAttrib.xml -func (gl *GL) PopAttrib() { - C.gl1_4_glPopAttrib(gl.funcs) -} - -// Accum executes an operation on the accumulation buffer. -// -// Parameter op defines the accumulation buffer operation (GL.ACCUM, GL.LOAD, -// GL.ADD, GL.MULT, or GL.RETURN) and specifies how the value parameter is -// used. -// -// The accumulation buffer is an extended-range color buffer. Images are not -// rendered into it. Rather, images rendered into one of the color buffers -// are added to the contents of the accumulation buffer after rendering. -// Effects such as antialiasing (of points, lines, and polygons), motion -// blur, and depth of field can be created by accumulating images generated -// with different transformation matrices. -// -// Each pixel in the accumulation buffer consists of red, green, blue, and -// alpha values. The number of bits per component in the accumulation buffer -// depends on the implementation. You can examine this number by calling -// GetIntegerv four times, with arguments GL.ACCUM_RED_BITS, -// GL.ACCUM_GREEN_BITS, GL.ACCUM_BLUE_BITS, and GL.ACCUM_ALPHA_BITS. -// Regardless of the number of bits per component, the range of values stored -// by each component is (-1, 1). The accumulation buffer pixels are mapped -// one-to-one with frame buffer pixels. -// -// All accumulation buffer operations are limited to the area of the current -// scissor box and applied identically to the red, green, blue, and alpha -// components of each pixel. If a Accum operation results in a value outside -// the range (-1, 1), the contents of an accumulation buffer pixel component -// are undefined. -// -// The operations are as follows: -// -// GL.ACCUM -// Obtains R, G, B, and A values from the buffer currently selected for -// reading (see ReadBuffer). Each component value is divided by 2 n - -// 1 , where n is the number of bits allocated to each color component -// in the currently selected buffer. The result is a floating-point -// value in the range 0 1 , which is multiplied by value and added to -// the corresponding pixel component in the accumulation buffer, -// thereby updating the accumulation buffer. -// -// GL.LOAD -// Similar to GL.ACCUM, except that the current value in the -// accumulation buffer is not used in the calculation of the new value. -// That is, the R, G, B, and A values from the currently selected -// buffer are divided by 2 n - 1 , multiplied by value, and then stored -// in the corresponding accumulation buffer cell, overwriting the -// current value. -// -// GL.ADD -// Adds value to each R, G, B, and A in the accumulation buffer. -// -// GL.MULT -// Multiplies each R, G, B, and A in the accumulation buffer by value -// and returns the scaled component to its corresponding accumulation -// buffer location. -// -// GL.RETURN -// Transfers accumulation buffer values to the color buffer or buffers -// currently selected for writing. Each R, G, B, and A component is -// multiplied by value, then multiplied by 2 n - 1 , clamped to the -// range 0 2 n - 1 , and stored in the corresponding display buffer -// cell. The only fragment operations that are applied to this transfer -// are pixel ownership, scissor, dithering, and color writemasks. -// -// To clear the accumulation buffer, call ClearAccum with R, G, B, and A -// values to set it to, then call Clear with the accumulation buffer -// enabled. -// -// Error GL.INVALID_ENUM is generated if op is not an accepted value. -// GL.INVALID_OPERATION is generated if there is no accumulation buffer. -// GL.INVALID_OPERATION is generated if Accum is executed between the -// execution of Begin and the corresponding execution of End. -func (gl *GL) Accum(op glbase.Enum, value float32) { - C.gl1_4_glAccum(gl.funcs, C.GLenum(op), C.GLfloat(value)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexMask.xml -func (gl *GL) IndexMask(mask uint32) { - C.gl1_4_glIndexMask(gl.funcs, C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glClearIndex.xml -func (gl *GL) ClearIndex(c float32) { - C.gl1_4_glClearIndex(gl.funcs, C.GLfloat(c)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glClearAccum.xml -func (gl *GL) ClearAccum(red, green, blue, alpha float32) { - C.gl1_4_glClearAccum(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPushName.xml -func (gl *GL) PushName(name uint32) { - C.gl1_4_glPushName(gl.funcs, C.GLuint(name)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPopName.xml -func (gl *GL) PopName() { - C.gl1_4_glPopName(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPassThrough.xml -func (gl *GL) PassThrough(token float32) { - C.gl1_4_glPassThrough(gl.funcs, C.GLfloat(token)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLoadName.xml -func (gl *GL) LoadName(name uint32) { - C.gl1_4_glLoadName(gl.funcs, C.GLuint(name)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glInitNames.xml -func (gl *GL) InitNames() { - C.gl1_4_glInitNames(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRenderMode.xml -func (gl *GL) RenderMode(mode glbase.Enum) int32 { - glresult := C.gl1_4_glRenderMode(gl.funcs, C.GLenum(mode)) - return int32(glresult) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSelectBuffer.xml -func (gl *GL) SelectBuffer(size int, buffer []glbase.Buffer) { - C.gl1_4_glSelectBuffer(gl.funcs, C.GLsizei(size), (*C.GLuint)(unsafe.Pointer(&buffer[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFeedbackBuffer.xml -func (gl *GL) FeedbackBuffer(size int, gltype glbase.Enum, buffer []float32) { - C.gl1_4_glFeedbackBuffer(gl.funcs, C.GLsizei(size), C.GLenum(gltype), (*C.GLfloat)(unsafe.Pointer(&buffer[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexGeniv.xml -func (gl *GL) TexGeniv(coord, pname glbase.Enum, params []int32) { - C.gl1_4_glTexGeniv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexGeni.xml -func (gl *GL) TexGeni(coord, pname glbase.Enum, param int32) { - C.gl1_4_glTexGeni(gl.funcs, C.GLenum(coord), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexGenfv.xml -func (gl *GL) TexGenfv(coord, pname glbase.Enum, params []float32) { - C.gl1_4_glTexGenfv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexGenf.xml -func (gl *GL) TexGenf(coord, pname glbase.Enum, param float32) { - C.gl1_4_glTexGenf(gl.funcs, C.GLenum(coord), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexGendv.xml -func (gl *GL) TexGendv(coord, pname glbase.Enum, params []float64) { - C.gl1_4_glTexGendv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexGend.xml -func (gl *GL) TexGend(coord, pname glbase.Enum, param float64) { - C.gl1_4_glTexGend(gl.funcs, C.GLenum(coord), C.GLenum(pname), C.GLdouble(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexEnviv.xml -func (gl *GL) TexEnviv(target, pname glbase.Enum, params []int32) { - C.gl1_4_glTexEnviv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexEnvi.xml -func (gl *GL) TexEnvi(target, pname glbase.Enum, param int32) { - C.gl1_4_glTexEnvi(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexEnvfv.xml -func (gl *GL) TexEnvfv(target, pname glbase.Enum, params []float32) { - C.gl1_4_glTexEnvfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexEnvf.xml -func (gl *GL) TexEnvf(target, pname glbase.Enum, param float32) { - C.gl1_4_glTexEnvf(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glShadeModel.xml -func (gl *GL) ShadeModel(mode glbase.Enum) { - C.gl1_4_glShadeModel(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPolygonStipple.xml -func (gl *GL) PolygonStipple(mask []uint8) { - C.gl1_4_glPolygonStipple(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&mask[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMaterialiv.xml -func (gl *GL) Materialiv(face, pname glbase.Enum, params []int32) { - C.gl1_4_glMaterialiv(gl.funcs, C.GLenum(face), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMateriali.xml -func (gl *GL) Materiali(face, pname glbase.Enum, param int32) { - C.gl1_4_glMateriali(gl.funcs, C.GLenum(face), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMaterialfv.xml -func (gl *GL) Materialfv(face, pname glbase.Enum, params []float32) { - C.gl1_4_glMaterialfv(gl.funcs, C.GLenum(face), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMaterialf.xml -func (gl *GL) Materialf(face, pname glbase.Enum, param float32) { - C.gl1_4_glMaterialf(gl.funcs, C.GLenum(face), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLineStipple.xml -func (gl *GL) LineStipple(factor int32, pattern uint16) { - C.gl1_4_glLineStipple(gl.funcs, C.GLint(factor), C.GLushort(pattern)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLightModeliv.xml -func (gl *GL) LightModeliv(pname glbase.Enum, params []int32) { - C.gl1_4_glLightModeliv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLightModeli.xml -func (gl *GL) LightModeli(pname glbase.Enum, param int32) { - C.gl1_4_glLightModeli(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLightModelfv.xml -func (gl *GL) LightModelfv(pname glbase.Enum, params []float32) { - C.gl1_4_glLightModelfv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLightModelf.xml -func (gl *GL) LightModelf(pname glbase.Enum, param float32) { - C.gl1_4_glLightModelf(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLightiv.xml -func (gl *GL) Lightiv(light, pname glbase.Enum, params []int32) { - C.gl1_4_glLightiv(gl.funcs, C.GLenum(light), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLighti.xml -func (gl *GL) Lighti(light, pname glbase.Enum, param int32) { - C.gl1_4_glLighti(gl.funcs, C.GLenum(light), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLightfv.xml -func (gl *GL) Lightfv(light, pname glbase.Enum, params []float32) { - C.gl1_4_glLightfv(gl.funcs, C.GLenum(light), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLightf.xml -func (gl *GL) Lightf(light, pname glbase.Enum, param float32) { - C.gl1_4_glLightf(gl.funcs, C.GLenum(light), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFogiv.xml -func (gl *GL) Fogiv(pname glbase.Enum, params []int32) { - C.gl1_4_glFogiv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFogi.xml -func (gl *GL) Fogi(pname glbase.Enum, param int32) { - C.gl1_4_glFogi(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFogfv.xml -func (gl *GL) Fogfv(pname glbase.Enum, params []float32) { - C.gl1_4_glFogfv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFogf.xml -func (gl *GL) Fogf(pname glbase.Enum, param float32) { - C.gl1_4_glFogf(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColorMaterial.xml -func (gl *GL) ColorMaterial(face, mode glbase.Enum) { - C.gl1_4_glColorMaterial(gl.funcs, C.GLenum(face), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glClipPlane.xml -func (gl *GL) ClipPlane(plane glbase.Enum, equation []float64) { - C.gl1_4_glClipPlane(gl.funcs, C.GLenum(plane), (*C.GLdouble)(unsafe.Pointer(&equation[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex4sv.xml -func (gl *GL) Vertex4sv(v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_4_glVertex4sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex4s.xml -func (gl *GL) Vertex4s(x, y, z, w int16) { - C.gl1_4_glVertex4s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z), C.GLshort(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex4iv.xml -func (gl *GL) Vertex4iv(v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_4_glVertex4iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex4i.xml -func (gl *GL) Vertex4i(x, y, z, w int) { - C.gl1_4_glVertex4i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z), C.GLint(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex4fv.xml -func (gl *GL) Vertex4fv(v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_4_glVertex4fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex4f.xml -func (gl *GL) Vertex4f(x, y, z, w float32) { - C.gl1_4_glVertex4f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z), C.GLfloat(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex4dv.xml -func (gl *GL) Vertex4dv(v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_4_glVertex4dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex4d.xml -func (gl *GL) Vertex4d(x, y, z, w float64) { - C.gl1_4_glVertex4d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z), C.GLdouble(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex3sv.xml -func (gl *GL) Vertex3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_4_glVertex3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex3s.xml -func (gl *GL) Vertex3s(x, y, z int16) { - C.gl1_4_glVertex3s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex3iv.xml -func (gl *GL) Vertex3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_4_glVertex3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex3i.xml -func (gl *GL) Vertex3i(x, y, z int) { - C.gl1_4_glVertex3i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex3fv.xml -func (gl *GL) Vertex3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_4_glVertex3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex3f.xml -func (gl *GL) Vertex3f(x, y, z float32) { - C.gl1_4_glVertex3f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex3dv.xml -func (gl *GL) Vertex3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_4_glVertex3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex3d.xml -func (gl *GL) Vertex3d(x, y, z float64) { - C.gl1_4_glVertex3d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex2sv.xml -func (gl *GL) Vertex2sv(v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_4_glVertex2sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex2s.xml -func (gl *GL) Vertex2s(x, y int16) { - C.gl1_4_glVertex2s(gl.funcs, C.GLshort(x), C.GLshort(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex2iv.xml -func (gl *GL) Vertex2iv(v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_4_glVertex2iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex2i.xml -func (gl *GL) Vertex2i(x, y int) { - C.gl1_4_glVertex2i(gl.funcs, C.GLint(x), C.GLint(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex2fv.xml -func (gl *GL) Vertex2fv(v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_4_glVertex2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex2f.xml -func (gl *GL) Vertex2f(x, y float32) { - C.gl1_4_glVertex2f(gl.funcs, C.GLfloat(x), C.GLfloat(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex2dv.xml -func (gl *GL) Vertex2dv(v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_4_glVertex2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex2d.xml -func (gl *GL) Vertex2d(x, y float64) { - C.gl1_4_glVertex2d(gl.funcs, C.GLdouble(x), C.GLdouble(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord4sv.xml -func (gl *GL) TexCoord4sv(v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_4_glTexCoord4sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord4s.xml -func (gl *GL) TexCoord4s(s, t, r, q int16) { - C.gl1_4_glTexCoord4s(gl.funcs, C.GLshort(s), C.GLshort(t), C.GLshort(r), C.GLshort(q)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord4iv.xml -func (gl *GL) TexCoord4iv(v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_4_glTexCoord4iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord4i.xml -func (gl *GL) TexCoord4i(s, t, r, q int32) { - C.gl1_4_glTexCoord4i(gl.funcs, C.GLint(s), C.GLint(t), C.GLint(r), C.GLint(q)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord4fv.xml -func (gl *GL) TexCoord4fv(v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_4_glTexCoord4fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord4f.xml -func (gl *GL) TexCoord4f(s, t, r, q float32) { - C.gl1_4_glTexCoord4f(gl.funcs, C.GLfloat(s), C.GLfloat(t), C.GLfloat(r), C.GLfloat(q)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord4dv.xml -func (gl *GL) TexCoord4dv(v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_4_glTexCoord4dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord4d.xml -func (gl *GL) TexCoord4d(s, t, r, q float64) { - C.gl1_4_glTexCoord4d(gl.funcs, C.GLdouble(s), C.GLdouble(t), C.GLdouble(r), C.GLdouble(q)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord3sv.xml -func (gl *GL) TexCoord3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_4_glTexCoord3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord3s.xml -func (gl *GL) TexCoord3s(s, t, r int16) { - C.gl1_4_glTexCoord3s(gl.funcs, C.GLshort(s), C.GLshort(t), C.GLshort(r)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord3iv.xml -func (gl *GL) TexCoord3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_4_glTexCoord3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord3i.xml -func (gl *GL) TexCoord3i(s, t, r int32) { - C.gl1_4_glTexCoord3i(gl.funcs, C.GLint(s), C.GLint(t), C.GLint(r)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord3fv.xml -func (gl *GL) TexCoord3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_4_glTexCoord3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord3f.xml -func (gl *GL) TexCoord3f(s, t, r float32) { - C.gl1_4_glTexCoord3f(gl.funcs, C.GLfloat(s), C.GLfloat(t), C.GLfloat(r)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord3dv.xml -func (gl *GL) TexCoord3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_4_glTexCoord3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord3d.xml -func (gl *GL) TexCoord3d(s, t, r float64) { - C.gl1_4_glTexCoord3d(gl.funcs, C.GLdouble(s), C.GLdouble(t), C.GLdouble(r)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord2sv.xml -func (gl *GL) TexCoord2sv(v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_4_glTexCoord2sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord2s.xml -func (gl *GL) TexCoord2s(s, t int16) { - C.gl1_4_glTexCoord2s(gl.funcs, C.GLshort(s), C.GLshort(t)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord2iv.xml -func (gl *GL) TexCoord2iv(v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_4_glTexCoord2iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord2i.xml -func (gl *GL) TexCoord2i(s, t int32) { - C.gl1_4_glTexCoord2i(gl.funcs, C.GLint(s), C.GLint(t)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord2fv.xml -func (gl *GL) TexCoord2fv(v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_4_glTexCoord2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord2f.xml -func (gl *GL) TexCoord2f(s, t float32) { - C.gl1_4_glTexCoord2f(gl.funcs, C.GLfloat(s), C.GLfloat(t)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord2dv.xml -func (gl *GL) TexCoord2dv(v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_4_glTexCoord2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord2d.xml -func (gl *GL) TexCoord2d(s, t float64) { - C.gl1_4_glTexCoord2d(gl.funcs, C.GLdouble(s), C.GLdouble(t)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord1sv.xml -func (gl *GL) TexCoord1sv(v []int16) { - C.gl1_4_glTexCoord1sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord1s.xml -func (gl *GL) TexCoord1s(s int16) { - C.gl1_4_glTexCoord1s(gl.funcs, C.GLshort(s)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord1iv.xml -func (gl *GL) TexCoord1iv(v []int32) { - C.gl1_4_glTexCoord1iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord1i.xml -func (gl *GL) TexCoord1i(s int32) { - C.gl1_4_glTexCoord1i(gl.funcs, C.GLint(s)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord1fv.xml -func (gl *GL) TexCoord1fv(v []float32) { - C.gl1_4_glTexCoord1fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord1f.xml -func (gl *GL) TexCoord1f(s float32) { - C.gl1_4_glTexCoord1f(gl.funcs, C.GLfloat(s)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord1dv.xml -func (gl *GL) TexCoord1dv(v []float64) { - C.gl1_4_glTexCoord1dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord1d.xml -func (gl *GL) TexCoord1d(s float64) { - C.gl1_4_glTexCoord1d(gl.funcs, C.GLdouble(s)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRectsv.xml -func (gl *GL) Rectsv(v1, v2 []int16) { - C.gl1_4_glRectsv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v1[0])), (*C.GLshort)(unsafe.Pointer(&v2[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRects.xml -func (gl *GL) Rects(x1, y1, x2, y2 int16) { - C.gl1_4_glRects(gl.funcs, C.GLshort(x1), C.GLshort(y1), C.GLshort(x2), C.GLshort(y2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRectiv.xml -func (gl *GL) Rectiv(v1, v2 []int32) { - C.gl1_4_glRectiv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v1[0])), (*C.GLint)(unsafe.Pointer(&v2[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRecti.xml -func (gl *GL) Recti(x1, y1, x2, y2 int32) { - C.gl1_4_glRecti(gl.funcs, C.GLint(x1), C.GLint(y1), C.GLint(x2), C.GLint(y2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRectfv.xml -func (gl *GL) Rectfv(v1, v2 []float32) { - C.gl1_4_glRectfv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v1[0])), (*C.GLfloat)(unsafe.Pointer(&v2[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRectf.xml -func (gl *GL) Rectf(x1, y1, x2, y2 float32) { - C.gl1_4_glRectf(gl.funcs, C.GLfloat(x1), C.GLfloat(y1), C.GLfloat(x2), C.GLfloat(y2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRectdv.xml -func (gl *GL) Rectdv(v1, v2 []float64) { - C.gl1_4_glRectdv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v1[0])), (*C.GLdouble)(unsafe.Pointer(&v2[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRectd.xml -func (gl *GL) Rectd(x1, y1, x2, y2 float64) { - C.gl1_4_glRectd(gl.funcs, C.GLdouble(x1), C.GLdouble(y1), C.GLdouble(x2), C.GLdouble(y2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos4sv.xml -func (gl *GL) RasterPos4sv(v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_4_glRasterPos4sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos4s.xml -func (gl *GL) RasterPos4s(x, y, z, w int16) { - C.gl1_4_glRasterPos4s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z), C.GLshort(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos4iv.xml -func (gl *GL) RasterPos4iv(v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_4_glRasterPos4iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos4i.xml -func (gl *GL) RasterPos4i(x, y, z, w int) { - C.gl1_4_glRasterPos4i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z), C.GLint(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos4fv.xml -func (gl *GL) RasterPos4fv(v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_4_glRasterPos4fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos4f.xml -func (gl *GL) RasterPos4f(x, y, z, w float32) { - C.gl1_4_glRasterPos4f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z), C.GLfloat(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos4dv.xml -func (gl *GL) RasterPos4dv(v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_4_glRasterPos4dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos4d.xml -func (gl *GL) RasterPos4d(x, y, z, w float64) { - C.gl1_4_glRasterPos4d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z), C.GLdouble(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos3sv.xml -func (gl *GL) RasterPos3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_4_glRasterPos3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos3s.xml -func (gl *GL) RasterPos3s(x, y, z int16) { - C.gl1_4_glRasterPos3s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos3iv.xml -func (gl *GL) RasterPos3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_4_glRasterPos3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos3i.xml -func (gl *GL) RasterPos3i(x, y, z int) { - C.gl1_4_glRasterPos3i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos3fv.xml -func (gl *GL) RasterPos3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_4_glRasterPos3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos3f.xml -func (gl *GL) RasterPos3f(x, y, z float32) { - C.gl1_4_glRasterPos3f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos3dv.xml -func (gl *GL) RasterPos3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_4_glRasterPos3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos3d.xml -func (gl *GL) RasterPos3d(x, y, z float64) { - C.gl1_4_glRasterPos3d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos2sv.xml -func (gl *GL) RasterPos2sv(v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_4_glRasterPos2sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos2s.xml -func (gl *GL) RasterPos2s(x, y int16) { - C.gl1_4_glRasterPos2s(gl.funcs, C.GLshort(x), C.GLshort(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos2iv.xml -func (gl *GL) RasterPos2iv(v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_4_glRasterPos2iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos2i.xml -func (gl *GL) RasterPos2i(x, y int) { - C.gl1_4_glRasterPos2i(gl.funcs, C.GLint(x), C.GLint(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos2fv.xml -func (gl *GL) RasterPos2fv(v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_4_glRasterPos2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos2f.xml -func (gl *GL) RasterPos2f(x, y float32) { - C.gl1_4_glRasterPos2f(gl.funcs, C.GLfloat(x), C.GLfloat(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos2dv.xml -func (gl *GL) RasterPos2dv(v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_4_glRasterPos2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos2d.xml -func (gl *GL) RasterPos2d(x, y float64) { - C.gl1_4_glRasterPos2d(gl.funcs, C.GLdouble(x), C.GLdouble(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3sv.xml -func (gl *GL) Normal3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_4_glNormal3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3s.xml -func (gl *GL) Normal3s(nx, ny, nz int16) { - C.gl1_4_glNormal3s(gl.funcs, C.GLshort(nx), C.GLshort(ny), C.GLshort(nz)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3iv.xml -func (gl *GL) Normal3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_4_glNormal3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3i.xml -func (gl *GL) Normal3i(nx, ny, nz int32) { - C.gl1_4_glNormal3i(gl.funcs, C.GLint(nx), C.GLint(ny), C.GLint(nz)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3fv.xml -func (gl *GL) Normal3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_4_glNormal3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3f.xml -func (gl *GL) Normal3f(nx, ny, nz float32) { - C.gl1_4_glNormal3f(gl.funcs, C.GLfloat(nx), C.GLfloat(ny), C.GLfloat(nz)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3dv.xml -func (gl *GL) Normal3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_4_glNormal3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3d.xml -func (gl *GL) Normal3d(nx, ny, nz float64) { - C.gl1_4_glNormal3d(gl.funcs, C.GLdouble(nx), C.GLdouble(ny), C.GLdouble(nz)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3bv.xml -func (gl *GL) Normal3bv(v []byte) { - C.gl1_4_glNormal3bv(gl.funcs, (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3b.xml -func (gl *GL) Normal3b(nx, ny, nz byte) { - C.gl1_4_glNormal3b(gl.funcs, C.GLbyte(nx), C.GLbyte(ny), C.GLbyte(nz)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexsv.xml -func (gl *GL) Indexsv(c []int16) { - C.gl1_4_glIndexsv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexs.xml -func (gl *GL) Indexs(c int16) { - C.gl1_4_glIndexs(gl.funcs, C.GLshort(c)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexiv.xml -func (gl *GL) Indexiv(c []int32) { - C.gl1_4_glIndexiv(gl.funcs, (*C.GLint)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexi.xml -func (gl *GL) Indexi(c int32) { - C.gl1_4_glIndexi(gl.funcs, C.GLint(c)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexfv.xml -func (gl *GL) Indexfv(c []float32) { - C.gl1_4_glIndexfv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexf.xml -func (gl *GL) Indexf(c float32) { - C.gl1_4_glIndexf(gl.funcs, C.GLfloat(c)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexdv.xml -func (gl *GL) Indexdv(c []float64) { - C.gl1_4_glIndexdv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexd.xml -func (gl *GL) Indexd(c float64) { - C.gl1_4_glIndexd(gl.funcs, C.GLdouble(c)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEnd.xml -func (gl *GL) End() { - C.gl1_4_glEnd(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEdgeFlagv.xml -func (gl *GL) EdgeFlagv(flag []bool) { - C.gl1_4_glEdgeFlagv(gl.funcs, (*C.GLboolean)(unsafe.Pointer(&flag[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEdgeFlag.xml -func (gl *GL) EdgeFlag(flag bool) { - C.gl1_4_glEdgeFlag(gl.funcs, *(*C.GLboolean)(unsafe.Pointer(&flag))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4usv.xml -func (gl *GL) Color4usv(v []uint16) { - C.gl1_4_glColor4usv(gl.funcs, (*C.GLushort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4us.xml -func (gl *GL) Color4us(red, green, blue, alpha uint16) { - C.gl1_4_glColor4us(gl.funcs, C.GLushort(red), C.GLushort(green), C.GLushort(blue), C.GLushort(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4uiv.xml -func (gl *GL) Color4uiv(v []uint32) { - C.gl1_4_glColor4uiv(gl.funcs, (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4ui.xml -func (gl *GL) Color4ui(red, green, blue, alpha uint32) { - C.gl1_4_glColor4ui(gl.funcs, C.GLuint(red), C.GLuint(green), C.GLuint(blue), C.GLuint(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4ubv.xml -func (gl *GL) Color4ubv(v []uint8) { - C.gl1_4_glColor4ubv(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4ub.xml -func (gl *GL) Color4ub(red, green, blue, alpha uint8) { - C.gl1_4_glColor4ub(gl.funcs, C.GLubyte(red), C.GLubyte(green), C.GLubyte(blue), C.GLubyte(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4sv.xml -func (gl *GL) Color4sv(v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_4_glColor4sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4s.xml -func (gl *GL) Color4s(red, green, blue, alpha int16) { - C.gl1_4_glColor4s(gl.funcs, C.GLshort(red), C.GLshort(green), C.GLshort(blue), C.GLshort(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4iv.xml -func (gl *GL) Color4iv(v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_4_glColor4iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4i.xml -func (gl *GL) Color4i(red, green, blue, alpha int32) { - C.gl1_4_glColor4i(gl.funcs, C.GLint(red), C.GLint(green), C.GLint(blue), C.GLint(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4fv.xml -func (gl *GL) Color4fv(v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_4_glColor4fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4f.xml -func (gl *GL) Color4f(red, green, blue, alpha float32) { - C.gl1_4_glColor4f(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4dv.xml -func (gl *GL) Color4dv(v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_4_glColor4dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4d.xml -func (gl *GL) Color4d(red, green, blue, alpha float64) { - C.gl1_4_glColor4d(gl.funcs, C.GLdouble(red), C.GLdouble(green), C.GLdouble(blue), C.GLdouble(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4bv.xml -func (gl *GL) Color4bv(v []byte) { - C.gl1_4_glColor4bv(gl.funcs, (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4b.xml -func (gl *GL) Color4b(red, green, blue, alpha byte) { - C.gl1_4_glColor4b(gl.funcs, C.GLbyte(red), C.GLbyte(green), C.GLbyte(blue), C.GLbyte(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3usv.xml -func (gl *GL) Color3usv(v []uint16) { - C.gl1_4_glColor3usv(gl.funcs, (*C.GLushort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3us.xml -func (gl *GL) Color3us(red, green, blue uint16) { - C.gl1_4_glColor3us(gl.funcs, C.GLushort(red), C.GLushort(green), C.GLushort(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3uiv.xml -func (gl *GL) Color3uiv(v []uint32) { - C.gl1_4_glColor3uiv(gl.funcs, (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3ui.xml -func (gl *GL) Color3ui(red, green, blue uint32) { - C.gl1_4_glColor3ui(gl.funcs, C.GLuint(red), C.GLuint(green), C.GLuint(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3ubv.xml -func (gl *GL) Color3ubv(v []uint8) { - C.gl1_4_glColor3ubv(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3ub.xml -func (gl *GL) Color3ub(red, green, blue uint8) { - C.gl1_4_glColor3ub(gl.funcs, C.GLubyte(red), C.GLubyte(green), C.GLubyte(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3sv.xml -func (gl *GL) Color3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_4_glColor3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3s.xml -func (gl *GL) Color3s(red, green, blue int16) { - C.gl1_4_glColor3s(gl.funcs, C.GLshort(red), C.GLshort(green), C.GLshort(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3iv.xml -func (gl *GL) Color3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_4_glColor3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3i.xml -func (gl *GL) Color3i(red, green, blue int32) { - C.gl1_4_glColor3i(gl.funcs, C.GLint(red), C.GLint(green), C.GLint(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3fv.xml -func (gl *GL) Color3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_4_glColor3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3f.xml -func (gl *GL) Color3f(red, green, blue float32) { - C.gl1_4_glColor3f(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3dv.xml -func (gl *GL) Color3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_4_glColor3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3d.xml -func (gl *GL) Color3d(red, green, blue float64) { - C.gl1_4_glColor3d(gl.funcs, C.GLdouble(red), C.GLdouble(green), C.GLdouble(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3bv.xml -func (gl *GL) Color3bv(v []byte) { - C.gl1_4_glColor3bv(gl.funcs, (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3b.xml -func (gl *GL) Color3b(red, green, blue byte) { - C.gl1_4_glColor3b(gl.funcs, C.GLbyte(red), C.GLbyte(green), C.GLbyte(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glBitmap.xml -func (gl *GL) Bitmap(width, height int, xorig, yorig, xmove, ymove float32, bitmap []uint8) { - C.gl1_4_glBitmap(gl.funcs, C.GLsizei(width), C.GLsizei(height), C.GLfloat(xorig), C.GLfloat(yorig), C.GLfloat(xmove), C.GLfloat(ymove), (*C.GLubyte)(unsafe.Pointer(&bitmap[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glBegin.xml -func (gl *GL) Begin(mode glbase.Enum) { - C.gl1_4_glBegin(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glListBase.xml -func (gl *GL) ListBase(base uint32) { - C.gl1_4_glListBase(gl.funcs, C.GLuint(base)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGenLists.xml -func (gl *GL) GenLists(range_ int32) uint32 { - glresult := C.gl1_4_glGenLists(gl.funcs, C.GLsizei(range_)) - return uint32(glresult) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDeleteLists.xml -func (gl *GL) DeleteLists(list uint32, range_ int32) { - C.gl1_4_glDeleteLists(gl.funcs, C.GLuint(list), C.GLsizei(range_)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCallLists.xml -func (gl *GL) CallLists(n int, gltype glbase.Enum, lists interface{}) { - var lists_ptr unsafe.Pointer - var lists_v = reflect.ValueOf(lists) - if lists != nil && lists_v.Kind() != reflect.Slice { - panic("parameter lists must be a slice") - } - if lists != nil { - lists_ptr = unsafe.Pointer(lists_v.Index(0).Addr().Pointer()) - } - C.gl1_4_glCallLists(gl.funcs, C.GLsizei(n), C.GLenum(gltype), lists_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCallList.xml -func (gl *GL) CallList(list uint32) { - C.gl1_4_glCallList(gl.funcs, C.GLuint(list)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEndList.xml -func (gl *GL) EndList() { - C.gl1_4_glEndList(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNewList.xml -func (gl *GL) NewList(list uint32, mode glbase.Enum) { - C.gl1_4_glNewList(gl.funcs, C.GLuint(list), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPushClientAttrib.xml -func (gl *GL) PushClientAttrib(mask glbase.Bitfield) { - C.gl1_4_glPushClientAttrib(gl.funcs, C.GLbitfield(mask)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPopClientAttrib.xml -func (gl *GL) PopClientAttrib() { - C.gl1_4_glPopClientAttrib(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPrioritizeTextures.xml -func (gl *GL) PrioritizeTextures(n int, textures []glbase.Texture, priorities []float32) { - C.gl1_4_glPrioritizeTextures(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0])), (*C.GLfloat)(unsafe.Pointer(&priorities[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glAreTexturesResident.xml -func (gl *GL) AreTexturesResident(n int, textures []glbase.Texture, residences []bool) bool { - glresult := C.gl1_4_glAreTexturesResident(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0])), (*C.GLboolean)(unsafe.Pointer(&residences[0]))) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexPointer.xml -func (gl *GL) VertexPointer(size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl1_4_glVertexPointer(gl.funcs, C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoordPointer.xml -func (gl *GL) TexCoordPointer(size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl1_4_glTexCoordPointer(gl.funcs, C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormalPointer.xml -func (gl *GL) NormalPointer(gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl1_4_glNormalPointer(gl.funcs, C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glInterleavedArrays.xml -func (gl *GL) InterleavedArrays(format glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl1_4_glInterleavedArrays(gl.funcs, C.GLenum(format), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexPointer.xml -func (gl *GL) IndexPointer(gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl1_4_glIndexPointer(gl.funcs, C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEnableClientState.xml -func (gl *GL) EnableClientState(array glbase.Enum) { - C.gl1_4_glEnableClientState(gl.funcs, C.GLenum(array)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEdgeFlagPointer.xml -func (gl *GL) EdgeFlagPointer(stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl1_4_glEdgeFlagPointer(gl.funcs, C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDisableClientState.xml -func (gl *GL) DisableClientState(array glbase.Enum) { - C.gl1_4_glDisableClientState(gl.funcs, C.GLenum(array)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColorPointer.xml -func (gl *GL) ColorPointer(size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl1_4_glColorPointer(gl.funcs, C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glArrayElement.xml -func (gl *GL) ArrayElement(i int32) { - C.gl1_4_glArrayElement(gl.funcs, C.GLint(i)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glResetMinmax.xml -func (gl *GL) ResetMinmax(target glbase.Enum) { - C.gl1_4_glResetMinmax(gl.funcs, C.GLenum(target)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glResetHistogram.xml -func (gl *GL) ResetHistogram(target glbase.Enum) { - C.gl1_4_glResetHistogram(gl.funcs, C.GLenum(target)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMinmax.xml -func (gl *GL) Minmax(target, internalFormat glbase.Enum, sink bool) { - C.gl1_4_glMinmax(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), *(*C.GLboolean)(unsafe.Pointer(&sink))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glHistogram.xml -func (gl *GL) Histogram(target glbase.Enum, width int, internalFormat glbase.Enum, sink bool) { - C.gl1_4_glHistogram(gl.funcs, C.GLenum(target), C.GLsizei(width), C.GLenum(internalFormat), *(*C.GLboolean)(unsafe.Pointer(&sink))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetMinmaxParameteriv.xml -func (gl *GL) GetMinmaxParameteriv(target, pname glbase.Enum, params []int32) { - C.gl1_4_glGetMinmaxParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetMinmaxParameterfv.xml -func (gl *GL) GetMinmaxParameterfv(target, pname glbase.Enum, params []float32) { - C.gl1_4_glGetMinmaxParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetMinmax.xml -func (gl *GL) GetMinmax(target glbase.Enum, reset bool, format, gltype glbase.Enum, values interface{}) { - var values_ptr unsafe.Pointer - var values_v = reflect.ValueOf(values) - if values != nil && values_v.Kind() != reflect.Slice { - panic("parameter values must be a slice") - } - if values != nil { - values_ptr = unsafe.Pointer(values_v.Index(0).Addr().Pointer()) - } - C.gl1_4_glGetMinmax(gl.funcs, C.GLenum(target), *(*C.GLboolean)(unsafe.Pointer(&reset)), C.GLenum(format), C.GLenum(gltype), values_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetHistogramParameteriv.xml -func (gl *GL) GetHistogramParameteriv(target, pname glbase.Enum, params []int32) { - C.gl1_4_glGetHistogramParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetHistogramParameterfv.xml -func (gl *GL) GetHistogramParameterfv(target, pname glbase.Enum, params []float32) { - C.gl1_4_glGetHistogramParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetHistogram.xml -func (gl *GL) GetHistogram(target glbase.Enum, reset bool, format, gltype glbase.Enum, values interface{}) { - var values_ptr unsafe.Pointer - var values_v = reflect.ValueOf(values) - if values != nil && values_v.Kind() != reflect.Slice { - panic("parameter values must be a slice") - } - if values != nil { - values_ptr = unsafe.Pointer(values_v.Index(0).Addr().Pointer()) - } - C.gl1_4_glGetHistogram(gl.funcs, C.GLenum(target), *(*C.GLboolean)(unsafe.Pointer(&reset)), C.GLenum(format), C.GLenum(gltype), values_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSeparableFilter2D.xml -func (gl *GL) SeparableFilter2D(target, internalFormat glbase.Enum, width, height int, format, gltype glbase.Enum, row, column interface{}) { - var row_ptr unsafe.Pointer - var row_v = reflect.ValueOf(row) - if row != nil && row_v.Kind() != reflect.Slice { - panic("parameter row must be a slice") - } - if row != nil { - row_ptr = unsafe.Pointer(row_v.Index(0).Addr().Pointer()) - } - var column_ptr unsafe.Pointer - var column_v = reflect.ValueOf(column) - if column != nil && column_v.Kind() != reflect.Slice { - panic("parameter column must be a slice") - } - if column != nil { - column_ptr = unsafe.Pointer(column_v.Index(0).Addr().Pointer()) - } - C.gl1_4_glSeparableFilter2D(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), row_ptr, column_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetSeparableFilter.xml -func (gl *GL) GetSeparableFilter(target, format, gltype glbase.Enum, row, column, span interface{}) { - var row_ptr unsafe.Pointer - var row_v = reflect.ValueOf(row) - if row != nil && row_v.Kind() != reflect.Slice { - panic("parameter row must be a slice") - } - if row != nil { - row_ptr = unsafe.Pointer(row_v.Index(0).Addr().Pointer()) - } - var column_ptr unsafe.Pointer - var column_v = reflect.ValueOf(column) - if column != nil && column_v.Kind() != reflect.Slice { - panic("parameter column must be a slice") - } - if column != nil { - column_ptr = unsafe.Pointer(column_v.Index(0).Addr().Pointer()) - } - var span_ptr unsafe.Pointer - var span_v = reflect.ValueOf(span) - if span != nil && span_v.Kind() != reflect.Slice { - panic("parameter span must be a slice") - } - if span != nil { - span_ptr = unsafe.Pointer(span_v.Index(0).Addr().Pointer()) - } - C.gl1_4_glGetSeparableFilter(gl.funcs, C.GLenum(target), C.GLenum(format), C.GLenum(gltype), row_ptr, column_ptr, span_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetConvolutionParameteriv.xml -func (gl *GL) GetConvolutionParameteriv(target, pname glbase.Enum, params []int32) { - C.gl1_4_glGetConvolutionParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetConvolutionParameterfv.xml -func (gl *GL) GetConvolutionParameterfv(target, pname glbase.Enum, params []float32) { - C.gl1_4_glGetConvolutionParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetConvolutionFilter.xml -func (gl *GL) GetConvolutionFilter(target, format, gltype glbase.Enum, image interface{}) { - var image_ptr unsafe.Pointer - var image_v = reflect.ValueOf(image) - if image != nil && image_v.Kind() != reflect.Slice { - panic("parameter image must be a slice") - } - if image != nil { - image_ptr = unsafe.Pointer(image_v.Index(0).Addr().Pointer()) - } - C.gl1_4_glGetConvolutionFilter(gl.funcs, C.GLenum(target), C.GLenum(format), C.GLenum(gltype), image_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyConvolutionFilter2D.xml -func (gl *GL) CopyConvolutionFilter2D(target, internalFormat glbase.Enum, x, y, width, height int) { - C.gl1_4_glCopyConvolutionFilter2D(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyConvolutionFilter1D.xml -func (gl *GL) CopyConvolutionFilter1D(target, internalFormat glbase.Enum, x, y, width int) { - C.gl1_4_glCopyConvolutionFilter1D(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glConvolutionParameteriv.xml -func (gl *GL) ConvolutionParameteriv(target, pname glbase.Enum, params []int32) { - C.gl1_4_glConvolutionParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glConvolutionParameteri.xml -func (gl *GL) ConvolutionParameteri(target, pname glbase.Enum, params int32) { - C.gl1_4_glConvolutionParameteri(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLint(params)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glConvolutionParameterfv.xml -func (gl *GL) ConvolutionParameterfv(target, pname glbase.Enum, params []float32) { - C.gl1_4_glConvolutionParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glConvolutionParameterf.xml -func (gl *GL) ConvolutionParameterf(target, pname glbase.Enum, params float32) { - C.gl1_4_glConvolutionParameterf(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLfloat(params)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glConvolutionFilter2D.xml -func (gl *GL) ConvolutionFilter2D(target, internalFormat glbase.Enum, width, height int, format, gltype glbase.Enum, image interface{}) { - var image_ptr unsafe.Pointer - var image_v = reflect.ValueOf(image) - if image != nil && image_v.Kind() != reflect.Slice { - panic("parameter image must be a slice") - } - if image != nil { - image_ptr = unsafe.Pointer(image_v.Index(0).Addr().Pointer()) - } - C.gl1_4_glConvolutionFilter2D(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), image_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glConvolutionFilter1D.xml -func (gl *GL) ConvolutionFilter1D(target, internalFormat glbase.Enum, width int, format, gltype glbase.Enum, image interface{}) { - var image_ptr unsafe.Pointer - var image_v = reflect.ValueOf(image) - if image != nil && image_v.Kind() != reflect.Slice { - panic("parameter image must be a slice") - } - if image != nil { - image_ptr = unsafe.Pointer(image_v.Index(0).Addr().Pointer()) - } - C.gl1_4_glConvolutionFilter1D(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLsizei(width), C.GLenum(format), C.GLenum(gltype), image_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyColorSubTable.xml -func (gl *GL) CopyColorSubTable(target glbase.Enum, start int32, x, y, width int) { - C.gl1_4_glCopyColorSubTable(gl.funcs, C.GLenum(target), C.GLsizei(start), C.GLint(x), C.GLint(y), C.GLsizei(width)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColorSubTable.xml -func (gl *GL) ColorSubTable(target glbase.Enum, start int32, count int, format, gltype glbase.Enum, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl1_4_glColorSubTable(gl.funcs, C.GLenum(target), C.GLsizei(start), C.GLsizei(count), C.GLenum(format), C.GLenum(gltype), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetColorTableParameteriv.xml -func (gl *GL) GetColorTableParameteriv(target, pname glbase.Enum, params []int32) { - C.gl1_4_glGetColorTableParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetColorTableParameterfv.xml -func (gl *GL) GetColorTableParameterfv(target, pname glbase.Enum, params []float32) { - C.gl1_4_glGetColorTableParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetColorTable.xml -func (gl *GL) GetColorTable(target, format, gltype glbase.Enum, table interface{}) { - var table_ptr unsafe.Pointer - var table_v = reflect.ValueOf(table) - if table != nil && table_v.Kind() != reflect.Slice { - panic("parameter table must be a slice") - } - if table != nil { - table_ptr = unsafe.Pointer(table_v.Index(0).Addr().Pointer()) - } - C.gl1_4_glGetColorTable(gl.funcs, C.GLenum(target), C.GLenum(format), C.GLenum(gltype), table_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyColorTable.xml -func (gl *GL) CopyColorTable(target, internalFormat glbase.Enum, x, y, width int) { - C.gl1_4_glCopyColorTable(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColorTableParameteriv.xml -func (gl *GL) ColorTableParameteriv(target, pname glbase.Enum, params []int32) { - C.gl1_4_glColorTableParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColorTableParameterfv.xml -func (gl *GL) ColorTableParameterfv(target, pname glbase.Enum, params []float32) { - C.gl1_4_glColorTableParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColorTable.xml -func (gl *GL) ColorTable(target, internalFormat glbase.Enum, width int, format, gltype glbase.Enum, table interface{}) { - var table_ptr unsafe.Pointer - var table_v = reflect.ValueOf(table) - if table != nil && table_v.Kind() != reflect.Slice { - panic("parameter table must be a slice") - } - if table != nil { - table_ptr = unsafe.Pointer(table_v.Index(0).Addr().Pointer()) - } - C.gl1_4_glColorTable(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLsizei(width), C.GLenum(format), C.GLenum(gltype), table_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultTransposeMatrixd.xml -func (gl *GL) MultTransposeMatrixd(m []float64) { - C.gl1_4_glMultTransposeMatrixd(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultTransposeMatrixf.xml -func (gl *GL) MultTransposeMatrixf(m []float32) { - C.gl1_4_glMultTransposeMatrixf(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLoadTransposeMatrixd.xml -func (gl *GL) LoadTransposeMatrixd(m []float64) { - C.gl1_4_glLoadTransposeMatrixd(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLoadTransposeMatrixf.xml -func (gl *GL) LoadTransposeMatrixf(m []float32) { - C.gl1_4_glLoadTransposeMatrixf(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord4sv.xml -func (gl *GL) MultiTexCoord4sv(target glbase.Enum, v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_4_glMultiTexCoord4sv(gl.funcs, C.GLenum(target), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord4s.xml -func (gl *GL) MultiTexCoord4s(target glbase.Enum, s, t, r, q int16) { - C.gl1_4_glMultiTexCoord4s(gl.funcs, C.GLenum(target), C.GLshort(s), C.GLshort(t), C.GLshort(r), C.GLshort(q)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord4iv.xml -func (gl *GL) MultiTexCoord4iv(target glbase.Enum, v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_4_glMultiTexCoord4iv(gl.funcs, C.GLenum(target), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord4i.xml -func (gl *GL) MultiTexCoord4i(target glbase.Enum, s, t, r, q int32) { - C.gl1_4_glMultiTexCoord4i(gl.funcs, C.GLenum(target), C.GLint(s), C.GLint(t), C.GLint(r), C.GLint(q)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord4fv.xml -func (gl *GL) MultiTexCoord4fv(target glbase.Enum, v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_4_glMultiTexCoord4fv(gl.funcs, C.GLenum(target), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord4f.xml -func (gl *GL) MultiTexCoord4f(target glbase.Enum, s, t, r, q float32) { - C.gl1_4_glMultiTexCoord4f(gl.funcs, C.GLenum(target), C.GLfloat(s), C.GLfloat(t), C.GLfloat(r), C.GLfloat(q)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord4dv.xml -func (gl *GL) MultiTexCoord4dv(target glbase.Enum, v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_4_glMultiTexCoord4dv(gl.funcs, C.GLenum(target), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord4d.xml -func (gl *GL) MultiTexCoord4d(target glbase.Enum, s, t, r, q float64) { - C.gl1_4_glMultiTexCoord4d(gl.funcs, C.GLenum(target), C.GLdouble(s), C.GLdouble(t), C.GLdouble(r), C.GLdouble(q)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord3sv.xml -func (gl *GL) MultiTexCoord3sv(target glbase.Enum, v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_4_glMultiTexCoord3sv(gl.funcs, C.GLenum(target), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord3s.xml -func (gl *GL) MultiTexCoord3s(target glbase.Enum, s, t, r int16) { - C.gl1_4_glMultiTexCoord3s(gl.funcs, C.GLenum(target), C.GLshort(s), C.GLshort(t), C.GLshort(r)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord3iv.xml -func (gl *GL) MultiTexCoord3iv(target glbase.Enum, v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_4_glMultiTexCoord3iv(gl.funcs, C.GLenum(target), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord3i.xml -func (gl *GL) MultiTexCoord3i(target glbase.Enum, s, t, r int32) { - C.gl1_4_glMultiTexCoord3i(gl.funcs, C.GLenum(target), C.GLint(s), C.GLint(t), C.GLint(r)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord3fv.xml -func (gl *GL) MultiTexCoord3fv(target glbase.Enum, v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_4_glMultiTexCoord3fv(gl.funcs, C.GLenum(target), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord3f.xml -func (gl *GL) MultiTexCoord3f(target glbase.Enum, s, t, r float32) { - C.gl1_4_glMultiTexCoord3f(gl.funcs, C.GLenum(target), C.GLfloat(s), C.GLfloat(t), C.GLfloat(r)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord3dv.xml -func (gl *GL) MultiTexCoord3dv(target glbase.Enum, v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_4_glMultiTexCoord3dv(gl.funcs, C.GLenum(target), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord3d.xml -func (gl *GL) MultiTexCoord3d(target glbase.Enum, s, t, r float64) { - C.gl1_4_glMultiTexCoord3d(gl.funcs, C.GLenum(target), C.GLdouble(s), C.GLdouble(t), C.GLdouble(r)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord2sv.xml -func (gl *GL) MultiTexCoord2sv(target glbase.Enum, v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_4_glMultiTexCoord2sv(gl.funcs, C.GLenum(target), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord2s.xml -func (gl *GL) MultiTexCoord2s(target glbase.Enum, s, t int16) { - C.gl1_4_glMultiTexCoord2s(gl.funcs, C.GLenum(target), C.GLshort(s), C.GLshort(t)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord2iv.xml -func (gl *GL) MultiTexCoord2iv(target glbase.Enum, v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_4_glMultiTexCoord2iv(gl.funcs, C.GLenum(target), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord2i.xml -func (gl *GL) MultiTexCoord2i(target glbase.Enum, s, t int32) { - C.gl1_4_glMultiTexCoord2i(gl.funcs, C.GLenum(target), C.GLint(s), C.GLint(t)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord2fv.xml -func (gl *GL) MultiTexCoord2fv(target glbase.Enum, v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_4_glMultiTexCoord2fv(gl.funcs, C.GLenum(target), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord2f.xml -func (gl *GL) MultiTexCoord2f(target glbase.Enum, s, t float32) { - C.gl1_4_glMultiTexCoord2f(gl.funcs, C.GLenum(target), C.GLfloat(s), C.GLfloat(t)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord2dv.xml -func (gl *GL) MultiTexCoord2dv(target glbase.Enum, v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_4_glMultiTexCoord2dv(gl.funcs, C.GLenum(target), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord2d.xml -func (gl *GL) MultiTexCoord2d(target glbase.Enum, s, t float64) { - C.gl1_4_glMultiTexCoord2d(gl.funcs, C.GLenum(target), C.GLdouble(s), C.GLdouble(t)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord1sv.xml -func (gl *GL) MultiTexCoord1sv(target glbase.Enum, v []int16) { - C.gl1_4_glMultiTexCoord1sv(gl.funcs, C.GLenum(target), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord1s.xml -func (gl *GL) MultiTexCoord1s(target glbase.Enum, s int16) { - C.gl1_4_glMultiTexCoord1s(gl.funcs, C.GLenum(target), C.GLshort(s)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord1iv.xml -func (gl *GL) MultiTexCoord1iv(target glbase.Enum, v []int32) { - C.gl1_4_glMultiTexCoord1iv(gl.funcs, C.GLenum(target), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord1i.xml -func (gl *GL) MultiTexCoord1i(target glbase.Enum, s int32) { - C.gl1_4_glMultiTexCoord1i(gl.funcs, C.GLenum(target), C.GLint(s)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord1fv.xml -func (gl *GL) MultiTexCoord1fv(target glbase.Enum, v []float32) { - C.gl1_4_glMultiTexCoord1fv(gl.funcs, C.GLenum(target), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord1f.xml -func (gl *GL) MultiTexCoord1f(target glbase.Enum, s float32) { - C.gl1_4_glMultiTexCoord1f(gl.funcs, C.GLenum(target), C.GLfloat(s)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord1dv.xml -func (gl *GL) MultiTexCoord1dv(target glbase.Enum, v []float64) { - C.gl1_4_glMultiTexCoord1dv(gl.funcs, C.GLenum(target), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord1d.xml -func (gl *GL) MultiTexCoord1d(target glbase.Enum, s float64) { - C.gl1_4_glMultiTexCoord1d(gl.funcs, C.GLenum(target), C.GLdouble(s)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glClientActiveTexture.xml -func (gl *GL) ClientActiveTexture(texture glbase.Enum) { - C.gl1_4_glClientActiveTexture(gl.funcs, C.GLenum(texture)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glWindowPos3sv.xml -func (gl *GL) WindowPos3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_4_glWindowPos3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glWindowPos3s.xml -func (gl *GL) WindowPos3s(x, y, z int16) { - C.gl1_4_glWindowPos3s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glWindowPos3iv.xml -func (gl *GL) WindowPos3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_4_glWindowPos3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glWindowPos3i.xml -func (gl *GL) WindowPos3i(x, y, z int) { - C.gl1_4_glWindowPos3i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glWindowPos3fv.xml -func (gl *GL) WindowPos3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_4_glWindowPos3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glWindowPos3f.xml -func (gl *GL) WindowPos3f(x, y, z float32) { - C.gl1_4_glWindowPos3f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glWindowPos3dv.xml -func (gl *GL) WindowPos3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_4_glWindowPos3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glWindowPos3d.xml -func (gl *GL) WindowPos3d(x, y, z float64) { - C.gl1_4_glWindowPos3d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glWindowPos2sv.xml -func (gl *GL) WindowPos2sv(v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_4_glWindowPos2sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glWindowPos2s.xml -func (gl *GL) WindowPos2s(x, y int16) { - C.gl1_4_glWindowPos2s(gl.funcs, C.GLshort(x), C.GLshort(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glWindowPos2iv.xml -func (gl *GL) WindowPos2iv(v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_4_glWindowPos2iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glWindowPos2i.xml -func (gl *GL) WindowPos2i(x, y int) { - C.gl1_4_glWindowPos2i(gl.funcs, C.GLint(x), C.GLint(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glWindowPos2fv.xml -func (gl *GL) WindowPos2fv(v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_4_glWindowPos2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glWindowPos2f.xml -func (gl *GL) WindowPos2f(x, y float32) { - C.gl1_4_glWindowPos2f(gl.funcs, C.GLfloat(x), C.GLfloat(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glWindowPos2dv.xml -func (gl *GL) WindowPos2dv(v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_4_glWindowPos2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glWindowPos2d.xml -func (gl *GL) WindowPos2d(x, y float64) { - C.gl1_4_glWindowPos2d(gl.funcs, C.GLdouble(x), C.GLdouble(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColorPointer.xml -func (gl *GL) SecondaryColorPointer(size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl1_4_glSecondaryColorPointer(gl.funcs, C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColor3usv.xml -func (gl *GL) SecondaryColor3usv(v []uint16) { - C.gl1_4_glSecondaryColor3usv(gl.funcs, (*C.GLushort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColor3us.xml -func (gl *GL) SecondaryColor3us(red, green, blue uint16) { - C.gl1_4_glSecondaryColor3us(gl.funcs, C.GLushort(red), C.GLushort(green), C.GLushort(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColor3uiv.xml -func (gl *GL) SecondaryColor3uiv(v []uint32) { - C.gl1_4_glSecondaryColor3uiv(gl.funcs, (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColor3ui.xml -func (gl *GL) SecondaryColor3ui(red, green, blue uint32) { - C.gl1_4_glSecondaryColor3ui(gl.funcs, C.GLuint(red), C.GLuint(green), C.GLuint(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColor3ubv.xml -func (gl *GL) SecondaryColor3ubv(v []uint8) { - C.gl1_4_glSecondaryColor3ubv(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColor3ub.xml -func (gl *GL) SecondaryColor3ub(red, green, blue uint8) { - C.gl1_4_glSecondaryColor3ub(gl.funcs, C.GLubyte(red), C.GLubyte(green), C.GLubyte(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColor3sv.xml -func (gl *GL) SecondaryColor3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_4_glSecondaryColor3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColor3s.xml -func (gl *GL) SecondaryColor3s(red, green, blue int16) { - C.gl1_4_glSecondaryColor3s(gl.funcs, C.GLshort(red), C.GLshort(green), C.GLshort(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColor3iv.xml -func (gl *GL) SecondaryColor3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_4_glSecondaryColor3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColor3i.xml -func (gl *GL) SecondaryColor3i(red, green, blue int32) { - C.gl1_4_glSecondaryColor3i(gl.funcs, C.GLint(red), C.GLint(green), C.GLint(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColor3fv.xml -func (gl *GL) SecondaryColor3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_4_glSecondaryColor3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColor3f.xml -func (gl *GL) SecondaryColor3f(red, green, blue float32) { - C.gl1_4_glSecondaryColor3f(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColor3dv.xml -func (gl *GL) SecondaryColor3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_4_glSecondaryColor3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColor3d.xml -func (gl *GL) SecondaryColor3d(red, green, blue float64) { - C.gl1_4_glSecondaryColor3d(gl.funcs, C.GLdouble(red), C.GLdouble(green), C.GLdouble(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColor3bv.xml -func (gl *GL) SecondaryColor3bv(v []byte) { - C.gl1_4_glSecondaryColor3bv(gl.funcs, (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColor3b.xml -func (gl *GL) SecondaryColor3b(red, green, blue byte) { - C.gl1_4_glSecondaryColor3b(gl.funcs, C.GLbyte(red), C.GLbyte(green), C.GLbyte(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFogCoordPointer.xml -func (gl *GL) FogCoordPointer(gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl1_4_glFogCoordPointer(gl.funcs, C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFogCoorddv.xml -func (gl *GL) FogCoorddv(coord []float64) { - C.gl1_4_glFogCoorddv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&coord[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFogCoordd.xml -func (gl *GL) FogCoordd(coord float64) { - C.gl1_4_glFogCoordd(gl.funcs, C.GLdouble(coord)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFogCoordfv.xml -func (gl *GL) FogCoordfv(coord []float32) { - C.gl1_4_glFogCoordfv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&coord[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFogCoordf.xml -func (gl *GL) FogCoordf(coord float32) { - C.gl1_4_glFogCoordf(gl.funcs, C.GLfloat(coord)) -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/1.5/funcs.cpp b/Godeps/_workspace/src/github.com/obscuren/qml/gl/1.5/funcs.cpp deleted file mode 100644 index 6158162fc6..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/1.5/funcs.cpp +++ /dev/null @@ -1,2892 +0,0 @@ - -// ** file automatically generated by glgen -- do not edit manually ** - -#include -#include - -#include "funcs.h" - -void *gl1_5_funcs() { - QOpenGLFunctions_1_5* funcs = QOpenGLContext::currentContext()->versionFunctions(); - if (!funcs) { - return 0; - } - funcs->initializeOpenGLFunctions(); - return funcs; -} - - -void gl1_5_glViewport(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glViewport(x, y, width, height); -} - -void gl1_5_glDepthRange(void *_glfuncs, GLdouble nearVal, GLdouble farVal) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthRange(nearVal, farVal); -} - -GLboolean gl1_5_glIsEnabled(void *_glfuncs, GLenum cap) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsEnabled(cap); -} - -void gl1_5_glGetTexLevelParameteriv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLint* params) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexLevelParameteriv(target, level, pname, params); -} - -void gl1_5_glGetTexLevelParameterfv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexLevelParameterfv(target, level, pname, params); -} - -void gl1_5_glGetTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameteriv(target, pname, params); -} - -void gl1_5_glGetTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameterfv(target, pname, params); -} - -void gl1_5_glGetTexImage(void *_glfuncs, GLenum target, GLint level, GLenum format, GLenum gltype, GLvoid* pixels) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexImage(target, level, format, gltype, pixels); -} - -void gl1_5_glGetIntegerv(void *_glfuncs, GLenum pname, GLint* params) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetIntegerv(pname, params); -} - -void gl1_5_glGetFloatv(void *_glfuncs, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetFloatv(pname, params); -} - -GLenum gl1_5_glGetError(void *_glfuncs) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetError(); -} - -void gl1_5_glGetDoublev(void *_glfuncs, GLenum pname, GLdouble* params) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetDoublev(pname, params); -} - -void gl1_5_glGetBooleanv(void *_glfuncs, GLenum pname, GLboolean* params) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBooleanv(pname, params); -} - -void gl1_5_glReadPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum gltype, GLvoid* pixels) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glReadPixels(x, y, width, height, format, gltype, pixels); -} - -void gl1_5_glReadBuffer(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glReadBuffer(mode); -} - -void gl1_5_glPixelStorei(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelStorei(pname, param); -} - -void gl1_5_glPixelStoref(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelStoref(pname, param); -} - -void gl1_5_glDepthFunc(void *_glfuncs, GLenum glfunc) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthFunc(glfunc); -} - -void gl1_5_glStencilOp(void *_glfuncs, GLenum fail, GLenum zfail, GLenum zpass) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilOp(fail, zfail, zpass); -} - -void gl1_5_glStencilFunc(void *_glfuncs, GLenum glfunc, GLint ref, GLuint mask) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilFunc(glfunc, ref, mask); -} - -void gl1_5_glLogicOp(void *_glfuncs, GLenum opcode) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLogicOp(opcode); -} - -void gl1_5_glBlendFunc(void *_glfuncs, GLenum sfactor, GLenum dfactor) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendFunc(sfactor, dfactor); -} - -void gl1_5_glFlush(void *_glfuncs) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFlush(); -} - -void gl1_5_glFinish(void *_glfuncs) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFinish(); -} - -void gl1_5_glEnable(void *_glfuncs, GLenum cap) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnable(cap); -} - -void gl1_5_glDisable(void *_glfuncs, GLenum cap) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDisable(cap); -} - -void gl1_5_glDepthMask(void *_glfuncs, GLboolean flag) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthMask(flag); -} - -void gl1_5_glColorMask(void *_glfuncs, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorMask(red, green, blue, alpha); -} - -void gl1_5_glStencilMask(void *_glfuncs, GLuint mask) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilMask(mask); -} - -void gl1_5_glClearDepth(void *_glfuncs, GLdouble depth) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearDepth(depth); -} - -void gl1_5_glClearStencil(void *_glfuncs, GLint s) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearStencil(s); -} - -void gl1_5_glClearColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearColor(red, green, blue, alpha); -} - -void gl1_5_glClear(void *_glfuncs, GLbitfield mask) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClear(mask); -} - -void gl1_5_glDrawBuffer(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawBuffer(mode); -} - -void gl1_5_glTexImage2D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage2D(target, level, internalFormat, width, height, border, format, gltype, pixels); -} - -void gl1_5_glTexImage1D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage1D(target, level, internalFormat, width, border, format, gltype, pixels); -} - -void gl1_5_glTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameteriv(target, pname, params); -} - -void gl1_5_glTexParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint param) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameteri(target, pname, param); -} - -void gl1_5_glTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterfv(target, pname, params); -} - -void gl1_5_glTexParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterf(target, pname, param); -} - -void gl1_5_glScissor(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScissor(x, y, width, height); -} - -void gl1_5_glPolygonMode(void *_glfuncs, GLenum face, GLenum mode) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPolygonMode(face, mode); -} - -void gl1_5_glPointSize(void *_glfuncs, GLfloat size) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointSize(size); -} - -void gl1_5_glLineWidth(void *_glfuncs, GLfloat width) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLineWidth(width); -} - -void gl1_5_glHint(void *_glfuncs, GLenum target, GLenum mode) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glHint(target, mode); -} - -void gl1_5_glFrontFace(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFrontFace(mode); -} - -void gl1_5_glCullFace(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCullFace(mode); -} - -void gl1_5_glIndexubv(void *_glfuncs, const GLubyte* c) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexubv(c); -} - -void gl1_5_glIndexub(void *_glfuncs, GLubyte c) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexub(c); -} - -GLboolean gl1_5_glIsTexture(void *_glfuncs, GLuint texture) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsTexture(texture); -} - -void gl1_5_glGenTextures(void *_glfuncs, GLsizei n, GLuint* textures) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenTextures(n, textures); -} - -void gl1_5_glDeleteTextures(void *_glfuncs, GLsizei n, const GLuint* textures) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteTextures(n, textures); -} - -void gl1_5_glBindTexture(void *_glfuncs, GLenum target, GLuint texture) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindTexture(target, texture); -} - -void gl1_5_glTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, gltype, pixels); -} - -void gl1_5_glTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexSubImage1D(target, level, xoffset, width, format, gltype, pixels); -} - -void gl1_5_glCopyTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height); -} - -void gl1_5_glCopyTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexSubImage1D(target, level, xoffset, x, y, width); -} - -void gl1_5_glCopyTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexImage2D(target, level, internalFormat, x, y, width, height, border); -} - -void gl1_5_glCopyTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexImage1D(target, level, internalFormat, x, y, width, border); -} - -void gl1_5_glPolygonOffset(void *_glfuncs, GLfloat factor, GLfloat units) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPolygonOffset(factor, units); -} - -void gl1_5_glDrawElements(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElements(mode, count, gltype, indices); -} - -void gl1_5_glDrawArrays(void *_glfuncs, GLenum mode, GLint first, GLsizei count) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawArrays(mode, first, count); -} - -void gl1_5_glCopyTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexSubImage3D(target, level, xoffset, yoffset, zoffset, x, y, width, height); -} - -void gl1_5_glTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, gltype, pixels); -} - -void gl1_5_glTexImage3D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage3D(target, level, internalFormat, width, height, depth, border, format, gltype, pixels); -} - -void gl1_5_glDrawRangeElements(void *_glfuncs, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum gltype, const GLvoid* indices) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawRangeElements(mode, start, end, count, gltype, indices); -} - -void gl1_5_glBlendEquation(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendEquation(mode); -} - -void gl1_5_glBlendColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendColor(red, green, blue, alpha); -} - -void gl1_5_glGetCompressedTexImage(void *_glfuncs, GLenum target, GLint level, GLvoid* img) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetCompressedTexImage(target, level, img); -} - -void gl1_5_glCompressedTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexSubImage1D(target, level, xoffset, width, format, imageSize, data); -} - -void gl1_5_glCompressedTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data); -} - -void gl1_5_glCompressedTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data); -} - -void gl1_5_glCompressedTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexImage1D(target, level, internalFormat, width, border, imageSize, data); -} - -void gl1_5_glCompressedTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexImage2D(target, level, internalFormat, width, height, border, imageSize, data); -} - -void gl1_5_glCompressedTexImage3D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexImage3D(target, level, internalFormat, width, height, depth, border, imageSize, data); -} - -void gl1_5_glSampleCoverage(void *_glfuncs, GLfloat value, GLboolean invert) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSampleCoverage(value, invert); -} - -void gl1_5_glActiveTexture(void *_glfuncs, GLenum texture) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glActiveTexture(texture); -} - -void gl1_5_glPointParameteriv(void *_glfuncs, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameteriv(pname, params); -} - -void gl1_5_glPointParameteri(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameteri(pname, param); -} - -void gl1_5_glPointParameterfv(void *_glfuncs, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameterfv(pname, params); -} - -void gl1_5_glPointParameterf(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameterf(pname, param); -} - -void gl1_5_glMultiDrawArrays(void *_glfuncs, GLenum mode, const GLint* first, const GLsizei* count, GLsizei drawcount) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiDrawArrays(mode, first, count, drawcount); -} - -void gl1_5_glBlendFuncSeparate(void *_glfuncs, GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendFuncSeparate(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha); -} - -void gl1_5_glGetBufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBufferParameteriv(target, pname, params); -} - -GLboolean gl1_5_glUnmapBuffer(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glUnmapBuffer(target); -} - -void gl1_5_glGetBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, GLvoid* data) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBufferSubData(target, offset, size, data); -} - -void gl1_5_glBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBufferSubData(target, offset, size, data); -} - -void gl1_5_glBufferData(void *_glfuncs, GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBufferData(target, size, data, usage); -} - -GLboolean gl1_5_glIsBuffer(void *_glfuncs, GLuint buffer) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsBuffer(buffer); -} - -void gl1_5_glGenBuffers(void *_glfuncs, GLsizei n, GLuint* buffers) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenBuffers(n, buffers); -} - -void gl1_5_glDeleteBuffers(void *_glfuncs, GLsizei n, const GLuint* buffers) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteBuffers(n, buffers); -} - -void gl1_5_glBindBuffer(void *_glfuncs, GLenum target, GLuint buffer) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindBuffer(target, buffer); -} - -void gl1_5_glGetQueryObjectuiv(void *_glfuncs, GLuint id, GLenum pname, GLuint* params) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryObjectuiv(id, pname, params); -} - -void gl1_5_glGetQueryObjectiv(void *_glfuncs, GLuint id, GLenum pname, GLint* params) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryObjectiv(id, pname, params); -} - -void gl1_5_glGetQueryiv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryiv(target, pname, params); -} - -void gl1_5_glEndQuery(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndQuery(target); -} - -void gl1_5_glBeginQuery(void *_glfuncs, GLenum target, GLuint id) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBeginQuery(target, id); -} - -GLboolean gl1_5_glIsQuery(void *_glfuncs, GLuint id) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsQuery(id); -} - -void gl1_5_glDeleteQueries(void *_glfuncs, GLsizei n, const GLuint* ids) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteQueries(n, ids); -} - -void gl1_5_glGenQueries(void *_glfuncs, GLsizei n, GLuint* ids) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenQueries(n, ids); -} - -void gl1_5_glTranslatef(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTranslatef(x, y, z); -} - -void gl1_5_glTranslated(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTranslated(x, y, z); -} - -void gl1_5_glScalef(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScalef(x, y, z); -} - -void gl1_5_glScaled(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScaled(x, y, z); -} - -void gl1_5_glRotatef(void *_glfuncs, GLfloat angle, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRotatef(angle, x, y, z); -} - -void gl1_5_glRotated(void *_glfuncs, GLdouble angle, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRotated(angle, x, y, z); -} - -void gl1_5_glPushMatrix(void *_glfuncs) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPushMatrix(); -} - -void gl1_5_glPopMatrix(void *_glfuncs) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPopMatrix(); -} - -void gl1_5_glOrtho(void *_glfuncs, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glOrtho(left, right, bottom, top, zNear, zFar); -} - -void gl1_5_glMultMatrixd(void *_glfuncs, const GLdouble* m) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultMatrixd(m); -} - -void gl1_5_glMultMatrixf(void *_glfuncs, const GLfloat* m) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultMatrixf(m); -} - -void gl1_5_glMatrixMode(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMatrixMode(mode); -} - -void gl1_5_glLoadMatrixd(void *_glfuncs, const GLdouble* m) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadMatrixd(m); -} - -void gl1_5_glLoadMatrixf(void *_glfuncs, const GLfloat* m) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadMatrixf(m); -} - -void gl1_5_glLoadIdentity(void *_glfuncs) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadIdentity(); -} - -void gl1_5_glFrustum(void *_glfuncs, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFrustum(left, right, bottom, top, zNear, zFar); -} - -GLboolean gl1_5_glIsList(void *_glfuncs, GLuint list) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsList(list); -} - -void gl1_5_glGetTexGeniv(void *_glfuncs, GLenum coord, GLenum pname, GLint* params) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexGeniv(coord, pname, params); -} - -void gl1_5_glGetTexGenfv(void *_glfuncs, GLenum coord, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexGenfv(coord, pname, params); -} - -void gl1_5_glGetTexGendv(void *_glfuncs, GLenum coord, GLenum pname, GLdouble* params) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexGendv(coord, pname, params); -} - -void gl1_5_glGetTexEnviv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexEnviv(target, pname, params); -} - -void gl1_5_glGetTexEnvfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexEnvfv(target, pname, params); -} - -void gl1_5_glGetPolygonStipple(void *_glfuncs, GLubyte* mask) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetPolygonStipple(mask); -} - -void gl1_5_glGetPixelMapusv(void *_glfuncs, GLenum glmap, GLushort* values) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetPixelMapusv(glmap, values); -} - -void gl1_5_glGetPixelMapuiv(void *_glfuncs, GLenum glmap, GLuint* values) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetPixelMapuiv(glmap, values); -} - -void gl1_5_glGetPixelMapfv(void *_glfuncs, GLenum glmap, GLfloat* values) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetPixelMapfv(glmap, values); -} - -void gl1_5_glGetMaterialiv(void *_glfuncs, GLenum face, GLenum pname, GLint* params) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMaterialiv(face, pname, params); -} - -void gl1_5_glGetMaterialfv(void *_glfuncs, GLenum face, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMaterialfv(face, pname, params); -} - -void gl1_5_glGetMapiv(void *_glfuncs, GLenum target, GLenum query, GLint* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMapiv(target, query, v); -} - -void gl1_5_glGetMapfv(void *_glfuncs, GLenum target, GLenum query, GLfloat* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMapfv(target, query, v); -} - -void gl1_5_glGetMapdv(void *_glfuncs, GLenum target, GLenum query, GLdouble* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMapdv(target, query, v); -} - -void gl1_5_glGetLightiv(void *_glfuncs, GLenum light, GLenum pname, GLint* params) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetLightiv(light, pname, params); -} - -void gl1_5_glGetLightfv(void *_glfuncs, GLenum light, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetLightfv(light, pname, params); -} - -void gl1_5_glGetClipPlane(void *_glfuncs, GLenum plane, GLdouble* equation) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetClipPlane(plane, equation); -} - -void gl1_5_glDrawPixels(void *_glfuncs, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawPixels(width, height, format, gltype, pixels); -} - -void gl1_5_glCopyPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum gltype) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyPixels(x, y, width, height, gltype); -} - -void gl1_5_glPixelMapusv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLushort* values) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelMapusv(glmap, mapsize, values); -} - -void gl1_5_glPixelMapuiv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLuint* values) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelMapuiv(glmap, mapsize, values); -} - -void gl1_5_glPixelMapfv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLfloat* values) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelMapfv(glmap, mapsize, values); -} - -void gl1_5_glPixelTransferi(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelTransferi(pname, param); -} - -void gl1_5_glPixelTransferf(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelTransferf(pname, param); -} - -void gl1_5_glPixelZoom(void *_glfuncs, GLfloat xfactor, GLfloat yfactor) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelZoom(xfactor, yfactor); -} - -void gl1_5_glAlphaFunc(void *_glfuncs, GLenum glfunc, GLfloat ref) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glAlphaFunc(glfunc, ref); -} - -void gl1_5_glEvalPoint2(void *_glfuncs, GLint i, GLint j) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalPoint2(i, j); -} - -void gl1_5_glEvalMesh2(void *_glfuncs, GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalMesh2(mode, i1, i2, j1, j2); -} - -void gl1_5_glEvalPoint1(void *_glfuncs, GLint i) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalPoint1(i); -} - -void gl1_5_glEvalMesh1(void *_glfuncs, GLenum mode, GLint i1, GLint i2) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalMesh1(mode, i1, i2); -} - -void gl1_5_glEvalCoord2fv(void *_glfuncs, const GLfloat* u) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord2fv(u); -} - -void gl1_5_glEvalCoord2f(void *_glfuncs, GLfloat u, GLfloat v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord2f(u, v); -} - -void gl1_5_glEvalCoord2dv(void *_glfuncs, const GLdouble* u) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord2dv(u); -} - -void gl1_5_glEvalCoord2d(void *_glfuncs, GLdouble u, GLdouble v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord2d(u, v); -} - -void gl1_5_glEvalCoord1fv(void *_glfuncs, const GLfloat* u) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord1fv(u); -} - -void gl1_5_glEvalCoord1f(void *_glfuncs, GLfloat u) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord1f(u); -} - -void gl1_5_glEvalCoord1dv(void *_glfuncs, const GLdouble* u) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord1dv(u); -} - -void gl1_5_glEvalCoord1d(void *_glfuncs, GLdouble u) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord1d(u); -} - -void gl1_5_glMapGrid2f(void *_glfuncs, GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMapGrid2f(un, u1, u2, vn, v1, v2); -} - -void gl1_5_glMapGrid2d(void *_glfuncs, GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMapGrid2d(un, u1, u2, vn, v1, v2); -} - -void gl1_5_glMapGrid1f(void *_glfuncs, GLint un, GLfloat u1, GLfloat u2) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMapGrid1f(un, u1, u2); -} - -void gl1_5_glMapGrid1d(void *_glfuncs, GLint un, GLdouble u1, GLdouble u2) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMapGrid1d(un, u1, u2); -} - -void gl1_5_glMap2f(void *_glfuncs, GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat* points) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMap2f(target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points); -} - -void gl1_5_glMap2d(void *_glfuncs, GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble* points) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMap2d(target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points); -} - -void gl1_5_glMap1f(void *_glfuncs, GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat* points) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMap1f(target, u1, u2, stride, order, points); -} - -void gl1_5_glMap1d(void *_glfuncs, GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble* points) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMap1d(target, u1, u2, stride, order, points); -} - -void gl1_5_glPushAttrib(void *_glfuncs, GLbitfield mask) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPushAttrib(mask); -} - -void gl1_5_glPopAttrib(void *_glfuncs) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPopAttrib(); -} - -void gl1_5_glAccum(void *_glfuncs, GLenum op, GLfloat value) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glAccum(op, value); -} - -void gl1_5_glIndexMask(void *_glfuncs, GLuint mask) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexMask(mask); -} - -void gl1_5_glClearIndex(void *_glfuncs, GLfloat c) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearIndex(c); -} - -void gl1_5_glClearAccum(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearAccum(red, green, blue, alpha); -} - -void gl1_5_glPushName(void *_glfuncs, GLuint name) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPushName(name); -} - -void gl1_5_glPopName(void *_glfuncs) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPopName(); -} - -void gl1_5_glPassThrough(void *_glfuncs, GLfloat token) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPassThrough(token); -} - -void gl1_5_glLoadName(void *_glfuncs, GLuint name) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadName(name); -} - -void gl1_5_glInitNames(void *_glfuncs) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glInitNames(); -} - -GLint gl1_5_glRenderMode(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glRenderMode(mode); -} - -void gl1_5_glSelectBuffer(void *_glfuncs, GLsizei size, GLuint* buffer) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSelectBuffer(size, buffer); -} - -void gl1_5_glFeedbackBuffer(void *_glfuncs, GLsizei size, GLenum gltype, GLfloat* buffer) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFeedbackBuffer(size, gltype, buffer); -} - -void gl1_5_glTexGeniv(void *_glfuncs, GLenum coord, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGeniv(coord, pname, params); -} - -void gl1_5_glTexGeni(void *_glfuncs, GLenum coord, GLenum pname, GLint param) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGeni(coord, pname, param); -} - -void gl1_5_glTexGenfv(void *_glfuncs, GLenum coord, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGenfv(coord, pname, params); -} - -void gl1_5_glTexGenf(void *_glfuncs, GLenum coord, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGenf(coord, pname, param); -} - -void gl1_5_glTexGendv(void *_glfuncs, GLenum coord, GLenum pname, const GLdouble* params) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGendv(coord, pname, params); -} - -void gl1_5_glTexGend(void *_glfuncs, GLenum coord, GLenum pname, GLdouble param) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGend(coord, pname, param); -} - -void gl1_5_glTexEnviv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexEnviv(target, pname, params); -} - -void gl1_5_glTexEnvi(void *_glfuncs, GLenum target, GLenum pname, GLint param) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexEnvi(target, pname, param); -} - -void gl1_5_glTexEnvfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexEnvfv(target, pname, params); -} - -void gl1_5_glTexEnvf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexEnvf(target, pname, param); -} - -void gl1_5_glShadeModel(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glShadeModel(mode); -} - -void gl1_5_glPolygonStipple(void *_glfuncs, const GLubyte* mask) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPolygonStipple(mask); -} - -void gl1_5_glMaterialiv(void *_glfuncs, GLenum face, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMaterialiv(face, pname, params); -} - -void gl1_5_glMateriali(void *_glfuncs, GLenum face, GLenum pname, GLint param) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMateriali(face, pname, param); -} - -void gl1_5_glMaterialfv(void *_glfuncs, GLenum face, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMaterialfv(face, pname, params); -} - -void gl1_5_glMaterialf(void *_glfuncs, GLenum face, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMaterialf(face, pname, param); -} - -void gl1_5_glLineStipple(void *_glfuncs, GLint factor, GLushort pattern) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLineStipple(factor, pattern); -} - -void gl1_5_glLightModeliv(void *_glfuncs, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightModeliv(pname, params); -} - -void gl1_5_glLightModeli(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightModeli(pname, param); -} - -void gl1_5_glLightModelfv(void *_glfuncs, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightModelfv(pname, params); -} - -void gl1_5_glLightModelf(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightModelf(pname, param); -} - -void gl1_5_glLightiv(void *_glfuncs, GLenum light, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightiv(light, pname, params); -} - -void gl1_5_glLighti(void *_glfuncs, GLenum light, GLenum pname, GLint param) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLighti(light, pname, param); -} - -void gl1_5_glLightfv(void *_glfuncs, GLenum light, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightfv(light, pname, params); -} - -void gl1_5_glLightf(void *_glfuncs, GLenum light, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightf(light, pname, param); -} - -void gl1_5_glFogiv(void *_glfuncs, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogiv(pname, params); -} - -void gl1_5_glFogi(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogi(pname, param); -} - -void gl1_5_glFogfv(void *_glfuncs, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogfv(pname, params); -} - -void gl1_5_glFogf(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogf(pname, param); -} - -void gl1_5_glColorMaterial(void *_glfuncs, GLenum face, GLenum mode) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorMaterial(face, mode); -} - -void gl1_5_glClipPlane(void *_glfuncs, GLenum plane, const GLdouble* equation) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClipPlane(plane, equation); -} - -void gl1_5_glVertex4sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4sv(v); -} - -void gl1_5_glVertex4s(void *_glfuncs, GLshort x, GLshort y, GLshort z, GLshort w) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4s(x, y, z, w); -} - -void gl1_5_glVertex4iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4iv(v); -} - -void gl1_5_glVertex4i(void *_glfuncs, GLint x, GLint y, GLint z, GLint w) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4i(x, y, z, w); -} - -void gl1_5_glVertex4fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4fv(v); -} - -void gl1_5_glVertex4f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z, GLfloat w) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4f(x, y, z, w); -} - -void gl1_5_glVertex4dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4dv(v); -} - -void gl1_5_glVertex4d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z, GLdouble w) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4d(x, y, z, w); -} - -void gl1_5_glVertex3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3sv(v); -} - -void gl1_5_glVertex3s(void *_glfuncs, GLshort x, GLshort y, GLshort z) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3s(x, y, z); -} - -void gl1_5_glVertex3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3iv(v); -} - -void gl1_5_glVertex3i(void *_glfuncs, GLint x, GLint y, GLint z) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3i(x, y, z); -} - -void gl1_5_glVertex3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3fv(v); -} - -void gl1_5_glVertex3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3f(x, y, z); -} - -void gl1_5_glVertex3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3dv(v); -} - -void gl1_5_glVertex3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3d(x, y, z); -} - -void gl1_5_glVertex2sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2sv(v); -} - -void gl1_5_glVertex2s(void *_glfuncs, GLshort x, GLshort y) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2s(x, y); -} - -void gl1_5_glVertex2iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2iv(v); -} - -void gl1_5_glVertex2i(void *_glfuncs, GLint x, GLint y) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2i(x, y); -} - -void gl1_5_glVertex2fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2fv(v); -} - -void gl1_5_glVertex2f(void *_glfuncs, GLfloat x, GLfloat y) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2f(x, y); -} - -void gl1_5_glVertex2dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2dv(v); -} - -void gl1_5_glVertex2d(void *_glfuncs, GLdouble x, GLdouble y) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2d(x, y); -} - -void gl1_5_glTexCoord4sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4sv(v); -} - -void gl1_5_glTexCoord4s(void *_glfuncs, GLshort s, GLshort t, GLshort r, GLshort q) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4s(s, t, r, q); -} - -void gl1_5_glTexCoord4iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4iv(v); -} - -void gl1_5_glTexCoord4i(void *_glfuncs, GLint s, GLint t, GLint r, GLint q) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4i(s, t, r, q); -} - -void gl1_5_glTexCoord4fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4fv(v); -} - -void gl1_5_glTexCoord4f(void *_glfuncs, GLfloat s, GLfloat t, GLfloat r, GLfloat q) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4f(s, t, r, q); -} - -void gl1_5_glTexCoord4dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4dv(v); -} - -void gl1_5_glTexCoord4d(void *_glfuncs, GLdouble s, GLdouble t, GLdouble r, GLdouble q) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4d(s, t, r, q); -} - -void gl1_5_glTexCoord3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3sv(v); -} - -void gl1_5_glTexCoord3s(void *_glfuncs, GLshort s, GLshort t, GLshort r) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3s(s, t, r); -} - -void gl1_5_glTexCoord3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3iv(v); -} - -void gl1_5_glTexCoord3i(void *_glfuncs, GLint s, GLint t, GLint r) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3i(s, t, r); -} - -void gl1_5_glTexCoord3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3fv(v); -} - -void gl1_5_glTexCoord3f(void *_glfuncs, GLfloat s, GLfloat t, GLfloat r) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3f(s, t, r); -} - -void gl1_5_glTexCoord3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3dv(v); -} - -void gl1_5_glTexCoord3d(void *_glfuncs, GLdouble s, GLdouble t, GLdouble r) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3d(s, t, r); -} - -void gl1_5_glTexCoord2sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2sv(v); -} - -void gl1_5_glTexCoord2s(void *_glfuncs, GLshort s, GLshort t) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2s(s, t); -} - -void gl1_5_glTexCoord2iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2iv(v); -} - -void gl1_5_glTexCoord2i(void *_glfuncs, GLint s, GLint t) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2i(s, t); -} - -void gl1_5_glTexCoord2fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2fv(v); -} - -void gl1_5_glTexCoord2f(void *_glfuncs, GLfloat s, GLfloat t) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2f(s, t); -} - -void gl1_5_glTexCoord2dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2dv(v); -} - -void gl1_5_glTexCoord2d(void *_glfuncs, GLdouble s, GLdouble t) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2d(s, t); -} - -void gl1_5_glTexCoord1sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1sv(v); -} - -void gl1_5_glTexCoord1s(void *_glfuncs, GLshort s) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1s(s); -} - -void gl1_5_glTexCoord1iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1iv(v); -} - -void gl1_5_glTexCoord1i(void *_glfuncs, GLint s) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1i(s); -} - -void gl1_5_glTexCoord1fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1fv(v); -} - -void gl1_5_glTexCoord1f(void *_glfuncs, GLfloat s) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1f(s); -} - -void gl1_5_glTexCoord1dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1dv(v); -} - -void gl1_5_glTexCoord1d(void *_glfuncs, GLdouble s) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1d(s); -} - -void gl1_5_glRectsv(void *_glfuncs, const GLshort* v1, const GLshort* v2) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectsv(v1, v2); -} - -void gl1_5_glRects(void *_glfuncs, GLshort x1, GLshort y1, GLshort x2, GLshort y2) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRects(x1, y1, x2, y2); -} - -void gl1_5_glRectiv(void *_glfuncs, const GLint* v1, const GLint* v2) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectiv(v1, v2); -} - -void gl1_5_glRecti(void *_glfuncs, GLint x1, GLint y1, GLint x2, GLint y2) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRecti(x1, y1, x2, y2); -} - -void gl1_5_glRectfv(void *_glfuncs, const GLfloat* v1, const GLfloat* v2) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectfv(v1, v2); -} - -void gl1_5_glRectf(void *_glfuncs, GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectf(x1, y1, x2, y2); -} - -void gl1_5_glRectdv(void *_glfuncs, const GLdouble* v1, const GLdouble* v2) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectdv(v1, v2); -} - -void gl1_5_glRectd(void *_glfuncs, GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectd(x1, y1, x2, y2); -} - -void gl1_5_glRasterPos4sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4sv(v); -} - -void gl1_5_glRasterPos4s(void *_glfuncs, GLshort x, GLshort y, GLshort z, GLshort w) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4s(x, y, z, w); -} - -void gl1_5_glRasterPos4iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4iv(v); -} - -void gl1_5_glRasterPos4i(void *_glfuncs, GLint x, GLint y, GLint z, GLint w) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4i(x, y, z, w); -} - -void gl1_5_glRasterPos4fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4fv(v); -} - -void gl1_5_glRasterPos4f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z, GLfloat w) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4f(x, y, z, w); -} - -void gl1_5_glRasterPos4dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4dv(v); -} - -void gl1_5_glRasterPos4d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z, GLdouble w) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4d(x, y, z, w); -} - -void gl1_5_glRasterPos3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3sv(v); -} - -void gl1_5_glRasterPos3s(void *_glfuncs, GLshort x, GLshort y, GLshort z) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3s(x, y, z); -} - -void gl1_5_glRasterPos3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3iv(v); -} - -void gl1_5_glRasterPos3i(void *_glfuncs, GLint x, GLint y, GLint z) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3i(x, y, z); -} - -void gl1_5_glRasterPos3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3fv(v); -} - -void gl1_5_glRasterPos3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3f(x, y, z); -} - -void gl1_5_glRasterPos3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3dv(v); -} - -void gl1_5_glRasterPos3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3d(x, y, z); -} - -void gl1_5_glRasterPos2sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2sv(v); -} - -void gl1_5_glRasterPos2s(void *_glfuncs, GLshort x, GLshort y) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2s(x, y); -} - -void gl1_5_glRasterPos2iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2iv(v); -} - -void gl1_5_glRasterPos2i(void *_glfuncs, GLint x, GLint y) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2i(x, y); -} - -void gl1_5_glRasterPos2fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2fv(v); -} - -void gl1_5_glRasterPos2f(void *_glfuncs, GLfloat x, GLfloat y) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2f(x, y); -} - -void gl1_5_glRasterPos2dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2dv(v); -} - -void gl1_5_glRasterPos2d(void *_glfuncs, GLdouble x, GLdouble y) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2d(x, y); -} - -void gl1_5_glNormal3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3sv(v); -} - -void gl1_5_glNormal3s(void *_glfuncs, GLshort nx, GLshort ny, GLshort nz) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3s(nx, ny, nz); -} - -void gl1_5_glNormal3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3iv(v); -} - -void gl1_5_glNormal3i(void *_glfuncs, GLint nx, GLint ny, GLint nz) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3i(nx, ny, nz); -} - -void gl1_5_glNormal3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3fv(v); -} - -void gl1_5_glNormal3f(void *_glfuncs, GLfloat nx, GLfloat ny, GLfloat nz) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3f(nx, ny, nz); -} - -void gl1_5_glNormal3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3dv(v); -} - -void gl1_5_glNormal3d(void *_glfuncs, GLdouble nx, GLdouble ny, GLdouble nz) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3d(nx, ny, nz); -} - -void gl1_5_glNormal3bv(void *_glfuncs, const GLbyte* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3bv(v); -} - -void gl1_5_glNormal3b(void *_glfuncs, GLbyte nx, GLbyte ny, GLbyte nz) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3b(nx, ny, nz); -} - -void gl1_5_glIndexsv(void *_glfuncs, const GLshort* c) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexsv(c); -} - -void gl1_5_glIndexs(void *_glfuncs, GLshort c) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexs(c); -} - -void gl1_5_glIndexiv(void *_glfuncs, const GLint* c) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexiv(c); -} - -void gl1_5_glIndexi(void *_glfuncs, GLint c) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexi(c); -} - -void gl1_5_glIndexfv(void *_glfuncs, const GLfloat* c) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexfv(c); -} - -void gl1_5_glIndexf(void *_glfuncs, GLfloat c) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexf(c); -} - -void gl1_5_glIndexdv(void *_glfuncs, const GLdouble* c) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexdv(c); -} - -void gl1_5_glIndexd(void *_glfuncs, GLdouble c) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexd(c); -} - -void gl1_5_glEnd(void *_glfuncs) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnd(); -} - -void gl1_5_glEdgeFlagv(void *_glfuncs, const GLboolean* flag) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEdgeFlagv(flag); -} - -void gl1_5_glEdgeFlag(void *_glfuncs, GLboolean flag) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEdgeFlag(flag); -} - -void gl1_5_glColor4usv(void *_glfuncs, const GLushort* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4usv(v); -} - -void gl1_5_glColor4us(void *_glfuncs, GLushort red, GLushort green, GLushort blue, GLushort alpha) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4us(red, green, blue, alpha); -} - -void gl1_5_glColor4uiv(void *_glfuncs, const GLuint* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4uiv(v); -} - -void gl1_5_glColor4ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue, GLuint alpha) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4ui(red, green, blue, alpha); -} - -void gl1_5_glColor4ubv(void *_glfuncs, const GLubyte* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4ubv(v); -} - -void gl1_5_glColor4ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4ub(red, green, blue, alpha); -} - -void gl1_5_glColor4sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4sv(v); -} - -void gl1_5_glColor4s(void *_glfuncs, GLshort red, GLshort green, GLshort blue, GLshort alpha) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4s(red, green, blue, alpha); -} - -void gl1_5_glColor4iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4iv(v); -} - -void gl1_5_glColor4i(void *_glfuncs, GLint red, GLint green, GLint blue, GLint alpha) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4i(red, green, blue, alpha); -} - -void gl1_5_glColor4fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4fv(v); -} - -void gl1_5_glColor4f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4f(red, green, blue, alpha); -} - -void gl1_5_glColor4dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4dv(v); -} - -void gl1_5_glColor4d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4d(red, green, blue, alpha); -} - -void gl1_5_glColor4bv(void *_glfuncs, const GLbyte* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4bv(v); -} - -void gl1_5_glColor4b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4b(red, green, blue, alpha); -} - -void gl1_5_glColor3usv(void *_glfuncs, const GLushort* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3usv(v); -} - -void gl1_5_glColor3us(void *_glfuncs, GLushort red, GLushort green, GLushort blue) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3us(red, green, blue); -} - -void gl1_5_glColor3uiv(void *_glfuncs, const GLuint* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3uiv(v); -} - -void gl1_5_glColor3ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3ui(red, green, blue); -} - -void gl1_5_glColor3ubv(void *_glfuncs, const GLubyte* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3ubv(v); -} - -void gl1_5_glColor3ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3ub(red, green, blue); -} - -void gl1_5_glColor3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3sv(v); -} - -void gl1_5_glColor3s(void *_glfuncs, GLshort red, GLshort green, GLshort blue) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3s(red, green, blue); -} - -void gl1_5_glColor3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3iv(v); -} - -void gl1_5_glColor3i(void *_glfuncs, GLint red, GLint green, GLint blue) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3i(red, green, blue); -} - -void gl1_5_glColor3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3fv(v); -} - -void gl1_5_glColor3f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3f(red, green, blue); -} - -void gl1_5_glColor3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3dv(v); -} - -void gl1_5_glColor3d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3d(red, green, blue); -} - -void gl1_5_glColor3bv(void *_glfuncs, const GLbyte* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3bv(v); -} - -void gl1_5_glColor3b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3b(red, green, blue); -} - -void gl1_5_glBitmap(void *_glfuncs, GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte* bitmap) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBitmap(width, height, xorig, yorig, xmove, ymove, bitmap); -} - -void gl1_5_glBegin(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBegin(mode); -} - -void gl1_5_glListBase(void *_glfuncs, GLuint base) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glListBase(base); -} - -GLuint gl1_5_glGenLists(void *_glfuncs, GLsizei range_) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGenLists(range_); -} - -void gl1_5_glDeleteLists(void *_glfuncs, GLuint list, GLsizei range_) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteLists(list, range_); -} - -void gl1_5_glCallLists(void *_glfuncs, GLsizei n, GLenum gltype, const GLvoid* lists) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCallLists(n, gltype, lists); -} - -void gl1_5_glCallList(void *_glfuncs, GLuint list) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCallList(list); -} - -void gl1_5_glEndList(void *_glfuncs) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndList(); -} - -void gl1_5_glNewList(void *_glfuncs, GLuint list, GLenum mode) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNewList(list, mode); -} - -void gl1_5_glPushClientAttrib(void *_glfuncs, GLbitfield mask) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPushClientAttrib(mask); -} - -void gl1_5_glPopClientAttrib(void *_glfuncs) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPopClientAttrib(); -} - -void gl1_5_glPrioritizeTextures(void *_glfuncs, GLsizei n, const GLuint* textures, const GLfloat* priorities) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPrioritizeTextures(n, textures, priorities); -} - -GLboolean gl1_5_glAreTexturesResident(void *_glfuncs, GLsizei n, const GLuint* textures, GLboolean* residences) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glAreTexturesResident(n, textures, residences); -} - -void gl1_5_glVertexPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexPointer(size, gltype, stride, pointer); -} - -void gl1_5_glTexCoordPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordPointer(size, gltype, stride, pointer); -} - -void gl1_5_glNormalPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormalPointer(gltype, stride, pointer); -} - -void gl1_5_glInterleavedArrays(void *_glfuncs, GLenum format, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glInterleavedArrays(format, stride, pointer); -} - -void gl1_5_glIndexPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexPointer(gltype, stride, pointer); -} - -void gl1_5_glEnableClientState(void *_glfuncs, GLenum array) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnableClientState(array); -} - -void gl1_5_glEdgeFlagPointer(void *_glfuncs, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEdgeFlagPointer(stride, pointer); -} - -void gl1_5_glDisableClientState(void *_glfuncs, GLenum array) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDisableClientState(array); -} - -void gl1_5_glColorPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorPointer(size, gltype, stride, pointer); -} - -void gl1_5_glArrayElement(void *_glfuncs, GLint i) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glArrayElement(i); -} - -void gl1_5_glResetMinmax(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glResetMinmax(target); -} - -void gl1_5_glResetHistogram(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glResetHistogram(target); -} - -void gl1_5_glMinmax(void *_glfuncs, GLenum target, GLenum internalFormat, GLboolean sink) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMinmax(target, internalFormat, sink); -} - -void gl1_5_glHistogram(void *_glfuncs, GLenum target, GLsizei width, GLenum internalFormat, GLboolean sink) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glHistogram(target, width, internalFormat, sink); -} - -void gl1_5_glGetMinmaxParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMinmaxParameteriv(target, pname, params); -} - -void gl1_5_glGetMinmaxParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMinmaxParameterfv(target, pname, params); -} - -void gl1_5_glGetMinmax(void *_glfuncs, GLenum target, GLboolean reset, GLenum format, GLenum gltype, GLvoid* values) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMinmax(target, reset, format, gltype, values); -} - -void gl1_5_glGetHistogramParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetHistogramParameteriv(target, pname, params); -} - -void gl1_5_glGetHistogramParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetHistogramParameterfv(target, pname, params); -} - -void gl1_5_glGetHistogram(void *_glfuncs, GLenum target, GLboolean reset, GLenum format, GLenum gltype, GLvoid* values) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetHistogram(target, reset, format, gltype, values); -} - -void gl1_5_glSeparableFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* row, const GLvoid* column) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSeparableFilter2D(target, internalFormat, width, height, format, gltype, row, column); -} - -void gl1_5_glGetSeparableFilter(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* row, GLvoid* column, GLvoid* span) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetSeparableFilter(target, format, gltype, row, column, span); -} - -void gl1_5_glGetConvolutionParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetConvolutionParameteriv(target, pname, params); -} - -void gl1_5_glGetConvolutionParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetConvolutionParameterfv(target, pname, params); -} - -void gl1_5_glGetConvolutionFilter(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* image) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetConvolutionFilter(target, format, gltype, image); -} - -void gl1_5_glCopyConvolutionFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyConvolutionFilter2D(target, internalFormat, x, y, width, height); -} - -void gl1_5_glCopyConvolutionFilter1D(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyConvolutionFilter1D(target, internalFormat, x, y, width); -} - -void gl1_5_glConvolutionParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionParameteriv(target, pname, params); -} - -void gl1_5_glConvolutionParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint params) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionParameteri(target, pname, params); -} - -void gl1_5_glConvolutionParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionParameterfv(target, pname, params); -} - -void gl1_5_glConvolutionParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat params) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionParameterf(target, pname, params); -} - -void gl1_5_glConvolutionFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* image) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionFilter2D(target, internalFormat, width, height, format, gltype, image); -} - -void gl1_5_glConvolutionFilter1D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum gltype, const GLvoid* image) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionFilter1D(target, internalFormat, width, format, gltype, image); -} - -void gl1_5_glCopyColorSubTable(void *_glfuncs, GLenum target, GLsizei start, GLint x, GLint y, GLsizei width) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyColorSubTable(target, start, x, y, width); -} - -void gl1_5_glColorSubTable(void *_glfuncs, GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum gltype, const GLvoid* data) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorSubTable(target, start, count, format, gltype, data); -} - -void gl1_5_glGetColorTableParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetColorTableParameteriv(target, pname, params); -} - -void gl1_5_glGetColorTableParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetColorTableParameterfv(target, pname, params); -} - -void gl1_5_glGetColorTable(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* table) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetColorTable(target, format, gltype, table); -} - -void gl1_5_glCopyColorTable(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyColorTable(target, internalFormat, x, y, width); -} - -void gl1_5_glColorTableParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorTableParameteriv(target, pname, params); -} - -void gl1_5_glColorTableParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorTableParameterfv(target, pname, params); -} - -void gl1_5_glColorTable(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum gltype, const GLvoid* table) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorTable(target, internalFormat, width, format, gltype, table); -} - -void gl1_5_glMultTransposeMatrixd(void *_glfuncs, const GLdouble* m) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultTransposeMatrixd(m); -} - -void gl1_5_glMultTransposeMatrixf(void *_glfuncs, const GLfloat* m) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultTransposeMatrixf(m); -} - -void gl1_5_glLoadTransposeMatrixd(void *_glfuncs, const GLdouble* m) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadTransposeMatrixd(m); -} - -void gl1_5_glLoadTransposeMatrixf(void *_glfuncs, const GLfloat* m) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadTransposeMatrixf(m); -} - -void gl1_5_glMultiTexCoord4sv(void *_glfuncs, GLenum target, const GLshort* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4sv(target, v); -} - -void gl1_5_glMultiTexCoord4s(void *_glfuncs, GLenum target, GLshort s, GLshort t, GLshort r, GLshort q) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4s(target, s, t, r, q); -} - -void gl1_5_glMultiTexCoord4iv(void *_glfuncs, GLenum target, const GLint* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4iv(target, v); -} - -void gl1_5_glMultiTexCoord4i(void *_glfuncs, GLenum target, GLint s, GLint t, GLint r, GLint q) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4i(target, s, t, r, q); -} - -void gl1_5_glMultiTexCoord4fv(void *_glfuncs, GLenum target, const GLfloat* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4fv(target, v); -} - -void gl1_5_glMultiTexCoord4f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4f(target, s, t, r, q); -} - -void gl1_5_glMultiTexCoord4dv(void *_glfuncs, GLenum target, const GLdouble* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4dv(target, v); -} - -void gl1_5_glMultiTexCoord4d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4d(target, s, t, r, q); -} - -void gl1_5_glMultiTexCoord3sv(void *_glfuncs, GLenum target, const GLshort* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3sv(target, v); -} - -void gl1_5_glMultiTexCoord3s(void *_glfuncs, GLenum target, GLshort s, GLshort t, GLshort r) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3s(target, s, t, r); -} - -void gl1_5_glMultiTexCoord3iv(void *_glfuncs, GLenum target, const GLint* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3iv(target, v); -} - -void gl1_5_glMultiTexCoord3i(void *_glfuncs, GLenum target, GLint s, GLint t, GLint r) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3i(target, s, t, r); -} - -void gl1_5_glMultiTexCoord3fv(void *_glfuncs, GLenum target, const GLfloat* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3fv(target, v); -} - -void gl1_5_glMultiTexCoord3f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t, GLfloat r) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3f(target, s, t, r); -} - -void gl1_5_glMultiTexCoord3dv(void *_glfuncs, GLenum target, const GLdouble* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3dv(target, v); -} - -void gl1_5_glMultiTexCoord3d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t, GLdouble r) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3d(target, s, t, r); -} - -void gl1_5_glMultiTexCoord2sv(void *_glfuncs, GLenum target, const GLshort* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2sv(target, v); -} - -void gl1_5_glMultiTexCoord2s(void *_glfuncs, GLenum target, GLshort s, GLshort t) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2s(target, s, t); -} - -void gl1_5_glMultiTexCoord2iv(void *_glfuncs, GLenum target, const GLint* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2iv(target, v); -} - -void gl1_5_glMultiTexCoord2i(void *_glfuncs, GLenum target, GLint s, GLint t) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2i(target, s, t); -} - -void gl1_5_glMultiTexCoord2fv(void *_glfuncs, GLenum target, const GLfloat* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2fv(target, v); -} - -void gl1_5_glMultiTexCoord2f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2f(target, s, t); -} - -void gl1_5_glMultiTexCoord2dv(void *_glfuncs, GLenum target, const GLdouble* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2dv(target, v); -} - -void gl1_5_glMultiTexCoord2d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2d(target, s, t); -} - -void gl1_5_glMultiTexCoord1sv(void *_glfuncs, GLenum target, const GLshort* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1sv(target, v); -} - -void gl1_5_glMultiTexCoord1s(void *_glfuncs, GLenum target, GLshort s) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1s(target, s); -} - -void gl1_5_glMultiTexCoord1iv(void *_glfuncs, GLenum target, const GLint* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1iv(target, v); -} - -void gl1_5_glMultiTexCoord1i(void *_glfuncs, GLenum target, GLint s) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1i(target, s); -} - -void gl1_5_glMultiTexCoord1fv(void *_glfuncs, GLenum target, const GLfloat* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1fv(target, v); -} - -void gl1_5_glMultiTexCoord1f(void *_glfuncs, GLenum target, GLfloat s) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1f(target, s); -} - -void gl1_5_glMultiTexCoord1dv(void *_glfuncs, GLenum target, const GLdouble* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1dv(target, v); -} - -void gl1_5_glMultiTexCoord1d(void *_glfuncs, GLenum target, GLdouble s) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1d(target, s); -} - -void gl1_5_glClientActiveTexture(void *_glfuncs, GLenum texture) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClientActiveTexture(texture); -} - -void gl1_5_glWindowPos3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3sv(v); -} - -void gl1_5_glWindowPos3s(void *_glfuncs, GLshort x, GLshort y, GLshort z) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3s(x, y, z); -} - -void gl1_5_glWindowPos3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3iv(v); -} - -void gl1_5_glWindowPos3i(void *_glfuncs, GLint x, GLint y, GLint z) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3i(x, y, z); -} - -void gl1_5_glWindowPos3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3fv(v); -} - -void gl1_5_glWindowPos3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3f(x, y, z); -} - -void gl1_5_glWindowPos3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3dv(v); -} - -void gl1_5_glWindowPos3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3d(x, y, z); -} - -void gl1_5_glWindowPos2sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2sv(v); -} - -void gl1_5_glWindowPos2s(void *_glfuncs, GLshort x, GLshort y) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2s(x, y); -} - -void gl1_5_glWindowPos2iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2iv(v); -} - -void gl1_5_glWindowPos2i(void *_glfuncs, GLint x, GLint y) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2i(x, y); -} - -void gl1_5_glWindowPos2fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2fv(v); -} - -void gl1_5_glWindowPos2f(void *_glfuncs, GLfloat x, GLfloat y) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2f(x, y); -} - -void gl1_5_glWindowPos2dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2dv(v); -} - -void gl1_5_glWindowPos2d(void *_glfuncs, GLdouble x, GLdouble y) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2d(x, y); -} - -void gl1_5_glSecondaryColorPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColorPointer(size, gltype, stride, pointer); -} - -void gl1_5_glSecondaryColor3usv(void *_glfuncs, const GLushort* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3usv(v); -} - -void gl1_5_glSecondaryColor3us(void *_glfuncs, GLushort red, GLushort green, GLushort blue) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3us(red, green, blue); -} - -void gl1_5_glSecondaryColor3uiv(void *_glfuncs, const GLuint* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3uiv(v); -} - -void gl1_5_glSecondaryColor3ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3ui(red, green, blue); -} - -void gl1_5_glSecondaryColor3ubv(void *_glfuncs, const GLubyte* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3ubv(v); -} - -void gl1_5_glSecondaryColor3ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3ub(red, green, blue); -} - -void gl1_5_glSecondaryColor3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3sv(v); -} - -void gl1_5_glSecondaryColor3s(void *_glfuncs, GLshort red, GLshort green, GLshort blue) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3s(red, green, blue); -} - -void gl1_5_glSecondaryColor3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3iv(v); -} - -void gl1_5_glSecondaryColor3i(void *_glfuncs, GLint red, GLint green, GLint blue) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3i(red, green, blue); -} - -void gl1_5_glSecondaryColor3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3fv(v); -} - -void gl1_5_glSecondaryColor3f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3f(red, green, blue); -} - -void gl1_5_glSecondaryColor3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3dv(v); -} - -void gl1_5_glSecondaryColor3d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3d(red, green, blue); -} - -void gl1_5_glSecondaryColor3bv(void *_glfuncs, const GLbyte* v) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3bv(v); -} - -void gl1_5_glSecondaryColor3b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3b(red, green, blue); -} - -void gl1_5_glFogCoordPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogCoordPointer(gltype, stride, pointer); -} - -void gl1_5_glFogCoorddv(void *_glfuncs, const GLdouble* coord) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogCoorddv(coord); -} - -void gl1_5_glFogCoordd(void *_glfuncs, GLdouble coord) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogCoordd(coord); -} - -void gl1_5_glFogCoordfv(void *_glfuncs, const GLfloat* coord) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogCoordfv(coord); -} - -void gl1_5_glFogCoordf(void *_glfuncs, GLfloat coord) -{ - QOpenGLFunctions_1_5* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogCoordf(coord); -} - diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/1.5/funcs.h b/Godeps/_workspace/src/github.com/obscuren/qml/gl/1.5/funcs.h deleted file mode 100644 index d971f2dc30..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/1.5/funcs.h +++ /dev/null @@ -1,521 +0,0 @@ - -// ** file automatically generated by glgen -- do not edit manually ** - -#ifndef __cplusplus -#include -#include -typedef unsigned int GLenum; -typedef unsigned char GLboolean; -typedef unsigned int GLbitfield; -typedef void GLvoid; -typedef char GLchar; -typedef signed char GLbyte; /* 1-byte signed */ -typedef short GLshort; /* 2-byte signed */ -typedef int GLint; /* 4-byte signed */ -typedef unsigned char GLubyte; /* 1-byte unsigned */ -typedef unsigned short GLushort; /* 2-byte unsigned */ -typedef unsigned int GLuint; /* 4-byte unsigned */ -typedef int GLsizei; /* 4-byte signed */ -typedef float GLfloat; /* single precision float */ -typedef float GLclampf; /* single precision float in [0,1] */ -typedef double GLdouble; /* double precision float */ -typedef double GLclampd; /* double precision float in [0,1] */ -typedef int64_t GLint64; -typedef uint64_t GLuint64; -typedef ptrdiff_t GLintptr; -typedef ptrdiff_t GLsizeiptr; -typedef ptrdiff_t GLintptrARB; -typedef ptrdiff_t GLsizeiptrARB; -typedef struct __GLsync *GLsync; -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -void *gl1_5_funcs(); - -void gl1_5_glViewport(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height); -void gl1_5_glDepthRange(void *_glfuncs, GLdouble nearVal, GLdouble farVal); -GLboolean gl1_5_glIsEnabled(void *_glfuncs, GLenum cap); -void gl1_5_glGetTexLevelParameteriv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLint* params); -void gl1_5_glGetTexLevelParameterfv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLfloat* params); -void gl1_5_glGetTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl1_5_glGetTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl1_5_glGetTexImage(void *_glfuncs, GLenum target, GLint level, GLenum format, GLenum gltype, GLvoid* pixels); -void gl1_5_glGetIntegerv(void *_glfuncs, GLenum pname, GLint* params); -void gl1_5_glGetFloatv(void *_glfuncs, GLenum pname, GLfloat* params); -GLenum gl1_5_glGetError(void *_glfuncs); -void gl1_5_glGetDoublev(void *_glfuncs, GLenum pname, GLdouble* params); -void gl1_5_glGetBooleanv(void *_glfuncs, GLenum pname, GLboolean* params); -void gl1_5_glReadPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum gltype, GLvoid* pixels); -void gl1_5_glReadBuffer(void *_glfuncs, GLenum mode); -void gl1_5_glPixelStorei(void *_glfuncs, GLenum pname, GLint param); -void gl1_5_glPixelStoref(void *_glfuncs, GLenum pname, GLfloat param); -void gl1_5_glDepthFunc(void *_glfuncs, GLenum glfunc); -void gl1_5_glStencilOp(void *_glfuncs, GLenum fail, GLenum zfail, GLenum zpass); -void gl1_5_glStencilFunc(void *_glfuncs, GLenum glfunc, GLint ref, GLuint mask); -void gl1_5_glLogicOp(void *_glfuncs, GLenum opcode); -void gl1_5_glBlendFunc(void *_glfuncs, GLenum sfactor, GLenum dfactor); -void gl1_5_glFlush(void *_glfuncs); -void gl1_5_glFinish(void *_glfuncs); -void gl1_5_glEnable(void *_glfuncs, GLenum cap); -void gl1_5_glDisable(void *_glfuncs, GLenum cap); -void gl1_5_glDepthMask(void *_glfuncs, GLboolean flag); -void gl1_5_glColorMask(void *_glfuncs, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); -void gl1_5_glStencilMask(void *_glfuncs, GLuint mask); -void gl1_5_glClearDepth(void *_glfuncs, GLdouble depth); -void gl1_5_glClearStencil(void *_glfuncs, GLint s); -void gl1_5_glClearColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl1_5_glClear(void *_glfuncs, GLbitfield mask); -void gl1_5_glDrawBuffer(void *_glfuncs, GLenum mode); -void gl1_5_glTexImage2D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl1_5_glTexImage1D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl1_5_glTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl1_5_glTexParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint param); -void gl1_5_glTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params); -void gl1_5_glTexParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param); -void gl1_5_glScissor(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height); -void gl1_5_glPolygonMode(void *_glfuncs, GLenum face, GLenum mode); -void gl1_5_glPointSize(void *_glfuncs, GLfloat size); -void gl1_5_glLineWidth(void *_glfuncs, GLfloat width); -void gl1_5_glHint(void *_glfuncs, GLenum target, GLenum mode); -void gl1_5_glFrontFace(void *_glfuncs, GLenum mode); -void gl1_5_glCullFace(void *_glfuncs, GLenum mode); -void gl1_5_glIndexubv(void *_glfuncs, const GLubyte* c); -void gl1_5_glIndexub(void *_glfuncs, GLubyte c); -GLboolean gl1_5_glIsTexture(void *_glfuncs, GLuint texture); -void gl1_5_glGenTextures(void *_glfuncs, GLsizei n, GLuint* textures); -void gl1_5_glDeleteTextures(void *_glfuncs, GLsizei n, const GLuint* textures); -void gl1_5_glBindTexture(void *_glfuncs, GLenum target, GLuint texture); -void gl1_5_glTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl1_5_glTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl1_5_glCopyTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -void gl1_5_glCopyTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -void gl1_5_glCopyTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -void gl1_5_glCopyTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border); -void gl1_5_glPolygonOffset(void *_glfuncs, GLfloat factor, GLfloat units); -void gl1_5_glDrawElements(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices); -void gl1_5_glDrawArrays(void *_glfuncs, GLenum mode, GLint first, GLsizei count); -void gl1_5_glCopyTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -void gl1_5_glTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl1_5_glTexImage3D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl1_5_glDrawRangeElements(void *_glfuncs, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum gltype, const GLvoid* indices); -void gl1_5_glBlendEquation(void *_glfuncs, GLenum mode); -void gl1_5_glBlendColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl1_5_glGetCompressedTexImage(void *_glfuncs, GLenum target, GLint level, GLvoid* img); -void gl1_5_glCompressedTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid* data); -void gl1_5_glCompressedTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data); -void gl1_5_glCompressedTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data); -void gl1_5_glCompressedTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid* data); -void gl1_5_glCompressedTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data); -void gl1_5_glCompressedTexImage3D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data); -void gl1_5_glSampleCoverage(void *_glfuncs, GLfloat value, GLboolean invert); -void gl1_5_glActiveTexture(void *_glfuncs, GLenum texture); -void gl1_5_glPointParameteriv(void *_glfuncs, GLenum pname, const GLint* params); -void gl1_5_glPointParameteri(void *_glfuncs, GLenum pname, GLint param); -void gl1_5_glPointParameterfv(void *_glfuncs, GLenum pname, const GLfloat* params); -void gl1_5_glPointParameterf(void *_glfuncs, GLenum pname, GLfloat param); -void gl1_5_glMultiDrawArrays(void *_glfuncs, GLenum mode, const GLint* first, const GLsizei* count, GLsizei drawcount); -void gl1_5_glBlendFuncSeparate(void *_glfuncs, GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -void gl1_5_glGetBufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -GLboolean gl1_5_glUnmapBuffer(void *_glfuncs, GLenum target); -void gl1_5_glGetBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, GLvoid* data); -void gl1_5_glBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data); -void gl1_5_glBufferData(void *_glfuncs, GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage); -GLboolean gl1_5_glIsBuffer(void *_glfuncs, GLuint buffer); -void gl1_5_glGenBuffers(void *_glfuncs, GLsizei n, GLuint* buffers); -void gl1_5_glDeleteBuffers(void *_glfuncs, GLsizei n, const GLuint* buffers); -void gl1_5_glBindBuffer(void *_glfuncs, GLenum target, GLuint buffer); -void gl1_5_glGetQueryObjectuiv(void *_glfuncs, GLuint id, GLenum pname, GLuint* params); -void gl1_5_glGetQueryObjectiv(void *_glfuncs, GLuint id, GLenum pname, GLint* params); -void gl1_5_glGetQueryiv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl1_5_glEndQuery(void *_glfuncs, GLenum target); -void gl1_5_glBeginQuery(void *_glfuncs, GLenum target, GLuint id); -GLboolean gl1_5_glIsQuery(void *_glfuncs, GLuint id); -void gl1_5_glDeleteQueries(void *_glfuncs, GLsizei n, const GLuint* ids); -void gl1_5_glGenQueries(void *_glfuncs, GLsizei n, GLuint* ids); -void gl1_5_glTranslatef(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl1_5_glTranslated(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl1_5_glScalef(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl1_5_glScaled(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl1_5_glRotatef(void *_glfuncs, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); -void gl1_5_glRotated(void *_glfuncs, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); -void gl1_5_glPushMatrix(void *_glfuncs); -void gl1_5_glPopMatrix(void *_glfuncs); -void gl1_5_glOrtho(void *_glfuncs, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -void gl1_5_glMultMatrixd(void *_glfuncs, const GLdouble* m); -void gl1_5_glMultMatrixf(void *_glfuncs, const GLfloat* m); -void gl1_5_glMatrixMode(void *_glfuncs, GLenum mode); -void gl1_5_glLoadMatrixd(void *_glfuncs, const GLdouble* m); -void gl1_5_glLoadMatrixf(void *_glfuncs, const GLfloat* m); -void gl1_5_glLoadIdentity(void *_glfuncs); -void gl1_5_glFrustum(void *_glfuncs, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -GLboolean gl1_5_glIsList(void *_glfuncs, GLuint list); -void gl1_5_glGetTexGeniv(void *_glfuncs, GLenum coord, GLenum pname, GLint* params); -void gl1_5_glGetTexGenfv(void *_glfuncs, GLenum coord, GLenum pname, GLfloat* params); -void gl1_5_glGetTexGendv(void *_glfuncs, GLenum coord, GLenum pname, GLdouble* params); -void gl1_5_glGetTexEnviv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl1_5_glGetTexEnvfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl1_5_glGetPolygonStipple(void *_glfuncs, GLubyte* mask); -void gl1_5_glGetPixelMapusv(void *_glfuncs, GLenum glmap, GLushort* values); -void gl1_5_glGetPixelMapuiv(void *_glfuncs, GLenum glmap, GLuint* values); -void gl1_5_glGetPixelMapfv(void *_glfuncs, GLenum glmap, GLfloat* values); -void gl1_5_glGetMaterialiv(void *_glfuncs, GLenum face, GLenum pname, GLint* params); -void gl1_5_glGetMaterialfv(void *_glfuncs, GLenum face, GLenum pname, GLfloat* params); -void gl1_5_glGetMapiv(void *_glfuncs, GLenum target, GLenum query, GLint* v); -void gl1_5_glGetMapfv(void *_glfuncs, GLenum target, GLenum query, GLfloat* v); -void gl1_5_glGetMapdv(void *_glfuncs, GLenum target, GLenum query, GLdouble* v); -void gl1_5_glGetLightiv(void *_glfuncs, GLenum light, GLenum pname, GLint* params); -void gl1_5_glGetLightfv(void *_glfuncs, GLenum light, GLenum pname, GLfloat* params); -void gl1_5_glGetClipPlane(void *_glfuncs, GLenum plane, GLdouble* equation); -void gl1_5_glDrawPixels(void *_glfuncs, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl1_5_glCopyPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum gltype); -void gl1_5_glPixelMapusv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLushort* values); -void gl1_5_glPixelMapuiv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLuint* values); -void gl1_5_glPixelMapfv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLfloat* values); -void gl1_5_glPixelTransferi(void *_glfuncs, GLenum pname, GLint param); -void gl1_5_glPixelTransferf(void *_glfuncs, GLenum pname, GLfloat param); -void gl1_5_glPixelZoom(void *_glfuncs, GLfloat xfactor, GLfloat yfactor); -void gl1_5_glAlphaFunc(void *_glfuncs, GLenum glfunc, GLfloat ref); -void gl1_5_glEvalPoint2(void *_glfuncs, GLint i, GLint j); -void gl1_5_glEvalMesh2(void *_glfuncs, GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2); -void gl1_5_glEvalPoint1(void *_glfuncs, GLint i); -void gl1_5_glEvalMesh1(void *_glfuncs, GLenum mode, GLint i1, GLint i2); -void gl1_5_glEvalCoord2fv(void *_glfuncs, const GLfloat* u); -void gl1_5_glEvalCoord2f(void *_glfuncs, GLfloat u, GLfloat v); -void gl1_5_glEvalCoord2dv(void *_glfuncs, const GLdouble* u); -void gl1_5_glEvalCoord2d(void *_glfuncs, GLdouble u, GLdouble v); -void gl1_5_glEvalCoord1fv(void *_glfuncs, const GLfloat* u); -void gl1_5_glEvalCoord1f(void *_glfuncs, GLfloat u); -void gl1_5_glEvalCoord1dv(void *_glfuncs, const GLdouble* u); -void gl1_5_glEvalCoord1d(void *_glfuncs, GLdouble u); -void gl1_5_glMapGrid2f(void *_glfuncs, GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2); -void gl1_5_glMapGrid2d(void *_glfuncs, GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2); -void gl1_5_glMapGrid1f(void *_glfuncs, GLint un, GLfloat u1, GLfloat u2); -void gl1_5_glMapGrid1d(void *_glfuncs, GLint un, GLdouble u1, GLdouble u2); -void gl1_5_glMap2f(void *_glfuncs, GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat* points); -void gl1_5_glMap2d(void *_glfuncs, GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble* points); -void gl1_5_glMap1f(void *_glfuncs, GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat* points); -void gl1_5_glMap1d(void *_glfuncs, GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble* points); -void gl1_5_glPushAttrib(void *_glfuncs, GLbitfield mask); -void gl1_5_glPopAttrib(void *_glfuncs); -void gl1_5_glAccum(void *_glfuncs, GLenum op, GLfloat value); -void gl1_5_glIndexMask(void *_glfuncs, GLuint mask); -void gl1_5_glClearIndex(void *_glfuncs, GLfloat c); -void gl1_5_glClearAccum(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl1_5_glPushName(void *_glfuncs, GLuint name); -void gl1_5_glPopName(void *_glfuncs); -void gl1_5_glPassThrough(void *_glfuncs, GLfloat token); -void gl1_5_glLoadName(void *_glfuncs, GLuint name); -void gl1_5_glInitNames(void *_glfuncs); -GLint gl1_5_glRenderMode(void *_glfuncs, GLenum mode); -void gl1_5_glSelectBuffer(void *_glfuncs, GLsizei size, GLuint* buffer); -void gl1_5_glFeedbackBuffer(void *_glfuncs, GLsizei size, GLenum gltype, GLfloat* buffer); -void gl1_5_glTexGeniv(void *_glfuncs, GLenum coord, GLenum pname, const GLint* params); -void gl1_5_glTexGeni(void *_glfuncs, GLenum coord, GLenum pname, GLint param); -void gl1_5_glTexGenfv(void *_glfuncs, GLenum coord, GLenum pname, const GLfloat* params); -void gl1_5_glTexGenf(void *_glfuncs, GLenum coord, GLenum pname, GLfloat param); -void gl1_5_glTexGendv(void *_glfuncs, GLenum coord, GLenum pname, const GLdouble* params); -void gl1_5_glTexGend(void *_glfuncs, GLenum coord, GLenum pname, GLdouble param); -void gl1_5_glTexEnviv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl1_5_glTexEnvi(void *_glfuncs, GLenum target, GLenum pname, GLint param); -void gl1_5_glTexEnvfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params); -void gl1_5_glTexEnvf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param); -void gl1_5_glShadeModel(void *_glfuncs, GLenum mode); -void gl1_5_glPolygonStipple(void *_glfuncs, const GLubyte* mask); -void gl1_5_glMaterialiv(void *_glfuncs, GLenum face, GLenum pname, const GLint* params); -void gl1_5_glMateriali(void *_glfuncs, GLenum face, GLenum pname, GLint param); -void gl1_5_glMaterialfv(void *_glfuncs, GLenum face, GLenum pname, const GLfloat* params); -void gl1_5_glMaterialf(void *_glfuncs, GLenum face, GLenum pname, GLfloat param); -void gl1_5_glLineStipple(void *_glfuncs, GLint factor, GLushort pattern); -void gl1_5_glLightModeliv(void *_glfuncs, GLenum pname, const GLint* params); -void gl1_5_glLightModeli(void *_glfuncs, GLenum pname, GLint param); -void gl1_5_glLightModelfv(void *_glfuncs, GLenum pname, const GLfloat* params); -void gl1_5_glLightModelf(void *_glfuncs, GLenum pname, GLfloat param); -void gl1_5_glLightiv(void *_glfuncs, GLenum light, GLenum pname, const GLint* params); -void gl1_5_glLighti(void *_glfuncs, GLenum light, GLenum pname, GLint param); -void gl1_5_glLightfv(void *_glfuncs, GLenum light, GLenum pname, const GLfloat* params); -void gl1_5_glLightf(void *_glfuncs, GLenum light, GLenum pname, GLfloat param); -void gl1_5_glFogiv(void *_glfuncs, GLenum pname, const GLint* params); -void gl1_5_glFogi(void *_glfuncs, GLenum pname, GLint param); -void gl1_5_glFogfv(void *_glfuncs, GLenum pname, const GLfloat* params); -void gl1_5_glFogf(void *_glfuncs, GLenum pname, GLfloat param); -void gl1_5_glColorMaterial(void *_glfuncs, GLenum face, GLenum mode); -void gl1_5_glClipPlane(void *_glfuncs, GLenum plane, const GLdouble* equation); -void gl1_5_glVertex4sv(void *_glfuncs, const GLshort* v); -void gl1_5_glVertex4s(void *_glfuncs, GLshort x, GLshort y, GLshort z, GLshort w); -void gl1_5_glVertex4iv(void *_glfuncs, const GLint* v); -void gl1_5_glVertex4i(void *_glfuncs, GLint x, GLint y, GLint z, GLint w); -void gl1_5_glVertex4fv(void *_glfuncs, const GLfloat* v); -void gl1_5_glVertex4f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -void gl1_5_glVertex4dv(void *_glfuncs, const GLdouble* v); -void gl1_5_glVertex4d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -void gl1_5_glVertex3sv(void *_glfuncs, const GLshort* v); -void gl1_5_glVertex3s(void *_glfuncs, GLshort x, GLshort y, GLshort z); -void gl1_5_glVertex3iv(void *_glfuncs, const GLint* v); -void gl1_5_glVertex3i(void *_glfuncs, GLint x, GLint y, GLint z); -void gl1_5_glVertex3fv(void *_glfuncs, const GLfloat* v); -void gl1_5_glVertex3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl1_5_glVertex3dv(void *_glfuncs, const GLdouble* v); -void gl1_5_glVertex3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl1_5_glVertex2sv(void *_glfuncs, const GLshort* v); -void gl1_5_glVertex2s(void *_glfuncs, GLshort x, GLshort y); -void gl1_5_glVertex2iv(void *_glfuncs, const GLint* v); -void gl1_5_glVertex2i(void *_glfuncs, GLint x, GLint y); -void gl1_5_glVertex2fv(void *_glfuncs, const GLfloat* v); -void gl1_5_glVertex2f(void *_glfuncs, GLfloat x, GLfloat y); -void gl1_5_glVertex2dv(void *_glfuncs, const GLdouble* v); -void gl1_5_glVertex2d(void *_glfuncs, GLdouble x, GLdouble y); -void gl1_5_glTexCoord4sv(void *_glfuncs, const GLshort* v); -void gl1_5_glTexCoord4s(void *_glfuncs, GLshort s, GLshort t, GLshort r, GLshort q); -void gl1_5_glTexCoord4iv(void *_glfuncs, const GLint* v); -void gl1_5_glTexCoord4i(void *_glfuncs, GLint s, GLint t, GLint r, GLint q); -void gl1_5_glTexCoord4fv(void *_glfuncs, const GLfloat* v); -void gl1_5_glTexCoord4f(void *_glfuncs, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -void gl1_5_glTexCoord4dv(void *_glfuncs, const GLdouble* v); -void gl1_5_glTexCoord4d(void *_glfuncs, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -void gl1_5_glTexCoord3sv(void *_glfuncs, const GLshort* v); -void gl1_5_glTexCoord3s(void *_glfuncs, GLshort s, GLshort t, GLshort r); -void gl1_5_glTexCoord3iv(void *_glfuncs, const GLint* v); -void gl1_5_glTexCoord3i(void *_glfuncs, GLint s, GLint t, GLint r); -void gl1_5_glTexCoord3fv(void *_glfuncs, const GLfloat* v); -void gl1_5_glTexCoord3f(void *_glfuncs, GLfloat s, GLfloat t, GLfloat r); -void gl1_5_glTexCoord3dv(void *_glfuncs, const GLdouble* v); -void gl1_5_glTexCoord3d(void *_glfuncs, GLdouble s, GLdouble t, GLdouble r); -void gl1_5_glTexCoord2sv(void *_glfuncs, const GLshort* v); -void gl1_5_glTexCoord2s(void *_glfuncs, GLshort s, GLshort t); -void gl1_5_glTexCoord2iv(void *_glfuncs, const GLint* v); -void gl1_5_glTexCoord2i(void *_glfuncs, GLint s, GLint t); -void gl1_5_glTexCoord2fv(void *_glfuncs, const GLfloat* v); -void gl1_5_glTexCoord2f(void *_glfuncs, GLfloat s, GLfloat t); -void gl1_5_glTexCoord2dv(void *_glfuncs, const GLdouble* v); -void gl1_5_glTexCoord2d(void *_glfuncs, GLdouble s, GLdouble t); -void gl1_5_glTexCoord1sv(void *_glfuncs, const GLshort* v); -void gl1_5_glTexCoord1s(void *_glfuncs, GLshort s); -void gl1_5_glTexCoord1iv(void *_glfuncs, const GLint* v); -void gl1_5_glTexCoord1i(void *_glfuncs, GLint s); -void gl1_5_glTexCoord1fv(void *_glfuncs, const GLfloat* v); -void gl1_5_glTexCoord1f(void *_glfuncs, GLfloat s); -void gl1_5_glTexCoord1dv(void *_glfuncs, const GLdouble* v); -void gl1_5_glTexCoord1d(void *_glfuncs, GLdouble s); -void gl1_5_glRectsv(void *_glfuncs, const GLshort* v1, const GLshort* v2); -void gl1_5_glRects(void *_glfuncs, GLshort x1, GLshort y1, GLshort x2, GLshort y2); -void gl1_5_glRectiv(void *_glfuncs, const GLint* v1, const GLint* v2); -void gl1_5_glRecti(void *_glfuncs, GLint x1, GLint y1, GLint x2, GLint y2); -void gl1_5_glRectfv(void *_glfuncs, const GLfloat* v1, const GLfloat* v2); -void gl1_5_glRectf(void *_glfuncs, GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2); -void gl1_5_glRectdv(void *_glfuncs, const GLdouble* v1, const GLdouble* v2); -void gl1_5_glRectd(void *_glfuncs, GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2); -void gl1_5_glRasterPos4sv(void *_glfuncs, const GLshort* v); -void gl1_5_glRasterPos4s(void *_glfuncs, GLshort x, GLshort y, GLshort z, GLshort w); -void gl1_5_glRasterPos4iv(void *_glfuncs, const GLint* v); -void gl1_5_glRasterPos4i(void *_glfuncs, GLint x, GLint y, GLint z, GLint w); -void gl1_5_glRasterPos4fv(void *_glfuncs, const GLfloat* v); -void gl1_5_glRasterPos4f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -void gl1_5_glRasterPos4dv(void *_glfuncs, const GLdouble* v); -void gl1_5_glRasterPos4d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -void gl1_5_glRasterPos3sv(void *_glfuncs, const GLshort* v); -void gl1_5_glRasterPos3s(void *_glfuncs, GLshort x, GLshort y, GLshort z); -void gl1_5_glRasterPos3iv(void *_glfuncs, const GLint* v); -void gl1_5_glRasterPos3i(void *_glfuncs, GLint x, GLint y, GLint z); -void gl1_5_glRasterPos3fv(void *_glfuncs, const GLfloat* v); -void gl1_5_glRasterPos3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl1_5_glRasterPos3dv(void *_glfuncs, const GLdouble* v); -void gl1_5_glRasterPos3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl1_5_glRasterPos2sv(void *_glfuncs, const GLshort* v); -void gl1_5_glRasterPos2s(void *_glfuncs, GLshort x, GLshort y); -void gl1_5_glRasterPos2iv(void *_glfuncs, const GLint* v); -void gl1_5_glRasterPos2i(void *_glfuncs, GLint x, GLint y); -void gl1_5_glRasterPos2fv(void *_glfuncs, const GLfloat* v); -void gl1_5_glRasterPos2f(void *_glfuncs, GLfloat x, GLfloat y); -void gl1_5_glRasterPos2dv(void *_glfuncs, const GLdouble* v); -void gl1_5_glRasterPos2d(void *_glfuncs, GLdouble x, GLdouble y); -void gl1_5_glNormal3sv(void *_glfuncs, const GLshort* v); -void gl1_5_glNormal3s(void *_glfuncs, GLshort nx, GLshort ny, GLshort nz); -void gl1_5_glNormal3iv(void *_glfuncs, const GLint* v); -void gl1_5_glNormal3i(void *_glfuncs, GLint nx, GLint ny, GLint nz); -void gl1_5_glNormal3fv(void *_glfuncs, const GLfloat* v); -void gl1_5_glNormal3f(void *_glfuncs, GLfloat nx, GLfloat ny, GLfloat nz); -void gl1_5_glNormal3dv(void *_glfuncs, const GLdouble* v); -void gl1_5_glNormal3d(void *_glfuncs, GLdouble nx, GLdouble ny, GLdouble nz); -void gl1_5_glNormal3bv(void *_glfuncs, const GLbyte* v); -void gl1_5_glNormal3b(void *_glfuncs, GLbyte nx, GLbyte ny, GLbyte nz); -void gl1_5_glIndexsv(void *_glfuncs, const GLshort* c); -void gl1_5_glIndexs(void *_glfuncs, GLshort c); -void gl1_5_glIndexiv(void *_glfuncs, const GLint* c); -void gl1_5_glIndexi(void *_glfuncs, GLint c); -void gl1_5_glIndexfv(void *_glfuncs, const GLfloat* c); -void gl1_5_glIndexf(void *_glfuncs, GLfloat c); -void gl1_5_glIndexdv(void *_glfuncs, const GLdouble* c); -void gl1_5_glIndexd(void *_glfuncs, GLdouble c); -void gl1_5_glEnd(void *_glfuncs); -void gl1_5_glEdgeFlagv(void *_glfuncs, const GLboolean* flag); -void gl1_5_glEdgeFlag(void *_glfuncs, GLboolean flag); -void gl1_5_glColor4usv(void *_glfuncs, const GLushort* v); -void gl1_5_glColor4us(void *_glfuncs, GLushort red, GLushort green, GLushort blue, GLushort alpha); -void gl1_5_glColor4uiv(void *_glfuncs, const GLuint* v); -void gl1_5_glColor4ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue, GLuint alpha); -void gl1_5_glColor4ubv(void *_glfuncs, const GLubyte* v); -void gl1_5_glColor4ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha); -void gl1_5_glColor4sv(void *_glfuncs, const GLshort* v); -void gl1_5_glColor4s(void *_glfuncs, GLshort red, GLshort green, GLshort blue, GLshort alpha); -void gl1_5_glColor4iv(void *_glfuncs, const GLint* v); -void gl1_5_glColor4i(void *_glfuncs, GLint red, GLint green, GLint blue, GLint alpha); -void gl1_5_glColor4fv(void *_glfuncs, const GLfloat* v); -void gl1_5_glColor4f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl1_5_glColor4dv(void *_glfuncs, const GLdouble* v); -void gl1_5_glColor4d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha); -void gl1_5_glColor4bv(void *_glfuncs, const GLbyte* v); -void gl1_5_glColor4b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha); -void gl1_5_glColor3usv(void *_glfuncs, const GLushort* v); -void gl1_5_glColor3us(void *_glfuncs, GLushort red, GLushort green, GLushort blue); -void gl1_5_glColor3uiv(void *_glfuncs, const GLuint* v); -void gl1_5_glColor3ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue); -void gl1_5_glColor3ubv(void *_glfuncs, const GLubyte* v); -void gl1_5_glColor3ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue); -void gl1_5_glColor3sv(void *_glfuncs, const GLshort* v); -void gl1_5_glColor3s(void *_glfuncs, GLshort red, GLshort green, GLshort blue); -void gl1_5_glColor3iv(void *_glfuncs, const GLint* v); -void gl1_5_glColor3i(void *_glfuncs, GLint red, GLint green, GLint blue); -void gl1_5_glColor3fv(void *_glfuncs, const GLfloat* v); -void gl1_5_glColor3f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue); -void gl1_5_glColor3dv(void *_glfuncs, const GLdouble* v); -void gl1_5_glColor3d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue); -void gl1_5_glColor3bv(void *_glfuncs, const GLbyte* v); -void gl1_5_glColor3b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue); -void gl1_5_glBitmap(void *_glfuncs, GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte* bitmap); -void gl1_5_glBegin(void *_glfuncs, GLenum mode); -void gl1_5_glListBase(void *_glfuncs, GLuint base); -GLuint gl1_5_glGenLists(void *_glfuncs, GLsizei range_); -void gl1_5_glDeleteLists(void *_glfuncs, GLuint list, GLsizei range_); -void gl1_5_glCallLists(void *_glfuncs, GLsizei n, GLenum gltype, const GLvoid* lists); -void gl1_5_glCallList(void *_glfuncs, GLuint list); -void gl1_5_glEndList(void *_glfuncs); -void gl1_5_glNewList(void *_glfuncs, GLuint list, GLenum mode); -void gl1_5_glPushClientAttrib(void *_glfuncs, GLbitfield mask); -void gl1_5_glPopClientAttrib(void *_glfuncs); -void gl1_5_glPrioritizeTextures(void *_glfuncs, GLsizei n, const GLuint* textures, const GLfloat* priorities); -GLboolean gl1_5_glAreTexturesResident(void *_glfuncs, GLsizei n, const GLuint* textures, GLboolean* residences); -void gl1_5_glVertexPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl1_5_glTexCoordPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl1_5_glNormalPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl1_5_glInterleavedArrays(void *_glfuncs, GLenum format, GLsizei stride, const GLvoid* pointer); -void gl1_5_glIndexPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl1_5_glEnableClientState(void *_glfuncs, GLenum array); -void gl1_5_glEdgeFlagPointer(void *_glfuncs, GLsizei stride, const GLvoid* pointer); -void gl1_5_glDisableClientState(void *_glfuncs, GLenum array); -void gl1_5_glColorPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl1_5_glArrayElement(void *_glfuncs, GLint i); -void gl1_5_glResetMinmax(void *_glfuncs, GLenum target); -void gl1_5_glResetHistogram(void *_glfuncs, GLenum target); -void gl1_5_glMinmax(void *_glfuncs, GLenum target, GLenum internalFormat, GLboolean sink); -void gl1_5_glHistogram(void *_glfuncs, GLenum target, GLsizei width, GLenum internalFormat, GLboolean sink); -void gl1_5_glGetMinmaxParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl1_5_glGetMinmaxParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl1_5_glGetMinmax(void *_glfuncs, GLenum target, GLboolean reset, GLenum format, GLenum gltype, GLvoid* values); -void gl1_5_glGetHistogramParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl1_5_glGetHistogramParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl1_5_glGetHistogram(void *_glfuncs, GLenum target, GLboolean reset, GLenum format, GLenum gltype, GLvoid* values); -void gl1_5_glSeparableFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* row, const GLvoid* column); -void gl1_5_glGetSeparableFilter(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* row, GLvoid* column, GLvoid* span); -void gl1_5_glGetConvolutionParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl1_5_glGetConvolutionParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl1_5_glGetConvolutionFilter(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* image); -void gl1_5_glCopyConvolutionFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height); -void gl1_5_glCopyConvolutionFilter1D(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width); -void gl1_5_glConvolutionParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl1_5_glConvolutionParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint params); -void gl1_5_glConvolutionParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params); -void gl1_5_glConvolutionParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat params); -void gl1_5_glConvolutionFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* image); -void gl1_5_glConvolutionFilter1D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum gltype, const GLvoid* image); -void gl1_5_glCopyColorSubTable(void *_glfuncs, GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); -void gl1_5_glColorSubTable(void *_glfuncs, GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum gltype, const GLvoid* data); -void gl1_5_glGetColorTableParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl1_5_glGetColorTableParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl1_5_glGetColorTable(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* table); -void gl1_5_glCopyColorTable(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width); -void gl1_5_glColorTableParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl1_5_glColorTableParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params); -void gl1_5_glColorTable(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum gltype, const GLvoid* table); -void gl1_5_glMultTransposeMatrixd(void *_glfuncs, const GLdouble* m); -void gl1_5_glMultTransposeMatrixf(void *_glfuncs, const GLfloat* m); -void gl1_5_glLoadTransposeMatrixd(void *_glfuncs, const GLdouble* m); -void gl1_5_glLoadTransposeMatrixf(void *_glfuncs, const GLfloat* m); -void gl1_5_glMultiTexCoord4sv(void *_glfuncs, GLenum target, const GLshort* v); -void gl1_5_glMultiTexCoord4s(void *_glfuncs, GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); -void gl1_5_glMultiTexCoord4iv(void *_glfuncs, GLenum target, const GLint* v); -void gl1_5_glMultiTexCoord4i(void *_glfuncs, GLenum target, GLint s, GLint t, GLint r, GLint q); -void gl1_5_glMultiTexCoord4fv(void *_glfuncs, GLenum target, const GLfloat* v); -void gl1_5_glMultiTexCoord4f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -void gl1_5_glMultiTexCoord4dv(void *_glfuncs, GLenum target, const GLdouble* v); -void gl1_5_glMultiTexCoord4d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -void gl1_5_glMultiTexCoord3sv(void *_glfuncs, GLenum target, const GLshort* v); -void gl1_5_glMultiTexCoord3s(void *_glfuncs, GLenum target, GLshort s, GLshort t, GLshort r); -void gl1_5_glMultiTexCoord3iv(void *_glfuncs, GLenum target, const GLint* v); -void gl1_5_glMultiTexCoord3i(void *_glfuncs, GLenum target, GLint s, GLint t, GLint r); -void gl1_5_glMultiTexCoord3fv(void *_glfuncs, GLenum target, const GLfloat* v); -void gl1_5_glMultiTexCoord3f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t, GLfloat r); -void gl1_5_glMultiTexCoord3dv(void *_glfuncs, GLenum target, const GLdouble* v); -void gl1_5_glMultiTexCoord3d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t, GLdouble r); -void gl1_5_glMultiTexCoord2sv(void *_glfuncs, GLenum target, const GLshort* v); -void gl1_5_glMultiTexCoord2s(void *_glfuncs, GLenum target, GLshort s, GLshort t); -void gl1_5_glMultiTexCoord2iv(void *_glfuncs, GLenum target, const GLint* v); -void gl1_5_glMultiTexCoord2i(void *_glfuncs, GLenum target, GLint s, GLint t); -void gl1_5_glMultiTexCoord2fv(void *_glfuncs, GLenum target, const GLfloat* v); -void gl1_5_glMultiTexCoord2f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t); -void gl1_5_glMultiTexCoord2dv(void *_glfuncs, GLenum target, const GLdouble* v); -void gl1_5_glMultiTexCoord2d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t); -void gl1_5_glMultiTexCoord1sv(void *_glfuncs, GLenum target, const GLshort* v); -void gl1_5_glMultiTexCoord1s(void *_glfuncs, GLenum target, GLshort s); -void gl1_5_glMultiTexCoord1iv(void *_glfuncs, GLenum target, const GLint* v); -void gl1_5_glMultiTexCoord1i(void *_glfuncs, GLenum target, GLint s); -void gl1_5_glMultiTexCoord1fv(void *_glfuncs, GLenum target, const GLfloat* v); -void gl1_5_glMultiTexCoord1f(void *_glfuncs, GLenum target, GLfloat s); -void gl1_5_glMultiTexCoord1dv(void *_glfuncs, GLenum target, const GLdouble* v); -void gl1_5_glMultiTexCoord1d(void *_glfuncs, GLenum target, GLdouble s); -void gl1_5_glClientActiveTexture(void *_glfuncs, GLenum texture); -void gl1_5_glWindowPos3sv(void *_glfuncs, const GLshort* v); -void gl1_5_glWindowPos3s(void *_glfuncs, GLshort x, GLshort y, GLshort z); -void gl1_5_glWindowPos3iv(void *_glfuncs, const GLint* v); -void gl1_5_glWindowPos3i(void *_glfuncs, GLint x, GLint y, GLint z); -void gl1_5_glWindowPos3fv(void *_glfuncs, const GLfloat* v); -void gl1_5_glWindowPos3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl1_5_glWindowPos3dv(void *_glfuncs, const GLdouble* v); -void gl1_5_glWindowPos3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl1_5_glWindowPos2sv(void *_glfuncs, const GLshort* v); -void gl1_5_glWindowPos2s(void *_glfuncs, GLshort x, GLshort y); -void gl1_5_glWindowPos2iv(void *_glfuncs, const GLint* v); -void gl1_5_glWindowPos2i(void *_glfuncs, GLint x, GLint y); -void gl1_5_glWindowPos2fv(void *_glfuncs, const GLfloat* v); -void gl1_5_glWindowPos2f(void *_glfuncs, GLfloat x, GLfloat y); -void gl1_5_glWindowPos2dv(void *_glfuncs, const GLdouble* v); -void gl1_5_glWindowPos2d(void *_glfuncs, GLdouble x, GLdouble y); -void gl1_5_glSecondaryColorPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl1_5_glSecondaryColor3usv(void *_glfuncs, const GLushort* v); -void gl1_5_glSecondaryColor3us(void *_glfuncs, GLushort red, GLushort green, GLushort blue); -void gl1_5_glSecondaryColor3uiv(void *_glfuncs, const GLuint* v); -void gl1_5_glSecondaryColor3ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue); -void gl1_5_glSecondaryColor3ubv(void *_glfuncs, const GLubyte* v); -void gl1_5_glSecondaryColor3ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue); -void gl1_5_glSecondaryColor3sv(void *_glfuncs, const GLshort* v); -void gl1_5_glSecondaryColor3s(void *_glfuncs, GLshort red, GLshort green, GLshort blue); -void gl1_5_glSecondaryColor3iv(void *_glfuncs, const GLint* v); -void gl1_5_glSecondaryColor3i(void *_glfuncs, GLint red, GLint green, GLint blue); -void gl1_5_glSecondaryColor3fv(void *_glfuncs, const GLfloat* v); -void gl1_5_glSecondaryColor3f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue); -void gl1_5_glSecondaryColor3dv(void *_glfuncs, const GLdouble* v); -void gl1_5_glSecondaryColor3d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue); -void gl1_5_glSecondaryColor3bv(void *_glfuncs, const GLbyte* v); -void gl1_5_glSecondaryColor3b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue); -void gl1_5_glFogCoordPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl1_5_glFogCoorddv(void *_glfuncs, const GLdouble* coord); -void gl1_5_glFogCoordd(void *_glfuncs, GLdouble coord); -void gl1_5_glFogCoordfv(void *_glfuncs, const GLfloat* coord); -void gl1_5_glFogCoordf(void *_glfuncs, GLfloat coord); - - -#ifdef __cplusplus -} // extern "C" -#endif diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/1.5/gl.go b/Godeps/_workspace/src/github.com/obscuren/qml/gl/1.5/gl.go deleted file mode 100644 index 463f66f403..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/1.5/gl.go +++ /dev/null @@ -1,4237 +0,0 @@ -// ** file automatically generated by glgen -- do not edit manually ** - -package GL - -// #cgo CXXFLAGS: -std=c++0x -pedantic-errors -Wall -fno-strict-aliasing -// #cgo LDFLAGS: -lstdc++ -// #cgo pkg-config: Qt5Core Qt5OpenGL -// -// #include "funcs.h" -// -// void free(void*); -// -import "C" - -import ( - "fmt" - "reflect" - "unsafe" - - "gopkg.in/qml.v1/gl/glbase" -) - -// API returns a value that offers methods matching the OpenGL version 1.5 API. -// -// The returned API must not be used after the provided OpenGL context becomes invalid. -func API(context glbase.Contexter) *GL { - gl := &GL{} - gl.funcs = C.gl1_5_funcs() - if gl.funcs == nil { - panic(fmt.Errorf("OpenGL version 1.5 is not available")) - } - return gl -} - -// GL implements the OpenGL version 1.5 API. Values of this -// type must be created via the API function, and it must not be used after -// the associated OpenGL context becomes invalid. -type GL struct { - funcs unsafe.Pointer -} - -const ( - FALSE = 0 - TRUE = 1 - NONE = 0 - - BYTE = 0x1400 - UNSIGNED_BYTE = 0x1401 - SHORT = 0x1402 - UNSIGNED_SHORT = 0x1403 - INT = 0x1404 - UNSIGNED_INT = 0x1405 - FLOAT = 0x1406 - N2_BYTES = 0x1407 - N3_BYTES = 0x1408 - N4_BYTES = 0x1409 - DOUBLE = 0x140A - - ACCUM = 0x0100 - LOAD = 0x0101 - RETURN = 0x0102 - MULT = 0x0103 - ADD = 0x0104 - - ACCUM_BUFFER_BIT = 0x00000200 - ALL_ATTRIB_BITS = 0xFFFFFFFF - COLOR_BUFFER_BIT = 0x00004000 - CURRENT_BIT = 0x00000001 - DEPTH_BUFFER_BIT = 0x00000100 - ENABLE_BIT = 0x00002000 - EVAL_BIT = 0x00010000 - FOG_BIT = 0x00000080 - HINT_BIT = 0x00008000 - LIGHTING_BIT = 0x00000040 - LINE_BIT = 0x00000004 - LIST_BIT = 0x00020000 - MULTISAMPLE_BIT = 0x20000000 - PIXEL_MODE_BIT = 0x00000020 - POINT_BIT = 0x00000002 - POLYGON_BIT = 0x00000008 - POLYGON_STIPPLE_BIT = 0x00000010 - SCISSOR_BIT = 0x00080000 - STENCIL_BUFFER_BIT = 0x00000400 - TEXTURE_BIT = 0x00040000 - TRANSFORM_BIT = 0x00001000 - VIEWPORT_BIT = 0x00000800 - - ALWAYS = 0x0207 - EQUAL = 0x0202 - GEQUAL = 0x0206 - GREATER = 0x0204 - LEQUAL = 0x0203 - LESS = 0x0201 - NEVER = 0x0200 - NOTEQUAL = 0x0205 - - LOGIC_OP = 0x0BF1 - - DST_ALPHA = 0x0304 - ONE = 1 - ONE_MINUS_DST_ALPHA = 0x0305 - ONE_MINUS_SRC_ALPHA = 0x0303 - ONE_MINUS_SRC_COLOR = 0x0301 - SRC_ALPHA = 0x0302 - SRC_COLOR = 0x0300 - ZERO = 0 - - DST_COLOR = 0x0306 - ONE_MINUS_DST_COLOR = 0x0307 - SRC_ALPHA_SATURATE = 0x0308 - - CLIENT_ALL_ATTRIB_BITS = 0xFFFFFFFF - CLIENT_PIXEL_STORE_BIT = 0x00000001 - CLIENT_VERTEX_ARRAY_BIT = 0x00000002 - - CLIP_PLANE0 = 0x3000 - CLIP_PLANE1 = 0x3001 - CLIP_PLANE2 = 0x3002 - CLIP_PLANE3 = 0x3003 - CLIP_PLANE4 = 0x3004 - CLIP_PLANE5 = 0x3005 - - BACK = 0x0405 - FRONT = 0x0404 - FRONT_AND_BACK = 0x0408 - - AMBIENT = 0x1200 - AMBIENT_AND_DIFFUSE = 0x1602 - DIFFUSE = 0x1201 - EMISSION = 0x1600 - SPECULAR = 0x1202 - - AUX0 = 0x0409 - AUX1 = 0x040A - AUX2 = 0x040B - AUX3 = 0x040C - BACK_LEFT = 0x0402 - BACK_RIGHT = 0x0403 - FRONT_LEFT = 0x0400 - FRONT_RIGHT = 0x0401 - LEFT = 0x0406 - RIGHT = 0x0407 - - ALPHA_TEST = 0x0BC0 - AUTO_NORMAL = 0x0D80 - BLEND = 0x0BE2 - COLOR_ARRAY = 0x8076 - COLOR_LOGIC_OP = 0x0BF2 - COLOR_MATERIAL = 0x0B57 - CULL_FACE = 0x0B44 - DEPTH_TEST = 0x0B71 - DITHER = 0x0BD0 - EDGE_FLAG_ARRAY = 0x8079 - FOG = 0x0B60 - INDEX_ARRAY = 0x8077 - INDEX_LOGIC_OP = 0x0BF1 - LIGHT0 = 0x4000 - LIGHT1 = 0x4001 - LIGHT2 = 0x4002 - LIGHT3 = 0x4003 - LIGHT4 = 0x4004 - LIGHT5 = 0x4005 - LIGHT6 = 0x4006 - LIGHT7 = 0x4007 - LIGHTING = 0x0B50 - LINE_SMOOTH = 0x0B20 - LINE_STIPPLE = 0x0B24 - MAP1_COLOR_4 = 0x0D90 - MAP1_INDEX = 0x0D91 - MAP1_NORMAL = 0x0D92 - MAP1_TEXTURE_COORD_1 = 0x0D93 - MAP1_TEXTURE_COORD_2 = 0x0D94 - MAP1_TEXTURE_COORD_3 = 0x0D95 - MAP1_TEXTURE_COORD_4 = 0x0D96 - MAP1_VERTEX_3 = 0x0D97 - MAP1_VERTEX_4 = 0x0D98 - MAP2_COLOR_4 = 0x0DB0 - MAP2_INDEX = 0x0DB1 - MAP2_NORMAL = 0x0DB2 - MAP2_TEXTURE_COORD_1 = 0x0DB3 - MAP2_TEXTURE_COORD_2 = 0x0DB4 - MAP2_TEXTURE_COORD_3 = 0x0DB5 - MAP2_TEXTURE_COORD_4 = 0x0DB6 - MAP2_VERTEX_3 = 0x0DB7 - MAP2_VERTEX_4 = 0x0DB8 - NORMALIZE = 0x0BA1 - NORMAL_ARRAY = 0x8075 - POINT_SMOOTH = 0x0B10 - POLYGON_OFFSET_FILL = 0x8037 - POLYGON_OFFSET_LINE = 0x2A02 - POLYGON_OFFSET_POINT = 0x2A01 - POLYGON_SMOOTH = 0x0B41 - POLYGON_STIPPLE = 0x0B42 - SCISSOR_TEST = 0x0C11 - STENCIL_TEST = 0x0B90 - TEXTURE_1D = 0x0DE0 - TEXTURE_2D = 0x0DE1 - TEXTURE_COORD_ARRAY = 0x8078 - TEXTURE_GEN_Q = 0x0C63 - TEXTURE_GEN_R = 0x0C62 - TEXTURE_GEN_S = 0x0C60 - TEXTURE_GEN_T = 0x0C61 - VERTEX_ARRAY = 0x8074 - - INVALID_ENUM = 0x0500 - INVALID_OPERATION = 0x0502 - INVALID_VALUE = 0x0501 - NO_ERROR = 0 - OUT_OF_MEMORY = 0x0505 - STACK_OVERFLOW = 0x0503 - STACK_UNDERFLOW = 0x0504 - - N2D = 0x0600 - N3D = 0x0601 - N3D_COLOR = 0x0602 - N3D_COLOR_TEXTURE = 0x0603 - N4D_COLOR_TEXTURE = 0x0604 - - BITMAP_TOKEN = 0x0704 - COPY_PIXEL_TOKEN = 0x0706 - DRAW_PIXEL_TOKEN = 0x0705 - LINE_RESET_TOKEN = 0x0707 - LINE_TOKEN = 0x0702 - PASS_THROUGH_TOKEN = 0x0700 - POINT_TOKEN = 0x0701 - POLYGON_TOKEN = 0x0703 - - EXP = 0x0800 - EXP2 = 0x0801 - LINEAR = 0x2601 - - FOG_COLOR = 0x0B66 - FOG_DENSITY = 0x0B62 - FOG_END = 0x0B64 - FOG_INDEX = 0x0B61 - FOG_MODE = 0x0B65 - FOG_START = 0x0B63 - - CCW = 0x0901 - CW = 0x0900 - - COEFF = 0x0A00 - DOMAIN = 0x0A02 - ORDER = 0x0A01 - - PIXEL_MAP_A_TO_A = 0x0C79 - PIXEL_MAP_B_TO_B = 0x0C78 - PIXEL_MAP_G_TO_G = 0x0C77 - PIXEL_MAP_I_TO_A = 0x0C75 - PIXEL_MAP_I_TO_B = 0x0C74 - PIXEL_MAP_I_TO_G = 0x0C73 - PIXEL_MAP_I_TO_I = 0x0C70 - PIXEL_MAP_I_TO_R = 0x0C72 - PIXEL_MAP_R_TO_R = 0x0C76 - PIXEL_MAP_S_TO_S = 0x0C71 - - ACCUM_ALPHA_BITS = 0x0D5B - ACCUM_BLUE_BITS = 0x0D5A - ACCUM_CLEAR_VALUE = 0x0B80 - ACCUM_GREEN_BITS = 0x0D59 - ACCUM_RED_BITS = 0x0D58 - ALIASED_LINE_WIDTH_RANGE = 0x846E - ALIASED_POINT_SIZE_RANGE = 0x846D - ALPHA_BIAS = 0x0D1D - ALPHA_BITS = 0x0D55 - ALPHA_SCALE = 0x0D1C - ALPHA_TEST_FUNC = 0x0BC1 - ALPHA_TEST_REF = 0x0BC2 - ATTRIB_STACK_DEPTH = 0x0BB0 - AUX_BUFFERS = 0x0C00 - BLEND_DST = 0x0BE0 - BLEND_SRC = 0x0BE1 - BLUE_BIAS = 0x0D1B - BLUE_BITS = 0x0D54 - BLUE_SCALE = 0x0D1A - CLIENT_ATTRIB_STACK_DEPTH = 0x0BB1 - COLOR_ARRAY_SIZE = 0x8081 - COLOR_ARRAY_STRIDE = 0x8083 - COLOR_ARRAY_TYPE = 0x8082 - COLOR_CLEAR_VALUE = 0x0C22 - COLOR_MATERIAL_FACE = 0x0B55 - COLOR_MATERIAL_PARAMETER = 0x0B56 - COLOR_WRITEMASK = 0x0C23 - CULL_FACE_MODE = 0x0B45 - CURRENT_COLOR = 0x0B00 - CURRENT_INDEX = 0x0B01 - CURRENT_NORMAL = 0x0B02 - CURRENT_RASTER_COLOR = 0x0B04 - CURRENT_RASTER_DISTANCE = 0x0B09 - CURRENT_RASTER_INDEX = 0x0B05 - CURRENT_RASTER_POSITION = 0x0B07 - CURRENT_RASTER_POSITION_VALID = 0x0B08 - CURRENT_RASTER_TEXTURE_COORDS = 0x0B06 - CURRENT_TEXTURE_COORDS = 0x0B03 - DEPTH_BIAS = 0x0D1F - DEPTH_BITS = 0x0D56 - DEPTH_CLEAR_VALUE = 0x0B73 - DEPTH_FUNC = 0x0B74 - DEPTH_RANGE = 0x0B70 - DEPTH_SCALE = 0x0D1E - DEPTH_WRITEMASK = 0x0B72 - DOUBLEBUFFER = 0x0C32 - DRAW_BUFFER = 0x0C01 - EDGE_FLAG = 0x0B43 - EDGE_FLAG_ARRAY_STRIDE = 0x808C - FEEDBACK_BUFFER_SIZE = 0x0DF1 - FEEDBACK_BUFFER_TYPE = 0x0DF2 - FOG_HINT = 0x0C54 - FRONT_FACE = 0x0B46 - GREEN_BIAS = 0x0D19 - GREEN_BITS = 0x0D53 - GREEN_SCALE = 0x0D18 - INDEX_ARRAY_STRIDE = 0x8086 - INDEX_ARRAY_TYPE = 0x8085 - INDEX_BITS = 0x0D51 - INDEX_CLEAR_VALUE = 0x0C20 - INDEX_MODE = 0x0C30 - INDEX_OFFSET = 0x0D13 - INDEX_SHIFT = 0x0D12 - INDEX_WRITEMASK = 0x0C21 - LIGHT_MODEL_AMBIENT = 0x0B53 - LIGHT_MODEL_COLOR_CONTROL = 0x81F8 - LIGHT_MODEL_LOCAL_VIEWER = 0x0B51 - LIGHT_MODEL_TWO_SIDE = 0x0B52 - LINE_SMOOTH_HINT = 0x0C52 - LINE_STIPPLE_PATTERN = 0x0B25 - LINE_STIPPLE_REPEAT = 0x0B26 - LINE_WIDTH = 0x0B21 - LINE_WIDTH_GRANULARITY = 0x0B23 - LINE_WIDTH_RANGE = 0x0B22 - LIST_BASE = 0x0B32 - LIST_INDEX = 0x0B33 - LIST_MODE = 0x0B30 - LOGIC_OP_MODE = 0x0BF0 - MAP1_GRID_DOMAIN = 0x0DD0 - MAP1_GRID_SEGMENTS = 0x0DD1 - MAP2_GRID_DOMAIN = 0x0DD2 - MAP2_GRID_SEGMENTS = 0x0DD3 - MAP_COLOR = 0x0D10 - MAP_STENCIL = 0x0D11 - MATRIX_MODE = 0x0BA0 - MAX_ATTRIB_STACK_DEPTH = 0x0D35 - MAX_CLIENT_ATTRIB_STACK_DEPTH = 0x0D3B - MAX_CLIP_PLANES = 0x0D32 - MAX_EVAL_ORDER = 0x0D30 - MAX_LIGHTS = 0x0D31 - MAX_LIST_NESTING = 0x0B31 - MAX_MODELVIEW_STACK_DEPTH = 0x0D36 - MAX_NAME_STACK_DEPTH = 0x0D37 - MAX_PIXEL_MAP_TABLE = 0x0D34 - MAX_PROJECTION_STACK_DEPTH = 0x0D38 - MAX_TEXTURE_SIZE = 0x0D33 - MAX_TEXTURE_STACK_DEPTH = 0x0D39 - MAX_VIEWPORT_DIMS = 0x0D3A - MODELVIEW_MATRIX = 0x0BA6 - MODELVIEW_STACK_DEPTH = 0x0BA3 - NAME_STACK_DEPTH = 0x0D70 - NORMAL_ARRAY_STRIDE = 0x807F - NORMAL_ARRAY_TYPE = 0x807E - PACK_ALIGNMENT = 0x0D05 - PACK_LSB_FIRST = 0x0D01 - PACK_ROW_LENGTH = 0x0D02 - PACK_SKIP_PIXELS = 0x0D04 - PACK_SKIP_ROWS = 0x0D03 - PACK_SWAP_BYTES = 0x0D00 - PERSPECTIVE_CORRECTION_HINT = 0x0C50 - PIXEL_MAP_A_TO_A_SIZE = 0x0CB9 - PIXEL_MAP_B_TO_B_SIZE = 0x0CB8 - PIXEL_MAP_G_TO_G_SIZE = 0x0CB7 - PIXEL_MAP_I_TO_A_SIZE = 0x0CB5 - PIXEL_MAP_I_TO_B_SIZE = 0x0CB4 - PIXEL_MAP_I_TO_G_SIZE = 0x0CB3 - PIXEL_MAP_I_TO_I_SIZE = 0x0CB0 - PIXEL_MAP_I_TO_R_SIZE = 0x0CB2 - PIXEL_MAP_R_TO_R_SIZE = 0x0CB6 - PIXEL_MAP_S_TO_S_SIZE = 0x0CB1 - POINT_SIZE = 0x0B11 - POINT_SIZE_GRANULARITY = 0x0B13 - POINT_SIZE_RANGE = 0x0B12 - POINT_SMOOTH_HINT = 0x0C51 - POLYGON_MODE = 0x0B40 - POLYGON_OFFSET_FACTOR = 0x8038 - POLYGON_OFFSET_UNITS = 0x2A00 - POLYGON_SMOOTH_HINT = 0x0C53 - PROJECTION_MATRIX = 0x0BA7 - PROJECTION_STACK_DEPTH = 0x0BA4 - READ_BUFFER = 0x0C02 - RED_BIAS = 0x0D15 - RED_BITS = 0x0D52 - RED_SCALE = 0x0D14 - RENDER_MODE = 0x0C40 - RGBA_MODE = 0x0C31 - SCISSOR_BOX = 0x0C10 - SELECTION_BUFFER_SIZE = 0x0DF4 - SHADE_MODEL = 0x0B54 - SMOOTH_LINE_WIDTH_GRANULARITY = 0x0B23 - SMOOTH_LINE_WIDTH_RANGE = 0x0B22 - SMOOTH_POINT_SIZE_GRANULARITY = 0x0B13 - SMOOTH_POINT_SIZE_RANGE = 0x0B12 - STENCIL_BITS = 0x0D57 - STENCIL_CLEAR_VALUE = 0x0B91 - STENCIL_FAIL = 0x0B94 - STENCIL_FUNC = 0x0B92 - STENCIL_PASS_DEPTH_FAIL = 0x0B95 - STENCIL_PASS_DEPTH_PASS = 0x0B96 - STENCIL_REF = 0x0B97 - STENCIL_VALUE_MASK = 0x0B93 - STENCIL_WRITEMASK = 0x0B98 - STEREO = 0x0C33 - SUBPIXEL_BITS = 0x0D50 - TEXTURE_BINDING_1D = 0x8068 - TEXTURE_BINDING_2D = 0x8069 - TEXTURE_BINDING_3D = 0x806A - TEXTURE_COORD_ARRAY_SIZE = 0x8088 - TEXTURE_COORD_ARRAY_STRIDE = 0x808A - TEXTURE_COORD_ARRAY_TYPE = 0x8089 - TEXTURE_MATRIX = 0x0BA8 - TEXTURE_STACK_DEPTH = 0x0BA5 - UNPACK_ALIGNMENT = 0x0CF5 - UNPACK_LSB_FIRST = 0x0CF1 - UNPACK_ROW_LENGTH = 0x0CF2 - UNPACK_SKIP_PIXELS = 0x0CF4 - UNPACK_SKIP_ROWS = 0x0CF3 - UNPACK_SWAP_BYTES = 0x0CF0 - VERTEX_ARRAY_SIZE = 0x807A - VERTEX_ARRAY_STRIDE = 0x807C - VERTEX_ARRAY_TYPE = 0x807B - VIEWPORT = 0x0BA2 - ZOOM_X = 0x0D16 - ZOOM_Y = 0x0D17 - - COLOR_ARRAY_POINTER = 0x8090 - EDGE_FLAG_ARRAY_POINTER = 0x8093 - FEEDBACK_BUFFER_POINTER = 0x0DF0 - INDEX_ARRAY_POINTER = 0x8091 - NORMAL_ARRAY_POINTER = 0x808F - SELECTION_BUFFER_POINTER = 0x0DF3 - TEXTURE_COORD_ARRAY_POINTER = 0x8092 - VERTEX_ARRAY_POINTER = 0x808E - - TEXTURE_ALPHA_SIZE = 0x805F - TEXTURE_BLUE_SIZE = 0x805E - TEXTURE_BORDER = 0x1005 - TEXTURE_BORDER_COLOR = 0x1004 - TEXTURE_COMPONENTS = 0x1003 - TEXTURE_GREEN_SIZE = 0x805D - TEXTURE_HEIGHT = 0x1001 - TEXTURE_INTENSITY_SIZE = 0x8061 - TEXTURE_INTERNAL_FORMAT = 0x1003 - TEXTURE_LUMINANCE_SIZE = 0x8060 - TEXTURE_MAG_FILTER = 0x2800 - TEXTURE_MIN_FILTER = 0x2801 - TEXTURE_PRIORITY = 0x8066 - TEXTURE_RED_SIZE = 0x805C - TEXTURE_RESIDENT = 0x8067 - TEXTURE_WIDTH = 0x1000 - TEXTURE_WRAP_S = 0x2802 - TEXTURE_WRAP_T = 0x2803 - - DONT_CARE = 0x1100 - FASTEST = 0x1101 - NICEST = 0x1102 - - GENERATE_MIPMAP_HINT = 0x8192 - TEXTURE_COMPRESSION_HINT = 0x84EF - - C3F_V3F = 0x2A24 - C4F_N3F_V3F = 0x2A26 - C4UB_V2F = 0x2A22 - C4UB_V3F = 0x2A23 - N3F_V3F = 0x2A25 - T2F_C3F_V3F = 0x2A2A - T2F_C4F_N3F_V3F = 0x2A2C - T2F_C4UB_V3F = 0x2A29 - T2F_N3F_V3F = 0x2A2B - T2F_V3F = 0x2A27 - T4F_C4F_N3F_V4F = 0x2A2D - T4F_V4F = 0x2A28 - V2F = 0x2A20 - V3F = 0x2A21 - - MODULATE = 0x2100 - REPLACE = 0x1E01 - - SEPARATE_SPECULAR_COLOR = 0x81FA - SINGLE_COLOR = 0x81F9 - - CONSTANT_ATTENUATION = 0x1207 - LINEAR_ATTENUATION = 0x1208 - POSITION = 0x1203 - QUADRATIC_ATTENUATION = 0x1209 - SPOT_CUTOFF = 0x1206 - SPOT_DIRECTION = 0x1204 - SPOT_EXPONENT = 0x1205 - - COMPILE = 0x1300 - COMPILE_AND_EXECUTE = 0x1301 - - AND = 0x1501 - AND_INVERTED = 0x1504 - AND_REVERSE = 0x1502 - CLEAR = 0x1500 - COPY = 0x1503 - COPY_INVERTED = 0x150C - EQUIV = 0x1509 - INVERT = 0x150A - NAND = 0x150E - NOOP = 0x1505 - NOR = 0x1508 - OR = 0x1507 - OR_INVERTED = 0x150D - OR_REVERSE = 0x150B - SET = 0x150F - XOR = 0x1506 - - COLOR_INDEXES = 0x1603 - SHININESS = 0x1601 - - MODELVIEW = 0x1700 - PROJECTION = 0x1701 - TEXTURE = 0x1702 - - LINE = 0x1B01 - POINT = 0x1B00 - - FILL = 0x1B02 - - COLOR = 0x1800 - DEPTH = 0x1801 - STENCIL = 0x1802 - - ALPHA = 0x1906 - BLUE = 0x1905 - COLOR_INDEX = 0x1900 - DEPTH_COMPONENT = 0x1902 - GREEN = 0x1904 - LUMINANCE = 0x1909 - LUMINANCE_ALPHA = 0x190A - RED = 0x1903 - RGB = 0x1907 - RGBA = 0x1908 - STENCIL_INDEX = 0x1901 - - ALPHA12 = 0x803D - ALPHA16 = 0x803E - ALPHA4 = 0x803B - ALPHA8 = 0x803C - INTENSITY = 0x8049 - INTENSITY12 = 0x804C - INTENSITY16 = 0x804D - INTENSITY4 = 0x804A - INTENSITY8 = 0x804B - LUMINANCE12 = 0x8041 - LUMINANCE12_ALPHA12 = 0x8047 - LUMINANCE12_ALPHA4 = 0x8046 - LUMINANCE16 = 0x8042 - LUMINANCE16_ALPHA16 = 0x8048 - LUMINANCE4 = 0x803F - LUMINANCE4_ALPHA4 = 0x8043 - LUMINANCE6_ALPHA2 = 0x8044 - LUMINANCE8 = 0x8040 - LUMINANCE8_ALPHA8 = 0x8045 - R3_G3_B2 = 0x2A10 - RGB10 = 0x8052 - RGB10_A2 = 0x8059 - RGB12 = 0x8053 - RGB16 = 0x8054 - RGB4 = 0x804F - RGB5 = 0x8050 - RGB5_A1 = 0x8057 - RGB8 = 0x8051 - RGBA12 = 0x805A - RGBA16 = 0x805B - RGBA2 = 0x8055 - RGBA4 = 0x8056 - RGBA8 = 0x8058 - - PACK_IMAGE_HEIGHT = 0x806C - PACK_SKIP_IMAGES = 0x806B - UNPACK_IMAGE_HEIGHT = 0x806E - UNPACK_SKIP_IMAGES = 0x806D - - BITMAP = 0x1A00 - UNSIGNED_BYTE_3_3_2 = 0x8032 - UNSIGNED_INT_10_10_10_2 = 0x8036 - UNSIGNED_INT_8_8_8_8 = 0x8035 - UNSIGNED_SHORT_4_4_4_4 = 0x8033 - UNSIGNED_SHORT_5_5_5_1 = 0x8034 - - POINT_DISTANCE_ATTENUATION = 0x8129 - POINT_FADE_THRESHOLD_SIZE = 0x8128 - POINT_SIZE_MAX = 0x8127 - POINT_SIZE_MIN = 0x8126 - - LINES = 0x0001 - LINE_LOOP = 0x0002 - LINE_STRIP = 0x0003 - POINTS = 0x0000 - POLYGON = 0x0009 - QUADS = 0x0007 - QUAD_STRIP = 0x0008 - TRIANGLES = 0x0004 - TRIANGLE_FAN = 0x0006 - TRIANGLE_STRIP = 0x0005 - - FEEDBACK = 0x1C01 - RENDER = 0x1C00 - SELECT = 0x1C02 - - FLAT = 0x1D00 - SMOOTH = 0x1D01 - - DECR = 0x1E03 - INCR = 0x1E02 - KEEP = 0x1E00 - - EXTENSIONS = 0x1F03 - RENDERER = 0x1F01 - VENDOR = 0x1F00 - VERSION = 0x1F02 - - S = 0x2000 - T = 0x2001 - R = 0x2002 - Q = 0x2003 - - DECAL = 0x2101 - - TEXTURE_ENV_COLOR = 0x2201 - TEXTURE_ENV_MODE = 0x2200 - - TEXTURE_ENV = 0x2300 - - EYE_LINEAR = 0x2400 - OBJECT_LINEAR = 0x2401 - SPHERE_MAP = 0x2402 - - EYE_PLANE = 0x2502 - OBJECT_PLANE = 0x2501 - TEXTURE_GEN_MODE = 0x2500 - - NEAREST = 0x2600 - - LINEAR_MIPMAP_LINEAR = 0x2703 - LINEAR_MIPMAP_NEAREST = 0x2701 - NEAREST_MIPMAP_LINEAR = 0x2702 - NEAREST_MIPMAP_NEAREST = 0x2700 - - GENERATE_MIPMAP = 0x8191 - TEXTURE_WRAP_R = 0x8072 - - PROXY_TEXTURE_1D = 0x8063 - PROXY_TEXTURE_2D = 0x8064 - PROXY_TEXTURE_3D = 0x8070 - TEXTURE_3D = 0x806F - TEXTURE_BASE_LEVEL = 0x813C - TEXTURE_MAX_LEVEL = 0x813D - TEXTURE_MAX_LOD = 0x813B - TEXTURE_MIN_LOD = 0x813A - - CLAMP = 0x2900 - CLAMP_TO_BORDER = 0x812D - CLAMP_TO_EDGE = 0x812F - REPEAT = 0x2901 - - CONSTANT_COLOR = 0x8001 - ONE_MINUS_CONSTANT_COLOR = 0x8002 - CONSTANT_ALPHA = 0x8003 - ONE_MINUS_CONSTANT_ALPHA = 0x8004 - FUNC_ADD = 0x8006 - MIN = 0x8007 - MAX = 0x8008 - FUNC_SUBTRACT = 0x800A - FUNC_REVERSE_SUBTRACT = 0x800B - RESCALE_NORMAL = 0x803A - TEXTURE_DEPTH = 0x8071 - MAX_3D_TEXTURE_SIZE = 0x8073 - MULTISAMPLE = 0x809D - SAMPLE_ALPHA_TO_COVERAGE = 0x809E - SAMPLE_ALPHA_TO_ONE = 0x809F - SAMPLE_COVERAGE = 0x80A0 - SAMPLE_BUFFERS = 0x80A8 - SAMPLES = 0x80A9 - SAMPLE_COVERAGE_VALUE = 0x80AA - SAMPLE_COVERAGE_INVERT = 0x80AB - BLEND_DST_RGB = 0x80C8 - BLEND_SRC_RGB = 0x80C9 - BLEND_DST_ALPHA = 0x80CA - BLEND_SRC_ALPHA = 0x80CB - BGR = 0x80E0 - BGRA = 0x80E1 - MAX_ELEMENTS_VERTICES = 0x80E8 - MAX_ELEMENTS_INDICES = 0x80E9 - DEPTH_COMPONENT16 = 0x81A5 - DEPTH_COMPONENT24 = 0x81A6 - DEPTH_COMPONENT32 = 0x81A7 - UNSIGNED_BYTE_2_3_3_REV = 0x8362 - UNSIGNED_SHORT_5_6_5 = 0x8363 - UNSIGNED_SHORT_5_6_5_REV = 0x8364 - UNSIGNED_SHORT_4_4_4_4_REV = 0x8365 - UNSIGNED_SHORT_1_5_5_5_REV = 0x8366 - UNSIGNED_INT_8_8_8_8_REV = 0x8367 - UNSIGNED_INT_2_10_10_10_REV = 0x8368 - MIRRORED_REPEAT = 0x8370 - FOG_COORDINATE_SOURCE = 0x8450 - FOG_COORD_SRC = 0x8450 - FOG_COORDINATE = 0x8451 - FOG_COORD = 0x8451 - FRAGMENT_DEPTH = 0x8452 - CURRENT_FOG_COORDINATE = 0x8453 - CURRENT_FOG_COORD = 0x8453 - FOG_COORDINATE_ARRAY_TYPE = 0x8454 - FOG_COORD_ARRAY_TYPE = 0x8454 - FOG_COORDINATE_ARRAY_STRIDE = 0x8455 - FOG_COORD_ARRAY_STRIDE = 0x8455 - FOG_COORDINATE_ARRAY_POINTER = 0x8456 - FOG_COORD_ARRAY_POINTER = 0x8456 - FOG_COORDINATE_ARRAY = 0x8457 - FOG_COORD_ARRAY = 0x8457 - COLOR_SUM = 0x8458 - CURRENT_SECONDARY_COLOR = 0x8459 - SECONDARY_COLOR_ARRAY_SIZE = 0x845A - SECONDARY_COLOR_ARRAY_TYPE = 0x845B - SECONDARY_COLOR_ARRAY_STRIDE = 0x845C - SECONDARY_COLOR_ARRAY_POINTER = 0x845D - SECONDARY_COLOR_ARRAY = 0x845E - TEXTURE0 = 0x84C0 - TEXTURE1 = 0x84C1 - TEXTURE2 = 0x84C2 - TEXTURE3 = 0x84C3 - TEXTURE4 = 0x84C4 - TEXTURE5 = 0x84C5 - TEXTURE6 = 0x84C6 - TEXTURE7 = 0x84C7 - TEXTURE8 = 0x84C8 - TEXTURE9 = 0x84C9 - TEXTURE10 = 0x84CA - TEXTURE11 = 0x84CB - TEXTURE12 = 0x84CC - TEXTURE13 = 0x84CD - TEXTURE14 = 0x84CE - TEXTURE15 = 0x84CF - TEXTURE16 = 0x84D0 - TEXTURE17 = 0x84D1 - TEXTURE18 = 0x84D2 - TEXTURE19 = 0x84D3 - TEXTURE20 = 0x84D4 - TEXTURE21 = 0x84D5 - TEXTURE22 = 0x84D6 - TEXTURE23 = 0x84D7 - TEXTURE24 = 0x84D8 - TEXTURE25 = 0x84D9 - TEXTURE26 = 0x84DA - TEXTURE27 = 0x84DB - TEXTURE28 = 0x84DC - TEXTURE29 = 0x84DD - TEXTURE30 = 0x84DE - TEXTURE31 = 0x84DF - ACTIVE_TEXTURE = 0x84E0 - CLIENT_ACTIVE_TEXTURE = 0x84E1 - MAX_TEXTURE_UNITS = 0x84E2 - TRANSPOSE_MODELVIEW_MATRIX = 0x84E3 - TRANSPOSE_PROJECTION_MATRIX = 0x84E4 - TRANSPOSE_TEXTURE_MATRIX = 0x84E5 - TRANSPOSE_COLOR_MATRIX = 0x84E6 - SUBTRACT = 0x84E7 - COMPRESSED_ALPHA = 0x84E9 - COMPRESSED_LUMINANCE = 0x84EA - COMPRESSED_LUMINANCE_ALPHA = 0x84EB - COMPRESSED_INTENSITY = 0x84EC - COMPRESSED_RGB = 0x84ED - COMPRESSED_RGBA = 0x84EE - MAX_TEXTURE_LOD_BIAS = 0x84FD - TEXTURE_FILTER_CONTROL = 0x8500 - TEXTURE_LOD_BIAS = 0x8501 - INCR_WRAP = 0x8507 - DECR_WRAP = 0x8508 - NORMAL_MAP = 0x8511 - REFLECTION_MAP = 0x8512 - TEXTURE_CUBE_MAP = 0x8513 - TEXTURE_BINDING_CUBE_MAP = 0x8514 - TEXTURE_CUBE_MAP_POSITIVE_X = 0x8515 - TEXTURE_CUBE_MAP_NEGATIVE_X = 0x8516 - TEXTURE_CUBE_MAP_POSITIVE_Y = 0x8517 - TEXTURE_CUBE_MAP_NEGATIVE_Y = 0x8518 - TEXTURE_CUBE_MAP_POSITIVE_Z = 0x8519 - TEXTURE_CUBE_MAP_NEGATIVE_Z = 0x851A - PROXY_TEXTURE_CUBE_MAP = 0x851B - MAX_CUBE_MAP_TEXTURE_SIZE = 0x851C - COMBINE = 0x8570 - COMBINE_RGB = 0x8571 - COMBINE_ALPHA = 0x8572 - RGB_SCALE = 0x8573 - ADD_SIGNED = 0x8574 - INTERPOLATE = 0x8575 - CONSTANT = 0x8576 - PRIMARY_COLOR = 0x8577 - PREVIOUS = 0x8578 - SOURCE0_RGB = 0x8580 - SRC0_RGB = 0x8580 - SOURCE1_RGB = 0x8581 - SRC1_RGB = 0x8581 - SOURCE2_RGB = 0x8582 - SRC2_RGB = 0x8582 - SOURCE0_ALPHA = 0x8588 - SRC0_ALPHA = 0x8588 - SOURCE1_ALPHA = 0x8589 - SRC1_ALPHA = 0x8589 - SOURCE2_ALPHA = 0x858A - SRC2_ALPHA = 0x858A - OPERAND0_RGB = 0x8590 - OPERAND1_RGB = 0x8591 - OPERAND2_RGB = 0x8592 - OPERAND0_ALPHA = 0x8598 - OPERAND1_ALPHA = 0x8599 - OPERAND2_ALPHA = 0x859A - TEXTURE_COMPRESSED_IMAGE_SIZE = 0x86A0 - TEXTURE_COMPRESSED = 0x86A1 - NUM_COMPRESSED_TEXTURE_FORMATS = 0x86A2 - COMPRESSED_TEXTURE_FORMATS = 0x86A3 - DOT3_RGB = 0x86AE - DOT3_RGBA = 0x86AF - BUFFER_SIZE = 0x8764 - BUFFER_USAGE = 0x8765 - TEXTURE_DEPTH_SIZE = 0x884A - DEPTH_TEXTURE_MODE = 0x884B - TEXTURE_COMPARE_MODE = 0x884C - TEXTURE_COMPARE_FUNC = 0x884D - COMPARE_R_TO_TEXTURE = 0x884E - QUERY_COUNTER_BITS = 0x8864 - CURRENT_QUERY = 0x8865 - QUERY_RESULT = 0x8866 - QUERY_RESULT_AVAILABLE = 0x8867 - ARRAY_BUFFER = 0x8892 - ELEMENT_ARRAY_BUFFER = 0x8893 - ARRAY_BUFFER_BINDING = 0x8894 - ELEMENT_ARRAY_BUFFER_BINDING = 0x8895 - VERTEX_ARRAY_BUFFER_BINDING = 0x8896 - NORMAL_ARRAY_BUFFER_BINDING = 0x8897 - COLOR_ARRAY_BUFFER_BINDING = 0x8898 - INDEX_ARRAY_BUFFER_BINDING = 0x8899 - TEXTURE_COORD_ARRAY_BUFFER_BINDING = 0x889A - EDGE_FLAG_ARRAY_BUFFER_BINDING = 0x889B - SECONDARY_COLOR_ARRAY_BUFFER_BINDING = 0x889C - FOG_COORDINATE_ARRAY_BUFFER_BINDING = 0x889D - FOG_COORD_ARRAY_BUFFER_BINDING = 0x889D - WEIGHT_ARRAY_BUFFER_BINDING = 0x889E - VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = 0x889F - READ_ONLY = 0x88B8 - WRITE_ONLY = 0x88B9 - READ_WRITE = 0x88BA - BUFFER_ACCESS = 0x88BB - BUFFER_MAPPED = 0x88BC - BUFFER_MAP_POINTER = 0x88BD - STREAM_DRAW = 0x88E0 - STREAM_READ = 0x88E1 - STREAM_COPY = 0x88E2 - STATIC_DRAW = 0x88E4 - STATIC_READ = 0x88E5 - STATIC_COPY = 0x88E6 - DYNAMIC_DRAW = 0x88E8 - DYNAMIC_READ = 0x88E9 - DYNAMIC_COPY = 0x88EA - SAMPLES_PASSED = 0x8914 -) - -// https://www.opengl.org/sdk/docs/man2/xhtml/glViewport.xml -func (gl *GL) Viewport(x, y, width, height int) { - C.gl1_5_glViewport(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// DepthRange specifies the mapping of depth values from normalized device -// coordinates to window coordinates. -// -// Parameter nearVal specifies the mapping of the near clipping plane to window -// coordinates (defaults to 0), while farVal specifies the mapping of the far -// clipping plane to window coordinates (defaults to 1). -// -// After clipping and division by w, depth coordinates range from -1 to 1, -// corresponding to the near and far clipping planes. DepthRange specifies a -// linear mapping of the normalized depth coordinates in this range to window -// depth coordinates. Regardless of the actual depth buffer implementation, -// window coordinate depth values are treated as though they range from 0 through 1 -// (like color components). Thus, the values accepted by DepthRange are both -// clamped to this range before they are accepted. -// -// The default setting of (0, 1) maps the near plane to 0 and the far plane to 1. -// With this mapping, the depth buffer range is fully utilized. -// -// It is not necessary that nearVal be less than farVal. Reverse mappings such as -// nearVal 1, and farVal 0 are acceptable. -// -// GL.INVALID_OPERATION is generated if DepthRange is executed between the -// execution of Begin and the corresponding execution of End. -func (gl *GL) DepthRange(nearVal, farVal float64) { - C.gl1_5_glDepthRange(gl.funcs, C.GLdouble(nearVal), C.GLdouble(farVal)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIsEnabled.xml -func (gl *GL) IsEnabled(cap glbase.Enum) bool { - glresult := C.gl1_5_glIsEnabled(gl.funcs, C.GLenum(cap)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexLevelParameteriv.xml -func (gl *GL) GetTexLevelParameteriv(target glbase.Enum, level int, pname glbase.Enum, params []int32) { - C.gl1_5_glGetTexLevelParameteriv(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexLevelParameterfv.xml -func (gl *GL) GetTexLevelParameterfv(target glbase.Enum, level int, pname glbase.Enum, params []float32) { - C.gl1_5_glGetTexLevelParameterfv(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexParameteriv.xml -func (gl *GL) GetTexParameteriv(target, pname glbase.Enum, params []int32) { - C.gl1_5_glGetTexParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexParameterfv.xml -func (gl *GL) GetTexParameterfv(target, pname glbase.Enum, params []float32) { - C.gl1_5_glGetTexParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexImage.xml -func (gl *GL) GetTexImage(target glbase.Enum, level int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl1_5_glGetTexImage(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetIntegerv.xml -func (gl *GL) GetIntegerv(pname glbase.Enum, params []int32) { - C.gl1_5_glGetIntegerv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetFloatv.xml -func (gl *GL) GetFloatv(pname glbase.Enum, params []float32) { - C.gl1_5_glGetFloatv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetError.xml -func (gl *GL) GetError() glbase.Enum { - glresult := C.gl1_5_glGetError(gl.funcs) - return glbase.Enum(glresult) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetDoublev.xml -func (gl *GL) GetDoublev(pname glbase.Enum, params []float64) { - C.gl1_5_glGetDoublev(gl.funcs, C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetBooleanv.xml -func (gl *GL) GetBooleanv(pname glbase.Enum, params []bool) { - C.gl1_5_glGetBooleanv(gl.funcs, C.GLenum(pname), (*C.GLboolean)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glReadPixels.xml -func (gl *GL) ReadPixels(x, y, width, height int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl1_5_glReadPixels(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glReadBuffer.xml -func (gl *GL) ReadBuffer(mode glbase.Enum) { - C.gl1_5_glReadBuffer(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPixelStorei.xml -func (gl *GL) PixelStorei(pname glbase.Enum, param int32) { - C.gl1_5_glPixelStorei(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPixelStoref.xml -func (gl *GL) PixelStoref(pname glbase.Enum, param float32) { - C.gl1_5_glPixelStoref(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDepthFunc.xml -func (gl *GL) DepthFunc(glfunc glbase.Enum) { - C.gl1_5_glDepthFunc(gl.funcs, C.GLenum(glfunc)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glStencilOp.xml -func (gl *GL) StencilOp(fail, zfail, zpass glbase.Enum) { - C.gl1_5_glStencilOp(gl.funcs, C.GLenum(fail), C.GLenum(zfail), C.GLenum(zpass)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glStencilFunc.xml -func (gl *GL) StencilFunc(glfunc glbase.Enum, ref int32, mask uint32) { - C.gl1_5_glStencilFunc(gl.funcs, C.GLenum(glfunc), C.GLint(ref), C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLogicOp.xml -func (gl *GL) LogicOp(opcode glbase.Enum) { - C.gl1_5_glLogicOp(gl.funcs, C.GLenum(opcode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glBlendFunc.xml -func (gl *GL) BlendFunc(sfactor, dfactor glbase.Enum) { - C.gl1_5_glBlendFunc(gl.funcs, C.GLenum(sfactor), C.GLenum(dfactor)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFlush.xml -func (gl *GL) Flush() { - C.gl1_5_glFlush(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFinish.xml -func (gl *GL) Finish() { - C.gl1_5_glFinish(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEnable.xml -func (gl *GL) Enable(cap glbase.Enum) { - C.gl1_5_glEnable(gl.funcs, C.GLenum(cap)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDisable.xml -func (gl *GL) Disable(cap glbase.Enum) { - C.gl1_5_glDisable(gl.funcs, C.GLenum(cap)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDepthMask.xml -func (gl *GL) DepthMask(flag bool) { - C.gl1_5_glDepthMask(gl.funcs, *(*C.GLboolean)(unsafe.Pointer(&flag))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColorMask.xml -func (gl *GL) ColorMask(red, green, blue, alpha bool) { - C.gl1_5_glColorMask(gl.funcs, *(*C.GLboolean)(unsafe.Pointer(&red)), *(*C.GLboolean)(unsafe.Pointer(&green)), *(*C.GLboolean)(unsafe.Pointer(&blue)), *(*C.GLboolean)(unsafe.Pointer(&alpha))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glStencilMask.xml -func (gl *GL) StencilMask(mask uint32) { - C.gl1_5_glStencilMask(gl.funcs, C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glClearDepth.xml -func (gl *GL) ClearDepth(depth float64) { - C.gl1_5_glClearDepth(gl.funcs, C.GLdouble(depth)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glClearStencil.xml -func (gl *GL) ClearStencil(s int32) { - C.gl1_5_glClearStencil(gl.funcs, C.GLint(s)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glClearColor.xml -func (gl *GL) ClearColor(red, green, blue, alpha float32) { - C.gl1_5_glClearColor(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glClear.xml -func (gl *GL) Clear(mask glbase.Bitfield) { - C.gl1_5_glClear(gl.funcs, C.GLbitfield(mask)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDrawBuffer.xml -func (gl *GL) DrawBuffer(mode glbase.Enum) { - C.gl1_5_glDrawBuffer(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexImage2D.xml -func (gl *GL) TexImage2D(target glbase.Enum, level int, internalFormat int32, width, height, border int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl1_5_glTexImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLint(border), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexImage1D.xml -func (gl *GL) TexImage1D(target glbase.Enum, level int, internalFormat int32, width, border int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl1_5_glTexImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(internalFormat), C.GLsizei(width), C.GLint(border), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexParameteriv.xml -func (gl *GL) TexParameteriv(target, pname glbase.Enum, params []int32) { - C.gl1_5_glTexParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexParameteri.xml -func (gl *GL) TexParameteri(target, pname glbase.Enum, param int32) { - C.gl1_5_glTexParameteri(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexParameterfv.xml -func (gl *GL) TexParameterfv(target, pname glbase.Enum, params []float32) { - C.gl1_5_glTexParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexParameterf.xml -func (gl *GL) TexParameterf(target, pname glbase.Enum, param float32) { - C.gl1_5_glTexParameterf(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glScissor.xml -func (gl *GL) Scissor(x, y, width, height int) { - C.gl1_5_glScissor(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPolygonMode.xml -func (gl *GL) PolygonMode(face, mode glbase.Enum) { - C.gl1_5_glPolygonMode(gl.funcs, C.GLenum(face), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPointSize.xml -func (gl *GL) PointSize(size float32) { - C.gl1_5_glPointSize(gl.funcs, C.GLfloat(size)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLineWidth.xml -func (gl *GL) LineWidth(width float32) { - C.gl1_5_glLineWidth(gl.funcs, C.GLfloat(width)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glHint.xml -func (gl *GL) Hint(target, mode glbase.Enum) { - C.gl1_5_glHint(gl.funcs, C.GLenum(target), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFrontFace.xml -func (gl *GL) FrontFace(mode glbase.Enum) { - C.gl1_5_glFrontFace(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCullFace.xml -func (gl *GL) CullFace(mode glbase.Enum) { - C.gl1_5_glCullFace(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexubv.xml -func (gl *GL) Indexubv(c []uint8) { - C.gl1_5_glIndexubv(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexub.xml -func (gl *GL) Indexub(c uint8) { - C.gl1_5_glIndexub(gl.funcs, C.GLubyte(c)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIsTexture.xml -func (gl *GL) IsTexture(texture glbase.Texture) bool { - glresult := C.gl1_5_glIsTexture(gl.funcs, C.GLuint(texture)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// GenTextures returns n texture names in textures. There is no guarantee -// that the names form a contiguous set of integers; however, it is -// guaranteed that none of the returned names was in use immediately before -// the call to GenTextures. -// -// The generated textures have no dimensionality; they assume the -// dimensionality of the texture target to which they are first bound (see -// BindTexture). -// -// Texture names returned by a call to GenTextures are not returned by -// subsequent calls, unless they are first deleted with DeleteTextures. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// GenTextures is available in GL version 2.0 or greater. -func (gl *GL) GenTextures(n int) []glbase.Texture { - if n == 0 { - return nil - } - textures := make([]glbase.Texture, n) - C.gl1_5_glGenTextures(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0]))) - return textures -} - -// DeleteTextures deletes the textures objects whose names are stored -// in the textures slice. After a texture is deleted, it has no contents or -// dimensionality, and its name is free for reuse (for example by -// GenTextures). If a texture that is currently bound is deleted, the binding -// reverts to 0 (the default texture). -// -// DeleteTextures silently ignores 0's and names that do not correspond to -// existing textures. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// DeleteTextures is available in GL version 2.0 or greater. -func (gl *GL) DeleteTextures(textures []glbase.Texture) { - n := len(textures) - if n == 0 { - return - } - C.gl1_5_glDeleteTextures(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glBindTexture.xml -func (gl *GL) BindTexture(target glbase.Enum, texture glbase.Texture) { - C.gl1_5_glBindTexture(gl.funcs, C.GLenum(target), C.GLuint(texture)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexSubImage2D.xml -func (gl *GL) TexSubImage2D(target glbase.Enum, level, xoffset, yoffset, width, height int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl1_5_glTexSubImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexSubImage1D.xml -func (gl *GL) TexSubImage1D(target glbase.Enum, level, xoffset, width int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl1_5_glTexSubImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLsizei(width), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyTexSubImage2D.xml -func (gl *GL) CopyTexSubImage2D(target glbase.Enum, level, xoffset, yoffset, x, y, width, height int) { - C.gl1_5_glCopyTexSubImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyTexSubImage1D.xml -func (gl *GL) CopyTexSubImage1D(target glbase.Enum, level, xoffset, x, y, width int) { - C.gl1_5_glCopyTexSubImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(x), C.GLint(y), C.GLsizei(width)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyTexImage2D.xml -func (gl *GL) CopyTexImage2D(target glbase.Enum, level int, internalFormat glbase.Enum, x, y, width, height, border int) { - C.gl1_5_glCopyTexImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height), C.GLint(border)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyTexImage1D.xml -func (gl *GL) CopyTexImage1D(target glbase.Enum, level int, internalFormat glbase.Enum, x, y, width, border int) { - C.gl1_5_glCopyTexImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLint(border)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPolygonOffset.xml -func (gl *GL) PolygonOffset(factor, units float32) { - C.gl1_5_glPolygonOffset(gl.funcs, C.GLfloat(factor), C.GLfloat(units)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDrawElements.xml -func (gl *GL) DrawElements(mode glbase.Enum, count int, gltype glbase.Enum, indices interface{}) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl1_5_glDrawElements(gl.funcs, C.GLenum(mode), C.GLsizei(count), C.GLenum(gltype), indices_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDrawArrays.xml -func (gl *GL) DrawArrays(mode glbase.Enum, first, count int) { - C.gl1_5_glDrawArrays(gl.funcs, C.GLenum(mode), C.GLint(first), C.GLsizei(count)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyTexSubImage3D.xml -func (gl *GL) CopyTexSubImage3D(target glbase.Enum, level, xoffset, yoffset int, zoffset int32, x, y, width, height int) { - C.gl1_5_glCopyTexSubImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(zoffset), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexSubImage3D.xml -func (gl *GL) TexSubImage3D(target glbase.Enum, level, xoffset, yoffset int, zoffset int32, width, height int, depth int32, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl1_5_glTexSubImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(zoffset), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexImage3D.xml -func (gl *GL) TexImage3D(target glbase.Enum, level int, internalFormat int32, width, height int, depth int32, border int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl1_5_glTexImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLint(border), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDrawRangeElements.xml -func (gl *GL) DrawRangeElements(mode glbase.Enum, start, end uint32, count int, gltype glbase.Enum, indices interface{}) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl1_5_glDrawRangeElements(gl.funcs, C.GLenum(mode), C.GLuint(start), C.GLuint(end), C.GLsizei(count), C.GLenum(gltype), indices_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glBlendEquation.xml -func (gl *GL) BlendEquation(mode glbase.Enum) { - C.gl1_5_glBlendEquation(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glBlendColor.xml -func (gl *GL) BlendColor(red, green, blue, alpha float32) { - C.gl1_5_glBlendColor(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetCompressedTexImage.xml -func (gl *GL) GetCompressedTexImage(target glbase.Enum, level int, img interface{}) { - var img_ptr unsafe.Pointer - var img_v = reflect.ValueOf(img) - if img != nil && img_v.Kind() != reflect.Slice { - panic("parameter img must be a slice") - } - if img != nil { - img_ptr = unsafe.Pointer(img_v.Index(0).Addr().Pointer()) - } - C.gl1_5_glGetCompressedTexImage(gl.funcs, C.GLenum(target), C.GLint(level), img_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCompressedTexSubImage1D.xml -func (gl *GL) CompressedTexSubImage1D(target glbase.Enum, level, xoffset, width int, format glbase.Enum, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl1_5_glCompressedTexSubImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLsizei(width), C.GLenum(format), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCompressedTexSubImage2D.xml -func (gl *GL) CompressedTexSubImage2D(target glbase.Enum, level, xoffset, yoffset, width, height int, format glbase.Enum, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl1_5_glCompressedTexSubImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCompressedTexSubImage3D.xml -func (gl *GL) CompressedTexSubImage3D(target glbase.Enum, level, xoffset, yoffset int, zoffset int32, width, height int, depth int32, format glbase.Enum, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl1_5_glCompressedTexSubImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(zoffset), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLenum(format), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCompressedTexImage1D.xml -func (gl *GL) CompressedTexImage1D(target glbase.Enum, level int, internalFormat glbase.Enum, width, border, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl1_5_glCompressedTexImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLsizei(width), C.GLint(border), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCompressedTexImage2D.xml -func (gl *GL) CompressedTexImage2D(target glbase.Enum, level int, internalFormat glbase.Enum, width, height, border, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl1_5_glCompressedTexImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLint(border), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCompressedTexImage3D.xml -func (gl *GL) CompressedTexImage3D(target glbase.Enum, level int, internalFormat glbase.Enum, width, height int, depth int32, border, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl1_5_glCompressedTexImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLint(border), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSampleCoverage.xml -func (gl *GL) SampleCoverage(value float32, invert bool) { - C.gl1_5_glSampleCoverage(gl.funcs, C.GLfloat(value), *(*C.GLboolean)(unsafe.Pointer(&invert))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glActiveTexture.xml -func (gl *GL) ActiveTexture(texture glbase.Enum) { - C.gl1_5_glActiveTexture(gl.funcs, C.GLenum(texture)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPointParameteriv.xml -func (gl *GL) PointParameteriv(pname glbase.Enum, params []int32) { - C.gl1_5_glPointParameteriv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPointParameteri.xml -func (gl *GL) PointParameteri(pname glbase.Enum, param int32) { - C.gl1_5_glPointParameteri(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPointParameterfv.xml -func (gl *GL) PointParameterfv(pname glbase.Enum, params []float32) { - C.gl1_5_glPointParameterfv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPointParameterf.xml -func (gl *GL) PointParameterf(pname glbase.Enum, param float32) { - C.gl1_5_glPointParameterf(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiDrawArrays.xml -func (gl *GL) MultiDrawArrays(mode glbase.Enum, first, count []int, drawcount int32) { - C.gl1_5_glMultiDrawArrays(gl.funcs, C.GLenum(mode), (*C.GLint)(unsafe.Pointer(&first[0])), (*C.GLsizei)(unsafe.Pointer(&count[0])), C.GLsizei(drawcount)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glBlendFuncSeparate.xml -func (gl *GL) BlendFuncSeparate(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha glbase.Enum) { - C.gl1_5_glBlendFuncSeparate(gl.funcs, C.GLenum(sfactorRGB), C.GLenum(dfactorRGB), C.GLenum(sfactorAlpha), C.GLenum(dfactorAlpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetBufferParameteriv.xml -func (gl *GL) GetBufferParameteriv(target, pname glbase.Enum, params []int32) { - C.gl1_5_glGetBufferParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glUnmapBuffer.xml -func (gl *GL) UnmapBuffer(target glbase.Enum) bool { - glresult := C.gl1_5_glUnmapBuffer(gl.funcs, C.GLenum(target)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetBufferSubData.xml -func (gl *GL) GetBufferSubData(target glbase.Enum, offset, size int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl1_5_glGetBufferSubData(gl.funcs, C.GLenum(target), C.GLintptr(offset), C.GLsizeiptr(size), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glBufferSubData.xml -func (gl *GL) BufferSubData(target glbase.Enum, offset, size int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl1_5_glBufferSubData(gl.funcs, C.GLenum(target), C.GLintptr(offset), C.GLsizeiptr(size), data_ptr) -} - -// BufferData creates a new data store for the buffer object currently -// bound to target. Any pre-existing data store is deleted. The new data -// store is created with the specified size in bytes and usage. If data is -// not nil, it must be a slice that is used to initialize the data store. -// In that case the size parameter is ignored and the store size will match -// the slice data size. -// -// In its initial state, the new data store is not mapped, it has a NULL -// mapped pointer, and its mapped access is GL.READ_WRITE. -// -// The target constant must be one of GL.ARRAY_BUFFER, GL.COPY_READ_BUFFER, -// GL.COPY_WRITE_BUFFER, GL.ELEMENT_ARRAY_BUFFER, GL.PIXEL_PACK_BUFFER, -// GL.PIXEL_UNPACK_BUFFER, GL.TEXTURE_BUFFER, GL.TRANSFORM_FEEDBACK_BUFFER, -// or GL.UNIFORM_BUFFER. -// -// The usage parameter is a hint to the GL implementation as to how a buffer -// object's data store will be accessed. This enables the GL implementation -// to make more intelligent decisions that may significantly impact buffer -// object performance. It does not, however, constrain the actual usage of -// the data store. usage can be broken down into two parts: first, the -// frequency of access (modification and usage), and second, the nature of -// that access. -// -// A usage frequency of STREAM and nature of DRAW is specified via the -// constant GL.STREAM_DRAW, for example. -// -// The usage frequency of access may be one of: -// -// STREAM -// The data store contents will be modified once and used at most a few times. -// -// STATIC -// The data store contents will be modified once and used many times. -// -// DYNAMIC -// The data store contents will be modified repeatedly and used many times. -// -// The usage nature of access may be one of: -// -// DRAW -// The data store contents are modified by the application, and used as -// the source for GL drawing and image specification commands. -// -// READ -// The data store contents are modified by reading data from the GL, -// and used to return that data when queried by the application. -// -// COPY -// The data store contents are modified by reading data from the GL, -// and used as the source for GL drawing and image specification -// commands. -// -// Clients must align data elements consistent with the requirements of the -// client platform, with an additional base-level requirement that an offset -// within a buffer to a datum comprising N bytes be a multiple of N. -// -// Error GL.INVALID_ENUM is generated if target is not one of the accepted -// buffer targets. GL.INVALID_ENUM is generated if usage is not -// GL.STREAM_DRAW, GL.STREAM_READ, GL.STREAM_COPY, GL.STATIC_DRAW, -// GL.STATIC_READ, GL.STATIC_COPY, GL.DYNAMIC_DRAW, GL.DYNAMIC_READ, or -// GL.DYNAMIC_COPY. GL.INVALID_VALUE is generated if size is negative. -// GL.INVALID_OPERATION is generated if the reserved buffer object name 0 is -// bound to target. GL.OUT_OF_MEMORY is generated if the GL is unable to -// create a data store with the specified size. -func (gl *GL) BufferData(target glbase.Enum, size int, data interface{}, usage glbase.Enum) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - if data != nil { - size = int(data_v.Type().Size()) * data_v.Len() - } - C.gl1_5_glBufferData(gl.funcs, C.GLenum(target), C.GLsizeiptr(size), data_ptr, C.GLenum(usage)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIsBuffer.xml -func (gl *GL) IsBuffer(buffer glbase.Buffer) bool { - glresult := C.gl1_5_glIsBuffer(gl.funcs, C.GLuint(buffer)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// GenBuffers returns n buffer object names. There is no guarantee that -// the names form a contiguous set of integers; however, it is guaranteed -// that none of the returned names was in use immediately before the call to -// GenBuffers. -// -// Buffer object names returned by a call to GenBuffers are not returned by -// subsequent calls, unless they are first deleted with DeleteBuffers. -// -// No buffer objects are associated with the returned buffer object names -// until they are first bound by calling BindBuffer. -// -// Error GL.INVALID_VALUE is generated if n is negative. GL.INVALID_OPERATION -// is generated if GenBuffers is executed between the execution of Begin -// and the corresponding execution of End. -// -// GenBuffers is available in GL version 1.5 or greater. -func (gl *GL) GenBuffers(n int) []glbase.Buffer { - if n == 0 { - return nil - } - buffers := make([]glbase.Buffer, n) - C.gl1_5_glGenBuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&buffers[0]))) - return buffers -} - -// DeleteBuffers deletes the buffer objects whose names are stored in the -// buffers slice. -// -// After a buffer object is deleted, it has no contents, and its name is free -// for reuse (for example by GenBuffers). If a buffer object that is -// currently bound is deleted, the binding reverts to 0 (the absence of any -// buffer object, which reverts to client memory usage). -// -// DeleteBuffers silently ignores 0's and names that do not correspond to -// existing buffer objects. -// -// Error GL.INVALID_VALUE is generated if n is negative. GL.INVALID_OPERATION -// is generated if DeleteBuffers is executed between the execution of Begin -// and the corresponding execution of End. -// -// DeleteBuffers is available in GL version 1.5 or greater. -func (gl *GL) DeleteBuffers(buffers []glbase.Buffer) { - n := len(buffers) - if n == 0 { - return - } - C.gl1_5_glDeleteBuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&buffers[0]))) -} - -// BindBuffer creates or puts in use a named buffer object. -// Calling BindBuffer with target set to GL.ARRAY_BUFFER, -// GL.ELEMENT_ARRAY_BUFFER, GL.PIXEL_PACK_BUFFER or GL.PIXEL_UNPACK_BUFFER -// and buffer set to the name of the new buffer object binds the buffer -// object name to the target. When a buffer object is bound to a target, the -// previous binding for that target is automatically broken. -// -// Buffer object names are unsigned integers. The value zero is reserved, but -// there is no default buffer object for each buffer object target. Instead, -// buffer set to zero effectively unbinds any buffer object previously bound, -// and restores client memory usage for that buffer object target. Buffer -// object names and the corresponding buffer object contents are local to the -// shared display-list space (see XCreateContext) of the current GL rendering -// context; two rendering contexts share buffer object names only if they -// also share display lists. -// -// GenBuffers may be called to generate a set of new buffer object names. -// -// The state of a buffer object immediately after it is first bound is an -// unmapped zero-sized memory buffer with GL.READ_WRITE access and -// GL.STATIC_DRAW usage. -// -// While a non-zero buffer object name is bound, GL operations on the target -// to which it is bound affect the bound buffer object, and queries of the -// target to which it is bound return state from the bound buffer object. -// While buffer object name zero is bound, as in the initial state, attempts -// to modify or query state on the target to which it is bound generates an -// GL.INVALID_OPERATION error. -// -// When vertex array pointer state is changed, for example by a call to -// NormalPointer, the current buffer object binding (GL.ARRAY_BUFFER_BINDING) -// is copied into the corresponding client state for the vertex array type -// being changed, for example GL.NORMAL_ARRAY_BUFFER_BINDING. While a -// non-zero buffer object is bound to the GL.ARRAY_BUFFER target, the vertex -// array pointer parameter that is traditionally interpreted as a pointer to -// client-side memory is instead interpreted as an offset within the buffer -// object measured in basic machine units. -// -// While a non-zero buffer object is bound to the GL.ELEMENT_ARRAY_BUFFER -// target, the indices parameter of DrawElements, DrawRangeElements, or -// MultiDrawElements that is traditionally interpreted as a pointer to -// client-side memory is instead interpreted as an offset within the buffer -// object measured in basic machine units. -// -// While a non-zero buffer object is bound to the GL.PIXEL_PACK_BUFFER -// target, the following commands are affected: GetCompressedTexImage, -// GetConvolutionFilter, GetHistogram, GetMinmax, GetPixelMap, -// GetPolygonStipple, GetSeparableFilter, GetTexImage, and ReadPixels. The -// pointer parameter that is traditionally interpreted as a pointer to -// client-side memory where the pixels are to be packed is instead -// interpreted as an offset within the buffer object measured in basic -// machine units. -// -// While a non-zero buffer object is bound to the GL.PIXEL_UNPACK_BUFFER -// target, the following commands are affected: Bitmap, ColorSubTable, -// ColorTable, CompressedTexImage1D, CompressedTexImage2D, -// CompressedTexImage3D, CompressedTexSubImage1D, CompressedTexSubImage2D, -// CompressedTexSubImage3D, ConvolutionFilter1D, ConvolutionFilter2D, -// DrawPixels, PixelMap, PolygonStipple, SeparableFilter2D, TexImage1D, -// TexImage2D, TexImage3D, TexSubImage1D, TexSubImage2D, and TexSubImage3D. -// The pointer parameter that is traditionally interpreted as a pointer to -// client-side memory from which the pixels are to be unpacked is instead -// interpreted as an offset within the buffer object measured in basic -// machine units. -// -// A buffer object binding created with BindBuffer remains active until a -// different buffer object name is bound to the same target, or until the -// bound buffer object is deleted with DeleteBuffers. -// -// Once created, a named buffer object may be re-bound to any target as often -// as needed. However, the GL implementation may make choices about how to -// optimize the storage of a buffer object based on its initial binding -// target. -// -// Error GL.INVALID_ENUM is generated if target is not one of the allowable -// values. GL.INVALID_OPERATION is generated if BindBuffer is executed -// between the execution of Begin and the corresponding execution of End. -// -// BindBuffer is available in GL version 1.5 or greater. -func (gl *GL) BindBuffer(target glbase.Enum, buffer glbase.Buffer) { - C.gl1_5_glBindBuffer(gl.funcs, C.GLenum(target), C.GLuint(buffer)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetQueryObjectuiv.xml -func (gl *GL) GetQueryObjectuiv(id uint32, pname glbase.Enum, params []uint32) { - C.gl1_5_glGetQueryObjectuiv(gl.funcs, C.GLuint(id), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetQueryObjectiv.xml -func (gl *GL) GetQueryObjectiv(id uint32, pname glbase.Enum, params []int32) { - C.gl1_5_glGetQueryObjectiv(gl.funcs, C.GLuint(id), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetQueryiv.xml -func (gl *GL) GetQueryiv(target, pname glbase.Enum, params []int32) { - C.gl1_5_glGetQueryiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEndQuery.xml -func (gl *GL) EndQuery(target glbase.Enum) { - C.gl1_5_glEndQuery(gl.funcs, C.GLenum(target)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glBeginQuery.xml -func (gl *GL) BeginQuery(target glbase.Enum, id uint32) { - C.gl1_5_glBeginQuery(gl.funcs, C.GLenum(target), C.GLuint(id)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIsQuery.xml -func (gl *GL) IsQuery(id uint32) bool { - glresult := C.gl1_5_glIsQuery(gl.funcs, C.GLuint(id)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDeleteQueries.xml -func (gl *GL) DeleteQueries(n int, ids []uint32) { - C.gl1_5_glDeleteQueries(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&ids[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGenQueries.xml -func (gl *GL) GenQueries(n int, ids []uint32) { - C.gl1_5_glGenQueries(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&ids[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTranslatef.xml -func (gl *GL) Translatef(x, y, z float32) { - C.gl1_5_glTranslatef(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTranslated.xml -func (gl *GL) Translated(x, y, z float64) { - C.gl1_5_glTranslated(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glScalef.xml -func (gl *GL) Scalef(x, y, z float32) { - C.gl1_5_glScalef(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glScaled.xml -func (gl *GL) Scaled(x, y, z float64) { - C.gl1_5_glScaled(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRotatef.xml -func (gl *GL) Rotatef(angle, x, y, z float32) { - C.gl1_5_glRotatef(gl.funcs, C.GLfloat(angle), C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRotated.xml -func (gl *GL) Rotated(angle, x, y, z float64) { - C.gl1_5_glRotated(gl.funcs, C.GLdouble(angle), C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPushMatrix.xml -func (gl *GL) PushMatrix() { - C.gl1_5_glPushMatrix(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPopMatrix.xml -func (gl *GL) PopMatrix() { - C.gl1_5_glPopMatrix(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glOrtho.xml -func (gl *GL) Ortho(left, right, bottom, top, zNear, zFar float64) { - C.gl1_5_glOrtho(gl.funcs, C.GLdouble(left), C.GLdouble(right), C.GLdouble(bottom), C.GLdouble(top), C.GLdouble(zNear), C.GLdouble(zFar)) -} - -// MultMatrixd multiplies the current matrix with the provided matrix. -// -// The m parameter must hold 16 consecutive elements of a 4x4 column-major matrix. -// -// The current matrix is determined by the current matrix mode (see -// MatrixMode). It is either the projection matrix, modelview matrix, or the -// texture matrix. -// -// For example, if the current matrix is C and the coordinates to be transformed -// are v = (v[0], v[1], v[2], v[3]), then the current transformation is C × v, or -// -// c[0] c[4] c[8] c[12] v[0] -// c[1] c[5] c[9] c[13] v[1] -// c[2] c[6] c[10] c[14] X v[2] -// c[3] c[7] c[11] c[15] v[3] -// -// Calling MultMatrix with an argument of m = m[0], m[1], ..., m[15] -// replaces the current transformation with (C X M) x v, or -// -// c[0] c[4] c[8] c[12] m[0] m[4] m[8] m[12] v[0] -// c[1] c[5] c[9] c[13] m[1] m[5] m[9] m[13] v[1] -// c[2] c[6] c[10] c[14] X m[2] m[6] m[10] m[14] X v[2] -// c[3] c[7] c[11] c[15] m[3] m[7] m[11] m[15] v[3] -// -// Where 'X' denotes matrix multiplication, and v is represented as a 4x1 matrix. -// -// While the elements of the matrix may be specified with single or double -// precision, the GL may store or operate on these values in less-than-single -// precision. -// -// In many computer languages, 4×4 arrays are represented in row-major -// order. The transformations just described represent these matrices in -// column-major order. The order of the multiplication is important. For -// example, if the current transformation is a rotation, and MultMatrix is -// called with a translation matrix, the translation is done directly on the -// coordinates to be transformed, while the rotation is done on the results -// of that translation. -// -// GL.INVALID_OPERATION is generated if MultMatrix is executed between the -// execution of Begin and the corresponding execution of End. -func (gl *GL) MultMatrixd(m []float64) { - if len(m) != 16 { - panic("parameter m must have length 16 for the 4x4 matrix") - } - C.gl1_5_glMultMatrixd(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&m[0]))) -} - -// MultMatrixf multiplies the current matrix with the provided matrix. -// -// The m parameter must hold 16 consecutive elements of a 4x4 column-major matrix. -// -// The current matrix is determined by the current matrix mode (see -// MatrixMode). It is either the projection matrix, modelview matrix, or the -// texture matrix. -// -// For example, if the current matrix is C and the coordinates to be transformed -// are v = (v[0], v[1], v[2], v[3]), then the current transformation is C × v, or -// -// c[0] c[4] c[8] c[12] v[0] -// c[1] c[5] c[9] c[13] v[1] -// c[2] c[6] c[10] c[14] X v[2] -// c[3] c[7] c[11] c[15] v[3] -// -// Calling MultMatrix with an argument of m = m[0], m[1], ..., m[15] -// replaces the current transformation with (C X M) x v, or -// -// c[0] c[4] c[8] c[12] m[0] m[4] m[8] m[12] v[0] -// c[1] c[5] c[9] c[13] m[1] m[5] m[9] m[13] v[1] -// c[2] c[6] c[10] c[14] X m[2] m[6] m[10] m[14] X v[2] -// c[3] c[7] c[11] c[15] m[3] m[7] m[11] m[15] v[3] -// -// Where 'X' denotes matrix multiplication, and v is represented as a 4x1 matrix. -// -// While the elements of the matrix may be specified with single or double -// precision, the GL may store or operate on these values in less-than-single -// precision. -// -// In many computer languages, 4×4 arrays are represented in row-major -// order. The transformations just described represent these matrices in -// column-major order. The order of the multiplication is important. For -// example, if the current transformation is a rotation, and MultMatrix is -// called with a translation matrix, the translation is done directly on the -// coordinates to be transformed, while the rotation is done on the results -// of that translation. -// -// GL.INVALID_OPERATION is generated if MultMatrix is executed between the -// execution of Begin and the corresponding execution of End. -func (gl *GL) MultMatrixf(m []float32) { - if len(m) != 16 { - panic("parameter m must have length 16 for the 4x4 matrix") - } - C.gl1_5_glMultMatrixf(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMatrixMode.xml -func (gl *GL) MatrixMode(mode glbase.Enum) { - C.gl1_5_glMatrixMode(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLoadMatrixd.xml -func (gl *GL) LoadMatrixd(m []float64) { - C.gl1_5_glLoadMatrixd(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLoadMatrixf.xml -func (gl *GL) LoadMatrixf(m []float32) { - C.gl1_5_glLoadMatrixf(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLoadIdentity.xml -func (gl *GL) LoadIdentity() { - C.gl1_5_glLoadIdentity(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFrustum.xml -func (gl *GL) Frustum(left, right, bottom, top, zNear, zFar float64) { - C.gl1_5_glFrustum(gl.funcs, C.GLdouble(left), C.GLdouble(right), C.GLdouble(bottom), C.GLdouble(top), C.GLdouble(zNear), C.GLdouble(zFar)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIsList.xml -func (gl *GL) IsList(list uint32) bool { - glresult := C.gl1_5_glIsList(gl.funcs, C.GLuint(list)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexGeniv.xml -func (gl *GL) GetTexGeniv(coord, pname glbase.Enum, params []int32) { - C.gl1_5_glGetTexGeniv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexGenfv.xml -func (gl *GL) GetTexGenfv(coord, pname glbase.Enum, params []float32) { - C.gl1_5_glGetTexGenfv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexGendv.xml -func (gl *GL) GetTexGendv(coord, pname glbase.Enum, params []float64) { - C.gl1_5_glGetTexGendv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexEnviv.xml -func (gl *GL) GetTexEnviv(target, pname glbase.Enum, params []int32) { - C.gl1_5_glGetTexEnviv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexEnvfv.xml -func (gl *GL) GetTexEnvfv(target, pname glbase.Enum, params []float32) { - C.gl1_5_glGetTexEnvfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetPolygonStipple.xml -func (gl *GL) GetPolygonStipple(mask []uint8) { - C.gl1_5_glGetPolygonStipple(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&mask[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetPixelMapusv.xml -func (gl *GL) GetPixelMapusv(glmap glbase.Enum, values []uint16) { - C.gl1_5_glGetPixelMapusv(gl.funcs, C.GLenum(glmap), (*C.GLushort)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetPixelMapuiv.xml -func (gl *GL) GetPixelMapuiv(glmap glbase.Enum, values []uint32) { - C.gl1_5_glGetPixelMapuiv(gl.funcs, C.GLenum(glmap), (*C.GLuint)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetPixelMapfv.xml -func (gl *GL) GetPixelMapfv(glmap glbase.Enum, values []float32) { - C.gl1_5_glGetPixelMapfv(gl.funcs, C.GLenum(glmap), (*C.GLfloat)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetMaterialiv.xml -func (gl *GL) GetMaterialiv(face, pname glbase.Enum, params []int32) { - C.gl1_5_glGetMaterialiv(gl.funcs, C.GLenum(face), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetMaterialfv.xml -func (gl *GL) GetMaterialfv(face, pname glbase.Enum, params []float32) { - C.gl1_5_glGetMaterialfv(gl.funcs, C.GLenum(face), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetMapiv.xml -func (gl *GL) GetMapiv(target, query glbase.Enum, v []int32) { - C.gl1_5_glGetMapiv(gl.funcs, C.GLenum(target), C.GLenum(query), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetMapfv.xml -func (gl *GL) GetMapfv(target, query glbase.Enum, v []float32) { - C.gl1_5_glGetMapfv(gl.funcs, C.GLenum(target), C.GLenum(query), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetMapdv.xml -func (gl *GL) GetMapdv(target, query glbase.Enum, v []float64) { - C.gl1_5_glGetMapdv(gl.funcs, C.GLenum(target), C.GLenum(query), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetLightiv.xml -func (gl *GL) GetLightiv(light, pname glbase.Enum, params []int32) { - C.gl1_5_glGetLightiv(gl.funcs, C.GLenum(light), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetLightfv.xml -func (gl *GL) GetLightfv(light, pname glbase.Enum, params []float32) { - C.gl1_5_glGetLightfv(gl.funcs, C.GLenum(light), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetClipPlane.xml -func (gl *GL) GetClipPlane(plane glbase.Enum, equation []float64) { - C.gl1_5_glGetClipPlane(gl.funcs, C.GLenum(plane), (*C.GLdouble)(unsafe.Pointer(&equation[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDrawPixels.xml -func (gl *GL) DrawPixels(width, height int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl1_5_glDrawPixels(gl.funcs, C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyPixels.xml -func (gl *GL) CopyPixels(x, y, width, height int, gltype glbase.Enum) { - C.gl1_5_glCopyPixels(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height), C.GLenum(gltype)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPixelMapusv.xml -func (gl *GL) PixelMapusv(glmap glbase.Enum, mapsize int32, values []uint16) { - C.gl1_5_glPixelMapusv(gl.funcs, C.GLenum(glmap), C.GLint(mapsize), (*C.GLushort)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPixelMapuiv.xml -func (gl *GL) PixelMapuiv(glmap glbase.Enum, mapsize int32, values []uint32) { - C.gl1_5_glPixelMapuiv(gl.funcs, C.GLenum(glmap), C.GLint(mapsize), (*C.GLuint)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPixelMapfv.xml -func (gl *GL) PixelMapfv(glmap glbase.Enum, mapsize int32, values []float32) { - C.gl1_5_glPixelMapfv(gl.funcs, C.GLenum(glmap), C.GLint(mapsize), (*C.GLfloat)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPixelTransferi.xml -func (gl *GL) PixelTransferi(pname glbase.Enum, param int32) { - C.gl1_5_glPixelTransferi(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPixelTransferf.xml -func (gl *GL) PixelTransferf(pname glbase.Enum, param float32) { - C.gl1_5_glPixelTransferf(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPixelZoom.xml -func (gl *GL) PixelZoom(xfactor, yfactor float32) { - C.gl1_5_glPixelZoom(gl.funcs, C.GLfloat(xfactor), C.GLfloat(yfactor)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glAlphaFunc.xml -func (gl *GL) AlphaFunc(glfunc glbase.Enum, ref float32) { - C.gl1_5_glAlphaFunc(gl.funcs, C.GLenum(glfunc), C.GLfloat(ref)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalPoint2.xml -func (gl *GL) EvalPoint2(i, j int32) { - C.gl1_5_glEvalPoint2(gl.funcs, C.GLint(i), C.GLint(j)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalMesh2.xml -func (gl *GL) EvalMesh2(mode glbase.Enum, i1, i2, j1, j2 int32) { - C.gl1_5_glEvalMesh2(gl.funcs, C.GLenum(mode), C.GLint(i1), C.GLint(i2), C.GLint(j1), C.GLint(j2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalPoint1.xml -func (gl *GL) EvalPoint1(i int32) { - C.gl1_5_glEvalPoint1(gl.funcs, C.GLint(i)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalMesh1.xml -func (gl *GL) EvalMesh1(mode glbase.Enum, i1, i2 int32) { - C.gl1_5_glEvalMesh1(gl.funcs, C.GLenum(mode), C.GLint(i1), C.GLint(i2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalCoord2fv.xml -func (gl *GL) EvalCoord2fv(u []float32) { - if len(u) != 2 { - panic("parameter u has incorrect length") - } - C.gl1_5_glEvalCoord2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&u[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalCoord2f.xml -func (gl *GL) EvalCoord2f(u, v float32) { - C.gl1_5_glEvalCoord2f(gl.funcs, C.GLfloat(u), C.GLfloat(v)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalCoord2dv.xml -func (gl *GL) EvalCoord2dv(u []float64) { - if len(u) != 2 { - panic("parameter u has incorrect length") - } - C.gl1_5_glEvalCoord2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&u[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalCoord2d.xml -func (gl *GL) EvalCoord2d(u, v float64) { - C.gl1_5_glEvalCoord2d(gl.funcs, C.GLdouble(u), C.GLdouble(v)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalCoord1fv.xml -func (gl *GL) EvalCoord1fv(u []float32) { - C.gl1_5_glEvalCoord1fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&u[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalCoord1f.xml -func (gl *GL) EvalCoord1f(u float32) { - C.gl1_5_glEvalCoord1f(gl.funcs, C.GLfloat(u)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalCoord1dv.xml -func (gl *GL) EvalCoord1dv(u []float64) { - C.gl1_5_glEvalCoord1dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&u[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalCoord1d.xml -func (gl *GL) EvalCoord1d(u float64) { - C.gl1_5_glEvalCoord1d(gl.funcs, C.GLdouble(u)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMapGrid2f.xml -func (gl *GL) MapGrid2f(un int32, u1, u2 float32, vn int32, v1, v2 float32) { - C.gl1_5_glMapGrid2f(gl.funcs, C.GLint(un), C.GLfloat(u1), C.GLfloat(u2), C.GLint(vn), C.GLfloat(v1), C.GLfloat(v2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMapGrid2d.xml -func (gl *GL) MapGrid2d(un int32, u1, u2 float64, vn int32, v1, v2 float64) { - C.gl1_5_glMapGrid2d(gl.funcs, C.GLint(un), C.GLdouble(u1), C.GLdouble(u2), C.GLint(vn), C.GLdouble(v1), C.GLdouble(v2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMapGrid1f.xml -func (gl *GL) MapGrid1f(un int32, u1, u2 float32) { - C.gl1_5_glMapGrid1f(gl.funcs, C.GLint(un), C.GLfloat(u1), C.GLfloat(u2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMapGrid1d.xml -func (gl *GL) MapGrid1d(un int32, u1, u2 float64) { - C.gl1_5_glMapGrid1d(gl.funcs, C.GLint(un), C.GLdouble(u1), C.GLdouble(u2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMap2f.xml -func (gl *GL) Map2f(target glbase.Enum, u1, u2 float32, ustride, uorder int32, v1, v2 float32, vstride, vorder int32, points []float32) { - C.gl1_5_glMap2f(gl.funcs, C.GLenum(target), C.GLfloat(u1), C.GLfloat(u2), C.GLint(ustride), C.GLint(uorder), C.GLfloat(v1), C.GLfloat(v2), C.GLint(vstride), C.GLint(vorder), (*C.GLfloat)(unsafe.Pointer(&points[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMap2d.xml -func (gl *GL) Map2d(target glbase.Enum, u1, u2 float64, ustride, uorder int32, v1, v2 float64, vstride, vorder int32, points []float64) { - C.gl1_5_glMap2d(gl.funcs, C.GLenum(target), C.GLdouble(u1), C.GLdouble(u2), C.GLint(ustride), C.GLint(uorder), C.GLdouble(v1), C.GLdouble(v2), C.GLint(vstride), C.GLint(vorder), (*C.GLdouble)(unsafe.Pointer(&points[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMap1f.xml -func (gl *GL) Map1f(target glbase.Enum, u1, u2 float32, stride, order int, points []float32) { - C.gl1_5_glMap1f(gl.funcs, C.GLenum(target), C.GLfloat(u1), C.GLfloat(u2), C.GLint(stride), C.GLint(order), (*C.GLfloat)(unsafe.Pointer(&points[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMap1d.xml -func (gl *GL) Map1d(target glbase.Enum, u1, u2 float64, stride, order int, points []float64) { - C.gl1_5_glMap1d(gl.funcs, C.GLenum(target), C.GLdouble(u1), C.GLdouble(u2), C.GLint(stride), C.GLint(order), (*C.GLdouble)(unsafe.Pointer(&points[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPushAttrib.xml -func (gl *GL) PushAttrib(mask glbase.Bitfield) { - C.gl1_5_glPushAttrib(gl.funcs, C.GLbitfield(mask)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPopAttrib.xml -func (gl *GL) PopAttrib() { - C.gl1_5_glPopAttrib(gl.funcs) -} - -// Accum executes an operation on the accumulation buffer. -// -// Parameter op defines the accumulation buffer operation (GL.ACCUM, GL.LOAD, -// GL.ADD, GL.MULT, or GL.RETURN) and specifies how the value parameter is -// used. -// -// The accumulation buffer is an extended-range color buffer. Images are not -// rendered into it. Rather, images rendered into one of the color buffers -// are added to the contents of the accumulation buffer after rendering. -// Effects such as antialiasing (of points, lines, and polygons), motion -// blur, and depth of field can be created by accumulating images generated -// with different transformation matrices. -// -// Each pixel in the accumulation buffer consists of red, green, blue, and -// alpha values. The number of bits per component in the accumulation buffer -// depends on the implementation. You can examine this number by calling -// GetIntegerv four times, with arguments GL.ACCUM_RED_BITS, -// GL.ACCUM_GREEN_BITS, GL.ACCUM_BLUE_BITS, and GL.ACCUM_ALPHA_BITS. -// Regardless of the number of bits per component, the range of values stored -// by each component is (-1, 1). The accumulation buffer pixels are mapped -// one-to-one with frame buffer pixels. -// -// All accumulation buffer operations are limited to the area of the current -// scissor box and applied identically to the red, green, blue, and alpha -// components of each pixel. If a Accum operation results in a value outside -// the range (-1, 1), the contents of an accumulation buffer pixel component -// are undefined. -// -// The operations are as follows: -// -// GL.ACCUM -// Obtains R, G, B, and A values from the buffer currently selected for -// reading (see ReadBuffer). Each component value is divided by 2 n - -// 1 , where n is the number of bits allocated to each color component -// in the currently selected buffer. The result is a floating-point -// value in the range 0 1 , which is multiplied by value and added to -// the corresponding pixel component in the accumulation buffer, -// thereby updating the accumulation buffer. -// -// GL.LOAD -// Similar to GL.ACCUM, except that the current value in the -// accumulation buffer is not used in the calculation of the new value. -// That is, the R, G, B, and A values from the currently selected -// buffer are divided by 2 n - 1 , multiplied by value, and then stored -// in the corresponding accumulation buffer cell, overwriting the -// current value. -// -// GL.ADD -// Adds value to each R, G, B, and A in the accumulation buffer. -// -// GL.MULT -// Multiplies each R, G, B, and A in the accumulation buffer by value -// and returns the scaled component to its corresponding accumulation -// buffer location. -// -// GL.RETURN -// Transfers accumulation buffer values to the color buffer or buffers -// currently selected for writing. Each R, G, B, and A component is -// multiplied by value, then multiplied by 2 n - 1 , clamped to the -// range 0 2 n - 1 , and stored in the corresponding display buffer -// cell. The only fragment operations that are applied to this transfer -// are pixel ownership, scissor, dithering, and color writemasks. -// -// To clear the accumulation buffer, call ClearAccum with R, G, B, and A -// values to set it to, then call Clear with the accumulation buffer -// enabled. -// -// Error GL.INVALID_ENUM is generated if op is not an accepted value. -// GL.INVALID_OPERATION is generated if there is no accumulation buffer. -// GL.INVALID_OPERATION is generated if Accum is executed between the -// execution of Begin and the corresponding execution of End. -func (gl *GL) Accum(op glbase.Enum, value float32) { - C.gl1_5_glAccum(gl.funcs, C.GLenum(op), C.GLfloat(value)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexMask.xml -func (gl *GL) IndexMask(mask uint32) { - C.gl1_5_glIndexMask(gl.funcs, C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glClearIndex.xml -func (gl *GL) ClearIndex(c float32) { - C.gl1_5_glClearIndex(gl.funcs, C.GLfloat(c)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glClearAccum.xml -func (gl *GL) ClearAccum(red, green, blue, alpha float32) { - C.gl1_5_glClearAccum(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPushName.xml -func (gl *GL) PushName(name uint32) { - C.gl1_5_glPushName(gl.funcs, C.GLuint(name)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPopName.xml -func (gl *GL) PopName() { - C.gl1_5_glPopName(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPassThrough.xml -func (gl *GL) PassThrough(token float32) { - C.gl1_5_glPassThrough(gl.funcs, C.GLfloat(token)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLoadName.xml -func (gl *GL) LoadName(name uint32) { - C.gl1_5_glLoadName(gl.funcs, C.GLuint(name)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glInitNames.xml -func (gl *GL) InitNames() { - C.gl1_5_glInitNames(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRenderMode.xml -func (gl *GL) RenderMode(mode glbase.Enum) int32 { - glresult := C.gl1_5_glRenderMode(gl.funcs, C.GLenum(mode)) - return int32(glresult) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSelectBuffer.xml -func (gl *GL) SelectBuffer(size int, buffer []glbase.Buffer) { - C.gl1_5_glSelectBuffer(gl.funcs, C.GLsizei(size), (*C.GLuint)(unsafe.Pointer(&buffer[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFeedbackBuffer.xml -func (gl *GL) FeedbackBuffer(size int, gltype glbase.Enum, buffer []float32) { - C.gl1_5_glFeedbackBuffer(gl.funcs, C.GLsizei(size), C.GLenum(gltype), (*C.GLfloat)(unsafe.Pointer(&buffer[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexGeniv.xml -func (gl *GL) TexGeniv(coord, pname glbase.Enum, params []int32) { - C.gl1_5_glTexGeniv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexGeni.xml -func (gl *GL) TexGeni(coord, pname glbase.Enum, param int32) { - C.gl1_5_glTexGeni(gl.funcs, C.GLenum(coord), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexGenfv.xml -func (gl *GL) TexGenfv(coord, pname glbase.Enum, params []float32) { - C.gl1_5_glTexGenfv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexGenf.xml -func (gl *GL) TexGenf(coord, pname glbase.Enum, param float32) { - C.gl1_5_glTexGenf(gl.funcs, C.GLenum(coord), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexGendv.xml -func (gl *GL) TexGendv(coord, pname glbase.Enum, params []float64) { - C.gl1_5_glTexGendv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexGend.xml -func (gl *GL) TexGend(coord, pname glbase.Enum, param float64) { - C.gl1_5_glTexGend(gl.funcs, C.GLenum(coord), C.GLenum(pname), C.GLdouble(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexEnviv.xml -func (gl *GL) TexEnviv(target, pname glbase.Enum, params []int32) { - C.gl1_5_glTexEnviv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexEnvi.xml -func (gl *GL) TexEnvi(target, pname glbase.Enum, param int32) { - C.gl1_5_glTexEnvi(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexEnvfv.xml -func (gl *GL) TexEnvfv(target, pname glbase.Enum, params []float32) { - C.gl1_5_glTexEnvfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexEnvf.xml -func (gl *GL) TexEnvf(target, pname glbase.Enum, param float32) { - C.gl1_5_glTexEnvf(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glShadeModel.xml -func (gl *GL) ShadeModel(mode glbase.Enum) { - C.gl1_5_glShadeModel(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPolygonStipple.xml -func (gl *GL) PolygonStipple(mask []uint8) { - C.gl1_5_glPolygonStipple(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&mask[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMaterialiv.xml -func (gl *GL) Materialiv(face, pname glbase.Enum, params []int32) { - C.gl1_5_glMaterialiv(gl.funcs, C.GLenum(face), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMateriali.xml -func (gl *GL) Materiali(face, pname glbase.Enum, param int32) { - C.gl1_5_glMateriali(gl.funcs, C.GLenum(face), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMaterialfv.xml -func (gl *GL) Materialfv(face, pname glbase.Enum, params []float32) { - C.gl1_5_glMaterialfv(gl.funcs, C.GLenum(face), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMaterialf.xml -func (gl *GL) Materialf(face, pname glbase.Enum, param float32) { - C.gl1_5_glMaterialf(gl.funcs, C.GLenum(face), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLineStipple.xml -func (gl *GL) LineStipple(factor int32, pattern uint16) { - C.gl1_5_glLineStipple(gl.funcs, C.GLint(factor), C.GLushort(pattern)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLightModeliv.xml -func (gl *GL) LightModeliv(pname glbase.Enum, params []int32) { - C.gl1_5_glLightModeliv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLightModeli.xml -func (gl *GL) LightModeli(pname glbase.Enum, param int32) { - C.gl1_5_glLightModeli(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLightModelfv.xml -func (gl *GL) LightModelfv(pname glbase.Enum, params []float32) { - C.gl1_5_glLightModelfv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLightModelf.xml -func (gl *GL) LightModelf(pname glbase.Enum, param float32) { - C.gl1_5_glLightModelf(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLightiv.xml -func (gl *GL) Lightiv(light, pname glbase.Enum, params []int32) { - C.gl1_5_glLightiv(gl.funcs, C.GLenum(light), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLighti.xml -func (gl *GL) Lighti(light, pname glbase.Enum, param int32) { - C.gl1_5_glLighti(gl.funcs, C.GLenum(light), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLightfv.xml -func (gl *GL) Lightfv(light, pname glbase.Enum, params []float32) { - C.gl1_5_glLightfv(gl.funcs, C.GLenum(light), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLightf.xml -func (gl *GL) Lightf(light, pname glbase.Enum, param float32) { - C.gl1_5_glLightf(gl.funcs, C.GLenum(light), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFogiv.xml -func (gl *GL) Fogiv(pname glbase.Enum, params []int32) { - C.gl1_5_glFogiv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFogi.xml -func (gl *GL) Fogi(pname glbase.Enum, param int32) { - C.gl1_5_glFogi(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFogfv.xml -func (gl *GL) Fogfv(pname glbase.Enum, params []float32) { - C.gl1_5_glFogfv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFogf.xml -func (gl *GL) Fogf(pname glbase.Enum, param float32) { - C.gl1_5_glFogf(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColorMaterial.xml -func (gl *GL) ColorMaterial(face, mode glbase.Enum) { - C.gl1_5_glColorMaterial(gl.funcs, C.GLenum(face), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glClipPlane.xml -func (gl *GL) ClipPlane(plane glbase.Enum, equation []float64) { - C.gl1_5_glClipPlane(gl.funcs, C.GLenum(plane), (*C.GLdouble)(unsafe.Pointer(&equation[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex4sv.xml -func (gl *GL) Vertex4sv(v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_5_glVertex4sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex4s.xml -func (gl *GL) Vertex4s(x, y, z, w int16) { - C.gl1_5_glVertex4s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z), C.GLshort(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex4iv.xml -func (gl *GL) Vertex4iv(v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_5_glVertex4iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex4i.xml -func (gl *GL) Vertex4i(x, y, z, w int) { - C.gl1_5_glVertex4i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z), C.GLint(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex4fv.xml -func (gl *GL) Vertex4fv(v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_5_glVertex4fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex4f.xml -func (gl *GL) Vertex4f(x, y, z, w float32) { - C.gl1_5_glVertex4f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z), C.GLfloat(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex4dv.xml -func (gl *GL) Vertex4dv(v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_5_glVertex4dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex4d.xml -func (gl *GL) Vertex4d(x, y, z, w float64) { - C.gl1_5_glVertex4d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z), C.GLdouble(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex3sv.xml -func (gl *GL) Vertex3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_5_glVertex3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex3s.xml -func (gl *GL) Vertex3s(x, y, z int16) { - C.gl1_5_glVertex3s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex3iv.xml -func (gl *GL) Vertex3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_5_glVertex3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex3i.xml -func (gl *GL) Vertex3i(x, y, z int) { - C.gl1_5_glVertex3i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex3fv.xml -func (gl *GL) Vertex3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_5_glVertex3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex3f.xml -func (gl *GL) Vertex3f(x, y, z float32) { - C.gl1_5_glVertex3f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex3dv.xml -func (gl *GL) Vertex3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_5_glVertex3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex3d.xml -func (gl *GL) Vertex3d(x, y, z float64) { - C.gl1_5_glVertex3d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex2sv.xml -func (gl *GL) Vertex2sv(v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_5_glVertex2sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex2s.xml -func (gl *GL) Vertex2s(x, y int16) { - C.gl1_5_glVertex2s(gl.funcs, C.GLshort(x), C.GLshort(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex2iv.xml -func (gl *GL) Vertex2iv(v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_5_glVertex2iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex2i.xml -func (gl *GL) Vertex2i(x, y int) { - C.gl1_5_glVertex2i(gl.funcs, C.GLint(x), C.GLint(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex2fv.xml -func (gl *GL) Vertex2fv(v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_5_glVertex2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex2f.xml -func (gl *GL) Vertex2f(x, y float32) { - C.gl1_5_glVertex2f(gl.funcs, C.GLfloat(x), C.GLfloat(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex2dv.xml -func (gl *GL) Vertex2dv(v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_5_glVertex2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex2d.xml -func (gl *GL) Vertex2d(x, y float64) { - C.gl1_5_glVertex2d(gl.funcs, C.GLdouble(x), C.GLdouble(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord4sv.xml -func (gl *GL) TexCoord4sv(v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_5_glTexCoord4sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord4s.xml -func (gl *GL) TexCoord4s(s, t, r, q int16) { - C.gl1_5_glTexCoord4s(gl.funcs, C.GLshort(s), C.GLshort(t), C.GLshort(r), C.GLshort(q)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord4iv.xml -func (gl *GL) TexCoord4iv(v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_5_glTexCoord4iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord4i.xml -func (gl *GL) TexCoord4i(s, t, r, q int32) { - C.gl1_5_glTexCoord4i(gl.funcs, C.GLint(s), C.GLint(t), C.GLint(r), C.GLint(q)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord4fv.xml -func (gl *GL) TexCoord4fv(v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_5_glTexCoord4fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord4f.xml -func (gl *GL) TexCoord4f(s, t, r, q float32) { - C.gl1_5_glTexCoord4f(gl.funcs, C.GLfloat(s), C.GLfloat(t), C.GLfloat(r), C.GLfloat(q)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord4dv.xml -func (gl *GL) TexCoord4dv(v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_5_glTexCoord4dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord4d.xml -func (gl *GL) TexCoord4d(s, t, r, q float64) { - C.gl1_5_glTexCoord4d(gl.funcs, C.GLdouble(s), C.GLdouble(t), C.GLdouble(r), C.GLdouble(q)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord3sv.xml -func (gl *GL) TexCoord3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_5_glTexCoord3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord3s.xml -func (gl *GL) TexCoord3s(s, t, r int16) { - C.gl1_5_glTexCoord3s(gl.funcs, C.GLshort(s), C.GLshort(t), C.GLshort(r)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord3iv.xml -func (gl *GL) TexCoord3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_5_glTexCoord3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord3i.xml -func (gl *GL) TexCoord3i(s, t, r int32) { - C.gl1_5_glTexCoord3i(gl.funcs, C.GLint(s), C.GLint(t), C.GLint(r)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord3fv.xml -func (gl *GL) TexCoord3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_5_glTexCoord3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord3f.xml -func (gl *GL) TexCoord3f(s, t, r float32) { - C.gl1_5_glTexCoord3f(gl.funcs, C.GLfloat(s), C.GLfloat(t), C.GLfloat(r)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord3dv.xml -func (gl *GL) TexCoord3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_5_glTexCoord3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord3d.xml -func (gl *GL) TexCoord3d(s, t, r float64) { - C.gl1_5_glTexCoord3d(gl.funcs, C.GLdouble(s), C.GLdouble(t), C.GLdouble(r)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord2sv.xml -func (gl *GL) TexCoord2sv(v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_5_glTexCoord2sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord2s.xml -func (gl *GL) TexCoord2s(s, t int16) { - C.gl1_5_glTexCoord2s(gl.funcs, C.GLshort(s), C.GLshort(t)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord2iv.xml -func (gl *GL) TexCoord2iv(v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_5_glTexCoord2iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord2i.xml -func (gl *GL) TexCoord2i(s, t int32) { - C.gl1_5_glTexCoord2i(gl.funcs, C.GLint(s), C.GLint(t)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord2fv.xml -func (gl *GL) TexCoord2fv(v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_5_glTexCoord2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord2f.xml -func (gl *GL) TexCoord2f(s, t float32) { - C.gl1_5_glTexCoord2f(gl.funcs, C.GLfloat(s), C.GLfloat(t)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord2dv.xml -func (gl *GL) TexCoord2dv(v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_5_glTexCoord2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord2d.xml -func (gl *GL) TexCoord2d(s, t float64) { - C.gl1_5_glTexCoord2d(gl.funcs, C.GLdouble(s), C.GLdouble(t)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord1sv.xml -func (gl *GL) TexCoord1sv(v []int16) { - C.gl1_5_glTexCoord1sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord1s.xml -func (gl *GL) TexCoord1s(s int16) { - C.gl1_5_glTexCoord1s(gl.funcs, C.GLshort(s)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord1iv.xml -func (gl *GL) TexCoord1iv(v []int32) { - C.gl1_5_glTexCoord1iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord1i.xml -func (gl *GL) TexCoord1i(s int32) { - C.gl1_5_glTexCoord1i(gl.funcs, C.GLint(s)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord1fv.xml -func (gl *GL) TexCoord1fv(v []float32) { - C.gl1_5_glTexCoord1fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord1f.xml -func (gl *GL) TexCoord1f(s float32) { - C.gl1_5_glTexCoord1f(gl.funcs, C.GLfloat(s)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord1dv.xml -func (gl *GL) TexCoord1dv(v []float64) { - C.gl1_5_glTexCoord1dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord1d.xml -func (gl *GL) TexCoord1d(s float64) { - C.gl1_5_glTexCoord1d(gl.funcs, C.GLdouble(s)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRectsv.xml -func (gl *GL) Rectsv(v1, v2 []int16) { - C.gl1_5_glRectsv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v1[0])), (*C.GLshort)(unsafe.Pointer(&v2[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRects.xml -func (gl *GL) Rects(x1, y1, x2, y2 int16) { - C.gl1_5_glRects(gl.funcs, C.GLshort(x1), C.GLshort(y1), C.GLshort(x2), C.GLshort(y2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRectiv.xml -func (gl *GL) Rectiv(v1, v2 []int32) { - C.gl1_5_glRectiv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v1[0])), (*C.GLint)(unsafe.Pointer(&v2[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRecti.xml -func (gl *GL) Recti(x1, y1, x2, y2 int32) { - C.gl1_5_glRecti(gl.funcs, C.GLint(x1), C.GLint(y1), C.GLint(x2), C.GLint(y2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRectfv.xml -func (gl *GL) Rectfv(v1, v2 []float32) { - C.gl1_5_glRectfv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v1[0])), (*C.GLfloat)(unsafe.Pointer(&v2[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRectf.xml -func (gl *GL) Rectf(x1, y1, x2, y2 float32) { - C.gl1_5_glRectf(gl.funcs, C.GLfloat(x1), C.GLfloat(y1), C.GLfloat(x2), C.GLfloat(y2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRectdv.xml -func (gl *GL) Rectdv(v1, v2 []float64) { - C.gl1_5_glRectdv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v1[0])), (*C.GLdouble)(unsafe.Pointer(&v2[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRectd.xml -func (gl *GL) Rectd(x1, y1, x2, y2 float64) { - C.gl1_5_glRectd(gl.funcs, C.GLdouble(x1), C.GLdouble(y1), C.GLdouble(x2), C.GLdouble(y2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos4sv.xml -func (gl *GL) RasterPos4sv(v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_5_glRasterPos4sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos4s.xml -func (gl *GL) RasterPos4s(x, y, z, w int16) { - C.gl1_5_glRasterPos4s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z), C.GLshort(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos4iv.xml -func (gl *GL) RasterPos4iv(v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_5_glRasterPos4iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos4i.xml -func (gl *GL) RasterPos4i(x, y, z, w int) { - C.gl1_5_glRasterPos4i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z), C.GLint(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos4fv.xml -func (gl *GL) RasterPos4fv(v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_5_glRasterPos4fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos4f.xml -func (gl *GL) RasterPos4f(x, y, z, w float32) { - C.gl1_5_glRasterPos4f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z), C.GLfloat(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos4dv.xml -func (gl *GL) RasterPos4dv(v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_5_glRasterPos4dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos4d.xml -func (gl *GL) RasterPos4d(x, y, z, w float64) { - C.gl1_5_glRasterPos4d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z), C.GLdouble(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos3sv.xml -func (gl *GL) RasterPos3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_5_glRasterPos3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos3s.xml -func (gl *GL) RasterPos3s(x, y, z int16) { - C.gl1_5_glRasterPos3s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos3iv.xml -func (gl *GL) RasterPos3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_5_glRasterPos3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos3i.xml -func (gl *GL) RasterPos3i(x, y, z int) { - C.gl1_5_glRasterPos3i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos3fv.xml -func (gl *GL) RasterPos3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_5_glRasterPos3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos3f.xml -func (gl *GL) RasterPos3f(x, y, z float32) { - C.gl1_5_glRasterPos3f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos3dv.xml -func (gl *GL) RasterPos3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_5_glRasterPos3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos3d.xml -func (gl *GL) RasterPos3d(x, y, z float64) { - C.gl1_5_glRasterPos3d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos2sv.xml -func (gl *GL) RasterPos2sv(v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_5_glRasterPos2sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos2s.xml -func (gl *GL) RasterPos2s(x, y int16) { - C.gl1_5_glRasterPos2s(gl.funcs, C.GLshort(x), C.GLshort(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos2iv.xml -func (gl *GL) RasterPos2iv(v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_5_glRasterPos2iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos2i.xml -func (gl *GL) RasterPos2i(x, y int) { - C.gl1_5_glRasterPos2i(gl.funcs, C.GLint(x), C.GLint(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos2fv.xml -func (gl *GL) RasterPos2fv(v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_5_glRasterPos2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos2f.xml -func (gl *GL) RasterPos2f(x, y float32) { - C.gl1_5_glRasterPos2f(gl.funcs, C.GLfloat(x), C.GLfloat(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos2dv.xml -func (gl *GL) RasterPos2dv(v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_5_glRasterPos2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos2d.xml -func (gl *GL) RasterPos2d(x, y float64) { - C.gl1_5_glRasterPos2d(gl.funcs, C.GLdouble(x), C.GLdouble(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3sv.xml -func (gl *GL) Normal3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_5_glNormal3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3s.xml -func (gl *GL) Normal3s(nx, ny, nz int16) { - C.gl1_5_glNormal3s(gl.funcs, C.GLshort(nx), C.GLshort(ny), C.GLshort(nz)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3iv.xml -func (gl *GL) Normal3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_5_glNormal3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3i.xml -func (gl *GL) Normal3i(nx, ny, nz int32) { - C.gl1_5_glNormal3i(gl.funcs, C.GLint(nx), C.GLint(ny), C.GLint(nz)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3fv.xml -func (gl *GL) Normal3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_5_glNormal3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3f.xml -func (gl *GL) Normal3f(nx, ny, nz float32) { - C.gl1_5_glNormal3f(gl.funcs, C.GLfloat(nx), C.GLfloat(ny), C.GLfloat(nz)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3dv.xml -func (gl *GL) Normal3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_5_glNormal3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3d.xml -func (gl *GL) Normal3d(nx, ny, nz float64) { - C.gl1_5_glNormal3d(gl.funcs, C.GLdouble(nx), C.GLdouble(ny), C.GLdouble(nz)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3bv.xml -func (gl *GL) Normal3bv(v []byte) { - C.gl1_5_glNormal3bv(gl.funcs, (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3b.xml -func (gl *GL) Normal3b(nx, ny, nz byte) { - C.gl1_5_glNormal3b(gl.funcs, C.GLbyte(nx), C.GLbyte(ny), C.GLbyte(nz)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexsv.xml -func (gl *GL) Indexsv(c []int16) { - C.gl1_5_glIndexsv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexs.xml -func (gl *GL) Indexs(c int16) { - C.gl1_5_glIndexs(gl.funcs, C.GLshort(c)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexiv.xml -func (gl *GL) Indexiv(c []int32) { - C.gl1_5_glIndexiv(gl.funcs, (*C.GLint)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexi.xml -func (gl *GL) Indexi(c int32) { - C.gl1_5_glIndexi(gl.funcs, C.GLint(c)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexfv.xml -func (gl *GL) Indexfv(c []float32) { - C.gl1_5_glIndexfv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexf.xml -func (gl *GL) Indexf(c float32) { - C.gl1_5_glIndexf(gl.funcs, C.GLfloat(c)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexdv.xml -func (gl *GL) Indexdv(c []float64) { - C.gl1_5_glIndexdv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexd.xml -func (gl *GL) Indexd(c float64) { - C.gl1_5_glIndexd(gl.funcs, C.GLdouble(c)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEnd.xml -func (gl *GL) End() { - C.gl1_5_glEnd(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEdgeFlagv.xml -func (gl *GL) EdgeFlagv(flag []bool) { - C.gl1_5_glEdgeFlagv(gl.funcs, (*C.GLboolean)(unsafe.Pointer(&flag[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEdgeFlag.xml -func (gl *GL) EdgeFlag(flag bool) { - C.gl1_5_glEdgeFlag(gl.funcs, *(*C.GLboolean)(unsafe.Pointer(&flag))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4usv.xml -func (gl *GL) Color4usv(v []uint16) { - C.gl1_5_glColor4usv(gl.funcs, (*C.GLushort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4us.xml -func (gl *GL) Color4us(red, green, blue, alpha uint16) { - C.gl1_5_glColor4us(gl.funcs, C.GLushort(red), C.GLushort(green), C.GLushort(blue), C.GLushort(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4uiv.xml -func (gl *GL) Color4uiv(v []uint32) { - C.gl1_5_glColor4uiv(gl.funcs, (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4ui.xml -func (gl *GL) Color4ui(red, green, blue, alpha uint32) { - C.gl1_5_glColor4ui(gl.funcs, C.GLuint(red), C.GLuint(green), C.GLuint(blue), C.GLuint(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4ubv.xml -func (gl *GL) Color4ubv(v []uint8) { - C.gl1_5_glColor4ubv(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4ub.xml -func (gl *GL) Color4ub(red, green, blue, alpha uint8) { - C.gl1_5_glColor4ub(gl.funcs, C.GLubyte(red), C.GLubyte(green), C.GLubyte(blue), C.GLubyte(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4sv.xml -func (gl *GL) Color4sv(v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_5_glColor4sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4s.xml -func (gl *GL) Color4s(red, green, blue, alpha int16) { - C.gl1_5_glColor4s(gl.funcs, C.GLshort(red), C.GLshort(green), C.GLshort(blue), C.GLshort(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4iv.xml -func (gl *GL) Color4iv(v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_5_glColor4iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4i.xml -func (gl *GL) Color4i(red, green, blue, alpha int32) { - C.gl1_5_glColor4i(gl.funcs, C.GLint(red), C.GLint(green), C.GLint(blue), C.GLint(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4fv.xml -func (gl *GL) Color4fv(v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_5_glColor4fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4f.xml -func (gl *GL) Color4f(red, green, blue, alpha float32) { - C.gl1_5_glColor4f(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4dv.xml -func (gl *GL) Color4dv(v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_5_glColor4dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4d.xml -func (gl *GL) Color4d(red, green, blue, alpha float64) { - C.gl1_5_glColor4d(gl.funcs, C.GLdouble(red), C.GLdouble(green), C.GLdouble(blue), C.GLdouble(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4bv.xml -func (gl *GL) Color4bv(v []byte) { - C.gl1_5_glColor4bv(gl.funcs, (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4b.xml -func (gl *GL) Color4b(red, green, blue, alpha byte) { - C.gl1_5_glColor4b(gl.funcs, C.GLbyte(red), C.GLbyte(green), C.GLbyte(blue), C.GLbyte(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3usv.xml -func (gl *GL) Color3usv(v []uint16) { - C.gl1_5_glColor3usv(gl.funcs, (*C.GLushort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3us.xml -func (gl *GL) Color3us(red, green, blue uint16) { - C.gl1_5_glColor3us(gl.funcs, C.GLushort(red), C.GLushort(green), C.GLushort(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3uiv.xml -func (gl *GL) Color3uiv(v []uint32) { - C.gl1_5_glColor3uiv(gl.funcs, (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3ui.xml -func (gl *GL) Color3ui(red, green, blue uint32) { - C.gl1_5_glColor3ui(gl.funcs, C.GLuint(red), C.GLuint(green), C.GLuint(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3ubv.xml -func (gl *GL) Color3ubv(v []uint8) { - C.gl1_5_glColor3ubv(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3ub.xml -func (gl *GL) Color3ub(red, green, blue uint8) { - C.gl1_5_glColor3ub(gl.funcs, C.GLubyte(red), C.GLubyte(green), C.GLubyte(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3sv.xml -func (gl *GL) Color3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_5_glColor3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3s.xml -func (gl *GL) Color3s(red, green, blue int16) { - C.gl1_5_glColor3s(gl.funcs, C.GLshort(red), C.GLshort(green), C.GLshort(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3iv.xml -func (gl *GL) Color3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_5_glColor3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3i.xml -func (gl *GL) Color3i(red, green, blue int32) { - C.gl1_5_glColor3i(gl.funcs, C.GLint(red), C.GLint(green), C.GLint(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3fv.xml -func (gl *GL) Color3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_5_glColor3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3f.xml -func (gl *GL) Color3f(red, green, blue float32) { - C.gl1_5_glColor3f(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3dv.xml -func (gl *GL) Color3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_5_glColor3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3d.xml -func (gl *GL) Color3d(red, green, blue float64) { - C.gl1_5_glColor3d(gl.funcs, C.GLdouble(red), C.GLdouble(green), C.GLdouble(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3bv.xml -func (gl *GL) Color3bv(v []byte) { - C.gl1_5_glColor3bv(gl.funcs, (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3b.xml -func (gl *GL) Color3b(red, green, blue byte) { - C.gl1_5_glColor3b(gl.funcs, C.GLbyte(red), C.GLbyte(green), C.GLbyte(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glBitmap.xml -func (gl *GL) Bitmap(width, height int, xorig, yorig, xmove, ymove float32, bitmap []uint8) { - C.gl1_5_glBitmap(gl.funcs, C.GLsizei(width), C.GLsizei(height), C.GLfloat(xorig), C.GLfloat(yorig), C.GLfloat(xmove), C.GLfloat(ymove), (*C.GLubyte)(unsafe.Pointer(&bitmap[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glBegin.xml -func (gl *GL) Begin(mode glbase.Enum) { - C.gl1_5_glBegin(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glListBase.xml -func (gl *GL) ListBase(base uint32) { - C.gl1_5_glListBase(gl.funcs, C.GLuint(base)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGenLists.xml -func (gl *GL) GenLists(range_ int32) uint32 { - glresult := C.gl1_5_glGenLists(gl.funcs, C.GLsizei(range_)) - return uint32(glresult) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDeleteLists.xml -func (gl *GL) DeleteLists(list uint32, range_ int32) { - C.gl1_5_glDeleteLists(gl.funcs, C.GLuint(list), C.GLsizei(range_)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCallLists.xml -func (gl *GL) CallLists(n int, gltype glbase.Enum, lists interface{}) { - var lists_ptr unsafe.Pointer - var lists_v = reflect.ValueOf(lists) - if lists != nil && lists_v.Kind() != reflect.Slice { - panic("parameter lists must be a slice") - } - if lists != nil { - lists_ptr = unsafe.Pointer(lists_v.Index(0).Addr().Pointer()) - } - C.gl1_5_glCallLists(gl.funcs, C.GLsizei(n), C.GLenum(gltype), lists_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCallList.xml -func (gl *GL) CallList(list uint32) { - C.gl1_5_glCallList(gl.funcs, C.GLuint(list)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEndList.xml -func (gl *GL) EndList() { - C.gl1_5_glEndList(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNewList.xml -func (gl *GL) NewList(list uint32, mode glbase.Enum) { - C.gl1_5_glNewList(gl.funcs, C.GLuint(list), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPushClientAttrib.xml -func (gl *GL) PushClientAttrib(mask glbase.Bitfield) { - C.gl1_5_glPushClientAttrib(gl.funcs, C.GLbitfield(mask)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPopClientAttrib.xml -func (gl *GL) PopClientAttrib() { - C.gl1_5_glPopClientAttrib(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPrioritizeTextures.xml -func (gl *GL) PrioritizeTextures(n int, textures []glbase.Texture, priorities []float32) { - C.gl1_5_glPrioritizeTextures(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0])), (*C.GLfloat)(unsafe.Pointer(&priorities[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glAreTexturesResident.xml -func (gl *GL) AreTexturesResident(n int, textures []glbase.Texture, residences []bool) bool { - glresult := C.gl1_5_glAreTexturesResident(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0])), (*C.GLboolean)(unsafe.Pointer(&residences[0]))) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexPointer.xml -func (gl *GL) VertexPointer(size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl1_5_glVertexPointer(gl.funcs, C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoordPointer.xml -func (gl *GL) TexCoordPointer(size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl1_5_glTexCoordPointer(gl.funcs, C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormalPointer.xml -func (gl *GL) NormalPointer(gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl1_5_glNormalPointer(gl.funcs, C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glInterleavedArrays.xml -func (gl *GL) InterleavedArrays(format glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl1_5_glInterleavedArrays(gl.funcs, C.GLenum(format), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexPointer.xml -func (gl *GL) IndexPointer(gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl1_5_glIndexPointer(gl.funcs, C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEnableClientState.xml -func (gl *GL) EnableClientState(array glbase.Enum) { - C.gl1_5_glEnableClientState(gl.funcs, C.GLenum(array)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEdgeFlagPointer.xml -func (gl *GL) EdgeFlagPointer(stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl1_5_glEdgeFlagPointer(gl.funcs, C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDisableClientState.xml -func (gl *GL) DisableClientState(array glbase.Enum) { - C.gl1_5_glDisableClientState(gl.funcs, C.GLenum(array)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColorPointer.xml -func (gl *GL) ColorPointer(size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl1_5_glColorPointer(gl.funcs, C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glArrayElement.xml -func (gl *GL) ArrayElement(i int32) { - C.gl1_5_glArrayElement(gl.funcs, C.GLint(i)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glResetMinmax.xml -func (gl *GL) ResetMinmax(target glbase.Enum) { - C.gl1_5_glResetMinmax(gl.funcs, C.GLenum(target)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glResetHistogram.xml -func (gl *GL) ResetHistogram(target glbase.Enum) { - C.gl1_5_glResetHistogram(gl.funcs, C.GLenum(target)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMinmax.xml -func (gl *GL) Minmax(target, internalFormat glbase.Enum, sink bool) { - C.gl1_5_glMinmax(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), *(*C.GLboolean)(unsafe.Pointer(&sink))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glHistogram.xml -func (gl *GL) Histogram(target glbase.Enum, width int, internalFormat glbase.Enum, sink bool) { - C.gl1_5_glHistogram(gl.funcs, C.GLenum(target), C.GLsizei(width), C.GLenum(internalFormat), *(*C.GLboolean)(unsafe.Pointer(&sink))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetMinmaxParameteriv.xml -func (gl *GL) GetMinmaxParameteriv(target, pname glbase.Enum, params []int32) { - C.gl1_5_glGetMinmaxParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetMinmaxParameterfv.xml -func (gl *GL) GetMinmaxParameterfv(target, pname glbase.Enum, params []float32) { - C.gl1_5_glGetMinmaxParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetMinmax.xml -func (gl *GL) GetMinmax(target glbase.Enum, reset bool, format, gltype glbase.Enum, values interface{}) { - var values_ptr unsafe.Pointer - var values_v = reflect.ValueOf(values) - if values != nil && values_v.Kind() != reflect.Slice { - panic("parameter values must be a slice") - } - if values != nil { - values_ptr = unsafe.Pointer(values_v.Index(0).Addr().Pointer()) - } - C.gl1_5_glGetMinmax(gl.funcs, C.GLenum(target), *(*C.GLboolean)(unsafe.Pointer(&reset)), C.GLenum(format), C.GLenum(gltype), values_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetHistogramParameteriv.xml -func (gl *GL) GetHistogramParameteriv(target, pname glbase.Enum, params []int32) { - C.gl1_5_glGetHistogramParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetHistogramParameterfv.xml -func (gl *GL) GetHistogramParameterfv(target, pname glbase.Enum, params []float32) { - C.gl1_5_glGetHistogramParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetHistogram.xml -func (gl *GL) GetHistogram(target glbase.Enum, reset bool, format, gltype glbase.Enum, values interface{}) { - var values_ptr unsafe.Pointer - var values_v = reflect.ValueOf(values) - if values != nil && values_v.Kind() != reflect.Slice { - panic("parameter values must be a slice") - } - if values != nil { - values_ptr = unsafe.Pointer(values_v.Index(0).Addr().Pointer()) - } - C.gl1_5_glGetHistogram(gl.funcs, C.GLenum(target), *(*C.GLboolean)(unsafe.Pointer(&reset)), C.GLenum(format), C.GLenum(gltype), values_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSeparableFilter2D.xml -func (gl *GL) SeparableFilter2D(target, internalFormat glbase.Enum, width, height int, format, gltype glbase.Enum, row, column interface{}) { - var row_ptr unsafe.Pointer - var row_v = reflect.ValueOf(row) - if row != nil && row_v.Kind() != reflect.Slice { - panic("parameter row must be a slice") - } - if row != nil { - row_ptr = unsafe.Pointer(row_v.Index(0).Addr().Pointer()) - } - var column_ptr unsafe.Pointer - var column_v = reflect.ValueOf(column) - if column != nil && column_v.Kind() != reflect.Slice { - panic("parameter column must be a slice") - } - if column != nil { - column_ptr = unsafe.Pointer(column_v.Index(0).Addr().Pointer()) - } - C.gl1_5_glSeparableFilter2D(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), row_ptr, column_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetSeparableFilter.xml -func (gl *GL) GetSeparableFilter(target, format, gltype glbase.Enum, row, column, span interface{}) { - var row_ptr unsafe.Pointer - var row_v = reflect.ValueOf(row) - if row != nil && row_v.Kind() != reflect.Slice { - panic("parameter row must be a slice") - } - if row != nil { - row_ptr = unsafe.Pointer(row_v.Index(0).Addr().Pointer()) - } - var column_ptr unsafe.Pointer - var column_v = reflect.ValueOf(column) - if column != nil && column_v.Kind() != reflect.Slice { - panic("parameter column must be a slice") - } - if column != nil { - column_ptr = unsafe.Pointer(column_v.Index(0).Addr().Pointer()) - } - var span_ptr unsafe.Pointer - var span_v = reflect.ValueOf(span) - if span != nil && span_v.Kind() != reflect.Slice { - panic("parameter span must be a slice") - } - if span != nil { - span_ptr = unsafe.Pointer(span_v.Index(0).Addr().Pointer()) - } - C.gl1_5_glGetSeparableFilter(gl.funcs, C.GLenum(target), C.GLenum(format), C.GLenum(gltype), row_ptr, column_ptr, span_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetConvolutionParameteriv.xml -func (gl *GL) GetConvolutionParameteriv(target, pname glbase.Enum, params []int32) { - C.gl1_5_glGetConvolutionParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetConvolutionParameterfv.xml -func (gl *GL) GetConvolutionParameterfv(target, pname glbase.Enum, params []float32) { - C.gl1_5_glGetConvolutionParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetConvolutionFilter.xml -func (gl *GL) GetConvolutionFilter(target, format, gltype glbase.Enum, image interface{}) { - var image_ptr unsafe.Pointer - var image_v = reflect.ValueOf(image) - if image != nil && image_v.Kind() != reflect.Slice { - panic("parameter image must be a slice") - } - if image != nil { - image_ptr = unsafe.Pointer(image_v.Index(0).Addr().Pointer()) - } - C.gl1_5_glGetConvolutionFilter(gl.funcs, C.GLenum(target), C.GLenum(format), C.GLenum(gltype), image_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyConvolutionFilter2D.xml -func (gl *GL) CopyConvolutionFilter2D(target, internalFormat glbase.Enum, x, y, width, height int) { - C.gl1_5_glCopyConvolutionFilter2D(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyConvolutionFilter1D.xml -func (gl *GL) CopyConvolutionFilter1D(target, internalFormat glbase.Enum, x, y, width int) { - C.gl1_5_glCopyConvolutionFilter1D(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glConvolutionParameteriv.xml -func (gl *GL) ConvolutionParameteriv(target, pname glbase.Enum, params []int32) { - C.gl1_5_glConvolutionParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glConvolutionParameteri.xml -func (gl *GL) ConvolutionParameteri(target, pname glbase.Enum, params int32) { - C.gl1_5_glConvolutionParameteri(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLint(params)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glConvolutionParameterfv.xml -func (gl *GL) ConvolutionParameterfv(target, pname glbase.Enum, params []float32) { - C.gl1_5_glConvolutionParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glConvolutionParameterf.xml -func (gl *GL) ConvolutionParameterf(target, pname glbase.Enum, params float32) { - C.gl1_5_glConvolutionParameterf(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLfloat(params)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glConvolutionFilter2D.xml -func (gl *GL) ConvolutionFilter2D(target, internalFormat glbase.Enum, width, height int, format, gltype glbase.Enum, image interface{}) { - var image_ptr unsafe.Pointer - var image_v = reflect.ValueOf(image) - if image != nil && image_v.Kind() != reflect.Slice { - panic("parameter image must be a slice") - } - if image != nil { - image_ptr = unsafe.Pointer(image_v.Index(0).Addr().Pointer()) - } - C.gl1_5_glConvolutionFilter2D(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), image_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glConvolutionFilter1D.xml -func (gl *GL) ConvolutionFilter1D(target, internalFormat glbase.Enum, width int, format, gltype glbase.Enum, image interface{}) { - var image_ptr unsafe.Pointer - var image_v = reflect.ValueOf(image) - if image != nil && image_v.Kind() != reflect.Slice { - panic("parameter image must be a slice") - } - if image != nil { - image_ptr = unsafe.Pointer(image_v.Index(0).Addr().Pointer()) - } - C.gl1_5_glConvolutionFilter1D(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLsizei(width), C.GLenum(format), C.GLenum(gltype), image_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyColorSubTable.xml -func (gl *GL) CopyColorSubTable(target glbase.Enum, start int32, x, y, width int) { - C.gl1_5_glCopyColorSubTable(gl.funcs, C.GLenum(target), C.GLsizei(start), C.GLint(x), C.GLint(y), C.GLsizei(width)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColorSubTable.xml -func (gl *GL) ColorSubTable(target glbase.Enum, start int32, count int, format, gltype glbase.Enum, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl1_5_glColorSubTable(gl.funcs, C.GLenum(target), C.GLsizei(start), C.GLsizei(count), C.GLenum(format), C.GLenum(gltype), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetColorTableParameteriv.xml -func (gl *GL) GetColorTableParameteriv(target, pname glbase.Enum, params []int32) { - C.gl1_5_glGetColorTableParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetColorTableParameterfv.xml -func (gl *GL) GetColorTableParameterfv(target, pname glbase.Enum, params []float32) { - C.gl1_5_glGetColorTableParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetColorTable.xml -func (gl *GL) GetColorTable(target, format, gltype glbase.Enum, table interface{}) { - var table_ptr unsafe.Pointer - var table_v = reflect.ValueOf(table) - if table != nil && table_v.Kind() != reflect.Slice { - panic("parameter table must be a slice") - } - if table != nil { - table_ptr = unsafe.Pointer(table_v.Index(0).Addr().Pointer()) - } - C.gl1_5_glGetColorTable(gl.funcs, C.GLenum(target), C.GLenum(format), C.GLenum(gltype), table_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyColorTable.xml -func (gl *GL) CopyColorTable(target, internalFormat glbase.Enum, x, y, width int) { - C.gl1_5_glCopyColorTable(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColorTableParameteriv.xml -func (gl *GL) ColorTableParameteriv(target, pname glbase.Enum, params []int32) { - C.gl1_5_glColorTableParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColorTableParameterfv.xml -func (gl *GL) ColorTableParameterfv(target, pname glbase.Enum, params []float32) { - C.gl1_5_glColorTableParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColorTable.xml -func (gl *GL) ColorTable(target, internalFormat glbase.Enum, width int, format, gltype glbase.Enum, table interface{}) { - var table_ptr unsafe.Pointer - var table_v = reflect.ValueOf(table) - if table != nil && table_v.Kind() != reflect.Slice { - panic("parameter table must be a slice") - } - if table != nil { - table_ptr = unsafe.Pointer(table_v.Index(0).Addr().Pointer()) - } - C.gl1_5_glColorTable(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLsizei(width), C.GLenum(format), C.GLenum(gltype), table_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultTransposeMatrixd.xml -func (gl *GL) MultTransposeMatrixd(m []float64) { - C.gl1_5_glMultTransposeMatrixd(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultTransposeMatrixf.xml -func (gl *GL) MultTransposeMatrixf(m []float32) { - C.gl1_5_glMultTransposeMatrixf(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLoadTransposeMatrixd.xml -func (gl *GL) LoadTransposeMatrixd(m []float64) { - C.gl1_5_glLoadTransposeMatrixd(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLoadTransposeMatrixf.xml -func (gl *GL) LoadTransposeMatrixf(m []float32) { - C.gl1_5_glLoadTransposeMatrixf(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord4sv.xml -func (gl *GL) MultiTexCoord4sv(target glbase.Enum, v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_5_glMultiTexCoord4sv(gl.funcs, C.GLenum(target), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord4s.xml -func (gl *GL) MultiTexCoord4s(target glbase.Enum, s, t, r, q int16) { - C.gl1_5_glMultiTexCoord4s(gl.funcs, C.GLenum(target), C.GLshort(s), C.GLshort(t), C.GLshort(r), C.GLshort(q)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord4iv.xml -func (gl *GL) MultiTexCoord4iv(target glbase.Enum, v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_5_glMultiTexCoord4iv(gl.funcs, C.GLenum(target), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord4i.xml -func (gl *GL) MultiTexCoord4i(target glbase.Enum, s, t, r, q int32) { - C.gl1_5_glMultiTexCoord4i(gl.funcs, C.GLenum(target), C.GLint(s), C.GLint(t), C.GLint(r), C.GLint(q)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord4fv.xml -func (gl *GL) MultiTexCoord4fv(target glbase.Enum, v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_5_glMultiTexCoord4fv(gl.funcs, C.GLenum(target), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord4f.xml -func (gl *GL) MultiTexCoord4f(target glbase.Enum, s, t, r, q float32) { - C.gl1_5_glMultiTexCoord4f(gl.funcs, C.GLenum(target), C.GLfloat(s), C.GLfloat(t), C.GLfloat(r), C.GLfloat(q)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord4dv.xml -func (gl *GL) MultiTexCoord4dv(target glbase.Enum, v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl1_5_glMultiTexCoord4dv(gl.funcs, C.GLenum(target), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord4d.xml -func (gl *GL) MultiTexCoord4d(target glbase.Enum, s, t, r, q float64) { - C.gl1_5_glMultiTexCoord4d(gl.funcs, C.GLenum(target), C.GLdouble(s), C.GLdouble(t), C.GLdouble(r), C.GLdouble(q)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord3sv.xml -func (gl *GL) MultiTexCoord3sv(target glbase.Enum, v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_5_glMultiTexCoord3sv(gl.funcs, C.GLenum(target), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord3s.xml -func (gl *GL) MultiTexCoord3s(target glbase.Enum, s, t, r int16) { - C.gl1_5_glMultiTexCoord3s(gl.funcs, C.GLenum(target), C.GLshort(s), C.GLshort(t), C.GLshort(r)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord3iv.xml -func (gl *GL) MultiTexCoord3iv(target glbase.Enum, v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_5_glMultiTexCoord3iv(gl.funcs, C.GLenum(target), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord3i.xml -func (gl *GL) MultiTexCoord3i(target glbase.Enum, s, t, r int32) { - C.gl1_5_glMultiTexCoord3i(gl.funcs, C.GLenum(target), C.GLint(s), C.GLint(t), C.GLint(r)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord3fv.xml -func (gl *GL) MultiTexCoord3fv(target glbase.Enum, v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_5_glMultiTexCoord3fv(gl.funcs, C.GLenum(target), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord3f.xml -func (gl *GL) MultiTexCoord3f(target glbase.Enum, s, t, r float32) { - C.gl1_5_glMultiTexCoord3f(gl.funcs, C.GLenum(target), C.GLfloat(s), C.GLfloat(t), C.GLfloat(r)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord3dv.xml -func (gl *GL) MultiTexCoord3dv(target glbase.Enum, v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_5_glMultiTexCoord3dv(gl.funcs, C.GLenum(target), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord3d.xml -func (gl *GL) MultiTexCoord3d(target glbase.Enum, s, t, r float64) { - C.gl1_5_glMultiTexCoord3d(gl.funcs, C.GLenum(target), C.GLdouble(s), C.GLdouble(t), C.GLdouble(r)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord2sv.xml -func (gl *GL) MultiTexCoord2sv(target glbase.Enum, v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_5_glMultiTexCoord2sv(gl.funcs, C.GLenum(target), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord2s.xml -func (gl *GL) MultiTexCoord2s(target glbase.Enum, s, t int16) { - C.gl1_5_glMultiTexCoord2s(gl.funcs, C.GLenum(target), C.GLshort(s), C.GLshort(t)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord2iv.xml -func (gl *GL) MultiTexCoord2iv(target glbase.Enum, v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_5_glMultiTexCoord2iv(gl.funcs, C.GLenum(target), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord2i.xml -func (gl *GL) MultiTexCoord2i(target glbase.Enum, s, t int32) { - C.gl1_5_glMultiTexCoord2i(gl.funcs, C.GLenum(target), C.GLint(s), C.GLint(t)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord2fv.xml -func (gl *GL) MultiTexCoord2fv(target glbase.Enum, v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_5_glMultiTexCoord2fv(gl.funcs, C.GLenum(target), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord2f.xml -func (gl *GL) MultiTexCoord2f(target glbase.Enum, s, t float32) { - C.gl1_5_glMultiTexCoord2f(gl.funcs, C.GLenum(target), C.GLfloat(s), C.GLfloat(t)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord2dv.xml -func (gl *GL) MultiTexCoord2dv(target glbase.Enum, v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_5_glMultiTexCoord2dv(gl.funcs, C.GLenum(target), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord2d.xml -func (gl *GL) MultiTexCoord2d(target glbase.Enum, s, t float64) { - C.gl1_5_glMultiTexCoord2d(gl.funcs, C.GLenum(target), C.GLdouble(s), C.GLdouble(t)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord1sv.xml -func (gl *GL) MultiTexCoord1sv(target glbase.Enum, v []int16) { - C.gl1_5_glMultiTexCoord1sv(gl.funcs, C.GLenum(target), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord1s.xml -func (gl *GL) MultiTexCoord1s(target glbase.Enum, s int16) { - C.gl1_5_glMultiTexCoord1s(gl.funcs, C.GLenum(target), C.GLshort(s)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord1iv.xml -func (gl *GL) MultiTexCoord1iv(target glbase.Enum, v []int32) { - C.gl1_5_glMultiTexCoord1iv(gl.funcs, C.GLenum(target), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord1i.xml -func (gl *GL) MultiTexCoord1i(target glbase.Enum, s int32) { - C.gl1_5_glMultiTexCoord1i(gl.funcs, C.GLenum(target), C.GLint(s)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord1fv.xml -func (gl *GL) MultiTexCoord1fv(target glbase.Enum, v []float32) { - C.gl1_5_glMultiTexCoord1fv(gl.funcs, C.GLenum(target), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord1f.xml -func (gl *GL) MultiTexCoord1f(target glbase.Enum, s float32) { - C.gl1_5_glMultiTexCoord1f(gl.funcs, C.GLenum(target), C.GLfloat(s)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord1dv.xml -func (gl *GL) MultiTexCoord1dv(target glbase.Enum, v []float64) { - C.gl1_5_glMultiTexCoord1dv(gl.funcs, C.GLenum(target), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord1d.xml -func (gl *GL) MultiTexCoord1d(target glbase.Enum, s float64) { - C.gl1_5_glMultiTexCoord1d(gl.funcs, C.GLenum(target), C.GLdouble(s)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glClientActiveTexture.xml -func (gl *GL) ClientActiveTexture(texture glbase.Enum) { - C.gl1_5_glClientActiveTexture(gl.funcs, C.GLenum(texture)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glWindowPos3sv.xml -func (gl *GL) WindowPos3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_5_glWindowPos3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glWindowPos3s.xml -func (gl *GL) WindowPos3s(x, y, z int16) { - C.gl1_5_glWindowPos3s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glWindowPos3iv.xml -func (gl *GL) WindowPos3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_5_glWindowPos3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glWindowPos3i.xml -func (gl *GL) WindowPos3i(x, y, z int) { - C.gl1_5_glWindowPos3i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glWindowPos3fv.xml -func (gl *GL) WindowPos3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_5_glWindowPos3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glWindowPos3f.xml -func (gl *GL) WindowPos3f(x, y, z float32) { - C.gl1_5_glWindowPos3f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glWindowPos3dv.xml -func (gl *GL) WindowPos3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_5_glWindowPos3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glWindowPos3d.xml -func (gl *GL) WindowPos3d(x, y, z float64) { - C.gl1_5_glWindowPos3d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glWindowPos2sv.xml -func (gl *GL) WindowPos2sv(v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_5_glWindowPos2sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glWindowPos2s.xml -func (gl *GL) WindowPos2s(x, y int16) { - C.gl1_5_glWindowPos2s(gl.funcs, C.GLshort(x), C.GLshort(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glWindowPos2iv.xml -func (gl *GL) WindowPos2iv(v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_5_glWindowPos2iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glWindowPos2i.xml -func (gl *GL) WindowPos2i(x, y int) { - C.gl1_5_glWindowPos2i(gl.funcs, C.GLint(x), C.GLint(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glWindowPos2fv.xml -func (gl *GL) WindowPos2fv(v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_5_glWindowPos2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glWindowPos2f.xml -func (gl *GL) WindowPos2f(x, y float32) { - C.gl1_5_glWindowPos2f(gl.funcs, C.GLfloat(x), C.GLfloat(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glWindowPos2dv.xml -func (gl *GL) WindowPos2dv(v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl1_5_glWindowPos2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glWindowPos2d.xml -func (gl *GL) WindowPos2d(x, y float64) { - C.gl1_5_glWindowPos2d(gl.funcs, C.GLdouble(x), C.GLdouble(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColorPointer.xml -func (gl *GL) SecondaryColorPointer(size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl1_5_glSecondaryColorPointer(gl.funcs, C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColor3usv.xml -func (gl *GL) SecondaryColor3usv(v []uint16) { - C.gl1_5_glSecondaryColor3usv(gl.funcs, (*C.GLushort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColor3us.xml -func (gl *GL) SecondaryColor3us(red, green, blue uint16) { - C.gl1_5_glSecondaryColor3us(gl.funcs, C.GLushort(red), C.GLushort(green), C.GLushort(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColor3uiv.xml -func (gl *GL) SecondaryColor3uiv(v []uint32) { - C.gl1_5_glSecondaryColor3uiv(gl.funcs, (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColor3ui.xml -func (gl *GL) SecondaryColor3ui(red, green, blue uint32) { - C.gl1_5_glSecondaryColor3ui(gl.funcs, C.GLuint(red), C.GLuint(green), C.GLuint(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColor3ubv.xml -func (gl *GL) SecondaryColor3ubv(v []uint8) { - C.gl1_5_glSecondaryColor3ubv(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColor3ub.xml -func (gl *GL) SecondaryColor3ub(red, green, blue uint8) { - C.gl1_5_glSecondaryColor3ub(gl.funcs, C.GLubyte(red), C.GLubyte(green), C.GLubyte(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColor3sv.xml -func (gl *GL) SecondaryColor3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_5_glSecondaryColor3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColor3s.xml -func (gl *GL) SecondaryColor3s(red, green, blue int16) { - C.gl1_5_glSecondaryColor3s(gl.funcs, C.GLshort(red), C.GLshort(green), C.GLshort(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColor3iv.xml -func (gl *GL) SecondaryColor3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_5_glSecondaryColor3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColor3i.xml -func (gl *GL) SecondaryColor3i(red, green, blue int32) { - C.gl1_5_glSecondaryColor3i(gl.funcs, C.GLint(red), C.GLint(green), C.GLint(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColor3fv.xml -func (gl *GL) SecondaryColor3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_5_glSecondaryColor3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColor3f.xml -func (gl *GL) SecondaryColor3f(red, green, blue float32) { - C.gl1_5_glSecondaryColor3f(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColor3dv.xml -func (gl *GL) SecondaryColor3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl1_5_glSecondaryColor3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColor3d.xml -func (gl *GL) SecondaryColor3d(red, green, blue float64) { - C.gl1_5_glSecondaryColor3d(gl.funcs, C.GLdouble(red), C.GLdouble(green), C.GLdouble(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColor3bv.xml -func (gl *GL) SecondaryColor3bv(v []byte) { - C.gl1_5_glSecondaryColor3bv(gl.funcs, (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColor3b.xml -func (gl *GL) SecondaryColor3b(red, green, blue byte) { - C.gl1_5_glSecondaryColor3b(gl.funcs, C.GLbyte(red), C.GLbyte(green), C.GLbyte(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFogCoordPointer.xml -func (gl *GL) FogCoordPointer(gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl1_5_glFogCoordPointer(gl.funcs, C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFogCoorddv.xml -func (gl *GL) FogCoorddv(coord []float64) { - C.gl1_5_glFogCoorddv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&coord[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFogCoordd.xml -func (gl *GL) FogCoordd(coord float64) { - C.gl1_5_glFogCoordd(gl.funcs, C.GLdouble(coord)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFogCoordfv.xml -func (gl *GL) FogCoordfv(coord []float32) { - C.gl1_5_glFogCoordfv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&coord[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFogCoordf.xml -func (gl *GL) FogCoordf(coord float32) { - C.gl1_5_glFogCoordf(gl.funcs, C.GLfloat(coord)) -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/2.0/funcs.cpp b/Godeps/_workspace/src/github.com/obscuren/qml/gl/2.0/funcs.cpp deleted file mode 100644 index 622f590459..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/2.0/funcs.cpp +++ /dev/null @@ -1,3444 +0,0 @@ - -// ** file automatically generated by glgen -- do not edit manually ** - -#include -#include - -#include "funcs.h" - -void *gl2_0_funcs() { - QOpenGLFunctions_2_0* funcs = QOpenGLContext::currentContext()->versionFunctions(); - if (!funcs) { - return 0; - } - funcs->initializeOpenGLFunctions(); - return funcs; -} - - -void gl2_0_glViewport(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glViewport(x, y, width, height); -} - -void gl2_0_glDepthRange(void *_glfuncs, GLdouble nearVal, GLdouble farVal) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthRange(nearVal, farVal); -} - -GLboolean gl2_0_glIsEnabled(void *_glfuncs, GLenum cap) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsEnabled(cap); -} - -void gl2_0_glGetTexLevelParameteriv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLint* params) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexLevelParameteriv(target, level, pname, params); -} - -void gl2_0_glGetTexLevelParameterfv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexLevelParameterfv(target, level, pname, params); -} - -void gl2_0_glGetTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameteriv(target, pname, params); -} - -void gl2_0_glGetTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameterfv(target, pname, params); -} - -void gl2_0_glGetTexImage(void *_glfuncs, GLenum target, GLint level, GLenum format, GLenum gltype, GLvoid* pixels) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexImage(target, level, format, gltype, pixels); -} - -void gl2_0_glGetIntegerv(void *_glfuncs, GLenum pname, GLint* params) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetIntegerv(pname, params); -} - -void gl2_0_glGetFloatv(void *_glfuncs, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetFloatv(pname, params); -} - -GLenum gl2_0_glGetError(void *_glfuncs) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetError(); -} - -void gl2_0_glGetDoublev(void *_glfuncs, GLenum pname, GLdouble* params) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetDoublev(pname, params); -} - -void gl2_0_glGetBooleanv(void *_glfuncs, GLenum pname, GLboolean* params) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBooleanv(pname, params); -} - -void gl2_0_glReadPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum gltype, GLvoid* pixels) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glReadPixels(x, y, width, height, format, gltype, pixels); -} - -void gl2_0_glReadBuffer(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glReadBuffer(mode); -} - -void gl2_0_glPixelStorei(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelStorei(pname, param); -} - -void gl2_0_glPixelStoref(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelStoref(pname, param); -} - -void gl2_0_glDepthFunc(void *_glfuncs, GLenum glfunc) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthFunc(glfunc); -} - -void gl2_0_glStencilOp(void *_glfuncs, GLenum fail, GLenum zfail, GLenum zpass) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilOp(fail, zfail, zpass); -} - -void gl2_0_glStencilFunc(void *_glfuncs, GLenum glfunc, GLint ref, GLuint mask) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilFunc(glfunc, ref, mask); -} - -void gl2_0_glLogicOp(void *_glfuncs, GLenum opcode) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLogicOp(opcode); -} - -void gl2_0_glBlendFunc(void *_glfuncs, GLenum sfactor, GLenum dfactor) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendFunc(sfactor, dfactor); -} - -void gl2_0_glFlush(void *_glfuncs) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFlush(); -} - -void gl2_0_glFinish(void *_glfuncs) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFinish(); -} - -void gl2_0_glEnable(void *_glfuncs, GLenum cap) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnable(cap); -} - -void gl2_0_glDisable(void *_glfuncs, GLenum cap) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDisable(cap); -} - -void gl2_0_glDepthMask(void *_glfuncs, GLboolean flag) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthMask(flag); -} - -void gl2_0_glColorMask(void *_glfuncs, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorMask(red, green, blue, alpha); -} - -void gl2_0_glStencilMask(void *_glfuncs, GLuint mask) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilMask(mask); -} - -void gl2_0_glClearDepth(void *_glfuncs, GLdouble depth) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearDepth(depth); -} - -void gl2_0_glClearStencil(void *_glfuncs, GLint s) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearStencil(s); -} - -void gl2_0_glClearColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearColor(red, green, blue, alpha); -} - -void gl2_0_glClear(void *_glfuncs, GLbitfield mask) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClear(mask); -} - -void gl2_0_glDrawBuffer(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawBuffer(mode); -} - -void gl2_0_glTexImage2D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage2D(target, level, internalFormat, width, height, border, format, gltype, pixels); -} - -void gl2_0_glTexImage1D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage1D(target, level, internalFormat, width, border, format, gltype, pixels); -} - -void gl2_0_glTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameteriv(target, pname, params); -} - -void gl2_0_glTexParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint param) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameteri(target, pname, param); -} - -void gl2_0_glTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterfv(target, pname, params); -} - -void gl2_0_glTexParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterf(target, pname, param); -} - -void gl2_0_glScissor(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScissor(x, y, width, height); -} - -void gl2_0_glPolygonMode(void *_glfuncs, GLenum face, GLenum mode) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPolygonMode(face, mode); -} - -void gl2_0_glPointSize(void *_glfuncs, GLfloat size) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointSize(size); -} - -void gl2_0_glLineWidth(void *_glfuncs, GLfloat width) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLineWidth(width); -} - -void gl2_0_glHint(void *_glfuncs, GLenum target, GLenum mode) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glHint(target, mode); -} - -void gl2_0_glFrontFace(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFrontFace(mode); -} - -void gl2_0_glCullFace(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCullFace(mode); -} - -void gl2_0_glIndexubv(void *_glfuncs, const GLubyte* c) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexubv(c); -} - -void gl2_0_glIndexub(void *_glfuncs, GLubyte c) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexub(c); -} - -GLboolean gl2_0_glIsTexture(void *_glfuncs, GLuint texture) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsTexture(texture); -} - -void gl2_0_glGenTextures(void *_glfuncs, GLsizei n, GLuint* textures) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenTextures(n, textures); -} - -void gl2_0_glDeleteTextures(void *_glfuncs, GLsizei n, const GLuint* textures) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteTextures(n, textures); -} - -void gl2_0_glBindTexture(void *_glfuncs, GLenum target, GLuint texture) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindTexture(target, texture); -} - -void gl2_0_glTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, gltype, pixels); -} - -void gl2_0_glTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexSubImage1D(target, level, xoffset, width, format, gltype, pixels); -} - -void gl2_0_glCopyTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height); -} - -void gl2_0_glCopyTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexSubImage1D(target, level, xoffset, x, y, width); -} - -void gl2_0_glCopyTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexImage2D(target, level, internalFormat, x, y, width, height, border); -} - -void gl2_0_glCopyTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexImage1D(target, level, internalFormat, x, y, width, border); -} - -void gl2_0_glPolygonOffset(void *_glfuncs, GLfloat factor, GLfloat units) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPolygonOffset(factor, units); -} - -void gl2_0_glDrawElements(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElements(mode, count, gltype, indices); -} - -void gl2_0_glDrawArrays(void *_glfuncs, GLenum mode, GLint first, GLsizei count) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawArrays(mode, first, count); -} - -void gl2_0_glCopyTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexSubImage3D(target, level, xoffset, yoffset, zoffset, x, y, width, height); -} - -void gl2_0_glTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, gltype, pixels); -} - -void gl2_0_glTexImage3D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage3D(target, level, internalFormat, width, height, depth, border, format, gltype, pixels); -} - -void gl2_0_glDrawRangeElements(void *_glfuncs, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum gltype, const GLvoid* indices) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawRangeElements(mode, start, end, count, gltype, indices); -} - -void gl2_0_glBlendEquation(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendEquation(mode); -} - -void gl2_0_glBlendColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendColor(red, green, blue, alpha); -} - -void gl2_0_glGetCompressedTexImage(void *_glfuncs, GLenum target, GLint level, GLvoid* img) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetCompressedTexImage(target, level, img); -} - -void gl2_0_glCompressedTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexSubImage1D(target, level, xoffset, width, format, imageSize, data); -} - -void gl2_0_glCompressedTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data); -} - -void gl2_0_glCompressedTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data); -} - -void gl2_0_glCompressedTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexImage1D(target, level, internalFormat, width, border, imageSize, data); -} - -void gl2_0_glCompressedTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexImage2D(target, level, internalFormat, width, height, border, imageSize, data); -} - -void gl2_0_glCompressedTexImage3D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexImage3D(target, level, internalFormat, width, height, depth, border, imageSize, data); -} - -void gl2_0_glSampleCoverage(void *_glfuncs, GLfloat value, GLboolean invert) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSampleCoverage(value, invert); -} - -void gl2_0_glActiveTexture(void *_glfuncs, GLenum texture) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glActiveTexture(texture); -} - -void gl2_0_glPointParameteriv(void *_glfuncs, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameteriv(pname, params); -} - -void gl2_0_glPointParameteri(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameteri(pname, param); -} - -void gl2_0_glPointParameterfv(void *_glfuncs, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameterfv(pname, params); -} - -void gl2_0_glPointParameterf(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameterf(pname, param); -} - -void gl2_0_glMultiDrawArrays(void *_glfuncs, GLenum mode, const GLint* first, const GLsizei* count, GLsizei drawcount) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiDrawArrays(mode, first, count, drawcount); -} - -void gl2_0_glBlendFuncSeparate(void *_glfuncs, GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendFuncSeparate(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha); -} - -void gl2_0_glGetBufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBufferParameteriv(target, pname, params); -} - -GLboolean gl2_0_glUnmapBuffer(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glUnmapBuffer(target); -} - -void gl2_0_glGetBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, GLvoid* data) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBufferSubData(target, offset, size, data); -} - -void gl2_0_glBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBufferSubData(target, offset, size, data); -} - -void gl2_0_glBufferData(void *_glfuncs, GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBufferData(target, size, data, usage); -} - -GLboolean gl2_0_glIsBuffer(void *_glfuncs, GLuint buffer) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsBuffer(buffer); -} - -void gl2_0_glGenBuffers(void *_glfuncs, GLsizei n, GLuint* buffers) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenBuffers(n, buffers); -} - -void gl2_0_glDeleteBuffers(void *_glfuncs, GLsizei n, const GLuint* buffers) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteBuffers(n, buffers); -} - -void gl2_0_glBindBuffer(void *_glfuncs, GLenum target, GLuint buffer) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindBuffer(target, buffer); -} - -void gl2_0_glGetQueryObjectuiv(void *_glfuncs, GLuint id, GLenum pname, GLuint* params) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryObjectuiv(id, pname, params); -} - -void gl2_0_glGetQueryObjectiv(void *_glfuncs, GLuint id, GLenum pname, GLint* params) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryObjectiv(id, pname, params); -} - -void gl2_0_glGetQueryiv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryiv(target, pname, params); -} - -void gl2_0_glEndQuery(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndQuery(target); -} - -void gl2_0_glBeginQuery(void *_glfuncs, GLenum target, GLuint id) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBeginQuery(target, id); -} - -GLboolean gl2_0_glIsQuery(void *_glfuncs, GLuint id) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsQuery(id); -} - -void gl2_0_glDeleteQueries(void *_glfuncs, GLsizei n, const GLuint* ids) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteQueries(n, ids); -} - -void gl2_0_glGenQueries(void *_glfuncs, GLsizei n, GLuint* ids) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenQueries(n, ids); -} - -void gl2_0_glVertexAttribPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLboolean normalized, GLsizei stride, const GLvoid* offset) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribPointer(index, size, gltype, normalized, stride, offset); -} - -void gl2_0_glValidateProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glValidateProgram(program); -} - -void gl2_0_glUniformMatrix4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4fv(location, count, transpose, value); -} - -void gl2_0_glUniformMatrix3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3fv(location, count, transpose, value); -} - -void gl2_0_glUniformMatrix2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2fv(location, count, transpose, value); -} - -void gl2_0_glUniform4iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4iv(location, count, value); -} - -void gl2_0_glUniform3iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3iv(location, count, value); -} - -void gl2_0_glUniform2iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2iv(location, count, value); -} - -void gl2_0_glUniform1iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1iv(location, count, value); -} - -void gl2_0_glUniform4fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4fv(location, count, value); -} - -void gl2_0_glUniform3fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3fv(location, count, value); -} - -void gl2_0_glUniform2fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2fv(location, count, value); -} - -void gl2_0_glUniform1fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1fv(location, count, value); -} - -void gl2_0_glUniform4i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2, GLint v3) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4i(location, v0, v1, v2, v3); -} - -void gl2_0_glUniform3i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3i(location, v0, v1, v2); -} - -void gl2_0_glUniform2i(void *_glfuncs, GLint location, GLint v0, GLint v1) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2i(location, v0, v1); -} - -void gl2_0_glUniform1i(void *_glfuncs, GLint location, GLint v0) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1i(location, v0); -} - -void gl2_0_glUniform4f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4f(location, v0, v1, v2, v3); -} - -void gl2_0_glUniform3f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3f(location, v0, v1, v2); -} - -void gl2_0_glUniform2f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2f(location, v0, v1); -} - -void gl2_0_glUniform1f(void *_glfuncs, GLint location, GLfloat v0) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1f(location, v0); -} - -void gl2_0_glUseProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUseProgram(program); -} - -void gl2_0_glShaderSource(void *_glfuncs, GLuint shader, GLsizei count, const GLchar** source, const GLint* length) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glShaderSource(shader, count, source, length); -} - -void gl2_0_glLinkProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLinkProgram(program); -} - -GLboolean gl2_0_glIsShader(void *_glfuncs, GLuint shader) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsShader(shader); -} - -GLboolean gl2_0_glIsProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsProgram(program); -} - -void gl2_0_glGetVertexAttribiv(void *_glfuncs, GLuint index, GLenum pname, GLint* params) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribiv(index, pname, params); -} - -void gl2_0_glGetVertexAttribfv(void *_glfuncs, GLuint index, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribfv(index, pname, params); -} - -void gl2_0_glGetVertexAttribdv(void *_glfuncs, GLuint index, GLenum pname, GLdouble* params) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribdv(index, pname, params); -} - -void gl2_0_glGetUniformiv(void *_glfuncs, GLuint program, GLint location, GLint* params) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetUniformiv(program, location, params); -} - -void gl2_0_glGetUniformfv(void *_glfuncs, GLuint program, GLint location, GLfloat* params) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetUniformfv(program, location, params); -} - -GLint gl2_0_glGetUniformLocation(void *_glfuncs, GLuint program, const GLchar* name) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetUniformLocation(program, name); -} - -void gl2_0_glGetShaderSource(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* source) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetShaderSource(shader, bufSize, length, source); -} - -void gl2_0_glGetShaderInfoLog(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* infoLog) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetShaderInfoLog(shader, bufSize, length, infoLog); -} - -void gl2_0_glGetShaderiv(void *_glfuncs, GLuint shader, GLenum pname, GLint* params) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetShaderiv(shader, pname, params); -} - -void gl2_0_glGetProgramInfoLog(void *_glfuncs, GLuint program, GLsizei bufSize, GLsizei* length, GLchar* infoLog) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetProgramInfoLog(program, bufSize, length, infoLog); -} - -void gl2_0_glGetProgramiv(void *_glfuncs, GLuint program, GLenum pname, GLint* params) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetProgramiv(program, pname, params); -} - -GLint gl2_0_glGetAttribLocation(void *_glfuncs, GLuint program, const GLchar* name) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetAttribLocation(program, name); -} - -void gl2_0_glGetAttachedShaders(void *_glfuncs, GLuint program, GLsizei maxCount, GLsizei* count, GLuint* obj) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetAttachedShaders(program, maxCount, count, obj); -} - -void gl2_0_glGetActiveUniform(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniform(program, index, bufSize, length, size, gltype, name); -} - -void gl2_0_glGetActiveAttrib(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveAttrib(program, index, bufSize, length, size, gltype, name); -} - -void gl2_0_glEnableVertexAttribArray(void *_glfuncs, GLuint index) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnableVertexAttribArray(index); -} - -void gl2_0_glDisableVertexAttribArray(void *_glfuncs, GLuint index) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDisableVertexAttribArray(index); -} - -void gl2_0_glDetachShader(void *_glfuncs, GLuint program, GLuint shader) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDetachShader(program, shader); -} - -void gl2_0_glDeleteShader(void *_glfuncs, GLuint shader) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteShader(shader); -} - -void gl2_0_glDeleteProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteProgram(program); -} - -GLuint gl2_0_glCreateShader(void *_glfuncs, GLenum gltype) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glCreateShader(gltype); -} - -GLuint gl2_0_glCreateProgram(void *_glfuncs) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glCreateProgram(); -} - -void gl2_0_glCompileShader(void *_glfuncs, GLuint shader) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompileShader(shader); -} - -void gl2_0_glBindAttribLocation(void *_glfuncs, GLuint program, GLuint index, const GLchar* name) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindAttribLocation(program, index, name); -} - -void gl2_0_glAttachShader(void *_glfuncs, GLuint program, GLuint shader) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glAttachShader(program, shader); -} - -void gl2_0_glStencilMaskSeparate(void *_glfuncs, GLenum face, GLuint mask) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilMaskSeparate(face, mask); -} - -void gl2_0_glStencilFuncSeparate(void *_glfuncs, GLenum face, GLenum glfunc, GLint ref, GLuint mask) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilFuncSeparate(face, glfunc, ref, mask); -} - -void gl2_0_glStencilOpSeparate(void *_glfuncs, GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilOpSeparate(face, sfail, dpfail, dppass); -} - -void gl2_0_glDrawBuffers(void *_glfuncs, GLsizei n, const GLenum* bufs) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawBuffers(n, bufs); -} - -void gl2_0_glBlendEquationSeparate(void *_glfuncs, GLenum modeRGB, GLenum modeAlpha) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendEquationSeparate(modeRGB, modeAlpha); -} - -void gl2_0_glTranslatef(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTranslatef(x, y, z); -} - -void gl2_0_glTranslated(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTranslated(x, y, z); -} - -void gl2_0_glScalef(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScalef(x, y, z); -} - -void gl2_0_glScaled(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScaled(x, y, z); -} - -void gl2_0_glRotatef(void *_glfuncs, GLfloat angle, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRotatef(angle, x, y, z); -} - -void gl2_0_glRotated(void *_glfuncs, GLdouble angle, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRotated(angle, x, y, z); -} - -void gl2_0_glPushMatrix(void *_glfuncs) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPushMatrix(); -} - -void gl2_0_glPopMatrix(void *_glfuncs) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPopMatrix(); -} - -void gl2_0_glOrtho(void *_glfuncs, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glOrtho(left, right, bottom, top, zNear, zFar); -} - -void gl2_0_glMultMatrixd(void *_glfuncs, const GLdouble* m) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultMatrixd(m); -} - -void gl2_0_glMultMatrixf(void *_glfuncs, const GLfloat* m) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultMatrixf(m); -} - -void gl2_0_glMatrixMode(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMatrixMode(mode); -} - -void gl2_0_glLoadMatrixd(void *_glfuncs, const GLdouble* m) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadMatrixd(m); -} - -void gl2_0_glLoadMatrixf(void *_glfuncs, const GLfloat* m) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadMatrixf(m); -} - -void gl2_0_glLoadIdentity(void *_glfuncs) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadIdentity(); -} - -void gl2_0_glFrustum(void *_glfuncs, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFrustum(left, right, bottom, top, zNear, zFar); -} - -GLboolean gl2_0_glIsList(void *_glfuncs, GLuint list) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsList(list); -} - -void gl2_0_glGetTexGeniv(void *_glfuncs, GLenum coord, GLenum pname, GLint* params) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexGeniv(coord, pname, params); -} - -void gl2_0_glGetTexGenfv(void *_glfuncs, GLenum coord, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexGenfv(coord, pname, params); -} - -void gl2_0_glGetTexGendv(void *_glfuncs, GLenum coord, GLenum pname, GLdouble* params) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexGendv(coord, pname, params); -} - -void gl2_0_glGetTexEnviv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexEnviv(target, pname, params); -} - -void gl2_0_glGetTexEnvfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexEnvfv(target, pname, params); -} - -void gl2_0_glGetPolygonStipple(void *_glfuncs, GLubyte* mask) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetPolygonStipple(mask); -} - -void gl2_0_glGetPixelMapusv(void *_glfuncs, GLenum glmap, GLushort* values) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetPixelMapusv(glmap, values); -} - -void gl2_0_glGetPixelMapuiv(void *_glfuncs, GLenum glmap, GLuint* values) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetPixelMapuiv(glmap, values); -} - -void gl2_0_glGetPixelMapfv(void *_glfuncs, GLenum glmap, GLfloat* values) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetPixelMapfv(glmap, values); -} - -void gl2_0_glGetMaterialiv(void *_glfuncs, GLenum face, GLenum pname, GLint* params) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMaterialiv(face, pname, params); -} - -void gl2_0_glGetMaterialfv(void *_glfuncs, GLenum face, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMaterialfv(face, pname, params); -} - -void gl2_0_glGetMapiv(void *_glfuncs, GLenum target, GLenum query, GLint* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMapiv(target, query, v); -} - -void gl2_0_glGetMapfv(void *_glfuncs, GLenum target, GLenum query, GLfloat* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMapfv(target, query, v); -} - -void gl2_0_glGetMapdv(void *_glfuncs, GLenum target, GLenum query, GLdouble* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMapdv(target, query, v); -} - -void gl2_0_glGetLightiv(void *_glfuncs, GLenum light, GLenum pname, GLint* params) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetLightiv(light, pname, params); -} - -void gl2_0_glGetLightfv(void *_glfuncs, GLenum light, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetLightfv(light, pname, params); -} - -void gl2_0_glGetClipPlane(void *_glfuncs, GLenum plane, GLdouble* equation) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetClipPlane(plane, equation); -} - -void gl2_0_glDrawPixels(void *_glfuncs, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawPixels(width, height, format, gltype, pixels); -} - -void gl2_0_glCopyPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum gltype) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyPixels(x, y, width, height, gltype); -} - -void gl2_0_glPixelMapusv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLushort* values) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelMapusv(glmap, mapsize, values); -} - -void gl2_0_glPixelMapuiv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLuint* values) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelMapuiv(glmap, mapsize, values); -} - -void gl2_0_glPixelMapfv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLfloat* values) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelMapfv(glmap, mapsize, values); -} - -void gl2_0_glPixelTransferi(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelTransferi(pname, param); -} - -void gl2_0_glPixelTransferf(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelTransferf(pname, param); -} - -void gl2_0_glPixelZoom(void *_glfuncs, GLfloat xfactor, GLfloat yfactor) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelZoom(xfactor, yfactor); -} - -void gl2_0_glAlphaFunc(void *_glfuncs, GLenum glfunc, GLfloat ref) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glAlphaFunc(glfunc, ref); -} - -void gl2_0_glEvalPoint2(void *_glfuncs, GLint i, GLint j) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalPoint2(i, j); -} - -void gl2_0_glEvalMesh2(void *_glfuncs, GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalMesh2(mode, i1, i2, j1, j2); -} - -void gl2_0_glEvalPoint1(void *_glfuncs, GLint i) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalPoint1(i); -} - -void gl2_0_glEvalMesh1(void *_glfuncs, GLenum mode, GLint i1, GLint i2) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalMesh1(mode, i1, i2); -} - -void gl2_0_glEvalCoord2fv(void *_glfuncs, const GLfloat* u) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord2fv(u); -} - -void gl2_0_glEvalCoord2f(void *_glfuncs, GLfloat u, GLfloat v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord2f(u, v); -} - -void gl2_0_glEvalCoord2dv(void *_glfuncs, const GLdouble* u) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord2dv(u); -} - -void gl2_0_glEvalCoord2d(void *_glfuncs, GLdouble u, GLdouble v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord2d(u, v); -} - -void gl2_0_glEvalCoord1fv(void *_glfuncs, const GLfloat* u) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord1fv(u); -} - -void gl2_0_glEvalCoord1f(void *_glfuncs, GLfloat u) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord1f(u); -} - -void gl2_0_glEvalCoord1dv(void *_glfuncs, const GLdouble* u) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord1dv(u); -} - -void gl2_0_glEvalCoord1d(void *_glfuncs, GLdouble u) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord1d(u); -} - -void gl2_0_glMapGrid2f(void *_glfuncs, GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMapGrid2f(un, u1, u2, vn, v1, v2); -} - -void gl2_0_glMapGrid2d(void *_glfuncs, GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMapGrid2d(un, u1, u2, vn, v1, v2); -} - -void gl2_0_glMapGrid1f(void *_glfuncs, GLint un, GLfloat u1, GLfloat u2) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMapGrid1f(un, u1, u2); -} - -void gl2_0_glMapGrid1d(void *_glfuncs, GLint un, GLdouble u1, GLdouble u2) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMapGrid1d(un, u1, u2); -} - -void gl2_0_glMap2f(void *_glfuncs, GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat* points) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMap2f(target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points); -} - -void gl2_0_glMap2d(void *_glfuncs, GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble* points) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMap2d(target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points); -} - -void gl2_0_glMap1f(void *_glfuncs, GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat* points) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMap1f(target, u1, u2, stride, order, points); -} - -void gl2_0_glMap1d(void *_glfuncs, GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble* points) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMap1d(target, u1, u2, stride, order, points); -} - -void gl2_0_glPushAttrib(void *_glfuncs, GLbitfield mask) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPushAttrib(mask); -} - -void gl2_0_glPopAttrib(void *_glfuncs) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPopAttrib(); -} - -void gl2_0_glAccum(void *_glfuncs, GLenum op, GLfloat value) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glAccum(op, value); -} - -void gl2_0_glIndexMask(void *_glfuncs, GLuint mask) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexMask(mask); -} - -void gl2_0_glClearIndex(void *_glfuncs, GLfloat c) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearIndex(c); -} - -void gl2_0_glClearAccum(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearAccum(red, green, blue, alpha); -} - -void gl2_0_glPushName(void *_glfuncs, GLuint name) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPushName(name); -} - -void gl2_0_glPopName(void *_glfuncs) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPopName(); -} - -void gl2_0_glPassThrough(void *_glfuncs, GLfloat token) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPassThrough(token); -} - -void gl2_0_glLoadName(void *_glfuncs, GLuint name) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadName(name); -} - -void gl2_0_glInitNames(void *_glfuncs) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glInitNames(); -} - -GLint gl2_0_glRenderMode(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glRenderMode(mode); -} - -void gl2_0_glSelectBuffer(void *_glfuncs, GLsizei size, GLuint* buffer) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSelectBuffer(size, buffer); -} - -void gl2_0_glFeedbackBuffer(void *_glfuncs, GLsizei size, GLenum gltype, GLfloat* buffer) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFeedbackBuffer(size, gltype, buffer); -} - -void gl2_0_glTexGeniv(void *_glfuncs, GLenum coord, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGeniv(coord, pname, params); -} - -void gl2_0_glTexGeni(void *_glfuncs, GLenum coord, GLenum pname, GLint param) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGeni(coord, pname, param); -} - -void gl2_0_glTexGenfv(void *_glfuncs, GLenum coord, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGenfv(coord, pname, params); -} - -void gl2_0_glTexGenf(void *_glfuncs, GLenum coord, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGenf(coord, pname, param); -} - -void gl2_0_glTexGendv(void *_glfuncs, GLenum coord, GLenum pname, const GLdouble* params) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGendv(coord, pname, params); -} - -void gl2_0_glTexGend(void *_glfuncs, GLenum coord, GLenum pname, GLdouble param) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGend(coord, pname, param); -} - -void gl2_0_glTexEnviv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexEnviv(target, pname, params); -} - -void gl2_0_glTexEnvi(void *_glfuncs, GLenum target, GLenum pname, GLint param) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexEnvi(target, pname, param); -} - -void gl2_0_glTexEnvfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexEnvfv(target, pname, params); -} - -void gl2_0_glTexEnvf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexEnvf(target, pname, param); -} - -void gl2_0_glShadeModel(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glShadeModel(mode); -} - -void gl2_0_glPolygonStipple(void *_glfuncs, const GLubyte* mask) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPolygonStipple(mask); -} - -void gl2_0_glMaterialiv(void *_glfuncs, GLenum face, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMaterialiv(face, pname, params); -} - -void gl2_0_glMateriali(void *_glfuncs, GLenum face, GLenum pname, GLint param) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMateriali(face, pname, param); -} - -void gl2_0_glMaterialfv(void *_glfuncs, GLenum face, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMaterialfv(face, pname, params); -} - -void gl2_0_glMaterialf(void *_glfuncs, GLenum face, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMaterialf(face, pname, param); -} - -void gl2_0_glLineStipple(void *_glfuncs, GLint factor, GLushort pattern) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLineStipple(factor, pattern); -} - -void gl2_0_glLightModeliv(void *_glfuncs, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightModeliv(pname, params); -} - -void gl2_0_glLightModeli(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightModeli(pname, param); -} - -void gl2_0_glLightModelfv(void *_glfuncs, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightModelfv(pname, params); -} - -void gl2_0_glLightModelf(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightModelf(pname, param); -} - -void gl2_0_glLightiv(void *_glfuncs, GLenum light, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightiv(light, pname, params); -} - -void gl2_0_glLighti(void *_glfuncs, GLenum light, GLenum pname, GLint param) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLighti(light, pname, param); -} - -void gl2_0_glLightfv(void *_glfuncs, GLenum light, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightfv(light, pname, params); -} - -void gl2_0_glLightf(void *_glfuncs, GLenum light, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightf(light, pname, param); -} - -void gl2_0_glFogiv(void *_glfuncs, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogiv(pname, params); -} - -void gl2_0_glFogi(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogi(pname, param); -} - -void gl2_0_glFogfv(void *_glfuncs, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogfv(pname, params); -} - -void gl2_0_glFogf(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogf(pname, param); -} - -void gl2_0_glColorMaterial(void *_glfuncs, GLenum face, GLenum mode) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorMaterial(face, mode); -} - -void gl2_0_glClipPlane(void *_glfuncs, GLenum plane, const GLdouble* equation) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClipPlane(plane, equation); -} - -void gl2_0_glVertex4sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4sv(v); -} - -void gl2_0_glVertex4s(void *_glfuncs, GLshort x, GLshort y, GLshort z, GLshort w) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4s(x, y, z, w); -} - -void gl2_0_glVertex4iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4iv(v); -} - -void gl2_0_glVertex4i(void *_glfuncs, GLint x, GLint y, GLint z, GLint w) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4i(x, y, z, w); -} - -void gl2_0_glVertex4fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4fv(v); -} - -void gl2_0_glVertex4f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z, GLfloat w) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4f(x, y, z, w); -} - -void gl2_0_glVertex4dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4dv(v); -} - -void gl2_0_glVertex4d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z, GLdouble w) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4d(x, y, z, w); -} - -void gl2_0_glVertex3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3sv(v); -} - -void gl2_0_glVertex3s(void *_glfuncs, GLshort x, GLshort y, GLshort z) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3s(x, y, z); -} - -void gl2_0_glVertex3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3iv(v); -} - -void gl2_0_glVertex3i(void *_glfuncs, GLint x, GLint y, GLint z) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3i(x, y, z); -} - -void gl2_0_glVertex3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3fv(v); -} - -void gl2_0_glVertex3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3f(x, y, z); -} - -void gl2_0_glVertex3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3dv(v); -} - -void gl2_0_glVertex3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3d(x, y, z); -} - -void gl2_0_glVertex2sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2sv(v); -} - -void gl2_0_glVertex2s(void *_glfuncs, GLshort x, GLshort y) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2s(x, y); -} - -void gl2_0_glVertex2iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2iv(v); -} - -void gl2_0_glVertex2i(void *_glfuncs, GLint x, GLint y) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2i(x, y); -} - -void gl2_0_glVertex2fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2fv(v); -} - -void gl2_0_glVertex2f(void *_glfuncs, GLfloat x, GLfloat y) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2f(x, y); -} - -void gl2_0_glVertex2dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2dv(v); -} - -void gl2_0_glVertex2d(void *_glfuncs, GLdouble x, GLdouble y) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2d(x, y); -} - -void gl2_0_glTexCoord4sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4sv(v); -} - -void gl2_0_glTexCoord4s(void *_glfuncs, GLshort s, GLshort t, GLshort r, GLshort q) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4s(s, t, r, q); -} - -void gl2_0_glTexCoord4iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4iv(v); -} - -void gl2_0_glTexCoord4i(void *_glfuncs, GLint s, GLint t, GLint r, GLint q) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4i(s, t, r, q); -} - -void gl2_0_glTexCoord4fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4fv(v); -} - -void gl2_0_glTexCoord4f(void *_glfuncs, GLfloat s, GLfloat t, GLfloat r, GLfloat q) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4f(s, t, r, q); -} - -void gl2_0_glTexCoord4dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4dv(v); -} - -void gl2_0_glTexCoord4d(void *_glfuncs, GLdouble s, GLdouble t, GLdouble r, GLdouble q) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4d(s, t, r, q); -} - -void gl2_0_glTexCoord3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3sv(v); -} - -void gl2_0_glTexCoord3s(void *_glfuncs, GLshort s, GLshort t, GLshort r) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3s(s, t, r); -} - -void gl2_0_glTexCoord3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3iv(v); -} - -void gl2_0_glTexCoord3i(void *_glfuncs, GLint s, GLint t, GLint r) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3i(s, t, r); -} - -void gl2_0_glTexCoord3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3fv(v); -} - -void gl2_0_glTexCoord3f(void *_glfuncs, GLfloat s, GLfloat t, GLfloat r) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3f(s, t, r); -} - -void gl2_0_glTexCoord3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3dv(v); -} - -void gl2_0_glTexCoord3d(void *_glfuncs, GLdouble s, GLdouble t, GLdouble r) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3d(s, t, r); -} - -void gl2_0_glTexCoord2sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2sv(v); -} - -void gl2_0_glTexCoord2s(void *_glfuncs, GLshort s, GLshort t) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2s(s, t); -} - -void gl2_0_glTexCoord2iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2iv(v); -} - -void gl2_0_glTexCoord2i(void *_glfuncs, GLint s, GLint t) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2i(s, t); -} - -void gl2_0_glTexCoord2fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2fv(v); -} - -void gl2_0_glTexCoord2f(void *_glfuncs, GLfloat s, GLfloat t) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2f(s, t); -} - -void gl2_0_glTexCoord2dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2dv(v); -} - -void gl2_0_glTexCoord2d(void *_glfuncs, GLdouble s, GLdouble t) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2d(s, t); -} - -void gl2_0_glTexCoord1sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1sv(v); -} - -void gl2_0_glTexCoord1s(void *_glfuncs, GLshort s) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1s(s); -} - -void gl2_0_glTexCoord1iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1iv(v); -} - -void gl2_0_glTexCoord1i(void *_glfuncs, GLint s) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1i(s); -} - -void gl2_0_glTexCoord1fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1fv(v); -} - -void gl2_0_glTexCoord1f(void *_glfuncs, GLfloat s) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1f(s); -} - -void gl2_0_glTexCoord1dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1dv(v); -} - -void gl2_0_glTexCoord1d(void *_glfuncs, GLdouble s) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1d(s); -} - -void gl2_0_glRectsv(void *_glfuncs, const GLshort* v1, const GLshort* v2) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectsv(v1, v2); -} - -void gl2_0_glRects(void *_glfuncs, GLshort x1, GLshort y1, GLshort x2, GLshort y2) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRects(x1, y1, x2, y2); -} - -void gl2_0_glRectiv(void *_glfuncs, const GLint* v1, const GLint* v2) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectiv(v1, v2); -} - -void gl2_0_glRecti(void *_glfuncs, GLint x1, GLint y1, GLint x2, GLint y2) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRecti(x1, y1, x2, y2); -} - -void gl2_0_glRectfv(void *_glfuncs, const GLfloat* v1, const GLfloat* v2) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectfv(v1, v2); -} - -void gl2_0_glRectf(void *_glfuncs, GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectf(x1, y1, x2, y2); -} - -void gl2_0_glRectdv(void *_glfuncs, const GLdouble* v1, const GLdouble* v2) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectdv(v1, v2); -} - -void gl2_0_glRectd(void *_glfuncs, GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectd(x1, y1, x2, y2); -} - -void gl2_0_glRasterPos4sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4sv(v); -} - -void gl2_0_glRasterPos4s(void *_glfuncs, GLshort x, GLshort y, GLshort z, GLshort w) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4s(x, y, z, w); -} - -void gl2_0_glRasterPos4iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4iv(v); -} - -void gl2_0_glRasterPos4i(void *_glfuncs, GLint x, GLint y, GLint z, GLint w) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4i(x, y, z, w); -} - -void gl2_0_glRasterPos4fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4fv(v); -} - -void gl2_0_glRasterPos4f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z, GLfloat w) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4f(x, y, z, w); -} - -void gl2_0_glRasterPos4dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4dv(v); -} - -void gl2_0_glRasterPos4d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z, GLdouble w) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4d(x, y, z, w); -} - -void gl2_0_glRasterPos3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3sv(v); -} - -void gl2_0_glRasterPos3s(void *_glfuncs, GLshort x, GLshort y, GLshort z) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3s(x, y, z); -} - -void gl2_0_glRasterPos3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3iv(v); -} - -void gl2_0_glRasterPos3i(void *_glfuncs, GLint x, GLint y, GLint z) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3i(x, y, z); -} - -void gl2_0_glRasterPos3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3fv(v); -} - -void gl2_0_glRasterPos3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3f(x, y, z); -} - -void gl2_0_glRasterPos3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3dv(v); -} - -void gl2_0_glRasterPos3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3d(x, y, z); -} - -void gl2_0_glRasterPos2sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2sv(v); -} - -void gl2_0_glRasterPos2s(void *_glfuncs, GLshort x, GLshort y) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2s(x, y); -} - -void gl2_0_glRasterPos2iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2iv(v); -} - -void gl2_0_glRasterPos2i(void *_glfuncs, GLint x, GLint y) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2i(x, y); -} - -void gl2_0_glRasterPos2fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2fv(v); -} - -void gl2_0_glRasterPos2f(void *_glfuncs, GLfloat x, GLfloat y) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2f(x, y); -} - -void gl2_0_glRasterPos2dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2dv(v); -} - -void gl2_0_glRasterPos2d(void *_glfuncs, GLdouble x, GLdouble y) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2d(x, y); -} - -void gl2_0_glNormal3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3sv(v); -} - -void gl2_0_glNormal3s(void *_glfuncs, GLshort nx, GLshort ny, GLshort nz) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3s(nx, ny, nz); -} - -void gl2_0_glNormal3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3iv(v); -} - -void gl2_0_glNormal3i(void *_glfuncs, GLint nx, GLint ny, GLint nz) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3i(nx, ny, nz); -} - -void gl2_0_glNormal3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3fv(v); -} - -void gl2_0_glNormal3f(void *_glfuncs, GLfloat nx, GLfloat ny, GLfloat nz) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3f(nx, ny, nz); -} - -void gl2_0_glNormal3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3dv(v); -} - -void gl2_0_glNormal3d(void *_glfuncs, GLdouble nx, GLdouble ny, GLdouble nz) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3d(nx, ny, nz); -} - -void gl2_0_glNormal3bv(void *_glfuncs, const GLbyte* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3bv(v); -} - -void gl2_0_glNormal3b(void *_glfuncs, GLbyte nx, GLbyte ny, GLbyte nz) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3b(nx, ny, nz); -} - -void gl2_0_glIndexsv(void *_glfuncs, const GLshort* c) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexsv(c); -} - -void gl2_0_glIndexs(void *_glfuncs, GLshort c) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexs(c); -} - -void gl2_0_glIndexiv(void *_glfuncs, const GLint* c) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexiv(c); -} - -void gl2_0_glIndexi(void *_glfuncs, GLint c) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexi(c); -} - -void gl2_0_glIndexfv(void *_glfuncs, const GLfloat* c) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexfv(c); -} - -void gl2_0_glIndexf(void *_glfuncs, GLfloat c) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexf(c); -} - -void gl2_0_glIndexdv(void *_glfuncs, const GLdouble* c) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexdv(c); -} - -void gl2_0_glIndexd(void *_glfuncs, GLdouble c) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexd(c); -} - -void gl2_0_glEnd(void *_glfuncs) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnd(); -} - -void gl2_0_glEdgeFlagv(void *_glfuncs, const GLboolean* flag) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEdgeFlagv(flag); -} - -void gl2_0_glEdgeFlag(void *_glfuncs, GLboolean flag) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEdgeFlag(flag); -} - -void gl2_0_glColor4usv(void *_glfuncs, const GLushort* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4usv(v); -} - -void gl2_0_glColor4us(void *_glfuncs, GLushort red, GLushort green, GLushort blue, GLushort alpha) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4us(red, green, blue, alpha); -} - -void gl2_0_glColor4uiv(void *_glfuncs, const GLuint* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4uiv(v); -} - -void gl2_0_glColor4ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue, GLuint alpha) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4ui(red, green, blue, alpha); -} - -void gl2_0_glColor4ubv(void *_glfuncs, const GLubyte* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4ubv(v); -} - -void gl2_0_glColor4ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4ub(red, green, blue, alpha); -} - -void gl2_0_glColor4sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4sv(v); -} - -void gl2_0_glColor4s(void *_glfuncs, GLshort red, GLshort green, GLshort blue, GLshort alpha) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4s(red, green, blue, alpha); -} - -void gl2_0_glColor4iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4iv(v); -} - -void gl2_0_glColor4i(void *_glfuncs, GLint red, GLint green, GLint blue, GLint alpha) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4i(red, green, blue, alpha); -} - -void gl2_0_glColor4fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4fv(v); -} - -void gl2_0_glColor4f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4f(red, green, blue, alpha); -} - -void gl2_0_glColor4dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4dv(v); -} - -void gl2_0_glColor4d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4d(red, green, blue, alpha); -} - -void gl2_0_glColor4bv(void *_glfuncs, const GLbyte* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4bv(v); -} - -void gl2_0_glColor4b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4b(red, green, blue, alpha); -} - -void gl2_0_glColor3usv(void *_glfuncs, const GLushort* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3usv(v); -} - -void gl2_0_glColor3us(void *_glfuncs, GLushort red, GLushort green, GLushort blue) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3us(red, green, blue); -} - -void gl2_0_glColor3uiv(void *_glfuncs, const GLuint* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3uiv(v); -} - -void gl2_0_glColor3ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3ui(red, green, blue); -} - -void gl2_0_glColor3ubv(void *_glfuncs, const GLubyte* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3ubv(v); -} - -void gl2_0_glColor3ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3ub(red, green, blue); -} - -void gl2_0_glColor3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3sv(v); -} - -void gl2_0_glColor3s(void *_glfuncs, GLshort red, GLshort green, GLshort blue) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3s(red, green, blue); -} - -void gl2_0_glColor3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3iv(v); -} - -void gl2_0_glColor3i(void *_glfuncs, GLint red, GLint green, GLint blue) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3i(red, green, blue); -} - -void gl2_0_glColor3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3fv(v); -} - -void gl2_0_glColor3f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3f(red, green, blue); -} - -void gl2_0_glColor3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3dv(v); -} - -void gl2_0_glColor3d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3d(red, green, blue); -} - -void gl2_0_glColor3bv(void *_glfuncs, const GLbyte* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3bv(v); -} - -void gl2_0_glColor3b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3b(red, green, blue); -} - -void gl2_0_glBitmap(void *_glfuncs, GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte* bitmap) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBitmap(width, height, xorig, yorig, xmove, ymove, bitmap); -} - -void gl2_0_glBegin(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBegin(mode); -} - -void gl2_0_glListBase(void *_glfuncs, GLuint base) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glListBase(base); -} - -GLuint gl2_0_glGenLists(void *_glfuncs, GLsizei range_) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGenLists(range_); -} - -void gl2_0_glDeleteLists(void *_glfuncs, GLuint list, GLsizei range_) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteLists(list, range_); -} - -void gl2_0_glCallLists(void *_glfuncs, GLsizei n, GLenum gltype, const GLvoid* lists) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCallLists(n, gltype, lists); -} - -void gl2_0_glCallList(void *_glfuncs, GLuint list) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCallList(list); -} - -void gl2_0_glEndList(void *_glfuncs) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndList(); -} - -void gl2_0_glNewList(void *_glfuncs, GLuint list, GLenum mode) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNewList(list, mode); -} - -void gl2_0_glPushClientAttrib(void *_glfuncs, GLbitfield mask) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPushClientAttrib(mask); -} - -void gl2_0_glPopClientAttrib(void *_glfuncs) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPopClientAttrib(); -} - -void gl2_0_glPrioritizeTextures(void *_glfuncs, GLsizei n, const GLuint* textures, const GLfloat* priorities) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPrioritizeTextures(n, textures, priorities); -} - -GLboolean gl2_0_glAreTexturesResident(void *_glfuncs, GLsizei n, const GLuint* textures, GLboolean* residences) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glAreTexturesResident(n, textures, residences); -} - -void gl2_0_glVertexPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexPointer(size, gltype, stride, pointer); -} - -void gl2_0_glTexCoordPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordPointer(size, gltype, stride, pointer); -} - -void gl2_0_glNormalPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormalPointer(gltype, stride, pointer); -} - -void gl2_0_glInterleavedArrays(void *_glfuncs, GLenum format, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glInterleavedArrays(format, stride, pointer); -} - -void gl2_0_glIndexPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexPointer(gltype, stride, pointer); -} - -void gl2_0_glEnableClientState(void *_glfuncs, GLenum array) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnableClientState(array); -} - -void gl2_0_glEdgeFlagPointer(void *_glfuncs, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEdgeFlagPointer(stride, pointer); -} - -void gl2_0_glDisableClientState(void *_glfuncs, GLenum array) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDisableClientState(array); -} - -void gl2_0_glColorPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorPointer(size, gltype, stride, pointer); -} - -void gl2_0_glArrayElement(void *_glfuncs, GLint i) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glArrayElement(i); -} - -void gl2_0_glResetMinmax(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glResetMinmax(target); -} - -void gl2_0_glResetHistogram(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glResetHistogram(target); -} - -void gl2_0_glMinmax(void *_glfuncs, GLenum target, GLenum internalFormat, GLboolean sink) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMinmax(target, internalFormat, sink); -} - -void gl2_0_glHistogram(void *_glfuncs, GLenum target, GLsizei width, GLenum internalFormat, GLboolean sink) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glHistogram(target, width, internalFormat, sink); -} - -void gl2_0_glGetMinmaxParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMinmaxParameteriv(target, pname, params); -} - -void gl2_0_glGetMinmaxParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMinmaxParameterfv(target, pname, params); -} - -void gl2_0_glGetMinmax(void *_glfuncs, GLenum target, GLboolean reset, GLenum format, GLenum gltype, GLvoid* values) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMinmax(target, reset, format, gltype, values); -} - -void gl2_0_glGetHistogramParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetHistogramParameteriv(target, pname, params); -} - -void gl2_0_glGetHistogramParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetHistogramParameterfv(target, pname, params); -} - -void gl2_0_glGetHistogram(void *_glfuncs, GLenum target, GLboolean reset, GLenum format, GLenum gltype, GLvoid* values) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetHistogram(target, reset, format, gltype, values); -} - -void gl2_0_glSeparableFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* row, const GLvoid* column) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSeparableFilter2D(target, internalFormat, width, height, format, gltype, row, column); -} - -void gl2_0_glGetSeparableFilter(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* row, GLvoid* column, GLvoid* span) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetSeparableFilter(target, format, gltype, row, column, span); -} - -void gl2_0_glGetConvolutionParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetConvolutionParameteriv(target, pname, params); -} - -void gl2_0_glGetConvolutionParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetConvolutionParameterfv(target, pname, params); -} - -void gl2_0_glGetConvolutionFilter(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* image) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetConvolutionFilter(target, format, gltype, image); -} - -void gl2_0_glCopyConvolutionFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyConvolutionFilter2D(target, internalFormat, x, y, width, height); -} - -void gl2_0_glCopyConvolutionFilter1D(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyConvolutionFilter1D(target, internalFormat, x, y, width); -} - -void gl2_0_glConvolutionParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionParameteriv(target, pname, params); -} - -void gl2_0_glConvolutionParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint params) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionParameteri(target, pname, params); -} - -void gl2_0_glConvolutionParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionParameterfv(target, pname, params); -} - -void gl2_0_glConvolutionParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat params) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionParameterf(target, pname, params); -} - -void gl2_0_glConvolutionFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* image) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionFilter2D(target, internalFormat, width, height, format, gltype, image); -} - -void gl2_0_glConvolutionFilter1D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum gltype, const GLvoid* image) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionFilter1D(target, internalFormat, width, format, gltype, image); -} - -void gl2_0_glCopyColorSubTable(void *_glfuncs, GLenum target, GLsizei start, GLint x, GLint y, GLsizei width) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyColorSubTable(target, start, x, y, width); -} - -void gl2_0_glColorSubTable(void *_glfuncs, GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum gltype, const GLvoid* data) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorSubTable(target, start, count, format, gltype, data); -} - -void gl2_0_glGetColorTableParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetColorTableParameteriv(target, pname, params); -} - -void gl2_0_glGetColorTableParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetColorTableParameterfv(target, pname, params); -} - -void gl2_0_glGetColorTable(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* table) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetColorTable(target, format, gltype, table); -} - -void gl2_0_glCopyColorTable(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyColorTable(target, internalFormat, x, y, width); -} - -void gl2_0_glColorTableParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorTableParameteriv(target, pname, params); -} - -void gl2_0_glColorTableParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorTableParameterfv(target, pname, params); -} - -void gl2_0_glColorTable(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum gltype, const GLvoid* table) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorTable(target, internalFormat, width, format, gltype, table); -} - -void gl2_0_glMultTransposeMatrixd(void *_glfuncs, const GLdouble* m) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultTransposeMatrixd(m); -} - -void gl2_0_glMultTransposeMatrixf(void *_glfuncs, const GLfloat* m) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultTransposeMatrixf(m); -} - -void gl2_0_glLoadTransposeMatrixd(void *_glfuncs, const GLdouble* m) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadTransposeMatrixd(m); -} - -void gl2_0_glLoadTransposeMatrixf(void *_glfuncs, const GLfloat* m) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadTransposeMatrixf(m); -} - -void gl2_0_glMultiTexCoord4sv(void *_glfuncs, GLenum target, const GLshort* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4sv(target, v); -} - -void gl2_0_glMultiTexCoord4s(void *_glfuncs, GLenum target, GLshort s, GLshort t, GLshort r, GLshort q) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4s(target, s, t, r, q); -} - -void gl2_0_glMultiTexCoord4iv(void *_glfuncs, GLenum target, const GLint* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4iv(target, v); -} - -void gl2_0_glMultiTexCoord4i(void *_glfuncs, GLenum target, GLint s, GLint t, GLint r, GLint q) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4i(target, s, t, r, q); -} - -void gl2_0_glMultiTexCoord4fv(void *_glfuncs, GLenum target, const GLfloat* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4fv(target, v); -} - -void gl2_0_glMultiTexCoord4f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4f(target, s, t, r, q); -} - -void gl2_0_glMultiTexCoord4dv(void *_glfuncs, GLenum target, const GLdouble* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4dv(target, v); -} - -void gl2_0_glMultiTexCoord4d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4d(target, s, t, r, q); -} - -void gl2_0_glMultiTexCoord3sv(void *_glfuncs, GLenum target, const GLshort* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3sv(target, v); -} - -void gl2_0_glMultiTexCoord3s(void *_glfuncs, GLenum target, GLshort s, GLshort t, GLshort r) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3s(target, s, t, r); -} - -void gl2_0_glMultiTexCoord3iv(void *_glfuncs, GLenum target, const GLint* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3iv(target, v); -} - -void gl2_0_glMultiTexCoord3i(void *_glfuncs, GLenum target, GLint s, GLint t, GLint r) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3i(target, s, t, r); -} - -void gl2_0_glMultiTexCoord3fv(void *_glfuncs, GLenum target, const GLfloat* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3fv(target, v); -} - -void gl2_0_glMultiTexCoord3f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t, GLfloat r) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3f(target, s, t, r); -} - -void gl2_0_glMultiTexCoord3dv(void *_glfuncs, GLenum target, const GLdouble* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3dv(target, v); -} - -void gl2_0_glMultiTexCoord3d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t, GLdouble r) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3d(target, s, t, r); -} - -void gl2_0_glMultiTexCoord2sv(void *_glfuncs, GLenum target, const GLshort* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2sv(target, v); -} - -void gl2_0_glMultiTexCoord2s(void *_glfuncs, GLenum target, GLshort s, GLshort t) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2s(target, s, t); -} - -void gl2_0_glMultiTexCoord2iv(void *_glfuncs, GLenum target, const GLint* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2iv(target, v); -} - -void gl2_0_glMultiTexCoord2i(void *_glfuncs, GLenum target, GLint s, GLint t) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2i(target, s, t); -} - -void gl2_0_glMultiTexCoord2fv(void *_glfuncs, GLenum target, const GLfloat* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2fv(target, v); -} - -void gl2_0_glMultiTexCoord2f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2f(target, s, t); -} - -void gl2_0_glMultiTexCoord2dv(void *_glfuncs, GLenum target, const GLdouble* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2dv(target, v); -} - -void gl2_0_glMultiTexCoord2d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2d(target, s, t); -} - -void gl2_0_glMultiTexCoord1sv(void *_glfuncs, GLenum target, const GLshort* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1sv(target, v); -} - -void gl2_0_glMultiTexCoord1s(void *_glfuncs, GLenum target, GLshort s) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1s(target, s); -} - -void gl2_0_glMultiTexCoord1iv(void *_glfuncs, GLenum target, const GLint* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1iv(target, v); -} - -void gl2_0_glMultiTexCoord1i(void *_glfuncs, GLenum target, GLint s) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1i(target, s); -} - -void gl2_0_glMultiTexCoord1fv(void *_glfuncs, GLenum target, const GLfloat* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1fv(target, v); -} - -void gl2_0_glMultiTexCoord1f(void *_glfuncs, GLenum target, GLfloat s) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1f(target, s); -} - -void gl2_0_glMultiTexCoord1dv(void *_glfuncs, GLenum target, const GLdouble* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1dv(target, v); -} - -void gl2_0_glMultiTexCoord1d(void *_glfuncs, GLenum target, GLdouble s) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1d(target, s); -} - -void gl2_0_glClientActiveTexture(void *_glfuncs, GLenum texture) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClientActiveTexture(texture); -} - -void gl2_0_glWindowPos3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3sv(v); -} - -void gl2_0_glWindowPos3s(void *_glfuncs, GLshort x, GLshort y, GLshort z) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3s(x, y, z); -} - -void gl2_0_glWindowPos3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3iv(v); -} - -void gl2_0_glWindowPos3i(void *_glfuncs, GLint x, GLint y, GLint z) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3i(x, y, z); -} - -void gl2_0_glWindowPos3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3fv(v); -} - -void gl2_0_glWindowPos3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3f(x, y, z); -} - -void gl2_0_glWindowPos3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3dv(v); -} - -void gl2_0_glWindowPos3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3d(x, y, z); -} - -void gl2_0_glWindowPos2sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2sv(v); -} - -void gl2_0_glWindowPos2s(void *_glfuncs, GLshort x, GLshort y) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2s(x, y); -} - -void gl2_0_glWindowPos2iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2iv(v); -} - -void gl2_0_glWindowPos2i(void *_glfuncs, GLint x, GLint y) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2i(x, y); -} - -void gl2_0_glWindowPos2fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2fv(v); -} - -void gl2_0_glWindowPos2f(void *_glfuncs, GLfloat x, GLfloat y) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2f(x, y); -} - -void gl2_0_glWindowPos2dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2dv(v); -} - -void gl2_0_glWindowPos2d(void *_glfuncs, GLdouble x, GLdouble y) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2d(x, y); -} - -void gl2_0_glSecondaryColorPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColorPointer(size, gltype, stride, pointer); -} - -void gl2_0_glSecondaryColor3usv(void *_glfuncs, const GLushort* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3usv(v); -} - -void gl2_0_glSecondaryColor3us(void *_glfuncs, GLushort red, GLushort green, GLushort blue) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3us(red, green, blue); -} - -void gl2_0_glSecondaryColor3uiv(void *_glfuncs, const GLuint* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3uiv(v); -} - -void gl2_0_glSecondaryColor3ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3ui(red, green, blue); -} - -void gl2_0_glSecondaryColor3ubv(void *_glfuncs, const GLubyte* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3ubv(v); -} - -void gl2_0_glSecondaryColor3ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3ub(red, green, blue); -} - -void gl2_0_glSecondaryColor3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3sv(v); -} - -void gl2_0_glSecondaryColor3s(void *_glfuncs, GLshort red, GLshort green, GLshort blue) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3s(red, green, blue); -} - -void gl2_0_glSecondaryColor3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3iv(v); -} - -void gl2_0_glSecondaryColor3i(void *_glfuncs, GLint red, GLint green, GLint blue) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3i(red, green, blue); -} - -void gl2_0_glSecondaryColor3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3fv(v); -} - -void gl2_0_glSecondaryColor3f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3f(red, green, blue); -} - -void gl2_0_glSecondaryColor3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3dv(v); -} - -void gl2_0_glSecondaryColor3d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3d(red, green, blue); -} - -void gl2_0_glSecondaryColor3bv(void *_glfuncs, const GLbyte* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3bv(v); -} - -void gl2_0_glSecondaryColor3b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3b(red, green, blue); -} - -void gl2_0_glFogCoordPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogCoordPointer(gltype, stride, pointer); -} - -void gl2_0_glFogCoorddv(void *_glfuncs, const GLdouble* coord) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogCoorddv(coord); -} - -void gl2_0_glFogCoordd(void *_glfuncs, GLdouble coord) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogCoordd(coord); -} - -void gl2_0_glFogCoordfv(void *_glfuncs, const GLfloat* coord) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogCoordfv(coord); -} - -void gl2_0_glFogCoordf(void *_glfuncs, GLfloat coord) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogCoordf(coord); -} - -void gl2_0_glVertexAttrib4usv(void *_glfuncs, GLuint index, const GLushort* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4usv(index, v); -} - -void gl2_0_glVertexAttrib4uiv(void *_glfuncs, GLuint index, const GLuint* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4uiv(index, v); -} - -void gl2_0_glVertexAttrib4ubv(void *_glfuncs, GLuint index, const GLubyte* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4ubv(index, v); -} - -void gl2_0_glVertexAttrib4sv(void *_glfuncs, GLuint index, const GLshort* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4sv(index, v); -} - -void gl2_0_glVertexAttrib4s(void *_glfuncs, GLuint index, GLshort x, GLshort y, GLshort z, GLshort w) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4s(index, x, y, z, w); -} - -void gl2_0_glVertexAttrib4iv(void *_glfuncs, GLuint index, const GLint* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4iv(index, v); -} - -void gl2_0_glVertexAttrib4fv(void *_glfuncs, GLuint index, const GLfloat* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4fv(index, v); -} - -void gl2_0_glVertexAttrib4f(void *_glfuncs, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4f(index, x, y, z, w); -} - -void gl2_0_glVertexAttrib4dv(void *_glfuncs, GLuint index, const GLdouble* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4dv(index, v); -} - -void gl2_0_glVertexAttrib4d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4d(index, x, y, z, w); -} - -void gl2_0_glVertexAttrib4bv(void *_glfuncs, GLuint index, const GLbyte* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4bv(index, v); -} - -void gl2_0_glVertexAttrib4Nusv(void *_glfuncs, GLuint index, const GLushort* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4Nusv(index, v); -} - -void gl2_0_glVertexAttrib4Nuiv(void *_glfuncs, GLuint index, const GLuint* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4Nuiv(index, v); -} - -void gl2_0_glVertexAttrib4Nubv(void *_glfuncs, GLuint index, const GLubyte* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4Nubv(index, v); -} - -void gl2_0_glVertexAttrib4Nub(void *_glfuncs, GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4Nub(index, x, y, z, w); -} - -void gl2_0_glVertexAttrib4Nsv(void *_glfuncs, GLuint index, const GLshort* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4Nsv(index, v); -} - -void gl2_0_glVertexAttrib4Niv(void *_glfuncs, GLuint index, const GLint* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4Niv(index, v); -} - -void gl2_0_glVertexAttrib4Nbv(void *_glfuncs, GLuint index, const GLbyte* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4Nbv(index, v); -} - -void gl2_0_glVertexAttrib3sv(void *_glfuncs, GLuint index, const GLshort* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib3sv(index, v); -} - -void gl2_0_glVertexAttrib3s(void *_glfuncs, GLuint index, GLshort x, GLshort y, GLshort z) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib3s(index, x, y, z); -} - -void gl2_0_glVertexAttrib3fv(void *_glfuncs, GLuint index, const GLfloat* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib3fv(index, v); -} - -void gl2_0_glVertexAttrib3f(void *_glfuncs, GLuint index, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib3f(index, x, y, z); -} - -void gl2_0_glVertexAttrib3dv(void *_glfuncs, GLuint index, const GLdouble* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib3dv(index, v); -} - -void gl2_0_glVertexAttrib3d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib3d(index, x, y, z); -} - -void gl2_0_glVertexAttrib2sv(void *_glfuncs, GLuint index, const GLshort* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib2sv(index, v); -} - -void gl2_0_glVertexAttrib2s(void *_glfuncs, GLuint index, GLshort x, GLshort y) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib2s(index, x, y); -} - -void gl2_0_glVertexAttrib2fv(void *_glfuncs, GLuint index, const GLfloat* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib2fv(index, v); -} - -void gl2_0_glVertexAttrib2f(void *_glfuncs, GLuint index, GLfloat x, GLfloat y) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib2f(index, x, y); -} - -void gl2_0_glVertexAttrib2dv(void *_glfuncs, GLuint index, const GLdouble* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib2dv(index, v); -} - -void gl2_0_glVertexAttrib2d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib2d(index, x, y); -} - -void gl2_0_glVertexAttrib1sv(void *_glfuncs, GLuint index, const GLshort* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib1sv(index, v); -} - -void gl2_0_glVertexAttrib1s(void *_glfuncs, GLuint index, GLshort x) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib1s(index, x); -} - -void gl2_0_glVertexAttrib1fv(void *_glfuncs, GLuint index, const GLfloat* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib1fv(index, v); -} - -void gl2_0_glVertexAttrib1f(void *_glfuncs, GLuint index, GLfloat x) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib1f(index, x); -} - -void gl2_0_glVertexAttrib1dv(void *_glfuncs, GLuint index, const GLdouble* v) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib1dv(index, v); -} - -void gl2_0_glVertexAttrib1d(void *_glfuncs, GLuint index, GLdouble x) -{ - QOpenGLFunctions_2_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib1d(index, x); -} - diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/2.0/funcs.h b/Godeps/_workspace/src/github.com/obscuren/qml/gl/2.0/funcs.h deleted file mode 100644 index ffa1a2a831..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/2.0/funcs.h +++ /dev/null @@ -1,613 +0,0 @@ - -// ** file automatically generated by glgen -- do not edit manually ** - -#ifndef __cplusplus -#include -#include -typedef unsigned int GLenum; -typedef unsigned char GLboolean; -typedef unsigned int GLbitfield; -typedef void GLvoid; -typedef char GLchar; -typedef signed char GLbyte; /* 1-byte signed */ -typedef short GLshort; /* 2-byte signed */ -typedef int GLint; /* 4-byte signed */ -typedef unsigned char GLubyte; /* 1-byte unsigned */ -typedef unsigned short GLushort; /* 2-byte unsigned */ -typedef unsigned int GLuint; /* 4-byte unsigned */ -typedef int GLsizei; /* 4-byte signed */ -typedef float GLfloat; /* single precision float */ -typedef float GLclampf; /* single precision float in [0,1] */ -typedef double GLdouble; /* double precision float */ -typedef double GLclampd; /* double precision float in [0,1] */ -typedef int64_t GLint64; -typedef uint64_t GLuint64; -typedef ptrdiff_t GLintptr; -typedef ptrdiff_t GLsizeiptr; -typedef ptrdiff_t GLintptrARB; -typedef ptrdiff_t GLsizeiptrARB; -typedef struct __GLsync *GLsync; -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -void *gl2_0_funcs(); - -void gl2_0_glViewport(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height); -void gl2_0_glDepthRange(void *_glfuncs, GLdouble nearVal, GLdouble farVal); -GLboolean gl2_0_glIsEnabled(void *_glfuncs, GLenum cap); -void gl2_0_glGetTexLevelParameteriv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLint* params); -void gl2_0_glGetTexLevelParameterfv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLfloat* params); -void gl2_0_glGetTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl2_0_glGetTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl2_0_glGetTexImage(void *_glfuncs, GLenum target, GLint level, GLenum format, GLenum gltype, GLvoid* pixels); -void gl2_0_glGetIntegerv(void *_glfuncs, GLenum pname, GLint* params); -void gl2_0_glGetFloatv(void *_glfuncs, GLenum pname, GLfloat* params); -GLenum gl2_0_glGetError(void *_glfuncs); -void gl2_0_glGetDoublev(void *_glfuncs, GLenum pname, GLdouble* params); -void gl2_0_glGetBooleanv(void *_glfuncs, GLenum pname, GLboolean* params); -void gl2_0_glReadPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum gltype, GLvoid* pixels); -void gl2_0_glReadBuffer(void *_glfuncs, GLenum mode); -void gl2_0_glPixelStorei(void *_glfuncs, GLenum pname, GLint param); -void gl2_0_glPixelStoref(void *_glfuncs, GLenum pname, GLfloat param); -void gl2_0_glDepthFunc(void *_glfuncs, GLenum glfunc); -void gl2_0_glStencilOp(void *_glfuncs, GLenum fail, GLenum zfail, GLenum zpass); -void gl2_0_glStencilFunc(void *_glfuncs, GLenum glfunc, GLint ref, GLuint mask); -void gl2_0_glLogicOp(void *_glfuncs, GLenum opcode); -void gl2_0_glBlendFunc(void *_glfuncs, GLenum sfactor, GLenum dfactor); -void gl2_0_glFlush(void *_glfuncs); -void gl2_0_glFinish(void *_glfuncs); -void gl2_0_glEnable(void *_glfuncs, GLenum cap); -void gl2_0_glDisable(void *_glfuncs, GLenum cap); -void gl2_0_glDepthMask(void *_glfuncs, GLboolean flag); -void gl2_0_glColorMask(void *_glfuncs, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); -void gl2_0_glStencilMask(void *_glfuncs, GLuint mask); -void gl2_0_glClearDepth(void *_glfuncs, GLdouble depth); -void gl2_0_glClearStencil(void *_glfuncs, GLint s); -void gl2_0_glClearColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl2_0_glClear(void *_glfuncs, GLbitfield mask); -void gl2_0_glDrawBuffer(void *_glfuncs, GLenum mode); -void gl2_0_glTexImage2D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl2_0_glTexImage1D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl2_0_glTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl2_0_glTexParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint param); -void gl2_0_glTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params); -void gl2_0_glTexParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param); -void gl2_0_glScissor(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height); -void gl2_0_glPolygonMode(void *_glfuncs, GLenum face, GLenum mode); -void gl2_0_glPointSize(void *_glfuncs, GLfloat size); -void gl2_0_glLineWidth(void *_glfuncs, GLfloat width); -void gl2_0_glHint(void *_glfuncs, GLenum target, GLenum mode); -void gl2_0_glFrontFace(void *_glfuncs, GLenum mode); -void gl2_0_glCullFace(void *_glfuncs, GLenum mode); -void gl2_0_glIndexubv(void *_glfuncs, const GLubyte* c); -void gl2_0_glIndexub(void *_glfuncs, GLubyte c); -GLboolean gl2_0_glIsTexture(void *_glfuncs, GLuint texture); -void gl2_0_glGenTextures(void *_glfuncs, GLsizei n, GLuint* textures); -void gl2_0_glDeleteTextures(void *_glfuncs, GLsizei n, const GLuint* textures); -void gl2_0_glBindTexture(void *_glfuncs, GLenum target, GLuint texture); -void gl2_0_glTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl2_0_glTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl2_0_glCopyTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -void gl2_0_glCopyTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -void gl2_0_glCopyTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -void gl2_0_glCopyTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border); -void gl2_0_glPolygonOffset(void *_glfuncs, GLfloat factor, GLfloat units); -void gl2_0_glDrawElements(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices); -void gl2_0_glDrawArrays(void *_glfuncs, GLenum mode, GLint first, GLsizei count); -void gl2_0_glCopyTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -void gl2_0_glTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl2_0_glTexImage3D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl2_0_glDrawRangeElements(void *_glfuncs, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum gltype, const GLvoid* indices); -void gl2_0_glBlendEquation(void *_glfuncs, GLenum mode); -void gl2_0_glBlendColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl2_0_glGetCompressedTexImage(void *_glfuncs, GLenum target, GLint level, GLvoid* img); -void gl2_0_glCompressedTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid* data); -void gl2_0_glCompressedTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data); -void gl2_0_glCompressedTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data); -void gl2_0_glCompressedTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid* data); -void gl2_0_glCompressedTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data); -void gl2_0_glCompressedTexImage3D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data); -void gl2_0_glSampleCoverage(void *_glfuncs, GLfloat value, GLboolean invert); -void gl2_0_glActiveTexture(void *_glfuncs, GLenum texture); -void gl2_0_glPointParameteriv(void *_glfuncs, GLenum pname, const GLint* params); -void gl2_0_glPointParameteri(void *_glfuncs, GLenum pname, GLint param); -void gl2_0_glPointParameterfv(void *_glfuncs, GLenum pname, const GLfloat* params); -void gl2_0_glPointParameterf(void *_glfuncs, GLenum pname, GLfloat param); -void gl2_0_glMultiDrawArrays(void *_glfuncs, GLenum mode, const GLint* first, const GLsizei* count, GLsizei drawcount); -void gl2_0_glBlendFuncSeparate(void *_glfuncs, GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -void gl2_0_glGetBufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -GLboolean gl2_0_glUnmapBuffer(void *_glfuncs, GLenum target); -void gl2_0_glGetBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, GLvoid* data); -void gl2_0_glBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data); -void gl2_0_glBufferData(void *_glfuncs, GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage); -GLboolean gl2_0_glIsBuffer(void *_glfuncs, GLuint buffer); -void gl2_0_glGenBuffers(void *_glfuncs, GLsizei n, GLuint* buffers); -void gl2_0_glDeleteBuffers(void *_glfuncs, GLsizei n, const GLuint* buffers); -void gl2_0_glBindBuffer(void *_glfuncs, GLenum target, GLuint buffer); -void gl2_0_glGetQueryObjectuiv(void *_glfuncs, GLuint id, GLenum pname, GLuint* params); -void gl2_0_glGetQueryObjectiv(void *_glfuncs, GLuint id, GLenum pname, GLint* params); -void gl2_0_glGetQueryiv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl2_0_glEndQuery(void *_glfuncs, GLenum target); -void gl2_0_glBeginQuery(void *_glfuncs, GLenum target, GLuint id); -GLboolean gl2_0_glIsQuery(void *_glfuncs, GLuint id); -void gl2_0_glDeleteQueries(void *_glfuncs, GLsizei n, const GLuint* ids); -void gl2_0_glGenQueries(void *_glfuncs, GLsizei n, GLuint* ids); -void gl2_0_glVertexAttribPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLboolean normalized, GLsizei stride, const GLvoid* offset); -void gl2_0_glValidateProgram(void *_glfuncs, GLuint program); -void gl2_0_glUniformMatrix4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl2_0_glUniformMatrix3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl2_0_glUniformMatrix2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl2_0_glUniform4iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gl2_0_glUniform3iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gl2_0_glUniform2iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gl2_0_glUniform1iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gl2_0_glUniform4fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gl2_0_glUniform3fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gl2_0_glUniform2fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gl2_0_glUniform1fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gl2_0_glUniform4i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -void gl2_0_glUniform3i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2); -void gl2_0_glUniform2i(void *_glfuncs, GLint location, GLint v0, GLint v1); -void gl2_0_glUniform1i(void *_glfuncs, GLint location, GLint v0); -void gl2_0_glUniform4f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -void gl2_0_glUniform3f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -void gl2_0_glUniform2f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1); -void gl2_0_glUniform1f(void *_glfuncs, GLint location, GLfloat v0); -void gl2_0_glUseProgram(void *_glfuncs, GLuint program); -void gl2_0_glShaderSource(void *_glfuncs, GLuint shader, GLsizei count, const GLchar** source, const GLint* length); -void gl2_0_glLinkProgram(void *_glfuncs, GLuint program); -GLboolean gl2_0_glIsShader(void *_glfuncs, GLuint shader); -GLboolean gl2_0_glIsProgram(void *_glfuncs, GLuint program); -void gl2_0_glGetVertexAttribiv(void *_glfuncs, GLuint index, GLenum pname, GLint* params); -void gl2_0_glGetVertexAttribfv(void *_glfuncs, GLuint index, GLenum pname, GLfloat* params); -void gl2_0_glGetVertexAttribdv(void *_glfuncs, GLuint index, GLenum pname, GLdouble* params); -void gl2_0_glGetUniformiv(void *_glfuncs, GLuint program, GLint location, GLint* params); -void gl2_0_glGetUniformfv(void *_glfuncs, GLuint program, GLint location, GLfloat* params); -GLint gl2_0_glGetUniformLocation(void *_glfuncs, GLuint program, const GLchar* name); -void gl2_0_glGetShaderSource(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* source); -void gl2_0_glGetShaderInfoLog(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* infoLog); -void gl2_0_glGetShaderiv(void *_glfuncs, GLuint shader, GLenum pname, GLint* params); -void gl2_0_glGetProgramInfoLog(void *_glfuncs, GLuint program, GLsizei bufSize, GLsizei* length, GLchar* infoLog); -void gl2_0_glGetProgramiv(void *_glfuncs, GLuint program, GLenum pname, GLint* params); -GLint gl2_0_glGetAttribLocation(void *_glfuncs, GLuint program, const GLchar* name); -void gl2_0_glGetAttachedShaders(void *_glfuncs, GLuint program, GLsizei maxCount, GLsizei* count, GLuint* obj); -void gl2_0_glGetActiveUniform(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name); -void gl2_0_glGetActiveAttrib(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name); -void gl2_0_glEnableVertexAttribArray(void *_glfuncs, GLuint index); -void gl2_0_glDisableVertexAttribArray(void *_glfuncs, GLuint index); -void gl2_0_glDetachShader(void *_glfuncs, GLuint program, GLuint shader); -void gl2_0_glDeleteShader(void *_glfuncs, GLuint shader); -void gl2_0_glDeleteProgram(void *_glfuncs, GLuint program); -GLuint gl2_0_glCreateShader(void *_glfuncs, GLenum gltype); -GLuint gl2_0_glCreateProgram(void *_glfuncs); -void gl2_0_glCompileShader(void *_glfuncs, GLuint shader); -void gl2_0_glBindAttribLocation(void *_glfuncs, GLuint program, GLuint index, const GLchar* name); -void gl2_0_glAttachShader(void *_glfuncs, GLuint program, GLuint shader); -void gl2_0_glStencilMaskSeparate(void *_glfuncs, GLenum face, GLuint mask); -void gl2_0_glStencilFuncSeparate(void *_glfuncs, GLenum face, GLenum glfunc, GLint ref, GLuint mask); -void gl2_0_glStencilOpSeparate(void *_glfuncs, GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); -void gl2_0_glDrawBuffers(void *_glfuncs, GLsizei n, const GLenum* bufs); -void gl2_0_glBlendEquationSeparate(void *_glfuncs, GLenum modeRGB, GLenum modeAlpha); -void gl2_0_glTranslatef(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl2_0_glTranslated(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl2_0_glScalef(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl2_0_glScaled(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl2_0_glRotatef(void *_glfuncs, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); -void gl2_0_glRotated(void *_glfuncs, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); -void gl2_0_glPushMatrix(void *_glfuncs); -void gl2_0_glPopMatrix(void *_glfuncs); -void gl2_0_glOrtho(void *_glfuncs, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -void gl2_0_glMultMatrixd(void *_glfuncs, const GLdouble* m); -void gl2_0_glMultMatrixf(void *_glfuncs, const GLfloat* m); -void gl2_0_glMatrixMode(void *_glfuncs, GLenum mode); -void gl2_0_glLoadMatrixd(void *_glfuncs, const GLdouble* m); -void gl2_0_glLoadMatrixf(void *_glfuncs, const GLfloat* m); -void gl2_0_glLoadIdentity(void *_glfuncs); -void gl2_0_glFrustum(void *_glfuncs, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -GLboolean gl2_0_glIsList(void *_glfuncs, GLuint list); -void gl2_0_glGetTexGeniv(void *_glfuncs, GLenum coord, GLenum pname, GLint* params); -void gl2_0_glGetTexGenfv(void *_glfuncs, GLenum coord, GLenum pname, GLfloat* params); -void gl2_0_glGetTexGendv(void *_glfuncs, GLenum coord, GLenum pname, GLdouble* params); -void gl2_0_glGetTexEnviv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl2_0_glGetTexEnvfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl2_0_glGetPolygonStipple(void *_glfuncs, GLubyte* mask); -void gl2_0_glGetPixelMapusv(void *_glfuncs, GLenum glmap, GLushort* values); -void gl2_0_glGetPixelMapuiv(void *_glfuncs, GLenum glmap, GLuint* values); -void gl2_0_glGetPixelMapfv(void *_glfuncs, GLenum glmap, GLfloat* values); -void gl2_0_glGetMaterialiv(void *_glfuncs, GLenum face, GLenum pname, GLint* params); -void gl2_0_glGetMaterialfv(void *_glfuncs, GLenum face, GLenum pname, GLfloat* params); -void gl2_0_glGetMapiv(void *_glfuncs, GLenum target, GLenum query, GLint* v); -void gl2_0_glGetMapfv(void *_glfuncs, GLenum target, GLenum query, GLfloat* v); -void gl2_0_glGetMapdv(void *_glfuncs, GLenum target, GLenum query, GLdouble* v); -void gl2_0_glGetLightiv(void *_glfuncs, GLenum light, GLenum pname, GLint* params); -void gl2_0_glGetLightfv(void *_glfuncs, GLenum light, GLenum pname, GLfloat* params); -void gl2_0_glGetClipPlane(void *_glfuncs, GLenum plane, GLdouble* equation); -void gl2_0_glDrawPixels(void *_glfuncs, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl2_0_glCopyPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum gltype); -void gl2_0_glPixelMapusv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLushort* values); -void gl2_0_glPixelMapuiv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLuint* values); -void gl2_0_glPixelMapfv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLfloat* values); -void gl2_0_glPixelTransferi(void *_glfuncs, GLenum pname, GLint param); -void gl2_0_glPixelTransferf(void *_glfuncs, GLenum pname, GLfloat param); -void gl2_0_glPixelZoom(void *_glfuncs, GLfloat xfactor, GLfloat yfactor); -void gl2_0_glAlphaFunc(void *_glfuncs, GLenum glfunc, GLfloat ref); -void gl2_0_glEvalPoint2(void *_glfuncs, GLint i, GLint j); -void gl2_0_glEvalMesh2(void *_glfuncs, GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2); -void gl2_0_glEvalPoint1(void *_glfuncs, GLint i); -void gl2_0_glEvalMesh1(void *_glfuncs, GLenum mode, GLint i1, GLint i2); -void gl2_0_glEvalCoord2fv(void *_glfuncs, const GLfloat* u); -void gl2_0_glEvalCoord2f(void *_glfuncs, GLfloat u, GLfloat v); -void gl2_0_glEvalCoord2dv(void *_glfuncs, const GLdouble* u); -void gl2_0_glEvalCoord2d(void *_glfuncs, GLdouble u, GLdouble v); -void gl2_0_glEvalCoord1fv(void *_glfuncs, const GLfloat* u); -void gl2_0_glEvalCoord1f(void *_glfuncs, GLfloat u); -void gl2_0_glEvalCoord1dv(void *_glfuncs, const GLdouble* u); -void gl2_0_glEvalCoord1d(void *_glfuncs, GLdouble u); -void gl2_0_glMapGrid2f(void *_glfuncs, GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2); -void gl2_0_glMapGrid2d(void *_glfuncs, GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2); -void gl2_0_glMapGrid1f(void *_glfuncs, GLint un, GLfloat u1, GLfloat u2); -void gl2_0_glMapGrid1d(void *_glfuncs, GLint un, GLdouble u1, GLdouble u2); -void gl2_0_glMap2f(void *_glfuncs, GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat* points); -void gl2_0_glMap2d(void *_glfuncs, GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble* points); -void gl2_0_glMap1f(void *_glfuncs, GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat* points); -void gl2_0_glMap1d(void *_glfuncs, GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble* points); -void gl2_0_glPushAttrib(void *_glfuncs, GLbitfield mask); -void gl2_0_glPopAttrib(void *_glfuncs); -void gl2_0_glAccum(void *_glfuncs, GLenum op, GLfloat value); -void gl2_0_glIndexMask(void *_glfuncs, GLuint mask); -void gl2_0_glClearIndex(void *_glfuncs, GLfloat c); -void gl2_0_glClearAccum(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl2_0_glPushName(void *_glfuncs, GLuint name); -void gl2_0_glPopName(void *_glfuncs); -void gl2_0_glPassThrough(void *_glfuncs, GLfloat token); -void gl2_0_glLoadName(void *_glfuncs, GLuint name); -void gl2_0_glInitNames(void *_glfuncs); -GLint gl2_0_glRenderMode(void *_glfuncs, GLenum mode); -void gl2_0_glSelectBuffer(void *_glfuncs, GLsizei size, GLuint* buffer); -void gl2_0_glFeedbackBuffer(void *_glfuncs, GLsizei size, GLenum gltype, GLfloat* buffer); -void gl2_0_glTexGeniv(void *_glfuncs, GLenum coord, GLenum pname, const GLint* params); -void gl2_0_glTexGeni(void *_glfuncs, GLenum coord, GLenum pname, GLint param); -void gl2_0_glTexGenfv(void *_glfuncs, GLenum coord, GLenum pname, const GLfloat* params); -void gl2_0_glTexGenf(void *_glfuncs, GLenum coord, GLenum pname, GLfloat param); -void gl2_0_glTexGendv(void *_glfuncs, GLenum coord, GLenum pname, const GLdouble* params); -void gl2_0_glTexGend(void *_glfuncs, GLenum coord, GLenum pname, GLdouble param); -void gl2_0_glTexEnviv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl2_0_glTexEnvi(void *_glfuncs, GLenum target, GLenum pname, GLint param); -void gl2_0_glTexEnvfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params); -void gl2_0_glTexEnvf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param); -void gl2_0_glShadeModel(void *_glfuncs, GLenum mode); -void gl2_0_glPolygonStipple(void *_glfuncs, const GLubyte* mask); -void gl2_0_glMaterialiv(void *_glfuncs, GLenum face, GLenum pname, const GLint* params); -void gl2_0_glMateriali(void *_glfuncs, GLenum face, GLenum pname, GLint param); -void gl2_0_glMaterialfv(void *_glfuncs, GLenum face, GLenum pname, const GLfloat* params); -void gl2_0_glMaterialf(void *_glfuncs, GLenum face, GLenum pname, GLfloat param); -void gl2_0_glLineStipple(void *_glfuncs, GLint factor, GLushort pattern); -void gl2_0_glLightModeliv(void *_glfuncs, GLenum pname, const GLint* params); -void gl2_0_glLightModeli(void *_glfuncs, GLenum pname, GLint param); -void gl2_0_glLightModelfv(void *_glfuncs, GLenum pname, const GLfloat* params); -void gl2_0_glLightModelf(void *_glfuncs, GLenum pname, GLfloat param); -void gl2_0_glLightiv(void *_glfuncs, GLenum light, GLenum pname, const GLint* params); -void gl2_0_glLighti(void *_glfuncs, GLenum light, GLenum pname, GLint param); -void gl2_0_glLightfv(void *_glfuncs, GLenum light, GLenum pname, const GLfloat* params); -void gl2_0_glLightf(void *_glfuncs, GLenum light, GLenum pname, GLfloat param); -void gl2_0_glFogiv(void *_glfuncs, GLenum pname, const GLint* params); -void gl2_0_glFogi(void *_glfuncs, GLenum pname, GLint param); -void gl2_0_glFogfv(void *_glfuncs, GLenum pname, const GLfloat* params); -void gl2_0_glFogf(void *_glfuncs, GLenum pname, GLfloat param); -void gl2_0_glColorMaterial(void *_glfuncs, GLenum face, GLenum mode); -void gl2_0_glClipPlane(void *_glfuncs, GLenum plane, const GLdouble* equation); -void gl2_0_glVertex4sv(void *_glfuncs, const GLshort* v); -void gl2_0_glVertex4s(void *_glfuncs, GLshort x, GLshort y, GLshort z, GLshort w); -void gl2_0_glVertex4iv(void *_glfuncs, const GLint* v); -void gl2_0_glVertex4i(void *_glfuncs, GLint x, GLint y, GLint z, GLint w); -void gl2_0_glVertex4fv(void *_glfuncs, const GLfloat* v); -void gl2_0_glVertex4f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -void gl2_0_glVertex4dv(void *_glfuncs, const GLdouble* v); -void gl2_0_glVertex4d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -void gl2_0_glVertex3sv(void *_glfuncs, const GLshort* v); -void gl2_0_glVertex3s(void *_glfuncs, GLshort x, GLshort y, GLshort z); -void gl2_0_glVertex3iv(void *_glfuncs, const GLint* v); -void gl2_0_glVertex3i(void *_glfuncs, GLint x, GLint y, GLint z); -void gl2_0_glVertex3fv(void *_glfuncs, const GLfloat* v); -void gl2_0_glVertex3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl2_0_glVertex3dv(void *_glfuncs, const GLdouble* v); -void gl2_0_glVertex3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl2_0_glVertex2sv(void *_glfuncs, const GLshort* v); -void gl2_0_glVertex2s(void *_glfuncs, GLshort x, GLshort y); -void gl2_0_glVertex2iv(void *_glfuncs, const GLint* v); -void gl2_0_glVertex2i(void *_glfuncs, GLint x, GLint y); -void gl2_0_glVertex2fv(void *_glfuncs, const GLfloat* v); -void gl2_0_glVertex2f(void *_glfuncs, GLfloat x, GLfloat y); -void gl2_0_glVertex2dv(void *_glfuncs, const GLdouble* v); -void gl2_0_glVertex2d(void *_glfuncs, GLdouble x, GLdouble y); -void gl2_0_glTexCoord4sv(void *_glfuncs, const GLshort* v); -void gl2_0_glTexCoord4s(void *_glfuncs, GLshort s, GLshort t, GLshort r, GLshort q); -void gl2_0_glTexCoord4iv(void *_glfuncs, const GLint* v); -void gl2_0_glTexCoord4i(void *_glfuncs, GLint s, GLint t, GLint r, GLint q); -void gl2_0_glTexCoord4fv(void *_glfuncs, const GLfloat* v); -void gl2_0_glTexCoord4f(void *_glfuncs, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -void gl2_0_glTexCoord4dv(void *_glfuncs, const GLdouble* v); -void gl2_0_glTexCoord4d(void *_glfuncs, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -void gl2_0_glTexCoord3sv(void *_glfuncs, const GLshort* v); -void gl2_0_glTexCoord3s(void *_glfuncs, GLshort s, GLshort t, GLshort r); -void gl2_0_glTexCoord3iv(void *_glfuncs, const GLint* v); -void gl2_0_glTexCoord3i(void *_glfuncs, GLint s, GLint t, GLint r); -void gl2_0_glTexCoord3fv(void *_glfuncs, const GLfloat* v); -void gl2_0_glTexCoord3f(void *_glfuncs, GLfloat s, GLfloat t, GLfloat r); -void gl2_0_glTexCoord3dv(void *_glfuncs, const GLdouble* v); -void gl2_0_glTexCoord3d(void *_glfuncs, GLdouble s, GLdouble t, GLdouble r); -void gl2_0_glTexCoord2sv(void *_glfuncs, const GLshort* v); -void gl2_0_glTexCoord2s(void *_glfuncs, GLshort s, GLshort t); -void gl2_0_glTexCoord2iv(void *_glfuncs, const GLint* v); -void gl2_0_glTexCoord2i(void *_glfuncs, GLint s, GLint t); -void gl2_0_glTexCoord2fv(void *_glfuncs, const GLfloat* v); -void gl2_0_glTexCoord2f(void *_glfuncs, GLfloat s, GLfloat t); -void gl2_0_glTexCoord2dv(void *_glfuncs, const GLdouble* v); -void gl2_0_glTexCoord2d(void *_glfuncs, GLdouble s, GLdouble t); -void gl2_0_glTexCoord1sv(void *_glfuncs, const GLshort* v); -void gl2_0_glTexCoord1s(void *_glfuncs, GLshort s); -void gl2_0_glTexCoord1iv(void *_glfuncs, const GLint* v); -void gl2_0_glTexCoord1i(void *_glfuncs, GLint s); -void gl2_0_glTexCoord1fv(void *_glfuncs, const GLfloat* v); -void gl2_0_glTexCoord1f(void *_glfuncs, GLfloat s); -void gl2_0_glTexCoord1dv(void *_glfuncs, const GLdouble* v); -void gl2_0_glTexCoord1d(void *_glfuncs, GLdouble s); -void gl2_0_glRectsv(void *_glfuncs, const GLshort* v1, const GLshort* v2); -void gl2_0_glRects(void *_glfuncs, GLshort x1, GLshort y1, GLshort x2, GLshort y2); -void gl2_0_glRectiv(void *_glfuncs, const GLint* v1, const GLint* v2); -void gl2_0_glRecti(void *_glfuncs, GLint x1, GLint y1, GLint x2, GLint y2); -void gl2_0_glRectfv(void *_glfuncs, const GLfloat* v1, const GLfloat* v2); -void gl2_0_glRectf(void *_glfuncs, GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2); -void gl2_0_glRectdv(void *_glfuncs, const GLdouble* v1, const GLdouble* v2); -void gl2_0_glRectd(void *_glfuncs, GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2); -void gl2_0_glRasterPos4sv(void *_glfuncs, const GLshort* v); -void gl2_0_glRasterPos4s(void *_glfuncs, GLshort x, GLshort y, GLshort z, GLshort w); -void gl2_0_glRasterPos4iv(void *_glfuncs, const GLint* v); -void gl2_0_glRasterPos4i(void *_glfuncs, GLint x, GLint y, GLint z, GLint w); -void gl2_0_glRasterPos4fv(void *_glfuncs, const GLfloat* v); -void gl2_0_glRasterPos4f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -void gl2_0_glRasterPos4dv(void *_glfuncs, const GLdouble* v); -void gl2_0_glRasterPos4d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -void gl2_0_glRasterPos3sv(void *_glfuncs, const GLshort* v); -void gl2_0_glRasterPos3s(void *_glfuncs, GLshort x, GLshort y, GLshort z); -void gl2_0_glRasterPos3iv(void *_glfuncs, const GLint* v); -void gl2_0_glRasterPos3i(void *_glfuncs, GLint x, GLint y, GLint z); -void gl2_0_glRasterPos3fv(void *_glfuncs, const GLfloat* v); -void gl2_0_glRasterPos3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl2_0_glRasterPos3dv(void *_glfuncs, const GLdouble* v); -void gl2_0_glRasterPos3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl2_0_glRasterPos2sv(void *_glfuncs, const GLshort* v); -void gl2_0_glRasterPos2s(void *_glfuncs, GLshort x, GLshort y); -void gl2_0_glRasterPos2iv(void *_glfuncs, const GLint* v); -void gl2_0_glRasterPos2i(void *_glfuncs, GLint x, GLint y); -void gl2_0_glRasterPos2fv(void *_glfuncs, const GLfloat* v); -void gl2_0_glRasterPos2f(void *_glfuncs, GLfloat x, GLfloat y); -void gl2_0_glRasterPos2dv(void *_glfuncs, const GLdouble* v); -void gl2_0_glRasterPos2d(void *_glfuncs, GLdouble x, GLdouble y); -void gl2_0_glNormal3sv(void *_glfuncs, const GLshort* v); -void gl2_0_glNormal3s(void *_glfuncs, GLshort nx, GLshort ny, GLshort nz); -void gl2_0_glNormal3iv(void *_glfuncs, const GLint* v); -void gl2_0_glNormal3i(void *_glfuncs, GLint nx, GLint ny, GLint nz); -void gl2_0_glNormal3fv(void *_glfuncs, const GLfloat* v); -void gl2_0_glNormal3f(void *_glfuncs, GLfloat nx, GLfloat ny, GLfloat nz); -void gl2_0_glNormal3dv(void *_glfuncs, const GLdouble* v); -void gl2_0_glNormal3d(void *_glfuncs, GLdouble nx, GLdouble ny, GLdouble nz); -void gl2_0_glNormal3bv(void *_glfuncs, const GLbyte* v); -void gl2_0_glNormal3b(void *_glfuncs, GLbyte nx, GLbyte ny, GLbyte nz); -void gl2_0_glIndexsv(void *_glfuncs, const GLshort* c); -void gl2_0_glIndexs(void *_glfuncs, GLshort c); -void gl2_0_glIndexiv(void *_glfuncs, const GLint* c); -void gl2_0_glIndexi(void *_glfuncs, GLint c); -void gl2_0_glIndexfv(void *_glfuncs, const GLfloat* c); -void gl2_0_glIndexf(void *_glfuncs, GLfloat c); -void gl2_0_glIndexdv(void *_glfuncs, const GLdouble* c); -void gl2_0_glIndexd(void *_glfuncs, GLdouble c); -void gl2_0_glEnd(void *_glfuncs); -void gl2_0_glEdgeFlagv(void *_glfuncs, const GLboolean* flag); -void gl2_0_glEdgeFlag(void *_glfuncs, GLboolean flag); -void gl2_0_glColor4usv(void *_glfuncs, const GLushort* v); -void gl2_0_glColor4us(void *_glfuncs, GLushort red, GLushort green, GLushort blue, GLushort alpha); -void gl2_0_glColor4uiv(void *_glfuncs, const GLuint* v); -void gl2_0_glColor4ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue, GLuint alpha); -void gl2_0_glColor4ubv(void *_glfuncs, const GLubyte* v); -void gl2_0_glColor4ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha); -void gl2_0_glColor4sv(void *_glfuncs, const GLshort* v); -void gl2_0_glColor4s(void *_glfuncs, GLshort red, GLshort green, GLshort blue, GLshort alpha); -void gl2_0_glColor4iv(void *_glfuncs, const GLint* v); -void gl2_0_glColor4i(void *_glfuncs, GLint red, GLint green, GLint blue, GLint alpha); -void gl2_0_glColor4fv(void *_glfuncs, const GLfloat* v); -void gl2_0_glColor4f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl2_0_glColor4dv(void *_glfuncs, const GLdouble* v); -void gl2_0_glColor4d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha); -void gl2_0_glColor4bv(void *_glfuncs, const GLbyte* v); -void gl2_0_glColor4b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha); -void gl2_0_glColor3usv(void *_glfuncs, const GLushort* v); -void gl2_0_glColor3us(void *_glfuncs, GLushort red, GLushort green, GLushort blue); -void gl2_0_glColor3uiv(void *_glfuncs, const GLuint* v); -void gl2_0_glColor3ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue); -void gl2_0_glColor3ubv(void *_glfuncs, const GLubyte* v); -void gl2_0_glColor3ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue); -void gl2_0_glColor3sv(void *_glfuncs, const GLshort* v); -void gl2_0_glColor3s(void *_glfuncs, GLshort red, GLshort green, GLshort blue); -void gl2_0_glColor3iv(void *_glfuncs, const GLint* v); -void gl2_0_glColor3i(void *_glfuncs, GLint red, GLint green, GLint blue); -void gl2_0_glColor3fv(void *_glfuncs, const GLfloat* v); -void gl2_0_glColor3f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue); -void gl2_0_glColor3dv(void *_glfuncs, const GLdouble* v); -void gl2_0_glColor3d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue); -void gl2_0_glColor3bv(void *_glfuncs, const GLbyte* v); -void gl2_0_glColor3b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue); -void gl2_0_glBitmap(void *_glfuncs, GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte* bitmap); -void gl2_0_glBegin(void *_glfuncs, GLenum mode); -void gl2_0_glListBase(void *_glfuncs, GLuint base); -GLuint gl2_0_glGenLists(void *_glfuncs, GLsizei range_); -void gl2_0_glDeleteLists(void *_glfuncs, GLuint list, GLsizei range_); -void gl2_0_glCallLists(void *_glfuncs, GLsizei n, GLenum gltype, const GLvoid* lists); -void gl2_0_glCallList(void *_glfuncs, GLuint list); -void gl2_0_glEndList(void *_glfuncs); -void gl2_0_glNewList(void *_glfuncs, GLuint list, GLenum mode); -void gl2_0_glPushClientAttrib(void *_glfuncs, GLbitfield mask); -void gl2_0_glPopClientAttrib(void *_glfuncs); -void gl2_0_glPrioritizeTextures(void *_glfuncs, GLsizei n, const GLuint* textures, const GLfloat* priorities); -GLboolean gl2_0_glAreTexturesResident(void *_glfuncs, GLsizei n, const GLuint* textures, GLboolean* residences); -void gl2_0_glVertexPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl2_0_glTexCoordPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl2_0_glNormalPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl2_0_glInterleavedArrays(void *_glfuncs, GLenum format, GLsizei stride, const GLvoid* pointer); -void gl2_0_glIndexPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl2_0_glEnableClientState(void *_glfuncs, GLenum array); -void gl2_0_glEdgeFlagPointer(void *_glfuncs, GLsizei stride, const GLvoid* pointer); -void gl2_0_glDisableClientState(void *_glfuncs, GLenum array); -void gl2_0_glColorPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl2_0_glArrayElement(void *_glfuncs, GLint i); -void gl2_0_glResetMinmax(void *_glfuncs, GLenum target); -void gl2_0_glResetHistogram(void *_glfuncs, GLenum target); -void gl2_0_glMinmax(void *_glfuncs, GLenum target, GLenum internalFormat, GLboolean sink); -void gl2_0_glHistogram(void *_glfuncs, GLenum target, GLsizei width, GLenum internalFormat, GLboolean sink); -void gl2_0_glGetMinmaxParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl2_0_glGetMinmaxParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl2_0_glGetMinmax(void *_glfuncs, GLenum target, GLboolean reset, GLenum format, GLenum gltype, GLvoid* values); -void gl2_0_glGetHistogramParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl2_0_glGetHistogramParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl2_0_glGetHistogram(void *_glfuncs, GLenum target, GLboolean reset, GLenum format, GLenum gltype, GLvoid* values); -void gl2_0_glSeparableFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* row, const GLvoid* column); -void gl2_0_glGetSeparableFilter(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* row, GLvoid* column, GLvoid* span); -void gl2_0_glGetConvolutionParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl2_0_glGetConvolutionParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl2_0_glGetConvolutionFilter(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* image); -void gl2_0_glCopyConvolutionFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height); -void gl2_0_glCopyConvolutionFilter1D(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width); -void gl2_0_glConvolutionParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl2_0_glConvolutionParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint params); -void gl2_0_glConvolutionParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params); -void gl2_0_glConvolutionParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat params); -void gl2_0_glConvolutionFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* image); -void gl2_0_glConvolutionFilter1D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum gltype, const GLvoid* image); -void gl2_0_glCopyColorSubTable(void *_glfuncs, GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); -void gl2_0_glColorSubTable(void *_glfuncs, GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum gltype, const GLvoid* data); -void gl2_0_glGetColorTableParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl2_0_glGetColorTableParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl2_0_glGetColorTable(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* table); -void gl2_0_glCopyColorTable(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width); -void gl2_0_glColorTableParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl2_0_glColorTableParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params); -void gl2_0_glColorTable(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum gltype, const GLvoid* table); -void gl2_0_glMultTransposeMatrixd(void *_glfuncs, const GLdouble* m); -void gl2_0_glMultTransposeMatrixf(void *_glfuncs, const GLfloat* m); -void gl2_0_glLoadTransposeMatrixd(void *_glfuncs, const GLdouble* m); -void gl2_0_glLoadTransposeMatrixf(void *_glfuncs, const GLfloat* m); -void gl2_0_glMultiTexCoord4sv(void *_glfuncs, GLenum target, const GLshort* v); -void gl2_0_glMultiTexCoord4s(void *_glfuncs, GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); -void gl2_0_glMultiTexCoord4iv(void *_glfuncs, GLenum target, const GLint* v); -void gl2_0_glMultiTexCoord4i(void *_glfuncs, GLenum target, GLint s, GLint t, GLint r, GLint q); -void gl2_0_glMultiTexCoord4fv(void *_glfuncs, GLenum target, const GLfloat* v); -void gl2_0_glMultiTexCoord4f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -void gl2_0_glMultiTexCoord4dv(void *_glfuncs, GLenum target, const GLdouble* v); -void gl2_0_glMultiTexCoord4d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -void gl2_0_glMultiTexCoord3sv(void *_glfuncs, GLenum target, const GLshort* v); -void gl2_0_glMultiTexCoord3s(void *_glfuncs, GLenum target, GLshort s, GLshort t, GLshort r); -void gl2_0_glMultiTexCoord3iv(void *_glfuncs, GLenum target, const GLint* v); -void gl2_0_glMultiTexCoord3i(void *_glfuncs, GLenum target, GLint s, GLint t, GLint r); -void gl2_0_glMultiTexCoord3fv(void *_glfuncs, GLenum target, const GLfloat* v); -void gl2_0_glMultiTexCoord3f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t, GLfloat r); -void gl2_0_glMultiTexCoord3dv(void *_glfuncs, GLenum target, const GLdouble* v); -void gl2_0_glMultiTexCoord3d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t, GLdouble r); -void gl2_0_glMultiTexCoord2sv(void *_glfuncs, GLenum target, const GLshort* v); -void gl2_0_glMultiTexCoord2s(void *_glfuncs, GLenum target, GLshort s, GLshort t); -void gl2_0_glMultiTexCoord2iv(void *_glfuncs, GLenum target, const GLint* v); -void gl2_0_glMultiTexCoord2i(void *_glfuncs, GLenum target, GLint s, GLint t); -void gl2_0_glMultiTexCoord2fv(void *_glfuncs, GLenum target, const GLfloat* v); -void gl2_0_glMultiTexCoord2f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t); -void gl2_0_glMultiTexCoord2dv(void *_glfuncs, GLenum target, const GLdouble* v); -void gl2_0_glMultiTexCoord2d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t); -void gl2_0_glMultiTexCoord1sv(void *_glfuncs, GLenum target, const GLshort* v); -void gl2_0_glMultiTexCoord1s(void *_glfuncs, GLenum target, GLshort s); -void gl2_0_glMultiTexCoord1iv(void *_glfuncs, GLenum target, const GLint* v); -void gl2_0_glMultiTexCoord1i(void *_glfuncs, GLenum target, GLint s); -void gl2_0_glMultiTexCoord1fv(void *_glfuncs, GLenum target, const GLfloat* v); -void gl2_0_glMultiTexCoord1f(void *_glfuncs, GLenum target, GLfloat s); -void gl2_0_glMultiTexCoord1dv(void *_glfuncs, GLenum target, const GLdouble* v); -void gl2_0_glMultiTexCoord1d(void *_glfuncs, GLenum target, GLdouble s); -void gl2_0_glClientActiveTexture(void *_glfuncs, GLenum texture); -void gl2_0_glWindowPos3sv(void *_glfuncs, const GLshort* v); -void gl2_0_glWindowPos3s(void *_glfuncs, GLshort x, GLshort y, GLshort z); -void gl2_0_glWindowPos3iv(void *_glfuncs, const GLint* v); -void gl2_0_glWindowPos3i(void *_glfuncs, GLint x, GLint y, GLint z); -void gl2_0_glWindowPos3fv(void *_glfuncs, const GLfloat* v); -void gl2_0_glWindowPos3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl2_0_glWindowPos3dv(void *_glfuncs, const GLdouble* v); -void gl2_0_glWindowPos3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl2_0_glWindowPos2sv(void *_glfuncs, const GLshort* v); -void gl2_0_glWindowPos2s(void *_glfuncs, GLshort x, GLshort y); -void gl2_0_glWindowPos2iv(void *_glfuncs, const GLint* v); -void gl2_0_glWindowPos2i(void *_glfuncs, GLint x, GLint y); -void gl2_0_glWindowPos2fv(void *_glfuncs, const GLfloat* v); -void gl2_0_glWindowPos2f(void *_glfuncs, GLfloat x, GLfloat y); -void gl2_0_glWindowPos2dv(void *_glfuncs, const GLdouble* v); -void gl2_0_glWindowPos2d(void *_glfuncs, GLdouble x, GLdouble y); -void gl2_0_glSecondaryColorPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl2_0_glSecondaryColor3usv(void *_glfuncs, const GLushort* v); -void gl2_0_glSecondaryColor3us(void *_glfuncs, GLushort red, GLushort green, GLushort blue); -void gl2_0_glSecondaryColor3uiv(void *_glfuncs, const GLuint* v); -void gl2_0_glSecondaryColor3ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue); -void gl2_0_glSecondaryColor3ubv(void *_glfuncs, const GLubyte* v); -void gl2_0_glSecondaryColor3ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue); -void gl2_0_glSecondaryColor3sv(void *_glfuncs, const GLshort* v); -void gl2_0_glSecondaryColor3s(void *_glfuncs, GLshort red, GLshort green, GLshort blue); -void gl2_0_glSecondaryColor3iv(void *_glfuncs, const GLint* v); -void gl2_0_glSecondaryColor3i(void *_glfuncs, GLint red, GLint green, GLint blue); -void gl2_0_glSecondaryColor3fv(void *_glfuncs, const GLfloat* v); -void gl2_0_glSecondaryColor3f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue); -void gl2_0_glSecondaryColor3dv(void *_glfuncs, const GLdouble* v); -void gl2_0_glSecondaryColor3d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue); -void gl2_0_glSecondaryColor3bv(void *_glfuncs, const GLbyte* v); -void gl2_0_glSecondaryColor3b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue); -void gl2_0_glFogCoordPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl2_0_glFogCoorddv(void *_glfuncs, const GLdouble* coord); -void gl2_0_glFogCoordd(void *_glfuncs, GLdouble coord); -void gl2_0_glFogCoordfv(void *_glfuncs, const GLfloat* coord); -void gl2_0_glFogCoordf(void *_glfuncs, GLfloat coord); -void gl2_0_glVertexAttrib4usv(void *_glfuncs, GLuint index, const GLushort* v); -void gl2_0_glVertexAttrib4uiv(void *_glfuncs, GLuint index, const GLuint* v); -void gl2_0_glVertexAttrib4ubv(void *_glfuncs, GLuint index, const GLubyte* v); -void gl2_0_glVertexAttrib4sv(void *_glfuncs, GLuint index, const GLshort* v); -void gl2_0_glVertexAttrib4s(void *_glfuncs, GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -void gl2_0_glVertexAttrib4iv(void *_glfuncs, GLuint index, const GLint* v); -void gl2_0_glVertexAttrib4fv(void *_glfuncs, GLuint index, const GLfloat* v); -void gl2_0_glVertexAttrib4f(void *_glfuncs, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -void gl2_0_glVertexAttrib4dv(void *_glfuncs, GLuint index, const GLdouble* v); -void gl2_0_glVertexAttrib4d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -void gl2_0_glVertexAttrib4bv(void *_glfuncs, GLuint index, const GLbyte* v); -void gl2_0_glVertexAttrib4Nusv(void *_glfuncs, GLuint index, const GLushort* v); -void gl2_0_glVertexAttrib4Nuiv(void *_glfuncs, GLuint index, const GLuint* v); -void gl2_0_glVertexAttrib4Nubv(void *_glfuncs, GLuint index, const GLubyte* v); -void gl2_0_glVertexAttrib4Nub(void *_glfuncs, GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -void gl2_0_glVertexAttrib4Nsv(void *_glfuncs, GLuint index, const GLshort* v); -void gl2_0_glVertexAttrib4Niv(void *_glfuncs, GLuint index, const GLint* v); -void gl2_0_glVertexAttrib4Nbv(void *_glfuncs, GLuint index, const GLbyte* v); -void gl2_0_glVertexAttrib3sv(void *_glfuncs, GLuint index, const GLshort* v); -void gl2_0_glVertexAttrib3s(void *_glfuncs, GLuint index, GLshort x, GLshort y, GLshort z); -void gl2_0_glVertexAttrib3fv(void *_glfuncs, GLuint index, const GLfloat* v); -void gl2_0_glVertexAttrib3f(void *_glfuncs, GLuint index, GLfloat x, GLfloat y, GLfloat z); -void gl2_0_glVertexAttrib3dv(void *_glfuncs, GLuint index, const GLdouble* v); -void gl2_0_glVertexAttrib3d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y, GLdouble z); -void gl2_0_glVertexAttrib2sv(void *_glfuncs, GLuint index, const GLshort* v); -void gl2_0_glVertexAttrib2s(void *_glfuncs, GLuint index, GLshort x, GLshort y); -void gl2_0_glVertexAttrib2fv(void *_glfuncs, GLuint index, const GLfloat* v); -void gl2_0_glVertexAttrib2f(void *_glfuncs, GLuint index, GLfloat x, GLfloat y); -void gl2_0_glVertexAttrib2dv(void *_glfuncs, GLuint index, const GLdouble* v); -void gl2_0_glVertexAttrib2d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y); -void gl2_0_glVertexAttrib1sv(void *_glfuncs, GLuint index, const GLshort* v); -void gl2_0_glVertexAttrib1s(void *_glfuncs, GLuint index, GLshort x); -void gl2_0_glVertexAttrib1fv(void *_glfuncs, GLuint index, const GLfloat* v); -void gl2_0_glVertexAttrib1f(void *_glfuncs, GLuint index, GLfloat x); -void gl2_0_glVertexAttrib1dv(void *_glfuncs, GLuint index, const GLdouble* v); -void gl2_0_glVertexAttrib1d(void *_glfuncs, GLuint index, GLdouble x); - - -#ifdef __cplusplus -} // extern "C" -#endif diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/2.0/gl.go b/Godeps/_workspace/src/github.com/obscuren/qml/gl/2.0/gl.go deleted file mode 100644 index 7bd1e1b524..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/2.0/gl.go +++ /dev/null @@ -1,6407 +0,0 @@ -// ** file automatically generated by glgen -- do not edit manually ** - -package GL - -// #cgo CXXFLAGS: -std=c++0x -pedantic-errors -Wall -fno-strict-aliasing -// #cgo LDFLAGS: -lstdc++ -// #cgo pkg-config: Qt5Core Qt5OpenGL -// -// #include "funcs.h" -// -// void free(void*); -// -import "C" - -import ( - "fmt" - "reflect" - "unsafe" - - "gopkg.in/qml.v1/gl/glbase" -) - -// API returns a value that offers methods matching the OpenGL version 2.0 API. -// -// The returned API must not be used after the provided OpenGL context becomes invalid. -func API(context glbase.Contexter) *GL { - gl := &GL{} - gl.funcs = C.gl2_0_funcs() - if gl.funcs == nil { - panic(fmt.Errorf("OpenGL version 2.0 is not available")) - } - return gl -} - -// GL implements the OpenGL version 2.0 API. Values of this -// type must be created via the API function, and it must not be used after -// the associated OpenGL context becomes invalid. -type GL struct { - funcs unsafe.Pointer -} - -const ( - FALSE = 0 - TRUE = 1 - NONE = 0 - - BYTE = 0x1400 - UNSIGNED_BYTE = 0x1401 - SHORT = 0x1402 - UNSIGNED_SHORT = 0x1403 - INT = 0x1404 - UNSIGNED_INT = 0x1405 - FLOAT = 0x1406 - N2_BYTES = 0x1407 - N3_BYTES = 0x1408 - N4_BYTES = 0x1409 - DOUBLE = 0x140A - - ACCUM = 0x0100 - LOAD = 0x0101 - RETURN = 0x0102 - MULT = 0x0103 - ADD = 0x0104 - - ACCUM_BUFFER_BIT = 0x00000200 - ALL_ATTRIB_BITS = 0xFFFFFFFF - COLOR_BUFFER_BIT = 0x00004000 - CURRENT_BIT = 0x00000001 - DEPTH_BUFFER_BIT = 0x00000100 - ENABLE_BIT = 0x00002000 - EVAL_BIT = 0x00010000 - FOG_BIT = 0x00000080 - HINT_BIT = 0x00008000 - LIGHTING_BIT = 0x00000040 - LINE_BIT = 0x00000004 - LIST_BIT = 0x00020000 - MULTISAMPLE_BIT = 0x20000000 - PIXEL_MODE_BIT = 0x00000020 - POINT_BIT = 0x00000002 - POLYGON_BIT = 0x00000008 - POLYGON_STIPPLE_BIT = 0x00000010 - SCISSOR_BIT = 0x00080000 - STENCIL_BUFFER_BIT = 0x00000400 - TEXTURE_BIT = 0x00040000 - TRANSFORM_BIT = 0x00001000 - VIEWPORT_BIT = 0x00000800 - - ALWAYS = 0x0207 - EQUAL = 0x0202 - GEQUAL = 0x0206 - GREATER = 0x0204 - LEQUAL = 0x0203 - LESS = 0x0201 - NEVER = 0x0200 - NOTEQUAL = 0x0205 - - LOGIC_OP = 0x0BF1 - - DST_ALPHA = 0x0304 - ONE = 1 - ONE_MINUS_DST_ALPHA = 0x0305 - ONE_MINUS_SRC_ALPHA = 0x0303 - ONE_MINUS_SRC_COLOR = 0x0301 - SRC_ALPHA = 0x0302 - SRC_COLOR = 0x0300 - ZERO = 0 - - DST_COLOR = 0x0306 - ONE_MINUS_DST_COLOR = 0x0307 - SRC_ALPHA_SATURATE = 0x0308 - - CLIENT_ALL_ATTRIB_BITS = 0xFFFFFFFF - CLIENT_PIXEL_STORE_BIT = 0x00000001 - CLIENT_VERTEX_ARRAY_BIT = 0x00000002 - - CLIP_PLANE0 = 0x3000 - CLIP_PLANE1 = 0x3001 - CLIP_PLANE2 = 0x3002 - CLIP_PLANE3 = 0x3003 - CLIP_PLANE4 = 0x3004 - CLIP_PLANE5 = 0x3005 - - BACK = 0x0405 - FRONT = 0x0404 - FRONT_AND_BACK = 0x0408 - - AMBIENT = 0x1200 - AMBIENT_AND_DIFFUSE = 0x1602 - DIFFUSE = 0x1201 - EMISSION = 0x1600 - SPECULAR = 0x1202 - - AUX0 = 0x0409 - AUX1 = 0x040A - AUX2 = 0x040B - AUX3 = 0x040C - BACK_LEFT = 0x0402 - BACK_RIGHT = 0x0403 - FRONT_LEFT = 0x0400 - FRONT_RIGHT = 0x0401 - LEFT = 0x0406 - RIGHT = 0x0407 - - ALPHA_TEST = 0x0BC0 - AUTO_NORMAL = 0x0D80 - BLEND = 0x0BE2 - COLOR_ARRAY = 0x8076 - COLOR_LOGIC_OP = 0x0BF2 - COLOR_MATERIAL = 0x0B57 - CULL_FACE = 0x0B44 - DEPTH_TEST = 0x0B71 - DITHER = 0x0BD0 - EDGE_FLAG_ARRAY = 0x8079 - FOG = 0x0B60 - INDEX_ARRAY = 0x8077 - INDEX_LOGIC_OP = 0x0BF1 - LIGHT0 = 0x4000 - LIGHT1 = 0x4001 - LIGHT2 = 0x4002 - LIGHT3 = 0x4003 - LIGHT4 = 0x4004 - LIGHT5 = 0x4005 - LIGHT6 = 0x4006 - LIGHT7 = 0x4007 - LIGHTING = 0x0B50 - LINE_SMOOTH = 0x0B20 - LINE_STIPPLE = 0x0B24 - MAP1_COLOR_4 = 0x0D90 - MAP1_INDEX = 0x0D91 - MAP1_NORMAL = 0x0D92 - MAP1_TEXTURE_COORD_1 = 0x0D93 - MAP1_TEXTURE_COORD_2 = 0x0D94 - MAP1_TEXTURE_COORD_3 = 0x0D95 - MAP1_TEXTURE_COORD_4 = 0x0D96 - MAP1_VERTEX_3 = 0x0D97 - MAP1_VERTEX_4 = 0x0D98 - MAP2_COLOR_4 = 0x0DB0 - MAP2_INDEX = 0x0DB1 - MAP2_NORMAL = 0x0DB2 - MAP2_TEXTURE_COORD_1 = 0x0DB3 - MAP2_TEXTURE_COORD_2 = 0x0DB4 - MAP2_TEXTURE_COORD_3 = 0x0DB5 - MAP2_TEXTURE_COORD_4 = 0x0DB6 - MAP2_VERTEX_3 = 0x0DB7 - MAP2_VERTEX_4 = 0x0DB8 - NORMALIZE = 0x0BA1 - NORMAL_ARRAY = 0x8075 - POINT_SMOOTH = 0x0B10 - POLYGON_OFFSET_FILL = 0x8037 - POLYGON_OFFSET_LINE = 0x2A02 - POLYGON_OFFSET_POINT = 0x2A01 - POLYGON_SMOOTH = 0x0B41 - POLYGON_STIPPLE = 0x0B42 - SCISSOR_TEST = 0x0C11 - STENCIL_TEST = 0x0B90 - TEXTURE_1D = 0x0DE0 - TEXTURE_2D = 0x0DE1 - TEXTURE_COORD_ARRAY = 0x8078 - TEXTURE_GEN_Q = 0x0C63 - TEXTURE_GEN_R = 0x0C62 - TEXTURE_GEN_S = 0x0C60 - TEXTURE_GEN_T = 0x0C61 - VERTEX_ARRAY = 0x8074 - - INVALID_ENUM = 0x0500 - INVALID_OPERATION = 0x0502 - INVALID_VALUE = 0x0501 - NO_ERROR = 0 - OUT_OF_MEMORY = 0x0505 - STACK_OVERFLOW = 0x0503 - STACK_UNDERFLOW = 0x0504 - - N2D = 0x0600 - N3D = 0x0601 - N3D_COLOR = 0x0602 - N3D_COLOR_TEXTURE = 0x0603 - N4D_COLOR_TEXTURE = 0x0604 - - BITMAP_TOKEN = 0x0704 - COPY_PIXEL_TOKEN = 0x0706 - DRAW_PIXEL_TOKEN = 0x0705 - LINE_RESET_TOKEN = 0x0707 - LINE_TOKEN = 0x0702 - PASS_THROUGH_TOKEN = 0x0700 - POINT_TOKEN = 0x0701 - POLYGON_TOKEN = 0x0703 - - EXP = 0x0800 - EXP2 = 0x0801 - LINEAR = 0x2601 - - FOG_COLOR = 0x0B66 - FOG_DENSITY = 0x0B62 - FOG_END = 0x0B64 - FOG_INDEX = 0x0B61 - FOG_MODE = 0x0B65 - FOG_START = 0x0B63 - - CCW = 0x0901 - CW = 0x0900 - - COEFF = 0x0A00 - DOMAIN = 0x0A02 - ORDER = 0x0A01 - - PIXEL_MAP_A_TO_A = 0x0C79 - PIXEL_MAP_B_TO_B = 0x0C78 - PIXEL_MAP_G_TO_G = 0x0C77 - PIXEL_MAP_I_TO_A = 0x0C75 - PIXEL_MAP_I_TO_B = 0x0C74 - PIXEL_MAP_I_TO_G = 0x0C73 - PIXEL_MAP_I_TO_I = 0x0C70 - PIXEL_MAP_I_TO_R = 0x0C72 - PIXEL_MAP_R_TO_R = 0x0C76 - PIXEL_MAP_S_TO_S = 0x0C71 - - ACCUM_ALPHA_BITS = 0x0D5B - ACCUM_BLUE_BITS = 0x0D5A - ACCUM_CLEAR_VALUE = 0x0B80 - ACCUM_GREEN_BITS = 0x0D59 - ACCUM_RED_BITS = 0x0D58 - ALIASED_LINE_WIDTH_RANGE = 0x846E - ALIASED_POINT_SIZE_RANGE = 0x846D - ALPHA_BIAS = 0x0D1D - ALPHA_BITS = 0x0D55 - ALPHA_SCALE = 0x0D1C - ALPHA_TEST_FUNC = 0x0BC1 - ALPHA_TEST_REF = 0x0BC2 - ATTRIB_STACK_DEPTH = 0x0BB0 - AUX_BUFFERS = 0x0C00 - BLEND_DST = 0x0BE0 - BLEND_SRC = 0x0BE1 - BLUE_BIAS = 0x0D1B - BLUE_BITS = 0x0D54 - BLUE_SCALE = 0x0D1A - CLIENT_ATTRIB_STACK_DEPTH = 0x0BB1 - COLOR_ARRAY_SIZE = 0x8081 - COLOR_ARRAY_STRIDE = 0x8083 - COLOR_ARRAY_TYPE = 0x8082 - COLOR_CLEAR_VALUE = 0x0C22 - COLOR_MATERIAL_FACE = 0x0B55 - COLOR_MATERIAL_PARAMETER = 0x0B56 - COLOR_WRITEMASK = 0x0C23 - CULL_FACE_MODE = 0x0B45 - CURRENT_COLOR = 0x0B00 - CURRENT_INDEX = 0x0B01 - CURRENT_NORMAL = 0x0B02 - CURRENT_RASTER_COLOR = 0x0B04 - CURRENT_RASTER_DISTANCE = 0x0B09 - CURRENT_RASTER_INDEX = 0x0B05 - CURRENT_RASTER_POSITION = 0x0B07 - CURRENT_RASTER_POSITION_VALID = 0x0B08 - CURRENT_RASTER_TEXTURE_COORDS = 0x0B06 - CURRENT_TEXTURE_COORDS = 0x0B03 - DEPTH_BIAS = 0x0D1F - DEPTH_BITS = 0x0D56 - DEPTH_CLEAR_VALUE = 0x0B73 - DEPTH_FUNC = 0x0B74 - DEPTH_RANGE = 0x0B70 - DEPTH_SCALE = 0x0D1E - DEPTH_WRITEMASK = 0x0B72 - DOUBLEBUFFER = 0x0C32 - DRAW_BUFFER = 0x0C01 - EDGE_FLAG = 0x0B43 - EDGE_FLAG_ARRAY_STRIDE = 0x808C - FEEDBACK_BUFFER_SIZE = 0x0DF1 - FEEDBACK_BUFFER_TYPE = 0x0DF2 - FOG_HINT = 0x0C54 - FRONT_FACE = 0x0B46 - GREEN_BIAS = 0x0D19 - GREEN_BITS = 0x0D53 - GREEN_SCALE = 0x0D18 - INDEX_ARRAY_STRIDE = 0x8086 - INDEX_ARRAY_TYPE = 0x8085 - INDEX_BITS = 0x0D51 - INDEX_CLEAR_VALUE = 0x0C20 - INDEX_MODE = 0x0C30 - INDEX_OFFSET = 0x0D13 - INDEX_SHIFT = 0x0D12 - INDEX_WRITEMASK = 0x0C21 - LIGHT_MODEL_AMBIENT = 0x0B53 - LIGHT_MODEL_COLOR_CONTROL = 0x81F8 - LIGHT_MODEL_LOCAL_VIEWER = 0x0B51 - LIGHT_MODEL_TWO_SIDE = 0x0B52 - LINE_SMOOTH_HINT = 0x0C52 - LINE_STIPPLE_PATTERN = 0x0B25 - LINE_STIPPLE_REPEAT = 0x0B26 - LINE_WIDTH = 0x0B21 - LINE_WIDTH_GRANULARITY = 0x0B23 - LINE_WIDTH_RANGE = 0x0B22 - LIST_BASE = 0x0B32 - LIST_INDEX = 0x0B33 - LIST_MODE = 0x0B30 - LOGIC_OP_MODE = 0x0BF0 - MAP1_GRID_DOMAIN = 0x0DD0 - MAP1_GRID_SEGMENTS = 0x0DD1 - MAP2_GRID_DOMAIN = 0x0DD2 - MAP2_GRID_SEGMENTS = 0x0DD3 - MAP_COLOR = 0x0D10 - MAP_STENCIL = 0x0D11 - MATRIX_MODE = 0x0BA0 - MAX_ATTRIB_STACK_DEPTH = 0x0D35 - MAX_CLIENT_ATTRIB_STACK_DEPTH = 0x0D3B - MAX_CLIP_PLANES = 0x0D32 - MAX_EVAL_ORDER = 0x0D30 - MAX_LIGHTS = 0x0D31 - MAX_LIST_NESTING = 0x0B31 - MAX_MODELVIEW_STACK_DEPTH = 0x0D36 - MAX_NAME_STACK_DEPTH = 0x0D37 - MAX_PIXEL_MAP_TABLE = 0x0D34 - MAX_PROJECTION_STACK_DEPTH = 0x0D38 - MAX_TEXTURE_SIZE = 0x0D33 - MAX_TEXTURE_STACK_DEPTH = 0x0D39 - MAX_VIEWPORT_DIMS = 0x0D3A - MODELVIEW_MATRIX = 0x0BA6 - MODELVIEW_STACK_DEPTH = 0x0BA3 - NAME_STACK_DEPTH = 0x0D70 - NORMAL_ARRAY_STRIDE = 0x807F - NORMAL_ARRAY_TYPE = 0x807E - PACK_ALIGNMENT = 0x0D05 - PACK_LSB_FIRST = 0x0D01 - PACK_ROW_LENGTH = 0x0D02 - PACK_SKIP_PIXELS = 0x0D04 - PACK_SKIP_ROWS = 0x0D03 - PACK_SWAP_BYTES = 0x0D00 - PERSPECTIVE_CORRECTION_HINT = 0x0C50 - PIXEL_MAP_A_TO_A_SIZE = 0x0CB9 - PIXEL_MAP_B_TO_B_SIZE = 0x0CB8 - PIXEL_MAP_G_TO_G_SIZE = 0x0CB7 - PIXEL_MAP_I_TO_A_SIZE = 0x0CB5 - PIXEL_MAP_I_TO_B_SIZE = 0x0CB4 - PIXEL_MAP_I_TO_G_SIZE = 0x0CB3 - PIXEL_MAP_I_TO_I_SIZE = 0x0CB0 - PIXEL_MAP_I_TO_R_SIZE = 0x0CB2 - PIXEL_MAP_R_TO_R_SIZE = 0x0CB6 - PIXEL_MAP_S_TO_S_SIZE = 0x0CB1 - POINT_SIZE = 0x0B11 - POINT_SIZE_GRANULARITY = 0x0B13 - POINT_SIZE_RANGE = 0x0B12 - POINT_SMOOTH_HINT = 0x0C51 - POLYGON_MODE = 0x0B40 - POLYGON_OFFSET_FACTOR = 0x8038 - POLYGON_OFFSET_UNITS = 0x2A00 - POLYGON_SMOOTH_HINT = 0x0C53 - PROJECTION_MATRIX = 0x0BA7 - PROJECTION_STACK_DEPTH = 0x0BA4 - READ_BUFFER = 0x0C02 - RED_BIAS = 0x0D15 - RED_BITS = 0x0D52 - RED_SCALE = 0x0D14 - RENDER_MODE = 0x0C40 - RGBA_MODE = 0x0C31 - SCISSOR_BOX = 0x0C10 - SELECTION_BUFFER_SIZE = 0x0DF4 - SHADE_MODEL = 0x0B54 - SMOOTH_LINE_WIDTH_GRANULARITY = 0x0B23 - SMOOTH_LINE_WIDTH_RANGE = 0x0B22 - SMOOTH_POINT_SIZE_GRANULARITY = 0x0B13 - SMOOTH_POINT_SIZE_RANGE = 0x0B12 - STENCIL_BITS = 0x0D57 - STENCIL_CLEAR_VALUE = 0x0B91 - STENCIL_FAIL = 0x0B94 - STENCIL_FUNC = 0x0B92 - STENCIL_PASS_DEPTH_FAIL = 0x0B95 - STENCIL_PASS_DEPTH_PASS = 0x0B96 - STENCIL_REF = 0x0B97 - STENCIL_VALUE_MASK = 0x0B93 - STENCIL_WRITEMASK = 0x0B98 - STEREO = 0x0C33 - SUBPIXEL_BITS = 0x0D50 - TEXTURE_BINDING_1D = 0x8068 - TEXTURE_BINDING_2D = 0x8069 - TEXTURE_BINDING_3D = 0x806A - TEXTURE_COORD_ARRAY_SIZE = 0x8088 - TEXTURE_COORD_ARRAY_STRIDE = 0x808A - TEXTURE_COORD_ARRAY_TYPE = 0x8089 - TEXTURE_MATRIX = 0x0BA8 - TEXTURE_STACK_DEPTH = 0x0BA5 - UNPACK_ALIGNMENT = 0x0CF5 - UNPACK_LSB_FIRST = 0x0CF1 - UNPACK_ROW_LENGTH = 0x0CF2 - UNPACK_SKIP_PIXELS = 0x0CF4 - UNPACK_SKIP_ROWS = 0x0CF3 - UNPACK_SWAP_BYTES = 0x0CF0 - VERTEX_ARRAY_SIZE = 0x807A - VERTEX_ARRAY_STRIDE = 0x807C - VERTEX_ARRAY_TYPE = 0x807B - VIEWPORT = 0x0BA2 - ZOOM_X = 0x0D16 - ZOOM_Y = 0x0D17 - - COLOR_ARRAY_POINTER = 0x8090 - EDGE_FLAG_ARRAY_POINTER = 0x8093 - FEEDBACK_BUFFER_POINTER = 0x0DF0 - INDEX_ARRAY_POINTER = 0x8091 - NORMAL_ARRAY_POINTER = 0x808F - SELECTION_BUFFER_POINTER = 0x0DF3 - TEXTURE_COORD_ARRAY_POINTER = 0x8092 - VERTEX_ARRAY_POINTER = 0x808E - - TEXTURE_ALPHA_SIZE = 0x805F - TEXTURE_BLUE_SIZE = 0x805E - TEXTURE_BORDER = 0x1005 - TEXTURE_BORDER_COLOR = 0x1004 - TEXTURE_COMPONENTS = 0x1003 - TEXTURE_GREEN_SIZE = 0x805D - TEXTURE_HEIGHT = 0x1001 - TEXTURE_INTENSITY_SIZE = 0x8061 - TEXTURE_INTERNAL_FORMAT = 0x1003 - TEXTURE_LUMINANCE_SIZE = 0x8060 - TEXTURE_MAG_FILTER = 0x2800 - TEXTURE_MIN_FILTER = 0x2801 - TEXTURE_PRIORITY = 0x8066 - TEXTURE_RED_SIZE = 0x805C - TEXTURE_RESIDENT = 0x8067 - TEXTURE_WIDTH = 0x1000 - TEXTURE_WRAP_S = 0x2802 - TEXTURE_WRAP_T = 0x2803 - - DONT_CARE = 0x1100 - FASTEST = 0x1101 - NICEST = 0x1102 - - FRAGMENT_SHADER_DERIVATIVE_HINT = 0x8B8B - GENERATE_MIPMAP_HINT = 0x8192 - TEXTURE_COMPRESSION_HINT = 0x84EF - - C3F_V3F = 0x2A24 - C4F_N3F_V3F = 0x2A26 - C4UB_V2F = 0x2A22 - C4UB_V3F = 0x2A23 - N3F_V3F = 0x2A25 - T2F_C3F_V3F = 0x2A2A - T2F_C4F_N3F_V3F = 0x2A2C - T2F_C4UB_V3F = 0x2A29 - T2F_N3F_V3F = 0x2A2B - T2F_V3F = 0x2A27 - T4F_C4F_N3F_V4F = 0x2A2D - T4F_V4F = 0x2A28 - V2F = 0x2A20 - V3F = 0x2A21 - - MODULATE = 0x2100 - REPLACE = 0x1E01 - - SEPARATE_SPECULAR_COLOR = 0x81FA - SINGLE_COLOR = 0x81F9 - - CONSTANT_ATTENUATION = 0x1207 - LINEAR_ATTENUATION = 0x1208 - POSITION = 0x1203 - QUADRATIC_ATTENUATION = 0x1209 - SPOT_CUTOFF = 0x1206 - SPOT_DIRECTION = 0x1204 - SPOT_EXPONENT = 0x1205 - - COMPILE = 0x1300 - COMPILE_AND_EXECUTE = 0x1301 - - AND = 0x1501 - AND_INVERTED = 0x1504 - AND_REVERSE = 0x1502 - CLEAR = 0x1500 - COPY = 0x1503 - COPY_INVERTED = 0x150C - EQUIV = 0x1509 - INVERT = 0x150A - NAND = 0x150E - NOOP = 0x1505 - NOR = 0x1508 - OR = 0x1507 - OR_INVERTED = 0x150D - OR_REVERSE = 0x150B - SET = 0x150F - XOR = 0x1506 - - COLOR_INDEXES = 0x1603 - SHININESS = 0x1601 - - MODELVIEW = 0x1700 - PROJECTION = 0x1701 - TEXTURE = 0x1702 - - LINE = 0x1B01 - POINT = 0x1B00 - - FILL = 0x1B02 - - COLOR = 0x1800 - DEPTH = 0x1801 - STENCIL = 0x1802 - - ALPHA = 0x1906 - BLUE = 0x1905 - COLOR_INDEX = 0x1900 - DEPTH_COMPONENT = 0x1902 - GREEN = 0x1904 - LUMINANCE = 0x1909 - LUMINANCE_ALPHA = 0x190A - RED = 0x1903 - RGB = 0x1907 - RGBA = 0x1908 - STENCIL_INDEX = 0x1901 - - ALPHA12 = 0x803D - ALPHA16 = 0x803E - ALPHA4 = 0x803B - ALPHA8 = 0x803C - INTENSITY = 0x8049 - INTENSITY12 = 0x804C - INTENSITY16 = 0x804D - INTENSITY4 = 0x804A - INTENSITY8 = 0x804B - LUMINANCE12 = 0x8041 - LUMINANCE12_ALPHA12 = 0x8047 - LUMINANCE12_ALPHA4 = 0x8046 - LUMINANCE16 = 0x8042 - LUMINANCE16_ALPHA16 = 0x8048 - LUMINANCE4 = 0x803F - LUMINANCE4_ALPHA4 = 0x8043 - LUMINANCE6_ALPHA2 = 0x8044 - LUMINANCE8 = 0x8040 - LUMINANCE8_ALPHA8 = 0x8045 - R3_G3_B2 = 0x2A10 - RGB10 = 0x8052 - RGB10_A2 = 0x8059 - RGB12 = 0x8053 - RGB16 = 0x8054 - RGB4 = 0x804F - RGB5 = 0x8050 - RGB5_A1 = 0x8057 - RGB8 = 0x8051 - RGBA12 = 0x805A - RGBA16 = 0x805B - RGBA2 = 0x8055 - RGBA4 = 0x8056 - RGBA8 = 0x8058 - - PACK_IMAGE_HEIGHT = 0x806C - PACK_SKIP_IMAGES = 0x806B - UNPACK_IMAGE_HEIGHT = 0x806E - UNPACK_SKIP_IMAGES = 0x806D - - BITMAP = 0x1A00 - UNSIGNED_BYTE_3_3_2 = 0x8032 - UNSIGNED_INT_10_10_10_2 = 0x8036 - UNSIGNED_INT_8_8_8_8 = 0x8035 - UNSIGNED_SHORT_4_4_4_4 = 0x8033 - UNSIGNED_SHORT_5_5_5_1 = 0x8034 - - POINT_DISTANCE_ATTENUATION = 0x8129 - POINT_FADE_THRESHOLD_SIZE = 0x8128 - POINT_SIZE_MAX = 0x8127 - POINT_SIZE_MIN = 0x8126 - - LINES = 0x0001 - LINE_LOOP = 0x0002 - LINE_STRIP = 0x0003 - POINTS = 0x0000 - POLYGON = 0x0009 - QUADS = 0x0007 - QUAD_STRIP = 0x0008 - TRIANGLES = 0x0004 - TRIANGLE_FAN = 0x0006 - TRIANGLE_STRIP = 0x0005 - - FEEDBACK = 0x1C01 - RENDER = 0x1C00 - SELECT = 0x1C02 - - FLAT = 0x1D00 - SMOOTH = 0x1D01 - - DECR = 0x1E03 - INCR = 0x1E02 - KEEP = 0x1E00 - - EXTENSIONS = 0x1F03 - RENDERER = 0x1F01 - VENDOR = 0x1F00 - VERSION = 0x1F02 - - S = 0x2000 - T = 0x2001 - R = 0x2002 - Q = 0x2003 - - DECAL = 0x2101 - - TEXTURE_ENV_COLOR = 0x2201 - TEXTURE_ENV_MODE = 0x2200 - - TEXTURE_ENV = 0x2300 - - EYE_LINEAR = 0x2400 - OBJECT_LINEAR = 0x2401 - SPHERE_MAP = 0x2402 - - EYE_PLANE = 0x2502 - OBJECT_PLANE = 0x2501 - TEXTURE_GEN_MODE = 0x2500 - - NEAREST = 0x2600 - - LINEAR_MIPMAP_LINEAR = 0x2703 - LINEAR_MIPMAP_NEAREST = 0x2701 - NEAREST_MIPMAP_LINEAR = 0x2702 - NEAREST_MIPMAP_NEAREST = 0x2700 - - GENERATE_MIPMAP = 0x8191 - TEXTURE_WRAP_R = 0x8072 - - PROXY_TEXTURE_1D = 0x8063 - PROXY_TEXTURE_2D = 0x8064 - PROXY_TEXTURE_3D = 0x8070 - TEXTURE_3D = 0x806F - TEXTURE_BASE_LEVEL = 0x813C - TEXTURE_MAX_LEVEL = 0x813D - TEXTURE_MAX_LOD = 0x813B - TEXTURE_MIN_LOD = 0x813A - - CLAMP = 0x2900 - CLAMP_TO_BORDER = 0x812D - CLAMP_TO_EDGE = 0x812F - REPEAT = 0x2901 - - CONSTANT_COLOR = 0x8001 - ONE_MINUS_CONSTANT_COLOR = 0x8002 - CONSTANT_ALPHA = 0x8003 - ONE_MINUS_CONSTANT_ALPHA = 0x8004 - FUNC_ADD = 0x8006 - MIN = 0x8007 - MAX = 0x8008 - BLEND_EQUATION_RGB = 0x8009 - FUNC_SUBTRACT = 0x800A - FUNC_REVERSE_SUBTRACT = 0x800B - RESCALE_NORMAL = 0x803A - TEXTURE_DEPTH = 0x8071 - MAX_3D_TEXTURE_SIZE = 0x8073 - MULTISAMPLE = 0x809D - SAMPLE_ALPHA_TO_COVERAGE = 0x809E - SAMPLE_ALPHA_TO_ONE = 0x809F - SAMPLE_COVERAGE = 0x80A0 - SAMPLE_BUFFERS = 0x80A8 - SAMPLES = 0x80A9 - SAMPLE_COVERAGE_VALUE = 0x80AA - SAMPLE_COVERAGE_INVERT = 0x80AB - BLEND_DST_RGB = 0x80C8 - BLEND_SRC_RGB = 0x80C9 - BLEND_DST_ALPHA = 0x80CA - BLEND_SRC_ALPHA = 0x80CB - BGR = 0x80E0 - BGRA = 0x80E1 - MAX_ELEMENTS_VERTICES = 0x80E8 - MAX_ELEMENTS_INDICES = 0x80E9 - DEPTH_COMPONENT16 = 0x81A5 - DEPTH_COMPONENT24 = 0x81A6 - DEPTH_COMPONENT32 = 0x81A7 - UNSIGNED_BYTE_2_3_3_REV = 0x8362 - UNSIGNED_SHORT_5_6_5 = 0x8363 - UNSIGNED_SHORT_5_6_5_REV = 0x8364 - UNSIGNED_SHORT_4_4_4_4_REV = 0x8365 - UNSIGNED_SHORT_1_5_5_5_REV = 0x8366 - UNSIGNED_INT_8_8_8_8_REV = 0x8367 - UNSIGNED_INT_2_10_10_10_REV = 0x8368 - MIRRORED_REPEAT = 0x8370 - FOG_COORDINATE_SOURCE = 0x8450 - FOG_COORD_SRC = 0x8450 - FOG_COORDINATE = 0x8451 - FOG_COORD = 0x8451 - FRAGMENT_DEPTH = 0x8452 - CURRENT_FOG_COORDINATE = 0x8453 - CURRENT_FOG_COORD = 0x8453 - FOG_COORDINATE_ARRAY_TYPE = 0x8454 - FOG_COORD_ARRAY_TYPE = 0x8454 - FOG_COORDINATE_ARRAY_STRIDE = 0x8455 - FOG_COORD_ARRAY_STRIDE = 0x8455 - FOG_COORDINATE_ARRAY_POINTER = 0x8456 - FOG_COORD_ARRAY_POINTER = 0x8456 - FOG_COORDINATE_ARRAY = 0x8457 - FOG_COORD_ARRAY = 0x8457 - COLOR_SUM = 0x8458 - CURRENT_SECONDARY_COLOR = 0x8459 - SECONDARY_COLOR_ARRAY_SIZE = 0x845A - SECONDARY_COLOR_ARRAY_TYPE = 0x845B - SECONDARY_COLOR_ARRAY_STRIDE = 0x845C - SECONDARY_COLOR_ARRAY_POINTER = 0x845D - SECONDARY_COLOR_ARRAY = 0x845E - TEXTURE0 = 0x84C0 - TEXTURE1 = 0x84C1 - TEXTURE2 = 0x84C2 - TEXTURE3 = 0x84C3 - TEXTURE4 = 0x84C4 - TEXTURE5 = 0x84C5 - TEXTURE6 = 0x84C6 - TEXTURE7 = 0x84C7 - TEXTURE8 = 0x84C8 - TEXTURE9 = 0x84C9 - TEXTURE10 = 0x84CA - TEXTURE11 = 0x84CB - TEXTURE12 = 0x84CC - TEXTURE13 = 0x84CD - TEXTURE14 = 0x84CE - TEXTURE15 = 0x84CF - TEXTURE16 = 0x84D0 - TEXTURE17 = 0x84D1 - TEXTURE18 = 0x84D2 - TEXTURE19 = 0x84D3 - TEXTURE20 = 0x84D4 - TEXTURE21 = 0x84D5 - TEXTURE22 = 0x84D6 - TEXTURE23 = 0x84D7 - TEXTURE24 = 0x84D8 - TEXTURE25 = 0x84D9 - TEXTURE26 = 0x84DA - TEXTURE27 = 0x84DB - TEXTURE28 = 0x84DC - TEXTURE29 = 0x84DD - TEXTURE30 = 0x84DE - TEXTURE31 = 0x84DF - ACTIVE_TEXTURE = 0x84E0 - CLIENT_ACTIVE_TEXTURE = 0x84E1 - MAX_TEXTURE_UNITS = 0x84E2 - TRANSPOSE_MODELVIEW_MATRIX = 0x84E3 - TRANSPOSE_PROJECTION_MATRIX = 0x84E4 - TRANSPOSE_TEXTURE_MATRIX = 0x84E5 - TRANSPOSE_COLOR_MATRIX = 0x84E6 - SUBTRACT = 0x84E7 - COMPRESSED_ALPHA = 0x84E9 - COMPRESSED_LUMINANCE = 0x84EA - COMPRESSED_LUMINANCE_ALPHA = 0x84EB - COMPRESSED_INTENSITY = 0x84EC - COMPRESSED_RGB = 0x84ED - COMPRESSED_RGBA = 0x84EE - MAX_TEXTURE_LOD_BIAS = 0x84FD - TEXTURE_FILTER_CONTROL = 0x8500 - TEXTURE_LOD_BIAS = 0x8501 - INCR_WRAP = 0x8507 - DECR_WRAP = 0x8508 - NORMAL_MAP = 0x8511 - REFLECTION_MAP = 0x8512 - TEXTURE_CUBE_MAP = 0x8513 - TEXTURE_BINDING_CUBE_MAP = 0x8514 - TEXTURE_CUBE_MAP_POSITIVE_X = 0x8515 - TEXTURE_CUBE_MAP_NEGATIVE_X = 0x8516 - TEXTURE_CUBE_MAP_POSITIVE_Y = 0x8517 - TEXTURE_CUBE_MAP_NEGATIVE_Y = 0x8518 - TEXTURE_CUBE_MAP_POSITIVE_Z = 0x8519 - TEXTURE_CUBE_MAP_NEGATIVE_Z = 0x851A - PROXY_TEXTURE_CUBE_MAP = 0x851B - MAX_CUBE_MAP_TEXTURE_SIZE = 0x851C - COMBINE = 0x8570 - COMBINE_RGB = 0x8571 - COMBINE_ALPHA = 0x8572 - RGB_SCALE = 0x8573 - ADD_SIGNED = 0x8574 - INTERPOLATE = 0x8575 - CONSTANT = 0x8576 - PRIMARY_COLOR = 0x8577 - PREVIOUS = 0x8578 - SOURCE0_RGB = 0x8580 - SRC0_RGB = 0x8580 - SOURCE1_RGB = 0x8581 - SRC1_RGB = 0x8581 - SOURCE2_RGB = 0x8582 - SRC2_RGB = 0x8582 - SOURCE0_ALPHA = 0x8588 - SRC0_ALPHA = 0x8588 - SOURCE1_ALPHA = 0x8589 - SRC1_ALPHA = 0x8589 - SOURCE2_ALPHA = 0x858A - SRC2_ALPHA = 0x858A - OPERAND0_RGB = 0x8590 - OPERAND1_RGB = 0x8591 - OPERAND2_RGB = 0x8592 - OPERAND0_ALPHA = 0x8598 - OPERAND1_ALPHA = 0x8599 - OPERAND2_ALPHA = 0x859A - VERTEX_ATTRIB_ARRAY_ENABLED = 0x8622 - VERTEX_ATTRIB_ARRAY_SIZE = 0x8623 - VERTEX_ATTRIB_ARRAY_STRIDE = 0x8624 - VERTEX_ATTRIB_ARRAY_TYPE = 0x8625 - CURRENT_VERTEX_ATTRIB = 0x8626 - VERTEX_PROGRAM_POINT_SIZE = 0x8642 - VERTEX_PROGRAM_TWO_SIDE = 0x8643 - VERTEX_ATTRIB_ARRAY_POINTER = 0x8645 - TEXTURE_COMPRESSED_IMAGE_SIZE = 0x86A0 - TEXTURE_COMPRESSED = 0x86A1 - NUM_COMPRESSED_TEXTURE_FORMATS = 0x86A2 - COMPRESSED_TEXTURE_FORMATS = 0x86A3 - DOT3_RGB = 0x86AE - DOT3_RGBA = 0x86AF - BUFFER_SIZE = 0x8764 - BUFFER_USAGE = 0x8765 - STENCIL_BACK_FUNC = 0x8800 - STENCIL_BACK_FAIL = 0x8801 - STENCIL_BACK_PASS_DEPTH_FAIL = 0x8802 - STENCIL_BACK_PASS_DEPTH_PASS = 0x8803 - MAX_DRAW_BUFFERS = 0x8824 - DRAW_BUFFER0 = 0x8825 - DRAW_BUFFER1 = 0x8826 - DRAW_BUFFER2 = 0x8827 - DRAW_BUFFER3 = 0x8828 - DRAW_BUFFER4 = 0x8829 - DRAW_BUFFER5 = 0x882A - DRAW_BUFFER6 = 0x882B - DRAW_BUFFER7 = 0x882C - DRAW_BUFFER8 = 0x882D - DRAW_BUFFER9 = 0x882E - DRAW_BUFFER10 = 0x882F - DRAW_BUFFER11 = 0x8830 - DRAW_BUFFER12 = 0x8831 - DRAW_BUFFER13 = 0x8832 - DRAW_BUFFER14 = 0x8833 - DRAW_BUFFER15 = 0x8834 - BLEND_EQUATION_ALPHA = 0x883D - TEXTURE_DEPTH_SIZE = 0x884A - DEPTH_TEXTURE_MODE = 0x884B - TEXTURE_COMPARE_MODE = 0x884C - TEXTURE_COMPARE_FUNC = 0x884D - COMPARE_R_TO_TEXTURE = 0x884E - POINT_SPRITE = 0x8861 - COORD_REPLACE = 0x8862 - QUERY_COUNTER_BITS = 0x8864 - CURRENT_QUERY = 0x8865 - QUERY_RESULT = 0x8866 - QUERY_RESULT_AVAILABLE = 0x8867 - MAX_VERTEX_ATTRIBS = 0x8869 - VERTEX_ATTRIB_ARRAY_NORMALIZED = 0x886A - MAX_TEXTURE_COORDS = 0x8871 - MAX_TEXTURE_IMAGE_UNITS = 0x8872 - ARRAY_BUFFER = 0x8892 - ELEMENT_ARRAY_BUFFER = 0x8893 - ARRAY_BUFFER_BINDING = 0x8894 - ELEMENT_ARRAY_BUFFER_BINDING = 0x8895 - VERTEX_ARRAY_BUFFER_BINDING = 0x8896 - NORMAL_ARRAY_BUFFER_BINDING = 0x8897 - COLOR_ARRAY_BUFFER_BINDING = 0x8898 - INDEX_ARRAY_BUFFER_BINDING = 0x8899 - TEXTURE_COORD_ARRAY_BUFFER_BINDING = 0x889A - EDGE_FLAG_ARRAY_BUFFER_BINDING = 0x889B - SECONDARY_COLOR_ARRAY_BUFFER_BINDING = 0x889C - FOG_COORDINATE_ARRAY_BUFFER_BINDING = 0x889D - FOG_COORD_ARRAY_BUFFER_BINDING = 0x889D - WEIGHT_ARRAY_BUFFER_BINDING = 0x889E - VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = 0x889F - READ_ONLY = 0x88B8 - WRITE_ONLY = 0x88B9 - READ_WRITE = 0x88BA - BUFFER_ACCESS = 0x88BB - BUFFER_MAPPED = 0x88BC - BUFFER_MAP_POINTER = 0x88BD - STREAM_DRAW = 0x88E0 - STREAM_READ = 0x88E1 - STREAM_COPY = 0x88E2 - STATIC_DRAW = 0x88E4 - STATIC_READ = 0x88E5 - STATIC_COPY = 0x88E6 - DYNAMIC_DRAW = 0x88E8 - DYNAMIC_READ = 0x88E9 - DYNAMIC_COPY = 0x88EA - SAMPLES_PASSED = 0x8914 - FRAGMENT_SHADER = 0x8B30 - VERTEX_SHADER = 0x8B31 - MAX_FRAGMENT_UNIFORM_COMPONENTS = 0x8B49 - MAX_VERTEX_UNIFORM_COMPONENTS = 0x8B4A - MAX_VARYING_FLOATS = 0x8B4B - MAX_VERTEX_TEXTURE_IMAGE_UNITS = 0x8B4C - MAX_COMBINED_TEXTURE_IMAGE_UNITS = 0x8B4D - SHADER_TYPE = 0x8B4F - FLOAT_VEC2 = 0x8B50 - FLOAT_VEC3 = 0x8B51 - FLOAT_VEC4 = 0x8B52 - INT_VEC2 = 0x8B53 - INT_VEC3 = 0x8B54 - INT_VEC4 = 0x8B55 - BOOL = 0x8B56 - BOOL_VEC2 = 0x8B57 - BOOL_VEC3 = 0x8B58 - BOOL_VEC4 = 0x8B59 - FLOAT_MAT2 = 0x8B5A - FLOAT_MAT3 = 0x8B5B - FLOAT_MAT4 = 0x8B5C - SAMPLER_1D = 0x8B5D - SAMPLER_2D = 0x8B5E - SAMPLER_3D = 0x8B5F - SAMPLER_CUBE = 0x8B60 - SAMPLER_1D_SHADOW = 0x8B61 - SAMPLER_2D_SHADOW = 0x8B62 - DELETE_STATUS = 0x8B80 - COMPILE_STATUS = 0x8B81 - LINK_STATUS = 0x8B82 - VALIDATE_STATUS = 0x8B83 - INFO_LOG_LENGTH = 0x8B84 - ATTACHED_SHADERS = 0x8B85 - ACTIVE_UNIFORMS = 0x8B86 - ACTIVE_UNIFORM_MAX_LENGTH = 0x8B87 - SHADER_SOURCE_LENGTH = 0x8B88 - ACTIVE_ATTRIBUTES = 0x8B89 - ACTIVE_ATTRIBUTE_MAX_LENGTH = 0x8B8A - SHADING_LANGUAGE_VERSION = 0x8B8C - CURRENT_PROGRAM = 0x8B8D - POINT_SPRITE_COORD_ORIGIN = 0x8CA0 - LOWER_LEFT = 0x8CA1 - UPPER_LEFT = 0x8CA2 - STENCIL_BACK_REF = 0x8CA3 - STENCIL_BACK_VALUE_MASK = 0x8CA4 - STENCIL_BACK_WRITEMASK = 0x8CA5 -) - -// https://www.opengl.org/sdk/docs/man2/xhtml/glViewport.xml -func (gl *GL) Viewport(x, y, width, height int) { - C.gl2_0_glViewport(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// DepthRange specifies the mapping of depth values from normalized device -// coordinates to window coordinates. -// -// Parameter nearVal specifies the mapping of the near clipping plane to window -// coordinates (defaults to 0), while farVal specifies the mapping of the far -// clipping plane to window coordinates (defaults to 1). -// -// After clipping and division by w, depth coordinates range from -1 to 1, -// corresponding to the near and far clipping planes. DepthRange specifies a -// linear mapping of the normalized depth coordinates in this range to window -// depth coordinates. Regardless of the actual depth buffer implementation, -// window coordinate depth values are treated as though they range from 0 through 1 -// (like color components). Thus, the values accepted by DepthRange are both -// clamped to this range before they are accepted. -// -// The default setting of (0, 1) maps the near plane to 0 and the far plane to 1. -// With this mapping, the depth buffer range is fully utilized. -// -// It is not necessary that nearVal be less than farVal. Reverse mappings such as -// nearVal 1, and farVal 0 are acceptable. -// -// GL.INVALID_OPERATION is generated if DepthRange is executed between the -// execution of Begin and the corresponding execution of End. -func (gl *GL) DepthRange(nearVal, farVal float64) { - C.gl2_0_glDepthRange(gl.funcs, C.GLdouble(nearVal), C.GLdouble(farVal)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIsEnabled.xml -func (gl *GL) IsEnabled(cap glbase.Enum) bool { - glresult := C.gl2_0_glIsEnabled(gl.funcs, C.GLenum(cap)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexLevelParameteriv.xml -func (gl *GL) GetTexLevelParameteriv(target glbase.Enum, level int, pname glbase.Enum, params []int32) { - C.gl2_0_glGetTexLevelParameteriv(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexLevelParameterfv.xml -func (gl *GL) GetTexLevelParameterfv(target glbase.Enum, level int, pname glbase.Enum, params []float32) { - C.gl2_0_glGetTexLevelParameterfv(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexParameteriv.xml -func (gl *GL) GetTexParameteriv(target, pname glbase.Enum, params []int32) { - C.gl2_0_glGetTexParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexParameterfv.xml -func (gl *GL) GetTexParameterfv(target, pname glbase.Enum, params []float32) { - C.gl2_0_glGetTexParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexImage.xml -func (gl *GL) GetTexImage(target glbase.Enum, level int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl2_0_glGetTexImage(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetIntegerv.xml -func (gl *GL) GetIntegerv(pname glbase.Enum, params []int32) { - C.gl2_0_glGetIntegerv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetFloatv.xml -func (gl *GL) GetFloatv(pname glbase.Enum, params []float32) { - C.gl2_0_glGetFloatv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetError.xml -func (gl *GL) GetError() glbase.Enum { - glresult := C.gl2_0_glGetError(gl.funcs) - return glbase.Enum(glresult) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetDoublev.xml -func (gl *GL) GetDoublev(pname glbase.Enum, params []float64) { - C.gl2_0_glGetDoublev(gl.funcs, C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetBooleanv.xml -func (gl *GL) GetBooleanv(pname glbase.Enum, params []bool) { - C.gl2_0_glGetBooleanv(gl.funcs, C.GLenum(pname), (*C.GLboolean)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glReadPixels.xml -func (gl *GL) ReadPixels(x, y, width, height int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl2_0_glReadPixels(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glReadBuffer.xml -func (gl *GL) ReadBuffer(mode glbase.Enum) { - C.gl2_0_glReadBuffer(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPixelStorei.xml -func (gl *GL) PixelStorei(pname glbase.Enum, param int32) { - C.gl2_0_glPixelStorei(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPixelStoref.xml -func (gl *GL) PixelStoref(pname glbase.Enum, param float32) { - C.gl2_0_glPixelStoref(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDepthFunc.xml -func (gl *GL) DepthFunc(glfunc glbase.Enum) { - C.gl2_0_glDepthFunc(gl.funcs, C.GLenum(glfunc)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glStencilOp.xml -func (gl *GL) StencilOp(fail, zfail, zpass glbase.Enum) { - C.gl2_0_glStencilOp(gl.funcs, C.GLenum(fail), C.GLenum(zfail), C.GLenum(zpass)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glStencilFunc.xml -func (gl *GL) StencilFunc(glfunc glbase.Enum, ref int32, mask uint32) { - C.gl2_0_glStencilFunc(gl.funcs, C.GLenum(glfunc), C.GLint(ref), C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLogicOp.xml -func (gl *GL) LogicOp(opcode glbase.Enum) { - C.gl2_0_glLogicOp(gl.funcs, C.GLenum(opcode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glBlendFunc.xml -func (gl *GL) BlendFunc(sfactor, dfactor glbase.Enum) { - C.gl2_0_glBlendFunc(gl.funcs, C.GLenum(sfactor), C.GLenum(dfactor)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFlush.xml -func (gl *GL) Flush() { - C.gl2_0_glFlush(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFinish.xml -func (gl *GL) Finish() { - C.gl2_0_glFinish(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEnable.xml -func (gl *GL) Enable(cap glbase.Enum) { - C.gl2_0_glEnable(gl.funcs, C.GLenum(cap)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDisable.xml -func (gl *GL) Disable(cap glbase.Enum) { - C.gl2_0_glDisable(gl.funcs, C.GLenum(cap)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDepthMask.xml -func (gl *GL) DepthMask(flag bool) { - C.gl2_0_glDepthMask(gl.funcs, *(*C.GLboolean)(unsafe.Pointer(&flag))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColorMask.xml -func (gl *GL) ColorMask(red, green, blue, alpha bool) { - C.gl2_0_glColorMask(gl.funcs, *(*C.GLboolean)(unsafe.Pointer(&red)), *(*C.GLboolean)(unsafe.Pointer(&green)), *(*C.GLboolean)(unsafe.Pointer(&blue)), *(*C.GLboolean)(unsafe.Pointer(&alpha))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glStencilMask.xml -func (gl *GL) StencilMask(mask uint32) { - C.gl2_0_glStencilMask(gl.funcs, C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glClearDepth.xml -func (gl *GL) ClearDepth(depth float64) { - C.gl2_0_glClearDepth(gl.funcs, C.GLdouble(depth)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glClearStencil.xml -func (gl *GL) ClearStencil(s int32) { - C.gl2_0_glClearStencil(gl.funcs, C.GLint(s)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glClearColor.xml -func (gl *GL) ClearColor(red, green, blue, alpha float32) { - C.gl2_0_glClearColor(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glClear.xml -func (gl *GL) Clear(mask glbase.Bitfield) { - C.gl2_0_glClear(gl.funcs, C.GLbitfield(mask)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDrawBuffer.xml -func (gl *GL) DrawBuffer(mode glbase.Enum) { - C.gl2_0_glDrawBuffer(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexImage2D.xml -func (gl *GL) TexImage2D(target glbase.Enum, level int, internalFormat int32, width, height, border int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl2_0_glTexImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLint(border), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexImage1D.xml -func (gl *GL) TexImage1D(target glbase.Enum, level int, internalFormat int32, width, border int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl2_0_glTexImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(internalFormat), C.GLsizei(width), C.GLint(border), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexParameteriv.xml -func (gl *GL) TexParameteriv(target, pname glbase.Enum, params []int32) { - C.gl2_0_glTexParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexParameteri.xml -func (gl *GL) TexParameteri(target, pname glbase.Enum, param int32) { - C.gl2_0_glTexParameteri(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexParameterfv.xml -func (gl *GL) TexParameterfv(target, pname glbase.Enum, params []float32) { - C.gl2_0_glTexParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexParameterf.xml -func (gl *GL) TexParameterf(target, pname glbase.Enum, param float32) { - C.gl2_0_glTexParameterf(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glScissor.xml -func (gl *GL) Scissor(x, y, width, height int) { - C.gl2_0_glScissor(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPolygonMode.xml -func (gl *GL) PolygonMode(face, mode glbase.Enum) { - C.gl2_0_glPolygonMode(gl.funcs, C.GLenum(face), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPointSize.xml -func (gl *GL) PointSize(size float32) { - C.gl2_0_glPointSize(gl.funcs, C.GLfloat(size)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLineWidth.xml -func (gl *GL) LineWidth(width float32) { - C.gl2_0_glLineWidth(gl.funcs, C.GLfloat(width)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glHint.xml -func (gl *GL) Hint(target, mode glbase.Enum) { - C.gl2_0_glHint(gl.funcs, C.GLenum(target), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFrontFace.xml -func (gl *GL) FrontFace(mode glbase.Enum) { - C.gl2_0_glFrontFace(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCullFace.xml -func (gl *GL) CullFace(mode glbase.Enum) { - C.gl2_0_glCullFace(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexubv.xml -func (gl *GL) Indexubv(c []uint8) { - C.gl2_0_glIndexubv(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexub.xml -func (gl *GL) Indexub(c uint8) { - C.gl2_0_glIndexub(gl.funcs, C.GLubyte(c)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIsTexture.xml -func (gl *GL) IsTexture(texture glbase.Texture) bool { - glresult := C.gl2_0_glIsTexture(gl.funcs, C.GLuint(texture)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// GenTextures returns n texture names in textures. There is no guarantee -// that the names form a contiguous set of integers; however, it is -// guaranteed that none of the returned names was in use immediately before -// the call to GenTextures. -// -// The generated textures have no dimensionality; they assume the -// dimensionality of the texture target to which they are first bound (see -// BindTexture). -// -// Texture names returned by a call to GenTextures are not returned by -// subsequent calls, unless they are first deleted with DeleteTextures. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// GenTextures is available in GL version 2.0 or greater. -func (gl *GL) GenTextures(n int) []glbase.Texture { - if n == 0 { - return nil - } - textures := make([]glbase.Texture, n) - C.gl2_0_glGenTextures(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0]))) - return textures -} - -// DeleteTextures deletes the textures objects whose names are stored -// in the textures slice. After a texture is deleted, it has no contents or -// dimensionality, and its name is free for reuse (for example by -// GenTextures). If a texture that is currently bound is deleted, the binding -// reverts to 0 (the default texture). -// -// DeleteTextures silently ignores 0's and names that do not correspond to -// existing textures. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// DeleteTextures is available in GL version 2.0 or greater. -func (gl *GL) DeleteTextures(textures []glbase.Texture) { - n := len(textures) - if n == 0 { - return - } - C.gl2_0_glDeleteTextures(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glBindTexture.xml -func (gl *GL) BindTexture(target glbase.Enum, texture glbase.Texture) { - C.gl2_0_glBindTexture(gl.funcs, C.GLenum(target), C.GLuint(texture)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexSubImage2D.xml -func (gl *GL) TexSubImage2D(target glbase.Enum, level, xoffset, yoffset, width, height int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl2_0_glTexSubImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexSubImage1D.xml -func (gl *GL) TexSubImage1D(target glbase.Enum, level, xoffset, width int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl2_0_glTexSubImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLsizei(width), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyTexSubImage2D.xml -func (gl *GL) CopyTexSubImage2D(target glbase.Enum, level, xoffset, yoffset, x, y, width, height int) { - C.gl2_0_glCopyTexSubImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyTexSubImage1D.xml -func (gl *GL) CopyTexSubImage1D(target glbase.Enum, level, xoffset, x, y, width int) { - C.gl2_0_glCopyTexSubImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(x), C.GLint(y), C.GLsizei(width)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyTexImage2D.xml -func (gl *GL) CopyTexImage2D(target glbase.Enum, level int, internalFormat glbase.Enum, x, y, width, height, border int) { - C.gl2_0_glCopyTexImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height), C.GLint(border)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyTexImage1D.xml -func (gl *GL) CopyTexImage1D(target glbase.Enum, level int, internalFormat glbase.Enum, x, y, width, border int) { - C.gl2_0_glCopyTexImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLint(border)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPolygonOffset.xml -func (gl *GL) PolygonOffset(factor, units float32) { - C.gl2_0_glPolygonOffset(gl.funcs, C.GLfloat(factor), C.GLfloat(units)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDrawElements.xml -func (gl *GL) DrawElements(mode glbase.Enum, count int, gltype glbase.Enum, indices interface{}) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl2_0_glDrawElements(gl.funcs, C.GLenum(mode), C.GLsizei(count), C.GLenum(gltype), indices_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDrawArrays.xml -func (gl *GL) DrawArrays(mode glbase.Enum, first, count int) { - C.gl2_0_glDrawArrays(gl.funcs, C.GLenum(mode), C.GLint(first), C.GLsizei(count)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyTexSubImage3D.xml -func (gl *GL) CopyTexSubImage3D(target glbase.Enum, level, xoffset, yoffset int, zoffset int32, x, y, width, height int) { - C.gl2_0_glCopyTexSubImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(zoffset), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexSubImage3D.xml -func (gl *GL) TexSubImage3D(target glbase.Enum, level, xoffset, yoffset int, zoffset int32, width, height int, depth int32, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl2_0_glTexSubImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(zoffset), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexImage3D.xml -func (gl *GL) TexImage3D(target glbase.Enum, level int, internalFormat int32, width, height int, depth int32, border int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl2_0_glTexImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLint(border), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDrawRangeElements.xml -func (gl *GL) DrawRangeElements(mode glbase.Enum, start, end uint32, count int, gltype glbase.Enum, indices interface{}) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl2_0_glDrawRangeElements(gl.funcs, C.GLenum(mode), C.GLuint(start), C.GLuint(end), C.GLsizei(count), C.GLenum(gltype), indices_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glBlendEquation.xml -func (gl *GL) BlendEquation(mode glbase.Enum) { - C.gl2_0_glBlendEquation(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glBlendColor.xml -func (gl *GL) BlendColor(red, green, blue, alpha float32) { - C.gl2_0_glBlendColor(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetCompressedTexImage.xml -func (gl *GL) GetCompressedTexImage(target glbase.Enum, level int, img interface{}) { - var img_ptr unsafe.Pointer - var img_v = reflect.ValueOf(img) - if img != nil && img_v.Kind() != reflect.Slice { - panic("parameter img must be a slice") - } - if img != nil { - img_ptr = unsafe.Pointer(img_v.Index(0).Addr().Pointer()) - } - C.gl2_0_glGetCompressedTexImage(gl.funcs, C.GLenum(target), C.GLint(level), img_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCompressedTexSubImage1D.xml -func (gl *GL) CompressedTexSubImage1D(target glbase.Enum, level, xoffset, width int, format glbase.Enum, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl2_0_glCompressedTexSubImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLsizei(width), C.GLenum(format), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCompressedTexSubImage2D.xml -func (gl *GL) CompressedTexSubImage2D(target glbase.Enum, level, xoffset, yoffset, width, height int, format glbase.Enum, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl2_0_glCompressedTexSubImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCompressedTexSubImage3D.xml -func (gl *GL) CompressedTexSubImage3D(target glbase.Enum, level, xoffset, yoffset int, zoffset int32, width, height int, depth int32, format glbase.Enum, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl2_0_glCompressedTexSubImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(zoffset), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLenum(format), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCompressedTexImage1D.xml -func (gl *GL) CompressedTexImage1D(target glbase.Enum, level int, internalFormat glbase.Enum, width, border, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl2_0_glCompressedTexImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLsizei(width), C.GLint(border), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCompressedTexImage2D.xml -func (gl *GL) CompressedTexImage2D(target glbase.Enum, level int, internalFormat glbase.Enum, width, height, border, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl2_0_glCompressedTexImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLint(border), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCompressedTexImage3D.xml -func (gl *GL) CompressedTexImage3D(target glbase.Enum, level int, internalFormat glbase.Enum, width, height int, depth int32, border, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl2_0_glCompressedTexImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLint(border), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSampleCoverage.xml -func (gl *GL) SampleCoverage(value float32, invert bool) { - C.gl2_0_glSampleCoverage(gl.funcs, C.GLfloat(value), *(*C.GLboolean)(unsafe.Pointer(&invert))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glActiveTexture.xml -func (gl *GL) ActiveTexture(texture glbase.Enum) { - C.gl2_0_glActiveTexture(gl.funcs, C.GLenum(texture)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPointParameteriv.xml -func (gl *GL) PointParameteriv(pname glbase.Enum, params []int32) { - C.gl2_0_glPointParameteriv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPointParameteri.xml -func (gl *GL) PointParameteri(pname glbase.Enum, param int32) { - C.gl2_0_glPointParameteri(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPointParameterfv.xml -func (gl *GL) PointParameterfv(pname glbase.Enum, params []float32) { - C.gl2_0_glPointParameterfv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPointParameterf.xml -func (gl *GL) PointParameterf(pname glbase.Enum, param float32) { - C.gl2_0_glPointParameterf(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiDrawArrays.xml -func (gl *GL) MultiDrawArrays(mode glbase.Enum, first, count []int, drawcount int32) { - C.gl2_0_glMultiDrawArrays(gl.funcs, C.GLenum(mode), (*C.GLint)(unsafe.Pointer(&first[0])), (*C.GLsizei)(unsafe.Pointer(&count[0])), C.GLsizei(drawcount)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glBlendFuncSeparate.xml -func (gl *GL) BlendFuncSeparate(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha glbase.Enum) { - C.gl2_0_glBlendFuncSeparate(gl.funcs, C.GLenum(sfactorRGB), C.GLenum(dfactorRGB), C.GLenum(sfactorAlpha), C.GLenum(dfactorAlpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetBufferParameteriv.xml -func (gl *GL) GetBufferParameteriv(target, pname glbase.Enum, params []int32) { - C.gl2_0_glGetBufferParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glUnmapBuffer.xml -func (gl *GL) UnmapBuffer(target glbase.Enum) bool { - glresult := C.gl2_0_glUnmapBuffer(gl.funcs, C.GLenum(target)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetBufferSubData.xml -func (gl *GL) GetBufferSubData(target glbase.Enum, offset, size int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl2_0_glGetBufferSubData(gl.funcs, C.GLenum(target), C.GLintptr(offset), C.GLsizeiptr(size), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glBufferSubData.xml -func (gl *GL) BufferSubData(target glbase.Enum, offset, size int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl2_0_glBufferSubData(gl.funcs, C.GLenum(target), C.GLintptr(offset), C.GLsizeiptr(size), data_ptr) -} - -// BufferData creates a new data store for the buffer object currently -// bound to target. Any pre-existing data store is deleted. The new data -// store is created with the specified size in bytes and usage. If data is -// not nil, it must be a slice that is used to initialize the data store. -// In that case the size parameter is ignored and the store size will match -// the slice data size. -// -// In its initial state, the new data store is not mapped, it has a NULL -// mapped pointer, and its mapped access is GL.READ_WRITE. -// -// The target constant must be one of GL.ARRAY_BUFFER, GL.COPY_READ_BUFFER, -// GL.COPY_WRITE_BUFFER, GL.ELEMENT_ARRAY_BUFFER, GL.PIXEL_PACK_BUFFER, -// GL.PIXEL_UNPACK_BUFFER, GL.TEXTURE_BUFFER, GL.TRANSFORM_FEEDBACK_BUFFER, -// or GL.UNIFORM_BUFFER. -// -// The usage parameter is a hint to the GL implementation as to how a buffer -// object's data store will be accessed. This enables the GL implementation -// to make more intelligent decisions that may significantly impact buffer -// object performance. It does not, however, constrain the actual usage of -// the data store. usage can be broken down into two parts: first, the -// frequency of access (modification and usage), and second, the nature of -// that access. -// -// A usage frequency of STREAM and nature of DRAW is specified via the -// constant GL.STREAM_DRAW, for example. -// -// The usage frequency of access may be one of: -// -// STREAM -// The data store contents will be modified once and used at most a few times. -// -// STATIC -// The data store contents will be modified once and used many times. -// -// DYNAMIC -// The data store contents will be modified repeatedly and used many times. -// -// The usage nature of access may be one of: -// -// DRAW -// The data store contents are modified by the application, and used as -// the source for GL drawing and image specification commands. -// -// READ -// The data store contents are modified by reading data from the GL, -// and used to return that data when queried by the application. -// -// COPY -// The data store contents are modified by reading data from the GL, -// and used as the source for GL drawing and image specification -// commands. -// -// Clients must align data elements consistent with the requirements of the -// client platform, with an additional base-level requirement that an offset -// within a buffer to a datum comprising N bytes be a multiple of N. -// -// Error GL.INVALID_ENUM is generated if target is not one of the accepted -// buffer targets. GL.INVALID_ENUM is generated if usage is not -// GL.STREAM_DRAW, GL.STREAM_READ, GL.STREAM_COPY, GL.STATIC_DRAW, -// GL.STATIC_READ, GL.STATIC_COPY, GL.DYNAMIC_DRAW, GL.DYNAMIC_READ, or -// GL.DYNAMIC_COPY. GL.INVALID_VALUE is generated if size is negative. -// GL.INVALID_OPERATION is generated if the reserved buffer object name 0 is -// bound to target. GL.OUT_OF_MEMORY is generated if the GL is unable to -// create a data store with the specified size. -func (gl *GL) BufferData(target glbase.Enum, size int, data interface{}, usage glbase.Enum) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - if data != nil { - size = int(data_v.Type().Size()) * data_v.Len() - } - C.gl2_0_glBufferData(gl.funcs, C.GLenum(target), C.GLsizeiptr(size), data_ptr, C.GLenum(usage)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIsBuffer.xml -func (gl *GL) IsBuffer(buffer glbase.Buffer) bool { - glresult := C.gl2_0_glIsBuffer(gl.funcs, C.GLuint(buffer)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// GenBuffers returns n buffer object names. There is no guarantee that -// the names form a contiguous set of integers; however, it is guaranteed -// that none of the returned names was in use immediately before the call to -// GenBuffers. -// -// Buffer object names returned by a call to GenBuffers are not returned by -// subsequent calls, unless they are first deleted with DeleteBuffers. -// -// No buffer objects are associated with the returned buffer object names -// until they are first bound by calling BindBuffer. -// -// Error GL.INVALID_VALUE is generated if n is negative. GL.INVALID_OPERATION -// is generated if GenBuffers is executed between the execution of Begin -// and the corresponding execution of End. -// -// GenBuffers is available in GL version 1.5 or greater. -func (gl *GL) GenBuffers(n int) []glbase.Buffer { - if n == 0 { - return nil - } - buffers := make([]glbase.Buffer, n) - C.gl2_0_glGenBuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&buffers[0]))) - return buffers -} - -// DeleteBuffers deletes the buffer objects whose names are stored in the -// buffers slice. -// -// After a buffer object is deleted, it has no contents, and its name is free -// for reuse (for example by GenBuffers). If a buffer object that is -// currently bound is deleted, the binding reverts to 0 (the absence of any -// buffer object, which reverts to client memory usage). -// -// DeleteBuffers silently ignores 0's and names that do not correspond to -// existing buffer objects. -// -// Error GL.INVALID_VALUE is generated if n is negative. GL.INVALID_OPERATION -// is generated if DeleteBuffers is executed between the execution of Begin -// and the corresponding execution of End. -// -// DeleteBuffers is available in GL version 1.5 or greater. -func (gl *GL) DeleteBuffers(buffers []glbase.Buffer) { - n := len(buffers) - if n == 0 { - return - } - C.gl2_0_glDeleteBuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&buffers[0]))) -} - -// BindBuffer creates or puts in use a named buffer object. -// Calling BindBuffer with target set to GL.ARRAY_BUFFER, -// GL.ELEMENT_ARRAY_BUFFER, GL.PIXEL_PACK_BUFFER or GL.PIXEL_UNPACK_BUFFER -// and buffer set to the name of the new buffer object binds the buffer -// object name to the target. When a buffer object is bound to a target, the -// previous binding for that target is automatically broken. -// -// Buffer object names are unsigned integers. The value zero is reserved, but -// there is no default buffer object for each buffer object target. Instead, -// buffer set to zero effectively unbinds any buffer object previously bound, -// and restores client memory usage for that buffer object target. Buffer -// object names and the corresponding buffer object contents are local to the -// shared display-list space (see XCreateContext) of the current GL rendering -// context; two rendering contexts share buffer object names only if they -// also share display lists. -// -// GenBuffers may be called to generate a set of new buffer object names. -// -// The state of a buffer object immediately after it is first bound is an -// unmapped zero-sized memory buffer with GL.READ_WRITE access and -// GL.STATIC_DRAW usage. -// -// While a non-zero buffer object name is bound, GL operations on the target -// to which it is bound affect the bound buffer object, and queries of the -// target to which it is bound return state from the bound buffer object. -// While buffer object name zero is bound, as in the initial state, attempts -// to modify or query state on the target to which it is bound generates an -// GL.INVALID_OPERATION error. -// -// When vertex array pointer state is changed, for example by a call to -// NormalPointer, the current buffer object binding (GL.ARRAY_BUFFER_BINDING) -// is copied into the corresponding client state for the vertex array type -// being changed, for example GL.NORMAL_ARRAY_BUFFER_BINDING. While a -// non-zero buffer object is bound to the GL.ARRAY_BUFFER target, the vertex -// array pointer parameter that is traditionally interpreted as a pointer to -// client-side memory is instead interpreted as an offset within the buffer -// object measured in basic machine units. -// -// While a non-zero buffer object is bound to the GL.ELEMENT_ARRAY_BUFFER -// target, the indices parameter of DrawElements, DrawRangeElements, or -// MultiDrawElements that is traditionally interpreted as a pointer to -// client-side memory is instead interpreted as an offset within the buffer -// object measured in basic machine units. -// -// While a non-zero buffer object is bound to the GL.PIXEL_PACK_BUFFER -// target, the following commands are affected: GetCompressedTexImage, -// GetConvolutionFilter, GetHistogram, GetMinmax, GetPixelMap, -// GetPolygonStipple, GetSeparableFilter, GetTexImage, and ReadPixels. The -// pointer parameter that is traditionally interpreted as a pointer to -// client-side memory where the pixels are to be packed is instead -// interpreted as an offset within the buffer object measured in basic -// machine units. -// -// While a non-zero buffer object is bound to the GL.PIXEL_UNPACK_BUFFER -// target, the following commands are affected: Bitmap, ColorSubTable, -// ColorTable, CompressedTexImage1D, CompressedTexImage2D, -// CompressedTexImage3D, CompressedTexSubImage1D, CompressedTexSubImage2D, -// CompressedTexSubImage3D, ConvolutionFilter1D, ConvolutionFilter2D, -// DrawPixels, PixelMap, PolygonStipple, SeparableFilter2D, TexImage1D, -// TexImage2D, TexImage3D, TexSubImage1D, TexSubImage2D, and TexSubImage3D. -// The pointer parameter that is traditionally interpreted as a pointer to -// client-side memory from which the pixels are to be unpacked is instead -// interpreted as an offset within the buffer object measured in basic -// machine units. -// -// A buffer object binding created with BindBuffer remains active until a -// different buffer object name is bound to the same target, or until the -// bound buffer object is deleted with DeleteBuffers. -// -// Once created, a named buffer object may be re-bound to any target as often -// as needed. However, the GL implementation may make choices about how to -// optimize the storage of a buffer object based on its initial binding -// target. -// -// Error GL.INVALID_ENUM is generated if target is not one of the allowable -// values. GL.INVALID_OPERATION is generated if BindBuffer is executed -// between the execution of Begin and the corresponding execution of End. -// -// BindBuffer is available in GL version 1.5 or greater. -func (gl *GL) BindBuffer(target glbase.Enum, buffer glbase.Buffer) { - C.gl2_0_glBindBuffer(gl.funcs, C.GLenum(target), C.GLuint(buffer)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetQueryObjectuiv.xml -func (gl *GL) GetQueryObjectuiv(id uint32, pname glbase.Enum, params []uint32) { - C.gl2_0_glGetQueryObjectuiv(gl.funcs, C.GLuint(id), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetQueryObjectiv.xml -func (gl *GL) GetQueryObjectiv(id uint32, pname glbase.Enum, params []int32) { - C.gl2_0_glGetQueryObjectiv(gl.funcs, C.GLuint(id), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetQueryiv.xml -func (gl *GL) GetQueryiv(target, pname glbase.Enum, params []int32) { - C.gl2_0_glGetQueryiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEndQuery.xml -func (gl *GL) EndQuery(target glbase.Enum) { - C.gl2_0_glEndQuery(gl.funcs, C.GLenum(target)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glBeginQuery.xml -func (gl *GL) BeginQuery(target glbase.Enum, id uint32) { - C.gl2_0_glBeginQuery(gl.funcs, C.GLenum(target), C.GLuint(id)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIsQuery.xml -func (gl *GL) IsQuery(id uint32) bool { - glresult := C.gl2_0_glIsQuery(gl.funcs, C.GLuint(id)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDeleteQueries.xml -func (gl *GL) DeleteQueries(n int, ids []uint32) { - C.gl2_0_glDeleteQueries(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&ids[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGenQueries.xml -func (gl *GL) GenQueries(n int, ids []uint32) { - C.gl2_0_glGenQueries(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&ids[0]))) -} - -// VertexAttribPointer specifies the location and data format of the array -// of generic vertex attributes at index to use when rendering. size -// specifies the number of components per attribute and must be 1, 2, 3, or -// 4. type specifies the data type of each component, and stride specifies -// the byte stride from one attribute to the next, allowing vertices and -// attributes to be packed into a single array or stored in separate arrays. -// normalized indicates whether the values stored in an integer format are -// to be mapped to the range [-1,1] (for signed values) or [0,1] -// (for unsigned values) when they are accessed and converted to floating -// point; otherwise, values will be converted to floats directly without -// normalization. offset is a byte offset into the buffer object's data -// store, which must be bound to the GL.ARRAY_BUFFER target with BindBuffer. -// -// The buffer object binding (GL.ARRAY_BUFFER_BINDING) is saved as -// generic vertex attribute array client-side state -// (GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING) for the provided index. -// -// To enable and disable a generic vertex attribute array, call -// EnableVertexAttribArray and DisableVertexAttribArray with index. If -// enabled, the generic vertex attribute array is used when DrawArrays or -// DrawElements is called. Each generic vertex attribute array is initially -// disabled. -// -// VertexAttribPointer is typically implemented on the client side. -// -// Error GL.INVALID_ENUM is generated if type is not an accepted value. -// GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. GL.INVALID_VALUE is generated if size is not 1, 2, -// 3, or 4. GL.INVALID_VALUE is generated if stride is negative. -func (gl *GL) VertexAttribPointer(index glbase.Attrib, size int, gltype glbase.Enum, normalized bool, stride int, offset uintptr) { - offset_ptr := unsafe.Pointer(offset) - C.gl2_0_glVertexAttribPointer(gl.funcs, C.GLuint(index), C.GLint(size), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), C.GLsizei(stride), offset_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glValidateProgram.xml -func (gl *GL) ValidateProgram(program glbase.Program) { - C.gl2_0_glValidateProgram(gl.funcs, C.GLuint(program)) -} - -// UniformMatrix4fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix4fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix4fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(4*4) != 0 { - panic("invalid value length for UniformMatrix4fv") - } - count := len(value) / (4 * 4) - C.gl2_0_glUniformMatrix4fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix3fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix3fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix3fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(3*3) != 0 { - panic("invalid value length for UniformMatrix3fv") - } - count := len(value) / (3 * 3) - C.gl2_0_glUniformMatrix3fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix2fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix2fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix2fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(2*2) != 0 { - panic("invalid value length for UniformMatrix2fv") - } - count := len(value) / (2 * 2) - C.gl2_0_glUniformMatrix2fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform4iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform4iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - if len(value)%4 != 0 { - panic("invalid value length for Uniform4iv") - } - count := len(value) / 4 - C.gl2_0_glUniform4iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// Uniform3iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform3iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - if len(value)%3 != 0 { - panic("invalid value length for Uniform3iv") - } - count := len(value) / 3 - C.gl2_0_glUniform3iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// Uniform2iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform2iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - if len(value)%2 != 0 { - panic("invalid value length for Uniform2iv") - } - count := len(value) / 2 - C.gl2_0_glUniform2iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// Uniform1iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform1iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - count := len(value) - C.gl2_0_glUniform1iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// Uniform4fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform4fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - if len(value)%4 != 0 { - panic("invalid value length for Uniform4fv") - } - count := len(value) / 4 - C.gl2_0_glUniform4fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform3fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform3fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - if len(value)%3 != 0 { - panic("invalid value length for Uniform3fv") - } - count := len(value) / 3 - C.gl2_0_glUniform3fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform2fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform2fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - if len(value)%2 != 0 { - panic("invalid value length for Uniform2fv") - } - count := len(value) / 2 - C.gl2_0_glUniform2fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform1fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform1fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - count := len(value) - C.gl2_0_glUniform1fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform4i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform4i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4i(location glbase.Uniform, v0, v1, v2, v3 int32) { - C.gl2_0_glUniform4i(gl.funcs, C.GLint(location), C.GLint(v0), C.GLint(v1), C.GLint(v2), C.GLint(v3)) -} - -// Uniform3i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform3i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3i(location glbase.Uniform, v0, v1, v2 int32) { - C.gl2_0_glUniform3i(gl.funcs, C.GLint(location), C.GLint(v0), C.GLint(v1), C.GLint(v2)) -} - -// Uniform2i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform2i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2i(location glbase.Uniform, v0, v1 int32) { - C.gl2_0_glUniform2i(gl.funcs, C.GLint(location), C.GLint(v0), C.GLint(v1)) -} - -// Uniform1i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform1i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1i(location glbase.Uniform, v0 int32) { - C.gl2_0_glUniform1i(gl.funcs, C.GLint(location), C.GLint(v0)) -} - -// Uniform4f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform4f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4f(location glbase.Uniform, v0, v1, v2, v3 float32) { - C.gl2_0_glUniform4f(gl.funcs, C.GLint(location), C.GLfloat(v0), C.GLfloat(v1), C.GLfloat(v2), C.GLfloat(v3)) -} - -// Uniform3f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform3f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3f(location glbase.Uniform, v0, v1, v2 float32) { - C.gl2_0_glUniform3f(gl.funcs, C.GLint(location), C.GLfloat(v0), C.GLfloat(v1), C.GLfloat(v2)) -} - -// Uniform2f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform2f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2f(location glbase.Uniform, v0, v1 float32) { - C.gl2_0_glUniform2f(gl.funcs, C.GLint(location), C.GLfloat(v0), C.GLfloat(v1)) -} - -// Uniform1f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform1f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1f(location glbase.Uniform, v0 float32) { - C.gl2_0_glUniform1f(gl.funcs, C.GLint(location), C.GLfloat(v0)) -} - -// UseProgram installs the program object specified by program as part of -// current rendering state. One or more executables are created in a program -// object by successfully attaching shader objects to it with AttachShader, -// successfully compiling the shader objects with CompileShader, and -// successfully linking the program object with LinkProgram. -// -// A program object will contain an executable that will run on the vertex -// processor if it contains one or more shader objects of type -// GL.VERTEX_SHADER that have been successfully compiled and linked. -// Similarly, a program object will contain an executable that will run on -// the fragment processor if it contains one or more shader objects of type -// GL.FRAGMENT_SHADER that have been successfully compiled and linked. -// -// Successfully installing an executable on a programmable processor will -// cause the corresponding fixed functionality of OpenGL to be disabled. -// Specifically, if an executable is installed on the vertex processor, the -// OpenGL fixed functionality will be disabled as follows. -// -// - The modelview matrix is not applied to vertex coordinates. -// -// - The projection matrix is not applied to vertex coordinates. -// -// - The texture matrices are not applied to texture coordinates. -// -// - Normals are not transformed to eye coordinates. -// -// - Normals are not rescaled or normalized. -// -// - Normalization of GL.AUTO_NORMAL evaluated normals is not performed. -// -// - Texture coordinates are not generated automatically. -// -// - Per-vertex lighting is not performed. -// -// - Color material computations are not performed. -// -// - Color index lighting is not performed. -// -// - This list also applies when setting the current raster position. -// -// The executable that is installed on the vertex processor is expected to -// implement any or all of the desired functionality from the preceding list. -// Similarly, if an executable is installed on the fragment processor, the -// OpenGL fixed functionality will be disabled as follows. -// -// - Texture environment and texture functions are not applied. -// -// - Texture application is not applied. -// -// - Color sum is not applied. -// -// - Fog is not applied. -// -// Again, the fragment shader that is installed is expected to implement any -// or all of the desired functionality from the preceding list. -// -// While a program object is in use, applications are free to modify attached -// shader objects, compile attached shader objects, attach additional shader -// objects, and detach or delete shader objects. None of these operations -// will affect the executables that are part of the current state. However, -// relinking the program object that is currently in use will install the -// program object as part of the current rendering state if the link -// operation was successful (see LinkProgram). If the program object -// currently in use is relinked unsuccessfully, its link status will be set -// to GL.FALSE, but the executables and associated state will remain part of -// the current state until a subsequent call to UseProgram removes it from -// use. After it is removed from use, it cannot be made part of current state -// until it has been successfully relinked. -// -// If program contains shader objects of type GL.VERTEX_SHADER but it does -// not contain shader objects of type GL.FRAGMENT_SHADER, an executable will -// be installed on the vertex processor, but fixed functionality will be used -// for fragment processing. Similarly, if program contains shader objects of -// type GL.FRAGMENT_SHADER but it does not contain shader objects of type -// GL.VERTEX_SHADER, an executable will be installed on the fragment -// processor, but fixed functionality will be used for vertex processing. If -// program is 0, the programmable processors will be disabled, and fixed -// functionality will be used for both vertex and fragment processing. -// -// While a program object is in use, the state that controls the disabled -// fixed functionality may also be updated using the normal OpenGL calls. -// -// Like display lists and texture objects, the name space for program objects -// may be shared across a set of contexts, as long as the server sides of the -// contexts share the same address space. If the name space is shared across -// contexts, any attached objects and the data associated with those attached -// objects are shared as well. -// -// Applications are responsible for providing the synchronization across API -// calls when objects are accessed from different execution threads. -// -// Error GL.INVALID_VALUE is generated if program is neither 0 nor a value -// generated by OpenGL. GL.INVALID_OPERATION is generated if program is not -// a program object. GL.INVALID_OPERATION is generated if program could not -// be made part of current state. GL.INVALID_OPERATION is generated if -// UseProgram is executed between the execution of Begin and the -// corresponding execution of End. -// -// UseProgram is available in GL version 2.0 or greater. -func (gl *GL) UseProgram(program glbase.Program) { - C.gl2_0_glUseProgram(gl.funcs, C.GLuint(program)) -} - -// ShaderSource sets the source code in shader to the provided source code. Any source -// code previously stored in the shader object is completely replaced. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader is not a shader -// object. GL.INVALID_VALUE is generated if count is less than 0. -// GL.INVALID_OPERATION is generated if ShaderSource is executed between the -// execution of Begin and the corresponding execution of End. -// -// ShaderSource is available in GL version 2.0 or greater. -func (gl *GL) ShaderSource(shader glbase.Shader, source ...string) { - count := len(source) - length := make([]int32, count) - source_c := make([]unsafe.Pointer, count) - for i, src := range source { - length[i] = int32(len(src)) - if len(src) > 0 { - source_c[i] = *(*unsafe.Pointer)(unsafe.Pointer(&src)) - } else { - source_c[i] = unsafe.Pointer(uintptr(0)) - } - } - C.gl2_0_glShaderSource(gl.funcs, C.GLuint(shader), C.GLsizei(count), (**C.GLchar)(unsafe.Pointer(&source_c[0])), (*C.GLint)(unsafe.Pointer(&length[0]))) -} - -// LinkProgram links the program object specified by program. If any shader -// objects of type GL.VERTEX_SHADER are attached to program, they will be -// used to create an executable that will run on the programmable vertex -// processor. If any shader objects of type GL.FRAGMENT_SHADER are attached -// to program, they will be used to create an executable that will run on the -// programmable fragment processor. -// -// The status of the link operation will be stored as part of the program -// object's state. This value will be set to GL.TRUE if the program object -// was linked without errors and is ready for use, and GL.FALSE otherwise. It -// can be queried by calling GetProgramiv with arguments program and -// GL.LINK_STATUS. -// -// As a result of a successful link operation, all active user-defined -// uniform variables belonging to program will be initialized to 0, and each -// of the program object's active uniform variables will be assigned a -// location that can be queried by calling GetUniformLocation. Also, any -// active user-defined attribute variables that have not been bound to a -// generic vertex attribute index will be bound to one at this time. -// -// Linking of a program object can fail for a number of reasons as specified -// in the OpenGL Shading Language Specification. The following lists some of -// the conditions that will cause a link error. -// -// - The number of active attribute variables supported by the -// implementation has been exceeded. -// -// - The storage limit for uniform variables has been exceeded. -// -// - The number of active uniform variables supported by the implementation -// has been exceeded. -// -// - The main function is missing for the vertex shader or the fragment -// shader. -// -// - A varying variable actually used in the fragment shader is not -// declared in the same way (or is not declared at all) in the vertex -// shader. -// -// - A reference to a function or variable name is unresolved. -// -// - A shared global is declared with two different types or two different -// initial values. -// -// - One or more of the attached shader objects has not been successfully -// compiled. -// -// - Binding a generic attribute matrix caused some rows of the matrix to -// fall outside the allowed maximum of GL.MAX_VERTEX_ATTRIBS. -// -// - Not enough contiguous vertex attribute slots could be found to bind -// attribute matrices. -// -// When a program object has been successfully linked, the program object can -// be made part of current state by calling UseProgram. Whether or not the -// link operation was successful, the program object's information log will -// be overwritten. The information log can be retrieved by calling -// GetProgramInfoLog. -// -// LinkProgram will also install the generated executables as part of the -// current rendering state if the link operation was successful and the -// specified program object is already currently in use as a result of a -// previous call to UseProgram. If the program object currently in use is -// relinked unsuccessfully, its link status will be set to GL.FALSE , but the -// executables and associated state will remain part of the current state -// until a subsequent call to UseProgram removes it from use. After it is -// removed from use, it cannot be made part of current state until it has -// been successfully relinked. -// -// If program contains shader objects of type GL.VERTEX_SHADER but does not -// contain shader objects of type GL.FRAGMENT_SHADER, the vertex shader will -// be linked against the implicit interface for fixed functionality fragment -// processing. Similarly, if program contains shader objects of type -// GL.FRAGMENT_SHADER but it does not contain shader objects of type -// GL.VERTEX_SHADER, the fragment shader will be linked against the implicit -// interface for fixed functionality vertex processing. -// -// The program object's information log is updated and the program is -// generated at the time of the link operation. After the link operation, -// applications are free to modify attached shader objects, compile attached -// shader objects, detach shader objects, delete shader objects, and attach -// additional shader objects. None of these operations affects the -// information log or the program that is part of the program object. -// -// If the link operation is unsuccessful, any information about a previous -// link operation on program is lost (a failed link does not restore the -// old state of program). Certain information can still be retrieved -// from program even after an unsuccessful link operation. See for instance -// GetActiveAttrib and GetActiveUniform. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program -// object. GL.INVALID_OPERATION is generated if LinkProgram is executed -// between the execution of Begin and the corresponding execution of End. -// -// LinkProgram is available in GL version 2.0 or greater. -func (gl *GL) LinkProgram(program glbase.Program) { - C.gl2_0_glLinkProgram(gl.funcs, C.GLuint(program)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIsShader.xml -func (gl *GL) IsShader(shader glbase.Shader) bool { - glresult := C.gl2_0_glIsShader(gl.funcs, C.GLuint(shader)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIsProgram.xml -func (gl *GL) IsProgram(program glbase.Program) bool { - glresult := C.gl2_0_glIsProgram(gl.funcs, C.GLuint(program)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// GetVertexAttribiv returns in params the value of a generic vertex attribute -// parameter. The generic vertex attribute to be queried is specified by -// index, and the parameter to be queried is specified by pname. -// -// The accepted parameter names are as follows: -// -// GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING -// params returns a single value, the name of the buffer object -// currently bound to the binding point corresponding to generic vertex -// attribute array index. If no buffer object is bound, 0 is returned. -// The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_ENABLED -// params returns a single value that is non-zero (true) if the vertex -// attribute array for index is enabled and 0 (false) if it is -// disabled. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_SIZE -// params returns a single value, the size of the vertex attribute -// array for index. The size is the number of values for each element -// of the vertex attribute array, and it will be 1, 2, 3, or 4. The -// initial value is 4. -// -// GL.VERTEX_ATTRIB_ARRAY_STRIDE -// params returns a single value, the array stride for (number of bytes -// between successive elements in) the vertex attribute array for -// index. A value of 0 indicates that the array elements are stored -// sequentially in memory. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_TYPE -// params returns a single value, a symbolic constant indicating the -// array type for the vertex attribute array for index. Possible values -// are GL.BYTE, GL.UNSIGNED_BYTE, GL.SHORT, GL.UNSIGNED_SHORT, GL.INT, -// GL.UNSIGNED_INT, GL.FLOAT, and GL.DOUBLE. The initial value is -// GL.FLOAT. -// -// GL.VERTEX_ATTRIB_ARRAY_NORMALIZED -// params returns a single value that is non-zero (true) if fixed-point -// data types for the vertex attribute array indicated by index are -// normalized when they are converted to floating point, and 0 (false) -// otherwise. The initial value is 0. -// -// GL.CURRENT_VERTEX_ATTRIB -// params returns four values that represent the current value for the -// generic vertex attribute specified by index. Generic vertex -// attribute 0 is unique in that it has no current state, so an error -// will be generated if index is 0. The initial value for all other -// generic vertex attributes is (0,0,0,1). -// -// All of the parameters except GL.CURRENT_VERTEX_ATTRIB represent -// client-side state. -// -// Error GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. GL.INVALID_ENUM is generated if pname is not an -// accepted value. GL.INVALID_OPERATION is generated if index is 0 and pname -// is GL.CURRENT_VERTEX_ATTRIB. -// -// GetVertexAttribiv is available in GL version 2.0 or greater. -func (gl *GL) GetVertexAttribiv(index glbase.Attrib, pname glbase.Enum, params []int32) { - var params_c [4]int32 - C.gl2_0_glGetVertexAttribiv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetVertexAttribfv returns in params the value of a generic vertex attribute -// parameter. The generic vertex attribute to be queried is specified by -// index, and the parameter to be queried is specified by pname. -// -// The accepted parameter names are as follows: -// -// GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING -// params returns a single value, the name of the buffer object -// currently bound to the binding point corresponding to generic vertex -// attribute array index. If no buffer object is bound, 0 is returned. -// The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_ENABLED -// params returns a single value that is non-zero (true) if the vertex -// attribute array for index is enabled and 0 (false) if it is -// disabled. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_SIZE -// params returns a single value, the size of the vertex attribute -// array for index. The size is the number of values for each element -// of the vertex attribute array, and it will be 1, 2, 3, or 4. The -// initial value is 4. -// -// GL.VERTEX_ATTRIB_ARRAY_STRIDE -// params returns a single value, the array stride for (number of bytes -// between successive elements in) the vertex attribute array for -// index. A value of 0 indicates that the array elements are stored -// sequentially in memory. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_TYPE -// params returns a single value, a symbolic constant indicating the -// array type for the vertex attribute array for index. Possible values -// are GL.BYTE, GL.UNSIGNED_BYTE, GL.SHORT, GL.UNSIGNED_SHORT, GL.INT, -// GL.UNSIGNED_INT, GL.FLOAT, and GL.DOUBLE. The initial value is -// GL.FLOAT. -// -// GL.VERTEX_ATTRIB_ARRAY_NORMALIZED -// params returns a single value that is non-zero (true) if fixed-point -// data types for the vertex attribute array indicated by index are -// normalized when they are converted to floating point, and 0 (false) -// otherwise. The initial value is 0. -// -// GL.CURRENT_VERTEX_ATTRIB -// params returns four values that represent the current value for the -// generic vertex attribute specified by index. Generic vertex -// attribute 0 is unique in that it has no current state, so an error -// will be generated if index is 0. The initial value for all other -// generic vertex attributes is (0,0,0,1). -// -// All of the parameters except GL.CURRENT_VERTEX_ATTRIB represent -// client-side state. -// -// Error GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. GL.INVALID_ENUM is generated if pname is not an -// accepted value. GL.INVALID_OPERATION is generated if index is 0 and pname -// is GL.CURRENT_VERTEX_ATTRIB. -// -// GetVertexAttribfv is available in GL version 2.0 or greater. -func (gl *GL) GetVertexAttribfv(index glbase.Attrib, pname glbase.Enum, params []float32) { - var params_c [4]float32 - C.gl2_0_glGetVertexAttribfv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetVertexAttribdv returns in params the value of a generic vertex attribute -// parameter. The generic vertex attribute to be queried is specified by -// index, and the parameter to be queried is specified by pname. -// -// The accepted parameter names are as follows: -// -// GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING -// params returns a single value, the name of the buffer object -// currently bound to the binding point corresponding to generic vertex -// attribute array index. If no buffer object is bound, 0 is returned. -// The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_ENABLED -// params returns a single value that is non-zero (true) if the vertex -// attribute array for index is enabled and 0 (false) if it is -// disabled. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_SIZE -// params returns a single value, the size of the vertex attribute -// array for index. The size is the number of values for each element -// of the vertex attribute array, and it will be 1, 2, 3, or 4. The -// initial value is 4. -// -// GL.VERTEX_ATTRIB_ARRAY_STRIDE -// params returns a single value, the array stride for (number of bytes -// between successive elements in) the vertex attribute array for -// index. A value of 0 indicates that the array elements are stored -// sequentially in memory. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_TYPE -// params returns a single value, a symbolic constant indicating the -// array type for the vertex attribute array for index. Possible values -// are GL.BYTE, GL.UNSIGNED_BYTE, GL.SHORT, GL.UNSIGNED_SHORT, GL.INT, -// GL.UNSIGNED_INT, GL.FLOAT, and GL.DOUBLE. The initial value is -// GL.FLOAT. -// -// GL.VERTEX_ATTRIB_ARRAY_NORMALIZED -// params returns a single value that is non-zero (true) if fixed-point -// data types for the vertex attribute array indicated by index are -// normalized when they are converted to floating point, and 0 (false) -// otherwise. The initial value is 0. -// -// GL.CURRENT_VERTEX_ATTRIB -// params returns four values that represent the current value for the -// generic vertex attribute specified by index. Generic vertex -// attribute 0 is unique in that it has no current state, so an error -// will be generated if index is 0. The initial value for all other -// generic vertex attributes is (0,0,0,1). -// -// All of the parameters except GL.CURRENT_VERTEX_ATTRIB represent -// client-side state. -// -// Error GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. GL.INVALID_ENUM is generated if pname is not an -// accepted value. GL.INVALID_OPERATION is generated if index is 0 and pname -// is GL.CURRENT_VERTEX_ATTRIB. -// -// GetVertexAttribdv is available in GL version 2.0 or greater. -func (gl *GL) GetVertexAttribdv(index glbase.Attrib, pname glbase.Enum, params []float64) { - var params_c [4]float64 - C.gl2_0_glGetVertexAttribdv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetUniformiv returns in params the value of the specified uniform -// variable. The type of the uniform variable specified by location -// determines the number of values returned. If the uniform variable is -// defined in the shader as a boolean, int, or float, a single value will be -// returned. If it is defined as a vec2, ivec2, or bvec2, two values will be -// returned. If it is defined as a vec3, ivec3, or bvec3, three values will -// be returned, and so on. To query values stored in uniform variables -// declared as arrays, call GetUniformiv for each element of the array. To -// query values stored in uniform variables declared as structures, call -// GetUniformiv for each field in the structure. The values for uniform -// variables declared as a matrix will be returned in column major order. -// -// The locations assigned to uniform variables are not known until the -// program object is linked. After linking has occurred, the command -// GetUniformLocation can be used to obtain the location of a uniform -// variable. This location value can then be passed to GetUniformiv in order -// to query the current value of the uniform variable. After a program object -// has been linked successfully, the index values for uniform variables -// remain fixed until the next link command occurs. The uniform variable -// values can only be queried after a link if the link was successful. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program -// object. GL.INVALID_OPERATION is generated if program has not been -// successfully linked. GL.INVALID_OPERATION is generated if location does -// not correspond to a valid uniform variable location for the specified -// program object. GL.INVALID_OPERATION is generated if GetUniformiv is -// executed between the execution of Begin and the corresponding execution of -// End. -// -// GetUniformiv is available in GL version 2.0 or greater. -func (gl *GL) GetUniformiv(program glbase.Program, location glbase.Uniform, params []int32) { - var params_c [4]int32 - C.gl2_0_glGetUniformiv(gl.funcs, C.GLuint(program), C.GLint(location), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetUniformfv returns in params the value of the specified uniform -// variable. The type of the uniform variable specified by location -// determines the number of values returned. If the uniform variable is -// defined in the shader as a boolean, int, or float, a single value will be -// returned. If it is defined as a vec2, ivec2, or bvec2, two values will be -// returned. If it is defined as a vec3, ivec3, or bvec3, three values will -// be returned, and so on. To query values stored in uniform variables -// declared as arrays, call GetUniformfv for each element of the array. To -// query values stored in uniform variables declared as structures, call -// GetUniformfv for each field in the structure. The values for uniform -// variables declared as a matrix will be returned in column major order. -// -// The locations assigned to uniform variables are not known until the -// program object is linked. After linking has occurred, the command -// GetUniformLocation can be used to obtain the location of a uniform -// variable. This location value can then be passed to GetUniformfv in order -// to query the current value of the uniform variable. After a program object -// has been linked successfully, the index values for uniform variables -// remain fixed until the next link command occurs. The uniform variable -// values can only be queried after a link if the link was successful. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program -// object. GL.INVALID_OPERATION is generated if program has not been -// successfully linked. GL.INVALID_OPERATION is generated if location does -// not correspond to a valid uniform variable location for the specified -// program object. GL.INVALID_OPERATION is generated if GetUniformfv is -// executed between the execution of Begin and the corresponding execution of -// End. -// -// GetUniformfv is available in GL version 2.0 or greater. -func (gl *GL) GetUniformfv(program glbase.Program, location glbase.Uniform, params []float32) { - var params_c [4]float32 - C.gl2_0_glGetUniformfv(gl.funcs, C.GLuint(program), C.GLint(location), (*C.GLfloat)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetUniformLocation returns an integer that represents the location of a -// specific uniform variable within a program object. name must be an active -// uniform variable name in program that is not a structure, an array of -// structures, or a subcomponent of a vector or a matrix. This function -// returns -1 if name does not correspond to an active uniform variable in -// program or if name starts with the reserved prefix "gl_". -// -// Uniform variables that are structures or arrays of structures may be -// queried by calling GetUniformLocation for each field within the -// structure. The array element operator "[]" and the structure field -// operator "." may be used in name in order to select elements within an -// array or fields within a structure. The result of using these operators is -// not allowed to be another structure, an array of structures, or a -// subcomponent of a vector or a matrix. Except if the last part of name -// indicates a uniform variable array, the location of the first element of -// an array can be retrieved by using the name of the array, or by using the -// name appended by "[0]". -// -// The actual locations assigned to uniform variables are not known until the -// program object is linked successfully. After linking has occurred, the -// command GetUniformLocation can be used to obtain the location of a -// uniform variable. This location value can then be passed to Uniform to -// set the value of the uniform variable or to GetUniform in order to query -// the current value of the uniform variable. After a program object has been -// linked successfully, the index values for uniform variables remain fixed -// until the next link command occurs. Uniform variable locations and values -// can only be queried after a link if the link was successful. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program object. -// GL.INVALID_OPERATION is generated if program has not been successfully -// linked. GL.INVALID_OPERATION is generated if GetUniformLocation is executed -// between the execution of Begin and the corresponding execution of End. -// -// GetUniformLocation is available in GL version 2.0 or greater. -func (gl *GL) GetUniformLocation(program glbase.Program, name string) glbase.Uniform { - name_cstr := C.CString(name) - glresult := C.gl2_0_glGetUniformLocation(gl.funcs, C.GLuint(program), (*C.GLchar)(name_cstr)) - C.free(unsafe.Pointer(name_cstr)) - return glbase.Uniform(glresult) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetShaderSource.xml -func (gl *GL) GetShaderSource(shader glbase.Shader, bufSize int32, length []int32, source []byte) { - C.gl2_0_glGetShaderSource(gl.funcs, C.GLuint(shader), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLchar)(unsafe.Pointer(&source[0]))) -} - -// GetShaderInfoLog returns the information log for the specified shader -// object. The information log for a shader object is modified when the -// shader is compiled. -// -// The information log for a shader object is a string that may contain -// diagnostic messages, warning messages, and other information about the -// last compile operation. When a shader object is created, its information -// log will be a string of length 0, and the size of the current log can be -// obtained by calling GetShaderiv with the value GL.INFO_LOG_LENGTH. -// -// The information log for a shader object is the OpenGL implementer's -// primary mechanism for conveying information about the compilation process. -// Therefore, the information log can be helpful to application developers -// during the development process, even when compilation is successful. -// Application developers should not expect different OpenGL implementations -// to produce identical information logs. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader is not a shader -// object. GL.INVALID_VALUE is generated if maxLength is less than 0. -// GL.INVALID_OPERATION is generated if GetShaderInfoLog is executed -// between the execution of Begin and the corresponding execution of End. -// -// GetShaderInfoLog is available in GL version 2.0 or greater. -func (gl *GL) GetShaderInfoLog(shader glbase.Shader) []byte { - var params [1]int32 - var length int32 - gl.GetShaderiv(shader, INFO_LOG_LENGTH, params[:]) - bufSize := params[0] - infoLog := make([]byte, int(bufSize)) - C.gl2_0_glGetShaderInfoLog(gl.funcs, C.GLuint(shader), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length)), (*C.GLchar)(unsafe.Pointer(&infoLog[0]))) - return infoLog -} - -// GetShaderiv GetShader returns in params the value of a parameter for a specific -// shader object. The following parameters are defined: -// -// GL.SHADER_TYPE -// params returns GL.VERTEX_SHADER if shader is a vertex shader object, -// and GL.FRAGMENT_SHADER if shader is a fragment shader object. -// -// GL.DELETE_STATUS -// params returns GL.TRUE if shader is currently flagged for deletion, -// and GL.FALSE otherwise. -// -// GL.COMPILE_STATUS -// params returns GL.TRUE if the last compile operation on shader was -// successful, and GL.FALSE otherwise. -// -// GL.INFO_LOG_LENGTH -// params returns the number of characters in the information log for -// shader including the null termination character (the size of the -// character buffer required to store the information log). If shader has -// no information log, a value of 0 is returned. -// -// GL.SHADER_SOURCE_LENGTH -// params returns the length of the concatenation of the source strings -// that make up the shader source for the shader, including the null -// termination character. (the size of the character buffer -// required to store the shader source). If no source code exists, 0 is -// returned. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader does not refer to a -// shader object. GL.INVALID_ENUM is generated if pname is not an accepted -// value. GL.INVALID_OPERATION is generated if GetShader is executed -// between the execution of Begin and the corresponding execution of End. -// -// GetShaderiv is available in GL version 2.0 or greater. -func (gl *GL) GetShaderiv(shader glbase.Shader, pname glbase.Enum, params []int32) { - var params_c [4]int32 - C.gl2_0_glGetShaderiv(gl.funcs, C.GLuint(shader), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetProgramInfoLog returns the information log for the specified program -// object. The information log for a program object is modified when the -// program object is linked or validated. -// -// The information log for a program object is either an empty string, or a -// string containing information about the last link operation, or a string -// containing information about the last validation operation. It may contain -// diagnostic messages, warning messages, and other information. When a -// program object is created, its information log will be a string of length -// 0, and the size of the current log can be obtained by calling GetProgramiv -// with the value GL.INFO_LOG_LENGTH. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated -// by OpenGL. GL.INVALID_OPERATION is generated if program is not a -// program object. -func (gl *GL) GetProgramInfoLog(program glbase.Program) []byte { - var params [1]int32 - var length int32 - gl.GetProgramiv(program, INFO_LOG_LENGTH, params[:]) - bufSize := params[0] - infoLog := make([]byte, int(bufSize)) - C.gl2_0_glGetProgramInfoLog(gl.funcs, C.GLuint(program), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length)), (*C.GLchar)(unsafe.Pointer(&infoLog[0]))) - return infoLog -} - -// GetProgramiv returns in params the value of a parameter for a specific -// program object. The following parameters are defined: -// -// GL.DELETE_STATUS -// params returns GL.TRUE if program is currently flagged for deletion, -// and GL.FALSE otherwise. -// -// GL.LINK_STATUS -// params returns GL.TRUE if the last link operation on program was -// successful, and GL.FALSE otherwise. -// -// GL.VALIDATE_STATUS -// params returns GL.TRUE or if the last validation operation on -// program was successful, and GL.FALSE otherwise. -// -// GL.INFO_LOG_LENGTH -// params returns the number of characters in the information log for -// program including the null termination character (the size of -// the character buffer required to store the information log). If -// program has no information log, a value of 0 is returned. -// -// GL.ATTACHED_SHADERS -// params returns the number of shader objects attached to program. -// -// GL.ACTIVE_ATTRIBUTES -// params returns the number of active attribute variables for program. -// -// GL.ACTIVE_ATTRIBUTE_MAX_LENGTH -// params returns the length of the longest active attribute name for -// program, including the null termination character (the size of -// the character buffer required to store the longest attribute name). -// If no active attributes exist, 0 is returned. -// -// GL.ACTIVE_UNIFORMS -// params returns the number of active uniform variables for program. -// -// GL.ACTIVE_UNIFORM_MAX_LENGTH -// params returns the length of the longest active uniform variable -// name for program, including the null termination character (i.e., -// the size of the character buffer required to store the longest -// uniform variable name). If no active uniform variables exist, 0 is -// returned. -// -// GL.TRANSFORM_FEEDBACK_BUFFER_MODE -// params returns a symbolic constant indicating the buffer mode used -// when transform feedback is active. This may be GL.SEPARATE_ATTRIBS -// or GL.INTERLEAVED_ATTRIBS. -// -// GL.TRANSFORM_FEEDBACK_VARYINGS -// params returns the number of varying variables to capture in transform -// feedback mode for the program. -// -// GL.TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH -// params returns the length of the longest variable name to be used for -// transform feedback, including the null-terminator. -// -// GL.GEOMETRY_VERTICES_OUT -// params returns the maximum number of vertices that the geometry shader in -// program will output. -// -// GL.GEOMETRY_INPUT_TYPE -// params returns a symbolic constant indicating the primitive type accepted -// as input to the geometry shader contained in program. -// -// GL.GEOMETRY_OUTPUT_TYPE -// params returns a symbolic constant indicating the primitive type that will -// be output by the geometry shader contained in program. -// -// GL.ACTIVE_UNIFORM_BLOCKS and GL.ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH are -// available only if the GL version 3.1 or greater. -// -// GL.GEOMETRY_VERTICES_OUT, GL.GEOMETRY_INPUT_TYPE and -// GL.GEOMETRY_OUTPUT_TYPE are accepted only if the GL version is 3.2 or -// greater. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program does not refer to a -// program object. GL.INVALID_OPERATION is generated if pname is -// GL.GEOMETRY_VERTICES_OUT, GL.GEOMETRY_INPUT_TYPE, or -// GL.GEOMETRY_OUTPUT_TYPE, and program does not contain a geometry shader. -// GL.INVALID_ENUM is generated if pname is not an accepted value. -func (gl *GL) GetProgramiv(program glbase.Program, pname glbase.Enum, params []int32) { - var params_c [4]int32 - C.gl2_0_glGetProgramiv(gl.funcs, C.GLuint(program), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetAttribLocation queries the previously linked program object specified -// by program for the attribute variable specified by name and returns the -// index of the generic vertex attribute that is bound to that attribute -// variable. If name is a matrix attribute variable, the index of the first -// column of the matrix is returned. If the named attribute variable is not -// an active attribute in the specified program object or if name starts with -// the reserved prefix "gl_", a value of -1 is returned. -// -// The association between an attribute variable name and a generic attribute -// index can be specified at any time by calling BindAttribLocation. -// Attribute bindings do not go into effect until LinkProgram is called. -// After a program object has been linked successfully, the index values for -// attribute variables remain fixed until the next link command occurs. The -// attribute values can only be queried after a link if the link was -// successful. GetAttribLocation returns the binding that actually went -// into effect the last time LinkProgram was called for the specified -// program object. Attribute bindings that have been specified since the last -// link operation are not returned by GetAttribLocation. -// -// Error GL_INVALID_OPERATION is generated if program is not a value -// generated by OpenGL. GL_INVALID_OPERATION is generated if program is not -// a program object. GL_INVALID_OPERATION is generated if program has not -// been successfully linked. GL_INVALID_OPERATION is generated if -// GetAttribLocation is executed between the execution of Begin and the -// corresponding execution of End. -// -// GetAttribLocation is available in GL version 2.0 or greater. -func (gl *GL) GetAttribLocation(program glbase.Program, name string) glbase.Attrib { - name_cstr := C.CString(name) - glresult := C.gl2_0_glGetAttribLocation(gl.funcs, C.GLuint(program), (*C.GLchar)(name_cstr)) - C.free(unsafe.Pointer(name_cstr)) - return glbase.Attrib(glresult) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetAttachedShaders.xml -func (gl *GL) GetAttachedShaders(program glbase.Program, maxCount int32, count []int, obj []uint32) { - C.gl2_0_glGetAttachedShaders(gl.funcs, C.GLuint(program), C.GLsizei(maxCount), (*C.GLsizei)(unsafe.Pointer(&count[0])), (*C.GLuint)(unsafe.Pointer(&obj[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetActiveUniform.xml -func (gl *GL) GetActiveUniform(program glbase.Program, index uint32, bufSize int32, length []int32, size []int, gltype []glbase.Enum, name []byte) { - C.gl2_0_glGetActiveUniform(gl.funcs, C.GLuint(program), C.GLuint(index), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLint)(unsafe.Pointer(&size[0])), (*C.GLenum)(unsafe.Pointer(&gltype[0])), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetActiveAttrib.xml -func (gl *GL) GetActiveAttrib(program glbase.Program, index glbase.Attrib, bufSize int32, length []int32, size []int, gltype []glbase.Enum, name []byte) { - C.gl2_0_glGetActiveAttrib(gl.funcs, C.GLuint(program), C.GLuint(index), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLint)(unsafe.Pointer(&size[0])), (*C.GLenum)(unsafe.Pointer(&gltype[0])), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEnableVertexAttribArray.xml -func (gl *GL) EnableVertexAttribArray(index glbase.Attrib) { - C.gl2_0_glEnableVertexAttribArray(gl.funcs, C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDisableVertexAttribArray.xml -func (gl *GL) DisableVertexAttribArray(index glbase.Attrib) { - C.gl2_0_glDisableVertexAttribArray(gl.funcs, C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDetachShader.xml -func (gl *GL) DetachShader(program glbase.Program, shader glbase.Shader) { - C.gl2_0_glDetachShader(gl.funcs, C.GLuint(program), C.GLuint(shader)) -} - -// DeleteShader frees the memory and invalidates the name associated with -// the shader object specified by shader. This command effectively undoes the -// effects of a call to CreateShader. -// -// If a shader object to be deleted is attached to a program object, it will -// be flagged for deletion, but it will not be deleted until it is no longer -// attached to any program object, for any rendering context (it must -// be detached from wherever it was attached before it will be deleted). A -// value of 0 for shader will be silently ignored. -// -// To determine whether an object has been flagged for deletion, call -// GetShader with arguments shader and GL.DELETE_STATUS. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. -// -// DeleteShader is available in GL version 2.0 or greater. -func (gl *GL) DeleteShader(shader glbase.Shader) { - C.gl2_0_glDeleteShader(gl.funcs, C.GLuint(shader)) -} - -// DeleteProgram frees the memory and invalidates the name associated with -// the program object specified by program. This command effectively undoes -// the effects of a call to CreateProgram. -// -// If a program object is in use as part of current rendering state, it will -// be flagged for deletion, but it will not be deleted until it is no longer -// part of current state for any rendering context. If a program object to be -// deleted has shader objects attached to it, those shader objects will be -// automatically detached but not deleted unless they have already been -// flagged for deletion by a previous call to DeleteShader. A value of 0 -// for program will be silently ignored. -// -// To determine whether a program object has been flagged for deletion, call -// GetProgram with arguments program and GL.DELETE_STATUS. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. -// -// DeleteProgram is available in GL version 2.0 or greater. -func (gl *GL) DeleteProgram(program glbase.Program) { - C.gl2_0_glDeleteProgram(gl.funcs, C.GLuint(program)) -} - -// CreateShader creates an empty shader object and returns a non-zero value -// by which it can be referenced. A shader object is used to maintain the -// source code strings that define a shader. shaderType indicates the type of -// shader to be created. -// -// Two types of shaders are supported. A shader of type GL.VERTEX_SHADER is a -// shader that is intended to run on the programmable vertex processor and -// replace the fixed functionality vertex processing in OpenGL. A shader of -// type GL.FRAGMENT_SHADER is a shader that is intended to run on the -// programmable fragment processor and replace the fixed functionality -// fragment processing in OpenGL. -// -// When created, a shader object's GL.SHADER_TYPE parameter is set to either -// GL.VERTEX_SHADER or GL.FRAGMENT_SHADER, depending on the value of -// shaderType. -// -// Like display lists and texture objects, the name space for shader objects -// may be shared across a set of contexts, as long as the server sides of the -// contexts share the same address space. If the name space is shared across -// contexts, any attached objects and the data associated with those attached -// objects are shared as well. -// -// This function returns 0 if an error occurs creating the shader object. -// -// Error GL.INVALID_ENUM is generated if shaderType is not an accepted value. -// GL.INVALID_OPERATION is generated if CreateShader is executed between the -// execution of Begin and the corresponding execution of End. -// -// CreateShader is available in GL version 2.0 or greater. -func (gl *GL) CreateShader(gltype glbase.Enum) glbase.Shader { - glresult := C.gl2_0_glCreateShader(gl.funcs, C.GLenum(gltype)) - return glbase.Shader(glresult) -} - -// CreateProgram creates an empty program object and returns a non-zero -// value by which it can be referenced. A program object is an object to -// which shader objects can be attached. This provides a mechanism to specify -// the shader objects that will be linked to create a program. It also -// provides a means for checking the compatibility of the shaders that will -// be used to create a program (for instance, checking the compatibility -// between a vertex shader and a fragment shader). When no longer needed as -// part of a program object, shader objects can be detached. -// -// One or more executables are created in a program object by successfully -// attaching shader objects to it with AttachShader, successfully compiling -// the shader objects with CompileShader, and successfully linking the -// program object with LinkProgram. These executables are made part of -// current state when UseProgram is called. Program objects can be deleted -// by calling DeleteProgram. The memory associated with the program object -// will be deleted when it is no longer part of current rendering state for -// any context. -// -// Like display lists and texture objects, the name space for program objects -// may be shared across a set of contexts, as long as the server sides of the -// contexts share the same address space. If the name space is shared across -// contexts, any attached objects and the data associated with those attached -// objects are shared as well. -// -// Applications are responsible for providing the synchronization across API -// calls when objects are accessed from different execution threads. -// -// This function returns 0 if an error occurs creating the program object. -// -// Error GL.INVALID_OPERATION is generated if CreateProgram is executed -// between the execution of Begin and the corresponding execution of End. -// -// CreateProgram is available in GL version 2.0 or greater. -func (gl *GL) CreateProgram() glbase.Program { - glresult := C.gl2_0_glCreateProgram(gl.funcs) - return glbase.Program(glresult) -} - -// CompileShader compiles the source code strings that have been stored in -// the shader object specified by shader. -// -// The compilation status will be stored as part of the shader object's -// state. This value will be set to GL.TRUE if the shader was compiled without -// errors and is ready for use, and GL.FALSE otherwise. It can be queried by -// calling GetShaderiv with arguments shader and GL.COMPILE_STATUS. -// -// Compilation of a shader can fail for a number of reasons as specified by -// the OpenGL Shading Language Specification. Whether or not the compilation -// was successful, information about the compilation can be obtained from the -// shader object's information log by calling GetShaderInfoLog. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader is not a shader -// object. GL.INVALID_OPERATION is generated if CompileShader is executed -// between the execution of Begin and the corresponding execution of End. -// -// CompileShader is available in GL version 2.0 or greater. -func (gl *GL) CompileShader(shader glbase.Shader) { - C.gl2_0_glCompileShader(gl.funcs, C.GLuint(shader)) -} - -// BindAttribLocation associates a user-defined attribute variable in the program -// object specified by program with a generic vertex attribute index. The name -// parameter specifies the name of the vertex shader attribute variable to -// which index is to be bound. When program is made part of the current state, -// values provided via the generic vertex attribute index will modify the -// value of the user-defined attribute variable specified by name. -// -// If name refers to a matrix attribute variable, index refers to the first -// column of the matrix. Other matrix columns are then automatically bound to -// locations index+1 for a matrix of type mat2; index+1 and index+2 for a -// matrix of type mat3; and index+1, index+2, and index+3 for a matrix of -// type mat4. -// -// This command makes it possible for vertex shaders to use descriptive names -// for attribute variables rather than generic variables that are numbered -// from 0 to GL.MAX_VERTEX_ATTRIBS-1. The values sent to each generic -// attribute index are part of current state, just like standard vertex -// attributes such as color, normal, and vertex position. If a different -// program object is made current by calling UseProgram, the generic vertex -// attributes are tracked in such a way that the same values will be observed -// by attributes in the new program object that are also bound to index. -// -// Attribute variable name-to-generic attribute index bindings for a program -// object can be explicitly assigned at any time by calling -// BindAttribLocation. Attribute bindings do not go into effect until -// LinkProgram is called. After a program object has been linked -// successfully, the index values for generic attributes remain fixed (and -// their values can be queried) until the next link command occurs. -// -// Applications are not allowed to bind any of the standard OpenGL vertex -// attributes using this command, as they are bound automatically when -// needed. Any attribute binding that occurs after the program object has -// been linked will not take effect until the next time the program object is -// linked. -// -// If name was bound previously, that information is lost. Thus you cannot -// bind one user-defined attribute variable to multiple indices, but you can -// bind multiple user-defined attribute variables to the same index. -// -// Applications are allowed to bind more than one user-defined attribute -// variable to the same generic vertex attribute index. This is called -// aliasing, and it is allowed only if just one of the aliased attributes is -// active in the executable program, or if no path through the shader -// consumes more than one attribute of a set of attributes aliased to the -// same location. The compiler and linker are allowed to assume that no -// aliasing is done and are free to employ optimizations that work only in -// the absence of aliasing. OpenGL implementations are not required to do -// error checking to detect aliasing. Because there is no way to bind -// standard attributes, it is not possible to alias generic attributes with -// conventional ones (except for generic attribute 0). -// -// BindAttribLocation can be called before any vertex shader objects are -// bound to the specified program object. It is also permissible to bind a -// generic attribute index to an attribute variable name that is never used -// in a vertex shader. -// -// Active attributes that are not explicitly bound will be bound by the -// linker when LinkProgram is called. The locations assigned can be queried -// by calling GetAttribLocation. -// -// Error GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. -// GL.INVALID_OPERATION is generated if name starts with the reserved prefix "gl_". -// GL.INVALID_VALUE is generated if program is not a value generated by OpenGL. -// GL.INVALID_OPERATION is generated if program is not a program object. -// GL.INVALID_OPERATION is generated if BindAttribLocation is executed -// between the execution of Begin and the corresponding execution of End. -// -// BindAttribLocation is available in GL version 2.0 or greater. -func (gl *GL) BindAttribLocation(program glbase.Program, index glbase.Attrib, name string) { - name_cstr := C.CString(name) - C.gl2_0_glBindAttribLocation(gl.funcs, C.GLuint(program), C.GLuint(index), (*C.GLchar)(name_cstr)) - C.free(unsafe.Pointer(name_cstr)) -} - -// AttachShader attaches a shader object to a program object. -// -// In order to create an executable, there must be a way to specify the list -// of things that will be linked together. Program objects provide this -// mechanism. Shaders that are to be linked together in a program object must -// first be attached to that program object. This indicates that shader will -// be included in link operations that will be performed on program. -// -// All operations that can be performed on a shader object are valid whether -// or not the shader object is attached to a program object. It is -// permissible to attach a shader object to a program object before source -// code has been loaded into the shader object or before the shader object -// has been compiled. It is permissible to attach multiple shader objects of -// the same type because each may contain a portion of the complete shader. -// It is also permissible to attach a shader object to more than one program -// object. If a shader object is deleted while it is attached to a program -// object, it will be flagged for deletion, and deletion will not occur until -// DetachShader is called to detach it from all program objects to which it -// is attached. -// -// Error GL.INVALID_VALUE is generated if either program or shader is not a -// value generated by OpenGL. GL.INVALID_OPERATION is generated if program -// is not a program object. GL.INVALID_OPERATION is generated if shader is -// not a shader object. GL.INVALID_OPERATION is generated if shader is -// already attached to program. GL.INVALID_OPERATION is generated if -// AttachShader is executed between the execution of Begin and the -// corresponding execution of End. -// -// AttachShader is available in GL version 2.0 or greater. -func (gl *GL) AttachShader(program glbase.Program, shader glbase.Shader) { - C.gl2_0_glAttachShader(gl.funcs, C.GLuint(program), C.GLuint(shader)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glStencilMaskSeparate.xml -func (gl *GL) StencilMaskSeparate(face glbase.Enum, mask uint32) { - C.gl2_0_glStencilMaskSeparate(gl.funcs, C.GLenum(face), C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glStencilFuncSeparate.xml -func (gl *GL) StencilFuncSeparate(face, glfunc glbase.Enum, ref int32, mask uint32) { - C.gl2_0_glStencilFuncSeparate(gl.funcs, C.GLenum(face), C.GLenum(glfunc), C.GLint(ref), C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glStencilOpSeparate.xml -func (gl *GL) StencilOpSeparate(face, sfail, dpfail, dppass glbase.Enum) { - C.gl2_0_glStencilOpSeparate(gl.funcs, C.GLenum(face), C.GLenum(sfail), C.GLenum(dpfail), C.GLenum(dppass)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDrawBuffers.xml -func (gl *GL) DrawBuffers(n int, bufs []glbase.Enum) { - C.gl2_0_glDrawBuffers(gl.funcs, C.GLsizei(n), (*C.GLenum)(unsafe.Pointer(&bufs[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glBlendEquationSeparate.xml -func (gl *GL) BlendEquationSeparate(modeRGB, modeAlpha glbase.Enum) { - C.gl2_0_glBlendEquationSeparate(gl.funcs, C.GLenum(modeRGB), C.GLenum(modeAlpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTranslatef.xml -func (gl *GL) Translatef(x, y, z float32) { - C.gl2_0_glTranslatef(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTranslated.xml -func (gl *GL) Translated(x, y, z float64) { - C.gl2_0_glTranslated(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glScalef.xml -func (gl *GL) Scalef(x, y, z float32) { - C.gl2_0_glScalef(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glScaled.xml -func (gl *GL) Scaled(x, y, z float64) { - C.gl2_0_glScaled(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRotatef.xml -func (gl *GL) Rotatef(angle, x, y, z float32) { - C.gl2_0_glRotatef(gl.funcs, C.GLfloat(angle), C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRotated.xml -func (gl *GL) Rotated(angle, x, y, z float64) { - C.gl2_0_glRotated(gl.funcs, C.GLdouble(angle), C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPushMatrix.xml -func (gl *GL) PushMatrix() { - C.gl2_0_glPushMatrix(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPopMatrix.xml -func (gl *GL) PopMatrix() { - C.gl2_0_glPopMatrix(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glOrtho.xml -func (gl *GL) Ortho(left, right, bottom, top, zNear, zFar float64) { - C.gl2_0_glOrtho(gl.funcs, C.GLdouble(left), C.GLdouble(right), C.GLdouble(bottom), C.GLdouble(top), C.GLdouble(zNear), C.GLdouble(zFar)) -} - -// MultMatrixd multiplies the current matrix with the provided matrix. -// -// The m parameter must hold 16 consecutive elements of a 4x4 column-major matrix. -// -// The current matrix is determined by the current matrix mode (see -// MatrixMode). It is either the projection matrix, modelview matrix, or the -// texture matrix. -// -// For example, if the current matrix is C and the coordinates to be transformed -// are v = (v[0], v[1], v[2], v[3]), then the current transformation is C × v, or -// -// c[0] c[4] c[8] c[12] v[0] -// c[1] c[5] c[9] c[13] v[1] -// c[2] c[6] c[10] c[14] X v[2] -// c[3] c[7] c[11] c[15] v[3] -// -// Calling MultMatrix with an argument of m = m[0], m[1], ..., m[15] -// replaces the current transformation with (C X M) x v, or -// -// c[0] c[4] c[8] c[12] m[0] m[4] m[8] m[12] v[0] -// c[1] c[5] c[9] c[13] m[1] m[5] m[9] m[13] v[1] -// c[2] c[6] c[10] c[14] X m[2] m[6] m[10] m[14] X v[2] -// c[3] c[7] c[11] c[15] m[3] m[7] m[11] m[15] v[3] -// -// Where 'X' denotes matrix multiplication, and v is represented as a 4x1 matrix. -// -// While the elements of the matrix may be specified with single or double -// precision, the GL may store or operate on these values in less-than-single -// precision. -// -// In many computer languages, 4×4 arrays are represented in row-major -// order. The transformations just described represent these matrices in -// column-major order. The order of the multiplication is important. For -// example, if the current transformation is a rotation, and MultMatrix is -// called with a translation matrix, the translation is done directly on the -// coordinates to be transformed, while the rotation is done on the results -// of that translation. -// -// GL.INVALID_OPERATION is generated if MultMatrix is executed between the -// execution of Begin and the corresponding execution of End. -func (gl *GL) MultMatrixd(m []float64) { - if len(m) != 16 { - panic("parameter m must have length 16 for the 4x4 matrix") - } - C.gl2_0_glMultMatrixd(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&m[0]))) -} - -// MultMatrixf multiplies the current matrix with the provided matrix. -// -// The m parameter must hold 16 consecutive elements of a 4x4 column-major matrix. -// -// The current matrix is determined by the current matrix mode (see -// MatrixMode). It is either the projection matrix, modelview matrix, or the -// texture matrix. -// -// For example, if the current matrix is C and the coordinates to be transformed -// are v = (v[0], v[1], v[2], v[3]), then the current transformation is C × v, or -// -// c[0] c[4] c[8] c[12] v[0] -// c[1] c[5] c[9] c[13] v[1] -// c[2] c[6] c[10] c[14] X v[2] -// c[3] c[7] c[11] c[15] v[3] -// -// Calling MultMatrix with an argument of m = m[0], m[1], ..., m[15] -// replaces the current transformation with (C X M) x v, or -// -// c[0] c[4] c[8] c[12] m[0] m[4] m[8] m[12] v[0] -// c[1] c[5] c[9] c[13] m[1] m[5] m[9] m[13] v[1] -// c[2] c[6] c[10] c[14] X m[2] m[6] m[10] m[14] X v[2] -// c[3] c[7] c[11] c[15] m[3] m[7] m[11] m[15] v[3] -// -// Where 'X' denotes matrix multiplication, and v is represented as a 4x1 matrix. -// -// While the elements of the matrix may be specified with single or double -// precision, the GL may store or operate on these values in less-than-single -// precision. -// -// In many computer languages, 4×4 arrays are represented in row-major -// order. The transformations just described represent these matrices in -// column-major order. The order of the multiplication is important. For -// example, if the current transformation is a rotation, and MultMatrix is -// called with a translation matrix, the translation is done directly on the -// coordinates to be transformed, while the rotation is done on the results -// of that translation. -// -// GL.INVALID_OPERATION is generated if MultMatrix is executed between the -// execution of Begin and the corresponding execution of End. -func (gl *GL) MultMatrixf(m []float32) { - if len(m) != 16 { - panic("parameter m must have length 16 for the 4x4 matrix") - } - C.gl2_0_glMultMatrixf(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMatrixMode.xml -func (gl *GL) MatrixMode(mode glbase.Enum) { - C.gl2_0_glMatrixMode(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLoadMatrixd.xml -func (gl *GL) LoadMatrixd(m []float64) { - C.gl2_0_glLoadMatrixd(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLoadMatrixf.xml -func (gl *GL) LoadMatrixf(m []float32) { - C.gl2_0_glLoadMatrixf(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLoadIdentity.xml -func (gl *GL) LoadIdentity() { - C.gl2_0_glLoadIdentity(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFrustum.xml -func (gl *GL) Frustum(left, right, bottom, top, zNear, zFar float64) { - C.gl2_0_glFrustum(gl.funcs, C.GLdouble(left), C.GLdouble(right), C.GLdouble(bottom), C.GLdouble(top), C.GLdouble(zNear), C.GLdouble(zFar)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIsList.xml -func (gl *GL) IsList(list uint32) bool { - glresult := C.gl2_0_glIsList(gl.funcs, C.GLuint(list)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexGeniv.xml -func (gl *GL) GetTexGeniv(coord, pname glbase.Enum, params []int32) { - C.gl2_0_glGetTexGeniv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexGenfv.xml -func (gl *GL) GetTexGenfv(coord, pname glbase.Enum, params []float32) { - C.gl2_0_glGetTexGenfv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexGendv.xml -func (gl *GL) GetTexGendv(coord, pname glbase.Enum, params []float64) { - C.gl2_0_glGetTexGendv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexEnviv.xml -func (gl *GL) GetTexEnviv(target, pname glbase.Enum, params []int32) { - C.gl2_0_glGetTexEnviv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexEnvfv.xml -func (gl *GL) GetTexEnvfv(target, pname glbase.Enum, params []float32) { - C.gl2_0_glGetTexEnvfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetPolygonStipple.xml -func (gl *GL) GetPolygonStipple(mask []uint8) { - C.gl2_0_glGetPolygonStipple(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&mask[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetPixelMapusv.xml -func (gl *GL) GetPixelMapusv(glmap glbase.Enum, values []uint16) { - C.gl2_0_glGetPixelMapusv(gl.funcs, C.GLenum(glmap), (*C.GLushort)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetPixelMapuiv.xml -func (gl *GL) GetPixelMapuiv(glmap glbase.Enum, values []uint32) { - C.gl2_0_glGetPixelMapuiv(gl.funcs, C.GLenum(glmap), (*C.GLuint)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetPixelMapfv.xml -func (gl *GL) GetPixelMapfv(glmap glbase.Enum, values []float32) { - C.gl2_0_glGetPixelMapfv(gl.funcs, C.GLenum(glmap), (*C.GLfloat)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetMaterialiv.xml -func (gl *GL) GetMaterialiv(face, pname glbase.Enum, params []int32) { - C.gl2_0_glGetMaterialiv(gl.funcs, C.GLenum(face), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetMaterialfv.xml -func (gl *GL) GetMaterialfv(face, pname glbase.Enum, params []float32) { - C.gl2_0_glGetMaterialfv(gl.funcs, C.GLenum(face), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetMapiv.xml -func (gl *GL) GetMapiv(target, query glbase.Enum, v []int32) { - C.gl2_0_glGetMapiv(gl.funcs, C.GLenum(target), C.GLenum(query), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetMapfv.xml -func (gl *GL) GetMapfv(target, query glbase.Enum, v []float32) { - C.gl2_0_glGetMapfv(gl.funcs, C.GLenum(target), C.GLenum(query), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetMapdv.xml -func (gl *GL) GetMapdv(target, query glbase.Enum, v []float64) { - C.gl2_0_glGetMapdv(gl.funcs, C.GLenum(target), C.GLenum(query), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetLightiv.xml -func (gl *GL) GetLightiv(light, pname glbase.Enum, params []int32) { - C.gl2_0_glGetLightiv(gl.funcs, C.GLenum(light), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetLightfv.xml -func (gl *GL) GetLightfv(light, pname glbase.Enum, params []float32) { - C.gl2_0_glGetLightfv(gl.funcs, C.GLenum(light), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetClipPlane.xml -func (gl *GL) GetClipPlane(plane glbase.Enum, equation []float64) { - C.gl2_0_glGetClipPlane(gl.funcs, C.GLenum(plane), (*C.GLdouble)(unsafe.Pointer(&equation[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDrawPixels.xml -func (gl *GL) DrawPixels(width, height int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl2_0_glDrawPixels(gl.funcs, C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyPixels.xml -func (gl *GL) CopyPixels(x, y, width, height int, gltype glbase.Enum) { - C.gl2_0_glCopyPixels(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height), C.GLenum(gltype)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPixelMapusv.xml -func (gl *GL) PixelMapusv(glmap glbase.Enum, mapsize int32, values []uint16) { - C.gl2_0_glPixelMapusv(gl.funcs, C.GLenum(glmap), C.GLint(mapsize), (*C.GLushort)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPixelMapuiv.xml -func (gl *GL) PixelMapuiv(glmap glbase.Enum, mapsize int32, values []uint32) { - C.gl2_0_glPixelMapuiv(gl.funcs, C.GLenum(glmap), C.GLint(mapsize), (*C.GLuint)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPixelMapfv.xml -func (gl *GL) PixelMapfv(glmap glbase.Enum, mapsize int32, values []float32) { - C.gl2_0_glPixelMapfv(gl.funcs, C.GLenum(glmap), C.GLint(mapsize), (*C.GLfloat)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPixelTransferi.xml -func (gl *GL) PixelTransferi(pname glbase.Enum, param int32) { - C.gl2_0_glPixelTransferi(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPixelTransferf.xml -func (gl *GL) PixelTransferf(pname glbase.Enum, param float32) { - C.gl2_0_glPixelTransferf(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPixelZoom.xml -func (gl *GL) PixelZoom(xfactor, yfactor float32) { - C.gl2_0_glPixelZoom(gl.funcs, C.GLfloat(xfactor), C.GLfloat(yfactor)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glAlphaFunc.xml -func (gl *GL) AlphaFunc(glfunc glbase.Enum, ref float32) { - C.gl2_0_glAlphaFunc(gl.funcs, C.GLenum(glfunc), C.GLfloat(ref)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalPoint2.xml -func (gl *GL) EvalPoint2(i, j int32) { - C.gl2_0_glEvalPoint2(gl.funcs, C.GLint(i), C.GLint(j)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalMesh2.xml -func (gl *GL) EvalMesh2(mode glbase.Enum, i1, i2, j1, j2 int32) { - C.gl2_0_glEvalMesh2(gl.funcs, C.GLenum(mode), C.GLint(i1), C.GLint(i2), C.GLint(j1), C.GLint(j2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalPoint1.xml -func (gl *GL) EvalPoint1(i int32) { - C.gl2_0_glEvalPoint1(gl.funcs, C.GLint(i)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalMesh1.xml -func (gl *GL) EvalMesh1(mode glbase.Enum, i1, i2 int32) { - C.gl2_0_glEvalMesh1(gl.funcs, C.GLenum(mode), C.GLint(i1), C.GLint(i2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalCoord2fv.xml -func (gl *GL) EvalCoord2fv(u []float32) { - if len(u) != 2 { - panic("parameter u has incorrect length") - } - C.gl2_0_glEvalCoord2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&u[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalCoord2f.xml -func (gl *GL) EvalCoord2f(u, v float32) { - C.gl2_0_glEvalCoord2f(gl.funcs, C.GLfloat(u), C.GLfloat(v)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalCoord2dv.xml -func (gl *GL) EvalCoord2dv(u []float64) { - if len(u) != 2 { - panic("parameter u has incorrect length") - } - C.gl2_0_glEvalCoord2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&u[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalCoord2d.xml -func (gl *GL) EvalCoord2d(u, v float64) { - C.gl2_0_glEvalCoord2d(gl.funcs, C.GLdouble(u), C.GLdouble(v)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalCoord1fv.xml -func (gl *GL) EvalCoord1fv(u []float32) { - C.gl2_0_glEvalCoord1fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&u[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalCoord1f.xml -func (gl *GL) EvalCoord1f(u float32) { - C.gl2_0_glEvalCoord1f(gl.funcs, C.GLfloat(u)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalCoord1dv.xml -func (gl *GL) EvalCoord1dv(u []float64) { - C.gl2_0_glEvalCoord1dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&u[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalCoord1d.xml -func (gl *GL) EvalCoord1d(u float64) { - C.gl2_0_glEvalCoord1d(gl.funcs, C.GLdouble(u)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMapGrid2f.xml -func (gl *GL) MapGrid2f(un int32, u1, u2 float32, vn int32, v1, v2 float32) { - C.gl2_0_glMapGrid2f(gl.funcs, C.GLint(un), C.GLfloat(u1), C.GLfloat(u2), C.GLint(vn), C.GLfloat(v1), C.GLfloat(v2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMapGrid2d.xml -func (gl *GL) MapGrid2d(un int32, u1, u2 float64, vn int32, v1, v2 float64) { - C.gl2_0_glMapGrid2d(gl.funcs, C.GLint(un), C.GLdouble(u1), C.GLdouble(u2), C.GLint(vn), C.GLdouble(v1), C.GLdouble(v2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMapGrid1f.xml -func (gl *GL) MapGrid1f(un int32, u1, u2 float32) { - C.gl2_0_glMapGrid1f(gl.funcs, C.GLint(un), C.GLfloat(u1), C.GLfloat(u2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMapGrid1d.xml -func (gl *GL) MapGrid1d(un int32, u1, u2 float64) { - C.gl2_0_glMapGrid1d(gl.funcs, C.GLint(un), C.GLdouble(u1), C.GLdouble(u2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMap2f.xml -func (gl *GL) Map2f(target glbase.Enum, u1, u2 float32, ustride, uorder int32, v1, v2 float32, vstride, vorder int32, points []float32) { - C.gl2_0_glMap2f(gl.funcs, C.GLenum(target), C.GLfloat(u1), C.GLfloat(u2), C.GLint(ustride), C.GLint(uorder), C.GLfloat(v1), C.GLfloat(v2), C.GLint(vstride), C.GLint(vorder), (*C.GLfloat)(unsafe.Pointer(&points[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMap2d.xml -func (gl *GL) Map2d(target glbase.Enum, u1, u2 float64, ustride, uorder int32, v1, v2 float64, vstride, vorder int32, points []float64) { - C.gl2_0_glMap2d(gl.funcs, C.GLenum(target), C.GLdouble(u1), C.GLdouble(u2), C.GLint(ustride), C.GLint(uorder), C.GLdouble(v1), C.GLdouble(v2), C.GLint(vstride), C.GLint(vorder), (*C.GLdouble)(unsafe.Pointer(&points[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMap1f.xml -func (gl *GL) Map1f(target glbase.Enum, u1, u2 float32, stride, order int, points []float32) { - C.gl2_0_glMap1f(gl.funcs, C.GLenum(target), C.GLfloat(u1), C.GLfloat(u2), C.GLint(stride), C.GLint(order), (*C.GLfloat)(unsafe.Pointer(&points[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMap1d.xml -func (gl *GL) Map1d(target glbase.Enum, u1, u2 float64, stride, order int, points []float64) { - C.gl2_0_glMap1d(gl.funcs, C.GLenum(target), C.GLdouble(u1), C.GLdouble(u2), C.GLint(stride), C.GLint(order), (*C.GLdouble)(unsafe.Pointer(&points[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPushAttrib.xml -func (gl *GL) PushAttrib(mask glbase.Bitfield) { - C.gl2_0_glPushAttrib(gl.funcs, C.GLbitfield(mask)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPopAttrib.xml -func (gl *GL) PopAttrib() { - C.gl2_0_glPopAttrib(gl.funcs) -} - -// Accum executes an operation on the accumulation buffer. -// -// Parameter op defines the accumulation buffer operation (GL.ACCUM, GL.LOAD, -// GL.ADD, GL.MULT, or GL.RETURN) and specifies how the value parameter is -// used. -// -// The accumulation buffer is an extended-range color buffer. Images are not -// rendered into it. Rather, images rendered into one of the color buffers -// are added to the contents of the accumulation buffer after rendering. -// Effects such as antialiasing (of points, lines, and polygons), motion -// blur, and depth of field can be created by accumulating images generated -// with different transformation matrices. -// -// Each pixel in the accumulation buffer consists of red, green, blue, and -// alpha values. The number of bits per component in the accumulation buffer -// depends on the implementation. You can examine this number by calling -// GetIntegerv four times, with arguments GL.ACCUM_RED_BITS, -// GL.ACCUM_GREEN_BITS, GL.ACCUM_BLUE_BITS, and GL.ACCUM_ALPHA_BITS. -// Regardless of the number of bits per component, the range of values stored -// by each component is (-1, 1). The accumulation buffer pixels are mapped -// one-to-one with frame buffer pixels. -// -// All accumulation buffer operations are limited to the area of the current -// scissor box and applied identically to the red, green, blue, and alpha -// components of each pixel. If a Accum operation results in a value outside -// the range (-1, 1), the contents of an accumulation buffer pixel component -// are undefined. -// -// The operations are as follows: -// -// GL.ACCUM -// Obtains R, G, B, and A values from the buffer currently selected for -// reading (see ReadBuffer). Each component value is divided by 2 n - -// 1 , where n is the number of bits allocated to each color component -// in the currently selected buffer. The result is a floating-point -// value in the range 0 1 , which is multiplied by value and added to -// the corresponding pixel component in the accumulation buffer, -// thereby updating the accumulation buffer. -// -// GL.LOAD -// Similar to GL.ACCUM, except that the current value in the -// accumulation buffer is not used in the calculation of the new value. -// That is, the R, G, B, and A values from the currently selected -// buffer are divided by 2 n - 1 , multiplied by value, and then stored -// in the corresponding accumulation buffer cell, overwriting the -// current value. -// -// GL.ADD -// Adds value to each R, G, B, and A in the accumulation buffer. -// -// GL.MULT -// Multiplies each R, G, B, and A in the accumulation buffer by value -// and returns the scaled component to its corresponding accumulation -// buffer location. -// -// GL.RETURN -// Transfers accumulation buffer values to the color buffer or buffers -// currently selected for writing. Each R, G, B, and A component is -// multiplied by value, then multiplied by 2 n - 1 , clamped to the -// range 0 2 n - 1 , and stored in the corresponding display buffer -// cell. The only fragment operations that are applied to this transfer -// are pixel ownership, scissor, dithering, and color writemasks. -// -// To clear the accumulation buffer, call ClearAccum with R, G, B, and A -// values to set it to, then call Clear with the accumulation buffer -// enabled. -// -// Error GL.INVALID_ENUM is generated if op is not an accepted value. -// GL.INVALID_OPERATION is generated if there is no accumulation buffer. -// GL.INVALID_OPERATION is generated if Accum is executed between the -// execution of Begin and the corresponding execution of End. -func (gl *GL) Accum(op glbase.Enum, value float32) { - C.gl2_0_glAccum(gl.funcs, C.GLenum(op), C.GLfloat(value)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexMask.xml -func (gl *GL) IndexMask(mask uint32) { - C.gl2_0_glIndexMask(gl.funcs, C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glClearIndex.xml -func (gl *GL) ClearIndex(c float32) { - C.gl2_0_glClearIndex(gl.funcs, C.GLfloat(c)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glClearAccum.xml -func (gl *GL) ClearAccum(red, green, blue, alpha float32) { - C.gl2_0_glClearAccum(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPushName.xml -func (gl *GL) PushName(name uint32) { - C.gl2_0_glPushName(gl.funcs, C.GLuint(name)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPopName.xml -func (gl *GL) PopName() { - C.gl2_0_glPopName(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPassThrough.xml -func (gl *GL) PassThrough(token float32) { - C.gl2_0_glPassThrough(gl.funcs, C.GLfloat(token)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLoadName.xml -func (gl *GL) LoadName(name uint32) { - C.gl2_0_glLoadName(gl.funcs, C.GLuint(name)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glInitNames.xml -func (gl *GL) InitNames() { - C.gl2_0_glInitNames(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRenderMode.xml -func (gl *GL) RenderMode(mode glbase.Enum) int32 { - glresult := C.gl2_0_glRenderMode(gl.funcs, C.GLenum(mode)) - return int32(glresult) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSelectBuffer.xml -func (gl *GL) SelectBuffer(size int, buffer []glbase.Buffer) { - C.gl2_0_glSelectBuffer(gl.funcs, C.GLsizei(size), (*C.GLuint)(unsafe.Pointer(&buffer[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFeedbackBuffer.xml -func (gl *GL) FeedbackBuffer(size int, gltype glbase.Enum, buffer []float32) { - C.gl2_0_glFeedbackBuffer(gl.funcs, C.GLsizei(size), C.GLenum(gltype), (*C.GLfloat)(unsafe.Pointer(&buffer[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexGeniv.xml -func (gl *GL) TexGeniv(coord, pname glbase.Enum, params []int32) { - C.gl2_0_glTexGeniv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexGeni.xml -func (gl *GL) TexGeni(coord, pname glbase.Enum, param int32) { - C.gl2_0_glTexGeni(gl.funcs, C.GLenum(coord), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexGenfv.xml -func (gl *GL) TexGenfv(coord, pname glbase.Enum, params []float32) { - C.gl2_0_glTexGenfv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexGenf.xml -func (gl *GL) TexGenf(coord, pname glbase.Enum, param float32) { - C.gl2_0_glTexGenf(gl.funcs, C.GLenum(coord), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexGendv.xml -func (gl *GL) TexGendv(coord, pname glbase.Enum, params []float64) { - C.gl2_0_glTexGendv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexGend.xml -func (gl *GL) TexGend(coord, pname glbase.Enum, param float64) { - C.gl2_0_glTexGend(gl.funcs, C.GLenum(coord), C.GLenum(pname), C.GLdouble(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexEnviv.xml -func (gl *GL) TexEnviv(target, pname glbase.Enum, params []int32) { - C.gl2_0_glTexEnviv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexEnvi.xml -func (gl *GL) TexEnvi(target, pname glbase.Enum, param int32) { - C.gl2_0_glTexEnvi(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexEnvfv.xml -func (gl *GL) TexEnvfv(target, pname glbase.Enum, params []float32) { - C.gl2_0_glTexEnvfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexEnvf.xml -func (gl *GL) TexEnvf(target, pname glbase.Enum, param float32) { - C.gl2_0_glTexEnvf(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glShadeModel.xml -func (gl *GL) ShadeModel(mode glbase.Enum) { - C.gl2_0_glShadeModel(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPolygonStipple.xml -func (gl *GL) PolygonStipple(mask []uint8) { - C.gl2_0_glPolygonStipple(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&mask[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMaterialiv.xml -func (gl *GL) Materialiv(face, pname glbase.Enum, params []int32) { - C.gl2_0_glMaterialiv(gl.funcs, C.GLenum(face), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMateriali.xml -func (gl *GL) Materiali(face, pname glbase.Enum, param int32) { - C.gl2_0_glMateriali(gl.funcs, C.GLenum(face), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMaterialfv.xml -func (gl *GL) Materialfv(face, pname glbase.Enum, params []float32) { - C.gl2_0_glMaterialfv(gl.funcs, C.GLenum(face), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMaterialf.xml -func (gl *GL) Materialf(face, pname glbase.Enum, param float32) { - C.gl2_0_glMaterialf(gl.funcs, C.GLenum(face), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLineStipple.xml -func (gl *GL) LineStipple(factor int32, pattern uint16) { - C.gl2_0_glLineStipple(gl.funcs, C.GLint(factor), C.GLushort(pattern)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLightModeliv.xml -func (gl *GL) LightModeliv(pname glbase.Enum, params []int32) { - C.gl2_0_glLightModeliv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLightModeli.xml -func (gl *GL) LightModeli(pname glbase.Enum, param int32) { - C.gl2_0_glLightModeli(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLightModelfv.xml -func (gl *GL) LightModelfv(pname glbase.Enum, params []float32) { - C.gl2_0_glLightModelfv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLightModelf.xml -func (gl *GL) LightModelf(pname glbase.Enum, param float32) { - C.gl2_0_glLightModelf(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLightiv.xml -func (gl *GL) Lightiv(light, pname glbase.Enum, params []int32) { - C.gl2_0_glLightiv(gl.funcs, C.GLenum(light), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLighti.xml -func (gl *GL) Lighti(light, pname glbase.Enum, param int32) { - C.gl2_0_glLighti(gl.funcs, C.GLenum(light), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLightfv.xml -func (gl *GL) Lightfv(light, pname glbase.Enum, params []float32) { - C.gl2_0_glLightfv(gl.funcs, C.GLenum(light), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLightf.xml -func (gl *GL) Lightf(light, pname glbase.Enum, param float32) { - C.gl2_0_glLightf(gl.funcs, C.GLenum(light), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFogiv.xml -func (gl *GL) Fogiv(pname glbase.Enum, params []int32) { - C.gl2_0_glFogiv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFogi.xml -func (gl *GL) Fogi(pname glbase.Enum, param int32) { - C.gl2_0_glFogi(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFogfv.xml -func (gl *GL) Fogfv(pname glbase.Enum, params []float32) { - C.gl2_0_glFogfv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFogf.xml -func (gl *GL) Fogf(pname glbase.Enum, param float32) { - C.gl2_0_glFogf(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColorMaterial.xml -func (gl *GL) ColorMaterial(face, mode glbase.Enum) { - C.gl2_0_glColorMaterial(gl.funcs, C.GLenum(face), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glClipPlane.xml -func (gl *GL) ClipPlane(plane glbase.Enum, equation []float64) { - C.gl2_0_glClipPlane(gl.funcs, C.GLenum(plane), (*C.GLdouble)(unsafe.Pointer(&equation[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex4sv.xml -func (gl *GL) Vertex4sv(v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl2_0_glVertex4sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex4s.xml -func (gl *GL) Vertex4s(x, y, z, w int16) { - C.gl2_0_glVertex4s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z), C.GLshort(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex4iv.xml -func (gl *GL) Vertex4iv(v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl2_0_glVertex4iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex4i.xml -func (gl *GL) Vertex4i(x, y, z, w int) { - C.gl2_0_glVertex4i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z), C.GLint(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex4fv.xml -func (gl *GL) Vertex4fv(v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl2_0_glVertex4fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex4f.xml -func (gl *GL) Vertex4f(x, y, z, w float32) { - C.gl2_0_glVertex4f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z), C.GLfloat(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex4dv.xml -func (gl *GL) Vertex4dv(v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl2_0_glVertex4dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex4d.xml -func (gl *GL) Vertex4d(x, y, z, w float64) { - C.gl2_0_glVertex4d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z), C.GLdouble(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex3sv.xml -func (gl *GL) Vertex3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_0_glVertex3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex3s.xml -func (gl *GL) Vertex3s(x, y, z int16) { - C.gl2_0_glVertex3s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex3iv.xml -func (gl *GL) Vertex3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_0_glVertex3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex3i.xml -func (gl *GL) Vertex3i(x, y, z int) { - C.gl2_0_glVertex3i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex3fv.xml -func (gl *GL) Vertex3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_0_glVertex3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex3f.xml -func (gl *GL) Vertex3f(x, y, z float32) { - C.gl2_0_glVertex3f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex3dv.xml -func (gl *GL) Vertex3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_0_glVertex3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex3d.xml -func (gl *GL) Vertex3d(x, y, z float64) { - C.gl2_0_glVertex3d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex2sv.xml -func (gl *GL) Vertex2sv(v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl2_0_glVertex2sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex2s.xml -func (gl *GL) Vertex2s(x, y int16) { - C.gl2_0_glVertex2s(gl.funcs, C.GLshort(x), C.GLshort(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex2iv.xml -func (gl *GL) Vertex2iv(v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl2_0_glVertex2iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex2i.xml -func (gl *GL) Vertex2i(x, y int) { - C.gl2_0_glVertex2i(gl.funcs, C.GLint(x), C.GLint(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex2fv.xml -func (gl *GL) Vertex2fv(v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl2_0_glVertex2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex2f.xml -func (gl *GL) Vertex2f(x, y float32) { - C.gl2_0_glVertex2f(gl.funcs, C.GLfloat(x), C.GLfloat(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex2dv.xml -func (gl *GL) Vertex2dv(v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl2_0_glVertex2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex2d.xml -func (gl *GL) Vertex2d(x, y float64) { - C.gl2_0_glVertex2d(gl.funcs, C.GLdouble(x), C.GLdouble(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord4sv.xml -func (gl *GL) TexCoord4sv(v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl2_0_glTexCoord4sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord4s.xml -func (gl *GL) TexCoord4s(s, t, r, q int16) { - C.gl2_0_glTexCoord4s(gl.funcs, C.GLshort(s), C.GLshort(t), C.GLshort(r), C.GLshort(q)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord4iv.xml -func (gl *GL) TexCoord4iv(v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl2_0_glTexCoord4iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord4i.xml -func (gl *GL) TexCoord4i(s, t, r, q int32) { - C.gl2_0_glTexCoord4i(gl.funcs, C.GLint(s), C.GLint(t), C.GLint(r), C.GLint(q)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord4fv.xml -func (gl *GL) TexCoord4fv(v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl2_0_glTexCoord4fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord4f.xml -func (gl *GL) TexCoord4f(s, t, r, q float32) { - C.gl2_0_glTexCoord4f(gl.funcs, C.GLfloat(s), C.GLfloat(t), C.GLfloat(r), C.GLfloat(q)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord4dv.xml -func (gl *GL) TexCoord4dv(v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl2_0_glTexCoord4dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord4d.xml -func (gl *GL) TexCoord4d(s, t, r, q float64) { - C.gl2_0_glTexCoord4d(gl.funcs, C.GLdouble(s), C.GLdouble(t), C.GLdouble(r), C.GLdouble(q)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord3sv.xml -func (gl *GL) TexCoord3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_0_glTexCoord3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord3s.xml -func (gl *GL) TexCoord3s(s, t, r int16) { - C.gl2_0_glTexCoord3s(gl.funcs, C.GLshort(s), C.GLshort(t), C.GLshort(r)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord3iv.xml -func (gl *GL) TexCoord3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_0_glTexCoord3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord3i.xml -func (gl *GL) TexCoord3i(s, t, r int32) { - C.gl2_0_glTexCoord3i(gl.funcs, C.GLint(s), C.GLint(t), C.GLint(r)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord3fv.xml -func (gl *GL) TexCoord3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_0_glTexCoord3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord3f.xml -func (gl *GL) TexCoord3f(s, t, r float32) { - C.gl2_0_glTexCoord3f(gl.funcs, C.GLfloat(s), C.GLfloat(t), C.GLfloat(r)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord3dv.xml -func (gl *GL) TexCoord3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_0_glTexCoord3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord3d.xml -func (gl *GL) TexCoord3d(s, t, r float64) { - C.gl2_0_glTexCoord3d(gl.funcs, C.GLdouble(s), C.GLdouble(t), C.GLdouble(r)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord2sv.xml -func (gl *GL) TexCoord2sv(v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl2_0_glTexCoord2sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord2s.xml -func (gl *GL) TexCoord2s(s, t int16) { - C.gl2_0_glTexCoord2s(gl.funcs, C.GLshort(s), C.GLshort(t)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord2iv.xml -func (gl *GL) TexCoord2iv(v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl2_0_glTexCoord2iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord2i.xml -func (gl *GL) TexCoord2i(s, t int32) { - C.gl2_0_glTexCoord2i(gl.funcs, C.GLint(s), C.GLint(t)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord2fv.xml -func (gl *GL) TexCoord2fv(v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl2_0_glTexCoord2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord2f.xml -func (gl *GL) TexCoord2f(s, t float32) { - C.gl2_0_glTexCoord2f(gl.funcs, C.GLfloat(s), C.GLfloat(t)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord2dv.xml -func (gl *GL) TexCoord2dv(v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl2_0_glTexCoord2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord2d.xml -func (gl *GL) TexCoord2d(s, t float64) { - C.gl2_0_glTexCoord2d(gl.funcs, C.GLdouble(s), C.GLdouble(t)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord1sv.xml -func (gl *GL) TexCoord1sv(v []int16) { - C.gl2_0_glTexCoord1sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord1s.xml -func (gl *GL) TexCoord1s(s int16) { - C.gl2_0_glTexCoord1s(gl.funcs, C.GLshort(s)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord1iv.xml -func (gl *GL) TexCoord1iv(v []int32) { - C.gl2_0_glTexCoord1iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord1i.xml -func (gl *GL) TexCoord1i(s int32) { - C.gl2_0_glTexCoord1i(gl.funcs, C.GLint(s)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord1fv.xml -func (gl *GL) TexCoord1fv(v []float32) { - C.gl2_0_glTexCoord1fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord1f.xml -func (gl *GL) TexCoord1f(s float32) { - C.gl2_0_glTexCoord1f(gl.funcs, C.GLfloat(s)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord1dv.xml -func (gl *GL) TexCoord1dv(v []float64) { - C.gl2_0_glTexCoord1dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord1d.xml -func (gl *GL) TexCoord1d(s float64) { - C.gl2_0_glTexCoord1d(gl.funcs, C.GLdouble(s)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRectsv.xml -func (gl *GL) Rectsv(v1, v2 []int16) { - C.gl2_0_glRectsv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v1[0])), (*C.GLshort)(unsafe.Pointer(&v2[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRects.xml -func (gl *GL) Rects(x1, y1, x2, y2 int16) { - C.gl2_0_glRects(gl.funcs, C.GLshort(x1), C.GLshort(y1), C.GLshort(x2), C.GLshort(y2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRectiv.xml -func (gl *GL) Rectiv(v1, v2 []int32) { - C.gl2_0_glRectiv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v1[0])), (*C.GLint)(unsafe.Pointer(&v2[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRecti.xml -func (gl *GL) Recti(x1, y1, x2, y2 int32) { - C.gl2_0_glRecti(gl.funcs, C.GLint(x1), C.GLint(y1), C.GLint(x2), C.GLint(y2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRectfv.xml -func (gl *GL) Rectfv(v1, v2 []float32) { - C.gl2_0_glRectfv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v1[0])), (*C.GLfloat)(unsafe.Pointer(&v2[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRectf.xml -func (gl *GL) Rectf(x1, y1, x2, y2 float32) { - C.gl2_0_glRectf(gl.funcs, C.GLfloat(x1), C.GLfloat(y1), C.GLfloat(x2), C.GLfloat(y2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRectdv.xml -func (gl *GL) Rectdv(v1, v2 []float64) { - C.gl2_0_glRectdv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v1[0])), (*C.GLdouble)(unsafe.Pointer(&v2[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRectd.xml -func (gl *GL) Rectd(x1, y1, x2, y2 float64) { - C.gl2_0_glRectd(gl.funcs, C.GLdouble(x1), C.GLdouble(y1), C.GLdouble(x2), C.GLdouble(y2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos4sv.xml -func (gl *GL) RasterPos4sv(v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl2_0_glRasterPos4sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos4s.xml -func (gl *GL) RasterPos4s(x, y, z, w int16) { - C.gl2_0_glRasterPos4s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z), C.GLshort(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos4iv.xml -func (gl *GL) RasterPos4iv(v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl2_0_glRasterPos4iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos4i.xml -func (gl *GL) RasterPos4i(x, y, z, w int) { - C.gl2_0_glRasterPos4i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z), C.GLint(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos4fv.xml -func (gl *GL) RasterPos4fv(v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl2_0_glRasterPos4fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos4f.xml -func (gl *GL) RasterPos4f(x, y, z, w float32) { - C.gl2_0_glRasterPos4f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z), C.GLfloat(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos4dv.xml -func (gl *GL) RasterPos4dv(v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl2_0_glRasterPos4dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos4d.xml -func (gl *GL) RasterPos4d(x, y, z, w float64) { - C.gl2_0_glRasterPos4d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z), C.GLdouble(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos3sv.xml -func (gl *GL) RasterPos3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_0_glRasterPos3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos3s.xml -func (gl *GL) RasterPos3s(x, y, z int16) { - C.gl2_0_glRasterPos3s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos3iv.xml -func (gl *GL) RasterPos3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_0_glRasterPos3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos3i.xml -func (gl *GL) RasterPos3i(x, y, z int) { - C.gl2_0_glRasterPos3i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos3fv.xml -func (gl *GL) RasterPos3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_0_glRasterPos3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos3f.xml -func (gl *GL) RasterPos3f(x, y, z float32) { - C.gl2_0_glRasterPos3f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos3dv.xml -func (gl *GL) RasterPos3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_0_glRasterPos3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos3d.xml -func (gl *GL) RasterPos3d(x, y, z float64) { - C.gl2_0_glRasterPos3d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos2sv.xml -func (gl *GL) RasterPos2sv(v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl2_0_glRasterPos2sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos2s.xml -func (gl *GL) RasterPos2s(x, y int16) { - C.gl2_0_glRasterPos2s(gl.funcs, C.GLshort(x), C.GLshort(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos2iv.xml -func (gl *GL) RasterPos2iv(v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl2_0_glRasterPos2iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos2i.xml -func (gl *GL) RasterPos2i(x, y int) { - C.gl2_0_glRasterPos2i(gl.funcs, C.GLint(x), C.GLint(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos2fv.xml -func (gl *GL) RasterPos2fv(v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl2_0_glRasterPos2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos2f.xml -func (gl *GL) RasterPos2f(x, y float32) { - C.gl2_0_glRasterPos2f(gl.funcs, C.GLfloat(x), C.GLfloat(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos2dv.xml -func (gl *GL) RasterPos2dv(v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl2_0_glRasterPos2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos2d.xml -func (gl *GL) RasterPos2d(x, y float64) { - C.gl2_0_glRasterPos2d(gl.funcs, C.GLdouble(x), C.GLdouble(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3sv.xml -func (gl *GL) Normal3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_0_glNormal3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3s.xml -func (gl *GL) Normal3s(nx, ny, nz int16) { - C.gl2_0_glNormal3s(gl.funcs, C.GLshort(nx), C.GLshort(ny), C.GLshort(nz)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3iv.xml -func (gl *GL) Normal3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_0_glNormal3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3i.xml -func (gl *GL) Normal3i(nx, ny, nz int32) { - C.gl2_0_glNormal3i(gl.funcs, C.GLint(nx), C.GLint(ny), C.GLint(nz)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3fv.xml -func (gl *GL) Normal3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_0_glNormal3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3f.xml -func (gl *GL) Normal3f(nx, ny, nz float32) { - C.gl2_0_glNormal3f(gl.funcs, C.GLfloat(nx), C.GLfloat(ny), C.GLfloat(nz)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3dv.xml -func (gl *GL) Normal3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_0_glNormal3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3d.xml -func (gl *GL) Normal3d(nx, ny, nz float64) { - C.gl2_0_glNormal3d(gl.funcs, C.GLdouble(nx), C.GLdouble(ny), C.GLdouble(nz)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3bv.xml -func (gl *GL) Normal3bv(v []byte) { - C.gl2_0_glNormal3bv(gl.funcs, (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3b.xml -func (gl *GL) Normal3b(nx, ny, nz byte) { - C.gl2_0_glNormal3b(gl.funcs, C.GLbyte(nx), C.GLbyte(ny), C.GLbyte(nz)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexsv.xml -func (gl *GL) Indexsv(c []int16) { - C.gl2_0_glIndexsv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexs.xml -func (gl *GL) Indexs(c int16) { - C.gl2_0_glIndexs(gl.funcs, C.GLshort(c)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexiv.xml -func (gl *GL) Indexiv(c []int32) { - C.gl2_0_glIndexiv(gl.funcs, (*C.GLint)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexi.xml -func (gl *GL) Indexi(c int32) { - C.gl2_0_glIndexi(gl.funcs, C.GLint(c)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexfv.xml -func (gl *GL) Indexfv(c []float32) { - C.gl2_0_glIndexfv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexf.xml -func (gl *GL) Indexf(c float32) { - C.gl2_0_glIndexf(gl.funcs, C.GLfloat(c)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexdv.xml -func (gl *GL) Indexdv(c []float64) { - C.gl2_0_glIndexdv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexd.xml -func (gl *GL) Indexd(c float64) { - C.gl2_0_glIndexd(gl.funcs, C.GLdouble(c)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEnd.xml -func (gl *GL) End() { - C.gl2_0_glEnd(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEdgeFlagv.xml -func (gl *GL) EdgeFlagv(flag []bool) { - C.gl2_0_glEdgeFlagv(gl.funcs, (*C.GLboolean)(unsafe.Pointer(&flag[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEdgeFlag.xml -func (gl *GL) EdgeFlag(flag bool) { - C.gl2_0_glEdgeFlag(gl.funcs, *(*C.GLboolean)(unsafe.Pointer(&flag))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4usv.xml -func (gl *GL) Color4usv(v []uint16) { - C.gl2_0_glColor4usv(gl.funcs, (*C.GLushort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4us.xml -func (gl *GL) Color4us(red, green, blue, alpha uint16) { - C.gl2_0_glColor4us(gl.funcs, C.GLushort(red), C.GLushort(green), C.GLushort(blue), C.GLushort(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4uiv.xml -func (gl *GL) Color4uiv(v []uint32) { - C.gl2_0_glColor4uiv(gl.funcs, (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4ui.xml -func (gl *GL) Color4ui(red, green, blue, alpha uint32) { - C.gl2_0_glColor4ui(gl.funcs, C.GLuint(red), C.GLuint(green), C.GLuint(blue), C.GLuint(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4ubv.xml -func (gl *GL) Color4ubv(v []uint8) { - C.gl2_0_glColor4ubv(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4ub.xml -func (gl *GL) Color4ub(red, green, blue, alpha uint8) { - C.gl2_0_glColor4ub(gl.funcs, C.GLubyte(red), C.GLubyte(green), C.GLubyte(blue), C.GLubyte(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4sv.xml -func (gl *GL) Color4sv(v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl2_0_glColor4sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4s.xml -func (gl *GL) Color4s(red, green, blue, alpha int16) { - C.gl2_0_glColor4s(gl.funcs, C.GLshort(red), C.GLshort(green), C.GLshort(blue), C.GLshort(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4iv.xml -func (gl *GL) Color4iv(v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl2_0_glColor4iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4i.xml -func (gl *GL) Color4i(red, green, blue, alpha int32) { - C.gl2_0_glColor4i(gl.funcs, C.GLint(red), C.GLint(green), C.GLint(blue), C.GLint(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4fv.xml -func (gl *GL) Color4fv(v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl2_0_glColor4fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4f.xml -func (gl *GL) Color4f(red, green, blue, alpha float32) { - C.gl2_0_glColor4f(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4dv.xml -func (gl *GL) Color4dv(v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl2_0_glColor4dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4d.xml -func (gl *GL) Color4d(red, green, blue, alpha float64) { - C.gl2_0_glColor4d(gl.funcs, C.GLdouble(red), C.GLdouble(green), C.GLdouble(blue), C.GLdouble(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4bv.xml -func (gl *GL) Color4bv(v []byte) { - C.gl2_0_glColor4bv(gl.funcs, (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4b.xml -func (gl *GL) Color4b(red, green, blue, alpha byte) { - C.gl2_0_glColor4b(gl.funcs, C.GLbyte(red), C.GLbyte(green), C.GLbyte(blue), C.GLbyte(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3usv.xml -func (gl *GL) Color3usv(v []uint16) { - C.gl2_0_glColor3usv(gl.funcs, (*C.GLushort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3us.xml -func (gl *GL) Color3us(red, green, blue uint16) { - C.gl2_0_glColor3us(gl.funcs, C.GLushort(red), C.GLushort(green), C.GLushort(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3uiv.xml -func (gl *GL) Color3uiv(v []uint32) { - C.gl2_0_glColor3uiv(gl.funcs, (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3ui.xml -func (gl *GL) Color3ui(red, green, blue uint32) { - C.gl2_0_glColor3ui(gl.funcs, C.GLuint(red), C.GLuint(green), C.GLuint(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3ubv.xml -func (gl *GL) Color3ubv(v []uint8) { - C.gl2_0_glColor3ubv(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3ub.xml -func (gl *GL) Color3ub(red, green, blue uint8) { - C.gl2_0_glColor3ub(gl.funcs, C.GLubyte(red), C.GLubyte(green), C.GLubyte(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3sv.xml -func (gl *GL) Color3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_0_glColor3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3s.xml -func (gl *GL) Color3s(red, green, blue int16) { - C.gl2_0_glColor3s(gl.funcs, C.GLshort(red), C.GLshort(green), C.GLshort(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3iv.xml -func (gl *GL) Color3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_0_glColor3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3i.xml -func (gl *GL) Color3i(red, green, blue int32) { - C.gl2_0_glColor3i(gl.funcs, C.GLint(red), C.GLint(green), C.GLint(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3fv.xml -func (gl *GL) Color3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_0_glColor3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3f.xml -func (gl *GL) Color3f(red, green, blue float32) { - C.gl2_0_glColor3f(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3dv.xml -func (gl *GL) Color3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_0_glColor3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3d.xml -func (gl *GL) Color3d(red, green, blue float64) { - C.gl2_0_glColor3d(gl.funcs, C.GLdouble(red), C.GLdouble(green), C.GLdouble(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3bv.xml -func (gl *GL) Color3bv(v []byte) { - C.gl2_0_glColor3bv(gl.funcs, (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3b.xml -func (gl *GL) Color3b(red, green, blue byte) { - C.gl2_0_glColor3b(gl.funcs, C.GLbyte(red), C.GLbyte(green), C.GLbyte(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glBitmap.xml -func (gl *GL) Bitmap(width, height int, xorig, yorig, xmove, ymove float32, bitmap []uint8) { - C.gl2_0_glBitmap(gl.funcs, C.GLsizei(width), C.GLsizei(height), C.GLfloat(xorig), C.GLfloat(yorig), C.GLfloat(xmove), C.GLfloat(ymove), (*C.GLubyte)(unsafe.Pointer(&bitmap[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glBegin.xml -func (gl *GL) Begin(mode glbase.Enum) { - C.gl2_0_glBegin(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glListBase.xml -func (gl *GL) ListBase(base uint32) { - C.gl2_0_glListBase(gl.funcs, C.GLuint(base)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGenLists.xml -func (gl *GL) GenLists(range_ int32) uint32 { - glresult := C.gl2_0_glGenLists(gl.funcs, C.GLsizei(range_)) - return uint32(glresult) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDeleteLists.xml -func (gl *GL) DeleteLists(list uint32, range_ int32) { - C.gl2_0_glDeleteLists(gl.funcs, C.GLuint(list), C.GLsizei(range_)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCallLists.xml -func (gl *GL) CallLists(n int, gltype glbase.Enum, lists interface{}) { - var lists_ptr unsafe.Pointer - var lists_v = reflect.ValueOf(lists) - if lists != nil && lists_v.Kind() != reflect.Slice { - panic("parameter lists must be a slice") - } - if lists != nil { - lists_ptr = unsafe.Pointer(lists_v.Index(0).Addr().Pointer()) - } - C.gl2_0_glCallLists(gl.funcs, C.GLsizei(n), C.GLenum(gltype), lists_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCallList.xml -func (gl *GL) CallList(list uint32) { - C.gl2_0_glCallList(gl.funcs, C.GLuint(list)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEndList.xml -func (gl *GL) EndList() { - C.gl2_0_glEndList(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNewList.xml -func (gl *GL) NewList(list uint32, mode glbase.Enum) { - C.gl2_0_glNewList(gl.funcs, C.GLuint(list), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPushClientAttrib.xml -func (gl *GL) PushClientAttrib(mask glbase.Bitfield) { - C.gl2_0_glPushClientAttrib(gl.funcs, C.GLbitfield(mask)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPopClientAttrib.xml -func (gl *GL) PopClientAttrib() { - C.gl2_0_glPopClientAttrib(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPrioritizeTextures.xml -func (gl *GL) PrioritizeTextures(n int, textures []glbase.Texture, priorities []float32) { - C.gl2_0_glPrioritizeTextures(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0])), (*C.GLfloat)(unsafe.Pointer(&priorities[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glAreTexturesResident.xml -func (gl *GL) AreTexturesResident(n int, textures []glbase.Texture, residences []bool) bool { - glresult := C.gl2_0_glAreTexturesResident(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0])), (*C.GLboolean)(unsafe.Pointer(&residences[0]))) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexPointer.xml -func (gl *GL) VertexPointer(size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl2_0_glVertexPointer(gl.funcs, C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoordPointer.xml -func (gl *GL) TexCoordPointer(size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl2_0_glTexCoordPointer(gl.funcs, C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormalPointer.xml -func (gl *GL) NormalPointer(gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl2_0_glNormalPointer(gl.funcs, C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glInterleavedArrays.xml -func (gl *GL) InterleavedArrays(format glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl2_0_glInterleavedArrays(gl.funcs, C.GLenum(format), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexPointer.xml -func (gl *GL) IndexPointer(gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl2_0_glIndexPointer(gl.funcs, C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEnableClientState.xml -func (gl *GL) EnableClientState(array glbase.Enum) { - C.gl2_0_glEnableClientState(gl.funcs, C.GLenum(array)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEdgeFlagPointer.xml -func (gl *GL) EdgeFlagPointer(stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl2_0_glEdgeFlagPointer(gl.funcs, C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDisableClientState.xml -func (gl *GL) DisableClientState(array glbase.Enum) { - C.gl2_0_glDisableClientState(gl.funcs, C.GLenum(array)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColorPointer.xml -func (gl *GL) ColorPointer(size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl2_0_glColorPointer(gl.funcs, C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glArrayElement.xml -func (gl *GL) ArrayElement(i int32) { - C.gl2_0_glArrayElement(gl.funcs, C.GLint(i)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glResetMinmax.xml -func (gl *GL) ResetMinmax(target glbase.Enum) { - C.gl2_0_glResetMinmax(gl.funcs, C.GLenum(target)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glResetHistogram.xml -func (gl *GL) ResetHistogram(target glbase.Enum) { - C.gl2_0_glResetHistogram(gl.funcs, C.GLenum(target)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMinmax.xml -func (gl *GL) Minmax(target, internalFormat glbase.Enum, sink bool) { - C.gl2_0_glMinmax(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), *(*C.GLboolean)(unsafe.Pointer(&sink))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glHistogram.xml -func (gl *GL) Histogram(target glbase.Enum, width int, internalFormat glbase.Enum, sink bool) { - C.gl2_0_glHistogram(gl.funcs, C.GLenum(target), C.GLsizei(width), C.GLenum(internalFormat), *(*C.GLboolean)(unsafe.Pointer(&sink))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetMinmaxParameteriv.xml -func (gl *GL) GetMinmaxParameteriv(target, pname glbase.Enum, params []int32) { - C.gl2_0_glGetMinmaxParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetMinmaxParameterfv.xml -func (gl *GL) GetMinmaxParameterfv(target, pname glbase.Enum, params []float32) { - C.gl2_0_glGetMinmaxParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetMinmax.xml -func (gl *GL) GetMinmax(target glbase.Enum, reset bool, format, gltype glbase.Enum, values interface{}) { - var values_ptr unsafe.Pointer - var values_v = reflect.ValueOf(values) - if values != nil && values_v.Kind() != reflect.Slice { - panic("parameter values must be a slice") - } - if values != nil { - values_ptr = unsafe.Pointer(values_v.Index(0).Addr().Pointer()) - } - C.gl2_0_glGetMinmax(gl.funcs, C.GLenum(target), *(*C.GLboolean)(unsafe.Pointer(&reset)), C.GLenum(format), C.GLenum(gltype), values_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetHistogramParameteriv.xml -func (gl *GL) GetHistogramParameteriv(target, pname glbase.Enum, params []int32) { - C.gl2_0_glGetHistogramParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetHistogramParameterfv.xml -func (gl *GL) GetHistogramParameterfv(target, pname glbase.Enum, params []float32) { - C.gl2_0_glGetHistogramParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetHistogram.xml -func (gl *GL) GetHistogram(target glbase.Enum, reset bool, format, gltype glbase.Enum, values interface{}) { - var values_ptr unsafe.Pointer - var values_v = reflect.ValueOf(values) - if values != nil && values_v.Kind() != reflect.Slice { - panic("parameter values must be a slice") - } - if values != nil { - values_ptr = unsafe.Pointer(values_v.Index(0).Addr().Pointer()) - } - C.gl2_0_glGetHistogram(gl.funcs, C.GLenum(target), *(*C.GLboolean)(unsafe.Pointer(&reset)), C.GLenum(format), C.GLenum(gltype), values_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSeparableFilter2D.xml -func (gl *GL) SeparableFilter2D(target, internalFormat glbase.Enum, width, height int, format, gltype glbase.Enum, row, column interface{}) { - var row_ptr unsafe.Pointer - var row_v = reflect.ValueOf(row) - if row != nil && row_v.Kind() != reflect.Slice { - panic("parameter row must be a slice") - } - if row != nil { - row_ptr = unsafe.Pointer(row_v.Index(0).Addr().Pointer()) - } - var column_ptr unsafe.Pointer - var column_v = reflect.ValueOf(column) - if column != nil && column_v.Kind() != reflect.Slice { - panic("parameter column must be a slice") - } - if column != nil { - column_ptr = unsafe.Pointer(column_v.Index(0).Addr().Pointer()) - } - C.gl2_0_glSeparableFilter2D(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), row_ptr, column_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetSeparableFilter.xml -func (gl *GL) GetSeparableFilter(target, format, gltype glbase.Enum, row, column, span interface{}) { - var row_ptr unsafe.Pointer - var row_v = reflect.ValueOf(row) - if row != nil && row_v.Kind() != reflect.Slice { - panic("parameter row must be a slice") - } - if row != nil { - row_ptr = unsafe.Pointer(row_v.Index(0).Addr().Pointer()) - } - var column_ptr unsafe.Pointer - var column_v = reflect.ValueOf(column) - if column != nil && column_v.Kind() != reflect.Slice { - panic("parameter column must be a slice") - } - if column != nil { - column_ptr = unsafe.Pointer(column_v.Index(0).Addr().Pointer()) - } - var span_ptr unsafe.Pointer - var span_v = reflect.ValueOf(span) - if span != nil && span_v.Kind() != reflect.Slice { - panic("parameter span must be a slice") - } - if span != nil { - span_ptr = unsafe.Pointer(span_v.Index(0).Addr().Pointer()) - } - C.gl2_0_glGetSeparableFilter(gl.funcs, C.GLenum(target), C.GLenum(format), C.GLenum(gltype), row_ptr, column_ptr, span_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetConvolutionParameteriv.xml -func (gl *GL) GetConvolutionParameteriv(target, pname glbase.Enum, params []int32) { - C.gl2_0_glGetConvolutionParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetConvolutionParameterfv.xml -func (gl *GL) GetConvolutionParameterfv(target, pname glbase.Enum, params []float32) { - C.gl2_0_glGetConvolutionParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetConvolutionFilter.xml -func (gl *GL) GetConvolutionFilter(target, format, gltype glbase.Enum, image interface{}) { - var image_ptr unsafe.Pointer - var image_v = reflect.ValueOf(image) - if image != nil && image_v.Kind() != reflect.Slice { - panic("parameter image must be a slice") - } - if image != nil { - image_ptr = unsafe.Pointer(image_v.Index(0).Addr().Pointer()) - } - C.gl2_0_glGetConvolutionFilter(gl.funcs, C.GLenum(target), C.GLenum(format), C.GLenum(gltype), image_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyConvolutionFilter2D.xml -func (gl *GL) CopyConvolutionFilter2D(target, internalFormat glbase.Enum, x, y, width, height int) { - C.gl2_0_glCopyConvolutionFilter2D(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyConvolutionFilter1D.xml -func (gl *GL) CopyConvolutionFilter1D(target, internalFormat glbase.Enum, x, y, width int) { - C.gl2_0_glCopyConvolutionFilter1D(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glConvolutionParameteriv.xml -func (gl *GL) ConvolutionParameteriv(target, pname glbase.Enum, params []int32) { - C.gl2_0_glConvolutionParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glConvolutionParameteri.xml -func (gl *GL) ConvolutionParameteri(target, pname glbase.Enum, params int32) { - C.gl2_0_glConvolutionParameteri(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLint(params)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glConvolutionParameterfv.xml -func (gl *GL) ConvolutionParameterfv(target, pname glbase.Enum, params []float32) { - C.gl2_0_glConvolutionParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glConvolutionParameterf.xml -func (gl *GL) ConvolutionParameterf(target, pname glbase.Enum, params float32) { - C.gl2_0_glConvolutionParameterf(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLfloat(params)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glConvolutionFilter2D.xml -func (gl *GL) ConvolutionFilter2D(target, internalFormat glbase.Enum, width, height int, format, gltype glbase.Enum, image interface{}) { - var image_ptr unsafe.Pointer - var image_v = reflect.ValueOf(image) - if image != nil && image_v.Kind() != reflect.Slice { - panic("parameter image must be a slice") - } - if image != nil { - image_ptr = unsafe.Pointer(image_v.Index(0).Addr().Pointer()) - } - C.gl2_0_glConvolutionFilter2D(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), image_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glConvolutionFilter1D.xml -func (gl *GL) ConvolutionFilter1D(target, internalFormat glbase.Enum, width int, format, gltype glbase.Enum, image interface{}) { - var image_ptr unsafe.Pointer - var image_v = reflect.ValueOf(image) - if image != nil && image_v.Kind() != reflect.Slice { - panic("parameter image must be a slice") - } - if image != nil { - image_ptr = unsafe.Pointer(image_v.Index(0).Addr().Pointer()) - } - C.gl2_0_glConvolutionFilter1D(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLsizei(width), C.GLenum(format), C.GLenum(gltype), image_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyColorSubTable.xml -func (gl *GL) CopyColorSubTable(target glbase.Enum, start int32, x, y, width int) { - C.gl2_0_glCopyColorSubTable(gl.funcs, C.GLenum(target), C.GLsizei(start), C.GLint(x), C.GLint(y), C.GLsizei(width)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColorSubTable.xml -func (gl *GL) ColorSubTable(target glbase.Enum, start int32, count int, format, gltype glbase.Enum, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl2_0_glColorSubTable(gl.funcs, C.GLenum(target), C.GLsizei(start), C.GLsizei(count), C.GLenum(format), C.GLenum(gltype), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetColorTableParameteriv.xml -func (gl *GL) GetColorTableParameteriv(target, pname glbase.Enum, params []int32) { - C.gl2_0_glGetColorTableParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetColorTableParameterfv.xml -func (gl *GL) GetColorTableParameterfv(target, pname glbase.Enum, params []float32) { - C.gl2_0_glGetColorTableParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetColorTable.xml -func (gl *GL) GetColorTable(target, format, gltype glbase.Enum, table interface{}) { - var table_ptr unsafe.Pointer - var table_v = reflect.ValueOf(table) - if table != nil && table_v.Kind() != reflect.Slice { - panic("parameter table must be a slice") - } - if table != nil { - table_ptr = unsafe.Pointer(table_v.Index(0).Addr().Pointer()) - } - C.gl2_0_glGetColorTable(gl.funcs, C.GLenum(target), C.GLenum(format), C.GLenum(gltype), table_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyColorTable.xml -func (gl *GL) CopyColorTable(target, internalFormat glbase.Enum, x, y, width int) { - C.gl2_0_glCopyColorTable(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColorTableParameteriv.xml -func (gl *GL) ColorTableParameteriv(target, pname glbase.Enum, params []int32) { - C.gl2_0_glColorTableParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColorTableParameterfv.xml -func (gl *GL) ColorTableParameterfv(target, pname glbase.Enum, params []float32) { - C.gl2_0_glColorTableParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColorTable.xml -func (gl *GL) ColorTable(target, internalFormat glbase.Enum, width int, format, gltype glbase.Enum, table interface{}) { - var table_ptr unsafe.Pointer - var table_v = reflect.ValueOf(table) - if table != nil && table_v.Kind() != reflect.Slice { - panic("parameter table must be a slice") - } - if table != nil { - table_ptr = unsafe.Pointer(table_v.Index(0).Addr().Pointer()) - } - C.gl2_0_glColorTable(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLsizei(width), C.GLenum(format), C.GLenum(gltype), table_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultTransposeMatrixd.xml -func (gl *GL) MultTransposeMatrixd(m []float64) { - C.gl2_0_glMultTransposeMatrixd(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultTransposeMatrixf.xml -func (gl *GL) MultTransposeMatrixf(m []float32) { - C.gl2_0_glMultTransposeMatrixf(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLoadTransposeMatrixd.xml -func (gl *GL) LoadTransposeMatrixd(m []float64) { - C.gl2_0_glLoadTransposeMatrixd(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLoadTransposeMatrixf.xml -func (gl *GL) LoadTransposeMatrixf(m []float32) { - C.gl2_0_glLoadTransposeMatrixf(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord4sv.xml -func (gl *GL) MultiTexCoord4sv(target glbase.Enum, v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl2_0_glMultiTexCoord4sv(gl.funcs, C.GLenum(target), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord4s.xml -func (gl *GL) MultiTexCoord4s(target glbase.Enum, s, t, r, q int16) { - C.gl2_0_glMultiTexCoord4s(gl.funcs, C.GLenum(target), C.GLshort(s), C.GLshort(t), C.GLshort(r), C.GLshort(q)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord4iv.xml -func (gl *GL) MultiTexCoord4iv(target glbase.Enum, v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl2_0_glMultiTexCoord4iv(gl.funcs, C.GLenum(target), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord4i.xml -func (gl *GL) MultiTexCoord4i(target glbase.Enum, s, t, r, q int32) { - C.gl2_0_glMultiTexCoord4i(gl.funcs, C.GLenum(target), C.GLint(s), C.GLint(t), C.GLint(r), C.GLint(q)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord4fv.xml -func (gl *GL) MultiTexCoord4fv(target glbase.Enum, v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl2_0_glMultiTexCoord4fv(gl.funcs, C.GLenum(target), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord4f.xml -func (gl *GL) MultiTexCoord4f(target glbase.Enum, s, t, r, q float32) { - C.gl2_0_glMultiTexCoord4f(gl.funcs, C.GLenum(target), C.GLfloat(s), C.GLfloat(t), C.GLfloat(r), C.GLfloat(q)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord4dv.xml -func (gl *GL) MultiTexCoord4dv(target glbase.Enum, v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl2_0_glMultiTexCoord4dv(gl.funcs, C.GLenum(target), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord4d.xml -func (gl *GL) MultiTexCoord4d(target glbase.Enum, s, t, r, q float64) { - C.gl2_0_glMultiTexCoord4d(gl.funcs, C.GLenum(target), C.GLdouble(s), C.GLdouble(t), C.GLdouble(r), C.GLdouble(q)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord3sv.xml -func (gl *GL) MultiTexCoord3sv(target glbase.Enum, v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_0_glMultiTexCoord3sv(gl.funcs, C.GLenum(target), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord3s.xml -func (gl *GL) MultiTexCoord3s(target glbase.Enum, s, t, r int16) { - C.gl2_0_glMultiTexCoord3s(gl.funcs, C.GLenum(target), C.GLshort(s), C.GLshort(t), C.GLshort(r)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord3iv.xml -func (gl *GL) MultiTexCoord3iv(target glbase.Enum, v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_0_glMultiTexCoord3iv(gl.funcs, C.GLenum(target), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord3i.xml -func (gl *GL) MultiTexCoord3i(target glbase.Enum, s, t, r int32) { - C.gl2_0_glMultiTexCoord3i(gl.funcs, C.GLenum(target), C.GLint(s), C.GLint(t), C.GLint(r)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord3fv.xml -func (gl *GL) MultiTexCoord3fv(target glbase.Enum, v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_0_glMultiTexCoord3fv(gl.funcs, C.GLenum(target), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord3f.xml -func (gl *GL) MultiTexCoord3f(target glbase.Enum, s, t, r float32) { - C.gl2_0_glMultiTexCoord3f(gl.funcs, C.GLenum(target), C.GLfloat(s), C.GLfloat(t), C.GLfloat(r)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord3dv.xml -func (gl *GL) MultiTexCoord3dv(target glbase.Enum, v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_0_glMultiTexCoord3dv(gl.funcs, C.GLenum(target), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord3d.xml -func (gl *GL) MultiTexCoord3d(target glbase.Enum, s, t, r float64) { - C.gl2_0_glMultiTexCoord3d(gl.funcs, C.GLenum(target), C.GLdouble(s), C.GLdouble(t), C.GLdouble(r)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord2sv.xml -func (gl *GL) MultiTexCoord2sv(target glbase.Enum, v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl2_0_glMultiTexCoord2sv(gl.funcs, C.GLenum(target), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord2s.xml -func (gl *GL) MultiTexCoord2s(target glbase.Enum, s, t int16) { - C.gl2_0_glMultiTexCoord2s(gl.funcs, C.GLenum(target), C.GLshort(s), C.GLshort(t)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord2iv.xml -func (gl *GL) MultiTexCoord2iv(target glbase.Enum, v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl2_0_glMultiTexCoord2iv(gl.funcs, C.GLenum(target), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord2i.xml -func (gl *GL) MultiTexCoord2i(target glbase.Enum, s, t int32) { - C.gl2_0_glMultiTexCoord2i(gl.funcs, C.GLenum(target), C.GLint(s), C.GLint(t)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord2fv.xml -func (gl *GL) MultiTexCoord2fv(target glbase.Enum, v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl2_0_glMultiTexCoord2fv(gl.funcs, C.GLenum(target), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord2f.xml -func (gl *GL) MultiTexCoord2f(target glbase.Enum, s, t float32) { - C.gl2_0_glMultiTexCoord2f(gl.funcs, C.GLenum(target), C.GLfloat(s), C.GLfloat(t)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord2dv.xml -func (gl *GL) MultiTexCoord2dv(target glbase.Enum, v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl2_0_glMultiTexCoord2dv(gl.funcs, C.GLenum(target), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord2d.xml -func (gl *GL) MultiTexCoord2d(target glbase.Enum, s, t float64) { - C.gl2_0_glMultiTexCoord2d(gl.funcs, C.GLenum(target), C.GLdouble(s), C.GLdouble(t)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord1sv.xml -func (gl *GL) MultiTexCoord1sv(target glbase.Enum, v []int16) { - C.gl2_0_glMultiTexCoord1sv(gl.funcs, C.GLenum(target), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord1s.xml -func (gl *GL) MultiTexCoord1s(target glbase.Enum, s int16) { - C.gl2_0_glMultiTexCoord1s(gl.funcs, C.GLenum(target), C.GLshort(s)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord1iv.xml -func (gl *GL) MultiTexCoord1iv(target glbase.Enum, v []int32) { - C.gl2_0_glMultiTexCoord1iv(gl.funcs, C.GLenum(target), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord1i.xml -func (gl *GL) MultiTexCoord1i(target glbase.Enum, s int32) { - C.gl2_0_glMultiTexCoord1i(gl.funcs, C.GLenum(target), C.GLint(s)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord1fv.xml -func (gl *GL) MultiTexCoord1fv(target glbase.Enum, v []float32) { - C.gl2_0_glMultiTexCoord1fv(gl.funcs, C.GLenum(target), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord1f.xml -func (gl *GL) MultiTexCoord1f(target glbase.Enum, s float32) { - C.gl2_0_glMultiTexCoord1f(gl.funcs, C.GLenum(target), C.GLfloat(s)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord1dv.xml -func (gl *GL) MultiTexCoord1dv(target glbase.Enum, v []float64) { - C.gl2_0_glMultiTexCoord1dv(gl.funcs, C.GLenum(target), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord1d.xml -func (gl *GL) MultiTexCoord1d(target glbase.Enum, s float64) { - C.gl2_0_glMultiTexCoord1d(gl.funcs, C.GLenum(target), C.GLdouble(s)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glClientActiveTexture.xml -func (gl *GL) ClientActiveTexture(texture glbase.Enum) { - C.gl2_0_glClientActiveTexture(gl.funcs, C.GLenum(texture)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glWindowPos3sv.xml -func (gl *GL) WindowPos3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_0_glWindowPos3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glWindowPos3s.xml -func (gl *GL) WindowPos3s(x, y, z int16) { - C.gl2_0_glWindowPos3s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glWindowPos3iv.xml -func (gl *GL) WindowPos3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_0_glWindowPos3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glWindowPos3i.xml -func (gl *GL) WindowPos3i(x, y, z int) { - C.gl2_0_glWindowPos3i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glWindowPos3fv.xml -func (gl *GL) WindowPos3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_0_glWindowPos3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glWindowPos3f.xml -func (gl *GL) WindowPos3f(x, y, z float32) { - C.gl2_0_glWindowPos3f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glWindowPos3dv.xml -func (gl *GL) WindowPos3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_0_glWindowPos3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glWindowPos3d.xml -func (gl *GL) WindowPos3d(x, y, z float64) { - C.gl2_0_glWindowPos3d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glWindowPos2sv.xml -func (gl *GL) WindowPos2sv(v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl2_0_glWindowPos2sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glWindowPos2s.xml -func (gl *GL) WindowPos2s(x, y int16) { - C.gl2_0_glWindowPos2s(gl.funcs, C.GLshort(x), C.GLshort(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glWindowPos2iv.xml -func (gl *GL) WindowPos2iv(v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl2_0_glWindowPos2iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glWindowPos2i.xml -func (gl *GL) WindowPos2i(x, y int) { - C.gl2_0_glWindowPos2i(gl.funcs, C.GLint(x), C.GLint(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glWindowPos2fv.xml -func (gl *GL) WindowPos2fv(v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl2_0_glWindowPos2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glWindowPos2f.xml -func (gl *GL) WindowPos2f(x, y float32) { - C.gl2_0_glWindowPos2f(gl.funcs, C.GLfloat(x), C.GLfloat(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glWindowPos2dv.xml -func (gl *GL) WindowPos2dv(v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl2_0_glWindowPos2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glWindowPos2d.xml -func (gl *GL) WindowPos2d(x, y float64) { - C.gl2_0_glWindowPos2d(gl.funcs, C.GLdouble(x), C.GLdouble(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColorPointer.xml -func (gl *GL) SecondaryColorPointer(size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl2_0_glSecondaryColorPointer(gl.funcs, C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColor3usv.xml -func (gl *GL) SecondaryColor3usv(v []uint16) { - C.gl2_0_glSecondaryColor3usv(gl.funcs, (*C.GLushort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColor3us.xml -func (gl *GL) SecondaryColor3us(red, green, blue uint16) { - C.gl2_0_glSecondaryColor3us(gl.funcs, C.GLushort(red), C.GLushort(green), C.GLushort(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColor3uiv.xml -func (gl *GL) SecondaryColor3uiv(v []uint32) { - C.gl2_0_glSecondaryColor3uiv(gl.funcs, (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColor3ui.xml -func (gl *GL) SecondaryColor3ui(red, green, blue uint32) { - C.gl2_0_glSecondaryColor3ui(gl.funcs, C.GLuint(red), C.GLuint(green), C.GLuint(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColor3ubv.xml -func (gl *GL) SecondaryColor3ubv(v []uint8) { - C.gl2_0_glSecondaryColor3ubv(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColor3ub.xml -func (gl *GL) SecondaryColor3ub(red, green, blue uint8) { - C.gl2_0_glSecondaryColor3ub(gl.funcs, C.GLubyte(red), C.GLubyte(green), C.GLubyte(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColor3sv.xml -func (gl *GL) SecondaryColor3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_0_glSecondaryColor3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColor3s.xml -func (gl *GL) SecondaryColor3s(red, green, blue int16) { - C.gl2_0_glSecondaryColor3s(gl.funcs, C.GLshort(red), C.GLshort(green), C.GLshort(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColor3iv.xml -func (gl *GL) SecondaryColor3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_0_glSecondaryColor3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColor3i.xml -func (gl *GL) SecondaryColor3i(red, green, blue int32) { - C.gl2_0_glSecondaryColor3i(gl.funcs, C.GLint(red), C.GLint(green), C.GLint(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColor3fv.xml -func (gl *GL) SecondaryColor3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_0_glSecondaryColor3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColor3f.xml -func (gl *GL) SecondaryColor3f(red, green, blue float32) { - C.gl2_0_glSecondaryColor3f(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColor3dv.xml -func (gl *GL) SecondaryColor3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_0_glSecondaryColor3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColor3d.xml -func (gl *GL) SecondaryColor3d(red, green, blue float64) { - C.gl2_0_glSecondaryColor3d(gl.funcs, C.GLdouble(red), C.GLdouble(green), C.GLdouble(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColor3bv.xml -func (gl *GL) SecondaryColor3bv(v []byte) { - C.gl2_0_glSecondaryColor3bv(gl.funcs, (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColor3b.xml -func (gl *GL) SecondaryColor3b(red, green, blue byte) { - C.gl2_0_glSecondaryColor3b(gl.funcs, C.GLbyte(red), C.GLbyte(green), C.GLbyte(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFogCoordPointer.xml -func (gl *GL) FogCoordPointer(gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl2_0_glFogCoordPointer(gl.funcs, C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFogCoorddv.xml -func (gl *GL) FogCoorddv(coord []float64) { - C.gl2_0_glFogCoorddv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&coord[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFogCoordd.xml -func (gl *GL) FogCoordd(coord float64) { - C.gl2_0_glFogCoordd(gl.funcs, C.GLdouble(coord)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFogCoordfv.xml -func (gl *GL) FogCoordfv(coord []float32) { - C.gl2_0_glFogCoordfv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&coord[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFogCoordf.xml -func (gl *GL) FogCoordf(coord float32) { - C.gl2_0_glFogCoordf(gl.funcs, C.GLfloat(coord)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib4usv.xml -func (gl *GL) VertexAttrib4usv(index glbase.Attrib, v []uint16) { - C.gl2_0_glVertexAttrib4usv(gl.funcs, C.GLuint(index), (*C.GLushort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib4uiv.xml -func (gl *GL) VertexAttrib4uiv(index glbase.Attrib, v []uint32) { - C.gl2_0_glVertexAttrib4uiv(gl.funcs, C.GLuint(index), (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib4ubv.xml -func (gl *GL) VertexAttrib4ubv(index glbase.Attrib, v []uint8) { - C.gl2_0_glVertexAttrib4ubv(gl.funcs, C.GLuint(index), (*C.GLubyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib4sv.xml -func (gl *GL) VertexAttrib4sv(index glbase.Attrib, v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl2_0_glVertexAttrib4sv(gl.funcs, C.GLuint(index), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib4s.xml -func (gl *GL) VertexAttrib4s(index glbase.Attrib, x, y, z, w int16) { - C.gl2_0_glVertexAttrib4s(gl.funcs, C.GLuint(index), C.GLshort(x), C.GLshort(y), C.GLshort(z), C.GLshort(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib4iv.xml -func (gl *GL) VertexAttrib4iv(index glbase.Attrib, v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl2_0_glVertexAttrib4iv(gl.funcs, C.GLuint(index), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib4fv.xml -func (gl *GL) VertexAttrib4fv(index glbase.Attrib, v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl2_0_glVertexAttrib4fv(gl.funcs, C.GLuint(index), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib4f.xml -func (gl *GL) VertexAttrib4f(index glbase.Attrib, x, y, z, w float32) { - C.gl2_0_glVertexAttrib4f(gl.funcs, C.GLuint(index), C.GLfloat(x), C.GLfloat(y), C.GLfloat(z), C.GLfloat(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib4dv.xml -func (gl *GL) VertexAttrib4dv(index glbase.Attrib, v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl2_0_glVertexAttrib4dv(gl.funcs, C.GLuint(index), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib4d.xml -func (gl *GL) VertexAttrib4d(index glbase.Attrib, x, y, z, w float64) { - C.gl2_0_glVertexAttrib4d(gl.funcs, C.GLuint(index), C.GLdouble(x), C.GLdouble(y), C.GLdouble(z), C.GLdouble(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib4bv.xml -func (gl *GL) VertexAttrib4bv(index glbase.Attrib, v []byte) { - C.gl2_0_glVertexAttrib4bv(gl.funcs, C.GLuint(index), (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib4Nusv.xml -func (gl *GL) VertexAttrib4Nusv(index glbase.Attrib, v []uint16) { - C.gl2_0_glVertexAttrib4Nusv(gl.funcs, C.GLuint(index), (*C.GLushort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib4Nuiv.xml -func (gl *GL) VertexAttrib4Nuiv(index glbase.Attrib, v []uint32) { - C.gl2_0_glVertexAttrib4Nuiv(gl.funcs, C.GLuint(index), (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib4Nubv.xml -func (gl *GL) VertexAttrib4Nubv(index glbase.Attrib, v []uint8) { - C.gl2_0_glVertexAttrib4Nubv(gl.funcs, C.GLuint(index), (*C.GLubyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib4Nub.xml -func (gl *GL) VertexAttrib4Nub(index glbase.Attrib, x, y, z, w uint8) { - C.gl2_0_glVertexAttrib4Nub(gl.funcs, C.GLuint(index), C.GLubyte(x), C.GLubyte(y), C.GLubyte(z), C.GLubyte(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib4Nsv.xml -func (gl *GL) VertexAttrib4Nsv(index glbase.Attrib, v []int16) { - C.gl2_0_glVertexAttrib4Nsv(gl.funcs, C.GLuint(index), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib4Niv.xml -func (gl *GL) VertexAttrib4Niv(index glbase.Attrib, v []int32) { - C.gl2_0_glVertexAttrib4Niv(gl.funcs, C.GLuint(index), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib4Nbv.xml -func (gl *GL) VertexAttrib4Nbv(index glbase.Attrib, v []byte) { - C.gl2_0_glVertexAttrib4Nbv(gl.funcs, C.GLuint(index), (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib3sv.xml -func (gl *GL) VertexAttrib3sv(index glbase.Attrib, v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_0_glVertexAttrib3sv(gl.funcs, C.GLuint(index), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib3s.xml -func (gl *GL) VertexAttrib3s(index glbase.Attrib, x, y, z int16) { - C.gl2_0_glVertexAttrib3s(gl.funcs, C.GLuint(index), C.GLshort(x), C.GLshort(y), C.GLshort(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib3fv.xml -func (gl *GL) VertexAttrib3fv(index glbase.Attrib, v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_0_glVertexAttrib3fv(gl.funcs, C.GLuint(index), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib3f.xml -func (gl *GL) VertexAttrib3f(index glbase.Attrib, x, y, z float32) { - C.gl2_0_glVertexAttrib3f(gl.funcs, C.GLuint(index), C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib3dv.xml -func (gl *GL) VertexAttrib3dv(index glbase.Attrib, v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_0_glVertexAttrib3dv(gl.funcs, C.GLuint(index), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib3d.xml -func (gl *GL) VertexAttrib3d(index glbase.Attrib, x, y, z float64) { - C.gl2_0_glVertexAttrib3d(gl.funcs, C.GLuint(index), C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib2sv.xml -func (gl *GL) VertexAttrib2sv(index glbase.Attrib, v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl2_0_glVertexAttrib2sv(gl.funcs, C.GLuint(index), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib2s.xml -func (gl *GL) VertexAttrib2s(index glbase.Attrib, x, y int16) { - C.gl2_0_glVertexAttrib2s(gl.funcs, C.GLuint(index), C.GLshort(x), C.GLshort(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib2fv.xml -func (gl *GL) VertexAttrib2fv(index glbase.Attrib, v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl2_0_glVertexAttrib2fv(gl.funcs, C.GLuint(index), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib2f.xml -func (gl *GL) VertexAttrib2f(index glbase.Attrib, x, y float32) { - C.gl2_0_glVertexAttrib2f(gl.funcs, C.GLuint(index), C.GLfloat(x), C.GLfloat(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib2dv.xml -func (gl *GL) VertexAttrib2dv(index glbase.Attrib, v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl2_0_glVertexAttrib2dv(gl.funcs, C.GLuint(index), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib2d.xml -func (gl *GL) VertexAttrib2d(index glbase.Attrib, x, y float64) { - C.gl2_0_glVertexAttrib2d(gl.funcs, C.GLuint(index), C.GLdouble(x), C.GLdouble(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib1sv.xml -func (gl *GL) VertexAttrib1sv(index glbase.Attrib, v []int16) { - C.gl2_0_glVertexAttrib1sv(gl.funcs, C.GLuint(index), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib1s.xml -func (gl *GL) VertexAttrib1s(index glbase.Attrib, x int16) { - C.gl2_0_glVertexAttrib1s(gl.funcs, C.GLuint(index), C.GLshort(x)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib1fv.xml -func (gl *GL) VertexAttrib1fv(index glbase.Attrib, v []float32) { - C.gl2_0_glVertexAttrib1fv(gl.funcs, C.GLuint(index), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib1f.xml -func (gl *GL) VertexAttrib1f(index glbase.Attrib, x float32) { - C.gl2_0_glVertexAttrib1f(gl.funcs, C.GLuint(index), C.GLfloat(x)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib1dv.xml -func (gl *GL) VertexAttrib1dv(index glbase.Attrib, v []float64) { - C.gl2_0_glVertexAttrib1dv(gl.funcs, C.GLuint(index), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib1d.xml -func (gl *GL) VertexAttrib1d(index glbase.Attrib, x float64) { - C.gl2_0_glVertexAttrib1d(gl.funcs, C.GLuint(index), C.GLdouble(x)) -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/2.1/funcs.cpp b/Godeps/_workspace/src/github.com/obscuren/qml/gl/2.1/funcs.cpp deleted file mode 100644 index 6235d6e817..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/2.1/funcs.cpp +++ /dev/null @@ -1,3480 +0,0 @@ - -// ** file automatically generated by glgen -- do not edit manually ** - -#include -#include - -#include "funcs.h" - -void *gl2_1_funcs() { - QOpenGLFunctions_2_1* funcs = QOpenGLContext::currentContext()->versionFunctions(); - if (!funcs) { - return 0; - } - funcs->initializeOpenGLFunctions(); - return funcs; -} - - -void gl2_1_glViewport(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glViewport(x, y, width, height); -} - -void gl2_1_glDepthRange(void *_glfuncs, GLdouble nearVal, GLdouble farVal) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthRange(nearVal, farVal); -} - -GLboolean gl2_1_glIsEnabled(void *_glfuncs, GLenum cap) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsEnabled(cap); -} - -void gl2_1_glGetTexLevelParameteriv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLint* params) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexLevelParameteriv(target, level, pname, params); -} - -void gl2_1_glGetTexLevelParameterfv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexLevelParameterfv(target, level, pname, params); -} - -void gl2_1_glGetTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameteriv(target, pname, params); -} - -void gl2_1_glGetTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameterfv(target, pname, params); -} - -void gl2_1_glGetTexImage(void *_glfuncs, GLenum target, GLint level, GLenum format, GLenum gltype, GLvoid* pixels) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexImage(target, level, format, gltype, pixels); -} - -void gl2_1_glGetIntegerv(void *_glfuncs, GLenum pname, GLint* params) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetIntegerv(pname, params); -} - -void gl2_1_glGetFloatv(void *_glfuncs, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetFloatv(pname, params); -} - -GLenum gl2_1_glGetError(void *_glfuncs) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetError(); -} - -void gl2_1_glGetDoublev(void *_glfuncs, GLenum pname, GLdouble* params) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetDoublev(pname, params); -} - -void gl2_1_glGetBooleanv(void *_glfuncs, GLenum pname, GLboolean* params) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBooleanv(pname, params); -} - -void gl2_1_glReadPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum gltype, GLvoid* pixels) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glReadPixels(x, y, width, height, format, gltype, pixels); -} - -void gl2_1_glReadBuffer(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glReadBuffer(mode); -} - -void gl2_1_glPixelStorei(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelStorei(pname, param); -} - -void gl2_1_glPixelStoref(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelStoref(pname, param); -} - -void gl2_1_glDepthFunc(void *_glfuncs, GLenum glfunc) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthFunc(glfunc); -} - -void gl2_1_glStencilOp(void *_glfuncs, GLenum fail, GLenum zfail, GLenum zpass) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilOp(fail, zfail, zpass); -} - -void gl2_1_glStencilFunc(void *_glfuncs, GLenum glfunc, GLint ref, GLuint mask) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilFunc(glfunc, ref, mask); -} - -void gl2_1_glLogicOp(void *_glfuncs, GLenum opcode) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLogicOp(opcode); -} - -void gl2_1_glBlendFunc(void *_glfuncs, GLenum sfactor, GLenum dfactor) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendFunc(sfactor, dfactor); -} - -void gl2_1_glFlush(void *_glfuncs) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFlush(); -} - -void gl2_1_glFinish(void *_glfuncs) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFinish(); -} - -void gl2_1_glEnable(void *_glfuncs, GLenum cap) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnable(cap); -} - -void gl2_1_glDisable(void *_glfuncs, GLenum cap) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDisable(cap); -} - -void gl2_1_glDepthMask(void *_glfuncs, GLboolean flag) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthMask(flag); -} - -void gl2_1_glColorMask(void *_glfuncs, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorMask(red, green, blue, alpha); -} - -void gl2_1_glStencilMask(void *_glfuncs, GLuint mask) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilMask(mask); -} - -void gl2_1_glClearDepth(void *_glfuncs, GLdouble depth) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearDepth(depth); -} - -void gl2_1_glClearStencil(void *_glfuncs, GLint s) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearStencil(s); -} - -void gl2_1_glClearColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearColor(red, green, blue, alpha); -} - -void gl2_1_glClear(void *_glfuncs, GLbitfield mask) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClear(mask); -} - -void gl2_1_glDrawBuffer(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawBuffer(mode); -} - -void gl2_1_glTexImage2D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage2D(target, level, internalFormat, width, height, border, format, gltype, pixels); -} - -void gl2_1_glTexImage1D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage1D(target, level, internalFormat, width, border, format, gltype, pixels); -} - -void gl2_1_glTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameteriv(target, pname, params); -} - -void gl2_1_glTexParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint param) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameteri(target, pname, param); -} - -void gl2_1_glTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterfv(target, pname, params); -} - -void gl2_1_glTexParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterf(target, pname, param); -} - -void gl2_1_glScissor(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScissor(x, y, width, height); -} - -void gl2_1_glPolygonMode(void *_glfuncs, GLenum face, GLenum mode) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPolygonMode(face, mode); -} - -void gl2_1_glPointSize(void *_glfuncs, GLfloat size) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointSize(size); -} - -void gl2_1_glLineWidth(void *_glfuncs, GLfloat width) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLineWidth(width); -} - -void gl2_1_glHint(void *_glfuncs, GLenum target, GLenum mode) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glHint(target, mode); -} - -void gl2_1_glFrontFace(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFrontFace(mode); -} - -void gl2_1_glCullFace(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCullFace(mode); -} - -void gl2_1_glIndexubv(void *_glfuncs, const GLubyte* c) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexubv(c); -} - -void gl2_1_glIndexub(void *_glfuncs, GLubyte c) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexub(c); -} - -GLboolean gl2_1_glIsTexture(void *_glfuncs, GLuint texture) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsTexture(texture); -} - -void gl2_1_glGenTextures(void *_glfuncs, GLsizei n, GLuint* textures) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenTextures(n, textures); -} - -void gl2_1_glDeleteTextures(void *_glfuncs, GLsizei n, const GLuint* textures) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteTextures(n, textures); -} - -void gl2_1_glBindTexture(void *_glfuncs, GLenum target, GLuint texture) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindTexture(target, texture); -} - -void gl2_1_glTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, gltype, pixels); -} - -void gl2_1_glTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexSubImage1D(target, level, xoffset, width, format, gltype, pixels); -} - -void gl2_1_glCopyTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height); -} - -void gl2_1_glCopyTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexSubImage1D(target, level, xoffset, x, y, width); -} - -void gl2_1_glCopyTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexImage2D(target, level, internalFormat, x, y, width, height, border); -} - -void gl2_1_glCopyTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexImage1D(target, level, internalFormat, x, y, width, border); -} - -void gl2_1_glPolygonOffset(void *_glfuncs, GLfloat factor, GLfloat units) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPolygonOffset(factor, units); -} - -void gl2_1_glDrawElements(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElements(mode, count, gltype, indices); -} - -void gl2_1_glDrawArrays(void *_glfuncs, GLenum mode, GLint first, GLsizei count) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawArrays(mode, first, count); -} - -void gl2_1_glCopyTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexSubImage3D(target, level, xoffset, yoffset, zoffset, x, y, width, height); -} - -void gl2_1_glTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, gltype, pixels); -} - -void gl2_1_glTexImage3D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage3D(target, level, internalFormat, width, height, depth, border, format, gltype, pixels); -} - -void gl2_1_glDrawRangeElements(void *_glfuncs, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum gltype, const GLvoid* indices) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawRangeElements(mode, start, end, count, gltype, indices); -} - -void gl2_1_glBlendEquation(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendEquation(mode); -} - -void gl2_1_glBlendColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendColor(red, green, blue, alpha); -} - -void gl2_1_glGetCompressedTexImage(void *_glfuncs, GLenum target, GLint level, GLvoid* img) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetCompressedTexImage(target, level, img); -} - -void gl2_1_glCompressedTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexSubImage1D(target, level, xoffset, width, format, imageSize, data); -} - -void gl2_1_glCompressedTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data); -} - -void gl2_1_glCompressedTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data); -} - -void gl2_1_glCompressedTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexImage1D(target, level, internalFormat, width, border, imageSize, data); -} - -void gl2_1_glCompressedTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexImage2D(target, level, internalFormat, width, height, border, imageSize, data); -} - -void gl2_1_glCompressedTexImage3D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexImage3D(target, level, internalFormat, width, height, depth, border, imageSize, data); -} - -void gl2_1_glSampleCoverage(void *_glfuncs, GLfloat value, GLboolean invert) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSampleCoverage(value, invert); -} - -void gl2_1_glActiveTexture(void *_glfuncs, GLenum texture) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glActiveTexture(texture); -} - -void gl2_1_glPointParameteriv(void *_glfuncs, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameteriv(pname, params); -} - -void gl2_1_glPointParameteri(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameteri(pname, param); -} - -void gl2_1_glPointParameterfv(void *_glfuncs, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameterfv(pname, params); -} - -void gl2_1_glPointParameterf(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameterf(pname, param); -} - -void gl2_1_glMultiDrawArrays(void *_glfuncs, GLenum mode, const GLint* first, const GLsizei* count, GLsizei drawcount) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiDrawArrays(mode, first, count, drawcount); -} - -void gl2_1_glBlendFuncSeparate(void *_glfuncs, GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendFuncSeparate(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha); -} - -void gl2_1_glGetBufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBufferParameteriv(target, pname, params); -} - -GLboolean gl2_1_glUnmapBuffer(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glUnmapBuffer(target); -} - -void gl2_1_glGetBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, GLvoid* data) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBufferSubData(target, offset, size, data); -} - -void gl2_1_glBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBufferSubData(target, offset, size, data); -} - -void gl2_1_glBufferData(void *_glfuncs, GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBufferData(target, size, data, usage); -} - -GLboolean gl2_1_glIsBuffer(void *_glfuncs, GLuint buffer) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsBuffer(buffer); -} - -void gl2_1_glGenBuffers(void *_glfuncs, GLsizei n, GLuint* buffers) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenBuffers(n, buffers); -} - -void gl2_1_glDeleteBuffers(void *_glfuncs, GLsizei n, const GLuint* buffers) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteBuffers(n, buffers); -} - -void gl2_1_glBindBuffer(void *_glfuncs, GLenum target, GLuint buffer) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindBuffer(target, buffer); -} - -void gl2_1_glGetQueryObjectuiv(void *_glfuncs, GLuint id, GLenum pname, GLuint* params) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryObjectuiv(id, pname, params); -} - -void gl2_1_glGetQueryObjectiv(void *_glfuncs, GLuint id, GLenum pname, GLint* params) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryObjectiv(id, pname, params); -} - -void gl2_1_glGetQueryiv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryiv(target, pname, params); -} - -void gl2_1_glEndQuery(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndQuery(target); -} - -void gl2_1_glBeginQuery(void *_glfuncs, GLenum target, GLuint id) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBeginQuery(target, id); -} - -GLboolean gl2_1_glIsQuery(void *_glfuncs, GLuint id) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsQuery(id); -} - -void gl2_1_glDeleteQueries(void *_glfuncs, GLsizei n, const GLuint* ids) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteQueries(n, ids); -} - -void gl2_1_glGenQueries(void *_glfuncs, GLsizei n, GLuint* ids) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenQueries(n, ids); -} - -void gl2_1_glVertexAttribPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLboolean normalized, GLsizei stride, const GLvoid* offset) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribPointer(index, size, gltype, normalized, stride, offset); -} - -void gl2_1_glValidateProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glValidateProgram(program); -} - -void gl2_1_glUniformMatrix4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4fv(location, count, transpose, value); -} - -void gl2_1_glUniformMatrix3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3fv(location, count, transpose, value); -} - -void gl2_1_glUniformMatrix2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2fv(location, count, transpose, value); -} - -void gl2_1_glUniform4iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4iv(location, count, value); -} - -void gl2_1_glUniform3iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3iv(location, count, value); -} - -void gl2_1_glUniform2iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2iv(location, count, value); -} - -void gl2_1_glUniform1iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1iv(location, count, value); -} - -void gl2_1_glUniform4fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4fv(location, count, value); -} - -void gl2_1_glUniform3fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3fv(location, count, value); -} - -void gl2_1_glUniform2fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2fv(location, count, value); -} - -void gl2_1_glUniform1fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1fv(location, count, value); -} - -void gl2_1_glUniform4i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2, GLint v3) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4i(location, v0, v1, v2, v3); -} - -void gl2_1_glUniform3i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3i(location, v0, v1, v2); -} - -void gl2_1_glUniform2i(void *_glfuncs, GLint location, GLint v0, GLint v1) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2i(location, v0, v1); -} - -void gl2_1_glUniform1i(void *_glfuncs, GLint location, GLint v0) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1i(location, v0); -} - -void gl2_1_glUniform4f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4f(location, v0, v1, v2, v3); -} - -void gl2_1_glUniform3f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3f(location, v0, v1, v2); -} - -void gl2_1_glUniform2f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2f(location, v0, v1); -} - -void gl2_1_glUniform1f(void *_glfuncs, GLint location, GLfloat v0) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1f(location, v0); -} - -void gl2_1_glUseProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUseProgram(program); -} - -void gl2_1_glShaderSource(void *_glfuncs, GLuint shader, GLsizei count, const GLchar** source, const GLint* length) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glShaderSource(shader, count, source, length); -} - -void gl2_1_glLinkProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLinkProgram(program); -} - -GLboolean gl2_1_glIsShader(void *_glfuncs, GLuint shader) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsShader(shader); -} - -GLboolean gl2_1_glIsProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsProgram(program); -} - -void gl2_1_glGetVertexAttribiv(void *_glfuncs, GLuint index, GLenum pname, GLint* params) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribiv(index, pname, params); -} - -void gl2_1_glGetVertexAttribfv(void *_glfuncs, GLuint index, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribfv(index, pname, params); -} - -void gl2_1_glGetVertexAttribdv(void *_glfuncs, GLuint index, GLenum pname, GLdouble* params) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribdv(index, pname, params); -} - -void gl2_1_glGetUniformiv(void *_glfuncs, GLuint program, GLint location, GLint* params) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetUniformiv(program, location, params); -} - -void gl2_1_glGetUniformfv(void *_glfuncs, GLuint program, GLint location, GLfloat* params) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetUniformfv(program, location, params); -} - -GLint gl2_1_glGetUniformLocation(void *_glfuncs, GLuint program, const GLchar* name) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetUniformLocation(program, name); -} - -void gl2_1_glGetShaderSource(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* source) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetShaderSource(shader, bufSize, length, source); -} - -void gl2_1_glGetShaderInfoLog(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* infoLog) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetShaderInfoLog(shader, bufSize, length, infoLog); -} - -void gl2_1_glGetShaderiv(void *_glfuncs, GLuint shader, GLenum pname, GLint* params) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetShaderiv(shader, pname, params); -} - -void gl2_1_glGetProgramInfoLog(void *_glfuncs, GLuint program, GLsizei bufSize, GLsizei* length, GLchar* infoLog) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetProgramInfoLog(program, bufSize, length, infoLog); -} - -void gl2_1_glGetProgramiv(void *_glfuncs, GLuint program, GLenum pname, GLint* params) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetProgramiv(program, pname, params); -} - -GLint gl2_1_glGetAttribLocation(void *_glfuncs, GLuint program, const GLchar* name) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetAttribLocation(program, name); -} - -void gl2_1_glGetAttachedShaders(void *_glfuncs, GLuint program, GLsizei maxCount, GLsizei* count, GLuint* obj) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetAttachedShaders(program, maxCount, count, obj); -} - -void gl2_1_glGetActiveUniform(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniform(program, index, bufSize, length, size, gltype, name); -} - -void gl2_1_glGetActiveAttrib(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveAttrib(program, index, bufSize, length, size, gltype, name); -} - -void gl2_1_glEnableVertexAttribArray(void *_glfuncs, GLuint index) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnableVertexAttribArray(index); -} - -void gl2_1_glDisableVertexAttribArray(void *_glfuncs, GLuint index) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDisableVertexAttribArray(index); -} - -void gl2_1_glDetachShader(void *_glfuncs, GLuint program, GLuint shader) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDetachShader(program, shader); -} - -void gl2_1_glDeleteShader(void *_glfuncs, GLuint shader) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteShader(shader); -} - -void gl2_1_glDeleteProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteProgram(program); -} - -GLuint gl2_1_glCreateShader(void *_glfuncs, GLenum gltype) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glCreateShader(gltype); -} - -GLuint gl2_1_glCreateProgram(void *_glfuncs) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glCreateProgram(); -} - -void gl2_1_glCompileShader(void *_glfuncs, GLuint shader) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompileShader(shader); -} - -void gl2_1_glBindAttribLocation(void *_glfuncs, GLuint program, GLuint index, const GLchar* name) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindAttribLocation(program, index, name); -} - -void gl2_1_glAttachShader(void *_glfuncs, GLuint program, GLuint shader) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glAttachShader(program, shader); -} - -void gl2_1_glStencilMaskSeparate(void *_glfuncs, GLenum face, GLuint mask) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilMaskSeparate(face, mask); -} - -void gl2_1_glStencilFuncSeparate(void *_glfuncs, GLenum face, GLenum glfunc, GLint ref, GLuint mask) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilFuncSeparate(face, glfunc, ref, mask); -} - -void gl2_1_glStencilOpSeparate(void *_glfuncs, GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilOpSeparate(face, sfail, dpfail, dppass); -} - -void gl2_1_glDrawBuffers(void *_glfuncs, GLsizei n, const GLenum* bufs) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawBuffers(n, bufs); -} - -void gl2_1_glBlendEquationSeparate(void *_glfuncs, GLenum modeRGB, GLenum modeAlpha) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendEquationSeparate(modeRGB, modeAlpha); -} - -void gl2_1_glUniformMatrix4x3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4x3fv(location, count, transpose, value); -} - -void gl2_1_glUniformMatrix3x4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3x4fv(location, count, transpose, value); -} - -void gl2_1_glUniformMatrix4x2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4x2fv(location, count, transpose, value); -} - -void gl2_1_glUniformMatrix2x4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2x4fv(location, count, transpose, value); -} - -void gl2_1_glUniformMatrix3x2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3x2fv(location, count, transpose, value); -} - -void gl2_1_glUniformMatrix2x3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2x3fv(location, count, transpose, value); -} - -void gl2_1_glTranslatef(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTranslatef(x, y, z); -} - -void gl2_1_glTranslated(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTranslated(x, y, z); -} - -void gl2_1_glScalef(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScalef(x, y, z); -} - -void gl2_1_glScaled(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScaled(x, y, z); -} - -void gl2_1_glRotatef(void *_glfuncs, GLfloat angle, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRotatef(angle, x, y, z); -} - -void gl2_1_glRotated(void *_glfuncs, GLdouble angle, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRotated(angle, x, y, z); -} - -void gl2_1_glPushMatrix(void *_glfuncs) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPushMatrix(); -} - -void gl2_1_glPopMatrix(void *_glfuncs) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPopMatrix(); -} - -void gl2_1_glOrtho(void *_glfuncs, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glOrtho(left, right, bottom, top, zNear, zFar); -} - -void gl2_1_glMultMatrixd(void *_glfuncs, const GLdouble* m) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultMatrixd(m); -} - -void gl2_1_glMultMatrixf(void *_glfuncs, const GLfloat* m) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultMatrixf(m); -} - -void gl2_1_glMatrixMode(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMatrixMode(mode); -} - -void gl2_1_glLoadMatrixd(void *_glfuncs, const GLdouble* m) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadMatrixd(m); -} - -void gl2_1_glLoadMatrixf(void *_glfuncs, const GLfloat* m) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadMatrixf(m); -} - -void gl2_1_glLoadIdentity(void *_glfuncs) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadIdentity(); -} - -void gl2_1_glFrustum(void *_glfuncs, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFrustum(left, right, bottom, top, zNear, zFar); -} - -GLboolean gl2_1_glIsList(void *_glfuncs, GLuint list) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsList(list); -} - -void gl2_1_glGetTexGeniv(void *_glfuncs, GLenum coord, GLenum pname, GLint* params) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexGeniv(coord, pname, params); -} - -void gl2_1_glGetTexGenfv(void *_glfuncs, GLenum coord, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexGenfv(coord, pname, params); -} - -void gl2_1_glGetTexGendv(void *_glfuncs, GLenum coord, GLenum pname, GLdouble* params) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexGendv(coord, pname, params); -} - -void gl2_1_glGetTexEnviv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexEnviv(target, pname, params); -} - -void gl2_1_glGetTexEnvfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexEnvfv(target, pname, params); -} - -void gl2_1_glGetPolygonStipple(void *_glfuncs, GLubyte* mask) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetPolygonStipple(mask); -} - -void gl2_1_glGetPixelMapusv(void *_glfuncs, GLenum glmap, GLushort* values) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetPixelMapusv(glmap, values); -} - -void gl2_1_glGetPixelMapuiv(void *_glfuncs, GLenum glmap, GLuint* values) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetPixelMapuiv(glmap, values); -} - -void gl2_1_glGetPixelMapfv(void *_glfuncs, GLenum glmap, GLfloat* values) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetPixelMapfv(glmap, values); -} - -void gl2_1_glGetMaterialiv(void *_glfuncs, GLenum face, GLenum pname, GLint* params) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMaterialiv(face, pname, params); -} - -void gl2_1_glGetMaterialfv(void *_glfuncs, GLenum face, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMaterialfv(face, pname, params); -} - -void gl2_1_glGetMapiv(void *_glfuncs, GLenum target, GLenum query, GLint* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMapiv(target, query, v); -} - -void gl2_1_glGetMapfv(void *_glfuncs, GLenum target, GLenum query, GLfloat* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMapfv(target, query, v); -} - -void gl2_1_glGetMapdv(void *_glfuncs, GLenum target, GLenum query, GLdouble* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMapdv(target, query, v); -} - -void gl2_1_glGetLightiv(void *_glfuncs, GLenum light, GLenum pname, GLint* params) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetLightiv(light, pname, params); -} - -void gl2_1_glGetLightfv(void *_glfuncs, GLenum light, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetLightfv(light, pname, params); -} - -void gl2_1_glGetClipPlane(void *_glfuncs, GLenum plane, GLdouble* equation) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetClipPlane(plane, equation); -} - -void gl2_1_glDrawPixels(void *_glfuncs, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawPixels(width, height, format, gltype, pixels); -} - -void gl2_1_glCopyPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum gltype) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyPixels(x, y, width, height, gltype); -} - -void gl2_1_glPixelMapusv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLushort* values) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelMapusv(glmap, mapsize, values); -} - -void gl2_1_glPixelMapuiv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLuint* values) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelMapuiv(glmap, mapsize, values); -} - -void gl2_1_glPixelMapfv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLfloat* values) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelMapfv(glmap, mapsize, values); -} - -void gl2_1_glPixelTransferi(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelTransferi(pname, param); -} - -void gl2_1_glPixelTransferf(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelTransferf(pname, param); -} - -void gl2_1_glPixelZoom(void *_glfuncs, GLfloat xfactor, GLfloat yfactor) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelZoom(xfactor, yfactor); -} - -void gl2_1_glAlphaFunc(void *_glfuncs, GLenum glfunc, GLfloat ref) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glAlphaFunc(glfunc, ref); -} - -void gl2_1_glEvalPoint2(void *_glfuncs, GLint i, GLint j) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalPoint2(i, j); -} - -void gl2_1_glEvalMesh2(void *_glfuncs, GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalMesh2(mode, i1, i2, j1, j2); -} - -void gl2_1_glEvalPoint1(void *_glfuncs, GLint i) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalPoint1(i); -} - -void gl2_1_glEvalMesh1(void *_glfuncs, GLenum mode, GLint i1, GLint i2) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalMesh1(mode, i1, i2); -} - -void gl2_1_glEvalCoord2fv(void *_glfuncs, const GLfloat* u) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord2fv(u); -} - -void gl2_1_glEvalCoord2f(void *_glfuncs, GLfloat u, GLfloat v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord2f(u, v); -} - -void gl2_1_glEvalCoord2dv(void *_glfuncs, const GLdouble* u) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord2dv(u); -} - -void gl2_1_glEvalCoord2d(void *_glfuncs, GLdouble u, GLdouble v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord2d(u, v); -} - -void gl2_1_glEvalCoord1fv(void *_glfuncs, const GLfloat* u) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord1fv(u); -} - -void gl2_1_glEvalCoord1f(void *_glfuncs, GLfloat u) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord1f(u); -} - -void gl2_1_glEvalCoord1dv(void *_glfuncs, const GLdouble* u) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord1dv(u); -} - -void gl2_1_glEvalCoord1d(void *_glfuncs, GLdouble u) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord1d(u); -} - -void gl2_1_glMapGrid2f(void *_glfuncs, GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMapGrid2f(un, u1, u2, vn, v1, v2); -} - -void gl2_1_glMapGrid2d(void *_glfuncs, GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMapGrid2d(un, u1, u2, vn, v1, v2); -} - -void gl2_1_glMapGrid1f(void *_glfuncs, GLint un, GLfloat u1, GLfloat u2) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMapGrid1f(un, u1, u2); -} - -void gl2_1_glMapGrid1d(void *_glfuncs, GLint un, GLdouble u1, GLdouble u2) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMapGrid1d(un, u1, u2); -} - -void gl2_1_glMap2f(void *_glfuncs, GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat* points) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMap2f(target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points); -} - -void gl2_1_glMap2d(void *_glfuncs, GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble* points) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMap2d(target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points); -} - -void gl2_1_glMap1f(void *_glfuncs, GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat* points) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMap1f(target, u1, u2, stride, order, points); -} - -void gl2_1_glMap1d(void *_glfuncs, GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble* points) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMap1d(target, u1, u2, stride, order, points); -} - -void gl2_1_glPushAttrib(void *_glfuncs, GLbitfield mask) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPushAttrib(mask); -} - -void gl2_1_glPopAttrib(void *_glfuncs) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPopAttrib(); -} - -void gl2_1_glAccum(void *_glfuncs, GLenum op, GLfloat value) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glAccum(op, value); -} - -void gl2_1_glIndexMask(void *_glfuncs, GLuint mask) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexMask(mask); -} - -void gl2_1_glClearIndex(void *_glfuncs, GLfloat c) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearIndex(c); -} - -void gl2_1_glClearAccum(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearAccum(red, green, blue, alpha); -} - -void gl2_1_glPushName(void *_glfuncs, GLuint name) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPushName(name); -} - -void gl2_1_glPopName(void *_glfuncs) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPopName(); -} - -void gl2_1_glPassThrough(void *_glfuncs, GLfloat token) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPassThrough(token); -} - -void gl2_1_glLoadName(void *_glfuncs, GLuint name) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadName(name); -} - -void gl2_1_glInitNames(void *_glfuncs) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glInitNames(); -} - -GLint gl2_1_glRenderMode(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glRenderMode(mode); -} - -void gl2_1_glSelectBuffer(void *_glfuncs, GLsizei size, GLuint* buffer) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSelectBuffer(size, buffer); -} - -void gl2_1_glFeedbackBuffer(void *_glfuncs, GLsizei size, GLenum gltype, GLfloat* buffer) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFeedbackBuffer(size, gltype, buffer); -} - -void gl2_1_glTexGeniv(void *_glfuncs, GLenum coord, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGeniv(coord, pname, params); -} - -void gl2_1_glTexGeni(void *_glfuncs, GLenum coord, GLenum pname, GLint param) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGeni(coord, pname, param); -} - -void gl2_1_glTexGenfv(void *_glfuncs, GLenum coord, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGenfv(coord, pname, params); -} - -void gl2_1_glTexGenf(void *_glfuncs, GLenum coord, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGenf(coord, pname, param); -} - -void gl2_1_glTexGendv(void *_glfuncs, GLenum coord, GLenum pname, const GLdouble* params) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGendv(coord, pname, params); -} - -void gl2_1_glTexGend(void *_glfuncs, GLenum coord, GLenum pname, GLdouble param) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGend(coord, pname, param); -} - -void gl2_1_glTexEnviv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexEnviv(target, pname, params); -} - -void gl2_1_glTexEnvi(void *_glfuncs, GLenum target, GLenum pname, GLint param) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexEnvi(target, pname, param); -} - -void gl2_1_glTexEnvfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexEnvfv(target, pname, params); -} - -void gl2_1_glTexEnvf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexEnvf(target, pname, param); -} - -void gl2_1_glShadeModel(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glShadeModel(mode); -} - -void gl2_1_glPolygonStipple(void *_glfuncs, const GLubyte* mask) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPolygonStipple(mask); -} - -void gl2_1_glMaterialiv(void *_glfuncs, GLenum face, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMaterialiv(face, pname, params); -} - -void gl2_1_glMateriali(void *_glfuncs, GLenum face, GLenum pname, GLint param) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMateriali(face, pname, param); -} - -void gl2_1_glMaterialfv(void *_glfuncs, GLenum face, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMaterialfv(face, pname, params); -} - -void gl2_1_glMaterialf(void *_glfuncs, GLenum face, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMaterialf(face, pname, param); -} - -void gl2_1_glLineStipple(void *_glfuncs, GLint factor, GLushort pattern) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLineStipple(factor, pattern); -} - -void gl2_1_glLightModeliv(void *_glfuncs, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightModeliv(pname, params); -} - -void gl2_1_glLightModeli(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightModeli(pname, param); -} - -void gl2_1_glLightModelfv(void *_glfuncs, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightModelfv(pname, params); -} - -void gl2_1_glLightModelf(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightModelf(pname, param); -} - -void gl2_1_glLightiv(void *_glfuncs, GLenum light, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightiv(light, pname, params); -} - -void gl2_1_glLighti(void *_glfuncs, GLenum light, GLenum pname, GLint param) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLighti(light, pname, param); -} - -void gl2_1_glLightfv(void *_glfuncs, GLenum light, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightfv(light, pname, params); -} - -void gl2_1_glLightf(void *_glfuncs, GLenum light, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightf(light, pname, param); -} - -void gl2_1_glFogiv(void *_glfuncs, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogiv(pname, params); -} - -void gl2_1_glFogi(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogi(pname, param); -} - -void gl2_1_glFogfv(void *_glfuncs, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogfv(pname, params); -} - -void gl2_1_glFogf(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogf(pname, param); -} - -void gl2_1_glColorMaterial(void *_glfuncs, GLenum face, GLenum mode) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorMaterial(face, mode); -} - -void gl2_1_glClipPlane(void *_glfuncs, GLenum plane, const GLdouble* equation) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClipPlane(plane, equation); -} - -void gl2_1_glVertex4sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4sv(v); -} - -void gl2_1_glVertex4s(void *_glfuncs, GLshort x, GLshort y, GLshort z, GLshort w) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4s(x, y, z, w); -} - -void gl2_1_glVertex4iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4iv(v); -} - -void gl2_1_glVertex4i(void *_glfuncs, GLint x, GLint y, GLint z, GLint w) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4i(x, y, z, w); -} - -void gl2_1_glVertex4fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4fv(v); -} - -void gl2_1_glVertex4f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z, GLfloat w) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4f(x, y, z, w); -} - -void gl2_1_glVertex4dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4dv(v); -} - -void gl2_1_glVertex4d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z, GLdouble w) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4d(x, y, z, w); -} - -void gl2_1_glVertex3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3sv(v); -} - -void gl2_1_glVertex3s(void *_glfuncs, GLshort x, GLshort y, GLshort z) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3s(x, y, z); -} - -void gl2_1_glVertex3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3iv(v); -} - -void gl2_1_glVertex3i(void *_glfuncs, GLint x, GLint y, GLint z) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3i(x, y, z); -} - -void gl2_1_glVertex3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3fv(v); -} - -void gl2_1_glVertex3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3f(x, y, z); -} - -void gl2_1_glVertex3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3dv(v); -} - -void gl2_1_glVertex3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3d(x, y, z); -} - -void gl2_1_glVertex2sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2sv(v); -} - -void gl2_1_glVertex2s(void *_glfuncs, GLshort x, GLshort y) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2s(x, y); -} - -void gl2_1_glVertex2iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2iv(v); -} - -void gl2_1_glVertex2i(void *_glfuncs, GLint x, GLint y) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2i(x, y); -} - -void gl2_1_glVertex2fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2fv(v); -} - -void gl2_1_glVertex2f(void *_glfuncs, GLfloat x, GLfloat y) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2f(x, y); -} - -void gl2_1_glVertex2dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2dv(v); -} - -void gl2_1_glVertex2d(void *_glfuncs, GLdouble x, GLdouble y) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2d(x, y); -} - -void gl2_1_glTexCoord4sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4sv(v); -} - -void gl2_1_glTexCoord4s(void *_glfuncs, GLshort s, GLshort t, GLshort r, GLshort q) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4s(s, t, r, q); -} - -void gl2_1_glTexCoord4iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4iv(v); -} - -void gl2_1_glTexCoord4i(void *_glfuncs, GLint s, GLint t, GLint r, GLint q) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4i(s, t, r, q); -} - -void gl2_1_glTexCoord4fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4fv(v); -} - -void gl2_1_glTexCoord4f(void *_glfuncs, GLfloat s, GLfloat t, GLfloat r, GLfloat q) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4f(s, t, r, q); -} - -void gl2_1_glTexCoord4dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4dv(v); -} - -void gl2_1_glTexCoord4d(void *_glfuncs, GLdouble s, GLdouble t, GLdouble r, GLdouble q) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4d(s, t, r, q); -} - -void gl2_1_glTexCoord3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3sv(v); -} - -void gl2_1_glTexCoord3s(void *_glfuncs, GLshort s, GLshort t, GLshort r) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3s(s, t, r); -} - -void gl2_1_glTexCoord3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3iv(v); -} - -void gl2_1_glTexCoord3i(void *_glfuncs, GLint s, GLint t, GLint r) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3i(s, t, r); -} - -void gl2_1_glTexCoord3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3fv(v); -} - -void gl2_1_glTexCoord3f(void *_glfuncs, GLfloat s, GLfloat t, GLfloat r) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3f(s, t, r); -} - -void gl2_1_glTexCoord3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3dv(v); -} - -void gl2_1_glTexCoord3d(void *_glfuncs, GLdouble s, GLdouble t, GLdouble r) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3d(s, t, r); -} - -void gl2_1_glTexCoord2sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2sv(v); -} - -void gl2_1_glTexCoord2s(void *_glfuncs, GLshort s, GLshort t) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2s(s, t); -} - -void gl2_1_glTexCoord2iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2iv(v); -} - -void gl2_1_glTexCoord2i(void *_glfuncs, GLint s, GLint t) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2i(s, t); -} - -void gl2_1_glTexCoord2fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2fv(v); -} - -void gl2_1_glTexCoord2f(void *_glfuncs, GLfloat s, GLfloat t) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2f(s, t); -} - -void gl2_1_glTexCoord2dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2dv(v); -} - -void gl2_1_glTexCoord2d(void *_glfuncs, GLdouble s, GLdouble t) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2d(s, t); -} - -void gl2_1_glTexCoord1sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1sv(v); -} - -void gl2_1_glTexCoord1s(void *_glfuncs, GLshort s) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1s(s); -} - -void gl2_1_glTexCoord1iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1iv(v); -} - -void gl2_1_glTexCoord1i(void *_glfuncs, GLint s) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1i(s); -} - -void gl2_1_glTexCoord1fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1fv(v); -} - -void gl2_1_glTexCoord1f(void *_glfuncs, GLfloat s) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1f(s); -} - -void gl2_1_glTexCoord1dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1dv(v); -} - -void gl2_1_glTexCoord1d(void *_glfuncs, GLdouble s) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1d(s); -} - -void gl2_1_glRectsv(void *_glfuncs, const GLshort* v1, const GLshort* v2) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectsv(v1, v2); -} - -void gl2_1_glRects(void *_glfuncs, GLshort x1, GLshort y1, GLshort x2, GLshort y2) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRects(x1, y1, x2, y2); -} - -void gl2_1_glRectiv(void *_glfuncs, const GLint* v1, const GLint* v2) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectiv(v1, v2); -} - -void gl2_1_glRecti(void *_glfuncs, GLint x1, GLint y1, GLint x2, GLint y2) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRecti(x1, y1, x2, y2); -} - -void gl2_1_glRectfv(void *_glfuncs, const GLfloat* v1, const GLfloat* v2) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectfv(v1, v2); -} - -void gl2_1_glRectf(void *_glfuncs, GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectf(x1, y1, x2, y2); -} - -void gl2_1_glRectdv(void *_glfuncs, const GLdouble* v1, const GLdouble* v2) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectdv(v1, v2); -} - -void gl2_1_glRectd(void *_glfuncs, GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectd(x1, y1, x2, y2); -} - -void gl2_1_glRasterPos4sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4sv(v); -} - -void gl2_1_glRasterPos4s(void *_glfuncs, GLshort x, GLshort y, GLshort z, GLshort w) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4s(x, y, z, w); -} - -void gl2_1_glRasterPos4iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4iv(v); -} - -void gl2_1_glRasterPos4i(void *_glfuncs, GLint x, GLint y, GLint z, GLint w) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4i(x, y, z, w); -} - -void gl2_1_glRasterPos4fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4fv(v); -} - -void gl2_1_glRasterPos4f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z, GLfloat w) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4f(x, y, z, w); -} - -void gl2_1_glRasterPos4dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4dv(v); -} - -void gl2_1_glRasterPos4d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z, GLdouble w) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4d(x, y, z, w); -} - -void gl2_1_glRasterPos3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3sv(v); -} - -void gl2_1_glRasterPos3s(void *_glfuncs, GLshort x, GLshort y, GLshort z) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3s(x, y, z); -} - -void gl2_1_glRasterPos3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3iv(v); -} - -void gl2_1_glRasterPos3i(void *_glfuncs, GLint x, GLint y, GLint z) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3i(x, y, z); -} - -void gl2_1_glRasterPos3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3fv(v); -} - -void gl2_1_glRasterPos3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3f(x, y, z); -} - -void gl2_1_glRasterPos3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3dv(v); -} - -void gl2_1_glRasterPos3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3d(x, y, z); -} - -void gl2_1_glRasterPos2sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2sv(v); -} - -void gl2_1_glRasterPos2s(void *_glfuncs, GLshort x, GLshort y) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2s(x, y); -} - -void gl2_1_glRasterPos2iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2iv(v); -} - -void gl2_1_glRasterPos2i(void *_glfuncs, GLint x, GLint y) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2i(x, y); -} - -void gl2_1_glRasterPos2fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2fv(v); -} - -void gl2_1_glRasterPos2f(void *_glfuncs, GLfloat x, GLfloat y) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2f(x, y); -} - -void gl2_1_glRasterPos2dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2dv(v); -} - -void gl2_1_glRasterPos2d(void *_glfuncs, GLdouble x, GLdouble y) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2d(x, y); -} - -void gl2_1_glNormal3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3sv(v); -} - -void gl2_1_glNormal3s(void *_glfuncs, GLshort nx, GLshort ny, GLshort nz) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3s(nx, ny, nz); -} - -void gl2_1_glNormal3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3iv(v); -} - -void gl2_1_glNormal3i(void *_glfuncs, GLint nx, GLint ny, GLint nz) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3i(nx, ny, nz); -} - -void gl2_1_glNormal3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3fv(v); -} - -void gl2_1_glNormal3f(void *_glfuncs, GLfloat nx, GLfloat ny, GLfloat nz) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3f(nx, ny, nz); -} - -void gl2_1_glNormal3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3dv(v); -} - -void gl2_1_glNormal3d(void *_glfuncs, GLdouble nx, GLdouble ny, GLdouble nz) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3d(nx, ny, nz); -} - -void gl2_1_glNormal3bv(void *_glfuncs, const GLbyte* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3bv(v); -} - -void gl2_1_glNormal3b(void *_glfuncs, GLbyte nx, GLbyte ny, GLbyte nz) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3b(nx, ny, nz); -} - -void gl2_1_glIndexsv(void *_glfuncs, const GLshort* c) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexsv(c); -} - -void gl2_1_glIndexs(void *_glfuncs, GLshort c) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexs(c); -} - -void gl2_1_glIndexiv(void *_glfuncs, const GLint* c) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexiv(c); -} - -void gl2_1_glIndexi(void *_glfuncs, GLint c) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexi(c); -} - -void gl2_1_glIndexfv(void *_glfuncs, const GLfloat* c) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexfv(c); -} - -void gl2_1_glIndexf(void *_glfuncs, GLfloat c) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexf(c); -} - -void gl2_1_glIndexdv(void *_glfuncs, const GLdouble* c) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexdv(c); -} - -void gl2_1_glIndexd(void *_glfuncs, GLdouble c) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexd(c); -} - -void gl2_1_glEnd(void *_glfuncs) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnd(); -} - -void gl2_1_glEdgeFlagv(void *_glfuncs, const GLboolean* flag) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEdgeFlagv(flag); -} - -void gl2_1_glEdgeFlag(void *_glfuncs, GLboolean flag) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEdgeFlag(flag); -} - -void gl2_1_glColor4usv(void *_glfuncs, const GLushort* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4usv(v); -} - -void gl2_1_glColor4us(void *_glfuncs, GLushort red, GLushort green, GLushort blue, GLushort alpha) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4us(red, green, blue, alpha); -} - -void gl2_1_glColor4uiv(void *_glfuncs, const GLuint* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4uiv(v); -} - -void gl2_1_glColor4ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue, GLuint alpha) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4ui(red, green, blue, alpha); -} - -void gl2_1_glColor4ubv(void *_glfuncs, const GLubyte* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4ubv(v); -} - -void gl2_1_glColor4ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4ub(red, green, blue, alpha); -} - -void gl2_1_glColor4sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4sv(v); -} - -void gl2_1_glColor4s(void *_glfuncs, GLshort red, GLshort green, GLshort blue, GLshort alpha) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4s(red, green, blue, alpha); -} - -void gl2_1_glColor4iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4iv(v); -} - -void gl2_1_glColor4i(void *_glfuncs, GLint red, GLint green, GLint blue, GLint alpha) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4i(red, green, blue, alpha); -} - -void gl2_1_glColor4fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4fv(v); -} - -void gl2_1_glColor4f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4f(red, green, blue, alpha); -} - -void gl2_1_glColor4dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4dv(v); -} - -void gl2_1_glColor4d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4d(red, green, blue, alpha); -} - -void gl2_1_glColor4bv(void *_glfuncs, const GLbyte* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4bv(v); -} - -void gl2_1_glColor4b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4b(red, green, blue, alpha); -} - -void gl2_1_glColor3usv(void *_glfuncs, const GLushort* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3usv(v); -} - -void gl2_1_glColor3us(void *_glfuncs, GLushort red, GLushort green, GLushort blue) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3us(red, green, blue); -} - -void gl2_1_glColor3uiv(void *_glfuncs, const GLuint* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3uiv(v); -} - -void gl2_1_glColor3ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3ui(red, green, blue); -} - -void gl2_1_glColor3ubv(void *_glfuncs, const GLubyte* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3ubv(v); -} - -void gl2_1_glColor3ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3ub(red, green, blue); -} - -void gl2_1_glColor3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3sv(v); -} - -void gl2_1_glColor3s(void *_glfuncs, GLshort red, GLshort green, GLshort blue) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3s(red, green, blue); -} - -void gl2_1_glColor3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3iv(v); -} - -void gl2_1_glColor3i(void *_glfuncs, GLint red, GLint green, GLint blue) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3i(red, green, blue); -} - -void gl2_1_glColor3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3fv(v); -} - -void gl2_1_glColor3f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3f(red, green, blue); -} - -void gl2_1_glColor3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3dv(v); -} - -void gl2_1_glColor3d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3d(red, green, blue); -} - -void gl2_1_glColor3bv(void *_glfuncs, const GLbyte* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3bv(v); -} - -void gl2_1_glColor3b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3b(red, green, blue); -} - -void gl2_1_glBitmap(void *_glfuncs, GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte* bitmap) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBitmap(width, height, xorig, yorig, xmove, ymove, bitmap); -} - -void gl2_1_glBegin(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBegin(mode); -} - -void gl2_1_glListBase(void *_glfuncs, GLuint base) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glListBase(base); -} - -GLuint gl2_1_glGenLists(void *_glfuncs, GLsizei range_) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGenLists(range_); -} - -void gl2_1_glDeleteLists(void *_glfuncs, GLuint list, GLsizei range_) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteLists(list, range_); -} - -void gl2_1_glCallLists(void *_glfuncs, GLsizei n, GLenum gltype, const GLvoid* lists) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCallLists(n, gltype, lists); -} - -void gl2_1_glCallList(void *_glfuncs, GLuint list) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCallList(list); -} - -void gl2_1_glEndList(void *_glfuncs) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndList(); -} - -void gl2_1_glNewList(void *_glfuncs, GLuint list, GLenum mode) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNewList(list, mode); -} - -void gl2_1_glPushClientAttrib(void *_glfuncs, GLbitfield mask) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPushClientAttrib(mask); -} - -void gl2_1_glPopClientAttrib(void *_glfuncs) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPopClientAttrib(); -} - -void gl2_1_glPrioritizeTextures(void *_glfuncs, GLsizei n, const GLuint* textures, const GLfloat* priorities) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPrioritizeTextures(n, textures, priorities); -} - -GLboolean gl2_1_glAreTexturesResident(void *_glfuncs, GLsizei n, const GLuint* textures, GLboolean* residences) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glAreTexturesResident(n, textures, residences); -} - -void gl2_1_glVertexPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexPointer(size, gltype, stride, pointer); -} - -void gl2_1_glTexCoordPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordPointer(size, gltype, stride, pointer); -} - -void gl2_1_glNormalPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormalPointer(gltype, stride, pointer); -} - -void gl2_1_glInterleavedArrays(void *_glfuncs, GLenum format, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glInterleavedArrays(format, stride, pointer); -} - -void gl2_1_glIndexPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexPointer(gltype, stride, pointer); -} - -void gl2_1_glEnableClientState(void *_glfuncs, GLenum array) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnableClientState(array); -} - -void gl2_1_glEdgeFlagPointer(void *_glfuncs, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEdgeFlagPointer(stride, pointer); -} - -void gl2_1_glDisableClientState(void *_glfuncs, GLenum array) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDisableClientState(array); -} - -void gl2_1_glColorPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorPointer(size, gltype, stride, pointer); -} - -void gl2_1_glArrayElement(void *_glfuncs, GLint i) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glArrayElement(i); -} - -void gl2_1_glResetMinmax(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glResetMinmax(target); -} - -void gl2_1_glResetHistogram(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glResetHistogram(target); -} - -void gl2_1_glMinmax(void *_glfuncs, GLenum target, GLenum internalFormat, GLboolean sink) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMinmax(target, internalFormat, sink); -} - -void gl2_1_glHistogram(void *_glfuncs, GLenum target, GLsizei width, GLenum internalFormat, GLboolean sink) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glHistogram(target, width, internalFormat, sink); -} - -void gl2_1_glGetMinmaxParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMinmaxParameteriv(target, pname, params); -} - -void gl2_1_glGetMinmaxParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMinmaxParameterfv(target, pname, params); -} - -void gl2_1_glGetMinmax(void *_glfuncs, GLenum target, GLboolean reset, GLenum format, GLenum gltype, GLvoid* values) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMinmax(target, reset, format, gltype, values); -} - -void gl2_1_glGetHistogramParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetHistogramParameteriv(target, pname, params); -} - -void gl2_1_glGetHistogramParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetHistogramParameterfv(target, pname, params); -} - -void gl2_1_glGetHistogram(void *_glfuncs, GLenum target, GLboolean reset, GLenum format, GLenum gltype, GLvoid* values) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetHistogram(target, reset, format, gltype, values); -} - -void gl2_1_glSeparableFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* row, const GLvoid* column) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSeparableFilter2D(target, internalFormat, width, height, format, gltype, row, column); -} - -void gl2_1_glGetSeparableFilter(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* row, GLvoid* column, GLvoid* span) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetSeparableFilter(target, format, gltype, row, column, span); -} - -void gl2_1_glGetConvolutionParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetConvolutionParameteriv(target, pname, params); -} - -void gl2_1_glGetConvolutionParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetConvolutionParameterfv(target, pname, params); -} - -void gl2_1_glGetConvolutionFilter(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* image) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetConvolutionFilter(target, format, gltype, image); -} - -void gl2_1_glCopyConvolutionFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyConvolutionFilter2D(target, internalFormat, x, y, width, height); -} - -void gl2_1_glCopyConvolutionFilter1D(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyConvolutionFilter1D(target, internalFormat, x, y, width); -} - -void gl2_1_glConvolutionParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionParameteriv(target, pname, params); -} - -void gl2_1_glConvolutionParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint params) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionParameteri(target, pname, params); -} - -void gl2_1_glConvolutionParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionParameterfv(target, pname, params); -} - -void gl2_1_glConvolutionParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat params) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionParameterf(target, pname, params); -} - -void gl2_1_glConvolutionFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* image) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionFilter2D(target, internalFormat, width, height, format, gltype, image); -} - -void gl2_1_glConvolutionFilter1D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum gltype, const GLvoid* image) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionFilter1D(target, internalFormat, width, format, gltype, image); -} - -void gl2_1_glCopyColorSubTable(void *_glfuncs, GLenum target, GLsizei start, GLint x, GLint y, GLsizei width) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyColorSubTable(target, start, x, y, width); -} - -void gl2_1_glColorSubTable(void *_glfuncs, GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum gltype, const GLvoid* data) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorSubTable(target, start, count, format, gltype, data); -} - -void gl2_1_glGetColorTableParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetColorTableParameteriv(target, pname, params); -} - -void gl2_1_glGetColorTableParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetColorTableParameterfv(target, pname, params); -} - -void gl2_1_glGetColorTable(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* table) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetColorTable(target, format, gltype, table); -} - -void gl2_1_glCopyColorTable(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyColorTable(target, internalFormat, x, y, width); -} - -void gl2_1_glColorTableParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorTableParameteriv(target, pname, params); -} - -void gl2_1_glColorTableParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorTableParameterfv(target, pname, params); -} - -void gl2_1_glColorTable(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum gltype, const GLvoid* table) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorTable(target, internalFormat, width, format, gltype, table); -} - -void gl2_1_glMultTransposeMatrixd(void *_glfuncs, const GLdouble* m) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultTransposeMatrixd(m); -} - -void gl2_1_glMultTransposeMatrixf(void *_glfuncs, const GLfloat* m) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultTransposeMatrixf(m); -} - -void gl2_1_glLoadTransposeMatrixd(void *_glfuncs, const GLdouble* m) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadTransposeMatrixd(m); -} - -void gl2_1_glLoadTransposeMatrixf(void *_glfuncs, const GLfloat* m) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadTransposeMatrixf(m); -} - -void gl2_1_glMultiTexCoord4sv(void *_glfuncs, GLenum target, const GLshort* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4sv(target, v); -} - -void gl2_1_glMultiTexCoord4s(void *_glfuncs, GLenum target, GLshort s, GLshort t, GLshort r, GLshort q) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4s(target, s, t, r, q); -} - -void gl2_1_glMultiTexCoord4iv(void *_glfuncs, GLenum target, const GLint* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4iv(target, v); -} - -void gl2_1_glMultiTexCoord4i(void *_glfuncs, GLenum target, GLint s, GLint t, GLint r, GLint q) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4i(target, s, t, r, q); -} - -void gl2_1_glMultiTexCoord4fv(void *_glfuncs, GLenum target, const GLfloat* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4fv(target, v); -} - -void gl2_1_glMultiTexCoord4f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4f(target, s, t, r, q); -} - -void gl2_1_glMultiTexCoord4dv(void *_glfuncs, GLenum target, const GLdouble* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4dv(target, v); -} - -void gl2_1_glMultiTexCoord4d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4d(target, s, t, r, q); -} - -void gl2_1_glMultiTexCoord3sv(void *_glfuncs, GLenum target, const GLshort* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3sv(target, v); -} - -void gl2_1_glMultiTexCoord3s(void *_glfuncs, GLenum target, GLshort s, GLshort t, GLshort r) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3s(target, s, t, r); -} - -void gl2_1_glMultiTexCoord3iv(void *_glfuncs, GLenum target, const GLint* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3iv(target, v); -} - -void gl2_1_glMultiTexCoord3i(void *_glfuncs, GLenum target, GLint s, GLint t, GLint r) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3i(target, s, t, r); -} - -void gl2_1_glMultiTexCoord3fv(void *_glfuncs, GLenum target, const GLfloat* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3fv(target, v); -} - -void gl2_1_glMultiTexCoord3f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t, GLfloat r) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3f(target, s, t, r); -} - -void gl2_1_glMultiTexCoord3dv(void *_glfuncs, GLenum target, const GLdouble* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3dv(target, v); -} - -void gl2_1_glMultiTexCoord3d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t, GLdouble r) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3d(target, s, t, r); -} - -void gl2_1_glMultiTexCoord2sv(void *_glfuncs, GLenum target, const GLshort* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2sv(target, v); -} - -void gl2_1_glMultiTexCoord2s(void *_glfuncs, GLenum target, GLshort s, GLshort t) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2s(target, s, t); -} - -void gl2_1_glMultiTexCoord2iv(void *_glfuncs, GLenum target, const GLint* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2iv(target, v); -} - -void gl2_1_glMultiTexCoord2i(void *_glfuncs, GLenum target, GLint s, GLint t) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2i(target, s, t); -} - -void gl2_1_glMultiTexCoord2fv(void *_glfuncs, GLenum target, const GLfloat* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2fv(target, v); -} - -void gl2_1_glMultiTexCoord2f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2f(target, s, t); -} - -void gl2_1_glMultiTexCoord2dv(void *_glfuncs, GLenum target, const GLdouble* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2dv(target, v); -} - -void gl2_1_glMultiTexCoord2d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2d(target, s, t); -} - -void gl2_1_glMultiTexCoord1sv(void *_glfuncs, GLenum target, const GLshort* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1sv(target, v); -} - -void gl2_1_glMultiTexCoord1s(void *_glfuncs, GLenum target, GLshort s) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1s(target, s); -} - -void gl2_1_glMultiTexCoord1iv(void *_glfuncs, GLenum target, const GLint* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1iv(target, v); -} - -void gl2_1_glMultiTexCoord1i(void *_glfuncs, GLenum target, GLint s) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1i(target, s); -} - -void gl2_1_glMultiTexCoord1fv(void *_glfuncs, GLenum target, const GLfloat* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1fv(target, v); -} - -void gl2_1_glMultiTexCoord1f(void *_glfuncs, GLenum target, GLfloat s) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1f(target, s); -} - -void gl2_1_glMultiTexCoord1dv(void *_glfuncs, GLenum target, const GLdouble* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1dv(target, v); -} - -void gl2_1_glMultiTexCoord1d(void *_glfuncs, GLenum target, GLdouble s) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1d(target, s); -} - -void gl2_1_glClientActiveTexture(void *_glfuncs, GLenum texture) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClientActiveTexture(texture); -} - -void gl2_1_glWindowPos3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3sv(v); -} - -void gl2_1_glWindowPos3s(void *_glfuncs, GLshort x, GLshort y, GLshort z) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3s(x, y, z); -} - -void gl2_1_glWindowPos3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3iv(v); -} - -void gl2_1_glWindowPos3i(void *_glfuncs, GLint x, GLint y, GLint z) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3i(x, y, z); -} - -void gl2_1_glWindowPos3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3fv(v); -} - -void gl2_1_glWindowPos3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3f(x, y, z); -} - -void gl2_1_glWindowPos3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3dv(v); -} - -void gl2_1_glWindowPos3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3d(x, y, z); -} - -void gl2_1_glWindowPos2sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2sv(v); -} - -void gl2_1_glWindowPos2s(void *_glfuncs, GLshort x, GLshort y) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2s(x, y); -} - -void gl2_1_glWindowPos2iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2iv(v); -} - -void gl2_1_glWindowPos2i(void *_glfuncs, GLint x, GLint y) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2i(x, y); -} - -void gl2_1_glWindowPos2fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2fv(v); -} - -void gl2_1_glWindowPos2f(void *_glfuncs, GLfloat x, GLfloat y) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2f(x, y); -} - -void gl2_1_glWindowPos2dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2dv(v); -} - -void gl2_1_glWindowPos2d(void *_glfuncs, GLdouble x, GLdouble y) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2d(x, y); -} - -void gl2_1_glSecondaryColorPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColorPointer(size, gltype, stride, pointer); -} - -void gl2_1_glSecondaryColor3usv(void *_glfuncs, const GLushort* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3usv(v); -} - -void gl2_1_glSecondaryColor3us(void *_glfuncs, GLushort red, GLushort green, GLushort blue) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3us(red, green, blue); -} - -void gl2_1_glSecondaryColor3uiv(void *_glfuncs, const GLuint* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3uiv(v); -} - -void gl2_1_glSecondaryColor3ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3ui(red, green, blue); -} - -void gl2_1_glSecondaryColor3ubv(void *_glfuncs, const GLubyte* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3ubv(v); -} - -void gl2_1_glSecondaryColor3ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3ub(red, green, blue); -} - -void gl2_1_glSecondaryColor3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3sv(v); -} - -void gl2_1_glSecondaryColor3s(void *_glfuncs, GLshort red, GLshort green, GLshort blue) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3s(red, green, blue); -} - -void gl2_1_glSecondaryColor3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3iv(v); -} - -void gl2_1_glSecondaryColor3i(void *_glfuncs, GLint red, GLint green, GLint blue) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3i(red, green, blue); -} - -void gl2_1_glSecondaryColor3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3fv(v); -} - -void gl2_1_glSecondaryColor3f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3f(red, green, blue); -} - -void gl2_1_glSecondaryColor3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3dv(v); -} - -void gl2_1_glSecondaryColor3d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3d(red, green, blue); -} - -void gl2_1_glSecondaryColor3bv(void *_glfuncs, const GLbyte* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3bv(v); -} - -void gl2_1_glSecondaryColor3b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3b(red, green, blue); -} - -void gl2_1_glFogCoordPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogCoordPointer(gltype, stride, pointer); -} - -void gl2_1_glFogCoorddv(void *_glfuncs, const GLdouble* coord) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogCoorddv(coord); -} - -void gl2_1_glFogCoordd(void *_glfuncs, GLdouble coord) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogCoordd(coord); -} - -void gl2_1_glFogCoordfv(void *_glfuncs, const GLfloat* coord) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogCoordfv(coord); -} - -void gl2_1_glFogCoordf(void *_glfuncs, GLfloat coord) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogCoordf(coord); -} - -void gl2_1_glVertexAttrib4usv(void *_glfuncs, GLuint index, const GLushort* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4usv(index, v); -} - -void gl2_1_glVertexAttrib4uiv(void *_glfuncs, GLuint index, const GLuint* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4uiv(index, v); -} - -void gl2_1_glVertexAttrib4ubv(void *_glfuncs, GLuint index, const GLubyte* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4ubv(index, v); -} - -void gl2_1_glVertexAttrib4sv(void *_glfuncs, GLuint index, const GLshort* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4sv(index, v); -} - -void gl2_1_glVertexAttrib4s(void *_glfuncs, GLuint index, GLshort x, GLshort y, GLshort z, GLshort w) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4s(index, x, y, z, w); -} - -void gl2_1_glVertexAttrib4iv(void *_glfuncs, GLuint index, const GLint* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4iv(index, v); -} - -void gl2_1_glVertexAttrib4fv(void *_glfuncs, GLuint index, const GLfloat* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4fv(index, v); -} - -void gl2_1_glVertexAttrib4f(void *_glfuncs, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4f(index, x, y, z, w); -} - -void gl2_1_glVertexAttrib4dv(void *_glfuncs, GLuint index, const GLdouble* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4dv(index, v); -} - -void gl2_1_glVertexAttrib4d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4d(index, x, y, z, w); -} - -void gl2_1_glVertexAttrib4bv(void *_glfuncs, GLuint index, const GLbyte* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4bv(index, v); -} - -void gl2_1_glVertexAttrib4Nusv(void *_glfuncs, GLuint index, const GLushort* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4Nusv(index, v); -} - -void gl2_1_glVertexAttrib4Nuiv(void *_glfuncs, GLuint index, const GLuint* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4Nuiv(index, v); -} - -void gl2_1_glVertexAttrib4Nubv(void *_glfuncs, GLuint index, const GLubyte* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4Nubv(index, v); -} - -void gl2_1_glVertexAttrib4Nub(void *_glfuncs, GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4Nub(index, x, y, z, w); -} - -void gl2_1_glVertexAttrib4Nsv(void *_glfuncs, GLuint index, const GLshort* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4Nsv(index, v); -} - -void gl2_1_glVertexAttrib4Niv(void *_glfuncs, GLuint index, const GLint* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4Niv(index, v); -} - -void gl2_1_glVertexAttrib4Nbv(void *_glfuncs, GLuint index, const GLbyte* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4Nbv(index, v); -} - -void gl2_1_glVertexAttrib3sv(void *_glfuncs, GLuint index, const GLshort* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib3sv(index, v); -} - -void gl2_1_glVertexAttrib3s(void *_glfuncs, GLuint index, GLshort x, GLshort y, GLshort z) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib3s(index, x, y, z); -} - -void gl2_1_glVertexAttrib3fv(void *_glfuncs, GLuint index, const GLfloat* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib3fv(index, v); -} - -void gl2_1_glVertexAttrib3f(void *_glfuncs, GLuint index, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib3f(index, x, y, z); -} - -void gl2_1_glVertexAttrib3dv(void *_glfuncs, GLuint index, const GLdouble* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib3dv(index, v); -} - -void gl2_1_glVertexAttrib3d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib3d(index, x, y, z); -} - -void gl2_1_glVertexAttrib2sv(void *_glfuncs, GLuint index, const GLshort* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib2sv(index, v); -} - -void gl2_1_glVertexAttrib2s(void *_glfuncs, GLuint index, GLshort x, GLshort y) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib2s(index, x, y); -} - -void gl2_1_glVertexAttrib2fv(void *_glfuncs, GLuint index, const GLfloat* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib2fv(index, v); -} - -void gl2_1_glVertexAttrib2f(void *_glfuncs, GLuint index, GLfloat x, GLfloat y) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib2f(index, x, y); -} - -void gl2_1_glVertexAttrib2dv(void *_glfuncs, GLuint index, const GLdouble* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib2dv(index, v); -} - -void gl2_1_glVertexAttrib2d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib2d(index, x, y); -} - -void gl2_1_glVertexAttrib1sv(void *_glfuncs, GLuint index, const GLshort* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib1sv(index, v); -} - -void gl2_1_glVertexAttrib1s(void *_glfuncs, GLuint index, GLshort x) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib1s(index, x); -} - -void gl2_1_glVertexAttrib1fv(void *_glfuncs, GLuint index, const GLfloat* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib1fv(index, v); -} - -void gl2_1_glVertexAttrib1f(void *_glfuncs, GLuint index, GLfloat x) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib1f(index, x); -} - -void gl2_1_glVertexAttrib1dv(void *_glfuncs, GLuint index, const GLdouble* v) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib1dv(index, v); -} - -void gl2_1_glVertexAttrib1d(void *_glfuncs, GLuint index, GLdouble x) -{ - QOpenGLFunctions_2_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib1d(index, x); -} - diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/2.1/funcs.h b/Godeps/_workspace/src/github.com/obscuren/qml/gl/2.1/funcs.h deleted file mode 100644 index 399784504e..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/2.1/funcs.h +++ /dev/null @@ -1,619 +0,0 @@ - -// ** file automatically generated by glgen -- do not edit manually ** - -#ifndef __cplusplus -#include -#include -typedef unsigned int GLenum; -typedef unsigned char GLboolean; -typedef unsigned int GLbitfield; -typedef void GLvoid; -typedef char GLchar; -typedef signed char GLbyte; /* 1-byte signed */ -typedef short GLshort; /* 2-byte signed */ -typedef int GLint; /* 4-byte signed */ -typedef unsigned char GLubyte; /* 1-byte unsigned */ -typedef unsigned short GLushort; /* 2-byte unsigned */ -typedef unsigned int GLuint; /* 4-byte unsigned */ -typedef int GLsizei; /* 4-byte signed */ -typedef float GLfloat; /* single precision float */ -typedef float GLclampf; /* single precision float in [0,1] */ -typedef double GLdouble; /* double precision float */ -typedef double GLclampd; /* double precision float in [0,1] */ -typedef int64_t GLint64; -typedef uint64_t GLuint64; -typedef ptrdiff_t GLintptr; -typedef ptrdiff_t GLsizeiptr; -typedef ptrdiff_t GLintptrARB; -typedef ptrdiff_t GLsizeiptrARB; -typedef struct __GLsync *GLsync; -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -void *gl2_1_funcs(); - -void gl2_1_glViewport(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height); -void gl2_1_glDepthRange(void *_glfuncs, GLdouble nearVal, GLdouble farVal); -GLboolean gl2_1_glIsEnabled(void *_glfuncs, GLenum cap); -void gl2_1_glGetTexLevelParameteriv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLint* params); -void gl2_1_glGetTexLevelParameterfv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLfloat* params); -void gl2_1_glGetTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl2_1_glGetTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl2_1_glGetTexImage(void *_glfuncs, GLenum target, GLint level, GLenum format, GLenum gltype, GLvoid* pixels); -void gl2_1_glGetIntegerv(void *_glfuncs, GLenum pname, GLint* params); -void gl2_1_glGetFloatv(void *_glfuncs, GLenum pname, GLfloat* params); -GLenum gl2_1_glGetError(void *_glfuncs); -void gl2_1_glGetDoublev(void *_glfuncs, GLenum pname, GLdouble* params); -void gl2_1_glGetBooleanv(void *_glfuncs, GLenum pname, GLboolean* params); -void gl2_1_glReadPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum gltype, GLvoid* pixels); -void gl2_1_glReadBuffer(void *_glfuncs, GLenum mode); -void gl2_1_glPixelStorei(void *_glfuncs, GLenum pname, GLint param); -void gl2_1_glPixelStoref(void *_glfuncs, GLenum pname, GLfloat param); -void gl2_1_glDepthFunc(void *_glfuncs, GLenum glfunc); -void gl2_1_glStencilOp(void *_glfuncs, GLenum fail, GLenum zfail, GLenum zpass); -void gl2_1_glStencilFunc(void *_glfuncs, GLenum glfunc, GLint ref, GLuint mask); -void gl2_1_glLogicOp(void *_glfuncs, GLenum opcode); -void gl2_1_glBlendFunc(void *_glfuncs, GLenum sfactor, GLenum dfactor); -void gl2_1_glFlush(void *_glfuncs); -void gl2_1_glFinish(void *_glfuncs); -void gl2_1_glEnable(void *_glfuncs, GLenum cap); -void gl2_1_glDisable(void *_glfuncs, GLenum cap); -void gl2_1_glDepthMask(void *_glfuncs, GLboolean flag); -void gl2_1_glColorMask(void *_glfuncs, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); -void gl2_1_glStencilMask(void *_glfuncs, GLuint mask); -void gl2_1_glClearDepth(void *_glfuncs, GLdouble depth); -void gl2_1_glClearStencil(void *_glfuncs, GLint s); -void gl2_1_glClearColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl2_1_glClear(void *_glfuncs, GLbitfield mask); -void gl2_1_glDrawBuffer(void *_glfuncs, GLenum mode); -void gl2_1_glTexImage2D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl2_1_glTexImage1D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl2_1_glTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl2_1_glTexParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint param); -void gl2_1_glTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params); -void gl2_1_glTexParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param); -void gl2_1_glScissor(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height); -void gl2_1_glPolygonMode(void *_glfuncs, GLenum face, GLenum mode); -void gl2_1_glPointSize(void *_glfuncs, GLfloat size); -void gl2_1_glLineWidth(void *_glfuncs, GLfloat width); -void gl2_1_glHint(void *_glfuncs, GLenum target, GLenum mode); -void gl2_1_glFrontFace(void *_glfuncs, GLenum mode); -void gl2_1_glCullFace(void *_glfuncs, GLenum mode); -void gl2_1_glIndexubv(void *_glfuncs, const GLubyte* c); -void gl2_1_glIndexub(void *_glfuncs, GLubyte c); -GLboolean gl2_1_glIsTexture(void *_glfuncs, GLuint texture); -void gl2_1_glGenTextures(void *_glfuncs, GLsizei n, GLuint* textures); -void gl2_1_glDeleteTextures(void *_glfuncs, GLsizei n, const GLuint* textures); -void gl2_1_glBindTexture(void *_glfuncs, GLenum target, GLuint texture); -void gl2_1_glTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl2_1_glTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl2_1_glCopyTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -void gl2_1_glCopyTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -void gl2_1_glCopyTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -void gl2_1_glCopyTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border); -void gl2_1_glPolygonOffset(void *_glfuncs, GLfloat factor, GLfloat units); -void gl2_1_glDrawElements(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices); -void gl2_1_glDrawArrays(void *_glfuncs, GLenum mode, GLint first, GLsizei count); -void gl2_1_glCopyTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -void gl2_1_glTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl2_1_glTexImage3D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl2_1_glDrawRangeElements(void *_glfuncs, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum gltype, const GLvoid* indices); -void gl2_1_glBlendEquation(void *_glfuncs, GLenum mode); -void gl2_1_glBlendColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl2_1_glGetCompressedTexImage(void *_glfuncs, GLenum target, GLint level, GLvoid* img); -void gl2_1_glCompressedTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid* data); -void gl2_1_glCompressedTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data); -void gl2_1_glCompressedTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data); -void gl2_1_glCompressedTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid* data); -void gl2_1_glCompressedTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data); -void gl2_1_glCompressedTexImage3D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data); -void gl2_1_glSampleCoverage(void *_glfuncs, GLfloat value, GLboolean invert); -void gl2_1_glActiveTexture(void *_glfuncs, GLenum texture); -void gl2_1_glPointParameteriv(void *_glfuncs, GLenum pname, const GLint* params); -void gl2_1_glPointParameteri(void *_glfuncs, GLenum pname, GLint param); -void gl2_1_glPointParameterfv(void *_glfuncs, GLenum pname, const GLfloat* params); -void gl2_1_glPointParameterf(void *_glfuncs, GLenum pname, GLfloat param); -void gl2_1_glMultiDrawArrays(void *_glfuncs, GLenum mode, const GLint* first, const GLsizei* count, GLsizei drawcount); -void gl2_1_glBlendFuncSeparate(void *_glfuncs, GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -void gl2_1_glGetBufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -GLboolean gl2_1_glUnmapBuffer(void *_glfuncs, GLenum target); -void gl2_1_glGetBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, GLvoid* data); -void gl2_1_glBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data); -void gl2_1_glBufferData(void *_glfuncs, GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage); -GLboolean gl2_1_glIsBuffer(void *_glfuncs, GLuint buffer); -void gl2_1_glGenBuffers(void *_glfuncs, GLsizei n, GLuint* buffers); -void gl2_1_glDeleteBuffers(void *_glfuncs, GLsizei n, const GLuint* buffers); -void gl2_1_glBindBuffer(void *_glfuncs, GLenum target, GLuint buffer); -void gl2_1_glGetQueryObjectuiv(void *_glfuncs, GLuint id, GLenum pname, GLuint* params); -void gl2_1_glGetQueryObjectiv(void *_glfuncs, GLuint id, GLenum pname, GLint* params); -void gl2_1_glGetQueryiv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl2_1_glEndQuery(void *_glfuncs, GLenum target); -void gl2_1_glBeginQuery(void *_glfuncs, GLenum target, GLuint id); -GLboolean gl2_1_glIsQuery(void *_glfuncs, GLuint id); -void gl2_1_glDeleteQueries(void *_glfuncs, GLsizei n, const GLuint* ids); -void gl2_1_glGenQueries(void *_glfuncs, GLsizei n, GLuint* ids); -void gl2_1_glVertexAttribPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLboolean normalized, GLsizei stride, const GLvoid* offset); -void gl2_1_glValidateProgram(void *_glfuncs, GLuint program); -void gl2_1_glUniformMatrix4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl2_1_glUniformMatrix3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl2_1_glUniformMatrix2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl2_1_glUniform4iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gl2_1_glUniform3iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gl2_1_glUniform2iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gl2_1_glUniform1iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gl2_1_glUniform4fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gl2_1_glUniform3fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gl2_1_glUniform2fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gl2_1_glUniform1fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gl2_1_glUniform4i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -void gl2_1_glUniform3i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2); -void gl2_1_glUniform2i(void *_glfuncs, GLint location, GLint v0, GLint v1); -void gl2_1_glUniform1i(void *_glfuncs, GLint location, GLint v0); -void gl2_1_glUniform4f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -void gl2_1_glUniform3f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -void gl2_1_glUniform2f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1); -void gl2_1_glUniform1f(void *_glfuncs, GLint location, GLfloat v0); -void gl2_1_glUseProgram(void *_glfuncs, GLuint program); -void gl2_1_glShaderSource(void *_glfuncs, GLuint shader, GLsizei count, const GLchar** source, const GLint* length); -void gl2_1_glLinkProgram(void *_glfuncs, GLuint program); -GLboolean gl2_1_glIsShader(void *_glfuncs, GLuint shader); -GLboolean gl2_1_glIsProgram(void *_glfuncs, GLuint program); -void gl2_1_glGetVertexAttribiv(void *_glfuncs, GLuint index, GLenum pname, GLint* params); -void gl2_1_glGetVertexAttribfv(void *_glfuncs, GLuint index, GLenum pname, GLfloat* params); -void gl2_1_glGetVertexAttribdv(void *_glfuncs, GLuint index, GLenum pname, GLdouble* params); -void gl2_1_glGetUniformiv(void *_glfuncs, GLuint program, GLint location, GLint* params); -void gl2_1_glGetUniformfv(void *_glfuncs, GLuint program, GLint location, GLfloat* params); -GLint gl2_1_glGetUniformLocation(void *_glfuncs, GLuint program, const GLchar* name); -void gl2_1_glGetShaderSource(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* source); -void gl2_1_glGetShaderInfoLog(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* infoLog); -void gl2_1_glGetShaderiv(void *_glfuncs, GLuint shader, GLenum pname, GLint* params); -void gl2_1_glGetProgramInfoLog(void *_glfuncs, GLuint program, GLsizei bufSize, GLsizei* length, GLchar* infoLog); -void gl2_1_glGetProgramiv(void *_glfuncs, GLuint program, GLenum pname, GLint* params); -GLint gl2_1_glGetAttribLocation(void *_glfuncs, GLuint program, const GLchar* name); -void gl2_1_glGetAttachedShaders(void *_glfuncs, GLuint program, GLsizei maxCount, GLsizei* count, GLuint* obj); -void gl2_1_glGetActiveUniform(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name); -void gl2_1_glGetActiveAttrib(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name); -void gl2_1_glEnableVertexAttribArray(void *_glfuncs, GLuint index); -void gl2_1_glDisableVertexAttribArray(void *_glfuncs, GLuint index); -void gl2_1_glDetachShader(void *_glfuncs, GLuint program, GLuint shader); -void gl2_1_glDeleteShader(void *_glfuncs, GLuint shader); -void gl2_1_glDeleteProgram(void *_glfuncs, GLuint program); -GLuint gl2_1_glCreateShader(void *_glfuncs, GLenum gltype); -GLuint gl2_1_glCreateProgram(void *_glfuncs); -void gl2_1_glCompileShader(void *_glfuncs, GLuint shader); -void gl2_1_glBindAttribLocation(void *_glfuncs, GLuint program, GLuint index, const GLchar* name); -void gl2_1_glAttachShader(void *_glfuncs, GLuint program, GLuint shader); -void gl2_1_glStencilMaskSeparate(void *_glfuncs, GLenum face, GLuint mask); -void gl2_1_glStencilFuncSeparate(void *_glfuncs, GLenum face, GLenum glfunc, GLint ref, GLuint mask); -void gl2_1_glStencilOpSeparate(void *_glfuncs, GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); -void gl2_1_glDrawBuffers(void *_glfuncs, GLsizei n, const GLenum* bufs); -void gl2_1_glBlendEquationSeparate(void *_glfuncs, GLenum modeRGB, GLenum modeAlpha); -void gl2_1_glUniformMatrix4x3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl2_1_glUniformMatrix3x4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl2_1_glUniformMatrix4x2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl2_1_glUniformMatrix2x4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl2_1_glUniformMatrix3x2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl2_1_glUniformMatrix2x3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl2_1_glTranslatef(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl2_1_glTranslated(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl2_1_glScalef(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl2_1_glScaled(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl2_1_glRotatef(void *_glfuncs, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); -void gl2_1_glRotated(void *_glfuncs, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); -void gl2_1_glPushMatrix(void *_glfuncs); -void gl2_1_glPopMatrix(void *_glfuncs); -void gl2_1_glOrtho(void *_glfuncs, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -void gl2_1_glMultMatrixd(void *_glfuncs, const GLdouble* m); -void gl2_1_glMultMatrixf(void *_glfuncs, const GLfloat* m); -void gl2_1_glMatrixMode(void *_glfuncs, GLenum mode); -void gl2_1_glLoadMatrixd(void *_glfuncs, const GLdouble* m); -void gl2_1_glLoadMatrixf(void *_glfuncs, const GLfloat* m); -void gl2_1_glLoadIdentity(void *_glfuncs); -void gl2_1_glFrustum(void *_glfuncs, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -GLboolean gl2_1_glIsList(void *_glfuncs, GLuint list); -void gl2_1_glGetTexGeniv(void *_glfuncs, GLenum coord, GLenum pname, GLint* params); -void gl2_1_glGetTexGenfv(void *_glfuncs, GLenum coord, GLenum pname, GLfloat* params); -void gl2_1_glGetTexGendv(void *_glfuncs, GLenum coord, GLenum pname, GLdouble* params); -void gl2_1_glGetTexEnviv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl2_1_glGetTexEnvfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl2_1_glGetPolygonStipple(void *_glfuncs, GLubyte* mask); -void gl2_1_glGetPixelMapusv(void *_glfuncs, GLenum glmap, GLushort* values); -void gl2_1_glGetPixelMapuiv(void *_glfuncs, GLenum glmap, GLuint* values); -void gl2_1_glGetPixelMapfv(void *_glfuncs, GLenum glmap, GLfloat* values); -void gl2_1_glGetMaterialiv(void *_glfuncs, GLenum face, GLenum pname, GLint* params); -void gl2_1_glGetMaterialfv(void *_glfuncs, GLenum face, GLenum pname, GLfloat* params); -void gl2_1_glGetMapiv(void *_glfuncs, GLenum target, GLenum query, GLint* v); -void gl2_1_glGetMapfv(void *_glfuncs, GLenum target, GLenum query, GLfloat* v); -void gl2_1_glGetMapdv(void *_glfuncs, GLenum target, GLenum query, GLdouble* v); -void gl2_1_glGetLightiv(void *_glfuncs, GLenum light, GLenum pname, GLint* params); -void gl2_1_glGetLightfv(void *_glfuncs, GLenum light, GLenum pname, GLfloat* params); -void gl2_1_glGetClipPlane(void *_glfuncs, GLenum plane, GLdouble* equation); -void gl2_1_glDrawPixels(void *_glfuncs, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl2_1_glCopyPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum gltype); -void gl2_1_glPixelMapusv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLushort* values); -void gl2_1_glPixelMapuiv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLuint* values); -void gl2_1_glPixelMapfv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLfloat* values); -void gl2_1_glPixelTransferi(void *_glfuncs, GLenum pname, GLint param); -void gl2_1_glPixelTransferf(void *_glfuncs, GLenum pname, GLfloat param); -void gl2_1_glPixelZoom(void *_glfuncs, GLfloat xfactor, GLfloat yfactor); -void gl2_1_glAlphaFunc(void *_glfuncs, GLenum glfunc, GLfloat ref); -void gl2_1_glEvalPoint2(void *_glfuncs, GLint i, GLint j); -void gl2_1_glEvalMesh2(void *_glfuncs, GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2); -void gl2_1_glEvalPoint1(void *_glfuncs, GLint i); -void gl2_1_glEvalMesh1(void *_glfuncs, GLenum mode, GLint i1, GLint i2); -void gl2_1_glEvalCoord2fv(void *_glfuncs, const GLfloat* u); -void gl2_1_glEvalCoord2f(void *_glfuncs, GLfloat u, GLfloat v); -void gl2_1_glEvalCoord2dv(void *_glfuncs, const GLdouble* u); -void gl2_1_glEvalCoord2d(void *_glfuncs, GLdouble u, GLdouble v); -void gl2_1_glEvalCoord1fv(void *_glfuncs, const GLfloat* u); -void gl2_1_glEvalCoord1f(void *_glfuncs, GLfloat u); -void gl2_1_glEvalCoord1dv(void *_glfuncs, const GLdouble* u); -void gl2_1_glEvalCoord1d(void *_glfuncs, GLdouble u); -void gl2_1_glMapGrid2f(void *_glfuncs, GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2); -void gl2_1_glMapGrid2d(void *_glfuncs, GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2); -void gl2_1_glMapGrid1f(void *_glfuncs, GLint un, GLfloat u1, GLfloat u2); -void gl2_1_glMapGrid1d(void *_glfuncs, GLint un, GLdouble u1, GLdouble u2); -void gl2_1_glMap2f(void *_glfuncs, GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat* points); -void gl2_1_glMap2d(void *_glfuncs, GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble* points); -void gl2_1_glMap1f(void *_glfuncs, GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat* points); -void gl2_1_glMap1d(void *_glfuncs, GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble* points); -void gl2_1_glPushAttrib(void *_glfuncs, GLbitfield mask); -void gl2_1_glPopAttrib(void *_glfuncs); -void gl2_1_glAccum(void *_glfuncs, GLenum op, GLfloat value); -void gl2_1_glIndexMask(void *_glfuncs, GLuint mask); -void gl2_1_glClearIndex(void *_glfuncs, GLfloat c); -void gl2_1_glClearAccum(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl2_1_glPushName(void *_glfuncs, GLuint name); -void gl2_1_glPopName(void *_glfuncs); -void gl2_1_glPassThrough(void *_glfuncs, GLfloat token); -void gl2_1_glLoadName(void *_glfuncs, GLuint name); -void gl2_1_glInitNames(void *_glfuncs); -GLint gl2_1_glRenderMode(void *_glfuncs, GLenum mode); -void gl2_1_glSelectBuffer(void *_glfuncs, GLsizei size, GLuint* buffer); -void gl2_1_glFeedbackBuffer(void *_glfuncs, GLsizei size, GLenum gltype, GLfloat* buffer); -void gl2_1_glTexGeniv(void *_glfuncs, GLenum coord, GLenum pname, const GLint* params); -void gl2_1_glTexGeni(void *_glfuncs, GLenum coord, GLenum pname, GLint param); -void gl2_1_glTexGenfv(void *_glfuncs, GLenum coord, GLenum pname, const GLfloat* params); -void gl2_1_glTexGenf(void *_glfuncs, GLenum coord, GLenum pname, GLfloat param); -void gl2_1_glTexGendv(void *_glfuncs, GLenum coord, GLenum pname, const GLdouble* params); -void gl2_1_glTexGend(void *_glfuncs, GLenum coord, GLenum pname, GLdouble param); -void gl2_1_glTexEnviv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl2_1_glTexEnvi(void *_glfuncs, GLenum target, GLenum pname, GLint param); -void gl2_1_glTexEnvfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params); -void gl2_1_glTexEnvf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param); -void gl2_1_glShadeModel(void *_glfuncs, GLenum mode); -void gl2_1_glPolygonStipple(void *_glfuncs, const GLubyte* mask); -void gl2_1_glMaterialiv(void *_glfuncs, GLenum face, GLenum pname, const GLint* params); -void gl2_1_glMateriali(void *_glfuncs, GLenum face, GLenum pname, GLint param); -void gl2_1_glMaterialfv(void *_glfuncs, GLenum face, GLenum pname, const GLfloat* params); -void gl2_1_glMaterialf(void *_glfuncs, GLenum face, GLenum pname, GLfloat param); -void gl2_1_glLineStipple(void *_glfuncs, GLint factor, GLushort pattern); -void gl2_1_glLightModeliv(void *_glfuncs, GLenum pname, const GLint* params); -void gl2_1_glLightModeli(void *_glfuncs, GLenum pname, GLint param); -void gl2_1_glLightModelfv(void *_glfuncs, GLenum pname, const GLfloat* params); -void gl2_1_glLightModelf(void *_glfuncs, GLenum pname, GLfloat param); -void gl2_1_glLightiv(void *_glfuncs, GLenum light, GLenum pname, const GLint* params); -void gl2_1_glLighti(void *_glfuncs, GLenum light, GLenum pname, GLint param); -void gl2_1_glLightfv(void *_glfuncs, GLenum light, GLenum pname, const GLfloat* params); -void gl2_1_glLightf(void *_glfuncs, GLenum light, GLenum pname, GLfloat param); -void gl2_1_glFogiv(void *_glfuncs, GLenum pname, const GLint* params); -void gl2_1_glFogi(void *_glfuncs, GLenum pname, GLint param); -void gl2_1_glFogfv(void *_glfuncs, GLenum pname, const GLfloat* params); -void gl2_1_glFogf(void *_glfuncs, GLenum pname, GLfloat param); -void gl2_1_glColorMaterial(void *_glfuncs, GLenum face, GLenum mode); -void gl2_1_glClipPlane(void *_glfuncs, GLenum plane, const GLdouble* equation); -void gl2_1_glVertex4sv(void *_glfuncs, const GLshort* v); -void gl2_1_glVertex4s(void *_glfuncs, GLshort x, GLshort y, GLshort z, GLshort w); -void gl2_1_glVertex4iv(void *_glfuncs, const GLint* v); -void gl2_1_glVertex4i(void *_glfuncs, GLint x, GLint y, GLint z, GLint w); -void gl2_1_glVertex4fv(void *_glfuncs, const GLfloat* v); -void gl2_1_glVertex4f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -void gl2_1_glVertex4dv(void *_glfuncs, const GLdouble* v); -void gl2_1_glVertex4d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -void gl2_1_glVertex3sv(void *_glfuncs, const GLshort* v); -void gl2_1_glVertex3s(void *_glfuncs, GLshort x, GLshort y, GLshort z); -void gl2_1_glVertex3iv(void *_glfuncs, const GLint* v); -void gl2_1_glVertex3i(void *_glfuncs, GLint x, GLint y, GLint z); -void gl2_1_glVertex3fv(void *_glfuncs, const GLfloat* v); -void gl2_1_glVertex3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl2_1_glVertex3dv(void *_glfuncs, const GLdouble* v); -void gl2_1_glVertex3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl2_1_glVertex2sv(void *_glfuncs, const GLshort* v); -void gl2_1_glVertex2s(void *_glfuncs, GLshort x, GLshort y); -void gl2_1_glVertex2iv(void *_glfuncs, const GLint* v); -void gl2_1_glVertex2i(void *_glfuncs, GLint x, GLint y); -void gl2_1_glVertex2fv(void *_glfuncs, const GLfloat* v); -void gl2_1_glVertex2f(void *_glfuncs, GLfloat x, GLfloat y); -void gl2_1_glVertex2dv(void *_glfuncs, const GLdouble* v); -void gl2_1_glVertex2d(void *_glfuncs, GLdouble x, GLdouble y); -void gl2_1_glTexCoord4sv(void *_glfuncs, const GLshort* v); -void gl2_1_glTexCoord4s(void *_glfuncs, GLshort s, GLshort t, GLshort r, GLshort q); -void gl2_1_glTexCoord4iv(void *_glfuncs, const GLint* v); -void gl2_1_glTexCoord4i(void *_glfuncs, GLint s, GLint t, GLint r, GLint q); -void gl2_1_glTexCoord4fv(void *_glfuncs, const GLfloat* v); -void gl2_1_glTexCoord4f(void *_glfuncs, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -void gl2_1_glTexCoord4dv(void *_glfuncs, const GLdouble* v); -void gl2_1_glTexCoord4d(void *_glfuncs, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -void gl2_1_glTexCoord3sv(void *_glfuncs, const GLshort* v); -void gl2_1_glTexCoord3s(void *_glfuncs, GLshort s, GLshort t, GLshort r); -void gl2_1_glTexCoord3iv(void *_glfuncs, const GLint* v); -void gl2_1_glTexCoord3i(void *_glfuncs, GLint s, GLint t, GLint r); -void gl2_1_glTexCoord3fv(void *_glfuncs, const GLfloat* v); -void gl2_1_glTexCoord3f(void *_glfuncs, GLfloat s, GLfloat t, GLfloat r); -void gl2_1_glTexCoord3dv(void *_glfuncs, const GLdouble* v); -void gl2_1_glTexCoord3d(void *_glfuncs, GLdouble s, GLdouble t, GLdouble r); -void gl2_1_glTexCoord2sv(void *_glfuncs, const GLshort* v); -void gl2_1_glTexCoord2s(void *_glfuncs, GLshort s, GLshort t); -void gl2_1_glTexCoord2iv(void *_glfuncs, const GLint* v); -void gl2_1_glTexCoord2i(void *_glfuncs, GLint s, GLint t); -void gl2_1_glTexCoord2fv(void *_glfuncs, const GLfloat* v); -void gl2_1_glTexCoord2f(void *_glfuncs, GLfloat s, GLfloat t); -void gl2_1_glTexCoord2dv(void *_glfuncs, const GLdouble* v); -void gl2_1_glTexCoord2d(void *_glfuncs, GLdouble s, GLdouble t); -void gl2_1_glTexCoord1sv(void *_glfuncs, const GLshort* v); -void gl2_1_glTexCoord1s(void *_glfuncs, GLshort s); -void gl2_1_glTexCoord1iv(void *_glfuncs, const GLint* v); -void gl2_1_glTexCoord1i(void *_glfuncs, GLint s); -void gl2_1_glTexCoord1fv(void *_glfuncs, const GLfloat* v); -void gl2_1_glTexCoord1f(void *_glfuncs, GLfloat s); -void gl2_1_glTexCoord1dv(void *_glfuncs, const GLdouble* v); -void gl2_1_glTexCoord1d(void *_glfuncs, GLdouble s); -void gl2_1_glRectsv(void *_glfuncs, const GLshort* v1, const GLshort* v2); -void gl2_1_glRects(void *_glfuncs, GLshort x1, GLshort y1, GLshort x2, GLshort y2); -void gl2_1_glRectiv(void *_glfuncs, const GLint* v1, const GLint* v2); -void gl2_1_glRecti(void *_glfuncs, GLint x1, GLint y1, GLint x2, GLint y2); -void gl2_1_glRectfv(void *_glfuncs, const GLfloat* v1, const GLfloat* v2); -void gl2_1_glRectf(void *_glfuncs, GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2); -void gl2_1_glRectdv(void *_glfuncs, const GLdouble* v1, const GLdouble* v2); -void gl2_1_glRectd(void *_glfuncs, GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2); -void gl2_1_glRasterPos4sv(void *_glfuncs, const GLshort* v); -void gl2_1_glRasterPos4s(void *_glfuncs, GLshort x, GLshort y, GLshort z, GLshort w); -void gl2_1_glRasterPos4iv(void *_glfuncs, const GLint* v); -void gl2_1_glRasterPos4i(void *_glfuncs, GLint x, GLint y, GLint z, GLint w); -void gl2_1_glRasterPos4fv(void *_glfuncs, const GLfloat* v); -void gl2_1_glRasterPos4f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -void gl2_1_glRasterPos4dv(void *_glfuncs, const GLdouble* v); -void gl2_1_glRasterPos4d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -void gl2_1_glRasterPos3sv(void *_glfuncs, const GLshort* v); -void gl2_1_glRasterPos3s(void *_glfuncs, GLshort x, GLshort y, GLshort z); -void gl2_1_glRasterPos3iv(void *_glfuncs, const GLint* v); -void gl2_1_glRasterPos3i(void *_glfuncs, GLint x, GLint y, GLint z); -void gl2_1_glRasterPos3fv(void *_glfuncs, const GLfloat* v); -void gl2_1_glRasterPos3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl2_1_glRasterPos3dv(void *_glfuncs, const GLdouble* v); -void gl2_1_glRasterPos3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl2_1_glRasterPos2sv(void *_glfuncs, const GLshort* v); -void gl2_1_glRasterPos2s(void *_glfuncs, GLshort x, GLshort y); -void gl2_1_glRasterPos2iv(void *_glfuncs, const GLint* v); -void gl2_1_glRasterPos2i(void *_glfuncs, GLint x, GLint y); -void gl2_1_glRasterPos2fv(void *_glfuncs, const GLfloat* v); -void gl2_1_glRasterPos2f(void *_glfuncs, GLfloat x, GLfloat y); -void gl2_1_glRasterPos2dv(void *_glfuncs, const GLdouble* v); -void gl2_1_glRasterPos2d(void *_glfuncs, GLdouble x, GLdouble y); -void gl2_1_glNormal3sv(void *_glfuncs, const GLshort* v); -void gl2_1_glNormal3s(void *_glfuncs, GLshort nx, GLshort ny, GLshort nz); -void gl2_1_glNormal3iv(void *_glfuncs, const GLint* v); -void gl2_1_glNormal3i(void *_glfuncs, GLint nx, GLint ny, GLint nz); -void gl2_1_glNormal3fv(void *_glfuncs, const GLfloat* v); -void gl2_1_glNormal3f(void *_glfuncs, GLfloat nx, GLfloat ny, GLfloat nz); -void gl2_1_glNormal3dv(void *_glfuncs, const GLdouble* v); -void gl2_1_glNormal3d(void *_glfuncs, GLdouble nx, GLdouble ny, GLdouble nz); -void gl2_1_glNormal3bv(void *_glfuncs, const GLbyte* v); -void gl2_1_glNormal3b(void *_glfuncs, GLbyte nx, GLbyte ny, GLbyte nz); -void gl2_1_glIndexsv(void *_glfuncs, const GLshort* c); -void gl2_1_glIndexs(void *_glfuncs, GLshort c); -void gl2_1_glIndexiv(void *_glfuncs, const GLint* c); -void gl2_1_glIndexi(void *_glfuncs, GLint c); -void gl2_1_glIndexfv(void *_glfuncs, const GLfloat* c); -void gl2_1_glIndexf(void *_glfuncs, GLfloat c); -void gl2_1_glIndexdv(void *_glfuncs, const GLdouble* c); -void gl2_1_glIndexd(void *_glfuncs, GLdouble c); -void gl2_1_glEnd(void *_glfuncs); -void gl2_1_glEdgeFlagv(void *_glfuncs, const GLboolean* flag); -void gl2_1_glEdgeFlag(void *_glfuncs, GLboolean flag); -void gl2_1_glColor4usv(void *_glfuncs, const GLushort* v); -void gl2_1_glColor4us(void *_glfuncs, GLushort red, GLushort green, GLushort blue, GLushort alpha); -void gl2_1_glColor4uiv(void *_glfuncs, const GLuint* v); -void gl2_1_glColor4ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue, GLuint alpha); -void gl2_1_glColor4ubv(void *_glfuncs, const GLubyte* v); -void gl2_1_glColor4ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha); -void gl2_1_glColor4sv(void *_glfuncs, const GLshort* v); -void gl2_1_glColor4s(void *_glfuncs, GLshort red, GLshort green, GLshort blue, GLshort alpha); -void gl2_1_glColor4iv(void *_glfuncs, const GLint* v); -void gl2_1_glColor4i(void *_glfuncs, GLint red, GLint green, GLint blue, GLint alpha); -void gl2_1_glColor4fv(void *_glfuncs, const GLfloat* v); -void gl2_1_glColor4f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl2_1_glColor4dv(void *_glfuncs, const GLdouble* v); -void gl2_1_glColor4d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha); -void gl2_1_glColor4bv(void *_glfuncs, const GLbyte* v); -void gl2_1_glColor4b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha); -void gl2_1_glColor3usv(void *_glfuncs, const GLushort* v); -void gl2_1_glColor3us(void *_glfuncs, GLushort red, GLushort green, GLushort blue); -void gl2_1_glColor3uiv(void *_glfuncs, const GLuint* v); -void gl2_1_glColor3ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue); -void gl2_1_glColor3ubv(void *_glfuncs, const GLubyte* v); -void gl2_1_glColor3ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue); -void gl2_1_glColor3sv(void *_glfuncs, const GLshort* v); -void gl2_1_glColor3s(void *_glfuncs, GLshort red, GLshort green, GLshort blue); -void gl2_1_glColor3iv(void *_glfuncs, const GLint* v); -void gl2_1_glColor3i(void *_glfuncs, GLint red, GLint green, GLint blue); -void gl2_1_glColor3fv(void *_glfuncs, const GLfloat* v); -void gl2_1_glColor3f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue); -void gl2_1_glColor3dv(void *_glfuncs, const GLdouble* v); -void gl2_1_glColor3d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue); -void gl2_1_glColor3bv(void *_glfuncs, const GLbyte* v); -void gl2_1_glColor3b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue); -void gl2_1_glBitmap(void *_glfuncs, GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte* bitmap); -void gl2_1_glBegin(void *_glfuncs, GLenum mode); -void gl2_1_glListBase(void *_glfuncs, GLuint base); -GLuint gl2_1_glGenLists(void *_glfuncs, GLsizei range_); -void gl2_1_glDeleteLists(void *_glfuncs, GLuint list, GLsizei range_); -void gl2_1_glCallLists(void *_glfuncs, GLsizei n, GLenum gltype, const GLvoid* lists); -void gl2_1_glCallList(void *_glfuncs, GLuint list); -void gl2_1_glEndList(void *_glfuncs); -void gl2_1_glNewList(void *_glfuncs, GLuint list, GLenum mode); -void gl2_1_glPushClientAttrib(void *_glfuncs, GLbitfield mask); -void gl2_1_glPopClientAttrib(void *_glfuncs); -void gl2_1_glPrioritizeTextures(void *_glfuncs, GLsizei n, const GLuint* textures, const GLfloat* priorities); -GLboolean gl2_1_glAreTexturesResident(void *_glfuncs, GLsizei n, const GLuint* textures, GLboolean* residences); -void gl2_1_glVertexPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl2_1_glTexCoordPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl2_1_glNormalPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl2_1_glInterleavedArrays(void *_glfuncs, GLenum format, GLsizei stride, const GLvoid* pointer); -void gl2_1_glIndexPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl2_1_glEnableClientState(void *_glfuncs, GLenum array); -void gl2_1_glEdgeFlagPointer(void *_glfuncs, GLsizei stride, const GLvoid* pointer); -void gl2_1_glDisableClientState(void *_glfuncs, GLenum array); -void gl2_1_glColorPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl2_1_glArrayElement(void *_glfuncs, GLint i); -void gl2_1_glResetMinmax(void *_glfuncs, GLenum target); -void gl2_1_glResetHistogram(void *_glfuncs, GLenum target); -void gl2_1_glMinmax(void *_glfuncs, GLenum target, GLenum internalFormat, GLboolean sink); -void gl2_1_glHistogram(void *_glfuncs, GLenum target, GLsizei width, GLenum internalFormat, GLboolean sink); -void gl2_1_glGetMinmaxParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl2_1_glGetMinmaxParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl2_1_glGetMinmax(void *_glfuncs, GLenum target, GLboolean reset, GLenum format, GLenum gltype, GLvoid* values); -void gl2_1_glGetHistogramParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl2_1_glGetHistogramParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl2_1_glGetHistogram(void *_glfuncs, GLenum target, GLboolean reset, GLenum format, GLenum gltype, GLvoid* values); -void gl2_1_glSeparableFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* row, const GLvoid* column); -void gl2_1_glGetSeparableFilter(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* row, GLvoid* column, GLvoid* span); -void gl2_1_glGetConvolutionParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl2_1_glGetConvolutionParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl2_1_glGetConvolutionFilter(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* image); -void gl2_1_glCopyConvolutionFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height); -void gl2_1_glCopyConvolutionFilter1D(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width); -void gl2_1_glConvolutionParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl2_1_glConvolutionParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint params); -void gl2_1_glConvolutionParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params); -void gl2_1_glConvolutionParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat params); -void gl2_1_glConvolutionFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* image); -void gl2_1_glConvolutionFilter1D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum gltype, const GLvoid* image); -void gl2_1_glCopyColorSubTable(void *_glfuncs, GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); -void gl2_1_glColorSubTable(void *_glfuncs, GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum gltype, const GLvoid* data); -void gl2_1_glGetColorTableParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl2_1_glGetColorTableParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl2_1_glGetColorTable(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* table); -void gl2_1_glCopyColorTable(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width); -void gl2_1_glColorTableParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl2_1_glColorTableParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params); -void gl2_1_glColorTable(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum gltype, const GLvoid* table); -void gl2_1_glMultTransposeMatrixd(void *_glfuncs, const GLdouble* m); -void gl2_1_glMultTransposeMatrixf(void *_glfuncs, const GLfloat* m); -void gl2_1_glLoadTransposeMatrixd(void *_glfuncs, const GLdouble* m); -void gl2_1_glLoadTransposeMatrixf(void *_glfuncs, const GLfloat* m); -void gl2_1_glMultiTexCoord4sv(void *_glfuncs, GLenum target, const GLshort* v); -void gl2_1_glMultiTexCoord4s(void *_glfuncs, GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); -void gl2_1_glMultiTexCoord4iv(void *_glfuncs, GLenum target, const GLint* v); -void gl2_1_glMultiTexCoord4i(void *_glfuncs, GLenum target, GLint s, GLint t, GLint r, GLint q); -void gl2_1_glMultiTexCoord4fv(void *_glfuncs, GLenum target, const GLfloat* v); -void gl2_1_glMultiTexCoord4f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -void gl2_1_glMultiTexCoord4dv(void *_glfuncs, GLenum target, const GLdouble* v); -void gl2_1_glMultiTexCoord4d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -void gl2_1_glMultiTexCoord3sv(void *_glfuncs, GLenum target, const GLshort* v); -void gl2_1_glMultiTexCoord3s(void *_glfuncs, GLenum target, GLshort s, GLshort t, GLshort r); -void gl2_1_glMultiTexCoord3iv(void *_glfuncs, GLenum target, const GLint* v); -void gl2_1_glMultiTexCoord3i(void *_glfuncs, GLenum target, GLint s, GLint t, GLint r); -void gl2_1_glMultiTexCoord3fv(void *_glfuncs, GLenum target, const GLfloat* v); -void gl2_1_glMultiTexCoord3f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t, GLfloat r); -void gl2_1_glMultiTexCoord3dv(void *_glfuncs, GLenum target, const GLdouble* v); -void gl2_1_glMultiTexCoord3d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t, GLdouble r); -void gl2_1_glMultiTexCoord2sv(void *_glfuncs, GLenum target, const GLshort* v); -void gl2_1_glMultiTexCoord2s(void *_glfuncs, GLenum target, GLshort s, GLshort t); -void gl2_1_glMultiTexCoord2iv(void *_glfuncs, GLenum target, const GLint* v); -void gl2_1_glMultiTexCoord2i(void *_glfuncs, GLenum target, GLint s, GLint t); -void gl2_1_glMultiTexCoord2fv(void *_glfuncs, GLenum target, const GLfloat* v); -void gl2_1_glMultiTexCoord2f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t); -void gl2_1_glMultiTexCoord2dv(void *_glfuncs, GLenum target, const GLdouble* v); -void gl2_1_glMultiTexCoord2d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t); -void gl2_1_glMultiTexCoord1sv(void *_glfuncs, GLenum target, const GLshort* v); -void gl2_1_glMultiTexCoord1s(void *_glfuncs, GLenum target, GLshort s); -void gl2_1_glMultiTexCoord1iv(void *_glfuncs, GLenum target, const GLint* v); -void gl2_1_glMultiTexCoord1i(void *_glfuncs, GLenum target, GLint s); -void gl2_1_glMultiTexCoord1fv(void *_glfuncs, GLenum target, const GLfloat* v); -void gl2_1_glMultiTexCoord1f(void *_glfuncs, GLenum target, GLfloat s); -void gl2_1_glMultiTexCoord1dv(void *_glfuncs, GLenum target, const GLdouble* v); -void gl2_1_glMultiTexCoord1d(void *_glfuncs, GLenum target, GLdouble s); -void gl2_1_glClientActiveTexture(void *_glfuncs, GLenum texture); -void gl2_1_glWindowPos3sv(void *_glfuncs, const GLshort* v); -void gl2_1_glWindowPos3s(void *_glfuncs, GLshort x, GLshort y, GLshort z); -void gl2_1_glWindowPos3iv(void *_glfuncs, const GLint* v); -void gl2_1_glWindowPos3i(void *_glfuncs, GLint x, GLint y, GLint z); -void gl2_1_glWindowPos3fv(void *_glfuncs, const GLfloat* v); -void gl2_1_glWindowPos3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl2_1_glWindowPos3dv(void *_glfuncs, const GLdouble* v); -void gl2_1_glWindowPos3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl2_1_glWindowPos2sv(void *_glfuncs, const GLshort* v); -void gl2_1_glWindowPos2s(void *_glfuncs, GLshort x, GLshort y); -void gl2_1_glWindowPos2iv(void *_glfuncs, const GLint* v); -void gl2_1_glWindowPos2i(void *_glfuncs, GLint x, GLint y); -void gl2_1_glWindowPos2fv(void *_glfuncs, const GLfloat* v); -void gl2_1_glWindowPos2f(void *_glfuncs, GLfloat x, GLfloat y); -void gl2_1_glWindowPos2dv(void *_glfuncs, const GLdouble* v); -void gl2_1_glWindowPos2d(void *_glfuncs, GLdouble x, GLdouble y); -void gl2_1_glSecondaryColorPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl2_1_glSecondaryColor3usv(void *_glfuncs, const GLushort* v); -void gl2_1_glSecondaryColor3us(void *_glfuncs, GLushort red, GLushort green, GLushort blue); -void gl2_1_glSecondaryColor3uiv(void *_glfuncs, const GLuint* v); -void gl2_1_glSecondaryColor3ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue); -void gl2_1_glSecondaryColor3ubv(void *_glfuncs, const GLubyte* v); -void gl2_1_glSecondaryColor3ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue); -void gl2_1_glSecondaryColor3sv(void *_glfuncs, const GLshort* v); -void gl2_1_glSecondaryColor3s(void *_glfuncs, GLshort red, GLshort green, GLshort blue); -void gl2_1_glSecondaryColor3iv(void *_glfuncs, const GLint* v); -void gl2_1_glSecondaryColor3i(void *_glfuncs, GLint red, GLint green, GLint blue); -void gl2_1_glSecondaryColor3fv(void *_glfuncs, const GLfloat* v); -void gl2_1_glSecondaryColor3f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue); -void gl2_1_glSecondaryColor3dv(void *_glfuncs, const GLdouble* v); -void gl2_1_glSecondaryColor3d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue); -void gl2_1_glSecondaryColor3bv(void *_glfuncs, const GLbyte* v); -void gl2_1_glSecondaryColor3b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue); -void gl2_1_glFogCoordPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl2_1_glFogCoorddv(void *_glfuncs, const GLdouble* coord); -void gl2_1_glFogCoordd(void *_glfuncs, GLdouble coord); -void gl2_1_glFogCoordfv(void *_glfuncs, const GLfloat* coord); -void gl2_1_glFogCoordf(void *_glfuncs, GLfloat coord); -void gl2_1_glVertexAttrib4usv(void *_glfuncs, GLuint index, const GLushort* v); -void gl2_1_glVertexAttrib4uiv(void *_glfuncs, GLuint index, const GLuint* v); -void gl2_1_glVertexAttrib4ubv(void *_glfuncs, GLuint index, const GLubyte* v); -void gl2_1_glVertexAttrib4sv(void *_glfuncs, GLuint index, const GLshort* v); -void gl2_1_glVertexAttrib4s(void *_glfuncs, GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -void gl2_1_glVertexAttrib4iv(void *_glfuncs, GLuint index, const GLint* v); -void gl2_1_glVertexAttrib4fv(void *_glfuncs, GLuint index, const GLfloat* v); -void gl2_1_glVertexAttrib4f(void *_glfuncs, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -void gl2_1_glVertexAttrib4dv(void *_glfuncs, GLuint index, const GLdouble* v); -void gl2_1_glVertexAttrib4d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -void gl2_1_glVertexAttrib4bv(void *_glfuncs, GLuint index, const GLbyte* v); -void gl2_1_glVertexAttrib4Nusv(void *_glfuncs, GLuint index, const GLushort* v); -void gl2_1_glVertexAttrib4Nuiv(void *_glfuncs, GLuint index, const GLuint* v); -void gl2_1_glVertexAttrib4Nubv(void *_glfuncs, GLuint index, const GLubyte* v); -void gl2_1_glVertexAttrib4Nub(void *_glfuncs, GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -void gl2_1_glVertexAttrib4Nsv(void *_glfuncs, GLuint index, const GLshort* v); -void gl2_1_glVertexAttrib4Niv(void *_glfuncs, GLuint index, const GLint* v); -void gl2_1_glVertexAttrib4Nbv(void *_glfuncs, GLuint index, const GLbyte* v); -void gl2_1_glVertexAttrib3sv(void *_glfuncs, GLuint index, const GLshort* v); -void gl2_1_glVertexAttrib3s(void *_glfuncs, GLuint index, GLshort x, GLshort y, GLshort z); -void gl2_1_glVertexAttrib3fv(void *_glfuncs, GLuint index, const GLfloat* v); -void gl2_1_glVertexAttrib3f(void *_glfuncs, GLuint index, GLfloat x, GLfloat y, GLfloat z); -void gl2_1_glVertexAttrib3dv(void *_glfuncs, GLuint index, const GLdouble* v); -void gl2_1_glVertexAttrib3d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y, GLdouble z); -void gl2_1_glVertexAttrib2sv(void *_glfuncs, GLuint index, const GLshort* v); -void gl2_1_glVertexAttrib2s(void *_glfuncs, GLuint index, GLshort x, GLshort y); -void gl2_1_glVertexAttrib2fv(void *_glfuncs, GLuint index, const GLfloat* v); -void gl2_1_glVertexAttrib2f(void *_glfuncs, GLuint index, GLfloat x, GLfloat y); -void gl2_1_glVertexAttrib2dv(void *_glfuncs, GLuint index, const GLdouble* v); -void gl2_1_glVertexAttrib2d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y); -void gl2_1_glVertexAttrib1sv(void *_glfuncs, GLuint index, const GLshort* v); -void gl2_1_glVertexAttrib1s(void *_glfuncs, GLuint index, GLshort x); -void gl2_1_glVertexAttrib1fv(void *_glfuncs, GLuint index, const GLfloat* v); -void gl2_1_glVertexAttrib1f(void *_glfuncs, GLuint index, GLfloat x); -void gl2_1_glVertexAttrib1dv(void *_glfuncs, GLuint index, const GLdouble* v); -void gl2_1_glVertexAttrib1d(void *_glfuncs, GLuint index, GLdouble x); - - -#ifdef __cplusplus -} // extern "C" -#endif diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/2.1/gl.go b/Godeps/_workspace/src/github.com/obscuren/qml/gl/2.1/gl.go deleted file mode 100644 index 718d258a30..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/2.1/gl.go +++ /dev/null @@ -1,6652 +0,0 @@ -// ** file automatically generated by glgen -- do not edit manually ** - -package GL - -// #cgo CXXFLAGS: -std=c++0x -pedantic-errors -Wall -fno-strict-aliasing -// #cgo LDFLAGS: -lstdc++ -// #cgo pkg-config: Qt5Core Qt5OpenGL -// -// #include "funcs.h" -// -// void free(void*); -// -import "C" - -import ( - "fmt" - "reflect" - "unsafe" - - "gopkg.in/qml.v1/gl/glbase" -) - -// API returns a value that offers methods matching the OpenGL version 2.1 API. -// -// The returned API must not be used after the provided OpenGL context becomes invalid. -func API(context glbase.Contexter) *GL { - gl := &GL{} - gl.funcs = C.gl2_1_funcs() - if gl.funcs == nil { - panic(fmt.Errorf("OpenGL version 2.1 is not available")) - } - return gl -} - -// GL implements the OpenGL version 2.1 API. Values of this -// type must be created via the API function, and it must not be used after -// the associated OpenGL context becomes invalid. -type GL struct { - funcs unsafe.Pointer -} - -const ( - FALSE = 0 - TRUE = 1 - NONE = 0 - - BYTE = 0x1400 - UNSIGNED_BYTE = 0x1401 - SHORT = 0x1402 - UNSIGNED_SHORT = 0x1403 - INT = 0x1404 - UNSIGNED_INT = 0x1405 - FLOAT = 0x1406 - N2_BYTES = 0x1407 - N3_BYTES = 0x1408 - N4_BYTES = 0x1409 - DOUBLE = 0x140A - - ACCUM = 0x0100 - LOAD = 0x0101 - RETURN = 0x0102 - MULT = 0x0103 - ADD = 0x0104 - - ACCUM_BUFFER_BIT = 0x00000200 - ALL_ATTRIB_BITS = 0xFFFFFFFF - COLOR_BUFFER_BIT = 0x00004000 - CURRENT_BIT = 0x00000001 - DEPTH_BUFFER_BIT = 0x00000100 - ENABLE_BIT = 0x00002000 - EVAL_BIT = 0x00010000 - FOG_BIT = 0x00000080 - HINT_BIT = 0x00008000 - LIGHTING_BIT = 0x00000040 - LINE_BIT = 0x00000004 - LIST_BIT = 0x00020000 - MULTISAMPLE_BIT = 0x20000000 - PIXEL_MODE_BIT = 0x00000020 - POINT_BIT = 0x00000002 - POLYGON_BIT = 0x00000008 - POLYGON_STIPPLE_BIT = 0x00000010 - SCISSOR_BIT = 0x00080000 - STENCIL_BUFFER_BIT = 0x00000400 - TEXTURE_BIT = 0x00040000 - TRANSFORM_BIT = 0x00001000 - VIEWPORT_BIT = 0x00000800 - - ALWAYS = 0x0207 - EQUAL = 0x0202 - GEQUAL = 0x0206 - GREATER = 0x0204 - LEQUAL = 0x0203 - LESS = 0x0201 - NEVER = 0x0200 - NOTEQUAL = 0x0205 - - LOGIC_OP = 0x0BF1 - - DST_ALPHA = 0x0304 - ONE = 1 - ONE_MINUS_DST_ALPHA = 0x0305 - ONE_MINUS_SRC_ALPHA = 0x0303 - ONE_MINUS_SRC_COLOR = 0x0301 - SRC_ALPHA = 0x0302 - SRC_COLOR = 0x0300 - ZERO = 0 - - DST_COLOR = 0x0306 - ONE_MINUS_DST_COLOR = 0x0307 - SRC_ALPHA_SATURATE = 0x0308 - - CLIENT_ALL_ATTRIB_BITS = 0xFFFFFFFF - CLIENT_PIXEL_STORE_BIT = 0x00000001 - CLIENT_VERTEX_ARRAY_BIT = 0x00000002 - - CLIP_PLANE0 = 0x3000 - CLIP_PLANE1 = 0x3001 - CLIP_PLANE2 = 0x3002 - CLIP_PLANE3 = 0x3003 - CLIP_PLANE4 = 0x3004 - CLIP_PLANE5 = 0x3005 - - BACK = 0x0405 - FRONT = 0x0404 - FRONT_AND_BACK = 0x0408 - - AMBIENT = 0x1200 - AMBIENT_AND_DIFFUSE = 0x1602 - DIFFUSE = 0x1201 - EMISSION = 0x1600 - SPECULAR = 0x1202 - - AUX0 = 0x0409 - AUX1 = 0x040A - AUX2 = 0x040B - AUX3 = 0x040C - BACK_LEFT = 0x0402 - BACK_RIGHT = 0x0403 - FRONT_LEFT = 0x0400 - FRONT_RIGHT = 0x0401 - LEFT = 0x0406 - RIGHT = 0x0407 - - ALPHA_TEST = 0x0BC0 - AUTO_NORMAL = 0x0D80 - BLEND = 0x0BE2 - COLOR_ARRAY = 0x8076 - COLOR_LOGIC_OP = 0x0BF2 - COLOR_MATERIAL = 0x0B57 - CULL_FACE = 0x0B44 - DEPTH_TEST = 0x0B71 - DITHER = 0x0BD0 - EDGE_FLAG_ARRAY = 0x8079 - FOG = 0x0B60 - INDEX_ARRAY = 0x8077 - INDEX_LOGIC_OP = 0x0BF1 - LIGHT0 = 0x4000 - LIGHT1 = 0x4001 - LIGHT2 = 0x4002 - LIGHT3 = 0x4003 - LIGHT4 = 0x4004 - LIGHT5 = 0x4005 - LIGHT6 = 0x4006 - LIGHT7 = 0x4007 - LIGHTING = 0x0B50 - LINE_SMOOTH = 0x0B20 - LINE_STIPPLE = 0x0B24 - MAP1_COLOR_4 = 0x0D90 - MAP1_INDEX = 0x0D91 - MAP1_NORMAL = 0x0D92 - MAP1_TEXTURE_COORD_1 = 0x0D93 - MAP1_TEXTURE_COORD_2 = 0x0D94 - MAP1_TEXTURE_COORD_3 = 0x0D95 - MAP1_TEXTURE_COORD_4 = 0x0D96 - MAP1_VERTEX_3 = 0x0D97 - MAP1_VERTEX_4 = 0x0D98 - MAP2_COLOR_4 = 0x0DB0 - MAP2_INDEX = 0x0DB1 - MAP2_NORMAL = 0x0DB2 - MAP2_TEXTURE_COORD_1 = 0x0DB3 - MAP2_TEXTURE_COORD_2 = 0x0DB4 - MAP2_TEXTURE_COORD_3 = 0x0DB5 - MAP2_TEXTURE_COORD_4 = 0x0DB6 - MAP2_VERTEX_3 = 0x0DB7 - MAP2_VERTEX_4 = 0x0DB8 - NORMALIZE = 0x0BA1 - NORMAL_ARRAY = 0x8075 - POINT_SMOOTH = 0x0B10 - POLYGON_OFFSET_FILL = 0x8037 - POLYGON_OFFSET_LINE = 0x2A02 - POLYGON_OFFSET_POINT = 0x2A01 - POLYGON_SMOOTH = 0x0B41 - POLYGON_STIPPLE = 0x0B42 - SCISSOR_TEST = 0x0C11 - STENCIL_TEST = 0x0B90 - TEXTURE_1D = 0x0DE0 - TEXTURE_2D = 0x0DE1 - TEXTURE_COORD_ARRAY = 0x8078 - TEXTURE_GEN_Q = 0x0C63 - TEXTURE_GEN_R = 0x0C62 - TEXTURE_GEN_S = 0x0C60 - TEXTURE_GEN_T = 0x0C61 - VERTEX_ARRAY = 0x8074 - - INVALID_ENUM = 0x0500 - INVALID_OPERATION = 0x0502 - INVALID_VALUE = 0x0501 - NO_ERROR = 0 - OUT_OF_MEMORY = 0x0505 - STACK_OVERFLOW = 0x0503 - STACK_UNDERFLOW = 0x0504 - - N2D = 0x0600 - N3D = 0x0601 - N3D_COLOR = 0x0602 - N3D_COLOR_TEXTURE = 0x0603 - N4D_COLOR_TEXTURE = 0x0604 - - BITMAP_TOKEN = 0x0704 - COPY_PIXEL_TOKEN = 0x0706 - DRAW_PIXEL_TOKEN = 0x0705 - LINE_RESET_TOKEN = 0x0707 - LINE_TOKEN = 0x0702 - PASS_THROUGH_TOKEN = 0x0700 - POINT_TOKEN = 0x0701 - POLYGON_TOKEN = 0x0703 - - EXP = 0x0800 - EXP2 = 0x0801 - LINEAR = 0x2601 - - FOG_COLOR = 0x0B66 - FOG_DENSITY = 0x0B62 - FOG_END = 0x0B64 - FOG_INDEX = 0x0B61 - FOG_MODE = 0x0B65 - FOG_START = 0x0B63 - - CCW = 0x0901 - CW = 0x0900 - - COEFF = 0x0A00 - DOMAIN = 0x0A02 - ORDER = 0x0A01 - - PIXEL_MAP_A_TO_A = 0x0C79 - PIXEL_MAP_B_TO_B = 0x0C78 - PIXEL_MAP_G_TO_G = 0x0C77 - PIXEL_MAP_I_TO_A = 0x0C75 - PIXEL_MAP_I_TO_B = 0x0C74 - PIXEL_MAP_I_TO_G = 0x0C73 - PIXEL_MAP_I_TO_I = 0x0C70 - PIXEL_MAP_I_TO_R = 0x0C72 - PIXEL_MAP_R_TO_R = 0x0C76 - PIXEL_MAP_S_TO_S = 0x0C71 - - ACCUM_ALPHA_BITS = 0x0D5B - ACCUM_BLUE_BITS = 0x0D5A - ACCUM_CLEAR_VALUE = 0x0B80 - ACCUM_GREEN_BITS = 0x0D59 - ACCUM_RED_BITS = 0x0D58 - ALIASED_LINE_WIDTH_RANGE = 0x846E - ALIASED_POINT_SIZE_RANGE = 0x846D - ALPHA_BIAS = 0x0D1D - ALPHA_BITS = 0x0D55 - ALPHA_SCALE = 0x0D1C - ALPHA_TEST_FUNC = 0x0BC1 - ALPHA_TEST_REF = 0x0BC2 - ATTRIB_STACK_DEPTH = 0x0BB0 - AUX_BUFFERS = 0x0C00 - BLEND_DST = 0x0BE0 - BLEND_SRC = 0x0BE1 - BLUE_BIAS = 0x0D1B - BLUE_BITS = 0x0D54 - BLUE_SCALE = 0x0D1A - CLIENT_ATTRIB_STACK_DEPTH = 0x0BB1 - COLOR_ARRAY_SIZE = 0x8081 - COLOR_ARRAY_STRIDE = 0x8083 - COLOR_ARRAY_TYPE = 0x8082 - COLOR_CLEAR_VALUE = 0x0C22 - COLOR_MATERIAL_FACE = 0x0B55 - COLOR_MATERIAL_PARAMETER = 0x0B56 - COLOR_WRITEMASK = 0x0C23 - CULL_FACE_MODE = 0x0B45 - CURRENT_COLOR = 0x0B00 - CURRENT_INDEX = 0x0B01 - CURRENT_NORMAL = 0x0B02 - CURRENT_RASTER_COLOR = 0x0B04 - CURRENT_RASTER_DISTANCE = 0x0B09 - CURRENT_RASTER_INDEX = 0x0B05 - CURRENT_RASTER_POSITION = 0x0B07 - CURRENT_RASTER_POSITION_VALID = 0x0B08 - CURRENT_RASTER_TEXTURE_COORDS = 0x0B06 - CURRENT_TEXTURE_COORDS = 0x0B03 - DEPTH_BIAS = 0x0D1F - DEPTH_BITS = 0x0D56 - DEPTH_CLEAR_VALUE = 0x0B73 - DEPTH_FUNC = 0x0B74 - DEPTH_RANGE = 0x0B70 - DEPTH_SCALE = 0x0D1E - DEPTH_WRITEMASK = 0x0B72 - DOUBLEBUFFER = 0x0C32 - DRAW_BUFFER = 0x0C01 - EDGE_FLAG = 0x0B43 - EDGE_FLAG_ARRAY_STRIDE = 0x808C - FEEDBACK_BUFFER_SIZE = 0x0DF1 - FEEDBACK_BUFFER_TYPE = 0x0DF2 - FOG_HINT = 0x0C54 - FRONT_FACE = 0x0B46 - GREEN_BIAS = 0x0D19 - GREEN_BITS = 0x0D53 - GREEN_SCALE = 0x0D18 - INDEX_ARRAY_STRIDE = 0x8086 - INDEX_ARRAY_TYPE = 0x8085 - INDEX_BITS = 0x0D51 - INDEX_CLEAR_VALUE = 0x0C20 - INDEX_MODE = 0x0C30 - INDEX_OFFSET = 0x0D13 - INDEX_SHIFT = 0x0D12 - INDEX_WRITEMASK = 0x0C21 - LIGHT_MODEL_AMBIENT = 0x0B53 - LIGHT_MODEL_COLOR_CONTROL = 0x81F8 - LIGHT_MODEL_LOCAL_VIEWER = 0x0B51 - LIGHT_MODEL_TWO_SIDE = 0x0B52 - LINE_SMOOTH_HINT = 0x0C52 - LINE_STIPPLE_PATTERN = 0x0B25 - LINE_STIPPLE_REPEAT = 0x0B26 - LINE_WIDTH = 0x0B21 - LINE_WIDTH_GRANULARITY = 0x0B23 - LINE_WIDTH_RANGE = 0x0B22 - LIST_BASE = 0x0B32 - LIST_INDEX = 0x0B33 - LIST_MODE = 0x0B30 - LOGIC_OP_MODE = 0x0BF0 - MAP1_GRID_DOMAIN = 0x0DD0 - MAP1_GRID_SEGMENTS = 0x0DD1 - MAP2_GRID_DOMAIN = 0x0DD2 - MAP2_GRID_SEGMENTS = 0x0DD3 - MAP_COLOR = 0x0D10 - MAP_STENCIL = 0x0D11 - MATRIX_MODE = 0x0BA0 - MAX_ATTRIB_STACK_DEPTH = 0x0D35 - MAX_CLIENT_ATTRIB_STACK_DEPTH = 0x0D3B - MAX_CLIP_PLANES = 0x0D32 - MAX_EVAL_ORDER = 0x0D30 - MAX_LIGHTS = 0x0D31 - MAX_LIST_NESTING = 0x0B31 - MAX_MODELVIEW_STACK_DEPTH = 0x0D36 - MAX_NAME_STACK_DEPTH = 0x0D37 - MAX_PIXEL_MAP_TABLE = 0x0D34 - MAX_PROJECTION_STACK_DEPTH = 0x0D38 - MAX_TEXTURE_SIZE = 0x0D33 - MAX_TEXTURE_STACK_DEPTH = 0x0D39 - MAX_VIEWPORT_DIMS = 0x0D3A - MODELVIEW_MATRIX = 0x0BA6 - MODELVIEW_STACK_DEPTH = 0x0BA3 - NAME_STACK_DEPTH = 0x0D70 - NORMAL_ARRAY_STRIDE = 0x807F - NORMAL_ARRAY_TYPE = 0x807E - PACK_ALIGNMENT = 0x0D05 - PACK_LSB_FIRST = 0x0D01 - PACK_ROW_LENGTH = 0x0D02 - PACK_SKIP_PIXELS = 0x0D04 - PACK_SKIP_ROWS = 0x0D03 - PACK_SWAP_BYTES = 0x0D00 - PERSPECTIVE_CORRECTION_HINT = 0x0C50 - PIXEL_MAP_A_TO_A_SIZE = 0x0CB9 - PIXEL_MAP_B_TO_B_SIZE = 0x0CB8 - PIXEL_MAP_G_TO_G_SIZE = 0x0CB7 - PIXEL_MAP_I_TO_A_SIZE = 0x0CB5 - PIXEL_MAP_I_TO_B_SIZE = 0x0CB4 - PIXEL_MAP_I_TO_G_SIZE = 0x0CB3 - PIXEL_MAP_I_TO_I_SIZE = 0x0CB0 - PIXEL_MAP_I_TO_R_SIZE = 0x0CB2 - PIXEL_MAP_R_TO_R_SIZE = 0x0CB6 - PIXEL_MAP_S_TO_S_SIZE = 0x0CB1 - POINT_SIZE = 0x0B11 - POINT_SIZE_GRANULARITY = 0x0B13 - POINT_SIZE_RANGE = 0x0B12 - POINT_SMOOTH_HINT = 0x0C51 - POLYGON_MODE = 0x0B40 - POLYGON_OFFSET_FACTOR = 0x8038 - POLYGON_OFFSET_UNITS = 0x2A00 - POLYGON_SMOOTH_HINT = 0x0C53 - PROJECTION_MATRIX = 0x0BA7 - PROJECTION_STACK_DEPTH = 0x0BA4 - READ_BUFFER = 0x0C02 - RED_BIAS = 0x0D15 - RED_BITS = 0x0D52 - RED_SCALE = 0x0D14 - RENDER_MODE = 0x0C40 - RGBA_MODE = 0x0C31 - SCISSOR_BOX = 0x0C10 - SELECTION_BUFFER_SIZE = 0x0DF4 - SHADE_MODEL = 0x0B54 - SMOOTH_LINE_WIDTH_GRANULARITY = 0x0B23 - SMOOTH_LINE_WIDTH_RANGE = 0x0B22 - SMOOTH_POINT_SIZE_GRANULARITY = 0x0B13 - SMOOTH_POINT_SIZE_RANGE = 0x0B12 - STENCIL_BITS = 0x0D57 - STENCIL_CLEAR_VALUE = 0x0B91 - STENCIL_FAIL = 0x0B94 - STENCIL_FUNC = 0x0B92 - STENCIL_PASS_DEPTH_FAIL = 0x0B95 - STENCIL_PASS_DEPTH_PASS = 0x0B96 - STENCIL_REF = 0x0B97 - STENCIL_VALUE_MASK = 0x0B93 - STENCIL_WRITEMASK = 0x0B98 - STEREO = 0x0C33 - SUBPIXEL_BITS = 0x0D50 - TEXTURE_BINDING_1D = 0x8068 - TEXTURE_BINDING_2D = 0x8069 - TEXTURE_BINDING_3D = 0x806A - TEXTURE_COORD_ARRAY_SIZE = 0x8088 - TEXTURE_COORD_ARRAY_STRIDE = 0x808A - TEXTURE_COORD_ARRAY_TYPE = 0x8089 - TEXTURE_MATRIX = 0x0BA8 - TEXTURE_STACK_DEPTH = 0x0BA5 - UNPACK_ALIGNMENT = 0x0CF5 - UNPACK_LSB_FIRST = 0x0CF1 - UNPACK_ROW_LENGTH = 0x0CF2 - UNPACK_SKIP_PIXELS = 0x0CF4 - UNPACK_SKIP_ROWS = 0x0CF3 - UNPACK_SWAP_BYTES = 0x0CF0 - VERTEX_ARRAY_SIZE = 0x807A - VERTEX_ARRAY_STRIDE = 0x807C - VERTEX_ARRAY_TYPE = 0x807B - VIEWPORT = 0x0BA2 - ZOOM_X = 0x0D16 - ZOOM_Y = 0x0D17 - - COLOR_ARRAY_POINTER = 0x8090 - EDGE_FLAG_ARRAY_POINTER = 0x8093 - FEEDBACK_BUFFER_POINTER = 0x0DF0 - INDEX_ARRAY_POINTER = 0x8091 - NORMAL_ARRAY_POINTER = 0x808F - SELECTION_BUFFER_POINTER = 0x0DF3 - TEXTURE_COORD_ARRAY_POINTER = 0x8092 - VERTEX_ARRAY_POINTER = 0x808E - - TEXTURE_ALPHA_SIZE = 0x805F - TEXTURE_BLUE_SIZE = 0x805E - TEXTURE_BORDER = 0x1005 - TEXTURE_BORDER_COLOR = 0x1004 - TEXTURE_COMPONENTS = 0x1003 - TEXTURE_GREEN_SIZE = 0x805D - TEXTURE_HEIGHT = 0x1001 - TEXTURE_INTENSITY_SIZE = 0x8061 - TEXTURE_INTERNAL_FORMAT = 0x1003 - TEXTURE_LUMINANCE_SIZE = 0x8060 - TEXTURE_MAG_FILTER = 0x2800 - TEXTURE_MIN_FILTER = 0x2801 - TEXTURE_PRIORITY = 0x8066 - TEXTURE_RED_SIZE = 0x805C - TEXTURE_RESIDENT = 0x8067 - TEXTURE_WIDTH = 0x1000 - TEXTURE_WRAP_S = 0x2802 - TEXTURE_WRAP_T = 0x2803 - - DONT_CARE = 0x1100 - FASTEST = 0x1101 - NICEST = 0x1102 - - FRAGMENT_SHADER_DERIVATIVE_HINT = 0x8B8B - GENERATE_MIPMAP_HINT = 0x8192 - TEXTURE_COMPRESSION_HINT = 0x84EF - - C3F_V3F = 0x2A24 - C4F_N3F_V3F = 0x2A26 - C4UB_V2F = 0x2A22 - C4UB_V3F = 0x2A23 - N3F_V3F = 0x2A25 - T2F_C3F_V3F = 0x2A2A - T2F_C4F_N3F_V3F = 0x2A2C - T2F_C4UB_V3F = 0x2A29 - T2F_N3F_V3F = 0x2A2B - T2F_V3F = 0x2A27 - T4F_C4F_N3F_V4F = 0x2A2D - T4F_V4F = 0x2A28 - V2F = 0x2A20 - V3F = 0x2A21 - - MODULATE = 0x2100 - REPLACE = 0x1E01 - - SEPARATE_SPECULAR_COLOR = 0x81FA - SINGLE_COLOR = 0x81F9 - - CONSTANT_ATTENUATION = 0x1207 - LINEAR_ATTENUATION = 0x1208 - POSITION = 0x1203 - QUADRATIC_ATTENUATION = 0x1209 - SPOT_CUTOFF = 0x1206 - SPOT_DIRECTION = 0x1204 - SPOT_EXPONENT = 0x1205 - - COMPILE = 0x1300 - COMPILE_AND_EXECUTE = 0x1301 - - AND = 0x1501 - AND_INVERTED = 0x1504 - AND_REVERSE = 0x1502 - CLEAR = 0x1500 - COPY = 0x1503 - COPY_INVERTED = 0x150C - EQUIV = 0x1509 - INVERT = 0x150A - NAND = 0x150E - NOOP = 0x1505 - NOR = 0x1508 - OR = 0x1507 - OR_INVERTED = 0x150D - OR_REVERSE = 0x150B - SET = 0x150F - XOR = 0x1506 - - COLOR_INDEXES = 0x1603 - SHININESS = 0x1601 - - MODELVIEW = 0x1700 - PROJECTION = 0x1701 - TEXTURE = 0x1702 - - LINE = 0x1B01 - POINT = 0x1B00 - - FILL = 0x1B02 - - COLOR = 0x1800 - DEPTH = 0x1801 - STENCIL = 0x1802 - - ALPHA = 0x1906 - BLUE = 0x1905 - COLOR_INDEX = 0x1900 - DEPTH_COMPONENT = 0x1902 - GREEN = 0x1904 - LUMINANCE = 0x1909 - LUMINANCE_ALPHA = 0x190A - RED = 0x1903 - RGB = 0x1907 - RGBA = 0x1908 - STENCIL_INDEX = 0x1901 - - ALPHA12 = 0x803D - ALPHA16 = 0x803E - ALPHA4 = 0x803B - ALPHA8 = 0x803C - INTENSITY = 0x8049 - INTENSITY12 = 0x804C - INTENSITY16 = 0x804D - INTENSITY4 = 0x804A - INTENSITY8 = 0x804B - LUMINANCE12 = 0x8041 - LUMINANCE12_ALPHA12 = 0x8047 - LUMINANCE12_ALPHA4 = 0x8046 - LUMINANCE16 = 0x8042 - LUMINANCE16_ALPHA16 = 0x8048 - LUMINANCE4 = 0x803F - LUMINANCE4_ALPHA4 = 0x8043 - LUMINANCE6_ALPHA2 = 0x8044 - LUMINANCE8 = 0x8040 - LUMINANCE8_ALPHA8 = 0x8045 - R3_G3_B2 = 0x2A10 - RGB10 = 0x8052 - RGB10_A2 = 0x8059 - RGB12 = 0x8053 - RGB16 = 0x8054 - RGB4 = 0x804F - RGB5 = 0x8050 - RGB5_A1 = 0x8057 - RGB8 = 0x8051 - RGBA12 = 0x805A - RGBA16 = 0x805B - RGBA2 = 0x8055 - RGBA4 = 0x8056 - RGBA8 = 0x8058 - - PACK_IMAGE_HEIGHT = 0x806C - PACK_SKIP_IMAGES = 0x806B - UNPACK_IMAGE_HEIGHT = 0x806E - UNPACK_SKIP_IMAGES = 0x806D - - BITMAP = 0x1A00 - UNSIGNED_BYTE_3_3_2 = 0x8032 - UNSIGNED_INT_10_10_10_2 = 0x8036 - UNSIGNED_INT_8_8_8_8 = 0x8035 - UNSIGNED_SHORT_4_4_4_4 = 0x8033 - UNSIGNED_SHORT_5_5_5_1 = 0x8034 - - POINT_DISTANCE_ATTENUATION = 0x8129 - POINT_FADE_THRESHOLD_SIZE = 0x8128 - POINT_SIZE_MAX = 0x8127 - POINT_SIZE_MIN = 0x8126 - - LINES = 0x0001 - LINE_LOOP = 0x0002 - LINE_STRIP = 0x0003 - POINTS = 0x0000 - POLYGON = 0x0009 - QUADS = 0x0007 - QUAD_STRIP = 0x0008 - TRIANGLES = 0x0004 - TRIANGLE_FAN = 0x0006 - TRIANGLE_STRIP = 0x0005 - - FEEDBACK = 0x1C01 - RENDER = 0x1C00 - SELECT = 0x1C02 - - FLAT = 0x1D00 - SMOOTH = 0x1D01 - - DECR = 0x1E03 - INCR = 0x1E02 - KEEP = 0x1E00 - - EXTENSIONS = 0x1F03 - RENDERER = 0x1F01 - VENDOR = 0x1F00 - VERSION = 0x1F02 - - S = 0x2000 - T = 0x2001 - R = 0x2002 - Q = 0x2003 - - DECAL = 0x2101 - - TEXTURE_ENV_COLOR = 0x2201 - TEXTURE_ENV_MODE = 0x2200 - - TEXTURE_ENV = 0x2300 - - EYE_LINEAR = 0x2400 - OBJECT_LINEAR = 0x2401 - SPHERE_MAP = 0x2402 - - EYE_PLANE = 0x2502 - OBJECT_PLANE = 0x2501 - TEXTURE_GEN_MODE = 0x2500 - - NEAREST = 0x2600 - - LINEAR_MIPMAP_LINEAR = 0x2703 - LINEAR_MIPMAP_NEAREST = 0x2701 - NEAREST_MIPMAP_LINEAR = 0x2702 - NEAREST_MIPMAP_NEAREST = 0x2700 - - GENERATE_MIPMAP = 0x8191 - TEXTURE_WRAP_R = 0x8072 - - PROXY_TEXTURE_1D = 0x8063 - PROXY_TEXTURE_2D = 0x8064 - PROXY_TEXTURE_3D = 0x8070 - TEXTURE_3D = 0x806F - TEXTURE_BASE_LEVEL = 0x813C - TEXTURE_MAX_LEVEL = 0x813D - TEXTURE_MAX_LOD = 0x813B - TEXTURE_MIN_LOD = 0x813A - - CLAMP = 0x2900 - CLAMP_TO_BORDER = 0x812D - CLAMP_TO_EDGE = 0x812F - REPEAT = 0x2901 - - CONSTANT_COLOR = 0x8001 - ONE_MINUS_CONSTANT_COLOR = 0x8002 - CONSTANT_ALPHA = 0x8003 - ONE_MINUS_CONSTANT_ALPHA = 0x8004 - FUNC_ADD = 0x8006 - MIN = 0x8007 - MAX = 0x8008 - BLEND_EQUATION_RGB = 0x8009 - FUNC_SUBTRACT = 0x800A - FUNC_REVERSE_SUBTRACT = 0x800B - RESCALE_NORMAL = 0x803A - TEXTURE_DEPTH = 0x8071 - MAX_3D_TEXTURE_SIZE = 0x8073 - MULTISAMPLE = 0x809D - SAMPLE_ALPHA_TO_COVERAGE = 0x809E - SAMPLE_ALPHA_TO_ONE = 0x809F - SAMPLE_COVERAGE = 0x80A0 - SAMPLE_BUFFERS = 0x80A8 - SAMPLES = 0x80A9 - SAMPLE_COVERAGE_VALUE = 0x80AA - SAMPLE_COVERAGE_INVERT = 0x80AB - BLEND_DST_RGB = 0x80C8 - BLEND_SRC_RGB = 0x80C9 - BLEND_DST_ALPHA = 0x80CA - BLEND_SRC_ALPHA = 0x80CB - BGR = 0x80E0 - BGRA = 0x80E1 - MAX_ELEMENTS_VERTICES = 0x80E8 - MAX_ELEMENTS_INDICES = 0x80E9 - DEPTH_COMPONENT16 = 0x81A5 - DEPTH_COMPONENT24 = 0x81A6 - DEPTH_COMPONENT32 = 0x81A7 - UNSIGNED_BYTE_2_3_3_REV = 0x8362 - UNSIGNED_SHORT_5_6_5 = 0x8363 - UNSIGNED_SHORT_5_6_5_REV = 0x8364 - UNSIGNED_SHORT_4_4_4_4_REV = 0x8365 - UNSIGNED_SHORT_1_5_5_5_REV = 0x8366 - UNSIGNED_INT_8_8_8_8_REV = 0x8367 - UNSIGNED_INT_2_10_10_10_REV = 0x8368 - MIRRORED_REPEAT = 0x8370 - FOG_COORDINATE_SOURCE = 0x8450 - FOG_COORD_SRC = 0x8450 - FOG_COORDINATE = 0x8451 - FOG_COORD = 0x8451 - FRAGMENT_DEPTH = 0x8452 - CURRENT_FOG_COORDINATE = 0x8453 - CURRENT_FOG_COORD = 0x8453 - FOG_COORDINATE_ARRAY_TYPE = 0x8454 - FOG_COORD_ARRAY_TYPE = 0x8454 - FOG_COORDINATE_ARRAY_STRIDE = 0x8455 - FOG_COORD_ARRAY_STRIDE = 0x8455 - FOG_COORDINATE_ARRAY_POINTER = 0x8456 - FOG_COORD_ARRAY_POINTER = 0x8456 - FOG_COORDINATE_ARRAY = 0x8457 - FOG_COORD_ARRAY = 0x8457 - COLOR_SUM = 0x8458 - CURRENT_SECONDARY_COLOR = 0x8459 - SECONDARY_COLOR_ARRAY_SIZE = 0x845A - SECONDARY_COLOR_ARRAY_TYPE = 0x845B - SECONDARY_COLOR_ARRAY_STRIDE = 0x845C - SECONDARY_COLOR_ARRAY_POINTER = 0x845D - SECONDARY_COLOR_ARRAY = 0x845E - CURRENT_RASTER_SECONDARY_COLOR = 0x845F - TEXTURE0 = 0x84C0 - TEXTURE1 = 0x84C1 - TEXTURE2 = 0x84C2 - TEXTURE3 = 0x84C3 - TEXTURE4 = 0x84C4 - TEXTURE5 = 0x84C5 - TEXTURE6 = 0x84C6 - TEXTURE7 = 0x84C7 - TEXTURE8 = 0x84C8 - TEXTURE9 = 0x84C9 - TEXTURE10 = 0x84CA - TEXTURE11 = 0x84CB - TEXTURE12 = 0x84CC - TEXTURE13 = 0x84CD - TEXTURE14 = 0x84CE - TEXTURE15 = 0x84CF - TEXTURE16 = 0x84D0 - TEXTURE17 = 0x84D1 - TEXTURE18 = 0x84D2 - TEXTURE19 = 0x84D3 - TEXTURE20 = 0x84D4 - TEXTURE21 = 0x84D5 - TEXTURE22 = 0x84D6 - TEXTURE23 = 0x84D7 - TEXTURE24 = 0x84D8 - TEXTURE25 = 0x84D9 - TEXTURE26 = 0x84DA - TEXTURE27 = 0x84DB - TEXTURE28 = 0x84DC - TEXTURE29 = 0x84DD - TEXTURE30 = 0x84DE - TEXTURE31 = 0x84DF - ACTIVE_TEXTURE = 0x84E0 - CLIENT_ACTIVE_TEXTURE = 0x84E1 - MAX_TEXTURE_UNITS = 0x84E2 - TRANSPOSE_MODELVIEW_MATRIX = 0x84E3 - TRANSPOSE_PROJECTION_MATRIX = 0x84E4 - TRANSPOSE_TEXTURE_MATRIX = 0x84E5 - TRANSPOSE_COLOR_MATRIX = 0x84E6 - SUBTRACT = 0x84E7 - COMPRESSED_ALPHA = 0x84E9 - COMPRESSED_LUMINANCE = 0x84EA - COMPRESSED_LUMINANCE_ALPHA = 0x84EB - COMPRESSED_INTENSITY = 0x84EC - COMPRESSED_RGB = 0x84ED - COMPRESSED_RGBA = 0x84EE - MAX_TEXTURE_LOD_BIAS = 0x84FD - TEXTURE_FILTER_CONTROL = 0x8500 - TEXTURE_LOD_BIAS = 0x8501 - INCR_WRAP = 0x8507 - DECR_WRAP = 0x8508 - NORMAL_MAP = 0x8511 - REFLECTION_MAP = 0x8512 - TEXTURE_CUBE_MAP = 0x8513 - TEXTURE_BINDING_CUBE_MAP = 0x8514 - TEXTURE_CUBE_MAP_POSITIVE_X = 0x8515 - TEXTURE_CUBE_MAP_NEGATIVE_X = 0x8516 - TEXTURE_CUBE_MAP_POSITIVE_Y = 0x8517 - TEXTURE_CUBE_MAP_NEGATIVE_Y = 0x8518 - TEXTURE_CUBE_MAP_POSITIVE_Z = 0x8519 - TEXTURE_CUBE_MAP_NEGATIVE_Z = 0x851A - PROXY_TEXTURE_CUBE_MAP = 0x851B - MAX_CUBE_MAP_TEXTURE_SIZE = 0x851C - COMBINE = 0x8570 - COMBINE_RGB = 0x8571 - COMBINE_ALPHA = 0x8572 - RGB_SCALE = 0x8573 - ADD_SIGNED = 0x8574 - INTERPOLATE = 0x8575 - CONSTANT = 0x8576 - PRIMARY_COLOR = 0x8577 - PREVIOUS = 0x8578 - SOURCE0_RGB = 0x8580 - SRC0_RGB = 0x8580 - SOURCE1_RGB = 0x8581 - SRC1_RGB = 0x8581 - SOURCE2_RGB = 0x8582 - SRC2_RGB = 0x8582 - SOURCE0_ALPHA = 0x8588 - SRC0_ALPHA = 0x8588 - SOURCE1_ALPHA = 0x8589 - SRC1_ALPHA = 0x8589 - SOURCE2_ALPHA = 0x858A - SRC2_ALPHA = 0x858A - OPERAND0_RGB = 0x8590 - OPERAND1_RGB = 0x8591 - OPERAND2_RGB = 0x8592 - OPERAND0_ALPHA = 0x8598 - OPERAND1_ALPHA = 0x8599 - OPERAND2_ALPHA = 0x859A - VERTEX_ATTRIB_ARRAY_ENABLED = 0x8622 - VERTEX_ATTRIB_ARRAY_SIZE = 0x8623 - VERTEX_ATTRIB_ARRAY_STRIDE = 0x8624 - VERTEX_ATTRIB_ARRAY_TYPE = 0x8625 - CURRENT_VERTEX_ATTRIB = 0x8626 - VERTEX_PROGRAM_POINT_SIZE = 0x8642 - VERTEX_PROGRAM_TWO_SIDE = 0x8643 - VERTEX_ATTRIB_ARRAY_POINTER = 0x8645 - TEXTURE_COMPRESSED_IMAGE_SIZE = 0x86A0 - TEXTURE_COMPRESSED = 0x86A1 - NUM_COMPRESSED_TEXTURE_FORMATS = 0x86A2 - COMPRESSED_TEXTURE_FORMATS = 0x86A3 - DOT3_RGB = 0x86AE - DOT3_RGBA = 0x86AF - BUFFER_SIZE = 0x8764 - BUFFER_USAGE = 0x8765 - STENCIL_BACK_FUNC = 0x8800 - STENCIL_BACK_FAIL = 0x8801 - STENCIL_BACK_PASS_DEPTH_FAIL = 0x8802 - STENCIL_BACK_PASS_DEPTH_PASS = 0x8803 - MAX_DRAW_BUFFERS = 0x8824 - DRAW_BUFFER0 = 0x8825 - DRAW_BUFFER1 = 0x8826 - DRAW_BUFFER2 = 0x8827 - DRAW_BUFFER3 = 0x8828 - DRAW_BUFFER4 = 0x8829 - DRAW_BUFFER5 = 0x882A - DRAW_BUFFER6 = 0x882B - DRAW_BUFFER7 = 0x882C - DRAW_BUFFER8 = 0x882D - DRAW_BUFFER9 = 0x882E - DRAW_BUFFER10 = 0x882F - DRAW_BUFFER11 = 0x8830 - DRAW_BUFFER12 = 0x8831 - DRAW_BUFFER13 = 0x8832 - DRAW_BUFFER14 = 0x8833 - DRAW_BUFFER15 = 0x8834 - BLEND_EQUATION_ALPHA = 0x883D - TEXTURE_DEPTH_SIZE = 0x884A - DEPTH_TEXTURE_MODE = 0x884B - TEXTURE_COMPARE_MODE = 0x884C - TEXTURE_COMPARE_FUNC = 0x884D - COMPARE_R_TO_TEXTURE = 0x884E - POINT_SPRITE = 0x8861 - COORD_REPLACE = 0x8862 - QUERY_COUNTER_BITS = 0x8864 - CURRENT_QUERY = 0x8865 - QUERY_RESULT = 0x8866 - QUERY_RESULT_AVAILABLE = 0x8867 - MAX_VERTEX_ATTRIBS = 0x8869 - VERTEX_ATTRIB_ARRAY_NORMALIZED = 0x886A - MAX_TEXTURE_COORDS = 0x8871 - MAX_TEXTURE_IMAGE_UNITS = 0x8872 - ARRAY_BUFFER = 0x8892 - ELEMENT_ARRAY_BUFFER = 0x8893 - ARRAY_BUFFER_BINDING = 0x8894 - ELEMENT_ARRAY_BUFFER_BINDING = 0x8895 - VERTEX_ARRAY_BUFFER_BINDING = 0x8896 - NORMAL_ARRAY_BUFFER_BINDING = 0x8897 - COLOR_ARRAY_BUFFER_BINDING = 0x8898 - INDEX_ARRAY_BUFFER_BINDING = 0x8899 - TEXTURE_COORD_ARRAY_BUFFER_BINDING = 0x889A - EDGE_FLAG_ARRAY_BUFFER_BINDING = 0x889B - SECONDARY_COLOR_ARRAY_BUFFER_BINDING = 0x889C - FOG_COORDINATE_ARRAY_BUFFER_BINDING = 0x889D - FOG_COORD_ARRAY_BUFFER_BINDING = 0x889D - WEIGHT_ARRAY_BUFFER_BINDING = 0x889E - VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = 0x889F - READ_ONLY = 0x88B8 - WRITE_ONLY = 0x88B9 - READ_WRITE = 0x88BA - BUFFER_ACCESS = 0x88BB - BUFFER_MAPPED = 0x88BC - BUFFER_MAP_POINTER = 0x88BD - STREAM_DRAW = 0x88E0 - STREAM_READ = 0x88E1 - STREAM_COPY = 0x88E2 - STATIC_DRAW = 0x88E4 - STATIC_READ = 0x88E5 - STATIC_COPY = 0x88E6 - DYNAMIC_DRAW = 0x88E8 - DYNAMIC_READ = 0x88E9 - DYNAMIC_COPY = 0x88EA - PIXEL_PACK_BUFFER = 0x88EB - PIXEL_UNPACK_BUFFER = 0x88EC - PIXEL_PACK_BUFFER_BINDING = 0x88ED - PIXEL_UNPACK_BUFFER_BINDING = 0x88EF - SAMPLES_PASSED = 0x8914 - FRAGMENT_SHADER = 0x8B30 - VERTEX_SHADER = 0x8B31 - MAX_FRAGMENT_UNIFORM_COMPONENTS = 0x8B49 - MAX_VERTEX_UNIFORM_COMPONENTS = 0x8B4A - MAX_VARYING_FLOATS = 0x8B4B - MAX_VERTEX_TEXTURE_IMAGE_UNITS = 0x8B4C - MAX_COMBINED_TEXTURE_IMAGE_UNITS = 0x8B4D - SHADER_TYPE = 0x8B4F - FLOAT_VEC2 = 0x8B50 - FLOAT_VEC3 = 0x8B51 - FLOAT_VEC4 = 0x8B52 - INT_VEC2 = 0x8B53 - INT_VEC3 = 0x8B54 - INT_VEC4 = 0x8B55 - BOOL = 0x8B56 - BOOL_VEC2 = 0x8B57 - BOOL_VEC3 = 0x8B58 - BOOL_VEC4 = 0x8B59 - FLOAT_MAT2 = 0x8B5A - FLOAT_MAT3 = 0x8B5B - FLOAT_MAT4 = 0x8B5C - SAMPLER_1D = 0x8B5D - SAMPLER_2D = 0x8B5E - SAMPLER_3D = 0x8B5F - SAMPLER_CUBE = 0x8B60 - SAMPLER_1D_SHADOW = 0x8B61 - SAMPLER_2D_SHADOW = 0x8B62 - FLOAT_MAT2x3 = 0x8B65 - FLOAT_MAT2x4 = 0x8B66 - FLOAT_MAT3x2 = 0x8B67 - FLOAT_MAT3x4 = 0x8B68 - FLOAT_MAT4x2 = 0x8B69 - FLOAT_MAT4x3 = 0x8B6A - DELETE_STATUS = 0x8B80 - COMPILE_STATUS = 0x8B81 - LINK_STATUS = 0x8B82 - VALIDATE_STATUS = 0x8B83 - INFO_LOG_LENGTH = 0x8B84 - ATTACHED_SHADERS = 0x8B85 - ACTIVE_UNIFORMS = 0x8B86 - ACTIVE_UNIFORM_MAX_LENGTH = 0x8B87 - SHADER_SOURCE_LENGTH = 0x8B88 - ACTIVE_ATTRIBUTES = 0x8B89 - ACTIVE_ATTRIBUTE_MAX_LENGTH = 0x8B8A - SHADING_LANGUAGE_VERSION = 0x8B8C - CURRENT_PROGRAM = 0x8B8D - SRGB = 0x8C40 - SRGB8 = 0x8C41 - SRGB_ALPHA = 0x8C42 - SRGB8_ALPHA8 = 0x8C43 - SLUMINANCE_ALPHA = 0x8C44 - SLUMINANCE8_ALPHA8 = 0x8C45 - SLUMINANCE = 0x8C46 - SLUMINANCE8 = 0x8C47 - COMPRESSED_SRGB = 0x8C48 - COMPRESSED_SRGB_ALPHA = 0x8C49 - COMPRESSED_SLUMINANCE = 0x8C4A - COMPRESSED_SLUMINANCE_ALPHA = 0x8C4B - POINT_SPRITE_COORD_ORIGIN = 0x8CA0 - LOWER_LEFT = 0x8CA1 - UPPER_LEFT = 0x8CA2 - STENCIL_BACK_REF = 0x8CA3 - STENCIL_BACK_VALUE_MASK = 0x8CA4 - STENCIL_BACK_WRITEMASK = 0x8CA5 -) - -// https://www.opengl.org/sdk/docs/man2/xhtml/glViewport.xml -func (gl *GL) Viewport(x, y, width, height int) { - C.gl2_1_glViewport(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// DepthRange specifies the mapping of depth values from normalized device -// coordinates to window coordinates. -// -// Parameter nearVal specifies the mapping of the near clipping plane to window -// coordinates (defaults to 0), while farVal specifies the mapping of the far -// clipping plane to window coordinates (defaults to 1). -// -// After clipping and division by w, depth coordinates range from -1 to 1, -// corresponding to the near and far clipping planes. DepthRange specifies a -// linear mapping of the normalized depth coordinates in this range to window -// depth coordinates. Regardless of the actual depth buffer implementation, -// window coordinate depth values are treated as though they range from 0 through 1 -// (like color components). Thus, the values accepted by DepthRange are both -// clamped to this range before they are accepted. -// -// The default setting of (0, 1) maps the near plane to 0 and the far plane to 1. -// With this mapping, the depth buffer range is fully utilized. -// -// It is not necessary that nearVal be less than farVal. Reverse mappings such as -// nearVal 1, and farVal 0 are acceptable. -// -// GL.INVALID_OPERATION is generated if DepthRange is executed between the -// execution of Begin and the corresponding execution of End. -func (gl *GL) DepthRange(nearVal, farVal float64) { - C.gl2_1_glDepthRange(gl.funcs, C.GLdouble(nearVal), C.GLdouble(farVal)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIsEnabled.xml -func (gl *GL) IsEnabled(cap glbase.Enum) bool { - glresult := C.gl2_1_glIsEnabled(gl.funcs, C.GLenum(cap)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexLevelParameteriv.xml -func (gl *GL) GetTexLevelParameteriv(target glbase.Enum, level int, pname glbase.Enum, params []int32) { - C.gl2_1_glGetTexLevelParameteriv(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexLevelParameterfv.xml -func (gl *GL) GetTexLevelParameterfv(target glbase.Enum, level int, pname glbase.Enum, params []float32) { - C.gl2_1_glGetTexLevelParameterfv(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexParameteriv.xml -func (gl *GL) GetTexParameteriv(target, pname glbase.Enum, params []int32) { - C.gl2_1_glGetTexParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexParameterfv.xml -func (gl *GL) GetTexParameterfv(target, pname glbase.Enum, params []float32) { - C.gl2_1_glGetTexParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexImage.xml -func (gl *GL) GetTexImage(target glbase.Enum, level int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl2_1_glGetTexImage(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetIntegerv.xml -func (gl *GL) GetIntegerv(pname glbase.Enum, params []int32) { - C.gl2_1_glGetIntegerv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetFloatv.xml -func (gl *GL) GetFloatv(pname glbase.Enum, params []float32) { - C.gl2_1_glGetFloatv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetError.xml -func (gl *GL) GetError() glbase.Enum { - glresult := C.gl2_1_glGetError(gl.funcs) - return glbase.Enum(glresult) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetDoublev.xml -func (gl *GL) GetDoublev(pname glbase.Enum, params []float64) { - C.gl2_1_glGetDoublev(gl.funcs, C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetBooleanv.xml -func (gl *GL) GetBooleanv(pname glbase.Enum, params []bool) { - C.gl2_1_glGetBooleanv(gl.funcs, C.GLenum(pname), (*C.GLboolean)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glReadPixels.xml -func (gl *GL) ReadPixels(x, y, width, height int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl2_1_glReadPixels(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glReadBuffer.xml -func (gl *GL) ReadBuffer(mode glbase.Enum) { - C.gl2_1_glReadBuffer(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPixelStorei.xml -func (gl *GL) PixelStorei(pname glbase.Enum, param int32) { - C.gl2_1_glPixelStorei(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPixelStoref.xml -func (gl *GL) PixelStoref(pname glbase.Enum, param float32) { - C.gl2_1_glPixelStoref(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDepthFunc.xml -func (gl *GL) DepthFunc(glfunc glbase.Enum) { - C.gl2_1_glDepthFunc(gl.funcs, C.GLenum(glfunc)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glStencilOp.xml -func (gl *GL) StencilOp(fail, zfail, zpass glbase.Enum) { - C.gl2_1_glStencilOp(gl.funcs, C.GLenum(fail), C.GLenum(zfail), C.GLenum(zpass)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glStencilFunc.xml -func (gl *GL) StencilFunc(glfunc glbase.Enum, ref int32, mask uint32) { - C.gl2_1_glStencilFunc(gl.funcs, C.GLenum(glfunc), C.GLint(ref), C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLogicOp.xml -func (gl *GL) LogicOp(opcode glbase.Enum) { - C.gl2_1_glLogicOp(gl.funcs, C.GLenum(opcode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glBlendFunc.xml -func (gl *GL) BlendFunc(sfactor, dfactor glbase.Enum) { - C.gl2_1_glBlendFunc(gl.funcs, C.GLenum(sfactor), C.GLenum(dfactor)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFlush.xml -func (gl *GL) Flush() { - C.gl2_1_glFlush(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFinish.xml -func (gl *GL) Finish() { - C.gl2_1_glFinish(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEnable.xml -func (gl *GL) Enable(cap glbase.Enum) { - C.gl2_1_glEnable(gl.funcs, C.GLenum(cap)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDisable.xml -func (gl *GL) Disable(cap glbase.Enum) { - C.gl2_1_glDisable(gl.funcs, C.GLenum(cap)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDepthMask.xml -func (gl *GL) DepthMask(flag bool) { - C.gl2_1_glDepthMask(gl.funcs, *(*C.GLboolean)(unsafe.Pointer(&flag))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColorMask.xml -func (gl *GL) ColorMask(red, green, blue, alpha bool) { - C.gl2_1_glColorMask(gl.funcs, *(*C.GLboolean)(unsafe.Pointer(&red)), *(*C.GLboolean)(unsafe.Pointer(&green)), *(*C.GLboolean)(unsafe.Pointer(&blue)), *(*C.GLboolean)(unsafe.Pointer(&alpha))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glStencilMask.xml -func (gl *GL) StencilMask(mask uint32) { - C.gl2_1_glStencilMask(gl.funcs, C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glClearDepth.xml -func (gl *GL) ClearDepth(depth float64) { - C.gl2_1_glClearDepth(gl.funcs, C.GLdouble(depth)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glClearStencil.xml -func (gl *GL) ClearStencil(s int32) { - C.gl2_1_glClearStencil(gl.funcs, C.GLint(s)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glClearColor.xml -func (gl *GL) ClearColor(red, green, blue, alpha float32) { - C.gl2_1_glClearColor(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glClear.xml -func (gl *GL) Clear(mask glbase.Bitfield) { - C.gl2_1_glClear(gl.funcs, C.GLbitfield(mask)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDrawBuffer.xml -func (gl *GL) DrawBuffer(mode glbase.Enum) { - C.gl2_1_glDrawBuffer(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexImage2D.xml -func (gl *GL) TexImage2D(target glbase.Enum, level int, internalFormat int32, width, height, border int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl2_1_glTexImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLint(border), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexImage1D.xml -func (gl *GL) TexImage1D(target glbase.Enum, level int, internalFormat int32, width, border int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl2_1_glTexImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(internalFormat), C.GLsizei(width), C.GLint(border), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexParameteriv.xml -func (gl *GL) TexParameteriv(target, pname glbase.Enum, params []int32) { - C.gl2_1_glTexParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexParameteri.xml -func (gl *GL) TexParameteri(target, pname glbase.Enum, param int32) { - C.gl2_1_glTexParameteri(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexParameterfv.xml -func (gl *GL) TexParameterfv(target, pname glbase.Enum, params []float32) { - C.gl2_1_glTexParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexParameterf.xml -func (gl *GL) TexParameterf(target, pname glbase.Enum, param float32) { - C.gl2_1_glTexParameterf(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glScissor.xml -func (gl *GL) Scissor(x, y, width, height int) { - C.gl2_1_glScissor(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPolygonMode.xml -func (gl *GL) PolygonMode(face, mode glbase.Enum) { - C.gl2_1_glPolygonMode(gl.funcs, C.GLenum(face), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPointSize.xml -func (gl *GL) PointSize(size float32) { - C.gl2_1_glPointSize(gl.funcs, C.GLfloat(size)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLineWidth.xml -func (gl *GL) LineWidth(width float32) { - C.gl2_1_glLineWidth(gl.funcs, C.GLfloat(width)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glHint.xml -func (gl *GL) Hint(target, mode glbase.Enum) { - C.gl2_1_glHint(gl.funcs, C.GLenum(target), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFrontFace.xml -func (gl *GL) FrontFace(mode glbase.Enum) { - C.gl2_1_glFrontFace(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCullFace.xml -func (gl *GL) CullFace(mode glbase.Enum) { - C.gl2_1_glCullFace(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexubv.xml -func (gl *GL) Indexubv(c []uint8) { - C.gl2_1_glIndexubv(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexub.xml -func (gl *GL) Indexub(c uint8) { - C.gl2_1_glIndexub(gl.funcs, C.GLubyte(c)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIsTexture.xml -func (gl *GL) IsTexture(texture glbase.Texture) bool { - glresult := C.gl2_1_glIsTexture(gl.funcs, C.GLuint(texture)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// GenTextures returns n texture names in textures. There is no guarantee -// that the names form a contiguous set of integers; however, it is -// guaranteed that none of the returned names was in use immediately before -// the call to GenTextures. -// -// The generated textures have no dimensionality; they assume the -// dimensionality of the texture target to which they are first bound (see -// BindTexture). -// -// Texture names returned by a call to GenTextures are not returned by -// subsequent calls, unless they are first deleted with DeleteTextures. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// GenTextures is available in GL version 2.0 or greater. -func (gl *GL) GenTextures(n int) []glbase.Texture { - if n == 0 { - return nil - } - textures := make([]glbase.Texture, n) - C.gl2_1_glGenTextures(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0]))) - return textures -} - -// DeleteTextures deletes the textures objects whose names are stored -// in the textures slice. After a texture is deleted, it has no contents or -// dimensionality, and its name is free for reuse (for example by -// GenTextures). If a texture that is currently bound is deleted, the binding -// reverts to 0 (the default texture). -// -// DeleteTextures silently ignores 0's and names that do not correspond to -// existing textures. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// DeleteTextures is available in GL version 2.0 or greater. -func (gl *GL) DeleteTextures(textures []glbase.Texture) { - n := len(textures) - if n == 0 { - return - } - C.gl2_1_glDeleteTextures(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glBindTexture.xml -func (gl *GL) BindTexture(target glbase.Enum, texture glbase.Texture) { - C.gl2_1_glBindTexture(gl.funcs, C.GLenum(target), C.GLuint(texture)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexSubImage2D.xml -func (gl *GL) TexSubImage2D(target glbase.Enum, level, xoffset, yoffset, width, height int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl2_1_glTexSubImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexSubImage1D.xml -func (gl *GL) TexSubImage1D(target glbase.Enum, level, xoffset, width int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl2_1_glTexSubImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLsizei(width), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyTexSubImage2D.xml -func (gl *GL) CopyTexSubImage2D(target glbase.Enum, level, xoffset, yoffset, x, y, width, height int) { - C.gl2_1_glCopyTexSubImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyTexSubImage1D.xml -func (gl *GL) CopyTexSubImage1D(target glbase.Enum, level, xoffset, x, y, width int) { - C.gl2_1_glCopyTexSubImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(x), C.GLint(y), C.GLsizei(width)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyTexImage2D.xml -func (gl *GL) CopyTexImage2D(target glbase.Enum, level int, internalFormat glbase.Enum, x, y, width, height, border int) { - C.gl2_1_glCopyTexImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height), C.GLint(border)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyTexImage1D.xml -func (gl *GL) CopyTexImage1D(target glbase.Enum, level int, internalFormat glbase.Enum, x, y, width, border int) { - C.gl2_1_glCopyTexImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLint(border)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPolygonOffset.xml -func (gl *GL) PolygonOffset(factor, units float32) { - C.gl2_1_glPolygonOffset(gl.funcs, C.GLfloat(factor), C.GLfloat(units)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDrawElements.xml -func (gl *GL) DrawElements(mode glbase.Enum, count int, gltype glbase.Enum, indices interface{}) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl2_1_glDrawElements(gl.funcs, C.GLenum(mode), C.GLsizei(count), C.GLenum(gltype), indices_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDrawArrays.xml -func (gl *GL) DrawArrays(mode glbase.Enum, first, count int) { - C.gl2_1_glDrawArrays(gl.funcs, C.GLenum(mode), C.GLint(first), C.GLsizei(count)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyTexSubImage3D.xml -func (gl *GL) CopyTexSubImage3D(target glbase.Enum, level, xoffset, yoffset int, zoffset int32, x, y, width, height int) { - C.gl2_1_glCopyTexSubImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(zoffset), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexSubImage3D.xml -func (gl *GL) TexSubImage3D(target glbase.Enum, level, xoffset, yoffset int, zoffset int32, width, height int, depth int32, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl2_1_glTexSubImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(zoffset), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexImage3D.xml -func (gl *GL) TexImage3D(target glbase.Enum, level int, internalFormat int32, width, height int, depth int32, border int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl2_1_glTexImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLint(border), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDrawRangeElements.xml -func (gl *GL) DrawRangeElements(mode glbase.Enum, start, end uint32, count int, gltype glbase.Enum, indices interface{}) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl2_1_glDrawRangeElements(gl.funcs, C.GLenum(mode), C.GLuint(start), C.GLuint(end), C.GLsizei(count), C.GLenum(gltype), indices_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glBlendEquation.xml -func (gl *GL) BlendEquation(mode glbase.Enum) { - C.gl2_1_glBlendEquation(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glBlendColor.xml -func (gl *GL) BlendColor(red, green, blue, alpha float32) { - C.gl2_1_glBlendColor(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetCompressedTexImage.xml -func (gl *GL) GetCompressedTexImage(target glbase.Enum, level int, img interface{}) { - var img_ptr unsafe.Pointer - var img_v = reflect.ValueOf(img) - if img != nil && img_v.Kind() != reflect.Slice { - panic("parameter img must be a slice") - } - if img != nil { - img_ptr = unsafe.Pointer(img_v.Index(0).Addr().Pointer()) - } - C.gl2_1_glGetCompressedTexImage(gl.funcs, C.GLenum(target), C.GLint(level), img_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCompressedTexSubImage1D.xml -func (gl *GL) CompressedTexSubImage1D(target glbase.Enum, level, xoffset, width int, format glbase.Enum, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl2_1_glCompressedTexSubImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLsizei(width), C.GLenum(format), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCompressedTexSubImage2D.xml -func (gl *GL) CompressedTexSubImage2D(target glbase.Enum, level, xoffset, yoffset, width, height int, format glbase.Enum, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl2_1_glCompressedTexSubImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCompressedTexSubImage3D.xml -func (gl *GL) CompressedTexSubImage3D(target glbase.Enum, level, xoffset, yoffset int, zoffset int32, width, height int, depth int32, format glbase.Enum, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl2_1_glCompressedTexSubImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(zoffset), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLenum(format), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCompressedTexImage1D.xml -func (gl *GL) CompressedTexImage1D(target glbase.Enum, level int, internalFormat glbase.Enum, width, border, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl2_1_glCompressedTexImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLsizei(width), C.GLint(border), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCompressedTexImage2D.xml -func (gl *GL) CompressedTexImage2D(target glbase.Enum, level int, internalFormat glbase.Enum, width, height, border, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl2_1_glCompressedTexImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLint(border), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCompressedTexImage3D.xml -func (gl *GL) CompressedTexImage3D(target glbase.Enum, level int, internalFormat glbase.Enum, width, height int, depth int32, border, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl2_1_glCompressedTexImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLint(border), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSampleCoverage.xml -func (gl *GL) SampleCoverage(value float32, invert bool) { - C.gl2_1_glSampleCoverage(gl.funcs, C.GLfloat(value), *(*C.GLboolean)(unsafe.Pointer(&invert))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glActiveTexture.xml -func (gl *GL) ActiveTexture(texture glbase.Enum) { - C.gl2_1_glActiveTexture(gl.funcs, C.GLenum(texture)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPointParameteriv.xml -func (gl *GL) PointParameteriv(pname glbase.Enum, params []int32) { - C.gl2_1_glPointParameteriv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPointParameteri.xml -func (gl *GL) PointParameteri(pname glbase.Enum, param int32) { - C.gl2_1_glPointParameteri(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPointParameterfv.xml -func (gl *GL) PointParameterfv(pname glbase.Enum, params []float32) { - C.gl2_1_glPointParameterfv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPointParameterf.xml -func (gl *GL) PointParameterf(pname glbase.Enum, param float32) { - C.gl2_1_glPointParameterf(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiDrawArrays.xml -func (gl *GL) MultiDrawArrays(mode glbase.Enum, first, count []int, drawcount int32) { - C.gl2_1_glMultiDrawArrays(gl.funcs, C.GLenum(mode), (*C.GLint)(unsafe.Pointer(&first[0])), (*C.GLsizei)(unsafe.Pointer(&count[0])), C.GLsizei(drawcount)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glBlendFuncSeparate.xml -func (gl *GL) BlendFuncSeparate(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha glbase.Enum) { - C.gl2_1_glBlendFuncSeparate(gl.funcs, C.GLenum(sfactorRGB), C.GLenum(dfactorRGB), C.GLenum(sfactorAlpha), C.GLenum(dfactorAlpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetBufferParameteriv.xml -func (gl *GL) GetBufferParameteriv(target, pname glbase.Enum, params []int32) { - C.gl2_1_glGetBufferParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glUnmapBuffer.xml -func (gl *GL) UnmapBuffer(target glbase.Enum) bool { - glresult := C.gl2_1_glUnmapBuffer(gl.funcs, C.GLenum(target)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetBufferSubData.xml -func (gl *GL) GetBufferSubData(target glbase.Enum, offset, size int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl2_1_glGetBufferSubData(gl.funcs, C.GLenum(target), C.GLintptr(offset), C.GLsizeiptr(size), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glBufferSubData.xml -func (gl *GL) BufferSubData(target glbase.Enum, offset, size int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl2_1_glBufferSubData(gl.funcs, C.GLenum(target), C.GLintptr(offset), C.GLsizeiptr(size), data_ptr) -} - -// BufferData creates a new data store for the buffer object currently -// bound to target. Any pre-existing data store is deleted. The new data -// store is created with the specified size in bytes and usage. If data is -// not nil, it must be a slice that is used to initialize the data store. -// In that case the size parameter is ignored and the store size will match -// the slice data size. -// -// In its initial state, the new data store is not mapped, it has a NULL -// mapped pointer, and its mapped access is GL.READ_WRITE. -// -// The target constant must be one of GL.ARRAY_BUFFER, GL.COPY_READ_BUFFER, -// GL.COPY_WRITE_BUFFER, GL.ELEMENT_ARRAY_BUFFER, GL.PIXEL_PACK_BUFFER, -// GL.PIXEL_UNPACK_BUFFER, GL.TEXTURE_BUFFER, GL.TRANSFORM_FEEDBACK_BUFFER, -// or GL.UNIFORM_BUFFER. -// -// The usage parameter is a hint to the GL implementation as to how a buffer -// object's data store will be accessed. This enables the GL implementation -// to make more intelligent decisions that may significantly impact buffer -// object performance. It does not, however, constrain the actual usage of -// the data store. usage can be broken down into two parts: first, the -// frequency of access (modification and usage), and second, the nature of -// that access. -// -// A usage frequency of STREAM and nature of DRAW is specified via the -// constant GL.STREAM_DRAW, for example. -// -// The usage frequency of access may be one of: -// -// STREAM -// The data store contents will be modified once and used at most a few times. -// -// STATIC -// The data store contents will be modified once and used many times. -// -// DYNAMIC -// The data store contents will be modified repeatedly and used many times. -// -// The usage nature of access may be one of: -// -// DRAW -// The data store contents are modified by the application, and used as -// the source for GL drawing and image specification commands. -// -// READ -// The data store contents are modified by reading data from the GL, -// and used to return that data when queried by the application. -// -// COPY -// The data store contents are modified by reading data from the GL, -// and used as the source for GL drawing and image specification -// commands. -// -// Clients must align data elements consistent with the requirements of the -// client platform, with an additional base-level requirement that an offset -// within a buffer to a datum comprising N bytes be a multiple of N. -// -// Error GL.INVALID_ENUM is generated if target is not one of the accepted -// buffer targets. GL.INVALID_ENUM is generated if usage is not -// GL.STREAM_DRAW, GL.STREAM_READ, GL.STREAM_COPY, GL.STATIC_DRAW, -// GL.STATIC_READ, GL.STATIC_COPY, GL.DYNAMIC_DRAW, GL.DYNAMIC_READ, or -// GL.DYNAMIC_COPY. GL.INVALID_VALUE is generated if size is negative. -// GL.INVALID_OPERATION is generated if the reserved buffer object name 0 is -// bound to target. GL.OUT_OF_MEMORY is generated if the GL is unable to -// create a data store with the specified size. -func (gl *GL) BufferData(target glbase.Enum, size int, data interface{}, usage glbase.Enum) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - if data != nil { - size = int(data_v.Type().Size()) * data_v.Len() - } - C.gl2_1_glBufferData(gl.funcs, C.GLenum(target), C.GLsizeiptr(size), data_ptr, C.GLenum(usage)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIsBuffer.xml -func (gl *GL) IsBuffer(buffer glbase.Buffer) bool { - glresult := C.gl2_1_glIsBuffer(gl.funcs, C.GLuint(buffer)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// GenBuffers returns n buffer object names. There is no guarantee that -// the names form a contiguous set of integers; however, it is guaranteed -// that none of the returned names was in use immediately before the call to -// GenBuffers. -// -// Buffer object names returned by a call to GenBuffers are not returned by -// subsequent calls, unless they are first deleted with DeleteBuffers. -// -// No buffer objects are associated with the returned buffer object names -// until they are first bound by calling BindBuffer. -// -// Error GL.INVALID_VALUE is generated if n is negative. GL.INVALID_OPERATION -// is generated if GenBuffers is executed between the execution of Begin -// and the corresponding execution of End. -// -// GenBuffers is available in GL version 1.5 or greater. -func (gl *GL) GenBuffers(n int) []glbase.Buffer { - if n == 0 { - return nil - } - buffers := make([]glbase.Buffer, n) - C.gl2_1_glGenBuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&buffers[0]))) - return buffers -} - -// DeleteBuffers deletes the buffer objects whose names are stored in the -// buffers slice. -// -// After a buffer object is deleted, it has no contents, and its name is free -// for reuse (for example by GenBuffers). If a buffer object that is -// currently bound is deleted, the binding reverts to 0 (the absence of any -// buffer object, which reverts to client memory usage). -// -// DeleteBuffers silently ignores 0's and names that do not correspond to -// existing buffer objects. -// -// Error GL.INVALID_VALUE is generated if n is negative. GL.INVALID_OPERATION -// is generated if DeleteBuffers is executed between the execution of Begin -// and the corresponding execution of End. -// -// DeleteBuffers is available in GL version 1.5 or greater. -func (gl *GL) DeleteBuffers(buffers []glbase.Buffer) { - n := len(buffers) - if n == 0 { - return - } - C.gl2_1_glDeleteBuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&buffers[0]))) -} - -// BindBuffer creates or puts in use a named buffer object. -// Calling BindBuffer with target set to GL.ARRAY_BUFFER, -// GL.ELEMENT_ARRAY_BUFFER, GL.PIXEL_PACK_BUFFER or GL.PIXEL_UNPACK_BUFFER -// and buffer set to the name of the new buffer object binds the buffer -// object name to the target. When a buffer object is bound to a target, the -// previous binding for that target is automatically broken. -// -// Buffer object names are unsigned integers. The value zero is reserved, but -// there is no default buffer object for each buffer object target. Instead, -// buffer set to zero effectively unbinds any buffer object previously bound, -// and restores client memory usage for that buffer object target. Buffer -// object names and the corresponding buffer object contents are local to the -// shared display-list space (see XCreateContext) of the current GL rendering -// context; two rendering contexts share buffer object names only if they -// also share display lists. -// -// GenBuffers may be called to generate a set of new buffer object names. -// -// The state of a buffer object immediately after it is first bound is an -// unmapped zero-sized memory buffer with GL.READ_WRITE access and -// GL.STATIC_DRAW usage. -// -// While a non-zero buffer object name is bound, GL operations on the target -// to which it is bound affect the bound buffer object, and queries of the -// target to which it is bound return state from the bound buffer object. -// While buffer object name zero is bound, as in the initial state, attempts -// to modify or query state on the target to which it is bound generates an -// GL.INVALID_OPERATION error. -// -// When vertex array pointer state is changed, for example by a call to -// NormalPointer, the current buffer object binding (GL.ARRAY_BUFFER_BINDING) -// is copied into the corresponding client state for the vertex array type -// being changed, for example GL.NORMAL_ARRAY_BUFFER_BINDING. While a -// non-zero buffer object is bound to the GL.ARRAY_BUFFER target, the vertex -// array pointer parameter that is traditionally interpreted as a pointer to -// client-side memory is instead interpreted as an offset within the buffer -// object measured in basic machine units. -// -// While a non-zero buffer object is bound to the GL.ELEMENT_ARRAY_BUFFER -// target, the indices parameter of DrawElements, DrawRangeElements, or -// MultiDrawElements that is traditionally interpreted as a pointer to -// client-side memory is instead interpreted as an offset within the buffer -// object measured in basic machine units. -// -// While a non-zero buffer object is bound to the GL.PIXEL_PACK_BUFFER -// target, the following commands are affected: GetCompressedTexImage, -// GetConvolutionFilter, GetHistogram, GetMinmax, GetPixelMap, -// GetPolygonStipple, GetSeparableFilter, GetTexImage, and ReadPixels. The -// pointer parameter that is traditionally interpreted as a pointer to -// client-side memory where the pixels are to be packed is instead -// interpreted as an offset within the buffer object measured in basic -// machine units. -// -// While a non-zero buffer object is bound to the GL.PIXEL_UNPACK_BUFFER -// target, the following commands are affected: Bitmap, ColorSubTable, -// ColorTable, CompressedTexImage1D, CompressedTexImage2D, -// CompressedTexImage3D, CompressedTexSubImage1D, CompressedTexSubImage2D, -// CompressedTexSubImage3D, ConvolutionFilter1D, ConvolutionFilter2D, -// DrawPixels, PixelMap, PolygonStipple, SeparableFilter2D, TexImage1D, -// TexImage2D, TexImage3D, TexSubImage1D, TexSubImage2D, and TexSubImage3D. -// The pointer parameter that is traditionally interpreted as a pointer to -// client-side memory from which the pixels are to be unpacked is instead -// interpreted as an offset within the buffer object measured in basic -// machine units. -// -// A buffer object binding created with BindBuffer remains active until a -// different buffer object name is bound to the same target, or until the -// bound buffer object is deleted with DeleteBuffers. -// -// Once created, a named buffer object may be re-bound to any target as often -// as needed. However, the GL implementation may make choices about how to -// optimize the storage of a buffer object based on its initial binding -// target. -// -// Error GL.INVALID_ENUM is generated if target is not one of the allowable -// values. GL.INVALID_OPERATION is generated if BindBuffer is executed -// between the execution of Begin and the corresponding execution of End. -// -// BindBuffer is available in GL version 1.5 or greater. -func (gl *GL) BindBuffer(target glbase.Enum, buffer glbase.Buffer) { - C.gl2_1_glBindBuffer(gl.funcs, C.GLenum(target), C.GLuint(buffer)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetQueryObjectuiv.xml -func (gl *GL) GetQueryObjectuiv(id uint32, pname glbase.Enum, params []uint32) { - C.gl2_1_glGetQueryObjectuiv(gl.funcs, C.GLuint(id), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetQueryObjectiv.xml -func (gl *GL) GetQueryObjectiv(id uint32, pname glbase.Enum, params []int32) { - C.gl2_1_glGetQueryObjectiv(gl.funcs, C.GLuint(id), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetQueryiv.xml -func (gl *GL) GetQueryiv(target, pname glbase.Enum, params []int32) { - C.gl2_1_glGetQueryiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEndQuery.xml -func (gl *GL) EndQuery(target glbase.Enum) { - C.gl2_1_glEndQuery(gl.funcs, C.GLenum(target)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glBeginQuery.xml -func (gl *GL) BeginQuery(target glbase.Enum, id uint32) { - C.gl2_1_glBeginQuery(gl.funcs, C.GLenum(target), C.GLuint(id)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIsQuery.xml -func (gl *GL) IsQuery(id uint32) bool { - glresult := C.gl2_1_glIsQuery(gl.funcs, C.GLuint(id)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDeleteQueries.xml -func (gl *GL) DeleteQueries(n int, ids []uint32) { - C.gl2_1_glDeleteQueries(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&ids[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGenQueries.xml -func (gl *GL) GenQueries(n int, ids []uint32) { - C.gl2_1_glGenQueries(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&ids[0]))) -} - -// VertexAttribPointer specifies the location and data format of the array -// of generic vertex attributes at index to use when rendering. size -// specifies the number of components per attribute and must be 1, 2, 3, or -// 4. type specifies the data type of each component, and stride specifies -// the byte stride from one attribute to the next, allowing vertices and -// attributes to be packed into a single array or stored in separate arrays. -// normalized indicates whether the values stored in an integer format are -// to be mapped to the range [-1,1] (for signed values) or [0,1] -// (for unsigned values) when they are accessed and converted to floating -// point; otherwise, values will be converted to floats directly without -// normalization. offset is a byte offset into the buffer object's data -// store, which must be bound to the GL.ARRAY_BUFFER target with BindBuffer. -// -// The buffer object binding (GL.ARRAY_BUFFER_BINDING) is saved as -// generic vertex attribute array client-side state -// (GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING) for the provided index. -// -// To enable and disable a generic vertex attribute array, call -// EnableVertexAttribArray and DisableVertexAttribArray with index. If -// enabled, the generic vertex attribute array is used when DrawArrays or -// DrawElements is called. Each generic vertex attribute array is initially -// disabled. -// -// VertexAttribPointer is typically implemented on the client side. -// -// Error GL.INVALID_ENUM is generated if type is not an accepted value. -// GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. GL.INVALID_VALUE is generated if size is not 1, 2, -// 3, or 4. GL.INVALID_VALUE is generated if stride is negative. -func (gl *GL) VertexAttribPointer(index glbase.Attrib, size int, gltype glbase.Enum, normalized bool, stride int, offset uintptr) { - offset_ptr := unsafe.Pointer(offset) - C.gl2_1_glVertexAttribPointer(gl.funcs, C.GLuint(index), C.GLint(size), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), C.GLsizei(stride), offset_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glValidateProgram.xml -func (gl *GL) ValidateProgram(program glbase.Program) { - C.gl2_1_glValidateProgram(gl.funcs, C.GLuint(program)) -} - -// UniformMatrix4fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix4fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix4fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(4*4) != 0 { - panic("invalid value length for UniformMatrix4fv") - } - count := len(value) / (4 * 4) - C.gl2_1_glUniformMatrix4fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix3fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix3fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix3fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(3*3) != 0 { - panic("invalid value length for UniformMatrix3fv") - } - count := len(value) / (3 * 3) - C.gl2_1_glUniformMatrix3fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix2fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix2fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix2fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(2*2) != 0 { - panic("invalid value length for UniformMatrix2fv") - } - count := len(value) / (2 * 2) - C.gl2_1_glUniformMatrix2fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform4iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform4iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - if len(value)%4 != 0 { - panic("invalid value length for Uniform4iv") - } - count := len(value) / 4 - C.gl2_1_glUniform4iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// Uniform3iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform3iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - if len(value)%3 != 0 { - panic("invalid value length for Uniform3iv") - } - count := len(value) / 3 - C.gl2_1_glUniform3iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// Uniform2iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform2iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - if len(value)%2 != 0 { - panic("invalid value length for Uniform2iv") - } - count := len(value) / 2 - C.gl2_1_glUniform2iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// Uniform1iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform1iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - count := len(value) - C.gl2_1_glUniform1iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// Uniform4fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform4fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - if len(value)%4 != 0 { - panic("invalid value length for Uniform4fv") - } - count := len(value) / 4 - C.gl2_1_glUniform4fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform3fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform3fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - if len(value)%3 != 0 { - panic("invalid value length for Uniform3fv") - } - count := len(value) / 3 - C.gl2_1_glUniform3fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform2fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform2fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - if len(value)%2 != 0 { - panic("invalid value length for Uniform2fv") - } - count := len(value) / 2 - C.gl2_1_glUniform2fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform1fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform1fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - count := len(value) - C.gl2_1_glUniform1fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform4i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform4i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4i(location glbase.Uniform, v0, v1, v2, v3 int32) { - C.gl2_1_glUniform4i(gl.funcs, C.GLint(location), C.GLint(v0), C.GLint(v1), C.GLint(v2), C.GLint(v3)) -} - -// Uniform3i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform3i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3i(location glbase.Uniform, v0, v1, v2 int32) { - C.gl2_1_glUniform3i(gl.funcs, C.GLint(location), C.GLint(v0), C.GLint(v1), C.GLint(v2)) -} - -// Uniform2i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform2i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2i(location glbase.Uniform, v0, v1 int32) { - C.gl2_1_glUniform2i(gl.funcs, C.GLint(location), C.GLint(v0), C.GLint(v1)) -} - -// Uniform1i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform1i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1i(location glbase.Uniform, v0 int32) { - C.gl2_1_glUniform1i(gl.funcs, C.GLint(location), C.GLint(v0)) -} - -// Uniform4f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform4f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4f(location glbase.Uniform, v0, v1, v2, v3 float32) { - C.gl2_1_glUniform4f(gl.funcs, C.GLint(location), C.GLfloat(v0), C.GLfloat(v1), C.GLfloat(v2), C.GLfloat(v3)) -} - -// Uniform3f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform3f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3f(location glbase.Uniform, v0, v1, v2 float32) { - C.gl2_1_glUniform3f(gl.funcs, C.GLint(location), C.GLfloat(v0), C.GLfloat(v1), C.GLfloat(v2)) -} - -// Uniform2f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform2f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2f(location glbase.Uniform, v0, v1 float32) { - C.gl2_1_glUniform2f(gl.funcs, C.GLint(location), C.GLfloat(v0), C.GLfloat(v1)) -} - -// Uniform1f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform1f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1f(location glbase.Uniform, v0 float32) { - C.gl2_1_glUniform1f(gl.funcs, C.GLint(location), C.GLfloat(v0)) -} - -// UseProgram installs the program object specified by program as part of -// current rendering state. One or more executables are created in a program -// object by successfully attaching shader objects to it with AttachShader, -// successfully compiling the shader objects with CompileShader, and -// successfully linking the program object with LinkProgram. -// -// A program object will contain an executable that will run on the vertex -// processor if it contains one or more shader objects of type -// GL.VERTEX_SHADER that have been successfully compiled and linked. -// Similarly, a program object will contain an executable that will run on -// the fragment processor if it contains one or more shader objects of type -// GL.FRAGMENT_SHADER that have been successfully compiled and linked. -// -// Successfully installing an executable on a programmable processor will -// cause the corresponding fixed functionality of OpenGL to be disabled. -// Specifically, if an executable is installed on the vertex processor, the -// OpenGL fixed functionality will be disabled as follows. -// -// - The modelview matrix is not applied to vertex coordinates. -// -// - The projection matrix is not applied to vertex coordinates. -// -// - The texture matrices are not applied to texture coordinates. -// -// - Normals are not transformed to eye coordinates. -// -// - Normals are not rescaled or normalized. -// -// - Normalization of GL.AUTO_NORMAL evaluated normals is not performed. -// -// - Texture coordinates are not generated automatically. -// -// - Per-vertex lighting is not performed. -// -// - Color material computations are not performed. -// -// - Color index lighting is not performed. -// -// - This list also applies when setting the current raster position. -// -// The executable that is installed on the vertex processor is expected to -// implement any or all of the desired functionality from the preceding list. -// Similarly, if an executable is installed on the fragment processor, the -// OpenGL fixed functionality will be disabled as follows. -// -// - Texture environment and texture functions are not applied. -// -// - Texture application is not applied. -// -// - Color sum is not applied. -// -// - Fog is not applied. -// -// Again, the fragment shader that is installed is expected to implement any -// or all of the desired functionality from the preceding list. -// -// While a program object is in use, applications are free to modify attached -// shader objects, compile attached shader objects, attach additional shader -// objects, and detach or delete shader objects. None of these operations -// will affect the executables that are part of the current state. However, -// relinking the program object that is currently in use will install the -// program object as part of the current rendering state if the link -// operation was successful (see LinkProgram). If the program object -// currently in use is relinked unsuccessfully, its link status will be set -// to GL.FALSE, but the executables and associated state will remain part of -// the current state until a subsequent call to UseProgram removes it from -// use. After it is removed from use, it cannot be made part of current state -// until it has been successfully relinked. -// -// If program contains shader objects of type GL.VERTEX_SHADER but it does -// not contain shader objects of type GL.FRAGMENT_SHADER, an executable will -// be installed on the vertex processor, but fixed functionality will be used -// for fragment processing. Similarly, if program contains shader objects of -// type GL.FRAGMENT_SHADER but it does not contain shader objects of type -// GL.VERTEX_SHADER, an executable will be installed on the fragment -// processor, but fixed functionality will be used for vertex processing. If -// program is 0, the programmable processors will be disabled, and fixed -// functionality will be used for both vertex and fragment processing. -// -// While a program object is in use, the state that controls the disabled -// fixed functionality may also be updated using the normal OpenGL calls. -// -// Like display lists and texture objects, the name space for program objects -// may be shared across a set of contexts, as long as the server sides of the -// contexts share the same address space. If the name space is shared across -// contexts, any attached objects and the data associated with those attached -// objects are shared as well. -// -// Applications are responsible for providing the synchronization across API -// calls when objects are accessed from different execution threads. -// -// Error GL.INVALID_VALUE is generated if program is neither 0 nor a value -// generated by OpenGL. GL.INVALID_OPERATION is generated if program is not -// a program object. GL.INVALID_OPERATION is generated if program could not -// be made part of current state. GL.INVALID_OPERATION is generated if -// UseProgram is executed between the execution of Begin and the -// corresponding execution of End. -// -// UseProgram is available in GL version 2.0 or greater. -func (gl *GL) UseProgram(program glbase.Program) { - C.gl2_1_glUseProgram(gl.funcs, C.GLuint(program)) -} - -// ShaderSource sets the source code in shader to the provided source code. Any source -// code previously stored in the shader object is completely replaced. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader is not a shader -// object. GL.INVALID_VALUE is generated if count is less than 0. -// GL.INVALID_OPERATION is generated if ShaderSource is executed between the -// execution of Begin and the corresponding execution of End. -// -// ShaderSource is available in GL version 2.0 or greater. -func (gl *GL) ShaderSource(shader glbase.Shader, source ...string) { - count := len(source) - length := make([]int32, count) - source_c := make([]unsafe.Pointer, count) - for i, src := range source { - length[i] = int32(len(src)) - if len(src) > 0 { - source_c[i] = *(*unsafe.Pointer)(unsafe.Pointer(&src)) - } else { - source_c[i] = unsafe.Pointer(uintptr(0)) - } - } - C.gl2_1_glShaderSource(gl.funcs, C.GLuint(shader), C.GLsizei(count), (**C.GLchar)(unsafe.Pointer(&source_c[0])), (*C.GLint)(unsafe.Pointer(&length[0]))) -} - -// LinkProgram links the program object specified by program. If any shader -// objects of type GL.VERTEX_SHADER are attached to program, they will be -// used to create an executable that will run on the programmable vertex -// processor. If any shader objects of type GL.FRAGMENT_SHADER are attached -// to program, they will be used to create an executable that will run on the -// programmable fragment processor. -// -// The status of the link operation will be stored as part of the program -// object's state. This value will be set to GL.TRUE if the program object -// was linked without errors and is ready for use, and GL.FALSE otherwise. It -// can be queried by calling GetProgramiv with arguments program and -// GL.LINK_STATUS. -// -// As a result of a successful link operation, all active user-defined -// uniform variables belonging to program will be initialized to 0, and each -// of the program object's active uniform variables will be assigned a -// location that can be queried by calling GetUniformLocation. Also, any -// active user-defined attribute variables that have not been bound to a -// generic vertex attribute index will be bound to one at this time. -// -// Linking of a program object can fail for a number of reasons as specified -// in the OpenGL Shading Language Specification. The following lists some of -// the conditions that will cause a link error. -// -// - The number of active attribute variables supported by the -// implementation has been exceeded. -// -// - The storage limit for uniform variables has been exceeded. -// -// - The number of active uniform variables supported by the implementation -// has been exceeded. -// -// - The main function is missing for the vertex shader or the fragment -// shader. -// -// - A varying variable actually used in the fragment shader is not -// declared in the same way (or is not declared at all) in the vertex -// shader. -// -// - A reference to a function or variable name is unresolved. -// -// - A shared global is declared with two different types or two different -// initial values. -// -// - One or more of the attached shader objects has not been successfully -// compiled. -// -// - Binding a generic attribute matrix caused some rows of the matrix to -// fall outside the allowed maximum of GL.MAX_VERTEX_ATTRIBS. -// -// - Not enough contiguous vertex attribute slots could be found to bind -// attribute matrices. -// -// When a program object has been successfully linked, the program object can -// be made part of current state by calling UseProgram. Whether or not the -// link operation was successful, the program object's information log will -// be overwritten. The information log can be retrieved by calling -// GetProgramInfoLog. -// -// LinkProgram will also install the generated executables as part of the -// current rendering state if the link operation was successful and the -// specified program object is already currently in use as a result of a -// previous call to UseProgram. If the program object currently in use is -// relinked unsuccessfully, its link status will be set to GL.FALSE , but the -// executables and associated state will remain part of the current state -// until a subsequent call to UseProgram removes it from use. After it is -// removed from use, it cannot be made part of current state until it has -// been successfully relinked. -// -// If program contains shader objects of type GL.VERTEX_SHADER but does not -// contain shader objects of type GL.FRAGMENT_SHADER, the vertex shader will -// be linked against the implicit interface for fixed functionality fragment -// processing. Similarly, if program contains shader objects of type -// GL.FRAGMENT_SHADER but it does not contain shader objects of type -// GL.VERTEX_SHADER, the fragment shader will be linked against the implicit -// interface for fixed functionality vertex processing. -// -// The program object's information log is updated and the program is -// generated at the time of the link operation. After the link operation, -// applications are free to modify attached shader objects, compile attached -// shader objects, detach shader objects, delete shader objects, and attach -// additional shader objects. None of these operations affects the -// information log or the program that is part of the program object. -// -// If the link operation is unsuccessful, any information about a previous -// link operation on program is lost (a failed link does not restore the -// old state of program). Certain information can still be retrieved -// from program even after an unsuccessful link operation. See for instance -// GetActiveAttrib and GetActiveUniform. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program -// object. GL.INVALID_OPERATION is generated if LinkProgram is executed -// between the execution of Begin and the corresponding execution of End. -// -// LinkProgram is available in GL version 2.0 or greater. -func (gl *GL) LinkProgram(program glbase.Program) { - C.gl2_1_glLinkProgram(gl.funcs, C.GLuint(program)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIsShader.xml -func (gl *GL) IsShader(shader glbase.Shader) bool { - glresult := C.gl2_1_glIsShader(gl.funcs, C.GLuint(shader)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIsProgram.xml -func (gl *GL) IsProgram(program glbase.Program) bool { - glresult := C.gl2_1_glIsProgram(gl.funcs, C.GLuint(program)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// GetVertexAttribiv returns in params the value of a generic vertex attribute -// parameter. The generic vertex attribute to be queried is specified by -// index, and the parameter to be queried is specified by pname. -// -// The accepted parameter names are as follows: -// -// GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING -// params returns a single value, the name of the buffer object -// currently bound to the binding point corresponding to generic vertex -// attribute array index. If no buffer object is bound, 0 is returned. -// The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_ENABLED -// params returns a single value that is non-zero (true) if the vertex -// attribute array for index is enabled and 0 (false) if it is -// disabled. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_SIZE -// params returns a single value, the size of the vertex attribute -// array for index. The size is the number of values for each element -// of the vertex attribute array, and it will be 1, 2, 3, or 4. The -// initial value is 4. -// -// GL.VERTEX_ATTRIB_ARRAY_STRIDE -// params returns a single value, the array stride for (number of bytes -// between successive elements in) the vertex attribute array for -// index. A value of 0 indicates that the array elements are stored -// sequentially in memory. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_TYPE -// params returns a single value, a symbolic constant indicating the -// array type for the vertex attribute array for index. Possible values -// are GL.BYTE, GL.UNSIGNED_BYTE, GL.SHORT, GL.UNSIGNED_SHORT, GL.INT, -// GL.UNSIGNED_INT, GL.FLOAT, and GL.DOUBLE. The initial value is -// GL.FLOAT. -// -// GL.VERTEX_ATTRIB_ARRAY_NORMALIZED -// params returns a single value that is non-zero (true) if fixed-point -// data types for the vertex attribute array indicated by index are -// normalized when they are converted to floating point, and 0 (false) -// otherwise. The initial value is 0. -// -// GL.CURRENT_VERTEX_ATTRIB -// params returns four values that represent the current value for the -// generic vertex attribute specified by index. Generic vertex -// attribute 0 is unique in that it has no current state, so an error -// will be generated if index is 0. The initial value for all other -// generic vertex attributes is (0,0,0,1). -// -// All of the parameters except GL.CURRENT_VERTEX_ATTRIB represent -// client-side state. -// -// Error GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. GL.INVALID_ENUM is generated if pname is not an -// accepted value. GL.INVALID_OPERATION is generated if index is 0 and pname -// is GL.CURRENT_VERTEX_ATTRIB. -// -// GetVertexAttribiv is available in GL version 2.0 or greater. -func (gl *GL) GetVertexAttribiv(index glbase.Attrib, pname glbase.Enum, params []int32) { - var params_c [4]int32 - C.gl2_1_glGetVertexAttribiv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetVertexAttribfv returns in params the value of a generic vertex attribute -// parameter. The generic vertex attribute to be queried is specified by -// index, and the parameter to be queried is specified by pname. -// -// The accepted parameter names are as follows: -// -// GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING -// params returns a single value, the name of the buffer object -// currently bound to the binding point corresponding to generic vertex -// attribute array index. If no buffer object is bound, 0 is returned. -// The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_ENABLED -// params returns a single value that is non-zero (true) if the vertex -// attribute array for index is enabled and 0 (false) if it is -// disabled. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_SIZE -// params returns a single value, the size of the vertex attribute -// array for index. The size is the number of values for each element -// of the vertex attribute array, and it will be 1, 2, 3, or 4. The -// initial value is 4. -// -// GL.VERTEX_ATTRIB_ARRAY_STRIDE -// params returns a single value, the array stride for (number of bytes -// between successive elements in) the vertex attribute array for -// index. A value of 0 indicates that the array elements are stored -// sequentially in memory. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_TYPE -// params returns a single value, a symbolic constant indicating the -// array type for the vertex attribute array for index. Possible values -// are GL.BYTE, GL.UNSIGNED_BYTE, GL.SHORT, GL.UNSIGNED_SHORT, GL.INT, -// GL.UNSIGNED_INT, GL.FLOAT, and GL.DOUBLE. The initial value is -// GL.FLOAT. -// -// GL.VERTEX_ATTRIB_ARRAY_NORMALIZED -// params returns a single value that is non-zero (true) if fixed-point -// data types for the vertex attribute array indicated by index are -// normalized when they are converted to floating point, and 0 (false) -// otherwise. The initial value is 0. -// -// GL.CURRENT_VERTEX_ATTRIB -// params returns four values that represent the current value for the -// generic vertex attribute specified by index. Generic vertex -// attribute 0 is unique in that it has no current state, so an error -// will be generated if index is 0. The initial value for all other -// generic vertex attributes is (0,0,0,1). -// -// All of the parameters except GL.CURRENT_VERTEX_ATTRIB represent -// client-side state. -// -// Error GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. GL.INVALID_ENUM is generated if pname is not an -// accepted value. GL.INVALID_OPERATION is generated if index is 0 and pname -// is GL.CURRENT_VERTEX_ATTRIB. -// -// GetVertexAttribfv is available in GL version 2.0 or greater. -func (gl *GL) GetVertexAttribfv(index glbase.Attrib, pname glbase.Enum, params []float32) { - var params_c [4]float32 - C.gl2_1_glGetVertexAttribfv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetVertexAttribdv returns in params the value of a generic vertex attribute -// parameter. The generic vertex attribute to be queried is specified by -// index, and the parameter to be queried is specified by pname. -// -// The accepted parameter names are as follows: -// -// GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING -// params returns a single value, the name of the buffer object -// currently bound to the binding point corresponding to generic vertex -// attribute array index. If no buffer object is bound, 0 is returned. -// The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_ENABLED -// params returns a single value that is non-zero (true) if the vertex -// attribute array for index is enabled and 0 (false) if it is -// disabled. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_SIZE -// params returns a single value, the size of the vertex attribute -// array for index. The size is the number of values for each element -// of the vertex attribute array, and it will be 1, 2, 3, or 4. The -// initial value is 4. -// -// GL.VERTEX_ATTRIB_ARRAY_STRIDE -// params returns a single value, the array stride for (number of bytes -// between successive elements in) the vertex attribute array for -// index. A value of 0 indicates that the array elements are stored -// sequentially in memory. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_TYPE -// params returns a single value, a symbolic constant indicating the -// array type for the vertex attribute array for index. Possible values -// are GL.BYTE, GL.UNSIGNED_BYTE, GL.SHORT, GL.UNSIGNED_SHORT, GL.INT, -// GL.UNSIGNED_INT, GL.FLOAT, and GL.DOUBLE. The initial value is -// GL.FLOAT. -// -// GL.VERTEX_ATTRIB_ARRAY_NORMALIZED -// params returns a single value that is non-zero (true) if fixed-point -// data types for the vertex attribute array indicated by index are -// normalized when they are converted to floating point, and 0 (false) -// otherwise. The initial value is 0. -// -// GL.CURRENT_VERTEX_ATTRIB -// params returns four values that represent the current value for the -// generic vertex attribute specified by index. Generic vertex -// attribute 0 is unique in that it has no current state, so an error -// will be generated if index is 0. The initial value for all other -// generic vertex attributes is (0,0,0,1). -// -// All of the parameters except GL.CURRENT_VERTEX_ATTRIB represent -// client-side state. -// -// Error GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. GL.INVALID_ENUM is generated if pname is not an -// accepted value. GL.INVALID_OPERATION is generated if index is 0 and pname -// is GL.CURRENT_VERTEX_ATTRIB. -// -// GetVertexAttribdv is available in GL version 2.0 or greater. -func (gl *GL) GetVertexAttribdv(index glbase.Attrib, pname glbase.Enum, params []float64) { - var params_c [4]float64 - C.gl2_1_glGetVertexAttribdv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetUniformiv returns in params the value of the specified uniform -// variable. The type of the uniform variable specified by location -// determines the number of values returned. If the uniform variable is -// defined in the shader as a boolean, int, or float, a single value will be -// returned. If it is defined as a vec2, ivec2, or bvec2, two values will be -// returned. If it is defined as a vec3, ivec3, or bvec3, three values will -// be returned, and so on. To query values stored in uniform variables -// declared as arrays, call GetUniformiv for each element of the array. To -// query values stored in uniform variables declared as structures, call -// GetUniformiv for each field in the structure. The values for uniform -// variables declared as a matrix will be returned in column major order. -// -// The locations assigned to uniform variables are not known until the -// program object is linked. After linking has occurred, the command -// GetUniformLocation can be used to obtain the location of a uniform -// variable. This location value can then be passed to GetUniformiv in order -// to query the current value of the uniform variable. After a program object -// has been linked successfully, the index values for uniform variables -// remain fixed until the next link command occurs. The uniform variable -// values can only be queried after a link if the link was successful. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program -// object. GL.INVALID_OPERATION is generated if program has not been -// successfully linked. GL.INVALID_OPERATION is generated if location does -// not correspond to a valid uniform variable location for the specified -// program object. GL.INVALID_OPERATION is generated if GetUniformiv is -// executed between the execution of Begin and the corresponding execution of -// End. -// -// GetUniformiv is available in GL version 2.0 or greater. -func (gl *GL) GetUniformiv(program glbase.Program, location glbase.Uniform, params []int32) { - var params_c [4]int32 - C.gl2_1_glGetUniformiv(gl.funcs, C.GLuint(program), C.GLint(location), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetUniformfv returns in params the value of the specified uniform -// variable. The type of the uniform variable specified by location -// determines the number of values returned. If the uniform variable is -// defined in the shader as a boolean, int, or float, a single value will be -// returned. If it is defined as a vec2, ivec2, or bvec2, two values will be -// returned. If it is defined as a vec3, ivec3, or bvec3, three values will -// be returned, and so on. To query values stored in uniform variables -// declared as arrays, call GetUniformfv for each element of the array. To -// query values stored in uniform variables declared as structures, call -// GetUniformfv for each field in the structure. The values for uniform -// variables declared as a matrix will be returned in column major order. -// -// The locations assigned to uniform variables are not known until the -// program object is linked. After linking has occurred, the command -// GetUniformLocation can be used to obtain the location of a uniform -// variable. This location value can then be passed to GetUniformfv in order -// to query the current value of the uniform variable. After a program object -// has been linked successfully, the index values for uniform variables -// remain fixed until the next link command occurs. The uniform variable -// values can only be queried after a link if the link was successful. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program -// object. GL.INVALID_OPERATION is generated if program has not been -// successfully linked. GL.INVALID_OPERATION is generated if location does -// not correspond to a valid uniform variable location for the specified -// program object. GL.INVALID_OPERATION is generated if GetUniformfv is -// executed between the execution of Begin and the corresponding execution of -// End. -// -// GetUniformfv is available in GL version 2.0 or greater. -func (gl *GL) GetUniformfv(program glbase.Program, location glbase.Uniform, params []float32) { - var params_c [4]float32 - C.gl2_1_glGetUniformfv(gl.funcs, C.GLuint(program), C.GLint(location), (*C.GLfloat)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetUniformLocation returns an integer that represents the location of a -// specific uniform variable within a program object. name must be an active -// uniform variable name in program that is not a structure, an array of -// structures, or a subcomponent of a vector or a matrix. This function -// returns -1 if name does not correspond to an active uniform variable in -// program or if name starts with the reserved prefix "gl_". -// -// Uniform variables that are structures or arrays of structures may be -// queried by calling GetUniformLocation for each field within the -// structure. The array element operator "[]" and the structure field -// operator "." may be used in name in order to select elements within an -// array or fields within a structure. The result of using these operators is -// not allowed to be another structure, an array of structures, or a -// subcomponent of a vector or a matrix. Except if the last part of name -// indicates a uniform variable array, the location of the first element of -// an array can be retrieved by using the name of the array, or by using the -// name appended by "[0]". -// -// The actual locations assigned to uniform variables are not known until the -// program object is linked successfully. After linking has occurred, the -// command GetUniformLocation can be used to obtain the location of a -// uniform variable. This location value can then be passed to Uniform to -// set the value of the uniform variable or to GetUniform in order to query -// the current value of the uniform variable. After a program object has been -// linked successfully, the index values for uniform variables remain fixed -// until the next link command occurs. Uniform variable locations and values -// can only be queried after a link if the link was successful. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program object. -// GL.INVALID_OPERATION is generated if program has not been successfully -// linked. GL.INVALID_OPERATION is generated if GetUniformLocation is executed -// between the execution of Begin and the corresponding execution of End. -// -// GetUniformLocation is available in GL version 2.0 or greater. -func (gl *GL) GetUniformLocation(program glbase.Program, name string) glbase.Uniform { - name_cstr := C.CString(name) - glresult := C.gl2_1_glGetUniformLocation(gl.funcs, C.GLuint(program), (*C.GLchar)(name_cstr)) - C.free(unsafe.Pointer(name_cstr)) - return glbase.Uniform(glresult) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetShaderSource.xml -func (gl *GL) GetShaderSource(shader glbase.Shader, bufSize int32, length []int32, source []byte) { - C.gl2_1_glGetShaderSource(gl.funcs, C.GLuint(shader), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLchar)(unsafe.Pointer(&source[0]))) -} - -// GetShaderInfoLog returns the information log for the specified shader -// object. The information log for a shader object is modified when the -// shader is compiled. -// -// The information log for a shader object is a string that may contain -// diagnostic messages, warning messages, and other information about the -// last compile operation. When a shader object is created, its information -// log will be a string of length 0, and the size of the current log can be -// obtained by calling GetShaderiv with the value GL.INFO_LOG_LENGTH. -// -// The information log for a shader object is the OpenGL implementer's -// primary mechanism for conveying information about the compilation process. -// Therefore, the information log can be helpful to application developers -// during the development process, even when compilation is successful. -// Application developers should not expect different OpenGL implementations -// to produce identical information logs. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader is not a shader -// object. GL.INVALID_VALUE is generated if maxLength is less than 0. -// GL.INVALID_OPERATION is generated if GetShaderInfoLog is executed -// between the execution of Begin and the corresponding execution of End. -// -// GetShaderInfoLog is available in GL version 2.0 or greater. -func (gl *GL) GetShaderInfoLog(shader glbase.Shader) []byte { - var params [1]int32 - var length int32 - gl.GetShaderiv(shader, INFO_LOG_LENGTH, params[:]) - bufSize := params[0] - infoLog := make([]byte, int(bufSize)) - C.gl2_1_glGetShaderInfoLog(gl.funcs, C.GLuint(shader), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length)), (*C.GLchar)(unsafe.Pointer(&infoLog[0]))) - return infoLog -} - -// GetShaderiv GetShader returns in params the value of a parameter for a specific -// shader object. The following parameters are defined: -// -// GL.SHADER_TYPE -// params returns GL.VERTEX_SHADER if shader is a vertex shader object, -// and GL.FRAGMENT_SHADER if shader is a fragment shader object. -// -// GL.DELETE_STATUS -// params returns GL.TRUE if shader is currently flagged for deletion, -// and GL.FALSE otherwise. -// -// GL.COMPILE_STATUS -// params returns GL.TRUE if the last compile operation on shader was -// successful, and GL.FALSE otherwise. -// -// GL.INFO_LOG_LENGTH -// params returns the number of characters in the information log for -// shader including the null termination character (the size of the -// character buffer required to store the information log). If shader has -// no information log, a value of 0 is returned. -// -// GL.SHADER_SOURCE_LENGTH -// params returns the length of the concatenation of the source strings -// that make up the shader source for the shader, including the null -// termination character. (the size of the character buffer -// required to store the shader source). If no source code exists, 0 is -// returned. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader does not refer to a -// shader object. GL.INVALID_ENUM is generated if pname is not an accepted -// value. GL.INVALID_OPERATION is generated if GetShader is executed -// between the execution of Begin and the corresponding execution of End. -// -// GetShaderiv is available in GL version 2.0 or greater. -func (gl *GL) GetShaderiv(shader glbase.Shader, pname glbase.Enum, params []int32) { - var params_c [4]int32 - C.gl2_1_glGetShaderiv(gl.funcs, C.GLuint(shader), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetProgramInfoLog returns the information log for the specified program -// object. The information log for a program object is modified when the -// program object is linked or validated. -// -// The information log for a program object is either an empty string, or a -// string containing information about the last link operation, or a string -// containing information about the last validation operation. It may contain -// diagnostic messages, warning messages, and other information. When a -// program object is created, its information log will be a string of length -// 0, and the size of the current log can be obtained by calling GetProgramiv -// with the value GL.INFO_LOG_LENGTH. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated -// by OpenGL. GL.INVALID_OPERATION is generated if program is not a -// program object. -func (gl *GL) GetProgramInfoLog(program glbase.Program) []byte { - var params [1]int32 - var length int32 - gl.GetProgramiv(program, INFO_LOG_LENGTH, params[:]) - bufSize := params[0] - infoLog := make([]byte, int(bufSize)) - C.gl2_1_glGetProgramInfoLog(gl.funcs, C.GLuint(program), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length)), (*C.GLchar)(unsafe.Pointer(&infoLog[0]))) - return infoLog -} - -// GetProgramiv returns in params the value of a parameter for a specific -// program object. The following parameters are defined: -// -// GL.DELETE_STATUS -// params returns GL.TRUE if program is currently flagged for deletion, -// and GL.FALSE otherwise. -// -// GL.LINK_STATUS -// params returns GL.TRUE if the last link operation on program was -// successful, and GL.FALSE otherwise. -// -// GL.VALIDATE_STATUS -// params returns GL.TRUE or if the last validation operation on -// program was successful, and GL.FALSE otherwise. -// -// GL.INFO_LOG_LENGTH -// params returns the number of characters in the information log for -// program including the null termination character (the size of -// the character buffer required to store the information log). If -// program has no information log, a value of 0 is returned. -// -// GL.ATTACHED_SHADERS -// params returns the number of shader objects attached to program. -// -// GL.ACTIVE_ATTRIBUTES -// params returns the number of active attribute variables for program. -// -// GL.ACTIVE_ATTRIBUTE_MAX_LENGTH -// params returns the length of the longest active attribute name for -// program, including the null termination character (the size of -// the character buffer required to store the longest attribute name). -// If no active attributes exist, 0 is returned. -// -// GL.ACTIVE_UNIFORMS -// params returns the number of active uniform variables for program. -// -// GL.ACTIVE_UNIFORM_MAX_LENGTH -// params returns the length of the longest active uniform variable -// name for program, including the null termination character (i.e., -// the size of the character buffer required to store the longest -// uniform variable name). If no active uniform variables exist, 0 is -// returned. -// -// GL.TRANSFORM_FEEDBACK_BUFFER_MODE -// params returns a symbolic constant indicating the buffer mode used -// when transform feedback is active. This may be GL.SEPARATE_ATTRIBS -// or GL.INTERLEAVED_ATTRIBS. -// -// GL.TRANSFORM_FEEDBACK_VARYINGS -// params returns the number of varying variables to capture in transform -// feedback mode for the program. -// -// GL.TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH -// params returns the length of the longest variable name to be used for -// transform feedback, including the null-terminator. -// -// GL.GEOMETRY_VERTICES_OUT -// params returns the maximum number of vertices that the geometry shader in -// program will output. -// -// GL.GEOMETRY_INPUT_TYPE -// params returns a symbolic constant indicating the primitive type accepted -// as input to the geometry shader contained in program. -// -// GL.GEOMETRY_OUTPUT_TYPE -// params returns a symbolic constant indicating the primitive type that will -// be output by the geometry shader contained in program. -// -// GL.ACTIVE_UNIFORM_BLOCKS and GL.ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH are -// available only if the GL version 3.1 or greater. -// -// GL.GEOMETRY_VERTICES_OUT, GL.GEOMETRY_INPUT_TYPE and -// GL.GEOMETRY_OUTPUT_TYPE are accepted only if the GL version is 3.2 or -// greater. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program does not refer to a -// program object. GL.INVALID_OPERATION is generated if pname is -// GL.GEOMETRY_VERTICES_OUT, GL.GEOMETRY_INPUT_TYPE, or -// GL.GEOMETRY_OUTPUT_TYPE, and program does not contain a geometry shader. -// GL.INVALID_ENUM is generated if pname is not an accepted value. -func (gl *GL) GetProgramiv(program glbase.Program, pname glbase.Enum, params []int32) { - var params_c [4]int32 - C.gl2_1_glGetProgramiv(gl.funcs, C.GLuint(program), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetAttribLocation queries the previously linked program object specified -// by program for the attribute variable specified by name and returns the -// index of the generic vertex attribute that is bound to that attribute -// variable. If name is a matrix attribute variable, the index of the first -// column of the matrix is returned. If the named attribute variable is not -// an active attribute in the specified program object or if name starts with -// the reserved prefix "gl_", a value of -1 is returned. -// -// The association between an attribute variable name and a generic attribute -// index can be specified at any time by calling BindAttribLocation. -// Attribute bindings do not go into effect until LinkProgram is called. -// After a program object has been linked successfully, the index values for -// attribute variables remain fixed until the next link command occurs. The -// attribute values can only be queried after a link if the link was -// successful. GetAttribLocation returns the binding that actually went -// into effect the last time LinkProgram was called for the specified -// program object. Attribute bindings that have been specified since the last -// link operation are not returned by GetAttribLocation. -// -// Error GL_INVALID_OPERATION is generated if program is not a value -// generated by OpenGL. GL_INVALID_OPERATION is generated if program is not -// a program object. GL_INVALID_OPERATION is generated if program has not -// been successfully linked. GL_INVALID_OPERATION is generated if -// GetAttribLocation is executed between the execution of Begin and the -// corresponding execution of End. -// -// GetAttribLocation is available in GL version 2.0 or greater. -func (gl *GL) GetAttribLocation(program glbase.Program, name string) glbase.Attrib { - name_cstr := C.CString(name) - glresult := C.gl2_1_glGetAttribLocation(gl.funcs, C.GLuint(program), (*C.GLchar)(name_cstr)) - C.free(unsafe.Pointer(name_cstr)) - return glbase.Attrib(glresult) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetAttachedShaders.xml -func (gl *GL) GetAttachedShaders(program glbase.Program, maxCount int32, count []int, obj []uint32) { - C.gl2_1_glGetAttachedShaders(gl.funcs, C.GLuint(program), C.GLsizei(maxCount), (*C.GLsizei)(unsafe.Pointer(&count[0])), (*C.GLuint)(unsafe.Pointer(&obj[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetActiveUniform.xml -func (gl *GL) GetActiveUniform(program glbase.Program, index uint32, bufSize int32, length []int32, size []int, gltype []glbase.Enum, name []byte) { - C.gl2_1_glGetActiveUniform(gl.funcs, C.GLuint(program), C.GLuint(index), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLint)(unsafe.Pointer(&size[0])), (*C.GLenum)(unsafe.Pointer(&gltype[0])), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetActiveAttrib.xml -func (gl *GL) GetActiveAttrib(program glbase.Program, index glbase.Attrib, bufSize int32, length []int32, size []int, gltype []glbase.Enum, name []byte) { - C.gl2_1_glGetActiveAttrib(gl.funcs, C.GLuint(program), C.GLuint(index), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLint)(unsafe.Pointer(&size[0])), (*C.GLenum)(unsafe.Pointer(&gltype[0])), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEnableVertexAttribArray.xml -func (gl *GL) EnableVertexAttribArray(index glbase.Attrib) { - C.gl2_1_glEnableVertexAttribArray(gl.funcs, C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDisableVertexAttribArray.xml -func (gl *GL) DisableVertexAttribArray(index glbase.Attrib) { - C.gl2_1_glDisableVertexAttribArray(gl.funcs, C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDetachShader.xml -func (gl *GL) DetachShader(program glbase.Program, shader glbase.Shader) { - C.gl2_1_glDetachShader(gl.funcs, C.GLuint(program), C.GLuint(shader)) -} - -// DeleteShader frees the memory and invalidates the name associated with -// the shader object specified by shader. This command effectively undoes the -// effects of a call to CreateShader. -// -// If a shader object to be deleted is attached to a program object, it will -// be flagged for deletion, but it will not be deleted until it is no longer -// attached to any program object, for any rendering context (it must -// be detached from wherever it was attached before it will be deleted). A -// value of 0 for shader will be silently ignored. -// -// To determine whether an object has been flagged for deletion, call -// GetShader with arguments shader and GL.DELETE_STATUS. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. -// -// DeleteShader is available in GL version 2.0 or greater. -func (gl *GL) DeleteShader(shader glbase.Shader) { - C.gl2_1_glDeleteShader(gl.funcs, C.GLuint(shader)) -} - -// DeleteProgram frees the memory and invalidates the name associated with -// the program object specified by program. This command effectively undoes -// the effects of a call to CreateProgram. -// -// If a program object is in use as part of current rendering state, it will -// be flagged for deletion, but it will not be deleted until it is no longer -// part of current state for any rendering context. If a program object to be -// deleted has shader objects attached to it, those shader objects will be -// automatically detached but not deleted unless they have already been -// flagged for deletion by a previous call to DeleteShader. A value of 0 -// for program will be silently ignored. -// -// To determine whether a program object has been flagged for deletion, call -// GetProgram with arguments program and GL.DELETE_STATUS. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. -// -// DeleteProgram is available in GL version 2.0 or greater. -func (gl *GL) DeleteProgram(program glbase.Program) { - C.gl2_1_glDeleteProgram(gl.funcs, C.GLuint(program)) -} - -// CreateShader creates an empty shader object and returns a non-zero value -// by which it can be referenced. A shader object is used to maintain the -// source code strings that define a shader. shaderType indicates the type of -// shader to be created. -// -// Two types of shaders are supported. A shader of type GL.VERTEX_SHADER is a -// shader that is intended to run on the programmable vertex processor and -// replace the fixed functionality vertex processing in OpenGL. A shader of -// type GL.FRAGMENT_SHADER is a shader that is intended to run on the -// programmable fragment processor and replace the fixed functionality -// fragment processing in OpenGL. -// -// When created, a shader object's GL.SHADER_TYPE parameter is set to either -// GL.VERTEX_SHADER or GL.FRAGMENT_SHADER, depending on the value of -// shaderType. -// -// Like display lists and texture objects, the name space for shader objects -// may be shared across a set of contexts, as long as the server sides of the -// contexts share the same address space. If the name space is shared across -// contexts, any attached objects and the data associated with those attached -// objects are shared as well. -// -// This function returns 0 if an error occurs creating the shader object. -// -// Error GL.INVALID_ENUM is generated if shaderType is not an accepted value. -// GL.INVALID_OPERATION is generated if CreateShader is executed between the -// execution of Begin and the corresponding execution of End. -// -// CreateShader is available in GL version 2.0 or greater. -func (gl *GL) CreateShader(gltype glbase.Enum) glbase.Shader { - glresult := C.gl2_1_glCreateShader(gl.funcs, C.GLenum(gltype)) - return glbase.Shader(glresult) -} - -// CreateProgram creates an empty program object and returns a non-zero -// value by which it can be referenced. A program object is an object to -// which shader objects can be attached. This provides a mechanism to specify -// the shader objects that will be linked to create a program. It also -// provides a means for checking the compatibility of the shaders that will -// be used to create a program (for instance, checking the compatibility -// between a vertex shader and a fragment shader). When no longer needed as -// part of a program object, shader objects can be detached. -// -// One or more executables are created in a program object by successfully -// attaching shader objects to it with AttachShader, successfully compiling -// the shader objects with CompileShader, and successfully linking the -// program object with LinkProgram. These executables are made part of -// current state when UseProgram is called. Program objects can be deleted -// by calling DeleteProgram. The memory associated with the program object -// will be deleted when it is no longer part of current rendering state for -// any context. -// -// Like display lists and texture objects, the name space for program objects -// may be shared across a set of contexts, as long as the server sides of the -// contexts share the same address space. If the name space is shared across -// contexts, any attached objects and the data associated with those attached -// objects are shared as well. -// -// Applications are responsible for providing the synchronization across API -// calls when objects are accessed from different execution threads. -// -// This function returns 0 if an error occurs creating the program object. -// -// Error GL.INVALID_OPERATION is generated if CreateProgram is executed -// between the execution of Begin and the corresponding execution of End. -// -// CreateProgram is available in GL version 2.0 or greater. -func (gl *GL) CreateProgram() glbase.Program { - glresult := C.gl2_1_glCreateProgram(gl.funcs) - return glbase.Program(glresult) -} - -// CompileShader compiles the source code strings that have been stored in -// the shader object specified by shader. -// -// The compilation status will be stored as part of the shader object's -// state. This value will be set to GL.TRUE if the shader was compiled without -// errors and is ready for use, and GL.FALSE otherwise. It can be queried by -// calling GetShaderiv with arguments shader and GL.COMPILE_STATUS. -// -// Compilation of a shader can fail for a number of reasons as specified by -// the OpenGL Shading Language Specification. Whether or not the compilation -// was successful, information about the compilation can be obtained from the -// shader object's information log by calling GetShaderInfoLog. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader is not a shader -// object. GL.INVALID_OPERATION is generated if CompileShader is executed -// between the execution of Begin and the corresponding execution of End. -// -// CompileShader is available in GL version 2.0 or greater. -func (gl *GL) CompileShader(shader glbase.Shader) { - C.gl2_1_glCompileShader(gl.funcs, C.GLuint(shader)) -} - -// BindAttribLocation associates a user-defined attribute variable in the program -// object specified by program with a generic vertex attribute index. The name -// parameter specifies the name of the vertex shader attribute variable to -// which index is to be bound. When program is made part of the current state, -// values provided via the generic vertex attribute index will modify the -// value of the user-defined attribute variable specified by name. -// -// If name refers to a matrix attribute variable, index refers to the first -// column of the matrix. Other matrix columns are then automatically bound to -// locations index+1 for a matrix of type mat2; index+1 and index+2 for a -// matrix of type mat3; and index+1, index+2, and index+3 for a matrix of -// type mat4. -// -// This command makes it possible for vertex shaders to use descriptive names -// for attribute variables rather than generic variables that are numbered -// from 0 to GL.MAX_VERTEX_ATTRIBS-1. The values sent to each generic -// attribute index are part of current state, just like standard vertex -// attributes such as color, normal, and vertex position. If a different -// program object is made current by calling UseProgram, the generic vertex -// attributes are tracked in such a way that the same values will be observed -// by attributes in the new program object that are also bound to index. -// -// Attribute variable name-to-generic attribute index bindings for a program -// object can be explicitly assigned at any time by calling -// BindAttribLocation. Attribute bindings do not go into effect until -// LinkProgram is called. After a program object has been linked -// successfully, the index values for generic attributes remain fixed (and -// their values can be queried) until the next link command occurs. -// -// Applications are not allowed to bind any of the standard OpenGL vertex -// attributes using this command, as they are bound automatically when -// needed. Any attribute binding that occurs after the program object has -// been linked will not take effect until the next time the program object is -// linked. -// -// If name was bound previously, that information is lost. Thus you cannot -// bind one user-defined attribute variable to multiple indices, but you can -// bind multiple user-defined attribute variables to the same index. -// -// Applications are allowed to bind more than one user-defined attribute -// variable to the same generic vertex attribute index. This is called -// aliasing, and it is allowed only if just one of the aliased attributes is -// active in the executable program, or if no path through the shader -// consumes more than one attribute of a set of attributes aliased to the -// same location. The compiler and linker are allowed to assume that no -// aliasing is done and are free to employ optimizations that work only in -// the absence of aliasing. OpenGL implementations are not required to do -// error checking to detect aliasing. Because there is no way to bind -// standard attributes, it is not possible to alias generic attributes with -// conventional ones (except for generic attribute 0). -// -// BindAttribLocation can be called before any vertex shader objects are -// bound to the specified program object. It is also permissible to bind a -// generic attribute index to an attribute variable name that is never used -// in a vertex shader. -// -// Active attributes that are not explicitly bound will be bound by the -// linker when LinkProgram is called. The locations assigned can be queried -// by calling GetAttribLocation. -// -// Error GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. -// GL.INVALID_OPERATION is generated if name starts with the reserved prefix "gl_". -// GL.INVALID_VALUE is generated if program is not a value generated by OpenGL. -// GL.INVALID_OPERATION is generated if program is not a program object. -// GL.INVALID_OPERATION is generated if BindAttribLocation is executed -// between the execution of Begin and the corresponding execution of End. -// -// BindAttribLocation is available in GL version 2.0 or greater. -func (gl *GL) BindAttribLocation(program glbase.Program, index glbase.Attrib, name string) { - name_cstr := C.CString(name) - C.gl2_1_glBindAttribLocation(gl.funcs, C.GLuint(program), C.GLuint(index), (*C.GLchar)(name_cstr)) - C.free(unsafe.Pointer(name_cstr)) -} - -// AttachShader attaches a shader object to a program object. -// -// In order to create an executable, there must be a way to specify the list -// of things that will be linked together. Program objects provide this -// mechanism. Shaders that are to be linked together in a program object must -// first be attached to that program object. This indicates that shader will -// be included in link operations that will be performed on program. -// -// All operations that can be performed on a shader object are valid whether -// or not the shader object is attached to a program object. It is -// permissible to attach a shader object to a program object before source -// code has been loaded into the shader object or before the shader object -// has been compiled. It is permissible to attach multiple shader objects of -// the same type because each may contain a portion of the complete shader. -// It is also permissible to attach a shader object to more than one program -// object. If a shader object is deleted while it is attached to a program -// object, it will be flagged for deletion, and deletion will not occur until -// DetachShader is called to detach it from all program objects to which it -// is attached. -// -// Error GL.INVALID_VALUE is generated if either program or shader is not a -// value generated by OpenGL. GL.INVALID_OPERATION is generated if program -// is not a program object. GL.INVALID_OPERATION is generated if shader is -// not a shader object. GL.INVALID_OPERATION is generated if shader is -// already attached to program. GL.INVALID_OPERATION is generated if -// AttachShader is executed between the execution of Begin and the -// corresponding execution of End. -// -// AttachShader is available in GL version 2.0 or greater. -func (gl *GL) AttachShader(program glbase.Program, shader glbase.Shader) { - C.gl2_1_glAttachShader(gl.funcs, C.GLuint(program), C.GLuint(shader)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glStencilMaskSeparate.xml -func (gl *GL) StencilMaskSeparate(face glbase.Enum, mask uint32) { - C.gl2_1_glStencilMaskSeparate(gl.funcs, C.GLenum(face), C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glStencilFuncSeparate.xml -func (gl *GL) StencilFuncSeparate(face, glfunc glbase.Enum, ref int32, mask uint32) { - C.gl2_1_glStencilFuncSeparate(gl.funcs, C.GLenum(face), C.GLenum(glfunc), C.GLint(ref), C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glStencilOpSeparate.xml -func (gl *GL) StencilOpSeparate(face, sfail, dpfail, dppass glbase.Enum) { - C.gl2_1_glStencilOpSeparate(gl.funcs, C.GLenum(face), C.GLenum(sfail), C.GLenum(dpfail), C.GLenum(dppass)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDrawBuffers.xml -func (gl *GL) DrawBuffers(n int, bufs []glbase.Enum) { - C.gl2_1_glDrawBuffers(gl.funcs, C.GLsizei(n), (*C.GLenum)(unsafe.Pointer(&bufs[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glBlendEquationSeparate.xml -func (gl *GL) BlendEquationSeparate(modeRGB, modeAlpha glbase.Enum) { - C.gl2_1_glBlendEquationSeparate(gl.funcs, C.GLenum(modeRGB), C.GLenum(modeAlpha)) -} - -// UniformMatrix4x3fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix4x3fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix4x3fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(4*3) != 0 { - panic("invalid value length for UniformMatrix4x3fv") - } - count := len(value) / (4 * 3) - C.gl2_1_glUniformMatrix4x3fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix3x4fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix3x4fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix3x4fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(3*4) != 0 { - panic("invalid value length for UniformMatrix3x4fv") - } - count := len(value) / (3 * 4) - C.gl2_1_glUniformMatrix3x4fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix4x2fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix4x2fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix4x2fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(4*2) != 0 { - panic("invalid value length for UniformMatrix4x2fv") - } - count := len(value) / (4 * 2) - C.gl2_1_glUniformMatrix4x2fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix2x4fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix2x4fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix2x4fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(2*4) != 0 { - panic("invalid value length for UniformMatrix2x4fv") - } - count := len(value) / (2 * 4) - C.gl2_1_glUniformMatrix2x4fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix3x2fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix3x2fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix3x2fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(3*2) != 0 { - panic("invalid value length for UniformMatrix3x2fv") - } - count := len(value) / (3 * 2) - C.gl2_1_glUniformMatrix3x2fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix2x3fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix2x3fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix2x3fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(2*3) != 0 { - panic("invalid value length for UniformMatrix2x3fv") - } - count := len(value) / (2 * 3) - C.gl2_1_glUniformMatrix2x3fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTranslatef.xml -func (gl *GL) Translatef(x, y, z float32) { - C.gl2_1_glTranslatef(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTranslated.xml -func (gl *GL) Translated(x, y, z float64) { - C.gl2_1_glTranslated(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glScalef.xml -func (gl *GL) Scalef(x, y, z float32) { - C.gl2_1_glScalef(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glScaled.xml -func (gl *GL) Scaled(x, y, z float64) { - C.gl2_1_glScaled(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRotatef.xml -func (gl *GL) Rotatef(angle, x, y, z float32) { - C.gl2_1_glRotatef(gl.funcs, C.GLfloat(angle), C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRotated.xml -func (gl *GL) Rotated(angle, x, y, z float64) { - C.gl2_1_glRotated(gl.funcs, C.GLdouble(angle), C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPushMatrix.xml -func (gl *GL) PushMatrix() { - C.gl2_1_glPushMatrix(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPopMatrix.xml -func (gl *GL) PopMatrix() { - C.gl2_1_glPopMatrix(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glOrtho.xml -func (gl *GL) Ortho(left, right, bottom, top, zNear, zFar float64) { - C.gl2_1_glOrtho(gl.funcs, C.GLdouble(left), C.GLdouble(right), C.GLdouble(bottom), C.GLdouble(top), C.GLdouble(zNear), C.GLdouble(zFar)) -} - -// MultMatrixd multiplies the current matrix with the provided matrix. -// -// The m parameter must hold 16 consecutive elements of a 4x4 column-major matrix. -// -// The current matrix is determined by the current matrix mode (see -// MatrixMode). It is either the projection matrix, modelview matrix, or the -// texture matrix. -// -// For example, if the current matrix is C and the coordinates to be transformed -// are v = (v[0], v[1], v[2], v[3]), then the current transformation is C × v, or -// -// c[0] c[4] c[8] c[12] v[0] -// c[1] c[5] c[9] c[13] v[1] -// c[2] c[6] c[10] c[14] X v[2] -// c[3] c[7] c[11] c[15] v[3] -// -// Calling MultMatrix with an argument of m = m[0], m[1], ..., m[15] -// replaces the current transformation with (C X M) x v, or -// -// c[0] c[4] c[8] c[12] m[0] m[4] m[8] m[12] v[0] -// c[1] c[5] c[9] c[13] m[1] m[5] m[9] m[13] v[1] -// c[2] c[6] c[10] c[14] X m[2] m[6] m[10] m[14] X v[2] -// c[3] c[7] c[11] c[15] m[3] m[7] m[11] m[15] v[3] -// -// Where 'X' denotes matrix multiplication, and v is represented as a 4x1 matrix. -// -// While the elements of the matrix may be specified with single or double -// precision, the GL may store or operate on these values in less-than-single -// precision. -// -// In many computer languages, 4×4 arrays are represented in row-major -// order. The transformations just described represent these matrices in -// column-major order. The order of the multiplication is important. For -// example, if the current transformation is a rotation, and MultMatrix is -// called with a translation matrix, the translation is done directly on the -// coordinates to be transformed, while the rotation is done on the results -// of that translation. -// -// GL.INVALID_OPERATION is generated if MultMatrix is executed between the -// execution of Begin and the corresponding execution of End. -func (gl *GL) MultMatrixd(m []float64) { - if len(m) != 16 { - panic("parameter m must have length 16 for the 4x4 matrix") - } - C.gl2_1_glMultMatrixd(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&m[0]))) -} - -// MultMatrixf multiplies the current matrix with the provided matrix. -// -// The m parameter must hold 16 consecutive elements of a 4x4 column-major matrix. -// -// The current matrix is determined by the current matrix mode (see -// MatrixMode). It is either the projection matrix, modelview matrix, or the -// texture matrix. -// -// For example, if the current matrix is C and the coordinates to be transformed -// are v = (v[0], v[1], v[2], v[3]), then the current transformation is C × v, or -// -// c[0] c[4] c[8] c[12] v[0] -// c[1] c[5] c[9] c[13] v[1] -// c[2] c[6] c[10] c[14] X v[2] -// c[3] c[7] c[11] c[15] v[3] -// -// Calling MultMatrix with an argument of m = m[0], m[1], ..., m[15] -// replaces the current transformation with (C X M) x v, or -// -// c[0] c[4] c[8] c[12] m[0] m[4] m[8] m[12] v[0] -// c[1] c[5] c[9] c[13] m[1] m[5] m[9] m[13] v[1] -// c[2] c[6] c[10] c[14] X m[2] m[6] m[10] m[14] X v[2] -// c[3] c[7] c[11] c[15] m[3] m[7] m[11] m[15] v[3] -// -// Where 'X' denotes matrix multiplication, and v is represented as a 4x1 matrix. -// -// While the elements of the matrix may be specified with single or double -// precision, the GL may store or operate on these values in less-than-single -// precision. -// -// In many computer languages, 4×4 arrays are represented in row-major -// order. The transformations just described represent these matrices in -// column-major order. The order of the multiplication is important. For -// example, if the current transformation is a rotation, and MultMatrix is -// called with a translation matrix, the translation is done directly on the -// coordinates to be transformed, while the rotation is done on the results -// of that translation. -// -// GL.INVALID_OPERATION is generated if MultMatrix is executed between the -// execution of Begin and the corresponding execution of End. -func (gl *GL) MultMatrixf(m []float32) { - if len(m) != 16 { - panic("parameter m must have length 16 for the 4x4 matrix") - } - C.gl2_1_glMultMatrixf(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMatrixMode.xml -func (gl *GL) MatrixMode(mode glbase.Enum) { - C.gl2_1_glMatrixMode(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLoadMatrixd.xml -func (gl *GL) LoadMatrixd(m []float64) { - C.gl2_1_glLoadMatrixd(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLoadMatrixf.xml -func (gl *GL) LoadMatrixf(m []float32) { - C.gl2_1_glLoadMatrixf(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLoadIdentity.xml -func (gl *GL) LoadIdentity() { - C.gl2_1_glLoadIdentity(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFrustum.xml -func (gl *GL) Frustum(left, right, bottom, top, zNear, zFar float64) { - C.gl2_1_glFrustum(gl.funcs, C.GLdouble(left), C.GLdouble(right), C.GLdouble(bottom), C.GLdouble(top), C.GLdouble(zNear), C.GLdouble(zFar)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIsList.xml -func (gl *GL) IsList(list uint32) bool { - glresult := C.gl2_1_glIsList(gl.funcs, C.GLuint(list)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexGeniv.xml -func (gl *GL) GetTexGeniv(coord, pname glbase.Enum, params []int32) { - C.gl2_1_glGetTexGeniv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexGenfv.xml -func (gl *GL) GetTexGenfv(coord, pname glbase.Enum, params []float32) { - C.gl2_1_glGetTexGenfv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexGendv.xml -func (gl *GL) GetTexGendv(coord, pname glbase.Enum, params []float64) { - C.gl2_1_glGetTexGendv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexEnviv.xml -func (gl *GL) GetTexEnviv(target, pname glbase.Enum, params []int32) { - C.gl2_1_glGetTexEnviv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexEnvfv.xml -func (gl *GL) GetTexEnvfv(target, pname glbase.Enum, params []float32) { - C.gl2_1_glGetTexEnvfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetPolygonStipple.xml -func (gl *GL) GetPolygonStipple(mask []uint8) { - C.gl2_1_glGetPolygonStipple(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&mask[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetPixelMapusv.xml -func (gl *GL) GetPixelMapusv(glmap glbase.Enum, values []uint16) { - C.gl2_1_glGetPixelMapusv(gl.funcs, C.GLenum(glmap), (*C.GLushort)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetPixelMapuiv.xml -func (gl *GL) GetPixelMapuiv(glmap glbase.Enum, values []uint32) { - C.gl2_1_glGetPixelMapuiv(gl.funcs, C.GLenum(glmap), (*C.GLuint)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetPixelMapfv.xml -func (gl *GL) GetPixelMapfv(glmap glbase.Enum, values []float32) { - C.gl2_1_glGetPixelMapfv(gl.funcs, C.GLenum(glmap), (*C.GLfloat)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetMaterialiv.xml -func (gl *GL) GetMaterialiv(face, pname glbase.Enum, params []int32) { - C.gl2_1_glGetMaterialiv(gl.funcs, C.GLenum(face), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetMaterialfv.xml -func (gl *GL) GetMaterialfv(face, pname glbase.Enum, params []float32) { - C.gl2_1_glGetMaterialfv(gl.funcs, C.GLenum(face), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetMapiv.xml -func (gl *GL) GetMapiv(target, query glbase.Enum, v []int32) { - C.gl2_1_glGetMapiv(gl.funcs, C.GLenum(target), C.GLenum(query), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetMapfv.xml -func (gl *GL) GetMapfv(target, query glbase.Enum, v []float32) { - C.gl2_1_glGetMapfv(gl.funcs, C.GLenum(target), C.GLenum(query), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetMapdv.xml -func (gl *GL) GetMapdv(target, query glbase.Enum, v []float64) { - C.gl2_1_glGetMapdv(gl.funcs, C.GLenum(target), C.GLenum(query), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetLightiv.xml -func (gl *GL) GetLightiv(light, pname glbase.Enum, params []int32) { - C.gl2_1_glGetLightiv(gl.funcs, C.GLenum(light), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetLightfv.xml -func (gl *GL) GetLightfv(light, pname glbase.Enum, params []float32) { - C.gl2_1_glGetLightfv(gl.funcs, C.GLenum(light), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetClipPlane.xml -func (gl *GL) GetClipPlane(plane glbase.Enum, equation []float64) { - C.gl2_1_glGetClipPlane(gl.funcs, C.GLenum(plane), (*C.GLdouble)(unsafe.Pointer(&equation[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDrawPixels.xml -func (gl *GL) DrawPixels(width, height int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl2_1_glDrawPixels(gl.funcs, C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyPixels.xml -func (gl *GL) CopyPixels(x, y, width, height int, gltype glbase.Enum) { - C.gl2_1_glCopyPixels(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height), C.GLenum(gltype)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPixelMapusv.xml -func (gl *GL) PixelMapusv(glmap glbase.Enum, mapsize int32, values []uint16) { - C.gl2_1_glPixelMapusv(gl.funcs, C.GLenum(glmap), C.GLint(mapsize), (*C.GLushort)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPixelMapuiv.xml -func (gl *GL) PixelMapuiv(glmap glbase.Enum, mapsize int32, values []uint32) { - C.gl2_1_glPixelMapuiv(gl.funcs, C.GLenum(glmap), C.GLint(mapsize), (*C.GLuint)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPixelMapfv.xml -func (gl *GL) PixelMapfv(glmap glbase.Enum, mapsize int32, values []float32) { - C.gl2_1_glPixelMapfv(gl.funcs, C.GLenum(glmap), C.GLint(mapsize), (*C.GLfloat)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPixelTransferi.xml -func (gl *GL) PixelTransferi(pname glbase.Enum, param int32) { - C.gl2_1_glPixelTransferi(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPixelTransferf.xml -func (gl *GL) PixelTransferf(pname glbase.Enum, param float32) { - C.gl2_1_glPixelTransferf(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPixelZoom.xml -func (gl *GL) PixelZoom(xfactor, yfactor float32) { - C.gl2_1_glPixelZoom(gl.funcs, C.GLfloat(xfactor), C.GLfloat(yfactor)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glAlphaFunc.xml -func (gl *GL) AlphaFunc(glfunc glbase.Enum, ref float32) { - C.gl2_1_glAlphaFunc(gl.funcs, C.GLenum(glfunc), C.GLfloat(ref)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalPoint2.xml -func (gl *GL) EvalPoint2(i, j int32) { - C.gl2_1_glEvalPoint2(gl.funcs, C.GLint(i), C.GLint(j)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalMesh2.xml -func (gl *GL) EvalMesh2(mode glbase.Enum, i1, i2, j1, j2 int32) { - C.gl2_1_glEvalMesh2(gl.funcs, C.GLenum(mode), C.GLint(i1), C.GLint(i2), C.GLint(j1), C.GLint(j2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalPoint1.xml -func (gl *GL) EvalPoint1(i int32) { - C.gl2_1_glEvalPoint1(gl.funcs, C.GLint(i)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalMesh1.xml -func (gl *GL) EvalMesh1(mode glbase.Enum, i1, i2 int32) { - C.gl2_1_glEvalMesh1(gl.funcs, C.GLenum(mode), C.GLint(i1), C.GLint(i2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalCoord2fv.xml -func (gl *GL) EvalCoord2fv(u []float32) { - if len(u) != 2 { - panic("parameter u has incorrect length") - } - C.gl2_1_glEvalCoord2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&u[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalCoord2f.xml -func (gl *GL) EvalCoord2f(u, v float32) { - C.gl2_1_glEvalCoord2f(gl.funcs, C.GLfloat(u), C.GLfloat(v)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalCoord2dv.xml -func (gl *GL) EvalCoord2dv(u []float64) { - if len(u) != 2 { - panic("parameter u has incorrect length") - } - C.gl2_1_glEvalCoord2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&u[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalCoord2d.xml -func (gl *GL) EvalCoord2d(u, v float64) { - C.gl2_1_glEvalCoord2d(gl.funcs, C.GLdouble(u), C.GLdouble(v)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalCoord1fv.xml -func (gl *GL) EvalCoord1fv(u []float32) { - C.gl2_1_glEvalCoord1fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&u[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalCoord1f.xml -func (gl *GL) EvalCoord1f(u float32) { - C.gl2_1_glEvalCoord1f(gl.funcs, C.GLfloat(u)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalCoord1dv.xml -func (gl *GL) EvalCoord1dv(u []float64) { - C.gl2_1_glEvalCoord1dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&u[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEvalCoord1d.xml -func (gl *GL) EvalCoord1d(u float64) { - C.gl2_1_glEvalCoord1d(gl.funcs, C.GLdouble(u)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMapGrid2f.xml -func (gl *GL) MapGrid2f(un int32, u1, u2 float32, vn int32, v1, v2 float32) { - C.gl2_1_glMapGrid2f(gl.funcs, C.GLint(un), C.GLfloat(u1), C.GLfloat(u2), C.GLint(vn), C.GLfloat(v1), C.GLfloat(v2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMapGrid2d.xml -func (gl *GL) MapGrid2d(un int32, u1, u2 float64, vn int32, v1, v2 float64) { - C.gl2_1_glMapGrid2d(gl.funcs, C.GLint(un), C.GLdouble(u1), C.GLdouble(u2), C.GLint(vn), C.GLdouble(v1), C.GLdouble(v2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMapGrid1f.xml -func (gl *GL) MapGrid1f(un int32, u1, u2 float32) { - C.gl2_1_glMapGrid1f(gl.funcs, C.GLint(un), C.GLfloat(u1), C.GLfloat(u2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMapGrid1d.xml -func (gl *GL) MapGrid1d(un int32, u1, u2 float64) { - C.gl2_1_glMapGrid1d(gl.funcs, C.GLint(un), C.GLdouble(u1), C.GLdouble(u2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMap2f.xml -func (gl *GL) Map2f(target glbase.Enum, u1, u2 float32, ustride, uorder int32, v1, v2 float32, vstride, vorder int32, points []float32) { - C.gl2_1_glMap2f(gl.funcs, C.GLenum(target), C.GLfloat(u1), C.GLfloat(u2), C.GLint(ustride), C.GLint(uorder), C.GLfloat(v1), C.GLfloat(v2), C.GLint(vstride), C.GLint(vorder), (*C.GLfloat)(unsafe.Pointer(&points[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMap2d.xml -func (gl *GL) Map2d(target glbase.Enum, u1, u2 float64, ustride, uorder int32, v1, v2 float64, vstride, vorder int32, points []float64) { - C.gl2_1_glMap2d(gl.funcs, C.GLenum(target), C.GLdouble(u1), C.GLdouble(u2), C.GLint(ustride), C.GLint(uorder), C.GLdouble(v1), C.GLdouble(v2), C.GLint(vstride), C.GLint(vorder), (*C.GLdouble)(unsafe.Pointer(&points[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMap1f.xml -func (gl *GL) Map1f(target glbase.Enum, u1, u2 float32, stride, order int, points []float32) { - C.gl2_1_glMap1f(gl.funcs, C.GLenum(target), C.GLfloat(u1), C.GLfloat(u2), C.GLint(stride), C.GLint(order), (*C.GLfloat)(unsafe.Pointer(&points[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMap1d.xml -func (gl *GL) Map1d(target glbase.Enum, u1, u2 float64, stride, order int, points []float64) { - C.gl2_1_glMap1d(gl.funcs, C.GLenum(target), C.GLdouble(u1), C.GLdouble(u2), C.GLint(stride), C.GLint(order), (*C.GLdouble)(unsafe.Pointer(&points[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPushAttrib.xml -func (gl *GL) PushAttrib(mask glbase.Bitfield) { - C.gl2_1_glPushAttrib(gl.funcs, C.GLbitfield(mask)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPopAttrib.xml -func (gl *GL) PopAttrib() { - C.gl2_1_glPopAttrib(gl.funcs) -} - -// Accum executes an operation on the accumulation buffer. -// -// Parameter op defines the accumulation buffer operation (GL.ACCUM, GL.LOAD, -// GL.ADD, GL.MULT, or GL.RETURN) and specifies how the value parameter is -// used. -// -// The accumulation buffer is an extended-range color buffer. Images are not -// rendered into it. Rather, images rendered into one of the color buffers -// are added to the contents of the accumulation buffer after rendering. -// Effects such as antialiasing (of points, lines, and polygons), motion -// blur, and depth of field can be created by accumulating images generated -// with different transformation matrices. -// -// Each pixel in the accumulation buffer consists of red, green, blue, and -// alpha values. The number of bits per component in the accumulation buffer -// depends on the implementation. You can examine this number by calling -// GetIntegerv four times, with arguments GL.ACCUM_RED_BITS, -// GL.ACCUM_GREEN_BITS, GL.ACCUM_BLUE_BITS, and GL.ACCUM_ALPHA_BITS. -// Regardless of the number of bits per component, the range of values stored -// by each component is (-1, 1). The accumulation buffer pixels are mapped -// one-to-one with frame buffer pixels. -// -// All accumulation buffer operations are limited to the area of the current -// scissor box and applied identically to the red, green, blue, and alpha -// components of each pixel. If a Accum operation results in a value outside -// the range (-1, 1), the contents of an accumulation buffer pixel component -// are undefined. -// -// The operations are as follows: -// -// GL.ACCUM -// Obtains R, G, B, and A values from the buffer currently selected for -// reading (see ReadBuffer). Each component value is divided by 2 n - -// 1 , where n is the number of bits allocated to each color component -// in the currently selected buffer. The result is a floating-point -// value in the range 0 1 , which is multiplied by value and added to -// the corresponding pixel component in the accumulation buffer, -// thereby updating the accumulation buffer. -// -// GL.LOAD -// Similar to GL.ACCUM, except that the current value in the -// accumulation buffer is not used in the calculation of the new value. -// That is, the R, G, B, and A values from the currently selected -// buffer are divided by 2 n - 1 , multiplied by value, and then stored -// in the corresponding accumulation buffer cell, overwriting the -// current value. -// -// GL.ADD -// Adds value to each R, G, B, and A in the accumulation buffer. -// -// GL.MULT -// Multiplies each R, G, B, and A in the accumulation buffer by value -// and returns the scaled component to its corresponding accumulation -// buffer location. -// -// GL.RETURN -// Transfers accumulation buffer values to the color buffer or buffers -// currently selected for writing. Each R, G, B, and A component is -// multiplied by value, then multiplied by 2 n - 1 , clamped to the -// range 0 2 n - 1 , and stored in the corresponding display buffer -// cell. The only fragment operations that are applied to this transfer -// are pixel ownership, scissor, dithering, and color writemasks. -// -// To clear the accumulation buffer, call ClearAccum with R, G, B, and A -// values to set it to, then call Clear with the accumulation buffer -// enabled. -// -// Error GL.INVALID_ENUM is generated if op is not an accepted value. -// GL.INVALID_OPERATION is generated if there is no accumulation buffer. -// GL.INVALID_OPERATION is generated if Accum is executed between the -// execution of Begin and the corresponding execution of End. -func (gl *GL) Accum(op glbase.Enum, value float32) { - C.gl2_1_glAccum(gl.funcs, C.GLenum(op), C.GLfloat(value)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexMask.xml -func (gl *GL) IndexMask(mask uint32) { - C.gl2_1_glIndexMask(gl.funcs, C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glClearIndex.xml -func (gl *GL) ClearIndex(c float32) { - C.gl2_1_glClearIndex(gl.funcs, C.GLfloat(c)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glClearAccum.xml -func (gl *GL) ClearAccum(red, green, blue, alpha float32) { - C.gl2_1_glClearAccum(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPushName.xml -func (gl *GL) PushName(name uint32) { - C.gl2_1_glPushName(gl.funcs, C.GLuint(name)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPopName.xml -func (gl *GL) PopName() { - C.gl2_1_glPopName(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPassThrough.xml -func (gl *GL) PassThrough(token float32) { - C.gl2_1_glPassThrough(gl.funcs, C.GLfloat(token)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLoadName.xml -func (gl *GL) LoadName(name uint32) { - C.gl2_1_glLoadName(gl.funcs, C.GLuint(name)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glInitNames.xml -func (gl *GL) InitNames() { - C.gl2_1_glInitNames(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRenderMode.xml -func (gl *GL) RenderMode(mode glbase.Enum) int32 { - glresult := C.gl2_1_glRenderMode(gl.funcs, C.GLenum(mode)) - return int32(glresult) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSelectBuffer.xml -func (gl *GL) SelectBuffer(size int, buffer []glbase.Buffer) { - C.gl2_1_glSelectBuffer(gl.funcs, C.GLsizei(size), (*C.GLuint)(unsafe.Pointer(&buffer[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFeedbackBuffer.xml -func (gl *GL) FeedbackBuffer(size int, gltype glbase.Enum, buffer []float32) { - C.gl2_1_glFeedbackBuffer(gl.funcs, C.GLsizei(size), C.GLenum(gltype), (*C.GLfloat)(unsafe.Pointer(&buffer[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexGeniv.xml -func (gl *GL) TexGeniv(coord, pname glbase.Enum, params []int32) { - C.gl2_1_glTexGeniv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexGeni.xml -func (gl *GL) TexGeni(coord, pname glbase.Enum, param int32) { - C.gl2_1_glTexGeni(gl.funcs, C.GLenum(coord), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexGenfv.xml -func (gl *GL) TexGenfv(coord, pname glbase.Enum, params []float32) { - C.gl2_1_glTexGenfv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexGenf.xml -func (gl *GL) TexGenf(coord, pname glbase.Enum, param float32) { - C.gl2_1_glTexGenf(gl.funcs, C.GLenum(coord), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexGendv.xml -func (gl *GL) TexGendv(coord, pname glbase.Enum, params []float64) { - C.gl2_1_glTexGendv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexGend.xml -func (gl *GL) TexGend(coord, pname glbase.Enum, param float64) { - C.gl2_1_glTexGend(gl.funcs, C.GLenum(coord), C.GLenum(pname), C.GLdouble(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexEnviv.xml -func (gl *GL) TexEnviv(target, pname glbase.Enum, params []int32) { - C.gl2_1_glTexEnviv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexEnvi.xml -func (gl *GL) TexEnvi(target, pname glbase.Enum, param int32) { - C.gl2_1_glTexEnvi(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexEnvfv.xml -func (gl *GL) TexEnvfv(target, pname glbase.Enum, params []float32) { - C.gl2_1_glTexEnvfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexEnvf.xml -func (gl *GL) TexEnvf(target, pname glbase.Enum, param float32) { - C.gl2_1_glTexEnvf(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glShadeModel.xml -func (gl *GL) ShadeModel(mode glbase.Enum) { - C.gl2_1_glShadeModel(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPolygonStipple.xml -func (gl *GL) PolygonStipple(mask []uint8) { - C.gl2_1_glPolygonStipple(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&mask[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMaterialiv.xml -func (gl *GL) Materialiv(face, pname glbase.Enum, params []int32) { - C.gl2_1_glMaterialiv(gl.funcs, C.GLenum(face), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMateriali.xml -func (gl *GL) Materiali(face, pname glbase.Enum, param int32) { - C.gl2_1_glMateriali(gl.funcs, C.GLenum(face), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMaterialfv.xml -func (gl *GL) Materialfv(face, pname glbase.Enum, params []float32) { - C.gl2_1_glMaterialfv(gl.funcs, C.GLenum(face), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMaterialf.xml -func (gl *GL) Materialf(face, pname glbase.Enum, param float32) { - C.gl2_1_glMaterialf(gl.funcs, C.GLenum(face), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLineStipple.xml -func (gl *GL) LineStipple(factor int32, pattern uint16) { - C.gl2_1_glLineStipple(gl.funcs, C.GLint(factor), C.GLushort(pattern)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLightModeliv.xml -func (gl *GL) LightModeliv(pname glbase.Enum, params []int32) { - C.gl2_1_glLightModeliv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLightModeli.xml -func (gl *GL) LightModeli(pname glbase.Enum, param int32) { - C.gl2_1_glLightModeli(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLightModelfv.xml -func (gl *GL) LightModelfv(pname glbase.Enum, params []float32) { - C.gl2_1_glLightModelfv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLightModelf.xml -func (gl *GL) LightModelf(pname glbase.Enum, param float32) { - C.gl2_1_glLightModelf(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLightiv.xml -func (gl *GL) Lightiv(light, pname glbase.Enum, params []int32) { - C.gl2_1_glLightiv(gl.funcs, C.GLenum(light), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLighti.xml -func (gl *GL) Lighti(light, pname glbase.Enum, param int32) { - C.gl2_1_glLighti(gl.funcs, C.GLenum(light), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLightfv.xml -func (gl *GL) Lightfv(light, pname glbase.Enum, params []float32) { - C.gl2_1_glLightfv(gl.funcs, C.GLenum(light), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLightf.xml -func (gl *GL) Lightf(light, pname glbase.Enum, param float32) { - C.gl2_1_glLightf(gl.funcs, C.GLenum(light), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFogiv.xml -func (gl *GL) Fogiv(pname glbase.Enum, params []int32) { - C.gl2_1_glFogiv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFogi.xml -func (gl *GL) Fogi(pname glbase.Enum, param int32) { - C.gl2_1_glFogi(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFogfv.xml -func (gl *GL) Fogfv(pname glbase.Enum, params []float32) { - C.gl2_1_glFogfv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFogf.xml -func (gl *GL) Fogf(pname glbase.Enum, param float32) { - C.gl2_1_glFogf(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColorMaterial.xml -func (gl *GL) ColorMaterial(face, mode glbase.Enum) { - C.gl2_1_glColorMaterial(gl.funcs, C.GLenum(face), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glClipPlane.xml -func (gl *GL) ClipPlane(plane glbase.Enum, equation []float64) { - C.gl2_1_glClipPlane(gl.funcs, C.GLenum(plane), (*C.GLdouble)(unsafe.Pointer(&equation[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex4sv.xml -func (gl *GL) Vertex4sv(v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl2_1_glVertex4sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex4s.xml -func (gl *GL) Vertex4s(x, y, z, w int16) { - C.gl2_1_glVertex4s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z), C.GLshort(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex4iv.xml -func (gl *GL) Vertex4iv(v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl2_1_glVertex4iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex4i.xml -func (gl *GL) Vertex4i(x, y, z, w int) { - C.gl2_1_glVertex4i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z), C.GLint(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex4fv.xml -func (gl *GL) Vertex4fv(v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl2_1_glVertex4fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex4f.xml -func (gl *GL) Vertex4f(x, y, z, w float32) { - C.gl2_1_glVertex4f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z), C.GLfloat(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex4dv.xml -func (gl *GL) Vertex4dv(v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl2_1_glVertex4dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex4d.xml -func (gl *GL) Vertex4d(x, y, z, w float64) { - C.gl2_1_glVertex4d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z), C.GLdouble(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex3sv.xml -func (gl *GL) Vertex3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_1_glVertex3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex3s.xml -func (gl *GL) Vertex3s(x, y, z int16) { - C.gl2_1_glVertex3s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex3iv.xml -func (gl *GL) Vertex3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_1_glVertex3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex3i.xml -func (gl *GL) Vertex3i(x, y, z int) { - C.gl2_1_glVertex3i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex3fv.xml -func (gl *GL) Vertex3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_1_glVertex3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex3f.xml -func (gl *GL) Vertex3f(x, y, z float32) { - C.gl2_1_glVertex3f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex3dv.xml -func (gl *GL) Vertex3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_1_glVertex3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex3d.xml -func (gl *GL) Vertex3d(x, y, z float64) { - C.gl2_1_glVertex3d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex2sv.xml -func (gl *GL) Vertex2sv(v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl2_1_glVertex2sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex2s.xml -func (gl *GL) Vertex2s(x, y int16) { - C.gl2_1_glVertex2s(gl.funcs, C.GLshort(x), C.GLshort(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex2iv.xml -func (gl *GL) Vertex2iv(v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl2_1_glVertex2iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex2i.xml -func (gl *GL) Vertex2i(x, y int) { - C.gl2_1_glVertex2i(gl.funcs, C.GLint(x), C.GLint(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex2fv.xml -func (gl *GL) Vertex2fv(v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl2_1_glVertex2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex2f.xml -func (gl *GL) Vertex2f(x, y float32) { - C.gl2_1_glVertex2f(gl.funcs, C.GLfloat(x), C.GLfloat(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex2dv.xml -func (gl *GL) Vertex2dv(v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl2_1_glVertex2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertex2d.xml -func (gl *GL) Vertex2d(x, y float64) { - C.gl2_1_glVertex2d(gl.funcs, C.GLdouble(x), C.GLdouble(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord4sv.xml -func (gl *GL) TexCoord4sv(v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl2_1_glTexCoord4sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord4s.xml -func (gl *GL) TexCoord4s(s, t, r, q int16) { - C.gl2_1_glTexCoord4s(gl.funcs, C.GLshort(s), C.GLshort(t), C.GLshort(r), C.GLshort(q)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord4iv.xml -func (gl *GL) TexCoord4iv(v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl2_1_glTexCoord4iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord4i.xml -func (gl *GL) TexCoord4i(s, t, r, q int32) { - C.gl2_1_glTexCoord4i(gl.funcs, C.GLint(s), C.GLint(t), C.GLint(r), C.GLint(q)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord4fv.xml -func (gl *GL) TexCoord4fv(v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl2_1_glTexCoord4fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord4f.xml -func (gl *GL) TexCoord4f(s, t, r, q float32) { - C.gl2_1_glTexCoord4f(gl.funcs, C.GLfloat(s), C.GLfloat(t), C.GLfloat(r), C.GLfloat(q)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord4dv.xml -func (gl *GL) TexCoord4dv(v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl2_1_glTexCoord4dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord4d.xml -func (gl *GL) TexCoord4d(s, t, r, q float64) { - C.gl2_1_glTexCoord4d(gl.funcs, C.GLdouble(s), C.GLdouble(t), C.GLdouble(r), C.GLdouble(q)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord3sv.xml -func (gl *GL) TexCoord3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_1_glTexCoord3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord3s.xml -func (gl *GL) TexCoord3s(s, t, r int16) { - C.gl2_1_glTexCoord3s(gl.funcs, C.GLshort(s), C.GLshort(t), C.GLshort(r)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord3iv.xml -func (gl *GL) TexCoord3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_1_glTexCoord3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord3i.xml -func (gl *GL) TexCoord3i(s, t, r int32) { - C.gl2_1_glTexCoord3i(gl.funcs, C.GLint(s), C.GLint(t), C.GLint(r)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord3fv.xml -func (gl *GL) TexCoord3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_1_glTexCoord3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord3f.xml -func (gl *GL) TexCoord3f(s, t, r float32) { - C.gl2_1_glTexCoord3f(gl.funcs, C.GLfloat(s), C.GLfloat(t), C.GLfloat(r)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord3dv.xml -func (gl *GL) TexCoord3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_1_glTexCoord3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord3d.xml -func (gl *GL) TexCoord3d(s, t, r float64) { - C.gl2_1_glTexCoord3d(gl.funcs, C.GLdouble(s), C.GLdouble(t), C.GLdouble(r)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord2sv.xml -func (gl *GL) TexCoord2sv(v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl2_1_glTexCoord2sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord2s.xml -func (gl *GL) TexCoord2s(s, t int16) { - C.gl2_1_glTexCoord2s(gl.funcs, C.GLshort(s), C.GLshort(t)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord2iv.xml -func (gl *GL) TexCoord2iv(v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl2_1_glTexCoord2iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord2i.xml -func (gl *GL) TexCoord2i(s, t int32) { - C.gl2_1_glTexCoord2i(gl.funcs, C.GLint(s), C.GLint(t)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord2fv.xml -func (gl *GL) TexCoord2fv(v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl2_1_glTexCoord2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord2f.xml -func (gl *GL) TexCoord2f(s, t float32) { - C.gl2_1_glTexCoord2f(gl.funcs, C.GLfloat(s), C.GLfloat(t)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord2dv.xml -func (gl *GL) TexCoord2dv(v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl2_1_glTexCoord2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord2d.xml -func (gl *GL) TexCoord2d(s, t float64) { - C.gl2_1_glTexCoord2d(gl.funcs, C.GLdouble(s), C.GLdouble(t)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord1sv.xml -func (gl *GL) TexCoord1sv(v []int16) { - C.gl2_1_glTexCoord1sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord1s.xml -func (gl *GL) TexCoord1s(s int16) { - C.gl2_1_glTexCoord1s(gl.funcs, C.GLshort(s)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord1iv.xml -func (gl *GL) TexCoord1iv(v []int32) { - C.gl2_1_glTexCoord1iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord1i.xml -func (gl *GL) TexCoord1i(s int32) { - C.gl2_1_glTexCoord1i(gl.funcs, C.GLint(s)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord1fv.xml -func (gl *GL) TexCoord1fv(v []float32) { - C.gl2_1_glTexCoord1fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord1f.xml -func (gl *GL) TexCoord1f(s float32) { - C.gl2_1_glTexCoord1f(gl.funcs, C.GLfloat(s)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord1dv.xml -func (gl *GL) TexCoord1dv(v []float64) { - C.gl2_1_glTexCoord1dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord1d.xml -func (gl *GL) TexCoord1d(s float64) { - C.gl2_1_glTexCoord1d(gl.funcs, C.GLdouble(s)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRectsv.xml -func (gl *GL) Rectsv(v1, v2 []int16) { - C.gl2_1_glRectsv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v1[0])), (*C.GLshort)(unsafe.Pointer(&v2[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRects.xml -func (gl *GL) Rects(x1, y1, x2, y2 int16) { - C.gl2_1_glRects(gl.funcs, C.GLshort(x1), C.GLshort(y1), C.GLshort(x2), C.GLshort(y2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRectiv.xml -func (gl *GL) Rectiv(v1, v2 []int32) { - C.gl2_1_glRectiv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v1[0])), (*C.GLint)(unsafe.Pointer(&v2[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRecti.xml -func (gl *GL) Recti(x1, y1, x2, y2 int32) { - C.gl2_1_glRecti(gl.funcs, C.GLint(x1), C.GLint(y1), C.GLint(x2), C.GLint(y2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRectfv.xml -func (gl *GL) Rectfv(v1, v2 []float32) { - C.gl2_1_glRectfv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v1[0])), (*C.GLfloat)(unsafe.Pointer(&v2[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRectf.xml -func (gl *GL) Rectf(x1, y1, x2, y2 float32) { - C.gl2_1_glRectf(gl.funcs, C.GLfloat(x1), C.GLfloat(y1), C.GLfloat(x2), C.GLfloat(y2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRectdv.xml -func (gl *GL) Rectdv(v1, v2 []float64) { - C.gl2_1_glRectdv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v1[0])), (*C.GLdouble)(unsafe.Pointer(&v2[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRectd.xml -func (gl *GL) Rectd(x1, y1, x2, y2 float64) { - C.gl2_1_glRectd(gl.funcs, C.GLdouble(x1), C.GLdouble(y1), C.GLdouble(x2), C.GLdouble(y2)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos4sv.xml -func (gl *GL) RasterPos4sv(v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl2_1_glRasterPos4sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos4s.xml -func (gl *GL) RasterPos4s(x, y, z, w int16) { - C.gl2_1_glRasterPos4s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z), C.GLshort(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos4iv.xml -func (gl *GL) RasterPos4iv(v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl2_1_glRasterPos4iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos4i.xml -func (gl *GL) RasterPos4i(x, y, z, w int) { - C.gl2_1_glRasterPos4i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z), C.GLint(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos4fv.xml -func (gl *GL) RasterPos4fv(v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl2_1_glRasterPos4fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos4f.xml -func (gl *GL) RasterPos4f(x, y, z, w float32) { - C.gl2_1_glRasterPos4f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z), C.GLfloat(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos4dv.xml -func (gl *GL) RasterPos4dv(v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl2_1_glRasterPos4dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos4d.xml -func (gl *GL) RasterPos4d(x, y, z, w float64) { - C.gl2_1_glRasterPos4d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z), C.GLdouble(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos3sv.xml -func (gl *GL) RasterPos3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_1_glRasterPos3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos3s.xml -func (gl *GL) RasterPos3s(x, y, z int16) { - C.gl2_1_glRasterPos3s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos3iv.xml -func (gl *GL) RasterPos3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_1_glRasterPos3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos3i.xml -func (gl *GL) RasterPos3i(x, y, z int) { - C.gl2_1_glRasterPos3i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos3fv.xml -func (gl *GL) RasterPos3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_1_glRasterPos3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos3f.xml -func (gl *GL) RasterPos3f(x, y, z float32) { - C.gl2_1_glRasterPos3f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos3dv.xml -func (gl *GL) RasterPos3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_1_glRasterPos3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos3d.xml -func (gl *GL) RasterPos3d(x, y, z float64) { - C.gl2_1_glRasterPos3d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos2sv.xml -func (gl *GL) RasterPos2sv(v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl2_1_glRasterPos2sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos2s.xml -func (gl *GL) RasterPos2s(x, y int16) { - C.gl2_1_glRasterPos2s(gl.funcs, C.GLshort(x), C.GLshort(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos2iv.xml -func (gl *GL) RasterPos2iv(v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl2_1_glRasterPos2iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos2i.xml -func (gl *GL) RasterPos2i(x, y int) { - C.gl2_1_glRasterPos2i(gl.funcs, C.GLint(x), C.GLint(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos2fv.xml -func (gl *GL) RasterPos2fv(v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl2_1_glRasterPos2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos2f.xml -func (gl *GL) RasterPos2f(x, y float32) { - C.gl2_1_glRasterPos2f(gl.funcs, C.GLfloat(x), C.GLfloat(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos2dv.xml -func (gl *GL) RasterPos2dv(v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl2_1_glRasterPos2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos2d.xml -func (gl *GL) RasterPos2d(x, y float64) { - C.gl2_1_glRasterPos2d(gl.funcs, C.GLdouble(x), C.GLdouble(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3sv.xml -func (gl *GL) Normal3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_1_glNormal3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3s.xml -func (gl *GL) Normal3s(nx, ny, nz int16) { - C.gl2_1_glNormal3s(gl.funcs, C.GLshort(nx), C.GLshort(ny), C.GLshort(nz)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3iv.xml -func (gl *GL) Normal3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_1_glNormal3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3i.xml -func (gl *GL) Normal3i(nx, ny, nz int32) { - C.gl2_1_glNormal3i(gl.funcs, C.GLint(nx), C.GLint(ny), C.GLint(nz)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3fv.xml -func (gl *GL) Normal3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_1_glNormal3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3f.xml -func (gl *GL) Normal3f(nx, ny, nz float32) { - C.gl2_1_glNormal3f(gl.funcs, C.GLfloat(nx), C.GLfloat(ny), C.GLfloat(nz)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3dv.xml -func (gl *GL) Normal3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_1_glNormal3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3d.xml -func (gl *GL) Normal3d(nx, ny, nz float64) { - C.gl2_1_glNormal3d(gl.funcs, C.GLdouble(nx), C.GLdouble(ny), C.GLdouble(nz)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3bv.xml -func (gl *GL) Normal3bv(v []byte) { - C.gl2_1_glNormal3bv(gl.funcs, (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormal3b.xml -func (gl *GL) Normal3b(nx, ny, nz byte) { - C.gl2_1_glNormal3b(gl.funcs, C.GLbyte(nx), C.GLbyte(ny), C.GLbyte(nz)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexsv.xml -func (gl *GL) Indexsv(c []int16) { - C.gl2_1_glIndexsv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexs.xml -func (gl *GL) Indexs(c int16) { - C.gl2_1_glIndexs(gl.funcs, C.GLshort(c)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexiv.xml -func (gl *GL) Indexiv(c []int32) { - C.gl2_1_glIndexiv(gl.funcs, (*C.GLint)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexi.xml -func (gl *GL) Indexi(c int32) { - C.gl2_1_glIndexi(gl.funcs, C.GLint(c)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexfv.xml -func (gl *GL) Indexfv(c []float32) { - C.gl2_1_glIndexfv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexf.xml -func (gl *GL) Indexf(c float32) { - C.gl2_1_glIndexf(gl.funcs, C.GLfloat(c)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexdv.xml -func (gl *GL) Indexdv(c []float64) { - C.gl2_1_glIndexdv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexd.xml -func (gl *GL) Indexd(c float64) { - C.gl2_1_glIndexd(gl.funcs, C.GLdouble(c)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEnd.xml -func (gl *GL) End() { - C.gl2_1_glEnd(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEdgeFlagv.xml -func (gl *GL) EdgeFlagv(flag []bool) { - C.gl2_1_glEdgeFlagv(gl.funcs, (*C.GLboolean)(unsafe.Pointer(&flag[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEdgeFlag.xml -func (gl *GL) EdgeFlag(flag bool) { - C.gl2_1_glEdgeFlag(gl.funcs, *(*C.GLboolean)(unsafe.Pointer(&flag))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4usv.xml -func (gl *GL) Color4usv(v []uint16) { - C.gl2_1_glColor4usv(gl.funcs, (*C.GLushort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4us.xml -func (gl *GL) Color4us(red, green, blue, alpha uint16) { - C.gl2_1_glColor4us(gl.funcs, C.GLushort(red), C.GLushort(green), C.GLushort(blue), C.GLushort(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4uiv.xml -func (gl *GL) Color4uiv(v []uint32) { - C.gl2_1_glColor4uiv(gl.funcs, (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4ui.xml -func (gl *GL) Color4ui(red, green, blue, alpha uint32) { - C.gl2_1_glColor4ui(gl.funcs, C.GLuint(red), C.GLuint(green), C.GLuint(blue), C.GLuint(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4ubv.xml -func (gl *GL) Color4ubv(v []uint8) { - C.gl2_1_glColor4ubv(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4ub.xml -func (gl *GL) Color4ub(red, green, blue, alpha uint8) { - C.gl2_1_glColor4ub(gl.funcs, C.GLubyte(red), C.GLubyte(green), C.GLubyte(blue), C.GLubyte(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4sv.xml -func (gl *GL) Color4sv(v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl2_1_glColor4sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4s.xml -func (gl *GL) Color4s(red, green, blue, alpha int16) { - C.gl2_1_glColor4s(gl.funcs, C.GLshort(red), C.GLshort(green), C.GLshort(blue), C.GLshort(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4iv.xml -func (gl *GL) Color4iv(v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl2_1_glColor4iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4i.xml -func (gl *GL) Color4i(red, green, blue, alpha int32) { - C.gl2_1_glColor4i(gl.funcs, C.GLint(red), C.GLint(green), C.GLint(blue), C.GLint(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4fv.xml -func (gl *GL) Color4fv(v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl2_1_glColor4fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4f.xml -func (gl *GL) Color4f(red, green, blue, alpha float32) { - C.gl2_1_glColor4f(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4dv.xml -func (gl *GL) Color4dv(v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl2_1_glColor4dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4d.xml -func (gl *GL) Color4d(red, green, blue, alpha float64) { - C.gl2_1_glColor4d(gl.funcs, C.GLdouble(red), C.GLdouble(green), C.GLdouble(blue), C.GLdouble(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4bv.xml -func (gl *GL) Color4bv(v []byte) { - C.gl2_1_glColor4bv(gl.funcs, (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor4b.xml -func (gl *GL) Color4b(red, green, blue, alpha byte) { - C.gl2_1_glColor4b(gl.funcs, C.GLbyte(red), C.GLbyte(green), C.GLbyte(blue), C.GLbyte(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3usv.xml -func (gl *GL) Color3usv(v []uint16) { - C.gl2_1_glColor3usv(gl.funcs, (*C.GLushort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3us.xml -func (gl *GL) Color3us(red, green, blue uint16) { - C.gl2_1_glColor3us(gl.funcs, C.GLushort(red), C.GLushort(green), C.GLushort(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3uiv.xml -func (gl *GL) Color3uiv(v []uint32) { - C.gl2_1_glColor3uiv(gl.funcs, (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3ui.xml -func (gl *GL) Color3ui(red, green, blue uint32) { - C.gl2_1_glColor3ui(gl.funcs, C.GLuint(red), C.GLuint(green), C.GLuint(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3ubv.xml -func (gl *GL) Color3ubv(v []uint8) { - C.gl2_1_glColor3ubv(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3ub.xml -func (gl *GL) Color3ub(red, green, blue uint8) { - C.gl2_1_glColor3ub(gl.funcs, C.GLubyte(red), C.GLubyte(green), C.GLubyte(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3sv.xml -func (gl *GL) Color3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_1_glColor3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3s.xml -func (gl *GL) Color3s(red, green, blue int16) { - C.gl2_1_glColor3s(gl.funcs, C.GLshort(red), C.GLshort(green), C.GLshort(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3iv.xml -func (gl *GL) Color3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_1_glColor3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3i.xml -func (gl *GL) Color3i(red, green, blue int32) { - C.gl2_1_glColor3i(gl.funcs, C.GLint(red), C.GLint(green), C.GLint(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3fv.xml -func (gl *GL) Color3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_1_glColor3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3f.xml -func (gl *GL) Color3f(red, green, blue float32) { - C.gl2_1_glColor3f(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3dv.xml -func (gl *GL) Color3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_1_glColor3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3d.xml -func (gl *GL) Color3d(red, green, blue float64) { - C.gl2_1_glColor3d(gl.funcs, C.GLdouble(red), C.GLdouble(green), C.GLdouble(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3bv.xml -func (gl *GL) Color3bv(v []byte) { - C.gl2_1_glColor3bv(gl.funcs, (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColor3b.xml -func (gl *GL) Color3b(red, green, blue byte) { - C.gl2_1_glColor3b(gl.funcs, C.GLbyte(red), C.GLbyte(green), C.GLbyte(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glBitmap.xml -func (gl *GL) Bitmap(width, height int, xorig, yorig, xmove, ymove float32, bitmap []uint8) { - C.gl2_1_glBitmap(gl.funcs, C.GLsizei(width), C.GLsizei(height), C.GLfloat(xorig), C.GLfloat(yorig), C.GLfloat(xmove), C.GLfloat(ymove), (*C.GLubyte)(unsafe.Pointer(&bitmap[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glBegin.xml -func (gl *GL) Begin(mode glbase.Enum) { - C.gl2_1_glBegin(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glListBase.xml -func (gl *GL) ListBase(base uint32) { - C.gl2_1_glListBase(gl.funcs, C.GLuint(base)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGenLists.xml -func (gl *GL) GenLists(range_ int32) uint32 { - glresult := C.gl2_1_glGenLists(gl.funcs, C.GLsizei(range_)) - return uint32(glresult) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDeleteLists.xml -func (gl *GL) DeleteLists(list uint32, range_ int32) { - C.gl2_1_glDeleteLists(gl.funcs, C.GLuint(list), C.GLsizei(range_)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCallLists.xml -func (gl *GL) CallLists(n int, gltype glbase.Enum, lists interface{}) { - var lists_ptr unsafe.Pointer - var lists_v = reflect.ValueOf(lists) - if lists != nil && lists_v.Kind() != reflect.Slice { - panic("parameter lists must be a slice") - } - if lists != nil { - lists_ptr = unsafe.Pointer(lists_v.Index(0).Addr().Pointer()) - } - C.gl2_1_glCallLists(gl.funcs, C.GLsizei(n), C.GLenum(gltype), lists_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCallList.xml -func (gl *GL) CallList(list uint32) { - C.gl2_1_glCallList(gl.funcs, C.GLuint(list)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEndList.xml -func (gl *GL) EndList() { - C.gl2_1_glEndList(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNewList.xml -func (gl *GL) NewList(list uint32, mode glbase.Enum) { - C.gl2_1_glNewList(gl.funcs, C.GLuint(list), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPushClientAttrib.xml -func (gl *GL) PushClientAttrib(mask glbase.Bitfield) { - C.gl2_1_glPushClientAttrib(gl.funcs, C.GLbitfield(mask)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPopClientAttrib.xml -func (gl *GL) PopClientAttrib() { - C.gl2_1_glPopClientAttrib(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPrioritizeTextures.xml -func (gl *GL) PrioritizeTextures(n int, textures []glbase.Texture, priorities []float32) { - C.gl2_1_glPrioritizeTextures(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0])), (*C.GLfloat)(unsafe.Pointer(&priorities[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glAreTexturesResident.xml -func (gl *GL) AreTexturesResident(n int, textures []glbase.Texture, residences []bool) bool { - glresult := C.gl2_1_glAreTexturesResident(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0])), (*C.GLboolean)(unsafe.Pointer(&residences[0]))) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexPointer.xml -func (gl *GL) VertexPointer(size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl2_1_glVertexPointer(gl.funcs, C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoordPointer.xml -func (gl *GL) TexCoordPointer(size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl2_1_glTexCoordPointer(gl.funcs, C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glNormalPointer.xml -func (gl *GL) NormalPointer(gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl2_1_glNormalPointer(gl.funcs, C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glInterleavedArrays.xml -func (gl *GL) InterleavedArrays(format glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl2_1_glInterleavedArrays(gl.funcs, C.GLenum(format), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIndexPointer.xml -func (gl *GL) IndexPointer(gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl2_1_glIndexPointer(gl.funcs, C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEnableClientState.xml -func (gl *GL) EnableClientState(array glbase.Enum) { - C.gl2_1_glEnableClientState(gl.funcs, C.GLenum(array)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEdgeFlagPointer.xml -func (gl *GL) EdgeFlagPointer(stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl2_1_glEdgeFlagPointer(gl.funcs, C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDisableClientState.xml -func (gl *GL) DisableClientState(array glbase.Enum) { - C.gl2_1_glDisableClientState(gl.funcs, C.GLenum(array)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColorPointer.xml -func (gl *GL) ColorPointer(size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl2_1_glColorPointer(gl.funcs, C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glArrayElement.xml -func (gl *GL) ArrayElement(i int32) { - C.gl2_1_glArrayElement(gl.funcs, C.GLint(i)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glResetMinmax.xml -func (gl *GL) ResetMinmax(target glbase.Enum) { - C.gl2_1_glResetMinmax(gl.funcs, C.GLenum(target)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glResetHistogram.xml -func (gl *GL) ResetHistogram(target glbase.Enum) { - C.gl2_1_glResetHistogram(gl.funcs, C.GLenum(target)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMinmax.xml -func (gl *GL) Minmax(target, internalFormat glbase.Enum, sink bool) { - C.gl2_1_glMinmax(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), *(*C.GLboolean)(unsafe.Pointer(&sink))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glHistogram.xml -func (gl *GL) Histogram(target glbase.Enum, width int, internalFormat glbase.Enum, sink bool) { - C.gl2_1_glHistogram(gl.funcs, C.GLenum(target), C.GLsizei(width), C.GLenum(internalFormat), *(*C.GLboolean)(unsafe.Pointer(&sink))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetMinmaxParameteriv.xml -func (gl *GL) GetMinmaxParameteriv(target, pname glbase.Enum, params []int32) { - C.gl2_1_glGetMinmaxParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetMinmaxParameterfv.xml -func (gl *GL) GetMinmaxParameterfv(target, pname glbase.Enum, params []float32) { - C.gl2_1_glGetMinmaxParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetMinmax.xml -func (gl *GL) GetMinmax(target glbase.Enum, reset bool, format, gltype glbase.Enum, values interface{}) { - var values_ptr unsafe.Pointer - var values_v = reflect.ValueOf(values) - if values != nil && values_v.Kind() != reflect.Slice { - panic("parameter values must be a slice") - } - if values != nil { - values_ptr = unsafe.Pointer(values_v.Index(0).Addr().Pointer()) - } - C.gl2_1_glGetMinmax(gl.funcs, C.GLenum(target), *(*C.GLboolean)(unsafe.Pointer(&reset)), C.GLenum(format), C.GLenum(gltype), values_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetHistogramParameteriv.xml -func (gl *GL) GetHistogramParameteriv(target, pname glbase.Enum, params []int32) { - C.gl2_1_glGetHistogramParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetHistogramParameterfv.xml -func (gl *GL) GetHistogramParameterfv(target, pname glbase.Enum, params []float32) { - C.gl2_1_glGetHistogramParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetHistogram.xml -func (gl *GL) GetHistogram(target glbase.Enum, reset bool, format, gltype glbase.Enum, values interface{}) { - var values_ptr unsafe.Pointer - var values_v = reflect.ValueOf(values) - if values != nil && values_v.Kind() != reflect.Slice { - panic("parameter values must be a slice") - } - if values != nil { - values_ptr = unsafe.Pointer(values_v.Index(0).Addr().Pointer()) - } - C.gl2_1_glGetHistogram(gl.funcs, C.GLenum(target), *(*C.GLboolean)(unsafe.Pointer(&reset)), C.GLenum(format), C.GLenum(gltype), values_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSeparableFilter2D.xml -func (gl *GL) SeparableFilter2D(target, internalFormat glbase.Enum, width, height int, format, gltype glbase.Enum, row, column interface{}) { - var row_ptr unsafe.Pointer - var row_v = reflect.ValueOf(row) - if row != nil && row_v.Kind() != reflect.Slice { - panic("parameter row must be a slice") - } - if row != nil { - row_ptr = unsafe.Pointer(row_v.Index(0).Addr().Pointer()) - } - var column_ptr unsafe.Pointer - var column_v = reflect.ValueOf(column) - if column != nil && column_v.Kind() != reflect.Slice { - panic("parameter column must be a slice") - } - if column != nil { - column_ptr = unsafe.Pointer(column_v.Index(0).Addr().Pointer()) - } - C.gl2_1_glSeparableFilter2D(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), row_ptr, column_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetSeparableFilter.xml -func (gl *GL) GetSeparableFilter(target, format, gltype glbase.Enum, row, column, span interface{}) { - var row_ptr unsafe.Pointer - var row_v = reflect.ValueOf(row) - if row != nil && row_v.Kind() != reflect.Slice { - panic("parameter row must be a slice") - } - if row != nil { - row_ptr = unsafe.Pointer(row_v.Index(0).Addr().Pointer()) - } - var column_ptr unsafe.Pointer - var column_v = reflect.ValueOf(column) - if column != nil && column_v.Kind() != reflect.Slice { - panic("parameter column must be a slice") - } - if column != nil { - column_ptr = unsafe.Pointer(column_v.Index(0).Addr().Pointer()) - } - var span_ptr unsafe.Pointer - var span_v = reflect.ValueOf(span) - if span != nil && span_v.Kind() != reflect.Slice { - panic("parameter span must be a slice") - } - if span != nil { - span_ptr = unsafe.Pointer(span_v.Index(0).Addr().Pointer()) - } - C.gl2_1_glGetSeparableFilter(gl.funcs, C.GLenum(target), C.GLenum(format), C.GLenum(gltype), row_ptr, column_ptr, span_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetConvolutionParameteriv.xml -func (gl *GL) GetConvolutionParameteriv(target, pname glbase.Enum, params []int32) { - C.gl2_1_glGetConvolutionParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetConvolutionParameterfv.xml -func (gl *GL) GetConvolutionParameterfv(target, pname glbase.Enum, params []float32) { - C.gl2_1_glGetConvolutionParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetConvolutionFilter.xml -func (gl *GL) GetConvolutionFilter(target, format, gltype glbase.Enum, image interface{}) { - var image_ptr unsafe.Pointer - var image_v = reflect.ValueOf(image) - if image != nil && image_v.Kind() != reflect.Slice { - panic("parameter image must be a slice") - } - if image != nil { - image_ptr = unsafe.Pointer(image_v.Index(0).Addr().Pointer()) - } - C.gl2_1_glGetConvolutionFilter(gl.funcs, C.GLenum(target), C.GLenum(format), C.GLenum(gltype), image_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyConvolutionFilter2D.xml -func (gl *GL) CopyConvolutionFilter2D(target, internalFormat glbase.Enum, x, y, width, height int) { - C.gl2_1_glCopyConvolutionFilter2D(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyConvolutionFilter1D.xml -func (gl *GL) CopyConvolutionFilter1D(target, internalFormat glbase.Enum, x, y, width int) { - C.gl2_1_glCopyConvolutionFilter1D(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glConvolutionParameteriv.xml -func (gl *GL) ConvolutionParameteriv(target, pname glbase.Enum, params []int32) { - C.gl2_1_glConvolutionParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glConvolutionParameteri.xml -func (gl *GL) ConvolutionParameteri(target, pname glbase.Enum, params int32) { - C.gl2_1_glConvolutionParameteri(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLint(params)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glConvolutionParameterfv.xml -func (gl *GL) ConvolutionParameterfv(target, pname glbase.Enum, params []float32) { - C.gl2_1_glConvolutionParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glConvolutionParameterf.xml -func (gl *GL) ConvolutionParameterf(target, pname glbase.Enum, params float32) { - C.gl2_1_glConvolutionParameterf(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLfloat(params)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glConvolutionFilter2D.xml -func (gl *GL) ConvolutionFilter2D(target, internalFormat glbase.Enum, width, height int, format, gltype glbase.Enum, image interface{}) { - var image_ptr unsafe.Pointer - var image_v = reflect.ValueOf(image) - if image != nil && image_v.Kind() != reflect.Slice { - panic("parameter image must be a slice") - } - if image != nil { - image_ptr = unsafe.Pointer(image_v.Index(0).Addr().Pointer()) - } - C.gl2_1_glConvolutionFilter2D(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), image_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glConvolutionFilter1D.xml -func (gl *GL) ConvolutionFilter1D(target, internalFormat glbase.Enum, width int, format, gltype glbase.Enum, image interface{}) { - var image_ptr unsafe.Pointer - var image_v = reflect.ValueOf(image) - if image != nil && image_v.Kind() != reflect.Slice { - panic("parameter image must be a slice") - } - if image != nil { - image_ptr = unsafe.Pointer(image_v.Index(0).Addr().Pointer()) - } - C.gl2_1_glConvolutionFilter1D(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLsizei(width), C.GLenum(format), C.GLenum(gltype), image_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyColorSubTable.xml -func (gl *GL) CopyColorSubTable(target glbase.Enum, start int32, x, y, width int) { - C.gl2_1_glCopyColorSubTable(gl.funcs, C.GLenum(target), C.GLsizei(start), C.GLint(x), C.GLint(y), C.GLsizei(width)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColorSubTable.xml -func (gl *GL) ColorSubTable(target glbase.Enum, start int32, count int, format, gltype glbase.Enum, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl2_1_glColorSubTable(gl.funcs, C.GLenum(target), C.GLsizei(start), C.GLsizei(count), C.GLenum(format), C.GLenum(gltype), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetColorTableParameteriv.xml -func (gl *GL) GetColorTableParameteriv(target, pname glbase.Enum, params []int32) { - C.gl2_1_glGetColorTableParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetColorTableParameterfv.xml -func (gl *GL) GetColorTableParameterfv(target, pname glbase.Enum, params []float32) { - C.gl2_1_glGetColorTableParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetColorTable.xml -func (gl *GL) GetColorTable(target, format, gltype glbase.Enum, table interface{}) { - var table_ptr unsafe.Pointer - var table_v = reflect.ValueOf(table) - if table != nil && table_v.Kind() != reflect.Slice { - panic("parameter table must be a slice") - } - if table != nil { - table_ptr = unsafe.Pointer(table_v.Index(0).Addr().Pointer()) - } - C.gl2_1_glGetColorTable(gl.funcs, C.GLenum(target), C.GLenum(format), C.GLenum(gltype), table_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyColorTable.xml -func (gl *GL) CopyColorTable(target, internalFormat glbase.Enum, x, y, width int) { - C.gl2_1_glCopyColorTable(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColorTableParameteriv.xml -func (gl *GL) ColorTableParameteriv(target, pname glbase.Enum, params []int32) { - C.gl2_1_glColorTableParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColorTableParameterfv.xml -func (gl *GL) ColorTableParameterfv(target, pname glbase.Enum, params []float32) { - C.gl2_1_glColorTableParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColorTable.xml -func (gl *GL) ColorTable(target, internalFormat glbase.Enum, width int, format, gltype glbase.Enum, table interface{}) { - var table_ptr unsafe.Pointer - var table_v = reflect.ValueOf(table) - if table != nil && table_v.Kind() != reflect.Slice { - panic("parameter table must be a slice") - } - if table != nil { - table_ptr = unsafe.Pointer(table_v.Index(0).Addr().Pointer()) - } - C.gl2_1_glColorTable(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLsizei(width), C.GLenum(format), C.GLenum(gltype), table_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultTransposeMatrixd.xml -func (gl *GL) MultTransposeMatrixd(m []float64) { - C.gl2_1_glMultTransposeMatrixd(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultTransposeMatrixf.xml -func (gl *GL) MultTransposeMatrixf(m []float32) { - C.gl2_1_glMultTransposeMatrixf(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLoadTransposeMatrixd.xml -func (gl *GL) LoadTransposeMatrixd(m []float64) { - C.gl2_1_glLoadTransposeMatrixd(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLoadTransposeMatrixf.xml -func (gl *GL) LoadTransposeMatrixf(m []float32) { - C.gl2_1_glLoadTransposeMatrixf(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord4sv.xml -func (gl *GL) MultiTexCoord4sv(target glbase.Enum, v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl2_1_glMultiTexCoord4sv(gl.funcs, C.GLenum(target), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord4s.xml -func (gl *GL) MultiTexCoord4s(target glbase.Enum, s, t, r, q int16) { - C.gl2_1_glMultiTexCoord4s(gl.funcs, C.GLenum(target), C.GLshort(s), C.GLshort(t), C.GLshort(r), C.GLshort(q)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord4iv.xml -func (gl *GL) MultiTexCoord4iv(target glbase.Enum, v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl2_1_glMultiTexCoord4iv(gl.funcs, C.GLenum(target), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord4i.xml -func (gl *GL) MultiTexCoord4i(target glbase.Enum, s, t, r, q int32) { - C.gl2_1_glMultiTexCoord4i(gl.funcs, C.GLenum(target), C.GLint(s), C.GLint(t), C.GLint(r), C.GLint(q)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord4fv.xml -func (gl *GL) MultiTexCoord4fv(target glbase.Enum, v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl2_1_glMultiTexCoord4fv(gl.funcs, C.GLenum(target), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord4f.xml -func (gl *GL) MultiTexCoord4f(target glbase.Enum, s, t, r, q float32) { - C.gl2_1_glMultiTexCoord4f(gl.funcs, C.GLenum(target), C.GLfloat(s), C.GLfloat(t), C.GLfloat(r), C.GLfloat(q)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord4dv.xml -func (gl *GL) MultiTexCoord4dv(target glbase.Enum, v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl2_1_glMultiTexCoord4dv(gl.funcs, C.GLenum(target), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord4d.xml -func (gl *GL) MultiTexCoord4d(target glbase.Enum, s, t, r, q float64) { - C.gl2_1_glMultiTexCoord4d(gl.funcs, C.GLenum(target), C.GLdouble(s), C.GLdouble(t), C.GLdouble(r), C.GLdouble(q)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord3sv.xml -func (gl *GL) MultiTexCoord3sv(target glbase.Enum, v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_1_glMultiTexCoord3sv(gl.funcs, C.GLenum(target), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord3s.xml -func (gl *GL) MultiTexCoord3s(target glbase.Enum, s, t, r int16) { - C.gl2_1_glMultiTexCoord3s(gl.funcs, C.GLenum(target), C.GLshort(s), C.GLshort(t), C.GLshort(r)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord3iv.xml -func (gl *GL) MultiTexCoord3iv(target glbase.Enum, v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_1_glMultiTexCoord3iv(gl.funcs, C.GLenum(target), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord3i.xml -func (gl *GL) MultiTexCoord3i(target glbase.Enum, s, t, r int32) { - C.gl2_1_glMultiTexCoord3i(gl.funcs, C.GLenum(target), C.GLint(s), C.GLint(t), C.GLint(r)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord3fv.xml -func (gl *GL) MultiTexCoord3fv(target glbase.Enum, v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_1_glMultiTexCoord3fv(gl.funcs, C.GLenum(target), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord3f.xml -func (gl *GL) MultiTexCoord3f(target glbase.Enum, s, t, r float32) { - C.gl2_1_glMultiTexCoord3f(gl.funcs, C.GLenum(target), C.GLfloat(s), C.GLfloat(t), C.GLfloat(r)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord3dv.xml -func (gl *GL) MultiTexCoord3dv(target glbase.Enum, v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_1_glMultiTexCoord3dv(gl.funcs, C.GLenum(target), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord3d.xml -func (gl *GL) MultiTexCoord3d(target glbase.Enum, s, t, r float64) { - C.gl2_1_glMultiTexCoord3d(gl.funcs, C.GLenum(target), C.GLdouble(s), C.GLdouble(t), C.GLdouble(r)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord2sv.xml -func (gl *GL) MultiTexCoord2sv(target glbase.Enum, v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl2_1_glMultiTexCoord2sv(gl.funcs, C.GLenum(target), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord2s.xml -func (gl *GL) MultiTexCoord2s(target glbase.Enum, s, t int16) { - C.gl2_1_glMultiTexCoord2s(gl.funcs, C.GLenum(target), C.GLshort(s), C.GLshort(t)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord2iv.xml -func (gl *GL) MultiTexCoord2iv(target glbase.Enum, v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl2_1_glMultiTexCoord2iv(gl.funcs, C.GLenum(target), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord2i.xml -func (gl *GL) MultiTexCoord2i(target glbase.Enum, s, t int32) { - C.gl2_1_glMultiTexCoord2i(gl.funcs, C.GLenum(target), C.GLint(s), C.GLint(t)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord2fv.xml -func (gl *GL) MultiTexCoord2fv(target glbase.Enum, v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl2_1_glMultiTexCoord2fv(gl.funcs, C.GLenum(target), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord2f.xml -func (gl *GL) MultiTexCoord2f(target glbase.Enum, s, t float32) { - C.gl2_1_glMultiTexCoord2f(gl.funcs, C.GLenum(target), C.GLfloat(s), C.GLfloat(t)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord2dv.xml -func (gl *GL) MultiTexCoord2dv(target glbase.Enum, v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl2_1_glMultiTexCoord2dv(gl.funcs, C.GLenum(target), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord2d.xml -func (gl *GL) MultiTexCoord2d(target glbase.Enum, s, t float64) { - C.gl2_1_glMultiTexCoord2d(gl.funcs, C.GLenum(target), C.GLdouble(s), C.GLdouble(t)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord1sv.xml -func (gl *GL) MultiTexCoord1sv(target glbase.Enum, v []int16) { - C.gl2_1_glMultiTexCoord1sv(gl.funcs, C.GLenum(target), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord1s.xml -func (gl *GL) MultiTexCoord1s(target glbase.Enum, s int16) { - C.gl2_1_glMultiTexCoord1s(gl.funcs, C.GLenum(target), C.GLshort(s)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord1iv.xml -func (gl *GL) MultiTexCoord1iv(target glbase.Enum, v []int32) { - C.gl2_1_glMultiTexCoord1iv(gl.funcs, C.GLenum(target), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord1i.xml -func (gl *GL) MultiTexCoord1i(target glbase.Enum, s int32) { - C.gl2_1_glMultiTexCoord1i(gl.funcs, C.GLenum(target), C.GLint(s)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord1fv.xml -func (gl *GL) MultiTexCoord1fv(target glbase.Enum, v []float32) { - C.gl2_1_glMultiTexCoord1fv(gl.funcs, C.GLenum(target), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord1f.xml -func (gl *GL) MultiTexCoord1f(target glbase.Enum, s float32) { - C.gl2_1_glMultiTexCoord1f(gl.funcs, C.GLenum(target), C.GLfloat(s)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord1dv.xml -func (gl *GL) MultiTexCoord1dv(target glbase.Enum, v []float64) { - C.gl2_1_glMultiTexCoord1dv(gl.funcs, C.GLenum(target), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glMultiTexCoord1d.xml -func (gl *GL) MultiTexCoord1d(target glbase.Enum, s float64) { - C.gl2_1_glMultiTexCoord1d(gl.funcs, C.GLenum(target), C.GLdouble(s)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glClientActiveTexture.xml -func (gl *GL) ClientActiveTexture(texture glbase.Enum) { - C.gl2_1_glClientActiveTexture(gl.funcs, C.GLenum(texture)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glWindowPos3sv.xml -func (gl *GL) WindowPos3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_1_glWindowPos3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glWindowPos3s.xml -func (gl *GL) WindowPos3s(x, y, z int16) { - C.gl2_1_glWindowPos3s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glWindowPos3iv.xml -func (gl *GL) WindowPos3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_1_glWindowPos3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glWindowPos3i.xml -func (gl *GL) WindowPos3i(x, y, z int) { - C.gl2_1_glWindowPos3i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glWindowPos3fv.xml -func (gl *GL) WindowPos3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_1_glWindowPos3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glWindowPos3f.xml -func (gl *GL) WindowPos3f(x, y, z float32) { - C.gl2_1_glWindowPos3f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glWindowPos3dv.xml -func (gl *GL) WindowPos3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_1_glWindowPos3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glWindowPos3d.xml -func (gl *GL) WindowPos3d(x, y, z float64) { - C.gl2_1_glWindowPos3d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glWindowPos2sv.xml -func (gl *GL) WindowPos2sv(v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl2_1_glWindowPos2sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glWindowPos2s.xml -func (gl *GL) WindowPos2s(x, y int16) { - C.gl2_1_glWindowPos2s(gl.funcs, C.GLshort(x), C.GLshort(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glWindowPos2iv.xml -func (gl *GL) WindowPos2iv(v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl2_1_glWindowPos2iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glWindowPos2i.xml -func (gl *GL) WindowPos2i(x, y int) { - C.gl2_1_glWindowPos2i(gl.funcs, C.GLint(x), C.GLint(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glWindowPos2fv.xml -func (gl *GL) WindowPos2fv(v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl2_1_glWindowPos2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glWindowPos2f.xml -func (gl *GL) WindowPos2f(x, y float32) { - C.gl2_1_glWindowPos2f(gl.funcs, C.GLfloat(x), C.GLfloat(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glWindowPos2dv.xml -func (gl *GL) WindowPos2dv(v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl2_1_glWindowPos2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glWindowPos2d.xml -func (gl *GL) WindowPos2d(x, y float64) { - C.gl2_1_glWindowPos2d(gl.funcs, C.GLdouble(x), C.GLdouble(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColorPointer.xml -func (gl *GL) SecondaryColorPointer(size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl2_1_glSecondaryColorPointer(gl.funcs, C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColor3usv.xml -func (gl *GL) SecondaryColor3usv(v []uint16) { - C.gl2_1_glSecondaryColor3usv(gl.funcs, (*C.GLushort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColor3us.xml -func (gl *GL) SecondaryColor3us(red, green, blue uint16) { - C.gl2_1_glSecondaryColor3us(gl.funcs, C.GLushort(red), C.GLushort(green), C.GLushort(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColor3uiv.xml -func (gl *GL) SecondaryColor3uiv(v []uint32) { - C.gl2_1_glSecondaryColor3uiv(gl.funcs, (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColor3ui.xml -func (gl *GL) SecondaryColor3ui(red, green, blue uint32) { - C.gl2_1_glSecondaryColor3ui(gl.funcs, C.GLuint(red), C.GLuint(green), C.GLuint(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColor3ubv.xml -func (gl *GL) SecondaryColor3ubv(v []uint8) { - C.gl2_1_glSecondaryColor3ubv(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColor3ub.xml -func (gl *GL) SecondaryColor3ub(red, green, blue uint8) { - C.gl2_1_glSecondaryColor3ub(gl.funcs, C.GLubyte(red), C.GLubyte(green), C.GLubyte(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColor3sv.xml -func (gl *GL) SecondaryColor3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_1_glSecondaryColor3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColor3s.xml -func (gl *GL) SecondaryColor3s(red, green, blue int16) { - C.gl2_1_glSecondaryColor3s(gl.funcs, C.GLshort(red), C.GLshort(green), C.GLshort(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColor3iv.xml -func (gl *GL) SecondaryColor3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_1_glSecondaryColor3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColor3i.xml -func (gl *GL) SecondaryColor3i(red, green, blue int32) { - C.gl2_1_glSecondaryColor3i(gl.funcs, C.GLint(red), C.GLint(green), C.GLint(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColor3fv.xml -func (gl *GL) SecondaryColor3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_1_glSecondaryColor3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColor3f.xml -func (gl *GL) SecondaryColor3f(red, green, blue float32) { - C.gl2_1_glSecondaryColor3f(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColor3dv.xml -func (gl *GL) SecondaryColor3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_1_glSecondaryColor3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColor3d.xml -func (gl *GL) SecondaryColor3d(red, green, blue float64) { - C.gl2_1_glSecondaryColor3d(gl.funcs, C.GLdouble(red), C.GLdouble(green), C.GLdouble(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColor3bv.xml -func (gl *GL) SecondaryColor3bv(v []byte) { - C.gl2_1_glSecondaryColor3bv(gl.funcs, (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSecondaryColor3b.xml -func (gl *GL) SecondaryColor3b(red, green, blue byte) { - C.gl2_1_glSecondaryColor3b(gl.funcs, C.GLbyte(red), C.GLbyte(green), C.GLbyte(blue)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFogCoordPointer.xml -func (gl *GL) FogCoordPointer(gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl2_1_glFogCoordPointer(gl.funcs, C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFogCoorddv.xml -func (gl *GL) FogCoorddv(coord []float64) { - C.gl2_1_glFogCoorddv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&coord[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFogCoordd.xml -func (gl *GL) FogCoordd(coord float64) { - C.gl2_1_glFogCoordd(gl.funcs, C.GLdouble(coord)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFogCoordfv.xml -func (gl *GL) FogCoordfv(coord []float32) { - C.gl2_1_glFogCoordfv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&coord[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFogCoordf.xml -func (gl *GL) FogCoordf(coord float32) { - C.gl2_1_glFogCoordf(gl.funcs, C.GLfloat(coord)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib4usv.xml -func (gl *GL) VertexAttrib4usv(index glbase.Attrib, v []uint16) { - C.gl2_1_glVertexAttrib4usv(gl.funcs, C.GLuint(index), (*C.GLushort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib4uiv.xml -func (gl *GL) VertexAttrib4uiv(index glbase.Attrib, v []uint32) { - C.gl2_1_glVertexAttrib4uiv(gl.funcs, C.GLuint(index), (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib4ubv.xml -func (gl *GL) VertexAttrib4ubv(index glbase.Attrib, v []uint8) { - C.gl2_1_glVertexAttrib4ubv(gl.funcs, C.GLuint(index), (*C.GLubyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib4sv.xml -func (gl *GL) VertexAttrib4sv(index glbase.Attrib, v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl2_1_glVertexAttrib4sv(gl.funcs, C.GLuint(index), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib4s.xml -func (gl *GL) VertexAttrib4s(index glbase.Attrib, x, y, z, w int16) { - C.gl2_1_glVertexAttrib4s(gl.funcs, C.GLuint(index), C.GLshort(x), C.GLshort(y), C.GLshort(z), C.GLshort(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib4iv.xml -func (gl *GL) VertexAttrib4iv(index glbase.Attrib, v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl2_1_glVertexAttrib4iv(gl.funcs, C.GLuint(index), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib4fv.xml -func (gl *GL) VertexAttrib4fv(index glbase.Attrib, v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl2_1_glVertexAttrib4fv(gl.funcs, C.GLuint(index), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib4f.xml -func (gl *GL) VertexAttrib4f(index glbase.Attrib, x, y, z, w float32) { - C.gl2_1_glVertexAttrib4f(gl.funcs, C.GLuint(index), C.GLfloat(x), C.GLfloat(y), C.GLfloat(z), C.GLfloat(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib4dv.xml -func (gl *GL) VertexAttrib4dv(index glbase.Attrib, v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl2_1_glVertexAttrib4dv(gl.funcs, C.GLuint(index), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib4d.xml -func (gl *GL) VertexAttrib4d(index glbase.Attrib, x, y, z, w float64) { - C.gl2_1_glVertexAttrib4d(gl.funcs, C.GLuint(index), C.GLdouble(x), C.GLdouble(y), C.GLdouble(z), C.GLdouble(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib4bv.xml -func (gl *GL) VertexAttrib4bv(index glbase.Attrib, v []byte) { - C.gl2_1_glVertexAttrib4bv(gl.funcs, C.GLuint(index), (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib4Nusv.xml -func (gl *GL) VertexAttrib4Nusv(index glbase.Attrib, v []uint16) { - C.gl2_1_glVertexAttrib4Nusv(gl.funcs, C.GLuint(index), (*C.GLushort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib4Nuiv.xml -func (gl *GL) VertexAttrib4Nuiv(index glbase.Attrib, v []uint32) { - C.gl2_1_glVertexAttrib4Nuiv(gl.funcs, C.GLuint(index), (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib4Nubv.xml -func (gl *GL) VertexAttrib4Nubv(index glbase.Attrib, v []uint8) { - C.gl2_1_glVertexAttrib4Nubv(gl.funcs, C.GLuint(index), (*C.GLubyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib4Nub.xml -func (gl *GL) VertexAttrib4Nub(index glbase.Attrib, x, y, z, w uint8) { - C.gl2_1_glVertexAttrib4Nub(gl.funcs, C.GLuint(index), C.GLubyte(x), C.GLubyte(y), C.GLubyte(z), C.GLubyte(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib4Nsv.xml -func (gl *GL) VertexAttrib4Nsv(index glbase.Attrib, v []int16) { - C.gl2_1_glVertexAttrib4Nsv(gl.funcs, C.GLuint(index), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib4Niv.xml -func (gl *GL) VertexAttrib4Niv(index glbase.Attrib, v []int32) { - C.gl2_1_glVertexAttrib4Niv(gl.funcs, C.GLuint(index), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib4Nbv.xml -func (gl *GL) VertexAttrib4Nbv(index glbase.Attrib, v []byte) { - C.gl2_1_glVertexAttrib4Nbv(gl.funcs, C.GLuint(index), (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib3sv.xml -func (gl *GL) VertexAttrib3sv(index glbase.Attrib, v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_1_glVertexAttrib3sv(gl.funcs, C.GLuint(index), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib3s.xml -func (gl *GL) VertexAttrib3s(index glbase.Attrib, x, y, z int16) { - C.gl2_1_glVertexAttrib3s(gl.funcs, C.GLuint(index), C.GLshort(x), C.GLshort(y), C.GLshort(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib3fv.xml -func (gl *GL) VertexAttrib3fv(index glbase.Attrib, v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_1_glVertexAttrib3fv(gl.funcs, C.GLuint(index), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib3f.xml -func (gl *GL) VertexAttrib3f(index glbase.Attrib, x, y, z float32) { - C.gl2_1_glVertexAttrib3f(gl.funcs, C.GLuint(index), C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib3dv.xml -func (gl *GL) VertexAttrib3dv(index glbase.Attrib, v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl2_1_glVertexAttrib3dv(gl.funcs, C.GLuint(index), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib3d.xml -func (gl *GL) VertexAttrib3d(index glbase.Attrib, x, y, z float64) { - C.gl2_1_glVertexAttrib3d(gl.funcs, C.GLuint(index), C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib2sv.xml -func (gl *GL) VertexAttrib2sv(index glbase.Attrib, v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl2_1_glVertexAttrib2sv(gl.funcs, C.GLuint(index), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib2s.xml -func (gl *GL) VertexAttrib2s(index glbase.Attrib, x, y int16) { - C.gl2_1_glVertexAttrib2s(gl.funcs, C.GLuint(index), C.GLshort(x), C.GLshort(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib2fv.xml -func (gl *GL) VertexAttrib2fv(index glbase.Attrib, v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl2_1_glVertexAttrib2fv(gl.funcs, C.GLuint(index), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib2f.xml -func (gl *GL) VertexAttrib2f(index glbase.Attrib, x, y float32) { - C.gl2_1_glVertexAttrib2f(gl.funcs, C.GLuint(index), C.GLfloat(x), C.GLfloat(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib2dv.xml -func (gl *GL) VertexAttrib2dv(index glbase.Attrib, v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl2_1_glVertexAttrib2dv(gl.funcs, C.GLuint(index), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib2d.xml -func (gl *GL) VertexAttrib2d(index glbase.Attrib, x, y float64) { - C.gl2_1_glVertexAttrib2d(gl.funcs, C.GLuint(index), C.GLdouble(x), C.GLdouble(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib1sv.xml -func (gl *GL) VertexAttrib1sv(index glbase.Attrib, v []int16) { - C.gl2_1_glVertexAttrib1sv(gl.funcs, C.GLuint(index), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib1s.xml -func (gl *GL) VertexAttrib1s(index glbase.Attrib, x int16) { - C.gl2_1_glVertexAttrib1s(gl.funcs, C.GLuint(index), C.GLshort(x)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib1fv.xml -func (gl *GL) VertexAttrib1fv(index glbase.Attrib, v []float32) { - C.gl2_1_glVertexAttrib1fv(gl.funcs, C.GLuint(index), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib1f.xml -func (gl *GL) VertexAttrib1f(index glbase.Attrib, x float32) { - C.gl2_1_glVertexAttrib1f(gl.funcs, C.GLuint(index), C.GLfloat(x)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib1dv.xml -func (gl *GL) VertexAttrib1dv(index glbase.Attrib, v []float64) { - C.gl2_1_glVertexAttrib1dv(gl.funcs, C.GLuint(index), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib1d.xml -func (gl *GL) VertexAttrib1d(index glbase.Attrib, x float64) { - C.gl2_1_glVertexAttrib1d(gl.funcs, C.GLuint(index), C.GLdouble(x)) -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/3.0/funcs.cpp b/Godeps/_workspace/src/github.com/obscuren/qml/gl/3.0/funcs.cpp deleted file mode 100644 index 8d4262f9cd..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/3.0/funcs.cpp +++ /dev/null @@ -1,3966 +0,0 @@ - -// ** file automatically generated by glgen -- do not edit manually ** - -#include -#include - -#include "funcs.h" - -void *gl3_0_funcs() { - QOpenGLFunctions_3_0* funcs = QOpenGLContext::currentContext()->versionFunctions(); - if (!funcs) { - return 0; - } - funcs->initializeOpenGLFunctions(); - return funcs; -} - - -void gl3_0_glViewport(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glViewport(x, y, width, height); -} - -void gl3_0_glDepthRange(void *_glfuncs, GLdouble nearVal, GLdouble farVal) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthRange(nearVal, farVal); -} - -GLboolean gl3_0_glIsEnabled(void *_glfuncs, GLenum cap) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsEnabled(cap); -} - -void gl3_0_glGetTexLevelParameteriv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexLevelParameteriv(target, level, pname, params); -} - -void gl3_0_glGetTexLevelParameterfv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexLevelParameterfv(target, level, pname, params); -} - -void gl3_0_glGetTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameteriv(target, pname, params); -} - -void gl3_0_glGetTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameterfv(target, pname, params); -} - -void gl3_0_glGetTexImage(void *_glfuncs, GLenum target, GLint level, GLenum format, GLenum gltype, GLvoid* pixels) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexImage(target, level, format, gltype, pixels); -} - -void gl3_0_glGetIntegerv(void *_glfuncs, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetIntegerv(pname, params); -} - -void gl3_0_glGetFloatv(void *_glfuncs, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetFloatv(pname, params); -} - -GLenum gl3_0_glGetError(void *_glfuncs) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetError(); -} - -void gl3_0_glGetDoublev(void *_glfuncs, GLenum pname, GLdouble* params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetDoublev(pname, params); -} - -void gl3_0_glGetBooleanv(void *_glfuncs, GLenum pname, GLboolean* params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBooleanv(pname, params); -} - -void gl3_0_glReadPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum gltype, GLvoid* pixels) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glReadPixels(x, y, width, height, format, gltype, pixels); -} - -void gl3_0_glReadBuffer(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glReadBuffer(mode); -} - -void gl3_0_glPixelStorei(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelStorei(pname, param); -} - -void gl3_0_glPixelStoref(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelStoref(pname, param); -} - -void gl3_0_glDepthFunc(void *_glfuncs, GLenum glfunc) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthFunc(glfunc); -} - -void gl3_0_glStencilOp(void *_glfuncs, GLenum fail, GLenum zfail, GLenum zpass) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilOp(fail, zfail, zpass); -} - -void gl3_0_glStencilFunc(void *_glfuncs, GLenum glfunc, GLint ref, GLuint mask) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilFunc(glfunc, ref, mask); -} - -void gl3_0_glLogicOp(void *_glfuncs, GLenum opcode) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLogicOp(opcode); -} - -void gl3_0_glBlendFunc(void *_glfuncs, GLenum sfactor, GLenum dfactor) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendFunc(sfactor, dfactor); -} - -void gl3_0_glFlush(void *_glfuncs) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFlush(); -} - -void gl3_0_glFinish(void *_glfuncs) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFinish(); -} - -void gl3_0_glEnable(void *_glfuncs, GLenum cap) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnable(cap); -} - -void gl3_0_glDisable(void *_glfuncs, GLenum cap) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDisable(cap); -} - -void gl3_0_glDepthMask(void *_glfuncs, GLboolean flag) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthMask(flag); -} - -void gl3_0_glColorMask(void *_glfuncs, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorMask(red, green, blue, alpha); -} - -void gl3_0_glStencilMask(void *_glfuncs, GLuint mask) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilMask(mask); -} - -void gl3_0_glClearDepth(void *_glfuncs, GLdouble depth) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearDepth(depth); -} - -void gl3_0_glClearStencil(void *_glfuncs, GLint s) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearStencil(s); -} - -void gl3_0_glClearColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearColor(red, green, blue, alpha); -} - -void gl3_0_glClear(void *_glfuncs, GLbitfield mask) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClear(mask); -} - -void gl3_0_glDrawBuffer(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawBuffer(mode); -} - -void gl3_0_glTexImage2D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage2D(target, level, internalFormat, width, height, border, format, gltype, pixels); -} - -void gl3_0_glTexImage1D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage1D(target, level, internalFormat, width, border, format, gltype, pixels); -} - -void gl3_0_glTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameteriv(target, pname, params); -} - -void gl3_0_glTexParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint param) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameteri(target, pname, param); -} - -void gl3_0_glTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterfv(target, pname, params); -} - -void gl3_0_glTexParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterf(target, pname, param); -} - -void gl3_0_glScissor(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScissor(x, y, width, height); -} - -void gl3_0_glPolygonMode(void *_glfuncs, GLenum face, GLenum mode) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPolygonMode(face, mode); -} - -void gl3_0_glPointSize(void *_glfuncs, GLfloat size) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointSize(size); -} - -void gl3_0_glLineWidth(void *_glfuncs, GLfloat width) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLineWidth(width); -} - -void gl3_0_glHint(void *_glfuncs, GLenum target, GLenum mode) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glHint(target, mode); -} - -void gl3_0_glFrontFace(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFrontFace(mode); -} - -void gl3_0_glCullFace(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCullFace(mode); -} - -void gl3_0_glIndexubv(void *_glfuncs, const GLubyte* c) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexubv(c); -} - -void gl3_0_glIndexub(void *_glfuncs, GLubyte c) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexub(c); -} - -GLboolean gl3_0_glIsTexture(void *_glfuncs, GLuint texture) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsTexture(texture); -} - -void gl3_0_glGenTextures(void *_glfuncs, GLsizei n, GLuint* textures) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenTextures(n, textures); -} - -void gl3_0_glDeleteTextures(void *_glfuncs, GLsizei n, const GLuint* textures) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteTextures(n, textures); -} - -void gl3_0_glBindTexture(void *_glfuncs, GLenum target, GLuint texture) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindTexture(target, texture); -} - -void gl3_0_glTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, gltype, pixels); -} - -void gl3_0_glTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexSubImage1D(target, level, xoffset, width, format, gltype, pixels); -} - -void gl3_0_glCopyTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height); -} - -void gl3_0_glCopyTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexSubImage1D(target, level, xoffset, x, y, width); -} - -void gl3_0_glCopyTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexImage2D(target, level, internalFormat, x, y, width, height, border); -} - -void gl3_0_glCopyTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexImage1D(target, level, internalFormat, x, y, width, border); -} - -void gl3_0_glPolygonOffset(void *_glfuncs, GLfloat factor, GLfloat units) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPolygonOffset(factor, units); -} - -void gl3_0_glDrawElements(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElements(mode, count, gltype, indices); -} - -void gl3_0_glDrawArrays(void *_glfuncs, GLenum mode, GLint first, GLsizei count) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawArrays(mode, first, count); -} - -void gl3_0_glCopyTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexSubImage3D(target, level, xoffset, yoffset, zoffset, x, y, width, height); -} - -void gl3_0_glTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, gltype, pixels); -} - -void gl3_0_glTexImage3D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage3D(target, level, internalFormat, width, height, depth, border, format, gltype, pixels); -} - -void gl3_0_glDrawRangeElements(void *_glfuncs, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum gltype, const GLvoid* indices) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawRangeElements(mode, start, end, count, gltype, indices); -} - -void gl3_0_glBlendEquation(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendEquation(mode); -} - -void gl3_0_glBlendColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendColor(red, green, blue, alpha); -} - -void gl3_0_glGetCompressedTexImage(void *_glfuncs, GLenum target, GLint level, GLvoid* img) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetCompressedTexImage(target, level, img); -} - -void gl3_0_glCompressedTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexSubImage1D(target, level, xoffset, width, format, imageSize, data); -} - -void gl3_0_glCompressedTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data); -} - -void gl3_0_glCompressedTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data); -} - -void gl3_0_glCompressedTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexImage1D(target, level, internalFormat, width, border, imageSize, data); -} - -void gl3_0_glCompressedTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexImage2D(target, level, internalFormat, width, height, border, imageSize, data); -} - -void gl3_0_glCompressedTexImage3D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexImage3D(target, level, internalFormat, width, height, depth, border, imageSize, data); -} - -void gl3_0_glSampleCoverage(void *_glfuncs, GLfloat value, GLboolean invert) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSampleCoverage(value, invert); -} - -void gl3_0_glActiveTexture(void *_glfuncs, GLenum texture) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glActiveTexture(texture); -} - -void gl3_0_glPointParameteriv(void *_glfuncs, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameteriv(pname, params); -} - -void gl3_0_glPointParameteri(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameteri(pname, param); -} - -void gl3_0_glPointParameterfv(void *_glfuncs, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameterfv(pname, params); -} - -void gl3_0_glPointParameterf(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameterf(pname, param); -} - -void gl3_0_glMultiDrawArrays(void *_glfuncs, GLenum mode, const GLint* first, const GLsizei* count, GLsizei drawcount) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiDrawArrays(mode, first, count, drawcount); -} - -void gl3_0_glBlendFuncSeparate(void *_glfuncs, GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendFuncSeparate(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha); -} - -void gl3_0_glGetBufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBufferParameteriv(target, pname, params); -} - -GLboolean gl3_0_glUnmapBuffer(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glUnmapBuffer(target); -} - -void gl3_0_glGetBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, GLvoid* data) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBufferSubData(target, offset, size, data); -} - -void gl3_0_glBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBufferSubData(target, offset, size, data); -} - -void gl3_0_glBufferData(void *_glfuncs, GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBufferData(target, size, data, usage); -} - -GLboolean gl3_0_glIsBuffer(void *_glfuncs, GLuint buffer) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsBuffer(buffer); -} - -void gl3_0_glGenBuffers(void *_glfuncs, GLsizei n, GLuint* buffers) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenBuffers(n, buffers); -} - -void gl3_0_glDeleteBuffers(void *_glfuncs, GLsizei n, const GLuint* buffers) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteBuffers(n, buffers); -} - -void gl3_0_glBindBuffer(void *_glfuncs, GLenum target, GLuint buffer) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindBuffer(target, buffer); -} - -void gl3_0_glGetQueryObjectuiv(void *_glfuncs, GLuint id, GLenum pname, GLuint* params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryObjectuiv(id, pname, params); -} - -void gl3_0_glGetQueryObjectiv(void *_glfuncs, GLuint id, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryObjectiv(id, pname, params); -} - -void gl3_0_glGetQueryiv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryiv(target, pname, params); -} - -void gl3_0_glEndQuery(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndQuery(target); -} - -void gl3_0_glBeginQuery(void *_glfuncs, GLenum target, GLuint id) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBeginQuery(target, id); -} - -GLboolean gl3_0_glIsQuery(void *_glfuncs, GLuint id) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsQuery(id); -} - -void gl3_0_glDeleteQueries(void *_glfuncs, GLsizei n, const GLuint* ids) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteQueries(n, ids); -} - -void gl3_0_glGenQueries(void *_glfuncs, GLsizei n, GLuint* ids) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenQueries(n, ids); -} - -void gl3_0_glVertexAttribPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLboolean normalized, GLsizei stride, const GLvoid* offset) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribPointer(index, size, gltype, normalized, stride, offset); -} - -void gl3_0_glValidateProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glValidateProgram(program); -} - -void gl3_0_glUniformMatrix4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4fv(location, count, transpose, value); -} - -void gl3_0_glUniformMatrix3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3fv(location, count, transpose, value); -} - -void gl3_0_glUniformMatrix2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2fv(location, count, transpose, value); -} - -void gl3_0_glUniform4iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4iv(location, count, value); -} - -void gl3_0_glUniform3iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3iv(location, count, value); -} - -void gl3_0_glUniform2iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2iv(location, count, value); -} - -void gl3_0_glUniform1iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1iv(location, count, value); -} - -void gl3_0_glUniform4fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4fv(location, count, value); -} - -void gl3_0_glUniform3fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3fv(location, count, value); -} - -void gl3_0_glUniform2fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2fv(location, count, value); -} - -void gl3_0_glUniform1fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1fv(location, count, value); -} - -void gl3_0_glUniform4i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2, GLint v3) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4i(location, v0, v1, v2, v3); -} - -void gl3_0_glUniform3i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3i(location, v0, v1, v2); -} - -void gl3_0_glUniform2i(void *_glfuncs, GLint location, GLint v0, GLint v1) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2i(location, v0, v1); -} - -void gl3_0_glUniform1i(void *_glfuncs, GLint location, GLint v0) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1i(location, v0); -} - -void gl3_0_glUniform4f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4f(location, v0, v1, v2, v3); -} - -void gl3_0_glUniform3f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3f(location, v0, v1, v2); -} - -void gl3_0_glUniform2f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2f(location, v0, v1); -} - -void gl3_0_glUniform1f(void *_glfuncs, GLint location, GLfloat v0) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1f(location, v0); -} - -void gl3_0_glUseProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUseProgram(program); -} - -void gl3_0_glShaderSource(void *_glfuncs, GLuint shader, GLsizei count, const GLchar** source, const GLint* length) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glShaderSource(shader, count, source, length); -} - -void gl3_0_glLinkProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLinkProgram(program); -} - -GLboolean gl3_0_glIsShader(void *_glfuncs, GLuint shader) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsShader(shader); -} - -GLboolean gl3_0_glIsProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsProgram(program); -} - -void gl3_0_glGetVertexAttribiv(void *_glfuncs, GLuint index, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribiv(index, pname, params); -} - -void gl3_0_glGetVertexAttribfv(void *_glfuncs, GLuint index, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribfv(index, pname, params); -} - -void gl3_0_glGetVertexAttribdv(void *_glfuncs, GLuint index, GLenum pname, GLdouble* params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribdv(index, pname, params); -} - -void gl3_0_glGetUniformiv(void *_glfuncs, GLuint program, GLint location, GLint* params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetUniformiv(program, location, params); -} - -void gl3_0_glGetUniformfv(void *_glfuncs, GLuint program, GLint location, GLfloat* params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetUniformfv(program, location, params); -} - -GLint gl3_0_glGetUniformLocation(void *_glfuncs, GLuint program, const GLchar* name) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetUniformLocation(program, name); -} - -void gl3_0_glGetShaderSource(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* source) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetShaderSource(shader, bufSize, length, source); -} - -void gl3_0_glGetShaderInfoLog(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* infoLog) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetShaderInfoLog(shader, bufSize, length, infoLog); -} - -void gl3_0_glGetShaderiv(void *_glfuncs, GLuint shader, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetShaderiv(shader, pname, params); -} - -void gl3_0_glGetProgramInfoLog(void *_glfuncs, GLuint program, GLsizei bufSize, GLsizei* length, GLchar* infoLog) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetProgramInfoLog(program, bufSize, length, infoLog); -} - -void gl3_0_glGetProgramiv(void *_glfuncs, GLuint program, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetProgramiv(program, pname, params); -} - -GLint gl3_0_glGetAttribLocation(void *_glfuncs, GLuint program, const GLchar* name) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetAttribLocation(program, name); -} - -void gl3_0_glGetAttachedShaders(void *_glfuncs, GLuint program, GLsizei maxCount, GLsizei* count, GLuint* obj) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetAttachedShaders(program, maxCount, count, obj); -} - -void gl3_0_glGetActiveUniform(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniform(program, index, bufSize, length, size, gltype, name); -} - -void gl3_0_glGetActiveAttrib(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveAttrib(program, index, bufSize, length, size, gltype, name); -} - -void gl3_0_glEnableVertexAttribArray(void *_glfuncs, GLuint index) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnableVertexAttribArray(index); -} - -void gl3_0_glDisableVertexAttribArray(void *_glfuncs, GLuint index) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDisableVertexAttribArray(index); -} - -void gl3_0_glDetachShader(void *_glfuncs, GLuint program, GLuint shader) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDetachShader(program, shader); -} - -void gl3_0_glDeleteShader(void *_glfuncs, GLuint shader) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteShader(shader); -} - -void gl3_0_glDeleteProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteProgram(program); -} - -GLuint gl3_0_glCreateShader(void *_glfuncs, GLenum gltype) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glCreateShader(gltype); -} - -GLuint gl3_0_glCreateProgram(void *_glfuncs) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glCreateProgram(); -} - -void gl3_0_glCompileShader(void *_glfuncs, GLuint shader) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompileShader(shader); -} - -void gl3_0_glBindAttribLocation(void *_glfuncs, GLuint program, GLuint index, const GLchar* name) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindAttribLocation(program, index, name); -} - -void gl3_0_glAttachShader(void *_glfuncs, GLuint program, GLuint shader) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glAttachShader(program, shader); -} - -void gl3_0_glStencilMaskSeparate(void *_glfuncs, GLenum face, GLuint mask) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilMaskSeparate(face, mask); -} - -void gl3_0_glStencilFuncSeparate(void *_glfuncs, GLenum face, GLenum glfunc, GLint ref, GLuint mask) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilFuncSeparate(face, glfunc, ref, mask); -} - -void gl3_0_glStencilOpSeparate(void *_glfuncs, GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilOpSeparate(face, sfail, dpfail, dppass); -} - -void gl3_0_glDrawBuffers(void *_glfuncs, GLsizei n, const GLenum* bufs) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawBuffers(n, bufs); -} - -void gl3_0_glBlendEquationSeparate(void *_glfuncs, GLenum modeRGB, GLenum modeAlpha) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendEquationSeparate(modeRGB, modeAlpha); -} - -void gl3_0_glUniformMatrix4x3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4x3fv(location, count, transpose, value); -} - -void gl3_0_glUniformMatrix3x4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3x4fv(location, count, transpose, value); -} - -void gl3_0_glUniformMatrix4x2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4x2fv(location, count, transpose, value); -} - -void gl3_0_glUniformMatrix2x4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2x4fv(location, count, transpose, value); -} - -void gl3_0_glUniformMatrix3x2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3x2fv(location, count, transpose, value); -} - -void gl3_0_glUniformMatrix2x3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2x3fv(location, count, transpose, value); -} - -GLboolean gl3_0_glIsVertexArray(void *_glfuncs, GLuint array) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsVertexArray(array); -} - -void gl3_0_glGenVertexArrays(void *_glfuncs, GLsizei n, GLuint* arrays) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenVertexArrays(n, arrays); -} - -void gl3_0_glDeleteVertexArrays(void *_glfuncs, GLsizei n, const GLuint* arrays) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteVertexArrays(n, arrays); -} - -void gl3_0_glBindVertexArray(void *_glfuncs, GLuint array) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindVertexArray(array); -} - -void gl3_0_glFlushMappedBufferRange(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr length) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFlushMappedBufferRange(target, offset, length); -} - -void gl3_0_glFramebufferTextureLayer(void *_glfuncs, GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTextureLayer(target, attachment, texture, level, layer); -} - -void gl3_0_glRenderbufferStorageMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRenderbufferStorageMultisample(target, samples, internalFormat, width, height); -} - -void gl3_0_glBlitFramebuffer(void *_glfuncs, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter); -} - -void gl3_0_glGenerateMipmap(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenerateMipmap(target); -} - -void gl3_0_glGetFramebufferAttachmentParameteriv(void *_glfuncs, GLenum target, GLenum attachment, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetFramebufferAttachmentParameteriv(target, attachment, pname, params); -} - -void gl3_0_glFramebufferRenderbuffer(void *_glfuncs, GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer); -} - -void gl3_0_glFramebufferTexture3D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTexture3D(target, attachment, textarget, texture, level, zoffset); -} - -void gl3_0_glFramebufferTexture2D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTexture2D(target, attachment, textarget, texture, level); -} - -void gl3_0_glFramebufferTexture1D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTexture1D(target, attachment, textarget, texture, level); -} - -GLenum gl3_0_glCheckFramebufferStatus(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glCheckFramebufferStatus(target); -} - -void gl3_0_glGenFramebuffers(void *_glfuncs, GLsizei n, GLuint* framebuffers) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenFramebuffers(n, framebuffers); -} - -void gl3_0_glDeleteFramebuffers(void *_glfuncs, GLsizei n, const GLuint* framebuffers) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteFramebuffers(n, framebuffers); -} - -void gl3_0_glBindFramebuffer(void *_glfuncs, GLenum target, GLuint framebuffer) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindFramebuffer(target, framebuffer); -} - -GLboolean gl3_0_glIsFramebuffer(void *_glfuncs, GLuint framebuffer) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsFramebuffer(framebuffer); -} - -void gl3_0_glGetRenderbufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetRenderbufferParameteriv(target, pname, params); -} - -void gl3_0_glRenderbufferStorage(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRenderbufferStorage(target, internalFormat, width, height); -} - -void gl3_0_glGenRenderbuffers(void *_glfuncs, GLsizei n, GLuint* renderbuffers) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenRenderbuffers(n, renderbuffers); -} - -void gl3_0_glDeleteRenderbuffers(void *_glfuncs, GLsizei n, const GLuint* renderbuffers) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteRenderbuffers(n, renderbuffers); -} - -void gl3_0_glBindRenderbuffer(void *_glfuncs, GLenum target, GLuint renderbuffer) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindRenderbuffer(target, renderbuffer); -} - -GLboolean gl3_0_glIsRenderbuffer(void *_glfuncs, GLuint renderbuffer) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsRenderbuffer(renderbuffer); -} - -void gl3_0_glClearBufferfi(void *_glfuncs, GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearBufferfi(buffer, drawbuffer, depth, stencil); -} - -void gl3_0_glClearBufferfv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLfloat* value) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearBufferfv(buffer, drawbuffer, value); -} - -void gl3_0_glClearBufferuiv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLuint* value) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearBufferuiv(buffer, drawbuffer, value); -} - -void gl3_0_glClearBufferiv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLint* value) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearBufferiv(buffer, drawbuffer, value); -} - -void gl3_0_glGetTexParameterIuiv(void *_glfuncs, GLenum target, GLenum pname, GLuint* params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameterIuiv(target, pname, params); -} - -void gl3_0_glGetTexParameterIiv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameterIiv(target, pname, params); -} - -void gl3_0_glTexParameterIuiv(void *_glfuncs, GLenum target, GLenum pname, const GLuint* params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterIuiv(target, pname, params); -} - -void gl3_0_glTexParameterIiv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterIiv(target, pname, params); -} - -void gl3_0_glUniform4uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4uiv(location, count, value); -} - -void gl3_0_glUniform3uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3uiv(location, count, value); -} - -void gl3_0_glUniform2uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2uiv(location, count, value); -} - -void gl3_0_glUniform1uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1uiv(location, count, value); -} - -void gl3_0_glUniform4ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4ui(location, v0, v1, v2, v3); -} - -void gl3_0_glUniform3ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1, GLuint v2) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3ui(location, v0, v1, v2); -} - -void gl3_0_glUniform2ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2ui(location, v0, v1); -} - -void gl3_0_glUniform1ui(void *_glfuncs, GLint location, GLuint v0) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1ui(location, v0); -} - -GLint gl3_0_glGetFragDataLocation(void *_glfuncs, GLuint program, const GLchar* name) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetFragDataLocation(program, name); -} - -void gl3_0_glBindFragDataLocation(void *_glfuncs, GLuint program, GLuint color, const GLchar* name) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindFragDataLocation(program, color, name); -} - -void gl3_0_glGetUniformuiv(void *_glfuncs, GLuint program, GLint location, GLuint* params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetUniformuiv(program, location, params); -} - -void gl3_0_glGetVertexAttribIuiv(void *_glfuncs, GLuint index, GLenum pname, GLuint* params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribIuiv(index, pname, params); -} - -void gl3_0_glGetVertexAttribIiv(void *_glfuncs, GLuint index, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribIiv(index, pname, params); -} - -void gl3_0_glVertexAttribIPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribIPointer(index, size, gltype, stride, pointer); -} - -void gl3_0_glEndConditionalRender(void *_glfuncs) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndConditionalRender(); -} - -void gl3_0_glBeginConditionalRender(void *_glfuncs, GLuint id, GLenum mode) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBeginConditionalRender(id, mode); -} - -void gl3_0_glClampColor(void *_glfuncs, GLenum target, GLenum clamp) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClampColor(target, clamp); -} - -void gl3_0_glGetTransformFeedbackVarying(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* gltype, GLchar* name) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTransformFeedbackVarying(program, index, bufSize, length, size, gltype, name); -} - -void gl3_0_glBindBufferBase(void *_glfuncs, GLenum target, GLuint index, GLuint buffer) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindBufferBase(target, index, buffer); -} - -void gl3_0_glBindBufferRange(void *_glfuncs, GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindBufferRange(target, index, buffer, offset, size); -} - -void gl3_0_glEndTransformFeedback(void *_glfuncs) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndTransformFeedback(); -} - -void gl3_0_glBeginTransformFeedback(void *_glfuncs, GLenum primitiveMode) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBeginTransformFeedback(primitiveMode); -} - -GLboolean gl3_0_glIsEnabledi(void *_glfuncs, GLenum target, GLuint index) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsEnabledi(target, index); -} - -void gl3_0_glDisablei(void *_glfuncs, GLenum target, GLuint index) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDisablei(target, index); -} - -void gl3_0_glEnablei(void *_glfuncs, GLenum target, GLuint index) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnablei(target, index); -} - -void gl3_0_glGetIntegeri_v(void *_glfuncs, GLenum target, GLuint index, GLint* data) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetIntegeri_v(target, index, data); -} - -void gl3_0_glGetBooleani_v(void *_glfuncs, GLenum target, GLuint index, GLboolean* data) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBooleani_v(target, index, data); -} - -void gl3_0_glColorMaski(void *_glfuncs, GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorMaski(index, r, g, b, a); -} - -void gl3_0_glTranslatef(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTranslatef(x, y, z); -} - -void gl3_0_glTranslated(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTranslated(x, y, z); -} - -void gl3_0_glScalef(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScalef(x, y, z); -} - -void gl3_0_glScaled(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScaled(x, y, z); -} - -void gl3_0_glRotatef(void *_glfuncs, GLfloat angle, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRotatef(angle, x, y, z); -} - -void gl3_0_glRotated(void *_glfuncs, GLdouble angle, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRotated(angle, x, y, z); -} - -void gl3_0_glPushMatrix(void *_glfuncs) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPushMatrix(); -} - -void gl3_0_glPopMatrix(void *_glfuncs) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPopMatrix(); -} - -void gl3_0_glOrtho(void *_glfuncs, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glOrtho(left, right, bottom, top, zNear, zFar); -} - -void gl3_0_glMultMatrixd(void *_glfuncs, const GLdouble* m) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultMatrixd(m); -} - -void gl3_0_glMultMatrixf(void *_glfuncs, const GLfloat* m) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultMatrixf(m); -} - -void gl3_0_glMatrixMode(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMatrixMode(mode); -} - -void gl3_0_glLoadMatrixd(void *_glfuncs, const GLdouble* m) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadMatrixd(m); -} - -void gl3_0_glLoadMatrixf(void *_glfuncs, const GLfloat* m) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadMatrixf(m); -} - -void gl3_0_glLoadIdentity(void *_glfuncs) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadIdentity(); -} - -void gl3_0_glFrustum(void *_glfuncs, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFrustum(left, right, bottom, top, zNear, zFar); -} - -GLboolean gl3_0_glIsList(void *_glfuncs, GLuint list) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsList(list); -} - -void gl3_0_glGetTexGeniv(void *_glfuncs, GLenum coord, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexGeniv(coord, pname, params); -} - -void gl3_0_glGetTexGenfv(void *_glfuncs, GLenum coord, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexGenfv(coord, pname, params); -} - -void gl3_0_glGetTexGendv(void *_glfuncs, GLenum coord, GLenum pname, GLdouble* params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexGendv(coord, pname, params); -} - -void gl3_0_glGetTexEnviv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexEnviv(target, pname, params); -} - -void gl3_0_glGetTexEnvfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexEnvfv(target, pname, params); -} - -void gl3_0_glGetPolygonStipple(void *_glfuncs, GLubyte* mask) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetPolygonStipple(mask); -} - -void gl3_0_glGetPixelMapusv(void *_glfuncs, GLenum glmap, GLushort* values) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetPixelMapusv(glmap, values); -} - -void gl3_0_glGetPixelMapuiv(void *_glfuncs, GLenum glmap, GLuint* values) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetPixelMapuiv(glmap, values); -} - -void gl3_0_glGetPixelMapfv(void *_glfuncs, GLenum glmap, GLfloat* values) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetPixelMapfv(glmap, values); -} - -void gl3_0_glGetMaterialiv(void *_glfuncs, GLenum face, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMaterialiv(face, pname, params); -} - -void gl3_0_glGetMaterialfv(void *_glfuncs, GLenum face, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMaterialfv(face, pname, params); -} - -void gl3_0_glGetMapiv(void *_glfuncs, GLenum target, GLenum query, GLint* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMapiv(target, query, v); -} - -void gl3_0_glGetMapfv(void *_glfuncs, GLenum target, GLenum query, GLfloat* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMapfv(target, query, v); -} - -void gl3_0_glGetMapdv(void *_glfuncs, GLenum target, GLenum query, GLdouble* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMapdv(target, query, v); -} - -void gl3_0_glGetLightiv(void *_glfuncs, GLenum light, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetLightiv(light, pname, params); -} - -void gl3_0_glGetLightfv(void *_glfuncs, GLenum light, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetLightfv(light, pname, params); -} - -void gl3_0_glGetClipPlane(void *_glfuncs, GLenum plane, GLdouble* equation) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetClipPlane(plane, equation); -} - -void gl3_0_glDrawPixels(void *_glfuncs, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawPixels(width, height, format, gltype, pixels); -} - -void gl3_0_glCopyPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum gltype) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyPixels(x, y, width, height, gltype); -} - -void gl3_0_glPixelMapusv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLushort* values) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelMapusv(glmap, mapsize, values); -} - -void gl3_0_glPixelMapuiv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLuint* values) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelMapuiv(glmap, mapsize, values); -} - -void gl3_0_glPixelMapfv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLfloat* values) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelMapfv(glmap, mapsize, values); -} - -void gl3_0_glPixelTransferi(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelTransferi(pname, param); -} - -void gl3_0_glPixelTransferf(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelTransferf(pname, param); -} - -void gl3_0_glPixelZoom(void *_glfuncs, GLfloat xfactor, GLfloat yfactor) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelZoom(xfactor, yfactor); -} - -void gl3_0_glAlphaFunc(void *_glfuncs, GLenum glfunc, GLfloat ref) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glAlphaFunc(glfunc, ref); -} - -void gl3_0_glEvalPoint2(void *_glfuncs, GLint i, GLint j) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalPoint2(i, j); -} - -void gl3_0_glEvalMesh2(void *_glfuncs, GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalMesh2(mode, i1, i2, j1, j2); -} - -void gl3_0_glEvalPoint1(void *_glfuncs, GLint i) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalPoint1(i); -} - -void gl3_0_glEvalMesh1(void *_glfuncs, GLenum mode, GLint i1, GLint i2) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalMesh1(mode, i1, i2); -} - -void gl3_0_glEvalCoord2fv(void *_glfuncs, const GLfloat* u) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord2fv(u); -} - -void gl3_0_glEvalCoord2f(void *_glfuncs, GLfloat u, GLfloat v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord2f(u, v); -} - -void gl3_0_glEvalCoord2dv(void *_glfuncs, const GLdouble* u) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord2dv(u); -} - -void gl3_0_glEvalCoord2d(void *_glfuncs, GLdouble u, GLdouble v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord2d(u, v); -} - -void gl3_0_glEvalCoord1fv(void *_glfuncs, const GLfloat* u) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord1fv(u); -} - -void gl3_0_glEvalCoord1f(void *_glfuncs, GLfloat u) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord1f(u); -} - -void gl3_0_glEvalCoord1dv(void *_glfuncs, const GLdouble* u) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord1dv(u); -} - -void gl3_0_glEvalCoord1d(void *_glfuncs, GLdouble u) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord1d(u); -} - -void gl3_0_glMapGrid2f(void *_glfuncs, GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMapGrid2f(un, u1, u2, vn, v1, v2); -} - -void gl3_0_glMapGrid2d(void *_glfuncs, GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMapGrid2d(un, u1, u2, vn, v1, v2); -} - -void gl3_0_glMapGrid1f(void *_glfuncs, GLint un, GLfloat u1, GLfloat u2) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMapGrid1f(un, u1, u2); -} - -void gl3_0_glMapGrid1d(void *_glfuncs, GLint un, GLdouble u1, GLdouble u2) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMapGrid1d(un, u1, u2); -} - -void gl3_0_glMap2f(void *_glfuncs, GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat* points) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMap2f(target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points); -} - -void gl3_0_glMap2d(void *_glfuncs, GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble* points) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMap2d(target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points); -} - -void gl3_0_glMap1f(void *_glfuncs, GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat* points) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMap1f(target, u1, u2, stride, order, points); -} - -void gl3_0_glMap1d(void *_glfuncs, GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble* points) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMap1d(target, u1, u2, stride, order, points); -} - -void gl3_0_glPushAttrib(void *_glfuncs, GLbitfield mask) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPushAttrib(mask); -} - -void gl3_0_glPopAttrib(void *_glfuncs) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPopAttrib(); -} - -void gl3_0_glAccum(void *_glfuncs, GLenum op, GLfloat value) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glAccum(op, value); -} - -void gl3_0_glIndexMask(void *_glfuncs, GLuint mask) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexMask(mask); -} - -void gl3_0_glClearIndex(void *_glfuncs, GLfloat c) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearIndex(c); -} - -void gl3_0_glClearAccum(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearAccum(red, green, blue, alpha); -} - -void gl3_0_glPushName(void *_glfuncs, GLuint name) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPushName(name); -} - -void gl3_0_glPopName(void *_glfuncs) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPopName(); -} - -void gl3_0_glPassThrough(void *_glfuncs, GLfloat token) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPassThrough(token); -} - -void gl3_0_glLoadName(void *_glfuncs, GLuint name) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadName(name); -} - -void gl3_0_glInitNames(void *_glfuncs) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glInitNames(); -} - -GLint gl3_0_glRenderMode(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glRenderMode(mode); -} - -void gl3_0_glSelectBuffer(void *_glfuncs, GLsizei size, GLuint* buffer) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSelectBuffer(size, buffer); -} - -void gl3_0_glFeedbackBuffer(void *_glfuncs, GLsizei size, GLenum gltype, GLfloat* buffer) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFeedbackBuffer(size, gltype, buffer); -} - -void gl3_0_glTexGeniv(void *_glfuncs, GLenum coord, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGeniv(coord, pname, params); -} - -void gl3_0_glTexGeni(void *_glfuncs, GLenum coord, GLenum pname, GLint param) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGeni(coord, pname, param); -} - -void gl3_0_glTexGenfv(void *_glfuncs, GLenum coord, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGenfv(coord, pname, params); -} - -void gl3_0_glTexGenf(void *_glfuncs, GLenum coord, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGenf(coord, pname, param); -} - -void gl3_0_glTexGendv(void *_glfuncs, GLenum coord, GLenum pname, const GLdouble* params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGendv(coord, pname, params); -} - -void gl3_0_glTexGend(void *_glfuncs, GLenum coord, GLenum pname, GLdouble param) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGend(coord, pname, param); -} - -void gl3_0_glTexEnviv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexEnviv(target, pname, params); -} - -void gl3_0_glTexEnvi(void *_glfuncs, GLenum target, GLenum pname, GLint param) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexEnvi(target, pname, param); -} - -void gl3_0_glTexEnvfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexEnvfv(target, pname, params); -} - -void gl3_0_glTexEnvf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexEnvf(target, pname, param); -} - -void gl3_0_glShadeModel(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glShadeModel(mode); -} - -void gl3_0_glPolygonStipple(void *_glfuncs, const GLubyte* mask) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPolygonStipple(mask); -} - -void gl3_0_glMaterialiv(void *_glfuncs, GLenum face, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMaterialiv(face, pname, params); -} - -void gl3_0_glMateriali(void *_glfuncs, GLenum face, GLenum pname, GLint param) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMateriali(face, pname, param); -} - -void gl3_0_glMaterialfv(void *_glfuncs, GLenum face, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMaterialfv(face, pname, params); -} - -void gl3_0_glMaterialf(void *_glfuncs, GLenum face, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMaterialf(face, pname, param); -} - -void gl3_0_glLineStipple(void *_glfuncs, GLint factor, GLushort pattern) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLineStipple(factor, pattern); -} - -void gl3_0_glLightModeliv(void *_glfuncs, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightModeliv(pname, params); -} - -void gl3_0_glLightModeli(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightModeli(pname, param); -} - -void gl3_0_glLightModelfv(void *_glfuncs, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightModelfv(pname, params); -} - -void gl3_0_glLightModelf(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightModelf(pname, param); -} - -void gl3_0_glLightiv(void *_glfuncs, GLenum light, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightiv(light, pname, params); -} - -void gl3_0_glLighti(void *_glfuncs, GLenum light, GLenum pname, GLint param) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLighti(light, pname, param); -} - -void gl3_0_glLightfv(void *_glfuncs, GLenum light, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightfv(light, pname, params); -} - -void gl3_0_glLightf(void *_glfuncs, GLenum light, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightf(light, pname, param); -} - -void gl3_0_glFogiv(void *_glfuncs, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogiv(pname, params); -} - -void gl3_0_glFogi(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogi(pname, param); -} - -void gl3_0_glFogfv(void *_glfuncs, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogfv(pname, params); -} - -void gl3_0_glFogf(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogf(pname, param); -} - -void gl3_0_glColorMaterial(void *_glfuncs, GLenum face, GLenum mode) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorMaterial(face, mode); -} - -void gl3_0_glClipPlane(void *_glfuncs, GLenum plane, const GLdouble* equation) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClipPlane(plane, equation); -} - -void gl3_0_glVertex4sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4sv(v); -} - -void gl3_0_glVertex4s(void *_glfuncs, GLshort x, GLshort y, GLshort z, GLshort w) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4s(x, y, z, w); -} - -void gl3_0_glVertex4iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4iv(v); -} - -void gl3_0_glVertex4i(void *_glfuncs, GLint x, GLint y, GLint z, GLint w) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4i(x, y, z, w); -} - -void gl3_0_glVertex4fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4fv(v); -} - -void gl3_0_glVertex4f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z, GLfloat w) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4f(x, y, z, w); -} - -void gl3_0_glVertex4dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4dv(v); -} - -void gl3_0_glVertex4d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z, GLdouble w) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4d(x, y, z, w); -} - -void gl3_0_glVertex3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3sv(v); -} - -void gl3_0_glVertex3s(void *_glfuncs, GLshort x, GLshort y, GLshort z) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3s(x, y, z); -} - -void gl3_0_glVertex3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3iv(v); -} - -void gl3_0_glVertex3i(void *_glfuncs, GLint x, GLint y, GLint z) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3i(x, y, z); -} - -void gl3_0_glVertex3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3fv(v); -} - -void gl3_0_glVertex3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3f(x, y, z); -} - -void gl3_0_glVertex3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3dv(v); -} - -void gl3_0_glVertex3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3d(x, y, z); -} - -void gl3_0_glVertex2sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2sv(v); -} - -void gl3_0_glVertex2s(void *_glfuncs, GLshort x, GLshort y) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2s(x, y); -} - -void gl3_0_glVertex2iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2iv(v); -} - -void gl3_0_glVertex2i(void *_glfuncs, GLint x, GLint y) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2i(x, y); -} - -void gl3_0_glVertex2fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2fv(v); -} - -void gl3_0_glVertex2f(void *_glfuncs, GLfloat x, GLfloat y) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2f(x, y); -} - -void gl3_0_glVertex2dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2dv(v); -} - -void gl3_0_glVertex2d(void *_glfuncs, GLdouble x, GLdouble y) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2d(x, y); -} - -void gl3_0_glTexCoord4sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4sv(v); -} - -void gl3_0_glTexCoord4s(void *_glfuncs, GLshort s, GLshort t, GLshort r, GLshort q) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4s(s, t, r, q); -} - -void gl3_0_glTexCoord4iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4iv(v); -} - -void gl3_0_glTexCoord4i(void *_glfuncs, GLint s, GLint t, GLint r, GLint q) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4i(s, t, r, q); -} - -void gl3_0_glTexCoord4fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4fv(v); -} - -void gl3_0_glTexCoord4f(void *_glfuncs, GLfloat s, GLfloat t, GLfloat r, GLfloat q) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4f(s, t, r, q); -} - -void gl3_0_glTexCoord4dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4dv(v); -} - -void gl3_0_glTexCoord4d(void *_glfuncs, GLdouble s, GLdouble t, GLdouble r, GLdouble q) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4d(s, t, r, q); -} - -void gl3_0_glTexCoord3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3sv(v); -} - -void gl3_0_glTexCoord3s(void *_glfuncs, GLshort s, GLshort t, GLshort r) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3s(s, t, r); -} - -void gl3_0_glTexCoord3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3iv(v); -} - -void gl3_0_glTexCoord3i(void *_glfuncs, GLint s, GLint t, GLint r) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3i(s, t, r); -} - -void gl3_0_glTexCoord3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3fv(v); -} - -void gl3_0_glTexCoord3f(void *_glfuncs, GLfloat s, GLfloat t, GLfloat r) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3f(s, t, r); -} - -void gl3_0_glTexCoord3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3dv(v); -} - -void gl3_0_glTexCoord3d(void *_glfuncs, GLdouble s, GLdouble t, GLdouble r) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3d(s, t, r); -} - -void gl3_0_glTexCoord2sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2sv(v); -} - -void gl3_0_glTexCoord2s(void *_glfuncs, GLshort s, GLshort t) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2s(s, t); -} - -void gl3_0_glTexCoord2iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2iv(v); -} - -void gl3_0_glTexCoord2i(void *_glfuncs, GLint s, GLint t) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2i(s, t); -} - -void gl3_0_glTexCoord2fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2fv(v); -} - -void gl3_0_glTexCoord2f(void *_glfuncs, GLfloat s, GLfloat t) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2f(s, t); -} - -void gl3_0_glTexCoord2dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2dv(v); -} - -void gl3_0_glTexCoord2d(void *_glfuncs, GLdouble s, GLdouble t) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2d(s, t); -} - -void gl3_0_glTexCoord1sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1sv(v); -} - -void gl3_0_glTexCoord1s(void *_glfuncs, GLshort s) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1s(s); -} - -void gl3_0_glTexCoord1iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1iv(v); -} - -void gl3_0_glTexCoord1i(void *_glfuncs, GLint s) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1i(s); -} - -void gl3_0_glTexCoord1fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1fv(v); -} - -void gl3_0_glTexCoord1f(void *_glfuncs, GLfloat s) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1f(s); -} - -void gl3_0_glTexCoord1dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1dv(v); -} - -void gl3_0_glTexCoord1d(void *_glfuncs, GLdouble s) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1d(s); -} - -void gl3_0_glRectsv(void *_glfuncs, const GLshort* v1, const GLshort* v2) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectsv(v1, v2); -} - -void gl3_0_glRects(void *_glfuncs, GLshort x1, GLshort y1, GLshort x2, GLshort y2) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRects(x1, y1, x2, y2); -} - -void gl3_0_glRectiv(void *_glfuncs, const GLint* v1, const GLint* v2) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectiv(v1, v2); -} - -void gl3_0_glRecti(void *_glfuncs, GLint x1, GLint y1, GLint x2, GLint y2) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRecti(x1, y1, x2, y2); -} - -void gl3_0_glRectfv(void *_glfuncs, const GLfloat* v1, const GLfloat* v2) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectfv(v1, v2); -} - -void gl3_0_glRectf(void *_glfuncs, GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectf(x1, y1, x2, y2); -} - -void gl3_0_glRectdv(void *_glfuncs, const GLdouble* v1, const GLdouble* v2) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectdv(v1, v2); -} - -void gl3_0_glRectd(void *_glfuncs, GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectd(x1, y1, x2, y2); -} - -void gl3_0_glRasterPos4sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4sv(v); -} - -void gl3_0_glRasterPos4s(void *_glfuncs, GLshort x, GLshort y, GLshort z, GLshort w) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4s(x, y, z, w); -} - -void gl3_0_glRasterPos4iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4iv(v); -} - -void gl3_0_glRasterPos4i(void *_glfuncs, GLint x, GLint y, GLint z, GLint w) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4i(x, y, z, w); -} - -void gl3_0_glRasterPos4fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4fv(v); -} - -void gl3_0_glRasterPos4f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z, GLfloat w) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4f(x, y, z, w); -} - -void gl3_0_glRasterPos4dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4dv(v); -} - -void gl3_0_glRasterPos4d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z, GLdouble w) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4d(x, y, z, w); -} - -void gl3_0_glRasterPos3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3sv(v); -} - -void gl3_0_glRasterPos3s(void *_glfuncs, GLshort x, GLshort y, GLshort z) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3s(x, y, z); -} - -void gl3_0_glRasterPos3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3iv(v); -} - -void gl3_0_glRasterPos3i(void *_glfuncs, GLint x, GLint y, GLint z) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3i(x, y, z); -} - -void gl3_0_glRasterPos3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3fv(v); -} - -void gl3_0_glRasterPos3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3f(x, y, z); -} - -void gl3_0_glRasterPos3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3dv(v); -} - -void gl3_0_glRasterPos3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3d(x, y, z); -} - -void gl3_0_glRasterPos2sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2sv(v); -} - -void gl3_0_glRasterPos2s(void *_glfuncs, GLshort x, GLshort y) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2s(x, y); -} - -void gl3_0_glRasterPos2iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2iv(v); -} - -void gl3_0_glRasterPos2i(void *_glfuncs, GLint x, GLint y) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2i(x, y); -} - -void gl3_0_glRasterPos2fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2fv(v); -} - -void gl3_0_glRasterPos2f(void *_glfuncs, GLfloat x, GLfloat y) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2f(x, y); -} - -void gl3_0_glRasterPos2dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2dv(v); -} - -void gl3_0_glRasterPos2d(void *_glfuncs, GLdouble x, GLdouble y) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2d(x, y); -} - -void gl3_0_glNormal3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3sv(v); -} - -void gl3_0_glNormal3s(void *_glfuncs, GLshort nx, GLshort ny, GLshort nz) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3s(nx, ny, nz); -} - -void gl3_0_glNormal3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3iv(v); -} - -void gl3_0_glNormal3i(void *_glfuncs, GLint nx, GLint ny, GLint nz) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3i(nx, ny, nz); -} - -void gl3_0_glNormal3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3fv(v); -} - -void gl3_0_glNormal3f(void *_glfuncs, GLfloat nx, GLfloat ny, GLfloat nz) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3f(nx, ny, nz); -} - -void gl3_0_glNormal3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3dv(v); -} - -void gl3_0_glNormal3d(void *_glfuncs, GLdouble nx, GLdouble ny, GLdouble nz) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3d(nx, ny, nz); -} - -void gl3_0_glNormal3bv(void *_glfuncs, const GLbyte* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3bv(v); -} - -void gl3_0_glNormal3b(void *_glfuncs, GLbyte nx, GLbyte ny, GLbyte nz) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3b(nx, ny, nz); -} - -void gl3_0_glIndexsv(void *_glfuncs, const GLshort* c) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexsv(c); -} - -void gl3_0_glIndexs(void *_glfuncs, GLshort c) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexs(c); -} - -void gl3_0_glIndexiv(void *_glfuncs, const GLint* c) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexiv(c); -} - -void gl3_0_glIndexi(void *_glfuncs, GLint c) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexi(c); -} - -void gl3_0_glIndexfv(void *_glfuncs, const GLfloat* c) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexfv(c); -} - -void gl3_0_glIndexf(void *_glfuncs, GLfloat c) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexf(c); -} - -void gl3_0_glIndexdv(void *_glfuncs, const GLdouble* c) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexdv(c); -} - -void gl3_0_glIndexd(void *_glfuncs, GLdouble c) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexd(c); -} - -void gl3_0_glEnd(void *_glfuncs) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnd(); -} - -void gl3_0_glEdgeFlagv(void *_glfuncs, const GLboolean* flag) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEdgeFlagv(flag); -} - -void gl3_0_glEdgeFlag(void *_glfuncs, GLboolean flag) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEdgeFlag(flag); -} - -void gl3_0_glColor4usv(void *_glfuncs, const GLushort* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4usv(v); -} - -void gl3_0_glColor4us(void *_glfuncs, GLushort red, GLushort green, GLushort blue, GLushort alpha) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4us(red, green, blue, alpha); -} - -void gl3_0_glColor4uiv(void *_glfuncs, const GLuint* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4uiv(v); -} - -void gl3_0_glColor4ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue, GLuint alpha) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4ui(red, green, blue, alpha); -} - -void gl3_0_glColor4ubv(void *_glfuncs, const GLubyte* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4ubv(v); -} - -void gl3_0_glColor4ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4ub(red, green, blue, alpha); -} - -void gl3_0_glColor4sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4sv(v); -} - -void gl3_0_glColor4s(void *_glfuncs, GLshort red, GLshort green, GLshort blue, GLshort alpha) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4s(red, green, blue, alpha); -} - -void gl3_0_glColor4iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4iv(v); -} - -void gl3_0_glColor4i(void *_glfuncs, GLint red, GLint green, GLint blue, GLint alpha) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4i(red, green, blue, alpha); -} - -void gl3_0_glColor4fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4fv(v); -} - -void gl3_0_glColor4f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4f(red, green, blue, alpha); -} - -void gl3_0_glColor4dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4dv(v); -} - -void gl3_0_glColor4d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4d(red, green, blue, alpha); -} - -void gl3_0_glColor4bv(void *_glfuncs, const GLbyte* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4bv(v); -} - -void gl3_0_glColor4b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4b(red, green, blue, alpha); -} - -void gl3_0_glColor3usv(void *_glfuncs, const GLushort* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3usv(v); -} - -void gl3_0_glColor3us(void *_glfuncs, GLushort red, GLushort green, GLushort blue) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3us(red, green, blue); -} - -void gl3_0_glColor3uiv(void *_glfuncs, const GLuint* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3uiv(v); -} - -void gl3_0_glColor3ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3ui(red, green, blue); -} - -void gl3_0_glColor3ubv(void *_glfuncs, const GLubyte* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3ubv(v); -} - -void gl3_0_glColor3ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3ub(red, green, blue); -} - -void gl3_0_glColor3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3sv(v); -} - -void gl3_0_glColor3s(void *_glfuncs, GLshort red, GLshort green, GLshort blue) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3s(red, green, blue); -} - -void gl3_0_glColor3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3iv(v); -} - -void gl3_0_glColor3i(void *_glfuncs, GLint red, GLint green, GLint blue) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3i(red, green, blue); -} - -void gl3_0_glColor3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3fv(v); -} - -void gl3_0_glColor3f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3f(red, green, blue); -} - -void gl3_0_glColor3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3dv(v); -} - -void gl3_0_glColor3d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3d(red, green, blue); -} - -void gl3_0_glColor3bv(void *_glfuncs, const GLbyte* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3bv(v); -} - -void gl3_0_glColor3b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3b(red, green, blue); -} - -void gl3_0_glBitmap(void *_glfuncs, GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte* bitmap) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBitmap(width, height, xorig, yorig, xmove, ymove, bitmap); -} - -void gl3_0_glBegin(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBegin(mode); -} - -void gl3_0_glListBase(void *_glfuncs, GLuint base) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glListBase(base); -} - -GLuint gl3_0_glGenLists(void *_glfuncs, GLsizei range_) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGenLists(range_); -} - -void gl3_0_glDeleteLists(void *_glfuncs, GLuint list, GLsizei range_) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteLists(list, range_); -} - -void gl3_0_glCallLists(void *_glfuncs, GLsizei n, GLenum gltype, const GLvoid* lists) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCallLists(n, gltype, lists); -} - -void gl3_0_glCallList(void *_glfuncs, GLuint list) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCallList(list); -} - -void gl3_0_glEndList(void *_glfuncs) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndList(); -} - -void gl3_0_glNewList(void *_glfuncs, GLuint list, GLenum mode) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNewList(list, mode); -} - -void gl3_0_glPushClientAttrib(void *_glfuncs, GLbitfield mask) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPushClientAttrib(mask); -} - -void gl3_0_glPopClientAttrib(void *_glfuncs) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPopClientAttrib(); -} - -void gl3_0_glPrioritizeTextures(void *_glfuncs, GLsizei n, const GLuint* textures, const GLfloat* priorities) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPrioritizeTextures(n, textures, priorities); -} - -GLboolean gl3_0_glAreTexturesResident(void *_glfuncs, GLsizei n, const GLuint* textures, GLboolean* residences) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glAreTexturesResident(n, textures, residences); -} - -void gl3_0_glVertexPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexPointer(size, gltype, stride, pointer); -} - -void gl3_0_glTexCoordPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordPointer(size, gltype, stride, pointer); -} - -void gl3_0_glNormalPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormalPointer(gltype, stride, pointer); -} - -void gl3_0_glInterleavedArrays(void *_glfuncs, GLenum format, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glInterleavedArrays(format, stride, pointer); -} - -void gl3_0_glIndexPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexPointer(gltype, stride, pointer); -} - -void gl3_0_glEnableClientState(void *_glfuncs, GLenum array) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnableClientState(array); -} - -void gl3_0_glEdgeFlagPointer(void *_glfuncs, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEdgeFlagPointer(stride, pointer); -} - -void gl3_0_glDisableClientState(void *_glfuncs, GLenum array) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDisableClientState(array); -} - -void gl3_0_glColorPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorPointer(size, gltype, stride, pointer); -} - -void gl3_0_glArrayElement(void *_glfuncs, GLint i) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glArrayElement(i); -} - -void gl3_0_glResetMinmax(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glResetMinmax(target); -} - -void gl3_0_glResetHistogram(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glResetHistogram(target); -} - -void gl3_0_glMinmax(void *_glfuncs, GLenum target, GLenum internalFormat, GLboolean sink) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMinmax(target, internalFormat, sink); -} - -void gl3_0_glHistogram(void *_glfuncs, GLenum target, GLsizei width, GLenum internalFormat, GLboolean sink) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glHistogram(target, width, internalFormat, sink); -} - -void gl3_0_glGetMinmaxParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMinmaxParameteriv(target, pname, params); -} - -void gl3_0_glGetMinmaxParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMinmaxParameterfv(target, pname, params); -} - -void gl3_0_glGetMinmax(void *_glfuncs, GLenum target, GLboolean reset, GLenum format, GLenum gltype, GLvoid* values) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMinmax(target, reset, format, gltype, values); -} - -void gl3_0_glGetHistogramParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetHistogramParameteriv(target, pname, params); -} - -void gl3_0_glGetHistogramParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetHistogramParameterfv(target, pname, params); -} - -void gl3_0_glGetHistogram(void *_glfuncs, GLenum target, GLboolean reset, GLenum format, GLenum gltype, GLvoid* values) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetHistogram(target, reset, format, gltype, values); -} - -void gl3_0_glSeparableFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* row, const GLvoid* column) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSeparableFilter2D(target, internalFormat, width, height, format, gltype, row, column); -} - -void gl3_0_glGetSeparableFilter(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* row, GLvoid* column, GLvoid* span) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetSeparableFilter(target, format, gltype, row, column, span); -} - -void gl3_0_glGetConvolutionParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetConvolutionParameteriv(target, pname, params); -} - -void gl3_0_glGetConvolutionParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetConvolutionParameterfv(target, pname, params); -} - -void gl3_0_glGetConvolutionFilter(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* image) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetConvolutionFilter(target, format, gltype, image); -} - -void gl3_0_glCopyConvolutionFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyConvolutionFilter2D(target, internalFormat, x, y, width, height); -} - -void gl3_0_glCopyConvolutionFilter1D(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyConvolutionFilter1D(target, internalFormat, x, y, width); -} - -void gl3_0_glConvolutionParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionParameteriv(target, pname, params); -} - -void gl3_0_glConvolutionParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionParameteri(target, pname, params); -} - -void gl3_0_glConvolutionParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionParameterfv(target, pname, params); -} - -void gl3_0_glConvolutionParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionParameterf(target, pname, params); -} - -void gl3_0_glConvolutionFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* image) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionFilter2D(target, internalFormat, width, height, format, gltype, image); -} - -void gl3_0_glConvolutionFilter1D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum gltype, const GLvoid* image) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionFilter1D(target, internalFormat, width, format, gltype, image); -} - -void gl3_0_glCopyColorSubTable(void *_glfuncs, GLenum target, GLsizei start, GLint x, GLint y, GLsizei width) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyColorSubTable(target, start, x, y, width); -} - -void gl3_0_glColorSubTable(void *_glfuncs, GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum gltype, const GLvoid* data) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorSubTable(target, start, count, format, gltype, data); -} - -void gl3_0_glGetColorTableParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetColorTableParameteriv(target, pname, params); -} - -void gl3_0_glGetColorTableParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetColorTableParameterfv(target, pname, params); -} - -void gl3_0_glGetColorTable(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* table) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetColorTable(target, format, gltype, table); -} - -void gl3_0_glCopyColorTable(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyColorTable(target, internalFormat, x, y, width); -} - -void gl3_0_glColorTableParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorTableParameteriv(target, pname, params); -} - -void gl3_0_glColorTableParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorTableParameterfv(target, pname, params); -} - -void gl3_0_glColorTable(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum gltype, const GLvoid* table) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorTable(target, internalFormat, width, format, gltype, table); -} - -void gl3_0_glMultTransposeMatrixd(void *_glfuncs, const GLdouble* m) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultTransposeMatrixd(m); -} - -void gl3_0_glMultTransposeMatrixf(void *_glfuncs, const GLfloat* m) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultTransposeMatrixf(m); -} - -void gl3_0_glLoadTransposeMatrixd(void *_glfuncs, const GLdouble* m) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadTransposeMatrixd(m); -} - -void gl3_0_glLoadTransposeMatrixf(void *_glfuncs, const GLfloat* m) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadTransposeMatrixf(m); -} - -void gl3_0_glMultiTexCoord4sv(void *_glfuncs, GLenum target, const GLshort* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4sv(target, v); -} - -void gl3_0_glMultiTexCoord4s(void *_glfuncs, GLenum target, GLshort s, GLshort t, GLshort r, GLshort q) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4s(target, s, t, r, q); -} - -void gl3_0_glMultiTexCoord4iv(void *_glfuncs, GLenum target, const GLint* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4iv(target, v); -} - -void gl3_0_glMultiTexCoord4i(void *_glfuncs, GLenum target, GLint s, GLint t, GLint r, GLint q) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4i(target, s, t, r, q); -} - -void gl3_0_glMultiTexCoord4fv(void *_glfuncs, GLenum target, const GLfloat* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4fv(target, v); -} - -void gl3_0_glMultiTexCoord4f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4f(target, s, t, r, q); -} - -void gl3_0_glMultiTexCoord4dv(void *_glfuncs, GLenum target, const GLdouble* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4dv(target, v); -} - -void gl3_0_glMultiTexCoord4d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4d(target, s, t, r, q); -} - -void gl3_0_glMultiTexCoord3sv(void *_glfuncs, GLenum target, const GLshort* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3sv(target, v); -} - -void gl3_0_glMultiTexCoord3s(void *_glfuncs, GLenum target, GLshort s, GLshort t, GLshort r) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3s(target, s, t, r); -} - -void gl3_0_glMultiTexCoord3iv(void *_glfuncs, GLenum target, const GLint* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3iv(target, v); -} - -void gl3_0_glMultiTexCoord3i(void *_glfuncs, GLenum target, GLint s, GLint t, GLint r) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3i(target, s, t, r); -} - -void gl3_0_glMultiTexCoord3fv(void *_glfuncs, GLenum target, const GLfloat* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3fv(target, v); -} - -void gl3_0_glMultiTexCoord3f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t, GLfloat r) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3f(target, s, t, r); -} - -void gl3_0_glMultiTexCoord3dv(void *_glfuncs, GLenum target, const GLdouble* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3dv(target, v); -} - -void gl3_0_glMultiTexCoord3d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t, GLdouble r) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3d(target, s, t, r); -} - -void gl3_0_glMultiTexCoord2sv(void *_glfuncs, GLenum target, const GLshort* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2sv(target, v); -} - -void gl3_0_glMultiTexCoord2s(void *_glfuncs, GLenum target, GLshort s, GLshort t) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2s(target, s, t); -} - -void gl3_0_glMultiTexCoord2iv(void *_glfuncs, GLenum target, const GLint* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2iv(target, v); -} - -void gl3_0_glMultiTexCoord2i(void *_glfuncs, GLenum target, GLint s, GLint t) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2i(target, s, t); -} - -void gl3_0_glMultiTexCoord2fv(void *_glfuncs, GLenum target, const GLfloat* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2fv(target, v); -} - -void gl3_0_glMultiTexCoord2f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2f(target, s, t); -} - -void gl3_0_glMultiTexCoord2dv(void *_glfuncs, GLenum target, const GLdouble* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2dv(target, v); -} - -void gl3_0_glMultiTexCoord2d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2d(target, s, t); -} - -void gl3_0_glMultiTexCoord1sv(void *_glfuncs, GLenum target, const GLshort* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1sv(target, v); -} - -void gl3_0_glMultiTexCoord1s(void *_glfuncs, GLenum target, GLshort s) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1s(target, s); -} - -void gl3_0_glMultiTexCoord1iv(void *_glfuncs, GLenum target, const GLint* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1iv(target, v); -} - -void gl3_0_glMultiTexCoord1i(void *_glfuncs, GLenum target, GLint s) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1i(target, s); -} - -void gl3_0_glMultiTexCoord1fv(void *_glfuncs, GLenum target, const GLfloat* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1fv(target, v); -} - -void gl3_0_glMultiTexCoord1f(void *_glfuncs, GLenum target, GLfloat s) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1f(target, s); -} - -void gl3_0_glMultiTexCoord1dv(void *_glfuncs, GLenum target, const GLdouble* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1dv(target, v); -} - -void gl3_0_glMultiTexCoord1d(void *_glfuncs, GLenum target, GLdouble s) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1d(target, s); -} - -void gl3_0_glClientActiveTexture(void *_glfuncs, GLenum texture) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClientActiveTexture(texture); -} - -void gl3_0_glWindowPos3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3sv(v); -} - -void gl3_0_glWindowPos3s(void *_glfuncs, GLshort x, GLshort y, GLshort z) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3s(x, y, z); -} - -void gl3_0_glWindowPos3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3iv(v); -} - -void gl3_0_glWindowPos3i(void *_glfuncs, GLint x, GLint y, GLint z) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3i(x, y, z); -} - -void gl3_0_glWindowPos3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3fv(v); -} - -void gl3_0_glWindowPos3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3f(x, y, z); -} - -void gl3_0_glWindowPos3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3dv(v); -} - -void gl3_0_glWindowPos3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3d(x, y, z); -} - -void gl3_0_glWindowPos2sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2sv(v); -} - -void gl3_0_glWindowPos2s(void *_glfuncs, GLshort x, GLshort y) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2s(x, y); -} - -void gl3_0_glWindowPos2iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2iv(v); -} - -void gl3_0_glWindowPos2i(void *_glfuncs, GLint x, GLint y) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2i(x, y); -} - -void gl3_0_glWindowPos2fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2fv(v); -} - -void gl3_0_glWindowPos2f(void *_glfuncs, GLfloat x, GLfloat y) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2f(x, y); -} - -void gl3_0_glWindowPos2dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2dv(v); -} - -void gl3_0_glWindowPos2d(void *_glfuncs, GLdouble x, GLdouble y) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2d(x, y); -} - -void gl3_0_glSecondaryColorPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColorPointer(size, gltype, stride, pointer); -} - -void gl3_0_glSecondaryColor3usv(void *_glfuncs, const GLushort* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3usv(v); -} - -void gl3_0_glSecondaryColor3us(void *_glfuncs, GLushort red, GLushort green, GLushort blue) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3us(red, green, blue); -} - -void gl3_0_glSecondaryColor3uiv(void *_glfuncs, const GLuint* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3uiv(v); -} - -void gl3_0_glSecondaryColor3ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3ui(red, green, blue); -} - -void gl3_0_glSecondaryColor3ubv(void *_glfuncs, const GLubyte* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3ubv(v); -} - -void gl3_0_glSecondaryColor3ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3ub(red, green, blue); -} - -void gl3_0_glSecondaryColor3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3sv(v); -} - -void gl3_0_glSecondaryColor3s(void *_glfuncs, GLshort red, GLshort green, GLshort blue) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3s(red, green, blue); -} - -void gl3_0_glSecondaryColor3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3iv(v); -} - -void gl3_0_glSecondaryColor3i(void *_glfuncs, GLint red, GLint green, GLint blue) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3i(red, green, blue); -} - -void gl3_0_glSecondaryColor3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3fv(v); -} - -void gl3_0_glSecondaryColor3f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3f(red, green, blue); -} - -void gl3_0_glSecondaryColor3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3dv(v); -} - -void gl3_0_glSecondaryColor3d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3d(red, green, blue); -} - -void gl3_0_glSecondaryColor3bv(void *_glfuncs, const GLbyte* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3bv(v); -} - -void gl3_0_glSecondaryColor3b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3b(red, green, blue); -} - -void gl3_0_glFogCoordPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogCoordPointer(gltype, stride, pointer); -} - -void gl3_0_glFogCoorddv(void *_glfuncs, const GLdouble* coord) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogCoorddv(coord); -} - -void gl3_0_glFogCoordd(void *_glfuncs, GLdouble coord) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogCoordd(coord); -} - -void gl3_0_glFogCoordfv(void *_glfuncs, const GLfloat* coord) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogCoordfv(coord); -} - -void gl3_0_glFogCoordf(void *_glfuncs, GLfloat coord) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogCoordf(coord); -} - -void gl3_0_glVertexAttrib4usv(void *_glfuncs, GLuint index, const GLushort* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4usv(index, v); -} - -void gl3_0_glVertexAttrib4uiv(void *_glfuncs, GLuint index, const GLuint* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4uiv(index, v); -} - -void gl3_0_glVertexAttrib4ubv(void *_glfuncs, GLuint index, const GLubyte* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4ubv(index, v); -} - -void gl3_0_glVertexAttrib4sv(void *_glfuncs, GLuint index, const GLshort* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4sv(index, v); -} - -void gl3_0_glVertexAttrib4s(void *_glfuncs, GLuint index, GLshort x, GLshort y, GLshort z, GLshort w) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4s(index, x, y, z, w); -} - -void gl3_0_glVertexAttrib4iv(void *_glfuncs, GLuint index, const GLint* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4iv(index, v); -} - -void gl3_0_glVertexAttrib4fv(void *_glfuncs, GLuint index, const GLfloat* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4fv(index, v); -} - -void gl3_0_glVertexAttrib4f(void *_glfuncs, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4f(index, x, y, z, w); -} - -void gl3_0_glVertexAttrib4dv(void *_glfuncs, GLuint index, const GLdouble* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4dv(index, v); -} - -void gl3_0_glVertexAttrib4d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4d(index, x, y, z, w); -} - -void gl3_0_glVertexAttrib4bv(void *_glfuncs, GLuint index, const GLbyte* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4bv(index, v); -} - -void gl3_0_glVertexAttrib4Nusv(void *_glfuncs, GLuint index, const GLushort* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4Nusv(index, v); -} - -void gl3_0_glVertexAttrib4Nuiv(void *_glfuncs, GLuint index, const GLuint* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4Nuiv(index, v); -} - -void gl3_0_glVertexAttrib4Nubv(void *_glfuncs, GLuint index, const GLubyte* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4Nubv(index, v); -} - -void gl3_0_glVertexAttrib4Nub(void *_glfuncs, GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4Nub(index, x, y, z, w); -} - -void gl3_0_glVertexAttrib4Nsv(void *_glfuncs, GLuint index, const GLshort* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4Nsv(index, v); -} - -void gl3_0_glVertexAttrib4Niv(void *_glfuncs, GLuint index, const GLint* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4Niv(index, v); -} - -void gl3_0_glVertexAttrib4Nbv(void *_glfuncs, GLuint index, const GLbyte* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4Nbv(index, v); -} - -void gl3_0_glVertexAttrib3sv(void *_glfuncs, GLuint index, const GLshort* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib3sv(index, v); -} - -void gl3_0_glVertexAttrib3s(void *_glfuncs, GLuint index, GLshort x, GLshort y, GLshort z) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib3s(index, x, y, z); -} - -void gl3_0_glVertexAttrib3fv(void *_glfuncs, GLuint index, const GLfloat* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib3fv(index, v); -} - -void gl3_0_glVertexAttrib3f(void *_glfuncs, GLuint index, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib3f(index, x, y, z); -} - -void gl3_0_glVertexAttrib3dv(void *_glfuncs, GLuint index, const GLdouble* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib3dv(index, v); -} - -void gl3_0_glVertexAttrib3d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib3d(index, x, y, z); -} - -void gl3_0_glVertexAttrib2sv(void *_glfuncs, GLuint index, const GLshort* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib2sv(index, v); -} - -void gl3_0_glVertexAttrib2s(void *_glfuncs, GLuint index, GLshort x, GLshort y) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib2s(index, x, y); -} - -void gl3_0_glVertexAttrib2fv(void *_glfuncs, GLuint index, const GLfloat* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib2fv(index, v); -} - -void gl3_0_glVertexAttrib2f(void *_glfuncs, GLuint index, GLfloat x, GLfloat y) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib2f(index, x, y); -} - -void gl3_0_glVertexAttrib2dv(void *_glfuncs, GLuint index, const GLdouble* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib2dv(index, v); -} - -void gl3_0_glVertexAttrib2d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib2d(index, x, y); -} - -void gl3_0_glVertexAttrib1sv(void *_glfuncs, GLuint index, const GLshort* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib1sv(index, v); -} - -void gl3_0_glVertexAttrib1s(void *_glfuncs, GLuint index, GLshort x) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib1s(index, x); -} - -void gl3_0_glVertexAttrib1fv(void *_glfuncs, GLuint index, const GLfloat* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib1fv(index, v); -} - -void gl3_0_glVertexAttrib1f(void *_glfuncs, GLuint index, GLfloat x) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib1f(index, x); -} - -void gl3_0_glVertexAttrib1dv(void *_glfuncs, GLuint index, const GLdouble* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib1dv(index, v); -} - -void gl3_0_glVertexAttrib1d(void *_glfuncs, GLuint index, GLdouble x) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib1d(index, x); -} - -void gl3_0_glVertexAttribI4usv(void *_glfuncs, GLuint index, const GLushort* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI4usv(index, v); -} - -void gl3_0_glVertexAttribI4ubv(void *_glfuncs, GLuint index, const GLubyte* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI4ubv(index, v); -} - -void gl3_0_glVertexAttribI4sv(void *_glfuncs, GLuint index, const GLshort* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI4sv(index, v); -} - -void gl3_0_glVertexAttribI4bv(void *_glfuncs, GLuint index, const GLbyte* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI4bv(index, v); -} - -void gl3_0_glVertexAttribI4uiv(void *_glfuncs, GLuint index, const GLuint* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI4uiv(index, v); -} - -void gl3_0_glVertexAttribI3uiv(void *_glfuncs, GLuint index, const GLuint* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI3uiv(index, v); -} - -void gl3_0_glVertexAttribI2uiv(void *_glfuncs, GLuint index, const GLuint* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI2uiv(index, v); -} - -void gl3_0_glVertexAttribI1uiv(void *_glfuncs, GLuint index, const GLuint* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI1uiv(index, v); -} - -void gl3_0_glVertexAttribI4iv(void *_glfuncs, GLuint index, const GLint* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI4iv(index, v); -} - -void gl3_0_glVertexAttribI3iv(void *_glfuncs, GLuint index, const GLint* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI3iv(index, v); -} - -void gl3_0_glVertexAttribI2iv(void *_glfuncs, GLuint index, const GLint* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI2iv(index, v); -} - -void gl3_0_glVertexAttribI1iv(void *_glfuncs, GLuint index, const GLint* v) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI1iv(index, v); -} - -void gl3_0_glVertexAttribI4ui(void *_glfuncs, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI4ui(index, x, y, z, w); -} - -void gl3_0_glVertexAttribI3ui(void *_glfuncs, GLuint index, GLuint x, GLuint y, GLuint z) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI3ui(index, x, y, z); -} - -void gl3_0_glVertexAttribI2ui(void *_glfuncs, GLuint index, GLuint x, GLuint y) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI2ui(index, x, y); -} - -void gl3_0_glVertexAttribI1ui(void *_glfuncs, GLuint index, GLuint x) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI1ui(index, x); -} - -void gl3_0_glVertexAttribI4i(void *_glfuncs, GLuint index, GLint x, GLint y, GLint z, GLint w) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI4i(index, x, y, z, w); -} - -void gl3_0_glVertexAttribI3i(void *_glfuncs, GLuint index, GLint x, GLint y, GLint z) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI3i(index, x, y, z); -} - -void gl3_0_glVertexAttribI2i(void *_glfuncs, GLuint index, GLint x, GLint y) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI2i(index, x, y); -} - -void gl3_0_glVertexAttribI1i(void *_glfuncs, GLuint index, GLint x) -{ - QOpenGLFunctions_3_0* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI1i(index, x); -} - diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/3.0/funcs.h b/Godeps/_workspace/src/github.com/obscuren/qml/gl/3.0/funcs.h deleted file mode 100644 index 81db33a9b8..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/3.0/funcs.h +++ /dev/null @@ -1,700 +0,0 @@ - -// ** file automatically generated by glgen -- do not edit manually ** - -#ifndef __cplusplus -#include -#include -typedef unsigned int GLenum; -typedef unsigned char GLboolean; -typedef unsigned int GLbitfield; -typedef void GLvoid; -typedef char GLchar; -typedef signed char GLbyte; /* 1-byte signed */ -typedef short GLshort; /* 2-byte signed */ -typedef int GLint; /* 4-byte signed */ -typedef unsigned char GLubyte; /* 1-byte unsigned */ -typedef unsigned short GLushort; /* 2-byte unsigned */ -typedef unsigned int GLuint; /* 4-byte unsigned */ -typedef int GLsizei; /* 4-byte signed */ -typedef float GLfloat; /* single precision float */ -typedef float GLclampf; /* single precision float in [0,1] */ -typedef double GLdouble; /* double precision float */ -typedef double GLclampd; /* double precision float in [0,1] */ -typedef int64_t GLint64; -typedef uint64_t GLuint64; -typedef ptrdiff_t GLintptr; -typedef ptrdiff_t GLsizeiptr; -typedef ptrdiff_t GLintptrARB; -typedef ptrdiff_t GLsizeiptrARB; -typedef struct __GLsync *GLsync; -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -void *gl3_0_funcs(); - -void gl3_0_glViewport(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height); -void gl3_0_glDepthRange(void *_glfuncs, GLdouble nearVal, GLdouble farVal); -GLboolean gl3_0_glIsEnabled(void *_glfuncs, GLenum cap); -void gl3_0_glGetTexLevelParameteriv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLint* params); -void gl3_0_glGetTexLevelParameterfv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLfloat* params); -void gl3_0_glGetTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl3_0_glGetTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl3_0_glGetTexImage(void *_glfuncs, GLenum target, GLint level, GLenum format, GLenum gltype, GLvoid* pixels); -void gl3_0_glGetIntegerv(void *_glfuncs, GLenum pname, GLint* params); -void gl3_0_glGetFloatv(void *_glfuncs, GLenum pname, GLfloat* params); -GLenum gl3_0_glGetError(void *_glfuncs); -void gl3_0_glGetDoublev(void *_glfuncs, GLenum pname, GLdouble* params); -void gl3_0_glGetBooleanv(void *_glfuncs, GLenum pname, GLboolean* params); -void gl3_0_glReadPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum gltype, GLvoid* pixels); -void gl3_0_glReadBuffer(void *_glfuncs, GLenum mode); -void gl3_0_glPixelStorei(void *_glfuncs, GLenum pname, GLint param); -void gl3_0_glPixelStoref(void *_glfuncs, GLenum pname, GLfloat param); -void gl3_0_glDepthFunc(void *_glfuncs, GLenum glfunc); -void gl3_0_glStencilOp(void *_glfuncs, GLenum fail, GLenum zfail, GLenum zpass); -void gl3_0_glStencilFunc(void *_glfuncs, GLenum glfunc, GLint ref, GLuint mask); -void gl3_0_glLogicOp(void *_glfuncs, GLenum opcode); -void gl3_0_glBlendFunc(void *_glfuncs, GLenum sfactor, GLenum dfactor); -void gl3_0_glFlush(void *_glfuncs); -void gl3_0_glFinish(void *_glfuncs); -void gl3_0_glEnable(void *_glfuncs, GLenum cap); -void gl3_0_glDisable(void *_glfuncs, GLenum cap); -void gl3_0_glDepthMask(void *_glfuncs, GLboolean flag); -void gl3_0_glColorMask(void *_glfuncs, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); -void gl3_0_glStencilMask(void *_glfuncs, GLuint mask); -void gl3_0_glClearDepth(void *_glfuncs, GLdouble depth); -void gl3_0_glClearStencil(void *_glfuncs, GLint s); -void gl3_0_glClearColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl3_0_glClear(void *_glfuncs, GLbitfield mask); -void gl3_0_glDrawBuffer(void *_glfuncs, GLenum mode); -void gl3_0_glTexImage2D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl3_0_glTexImage1D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl3_0_glTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl3_0_glTexParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint param); -void gl3_0_glTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params); -void gl3_0_glTexParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param); -void gl3_0_glScissor(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height); -void gl3_0_glPolygonMode(void *_glfuncs, GLenum face, GLenum mode); -void gl3_0_glPointSize(void *_glfuncs, GLfloat size); -void gl3_0_glLineWidth(void *_glfuncs, GLfloat width); -void gl3_0_glHint(void *_glfuncs, GLenum target, GLenum mode); -void gl3_0_glFrontFace(void *_glfuncs, GLenum mode); -void gl3_0_glCullFace(void *_glfuncs, GLenum mode); -void gl3_0_glIndexubv(void *_glfuncs, const GLubyte* c); -void gl3_0_glIndexub(void *_glfuncs, GLubyte c); -GLboolean gl3_0_glIsTexture(void *_glfuncs, GLuint texture); -void gl3_0_glGenTextures(void *_glfuncs, GLsizei n, GLuint* textures); -void gl3_0_glDeleteTextures(void *_glfuncs, GLsizei n, const GLuint* textures); -void gl3_0_glBindTexture(void *_glfuncs, GLenum target, GLuint texture); -void gl3_0_glTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl3_0_glTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl3_0_glCopyTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -void gl3_0_glCopyTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -void gl3_0_glCopyTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -void gl3_0_glCopyTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border); -void gl3_0_glPolygonOffset(void *_glfuncs, GLfloat factor, GLfloat units); -void gl3_0_glDrawElements(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices); -void gl3_0_glDrawArrays(void *_glfuncs, GLenum mode, GLint first, GLsizei count); -void gl3_0_glCopyTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -void gl3_0_glTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl3_0_glTexImage3D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl3_0_glDrawRangeElements(void *_glfuncs, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum gltype, const GLvoid* indices); -void gl3_0_glBlendEquation(void *_glfuncs, GLenum mode); -void gl3_0_glBlendColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl3_0_glGetCompressedTexImage(void *_glfuncs, GLenum target, GLint level, GLvoid* img); -void gl3_0_glCompressedTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid* data); -void gl3_0_glCompressedTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data); -void gl3_0_glCompressedTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data); -void gl3_0_glCompressedTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid* data); -void gl3_0_glCompressedTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data); -void gl3_0_glCompressedTexImage3D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data); -void gl3_0_glSampleCoverage(void *_glfuncs, GLfloat value, GLboolean invert); -void gl3_0_glActiveTexture(void *_glfuncs, GLenum texture); -void gl3_0_glPointParameteriv(void *_glfuncs, GLenum pname, const GLint* params); -void gl3_0_glPointParameteri(void *_glfuncs, GLenum pname, GLint param); -void gl3_0_glPointParameterfv(void *_glfuncs, GLenum pname, const GLfloat* params); -void gl3_0_glPointParameterf(void *_glfuncs, GLenum pname, GLfloat param); -void gl3_0_glMultiDrawArrays(void *_glfuncs, GLenum mode, const GLint* first, const GLsizei* count, GLsizei drawcount); -void gl3_0_glBlendFuncSeparate(void *_glfuncs, GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -void gl3_0_glGetBufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -GLboolean gl3_0_glUnmapBuffer(void *_glfuncs, GLenum target); -void gl3_0_glGetBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, GLvoid* data); -void gl3_0_glBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data); -void gl3_0_glBufferData(void *_glfuncs, GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage); -GLboolean gl3_0_glIsBuffer(void *_glfuncs, GLuint buffer); -void gl3_0_glGenBuffers(void *_glfuncs, GLsizei n, GLuint* buffers); -void gl3_0_glDeleteBuffers(void *_glfuncs, GLsizei n, const GLuint* buffers); -void gl3_0_glBindBuffer(void *_glfuncs, GLenum target, GLuint buffer); -void gl3_0_glGetQueryObjectuiv(void *_glfuncs, GLuint id, GLenum pname, GLuint* params); -void gl3_0_glGetQueryObjectiv(void *_glfuncs, GLuint id, GLenum pname, GLint* params); -void gl3_0_glGetQueryiv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl3_0_glEndQuery(void *_glfuncs, GLenum target); -void gl3_0_glBeginQuery(void *_glfuncs, GLenum target, GLuint id); -GLboolean gl3_0_glIsQuery(void *_glfuncs, GLuint id); -void gl3_0_glDeleteQueries(void *_glfuncs, GLsizei n, const GLuint* ids); -void gl3_0_glGenQueries(void *_glfuncs, GLsizei n, GLuint* ids); -void gl3_0_glVertexAttribPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLboolean normalized, GLsizei stride, const GLvoid* offset); -void gl3_0_glValidateProgram(void *_glfuncs, GLuint program); -void gl3_0_glUniformMatrix4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl3_0_glUniformMatrix3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl3_0_glUniformMatrix2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl3_0_glUniform4iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gl3_0_glUniform3iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gl3_0_glUniform2iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gl3_0_glUniform1iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gl3_0_glUniform4fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gl3_0_glUniform3fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gl3_0_glUniform2fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gl3_0_glUniform1fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gl3_0_glUniform4i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -void gl3_0_glUniform3i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2); -void gl3_0_glUniform2i(void *_glfuncs, GLint location, GLint v0, GLint v1); -void gl3_0_glUniform1i(void *_glfuncs, GLint location, GLint v0); -void gl3_0_glUniform4f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -void gl3_0_glUniform3f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -void gl3_0_glUniform2f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1); -void gl3_0_glUniform1f(void *_glfuncs, GLint location, GLfloat v0); -void gl3_0_glUseProgram(void *_glfuncs, GLuint program); -void gl3_0_glShaderSource(void *_glfuncs, GLuint shader, GLsizei count, const GLchar** source, const GLint* length); -void gl3_0_glLinkProgram(void *_glfuncs, GLuint program); -GLboolean gl3_0_glIsShader(void *_glfuncs, GLuint shader); -GLboolean gl3_0_glIsProgram(void *_glfuncs, GLuint program); -void gl3_0_glGetVertexAttribiv(void *_glfuncs, GLuint index, GLenum pname, GLint* params); -void gl3_0_glGetVertexAttribfv(void *_glfuncs, GLuint index, GLenum pname, GLfloat* params); -void gl3_0_glGetVertexAttribdv(void *_glfuncs, GLuint index, GLenum pname, GLdouble* params); -void gl3_0_glGetUniformiv(void *_glfuncs, GLuint program, GLint location, GLint* params); -void gl3_0_glGetUniformfv(void *_glfuncs, GLuint program, GLint location, GLfloat* params); -GLint gl3_0_glGetUniformLocation(void *_glfuncs, GLuint program, const GLchar* name); -void gl3_0_glGetShaderSource(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* source); -void gl3_0_glGetShaderInfoLog(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* infoLog); -void gl3_0_glGetShaderiv(void *_glfuncs, GLuint shader, GLenum pname, GLint* params); -void gl3_0_glGetProgramInfoLog(void *_glfuncs, GLuint program, GLsizei bufSize, GLsizei* length, GLchar* infoLog); -void gl3_0_glGetProgramiv(void *_glfuncs, GLuint program, GLenum pname, GLint* params); -GLint gl3_0_glGetAttribLocation(void *_glfuncs, GLuint program, const GLchar* name); -void gl3_0_glGetAttachedShaders(void *_glfuncs, GLuint program, GLsizei maxCount, GLsizei* count, GLuint* obj); -void gl3_0_glGetActiveUniform(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name); -void gl3_0_glGetActiveAttrib(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name); -void gl3_0_glEnableVertexAttribArray(void *_glfuncs, GLuint index); -void gl3_0_glDisableVertexAttribArray(void *_glfuncs, GLuint index); -void gl3_0_glDetachShader(void *_glfuncs, GLuint program, GLuint shader); -void gl3_0_glDeleteShader(void *_glfuncs, GLuint shader); -void gl3_0_glDeleteProgram(void *_glfuncs, GLuint program); -GLuint gl3_0_glCreateShader(void *_glfuncs, GLenum gltype); -GLuint gl3_0_glCreateProgram(void *_glfuncs); -void gl3_0_glCompileShader(void *_glfuncs, GLuint shader); -void gl3_0_glBindAttribLocation(void *_glfuncs, GLuint program, GLuint index, const GLchar* name); -void gl3_0_glAttachShader(void *_glfuncs, GLuint program, GLuint shader); -void gl3_0_glStencilMaskSeparate(void *_glfuncs, GLenum face, GLuint mask); -void gl3_0_glStencilFuncSeparate(void *_glfuncs, GLenum face, GLenum glfunc, GLint ref, GLuint mask); -void gl3_0_glStencilOpSeparate(void *_glfuncs, GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); -void gl3_0_glDrawBuffers(void *_glfuncs, GLsizei n, const GLenum* bufs); -void gl3_0_glBlendEquationSeparate(void *_glfuncs, GLenum modeRGB, GLenum modeAlpha); -void gl3_0_glUniformMatrix4x3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl3_0_glUniformMatrix3x4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl3_0_glUniformMatrix4x2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl3_0_glUniformMatrix2x4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl3_0_glUniformMatrix3x2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl3_0_glUniformMatrix2x3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -GLboolean gl3_0_glIsVertexArray(void *_glfuncs, GLuint array); -void gl3_0_glGenVertexArrays(void *_glfuncs, GLsizei n, GLuint* arrays); -void gl3_0_glDeleteVertexArrays(void *_glfuncs, GLsizei n, const GLuint* arrays); -void gl3_0_glBindVertexArray(void *_glfuncs, GLuint array); -void gl3_0_glFlushMappedBufferRange(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr length); -void gl3_0_glFramebufferTextureLayer(void *_glfuncs, GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); -void gl3_0_glRenderbufferStorageMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height); -void gl3_0_glBlitFramebuffer(void *_glfuncs, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -void gl3_0_glGenerateMipmap(void *_glfuncs, GLenum target); -void gl3_0_glGetFramebufferAttachmentParameteriv(void *_glfuncs, GLenum target, GLenum attachment, GLenum pname, GLint* params); -void gl3_0_glFramebufferRenderbuffer(void *_glfuncs, GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -void gl3_0_glFramebufferTexture3D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -void gl3_0_glFramebufferTexture2D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -void gl3_0_glFramebufferTexture1D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLenum gl3_0_glCheckFramebufferStatus(void *_glfuncs, GLenum target); -void gl3_0_glGenFramebuffers(void *_glfuncs, GLsizei n, GLuint* framebuffers); -void gl3_0_glDeleteFramebuffers(void *_glfuncs, GLsizei n, const GLuint* framebuffers); -void gl3_0_glBindFramebuffer(void *_glfuncs, GLenum target, GLuint framebuffer); -GLboolean gl3_0_glIsFramebuffer(void *_glfuncs, GLuint framebuffer); -void gl3_0_glGetRenderbufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl3_0_glRenderbufferStorage(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height); -void gl3_0_glGenRenderbuffers(void *_glfuncs, GLsizei n, GLuint* renderbuffers); -void gl3_0_glDeleteRenderbuffers(void *_glfuncs, GLsizei n, const GLuint* renderbuffers); -void gl3_0_glBindRenderbuffer(void *_glfuncs, GLenum target, GLuint renderbuffer); -GLboolean gl3_0_glIsRenderbuffer(void *_glfuncs, GLuint renderbuffer); -void gl3_0_glClearBufferfi(void *_glfuncs, GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); -void gl3_0_glClearBufferfv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLfloat* value); -void gl3_0_glClearBufferuiv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLuint* value); -void gl3_0_glClearBufferiv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLint* value); -void gl3_0_glGetTexParameterIuiv(void *_glfuncs, GLenum target, GLenum pname, GLuint* params); -void gl3_0_glGetTexParameterIiv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl3_0_glTexParameterIuiv(void *_glfuncs, GLenum target, GLenum pname, const GLuint* params); -void gl3_0_glTexParameterIiv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl3_0_glUniform4uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value); -void gl3_0_glUniform3uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value); -void gl3_0_glUniform2uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value); -void gl3_0_glUniform1uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value); -void gl3_0_glUniform4ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -void gl3_0_glUniform3ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1, GLuint v2); -void gl3_0_glUniform2ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1); -void gl3_0_glUniform1ui(void *_glfuncs, GLint location, GLuint v0); -GLint gl3_0_glGetFragDataLocation(void *_glfuncs, GLuint program, const GLchar* name); -void gl3_0_glBindFragDataLocation(void *_glfuncs, GLuint program, GLuint color, const GLchar* name); -void gl3_0_glGetUniformuiv(void *_glfuncs, GLuint program, GLint location, GLuint* params); -void gl3_0_glGetVertexAttribIuiv(void *_glfuncs, GLuint index, GLenum pname, GLuint* params); -void gl3_0_glGetVertexAttribIiv(void *_glfuncs, GLuint index, GLenum pname, GLint* params); -void gl3_0_glVertexAttribIPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl3_0_glEndConditionalRender(void *_glfuncs); -void gl3_0_glBeginConditionalRender(void *_glfuncs, GLuint id, GLenum mode); -void gl3_0_glClampColor(void *_glfuncs, GLenum target, GLenum clamp); -void gl3_0_glGetTransformFeedbackVarying(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* gltype, GLchar* name); -void gl3_0_glBindBufferBase(void *_glfuncs, GLenum target, GLuint index, GLuint buffer); -void gl3_0_glBindBufferRange(void *_glfuncs, GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -void gl3_0_glEndTransformFeedback(void *_glfuncs); -void gl3_0_glBeginTransformFeedback(void *_glfuncs, GLenum primitiveMode); -GLboolean gl3_0_glIsEnabledi(void *_glfuncs, GLenum target, GLuint index); -void gl3_0_glDisablei(void *_glfuncs, GLenum target, GLuint index); -void gl3_0_glEnablei(void *_glfuncs, GLenum target, GLuint index); -void gl3_0_glGetIntegeri_v(void *_glfuncs, GLenum target, GLuint index, GLint* data); -void gl3_0_glGetBooleani_v(void *_glfuncs, GLenum target, GLuint index, GLboolean* data); -void gl3_0_glColorMaski(void *_glfuncs, GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); -void gl3_0_glTranslatef(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl3_0_glTranslated(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl3_0_glScalef(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl3_0_glScaled(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl3_0_glRotatef(void *_glfuncs, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); -void gl3_0_glRotated(void *_glfuncs, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); -void gl3_0_glPushMatrix(void *_glfuncs); -void gl3_0_glPopMatrix(void *_glfuncs); -void gl3_0_glOrtho(void *_glfuncs, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -void gl3_0_glMultMatrixd(void *_glfuncs, const GLdouble* m); -void gl3_0_glMultMatrixf(void *_glfuncs, const GLfloat* m); -void gl3_0_glMatrixMode(void *_glfuncs, GLenum mode); -void gl3_0_glLoadMatrixd(void *_glfuncs, const GLdouble* m); -void gl3_0_glLoadMatrixf(void *_glfuncs, const GLfloat* m); -void gl3_0_glLoadIdentity(void *_glfuncs); -void gl3_0_glFrustum(void *_glfuncs, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -GLboolean gl3_0_glIsList(void *_glfuncs, GLuint list); -void gl3_0_glGetTexGeniv(void *_glfuncs, GLenum coord, GLenum pname, GLint* params); -void gl3_0_glGetTexGenfv(void *_glfuncs, GLenum coord, GLenum pname, GLfloat* params); -void gl3_0_glGetTexGendv(void *_glfuncs, GLenum coord, GLenum pname, GLdouble* params); -void gl3_0_glGetTexEnviv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl3_0_glGetTexEnvfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl3_0_glGetPolygonStipple(void *_glfuncs, GLubyte* mask); -void gl3_0_glGetPixelMapusv(void *_glfuncs, GLenum glmap, GLushort* values); -void gl3_0_glGetPixelMapuiv(void *_glfuncs, GLenum glmap, GLuint* values); -void gl3_0_glGetPixelMapfv(void *_glfuncs, GLenum glmap, GLfloat* values); -void gl3_0_glGetMaterialiv(void *_glfuncs, GLenum face, GLenum pname, GLint* params); -void gl3_0_glGetMaterialfv(void *_glfuncs, GLenum face, GLenum pname, GLfloat* params); -void gl3_0_glGetMapiv(void *_glfuncs, GLenum target, GLenum query, GLint* v); -void gl3_0_glGetMapfv(void *_glfuncs, GLenum target, GLenum query, GLfloat* v); -void gl3_0_glGetMapdv(void *_glfuncs, GLenum target, GLenum query, GLdouble* v); -void gl3_0_glGetLightiv(void *_glfuncs, GLenum light, GLenum pname, GLint* params); -void gl3_0_glGetLightfv(void *_glfuncs, GLenum light, GLenum pname, GLfloat* params); -void gl3_0_glGetClipPlane(void *_glfuncs, GLenum plane, GLdouble* equation); -void gl3_0_glDrawPixels(void *_glfuncs, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl3_0_glCopyPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum gltype); -void gl3_0_glPixelMapusv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLushort* values); -void gl3_0_glPixelMapuiv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLuint* values); -void gl3_0_glPixelMapfv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLfloat* values); -void gl3_0_glPixelTransferi(void *_glfuncs, GLenum pname, GLint param); -void gl3_0_glPixelTransferf(void *_glfuncs, GLenum pname, GLfloat param); -void gl3_0_glPixelZoom(void *_glfuncs, GLfloat xfactor, GLfloat yfactor); -void gl3_0_glAlphaFunc(void *_glfuncs, GLenum glfunc, GLfloat ref); -void gl3_0_glEvalPoint2(void *_glfuncs, GLint i, GLint j); -void gl3_0_glEvalMesh2(void *_glfuncs, GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2); -void gl3_0_glEvalPoint1(void *_glfuncs, GLint i); -void gl3_0_glEvalMesh1(void *_glfuncs, GLenum mode, GLint i1, GLint i2); -void gl3_0_glEvalCoord2fv(void *_glfuncs, const GLfloat* u); -void gl3_0_glEvalCoord2f(void *_glfuncs, GLfloat u, GLfloat v); -void gl3_0_glEvalCoord2dv(void *_glfuncs, const GLdouble* u); -void gl3_0_glEvalCoord2d(void *_glfuncs, GLdouble u, GLdouble v); -void gl3_0_glEvalCoord1fv(void *_glfuncs, const GLfloat* u); -void gl3_0_glEvalCoord1f(void *_glfuncs, GLfloat u); -void gl3_0_glEvalCoord1dv(void *_glfuncs, const GLdouble* u); -void gl3_0_glEvalCoord1d(void *_glfuncs, GLdouble u); -void gl3_0_glMapGrid2f(void *_glfuncs, GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2); -void gl3_0_glMapGrid2d(void *_glfuncs, GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2); -void gl3_0_glMapGrid1f(void *_glfuncs, GLint un, GLfloat u1, GLfloat u2); -void gl3_0_glMapGrid1d(void *_glfuncs, GLint un, GLdouble u1, GLdouble u2); -void gl3_0_glMap2f(void *_glfuncs, GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat* points); -void gl3_0_glMap2d(void *_glfuncs, GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble* points); -void gl3_0_glMap1f(void *_glfuncs, GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat* points); -void gl3_0_glMap1d(void *_glfuncs, GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble* points); -void gl3_0_glPushAttrib(void *_glfuncs, GLbitfield mask); -void gl3_0_glPopAttrib(void *_glfuncs); -void gl3_0_glAccum(void *_glfuncs, GLenum op, GLfloat value); -void gl3_0_glIndexMask(void *_glfuncs, GLuint mask); -void gl3_0_glClearIndex(void *_glfuncs, GLfloat c); -void gl3_0_glClearAccum(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl3_0_glPushName(void *_glfuncs, GLuint name); -void gl3_0_glPopName(void *_glfuncs); -void gl3_0_glPassThrough(void *_glfuncs, GLfloat token); -void gl3_0_glLoadName(void *_glfuncs, GLuint name); -void gl3_0_glInitNames(void *_glfuncs); -GLint gl3_0_glRenderMode(void *_glfuncs, GLenum mode); -void gl3_0_glSelectBuffer(void *_glfuncs, GLsizei size, GLuint* buffer); -void gl3_0_glFeedbackBuffer(void *_glfuncs, GLsizei size, GLenum gltype, GLfloat* buffer); -void gl3_0_glTexGeniv(void *_glfuncs, GLenum coord, GLenum pname, const GLint* params); -void gl3_0_glTexGeni(void *_glfuncs, GLenum coord, GLenum pname, GLint param); -void gl3_0_glTexGenfv(void *_glfuncs, GLenum coord, GLenum pname, const GLfloat* params); -void gl3_0_glTexGenf(void *_glfuncs, GLenum coord, GLenum pname, GLfloat param); -void gl3_0_glTexGendv(void *_glfuncs, GLenum coord, GLenum pname, const GLdouble* params); -void gl3_0_glTexGend(void *_glfuncs, GLenum coord, GLenum pname, GLdouble param); -void gl3_0_glTexEnviv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl3_0_glTexEnvi(void *_glfuncs, GLenum target, GLenum pname, GLint param); -void gl3_0_glTexEnvfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params); -void gl3_0_glTexEnvf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param); -void gl3_0_glShadeModel(void *_glfuncs, GLenum mode); -void gl3_0_glPolygonStipple(void *_glfuncs, const GLubyte* mask); -void gl3_0_glMaterialiv(void *_glfuncs, GLenum face, GLenum pname, const GLint* params); -void gl3_0_glMateriali(void *_glfuncs, GLenum face, GLenum pname, GLint param); -void gl3_0_glMaterialfv(void *_glfuncs, GLenum face, GLenum pname, const GLfloat* params); -void gl3_0_glMaterialf(void *_glfuncs, GLenum face, GLenum pname, GLfloat param); -void gl3_0_glLineStipple(void *_glfuncs, GLint factor, GLushort pattern); -void gl3_0_glLightModeliv(void *_glfuncs, GLenum pname, const GLint* params); -void gl3_0_glLightModeli(void *_glfuncs, GLenum pname, GLint param); -void gl3_0_glLightModelfv(void *_glfuncs, GLenum pname, const GLfloat* params); -void gl3_0_glLightModelf(void *_glfuncs, GLenum pname, GLfloat param); -void gl3_0_glLightiv(void *_glfuncs, GLenum light, GLenum pname, const GLint* params); -void gl3_0_glLighti(void *_glfuncs, GLenum light, GLenum pname, GLint param); -void gl3_0_glLightfv(void *_glfuncs, GLenum light, GLenum pname, const GLfloat* params); -void gl3_0_glLightf(void *_glfuncs, GLenum light, GLenum pname, GLfloat param); -void gl3_0_glFogiv(void *_glfuncs, GLenum pname, const GLint* params); -void gl3_0_glFogi(void *_glfuncs, GLenum pname, GLint param); -void gl3_0_glFogfv(void *_glfuncs, GLenum pname, const GLfloat* params); -void gl3_0_glFogf(void *_glfuncs, GLenum pname, GLfloat param); -void gl3_0_glColorMaterial(void *_glfuncs, GLenum face, GLenum mode); -void gl3_0_glClipPlane(void *_glfuncs, GLenum plane, const GLdouble* equation); -void gl3_0_glVertex4sv(void *_glfuncs, const GLshort* v); -void gl3_0_glVertex4s(void *_glfuncs, GLshort x, GLshort y, GLshort z, GLshort w); -void gl3_0_glVertex4iv(void *_glfuncs, const GLint* v); -void gl3_0_glVertex4i(void *_glfuncs, GLint x, GLint y, GLint z, GLint w); -void gl3_0_glVertex4fv(void *_glfuncs, const GLfloat* v); -void gl3_0_glVertex4f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -void gl3_0_glVertex4dv(void *_glfuncs, const GLdouble* v); -void gl3_0_glVertex4d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -void gl3_0_glVertex3sv(void *_glfuncs, const GLshort* v); -void gl3_0_glVertex3s(void *_glfuncs, GLshort x, GLshort y, GLshort z); -void gl3_0_glVertex3iv(void *_glfuncs, const GLint* v); -void gl3_0_glVertex3i(void *_glfuncs, GLint x, GLint y, GLint z); -void gl3_0_glVertex3fv(void *_glfuncs, const GLfloat* v); -void gl3_0_glVertex3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl3_0_glVertex3dv(void *_glfuncs, const GLdouble* v); -void gl3_0_glVertex3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl3_0_glVertex2sv(void *_glfuncs, const GLshort* v); -void gl3_0_glVertex2s(void *_glfuncs, GLshort x, GLshort y); -void gl3_0_glVertex2iv(void *_glfuncs, const GLint* v); -void gl3_0_glVertex2i(void *_glfuncs, GLint x, GLint y); -void gl3_0_glVertex2fv(void *_glfuncs, const GLfloat* v); -void gl3_0_glVertex2f(void *_glfuncs, GLfloat x, GLfloat y); -void gl3_0_glVertex2dv(void *_glfuncs, const GLdouble* v); -void gl3_0_glVertex2d(void *_glfuncs, GLdouble x, GLdouble y); -void gl3_0_glTexCoord4sv(void *_glfuncs, const GLshort* v); -void gl3_0_glTexCoord4s(void *_glfuncs, GLshort s, GLshort t, GLshort r, GLshort q); -void gl3_0_glTexCoord4iv(void *_glfuncs, const GLint* v); -void gl3_0_glTexCoord4i(void *_glfuncs, GLint s, GLint t, GLint r, GLint q); -void gl3_0_glTexCoord4fv(void *_glfuncs, const GLfloat* v); -void gl3_0_glTexCoord4f(void *_glfuncs, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -void gl3_0_glTexCoord4dv(void *_glfuncs, const GLdouble* v); -void gl3_0_glTexCoord4d(void *_glfuncs, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -void gl3_0_glTexCoord3sv(void *_glfuncs, const GLshort* v); -void gl3_0_glTexCoord3s(void *_glfuncs, GLshort s, GLshort t, GLshort r); -void gl3_0_glTexCoord3iv(void *_glfuncs, const GLint* v); -void gl3_0_glTexCoord3i(void *_glfuncs, GLint s, GLint t, GLint r); -void gl3_0_glTexCoord3fv(void *_glfuncs, const GLfloat* v); -void gl3_0_glTexCoord3f(void *_glfuncs, GLfloat s, GLfloat t, GLfloat r); -void gl3_0_glTexCoord3dv(void *_glfuncs, const GLdouble* v); -void gl3_0_glTexCoord3d(void *_glfuncs, GLdouble s, GLdouble t, GLdouble r); -void gl3_0_glTexCoord2sv(void *_glfuncs, const GLshort* v); -void gl3_0_glTexCoord2s(void *_glfuncs, GLshort s, GLshort t); -void gl3_0_glTexCoord2iv(void *_glfuncs, const GLint* v); -void gl3_0_glTexCoord2i(void *_glfuncs, GLint s, GLint t); -void gl3_0_glTexCoord2fv(void *_glfuncs, const GLfloat* v); -void gl3_0_glTexCoord2f(void *_glfuncs, GLfloat s, GLfloat t); -void gl3_0_glTexCoord2dv(void *_glfuncs, const GLdouble* v); -void gl3_0_glTexCoord2d(void *_glfuncs, GLdouble s, GLdouble t); -void gl3_0_glTexCoord1sv(void *_glfuncs, const GLshort* v); -void gl3_0_glTexCoord1s(void *_glfuncs, GLshort s); -void gl3_0_glTexCoord1iv(void *_glfuncs, const GLint* v); -void gl3_0_glTexCoord1i(void *_glfuncs, GLint s); -void gl3_0_glTexCoord1fv(void *_glfuncs, const GLfloat* v); -void gl3_0_glTexCoord1f(void *_glfuncs, GLfloat s); -void gl3_0_glTexCoord1dv(void *_glfuncs, const GLdouble* v); -void gl3_0_glTexCoord1d(void *_glfuncs, GLdouble s); -void gl3_0_glRectsv(void *_glfuncs, const GLshort* v1, const GLshort* v2); -void gl3_0_glRects(void *_glfuncs, GLshort x1, GLshort y1, GLshort x2, GLshort y2); -void gl3_0_glRectiv(void *_glfuncs, const GLint* v1, const GLint* v2); -void gl3_0_glRecti(void *_glfuncs, GLint x1, GLint y1, GLint x2, GLint y2); -void gl3_0_glRectfv(void *_glfuncs, const GLfloat* v1, const GLfloat* v2); -void gl3_0_glRectf(void *_glfuncs, GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2); -void gl3_0_glRectdv(void *_glfuncs, const GLdouble* v1, const GLdouble* v2); -void gl3_0_glRectd(void *_glfuncs, GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2); -void gl3_0_glRasterPos4sv(void *_glfuncs, const GLshort* v); -void gl3_0_glRasterPos4s(void *_glfuncs, GLshort x, GLshort y, GLshort z, GLshort w); -void gl3_0_glRasterPos4iv(void *_glfuncs, const GLint* v); -void gl3_0_glRasterPos4i(void *_glfuncs, GLint x, GLint y, GLint z, GLint w); -void gl3_0_glRasterPos4fv(void *_glfuncs, const GLfloat* v); -void gl3_0_glRasterPos4f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -void gl3_0_glRasterPos4dv(void *_glfuncs, const GLdouble* v); -void gl3_0_glRasterPos4d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -void gl3_0_glRasterPos3sv(void *_glfuncs, const GLshort* v); -void gl3_0_glRasterPos3s(void *_glfuncs, GLshort x, GLshort y, GLshort z); -void gl3_0_glRasterPos3iv(void *_glfuncs, const GLint* v); -void gl3_0_glRasterPos3i(void *_glfuncs, GLint x, GLint y, GLint z); -void gl3_0_glRasterPos3fv(void *_glfuncs, const GLfloat* v); -void gl3_0_glRasterPos3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl3_0_glRasterPos3dv(void *_glfuncs, const GLdouble* v); -void gl3_0_glRasterPos3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl3_0_glRasterPos2sv(void *_glfuncs, const GLshort* v); -void gl3_0_glRasterPos2s(void *_glfuncs, GLshort x, GLshort y); -void gl3_0_glRasterPos2iv(void *_glfuncs, const GLint* v); -void gl3_0_glRasterPos2i(void *_glfuncs, GLint x, GLint y); -void gl3_0_glRasterPos2fv(void *_glfuncs, const GLfloat* v); -void gl3_0_glRasterPos2f(void *_glfuncs, GLfloat x, GLfloat y); -void gl3_0_glRasterPos2dv(void *_glfuncs, const GLdouble* v); -void gl3_0_glRasterPos2d(void *_glfuncs, GLdouble x, GLdouble y); -void gl3_0_glNormal3sv(void *_glfuncs, const GLshort* v); -void gl3_0_glNormal3s(void *_glfuncs, GLshort nx, GLshort ny, GLshort nz); -void gl3_0_glNormal3iv(void *_glfuncs, const GLint* v); -void gl3_0_glNormal3i(void *_glfuncs, GLint nx, GLint ny, GLint nz); -void gl3_0_glNormal3fv(void *_glfuncs, const GLfloat* v); -void gl3_0_glNormal3f(void *_glfuncs, GLfloat nx, GLfloat ny, GLfloat nz); -void gl3_0_glNormal3dv(void *_glfuncs, const GLdouble* v); -void gl3_0_glNormal3d(void *_glfuncs, GLdouble nx, GLdouble ny, GLdouble nz); -void gl3_0_glNormal3bv(void *_glfuncs, const GLbyte* v); -void gl3_0_glNormal3b(void *_glfuncs, GLbyte nx, GLbyte ny, GLbyte nz); -void gl3_0_glIndexsv(void *_glfuncs, const GLshort* c); -void gl3_0_glIndexs(void *_glfuncs, GLshort c); -void gl3_0_glIndexiv(void *_glfuncs, const GLint* c); -void gl3_0_glIndexi(void *_glfuncs, GLint c); -void gl3_0_glIndexfv(void *_glfuncs, const GLfloat* c); -void gl3_0_glIndexf(void *_glfuncs, GLfloat c); -void gl3_0_glIndexdv(void *_glfuncs, const GLdouble* c); -void gl3_0_glIndexd(void *_glfuncs, GLdouble c); -void gl3_0_glEnd(void *_glfuncs); -void gl3_0_glEdgeFlagv(void *_glfuncs, const GLboolean* flag); -void gl3_0_glEdgeFlag(void *_glfuncs, GLboolean flag); -void gl3_0_glColor4usv(void *_glfuncs, const GLushort* v); -void gl3_0_glColor4us(void *_glfuncs, GLushort red, GLushort green, GLushort blue, GLushort alpha); -void gl3_0_glColor4uiv(void *_glfuncs, const GLuint* v); -void gl3_0_glColor4ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue, GLuint alpha); -void gl3_0_glColor4ubv(void *_glfuncs, const GLubyte* v); -void gl3_0_glColor4ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha); -void gl3_0_glColor4sv(void *_glfuncs, const GLshort* v); -void gl3_0_glColor4s(void *_glfuncs, GLshort red, GLshort green, GLshort blue, GLshort alpha); -void gl3_0_glColor4iv(void *_glfuncs, const GLint* v); -void gl3_0_glColor4i(void *_glfuncs, GLint red, GLint green, GLint blue, GLint alpha); -void gl3_0_glColor4fv(void *_glfuncs, const GLfloat* v); -void gl3_0_glColor4f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl3_0_glColor4dv(void *_glfuncs, const GLdouble* v); -void gl3_0_glColor4d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha); -void gl3_0_glColor4bv(void *_glfuncs, const GLbyte* v); -void gl3_0_glColor4b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha); -void gl3_0_glColor3usv(void *_glfuncs, const GLushort* v); -void gl3_0_glColor3us(void *_glfuncs, GLushort red, GLushort green, GLushort blue); -void gl3_0_glColor3uiv(void *_glfuncs, const GLuint* v); -void gl3_0_glColor3ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue); -void gl3_0_glColor3ubv(void *_glfuncs, const GLubyte* v); -void gl3_0_glColor3ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue); -void gl3_0_glColor3sv(void *_glfuncs, const GLshort* v); -void gl3_0_glColor3s(void *_glfuncs, GLshort red, GLshort green, GLshort blue); -void gl3_0_glColor3iv(void *_glfuncs, const GLint* v); -void gl3_0_glColor3i(void *_glfuncs, GLint red, GLint green, GLint blue); -void gl3_0_glColor3fv(void *_glfuncs, const GLfloat* v); -void gl3_0_glColor3f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue); -void gl3_0_glColor3dv(void *_glfuncs, const GLdouble* v); -void gl3_0_glColor3d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue); -void gl3_0_glColor3bv(void *_glfuncs, const GLbyte* v); -void gl3_0_glColor3b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue); -void gl3_0_glBitmap(void *_glfuncs, GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte* bitmap); -void gl3_0_glBegin(void *_glfuncs, GLenum mode); -void gl3_0_glListBase(void *_glfuncs, GLuint base); -GLuint gl3_0_glGenLists(void *_glfuncs, GLsizei range_); -void gl3_0_glDeleteLists(void *_glfuncs, GLuint list, GLsizei range_); -void gl3_0_glCallLists(void *_glfuncs, GLsizei n, GLenum gltype, const GLvoid* lists); -void gl3_0_glCallList(void *_glfuncs, GLuint list); -void gl3_0_glEndList(void *_glfuncs); -void gl3_0_glNewList(void *_glfuncs, GLuint list, GLenum mode); -void gl3_0_glPushClientAttrib(void *_glfuncs, GLbitfield mask); -void gl3_0_glPopClientAttrib(void *_glfuncs); -void gl3_0_glPrioritizeTextures(void *_glfuncs, GLsizei n, const GLuint* textures, const GLfloat* priorities); -GLboolean gl3_0_glAreTexturesResident(void *_glfuncs, GLsizei n, const GLuint* textures, GLboolean* residences); -void gl3_0_glVertexPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl3_0_glTexCoordPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl3_0_glNormalPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl3_0_glInterleavedArrays(void *_glfuncs, GLenum format, GLsizei stride, const GLvoid* pointer); -void gl3_0_glIndexPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl3_0_glEnableClientState(void *_glfuncs, GLenum array); -void gl3_0_glEdgeFlagPointer(void *_glfuncs, GLsizei stride, const GLvoid* pointer); -void gl3_0_glDisableClientState(void *_glfuncs, GLenum array); -void gl3_0_glColorPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl3_0_glArrayElement(void *_glfuncs, GLint i); -void gl3_0_glResetMinmax(void *_glfuncs, GLenum target); -void gl3_0_glResetHistogram(void *_glfuncs, GLenum target); -void gl3_0_glMinmax(void *_glfuncs, GLenum target, GLenum internalFormat, GLboolean sink); -void gl3_0_glHistogram(void *_glfuncs, GLenum target, GLsizei width, GLenum internalFormat, GLboolean sink); -void gl3_0_glGetMinmaxParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl3_0_glGetMinmaxParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl3_0_glGetMinmax(void *_glfuncs, GLenum target, GLboolean reset, GLenum format, GLenum gltype, GLvoid* values); -void gl3_0_glGetHistogramParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl3_0_glGetHistogramParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl3_0_glGetHistogram(void *_glfuncs, GLenum target, GLboolean reset, GLenum format, GLenum gltype, GLvoid* values); -void gl3_0_glSeparableFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* row, const GLvoid* column); -void gl3_0_glGetSeparableFilter(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* row, GLvoid* column, GLvoid* span); -void gl3_0_glGetConvolutionParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl3_0_glGetConvolutionParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl3_0_glGetConvolutionFilter(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* image); -void gl3_0_glCopyConvolutionFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height); -void gl3_0_glCopyConvolutionFilter1D(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width); -void gl3_0_glConvolutionParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl3_0_glConvolutionParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint params); -void gl3_0_glConvolutionParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params); -void gl3_0_glConvolutionParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat params); -void gl3_0_glConvolutionFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* image); -void gl3_0_glConvolutionFilter1D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum gltype, const GLvoid* image); -void gl3_0_glCopyColorSubTable(void *_glfuncs, GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); -void gl3_0_glColorSubTable(void *_glfuncs, GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum gltype, const GLvoid* data); -void gl3_0_glGetColorTableParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl3_0_glGetColorTableParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl3_0_glGetColorTable(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* table); -void gl3_0_glCopyColorTable(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width); -void gl3_0_glColorTableParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl3_0_glColorTableParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params); -void gl3_0_glColorTable(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum gltype, const GLvoid* table); -void gl3_0_glMultTransposeMatrixd(void *_glfuncs, const GLdouble* m); -void gl3_0_glMultTransposeMatrixf(void *_glfuncs, const GLfloat* m); -void gl3_0_glLoadTransposeMatrixd(void *_glfuncs, const GLdouble* m); -void gl3_0_glLoadTransposeMatrixf(void *_glfuncs, const GLfloat* m); -void gl3_0_glMultiTexCoord4sv(void *_glfuncs, GLenum target, const GLshort* v); -void gl3_0_glMultiTexCoord4s(void *_glfuncs, GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); -void gl3_0_glMultiTexCoord4iv(void *_glfuncs, GLenum target, const GLint* v); -void gl3_0_glMultiTexCoord4i(void *_glfuncs, GLenum target, GLint s, GLint t, GLint r, GLint q); -void gl3_0_glMultiTexCoord4fv(void *_glfuncs, GLenum target, const GLfloat* v); -void gl3_0_glMultiTexCoord4f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -void gl3_0_glMultiTexCoord4dv(void *_glfuncs, GLenum target, const GLdouble* v); -void gl3_0_glMultiTexCoord4d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -void gl3_0_glMultiTexCoord3sv(void *_glfuncs, GLenum target, const GLshort* v); -void gl3_0_glMultiTexCoord3s(void *_glfuncs, GLenum target, GLshort s, GLshort t, GLshort r); -void gl3_0_glMultiTexCoord3iv(void *_glfuncs, GLenum target, const GLint* v); -void gl3_0_glMultiTexCoord3i(void *_glfuncs, GLenum target, GLint s, GLint t, GLint r); -void gl3_0_glMultiTexCoord3fv(void *_glfuncs, GLenum target, const GLfloat* v); -void gl3_0_glMultiTexCoord3f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t, GLfloat r); -void gl3_0_glMultiTexCoord3dv(void *_glfuncs, GLenum target, const GLdouble* v); -void gl3_0_glMultiTexCoord3d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t, GLdouble r); -void gl3_0_glMultiTexCoord2sv(void *_glfuncs, GLenum target, const GLshort* v); -void gl3_0_glMultiTexCoord2s(void *_glfuncs, GLenum target, GLshort s, GLshort t); -void gl3_0_glMultiTexCoord2iv(void *_glfuncs, GLenum target, const GLint* v); -void gl3_0_glMultiTexCoord2i(void *_glfuncs, GLenum target, GLint s, GLint t); -void gl3_0_glMultiTexCoord2fv(void *_glfuncs, GLenum target, const GLfloat* v); -void gl3_0_glMultiTexCoord2f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t); -void gl3_0_glMultiTexCoord2dv(void *_glfuncs, GLenum target, const GLdouble* v); -void gl3_0_glMultiTexCoord2d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t); -void gl3_0_glMultiTexCoord1sv(void *_glfuncs, GLenum target, const GLshort* v); -void gl3_0_glMultiTexCoord1s(void *_glfuncs, GLenum target, GLshort s); -void gl3_0_glMultiTexCoord1iv(void *_glfuncs, GLenum target, const GLint* v); -void gl3_0_glMultiTexCoord1i(void *_glfuncs, GLenum target, GLint s); -void gl3_0_glMultiTexCoord1fv(void *_glfuncs, GLenum target, const GLfloat* v); -void gl3_0_glMultiTexCoord1f(void *_glfuncs, GLenum target, GLfloat s); -void gl3_0_glMultiTexCoord1dv(void *_glfuncs, GLenum target, const GLdouble* v); -void gl3_0_glMultiTexCoord1d(void *_glfuncs, GLenum target, GLdouble s); -void gl3_0_glClientActiveTexture(void *_glfuncs, GLenum texture); -void gl3_0_glWindowPos3sv(void *_glfuncs, const GLshort* v); -void gl3_0_glWindowPos3s(void *_glfuncs, GLshort x, GLshort y, GLshort z); -void gl3_0_glWindowPos3iv(void *_glfuncs, const GLint* v); -void gl3_0_glWindowPos3i(void *_glfuncs, GLint x, GLint y, GLint z); -void gl3_0_glWindowPos3fv(void *_glfuncs, const GLfloat* v); -void gl3_0_glWindowPos3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl3_0_glWindowPos3dv(void *_glfuncs, const GLdouble* v); -void gl3_0_glWindowPos3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl3_0_glWindowPos2sv(void *_glfuncs, const GLshort* v); -void gl3_0_glWindowPos2s(void *_glfuncs, GLshort x, GLshort y); -void gl3_0_glWindowPos2iv(void *_glfuncs, const GLint* v); -void gl3_0_glWindowPos2i(void *_glfuncs, GLint x, GLint y); -void gl3_0_glWindowPos2fv(void *_glfuncs, const GLfloat* v); -void gl3_0_glWindowPos2f(void *_glfuncs, GLfloat x, GLfloat y); -void gl3_0_glWindowPos2dv(void *_glfuncs, const GLdouble* v); -void gl3_0_glWindowPos2d(void *_glfuncs, GLdouble x, GLdouble y); -void gl3_0_glSecondaryColorPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl3_0_glSecondaryColor3usv(void *_glfuncs, const GLushort* v); -void gl3_0_glSecondaryColor3us(void *_glfuncs, GLushort red, GLushort green, GLushort blue); -void gl3_0_glSecondaryColor3uiv(void *_glfuncs, const GLuint* v); -void gl3_0_glSecondaryColor3ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue); -void gl3_0_glSecondaryColor3ubv(void *_glfuncs, const GLubyte* v); -void gl3_0_glSecondaryColor3ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue); -void gl3_0_glSecondaryColor3sv(void *_glfuncs, const GLshort* v); -void gl3_0_glSecondaryColor3s(void *_glfuncs, GLshort red, GLshort green, GLshort blue); -void gl3_0_glSecondaryColor3iv(void *_glfuncs, const GLint* v); -void gl3_0_glSecondaryColor3i(void *_glfuncs, GLint red, GLint green, GLint blue); -void gl3_0_glSecondaryColor3fv(void *_glfuncs, const GLfloat* v); -void gl3_0_glSecondaryColor3f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue); -void gl3_0_glSecondaryColor3dv(void *_glfuncs, const GLdouble* v); -void gl3_0_glSecondaryColor3d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue); -void gl3_0_glSecondaryColor3bv(void *_glfuncs, const GLbyte* v); -void gl3_0_glSecondaryColor3b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue); -void gl3_0_glFogCoordPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl3_0_glFogCoorddv(void *_glfuncs, const GLdouble* coord); -void gl3_0_glFogCoordd(void *_glfuncs, GLdouble coord); -void gl3_0_glFogCoordfv(void *_glfuncs, const GLfloat* coord); -void gl3_0_glFogCoordf(void *_glfuncs, GLfloat coord); -void gl3_0_glVertexAttrib4usv(void *_glfuncs, GLuint index, const GLushort* v); -void gl3_0_glVertexAttrib4uiv(void *_glfuncs, GLuint index, const GLuint* v); -void gl3_0_glVertexAttrib4ubv(void *_glfuncs, GLuint index, const GLubyte* v); -void gl3_0_glVertexAttrib4sv(void *_glfuncs, GLuint index, const GLshort* v); -void gl3_0_glVertexAttrib4s(void *_glfuncs, GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -void gl3_0_glVertexAttrib4iv(void *_glfuncs, GLuint index, const GLint* v); -void gl3_0_glVertexAttrib4fv(void *_glfuncs, GLuint index, const GLfloat* v); -void gl3_0_glVertexAttrib4f(void *_glfuncs, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -void gl3_0_glVertexAttrib4dv(void *_glfuncs, GLuint index, const GLdouble* v); -void gl3_0_glVertexAttrib4d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -void gl3_0_glVertexAttrib4bv(void *_glfuncs, GLuint index, const GLbyte* v); -void gl3_0_glVertexAttrib4Nusv(void *_glfuncs, GLuint index, const GLushort* v); -void gl3_0_glVertexAttrib4Nuiv(void *_glfuncs, GLuint index, const GLuint* v); -void gl3_0_glVertexAttrib4Nubv(void *_glfuncs, GLuint index, const GLubyte* v); -void gl3_0_glVertexAttrib4Nub(void *_glfuncs, GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -void gl3_0_glVertexAttrib4Nsv(void *_glfuncs, GLuint index, const GLshort* v); -void gl3_0_glVertexAttrib4Niv(void *_glfuncs, GLuint index, const GLint* v); -void gl3_0_glVertexAttrib4Nbv(void *_glfuncs, GLuint index, const GLbyte* v); -void gl3_0_glVertexAttrib3sv(void *_glfuncs, GLuint index, const GLshort* v); -void gl3_0_glVertexAttrib3s(void *_glfuncs, GLuint index, GLshort x, GLshort y, GLshort z); -void gl3_0_glVertexAttrib3fv(void *_glfuncs, GLuint index, const GLfloat* v); -void gl3_0_glVertexAttrib3f(void *_glfuncs, GLuint index, GLfloat x, GLfloat y, GLfloat z); -void gl3_0_glVertexAttrib3dv(void *_glfuncs, GLuint index, const GLdouble* v); -void gl3_0_glVertexAttrib3d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y, GLdouble z); -void gl3_0_glVertexAttrib2sv(void *_glfuncs, GLuint index, const GLshort* v); -void gl3_0_glVertexAttrib2s(void *_glfuncs, GLuint index, GLshort x, GLshort y); -void gl3_0_glVertexAttrib2fv(void *_glfuncs, GLuint index, const GLfloat* v); -void gl3_0_glVertexAttrib2f(void *_glfuncs, GLuint index, GLfloat x, GLfloat y); -void gl3_0_glVertexAttrib2dv(void *_glfuncs, GLuint index, const GLdouble* v); -void gl3_0_glVertexAttrib2d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y); -void gl3_0_glVertexAttrib1sv(void *_glfuncs, GLuint index, const GLshort* v); -void gl3_0_glVertexAttrib1s(void *_glfuncs, GLuint index, GLshort x); -void gl3_0_glVertexAttrib1fv(void *_glfuncs, GLuint index, const GLfloat* v); -void gl3_0_glVertexAttrib1f(void *_glfuncs, GLuint index, GLfloat x); -void gl3_0_glVertexAttrib1dv(void *_glfuncs, GLuint index, const GLdouble* v); -void gl3_0_glVertexAttrib1d(void *_glfuncs, GLuint index, GLdouble x); -void gl3_0_glVertexAttribI4usv(void *_glfuncs, GLuint index, const GLushort* v); -void gl3_0_glVertexAttribI4ubv(void *_glfuncs, GLuint index, const GLubyte* v); -void gl3_0_glVertexAttribI4sv(void *_glfuncs, GLuint index, const GLshort* v); -void gl3_0_glVertexAttribI4bv(void *_glfuncs, GLuint index, const GLbyte* v); -void gl3_0_glVertexAttribI4uiv(void *_glfuncs, GLuint index, const GLuint* v); -void gl3_0_glVertexAttribI3uiv(void *_glfuncs, GLuint index, const GLuint* v); -void gl3_0_glVertexAttribI2uiv(void *_glfuncs, GLuint index, const GLuint* v); -void gl3_0_glVertexAttribI1uiv(void *_glfuncs, GLuint index, const GLuint* v); -void gl3_0_glVertexAttribI4iv(void *_glfuncs, GLuint index, const GLint* v); -void gl3_0_glVertexAttribI3iv(void *_glfuncs, GLuint index, const GLint* v); -void gl3_0_glVertexAttribI2iv(void *_glfuncs, GLuint index, const GLint* v); -void gl3_0_glVertexAttribI1iv(void *_glfuncs, GLuint index, const GLint* v); -void gl3_0_glVertexAttribI4ui(void *_glfuncs, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -void gl3_0_glVertexAttribI3ui(void *_glfuncs, GLuint index, GLuint x, GLuint y, GLuint z); -void gl3_0_glVertexAttribI2ui(void *_glfuncs, GLuint index, GLuint x, GLuint y); -void gl3_0_glVertexAttribI1ui(void *_glfuncs, GLuint index, GLuint x); -void gl3_0_glVertexAttribI4i(void *_glfuncs, GLuint index, GLint x, GLint y, GLint z, GLint w); -void gl3_0_glVertexAttribI3i(void *_glfuncs, GLuint index, GLint x, GLint y, GLint z); -void gl3_0_glVertexAttribI2i(void *_glfuncs, GLuint index, GLint x, GLint y); -void gl3_0_glVertexAttribI1i(void *_glfuncs, GLuint index, GLint x); - - -#ifdef __cplusplus -} // extern "C" -#endif diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/3.0/gl.go b/Godeps/_workspace/src/github.com/obscuren/qml/gl/3.0/gl.go deleted file mode 100644 index a8509aecdb..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/3.0/gl.go +++ /dev/null @@ -1,7663 +0,0 @@ -// ** file automatically generated by glgen -- do not edit manually ** - -package GL - -// #cgo CXXFLAGS: -std=c++0x -pedantic-errors -Wall -fno-strict-aliasing -// #cgo LDFLAGS: -lstdc++ -// #cgo pkg-config: Qt5Core Qt5OpenGL -// -// #include "funcs.h" -// -// void free(void*); -// -import "C" - -import ( - "fmt" - "reflect" - "unsafe" - - "gopkg.in/qml.v1/gl/glbase" -) - -// API returns a value that offers methods matching the OpenGL version 3.0 API. -// -// The returned API must not be used after the provided OpenGL context becomes invalid. -func API(context glbase.Contexter) *GL { - gl := &GL{} - gl.funcs = C.gl3_0_funcs() - if gl.funcs == nil { - panic(fmt.Errorf("OpenGL version 3.0 is not available")) - } - return gl -} - -// GL implements the OpenGL version 3.0 API. Values of this -// type must be created via the API function, and it must not be used after -// the associated OpenGL context becomes invalid. -type GL struct { - funcs unsafe.Pointer -} - -const ( - FALSE = 0 - TRUE = 1 - NONE = 0 - - BYTE = 0x1400 - UNSIGNED_BYTE = 0x1401 - SHORT = 0x1402 - UNSIGNED_SHORT = 0x1403 - INT = 0x1404 - UNSIGNED_INT = 0x1405 - FLOAT = 0x1406 - N2_BYTES = 0x1407 - N3_BYTES = 0x1408 - N4_BYTES = 0x1409 - DOUBLE = 0x140A - HALF_FLOAT = 0x140B - - ACCUM = 0x0100 - LOAD = 0x0101 - RETURN = 0x0102 - MULT = 0x0103 - ADD = 0x0104 - - ACCUM_BUFFER_BIT = 0x00000200 - ALL_ATTRIB_BITS = 0xFFFFFFFF - COLOR_BUFFER_BIT = 0x00004000 - CURRENT_BIT = 0x00000001 - DEPTH_BUFFER_BIT = 0x00000100 - ENABLE_BIT = 0x00002000 - EVAL_BIT = 0x00010000 - FOG_BIT = 0x00000080 - HINT_BIT = 0x00008000 - LIGHTING_BIT = 0x00000040 - LINE_BIT = 0x00000004 - LIST_BIT = 0x00020000 - MULTISAMPLE_BIT = 0x20000000 - PIXEL_MODE_BIT = 0x00000020 - POINT_BIT = 0x00000002 - POLYGON_BIT = 0x00000008 - POLYGON_STIPPLE_BIT = 0x00000010 - SCISSOR_BIT = 0x00080000 - STENCIL_BUFFER_BIT = 0x00000400 - TEXTURE_BIT = 0x00040000 - TRANSFORM_BIT = 0x00001000 - VIEWPORT_BIT = 0x00000800 - - ALWAYS = 0x0207 - EQUAL = 0x0202 - GEQUAL = 0x0206 - GREATER = 0x0204 - LEQUAL = 0x0203 - LESS = 0x0201 - NEVER = 0x0200 - NOTEQUAL = 0x0205 - - LOGIC_OP = 0x0BF1 - - DST_ALPHA = 0x0304 - ONE = 1 - ONE_MINUS_DST_ALPHA = 0x0305 - ONE_MINUS_SRC_ALPHA = 0x0303 - ONE_MINUS_SRC_COLOR = 0x0301 - SRC_ALPHA = 0x0302 - SRC_COLOR = 0x0300 - ZERO = 0 - - DST_COLOR = 0x0306 - ONE_MINUS_DST_COLOR = 0x0307 - SRC_ALPHA_SATURATE = 0x0308 - - CLIENT_ALL_ATTRIB_BITS = 0xFFFFFFFF - CLIENT_PIXEL_STORE_BIT = 0x00000001 - CLIENT_VERTEX_ARRAY_BIT = 0x00000002 - - CLIP_DISTANCE0 = 0x3000 - CLIP_DISTANCE1 = 0x3001 - CLIP_DISTANCE2 = 0x3002 - CLIP_DISTANCE3 = 0x3003 - CLIP_DISTANCE4 = 0x3004 - CLIP_DISTANCE5 = 0x3005 - CLIP_DISTANCE6 = 0x3006 - CLIP_DISTANCE7 = 0x3007 - CLIP_PLANE0 = 0x3000 - CLIP_PLANE1 = 0x3001 - CLIP_PLANE2 = 0x3002 - CLIP_PLANE3 = 0x3003 - CLIP_PLANE4 = 0x3004 - CLIP_PLANE5 = 0x3005 - - BACK = 0x0405 - FRONT = 0x0404 - FRONT_AND_BACK = 0x0408 - - AMBIENT = 0x1200 - AMBIENT_AND_DIFFUSE = 0x1602 - DIFFUSE = 0x1201 - EMISSION = 0x1600 - SPECULAR = 0x1202 - - CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT = 0x00000001 - - AUX0 = 0x0409 - AUX1 = 0x040A - AUX2 = 0x040B - AUX3 = 0x040C - BACK_LEFT = 0x0402 - BACK_RIGHT = 0x0403 - FRONT_LEFT = 0x0400 - FRONT_RIGHT = 0x0401 - LEFT = 0x0406 - RIGHT = 0x0407 - - ALPHA_TEST = 0x0BC0 - AUTO_NORMAL = 0x0D80 - BLEND = 0x0BE2 - COLOR_ARRAY = 0x8076 - COLOR_LOGIC_OP = 0x0BF2 - COLOR_MATERIAL = 0x0B57 - CULL_FACE = 0x0B44 - DEPTH_TEST = 0x0B71 - DITHER = 0x0BD0 - EDGE_FLAG_ARRAY = 0x8079 - FOG = 0x0B60 - INDEX_ARRAY = 0x8077 - INDEX_LOGIC_OP = 0x0BF1 - LIGHT0 = 0x4000 - LIGHT1 = 0x4001 - LIGHT2 = 0x4002 - LIGHT3 = 0x4003 - LIGHT4 = 0x4004 - LIGHT5 = 0x4005 - LIGHT6 = 0x4006 - LIGHT7 = 0x4007 - LIGHTING = 0x0B50 - LINE_SMOOTH = 0x0B20 - LINE_STIPPLE = 0x0B24 - MAP1_COLOR_4 = 0x0D90 - MAP1_INDEX = 0x0D91 - MAP1_NORMAL = 0x0D92 - MAP1_TEXTURE_COORD_1 = 0x0D93 - MAP1_TEXTURE_COORD_2 = 0x0D94 - MAP1_TEXTURE_COORD_3 = 0x0D95 - MAP1_TEXTURE_COORD_4 = 0x0D96 - MAP1_VERTEX_3 = 0x0D97 - MAP1_VERTEX_4 = 0x0D98 - MAP2_COLOR_4 = 0x0DB0 - MAP2_INDEX = 0x0DB1 - MAP2_NORMAL = 0x0DB2 - MAP2_TEXTURE_COORD_1 = 0x0DB3 - MAP2_TEXTURE_COORD_2 = 0x0DB4 - MAP2_TEXTURE_COORD_3 = 0x0DB5 - MAP2_TEXTURE_COORD_4 = 0x0DB6 - MAP2_VERTEX_3 = 0x0DB7 - MAP2_VERTEX_4 = 0x0DB8 - NORMALIZE = 0x0BA1 - NORMAL_ARRAY = 0x8075 - POINT_SMOOTH = 0x0B10 - POLYGON_OFFSET_FILL = 0x8037 - POLYGON_OFFSET_LINE = 0x2A02 - POLYGON_OFFSET_POINT = 0x2A01 - POLYGON_SMOOTH = 0x0B41 - POLYGON_STIPPLE = 0x0B42 - SCISSOR_TEST = 0x0C11 - STENCIL_TEST = 0x0B90 - TEXTURE_1D = 0x0DE0 - TEXTURE_2D = 0x0DE1 - TEXTURE_COORD_ARRAY = 0x8078 - TEXTURE_GEN_Q = 0x0C63 - TEXTURE_GEN_R = 0x0C62 - TEXTURE_GEN_S = 0x0C60 - TEXTURE_GEN_T = 0x0C61 - VERTEX_ARRAY = 0x8074 - - INVALID_ENUM = 0x0500 - INVALID_FRAMEBUFFER_OPERATION = 0x0506 - INVALID_OPERATION = 0x0502 - INVALID_VALUE = 0x0501 - NO_ERROR = 0 - OUT_OF_MEMORY = 0x0505 - STACK_OVERFLOW = 0x0503 - STACK_UNDERFLOW = 0x0504 - - N2D = 0x0600 - N3D = 0x0601 - N3D_COLOR = 0x0602 - N3D_COLOR_TEXTURE = 0x0603 - N4D_COLOR_TEXTURE = 0x0604 - - BITMAP_TOKEN = 0x0704 - COPY_PIXEL_TOKEN = 0x0706 - DRAW_PIXEL_TOKEN = 0x0705 - LINE_RESET_TOKEN = 0x0707 - LINE_TOKEN = 0x0702 - PASS_THROUGH_TOKEN = 0x0700 - POINT_TOKEN = 0x0701 - POLYGON_TOKEN = 0x0703 - - EXP = 0x0800 - EXP2 = 0x0801 - LINEAR = 0x2601 - - FOG_COLOR = 0x0B66 - FOG_DENSITY = 0x0B62 - FOG_END = 0x0B64 - FOG_INDEX = 0x0B61 - FOG_MODE = 0x0B65 - FOG_START = 0x0B63 - - CCW = 0x0901 - CW = 0x0900 - - COEFF = 0x0A00 - DOMAIN = 0x0A02 - ORDER = 0x0A01 - - PIXEL_MAP_A_TO_A = 0x0C79 - PIXEL_MAP_B_TO_B = 0x0C78 - PIXEL_MAP_G_TO_G = 0x0C77 - PIXEL_MAP_I_TO_A = 0x0C75 - PIXEL_MAP_I_TO_B = 0x0C74 - PIXEL_MAP_I_TO_G = 0x0C73 - PIXEL_MAP_I_TO_I = 0x0C70 - PIXEL_MAP_I_TO_R = 0x0C72 - PIXEL_MAP_R_TO_R = 0x0C76 - PIXEL_MAP_S_TO_S = 0x0C71 - - ACCUM_ALPHA_BITS = 0x0D5B - ACCUM_BLUE_BITS = 0x0D5A - ACCUM_CLEAR_VALUE = 0x0B80 - ACCUM_GREEN_BITS = 0x0D59 - ACCUM_RED_BITS = 0x0D58 - ALIASED_LINE_WIDTH_RANGE = 0x846E - ALIASED_POINT_SIZE_RANGE = 0x846D - ALPHA_BIAS = 0x0D1D - ALPHA_BITS = 0x0D55 - ALPHA_SCALE = 0x0D1C - ALPHA_TEST_FUNC = 0x0BC1 - ALPHA_TEST_REF = 0x0BC2 - ATTRIB_STACK_DEPTH = 0x0BB0 - AUX_BUFFERS = 0x0C00 - BLEND_DST = 0x0BE0 - BLEND_SRC = 0x0BE1 - BLUE_BIAS = 0x0D1B - BLUE_BITS = 0x0D54 - BLUE_SCALE = 0x0D1A - CLIENT_ATTRIB_STACK_DEPTH = 0x0BB1 - COLOR_ARRAY_SIZE = 0x8081 - COLOR_ARRAY_STRIDE = 0x8083 - COLOR_ARRAY_TYPE = 0x8082 - COLOR_CLEAR_VALUE = 0x0C22 - COLOR_MATERIAL_FACE = 0x0B55 - COLOR_MATERIAL_PARAMETER = 0x0B56 - COLOR_WRITEMASK = 0x0C23 - CULL_FACE_MODE = 0x0B45 - CURRENT_COLOR = 0x0B00 - CURRENT_INDEX = 0x0B01 - CURRENT_NORMAL = 0x0B02 - CURRENT_RASTER_COLOR = 0x0B04 - CURRENT_RASTER_DISTANCE = 0x0B09 - CURRENT_RASTER_INDEX = 0x0B05 - CURRENT_RASTER_POSITION = 0x0B07 - CURRENT_RASTER_POSITION_VALID = 0x0B08 - CURRENT_RASTER_TEXTURE_COORDS = 0x0B06 - CURRENT_TEXTURE_COORDS = 0x0B03 - DEPTH_BIAS = 0x0D1F - DEPTH_BITS = 0x0D56 - DEPTH_CLEAR_VALUE = 0x0B73 - DEPTH_FUNC = 0x0B74 - DEPTH_RANGE = 0x0B70 - DEPTH_SCALE = 0x0D1E - DEPTH_WRITEMASK = 0x0B72 - DOUBLEBUFFER = 0x0C32 - DRAW_BUFFER = 0x0C01 - EDGE_FLAG = 0x0B43 - EDGE_FLAG_ARRAY_STRIDE = 0x808C - FEEDBACK_BUFFER_SIZE = 0x0DF1 - FEEDBACK_BUFFER_TYPE = 0x0DF2 - FOG_HINT = 0x0C54 - FRONT_FACE = 0x0B46 - GREEN_BIAS = 0x0D19 - GREEN_BITS = 0x0D53 - GREEN_SCALE = 0x0D18 - INDEX_ARRAY_STRIDE = 0x8086 - INDEX_ARRAY_TYPE = 0x8085 - INDEX_BITS = 0x0D51 - INDEX_CLEAR_VALUE = 0x0C20 - INDEX_MODE = 0x0C30 - INDEX_OFFSET = 0x0D13 - INDEX_SHIFT = 0x0D12 - INDEX_WRITEMASK = 0x0C21 - LIGHT_MODEL_AMBIENT = 0x0B53 - LIGHT_MODEL_COLOR_CONTROL = 0x81F8 - LIGHT_MODEL_LOCAL_VIEWER = 0x0B51 - LIGHT_MODEL_TWO_SIDE = 0x0B52 - LINE_SMOOTH_HINT = 0x0C52 - LINE_STIPPLE_PATTERN = 0x0B25 - LINE_STIPPLE_REPEAT = 0x0B26 - LINE_WIDTH = 0x0B21 - LINE_WIDTH_GRANULARITY = 0x0B23 - LINE_WIDTH_RANGE = 0x0B22 - LIST_BASE = 0x0B32 - LIST_INDEX = 0x0B33 - LIST_MODE = 0x0B30 - LOGIC_OP_MODE = 0x0BF0 - MAP1_GRID_DOMAIN = 0x0DD0 - MAP1_GRID_SEGMENTS = 0x0DD1 - MAP2_GRID_DOMAIN = 0x0DD2 - MAP2_GRID_SEGMENTS = 0x0DD3 - MAP_COLOR = 0x0D10 - MAP_STENCIL = 0x0D11 - MATRIX_MODE = 0x0BA0 - MAX_ATTRIB_STACK_DEPTH = 0x0D35 - MAX_CLIENT_ATTRIB_STACK_DEPTH = 0x0D3B - MAX_CLIP_DISTANCES = 0x0D32 - MAX_CLIP_PLANES = 0x0D32 - MAX_EVAL_ORDER = 0x0D30 - MAX_LIGHTS = 0x0D31 - MAX_LIST_NESTING = 0x0B31 - MAX_MODELVIEW_STACK_DEPTH = 0x0D36 - MAX_NAME_STACK_DEPTH = 0x0D37 - MAX_PIXEL_MAP_TABLE = 0x0D34 - MAX_PROJECTION_STACK_DEPTH = 0x0D38 - MAX_TEXTURE_SIZE = 0x0D33 - MAX_TEXTURE_STACK_DEPTH = 0x0D39 - MAX_VIEWPORT_DIMS = 0x0D3A - MODELVIEW_MATRIX = 0x0BA6 - MODELVIEW_STACK_DEPTH = 0x0BA3 - NAME_STACK_DEPTH = 0x0D70 - NORMAL_ARRAY_STRIDE = 0x807F - NORMAL_ARRAY_TYPE = 0x807E - PACK_ALIGNMENT = 0x0D05 - PACK_LSB_FIRST = 0x0D01 - PACK_ROW_LENGTH = 0x0D02 - PACK_SKIP_PIXELS = 0x0D04 - PACK_SKIP_ROWS = 0x0D03 - PACK_SWAP_BYTES = 0x0D00 - PERSPECTIVE_CORRECTION_HINT = 0x0C50 - PIXEL_MAP_A_TO_A_SIZE = 0x0CB9 - PIXEL_MAP_B_TO_B_SIZE = 0x0CB8 - PIXEL_MAP_G_TO_G_SIZE = 0x0CB7 - PIXEL_MAP_I_TO_A_SIZE = 0x0CB5 - PIXEL_MAP_I_TO_B_SIZE = 0x0CB4 - PIXEL_MAP_I_TO_G_SIZE = 0x0CB3 - PIXEL_MAP_I_TO_I_SIZE = 0x0CB0 - PIXEL_MAP_I_TO_R_SIZE = 0x0CB2 - PIXEL_MAP_R_TO_R_SIZE = 0x0CB6 - PIXEL_MAP_S_TO_S_SIZE = 0x0CB1 - POINT_SIZE = 0x0B11 - POINT_SIZE_GRANULARITY = 0x0B13 - POINT_SIZE_RANGE = 0x0B12 - POINT_SMOOTH_HINT = 0x0C51 - POLYGON_MODE = 0x0B40 - POLYGON_OFFSET_FACTOR = 0x8038 - POLYGON_OFFSET_UNITS = 0x2A00 - POLYGON_SMOOTH_HINT = 0x0C53 - PROJECTION_MATRIX = 0x0BA7 - PROJECTION_STACK_DEPTH = 0x0BA4 - READ_BUFFER = 0x0C02 - RED_BIAS = 0x0D15 - RED_BITS = 0x0D52 - RED_SCALE = 0x0D14 - RENDER_MODE = 0x0C40 - RGBA_MODE = 0x0C31 - SCISSOR_BOX = 0x0C10 - SELECTION_BUFFER_SIZE = 0x0DF4 - SHADE_MODEL = 0x0B54 - SMOOTH_LINE_WIDTH_GRANULARITY = 0x0B23 - SMOOTH_LINE_WIDTH_RANGE = 0x0B22 - SMOOTH_POINT_SIZE_GRANULARITY = 0x0B13 - SMOOTH_POINT_SIZE_RANGE = 0x0B12 - STENCIL_BITS = 0x0D57 - STENCIL_CLEAR_VALUE = 0x0B91 - STENCIL_FAIL = 0x0B94 - STENCIL_FUNC = 0x0B92 - STENCIL_PASS_DEPTH_FAIL = 0x0B95 - STENCIL_PASS_DEPTH_PASS = 0x0B96 - STENCIL_REF = 0x0B97 - STENCIL_VALUE_MASK = 0x0B93 - STENCIL_WRITEMASK = 0x0B98 - STEREO = 0x0C33 - SUBPIXEL_BITS = 0x0D50 - TEXTURE_BINDING_1D = 0x8068 - TEXTURE_BINDING_2D = 0x8069 - TEXTURE_BINDING_3D = 0x806A - TEXTURE_COORD_ARRAY_SIZE = 0x8088 - TEXTURE_COORD_ARRAY_STRIDE = 0x808A - TEXTURE_COORD_ARRAY_TYPE = 0x8089 - TEXTURE_MATRIX = 0x0BA8 - TEXTURE_STACK_DEPTH = 0x0BA5 - UNPACK_ALIGNMENT = 0x0CF5 - UNPACK_LSB_FIRST = 0x0CF1 - UNPACK_ROW_LENGTH = 0x0CF2 - UNPACK_SKIP_PIXELS = 0x0CF4 - UNPACK_SKIP_ROWS = 0x0CF3 - UNPACK_SWAP_BYTES = 0x0CF0 - VERTEX_ARRAY_SIZE = 0x807A - VERTEX_ARRAY_STRIDE = 0x807C - VERTEX_ARRAY_TYPE = 0x807B - VIEWPORT = 0x0BA2 - ZOOM_X = 0x0D16 - ZOOM_Y = 0x0D17 - - COLOR_ARRAY_POINTER = 0x8090 - EDGE_FLAG_ARRAY_POINTER = 0x8093 - FEEDBACK_BUFFER_POINTER = 0x0DF0 - INDEX_ARRAY_POINTER = 0x8091 - NORMAL_ARRAY_POINTER = 0x808F - SELECTION_BUFFER_POINTER = 0x0DF3 - TEXTURE_COORD_ARRAY_POINTER = 0x8092 - VERTEX_ARRAY_POINTER = 0x808E - - TEXTURE_ALPHA_SIZE = 0x805F - TEXTURE_BLUE_SIZE = 0x805E - TEXTURE_BORDER = 0x1005 - TEXTURE_BORDER_COLOR = 0x1004 - TEXTURE_COMPONENTS = 0x1003 - TEXTURE_GREEN_SIZE = 0x805D - TEXTURE_HEIGHT = 0x1001 - TEXTURE_INTENSITY_SIZE = 0x8061 - TEXTURE_INTERNAL_FORMAT = 0x1003 - TEXTURE_LUMINANCE_SIZE = 0x8060 - TEXTURE_MAG_FILTER = 0x2800 - TEXTURE_MIN_FILTER = 0x2801 - TEXTURE_PRIORITY = 0x8066 - TEXTURE_RED_SIZE = 0x805C - TEXTURE_RESIDENT = 0x8067 - TEXTURE_WIDTH = 0x1000 - TEXTURE_WRAP_S = 0x2802 - TEXTURE_WRAP_T = 0x2803 - - DONT_CARE = 0x1100 - FASTEST = 0x1101 - NICEST = 0x1102 - - FRAGMENT_SHADER_DERIVATIVE_HINT = 0x8B8B - GENERATE_MIPMAP_HINT = 0x8192 - TEXTURE_COMPRESSION_HINT = 0x84EF - - C3F_V3F = 0x2A24 - C4F_N3F_V3F = 0x2A26 - C4UB_V2F = 0x2A22 - C4UB_V3F = 0x2A23 - N3F_V3F = 0x2A25 - T2F_C3F_V3F = 0x2A2A - T2F_C4F_N3F_V3F = 0x2A2C - T2F_C4UB_V3F = 0x2A29 - T2F_N3F_V3F = 0x2A2B - T2F_V3F = 0x2A27 - T4F_C4F_N3F_V4F = 0x2A2D - T4F_V4F = 0x2A28 - V2F = 0x2A20 - V3F = 0x2A21 - - MODULATE = 0x2100 - REPLACE = 0x1E01 - - SEPARATE_SPECULAR_COLOR = 0x81FA - SINGLE_COLOR = 0x81F9 - - CONSTANT_ATTENUATION = 0x1207 - LINEAR_ATTENUATION = 0x1208 - POSITION = 0x1203 - QUADRATIC_ATTENUATION = 0x1209 - SPOT_CUTOFF = 0x1206 - SPOT_DIRECTION = 0x1204 - SPOT_EXPONENT = 0x1205 - - COMPILE = 0x1300 - COMPILE_AND_EXECUTE = 0x1301 - - AND = 0x1501 - AND_INVERTED = 0x1504 - AND_REVERSE = 0x1502 - CLEAR = 0x1500 - COPY = 0x1503 - COPY_INVERTED = 0x150C - EQUIV = 0x1509 - INVERT = 0x150A - NAND = 0x150E - NOOP = 0x1505 - NOR = 0x1508 - OR = 0x1507 - OR_INVERTED = 0x150D - OR_REVERSE = 0x150B - SET = 0x150F - XOR = 0x1506 - - MAP_FLUSH_EXPLICIT_BIT = 0x0010 - MAP_INVALIDATE_BUFFER_BIT = 0x0008 - MAP_INVALIDATE_RANGE_BIT = 0x0004 - MAP_READ_BIT = 0x0001 - MAP_UNSYNCHRONIZED_BIT = 0x0020 - MAP_WRITE_BIT = 0x0002 - - COLOR_INDEXES = 0x1603 - SHININESS = 0x1601 - - MODELVIEW = 0x1700 - PROJECTION = 0x1701 - TEXTURE = 0x1702 - - LINE = 0x1B01 - POINT = 0x1B00 - - FILL = 0x1B02 - - COLOR = 0x1800 - DEPTH = 0x1801 - STENCIL = 0x1802 - - ALPHA = 0x1906 - BLUE = 0x1905 - COLOR_INDEX = 0x1900 - DEPTH_COMPONENT = 0x1902 - GREEN = 0x1904 - LUMINANCE = 0x1909 - LUMINANCE_ALPHA = 0x190A - RED = 0x1903 - RGB = 0x1907 - RGBA = 0x1908 - STENCIL_INDEX = 0x1901 - - ALPHA12 = 0x803D - ALPHA16 = 0x803E - ALPHA4 = 0x803B - ALPHA8 = 0x803C - INTENSITY = 0x8049 - INTENSITY12 = 0x804C - INTENSITY16 = 0x804D - INTENSITY4 = 0x804A - INTENSITY8 = 0x804B - LUMINANCE12 = 0x8041 - LUMINANCE12_ALPHA12 = 0x8047 - LUMINANCE12_ALPHA4 = 0x8046 - LUMINANCE16 = 0x8042 - LUMINANCE16_ALPHA16 = 0x8048 - LUMINANCE4 = 0x803F - LUMINANCE4_ALPHA4 = 0x8043 - LUMINANCE6_ALPHA2 = 0x8044 - LUMINANCE8 = 0x8040 - LUMINANCE8_ALPHA8 = 0x8045 - R3_G3_B2 = 0x2A10 - RGB10 = 0x8052 - RGB10_A2 = 0x8059 - RGB12 = 0x8053 - RGB16 = 0x8054 - RGB4 = 0x804F - RGB5 = 0x8050 - RGB5_A1 = 0x8057 - RGB8 = 0x8051 - RGBA12 = 0x805A - RGBA16 = 0x805B - RGBA2 = 0x8055 - RGBA4 = 0x8056 - RGBA8 = 0x8058 - - PACK_IMAGE_HEIGHT = 0x806C - PACK_SKIP_IMAGES = 0x806B - UNPACK_IMAGE_HEIGHT = 0x806E - UNPACK_SKIP_IMAGES = 0x806D - - BITMAP = 0x1A00 - UNSIGNED_BYTE_3_3_2 = 0x8032 - UNSIGNED_INT_10_10_10_2 = 0x8036 - UNSIGNED_INT_8_8_8_8 = 0x8035 - UNSIGNED_SHORT_4_4_4_4 = 0x8033 - UNSIGNED_SHORT_5_5_5_1 = 0x8034 - - POINT_DISTANCE_ATTENUATION = 0x8129 - POINT_FADE_THRESHOLD_SIZE = 0x8128 - POINT_SIZE_MAX = 0x8127 - POINT_SIZE_MIN = 0x8126 - - LINES = 0x0001 - LINE_LOOP = 0x0002 - LINE_STRIP = 0x0003 - POINTS = 0x0000 - POLYGON = 0x0009 - QUADS = 0x0007 - QUAD_STRIP = 0x0008 - TRIANGLES = 0x0004 - TRIANGLE_FAN = 0x0006 - TRIANGLE_STRIP = 0x0005 - - FEEDBACK = 0x1C01 - RENDER = 0x1C00 - SELECT = 0x1C02 - - FLAT = 0x1D00 - SMOOTH = 0x1D01 - - DECR = 0x1E03 - INCR = 0x1E02 - KEEP = 0x1E00 - - EXTENSIONS = 0x1F03 - RENDERER = 0x1F01 - VENDOR = 0x1F00 - VERSION = 0x1F02 - - S = 0x2000 - T = 0x2001 - R = 0x2002 - Q = 0x2003 - - DECAL = 0x2101 - - TEXTURE_ENV_COLOR = 0x2201 - TEXTURE_ENV_MODE = 0x2200 - - TEXTURE_ENV = 0x2300 - - EYE_LINEAR = 0x2400 - OBJECT_LINEAR = 0x2401 - SPHERE_MAP = 0x2402 - - EYE_PLANE = 0x2502 - OBJECT_PLANE = 0x2501 - TEXTURE_GEN_MODE = 0x2500 - - NEAREST = 0x2600 - - LINEAR_MIPMAP_LINEAR = 0x2703 - LINEAR_MIPMAP_NEAREST = 0x2701 - NEAREST_MIPMAP_LINEAR = 0x2702 - NEAREST_MIPMAP_NEAREST = 0x2700 - - GENERATE_MIPMAP = 0x8191 - TEXTURE_WRAP_R = 0x8072 - - PROXY_TEXTURE_1D = 0x8063 - PROXY_TEXTURE_2D = 0x8064 - PROXY_TEXTURE_3D = 0x8070 - TEXTURE_3D = 0x806F - TEXTURE_BASE_LEVEL = 0x813C - TEXTURE_MAX_LEVEL = 0x813D - TEXTURE_MAX_LOD = 0x813B - TEXTURE_MIN_LOD = 0x813A - - CLAMP = 0x2900 - CLAMP_TO_BORDER = 0x812D - CLAMP_TO_EDGE = 0x812F - REPEAT = 0x2901 - - CONSTANT_COLOR = 0x8001 - ONE_MINUS_CONSTANT_COLOR = 0x8002 - CONSTANT_ALPHA = 0x8003 - ONE_MINUS_CONSTANT_ALPHA = 0x8004 - FUNC_ADD = 0x8006 - MIN = 0x8007 - MAX = 0x8008 - BLEND_EQUATION_RGB = 0x8009 - FUNC_SUBTRACT = 0x800A - FUNC_REVERSE_SUBTRACT = 0x800B - RESCALE_NORMAL = 0x803A - TEXTURE_DEPTH = 0x8071 - MAX_3D_TEXTURE_SIZE = 0x8073 - MULTISAMPLE = 0x809D - SAMPLE_ALPHA_TO_COVERAGE = 0x809E - SAMPLE_ALPHA_TO_ONE = 0x809F - SAMPLE_COVERAGE = 0x80A0 - SAMPLE_BUFFERS = 0x80A8 - SAMPLES = 0x80A9 - SAMPLE_COVERAGE_VALUE = 0x80AA - SAMPLE_COVERAGE_INVERT = 0x80AB - BLEND_DST_RGB = 0x80C8 - BLEND_SRC_RGB = 0x80C9 - BLEND_DST_ALPHA = 0x80CA - BLEND_SRC_ALPHA = 0x80CB - BGR = 0x80E0 - BGRA = 0x80E1 - MAX_ELEMENTS_VERTICES = 0x80E8 - MAX_ELEMENTS_INDICES = 0x80E9 - DEPTH_COMPONENT16 = 0x81A5 - DEPTH_COMPONENT24 = 0x81A6 - DEPTH_COMPONENT32 = 0x81A7 - FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING = 0x8210 - FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE = 0x8211 - FRAMEBUFFER_ATTACHMENT_RED_SIZE = 0x8212 - FRAMEBUFFER_ATTACHMENT_GREEN_SIZE = 0x8213 - FRAMEBUFFER_ATTACHMENT_BLUE_SIZE = 0x8214 - FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE = 0x8215 - FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE = 0x8216 - FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE = 0x8217 - FRAMEBUFFER_DEFAULT = 0x8218 - FRAMEBUFFER_UNDEFINED = 0x8219 - DEPTH_STENCIL_ATTACHMENT = 0x821A - MAJOR_VERSION = 0x821B - MINOR_VERSION = 0x821C - NUM_EXTENSIONS = 0x821D - CONTEXT_FLAGS = 0x821E - COMPRESSED_RED = 0x8225 - COMPRESSED_RG = 0x8226 - RG = 0x8227 - RG_INTEGER = 0x8228 - R8 = 0x8229 - R16 = 0x822A - RG8 = 0x822B - RG16 = 0x822C - R16F = 0x822D - R32F = 0x822E - RG16F = 0x822F - RG32F = 0x8230 - R8I = 0x8231 - R8UI = 0x8232 - R16I = 0x8233 - R16UI = 0x8234 - R32I = 0x8235 - R32UI = 0x8236 - RG8I = 0x8237 - RG8UI = 0x8238 - RG16I = 0x8239 - RG16UI = 0x823A - RG32I = 0x823B - RG32UI = 0x823C - UNSIGNED_BYTE_2_3_3_REV = 0x8362 - UNSIGNED_SHORT_5_6_5 = 0x8363 - UNSIGNED_SHORT_5_6_5_REV = 0x8364 - UNSIGNED_SHORT_4_4_4_4_REV = 0x8365 - UNSIGNED_SHORT_1_5_5_5_REV = 0x8366 - UNSIGNED_INT_8_8_8_8_REV = 0x8367 - UNSIGNED_INT_2_10_10_10_REV = 0x8368 - MIRRORED_REPEAT = 0x8370 - FOG_COORDINATE_SOURCE = 0x8450 - FOG_COORD_SRC = 0x8450 - FOG_COORDINATE = 0x8451 - FOG_COORD = 0x8451 - FRAGMENT_DEPTH = 0x8452 - CURRENT_FOG_COORDINATE = 0x8453 - CURRENT_FOG_COORD = 0x8453 - FOG_COORDINATE_ARRAY_TYPE = 0x8454 - FOG_COORD_ARRAY_TYPE = 0x8454 - FOG_COORDINATE_ARRAY_STRIDE = 0x8455 - FOG_COORD_ARRAY_STRIDE = 0x8455 - FOG_COORDINATE_ARRAY_POINTER = 0x8456 - FOG_COORD_ARRAY_POINTER = 0x8456 - FOG_COORDINATE_ARRAY = 0x8457 - FOG_COORD_ARRAY = 0x8457 - COLOR_SUM = 0x8458 - CURRENT_SECONDARY_COLOR = 0x8459 - SECONDARY_COLOR_ARRAY_SIZE = 0x845A - SECONDARY_COLOR_ARRAY_TYPE = 0x845B - SECONDARY_COLOR_ARRAY_STRIDE = 0x845C - SECONDARY_COLOR_ARRAY_POINTER = 0x845D - SECONDARY_COLOR_ARRAY = 0x845E - CURRENT_RASTER_SECONDARY_COLOR = 0x845F - TEXTURE0 = 0x84C0 - TEXTURE1 = 0x84C1 - TEXTURE2 = 0x84C2 - TEXTURE3 = 0x84C3 - TEXTURE4 = 0x84C4 - TEXTURE5 = 0x84C5 - TEXTURE6 = 0x84C6 - TEXTURE7 = 0x84C7 - TEXTURE8 = 0x84C8 - TEXTURE9 = 0x84C9 - TEXTURE10 = 0x84CA - TEXTURE11 = 0x84CB - TEXTURE12 = 0x84CC - TEXTURE13 = 0x84CD - TEXTURE14 = 0x84CE - TEXTURE15 = 0x84CF - TEXTURE16 = 0x84D0 - TEXTURE17 = 0x84D1 - TEXTURE18 = 0x84D2 - TEXTURE19 = 0x84D3 - TEXTURE20 = 0x84D4 - TEXTURE21 = 0x84D5 - TEXTURE22 = 0x84D6 - TEXTURE23 = 0x84D7 - TEXTURE24 = 0x84D8 - TEXTURE25 = 0x84D9 - TEXTURE26 = 0x84DA - TEXTURE27 = 0x84DB - TEXTURE28 = 0x84DC - TEXTURE29 = 0x84DD - TEXTURE30 = 0x84DE - TEXTURE31 = 0x84DF - ACTIVE_TEXTURE = 0x84E0 - CLIENT_ACTIVE_TEXTURE = 0x84E1 - MAX_TEXTURE_UNITS = 0x84E2 - TRANSPOSE_MODELVIEW_MATRIX = 0x84E3 - TRANSPOSE_PROJECTION_MATRIX = 0x84E4 - TRANSPOSE_TEXTURE_MATRIX = 0x84E5 - TRANSPOSE_COLOR_MATRIX = 0x84E6 - SUBTRACT = 0x84E7 - MAX_RENDERBUFFER_SIZE = 0x84E8 - COMPRESSED_ALPHA = 0x84E9 - COMPRESSED_LUMINANCE = 0x84EA - COMPRESSED_LUMINANCE_ALPHA = 0x84EB - COMPRESSED_INTENSITY = 0x84EC - COMPRESSED_RGB = 0x84ED - COMPRESSED_RGBA = 0x84EE - DEPTH_STENCIL = 0x84F9 - UNSIGNED_INT_24_8 = 0x84FA - MAX_TEXTURE_LOD_BIAS = 0x84FD - TEXTURE_FILTER_CONTROL = 0x8500 - TEXTURE_LOD_BIAS = 0x8501 - INCR_WRAP = 0x8507 - DECR_WRAP = 0x8508 - NORMAL_MAP = 0x8511 - REFLECTION_MAP = 0x8512 - TEXTURE_CUBE_MAP = 0x8513 - TEXTURE_BINDING_CUBE_MAP = 0x8514 - TEXTURE_CUBE_MAP_POSITIVE_X = 0x8515 - TEXTURE_CUBE_MAP_NEGATIVE_X = 0x8516 - TEXTURE_CUBE_MAP_POSITIVE_Y = 0x8517 - TEXTURE_CUBE_MAP_NEGATIVE_Y = 0x8518 - TEXTURE_CUBE_MAP_POSITIVE_Z = 0x8519 - TEXTURE_CUBE_MAP_NEGATIVE_Z = 0x851A - PROXY_TEXTURE_CUBE_MAP = 0x851B - MAX_CUBE_MAP_TEXTURE_SIZE = 0x851C - COMBINE = 0x8570 - COMBINE_RGB = 0x8571 - COMBINE_ALPHA = 0x8572 - RGB_SCALE = 0x8573 - ADD_SIGNED = 0x8574 - INTERPOLATE = 0x8575 - CONSTANT = 0x8576 - PRIMARY_COLOR = 0x8577 - PREVIOUS = 0x8578 - SOURCE0_RGB = 0x8580 - SRC0_RGB = 0x8580 - SOURCE1_RGB = 0x8581 - SRC1_RGB = 0x8581 - SOURCE2_RGB = 0x8582 - SRC2_RGB = 0x8582 - SOURCE0_ALPHA = 0x8588 - SRC0_ALPHA = 0x8588 - SOURCE1_ALPHA = 0x8589 - SRC1_ALPHA = 0x8589 - SOURCE2_ALPHA = 0x858A - SRC2_ALPHA = 0x858A - OPERAND0_RGB = 0x8590 - OPERAND1_RGB = 0x8591 - OPERAND2_RGB = 0x8592 - OPERAND0_ALPHA = 0x8598 - OPERAND1_ALPHA = 0x8599 - OPERAND2_ALPHA = 0x859A - VERTEX_ARRAY_BINDING = 0x85B5 - VERTEX_ATTRIB_ARRAY_ENABLED = 0x8622 - VERTEX_ATTRIB_ARRAY_SIZE = 0x8623 - VERTEX_ATTRIB_ARRAY_STRIDE = 0x8624 - VERTEX_ATTRIB_ARRAY_TYPE = 0x8625 - CURRENT_VERTEX_ATTRIB = 0x8626 - VERTEX_PROGRAM_POINT_SIZE = 0x8642 - VERTEX_PROGRAM_TWO_SIDE = 0x8643 - VERTEX_ATTRIB_ARRAY_POINTER = 0x8645 - TEXTURE_COMPRESSED_IMAGE_SIZE = 0x86A0 - TEXTURE_COMPRESSED = 0x86A1 - NUM_COMPRESSED_TEXTURE_FORMATS = 0x86A2 - COMPRESSED_TEXTURE_FORMATS = 0x86A3 - DOT3_RGB = 0x86AE - DOT3_RGBA = 0x86AF - BUFFER_SIZE = 0x8764 - BUFFER_USAGE = 0x8765 - STENCIL_BACK_FUNC = 0x8800 - STENCIL_BACK_FAIL = 0x8801 - STENCIL_BACK_PASS_DEPTH_FAIL = 0x8802 - STENCIL_BACK_PASS_DEPTH_PASS = 0x8803 - RGBA32F = 0x8814 - RGB32F = 0x8815 - RGBA16F = 0x881A - RGB16F = 0x881B - MAX_DRAW_BUFFERS = 0x8824 - DRAW_BUFFER0 = 0x8825 - DRAW_BUFFER1 = 0x8826 - DRAW_BUFFER2 = 0x8827 - DRAW_BUFFER3 = 0x8828 - DRAW_BUFFER4 = 0x8829 - DRAW_BUFFER5 = 0x882A - DRAW_BUFFER6 = 0x882B - DRAW_BUFFER7 = 0x882C - DRAW_BUFFER8 = 0x882D - DRAW_BUFFER9 = 0x882E - DRAW_BUFFER10 = 0x882F - DRAW_BUFFER11 = 0x8830 - DRAW_BUFFER12 = 0x8831 - DRAW_BUFFER13 = 0x8832 - DRAW_BUFFER14 = 0x8833 - DRAW_BUFFER15 = 0x8834 - BLEND_EQUATION_ALPHA = 0x883D - TEXTURE_DEPTH_SIZE = 0x884A - DEPTH_TEXTURE_MODE = 0x884B - TEXTURE_COMPARE_MODE = 0x884C - TEXTURE_COMPARE_FUNC = 0x884D - COMPARE_R_TO_TEXTURE = 0x884E - COMPARE_REF_TO_TEXTURE = 0x884E - POINT_SPRITE = 0x8861 - COORD_REPLACE = 0x8862 - QUERY_COUNTER_BITS = 0x8864 - CURRENT_QUERY = 0x8865 - QUERY_RESULT = 0x8866 - QUERY_RESULT_AVAILABLE = 0x8867 - MAX_VERTEX_ATTRIBS = 0x8869 - VERTEX_ATTRIB_ARRAY_NORMALIZED = 0x886A - MAX_TEXTURE_COORDS = 0x8871 - MAX_TEXTURE_IMAGE_UNITS = 0x8872 - ARRAY_BUFFER = 0x8892 - ELEMENT_ARRAY_BUFFER = 0x8893 - ARRAY_BUFFER_BINDING = 0x8894 - ELEMENT_ARRAY_BUFFER_BINDING = 0x8895 - VERTEX_ARRAY_BUFFER_BINDING = 0x8896 - NORMAL_ARRAY_BUFFER_BINDING = 0x8897 - COLOR_ARRAY_BUFFER_BINDING = 0x8898 - INDEX_ARRAY_BUFFER_BINDING = 0x8899 - TEXTURE_COORD_ARRAY_BUFFER_BINDING = 0x889A - EDGE_FLAG_ARRAY_BUFFER_BINDING = 0x889B - SECONDARY_COLOR_ARRAY_BUFFER_BINDING = 0x889C - FOG_COORDINATE_ARRAY_BUFFER_BINDING = 0x889D - FOG_COORD_ARRAY_BUFFER_BINDING = 0x889D - WEIGHT_ARRAY_BUFFER_BINDING = 0x889E - VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = 0x889F - READ_ONLY = 0x88B8 - WRITE_ONLY = 0x88B9 - READ_WRITE = 0x88BA - BUFFER_ACCESS = 0x88BB - BUFFER_MAPPED = 0x88BC - BUFFER_MAP_POINTER = 0x88BD - STREAM_DRAW = 0x88E0 - STREAM_READ = 0x88E1 - STREAM_COPY = 0x88E2 - STATIC_DRAW = 0x88E4 - STATIC_READ = 0x88E5 - STATIC_COPY = 0x88E6 - DYNAMIC_DRAW = 0x88E8 - DYNAMIC_READ = 0x88E9 - DYNAMIC_COPY = 0x88EA - PIXEL_PACK_BUFFER = 0x88EB - PIXEL_UNPACK_BUFFER = 0x88EC - PIXEL_PACK_BUFFER_BINDING = 0x88ED - PIXEL_UNPACK_BUFFER_BINDING = 0x88EF - DEPTH24_STENCIL8 = 0x88F0 - TEXTURE_STENCIL_SIZE = 0x88F1 - VERTEX_ATTRIB_ARRAY_INTEGER = 0x88FD - MAX_ARRAY_TEXTURE_LAYERS = 0x88FF - MIN_PROGRAM_TEXEL_OFFSET = 0x8904 - MAX_PROGRAM_TEXEL_OFFSET = 0x8905 - SAMPLES_PASSED = 0x8914 - CLAMP_VERTEX_COLOR = 0x891A - CLAMP_FRAGMENT_COLOR = 0x891B - CLAMP_READ_COLOR = 0x891C - FIXED_ONLY = 0x891D - FRAGMENT_SHADER = 0x8B30 - VERTEX_SHADER = 0x8B31 - MAX_FRAGMENT_UNIFORM_COMPONENTS = 0x8B49 - MAX_VERTEX_UNIFORM_COMPONENTS = 0x8B4A - MAX_VARYING_FLOATS = 0x8B4B - MAX_VARYING_COMPONENTS = 0x8B4B - MAX_VERTEX_TEXTURE_IMAGE_UNITS = 0x8B4C - MAX_COMBINED_TEXTURE_IMAGE_UNITS = 0x8B4D - SHADER_TYPE = 0x8B4F - FLOAT_VEC2 = 0x8B50 - FLOAT_VEC3 = 0x8B51 - FLOAT_VEC4 = 0x8B52 - INT_VEC2 = 0x8B53 - INT_VEC3 = 0x8B54 - INT_VEC4 = 0x8B55 - BOOL = 0x8B56 - BOOL_VEC2 = 0x8B57 - BOOL_VEC3 = 0x8B58 - BOOL_VEC4 = 0x8B59 - FLOAT_MAT2 = 0x8B5A - FLOAT_MAT3 = 0x8B5B - FLOAT_MAT4 = 0x8B5C - SAMPLER_1D = 0x8B5D - SAMPLER_2D = 0x8B5E - SAMPLER_3D = 0x8B5F - SAMPLER_CUBE = 0x8B60 - SAMPLER_1D_SHADOW = 0x8B61 - SAMPLER_2D_SHADOW = 0x8B62 - FLOAT_MAT2x3 = 0x8B65 - FLOAT_MAT2x4 = 0x8B66 - FLOAT_MAT3x2 = 0x8B67 - FLOAT_MAT3x4 = 0x8B68 - FLOAT_MAT4x2 = 0x8B69 - FLOAT_MAT4x3 = 0x8B6A - DELETE_STATUS = 0x8B80 - COMPILE_STATUS = 0x8B81 - LINK_STATUS = 0x8B82 - VALIDATE_STATUS = 0x8B83 - INFO_LOG_LENGTH = 0x8B84 - ATTACHED_SHADERS = 0x8B85 - ACTIVE_UNIFORMS = 0x8B86 - ACTIVE_UNIFORM_MAX_LENGTH = 0x8B87 - SHADER_SOURCE_LENGTH = 0x8B88 - ACTIVE_ATTRIBUTES = 0x8B89 - ACTIVE_ATTRIBUTE_MAX_LENGTH = 0x8B8A - SHADING_LANGUAGE_VERSION = 0x8B8C - CURRENT_PROGRAM = 0x8B8D - TEXTURE_RED_TYPE = 0x8C10 - TEXTURE_GREEN_TYPE = 0x8C11 - TEXTURE_BLUE_TYPE = 0x8C12 - TEXTURE_ALPHA_TYPE = 0x8C13 - TEXTURE_DEPTH_TYPE = 0x8C16 - UNSIGNED_NORMALIZED = 0x8C17 - TEXTURE_1D_ARRAY = 0x8C18 - PROXY_TEXTURE_1D_ARRAY = 0x8C19 - TEXTURE_2D_ARRAY = 0x8C1A - PROXY_TEXTURE_2D_ARRAY = 0x8C1B - TEXTURE_BINDING_1D_ARRAY = 0x8C1C - TEXTURE_BINDING_2D_ARRAY = 0x8C1D - R11F_G11F_B10F = 0x8C3A - UNSIGNED_INT_10F_11F_11F_REV = 0x8C3B - RGB9_E5 = 0x8C3D - UNSIGNED_INT_5_9_9_9_REV = 0x8C3E - TEXTURE_SHARED_SIZE = 0x8C3F - SRGB = 0x8C40 - SRGB8 = 0x8C41 - SRGB_ALPHA = 0x8C42 - SRGB8_ALPHA8 = 0x8C43 - SLUMINANCE_ALPHA = 0x8C44 - SLUMINANCE8_ALPHA8 = 0x8C45 - SLUMINANCE = 0x8C46 - SLUMINANCE8 = 0x8C47 - COMPRESSED_SRGB = 0x8C48 - COMPRESSED_SRGB_ALPHA = 0x8C49 - COMPRESSED_SLUMINANCE = 0x8C4A - COMPRESSED_SLUMINANCE_ALPHA = 0x8C4B - TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH = 0x8C76 - TRANSFORM_FEEDBACK_BUFFER_MODE = 0x8C7F - MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS = 0x8C80 - TRANSFORM_FEEDBACK_VARYINGS = 0x8C83 - TRANSFORM_FEEDBACK_BUFFER_START = 0x8C84 - TRANSFORM_FEEDBACK_BUFFER_SIZE = 0x8C85 - PRIMITIVES_GENERATED = 0x8C87 - TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN = 0x8C88 - RASTERIZER_DISCARD = 0x8C89 - MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS = 0x8C8A - MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS = 0x8C8B - INTERLEAVED_ATTRIBS = 0x8C8C - SEPARATE_ATTRIBS = 0x8C8D - TRANSFORM_FEEDBACK_BUFFER = 0x8C8E - TRANSFORM_FEEDBACK_BUFFER_BINDING = 0x8C8F - POINT_SPRITE_COORD_ORIGIN = 0x8CA0 - LOWER_LEFT = 0x8CA1 - UPPER_LEFT = 0x8CA2 - STENCIL_BACK_REF = 0x8CA3 - STENCIL_BACK_VALUE_MASK = 0x8CA4 - STENCIL_BACK_WRITEMASK = 0x8CA5 - DRAW_FRAMEBUFFER_BINDING = 0x8CA6 - FRAMEBUFFER_BINDING = 0x8CA6 - RENDERBUFFER_BINDING = 0x8CA7 - READ_FRAMEBUFFER = 0x8CA8 - DRAW_FRAMEBUFFER = 0x8CA9 - READ_FRAMEBUFFER_BINDING = 0x8CAA - RENDERBUFFER_SAMPLES = 0x8CAB - DEPTH_COMPONENT32F = 0x8CAC - DEPTH32F_STENCIL8 = 0x8CAD - FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE = 0x8CD0 - FRAMEBUFFER_ATTACHMENT_OBJECT_NAME = 0x8CD1 - FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL = 0x8CD2 - FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE = 0x8CD3 - FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER = 0x8CD4 - FRAMEBUFFER_COMPLETE = 0x8CD5 - FRAMEBUFFER_INCOMPLETE_ATTACHMENT = 0x8CD6 - FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = 0x8CD7 - FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER = 0x8CDB - FRAMEBUFFER_INCOMPLETE_READ_BUFFER = 0x8CDC - FRAMEBUFFER_UNSUPPORTED = 0x8CDD - MAX_COLOR_ATTACHMENTS = 0x8CDF - COLOR_ATTACHMENT0 = 0x8CE0 - COLOR_ATTACHMENT1 = 0x8CE1 - COLOR_ATTACHMENT2 = 0x8CE2 - COLOR_ATTACHMENT3 = 0x8CE3 - COLOR_ATTACHMENT4 = 0x8CE4 - COLOR_ATTACHMENT5 = 0x8CE5 - COLOR_ATTACHMENT6 = 0x8CE6 - COLOR_ATTACHMENT7 = 0x8CE7 - COLOR_ATTACHMENT8 = 0x8CE8 - COLOR_ATTACHMENT9 = 0x8CE9 - COLOR_ATTACHMENT10 = 0x8CEA - COLOR_ATTACHMENT11 = 0x8CEB - COLOR_ATTACHMENT12 = 0x8CEC - COLOR_ATTACHMENT13 = 0x8CED - COLOR_ATTACHMENT14 = 0x8CEE - COLOR_ATTACHMENT15 = 0x8CEF - DEPTH_ATTACHMENT = 0x8D00 - STENCIL_ATTACHMENT = 0x8D20 - FRAMEBUFFER = 0x8D40 - RENDERBUFFER = 0x8D41 - RENDERBUFFER_WIDTH = 0x8D42 - RENDERBUFFER_HEIGHT = 0x8D43 - RENDERBUFFER_INTERNAL_FORMAT = 0x8D44 - STENCIL_INDEX1 = 0x8D46 - STENCIL_INDEX4 = 0x8D47 - STENCIL_INDEX8 = 0x8D48 - STENCIL_INDEX16 = 0x8D49 - RENDERBUFFER_RED_SIZE = 0x8D50 - RENDERBUFFER_GREEN_SIZE = 0x8D51 - RENDERBUFFER_BLUE_SIZE = 0x8D52 - RENDERBUFFER_ALPHA_SIZE = 0x8D53 - RENDERBUFFER_DEPTH_SIZE = 0x8D54 - RENDERBUFFER_STENCIL_SIZE = 0x8D55 - FRAMEBUFFER_INCOMPLETE_MULTISAMPLE = 0x8D56 - MAX_SAMPLES = 0x8D57 - RGBA32UI = 0x8D70 - RGB32UI = 0x8D71 - RGBA16UI = 0x8D76 - RGB16UI = 0x8D77 - RGBA8UI = 0x8D7C - RGB8UI = 0x8D7D - RGBA32I = 0x8D82 - RGB32I = 0x8D83 - RGBA16I = 0x8D88 - RGB16I = 0x8D89 - RGBA8I = 0x8D8E - RGB8I = 0x8D8F - RED_INTEGER = 0x8D94 - GREEN_INTEGER = 0x8D95 - BLUE_INTEGER = 0x8D96 - ALPHA_INTEGER = 0x8D97 - RGB_INTEGER = 0x8D98 - RGBA_INTEGER = 0x8D99 - BGR_INTEGER = 0x8D9A - BGRA_INTEGER = 0x8D9B - FLOAT_32_UNSIGNED_INT_24_8_REV = 0x8DAD - FRAMEBUFFER_SRGB = 0x8DB9 - COMPRESSED_RED_RGTC1 = 0x8DBB - COMPRESSED_SIGNED_RED_RGTC1 = 0x8DBC - COMPRESSED_RG_RGTC2 = 0x8DBD - COMPRESSED_SIGNED_RG_RGTC2 = 0x8DBE - SAMPLER_1D_ARRAY = 0x8DC0 - SAMPLER_2D_ARRAY = 0x8DC1 - SAMPLER_1D_ARRAY_SHADOW = 0x8DC3 - SAMPLER_2D_ARRAY_SHADOW = 0x8DC4 - SAMPLER_CUBE_SHADOW = 0x8DC5 - UNSIGNED_INT_VEC2 = 0x8DC6 - UNSIGNED_INT_VEC3 = 0x8DC7 - UNSIGNED_INT_VEC4 = 0x8DC8 - INT_SAMPLER_1D = 0x8DC9 - INT_SAMPLER_2D = 0x8DCA - INT_SAMPLER_3D = 0x8DCB - INT_SAMPLER_CUBE = 0x8DCC - INT_SAMPLER_1D_ARRAY = 0x8DCE - INT_SAMPLER_2D_ARRAY = 0x8DCF - UNSIGNED_INT_SAMPLER_1D = 0x8DD1 - UNSIGNED_INT_SAMPLER_2D = 0x8DD2 - UNSIGNED_INT_SAMPLER_3D = 0x8DD3 - UNSIGNED_INT_SAMPLER_CUBE = 0x8DD4 - UNSIGNED_INT_SAMPLER_1D_ARRAY = 0x8DD6 - UNSIGNED_INT_SAMPLER_2D_ARRAY = 0x8DD7 - QUERY_WAIT = 0x8E13 - QUERY_NO_WAIT = 0x8E14 - QUERY_BY_REGION_WAIT = 0x8E15 - QUERY_BY_REGION_NO_WAIT = 0x8E16 - BUFFER_ACCESS_FLAGS = 0x911F - BUFFER_MAP_LENGTH = 0x9120 - BUFFER_MAP_OFFSET = 0x9121 -) - -// https://www.opengl.org/sdk/docs/man3/xhtml/glViewport.xml -func (gl *GL) Viewport(x, y, width, height int) { - C.gl3_0_glViewport(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// DepthRange specifies the mapping of depth values from normalized device -// coordinates to window coordinates. -// -// Parameter nearVal specifies the mapping of the near clipping plane to window -// coordinates (defaults to 0), while farVal specifies the mapping of the far -// clipping plane to window coordinates (defaults to 1). -// -// After clipping and division by w, depth coordinates range from -1 to 1, -// corresponding to the near and far clipping planes. DepthRange specifies a -// linear mapping of the normalized depth coordinates in this range to window -// depth coordinates. Regardless of the actual depth buffer implementation, -// window coordinate depth values are treated as though they range from 0 through 1 -// (like color components). Thus, the values accepted by DepthRange are both -// clamped to this range before they are accepted. -// -// The default setting of (0, 1) maps the near plane to 0 and the far plane to 1. -// With this mapping, the depth buffer range is fully utilized. -// -// It is not necessary that nearVal be less than farVal. Reverse mappings such as -// nearVal 1, and farVal 0 are acceptable. -// -// GL.INVALID_OPERATION is generated if DepthRange is executed between the -// execution of Begin and the corresponding execution of End. -func (gl *GL) DepthRange(nearVal, farVal float64) { - C.gl3_0_glDepthRange(gl.funcs, C.GLdouble(nearVal), C.GLdouble(farVal)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsEnabled.xml -func (gl *GL) IsEnabled(cap glbase.Enum) bool { - glresult := C.gl3_0_glIsEnabled(gl.funcs, C.GLenum(cap)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetTexLevelParameteriv.xml -func (gl *GL) GetTexLevelParameteriv(target glbase.Enum, level int, pname glbase.Enum, params []int32) { - C.gl3_0_glGetTexLevelParameteriv(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetTexLevelParameterfv.xml -func (gl *GL) GetTexLevelParameterfv(target glbase.Enum, level int, pname glbase.Enum, params []float32) { - C.gl3_0_glGetTexLevelParameterfv(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetTexParameteriv.xml -func (gl *GL) GetTexParameteriv(target, pname glbase.Enum, params []int32) { - C.gl3_0_glGetTexParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetTexParameterfv.xml -func (gl *GL) GetTexParameterfv(target, pname glbase.Enum, params []float32) { - C.gl3_0_glGetTexParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetTexImage.xml -func (gl *GL) GetTexImage(target glbase.Enum, level int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl3_0_glGetTexImage(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetIntegerv.xml -func (gl *GL) GetIntegerv(pname glbase.Enum, params []int32) { - C.gl3_0_glGetIntegerv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetFloatv.xml -func (gl *GL) GetFloatv(pname glbase.Enum, params []float32) { - C.gl3_0_glGetFloatv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetError.xml -func (gl *GL) GetError() glbase.Enum { - glresult := C.gl3_0_glGetError(gl.funcs) - return glbase.Enum(glresult) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetDoublev.xml -func (gl *GL) GetDoublev(pname glbase.Enum, params []float64) { - C.gl3_0_glGetDoublev(gl.funcs, C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetBooleanv.xml -func (gl *GL) GetBooleanv(pname glbase.Enum, params []bool) { - C.gl3_0_glGetBooleanv(gl.funcs, C.GLenum(pname), (*C.GLboolean)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glReadPixels.xml -func (gl *GL) ReadPixels(x, y, width, height int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl3_0_glReadPixels(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glReadBuffer.xml -func (gl *GL) ReadBuffer(mode glbase.Enum) { - C.gl3_0_glReadBuffer(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPixelStorei.xml -func (gl *GL) PixelStorei(pname glbase.Enum, param int32) { - C.gl3_0_glPixelStorei(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPixelStoref.xml -func (gl *GL) PixelStoref(pname glbase.Enum, param float32) { - C.gl3_0_glPixelStoref(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDepthFunc.xml -func (gl *GL) DepthFunc(glfunc glbase.Enum) { - C.gl3_0_glDepthFunc(gl.funcs, C.GLenum(glfunc)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glStencilOp.xml -func (gl *GL) StencilOp(fail, zfail, zpass glbase.Enum) { - C.gl3_0_glStencilOp(gl.funcs, C.GLenum(fail), C.GLenum(zfail), C.GLenum(zpass)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glStencilFunc.xml -func (gl *GL) StencilFunc(glfunc glbase.Enum, ref int32, mask uint32) { - C.gl3_0_glStencilFunc(gl.funcs, C.GLenum(glfunc), C.GLint(ref), C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glLogicOp.xml -func (gl *GL) LogicOp(opcode glbase.Enum) { - C.gl3_0_glLogicOp(gl.funcs, C.GLenum(opcode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBlendFunc.xml -func (gl *GL) BlendFunc(sfactor, dfactor glbase.Enum) { - C.gl3_0_glBlendFunc(gl.funcs, C.GLenum(sfactor), C.GLenum(dfactor)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFlush.xml -func (gl *GL) Flush() { - C.gl3_0_glFlush(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFinish.xml -func (gl *GL) Finish() { - C.gl3_0_glFinish(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEnable.xml -func (gl *GL) Enable(cap glbase.Enum) { - C.gl3_0_glEnable(gl.funcs, C.GLenum(cap)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDisable.xml -func (gl *GL) Disable(cap glbase.Enum) { - C.gl3_0_glDisable(gl.funcs, C.GLenum(cap)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDepthMask.xml -func (gl *GL) DepthMask(flag bool) { - C.gl3_0_glDepthMask(gl.funcs, *(*C.GLboolean)(unsafe.Pointer(&flag))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColorMask.xml -func (gl *GL) ColorMask(red, green, blue, alpha bool) { - C.gl3_0_glColorMask(gl.funcs, *(*C.GLboolean)(unsafe.Pointer(&red)), *(*C.GLboolean)(unsafe.Pointer(&green)), *(*C.GLboolean)(unsafe.Pointer(&blue)), *(*C.GLboolean)(unsafe.Pointer(&alpha))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glStencilMask.xml -func (gl *GL) StencilMask(mask uint32) { - C.gl3_0_glStencilMask(gl.funcs, C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClearDepth.xml -func (gl *GL) ClearDepth(depth float64) { - C.gl3_0_glClearDepth(gl.funcs, C.GLdouble(depth)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClearStencil.xml -func (gl *GL) ClearStencil(s int32) { - C.gl3_0_glClearStencil(gl.funcs, C.GLint(s)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClearColor.xml -func (gl *GL) ClearColor(red, green, blue, alpha float32) { - C.gl3_0_glClearColor(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClear.xml -func (gl *GL) Clear(mask glbase.Bitfield) { - C.gl3_0_glClear(gl.funcs, C.GLbitfield(mask)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDrawBuffer.xml -func (gl *GL) DrawBuffer(mode glbase.Enum) { - C.gl3_0_glDrawBuffer(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexImage2D.xml -func (gl *GL) TexImage2D(target glbase.Enum, level int, internalFormat int32, width, height, border int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl3_0_glTexImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLint(border), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexImage1D.xml -func (gl *GL) TexImage1D(target glbase.Enum, level int, internalFormat int32, width, border int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl3_0_glTexImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(internalFormat), C.GLsizei(width), C.GLint(border), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexParameteriv.xml -func (gl *GL) TexParameteriv(target, pname glbase.Enum, params []int32) { - C.gl3_0_glTexParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexParameteri.xml -func (gl *GL) TexParameteri(target, pname glbase.Enum, param int32) { - C.gl3_0_glTexParameteri(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexParameterfv.xml -func (gl *GL) TexParameterfv(target, pname glbase.Enum, params []float32) { - C.gl3_0_glTexParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexParameterf.xml -func (gl *GL) TexParameterf(target, pname glbase.Enum, param float32) { - C.gl3_0_glTexParameterf(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glScissor.xml -func (gl *GL) Scissor(x, y, width, height int) { - C.gl3_0_glScissor(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPolygonMode.xml -func (gl *GL) PolygonMode(face, mode glbase.Enum) { - C.gl3_0_glPolygonMode(gl.funcs, C.GLenum(face), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPointSize.xml -func (gl *GL) PointSize(size float32) { - C.gl3_0_glPointSize(gl.funcs, C.GLfloat(size)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glLineWidth.xml -func (gl *GL) LineWidth(width float32) { - C.gl3_0_glLineWidth(gl.funcs, C.GLfloat(width)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glHint.xml -func (gl *GL) Hint(target, mode glbase.Enum) { - C.gl3_0_glHint(gl.funcs, C.GLenum(target), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFrontFace.xml -func (gl *GL) FrontFace(mode glbase.Enum) { - C.gl3_0_glFrontFace(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCullFace.xml -func (gl *GL) CullFace(mode glbase.Enum) { - C.gl3_0_glCullFace(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIndexubv.xml -func (gl *GL) Indexubv(c []uint8) { - C.gl3_0_glIndexubv(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIndexub.xml -func (gl *GL) Indexub(c uint8) { - C.gl3_0_glIndexub(gl.funcs, C.GLubyte(c)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsTexture.xml -func (gl *GL) IsTexture(texture glbase.Texture) bool { - glresult := C.gl3_0_glIsTexture(gl.funcs, C.GLuint(texture)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// GenTextures returns n texture names in textures. There is no guarantee -// that the names form a contiguous set of integers; however, it is -// guaranteed that none of the returned names was in use immediately before -// the call to GenTextures. -// -// The generated textures have no dimensionality; they assume the -// dimensionality of the texture target to which they are first bound (see -// BindTexture). -// -// Texture names returned by a call to GenTextures are not returned by -// subsequent calls, unless they are first deleted with DeleteTextures. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// GenTextures is available in GL version 2.0 or greater. -func (gl *GL) GenTextures(n int) []glbase.Texture { - if n == 0 { - return nil - } - textures := make([]glbase.Texture, n) - C.gl3_0_glGenTextures(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0]))) - return textures -} - -// DeleteTextures deletes the textures objects whose names are stored -// in the textures slice. After a texture is deleted, it has no contents or -// dimensionality, and its name is free for reuse (for example by -// GenTextures). If a texture that is currently bound is deleted, the binding -// reverts to 0 (the default texture). -// -// DeleteTextures silently ignores 0's and names that do not correspond to -// existing textures. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// DeleteTextures is available in GL version 2.0 or greater. -func (gl *GL) DeleteTextures(textures []glbase.Texture) { - n := len(textures) - if n == 0 { - return - } - C.gl3_0_glDeleteTextures(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBindTexture.xml -func (gl *GL) BindTexture(target glbase.Enum, texture glbase.Texture) { - C.gl3_0_glBindTexture(gl.funcs, C.GLenum(target), C.GLuint(texture)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexSubImage2D.xml -func (gl *GL) TexSubImage2D(target glbase.Enum, level, xoffset, yoffset, width, height int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl3_0_glTexSubImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexSubImage1D.xml -func (gl *GL) TexSubImage1D(target glbase.Enum, level, xoffset, width int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl3_0_glTexSubImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLsizei(width), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCopyTexSubImage2D.xml -func (gl *GL) CopyTexSubImage2D(target glbase.Enum, level, xoffset, yoffset, x, y, width, height int) { - C.gl3_0_glCopyTexSubImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCopyTexSubImage1D.xml -func (gl *GL) CopyTexSubImage1D(target glbase.Enum, level, xoffset, x, y, width int) { - C.gl3_0_glCopyTexSubImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(x), C.GLint(y), C.GLsizei(width)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCopyTexImage2D.xml -func (gl *GL) CopyTexImage2D(target glbase.Enum, level int, internalFormat glbase.Enum, x, y, width, height, border int) { - C.gl3_0_glCopyTexImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height), C.GLint(border)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCopyTexImage1D.xml -func (gl *GL) CopyTexImage1D(target glbase.Enum, level int, internalFormat glbase.Enum, x, y, width, border int) { - C.gl3_0_glCopyTexImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLint(border)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPolygonOffset.xml -func (gl *GL) PolygonOffset(factor, units float32) { - C.gl3_0_glPolygonOffset(gl.funcs, C.GLfloat(factor), C.GLfloat(units)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDrawElements.xml -func (gl *GL) DrawElements(mode glbase.Enum, count int, gltype glbase.Enum, indices interface{}) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl3_0_glDrawElements(gl.funcs, C.GLenum(mode), C.GLsizei(count), C.GLenum(gltype), indices_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDrawArrays.xml -func (gl *GL) DrawArrays(mode glbase.Enum, first, count int) { - C.gl3_0_glDrawArrays(gl.funcs, C.GLenum(mode), C.GLint(first), C.GLsizei(count)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCopyTexSubImage3D.xml -func (gl *GL) CopyTexSubImage3D(target glbase.Enum, level, xoffset, yoffset int, zoffset int32, x, y, width, height int) { - C.gl3_0_glCopyTexSubImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(zoffset), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexSubImage3D.xml -func (gl *GL) TexSubImage3D(target glbase.Enum, level, xoffset, yoffset int, zoffset int32, width, height int, depth int32, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl3_0_glTexSubImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(zoffset), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexImage3D.xml -func (gl *GL) TexImage3D(target glbase.Enum, level int, internalFormat int32, width, height int, depth int32, border int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl3_0_glTexImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLint(border), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDrawRangeElements.xml -func (gl *GL) DrawRangeElements(mode glbase.Enum, start, end uint32, count int, gltype glbase.Enum, indices interface{}) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl3_0_glDrawRangeElements(gl.funcs, C.GLenum(mode), C.GLuint(start), C.GLuint(end), C.GLsizei(count), C.GLenum(gltype), indices_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBlendEquation.xml -func (gl *GL) BlendEquation(mode glbase.Enum) { - C.gl3_0_glBlendEquation(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBlendColor.xml -func (gl *GL) BlendColor(red, green, blue, alpha float32) { - C.gl3_0_glBlendColor(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetCompressedTexImage.xml -func (gl *GL) GetCompressedTexImage(target glbase.Enum, level int, img interface{}) { - var img_ptr unsafe.Pointer - var img_v = reflect.ValueOf(img) - if img != nil && img_v.Kind() != reflect.Slice { - panic("parameter img must be a slice") - } - if img != nil { - img_ptr = unsafe.Pointer(img_v.Index(0).Addr().Pointer()) - } - C.gl3_0_glGetCompressedTexImage(gl.funcs, C.GLenum(target), C.GLint(level), img_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCompressedTexSubImage1D.xml -func (gl *GL) CompressedTexSubImage1D(target glbase.Enum, level, xoffset, width int, format glbase.Enum, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl3_0_glCompressedTexSubImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLsizei(width), C.GLenum(format), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCompressedTexSubImage2D.xml -func (gl *GL) CompressedTexSubImage2D(target glbase.Enum, level, xoffset, yoffset, width, height int, format glbase.Enum, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl3_0_glCompressedTexSubImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCompressedTexSubImage3D.xml -func (gl *GL) CompressedTexSubImage3D(target glbase.Enum, level, xoffset, yoffset int, zoffset int32, width, height int, depth int32, format glbase.Enum, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl3_0_glCompressedTexSubImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(zoffset), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLenum(format), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCompressedTexImage1D.xml -func (gl *GL) CompressedTexImage1D(target glbase.Enum, level int, internalFormat glbase.Enum, width, border, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl3_0_glCompressedTexImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLsizei(width), C.GLint(border), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCompressedTexImage2D.xml -func (gl *GL) CompressedTexImage2D(target glbase.Enum, level int, internalFormat glbase.Enum, width, height, border, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl3_0_glCompressedTexImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLint(border), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCompressedTexImage3D.xml -func (gl *GL) CompressedTexImage3D(target glbase.Enum, level int, internalFormat glbase.Enum, width, height int, depth int32, border, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl3_0_glCompressedTexImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLint(border), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSampleCoverage.xml -func (gl *GL) SampleCoverage(value float32, invert bool) { - C.gl3_0_glSampleCoverage(gl.funcs, C.GLfloat(value), *(*C.GLboolean)(unsafe.Pointer(&invert))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glActiveTexture.xml -func (gl *GL) ActiveTexture(texture glbase.Enum) { - C.gl3_0_glActiveTexture(gl.funcs, C.GLenum(texture)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPointParameteriv.xml -func (gl *GL) PointParameteriv(pname glbase.Enum, params []int32) { - C.gl3_0_glPointParameteriv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPointParameteri.xml -func (gl *GL) PointParameteri(pname glbase.Enum, param int32) { - C.gl3_0_glPointParameteri(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPointParameterfv.xml -func (gl *GL) PointParameterfv(pname glbase.Enum, params []float32) { - C.gl3_0_glPointParameterfv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPointParameterf.xml -func (gl *GL) PointParameterf(pname glbase.Enum, param float32) { - C.gl3_0_glPointParameterf(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiDrawArrays.xml -func (gl *GL) MultiDrawArrays(mode glbase.Enum, first, count []int, drawcount int32) { - C.gl3_0_glMultiDrawArrays(gl.funcs, C.GLenum(mode), (*C.GLint)(unsafe.Pointer(&first[0])), (*C.GLsizei)(unsafe.Pointer(&count[0])), C.GLsizei(drawcount)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBlendFuncSeparate.xml -func (gl *GL) BlendFuncSeparate(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha glbase.Enum) { - C.gl3_0_glBlendFuncSeparate(gl.funcs, C.GLenum(sfactorRGB), C.GLenum(dfactorRGB), C.GLenum(sfactorAlpha), C.GLenum(dfactorAlpha)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetBufferParameteriv.xml -func (gl *GL) GetBufferParameteriv(target, pname glbase.Enum, params []int32) { - C.gl3_0_glGetBufferParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glUnmapBuffer.xml -func (gl *GL) UnmapBuffer(target glbase.Enum) bool { - glresult := C.gl3_0_glUnmapBuffer(gl.funcs, C.GLenum(target)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetBufferSubData.xml -func (gl *GL) GetBufferSubData(target glbase.Enum, offset, size int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl3_0_glGetBufferSubData(gl.funcs, C.GLenum(target), C.GLintptr(offset), C.GLsizeiptr(size), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBufferSubData.xml -func (gl *GL) BufferSubData(target glbase.Enum, offset, size int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl3_0_glBufferSubData(gl.funcs, C.GLenum(target), C.GLintptr(offset), C.GLsizeiptr(size), data_ptr) -} - -// BufferData creates a new data store for the buffer object currently -// bound to target. Any pre-existing data store is deleted. The new data -// store is created with the specified size in bytes and usage. If data is -// not nil, it must be a slice that is used to initialize the data store. -// In that case the size parameter is ignored and the store size will match -// the slice data size. -// -// In its initial state, the new data store is not mapped, it has a NULL -// mapped pointer, and its mapped access is GL.READ_WRITE. -// -// The target constant must be one of GL.ARRAY_BUFFER, GL.COPY_READ_BUFFER, -// GL.COPY_WRITE_BUFFER, GL.ELEMENT_ARRAY_BUFFER, GL.PIXEL_PACK_BUFFER, -// GL.PIXEL_UNPACK_BUFFER, GL.TEXTURE_BUFFER, GL.TRANSFORM_FEEDBACK_BUFFER, -// or GL.UNIFORM_BUFFER. -// -// The usage parameter is a hint to the GL implementation as to how a buffer -// object's data store will be accessed. This enables the GL implementation -// to make more intelligent decisions that may significantly impact buffer -// object performance. It does not, however, constrain the actual usage of -// the data store. usage can be broken down into two parts: first, the -// frequency of access (modification and usage), and second, the nature of -// that access. -// -// A usage frequency of STREAM and nature of DRAW is specified via the -// constant GL.STREAM_DRAW, for example. -// -// The usage frequency of access may be one of: -// -// STREAM -// The data store contents will be modified once and used at most a few times. -// -// STATIC -// The data store contents will be modified once and used many times. -// -// DYNAMIC -// The data store contents will be modified repeatedly and used many times. -// -// The usage nature of access may be one of: -// -// DRAW -// The data store contents are modified by the application, and used as -// the source for GL drawing and image specification commands. -// -// READ -// The data store contents are modified by reading data from the GL, -// and used to return that data when queried by the application. -// -// COPY -// The data store contents are modified by reading data from the GL, -// and used as the source for GL drawing and image specification -// commands. -// -// Clients must align data elements consistent with the requirements of the -// client platform, with an additional base-level requirement that an offset -// within a buffer to a datum comprising N bytes be a multiple of N. -// -// Error GL.INVALID_ENUM is generated if target is not one of the accepted -// buffer targets. GL.INVALID_ENUM is generated if usage is not -// GL.STREAM_DRAW, GL.STREAM_READ, GL.STREAM_COPY, GL.STATIC_DRAW, -// GL.STATIC_READ, GL.STATIC_COPY, GL.DYNAMIC_DRAW, GL.DYNAMIC_READ, or -// GL.DYNAMIC_COPY. GL.INVALID_VALUE is generated if size is negative. -// GL.INVALID_OPERATION is generated if the reserved buffer object name 0 is -// bound to target. GL.OUT_OF_MEMORY is generated if the GL is unable to -// create a data store with the specified size. -func (gl *GL) BufferData(target glbase.Enum, size int, data interface{}, usage glbase.Enum) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - if data != nil { - size = int(data_v.Type().Size()) * data_v.Len() - } - C.gl3_0_glBufferData(gl.funcs, C.GLenum(target), C.GLsizeiptr(size), data_ptr, C.GLenum(usage)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsBuffer.xml -func (gl *GL) IsBuffer(buffer glbase.Buffer) bool { - glresult := C.gl3_0_glIsBuffer(gl.funcs, C.GLuint(buffer)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// GenBuffers returns n buffer object names. There is no guarantee that -// the names form a contiguous set of integers; however, it is guaranteed -// that none of the returned names was in use immediately before the call to -// GenBuffers. -// -// Buffer object names returned by a call to GenBuffers are not returned by -// subsequent calls, unless they are first deleted with DeleteBuffers. -// -// No buffer objects are associated with the returned buffer object names -// until they are first bound by calling BindBuffer. -// -// Error GL.INVALID_VALUE is generated if n is negative. GL.INVALID_OPERATION -// is generated if GenBuffers is executed between the execution of Begin -// and the corresponding execution of End. -// -// GenBuffers is available in GL version 1.5 or greater. -func (gl *GL) GenBuffers(n int) []glbase.Buffer { - if n == 0 { - return nil - } - buffers := make([]glbase.Buffer, n) - C.gl3_0_glGenBuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&buffers[0]))) - return buffers -} - -// DeleteBuffers deletes the buffer objects whose names are stored in the -// buffers slice. -// -// After a buffer object is deleted, it has no contents, and its name is free -// for reuse (for example by GenBuffers). If a buffer object that is -// currently bound is deleted, the binding reverts to 0 (the absence of any -// buffer object, which reverts to client memory usage). -// -// DeleteBuffers silently ignores 0's and names that do not correspond to -// existing buffer objects. -// -// Error GL.INVALID_VALUE is generated if n is negative. GL.INVALID_OPERATION -// is generated if DeleteBuffers is executed between the execution of Begin -// and the corresponding execution of End. -// -// DeleteBuffers is available in GL version 1.5 or greater. -func (gl *GL) DeleteBuffers(buffers []glbase.Buffer) { - n := len(buffers) - if n == 0 { - return - } - C.gl3_0_glDeleteBuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&buffers[0]))) -} - -// BindBuffer creates or puts in use a named buffer object. -// Calling BindBuffer with target set to GL.ARRAY_BUFFER, -// GL.ELEMENT_ARRAY_BUFFER, GL.PIXEL_PACK_BUFFER or GL.PIXEL_UNPACK_BUFFER -// and buffer set to the name of the new buffer object binds the buffer -// object name to the target. When a buffer object is bound to a target, the -// previous binding for that target is automatically broken. -// -// Buffer object names are unsigned integers. The value zero is reserved, but -// there is no default buffer object for each buffer object target. Instead, -// buffer set to zero effectively unbinds any buffer object previously bound, -// and restores client memory usage for that buffer object target. Buffer -// object names and the corresponding buffer object contents are local to the -// shared display-list space (see XCreateContext) of the current GL rendering -// context; two rendering contexts share buffer object names only if they -// also share display lists. -// -// GenBuffers may be called to generate a set of new buffer object names. -// -// The state of a buffer object immediately after it is first bound is an -// unmapped zero-sized memory buffer with GL.READ_WRITE access and -// GL.STATIC_DRAW usage. -// -// While a non-zero buffer object name is bound, GL operations on the target -// to which it is bound affect the bound buffer object, and queries of the -// target to which it is bound return state from the bound buffer object. -// While buffer object name zero is bound, as in the initial state, attempts -// to modify or query state on the target to which it is bound generates an -// GL.INVALID_OPERATION error. -// -// When vertex array pointer state is changed, for example by a call to -// NormalPointer, the current buffer object binding (GL.ARRAY_BUFFER_BINDING) -// is copied into the corresponding client state for the vertex array type -// being changed, for example GL.NORMAL_ARRAY_BUFFER_BINDING. While a -// non-zero buffer object is bound to the GL.ARRAY_BUFFER target, the vertex -// array pointer parameter that is traditionally interpreted as a pointer to -// client-side memory is instead interpreted as an offset within the buffer -// object measured in basic machine units. -// -// While a non-zero buffer object is bound to the GL.ELEMENT_ARRAY_BUFFER -// target, the indices parameter of DrawElements, DrawRangeElements, or -// MultiDrawElements that is traditionally interpreted as a pointer to -// client-side memory is instead interpreted as an offset within the buffer -// object measured in basic machine units. -// -// While a non-zero buffer object is bound to the GL.PIXEL_PACK_BUFFER -// target, the following commands are affected: GetCompressedTexImage, -// GetConvolutionFilter, GetHistogram, GetMinmax, GetPixelMap, -// GetPolygonStipple, GetSeparableFilter, GetTexImage, and ReadPixels. The -// pointer parameter that is traditionally interpreted as a pointer to -// client-side memory where the pixels are to be packed is instead -// interpreted as an offset within the buffer object measured in basic -// machine units. -// -// While a non-zero buffer object is bound to the GL.PIXEL_UNPACK_BUFFER -// target, the following commands are affected: Bitmap, ColorSubTable, -// ColorTable, CompressedTexImage1D, CompressedTexImage2D, -// CompressedTexImage3D, CompressedTexSubImage1D, CompressedTexSubImage2D, -// CompressedTexSubImage3D, ConvolutionFilter1D, ConvolutionFilter2D, -// DrawPixels, PixelMap, PolygonStipple, SeparableFilter2D, TexImage1D, -// TexImage2D, TexImage3D, TexSubImage1D, TexSubImage2D, and TexSubImage3D. -// The pointer parameter that is traditionally interpreted as a pointer to -// client-side memory from which the pixels are to be unpacked is instead -// interpreted as an offset within the buffer object measured in basic -// machine units. -// -// A buffer object binding created with BindBuffer remains active until a -// different buffer object name is bound to the same target, or until the -// bound buffer object is deleted with DeleteBuffers. -// -// Once created, a named buffer object may be re-bound to any target as often -// as needed. However, the GL implementation may make choices about how to -// optimize the storage of a buffer object based on its initial binding -// target. -// -// Error GL.INVALID_ENUM is generated if target is not one of the allowable -// values. GL.INVALID_OPERATION is generated if BindBuffer is executed -// between the execution of Begin and the corresponding execution of End. -// -// BindBuffer is available in GL version 1.5 or greater. -func (gl *GL) BindBuffer(target glbase.Enum, buffer glbase.Buffer) { - C.gl3_0_glBindBuffer(gl.funcs, C.GLenum(target), C.GLuint(buffer)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetQueryObjectuiv.xml -func (gl *GL) GetQueryObjectuiv(id uint32, pname glbase.Enum, params []uint32) { - C.gl3_0_glGetQueryObjectuiv(gl.funcs, C.GLuint(id), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetQueryObjectiv.xml -func (gl *GL) GetQueryObjectiv(id uint32, pname glbase.Enum, params []int32) { - C.gl3_0_glGetQueryObjectiv(gl.funcs, C.GLuint(id), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetQueryiv.xml -func (gl *GL) GetQueryiv(target, pname glbase.Enum, params []int32) { - C.gl3_0_glGetQueryiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEndQuery.xml -func (gl *GL) EndQuery(target glbase.Enum) { - C.gl3_0_glEndQuery(gl.funcs, C.GLenum(target)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBeginQuery.xml -func (gl *GL) BeginQuery(target glbase.Enum, id uint32) { - C.gl3_0_glBeginQuery(gl.funcs, C.GLenum(target), C.GLuint(id)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsQuery.xml -func (gl *GL) IsQuery(id uint32) bool { - glresult := C.gl3_0_glIsQuery(gl.funcs, C.GLuint(id)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDeleteQueries.xml -func (gl *GL) DeleteQueries(n int, ids []uint32) { - C.gl3_0_glDeleteQueries(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&ids[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGenQueries.xml -func (gl *GL) GenQueries(n int, ids []uint32) { - C.gl3_0_glGenQueries(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&ids[0]))) -} - -// VertexAttribPointer specifies the location and data format of the array -// of generic vertex attributes at index to use when rendering. size -// specifies the number of components per attribute and must be 1, 2, 3, or -// 4. type specifies the data type of each component, and stride specifies -// the byte stride from one attribute to the next, allowing vertices and -// attributes to be packed into a single array or stored in separate arrays. -// normalized indicates whether the values stored in an integer format are -// to be mapped to the range [-1,1] (for signed values) or [0,1] -// (for unsigned values) when they are accessed and converted to floating -// point; otherwise, values will be converted to floats directly without -// normalization. offset is a byte offset into the buffer object's data -// store, which must be bound to the GL.ARRAY_BUFFER target with BindBuffer. -// -// The buffer object binding (GL.ARRAY_BUFFER_BINDING) is saved as -// generic vertex attribute array client-side state -// (GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING) for the provided index. -// -// To enable and disable a generic vertex attribute array, call -// EnableVertexAttribArray and DisableVertexAttribArray with index. If -// enabled, the generic vertex attribute array is used when DrawArrays or -// DrawElements is called. Each generic vertex attribute array is initially -// disabled. -// -// VertexAttribPointer is typically implemented on the client side. -// -// Error GL.INVALID_ENUM is generated if type is not an accepted value. -// GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. GL.INVALID_VALUE is generated if size is not 1, 2, -// 3, or 4. GL.INVALID_VALUE is generated if stride is negative. -func (gl *GL) VertexAttribPointer(index glbase.Attrib, size int, gltype glbase.Enum, normalized bool, stride int, offset uintptr) { - offset_ptr := unsafe.Pointer(offset) - C.gl3_0_glVertexAttribPointer(gl.funcs, C.GLuint(index), C.GLint(size), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), C.GLsizei(stride), offset_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glValidateProgram.xml -func (gl *GL) ValidateProgram(program glbase.Program) { - C.gl3_0_glValidateProgram(gl.funcs, C.GLuint(program)) -} - -// UniformMatrix4fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix4fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix4fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(4*4) != 0 { - panic("invalid value length for UniformMatrix4fv") - } - count := len(value) / (4 * 4) - C.gl3_0_glUniformMatrix4fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix3fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix3fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix3fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(3*3) != 0 { - panic("invalid value length for UniformMatrix3fv") - } - count := len(value) / (3 * 3) - C.gl3_0_glUniformMatrix3fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix2fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix2fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix2fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(2*2) != 0 { - panic("invalid value length for UniformMatrix2fv") - } - count := len(value) / (2 * 2) - C.gl3_0_glUniformMatrix2fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform4iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform4iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - if len(value)%4 != 0 { - panic("invalid value length for Uniform4iv") - } - count := len(value) / 4 - C.gl3_0_glUniform4iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// Uniform3iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform3iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - if len(value)%3 != 0 { - panic("invalid value length for Uniform3iv") - } - count := len(value) / 3 - C.gl3_0_glUniform3iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// Uniform2iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform2iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - if len(value)%2 != 0 { - panic("invalid value length for Uniform2iv") - } - count := len(value) / 2 - C.gl3_0_glUniform2iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// Uniform1iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform1iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - count := len(value) - C.gl3_0_glUniform1iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// Uniform4fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform4fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - if len(value)%4 != 0 { - panic("invalid value length for Uniform4fv") - } - count := len(value) / 4 - C.gl3_0_glUniform4fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform3fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform3fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - if len(value)%3 != 0 { - panic("invalid value length for Uniform3fv") - } - count := len(value) / 3 - C.gl3_0_glUniform3fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform2fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform2fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - if len(value)%2 != 0 { - panic("invalid value length for Uniform2fv") - } - count := len(value) / 2 - C.gl3_0_glUniform2fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform1fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform1fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - count := len(value) - C.gl3_0_glUniform1fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform4i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform4i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4i(location glbase.Uniform, v0, v1, v2, v3 int32) { - C.gl3_0_glUniform4i(gl.funcs, C.GLint(location), C.GLint(v0), C.GLint(v1), C.GLint(v2), C.GLint(v3)) -} - -// Uniform3i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform3i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3i(location glbase.Uniform, v0, v1, v2 int32) { - C.gl3_0_glUniform3i(gl.funcs, C.GLint(location), C.GLint(v0), C.GLint(v1), C.GLint(v2)) -} - -// Uniform2i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform2i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2i(location glbase.Uniform, v0, v1 int32) { - C.gl3_0_glUniform2i(gl.funcs, C.GLint(location), C.GLint(v0), C.GLint(v1)) -} - -// Uniform1i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform1i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1i(location glbase.Uniform, v0 int32) { - C.gl3_0_glUniform1i(gl.funcs, C.GLint(location), C.GLint(v0)) -} - -// Uniform4f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform4f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4f(location glbase.Uniform, v0, v1, v2, v3 float32) { - C.gl3_0_glUniform4f(gl.funcs, C.GLint(location), C.GLfloat(v0), C.GLfloat(v1), C.GLfloat(v2), C.GLfloat(v3)) -} - -// Uniform3f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform3f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3f(location glbase.Uniform, v0, v1, v2 float32) { - C.gl3_0_glUniform3f(gl.funcs, C.GLint(location), C.GLfloat(v0), C.GLfloat(v1), C.GLfloat(v2)) -} - -// Uniform2f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform2f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2f(location glbase.Uniform, v0, v1 float32) { - C.gl3_0_glUniform2f(gl.funcs, C.GLint(location), C.GLfloat(v0), C.GLfloat(v1)) -} - -// Uniform1f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform1f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1f(location glbase.Uniform, v0 float32) { - C.gl3_0_glUniform1f(gl.funcs, C.GLint(location), C.GLfloat(v0)) -} - -// UseProgram installs the program object specified by program as part of -// current rendering state. One or more executables are created in a program -// object by successfully attaching shader objects to it with AttachShader, -// successfully compiling the shader objects with CompileShader, and -// successfully linking the program object with LinkProgram. -// -// A program object will contain an executable that will run on the vertex -// processor if it contains one or more shader objects of type -// GL.VERTEX_SHADER that have been successfully compiled and linked. -// Similarly, a program object will contain an executable that will run on -// the fragment processor if it contains one or more shader objects of type -// GL.FRAGMENT_SHADER that have been successfully compiled and linked. -// -// Successfully installing an executable on a programmable processor will -// cause the corresponding fixed functionality of OpenGL to be disabled. -// Specifically, if an executable is installed on the vertex processor, the -// OpenGL fixed functionality will be disabled as follows. -// -// - The modelview matrix is not applied to vertex coordinates. -// -// - The projection matrix is not applied to vertex coordinates. -// -// - The texture matrices are not applied to texture coordinates. -// -// - Normals are not transformed to eye coordinates. -// -// - Normals are not rescaled or normalized. -// -// - Normalization of GL.AUTO_NORMAL evaluated normals is not performed. -// -// - Texture coordinates are not generated automatically. -// -// - Per-vertex lighting is not performed. -// -// - Color material computations are not performed. -// -// - Color index lighting is not performed. -// -// - This list also applies when setting the current raster position. -// -// The executable that is installed on the vertex processor is expected to -// implement any or all of the desired functionality from the preceding list. -// Similarly, if an executable is installed on the fragment processor, the -// OpenGL fixed functionality will be disabled as follows. -// -// - Texture environment and texture functions are not applied. -// -// - Texture application is not applied. -// -// - Color sum is not applied. -// -// - Fog is not applied. -// -// Again, the fragment shader that is installed is expected to implement any -// or all of the desired functionality from the preceding list. -// -// While a program object is in use, applications are free to modify attached -// shader objects, compile attached shader objects, attach additional shader -// objects, and detach or delete shader objects. None of these operations -// will affect the executables that are part of the current state. However, -// relinking the program object that is currently in use will install the -// program object as part of the current rendering state if the link -// operation was successful (see LinkProgram). If the program object -// currently in use is relinked unsuccessfully, its link status will be set -// to GL.FALSE, but the executables and associated state will remain part of -// the current state until a subsequent call to UseProgram removes it from -// use. After it is removed from use, it cannot be made part of current state -// until it has been successfully relinked. -// -// If program contains shader objects of type GL.VERTEX_SHADER but it does -// not contain shader objects of type GL.FRAGMENT_SHADER, an executable will -// be installed on the vertex processor, but fixed functionality will be used -// for fragment processing. Similarly, if program contains shader objects of -// type GL.FRAGMENT_SHADER but it does not contain shader objects of type -// GL.VERTEX_SHADER, an executable will be installed on the fragment -// processor, but fixed functionality will be used for vertex processing. If -// program is 0, the programmable processors will be disabled, and fixed -// functionality will be used for both vertex and fragment processing. -// -// While a program object is in use, the state that controls the disabled -// fixed functionality may also be updated using the normal OpenGL calls. -// -// Like display lists and texture objects, the name space for program objects -// may be shared across a set of contexts, as long as the server sides of the -// contexts share the same address space. If the name space is shared across -// contexts, any attached objects and the data associated with those attached -// objects are shared as well. -// -// Applications are responsible for providing the synchronization across API -// calls when objects are accessed from different execution threads. -// -// Error GL.INVALID_VALUE is generated if program is neither 0 nor a value -// generated by OpenGL. GL.INVALID_OPERATION is generated if program is not -// a program object. GL.INVALID_OPERATION is generated if program could not -// be made part of current state. GL.INVALID_OPERATION is generated if -// UseProgram is executed between the execution of Begin and the -// corresponding execution of End. -// -// UseProgram is available in GL version 2.0 or greater. -func (gl *GL) UseProgram(program glbase.Program) { - C.gl3_0_glUseProgram(gl.funcs, C.GLuint(program)) -} - -// ShaderSource sets the source code in shader to the provided source code. Any source -// code previously stored in the shader object is completely replaced. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader is not a shader -// object. GL.INVALID_VALUE is generated if count is less than 0. -// GL.INVALID_OPERATION is generated if ShaderSource is executed between the -// execution of Begin and the corresponding execution of End. -// -// ShaderSource is available in GL version 2.0 or greater. -func (gl *GL) ShaderSource(shader glbase.Shader, source ...string) { - count := len(source) - length := make([]int32, count) - source_c := make([]unsafe.Pointer, count) - for i, src := range source { - length[i] = int32(len(src)) - if len(src) > 0 { - source_c[i] = *(*unsafe.Pointer)(unsafe.Pointer(&src)) - } else { - source_c[i] = unsafe.Pointer(uintptr(0)) - } - } - C.gl3_0_glShaderSource(gl.funcs, C.GLuint(shader), C.GLsizei(count), (**C.GLchar)(unsafe.Pointer(&source_c[0])), (*C.GLint)(unsafe.Pointer(&length[0]))) -} - -// LinkProgram links the program object specified by program. If any shader -// objects of type GL.VERTEX_SHADER are attached to program, they will be -// used to create an executable that will run on the programmable vertex -// processor. If any shader objects of type GL.FRAGMENT_SHADER are attached -// to program, they will be used to create an executable that will run on the -// programmable fragment processor. -// -// The status of the link operation will be stored as part of the program -// object's state. This value will be set to GL.TRUE if the program object -// was linked without errors and is ready for use, and GL.FALSE otherwise. It -// can be queried by calling GetProgramiv with arguments program and -// GL.LINK_STATUS. -// -// As a result of a successful link operation, all active user-defined -// uniform variables belonging to program will be initialized to 0, and each -// of the program object's active uniform variables will be assigned a -// location that can be queried by calling GetUniformLocation. Also, any -// active user-defined attribute variables that have not been bound to a -// generic vertex attribute index will be bound to one at this time. -// -// Linking of a program object can fail for a number of reasons as specified -// in the OpenGL Shading Language Specification. The following lists some of -// the conditions that will cause a link error. -// -// - The number of active attribute variables supported by the -// implementation has been exceeded. -// -// - The storage limit for uniform variables has been exceeded. -// -// - The number of active uniform variables supported by the implementation -// has been exceeded. -// -// - The main function is missing for the vertex shader or the fragment -// shader. -// -// - A varying variable actually used in the fragment shader is not -// declared in the same way (or is not declared at all) in the vertex -// shader. -// -// - A reference to a function or variable name is unresolved. -// -// - A shared global is declared with two different types or two different -// initial values. -// -// - One or more of the attached shader objects has not been successfully -// compiled. -// -// - Binding a generic attribute matrix caused some rows of the matrix to -// fall outside the allowed maximum of GL.MAX_VERTEX_ATTRIBS. -// -// - Not enough contiguous vertex attribute slots could be found to bind -// attribute matrices. -// -// When a program object has been successfully linked, the program object can -// be made part of current state by calling UseProgram. Whether or not the -// link operation was successful, the program object's information log will -// be overwritten. The information log can be retrieved by calling -// GetProgramInfoLog. -// -// LinkProgram will also install the generated executables as part of the -// current rendering state if the link operation was successful and the -// specified program object is already currently in use as a result of a -// previous call to UseProgram. If the program object currently in use is -// relinked unsuccessfully, its link status will be set to GL.FALSE , but the -// executables and associated state will remain part of the current state -// until a subsequent call to UseProgram removes it from use. After it is -// removed from use, it cannot be made part of current state until it has -// been successfully relinked. -// -// If program contains shader objects of type GL.VERTEX_SHADER but does not -// contain shader objects of type GL.FRAGMENT_SHADER, the vertex shader will -// be linked against the implicit interface for fixed functionality fragment -// processing. Similarly, if program contains shader objects of type -// GL.FRAGMENT_SHADER but it does not contain shader objects of type -// GL.VERTEX_SHADER, the fragment shader will be linked against the implicit -// interface for fixed functionality vertex processing. -// -// The program object's information log is updated and the program is -// generated at the time of the link operation. After the link operation, -// applications are free to modify attached shader objects, compile attached -// shader objects, detach shader objects, delete shader objects, and attach -// additional shader objects. None of these operations affects the -// information log or the program that is part of the program object. -// -// If the link operation is unsuccessful, any information about a previous -// link operation on program is lost (a failed link does not restore the -// old state of program). Certain information can still be retrieved -// from program even after an unsuccessful link operation. See for instance -// GetActiveAttrib and GetActiveUniform. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program -// object. GL.INVALID_OPERATION is generated if LinkProgram is executed -// between the execution of Begin and the corresponding execution of End. -// -// LinkProgram is available in GL version 2.0 or greater. -func (gl *GL) LinkProgram(program glbase.Program) { - C.gl3_0_glLinkProgram(gl.funcs, C.GLuint(program)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsShader.xml -func (gl *GL) IsShader(shader glbase.Shader) bool { - glresult := C.gl3_0_glIsShader(gl.funcs, C.GLuint(shader)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsProgram.xml -func (gl *GL) IsProgram(program glbase.Program) bool { - glresult := C.gl3_0_glIsProgram(gl.funcs, C.GLuint(program)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// GetVertexAttribiv returns in params the value of a generic vertex attribute -// parameter. The generic vertex attribute to be queried is specified by -// index, and the parameter to be queried is specified by pname. -// -// The accepted parameter names are as follows: -// -// GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING -// params returns a single value, the name of the buffer object -// currently bound to the binding point corresponding to generic vertex -// attribute array index. If no buffer object is bound, 0 is returned. -// The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_ENABLED -// params returns a single value that is non-zero (true) if the vertex -// attribute array for index is enabled and 0 (false) if it is -// disabled. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_SIZE -// params returns a single value, the size of the vertex attribute -// array for index. The size is the number of values for each element -// of the vertex attribute array, and it will be 1, 2, 3, or 4. The -// initial value is 4. -// -// GL.VERTEX_ATTRIB_ARRAY_STRIDE -// params returns a single value, the array stride for (number of bytes -// between successive elements in) the vertex attribute array for -// index. A value of 0 indicates that the array elements are stored -// sequentially in memory. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_TYPE -// params returns a single value, a symbolic constant indicating the -// array type for the vertex attribute array for index. Possible values -// are GL.BYTE, GL.UNSIGNED_BYTE, GL.SHORT, GL.UNSIGNED_SHORT, GL.INT, -// GL.UNSIGNED_INT, GL.FLOAT, and GL.DOUBLE. The initial value is -// GL.FLOAT. -// -// GL.VERTEX_ATTRIB_ARRAY_NORMALIZED -// params returns a single value that is non-zero (true) if fixed-point -// data types for the vertex attribute array indicated by index are -// normalized when they are converted to floating point, and 0 (false) -// otherwise. The initial value is 0. -// -// GL.CURRENT_VERTEX_ATTRIB -// params returns four values that represent the current value for the -// generic vertex attribute specified by index. Generic vertex -// attribute 0 is unique in that it has no current state, so an error -// will be generated if index is 0. The initial value for all other -// generic vertex attributes is (0,0,0,1). -// -// All of the parameters except GL.CURRENT_VERTEX_ATTRIB represent -// client-side state. -// -// Error GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. GL.INVALID_ENUM is generated if pname is not an -// accepted value. GL.INVALID_OPERATION is generated if index is 0 and pname -// is GL.CURRENT_VERTEX_ATTRIB. -// -// GetVertexAttribiv is available in GL version 2.0 or greater. -func (gl *GL) GetVertexAttribiv(index glbase.Attrib, pname glbase.Enum, params []int32) { - var params_c [4]int32 - C.gl3_0_glGetVertexAttribiv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetVertexAttribfv returns in params the value of a generic vertex attribute -// parameter. The generic vertex attribute to be queried is specified by -// index, and the parameter to be queried is specified by pname. -// -// The accepted parameter names are as follows: -// -// GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING -// params returns a single value, the name of the buffer object -// currently bound to the binding point corresponding to generic vertex -// attribute array index. If no buffer object is bound, 0 is returned. -// The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_ENABLED -// params returns a single value that is non-zero (true) if the vertex -// attribute array for index is enabled and 0 (false) if it is -// disabled. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_SIZE -// params returns a single value, the size of the vertex attribute -// array for index. The size is the number of values for each element -// of the vertex attribute array, and it will be 1, 2, 3, or 4. The -// initial value is 4. -// -// GL.VERTEX_ATTRIB_ARRAY_STRIDE -// params returns a single value, the array stride for (number of bytes -// between successive elements in) the vertex attribute array for -// index. A value of 0 indicates that the array elements are stored -// sequentially in memory. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_TYPE -// params returns a single value, a symbolic constant indicating the -// array type for the vertex attribute array for index. Possible values -// are GL.BYTE, GL.UNSIGNED_BYTE, GL.SHORT, GL.UNSIGNED_SHORT, GL.INT, -// GL.UNSIGNED_INT, GL.FLOAT, and GL.DOUBLE. The initial value is -// GL.FLOAT. -// -// GL.VERTEX_ATTRIB_ARRAY_NORMALIZED -// params returns a single value that is non-zero (true) if fixed-point -// data types for the vertex attribute array indicated by index are -// normalized when they are converted to floating point, and 0 (false) -// otherwise. The initial value is 0. -// -// GL.CURRENT_VERTEX_ATTRIB -// params returns four values that represent the current value for the -// generic vertex attribute specified by index. Generic vertex -// attribute 0 is unique in that it has no current state, so an error -// will be generated if index is 0. The initial value for all other -// generic vertex attributes is (0,0,0,1). -// -// All of the parameters except GL.CURRENT_VERTEX_ATTRIB represent -// client-side state. -// -// Error GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. GL.INVALID_ENUM is generated if pname is not an -// accepted value. GL.INVALID_OPERATION is generated if index is 0 and pname -// is GL.CURRENT_VERTEX_ATTRIB. -// -// GetVertexAttribfv is available in GL version 2.0 or greater. -func (gl *GL) GetVertexAttribfv(index glbase.Attrib, pname glbase.Enum, params []float32) { - var params_c [4]float32 - C.gl3_0_glGetVertexAttribfv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetVertexAttribdv returns in params the value of a generic vertex attribute -// parameter. The generic vertex attribute to be queried is specified by -// index, and the parameter to be queried is specified by pname. -// -// The accepted parameter names are as follows: -// -// GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING -// params returns a single value, the name of the buffer object -// currently bound to the binding point corresponding to generic vertex -// attribute array index. If no buffer object is bound, 0 is returned. -// The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_ENABLED -// params returns a single value that is non-zero (true) if the vertex -// attribute array for index is enabled and 0 (false) if it is -// disabled. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_SIZE -// params returns a single value, the size of the vertex attribute -// array for index. The size is the number of values for each element -// of the vertex attribute array, and it will be 1, 2, 3, or 4. The -// initial value is 4. -// -// GL.VERTEX_ATTRIB_ARRAY_STRIDE -// params returns a single value, the array stride for (number of bytes -// between successive elements in) the vertex attribute array for -// index. A value of 0 indicates that the array elements are stored -// sequentially in memory. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_TYPE -// params returns a single value, a symbolic constant indicating the -// array type for the vertex attribute array for index. Possible values -// are GL.BYTE, GL.UNSIGNED_BYTE, GL.SHORT, GL.UNSIGNED_SHORT, GL.INT, -// GL.UNSIGNED_INT, GL.FLOAT, and GL.DOUBLE. The initial value is -// GL.FLOAT. -// -// GL.VERTEX_ATTRIB_ARRAY_NORMALIZED -// params returns a single value that is non-zero (true) if fixed-point -// data types for the vertex attribute array indicated by index are -// normalized when they are converted to floating point, and 0 (false) -// otherwise. The initial value is 0. -// -// GL.CURRENT_VERTEX_ATTRIB -// params returns four values that represent the current value for the -// generic vertex attribute specified by index. Generic vertex -// attribute 0 is unique in that it has no current state, so an error -// will be generated if index is 0. The initial value for all other -// generic vertex attributes is (0,0,0,1). -// -// All of the parameters except GL.CURRENT_VERTEX_ATTRIB represent -// client-side state. -// -// Error GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. GL.INVALID_ENUM is generated if pname is not an -// accepted value. GL.INVALID_OPERATION is generated if index is 0 and pname -// is GL.CURRENT_VERTEX_ATTRIB. -// -// GetVertexAttribdv is available in GL version 2.0 or greater. -func (gl *GL) GetVertexAttribdv(index glbase.Attrib, pname glbase.Enum, params []float64) { - var params_c [4]float64 - C.gl3_0_glGetVertexAttribdv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetUniformiv returns in params the value of the specified uniform -// variable. The type of the uniform variable specified by location -// determines the number of values returned. If the uniform variable is -// defined in the shader as a boolean, int, or float, a single value will be -// returned. If it is defined as a vec2, ivec2, or bvec2, two values will be -// returned. If it is defined as a vec3, ivec3, or bvec3, three values will -// be returned, and so on. To query values stored in uniform variables -// declared as arrays, call GetUniformiv for each element of the array. To -// query values stored in uniform variables declared as structures, call -// GetUniformiv for each field in the structure. The values for uniform -// variables declared as a matrix will be returned in column major order. -// -// The locations assigned to uniform variables are not known until the -// program object is linked. After linking has occurred, the command -// GetUniformLocation can be used to obtain the location of a uniform -// variable. This location value can then be passed to GetUniformiv in order -// to query the current value of the uniform variable. After a program object -// has been linked successfully, the index values for uniform variables -// remain fixed until the next link command occurs. The uniform variable -// values can only be queried after a link if the link was successful. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program -// object. GL.INVALID_OPERATION is generated if program has not been -// successfully linked. GL.INVALID_OPERATION is generated if location does -// not correspond to a valid uniform variable location for the specified -// program object. GL.INVALID_OPERATION is generated if GetUniformiv is -// executed between the execution of Begin and the corresponding execution of -// End. -// -// GetUniformiv is available in GL version 2.0 or greater. -func (gl *GL) GetUniformiv(program glbase.Program, location glbase.Uniform, params []int32) { - var params_c [4]int32 - C.gl3_0_glGetUniformiv(gl.funcs, C.GLuint(program), C.GLint(location), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetUniformfv returns in params the value of the specified uniform -// variable. The type of the uniform variable specified by location -// determines the number of values returned. If the uniform variable is -// defined in the shader as a boolean, int, or float, a single value will be -// returned. If it is defined as a vec2, ivec2, or bvec2, two values will be -// returned. If it is defined as a vec3, ivec3, or bvec3, three values will -// be returned, and so on. To query values stored in uniform variables -// declared as arrays, call GetUniformfv for each element of the array. To -// query values stored in uniform variables declared as structures, call -// GetUniformfv for each field in the structure. The values for uniform -// variables declared as a matrix will be returned in column major order. -// -// The locations assigned to uniform variables are not known until the -// program object is linked. After linking has occurred, the command -// GetUniformLocation can be used to obtain the location of a uniform -// variable. This location value can then be passed to GetUniformfv in order -// to query the current value of the uniform variable. After a program object -// has been linked successfully, the index values for uniform variables -// remain fixed until the next link command occurs. The uniform variable -// values can only be queried after a link if the link was successful. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program -// object. GL.INVALID_OPERATION is generated if program has not been -// successfully linked. GL.INVALID_OPERATION is generated if location does -// not correspond to a valid uniform variable location for the specified -// program object. GL.INVALID_OPERATION is generated if GetUniformfv is -// executed between the execution of Begin and the corresponding execution of -// End. -// -// GetUniformfv is available in GL version 2.0 or greater. -func (gl *GL) GetUniformfv(program glbase.Program, location glbase.Uniform, params []float32) { - var params_c [4]float32 - C.gl3_0_glGetUniformfv(gl.funcs, C.GLuint(program), C.GLint(location), (*C.GLfloat)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetUniformLocation returns an integer that represents the location of a -// specific uniform variable within a program object. name must be an active -// uniform variable name in program that is not a structure, an array of -// structures, or a subcomponent of a vector or a matrix. This function -// returns -1 if name does not correspond to an active uniform variable in -// program or if name starts with the reserved prefix "gl_". -// -// Uniform variables that are structures or arrays of structures may be -// queried by calling GetUniformLocation for each field within the -// structure. The array element operator "[]" and the structure field -// operator "." may be used in name in order to select elements within an -// array or fields within a structure. The result of using these operators is -// not allowed to be another structure, an array of structures, or a -// subcomponent of a vector or a matrix. Except if the last part of name -// indicates a uniform variable array, the location of the first element of -// an array can be retrieved by using the name of the array, or by using the -// name appended by "[0]". -// -// The actual locations assigned to uniform variables are not known until the -// program object is linked successfully. After linking has occurred, the -// command GetUniformLocation can be used to obtain the location of a -// uniform variable. This location value can then be passed to Uniform to -// set the value of the uniform variable or to GetUniform in order to query -// the current value of the uniform variable. After a program object has been -// linked successfully, the index values for uniform variables remain fixed -// until the next link command occurs. Uniform variable locations and values -// can only be queried after a link if the link was successful. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program object. -// GL.INVALID_OPERATION is generated if program has not been successfully -// linked. GL.INVALID_OPERATION is generated if GetUniformLocation is executed -// between the execution of Begin and the corresponding execution of End. -// -// GetUniformLocation is available in GL version 2.0 or greater. -func (gl *GL) GetUniformLocation(program glbase.Program, name string) glbase.Uniform { - name_cstr := C.CString(name) - glresult := C.gl3_0_glGetUniformLocation(gl.funcs, C.GLuint(program), (*C.GLchar)(name_cstr)) - C.free(unsafe.Pointer(name_cstr)) - return glbase.Uniform(glresult) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetShaderSource.xml -func (gl *GL) GetShaderSource(shader glbase.Shader, bufSize int32, length []int32, source []byte) { - C.gl3_0_glGetShaderSource(gl.funcs, C.GLuint(shader), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLchar)(unsafe.Pointer(&source[0]))) -} - -// GetShaderInfoLog returns the information log for the specified shader -// object. The information log for a shader object is modified when the -// shader is compiled. -// -// The information log for a shader object is a string that may contain -// diagnostic messages, warning messages, and other information about the -// last compile operation. When a shader object is created, its information -// log will be a string of length 0, and the size of the current log can be -// obtained by calling GetShaderiv with the value GL.INFO_LOG_LENGTH. -// -// The information log for a shader object is the OpenGL implementer's -// primary mechanism for conveying information about the compilation process. -// Therefore, the information log can be helpful to application developers -// during the development process, even when compilation is successful. -// Application developers should not expect different OpenGL implementations -// to produce identical information logs. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader is not a shader -// object. GL.INVALID_VALUE is generated if maxLength is less than 0. -// GL.INVALID_OPERATION is generated if GetShaderInfoLog is executed -// between the execution of Begin and the corresponding execution of End. -// -// GetShaderInfoLog is available in GL version 2.0 or greater. -func (gl *GL) GetShaderInfoLog(shader glbase.Shader) []byte { - var params [1]int32 - var length int32 - gl.GetShaderiv(shader, INFO_LOG_LENGTH, params[:]) - bufSize := params[0] - infoLog := make([]byte, int(bufSize)) - C.gl3_0_glGetShaderInfoLog(gl.funcs, C.GLuint(shader), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length)), (*C.GLchar)(unsafe.Pointer(&infoLog[0]))) - return infoLog -} - -// GetShaderiv GetShader returns in params the value of a parameter for a specific -// shader object. The following parameters are defined: -// -// GL.SHADER_TYPE -// params returns GL.VERTEX_SHADER if shader is a vertex shader object, -// and GL.FRAGMENT_SHADER if shader is a fragment shader object. -// -// GL.DELETE_STATUS -// params returns GL.TRUE if shader is currently flagged for deletion, -// and GL.FALSE otherwise. -// -// GL.COMPILE_STATUS -// params returns GL.TRUE if the last compile operation on shader was -// successful, and GL.FALSE otherwise. -// -// GL.INFO_LOG_LENGTH -// params returns the number of characters in the information log for -// shader including the null termination character (the size of the -// character buffer required to store the information log). If shader has -// no information log, a value of 0 is returned. -// -// GL.SHADER_SOURCE_LENGTH -// params returns the length of the concatenation of the source strings -// that make up the shader source for the shader, including the null -// termination character. (the size of the character buffer -// required to store the shader source). If no source code exists, 0 is -// returned. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader does not refer to a -// shader object. GL.INVALID_ENUM is generated if pname is not an accepted -// value. GL.INVALID_OPERATION is generated if GetShader is executed -// between the execution of Begin and the corresponding execution of End. -// -// GetShaderiv is available in GL version 2.0 or greater. -func (gl *GL) GetShaderiv(shader glbase.Shader, pname glbase.Enum, params []int32) { - var params_c [4]int32 - C.gl3_0_glGetShaderiv(gl.funcs, C.GLuint(shader), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetProgramInfoLog returns the information log for the specified program -// object. The information log for a program object is modified when the -// program object is linked or validated. -// -// The information log for a program object is either an empty string, or a -// string containing information about the last link operation, or a string -// containing information about the last validation operation. It may contain -// diagnostic messages, warning messages, and other information. When a -// program object is created, its information log will be a string of length -// 0, and the size of the current log can be obtained by calling GetProgramiv -// with the value GL.INFO_LOG_LENGTH. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated -// by OpenGL. GL.INVALID_OPERATION is generated if program is not a -// program object. -func (gl *GL) GetProgramInfoLog(program glbase.Program) []byte { - var params [1]int32 - var length int32 - gl.GetProgramiv(program, INFO_LOG_LENGTH, params[:]) - bufSize := params[0] - infoLog := make([]byte, int(bufSize)) - C.gl3_0_glGetProgramInfoLog(gl.funcs, C.GLuint(program), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length)), (*C.GLchar)(unsafe.Pointer(&infoLog[0]))) - return infoLog -} - -// GetProgramiv returns in params the value of a parameter for a specific -// program object. The following parameters are defined: -// -// GL.DELETE_STATUS -// params returns GL.TRUE if program is currently flagged for deletion, -// and GL.FALSE otherwise. -// -// GL.LINK_STATUS -// params returns GL.TRUE if the last link operation on program was -// successful, and GL.FALSE otherwise. -// -// GL.VALIDATE_STATUS -// params returns GL.TRUE or if the last validation operation on -// program was successful, and GL.FALSE otherwise. -// -// GL.INFO_LOG_LENGTH -// params returns the number of characters in the information log for -// program including the null termination character (the size of -// the character buffer required to store the information log). If -// program has no information log, a value of 0 is returned. -// -// GL.ATTACHED_SHADERS -// params returns the number of shader objects attached to program. -// -// GL.ACTIVE_ATTRIBUTES -// params returns the number of active attribute variables for program. -// -// GL.ACTIVE_ATTRIBUTE_MAX_LENGTH -// params returns the length of the longest active attribute name for -// program, including the null termination character (the size of -// the character buffer required to store the longest attribute name). -// If no active attributes exist, 0 is returned. -// -// GL.ACTIVE_UNIFORMS -// params returns the number of active uniform variables for program. -// -// GL.ACTIVE_UNIFORM_MAX_LENGTH -// params returns the length of the longest active uniform variable -// name for program, including the null termination character (i.e., -// the size of the character buffer required to store the longest -// uniform variable name). If no active uniform variables exist, 0 is -// returned. -// -// GL.TRANSFORM_FEEDBACK_BUFFER_MODE -// params returns a symbolic constant indicating the buffer mode used -// when transform feedback is active. This may be GL.SEPARATE_ATTRIBS -// or GL.INTERLEAVED_ATTRIBS. -// -// GL.TRANSFORM_FEEDBACK_VARYINGS -// params returns the number of varying variables to capture in transform -// feedback mode for the program. -// -// GL.TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH -// params returns the length of the longest variable name to be used for -// transform feedback, including the null-terminator. -// -// GL.GEOMETRY_VERTICES_OUT -// params returns the maximum number of vertices that the geometry shader in -// program will output. -// -// GL.GEOMETRY_INPUT_TYPE -// params returns a symbolic constant indicating the primitive type accepted -// as input to the geometry shader contained in program. -// -// GL.GEOMETRY_OUTPUT_TYPE -// params returns a symbolic constant indicating the primitive type that will -// be output by the geometry shader contained in program. -// -// GL.ACTIVE_UNIFORM_BLOCKS and GL.ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH are -// available only if the GL version 3.1 or greater. -// -// GL.GEOMETRY_VERTICES_OUT, GL.GEOMETRY_INPUT_TYPE and -// GL.GEOMETRY_OUTPUT_TYPE are accepted only if the GL version is 3.2 or -// greater. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program does not refer to a -// program object. GL.INVALID_OPERATION is generated if pname is -// GL.GEOMETRY_VERTICES_OUT, GL.GEOMETRY_INPUT_TYPE, or -// GL.GEOMETRY_OUTPUT_TYPE, and program does not contain a geometry shader. -// GL.INVALID_ENUM is generated if pname is not an accepted value. -func (gl *GL) GetProgramiv(program glbase.Program, pname glbase.Enum, params []int32) { - var params_c [4]int32 - C.gl3_0_glGetProgramiv(gl.funcs, C.GLuint(program), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetAttribLocation queries the previously linked program object specified -// by program for the attribute variable specified by name and returns the -// index of the generic vertex attribute that is bound to that attribute -// variable. If name is a matrix attribute variable, the index of the first -// column of the matrix is returned. If the named attribute variable is not -// an active attribute in the specified program object or if name starts with -// the reserved prefix "gl_", a value of -1 is returned. -// -// The association between an attribute variable name and a generic attribute -// index can be specified at any time by calling BindAttribLocation. -// Attribute bindings do not go into effect until LinkProgram is called. -// After a program object has been linked successfully, the index values for -// attribute variables remain fixed until the next link command occurs. The -// attribute values can only be queried after a link if the link was -// successful. GetAttribLocation returns the binding that actually went -// into effect the last time LinkProgram was called for the specified -// program object. Attribute bindings that have been specified since the last -// link operation are not returned by GetAttribLocation. -// -// Error GL_INVALID_OPERATION is generated if program is not a value -// generated by OpenGL. GL_INVALID_OPERATION is generated if program is not -// a program object. GL_INVALID_OPERATION is generated if program has not -// been successfully linked. GL_INVALID_OPERATION is generated if -// GetAttribLocation is executed between the execution of Begin and the -// corresponding execution of End. -// -// GetAttribLocation is available in GL version 2.0 or greater. -func (gl *GL) GetAttribLocation(program glbase.Program, name string) glbase.Attrib { - name_cstr := C.CString(name) - glresult := C.gl3_0_glGetAttribLocation(gl.funcs, C.GLuint(program), (*C.GLchar)(name_cstr)) - C.free(unsafe.Pointer(name_cstr)) - return glbase.Attrib(glresult) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetAttachedShaders.xml -func (gl *GL) GetAttachedShaders(program glbase.Program, maxCount int32, count []int, obj []uint32) { - C.gl3_0_glGetAttachedShaders(gl.funcs, C.GLuint(program), C.GLsizei(maxCount), (*C.GLsizei)(unsafe.Pointer(&count[0])), (*C.GLuint)(unsafe.Pointer(&obj[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetActiveUniform.xml -func (gl *GL) GetActiveUniform(program glbase.Program, index uint32, bufSize int32, length []int32, size []int, gltype []glbase.Enum, name []byte) { - C.gl3_0_glGetActiveUniform(gl.funcs, C.GLuint(program), C.GLuint(index), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLint)(unsafe.Pointer(&size[0])), (*C.GLenum)(unsafe.Pointer(&gltype[0])), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetActiveAttrib.xml -func (gl *GL) GetActiveAttrib(program glbase.Program, index glbase.Attrib, bufSize int32, length []int32, size []int, gltype []glbase.Enum, name []byte) { - C.gl3_0_glGetActiveAttrib(gl.funcs, C.GLuint(program), C.GLuint(index), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLint)(unsafe.Pointer(&size[0])), (*C.GLenum)(unsafe.Pointer(&gltype[0])), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEnableVertexAttribArray.xml -func (gl *GL) EnableVertexAttribArray(index glbase.Attrib) { - C.gl3_0_glEnableVertexAttribArray(gl.funcs, C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDisableVertexAttribArray.xml -func (gl *GL) DisableVertexAttribArray(index glbase.Attrib) { - C.gl3_0_glDisableVertexAttribArray(gl.funcs, C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDetachShader.xml -func (gl *GL) DetachShader(program glbase.Program, shader glbase.Shader) { - C.gl3_0_glDetachShader(gl.funcs, C.GLuint(program), C.GLuint(shader)) -} - -// DeleteShader frees the memory and invalidates the name associated with -// the shader object specified by shader. This command effectively undoes the -// effects of a call to CreateShader. -// -// If a shader object to be deleted is attached to a program object, it will -// be flagged for deletion, but it will not be deleted until it is no longer -// attached to any program object, for any rendering context (it must -// be detached from wherever it was attached before it will be deleted). A -// value of 0 for shader will be silently ignored. -// -// To determine whether an object has been flagged for deletion, call -// GetShader with arguments shader and GL.DELETE_STATUS. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. -// -// DeleteShader is available in GL version 2.0 or greater. -func (gl *GL) DeleteShader(shader glbase.Shader) { - C.gl3_0_glDeleteShader(gl.funcs, C.GLuint(shader)) -} - -// DeleteProgram frees the memory and invalidates the name associated with -// the program object specified by program. This command effectively undoes -// the effects of a call to CreateProgram. -// -// If a program object is in use as part of current rendering state, it will -// be flagged for deletion, but it will not be deleted until it is no longer -// part of current state for any rendering context. If a program object to be -// deleted has shader objects attached to it, those shader objects will be -// automatically detached but not deleted unless they have already been -// flagged for deletion by a previous call to DeleteShader. A value of 0 -// for program will be silently ignored. -// -// To determine whether a program object has been flagged for deletion, call -// GetProgram with arguments program and GL.DELETE_STATUS. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. -// -// DeleteProgram is available in GL version 2.0 or greater. -func (gl *GL) DeleteProgram(program glbase.Program) { - C.gl3_0_glDeleteProgram(gl.funcs, C.GLuint(program)) -} - -// CreateShader creates an empty shader object and returns a non-zero value -// by which it can be referenced. A shader object is used to maintain the -// source code strings that define a shader. shaderType indicates the type of -// shader to be created. -// -// Two types of shaders are supported. A shader of type GL.VERTEX_SHADER is a -// shader that is intended to run on the programmable vertex processor and -// replace the fixed functionality vertex processing in OpenGL. A shader of -// type GL.FRAGMENT_SHADER is a shader that is intended to run on the -// programmable fragment processor and replace the fixed functionality -// fragment processing in OpenGL. -// -// When created, a shader object's GL.SHADER_TYPE parameter is set to either -// GL.VERTEX_SHADER or GL.FRAGMENT_SHADER, depending on the value of -// shaderType. -// -// Like display lists and texture objects, the name space for shader objects -// may be shared across a set of contexts, as long as the server sides of the -// contexts share the same address space. If the name space is shared across -// contexts, any attached objects and the data associated with those attached -// objects are shared as well. -// -// This function returns 0 if an error occurs creating the shader object. -// -// Error GL.INVALID_ENUM is generated if shaderType is not an accepted value. -// GL.INVALID_OPERATION is generated if CreateShader is executed between the -// execution of Begin and the corresponding execution of End. -// -// CreateShader is available in GL version 2.0 or greater. -func (gl *GL) CreateShader(gltype glbase.Enum) glbase.Shader { - glresult := C.gl3_0_glCreateShader(gl.funcs, C.GLenum(gltype)) - return glbase.Shader(glresult) -} - -// CreateProgram creates an empty program object and returns a non-zero -// value by which it can be referenced. A program object is an object to -// which shader objects can be attached. This provides a mechanism to specify -// the shader objects that will be linked to create a program. It also -// provides a means for checking the compatibility of the shaders that will -// be used to create a program (for instance, checking the compatibility -// between a vertex shader and a fragment shader). When no longer needed as -// part of a program object, shader objects can be detached. -// -// One or more executables are created in a program object by successfully -// attaching shader objects to it with AttachShader, successfully compiling -// the shader objects with CompileShader, and successfully linking the -// program object with LinkProgram. These executables are made part of -// current state when UseProgram is called. Program objects can be deleted -// by calling DeleteProgram. The memory associated with the program object -// will be deleted when it is no longer part of current rendering state for -// any context. -// -// Like display lists and texture objects, the name space for program objects -// may be shared across a set of contexts, as long as the server sides of the -// contexts share the same address space. If the name space is shared across -// contexts, any attached objects and the data associated with those attached -// objects are shared as well. -// -// Applications are responsible for providing the synchronization across API -// calls when objects are accessed from different execution threads. -// -// This function returns 0 if an error occurs creating the program object. -// -// Error GL.INVALID_OPERATION is generated if CreateProgram is executed -// between the execution of Begin and the corresponding execution of End. -// -// CreateProgram is available in GL version 2.0 or greater. -func (gl *GL) CreateProgram() glbase.Program { - glresult := C.gl3_0_glCreateProgram(gl.funcs) - return glbase.Program(glresult) -} - -// CompileShader compiles the source code strings that have been stored in -// the shader object specified by shader. -// -// The compilation status will be stored as part of the shader object's -// state. This value will be set to GL.TRUE if the shader was compiled without -// errors and is ready for use, and GL.FALSE otherwise. It can be queried by -// calling GetShaderiv with arguments shader and GL.COMPILE_STATUS. -// -// Compilation of a shader can fail for a number of reasons as specified by -// the OpenGL Shading Language Specification. Whether or not the compilation -// was successful, information about the compilation can be obtained from the -// shader object's information log by calling GetShaderInfoLog. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader is not a shader -// object. GL.INVALID_OPERATION is generated if CompileShader is executed -// between the execution of Begin and the corresponding execution of End. -// -// CompileShader is available in GL version 2.0 or greater. -func (gl *GL) CompileShader(shader glbase.Shader) { - C.gl3_0_glCompileShader(gl.funcs, C.GLuint(shader)) -} - -// BindAttribLocation associates a user-defined attribute variable in the program -// object specified by program with a generic vertex attribute index. The name -// parameter specifies the name of the vertex shader attribute variable to -// which index is to be bound. When program is made part of the current state, -// values provided via the generic vertex attribute index will modify the -// value of the user-defined attribute variable specified by name. -// -// If name refers to a matrix attribute variable, index refers to the first -// column of the matrix. Other matrix columns are then automatically bound to -// locations index+1 for a matrix of type mat2; index+1 and index+2 for a -// matrix of type mat3; and index+1, index+2, and index+3 for a matrix of -// type mat4. -// -// This command makes it possible for vertex shaders to use descriptive names -// for attribute variables rather than generic variables that are numbered -// from 0 to GL.MAX_VERTEX_ATTRIBS-1. The values sent to each generic -// attribute index are part of current state, just like standard vertex -// attributes such as color, normal, and vertex position. If a different -// program object is made current by calling UseProgram, the generic vertex -// attributes are tracked in such a way that the same values will be observed -// by attributes in the new program object that are also bound to index. -// -// Attribute variable name-to-generic attribute index bindings for a program -// object can be explicitly assigned at any time by calling -// BindAttribLocation. Attribute bindings do not go into effect until -// LinkProgram is called. After a program object has been linked -// successfully, the index values for generic attributes remain fixed (and -// their values can be queried) until the next link command occurs. -// -// Applications are not allowed to bind any of the standard OpenGL vertex -// attributes using this command, as they are bound automatically when -// needed. Any attribute binding that occurs after the program object has -// been linked will not take effect until the next time the program object is -// linked. -// -// If name was bound previously, that information is lost. Thus you cannot -// bind one user-defined attribute variable to multiple indices, but you can -// bind multiple user-defined attribute variables to the same index. -// -// Applications are allowed to bind more than one user-defined attribute -// variable to the same generic vertex attribute index. This is called -// aliasing, and it is allowed only if just one of the aliased attributes is -// active in the executable program, or if no path through the shader -// consumes more than one attribute of a set of attributes aliased to the -// same location. The compiler and linker are allowed to assume that no -// aliasing is done and are free to employ optimizations that work only in -// the absence of aliasing. OpenGL implementations are not required to do -// error checking to detect aliasing. Because there is no way to bind -// standard attributes, it is not possible to alias generic attributes with -// conventional ones (except for generic attribute 0). -// -// BindAttribLocation can be called before any vertex shader objects are -// bound to the specified program object. It is also permissible to bind a -// generic attribute index to an attribute variable name that is never used -// in a vertex shader. -// -// Active attributes that are not explicitly bound will be bound by the -// linker when LinkProgram is called. The locations assigned can be queried -// by calling GetAttribLocation. -// -// Error GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. -// GL.INVALID_OPERATION is generated if name starts with the reserved prefix "gl_". -// GL.INVALID_VALUE is generated if program is not a value generated by OpenGL. -// GL.INVALID_OPERATION is generated if program is not a program object. -// GL.INVALID_OPERATION is generated if BindAttribLocation is executed -// between the execution of Begin and the corresponding execution of End. -// -// BindAttribLocation is available in GL version 2.0 or greater. -func (gl *GL) BindAttribLocation(program glbase.Program, index glbase.Attrib, name string) { - name_cstr := C.CString(name) - C.gl3_0_glBindAttribLocation(gl.funcs, C.GLuint(program), C.GLuint(index), (*C.GLchar)(name_cstr)) - C.free(unsafe.Pointer(name_cstr)) -} - -// AttachShader attaches a shader object to a program object. -// -// In order to create an executable, there must be a way to specify the list -// of things that will be linked together. Program objects provide this -// mechanism. Shaders that are to be linked together in a program object must -// first be attached to that program object. This indicates that shader will -// be included in link operations that will be performed on program. -// -// All operations that can be performed on a shader object are valid whether -// or not the shader object is attached to a program object. It is -// permissible to attach a shader object to a program object before source -// code has been loaded into the shader object or before the shader object -// has been compiled. It is permissible to attach multiple shader objects of -// the same type because each may contain a portion of the complete shader. -// It is also permissible to attach a shader object to more than one program -// object. If a shader object is deleted while it is attached to a program -// object, it will be flagged for deletion, and deletion will not occur until -// DetachShader is called to detach it from all program objects to which it -// is attached. -// -// Error GL.INVALID_VALUE is generated if either program or shader is not a -// value generated by OpenGL. GL.INVALID_OPERATION is generated if program -// is not a program object. GL.INVALID_OPERATION is generated if shader is -// not a shader object. GL.INVALID_OPERATION is generated if shader is -// already attached to program. GL.INVALID_OPERATION is generated if -// AttachShader is executed between the execution of Begin and the -// corresponding execution of End. -// -// AttachShader is available in GL version 2.0 or greater. -func (gl *GL) AttachShader(program glbase.Program, shader glbase.Shader) { - C.gl3_0_glAttachShader(gl.funcs, C.GLuint(program), C.GLuint(shader)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glStencilMaskSeparate.xml -func (gl *GL) StencilMaskSeparate(face glbase.Enum, mask uint32) { - C.gl3_0_glStencilMaskSeparate(gl.funcs, C.GLenum(face), C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glStencilFuncSeparate.xml -func (gl *GL) StencilFuncSeparate(face, glfunc glbase.Enum, ref int32, mask uint32) { - C.gl3_0_glStencilFuncSeparate(gl.funcs, C.GLenum(face), C.GLenum(glfunc), C.GLint(ref), C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glStencilOpSeparate.xml -func (gl *GL) StencilOpSeparate(face, sfail, dpfail, dppass glbase.Enum) { - C.gl3_0_glStencilOpSeparate(gl.funcs, C.GLenum(face), C.GLenum(sfail), C.GLenum(dpfail), C.GLenum(dppass)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDrawBuffers.xml -func (gl *GL) DrawBuffers(n int, bufs []glbase.Enum) { - C.gl3_0_glDrawBuffers(gl.funcs, C.GLsizei(n), (*C.GLenum)(unsafe.Pointer(&bufs[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBlendEquationSeparate.xml -func (gl *GL) BlendEquationSeparate(modeRGB, modeAlpha glbase.Enum) { - C.gl3_0_glBlendEquationSeparate(gl.funcs, C.GLenum(modeRGB), C.GLenum(modeAlpha)) -} - -// UniformMatrix4x3fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix4x3fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix4x3fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(4*3) != 0 { - panic("invalid value length for UniformMatrix4x3fv") - } - count := len(value) / (4 * 3) - C.gl3_0_glUniformMatrix4x3fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix3x4fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix3x4fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix3x4fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(3*4) != 0 { - panic("invalid value length for UniformMatrix3x4fv") - } - count := len(value) / (3 * 4) - C.gl3_0_glUniformMatrix3x4fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix4x2fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix4x2fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix4x2fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(4*2) != 0 { - panic("invalid value length for UniformMatrix4x2fv") - } - count := len(value) / (4 * 2) - C.gl3_0_glUniformMatrix4x2fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix2x4fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix2x4fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix2x4fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(2*4) != 0 { - panic("invalid value length for UniformMatrix2x4fv") - } - count := len(value) / (2 * 4) - C.gl3_0_glUniformMatrix2x4fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix3x2fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix3x2fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix3x2fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(3*2) != 0 { - panic("invalid value length for UniformMatrix3x2fv") - } - count := len(value) / (3 * 2) - C.gl3_0_glUniformMatrix3x2fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix2x3fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix2x3fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix2x3fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(2*3) != 0 { - panic("invalid value length for UniformMatrix2x3fv") - } - count := len(value) / (2 * 3) - C.gl3_0_glUniformMatrix2x3fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsVertexArray.xml -func (gl *GL) IsVertexArray(array uint32) bool { - glresult := C.gl3_0_glIsVertexArray(gl.funcs, C.GLuint(array)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGenVertexArrays.xml -func (gl *GL) GenVertexArrays(n int, arrays []uint32) { - C.gl3_0_glGenVertexArrays(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&arrays[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDeleteVertexArrays.xml -func (gl *GL) DeleteVertexArrays(n int, arrays []uint32) { - C.gl3_0_glDeleteVertexArrays(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&arrays[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBindVertexArray.xml -func (gl *GL) BindVertexArray(array uint32) { - C.gl3_0_glBindVertexArray(gl.funcs, C.GLuint(array)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFlushMappedBufferRange.xml -func (gl *GL) FlushMappedBufferRange(target glbase.Enum, offset, length int) { - C.gl3_0_glFlushMappedBufferRange(gl.funcs, C.GLenum(target), C.GLintptr(offset), C.GLsizeiptr(length)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFramebufferTextureLayer.xml -func (gl *GL) FramebufferTextureLayer(target, attachment glbase.Enum, texture glbase.Texture, level int, layer int32) { - C.gl3_0_glFramebufferTextureLayer(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLuint(texture), C.GLint(level), C.GLint(layer)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRenderbufferStorageMultisample.xml -func (gl *GL) RenderbufferStorageMultisample(target glbase.Enum, samples int32, internalFormat glbase.Enum, width, height int) { - C.gl3_0_glRenderbufferStorageMultisample(gl.funcs, C.GLenum(target), C.GLsizei(samples), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBlitFramebuffer.xml -func (gl *GL) BlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1 int32, mask glbase.Bitfield, filter glbase.Enum) { - C.gl3_0_glBlitFramebuffer(gl.funcs, C.GLint(srcX0), C.GLint(srcY0), C.GLint(srcX1), C.GLint(srcY1), C.GLint(dstX0), C.GLint(dstY0), C.GLint(dstX1), C.GLint(dstY1), C.GLbitfield(mask), C.GLenum(filter)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGenerateMipmap.xml -func (gl *GL) GenerateMipmap(target glbase.Enum) { - C.gl3_0_glGenerateMipmap(gl.funcs, C.GLenum(target)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetFramebufferAttachmentParameteriv.xml -func (gl *GL) GetFramebufferAttachmentParameteriv(target, attachment, pname glbase.Enum, params []int32) { - C.gl3_0_glGetFramebufferAttachmentParameteriv(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFramebufferRenderbuffer.xml -func (gl *GL) FramebufferRenderbuffer(target, attachment, renderbuffertarget glbase.Enum, renderbuffer glbase.Renderbuffer) { - C.gl3_0_glFramebufferRenderbuffer(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(renderbuffertarget), C.GLuint(renderbuffer)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFramebufferTexture3D.xml -func (gl *GL) FramebufferTexture3D(target, attachment, textarget glbase.Enum, texture glbase.Texture, level int, zoffset int32) { - C.gl3_0_glFramebufferTexture3D(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(textarget), C.GLuint(texture), C.GLint(level), C.GLint(zoffset)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFramebufferTexture2D.xml -func (gl *GL) FramebufferTexture2D(target, attachment, textarget glbase.Enum, texture glbase.Texture, level int) { - C.gl3_0_glFramebufferTexture2D(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(textarget), C.GLuint(texture), C.GLint(level)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFramebufferTexture1D.xml -func (gl *GL) FramebufferTexture1D(target, attachment, textarget glbase.Enum, texture glbase.Texture, level int) { - C.gl3_0_glFramebufferTexture1D(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(textarget), C.GLuint(texture), C.GLint(level)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCheckFramebufferStatus.xml -func (gl *GL) CheckFramebufferStatus(target glbase.Enum) glbase.Enum { - glresult := C.gl3_0_glCheckFramebufferStatus(gl.funcs, C.GLenum(target)) - return glbase.Enum(glresult) -} - -// GenFramebuffers returns n framebuffer object names in ids. There is no -// guarantee that the names form a contiguous set of integers; however, it is -// guaranteed that none of the returned names was in use immediately before -// the call to GenFramebuffers. -// -// Framebuffer object names returned by a call to GenFramebuffers are not -// returned by subsequent calls, unless they are first deleted with -// DeleteFramebuffers. -// -// The names returned in ids are marked as used, for the purposes of -// GenFramebuffers only, but they acquire state and type only when they are -// first bound. -// -// Error GL.INVALID_VALUE is generated if n is negative. -func (gl *GL) GenFramebuffers(n int) []glbase.Framebuffer { - if n == 0 { - return nil - } - framebuffers := make([]glbase.Framebuffer, n) - C.gl3_0_glGenFramebuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&framebuffers[0]))) - return framebuffers -} - -// DeleteFramebuffers deletes the framebuffer objects whose names are -// stored in the framebuffers slice. The name zero is reserved by the GL and -// is silently ignored, should it occur in framebuffers, as are other unused -// names. Once a framebuffer object is deleted, its name is again unused and -// it has no attachments. If a framebuffer that is currently bound to one or -// more of the targets GL.DRAW_FRAMEBUFFER or GL.READ_FRAMEBUFFER is deleted, -// it is as though BindFramebuffer had been executed with the corresponding -// target and framebuffer zero. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// DeleteFramebuffers is available in GL version 3.0 or greater. -func (gl *GL) DeleteFramebuffers(framebuffers []glbase.Framebuffer) { - n := len(framebuffers) - if n == 0 { - return - } - C.gl3_0_glDeleteFramebuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&framebuffers[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBindFramebuffer.xml -func (gl *GL) BindFramebuffer(target glbase.Enum, framebuffer glbase.Framebuffer) { - C.gl3_0_glBindFramebuffer(gl.funcs, C.GLenum(target), C.GLuint(framebuffer)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsFramebuffer.xml -func (gl *GL) IsFramebuffer(framebuffer glbase.Framebuffer) bool { - glresult := C.gl3_0_glIsFramebuffer(gl.funcs, C.GLuint(framebuffer)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetRenderbufferParameteriv.xml -func (gl *GL) GetRenderbufferParameteriv(target, pname glbase.Enum, params []int32) { - C.gl3_0_glGetRenderbufferParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRenderbufferStorage.xml -func (gl *GL) RenderbufferStorage(target, internalFormat glbase.Enum, width, height int) { - C.gl3_0_glRenderbufferStorage(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height)) -} - -// GenRenderbuffers returns n renderbuffer object names in renderbuffers. -// There is no guarantee that the names form a contiguous set of integers; -// however, it is guaranteed that none of the returned names was in use -// immediately before the call to GenRenderbuffers. -// -// Renderbuffer object names returned by a call to GenRenderbuffers are not -// returned by subsequent calls, unless they are first deleted with -// DeleteRenderbuffers. -// -// The names returned in renderbuffers are marked as used, for the purposes -// of GenRenderbuffers only, but they acquire state and type only when they -// are first bound. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// GenRenderbuffers is available in GL version 3.0 or greater. -func (gl *GL) GenRenderbuffers(n int) []glbase.Renderbuffer { - if n == 0 { - return nil - } - renderbuffers := make([]glbase.Renderbuffer, n) - C.gl3_0_glGenRenderbuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&renderbuffers[0]))) - return renderbuffers -} - -// DeleteRenderbuffers deletes the renderbuffer objects whose names are stored -// in the renderbuffers slice. The name zero is reserved by the GL and -// is silently ignored, should it occur in renderbuffers, as are other unused -// names. Once a renderbuffer object is deleted, its name is again unused and -// it has no contents. If a renderbuffer that is currently bound to the -// target GL.RENDERBUFFER is deleted, it is as though BindRenderbuffer had -// been executed with a target of GL.RENDERBUFFER and a name of zero. -// -// If a renderbuffer object is attached to one or more attachment points in -// the currently bound framebuffer, then it as if FramebufferRenderbuffer -// had been called, with a renderbuffer of zero for each attachment point to -// which this image was attached in the currently bound framebuffer. In other -// words, this renderbuffer object is first detached from all attachment -// ponits in the currently bound framebuffer. Note that the renderbuffer -// image is specifically not detached from any non-bound framebuffers. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// DeleteRenderbuffers is available in GL version 3.0 or greater. -func (gl *GL) DeleteRenderbuffers(renderbuffers []glbase.Renderbuffer) { - n := len(renderbuffers) - if n == 0 { - return - } - C.gl3_0_glDeleteRenderbuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&renderbuffers[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBindRenderbuffer.xml -func (gl *GL) BindRenderbuffer(target glbase.Enum, renderbuffer glbase.Renderbuffer) { - C.gl3_0_glBindRenderbuffer(gl.funcs, C.GLenum(target), C.GLuint(renderbuffer)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsRenderbuffer.xml -func (gl *GL) IsRenderbuffer(renderbuffer glbase.Renderbuffer) bool { - glresult := C.gl3_0_glIsRenderbuffer(gl.funcs, C.GLuint(renderbuffer)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClearBufferfi.xml -func (gl *GL) ClearBufferfi(buffer glbase.Enum, drawbuffer int32, depth float32, stencil int32) { - C.gl3_0_glClearBufferfi(gl.funcs, C.GLenum(buffer), C.GLint(drawbuffer), C.GLfloat(depth), C.GLint(stencil)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClearBufferfv.xml -func (gl *GL) ClearBufferfv(buffer glbase.Enum, drawbuffer int32, value []float32) { - C.gl3_0_glClearBufferfv(gl.funcs, C.GLenum(buffer), C.GLint(drawbuffer), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClearBufferuiv.xml -func (gl *GL) ClearBufferuiv(buffer glbase.Enum, drawbuffer int32, value []uint32) { - C.gl3_0_glClearBufferuiv(gl.funcs, C.GLenum(buffer), C.GLint(drawbuffer), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClearBufferiv.xml -func (gl *GL) ClearBufferiv(buffer glbase.Enum, drawbuffer int32, value []int32) { - C.gl3_0_glClearBufferiv(gl.funcs, C.GLenum(buffer), C.GLint(drawbuffer), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetTexParameterIuiv.xml -func (gl *GL) GetTexParameterIuiv(target, pname glbase.Enum, params []uint32) { - C.gl3_0_glGetTexParameterIuiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetTexParameterIiv.xml -func (gl *GL) GetTexParameterIiv(target, pname glbase.Enum, params []int32) { - C.gl3_0_glGetTexParameterIiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexParameterIuiv.xml -func (gl *GL) TexParameterIuiv(target, pname glbase.Enum, params []uint32) { - C.gl3_0_glTexParameterIuiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexParameterIiv.xml -func (gl *GL) TexParameterIiv(target, pname glbase.Enum, params []int32) { - C.gl3_0_glTexParameterIiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// Uniform4uiv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform4uiv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4uiv(location glbase.Uniform, value []uint32) { - if len(value) == 0 { - return - } - if len(value)%4 != 0 { - panic("invalid value length for Uniform4uiv") - } - count := len(value) / 4 - C.gl3_0_glUniform4uiv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// Uniform3uiv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform3uiv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3uiv(location glbase.Uniform, value []uint32) { - if len(value) == 0 { - return - } - if len(value)%3 != 0 { - panic("invalid value length for Uniform3uiv") - } - count := len(value) / 3 - C.gl3_0_glUniform3uiv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// Uniform2uiv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform2uiv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2uiv(location glbase.Uniform, value []uint32) { - if len(value) == 0 { - return - } - if len(value)%2 != 0 { - panic("invalid value length for Uniform2uiv") - } - count := len(value) / 2 - C.gl3_0_glUniform2uiv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// Uniform1uiv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform1uiv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1uiv(location glbase.Uniform, value []uint32) { - if len(value) == 0 { - return - } - count := len(value) - C.gl3_0_glUniform1uiv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// Uniform4ui modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform4ui operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4ui(location glbase.Uniform, v0, v1, v2, v3 uint32) { - C.gl3_0_glUniform4ui(gl.funcs, C.GLint(location), C.GLuint(v0), C.GLuint(v1), C.GLuint(v2), C.GLuint(v3)) -} - -// Uniform3ui modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform3ui operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3ui(location glbase.Uniform, v0, v1, v2 uint32) { - C.gl3_0_glUniform3ui(gl.funcs, C.GLint(location), C.GLuint(v0), C.GLuint(v1), C.GLuint(v2)) -} - -// Uniform2ui modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform2ui operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2ui(location glbase.Uniform, v0, v1 uint32) { - C.gl3_0_glUniform2ui(gl.funcs, C.GLint(location), C.GLuint(v0), C.GLuint(v1)) -} - -// Uniform1ui modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform1ui operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1ui(location glbase.Uniform, v0 uint32) { - C.gl3_0_glUniform1ui(gl.funcs, C.GLint(location), C.GLuint(v0)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetFragDataLocation.xml -func (gl *GL) GetFragDataLocation(program glbase.Program, name []byte) int32 { - glresult := C.gl3_0_glGetFragDataLocation(gl.funcs, C.GLuint(program), (*C.GLchar)(unsafe.Pointer(&name[0]))) - return int32(glresult) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBindFragDataLocation.xml -func (gl *GL) BindFragDataLocation(program glbase.Program, color uint32, name []byte) { - C.gl3_0_glBindFragDataLocation(gl.funcs, C.GLuint(program), C.GLuint(color), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetUniformuiv.xml -func (gl *GL) GetUniformuiv(program glbase.Program, location glbase.Uniform, params []uint32) { - C.gl3_0_glGetUniformuiv(gl.funcs, C.GLuint(program), C.GLint(location), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetVertexAttribIuiv.xml -func (gl *GL) GetVertexAttribIuiv(index glbase.Attrib, pname glbase.Enum, params []uint32) { - C.gl3_0_glGetVertexAttribIuiv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetVertexAttribIiv.xml -func (gl *GL) GetVertexAttribIiv(index glbase.Attrib, pname glbase.Enum, params []int32) { - C.gl3_0_glGetVertexAttribIiv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribIPointer.xml -func (gl *GL) VertexAttribIPointer(index glbase.Attrib, size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl3_0_glVertexAttribIPointer(gl.funcs, C.GLuint(index), C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEndConditionalRender.xml -func (gl *GL) EndConditionalRender() { - C.gl3_0_glEndConditionalRender(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBeginConditionalRender.xml -func (gl *GL) BeginConditionalRender(id uint32, mode glbase.Enum) { - C.gl3_0_glBeginConditionalRender(gl.funcs, C.GLuint(id), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClampColor.xml -func (gl *GL) ClampColor(target, clamp glbase.Enum) { - C.gl3_0_glClampColor(gl.funcs, C.GLenum(target), C.GLenum(clamp)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetTransformFeedbackVarying.xml -func (gl *GL) GetTransformFeedbackVarying(program glbase.Program, index uint32, bufSize int32, length []int32, size []int, gltype []glbase.Enum, name []byte) { - C.gl3_0_glGetTransformFeedbackVarying(gl.funcs, C.GLuint(program), C.GLuint(index), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLsizei)(unsafe.Pointer(&size[0])), (*C.GLenum)(unsafe.Pointer(&gltype[0])), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBindBufferBase.xml -func (gl *GL) BindBufferBase(target glbase.Enum, index uint32, buffer glbase.Buffer) { - C.gl3_0_glBindBufferBase(gl.funcs, C.GLenum(target), C.GLuint(index), C.GLuint(buffer)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBindBufferRange.xml -func (gl *GL) BindBufferRange(target glbase.Enum, index uint32, buffer glbase.Buffer, offset, size int) { - C.gl3_0_glBindBufferRange(gl.funcs, C.GLenum(target), C.GLuint(index), C.GLuint(buffer), C.GLintptr(offset), C.GLsizeiptr(size)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEndTransformFeedback.xml -func (gl *GL) EndTransformFeedback() { - C.gl3_0_glEndTransformFeedback(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBeginTransformFeedback.xml -func (gl *GL) BeginTransformFeedback(primitiveMode glbase.Enum) { - C.gl3_0_glBeginTransformFeedback(gl.funcs, C.GLenum(primitiveMode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsEnabledi.xml -func (gl *GL) IsEnabledi(target glbase.Enum, index uint32) bool { - glresult := C.gl3_0_glIsEnabledi(gl.funcs, C.GLenum(target), C.GLuint(index)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDisablei.xml -func (gl *GL) Disablei(target glbase.Enum, index uint32) { - C.gl3_0_glDisablei(gl.funcs, C.GLenum(target), C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEnablei.xml -func (gl *GL) Enablei(target glbase.Enum, index uint32) { - C.gl3_0_glEnablei(gl.funcs, C.GLenum(target), C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetIntegeri_v.xml -func (gl *GL) GetIntegeri_v(target glbase.Enum, index uint32, data []int32) { - C.gl3_0_glGetIntegeri_v(gl.funcs, C.GLenum(target), C.GLuint(index), (*C.GLint)(unsafe.Pointer(&data[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetBooleani_v.xml -func (gl *GL) GetBooleani_v(target glbase.Enum, index uint32, data []bool) { - C.gl3_0_glGetBooleani_v(gl.funcs, C.GLenum(target), C.GLuint(index), (*C.GLboolean)(unsafe.Pointer(&data[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColorMaski.xml -func (gl *GL) ColorMaski(index uint32, r, g, b, a bool) { - C.gl3_0_glColorMaski(gl.funcs, C.GLuint(index), *(*C.GLboolean)(unsafe.Pointer(&r)), *(*C.GLboolean)(unsafe.Pointer(&g)), *(*C.GLboolean)(unsafe.Pointer(&b)), *(*C.GLboolean)(unsafe.Pointer(&a))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTranslatef.xml -func (gl *GL) Translatef(x, y, z float32) { - C.gl3_0_glTranslatef(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTranslated.xml -func (gl *GL) Translated(x, y, z float64) { - C.gl3_0_glTranslated(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glScalef.xml -func (gl *GL) Scalef(x, y, z float32) { - C.gl3_0_glScalef(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glScaled.xml -func (gl *GL) Scaled(x, y, z float64) { - C.gl3_0_glScaled(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRotatef.xml -func (gl *GL) Rotatef(angle, x, y, z float32) { - C.gl3_0_glRotatef(gl.funcs, C.GLfloat(angle), C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRotated.xml -func (gl *GL) Rotated(angle, x, y, z float64) { - C.gl3_0_glRotated(gl.funcs, C.GLdouble(angle), C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPushMatrix.xml -func (gl *GL) PushMatrix() { - C.gl3_0_glPushMatrix(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPopMatrix.xml -func (gl *GL) PopMatrix() { - C.gl3_0_glPopMatrix(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glOrtho.xml -func (gl *GL) Ortho(left, right, bottom, top, zNear, zFar float64) { - C.gl3_0_glOrtho(gl.funcs, C.GLdouble(left), C.GLdouble(right), C.GLdouble(bottom), C.GLdouble(top), C.GLdouble(zNear), C.GLdouble(zFar)) -} - -// MultMatrixd multiplies the current matrix with the provided matrix. -// -// The m parameter must hold 16 consecutive elements of a 4x4 column-major matrix. -// -// The current matrix is determined by the current matrix mode (see -// MatrixMode). It is either the projection matrix, modelview matrix, or the -// texture matrix. -// -// For example, if the current matrix is C and the coordinates to be transformed -// are v = (v[0], v[1], v[2], v[3]), then the current transformation is C × v, or -// -// c[0] c[4] c[8] c[12] v[0] -// c[1] c[5] c[9] c[13] v[1] -// c[2] c[6] c[10] c[14] X v[2] -// c[3] c[7] c[11] c[15] v[3] -// -// Calling MultMatrix with an argument of m = m[0], m[1], ..., m[15] -// replaces the current transformation with (C X M) x v, or -// -// c[0] c[4] c[8] c[12] m[0] m[4] m[8] m[12] v[0] -// c[1] c[5] c[9] c[13] m[1] m[5] m[9] m[13] v[1] -// c[2] c[6] c[10] c[14] X m[2] m[6] m[10] m[14] X v[2] -// c[3] c[7] c[11] c[15] m[3] m[7] m[11] m[15] v[3] -// -// Where 'X' denotes matrix multiplication, and v is represented as a 4x1 matrix. -// -// While the elements of the matrix may be specified with single or double -// precision, the GL may store or operate on these values in less-than-single -// precision. -// -// In many computer languages, 4×4 arrays are represented in row-major -// order. The transformations just described represent these matrices in -// column-major order. The order of the multiplication is important. For -// example, if the current transformation is a rotation, and MultMatrix is -// called with a translation matrix, the translation is done directly on the -// coordinates to be transformed, while the rotation is done on the results -// of that translation. -// -// GL.INVALID_OPERATION is generated if MultMatrix is executed between the -// execution of Begin and the corresponding execution of End. -func (gl *GL) MultMatrixd(m []float64) { - if len(m) != 16 { - panic("parameter m must have length 16 for the 4x4 matrix") - } - C.gl3_0_glMultMatrixd(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&m[0]))) -} - -// MultMatrixf multiplies the current matrix with the provided matrix. -// -// The m parameter must hold 16 consecutive elements of a 4x4 column-major matrix. -// -// The current matrix is determined by the current matrix mode (see -// MatrixMode). It is either the projection matrix, modelview matrix, or the -// texture matrix. -// -// For example, if the current matrix is C and the coordinates to be transformed -// are v = (v[0], v[1], v[2], v[3]), then the current transformation is C × v, or -// -// c[0] c[4] c[8] c[12] v[0] -// c[1] c[5] c[9] c[13] v[1] -// c[2] c[6] c[10] c[14] X v[2] -// c[3] c[7] c[11] c[15] v[3] -// -// Calling MultMatrix with an argument of m = m[0], m[1], ..., m[15] -// replaces the current transformation with (C X M) x v, or -// -// c[0] c[4] c[8] c[12] m[0] m[4] m[8] m[12] v[0] -// c[1] c[5] c[9] c[13] m[1] m[5] m[9] m[13] v[1] -// c[2] c[6] c[10] c[14] X m[2] m[6] m[10] m[14] X v[2] -// c[3] c[7] c[11] c[15] m[3] m[7] m[11] m[15] v[3] -// -// Where 'X' denotes matrix multiplication, and v is represented as a 4x1 matrix. -// -// While the elements of the matrix may be specified with single or double -// precision, the GL may store or operate on these values in less-than-single -// precision. -// -// In many computer languages, 4×4 arrays are represented in row-major -// order. The transformations just described represent these matrices in -// column-major order. The order of the multiplication is important. For -// example, if the current transformation is a rotation, and MultMatrix is -// called with a translation matrix, the translation is done directly on the -// coordinates to be transformed, while the rotation is done on the results -// of that translation. -// -// GL.INVALID_OPERATION is generated if MultMatrix is executed between the -// execution of Begin and the corresponding execution of End. -func (gl *GL) MultMatrixf(m []float32) { - if len(m) != 16 { - panic("parameter m must have length 16 for the 4x4 matrix") - } - C.gl3_0_glMultMatrixf(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMatrixMode.xml -func (gl *GL) MatrixMode(mode glbase.Enum) { - C.gl3_0_glMatrixMode(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glLoadMatrixd.xml -func (gl *GL) LoadMatrixd(m []float64) { - C.gl3_0_glLoadMatrixd(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glLoadMatrixf.xml -func (gl *GL) LoadMatrixf(m []float32) { - C.gl3_0_glLoadMatrixf(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glLoadIdentity.xml -func (gl *GL) LoadIdentity() { - C.gl3_0_glLoadIdentity(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFrustum.xml -func (gl *GL) Frustum(left, right, bottom, top, zNear, zFar float64) { - C.gl3_0_glFrustum(gl.funcs, C.GLdouble(left), C.GLdouble(right), C.GLdouble(bottom), C.GLdouble(top), C.GLdouble(zNear), C.GLdouble(zFar)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsList.xml -func (gl *GL) IsList(list uint32) bool { - glresult := C.gl3_0_glIsList(gl.funcs, C.GLuint(list)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetTexGeniv.xml -func (gl *GL) GetTexGeniv(coord, pname glbase.Enum, params []int32) { - C.gl3_0_glGetTexGeniv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetTexGenfv.xml -func (gl *GL) GetTexGenfv(coord, pname glbase.Enum, params []float32) { - C.gl3_0_glGetTexGenfv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetTexGendv.xml -func (gl *GL) GetTexGendv(coord, pname glbase.Enum, params []float64) { - C.gl3_0_glGetTexGendv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetTexEnviv.xml -func (gl *GL) GetTexEnviv(target, pname glbase.Enum, params []int32) { - C.gl3_0_glGetTexEnviv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetTexEnvfv.xml -func (gl *GL) GetTexEnvfv(target, pname glbase.Enum, params []float32) { - C.gl3_0_glGetTexEnvfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetPolygonStipple.xml -func (gl *GL) GetPolygonStipple(mask []uint8) { - C.gl3_0_glGetPolygonStipple(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&mask[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetPixelMapusv.xml -func (gl *GL) GetPixelMapusv(glmap glbase.Enum, values []uint16) { - C.gl3_0_glGetPixelMapusv(gl.funcs, C.GLenum(glmap), (*C.GLushort)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetPixelMapuiv.xml -func (gl *GL) GetPixelMapuiv(glmap glbase.Enum, values []uint32) { - C.gl3_0_glGetPixelMapuiv(gl.funcs, C.GLenum(glmap), (*C.GLuint)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetPixelMapfv.xml -func (gl *GL) GetPixelMapfv(glmap glbase.Enum, values []float32) { - C.gl3_0_glGetPixelMapfv(gl.funcs, C.GLenum(glmap), (*C.GLfloat)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetMaterialiv.xml -func (gl *GL) GetMaterialiv(face, pname glbase.Enum, params []int32) { - C.gl3_0_glGetMaterialiv(gl.funcs, C.GLenum(face), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetMaterialfv.xml -func (gl *GL) GetMaterialfv(face, pname glbase.Enum, params []float32) { - C.gl3_0_glGetMaterialfv(gl.funcs, C.GLenum(face), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetMapiv.xml -func (gl *GL) GetMapiv(target, query glbase.Enum, v []int32) { - C.gl3_0_glGetMapiv(gl.funcs, C.GLenum(target), C.GLenum(query), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetMapfv.xml -func (gl *GL) GetMapfv(target, query glbase.Enum, v []float32) { - C.gl3_0_glGetMapfv(gl.funcs, C.GLenum(target), C.GLenum(query), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetMapdv.xml -func (gl *GL) GetMapdv(target, query glbase.Enum, v []float64) { - C.gl3_0_glGetMapdv(gl.funcs, C.GLenum(target), C.GLenum(query), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetLightiv.xml -func (gl *GL) GetLightiv(light, pname glbase.Enum, params []int32) { - C.gl3_0_glGetLightiv(gl.funcs, C.GLenum(light), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetLightfv.xml -func (gl *GL) GetLightfv(light, pname glbase.Enum, params []float32) { - C.gl3_0_glGetLightfv(gl.funcs, C.GLenum(light), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetClipPlane.xml -func (gl *GL) GetClipPlane(plane glbase.Enum, equation []float64) { - C.gl3_0_glGetClipPlane(gl.funcs, C.GLenum(plane), (*C.GLdouble)(unsafe.Pointer(&equation[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDrawPixels.xml -func (gl *GL) DrawPixels(width, height int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl3_0_glDrawPixels(gl.funcs, C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCopyPixels.xml -func (gl *GL) CopyPixels(x, y, width, height int, gltype glbase.Enum) { - C.gl3_0_glCopyPixels(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height), C.GLenum(gltype)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPixelMapusv.xml -func (gl *GL) PixelMapusv(glmap glbase.Enum, mapsize int32, values []uint16) { - C.gl3_0_glPixelMapusv(gl.funcs, C.GLenum(glmap), C.GLint(mapsize), (*C.GLushort)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPixelMapuiv.xml -func (gl *GL) PixelMapuiv(glmap glbase.Enum, mapsize int32, values []uint32) { - C.gl3_0_glPixelMapuiv(gl.funcs, C.GLenum(glmap), C.GLint(mapsize), (*C.GLuint)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPixelMapfv.xml -func (gl *GL) PixelMapfv(glmap glbase.Enum, mapsize int32, values []float32) { - C.gl3_0_glPixelMapfv(gl.funcs, C.GLenum(glmap), C.GLint(mapsize), (*C.GLfloat)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPixelTransferi.xml -func (gl *GL) PixelTransferi(pname glbase.Enum, param int32) { - C.gl3_0_glPixelTransferi(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPixelTransferf.xml -func (gl *GL) PixelTransferf(pname glbase.Enum, param float32) { - C.gl3_0_glPixelTransferf(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPixelZoom.xml -func (gl *GL) PixelZoom(xfactor, yfactor float32) { - C.gl3_0_glPixelZoom(gl.funcs, C.GLfloat(xfactor), C.GLfloat(yfactor)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glAlphaFunc.xml -func (gl *GL) AlphaFunc(glfunc glbase.Enum, ref float32) { - C.gl3_0_glAlphaFunc(gl.funcs, C.GLenum(glfunc), C.GLfloat(ref)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEvalPoint2.xml -func (gl *GL) EvalPoint2(i, j int32) { - C.gl3_0_glEvalPoint2(gl.funcs, C.GLint(i), C.GLint(j)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEvalMesh2.xml -func (gl *GL) EvalMesh2(mode glbase.Enum, i1, i2, j1, j2 int32) { - C.gl3_0_glEvalMesh2(gl.funcs, C.GLenum(mode), C.GLint(i1), C.GLint(i2), C.GLint(j1), C.GLint(j2)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEvalPoint1.xml -func (gl *GL) EvalPoint1(i int32) { - C.gl3_0_glEvalPoint1(gl.funcs, C.GLint(i)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEvalMesh1.xml -func (gl *GL) EvalMesh1(mode glbase.Enum, i1, i2 int32) { - C.gl3_0_glEvalMesh1(gl.funcs, C.GLenum(mode), C.GLint(i1), C.GLint(i2)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEvalCoord2fv.xml -func (gl *GL) EvalCoord2fv(u []float32) { - if len(u) != 2 { - panic("parameter u has incorrect length") - } - C.gl3_0_glEvalCoord2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&u[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEvalCoord2f.xml -func (gl *GL) EvalCoord2f(u, v float32) { - C.gl3_0_glEvalCoord2f(gl.funcs, C.GLfloat(u), C.GLfloat(v)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEvalCoord2dv.xml -func (gl *GL) EvalCoord2dv(u []float64) { - if len(u) != 2 { - panic("parameter u has incorrect length") - } - C.gl3_0_glEvalCoord2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&u[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEvalCoord2d.xml -func (gl *GL) EvalCoord2d(u, v float64) { - C.gl3_0_glEvalCoord2d(gl.funcs, C.GLdouble(u), C.GLdouble(v)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEvalCoord1fv.xml -func (gl *GL) EvalCoord1fv(u []float32) { - C.gl3_0_glEvalCoord1fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&u[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEvalCoord1f.xml -func (gl *GL) EvalCoord1f(u float32) { - C.gl3_0_glEvalCoord1f(gl.funcs, C.GLfloat(u)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEvalCoord1dv.xml -func (gl *GL) EvalCoord1dv(u []float64) { - C.gl3_0_glEvalCoord1dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&u[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEvalCoord1d.xml -func (gl *GL) EvalCoord1d(u float64) { - C.gl3_0_glEvalCoord1d(gl.funcs, C.GLdouble(u)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMapGrid2f.xml -func (gl *GL) MapGrid2f(un int32, u1, u2 float32, vn int32, v1, v2 float32) { - C.gl3_0_glMapGrid2f(gl.funcs, C.GLint(un), C.GLfloat(u1), C.GLfloat(u2), C.GLint(vn), C.GLfloat(v1), C.GLfloat(v2)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMapGrid2d.xml -func (gl *GL) MapGrid2d(un int32, u1, u2 float64, vn int32, v1, v2 float64) { - C.gl3_0_glMapGrid2d(gl.funcs, C.GLint(un), C.GLdouble(u1), C.GLdouble(u2), C.GLint(vn), C.GLdouble(v1), C.GLdouble(v2)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMapGrid1f.xml -func (gl *GL) MapGrid1f(un int32, u1, u2 float32) { - C.gl3_0_glMapGrid1f(gl.funcs, C.GLint(un), C.GLfloat(u1), C.GLfloat(u2)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMapGrid1d.xml -func (gl *GL) MapGrid1d(un int32, u1, u2 float64) { - C.gl3_0_glMapGrid1d(gl.funcs, C.GLint(un), C.GLdouble(u1), C.GLdouble(u2)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMap2f.xml -func (gl *GL) Map2f(target glbase.Enum, u1, u2 float32, ustride, uorder int32, v1, v2 float32, vstride, vorder int32, points []float32) { - C.gl3_0_glMap2f(gl.funcs, C.GLenum(target), C.GLfloat(u1), C.GLfloat(u2), C.GLint(ustride), C.GLint(uorder), C.GLfloat(v1), C.GLfloat(v2), C.GLint(vstride), C.GLint(vorder), (*C.GLfloat)(unsafe.Pointer(&points[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMap2d.xml -func (gl *GL) Map2d(target glbase.Enum, u1, u2 float64, ustride, uorder int32, v1, v2 float64, vstride, vorder int32, points []float64) { - C.gl3_0_glMap2d(gl.funcs, C.GLenum(target), C.GLdouble(u1), C.GLdouble(u2), C.GLint(ustride), C.GLint(uorder), C.GLdouble(v1), C.GLdouble(v2), C.GLint(vstride), C.GLint(vorder), (*C.GLdouble)(unsafe.Pointer(&points[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMap1f.xml -func (gl *GL) Map1f(target glbase.Enum, u1, u2 float32, stride, order int, points []float32) { - C.gl3_0_glMap1f(gl.funcs, C.GLenum(target), C.GLfloat(u1), C.GLfloat(u2), C.GLint(stride), C.GLint(order), (*C.GLfloat)(unsafe.Pointer(&points[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMap1d.xml -func (gl *GL) Map1d(target glbase.Enum, u1, u2 float64, stride, order int, points []float64) { - C.gl3_0_glMap1d(gl.funcs, C.GLenum(target), C.GLdouble(u1), C.GLdouble(u2), C.GLint(stride), C.GLint(order), (*C.GLdouble)(unsafe.Pointer(&points[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPushAttrib.xml -func (gl *GL) PushAttrib(mask glbase.Bitfield) { - C.gl3_0_glPushAttrib(gl.funcs, C.GLbitfield(mask)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPopAttrib.xml -func (gl *GL) PopAttrib() { - C.gl3_0_glPopAttrib(gl.funcs) -} - -// Accum executes an operation on the accumulation buffer. -// -// Parameter op defines the accumulation buffer operation (GL.ACCUM, GL.LOAD, -// GL.ADD, GL.MULT, or GL.RETURN) and specifies how the value parameter is -// used. -// -// The accumulation buffer is an extended-range color buffer. Images are not -// rendered into it. Rather, images rendered into one of the color buffers -// are added to the contents of the accumulation buffer after rendering. -// Effects such as antialiasing (of points, lines, and polygons), motion -// blur, and depth of field can be created by accumulating images generated -// with different transformation matrices. -// -// Each pixel in the accumulation buffer consists of red, green, blue, and -// alpha values. The number of bits per component in the accumulation buffer -// depends on the implementation. You can examine this number by calling -// GetIntegerv four times, with arguments GL.ACCUM_RED_BITS, -// GL.ACCUM_GREEN_BITS, GL.ACCUM_BLUE_BITS, and GL.ACCUM_ALPHA_BITS. -// Regardless of the number of bits per component, the range of values stored -// by each component is (-1, 1). The accumulation buffer pixels are mapped -// one-to-one with frame buffer pixels. -// -// All accumulation buffer operations are limited to the area of the current -// scissor box and applied identically to the red, green, blue, and alpha -// components of each pixel. If a Accum operation results in a value outside -// the range (-1, 1), the contents of an accumulation buffer pixel component -// are undefined. -// -// The operations are as follows: -// -// GL.ACCUM -// Obtains R, G, B, and A values from the buffer currently selected for -// reading (see ReadBuffer). Each component value is divided by 2 n - -// 1 , where n is the number of bits allocated to each color component -// in the currently selected buffer. The result is a floating-point -// value in the range 0 1 , which is multiplied by value and added to -// the corresponding pixel component in the accumulation buffer, -// thereby updating the accumulation buffer. -// -// GL.LOAD -// Similar to GL.ACCUM, except that the current value in the -// accumulation buffer is not used in the calculation of the new value. -// That is, the R, G, B, and A values from the currently selected -// buffer are divided by 2 n - 1 , multiplied by value, and then stored -// in the corresponding accumulation buffer cell, overwriting the -// current value. -// -// GL.ADD -// Adds value to each R, G, B, and A in the accumulation buffer. -// -// GL.MULT -// Multiplies each R, G, B, and A in the accumulation buffer by value -// and returns the scaled component to its corresponding accumulation -// buffer location. -// -// GL.RETURN -// Transfers accumulation buffer values to the color buffer or buffers -// currently selected for writing. Each R, G, B, and A component is -// multiplied by value, then multiplied by 2 n - 1 , clamped to the -// range 0 2 n - 1 , and stored in the corresponding display buffer -// cell. The only fragment operations that are applied to this transfer -// are pixel ownership, scissor, dithering, and color writemasks. -// -// To clear the accumulation buffer, call ClearAccum with R, G, B, and A -// values to set it to, then call Clear with the accumulation buffer -// enabled. -// -// Error GL.INVALID_ENUM is generated if op is not an accepted value. -// GL.INVALID_OPERATION is generated if there is no accumulation buffer. -// GL.INVALID_OPERATION is generated if Accum is executed between the -// execution of Begin and the corresponding execution of End. -func (gl *GL) Accum(op glbase.Enum, value float32) { - C.gl3_0_glAccum(gl.funcs, C.GLenum(op), C.GLfloat(value)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIndexMask.xml -func (gl *GL) IndexMask(mask uint32) { - C.gl3_0_glIndexMask(gl.funcs, C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClearIndex.xml -func (gl *GL) ClearIndex(c float32) { - C.gl3_0_glClearIndex(gl.funcs, C.GLfloat(c)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClearAccum.xml -func (gl *GL) ClearAccum(red, green, blue, alpha float32) { - C.gl3_0_glClearAccum(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPushName.xml -func (gl *GL) PushName(name uint32) { - C.gl3_0_glPushName(gl.funcs, C.GLuint(name)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPopName.xml -func (gl *GL) PopName() { - C.gl3_0_glPopName(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPassThrough.xml -func (gl *GL) PassThrough(token float32) { - C.gl3_0_glPassThrough(gl.funcs, C.GLfloat(token)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glLoadName.xml -func (gl *GL) LoadName(name uint32) { - C.gl3_0_glLoadName(gl.funcs, C.GLuint(name)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glInitNames.xml -func (gl *GL) InitNames() { - C.gl3_0_glInitNames(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRenderMode.xml -func (gl *GL) RenderMode(mode glbase.Enum) int32 { - glresult := C.gl3_0_glRenderMode(gl.funcs, C.GLenum(mode)) - return int32(glresult) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSelectBuffer.xml -func (gl *GL) SelectBuffer(size int, buffer []glbase.Buffer) { - C.gl3_0_glSelectBuffer(gl.funcs, C.GLsizei(size), (*C.GLuint)(unsafe.Pointer(&buffer[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFeedbackBuffer.xml -func (gl *GL) FeedbackBuffer(size int, gltype glbase.Enum, buffer []float32) { - C.gl3_0_glFeedbackBuffer(gl.funcs, C.GLsizei(size), C.GLenum(gltype), (*C.GLfloat)(unsafe.Pointer(&buffer[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexGeniv.xml -func (gl *GL) TexGeniv(coord, pname glbase.Enum, params []int32) { - C.gl3_0_glTexGeniv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexGeni.xml -func (gl *GL) TexGeni(coord, pname glbase.Enum, param int32) { - C.gl3_0_glTexGeni(gl.funcs, C.GLenum(coord), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexGenfv.xml -func (gl *GL) TexGenfv(coord, pname glbase.Enum, params []float32) { - C.gl3_0_glTexGenfv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexGenf.xml -func (gl *GL) TexGenf(coord, pname glbase.Enum, param float32) { - C.gl3_0_glTexGenf(gl.funcs, C.GLenum(coord), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexGendv.xml -func (gl *GL) TexGendv(coord, pname glbase.Enum, params []float64) { - C.gl3_0_glTexGendv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexGend.xml -func (gl *GL) TexGend(coord, pname glbase.Enum, param float64) { - C.gl3_0_glTexGend(gl.funcs, C.GLenum(coord), C.GLenum(pname), C.GLdouble(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexEnviv.xml -func (gl *GL) TexEnviv(target, pname glbase.Enum, params []int32) { - C.gl3_0_glTexEnviv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexEnvi.xml -func (gl *GL) TexEnvi(target, pname glbase.Enum, param int32) { - C.gl3_0_glTexEnvi(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexEnvfv.xml -func (gl *GL) TexEnvfv(target, pname glbase.Enum, params []float32) { - C.gl3_0_glTexEnvfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexEnvf.xml -func (gl *GL) TexEnvf(target, pname glbase.Enum, param float32) { - C.gl3_0_glTexEnvf(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glShadeModel.xml -func (gl *GL) ShadeModel(mode glbase.Enum) { - C.gl3_0_glShadeModel(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPolygonStipple.xml -func (gl *GL) PolygonStipple(mask []uint8) { - C.gl3_0_glPolygonStipple(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&mask[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMaterialiv.xml -func (gl *GL) Materialiv(face, pname glbase.Enum, params []int32) { - C.gl3_0_glMaterialiv(gl.funcs, C.GLenum(face), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMateriali.xml -func (gl *GL) Materiali(face, pname glbase.Enum, param int32) { - C.gl3_0_glMateriali(gl.funcs, C.GLenum(face), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMaterialfv.xml -func (gl *GL) Materialfv(face, pname glbase.Enum, params []float32) { - C.gl3_0_glMaterialfv(gl.funcs, C.GLenum(face), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMaterialf.xml -func (gl *GL) Materialf(face, pname glbase.Enum, param float32) { - C.gl3_0_glMaterialf(gl.funcs, C.GLenum(face), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glLineStipple.xml -func (gl *GL) LineStipple(factor int32, pattern uint16) { - C.gl3_0_glLineStipple(gl.funcs, C.GLint(factor), C.GLushort(pattern)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glLightModeliv.xml -func (gl *GL) LightModeliv(pname glbase.Enum, params []int32) { - C.gl3_0_glLightModeliv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glLightModeli.xml -func (gl *GL) LightModeli(pname glbase.Enum, param int32) { - C.gl3_0_glLightModeli(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glLightModelfv.xml -func (gl *GL) LightModelfv(pname glbase.Enum, params []float32) { - C.gl3_0_glLightModelfv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glLightModelf.xml -func (gl *GL) LightModelf(pname glbase.Enum, param float32) { - C.gl3_0_glLightModelf(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glLightiv.xml -func (gl *GL) Lightiv(light, pname glbase.Enum, params []int32) { - C.gl3_0_glLightiv(gl.funcs, C.GLenum(light), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glLighti.xml -func (gl *GL) Lighti(light, pname glbase.Enum, param int32) { - C.gl3_0_glLighti(gl.funcs, C.GLenum(light), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glLightfv.xml -func (gl *GL) Lightfv(light, pname glbase.Enum, params []float32) { - C.gl3_0_glLightfv(gl.funcs, C.GLenum(light), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glLightf.xml -func (gl *GL) Lightf(light, pname glbase.Enum, param float32) { - C.gl3_0_glLightf(gl.funcs, C.GLenum(light), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFogiv.xml -func (gl *GL) Fogiv(pname glbase.Enum, params []int32) { - C.gl3_0_glFogiv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFogi.xml -func (gl *GL) Fogi(pname glbase.Enum, param int32) { - C.gl3_0_glFogi(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFogfv.xml -func (gl *GL) Fogfv(pname glbase.Enum, params []float32) { - C.gl3_0_glFogfv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFogf.xml -func (gl *GL) Fogf(pname glbase.Enum, param float32) { - C.gl3_0_glFogf(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColorMaterial.xml -func (gl *GL) ColorMaterial(face, mode glbase.Enum) { - C.gl3_0_glColorMaterial(gl.funcs, C.GLenum(face), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClipPlane.xml -func (gl *GL) ClipPlane(plane glbase.Enum, equation []float64) { - C.gl3_0_glClipPlane(gl.funcs, C.GLenum(plane), (*C.GLdouble)(unsafe.Pointer(&equation[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex4sv.xml -func (gl *GL) Vertex4sv(v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_0_glVertex4sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex4s.xml -func (gl *GL) Vertex4s(x, y, z, w int16) { - C.gl3_0_glVertex4s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z), C.GLshort(w)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex4iv.xml -func (gl *GL) Vertex4iv(v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_0_glVertex4iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex4i.xml -func (gl *GL) Vertex4i(x, y, z, w int) { - C.gl3_0_glVertex4i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z), C.GLint(w)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex4fv.xml -func (gl *GL) Vertex4fv(v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_0_glVertex4fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex4f.xml -func (gl *GL) Vertex4f(x, y, z, w float32) { - C.gl3_0_glVertex4f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z), C.GLfloat(w)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex4dv.xml -func (gl *GL) Vertex4dv(v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_0_glVertex4dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex4d.xml -func (gl *GL) Vertex4d(x, y, z, w float64) { - C.gl3_0_glVertex4d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z), C.GLdouble(w)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex3sv.xml -func (gl *GL) Vertex3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_0_glVertex3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex3s.xml -func (gl *GL) Vertex3s(x, y, z int16) { - C.gl3_0_glVertex3s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex3iv.xml -func (gl *GL) Vertex3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_0_glVertex3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex3i.xml -func (gl *GL) Vertex3i(x, y, z int) { - C.gl3_0_glVertex3i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex3fv.xml -func (gl *GL) Vertex3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_0_glVertex3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex3f.xml -func (gl *GL) Vertex3f(x, y, z float32) { - C.gl3_0_glVertex3f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex3dv.xml -func (gl *GL) Vertex3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_0_glVertex3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex3d.xml -func (gl *GL) Vertex3d(x, y, z float64) { - C.gl3_0_glVertex3d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex2sv.xml -func (gl *GL) Vertex2sv(v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_0_glVertex2sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex2s.xml -func (gl *GL) Vertex2s(x, y int16) { - C.gl3_0_glVertex2s(gl.funcs, C.GLshort(x), C.GLshort(y)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex2iv.xml -func (gl *GL) Vertex2iv(v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_0_glVertex2iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex2i.xml -func (gl *GL) Vertex2i(x, y int) { - C.gl3_0_glVertex2i(gl.funcs, C.GLint(x), C.GLint(y)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex2fv.xml -func (gl *GL) Vertex2fv(v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_0_glVertex2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex2f.xml -func (gl *GL) Vertex2f(x, y float32) { - C.gl3_0_glVertex2f(gl.funcs, C.GLfloat(x), C.GLfloat(y)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex2dv.xml -func (gl *GL) Vertex2dv(v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_0_glVertex2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex2d.xml -func (gl *GL) Vertex2d(x, y float64) { - C.gl3_0_glVertex2d(gl.funcs, C.GLdouble(x), C.GLdouble(y)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord4sv.xml -func (gl *GL) TexCoord4sv(v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_0_glTexCoord4sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord4s.xml -func (gl *GL) TexCoord4s(s, t, r, q int16) { - C.gl3_0_glTexCoord4s(gl.funcs, C.GLshort(s), C.GLshort(t), C.GLshort(r), C.GLshort(q)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord4iv.xml -func (gl *GL) TexCoord4iv(v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_0_glTexCoord4iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord4i.xml -func (gl *GL) TexCoord4i(s, t, r, q int32) { - C.gl3_0_glTexCoord4i(gl.funcs, C.GLint(s), C.GLint(t), C.GLint(r), C.GLint(q)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord4fv.xml -func (gl *GL) TexCoord4fv(v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_0_glTexCoord4fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord4f.xml -func (gl *GL) TexCoord4f(s, t, r, q float32) { - C.gl3_0_glTexCoord4f(gl.funcs, C.GLfloat(s), C.GLfloat(t), C.GLfloat(r), C.GLfloat(q)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord4dv.xml -func (gl *GL) TexCoord4dv(v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_0_glTexCoord4dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord4d.xml -func (gl *GL) TexCoord4d(s, t, r, q float64) { - C.gl3_0_glTexCoord4d(gl.funcs, C.GLdouble(s), C.GLdouble(t), C.GLdouble(r), C.GLdouble(q)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord3sv.xml -func (gl *GL) TexCoord3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_0_glTexCoord3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord3s.xml -func (gl *GL) TexCoord3s(s, t, r int16) { - C.gl3_0_glTexCoord3s(gl.funcs, C.GLshort(s), C.GLshort(t), C.GLshort(r)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord3iv.xml -func (gl *GL) TexCoord3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_0_glTexCoord3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord3i.xml -func (gl *GL) TexCoord3i(s, t, r int32) { - C.gl3_0_glTexCoord3i(gl.funcs, C.GLint(s), C.GLint(t), C.GLint(r)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord3fv.xml -func (gl *GL) TexCoord3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_0_glTexCoord3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord3f.xml -func (gl *GL) TexCoord3f(s, t, r float32) { - C.gl3_0_glTexCoord3f(gl.funcs, C.GLfloat(s), C.GLfloat(t), C.GLfloat(r)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord3dv.xml -func (gl *GL) TexCoord3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_0_glTexCoord3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord3d.xml -func (gl *GL) TexCoord3d(s, t, r float64) { - C.gl3_0_glTexCoord3d(gl.funcs, C.GLdouble(s), C.GLdouble(t), C.GLdouble(r)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord2sv.xml -func (gl *GL) TexCoord2sv(v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_0_glTexCoord2sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord2s.xml -func (gl *GL) TexCoord2s(s, t int16) { - C.gl3_0_glTexCoord2s(gl.funcs, C.GLshort(s), C.GLshort(t)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord2iv.xml -func (gl *GL) TexCoord2iv(v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_0_glTexCoord2iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord2i.xml -func (gl *GL) TexCoord2i(s, t int32) { - C.gl3_0_glTexCoord2i(gl.funcs, C.GLint(s), C.GLint(t)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord2fv.xml -func (gl *GL) TexCoord2fv(v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_0_glTexCoord2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord2f.xml -func (gl *GL) TexCoord2f(s, t float32) { - C.gl3_0_glTexCoord2f(gl.funcs, C.GLfloat(s), C.GLfloat(t)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord2dv.xml -func (gl *GL) TexCoord2dv(v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_0_glTexCoord2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord2d.xml -func (gl *GL) TexCoord2d(s, t float64) { - C.gl3_0_glTexCoord2d(gl.funcs, C.GLdouble(s), C.GLdouble(t)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord1sv.xml -func (gl *GL) TexCoord1sv(v []int16) { - C.gl3_0_glTexCoord1sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord1s.xml -func (gl *GL) TexCoord1s(s int16) { - C.gl3_0_glTexCoord1s(gl.funcs, C.GLshort(s)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord1iv.xml -func (gl *GL) TexCoord1iv(v []int32) { - C.gl3_0_glTexCoord1iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord1i.xml -func (gl *GL) TexCoord1i(s int32) { - C.gl3_0_glTexCoord1i(gl.funcs, C.GLint(s)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord1fv.xml -func (gl *GL) TexCoord1fv(v []float32) { - C.gl3_0_glTexCoord1fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord1f.xml -func (gl *GL) TexCoord1f(s float32) { - C.gl3_0_glTexCoord1f(gl.funcs, C.GLfloat(s)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord1dv.xml -func (gl *GL) TexCoord1dv(v []float64) { - C.gl3_0_glTexCoord1dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord1d.xml -func (gl *GL) TexCoord1d(s float64) { - C.gl3_0_glTexCoord1d(gl.funcs, C.GLdouble(s)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRectsv.xml -func (gl *GL) Rectsv(v1, v2 []int16) { - C.gl3_0_glRectsv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v1[0])), (*C.GLshort)(unsafe.Pointer(&v2[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRects.xml -func (gl *GL) Rects(x1, y1, x2, y2 int16) { - C.gl3_0_glRects(gl.funcs, C.GLshort(x1), C.GLshort(y1), C.GLshort(x2), C.GLshort(y2)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRectiv.xml -func (gl *GL) Rectiv(v1, v2 []int32) { - C.gl3_0_glRectiv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v1[0])), (*C.GLint)(unsafe.Pointer(&v2[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRecti.xml -func (gl *GL) Recti(x1, y1, x2, y2 int32) { - C.gl3_0_glRecti(gl.funcs, C.GLint(x1), C.GLint(y1), C.GLint(x2), C.GLint(y2)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRectfv.xml -func (gl *GL) Rectfv(v1, v2 []float32) { - C.gl3_0_glRectfv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v1[0])), (*C.GLfloat)(unsafe.Pointer(&v2[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRectf.xml -func (gl *GL) Rectf(x1, y1, x2, y2 float32) { - C.gl3_0_glRectf(gl.funcs, C.GLfloat(x1), C.GLfloat(y1), C.GLfloat(x2), C.GLfloat(y2)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRectdv.xml -func (gl *GL) Rectdv(v1, v2 []float64) { - C.gl3_0_glRectdv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v1[0])), (*C.GLdouble)(unsafe.Pointer(&v2[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRectd.xml -func (gl *GL) Rectd(x1, y1, x2, y2 float64) { - C.gl3_0_glRectd(gl.funcs, C.GLdouble(x1), C.GLdouble(y1), C.GLdouble(x2), C.GLdouble(y2)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos4sv.xml -func (gl *GL) RasterPos4sv(v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_0_glRasterPos4sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos4s.xml -func (gl *GL) RasterPos4s(x, y, z, w int16) { - C.gl3_0_glRasterPos4s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z), C.GLshort(w)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos4iv.xml -func (gl *GL) RasterPos4iv(v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_0_glRasterPos4iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos4i.xml -func (gl *GL) RasterPos4i(x, y, z, w int) { - C.gl3_0_glRasterPos4i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z), C.GLint(w)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos4fv.xml -func (gl *GL) RasterPos4fv(v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_0_glRasterPos4fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos4f.xml -func (gl *GL) RasterPos4f(x, y, z, w float32) { - C.gl3_0_glRasterPos4f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z), C.GLfloat(w)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos4dv.xml -func (gl *GL) RasterPos4dv(v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_0_glRasterPos4dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos4d.xml -func (gl *GL) RasterPos4d(x, y, z, w float64) { - C.gl3_0_glRasterPos4d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z), C.GLdouble(w)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos3sv.xml -func (gl *GL) RasterPos3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_0_glRasterPos3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos3s.xml -func (gl *GL) RasterPos3s(x, y, z int16) { - C.gl3_0_glRasterPos3s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos3iv.xml -func (gl *GL) RasterPos3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_0_glRasterPos3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos3i.xml -func (gl *GL) RasterPos3i(x, y, z int) { - C.gl3_0_glRasterPos3i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos3fv.xml -func (gl *GL) RasterPos3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_0_glRasterPos3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos3f.xml -func (gl *GL) RasterPos3f(x, y, z float32) { - C.gl3_0_glRasterPos3f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos3dv.xml -func (gl *GL) RasterPos3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_0_glRasterPos3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos3d.xml -func (gl *GL) RasterPos3d(x, y, z float64) { - C.gl3_0_glRasterPos3d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos2sv.xml -func (gl *GL) RasterPos2sv(v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_0_glRasterPos2sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos2s.xml -func (gl *GL) RasterPos2s(x, y int16) { - C.gl3_0_glRasterPos2s(gl.funcs, C.GLshort(x), C.GLshort(y)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos2iv.xml -func (gl *GL) RasterPos2iv(v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_0_glRasterPos2iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos2i.xml -func (gl *GL) RasterPos2i(x, y int) { - C.gl3_0_glRasterPos2i(gl.funcs, C.GLint(x), C.GLint(y)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos2fv.xml -func (gl *GL) RasterPos2fv(v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_0_glRasterPos2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos2f.xml -func (gl *GL) RasterPos2f(x, y float32) { - C.gl3_0_glRasterPos2f(gl.funcs, C.GLfloat(x), C.GLfloat(y)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos2dv.xml -func (gl *GL) RasterPos2dv(v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_0_glRasterPos2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos2d.xml -func (gl *GL) RasterPos2d(x, y float64) { - C.gl3_0_glRasterPos2d(gl.funcs, C.GLdouble(x), C.GLdouble(y)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glNormal3sv.xml -func (gl *GL) Normal3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_0_glNormal3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glNormal3s.xml -func (gl *GL) Normal3s(nx, ny, nz int16) { - C.gl3_0_glNormal3s(gl.funcs, C.GLshort(nx), C.GLshort(ny), C.GLshort(nz)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glNormal3iv.xml -func (gl *GL) Normal3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_0_glNormal3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glNormal3i.xml -func (gl *GL) Normal3i(nx, ny, nz int32) { - C.gl3_0_glNormal3i(gl.funcs, C.GLint(nx), C.GLint(ny), C.GLint(nz)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glNormal3fv.xml -func (gl *GL) Normal3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_0_glNormal3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glNormal3f.xml -func (gl *GL) Normal3f(nx, ny, nz float32) { - C.gl3_0_glNormal3f(gl.funcs, C.GLfloat(nx), C.GLfloat(ny), C.GLfloat(nz)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glNormal3dv.xml -func (gl *GL) Normal3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_0_glNormal3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glNormal3d.xml -func (gl *GL) Normal3d(nx, ny, nz float64) { - C.gl3_0_glNormal3d(gl.funcs, C.GLdouble(nx), C.GLdouble(ny), C.GLdouble(nz)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glNormal3bv.xml -func (gl *GL) Normal3bv(v []byte) { - C.gl3_0_glNormal3bv(gl.funcs, (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glNormal3b.xml -func (gl *GL) Normal3b(nx, ny, nz byte) { - C.gl3_0_glNormal3b(gl.funcs, C.GLbyte(nx), C.GLbyte(ny), C.GLbyte(nz)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIndexsv.xml -func (gl *GL) Indexsv(c []int16) { - C.gl3_0_glIndexsv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIndexs.xml -func (gl *GL) Indexs(c int16) { - C.gl3_0_glIndexs(gl.funcs, C.GLshort(c)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIndexiv.xml -func (gl *GL) Indexiv(c []int32) { - C.gl3_0_glIndexiv(gl.funcs, (*C.GLint)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIndexi.xml -func (gl *GL) Indexi(c int32) { - C.gl3_0_glIndexi(gl.funcs, C.GLint(c)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIndexfv.xml -func (gl *GL) Indexfv(c []float32) { - C.gl3_0_glIndexfv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIndexf.xml -func (gl *GL) Indexf(c float32) { - C.gl3_0_glIndexf(gl.funcs, C.GLfloat(c)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIndexdv.xml -func (gl *GL) Indexdv(c []float64) { - C.gl3_0_glIndexdv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIndexd.xml -func (gl *GL) Indexd(c float64) { - C.gl3_0_glIndexd(gl.funcs, C.GLdouble(c)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEnd.xml -func (gl *GL) End() { - C.gl3_0_glEnd(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEdgeFlagv.xml -func (gl *GL) EdgeFlagv(flag []bool) { - C.gl3_0_glEdgeFlagv(gl.funcs, (*C.GLboolean)(unsafe.Pointer(&flag[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEdgeFlag.xml -func (gl *GL) EdgeFlag(flag bool) { - C.gl3_0_glEdgeFlag(gl.funcs, *(*C.GLboolean)(unsafe.Pointer(&flag))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor4usv.xml -func (gl *GL) Color4usv(v []uint16) { - C.gl3_0_glColor4usv(gl.funcs, (*C.GLushort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor4us.xml -func (gl *GL) Color4us(red, green, blue, alpha uint16) { - C.gl3_0_glColor4us(gl.funcs, C.GLushort(red), C.GLushort(green), C.GLushort(blue), C.GLushort(alpha)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor4uiv.xml -func (gl *GL) Color4uiv(v []uint32) { - C.gl3_0_glColor4uiv(gl.funcs, (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor4ui.xml -func (gl *GL) Color4ui(red, green, blue, alpha uint32) { - C.gl3_0_glColor4ui(gl.funcs, C.GLuint(red), C.GLuint(green), C.GLuint(blue), C.GLuint(alpha)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor4ubv.xml -func (gl *GL) Color4ubv(v []uint8) { - C.gl3_0_glColor4ubv(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor4ub.xml -func (gl *GL) Color4ub(red, green, blue, alpha uint8) { - C.gl3_0_glColor4ub(gl.funcs, C.GLubyte(red), C.GLubyte(green), C.GLubyte(blue), C.GLubyte(alpha)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor4sv.xml -func (gl *GL) Color4sv(v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_0_glColor4sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor4s.xml -func (gl *GL) Color4s(red, green, blue, alpha int16) { - C.gl3_0_glColor4s(gl.funcs, C.GLshort(red), C.GLshort(green), C.GLshort(blue), C.GLshort(alpha)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor4iv.xml -func (gl *GL) Color4iv(v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_0_glColor4iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor4i.xml -func (gl *GL) Color4i(red, green, blue, alpha int32) { - C.gl3_0_glColor4i(gl.funcs, C.GLint(red), C.GLint(green), C.GLint(blue), C.GLint(alpha)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor4fv.xml -func (gl *GL) Color4fv(v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_0_glColor4fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor4f.xml -func (gl *GL) Color4f(red, green, blue, alpha float32) { - C.gl3_0_glColor4f(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor4dv.xml -func (gl *GL) Color4dv(v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_0_glColor4dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor4d.xml -func (gl *GL) Color4d(red, green, blue, alpha float64) { - C.gl3_0_glColor4d(gl.funcs, C.GLdouble(red), C.GLdouble(green), C.GLdouble(blue), C.GLdouble(alpha)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor4bv.xml -func (gl *GL) Color4bv(v []byte) { - C.gl3_0_glColor4bv(gl.funcs, (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor4b.xml -func (gl *GL) Color4b(red, green, blue, alpha byte) { - C.gl3_0_glColor4b(gl.funcs, C.GLbyte(red), C.GLbyte(green), C.GLbyte(blue), C.GLbyte(alpha)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor3usv.xml -func (gl *GL) Color3usv(v []uint16) { - C.gl3_0_glColor3usv(gl.funcs, (*C.GLushort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor3us.xml -func (gl *GL) Color3us(red, green, blue uint16) { - C.gl3_0_glColor3us(gl.funcs, C.GLushort(red), C.GLushort(green), C.GLushort(blue)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor3uiv.xml -func (gl *GL) Color3uiv(v []uint32) { - C.gl3_0_glColor3uiv(gl.funcs, (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor3ui.xml -func (gl *GL) Color3ui(red, green, blue uint32) { - C.gl3_0_glColor3ui(gl.funcs, C.GLuint(red), C.GLuint(green), C.GLuint(blue)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor3ubv.xml -func (gl *GL) Color3ubv(v []uint8) { - C.gl3_0_glColor3ubv(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor3ub.xml -func (gl *GL) Color3ub(red, green, blue uint8) { - C.gl3_0_glColor3ub(gl.funcs, C.GLubyte(red), C.GLubyte(green), C.GLubyte(blue)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor3sv.xml -func (gl *GL) Color3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_0_glColor3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor3s.xml -func (gl *GL) Color3s(red, green, blue int16) { - C.gl3_0_glColor3s(gl.funcs, C.GLshort(red), C.GLshort(green), C.GLshort(blue)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor3iv.xml -func (gl *GL) Color3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_0_glColor3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor3i.xml -func (gl *GL) Color3i(red, green, blue int32) { - C.gl3_0_glColor3i(gl.funcs, C.GLint(red), C.GLint(green), C.GLint(blue)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor3fv.xml -func (gl *GL) Color3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_0_glColor3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor3f.xml -func (gl *GL) Color3f(red, green, blue float32) { - C.gl3_0_glColor3f(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor3dv.xml -func (gl *GL) Color3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_0_glColor3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor3d.xml -func (gl *GL) Color3d(red, green, blue float64) { - C.gl3_0_glColor3d(gl.funcs, C.GLdouble(red), C.GLdouble(green), C.GLdouble(blue)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor3bv.xml -func (gl *GL) Color3bv(v []byte) { - C.gl3_0_glColor3bv(gl.funcs, (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor3b.xml -func (gl *GL) Color3b(red, green, blue byte) { - C.gl3_0_glColor3b(gl.funcs, C.GLbyte(red), C.GLbyte(green), C.GLbyte(blue)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBitmap.xml -func (gl *GL) Bitmap(width, height int, xorig, yorig, xmove, ymove float32, bitmap []uint8) { - C.gl3_0_glBitmap(gl.funcs, C.GLsizei(width), C.GLsizei(height), C.GLfloat(xorig), C.GLfloat(yorig), C.GLfloat(xmove), C.GLfloat(ymove), (*C.GLubyte)(unsafe.Pointer(&bitmap[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBegin.xml -func (gl *GL) Begin(mode glbase.Enum) { - C.gl3_0_glBegin(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glListBase.xml -func (gl *GL) ListBase(base uint32) { - C.gl3_0_glListBase(gl.funcs, C.GLuint(base)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGenLists.xml -func (gl *GL) GenLists(range_ int32) uint32 { - glresult := C.gl3_0_glGenLists(gl.funcs, C.GLsizei(range_)) - return uint32(glresult) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDeleteLists.xml -func (gl *GL) DeleteLists(list uint32, range_ int32) { - C.gl3_0_glDeleteLists(gl.funcs, C.GLuint(list), C.GLsizei(range_)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCallLists.xml -func (gl *GL) CallLists(n int, gltype glbase.Enum, lists interface{}) { - var lists_ptr unsafe.Pointer - var lists_v = reflect.ValueOf(lists) - if lists != nil && lists_v.Kind() != reflect.Slice { - panic("parameter lists must be a slice") - } - if lists != nil { - lists_ptr = unsafe.Pointer(lists_v.Index(0).Addr().Pointer()) - } - C.gl3_0_glCallLists(gl.funcs, C.GLsizei(n), C.GLenum(gltype), lists_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCallList.xml -func (gl *GL) CallList(list uint32) { - C.gl3_0_glCallList(gl.funcs, C.GLuint(list)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEndList.xml -func (gl *GL) EndList() { - C.gl3_0_glEndList(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glNewList.xml -func (gl *GL) NewList(list uint32, mode glbase.Enum) { - C.gl3_0_glNewList(gl.funcs, C.GLuint(list), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPushClientAttrib.xml -func (gl *GL) PushClientAttrib(mask glbase.Bitfield) { - C.gl3_0_glPushClientAttrib(gl.funcs, C.GLbitfield(mask)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPopClientAttrib.xml -func (gl *GL) PopClientAttrib() { - C.gl3_0_glPopClientAttrib(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPrioritizeTextures.xml -func (gl *GL) PrioritizeTextures(n int, textures []glbase.Texture, priorities []float32) { - C.gl3_0_glPrioritizeTextures(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0])), (*C.GLfloat)(unsafe.Pointer(&priorities[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glAreTexturesResident.xml -func (gl *GL) AreTexturesResident(n int, textures []glbase.Texture, residences []bool) bool { - glresult := C.gl3_0_glAreTexturesResident(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0])), (*C.GLboolean)(unsafe.Pointer(&residences[0]))) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexPointer.xml -func (gl *GL) VertexPointer(size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl3_0_glVertexPointer(gl.funcs, C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoordPointer.xml -func (gl *GL) TexCoordPointer(size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl3_0_glTexCoordPointer(gl.funcs, C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glNormalPointer.xml -func (gl *GL) NormalPointer(gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl3_0_glNormalPointer(gl.funcs, C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glInterleavedArrays.xml -func (gl *GL) InterleavedArrays(format glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl3_0_glInterleavedArrays(gl.funcs, C.GLenum(format), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIndexPointer.xml -func (gl *GL) IndexPointer(gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl3_0_glIndexPointer(gl.funcs, C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEnableClientState.xml -func (gl *GL) EnableClientState(array glbase.Enum) { - C.gl3_0_glEnableClientState(gl.funcs, C.GLenum(array)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEdgeFlagPointer.xml -func (gl *GL) EdgeFlagPointer(stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl3_0_glEdgeFlagPointer(gl.funcs, C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDisableClientState.xml -func (gl *GL) DisableClientState(array glbase.Enum) { - C.gl3_0_glDisableClientState(gl.funcs, C.GLenum(array)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColorPointer.xml -func (gl *GL) ColorPointer(size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl3_0_glColorPointer(gl.funcs, C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glArrayElement.xml -func (gl *GL) ArrayElement(i int32) { - C.gl3_0_glArrayElement(gl.funcs, C.GLint(i)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glResetMinmax.xml -func (gl *GL) ResetMinmax(target glbase.Enum) { - C.gl3_0_glResetMinmax(gl.funcs, C.GLenum(target)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glResetHistogram.xml -func (gl *GL) ResetHistogram(target glbase.Enum) { - C.gl3_0_glResetHistogram(gl.funcs, C.GLenum(target)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMinmax.xml -func (gl *GL) Minmax(target, internalFormat glbase.Enum, sink bool) { - C.gl3_0_glMinmax(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), *(*C.GLboolean)(unsafe.Pointer(&sink))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glHistogram.xml -func (gl *GL) Histogram(target glbase.Enum, width int, internalFormat glbase.Enum, sink bool) { - C.gl3_0_glHistogram(gl.funcs, C.GLenum(target), C.GLsizei(width), C.GLenum(internalFormat), *(*C.GLboolean)(unsafe.Pointer(&sink))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetMinmaxParameteriv.xml -func (gl *GL) GetMinmaxParameteriv(target, pname glbase.Enum, params []int32) { - C.gl3_0_glGetMinmaxParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetMinmaxParameterfv.xml -func (gl *GL) GetMinmaxParameterfv(target, pname glbase.Enum, params []float32) { - C.gl3_0_glGetMinmaxParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetMinmax.xml -func (gl *GL) GetMinmax(target glbase.Enum, reset bool, format, gltype glbase.Enum, values interface{}) { - var values_ptr unsafe.Pointer - var values_v = reflect.ValueOf(values) - if values != nil && values_v.Kind() != reflect.Slice { - panic("parameter values must be a slice") - } - if values != nil { - values_ptr = unsafe.Pointer(values_v.Index(0).Addr().Pointer()) - } - C.gl3_0_glGetMinmax(gl.funcs, C.GLenum(target), *(*C.GLboolean)(unsafe.Pointer(&reset)), C.GLenum(format), C.GLenum(gltype), values_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetHistogramParameteriv.xml -func (gl *GL) GetHistogramParameteriv(target, pname glbase.Enum, params []int32) { - C.gl3_0_glGetHistogramParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetHistogramParameterfv.xml -func (gl *GL) GetHistogramParameterfv(target, pname glbase.Enum, params []float32) { - C.gl3_0_glGetHistogramParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetHistogram.xml -func (gl *GL) GetHistogram(target glbase.Enum, reset bool, format, gltype glbase.Enum, values interface{}) { - var values_ptr unsafe.Pointer - var values_v = reflect.ValueOf(values) - if values != nil && values_v.Kind() != reflect.Slice { - panic("parameter values must be a slice") - } - if values != nil { - values_ptr = unsafe.Pointer(values_v.Index(0).Addr().Pointer()) - } - C.gl3_0_glGetHistogram(gl.funcs, C.GLenum(target), *(*C.GLboolean)(unsafe.Pointer(&reset)), C.GLenum(format), C.GLenum(gltype), values_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSeparableFilter2D.xml -func (gl *GL) SeparableFilter2D(target, internalFormat glbase.Enum, width, height int, format, gltype glbase.Enum, row, column interface{}) { - var row_ptr unsafe.Pointer - var row_v = reflect.ValueOf(row) - if row != nil && row_v.Kind() != reflect.Slice { - panic("parameter row must be a slice") - } - if row != nil { - row_ptr = unsafe.Pointer(row_v.Index(0).Addr().Pointer()) - } - var column_ptr unsafe.Pointer - var column_v = reflect.ValueOf(column) - if column != nil && column_v.Kind() != reflect.Slice { - panic("parameter column must be a slice") - } - if column != nil { - column_ptr = unsafe.Pointer(column_v.Index(0).Addr().Pointer()) - } - C.gl3_0_glSeparableFilter2D(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), row_ptr, column_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetSeparableFilter.xml -func (gl *GL) GetSeparableFilter(target, format, gltype glbase.Enum, row, column, span interface{}) { - var row_ptr unsafe.Pointer - var row_v = reflect.ValueOf(row) - if row != nil && row_v.Kind() != reflect.Slice { - panic("parameter row must be a slice") - } - if row != nil { - row_ptr = unsafe.Pointer(row_v.Index(0).Addr().Pointer()) - } - var column_ptr unsafe.Pointer - var column_v = reflect.ValueOf(column) - if column != nil && column_v.Kind() != reflect.Slice { - panic("parameter column must be a slice") - } - if column != nil { - column_ptr = unsafe.Pointer(column_v.Index(0).Addr().Pointer()) - } - var span_ptr unsafe.Pointer - var span_v = reflect.ValueOf(span) - if span != nil && span_v.Kind() != reflect.Slice { - panic("parameter span must be a slice") - } - if span != nil { - span_ptr = unsafe.Pointer(span_v.Index(0).Addr().Pointer()) - } - C.gl3_0_glGetSeparableFilter(gl.funcs, C.GLenum(target), C.GLenum(format), C.GLenum(gltype), row_ptr, column_ptr, span_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetConvolutionParameteriv.xml -func (gl *GL) GetConvolutionParameteriv(target, pname glbase.Enum, params []int32) { - C.gl3_0_glGetConvolutionParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetConvolutionParameterfv.xml -func (gl *GL) GetConvolutionParameterfv(target, pname glbase.Enum, params []float32) { - C.gl3_0_glGetConvolutionParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetConvolutionFilter.xml -func (gl *GL) GetConvolutionFilter(target, format, gltype glbase.Enum, image interface{}) { - var image_ptr unsafe.Pointer - var image_v = reflect.ValueOf(image) - if image != nil && image_v.Kind() != reflect.Slice { - panic("parameter image must be a slice") - } - if image != nil { - image_ptr = unsafe.Pointer(image_v.Index(0).Addr().Pointer()) - } - C.gl3_0_glGetConvolutionFilter(gl.funcs, C.GLenum(target), C.GLenum(format), C.GLenum(gltype), image_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCopyConvolutionFilter2D.xml -func (gl *GL) CopyConvolutionFilter2D(target, internalFormat glbase.Enum, x, y, width, height int) { - C.gl3_0_glCopyConvolutionFilter2D(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCopyConvolutionFilter1D.xml -func (gl *GL) CopyConvolutionFilter1D(target, internalFormat glbase.Enum, x, y, width int) { - C.gl3_0_glCopyConvolutionFilter1D(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glConvolutionParameteriv.xml -func (gl *GL) ConvolutionParameteriv(target, pname glbase.Enum, params []int32) { - C.gl3_0_glConvolutionParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glConvolutionParameteri.xml -func (gl *GL) ConvolutionParameteri(target, pname glbase.Enum, params int32) { - C.gl3_0_glConvolutionParameteri(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLint(params)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glConvolutionParameterfv.xml -func (gl *GL) ConvolutionParameterfv(target, pname glbase.Enum, params []float32) { - C.gl3_0_glConvolutionParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glConvolutionParameterf.xml -func (gl *GL) ConvolutionParameterf(target, pname glbase.Enum, params float32) { - C.gl3_0_glConvolutionParameterf(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLfloat(params)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glConvolutionFilter2D.xml -func (gl *GL) ConvolutionFilter2D(target, internalFormat glbase.Enum, width, height int, format, gltype glbase.Enum, image interface{}) { - var image_ptr unsafe.Pointer - var image_v = reflect.ValueOf(image) - if image != nil && image_v.Kind() != reflect.Slice { - panic("parameter image must be a slice") - } - if image != nil { - image_ptr = unsafe.Pointer(image_v.Index(0).Addr().Pointer()) - } - C.gl3_0_glConvolutionFilter2D(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), image_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glConvolutionFilter1D.xml -func (gl *GL) ConvolutionFilter1D(target, internalFormat glbase.Enum, width int, format, gltype glbase.Enum, image interface{}) { - var image_ptr unsafe.Pointer - var image_v = reflect.ValueOf(image) - if image != nil && image_v.Kind() != reflect.Slice { - panic("parameter image must be a slice") - } - if image != nil { - image_ptr = unsafe.Pointer(image_v.Index(0).Addr().Pointer()) - } - C.gl3_0_glConvolutionFilter1D(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLsizei(width), C.GLenum(format), C.GLenum(gltype), image_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCopyColorSubTable.xml -func (gl *GL) CopyColorSubTable(target glbase.Enum, start int32, x, y, width int) { - C.gl3_0_glCopyColorSubTable(gl.funcs, C.GLenum(target), C.GLsizei(start), C.GLint(x), C.GLint(y), C.GLsizei(width)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColorSubTable.xml -func (gl *GL) ColorSubTable(target glbase.Enum, start int32, count int, format, gltype glbase.Enum, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl3_0_glColorSubTable(gl.funcs, C.GLenum(target), C.GLsizei(start), C.GLsizei(count), C.GLenum(format), C.GLenum(gltype), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetColorTableParameteriv.xml -func (gl *GL) GetColorTableParameteriv(target, pname glbase.Enum, params []int32) { - C.gl3_0_glGetColorTableParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetColorTableParameterfv.xml -func (gl *GL) GetColorTableParameterfv(target, pname glbase.Enum, params []float32) { - C.gl3_0_glGetColorTableParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetColorTable.xml -func (gl *GL) GetColorTable(target, format, gltype glbase.Enum, table interface{}) { - var table_ptr unsafe.Pointer - var table_v = reflect.ValueOf(table) - if table != nil && table_v.Kind() != reflect.Slice { - panic("parameter table must be a slice") - } - if table != nil { - table_ptr = unsafe.Pointer(table_v.Index(0).Addr().Pointer()) - } - C.gl3_0_glGetColorTable(gl.funcs, C.GLenum(target), C.GLenum(format), C.GLenum(gltype), table_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCopyColorTable.xml -func (gl *GL) CopyColorTable(target, internalFormat glbase.Enum, x, y, width int) { - C.gl3_0_glCopyColorTable(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColorTableParameteriv.xml -func (gl *GL) ColorTableParameteriv(target, pname glbase.Enum, params []int32) { - C.gl3_0_glColorTableParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColorTableParameterfv.xml -func (gl *GL) ColorTableParameterfv(target, pname glbase.Enum, params []float32) { - C.gl3_0_glColorTableParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColorTable.xml -func (gl *GL) ColorTable(target, internalFormat glbase.Enum, width int, format, gltype glbase.Enum, table interface{}) { - var table_ptr unsafe.Pointer - var table_v = reflect.ValueOf(table) - if table != nil && table_v.Kind() != reflect.Slice { - panic("parameter table must be a slice") - } - if table != nil { - table_ptr = unsafe.Pointer(table_v.Index(0).Addr().Pointer()) - } - C.gl3_0_glColorTable(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLsizei(width), C.GLenum(format), C.GLenum(gltype), table_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultTransposeMatrixd.xml -func (gl *GL) MultTransposeMatrixd(m []float64) { - C.gl3_0_glMultTransposeMatrixd(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultTransposeMatrixf.xml -func (gl *GL) MultTransposeMatrixf(m []float32) { - C.gl3_0_glMultTransposeMatrixf(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glLoadTransposeMatrixd.xml -func (gl *GL) LoadTransposeMatrixd(m []float64) { - C.gl3_0_glLoadTransposeMatrixd(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glLoadTransposeMatrixf.xml -func (gl *GL) LoadTransposeMatrixf(m []float32) { - C.gl3_0_glLoadTransposeMatrixf(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord4sv.xml -func (gl *GL) MultiTexCoord4sv(target glbase.Enum, v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_0_glMultiTexCoord4sv(gl.funcs, C.GLenum(target), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord4s.xml -func (gl *GL) MultiTexCoord4s(target glbase.Enum, s, t, r, q int16) { - C.gl3_0_glMultiTexCoord4s(gl.funcs, C.GLenum(target), C.GLshort(s), C.GLshort(t), C.GLshort(r), C.GLshort(q)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord4iv.xml -func (gl *GL) MultiTexCoord4iv(target glbase.Enum, v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_0_glMultiTexCoord4iv(gl.funcs, C.GLenum(target), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord4i.xml -func (gl *GL) MultiTexCoord4i(target glbase.Enum, s, t, r, q int32) { - C.gl3_0_glMultiTexCoord4i(gl.funcs, C.GLenum(target), C.GLint(s), C.GLint(t), C.GLint(r), C.GLint(q)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord4fv.xml -func (gl *GL) MultiTexCoord4fv(target glbase.Enum, v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_0_glMultiTexCoord4fv(gl.funcs, C.GLenum(target), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord4f.xml -func (gl *GL) MultiTexCoord4f(target glbase.Enum, s, t, r, q float32) { - C.gl3_0_glMultiTexCoord4f(gl.funcs, C.GLenum(target), C.GLfloat(s), C.GLfloat(t), C.GLfloat(r), C.GLfloat(q)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord4dv.xml -func (gl *GL) MultiTexCoord4dv(target glbase.Enum, v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_0_glMultiTexCoord4dv(gl.funcs, C.GLenum(target), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord4d.xml -func (gl *GL) MultiTexCoord4d(target glbase.Enum, s, t, r, q float64) { - C.gl3_0_glMultiTexCoord4d(gl.funcs, C.GLenum(target), C.GLdouble(s), C.GLdouble(t), C.GLdouble(r), C.GLdouble(q)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord3sv.xml -func (gl *GL) MultiTexCoord3sv(target glbase.Enum, v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_0_glMultiTexCoord3sv(gl.funcs, C.GLenum(target), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord3s.xml -func (gl *GL) MultiTexCoord3s(target glbase.Enum, s, t, r int16) { - C.gl3_0_glMultiTexCoord3s(gl.funcs, C.GLenum(target), C.GLshort(s), C.GLshort(t), C.GLshort(r)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord3iv.xml -func (gl *GL) MultiTexCoord3iv(target glbase.Enum, v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_0_glMultiTexCoord3iv(gl.funcs, C.GLenum(target), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord3i.xml -func (gl *GL) MultiTexCoord3i(target glbase.Enum, s, t, r int32) { - C.gl3_0_glMultiTexCoord3i(gl.funcs, C.GLenum(target), C.GLint(s), C.GLint(t), C.GLint(r)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord3fv.xml -func (gl *GL) MultiTexCoord3fv(target glbase.Enum, v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_0_glMultiTexCoord3fv(gl.funcs, C.GLenum(target), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord3f.xml -func (gl *GL) MultiTexCoord3f(target glbase.Enum, s, t, r float32) { - C.gl3_0_glMultiTexCoord3f(gl.funcs, C.GLenum(target), C.GLfloat(s), C.GLfloat(t), C.GLfloat(r)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord3dv.xml -func (gl *GL) MultiTexCoord3dv(target glbase.Enum, v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_0_glMultiTexCoord3dv(gl.funcs, C.GLenum(target), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord3d.xml -func (gl *GL) MultiTexCoord3d(target glbase.Enum, s, t, r float64) { - C.gl3_0_glMultiTexCoord3d(gl.funcs, C.GLenum(target), C.GLdouble(s), C.GLdouble(t), C.GLdouble(r)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord2sv.xml -func (gl *GL) MultiTexCoord2sv(target glbase.Enum, v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_0_glMultiTexCoord2sv(gl.funcs, C.GLenum(target), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord2s.xml -func (gl *GL) MultiTexCoord2s(target glbase.Enum, s, t int16) { - C.gl3_0_glMultiTexCoord2s(gl.funcs, C.GLenum(target), C.GLshort(s), C.GLshort(t)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord2iv.xml -func (gl *GL) MultiTexCoord2iv(target glbase.Enum, v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_0_glMultiTexCoord2iv(gl.funcs, C.GLenum(target), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord2i.xml -func (gl *GL) MultiTexCoord2i(target glbase.Enum, s, t int32) { - C.gl3_0_glMultiTexCoord2i(gl.funcs, C.GLenum(target), C.GLint(s), C.GLint(t)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord2fv.xml -func (gl *GL) MultiTexCoord2fv(target glbase.Enum, v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_0_glMultiTexCoord2fv(gl.funcs, C.GLenum(target), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord2f.xml -func (gl *GL) MultiTexCoord2f(target glbase.Enum, s, t float32) { - C.gl3_0_glMultiTexCoord2f(gl.funcs, C.GLenum(target), C.GLfloat(s), C.GLfloat(t)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord2dv.xml -func (gl *GL) MultiTexCoord2dv(target glbase.Enum, v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_0_glMultiTexCoord2dv(gl.funcs, C.GLenum(target), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord2d.xml -func (gl *GL) MultiTexCoord2d(target glbase.Enum, s, t float64) { - C.gl3_0_glMultiTexCoord2d(gl.funcs, C.GLenum(target), C.GLdouble(s), C.GLdouble(t)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord1sv.xml -func (gl *GL) MultiTexCoord1sv(target glbase.Enum, v []int16) { - C.gl3_0_glMultiTexCoord1sv(gl.funcs, C.GLenum(target), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord1s.xml -func (gl *GL) MultiTexCoord1s(target glbase.Enum, s int16) { - C.gl3_0_glMultiTexCoord1s(gl.funcs, C.GLenum(target), C.GLshort(s)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord1iv.xml -func (gl *GL) MultiTexCoord1iv(target glbase.Enum, v []int32) { - C.gl3_0_glMultiTexCoord1iv(gl.funcs, C.GLenum(target), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord1i.xml -func (gl *GL) MultiTexCoord1i(target glbase.Enum, s int32) { - C.gl3_0_glMultiTexCoord1i(gl.funcs, C.GLenum(target), C.GLint(s)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord1fv.xml -func (gl *GL) MultiTexCoord1fv(target glbase.Enum, v []float32) { - C.gl3_0_glMultiTexCoord1fv(gl.funcs, C.GLenum(target), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord1f.xml -func (gl *GL) MultiTexCoord1f(target glbase.Enum, s float32) { - C.gl3_0_glMultiTexCoord1f(gl.funcs, C.GLenum(target), C.GLfloat(s)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord1dv.xml -func (gl *GL) MultiTexCoord1dv(target glbase.Enum, v []float64) { - C.gl3_0_glMultiTexCoord1dv(gl.funcs, C.GLenum(target), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord1d.xml -func (gl *GL) MultiTexCoord1d(target glbase.Enum, s float64) { - C.gl3_0_glMultiTexCoord1d(gl.funcs, C.GLenum(target), C.GLdouble(s)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClientActiveTexture.xml -func (gl *GL) ClientActiveTexture(texture glbase.Enum) { - C.gl3_0_glClientActiveTexture(gl.funcs, C.GLenum(texture)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glWindowPos3sv.xml -func (gl *GL) WindowPos3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_0_glWindowPos3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glWindowPos3s.xml -func (gl *GL) WindowPos3s(x, y, z int16) { - C.gl3_0_glWindowPos3s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glWindowPos3iv.xml -func (gl *GL) WindowPos3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_0_glWindowPos3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glWindowPos3i.xml -func (gl *GL) WindowPos3i(x, y, z int) { - C.gl3_0_glWindowPos3i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glWindowPos3fv.xml -func (gl *GL) WindowPos3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_0_glWindowPos3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glWindowPos3f.xml -func (gl *GL) WindowPos3f(x, y, z float32) { - C.gl3_0_glWindowPos3f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glWindowPos3dv.xml -func (gl *GL) WindowPos3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_0_glWindowPos3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glWindowPos3d.xml -func (gl *GL) WindowPos3d(x, y, z float64) { - C.gl3_0_glWindowPos3d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glWindowPos2sv.xml -func (gl *GL) WindowPos2sv(v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_0_glWindowPos2sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glWindowPos2s.xml -func (gl *GL) WindowPos2s(x, y int16) { - C.gl3_0_glWindowPos2s(gl.funcs, C.GLshort(x), C.GLshort(y)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glWindowPos2iv.xml -func (gl *GL) WindowPos2iv(v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_0_glWindowPos2iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glWindowPos2i.xml -func (gl *GL) WindowPos2i(x, y int) { - C.gl3_0_glWindowPos2i(gl.funcs, C.GLint(x), C.GLint(y)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glWindowPos2fv.xml -func (gl *GL) WindowPos2fv(v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_0_glWindowPos2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glWindowPos2f.xml -func (gl *GL) WindowPos2f(x, y float32) { - C.gl3_0_glWindowPos2f(gl.funcs, C.GLfloat(x), C.GLfloat(y)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glWindowPos2dv.xml -func (gl *GL) WindowPos2dv(v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_0_glWindowPos2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glWindowPos2d.xml -func (gl *GL) WindowPos2d(x, y float64) { - C.gl3_0_glWindowPos2d(gl.funcs, C.GLdouble(x), C.GLdouble(y)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSecondaryColorPointer.xml -func (gl *GL) SecondaryColorPointer(size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl3_0_glSecondaryColorPointer(gl.funcs, C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSecondaryColor3usv.xml -func (gl *GL) SecondaryColor3usv(v []uint16) { - C.gl3_0_glSecondaryColor3usv(gl.funcs, (*C.GLushort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSecondaryColor3us.xml -func (gl *GL) SecondaryColor3us(red, green, blue uint16) { - C.gl3_0_glSecondaryColor3us(gl.funcs, C.GLushort(red), C.GLushort(green), C.GLushort(blue)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSecondaryColor3uiv.xml -func (gl *GL) SecondaryColor3uiv(v []uint32) { - C.gl3_0_glSecondaryColor3uiv(gl.funcs, (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSecondaryColor3ui.xml -func (gl *GL) SecondaryColor3ui(red, green, blue uint32) { - C.gl3_0_glSecondaryColor3ui(gl.funcs, C.GLuint(red), C.GLuint(green), C.GLuint(blue)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSecondaryColor3ubv.xml -func (gl *GL) SecondaryColor3ubv(v []uint8) { - C.gl3_0_glSecondaryColor3ubv(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSecondaryColor3ub.xml -func (gl *GL) SecondaryColor3ub(red, green, blue uint8) { - C.gl3_0_glSecondaryColor3ub(gl.funcs, C.GLubyte(red), C.GLubyte(green), C.GLubyte(blue)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSecondaryColor3sv.xml -func (gl *GL) SecondaryColor3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_0_glSecondaryColor3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSecondaryColor3s.xml -func (gl *GL) SecondaryColor3s(red, green, blue int16) { - C.gl3_0_glSecondaryColor3s(gl.funcs, C.GLshort(red), C.GLshort(green), C.GLshort(blue)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSecondaryColor3iv.xml -func (gl *GL) SecondaryColor3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_0_glSecondaryColor3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSecondaryColor3i.xml -func (gl *GL) SecondaryColor3i(red, green, blue int32) { - C.gl3_0_glSecondaryColor3i(gl.funcs, C.GLint(red), C.GLint(green), C.GLint(blue)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSecondaryColor3fv.xml -func (gl *GL) SecondaryColor3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_0_glSecondaryColor3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSecondaryColor3f.xml -func (gl *GL) SecondaryColor3f(red, green, blue float32) { - C.gl3_0_glSecondaryColor3f(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSecondaryColor3dv.xml -func (gl *GL) SecondaryColor3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_0_glSecondaryColor3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSecondaryColor3d.xml -func (gl *GL) SecondaryColor3d(red, green, blue float64) { - C.gl3_0_glSecondaryColor3d(gl.funcs, C.GLdouble(red), C.GLdouble(green), C.GLdouble(blue)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSecondaryColor3bv.xml -func (gl *GL) SecondaryColor3bv(v []byte) { - C.gl3_0_glSecondaryColor3bv(gl.funcs, (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSecondaryColor3b.xml -func (gl *GL) SecondaryColor3b(red, green, blue byte) { - C.gl3_0_glSecondaryColor3b(gl.funcs, C.GLbyte(red), C.GLbyte(green), C.GLbyte(blue)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFogCoordPointer.xml -func (gl *GL) FogCoordPointer(gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl3_0_glFogCoordPointer(gl.funcs, C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFogCoorddv.xml -func (gl *GL) FogCoorddv(coord []float64) { - C.gl3_0_glFogCoorddv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&coord[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFogCoordd.xml -func (gl *GL) FogCoordd(coord float64) { - C.gl3_0_glFogCoordd(gl.funcs, C.GLdouble(coord)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFogCoordfv.xml -func (gl *GL) FogCoordfv(coord []float32) { - C.gl3_0_glFogCoordfv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&coord[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFogCoordf.xml -func (gl *GL) FogCoordf(coord float32) { - C.gl3_0_glFogCoordf(gl.funcs, C.GLfloat(coord)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib4usv.xml -func (gl *GL) VertexAttrib4usv(index glbase.Attrib, v []uint16) { - C.gl3_0_glVertexAttrib4usv(gl.funcs, C.GLuint(index), (*C.GLushort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib4uiv.xml -func (gl *GL) VertexAttrib4uiv(index glbase.Attrib, v []uint32) { - C.gl3_0_glVertexAttrib4uiv(gl.funcs, C.GLuint(index), (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib4ubv.xml -func (gl *GL) VertexAttrib4ubv(index glbase.Attrib, v []uint8) { - C.gl3_0_glVertexAttrib4ubv(gl.funcs, C.GLuint(index), (*C.GLubyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib4sv.xml -func (gl *GL) VertexAttrib4sv(index glbase.Attrib, v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_0_glVertexAttrib4sv(gl.funcs, C.GLuint(index), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib4s.xml -func (gl *GL) VertexAttrib4s(index glbase.Attrib, x, y, z, w int16) { - C.gl3_0_glVertexAttrib4s(gl.funcs, C.GLuint(index), C.GLshort(x), C.GLshort(y), C.GLshort(z), C.GLshort(w)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib4iv.xml -func (gl *GL) VertexAttrib4iv(index glbase.Attrib, v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_0_glVertexAttrib4iv(gl.funcs, C.GLuint(index), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib4fv.xml -func (gl *GL) VertexAttrib4fv(index glbase.Attrib, v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_0_glVertexAttrib4fv(gl.funcs, C.GLuint(index), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib4f.xml -func (gl *GL) VertexAttrib4f(index glbase.Attrib, x, y, z, w float32) { - C.gl3_0_glVertexAttrib4f(gl.funcs, C.GLuint(index), C.GLfloat(x), C.GLfloat(y), C.GLfloat(z), C.GLfloat(w)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib4dv.xml -func (gl *GL) VertexAttrib4dv(index glbase.Attrib, v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_0_glVertexAttrib4dv(gl.funcs, C.GLuint(index), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib4d.xml -func (gl *GL) VertexAttrib4d(index glbase.Attrib, x, y, z, w float64) { - C.gl3_0_glVertexAttrib4d(gl.funcs, C.GLuint(index), C.GLdouble(x), C.GLdouble(y), C.GLdouble(z), C.GLdouble(w)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib4bv.xml -func (gl *GL) VertexAttrib4bv(index glbase.Attrib, v []byte) { - C.gl3_0_glVertexAttrib4bv(gl.funcs, C.GLuint(index), (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib4Nusv.xml -func (gl *GL) VertexAttrib4Nusv(index glbase.Attrib, v []uint16) { - C.gl3_0_glVertexAttrib4Nusv(gl.funcs, C.GLuint(index), (*C.GLushort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib4Nuiv.xml -func (gl *GL) VertexAttrib4Nuiv(index glbase.Attrib, v []uint32) { - C.gl3_0_glVertexAttrib4Nuiv(gl.funcs, C.GLuint(index), (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib4Nubv.xml -func (gl *GL) VertexAttrib4Nubv(index glbase.Attrib, v []uint8) { - C.gl3_0_glVertexAttrib4Nubv(gl.funcs, C.GLuint(index), (*C.GLubyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib4Nub.xml -func (gl *GL) VertexAttrib4Nub(index glbase.Attrib, x, y, z, w uint8) { - C.gl3_0_glVertexAttrib4Nub(gl.funcs, C.GLuint(index), C.GLubyte(x), C.GLubyte(y), C.GLubyte(z), C.GLubyte(w)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib4Nsv.xml -func (gl *GL) VertexAttrib4Nsv(index glbase.Attrib, v []int16) { - C.gl3_0_glVertexAttrib4Nsv(gl.funcs, C.GLuint(index), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib4Niv.xml -func (gl *GL) VertexAttrib4Niv(index glbase.Attrib, v []int32) { - C.gl3_0_glVertexAttrib4Niv(gl.funcs, C.GLuint(index), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib4Nbv.xml -func (gl *GL) VertexAttrib4Nbv(index glbase.Attrib, v []byte) { - C.gl3_0_glVertexAttrib4Nbv(gl.funcs, C.GLuint(index), (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib3sv.xml -func (gl *GL) VertexAttrib3sv(index glbase.Attrib, v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_0_glVertexAttrib3sv(gl.funcs, C.GLuint(index), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib3s.xml -func (gl *GL) VertexAttrib3s(index glbase.Attrib, x, y, z int16) { - C.gl3_0_glVertexAttrib3s(gl.funcs, C.GLuint(index), C.GLshort(x), C.GLshort(y), C.GLshort(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib3fv.xml -func (gl *GL) VertexAttrib3fv(index glbase.Attrib, v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_0_glVertexAttrib3fv(gl.funcs, C.GLuint(index), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib3f.xml -func (gl *GL) VertexAttrib3f(index glbase.Attrib, x, y, z float32) { - C.gl3_0_glVertexAttrib3f(gl.funcs, C.GLuint(index), C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib3dv.xml -func (gl *GL) VertexAttrib3dv(index glbase.Attrib, v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_0_glVertexAttrib3dv(gl.funcs, C.GLuint(index), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib3d.xml -func (gl *GL) VertexAttrib3d(index glbase.Attrib, x, y, z float64) { - C.gl3_0_glVertexAttrib3d(gl.funcs, C.GLuint(index), C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib2sv.xml -func (gl *GL) VertexAttrib2sv(index glbase.Attrib, v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_0_glVertexAttrib2sv(gl.funcs, C.GLuint(index), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib2s.xml -func (gl *GL) VertexAttrib2s(index glbase.Attrib, x, y int16) { - C.gl3_0_glVertexAttrib2s(gl.funcs, C.GLuint(index), C.GLshort(x), C.GLshort(y)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib2fv.xml -func (gl *GL) VertexAttrib2fv(index glbase.Attrib, v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_0_glVertexAttrib2fv(gl.funcs, C.GLuint(index), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib2f.xml -func (gl *GL) VertexAttrib2f(index glbase.Attrib, x, y float32) { - C.gl3_0_glVertexAttrib2f(gl.funcs, C.GLuint(index), C.GLfloat(x), C.GLfloat(y)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib2dv.xml -func (gl *GL) VertexAttrib2dv(index glbase.Attrib, v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_0_glVertexAttrib2dv(gl.funcs, C.GLuint(index), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib2d.xml -func (gl *GL) VertexAttrib2d(index glbase.Attrib, x, y float64) { - C.gl3_0_glVertexAttrib2d(gl.funcs, C.GLuint(index), C.GLdouble(x), C.GLdouble(y)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib1sv.xml -func (gl *GL) VertexAttrib1sv(index glbase.Attrib, v []int16) { - C.gl3_0_glVertexAttrib1sv(gl.funcs, C.GLuint(index), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib1s.xml -func (gl *GL) VertexAttrib1s(index glbase.Attrib, x int16) { - C.gl3_0_glVertexAttrib1s(gl.funcs, C.GLuint(index), C.GLshort(x)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib1fv.xml -func (gl *GL) VertexAttrib1fv(index glbase.Attrib, v []float32) { - C.gl3_0_glVertexAttrib1fv(gl.funcs, C.GLuint(index), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib1f.xml -func (gl *GL) VertexAttrib1f(index glbase.Attrib, x float32) { - C.gl3_0_glVertexAttrib1f(gl.funcs, C.GLuint(index), C.GLfloat(x)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib1dv.xml -func (gl *GL) VertexAttrib1dv(index glbase.Attrib, v []float64) { - C.gl3_0_glVertexAttrib1dv(gl.funcs, C.GLuint(index), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib1d.xml -func (gl *GL) VertexAttrib1d(index glbase.Attrib, x float64) { - C.gl3_0_glVertexAttrib1d(gl.funcs, C.GLuint(index), C.GLdouble(x)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribI4usv.xml -func (gl *GL) VertexAttribI4usv(index glbase.Attrib, v []uint16) { - C.gl3_0_glVertexAttribI4usv(gl.funcs, C.GLuint(index), (*C.GLushort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribI4ubv.xml -func (gl *GL) VertexAttribI4ubv(index glbase.Attrib, v []uint8) { - C.gl3_0_glVertexAttribI4ubv(gl.funcs, C.GLuint(index), (*C.GLubyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribI4sv.xml -func (gl *GL) VertexAttribI4sv(index glbase.Attrib, v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_0_glVertexAttribI4sv(gl.funcs, C.GLuint(index), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribI4bv.xml -func (gl *GL) VertexAttribI4bv(index glbase.Attrib, v []byte) { - C.gl3_0_glVertexAttribI4bv(gl.funcs, C.GLuint(index), (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribI4uiv.xml -func (gl *GL) VertexAttribI4uiv(index glbase.Attrib, v []uint32) { - C.gl3_0_glVertexAttribI4uiv(gl.funcs, C.GLuint(index), (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribI3uiv.xml -func (gl *GL) VertexAttribI3uiv(index glbase.Attrib, v []uint32) { - C.gl3_0_glVertexAttribI3uiv(gl.funcs, C.GLuint(index), (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribI2uiv.xml -func (gl *GL) VertexAttribI2uiv(index glbase.Attrib, v []uint32) { - C.gl3_0_glVertexAttribI2uiv(gl.funcs, C.GLuint(index), (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribI1uiv.xml -func (gl *GL) VertexAttribI1uiv(index glbase.Attrib, v []uint32) { - C.gl3_0_glVertexAttribI1uiv(gl.funcs, C.GLuint(index), (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribI4iv.xml -func (gl *GL) VertexAttribI4iv(index glbase.Attrib, v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_0_glVertexAttribI4iv(gl.funcs, C.GLuint(index), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribI3iv.xml -func (gl *GL) VertexAttribI3iv(index glbase.Attrib, v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_0_glVertexAttribI3iv(gl.funcs, C.GLuint(index), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribI2iv.xml -func (gl *GL) VertexAttribI2iv(index glbase.Attrib, v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_0_glVertexAttribI2iv(gl.funcs, C.GLuint(index), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribI1iv.xml -func (gl *GL) VertexAttribI1iv(index glbase.Attrib, v []int32) { - C.gl3_0_glVertexAttribI1iv(gl.funcs, C.GLuint(index), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribI4ui.xml -func (gl *GL) VertexAttribI4ui(index glbase.Attrib, x, y, z, w uint32) { - C.gl3_0_glVertexAttribI4ui(gl.funcs, C.GLuint(index), C.GLuint(x), C.GLuint(y), C.GLuint(z), C.GLuint(w)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribI3ui.xml -func (gl *GL) VertexAttribI3ui(index glbase.Attrib, x, y, z uint32) { - C.gl3_0_glVertexAttribI3ui(gl.funcs, C.GLuint(index), C.GLuint(x), C.GLuint(y), C.GLuint(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribI2ui.xml -func (gl *GL) VertexAttribI2ui(index glbase.Attrib, x, y uint32) { - C.gl3_0_glVertexAttribI2ui(gl.funcs, C.GLuint(index), C.GLuint(x), C.GLuint(y)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribI1ui.xml -func (gl *GL) VertexAttribI1ui(index glbase.Attrib, x uint32) { - C.gl3_0_glVertexAttribI1ui(gl.funcs, C.GLuint(index), C.GLuint(x)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribI4i.xml -func (gl *GL) VertexAttribI4i(index glbase.Attrib, x, y, z, w int) { - C.gl3_0_glVertexAttribI4i(gl.funcs, C.GLuint(index), C.GLint(x), C.GLint(y), C.GLint(z), C.GLint(w)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribI3i.xml -func (gl *GL) VertexAttribI3i(index glbase.Attrib, x, y, z int) { - C.gl3_0_glVertexAttribI3i(gl.funcs, C.GLuint(index), C.GLint(x), C.GLint(y), C.GLint(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribI2i.xml -func (gl *GL) VertexAttribI2i(index glbase.Attrib, x, y int) { - C.gl3_0_glVertexAttribI2i(gl.funcs, C.GLuint(index), C.GLint(x), C.GLint(y)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribI1i.xml -func (gl *GL) VertexAttribI1i(index glbase.Attrib, x int) { - C.gl3_0_glVertexAttribI1i(gl.funcs, C.GLuint(index), C.GLint(x)) -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/3.1/funcs.cpp b/Godeps/_workspace/src/github.com/obscuren/qml/gl/3.1/funcs.cpp deleted file mode 100644 index 7f98467608..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/3.1/funcs.cpp +++ /dev/null @@ -1,1422 +0,0 @@ - -// ** file automatically generated by glgen -- do not edit manually ** - -#include -#include - -#include "funcs.h" - -void *gl3_1_funcs() { - QOpenGLFunctions_3_1* funcs = QOpenGLContext::currentContext()->versionFunctions(); - if (!funcs) { - return 0; - } - funcs->initializeOpenGLFunctions(); - return funcs; -} - - -void gl3_1_glViewport(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glViewport(x, y, width, height); -} - -void gl3_1_glDepthRange(void *_glfuncs, GLdouble nearVal, GLdouble farVal) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthRange(nearVal, farVal); -} - -GLboolean gl3_1_glIsEnabled(void *_glfuncs, GLenum cap) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsEnabled(cap); -} - -void gl3_1_glGetTexLevelParameteriv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexLevelParameteriv(target, level, pname, params); -} - -void gl3_1_glGetTexLevelParameterfv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexLevelParameterfv(target, level, pname, params); -} - -void gl3_1_glGetTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameteriv(target, pname, params); -} - -void gl3_1_glGetTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameterfv(target, pname, params); -} - -void gl3_1_glGetTexImage(void *_glfuncs, GLenum target, GLint level, GLenum format, GLenum gltype, GLvoid* pixels) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexImage(target, level, format, gltype, pixels); -} - -void gl3_1_glGetIntegerv(void *_glfuncs, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetIntegerv(pname, params); -} - -void gl3_1_glGetFloatv(void *_glfuncs, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetFloatv(pname, params); -} - -GLenum gl3_1_glGetError(void *_glfuncs) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetError(); -} - -void gl3_1_glGetDoublev(void *_glfuncs, GLenum pname, GLdouble* params) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetDoublev(pname, params); -} - -void gl3_1_glGetBooleanv(void *_glfuncs, GLenum pname, GLboolean* params) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBooleanv(pname, params); -} - -void gl3_1_glReadPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum gltype, GLvoid* pixels) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glReadPixels(x, y, width, height, format, gltype, pixels); -} - -void gl3_1_glReadBuffer(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glReadBuffer(mode); -} - -void gl3_1_glPixelStorei(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelStorei(pname, param); -} - -void gl3_1_glPixelStoref(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelStoref(pname, param); -} - -void gl3_1_glDepthFunc(void *_glfuncs, GLenum glfunc) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthFunc(glfunc); -} - -void gl3_1_glStencilOp(void *_glfuncs, GLenum fail, GLenum zfail, GLenum zpass) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilOp(fail, zfail, zpass); -} - -void gl3_1_glStencilFunc(void *_glfuncs, GLenum glfunc, GLint ref, GLuint mask) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilFunc(glfunc, ref, mask); -} - -void gl3_1_glLogicOp(void *_glfuncs, GLenum opcode) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLogicOp(opcode); -} - -void gl3_1_glBlendFunc(void *_glfuncs, GLenum sfactor, GLenum dfactor) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendFunc(sfactor, dfactor); -} - -void gl3_1_glFlush(void *_glfuncs) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFlush(); -} - -void gl3_1_glFinish(void *_glfuncs) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFinish(); -} - -void gl3_1_glEnable(void *_glfuncs, GLenum cap) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnable(cap); -} - -void gl3_1_glDisable(void *_glfuncs, GLenum cap) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDisable(cap); -} - -void gl3_1_glDepthMask(void *_glfuncs, GLboolean flag) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthMask(flag); -} - -void gl3_1_glColorMask(void *_glfuncs, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorMask(red, green, blue, alpha); -} - -void gl3_1_glStencilMask(void *_glfuncs, GLuint mask) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilMask(mask); -} - -void gl3_1_glClearDepth(void *_glfuncs, GLdouble depth) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearDepth(depth); -} - -void gl3_1_glClearStencil(void *_glfuncs, GLint s) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearStencil(s); -} - -void gl3_1_glClearColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearColor(red, green, blue, alpha); -} - -void gl3_1_glClear(void *_glfuncs, GLbitfield mask) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClear(mask); -} - -void gl3_1_glDrawBuffer(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawBuffer(mode); -} - -void gl3_1_glTexImage2D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage2D(target, level, internalFormat, width, height, border, format, gltype, pixels); -} - -void gl3_1_glTexImage1D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage1D(target, level, internalFormat, width, border, format, gltype, pixels); -} - -void gl3_1_glTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameteriv(target, pname, params); -} - -void gl3_1_glTexParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint param) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameteri(target, pname, param); -} - -void gl3_1_glTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterfv(target, pname, params); -} - -void gl3_1_glTexParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterf(target, pname, param); -} - -void gl3_1_glScissor(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScissor(x, y, width, height); -} - -void gl3_1_glPolygonMode(void *_glfuncs, GLenum face, GLenum mode) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPolygonMode(face, mode); -} - -void gl3_1_glPointSize(void *_glfuncs, GLfloat size) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointSize(size); -} - -void gl3_1_glLineWidth(void *_glfuncs, GLfloat width) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLineWidth(width); -} - -void gl3_1_glHint(void *_glfuncs, GLenum target, GLenum mode) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glHint(target, mode); -} - -void gl3_1_glFrontFace(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFrontFace(mode); -} - -void gl3_1_glCullFace(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCullFace(mode); -} - -void gl3_1_glIndexubv(void *_glfuncs, const GLubyte* c) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexubv(c); -} - -void gl3_1_glIndexub(void *_glfuncs, GLubyte c) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexub(c); -} - -GLboolean gl3_1_glIsTexture(void *_glfuncs, GLuint texture) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsTexture(texture); -} - -void gl3_1_glGenTextures(void *_glfuncs, GLsizei n, GLuint* textures) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenTextures(n, textures); -} - -void gl3_1_glDeleteTextures(void *_glfuncs, GLsizei n, const GLuint* textures) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteTextures(n, textures); -} - -void gl3_1_glBindTexture(void *_glfuncs, GLenum target, GLuint texture) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindTexture(target, texture); -} - -void gl3_1_glTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, gltype, pixels); -} - -void gl3_1_glTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexSubImage1D(target, level, xoffset, width, format, gltype, pixels); -} - -void gl3_1_glCopyTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height); -} - -void gl3_1_glCopyTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexSubImage1D(target, level, xoffset, x, y, width); -} - -void gl3_1_glCopyTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexImage2D(target, level, internalFormat, x, y, width, height, border); -} - -void gl3_1_glCopyTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexImage1D(target, level, internalFormat, x, y, width, border); -} - -void gl3_1_glPolygonOffset(void *_glfuncs, GLfloat factor, GLfloat units) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPolygonOffset(factor, units); -} - -void gl3_1_glDrawElements(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElements(mode, count, gltype, indices); -} - -void gl3_1_glDrawArrays(void *_glfuncs, GLenum mode, GLint first, GLsizei count) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawArrays(mode, first, count); -} - -void gl3_1_glCopyTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexSubImage3D(target, level, xoffset, yoffset, zoffset, x, y, width, height); -} - -void gl3_1_glTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, gltype, pixels); -} - -void gl3_1_glTexImage3D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage3D(target, level, internalFormat, width, height, depth, border, format, gltype, pixels); -} - -void gl3_1_glDrawRangeElements(void *_glfuncs, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum gltype, const GLvoid* indices) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawRangeElements(mode, start, end, count, gltype, indices); -} - -void gl3_1_glBlendEquation(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendEquation(mode); -} - -void gl3_1_glBlendColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendColor(red, green, blue, alpha); -} - -void gl3_1_glGetCompressedTexImage(void *_glfuncs, GLenum target, GLint level, GLvoid* img) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetCompressedTexImage(target, level, img); -} - -void gl3_1_glCompressedTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexSubImage1D(target, level, xoffset, width, format, imageSize, data); -} - -void gl3_1_glCompressedTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data); -} - -void gl3_1_glCompressedTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data); -} - -void gl3_1_glCompressedTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexImage1D(target, level, internalFormat, width, border, imageSize, data); -} - -void gl3_1_glCompressedTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexImage2D(target, level, internalFormat, width, height, border, imageSize, data); -} - -void gl3_1_glCompressedTexImage3D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexImage3D(target, level, internalFormat, width, height, depth, border, imageSize, data); -} - -void gl3_1_glSampleCoverage(void *_glfuncs, GLfloat value, GLboolean invert) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSampleCoverage(value, invert); -} - -void gl3_1_glActiveTexture(void *_glfuncs, GLenum texture) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glActiveTexture(texture); -} - -void gl3_1_glPointParameteriv(void *_glfuncs, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameteriv(pname, params); -} - -void gl3_1_glPointParameteri(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameteri(pname, param); -} - -void gl3_1_glPointParameterfv(void *_glfuncs, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameterfv(pname, params); -} - -void gl3_1_glPointParameterf(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameterf(pname, param); -} - -void gl3_1_glMultiDrawArrays(void *_glfuncs, GLenum mode, const GLint* first, const GLsizei* count, GLsizei drawcount) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiDrawArrays(mode, first, count, drawcount); -} - -void gl3_1_glBlendFuncSeparate(void *_glfuncs, GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendFuncSeparate(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha); -} - -void gl3_1_glGetBufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBufferParameteriv(target, pname, params); -} - -GLboolean gl3_1_glUnmapBuffer(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glUnmapBuffer(target); -} - -void gl3_1_glGetBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, GLvoid* data) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBufferSubData(target, offset, size, data); -} - -void gl3_1_glBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBufferSubData(target, offset, size, data); -} - -void gl3_1_glBufferData(void *_glfuncs, GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBufferData(target, size, data, usage); -} - -GLboolean gl3_1_glIsBuffer(void *_glfuncs, GLuint buffer) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsBuffer(buffer); -} - -void gl3_1_glGenBuffers(void *_glfuncs, GLsizei n, GLuint* buffers) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenBuffers(n, buffers); -} - -void gl3_1_glDeleteBuffers(void *_glfuncs, GLsizei n, const GLuint* buffers) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteBuffers(n, buffers); -} - -void gl3_1_glBindBuffer(void *_glfuncs, GLenum target, GLuint buffer) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindBuffer(target, buffer); -} - -void gl3_1_glGetQueryObjectuiv(void *_glfuncs, GLuint id, GLenum pname, GLuint* params) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryObjectuiv(id, pname, params); -} - -void gl3_1_glGetQueryObjectiv(void *_glfuncs, GLuint id, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryObjectiv(id, pname, params); -} - -void gl3_1_glGetQueryiv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryiv(target, pname, params); -} - -void gl3_1_glEndQuery(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndQuery(target); -} - -void gl3_1_glBeginQuery(void *_glfuncs, GLenum target, GLuint id) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBeginQuery(target, id); -} - -GLboolean gl3_1_glIsQuery(void *_glfuncs, GLuint id) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsQuery(id); -} - -void gl3_1_glDeleteQueries(void *_glfuncs, GLsizei n, const GLuint* ids) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteQueries(n, ids); -} - -void gl3_1_glGenQueries(void *_glfuncs, GLsizei n, GLuint* ids) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenQueries(n, ids); -} - -void gl3_1_glVertexAttribPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLboolean normalized, GLsizei stride, const GLvoid* offset) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribPointer(index, size, gltype, normalized, stride, offset); -} - -void gl3_1_glValidateProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glValidateProgram(program); -} - -void gl3_1_glUniformMatrix4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4fv(location, count, transpose, value); -} - -void gl3_1_glUniformMatrix3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3fv(location, count, transpose, value); -} - -void gl3_1_glUniformMatrix2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2fv(location, count, transpose, value); -} - -void gl3_1_glUniform4iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4iv(location, count, value); -} - -void gl3_1_glUniform3iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3iv(location, count, value); -} - -void gl3_1_glUniform2iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2iv(location, count, value); -} - -void gl3_1_glUniform1iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1iv(location, count, value); -} - -void gl3_1_glUniform4fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4fv(location, count, value); -} - -void gl3_1_glUniform3fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3fv(location, count, value); -} - -void gl3_1_glUniform2fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2fv(location, count, value); -} - -void gl3_1_glUniform1fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1fv(location, count, value); -} - -void gl3_1_glUniform4i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2, GLint v3) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4i(location, v0, v1, v2, v3); -} - -void gl3_1_glUniform3i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3i(location, v0, v1, v2); -} - -void gl3_1_glUniform2i(void *_glfuncs, GLint location, GLint v0, GLint v1) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2i(location, v0, v1); -} - -void gl3_1_glUniform1i(void *_glfuncs, GLint location, GLint v0) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1i(location, v0); -} - -void gl3_1_glUniform4f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4f(location, v0, v1, v2, v3); -} - -void gl3_1_glUniform3f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3f(location, v0, v1, v2); -} - -void gl3_1_glUniform2f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2f(location, v0, v1); -} - -void gl3_1_glUniform1f(void *_glfuncs, GLint location, GLfloat v0) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1f(location, v0); -} - -void gl3_1_glUseProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUseProgram(program); -} - -void gl3_1_glShaderSource(void *_glfuncs, GLuint shader, GLsizei count, const GLchar** source, const GLint* length) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glShaderSource(shader, count, source, length); -} - -void gl3_1_glLinkProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLinkProgram(program); -} - -GLboolean gl3_1_glIsShader(void *_glfuncs, GLuint shader) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsShader(shader); -} - -GLboolean gl3_1_glIsProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsProgram(program); -} - -void gl3_1_glGetVertexAttribiv(void *_glfuncs, GLuint index, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribiv(index, pname, params); -} - -void gl3_1_glGetVertexAttribfv(void *_glfuncs, GLuint index, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribfv(index, pname, params); -} - -void gl3_1_glGetVertexAttribdv(void *_glfuncs, GLuint index, GLenum pname, GLdouble* params) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribdv(index, pname, params); -} - -void gl3_1_glGetUniformiv(void *_glfuncs, GLuint program, GLint location, GLint* params) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetUniformiv(program, location, params); -} - -void gl3_1_glGetUniformfv(void *_glfuncs, GLuint program, GLint location, GLfloat* params) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetUniformfv(program, location, params); -} - -GLint gl3_1_glGetUniformLocation(void *_glfuncs, GLuint program, const GLchar* name) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetUniformLocation(program, name); -} - -void gl3_1_glGetShaderSource(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* source) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetShaderSource(shader, bufSize, length, source); -} - -void gl3_1_glGetShaderInfoLog(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* infoLog) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetShaderInfoLog(shader, bufSize, length, infoLog); -} - -void gl3_1_glGetShaderiv(void *_glfuncs, GLuint shader, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetShaderiv(shader, pname, params); -} - -void gl3_1_glGetProgramInfoLog(void *_glfuncs, GLuint program, GLsizei bufSize, GLsizei* length, GLchar* infoLog) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetProgramInfoLog(program, bufSize, length, infoLog); -} - -void gl3_1_glGetProgramiv(void *_glfuncs, GLuint program, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetProgramiv(program, pname, params); -} - -GLint gl3_1_glGetAttribLocation(void *_glfuncs, GLuint program, const GLchar* name) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetAttribLocation(program, name); -} - -void gl3_1_glGetAttachedShaders(void *_glfuncs, GLuint program, GLsizei maxCount, GLsizei* count, GLuint* obj) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetAttachedShaders(program, maxCount, count, obj); -} - -void gl3_1_glGetActiveUniform(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniform(program, index, bufSize, length, size, gltype, name); -} - -void gl3_1_glGetActiveAttrib(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveAttrib(program, index, bufSize, length, size, gltype, name); -} - -void gl3_1_glEnableVertexAttribArray(void *_glfuncs, GLuint index) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnableVertexAttribArray(index); -} - -void gl3_1_glDisableVertexAttribArray(void *_glfuncs, GLuint index) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDisableVertexAttribArray(index); -} - -void gl3_1_glDetachShader(void *_glfuncs, GLuint program, GLuint shader) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDetachShader(program, shader); -} - -void gl3_1_glDeleteShader(void *_glfuncs, GLuint shader) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteShader(shader); -} - -void gl3_1_glDeleteProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteProgram(program); -} - -GLuint gl3_1_glCreateShader(void *_glfuncs, GLenum gltype) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glCreateShader(gltype); -} - -GLuint gl3_1_glCreateProgram(void *_glfuncs) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glCreateProgram(); -} - -void gl3_1_glCompileShader(void *_glfuncs, GLuint shader) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompileShader(shader); -} - -void gl3_1_glBindAttribLocation(void *_glfuncs, GLuint program, GLuint index, const GLchar* name) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindAttribLocation(program, index, name); -} - -void gl3_1_glAttachShader(void *_glfuncs, GLuint program, GLuint shader) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glAttachShader(program, shader); -} - -void gl3_1_glStencilMaskSeparate(void *_glfuncs, GLenum face, GLuint mask) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilMaskSeparate(face, mask); -} - -void gl3_1_glStencilFuncSeparate(void *_glfuncs, GLenum face, GLenum glfunc, GLint ref, GLuint mask) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilFuncSeparate(face, glfunc, ref, mask); -} - -void gl3_1_glStencilOpSeparate(void *_glfuncs, GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilOpSeparate(face, sfail, dpfail, dppass); -} - -void gl3_1_glDrawBuffers(void *_glfuncs, GLsizei n, const GLenum* bufs) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawBuffers(n, bufs); -} - -void gl3_1_glBlendEquationSeparate(void *_glfuncs, GLenum modeRGB, GLenum modeAlpha) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendEquationSeparate(modeRGB, modeAlpha); -} - -void gl3_1_glUniformMatrix4x3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4x3fv(location, count, transpose, value); -} - -void gl3_1_glUniformMatrix3x4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3x4fv(location, count, transpose, value); -} - -void gl3_1_glUniformMatrix4x2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4x2fv(location, count, transpose, value); -} - -void gl3_1_glUniformMatrix2x4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2x4fv(location, count, transpose, value); -} - -void gl3_1_glUniformMatrix3x2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3x2fv(location, count, transpose, value); -} - -void gl3_1_glUniformMatrix2x3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2x3fv(location, count, transpose, value); -} - -GLboolean gl3_1_glIsVertexArray(void *_glfuncs, GLuint array) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsVertexArray(array); -} - -void gl3_1_glGenVertexArrays(void *_glfuncs, GLsizei n, GLuint* arrays) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenVertexArrays(n, arrays); -} - -void gl3_1_glDeleteVertexArrays(void *_glfuncs, GLsizei n, const GLuint* arrays) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteVertexArrays(n, arrays); -} - -void gl3_1_glBindVertexArray(void *_glfuncs, GLuint array) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindVertexArray(array); -} - -void gl3_1_glFlushMappedBufferRange(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr length) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFlushMappedBufferRange(target, offset, length); -} - -void gl3_1_glFramebufferTextureLayer(void *_glfuncs, GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTextureLayer(target, attachment, texture, level, layer); -} - -void gl3_1_glRenderbufferStorageMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRenderbufferStorageMultisample(target, samples, internalFormat, width, height); -} - -void gl3_1_glBlitFramebuffer(void *_glfuncs, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter); -} - -void gl3_1_glGenerateMipmap(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenerateMipmap(target); -} - -void gl3_1_glGetFramebufferAttachmentParameteriv(void *_glfuncs, GLenum target, GLenum attachment, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetFramebufferAttachmentParameteriv(target, attachment, pname, params); -} - -void gl3_1_glFramebufferRenderbuffer(void *_glfuncs, GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer); -} - -void gl3_1_glFramebufferTexture3D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTexture3D(target, attachment, textarget, texture, level, zoffset); -} - -void gl3_1_glFramebufferTexture2D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTexture2D(target, attachment, textarget, texture, level); -} - -void gl3_1_glFramebufferTexture1D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTexture1D(target, attachment, textarget, texture, level); -} - -GLenum gl3_1_glCheckFramebufferStatus(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glCheckFramebufferStatus(target); -} - -void gl3_1_glGenFramebuffers(void *_glfuncs, GLsizei n, GLuint* framebuffers) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenFramebuffers(n, framebuffers); -} - -void gl3_1_glDeleteFramebuffers(void *_glfuncs, GLsizei n, const GLuint* framebuffers) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteFramebuffers(n, framebuffers); -} - -void gl3_1_glBindFramebuffer(void *_glfuncs, GLenum target, GLuint framebuffer) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindFramebuffer(target, framebuffer); -} - -GLboolean gl3_1_glIsFramebuffer(void *_glfuncs, GLuint framebuffer) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsFramebuffer(framebuffer); -} - -void gl3_1_glGetRenderbufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetRenderbufferParameteriv(target, pname, params); -} - -void gl3_1_glRenderbufferStorage(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRenderbufferStorage(target, internalFormat, width, height); -} - -void gl3_1_glGenRenderbuffers(void *_glfuncs, GLsizei n, GLuint* renderbuffers) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenRenderbuffers(n, renderbuffers); -} - -void gl3_1_glDeleteRenderbuffers(void *_glfuncs, GLsizei n, const GLuint* renderbuffers) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteRenderbuffers(n, renderbuffers); -} - -void gl3_1_glBindRenderbuffer(void *_glfuncs, GLenum target, GLuint renderbuffer) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindRenderbuffer(target, renderbuffer); -} - -GLboolean gl3_1_glIsRenderbuffer(void *_glfuncs, GLuint renderbuffer) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsRenderbuffer(renderbuffer); -} - -void gl3_1_glClearBufferfi(void *_glfuncs, GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearBufferfi(buffer, drawbuffer, depth, stencil); -} - -void gl3_1_glClearBufferfv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLfloat* value) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearBufferfv(buffer, drawbuffer, value); -} - -void gl3_1_glClearBufferuiv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLuint* value) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearBufferuiv(buffer, drawbuffer, value); -} - -void gl3_1_glClearBufferiv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLint* value) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearBufferiv(buffer, drawbuffer, value); -} - -void gl3_1_glGetTexParameterIuiv(void *_glfuncs, GLenum target, GLenum pname, GLuint* params) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameterIuiv(target, pname, params); -} - -void gl3_1_glGetTexParameterIiv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameterIiv(target, pname, params); -} - -void gl3_1_glTexParameterIuiv(void *_glfuncs, GLenum target, GLenum pname, const GLuint* params) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterIuiv(target, pname, params); -} - -void gl3_1_glTexParameterIiv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterIiv(target, pname, params); -} - -void gl3_1_glUniform4uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4uiv(location, count, value); -} - -void gl3_1_glUniform3uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3uiv(location, count, value); -} - -void gl3_1_glUniform2uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2uiv(location, count, value); -} - -void gl3_1_glUniform1uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1uiv(location, count, value); -} - -void gl3_1_glUniform4ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4ui(location, v0, v1, v2, v3); -} - -void gl3_1_glUniform3ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1, GLuint v2) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3ui(location, v0, v1, v2); -} - -void gl3_1_glUniform2ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2ui(location, v0, v1); -} - -void gl3_1_glUniform1ui(void *_glfuncs, GLint location, GLuint v0) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1ui(location, v0); -} - -GLint gl3_1_glGetFragDataLocation(void *_glfuncs, GLuint program, const GLchar* name) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetFragDataLocation(program, name); -} - -void gl3_1_glBindFragDataLocation(void *_glfuncs, GLuint program, GLuint color, const GLchar* name) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindFragDataLocation(program, color, name); -} - -void gl3_1_glGetUniformuiv(void *_glfuncs, GLuint program, GLint location, GLuint* params) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetUniformuiv(program, location, params); -} - -void gl3_1_glGetVertexAttribIuiv(void *_glfuncs, GLuint index, GLenum pname, GLuint* params) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribIuiv(index, pname, params); -} - -void gl3_1_glGetVertexAttribIiv(void *_glfuncs, GLuint index, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribIiv(index, pname, params); -} - -void gl3_1_glVertexAttribIPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribIPointer(index, size, gltype, stride, pointer); -} - -void gl3_1_glEndConditionalRender(void *_glfuncs) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndConditionalRender(); -} - -void gl3_1_glBeginConditionalRender(void *_glfuncs, GLuint id, GLenum mode) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBeginConditionalRender(id, mode); -} - -void gl3_1_glClampColor(void *_glfuncs, GLenum target, GLenum clamp) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClampColor(target, clamp); -} - -void gl3_1_glGetTransformFeedbackVarying(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* gltype, GLchar* name) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTransformFeedbackVarying(program, index, bufSize, length, size, gltype, name); -} - -void gl3_1_glBindBufferBase(void *_glfuncs, GLenum target, GLuint index, GLuint buffer) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindBufferBase(target, index, buffer); -} - -void gl3_1_glBindBufferRange(void *_glfuncs, GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindBufferRange(target, index, buffer, offset, size); -} - -void gl3_1_glEndTransformFeedback(void *_glfuncs) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndTransformFeedback(); -} - -void gl3_1_glBeginTransformFeedback(void *_glfuncs, GLenum primitiveMode) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBeginTransformFeedback(primitiveMode); -} - -GLboolean gl3_1_glIsEnabledi(void *_glfuncs, GLenum target, GLuint index) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsEnabledi(target, index); -} - -void gl3_1_glDisablei(void *_glfuncs, GLenum target, GLuint index) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDisablei(target, index); -} - -void gl3_1_glEnablei(void *_glfuncs, GLenum target, GLuint index) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnablei(target, index); -} - -void gl3_1_glGetIntegeri_v(void *_glfuncs, GLenum target, GLuint index, GLint* data) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetIntegeri_v(target, index, data); -} - -void gl3_1_glGetBooleani_v(void *_glfuncs, GLenum target, GLuint index, GLboolean* data) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBooleani_v(target, index, data); -} - -void gl3_1_glColorMaski(void *_glfuncs, GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorMaski(index, r, g, b, a); -} - -void gl3_1_glCopyBufferSubData(void *_glfuncs, GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyBufferSubData(readTarget, writeTarget, readOffset, writeOffset, size); -} - -void gl3_1_glUniformBlockBinding(void *_glfuncs, GLuint program, GLuint v0, GLuint v1) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformBlockBinding(program, v0, v1); -} - -void gl3_1_glGetActiveUniformBlockName(void *_glfuncs, GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformBlockName) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniformBlockName(program, uniformBlockIndex, bufSize, length, uniformBlockName); -} - -void gl3_1_glGetActiveUniformBlockiv(void *_glfuncs, GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniformBlockiv(program, uniformBlockIndex, pname, params); -} - -GLuint gl3_1_glGetUniformBlockIndex(void *_glfuncs, GLuint program, const GLchar* uniformBlockName) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetUniformBlockIndex(program, uniformBlockName); -} - -void gl3_1_glGetActiveUniformName(void *_glfuncs, GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformName) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniformName(program, uniformIndex, bufSize, length, uniformName); -} - -void gl3_1_glGetActiveUniformsiv(void *_glfuncs, GLuint program, GLsizei uniformCount, const GLuint* uniformIndices, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniformsiv(program, uniformCount, uniformIndices, pname, params); -} - -void gl3_1_glPrimitiveRestartIndex(void *_glfuncs, GLuint index) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPrimitiveRestartIndex(index); -} - -void gl3_1_glTexBuffer(void *_glfuncs, GLenum target, GLenum internalFormat, GLuint buffer) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexBuffer(target, internalFormat, buffer); -} - -void gl3_1_glDrawElementsInstanced(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLsizei instancecount) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElementsInstanced(mode, count, gltype, indices, instancecount); -} - -void gl3_1_glDrawArraysInstanced(void *_glfuncs, GLenum mode, GLint first, GLsizei count, GLsizei instancecount) -{ - QOpenGLFunctions_3_1* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawArraysInstanced(mode, first, count, instancecount); -} - diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/3.1/funcs.h b/Godeps/_workspace/src/github.com/obscuren/qml/gl/3.1/funcs.h deleted file mode 100644 index b06680d6e5..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/3.1/funcs.h +++ /dev/null @@ -1,276 +0,0 @@ - -// ** file automatically generated by glgen -- do not edit manually ** - -#ifndef __cplusplus -#include -#include -typedef unsigned int GLenum; -typedef unsigned char GLboolean; -typedef unsigned int GLbitfield; -typedef void GLvoid; -typedef char GLchar; -typedef signed char GLbyte; /* 1-byte signed */ -typedef short GLshort; /* 2-byte signed */ -typedef int GLint; /* 4-byte signed */ -typedef unsigned char GLubyte; /* 1-byte unsigned */ -typedef unsigned short GLushort; /* 2-byte unsigned */ -typedef unsigned int GLuint; /* 4-byte unsigned */ -typedef int GLsizei; /* 4-byte signed */ -typedef float GLfloat; /* single precision float */ -typedef float GLclampf; /* single precision float in [0,1] */ -typedef double GLdouble; /* double precision float */ -typedef double GLclampd; /* double precision float in [0,1] */ -typedef int64_t GLint64; -typedef uint64_t GLuint64; -typedef ptrdiff_t GLintptr; -typedef ptrdiff_t GLsizeiptr; -typedef ptrdiff_t GLintptrARB; -typedef ptrdiff_t GLsizeiptrARB; -typedef struct __GLsync *GLsync; -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -void *gl3_1_funcs(); - -void gl3_1_glViewport(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height); -void gl3_1_glDepthRange(void *_glfuncs, GLdouble nearVal, GLdouble farVal); -GLboolean gl3_1_glIsEnabled(void *_glfuncs, GLenum cap); -void gl3_1_glGetTexLevelParameteriv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLint* params); -void gl3_1_glGetTexLevelParameterfv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLfloat* params); -void gl3_1_glGetTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl3_1_glGetTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl3_1_glGetTexImage(void *_glfuncs, GLenum target, GLint level, GLenum format, GLenum gltype, GLvoid* pixels); -void gl3_1_glGetIntegerv(void *_glfuncs, GLenum pname, GLint* params); -void gl3_1_glGetFloatv(void *_glfuncs, GLenum pname, GLfloat* params); -GLenum gl3_1_glGetError(void *_glfuncs); -void gl3_1_glGetDoublev(void *_glfuncs, GLenum pname, GLdouble* params); -void gl3_1_glGetBooleanv(void *_glfuncs, GLenum pname, GLboolean* params); -void gl3_1_glReadPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum gltype, GLvoid* pixels); -void gl3_1_glReadBuffer(void *_glfuncs, GLenum mode); -void gl3_1_glPixelStorei(void *_glfuncs, GLenum pname, GLint param); -void gl3_1_glPixelStoref(void *_glfuncs, GLenum pname, GLfloat param); -void gl3_1_glDepthFunc(void *_glfuncs, GLenum glfunc); -void gl3_1_glStencilOp(void *_glfuncs, GLenum fail, GLenum zfail, GLenum zpass); -void gl3_1_glStencilFunc(void *_glfuncs, GLenum glfunc, GLint ref, GLuint mask); -void gl3_1_glLogicOp(void *_glfuncs, GLenum opcode); -void gl3_1_glBlendFunc(void *_glfuncs, GLenum sfactor, GLenum dfactor); -void gl3_1_glFlush(void *_glfuncs); -void gl3_1_glFinish(void *_glfuncs); -void gl3_1_glEnable(void *_glfuncs, GLenum cap); -void gl3_1_glDisable(void *_glfuncs, GLenum cap); -void gl3_1_glDepthMask(void *_glfuncs, GLboolean flag); -void gl3_1_glColorMask(void *_glfuncs, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); -void gl3_1_glStencilMask(void *_glfuncs, GLuint mask); -void gl3_1_glClearDepth(void *_glfuncs, GLdouble depth); -void gl3_1_glClearStencil(void *_glfuncs, GLint s); -void gl3_1_glClearColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl3_1_glClear(void *_glfuncs, GLbitfield mask); -void gl3_1_glDrawBuffer(void *_glfuncs, GLenum mode); -void gl3_1_glTexImage2D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl3_1_glTexImage1D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl3_1_glTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl3_1_glTexParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint param); -void gl3_1_glTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params); -void gl3_1_glTexParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param); -void gl3_1_glScissor(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height); -void gl3_1_glPolygonMode(void *_glfuncs, GLenum face, GLenum mode); -void gl3_1_glPointSize(void *_glfuncs, GLfloat size); -void gl3_1_glLineWidth(void *_glfuncs, GLfloat width); -void gl3_1_glHint(void *_glfuncs, GLenum target, GLenum mode); -void gl3_1_glFrontFace(void *_glfuncs, GLenum mode); -void gl3_1_glCullFace(void *_glfuncs, GLenum mode); -void gl3_1_glIndexubv(void *_glfuncs, const GLubyte* c); -void gl3_1_glIndexub(void *_glfuncs, GLubyte c); -GLboolean gl3_1_glIsTexture(void *_glfuncs, GLuint texture); -void gl3_1_glGenTextures(void *_glfuncs, GLsizei n, GLuint* textures); -void gl3_1_glDeleteTextures(void *_glfuncs, GLsizei n, const GLuint* textures); -void gl3_1_glBindTexture(void *_glfuncs, GLenum target, GLuint texture); -void gl3_1_glTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl3_1_glTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl3_1_glCopyTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -void gl3_1_glCopyTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -void gl3_1_glCopyTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -void gl3_1_glCopyTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border); -void gl3_1_glPolygonOffset(void *_glfuncs, GLfloat factor, GLfloat units); -void gl3_1_glDrawElements(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices); -void gl3_1_glDrawArrays(void *_glfuncs, GLenum mode, GLint first, GLsizei count); -void gl3_1_glCopyTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -void gl3_1_glTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl3_1_glTexImage3D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl3_1_glDrawRangeElements(void *_glfuncs, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum gltype, const GLvoid* indices); -void gl3_1_glBlendEquation(void *_glfuncs, GLenum mode); -void gl3_1_glBlendColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl3_1_glGetCompressedTexImage(void *_glfuncs, GLenum target, GLint level, GLvoid* img); -void gl3_1_glCompressedTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid* data); -void gl3_1_glCompressedTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data); -void gl3_1_glCompressedTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data); -void gl3_1_glCompressedTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid* data); -void gl3_1_glCompressedTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data); -void gl3_1_glCompressedTexImage3D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data); -void gl3_1_glSampleCoverage(void *_glfuncs, GLfloat value, GLboolean invert); -void gl3_1_glActiveTexture(void *_glfuncs, GLenum texture); -void gl3_1_glPointParameteriv(void *_glfuncs, GLenum pname, const GLint* params); -void gl3_1_glPointParameteri(void *_glfuncs, GLenum pname, GLint param); -void gl3_1_glPointParameterfv(void *_glfuncs, GLenum pname, const GLfloat* params); -void gl3_1_glPointParameterf(void *_glfuncs, GLenum pname, GLfloat param); -void gl3_1_glMultiDrawArrays(void *_glfuncs, GLenum mode, const GLint* first, const GLsizei* count, GLsizei drawcount); -void gl3_1_glBlendFuncSeparate(void *_glfuncs, GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -void gl3_1_glGetBufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -GLboolean gl3_1_glUnmapBuffer(void *_glfuncs, GLenum target); -void gl3_1_glGetBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, GLvoid* data); -void gl3_1_glBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data); -void gl3_1_glBufferData(void *_glfuncs, GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage); -GLboolean gl3_1_glIsBuffer(void *_glfuncs, GLuint buffer); -void gl3_1_glGenBuffers(void *_glfuncs, GLsizei n, GLuint* buffers); -void gl3_1_glDeleteBuffers(void *_glfuncs, GLsizei n, const GLuint* buffers); -void gl3_1_glBindBuffer(void *_glfuncs, GLenum target, GLuint buffer); -void gl3_1_glGetQueryObjectuiv(void *_glfuncs, GLuint id, GLenum pname, GLuint* params); -void gl3_1_glGetQueryObjectiv(void *_glfuncs, GLuint id, GLenum pname, GLint* params); -void gl3_1_glGetQueryiv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl3_1_glEndQuery(void *_glfuncs, GLenum target); -void gl3_1_glBeginQuery(void *_glfuncs, GLenum target, GLuint id); -GLboolean gl3_1_glIsQuery(void *_glfuncs, GLuint id); -void gl3_1_glDeleteQueries(void *_glfuncs, GLsizei n, const GLuint* ids); -void gl3_1_glGenQueries(void *_glfuncs, GLsizei n, GLuint* ids); -void gl3_1_glVertexAttribPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLboolean normalized, GLsizei stride, const GLvoid* offset); -void gl3_1_glValidateProgram(void *_glfuncs, GLuint program); -void gl3_1_glUniformMatrix4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl3_1_glUniformMatrix3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl3_1_glUniformMatrix2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl3_1_glUniform4iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gl3_1_glUniform3iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gl3_1_glUniform2iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gl3_1_glUniform1iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gl3_1_glUniform4fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gl3_1_glUniform3fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gl3_1_glUniform2fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gl3_1_glUniform1fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gl3_1_glUniform4i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -void gl3_1_glUniform3i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2); -void gl3_1_glUniform2i(void *_glfuncs, GLint location, GLint v0, GLint v1); -void gl3_1_glUniform1i(void *_glfuncs, GLint location, GLint v0); -void gl3_1_glUniform4f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -void gl3_1_glUniform3f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -void gl3_1_glUniform2f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1); -void gl3_1_glUniform1f(void *_glfuncs, GLint location, GLfloat v0); -void gl3_1_glUseProgram(void *_glfuncs, GLuint program); -void gl3_1_glShaderSource(void *_glfuncs, GLuint shader, GLsizei count, const GLchar** source, const GLint* length); -void gl3_1_glLinkProgram(void *_glfuncs, GLuint program); -GLboolean gl3_1_glIsShader(void *_glfuncs, GLuint shader); -GLboolean gl3_1_glIsProgram(void *_glfuncs, GLuint program); -void gl3_1_glGetVertexAttribiv(void *_glfuncs, GLuint index, GLenum pname, GLint* params); -void gl3_1_glGetVertexAttribfv(void *_glfuncs, GLuint index, GLenum pname, GLfloat* params); -void gl3_1_glGetVertexAttribdv(void *_glfuncs, GLuint index, GLenum pname, GLdouble* params); -void gl3_1_glGetUniformiv(void *_glfuncs, GLuint program, GLint location, GLint* params); -void gl3_1_glGetUniformfv(void *_glfuncs, GLuint program, GLint location, GLfloat* params); -GLint gl3_1_glGetUniformLocation(void *_glfuncs, GLuint program, const GLchar* name); -void gl3_1_glGetShaderSource(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* source); -void gl3_1_glGetShaderInfoLog(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* infoLog); -void gl3_1_glGetShaderiv(void *_glfuncs, GLuint shader, GLenum pname, GLint* params); -void gl3_1_glGetProgramInfoLog(void *_glfuncs, GLuint program, GLsizei bufSize, GLsizei* length, GLchar* infoLog); -void gl3_1_glGetProgramiv(void *_glfuncs, GLuint program, GLenum pname, GLint* params); -GLint gl3_1_glGetAttribLocation(void *_glfuncs, GLuint program, const GLchar* name); -void gl3_1_glGetAttachedShaders(void *_glfuncs, GLuint program, GLsizei maxCount, GLsizei* count, GLuint* obj); -void gl3_1_glGetActiveUniform(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name); -void gl3_1_glGetActiveAttrib(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name); -void gl3_1_glEnableVertexAttribArray(void *_glfuncs, GLuint index); -void gl3_1_glDisableVertexAttribArray(void *_glfuncs, GLuint index); -void gl3_1_glDetachShader(void *_glfuncs, GLuint program, GLuint shader); -void gl3_1_glDeleteShader(void *_glfuncs, GLuint shader); -void gl3_1_glDeleteProgram(void *_glfuncs, GLuint program); -GLuint gl3_1_glCreateShader(void *_glfuncs, GLenum gltype); -GLuint gl3_1_glCreateProgram(void *_glfuncs); -void gl3_1_glCompileShader(void *_glfuncs, GLuint shader); -void gl3_1_glBindAttribLocation(void *_glfuncs, GLuint program, GLuint index, const GLchar* name); -void gl3_1_glAttachShader(void *_glfuncs, GLuint program, GLuint shader); -void gl3_1_glStencilMaskSeparate(void *_glfuncs, GLenum face, GLuint mask); -void gl3_1_glStencilFuncSeparate(void *_glfuncs, GLenum face, GLenum glfunc, GLint ref, GLuint mask); -void gl3_1_glStencilOpSeparate(void *_glfuncs, GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); -void gl3_1_glDrawBuffers(void *_glfuncs, GLsizei n, const GLenum* bufs); -void gl3_1_glBlendEquationSeparate(void *_glfuncs, GLenum modeRGB, GLenum modeAlpha); -void gl3_1_glUniformMatrix4x3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl3_1_glUniformMatrix3x4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl3_1_glUniformMatrix4x2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl3_1_glUniformMatrix2x4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl3_1_glUniformMatrix3x2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl3_1_glUniformMatrix2x3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -GLboolean gl3_1_glIsVertexArray(void *_glfuncs, GLuint array); -void gl3_1_glGenVertexArrays(void *_glfuncs, GLsizei n, GLuint* arrays); -void gl3_1_glDeleteVertexArrays(void *_glfuncs, GLsizei n, const GLuint* arrays); -void gl3_1_glBindVertexArray(void *_glfuncs, GLuint array); -void gl3_1_glFlushMappedBufferRange(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr length); -void gl3_1_glFramebufferTextureLayer(void *_glfuncs, GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); -void gl3_1_glRenderbufferStorageMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height); -void gl3_1_glBlitFramebuffer(void *_glfuncs, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -void gl3_1_glGenerateMipmap(void *_glfuncs, GLenum target); -void gl3_1_glGetFramebufferAttachmentParameteriv(void *_glfuncs, GLenum target, GLenum attachment, GLenum pname, GLint* params); -void gl3_1_glFramebufferRenderbuffer(void *_glfuncs, GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -void gl3_1_glFramebufferTexture3D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -void gl3_1_glFramebufferTexture2D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -void gl3_1_glFramebufferTexture1D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLenum gl3_1_glCheckFramebufferStatus(void *_glfuncs, GLenum target); -void gl3_1_glGenFramebuffers(void *_glfuncs, GLsizei n, GLuint* framebuffers); -void gl3_1_glDeleteFramebuffers(void *_glfuncs, GLsizei n, const GLuint* framebuffers); -void gl3_1_glBindFramebuffer(void *_glfuncs, GLenum target, GLuint framebuffer); -GLboolean gl3_1_glIsFramebuffer(void *_glfuncs, GLuint framebuffer); -void gl3_1_glGetRenderbufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl3_1_glRenderbufferStorage(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height); -void gl3_1_glGenRenderbuffers(void *_glfuncs, GLsizei n, GLuint* renderbuffers); -void gl3_1_glDeleteRenderbuffers(void *_glfuncs, GLsizei n, const GLuint* renderbuffers); -void gl3_1_glBindRenderbuffer(void *_glfuncs, GLenum target, GLuint renderbuffer); -GLboolean gl3_1_glIsRenderbuffer(void *_glfuncs, GLuint renderbuffer); -void gl3_1_glClearBufferfi(void *_glfuncs, GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); -void gl3_1_glClearBufferfv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLfloat* value); -void gl3_1_glClearBufferuiv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLuint* value); -void gl3_1_glClearBufferiv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLint* value); -void gl3_1_glGetTexParameterIuiv(void *_glfuncs, GLenum target, GLenum pname, GLuint* params); -void gl3_1_glGetTexParameterIiv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl3_1_glTexParameterIuiv(void *_glfuncs, GLenum target, GLenum pname, const GLuint* params); -void gl3_1_glTexParameterIiv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl3_1_glUniform4uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value); -void gl3_1_glUniform3uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value); -void gl3_1_glUniform2uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value); -void gl3_1_glUniform1uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value); -void gl3_1_glUniform4ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -void gl3_1_glUniform3ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1, GLuint v2); -void gl3_1_glUniform2ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1); -void gl3_1_glUniform1ui(void *_glfuncs, GLint location, GLuint v0); -GLint gl3_1_glGetFragDataLocation(void *_glfuncs, GLuint program, const GLchar* name); -void gl3_1_glBindFragDataLocation(void *_glfuncs, GLuint program, GLuint color, const GLchar* name); -void gl3_1_glGetUniformuiv(void *_glfuncs, GLuint program, GLint location, GLuint* params); -void gl3_1_glGetVertexAttribIuiv(void *_glfuncs, GLuint index, GLenum pname, GLuint* params); -void gl3_1_glGetVertexAttribIiv(void *_glfuncs, GLuint index, GLenum pname, GLint* params); -void gl3_1_glVertexAttribIPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl3_1_glEndConditionalRender(void *_glfuncs); -void gl3_1_glBeginConditionalRender(void *_glfuncs, GLuint id, GLenum mode); -void gl3_1_glClampColor(void *_glfuncs, GLenum target, GLenum clamp); -void gl3_1_glGetTransformFeedbackVarying(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* gltype, GLchar* name); -void gl3_1_glBindBufferBase(void *_glfuncs, GLenum target, GLuint index, GLuint buffer); -void gl3_1_glBindBufferRange(void *_glfuncs, GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -void gl3_1_glEndTransformFeedback(void *_glfuncs); -void gl3_1_glBeginTransformFeedback(void *_glfuncs, GLenum primitiveMode); -GLboolean gl3_1_glIsEnabledi(void *_glfuncs, GLenum target, GLuint index); -void gl3_1_glDisablei(void *_glfuncs, GLenum target, GLuint index); -void gl3_1_glEnablei(void *_glfuncs, GLenum target, GLuint index); -void gl3_1_glGetIntegeri_v(void *_glfuncs, GLenum target, GLuint index, GLint* data); -void gl3_1_glGetBooleani_v(void *_glfuncs, GLenum target, GLuint index, GLboolean* data); -void gl3_1_glColorMaski(void *_glfuncs, GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); -void gl3_1_glCopyBufferSubData(void *_glfuncs, GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); -void gl3_1_glUniformBlockBinding(void *_glfuncs, GLuint program, GLuint v0, GLuint v1); -void gl3_1_glGetActiveUniformBlockName(void *_glfuncs, GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformBlockName); -void gl3_1_glGetActiveUniformBlockiv(void *_glfuncs, GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint* params); -GLuint gl3_1_glGetUniformBlockIndex(void *_glfuncs, GLuint program, const GLchar* uniformBlockName); -void gl3_1_glGetActiveUniformName(void *_glfuncs, GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformName); -void gl3_1_glGetActiveUniformsiv(void *_glfuncs, GLuint program, GLsizei uniformCount, const GLuint* uniformIndices, GLenum pname, GLint* params); -void gl3_1_glPrimitiveRestartIndex(void *_glfuncs, GLuint index); -void gl3_1_glTexBuffer(void *_glfuncs, GLenum target, GLenum internalFormat, GLuint buffer); -void gl3_1_glDrawElementsInstanced(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLsizei instancecount); -void gl3_1_glDrawArraysInstanced(void *_glfuncs, GLenum mode, GLint first, GLsizei count, GLsizei instancecount); - - -#ifdef __cplusplus -} // extern "C" -#endif diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/3.1/gl.go b/Godeps/_workspace/src/github.com/obscuren/qml/gl/3.1/gl.go deleted file mode 100644 index 495e07b3cf..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/3.1/gl.go +++ /dev/null @@ -1,4999 +0,0 @@ -// ** file automatically generated by glgen -- do not edit manually ** - -package GL - -// #cgo CXXFLAGS: -std=c++0x -pedantic-errors -Wall -fno-strict-aliasing -// #cgo LDFLAGS: -lstdc++ -// #cgo pkg-config: Qt5Core Qt5OpenGL -// -// #include "funcs.h" -// -// void free(void*); -// -import "C" - -import ( - "fmt" - "reflect" - "unsafe" - - "gopkg.in/qml.v1/gl/glbase" -) - -// API returns a value that offers methods matching the OpenGL version 3.1 API. -// -// The returned API must not be used after the provided OpenGL context becomes invalid. -func API(context glbase.Contexter) *GL { - gl := &GL{} - gl.funcs = C.gl3_1_funcs() - if gl.funcs == nil { - panic(fmt.Errorf("OpenGL version 3.1 is not available")) - } - return gl -} - -// GL implements the OpenGL version 3.1 API. Values of this -// type must be created via the API function, and it must not be used after -// the associated OpenGL context becomes invalid. -type GL struct { - funcs unsafe.Pointer -} - -const ( - FALSE = 0 - TRUE = 1 - NONE = 0 - - BYTE = 0x1400 - UNSIGNED_BYTE = 0x1401 - SHORT = 0x1402 - UNSIGNED_SHORT = 0x1403 - INT = 0x1404 - UNSIGNED_INT = 0x1405 - FLOAT = 0x1406 - N2_BYTES = 0x1407 - N3_BYTES = 0x1408 - N4_BYTES = 0x1409 - DOUBLE = 0x140A - HALF_FLOAT = 0x140B - - ACCUM = 0x0100 - LOAD = 0x0101 - RETURN = 0x0102 - MULT = 0x0103 - ADD = 0x0104 - - ACCUM_BUFFER_BIT = 0x00000200 - ALL_ATTRIB_BITS = 0xFFFFFFFF - COLOR_BUFFER_BIT = 0x00004000 - CURRENT_BIT = 0x00000001 - DEPTH_BUFFER_BIT = 0x00000100 - ENABLE_BIT = 0x00002000 - EVAL_BIT = 0x00010000 - FOG_BIT = 0x00000080 - HINT_BIT = 0x00008000 - LIGHTING_BIT = 0x00000040 - LINE_BIT = 0x00000004 - LIST_BIT = 0x00020000 - MULTISAMPLE_BIT = 0x20000000 - PIXEL_MODE_BIT = 0x00000020 - POINT_BIT = 0x00000002 - POLYGON_BIT = 0x00000008 - POLYGON_STIPPLE_BIT = 0x00000010 - SCISSOR_BIT = 0x00080000 - STENCIL_BUFFER_BIT = 0x00000400 - TEXTURE_BIT = 0x00040000 - TRANSFORM_BIT = 0x00001000 - VIEWPORT_BIT = 0x00000800 - - ALWAYS = 0x0207 - EQUAL = 0x0202 - GEQUAL = 0x0206 - GREATER = 0x0204 - LEQUAL = 0x0203 - LESS = 0x0201 - NEVER = 0x0200 - NOTEQUAL = 0x0205 - - LOGIC_OP = 0x0BF1 - - DST_ALPHA = 0x0304 - ONE = 1 - ONE_MINUS_DST_ALPHA = 0x0305 - ONE_MINUS_SRC_ALPHA = 0x0303 - ONE_MINUS_SRC_COLOR = 0x0301 - SRC_ALPHA = 0x0302 - SRC_COLOR = 0x0300 - ZERO = 0 - - DST_COLOR = 0x0306 - ONE_MINUS_DST_COLOR = 0x0307 - SRC_ALPHA_SATURATE = 0x0308 - - CLIENT_ALL_ATTRIB_BITS = 0xFFFFFFFF - CLIENT_PIXEL_STORE_BIT = 0x00000001 - CLIENT_VERTEX_ARRAY_BIT = 0x00000002 - - CLIP_DISTANCE0 = 0x3000 - CLIP_DISTANCE1 = 0x3001 - CLIP_DISTANCE2 = 0x3002 - CLIP_DISTANCE3 = 0x3003 - CLIP_DISTANCE4 = 0x3004 - CLIP_DISTANCE5 = 0x3005 - CLIP_DISTANCE6 = 0x3006 - CLIP_DISTANCE7 = 0x3007 - CLIP_PLANE0 = 0x3000 - CLIP_PLANE1 = 0x3001 - CLIP_PLANE2 = 0x3002 - CLIP_PLANE3 = 0x3003 - CLIP_PLANE4 = 0x3004 - CLIP_PLANE5 = 0x3005 - - BACK = 0x0405 - FRONT = 0x0404 - FRONT_AND_BACK = 0x0408 - - AMBIENT = 0x1200 - AMBIENT_AND_DIFFUSE = 0x1602 - DIFFUSE = 0x1201 - EMISSION = 0x1600 - SPECULAR = 0x1202 - - CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT = 0x00000001 - - AUX0 = 0x0409 - AUX1 = 0x040A - AUX2 = 0x040B - AUX3 = 0x040C - BACK_LEFT = 0x0402 - BACK_RIGHT = 0x0403 - FRONT_LEFT = 0x0400 - FRONT_RIGHT = 0x0401 - LEFT = 0x0406 - RIGHT = 0x0407 - - ALPHA_TEST = 0x0BC0 - AUTO_NORMAL = 0x0D80 - BLEND = 0x0BE2 - COLOR_ARRAY = 0x8076 - COLOR_LOGIC_OP = 0x0BF2 - COLOR_MATERIAL = 0x0B57 - CULL_FACE = 0x0B44 - DEPTH_TEST = 0x0B71 - DITHER = 0x0BD0 - EDGE_FLAG_ARRAY = 0x8079 - FOG = 0x0B60 - INDEX_ARRAY = 0x8077 - INDEX_LOGIC_OP = 0x0BF1 - LIGHT0 = 0x4000 - LIGHT1 = 0x4001 - LIGHT2 = 0x4002 - LIGHT3 = 0x4003 - LIGHT4 = 0x4004 - LIGHT5 = 0x4005 - LIGHT6 = 0x4006 - LIGHT7 = 0x4007 - LIGHTING = 0x0B50 - LINE_SMOOTH = 0x0B20 - LINE_STIPPLE = 0x0B24 - MAP1_COLOR_4 = 0x0D90 - MAP1_INDEX = 0x0D91 - MAP1_NORMAL = 0x0D92 - MAP1_TEXTURE_COORD_1 = 0x0D93 - MAP1_TEXTURE_COORD_2 = 0x0D94 - MAP1_TEXTURE_COORD_3 = 0x0D95 - MAP1_TEXTURE_COORD_4 = 0x0D96 - MAP1_VERTEX_3 = 0x0D97 - MAP1_VERTEX_4 = 0x0D98 - MAP2_COLOR_4 = 0x0DB0 - MAP2_INDEX = 0x0DB1 - MAP2_NORMAL = 0x0DB2 - MAP2_TEXTURE_COORD_1 = 0x0DB3 - MAP2_TEXTURE_COORD_2 = 0x0DB4 - MAP2_TEXTURE_COORD_3 = 0x0DB5 - MAP2_TEXTURE_COORD_4 = 0x0DB6 - MAP2_VERTEX_3 = 0x0DB7 - MAP2_VERTEX_4 = 0x0DB8 - NORMALIZE = 0x0BA1 - NORMAL_ARRAY = 0x8075 - POINT_SMOOTH = 0x0B10 - POLYGON_OFFSET_FILL = 0x8037 - POLYGON_OFFSET_LINE = 0x2A02 - POLYGON_OFFSET_POINT = 0x2A01 - POLYGON_SMOOTH = 0x0B41 - POLYGON_STIPPLE = 0x0B42 - SCISSOR_TEST = 0x0C11 - STENCIL_TEST = 0x0B90 - TEXTURE_1D = 0x0DE0 - TEXTURE_2D = 0x0DE1 - TEXTURE_COORD_ARRAY = 0x8078 - TEXTURE_GEN_Q = 0x0C63 - TEXTURE_GEN_R = 0x0C62 - TEXTURE_GEN_S = 0x0C60 - TEXTURE_GEN_T = 0x0C61 - VERTEX_ARRAY = 0x8074 - - INVALID_ENUM = 0x0500 - INVALID_FRAMEBUFFER_OPERATION = 0x0506 - INVALID_OPERATION = 0x0502 - INVALID_VALUE = 0x0501 - NO_ERROR = 0 - OUT_OF_MEMORY = 0x0505 - STACK_OVERFLOW = 0x0503 - STACK_UNDERFLOW = 0x0504 - - N2D = 0x0600 - N3D = 0x0601 - N3D_COLOR = 0x0602 - N3D_COLOR_TEXTURE = 0x0603 - N4D_COLOR_TEXTURE = 0x0604 - - BITMAP_TOKEN = 0x0704 - COPY_PIXEL_TOKEN = 0x0706 - DRAW_PIXEL_TOKEN = 0x0705 - LINE_RESET_TOKEN = 0x0707 - LINE_TOKEN = 0x0702 - PASS_THROUGH_TOKEN = 0x0700 - POINT_TOKEN = 0x0701 - POLYGON_TOKEN = 0x0703 - - EXP = 0x0800 - EXP2 = 0x0801 - LINEAR = 0x2601 - - FOG_COLOR = 0x0B66 - FOG_DENSITY = 0x0B62 - FOG_END = 0x0B64 - FOG_INDEX = 0x0B61 - FOG_MODE = 0x0B65 - FOG_START = 0x0B63 - - CCW = 0x0901 - CW = 0x0900 - - COEFF = 0x0A00 - DOMAIN = 0x0A02 - ORDER = 0x0A01 - - PIXEL_MAP_A_TO_A = 0x0C79 - PIXEL_MAP_B_TO_B = 0x0C78 - PIXEL_MAP_G_TO_G = 0x0C77 - PIXEL_MAP_I_TO_A = 0x0C75 - PIXEL_MAP_I_TO_B = 0x0C74 - PIXEL_MAP_I_TO_G = 0x0C73 - PIXEL_MAP_I_TO_I = 0x0C70 - PIXEL_MAP_I_TO_R = 0x0C72 - PIXEL_MAP_R_TO_R = 0x0C76 - PIXEL_MAP_S_TO_S = 0x0C71 - - ACCUM_ALPHA_BITS = 0x0D5B - ACCUM_BLUE_BITS = 0x0D5A - ACCUM_CLEAR_VALUE = 0x0B80 - ACCUM_GREEN_BITS = 0x0D59 - ACCUM_RED_BITS = 0x0D58 - ALIASED_LINE_WIDTH_RANGE = 0x846E - ALIASED_POINT_SIZE_RANGE = 0x846D - ALPHA_BIAS = 0x0D1D - ALPHA_BITS = 0x0D55 - ALPHA_SCALE = 0x0D1C - ALPHA_TEST_FUNC = 0x0BC1 - ALPHA_TEST_REF = 0x0BC2 - ATTRIB_STACK_DEPTH = 0x0BB0 - AUX_BUFFERS = 0x0C00 - BLEND_DST = 0x0BE0 - BLEND_SRC = 0x0BE1 - BLUE_BIAS = 0x0D1B - BLUE_BITS = 0x0D54 - BLUE_SCALE = 0x0D1A - CLIENT_ATTRIB_STACK_DEPTH = 0x0BB1 - COLOR_ARRAY_SIZE = 0x8081 - COLOR_ARRAY_STRIDE = 0x8083 - COLOR_ARRAY_TYPE = 0x8082 - COLOR_CLEAR_VALUE = 0x0C22 - COLOR_MATERIAL_FACE = 0x0B55 - COLOR_MATERIAL_PARAMETER = 0x0B56 - COLOR_WRITEMASK = 0x0C23 - CULL_FACE_MODE = 0x0B45 - CURRENT_COLOR = 0x0B00 - CURRENT_INDEX = 0x0B01 - CURRENT_NORMAL = 0x0B02 - CURRENT_RASTER_COLOR = 0x0B04 - CURRENT_RASTER_DISTANCE = 0x0B09 - CURRENT_RASTER_INDEX = 0x0B05 - CURRENT_RASTER_POSITION = 0x0B07 - CURRENT_RASTER_POSITION_VALID = 0x0B08 - CURRENT_RASTER_TEXTURE_COORDS = 0x0B06 - CURRENT_TEXTURE_COORDS = 0x0B03 - DEPTH_BIAS = 0x0D1F - DEPTH_BITS = 0x0D56 - DEPTH_CLEAR_VALUE = 0x0B73 - DEPTH_FUNC = 0x0B74 - DEPTH_RANGE = 0x0B70 - DEPTH_SCALE = 0x0D1E - DEPTH_WRITEMASK = 0x0B72 - DOUBLEBUFFER = 0x0C32 - DRAW_BUFFER = 0x0C01 - EDGE_FLAG = 0x0B43 - EDGE_FLAG_ARRAY_STRIDE = 0x808C - FEEDBACK_BUFFER_SIZE = 0x0DF1 - FEEDBACK_BUFFER_TYPE = 0x0DF2 - FOG_HINT = 0x0C54 - FRONT_FACE = 0x0B46 - GREEN_BIAS = 0x0D19 - GREEN_BITS = 0x0D53 - GREEN_SCALE = 0x0D18 - INDEX_ARRAY_STRIDE = 0x8086 - INDEX_ARRAY_TYPE = 0x8085 - INDEX_BITS = 0x0D51 - INDEX_CLEAR_VALUE = 0x0C20 - INDEX_MODE = 0x0C30 - INDEX_OFFSET = 0x0D13 - INDEX_SHIFT = 0x0D12 - INDEX_WRITEMASK = 0x0C21 - LIGHT_MODEL_AMBIENT = 0x0B53 - LIGHT_MODEL_COLOR_CONTROL = 0x81F8 - LIGHT_MODEL_LOCAL_VIEWER = 0x0B51 - LIGHT_MODEL_TWO_SIDE = 0x0B52 - LINE_SMOOTH_HINT = 0x0C52 - LINE_STIPPLE_PATTERN = 0x0B25 - LINE_STIPPLE_REPEAT = 0x0B26 - LINE_WIDTH = 0x0B21 - LINE_WIDTH_GRANULARITY = 0x0B23 - LINE_WIDTH_RANGE = 0x0B22 - LIST_BASE = 0x0B32 - LIST_INDEX = 0x0B33 - LIST_MODE = 0x0B30 - LOGIC_OP_MODE = 0x0BF0 - MAP1_GRID_DOMAIN = 0x0DD0 - MAP1_GRID_SEGMENTS = 0x0DD1 - MAP2_GRID_DOMAIN = 0x0DD2 - MAP2_GRID_SEGMENTS = 0x0DD3 - MAP_COLOR = 0x0D10 - MAP_STENCIL = 0x0D11 - MATRIX_MODE = 0x0BA0 - MAX_ATTRIB_STACK_DEPTH = 0x0D35 - MAX_CLIENT_ATTRIB_STACK_DEPTH = 0x0D3B - MAX_CLIP_DISTANCES = 0x0D32 - MAX_CLIP_PLANES = 0x0D32 - MAX_EVAL_ORDER = 0x0D30 - MAX_LIGHTS = 0x0D31 - MAX_LIST_NESTING = 0x0B31 - MAX_MODELVIEW_STACK_DEPTH = 0x0D36 - MAX_NAME_STACK_DEPTH = 0x0D37 - MAX_PIXEL_MAP_TABLE = 0x0D34 - MAX_PROJECTION_STACK_DEPTH = 0x0D38 - MAX_TEXTURE_SIZE = 0x0D33 - MAX_TEXTURE_STACK_DEPTH = 0x0D39 - MAX_VIEWPORT_DIMS = 0x0D3A - MODELVIEW_MATRIX = 0x0BA6 - MODELVIEW_STACK_DEPTH = 0x0BA3 - NAME_STACK_DEPTH = 0x0D70 - NORMAL_ARRAY_STRIDE = 0x807F - NORMAL_ARRAY_TYPE = 0x807E - PACK_ALIGNMENT = 0x0D05 - PACK_LSB_FIRST = 0x0D01 - PACK_ROW_LENGTH = 0x0D02 - PACK_SKIP_PIXELS = 0x0D04 - PACK_SKIP_ROWS = 0x0D03 - PACK_SWAP_BYTES = 0x0D00 - PERSPECTIVE_CORRECTION_HINT = 0x0C50 - PIXEL_MAP_A_TO_A_SIZE = 0x0CB9 - PIXEL_MAP_B_TO_B_SIZE = 0x0CB8 - PIXEL_MAP_G_TO_G_SIZE = 0x0CB7 - PIXEL_MAP_I_TO_A_SIZE = 0x0CB5 - PIXEL_MAP_I_TO_B_SIZE = 0x0CB4 - PIXEL_MAP_I_TO_G_SIZE = 0x0CB3 - PIXEL_MAP_I_TO_I_SIZE = 0x0CB0 - PIXEL_MAP_I_TO_R_SIZE = 0x0CB2 - PIXEL_MAP_R_TO_R_SIZE = 0x0CB6 - PIXEL_MAP_S_TO_S_SIZE = 0x0CB1 - POINT_SIZE = 0x0B11 - POINT_SIZE_GRANULARITY = 0x0B13 - POINT_SIZE_RANGE = 0x0B12 - POINT_SMOOTH_HINT = 0x0C51 - POLYGON_MODE = 0x0B40 - POLYGON_OFFSET_FACTOR = 0x8038 - POLYGON_OFFSET_UNITS = 0x2A00 - POLYGON_SMOOTH_HINT = 0x0C53 - PROJECTION_MATRIX = 0x0BA7 - PROJECTION_STACK_DEPTH = 0x0BA4 - READ_BUFFER = 0x0C02 - RED_BIAS = 0x0D15 - RED_BITS = 0x0D52 - RED_SCALE = 0x0D14 - RENDER_MODE = 0x0C40 - RGBA_MODE = 0x0C31 - SCISSOR_BOX = 0x0C10 - SELECTION_BUFFER_SIZE = 0x0DF4 - SHADE_MODEL = 0x0B54 - SMOOTH_LINE_WIDTH_GRANULARITY = 0x0B23 - SMOOTH_LINE_WIDTH_RANGE = 0x0B22 - SMOOTH_POINT_SIZE_GRANULARITY = 0x0B13 - SMOOTH_POINT_SIZE_RANGE = 0x0B12 - STENCIL_BITS = 0x0D57 - STENCIL_CLEAR_VALUE = 0x0B91 - STENCIL_FAIL = 0x0B94 - STENCIL_FUNC = 0x0B92 - STENCIL_PASS_DEPTH_FAIL = 0x0B95 - STENCIL_PASS_DEPTH_PASS = 0x0B96 - STENCIL_REF = 0x0B97 - STENCIL_VALUE_MASK = 0x0B93 - STENCIL_WRITEMASK = 0x0B98 - STEREO = 0x0C33 - SUBPIXEL_BITS = 0x0D50 - TEXTURE_BINDING_1D = 0x8068 - TEXTURE_BINDING_2D = 0x8069 - TEXTURE_BINDING_3D = 0x806A - TEXTURE_COORD_ARRAY_SIZE = 0x8088 - TEXTURE_COORD_ARRAY_STRIDE = 0x808A - TEXTURE_COORD_ARRAY_TYPE = 0x8089 - TEXTURE_MATRIX = 0x0BA8 - TEXTURE_STACK_DEPTH = 0x0BA5 - UNPACK_ALIGNMENT = 0x0CF5 - UNPACK_LSB_FIRST = 0x0CF1 - UNPACK_ROW_LENGTH = 0x0CF2 - UNPACK_SKIP_PIXELS = 0x0CF4 - UNPACK_SKIP_ROWS = 0x0CF3 - UNPACK_SWAP_BYTES = 0x0CF0 - VERTEX_ARRAY_SIZE = 0x807A - VERTEX_ARRAY_STRIDE = 0x807C - VERTEX_ARRAY_TYPE = 0x807B - VIEWPORT = 0x0BA2 - ZOOM_X = 0x0D16 - ZOOM_Y = 0x0D17 - - COLOR_ARRAY_POINTER = 0x8090 - EDGE_FLAG_ARRAY_POINTER = 0x8093 - FEEDBACK_BUFFER_POINTER = 0x0DF0 - INDEX_ARRAY_POINTER = 0x8091 - NORMAL_ARRAY_POINTER = 0x808F - SELECTION_BUFFER_POINTER = 0x0DF3 - TEXTURE_COORD_ARRAY_POINTER = 0x8092 - VERTEX_ARRAY_POINTER = 0x808E - - TEXTURE_ALPHA_SIZE = 0x805F - TEXTURE_BLUE_SIZE = 0x805E - TEXTURE_BORDER = 0x1005 - TEXTURE_BORDER_COLOR = 0x1004 - TEXTURE_COMPONENTS = 0x1003 - TEXTURE_GREEN_SIZE = 0x805D - TEXTURE_HEIGHT = 0x1001 - TEXTURE_INTENSITY_SIZE = 0x8061 - TEXTURE_INTERNAL_FORMAT = 0x1003 - TEXTURE_LUMINANCE_SIZE = 0x8060 - TEXTURE_MAG_FILTER = 0x2800 - TEXTURE_MIN_FILTER = 0x2801 - TEXTURE_PRIORITY = 0x8066 - TEXTURE_RED_SIZE = 0x805C - TEXTURE_RESIDENT = 0x8067 - TEXTURE_WIDTH = 0x1000 - TEXTURE_WRAP_S = 0x2802 - TEXTURE_WRAP_T = 0x2803 - - DONT_CARE = 0x1100 - FASTEST = 0x1101 - NICEST = 0x1102 - - FRAGMENT_SHADER_DERIVATIVE_HINT = 0x8B8B - GENERATE_MIPMAP_HINT = 0x8192 - TEXTURE_COMPRESSION_HINT = 0x84EF - - C3F_V3F = 0x2A24 - C4F_N3F_V3F = 0x2A26 - C4UB_V2F = 0x2A22 - C4UB_V3F = 0x2A23 - N3F_V3F = 0x2A25 - T2F_C3F_V3F = 0x2A2A - T2F_C4F_N3F_V3F = 0x2A2C - T2F_C4UB_V3F = 0x2A29 - T2F_N3F_V3F = 0x2A2B - T2F_V3F = 0x2A27 - T4F_C4F_N3F_V4F = 0x2A2D - T4F_V4F = 0x2A28 - V2F = 0x2A20 - V3F = 0x2A21 - - MODULATE = 0x2100 - REPLACE = 0x1E01 - - SEPARATE_SPECULAR_COLOR = 0x81FA - SINGLE_COLOR = 0x81F9 - - CONSTANT_ATTENUATION = 0x1207 - LINEAR_ATTENUATION = 0x1208 - POSITION = 0x1203 - QUADRATIC_ATTENUATION = 0x1209 - SPOT_CUTOFF = 0x1206 - SPOT_DIRECTION = 0x1204 - SPOT_EXPONENT = 0x1205 - - COMPILE = 0x1300 - COMPILE_AND_EXECUTE = 0x1301 - - AND = 0x1501 - AND_INVERTED = 0x1504 - AND_REVERSE = 0x1502 - CLEAR = 0x1500 - COPY = 0x1503 - COPY_INVERTED = 0x150C - EQUIV = 0x1509 - INVERT = 0x150A - NAND = 0x150E - NOOP = 0x1505 - NOR = 0x1508 - OR = 0x1507 - OR_INVERTED = 0x150D - OR_REVERSE = 0x150B - SET = 0x150F - XOR = 0x1506 - - MAP_FLUSH_EXPLICIT_BIT = 0x0010 - MAP_INVALIDATE_BUFFER_BIT = 0x0008 - MAP_INVALIDATE_RANGE_BIT = 0x0004 - MAP_READ_BIT = 0x0001 - MAP_UNSYNCHRONIZED_BIT = 0x0020 - MAP_WRITE_BIT = 0x0002 - - COLOR_INDEXES = 0x1603 - SHININESS = 0x1601 - - MODELVIEW = 0x1700 - PROJECTION = 0x1701 - TEXTURE = 0x1702 - - LINE = 0x1B01 - POINT = 0x1B00 - - FILL = 0x1B02 - - COLOR = 0x1800 - DEPTH = 0x1801 - STENCIL = 0x1802 - - ALPHA = 0x1906 - BLUE = 0x1905 - COLOR_INDEX = 0x1900 - DEPTH_COMPONENT = 0x1902 - GREEN = 0x1904 - LUMINANCE = 0x1909 - LUMINANCE_ALPHA = 0x190A - RED = 0x1903 - RGB = 0x1907 - RGBA = 0x1908 - STENCIL_INDEX = 0x1901 - - ALPHA12 = 0x803D - ALPHA16 = 0x803E - ALPHA4 = 0x803B - ALPHA8 = 0x803C - INTENSITY = 0x8049 - INTENSITY12 = 0x804C - INTENSITY16 = 0x804D - INTENSITY4 = 0x804A - INTENSITY8 = 0x804B - LUMINANCE12 = 0x8041 - LUMINANCE12_ALPHA12 = 0x8047 - LUMINANCE12_ALPHA4 = 0x8046 - LUMINANCE16 = 0x8042 - LUMINANCE16_ALPHA16 = 0x8048 - LUMINANCE4 = 0x803F - LUMINANCE4_ALPHA4 = 0x8043 - LUMINANCE6_ALPHA2 = 0x8044 - LUMINANCE8 = 0x8040 - LUMINANCE8_ALPHA8 = 0x8045 - R3_G3_B2 = 0x2A10 - RGB10 = 0x8052 - RGB10_A2 = 0x8059 - RGB12 = 0x8053 - RGB16 = 0x8054 - RGB4 = 0x804F - RGB5 = 0x8050 - RGB5_A1 = 0x8057 - RGB8 = 0x8051 - RGBA12 = 0x805A - RGBA16 = 0x805B - RGBA2 = 0x8055 - RGBA4 = 0x8056 - RGBA8 = 0x8058 - - PACK_IMAGE_HEIGHT = 0x806C - PACK_SKIP_IMAGES = 0x806B - UNPACK_IMAGE_HEIGHT = 0x806E - UNPACK_SKIP_IMAGES = 0x806D - - BITMAP = 0x1A00 - UNSIGNED_BYTE_3_3_2 = 0x8032 - UNSIGNED_INT_10_10_10_2 = 0x8036 - UNSIGNED_INT_8_8_8_8 = 0x8035 - UNSIGNED_SHORT_4_4_4_4 = 0x8033 - UNSIGNED_SHORT_5_5_5_1 = 0x8034 - - POINT_DISTANCE_ATTENUATION = 0x8129 - POINT_FADE_THRESHOLD_SIZE = 0x8128 - POINT_SIZE_MAX = 0x8127 - POINT_SIZE_MIN = 0x8126 - - LINES = 0x0001 - LINE_LOOP = 0x0002 - LINE_STRIP = 0x0003 - POINTS = 0x0000 - POLYGON = 0x0009 - QUADS = 0x0007 - QUAD_STRIP = 0x0008 - TRIANGLES = 0x0004 - TRIANGLE_FAN = 0x0006 - TRIANGLE_STRIP = 0x0005 - - FEEDBACK = 0x1C01 - RENDER = 0x1C00 - SELECT = 0x1C02 - - FLAT = 0x1D00 - SMOOTH = 0x1D01 - - DECR = 0x1E03 - INCR = 0x1E02 - KEEP = 0x1E00 - - EXTENSIONS = 0x1F03 - RENDERER = 0x1F01 - VENDOR = 0x1F00 - VERSION = 0x1F02 - - S = 0x2000 - T = 0x2001 - R = 0x2002 - Q = 0x2003 - - DECAL = 0x2101 - - TEXTURE_ENV_COLOR = 0x2201 - TEXTURE_ENV_MODE = 0x2200 - - TEXTURE_ENV = 0x2300 - - EYE_LINEAR = 0x2400 - OBJECT_LINEAR = 0x2401 - SPHERE_MAP = 0x2402 - - EYE_PLANE = 0x2502 - OBJECT_PLANE = 0x2501 - TEXTURE_GEN_MODE = 0x2500 - - NEAREST = 0x2600 - - LINEAR_MIPMAP_LINEAR = 0x2703 - LINEAR_MIPMAP_NEAREST = 0x2701 - NEAREST_MIPMAP_LINEAR = 0x2702 - NEAREST_MIPMAP_NEAREST = 0x2700 - - GENERATE_MIPMAP = 0x8191 - TEXTURE_WRAP_R = 0x8072 - - PROXY_TEXTURE_1D = 0x8063 - PROXY_TEXTURE_2D = 0x8064 - PROXY_TEXTURE_3D = 0x8070 - TEXTURE_3D = 0x806F - TEXTURE_BASE_LEVEL = 0x813C - TEXTURE_MAX_LEVEL = 0x813D - TEXTURE_MAX_LOD = 0x813B - TEXTURE_MIN_LOD = 0x813A - - CLAMP = 0x2900 - CLAMP_TO_BORDER = 0x812D - CLAMP_TO_EDGE = 0x812F - REPEAT = 0x2901 - - INVALID_INDEX = 0xFFFFFFFF - CONSTANT_COLOR = 0x8001 - ONE_MINUS_CONSTANT_COLOR = 0x8002 - CONSTANT_ALPHA = 0x8003 - ONE_MINUS_CONSTANT_ALPHA = 0x8004 - FUNC_ADD = 0x8006 - MIN = 0x8007 - MAX = 0x8008 - BLEND_EQUATION_RGB = 0x8009 - FUNC_SUBTRACT = 0x800A - FUNC_REVERSE_SUBTRACT = 0x800B - RESCALE_NORMAL = 0x803A - TEXTURE_DEPTH = 0x8071 - MAX_3D_TEXTURE_SIZE = 0x8073 - MULTISAMPLE = 0x809D - SAMPLE_ALPHA_TO_COVERAGE = 0x809E - SAMPLE_ALPHA_TO_ONE = 0x809F - SAMPLE_COVERAGE = 0x80A0 - SAMPLE_BUFFERS = 0x80A8 - SAMPLES = 0x80A9 - SAMPLE_COVERAGE_VALUE = 0x80AA - SAMPLE_COVERAGE_INVERT = 0x80AB - BLEND_DST_RGB = 0x80C8 - BLEND_SRC_RGB = 0x80C9 - BLEND_DST_ALPHA = 0x80CA - BLEND_SRC_ALPHA = 0x80CB - BGR = 0x80E0 - BGRA = 0x80E1 - MAX_ELEMENTS_VERTICES = 0x80E8 - MAX_ELEMENTS_INDICES = 0x80E9 - DEPTH_COMPONENT16 = 0x81A5 - DEPTH_COMPONENT24 = 0x81A6 - DEPTH_COMPONENT32 = 0x81A7 - FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING = 0x8210 - FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE = 0x8211 - FRAMEBUFFER_ATTACHMENT_RED_SIZE = 0x8212 - FRAMEBUFFER_ATTACHMENT_GREEN_SIZE = 0x8213 - FRAMEBUFFER_ATTACHMENT_BLUE_SIZE = 0x8214 - FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE = 0x8215 - FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE = 0x8216 - FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE = 0x8217 - FRAMEBUFFER_DEFAULT = 0x8218 - FRAMEBUFFER_UNDEFINED = 0x8219 - DEPTH_STENCIL_ATTACHMENT = 0x821A - MAJOR_VERSION = 0x821B - MINOR_VERSION = 0x821C - NUM_EXTENSIONS = 0x821D - CONTEXT_FLAGS = 0x821E - COMPRESSED_RED = 0x8225 - COMPRESSED_RG = 0x8226 - RG = 0x8227 - RG_INTEGER = 0x8228 - R8 = 0x8229 - R16 = 0x822A - RG8 = 0x822B - RG16 = 0x822C - R16F = 0x822D - R32F = 0x822E - RG16F = 0x822F - RG32F = 0x8230 - R8I = 0x8231 - R8UI = 0x8232 - R16I = 0x8233 - R16UI = 0x8234 - R32I = 0x8235 - R32UI = 0x8236 - RG8I = 0x8237 - RG8UI = 0x8238 - RG16I = 0x8239 - RG16UI = 0x823A - RG32I = 0x823B - RG32UI = 0x823C - UNSIGNED_BYTE_2_3_3_REV = 0x8362 - UNSIGNED_SHORT_5_6_5 = 0x8363 - UNSIGNED_SHORT_5_6_5_REV = 0x8364 - UNSIGNED_SHORT_4_4_4_4_REV = 0x8365 - UNSIGNED_SHORT_1_5_5_5_REV = 0x8366 - UNSIGNED_INT_8_8_8_8_REV = 0x8367 - UNSIGNED_INT_2_10_10_10_REV = 0x8368 - MIRRORED_REPEAT = 0x8370 - FOG_COORDINATE_SOURCE = 0x8450 - FOG_COORD_SRC = 0x8450 - FOG_COORDINATE = 0x8451 - FOG_COORD = 0x8451 - FRAGMENT_DEPTH = 0x8452 - CURRENT_FOG_COORDINATE = 0x8453 - CURRENT_FOG_COORD = 0x8453 - FOG_COORDINATE_ARRAY_TYPE = 0x8454 - FOG_COORD_ARRAY_TYPE = 0x8454 - FOG_COORDINATE_ARRAY_STRIDE = 0x8455 - FOG_COORD_ARRAY_STRIDE = 0x8455 - FOG_COORDINATE_ARRAY_POINTER = 0x8456 - FOG_COORD_ARRAY_POINTER = 0x8456 - FOG_COORDINATE_ARRAY = 0x8457 - FOG_COORD_ARRAY = 0x8457 - COLOR_SUM = 0x8458 - CURRENT_SECONDARY_COLOR = 0x8459 - SECONDARY_COLOR_ARRAY_SIZE = 0x845A - SECONDARY_COLOR_ARRAY_TYPE = 0x845B - SECONDARY_COLOR_ARRAY_STRIDE = 0x845C - SECONDARY_COLOR_ARRAY_POINTER = 0x845D - SECONDARY_COLOR_ARRAY = 0x845E - CURRENT_RASTER_SECONDARY_COLOR = 0x845F - TEXTURE0 = 0x84C0 - TEXTURE1 = 0x84C1 - TEXTURE2 = 0x84C2 - TEXTURE3 = 0x84C3 - TEXTURE4 = 0x84C4 - TEXTURE5 = 0x84C5 - TEXTURE6 = 0x84C6 - TEXTURE7 = 0x84C7 - TEXTURE8 = 0x84C8 - TEXTURE9 = 0x84C9 - TEXTURE10 = 0x84CA - TEXTURE11 = 0x84CB - TEXTURE12 = 0x84CC - TEXTURE13 = 0x84CD - TEXTURE14 = 0x84CE - TEXTURE15 = 0x84CF - TEXTURE16 = 0x84D0 - TEXTURE17 = 0x84D1 - TEXTURE18 = 0x84D2 - TEXTURE19 = 0x84D3 - TEXTURE20 = 0x84D4 - TEXTURE21 = 0x84D5 - TEXTURE22 = 0x84D6 - TEXTURE23 = 0x84D7 - TEXTURE24 = 0x84D8 - TEXTURE25 = 0x84D9 - TEXTURE26 = 0x84DA - TEXTURE27 = 0x84DB - TEXTURE28 = 0x84DC - TEXTURE29 = 0x84DD - TEXTURE30 = 0x84DE - TEXTURE31 = 0x84DF - ACTIVE_TEXTURE = 0x84E0 - CLIENT_ACTIVE_TEXTURE = 0x84E1 - MAX_TEXTURE_UNITS = 0x84E2 - TRANSPOSE_MODELVIEW_MATRIX = 0x84E3 - TRANSPOSE_PROJECTION_MATRIX = 0x84E4 - TRANSPOSE_TEXTURE_MATRIX = 0x84E5 - TRANSPOSE_COLOR_MATRIX = 0x84E6 - SUBTRACT = 0x84E7 - MAX_RENDERBUFFER_SIZE = 0x84E8 - COMPRESSED_ALPHA = 0x84E9 - COMPRESSED_LUMINANCE = 0x84EA - COMPRESSED_LUMINANCE_ALPHA = 0x84EB - COMPRESSED_INTENSITY = 0x84EC - COMPRESSED_RGB = 0x84ED - COMPRESSED_RGBA = 0x84EE - TEXTURE_RECTANGLE = 0x84F5 - TEXTURE_BINDING_RECTANGLE = 0x84F6 - PROXY_TEXTURE_RECTANGLE = 0x84F7 - MAX_RECTANGLE_TEXTURE_SIZE = 0x84F8 - DEPTH_STENCIL = 0x84F9 - UNSIGNED_INT_24_8 = 0x84FA - MAX_TEXTURE_LOD_BIAS = 0x84FD - TEXTURE_FILTER_CONTROL = 0x8500 - TEXTURE_LOD_BIAS = 0x8501 - INCR_WRAP = 0x8507 - DECR_WRAP = 0x8508 - NORMAL_MAP = 0x8511 - REFLECTION_MAP = 0x8512 - TEXTURE_CUBE_MAP = 0x8513 - TEXTURE_BINDING_CUBE_MAP = 0x8514 - TEXTURE_CUBE_MAP_POSITIVE_X = 0x8515 - TEXTURE_CUBE_MAP_NEGATIVE_X = 0x8516 - TEXTURE_CUBE_MAP_POSITIVE_Y = 0x8517 - TEXTURE_CUBE_MAP_NEGATIVE_Y = 0x8518 - TEXTURE_CUBE_MAP_POSITIVE_Z = 0x8519 - TEXTURE_CUBE_MAP_NEGATIVE_Z = 0x851A - PROXY_TEXTURE_CUBE_MAP = 0x851B - MAX_CUBE_MAP_TEXTURE_SIZE = 0x851C - COMBINE = 0x8570 - COMBINE_RGB = 0x8571 - COMBINE_ALPHA = 0x8572 - RGB_SCALE = 0x8573 - ADD_SIGNED = 0x8574 - INTERPOLATE = 0x8575 - CONSTANT = 0x8576 - PRIMARY_COLOR = 0x8577 - PREVIOUS = 0x8578 - SOURCE0_RGB = 0x8580 - SRC0_RGB = 0x8580 - SOURCE1_RGB = 0x8581 - SRC1_RGB = 0x8581 - SOURCE2_RGB = 0x8582 - SRC2_RGB = 0x8582 - SOURCE0_ALPHA = 0x8588 - SRC0_ALPHA = 0x8588 - SOURCE1_ALPHA = 0x8589 - SRC1_ALPHA = 0x8589 - SOURCE2_ALPHA = 0x858A - SRC2_ALPHA = 0x858A - OPERAND0_RGB = 0x8590 - OPERAND1_RGB = 0x8591 - OPERAND2_RGB = 0x8592 - OPERAND0_ALPHA = 0x8598 - OPERAND1_ALPHA = 0x8599 - OPERAND2_ALPHA = 0x859A - VERTEX_ARRAY_BINDING = 0x85B5 - VERTEX_ATTRIB_ARRAY_ENABLED = 0x8622 - VERTEX_ATTRIB_ARRAY_SIZE = 0x8623 - VERTEX_ATTRIB_ARRAY_STRIDE = 0x8624 - VERTEX_ATTRIB_ARRAY_TYPE = 0x8625 - CURRENT_VERTEX_ATTRIB = 0x8626 - VERTEX_PROGRAM_POINT_SIZE = 0x8642 - VERTEX_PROGRAM_TWO_SIDE = 0x8643 - VERTEX_ATTRIB_ARRAY_POINTER = 0x8645 - TEXTURE_COMPRESSED_IMAGE_SIZE = 0x86A0 - TEXTURE_COMPRESSED = 0x86A1 - NUM_COMPRESSED_TEXTURE_FORMATS = 0x86A2 - COMPRESSED_TEXTURE_FORMATS = 0x86A3 - DOT3_RGB = 0x86AE - DOT3_RGBA = 0x86AF - BUFFER_SIZE = 0x8764 - BUFFER_USAGE = 0x8765 - STENCIL_BACK_FUNC = 0x8800 - STENCIL_BACK_FAIL = 0x8801 - STENCIL_BACK_PASS_DEPTH_FAIL = 0x8802 - STENCIL_BACK_PASS_DEPTH_PASS = 0x8803 - RGBA32F = 0x8814 - RGB32F = 0x8815 - RGBA16F = 0x881A - RGB16F = 0x881B - MAX_DRAW_BUFFERS = 0x8824 - DRAW_BUFFER0 = 0x8825 - DRAW_BUFFER1 = 0x8826 - DRAW_BUFFER2 = 0x8827 - DRAW_BUFFER3 = 0x8828 - DRAW_BUFFER4 = 0x8829 - DRAW_BUFFER5 = 0x882A - DRAW_BUFFER6 = 0x882B - DRAW_BUFFER7 = 0x882C - DRAW_BUFFER8 = 0x882D - DRAW_BUFFER9 = 0x882E - DRAW_BUFFER10 = 0x882F - DRAW_BUFFER11 = 0x8830 - DRAW_BUFFER12 = 0x8831 - DRAW_BUFFER13 = 0x8832 - DRAW_BUFFER14 = 0x8833 - DRAW_BUFFER15 = 0x8834 - BLEND_EQUATION_ALPHA = 0x883D - TEXTURE_DEPTH_SIZE = 0x884A - DEPTH_TEXTURE_MODE = 0x884B - TEXTURE_COMPARE_MODE = 0x884C - TEXTURE_COMPARE_FUNC = 0x884D - COMPARE_R_TO_TEXTURE = 0x884E - COMPARE_REF_TO_TEXTURE = 0x884E - POINT_SPRITE = 0x8861 - COORD_REPLACE = 0x8862 - QUERY_COUNTER_BITS = 0x8864 - CURRENT_QUERY = 0x8865 - QUERY_RESULT = 0x8866 - QUERY_RESULT_AVAILABLE = 0x8867 - MAX_VERTEX_ATTRIBS = 0x8869 - VERTEX_ATTRIB_ARRAY_NORMALIZED = 0x886A - MAX_TEXTURE_COORDS = 0x8871 - MAX_TEXTURE_IMAGE_UNITS = 0x8872 - ARRAY_BUFFER = 0x8892 - ELEMENT_ARRAY_BUFFER = 0x8893 - ARRAY_BUFFER_BINDING = 0x8894 - ELEMENT_ARRAY_BUFFER_BINDING = 0x8895 - VERTEX_ARRAY_BUFFER_BINDING = 0x8896 - NORMAL_ARRAY_BUFFER_BINDING = 0x8897 - COLOR_ARRAY_BUFFER_BINDING = 0x8898 - INDEX_ARRAY_BUFFER_BINDING = 0x8899 - TEXTURE_COORD_ARRAY_BUFFER_BINDING = 0x889A - EDGE_FLAG_ARRAY_BUFFER_BINDING = 0x889B - SECONDARY_COLOR_ARRAY_BUFFER_BINDING = 0x889C - FOG_COORDINATE_ARRAY_BUFFER_BINDING = 0x889D - FOG_COORD_ARRAY_BUFFER_BINDING = 0x889D - WEIGHT_ARRAY_BUFFER_BINDING = 0x889E - VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = 0x889F - READ_ONLY = 0x88B8 - WRITE_ONLY = 0x88B9 - READ_WRITE = 0x88BA - BUFFER_ACCESS = 0x88BB - BUFFER_MAPPED = 0x88BC - BUFFER_MAP_POINTER = 0x88BD - STREAM_DRAW = 0x88E0 - STREAM_READ = 0x88E1 - STREAM_COPY = 0x88E2 - STATIC_DRAW = 0x88E4 - STATIC_READ = 0x88E5 - STATIC_COPY = 0x88E6 - DYNAMIC_DRAW = 0x88E8 - DYNAMIC_READ = 0x88E9 - DYNAMIC_COPY = 0x88EA - PIXEL_PACK_BUFFER = 0x88EB - PIXEL_UNPACK_BUFFER = 0x88EC - PIXEL_PACK_BUFFER_BINDING = 0x88ED - PIXEL_UNPACK_BUFFER_BINDING = 0x88EF - DEPTH24_STENCIL8 = 0x88F0 - TEXTURE_STENCIL_SIZE = 0x88F1 - VERTEX_ATTRIB_ARRAY_INTEGER = 0x88FD - MAX_ARRAY_TEXTURE_LAYERS = 0x88FF - MIN_PROGRAM_TEXEL_OFFSET = 0x8904 - MAX_PROGRAM_TEXEL_OFFSET = 0x8905 - SAMPLES_PASSED = 0x8914 - CLAMP_VERTEX_COLOR = 0x891A - CLAMP_FRAGMENT_COLOR = 0x891B - CLAMP_READ_COLOR = 0x891C - FIXED_ONLY = 0x891D - UNIFORM_BUFFER = 0x8A11 - UNIFORM_BUFFER_BINDING = 0x8A28 - UNIFORM_BUFFER_START = 0x8A29 - UNIFORM_BUFFER_SIZE = 0x8A2A - MAX_VERTEX_UNIFORM_BLOCKS = 0x8A2B - MAX_GEOMETRY_UNIFORM_BLOCKS = 0x8A2C - MAX_FRAGMENT_UNIFORM_BLOCKS = 0x8A2D - MAX_COMBINED_UNIFORM_BLOCKS = 0x8A2E - MAX_UNIFORM_BUFFER_BINDINGS = 0x8A2F - MAX_UNIFORM_BLOCK_SIZE = 0x8A30 - MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS = 0x8A31 - MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS = 0x8A32 - MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS = 0x8A33 - UNIFORM_BUFFER_OFFSET_ALIGNMENT = 0x8A34 - ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH = 0x8A35 - ACTIVE_UNIFORM_BLOCKS = 0x8A36 - UNIFORM_TYPE = 0x8A37 - UNIFORM_SIZE = 0x8A38 - UNIFORM_NAME_LENGTH = 0x8A39 - UNIFORM_BLOCK_INDEX = 0x8A3A - UNIFORM_OFFSET = 0x8A3B - UNIFORM_ARRAY_STRIDE = 0x8A3C - UNIFORM_MATRIX_STRIDE = 0x8A3D - UNIFORM_IS_ROW_MAJOR = 0x8A3E - UNIFORM_BLOCK_BINDING = 0x8A3F - UNIFORM_BLOCK_DATA_SIZE = 0x8A40 - UNIFORM_BLOCK_NAME_LENGTH = 0x8A41 - UNIFORM_BLOCK_ACTIVE_UNIFORMS = 0x8A42 - UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES = 0x8A43 - UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER = 0x8A44 - UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER = 0x8A45 - UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER = 0x8A46 - FRAGMENT_SHADER = 0x8B30 - VERTEX_SHADER = 0x8B31 - MAX_FRAGMENT_UNIFORM_COMPONENTS = 0x8B49 - MAX_VERTEX_UNIFORM_COMPONENTS = 0x8B4A - MAX_VARYING_FLOATS = 0x8B4B - MAX_VARYING_COMPONENTS = 0x8B4B - MAX_VERTEX_TEXTURE_IMAGE_UNITS = 0x8B4C - MAX_COMBINED_TEXTURE_IMAGE_UNITS = 0x8B4D - SHADER_TYPE = 0x8B4F - FLOAT_VEC2 = 0x8B50 - FLOAT_VEC3 = 0x8B51 - FLOAT_VEC4 = 0x8B52 - INT_VEC2 = 0x8B53 - INT_VEC3 = 0x8B54 - INT_VEC4 = 0x8B55 - BOOL = 0x8B56 - BOOL_VEC2 = 0x8B57 - BOOL_VEC3 = 0x8B58 - BOOL_VEC4 = 0x8B59 - FLOAT_MAT2 = 0x8B5A - FLOAT_MAT3 = 0x8B5B - FLOAT_MAT4 = 0x8B5C - SAMPLER_1D = 0x8B5D - SAMPLER_2D = 0x8B5E - SAMPLER_3D = 0x8B5F - SAMPLER_CUBE = 0x8B60 - SAMPLER_1D_SHADOW = 0x8B61 - SAMPLER_2D_SHADOW = 0x8B62 - SAMPLER_2D_RECT = 0x8B63 - SAMPLER_2D_RECT_SHADOW = 0x8B64 - FLOAT_MAT2x3 = 0x8B65 - FLOAT_MAT2x4 = 0x8B66 - FLOAT_MAT3x2 = 0x8B67 - FLOAT_MAT3x4 = 0x8B68 - FLOAT_MAT4x2 = 0x8B69 - FLOAT_MAT4x3 = 0x8B6A - DELETE_STATUS = 0x8B80 - COMPILE_STATUS = 0x8B81 - LINK_STATUS = 0x8B82 - VALIDATE_STATUS = 0x8B83 - INFO_LOG_LENGTH = 0x8B84 - ATTACHED_SHADERS = 0x8B85 - ACTIVE_UNIFORMS = 0x8B86 - ACTIVE_UNIFORM_MAX_LENGTH = 0x8B87 - SHADER_SOURCE_LENGTH = 0x8B88 - ACTIVE_ATTRIBUTES = 0x8B89 - ACTIVE_ATTRIBUTE_MAX_LENGTH = 0x8B8A - SHADING_LANGUAGE_VERSION = 0x8B8C - CURRENT_PROGRAM = 0x8B8D - TEXTURE_RED_TYPE = 0x8C10 - TEXTURE_GREEN_TYPE = 0x8C11 - TEXTURE_BLUE_TYPE = 0x8C12 - TEXTURE_ALPHA_TYPE = 0x8C13 - TEXTURE_DEPTH_TYPE = 0x8C16 - UNSIGNED_NORMALIZED = 0x8C17 - TEXTURE_1D_ARRAY = 0x8C18 - PROXY_TEXTURE_1D_ARRAY = 0x8C19 - TEXTURE_2D_ARRAY = 0x8C1A - PROXY_TEXTURE_2D_ARRAY = 0x8C1B - TEXTURE_BINDING_1D_ARRAY = 0x8C1C - TEXTURE_BINDING_2D_ARRAY = 0x8C1D - TEXTURE_BUFFER = 0x8C2A - MAX_TEXTURE_BUFFER_SIZE = 0x8C2B - TEXTURE_BINDING_BUFFER = 0x8C2C - TEXTURE_BUFFER_DATA_STORE_BINDING = 0x8C2D - R11F_G11F_B10F = 0x8C3A - UNSIGNED_INT_10F_11F_11F_REV = 0x8C3B - RGB9_E5 = 0x8C3D - UNSIGNED_INT_5_9_9_9_REV = 0x8C3E - TEXTURE_SHARED_SIZE = 0x8C3F - SRGB = 0x8C40 - SRGB8 = 0x8C41 - SRGB_ALPHA = 0x8C42 - SRGB8_ALPHA8 = 0x8C43 - SLUMINANCE_ALPHA = 0x8C44 - SLUMINANCE8_ALPHA8 = 0x8C45 - SLUMINANCE = 0x8C46 - SLUMINANCE8 = 0x8C47 - COMPRESSED_SRGB = 0x8C48 - COMPRESSED_SRGB_ALPHA = 0x8C49 - COMPRESSED_SLUMINANCE = 0x8C4A - COMPRESSED_SLUMINANCE_ALPHA = 0x8C4B - TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH = 0x8C76 - TRANSFORM_FEEDBACK_BUFFER_MODE = 0x8C7F - MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS = 0x8C80 - TRANSFORM_FEEDBACK_VARYINGS = 0x8C83 - TRANSFORM_FEEDBACK_BUFFER_START = 0x8C84 - TRANSFORM_FEEDBACK_BUFFER_SIZE = 0x8C85 - PRIMITIVES_GENERATED = 0x8C87 - TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN = 0x8C88 - RASTERIZER_DISCARD = 0x8C89 - MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS = 0x8C8A - MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS = 0x8C8B - INTERLEAVED_ATTRIBS = 0x8C8C - SEPARATE_ATTRIBS = 0x8C8D - TRANSFORM_FEEDBACK_BUFFER = 0x8C8E - TRANSFORM_FEEDBACK_BUFFER_BINDING = 0x8C8F - POINT_SPRITE_COORD_ORIGIN = 0x8CA0 - LOWER_LEFT = 0x8CA1 - UPPER_LEFT = 0x8CA2 - STENCIL_BACK_REF = 0x8CA3 - STENCIL_BACK_VALUE_MASK = 0x8CA4 - STENCIL_BACK_WRITEMASK = 0x8CA5 - DRAW_FRAMEBUFFER_BINDING = 0x8CA6 - FRAMEBUFFER_BINDING = 0x8CA6 - RENDERBUFFER_BINDING = 0x8CA7 - READ_FRAMEBUFFER = 0x8CA8 - DRAW_FRAMEBUFFER = 0x8CA9 - READ_FRAMEBUFFER_BINDING = 0x8CAA - RENDERBUFFER_SAMPLES = 0x8CAB - DEPTH_COMPONENT32F = 0x8CAC - DEPTH32F_STENCIL8 = 0x8CAD - FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE = 0x8CD0 - FRAMEBUFFER_ATTACHMENT_OBJECT_NAME = 0x8CD1 - FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL = 0x8CD2 - FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE = 0x8CD3 - FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER = 0x8CD4 - FRAMEBUFFER_COMPLETE = 0x8CD5 - FRAMEBUFFER_INCOMPLETE_ATTACHMENT = 0x8CD6 - FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = 0x8CD7 - FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER = 0x8CDB - FRAMEBUFFER_INCOMPLETE_READ_BUFFER = 0x8CDC - FRAMEBUFFER_UNSUPPORTED = 0x8CDD - MAX_COLOR_ATTACHMENTS = 0x8CDF - COLOR_ATTACHMENT0 = 0x8CE0 - COLOR_ATTACHMENT1 = 0x8CE1 - COLOR_ATTACHMENT2 = 0x8CE2 - COLOR_ATTACHMENT3 = 0x8CE3 - COLOR_ATTACHMENT4 = 0x8CE4 - COLOR_ATTACHMENT5 = 0x8CE5 - COLOR_ATTACHMENT6 = 0x8CE6 - COLOR_ATTACHMENT7 = 0x8CE7 - COLOR_ATTACHMENT8 = 0x8CE8 - COLOR_ATTACHMENT9 = 0x8CE9 - COLOR_ATTACHMENT10 = 0x8CEA - COLOR_ATTACHMENT11 = 0x8CEB - COLOR_ATTACHMENT12 = 0x8CEC - COLOR_ATTACHMENT13 = 0x8CED - COLOR_ATTACHMENT14 = 0x8CEE - COLOR_ATTACHMENT15 = 0x8CEF - DEPTH_ATTACHMENT = 0x8D00 - STENCIL_ATTACHMENT = 0x8D20 - FRAMEBUFFER = 0x8D40 - RENDERBUFFER = 0x8D41 - RENDERBUFFER_WIDTH = 0x8D42 - RENDERBUFFER_HEIGHT = 0x8D43 - RENDERBUFFER_INTERNAL_FORMAT = 0x8D44 - STENCIL_INDEX1 = 0x8D46 - STENCIL_INDEX4 = 0x8D47 - STENCIL_INDEX8 = 0x8D48 - STENCIL_INDEX16 = 0x8D49 - RENDERBUFFER_RED_SIZE = 0x8D50 - RENDERBUFFER_GREEN_SIZE = 0x8D51 - RENDERBUFFER_BLUE_SIZE = 0x8D52 - RENDERBUFFER_ALPHA_SIZE = 0x8D53 - RENDERBUFFER_DEPTH_SIZE = 0x8D54 - RENDERBUFFER_STENCIL_SIZE = 0x8D55 - FRAMEBUFFER_INCOMPLETE_MULTISAMPLE = 0x8D56 - MAX_SAMPLES = 0x8D57 - RGBA32UI = 0x8D70 - RGB32UI = 0x8D71 - RGBA16UI = 0x8D76 - RGB16UI = 0x8D77 - RGBA8UI = 0x8D7C - RGB8UI = 0x8D7D - RGBA32I = 0x8D82 - RGB32I = 0x8D83 - RGBA16I = 0x8D88 - RGB16I = 0x8D89 - RGBA8I = 0x8D8E - RGB8I = 0x8D8F - RED_INTEGER = 0x8D94 - GREEN_INTEGER = 0x8D95 - BLUE_INTEGER = 0x8D96 - ALPHA_INTEGER = 0x8D97 - RGB_INTEGER = 0x8D98 - RGBA_INTEGER = 0x8D99 - BGR_INTEGER = 0x8D9A - BGRA_INTEGER = 0x8D9B - FLOAT_32_UNSIGNED_INT_24_8_REV = 0x8DAD - FRAMEBUFFER_SRGB = 0x8DB9 - COMPRESSED_RED_RGTC1 = 0x8DBB - COMPRESSED_SIGNED_RED_RGTC1 = 0x8DBC - COMPRESSED_RG_RGTC2 = 0x8DBD - COMPRESSED_SIGNED_RG_RGTC2 = 0x8DBE - SAMPLER_1D_ARRAY = 0x8DC0 - SAMPLER_2D_ARRAY = 0x8DC1 - SAMPLER_BUFFER = 0x8DC2 - SAMPLER_1D_ARRAY_SHADOW = 0x8DC3 - SAMPLER_2D_ARRAY_SHADOW = 0x8DC4 - SAMPLER_CUBE_SHADOW = 0x8DC5 - UNSIGNED_INT_VEC2 = 0x8DC6 - UNSIGNED_INT_VEC3 = 0x8DC7 - UNSIGNED_INT_VEC4 = 0x8DC8 - INT_SAMPLER_1D = 0x8DC9 - INT_SAMPLER_2D = 0x8DCA - INT_SAMPLER_3D = 0x8DCB - INT_SAMPLER_CUBE = 0x8DCC - INT_SAMPLER_2D_RECT = 0x8DCD - INT_SAMPLER_1D_ARRAY = 0x8DCE - INT_SAMPLER_2D_ARRAY = 0x8DCF - INT_SAMPLER_BUFFER = 0x8DD0 - UNSIGNED_INT_SAMPLER_1D = 0x8DD1 - UNSIGNED_INT_SAMPLER_2D = 0x8DD2 - UNSIGNED_INT_SAMPLER_3D = 0x8DD3 - UNSIGNED_INT_SAMPLER_CUBE = 0x8DD4 - UNSIGNED_INT_SAMPLER_2D_RECT = 0x8DD5 - UNSIGNED_INT_SAMPLER_1D_ARRAY = 0x8DD6 - UNSIGNED_INT_SAMPLER_2D_ARRAY = 0x8DD7 - UNSIGNED_INT_SAMPLER_BUFFER = 0x8DD8 - QUERY_WAIT = 0x8E13 - QUERY_NO_WAIT = 0x8E14 - QUERY_BY_REGION_WAIT = 0x8E15 - QUERY_BY_REGION_NO_WAIT = 0x8E16 - COPY_READ_BUFFER = 0x8F36 - COPY_WRITE_BUFFER = 0x8F37 - R8_SNORM = 0x8F94 - RG8_SNORM = 0x8F95 - RGB8_SNORM = 0x8F96 - RGBA8_SNORM = 0x8F97 - R16_SNORM = 0x8F98 - RG16_SNORM = 0x8F99 - RGB16_SNORM = 0x8F9A - RGBA16_SNORM = 0x8F9B - SIGNED_NORMALIZED = 0x8F9C - PRIMITIVE_RESTART = 0x8F9D - PRIMITIVE_RESTART_INDEX = 0x8F9E - BUFFER_ACCESS_FLAGS = 0x911F - BUFFER_MAP_LENGTH = 0x9120 - BUFFER_MAP_OFFSET = 0x9121 -) - -// https://www.opengl.org/sdk/docs/man3/xhtml/glViewport.xml -func (gl *GL) Viewport(x, y, width, height int) { - C.gl3_1_glViewport(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// DepthRange specifies the mapping of depth values from normalized device -// coordinates to window coordinates. -// -// Parameter nearVal specifies the mapping of the near clipping plane to window -// coordinates (defaults to 0), while farVal specifies the mapping of the far -// clipping plane to window coordinates (defaults to 1). -// -// After clipping and division by w, depth coordinates range from -1 to 1, -// corresponding to the near and far clipping planes. DepthRange specifies a -// linear mapping of the normalized depth coordinates in this range to window -// depth coordinates. Regardless of the actual depth buffer implementation, -// window coordinate depth values are treated as though they range from 0 through 1 -// (like color components). Thus, the values accepted by DepthRange are both -// clamped to this range before they are accepted. -// -// The default setting of (0, 1) maps the near plane to 0 and the far plane to 1. -// With this mapping, the depth buffer range is fully utilized. -// -// It is not necessary that nearVal be less than farVal. Reverse mappings such as -// nearVal 1, and farVal 0 are acceptable. -// -// GL.INVALID_OPERATION is generated if DepthRange is executed between the -// execution of Begin and the corresponding execution of End. -func (gl *GL) DepthRange(nearVal, farVal float64) { - C.gl3_1_glDepthRange(gl.funcs, C.GLdouble(nearVal), C.GLdouble(farVal)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsEnabled.xml -func (gl *GL) IsEnabled(cap glbase.Enum) bool { - glresult := C.gl3_1_glIsEnabled(gl.funcs, C.GLenum(cap)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetTexLevelParameteriv.xml -func (gl *GL) GetTexLevelParameteriv(target glbase.Enum, level int, pname glbase.Enum, params []int32) { - C.gl3_1_glGetTexLevelParameteriv(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetTexLevelParameterfv.xml -func (gl *GL) GetTexLevelParameterfv(target glbase.Enum, level int, pname glbase.Enum, params []float32) { - C.gl3_1_glGetTexLevelParameterfv(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetTexParameteriv.xml -func (gl *GL) GetTexParameteriv(target, pname glbase.Enum, params []int32) { - C.gl3_1_glGetTexParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetTexParameterfv.xml -func (gl *GL) GetTexParameterfv(target, pname glbase.Enum, params []float32) { - C.gl3_1_glGetTexParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetTexImage.xml -func (gl *GL) GetTexImage(target glbase.Enum, level int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl3_1_glGetTexImage(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetIntegerv.xml -func (gl *GL) GetIntegerv(pname glbase.Enum, params []int32) { - C.gl3_1_glGetIntegerv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetFloatv.xml -func (gl *GL) GetFloatv(pname glbase.Enum, params []float32) { - C.gl3_1_glGetFloatv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetError.xml -func (gl *GL) GetError() glbase.Enum { - glresult := C.gl3_1_glGetError(gl.funcs) - return glbase.Enum(glresult) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetDoublev.xml -func (gl *GL) GetDoublev(pname glbase.Enum, params []float64) { - C.gl3_1_glGetDoublev(gl.funcs, C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetBooleanv.xml -func (gl *GL) GetBooleanv(pname glbase.Enum, params []bool) { - C.gl3_1_glGetBooleanv(gl.funcs, C.GLenum(pname), (*C.GLboolean)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glReadPixels.xml -func (gl *GL) ReadPixels(x, y, width, height int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl3_1_glReadPixels(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glReadBuffer.xml -func (gl *GL) ReadBuffer(mode glbase.Enum) { - C.gl3_1_glReadBuffer(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPixelStorei.xml -func (gl *GL) PixelStorei(pname glbase.Enum, param int32) { - C.gl3_1_glPixelStorei(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPixelStoref.xml -func (gl *GL) PixelStoref(pname glbase.Enum, param float32) { - C.gl3_1_glPixelStoref(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDepthFunc.xml -func (gl *GL) DepthFunc(glfunc glbase.Enum) { - C.gl3_1_glDepthFunc(gl.funcs, C.GLenum(glfunc)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glStencilOp.xml -func (gl *GL) StencilOp(fail, zfail, zpass glbase.Enum) { - C.gl3_1_glStencilOp(gl.funcs, C.GLenum(fail), C.GLenum(zfail), C.GLenum(zpass)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glStencilFunc.xml -func (gl *GL) StencilFunc(glfunc glbase.Enum, ref int32, mask uint32) { - C.gl3_1_glStencilFunc(gl.funcs, C.GLenum(glfunc), C.GLint(ref), C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glLogicOp.xml -func (gl *GL) LogicOp(opcode glbase.Enum) { - C.gl3_1_glLogicOp(gl.funcs, C.GLenum(opcode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBlendFunc.xml -func (gl *GL) BlendFunc(sfactor, dfactor glbase.Enum) { - C.gl3_1_glBlendFunc(gl.funcs, C.GLenum(sfactor), C.GLenum(dfactor)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFlush.xml -func (gl *GL) Flush() { - C.gl3_1_glFlush(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFinish.xml -func (gl *GL) Finish() { - C.gl3_1_glFinish(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEnable.xml -func (gl *GL) Enable(cap glbase.Enum) { - C.gl3_1_glEnable(gl.funcs, C.GLenum(cap)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDisable.xml -func (gl *GL) Disable(cap glbase.Enum) { - C.gl3_1_glDisable(gl.funcs, C.GLenum(cap)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDepthMask.xml -func (gl *GL) DepthMask(flag bool) { - C.gl3_1_glDepthMask(gl.funcs, *(*C.GLboolean)(unsafe.Pointer(&flag))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColorMask.xml -func (gl *GL) ColorMask(red, green, blue, alpha bool) { - C.gl3_1_glColorMask(gl.funcs, *(*C.GLboolean)(unsafe.Pointer(&red)), *(*C.GLboolean)(unsafe.Pointer(&green)), *(*C.GLboolean)(unsafe.Pointer(&blue)), *(*C.GLboolean)(unsafe.Pointer(&alpha))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glStencilMask.xml -func (gl *GL) StencilMask(mask uint32) { - C.gl3_1_glStencilMask(gl.funcs, C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClearDepth.xml -func (gl *GL) ClearDepth(depth float64) { - C.gl3_1_glClearDepth(gl.funcs, C.GLdouble(depth)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClearStencil.xml -func (gl *GL) ClearStencil(s int32) { - C.gl3_1_glClearStencil(gl.funcs, C.GLint(s)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClearColor.xml -func (gl *GL) ClearColor(red, green, blue, alpha float32) { - C.gl3_1_glClearColor(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClear.xml -func (gl *GL) Clear(mask glbase.Bitfield) { - C.gl3_1_glClear(gl.funcs, C.GLbitfield(mask)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDrawBuffer.xml -func (gl *GL) DrawBuffer(mode glbase.Enum) { - C.gl3_1_glDrawBuffer(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexImage2D.xml -func (gl *GL) TexImage2D(target glbase.Enum, level int, internalFormat int32, width, height, border int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl3_1_glTexImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLint(border), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexImage1D.xml -func (gl *GL) TexImage1D(target glbase.Enum, level int, internalFormat int32, width, border int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl3_1_glTexImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(internalFormat), C.GLsizei(width), C.GLint(border), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexParameteriv.xml -func (gl *GL) TexParameteriv(target, pname glbase.Enum, params []int32) { - C.gl3_1_glTexParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexParameteri.xml -func (gl *GL) TexParameteri(target, pname glbase.Enum, param int32) { - C.gl3_1_glTexParameteri(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexParameterfv.xml -func (gl *GL) TexParameterfv(target, pname glbase.Enum, params []float32) { - C.gl3_1_glTexParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexParameterf.xml -func (gl *GL) TexParameterf(target, pname glbase.Enum, param float32) { - C.gl3_1_glTexParameterf(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glScissor.xml -func (gl *GL) Scissor(x, y, width, height int) { - C.gl3_1_glScissor(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPolygonMode.xml -func (gl *GL) PolygonMode(face, mode glbase.Enum) { - C.gl3_1_glPolygonMode(gl.funcs, C.GLenum(face), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPointSize.xml -func (gl *GL) PointSize(size float32) { - C.gl3_1_glPointSize(gl.funcs, C.GLfloat(size)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glLineWidth.xml -func (gl *GL) LineWidth(width float32) { - C.gl3_1_glLineWidth(gl.funcs, C.GLfloat(width)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glHint.xml -func (gl *GL) Hint(target, mode glbase.Enum) { - C.gl3_1_glHint(gl.funcs, C.GLenum(target), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFrontFace.xml -func (gl *GL) FrontFace(mode glbase.Enum) { - C.gl3_1_glFrontFace(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCullFace.xml -func (gl *GL) CullFace(mode glbase.Enum) { - C.gl3_1_glCullFace(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIndexubv.xml -func (gl *GL) Indexubv(c []uint8) { - C.gl3_1_glIndexubv(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIndexub.xml -func (gl *GL) Indexub(c uint8) { - C.gl3_1_glIndexub(gl.funcs, C.GLubyte(c)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsTexture.xml -func (gl *GL) IsTexture(texture glbase.Texture) bool { - glresult := C.gl3_1_glIsTexture(gl.funcs, C.GLuint(texture)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// GenTextures returns n texture names in textures. There is no guarantee -// that the names form a contiguous set of integers; however, it is -// guaranteed that none of the returned names was in use immediately before -// the call to GenTextures. -// -// The generated textures have no dimensionality; they assume the -// dimensionality of the texture target to which they are first bound (see -// BindTexture). -// -// Texture names returned by a call to GenTextures are not returned by -// subsequent calls, unless they are first deleted with DeleteTextures. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// GenTextures is available in GL version 2.0 or greater. -func (gl *GL) GenTextures(n int) []glbase.Texture { - if n == 0 { - return nil - } - textures := make([]glbase.Texture, n) - C.gl3_1_glGenTextures(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0]))) - return textures -} - -// DeleteTextures deletes the textures objects whose names are stored -// in the textures slice. After a texture is deleted, it has no contents or -// dimensionality, and its name is free for reuse (for example by -// GenTextures). If a texture that is currently bound is deleted, the binding -// reverts to 0 (the default texture). -// -// DeleteTextures silently ignores 0's and names that do not correspond to -// existing textures. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// DeleteTextures is available in GL version 2.0 or greater. -func (gl *GL) DeleteTextures(textures []glbase.Texture) { - n := len(textures) - if n == 0 { - return - } - C.gl3_1_glDeleteTextures(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBindTexture.xml -func (gl *GL) BindTexture(target glbase.Enum, texture glbase.Texture) { - C.gl3_1_glBindTexture(gl.funcs, C.GLenum(target), C.GLuint(texture)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexSubImage2D.xml -func (gl *GL) TexSubImage2D(target glbase.Enum, level, xoffset, yoffset, width, height int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl3_1_glTexSubImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexSubImage1D.xml -func (gl *GL) TexSubImage1D(target glbase.Enum, level, xoffset, width int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl3_1_glTexSubImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLsizei(width), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCopyTexSubImage2D.xml -func (gl *GL) CopyTexSubImage2D(target glbase.Enum, level, xoffset, yoffset, x, y, width, height int) { - C.gl3_1_glCopyTexSubImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCopyTexSubImage1D.xml -func (gl *GL) CopyTexSubImage1D(target glbase.Enum, level, xoffset, x, y, width int) { - C.gl3_1_glCopyTexSubImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(x), C.GLint(y), C.GLsizei(width)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCopyTexImage2D.xml -func (gl *GL) CopyTexImage2D(target glbase.Enum, level int, internalFormat glbase.Enum, x, y, width, height, border int) { - C.gl3_1_glCopyTexImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height), C.GLint(border)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCopyTexImage1D.xml -func (gl *GL) CopyTexImage1D(target glbase.Enum, level int, internalFormat glbase.Enum, x, y, width, border int) { - C.gl3_1_glCopyTexImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLint(border)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPolygonOffset.xml -func (gl *GL) PolygonOffset(factor, units float32) { - C.gl3_1_glPolygonOffset(gl.funcs, C.GLfloat(factor), C.GLfloat(units)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDrawElements.xml -func (gl *GL) DrawElements(mode glbase.Enum, count int, gltype glbase.Enum, indices interface{}) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl3_1_glDrawElements(gl.funcs, C.GLenum(mode), C.GLsizei(count), C.GLenum(gltype), indices_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDrawArrays.xml -func (gl *GL) DrawArrays(mode glbase.Enum, first, count int) { - C.gl3_1_glDrawArrays(gl.funcs, C.GLenum(mode), C.GLint(first), C.GLsizei(count)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCopyTexSubImage3D.xml -func (gl *GL) CopyTexSubImage3D(target glbase.Enum, level, xoffset, yoffset int, zoffset int32, x, y, width, height int) { - C.gl3_1_glCopyTexSubImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(zoffset), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexSubImage3D.xml -func (gl *GL) TexSubImage3D(target glbase.Enum, level, xoffset, yoffset int, zoffset int32, width, height int, depth int32, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl3_1_glTexSubImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(zoffset), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexImage3D.xml -func (gl *GL) TexImage3D(target glbase.Enum, level int, internalFormat int32, width, height int, depth int32, border int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl3_1_glTexImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLint(border), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDrawRangeElements.xml -func (gl *GL) DrawRangeElements(mode glbase.Enum, start, end uint32, count int, gltype glbase.Enum, indices interface{}) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl3_1_glDrawRangeElements(gl.funcs, C.GLenum(mode), C.GLuint(start), C.GLuint(end), C.GLsizei(count), C.GLenum(gltype), indices_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBlendEquation.xml -func (gl *GL) BlendEquation(mode glbase.Enum) { - C.gl3_1_glBlendEquation(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBlendColor.xml -func (gl *GL) BlendColor(red, green, blue, alpha float32) { - C.gl3_1_glBlendColor(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetCompressedTexImage.xml -func (gl *GL) GetCompressedTexImage(target glbase.Enum, level int, img interface{}) { - var img_ptr unsafe.Pointer - var img_v = reflect.ValueOf(img) - if img != nil && img_v.Kind() != reflect.Slice { - panic("parameter img must be a slice") - } - if img != nil { - img_ptr = unsafe.Pointer(img_v.Index(0).Addr().Pointer()) - } - C.gl3_1_glGetCompressedTexImage(gl.funcs, C.GLenum(target), C.GLint(level), img_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCompressedTexSubImage1D.xml -func (gl *GL) CompressedTexSubImage1D(target glbase.Enum, level, xoffset, width int, format glbase.Enum, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl3_1_glCompressedTexSubImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLsizei(width), C.GLenum(format), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCompressedTexSubImage2D.xml -func (gl *GL) CompressedTexSubImage2D(target glbase.Enum, level, xoffset, yoffset, width, height int, format glbase.Enum, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl3_1_glCompressedTexSubImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCompressedTexSubImage3D.xml -func (gl *GL) CompressedTexSubImage3D(target glbase.Enum, level, xoffset, yoffset int, zoffset int32, width, height int, depth int32, format glbase.Enum, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl3_1_glCompressedTexSubImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(zoffset), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLenum(format), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCompressedTexImage1D.xml -func (gl *GL) CompressedTexImage1D(target glbase.Enum, level int, internalFormat glbase.Enum, width, border, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl3_1_glCompressedTexImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLsizei(width), C.GLint(border), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCompressedTexImage2D.xml -func (gl *GL) CompressedTexImage2D(target glbase.Enum, level int, internalFormat glbase.Enum, width, height, border, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl3_1_glCompressedTexImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLint(border), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCompressedTexImage3D.xml -func (gl *GL) CompressedTexImage3D(target glbase.Enum, level int, internalFormat glbase.Enum, width, height int, depth int32, border, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl3_1_glCompressedTexImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLint(border), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSampleCoverage.xml -func (gl *GL) SampleCoverage(value float32, invert bool) { - C.gl3_1_glSampleCoverage(gl.funcs, C.GLfloat(value), *(*C.GLboolean)(unsafe.Pointer(&invert))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glActiveTexture.xml -func (gl *GL) ActiveTexture(texture glbase.Enum) { - C.gl3_1_glActiveTexture(gl.funcs, C.GLenum(texture)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPointParameteriv.xml -func (gl *GL) PointParameteriv(pname glbase.Enum, params []int32) { - C.gl3_1_glPointParameteriv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPointParameteri.xml -func (gl *GL) PointParameteri(pname glbase.Enum, param int32) { - C.gl3_1_glPointParameteri(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPointParameterfv.xml -func (gl *GL) PointParameterfv(pname glbase.Enum, params []float32) { - C.gl3_1_glPointParameterfv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPointParameterf.xml -func (gl *GL) PointParameterf(pname glbase.Enum, param float32) { - C.gl3_1_glPointParameterf(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiDrawArrays.xml -func (gl *GL) MultiDrawArrays(mode glbase.Enum, first, count []int, drawcount int32) { - C.gl3_1_glMultiDrawArrays(gl.funcs, C.GLenum(mode), (*C.GLint)(unsafe.Pointer(&first[0])), (*C.GLsizei)(unsafe.Pointer(&count[0])), C.GLsizei(drawcount)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBlendFuncSeparate.xml -func (gl *GL) BlendFuncSeparate(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha glbase.Enum) { - C.gl3_1_glBlendFuncSeparate(gl.funcs, C.GLenum(sfactorRGB), C.GLenum(dfactorRGB), C.GLenum(sfactorAlpha), C.GLenum(dfactorAlpha)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetBufferParameteriv.xml -func (gl *GL) GetBufferParameteriv(target, pname glbase.Enum, params []int32) { - C.gl3_1_glGetBufferParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glUnmapBuffer.xml -func (gl *GL) UnmapBuffer(target glbase.Enum) bool { - glresult := C.gl3_1_glUnmapBuffer(gl.funcs, C.GLenum(target)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetBufferSubData.xml -func (gl *GL) GetBufferSubData(target glbase.Enum, offset, size int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl3_1_glGetBufferSubData(gl.funcs, C.GLenum(target), C.GLintptr(offset), C.GLsizeiptr(size), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBufferSubData.xml -func (gl *GL) BufferSubData(target glbase.Enum, offset, size int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl3_1_glBufferSubData(gl.funcs, C.GLenum(target), C.GLintptr(offset), C.GLsizeiptr(size), data_ptr) -} - -// BufferData creates a new data store for the buffer object currently -// bound to target. Any pre-existing data store is deleted. The new data -// store is created with the specified size in bytes and usage. If data is -// not nil, it must be a slice that is used to initialize the data store. -// In that case the size parameter is ignored and the store size will match -// the slice data size. -// -// In its initial state, the new data store is not mapped, it has a NULL -// mapped pointer, and its mapped access is GL.READ_WRITE. -// -// The target constant must be one of GL.ARRAY_BUFFER, GL.COPY_READ_BUFFER, -// GL.COPY_WRITE_BUFFER, GL.ELEMENT_ARRAY_BUFFER, GL.PIXEL_PACK_BUFFER, -// GL.PIXEL_UNPACK_BUFFER, GL.TEXTURE_BUFFER, GL.TRANSFORM_FEEDBACK_BUFFER, -// or GL.UNIFORM_BUFFER. -// -// The usage parameter is a hint to the GL implementation as to how a buffer -// object's data store will be accessed. This enables the GL implementation -// to make more intelligent decisions that may significantly impact buffer -// object performance. It does not, however, constrain the actual usage of -// the data store. usage can be broken down into two parts: first, the -// frequency of access (modification and usage), and second, the nature of -// that access. -// -// A usage frequency of STREAM and nature of DRAW is specified via the -// constant GL.STREAM_DRAW, for example. -// -// The usage frequency of access may be one of: -// -// STREAM -// The data store contents will be modified once and used at most a few times. -// -// STATIC -// The data store contents will be modified once and used many times. -// -// DYNAMIC -// The data store contents will be modified repeatedly and used many times. -// -// The usage nature of access may be one of: -// -// DRAW -// The data store contents are modified by the application, and used as -// the source for GL drawing and image specification commands. -// -// READ -// The data store contents are modified by reading data from the GL, -// and used to return that data when queried by the application. -// -// COPY -// The data store contents are modified by reading data from the GL, -// and used as the source for GL drawing and image specification -// commands. -// -// Clients must align data elements consistent with the requirements of the -// client platform, with an additional base-level requirement that an offset -// within a buffer to a datum comprising N bytes be a multiple of N. -// -// Error GL.INVALID_ENUM is generated if target is not one of the accepted -// buffer targets. GL.INVALID_ENUM is generated if usage is not -// GL.STREAM_DRAW, GL.STREAM_READ, GL.STREAM_COPY, GL.STATIC_DRAW, -// GL.STATIC_READ, GL.STATIC_COPY, GL.DYNAMIC_DRAW, GL.DYNAMIC_READ, or -// GL.DYNAMIC_COPY. GL.INVALID_VALUE is generated if size is negative. -// GL.INVALID_OPERATION is generated if the reserved buffer object name 0 is -// bound to target. GL.OUT_OF_MEMORY is generated if the GL is unable to -// create a data store with the specified size. -func (gl *GL) BufferData(target glbase.Enum, size int, data interface{}, usage glbase.Enum) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - if data != nil { - size = int(data_v.Type().Size()) * data_v.Len() - } - C.gl3_1_glBufferData(gl.funcs, C.GLenum(target), C.GLsizeiptr(size), data_ptr, C.GLenum(usage)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsBuffer.xml -func (gl *GL) IsBuffer(buffer glbase.Buffer) bool { - glresult := C.gl3_1_glIsBuffer(gl.funcs, C.GLuint(buffer)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// GenBuffers returns n buffer object names. There is no guarantee that -// the names form a contiguous set of integers; however, it is guaranteed -// that none of the returned names was in use immediately before the call to -// GenBuffers. -// -// Buffer object names returned by a call to GenBuffers are not returned by -// subsequent calls, unless they are first deleted with DeleteBuffers. -// -// No buffer objects are associated with the returned buffer object names -// until they are first bound by calling BindBuffer. -// -// Error GL.INVALID_VALUE is generated if n is negative. GL.INVALID_OPERATION -// is generated if GenBuffers is executed between the execution of Begin -// and the corresponding execution of End. -// -// GenBuffers is available in GL version 1.5 or greater. -func (gl *GL) GenBuffers(n int) []glbase.Buffer { - if n == 0 { - return nil - } - buffers := make([]glbase.Buffer, n) - C.gl3_1_glGenBuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&buffers[0]))) - return buffers -} - -// DeleteBuffers deletes the buffer objects whose names are stored in the -// buffers slice. -// -// After a buffer object is deleted, it has no contents, and its name is free -// for reuse (for example by GenBuffers). If a buffer object that is -// currently bound is deleted, the binding reverts to 0 (the absence of any -// buffer object, which reverts to client memory usage). -// -// DeleteBuffers silently ignores 0's and names that do not correspond to -// existing buffer objects. -// -// Error GL.INVALID_VALUE is generated if n is negative. GL.INVALID_OPERATION -// is generated if DeleteBuffers is executed between the execution of Begin -// and the corresponding execution of End. -// -// DeleteBuffers is available in GL version 1.5 or greater. -func (gl *GL) DeleteBuffers(buffers []glbase.Buffer) { - n := len(buffers) - if n == 0 { - return - } - C.gl3_1_glDeleteBuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&buffers[0]))) -} - -// BindBuffer creates or puts in use a named buffer object. -// Calling BindBuffer with target set to GL.ARRAY_BUFFER, -// GL.ELEMENT_ARRAY_BUFFER, GL.PIXEL_PACK_BUFFER or GL.PIXEL_UNPACK_BUFFER -// and buffer set to the name of the new buffer object binds the buffer -// object name to the target. When a buffer object is bound to a target, the -// previous binding for that target is automatically broken. -// -// Buffer object names are unsigned integers. The value zero is reserved, but -// there is no default buffer object for each buffer object target. Instead, -// buffer set to zero effectively unbinds any buffer object previously bound, -// and restores client memory usage for that buffer object target. Buffer -// object names and the corresponding buffer object contents are local to the -// shared display-list space (see XCreateContext) of the current GL rendering -// context; two rendering contexts share buffer object names only if they -// also share display lists. -// -// GenBuffers may be called to generate a set of new buffer object names. -// -// The state of a buffer object immediately after it is first bound is an -// unmapped zero-sized memory buffer with GL.READ_WRITE access and -// GL.STATIC_DRAW usage. -// -// While a non-zero buffer object name is bound, GL operations on the target -// to which it is bound affect the bound buffer object, and queries of the -// target to which it is bound return state from the bound buffer object. -// While buffer object name zero is bound, as in the initial state, attempts -// to modify or query state on the target to which it is bound generates an -// GL.INVALID_OPERATION error. -// -// When vertex array pointer state is changed, for example by a call to -// NormalPointer, the current buffer object binding (GL.ARRAY_BUFFER_BINDING) -// is copied into the corresponding client state for the vertex array type -// being changed, for example GL.NORMAL_ARRAY_BUFFER_BINDING. While a -// non-zero buffer object is bound to the GL.ARRAY_BUFFER target, the vertex -// array pointer parameter that is traditionally interpreted as a pointer to -// client-side memory is instead interpreted as an offset within the buffer -// object measured in basic machine units. -// -// While a non-zero buffer object is bound to the GL.ELEMENT_ARRAY_BUFFER -// target, the indices parameter of DrawElements, DrawRangeElements, or -// MultiDrawElements that is traditionally interpreted as a pointer to -// client-side memory is instead interpreted as an offset within the buffer -// object measured in basic machine units. -// -// While a non-zero buffer object is bound to the GL.PIXEL_PACK_BUFFER -// target, the following commands are affected: GetCompressedTexImage, -// GetConvolutionFilter, GetHistogram, GetMinmax, GetPixelMap, -// GetPolygonStipple, GetSeparableFilter, GetTexImage, and ReadPixels. The -// pointer parameter that is traditionally interpreted as a pointer to -// client-side memory where the pixels are to be packed is instead -// interpreted as an offset within the buffer object measured in basic -// machine units. -// -// While a non-zero buffer object is bound to the GL.PIXEL_UNPACK_BUFFER -// target, the following commands are affected: Bitmap, ColorSubTable, -// ColorTable, CompressedTexImage1D, CompressedTexImage2D, -// CompressedTexImage3D, CompressedTexSubImage1D, CompressedTexSubImage2D, -// CompressedTexSubImage3D, ConvolutionFilter1D, ConvolutionFilter2D, -// DrawPixels, PixelMap, PolygonStipple, SeparableFilter2D, TexImage1D, -// TexImage2D, TexImage3D, TexSubImage1D, TexSubImage2D, and TexSubImage3D. -// The pointer parameter that is traditionally interpreted as a pointer to -// client-side memory from which the pixels are to be unpacked is instead -// interpreted as an offset within the buffer object measured in basic -// machine units. -// -// A buffer object binding created with BindBuffer remains active until a -// different buffer object name is bound to the same target, or until the -// bound buffer object is deleted with DeleteBuffers. -// -// Once created, a named buffer object may be re-bound to any target as often -// as needed. However, the GL implementation may make choices about how to -// optimize the storage of a buffer object based on its initial binding -// target. -// -// Error GL.INVALID_ENUM is generated if target is not one of the allowable -// values. GL.INVALID_OPERATION is generated if BindBuffer is executed -// between the execution of Begin and the corresponding execution of End. -// -// BindBuffer is available in GL version 1.5 or greater. -func (gl *GL) BindBuffer(target glbase.Enum, buffer glbase.Buffer) { - C.gl3_1_glBindBuffer(gl.funcs, C.GLenum(target), C.GLuint(buffer)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetQueryObjectuiv.xml -func (gl *GL) GetQueryObjectuiv(id uint32, pname glbase.Enum, params []uint32) { - C.gl3_1_glGetQueryObjectuiv(gl.funcs, C.GLuint(id), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetQueryObjectiv.xml -func (gl *GL) GetQueryObjectiv(id uint32, pname glbase.Enum, params []int32) { - C.gl3_1_glGetQueryObjectiv(gl.funcs, C.GLuint(id), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetQueryiv.xml -func (gl *GL) GetQueryiv(target, pname glbase.Enum, params []int32) { - C.gl3_1_glGetQueryiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEndQuery.xml -func (gl *GL) EndQuery(target glbase.Enum) { - C.gl3_1_glEndQuery(gl.funcs, C.GLenum(target)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBeginQuery.xml -func (gl *GL) BeginQuery(target glbase.Enum, id uint32) { - C.gl3_1_glBeginQuery(gl.funcs, C.GLenum(target), C.GLuint(id)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsQuery.xml -func (gl *GL) IsQuery(id uint32) bool { - glresult := C.gl3_1_glIsQuery(gl.funcs, C.GLuint(id)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDeleteQueries.xml -func (gl *GL) DeleteQueries(n int, ids []uint32) { - C.gl3_1_glDeleteQueries(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&ids[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGenQueries.xml -func (gl *GL) GenQueries(n int, ids []uint32) { - C.gl3_1_glGenQueries(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&ids[0]))) -} - -// VertexAttribPointer specifies the location and data format of the array -// of generic vertex attributes at index to use when rendering. size -// specifies the number of components per attribute and must be 1, 2, 3, or -// 4. type specifies the data type of each component, and stride specifies -// the byte stride from one attribute to the next, allowing vertices and -// attributes to be packed into a single array or stored in separate arrays. -// normalized indicates whether the values stored in an integer format are -// to be mapped to the range [-1,1] (for signed values) or [0,1] -// (for unsigned values) when they are accessed and converted to floating -// point; otherwise, values will be converted to floats directly without -// normalization. offset is a byte offset into the buffer object's data -// store, which must be bound to the GL.ARRAY_BUFFER target with BindBuffer. -// -// The buffer object binding (GL.ARRAY_BUFFER_BINDING) is saved as -// generic vertex attribute array client-side state -// (GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING) for the provided index. -// -// To enable and disable a generic vertex attribute array, call -// EnableVertexAttribArray and DisableVertexAttribArray with index. If -// enabled, the generic vertex attribute array is used when DrawArrays or -// DrawElements is called. Each generic vertex attribute array is initially -// disabled. -// -// VertexAttribPointer is typically implemented on the client side. -// -// Error GL.INVALID_ENUM is generated if type is not an accepted value. -// GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. GL.INVALID_VALUE is generated if size is not 1, 2, -// 3, or 4. GL.INVALID_VALUE is generated if stride is negative. -func (gl *GL) VertexAttribPointer(index glbase.Attrib, size int, gltype glbase.Enum, normalized bool, stride int, offset uintptr) { - offset_ptr := unsafe.Pointer(offset) - C.gl3_1_glVertexAttribPointer(gl.funcs, C.GLuint(index), C.GLint(size), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), C.GLsizei(stride), offset_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glValidateProgram.xml -func (gl *GL) ValidateProgram(program glbase.Program) { - C.gl3_1_glValidateProgram(gl.funcs, C.GLuint(program)) -} - -// UniformMatrix4fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix4fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix4fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(4*4) != 0 { - panic("invalid value length for UniformMatrix4fv") - } - count := len(value) / (4 * 4) - C.gl3_1_glUniformMatrix4fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix3fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix3fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix3fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(3*3) != 0 { - panic("invalid value length for UniformMatrix3fv") - } - count := len(value) / (3 * 3) - C.gl3_1_glUniformMatrix3fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix2fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix2fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix2fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(2*2) != 0 { - panic("invalid value length for UniformMatrix2fv") - } - count := len(value) / (2 * 2) - C.gl3_1_glUniformMatrix2fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform4iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform4iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - if len(value)%4 != 0 { - panic("invalid value length for Uniform4iv") - } - count := len(value) / 4 - C.gl3_1_glUniform4iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// Uniform3iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform3iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - if len(value)%3 != 0 { - panic("invalid value length for Uniform3iv") - } - count := len(value) / 3 - C.gl3_1_glUniform3iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// Uniform2iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform2iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - if len(value)%2 != 0 { - panic("invalid value length for Uniform2iv") - } - count := len(value) / 2 - C.gl3_1_glUniform2iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// Uniform1iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform1iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - count := len(value) - C.gl3_1_glUniform1iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// Uniform4fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform4fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - if len(value)%4 != 0 { - panic("invalid value length for Uniform4fv") - } - count := len(value) / 4 - C.gl3_1_glUniform4fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform3fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform3fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - if len(value)%3 != 0 { - panic("invalid value length for Uniform3fv") - } - count := len(value) / 3 - C.gl3_1_glUniform3fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform2fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform2fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - if len(value)%2 != 0 { - panic("invalid value length for Uniform2fv") - } - count := len(value) / 2 - C.gl3_1_glUniform2fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform1fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform1fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - count := len(value) - C.gl3_1_glUniform1fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform4i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform4i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4i(location glbase.Uniform, v0, v1, v2, v3 int32) { - C.gl3_1_glUniform4i(gl.funcs, C.GLint(location), C.GLint(v0), C.GLint(v1), C.GLint(v2), C.GLint(v3)) -} - -// Uniform3i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform3i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3i(location glbase.Uniform, v0, v1, v2 int32) { - C.gl3_1_glUniform3i(gl.funcs, C.GLint(location), C.GLint(v0), C.GLint(v1), C.GLint(v2)) -} - -// Uniform2i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform2i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2i(location glbase.Uniform, v0, v1 int32) { - C.gl3_1_glUniform2i(gl.funcs, C.GLint(location), C.GLint(v0), C.GLint(v1)) -} - -// Uniform1i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform1i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1i(location glbase.Uniform, v0 int32) { - C.gl3_1_glUniform1i(gl.funcs, C.GLint(location), C.GLint(v0)) -} - -// Uniform4f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform4f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4f(location glbase.Uniform, v0, v1, v2, v3 float32) { - C.gl3_1_glUniform4f(gl.funcs, C.GLint(location), C.GLfloat(v0), C.GLfloat(v1), C.GLfloat(v2), C.GLfloat(v3)) -} - -// Uniform3f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform3f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3f(location glbase.Uniform, v0, v1, v2 float32) { - C.gl3_1_glUniform3f(gl.funcs, C.GLint(location), C.GLfloat(v0), C.GLfloat(v1), C.GLfloat(v2)) -} - -// Uniform2f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform2f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2f(location glbase.Uniform, v0, v1 float32) { - C.gl3_1_glUniform2f(gl.funcs, C.GLint(location), C.GLfloat(v0), C.GLfloat(v1)) -} - -// Uniform1f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform1f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1f(location glbase.Uniform, v0 float32) { - C.gl3_1_glUniform1f(gl.funcs, C.GLint(location), C.GLfloat(v0)) -} - -// UseProgram installs the program object specified by program as part of -// current rendering state. One or more executables are created in a program -// object by successfully attaching shader objects to it with AttachShader, -// successfully compiling the shader objects with CompileShader, and -// successfully linking the program object with LinkProgram. -// -// A program object will contain an executable that will run on the vertex -// processor if it contains one or more shader objects of type -// GL.VERTEX_SHADER that have been successfully compiled and linked. -// Similarly, a program object will contain an executable that will run on -// the fragment processor if it contains one or more shader objects of type -// GL.FRAGMENT_SHADER that have been successfully compiled and linked. -// -// Successfully installing an executable on a programmable processor will -// cause the corresponding fixed functionality of OpenGL to be disabled. -// Specifically, if an executable is installed on the vertex processor, the -// OpenGL fixed functionality will be disabled as follows. -// -// - The modelview matrix is not applied to vertex coordinates. -// -// - The projection matrix is not applied to vertex coordinates. -// -// - The texture matrices are not applied to texture coordinates. -// -// - Normals are not transformed to eye coordinates. -// -// - Normals are not rescaled or normalized. -// -// - Normalization of GL.AUTO_NORMAL evaluated normals is not performed. -// -// - Texture coordinates are not generated automatically. -// -// - Per-vertex lighting is not performed. -// -// - Color material computations are not performed. -// -// - Color index lighting is not performed. -// -// - This list also applies when setting the current raster position. -// -// The executable that is installed on the vertex processor is expected to -// implement any or all of the desired functionality from the preceding list. -// Similarly, if an executable is installed on the fragment processor, the -// OpenGL fixed functionality will be disabled as follows. -// -// - Texture environment and texture functions are not applied. -// -// - Texture application is not applied. -// -// - Color sum is not applied. -// -// - Fog is not applied. -// -// Again, the fragment shader that is installed is expected to implement any -// or all of the desired functionality from the preceding list. -// -// While a program object is in use, applications are free to modify attached -// shader objects, compile attached shader objects, attach additional shader -// objects, and detach or delete shader objects. None of these operations -// will affect the executables that are part of the current state. However, -// relinking the program object that is currently in use will install the -// program object as part of the current rendering state if the link -// operation was successful (see LinkProgram). If the program object -// currently in use is relinked unsuccessfully, its link status will be set -// to GL.FALSE, but the executables and associated state will remain part of -// the current state until a subsequent call to UseProgram removes it from -// use. After it is removed from use, it cannot be made part of current state -// until it has been successfully relinked. -// -// If program contains shader objects of type GL.VERTEX_SHADER but it does -// not contain shader objects of type GL.FRAGMENT_SHADER, an executable will -// be installed on the vertex processor, but fixed functionality will be used -// for fragment processing. Similarly, if program contains shader objects of -// type GL.FRAGMENT_SHADER but it does not contain shader objects of type -// GL.VERTEX_SHADER, an executable will be installed on the fragment -// processor, but fixed functionality will be used for vertex processing. If -// program is 0, the programmable processors will be disabled, and fixed -// functionality will be used for both vertex and fragment processing. -// -// While a program object is in use, the state that controls the disabled -// fixed functionality may also be updated using the normal OpenGL calls. -// -// Like display lists and texture objects, the name space for program objects -// may be shared across a set of contexts, as long as the server sides of the -// contexts share the same address space. If the name space is shared across -// contexts, any attached objects and the data associated with those attached -// objects are shared as well. -// -// Applications are responsible for providing the synchronization across API -// calls when objects are accessed from different execution threads. -// -// Error GL.INVALID_VALUE is generated if program is neither 0 nor a value -// generated by OpenGL. GL.INVALID_OPERATION is generated if program is not -// a program object. GL.INVALID_OPERATION is generated if program could not -// be made part of current state. GL.INVALID_OPERATION is generated if -// UseProgram is executed between the execution of Begin and the -// corresponding execution of End. -// -// UseProgram is available in GL version 2.0 or greater. -func (gl *GL) UseProgram(program glbase.Program) { - C.gl3_1_glUseProgram(gl.funcs, C.GLuint(program)) -} - -// ShaderSource sets the source code in shader to the provided source code. Any source -// code previously stored in the shader object is completely replaced. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader is not a shader -// object. GL.INVALID_VALUE is generated if count is less than 0. -// GL.INVALID_OPERATION is generated if ShaderSource is executed between the -// execution of Begin and the corresponding execution of End. -// -// ShaderSource is available in GL version 2.0 or greater. -func (gl *GL) ShaderSource(shader glbase.Shader, source ...string) { - count := len(source) - length := make([]int32, count) - source_c := make([]unsafe.Pointer, count) - for i, src := range source { - length[i] = int32(len(src)) - if len(src) > 0 { - source_c[i] = *(*unsafe.Pointer)(unsafe.Pointer(&src)) - } else { - source_c[i] = unsafe.Pointer(uintptr(0)) - } - } - C.gl3_1_glShaderSource(gl.funcs, C.GLuint(shader), C.GLsizei(count), (**C.GLchar)(unsafe.Pointer(&source_c[0])), (*C.GLint)(unsafe.Pointer(&length[0]))) -} - -// LinkProgram links the program object specified by program. If any shader -// objects of type GL.VERTEX_SHADER are attached to program, they will be -// used to create an executable that will run on the programmable vertex -// processor. If any shader objects of type GL.FRAGMENT_SHADER are attached -// to program, they will be used to create an executable that will run on the -// programmable fragment processor. -// -// The status of the link operation will be stored as part of the program -// object's state. This value will be set to GL.TRUE if the program object -// was linked without errors and is ready for use, and GL.FALSE otherwise. It -// can be queried by calling GetProgramiv with arguments program and -// GL.LINK_STATUS. -// -// As a result of a successful link operation, all active user-defined -// uniform variables belonging to program will be initialized to 0, and each -// of the program object's active uniform variables will be assigned a -// location that can be queried by calling GetUniformLocation. Also, any -// active user-defined attribute variables that have not been bound to a -// generic vertex attribute index will be bound to one at this time. -// -// Linking of a program object can fail for a number of reasons as specified -// in the OpenGL Shading Language Specification. The following lists some of -// the conditions that will cause a link error. -// -// - The number of active attribute variables supported by the -// implementation has been exceeded. -// -// - The storage limit for uniform variables has been exceeded. -// -// - The number of active uniform variables supported by the implementation -// has been exceeded. -// -// - The main function is missing for the vertex shader or the fragment -// shader. -// -// - A varying variable actually used in the fragment shader is not -// declared in the same way (or is not declared at all) in the vertex -// shader. -// -// - A reference to a function or variable name is unresolved. -// -// - A shared global is declared with two different types or two different -// initial values. -// -// - One or more of the attached shader objects has not been successfully -// compiled. -// -// - Binding a generic attribute matrix caused some rows of the matrix to -// fall outside the allowed maximum of GL.MAX_VERTEX_ATTRIBS. -// -// - Not enough contiguous vertex attribute slots could be found to bind -// attribute matrices. -// -// When a program object has been successfully linked, the program object can -// be made part of current state by calling UseProgram. Whether or not the -// link operation was successful, the program object's information log will -// be overwritten. The information log can be retrieved by calling -// GetProgramInfoLog. -// -// LinkProgram will also install the generated executables as part of the -// current rendering state if the link operation was successful and the -// specified program object is already currently in use as a result of a -// previous call to UseProgram. If the program object currently in use is -// relinked unsuccessfully, its link status will be set to GL.FALSE , but the -// executables and associated state will remain part of the current state -// until a subsequent call to UseProgram removes it from use. After it is -// removed from use, it cannot be made part of current state until it has -// been successfully relinked. -// -// If program contains shader objects of type GL.VERTEX_SHADER but does not -// contain shader objects of type GL.FRAGMENT_SHADER, the vertex shader will -// be linked against the implicit interface for fixed functionality fragment -// processing. Similarly, if program contains shader objects of type -// GL.FRAGMENT_SHADER but it does not contain shader objects of type -// GL.VERTEX_SHADER, the fragment shader will be linked against the implicit -// interface for fixed functionality vertex processing. -// -// The program object's information log is updated and the program is -// generated at the time of the link operation. After the link operation, -// applications are free to modify attached shader objects, compile attached -// shader objects, detach shader objects, delete shader objects, and attach -// additional shader objects. None of these operations affects the -// information log or the program that is part of the program object. -// -// If the link operation is unsuccessful, any information about a previous -// link operation on program is lost (a failed link does not restore the -// old state of program). Certain information can still be retrieved -// from program even after an unsuccessful link operation. See for instance -// GetActiveAttrib and GetActiveUniform. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program -// object. GL.INVALID_OPERATION is generated if LinkProgram is executed -// between the execution of Begin and the corresponding execution of End. -// -// LinkProgram is available in GL version 2.0 or greater. -func (gl *GL) LinkProgram(program glbase.Program) { - C.gl3_1_glLinkProgram(gl.funcs, C.GLuint(program)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsShader.xml -func (gl *GL) IsShader(shader glbase.Shader) bool { - glresult := C.gl3_1_glIsShader(gl.funcs, C.GLuint(shader)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsProgram.xml -func (gl *GL) IsProgram(program glbase.Program) bool { - glresult := C.gl3_1_glIsProgram(gl.funcs, C.GLuint(program)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// GetVertexAttribiv returns in params the value of a generic vertex attribute -// parameter. The generic vertex attribute to be queried is specified by -// index, and the parameter to be queried is specified by pname. -// -// The accepted parameter names are as follows: -// -// GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING -// params returns a single value, the name of the buffer object -// currently bound to the binding point corresponding to generic vertex -// attribute array index. If no buffer object is bound, 0 is returned. -// The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_ENABLED -// params returns a single value that is non-zero (true) if the vertex -// attribute array for index is enabled and 0 (false) if it is -// disabled. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_SIZE -// params returns a single value, the size of the vertex attribute -// array for index. The size is the number of values for each element -// of the vertex attribute array, and it will be 1, 2, 3, or 4. The -// initial value is 4. -// -// GL.VERTEX_ATTRIB_ARRAY_STRIDE -// params returns a single value, the array stride for (number of bytes -// between successive elements in) the vertex attribute array for -// index. A value of 0 indicates that the array elements are stored -// sequentially in memory. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_TYPE -// params returns a single value, a symbolic constant indicating the -// array type for the vertex attribute array for index. Possible values -// are GL.BYTE, GL.UNSIGNED_BYTE, GL.SHORT, GL.UNSIGNED_SHORT, GL.INT, -// GL.UNSIGNED_INT, GL.FLOAT, and GL.DOUBLE. The initial value is -// GL.FLOAT. -// -// GL.VERTEX_ATTRIB_ARRAY_NORMALIZED -// params returns a single value that is non-zero (true) if fixed-point -// data types for the vertex attribute array indicated by index are -// normalized when they are converted to floating point, and 0 (false) -// otherwise. The initial value is 0. -// -// GL.CURRENT_VERTEX_ATTRIB -// params returns four values that represent the current value for the -// generic vertex attribute specified by index. Generic vertex -// attribute 0 is unique in that it has no current state, so an error -// will be generated if index is 0. The initial value for all other -// generic vertex attributes is (0,0,0,1). -// -// All of the parameters except GL.CURRENT_VERTEX_ATTRIB represent -// client-side state. -// -// Error GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. GL.INVALID_ENUM is generated if pname is not an -// accepted value. GL.INVALID_OPERATION is generated if index is 0 and pname -// is GL.CURRENT_VERTEX_ATTRIB. -// -// GetVertexAttribiv is available in GL version 2.0 or greater. -func (gl *GL) GetVertexAttribiv(index glbase.Attrib, pname glbase.Enum, params []int32) { - var params_c [4]int32 - C.gl3_1_glGetVertexAttribiv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetVertexAttribfv returns in params the value of a generic vertex attribute -// parameter. The generic vertex attribute to be queried is specified by -// index, and the parameter to be queried is specified by pname. -// -// The accepted parameter names are as follows: -// -// GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING -// params returns a single value, the name of the buffer object -// currently bound to the binding point corresponding to generic vertex -// attribute array index. If no buffer object is bound, 0 is returned. -// The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_ENABLED -// params returns a single value that is non-zero (true) if the vertex -// attribute array for index is enabled and 0 (false) if it is -// disabled. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_SIZE -// params returns a single value, the size of the vertex attribute -// array for index. The size is the number of values for each element -// of the vertex attribute array, and it will be 1, 2, 3, or 4. The -// initial value is 4. -// -// GL.VERTEX_ATTRIB_ARRAY_STRIDE -// params returns a single value, the array stride for (number of bytes -// between successive elements in) the vertex attribute array for -// index. A value of 0 indicates that the array elements are stored -// sequentially in memory. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_TYPE -// params returns a single value, a symbolic constant indicating the -// array type for the vertex attribute array for index. Possible values -// are GL.BYTE, GL.UNSIGNED_BYTE, GL.SHORT, GL.UNSIGNED_SHORT, GL.INT, -// GL.UNSIGNED_INT, GL.FLOAT, and GL.DOUBLE. The initial value is -// GL.FLOAT. -// -// GL.VERTEX_ATTRIB_ARRAY_NORMALIZED -// params returns a single value that is non-zero (true) if fixed-point -// data types for the vertex attribute array indicated by index are -// normalized when they are converted to floating point, and 0 (false) -// otherwise. The initial value is 0. -// -// GL.CURRENT_VERTEX_ATTRIB -// params returns four values that represent the current value for the -// generic vertex attribute specified by index. Generic vertex -// attribute 0 is unique in that it has no current state, so an error -// will be generated if index is 0. The initial value for all other -// generic vertex attributes is (0,0,0,1). -// -// All of the parameters except GL.CURRENT_VERTEX_ATTRIB represent -// client-side state. -// -// Error GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. GL.INVALID_ENUM is generated if pname is not an -// accepted value. GL.INVALID_OPERATION is generated if index is 0 and pname -// is GL.CURRENT_VERTEX_ATTRIB. -// -// GetVertexAttribfv is available in GL version 2.0 or greater. -func (gl *GL) GetVertexAttribfv(index glbase.Attrib, pname glbase.Enum, params []float32) { - var params_c [4]float32 - C.gl3_1_glGetVertexAttribfv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetVertexAttribdv returns in params the value of a generic vertex attribute -// parameter. The generic vertex attribute to be queried is specified by -// index, and the parameter to be queried is specified by pname. -// -// The accepted parameter names are as follows: -// -// GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING -// params returns a single value, the name of the buffer object -// currently bound to the binding point corresponding to generic vertex -// attribute array index. If no buffer object is bound, 0 is returned. -// The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_ENABLED -// params returns a single value that is non-zero (true) if the vertex -// attribute array for index is enabled and 0 (false) if it is -// disabled. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_SIZE -// params returns a single value, the size of the vertex attribute -// array for index. The size is the number of values for each element -// of the vertex attribute array, and it will be 1, 2, 3, or 4. The -// initial value is 4. -// -// GL.VERTEX_ATTRIB_ARRAY_STRIDE -// params returns a single value, the array stride for (number of bytes -// between successive elements in) the vertex attribute array for -// index. A value of 0 indicates that the array elements are stored -// sequentially in memory. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_TYPE -// params returns a single value, a symbolic constant indicating the -// array type for the vertex attribute array for index. Possible values -// are GL.BYTE, GL.UNSIGNED_BYTE, GL.SHORT, GL.UNSIGNED_SHORT, GL.INT, -// GL.UNSIGNED_INT, GL.FLOAT, and GL.DOUBLE. The initial value is -// GL.FLOAT. -// -// GL.VERTEX_ATTRIB_ARRAY_NORMALIZED -// params returns a single value that is non-zero (true) if fixed-point -// data types for the vertex attribute array indicated by index are -// normalized when they are converted to floating point, and 0 (false) -// otherwise. The initial value is 0. -// -// GL.CURRENT_VERTEX_ATTRIB -// params returns four values that represent the current value for the -// generic vertex attribute specified by index. Generic vertex -// attribute 0 is unique in that it has no current state, so an error -// will be generated if index is 0. The initial value for all other -// generic vertex attributes is (0,0,0,1). -// -// All of the parameters except GL.CURRENT_VERTEX_ATTRIB represent -// client-side state. -// -// Error GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. GL.INVALID_ENUM is generated if pname is not an -// accepted value. GL.INVALID_OPERATION is generated if index is 0 and pname -// is GL.CURRENT_VERTEX_ATTRIB. -// -// GetVertexAttribdv is available in GL version 2.0 or greater. -func (gl *GL) GetVertexAttribdv(index glbase.Attrib, pname glbase.Enum, params []float64) { - var params_c [4]float64 - C.gl3_1_glGetVertexAttribdv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetUniformiv returns in params the value of the specified uniform -// variable. The type of the uniform variable specified by location -// determines the number of values returned. If the uniform variable is -// defined in the shader as a boolean, int, or float, a single value will be -// returned. If it is defined as a vec2, ivec2, or bvec2, two values will be -// returned. If it is defined as a vec3, ivec3, or bvec3, three values will -// be returned, and so on. To query values stored in uniform variables -// declared as arrays, call GetUniformiv for each element of the array. To -// query values stored in uniform variables declared as structures, call -// GetUniformiv for each field in the structure. The values for uniform -// variables declared as a matrix will be returned in column major order. -// -// The locations assigned to uniform variables are not known until the -// program object is linked. After linking has occurred, the command -// GetUniformLocation can be used to obtain the location of a uniform -// variable. This location value can then be passed to GetUniformiv in order -// to query the current value of the uniform variable. After a program object -// has been linked successfully, the index values for uniform variables -// remain fixed until the next link command occurs. The uniform variable -// values can only be queried after a link if the link was successful. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program -// object. GL.INVALID_OPERATION is generated if program has not been -// successfully linked. GL.INVALID_OPERATION is generated if location does -// not correspond to a valid uniform variable location for the specified -// program object. GL.INVALID_OPERATION is generated if GetUniformiv is -// executed between the execution of Begin and the corresponding execution of -// End. -// -// GetUniformiv is available in GL version 2.0 or greater. -func (gl *GL) GetUniformiv(program glbase.Program, location glbase.Uniform, params []int32) { - var params_c [4]int32 - C.gl3_1_glGetUniformiv(gl.funcs, C.GLuint(program), C.GLint(location), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetUniformfv returns in params the value of the specified uniform -// variable. The type of the uniform variable specified by location -// determines the number of values returned. If the uniform variable is -// defined in the shader as a boolean, int, or float, a single value will be -// returned. If it is defined as a vec2, ivec2, or bvec2, two values will be -// returned. If it is defined as a vec3, ivec3, or bvec3, three values will -// be returned, and so on. To query values stored in uniform variables -// declared as arrays, call GetUniformfv for each element of the array. To -// query values stored in uniform variables declared as structures, call -// GetUniformfv for each field in the structure. The values for uniform -// variables declared as a matrix will be returned in column major order. -// -// The locations assigned to uniform variables are not known until the -// program object is linked. After linking has occurred, the command -// GetUniformLocation can be used to obtain the location of a uniform -// variable. This location value can then be passed to GetUniformfv in order -// to query the current value of the uniform variable. After a program object -// has been linked successfully, the index values for uniform variables -// remain fixed until the next link command occurs. The uniform variable -// values can only be queried after a link if the link was successful. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program -// object. GL.INVALID_OPERATION is generated if program has not been -// successfully linked. GL.INVALID_OPERATION is generated if location does -// not correspond to a valid uniform variable location for the specified -// program object. GL.INVALID_OPERATION is generated if GetUniformfv is -// executed between the execution of Begin and the corresponding execution of -// End. -// -// GetUniformfv is available in GL version 2.0 or greater. -func (gl *GL) GetUniformfv(program glbase.Program, location glbase.Uniform, params []float32) { - var params_c [4]float32 - C.gl3_1_glGetUniformfv(gl.funcs, C.GLuint(program), C.GLint(location), (*C.GLfloat)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetUniformLocation returns an integer that represents the location of a -// specific uniform variable within a program object. name must be an active -// uniform variable name in program that is not a structure, an array of -// structures, or a subcomponent of a vector or a matrix. This function -// returns -1 if name does not correspond to an active uniform variable in -// program or if name starts with the reserved prefix "gl_". -// -// Uniform variables that are structures or arrays of structures may be -// queried by calling GetUniformLocation for each field within the -// structure. The array element operator "[]" and the structure field -// operator "." may be used in name in order to select elements within an -// array or fields within a structure. The result of using these operators is -// not allowed to be another structure, an array of structures, or a -// subcomponent of a vector or a matrix. Except if the last part of name -// indicates a uniform variable array, the location of the first element of -// an array can be retrieved by using the name of the array, or by using the -// name appended by "[0]". -// -// The actual locations assigned to uniform variables are not known until the -// program object is linked successfully. After linking has occurred, the -// command GetUniformLocation can be used to obtain the location of a -// uniform variable. This location value can then be passed to Uniform to -// set the value of the uniform variable or to GetUniform in order to query -// the current value of the uniform variable. After a program object has been -// linked successfully, the index values for uniform variables remain fixed -// until the next link command occurs. Uniform variable locations and values -// can only be queried after a link if the link was successful. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program object. -// GL.INVALID_OPERATION is generated if program has not been successfully -// linked. GL.INVALID_OPERATION is generated if GetUniformLocation is executed -// between the execution of Begin and the corresponding execution of End. -// -// GetUniformLocation is available in GL version 2.0 or greater. -func (gl *GL) GetUniformLocation(program glbase.Program, name string) glbase.Uniform { - name_cstr := C.CString(name) - glresult := C.gl3_1_glGetUniformLocation(gl.funcs, C.GLuint(program), (*C.GLchar)(name_cstr)) - C.free(unsafe.Pointer(name_cstr)) - return glbase.Uniform(glresult) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetShaderSource.xml -func (gl *GL) GetShaderSource(shader glbase.Shader, bufSize int32, length []int32, source []byte) { - C.gl3_1_glGetShaderSource(gl.funcs, C.GLuint(shader), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLchar)(unsafe.Pointer(&source[0]))) -} - -// GetShaderInfoLog returns the information log for the specified shader -// object. The information log for a shader object is modified when the -// shader is compiled. -// -// The information log for a shader object is a string that may contain -// diagnostic messages, warning messages, and other information about the -// last compile operation. When a shader object is created, its information -// log will be a string of length 0, and the size of the current log can be -// obtained by calling GetShaderiv with the value GL.INFO_LOG_LENGTH. -// -// The information log for a shader object is the OpenGL implementer's -// primary mechanism for conveying information about the compilation process. -// Therefore, the information log can be helpful to application developers -// during the development process, even when compilation is successful. -// Application developers should not expect different OpenGL implementations -// to produce identical information logs. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader is not a shader -// object. GL.INVALID_VALUE is generated if maxLength is less than 0. -// GL.INVALID_OPERATION is generated if GetShaderInfoLog is executed -// between the execution of Begin and the corresponding execution of End. -// -// GetShaderInfoLog is available in GL version 2.0 or greater. -func (gl *GL) GetShaderInfoLog(shader glbase.Shader) []byte { - var params [1]int32 - var length int32 - gl.GetShaderiv(shader, INFO_LOG_LENGTH, params[:]) - bufSize := params[0] - infoLog := make([]byte, int(bufSize)) - C.gl3_1_glGetShaderInfoLog(gl.funcs, C.GLuint(shader), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length)), (*C.GLchar)(unsafe.Pointer(&infoLog[0]))) - return infoLog -} - -// GetShaderiv GetShader returns in params the value of a parameter for a specific -// shader object. The following parameters are defined: -// -// GL.SHADER_TYPE -// params returns GL.VERTEX_SHADER if shader is a vertex shader object, -// and GL.FRAGMENT_SHADER if shader is a fragment shader object. -// -// GL.DELETE_STATUS -// params returns GL.TRUE if shader is currently flagged for deletion, -// and GL.FALSE otherwise. -// -// GL.COMPILE_STATUS -// params returns GL.TRUE if the last compile operation on shader was -// successful, and GL.FALSE otherwise. -// -// GL.INFO_LOG_LENGTH -// params returns the number of characters in the information log for -// shader including the null termination character (the size of the -// character buffer required to store the information log). If shader has -// no information log, a value of 0 is returned. -// -// GL.SHADER_SOURCE_LENGTH -// params returns the length of the concatenation of the source strings -// that make up the shader source for the shader, including the null -// termination character. (the size of the character buffer -// required to store the shader source). If no source code exists, 0 is -// returned. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader does not refer to a -// shader object. GL.INVALID_ENUM is generated if pname is not an accepted -// value. GL.INVALID_OPERATION is generated if GetShader is executed -// between the execution of Begin and the corresponding execution of End. -// -// GetShaderiv is available in GL version 2.0 or greater. -func (gl *GL) GetShaderiv(shader glbase.Shader, pname glbase.Enum, params []int32) { - var params_c [4]int32 - C.gl3_1_glGetShaderiv(gl.funcs, C.GLuint(shader), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetProgramInfoLog returns the information log for the specified program -// object. The information log for a program object is modified when the -// program object is linked or validated. -// -// The information log for a program object is either an empty string, or a -// string containing information about the last link operation, or a string -// containing information about the last validation operation. It may contain -// diagnostic messages, warning messages, and other information. When a -// program object is created, its information log will be a string of length -// 0, and the size of the current log can be obtained by calling GetProgramiv -// with the value GL.INFO_LOG_LENGTH. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated -// by OpenGL. GL.INVALID_OPERATION is generated if program is not a -// program object. -func (gl *GL) GetProgramInfoLog(program glbase.Program) []byte { - var params [1]int32 - var length int32 - gl.GetProgramiv(program, INFO_LOG_LENGTH, params[:]) - bufSize := params[0] - infoLog := make([]byte, int(bufSize)) - C.gl3_1_glGetProgramInfoLog(gl.funcs, C.GLuint(program), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length)), (*C.GLchar)(unsafe.Pointer(&infoLog[0]))) - return infoLog -} - -// GetProgramiv returns in params the value of a parameter for a specific -// program object. The following parameters are defined: -// -// GL.DELETE_STATUS -// params returns GL.TRUE if program is currently flagged for deletion, -// and GL.FALSE otherwise. -// -// GL.LINK_STATUS -// params returns GL.TRUE if the last link operation on program was -// successful, and GL.FALSE otherwise. -// -// GL.VALIDATE_STATUS -// params returns GL.TRUE or if the last validation operation on -// program was successful, and GL.FALSE otherwise. -// -// GL.INFO_LOG_LENGTH -// params returns the number of characters in the information log for -// program including the null termination character (the size of -// the character buffer required to store the information log). If -// program has no information log, a value of 0 is returned. -// -// GL.ATTACHED_SHADERS -// params returns the number of shader objects attached to program. -// -// GL.ACTIVE_ATTRIBUTES -// params returns the number of active attribute variables for program. -// -// GL.ACTIVE_ATTRIBUTE_MAX_LENGTH -// params returns the length of the longest active attribute name for -// program, including the null termination character (the size of -// the character buffer required to store the longest attribute name). -// If no active attributes exist, 0 is returned. -// -// GL.ACTIVE_UNIFORMS -// params returns the number of active uniform variables for program. -// -// GL.ACTIVE_UNIFORM_MAX_LENGTH -// params returns the length of the longest active uniform variable -// name for program, including the null termination character (i.e., -// the size of the character buffer required to store the longest -// uniform variable name). If no active uniform variables exist, 0 is -// returned. -// -// GL.TRANSFORM_FEEDBACK_BUFFER_MODE -// params returns a symbolic constant indicating the buffer mode used -// when transform feedback is active. This may be GL.SEPARATE_ATTRIBS -// or GL.INTERLEAVED_ATTRIBS. -// -// GL.TRANSFORM_FEEDBACK_VARYINGS -// params returns the number of varying variables to capture in transform -// feedback mode for the program. -// -// GL.TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH -// params returns the length of the longest variable name to be used for -// transform feedback, including the null-terminator. -// -// GL.GEOMETRY_VERTICES_OUT -// params returns the maximum number of vertices that the geometry shader in -// program will output. -// -// GL.GEOMETRY_INPUT_TYPE -// params returns a symbolic constant indicating the primitive type accepted -// as input to the geometry shader contained in program. -// -// GL.GEOMETRY_OUTPUT_TYPE -// params returns a symbolic constant indicating the primitive type that will -// be output by the geometry shader contained in program. -// -// GL.ACTIVE_UNIFORM_BLOCKS and GL.ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH are -// available only if the GL version 3.1 or greater. -// -// GL.GEOMETRY_VERTICES_OUT, GL.GEOMETRY_INPUT_TYPE and -// GL.GEOMETRY_OUTPUT_TYPE are accepted only if the GL version is 3.2 or -// greater. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program does not refer to a -// program object. GL.INVALID_OPERATION is generated if pname is -// GL.GEOMETRY_VERTICES_OUT, GL.GEOMETRY_INPUT_TYPE, or -// GL.GEOMETRY_OUTPUT_TYPE, and program does not contain a geometry shader. -// GL.INVALID_ENUM is generated if pname is not an accepted value. -func (gl *GL) GetProgramiv(program glbase.Program, pname glbase.Enum, params []int32) { - var params_c [4]int32 - C.gl3_1_glGetProgramiv(gl.funcs, C.GLuint(program), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetAttribLocation queries the previously linked program object specified -// by program for the attribute variable specified by name and returns the -// index of the generic vertex attribute that is bound to that attribute -// variable. If name is a matrix attribute variable, the index of the first -// column of the matrix is returned. If the named attribute variable is not -// an active attribute in the specified program object or if name starts with -// the reserved prefix "gl_", a value of -1 is returned. -// -// The association between an attribute variable name and a generic attribute -// index can be specified at any time by calling BindAttribLocation. -// Attribute bindings do not go into effect until LinkProgram is called. -// After a program object has been linked successfully, the index values for -// attribute variables remain fixed until the next link command occurs. The -// attribute values can only be queried after a link if the link was -// successful. GetAttribLocation returns the binding that actually went -// into effect the last time LinkProgram was called for the specified -// program object. Attribute bindings that have been specified since the last -// link operation are not returned by GetAttribLocation. -// -// Error GL_INVALID_OPERATION is generated if program is not a value -// generated by OpenGL. GL_INVALID_OPERATION is generated if program is not -// a program object. GL_INVALID_OPERATION is generated if program has not -// been successfully linked. GL_INVALID_OPERATION is generated if -// GetAttribLocation is executed between the execution of Begin and the -// corresponding execution of End. -// -// GetAttribLocation is available in GL version 2.0 or greater. -func (gl *GL) GetAttribLocation(program glbase.Program, name string) glbase.Attrib { - name_cstr := C.CString(name) - glresult := C.gl3_1_glGetAttribLocation(gl.funcs, C.GLuint(program), (*C.GLchar)(name_cstr)) - C.free(unsafe.Pointer(name_cstr)) - return glbase.Attrib(glresult) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetAttachedShaders.xml -func (gl *GL) GetAttachedShaders(program glbase.Program, maxCount int32, count []int, obj []uint32) { - C.gl3_1_glGetAttachedShaders(gl.funcs, C.GLuint(program), C.GLsizei(maxCount), (*C.GLsizei)(unsafe.Pointer(&count[0])), (*C.GLuint)(unsafe.Pointer(&obj[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetActiveUniform.xml -func (gl *GL) GetActiveUniform(program glbase.Program, index uint32, bufSize int32, length []int32, size []int, gltype []glbase.Enum, name []byte) { - C.gl3_1_glGetActiveUniform(gl.funcs, C.GLuint(program), C.GLuint(index), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLint)(unsafe.Pointer(&size[0])), (*C.GLenum)(unsafe.Pointer(&gltype[0])), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetActiveAttrib.xml -func (gl *GL) GetActiveAttrib(program glbase.Program, index glbase.Attrib, bufSize int32, length []int32, size []int, gltype []glbase.Enum, name []byte) { - C.gl3_1_glGetActiveAttrib(gl.funcs, C.GLuint(program), C.GLuint(index), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLint)(unsafe.Pointer(&size[0])), (*C.GLenum)(unsafe.Pointer(&gltype[0])), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEnableVertexAttribArray.xml -func (gl *GL) EnableVertexAttribArray(index glbase.Attrib) { - C.gl3_1_glEnableVertexAttribArray(gl.funcs, C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDisableVertexAttribArray.xml -func (gl *GL) DisableVertexAttribArray(index glbase.Attrib) { - C.gl3_1_glDisableVertexAttribArray(gl.funcs, C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDetachShader.xml -func (gl *GL) DetachShader(program glbase.Program, shader glbase.Shader) { - C.gl3_1_glDetachShader(gl.funcs, C.GLuint(program), C.GLuint(shader)) -} - -// DeleteShader frees the memory and invalidates the name associated with -// the shader object specified by shader. This command effectively undoes the -// effects of a call to CreateShader. -// -// If a shader object to be deleted is attached to a program object, it will -// be flagged for deletion, but it will not be deleted until it is no longer -// attached to any program object, for any rendering context (it must -// be detached from wherever it was attached before it will be deleted). A -// value of 0 for shader will be silently ignored. -// -// To determine whether an object has been flagged for deletion, call -// GetShader with arguments shader and GL.DELETE_STATUS. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. -// -// DeleteShader is available in GL version 2.0 or greater. -func (gl *GL) DeleteShader(shader glbase.Shader) { - C.gl3_1_glDeleteShader(gl.funcs, C.GLuint(shader)) -} - -// DeleteProgram frees the memory and invalidates the name associated with -// the program object specified by program. This command effectively undoes -// the effects of a call to CreateProgram. -// -// If a program object is in use as part of current rendering state, it will -// be flagged for deletion, but it will not be deleted until it is no longer -// part of current state for any rendering context. If a program object to be -// deleted has shader objects attached to it, those shader objects will be -// automatically detached but not deleted unless they have already been -// flagged for deletion by a previous call to DeleteShader. A value of 0 -// for program will be silently ignored. -// -// To determine whether a program object has been flagged for deletion, call -// GetProgram with arguments program and GL.DELETE_STATUS. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. -// -// DeleteProgram is available in GL version 2.0 or greater. -func (gl *GL) DeleteProgram(program glbase.Program) { - C.gl3_1_glDeleteProgram(gl.funcs, C.GLuint(program)) -} - -// CreateShader creates an empty shader object and returns a non-zero value -// by which it can be referenced. A shader object is used to maintain the -// source code strings that define a shader. shaderType indicates the type of -// shader to be created. -// -// Two types of shaders are supported. A shader of type GL.VERTEX_SHADER is a -// shader that is intended to run on the programmable vertex processor and -// replace the fixed functionality vertex processing in OpenGL. A shader of -// type GL.FRAGMENT_SHADER is a shader that is intended to run on the -// programmable fragment processor and replace the fixed functionality -// fragment processing in OpenGL. -// -// When created, a shader object's GL.SHADER_TYPE parameter is set to either -// GL.VERTEX_SHADER or GL.FRAGMENT_SHADER, depending on the value of -// shaderType. -// -// Like display lists and texture objects, the name space for shader objects -// may be shared across a set of contexts, as long as the server sides of the -// contexts share the same address space. If the name space is shared across -// contexts, any attached objects and the data associated with those attached -// objects are shared as well. -// -// This function returns 0 if an error occurs creating the shader object. -// -// Error GL.INVALID_ENUM is generated if shaderType is not an accepted value. -// GL.INVALID_OPERATION is generated if CreateShader is executed between the -// execution of Begin and the corresponding execution of End. -// -// CreateShader is available in GL version 2.0 or greater. -func (gl *GL) CreateShader(gltype glbase.Enum) glbase.Shader { - glresult := C.gl3_1_glCreateShader(gl.funcs, C.GLenum(gltype)) - return glbase.Shader(glresult) -} - -// CreateProgram creates an empty program object and returns a non-zero -// value by which it can be referenced. A program object is an object to -// which shader objects can be attached. This provides a mechanism to specify -// the shader objects that will be linked to create a program. It also -// provides a means for checking the compatibility of the shaders that will -// be used to create a program (for instance, checking the compatibility -// between a vertex shader and a fragment shader). When no longer needed as -// part of a program object, shader objects can be detached. -// -// One or more executables are created in a program object by successfully -// attaching shader objects to it with AttachShader, successfully compiling -// the shader objects with CompileShader, and successfully linking the -// program object with LinkProgram. These executables are made part of -// current state when UseProgram is called. Program objects can be deleted -// by calling DeleteProgram. The memory associated with the program object -// will be deleted when it is no longer part of current rendering state for -// any context. -// -// Like display lists and texture objects, the name space for program objects -// may be shared across a set of contexts, as long as the server sides of the -// contexts share the same address space. If the name space is shared across -// contexts, any attached objects and the data associated with those attached -// objects are shared as well. -// -// Applications are responsible for providing the synchronization across API -// calls when objects are accessed from different execution threads. -// -// This function returns 0 if an error occurs creating the program object. -// -// Error GL.INVALID_OPERATION is generated if CreateProgram is executed -// between the execution of Begin and the corresponding execution of End. -// -// CreateProgram is available in GL version 2.0 or greater. -func (gl *GL) CreateProgram() glbase.Program { - glresult := C.gl3_1_glCreateProgram(gl.funcs) - return glbase.Program(glresult) -} - -// CompileShader compiles the source code strings that have been stored in -// the shader object specified by shader. -// -// The compilation status will be stored as part of the shader object's -// state. This value will be set to GL.TRUE if the shader was compiled without -// errors and is ready for use, and GL.FALSE otherwise. It can be queried by -// calling GetShaderiv with arguments shader and GL.COMPILE_STATUS. -// -// Compilation of a shader can fail for a number of reasons as specified by -// the OpenGL Shading Language Specification. Whether or not the compilation -// was successful, information about the compilation can be obtained from the -// shader object's information log by calling GetShaderInfoLog. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader is not a shader -// object. GL.INVALID_OPERATION is generated if CompileShader is executed -// between the execution of Begin and the corresponding execution of End. -// -// CompileShader is available in GL version 2.0 or greater. -func (gl *GL) CompileShader(shader glbase.Shader) { - C.gl3_1_glCompileShader(gl.funcs, C.GLuint(shader)) -} - -// BindAttribLocation associates a user-defined attribute variable in the program -// object specified by program with a generic vertex attribute index. The name -// parameter specifies the name of the vertex shader attribute variable to -// which index is to be bound. When program is made part of the current state, -// values provided via the generic vertex attribute index will modify the -// value of the user-defined attribute variable specified by name. -// -// If name refers to a matrix attribute variable, index refers to the first -// column of the matrix. Other matrix columns are then automatically bound to -// locations index+1 for a matrix of type mat2; index+1 and index+2 for a -// matrix of type mat3; and index+1, index+2, and index+3 for a matrix of -// type mat4. -// -// This command makes it possible for vertex shaders to use descriptive names -// for attribute variables rather than generic variables that are numbered -// from 0 to GL.MAX_VERTEX_ATTRIBS-1. The values sent to each generic -// attribute index are part of current state, just like standard vertex -// attributes such as color, normal, and vertex position. If a different -// program object is made current by calling UseProgram, the generic vertex -// attributes are tracked in such a way that the same values will be observed -// by attributes in the new program object that are also bound to index. -// -// Attribute variable name-to-generic attribute index bindings for a program -// object can be explicitly assigned at any time by calling -// BindAttribLocation. Attribute bindings do not go into effect until -// LinkProgram is called. After a program object has been linked -// successfully, the index values for generic attributes remain fixed (and -// their values can be queried) until the next link command occurs. -// -// Applications are not allowed to bind any of the standard OpenGL vertex -// attributes using this command, as they are bound automatically when -// needed. Any attribute binding that occurs after the program object has -// been linked will not take effect until the next time the program object is -// linked. -// -// If name was bound previously, that information is lost. Thus you cannot -// bind one user-defined attribute variable to multiple indices, but you can -// bind multiple user-defined attribute variables to the same index. -// -// Applications are allowed to bind more than one user-defined attribute -// variable to the same generic vertex attribute index. This is called -// aliasing, and it is allowed only if just one of the aliased attributes is -// active in the executable program, or if no path through the shader -// consumes more than one attribute of a set of attributes aliased to the -// same location. The compiler and linker are allowed to assume that no -// aliasing is done and are free to employ optimizations that work only in -// the absence of aliasing. OpenGL implementations are not required to do -// error checking to detect aliasing. Because there is no way to bind -// standard attributes, it is not possible to alias generic attributes with -// conventional ones (except for generic attribute 0). -// -// BindAttribLocation can be called before any vertex shader objects are -// bound to the specified program object. It is also permissible to bind a -// generic attribute index to an attribute variable name that is never used -// in a vertex shader. -// -// Active attributes that are not explicitly bound will be bound by the -// linker when LinkProgram is called. The locations assigned can be queried -// by calling GetAttribLocation. -// -// Error GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. -// GL.INVALID_OPERATION is generated if name starts with the reserved prefix "gl_". -// GL.INVALID_VALUE is generated if program is not a value generated by OpenGL. -// GL.INVALID_OPERATION is generated if program is not a program object. -// GL.INVALID_OPERATION is generated if BindAttribLocation is executed -// between the execution of Begin and the corresponding execution of End. -// -// BindAttribLocation is available in GL version 2.0 or greater. -func (gl *GL) BindAttribLocation(program glbase.Program, index glbase.Attrib, name string) { - name_cstr := C.CString(name) - C.gl3_1_glBindAttribLocation(gl.funcs, C.GLuint(program), C.GLuint(index), (*C.GLchar)(name_cstr)) - C.free(unsafe.Pointer(name_cstr)) -} - -// AttachShader attaches a shader object to a program object. -// -// In order to create an executable, there must be a way to specify the list -// of things that will be linked together. Program objects provide this -// mechanism. Shaders that are to be linked together in a program object must -// first be attached to that program object. This indicates that shader will -// be included in link operations that will be performed on program. -// -// All operations that can be performed on a shader object are valid whether -// or not the shader object is attached to a program object. It is -// permissible to attach a shader object to a program object before source -// code has been loaded into the shader object or before the shader object -// has been compiled. It is permissible to attach multiple shader objects of -// the same type because each may contain a portion of the complete shader. -// It is also permissible to attach a shader object to more than one program -// object. If a shader object is deleted while it is attached to a program -// object, it will be flagged for deletion, and deletion will not occur until -// DetachShader is called to detach it from all program objects to which it -// is attached. -// -// Error GL.INVALID_VALUE is generated if either program or shader is not a -// value generated by OpenGL. GL.INVALID_OPERATION is generated if program -// is not a program object. GL.INVALID_OPERATION is generated if shader is -// not a shader object. GL.INVALID_OPERATION is generated if shader is -// already attached to program. GL.INVALID_OPERATION is generated if -// AttachShader is executed between the execution of Begin and the -// corresponding execution of End. -// -// AttachShader is available in GL version 2.0 or greater. -func (gl *GL) AttachShader(program glbase.Program, shader glbase.Shader) { - C.gl3_1_glAttachShader(gl.funcs, C.GLuint(program), C.GLuint(shader)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glStencilMaskSeparate.xml -func (gl *GL) StencilMaskSeparate(face glbase.Enum, mask uint32) { - C.gl3_1_glStencilMaskSeparate(gl.funcs, C.GLenum(face), C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glStencilFuncSeparate.xml -func (gl *GL) StencilFuncSeparate(face, glfunc glbase.Enum, ref int32, mask uint32) { - C.gl3_1_glStencilFuncSeparate(gl.funcs, C.GLenum(face), C.GLenum(glfunc), C.GLint(ref), C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glStencilOpSeparate.xml -func (gl *GL) StencilOpSeparate(face, sfail, dpfail, dppass glbase.Enum) { - C.gl3_1_glStencilOpSeparate(gl.funcs, C.GLenum(face), C.GLenum(sfail), C.GLenum(dpfail), C.GLenum(dppass)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDrawBuffers.xml -func (gl *GL) DrawBuffers(n int, bufs []glbase.Enum) { - C.gl3_1_glDrawBuffers(gl.funcs, C.GLsizei(n), (*C.GLenum)(unsafe.Pointer(&bufs[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBlendEquationSeparate.xml -func (gl *GL) BlendEquationSeparate(modeRGB, modeAlpha glbase.Enum) { - C.gl3_1_glBlendEquationSeparate(gl.funcs, C.GLenum(modeRGB), C.GLenum(modeAlpha)) -} - -// UniformMatrix4x3fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix4x3fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix4x3fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(4*3) != 0 { - panic("invalid value length for UniformMatrix4x3fv") - } - count := len(value) / (4 * 3) - C.gl3_1_glUniformMatrix4x3fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix3x4fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix3x4fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix3x4fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(3*4) != 0 { - panic("invalid value length for UniformMatrix3x4fv") - } - count := len(value) / (3 * 4) - C.gl3_1_glUniformMatrix3x4fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix4x2fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix4x2fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix4x2fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(4*2) != 0 { - panic("invalid value length for UniformMatrix4x2fv") - } - count := len(value) / (4 * 2) - C.gl3_1_glUniformMatrix4x2fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix2x4fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix2x4fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix2x4fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(2*4) != 0 { - panic("invalid value length for UniformMatrix2x4fv") - } - count := len(value) / (2 * 4) - C.gl3_1_glUniformMatrix2x4fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix3x2fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix3x2fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix3x2fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(3*2) != 0 { - panic("invalid value length for UniformMatrix3x2fv") - } - count := len(value) / (3 * 2) - C.gl3_1_glUniformMatrix3x2fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix2x3fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix2x3fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix2x3fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(2*3) != 0 { - panic("invalid value length for UniformMatrix2x3fv") - } - count := len(value) / (2 * 3) - C.gl3_1_glUniformMatrix2x3fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsVertexArray.xml -func (gl *GL) IsVertexArray(array uint32) bool { - glresult := C.gl3_1_glIsVertexArray(gl.funcs, C.GLuint(array)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGenVertexArrays.xml -func (gl *GL) GenVertexArrays(n int, arrays []uint32) { - C.gl3_1_glGenVertexArrays(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&arrays[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDeleteVertexArrays.xml -func (gl *GL) DeleteVertexArrays(n int, arrays []uint32) { - C.gl3_1_glDeleteVertexArrays(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&arrays[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBindVertexArray.xml -func (gl *GL) BindVertexArray(array uint32) { - C.gl3_1_glBindVertexArray(gl.funcs, C.GLuint(array)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFlushMappedBufferRange.xml -func (gl *GL) FlushMappedBufferRange(target glbase.Enum, offset, length int) { - C.gl3_1_glFlushMappedBufferRange(gl.funcs, C.GLenum(target), C.GLintptr(offset), C.GLsizeiptr(length)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFramebufferTextureLayer.xml -func (gl *GL) FramebufferTextureLayer(target, attachment glbase.Enum, texture glbase.Texture, level int, layer int32) { - C.gl3_1_glFramebufferTextureLayer(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLuint(texture), C.GLint(level), C.GLint(layer)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRenderbufferStorageMultisample.xml -func (gl *GL) RenderbufferStorageMultisample(target glbase.Enum, samples int32, internalFormat glbase.Enum, width, height int) { - C.gl3_1_glRenderbufferStorageMultisample(gl.funcs, C.GLenum(target), C.GLsizei(samples), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBlitFramebuffer.xml -func (gl *GL) BlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1 int32, mask glbase.Bitfield, filter glbase.Enum) { - C.gl3_1_glBlitFramebuffer(gl.funcs, C.GLint(srcX0), C.GLint(srcY0), C.GLint(srcX1), C.GLint(srcY1), C.GLint(dstX0), C.GLint(dstY0), C.GLint(dstX1), C.GLint(dstY1), C.GLbitfield(mask), C.GLenum(filter)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGenerateMipmap.xml -func (gl *GL) GenerateMipmap(target glbase.Enum) { - C.gl3_1_glGenerateMipmap(gl.funcs, C.GLenum(target)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetFramebufferAttachmentParameteriv.xml -func (gl *GL) GetFramebufferAttachmentParameteriv(target, attachment, pname glbase.Enum, params []int32) { - C.gl3_1_glGetFramebufferAttachmentParameteriv(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFramebufferRenderbuffer.xml -func (gl *GL) FramebufferRenderbuffer(target, attachment, renderbuffertarget glbase.Enum, renderbuffer glbase.Renderbuffer) { - C.gl3_1_glFramebufferRenderbuffer(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(renderbuffertarget), C.GLuint(renderbuffer)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFramebufferTexture3D.xml -func (gl *GL) FramebufferTexture3D(target, attachment, textarget glbase.Enum, texture glbase.Texture, level int, zoffset int32) { - C.gl3_1_glFramebufferTexture3D(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(textarget), C.GLuint(texture), C.GLint(level), C.GLint(zoffset)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFramebufferTexture2D.xml -func (gl *GL) FramebufferTexture2D(target, attachment, textarget glbase.Enum, texture glbase.Texture, level int) { - C.gl3_1_glFramebufferTexture2D(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(textarget), C.GLuint(texture), C.GLint(level)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFramebufferTexture1D.xml -func (gl *GL) FramebufferTexture1D(target, attachment, textarget glbase.Enum, texture glbase.Texture, level int) { - C.gl3_1_glFramebufferTexture1D(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(textarget), C.GLuint(texture), C.GLint(level)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCheckFramebufferStatus.xml -func (gl *GL) CheckFramebufferStatus(target glbase.Enum) glbase.Enum { - glresult := C.gl3_1_glCheckFramebufferStatus(gl.funcs, C.GLenum(target)) - return glbase.Enum(glresult) -} - -// GenFramebuffers returns n framebuffer object names in ids. There is no -// guarantee that the names form a contiguous set of integers; however, it is -// guaranteed that none of the returned names was in use immediately before -// the call to GenFramebuffers. -// -// Framebuffer object names returned by a call to GenFramebuffers are not -// returned by subsequent calls, unless they are first deleted with -// DeleteFramebuffers. -// -// The names returned in ids are marked as used, for the purposes of -// GenFramebuffers only, but they acquire state and type only when they are -// first bound. -// -// Error GL.INVALID_VALUE is generated if n is negative. -func (gl *GL) GenFramebuffers(n int) []glbase.Framebuffer { - if n == 0 { - return nil - } - framebuffers := make([]glbase.Framebuffer, n) - C.gl3_1_glGenFramebuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&framebuffers[0]))) - return framebuffers -} - -// DeleteFramebuffers deletes the framebuffer objects whose names are -// stored in the framebuffers slice. The name zero is reserved by the GL and -// is silently ignored, should it occur in framebuffers, as are other unused -// names. Once a framebuffer object is deleted, its name is again unused and -// it has no attachments. If a framebuffer that is currently bound to one or -// more of the targets GL.DRAW_FRAMEBUFFER or GL.READ_FRAMEBUFFER is deleted, -// it is as though BindFramebuffer had been executed with the corresponding -// target and framebuffer zero. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// DeleteFramebuffers is available in GL version 3.0 or greater. -func (gl *GL) DeleteFramebuffers(framebuffers []glbase.Framebuffer) { - n := len(framebuffers) - if n == 0 { - return - } - C.gl3_1_glDeleteFramebuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&framebuffers[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBindFramebuffer.xml -func (gl *GL) BindFramebuffer(target glbase.Enum, framebuffer glbase.Framebuffer) { - C.gl3_1_glBindFramebuffer(gl.funcs, C.GLenum(target), C.GLuint(framebuffer)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsFramebuffer.xml -func (gl *GL) IsFramebuffer(framebuffer glbase.Framebuffer) bool { - glresult := C.gl3_1_glIsFramebuffer(gl.funcs, C.GLuint(framebuffer)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetRenderbufferParameteriv.xml -func (gl *GL) GetRenderbufferParameteriv(target, pname glbase.Enum, params []int32) { - C.gl3_1_glGetRenderbufferParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRenderbufferStorage.xml -func (gl *GL) RenderbufferStorage(target, internalFormat glbase.Enum, width, height int) { - C.gl3_1_glRenderbufferStorage(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height)) -} - -// GenRenderbuffers returns n renderbuffer object names in renderbuffers. -// There is no guarantee that the names form a contiguous set of integers; -// however, it is guaranteed that none of the returned names was in use -// immediately before the call to GenRenderbuffers. -// -// Renderbuffer object names returned by a call to GenRenderbuffers are not -// returned by subsequent calls, unless they are first deleted with -// DeleteRenderbuffers. -// -// The names returned in renderbuffers are marked as used, for the purposes -// of GenRenderbuffers only, but they acquire state and type only when they -// are first bound. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// GenRenderbuffers is available in GL version 3.0 or greater. -func (gl *GL) GenRenderbuffers(n int) []glbase.Renderbuffer { - if n == 0 { - return nil - } - renderbuffers := make([]glbase.Renderbuffer, n) - C.gl3_1_glGenRenderbuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&renderbuffers[0]))) - return renderbuffers -} - -// DeleteRenderbuffers deletes the renderbuffer objects whose names are stored -// in the renderbuffers slice. The name zero is reserved by the GL and -// is silently ignored, should it occur in renderbuffers, as are other unused -// names. Once a renderbuffer object is deleted, its name is again unused and -// it has no contents. If a renderbuffer that is currently bound to the -// target GL.RENDERBUFFER is deleted, it is as though BindRenderbuffer had -// been executed with a target of GL.RENDERBUFFER and a name of zero. -// -// If a renderbuffer object is attached to one or more attachment points in -// the currently bound framebuffer, then it as if FramebufferRenderbuffer -// had been called, with a renderbuffer of zero for each attachment point to -// which this image was attached in the currently bound framebuffer. In other -// words, this renderbuffer object is first detached from all attachment -// ponits in the currently bound framebuffer. Note that the renderbuffer -// image is specifically not detached from any non-bound framebuffers. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// DeleteRenderbuffers is available in GL version 3.0 or greater. -func (gl *GL) DeleteRenderbuffers(renderbuffers []glbase.Renderbuffer) { - n := len(renderbuffers) - if n == 0 { - return - } - C.gl3_1_glDeleteRenderbuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&renderbuffers[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBindRenderbuffer.xml -func (gl *GL) BindRenderbuffer(target glbase.Enum, renderbuffer glbase.Renderbuffer) { - C.gl3_1_glBindRenderbuffer(gl.funcs, C.GLenum(target), C.GLuint(renderbuffer)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsRenderbuffer.xml -func (gl *GL) IsRenderbuffer(renderbuffer glbase.Renderbuffer) bool { - glresult := C.gl3_1_glIsRenderbuffer(gl.funcs, C.GLuint(renderbuffer)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClearBufferfi.xml -func (gl *GL) ClearBufferfi(buffer glbase.Enum, drawbuffer int32, depth float32, stencil int32) { - C.gl3_1_glClearBufferfi(gl.funcs, C.GLenum(buffer), C.GLint(drawbuffer), C.GLfloat(depth), C.GLint(stencil)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClearBufferfv.xml -func (gl *GL) ClearBufferfv(buffer glbase.Enum, drawbuffer int32, value []float32) { - C.gl3_1_glClearBufferfv(gl.funcs, C.GLenum(buffer), C.GLint(drawbuffer), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClearBufferuiv.xml -func (gl *GL) ClearBufferuiv(buffer glbase.Enum, drawbuffer int32, value []uint32) { - C.gl3_1_glClearBufferuiv(gl.funcs, C.GLenum(buffer), C.GLint(drawbuffer), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClearBufferiv.xml -func (gl *GL) ClearBufferiv(buffer glbase.Enum, drawbuffer int32, value []int32) { - C.gl3_1_glClearBufferiv(gl.funcs, C.GLenum(buffer), C.GLint(drawbuffer), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetTexParameterIuiv.xml -func (gl *GL) GetTexParameterIuiv(target, pname glbase.Enum, params []uint32) { - C.gl3_1_glGetTexParameterIuiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetTexParameterIiv.xml -func (gl *GL) GetTexParameterIiv(target, pname glbase.Enum, params []int32) { - C.gl3_1_glGetTexParameterIiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexParameterIuiv.xml -func (gl *GL) TexParameterIuiv(target, pname glbase.Enum, params []uint32) { - C.gl3_1_glTexParameterIuiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexParameterIiv.xml -func (gl *GL) TexParameterIiv(target, pname glbase.Enum, params []int32) { - C.gl3_1_glTexParameterIiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// Uniform4uiv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform4uiv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4uiv(location glbase.Uniform, value []uint32) { - if len(value) == 0 { - return - } - if len(value)%4 != 0 { - panic("invalid value length for Uniform4uiv") - } - count := len(value) / 4 - C.gl3_1_glUniform4uiv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// Uniform3uiv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform3uiv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3uiv(location glbase.Uniform, value []uint32) { - if len(value) == 0 { - return - } - if len(value)%3 != 0 { - panic("invalid value length for Uniform3uiv") - } - count := len(value) / 3 - C.gl3_1_glUniform3uiv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// Uniform2uiv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform2uiv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2uiv(location glbase.Uniform, value []uint32) { - if len(value) == 0 { - return - } - if len(value)%2 != 0 { - panic("invalid value length for Uniform2uiv") - } - count := len(value) / 2 - C.gl3_1_glUniform2uiv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// Uniform1uiv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform1uiv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1uiv(location glbase.Uniform, value []uint32) { - if len(value) == 0 { - return - } - count := len(value) - C.gl3_1_glUniform1uiv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// Uniform4ui modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform4ui operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4ui(location glbase.Uniform, v0, v1, v2, v3 uint32) { - C.gl3_1_glUniform4ui(gl.funcs, C.GLint(location), C.GLuint(v0), C.GLuint(v1), C.GLuint(v2), C.GLuint(v3)) -} - -// Uniform3ui modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform3ui operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3ui(location glbase.Uniform, v0, v1, v2 uint32) { - C.gl3_1_glUniform3ui(gl.funcs, C.GLint(location), C.GLuint(v0), C.GLuint(v1), C.GLuint(v2)) -} - -// Uniform2ui modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform2ui operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2ui(location glbase.Uniform, v0, v1 uint32) { - C.gl3_1_glUniform2ui(gl.funcs, C.GLint(location), C.GLuint(v0), C.GLuint(v1)) -} - -// Uniform1ui modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform1ui operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1ui(location glbase.Uniform, v0 uint32) { - C.gl3_1_glUniform1ui(gl.funcs, C.GLint(location), C.GLuint(v0)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetFragDataLocation.xml -func (gl *GL) GetFragDataLocation(program glbase.Program, name []byte) int32 { - glresult := C.gl3_1_glGetFragDataLocation(gl.funcs, C.GLuint(program), (*C.GLchar)(unsafe.Pointer(&name[0]))) - return int32(glresult) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBindFragDataLocation.xml -func (gl *GL) BindFragDataLocation(program glbase.Program, color uint32, name []byte) { - C.gl3_1_glBindFragDataLocation(gl.funcs, C.GLuint(program), C.GLuint(color), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetUniformuiv.xml -func (gl *GL) GetUniformuiv(program glbase.Program, location glbase.Uniform, params []uint32) { - C.gl3_1_glGetUniformuiv(gl.funcs, C.GLuint(program), C.GLint(location), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetVertexAttribIuiv.xml -func (gl *GL) GetVertexAttribIuiv(index glbase.Attrib, pname glbase.Enum, params []uint32) { - C.gl3_1_glGetVertexAttribIuiv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetVertexAttribIiv.xml -func (gl *GL) GetVertexAttribIiv(index glbase.Attrib, pname glbase.Enum, params []int32) { - C.gl3_1_glGetVertexAttribIiv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribIPointer.xml -func (gl *GL) VertexAttribIPointer(index glbase.Attrib, size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl3_1_glVertexAttribIPointer(gl.funcs, C.GLuint(index), C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEndConditionalRender.xml -func (gl *GL) EndConditionalRender() { - C.gl3_1_glEndConditionalRender(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBeginConditionalRender.xml -func (gl *GL) BeginConditionalRender(id uint32, mode glbase.Enum) { - C.gl3_1_glBeginConditionalRender(gl.funcs, C.GLuint(id), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClampColor.xml -func (gl *GL) ClampColor(target, clamp glbase.Enum) { - C.gl3_1_glClampColor(gl.funcs, C.GLenum(target), C.GLenum(clamp)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetTransformFeedbackVarying.xml -func (gl *GL) GetTransformFeedbackVarying(program glbase.Program, index uint32, bufSize int32, length []int32, size []int, gltype []glbase.Enum, name []byte) { - C.gl3_1_glGetTransformFeedbackVarying(gl.funcs, C.GLuint(program), C.GLuint(index), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLsizei)(unsafe.Pointer(&size[0])), (*C.GLenum)(unsafe.Pointer(&gltype[0])), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBindBufferBase.xml -func (gl *GL) BindBufferBase(target glbase.Enum, index uint32, buffer glbase.Buffer) { - C.gl3_1_glBindBufferBase(gl.funcs, C.GLenum(target), C.GLuint(index), C.GLuint(buffer)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBindBufferRange.xml -func (gl *GL) BindBufferRange(target glbase.Enum, index uint32, buffer glbase.Buffer, offset, size int) { - C.gl3_1_glBindBufferRange(gl.funcs, C.GLenum(target), C.GLuint(index), C.GLuint(buffer), C.GLintptr(offset), C.GLsizeiptr(size)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEndTransformFeedback.xml -func (gl *GL) EndTransformFeedback() { - C.gl3_1_glEndTransformFeedback(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBeginTransformFeedback.xml -func (gl *GL) BeginTransformFeedback(primitiveMode glbase.Enum) { - C.gl3_1_glBeginTransformFeedback(gl.funcs, C.GLenum(primitiveMode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsEnabledi.xml -func (gl *GL) IsEnabledi(target glbase.Enum, index uint32) bool { - glresult := C.gl3_1_glIsEnabledi(gl.funcs, C.GLenum(target), C.GLuint(index)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDisablei.xml -func (gl *GL) Disablei(target glbase.Enum, index uint32) { - C.gl3_1_glDisablei(gl.funcs, C.GLenum(target), C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEnablei.xml -func (gl *GL) Enablei(target glbase.Enum, index uint32) { - C.gl3_1_glEnablei(gl.funcs, C.GLenum(target), C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetIntegeri_v.xml -func (gl *GL) GetIntegeri_v(target glbase.Enum, index uint32, data []int32) { - C.gl3_1_glGetIntegeri_v(gl.funcs, C.GLenum(target), C.GLuint(index), (*C.GLint)(unsafe.Pointer(&data[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetBooleani_v.xml -func (gl *GL) GetBooleani_v(target glbase.Enum, index uint32, data []bool) { - C.gl3_1_glGetBooleani_v(gl.funcs, C.GLenum(target), C.GLuint(index), (*C.GLboolean)(unsafe.Pointer(&data[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColorMaski.xml -func (gl *GL) ColorMaski(index uint32, r, g, b, a bool) { - C.gl3_1_glColorMaski(gl.funcs, C.GLuint(index), *(*C.GLboolean)(unsafe.Pointer(&r)), *(*C.GLboolean)(unsafe.Pointer(&g)), *(*C.GLboolean)(unsafe.Pointer(&b)), *(*C.GLboolean)(unsafe.Pointer(&a))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCopyBufferSubData.xml -func (gl *GL) CopyBufferSubData(readTarget, writeTarget glbase.Enum, readOffset, writeOffset, size int) { - C.gl3_1_glCopyBufferSubData(gl.funcs, C.GLenum(readTarget), C.GLenum(writeTarget), C.GLintptr(readOffset), C.GLintptr(writeOffset), C.GLsizeiptr(size)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glUniformBlockBinding.xml -func (gl *GL) UniformBlockBinding(program glbase.Program, v0, v1 uint32) { - C.gl3_1_glUniformBlockBinding(gl.funcs, C.GLuint(program), C.GLuint(v0), C.GLuint(v1)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetActiveUniformBlockName.xml -func (gl *GL) GetActiveUniformBlockName(program glbase.Program, uniformBlockIndex uint32, bufSize int32, length []int32, uniformBlockName []byte) { - C.gl3_1_glGetActiveUniformBlockName(gl.funcs, C.GLuint(program), C.GLuint(uniformBlockIndex), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLchar)(unsafe.Pointer(&uniformBlockName[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetActiveUniformBlockiv.xml -func (gl *GL) GetActiveUniformBlockiv(program glbase.Program, uniformBlockIndex uint32, pname glbase.Enum, params []int32) { - C.gl3_1_glGetActiveUniformBlockiv(gl.funcs, C.GLuint(program), C.GLuint(uniformBlockIndex), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetUniformBlockIndex.xml -func (gl *GL) GetUniformBlockIndex(program glbase.Program, uniformBlockName []byte) uint32 { - glresult := C.gl3_1_glGetUniformBlockIndex(gl.funcs, C.GLuint(program), (*C.GLchar)(unsafe.Pointer(&uniformBlockName[0]))) - return uint32(glresult) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetActiveUniformName.xml -func (gl *GL) GetActiveUniformName(program glbase.Program, uniformIndex uint32, bufSize int32, length []int32, uniformName []byte) { - C.gl3_1_glGetActiveUniformName(gl.funcs, C.GLuint(program), C.GLuint(uniformIndex), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLchar)(unsafe.Pointer(&uniformName[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetActiveUniformsiv.xml -func (gl *GL) GetActiveUniformsiv(program glbase.Program, uniformCount int32, uniformIndices []uint32, pname glbase.Enum, params []int32) { - C.gl3_1_glGetActiveUniformsiv(gl.funcs, C.GLuint(program), C.GLsizei(uniformCount), (*C.GLuint)(unsafe.Pointer(&uniformIndices[0])), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPrimitiveRestartIndex.xml -func (gl *GL) PrimitiveRestartIndex(index uint32) { - C.gl3_1_glPrimitiveRestartIndex(gl.funcs, C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexBuffer.xml -func (gl *GL) TexBuffer(target, internalFormat glbase.Enum, buffer glbase.Buffer) { - C.gl3_1_glTexBuffer(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLuint(buffer)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDrawElementsInstanced.xml -func (gl *GL) DrawElementsInstanced(mode glbase.Enum, count int, gltype glbase.Enum, indices interface{}, instancecount int32) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl3_1_glDrawElementsInstanced(gl.funcs, C.GLenum(mode), C.GLsizei(count), C.GLenum(gltype), indices_ptr, C.GLsizei(instancecount)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDrawArraysInstanced.xml -func (gl *GL) DrawArraysInstanced(mode glbase.Enum, first, count int, instancecount int32) { - C.gl3_1_glDrawArraysInstanced(gl.funcs, C.GLenum(mode), C.GLint(first), C.GLsizei(count), C.GLsizei(instancecount)) -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/3.2compat/funcs.cpp b/Godeps/_workspace/src/github.com/obscuren/qml/gl/3.2compat/funcs.cpp deleted file mode 100644 index c35066eba0..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/3.2compat/funcs.cpp +++ /dev/null @@ -1,4140 +0,0 @@ - -// ** file automatically generated by glgen -- do not edit manually ** - -#include -#include - -#include "funcs.h" - -void *gl3_2compat_funcs() { - QOpenGLFunctions_3_2_Compatibility* funcs = QOpenGLContext::currentContext()->versionFunctions(); - if (!funcs) { - return 0; - } - funcs->initializeOpenGLFunctions(); - return funcs; -} - - -void gl3_2compat_glViewport(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glViewport(x, y, width, height); -} - -void gl3_2compat_glDepthRange(void *_glfuncs, GLdouble nearVal, GLdouble farVal) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthRange(nearVal, farVal); -} - -GLboolean gl3_2compat_glIsEnabled(void *_glfuncs, GLenum cap) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsEnabled(cap); -} - -void gl3_2compat_glGetTexLevelParameteriv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexLevelParameteriv(target, level, pname, params); -} - -void gl3_2compat_glGetTexLevelParameterfv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexLevelParameterfv(target, level, pname, params); -} - -void gl3_2compat_glGetTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameteriv(target, pname, params); -} - -void gl3_2compat_glGetTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameterfv(target, pname, params); -} - -void gl3_2compat_glGetTexImage(void *_glfuncs, GLenum target, GLint level, GLenum format, GLenum gltype, GLvoid* pixels) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexImage(target, level, format, gltype, pixels); -} - -void gl3_2compat_glGetIntegerv(void *_glfuncs, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetIntegerv(pname, params); -} - -void gl3_2compat_glGetFloatv(void *_glfuncs, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetFloatv(pname, params); -} - -GLenum gl3_2compat_glGetError(void *_glfuncs) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetError(); -} - -void gl3_2compat_glGetDoublev(void *_glfuncs, GLenum pname, GLdouble* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetDoublev(pname, params); -} - -void gl3_2compat_glGetBooleanv(void *_glfuncs, GLenum pname, GLboolean* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBooleanv(pname, params); -} - -void gl3_2compat_glReadPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum gltype, GLvoid* pixels) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glReadPixels(x, y, width, height, format, gltype, pixels); -} - -void gl3_2compat_glReadBuffer(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glReadBuffer(mode); -} - -void gl3_2compat_glPixelStorei(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelStorei(pname, param); -} - -void gl3_2compat_glPixelStoref(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelStoref(pname, param); -} - -void gl3_2compat_glDepthFunc(void *_glfuncs, GLenum glfunc) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthFunc(glfunc); -} - -void gl3_2compat_glStencilOp(void *_glfuncs, GLenum fail, GLenum zfail, GLenum zpass) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilOp(fail, zfail, zpass); -} - -void gl3_2compat_glStencilFunc(void *_glfuncs, GLenum glfunc, GLint ref, GLuint mask) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilFunc(glfunc, ref, mask); -} - -void gl3_2compat_glLogicOp(void *_glfuncs, GLenum opcode) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLogicOp(opcode); -} - -void gl3_2compat_glBlendFunc(void *_glfuncs, GLenum sfactor, GLenum dfactor) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendFunc(sfactor, dfactor); -} - -void gl3_2compat_glFlush(void *_glfuncs) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFlush(); -} - -void gl3_2compat_glFinish(void *_glfuncs) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFinish(); -} - -void gl3_2compat_glEnable(void *_glfuncs, GLenum cap) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnable(cap); -} - -void gl3_2compat_glDisable(void *_glfuncs, GLenum cap) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDisable(cap); -} - -void gl3_2compat_glDepthMask(void *_glfuncs, GLboolean flag) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthMask(flag); -} - -void gl3_2compat_glColorMask(void *_glfuncs, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorMask(red, green, blue, alpha); -} - -void gl3_2compat_glStencilMask(void *_glfuncs, GLuint mask) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilMask(mask); -} - -void gl3_2compat_glClearDepth(void *_glfuncs, GLdouble depth) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearDepth(depth); -} - -void gl3_2compat_glClearStencil(void *_glfuncs, GLint s) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearStencil(s); -} - -void gl3_2compat_glClearColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearColor(red, green, blue, alpha); -} - -void gl3_2compat_glClear(void *_glfuncs, GLbitfield mask) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClear(mask); -} - -void gl3_2compat_glDrawBuffer(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawBuffer(mode); -} - -void gl3_2compat_glTexImage2D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage2D(target, level, internalFormat, width, height, border, format, gltype, pixels); -} - -void gl3_2compat_glTexImage1D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage1D(target, level, internalFormat, width, border, format, gltype, pixels); -} - -void gl3_2compat_glTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameteriv(target, pname, params); -} - -void gl3_2compat_glTexParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint param) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameteri(target, pname, param); -} - -void gl3_2compat_glTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterfv(target, pname, params); -} - -void gl3_2compat_glTexParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterf(target, pname, param); -} - -void gl3_2compat_glScissor(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScissor(x, y, width, height); -} - -void gl3_2compat_glPolygonMode(void *_glfuncs, GLenum face, GLenum mode) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPolygonMode(face, mode); -} - -void gl3_2compat_glPointSize(void *_glfuncs, GLfloat size) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointSize(size); -} - -void gl3_2compat_glLineWidth(void *_glfuncs, GLfloat width) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLineWidth(width); -} - -void gl3_2compat_glHint(void *_glfuncs, GLenum target, GLenum mode) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glHint(target, mode); -} - -void gl3_2compat_glFrontFace(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFrontFace(mode); -} - -void gl3_2compat_glCullFace(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCullFace(mode); -} - -void gl3_2compat_glIndexubv(void *_glfuncs, const GLubyte* c) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexubv(c); -} - -void gl3_2compat_glIndexub(void *_glfuncs, GLubyte c) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexub(c); -} - -GLboolean gl3_2compat_glIsTexture(void *_glfuncs, GLuint texture) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsTexture(texture); -} - -void gl3_2compat_glGenTextures(void *_glfuncs, GLsizei n, GLuint* textures) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenTextures(n, textures); -} - -void gl3_2compat_glDeleteTextures(void *_glfuncs, GLsizei n, const GLuint* textures) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteTextures(n, textures); -} - -void gl3_2compat_glBindTexture(void *_glfuncs, GLenum target, GLuint texture) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindTexture(target, texture); -} - -void gl3_2compat_glTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, gltype, pixels); -} - -void gl3_2compat_glTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexSubImage1D(target, level, xoffset, width, format, gltype, pixels); -} - -void gl3_2compat_glCopyTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height); -} - -void gl3_2compat_glCopyTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexSubImage1D(target, level, xoffset, x, y, width); -} - -void gl3_2compat_glCopyTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexImage2D(target, level, internalFormat, x, y, width, height, border); -} - -void gl3_2compat_glCopyTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexImage1D(target, level, internalFormat, x, y, width, border); -} - -void gl3_2compat_glPolygonOffset(void *_glfuncs, GLfloat factor, GLfloat units) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPolygonOffset(factor, units); -} - -void gl3_2compat_glDrawElements(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElements(mode, count, gltype, indices); -} - -void gl3_2compat_glDrawArrays(void *_glfuncs, GLenum mode, GLint first, GLsizei count) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawArrays(mode, first, count); -} - -void gl3_2compat_glCopyTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexSubImage3D(target, level, xoffset, yoffset, zoffset, x, y, width, height); -} - -void gl3_2compat_glTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, gltype, pixels); -} - -void gl3_2compat_glTexImage3D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage3D(target, level, internalFormat, width, height, depth, border, format, gltype, pixels); -} - -void gl3_2compat_glDrawRangeElements(void *_glfuncs, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum gltype, const GLvoid* indices) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawRangeElements(mode, start, end, count, gltype, indices); -} - -void gl3_2compat_glBlendEquation(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendEquation(mode); -} - -void gl3_2compat_glBlendColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendColor(red, green, blue, alpha); -} - -void gl3_2compat_glGetCompressedTexImage(void *_glfuncs, GLenum target, GLint level, GLvoid* img) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetCompressedTexImage(target, level, img); -} - -void gl3_2compat_glCompressedTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexSubImage1D(target, level, xoffset, width, format, imageSize, data); -} - -void gl3_2compat_glCompressedTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data); -} - -void gl3_2compat_glCompressedTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data); -} - -void gl3_2compat_glCompressedTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexImage1D(target, level, internalFormat, width, border, imageSize, data); -} - -void gl3_2compat_glCompressedTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexImage2D(target, level, internalFormat, width, height, border, imageSize, data); -} - -void gl3_2compat_glCompressedTexImage3D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexImage3D(target, level, internalFormat, width, height, depth, border, imageSize, data); -} - -void gl3_2compat_glSampleCoverage(void *_glfuncs, GLfloat value, GLboolean invert) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSampleCoverage(value, invert); -} - -void gl3_2compat_glActiveTexture(void *_glfuncs, GLenum texture) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glActiveTexture(texture); -} - -void gl3_2compat_glPointParameteriv(void *_glfuncs, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameteriv(pname, params); -} - -void gl3_2compat_glPointParameteri(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameteri(pname, param); -} - -void gl3_2compat_glPointParameterfv(void *_glfuncs, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameterfv(pname, params); -} - -void gl3_2compat_glPointParameterf(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameterf(pname, param); -} - -void gl3_2compat_glMultiDrawArrays(void *_glfuncs, GLenum mode, const GLint* first, const GLsizei* count, GLsizei drawcount) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiDrawArrays(mode, first, count, drawcount); -} - -void gl3_2compat_glBlendFuncSeparate(void *_glfuncs, GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendFuncSeparate(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha); -} - -void gl3_2compat_glGetBufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBufferParameteriv(target, pname, params); -} - -GLboolean gl3_2compat_glUnmapBuffer(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glUnmapBuffer(target); -} - -void gl3_2compat_glGetBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, GLvoid* data) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBufferSubData(target, offset, size, data); -} - -void gl3_2compat_glBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBufferSubData(target, offset, size, data); -} - -void gl3_2compat_glBufferData(void *_glfuncs, GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBufferData(target, size, data, usage); -} - -GLboolean gl3_2compat_glIsBuffer(void *_glfuncs, GLuint buffer) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsBuffer(buffer); -} - -void gl3_2compat_glGenBuffers(void *_glfuncs, GLsizei n, GLuint* buffers) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenBuffers(n, buffers); -} - -void gl3_2compat_glDeleteBuffers(void *_glfuncs, GLsizei n, const GLuint* buffers) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteBuffers(n, buffers); -} - -void gl3_2compat_glBindBuffer(void *_glfuncs, GLenum target, GLuint buffer) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindBuffer(target, buffer); -} - -void gl3_2compat_glGetQueryObjectuiv(void *_glfuncs, GLuint id, GLenum pname, GLuint* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryObjectuiv(id, pname, params); -} - -void gl3_2compat_glGetQueryObjectiv(void *_glfuncs, GLuint id, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryObjectiv(id, pname, params); -} - -void gl3_2compat_glGetQueryiv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryiv(target, pname, params); -} - -void gl3_2compat_glEndQuery(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndQuery(target); -} - -void gl3_2compat_glBeginQuery(void *_glfuncs, GLenum target, GLuint id) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBeginQuery(target, id); -} - -GLboolean gl3_2compat_glIsQuery(void *_glfuncs, GLuint id) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsQuery(id); -} - -void gl3_2compat_glDeleteQueries(void *_glfuncs, GLsizei n, const GLuint* ids) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteQueries(n, ids); -} - -void gl3_2compat_glGenQueries(void *_glfuncs, GLsizei n, GLuint* ids) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenQueries(n, ids); -} - -void gl3_2compat_glVertexAttribPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLboolean normalized, GLsizei stride, const GLvoid* offset) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribPointer(index, size, gltype, normalized, stride, offset); -} - -void gl3_2compat_glValidateProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glValidateProgram(program); -} - -void gl3_2compat_glUniformMatrix4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4fv(location, count, transpose, value); -} - -void gl3_2compat_glUniformMatrix3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3fv(location, count, transpose, value); -} - -void gl3_2compat_glUniformMatrix2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2fv(location, count, transpose, value); -} - -void gl3_2compat_glUniform4iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4iv(location, count, value); -} - -void gl3_2compat_glUniform3iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3iv(location, count, value); -} - -void gl3_2compat_glUniform2iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2iv(location, count, value); -} - -void gl3_2compat_glUniform1iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1iv(location, count, value); -} - -void gl3_2compat_glUniform4fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4fv(location, count, value); -} - -void gl3_2compat_glUniform3fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3fv(location, count, value); -} - -void gl3_2compat_glUniform2fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2fv(location, count, value); -} - -void gl3_2compat_glUniform1fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1fv(location, count, value); -} - -void gl3_2compat_glUniform4i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2, GLint v3) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4i(location, v0, v1, v2, v3); -} - -void gl3_2compat_glUniform3i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3i(location, v0, v1, v2); -} - -void gl3_2compat_glUniform2i(void *_glfuncs, GLint location, GLint v0, GLint v1) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2i(location, v0, v1); -} - -void gl3_2compat_glUniform1i(void *_glfuncs, GLint location, GLint v0) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1i(location, v0); -} - -void gl3_2compat_glUniform4f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4f(location, v0, v1, v2, v3); -} - -void gl3_2compat_glUniform3f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3f(location, v0, v1, v2); -} - -void gl3_2compat_glUniform2f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2f(location, v0, v1); -} - -void gl3_2compat_glUniform1f(void *_glfuncs, GLint location, GLfloat v0) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1f(location, v0); -} - -void gl3_2compat_glUseProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUseProgram(program); -} - -void gl3_2compat_glShaderSource(void *_glfuncs, GLuint shader, GLsizei count, const GLchar** source, const GLint* length) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glShaderSource(shader, count, source, length); -} - -void gl3_2compat_glLinkProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLinkProgram(program); -} - -GLboolean gl3_2compat_glIsShader(void *_glfuncs, GLuint shader) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsShader(shader); -} - -GLboolean gl3_2compat_glIsProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsProgram(program); -} - -void gl3_2compat_glGetVertexAttribiv(void *_glfuncs, GLuint index, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribiv(index, pname, params); -} - -void gl3_2compat_glGetVertexAttribfv(void *_glfuncs, GLuint index, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribfv(index, pname, params); -} - -void gl3_2compat_glGetVertexAttribdv(void *_glfuncs, GLuint index, GLenum pname, GLdouble* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribdv(index, pname, params); -} - -void gl3_2compat_glGetUniformiv(void *_glfuncs, GLuint program, GLint location, GLint* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetUniformiv(program, location, params); -} - -void gl3_2compat_glGetUniformfv(void *_glfuncs, GLuint program, GLint location, GLfloat* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetUniformfv(program, location, params); -} - -GLint gl3_2compat_glGetUniformLocation(void *_glfuncs, GLuint program, const GLchar* name) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetUniformLocation(program, name); -} - -void gl3_2compat_glGetShaderSource(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* source) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetShaderSource(shader, bufSize, length, source); -} - -void gl3_2compat_glGetShaderInfoLog(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* infoLog) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetShaderInfoLog(shader, bufSize, length, infoLog); -} - -void gl3_2compat_glGetShaderiv(void *_glfuncs, GLuint shader, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetShaderiv(shader, pname, params); -} - -void gl3_2compat_glGetProgramInfoLog(void *_glfuncs, GLuint program, GLsizei bufSize, GLsizei* length, GLchar* infoLog) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetProgramInfoLog(program, bufSize, length, infoLog); -} - -void gl3_2compat_glGetProgramiv(void *_glfuncs, GLuint program, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetProgramiv(program, pname, params); -} - -GLint gl3_2compat_glGetAttribLocation(void *_glfuncs, GLuint program, const GLchar* name) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetAttribLocation(program, name); -} - -void gl3_2compat_glGetAttachedShaders(void *_glfuncs, GLuint program, GLsizei maxCount, GLsizei* count, GLuint* obj) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetAttachedShaders(program, maxCount, count, obj); -} - -void gl3_2compat_glGetActiveUniform(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniform(program, index, bufSize, length, size, gltype, name); -} - -void gl3_2compat_glGetActiveAttrib(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveAttrib(program, index, bufSize, length, size, gltype, name); -} - -void gl3_2compat_glEnableVertexAttribArray(void *_glfuncs, GLuint index) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnableVertexAttribArray(index); -} - -void gl3_2compat_glDisableVertexAttribArray(void *_glfuncs, GLuint index) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDisableVertexAttribArray(index); -} - -void gl3_2compat_glDetachShader(void *_glfuncs, GLuint program, GLuint shader) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDetachShader(program, shader); -} - -void gl3_2compat_glDeleteShader(void *_glfuncs, GLuint shader) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteShader(shader); -} - -void gl3_2compat_glDeleteProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteProgram(program); -} - -GLuint gl3_2compat_glCreateShader(void *_glfuncs, GLenum gltype) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glCreateShader(gltype); -} - -GLuint gl3_2compat_glCreateProgram(void *_glfuncs) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glCreateProgram(); -} - -void gl3_2compat_glCompileShader(void *_glfuncs, GLuint shader) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompileShader(shader); -} - -void gl3_2compat_glBindAttribLocation(void *_glfuncs, GLuint program, GLuint index, const GLchar* name) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindAttribLocation(program, index, name); -} - -void gl3_2compat_glAttachShader(void *_glfuncs, GLuint program, GLuint shader) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glAttachShader(program, shader); -} - -void gl3_2compat_glStencilMaskSeparate(void *_glfuncs, GLenum face, GLuint mask) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilMaskSeparate(face, mask); -} - -void gl3_2compat_glStencilFuncSeparate(void *_glfuncs, GLenum face, GLenum glfunc, GLint ref, GLuint mask) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilFuncSeparate(face, glfunc, ref, mask); -} - -void gl3_2compat_glStencilOpSeparate(void *_glfuncs, GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilOpSeparate(face, sfail, dpfail, dppass); -} - -void gl3_2compat_glDrawBuffers(void *_glfuncs, GLsizei n, const GLenum* bufs) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawBuffers(n, bufs); -} - -void gl3_2compat_glBlendEquationSeparate(void *_glfuncs, GLenum modeRGB, GLenum modeAlpha) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendEquationSeparate(modeRGB, modeAlpha); -} - -void gl3_2compat_glUniformMatrix4x3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4x3fv(location, count, transpose, value); -} - -void gl3_2compat_glUniformMatrix3x4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3x4fv(location, count, transpose, value); -} - -void gl3_2compat_glUniformMatrix4x2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4x2fv(location, count, transpose, value); -} - -void gl3_2compat_glUniformMatrix2x4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2x4fv(location, count, transpose, value); -} - -void gl3_2compat_glUniformMatrix3x2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3x2fv(location, count, transpose, value); -} - -void gl3_2compat_glUniformMatrix2x3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2x3fv(location, count, transpose, value); -} - -GLboolean gl3_2compat_glIsVertexArray(void *_glfuncs, GLuint array) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsVertexArray(array); -} - -void gl3_2compat_glGenVertexArrays(void *_glfuncs, GLsizei n, GLuint* arrays) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenVertexArrays(n, arrays); -} - -void gl3_2compat_glDeleteVertexArrays(void *_glfuncs, GLsizei n, const GLuint* arrays) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteVertexArrays(n, arrays); -} - -void gl3_2compat_glBindVertexArray(void *_glfuncs, GLuint array) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindVertexArray(array); -} - -void gl3_2compat_glFlushMappedBufferRange(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr length) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFlushMappedBufferRange(target, offset, length); -} - -void gl3_2compat_glFramebufferTextureLayer(void *_glfuncs, GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTextureLayer(target, attachment, texture, level, layer); -} - -void gl3_2compat_glRenderbufferStorageMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRenderbufferStorageMultisample(target, samples, internalFormat, width, height); -} - -void gl3_2compat_glBlitFramebuffer(void *_glfuncs, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter); -} - -void gl3_2compat_glGenerateMipmap(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenerateMipmap(target); -} - -void gl3_2compat_glGetFramebufferAttachmentParameteriv(void *_glfuncs, GLenum target, GLenum attachment, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetFramebufferAttachmentParameteriv(target, attachment, pname, params); -} - -void gl3_2compat_glFramebufferRenderbuffer(void *_glfuncs, GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer); -} - -void gl3_2compat_glFramebufferTexture3D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTexture3D(target, attachment, textarget, texture, level, zoffset); -} - -void gl3_2compat_glFramebufferTexture2D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTexture2D(target, attachment, textarget, texture, level); -} - -void gl3_2compat_glFramebufferTexture1D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTexture1D(target, attachment, textarget, texture, level); -} - -GLenum gl3_2compat_glCheckFramebufferStatus(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glCheckFramebufferStatus(target); -} - -void gl3_2compat_glGenFramebuffers(void *_glfuncs, GLsizei n, GLuint* framebuffers) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenFramebuffers(n, framebuffers); -} - -void gl3_2compat_glDeleteFramebuffers(void *_glfuncs, GLsizei n, const GLuint* framebuffers) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteFramebuffers(n, framebuffers); -} - -void gl3_2compat_glBindFramebuffer(void *_glfuncs, GLenum target, GLuint framebuffer) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindFramebuffer(target, framebuffer); -} - -GLboolean gl3_2compat_glIsFramebuffer(void *_glfuncs, GLuint framebuffer) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsFramebuffer(framebuffer); -} - -void gl3_2compat_glGetRenderbufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetRenderbufferParameteriv(target, pname, params); -} - -void gl3_2compat_glRenderbufferStorage(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRenderbufferStorage(target, internalFormat, width, height); -} - -void gl3_2compat_glGenRenderbuffers(void *_glfuncs, GLsizei n, GLuint* renderbuffers) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenRenderbuffers(n, renderbuffers); -} - -void gl3_2compat_glDeleteRenderbuffers(void *_glfuncs, GLsizei n, const GLuint* renderbuffers) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteRenderbuffers(n, renderbuffers); -} - -void gl3_2compat_glBindRenderbuffer(void *_glfuncs, GLenum target, GLuint renderbuffer) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindRenderbuffer(target, renderbuffer); -} - -GLboolean gl3_2compat_glIsRenderbuffer(void *_glfuncs, GLuint renderbuffer) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsRenderbuffer(renderbuffer); -} - -void gl3_2compat_glClearBufferfi(void *_glfuncs, GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearBufferfi(buffer, drawbuffer, depth, stencil); -} - -void gl3_2compat_glClearBufferfv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLfloat* value) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearBufferfv(buffer, drawbuffer, value); -} - -void gl3_2compat_glClearBufferuiv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLuint* value) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearBufferuiv(buffer, drawbuffer, value); -} - -void gl3_2compat_glClearBufferiv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLint* value) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearBufferiv(buffer, drawbuffer, value); -} - -void gl3_2compat_glGetTexParameterIuiv(void *_glfuncs, GLenum target, GLenum pname, GLuint* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameterIuiv(target, pname, params); -} - -void gl3_2compat_glGetTexParameterIiv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameterIiv(target, pname, params); -} - -void gl3_2compat_glTexParameterIuiv(void *_glfuncs, GLenum target, GLenum pname, const GLuint* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterIuiv(target, pname, params); -} - -void gl3_2compat_glTexParameterIiv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterIiv(target, pname, params); -} - -void gl3_2compat_glUniform4uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4uiv(location, count, value); -} - -void gl3_2compat_glUniform3uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3uiv(location, count, value); -} - -void gl3_2compat_glUniform2uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2uiv(location, count, value); -} - -void gl3_2compat_glUniform1uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1uiv(location, count, value); -} - -void gl3_2compat_glUniform4ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4ui(location, v0, v1, v2, v3); -} - -void gl3_2compat_glUniform3ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1, GLuint v2) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3ui(location, v0, v1, v2); -} - -void gl3_2compat_glUniform2ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2ui(location, v0, v1); -} - -void gl3_2compat_glUniform1ui(void *_glfuncs, GLint location, GLuint v0) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1ui(location, v0); -} - -GLint gl3_2compat_glGetFragDataLocation(void *_glfuncs, GLuint program, const GLchar* name) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetFragDataLocation(program, name); -} - -void gl3_2compat_glBindFragDataLocation(void *_glfuncs, GLuint program, GLuint color, const GLchar* name) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindFragDataLocation(program, color, name); -} - -void gl3_2compat_glGetUniformuiv(void *_glfuncs, GLuint program, GLint location, GLuint* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetUniformuiv(program, location, params); -} - -void gl3_2compat_glGetVertexAttribIuiv(void *_glfuncs, GLuint index, GLenum pname, GLuint* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribIuiv(index, pname, params); -} - -void gl3_2compat_glGetVertexAttribIiv(void *_glfuncs, GLuint index, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribIiv(index, pname, params); -} - -void gl3_2compat_glVertexAttribIPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribIPointer(index, size, gltype, stride, pointer); -} - -void gl3_2compat_glEndConditionalRender(void *_glfuncs) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndConditionalRender(); -} - -void gl3_2compat_glBeginConditionalRender(void *_glfuncs, GLuint id, GLenum mode) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBeginConditionalRender(id, mode); -} - -void gl3_2compat_glClampColor(void *_glfuncs, GLenum target, GLenum clamp) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClampColor(target, clamp); -} - -void gl3_2compat_glGetTransformFeedbackVarying(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* gltype, GLchar* name) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTransformFeedbackVarying(program, index, bufSize, length, size, gltype, name); -} - -void gl3_2compat_glBindBufferBase(void *_glfuncs, GLenum target, GLuint index, GLuint buffer) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindBufferBase(target, index, buffer); -} - -void gl3_2compat_glBindBufferRange(void *_glfuncs, GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindBufferRange(target, index, buffer, offset, size); -} - -void gl3_2compat_glEndTransformFeedback(void *_glfuncs) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndTransformFeedback(); -} - -void gl3_2compat_glBeginTransformFeedback(void *_glfuncs, GLenum primitiveMode) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBeginTransformFeedback(primitiveMode); -} - -GLboolean gl3_2compat_glIsEnabledi(void *_glfuncs, GLenum target, GLuint index) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsEnabledi(target, index); -} - -void gl3_2compat_glDisablei(void *_glfuncs, GLenum target, GLuint index) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDisablei(target, index); -} - -void gl3_2compat_glEnablei(void *_glfuncs, GLenum target, GLuint index) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnablei(target, index); -} - -void gl3_2compat_glGetIntegeri_v(void *_glfuncs, GLenum target, GLuint index, GLint* data) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetIntegeri_v(target, index, data); -} - -void gl3_2compat_glGetBooleani_v(void *_glfuncs, GLenum target, GLuint index, GLboolean* data) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBooleani_v(target, index, data); -} - -void gl3_2compat_glColorMaski(void *_glfuncs, GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorMaski(index, r, g, b, a); -} - -void gl3_2compat_glCopyBufferSubData(void *_glfuncs, GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyBufferSubData(readTarget, writeTarget, readOffset, writeOffset, size); -} - -void gl3_2compat_glUniformBlockBinding(void *_glfuncs, GLuint program, GLuint v0, GLuint v1) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformBlockBinding(program, v0, v1); -} - -void gl3_2compat_glGetActiveUniformBlockName(void *_glfuncs, GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformBlockName) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniformBlockName(program, uniformBlockIndex, bufSize, length, uniformBlockName); -} - -void gl3_2compat_glGetActiveUniformBlockiv(void *_glfuncs, GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniformBlockiv(program, uniformBlockIndex, pname, params); -} - -GLuint gl3_2compat_glGetUniformBlockIndex(void *_glfuncs, GLuint program, const GLchar* uniformBlockName) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetUniformBlockIndex(program, uniformBlockName); -} - -void gl3_2compat_glGetActiveUniformName(void *_glfuncs, GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformName) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniformName(program, uniformIndex, bufSize, length, uniformName); -} - -void gl3_2compat_glGetActiveUniformsiv(void *_glfuncs, GLuint program, GLsizei uniformCount, const GLuint* uniformIndices, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniformsiv(program, uniformCount, uniformIndices, pname, params); -} - -void gl3_2compat_glPrimitiveRestartIndex(void *_glfuncs, GLuint index) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPrimitiveRestartIndex(index); -} - -void gl3_2compat_glTexBuffer(void *_glfuncs, GLenum target, GLenum internalFormat, GLuint buffer) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexBuffer(target, internalFormat, buffer); -} - -void gl3_2compat_glDrawElementsInstanced(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLsizei instancecount) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElementsInstanced(mode, count, gltype, indices, instancecount); -} - -void gl3_2compat_glDrawArraysInstanced(void *_glfuncs, GLenum mode, GLint first, GLsizei count, GLsizei instancecount) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawArraysInstanced(mode, first, count, instancecount); -} - -void gl3_2compat_glSampleMaski(void *_glfuncs, GLuint index, GLbitfield mask) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSampleMaski(index, mask); -} - -void gl3_2compat_glGetMultisamplefv(void *_glfuncs, GLenum pname, GLuint index, GLfloat* val) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMultisamplefv(pname, index, val); -} - -void gl3_2compat_glTexImage3DMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage3DMultisample(target, samples, internalFormat, width, height, depth, fixedsamplelocations); -} - -void gl3_2compat_glTexImage2DMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage2DMultisample(target, samples, internalFormat, width, height, fixedsamplelocations); -} - -void gl3_2compat_glGetSynciv(void *_glfuncs, GLsync sync, GLenum pname, GLsizei bufSize, GLsizei* length, GLint* values) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetSynciv(sync, pname, bufSize, length, values); -} - -void gl3_2compat_glGetInteger64v(void *_glfuncs, GLenum pname, GLint64* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetInteger64v(pname, params); -} - -void gl3_2compat_glWaitSync(void *_glfuncs, GLsync sync, GLbitfield flags, GLuint64 timeout) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWaitSync(sync, flags, timeout); -} - -GLenum gl3_2compat_glClientWaitSync(void *_glfuncs, GLsync sync, GLbitfield flags, GLuint64 timeout) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glClientWaitSync(sync, flags, timeout); -} - -void gl3_2compat_glDeleteSync(void *_glfuncs, GLsync sync) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteSync(sync); -} - -GLboolean gl3_2compat_glIsSync(void *_glfuncs, GLsync sync) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsSync(sync); -} - -GLsync gl3_2compat_glFenceSync(void *_glfuncs, GLenum condition, GLbitfield flags) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glFenceSync(condition, flags); -} - -void gl3_2compat_glProvokingVertex(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProvokingVertex(mode); -} - -void gl3_2compat_glDrawElementsInstancedBaseVertex(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLsizei instancecount, GLint basevertex) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElementsInstancedBaseVertex(mode, count, gltype, indices, instancecount, basevertex); -} - -void gl3_2compat_glDrawRangeElementsBaseVertex(void *_glfuncs, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum gltype, const GLvoid* indices, GLint basevertex) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawRangeElementsBaseVertex(mode, start, end, count, gltype, indices, basevertex); -} - -void gl3_2compat_glDrawElementsBaseVertex(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLint basevertex) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElementsBaseVertex(mode, count, gltype, indices, basevertex); -} - -void gl3_2compat_glFramebufferTexture(void *_glfuncs, GLenum target, GLenum attachment, GLuint texture, GLint level) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTexture(target, attachment, texture, level); -} - -void gl3_2compat_glGetBufferParameteri64v(void *_glfuncs, GLenum target, GLenum pname, GLint64* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBufferParameteri64v(target, pname, params); -} - -void gl3_2compat_glGetInteger64i_v(void *_glfuncs, GLenum target, GLuint index, GLint64* data) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetInteger64i_v(target, index, data); -} - -void gl3_2compat_glTranslatef(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTranslatef(x, y, z); -} - -void gl3_2compat_glTranslated(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTranslated(x, y, z); -} - -void gl3_2compat_glScalef(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScalef(x, y, z); -} - -void gl3_2compat_glScaled(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScaled(x, y, z); -} - -void gl3_2compat_glRotatef(void *_glfuncs, GLfloat angle, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRotatef(angle, x, y, z); -} - -void gl3_2compat_glRotated(void *_glfuncs, GLdouble angle, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRotated(angle, x, y, z); -} - -void gl3_2compat_glPushMatrix(void *_glfuncs) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPushMatrix(); -} - -void gl3_2compat_glPopMatrix(void *_glfuncs) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPopMatrix(); -} - -void gl3_2compat_glOrtho(void *_glfuncs, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glOrtho(left, right, bottom, top, zNear, zFar); -} - -void gl3_2compat_glMultMatrixd(void *_glfuncs, const GLdouble* m) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultMatrixd(m); -} - -void gl3_2compat_glMultMatrixf(void *_glfuncs, const GLfloat* m) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultMatrixf(m); -} - -void gl3_2compat_glMatrixMode(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMatrixMode(mode); -} - -void gl3_2compat_glLoadMatrixd(void *_glfuncs, const GLdouble* m) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadMatrixd(m); -} - -void gl3_2compat_glLoadMatrixf(void *_glfuncs, const GLfloat* m) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadMatrixf(m); -} - -void gl3_2compat_glLoadIdentity(void *_glfuncs) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadIdentity(); -} - -void gl3_2compat_glFrustum(void *_glfuncs, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFrustum(left, right, bottom, top, zNear, zFar); -} - -GLboolean gl3_2compat_glIsList(void *_glfuncs, GLuint list) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsList(list); -} - -void gl3_2compat_glGetTexGeniv(void *_glfuncs, GLenum coord, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexGeniv(coord, pname, params); -} - -void gl3_2compat_glGetTexGenfv(void *_glfuncs, GLenum coord, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexGenfv(coord, pname, params); -} - -void gl3_2compat_glGetTexGendv(void *_glfuncs, GLenum coord, GLenum pname, GLdouble* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexGendv(coord, pname, params); -} - -void gl3_2compat_glGetTexEnviv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexEnviv(target, pname, params); -} - -void gl3_2compat_glGetTexEnvfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexEnvfv(target, pname, params); -} - -void gl3_2compat_glGetPolygonStipple(void *_glfuncs, GLubyte* mask) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetPolygonStipple(mask); -} - -void gl3_2compat_glGetPixelMapusv(void *_glfuncs, GLenum glmap, GLushort* values) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetPixelMapusv(glmap, values); -} - -void gl3_2compat_glGetPixelMapuiv(void *_glfuncs, GLenum glmap, GLuint* values) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetPixelMapuiv(glmap, values); -} - -void gl3_2compat_glGetPixelMapfv(void *_glfuncs, GLenum glmap, GLfloat* values) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetPixelMapfv(glmap, values); -} - -void gl3_2compat_glGetMaterialiv(void *_glfuncs, GLenum face, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMaterialiv(face, pname, params); -} - -void gl3_2compat_glGetMaterialfv(void *_glfuncs, GLenum face, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMaterialfv(face, pname, params); -} - -void gl3_2compat_glGetMapiv(void *_glfuncs, GLenum target, GLenum query, GLint* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMapiv(target, query, v); -} - -void gl3_2compat_glGetMapfv(void *_glfuncs, GLenum target, GLenum query, GLfloat* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMapfv(target, query, v); -} - -void gl3_2compat_glGetMapdv(void *_glfuncs, GLenum target, GLenum query, GLdouble* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMapdv(target, query, v); -} - -void gl3_2compat_glGetLightiv(void *_glfuncs, GLenum light, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetLightiv(light, pname, params); -} - -void gl3_2compat_glGetLightfv(void *_glfuncs, GLenum light, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetLightfv(light, pname, params); -} - -void gl3_2compat_glGetClipPlane(void *_glfuncs, GLenum plane, GLdouble* equation) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetClipPlane(plane, equation); -} - -void gl3_2compat_glDrawPixels(void *_glfuncs, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawPixels(width, height, format, gltype, pixels); -} - -void gl3_2compat_glCopyPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum gltype) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyPixels(x, y, width, height, gltype); -} - -void gl3_2compat_glPixelMapusv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLushort* values) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelMapusv(glmap, mapsize, values); -} - -void gl3_2compat_glPixelMapuiv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLuint* values) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelMapuiv(glmap, mapsize, values); -} - -void gl3_2compat_glPixelMapfv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLfloat* values) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelMapfv(glmap, mapsize, values); -} - -void gl3_2compat_glPixelTransferi(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelTransferi(pname, param); -} - -void gl3_2compat_glPixelTransferf(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelTransferf(pname, param); -} - -void gl3_2compat_glPixelZoom(void *_glfuncs, GLfloat xfactor, GLfloat yfactor) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelZoom(xfactor, yfactor); -} - -void gl3_2compat_glAlphaFunc(void *_glfuncs, GLenum glfunc, GLfloat ref) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glAlphaFunc(glfunc, ref); -} - -void gl3_2compat_glEvalPoint2(void *_glfuncs, GLint i, GLint j) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalPoint2(i, j); -} - -void gl3_2compat_glEvalMesh2(void *_glfuncs, GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalMesh2(mode, i1, i2, j1, j2); -} - -void gl3_2compat_glEvalPoint1(void *_glfuncs, GLint i) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalPoint1(i); -} - -void gl3_2compat_glEvalMesh1(void *_glfuncs, GLenum mode, GLint i1, GLint i2) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalMesh1(mode, i1, i2); -} - -void gl3_2compat_glEvalCoord2fv(void *_glfuncs, const GLfloat* u) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord2fv(u); -} - -void gl3_2compat_glEvalCoord2f(void *_glfuncs, GLfloat u, GLfloat v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord2f(u, v); -} - -void gl3_2compat_glEvalCoord2dv(void *_glfuncs, const GLdouble* u) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord2dv(u); -} - -void gl3_2compat_glEvalCoord2d(void *_glfuncs, GLdouble u, GLdouble v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord2d(u, v); -} - -void gl3_2compat_glEvalCoord1fv(void *_glfuncs, const GLfloat* u) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord1fv(u); -} - -void gl3_2compat_glEvalCoord1f(void *_glfuncs, GLfloat u) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord1f(u); -} - -void gl3_2compat_glEvalCoord1dv(void *_glfuncs, const GLdouble* u) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord1dv(u); -} - -void gl3_2compat_glEvalCoord1d(void *_glfuncs, GLdouble u) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord1d(u); -} - -void gl3_2compat_glMapGrid2f(void *_glfuncs, GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMapGrid2f(un, u1, u2, vn, v1, v2); -} - -void gl3_2compat_glMapGrid2d(void *_glfuncs, GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMapGrid2d(un, u1, u2, vn, v1, v2); -} - -void gl3_2compat_glMapGrid1f(void *_glfuncs, GLint un, GLfloat u1, GLfloat u2) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMapGrid1f(un, u1, u2); -} - -void gl3_2compat_glMapGrid1d(void *_glfuncs, GLint un, GLdouble u1, GLdouble u2) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMapGrid1d(un, u1, u2); -} - -void gl3_2compat_glMap2f(void *_glfuncs, GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat* points) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMap2f(target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points); -} - -void gl3_2compat_glMap2d(void *_glfuncs, GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble* points) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMap2d(target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points); -} - -void gl3_2compat_glMap1f(void *_glfuncs, GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat* points) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMap1f(target, u1, u2, stride, order, points); -} - -void gl3_2compat_glMap1d(void *_glfuncs, GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble* points) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMap1d(target, u1, u2, stride, order, points); -} - -void gl3_2compat_glPushAttrib(void *_glfuncs, GLbitfield mask) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPushAttrib(mask); -} - -void gl3_2compat_glPopAttrib(void *_glfuncs) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPopAttrib(); -} - -void gl3_2compat_glAccum(void *_glfuncs, GLenum op, GLfloat value) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glAccum(op, value); -} - -void gl3_2compat_glIndexMask(void *_glfuncs, GLuint mask) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexMask(mask); -} - -void gl3_2compat_glClearIndex(void *_glfuncs, GLfloat c) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearIndex(c); -} - -void gl3_2compat_glClearAccum(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearAccum(red, green, blue, alpha); -} - -void gl3_2compat_glPushName(void *_glfuncs, GLuint name) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPushName(name); -} - -void gl3_2compat_glPopName(void *_glfuncs) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPopName(); -} - -void gl3_2compat_glPassThrough(void *_glfuncs, GLfloat token) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPassThrough(token); -} - -void gl3_2compat_glLoadName(void *_glfuncs, GLuint name) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadName(name); -} - -void gl3_2compat_glInitNames(void *_glfuncs) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glInitNames(); -} - -GLint gl3_2compat_glRenderMode(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glRenderMode(mode); -} - -void gl3_2compat_glSelectBuffer(void *_glfuncs, GLsizei size, GLuint* buffer) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSelectBuffer(size, buffer); -} - -void gl3_2compat_glFeedbackBuffer(void *_glfuncs, GLsizei size, GLenum gltype, GLfloat* buffer) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFeedbackBuffer(size, gltype, buffer); -} - -void gl3_2compat_glTexGeniv(void *_glfuncs, GLenum coord, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGeniv(coord, pname, params); -} - -void gl3_2compat_glTexGeni(void *_glfuncs, GLenum coord, GLenum pname, GLint param) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGeni(coord, pname, param); -} - -void gl3_2compat_glTexGenfv(void *_glfuncs, GLenum coord, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGenfv(coord, pname, params); -} - -void gl3_2compat_glTexGenf(void *_glfuncs, GLenum coord, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGenf(coord, pname, param); -} - -void gl3_2compat_glTexGendv(void *_glfuncs, GLenum coord, GLenum pname, const GLdouble* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGendv(coord, pname, params); -} - -void gl3_2compat_glTexGend(void *_glfuncs, GLenum coord, GLenum pname, GLdouble param) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGend(coord, pname, param); -} - -void gl3_2compat_glTexEnviv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexEnviv(target, pname, params); -} - -void gl3_2compat_glTexEnvi(void *_glfuncs, GLenum target, GLenum pname, GLint param) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexEnvi(target, pname, param); -} - -void gl3_2compat_glTexEnvfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexEnvfv(target, pname, params); -} - -void gl3_2compat_glTexEnvf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexEnvf(target, pname, param); -} - -void gl3_2compat_glShadeModel(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glShadeModel(mode); -} - -void gl3_2compat_glPolygonStipple(void *_glfuncs, const GLubyte* mask) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPolygonStipple(mask); -} - -void gl3_2compat_glMaterialiv(void *_glfuncs, GLenum face, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMaterialiv(face, pname, params); -} - -void gl3_2compat_glMateriali(void *_glfuncs, GLenum face, GLenum pname, GLint param) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMateriali(face, pname, param); -} - -void gl3_2compat_glMaterialfv(void *_glfuncs, GLenum face, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMaterialfv(face, pname, params); -} - -void gl3_2compat_glMaterialf(void *_glfuncs, GLenum face, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMaterialf(face, pname, param); -} - -void gl3_2compat_glLineStipple(void *_glfuncs, GLint factor, GLushort pattern) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLineStipple(factor, pattern); -} - -void gl3_2compat_glLightModeliv(void *_glfuncs, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightModeliv(pname, params); -} - -void gl3_2compat_glLightModeli(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightModeli(pname, param); -} - -void gl3_2compat_glLightModelfv(void *_glfuncs, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightModelfv(pname, params); -} - -void gl3_2compat_glLightModelf(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightModelf(pname, param); -} - -void gl3_2compat_glLightiv(void *_glfuncs, GLenum light, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightiv(light, pname, params); -} - -void gl3_2compat_glLighti(void *_glfuncs, GLenum light, GLenum pname, GLint param) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLighti(light, pname, param); -} - -void gl3_2compat_glLightfv(void *_glfuncs, GLenum light, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightfv(light, pname, params); -} - -void gl3_2compat_glLightf(void *_glfuncs, GLenum light, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightf(light, pname, param); -} - -void gl3_2compat_glFogiv(void *_glfuncs, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogiv(pname, params); -} - -void gl3_2compat_glFogi(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogi(pname, param); -} - -void gl3_2compat_glFogfv(void *_glfuncs, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogfv(pname, params); -} - -void gl3_2compat_glFogf(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogf(pname, param); -} - -void gl3_2compat_glColorMaterial(void *_glfuncs, GLenum face, GLenum mode) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorMaterial(face, mode); -} - -void gl3_2compat_glClipPlane(void *_glfuncs, GLenum plane, const GLdouble* equation) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClipPlane(plane, equation); -} - -void gl3_2compat_glVertex4sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4sv(v); -} - -void gl3_2compat_glVertex4s(void *_glfuncs, GLshort x, GLshort y, GLshort z, GLshort w) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4s(x, y, z, w); -} - -void gl3_2compat_glVertex4iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4iv(v); -} - -void gl3_2compat_glVertex4i(void *_glfuncs, GLint x, GLint y, GLint z, GLint w) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4i(x, y, z, w); -} - -void gl3_2compat_glVertex4fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4fv(v); -} - -void gl3_2compat_glVertex4f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z, GLfloat w) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4f(x, y, z, w); -} - -void gl3_2compat_glVertex4dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4dv(v); -} - -void gl3_2compat_glVertex4d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z, GLdouble w) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4d(x, y, z, w); -} - -void gl3_2compat_glVertex3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3sv(v); -} - -void gl3_2compat_glVertex3s(void *_glfuncs, GLshort x, GLshort y, GLshort z) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3s(x, y, z); -} - -void gl3_2compat_glVertex3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3iv(v); -} - -void gl3_2compat_glVertex3i(void *_glfuncs, GLint x, GLint y, GLint z) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3i(x, y, z); -} - -void gl3_2compat_glVertex3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3fv(v); -} - -void gl3_2compat_glVertex3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3f(x, y, z); -} - -void gl3_2compat_glVertex3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3dv(v); -} - -void gl3_2compat_glVertex3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3d(x, y, z); -} - -void gl3_2compat_glVertex2sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2sv(v); -} - -void gl3_2compat_glVertex2s(void *_glfuncs, GLshort x, GLshort y) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2s(x, y); -} - -void gl3_2compat_glVertex2iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2iv(v); -} - -void gl3_2compat_glVertex2i(void *_glfuncs, GLint x, GLint y) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2i(x, y); -} - -void gl3_2compat_glVertex2fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2fv(v); -} - -void gl3_2compat_glVertex2f(void *_glfuncs, GLfloat x, GLfloat y) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2f(x, y); -} - -void gl3_2compat_glVertex2dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2dv(v); -} - -void gl3_2compat_glVertex2d(void *_glfuncs, GLdouble x, GLdouble y) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2d(x, y); -} - -void gl3_2compat_glTexCoord4sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4sv(v); -} - -void gl3_2compat_glTexCoord4s(void *_glfuncs, GLshort s, GLshort t, GLshort r, GLshort q) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4s(s, t, r, q); -} - -void gl3_2compat_glTexCoord4iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4iv(v); -} - -void gl3_2compat_glTexCoord4i(void *_glfuncs, GLint s, GLint t, GLint r, GLint q) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4i(s, t, r, q); -} - -void gl3_2compat_glTexCoord4fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4fv(v); -} - -void gl3_2compat_glTexCoord4f(void *_glfuncs, GLfloat s, GLfloat t, GLfloat r, GLfloat q) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4f(s, t, r, q); -} - -void gl3_2compat_glTexCoord4dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4dv(v); -} - -void gl3_2compat_glTexCoord4d(void *_glfuncs, GLdouble s, GLdouble t, GLdouble r, GLdouble q) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4d(s, t, r, q); -} - -void gl3_2compat_glTexCoord3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3sv(v); -} - -void gl3_2compat_glTexCoord3s(void *_glfuncs, GLshort s, GLshort t, GLshort r) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3s(s, t, r); -} - -void gl3_2compat_glTexCoord3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3iv(v); -} - -void gl3_2compat_glTexCoord3i(void *_glfuncs, GLint s, GLint t, GLint r) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3i(s, t, r); -} - -void gl3_2compat_glTexCoord3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3fv(v); -} - -void gl3_2compat_glTexCoord3f(void *_glfuncs, GLfloat s, GLfloat t, GLfloat r) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3f(s, t, r); -} - -void gl3_2compat_glTexCoord3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3dv(v); -} - -void gl3_2compat_glTexCoord3d(void *_glfuncs, GLdouble s, GLdouble t, GLdouble r) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3d(s, t, r); -} - -void gl3_2compat_glTexCoord2sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2sv(v); -} - -void gl3_2compat_glTexCoord2s(void *_glfuncs, GLshort s, GLshort t) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2s(s, t); -} - -void gl3_2compat_glTexCoord2iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2iv(v); -} - -void gl3_2compat_glTexCoord2i(void *_glfuncs, GLint s, GLint t) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2i(s, t); -} - -void gl3_2compat_glTexCoord2fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2fv(v); -} - -void gl3_2compat_glTexCoord2f(void *_glfuncs, GLfloat s, GLfloat t) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2f(s, t); -} - -void gl3_2compat_glTexCoord2dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2dv(v); -} - -void gl3_2compat_glTexCoord2d(void *_glfuncs, GLdouble s, GLdouble t) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2d(s, t); -} - -void gl3_2compat_glTexCoord1sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1sv(v); -} - -void gl3_2compat_glTexCoord1s(void *_glfuncs, GLshort s) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1s(s); -} - -void gl3_2compat_glTexCoord1iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1iv(v); -} - -void gl3_2compat_glTexCoord1i(void *_glfuncs, GLint s) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1i(s); -} - -void gl3_2compat_glTexCoord1fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1fv(v); -} - -void gl3_2compat_glTexCoord1f(void *_glfuncs, GLfloat s) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1f(s); -} - -void gl3_2compat_glTexCoord1dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1dv(v); -} - -void gl3_2compat_glTexCoord1d(void *_glfuncs, GLdouble s) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1d(s); -} - -void gl3_2compat_glRectsv(void *_glfuncs, const GLshort* v1, const GLshort* v2) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectsv(v1, v2); -} - -void gl3_2compat_glRects(void *_glfuncs, GLshort x1, GLshort y1, GLshort x2, GLshort y2) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRects(x1, y1, x2, y2); -} - -void gl3_2compat_glRectiv(void *_glfuncs, const GLint* v1, const GLint* v2) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectiv(v1, v2); -} - -void gl3_2compat_glRecti(void *_glfuncs, GLint x1, GLint y1, GLint x2, GLint y2) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRecti(x1, y1, x2, y2); -} - -void gl3_2compat_glRectfv(void *_glfuncs, const GLfloat* v1, const GLfloat* v2) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectfv(v1, v2); -} - -void gl3_2compat_glRectf(void *_glfuncs, GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectf(x1, y1, x2, y2); -} - -void gl3_2compat_glRectdv(void *_glfuncs, const GLdouble* v1, const GLdouble* v2) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectdv(v1, v2); -} - -void gl3_2compat_glRectd(void *_glfuncs, GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectd(x1, y1, x2, y2); -} - -void gl3_2compat_glRasterPos4sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4sv(v); -} - -void gl3_2compat_glRasterPos4s(void *_glfuncs, GLshort x, GLshort y, GLshort z, GLshort w) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4s(x, y, z, w); -} - -void gl3_2compat_glRasterPos4iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4iv(v); -} - -void gl3_2compat_glRasterPos4i(void *_glfuncs, GLint x, GLint y, GLint z, GLint w) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4i(x, y, z, w); -} - -void gl3_2compat_glRasterPos4fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4fv(v); -} - -void gl3_2compat_glRasterPos4f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z, GLfloat w) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4f(x, y, z, w); -} - -void gl3_2compat_glRasterPos4dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4dv(v); -} - -void gl3_2compat_glRasterPos4d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z, GLdouble w) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4d(x, y, z, w); -} - -void gl3_2compat_glRasterPos3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3sv(v); -} - -void gl3_2compat_glRasterPos3s(void *_glfuncs, GLshort x, GLshort y, GLshort z) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3s(x, y, z); -} - -void gl3_2compat_glRasterPos3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3iv(v); -} - -void gl3_2compat_glRasterPos3i(void *_glfuncs, GLint x, GLint y, GLint z) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3i(x, y, z); -} - -void gl3_2compat_glRasterPos3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3fv(v); -} - -void gl3_2compat_glRasterPos3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3f(x, y, z); -} - -void gl3_2compat_glRasterPos3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3dv(v); -} - -void gl3_2compat_glRasterPos3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3d(x, y, z); -} - -void gl3_2compat_glRasterPos2sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2sv(v); -} - -void gl3_2compat_glRasterPos2s(void *_glfuncs, GLshort x, GLshort y) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2s(x, y); -} - -void gl3_2compat_glRasterPos2iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2iv(v); -} - -void gl3_2compat_glRasterPos2i(void *_glfuncs, GLint x, GLint y) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2i(x, y); -} - -void gl3_2compat_glRasterPos2fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2fv(v); -} - -void gl3_2compat_glRasterPos2f(void *_glfuncs, GLfloat x, GLfloat y) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2f(x, y); -} - -void gl3_2compat_glRasterPos2dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2dv(v); -} - -void gl3_2compat_glRasterPos2d(void *_glfuncs, GLdouble x, GLdouble y) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2d(x, y); -} - -void gl3_2compat_glNormal3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3sv(v); -} - -void gl3_2compat_glNormal3s(void *_glfuncs, GLshort nx, GLshort ny, GLshort nz) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3s(nx, ny, nz); -} - -void gl3_2compat_glNormal3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3iv(v); -} - -void gl3_2compat_glNormal3i(void *_glfuncs, GLint nx, GLint ny, GLint nz) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3i(nx, ny, nz); -} - -void gl3_2compat_glNormal3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3fv(v); -} - -void gl3_2compat_glNormal3f(void *_glfuncs, GLfloat nx, GLfloat ny, GLfloat nz) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3f(nx, ny, nz); -} - -void gl3_2compat_glNormal3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3dv(v); -} - -void gl3_2compat_glNormal3d(void *_glfuncs, GLdouble nx, GLdouble ny, GLdouble nz) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3d(nx, ny, nz); -} - -void gl3_2compat_glNormal3bv(void *_glfuncs, const GLbyte* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3bv(v); -} - -void gl3_2compat_glNormal3b(void *_glfuncs, GLbyte nx, GLbyte ny, GLbyte nz) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3b(nx, ny, nz); -} - -void gl3_2compat_glIndexsv(void *_glfuncs, const GLshort* c) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexsv(c); -} - -void gl3_2compat_glIndexs(void *_glfuncs, GLshort c) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexs(c); -} - -void gl3_2compat_glIndexiv(void *_glfuncs, const GLint* c) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexiv(c); -} - -void gl3_2compat_glIndexi(void *_glfuncs, GLint c) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexi(c); -} - -void gl3_2compat_glIndexfv(void *_glfuncs, const GLfloat* c) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexfv(c); -} - -void gl3_2compat_glIndexf(void *_glfuncs, GLfloat c) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexf(c); -} - -void gl3_2compat_glIndexdv(void *_glfuncs, const GLdouble* c) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexdv(c); -} - -void gl3_2compat_glIndexd(void *_glfuncs, GLdouble c) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexd(c); -} - -void gl3_2compat_glEnd(void *_glfuncs) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnd(); -} - -void gl3_2compat_glEdgeFlagv(void *_glfuncs, const GLboolean* flag) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEdgeFlagv(flag); -} - -void gl3_2compat_glEdgeFlag(void *_glfuncs, GLboolean flag) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEdgeFlag(flag); -} - -void gl3_2compat_glColor4usv(void *_glfuncs, const GLushort* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4usv(v); -} - -void gl3_2compat_glColor4us(void *_glfuncs, GLushort red, GLushort green, GLushort blue, GLushort alpha) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4us(red, green, blue, alpha); -} - -void gl3_2compat_glColor4uiv(void *_glfuncs, const GLuint* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4uiv(v); -} - -void gl3_2compat_glColor4ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue, GLuint alpha) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4ui(red, green, blue, alpha); -} - -void gl3_2compat_glColor4ubv(void *_glfuncs, const GLubyte* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4ubv(v); -} - -void gl3_2compat_glColor4ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4ub(red, green, blue, alpha); -} - -void gl3_2compat_glColor4sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4sv(v); -} - -void gl3_2compat_glColor4s(void *_glfuncs, GLshort red, GLshort green, GLshort blue, GLshort alpha) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4s(red, green, blue, alpha); -} - -void gl3_2compat_glColor4iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4iv(v); -} - -void gl3_2compat_glColor4i(void *_glfuncs, GLint red, GLint green, GLint blue, GLint alpha) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4i(red, green, blue, alpha); -} - -void gl3_2compat_glColor4fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4fv(v); -} - -void gl3_2compat_glColor4f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4f(red, green, blue, alpha); -} - -void gl3_2compat_glColor4dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4dv(v); -} - -void gl3_2compat_glColor4d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4d(red, green, blue, alpha); -} - -void gl3_2compat_glColor4bv(void *_glfuncs, const GLbyte* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4bv(v); -} - -void gl3_2compat_glColor4b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4b(red, green, blue, alpha); -} - -void gl3_2compat_glColor3usv(void *_glfuncs, const GLushort* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3usv(v); -} - -void gl3_2compat_glColor3us(void *_glfuncs, GLushort red, GLushort green, GLushort blue) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3us(red, green, blue); -} - -void gl3_2compat_glColor3uiv(void *_glfuncs, const GLuint* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3uiv(v); -} - -void gl3_2compat_glColor3ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3ui(red, green, blue); -} - -void gl3_2compat_glColor3ubv(void *_glfuncs, const GLubyte* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3ubv(v); -} - -void gl3_2compat_glColor3ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3ub(red, green, blue); -} - -void gl3_2compat_glColor3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3sv(v); -} - -void gl3_2compat_glColor3s(void *_glfuncs, GLshort red, GLshort green, GLshort blue) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3s(red, green, blue); -} - -void gl3_2compat_glColor3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3iv(v); -} - -void gl3_2compat_glColor3i(void *_glfuncs, GLint red, GLint green, GLint blue) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3i(red, green, blue); -} - -void gl3_2compat_glColor3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3fv(v); -} - -void gl3_2compat_glColor3f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3f(red, green, blue); -} - -void gl3_2compat_glColor3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3dv(v); -} - -void gl3_2compat_glColor3d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3d(red, green, blue); -} - -void gl3_2compat_glColor3bv(void *_glfuncs, const GLbyte* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3bv(v); -} - -void gl3_2compat_glColor3b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3b(red, green, blue); -} - -void gl3_2compat_glBitmap(void *_glfuncs, GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte* bitmap) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBitmap(width, height, xorig, yorig, xmove, ymove, bitmap); -} - -void gl3_2compat_glBegin(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBegin(mode); -} - -void gl3_2compat_glListBase(void *_glfuncs, GLuint base) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glListBase(base); -} - -GLuint gl3_2compat_glGenLists(void *_glfuncs, GLsizei range_) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGenLists(range_); -} - -void gl3_2compat_glDeleteLists(void *_glfuncs, GLuint list, GLsizei range_) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteLists(list, range_); -} - -void gl3_2compat_glCallLists(void *_glfuncs, GLsizei n, GLenum gltype, const GLvoid* lists) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCallLists(n, gltype, lists); -} - -void gl3_2compat_glCallList(void *_glfuncs, GLuint list) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCallList(list); -} - -void gl3_2compat_glEndList(void *_glfuncs) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndList(); -} - -void gl3_2compat_glNewList(void *_glfuncs, GLuint list, GLenum mode) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNewList(list, mode); -} - -void gl3_2compat_glPushClientAttrib(void *_glfuncs, GLbitfield mask) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPushClientAttrib(mask); -} - -void gl3_2compat_glPopClientAttrib(void *_glfuncs) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPopClientAttrib(); -} - -void gl3_2compat_glPrioritizeTextures(void *_glfuncs, GLsizei n, const GLuint* textures, const GLfloat* priorities) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPrioritizeTextures(n, textures, priorities); -} - -GLboolean gl3_2compat_glAreTexturesResident(void *_glfuncs, GLsizei n, const GLuint* textures, GLboolean* residences) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glAreTexturesResident(n, textures, residences); -} - -void gl3_2compat_glVertexPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexPointer(size, gltype, stride, pointer); -} - -void gl3_2compat_glTexCoordPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordPointer(size, gltype, stride, pointer); -} - -void gl3_2compat_glNormalPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormalPointer(gltype, stride, pointer); -} - -void gl3_2compat_glInterleavedArrays(void *_glfuncs, GLenum format, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glInterleavedArrays(format, stride, pointer); -} - -void gl3_2compat_glIndexPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexPointer(gltype, stride, pointer); -} - -void gl3_2compat_glEnableClientState(void *_glfuncs, GLenum array) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnableClientState(array); -} - -void gl3_2compat_glEdgeFlagPointer(void *_glfuncs, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEdgeFlagPointer(stride, pointer); -} - -void gl3_2compat_glDisableClientState(void *_glfuncs, GLenum array) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDisableClientState(array); -} - -void gl3_2compat_glColorPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorPointer(size, gltype, stride, pointer); -} - -void gl3_2compat_glArrayElement(void *_glfuncs, GLint i) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glArrayElement(i); -} - -void gl3_2compat_glResetMinmax(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glResetMinmax(target); -} - -void gl3_2compat_glResetHistogram(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glResetHistogram(target); -} - -void gl3_2compat_glMinmax(void *_glfuncs, GLenum target, GLenum internalFormat, GLboolean sink) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMinmax(target, internalFormat, sink); -} - -void gl3_2compat_glHistogram(void *_glfuncs, GLenum target, GLsizei width, GLenum internalFormat, GLboolean sink) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glHistogram(target, width, internalFormat, sink); -} - -void gl3_2compat_glGetMinmaxParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMinmaxParameteriv(target, pname, params); -} - -void gl3_2compat_glGetMinmaxParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMinmaxParameterfv(target, pname, params); -} - -void gl3_2compat_glGetMinmax(void *_glfuncs, GLenum target, GLboolean reset, GLenum format, GLenum gltype, GLvoid* values) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMinmax(target, reset, format, gltype, values); -} - -void gl3_2compat_glGetHistogramParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetHistogramParameteriv(target, pname, params); -} - -void gl3_2compat_glGetHistogramParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetHistogramParameterfv(target, pname, params); -} - -void gl3_2compat_glGetHistogram(void *_glfuncs, GLenum target, GLboolean reset, GLenum format, GLenum gltype, GLvoid* values) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetHistogram(target, reset, format, gltype, values); -} - -void gl3_2compat_glSeparableFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* row, const GLvoid* column) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSeparableFilter2D(target, internalFormat, width, height, format, gltype, row, column); -} - -void gl3_2compat_glGetSeparableFilter(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* row, GLvoid* column, GLvoid* span) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetSeparableFilter(target, format, gltype, row, column, span); -} - -void gl3_2compat_glGetConvolutionParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetConvolutionParameteriv(target, pname, params); -} - -void gl3_2compat_glGetConvolutionParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetConvolutionParameterfv(target, pname, params); -} - -void gl3_2compat_glGetConvolutionFilter(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* image) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetConvolutionFilter(target, format, gltype, image); -} - -void gl3_2compat_glCopyConvolutionFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyConvolutionFilter2D(target, internalFormat, x, y, width, height); -} - -void gl3_2compat_glCopyConvolutionFilter1D(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyConvolutionFilter1D(target, internalFormat, x, y, width); -} - -void gl3_2compat_glConvolutionParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionParameteriv(target, pname, params); -} - -void gl3_2compat_glConvolutionParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionParameteri(target, pname, params); -} - -void gl3_2compat_glConvolutionParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionParameterfv(target, pname, params); -} - -void gl3_2compat_glConvolutionParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionParameterf(target, pname, params); -} - -void gl3_2compat_glConvolutionFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* image) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionFilter2D(target, internalFormat, width, height, format, gltype, image); -} - -void gl3_2compat_glConvolutionFilter1D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum gltype, const GLvoid* image) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionFilter1D(target, internalFormat, width, format, gltype, image); -} - -void gl3_2compat_glCopyColorSubTable(void *_glfuncs, GLenum target, GLsizei start, GLint x, GLint y, GLsizei width) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyColorSubTable(target, start, x, y, width); -} - -void gl3_2compat_glColorSubTable(void *_glfuncs, GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum gltype, const GLvoid* data) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorSubTable(target, start, count, format, gltype, data); -} - -void gl3_2compat_glGetColorTableParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetColorTableParameteriv(target, pname, params); -} - -void gl3_2compat_glGetColorTableParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetColorTableParameterfv(target, pname, params); -} - -void gl3_2compat_glGetColorTable(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* table) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetColorTable(target, format, gltype, table); -} - -void gl3_2compat_glCopyColorTable(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyColorTable(target, internalFormat, x, y, width); -} - -void gl3_2compat_glColorTableParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorTableParameteriv(target, pname, params); -} - -void gl3_2compat_glColorTableParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorTableParameterfv(target, pname, params); -} - -void gl3_2compat_glColorTable(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum gltype, const GLvoid* table) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorTable(target, internalFormat, width, format, gltype, table); -} - -void gl3_2compat_glMultTransposeMatrixd(void *_glfuncs, const GLdouble* m) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultTransposeMatrixd(m); -} - -void gl3_2compat_glMultTransposeMatrixf(void *_glfuncs, const GLfloat* m) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultTransposeMatrixf(m); -} - -void gl3_2compat_glLoadTransposeMatrixd(void *_glfuncs, const GLdouble* m) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadTransposeMatrixd(m); -} - -void gl3_2compat_glLoadTransposeMatrixf(void *_glfuncs, const GLfloat* m) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadTransposeMatrixf(m); -} - -void gl3_2compat_glMultiTexCoord4sv(void *_glfuncs, GLenum target, const GLshort* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4sv(target, v); -} - -void gl3_2compat_glMultiTexCoord4s(void *_glfuncs, GLenum target, GLshort s, GLshort t, GLshort r, GLshort q) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4s(target, s, t, r, q); -} - -void gl3_2compat_glMultiTexCoord4iv(void *_glfuncs, GLenum target, const GLint* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4iv(target, v); -} - -void gl3_2compat_glMultiTexCoord4i(void *_glfuncs, GLenum target, GLint s, GLint t, GLint r, GLint q) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4i(target, s, t, r, q); -} - -void gl3_2compat_glMultiTexCoord4fv(void *_glfuncs, GLenum target, const GLfloat* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4fv(target, v); -} - -void gl3_2compat_glMultiTexCoord4f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4f(target, s, t, r, q); -} - -void gl3_2compat_glMultiTexCoord4dv(void *_glfuncs, GLenum target, const GLdouble* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4dv(target, v); -} - -void gl3_2compat_glMultiTexCoord4d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4d(target, s, t, r, q); -} - -void gl3_2compat_glMultiTexCoord3sv(void *_glfuncs, GLenum target, const GLshort* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3sv(target, v); -} - -void gl3_2compat_glMultiTexCoord3s(void *_glfuncs, GLenum target, GLshort s, GLshort t, GLshort r) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3s(target, s, t, r); -} - -void gl3_2compat_glMultiTexCoord3iv(void *_glfuncs, GLenum target, const GLint* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3iv(target, v); -} - -void gl3_2compat_glMultiTexCoord3i(void *_glfuncs, GLenum target, GLint s, GLint t, GLint r) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3i(target, s, t, r); -} - -void gl3_2compat_glMultiTexCoord3fv(void *_glfuncs, GLenum target, const GLfloat* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3fv(target, v); -} - -void gl3_2compat_glMultiTexCoord3f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t, GLfloat r) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3f(target, s, t, r); -} - -void gl3_2compat_glMultiTexCoord3dv(void *_glfuncs, GLenum target, const GLdouble* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3dv(target, v); -} - -void gl3_2compat_glMultiTexCoord3d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t, GLdouble r) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3d(target, s, t, r); -} - -void gl3_2compat_glMultiTexCoord2sv(void *_glfuncs, GLenum target, const GLshort* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2sv(target, v); -} - -void gl3_2compat_glMultiTexCoord2s(void *_glfuncs, GLenum target, GLshort s, GLshort t) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2s(target, s, t); -} - -void gl3_2compat_glMultiTexCoord2iv(void *_glfuncs, GLenum target, const GLint* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2iv(target, v); -} - -void gl3_2compat_glMultiTexCoord2i(void *_glfuncs, GLenum target, GLint s, GLint t) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2i(target, s, t); -} - -void gl3_2compat_glMultiTexCoord2fv(void *_glfuncs, GLenum target, const GLfloat* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2fv(target, v); -} - -void gl3_2compat_glMultiTexCoord2f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2f(target, s, t); -} - -void gl3_2compat_glMultiTexCoord2dv(void *_glfuncs, GLenum target, const GLdouble* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2dv(target, v); -} - -void gl3_2compat_glMultiTexCoord2d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2d(target, s, t); -} - -void gl3_2compat_glMultiTexCoord1sv(void *_glfuncs, GLenum target, const GLshort* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1sv(target, v); -} - -void gl3_2compat_glMultiTexCoord1s(void *_glfuncs, GLenum target, GLshort s) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1s(target, s); -} - -void gl3_2compat_glMultiTexCoord1iv(void *_glfuncs, GLenum target, const GLint* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1iv(target, v); -} - -void gl3_2compat_glMultiTexCoord1i(void *_glfuncs, GLenum target, GLint s) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1i(target, s); -} - -void gl3_2compat_glMultiTexCoord1fv(void *_glfuncs, GLenum target, const GLfloat* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1fv(target, v); -} - -void gl3_2compat_glMultiTexCoord1f(void *_glfuncs, GLenum target, GLfloat s) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1f(target, s); -} - -void gl3_2compat_glMultiTexCoord1dv(void *_glfuncs, GLenum target, const GLdouble* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1dv(target, v); -} - -void gl3_2compat_glMultiTexCoord1d(void *_glfuncs, GLenum target, GLdouble s) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1d(target, s); -} - -void gl3_2compat_glClientActiveTexture(void *_glfuncs, GLenum texture) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClientActiveTexture(texture); -} - -void gl3_2compat_glWindowPos3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3sv(v); -} - -void gl3_2compat_glWindowPos3s(void *_glfuncs, GLshort x, GLshort y, GLshort z) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3s(x, y, z); -} - -void gl3_2compat_glWindowPos3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3iv(v); -} - -void gl3_2compat_glWindowPos3i(void *_glfuncs, GLint x, GLint y, GLint z) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3i(x, y, z); -} - -void gl3_2compat_glWindowPos3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3fv(v); -} - -void gl3_2compat_glWindowPos3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3f(x, y, z); -} - -void gl3_2compat_glWindowPos3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3dv(v); -} - -void gl3_2compat_glWindowPos3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3d(x, y, z); -} - -void gl3_2compat_glWindowPos2sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2sv(v); -} - -void gl3_2compat_glWindowPos2s(void *_glfuncs, GLshort x, GLshort y) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2s(x, y); -} - -void gl3_2compat_glWindowPos2iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2iv(v); -} - -void gl3_2compat_glWindowPos2i(void *_glfuncs, GLint x, GLint y) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2i(x, y); -} - -void gl3_2compat_glWindowPos2fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2fv(v); -} - -void gl3_2compat_glWindowPos2f(void *_glfuncs, GLfloat x, GLfloat y) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2f(x, y); -} - -void gl3_2compat_glWindowPos2dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2dv(v); -} - -void gl3_2compat_glWindowPos2d(void *_glfuncs, GLdouble x, GLdouble y) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2d(x, y); -} - -void gl3_2compat_glSecondaryColorPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColorPointer(size, gltype, stride, pointer); -} - -void gl3_2compat_glSecondaryColor3usv(void *_glfuncs, const GLushort* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3usv(v); -} - -void gl3_2compat_glSecondaryColor3us(void *_glfuncs, GLushort red, GLushort green, GLushort blue) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3us(red, green, blue); -} - -void gl3_2compat_glSecondaryColor3uiv(void *_glfuncs, const GLuint* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3uiv(v); -} - -void gl3_2compat_glSecondaryColor3ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3ui(red, green, blue); -} - -void gl3_2compat_glSecondaryColor3ubv(void *_glfuncs, const GLubyte* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3ubv(v); -} - -void gl3_2compat_glSecondaryColor3ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3ub(red, green, blue); -} - -void gl3_2compat_glSecondaryColor3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3sv(v); -} - -void gl3_2compat_glSecondaryColor3s(void *_glfuncs, GLshort red, GLshort green, GLshort blue) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3s(red, green, blue); -} - -void gl3_2compat_glSecondaryColor3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3iv(v); -} - -void gl3_2compat_glSecondaryColor3i(void *_glfuncs, GLint red, GLint green, GLint blue) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3i(red, green, blue); -} - -void gl3_2compat_glSecondaryColor3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3fv(v); -} - -void gl3_2compat_glSecondaryColor3f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3f(red, green, blue); -} - -void gl3_2compat_glSecondaryColor3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3dv(v); -} - -void gl3_2compat_glSecondaryColor3d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3d(red, green, blue); -} - -void gl3_2compat_glSecondaryColor3bv(void *_glfuncs, const GLbyte* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3bv(v); -} - -void gl3_2compat_glSecondaryColor3b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3b(red, green, blue); -} - -void gl3_2compat_glFogCoordPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogCoordPointer(gltype, stride, pointer); -} - -void gl3_2compat_glFogCoorddv(void *_glfuncs, const GLdouble* coord) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogCoorddv(coord); -} - -void gl3_2compat_glFogCoordd(void *_glfuncs, GLdouble coord) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogCoordd(coord); -} - -void gl3_2compat_glFogCoordfv(void *_glfuncs, const GLfloat* coord) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogCoordfv(coord); -} - -void gl3_2compat_glFogCoordf(void *_glfuncs, GLfloat coord) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogCoordf(coord); -} - -void gl3_2compat_glVertexAttrib4usv(void *_glfuncs, GLuint index, const GLushort* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4usv(index, v); -} - -void gl3_2compat_glVertexAttrib4uiv(void *_glfuncs, GLuint index, const GLuint* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4uiv(index, v); -} - -void gl3_2compat_glVertexAttrib4ubv(void *_glfuncs, GLuint index, const GLubyte* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4ubv(index, v); -} - -void gl3_2compat_glVertexAttrib4sv(void *_glfuncs, GLuint index, const GLshort* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4sv(index, v); -} - -void gl3_2compat_glVertexAttrib4s(void *_glfuncs, GLuint index, GLshort x, GLshort y, GLshort z, GLshort w) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4s(index, x, y, z, w); -} - -void gl3_2compat_glVertexAttrib4iv(void *_glfuncs, GLuint index, const GLint* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4iv(index, v); -} - -void gl3_2compat_glVertexAttrib4fv(void *_glfuncs, GLuint index, const GLfloat* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4fv(index, v); -} - -void gl3_2compat_glVertexAttrib4f(void *_glfuncs, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4f(index, x, y, z, w); -} - -void gl3_2compat_glVertexAttrib4dv(void *_glfuncs, GLuint index, const GLdouble* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4dv(index, v); -} - -void gl3_2compat_glVertexAttrib4d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4d(index, x, y, z, w); -} - -void gl3_2compat_glVertexAttrib4bv(void *_glfuncs, GLuint index, const GLbyte* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4bv(index, v); -} - -void gl3_2compat_glVertexAttrib4Nusv(void *_glfuncs, GLuint index, const GLushort* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4Nusv(index, v); -} - -void gl3_2compat_glVertexAttrib4Nuiv(void *_glfuncs, GLuint index, const GLuint* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4Nuiv(index, v); -} - -void gl3_2compat_glVertexAttrib4Nubv(void *_glfuncs, GLuint index, const GLubyte* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4Nubv(index, v); -} - -void gl3_2compat_glVertexAttrib4Nub(void *_glfuncs, GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4Nub(index, x, y, z, w); -} - -void gl3_2compat_glVertexAttrib4Nsv(void *_glfuncs, GLuint index, const GLshort* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4Nsv(index, v); -} - -void gl3_2compat_glVertexAttrib4Niv(void *_glfuncs, GLuint index, const GLint* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4Niv(index, v); -} - -void gl3_2compat_glVertexAttrib4Nbv(void *_glfuncs, GLuint index, const GLbyte* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4Nbv(index, v); -} - -void gl3_2compat_glVertexAttrib3sv(void *_glfuncs, GLuint index, const GLshort* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib3sv(index, v); -} - -void gl3_2compat_glVertexAttrib3s(void *_glfuncs, GLuint index, GLshort x, GLshort y, GLshort z) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib3s(index, x, y, z); -} - -void gl3_2compat_glVertexAttrib3fv(void *_glfuncs, GLuint index, const GLfloat* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib3fv(index, v); -} - -void gl3_2compat_glVertexAttrib3f(void *_glfuncs, GLuint index, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib3f(index, x, y, z); -} - -void gl3_2compat_glVertexAttrib3dv(void *_glfuncs, GLuint index, const GLdouble* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib3dv(index, v); -} - -void gl3_2compat_glVertexAttrib3d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib3d(index, x, y, z); -} - -void gl3_2compat_glVertexAttrib2sv(void *_glfuncs, GLuint index, const GLshort* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib2sv(index, v); -} - -void gl3_2compat_glVertexAttrib2s(void *_glfuncs, GLuint index, GLshort x, GLshort y) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib2s(index, x, y); -} - -void gl3_2compat_glVertexAttrib2fv(void *_glfuncs, GLuint index, const GLfloat* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib2fv(index, v); -} - -void gl3_2compat_glVertexAttrib2f(void *_glfuncs, GLuint index, GLfloat x, GLfloat y) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib2f(index, x, y); -} - -void gl3_2compat_glVertexAttrib2dv(void *_glfuncs, GLuint index, const GLdouble* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib2dv(index, v); -} - -void gl3_2compat_glVertexAttrib2d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib2d(index, x, y); -} - -void gl3_2compat_glVertexAttrib1sv(void *_glfuncs, GLuint index, const GLshort* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib1sv(index, v); -} - -void gl3_2compat_glVertexAttrib1s(void *_glfuncs, GLuint index, GLshort x) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib1s(index, x); -} - -void gl3_2compat_glVertexAttrib1fv(void *_glfuncs, GLuint index, const GLfloat* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib1fv(index, v); -} - -void gl3_2compat_glVertexAttrib1f(void *_glfuncs, GLuint index, GLfloat x) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib1f(index, x); -} - -void gl3_2compat_glVertexAttrib1dv(void *_glfuncs, GLuint index, const GLdouble* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib1dv(index, v); -} - -void gl3_2compat_glVertexAttrib1d(void *_glfuncs, GLuint index, GLdouble x) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib1d(index, x); -} - -void gl3_2compat_glVertexAttribI4usv(void *_glfuncs, GLuint index, const GLushort* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI4usv(index, v); -} - -void gl3_2compat_glVertexAttribI4ubv(void *_glfuncs, GLuint index, const GLubyte* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI4ubv(index, v); -} - -void gl3_2compat_glVertexAttribI4sv(void *_glfuncs, GLuint index, const GLshort* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI4sv(index, v); -} - -void gl3_2compat_glVertexAttribI4bv(void *_glfuncs, GLuint index, const GLbyte* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI4bv(index, v); -} - -void gl3_2compat_glVertexAttribI4uiv(void *_glfuncs, GLuint index, const GLuint* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI4uiv(index, v); -} - -void gl3_2compat_glVertexAttribI3uiv(void *_glfuncs, GLuint index, const GLuint* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI3uiv(index, v); -} - -void gl3_2compat_glVertexAttribI2uiv(void *_glfuncs, GLuint index, const GLuint* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI2uiv(index, v); -} - -void gl3_2compat_glVertexAttribI1uiv(void *_glfuncs, GLuint index, const GLuint* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI1uiv(index, v); -} - -void gl3_2compat_glVertexAttribI4iv(void *_glfuncs, GLuint index, const GLint* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI4iv(index, v); -} - -void gl3_2compat_glVertexAttribI3iv(void *_glfuncs, GLuint index, const GLint* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI3iv(index, v); -} - -void gl3_2compat_glVertexAttribI2iv(void *_glfuncs, GLuint index, const GLint* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI2iv(index, v); -} - -void gl3_2compat_glVertexAttribI1iv(void *_glfuncs, GLuint index, const GLint* v) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI1iv(index, v); -} - -void gl3_2compat_glVertexAttribI4ui(void *_glfuncs, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI4ui(index, x, y, z, w); -} - -void gl3_2compat_glVertexAttribI3ui(void *_glfuncs, GLuint index, GLuint x, GLuint y, GLuint z) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI3ui(index, x, y, z); -} - -void gl3_2compat_glVertexAttribI2ui(void *_glfuncs, GLuint index, GLuint x, GLuint y) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI2ui(index, x, y); -} - -void gl3_2compat_glVertexAttribI1ui(void *_glfuncs, GLuint index, GLuint x) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI1ui(index, x); -} - -void gl3_2compat_glVertexAttribI4i(void *_glfuncs, GLuint index, GLint x, GLint y, GLint z, GLint w) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI4i(index, x, y, z, w); -} - -void gl3_2compat_glVertexAttribI3i(void *_glfuncs, GLuint index, GLint x, GLint y, GLint z) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI3i(index, x, y, z); -} - -void gl3_2compat_glVertexAttribI2i(void *_glfuncs, GLuint index, GLint x, GLint y) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI2i(index, x, y); -} - -void gl3_2compat_glVertexAttribI1i(void *_glfuncs, GLuint index, GLint x) -{ - QOpenGLFunctions_3_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI1i(index, x); -} - diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/3.2compat/funcs.h b/Godeps/_workspace/src/github.com/obscuren/qml/gl/3.2compat/funcs.h deleted file mode 100644 index 17fa70e2e8..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/3.2compat/funcs.h +++ /dev/null @@ -1,729 +0,0 @@ - -// ** file automatically generated by glgen -- do not edit manually ** - -#ifndef __cplusplus -#include -#include -typedef unsigned int GLenum; -typedef unsigned char GLboolean; -typedef unsigned int GLbitfield; -typedef void GLvoid; -typedef char GLchar; -typedef signed char GLbyte; /* 1-byte signed */ -typedef short GLshort; /* 2-byte signed */ -typedef int GLint; /* 4-byte signed */ -typedef unsigned char GLubyte; /* 1-byte unsigned */ -typedef unsigned short GLushort; /* 2-byte unsigned */ -typedef unsigned int GLuint; /* 4-byte unsigned */ -typedef int GLsizei; /* 4-byte signed */ -typedef float GLfloat; /* single precision float */ -typedef float GLclampf; /* single precision float in [0,1] */ -typedef double GLdouble; /* double precision float */ -typedef double GLclampd; /* double precision float in [0,1] */ -typedef int64_t GLint64; -typedef uint64_t GLuint64; -typedef ptrdiff_t GLintptr; -typedef ptrdiff_t GLsizeiptr; -typedef ptrdiff_t GLintptrARB; -typedef ptrdiff_t GLsizeiptrARB; -typedef struct __GLsync *GLsync; -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -void *gl3_2compat_funcs(); - -void gl3_2compat_glViewport(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height); -void gl3_2compat_glDepthRange(void *_glfuncs, GLdouble nearVal, GLdouble farVal); -GLboolean gl3_2compat_glIsEnabled(void *_glfuncs, GLenum cap); -void gl3_2compat_glGetTexLevelParameteriv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLint* params); -void gl3_2compat_glGetTexLevelParameterfv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLfloat* params); -void gl3_2compat_glGetTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl3_2compat_glGetTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl3_2compat_glGetTexImage(void *_glfuncs, GLenum target, GLint level, GLenum format, GLenum gltype, GLvoid* pixels); -void gl3_2compat_glGetIntegerv(void *_glfuncs, GLenum pname, GLint* params); -void gl3_2compat_glGetFloatv(void *_glfuncs, GLenum pname, GLfloat* params); -GLenum gl3_2compat_glGetError(void *_glfuncs); -void gl3_2compat_glGetDoublev(void *_glfuncs, GLenum pname, GLdouble* params); -void gl3_2compat_glGetBooleanv(void *_glfuncs, GLenum pname, GLboolean* params); -void gl3_2compat_glReadPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum gltype, GLvoid* pixels); -void gl3_2compat_glReadBuffer(void *_glfuncs, GLenum mode); -void gl3_2compat_glPixelStorei(void *_glfuncs, GLenum pname, GLint param); -void gl3_2compat_glPixelStoref(void *_glfuncs, GLenum pname, GLfloat param); -void gl3_2compat_glDepthFunc(void *_glfuncs, GLenum glfunc); -void gl3_2compat_glStencilOp(void *_glfuncs, GLenum fail, GLenum zfail, GLenum zpass); -void gl3_2compat_glStencilFunc(void *_glfuncs, GLenum glfunc, GLint ref, GLuint mask); -void gl3_2compat_glLogicOp(void *_glfuncs, GLenum opcode); -void gl3_2compat_glBlendFunc(void *_glfuncs, GLenum sfactor, GLenum dfactor); -void gl3_2compat_glFlush(void *_glfuncs); -void gl3_2compat_glFinish(void *_glfuncs); -void gl3_2compat_glEnable(void *_glfuncs, GLenum cap); -void gl3_2compat_glDisable(void *_glfuncs, GLenum cap); -void gl3_2compat_glDepthMask(void *_glfuncs, GLboolean flag); -void gl3_2compat_glColorMask(void *_glfuncs, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); -void gl3_2compat_glStencilMask(void *_glfuncs, GLuint mask); -void gl3_2compat_glClearDepth(void *_glfuncs, GLdouble depth); -void gl3_2compat_glClearStencil(void *_glfuncs, GLint s); -void gl3_2compat_glClearColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl3_2compat_glClear(void *_glfuncs, GLbitfield mask); -void gl3_2compat_glDrawBuffer(void *_glfuncs, GLenum mode); -void gl3_2compat_glTexImage2D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl3_2compat_glTexImage1D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl3_2compat_glTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl3_2compat_glTexParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint param); -void gl3_2compat_glTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params); -void gl3_2compat_glTexParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param); -void gl3_2compat_glScissor(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height); -void gl3_2compat_glPolygonMode(void *_glfuncs, GLenum face, GLenum mode); -void gl3_2compat_glPointSize(void *_glfuncs, GLfloat size); -void gl3_2compat_glLineWidth(void *_glfuncs, GLfloat width); -void gl3_2compat_glHint(void *_glfuncs, GLenum target, GLenum mode); -void gl3_2compat_glFrontFace(void *_glfuncs, GLenum mode); -void gl3_2compat_glCullFace(void *_glfuncs, GLenum mode); -void gl3_2compat_glIndexubv(void *_glfuncs, const GLubyte* c); -void gl3_2compat_glIndexub(void *_glfuncs, GLubyte c); -GLboolean gl3_2compat_glIsTexture(void *_glfuncs, GLuint texture); -void gl3_2compat_glGenTextures(void *_glfuncs, GLsizei n, GLuint* textures); -void gl3_2compat_glDeleteTextures(void *_glfuncs, GLsizei n, const GLuint* textures); -void gl3_2compat_glBindTexture(void *_glfuncs, GLenum target, GLuint texture); -void gl3_2compat_glTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl3_2compat_glTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl3_2compat_glCopyTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -void gl3_2compat_glCopyTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -void gl3_2compat_glCopyTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -void gl3_2compat_glCopyTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border); -void gl3_2compat_glPolygonOffset(void *_glfuncs, GLfloat factor, GLfloat units); -void gl3_2compat_glDrawElements(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices); -void gl3_2compat_glDrawArrays(void *_glfuncs, GLenum mode, GLint first, GLsizei count); -void gl3_2compat_glCopyTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -void gl3_2compat_glTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl3_2compat_glTexImage3D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl3_2compat_glDrawRangeElements(void *_glfuncs, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum gltype, const GLvoid* indices); -void gl3_2compat_glBlendEquation(void *_glfuncs, GLenum mode); -void gl3_2compat_glBlendColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl3_2compat_glGetCompressedTexImage(void *_glfuncs, GLenum target, GLint level, GLvoid* img); -void gl3_2compat_glCompressedTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid* data); -void gl3_2compat_glCompressedTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data); -void gl3_2compat_glCompressedTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data); -void gl3_2compat_glCompressedTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid* data); -void gl3_2compat_glCompressedTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data); -void gl3_2compat_glCompressedTexImage3D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data); -void gl3_2compat_glSampleCoverage(void *_glfuncs, GLfloat value, GLboolean invert); -void gl3_2compat_glActiveTexture(void *_glfuncs, GLenum texture); -void gl3_2compat_glPointParameteriv(void *_glfuncs, GLenum pname, const GLint* params); -void gl3_2compat_glPointParameteri(void *_glfuncs, GLenum pname, GLint param); -void gl3_2compat_glPointParameterfv(void *_glfuncs, GLenum pname, const GLfloat* params); -void gl3_2compat_glPointParameterf(void *_glfuncs, GLenum pname, GLfloat param); -void gl3_2compat_glMultiDrawArrays(void *_glfuncs, GLenum mode, const GLint* first, const GLsizei* count, GLsizei drawcount); -void gl3_2compat_glBlendFuncSeparate(void *_glfuncs, GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -void gl3_2compat_glGetBufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -GLboolean gl3_2compat_glUnmapBuffer(void *_glfuncs, GLenum target); -void gl3_2compat_glGetBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, GLvoid* data); -void gl3_2compat_glBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data); -void gl3_2compat_glBufferData(void *_glfuncs, GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage); -GLboolean gl3_2compat_glIsBuffer(void *_glfuncs, GLuint buffer); -void gl3_2compat_glGenBuffers(void *_glfuncs, GLsizei n, GLuint* buffers); -void gl3_2compat_glDeleteBuffers(void *_glfuncs, GLsizei n, const GLuint* buffers); -void gl3_2compat_glBindBuffer(void *_glfuncs, GLenum target, GLuint buffer); -void gl3_2compat_glGetQueryObjectuiv(void *_glfuncs, GLuint id, GLenum pname, GLuint* params); -void gl3_2compat_glGetQueryObjectiv(void *_glfuncs, GLuint id, GLenum pname, GLint* params); -void gl3_2compat_glGetQueryiv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl3_2compat_glEndQuery(void *_glfuncs, GLenum target); -void gl3_2compat_glBeginQuery(void *_glfuncs, GLenum target, GLuint id); -GLboolean gl3_2compat_glIsQuery(void *_glfuncs, GLuint id); -void gl3_2compat_glDeleteQueries(void *_glfuncs, GLsizei n, const GLuint* ids); -void gl3_2compat_glGenQueries(void *_glfuncs, GLsizei n, GLuint* ids); -void gl3_2compat_glVertexAttribPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLboolean normalized, GLsizei stride, const GLvoid* offset); -void gl3_2compat_glValidateProgram(void *_glfuncs, GLuint program); -void gl3_2compat_glUniformMatrix4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl3_2compat_glUniformMatrix3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl3_2compat_glUniformMatrix2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl3_2compat_glUniform4iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gl3_2compat_glUniform3iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gl3_2compat_glUniform2iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gl3_2compat_glUniform1iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gl3_2compat_glUniform4fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gl3_2compat_glUniform3fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gl3_2compat_glUniform2fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gl3_2compat_glUniform1fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gl3_2compat_glUniform4i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -void gl3_2compat_glUniform3i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2); -void gl3_2compat_glUniform2i(void *_glfuncs, GLint location, GLint v0, GLint v1); -void gl3_2compat_glUniform1i(void *_glfuncs, GLint location, GLint v0); -void gl3_2compat_glUniform4f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -void gl3_2compat_glUniform3f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -void gl3_2compat_glUniform2f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1); -void gl3_2compat_glUniform1f(void *_glfuncs, GLint location, GLfloat v0); -void gl3_2compat_glUseProgram(void *_glfuncs, GLuint program); -void gl3_2compat_glShaderSource(void *_glfuncs, GLuint shader, GLsizei count, const GLchar** source, const GLint* length); -void gl3_2compat_glLinkProgram(void *_glfuncs, GLuint program); -GLboolean gl3_2compat_glIsShader(void *_glfuncs, GLuint shader); -GLboolean gl3_2compat_glIsProgram(void *_glfuncs, GLuint program); -void gl3_2compat_glGetVertexAttribiv(void *_glfuncs, GLuint index, GLenum pname, GLint* params); -void gl3_2compat_glGetVertexAttribfv(void *_glfuncs, GLuint index, GLenum pname, GLfloat* params); -void gl3_2compat_glGetVertexAttribdv(void *_glfuncs, GLuint index, GLenum pname, GLdouble* params); -void gl3_2compat_glGetUniformiv(void *_glfuncs, GLuint program, GLint location, GLint* params); -void gl3_2compat_glGetUniformfv(void *_glfuncs, GLuint program, GLint location, GLfloat* params); -GLint gl3_2compat_glGetUniformLocation(void *_glfuncs, GLuint program, const GLchar* name); -void gl3_2compat_glGetShaderSource(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* source); -void gl3_2compat_glGetShaderInfoLog(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* infoLog); -void gl3_2compat_glGetShaderiv(void *_glfuncs, GLuint shader, GLenum pname, GLint* params); -void gl3_2compat_glGetProgramInfoLog(void *_glfuncs, GLuint program, GLsizei bufSize, GLsizei* length, GLchar* infoLog); -void gl3_2compat_glGetProgramiv(void *_glfuncs, GLuint program, GLenum pname, GLint* params); -GLint gl3_2compat_glGetAttribLocation(void *_glfuncs, GLuint program, const GLchar* name); -void gl3_2compat_glGetAttachedShaders(void *_glfuncs, GLuint program, GLsizei maxCount, GLsizei* count, GLuint* obj); -void gl3_2compat_glGetActiveUniform(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name); -void gl3_2compat_glGetActiveAttrib(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name); -void gl3_2compat_glEnableVertexAttribArray(void *_glfuncs, GLuint index); -void gl3_2compat_glDisableVertexAttribArray(void *_glfuncs, GLuint index); -void gl3_2compat_glDetachShader(void *_glfuncs, GLuint program, GLuint shader); -void gl3_2compat_glDeleteShader(void *_glfuncs, GLuint shader); -void gl3_2compat_glDeleteProgram(void *_glfuncs, GLuint program); -GLuint gl3_2compat_glCreateShader(void *_glfuncs, GLenum gltype); -GLuint gl3_2compat_glCreateProgram(void *_glfuncs); -void gl3_2compat_glCompileShader(void *_glfuncs, GLuint shader); -void gl3_2compat_glBindAttribLocation(void *_glfuncs, GLuint program, GLuint index, const GLchar* name); -void gl3_2compat_glAttachShader(void *_glfuncs, GLuint program, GLuint shader); -void gl3_2compat_glStencilMaskSeparate(void *_glfuncs, GLenum face, GLuint mask); -void gl3_2compat_glStencilFuncSeparate(void *_glfuncs, GLenum face, GLenum glfunc, GLint ref, GLuint mask); -void gl3_2compat_glStencilOpSeparate(void *_glfuncs, GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); -void gl3_2compat_glDrawBuffers(void *_glfuncs, GLsizei n, const GLenum* bufs); -void gl3_2compat_glBlendEquationSeparate(void *_glfuncs, GLenum modeRGB, GLenum modeAlpha); -void gl3_2compat_glUniformMatrix4x3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl3_2compat_glUniformMatrix3x4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl3_2compat_glUniformMatrix4x2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl3_2compat_glUniformMatrix2x4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl3_2compat_glUniformMatrix3x2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl3_2compat_glUniformMatrix2x3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -GLboolean gl3_2compat_glIsVertexArray(void *_glfuncs, GLuint array); -void gl3_2compat_glGenVertexArrays(void *_glfuncs, GLsizei n, GLuint* arrays); -void gl3_2compat_glDeleteVertexArrays(void *_glfuncs, GLsizei n, const GLuint* arrays); -void gl3_2compat_glBindVertexArray(void *_glfuncs, GLuint array); -void gl3_2compat_glFlushMappedBufferRange(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr length); -void gl3_2compat_glFramebufferTextureLayer(void *_glfuncs, GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); -void gl3_2compat_glRenderbufferStorageMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height); -void gl3_2compat_glBlitFramebuffer(void *_glfuncs, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -void gl3_2compat_glGenerateMipmap(void *_glfuncs, GLenum target); -void gl3_2compat_glGetFramebufferAttachmentParameteriv(void *_glfuncs, GLenum target, GLenum attachment, GLenum pname, GLint* params); -void gl3_2compat_glFramebufferRenderbuffer(void *_glfuncs, GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -void gl3_2compat_glFramebufferTexture3D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -void gl3_2compat_glFramebufferTexture2D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -void gl3_2compat_glFramebufferTexture1D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLenum gl3_2compat_glCheckFramebufferStatus(void *_glfuncs, GLenum target); -void gl3_2compat_glGenFramebuffers(void *_glfuncs, GLsizei n, GLuint* framebuffers); -void gl3_2compat_glDeleteFramebuffers(void *_glfuncs, GLsizei n, const GLuint* framebuffers); -void gl3_2compat_glBindFramebuffer(void *_glfuncs, GLenum target, GLuint framebuffer); -GLboolean gl3_2compat_glIsFramebuffer(void *_glfuncs, GLuint framebuffer); -void gl3_2compat_glGetRenderbufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl3_2compat_glRenderbufferStorage(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height); -void gl3_2compat_glGenRenderbuffers(void *_glfuncs, GLsizei n, GLuint* renderbuffers); -void gl3_2compat_glDeleteRenderbuffers(void *_glfuncs, GLsizei n, const GLuint* renderbuffers); -void gl3_2compat_glBindRenderbuffer(void *_glfuncs, GLenum target, GLuint renderbuffer); -GLboolean gl3_2compat_glIsRenderbuffer(void *_glfuncs, GLuint renderbuffer); -void gl3_2compat_glClearBufferfi(void *_glfuncs, GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); -void gl3_2compat_glClearBufferfv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLfloat* value); -void gl3_2compat_glClearBufferuiv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLuint* value); -void gl3_2compat_glClearBufferiv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLint* value); -void gl3_2compat_glGetTexParameterIuiv(void *_glfuncs, GLenum target, GLenum pname, GLuint* params); -void gl3_2compat_glGetTexParameterIiv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl3_2compat_glTexParameterIuiv(void *_glfuncs, GLenum target, GLenum pname, const GLuint* params); -void gl3_2compat_glTexParameterIiv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl3_2compat_glUniform4uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value); -void gl3_2compat_glUniform3uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value); -void gl3_2compat_glUniform2uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value); -void gl3_2compat_glUniform1uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value); -void gl3_2compat_glUniform4ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -void gl3_2compat_glUniform3ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1, GLuint v2); -void gl3_2compat_glUniform2ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1); -void gl3_2compat_glUniform1ui(void *_glfuncs, GLint location, GLuint v0); -GLint gl3_2compat_glGetFragDataLocation(void *_glfuncs, GLuint program, const GLchar* name); -void gl3_2compat_glBindFragDataLocation(void *_glfuncs, GLuint program, GLuint color, const GLchar* name); -void gl3_2compat_glGetUniformuiv(void *_glfuncs, GLuint program, GLint location, GLuint* params); -void gl3_2compat_glGetVertexAttribIuiv(void *_glfuncs, GLuint index, GLenum pname, GLuint* params); -void gl3_2compat_glGetVertexAttribIiv(void *_glfuncs, GLuint index, GLenum pname, GLint* params); -void gl3_2compat_glVertexAttribIPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl3_2compat_glEndConditionalRender(void *_glfuncs); -void gl3_2compat_glBeginConditionalRender(void *_glfuncs, GLuint id, GLenum mode); -void gl3_2compat_glClampColor(void *_glfuncs, GLenum target, GLenum clamp); -void gl3_2compat_glGetTransformFeedbackVarying(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* gltype, GLchar* name); -void gl3_2compat_glBindBufferBase(void *_glfuncs, GLenum target, GLuint index, GLuint buffer); -void gl3_2compat_glBindBufferRange(void *_glfuncs, GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -void gl3_2compat_glEndTransformFeedback(void *_glfuncs); -void gl3_2compat_glBeginTransformFeedback(void *_glfuncs, GLenum primitiveMode); -GLboolean gl3_2compat_glIsEnabledi(void *_glfuncs, GLenum target, GLuint index); -void gl3_2compat_glDisablei(void *_glfuncs, GLenum target, GLuint index); -void gl3_2compat_glEnablei(void *_glfuncs, GLenum target, GLuint index); -void gl3_2compat_glGetIntegeri_v(void *_glfuncs, GLenum target, GLuint index, GLint* data); -void gl3_2compat_glGetBooleani_v(void *_glfuncs, GLenum target, GLuint index, GLboolean* data); -void gl3_2compat_glColorMaski(void *_glfuncs, GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); -void gl3_2compat_glCopyBufferSubData(void *_glfuncs, GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); -void gl3_2compat_glUniformBlockBinding(void *_glfuncs, GLuint program, GLuint v0, GLuint v1); -void gl3_2compat_glGetActiveUniformBlockName(void *_glfuncs, GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformBlockName); -void gl3_2compat_glGetActiveUniformBlockiv(void *_glfuncs, GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint* params); -GLuint gl3_2compat_glGetUniformBlockIndex(void *_glfuncs, GLuint program, const GLchar* uniformBlockName); -void gl3_2compat_glGetActiveUniformName(void *_glfuncs, GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformName); -void gl3_2compat_glGetActiveUniformsiv(void *_glfuncs, GLuint program, GLsizei uniformCount, const GLuint* uniformIndices, GLenum pname, GLint* params); -void gl3_2compat_glPrimitiveRestartIndex(void *_glfuncs, GLuint index); -void gl3_2compat_glTexBuffer(void *_glfuncs, GLenum target, GLenum internalFormat, GLuint buffer); -void gl3_2compat_glDrawElementsInstanced(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLsizei instancecount); -void gl3_2compat_glDrawArraysInstanced(void *_glfuncs, GLenum mode, GLint first, GLsizei count, GLsizei instancecount); -void gl3_2compat_glSampleMaski(void *_glfuncs, GLuint index, GLbitfield mask); -void gl3_2compat_glGetMultisamplefv(void *_glfuncs, GLenum pname, GLuint index, GLfloat* val); -void gl3_2compat_glTexImage3DMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); -void gl3_2compat_glTexImage2DMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); -void gl3_2compat_glGetSynciv(void *_glfuncs, GLsync sync, GLenum pname, GLsizei bufSize, GLsizei* length, GLint* values); -void gl3_2compat_glGetInteger64v(void *_glfuncs, GLenum pname, GLint64* params); -void gl3_2compat_glWaitSync(void *_glfuncs, GLsync sync, GLbitfield flags, GLuint64 timeout); -GLenum gl3_2compat_glClientWaitSync(void *_glfuncs, GLsync sync, GLbitfield flags, GLuint64 timeout); -void gl3_2compat_glDeleteSync(void *_glfuncs, GLsync sync); -GLboolean gl3_2compat_glIsSync(void *_glfuncs, GLsync sync); -GLsync gl3_2compat_glFenceSync(void *_glfuncs, GLenum condition, GLbitfield flags); -void gl3_2compat_glProvokingVertex(void *_glfuncs, GLenum mode); -void gl3_2compat_glDrawElementsInstancedBaseVertex(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLsizei instancecount, GLint basevertex); -void gl3_2compat_glDrawRangeElementsBaseVertex(void *_glfuncs, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum gltype, const GLvoid* indices, GLint basevertex); -void gl3_2compat_glDrawElementsBaseVertex(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLint basevertex); -void gl3_2compat_glFramebufferTexture(void *_glfuncs, GLenum target, GLenum attachment, GLuint texture, GLint level); -void gl3_2compat_glGetBufferParameteri64v(void *_glfuncs, GLenum target, GLenum pname, GLint64* params); -void gl3_2compat_glGetInteger64i_v(void *_glfuncs, GLenum target, GLuint index, GLint64* data); -void gl3_2compat_glTranslatef(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl3_2compat_glTranslated(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl3_2compat_glScalef(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl3_2compat_glScaled(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl3_2compat_glRotatef(void *_glfuncs, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); -void gl3_2compat_glRotated(void *_glfuncs, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); -void gl3_2compat_glPushMatrix(void *_glfuncs); -void gl3_2compat_glPopMatrix(void *_glfuncs); -void gl3_2compat_glOrtho(void *_glfuncs, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -void gl3_2compat_glMultMatrixd(void *_glfuncs, const GLdouble* m); -void gl3_2compat_glMultMatrixf(void *_glfuncs, const GLfloat* m); -void gl3_2compat_glMatrixMode(void *_glfuncs, GLenum mode); -void gl3_2compat_glLoadMatrixd(void *_glfuncs, const GLdouble* m); -void gl3_2compat_glLoadMatrixf(void *_glfuncs, const GLfloat* m); -void gl3_2compat_glLoadIdentity(void *_glfuncs); -void gl3_2compat_glFrustum(void *_glfuncs, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -GLboolean gl3_2compat_glIsList(void *_glfuncs, GLuint list); -void gl3_2compat_glGetTexGeniv(void *_glfuncs, GLenum coord, GLenum pname, GLint* params); -void gl3_2compat_glGetTexGenfv(void *_glfuncs, GLenum coord, GLenum pname, GLfloat* params); -void gl3_2compat_glGetTexGendv(void *_glfuncs, GLenum coord, GLenum pname, GLdouble* params); -void gl3_2compat_glGetTexEnviv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl3_2compat_glGetTexEnvfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl3_2compat_glGetPolygonStipple(void *_glfuncs, GLubyte* mask); -void gl3_2compat_glGetPixelMapusv(void *_glfuncs, GLenum glmap, GLushort* values); -void gl3_2compat_glGetPixelMapuiv(void *_glfuncs, GLenum glmap, GLuint* values); -void gl3_2compat_glGetPixelMapfv(void *_glfuncs, GLenum glmap, GLfloat* values); -void gl3_2compat_glGetMaterialiv(void *_glfuncs, GLenum face, GLenum pname, GLint* params); -void gl3_2compat_glGetMaterialfv(void *_glfuncs, GLenum face, GLenum pname, GLfloat* params); -void gl3_2compat_glGetMapiv(void *_glfuncs, GLenum target, GLenum query, GLint* v); -void gl3_2compat_glGetMapfv(void *_glfuncs, GLenum target, GLenum query, GLfloat* v); -void gl3_2compat_glGetMapdv(void *_glfuncs, GLenum target, GLenum query, GLdouble* v); -void gl3_2compat_glGetLightiv(void *_glfuncs, GLenum light, GLenum pname, GLint* params); -void gl3_2compat_glGetLightfv(void *_glfuncs, GLenum light, GLenum pname, GLfloat* params); -void gl3_2compat_glGetClipPlane(void *_glfuncs, GLenum plane, GLdouble* equation); -void gl3_2compat_glDrawPixels(void *_glfuncs, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl3_2compat_glCopyPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum gltype); -void gl3_2compat_glPixelMapusv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLushort* values); -void gl3_2compat_glPixelMapuiv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLuint* values); -void gl3_2compat_glPixelMapfv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLfloat* values); -void gl3_2compat_glPixelTransferi(void *_glfuncs, GLenum pname, GLint param); -void gl3_2compat_glPixelTransferf(void *_glfuncs, GLenum pname, GLfloat param); -void gl3_2compat_glPixelZoom(void *_glfuncs, GLfloat xfactor, GLfloat yfactor); -void gl3_2compat_glAlphaFunc(void *_glfuncs, GLenum glfunc, GLfloat ref); -void gl3_2compat_glEvalPoint2(void *_glfuncs, GLint i, GLint j); -void gl3_2compat_glEvalMesh2(void *_glfuncs, GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2); -void gl3_2compat_glEvalPoint1(void *_glfuncs, GLint i); -void gl3_2compat_glEvalMesh1(void *_glfuncs, GLenum mode, GLint i1, GLint i2); -void gl3_2compat_glEvalCoord2fv(void *_glfuncs, const GLfloat* u); -void gl3_2compat_glEvalCoord2f(void *_glfuncs, GLfloat u, GLfloat v); -void gl3_2compat_glEvalCoord2dv(void *_glfuncs, const GLdouble* u); -void gl3_2compat_glEvalCoord2d(void *_glfuncs, GLdouble u, GLdouble v); -void gl3_2compat_glEvalCoord1fv(void *_glfuncs, const GLfloat* u); -void gl3_2compat_glEvalCoord1f(void *_glfuncs, GLfloat u); -void gl3_2compat_glEvalCoord1dv(void *_glfuncs, const GLdouble* u); -void gl3_2compat_glEvalCoord1d(void *_glfuncs, GLdouble u); -void gl3_2compat_glMapGrid2f(void *_glfuncs, GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2); -void gl3_2compat_glMapGrid2d(void *_glfuncs, GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2); -void gl3_2compat_glMapGrid1f(void *_glfuncs, GLint un, GLfloat u1, GLfloat u2); -void gl3_2compat_glMapGrid1d(void *_glfuncs, GLint un, GLdouble u1, GLdouble u2); -void gl3_2compat_glMap2f(void *_glfuncs, GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat* points); -void gl3_2compat_glMap2d(void *_glfuncs, GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble* points); -void gl3_2compat_glMap1f(void *_glfuncs, GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat* points); -void gl3_2compat_glMap1d(void *_glfuncs, GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble* points); -void gl3_2compat_glPushAttrib(void *_glfuncs, GLbitfield mask); -void gl3_2compat_glPopAttrib(void *_glfuncs); -void gl3_2compat_glAccum(void *_glfuncs, GLenum op, GLfloat value); -void gl3_2compat_glIndexMask(void *_glfuncs, GLuint mask); -void gl3_2compat_glClearIndex(void *_glfuncs, GLfloat c); -void gl3_2compat_glClearAccum(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl3_2compat_glPushName(void *_glfuncs, GLuint name); -void gl3_2compat_glPopName(void *_glfuncs); -void gl3_2compat_glPassThrough(void *_glfuncs, GLfloat token); -void gl3_2compat_glLoadName(void *_glfuncs, GLuint name); -void gl3_2compat_glInitNames(void *_glfuncs); -GLint gl3_2compat_glRenderMode(void *_glfuncs, GLenum mode); -void gl3_2compat_glSelectBuffer(void *_glfuncs, GLsizei size, GLuint* buffer); -void gl3_2compat_glFeedbackBuffer(void *_glfuncs, GLsizei size, GLenum gltype, GLfloat* buffer); -void gl3_2compat_glTexGeniv(void *_glfuncs, GLenum coord, GLenum pname, const GLint* params); -void gl3_2compat_glTexGeni(void *_glfuncs, GLenum coord, GLenum pname, GLint param); -void gl3_2compat_glTexGenfv(void *_glfuncs, GLenum coord, GLenum pname, const GLfloat* params); -void gl3_2compat_glTexGenf(void *_glfuncs, GLenum coord, GLenum pname, GLfloat param); -void gl3_2compat_glTexGendv(void *_glfuncs, GLenum coord, GLenum pname, const GLdouble* params); -void gl3_2compat_glTexGend(void *_glfuncs, GLenum coord, GLenum pname, GLdouble param); -void gl3_2compat_glTexEnviv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl3_2compat_glTexEnvi(void *_glfuncs, GLenum target, GLenum pname, GLint param); -void gl3_2compat_glTexEnvfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params); -void gl3_2compat_glTexEnvf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param); -void gl3_2compat_glShadeModel(void *_glfuncs, GLenum mode); -void gl3_2compat_glPolygonStipple(void *_glfuncs, const GLubyte* mask); -void gl3_2compat_glMaterialiv(void *_glfuncs, GLenum face, GLenum pname, const GLint* params); -void gl3_2compat_glMateriali(void *_glfuncs, GLenum face, GLenum pname, GLint param); -void gl3_2compat_glMaterialfv(void *_glfuncs, GLenum face, GLenum pname, const GLfloat* params); -void gl3_2compat_glMaterialf(void *_glfuncs, GLenum face, GLenum pname, GLfloat param); -void gl3_2compat_glLineStipple(void *_glfuncs, GLint factor, GLushort pattern); -void gl3_2compat_glLightModeliv(void *_glfuncs, GLenum pname, const GLint* params); -void gl3_2compat_glLightModeli(void *_glfuncs, GLenum pname, GLint param); -void gl3_2compat_glLightModelfv(void *_glfuncs, GLenum pname, const GLfloat* params); -void gl3_2compat_glLightModelf(void *_glfuncs, GLenum pname, GLfloat param); -void gl3_2compat_glLightiv(void *_glfuncs, GLenum light, GLenum pname, const GLint* params); -void gl3_2compat_glLighti(void *_glfuncs, GLenum light, GLenum pname, GLint param); -void gl3_2compat_glLightfv(void *_glfuncs, GLenum light, GLenum pname, const GLfloat* params); -void gl3_2compat_glLightf(void *_glfuncs, GLenum light, GLenum pname, GLfloat param); -void gl3_2compat_glFogiv(void *_glfuncs, GLenum pname, const GLint* params); -void gl3_2compat_glFogi(void *_glfuncs, GLenum pname, GLint param); -void gl3_2compat_glFogfv(void *_glfuncs, GLenum pname, const GLfloat* params); -void gl3_2compat_glFogf(void *_glfuncs, GLenum pname, GLfloat param); -void gl3_2compat_glColorMaterial(void *_glfuncs, GLenum face, GLenum mode); -void gl3_2compat_glClipPlane(void *_glfuncs, GLenum plane, const GLdouble* equation); -void gl3_2compat_glVertex4sv(void *_glfuncs, const GLshort* v); -void gl3_2compat_glVertex4s(void *_glfuncs, GLshort x, GLshort y, GLshort z, GLshort w); -void gl3_2compat_glVertex4iv(void *_glfuncs, const GLint* v); -void gl3_2compat_glVertex4i(void *_glfuncs, GLint x, GLint y, GLint z, GLint w); -void gl3_2compat_glVertex4fv(void *_glfuncs, const GLfloat* v); -void gl3_2compat_glVertex4f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -void gl3_2compat_glVertex4dv(void *_glfuncs, const GLdouble* v); -void gl3_2compat_glVertex4d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -void gl3_2compat_glVertex3sv(void *_glfuncs, const GLshort* v); -void gl3_2compat_glVertex3s(void *_glfuncs, GLshort x, GLshort y, GLshort z); -void gl3_2compat_glVertex3iv(void *_glfuncs, const GLint* v); -void gl3_2compat_glVertex3i(void *_glfuncs, GLint x, GLint y, GLint z); -void gl3_2compat_glVertex3fv(void *_glfuncs, const GLfloat* v); -void gl3_2compat_glVertex3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl3_2compat_glVertex3dv(void *_glfuncs, const GLdouble* v); -void gl3_2compat_glVertex3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl3_2compat_glVertex2sv(void *_glfuncs, const GLshort* v); -void gl3_2compat_glVertex2s(void *_glfuncs, GLshort x, GLshort y); -void gl3_2compat_glVertex2iv(void *_glfuncs, const GLint* v); -void gl3_2compat_glVertex2i(void *_glfuncs, GLint x, GLint y); -void gl3_2compat_glVertex2fv(void *_glfuncs, const GLfloat* v); -void gl3_2compat_glVertex2f(void *_glfuncs, GLfloat x, GLfloat y); -void gl3_2compat_glVertex2dv(void *_glfuncs, const GLdouble* v); -void gl3_2compat_glVertex2d(void *_glfuncs, GLdouble x, GLdouble y); -void gl3_2compat_glTexCoord4sv(void *_glfuncs, const GLshort* v); -void gl3_2compat_glTexCoord4s(void *_glfuncs, GLshort s, GLshort t, GLshort r, GLshort q); -void gl3_2compat_glTexCoord4iv(void *_glfuncs, const GLint* v); -void gl3_2compat_glTexCoord4i(void *_glfuncs, GLint s, GLint t, GLint r, GLint q); -void gl3_2compat_glTexCoord4fv(void *_glfuncs, const GLfloat* v); -void gl3_2compat_glTexCoord4f(void *_glfuncs, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -void gl3_2compat_glTexCoord4dv(void *_glfuncs, const GLdouble* v); -void gl3_2compat_glTexCoord4d(void *_glfuncs, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -void gl3_2compat_glTexCoord3sv(void *_glfuncs, const GLshort* v); -void gl3_2compat_glTexCoord3s(void *_glfuncs, GLshort s, GLshort t, GLshort r); -void gl3_2compat_glTexCoord3iv(void *_glfuncs, const GLint* v); -void gl3_2compat_glTexCoord3i(void *_glfuncs, GLint s, GLint t, GLint r); -void gl3_2compat_glTexCoord3fv(void *_glfuncs, const GLfloat* v); -void gl3_2compat_glTexCoord3f(void *_glfuncs, GLfloat s, GLfloat t, GLfloat r); -void gl3_2compat_glTexCoord3dv(void *_glfuncs, const GLdouble* v); -void gl3_2compat_glTexCoord3d(void *_glfuncs, GLdouble s, GLdouble t, GLdouble r); -void gl3_2compat_glTexCoord2sv(void *_glfuncs, const GLshort* v); -void gl3_2compat_glTexCoord2s(void *_glfuncs, GLshort s, GLshort t); -void gl3_2compat_glTexCoord2iv(void *_glfuncs, const GLint* v); -void gl3_2compat_glTexCoord2i(void *_glfuncs, GLint s, GLint t); -void gl3_2compat_glTexCoord2fv(void *_glfuncs, const GLfloat* v); -void gl3_2compat_glTexCoord2f(void *_glfuncs, GLfloat s, GLfloat t); -void gl3_2compat_glTexCoord2dv(void *_glfuncs, const GLdouble* v); -void gl3_2compat_glTexCoord2d(void *_glfuncs, GLdouble s, GLdouble t); -void gl3_2compat_glTexCoord1sv(void *_glfuncs, const GLshort* v); -void gl3_2compat_glTexCoord1s(void *_glfuncs, GLshort s); -void gl3_2compat_glTexCoord1iv(void *_glfuncs, const GLint* v); -void gl3_2compat_glTexCoord1i(void *_glfuncs, GLint s); -void gl3_2compat_glTexCoord1fv(void *_glfuncs, const GLfloat* v); -void gl3_2compat_glTexCoord1f(void *_glfuncs, GLfloat s); -void gl3_2compat_glTexCoord1dv(void *_glfuncs, const GLdouble* v); -void gl3_2compat_glTexCoord1d(void *_glfuncs, GLdouble s); -void gl3_2compat_glRectsv(void *_glfuncs, const GLshort* v1, const GLshort* v2); -void gl3_2compat_glRects(void *_glfuncs, GLshort x1, GLshort y1, GLshort x2, GLshort y2); -void gl3_2compat_glRectiv(void *_glfuncs, const GLint* v1, const GLint* v2); -void gl3_2compat_glRecti(void *_glfuncs, GLint x1, GLint y1, GLint x2, GLint y2); -void gl3_2compat_glRectfv(void *_glfuncs, const GLfloat* v1, const GLfloat* v2); -void gl3_2compat_glRectf(void *_glfuncs, GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2); -void gl3_2compat_glRectdv(void *_glfuncs, const GLdouble* v1, const GLdouble* v2); -void gl3_2compat_glRectd(void *_glfuncs, GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2); -void gl3_2compat_glRasterPos4sv(void *_glfuncs, const GLshort* v); -void gl3_2compat_glRasterPos4s(void *_glfuncs, GLshort x, GLshort y, GLshort z, GLshort w); -void gl3_2compat_glRasterPos4iv(void *_glfuncs, const GLint* v); -void gl3_2compat_glRasterPos4i(void *_glfuncs, GLint x, GLint y, GLint z, GLint w); -void gl3_2compat_glRasterPos4fv(void *_glfuncs, const GLfloat* v); -void gl3_2compat_glRasterPos4f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -void gl3_2compat_glRasterPos4dv(void *_glfuncs, const GLdouble* v); -void gl3_2compat_glRasterPos4d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -void gl3_2compat_glRasterPos3sv(void *_glfuncs, const GLshort* v); -void gl3_2compat_glRasterPos3s(void *_glfuncs, GLshort x, GLshort y, GLshort z); -void gl3_2compat_glRasterPos3iv(void *_glfuncs, const GLint* v); -void gl3_2compat_glRasterPos3i(void *_glfuncs, GLint x, GLint y, GLint z); -void gl3_2compat_glRasterPos3fv(void *_glfuncs, const GLfloat* v); -void gl3_2compat_glRasterPos3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl3_2compat_glRasterPos3dv(void *_glfuncs, const GLdouble* v); -void gl3_2compat_glRasterPos3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl3_2compat_glRasterPos2sv(void *_glfuncs, const GLshort* v); -void gl3_2compat_glRasterPos2s(void *_glfuncs, GLshort x, GLshort y); -void gl3_2compat_glRasterPos2iv(void *_glfuncs, const GLint* v); -void gl3_2compat_glRasterPos2i(void *_glfuncs, GLint x, GLint y); -void gl3_2compat_glRasterPos2fv(void *_glfuncs, const GLfloat* v); -void gl3_2compat_glRasterPos2f(void *_glfuncs, GLfloat x, GLfloat y); -void gl3_2compat_glRasterPos2dv(void *_glfuncs, const GLdouble* v); -void gl3_2compat_glRasterPos2d(void *_glfuncs, GLdouble x, GLdouble y); -void gl3_2compat_glNormal3sv(void *_glfuncs, const GLshort* v); -void gl3_2compat_glNormal3s(void *_glfuncs, GLshort nx, GLshort ny, GLshort nz); -void gl3_2compat_glNormal3iv(void *_glfuncs, const GLint* v); -void gl3_2compat_glNormal3i(void *_glfuncs, GLint nx, GLint ny, GLint nz); -void gl3_2compat_glNormal3fv(void *_glfuncs, const GLfloat* v); -void gl3_2compat_glNormal3f(void *_glfuncs, GLfloat nx, GLfloat ny, GLfloat nz); -void gl3_2compat_glNormal3dv(void *_glfuncs, const GLdouble* v); -void gl3_2compat_glNormal3d(void *_glfuncs, GLdouble nx, GLdouble ny, GLdouble nz); -void gl3_2compat_glNormal3bv(void *_glfuncs, const GLbyte* v); -void gl3_2compat_glNormal3b(void *_glfuncs, GLbyte nx, GLbyte ny, GLbyte nz); -void gl3_2compat_glIndexsv(void *_glfuncs, const GLshort* c); -void gl3_2compat_glIndexs(void *_glfuncs, GLshort c); -void gl3_2compat_glIndexiv(void *_glfuncs, const GLint* c); -void gl3_2compat_glIndexi(void *_glfuncs, GLint c); -void gl3_2compat_glIndexfv(void *_glfuncs, const GLfloat* c); -void gl3_2compat_glIndexf(void *_glfuncs, GLfloat c); -void gl3_2compat_glIndexdv(void *_glfuncs, const GLdouble* c); -void gl3_2compat_glIndexd(void *_glfuncs, GLdouble c); -void gl3_2compat_glEnd(void *_glfuncs); -void gl3_2compat_glEdgeFlagv(void *_glfuncs, const GLboolean* flag); -void gl3_2compat_glEdgeFlag(void *_glfuncs, GLboolean flag); -void gl3_2compat_glColor4usv(void *_glfuncs, const GLushort* v); -void gl3_2compat_glColor4us(void *_glfuncs, GLushort red, GLushort green, GLushort blue, GLushort alpha); -void gl3_2compat_glColor4uiv(void *_glfuncs, const GLuint* v); -void gl3_2compat_glColor4ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue, GLuint alpha); -void gl3_2compat_glColor4ubv(void *_glfuncs, const GLubyte* v); -void gl3_2compat_glColor4ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha); -void gl3_2compat_glColor4sv(void *_glfuncs, const GLshort* v); -void gl3_2compat_glColor4s(void *_glfuncs, GLshort red, GLshort green, GLshort blue, GLshort alpha); -void gl3_2compat_glColor4iv(void *_glfuncs, const GLint* v); -void gl3_2compat_glColor4i(void *_glfuncs, GLint red, GLint green, GLint blue, GLint alpha); -void gl3_2compat_glColor4fv(void *_glfuncs, const GLfloat* v); -void gl3_2compat_glColor4f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl3_2compat_glColor4dv(void *_glfuncs, const GLdouble* v); -void gl3_2compat_glColor4d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha); -void gl3_2compat_glColor4bv(void *_glfuncs, const GLbyte* v); -void gl3_2compat_glColor4b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha); -void gl3_2compat_glColor3usv(void *_glfuncs, const GLushort* v); -void gl3_2compat_glColor3us(void *_glfuncs, GLushort red, GLushort green, GLushort blue); -void gl3_2compat_glColor3uiv(void *_glfuncs, const GLuint* v); -void gl3_2compat_glColor3ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue); -void gl3_2compat_glColor3ubv(void *_glfuncs, const GLubyte* v); -void gl3_2compat_glColor3ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue); -void gl3_2compat_glColor3sv(void *_glfuncs, const GLshort* v); -void gl3_2compat_glColor3s(void *_glfuncs, GLshort red, GLshort green, GLshort blue); -void gl3_2compat_glColor3iv(void *_glfuncs, const GLint* v); -void gl3_2compat_glColor3i(void *_glfuncs, GLint red, GLint green, GLint blue); -void gl3_2compat_glColor3fv(void *_glfuncs, const GLfloat* v); -void gl3_2compat_glColor3f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue); -void gl3_2compat_glColor3dv(void *_glfuncs, const GLdouble* v); -void gl3_2compat_glColor3d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue); -void gl3_2compat_glColor3bv(void *_glfuncs, const GLbyte* v); -void gl3_2compat_glColor3b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue); -void gl3_2compat_glBitmap(void *_glfuncs, GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte* bitmap); -void gl3_2compat_glBegin(void *_glfuncs, GLenum mode); -void gl3_2compat_glListBase(void *_glfuncs, GLuint base); -GLuint gl3_2compat_glGenLists(void *_glfuncs, GLsizei range_); -void gl3_2compat_glDeleteLists(void *_glfuncs, GLuint list, GLsizei range_); -void gl3_2compat_glCallLists(void *_glfuncs, GLsizei n, GLenum gltype, const GLvoid* lists); -void gl3_2compat_glCallList(void *_glfuncs, GLuint list); -void gl3_2compat_glEndList(void *_glfuncs); -void gl3_2compat_glNewList(void *_glfuncs, GLuint list, GLenum mode); -void gl3_2compat_glPushClientAttrib(void *_glfuncs, GLbitfield mask); -void gl3_2compat_glPopClientAttrib(void *_glfuncs); -void gl3_2compat_glPrioritizeTextures(void *_glfuncs, GLsizei n, const GLuint* textures, const GLfloat* priorities); -GLboolean gl3_2compat_glAreTexturesResident(void *_glfuncs, GLsizei n, const GLuint* textures, GLboolean* residences); -void gl3_2compat_glVertexPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl3_2compat_glTexCoordPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl3_2compat_glNormalPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl3_2compat_glInterleavedArrays(void *_glfuncs, GLenum format, GLsizei stride, const GLvoid* pointer); -void gl3_2compat_glIndexPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl3_2compat_glEnableClientState(void *_glfuncs, GLenum array); -void gl3_2compat_glEdgeFlagPointer(void *_glfuncs, GLsizei stride, const GLvoid* pointer); -void gl3_2compat_glDisableClientState(void *_glfuncs, GLenum array); -void gl3_2compat_glColorPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl3_2compat_glArrayElement(void *_glfuncs, GLint i); -void gl3_2compat_glResetMinmax(void *_glfuncs, GLenum target); -void gl3_2compat_glResetHistogram(void *_glfuncs, GLenum target); -void gl3_2compat_glMinmax(void *_glfuncs, GLenum target, GLenum internalFormat, GLboolean sink); -void gl3_2compat_glHistogram(void *_glfuncs, GLenum target, GLsizei width, GLenum internalFormat, GLboolean sink); -void gl3_2compat_glGetMinmaxParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl3_2compat_glGetMinmaxParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl3_2compat_glGetMinmax(void *_glfuncs, GLenum target, GLboolean reset, GLenum format, GLenum gltype, GLvoid* values); -void gl3_2compat_glGetHistogramParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl3_2compat_glGetHistogramParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl3_2compat_glGetHistogram(void *_glfuncs, GLenum target, GLboolean reset, GLenum format, GLenum gltype, GLvoid* values); -void gl3_2compat_glSeparableFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* row, const GLvoid* column); -void gl3_2compat_glGetSeparableFilter(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* row, GLvoid* column, GLvoid* span); -void gl3_2compat_glGetConvolutionParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl3_2compat_glGetConvolutionParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl3_2compat_glGetConvolutionFilter(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* image); -void gl3_2compat_glCopyConvolutionFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height); -void gl3_2compat_glCopyConvolutionFilter1D(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width); -void gl3_2compat_glConvolutionParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl3_2compat_glConvolutionParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint params); -void gl3_2compat_glConvolutionParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params); -void gl3_2compat_glConvolutionParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat params); -void gl3_2compat_glConvolutionFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* image); -void gl3_2compat_glConvolutionFilter1D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum gltype, const GLvoid* image); -void gl3_2compat_glCopyColorSubTable(void *_glfuncs, GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); -void gl3_2compat_glColorSubTable(void *_glfuncs, GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum gltype, const GLvoid* data); -void gl3_2compat_glGetColorTableParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl3_2compat_glGetColorTableParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl3_2compat_glGetColorTable(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* table); -void gl3_2compat_glCopyColorTable(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width); -void gl3_2compat_glColorTableParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl3_2compat_glColorTableParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params); -void gl3_2compat_glColorTable(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum gltype, const GLvoid* table); -void gl3_2compat_glMultTransposeMatrixd(void *_glfuncs, const GLdouble* m); -void gl3_2compat_glMultTransposeMatrixf(void *_glfuncs, const GLfloat* m); -void gl3_2compat_glLoadTransposeMatrixd(void *_glfuncs, const GLdouble* m); -void gl3_2compat_glLoadTransposeMatrixf(void *_glfuncs, const GLfloat* m); -void gl3_2compat_glMultiTexCoord4sv(void *_glfuncs, GLenum target, const GLshort* v); -void gl3_2compat_glMultiTexCoord4s(void *_glfuncs, GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); -void gl3_2compat_glMultiTexCoord4iv(void *_glfuncs, GLenum target, const GLint* v); -void gl3_2compat_glMultiTexCoord4i(void *_glfuncs, GLenum target, GLint s, GLint t, GLint r, GLint q); -void gl3_2compat_glMultiTexCoord4fv(void *_glfuncs, GLenum target, const GLfloat* v); -void gl3_2compat_glMultiTexCoord4f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -void gl3_2compat_glMultiTexCoord4dv(void *_glfuncs, GLenum target, const GLdouble* v); -void gl3_2compat_glMultiTexCoord4d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -void gl3_2compat_glMultiTexCoord3sv(void *_glfuncs, GLenum target, const GLshort* v); -void gl3_2compat_glMultiTexCoord3s(void *_glfuncs, GLenum target, GLshort s, GLshort t, GLshort r); -void gl3_2compat_glMultiTexCoord3iv(void *_glfuncs, GLenum target, const GLint* v); -void gl3_2compat_glMultiTexCoord3i(void *_glfuncs, GLenum target, GLint s, GLint t, GLint r); -void gl3_2compat_glMultiTexCoord3fv(void *_glfuncs, GLenum target, const GLfloat* v); -void gl3_2compat_glMultiTexCoord3f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t, GLfloat r); -void gl3_2compat_glMultiTexCoord3dv(void *_glfuncs, GLenum target, const GLdouble* v); -void gl3_2compat_glMultiTexCoord3d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t, GLdouble r); -void gl3_2compat_glMultiTexCoord2sv(void *_glfuncs, GLenum target, const GLshort* v); -void gl3_2compat_glMultiTexCoord2s(void *_glfuncs, GLenum target, GLshort s, GLshort t); -void gl3_2compat_glMultiTexCoord2iv(void *_glfuncs, GLenum target, const GLint* v); -void gl3_2compat_glMultiTexCoord2i(void *_glfuncs, GLenum target, GLint s, GLint t); -void gl3_2compat_glMultiTexCoord2fv(void *_glfuncs, GLenum target, const GLfloat* v); -void gl3_2compat_glMultiTexCoord2f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t); -void gl3_2compat_glMultiTexCoord2dv(void *_glfuncs, GLenum target, const GLdouble* v); -void gl3_2compat_glMultiTexCoord2d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t); -void gl3_2compat_glMultiTexCoord1sv(void *_glfuncs, GLenum target, const GLshort* v); -void gl3_2compat_glMultiTexCoord1s(void *_glfuncs, GLenum target, GLshort s); -void gl3_2compat_glMultiTexCoord1iv(void *_glfuncs, GLenum target, const GLint* v); -void gl3_2compat_glMultiTexCoord1i(void *_glfuncs, GLenum target, GLint s); -void gl3_2compat_glMultiTexCoord1fv(void *_glfuncs, GLenum target, const GLfloat* v); -void gl3_2compat_glMultiTexCoord1f(void *_glfuncs, GLenum target, GLfloat s); -void gl3_2compat_glMultiTexCoord1dv(void *_glfuncs, GLenum target, const GLdouble* v); -void gl3_2compat_glMultiTexCoord1d(void *_glfuncs, GLenum target, GLdouble s); -void gl3_2compat_glClientActiveTexture(void *_glfuncs, GLenum texture); -void gl3_2compat_glWindowPos3sv(void *_glfuncs, const GLshort* v); -void gl3_2compat_glWindowPos3s(void *_glfuncs, GLshort x, GLshort y, GLshort z); -void gl3_2compat_glWindowPos3iv(void *_glfuncs, const GLint* v); -void gl3_2compat_glWindowPos3i(void *_glfuncs, GLint x, GLint y, GLint z); -void gl3_2compat_glWindowPos3fv(void *_glfuncs, const GLfloat* v); -void gl3_2compat_glWindowPos3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl3_2compat_glWindowPos3dv(void *_glfuncs, const GLdouble* v); -void gl3_2compat_glWindowPos3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl3_2compat_glWindowPos2sv(void *_glfuncs, const GLshort* v); -void gl3_2compat_glWindowPos2s(void *_glfuncs, GLshort x, GLshort y); -void gl3_2compat_glWindowPos2iv(void *_glfuncs, const GLint* v); -void gl3_2compat_glWindowPos2i(void *_glfuncs, GLint x, GLint y); -void gl3_2compat_glWindowPos2fv(void *_glfuncs, const GLfloat* v); -void gl3_2compat_glWindowPos2f(void *_glfuncs, GLfloat x, GLfloat y); -void gl3_2compat_glWindowPos2dv(void *_glfuncs, const GLdouble* v); -void gl3_2compat_glWindowPos2d(void *_glfuncs, GLdouble x, GLdouble y); -void gl3_2compat_glSecondaryColorPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl3_2compat_glSecondaryColor3usv(void *_glfuncs, const GLushort* v); -void gl3_2compat_glSecondaryColor3us(void *_glfuncs, GLushort red, GLushort green, GLushort blue); -void gl3_2compat_glSecondaryColor3uiv(void *_glfuncs, const GLuint* v); -void gl3_2compat_glSecondaryColor3ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue); -void gl3_2compat_glSecondaryColor3ubv(void *_glfuncs, const GLubyte* v); -void gl3_2compat_glSecondaryColor3ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue); -void gl3_2compat_glSecondaryColor3sv(void *_glfuncs, const GLshort* v); -void gl3_2compat_glSecondaryColor3s(void *_glfuncs, GLshort red, GLshort green, GLshort blue); -void gl3_2compat_glSecondaryColor3iv(void *_glfuncs, const GLint* v); -void gl3_2compat_glSecondaryColor3i(void *_glfuncs, GLint red, GLint green, GLint blue); -void gl3_2compat_glSecondaryColor3fv(void *_glfuncs, const GLfloat* v); -void gl3_2compat_glSecondaryColor3f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue); -void gl3_2compat_glSecondaryColor3dv(void *_glfuncs, const GLdouble* v); -void gl3_2compat_glSecondaryColor3d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue); -void gl3_2compat_glSecondaryColor3bv(void *_glfuncs, const GLbyte* v); -void gl3_2compat_glSecondaryColor3b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue); -void gl3_2compat_glFogCoordPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl3_2compat_glFogCoorddv(void *_glfuncs, const GLdouble* coord); -void gl3_2compat_glFogCoordd(void *_glfuncs, GLdouble coord); -void gl3_2compat_glFogCoordfv(void *_glfuncs, const GLfloat* coord); -void gl3_2compat_glFogCoordf(void *_glfuncs, GLfloat coord); -void gl3_2compat_glVertexAttrib4usv(void *_glfuncs, GLuint index, const GLushort* v); -void gl3_2compat_glVertexAttrib4uiv(void *_glfuncs, GLuint index, const GLuint* v); -void gl3_2compat_glVertexAttrib4ubv(void *_glfuncs, GLuint index, const GLubyte* v); -void gl3_2compat_glVertexAttrib4sv(void *_glfuncs, GLuint index, const GLshort* v); -void gl3_2compat_glVertexAttrib4s(void *_glfuncs, GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -void gl3_2compat_glVertexAttrib4iv(void *_glfuncs, GLuint index, const GLint* v); -void gl3_2compat_glVertexAttrib4fv(void *_glfuncs, GLuint index, const GLfloat* v); -void gl3_2compat_glVertexAttrib4f(void *_glfuncs, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -void gl3_2compat_glVertexAttrib4dv(void *_glfuncs, GLuint index, const GLdouble* v); -void gl3_2compat_glVertexAttrib4d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -void gl3_2compat_glVertexAttrib4bv(void *_glfuncs, GLuint index, const GLbyte* v); -void gl3_2compat_glVertexAttrib4Nusv(void *_glfuncs, GLuint index, const GLushort* v); -void gl3_2compat_glVertexAttrib4Nuiv(void *_glfuncs, GLuint index, const GLuint* v); -void gl3_2compat_glVertexAttrib4Nubv(void *_glfuncs, GLuint index, const GLubyte* v); -void gl3_2compat_glVertexAttrib4Nub(void *_glfuncs, GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -void gl3_2compat_glVertexAttrib4Nsv(void *_glfuncs, GLuint index, const GLshort* v); -void gl3_2compat_glVertexAttrib4Niv(void *_glfuncs, GLuint index, const GLint* v); -void gl3_2compat_glVertexAttrib4Nbv(void *_glfuncs, GLuint index, const GLbyte* v); -void gl3_2compat_glVertexAttrib3sv(void *_glfuncs, GLuint index, const GLshort* v); -void gl3_2compat_glVertexAttrib3s(void *_glfuncs, GLuint index, GLshort x, GLshort y, GLshort z); -void gl3_2compat_glVertexAttrib3fv(void *_glfuncs, GLuint index, const GLfloat* v); -void gl3_2compat_glVertexAttrib3f(void *_glfuncs, GLuint index, GLfloat x, GLfloat y, GLfloat z); -void gl3_2compat_glVertexAttrib3dv(void *_glfuncs, GLuint index, const GLdouble* v); -void gl3_2compat_glVertexAttrib3d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y, GLdouble z); -void gl3_2compat_glVertexAttrib2sv(void *_glfuncs, GLuint index, const GLshort* v); -void gl3_2compat_glVertexAttrib2s(void *_glfuncs, GLuint index, GLshort x, GLshort y); -void gl3_2compat_glVertexAttrib2fv(void *_glfuncs, GLuint index, const GLfloat* v); -void gl3_2compat_glVertexAttrib2f(void *_glfuncs, GLuint index, GLfloat x, GLfloat y); -void gl3_2compat_glVertexAttrib2dv(void *_glfuncs, GLuint index, const GLdouble* v); -void gl3_2compat_glVertexAttrib2d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y); -void gl3_2compat_glVertexAttrib1sv(void *_glfuncs, GLuint index, const GLshort* v); -void gl3_2compat_glVertexAttrib1s(void *_glfuncs, GLuint index, GLshort x); -void gl3_2compat_glVertexAttrib1fv(void *_glfuncs, GLuint index, const GLfloat* v); -void gl3_2compat_glVertexAttrib1f(void *_glfuncs, GLuint index, GLfloat x); -void gl3_2compat_glVertexAttrib1dv(void *_glfuncs, GLuint index, const GLdouble* v); -void gl3_2compat_glVertexAttrib1d(void *_glfuncs, GLuint index, GLdouble x); -void gl3_2compat_glVertexAttribI4usv(void *_glfuncs, GLuint index, const GLushort* v); -void gl3_2compat_glVertexAttribI4ubv(void *_glfuncs, GLuint index, const GLubyte* v); -void gl3_2compat_glVertexAttribI4sv(void *_glfuncs, GLuint index, const GLshort* v); -void gl3_2compat_glVertexAttribI4bv(void *_glfuncs, GLuint index, const GLbyte* v); -void gl3_2compat_glVertexAttribI4uiv(void *_glfuncs, GLuint index, const GLuint* v); -void gl3_2compat_glVertexAttribI3uiv(void *_glfuncs, GLuint index, const GLuint* v); -void gl3_2compat_glVertexAttribI2uiv(void *_glfuncs, GLuint index, const GLuint* v); -void gl3_2compat_glVertexAttribI1uiv(void *_glfuncs, GLuint index, const GLuint* v); -void gl3_2compat_glVertexAttribI4iv(void *_glfuncs, GLuint index, const GLint* v); -void gl3_2compat_glVertexAttribI3iv(void *_glfuncs, GLuint index, const GLint* v); -void gl3_2compat_glVertexAttribI2iv(void *_glfuncs, GLuint index, const GLint* v); -void gl3_2compat_glVertexAttribI1iv(void *_glfuncs, GLuint index, const GLint* v); -void gl3_2compat_glVertexAttribI4ui(void *_glfuncs, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -void gl3_2compat_glVertexAttribI3ui(void *_glfuncs, GLuint index, GLuint x, GLuint y, GLuint z); -void gl3_2compat_glVertexAttribI2ui(void *_glfuncs, GLuint index, GLuint x, GLuint y); -void gl3_2compat_glVertexAttribI1ui(void *_glfuncs, GLuint index, GLuint x); -void gl3_2compat_glVertexAttribI4i(void *_glfuncs, GLuint index, GLint x, GLint y, GLint z, GLint w); -void gl3_2compat_glVertexAttribI3i(void *_glfuncs, GLuint index, GLint x, GLint y, GLint z); -void gl3_2compat_glVertexAttribI2i(void *_glfuncs, GLuint index, GLint x, GLint y); -void gl3_2compat_glVertexAttribI1i(void *_glfuncs, GLuint index, GLint x); - - -#ifdef __cplusplus -} // extern "C" -#endif diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/3.2compat/gl.go b/Godeps/_workspace/src/github.com/obscuren/qml/gl/3.2compat/gl.go deleted file mode 100644 index 3cf74a01ed..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/3.2compat/gl.go +++ /dev/null @@ -1,7973 +0,0 @@ -// ** file automatically generated by glgen -- do not edit manually ** - -package GL - -// #cgo CXXFLAGS: -std=c++0x -pedantic-errors -Wall -fno-strict-aliasing -// #cgo LDFLAGS: -lstdc++ -// #cgo pkg-config: Qt5Core Qt5OpenGL -// -// #include "funcs.h" -// -// void free(void*); -// -import "C" - -import ( - "fmt" - "reflect" - "unsafe" - - "gopkg.in/qml.v1/gl/glbase" -) - -// API returns a value that offers methods matching the OpenGL version 3.2 API. -// -// The returned API must not be used after the provided OpenGL context becomes invalid. -func API(context glbase.Contexter) *GL { - gl := &GL{} - gl.funcs = C.gl3_2compat_funcs() - if gl.funcs == nil { - panic(fmt.Errorf("OpenGL version 3.2 is not available")) - } - return gl -} - -// GL implements the OpenGL version 3.2 API. Values of this -// type must be created via the API function, and it must not be used after -// the associated OpenGL context becomes invalid. -type GL struct { - funcs unsafe.Pointer -} - -const ( - FALSE = 0 - TRUE = 1 - NONE = 0 - - BYTE = 0x1400 - UNSIGNED_BYTE = 0x1401 - SHORT = 0x1402 - UNSIGNED_SHORT = 0x1403 - INT = 0x1404 - UNSIGNED_INT = 0x1405 - FLOAT = 0x1406 - N2_BYTES = 0x1407 - N3_BYTES = 0x1408 - N4_BYTES = 0x1409 - DOUBLE = 0x140A - HALF_FLOAT = 0x140B - - ACCUM = 0x0100 - LOAD = 0x0101 - RETURN = 0x0102 - MULT = 0x0103 - ADD = 0x0104 - - ACCUM_BUFFER_BIT = 0x00000200 - ALL_ATTRIB_BITS = 0xFFFFFFFF - COLOR_BUFFER_BIT = 0x00004000 - CURRENT_BIT = 0x00000001 - DEPTH_BUFFER_BIT = 0x00000100 - ENABLE_BIT = 0x00002000 - EVAL_BIT = 0x00010000 - FOG_BIT = 0x00000080 - HINT_BIT = 0x00008000 - LIGHTING_BIT = 0x00000040 - LINE_BIT = 0x00000004 - LIST_BIT = 0x00020000 - MULTISAMPLE_BIT = 0x20000000 - PIXEL_MODE_BIT = 0x00000020 - POINT_BIT = 0x00000002 - POLYGON_BIT = 0x00000008 - POLYGON_STIPPLE_BIT = 0x00000010 - SCISSOR_BIT = 0x00080000 - STENCIL_BUFFER_BIT = 0x00000400 - TEXTURE_BIT = 0x00040000 - TRANSFORM_BIT = 0x00001000 - VIEWPORT_BIT = 0x00000800 - - ALWAYS = 0x0207 - EQUAL = 0x0202 - GEQUAL = 0x0206 - GREATER = 0x0204 - LEQUAL = 0x0203 - LESS = 0x0201 - NEVER = 0x0200 - NOTEQUAL = 0x0205 - - LOGIC_OP = 0x0BF1 - - DST_ALPHA = 0x0304 - ONE = 1 - ONE_MINUS_DST_ALPHA = 0x0305 - ONE_MINUS_SRC_ALPHA = 0x0303 - ONE_MINUS_SRC_COLOR = 0x0301 - SRC_ALPHA = 0x0302 - SRC_COLOR = 0x0300 - ZERO = 0 - - DST_COLOR = 0x0306 - ONE_MINUS_DST_COLOR = 0x0307 - SRC_ALPHA_SATURATE = 0x0308 - - CLIENT_ALL_ATTRIB_BITS = 0xFFFFFFFF - CLIENT_PIXEL_STORE_BIT = 0x00000001 - CLIENT_VERTEX_ARRAY_BIT = 0x00000002 - - CLIP_DISTANCE0 = 0x3000 - CLIP_DISTANCE1 = 0x3001 - CLIP_DISTANCE2 = 0x3002 - CLIP_DISTANCE3 = 0x3003 - CLIP_DISTANCE4 = 0x3004 - CLIP_DISTANCE5 = 0x3005 - CLIP_DISTANCE6 = 0x3006 - CLIP_DISTANCE7 = 0x3007 - CLIP_PLANE0 = 0x3000 - CLIP_PLANE1 = 0x3001 - CLIP_PLANE2 = 0x3002 - CLIP_PLANE3 = 0x3003 - CLIP_PLANE4 = 0x3004 - CLIP_PLANE5 = 0x3005 - - BACK = 0x0405 - FRONT = 0x0404 - FRONT_AND_BACK = 0x0408 - - AMBIENT = 0x1200 - AMBIENT_AND_DIFFUSE = 0x1602 - DIFFUSE = 0x1201 - EMISSION = 0x1600 - SPECULAR = 0x1202 - - CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT = 0x00000001 - - CONTEXT_COMPATIBILITY_PROFILE_BIT = 0x00000002 - CONTEXT_CORE_PROFILE_BIT = 0x00000001 - - AUX0 = 0x0409 - AUX1 = 0x040A - AUX2 = 0x040B - AUX3 = 0x040C - BACK_LEFT = 0x0402 - BACK_RIGHT = 0x0403 - FRONT_LEFT = 0x0400 - FRONT_RIGHT = 0x0401 - LEFT = 0x0406 - RIGHT = 0x0407 - - ALPHA_TEST = 0x0BC0 - AUTO_NORMAL = 0x0D80 - BLEND = 0x0BE2 - COLOR_ARRAY = 0x8076 - COLOR_LOGIC_OP = 0x0BF2 - COLOR_MATERIAL = 0x0B57 - CULL_FACE = 0x0B44 - DEPTH_TEST = 0x0B71 - DITHER = 0x0BD0 - EDGE_FLAG_ARRAY = 0x8079 - FOG = 0x0B60 - INDEX_ARRAY = 0x8077 - INDEX_LOGIC_OP = 0x0BF1 - LIGHT0 = 0x4000 - LIGHT1 = 0x4001 - LIGHT2 = 0x4002 - LIGHT3 = 0x4003 - LIGHT4 = 0x4004 - LIGHT5 = 0x4005 - LIGHT6 = 0x4006 - LIGHT7 = 0x4007 - LIGHTING = 0x0B50 - LINE_SMOOTH = 0x0B20 - LINE_STIPPLE = 0x0B24 - MAP1_COLOR_4 = 0x0D90 - MAP1_INDEX = 0x0D91 - MAP1_NORMAL = 0x0D92 - MAP1_TEXTURE_COORD_1 = 0x0D93 - MAP1_TEXTURE_COORD_2 = 0x0D94 - MAP1_TEXTURE_COORD_3 = 0x0D95 - MAP1_TEXTURE_COORD_4 = 0x0D96 - MAP1_VERTEX_3 = 0x0D97 - MAP1_VERTEX_4 = 0x0D98 - MAP2_COLOR_4 = 0x0DB0 - MAP2_INDEX = 0x0DB1 - MAP2_NORMAL = 0x0DB2 - MAP2_TEXTURE_COORD_1 = 0x0DB3 - MAP2_TEXTURE_COORD_2 = 0x0DB4 - MAP2_TEXTURE_COORD_3 = 0x0DB5 - MAP2_TEXTURE_COORD_4 = 0x0DB6 - MAP2_VERTEX_3 = 0x0DB7 - MAP2_VERTEX_4 = 0x0DB8 - NORMALIZE = 0x0BA1 - NORMAL_ARRAY = 0x8075 - POINT_SMOOTH = 0x0B10 - POLYGON_OFFSET_FILL = 0x8037 - POLYGON_OFFSET_LINE = 0x2A02 - POLYGON_OFFSET_POINT = 0x2A01 - POLYGON_SMOOTH = 0x0B41 - POLYGON_STIPPLE = 0x0B42 - SCISSOR_TEST = 0x0C11 - STENCIL_TEST = 0x0B90 - TEXTURE_1D = 0x0DE0 - TEXTURE_2D = 0x0DE1 - TEXTURE_COORD_ARRAY = 0x8078 - TEXTURE_GEN_Q = 0x0C63 - TEXTURE_GEN_R = 0x0C62 - TEXTURE_GEN_S = 0x0C60 - TEXTURE_GEN_T = 0x0C61 - VERTEX_ARRAY = 0x8074 - - INVALID_ENUM = 0x0500 - INVALID_FRAMEBUFFER_OPERATION = 0x0506 - INVALID_OPERATION = 0x0502 - INVALID_VALUE = 0x0501 - NO_ERROR = 0 - OUT_OF_MEMORY = 0x0505 - STACK_OVERFLOW = 0x0503 - STACK_UNDERFLOW = 0x0504 - - N2D = 0x0600 - N3D = 0x0601 - N3D_COLOR = 0x0602 - N3D_COLOR_TEXTURE = 0x0603 - N4D_COLOR_TEXTURE = 0x0604 - - BITMAP_TOKEN = 0x0704 - COPY_PIXEL_TOKEN = 0x0706 - DRAW_PIXEL_TOKEN = 0x0705 - LINE_RESET_TOKEN = 0x0707 - LINE_TOKEN = 0x0702 - PASS_THROUGH_TOKEN = 0x0700 - POINT_TOKEN = 0x0701 - POLYGON_TOKEN = 0x0703 - - EXP = 0x0800 - EXP2 = 0x0801 - LINEAR = 0x2601 - - FOG_COLOR = 0x0B66 - FOG_DENSITY = 0x0B62 - FOG_END = 0x0B64 - FOG_INDEX = 0x0B61 - FOG_MODE = 0x0B65 - FOG_START = 0x0B63 - - CCW = 0x0901 - CW = 0x0900 - - COEFF = 0x0A00 - DOMAIN = 0x0A02 - ORDER = 0x0A01 - - PIXEL_MAP_A_TO_A = 0x0C79 - PIXEL_MAP_B_TO_B = 0x0C78 - PIXEL_MAP_G_TO_G = 0x0C77 - PIXEL_MAP_I_TO_A = 0x0C75 - PIXEL_MAP_I_TO_B = 0x0C74 - PIXEL_MAP_I_TO_G = 0x0C73 - PIXEL_MAP_I_TO_I = 0x0C70 - PIXEL_MAP_I_TO_R = 0x0C72 - PIXEL_MAP_R_TO_R = 0x0C76 - PIXEL_MAP_S_TO_S = 0x0C71 - - ACCUM_ALPHA_BITS = 0x0D5B - ACCUM_BLUE_BITS = 0x0D5A - ACCUM_CLEAR_VALUE = 0x0B80 - ACCUM_GREEN_BITS = 0x0D59 - ACCUM_RED_BITS = 0x0D58 - ALIASED_LINE_WIDTH_RANGE = 0x846E - ALIASED_POINT_SIZE_RANGE = 0x846D - ALPHA_BIAS = 0x0D1D - ALPHA_BITS = 0x0D55 - ALPHA_SCALE = 0x0D1C - ALPHA_TEST_FUNC = 0x0BC1 - ALPHA_TEST_REF = 0x0BC2 - ATTRIB_STACK_DEPTH = 0x0BB0 - AUX_BUFFERS = 0x0C00 - BLEND_DST = 0x0BE0 - BLEND_SRC = 0x0BE1 - BLUE_BIAS = 0x0D1B - BLUE_BITS = 0x0D54 - BLUE_SCALE = 0x0D1A - CLIENT_ATTRIB_STACK_DEPTH = 0x0BB1 - COLOR_ARRAY_SIZE = 0x8081 - COLOR_ARRAY_STRIDE = 0x8083 - COLOR_ARRAY_TYPE = 0x8082 - COLOR_CLEAR_VALUE = 0x0C22 - COLOR_MATERIAL_FACE = 0x0B55 - COLOR_MATERIAL_PARAMETER = 0x0B56 - COLOR_WRITEMASK = 0x0C23 - CULL_FACE_MODE = 0x0B45 - CURRENT_COLOR = 0x0B00 - CURRENT_INDEX = 0x0B01 - CURRENT_NORMAL = 0x0B02 - CURRENT_RASTER_COLOR = 0x0B04 - CURRENT_RASTER_DISTANCE = 0x0B09 - CURRENT_RASTER_INDEX = 0x0B05 - CURRENT_RASTER_POSITION = 0x0B07 - CURRENT_RASTER_POSITION_VALID = 0x0B08 - CURRENT_RASTER_TEXTURE_COORDS = 0x0B06 - CURRENT_TEXTURE_COORDS = 0x0B03 - DEPTH_BIAS = 0x0D1F - DEPTH_BITS = 0x0D56 - DEPTH_CLEAR_VALUE = 0x0B73 - DEPTH_FUNC = 0x0B74 - DEPTH_RANGE = 0x0B70 - DEPTH_SCALE = 0x0D1E - DEPTH_WRITEMASK = 0x0B72 - DOUBLEBUFFER = 0x0C32 - DRAW_BUFFER = 0x0C01 - EDGE_FLAG = 0x0B43 - EDGE_FLAG_ARRAY_STRIDE = 0x808C - FEEDBACK_BUFFER_SIZE = 0x0DF1 - FEEDBACK_BUFFER_TYPE = 0x0DF2 - FOG_HINT = 0x0C54 - FRONT_FACE = 0x0B46 - GREEN_BIAS = 0x0D19 - GREEN_BITS = 0x0D53 - GREEN_SCALE = 0x0D18 - INDEX_ARRAY_STRIDE = 0x8086 - INDEX_ARRAY_TYPE = 0x8085 - INDEX_BITS = 0x0D51 - INDEX_CLEAR_VALUE = 0x0C20 - INDEX_MODE = 0x0C30 - INDEX_OFFSET = 0x0D13 - INDEX_SHIFT = 0x0D12 - INDEX_WRITEMASK = 0x0C21 - LIGHT_MODEL_AMBIENT = 0x0B53 - LIGHT_MODEL_COLOR_CONTROL = 0x81F8 - LIGHT_MODEL_LOCAL_VIEWER = 0x0B51 - LIGHT_MODEL_TWO_SIDE = 0x0B52 - LINE_SMOOTH_HINT = 0x0C52 - LINE_STIPPLE_PATTERN = 0x0B25 - LINE_STIPPLE_REPEAT = 0x0B26 - LINE_WIDTH = 0x0B21 - LINE_WIDTH_GRANULARITY = 0x0B23 - LINE_WIDTH_RANGE = 0x0B22 - LIST_BASE = 0x0B32 - LIST_INDEX = 0x0B33 - LIST_MODE = 0x0B30 - LOGIC_OP_MODE = 0x0BF0 - MAP1_GRID_DOMAIN = 0x0DD0 - MAP1_GRID_SEGMENTS = 0x0DD1 - MAP2_GRID_DOMAIN = 0x0DD2 - MAP2_GRID_SEGMENTS = 0x0DD3 - MAP_COLOR = 0x0D10 - MAP_STENCIL = 0x0D11 - MATRIX_MODE = 0x0BA0 - MAX_ATTRIB_STACK_DEPTH = 0x0D35 - MAX_CLIENT_ATTRIB_STACK_DEPTH = 0x0D3B - MAX_CLIP_DISTANCES = 0x0D32 - MAX_CLIP_PLANES = 0x0D32 - MAX_EVAL_ORDER = 0x0D30 - MAX_LIGHTS = 0x0D31 - MAX_LIST_NESTING = 0x0B31 - MAX_MODELVIEW_STACK_DEPTH = 0x0D36 - MAX_NAME_STACK_DEPTH = 0x0D37 - MAX_PIXEL_MAP_TABLE = 0x0D34 - MAX_PROJECTION_STACK_DEPTH = 0x0D38 - MAX_TEXTURE_SIZE = 0x0D33 - MAX_TEXTURE_STACK_DEPTH = 0x0D39 - MAX_VIEWPORT_DIMS = 0x0D3A - MODELVIEW_MATRIX = 0x0BA6 - MODELVIEW_STACK_DEPTH = 0x0BA3 - NAME_STACK_DEPTH = 0x0D70 - NORMAL_ARRAY_STRIDE = 0x807F - NORMAL_ARRAY_TYPE = 0x807E - PACK_ALIGNMENT = 0x0D05 - PACK_LSB_FIRST = 0x0D01 - PACK_ROW_LENGTH = 0x0D02 - PACK_SKIP_PIXELS = 0x0D04 - PACK_SKIP_ROWS = 0x0D03 - PACK_SWAP_BYTES = 0x0D00 - PERSPECTIVE_CORRECTION_HINT = 0x0C50 - PIXEL_MAP_A_TO_A_SIZE = 0x0CB9 - PIXEL_MAP_B_TO_B_SIZE = 0x0CB8 - PIXEL_MAP_G_TO_G_SIZE = 0x0CB7 - PIXEL_MAP_I_TO_A_SIZE = 0x0CB5 - PIXEL_MAP_I_TO_B_SIZE = 0x0CB4 - PIXEL_MAP_I_TO_G_SIZE = 0x0CB3 - PIXEL_MAP_I_TO_I_SIZE = 0x0CB0 - PIXEL_MAP_I_TO_R_SIZE = 0x0CB2 - PIXEL_MAP_R_TO_R_SIZE = 0x0CB6 - PIXEL_MAP_S_TO_S_SIZE = 0x0CB1 - POINT_SIZE = 0x0B11 - POINT_SIZE_GRANULARITY = 0x0B13 - POINT_SIZE_RANGE = 0x0B12 - POINT_SMOOTH_HINT = 0x0C51 - POLYGON_MODE = 0x0B40 - POLYGON_OFFSET_FACTOR = 0x8038 - POLYGON_OFFSET_UNITS = 0x2A00 - POLYGON_SMOOTH_HINT = 0x0C53 - PROJECTION_MATRIX = 0x0BA7 - PROJECTION_STACK_DEPTH = 0x0BA4 - READ_BUFFER = 0x0C02 - RED_BIAS = 0x0D15 - RED_BITS = 0x0D52 - RED_SCALE = 0x0D14 - RENDER_MODE = 0x0C40 - RGBA_MODE = 0x0C31 - SCISSOR_BOX = 0x0C10 - SELECTION_BUFFER_SIZE = 0x0DF4 - SHADE_MODEL = 0x0B54 - SMOOTH_LINE_WIDTH_GRANULARITY = 0x0B23 - SMOOTH_LINE_WIDTH_RANGE = 0x0B22 - SMOOTH_POINT_SIZE_GRANULARITY = 0x0B13 - SMOOTH_POINT_SIZE_RANGE = 0x0B12 - STENCIL_BITS = 0x0D57 - STENCIL_CLEAR_VALUE = 0x0B91 - STENCIL_FAIL = 0x0B94 - STENCIL_FUNC = 0x0B92 - STENCIL_PASS_DEPTH_FAIL = 0x0B95 - STENCIL_PASS_DEPTH_PASS = 0x0B96 - STENCIL_REF = 0x0B97 - STENCIL_VALUE_MASK = 0x0B93 - STENCIL_WRITEMASK = 0x0B98 - STEREO = 0x0C33 - SUBPIXEL_BITS = 0x0D50 - TEXTURE_BINDING_1D = 0x8068 - TEXTURE_BINDING_2D = 0x8069 - TEXTURE_BINDING_3D = 0x806A - TEXTURE_COORD_ARRAY_SIZE = 0x8088 - TEXTURE_COORD_ARRAY_STRIDE = 0x808A - TEXTURE_COORD_ARRAY_TYPE = 0x8089 - TEXTURE_MATRIX = 0x0BA8 - TEXTURE_STACK_DEPTH = 0x0BA5 - UNPACK_ALIGNMENT = 0x0CF5 - UNPACK_LSB_FIRST = 0x0CF1 - UNPACK_ROW_LENGTH = 0x0CF2 - UNPACK_SKIP_PIXELS = 0x0CF4 - UNPACK_SKIP_ROWS = 0x0CF3 - UNPACK_SWAP_BYTES = 0x0CF0 - VERTEX_ARRAY_SIZE = 0x807A - VERTEX_ARRAY_STRIDE = 0x807C - VERTEX_ARRAY_TYPE = 0x807B - VIEWPORT = 0x0BA2 - ZOOM_X = 0x0D16 - ZOOM_Y = 0x0D17 - - COLOR_ARRAY_POINTER = 0x8090 - EDGE_FLAG_ARRAY_POINTER = 0x8093 - FEEDBACK_BUFFER_POINTER = 0x0DF0 - INDEX_ARRAY_POINTER = 0x8091 - NORMAL_ARRAY_POINTER = 0x808F - SELECTION_BUFFER_POINTER = 0x0DF3 - TEXTURE_COORD_ARRAY_POINTER = 0x8092 - VERTEX_ARRAY_POINTER = 0x808E - - TEXTURE_ALPHA_SIZE = 0x805F - TEXTURE_BLUE_SIZE = 0x805E - TEXTURE_BORDER = 0x1005 - TEXTURE_BORDER_COLOR = 0x1004 - TEXTURE_COMPONENTS = 0x1003 - TEXTURE_GREEN_SIZE = 0x805D - TEXTURE_HEIGHT = 0x1001 - TEXTURE_INTENSITY_SIZE = 0x8061 - TEXTURE_INTERNAL_FORMAT = 0x1003 - TEXTURE_LUMINANCE_SIZE = 0x8060 - TEXTURE_MAG_FILTER = 0x2800 - TEXTURE_MIN_FILTER = 0x2801 - TEXTURE_PRIORITY = 0x8066 - TEXTURE_RED_SIZE = 0x805C - TEXTURE_RESIDENT = 0x8067 - TEXTURE_WIDTH = 0x1000 - TEXTURE_WRAP_S = 0x2802 - TEXTURE_WRAP_T = 0x2803 - - DONT_CARE = 0x1100 - FASTEST = 0x1101 - NICEST = 0x1102 - - FRAGMENT_SHADER_DERIVATIVE_HINT = 0x8B8B - GENERATE_MIPMAP_HINT = 0x8192 - TEXTURE_COMPRESSION_HINT = 0x84EF - - C3F_V3F = 0x2A24 - C4F_N3F_V3F = 0x2A26 - C4UB_V2F = 0x2A22 - C4UB_V3F = 0x2A23 - N3F_V3F = 0x2A25 - T2F_C3F_V3F = 0x2A2A - T2F_C4F_N3F_V3F = 0x2A2C - T2F_C4UB_V3F = 0x2A29 - T2F_N3F_V3F = 0x2A2B - T2F_V3F = 0x2A27 - T4F_C4F_N3F_V4F = 0x2A2D - T4F_V4F = 0x2A28 - V2F = 0x2A20 - V3F = 0x2A21 - - MODULATE = 0x2100 - REPLACE = 0x1E01 - - SEPARATE_SPECULAR_COLOR = 0x81FA - SINGLE_COLOR = 0x81F9 - - CONSTANT_ATTENUATION = 0x1207 - LINEAR_ATTENUATION = 0x1208 - POSITION = 0x1203 - QUADRATIC_ATTENUATION = 0x1209 - SPOT_CUTOFF = 0x1206 - SPOT_DIRECTION = 0x1204 - SPOT_EXPONENT = 0x1205 - - COMPILE = 0x1300 - COMPILE_AND_EXECUTE = 0x1301 - - AND = 0x1501 - AND_INVERTED = 0x1504 - AND_REVERSE = 0x1502 - CLEAR = 0x1500 - COPY = 0x1503 - COPY_INVERTED = 0x150C - EQUIV = 0x1509 - INVERT = 0x150A - NAND = 0x150E - NOOP = 0x1505 - NOR = 0x1508 - OR = 0x1507 - OR_INVERTED = 0x150D - OR_REVERSE = 0x150B - SET = 0x150F - XOR = 0x1506 - - MAP_FLUSH_EXPLICIT_BIT = 0x0010 - MAP_INVALIDATE_BUFFER_BIT = 0x0008 - MAP_INVALIDATE_RANGE_BIT = 0x0004 - MAP_READ_BIT = 0x0001 - MAP_UNSYNCHRONIZED_BIT = 0x0020 - MAP_WRITE_BIT = 0x0002 - - COLOR_INDEXES = 0x1603 - SHININESS = 0x1601 - - MODELVIEW = 0x1700 - PROJECTION = 0x1701 - TEXTURE = 0x1702 - - LINE = 0x1B01 - POINT = 0x1B00 - - FILL = 0x1B02 - - COLOR = 0x1800 - DEPTH = 0x1801 - STENCIL = 0x1802 - - ALPHA = 0x1906 - BLUE = 0x1905 - COLOR_INDEX = 0x1900 - DEPTH_COMPONENT = 0x1902 - GREEN = 0x1904 - LUMINANCE = 0x1909 - LUMINANCE_ALPHA = 0x190A - RED = 0x1903 - RGB = 0x1907 - RGBA = 0x1908 - STENCIL_INDEX = 0x1901 - - ALPHA12 = 0x803D - ALPHA16 = 0x803E - ALPHA4 = 0x803B - ALPHA8 = 0x803C - INTENSITY = 0x8049 - INTENSITY12 = 0x804C - INTENSITY16 = 0x804D - INTENSITY4 = 0x804A - INTENSITY8 = 0x804B - LUMINANCE12 = 0x8041 - LUMINANCE12_ALPHA12 = 0x8047 - LUMINANCE12_ALPHA4 = 0x8046 - LUMINANCE16 = 0x8042 - LUMINANCE16_ALPHA16 = 0x8048 - LUMINANCE4 = 0x803F - LUMINANCE4_ALPHA4 = 0x8043 - LUMINANCE6_ALPHA2 = 0x8044 - LUMINANCE8 = 0x8040 - LUMINANCE8_ALPHA8 = 0x8045 - R3_G3_B2 = 0x2A10 - RGB10 = 0x8052 - RGB10_A2 = 0x8059 - RGB12 = 0x8053 - RGB16 = 0x8054 - RGB4 = 0x804F - RGB5 = 0x8050 - RGB5_A1 = 0x8057 - RGB8 = 0x8051 - RGBA12 = 0x805A - RGBA16 = 0x805B - RGBA2 = 0x8055 - RGBA4 = 0x8056 - RGBA8 = 0x8058 - - PACK_IMAGE_HEIGHT = 0x806C - PACK_SKIP_IMAGES = 0x806B - UNPACK_IMAGE_HEIGHT = 0x806E - UNPACK_SKIP_IMAGES = 0x806D - - BITMAP = 0x1A00 - UNSIGNED_BYTE_3_3_2 = 0x8032 - UNSIGNED_INT_10_10_10_2 = 0x8036 - UNSIGNED_INT_8_8_8_8 = 0x8035 - UNSIGNED_SHORT_4_4_4_4 = 0x8033 - UNSIGNED_SHORT_5_5_5_1 = 0x8034 - - POINT_DISTANCE_ATTENUATION = 0x8129 - POINT_FADE_THRESHOLD_SIZE = 0x8128 - POINT_SIZE_MAX = 0x8127 - POINT_SIZE_MIN = 0x8126 - - LINES = 0x0001 - LINES_ADJACENCY = 0x000A - LINE_LOOP = 0x0002 - LINE_STRIP = 0x0003 - LINE_STRIP_ADJACENCY = 0x000B - POINTS = 0x0000 - POLYGON = 0x0009 - QUADS = 0x0007 - QUAD_STRIP = 0x0008 - TRIANGLES = 0x0004 - TRIANGLES_ADJACENCY = 0x000C - TRIANGLE_FAN = 0x0006 - TRIANGLE_STRIP = 0x0005 - TRIANGLE_STRIP_ADJACENCY = 0x000D - - FEEDBACK = 0x1C01 - RENDER = 0x1C00 - SELECT = 0x1C02 - - FLAT = 0x1D00 - SMOOTH = 0x1D01 - - DECR = 0x1E03 - INCR = 0x1E02 - KEEP = 0x1E00 - - EXTENSIONS = 0x1F03 - RENDERER = 0x1F01 - VENDOR = 0x1F00 - VERSION = 0x1F02 - - S = 0x2000 - T = 0x2001 - R = 0x2002 - Q = 0x2003 - - DECAL = 0x2101 - - TEXTURE_ENV_COLOR = 0x2201 - TEXTURE_ENV_MODE = 0x2200 - - TEXTURE_ENV = 0x2300 - - EYE_LINEAR = 0x2400 - OBJECT_LINEAR = 0x2401 - SPHERE_MAP = 0x2402 - - EYE_PLANE = 0x2502 - OBJECT_PLANE = 0x2501 - TEXTURE_GEN_MODE = 0x2500 - - NEAREST = 0x2600 - - LINEAR_MIPMAP_LINEAR = 0x2703 - LINEAR_MIPMAP_NEAREST = 0x2701 - NEAREST_MIPMAP_LINEAR = 0x2702 - NEAREST_MIPMAP_NEAREST = 0x2700 - - GENERATE_MIPMAP = 0x8191 - TEXTURE_WRAP_R = 0x8072 - - PROXY_TEXTURE_1D = 0x8063 - PROXY_TEXTURE_2D = 0x8064 - PROXY_TEXTURE_3D = 0x8070 - TEXTURE_3D = 0x806F - TEXTURE_BASE_LEVEL = 0x813C - TEXTURE_MAX_LEVEL = 0x813D - TEXTURE_MAX_LOD = 0x813B - TEXTURE_MIN_LOD = 0x813A - - CLAMP = 0x2900 - CLAMP_TO_BORDER = 0x812D - CLAMP_TO_EDGE = 0x812F - REPEAT = 0x2901 - - SYNC_FLUSH_COMMANDS_BIT = 0x00000001 - INVALID_INDEX = 0xFFFFFFFF - TIMEOUT_IGNORED = 0xFFFFFFFFFFFFFFFF - CONSTANT_COLOR = 0x8001 - ONE_MINUS_CONSTANT_COLOR = 0x8002 - CONSTANT_ALPHA = 0x8003 - ONE_MINUS_CONSTANT_ALPHA = 0x8004 - FUNC_ADD = 0x8006 - MIN = 0x8007 - MAX = 0x8008 - BLEND_EQUATION_RGB = 0x8009 - FUNC_SUBTRACT = 0x800A - FUNC_REVERSE_SUBTRACT = 0x800B - RESCALE_NORMAL = 0x803A - TEXTURE_DEPTH = 0x8071 - MAX_3D_TEXTURE_SIZE = 0x8073 - MULTISAMPLE = 0x809D - SAMPLE_ALPHA_TO_COVERAGE = 0x809E - SAMPLE_ALPHA_TO_ONE = 0x809F - SAMPLE_COVERAGE = 0x80A0 - SAMPLE_BUFFERS = 0x80A8 - SAMPLES = 0x80A9 - SAMPLE_COVERAGE_VALUE = 0x80AA - SAMPLE_COVERAGE_INVERT = 0x80AB - BLEND_DST_RGB = 0x80C8 - BLEND_SRC_RGB = 0x80C9 - BLEND_DST_ALPHA = 0x80CA - BLEND_SRC_ALPHA = 0x80CB - BGR = 0x80E0 - BGRA = 0x80E1 - MAX_ELEMENTS_VERTICES = 0x80E8 - MAX_ELEMENTS_INDICES = 0x80E9 - DEPTH_COMPONENT16 = 0x81A5 - DEPTH_COMPONENT24 = 0x81A6 - DEPTH_COMPONENT32 = 0x81A7 - FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING = 0x8210 - FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE = 0x8211 - FRAMEBUFFER_ATTACHMENT_RED_SIZE = 0x8212 - FRAMEBUFFER_ATTACHMENT_GREEN_SIZE = 0x8213 - FRAMEBUFFER_ATTACHMENT_BLUE_SIZE = 0x8214 - FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE = 0x8215 - FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE = 0x8216 - FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE = 0x8217 - FRAMEBUFFER_DEFAULT = 0x8218 - FRAMEBUFFER_UNDEFINED = 0x8219 - DEPTH_STENCIL_ATTACHMENT = 0x821A - MAJOR_VERSION = 0x821B - MINOR_VERSION = 0x821C - NUM_EXTENSIONS = 0x821D - CONTEXT_FLAGS = 0x821E - INDEX = 0x8222 - COMPRESSED_RED = 0x8225 - COMPRESSED_RG = 0x8226 - RG = 0x8227 - RG_INTEGER = 0x8228 - R8 = 0x8229 - R16 = 0x822A - RG8 = 0x822B - RG16 = 0x822C - R16F = 0x822D - R32F = 0x822E - RG16F = 0x822F - RG32F = 0x8230 - R8I = 0x8231 - R8UI = 0x8232 - R16I = 0x8233 - R16UI = 0x8234 - R32I = 0x8235 - R32UI = 0x8236 - RG8I = 0x8237 - RG8UI = 0x8238 - RG16I = 0x8239 - RG16UI = 0x823A - RG32I = 0x823B - RG32UI = 0x823C - UNSIGNED_BYTE_2_3_3_REV = 0x8362 - UNSIGNED_SHORT_5_6_5 = 0x8363 - UNSIGNED_SHORT_5_6_5_REV = 0x8364 - UNSIGNED_SHORT_4_4_4_4_REV = 0x8365 - UNSIGNED_SHORT_1_5_5_5_REV = 0x8366 - UNSIGNED_INT_8_8_8_8_REV = 0x8367 - UNSIGNED_INT_2_10_10_10_REV = 0x8368 - MIRRORED_REPEAT = 0x8370 - FOG_COORDINATE_SOURCE = 0x8450 - FOG_COORD_SRC = 0x8450 - FOG_COORDINATE = 0x8451 - FOG_COORD = 0x8451 - FRAGMENT_DEPTH = 0x8452 - CURRENT_FOG_COORDINATE = 0x8453 - CURRENT_FOG_COORD = 0x8453 - FOG_COORDINATE_ARRAY_TYPE = 0x8454 - FOG_COORD_ARRAY_TYPE = 0x8454 - FOG_COORDINATE_ARRAY_STRIDE = 0x8455 - FOG_COORD_ARRAY_STRIDE = 0x8455 - FOG_COORDINATE_ARRAY_POINTER = 0x8456 - FOG_COORD_ARRAY_POINTER = 0x8456 - FOG_COORDINATE_ARRAY = 0x8457 - FOG_COORD_ARRAY = 0x8457 - COLOR_SUM = 0x8458 - CURRENT_SECONDARY_COLOR = 0x8459 - SECONDARY_COLOR_ARRAY_SIZE = 0x845A - SECONDARY_COLOR_ARRAY_TYPE = 0x845B - SECONDARY_COLOR_ARRAY_STRIDE = 0x845C - SECONDARY_COLOR_ARRAY_POINTER = 0x845D - SECONDARY_COLOR_ARRAY = 0x845E - CURRENT_RASTER_SECONDARY_COLOR = 0x845F - TEXTURE0 = 0x84C0 - TEXTURE1 = 0x84C1 - TEXTURE2 = 0x84C2 - TEXTURE3 = 0x84C3 - TEXTURE4 = 0x84C4 - TEXTURE5 = 0x84C5 - TEXTURE6 = 0x84C6 - TEXTURE7 = 0x84C7 - TEXTURE8 = 0x84C8 - TEXTURE9 = 0x84C9 - TEXTURE10 = 0x84CA - TEXTURE11 = 0x84CB - TEXTURE12 = 0x84CC - TEXTURE13 = 0x84CD - TEXTURE14 = 0x84CE - TEXTURE15 = 0x84CF - TEXTURE16 = 0x84D0 - TEXTURE17 = 0x84D1 - TEXTURE18 = 0x84D2 - TEXTURE19 = 0x84D3 - TEXTURE20 = 0x84D4 - TEXTURE21 = 0x84D5 - TEXTURE22 = 0x84D6 - TEXTURE23 = 0x84D7 - TEXTURE24 = 0x84D8 - TEXTURE25 = 0x84D9 - TEXTURE26 = 0x84DA - TEXTURE27 = 0x84DB - TEXTURE28 = 0x84DC - TEXTURE29 = 0x84DD - TEXTURE30 = 0x84DE - TEXTURE31 = 0x84DF - ACTIVE_TEXTURE = 0x84E0 - CLIENT_ACTIVE_TEXTURE = 0x84E1 - MAX_TEXTURE_UNITS = 0x84E2 - TRANSPOSE_MODELVIEW_MATRIX = 0x84E3 - TRANSPOSE_PROJECTION_MATRIX = 0x84E4 - TRANSPOSE_TEXTURE_MATRIX = 0x84E5 - TRANSPOSE_COLOR_MATRIX = 0x84E6 - SUBTRACT = 0x84E7 - MAX_RENDERBUFFER_SIZE = 0x84E8 - COMPRESSED_ALPHA = 0x84E9 - COMPRESSED_LUMINANCE = 0x84EA - COMPRESSED_LUMINANCE_ALPHA = 0x84EB - COMPRESSED_INTENSITY = 0x84EC - COMPRESSED_RGB = 0x84ED - COMPRESSED_RGBA = 0x84EE - TEXTURE_RECTANGLE = 0x84F5 - TEXTURE_BINDING_RECTANGLE = 0x84F6 - PROXY_TEXTURE_RECTANGLE = 0x84F7 - MAX_RECTANGLE_TEXTURE_SIZE = 0x84F8 - DEPTH_STENCIL = 0x84F9 - UNSIGNED_INT_24_8 = 0x84FA - MAX_TEXTURE_LOD_BIAS = 0x84FD - TEXTURE_FILTER_CONTROL = 0x8500 - TEXTURE_LOD_BIAS = 0x8501 - INCR_WRAP = 0x8507 - DECR_WRAP = 0x8508 - NORMAL_MAP = 0x8511 - REFLECTION_MAP = 0x8512 - TEXTURE_CUBE_MAP = 0x8513 - TEXTURE_BINDING_CUBE_MAP = 0x8514 - TEXTURE_CUBE_MAP_POSITIVE_X = 0x8515 - TEXTURE_CUBE_MAP_NEGATIVE_X = 0x8516 - TEXTURE_CUBE_MAP_POSITIVE_Y = 0x8517 - TEXTURE_CUBE_MAP_NEGATIVE_Y = 0x8518 - TEXTURE_CUBE_MAP_POSITIVE_Z = 0x8519 - TEXTURE_CUBE_MAP_NEGATIVE_Z = 0x851A - PROXY_TEXTURE_CUBE_MAP = 0x851B - MAX_CUBE_MAP_TEXTURE_SIZE = 0x851C - COMBINE = 0x8570 - COMBINE_RGB = 0x8571 - COMBINE_ALPHA = 0x8572 - RGB_SCALE = 0x8573 - ADD_SIGNED = 0x8574 - INTERPOLATE = 0x8575 - CONSTANT = 0x8576 - PRIMARY_COLOR = 0x8577 - PREVIOUS = 0x8578 - SOURCE0_RGB = 0x8580 - SRC0_RGB = 0x8580 - SOURCE1_RGB = 0x8581 - SRC1_RGB = 0x8581 - SOURCE2_RGB = 0x8582 - SRC2_RGB = 0x8582 - SOURCE0_ALPHA = 0x8588 - SRC0_ALPHA = 0x8588 - SOURCE1_ALPHA = 0x8589 - SRC1_ALPHA = 0x8589 - SOURCE2_ALPHA = 0x858A - SRC2_ALPHA = 0x858A - OPERAND0_RGB = 0x8590 - OPERAND1_RGB = 0x8591 - OPERAND2_RGB = 0x8592 - OPERAND0_ALPHA = 0x8598 - OPERAND1_ALPHA = 0x8599 - OPERAND2_ALPHA = 0x859A - VERTEX_ARRAY_BINDING = 0x85B5 - VERTEX_ATTRIB_ARRAY_ENABLED = 0x8622 - VERTEX_ATTRIB_ARRAY_SIZE = 0x8623 - VERTEX_ATTRIB_ARRAY_STRIDE = 0x8624 - VERTEX_ATTRIB_ARRAY_TYPE = 0x8625 - CURRENT_VERTEX_ATTRIB = 0x8626 - VERTEX_PROGRAM_POINT_SIZE = 0x8642 - PROGRAM_POINT_SIZE = 0x8642 - VERTEX_PROGRAM_TWO_SIDE = 0x8643 - VERTEX_ATTRIB_ARRAY_POINTER = 0x8645 - DEPTH_CLAMP = 0x864F - TEXTURE_COMPRESSED_IMAGE_SIZE = 0x86A0 - TEXTURE_COMPRESSED = 0x86A1 - NUM_COMPRESSED_TEXTURE_FORMATS = 0x86A2 - COMPRESSED_TEXTURE_FORMATS = 0x86A3 - DOT3_RGB = 0x86AE - DOT3_RGBA = 0x86AF - BUFFER_SIZE = 0x8764 - BUFFER_USAGE = 0x8765 - STENCIL_BACK_FUNC = 0x8800 - STENCIL_BACK_FAIL = 0x8801 - STENCIL_BACK_PASS_DEPTH_FAIL = 0x8802 - STENCIL_BACK_PASS_DEPTH_PASS = 0x8803 - RGBA32F = 0x8814 - RGB32F = 0x8815 - RGBA16F = 0x881A - RGB16F = 0x881B - MAX_DRAW_BUFFERS = 0x8824 - DRAW_BUFFER0 = 0x8825 - DRAW_BUFFER1 = 0x8826 - DRAW_BUFFER2 = 0x8827 - DRAW_BUFFER3 = 0x8828 - DRAW_BUFFER4 = 0x8829 - DRAW_BUFFER5 = 0x882A - DRAW_BUFFER6 = 0x882B - DRAW_BUFFER7 = 0x882C - DRAW_BUFFER8 = 0x882D - DRAW_BUFFER9 = 0x882E - DRAW_BUFFER10 = 0x882F - DRAW_BUFFER11 = 0x8830 - DRAW_BUFFER12 = 0x8831 - DRAW_BUFFER13 = 0x8832 - DRAW_BUFFER14 = 0x8833 - DRAW_BUFFER15 = 0x8834 - BLEND_EQUATION_ALPHA = 0x883D - TEXTURE_DEPTH_SIZE = 0x884A - DEPTH_TEXTURE_MODE = 0x884B - TEXTURE_COMPARE_MODE = 0x884C - TEXTURE_COMPARE_FUNC = 0x884D - COMPARE_R_TO_TEXTURE = 0x884E - COMPARE_REF_TO_TEXTURE = 0x884E - TEXTURE_CUBE_MAP_SEAMLESS = 0x884F - POINT_SPRITE = 0x8861 - COORD_REPLACE = 0x8862 - QUERY_COUNTER_BITS = 0x8864 - CURRENT_QUERY = 0x8865 - QUERY_RESULT = 0x8866 - QUERY_RESULT_AVAILABLE = 0x8867 - MAX_VERTEX_ATTRIBS = 0x8869 - VERTEX_ATTRIB_ARRAY_NORMALIZED = 0x886A - MAX_TEXTURE_COORDS = 0x8871 - MAX_TEXTURE_IMAGE_UNITS = 0x8872 - ARRAY_BUFFER = 0x8892 - ELEMENT_ARRAY_BUFFER = 0x8893 - ARRAY_BUFFER_BINDING = 0x8894 - ELEMENT_ARRAY_BUFFER_BINDING = 0x8895 - VERTEX_ARRAY_BUFFER_BINDING = 0x8896 - NORMAL_ARRAY_BUFFER_BINDING = 0x8897 - COLOR_ARRAY_BUFFER_BINDING = 0x8898 - INDEX_ARRAY_BUFFER_BINDING = 0x8899 - TEXTURE_COORD_ARRAY_BUFFER_BINDING = 0x889A - EDGE_FLAG_ARRAY_BUFFER_BINDING = 0x889B - SECONDARY_COLOR_ARRAY_BUFFER_BINDING = 0x889C - FOG_COORDINATE_ARRAY_BUFFER_BINDING = 0x889D - FOG_COORD_ARRAY_BUFFER_BINDING = 0x889D - WEIGHT_ARRAY_BUFFER_BINDING = 0x889E - VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = 0x889F - READ_ONLY = 0x88B8 - WRITE_ONLY = 0x88B9 - READ_WRITE = 0x88BA - BUFFER_ACCESS = 0x88BB - BUFFER_MAPPED = 0x88BC - BUFFER_MAP_POINTER = 0x88BD - STREAM_DRAW = 0x88E0 - STREAM_READ = 0x88E1 - STREAM_COPY = 0x88E2 - STATIC_DRAW = 0x88E4 - STATIC_READ = 0x88E5 - STATIC_COPY = 0x88E6 - DYNAMIC_DRAW = 0x88E8 - DYNAMIC_READ = 0x88E9 - DYNAMIC_COPY = 0x88EA - PIXEL_PACK_BUFFER = 0x88EB - PIXEL_UNPACK_BUFFER = 0x88EC - PIXEL_PACK_BUFFER_BINDING = 0x88ED - PIXEL_UNPACK_BUFFER_BINDING = 0x88EF - DEPTH24_STENCIL8 = 0x88F0 - TEXTURE_STENCIL_SIZE = 0x88F1 - VERTEX_ATTRIB_ARRAY_INTEGER = 0x88FD - MAX_ARRAY_TEXTURE_LAYERS = 0x88FF - MIN_PROGRAM_TEXEL_OFFSET = 0x8904 - MAX_PROGRAM_TEXEL_OFFSET = 0x8905 - SAMPLES_PASSED = 0x8914 - GEOMETRY_VERTICES_OUT = 0x8916 - GEOMETRY_INPUT_TYPE = 0x8917 - GEOMETRY_OUTPUT_TYPE = 0x8918 - CLAMP_VERTEX_COLOR = 0x891A - CLAMP_FRAGMENT_COLOR = 0x891B - CLAMP_READ_COLOR = 0x891C - FIXED_ONLY = 0x891D - UNIFORM_BUFFER = 0x8A11 - UNIFORM_BUFFER_BINDING = 0x8A28 - UNIFORM_BUFFER_START = 0x8A29 - UNIFORM_BUFFER_SIZE = 0x8A2A - MAX_VERTEX_UNIFORM_BLOCKS = 0x8A2B - MAX_GEOMETRY_UNIFORM_BLOCKS = 0x8A2C - MAX_FRAGMENT_UNIFORM_BLOCKS = 0x8A2D - MAX_COMBINED_UNIFORM_BLOCKS = 0x8A2E - MAX_UNIFORM_BUFFER_BINDINGS = 0x8A2F - MAX_UNIFORM_BLOCK_SIZE = 0x8A30 - MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS = 0x8A31 - MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS = 0x8A32 - MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS = 0x8A33 - UNIFORM_BUFFER_OFFSET_ALIGNMENT = 0x8A34 - ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH = 0x8A35 - ACTIVE_UNIFORM_BLOCKS = 0x8A36 - UNIFORM_TYPE = 0x8A37 - UNIFORM_SIZE = 0x8A38 - UNIFORM_NAME_LENGTH = 0x8A39 - UNIFORM_BLOCK_INDEX = 0x8A3A - UNIFORM_OFFSET = 0x8A3B - UNIFORM_ARRAY_STRIDE = 0x8A3C - UNIFORM_MATRIX_STRIDE = 0x8A3D - UNIFORM_IS_ROW_MAJOR = 0x8A3E - UNIFORM_BLOCK_BINDING = 0x8A3F - UNIFORM_BLOCK_DATA_SIZE = 0x8A40 - UNIFORM_BLOCK_NAME_LENGTH = 0x8A41 - UNIFORM_BLOCK_ACTIVE_UNIFORMS = 0x8A42 - UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES = 0x8A43 - UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER = 0x8A44 - UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER = 0x8A45 - UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER = 0x8A46 - FRAGMENT_SHADER = 0x8B30 - VERTEX_SHADER = 0x8B31 - MAX_FRAGMENT_UNIFORM_COMPONENTS = 0x8B49 - MAX_VERTEX_UNIFORM_COMPONENTS = 0x8B4A - MAX_VARYING_FLOATS = 0x8B4B - MAX_VARYING_COMPONENTS = 0x8B4B - MAX_VERTEX_TEXTURE_IMAGE_UNITS = 0x8B4C - MAX_COMBINED_TEXTURE_IMAGE_UNITS = 0x8B4D - SHADER_TYPE = 0x8B4F - FLOAT_VEC2 = 0x8B50 - FLOAT_VEC3 = 0x8B51 - FLOAT_VEC4 = 0x8B52 - INT_VEC2 = 0x8B53 - INT_VEC3 = 0x8B54 - INT_VEC4 = 0x8B55 - BOOL = 0x8B56 - BOOL_VEC2 = 0x8B57 - BOOL_VEC3 = 0x8B58 - BOOL_VEC4 = 0x8B59 - FLOAT_MAT2 = 0x8B5A - FLOAT_MAT3 = 0x8B5B - FLOAT_MAT4 = 0x8B5C - SAMPLER_1D = 0x8B5D - SAMPLER_2D = 0x8B5E - SAMPLER_3D = 0x8B5F - SAMPLER_CUBE = 0x8B60 - SAMPLER_1D_SHADOW = 0x8B61 - SAMPLER_2D_SHADOW = 0x8B62 - SAMPLER_2D_RECT = 0x8B63 - SAMPLER_2D_RECT_SHADOW = 0x8B64 - FLOAT_MAT2x3 = 0x8B65 - FLOAT_MAT2x4 = 0x8B66 - FLOAT_MAT3x2 = 0x8B67 - FLOAT_MAT3x4 = 0x8B68 - FLOAT_MAT4x2 = 0x8B69 - FLOAT_MAT4x3 = 0x8B6A - DELETE_STATUS = 0x8B80 - COMPILE_STATUS = 0x8B81 - LINK_STATUS = 0x8B82 - VALIDATE_STATUS = 0x8B83 - INFO_LOG_LENGTH = 0x8B84 - ATTACHED_SHADERS = 0x8B85 - ACTIVE_UNIFORMS = 0x8B86 - ACTIVE_UNIFORM_MAX_LENGTH = 0x8B87 - SHADER_SOURCE_LENGTH = 0x8B88 - ACTIVE_ATTRIBUTES = 0x8B89 - ACTIVE_ATTRIBUTE_MAX_LENGTH = 0x8B8A - SHADING_LANGUAGE_VERSION = 0x8B8C - CURRENT_PROGRAM = 0x8B8D - TEXTURE_RED_TYPE = 0x8C10 - TEXTURE_GREEN_TYPE = 0x8C11 - TEXTURE_BLUE_TYPE = 0x8C12 - TEXTURE_ALPHA_TYPE = 0x8C13 - TEXTURE_LUMINANCE_TYPE = 0x8C14 - TEXTURE_INTENSITY_TYPE = 0x8C15 - TEXTURE_DEPTH_TYPE = 0x8C16 - UNSIGNED_NORMALIZED = 0x8C17 - TEXTURE_1D_ARRAY = 0x8C18 - PROXY_TEXTURE_1D_ARRAY = 0x8C19 - TEXTURE_2D_ARRAY = 0x8C1A - PROXY_TEXTURE_2D_ARRAY = 0x8C1B - TEXTURE_BINDING_1D_ARRAY = 0x8C1C - TEXTURE_BINDING_2D_ARRAY = 0x8C1D - MAX_GEOMETRY_TEXTURE_IMAGE_UNITS = 0x8C29 - TEXTURE_BUFFER = 0x8C2A - MAX_TEXTURE_BUFFER_SIZE = 0x8C2B - TEXTURE_BINDING_BUFFER = 0x8C2C - TEXTURE_BUFFER_DATA_STORE_BINDING = 0x8C2D - R11F_G11F_B10F = 0x8C3A - UNSIGNED_INT_10F_11F_11F_REV = 0x8C3B - RGB9_E5 = 0x8C3D - UNSIGNED_INT_5_9_9_9_REV = 0x8C3E - TEXTURE_SHARED_SIZE = 0x8C3F - SRGB = 0x8C40 - SRGB8 = 0x8C41 - SRGB_ALPHA = 0x8C42 - SRGB8_ALPHA8 = 0x8C43 - SLUMINANCE_ALPHA = 0x8C44 - SLUMINANCE8_ALPHA8 = 0x8C45 - SLUMINANCE = 0x8C46 - SLUMINANCE8 = 0x8C47 - COMPRESSED_SRGB = 0x8C48 - COMPRESSED_SRGB_ALPHA = 0x8C49 - COMPRESSED_SLUMINANCE = 0x8C4A - COMPRESSED_SLUMINANCE_ALPHA = 0x8C4B - TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH = 0x8C76 - TRANSFORM_FEEDBACK_BUFFER_MODE = 0x8C7F - MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS = 0x8C80 - TRANSFORM_FEEDBACK_VARYINGS = 0x8C83 - TRANSFORM_FEEDBACK_BUFFER_START = 0x8C84 - TRANSFORM_FEEDBACK_BUFFER_SIZE = 0x8C85 - PRIMITIVES_GENERATED = 0x8C87 - TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN = 0x8C88 - RASTERIZER_DISCARD = 0x8C89 - MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS = 0x8C8A - MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS = 0x8C8B - INTERLEAVED_ATTRIBS = 0x8C8C - SEPARATE_ATTRIBS = 0x8C8D - TRANSFORM_FEEDBACK_BUFFER = 0x8C8E - TRANSFORM_FEEDBACK_BUFFER_BINDING = 0x8C8F - POINT_SPRITE_COORD_ORIGIN = 0x8CA0 - LOWER_LEFT = 0x8CA1 - UPPER_LEFT = 0x8CA2 - STENCIL_BACK_REF = 0x8CA3 - STENCIL_BACK_VALUE_MASK = 0x8CA4 - STENCIL_BACK_WRITEMASK = 0x8CA5 - DRAW_FRAMEBUFFER_BINDING = 0x8CA6 - FRAMEBUFFER_BINDING = 0x8CA6 - RENDERBUFFER_BINDING = 0x8CA7 - READ_FRAMEBUFFER = 0x8CA8 - DRAW_FRAMEBUFFER = 0x8CA9 - READ_FRAMEBUFFER_BINDING = 0x8CAA - RENDERBUFFER_SAMPLES = 0x8CAB - DEPTH_COMPONENT32F = 0x8CAC - DEPTH32F_STENCIL8 = 0x8CAD - FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE = 0x8CD0 - FRAMEBUFFER_ATTACHMENT_OBJECT_NAME = 0x8CD1 - FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL = 0x8CD2 - FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE = 0x8CD3 - FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER = 0x8CD4 - FRAMEBUFFER_COMPLETE = 0x8CD5 - FRAMEBUFFER_INCOMPLETE_ATTACHMENT = 0x8CD6 - FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = 0x8CD7 - FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER = 0x8CDB - FRAMEBUFFER_INCOMPLETE_READ_BUFFER = 0x8CDC - FRAMEBUFFER_UNSUPPORTED = 0x8CDD - MAX_COLOR_ATTACHMENTS = 0x8CDF - COLOR_ATTACHMENT0 = 0x8CE0 - COLOR_ATTACHMENT1 = 0x8CE1 - COLOR_ATTACHMENT2 = 0x8CE2 - COLOR_ATTACHMENT3 = 0x8CE3 - COLOR_ATTACHMENT4 = 0x8CE4 - COLOR_ATTACHMENT5 = 0x8CE5 - COLOR_ATTACHMENT6 = 0x8CE6 - COLOR_ATTACHMENT7 = 0x8CE7 - COLOR_ATTACHMENT8 = 0x8CE8 - COLOR_ATTACHMENT9 = 0x8CE9 - COLOR_ATTACHMENT10 = 0x8CEA - COLOR_ATTACHMENT11 = 0x8CEB - COLOR_ATTACHMENT12 = 0x8CEC - COLOR_ATTACHMENT13 = 0x8CED - COLOR_ATTACHMENT14 = 0x8CEE - COLOR_ATTACHMENT15 = 0x8CEF - DEPTH_ATTACHMENT = 0x8D00 - STENCIL_ATTACHMENT = 0x8D20 - FRAMEBUFFER = 0x8D40 - RENDERBUFFER = 0x8D41 - RENDERBUFFER_WIDTH = 0x8D42 - RENDERBUFFER_HEIGHT = 0x8D43 - RENDERBUFFER_INTERNAL_FORMAT = 0x8D44 - STENCIL_INDEX1 = 0x8D46 - STENCIL_INDEX4 = 0x8D47 - STENCIL_INDEX8 = 0x8D48 - STENCIL_INDEX16 = 0x8D49 - RENDERBUFFER_RED_SIZE = 0x8D50 - RENDERBUFFER_GREEN_SIZE = 0x8D51 - RENDERBUFFER_BLUE_SIZE = 0x8D52 - RENDERBUFFER_ALPHA_SIZE = 0x8D53 - RENDERBUFFER_DEPTH_SIZE = 0x8D54 - RENDERBUFFER_STENCIL_SIZE = 0x8D55 - FRAMEBUFFER_INCOMPLETE_MULTISAMPLE = 0x8D56 - MAX_SAMPLES = 0x8D57 - RGBA32UI = 0x8D70 - RGB32UI = 0x8D71 - RGBA16UI = 0x8D76 - RGB16UI = 0x8D77 - RGBA8UI = 0x8D7C - RGB8UI = 0x8D7D - RGBA32I = 0x8D82 - RGB32I = 0x8D83 - RGBA16I = 0x8D88 - RGB16I = 0x8D89 - RGBA8I = 0x8D8E - RGB8I = 0x8D8F - RED_INTEGER = 0x8D94 - GREEN_INTEGER = 0x8D95 - BLUE_INTEGER = 0x8D96 - ALPHA_INTEGER = 0x8D97 - RGB_INTEGER = 0x8D98 - RGBA_INTEGER = 0x8D99 - BGR_INTEGER = 0x8D9A - BGRA_INTEGER = 0x8D9B - FRAMEBUFFER_ATTACHMENT_LAYERED = 0x8DA7 - FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS = 0x8DA8 - FLOAT_32_UNSIGNED_INT_24_8_REV = 0x8DAD - FRAMEBUFFER_SRGB = 0x8DB9 - COMPRESSED_RED_RGTC1 = 0x8DBB - COMPRESSED_SIGNED_RED_RGTC1 = 0x8DBC - COMPRESSED_RG_RGTC2 = 0x8DBD - COMPRESSED_SIGNED_RG_RGTC2 = 0x8DBE - SAMPLER_1D_ARRAY = 0x8DC0 - SAMPLER_2D_ARRAY = 0x8DC1 - SAMPLER_BUFFER = 0x8DC2 - SAMPLER_1D_ARRAY_SHADOW = 0x8DC3 - SAMPLER_2D_ARRAY_SHADOW = 0x8DC4 - SAMPLER_CUBE_SHADOW = 0x8DC5 - UNSIGNED_INT_VEC2 = 0x8DC6 - UNSIGNED_INT_VEC3 = 0x8DC7 - UNSIGNED_INT_VEC4 = 0x8DC8 - INT_SAMPLER_1D = 0x8DC9 - INT_SAMPLER_2D = 0x8DCA - INT_SAMPLER_3D = 0x8DCB - INT_SAMPLER_CUBE = 0x8DCC - INT_SAMPLER_2D_RECT = 0x8DCD - INT_SAMPLER_1D_ARRAY = 0x8DCE - INT_SAMPLER_2D_ARRAY = 0x8DCF - INT_SAMPLER_BUFFER = 0x8DD0 - UNSIGNED_INT_SAMPLER_1D = 0x8DD1 - UNSIGNED_INT_SAMPLER_2D = 0x8DD2 - UNSIGNED_INT_SAMPLER_3D = 0x8DD3 - UNSIGNED_INT_SAMPLER_CUBE = 0x8DD4 - UNSIGNED_INT_SAMPLER_2D_RECT = 0x8DD5 - UNSIGNED_INT_SAMPLER_1D_ARRAY = 0x8DD6 - UNSIGNED_INT_SAMPLER_2D_ARRAY = 0x8DD7 - UNSIGNED_INT_SAMPLER_BUFFER = 0x8DD8 - GEOMETRY_SHADER = 0x8DD9 - MAX_GEOMETRY_UNIFORM_COMPONENTS = 0x8DDF - MAX_GEOMETRY_OUTPUT_VERTICES = 0x8DE0 - MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS = 0x8DE1 - QUERY_WAIT = 0x8E13 - QUERY_NO_WAIT = 0x8E14 - QUERY_BY_REGION_WAIT = 0x8E15 - QUERY_BY_REGION_NO_WAIT = 0x8E16 - QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION = 0x8E4C - FIRST_VERTEX_CONVENTION = 0x8E4D - LAST_VERTEX_CONVENTION = 0x8E4E - PROVOKING_VERTEX = 0x8E4F - SAMPLE_POSITION = 0x8E50 - SAMPLE_MASK = 0x8E51 - SAMPLE_MASK_VALUE = 0x8E52 - MAX_SAMPLE_MASK_WORDS = 0x8E59 - COPY_READ_BUFFER = 0x8F36 - COPY_WRITE_BUFFER = 0x8F37 - R8_SNORM = 0x8F94 - RG8_SNORM = 0x8F95 - RGB8_SNORM = 0x8F96 - RGBA8_SNORM = 0x8F97 - R16_SNORM = 0x8F98 - RG16_SNORM = 0x8F99 - RGB16_SNORM = 0x8F9A - RGBA16_SNORM = 0x8F9B - SIGNED_NORMALIZED = 0x8F9C - PRIMITIVE_RESTART = 0x8F9D - PRIMITIVE_RESTART_INDEX = 0x8F9E - TEXTURE_2D_MULTISAMPLE = 0x9100 - PROXY_TEXTURE_2D_MULTISAMPLE = 0x9101 - TEXTURE_2D_MULTISAMPLE_ARRAY = 0x9102 - PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY = 0x9103 - TEXTURE_BINDING_2D_MULTISAMPLE = 0x9104 - TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY = 0x9105 - TEXTURE_SAMPLES = 0x9106 - TEXTURE_FIXED_SAMPLE_LOCATIONS = 0x9107 - SAMPLER_2D_MULTISAMPLE = 0x9108 - INT_SAMPLER_2D_MULTISAMPLE = 0x9109 - UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE = 0x910A - SAMPLER_2D_MULTISAMPLE_ARRAY = 0x910B - INT_SAMPLER_2D_MULTISAMPLE_ARRAY = 0x910C - UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY = 0x910D - MAX_COLOR_TEXTURE_SAMPLES = 0x910E - MAX_DEPTH_TEXTURE_SAMPLES = 0x910F - MAX_INTEGER_SAMPLES = 0x9110 - MAX_SERVER_WAIT_TIMEOUT = 0x9111 - OBJECT_TYPE = 0x9112 - SYNC_CONDITION = 0x9113 - SYNC_STATUS = 0x9114 - SYNC_FLAGS = 0x9115 - SYNC_FENCE = 0x9116 - SYNC_GPU_COMMANDS_COMPLETE = 0x9117 - UNSIGNALED = 0x9118 - SIGNALED = 0x9119 - ALREADY_SIGNALED = 0x911A - TIMEOUT_EXPIRED = 0x911B - CONDITION_SATISFIED = 0x911C - WAIT_FAILED = 0x911D - BUFFER_ACCESS_FLAGS = 0x911F - BUFFER_MAP_LENGTH = 0x9120 - BUFFER_MAP_OFFSET = 0x9121 - MAX_VERTEX_OUTPUT_COMPONENTS = 0x9122 - MAX_GEOMETRY_INPUT_COMPONENTS = 0x9123 - MAX_GEOMETRY_OUTPUT_COMPONENTS = 0x9124 - MAX_FRAGMENT_INPUT_COMPONENTS = 0x9125 - CONTEXT_PROFILE_MASK = 0x9126 -) - -// https://www.opengl.org/sdk/docs/man3/xhtml/glViewport.xml -func (gl *GL) Viewport(x, y, width, height int) { - C.gl3_2compat_glViewport(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// DepthRange specifies the mapping of depth values from normalized device -// coordinates to window coordinates. -// -// Parameter nearVal specifies the mapping of the near clipping plane to window -// coordinates (defaults to 0), while farVal specifies the mapping of the far -// clipping plane to window coordinates (defaults to 1). -// -// After clipping and division by w, depth coordinates range from -1 to 1, -// corresponding to the near and far clipping planes. DepthRange specifies a -// linear mapping of the normalized depth coordinates in this range to window -// depth coordinates. Regardless of the actual depth buffer implementation, -// window coordinate depth values are treated as though they range from 0 through 1 -// (like color components). Thus, the values accepted by DepthRange are both -// clamped to this range before they are accepted. -// -// The default setting of (0, 1) maps the near plane to 0 and the far plane to 1. -// With this mapping, the depth buffer range is fully utilized. -// -// It is not necessary that nearVal be less than farVal. Reverse mappings such as -// nearVal 1, and farVal 0 are acceptable. -// -// GL.INVALID_OPERATION is generated if DepthRange is executed between the -// execution of Begin and the corresponding execution of End. -func (gl *GL) DepthRange(nearVal, farVal float64) { - C.gl3_2compat_glDepthRange(gl.funcs, C.GLdouble(nearVal), C.GLdouble(farVal)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsEnabled.xml -func (gl *GL) IsEnabled(cap glbase.Enum) bool { - glresult := C.gl3_2compat_glIsEnabled(gl.funcs, C.GLenum(cap)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetTexLevelParameteriv.xml -func (gl *GL) GetTexLevelParameteriv(target glbase.Enum, level int, pname glbase.Enum, params []int32) { - C.gl3_2compat_glGetTexLevelParameteriv(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetTexLevelParameterfv.xml -func (gl *GL) GetTexLevelParameterfv(target glbase.Enum, level int, pname glbase.Enum, params []float32) { - C.gl3_2compat_glGetTexLevelParameterfv(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetTexParameteriv.xml -func (gl *GL) GetTexParameteriv(target, pname glbase.Enum, params []int32) { - C.gl3_2compat_glGetTexParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetTexParameterfv.xml -func (gl *GL) GetTexParameterfv(target, pname glbase.Enum, params []float32) { - C.gl3_2compat_glGetTexParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetTexImage.xml -func (gl *GL) GetTexImage(target glbase.Enum, level int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl3_2compat_glGetTexImage(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetIntegerv.xml -func (gl *GL) GetIntegerv(pname glbase.Enum, params []int32) { - C.gl3_2compat_glGetIntegerv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetFloatv.xml -func (gl *GL) GetFloatv(pname glbase.Enum, params []float32) { - C.gl3_2compat_glGetFloatv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetError.xml -func (gl *GL) GetError() glbase.Enum { - glresult := C.gl3_2compat_glGetError(gl.funcs) - return glbase.Enum(glresult) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetDoublev.xml -func (gl *GL) GetDoublev(pname glbase.Enum, params []float64) { - C.gl3_2compat_glGetDoublev(gl.funcs, C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetBooleanv.xml -func (gl *GL) GetBooleanv(pname glbase.Enum, params []bool) { - C.gl3_2compat_glGetBooleanv(gl.funcs, C.GLenum(pname), (*C.GLboolean)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glReadPixels.xml -func (gl *GL) ReadPixels(x, y, width, height int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl3_2compat_glReadPixels(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glReadBuffer.xml -func (gl *GL) ReadBuffer(mode glbase.Enum) { - C.gl3_2compat_glReadBuffer(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPixelStorei.xml -func (gl *GL) PixelStorei(pname glbase.Enum, param int32) { - C.gl3_2compat_glPixelStorei(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPixelStoref.xml -func (gl *GL) PixelStoref(pname glbase.Enum, param float32) { - C.gl3_2compat_glPixelStoref(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDepthFunc.xml -func (gl *GL) DepthFunc(glfunc glbase.Enum) { - C.gl3_2compat_glDepthFunc(gl.funcs, C.GLenum(glfunc)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glStencilOp.xml -func (gl *GL) StencilOp(fail, zfail, zpass glbase.Enum) { - C.gl3_2compat_glStencilOp(gl.funcs, C.GLenum(fail), C.GLenum(zfail), C.GLenum(zpass)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glStencilFunc.xml -func (gl *GL) StencilFunc(glfunc glbase.Enum, ref int32, mask uint32) { - C.gl3_2compat_glStencilFunc(gl.funcs, C.GLenum(glfunc), C.GLint(ref), C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glLogicOp.xml -func (gl *GL) LogicOp(opcode glbase.Enum) { - C.gl3_2compat_glLogicOp(gl.funcs, C.GLenum(opcode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBlendFunc.xml -func (gl *GL) BlendFunc(sfactor, dfactor glbase.Enum) { - C.gl3_2compat_glBlendFunc(gl.funcs, C.GLenum(sfactor), C.GLenum(dfactor)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFlush.xml -func (gl *GL) Flush() { - C.gl3_2compat_glFlush(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFinish.xml -func (gl *GL) Finish() { - C.gl3_2compat_glFinish(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEnable.xml -func (gl *GL) Enable(cap glbase.Enum) { - C.gl3_2compat_glEnable(gl.funcs, C.GLenum(cap)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDisable.xml -func (gl *GL) Disable(cap glbase.Enum) { - C.gl3_2compat_glDisable(gl.funcs, C.GLenum(cap)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDepthMask.xml -func (gl *GL) DepthMask(flag bool) { - C.gl3_2compat_glDepthMask(gl.funcs, *(*C.GLboolean)(unsafe.Pointer(&flag))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColorMask.xml -func (gl *GL) ColorMask(red, green, blue, alpha bool) { - C.gl3_2compat_glColorMask(gl.funcs, *(*C.GLboolean)(unsafe.Pointer(&red)), *(*C.GLboolean)(unsafe.Pointer(&green)), *(*C.GLboolean)(unsafe.Pointer(&blue)), *(*C.GLboolean)(unsafe.Pointer(&alpha))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glStencilMask.xml -func (gl *GL) StencilMask(mask uint32) { - C.gl3_2compat_glStencilMask(gl.funcs, C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClearDepth.xml -func (gl *GL) ClearDepth(depth float64) { - C.gl3_2compat_glClearDepth(gl.funcs, C.GLdouble(depth)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClearStencil.xml -func (gl *GL) ClearStencil(s int32) { - C.gl3_2compat_glClearStencil(gl.funcs, C.GLint(s)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClearColor.xml -func (gl *GL) ClearColor(red, green, blue, alpha float32) { - C.gl3_2compat_glClearColor(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClear.xml -func (gl *GL) Clear(mask glbase.Bitfield) { - C.gl3_2compat_glClear(gl.funcs, C.GLbitfield(mask)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDrawBuffer.xml -func (gl *GL) DrawBuffer(mode glbase.Enum) { - C.gl3_2compat_glDrawBuffer(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexImage2D.xml -func (gl *GL) TexImage2D(target glbase.Enum, level int, internalFormat int32, width, height, border int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl3_2compat_glTexImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLint(border), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexImage1D.xml -func (gl *GL) TexImage1D(target glbase.Enum, level int, internalFormat int32, width, border int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl3_2compat_glTexImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(internalFormat), C.GLsizei(width), C.GLint(border), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexParameteriv.xml -func (gl *GL) TexParameteriv(target, pname glbase.Enum, params []int32) { - C.gl3_2compat_glTexParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexParameteri.xml -func (gl *GL) TexParameteri(target, pname glbase.Enum, param int32) { - C.gl3_2compat_glTexParameteri(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexParameterfv.xml -func (gl *GL) TexParameterfv(target, pname glbase.Enum, params []float32) { - C.gl3_2compat_glTexParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexParameterf.xml -func (gl *GL) TexParameterf(target, pname glbase.Enum, param float32) { - C.gl3_2compat_glTexParameterf(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glScissor.xml -func (gl *GL) Scissor(x, y, width, height int) { - C.gl3_2compat_glScissor(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPolygonMode.xml -func (gl *GL) PolygonMode(face, mode glbase.Enum) { - C.gl3_2compat_glPolygonMode(gl.funcs, C.GLenum(face), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPointSize.xml -func (gl *GL) PointSize(size float32) { - C.gl3_2compat_glPointSize(gl.funcs, C.GLfloat(size)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glLineWidth.xml -func (gl *GL) LineWidth(width float32) { - C.gl3_2compat_glLineWidth(gl.funcs, C.GLfloat(width)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glHint.xml -func (gl *GL) Hint(target, mode glbase.Enum) { - C.gl3_2compat_glHint(gl.funcs, C.GLenum(target), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFrontFace.xml -func (gl *GL) FrontFace(mode glbase.Enum) { - C.gl3_2compat_glFrontFace(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCullFace.xml -func (gl *GL) CullFace(mode glbase.Enum) { - C.gl3_2compat_glCullFace(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIndexubv.xml -func (gl *GL) Indexubv(c []uint8) { - C.gl3_2compat_glIndexubv(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIndexub.xml -func (gl *GL) Indexub(c uint8) { - C.gl3_2compat_glIndexub(gl.funcs, C.GLubyte(c)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsTexture.xml -func (gl *GL) IsTexture(texture glbase.Texture) bool { - glresult := C.gl3_2compat_glIsTexture(gl.funcs, C.GLuint(texture)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// GenTextures returns n texture names in textures. There is no guarantee -// that the names form a contiguous set of integers; however, it is -// guaranteed that none of the returned names was in use immediately before -// the call to GenTextures. -// -// The generated textures have no dimensionality; they assume the -// dimensionality of the texture target to which they are first bound (see -// BindTexture). -// -// Texture names returned by a call to GenTextures are not returned by -// subsequent calls, unless they are first deleted with DeleteTextures. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// GenTextures is available in GL version 2.0 or greater. -func (gl *GL) GenTextures(n int) []glbase.Texture { - if n == 0 { - return nil - } - textures := make([]glbase.Texture, n) - C.gl3_2compat_glGenTextures(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0]))) - return textures -} - -// DeleteTextures deletes the textures objects whose names are stored -// in the textures slice. After a texture is deleted, it has no contents or -// dimensionality, and its name is free for reuse (for example by -// GenTextures). If a texture that is currently bound is deleted, the binding -// reverts to 0 (the default texture). -// -// DeleteTextures silently ignores 0's and names that do not correspond to -// existing textures. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// DeleteTextures is available in GL version 2.0 or greater. -func (gl *GL) DeleteTextures(textures []glbase.Texture) { - n := len(textures) - if n == 0 { - return - } - C.gl3_2compat_glDeleteTextures(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBindTexture.xml -func (gl *GL) BindTexture(target glbase.Enum, texture glbase.Texture) { - C.gl3_2compat_glBindTexture(gl.funcs, C.GLenum(target), C.GLuint(texture)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexSubImage2D.xml -func (gl *GL) TexSubImage2D(target glbase.Enum, level, xoffset, yoffset, width, height int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl3_2compat_glTexSubImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexSubImage1D.xml -func (gl *GL) TexSubImage1D(target glbase.Enum, level, xoffset, width int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl3_2compat_glTexSubImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLsizei(width), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCopyTexSubImage2D.xml -func (gl *GL) CopyTexSubImage2D(target glbase.Enum, level, xoffset, yoffset, x, y, width, height int) { - C.gl3_2compat_glCopyTexSubImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCopyTexSubImage1D.xml -func (gl *GL) CopyTexSubImage1D(target glbase.Enum, level, xoffset, x, y, width int) { - C.gl3_2compat_glCopyTexSubImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(x), C.GLint(y), C.GLsizei(width)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCopyTexImage2D.xml -func (gl *GL) CopyTexImage2D(target glbase.Enum, level int, internalFormat glbase.Enum, x, y, width, height, border int) { - C.gl3_2compat_glCopyTexImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height), C.GLint(border)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCopyTexImage1D.xml -func (gl *GL) CopyTexImage1D(target glbase.Enum, level int, internalFormat glbase.Enum, x, y, width, border int) { - C.gl3_2compat_glCopyTexImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLint(border)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPolygonOffset.xml -func (gl *GL) PolygonOffset(factor, units float32) { - C.gl3_2compat_glPolygonOffset(gl.funcs, C.GLfloat(factor), C.GLfloat(units)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDrawElements.xml -func (gl *GL) DrawElements(mode glbase.Enum, count int, gltype glbase.Enum, indices interface{}) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl3_2compat_glDrawElements(gl.funcs, C.GLenum(mode), C.GLsizei(count), C.GLenum(gltype), indices_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDrawArrays.xml -func (gl *GL) DrawArrays(mode glbase.Enum, first, count int) { - C.gl3_2compat_glDrawArrays(gl.funcs, C.GLenum(mode), C.GLint(first), C.GLsizei(count)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCopyTexSubImage3D.xml -func (gl *GL) CopyTexSubImage3D(target glbase.Enum, level, xoffset, yoffset int, zoffset int32, x, y, width, height int) { - C.gl3_2compat_glCopyTexSubImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(zoffset), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexSubImage3D.xml -func (gl *GL) TexSubImage3D(target glbase.Enum, level, xoffset, yoffset int, zoffset int32, width, height int, depth int32, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl3_2compat_glTexSubImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(zoffset), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexImage3D.xml -func (gl *GL) TexImage3D(target glbase.Enum, level int, internalFormat int32, width, height int, depth int32, border int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl3_2compat_glTexImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLint(border), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDrawRangeElements.xml -func (gl *GL) DrawRangeElements(mode glbase.Enum, start, end uint32, count int, gltype glbase.Enum, indices interface{}) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl3_2compat_glDrawRangeElements(gl.funcs, C.GLenum(mode), C.GLuint(start), C.GLuint(end), C.GLsizei(count), C.GLenum(gltype), indices_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBlendEquation.xml -func (gl *GL) BlendEquation(mode glbase.Enum) { - C.gl3_2compat_glBlendEquation(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBlendColor.xml -func (gl *GL) BlendColor(red, green, blue, alpha float32) { - C.gl3_2compat_glBlendColor(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetCompressedTexImage.xml -func (gl *GL) GetCompressedTexImage(target glbase.Enum, level int, img interface{}) { - var img_ptr unsafe.Pointer - var img_v = reflect.ValueOf(img) - if img != nil && img_v.Kind() != reflect.Slice { - panic("parameter img must be a slice") - } - if img != nil { - img_ptr = unsafe.Pointer(img_v.Index(0).Addr().Pointer()) - } - C.gl3_2compat_glGetCompressedTexImage(gl.funcs, C.GLenum(target), C.GLint(level), img_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCompressedTexSubImage1D.xml -func (gl *GL) CompressedTexSubImage1D(target glbase.Enum, level, xoffset, width int, format glbase.Enum, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl3_2compat_glCompressedTexSubImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLsizei(width), C.GLenum(format), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCompressedTexSubImage2D.xml -func (gl *GL) CompressedTexSubImage2D(target glbase.Enum, level, xoffset, yoffset, width, height int, format glbase.Enum, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl3_2compat_glCompressedTexSubImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCompressedTexSubImage3D.xml -func (gl *GL) CompressedTexSubImage3D(target glbase.Enum, level, xoffset, yoffset int, zoffset int32, width, height int, depth int32, format glbase.Enum, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl3_2compat_glCompressedTexSubImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(zoffset), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLenum(format), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCompressedTexImage1D.xml -func (gl *GL) CompressedTexImage1D(target glbase.Enum, level int, internalFormat glbase.Enum, width, border, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl3_2compat_glCompressedTexImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLsizei(width), C.GLint(border), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCompressedTexImage2D.xml -func (gl *GL) CompressedTexImage2D(target glbase.Enum, level int, internalFormat glbase.Enum, width, height, border, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl3_2compat_glCompressedTexImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLint(border), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCompressedTexImage3D.xml -func (gl *GL) CompressedTexImage3D(target glbase.Enum, level int, internalFormat glbase.Enum, width, height int, depth int32, border, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl3_2compat_glCompressedTexImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLint(border), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSampleCoverage.xml -func (gl *GL) SampleCoverage(value float32, invert bool) { - C.gl3_2compat_glSampleCoverage(gl.funcs, C.GLfloat(value), *(*C.GLboolean)(unsafe.Pointer(&invert))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glActiveTexture.xml -func (gl *GL) ActiveTexture(texture glbase.Enum) { - C.gl3_2compat_glActiveTexture(gl.funcs, C.GLenum(texture)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPointParameteriv.xml -func (gl *GL) PointParameteriv(pname glbase.Enum, params []int32) { - C.gl3_2compat_glPointParameteriv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPointParameteri.xml -func (gl *GL) PointParameteri(pname glbase.Enum, param int32) { - C.gl3_2compat_glPointParameteri(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPointParameterfv.xml -func (gl *GL) PointParameterfv(pname glbase.Enum, params []float32) { - C.gl3_2compat_glPointParameterfv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPointParameterf.xml -func (gl *GL) PointParameterf(pname glbase.Enum, param float32) { - C.gl3_2compat_glPointParameterf(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiDrawArrays.xml -func (gl *GL) MultiDrawArrays(mode glbase.Enum, first, count []int, drawcount int32) { - C.gl3_2compat_glMultiDrawArrays(gl.funcs, C.GLenum(mode), (*C.GLint)(unsafe.Pointer(&first[0])), (*C.GLsizei)(unsafe.Pointer(&count[0])), C.GLsizei(drawcount)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBlendFuncSeparate.xml -func (gl *GL) BlendFuncSeparate(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha glbase.Enum) { - C.gl3_2compat_glBlendFuncSeparate(gl.funcs, C.GLenum(sfactorRGB), C.GLenum(dfactorRGB), C.GLenum(sfactorAlpha), C.GLenum(dfactorAlpha)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetBufferParameteriv.xml -func (gl *GL) GetBufferParameteriv(target, pname glbase.Enum, params []int32) { - C.gl3_2compat_glGetBufferParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glUnmapBuffer.xml -func (gl *GL) UnmapBuffer(target glbase.Enum) bool { - glresult := C.gl3_2compat_glUnmapBuffer(gl.funcs, C.GLenum(target)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetBufferSubData.xml -func (gl *GL) GetBufferSubData(target glbase.Enum, offset, size int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl3_2compat_glGetBufferSubData(gl.funcs, C.GLenum(target), C.GLintptr(offset), C.GLsizeiptr(size), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBufferSubData.xml -func (gl *GL) BufferSubData(target glbase.Enum, offset, size int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl3_2compat_glBufferSubData(gl.funcs, C.GLenum(target), C.GLintptr(offset), C.GLsizeiptr(size), data_ptr) -} - -// BufferData creates a new data store for the buffer object currently -// bound to target. Any pre-existing data store is deleted. The new data -// store is created with the specified size in bytes and usage. If data is -// not nil, it must be a slice that is used to initialize the data store. -// In that case the size parameter is ignored and the store size will match -// the slice data size. -// -// In its initial state, the new data store is not mapped, it has a NULL -// mapped pointer, and its mapped access is GL.READ_WRITE. -// -// The target constant must be one of GL.ARRAY_BUFFER, GL.COPY_READ_BUFFER, -// GL.COPY_WRITE_BUFFER, GL.ELEMENT_ARRAY_BUFFER, GL.PIXEL_PACK_BUFFER, -// GL.PIXEL_UNPACK_BUFFER, GL.TEXTURE_BUFFER, GL.TRANSFORM_FEEDBACK_BUFFER, -// or GL.UNIFORM_BUFFER. -// -// The usage parameter is a hint to the GL implementation as to how a buffer -// object's data store will be accessed. This enables the GL implementation -// to make more intelligent decisions that may significantly impact buffer -// object performance. It does not, however, constrain the actual usage of -// the data store. usage can be broken down into two parts: first, the -// frequency of access (modification and usage), and second, the nature of -// that access. -// -// A usage frequency of STREAM and nature of DRAW is specified via the -// constant GL.STREAM_DRAW, for example. -// -// The usage frequency of access may be one of: -// -// STREAM -// The data store contents will be modified once and used at most a few times. -// -// STATIC -// The data store contents will be modified once and used many times. -// -// DYNAMIC -// The data store contents will be modified repeatedly and used many times. -// -// The usage nature of access may be one of: -// -// DRAW -// The data store contents are modified by the application, and used as -// the source for GL drawing and image specification commands. -// -// READ -// The data store contents are modified by reading data from the GL, -// and used to return that data when queried by the application. -// -// COPY -// The data store contents are modified by reading data from the GL, -// and used as the source for GL drawing and image specification -// commands. -// -// Clients must align data elements consistent with the requirements of the -// client platform, with an additional base-level requirement that an offset -// within a buffer to a datum comprising N bytes be a multiple of N. -// -// Error GL.INVALID_ENUM is generated if target is not one of the accepted -// buffer targets. GL.INVALID_ENUM is generated if usage is not -// GL.STREAM_DRAW, GL.STREAM_READ, GL.STREAM_COPY, GL.STATIC_DRAW, -// GL.STATIC_READ, GL.STATIC_COPY, GL.DYNAMIC_DRAW, GL.DYNAMIC_READ, or -// GL.DYNAMIC_COPY. GL.INVALID_VALUE is generated if size is negative. -// GL.INVALID_OPERATION is generated if the reserved buffer object name 0 is -// bound to target. GL.OUT_OF_MEMORY is generated if the GL is unable to -// create a data store with the specified size. -func (gl *GL) BufferData(target glbase.Enum, size int, data interface{}, usage glbase.Enum) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - if data != nil { - size = int(data_v.Type().Size()) * data_v.Len() - } - C.gl3_2compat_glBufferData(gl.funcs, C.GLenum(target), C.GLsizeiptr(size), data_ptr, C.GLenum(usage)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsBuffer.xml -func (gl *GL) IsBuffer(buffer glbase.Buffer) bool { - glresult := C.gl3_2compat_glIsBuffer(gl.funcs, C.GLuint(buffer)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// GenBuffers returns n buffer object names. There is no guarantee that -// the names form a contiguous set of integers; however, it is guaranteed -// that none of the returned names was in use immediately before the call to -// GenBuffers. -// -// Buffer object names returned by a call to GenBuffers are not returned by -// subsequent calls, unless they are first deleted with DeleteBuffers. -// -// No buffer objects are associated with the returned buffer object names -// until they are first bound by calling BindBuffer. -// -// Error GL.INVALID_VALUE is generated if n is negative. GL.INVALID_OPERATION -// is generated if GenBuffers is executed between the execution of Begin -// and the corresponding execution of End. -// -// GenBuffers is available in GL version 1.5 or greater. -func (gl *GL) GenBuffers(n int) []glbase.Buffer { - if n == 0 { - return nil - } - buffers := make([]glbase.Buffer, n) - C.gl3_2compat_glGenBuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&buffers[0]))) - return buffers -} - -// DeleteBuffers deletes the buffer objects whose names are stored in the -// buffers slice. -// -// After a buffer object is deleted, it has no contents, and its name is free -// for reuse (for example by GenBuffers). If a buffer object that is -// currently bound is deleted, the binding reverts to 0 (the absence of any -// buffer object, which reverts to client memory usage). -// -// DeleteBuffers silently ignores 0's and names that do not correspond to -// existing buffer objects. -// -// Error GL.INVALID_VALUE is generated if n is negative. GL.INVALID_OPERATION -// is generated if DeleteBuffers is executed between the execution of Begin -// and the corresponding execution of End. -// -// DeleteBuffers is available in GL version 1.5 or greater. -func (gl *GL) DeleteBuffers(buffers []glbase.Buffer) { - n := len(buffers) - if n == 0 { - return - } - C.gl3_2compat_glDeleteBuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&buffers[0]))) -} - -// BindBuffer creates or puts in use a named buffer object. -// Calling BindBuffer with target set to GL.ARRAY_BUFFER, -// GL.ELEMENT_ARRAY_BUFFER, GL.PIXEL_PACK_BUFFER or GL.PIXEL_UNPACK_BUFFER -// and buffer set to the name of the new buffer object binds the buffer -// object name to the target. When a buffer object is bound to a target, the -// previous binding for that target is automatically broken. -// -// Buffer object names are unsigned integers. The value zero is reserved, but -// there is no default buffer object for each buffer object target. Instead, -// buffer set to zero effectively unbinds any buffer object previously bound, -// and restores client memory usage for that buffer object target. Buffer -// object names and the corresponding buffer object contents are local to the -// shared display-list space (see XCreateContext) of the current GL rendering -// context; two rendering contexts share buffer object names only if they -// also share display lists. -// -// GenBuffers may be called to generate a set of new buffer object names. -// -// The state of a buffer object immediately after it is first bound is an -// unmapped zero-sized memory buffer with GL.READ_WRITE access and -// GL.STATIC_DRAW usage. -// -// While a non-zero buffer object name is bound, GL operations on the target -// to which it is bound affect the bound buffer object, and queries of the -// target to which it is bound return state from the bound buffer object. -// While buffer object name zero is bound, as in the initial state, attempts -// to modify or query state on the target to which it is bound generates an -// GL.INVALID_OPERATION error. -// -// When vertex array pointer state is changed, for example by a call to -// NormalPointer, the current buffer object binding (GL.ARRAY_BUFFER_BINDING) -// is copied into the corresponding client state for the vertex array type -// being changed, for example GL.NORMAL_ARRAY_BUFFER_BINDING. While a -// non-zero buffer object is bound to the GL.ARRAY_BUFFER target, the vertex -// array pointer parameter that is traditionally interpreted as a pointer to -// client-side memory is instead interpreted as an offset within the buffer -// object measured in basic machine units. -// -// While a non-zero buffer object is bound to the GL.ELEMENT_ARRAY_BUFFER -// target, the indices parameter of DrawElements, DrawRangeElements, or -// MultiDrawElements that is traditionally interpreted as a pointer to -// client-side memory is instead interpreted as an offset within the buffer -// object measured in basic machine units. -// -// While a non-zero buffer object is bound to the GL.PIXEL_PACK_BUFFER -// target, the following commands are affected: GetCompressedTexImage, -// GetConvolutionFilter, GetHistogram, GetMinmax, GetPixelMap, -// GetPolygonStipple, GetSeparableFilter, GetTexImage, and ReadPixels. The -// pointer parameter that is traditionally interpreted as a pointer to -// client-side memory where the pixels are to be packed is instead -// interpreted as an offset within the buffer object measured in basic -// machine units. -// -// While a non-zero buffer object is bound to the GL.PIXEL_UNPACK_BUFFER -// target, the following commands are affected: Bitmap, ColorSubTable, -// ColorTable, CompressedTexImage1D, CompressedTexImage2D, -// CompressedTexImage3D, CompressedTexSubImage1D, CompressedTexSubImage2D, -// CompressedTexSubImage3D, ConvolutionFilter1D, ConvolutionFilter2D, -// DrawPixels, PixelMap, PolygonStipple, SeparableFilter2D, TexImage1D, -// TexImage2D, TexImage3D, TexSubImage1D, TexSubImage2D, and TexSubImage3D. -// The pointer parameter that is traditionally interpreted as a pointer to -// client-side memory from which the pixels are to be unpacked is instead -// interpreted as an offset within the buffer object measured in basic -// machine units. -// -// A buffer object binding created with BindBuffer remains active until a -// different buffer object name is bound to the same target, or until the -// bound buffer object is deleted with DeleteBuffers. -// -// Once created, a named buffer object may be re-bound to any target as often -// as needed. However, the GL implementation may make choices about how to -// optimize the storage of a buffer object based on its initial binding -// target. -// -// Error GL.INVALID_ENUM is generated if target is not one of the allowable -// values. GL.INVALID_OPERATION is generated if BindBuffer is executed -// between the execution of Begin and the corresponding execution of End. -// -// BindBuffer is available in GL version 1.5 or greater. -func (gl *GL) BindBuffer(target glbase.Enum, buffer glbase.Buffer) { - C.gl3_2compat_glBindBuffer(gl.funcs, C.GLenum(target), C.GLuint(buffer)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetQueryObjectuiv.xml -func (gl *GL) GetQueryObjectuiv(id uint32, pname glbase.Enum, params []uint32) { - C.gl3_2compat_glGetQueryObjectuiv(gl.funcs, C.GLuint(id), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetQueryObjectiv.xml -func (gl *GL) GetQueryObjectiv(id uint32, pname glbase.Enum, params []int32) { - C.gl3_2compat_glGetQueryObjectiv(gl.funcs, C.GLuint(id), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetQueryiv.xml -func (gl *GL) GetQueryiv(target, pname glbase.Enum, params []int32) { - C.gl3_2compat_glGetQueryiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEndQuery.xml -func (gl *GL) EndQuery(target glbase.Enum) { - C.gl3_2compat_glEndQuery(gl.funcs, C.GLenum(target)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBeginQuery.xml -func (gl *GL) BeginQuery(target glbase.Enum, id uint32) { - C.gl3_2compat_glBeginQuery(gl.funcs, C.GLenum(target), C.GLuint(id)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsQuery.xml -func (gl *GL) IsQuery(id uint32) bool { - glresult := C.gl3_2compat_glIsQuery(gl.funcs, C.GLuint(id)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDeleteQueries.xml -func (gl *GL) DeleteQueries(n int, ids []uint32) { - C.gl3_2compat_glDeleteQueries(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&ids[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGenQueries.xml -func (gl *GL) GenQueries(n int, ids []uint32) { - C.gl3_2compat_glGenQueries(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&ids[0]))) -} - -// VertexAttribPointer specifies the location and data format of the array -// of generic vertex attributes at index to use when rendering. size -// specifies the number of components per attribute and must be 1, 2, 3, or -// 4. type specifies the data type of each component, and stride specifies -// the byte stride from one attribute to the next, allowing vertices and -// attributes to be packed into a single array or stored in separate arrays. -// normalized indicates whether the values stored in an integer format are -// to be mapped to the range [-1,1] (for signed values) or [0,1] -// (for unsigned values) when they are accessed and converted to floating -// point; otherwise, values will be converted to floats directly without -// normalization. offset is a byte offset into the buffer object's data -// store, which must be bound to the GL.ARRAY_BUFFER target with BindBuffer. -// -// The buffer object binding (GL.ARRAY_BUFFER_BINDING) is saved as -// generic vertex attribute array client-side state -// (GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING) for the provided index. -// -// To enable and disable a generic vertex attribute array, call -// EnableVertexAttribArray and DisableVertexAttribArray with index. If -// enabled, the generic vertex attribute array is used when DrawArrays or -// DrawElements is called. Each generic vertex attribute array is initially -// disabled. -// -// VertexAttribPointer is typically implemented on the client side. -// -// Error GL.INVALID_ENUM is generated if type is not an accepted value. -// GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. GL.INVALID_VALUE is generated if size is not 1, 2, -// 3, or 4. GL.INVALID_VALUE is generated if stride is negative. -func (gl *GL) VertexAttribPointer(index glbase.Attrib, size int, gltype glbase.Enum, normalized bool, stride int, offset uintptr) { - offset_ptr := unsafe.Pointer(offset) - C.gl3_2compat_glVertexAttribPointer(gl.funcs, C.GLuint(index), C.GLint(size), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), C.GLsizei(stride), offset_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glValidateProgram.xml -func (gl *GL) ValidateProgram(program glbase.Program) { - C.gl3_2compat_glValidateProgram(gl.funcs, C.GLuint(program)) -} - -// UniformMatrix4fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix4fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix4fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(4*4) != 0 { - panic("invalid value length for UniformMatrix4fv") - } - count := len(value) / (4 * 4) - C.gl3_2compat_glUniformMatrix4fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix3fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix3fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix3fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(3*3) != 0 { - panic("invalid value length for UniformMatrix3fv") - } - count := len(value) / (3 * 3) - C.gl3_2compat_glUniformMatrix3fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix2fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix2fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix2fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(2*2) != 0 { - panic("invalid value length for UniformMatrix2fv") - } - count := len(value) / (2 * 2) - C.gl3_2compat_glUniformMatrix2fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform4iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform4iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - if len(value)%4 != 0 { - panic("invalid value length for Uniform4iv") - } - count := len(value) / 4 - C.gl3_2compat_glUniform4iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// Uniform3iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform3iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - if len(value)%3 != 0 { - panic("invalid value length for Uniform3iv") - } - count := len(value) / 3 - C.gl3_2compat_glUniform3iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// Uniform2iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform2iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - if len(value)%2 != 0 { - panic("invalid value length for Uniform2iv") - } - count := len(value) / 2 - C.gl3_2compat_glUniform2iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// Uniform1iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform1iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - count := len(value) - C.gl3_2compat_glUniform1iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// Uniform4fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform4fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - if len(value)%4 != 0 { - panic("invalid value length for Uniform4fv") - } - count := len(value) / 4 - C.gl3_2compat_glUniform4fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform3fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform3fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - if len(value)%3 != 0 { - panic("invalid value length for Uniform3fv") - } - count := len(value) / 3 - C.gl3_2compat_glUniform3fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform2fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform2fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - if len(value)%2 != 0 { - panic("invalid value length for Uniform2fv") - } - count := len(value) / 2 - C.gl3_2compat_glUniform2fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform1fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform1fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - count := len(value) - C.gl3_2compat_glUniform1fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform4i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform4i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4i(location glbase.Uniform, v0, v1, v2, v3 int32) { - C.gl3_2compat_glUniform4i(gl.funcs, C.GLint(location), C.GLint(v0), C.GLint(v1), C.GLint(v2), C.GLint(v3)) -} - -// Uniform3i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform3i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3i(location glbase.Uniform, v0, v1, v2 int32) { - C.gl3_2compat_glUniform3i(gl.funcs, C.GLint(location), C.GLint(v0), C.GLint(v1), C.GLint(v2)) -} - -// Uniform2i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform2i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2i(location glbase.Uniform, v0, v1 int32) { - C.gl3_2compat_glUniform2i(gl.funcs, C.GLint(location), C.GLint(v0), C.GLint(v1)) -} - -// Uniform1i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform1i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1i(location glbase.Uniform, v0 int32) { - C.gl3_2compat_glUniform1i(gl.funcs, C.GLint(location), C.GLint(v0)) -} - -// Uniform4f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform4f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4f(location glbase.Uniform, v0, v1, v2, v3 float32) { - C.gl3_2compat_glUniform4f(gl.funcs, C.GLint(location), C.GLfloat(v0), C.GLfloat(v1), C.GLfloat(v2), C.GLfloat(v3)) -} - -// Uniform3f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform3f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3f(location glbase.Uniform, v0, v1, v2 float32) { - C.gl3_2compat_glUniform3f(gl.funcs, C.GLint(location), C.GLfloat(v0), C.GLfloat(v1), C.GLfloat(v2)) -} - -// Uniform2f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform2f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2f(location glbase.Uniform, v0, v1 float32) { - C.gl3_2compat_glUniform2f(gl.funcs, C.GLint(location), C.GLfloat(v0), C.GLfloat(v1)) -} - -// Uniform1f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform1f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1f(location glbase.Uniform, v0 float32) { - C.gl3_2compat_glUniform1f(gl.funcs, C.GLint(location), C.GLfloat(v0)) -} - -// UseProgram installs the program object specified by program as part of -// current rendering state. One or more executables are created in a program -// object by successfully attaching shader objects to it with AttachShader, -// successfully compiling the shader objects with CompileShader, and -// successfully linking the program object with LinkProgram. -// -// A program object will contain an executable that will run on the vertex -// processor if it contains one or more shader objects of type -// GL.VERTEX_SHADER that have been successfully compiled and linked. -// Similarly, a program object will contain an executable that will run on -// the fragment processor if it contains one or more shader objects of type -// GL.FRAGMENT_SHADER that have been successfully compiled and linked. -// -// Successfully installing an executable on a programmable processor will -// cause the corresponding fixed functionality of OpenGL to be disabled. -// Specifically, if an executable is installed on the vertex processor, the -// OpenGL fixed functionality will be disabled as follows. -// -// - The modelview matrix is not applied to vertex coordinates. -// -// - The projection matrix is not applied to vertex coordinates. -// -// - The texture matrices are not applied to texture coordinates. -// -// - Normals are not transformed to eye coordinates. -// -// - Normals are not rescaled or normalized. -// -// - Normalization of GL.AUTO_NORMAL evaluated normals is not performed. -// -// - Texture coordinates are not generated automatically. -// -// - Per-vertex lighting is not performed. -// -// - Color material computations are not performed. -// -// - Color index lighting is not performed. -// -// - This list also applies when setting the current raster position. -// -// The executable that is installed on the vertex processor is expected to -// implement any or all of the desired functionality from the preceding list. -// Similarly, if an executable is installed on the fragment processor, the -// OpenGL fixed functionality will be disabled as follows. -// -// - Texture environment and texture functions are not applied. -// -// - Texture application is not applied. -// -// - Color sum is not applied. -// -// - Fog is not applied. -// -// Again, the fragment shader that is installed is expected to implement any -// or all of the desired functionality from the preceding list. -// -// While a program object is in use, applications are free to modify attached -// shader objects, compile attached shader objects, attach additional shader -// objects, and detach or delete shader objects. None of these operations -// will affect the executables that are part of the current state. However, -// relinking the program object that is currently in use will install the -// program object as part of the current rendering state if the link -// operation was successful (see LinkProgram). If the program object -// currently in use is relinked unsuccessfully, its link status will be set -// to GL.FALSE, but the executables and associated state will remain part of -// the current state until a subsequent call to UseProgram removes it from -// use. After it is removed from use, it cannot be made part of current state -// until it has been successfully relinked. -// -// If program contains shader objects of type GL.VERTEX_SHADER but it does -// not contain shader objects of type GL.FRAGMENT_SHADER, an executable will -// be installed on the vertex processor, but fixed functionality will be used -// for fragment processing. Similarly, if program contains shader objects of -// type GL.FRAGMENT_SHADER but it does not contain shader objects of type -// GL.VERTEX_SHADER, an executable will be installed on the fragment -// processor, but fixed functionality will be used for vertex processing. If -// program is 0, the programmable processors will be disabled, and fixed -// functionality will be used for both vertex and fragment processing. -// -// While a program object is in use, the state that controls the disabled -// fixed functionality may also be updated using the normal OpenGL calls. -// -// Like display lists and texture objects, the name space for program objects -// may be shared across a set of contexts, as long as the server sides of the -// contexts share the same address space. If the name space is shared across -// contexts, any attached objects and the data associated with those attached -// objects are shared as well. -// -// Applications are responsible for providing the synchronization across API -// calls when objects are accessed from different execution threads. -// -// Error GL.INVALID_VALUE is generated if program is neither 0 nor a value -// generated by OpenGL. GL.INVALID_OPERATION is generated if program is not -// a program object. GL.INVALID_OPERATION is generated if program could not -// be made part of current state. GL.INVALID_OPERATION is generated if -// UseProgram is executed between the execution of Begin and the -// corresponding execution of End. -// -// UseProgram is available in GL version 2.0 or greater. -func (gl *GL) UseProgram(program glbase.Program) { - C.gl3_2compat_glUseProgram(gl.funcs, C.GLuint(program)) -} - -// ShaderSource sets the source code in shader to the provided source code. Any source -// code previously stored in the shader object is completely replaced. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader is not a shader -// object. GL.INVALID_VALUE is generated if count is less than 0. -// GL.INVALID_OPERATION is generated if ShaderSource is executed between the -// execution of Begin and the corresponding execution of End. -// -// ShaderSource is available in GL version 2.0 or greater. -func (gl *GL) ShaderSource(shader glbase.Shader, source ...string) { - count := len(source) - length := make([]int32, count) - source_c := make([]unsafe.Pointer, count) - for i, src := range source { - length[i] = int32(len(src)) - if len(src) > 0 { - source_c[i] = *(*unsafe.Pointer)(unsafe.Pointer(&src)) - } else { - source_c[i] = unsafe.Pointer(uintptr(0)) - } - } - C.gl3_2compat_glShaderSource(gl.funcs, C.GLuint(shader), C.GLsizei(count), (**C.GLchar)(unsafe.Pointer(&source_c[0])), (*C.GLint)(unsafe.Pointer(&length[0]))) -} - -// LinkProgram links the program object specified by program. If any shader -// objects of type GL.VERTEX_SHADER are attached to program, they will be -// used to create an executable that will run on the programmable vertex -// processor. If any shader objects of type GL.FRAGMENT_SHADER are attached -// to program, they will be used to create an executable that will run on the -// programmable fragment processor. -// -// The status of the link operation will be stored as part of the program -// object's state. This value will be set to GL.TRUE if the program object -// was linked without errors and is ready for use, and GL.FALSE otherwise. It -// can be queried by calling GetProgramiv with arguments program and -// GL.LINK_STATUS. -// -// As a result of a successful link operation, all active user-defined -// uniform variables belonging to program will be initialized to 0, and each -// of the program object's active uniform variables will be assigned a -// location that can be queried by calling GetUniformLocation. Also, any -// active user-defined attribute variables that have not been bound to a -// generic vertex attribute index will be bound to one at this time. -// -// Linking of a program object can fail for a number of reasons as specified -// in the OpenGL Shading Language Specification. The following lists some of -// the conditions that will cause a link error. -// -// - The number of active attribute variables supported by the -// implementation has been exceeded. -// -// - The storage limit for uniform variables has been exceeded. -// -// - The number of active uniform variables supported by the implementation -// has been exceeded. -// -// - The main function is missing for the vertex shader or the fragment -// shader. -// -// - A varying variable actually used in the fragment shader is not -// declared in the same way (or is not declared at all) in the vertex -// shader. -// -// - A reference to a function or variable name is unresolved. -// -// - A shared global is declared with two different types or two different -// initial values. -// -// - One or more of the attached shader objects has not been successfully -// compiled. -// -// - Binding a generic attribute matrix caused some rows of the matrix to -// fall outside the allowed maximum of GL.MAX_VERTEX_ATTRIBS. -// -// - Not enough contiguous vertex attribute slots could be found to bind -// attribute matrices. -// -// When a program object has been successfully linked, the program object can -// be made part of current state by calling UseProgram. Whether or not the -// link operation was successful, the program object's information log will -// be overwritten. The information log can be retrieved by calling -// GetProgramInfoLog. -// -// LinkProgram will also install the generated executables as part of the -// current rendering state if the link operation was successful and the -// specified program object is already currently in use as a result of a -// previous call to UseProgram. If the program object currently in use is -// relinked unsuccessfully, its link status will be set to GL.FALSE , but the -// executables and associated state will remain part of the current state -// until a subsequent call to UseProgram removes it from use. After it is -// removed from use, it cannot be made part of current state until it has -// been successfully relinked. -// -// If program contains shader objects of type GL.VERTEX_SHADER but does not -// contain shader objects of type GL.FRAGMENT_SHADER, the vertex shader will -// be linked against the implicit interface for fixed functionality fragment -// processing. Similarly, if program contains shader objects of type -// GL.FRAGMENT_SHADER but it does not contain shader objects of type -// GL.VERTEX_SHADER, the fragment shader will be linked against the implicit -// interface for fixed functionality vertex processing. -// -// The program object's information log is updated and the program is -// generated at the time of the link operation. After the link operation, -// applications are free to modify attached shader objects, compile attached -// shader objects, detach shader objects, delete shader objects, and attach -// additional shader objects. None of these operations affects the -// information log or the program that is part of the program object. -// -// If the link operation is unsuccessful, any information about a previous -// link operation on program is lost (a failed link does not restore the -// old state of program). Certain information can still be retrieved -// from program even after an unsuccessful link operation. See for instance -// GetActiveAttrib and GetActiveUniform. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program -// object. GL.INVALID_OPERATION is generated if LinkProgram is executed -// between the execution of Begin and the corresponding execution of End. -// -// LinkProgram is available in GL version 2.0 or greater. -func (gl *GL) LinkProgram(program glbase.Program) { - C.gl3_2compat_glLinkProgram(gl.funcs, C.GLuint(program)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsShader.xml -func (gl *GL) IsShader(shader glbase.Shader) bool { - glresult := C.gl3_2compat_glIsShader(gl.funcs, C.GLuint(shader)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsProgram.xml -func (gl *GL) IsProgram(program glbase.Program) bool { - glresult := C.gl3_2compat_glIsProgram(gl.funcs, C.GLuint(program)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// GetVertexAttribiv returns in params the value of a generic vertex attribute -// parameter. The generic vertex attribute to be queried is specified by -// index, and the parameter to be queried is specified by pname. -// -// The accepted parameter names are as follows: -// -// GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING -// params returns a single value, the name of the buffer object -// currently bound to the binding point corresponding to generic vertex -// attribute array index. If no buffer object is bound, 0 is returned. -// The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_ENABLED -// params returns a single value that is non-zero (true) if the vertex -// attribute array for index is enabled and 0 (false) if it is -// disabled. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_SIZE -// params returns a single value, the size of the vertex attribute -// array for index. The size is the number of values for each element -// of the vertex attribute array, and it will be 1, 2, 3, or 4. The -// initial value is 4. -// -// GL.VERTEX_ATTRIB_ARRAY_STRIDE -// params returns a single value, the array stride for (number of bytes -// between successive elements in) the vertex attribute array for -// index. A value of 0 indicates that the array elements are stored -// sequentially in memory. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_TYPE -// params returns a single value, a symbolic constant indicating the -// array type for the vertex attribute array for index. Possible values -// are GL.BYTE, GL.UNSIGNED_BYTE, GL.SHORT, GL.UNSIGNED_SHORT, GL.INT, -// GL.UNSIGNED_INT, GL.FLOAT, and GL.DOUBLE. The initial value is -// GL.FLOAT. -// -// GL.VERTEX_ATTRIB_ARRAY_NORMALIZED -// params returns a single value that is non-zero (true) if fixed-point -// data types for the vertex attribute array indicated by index are -// normalized when they are converted to floating point, and 0 (false) -// otherwise. The initial value is 0. -// -// GL.CURRENT_VERTEX_ATTRIB -// params returns four values that represent the current value for the -// generic vertex attribute specified by index. Generic vertex -// attribute 0 is unique in that it has no current state, so an error -// will be generated if index is 0. The initial value for all other -// generic vertex attributes is (0,0,0,1). -// -// All of the parameters except GL.CURRENT_VERTEX_ATTRIB represent -// client-side state. -// -// Error GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. GL.INVALID_ENUM is generated if pname is not an -// accepted value. GL.INVALID_OPERATION is generated if index is 0 and pname -// is GL.CURRENT_VERTEX_ATTRIB. -// -// GetVertexAttribiv is available in GL version 2.0 or greater. -func (gl *GL) GetVertexAttribiv(index glbase.Attrib, pname glbase.Enum, params []int32) { - var params_c [4]int32 - C.gl3_2compat_glGetVertexAttribiv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetVertexAttribfv returns in params the value of a generic vertex attribute -// parameter. The generic vertex attribute to be queried is specified by -// index, and the parameter to be queried is specified by pname. -// -// The accepted parameter names are as follows: -// -// GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING -// params returns a single value, the name of the buffer object -// currently bound to the binding point corresponding to generic vertex -// attribute array index. If no buffer object is bound, 0 is returned. -// The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_ENABLED -// params returns a single value that is non-zero (true) if the vertex -// attribute array for index is enabled and 0 (false) if it is -// disabled. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_SIZE -// params returns a single value, the size of the vertex attribute -// array for index. The size is the number of values for each element -// of the vertex attribute array, and it will be 1, 2, 3, or 4. The -// initial value is 4. -// -// GL.VERTEX_ATTRIB_ARRAY_STRIDE -// params returns a single value, the array stride for (number of bytes -// between successive elements in) the vertex attribute array for -// index. A value of 0 indicates that the array elements are stored -// sequentially in memory. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_TYPE -// params returns a single value, a symbolic constant indicating the -// array type for the vertex attribute array for index. Possible values -// are GL.BYTE, GL.UNSIGNED_BYTE, GL.SHORT, GL.UNSIGNED_SHORT, GL.INT, -// GL.UNSIGNED_INT, GL.FLOAT, and GL.DOUBLE. The initial value is -// GL.FLOAT. -// -// GL.VERTEX_ATTRIB_ARRAY_NORMALIZED -// params returns a single value that is non-zero (true) if fixed-point -// data types for the vertex attribute array indicated by index are -// normalized when they are converted to floating point, and 0 (false) -// otherwise. The initial value is 0. -// -// GL.CURRENT_VERTEX_ATTRIB -// params returns four values that represent the current value for the -// generic vertex attribute specified by index. Generic vertex -// attribute 0 is unique in that it has no current state, so an error -// will be generated if index is 0. The initial value for all other -// generic vertex attributes is (0,0,0,1). -// -// All of the parameters except GL.CURRENT_VERTEX_ATTRIB represent -// client-side state. -// -// Error GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. GL.INVALID_ENUM is generated if pname is not an -// accepted value. GL.INVALID_OPERATION is generated if index is 0 and pname -// is GL.CURRENT_VERTEX_ATTRIB. -// -// GetVertexAttribfv is available in GL version 2.0 or greater. -func (gl *GL) GetVertexAttribfv(index glbase.Attrib, pname glbase.Enum, params []float32) { - var params_c [4]float32 - C.gl3_2compat_glGetVertexAttribfv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetVertexAttribdv returns in params the value of a generic vertex attribute -// parameter. The generic vertex attribute to be queried is specified by -// index, and the parameter to be queried is specified by pname. -// -// The accepted parameter names are as follows: -// -// GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING -// params returns a single value, the name of the buffer object -// currently bound to the binding point corresponding to generic vertex -// attribute array index. If no buffer object is bound, 0 is returned. -// The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_ENABLED -// params returns a single value that is non-zero (true) if the vertex -// attribute array for index is enabled and 0 (false) if it is -// disabled. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_SIZE -// params returns a single value, the size of the vertex attribute -// array for index. The size is the number of values for each element -// of the vertex attribute array, and it will be 1, 2, 3, or 4. The -// initial value is 4. -// -// GL.VERTEX_ATTRIB_ARRAY_STRIDE -// params returns a single value, the array stride for (number of bytes -// between successive elements in) the vertex attribute array for -// index. A value of 0 indicates that the array elements are stored -// sequentially in memory. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_TYPE -// params returns a single value, a symbolic constant indicating the -// array type for the vertex attribute array for index. Possible values -// are GL.BYTE, GL.UNSIGNED_BYTE, GL.SHORT, GL.UNSIGNED_SHORT, GL.INT, -// GL.UNSIGNED_INT, GL.FLOAT, and GL.DOUBLE. The initial value is -// GL.FLOAT. -// -// GL.VERTEX_ATTRIB_ARRAY_NORMALIZED -// params returns a single value that is non-zero (true) if fixed-point -// data types for the vertex attribute array indicated by index are -// normalized when they are converted to floating point, and 0 (false) -// otherwise. The initial value is 0. -// -// GL.CURRENT_VERTEX_ATTRIB -// params returns four values that represent the current value for the -// generic vertex attribute specified by index. Generic vertex -// attribute 0 is unique in that it has no current state, so an error -// will be generated if index is 0. The initial value for all other -// generic vertex attributes is (0,0,0,1). -// -// All of the parameters except GL.CURRENT_VERTEX_ATTRIB represent -// client-side state. -// -// Error GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. GL.INVALID_ENUM is generated if pname is not an -// accepted value. GL.INVALID_OPERATION is generated if index is 0 and pname -// is GL.CURRENT_VERTEX_ATTRIB. -// -// GetVertexAttribdv is available in GL version 2.0 or greater. -func (gl *GL) GetVertexAttribdv(index glbase.Attrib, pname glbase.Enum, params []float64) { - var params_c [4]float64 - C.gl3_2compat_glGetVertexAttribdv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetUniformiv returns in params the value of the specified uniform -// variable. The type of the uniform variable specified by location -// determines the number of values returned. If the uniform variable is -// defined in the shader as a boolean, int, or float, a single value will be -// returned. If it is defined as a vec2, ivec2, or bvec2, two values will be -// returned. If it is defined as a vec3, ivec3, or bvec3, three values will -// be returned, and so on. To query values stored in uniform variables -// declared as arrays, call GetUniformiv for each element of the array. To -// query values stored in uniform variables declared as structures, call -// GetUniformiv for each field in the structure. The values for uniform -// variables declared as a matrix will be returned in column major order. -// -// The locations assigned to uniform variables are not known until the -// program object is linked. After linking has occurred, the command -// GetUniformLocation can be used to obtain the location of a uniform -// variable. This location value can then be passed to GetUniformiv in order -// to query the current value of the uniform variable. After a program object -// has been linked successfully, the index values for uniform variables -// remain fixed until the next link command occurs. The uniform variable -// values can only be queried after a link if the link was successful. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program -// object. GL.INVALID_OPERATION is generated if program has not been -// successfully linked. GL.INVALID_OPERATION is generated if location does -// not correspond to a valid uniform variable location for the specified -// program object. GL.INVALID_OPERATION is generated if GetUniformiv is -// executed between the execution of Begin and the corresponding execution of -// End. -// -// GetUniformiv is available in GL version 2.0 or greater. -func (gl *GL) GetUniformiv(program glbase.Program, location glbase.Uniform, params []int32) { - var params_c [4]int32 - C.gl3_2compat_glGetUniformiv(gl.funcs, C.GLuint(program), C.GLint(location), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetUniformfv returns in params the value of the specified uniform -// variable. The type of the uniform variable specified by location -// determines the number of values returned. If the uniform variable is -// defined in the shader as a boolean, int, or float, a single value will be -// returned. If it is defined as a vec2, ivec2, or bvec2, two values will be -// returned. If it is defined as a vec3, ivec3, or bvec3, three values will -// be returned, and so on. To query values stored in uniform variables -// declared as arrays, call GetUniformfv for each element of the array. To -// query values stored in uniform variables declared as structures, call -// GetUniformfv for each field in the structure. The values for uniform -// variables declared as a matrix will be returned in column major order. -// -// The locations assigned to uniform variables are not known until the -// program object is linked. After linking has occurred, the command -// GetUniformLocation can be used to obtain the location of a uniform -// variable. This location value can then be passed to GetUniformfv in order -// to query the current value of the uniform variable. After a program object -// has been linked successfully, the index values for uniform variables -// remain fixed until the next link command occurs. The uniform variable -// values can only be queried after a link if the link was successful. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program -// object. GL.INVALID_OPERATION is generated if program has not been -// successfully linked. GL.INVALID_OPERATION is generated if location does -// not correspond to a valid uniform variable location for the specified -// program object. GL.INVALID_OPERATION is generated if GetUniformfv is -// executed between the execution of Begin and the corresponding execution of -// End. -// -// GetUniformfv is available in GL version 2.0 or greater. -func (gl *GL) GetUniformfv(program glbase.Program, location glbase.Uniform, params []float32) { - var params_c [4]float32 - C.gl3_2compat_glGetUniformfv(gl.funcs, C.GLuint(program), C.GLint(location), (*C.GLfloat)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetUniformLocation returns an integer that represents the location of a -// specific uniform variable within a program object. name must be an active -// uniform variable name in program that is not a structure, an array of -// structures, or a subcomponent of a vector or a matrix. This function -// returns -1 if name does not correspond to an active uniform variable in -// program or if name starts with the reserved prefix "gl_". -// -// Uniform variables that are structures or arrays of structures may be -// queried by calling GetUniformLocation for each field within the -// structure. The array element operator "[]" and the structure field -// operator "." may be used in name in order to select elements within an -// array or fields within a structure. The result of using these operators is -// not allowed to be another structure, an array of structures, or a -// subcomponent of a vector or a matrix. Except if the last part of name -// indicates a uniform variable array, the location of the first element of -// an array can be retrieved by using the name of the array, or by using the -// name appended by "[0]". -// -// The actual locations assigned to uniform variables are not known until the -// program object is linked successfully. After linking has occurred, the -// command GetUniformLocation can be used to obtain the location of a -// uniform variable. This location value can then be passed to Uniform to -// set the value of the uniform variable or to GetUniform in order to query -// the current value of the uniform variable. After a program object has been -// linked successfully, the index values for uniform variables remain fixed -// until the next link command occurs. Uniform variable locations and values -// can only be queried after a link if the link was successful. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program object. -// GL.INVALID_OPERATION is generated if program has not been successfully -// linked. GL.INVALID_OPERATION is generated if GetUniformLocation is executed -// between the execution of Begin and the corresponding execution of End. -// -// GetUniformLocation is available in GL version 2.0 or greater. -func (gl *GL) GetUniformLocation(program glbase.Program, name string) glbase.Uniform { - name_cstr := C.CString(name) - glresult := C.gl3_2compat_glGetUniformLocation(gl.funcs, C.GLuint(program), (*C.GLchar)(name_cstr)) - C.free(unsafe.Pointer(name_cstr)) - return glbase.Uniform(glresult) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetShaderSource.xml -func (gl *GL) GetShaderSource(shader glbase.Shader, bufSize int32, length []int32, source []byte) { - C.gl3_2compat_glGetShaderSource(gl.funcs, C.GLuint(shader), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLchar)(unsafe.Pointer(&source[0]))) -} - -// GetShaderInfoLog returns the information log for the specified shader -// object. The information log for a shader object is modified when the -// shader is compiled. -// -// The information log for a shader object is a string that may contain -// diagnostic messages, warning messages, and other information about the -// last compile operation. When a shader object is created, its information -// log will be a string of length 0, and the size of the current log can be -// obtained by calling GetShaderiv with the value GL.INFO_LOG_LENGTH. -// -// The information log for a shader object is the OpenGL implementer's -// primary mechanism for conveying information about the compilation process. -// Therefore, the information log can be helpful to application developers -// during the development process, even when compilation is successful. -// Application developers should not expect different OpenGL implementations -// to produce identical information logs. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader is not a shader -// object. GL.INVALID_VALUE is generated if maxLength is less than 0. -// GL.INVALID_OPERATION is generated if GetShaderInfoLog is executed -// between the execution of Begin and the corresponding execution of End. -// -// GetShaderInfoLog is available in GL version 2.0 or greater. -func (gl *GL) GetShaderInfoLog(shader glbase.Shader) []byte { - var params [1]int32 - var length int32 - gl.GetShaderiv(shader, INFO_LOG_LENGTH, params[:]) - bufSize := params[0] - infoLog := make([]byte, int(bufSize)) - C.gl3_2compat_glGetShaderInfoLog(gl.funcs, C.GLuint(shader), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length)), (*C.GLchar)(unsafe.Pointer(&infoLog[0]))) - return infoLog -} - -// GetShaderiv GetShader returns in params the value of a parameter for a specific -// shader object. The following parameters are defined: -// -// GL.SHADER_TYPE -// params returns GL.VERTEX_SHADER if shader is a vertex shader object, -// and GL.FRAGMENT_SHADER if shader is a fragment shader object. -// -// GL.DELETE_STATUS -// params returns GL.TRUE if shader is currently flagged for deletion, -// and GL.FALSE otherwise. -// -// GL.COMPILE_STATUS -// params returns GL.TRUE if the last compile operation on shader was -// successful, and GL.FALSE otherwise. -// -// GL.INFO_LOG_LENGTH -// params returns the number of characters in the information log for -// shader including the null termination character (the size of the -// character buffer required to store the information log). If shader has -// no information log, a value of 0 is returned. -// -// GL.SHADER_SOURCE_LENGTH -// params returns the length of the concatenation of the source strings -// that make up the shader source for the shader, including the null -// termination character. (the size of the character buffer -// required to store the shader source). If no source code exists, 0 is -// returned. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader does not refer to a -// shader object. GL.INVALID_ENUM is generated if pname is not an accepted -// value. GL.INVALID_OPERATION is generated if GetShader is executed -// between the execution of Begin and the corresponding execution of End. -// -// GetShaderiv is available in GL version 2.0 or greater. -func (gl *GL) GetShaderiv(shader glbase.Shader, pname glbase.Enum, params []int32) { - var params_c [4]int32 - C.gl3_2compat_glGetShaderiv(gl.funcs, C.GLuint(shader), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetProgramInfoLog returns the information log for the specified program -// object. The information log for a program object is modified when the -// program object is linked or validated. -// -// The information log for a program object is either an empty string, or a -// string containing information about the last link operation, or a string -// containing information about the last validation operation. It may contain -// diagnostic messages, warning messages, and other information. When a -// program object is created, its information log will be a string of length -// 0, and the size of the current log can be obtained by calling GetProgramiv -// with the value GL.INFO_LOG_LENGTH. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated -// by OpenGL. GL.INVALID_OPERATION is generated if program is not a -// program object. -func (gl *GL) GetProgramInfoLog(program glbase.Program) []byte { - var params [1]int32 - var length int32 - gl.GetProgramiv(program, INFO_LOG_LENGTH, params[:]) - bufSize := params[0] - infoLog := make([]byte, int(bufSize)) - C.gl3_2compat_glGetProgramInfoLog(gl.funcs, C.GLuint(program), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length)), (*C.GLchar)(unsafe.Pointer(&infoLog[0]))) - return infoLog -} - -// GetProgramiv returns in params the value of a parameter for a specific -// program object. The following parameters are defined: -// -// GL.DELETE_STATUS -// params returns GL.TRUE if program is currently flagged for deletion, -// and GL.FALSE otherwise. -// -// GL.LINK_STATUS -// params returns GL.TRUE if the last link operation on program was -// successful, and GL.FALSE otherwise. -// -// GL.VALIDATE_STATUS -// params returns GL.TRUE or if the last validation operation on -// program was successful, and GL.FALSE otherwise. -// -// GL.INFO_LOG_LENGTH -// params returns the number of characters in the information log for -// program including the null termination character (the size of -// the character buffer required to store the information log). If -// program has no information log, a value of 0 is returned. -// -// GL.ATTACHED_SHADERS -// params returns the number of shader objects attached to program. -// -// GL.ACTIVE_ATTRIBUTES -// params returns the number of active attribute variables for program. -// -// GL.ACTIVE_ATTRIBUTE_MAX_LENGTH -// params returns the length of the longest active attribute name for -// program, including the null termination character (the size of -// the character buffer required to store the longest attribute name). -// If no active attributes exist, 0 is returned. -// -// GL.ACTIVE_UNIFORMS -// params returns the number of active uniform variables for program. -// -// GL.ACTIVE_UNIFORM_MAX_LENGTH -// params returns the length of the longest active uniform variable -// name for program, including the null termination character (i.e., -// the size of the character buffer required to store the longest -// uniform variable name). If no active uniform variables exist, 0 is -// returned. -// -// GL.TRANSFORM_FEEDBACK_BUFFER_MODE -// params returns a symbolic constant indicating the buffer mode used -// when transform feedback is active. This may be GL.SEPARATE_ATTRIBS -// or GL.INTERLEAVED_ATTRIBS. -// -// GL.TRANSFORM_FEEDBACK_VARYINGS -// params returns the number of varying variables to capture in transform -// feedback mode for the program. -// -// GL.TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH -// params returns the length of the longest variable name to be used for -// transform feedback, including the null-terminator. -// -// GL.GEOMETRY_VERTICES_OUT -// params returns the maximum number of vertices that the geometry shader in -// program will output. -// -// GL.GEOMETRY_INPUT_TYPE -// params returns a symbolic constant indicating the primitive type accepted -// as input to the geometry shader contained in program. -// -// GL.GEOMETRY_OUTPUT_TYPE -// params returns a symbolic constant indicating the primitive type that will -// be output by the geometry shader contained in program. -// -// GL.ACTIVE_UNIFORM_BLOCKS and GL.ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH are -// available only if the GL version 3.1 or greater. -// -// GL.GEOMETRY_VERTICES_OUT, GL.GEOMETRY_INPUT_TYPE and -// GL.GEOMETRY_OUTPUT_TYPE are accepted only if the GL version is 3.2 or -// greater. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program does not refer to a -// program object. GL.INVALID_OPERATION is generated if pname is -// GL.GEOMETRY_VERTICES_OUT, GL.GEOMETRY_INPUT_TYPE, or -// GL.GEOMETRY_OUTPUT_TYPE, and program does not contain a geometry shader. -// GL.INVALID_ENUM is generated if pname is not an accepted value. -func (gl *GL) GetProgramiv(program glbase.Program, pname glbase.Enum, params []int32) { - var params_c [4]int32 - C.gl3_2compat_glGetProgramiv(gl.funcs, C.GLuint(program), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetAttribLocation queries the previously linked program object specified -// by program for the attribute variable specified by name and returns the -// index of the generic vertex attribute that is bound to that attribute -// variable. If name is a matrix attribute variable, the index of the first -// column of the matrix is returned. If the named attribute variable is not -// an active attribute in the specified program object or if name starts with -// the reserved prefix "gl_", a value of -1 is returned. -// -// The association between an attribute variable name and a generic attribute -// index can be specified at any time by calling BindAttribLocation. -// Attribute bindings do not go into effect until LinkProgram is called. -// After a program object has been linked successfully, the index values for -// attribute variables remain fixed until the next link command occurs. The -// attribute values can only be queried after a link if the link was -// successful. GetAttribLocation returns the binding that actually went -// into effect the last time LinkProgram was called for the specified -// program object. Attribute bindings that have been specified since the last -// link operation are not returned by GetAttribLocation. -// -// Error GL_INVALID_OPERATION is generated if program is not a value -// generated by OpenGL. GL_INVALID_OPERATION is generated if program is not -// a program object. GL_INVALID_OPERATION is generated if program has not -// been successfully linked. GL_INVALID_OPERATION is generated if -// GetAttribLocation is executed between the execution of Begin and the -// corresponding execution of End. -// -// GetAttribLocation is available in GL version 2.0 or greater. -func (gl *GL) GetAttribLocation(program glbase.Program, name string) glbase.Attrib { - name_cstr := C.CString(name) - glresult := C.gl3_2compat_glGetAttribLocation(gl.funcs, C.GLuint(program), (*C.GLchar)(name_cstr)) - C.free(unsafe.Pointer(name_cstr)) - return glbase.Attrib(glresult) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetAttachedShaders.xml -func (gl *GL) GetAttachedShaders(program glbase.Program, maxCount int32, count []int, obj []uint32) { - C.gl3_2compat_glGetAttachedShaders(gl.funcs, C.GLuint(program), C.GLsizei(maxCount), (*C.GLsizei)(unsafe.Pointer(&count[0])), (*C.GLuint)(unsafe.Pointer(&obj[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetActiveUniform.xml -func (gl *GL) GetActiveUniform(program glbase.Program, index uint32, bufSize int32, length []int32, size []int, gltype []glbase.Enum, name []byte) { - C.gl3_2compat_glGetActiveUniform(gl.funcs, C.GLuint(program), C.GLuint(index), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLint)(unsafe.Pointer(&size[0])), (*C.GLenum)(unsafe.Pointer(&gltype[0])), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetActiveAttrib.xml -func (gl *GL) GetActiveAttrib(program glbase.Program, index glbase.Attrib, bufSize int32, length []int32, size []int, gltype []glbase.Enum, name []byte) { - C.gl3_2compat_glGetActiveAttrib(gl.funcs, C.GLuint(program), C.GLuint(index), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLint)(unsafe.Pointer(&size[0])), (*C.GLenum)(unsafe.Pointer(&gltype[0])), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEnableVertexAttribArray.xml -func (gl *GL) EnableVertexAttribArray(index glbase.Attrib) { - C.gl3_2compat_glEnableVertexAttribArray(gl.funcs, C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDisableVertexAttribArray.xml -func (gl *GL) DisableVertexAttribArray(index glbase.Attrib) { - C.gl3_2compat_glDisableVertexAttribArray(gl.funcs, C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDetachShader.xml -func (gl *GL) DetachShader(program glbase.Program, shader glbase.Shader) { - C.gl3_2compat_glDetachShader(gl.funcs, C.GLuint(program), C.GLuint(shader)) -} - -// DeleteShader frees the memory and invalidates the name associated with -// the shader object specified by shader. This command effectively undoes the -// effects of a call to CreateShader. -// -// If a shader object to be deleted is attached to a program object, it will -// be flagged for deletion, but it will not be deleted until it is no longer -// attached to any program object, for any rendering context (it must -// be detached from wherever it was attached before it will be deleted). A -// value of 0 for shader will be silently ignored. -// -// To determine whether an object has been flagged for deletion, call -// GetShader with arguments shader and GL.DELETE_STATUS. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. -// -// DeleteShader is available in GL version 2.0 or greater. -func (gl *GL) DeleteShader(shader glbase.Shader) { - C.gl3_2compat_glDeleteShader(gl.funcs, C.GLuint(shader)) -} - -// DeleteProgram frees the memory and invalidates the name associated with -// the program object specified by program. This command effectively undoes -// the effects of a call to CreateProgram. -// -// If a program object is in use as part of current rendering state, it will -// be flagged for deletion, but it will not be deleted until it is no longer -// part of current state for any rendering context. If a program object to be -// deleted has shader objects attached to it, those shader objects will be -// automatically detached but not deleted unless they have already been -// flagged for deletion by a previous call to DeleteShader. A value of 0 -// for program will be silently ignored. -// -// To determine whether a program object has been flagged for deletion, call -// GetProgram with arguments program and GL.DELETE_STATUS. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. -// -// DeleteProgram is available in GL version 2.0 or greater. -func (gl *GL) DeleteProgram(program glbase.Program) { - C.gl3_2compat_glDeleteProgram(gl.funcs, C.GLuint(program)) -} - -// CreateShader creates an empty shader object and returns a non-zero value -// by which it can be referenced. A shader object is used to maintain the -// source code strings that define a shader. shaderType indicates the type of -// shader to be created. -// -// Two types of shaders are supported. A shader of type GL.VERTEX_SHADER is a -// shader that is intended to run on the programmable vertex processor and -// replace the fixed functionality vertex processing in OpenGL. A shader of -// type GL.FRAGMENT_SHADER is a shader that is intended to run on the -// programmable fragment processor and replace the fixed functionality -// fragment processing in OpenGL. -// -// When created, a shader object's GL.SHADER_TYPE parameter is set to either -// GL.VERTEX_SHADER or GL.FRAGMENT_SHADER, depending on the value of -// shaderType. -// -// Like display lists and texture objects, the name space for shader objects -// may be shared across a set of contexts, as long as the server sides of the -// contexts share the same address space. If the name space is shared across -// contexts, any attached objects and the data associated with those attached -// objects are shared as well. -// -// This function returns 0 if an error occurs creating the shader object. -// -// Error GL.INVALID_ENUM is generated if shaderType is not an accepted value. -// GL.INVALID_OPERATION is generated if CreateShader is executed between the -// execution of Begin and the corresponding execution of End. -// -// CreateShader is available in GL version 2.0 or greater. -func (gl *GL) CreateShader(gltype glbase.Enum) glbase.Shader { - glresult := C.gl3_2compat_glCreateShader(gl.funcs, C.GLenum(gltype)) - return glbase.Shader(glresult) -} - -// CreateProgram creates an empty program object and returns a non-zero -// value by which it can be referenced. A program object is an object to -// which shader objects can be attached. This provides a mechanism to specify -// the shader objects that will be linked to create a program. It also -// provides a means for checking the compatibility of the shaders that will -// be used to create a program (for instance, checking the compatibility -// between a vertex shader and a fragment shader). When no longer needed as -// part of a program object, shader objects can be detached. -// -// One or more executables are created in a program object by successfully -// attaching shader objects to it with AttachShader, successfully compiling -// the shader objects with CompileShader, and successfully linking the -// program object with LinkProgram. These executables are made part of -// current state when UseProgram is called. Program objects can be deleted -// by calling DeleteProgram. The memory associated with the program object -// will be deleted when it is no longer part of current rendering state for -// any context. -// -// Like display lists and texture objects, the name space for program objects -// may be shared across a set of contexts, as long as the server sides of the -// contexts share the same address space. If the name space is shared across -// contexts, any attached objects and the data associated with those attached -// objects are shared as well. -// -// Applications are responsible for providing the synchronization across API -// calls when objects are accessed from different execution threads. -// -// This function returns 0 if an error occurs creating the program object. -// -// Error GL.INVALID_OPERATION is generated if CreateProgram is executed -// between the execution of Begin and the corresponding execution of End. -// -// CreateProgram is available in GL version 2.0 or greater. -func (gl *GL) CreateProgram() glbase.Program { - glresult := C.gl3_2compat_glCreateProgram(gl.funcs) - return glbase.Program(glresult) -} - -// CompileShader compiles the source code strings that have been stored in -// the shader object specified by shader. -// -// The compilation status will be stored as part of the shader object's -// state. This value will be set to GL.TRUE if the shader was compiled without -// errors and is ready for use, and GL.FALSE otherwise. It can be queried by -// calling GetShaderiv with arguments shader and GL.COMPILE_STATUS. -// -// Compilation of a shader can fail for a number of reasons as specified by -// the OpenGL Shading Language Specification. Whether or not the compilation -// was successful, information about the compilation can be obtained from the -// shader object's information log by calling GetShaderInfoLog. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader is not a shader -// object. GL.INVALID_OPERATION is generated if CompileShader is executed -// between the execution of Begin and the corresponding execution of End. -// -// CompileShader is available in GL version 2.0 or greater. -func (gl *GL) CompileShader(shader glbase.Shader) { - C.gl3_2compat_glCompileShader(gl.funcs, C.GLuint(shader)) -} - -// BindAttribLocation associates a user-defined attribute variable in the program -// object specified by program with a generic vertex attribute index. The name -// parameter specifies the name of the vertex shader attribute variable to -// which index is to be bound. When program is made part of the current state, -// values provided via the generic vertex attribute index will modify the -// value of the user-defined attribute variable specified by name. -// -// If name refers to a matrix attribute variable, index refers to the first -// column of the matrix. Other matrix columns are then automatically bound to -// locations index+1 for a matrix of type mat2; index+1 and index+2 for a -// matrix of type mat3; and index+1, index+2, and index+3 for a matrix of -// type mat4. -// -// This command makes it possible for vertex shaders to use descriptive names -// for attribute variables rather than generic variables that are numbered -// from 0 to GL.MAX_VERTEX_ATTRIBS-1. The values sent to each generic -// attribute index are part of current state, just like standard vertex -// attributes such as color, normal, and vertex position. If a different -// program object is made current by calling UseProgram, the generic vertex -// attributes are tracked in such a way that the same values will be observed -// by attributes in the new program object that are also bound to index. -// -// Attribute variable name-to-generic attribute index bindings for a program -// object can be explicitly assigned at any time by calling -// BindAttribLocation. Attribute bindings do not go into effect until -// LinkProgram is called. After a program object has been linked -// successfully, the index values for generic attributes remain fixed (and -// their values can be queried) until the next link command occurs. -// -// Applications are not allowed to bind any of the standard OpenGL vertex -// attributes using this command, as they are bound automatically when -// needed. Any attribute binding that occurs after the program object has -// been linked will not take effect until the next time the program object is -// linked. -// -// If name was bound previously, that information is lost. Thus you cannot -// bind one user-defined attribute variable to multiple indices, but you can -// bind multiple user-defined attribute variables to the same index. -// -// Applications are allowed to bind more than one user-defined attribute -// variable to the same generic vertex attribute index. This is called -// aliasing, and it is allowed only if just one of the aliased attributes is -// active in the executable program, or if no path through the shader -// consumes more than one attribute of a set of attributes aliased to the -// same location. The compiler and linker are allowed to assume that no -// aliasing is done and are free to employ optimizations that work only in -// the absence of aliasing. OpenGL implementations are not required to do -// error checking to detect aliasing. Because there is no way to bind -// standard attributes, it is not possible to alias generic attributes with -// conventional ones (except for generic attribute 0). -// -// BindAttribLocation can be called before any vertex shader objects are -// bound to the specified program object. It is also permissible to bind a -// generic attribute index to an attribute variable name that is never used -// in a vertex shader. -// -// Active attributes that are not explicitly bound will be bound by the -// linker when LinkProgram is called. The locations assigned can be queried -// by calling GetAttribLocation. -// -// Error GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. -// GL.INVALID_OPERATION is generated if name starts with the reserved prefix "gl_". -// GL.INVALID_VALUE is generated if program is not a value generated by OpenGL. -// GL.INVALID_OPERATION is generated if program is not a program object. -// GL.INVALID_OPERATION is generated if BindAttribLocation is executed -// between the execution of Begin and the corresponding execution of End. -// -// BindAttribLocation is available in GL version 2.0 or greater. -func (gl *GL) BindAttribLocation(program glbase.Program, index glbase.Attrib, name string) { - name_cstr := C.CString(name) - C.gl3_2compat_glBindAttribLocation(gl.funcs, C.GLuint(program), C.GLuint(index), (*C.GLchar)(name_cstr)) - C.free(unsafe.Pointer(name_cstr)) -} - -// AttachShader attaches a shader object to a program object. -// -// In order to create an executable, there must be a way to specify the list -// of things that will be linked together. Program objects provide this -// mechanism. Shaders that are to be linked together in a program object must -// first be attached to that program object. This indicates that shader will -// be included in link operations that will be performed on program. -// -// All operations that can be performed on a shader object are valid whether -// or not the shader object is attached to a program object. It is -// permissible to attach a shader object to a program object before source -// code has been loaded into the shader object or before the shader object -// has been compiled. It is permissible to attach multiple shader objects of -// the same type because each may contain a portion of the complete shader. -// It is also permissible to attach a shader object to more than one program -// object. If a shader object is deleted while it is attached to a program -// object, it will be flagged for deletion, and deletion will not occur until -// DetachShader is called to detach it from all program objects to which it -// is attached. -// -// Error GL.INVALID_VALUE is generated if either program or shader is not a -// value generated by OpenGL. GL.INVALID_OPERATION is generated if program -// is not a program object. GL.INVALID_OPERATION is generated if shader is -// not a shader object. GL.INVALID_OPERATION is generated if shader is -// already attached to program. GL.INVALID_OPERATION is generated if -// AttachShader is executed between the execution of Begin and the -// corresponding execution of End. -// -// AttachShader is available in GL version 2.0 or greater. -func (gl *GL) AttachShader(program glbase.Program, shader glbase.Shader) { - C.gl3_2compat_glAttachShader(gl.funcs, C.GLuint(program), C.GLuint(shader)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glStencilMaskSeparate.xml -func (gl *GL) StencilMaskSeparate(face glbase.Enum, mask uint32) { - C.gl3_2compat_glStencilMaskSeparate(gl.funcs, C.GLenum(face), C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glStencilFuncSeparate.xml -func (gl *GL) StencilFuncSeparate(face, glfunc glbase.Enum, ref int32, mask uint32) { - C.gl3_2compat_glStencilFuncSeparate(gl.funcs, C.GLenum(face), C.GLenum(glfunc), C.GLint(ref), C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glStencilOpSeparate.xml -func (gl *GL) StencilOpSeparate(face, sfail, dpfail, dppass glbase.Enum) { - C.gl3_2compat_glStencilOpSeparate(gl.funcs, C.GLenum(face), C.GLenum(sfail), C.GLenum(dpfail), C.GLenum(dppass)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDrawBuffers.xml -func (gl *GL) DrawBuffers(n int, bufs []glbase.Enum) { - C.gl3_2compat_glDrawBuffers(gl.funcs, C.GLsizei(n), (*C.GLenum)(unsafe.Pointer(&bufs[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBlendEquationSeparate.xml -func (gl *GL) BlendEquationSeparate(modeRGB, modeAlpha glbase.Enum) { - C.gl3_2compat_glBlendEquationSeparate(gl.funcs, C.GLenum(modeRGB), C.GLenum(modeAlpha)) -} - -// UniformMatrix4x3fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix4x3fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix4x3fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(4*3) != 0 { - panic("invalid value length for UniformMatrix4x3fv") - } - count := len(value) / (4 * 3) - C.gl3_2compat_glUniformMatrix4x3fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix3x4fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix3x4fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix3x4fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(3*4) != 0 { - panic("invalid value length for UniformMatrix3x4fv") - } - count := len(value) / (3 * 4) - C.gl3_2compat_glUniformMatrix3x4fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix4x2fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix4x2fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix4x2fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(4*2) != 0 { - panic("invalid value length for UniformMatrix4x2fv") - } - count := len(value) / (4 * 2) - C.gl3_2compat_glUniformMatrix4x2fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix2x4fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix2x4fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix2x4fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(2*4) != 0 { - panic("invalid value length for UniformMatrix2x4fv") - } - count := len(value) / (2 * 4) - C.gl3_2compat_glUniformMatrix2x4fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix3x2fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix3x2fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix3x2fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(3*2) != 0 { - panic("invalid value length for UniformMatrix3x2fv") - } - count := len(value) / (3 * 2) - C.gl3_2compat_glUniformMatrix3x2fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix2x3fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix2x3fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix2x3fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(2*3) != 0 { - panic("invalid value length for UniformMatrix2x3fv") - } - count := len(value) / (2 * 3) - C.gl3_2compat_glUniformMatrix2x3fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsVertexArray.xml -func (gl *GL) IsVertexArray(array uint32) bool { - glresult := C.gl3_2compat_glIsVertexArray(gl.funcs, C.GLuint(array)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGenVertexArrays.xml -func (gl *GL) GenVertexArrays(n int, arrays []uint32) { - C.gl3_2compat_glGenVertexArrays(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&arrays[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDeleteVertexArrays.xml -func (gl *GL) DeleteVertexArrays(n int, arrays []uint32) { - C.gl3_2compat_glDeleteVertexArrays(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&arrays[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBindVertexArray.xml -func (gl *GL) BindVertexArray(array uint32) { - C.gl3_2compat_glBindVertexArray(gl.funcs, C.GLuint(array)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFlushMappedBufferRange.xml -func (gl *GL) FlushMappedBufferRange(target glbase.Enum, offset, length int) { - C.gl3_2compat_glFlushMappedBufferRange(gl.funcs, C.GLenum(target), C.GLintptr(offset), C.GLsizeiptr(length)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFramebufferTextureLayer.xml -func (gl *GL) FramebufferTextureLayer(target, attachment glbase.Enum, texture glbase.Texture, level int, layer int32) { - C.gl3_2compat_glFramebufferTextureLayer(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLuint(texture), C.GLint(level), C.GLint(layer)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRenderbufferStorageMultisample.xml -func (gl *GL) RenderbufferStorageMultisample(target glbase.Enum, samples int32, internalFormat glbase.Enum, width, height int) { - C.gl3_2compat_glRenderbufferStorageMultisample(gl.funcs, C.GLenum(target), C.GLsizei(samples), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBlitFramebuffer.xml -func (gl *GL) BlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1 int32, mask glbase.Bitfield, filter glbase.Enum) { - C.gl3_2compat_glBlitFramebuffer(gl.funcs, C.GLint(srcX0), C.GLint(srcY0), C.GLint(srcX1), C.GLint(srcY1), C.GLint(dstX0), C.GLint(dstY0), C.GLint(dstX1), C.GLint(dstY1), C.GLbitfield(mask), C.GLenum(filter)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGenerateMipmap.xml -func (gl *GL) GenerateMipmap(target glbase.Enum) { - C.gl3_2compat_glGenerateMipmap(gl.funcs, C.GLenum(target)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetFramebufferAttachmentParameteriv.xml -func (gl *GL) GetFramebufferAttachmentParameteriv(target, attachment, pname glbase.Enum, params []int32) { - C.gl3_2compat_glGetFramebufferAttachmentParameteriv(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFramebufferRenderbuffer.xml -func (gl *GL) FramebufferRenderbuffer(target, attachment, renderbuffertarget glbase.Enum, renderbuffer glbase.Renderbuffer) { - C.gl3_2compat_glFramebufferRenderbuffer(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(renderbuffertarget), C.GLuint(renderbuffer)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFramebufferTexture3D.xml -func (gl *GL) FramebufferTexture3D(target, attachment, textarget glbase.Enum, texture glbase.Texture, level int, zoffset int32) { - C.gl3_2compat_glFramebufferTexture3D(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(textarget), C.GLuint(texture), C.GLint(level), C.GLint(zoffset)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFramebufferTexture2D.xml -func (gl *GL) FramebufferTexture2D(target, attachment, textarget glbase.Enum, texture glbase.Texture, level int) { - C.gl3_2compat_glFramebufferTexture2D(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(textarget), C.GLuint(texture), C.GLint(level)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFramebufferTexture1D.xml -func (gl *GL) FramebufferTexture1D(target, attachment, textarget glbase.Enum, texture glbase.Texture, level int) { - C.gl3_2compat_glFramebufferTexture1D(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(textarget), C.GLuint(texture), C.GLint(level)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCheckFramebufferStatus.xml -func (gl *GL) CheckFramebufferStatus(target glbase.Enum) glbase.Enum { - glresult := C.gl3_2compat_glCheckFramebufferStatus(gl.funcs, C.GLenum(target)) - return glbase.Enum(glresult) -} - -// GenFramebuffers returns n framebuffer object names in ids. There is no -// guarantee that the names form a contiguous set of integers; however, it is -// guaranteed that none of the returned names was in use immediately before -// the call to GenFramebuffers. -// -// Framebuffer object names returned by a call to GenFramebuffers are not -// returned by subsequent calls, unless they are first deleted with -// DeleteFramebuffers. -// -// The names returned in ids are marked as used, for the purposes of -// GenFramebuffers only, but they acquire state and type only when they are -// first bound. -// -// Error GL.INVALID_VALUE is generated if n is negative. -func (gl *GL) GenFramebuffers(n int) []glbase.Framebuffer { - if n == 0 { - return nil - } - framebuffers := make([]glbase.Framebuffer, n) - C.gl3_2compat_glGenFramebuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&framebuffers[0]))) - return framebuffers -} - -// DeleteFramebuffers deletes the framebuffer objects whose names are -// stored in the framebuffers slice. The name zero is reserved by the GL and -// is silently ignored, should it occur in framebuffers, as are other unused -// names. Once a framebuffer object is deleted, its name is again unused and -// it has no attachments. If a framebuffer that is currently bound to one or -// more of the targets GL.DRAW_FRAMEBUFFER or GL.READ_FRAMEBUFFER is deleted, -// it is as though BindFramebuffer had been executed with the corresponding -// target and framebuffer zero. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// DeleteFramebuffers is available in GL version 3.0 or greater. -func (gl *GL) DeleteFramebuffers(framebuffers []glbase.Framebuffer) { - n := len(framebuffers) - if n == 0 { - return - } - C.gl3_2compat_glDeleteFramebuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&framebuffers[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBindFramebuffer.xml -func (gl *GL) BindFramebuffer(target glbase.Enum, framebuffer glbase.Framebuffer) { - C.gl3_2compat_glBindFramebuffer(gl.funcs, C.GLenum(target), C.GLuint(framebuffer)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsFramebuffer.xml -func (gl *GL) IsFramebuffer(framebuffer glbase.Framebuffer) bool { - glresult := C.gl3_2compat_glIsFramebuffer(gl.funcs, C.GLuint(framebuffer)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetRenderbufferParameteriv.xml -func (gl *GL) GetRenderbufferParameteriv(target, pname glbase.Enum, params []int32) { - C.gl3_2compat_glGetRenderbufferParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRenderbufferStorage.xml -func (gl *GL) RenderbufferStorage(target, internalFormat glbase.Enum, width, height int) { - C.gl3_2compat_glRenderbufferStorage(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height)) -} - -// GenRenderbuffers returns n renderbuffer object names in renderbuffers. -// There is no guarantee that the names form a contiguous set of integers; -// however, it is guaranteed that none of the returned names was in use -// immediately before the call to GenRenderbuffers. -// -// Renderbuffer object names returned by a call to GenRenderbuffers are not -// returned by subsequent calls, unless they are first deleted with -// DeleteRenderbuffers. -// -// The names returned in renderbuffers are marked as used, for the purposes -// of GenRenderbuffers only, but they acquire state and type only when they -// are first bound. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// GenRenderbuffers is available in GL version 3.0 or greater. -func (gl *GL) GenRenderbuffers(n int) []glbase.Renderbuffer { - if n == 0 { - return nil - } - renderbuffers := make([]glbase.Renderbuffer, n) - C.gl3_2compat_glGenRenderbuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&renderbuffers[0]))) - return renderbuffers -} - -// DeleteRenderbuffers deletes the renderbuffer objects whose names are stored -// in the renderbuffers slice. The name zero is reserved by the GL and -// is silently ignored, should it occur in renderbuffers, as are other unused -// names. Once a renderbuffer object is deleted, its name is again unused and -// it has no contents. If a renderbuffer that is currently bound to the -// target GL.RENDERBUFFER is deleted, it is as though BindRenderbuffer had -// been executed with a target of GL.RENDERBUFFER and a name of zero. -// -// If a renderbuffer object is attached to one or more attachment points in -// the currently bound framebuffer, then it as if FramebufferRenderbuffer -// had been called, with a renderbuffer of zero for each attachment point to -// which this image was attached in the currently bound framebuffer. In other -// words, this renderbuffer object is first detached from all attachment -// ponits in the currently bound framebuffer. Note that the renderbuffer -// image is specifically not detached from any non-bound framebuffers. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// DeleteRenderbuffers is available in GL version 3.0 or greater. -func (gl *GL) DeleteRenderbuffers(renderbuffers []glbase.Renderbuffer) { - n := len(renderbuffers) - if n == 0 { - return - } - C.gl3_2compat_glDeleteRenderbuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&renderbuffers[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBindRenderbuffer.xml -func (gl *GL) BindRenderbuffer(target glbase.Enum, renderbuffer glbase.Renderbuffer) { - C.gl3_2compat_glBindRenderbuffer(gl.funcs, C.GLenum(target), C.GLuint(renderbuffer)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsRenderbuffer.xml -func (gl *GL) IsRenderbuffer(renderbuffer glbase.Renderbuffer) bool { - glresult := C.gl3_2compat_glIsRenderbuffer(gl.funcs, C.GLuint(renderbuffer)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClearBufferfi.xml -func (gl *GL) ClearBufferfi(buffer glbase.Enum, drawbuffer int32, depth float32, stencil int32) { - C.gl3_2compat_glClearBufferfi(gl.funcs, C.GLenum(buffer), C.GLint(drawbuffer), C.GLfloat(depth), C.GLint(stencil)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClearBufferfv.xml -func (gl *GL) ClearBufferfv(buffer glbase.Enum, drawbuffer int32, value []float32) { - C.gl3_2compat_glClearBufferfv(gl.funcs, C.GLenum(buffer), C.GLint(drawbuffer), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClearBufferuiv.xml -func (gl *GL) ClearBufferuiv(buffer glbase.Enum, drawbuffer int32, value []uint32) { - C.gl3_2compat_glClearBufferuiv(gl.funcs, C.GLenum(buffer), C.GLint(drawbuffer), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClearBufferiv.xml -func (gl *GL) ClearBufferiv(buffer glbase.Enum, drawbuffer int32, value []int32) { - C.gl3_2compat_glClearBufferiv(gl.funcs, C.GLenum(buffer), C.GLint(drawbuffer), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetTexParameterIuiv.xml -func (gl *GL) GetTexParameterIuiv(target, pname glbase.Enum, params []uint32) { - C.gl3_2compat_glGetTexParameterIuiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetTexParameterIiv.xml -func (gl *GL) GetTexParameterIiv(target, pname glbase.Enum, params []int32) { - C.gl3_2compat_glGetTexParameterIiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexParameterIuiv.xml -func (gl *GL) TexParameterIuiv(target, pname glbase.Enum, params []uint32) { - C.gl3_2compat_glTexParameterIuiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexParameterIiv.xml -func (gl *GL) TexParameterIiv(target, pname glbase.Enum, params []int32) { - C.gl3_2compat_glTexParameterIiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// Uniform4uiv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform4uiv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4uiv(location glbase.Uniform, value []uint32) { - if len(value) == 0 { - return - } - if len(value)%4 != 0 { - panic("invalid value length for Uniform4uiv") - } - count := len(value) / 4 - C.gl3_2compat_glUniform4uiv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// Uniform3uiv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform3uiv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3uiv(location glbase.Uniform, value []uint32) { - if len(value) == 0 { - return - } - if len(value)%3 != 0 { - panic("invalid value length for Uniform3uiv") - } - count := len(value) / 3 - C.gl3_2compat_glUniform3uiv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// Uniform2uiv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform2uiv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2uiv(location glbase.Uniform, value []uint32) { - if len(value) == 0 { - return - } - if len(value)%2 != 0 { - panic("invalid value length for Uniform2uiv") - } - count := len(value) / 2 - C.gl3_2compat_glUniform2uiv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// Uniform1uiv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform1uiv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1uiv(location glbase.Uniform, value []uint32) { - if len(value) == 0 { - return - } - count := len(value) - C.gl3_2compat_glUniform1uiv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// Uniform4ui modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform4ui operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4ui(location glbase.Uniform, v0, v1, v2, v3 uint32) { - C.gl3_2compat_glUniform4ui(gl.funcs, C.GLint(location), C.GLuint(v0), C.GLuint(v1), C.GLuint(v2), C.GLuint(v3)) -} - -// Uniform3ui modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform3ui operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3ui(location glbase.Uniform, v0, v1, v2 uint32) { - C.gl3_2compat_glUniform3ui(gl.funcs, C.GLint(location), C.GLuint(v0), C.GLuint(v1), C.GLuint(v2)) -} - -// Uniform2ui modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform2ui operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2ui(location glbase.Uniform, v0, v1 uint32) { - C.gl3_2compat_glUniform2ui(gl.funcs, C.GLint(location), C.GLuint(v0), C.GLuint(v1)) -} - -// Uniform1ui modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform1ui operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1ui(location glbase.Uniform, v0 uint32) { - C.gl3_2compat_glUniform1ui(gl.funcs, C.GLint(location), C.GLuint(v0)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetFragDataLocation.xml -func (gl *GL) GetFragDataLocation(program glbase.Program, name []byte) int32 { - glresult := C.gl3_2compat_glGetFragDataLocation(gl.funcs, C.GLuint(program), (*C.GLchar)(unsafe.Pointer(&name[0]))) - return int32(glresult) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBindFragDataLocation.xml -func (gl *GL) BindFragDataLocation(program glbase.Program, color uint32, name []byte) { - C.gl3_2compat_glBindFragDataLocation(gl.funcs, C.GLuint(program), C.GLuint(color), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetUniformuiv.xml -func (gl *GL) GetUniformuiv(program glbase.Program, location glbase.Uniform, params []uint32) { - C.gl3_2compat_glGetUniformuiv(gl.funcs, C.GLuint(program), C.GLint(location), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetVertexAttribIuiv.xml -func (gl *GL) GetVertexAttribIuiv(index glbase.Attrib, pname glbase.Enum, params []uint32) { - C.gl3_2compat_glGetVertexAttribIuiv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetVertexAttribIiv.xml -func (gl *GL) GetVertexAttribIiv(index glbase.Attrib, pname glbase.Enum, params []int32) { - C.gl3_2compat_glGetVertexAttribIiv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribIPointer.xml -func (gl *GL) VertexAttribIPointer(index glbase.Attrib, size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl3_2compat_glVertexAttribIPointer(gl.funcs, C.GLuint(index), C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEndConditionalRender.xml -func (gl *GL) EndConditionalRender() { - C.gl3_2compat_glEndConditionalRender(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBeginConditionalRender.xml -func (gl *GL) BeginConditionalRender(id uint32, mode glbase.Enum) { - C.gl3_2compat_glBeginConditionalRender(gl.funcs, C.GLuint(id), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClampColor.xml -func (gl *GL) ClampColor(target, clamp glbase.Enum) { - C.gl3_2compat_glClampColor(gl.funcs, C.GLenum(target), C.GLenum(clamp)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetTransformFeedbackVarying.xml -func (gl *GL) GetTransformFeedbackVarying(program glbase.Program, index uint32, bufSize int32, length []int32, size []int, gltype []glbase.Enum, name []byte) { - C.gl3_2compat_glGetTransformFeedbackVarying(gl.funcs, C.GLuint(program), C.GLuint(index), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLsizei)(unsafe.Pointer(&size[0])), (*C.GLenum)(unsafe.Pointer(&gltype[0])), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBindBufferBase.xml -func (gl *GL) BindBufferBase(target glbase.Enum, index uint32, buffer glbase.Buffer) { - C.gl3_2compat_glBindBufferBase(gl.funcs, C.GLenum(target), C.GLuint(index), C.GLuint(buffer)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBindBufferRange.xml -func (gl *GL) BindBufferRange(target glbase.Enum, index uint32, buffer glbase.Buffer, offset, size int) { - C.gl3_2compat_glBindBufferRange(gl.funcs, C.GLenum(target), C.GLuint(index), C.GLuint(buffer), C.GLintptr(offset), C.GLsizeiptr(size)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEndTransformFeedback.xml -func (gl *GL) EndTransformFeedback() { - C.gl3_2compat_glEndTransformFeedback(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBeginTransformFeedback.xml -func (gl *GL) BeginTransformFeedback(primitiveMode glbase.Enum) { - C.gl3_2compat_glBeginTransformFeedback(gl.funcs, C.GLenum(primitiveMode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsEnabledi.xml -func (gl *GL) IsEnabledi(target glbase.Enum, index uint32) bool { - glresult := C.gl3_2compat_glIsEnabledi(gl.funcs, C.GLenum(target), C.GLuint(index)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDisablei.xml -func (gl *GL) Disablei(target glbase.Enum, index uint32) { - C.gl3_2compat_glDisablei(gl.funcs, C.GLenum(target), C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEnablei.xml -func (gl *GL) Enablei(target glbase.Enum, index uint32) { - C.gl3_2compat_glEnablei(gl.funcs, C.GLenum(target), C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetIntegeri_v.xml -func (gl *GL) GetIntegeri_v(target glbase.Enum, index uint32, data []int32) { - C.gl3_2compat_glGetIntegeri_v(gl.funcs, C.GLenum(target), C.GLuint(index), (*C.GLint)(unsafe.Pointer(&data[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetBooleani_v.xml -func (gl *GL) GetBooleani_v(target glbase.Enum, index uint32, data []bool) { - C.gl3_2compat_glGetBooleani_v(gl.funcs, C.GLenum(target), C.GLuint(index), (*C.GLboolean)(unsafe.Pointer(&data[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColorMaski.xml -func (gl *GL) ColorMaski(index uint32, r, g, b, a bool) { - C.gl3_2compat_glColorMaski(gl.funcs, C.GLuint(index), *(*C.GLboolean)(unsafe.Pointer(&r)), *(*C.GLboolean)(unsafe.Pointer(&g)), *(*C.GLboolean)(unsafe.Pointer(&b)), *(*C.GLboolean)(unsafe.Pointer(&a))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCopyBufferSubData.xml -func (gl *GL) CopyBufferSubData(readTarget, writeTarget glbase.Enum, readOffset, writeOffset, size int) { - C.gl3_2compat_glCopyBufferSubData(gl.funcs, C.GLenum(readTarget), C.GLenum(writeTarget), C.GLintptr(readOffset), C.GLintptr(writeOffset), C.GLsizeiptr(size)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glUniformBlockBinding.xml -func (gl *GL) UniformBlockBinding(program glbase.Program, v0, v1 uint32) { - C.gl3_2compat_glUniformBlockBinding(gl.funcs, C.GLuint(program), C.GLuint(v0), C.GLuint(v1)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetActiveUniformBlockName.xml -func (gl *GL) GetActiveUniformBlockName(program glbase.Program, uniformBlockIndex uint32, bufSize int32, length []int32, uniformBlockName []byte) { - C.gl3_2compat_glGetActiveUniformBlockName(gl.funcs, C.GLuint(program), C.GLuint(uniformBlockIndex), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLchar)(unsafe.Pointer(&uniformBlockName[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetActiveUniformBlockiv.xml -func (gl *GL) GetActiveUniformBlockiv(program glbase.Program, uniformBlockIndex uint32, pname glbase.Enum, params []int32) { - C.gl3_2compat_glGetActiveUniformBlockiv(gl.funcs, C.GLuint(program), C.GLuint(uniformBlockIndex), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetUniformBlockIndex.xml -func (gl *GL) GetUniformBlockIndex(program glbase.Program, uniformBlockName []byte) uint32 { - glresult := C.gl3_2compat_glGetUniformBlockIndex(gl.funcs, C.GLuint(program), (*C.GLchar)(unsafe.Pointer(&uniformBlockName[0]))) - return uint32(glresult) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetActiveUniformName.xml -func (gl *GL) GetActiveUniformName(program glbase.Program, uniformIndex uint32, bufSize int32, length []int32, uniformName []byte) { - C.gl3_2compat_glGetActiveUniformName(gl.funcs, C.GLuint(program), C.GLuint(uniformIndex), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLchar)(unsafe.Pointer(&uniformName[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetActiveUniformsiv.xml -func (gl *GL) GetActiveUniformsiv(program glbase.Program, uniformCount int32, uniformIndices []uint32, pname glbase.Enum, params []int32) { - C.gl3_2compat_glGetActiveUniformsiv(gl.funcs, C.GLuint(program), C.GLsizei(uniformCount), (*C.GLuint)(unsafe.Pointer(&uniformIndices[0])), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPrimitiveRestartIndex.xml -func (gl *GL) PrimitiveRestartIndex(index uint32) { - C.gl3_2compat_glPrimitiveRestartIndex(gl.funcs, C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexBuffer.xml -func (gl *GL) TexBuffer(target, internalFormat glbase.Enum, buffer glbase.Buffer) { - C.gl3_2compat_glTexBuffer(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLuint(buffer)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDrawElementsInstanced.xml -func (gl *GL) DrawElementsInstanced(mode glbase.Enum, count int, gltype glbase.Enum, indices interface{}, instancecount int32) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl3_2compat_glDrawElementsInstanced(gl.funcs, C.GLenum(mode), C.GLsizei(count), C.GLenum(gltype), indices_ptr, C.GLsizei(instancecount)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDrawArraysInstanced.xml -func (gl *GL) DrawArraysInstanced(mode glbase.Enum, first, count int, instancecount int32) { - C.gl3_2compat_glDrawArraysInstanced(gl.funcs, C.GLenum(mode), C.GLint(first), C.GLsizei(count), C.GLsizei(instancecount)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSampleMaski.xml -func (gl *GL) SampleMaski(index uint32, mask glbase.Bitfield) { - C.gl3_2compat_glSampleMaski(gl.funcs, C.GLuint(index), C.GLbitfield(mask)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetMultisamplefv.xml -func (gl *GL) GetMultisamplefv(pname glbase.Enum, index uint32, val []float32) { - C.gl3_2compat_glGetMultisamplefv(gl.funcs, C.GLenum(pname), C.GLuint(index), (*C.GLfloat)(unsafe.Pointer(&val[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexImage3DMultisample.xml -func (gl *GL) TexImage3DMultisample(target glbase.Enum, samples, internalFormat int32, width, height int, depth int32, fixedsamplelocations bool) { - C.gl3_2compat_glTexImage3DMultisample(gl.funcs, C.GLenum(target), C.GLsizei(samples), C.GLint(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), *(*C.GLboolean)(unsafe.Pointer(&fixedsamplelocations))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexImage2DMultisample.xml -func (gl *GL) TexImage2DMultisample(target glbase.Enum, samples, internalFormat int32, width, height int, fixedsamplelocations bool) { - C.gl3_2compat_glTexImage2DMultisample(gl.funcs, C.GLenum(target), C.GLsizei(samples), C.GLint(internalFormat), C.GLsizei(width), C.GLsizei(height), *(*C.GLboolean)(unsafe.Pointer(&fixedsamplelocations))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetSynciv.xml -func (gl *GL) GetSynciv(sync glbase.Sync, pname glbase.Enum, bufSize int32, length, values []int32) { - C.gl3_2compat_glGetSynciv(gl.funcs, C.GLsync(unsafe.Pointer(sync)), C.GLenum(pname), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLint)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetInteger64v.xml -func (gl *GL) GetInteger64v(pname glbase.Enum, params []int64) { - C.gl3_2compat_glGetInteger64v(gl.funcs, C.GLenum(pname), (*C.GLint64)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glWaitSync.xml -func (gl *GL) WaitSync(sync glbase.Sync, flags glbase.Bitfield, timeout uint64) { - C.gl3_2compat_glWaitSync(gl.funcs, C.GLsync(unsafe.Pointer(sync)), C.GLbitfield(flags), C.GLuint64(timeout)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClientWaitSync.xml -func (gl *GL) ClientWaitSync(sync glbase.Sync, flags glbase.Bitfield, timeout uint64) glbase.Enum { - glresult := C.gl3_2compat_glClientWaitSync(gl.funcs, C.GLsync(unsafe.Pointer(sync)), C.GLbitfield(flags), C.GLuint64(timeout)) - return glbase.Enum(glresult) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDeleteSync.xml -func (gl *GL) DeleteSync(sync glbase.Sync) { - C.gl3_2compat_glDeleteSync(gl.funcs, C.GLsync(unsafe.Pointer(sync))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsSync.xml -func (gl *GL) IsSync(sync glbase.Sync) bool { - glresult := C.gl3_2compat_glIsSync(gl.funcs, C.GLsync(unsafe.Pointer(sync))) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFenceSync.xml -func (gl *GL) FenceSync(condition glbase.Enum, flags glbase.Bitfield) glbase.Sync { - glresult := C.gl3_2compat_glFenceSync(gl.funcs, C.GLenum(condition), C.GLbitfield(flags)) - return glbase.Sync(unsafe.Pointer(glresult)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glProvokingVertex.xml -func (gl *GL) ProvokingVertex(mode glbase.Enum) { - C.gl3_2compat_glProvokingVertex(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDrawElementsInstancedBaseVertex.xml -func (gl *GL) DrawElementsInstancedBaseVertex(mode glbase.Enum, count int, gltype glbase.Enum, indices interface{}, instancecount, basevertex int32) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl3_2compat_glDrawElementsInstancedBaseVertex(gl.funcs, C.GLenum(mode), C.GLsizei(count), C.GLenum(gltype), indices_ptr, C.GLsizei(instancecount), C.GLint(basevertex)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDrawRangeElementsBaseVertex.xml -func (gl *GL) DrawRangeElementsBaseVertex(mode glbase.Enum, start, end uint32, count int, gltype glbase.Enum, indices interface{}, basevertex int32) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl3_2compat_glDrawRangeElementsBaseVertex(gl.funcs, C.GLenum(mode), C.GLuint(start), C.GLuint(end), C.GLsizei(count), C.GLenum(gltype), indices_ptr, C.GLint(basevertex)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDrawElementsBaseVertex.xml -func (gl *GL) DrawElementsBaseVertex(mode glbase.Enum, count int, gltype glbase.Enum, indices interface{}, basevertex int32) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl3_2compat_glDrawElementsBaseVertex(gl.funcs, C.GLenum(mode), C.GLsizei(count), C.GLenum(gltype), indices_ptr, C.GLint(basevertex)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFramebufferTexture.xml -func (gl *GL) FramebufferTexture(target, attachment glbase.Enum, texture glbase.Texture, level int) { - C.gl3_2compat_glFramebufferTexture(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLuint(texture), C.GLint(level)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetBufferParameteri64v.xml -func (gl *GL) GetBufferParameteri64v(target, pname glbase.Enum, params []int64) { - C.gl3_2compat_glGetBufferParameteri64v(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint64)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetInteger64i_v.xml -func (gl *GL) GetInteger64i_v(target glbase.Enum, index uint32, data []int64) { - C.gl3_2compat_glGetInteger64i_v(gl.funcs, C.GLenum(target), C.GLuint(index), (*C.GLint64)(unsafe.Pointer(&data[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTranslatef.xml -func (gl *GL) Translatef(x, y, z float32) { - C.gl3_2compat_glTranslatef(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTranslated.xml -func (gl *GL) Translated(x, y, z float64) { - C.gl3_2compat_glTranslated(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glScalef.xml -func (gl *GL) Scalef(x, y, z float32) { - C.gl3_2compat_glScalef(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glScaled.xml -func (gl *GL) Scaled(x, y, z float64) { - C.gl3_2compat_glScaled(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRotatef.xml -func (gl *GL) Rotatef(angle, x, y, z float32) { - C.gl3_2compat_glRotatef(gl.funcs, C.GLfloat(angle), C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRotated.xml -func (gl *GL) Rotated(angle, x, y, z float64) { - C.gl3_2compat_glRotated(gl.funcs, C.GLdouble(angle), C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPushMatrix.xml -func (gl *GL) PushMatrix() { - C.gl3_2compat_glPushMatrix(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPopMatrix.xml -func (gl *GL) PopMatrix() { - C.gl3_2compat_glPopMatrix(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glOrtho.xml -func (gl *GL) Ortho(left, right, bottom, top, zNear, zFar float64) { - C.gl3_2compat_glOrtho(gl.funcs, C.GLdouble(left), C.GLdouble(right), C.GLdouble(bottom), C.GLdouble(top), C.GLdouble(zNear), C.GLdouble(zFar)) -} - -// MultMatrixd multiplies the current matrix with the provided matrix. -// -// The m parameter must hold 16 consecutive elements of a 4x4 column-major matrix. -// -// The current matrix is determined by the current matrix mode (see -// MatrixMode). It is either the projection matrix, modelview matrix, or the -// texture matrix. -// -// For example, if the current matrix is C and the coordinates to be transformed -// are v = (v[0], v[1], v[2], v[3]), then the current transformation is C × v, or -// -// c[0] c[4] c[8] c[12] v[0] -// c[1] c[5] c[9] c[13] v[1] -// c[2] c[6] c[10] c[14] X v[2] -// c[3] c[7] c[11] c[15] v[3] -// -// Calling MultMatrix with an argument of m = m[0], m[1], ..., m[15] -// replaces the current transformation with (C X M) x v, or -// -// c[0] c[4] c[8] c[12] m[0] m[4] m[8] m[12] v[0] -// c[1] c[5] c[9] c[13] m[1] m[5] m[9] m[13] v[1] -// c[2] c[6] c[10] c[14] X m[2] m[6] m[10] m[14] X v[2] -// c[3] c[7] c[11] c[15] m[3] m[7] m[11] m[15] v[3] -// -// Where 'X' denotes matrix multiplication, and v is represented as a 4x1 matrix. -// -// While the elements of the matrix may be specified with single or double -// precision, the GL may store or operate on these values in less-than-single -// precision. -// -// In many computer languages, 4×4 arrays are represented in row-major -// order. The transformations just described represent these matrices in -// column-major order. The order of the multiplication is important. For -// example, if the current transformation is a rotation, and MultMatrix is -// called with a translation matrix, the translation is done directly on the -// coordinates to be transformed, while the rotation is done on the results -// of that translation. -// -// GL.INVALID_OPERATION is generated if MultMatrix is executed between the -// execution of Begin and the corresponding execution of End. -func (gl *GL) MultMatrixd(m []float64) { - if len(m) != 16 { - panic("parameter m must have length 16 for the 4x4 matrix") - } - C.gl3_2compat_glMultMatrixd(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&m[0]))) -} - -// MultMatrixf multiplies the current matrix with the provided matrix. -// -// The m parameter must hold 16 consecutive elements of a 4x4 column-major matrix. -// -// The current matrix is determined by the current matrix mode (see -// MatrixMode). It is either the projection matrix, modelview matrix, or the -// texture matrix. -// -// For example, if the current matrix is C and the coordinates to be transformed -// are v = (v[0], v[1], v[2], v[3]), then the current transformation is C × v, or -// -// c[0] c[4] c[8] c[12] v[0] -// c[1] c[5] c[9] c[13] v[1] -// c[2] c[6] c[10] c[14] X v[2] -// c[3] c[7] c[11] c[15] v[3] -// -// Calling MultMatrix with an argument of m = m[0], m[1], ..., m[15] -// replaces the current transformation with (C X M) x v, or -// -// c[0] c[4] c[8] c[12] m[0] m[4] m[8] m[12] v[0] -// c[1] c[5] c[9] c[13] m[1] m[5] m[9] m[13] v[1] -// c[2] c[6] c[10] c[14] X m[2] m[6] m[10] m[14] X v[2] -// c[3] c[7] c[11] c[15] m[3] m[7] m[11] m[15] v[3] -// -// Where 'X' denotes matrix multiplication, and v is represented as a 4x1 matrix. -// -// While the elements of the matrix may be specified with single or double -// precision, the GL may store or operate on these values in less-than-single -// precision. -// -// In many computer languages, 4×4 arrays are represented in row-major -// order. The transformations just described represent these matrices in -// column-major order. The order of the multiplication is important. For -// example, if the current transformation is a rotation, and MultMatrix is -// called with a translation matrix, the translation is done directly on the -// coordinates to be transformed, while the rotation is done on the results -// of that translation. -// -// GL.INVALID_OPERATION is generated if MultMatrix is executed between the -// execution of Begin and the corresponding execution of End. -func (gl *GL) MultMatrixf(m []float32) { - if len(m) != 16 { - panic("parameter m must have length 16 for the 4x4 matrix") - } - C.gl3_2compat_glMultMatrixf(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMatrixMode.xml -func (gl *GL) MatrixMode(mode glbase.Enum) { - C.gl3_2compat_glMatrixMode(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glLoadMatrixd.xml -func (gl *GL) LoadMatrixd(m []float64) { - C.gl3_2compat_glLoadMatrixd(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glLoadMatrixf.xml -func (gl *GL) LoadMatrixf(m []float32) { - C.gl3_2compat_glLoadMatrixf(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glLoadIdentity.xml -func (gl *GL) LoadIdentity() { - C.gl3_2compat_glLoadIdentity(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFrustum.xml -func (gl *GL) Frustum(left, right, bottom, top, zNear, zFar float64) { - C.gl3_2compat_glFrustum(gl.funcs, C.GLdouble(left), C.GLdouble(right), C.GLdouble(bottom), C.GLdouble(top), C.GLdouble(zNear), C.GLdouble(zFar)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsList.xml -func (gl *GL) IsList(list uint32) bool { - glresult := C.gl3_2compat_glIsList(gl.funcs, C.GLuint(list)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetTexGeniv.xml -func (gl *GL) GetTexGeniv(coord, pname glbase.Enum, params []int32) { - C.gl3_2compat_glGetTexGeniv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetTexGenfv.xml -func (gl *GL) GetTexGenfv(coord, pname glbase.Enum, params []float32) { - C.gl3_2compat_glGetTexGenfv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetTexGendv.xml -func (gl *GL) GetTexGendv(coord, pname glbase.Enum, params []float64) { - C.gl3_2compat_glGetTexGendv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetTexEnviv.xml -func (gl *GL) GetTexEnviv(target, pname glbase.Enum, params []int32) { - C.gl3_2compat_glGetTexEnviv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetTexEnvfv.xml -func (gl *GL) GetTexEnvfv(target, pname glbase.Enum, params []float32) { - C.gl3_2compat_glGetTexEnvfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetPolygonStipple.xml -func (gl *GL) GetPolygonStipple(mask []uint8) { - C.gl3_2compat_glGetPolygonStipple(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&mask[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetPixelMapusv.xml -func (gl *GL) GetPixelMapusv(glmap glbase.Enum, values []uint16) { - C.gl3_2compat_glGetPixelMapusv(gl.funcs, C.GLenum(glmap), (*C.GLushort)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetPixelMapuiv.xml -func (gl *GL) GetPixelMapuiv(glmap glbase.Enum, values []uint32) { - C.gl3_2compat_glGetPixelMapuiv(gl.funcs, C.GLenum(glmap), (*C.GLuint)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetPixelMapfv.xml -func (gl *GL) GetPixelMapfv(glmap glbase.Enum, values []float32) { - C.gl3_2compat_glGetPixelMapfv(gl.funcs, C.GLenum(glmap), (*C.GLfloat)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetMaterialiv.xml -func (gl *GL) GetMaterialiv(face, pname glbase.Enum, params []int32) { - C.gl3_2compat_glGetMaterialiv(gl.funcs, C.GLenum(face), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetMaterialfv.xml -func (gl *GL) GetMaterialfv(face, pname glbase.Enum, params []float32) { - C.gl3_2compat_glGetMaterialfv(gl.funcs, C.GLenum(face), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetMapiv.xml -func (gl *GL) GetMapiv(target, query glbase.Enum, v []int32) { - C.gl3_2compat_glGetMapiv(gl.funcs, C.GLenum(target), C.GLenum(query), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetMapfv.xml -func (gl *GL) GetMapfv(target, query glbase.Enum, v []float32) { - C.gl3_2compat_glGetMapfv(gl.funcs, C.GLenum(target), C.GLenum(query), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetMapdv.xml -func (gl *GL) GetMapdv(target, query glbase.Enum, v []float64) { - C.gl3_2compat_glGetMapdv(gl.funcs, C.GLenum(target), C.GLenum(query), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetLightiv.xml -func (gl *GL) GetLightiv(light, pname glbase.Enum, params []int32) { - C.gl3_2compat_glGetLightiv(gl.funcs, C.GLenum(light), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetLightfv.xml -func (gl *GL) GetLightfv(light, pname glbase.Enum, params []float32) { - C.gl3_2compat_glGetLightfv(gl.funcs, C.GLenum(light), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetClipPlane.xml -func (gl *GL) GetClipPlane(plane glbase.Enum, equation []float64) { - C.gl3_2compat_glGetClipPlane(gl.funcs, C.GLenum(plane), (*C.GLdouble)(unsafe.Pointer(&equation[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDrawPixels.xml -func (gl *GL) DrawPixels(width, height int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl3_2compat_glDrawPixels(gl.funcs, C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCopyPixels.xml -func (gl *GL) CopyPixels(x, y, width, height int, gltype glbase.Enum) { - C.gl3_2compat_glCopyPixels(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height), C.GLenum(gltype)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPixelMapusv.xml -func (gl *GL) PixelMapusv(glmap glbase.Enum, mapsize int32, values []uint16) { - C.gl3_2compat_glPixelMapusv(gl.funcs, C.GLenum(glmap), C.GLint(mapsize), (*C.GLushort)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPixelMapuiv.xml -func (gl *GL) PixelMapuiv(glmap glbase.Enum, mapsize int32, values []uint32) { - C.gl3_2compat_glPixelMapuiv(gl.funcs, C.GLenum(glmap), C.GLint(mapsize), (*C.GLuint)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPixelMapfv.xml -func (gl *GL) PixelMapfv(glmap glbase.Enum, mapsize int32, values []float32) { - C.gl3_2compat_glPixelMapfv(gl.funcs, C.GLenum(glmap), C.GLint(mapsize), (*C.GLfloat)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPixelTransferi.xml -func (gl *GL) PixelTransferi(pname glbase.Enum, param int32) { - C.gl3_2compat_glPixelTransferi(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPixelTransferf.xml -func (gl *GL) PixelTransferf(pname glbase.Enum, param float32) { - C.gl3_2compat_glPixelTransferf(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPixelZoom.xml -func (gl *GL) PixelZoom(xfactor, yfactor float32) { - C.gl3_2compat_glPixelZoom(gl.funcs, C.GLfloat(xfactor), C.GLfloat(yfactor)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glAlphaFunc.xml -func (gl *GL) AlphaFunc(glfunc glbase.Enum, ref float32) { - C.gl3_2compat_glAlphaFunc(gl.funcs, C.GLenum(glfunc), C.GLfloat(ref)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEvalPoint2.xml -func (gl *GL) EvalPoint2(i, j int32) { - C.gl3_2compat_glEvalPoint2(gl.funcs, C.GLint(i), C.GLint(j)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEvalMesh2.xml -func (gl *GL) EvalMesh2(mode glbase.Enum, i1, i2, j1, j2 int32) { - C.gl3_2compat_glEvalMesh2(gl.funcs, C.GLenum(mode), C.GLint(i1), C.GLint(i2), C.GLint(j1), C.GLint(j2)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEvalPoint1.xml -func (gl *GL) EvalPoint1(i int32) { - C.gl3_2compat_glEvalPoint1(gl.funcs, C.GLint(i)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEvalMesh1.xml -func (gl *GL) EvalMesh1(mode glbase.Enum, i1, i2 int32) { - C.gl3_2compat_glEvalMesh1(gl.funcs, C.GLenum(mode), C.GLint(i1), C.GLint(i2)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEvalCoord2fv.xml -func (gl *GL) EvalCoord2fv(u []float32) { - if len(u) != 2 { - panic("parameter u has incorrect length") - } - C.gl3_2compat_glEvalCoord2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&u[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEvalCoord2f.xml -func (gl *GL) EvalCoord2f(u, v float32) { - C.gl3_2compat_glEvalCoord2f(gl.funcs, C.GLfloat(u), C.GLfloat(v)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEvalCoord2dv.xml -func (gl *GL) EvalCoord2dv(u []float64) { - if len(u) != 2 { - panic("parameter u has incorrect length") - } - C.gl3_2compat_glEvalCoord2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&u[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEvalCoord2d.xml -func (gl *GL) EvalCoord2d(u, v float64) { - C.gl3_2compat_glEvalCoord2d(gl.funcs, C.GLdouble(u), C.GLdouble(v)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEvalCoord1fv.xml -func (gl *GL) EvalCoord1fv(u []float32) { - C.gl3_2compat_glEvalCoord1fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&u[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEvalCoord1f.xml -func (gl *GL) EvalCoord1f(u float32) { - C.gl3_2compat_glEvalCoord1f(gl.funcs, C.GLfloat(u)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEvalCoord1dv.xml -func (gl *GL) EvalCoord1dv(u []float64) { - C.gl3_2compat_glEvalCoord1dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&u[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEvalCoord1d.xml -func (gl *GL) EvalCoord1d(u float64) { - C.gl3_2compat_glEvalCoord1d(gl.funcs, C.GLdouble(u)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMapGrid2f.xml -func (gl *GL) MapGrid2f(un int32, u1, u2 float32, vn int32, v1, v2 float32) { - C.gl3_2compat_glMapGrid2f(gl.funcs, C.GLint(un), C.GLfloat(u1), C.GLfloat(u2), C.GLint(vn), C.GLfloat(v1), C.GLfloat(v2)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMapGrid2d.xml -func (gl *GL) MapGrid2d(un int32, u1, u2 float64, vn int32, v1, v2 float64) { - C.gl3_2compat_glMapGrid2d(gl.funcs, C.GLint(un), C.GLdouble(u1), C.GLdouble(u2), C.GLint(vn), C.GLdouble(v1), C.GLdouble(v2)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMapGrid1f.xml -func (gl *GL) MapGrid1f(un int32, u1, u2 float32) { - C.gl3_2compat_glMapGrid1f(gl.funcs, C.GLint(un), C.GLfloat(u1), C.GLfloat(u2)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMapGrid1d.xml -func (gl *GL) MapGrid1d(un int32, u1, u2 float64) { - C.gl3_2compat_glMapGrid1d(gl.funcs, C.GLint(un), C.GLdouble(u1), C.GLdouble(u2)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMap2f.xml -func (gl *GL) Map2f(target glbase.Enum, u1, u2 float32, ustride, uorder int32, v1, v2 float32, vstride, vorder int32, points []float32) { - C.gl3_2compat_glMap2f(gl.funcs, C.GLenum(target), C.GLfloat(u1), C.GLfloat(u2), C.GLint(ustride), C.GLint(uorder), C.GLfloat(v1), C.GLfloat(v2), C.GLint(vstride), C.GLint(vorder), (*C.GLfloat)(unsafe.Pointer(&points[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMap2d.xml -func (gl *GL) Map2d(target glbase.Enum, u1, u2 float64, ustride, uorder int32, v1, v2 float64, vstride, vorder int32, points []float64) { - C.gl3_2compat_glMap2d(gl.funcs, C.GLenum(target), C.GLdouble(u1), C.GLdouble(u2), C.GLint(ustride), C.GLint(uorder), C.GLdouble(v1), C.GLdouble(v2), C.GLint(vstride), C.GLint(vorder), (*C.GLdouble)(unsafe.Pointer(&points[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMap1f.xml -func (gl *GL) Map1f(target glbase.Enum, u1, u2 float32, stride, order int, points []float32) { - C.gl3_2compat_glMap1f(gl.funcs, C.GLenum(target), C.GLfloat(u1), C.GLfloat(u2), C.GLint(stride), C.GLint(order), (*C.GLfloat)(unsafe.Pointer(&points[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMap1d.xml -func (gl *GL) Map1d(target glbase.Enum, u1, u2 float64, stride, order int, points []float64) { - C.gl3_2compat_glMap1d(gl.funcs, C.GLenum(target), C.GLdouble(u1), C.GLdouble(u2), C.GLint(stride), C.GLint(order), (*C.GLdouble)(unsafe.Pointer(&points[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPushAttrib.xml -func (gl *GL) PushAttrib(mask glbase.Bitfield) { - C.gl3_2compat_glPushAttrib(gl.funcs, C.GLbitfield(mask)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPopAttrib.xml -func (gl *GL) PopAttrib() { - C.gl3_2compat_glPopAttrib(gl.funcs) -} - -// Accum executes an operation on the accumulation buffer. -// -// Parameter op defines the accumulation buffer operation (GL.ACCUM, GL.LOAD, -// GL.ADD, GL.MULT, or GL.RETURN) and specifies how the value parameter is -// used. -// -// The accumulation buffer is an extended-range color buffer. Images are not -// rendered into it. Rather, images rendered into one of the color buffers -// are added to the contents of the accumulation buffer after rendering. -// Effects such as antialiasing (of points, lines, and polygons), motion -// blur, and depth of field can be created by accumulating images generated -// with different transformation matrices. -// -// Each pixel in the accumulation buffer consists of red, green, blue, and -// alpha values. The number of bits per component in the accumulation buffer -// depends on the implementation. You can examine this number by calling -// GetIntegerv four times, with arguments GL.ACCUM_RED_BITS, -// GL.ACCUM_GREEN_BITS, GL.ACCUM_BLUE_BITS, and GL.ACCUM_ALPHA_BITS. -// Regardless of the number of bits per component, the range of values stored -// by each component is (-1, 1). The accumulation buffer pixels are mapped -// one-to-one with frame buffer pixels. -// -// All accumulation buffer operations are limited to the area of the current -// scissor box and applied identically to the red, green, blue, and alpha -// components of each pixel. If a Accum operation results in a value outside -// the range (-1, 1), the contents of an accumulation buffer pixel component -// are undefined. -// -// The operations are as follows: -// -// GL.ACCUM -// Obtains R, G, B, and A values from the buffer currently selected for -// reading (see ReadBuffer). Each component value is divided by 2 n - -// 1 , where n is the number of bits allocated to each color component -// in the currently selected buffer. The result is a floating-point -// value in the range 0 1 , which is multiplied by value and added to -// the corresponding pixel component in the accumulation buffer, -// thereby updating the accumulation buffer. -// -// GL.LOAD -// Similar to GL.ACCUM, except that the current value in the -// accumulation buffer is not used in the calculation of the new value. -// That is, the R, G, B, and A values from the currently selected -// buffer are divided by 2 n - 1 , multiplied by value, and then stored -// in the corresponding accumulation buffer cell, overwriting the -// current value. -// -// GL.ADD -// Adds value to each R, G, B, and A in the accumulation buffer. -// -// GL.MULT -// Multiplies each R, G, B, and A in the accumulation buffer by value -// and returns the scaled component to its corresponding accumulation -// buffer location. -// -// GL.RETURN -// Transfers accumulation buffer values to the color buffer or buffers -// currently selected for writing. Each R, G, B, and A component is -// multiplied by value, then multiplied by 2 n - 1 , clamped to the -// range 0 2 n - 1 , and stored in the corresponding display buffer -// cell. The only fragment operations that are applied to this transfer -// are pixel ownership, scissor, dithering, and color writemasks. -// -// To clear the accumulation buffer, call ClearAccum with R, G, B, and A -// values to set it to, then call Clear with the accumulation buffer -// enabled. -// -// Error GL.INVALID_ENUM is generated if op is not an accepted value. -// GL.INVALID_OPERATION is generated if there is no accumulation buffer. -// GL.INVALID_OPERATION is generated if Accum is executed between the -// execution of Begin and the corresponding execution of End. -func (gl *GL) Accum(op glbase.Enum, value float32) { - C.gl3_2compat_glAccum(gl.funcs, C.GLenum(op), C.GLfloat(value)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIndexMask.xml -func (gl *GL) IndexMask(mask uint32) { - C.gl3_2compat_glIndexMask(gl.funcs, C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClearIndex.xml -func (gl *GL) ClearIndex(c float32) { - C.gl3_2compat_glClearIndex(gl.funcs, C.GLfloat(c)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClearAccum.xml -func (gl *GL) ClearAccum(red, green, blue, alpha float32) { - C.gl3_2compat_glClearAccum(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPushName.xml -func (gl *GL) PushName(name uint32) { - C.gl3_2compat_glPushName(gl.funcs, C.GLuint(name)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPopName.xml -func (gl *GL) PopName() { - C.gl3_2compat_glPopName(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPassThrough.xml -func (gl *GL) PassThrough(token float32) { - C.gl3_2compat_glPassThrough(gl.funcs, C.GLfloat(token)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glLoadName.xml -func (gl *GL) LoadName(name uint32) { - C.gl3_2compat_glLoadName(gl.funcs, C.GLuint(name)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glInitNames.xml -func (gl *GL) InitNames() { - C.gl3_2compat_glInitNames(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRenderMode.xml -func (gl *GL) RenderMode(mode glbase.Enum) int32 { - glresult := C.gl3_2compat_glRenderMode(gl.funcs, C.GLenum(mode)) - return int32(glresult) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSelectBuffer.xml -func (gl *GL) SelectBuffer(size int, buffer []glbase.Buffer) { - C.gl3_2compat_glSelectBuffer(gl.funcs, C.GLsizei(size), (*C.GLuint)(unsafe.Pointer(&buffer[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFeedbackBuffer.xml -func (gl *GL) FeedbackBuffer(size int, gltype glbase.Enum, buffer []float32) { - C.gl3_2compat_glFeedbackBuffer(gl.funcs, C.GLsizei(size), C.GLenum(gltype), (*C.GLfloat)(unsafe.Pointer(&buffer[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexGeniv.xml -func (gl *GL) TexGeniv(coord, pname glbase.Enum, params []int32) { - C.gl3_2compat_glTexGeniv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexGeni.xml -func (gl *GL) TexGeni(coord, pname glbase.Enum, param int32) { - C.gl3_2compat_glTexGeni(gl.funcs, C.GLenum(coord), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexGenfv.xml -func (gl *GL) TexGenfv(coord, pname glbase.Enum, params []float32) { - C.gl3_2compat_glTexGenfv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexGenf.xml -func (gl *GL) TexGenf(coord, pname glbase.Enum, param float32) { - C.gl3_2compat_glTexGenf(gl.funcs, C.GLenum(coord), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexGendv.xml -func (gl *GL) TexGendv(coord, pname glbase.Enum, params []float64) { - C.gl3_2compat_glTexGendv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexGend.xml -func (gl *GL) TexGend(coord, pname glbase.Enum, param float64) { - C.gl3_2compat_glTexGend(gl.funcs, C.GLenum(coord), C.GLenum(pname), C.GLdouble(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexEnviv.xml -func (gl *GL) TexEnviv(target, pname glbase.Enum, params []int32) { - C.gl3_2compat_glTexEnviv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexEnvi.xml -func (gl *GL) TexEnvi(target, pname glbase.Enum, param int32) { - C.gl3_2compat_glTexEnvi(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexEnvfv.xml -func (gl *GL) TexEnvfv(target, pname glbase.Enum, params []float32) { - C.gl3_2compat_glTexEnvfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexEnvf.xml -func (gl *GL) TexEnvf(target, pname glbase.Enum, param float32) { - C.gl3_2compat_glTexEnvf(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glShadeModel.xml -func (gl *GL) ShadeModel(mode glbase.Enum) { - C.gl3_2compat_glShadeModel(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPolygonStipple.xml -func (gl *GL) PolygonStipple(mask []uint8) { - C.gl3_2compat_glPolygonStipple(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&mask[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMaterialiv.xml -func (gl *GL) Materialiv(face, pname glbase.Enum, params []int32) { - C.gl3_2compat_glMaterialiv(gl.funcs, C.GLenum(face), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMateriali.xml -func (gl *GL) Materiali(face, pname glbase.Enum, param int32) { - C.gl3_2compat_glMateriali(gl.funcs, C.GLenum(face), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMaterialfv.xml -func (gl *GL) Materialfv(face, pname glbase.Enum, params []float32) { - C.gl3_2compat_glMaterialfv(gl.funcs, C.GLenum(face), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMaterialf.xml -func (gl *GL) Materialf(face, pname glbase.Enum, param float32) { - C.gl3_2compat_glMaterialf(gl.funcs, C.GLenum(face), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glLineStipple.xml -func (gl *GL) LineStipple(factor int32, pattern uint16) { - C.gl3_2compat_glLineStipple(gl.funcs, C.GLint(factor), C.GLushort(pattern)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glLightModeliv.xml -func (gl *GL) LightModeliv(pname glbase.Enum, params []int32) { - C.gl3_2compat_glLightModeliv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glLightModeli.xml -func (gl *GL) LightModeli(pname glbase.Enum, param int32) { - C.gl3_2compat_glLightModeli(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glLightModelfv.xml -func (gl *GL) LightModelfv(pname glbase.Enum, params []float32) { - C.gl3_2compat_glLightModelfv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glLightModelf.xml -func (gl *GL) LightModelf(pname glbase.Enum, param float32) { - C.gl3_2compat_glLightModelf(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glLightiv.xml -func (gl *GL) Lightiv(light, pname glbase.Enum, params []int32) { - C.gl3_2compat_glLightiv(gl.funcs, C.GLenum(light), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glLighti.xml -func (gl *GL) Lighti(light, pname glbase.Enum, param int32) { - C.gl3_2compat_glLighti(gl.funcs, C.GLenum(light), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glLightfv.xml -func (gl *GL) Lightfv(light, pname glbase.Enum, params []float32) { - C.gl3_2compat_glLightfv(gl.funcs, C.GLenum(light), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glLightf.xml -func (gl *GL) Lightf(light, pname glbase.Enum, param float32) { - C.gl3_2compat_glLightf(gl.funcs, C.GLenum(light), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFogiv.xml -func (gl *GL) Fogiv(pname glbase.Enum, params []int32) { - C.gl3_2compat_glFogiv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFogi.xml -func (gl *GL) Fogi(pname glbase.Enum, param int32) { - C.gl3_2compat_glFogi(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFogfv.xml -func (gl *GL) Fogfv(pname glbase.Enum, params []float32) { - C.gl3_2compat_glFogfv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFogf.xml -func (gl *GL) Fogf(pname glbase.Enum, param float32) { - C.gl3_2compat_glFogf(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColorMaterial.xml -func (gl *GL) ColorMaterial(face, mode glbase.Enum) { - C.gl3_2compat_glColorMaterial(gl.funcs, C.GLenum(face), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClipPlane.xml -func (gl *GL) ClipPlane(plane glbase.Enum, equation []float64) { - C.gl3_2compat_glClipPlane(gl.funcs, C.GLenum(plane), (*C.GLdouble)(unsafe.Pointer(&equation[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex4sv.xml -func (gl *GL) Vertex4sv(v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glVertex4sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex4s.xml -func (gl *GL) Vertex4s(x, y, z, w int16) { - C.gl3_2compat_glVertex4s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z), C.GLshort(w)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex4iv.xml -func (gl *GL) Vertex4iv(v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glVertex4iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex4i.xml -func (gl *GL) Vertex4i(x, y, z, w int) { - C.gl3_2compat_glVertex4i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z), C.GLint(w)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex4fv.xml -func (gl *GL) Vertex4fv(v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glVertex4fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex4f.xml -func (gl *GL) Vertex4f(x, y, z, w float32) { - C.gl3_2compat_glVertex4f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z), C.GLfloat(w)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex4dv.xml -func (gl *GL) Vertex4dv(v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glVertex4dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex4d.xml -func (gl *GL) Vertex4d(x, y, z, w float64) { - C.gl3_2compat_glVertex4d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z), C.GLdouble(w)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex3sv.xml -func (gl *GL) Vertex3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glVertex3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex3s.xml -func (gl *GL) Vertex3s(x, y, z int16) { - C.gl3_2compat_glVertex3s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex3iv.xml -func (gl *GL) Vertex3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glVertex3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex3i.xml -func (gl *GL) Vertex3i(x, y, z int) { - C.gl3_2compat_glVertex3i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex3fv.xml -func (gl *GL) Vertex3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glVertex3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex3f.xml -func (gl *GL) Vertex3f(x, y, z float32) { - C.gl3_2compat_glVertex3f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex3dv.xml -func (gl *GL) Vertex3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glVertex3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex3d.xml -func (gl *GL) Vertex3d(x, y, z float64) { - C.gl3_2compat_glVertex3d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex2sv.xml -func (gl *GL) Vertex2sv(v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glVertex2sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex2s.xml -func (gl *GL) Vertex2s(x, y int16) { - C.gl3_2compat_glVertex2s(gl.funcs, C.GLshort(x), C.GLshort(y)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex2iv.xml -func (gl *GL) Vertex2iv(v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glVertex2iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex2i.xml -func (gl *GL) Vertex2i(x, y int) { - C.gl3_2compat_glVertex2i(gl.funcs, C.GLint(x), C.GLint(y)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex2fv.xml -func (gl *GL) Vertex2fv(v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glVertex2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex2f.xml -func (gl *GL) Vertex2f(x, y float32) { - C.gl3_2compat_glVertex2f(gl.funcs, C.GLfloat(x), C.GLfloat(y)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex2dv.xml -func (gl *GL) Vertex2dv(v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glVertex2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex2d.xml -func (gl *GL) Vertex2d(x, y float64) { - C.gl3_2compat_glVertex2d(gl.funcs, C.GLdouble(x), C.GLdouble(y)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord4sv.xml -func (gl *GL) TexCoord4sv(v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glTexCoord4sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord4s.xml -func (gl *GL) TexCoord4s(s, t, r, q int16) { - C.gl3_2compat_glTexCoord4s(gl.funcs, C.GLshort(s), C.GLshort(t), C.GLshort(r), C.GLshort(q)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord4iv.xml -func (gl *GL) TexCoord4iv(v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glTexCoord4iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord4i.xml -func (gl *GL) TexCoord4i(s, t, r, q int32) { - C.gl3_2compat_glTexCoord4i(gl.funcs, C.GLint(s), C.GLint(t), C.GLint(r), C.GLint(q)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord4fv.xml -func (gl *GL) TexCoord4fv(v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glTexCoord4fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord4f.xml -func (gl *GL) TexCoord4f(s, t, r, q float32) { - C.gl3_2compat_glTexCoord4f(gl.funcs, C.GLfloat(s), C.GLfloat(t), C.GLfloat(r), C.GLfloat(q)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord4dv.xml -func (gl *GL) TexCoord4dv(v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glTexCoord4dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord4d.xml -func (gl *GL) TexCoord4d(s, t, r, q float64) { - C.gl3_2compat_glTexCoord4d(gl.funcs, C.GLdouble(s), C.GLdouble(t), C.GLdouble(r), C.GLdouble(q)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord3sv.xml -func (gl *GL) TexCoord3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glTexCoord3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord3s.xml -func (gl *GL) TexCoord3s(s, t, r int16) { - C.gl3_2compat_glTexCoord3s(gl.funcs, C.GLshort(s), C.GLshort(t), C.GLshort(r)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord3iv.xml -func (gl *GL) TexCoord3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glTexCoord3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord3i.xml -func (gl *GL) TexCoord3i(s, t, r int32) { - C.gl3_2compat_glTexCoord3i(gl.funcs, C.GLint(s), C.GLint(t), C.GLint(r)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord3fv.xml -func (gl *GL) TexCoord3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glTexCoord3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord3f.xml -func (gl *GL) TexCoord3f(s, t, r float32) { - C.gl3_2compat_glTexCoord3f(gl.funcs, C.GLfloat(s), C.GLfloat(t), C.GLfloat(r)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord3dv.xml -func (gl *GL) TexCoord3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glTexCoord3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord3d.xml -func (gl *GL) TexCoord3d(s, t, r float64) { - C.gl3_2compat_glTexCoord3d(gl.funcs, C.GLdouble(s), C.GLdouble(t), C.GLdouble(r)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord2sv.xml -func (gl *GL) TexCoord2sv(v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glTexCoord2sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord2s.xml -func (gl *GL) TexCoord2s(s, t int16) { - C.gl3_2compat_glTexCoord2s(gl.funcs, C.GLshort(s), C.GLshort(t)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord2iv.xml -func (gl *GL) TexCoord2iv(v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glTexCoord2iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord2i.xml -func (gl *GL) TexCoord2i(s, t int32) { - C.gl3_2compat_glTexCoord2i(gl.funcs, C.GLint(s), C.GLint(t)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord2fv.xml -func (gl *GL) TexCoord2fv(v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glTexCoord2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord2f.xml -func (gl *GL) TexCoord2f(s, t float32) { - C.gl3_2compat_glTexCoord2f(gl.funcs, C.GLfloat(s), C.GLfloat(t)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord2dv.xml -func (gl *GL) TexCoord2dv(v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glTexCoord2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord2d.xml -func (gl *GL) TexCoord2d(s, t float64) { - C.gl3_2compat_glTexCoord2d(gl.funcs, C.GLdouble(s), C.GLdouble(t)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord1sv.xml -func (gl *GL) TexCoord1sv(v []int16) { - C.gl3_2compat_glTexCoord1sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord1s.xml -func (gl *GL) TexCoord1s(s int16) { - C.gl3_2compat_glTexCoord1s(gl.funcs, C.GLshort(s)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord1iv.xml -func (gl *GL) TexCoord1iv(v []int32) { - C.gl3_2compat_glTexCoord1iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord1i.xml -func (gl *GL) TexCoord1i(s int32) { - C.gl3_2compat_glTexCoord1i(gl.funcs, C.GLint(s)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord1fv.xml -func (gl *GL) TexCoord1fv(v []float32) { - C.gl3_2compat_glTexCoord1fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord1f.xml -func (gl *GL) TexCoord1f(s float32) { - C.gl3_2compat_glTexCoord1f(gl.funcs, C.GLfloat(s)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord1dv.xml -func (gl *GL) TexCoord1dv(v []float64) { - C.gl3_2compat_glTexCoord1dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord1d.xml -func (gl *GL) TexCoord1d(s float64) { - C.gl3_2compat_glTexCoord1d(gl.funcs, C.GLdouble(s)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRectsv.xml -func (gl *GL) Rectsv(v1, v2 []int16) { - C.gl3_2compat_glRectsv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v1[0])), (*C.GLshort)(unsafe.Pointer(&v2[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRects.xml -func (gl *GL) Rects(x1, y1, x2, y2 int16) { - C.gl3_2compat_glRects(gl.funcs, C.GLshort(x1), C.GLshort(y1), C.GLshort(x2), C.GLshort(y2)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRectiv.xml -func (gl *GL) Rectiv(v1, v2 []int32) { - C.gl3_2compat_glRectiv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v1[0])), (*C.GLint)(unsafe.Pointer(&v2[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRecti.xml -func (gl *GL) Recti(x1, y1, x2, y2 int32) { - C.gl3_2compat_glRecti(gl.funcs, C.GLint(x1), C.GLint(y1), C.GLint(x2), C.GLint(y2)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRectfv.xml -func (gl *GL) Rectfv(v1, v2 []float32) { - C.gl3_2compat_glRectfv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v1[0])), (*C.GLfloat)(unsafe.Pointer(&v2[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRectf.xml -func (gl *GL) Rectf(x1, y1, x2, y2 float32) { - C.gl3_2compat_glRectf(gl.funcs, C.GLfloat(x1), C.GLfloat(y1), C.GLfloat(x2), C.GLfloat(y2)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRectdv.xml -func (gl *GL) Rectdv(v1, v2 []float64) { - C.gl3_2compat_glRectdv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v1[0])), (*C.GLdouble)(unsafe.Pointer(&v2[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRectd.xml -func (gl *GL) Rectd(x1, y1, x2, y2 float64) { - C.gl3_2compat_glRectd(gl.funcs, C.GLdouble(x1), C.GLdouble(y1), C.GLdouble(x2), C.GLdouble(y2)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos4sv.xml -func (gl *GL) RasterPos4sv(v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glRasterPos4sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos4s.xml -func (gl *GL) RasterPos4s(x, y, z, w int16) { - C.gl3_2compat_glRasterPos4s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z), C.GLshort(w)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos4iv.xml -func (gl *GL) RasterPos4iv(v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glRasterPos4iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos4i.xml -func (gl *GL) RasterPos4i(x, y, z, w int) { - C.gl3_2compat_glRasterPos4i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z), C.GLint(w)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos4fv.xml -func (gl *GL) RasterPos4fv(v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glRasterPos4fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos4f.xml -func (gl *GL) RasterPos4f(x, y, z, w float32) { - C.gl3_2compat_glRasterPos4f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z), C.GLfloat(w)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos4dv.xml -func (gl *GL) RasterPos4dv(v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glRasterPos4dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos4d.xml -func (gl *GL) RasterPos4d(x, y, z, w float64) { - C.gl3_2compat_glRasterPos4d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z), C.GLdouble(w)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos3sv.xml -func (gl *GL) RasterPos3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glRasterPos3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos3s.xml -func (gl *GL) RasterPos3s(x, y, z int16) { - C.gl3_2compat_glRasterPos3s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos3iv.xml -func (gl *GL) RasterPos3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glRasterPos3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos3i.xml -func (gl *GL) RasterPos3i(x, y, z int) { - C.gl3_2compat_glRasterPos3i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos3fv.xml -func (gl *GL) RasterPos3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glRasterPos3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos3f.xml -func (gl *GL) RasterPos3f(x, y, z float32) { - C.gl3_2compat_glRasterPos3f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos3dv.xml -func (gl *GL) RasterPos3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glRasterPos3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos3d.xml -func (gl *GL) RasterPos3d(x, y, z float64) { - C.gl3_2compat_glRasterPos3d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos2sv.xml -func (gl *GL) RasterPos2sv(v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glRasterPos2sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos2s.xml -func (gl *GL) RasterPos2s(x, y int16) { - C.gl3_2compat_glRasterPos2s(gl.funcs, C.GLshort(x), C.GLshort(y)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos2iv.xml -func (gl *GL) RasterPos2iv(v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glRasterPos2iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos2i.xml -func (gl *GL) RasterPos2i(x, y int) { - C.gl3_2compat_glRasterPos2i(gl.funcs, C.GLint(x), C.GLint(y)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos2fv.xml -func (gl *GL) RasterPos2fv(v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glRasterPos2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos2f.xml -func (gl *GL) RasterPos2f(x, y float32) { - C.gl3_2compat_glRasterPos2f(gl.funcs, C.GLfloat(x), C.GLfloat(y)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos2dv.xml -func (gl *GL) RasterPos2dv(v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glRasterPos2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos2d.xml -func (gl *GL) RasterPos2d(x, y float64) { - C.gl3_2compat_glRasterPos2d(gl.funcs, C.GLdouble(x), C.GLdouble(y)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glNormal3sv.xml -func (gl *GL) Normal3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glNormal3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glNormal3s.xml -func (gl *GL) Normal3s(nx, ny, nz int16) { - C.gl3_2compat_glNormal3s(gl.funcs, C.GLshort(nx), C.GLshort(ny), C.GLshort(nz)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glNormal3iv.xml -func (gl *GL) Normal3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glNormal3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glNormal3i.xml -func (gl *GL) Normal3i(nx, ny, nz int32) { - C.gl3_2compat_glNormal3i(gl.funcs, C.GLint(nx), C.GLint(ny), C.GLint(nz)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glNormal3fv.xml -func (gl *GL) Normal3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glNormal3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glNormal3f.xml -func (gl *GL) Normal3f(nx, ny, nz float32) { - C.gl3_2compat_glNormal3f(gl.funcs, C.GLfloat(nx), C.GLfloat(ny), C.GLfloat(nz)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glNormal3dv.xml -func (gl *GL) Normal3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glNormal3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glNormal3d.xml -func (gl *GL) Normal3d(nx, ny, nz float64) { - C.gl3_2compat_glNormal3d(gl.funcs, C.GLdouble(nx), C.GLdouble(ny), C.GLdouble(nz)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glNormal3bv.xml -func (gl *GL) Normal3bv(v []byte) { - C.gl3_2compat_glNormal3bv(gl.funcs, (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glNormal3b.xml -func (gl *GL) Normal3b(nx, ny, nz byte) { - C.gl3_2compat_glNormal3b(gl.funcs, C.GLbyte(nx), C.GLbyte(ny), C.GLbyte(nz)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIndexsv.xml -func (gl *GL) Indexsv(c []int16) { - C.gl3_2compat_glIndexsv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIndexs.xml -func (gl *GL) Indexs(c int16) { - C.gl3_2compat_glIndexs(gl.funcs, C.GLshort(c)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIndexiv.xml -func (gl *GL) Indexiv(c []int32) { - C.gl3_2compat_glIndexiv(gl.funcs, (*C.GLint)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIndexi.xml -func (gl *GL) Indexi(c int32) { - C.gl3_2compat_glIndexi(gl.funcs, C.GLint(c)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIndexfv.xml -func (gl *GL) Indexfv(c []float32) { - C.gl3_2compat_glIndexfv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIndexf.xml -func (gl *GL) Indexf(c float32) { - C.gl3_2compat_glIndexf(gl.funcs, C.GLfloat(c)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIndexdv.xml -func (gl *GL) Indexdv(c []float64) { - C.gl3_2compat_glIndexdv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIndexd.xml -func (gl *GL) Indexd(c float64) { - C.gl3_2compat_glIndexd(gl.funcs, C.GLdouble(c)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEnd.xml -func (gl *GL) End() { - C.gl3_2compat_glEnd(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEdgeFlagv.xml -func (gl *GL) EdgeFlagv(flag []bool) { - C.gl3_2compat_glEdgeFlagv(gl.funcs, (*C.GLboolean)(unsafe.Pointer(&flag[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEdgeFlag.xml -func (gl *GL) EdgeFlag(flag bool) { - C.gl3_2compat_glEdgeFlag(gl.funcs, *(*C.GLboolean)(unsafe.Pointer(&flag))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor4usv.xml -func (gl *GL) Color4usv(v []uint16) { - C.gl3_2compat_glColor4usv(gl.funcs, (*C.GLushort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor4us.xml -func (gl *GL) Color4us(red, green, blue, alpha uint16) { - C.gl3_2compat_glColor4us(gl.funcs, C.GLushort(red), C.GLushort(green), C.GLushort(blue), C.GLushort(alpha)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor4uiv.xml -func (gl *GL) Color4uiv(v []uint32) { - C.gl3_2compat_glColor4uiv(gl.funcs, (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor4ui.xml -func (gl *GL) Color4ui(red, green, blue, alpha uint32) { - C.gl3_2compat_glColor4ui(gl.funcs, C.GLuint(red), C.GLuint(green), C.GLuint(blue), C.GLuint(alpha)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor4ubv.xml -func (gl *GL) Color4ubv(v []uint8) { - C.gl3_2compat_glColor4ubv(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor4ub.xml -func (gl *GL) Color4ub(red, green, blue, alpha uint8) { - C.gl3_2compat_glColor4ub(gl.funcs, C.GLubyte(red), C.GLubyte(green), C.GLubyte(blue), C.GLubyte(alpha)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor4sv.xml -func (gl *GL) Color4sv(v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glColor4sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor4s.xml -func (gl *GL) Color4s(red, green, blue, alpha int16) { - C.gl3_2compat_glColor4s(gl.funcs, C.GLshort(red), C.GLshort(green), C.GLshort(blue), C.GLshort(alpha)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor4iv.xml -func (gl *GL) Color4iv(v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glColor4iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor4i.xml -func (gl *GL) Color4i(red, green, blue, alpha int32) { - C.gl3_2compat_glColor4i(gl.funcs, C.GLint(red), C.GLint(green), C.GLint(blue), C.GLint(alpha)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor4fv.xml -func (gl *GL) Color4fv(v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glColor4fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor4f.xml -func (gl *GL) Color4f(red, green, blue, alpha float32) { - C.gl3_2compat_glColor4f(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor4dv.xml -func (gl *GL) Color4dv(v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glColor4dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor4d.xml -func (gl *GL) Color4d(red, green, blue, alpha float64) { - C.gl3_2compat_glColor4d(gl.funcs, C.GLdouble(red), C.GLdouble(green), C.GLdouble(blue), C.GLdouble(alpha)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor4bv.xml -func (gl *GL) Color4bv(v []byte) { - C.gl3_2compat_glColor4bv(gl.funcs, (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor4b.xml -func (gl *GL) Color4b(red, green, blue, alpha byte) { - C.gl3_2compat_glColor4b(gl.funcs, C.GLbyte(red), C.GLbyte(green), C.GLbyte(blue), C.GLbyte(alpha)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor3usv.xml -func (gl *GL) Color3usv(v []uint16) { - C.gl3_2compat_glColor3usv(gl.funcs, (*C.GLushort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor3us.xml -func (gl *GL) Color3us(red, green, blue uint16) { - C.gl3_2compat_glColor3us(gl.funcs, C.GLushort(red), C.GLushort(green), C.GLushort(blue)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor3uiv.xml -func (gl *GL) Color3uiv(v []uint32) { - C.gl3_2compat_glColor3uiv(gl.funcs, (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor3ui.xml -func (gl *GL) Color3ui(red, green, blue uint32) { - C.gl3_2compat_glColor3ui(gl.funcs, C.GLuint(red), C.GLuint(green), C.GLuint(blue)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor3ubv.xml -func (gl *GL) Color3ubv(v []uint8) { - C.gl3_2compat_glColor3ubv(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor3ub.xml -func (gl *GL) Color3ub(red, green, blue uint8) { - C.gl3_2compat_glColor3ub(gl.funcs, C.GLubyte(red), C.GLubyte(green), C.GLubyte(blue)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor3sv.xml -func (gl *GL) Color3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glColor3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor3s.xml -func (gl *GL) Color3s(red, green, blue int16) { - C.gl3_2compat_glColor3s(gl.funcs, C.GLshort(red), C.GLshort(green), C.GLshort(blue)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor3iv.xml -func (gl *GL) Color3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glColor3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor3i.xml -func (gl *GL) Color3i(red, green, blue int32) { - C.gl3_2compat_glColor3i(gl.funcs, C.GLint(red), C.GLint(green), C.GLint(blue)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor3fv.xml -func (gl *GL) Color3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glColor3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor3f.xml -func (gl *GL) Color3f(red, green, blue float32) { - C.gl3_2compat_glColor3f(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor3dv.xml -func (gl *GL) Color3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glColor3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor3d.xml -func (gl *GL) Color3d(red, green, blue float64) { - C.gl3_2compat_glColor3d(gl.funcs, C.GLdouble(red), C.GLdouble(green), C.GLdouble(blue)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor3bv.xml -func (gl *GL) Color3bv(v []byte) { - C.gl3_2compat_glColor3bv(gl.funcs, (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor3b.xml -func (gl *GL) Color3b(red, green, blue byte) { - C.gl3_2compat_glColor3b(gl.funcs, C.GLbyte(red), C.GLbyte(green), C.GLbyte(blue)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBitmap.xml -func (gl *GL) Bitmap(width, height int, xorig, yorig, xmove, ymove float32, bitmap []uint8) { - C.gl3_2compat_glBitmap(gl.funcs, C.GLsizei(width), C.GLsizei(height), C.GLfloat(xorig), C.GLfloat(yorig), C.GLfloat(xmove), C.GLfloat(ymove), (*C.GLubyte)(unsafe.Pointer(&bitmap[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBegin.xml -func (gl *GL) Begin(mode glbase.Enum) { - C.gl3_2compat_glBegin(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glListBase.xml -func (gl *GL) ListBase(base uint32) { - C.gl3_2compat_glListBase(gl.funcs, C.GLuint(base)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGenLists.xml -func (gl *GL) GenLists(range_ int32) uint32 { - glresult := C.gl3_2compat_glGenLists(gl.funcs, C.GLsizei(range_)) - return uint32(glresult) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDeleteLists.xml -func (gl *GL) DeleteLists(list uint32, range_ int32) { - C.gl3_2compat_glDeleteLists(gl.funcs, C.GLuint(list), C.GLsizei(range_)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCallLists.xml -func (gl *GL) CallLists(n int, gltype glbase.Enum, lists interface{}) { - var lists_ptr unsafe.Pointer - var lists_v = reflect.ValueOf(lists) - if lists != nil && lists_v.Kind() != reflect.Slice { - panic("parameter lists must be a slice") - } - if lists != nil { - lists_ptr = unsafe.Pointer(lists_v.Index(0).Addr().Pointer()) - } - C.gl3_2compat_glCallLists(gl.funcs, C.GLsizei(n), C.GLenum(gltype), lists_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCallList.xml -func (gl *GL) CallList(list uint32) { - C.gl3_2compat_glCallList(gl.funcs, C.GLuint(list)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEndList.xml -func (gl *GL) EndList() { - C.gl3_2compat_glEndList(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glNewList.xml -func (gl *GL) NewList(list uint32, mode glbase.Enum) { - C.gl3_2compat_glNewList(gl.funcs, C.GLuint(list), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPushClientAttrib.xml -func (gl *GL) PushClientAttrib(mask glbase.Bitfield) { - C.gl3_2compat_glPushClientAttrib(gl.funcs, C.GLbitfield(mask)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPopClientAttrib.xml -func (gl *GL) PopClientAttrib() { - C.gl3_2compat_glPopClientAttrib(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPrioritizeTextures.xml -func (gl *GL) PrioritizeTextures(n int, textures []glbase.Texture, priorities []float32) { - C.gl3_2compat_glPrioritizeTextures(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0])), (*C.GLfloat)(unsafe.Pointer(&priorities[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glAreTexturesResident.xml -func (gl *GL) AreTexturesResident(n int, textures []glbase.Texture, residences []bool) bool { - glresult := C.gl3_2compat_glAreTexturesResident(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0])), (*C.GLboolean)(unsafe.Pointer(&residences[0]))) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexPointer.xml -func (gl *GL) VertexPointer(size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl3_2compat_glVertexPointer(gl.funcs, C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoordPointer.xml -func (gl *GL) TexCoordPointer(size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl3_2compat_glTexCoordPointer(gl.funcs, C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glNormalPointer.xml -func (gl *GL) NormalPointer(gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl3_2compat_glNormalPointer(gl.funcs, C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glInterleavedArrays.xml -func (gl *GL) InterleavedArrays(format glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl3_2compat_glInterleavedArrays(gl.funcs, C.GLenum(format), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIndexPointer.xml -func (gl *GL) IndexPointer(gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl3_2compat_glIndexPointer(gl.funcs, C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEnableClientState.xml -func (gl *GL) EnableClientState(array glbase.Enum) { - C.gl3_2compat_glEnableClientState(gl.funcs, C.GLenum(array)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEdgeFlagPointer.xml -func (gl *GL) EdgeFlagPointer(stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl3_2compat_glEdgeFlagPointer(gl.funcs, C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDisableClientState.xml -func (gl *GL) DisableClientState(array glbase.Enum) { - C.gl3_2compat_glDisableClientState(gl.funcs, C.GLenum(array)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColorPointer.xml -func (gl *GL) ColorPointer(size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl3_2compat_glColorPointer(gl.funcs, C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glArrayElement.xml -func (gl *GL) ArrayElement(i int32) { - C.gl3_2compat_glArrayElement(gl.funcs, C.GLint(i)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glResetMinmax.xml -func (gl *GL) ResetMinmax(target glbase.Enum) { - C.gl3_2compat_glResetMinmax(gl.funcs, C.GLenum(target)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glResetHistogram.xml -func (gl *GL) ResetHistogram(target glbase.Enum) { - C.gl3_2compat_glResetHistogram(gl.funcs, C.GLenum(target)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMinmax.xml -func (gl *GL) Minmax(target, internalFormat glbase.Enum, sink bool) { - C.gl3_2compat_glMinmax(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), *(*C.GLboolean)(unsafe.Pointer(&sink))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glHistogram.xml -func (gl *GL) Histogram(target glbase.Enum, width int, internalFormat glbase.Enum, sink bool) { - C.gl3_2compat_glHistogram(gl.funcs, C.GLenum(target), C.GLsizei(width), C.GLenum(internalFormat), *(*C.GLboolean)(unsafe.Pointer(&sink))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetMinmaxParameteriv.xml -func (gl *GL) GetMinmaxParameteriv(target, pname glbase.Enum, params []int32) { - C.gl3_2compat_glGetMinmaxParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetMinmaxParameterfv.xml -func (gl *GL) GetMinmaxParameterfv(target, pname glbase.Enum, params []float32) { - C.gl3_2compat_glGetMinmaxParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetMinmax.xml -func (gl *GL) GetMinmax(target glbase.Enum, reset bool, format, gltype glbase.Enum, values interface{}) { - var values_ptr unsafe.Pointer - var values_v = reflect.ValueOf(values) - if values != nil && values_v.Kind() != reflect.Slice { - panic("parameter values must be a slice") - } - if values != nil { - values_ptr = unsafe.Pointer(values_v.Index(0).Addr().Pointer()) - } - C.gl3_2compat_glGetMinmax(gl.funcs, C.GLenum(target), *(*C.GLboolean)(unsafe.Pointer(&reset)), C.GLenum(format), C.GLenum(gltype), values_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetHistogramParameteriv.xml -func (gl *GL) GetHistogramParameteriv(target, pname glbase.Enum, params []int32) { - C.gl3_2compat_glGetHistogramParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetHistogramParameterfv.xml -func (gl *GL) GetHistogramParameterfv(target, pname glbase.Enum, params []float32) { - C.gl3_2compat_glGetHistogramParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetHistogram.xml -func (gl *GL) GetHistogram(target glbase.Enum, reset bool, format, gltype glbase.Enum, values interface{}) { - var values_ptr unsafe.Pointer - var values_v = reflect.ValueOf(values) - if values != nil && values_v.Kind() != reflect.Slice { - panic("parameter values must be a slice") - } - if values != nil { - values_ptr = unsafe.Pointer(values_v.Index(0).Addr().Pointer()) - } - C.gl3_2compat_glGetHistogram(gl.funcs, C.GLenum(target), *(*C.GLboolean)(unsafe.Pointer(&reset)), C.GLenum(format), C.GLenum(gltype), values_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSeparableFilter2D.xml -func (gl *GL) SeparableFilter2D(target, internalFormat glbase.Enum, width, height int, format, gltype glbase.Enum, row, column interface{}) { - var row_ptr unsafe.Pointer - var row_v = reflect.ValueOf(row) - if row != nil && row_v.Kind() != reflect.Slice { - panic("parameter row must be a slice") - } - if row != nil { - row_ptr = unsafe.Pointer(row_v.Index(0).Addr().Pointer()) - } - var column_ptr unsafe.Pointer - var column_v = reflect.ValueOf(column) - if column != nil && column_v.Kind() != reflect.Slice { - panic("parameter column must be a slice") - } - if column != nil { - column_ptr = unsafe.Pointer(column_v.Index(0).Addr().Pointer()) - } - C.gl3_2compat_glSeparableFilter2D(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), row_ptr, column_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetSeparableFilter.xml -func (gl *GL) GetSeparableFilter(target, format, gltype glbase.Enum, row, column, span interface{}) { - var row_ptr unsafe.Pointer - var row_v = reflect.ValueOf(row) - if row != nil && row_v.Kind() != reflect.Slice { - panic("parameter row must be a slice") - } - if row != nil { - row_ptr = unsafe.Pointer(row_v.Index(0).Addr().Pointer()) - } - var column_ptr unsafe.Pointer - var column_v = reflect.ValueOf(column) - if column != nil && column_v.Kind() != reflect.Slice { - panic("parameter column must be a slice") - } - if column != nil { - column_ptr = unsafe.Pointer(column_v.Index(0).Addr().Pointer()) - } - var span_ptr unsafe.Pointer - var span_v = reflect.ValueOf(span) - if span != nil && span_v.Kind() != reflect.Slice { - panic("parameter span must be a slice") - } - if span != nil { - span_ptr = unsafe.Pointer(span_v.Index(0).Addr().Pointer()) - } - C.gl3_2compat_glGetSeparableFilter(gl.funcs, C.GLenum(target), C.GLenum(format), C.GLenum(gltype), row_ptr, column_ptr, span_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetConvolutionParameteriv.xml -func (gl *GL) GetConvolutionParameteriv(target, pname glbase.Enum, params []int32) { - C.gl3_2compat_glGetConvolutionParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetConvolutionParameterfv.xml -func (gl *GL) GetConvolutionParameterfv(target, pname glbase.Enum, params []float32) { - C.gl3_2compat_glGetConvolutionParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetConvolutionFilter.xml -func (gl *GL) GetConvolutionFilter(target, format, gltype glbase.Enum, image interface{}) { - var image_ptr unsafe.Pointer - var image_v = reflect.ValueOf(image) - if image != nil && image_v.Kind() != reflect.Slice { - panic("parameter image must be a slice") - } - if image != nil { - image_ptr = unsafe.Pointer(image_v.Index(0).Addr().Pointer()) - } - C.gl3_2compat_glGetConvolutionFilter(gl.funcs, C.GLenum(target), C.GLenum(format), C.GLenum(gltype), image_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCopyConvolutionFilter2D.xml -func (gl *GL) CopyConvolutionFilter2D(target, internalFormat glbase.Enum, x, y, width, height int) { - C.gl3_2compat_glCopyConvolutionFilter2D(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCopyConvolutionFilter1D.xml -func (gl *GL) CopyConvolutionFilter1D(target, internalFormat glbase.Enum, x, y, width int) { - C.gl3_2compat_glCopyConvolutionFilter1D(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glConvolutionParameteriv.xml -func (gl *GL) ConvolutionParameteriv(target, pname glbase.Enum, params []int32) { - C.gl3_2compat_glConvolutionParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glConvolutionParameteri.xml -func (gl *GL) ConvolutionParameteri(target, pname glbase.Enum, params int32) { - C.gl3_2compat_glConvolutionParameteri(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLint(params)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glConvolutionParameterfv.xml -func (gl *GL) ConvolutionParameterfv(target, pname glbase.Enum, params []float32) { - C.gl3_2compat_glConvolutionParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glConvolutionParameterf.xml -func (gl *GL) ConvolutionParameterf(target, pname glbase.Enum, params float32) { - C.gl3_2compat_glConvolutionParameterf(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLfloat(params)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glConvolutionFilter2D.xml -func (gl *GL) ConvolutionFilter2D(target, internalFormat glbase.Enum, width, height int, format, gltype glbase.Enum, image interface{}) { - var image_ptr unsafe.Pointer - var image_v = reflect.ValueOf(image) - if image != nil && image_v.Kind() != reflect.Slice { - panic("parameter image must be a slice") - } - if image != nil { - image_ptr = unsafe.Pointer(image_v.Index(0).Addr().Pointer()) - } - C.gl3_2compat_glConvolutionFilter2D(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), image_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glConvolutionFilter1D.xml -func (gl *GL) ConvolutionFilter1D(target, internalFormat glbase.Enum, width int, format, gltype glbase.Enum, image interface{}) { - var image_ptr unsafe.Pointer - var image_v = reflect.ValueOf(image) - if image != nil && image_v.Kind() != reflect.Slice { - panic("parameter image must be a slice") - } - if image != nil { - image_ptr = unsafe.Pointer(image_v.Index(0).Addr().Pointer()) - } - C.gl3_2compat_glConvolutionFilter1D(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLsizei(width), C.GLenum(format), C.GLenum(gltype), image_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCopyColorSubTable.xml -func (gl *GL) CopyColorSubTable(target glbase.Enum, start int32, x, y, width int) { - C.gl3_2compat_glCopyColorSubTable(gl.funcs, C.GLenum(target), C.GLsizei(start), C.GLint(x), C.GLint(y), C.GLsizei(width)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColorSubTable.xml -func (gl *GL) ColorSubTable(target glbase.Enum, start int32, count int, format, gltype glbase.Enum, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl3_2compat_glColorSubTable(gl.funcs, C.GLenum(target), C.GLsizei(start), C.GLsizei(count), C.GLenum(format), C.GLenum(gltype), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetColorTableParameteriv.xml -func (gl *GL) GetColorTableParameteriv(target, pname glbase.Enum, params []int32) { - C.gl3_2compat_glGetColorTableParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetColorTableParameterfv.xml -func (gl *GL) GetColorTableParameterfv(target, pname glbase.Enum, params []float32) { - C.gl3_2compat_glGetColorTableParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetColorTable.xml -func (gl *GL) GetColorTable(target, format, gltype glbase.Enum, table interface{}) { - var table_ptr unsafe.Pointer - var table_v = reflect.ValueOf(table) - if table != nil && table_v.Kind() != reflect.Slice { - panic("parameter table must be a slice") - } - if table != nil { - table_ptr = unsafe.Pointer(table_v.Index(0).Addr().Pointer()) - } - C.gl3_2compat_glGetColorTable(gl.funcs, C.GLenum(target), C.GLenum(format), C.GLenum(gltype), table_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCopyColorTable.xml -func (gl *GL) CopyColorTable(target, internalFormat glbase.Enum, x, y, width int) { - C.gl3_2compat_glCopyColorTable(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColorTableParameteriv.xml -func (gl *GL) ColorTableParameteriv(target, pname glbase.Enum, params []int32) { - C.gl3_2compat_glColorTableParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColorTableParameterfv.xml -func (gl *GL) ColorTableParameterfv(target, pname glbase.Enum, params []float32) { - C.gl3_2compat_glColorTableParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColorTable.xml -func (gl *GL) ColorTable(target, internalFormat glbase.Enum, width int, format, gltype glbase.Enum, table interface{}) { - var table_ptr unsafe.Pointer - var table_v = reflect.ValueOf(table) - if table != nil && table_v.Kind() != reflect.Slice { - panic("parameter table must be a slice") - } - if table != nil { - table_ptr = unsafe.Pointer(table_v.Index(0).Addr().Pointer()) - } - C.gl3_2compat_glColorTable(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLsizei(width), C.GLenum(format), C.GLenum(gltype), table_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultTransposeMatrixd.xml -func (gl *GL) MultTransposeMatrixd(m []float64) { - C.gl3_2compat_glMultTransposeMatrixd(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultTransposeMatrixf.xml -func (gl *GL) MultTransposeMatrixf(m []float32) { - C.gl3_2compat_glMultTransposeMatrixf(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glLoadTransposeMatrixd.xml -func (gl *GL) LoadTransposeMatrixd(m []float64) { - C.gl3_2compat_glLoadTransposeMatrixd(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glLoadTransposeMatrixf.xml -func (gl *GL) LoadTransposeMatrixf(m []float32) { - C.gl3_2compat_glLoadTransposeMatrixf(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord4sv.xml -func (gl *GL) MultiTexCoord4sv(target glbase.Enum, v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glMultiTexCoord4sv(gl.funcs, C.GLenum(target), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord4s.xml -func (gl *GL) MultiTexCoord4s(target glbase.Enum, s, t, r, q int16) { - C.gl3_2compat_glMultiTexCoord4s(gl.funcs, C.GLenum(target), C.GLshort(s), C.GLshort(t), C.GLshort(r), C.GLshort(q)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord4iv.xml -func (gl *GL) MultiTexCoord4iv(target glbase.Enum, v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glMultiTexCoord4iv(gl.funcs, C.GLenum(target), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord4i.xml -func (gl *GL) MultiTexCoord4i(target glbase.Enum, s, t, r, q int32) { - C.gl3_2compat_glMultiTexCoord4i(gl.funcs, C.GLenum(target), C.GLint(s), C.GLint(t), C.GLint(r), C.GLint(q)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord4fv.xml -func (gl *GL) MultiTexCoord4fv(target glbase.Enum, v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glMultiTexCoord4fv(gl.funcs, C.GLenum(target), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord4f.xml -func (gl *GL) MultiTexCoord4f(target glbase.Enum, s, t, r, q float32) { - C.gl3_2compat_glMultiTexCoord4f(gl.funcs, C.GLenum(target), C.GLfloat(s), C.GLfloat(t), C.GLfloat(r), C.GLfloat(q)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord4dv.xml -func (gl *GL) MultiTexCoord4dv(target glbase.Enum, v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glMultiTexCoord4dv(gl.funcs, C.GLenum(target), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord4d.xml -func (gl *GL) MultiTexCoord4d(target glbase.Enum, s, t, r, q float64) { - C.gl3_2compat_glMultiTexCoord4d(gl.funcs, C.GLenum(target), C.GLdouble(s), C.GLdouble(t), C.GLdouble(r), C.GLdouble(q)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord3sv.xml -func (gl *GL) MultiTexCoord3sv(target glbase.Enum, v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glMultiTexCoord3sv(gl.funcs, C.GLenum(target), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord3s.xml -func (gl *GL) MultiTexCoord3s(target glbase.Enum, s, t, r int16) { - C.gl3_2compat_glMultiTexCoord3s(gl.funcs, C.GLenum(target), C.GLshort(s), C.GLshort(t), C.GLshort(r)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord3iv.xml -func (gl *GL) MultiTexCoord3iv(target glbase.Enum, v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glMultiTexCoord3iv(gl.funcs, C.GLenum(target), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord3i.xml -func (gl *GL) MultiTexCoord3i(target glbase.Enum, s, t, r int32) { - C.gl3_2compat_glMultiTexCoord3i(gl.funcs, C.GLenum(target), C.GLint(s), C.GLint(t), C.GLint(r)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord3fv.xml -func (gl *GL) MultiTexCoord3fv(target glbase.Enum, v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glMultiTexCoord3fv(gl.funcs, C.GLenum(target), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord3f.xml -func (gl *GL) MultiTexCoord3f(target glbase.Enum, s, t, r float32) { - C.gl3_2compat_glMultiTexCoord3f(gl.funcs, C.GLenum(target), C.GLfloat(s), C.GLfloat(t), C.GLfloat(r)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord3dv.xml -func (gl *GL) MultiTexCoord3dv(target glbase.Enum, v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glMultiTexCoord3dv(gl.funcs, C.GLenum(target), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord3d.xml -func (gl *GL) MultiTexCoord3d(target glbase.Enum, s, t, r float64) { - C.gl3_2compat_glMultiTexCoord3d(gl.funcs, C.GLenum(target), C.GLdouble(s), C.GLdouble(t), C.GLdouble(r)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord2sv.xml -func (gl *GL) MultiTexCoord2sv(target glbase.Enum, v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glMultiTexCoord2sv(gl.funcs, C.GLenum(target), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord2s.xml -func (gl *GL) MultiTexCoord2s(target glbase.Enum, s, t int16) { - C.gl3_2compat_glMultiTexCoord2s(gl.funcs, C.GLenum(target), C.GLshort(s), C.GLshort(t)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord2iv.xml -func (gl *GL) MultiTexCoord2iv(target glbase.Enum, v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glMultiTexCoord2iv(gl.funcs, C.GLenum(target), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord2i.xml -func (gl *GL) MultiTexCoord2i(target glbase.Enum, s, t int32) { - C.gl3_2compat_glMultiTexCoord2i(gl.funcs, C.GLenum(target), C.GLint(s), C.GLint(t)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord2fv.xml -func (gl *GL) MultiTexCoord2fv(target glbase.Enum, v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glMultiTexCoord2fv(gl.funcs, C.GLenum(target), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord2f.xml -func (gl *GL) MultiTexCoord2f(target glbase.Enum, s, t float32) { - C.gl3_2compat_glMultiTexCoord2f(gl.funcs, C.GLenum(target), C.GLfloat(s), C.GLfloat(t)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord2dv.xml -func (gl *GL) MultiTexCoord2dv(target glbase.Enum, v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glMultiTexCoord2dv(gl.funcs, C.GLenum(target), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord2d.xml -func (gl *GL) MultiTexCoord2d(target glbase.Enum, s, t float64) { - C.gl3_2compat_glMultiTexCoord2d(gl.funcs, C.GLenum(target), C.GLdouble(s), C.GLdouble(t)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord1sv.xml -func (gl *GL) MultiTexCoord1sv(target glbase.Enum, v []int16) { - C.gl3_2compat_glMultiTexCoord1sv(gl.funcs, C.GLenum(target), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord1s.xml -func (gl *GL) MultiTexCoord1s(target glbase.Enum, s int16) { - C.gl3_2compat_glMultiTexCoord1s(gl.funcs, C.GLenum(target), C.GLshort(s)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord1iv.xml -func (gl *GL) MultiTexCoord1iv(target glbase.Enum, v []int32) { - C.gl3_2compat_glMultiTexCoord1iv(gl.funcs, C.GLenum(target), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord1i.xml -func (gl *GL) MultiTexCoord1i(target glbase.Enum, s int32) { - C.gl3_2compat_glMultiTexCoord1i(gl.funcs, C.GLenum(target), C.GLint(s)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord1fv.xml -func (gl *GL) MultiTexCoord1fv(target glbase.Enum, v []float32) { - C.gl3_2compat_glMultiTexCoord1fv(gl.funcs, C.GLenum(target), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord1f.xml -func (gl *GL) MultiTexCoord1f(target glbase.Enum, s float32) { - C.gl3_2compat_glMultiTexCoord1f(gl.funcs, C.GLenum(target), C.GLfloat(s)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord1dv.xml -func (gl *GL) MultiTexCoord1dv(target glbase.Enum, v []float64) { - C.gl3_2compat_glMultiTexCoord1dv(gl.funcs, C.GLenum(target), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord1d.xml -func (gl *GL) MultiTexCoord1d(target glbase.Enum, s float64) { - C.gl3_2compat_glMultiTexCoord1d(gl.funcs, C.GLenum(target), C.GLdouble(s)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClientActiveTexture.xml -func (gl *GL) ClientActiveTexture(texture glbase.Enum) { - C.gl3_2compat_glClientActiveTexture(gl.funcs, C.GLenum(texture)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glWindowPos3sv.xml -func (gl *GL) WindowPos3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glWindowPos3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glWindowPos3s.xml -func (gl *GL) WindowPos3s(x, y, z int16) { - C.gl3_2compat_glWindowPos3s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glWindowPos3iv.xml -func (gl *GL) WindowPos3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glWindowPos3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glWindowPos3i.xml -func (gl *GL) WindowPos3i(x, y, z int) { - C.gl3_2compat_glWindowPos3i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glWindowPos3fv.xml -func (gl *GL) WindowPos3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glWindowPos3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glWindowPos3f.xml -func (gl *GL) WindowPos3f(x, y, z float32) { - C.gl3_2compat_glWindowPos3f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glWindowPos3dv.xml -func (gl *GL) WindowPos3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glWindowPos3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glWindowPos3d.xml -func (gl *GL) WindowPos3d(x, y, z float64) { - C.gl3_2compat_glWindowPos3d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glWindowPos2sv.xml -func (gl *GL) WindowPos2sv(v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glWindowPos2sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glWindowPos2s.xml -func (gl *GL) WindowPos2s(x, y int16) { - C.gl3_2compat_glWindowPos2s(gl.funcs, C.GLshort(x), C.GLshort(y)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glWindowPos2iv.xml -func (gl *GL) WindowPos2iv(v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glWindowPos2iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glWindowPos2i.xml -func (gl *GL) WindowPos2i(x, y int) { - C.gl3_2compat_glWindowPos2i(gl.funcs, C.GLint(x), C.GLint(y)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glWindowPos2fv.xml -func (gl *GL) WindowPos2fv(v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glWindowPos2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glWindowPos2f.xml -func (gl *GL) WindowPos2f(x, y float32) { - C.gl3_2compat_glWindowPos2f(gl.funcs, C.GLfloat(x), C.GLfloat(y)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glWindowPos2dv.xml -func (gl *GL) WindowPos2dv(v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glWindowPos2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glWindowPos2d.xml -func (gl *GL) WindowPos2d(x, y float64) { - C.gl3_2compat_glWindowPos2d(gl.funcs, C.GLdouble(x), C.GLdouble(y)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSecondaryColorPointer.xml -func (gl *GL) SecondaryColorPointer(size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl3_2compat_glSecondaryColorPointer(gl.funcs, C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSecondaryColor3usv.xml -func (gl *GL) SecondaryColor3usv(v []uint16) { - C.gl3_2compat_glSecondaryColor3usv(gl.funcs, (*C.GLushort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSecondaryColor3us.xml -func (gl *GL) SecondaryColor3us(red, green, blue uint16) { - C.gl3_2compat_glSecondaryColor3us(gl.funcs, C.GLushort(red), C.GLushort(green), C.GLushort(blue)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSecondaryColor3uiv.xml -func (gl *GL) SecondaryColor3uiv(v []uint32) { - C.gl3_2compat_glSecondaryColor3uiv(gl.funcs, (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSecondaryColor3ui.xml -func (gl *GL) SecondaryColor3ui(red, green, blue uint32) { - C.gl3_2compat_glSecondaryColor3ui(gl.funcs, C.GLuint(red), C.GLuint(green), C.GLuint(blue)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSecondaryColor3ubv.xml -func (gl *GL) SecondaryColor3ubv(v []uint8) { - C.gl3_2compat_glSecondaryColor3ubv(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSecondaryColor3ub.xml -func (gl *GL) SecondaryColor3ub(red, green, blue uint8) { - C.gl3_2compat_glSecondaryColor3ub(gl.funcs, C.GLubyte(red), C.GLubyte(green), C.GLubyte(blue)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSecondaryColor3sv.xml -func (gl *GL) SecondaryColor3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glSecondaryColor3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSecondaryColor3s.xml -func (gl *GL) SecondaryColor3s(red, green, blue int16) { - C.gl3_2compat_glSecondaryColor3s(gl.funcs, C.GLshort(red), C.GLshort(green), C.GLshort(blue)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSecondaryColor3iv.xml -func (gl *GL) SecondaryColor3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glSecondaryColor3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSecondaryColor3i.xml -func (gl *GL) SecondaryColor3i(red, green, blue int32) { - C.gl3_2compat_glSecondaryColor3i(gl.funcs, C.GLint(red), C.GLint(green), C.GLint(blue)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSecondaryColor3fv.xml -func (gl *GL) SecondaryColor3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glSecondaryColor3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSecondaryColor3f.xml -func (gl *GL) SecondaryColor3f(red, green, blue float32) { - C.gl3_2compat_glSecondaryColor3f(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSecondaryColor3dv.xml -func (gl *GL) SecondaryColor3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glSecondaryColor3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSecondaryColor3d.xml -func (gl *GL) SecondaryColor3d(red, green, blue float64) { - C.gl3_2compat_glSecondaryColor3d(gl.funcs, C.GLdouble(red), C.GLdouble(green), C.GLdouble(blue)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSecondaryColor3bv.xml -func (gl *GL) SecondaryColor3bv(v []byte) { - C.gl3_2compat_glSecondaryColor3bv(gl.funcs, (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSecondaryColor3b.xml -func (gl *GL) SecondaryColor3b(red, green, blue byte) { - C.gl3_2compat_glSecondaryColor3b(gl.funcs, C.GLbyte(red), C.GLbyte(green), C.GLbyte(blue)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFogCoordPointer.xml -func (gl *GL) FogCoordPointer(gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl3_2compat_glFogCoordPointer(gl.funcs, C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFogCoorddv.xml -func (gl *GL) FogCoorddv(coord []float64) { - C.gl3_2compat_glFogCoorddv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&coord[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFogCoordd.xml -func (gl *GL) FogCoordd(coord float64) { - C.gl3_2compat_glFogCoordd(gl.funcs, C.GLdouble(coord)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFogCoordfv.xml -func (gl *GL) FogCoordfv(coord []float32) { - C.gl3_2compat_glFogCoordfv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&coord[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFogCoordf.xml -func (gl *GL) FogCoordf(coord float32) { - C.gl3_2compat_glFogCoordf(gl.funcs, C.GLfloat(coord)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib4usv.xml -func (gl *GL) VertexAttrib4usv(index glbase.Attrib, v []uint16) { - C.gl3_2compat_glVertexAttrib4usv(gl.funcs, C.GLuint(index), (*C.GLushort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib4uiv.xml -func (gl *GL) VertexAttrib4uiv(index glbase.Attrib, v []uint32) { - C.gl3_2compat_glVertexAttrib4uiv(gl.funcs, C.GLuint(index), (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib4ubv.xml -func (gl *GL) VertexAttrib4ubv(index glbase.Attrib, v []uint8) { - C.gl3_2compat_glVertexAttrib4ubv(gl.funcs, C.GLuint(index), (*C.GLubyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib4sv.xml -func (gl *GL) VertexAttrib4sv(index glbase.Attrib, v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glVertexAttrib4sv(gl.funcs, C.GLuint(index), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib4s.xml -func (gl *GL) VertexAttrib4s(index glbase.Attrib, x, y, z, w int16) { - C.gl3_2compat_glVertexAttrib4s(gl.funcs, C.GLuint(index), C.GLshort(x), C.GLshort(y), C.GLshort(z), C.GLshort(w)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib4iv.xml -func (gl *GL) VertexAttrib4iv(index glbase.Attrib, v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glVertexAttrib4iv(gl.funcs, C.GLuint(index), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib4fv.xml -func (gl *GL) VertexAttrib4fv(index glbase.Attrib, v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glVertexAttrib4fv(gl.funcs, C.GLuint(index), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib4f.xml -func (gl *GL) VertexAttrib4f(index glbase.Attrib, x, y, z, w float32) { - C.gl3_2compat_glVertexAttrib4f(gl.funcs, C.GLuint(index), C.GLfloat(x), C.GLfloat(y), C.GLfloat(z), C.GLfloat(w)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib4dv.xml -func (gl *GL) VertexAttrib4dv(index glbase.Attrib, v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glVertexAttrib4dv(gl.funcs, C.GLuint(index), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib4d.xml -func (gl *GL) VertexAttrib4d(index glbase.Attrib, x, y, z, w float64) { - C.gl3_2compat_glVertexAttrib4d(gl.funcs, C.GLuint(index), C.GLdouble(x), C.GLdouble(y), C.GLdouble(z), C.GLdouble(w)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib4bv.xml -func (gl *GL) VertexAttrib4bv(index glbase.Attrib, v []byte) { - C.gl3_2compat_glVertexAttrib4bv(gl.funcs, C.GLuint(index), (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib4Nusv.xml -func (gl *GL) VertexAttrib4Nusv(index glbase.Attrib, v []uint16) { - C.gl3_2compat_glVertexAttrib4Nusv(gl.funcs, C.GLuint(index), (*C.GLushort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib4Nuiv.xml -func (gl *GL) VertexAttrib4Nuiv(index glbase.Attrib, v []uint32) { - C.gl3_2compat_glVertexAttrib4Nuiv(gl.funcs, C.GLuint(index), (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib4Nubv.xml -func (gl *GL) VertexAttrib4Nubv(index glbase.Attrib, v []uint8) { - C.gl3_2compat_glVertexAttrib4Nubv(gl.funcs, C.GLuint(index), (*C.GLubyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib4Nub.xml -func (gl *GL) VertexAttrib4Nub(index glbase.Attrib, x, y, z, w uint8) { - C.gl3_2compat_glVertexAttrib4Nub(gl.funcs, C.GLuint(index), C.GLubyte(x), C.GLubyte(y), C.GLubyte(z), C.GLubyte(w)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib4Nsv.xml -func (gl *GL) VertexAttrib4Nsv(index glbase.Attrib, v []int16) { - C.gl3_2compat_glVertexAttrib4Nsv(gl.funcs, C.GLuint(index), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib4Niv.xml -func (gl *GL) VertexAttrib4Niv(index glbase.Attrib, v []int32) { - C.gl3_2compat_glVertexAttrib4Niv(gl.funcs, C.GLuint(index), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib4Nbv.xml -func (gl *GL) VertexAttrib4Nbv(index glbase.Attrib, v []byte) { - C.gl3_2compat_glVertexAttrib4Nbv(gl.funcs, C.GLuint(index), (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib3sv.xml -func (gl *GL) VertexAttrib3sv(index glbase.Attrib, v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glVertexAttrib3sv(gl.funcs, C.GLuint(index), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib3s.xml -func (gl *GL) VertexAttrib3s(index glbase.Attrib, x, y, z int16) { - C.gl3_2compat_glVertexAttrib3s(gl.funcs, C.GLuint(index), C.GLshort(x), C.GLshort(y), C.GLshort(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib3fv.xml -func (gl *GL) VertexAttrib3fv(index glbase.Attrib, v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glVertexAttrib3fv(gl.funcs, C.GLuint(index), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib3f.xml -func (gl *GL) VertexAttrib3f(index glbase.Attrib, x, y, z float32) { - C.gl3_2compat_glVertexAttrib3f(gl.funcs, C.GLuint(index), C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib3dv.xml -func (gl *GL) VertexAttrib3dv(index glbase.Attrib, v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glVertexAttrib3dv(gl.funcs, C.GLuint(index), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib3d.xml -func (gl *GL) VertexAttrib3d(index glbase.Attrib, x, y, z float64) { - C.gl3_2compat_glVertexAttrib3d(gl.funcs, C.GLuint(index), C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib2sv.xml -func (gl *GL) VertexAttrib2sv(index glbase.Attrib, v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glVertexAttrib2sv(gl.funcs, C.GLuint(index), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib2s.xml -func (gl *GL) VertexAttrib2s(index glbase.Attrib, x, y int16) { - C.gl3_2compat_glVertexAttrib2s(gl.funcs, C.GLuint(index), C.GLshort(x), C.GLshort(y)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib2fv.xml -func (gl *GL) VertexAttrib2fv(index glbase.Attrib, v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glVertexAttrib2fv(gl.funcs, C.GLuint(index), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib2f.xml -func (gl *GL) VertexAttrib2f(index glbase.Attrib, x, y float32) { - C.gl3_2compat_glVertexAttrib2f(gl.funcs, C.GLuint(index), C.GLfloat(x), C.GLfloat(y)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib2dv.xml -func (gl *GL) VertexAttrib2dv(index glbase.Attrib, v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glVertexAttrib2dv(gl.funcs, C.GLuint(index), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib2d.xml -func (gl *GL) VertexAttrib2d(index glbase.Attrib, x, y float64) { - C.gl3_2compat_glVertexAttrib2d(gl.funcs, C.GLuint(index), C.GLdouble(x), C.GLdouble(y)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib1sv.xml -func (gl *GL) VertexAttrib1sv(index glbase.Attrib, v []int16) { - C.gl3_2compat_glVertexAttrib1sv(gl.funcs, C.GLuint(index), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib1s.xml -func (gl *GL) VertexAttrib1s(index glbase.Attrib, x int16) { - C.gl3_2compat_glVertexAttrib1s(gl.funcs, C.GLuint(index), C.GLshort(x)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib1fv.xml -func (gl *GL) VertexAttrib1fv(index glbase.Attrib, v []float32) { - C.gl3_2compat_glVertexAttrib1fv(gl.funcs, C.GLuint(index), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib1f.xml -func (gl *GL) VertexAttrib1f(index glbase.Attrib, x float32) { - C.gl3_2compat_glVertexAttrib1f(gl.funcs, C.GLuint(index), C.GLfloat(x)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib1dv.xml -func (gl *GL) VertexAttrib1dv(index glbase.Attrib, v []float64) { - C.gl3_2compat_glVertexAttrib1dv(gl.funcs, C.GLuint(index), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib1d.xml -func (gl *GL) VertexAttrib1d(index glbase.Attrib, x float64) { - C.gl3_2compat_glVertexAttrib1d(gl.funcs, C.GLuint(index), C.GLdouble(x)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribI4usv.xml -func (gl *GL) VertexAttribI4usv(index glbase.Attrib, v []uint16) { - C.gl3_2compat_glVertexAttribI4usv(gl.funcs, C.GLuint(index), (*C.GLushort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribI4ubv.xml -func (gl *GL) VertexAttribI4ubv(index glbase.Attrib, v []uint8) { - C.gl3_2compat_glVertexAttribI4ubv(gl.funcs, C.GLuint(index), (*C.GLubyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribI4sv.xml -func (gl *GL) VertexAttribI4sv(index glbase.Attrib, v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glVertexAttribI4sv(gl.funcs, C.GLuint(index), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribI4bv.xml -func (gl *GL) VertexAttribI4bv(index glbase.Attrib, v []byte) { - C.gl3_2compat_glVertexAttribI4bv(gl.funcs, C.GLuint(index), (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribI4uiv.xml -func (gl *GL) VertexAttribI4uiv(index glbase.Attrib, v []uint32) { - C.gl3_2compat_glVertexAttribI4uiv(gl.funcs, C.GLuint(index), (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribI3uiv.xml -func (gl *GL) VertexAttribI3uiv(index glbase.Attrib, v []uint32) { - C.gl3_2compat_glVertexAttribI3uiv(gl.funcs, C.GLuint(index), (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribI2uiv.xml -func (gl *GL) VertexAttribI2uiv(index glbase.Attrib, v []uint32) { - C.gl3_2compat_glVertexAttribI2uiv(gl.funcs, C.GLuint(index), (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribI1uiv.xml -func (gl *GL) VertexAttribI1uiv(index glbase.Attrib, v []uint32) { - C.gl3_2compat_glVertexAttribI1uiv(gl.funcs, C.GLuint(index), (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribI4iv.xml -func (gl *GL) VertexAttribI4iv(index glbase.Attrib, v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glVertexAttribI4iv(gl.funcs, C.GLuint(index), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribI3iv.xml -func (gl *GL) VertexAttribI3iv(index glbase.Attrib, v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glVertexAttribI3iv(gl.funcs, C.GLuint(index), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribI2iv.xml -func (gl *GL) VertexAttribI2iv(index glbase.Attrib, v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_2compat_glVertexAttribI2iv(gl.funcs, C.GLuint(index), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribI1iv.xml -func (gl *GL) VertexAttribI1iv(index glbase.Attrib, v []int32) { - C.gl3_2compat_glVertexAttribI1iv(gl.funcs, C.GLuint(index), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribI4ui.xml -func (gl *GL) VertexAttribI4ui(index glbase.Attrib, x, y, z, w uint32) { - C.gl3_2compat_glVertexAttribI4ui(gl.funcs, C.GLuint(index), C.GLuint(x), C.GLuint(y), C.GLuint(z), C.GLuint(w)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribI3ui.xml -func (gl *GL) VertexAttribI3ui(index glbase.Attrib, x, y, z uint32) { - C.gl3_2compat_glVertexAttribI3ui(gl.funcs, C.GLuint(index), C.GLuint(x), C.GLuint(y), C.GLuint(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribI2ui.xml -func (gl *GL) VertexAttribI2ui(index glbase.Attrib, x, y uint32) { - C.gl3_2compat_glVertexAttribI2ui(gl.funcs, C.GLuint(index), C.GLuint(x), C.GLuint(y)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribI1ui.xml -func (gl *GL) VertexAttribI1ui(index glbase.Attrib, x uint32) { - C.gl3_2compat_glVertexAttribI1ui(gl.funcs, C.GLuint(index), C.GLuint(x)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribI4i.xml -func (gl *GL) VertexAttribI4i(index glbase.Attrib, x, y, z, w int) { - C.gl3_2compat_glVertexAttribI4i(gl.funcs, C.GLuint(index), C.GLint(x), C.GLint(y), C.GLint(z), C.GLint(w)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribI3i.xml -func (gl *GL) VertexAttribI3i(index glbase.Attrib, x, y, z int) { - C.gl3_2compat_glVertexAttribI3i(gl.funcs, C.GLuint(index), C.GLint(x), C.GLint(y), C.GLint(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribI2i.xml -func (gl *GL) VertexAttribI2i(index glbase.Attrib, x, y int) { - C.gl3_2compat_glVertexAttribI2i(gl.funcs, C.GLuint(index), C.GLint(x), C.GLint(y)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribI1i.xml -func (gl *GL) VertexAttribI1i(index glbase.Attrib, x int) { - C.gl3_2compat_glVertexAttribI1i(gl.funcs, C.GLuint(index), C.GLint(x)) -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/3.2core/funcs.cpp b/Godeps/_workspace/src/github.com/obscuren/qml/gl/3.2core/funcs.cpp deleted file mode 100644 index adacb68e18..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/3.2core/funcs.cpp +++ /dev/null @@ -1,1530 +0,0 @@ - -// ** file automatically generated by glgen -- do not edit manually ** - -#include -#include - -#include "funcs.h" - -void *gl3_2core_funcs() { - QOpenGLFunctions_3_2_Core* funcs = QOpenGLContext::currentContext()->versionFunctions(); - if (!funcs) { - return 0; - } - funcs->initializeOpenGLFunctions(); - return funcs; -} - - -void gl3_2core_glViewport(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glViewport(x, y, width, height); -} - -void gl3_2core_glDepthRange(void *_glfuncs, GLdouble nearVal, GLdouble farVal) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthRange(nearVal, farVal); -} - -GLboolean gl3_2core_glIsEnabled(void *_glfuncs, GLenum cap) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsEnabled(cap); -} - -void gl3_2core_glGetTexLevelParameteriv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexLevelParameteriv(target, level, pname, params); -} - -void gl3_2core_glGetTexLevelParameterfv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexLevelParameterfv(target, level, pname, params); -} - -void gl3_2core_glGetTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameteriv(target, pname, params); -} - -void gl3_2core_glGetTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameterfv(target, pname, params); -} - -void gl3_2core_glGetTexImage(void *_glfuncs, GLenum target, GLint level, GLenum format, GLenum gltype, GLvoid* pixels) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexImage(target, level, format, gltype, pixels); -} - -void gl3_2core_glGetIntegerv(void *_glfuncs, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetIntegerv(pname, params); -} - -void gl3_2core_glGetFloatv(void *_glfuncs, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetFloatv(pname, params); -} - -GLenum gl3_2core_glGetError(void *_glfuncs) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetError(); -} - -void gl3_2core_glGetDoublev(void *_glfuncs, GLenum pname, GLdouble* params) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetDoublev(pname, params); -} - -void gl3_2core_glGetBooleanv(void *_glfuncs, GLenum pname, GLboolean* params) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBooleanv(pname, params); -} - -void gl3_2core_glReadPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum gltype, GLvoid* pixels) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glReadPixels(x, y, width, height, format, gltype, pixels); -} - -void gl3_2core_glReadBuffer(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glReadBuffer(mode); -} - -void gl3_2core_glPixelStorei(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelStorei(pname, param); -} - -void gl3_2core_glPixelStoref(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelStoref(pname, param); -} - -void gl3_2core_glDepthFunc(void *_glfuncs, GLenum glfunc) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthFunc(glfunc); -} - -void gl3_2core_glStencilOp(void *_glfuncs, GLenum fail, GLenum zfail, GLenum zpass) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilOp(fail, zfail, zpass); -} - -void gl3_2core_glStencilFunc(void *_glfuncs, GLenum glfunc, GLint ref, GLuint mask) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilFunc(glfunc, ref, mask); -} - -void gl3_2core_glLogicOp(void *_glfuncs, GLenum opcode) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLogicOp(opcode); -} - -void gl3_2core_glBlendFunc(void *_glfuncs, GLenum sfactor, GLenum dfactor) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendFunc(sfactor, dfactor); -} - -void gl3_2core_glFlush(void *_glfuncs) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFlush(); -} - -void gl3_2core_glFinish(void *_glfuncs) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFinish(); -} - -void gl3_2core_glEnable(void *_glfuncs, GLenum cap) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnable(cap); -} - -void gl3_2core_glDisable(void *_glfuncs, GLenum cap) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDisable(cap); -} - -void gl3_2core_glDepthMask(void *_glfuncs, GLboolean flag) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthMask(flag); -} - -void gl3_2core_glColorMask(void *_glfuncs, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorMask(red, green, blue, alpha); -} - -void gl3_2core_glStencilMask(void *_glfuncs, GLuint mask) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilMask(mask); -} - -void gl3_2core_glClearDepth(void *_glfuncs, GLdouble depth) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearDepth(depth); -} - -void gl3_2core_glClearStencil(void *_glfuncs, GLint s) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearStencil(s); -} - -void gl3_2core_glClearColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearColor(red, green, blue, alpha); -} - -void gl3_2core_glClear(void *_glfuncs, GLbitfield mask) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClear(mask); -} - -void gl3_2core_glDrawBuffer(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawBuffer(mode); -} - -void gl3_2core_glTexImage2D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage2D(target, level, internalFormat, width, height, border, format, gltype, pixels); -} - -void gl3_2core_glTexImage1D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage1D(target, level, internalFormat, width, border, format, gltype, pixels); -} - -void gl3_2core_glTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameteriv(target, pname, params); -} - -void gl3_2core_glTexParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint param) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameteri(target, pname, param); -} - -void gl3_2core_glTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterfv(target, pname, params); -} - -void gl3_2core_glTexParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterf(target, pname, param); -} - -void gl3_2core_glScissor(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScissor(x, y, width, height); -} - -void gl3_2core_glPolygonMode(void *_glfuncs, GLenum face, GLenum mode) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPolygonMode(face, mode); -} - -void gl3_2core_glPointSize(void *_glfuncs, GLfloat size) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointSize(size); -} - -void gl3_2core_glLineWidth(void *_glfuncs, GLfloat width) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLineWidth(width); -} - -void gl3_2core_glHint(void *_glfuncs, GLenum target, GLenum mode) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glHint(target, mode); -} - -void gl3_2core_glFrontFace(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFrontFace(mode); -} - -void gl3_2core_glCullFace(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCullFace(mode); -} - -void gl3_2core_glIndexubv(void *_glfuncs, const GLubyte* c) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexubv(c); -} - -void gl3_2core_glIndexub(void *_glfuncs, GLubyte c) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexub(c); -} - -GLboolean gl3_2core_glIsTexture(void *_glfuncs, GLuint texture) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsTexture(texture); -} - -void gl3_2core_glGenTextures(void *_glfuncs, GLsizei n, GLuint* textures) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenTextures(n, textures); -} - -void gl3_2core_glDeleteTextures(void *_glfuncs, GLsizei n, const GLuint* textures) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteTextures(n, textures); -} - -void gl3_2core_glBindTexture(void *_glfuncs, GLenum target, GLuint texture) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindTexture(target, texture); -} - -void gl3_2core_glTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, gltype, pixels); -} - -void gl3_2core_glTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexSubImage1D(target, level, xoffset, width, format, gltype, pixels); -} - -void gl3_2core_glCopyTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height); -} - -void gl3_2core_glCopyTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexSubImage1D(target, level, xoffset, x, y, width); -} - -void gl3_2core_glCopyTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexImage2D(target, level, internalFormat, x, y, width, height, border); -} - -void gl3_2core_glCopyTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexImage1D(target, level, internalFormat, x, y, width, border); -} - -void gl3_2core_glPolygonOffset(void *_glfuncs, GLfloat factor, GLfloat units) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPolygonOffset(factor, units); -} - -void gl3_2core_glDrawElements(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElements(mode, count, gltype, indices); -} - -void gl3_2core_glDrawArrays(void *_glfuncs, GLenum mode, GLint first, GLsizei count) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawArrays(mode, first, count); -} - -void gl3_2core_glCopyTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexSubImage3D(target, level, xoffset, yoffset, zoffset, x, y, width, height); -} - -void gl3_2core_glTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, gltype, pixels); -} - -void gl3_2core_glTexImage3D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage3D(target, level, internalFormat, width, height, depth, border, format, gltype, pixels); -} - -void gl3_2core_glDrawRangeElements(void *_glfuncs, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum gltype, const GLvoid* indices) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawRangeElements(mode, start, end, count, gltype, indices); -} - -void gl3_2core_glBlendEquation(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendEquation(mode); -} - -void gl3_2core_glBlendColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendColor(red, green, blue, alpha); -} - -void gl3_2core_glGetCompressedTexImage(void *_glfuncs, GLenum target, GLint level, GLvoid* img) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetCompressedTexImage(target, level, img); -} - -void gl3_2core_glCompressedTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexSubImage1D(target, level, xoffset, width, format, imageSize, data); -} - -void gl3_2core_glCompressedTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data); -} - -void gl3_2core_glCompressedTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data); -} - -void gl3_2core_glCompressedTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexImage1D(target, level, internalFormat, width, border, imageSize, data); -} - -void gl3_2core_glCompressedTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexImage2D(target, level, internalFormat, width, height, border, imageSize, data); -} - -void gl3_2core_glCompressedTexImage3D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexImage3D(target, level, internalFormat, width, height, depth, border, imageSize, data); -} - -void gl3_2core_glSampleCoverage(void *_glfuncs, GLfloat value, GLboolean invert) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSampleCoverage(value, invert); -} - -void gl3_2core_glActiveTexture(void *_glfuncs, GLenum texture) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glActiveTexture(texture); -} - -void gl3_2core_glPointParameteriv(void *_glfuncs, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameteriv(pname, params); -} - -void gl3_2core_glPointParameteri(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameteri(pname, param); -} - -void gl3_2core_glPointParameterfv(void *_glfuncs, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameterfv(pname, params); -} - -void gl3_2core_glPointParameterf(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameterf(pname, param); -} - -void gl3_2core_glMultiDrawArrays(void *_glfuncs, GLenum mode, const GLint* first, const GLsizei* count, GLsizei drawcount) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiDrawArrays(mode, first, count, drawcount); -} - -void gl3_2core_glBlendFuncSeparate(void *_glfuncs, GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendFuncSeparate(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha); -} - -void gl3_2core_glGetBufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBufferParameteriv(target, pname, params); -} - -GLboolean gl3_2core_glUnmapBuffer(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glUnmapBuffer(target); -} - -void gl3_2core_glGetBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, GLvoid* data) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBufferSubData(target, offset, size, data); -} - -void gl3_2core_glBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBufferSubData(target, offset, size, data); -} - -void gl3_2core_glBufferData(void *_glfuncs, GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBufferData(target, size, data, usage); -} - -GLboolean gl3_2core_glIsBuffer(void *_glfuncs, GLuint buffer) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsBuffer(buffer); -} - -void gl3_2core_glGenBuffers(void *_glfuncs, GLsizei n, GLuint* buffers) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenBuffers(n, buffers); -} - -void gl3_2core_glDeleteBuffers(void *_glfuncs, GLsizei n, const GLuint* buffers) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteBuffers(n, buffers); -} - -void gl3_2core_glBindBuffer(void *_glfuncs, GLenum target, GLuint buffer) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindBuffer(target, buffer); -} - -void gl3_2core_glGetQueryObjectuiv(void *_glfuncs, GLuint id, GLenum pname, GLuint* params) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryObjectuiv(id, pname, params); -} - -void gl3_2core_glGetQueryObjectiv(void *_glfuncs, GLuint id, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryObjectiv(id, pname, params); -} - -void gl3_2core_glGetQueryiv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryiv(target, pname, params); -} - -void gl3_2core_glEndQuery(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndQuery(target); -} - -void gl3_2core_glBeginQuery(void *_glfuncs, GLenum target, GLuint id) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBeginQuery(target, id); -} - -GLboolean gl3_2core_glIsQuery(void *_glfuncs, GLuint id) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsQuery(id); -} - -void gl3_2core_glDeleteQueries(void *_glfuncs, GLsizei n, const GLuint* ids) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteQueries(n, ids); -} - -void gl3_2core_glGenQueries(void *_glfuncs, GLsizei n, GLuint* ids) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenQueries(n, ids); -} - -void gl3_2core_glVertexAttribPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLboolean normalized, GLsizei stride, const GLvoid* offset) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribPointer(index, size, gltype, normalized, stride, offset); -} - -void gl3_2core_glValidateProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glValidateProgram(program); -} - -void gl3_2core_glUniformMatrix4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4fv(location, count, transpose, value); -} - -void gl3_2core_glUniformMatrix3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3fv(location, count, transpose, value); -} - -void gl3_2core_glUniformMatrix2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2fv(location, count, transpose, value); -} - -void gl3_2core_glUniform4iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4iv(location, count, value); -} - -void gl3_2core_glUniform3iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3iv(location, count, value); -} - -void gl3_2core_glUniform2iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2iv(location, count, value); -} - -void gl3_2core_glUniform1iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1iv(location, count, value); -} - -void gl3_2core_glUniform4fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4fv(location, count, value); -} - -void gl3_2core_glUniform3fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3fv(location, count, value); -} - -void gl3_2core_glUniform2fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2fv(location, count, value); -} - -void gl3_2core_glUniform1fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1fv(location, count, value); -} - -void gl3_2core_glUniform4i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2, GLint v3) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4i(location, v0, v1, v2, v3); -} - -void gl3_2core_glUniform3i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3i(location, v0, v1, v2); -} - -void gl3_2core_glUniform2i(void *_glfuncs, GLint location, GLint v0, GLint v1) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2i(location, v0, v1); -} - -void gl3_2core_glUniform1i(void *_glfuncs, GLint location, GLint v0) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1i(location, v0); -} - -void gl3_2core_glUniform4f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4f(location, v0, v1, v2, v3); -} - -void gl3_2core_glUniform3f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3f(location, v0, v1, v2); -} - -void gl3_2core_glUniform2f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2f(location, v0, v1); -} - -void gl3_2core_glUniform1f(void *_glfuncs, GLint location, GLfloat v0) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1f(location, v0); -} - -void gl3_2core_glUseProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUseProgram(program); -} - -void gl3_2core_glShaderSource(void *_glfuncs, GLuint shader, GLsizei count, const GLchar** source, const GLint* length) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glShaderSource(shader, count, source, length); -} - -void gl3_2core_glLinkProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLinkProgram(program); -} - -GLboolean gl3_2core_glIsShader(void *_glfuncs, GLuint shader) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsShader(shader); -} - -GLboolean gl3_2core_glIsProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsProgram(program); -} - -void gl3_2core_glGetVertexAttribiv(void *_glfuncs, GLuint index, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribiv(index, pname, params); -} - -void gl3_2core_glGetVertexAttribfv(void *_glfuncs, GLuint index, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribfv(index, pname, params); -} - -void gl3_2core_glGetVertexAttribdv(void *_glfuncs, GLuint index, GLenum pname, GLdouble* params) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribdv(index, pname, params); -} - -void gl3_2core_glGetUniformiv(void *_glfuncs, GLuint program, GLint location, GLint* params) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetUniformiv(program, location, params); -} - -void gl3_2core_glGetUniformfv(void *_glfuncs, GLuint program, GLint location, GLfloat* params) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetUniformfv(program, location, params); -} - -GLint gl3_2core_glGetUniformLocation(void *_glfuncs, GLuint program, const GLchar* name) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetUniformLocation(program, name); -} - -void gl3_2core_glGetShaderSource(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* source) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetShaderSource(shader, bufSize, length, source); -} - -void gl3_2core_glGetShaderInfoLog(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* infoLog) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetShaderInfoLog(shader, bufSize, length, infoLog); -} - -void gl3_2core_glGetShaderiv(void *_glfuncs, GLuint shader, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetShaderiv(shader, pname, params); -} - -void gl3_2core_glGetProgramInfoLog(void *_glfuncs, GLuint program, GLsizei bufSize, GLsizei* length, GLchar* infoLog) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetProgramInfoLog(program, bufSize, length, infoLog); -} - -void gl3_2core_glGetProgramiv(void *_glfuncs, GLuint program, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetProgramiv(program, pname, params); -} - -GLint gl3_2core_glGetAttribLocation(void *_glfuncs, GLuint program, const GLchar* name) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetAttribLocation(program, name); -} - -void gl3_2core_glGetAttachedShaders(void *_glfuncs, GLuint program, GLsizei maxCount, GLsizei* count, GLuint* obj) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetAttachedShaders(program, maxCount, count, obj); -} - -void gl3_2core_glGetActiveUniform(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniform(program, index, bufSize, length, size, gltype, name); -} - -void gl3_2core_glGetActiveAttrib(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveAttrib(program, index, bufSize, length, size, gltype, name); -} - -void gl3_2core_glEnableVertexAttribArray(void *_glfuncs, GLuint index) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnableVertexAttribArray(index); -} - -void gl3_2core_glDisableVertexAttribArray(void *_glfuncs, GLuint index) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDisableVertexAttribArray(index); -} - -void gl3_2core_glDetachShader(void *_glfuncs, GLuint program, GLuint shader) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDetachShader(program, shader); -} - -void gl3_2core_glDeleteShader(void *_glfuncs, GLuint shader) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteShader(shader); -} - -void gl3_2core_glDeleteProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteProgram(program); -} - -GLuint gl3_2core_glCreateShader(void *_glfuncs, GLenum gltype) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glCreateShader(gltype); -} - -GLuint gl3_2core_glCreateProgram(void *_glfuncs) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glCreateProgram(); -} - -void gl3_2core_glCompileShader(void *_glfuncs, GLuint shader) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompileShader(shader); -} - -void gl3_2core_glBindAttribLocation(void *_glfuncs, GLuint program, GLuint index, const GLchar* name) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindAttribLocation(program, index, name); -} - -void gl3_2core_glAttachShader(void *_glfuncs, GLuint program, GLuint shader) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glAttachShader(program, shader); -} - -void gl3_2core_glStencilMaskSeparate(void *_glfuncs, GLenum face, GLuint mask) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilMaskSeparate(face, mask); -} - -void gl3_2core_glStencilFuncSeparate(void *_glfuncs, GLenum face, GLenum glfunc, GLint ref, GLuint mask) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilFuncSeparate(face, glfunc, ref, mask); -} - -void gl3_2core_glStencilOpSeparate(void *_glfuncs, GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilOpSeparate(face, sfail, dpfail, dppass); -} - -void gl3_2core_glDrawBuffers(void *_glfuncs, GLsizei n, const GLenum* bufs) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawBuffers(n, bufs); -} - -void gl3_2core_glBlendEquationSeparate(void *_glfuncs, GLenum modeRGB, GLenum modeAlpha) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendEquationSeparate(modeRGB, modeAlpha); -} - -void gl3_2core_glUniformMatrix4x3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4x3fv(location, count, transpose, value); -} - -void gl3_2core_glUniformMatrix3x4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3x4fv(location, count, transpose, value); -} - -void gl3_2core_glUniformMatrix4x2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4x2fv(location, count, transpose, value); -} - -void gl3_2core_glUniformMatrix2x4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2x4fv(location, count, transpose, value); -} - -void gl3_2core_glUniformMatrix3x2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3x2fv(location, count, transpose, value); -} - -void gl3_2core_glUniformMatrix2x3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2x3fv(location, count, transpose, value); -} - -GLboolean gl3_2core_glIsVertexArray(void *_glfuncs, GLuint array) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsVertexArray(array); -} - -void gl3_2core_glGenVertexArrays(void *_glfuncs, GLsizei n, GLuint* arrays) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenVertexArrays(n, arrays); -} - -void gl3_2core_glDeleteVertexArrays(void *_glfuncs, GLsizei n, const GLuint* arrays) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteVertexArrays(n, arrays); -} - -void gl3_2core_glBindVertexArray(void *_glfuncs, GLuint array) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindVertexArray(array); -} - -void gl3_2core_glFlushMappedBufferRange(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr length) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFlushMappedBufferRange(target, offset, length); -} - -void gl3_2core_glFramebufferTextureLayer(void *_glfuncs, GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTextureLayer(target, attachment, texture, level, layer); -} - -void gl3_2core_glRenderbufferStorageMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRenderbufferStorageMultisample(target, samples, internalFormat, width, height); -} - -void gl3_2core_glBlitFramebuffer(void *_glfuncs, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter); -} - -void gl3_2core_glGenerateMipmap(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenerateMipmap(target); -} - -void gl3_2core_glGetFramebufferAttachmentParameteriv(void *_glfuncs, GLenum target, GLenum attachment, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetFramebufferAttachmentParameteriv(target, attachment, pname, params); -} - -void gl3_2core_glFramebufferRenderbuffer(void *_glfuncs, GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer); -} - -void gl3_2core_glFramebufferTexture3D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTexture3D(target, attachment, textarget, texture, level, zoffset); -} - -void gl3_2core_glFramebufferTexture2D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTexture2D(target, attachment, textarget, texture, level); -} - -void gl3_2core_glFramebufferTexture1D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTexture1D(target, attachment, textarget, texture, level); -} - -GLenum gl3_2core_glCheckFramebufferStatus(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glCheckFramebufferStatus(target); -} - -void gl3_2core_glGenFramebuffers(void *_glfuncs, GLsizei n, GLuint* framebuffers) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenFramebuffers(n, framebuffers); -} - -void gl3_2core_glDeleteFramebuffers(void *_glfuncs, GLsizei n, const GLuint* framebuffers) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteFramebuffers(n, framebuffers); -} - -void gl3_2core_glBindFramebuffer(void *_glfuncs, GLenum target, GLuint framebuffer) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindFramebuffer(target, framebuffer); -} - -GLboolean gl3_2core_glIsFramebuffer(void *_glfuncs, GLuint framebuffer) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsFramebuffer(framebuffer); -} - -void gl3_2core_glGetRenderbufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetRenderbufferParameteriv(target, pname, params); -} - -void gl3_2core_glRenderbufferStorage(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRenderbufferStorage(target, internalFormat, width, height); -} - -void gl3_2core_glGenRenderbuffers(void *_glfuncs, GLsizei n, GLuint* renderbuffers) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenRenderbuffers(n, renderbuffers); -} - -void gl3_2core_glDeleteRenderbuffers(void *_glfuncs, GLsizei n, const GLuint* renderbuffers) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteRenderbuffers(n, renderbuffers); -} - -void gl3_2core_glBindRenderbuffer(void *_glfuncs, GLenum target, GLuint renderbuffer) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindRenderbuffer(target, renderbuffer); -} - -GLboolean gl3_2core_glIsRenderbuffer(void *_glfuncs, GLuint renderbuffer) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsRenderbuffer(renderbuffer); -} - -void gl3_2core_glClearBufferfi(void *_glfuncs, GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearBufferfi(buffer, drawbuffer, depth, stencil); -} - -void gl3_2core_glClearBufferfv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLfloat* value) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearBufferfv(buffer, drawbuffer, value); -} - -void gl3_2core_glClearBufferuiv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLuint* value) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearBufferuiv(buffer, drawbuffer, value); -} - -void gl3_2core_glClearBufferiv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLint* value) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearBufferiv(buffer, drawbuffer, value); -} - -void gl3_2core_glGetTexParameterIuiv(void *_glfuncs, GLenum target, GLenum pname, GLuint* params) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameterIuiv(target, pname, params); -} - -void gl3_2core_glGetTexParameterIiv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameterIiv(target, pname, params); -} - -void gl3_2core_glTexParameterIuiv(void *_glfuncs, GLenum target, GLenum pname, const GLuint* params) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterIuiv(target, pname, params); -} - -void gl3_2core_glTexParameterIiv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterIiv(target, pname, params); -} - -void gl3_2core_glUniform4uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4uiv(location, count, value); -} - -void gl3_2core_glUniform3uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3uiv(location, count, value); -} - -void gl3_2core_glUniform2uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2uiv(location, count, value); -} - -void gl3_2core_glUniform1uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1uiv(location, count, value); -} - -void gl3_2core_glUniform4ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4ui(location, v0, v1, v2, v3); -} - -void gl3_2core_glUniform3ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1, GLuint v2) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3ui(location, v0, v1, v2); -} - -void gl3_2core_glUniform2ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2ui(location, v0, v1); -} - -void gl3_2core_glUniform1ui(void *_glfuncs, GLint location, GLuint v0) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1ui(location, v0); -} - -GLint gl3_2core_glGetFragDataLocation(void *_glfuncs, GLuint program, const GLchar* name) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetFragDataLocation(program, name); -} - -void gl3_2core_glBindFragDataLocation(void *_glfuncs, GLuint program, GLuint color, const GLchar* name) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindFragDataLocation(program, color, name); -} - -void gl3_2core_glGetUniformuiv(void *_glfuncs, GLuint program, GLint location, GLuint* params) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetUniformuiv(program, location, params); -} - -void gl3_2core_glGetVertexAttribIuiv(void *_glfuncs, GLuint index, GLenum pname, GLuint* params) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribIuiv(index, pname, params); -} - -void gl3_2core_glGetVertexAttribIiv(void *_glfuncs, GLuint index, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribIiv(index, pname, params); -} - -void gl3_2core_glVertexAttribIPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribIPointer(index, size, gltype, stride, pointer); -} - -void gl3_2core_glEndConditionalRender(void *_glfuncs) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndConditionalRender(); -} - -void gl3_2core_glBeginConditionalRender(void *_glfuncs, GLuint id, GLenum mode) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBeginConditionalRender(id, mode); -} - -void gl3_2core_glClampColor(void *_glfuncs, GLenum target, GLenum clamp) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClampColor(target, clamp); -} - -void gl3_2core_glGetTransformFeedbackVarying(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* gltype, GLchar* name) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTransformFeedbackVarying(program, index, bufSize, length, size, gltype, name); -} - -void gl3_2core_glBindBufferBase(void *_glfuncs, GLenum target, GLuint index, GLuint buffer) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindBufferBase(target, index, buffer); -} - -void gl3_2core_glBindBufferRange(void *_glfuncs, GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindBufferRange(target, index, buffer, offset, size); -} - -void gl3_2core_glEndTransformFeedback(void *_glfuncs) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndTransformFeedback(); -} - -void gl3_2core_glBeginTransformFeedback(void *_glfuncs, GLenum primitiveMode) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBeginTransformFeedback(primitiveMode); -} - -GLboolean gl3_2core_glIsEnabledi(void *_glfuncs, GLenum target, GLuint index) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsEnabledi(target, index); -} - -void gl3_2core_glDisablei(void *_glfuncs, GLenum target, GLuint index) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDisablei(target, index); -} - -void gl3_2core_glEnablei(void *_glfuncs, GLenum target, GLuint index) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnablei(target, index); -} - -void gl3_2core_glGetIntegeri_v(void *_glfuncs, GLenum target, GLuint index, GLint* data) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetIntegeri_v(target, index, data); -} - -void gl3_2core_glGetBooleani_v(void *_glfuncs, GLenum target, GLuint index, GLboolean* data) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBooleani_v(target, index, data); -} - -void gl3_2core_glColorMaski(void *_glfuncs, GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorMaski(index, r, g, b, a); -} - -void gl3_2core_glCopyBufferSubData(void *_glfuncs, GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyBufferSubData(readTarget, writeTarget, readOffset, writeOffset, size); -} - -void gl3_2core_glUniformBlockBinding(void *_glfuncs, GLuint program, GLuint v0, GLuint v1) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformBlockBinding(program, v0, v1); -} - -void gl3_2core_glGetActiveUniformBlockName(void *_glfuncs, GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformBlockName) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniformBlockName(program, uniformBlockIndex, bufSize, length, uniformBlockName); -} - -void gl3_2core_glGetActiveUniformBlockiv(void *_glfuncs, GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniformBlockiv(program, uniformBlockIndex, pname, params); -} - -GLuint gl3_2core_glGetUniformBlockIndex(void *_glfuncs, GLuint program, const GLchar* uniformBlockName) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetUniformBlockIndex(program, uniformBlockName); -} - -void gl3_2core_glGetActiveUniformName(void *_glfuncs, GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformName) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniformName(program, uniformIndex, bufSize, length, uniformName); -} - -void gl3_2core_glGetActiveUniformsiv(void *_glfuncs, GLuint program, GLsizei uniformCount, const GLuint* uniformIndices, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniformsiv(program, uniformCount, uniformIndices, pname, params); -} - -void gl3_2core_glPrimitiveRestartIndex(void *_glfuncs, GLuint index) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPrimitiveRestartIndex(index); -} - -void gl3_2core_glTexBuffer(void *_glfuncs, GLenum target, GLenum internalFormat, GLuint buffer) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexBuffer(target, internalFormat, buffer); -} - -void gl3_2core_glDrawElementsInstanced(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLsizei instancecount) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElementsInstanced(mode, count, gltype, indices, instancecount); -} - -void gl3_2core_glDrawArraysInstanced(void *_glfuncs, GLenum mode, GLint first, GLsizei count, GLsizei instancecount) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawArraysInstanced(mode, first, count, instancecount); -} - -void gl3_2core_glSampleMaski(void *_glfuncs, GLuint index, GLbitfield mask) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSampleMaski(index, mask); -} - -void gl3_2core_glGetMultisamplefv(void *_glfuncs, GLenum pname, GLuint index, GLfloat* val) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMultisamplefv(pname, index, val); -} - -void gl3_2core_glTexImage3DMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage3DMultisample(target, samples, internalFormat, width, height, depth, fixedsamplelocations); -} - -void gl3_2core_glTexImage2DMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage2DMultisample(target, samples, internalFormat, width, height, fixedsamplelocations); -} - -void gl3_2core_glGetSynciv(void *_glfuncs, GLsync sync, GLenum pname, GLsizei bufSize, GLsizei* length, GLint* values) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetSynciv(sync, pname, bufSize, length, values); -} - -void gl3_2core_glGetInteger64v(void *_glfuncs, GLenum pname, GLint64* params) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetInteger64v(pname, params); -} - -void gl3_2core_glWaitSync(void *_glfuncs, GLsync sync, GLbitfield flags, GLuint64 timeout) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWaitSync(sync, flags, timeout); -} - -GLenum gl3_2core_glClientWaitSync(void *_glfuncs, GLsync sync, GLbitfield flags, GLuint64 timeout) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glClientWaitSync(sync, flags, timeout); -} - -void gl3_2core_glDeleteSync(void *_glfuncs, GLsync sync) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteSync(sync); -} - -GLboolean gl3_2core_glIsSync(void *_glfuncs, GLsync sync) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsSync(sync); -} - -GLsync gl3_2core_glFenceSync(void *_glfuncs, GLenum condition, GLbitfield flags) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glFenceSync(condition, flags); -} - -void gl3_2core_glProvokingVertex(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProvokingVertex(mode); -} - -void gl3_2core_glDrawElementsInstancedBaseVertex(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLsizei instancecount, GLint basevertex) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElementsInstancedBaseVertex(mode, count, gltype, indices, instancecount, basevertex); -} - -void gl3_2core_glDrawRangeElementsBaseVertex(void *_glfuncs, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum gltype, const GLvoid* indices, GLint basevertex) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawRangeElementsBaseVertex(mode, start, end, count, gltype, indices, basevertex); -} - -void gl3_2core_glDrawElementsBaseVertex(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLint basevertex) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElementsBaseVertex(mode, count, gltype, indices, basevertex); -} - -void gl3_2core_glFramebufferTexture(void *_glfuncs, GLenum target, GLenum attachment, GLuint texture, GLint level) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTexture(target, attachment, texture, level); -} - -void gl3_2core_glGetBufferParameteri64v(void *_glfuncs, GLenum target, GLenum pname, GLint64* params) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBufferParameteri64v(target, pname, params); -} - -void gl3_2core_glGetInteger64i_v(void *_glfuncs, GLenum target, GLuint index, GLint64* data) -{ - QOpenGLFunctions_3_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetInteger64i_v(target, index, data); -} - diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/3.2core/funcs.h b/Godeps/_workspace/src/github.com/obscuren/qml/gl/3.2core/funcs.h deleted file mode 100644 index b0a5c4da47..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/3.2core/funcs.h +++ /dev/null @@ -1,294 +0,0 @@ - -// ** file automatically generated by glgen -- do not edit manually ** - -#ifndef __cplusplus -#include -#include -typedef unsigned int GLenum; -typedef unsigned char GLboolean; -typedef unsigned int GLbitfield; -typedef void GLvoid; -typedef char GLchar; -typedef signed char GLbyte; /* 1-byte signed */ -typedef short GLshort; /* 2-byte signed */ -typedef int GLint; /* 4-byte signed */ -typedef unsigned char GLubyte; /* 1-byte unsigned */ -typedef unsigned short GLushort; /* 2-byte unsigned */ -typedef unsigned int GLuint; /* 4-byte unsigned */ -typedef int GLsizei; /* 4-byte signed */ -typedef float GLfloat; /* single precision float */ -typedef float GLclampf; /* single precision float in [0,1] */ -typedef double GLdouble; /* double precision float */ -typedef double GLclampd; /* double precision float in [0,1] */ -typedef int64_t GLint64; -typedef uint64_t GLuint64; -typedef ptrdiff_t GLintptr; -typedef ptrdiff_t GLsizeiptr; -typedef ptrdiff_t GLintptrARB; -typedef ptrdiff_t GLsizeiptrARB; -typedef struct __GLsync *GLsync; -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -void *gl3_2core_funcs(); - -void gl3_2core_glViewport(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height); -void gl3_2core_glDepthRange(void *_glfuncs, GLdouble nearVal, GLdouble farVal); -GLboolean gl3_2core_glIsEnabled(void *_glfuncs, GLenum cap); -void gl3_2core_glGetTexLevelParameteriv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLint* params); -void gl3_2core_glGetTexLevelParameterfv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLfloat* params); -void gl3_2core_glGetTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl3_2core_glGetTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl3_2core_glGetTexImage(void *_glfuncs, GLenum target, GLint level, GLenum format, GLenum gltype, GLvoid* pixels); -void gl3_2core_glGetIntegerv(void *_glfuncs, GLenum pname, GLint* params); -void gl3_2core_glGetFloatv(void *_glfuncs, GLenum pname, GLfloat* params); -GLenum gl3_2core_glGetError(void *_glfuncs); -void gl3_2core_glGetDoublev(void *_glfuncs, GLenum pname, GLdouble* params); -void gl3_2core_glGetBooleanv(void *_glfuncs, GLenum pname, GLboolean* params); -void gl3_2core_glReadPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum gltype, GLvoid* pixels); -void gl3_2core_glReadBuffer(void *_glfuncs, GLenum mode); -void gl3_2core_glPixelStorei(void *_glfuncs, GLenum pname, GLint param); -void gl3_2core_glPixelStoref(void *_glfuncs, GLenum pname, GLfloat param); -void gl3_2core_glDepthFunc(void *_glfuncs, GLenum glfunc); -void gl3_2core_glStencilOp(void *_glfuncs, GLenum fail, GLenum zfail, GLenum zpass); -void gl3_2core_glStencilFunc(void *_glfuncs, GLenum glfunc, GLint ref, GLuint mask); -void gl3_2core_glLogicOp(void *_glfuncs, GLenum opcode); -void gl3_2core_glBlendFunc(void *_glfuncs, GLenum sfactor, GLenum dfactor); -void gl3_2core_glFlush(void *_glfuncs); -void gl3_2core_glFinish(void *_glfuncs); -void gl3_2core_glEnable(void *_glfuncs, GLenum cap); -void gl3_2core_glDisable(void *_glfuncs, GLenum cap); -void gl3_2core_glDepthMask(void *_glfuncs, GLboolean flag); -void gl3_2core_glColorMask(void *_glfuncs, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); -void gl3_2core_glStencilMask(void *_glfuncs, GLuint mask); -void gl3_2core_glClearDepth(void *_glfuncs, GLdouble depth); -void gl3_2core_glClearStencil(void *_glfuncs, GLint s); -void gl3_2core_glClearColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl3_2core_glClear(void *_glfuncs, GLbitfield mask); -void gl3_2core_glDrawBuffer(void *_glfuncs, GLenum mode); -void gl3_2core_glTexImage2D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl3_2core_glTexImage1D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl3_2core_glTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl3_2core_glTexParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint param); -void gl3_2core_glTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params); -void gl3_2core_glTexParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param); -void gl3_2core_glScissor(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height); -void gl3_2core_glPolygonMode(void *_glfuncs, GLenum face, GLenum mode); -void gl3_2core_glPointSize(void *_glfuncs, GLfloat size); -void gl3_2core_glLineWidth(void *_glfuncs, GLfloat width); -void gl3_2core_glHint(void *_glfuncs, GLenum target, GLenum mode); -void gl3_2core_glFrontFace(void *_glfuncs, GLenum mode); -void gl3_2core_glCullFace(void *_glfuncs, GLenum mode); -void gl3_2core_glIndexubv(void *_glfuncs, const GLubyte* c); -void gl3_2core_glIndexub(void *_glfuncs, GLubyte c); -GLboolean gl3_2core_glIsTexture(void *_glfuncs, GLuint texture); -void gl3_2core_glGenTextures(void *_glfuncs, GLsizei n, GLuint* textures); -void gl3_2core_glDeleteTextures(void *_glfuncs, GLsizei n, const GLuint* textures); -void gl3_2core_glBindTexture(void *_glfuncs, GLenum target, GLuint texture); -void gl3_2core_glTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl3_2core_glTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl3_2core_glCopyTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -void gl3_2core_glCopyTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -void gl3_2core_glCopyTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -void gl3_2core_glCopyTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border); -void gl3_2core_glPolygonOffset(void *_glfuncs, GLfloat factor, GLfloat units); -void gl3_2core_glDrawElements(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices); -void gl3_2core_glDrawArrays(void *_glfuncs, GLenum mode, GLint first, GLsizei count); -void gl3_2core_glCopyTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -void gl3_2core_glTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl3_2core_glTexImage3D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl3_2core_glDrawRangeElements(void *_glfuncs, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum gltype, const GLvoid* indices); -void gl3_2core_glBlendEquation(void *_glfuncs, GLenum mode); -void gl3_2core_glBlendColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl3_2core_glGetCompressedTexImage(void *_glfuncs, GLenum target, GLint level, GLvoid* img); -void gl3_2core_glCompressedTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid* data); -void gl3_2core_glCompressedTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data); -void gl3_2core_glCompressedTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data); -void gl3_2core_glCompressedTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid* data); -void gl3_2core_glCompressedTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data); -void gl3_2core_glCompressedTexImage3D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data); -void gl3_2core_glSampleCoverage(void *_glfuncs, GLfloat value, GLboolean invert); -void gl3_2core_glActiveTexture(void *_glfuncs, GLenum texture); -void gl3_2core_glPointParameteriv(void *_glfuncs, GLenum pname, const GLint* params); -void gl3_2core_glPointParameteri(void *_glfuncs, GLenum pname, GLint param); -void gl3_2core_glPointParameterfv(void *_glfuncs, GLenum pname, const GLfloat* params); -void gl3_2core_glPointParameterf(void *_glfuncs, GLenum pname, GLfloat param); -void gl3_2core_glMultiDrawArrays(void *_glfuncs, GLenum mode, const GLint* first, const GLsizei* count, GLsizei drawcount); -void gl3_2core_glBlendFuncSeparate(void *_glfuncs, GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -void gl3_2core_glGetBufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -GLboolean gl3_2core_glUnmapBuffer(void *_glfuncs, GLenum target); -void gl3_2core_glGetBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, GLvoid* data); -void gl3_2core_glBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data); -void gl3_2core_glBufferData(void *_glfuncs, GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage); -GLboolean gl3_2core_glIsBuffer(void *_glfuncs, GLuint buffer); -void gl3_2core_glGenBuffers(void *_glfuncs, GLsizei n, GLuint* buffers); -void gl3_2core_glDeleteBuffers(void *_glfuncs, GLsizei n, const GLuint* buffers); -void gl3_2core_glBindBuffer(void *_glfuncs, GLenum target, GLuint buffer); -void gl3_2core_glGetQueryObjectuiv(void *_glfuncs, GLuint id, GLenum pname, GLuint* params); -void gl3_2core_glGetQueryObjectiv(void *_glfuncs, GLuint id, GLenum pname, GLint* params); -void gl3_2core_glGetQueryiv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl3_2core_glEndQuery(void *_glfuncs, GLenum target); -void gl3_2core_glBeginQuery(void *_glfuncs, GLenum target, GLuint id); -GLboolean gl3_2core_glIsQuery(void *_glfuncs, GLuint id); -void gl3_2core_glDeleteQueries(void *_glfuncs, GLsizei n, const GLuint* ids); -void gl3_2core_glGenQueries(void *_glfuncs, GLsizei n, GLuint* ids); -void gl3_2core_glVertexAttribPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLboolean normalized, GLsizei stride, const GLvoid* offset); -void gl3_2core_glValidateProgram(void *_glfuncs, GLuint program); -void gl3_2core_glUniformMatrix4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl3_2core_glUniformMatrix3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl3_2core_glUniformMatrix2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl3_2core_glUniform4iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gl3_2core_glUniform3iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gl3_2core_glUniform2iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gl3_2core_glUniform1iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gl3_2core_glUniform4fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gl3_2core_glUniform3fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gl3_2core_glUniform2fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gl3_2core_glUniform1fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gl3_2core_glUniform4i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -void gl3_2core_glUniform3i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2); -void gl3_2core_glUniform2i(void *_glfuncs, GLint location, GLint v0, GLint v1); -void gl3_2core_glUniform1i(void *_glfuncs, GLint location, GLint v0); -void gl3_2core_glUniform4f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -void gl3_2core_glUniform3f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -void gl3_2core_glUniform2f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1); -void gl3_2core_glUniform1f(void *_glfuncs, GLint location, GLfloat v0); -void gl3_2core_glUseProgram(void *_glfuncs, GLuint program); -void gl3_2core_glShaderSource(void *_glfuncs, GLuint shader, GLsizei count, const GLchar** source, const GLint* length); -void gl3_2core_glLinkProgram(void *_glfuncs, GLuint program); -GLboolean gl3_2core_glIsShader(void *_glfuncs, GLuint shader); -GLboolean gl3_2core_glIsProgram(void *_glfuncs, GLuint program); -void gl3_2core_glGetVertexAttribiv(void *_glfuncs, GLuint index, GLenum pname, GLint* params); -void gl3_2core_glGetVertexAttribfv(void *_glfuncs, GLuint index, GLenum pname, GLfloat* params); -void gl3_2core_glGetVertexAttribdv(void *_glfuncs, GLuint index, GLenum pname, GLdouble* params); -void gl3_2core_glGetUniformiv(void *_glfuncs, GLuint program, GLint location, GLint* params); -void gl3_2core_glGetUniformfv(void *_glfuncs, GLuint program, GLint location, GLfloat* params); -GLint gl3_2core_glGetUniformLocation(void *_glfuncs, GLuint program, const GLchar* name); -void gl3_2core_glGetShaderSource(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* source); -void gl3_2core_glGetShaderInfoLog(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* infoLog); -void gl3_2core_glGetShaderiv(void *_glfuncs, GLuint shader, GLenum pname, GLint* params); -void gl3_2core_glGetProgramInfoLog(void *_glfuncs, GLuint program, GLsizei bufSize, GLsizei* length, GLchar* infoLog); -void gl3_2core_glGetProgramiv(void *_glfuncs, GLuint program, GLenum pname, GLint* params); -GLint gl3_2core_glGetAttribLocation(void *_glfuncs, GLuint program, const GLchar* name); -void gl3_2core_glGetAttachedShaders(void *_glfuncs, GLuint program, GLsizei maxCount, GLsizei* count, GLuint* obj); -void gl3_2core_glGetActiveUniform(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name); -void gl3_2core_glGetActiveAttrib(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name); -void gl3_2core_glEnableVertexAttribArray(void *_glfuncs, GLuint index); -void gl3_2core_glDisableVertexAttribArray(void *_glfuncs, GLuint index); -void gl3_2core_glDetachShader(void *_glfuncs, GLuint program, GLuint shader); -void gl3_2core_glDeleteShader(void *_glfuncs, GLuint shader); -void gl3_2core_glDeleteProgram(void *_glfuncs, GLuint program); -GLuint gl3_2core_glCreateShader(void *_glfuncs, GLenum gltype); -GLuint gl3_2core_glCreateProgram(void *_glfuncs); -void gl3_2core_glCompileShader(void *_glfuncs, GLuint shader); -void gl3_2core_glBindAttribLocation(void *_glfuncs, GLuint program, GLuint index, const GLchar* name); -void gl3_2core_glAttachShader(void *_glfuncs, GLuint program, GLuint shader); -void gl3_2core_glStencilMaskSeparate(void *_glfuncs, GLenum face, GLuint mask); -void gl3_2core_glStencilFuncSeparate(void *_glfuncs, GLenum face, GLenum glfunc, GLint ref, GLuint mask); -void gl3_2core_glStencilOpSeparate(void *_glfuncs, GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); -void gl3_2core_glDrawBuffers(void *_glfuncs, GLsizei n, const GLenum* bufs); -void gl3_2core_glBlendEquationSeparate(void *_glfuncs, GLenum modeRGB, GLenum modeAlpha); -void gl3_2core_glUniformMatrix4x3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl3_2core_glUniformMatrix3x4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl3_2core_glUniformMatrix4x2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl3_2core_glUniformMatrix2x4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl3_2core_glUniformMatrix3x2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl3_2core_glUniformMatrix2x3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -GLboolean gl3_2core_glIsVertexArray(void *_glfuncs, GLuint array); -void gl3_2core_glGenVertexArrays(void *_glfuncs, GLsizei n, GLuint* arrays); -void gl3_2core_glDeleteVertexArrays(void *_glfuncs, GLsizei n, const GLuint* arrays); -void gl3_2core_glBindVertexArray(void *_glfuncs, GLuint array); -void gl3_2core_glFlushMappedBufferRange(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr length); -void gl3_2core_glFramebufferTextureLayer(void *_glfuncs, GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); -void gl3_2core_glRenderbufferStorageMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height); -void gl3_2core_glBlitFramebuffer(void *_glfuncs, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -void gl3_2core_glGenerateMipmap(void *_glfuncs, GLenum target); -void gl3_2core_glGetFramebufferAttachmentParameteriv(void *_glfuncs, GLenum target, GLenum attachment, GLenum pname, GLint* params); -void gl3_2core_glFramebufferRenderbuffer(void *_glfuncs, GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -void gl3_2core_glFramebufferTexture3D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -void gl3_2core_glFramebufferTexture2D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -void gl3_2core_glFramebufferTexture1D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLenum gl3_2core_glCheckFramebufferStatus(void *_glfuncs, GLenum target); -void gl3_2core_glGenFramebuffers(void *_glfuncs, GLsizei n, GLuint* framebuffers); -void gl3_2core_glDeleteFramebuffers(void *_glfuncs, GLsizei n, const GLuint* framebuffers); -void gl3_2core_glBindFramebuffer(void *_glfuncs, GLenum target, GLuint framebuffer); -GLboolean gl3_2core_glIsFramebuffer(void *_glfuncs, GLuint framebuffer); -void gl3_2core_glGetRenderbufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl3_2core_glRenderbufferStorage(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height); -void gl3_2core_glGenRenderbuffers(void *_glfuncs, GLsizei n, GLuint* renderbuffers); -void gl3_2core_glDeleteRenderbuffers(void *_glfuncs, GLsizei n, const GLuint* renderbuffers); -void gl3_2core_glBindRenderbuffer(void *_glfuncs, GLenum target, GLuint renderbuffer); -GLboolean gl3_2core_glIsRenderbuffer(void *_glfuncs, GLuint renderbuffer); -void gl3_2core_glClearBufferfi(void *_glfuncs, GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); -void gl3_2core_glClearBufferfv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLfloat* value); -void gl3_2core_glClearBufferuiv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLuint* value); -void gl3_2core_glClearBufferiv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLint* value); -void gl3_2core_glGetTexParameterIuiv(void *_glfuncs, GLenum target, GLenum pname, GLuint* params); -void gl3_2core_glGetTexParameterIiv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl3_2core_glTexParameterIuiv(void *_glfuncs, GLenum target, GLenum pname, const GLuint* params); -void gl3_2core_glTexParameterIiv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl3_2core_glUniform4uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value); -void gl3_2core_glUniform3uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value); -void gl3_2core_glUniform2uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value); -void gl3_2core_glUniform1uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value); -void gl3_2core_glUniform4ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -void gl3_2core_glUniform3ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1, GLuint v2); -void gl3_2core_glUniform2ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1); -void gl3_2core_glUniform1ui(void *_glfuncs, GLint location, GLuint v0); -GLint gl3_2core_glGetFragDataLocation(void *_glfuncs, GLuint program, const GLchar* name); -void gl3_2core_glBindFragDataLocation(void *_glfuncs, GLuint program, GLuint color, const GLchar* name); -void gl3_2core_glGetUniformuiv(void *_glfuncs, GLuint program, GLint location, GLuint* params); -void gl3_2core_glGetVertexAttribIuiv(void *_glfuncs, GLuint index, GLenum pname, GLuint* params); -void gl3_2core_glGetVertexAttribIiv(void *_glfuncs, GLuint index, GLenum pname, GLint* params); -void gl3_2core_glVertexAttribIPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl3_2core_glEndConditionalRender(void *_glfuncs); -void gl3_2core_glBeginConditionalRender(void *_glfuncs, GLuint id, GLenum mode); -void gl3_2core_glClampColor(void *_glfuncs, GLenum target, GLenum clamp); -void gl3_2core_glGetTransformFeedbackVarying(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* gltype, GLchar* name); -void gl3_2core_glBindBufferBase(void *_glfuncs, GLenum target, GLuint index, GLuint buffer); -void gl3_2core_glBindBufferRange(void *_glfuncs, GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -void gl3_2core_glEndTransformFeedback(void *_glfuncs); -void gl3_2core_glBeginTransformFeedback(void *_glfuncs, GLenum primitiveMode); -GLboolean gl3_2core_glIsEnabledi(void *_glfuncs, GLenum target, GLuint index); -void gl3_2core_glDisablei(void *_glfuncs, GLenum target, GLuint index); -void gl3_2core_glEnablei(void *_glfuncs, GLenum target, GLuint index); -void gl3_2core_glGetIntegeri_v(void *_glfuncs, GLenum target, GLuint index, GLint* data); -void gl3_2core_glGetBooleani_v(void *_glfuncs, GLenum target, GLuint index, GLboolean* data); -void gl3_2core_glColorMaski(void *_glfuncs, GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); -void gl3_2core_glCopyBufferSubData(void *_glfuncs, GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); -void gl3_2core_glUniformBlockBinding(void *_glfuncs, GLuint program, GLuint v0, GLuint v1); -void gl3_2core_glGetActiveUniformBlockName(void *_glfuncs, GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformBlockName); -void gl3_2core_glGetActiveUniformBlockiv(void *_glfuncs, GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint* params); -GLuint gl3_2core_glGetUniformBlockIndex(void *_glfuncs, GLuint program, const GLchar* uniformBlockName); -void gl3_2core_glGetActiveUniformName(void *_glfuncs, GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformName); -void gl3_2core_glGetActiveUniformsiv(void *_glfuncs, GLuint program, GLsizei uniformCount, const GLuint* uniformIndices, GLenum pname, GLint* params); -void gl3_2core_glPrimitiveRestartIndex(void *_glfuncs, GLuint index); -void gl3_2core_glTexBuffer(void *_glfuncs, GLenum target, GLenum internalFormat, GLuint buffer); -void gl3_2core_glDrawElementsInstanced(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLsizei instancecount); -void gl3_2core_glDrawArraysInstanced(void *_glfuncs, GLenum mode, GLint first, GLsizei count, GLsizei instancecount); -void gl3_2core_glSampleMaski(void *_glfuncs, GLuint index, GLbitfield mask); -void gl3_2core_glGetMultisamplefv(void *_glfuncs, GLenum pname, GLuint index, GLfloat* val); -void gl3_2core_glTexImage3DMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); -void gl3_2core_glTexImage2DMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); -void gl3_2core_glGetSynciv(void *_glfuncs, GLsync sync, GLenum pname, GLsizei bufSize, GLsizei* length, GLint* values); -void gl3_2core_glGetInteger64v(void *_glfuncs, GLenum pname, GLint64* params); -void gl3_2core_glWaitSync(void *_glfuncs, GLsync sync, GLbitfield flags, GLuint64 timeout); -GLenum gl3_2core_glClientWaitSync(void *_glfuncs, GLsync sync, GLbitfield flags, GLuint64 timeout); -void gl3_2core_glDeleteSync(void *_glfuncs, GLsync sync); -GLboolean gl3_2core_glIsSync(void *_glfuncs, GLsync sync); -GLsync gl3_2core_glFenceSync(void *_glfuncs, GLenum condition, GLbitfield flags); -void gl3_2core_glProvokingVertex(void *_glfuncs, GLenum mode); -void gl3_2core_glDrawElementsInstancedBaseVertex(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLsizei instancecount, GLint basevertex); -void gl3_2core_glDrawRangeElementsBaseVertex(void *_glfuncs, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum gltype, const GLvoid* indices, GLint basevertex); -void gl3_2core_glDrawElementsBaseVertex(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLint basevertex); -void gl3_2core_glFramebufferTexture(void *_glfuncs, GLenum target, GLenum attachment, GLuint texture, GLint level); -void gl3_2core_glGetBufferParameteri64v(void *_glfuncs, GLenum target, GLenum pname, GLint64* params); -void gl3_2core_glGetInteger64i_v(void *_glfuncs, GLenum target, GLuint index, GLint64* data); - - -#ifdef __cplusplus -} // extern "C" -#endif diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/3.2core/gl.go b/Godeps/_workspace/src/github.com/obscuren/qml/gl/3.2core/gl.go deleted file mode 100644 index 80805299a5..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/3.2core/gl.go +++ /dev/null @@ -1,4729 +0,0 @@ -// ** file automatically generated by glgen -- do not edit manually ** - -package GL - -// #cgo CXXFLAGS: -std=c++0x -pedantic-errors -Wall -fno-strict-aliasing -// #cgo LDFLAGS: -lstdc++ -// #cgo pkg-config: Qt5Core Qt5OpenGL -// -// #include "funcs.h" -// -// void free(void*); -// -import "C" - -import ( - "fmt" - "reflect" - "unsafe" - - "gopkg.in/qml.v1/gl/glbase" -) - -// API returns a value that offers methods matching the OpenGL version 3.2 API. -// -// The returned API must not be used after the provided OpenGL context becomes invalid. -func API(context glbase.Contexter) *GL { - gl := &GL{} - gl.funcs = C.gl3_2core_funcs() - if gl.funcs == nil { - panic(fmt.Errorf("OpenGL version 3.2 is not available")) - } - return gl -} - -// GL implements the OpenGL version 3.2 API. Values of this -// type must be created via the API function, and it must not be used after -// the associated OpenGL context becomes invalid. -type GL struct { - funcs unsafe.Pointer -} - -const ( - FALSE = 0 - TRUE = 1 - NONE = 0 - - BYTE = 0x1400 - UNSIGNED_BYTE = 0x1401 - SHORT = 0x1402 - UNSIGNED_SHORT = 0x1403 - INT = 0x1404 - UNSIGNED_INT = 0x1405 - FLOAT = 0x1406 - DOUBLE = 0x140A - HALF_FLOAT = 0x140B - - COLOR_BUFFER_BIT = 0x00004000 - DEPTH_BUFFER_BIT = 0x00000100 - STENCIL_BUFFER_BIT = 0x00000400 - - ALWAYS = 0x0207 - EQUAL = 0x0202 - GEQUAL = 0x0206 - GREATER = 0x0204 - LEQUAL = 0x0203 - LESS = 0x0201 - NEVER = 0x0200 - NOTEQUAL = 0x0205 - - DST_ALPHA = 0x0304 - ONE = 1 - ONE_MINUS_DST_ALPHA = 0x0305 - ONE_MINUS_SRC_ALPHA = 0x0303 - ONE_MINUS_SRC_COLOR = 0x0301 - SRC_ALPHA = 0x0302 - SRC_COLOR = 0x0300 - ZERO = 0 - - DST_COLOR = 0x0306 - ONE_MINUS_DST_COLOR = 0x0307 - SRC_ALPHA_SATURATE = 0x0308 - - CLIP_DISTANCE0 = 0x3000 - CLIP_DISTANCE1 = 0x3001 - CLIP_DISTANCE2 = 0x3002 - CLIP_DISTANCE3 = 0x3003 - CLIP_DISTANCE4 = 0x3004 - CLIP_DISTANCE5 = 0x3005 - CLIP_DISTANCE6 = 0x3006 - CLIP_DISTANCE7 = 0x3007 - - BACK = 0x0405 - FRONT = 0x0404 - FRONT_AND_BACK = 0x0408 - - CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT = 0x00000001 - - CONTEXT_COMPATIBILITY_PROFILE_BIT = 0x00000002 - CONTEXT_CORE_PROFILE_BIT = 0x00000001 - - BACK_LEFT = 0x0402 - BACK_RIGHT = 0x0403 - FRONT_LEFT = 0x0400 - FRONT_RIGHT = 0x0401 - LEFT = 0x0406 - RIGHT = 0x0407 - - BLEND = 0x0BE2 - COLOR_LOGIC_OP = 0x0BF2 - CULL_FACE = 0x0B44 - DEPTH_TEST = 0x0B71 - DITHER = 0x0BD0 - LINE_SMOOTH = 0x0B20 - POLYGON_OFFSET_FILL = 0x8037 - POLYGON_OFFSET_LINE = 0x2A02 - POLYGON_OFFSET_POINT = 0x2A01 - POLYGON_SMOOTH = 0x0B41 - SCISSOR_TEST = 0x0C11 - STENCIL_TEST = 0x0B90 - TEXTURE_1D = 0x0DE0 - TEXTURE_2D = 0x0DE1 - - INVALID_ENUM = 0x0500 - INVALID_FRAMEBUFFER_OPERATION = 0x0506 - INVALID_OPERATION = 0x0502 - INVALID_VALUE = 0x0501 - NO_ERROR = 0 - OUT_OF_MEMORY = 0x0505 - - LINEAR = 0x2601 - - CCW = 0x0901 - CW = 0x0900 - - ALIASED_LINE_WIDTH_RANGE = 0x846E - BLEND_DST = 0x0BE0 - BLEND_SRC = 0x0BE1 - COLOR_CLEAR_VALUE = 0x0C22 - COLOR_WRITEMASK = 0x0C23 - CULL_FACE_MODE = 0x0B45 - DEPTH_CLEAR_VALUE = 0x0B73 - DEPTH_FUNC = 0x0B74 - DEPTH_RANGE = 0x0B70 - DEPTH_WRITEMASK = 0x0B72 - DOUBLEBUFFER = 0x0C32 - DRAW_BUFFER = 0x0C01 - FRONT_FACE = 0x0B46 - LINE_SMOOTH_HINT = 0x0C52 - LINE_WIDTH = 0x0B21 - LINE_WIDTH_GRANULARITY = 0x0B23 - LINE_WIDTH_RANGE = 0x0B22 - LOGIC_OP_MODE = 0x0BF0 - MAX_CLIP_DISTANCES = 0x0D32 - MAX_TEXTURE_SIZE = 0x0D33 - MAX_VIEWPORT_DIMS = 0x0D3A - PACK_ALIGNMENT = 0x0D05 - PACK_LSB_FIRST = 0x0D01 - PACK_ROW_LENGTH = 0x0D02 - PACK_SKIP_PIXELS = 0x0D04 - PACK_SKIP_ROWS = 0x0D03 - PACK_SWAP_BYTES = 0x0D00 - POINT_SIZE = 0x0B11 - POINT_SIZE_GRANULARITY = 0x0B13 - POINT_SIZE_RANGE = 0x0B12 - POLYGON_MODE = 0x0B40 - POLYGON_OFFSET_FACTOR = 0x8038 - POLYGON_OFFSET_UNITS = 0x2A00 - POLYGON_SMOOTH_HINT = 0x0C53 - READ_BUFFER = 0x0C02 - SCISSOR_BOX = 0x0C10 - SMOOTH_LINE_WIDTH_GRANULARITY = 0x0B23 - SMOOTH_LINE_WIDTH_RANGE = 0x0B22 - SMOOTH_POINT_SIZE_GRANULARITY = 0x0B13 - SMOOTH_POINT_SIZE_RANGE = 0x0B12 - STENCIL_CLEAR_VALUE = 0x0B91 - STENCIL_FAIL = 0x0B94 - STENCIL_FUNC = 0x0B92 - STENCIL_PASS_DEPTH_FAIL = 0x0B95 - STENCIL_PASS_DEPTH_PASS = 0x0B96 - STENCIL_REF = 0x0B97 - STENCIL_VALUE_MASK = 0x0B93 - STENCIL_WRITEMASK = 0x0B98 - STEREO = 0x0C33 - SUBPIXEL_BITS = 0x0D50 - TEXTURE_BINDING_1D = 0x8068 - TEXTURE_BINDING_2D = 0x8069 - TEXTURE_BINDING_3D = 0x806A - UNPACK_ALIGNMENT = 0x0CF5 - UNPACK_LSB_FIRST = 0x0CF1 - UNPACK_ROW_LENGTH = 0x0CF2 - UNPACK_SKIP_PIXELS = 0x0CF4 - UNPACK_SKIP_ROWS = 0x0CF3 - UNPACK_SWAP_BYTES = 0x0CF0 - VIEWPORT = 0x0BA2 - - TEXTURE_ALPHA_SIZE = 0x805F - TEXTURE_BLUE_SIZE = 0x805E - TEXTURE_BORDER_COLOR = 0x1004 - TEXTURE_GREEN_SIZE = 0x805D - TEXTURE_HEIGHT = 0x1001 - TEXTURE_INTERNAL_FORMAT = 0x1003 - TEXTURE_MAG_FILTER = 0x2800 - TEXTURE_MIN_FILTER = 0x2801 - TEXTURE_RED_SIZE = 0x805C - TEXTURE_WIDTH = 0x1000 - TEXTURE_WRAP_S = 0x2802 - TEXTURE_WRAP_T = 0x2803 - - DONT_CARE = 0x1100 - FASTEST = 0x1101 - NICEST = 0x1102 - - FRAGMENT_SHADER_DERIVATIVE_HINT = 0x8B8B - TEXTURE_COMPRESSION_HINT = 0x84EF - - REPLACE = 0x1E01 - - AND = 0x1501 - AND_INVERTED = 0x1504 - AND_REVERSE = 0x1502 - CLEAR = 0x1500 - COPY = 0x1503 - COPY_INVERTED = 0x150C - EQUIV = 0x1509 - INVERT = 0x150A - NAND = 0x150E - NOOP = 0x1505 - NOR = 0x1508 - OR = 0x1507 - OR_INVERTED = 0x150D - OR_REVERSE = 0x150B - SET = 0x150F - XOR = 0x1506 - - MAP_FLUSH_EXPLICIT_BIT = 0x0010 - MAP_INVALIDATE_BUFFER_BIT = 0x0008 - MAP_INVALIDATE_RANGE_BIT = 0x0004 - MAP_READ_BIT = 0x0001 - MAP_UNSYNCHRONIZED_BIT = 0x0020 - MAP_WRITE_BIT = 0x0002 - - TEXTURE = 0x1702 - - LINE = 0x1B01 - POINT = 0x1B00 - - FILL = 0x1B02 - - COLOR = 0x1800 - DEPTH = 0x1801 - STENCIL = 0x1802 - - ALPHA = 0x1906 - BLUE = 0x1905 - DEPTH_COMPONENT = 0x1902 - GREEN = 0x1904 - RED = 0x1903 - RGB = 0x1907 - RGBA = 0x1908 - STENCIL_INDEX = 0x1901 - - R3_G3_B2 = 0x2A10 - RGB10 = 0x8052 - RGB10_A2 = 0x8059 - RGB12 = 0x8053 - RGB16 = 0x8054 - RGB4 = 0x804F - RGB5 = 0x8050 - RGB5_A1 = 0x8057 - RGB8 = 0x8051 - RGBA12 = 0x805A - RGBA16 = 0x805B - RGBA2 = 0x8055 - RGBA4 = 0x8056 - RGBA8 = 0x8058 - - PACK_IMAGE_HEIGHT = 0x806C - PACK_SKIP_IMAGES = 0x806B - UNPACK_IMAGE_HEIGHT = 0x806E - UNPACK_SKIP_IMAGES = 0x806D - - UNSIGNED_BYTE_3_3_2 = 0x8032 - UNSIGNED_INT_10_10_10_2 = 0x8036 - UNSIGNED_INT_8_8_8_8 = 0x8035 - UNSIGNED_SHORT_4_4_4_4 = 0x8033 - UNSIGNED_SHORT_5_5_5_1 = 0x8034 - - POINT_FADE_THRESHOLD_SIZE = 0x8128 - - LINES = 0x0001 - LINES_ADJACENCY = 0x000A - LINE_LOOP = 0x0002 - LINE_STRIP = 0x0003 - LINE_STRIP_ADJACENCY = 0x000B - POINTS = 0x0000 - TRIANGLES = 0x0004 - TRIANGLES_ADJACENCY = 0x000C - TRIANGLE_FAN = 0x0006 - TRIANGLE_STRIP = 0x0005 - TRIANGLE_STRIP_ADJACENCY = 0x000D - - DECR = 0x1E03 - INCR = 0x1E02 - KEEP = 0x1E00 - - EXTENSIONS = 0x1F03 - RENDERER = 0x1F01 - VENDOR = 0x1F00 - VERSION = 0x1F02 - - NEAREST = 0x2600 - - LINEAR_MIPMAP_LINEAR = 0x2703 - LINEAR_MIPMAP_NEAREST = 0x2701 - NEAREST_MIPMAP_LINEAR = 0x2702 - NEAREST_MIPMAP_NEAREST = 0x2700 - - TEXTURE_WRAP_R = 0x8072 - - PROXY_TEXTURE_1D = 0x8063 - PROXY_TEXTURE_2D = 0x8064 - PROXY_TEXTURE_3D = 0x8070 - TEXTURE_3D = 0x806F - TEXTURE_BASE_LEVEL = 0x813C - TEXTURE_MAX_LEVEL = 0x813D - TEXTURE_MAX_LOD = 0x813B - TEXTURE_MIN_LOD = 0x813A - - CLAMP_TO_BORDER = 0x812D - CLAMP_TO_EDGE = 0x812F - REPEAT = 0x2901 - - SYNC_FLUSH_COMMANDS_BIT = 0x00000001 - INVALID_INDEX = 0xFFFFFFFF - TIMEOUT_IGNORED = 0xFFFFFFFFFFFFFFFF - CONSTANT_COLOR = 0x8001 - ONE_MINUS_CONSTANT_COLOR = 0x8002 - CONSTANT_ALPHA = 0x8003 - ONE_MINUS_CONSTANT_ALPHA = 0x8004 - FUNC_ADD = 0x8006 - MIN = 0x8007 - MAX = 0x8008 - BLEND_EQUATION_RGB = 0x8009 - FUNC_SUBTRACT = 0x800A - FUNC_REVERSE_SUBTRACT = 0x800B - TEXTURE_DEPTH = 0x8071 - MAX_3D_TEXTURE_SIZE = 0x8073 - MULTISAMPLE = 0x809D - SAMPLE_ALPHA_TO_COVERAGE = 0x809E - SAMPLE_ALPHA_TO_ONE = 0x809F - SAMPLE_COVERAGE = 0x80A0 - SAMPLE_BUFFERS = 0x80A8 - SAMPLES = 0x80A9 - SAMPLE_COVERAGE_VALUE = 0x80AA - SAMPLE_COVERAGE_INVERT = 0x80AB - BLEND_DST_RGB = 0x80C8 - BLEND_SRC_RGB = 0x80C9 - BLEND_DST_ALPHA = 0x80CA - BLEND_SRC_ALPHA = 0x80CB - BGR = 0x80E0 - BGRA = 0x80E1 - MAX_ELEMENTS_VERTICES = 0x80E8 - MAX_ELEMENTS_INDICES = 0x80E9 - DEPTH_COMPONENT16 = 0x81A5 - DEPTH_COMPONENT24 = 0x81A6 - DEPTH_COMPONENT32 = 0x81A7 - FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING = 0x8210 - FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE = 0x8211 - FRAMEBUFFER_ATTACHMENT_RED_SIZE = 0x8212 - FRAMEBUFFER_ATTACHMENT_GREEN_SIZE = 0x8213 - FRAMEBUFFER_ATTACHMENT_BLUE_SIZE = 0x8214 - FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE = 0x8215 - FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE = 0x8216 - FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE = 0x8217 - FRAMEBUFFER_DEFAULT = 0x8218 - FRAMEBUFFER_UNDEFINED = 0x8219 - DEPTH_STENCIL_ATTACHMENT = 0x821A - MAJOR_VERSION = 0x821B - MINOR_VERSION = 0x821C - NUM_EXTENSIONS = 0x821D - CONTEXT_FLAGS = 0x821E - COMPRESSED_RED = 0x8225 - COMPRESSED_RG = 0x8226 - RG = 0x8227 - RG_INTEGER = 0x8228 - R8 = 0x8229 - R16 = 0x822A - RG8 = 0x822B - RG16 = 0x822C - R16F = 0x822D - R32F = 0x822E - RG16F = 0x822F - RG32F = 0x8230 - R8I = 0x8231 - R8UI = 0x8232 - R16I = 0x8233 - R16UI = 0x8234 - R32I = 0x8235 - R32UI = 0x8236 - RG8I = 0x8237 - RG8UI = 0x8238 - RG16I = 0x8239 - RG16UI = 0x823A - RG32I = 0x823B - RG32UI = 0x823C - UNSIGNED_BYTE_2_3_3_REV = 0x8362 - UNSIGNED_SHORT_5_6_5 = 0x8363 - UNSIGNED_SHORT_5_6_5_REV = 0x8364 - UNSIGNED_SHORT_4_4_4_4_REV = 0x8365 - UNSIGNED_SHORT_1_5_5_5_REV = 0x8366 - UNSIGNED_INT_8_8_8_8_REV = 0x8367 - UNSIGNED_INT_2_10_10_10_REV = 0x8368 - MIRRORED_REPEAT = 0x8370 - TEXTURE0 = 0x84C0 - TEXTURE1 = 0x84C1 - TEXTURE2 = 0x84C2 - TEXTURE3 = 0x84C3 - TEXTURE4 = 0x84C4 - TEXTURE5 = 0x84C5 - TEXTURE6 = 0x84C6 - TEXTURE7 = 0x84C7 - TEXTURE8 = 0x84C8 - TEXTURE9 = 0x84C9 - TEXTURE10 = 0x84CA - TEXTURE11 = 0x84CB - TEXTURE12 = 0x84CC - TEXTURE13 = 0x84CD - TEXTURE14 = 0x84CE - TEXTURE15 = 0x84CF - TEXTURE16 = 0x84D0 - TEXTURE17 = 0x84D1 - TEXTURE18 = 0x84D2 - TEXTURE19 = 0x84D3 - TEXTURE20 = 0x84D4 - TEXTURE21 = 0x84D5 - TEXTURE22 = 0x84D6 - TEXTURE23 = 0x84D7 - TEXTURE24 = 0x84D8 - TEXTURE25 = 0x84D9 - TEXTURE26 = 0x84DA - TEXTURE27 = 0x84DB - TEXTURE28 = 0x84DC - TEXTURE29 = 0x84DD - TEXTURE30 = 0x84DE - TEXTURE31 = 0x84DF - ACTIVE_TEXTURE = 0x84E0 - MAX_RENDERBUFFER_SIZE = 0x84E8 - COMPRESSED_RGB = 0x84ED - COMPRESSED_RGBA = 0x84EE - TEXTURE_RECTANGLE = 0x84F5 - TEXTURE_BINDING_RECTANGLE = 0x84F6 - PROXY_TEXTURE_RECTANGLE = 0x84F7 - MAX_RECTANGLE_TEXTURE_SIZE = 0x84F8 - DEPTH_STENCIL = 0x84F9 - UNSIGNED_INT_24_8 = 0x84FA - MAX_TEXTURE_LOD_BIAS = 0x84FD - TEXTURE_LOD_BIAS = 0x8501 - INCR_WRAP = 0x8507 - DECR_WRAP = 0x8508 - TEXTURE_CUBE_MAP = 0x8513 - TEXTURE_BINDING_CUBE_MAP = 0x8514 - TEXTURE_CUBE_MAP_POSITIVE_X = 0x8515 - TEXTURE_CUBE_MAP_NEGATIVE_X = 0x8516 - TEXTURE_CUBE_MAP_POSITIVE_Y = 0x8517 - TEXTURE_CUBE_MAP_NEGATIVE_Y = 0x8518 - TEXTURE_CUBE_MAP_POSITIVE_Z = 0x8519 - TEXTURE_CUBE_MAP_NEGATIVE_Z = 0x851A - PROXY_TEXTURE_CUBE_MAP = 0x851B - MAX_CUBE_MAP_TEXTURE_SIZE = 0x851C - SRC1_ALPHA = 0x8589 - VERTEX_ARRAY_BINDING = 0x85B5 - VERTEX_ATTRIB_ARRAY_ENABLED = 0x8622 - VERTEX_ATTRIB_ARRAY_SIZE = 0x8623 - VERTEX_ATTRIB_ARRAY_STRIDE = 0x8624 - VERTEX_ATTRIB_ARRAY_TYPE = 0x8625 - CURRENT_VERTEX_ATTRIB = 0x8626 - VERTEX_PROGRAM_POINT_SIZE = 0x8642 - PROGRAM_POINT_SIZE = 0x8642 - VERTEX_ATTRIB_ARRAY_POINTER = 0x8645 - DEPTH_CLAMP = 0x864F - TEXTURE_COMPRESSED_IMAGE_SIZE = 0x86A0 - TEXTURE_COMPRESSED = 0x86A1 - NUM_COMPRESSED_TEXTURE_FORMATS = 0x86A2 - COMPRESSED_TEXTURE_FORMATS = 0x86A3 - BUFFER_SIZE = 0x8764 - BUFFER_USAGE = 0x8765 - STENCIL_BACK_FUNC = 0x8800 - STENCIL_BACK_FAIL = 0x8801 - STENCIL_BACK_PASS_DEPTH_FAIL = 0x8802 - STENCIL_BACK_PASS_DEPTH_PASS = 0x8803 - RGBA32F = 0x8814 - RGB32F = 0x8815 - RGBA16F = 0x881A - RGB16F = 0x881B - MAX_DRAW_BUFFERS = 0x8824 - DRAW_BUFFER0 = 0x8825 - DRAW_BUFFER1 = 0x8826 - DRAW_BUFFER2 = 0x8827 - DRAW_BUFFER3 = 0x8828 - DRAW_BUFFER4 = 0x8829 - DRAW_BUFFER5 = 0x882A - DRAW_BUFFER6 = 0x882B - DRAW_BUFFER7 = 0x882C - DRAW_BUFFER8 = 0x882D - DRAW_BUFFER9 = 0x882E - DRAW_BUFFER10 = 0x882F - DRAW_BUFFER11 = 0x8830 - DRAW_BUFFER12 = 0x8831 - DRAW_BUFFER13 = 0x8832 - DRAW_BUFFER14 = 0x8833 - DRAW_BUFFER15 = 0x8834 - BLEND_EQUATION_ALPHA = 0x883D - TEXTURE_DEPTH_SIZE = 0x884A - TEXTURE_COMPARE_MODE = 0x884C - TEXTURE_COMPARE_FUNC = 0x884D - COMPARE_REF_TO_TEXTURE = 0x884E - TEXTURE_CUBE_MAP_SEAMLESS = 0x884F - QUERY_COUNTER_BITS = 0x8864 - CURRENT_QUERY = 0x8865 - QUERY_RESULT = 0x8866 - QUERY_RESULT_AVAILABLE = 0x8867 - MAX_VERTEX_ATTRIBS = 0x8869 - VERTEX_ATTRIB_ARRAY_NORMALIZED = 0x886A - MAX_TEXTURE_IMAGE_UNITS = 0x8872 - ARRAY_BUFFER = 0x8892 - ELEMENT_ARRAY_BUFFER = 0x8893 - ARRAY_BUFFER_BINDING = 0x8894 - ELEMENT_ARRAY_BUFFER_BINDING = 0x8895 - VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = 0x889F - READ_ONLY = 0x88B8 - WRITE_ONLY = 0x88B9 - READ_WRITE = 0x88BA - BUFFER_ACCESS = 0x88BB - BUFFER_MAPPED = 0x88BC - BUFFER_MAP_POINTER = 0x88BD - STREAM_DRAW = 0x88E0 - STREAM_READ = 0x88E1 - STREAM_COPY = 0x88E2 - STATIC_DRAW = 0x88E4 - STATIC_READ = 0x88E5 - STATIC_COPY = 0x88E6 - DYNAMIC_DRAW = 0x88E8 - DYNAMIC_READ = 0x88E9 - DYNAMIC_COPY = 0x88EA - PIXEL_PACK_BUFFER = 0x88EB - PIXEL_UNPACK_BUFFER = 0x88EC - PIXEL_PACK_BUFFER_BINDING = 0x88ED - PIXEL_UNPACK_BUFFER_BINDING = 0x88EF - DEPTH24_STENCIL8 = 0x88F0 - TEXTURE_STENCIL_SIZE = 0x88F1 - VERTEX_ATTRIB_ARRAY_INTEGER = 0x88FD - MAX_ARRAY_TEXTURE_LAYERS = 0x88FF - MIN_PROGRAM_TEXEL_OFFSET = 0x8904 - MAX_PROGRAM_TEXEL_OFFSET = 0x8905 - SAMPLES_PASSED = 0x8914 - GEOMETRY_VERTICES_OUT = 0x8916 - GEOMETRY_INPUT_TYPE = 0x8917 - GEOMETRY_OUTPUT_TYPE = 0x8918 - CLAMP_READ_COLOR = 0x891C - FIXED_ONLY = 0x891D - UNIFORM_BUFFER = 0x8A11 - UNIFORM_BUFFER_BINDING = 0x8A28 - UNIFORM_BUFFER_START = 0x8A29 - UNIFORM_BUFFER_SIZE = 0x8A2A - MAX_VERTEX_UNIFORM_BLOCKS = 0x8A2B - MAX_GEOMETRY_UNIFORM_BLOCKS = 0x8A2C - MAX_FRAGMENT_UNIFORM_BLOCKS = 0x8A2D - MAX_COMBINED_UNIFORM_BLOCKS = 0x8A2E - MAX_UNIFORM_BUFFER_BINDINGS = 0x8A2F - MAX_UNIFORM_BLOCK_SIZE = 0x8A30 - MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS = 0x8A31 - MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS = 0x8A32 - MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS = 0x8A33 - UNIFORM_BUFFER_OFFSET_ALIGNMENT = 0x8A34 - ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH = 0x8A35 - ACTIVE_UNIFORM_BLOCKS = 0x8A36 - UNIFORM_TYPE = 0x8A37 - UNIFORM_SIZE = 0x8A38 - UNIFORM_NAME_LENGTH = 0x8A39 - UNIFORM_BLOCK_INDEX = 0x8A3A - UNIFORM_OFFSET = 0x8A3B - UNIFORM_ARRAY_STRIDE = 0x8A3C - UNIFORM_MATRIX_STRIDE = 0x8A3D - UNIFORM_IS_ROW_MAJOR = 0x8A3E - UNIFORM_BLOCK_BINDING = 0x8A3F - UNIFORM_BLOCK_DATA_SIZE = 0x8A40 - UNIFORM_BLOCK_NAME_LENGTH = 0x8A41 - UNIFORM_BLOCK_ACTIVE_UNIFORMS = 0x8A42 - UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES = 0x8A43 - UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER = 0x8A44 - UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER = 0x8A45 - UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER = 0x8A46 - FRAGMENT_SHADER = 0x8B30 - VERTEX_SHADER = 0x8B31 - MAX_FRAGMENT_UNIFORM_COMPONENTS = 0x8B49 - MAX_VERTEX_UNIFORM_COMPONENTS = 0x8B4A - MAX_VARYING_FLOATS = 0x8B4B - MAX_VARYING_COMPONENTS = 0x8B4B - MAX_VERTEX_TEXTURE_IMAGE_UNITS = 0x8B4C - MAX_COMBINED_TEXTURE_IMAGE_UNITS = 0x8B4D - SHADER_TYPE = 0x8B4F - FLOAT_VEC2 = 0x8B50 - FLOAT_VEC3 = 0x8B51 - FLOAT_VEC4 = 0x8B52 - INT_VEC2 = 0x8B53 - INT_VEC3 = 0x8B54 - INT_VEC4 = 0x8B55 - BOOL = 0x8B56 - BOOL_VEC2 = 0x8B57 - BOOL_VEC3 = 0x8B58 - BOOL_VEC4 = 0x8B59 - FLOAT_MAT2 = 0x8B5A - FLOAT_MAT3 = 0x8B5B - FLOAT_MAT4 = 0x8B5C - SAMPLER_1D = 0x8B5D - SAMPLER_2D = 0x8B5E - SAMPLER_3D = 0x8B5F - SAMPLER_CUBE = 0x8B60 - SAMPLER_1D_SHADOW = 0x8B61 - SAMPLER_2D_SHADOW = 0x8B62 - SAMPLER_2D_RECT = 0x8B63 - SAMPLER_2D_RECT_SHADOW = 0x8B64 - FLOAT_MAT2x3 = 0x8B65 - FLOAT_MAT2x4 = 0x8B66 - FLOAT_MAT3x2 = 0x8B67 - FLOAT_MAT3x4 = 0x8B68 - FLOAT_MAT4x2 = 0x8B69 - FLOAT_MAT4x3 = 0x8B6A - DELETE_STATUS = 0x8B80 - COMPILE_STATUS = 0x8B81 - LINK_STATUS = 0x8B82 - VALIDATE_STATUS = 0x8B83 - INFO_LOG_LENGTH = 0x8B84 - ATTACHED_SHADERS = 0x8B85 - ACTIVE_UNIFORMS = 0x8B86 - ACTIVE_UNIFORM_MAX_LENGTH = 0x8B87 - SHADER_SOURCE_LENGTH = 0x8B88 - ACTIVE_ATTRIBUTES = 0x8B89 - ACTIVE_ATTRIBUTE_MAX_LENGTH = 0x8B8A - SHADING_LANGUAGE_VERSION = 0x8B8C - CURRENT_PROGRAM = 0x8B8D - TEXTURE_RED_TYPE = 0x8C10 - TEXTURE_GREEN_TYPE = 0x8C11 - TEXTURE_BLUE_TYPE = 0x8C12 - TEXTURE_ALPHA_TYPE = 0x8C13 - TEXTURE_DEPTH_TYPE = 0x8C16 - UNSIGNED_NORMALIZED = 0x8C17 - TEXTURE_1D_ARRAY = 0x8C18 - PROXY_TEXTURE_1D_ARRAY = 0x8C19 - TEXTURE_2D_ARRAY = 0x8C1A - PROXY_TEXTURE_2D_ARRAY = 0x8C1B - TEXTURE_BINDING_1D_ARRAY = 0x8C1C - TEXTURE_BINDING_2D_ARRAY = 0x8C1D - MAX_GEOMETRY_TEXTURE_IMAGE_UNITS = 0x8C29 - TEXTURE_BUFFER = 0x8C2A - MAX_TEXTURE_BUFFER_SIZE = 0x8C2B - TEXTURE_BINDING_BUFFER = 0x8C2C - TEXTURE_BUFFER_DATA_STORE_BINDING = 0x8C2D - R11F_G11F_B10F = 0x8C3A - UNSIGNED_INT_10F_11F_11F_REV = 0x8C3B - RGB9_E5 = 0x8C3D - UNSIGNED_INT_5_9_9_9_REV = 0x8C3E - TEXTURE_SHARED_SIZE = 0x8C3F - SRGB = 0x8C40 - SRGB8 = 0x8C41 - SRGB_ALPHA = 0x8C42 - SRGB8_ALPHA8 = 0x8C43 - COMPRESSED_SRGB = 0x8C48 - COMPRESSED_SRGB_ALPHA = 0x8C49 - TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH = 0x8C76 - TRANSFORM_FEEDBACK_BUFFER_MODE = 0x8C7F - MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS = 0x8C80 - TRANSFORM_FEEDBACK_VARYINGS = 0x8C83 - TRANSFORM_FEEDBACK_BUFFER_START = 0x8C84 - TRANSFORM_FEEDBACK_BUFFER_SIZE = 0x8C85 - PRIMITIVES_GENERATED = 0x8C87 - TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN = 0x8C88 - RASTERIZER_DISCARD = 0x8C89 - MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS = 0x8C8A - MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS = 0x8C8B - INTERLEAVED_ATTRIBS = 0x8C8C - SEPARATE_ATTRIBS = 0x8C8D - TRANSFORM_FEEDBACK_BUFFER = 0x8C8E - TRANSFORM_FEEDBACK_BUFFER_BINDING = 0x8C8F - POINT_SPRITE_COORD_ORIGIN = 0x8CA0 - LOWER_LEFT = 0x8CA1 - UPPER_LEFT = 0x8CA2 - STENCIL_BACK_REF = 0x8CA3 - STENCIL_BACK_VALUE_MASK = 0x8CA4 - STENCIL_BACK_WRITEMASK = 0x8CA5 - DRAW_FRAMEBUFFER_BINDING = 0x8CA6 - FRAMEBUFFER_BINDING = 0x8CA6 - RENDERBUFFER_BINDING = 0x8CA7 - READ_FRAMEBUFFER = 0x8CA8 - DRAW_FRAMEBUFFER = 0x8CA9 - READ_FRAMEBUFFER_BINDING = 0x8CAA - RENDERBUFFER_SAMPLES = 0x8CAB - DEPTH_COMPONENT32F = 0x8CAC - DEPTH32F_STENCIL8 = 0x8CAD - FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE = 0x8CD0 - FRAMEBUFFER_ATTACHMENT_OBJECT_NAME = 0x8CD1 - FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL = 0x8CD2 - FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE = 0x8CD3 - FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER = 0x8CD4 - FRAMEBUFFER_COMPLETE = 0x8CD5 - FRAMEBUFFER_INCOMPLETE_ATTACHMENT = 0x8CD6 - FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = 0x8CD7 - FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER = 0x8CDB - FRAMEBUFFER_INCOMPLETE_READ_BUFFER = 0x8CDC - FRAMEBUFFER_UNSUPPORTED = 0x8CDD - MAX_COLOR_ATTACHMENTS = 0x8CDF - COLOR_ATTACHMENT0 = 0x8CE0 - COLOR_ATTACHMENT1 = 0x8CE1 - COLOR_ATTACHMENT2 = 0x8CE2 - COLOR_ATTACHMENT3 = 0x8CE3 - COLOR_ATTACHMENT4 = 0x8CE4 - COLOR_ATTACHMENT5 = 0x8CE5 - COLOR_ATTACHMENT6 = 0x8CE6 - COLOR_ATTACHMENT7 = 0x8CE7 - COLOR_ATTACHMENT8 = 0x8CE8 - COLOR_ATTACHMENT9 = 0x8CE9 - COLOR_ATTACHMENT10 = 0x8CEA - COLOR_ATTACHMENT11 = 0x8CEB - COLOR_ATTACHMENT12 = 0x8CEC - COLOR_ATTACHMENT13 = 0x8CED - COLOR_ATTACHMENT14 = 0x8CEE - COLOR_ATTACHMENT15 = 0x8CEF - DEPTH_ATTACHMENT = 0x8D00 - STENCIL_ATTACHMENT = 0x8D20 - FRAMEBUFFER = 0x8D40 - RENDERBUFFER = 0x8D41 - RENDERBUFFER_WIDTH = 0x8D42 - RENDERBUFFER_HEIGHT = 0x8D43 - RENDERBUFFER_INTERNAL_FORMAT = 0x8D44 - STENCIL_INDEX1 = 0x8D46 - STENCIL_INDEX4 = 0x8D47 - STENCIL_INDEX8 = 0x8D48 - STENCIL_INDEX16 = 0x8D49 - RENDERBUFFER_RED_SIZE = 0x8D50 - RENDERBUFFER_GREEN_SIZE = 0x8D51 - RENDERBUFFER_BLUE_SIZE = 0x8D52 - RENDERBUFFER_ALPHA_SIZE = 0x8D53 - RENDERBUFFER_DEPTH_SIZE = 0x8D54 - RENDERBUFFER_STENCIL_SIZE = 0x8D55 - FRAMEBUFFER_INCOMPLETE_MULTISAMPLE = 0x8D56 - MAX_SAMPLES = 0x8D57 - RGBA32UI = 0x8D70 - RGB32UI = 0x8D71 - RGBA16UI = 0x8D76 - RGB16UI = 0x8D77 - RGBA8UI = 0x8D7C - RGB8UI = 0x8D7D - RGBA32I = 0x8D82 - RGB32I = 0x8D83 - RGBA16I = 0x8D88 - RGB16I = 0x8D89 - RGBA8I = 0x8D8E - RGB8I = 0x8D8F - RED_INTEGER = 0x8D94 - GREEN_INTEGER = 0x8D95 - BLUE_INTEGER = 0x8D96 - RGB_INTEGER = 0x8D98 - RGBA_INTEGER = 0x8D99 - BGR_INTEGER = 0x8D9A - BGRA_INTEGER = 0x8D9B - FRAMEBUFFER_ATTACHMENT_LAYERED = 0x8DA7 - FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS = 0x8DA8 - FLOAT_32_UNSIGNED_INT_24_8_REV = 0x8DAD - FRAMEBUFFER_SRGB = 0x8DB9 - COMPRESSED_RED_RGTC1 = 0x8DBB - COMPRESSED_SIGNED_RED_RGTC1 = 0x8DBC - COMPRESSED_RG_RGTC2 = 0x8DBD - COMPRESSED_SIGNED_RG_RGTC2 = 0x8DBE - SAMPLER_1D_ARRAY = 0x8DC0 - SAMPLER_2D_ARRAY = 0x8DC1 - SAMPLER_BUFFER = 0x8DC2 - SAMPLER_1D_ARRAY_SHADOW = 0x8DC3 - SAMPLER_2D_ARRAY_SHADOW = 0x8DC4 - SAMPLER_CUBE_SHADOW = 0x8DC5 - UNSIGNED_INT_VEC2 = 0x8DC6 - UNSIGNED_INT_VEC3 = 0x8DC7 - UNSIGNED_INT_VEC4 = 0x8DC8 - INT_SAMPLER_1D = 0x8DC9 - INT_SAMPLER_2D = 0x8DCA - INT_SAMPLER_3D = 0x8DCB - INT_SAMPLER_CUBE = 0x8DCC - INT_SAMPLER_2D_RECT = 0x8DCD - INT_SAMPLER_1D_ARRAY = 0x8DCE - INT_SAMPLER_2D_ARRAY = 0x8DCF - INT_SAMPLER_BUFFER = 0x8DD0 - UNSIGNED_INT_SAMPLER_1D = 0x8DD1 - UNSIGNED_INT_SAMPLER_2D = 0x8DD2 - UNSIGNED_INT_SAMPLER_3D = 0x8DD3 - UNSIGNED_INT_SAMPLER_CUBE = 0x8DD4 - UNSIGNED_INT_SAMPLER_2D_RECT = 0x8DD5 - UNSIGNED_INT_SAMPLER_1D_ARRAY = 0x8DD6 - UNSIGNED_INT_SAMPLER_2D_ARRAY = 0x8DD7 - UNSIGNED_INT_SAMPLER_BUFFER = 0x8DD8 - GEOMETRY_SHADER = 0x8DD9 - MAX_GEOMETRY_UNIFORM_COMPONENTS = 0x8DDF - MAX_GEOMETRY_OUTPUT_VERTICES = 0x8DE0 - MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS = 0x8DE1 - QUERY_WAIT = 0x8E13 - QUERY_NO_WAIT = 0x8E14 - QUERY_BY_REGION_WAIT = 0x8E15 - QUERY_BY_REGION_NO_WAIT = 0x8E16 - QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION = 0x8E4C - FIRST_VERTEX_CONVENTION = 0x8E4D - LAST_VERTEX_CONVENTION = 0x8E4E - PROVOKING_VERTEX = 0x8E4F - SAMPLE_POSITION = 0x8E50 - SAMPLE_MASK = 0x8E51 - SAMPLE_MASK_VALUE = 0x8E52 - MAX_SAMPLE_MASK_WORDS = 0x8E59 - COPY_READ_BUFFER = 0x8F36 - COPY_WRITE_BUFFER = 0x8F37 - R8_SNORM = 0x8F94 - RG8_SNORM = 0x8F95 - RGB8_SNORM = 0x8F96 - RGBA8_SNORM = 0x8F97 - R16_SNORM = 0x8F98 - RG16_SNORM = 0x8F99 - RGB16_SNORM = 0x8F9A - RGBA16_SNORM = 0x8F9B - SIGNED_NORMALIZED = 0x8F9C - PRIMITIVE_RESTART = 0x8F9D - PRIMITIVE_RESTART_INDEX = 0x8F9E - TEXTURE_2D_MULTISAMPLE = 0x9100 - PROXY_TEXTURE_2D_MULTISAMPLE = 0x9101 - TEXTURE_2D_MULTISAMPLE_ARRAY = 0x9102 - PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY = 0x9103 - TEXTURE_BINDING_2D_MULTISAMPLE = 0x9104 - TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY = 0x9105 - TEXTURE_SAMPLES = 0x9106 - TEXTURE_FIXED_SAMPLE_LOCATIONS = 0x9107 - SAMPLER_2D_MULTISAMPLE = 0x9108 - INT_SAMPLER_2D_MULTISAMPLE = 0x9109 - UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE = 0x910A - SAMPLER_2D_MULTISAMPLE_ARRAY = 0x910B - INT_SAMPLER_2D_MULTISAMPLE_ARRAY = 0x910C - UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY = 0x910D - MAX_COLOR_TEXTURE_SAMPLES = 0x910E - MAX_DEPTH_TEXTURE_SAMPLES = 0x910F - MAX_INTEGER_SAMPLES = 0x9110 - MAX_SERVER_WAIT_TIMEOUT = 0x9111 - OBJECT_TYPE = 0x9112 - SYNC_CONDITION = 0x9113 - SYNC_STATUS = 0x9114 - SYNC_FLAGS = 0x9115 - SYNC_FENCE = 0x9116 - SYNC_GPU_COMMANDS_COMPLETE = 0x9117 - UNSIGNALED = 0x9118 - SIGNALED = 0x9119 - ALREADY_SIGNALED = 0x911A - TIMEOUT_EXPIRED = 0x911B - CONDITION_SATISFIED = 0x911C - WAIT_FAILED = 0x911D - BUFFER_ACCESS_FLAGS = 0x911F - BUFFER_MAP_LENGTH = 0x9120 - BUFFER_MAP_OFFSET = 0x9121 - MAX_VERTEX_OUTPUT_COMPONENTS = 0x9122 - MAX_GEOMETRY_INPUT_COMPONENTS = 0x9123 - MAX_GEOMETRY_OUTPUT_COMPONENTS = 0x9124 - MAX_FRAGMENT_INPUT_COMPONENTS = 0x9125 - CONTEXT_PROFILE_MASK = 0x9126 -) - -// https://www.opengl.org/sdk/docs/man3/xhtml/glViewport.xml -func (gl *GL) Viewport(x, y, width, height int) { - C.gl3_2core_glViewport(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// DepthRange specifies the mapping of depth values from normalized device -// coordinates to window coordinates. -// -// Parameter nearVal specifies the mapping of the near clipping plane to window -// coordinates (defaults to 0), while farVal specifies the mapping of the far -// clipping plane to window coordinates (defaults to 1). -// -// After clipping and division by w, depth coordinates range from -1 to 1, -// corresponding to the near and far clipping planes. DepthRange specifies a -// linear mapping of the normalized depth coordinates in this range to window -// depth coordinates. Regardless of the actual depth buffer implementation, -// window coordinate depth values are treated as though they range from 0 through 1 -// (like color components). Thus, the values accepted by DepthRange are both -// clamped to this range before they are accepted. -// -// The default setting of (0, 1) maps the near plane to 0 and the far plane to 1. -// With this mapping, the depth buffer range is fully utilized. -// -// It is not necessary that nearVal be less than farVal. Reverse mappings such as -// nearVal 1, and farVal 0 are acceptable. -// -// GL.INVALID_OPERATION is generated if DepthRange is executed between the -// execution of Begin and the corresponding execution of End. -func (gl *GL) DepthRange(nearVal, farVal float64) { - C.gl3_2core_glDepthRange(gl.funcs, C.GLdouble(nearVal), C.GLdouble(farVal)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsEnabled.xml -func (gl *GL) IsEnabled(cap glbase.Enum) bool { - glresult := C.gl3_2core_glIsEnabled(gl.funcs, C.GLenum(cap)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetTexLevelParameteriv.xml -func (gl *GL) GetTexLevelParameteriv(target glbase.Enum, level int, pname glbase.Enum, params []int32) { - C.gl3_2core_glGetTexLevelParameteriv(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetTexLevelParameterfv.xml -func (gl *GL) GetTexLevelParameterfv(target glbase.Enum, level int, pname glbase.Enum, params []float32) { - C.gl3_2core_glGetTexLevelParameterfv(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetTexParameteriv.xml -func (gl *GL) GetTexParameteriv(target, pname glbase.Enum, params []int32) { - C.gl3_2core_glGetTexParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetTexParameterfv.xml -func (gl *GL) GetTexParameterfv(target, pname glbase.Enum, params []float32) { - C.gl3_2core_glGetTexParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetTexImage.xml -func (gl *GL) GetTexImage(target glbase.Enum, level int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl3_2core_glGetTexImage(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetIntegerv.xml -func (gl *GL) GetIntegerv(pname glbase.Enum, params []int32) { - C.gl3_2core_glGetIntegerv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetFloatv.xml -func (gl *GL) GetFloatv(pname glbase.Enum, params []float32) { - C.gl3_2core_glGetFloatv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetError.xml -func (gl *GL) GetError() glbase.Enum { - glresult := C.gl3_2core_glGetError(gl.funcs) - return glbase.Enum(glresult) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetDoublev.xml -func (gl *GL) GetDoublev(pname glbase.Enum, params []float64) { - C.gl3_2core_glGetDoublev(gl.funcs, C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetBooleanv.xml -func (gl *GL) GetBooleanv(pname glbase.Enum, params []bool) { - C.gl3_2core_glGetBooleanv(gl.funcs, C.GLenum(pname), (*C.GLboolean)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glReadPixels.xml -func (gl *GL) ReadPixels(x, y, width, height int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl3_2core_glReadPixels(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glReadBuffer.xml -func (gl *GL) ReadBuffer(mode glbase.Enum) { - C.gl3_2core_glReadBuffer(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPixelStorei.xml -func (gl *GL) PixelStorei(pname glbase.Enum, param int32) { - C.gl3_2core_glPixelStorei(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPixelStoref.xml -func (gl *GL) PixelStoref(pname glbase.Enum, param float32) { - C.gl3_2core_glPixelStoref(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDepthFunc.xml -func (gl *GL) DepthFunc(glfunc glbase.Enum) { - C.gl3_2core_glDepthFunc(gl.funcs, C.GLenum(glfunc)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glStencilOp.xml -func (gl *GL) StencilOp(fail, zfail, zpass glbase.Enum) { - C.gl3_2core_glStencilOp(gl.funcs, C.GLenum(fail), C.GLenum(zfail), C.GLenum(zpass)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glStencilFunc.xml -func (gl *GL) StencilFunc(glfunc glbase.Enum, ref int32, mask uint32) { - C.gl3_2core_glStencilFunc(gl.funcs, C.GLenum(glfunc), C.GLint(ref), C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glLogicOp.xml -func (gl *GL) LogicOp(opcode glbase.Enum) { - C.gl3_2core_glLogicOp(gl.funcs, C.GLenum(opcode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBlendFunc.xml -func (gl *GL) BlendFunc(sfactor, dfactor glbase.Enum) { - C.gl3_2core_glBlendFunc(gl.funcs, C.GLenum(sfactor), C.GLenum(dfactor)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFlush.xml -func (gl *GL) Flush() { - C.gl3_2core_glFlush(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFinish.xml -func (gl *GL) Finish() { - C.gl3_2core_glFinish(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEnable.xml -func (gl *GL) Enable(cap glbase.Enum) { - C.gl3_2core_glEnable(gl.funcs, C.GLenum(cap)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDisable.xml -func (gl *GL) Disable(cap glbase.Enum) { - C.gl3_2core_glDisable(gl.funcs, C.GLenum(cap)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDepthMask.xml -func (gl *GL) DepthMask(flag bool) { - C.gl3_2core_glDepthMask(gl.funcs, *(*C.GLboolean)(unsafe.Pointer(&flag))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColorMask.xml -func (gl *GL) ColorMask(red, green, blue, alpha bool) { - C.gl3_2core_glColorMask(gl.funcs, *(*C.GLboolean)(unsafe.Pointer(&red)), *(*C.GLboolean)(unsafe.Pointer(&green)), *(*C.GLboolean)(unsafe.Pointer(&blue)), *(*C.GLboolean)(unsafe.Pointer(&alpha))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glStencilMask.xml -func (gl *GL) StencilMask(mask uint32) { - C.gl3_2core_glStencilMask(gl.funcs, C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClearDepth.xml -func (gl *GL) ClearDepth(depth float64) { - C.gl3_2core_glClearDepth(gl.funcs, C.GLdouble(depth)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClearStencil.xml -func (gl *GL) ClearStencil(s int32) { - C.gl3_2core_glClearStencil(gl.funcs, C.GLint(s)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClearColor.xml -func (gl *GL) ClearColor(red, green, blue, alpha float32) { - C.gl3_2core_glClearColor(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClear.xml -func (gl *GL) Clear(mask glbase.Bitfield) { - C.gl3_2core_glClear(gl.funcs, C.GLbitfield(mask)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDrawBuffer.xml -func (gl *GL) DrawBuffer(mode glbase.Enum) { - C.gl3_2core_glDrawBuffer(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexImage2D.xml -func (gl *GL) TexImage2D(target glbase.Enum, level int, internalFormat int32, width, height, border int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl3_2core_glTexImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLint(border), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexImage1D.xml -func (gl *GL) TexImage1D(target glbase.Enum, level int, internalFormat int32, width, border int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl3_2core_glTexImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(internalFormat), C.GLsizei(width), C.GLint(border), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexParameteriv.xml -func (gl *GL) TexParameteriv(target, pname glbase.Enum, params []int32) { - C.gl3_2core_glTexParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexParameteri.xml -func (gl *GL) TexParameteri(target, pname glbase.Enum, param int32) { - C.gl3_2core_glTexParameteri(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexParameterfv.xml -func (gl *GL) TexParameterfv(target, pname glbase.Enum, params []float32) { - C.gl3_2core_glTexParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexParameterf.xml -func (gl *GL) TexParameterf(target, pname glbase.Enum, param float32) { - C.gl3_2core_glTexParameterf(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glScissor.xml -func (gl *GL) Scissor(x, y, width, height int) { - C.gl3_2core_glScissor(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPolygonMode.xml -func (gl *GL) PolygonMode(face, mode glbase.Enum) { - C.gl3_2core_glPolygonMode(gl.funcs, C.GLenum(face), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPointSize.xml -func (gl *GL) PointSize(size float32) { - C.gl3_2core_glPointSize(gl.funcs, C.GLfloat(size)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glLineWidth.xml -func (gl *GL) LineWidth(width float32) { - C.gl3_2core_glLineWidth(gl.funcs, C.GLfloat(width)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glHint.xml -func (gl *GL) Hint(target, mode glbase.Enum) { - C.gl3_2core_glHint(gl.funcs, C.GLenum(target), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFrontFace.xml -func (gl *GL) FrontFace(mode glbase.Enum) { - C.gl3_2core_glFrontFace(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCullFace.xml -func (gl *GL) CullFace(mode glbase.Enum) { - C.gl3_2core_glCullFace(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIndexubv.xml -func (gl *GL) Indexubv(c []uint8) { - C.gl3_2core_glIndexubv(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIndexub.xml -func (gl *GL) Indexub(c uint8) { - C.gl3_2core_glIndexub(gl.funcs, C.GLubyte(c)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsTexture.xml -func (gl *GL) IsTexture(texture glbase.Texture) bool { - glresult := C.gl3_2core_glIsTexture(gl.funcs, C.GLuint(texture)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// GenTextures returns n texture names in textures. There is no guarantee -// that the names form a contiguous set of integers; however, it is -// guaranteed that none of the returned names was in use immediately before -// the call to GenTextures. -// -// The generated textures have no dimensionality; they assume the -// dimensionality of the texture target to which they are first bound (see -// BindTexture). -// -// Texture names returned by a call to GenTextures are not returned by -// subsequent calls, unless they are first deleted with DeleteTextures. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// GenTextures is available in GL version 2.0 or greater. -func (gl *GL) GenTextures(n int) []glbase.Texture { - if n == 0 { - return nil - } - textures := make([]glbase.Texture, n) - C.gl3_2core_glGenTextures(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0]))) - return textures -} - -// DeleteTextures deletes the textures objects whose names are stored -// in the textures slice. After a texture is deleted, it has no contents or -// dimensionality, and its name is free for reuse (for example by -// GenTextures). If a texture that is currently bound is deleted, the binding -// reverts to 0 (the default texture). -// -// DeleteTextures silently ignores 0's and names that do not correspond to -// existing textures. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// DeleteTextures is available in GL version 2.0 or greater. -func (gl *GL) DeleteTextures(textures []glbase.Texture) { - n := len(textures) - if n == 0 { - return - } - C.gl3_2core_glDeleteTextures(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBindTexture.xml -func (gl *GL) BindTexture(target glbase.Enum, texture glbase.Texture) { - C.gl3_2core_glBindTexture(gl.funcs, C.GLenum(target), C.GLuint(texture)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexSubImage2D.xml -func (gl *GL) TexSubImage2D(target glbase.Enum, level, xoffset, yoffset, width, height int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl3_2core_glTexSubImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexSubImage1D.xml -func (gl *GL) TexSubImage1D(target glbase.Enum, level, xoffset, width int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl3_2core_glTexSubImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLsizei(width), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCopyTexSubImage2D.xml -func (gl *GL) CopyTexSubImage2D(target glbase.Enum, level, xoffset, yoffset, x, y, width, height int) { - C.gl3_2core_glCopyTexSubImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCopyTexSubImage1D.xml -func (gl *GL) CopyTexSubImage1D(target glbase.Enum, level, xoffset, x, y, width int) { - C.gl3_2core_glCopyTexSubImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(x), C.GLint(y), C.GLsizei(width)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCopyTexImage2D.xml -func (gl *GL) CopyTexImage2D(target glbase.Enum, level int, internalFormat glbase.Enum, x, y, width, height, border int) { - C.gl3_2core_glCopyTexImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height), C.GLint(border)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCopyTexImage1D.xml -func (gl *GL) CopyTexImage1D(target glbase.Enum, level int, internalFormat glbase.Enum, x, y, width, border int) { - C.gl3_2core_glCopyTexImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLint(border)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPolygonOffset.xml -func (gl *GL) PolygonOffset(factor, units float32) { - C.gl3_2core_glPolygonOffset(gl.funcs, C.GLfloat(factor), C.GLfloat(units)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDrawElements.xml -func (gl *GL) DrawElements(mode glbase.Enum, count int, gltype glbase.Enum, indices interface{}) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl3_2core_glDrawElements(gl.funcs, C.GLenum(mode), C.GLsizei(count), C.GLenum(gltype), indices_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDrawArrays.xml -func (gl *GL) DrawArrays(mode glbase.Enum, first, count int) { - C.gl3_2core_glDrawArrays(gl.funcs, C.GLenum(mode), C.GLint(first), C.GLsizei(count)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCopyTexSubImage3D.xml -func (gl *GL) CopyTexSubImage3D(target glbase.Enum, level, xoffset, yoffset int, zoffset int32, x, y, width, height int) { - C.gl3_2core_glCopyTexSubImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(zoffset), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexSubImage3D.xml -func (gl *GL) TexSubImage3D(target glbase.Enum, level, xoffset, yoffset int, zoffset int32, width, height int, depth int32, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl3_2core_glTexSubImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(zoffset), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexImage3D.xml -func (gl *GL) TexImage3D(target glbase.Enum, level int, internalFormat int32, width, height int, depth int32, border int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl3_2core_glTexImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLint(border), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDrawRangeElements.xml -func (gl *GL) DrawRangeElements(mode glbase.Enum, start, end uint32, count int, gltype glbase.Enum, indices interface{}) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl3_2core_glDrawRangeElements(gl.funcs, C.GLenum(mode), C.GLuint(start), C.GLuint(end), C.GLsizei(count), C.GLenum(gltype), indices_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBlendEquation.xml -func (gl *GL) BlendEquation(mode glbase.Enum) { - C.gl3_2core_glBlendEquation(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBlendColor.xml -func (gl *GL) BlendColor(red, green, blue, alpha float32) { - C.gl3_2core_glBlendColor(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetCompressedTexImage.xml -func (gl *GL) GetCompressedTexImage(target glbase.Enum, level int, img interface{}) { - var img_ptr unsafe.Pointer - var img_v = reflect.ValueOf(img) - if img != nil && img_v.Kind() != reflect.Slice { - panic("parameter img must be a slice") - } - if img != nil { - img_ptr = unsafe.Pointer(img_v.Index(0).Addr().Pointer()) - } - C.gl3_2core_glGetCompressedTexImage(gl.funcs, C.GLenum(target), C.GLint(level), img_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCompressedTexSubImage1D.xml -func (gl *GL) CompressedTexSubImage1D(target glbase.Enum, level, xoffset, width int, format glbase.Enum, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl3_2core_glCompressedTexSubImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLsizei(width), C.GLenum(format), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCompressedTexSubImage2D.xml -func (gl *GL) CompressedTexSubImage2D(target glbase.Enum, level, xoffset, yoffset, width, height int, format glbase.Enum, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl3_2core_glCompressedTexSubImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCompressedTexSubImage3D.xml -func (gl *GL) CompressedTexSubImage3D(target glbase.Enum, level, xoffset, yoffset int, zoffset int32, width, height int, depth int32, format glbase.Enum, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl3_2core_glCompressedTexSubImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(zoffset), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLenum(format), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCompressedTexImage1D.xml -func (gl *GL) CompressedTexImage1D(target glbase.Enum, level int, internalFormat glbase.Enum, width, border, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl3_2core_glCompressedTexImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLsizei(width), C.GLint(border), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCompressedTexImage2D.xml -func (gl *GL) CompressedTexImage2D(target glbase.Enum, level int, internalFormat glbase.Enum, width, height, border, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl3_2core_glCompressedTexImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLint(border), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCompressedTexImage3D.xml -func (gl *GL) CompressedTexImage3D(target glbase.Enum, level int, internalFormat glbase.Enum, width, height int, depth int32, border, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl3_2core_glCompressedTexImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLint(border), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSampleCoverage.xml -func (gl *GL) SampleCoverage(value float32, invert bool) { - C.gl3_2core_glSampleCoverage(gl.funcs, C.GLfloat(value), *(*C.GLboolean)(unsafe.Pointer(&invert))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glActiveTexture.xml -func (gl *GL) ActiveTexture(texture glbase.Enum) { - C.gl3_2core_glActiveTexture(gl.funcs, C.GLenum(texture)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPointParameteriv.xml -func (gl *GL) PointParameteriv(pname glbase.Enum, params []int32) { - C.gl3_2core_glPointParameteriv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPointParameteri.xml -func (gl *GL) PointParameteri(pname glbase.Enum, param int32) { - C.gl3_2core_glPointParameteri(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPointParameterfv.xml -func (gl *GL) PointParameterfv(pname glbase.Enum, params []float32) { - C.gl3_2core_glPointParameterfv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPointParameterf.xml -func (gl *GL) PointParameterf(pname glbase.Enum, param float32) { - C.gl3_2core_glPointParameterf(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiDrawArrays.xml -func (gl *GL) MultiDrawArrays(mode glbase.Enum, first, count []int, drawcount int32) { - C.gl3_2core_glMultiDrawArrays(gl.funcs, C.GLenum(mode), (*C.GLint)(unsafe.Pointer(&first[0])), (*C.GLsizei)(unsafe.Pointer(&count[0])), C.GLsizei(drawcount)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBlendFuncSeparate.xml -func (gl *GL) BlendFuncSeparate(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha glbase.Enum) { - C.gl3_2core_glBlendFuncSeparate(gl.funcs, C.GLenum(sfactorRGB), C.GLenum(dfactorRGB), C.GLenum(sfactorAlpha), C.GLenum(dfactorAlpha)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetBufferParameteriv.xml -func (gl *GL) GetBufferParameteriv(target, pname glbase.Enum, params []int32) { - C.gl3_2core_glGetBufferParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glUnmapBuffer.xml -func (gl *GL) UnmapBuffer(target glbase.Enum) bool { - glresult := C.gl3_2core_glUnmapBuffer(gl.funcs, C.GLenum(target)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetBufferSubData.xml -func (gl *GL) GetBufferSubData(target glbase.Enum, offset, size int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl3_2core_glGetBufferSubData(gl.funcs, C.GLenum(target), C.GLintptr(offset), C.GLsizeiptr(size), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBufferSubData.xml -func (gl *GL) BufferSubData(target glbase.Enum, offset, size int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl3_2core_glBufferSubData(gl.funcs, C.GLenum(target), C.GLintptr(offset), C.GLsizeiptr(size), data_ptr) -} - -// BufferData creates a new data store for the buffer object currently -// bound to target. Any pre-existing data store is deleted. The new data -// store is created with the specified size in bytes and usage. If data is -// not nil, it must be a slice that is used to initialize the data store. -// In that case the size parameter is ignored and the store size will match -// the slice data size. -// -// In its initial state, the new data store is not mapped, it has a NULL -// mapped pointer, and its mapped access is GL.READ_WRITE. -// -// The target constant must be one of GL.ARRAY_BUFFER, GL.COPY_READ_BUFFER, -// GL.COPY_WRITE_BUFFER, GL.ELEMENT_ARRAY_BUFFER, GL.PIXEL_PACK_BUFFER, -// GL.PIXEL_UNPACK_BUFFER, GL.TEXTURE_BUFFER, GL.TRANSFORM_FEEDBACK_BUFFER, -// or GL.UNIFORM_BUFFER. -// -// The usage parameter is a hint to the GL implementation as to how a buffer -// object's data store will be accessed. This enables the GL implementation -// to make more intelligent decisions that may significantly impact buffer -// object performance. It does not, however, constrain the actual usage of -// the data store. usage can be broken down into two parts: first, the -// frequency of access (modification and usage), and second, the nature of -// that access. -// -// A usage frequency of STREAM and nature of DRAW is specified via the -// constant GL.STREAM_DRAW, for example. -// -// The usage frequency of access may be one of: -// -// STREAM -// The data store contents will be modified once and used at most a few times. -// -// STATIC -// The data store contents will be modified once and used many times. -// -// DYNAMIC -// The data store contents will be modified repeatedly and used many times. -// -// The usage nature of access may be one of: -// -// DRAW -// The data store contents are modified by the application, and used as -// the source for GL drawing and image specification commands. -// -// READ -// The data store contents are modified by reading data from the GL, -// and used to return that data when queried by the application. -// -// COPY -// The data store contents are modified by reading data from the GL, -// and used as the source for GL drawing and image specification -// commands. -// -// Clients must align data elements consistent with the requirements of the -// client platform, with an additional base-level requirement that an offset -// within a buffer to a datum comprising N bytes be a multiple of N. -// -// Error GL.INVALID_ENUM is generated if target is not one of the accepted -// buffer targets. GL.INVALID_ENUM is generated if usage is not -// GL.STREAM_DRAW, GL.STREAM_READ, GL.STREAM_COPY, GL.STATIC_DRAW, -// GL.STATIC_READ, GL.STATIC_COPY, GL.DYNAMIC_DRAW, GL.DYNAMIC_READ, or -// GL.DYNAMIC_COPY. GL.INVALID_VALUE is generated if size is negative. -// GL.INVALID_OPERATION is generated if the reserved buffer object name 0 is -// bound to target. GL.OUT_OF_MEMORY is generated if the GL is unable to -// create a data store with the specified size. -func (gl *GL) BufferData(target glbase.Enum, size int, data interface{}, usage glbase.Enum) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - if data != nil { - size = int(data_v.Type().Size()) * data_v.Len() - } - C.gl3_2core_glBufferData(gl.funcs, C.GLenum(target), C.GLsizeiptr(size), data_ptr, C.GLenum(usage)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsBuffer.xml -func (gl *GL) IsBuffer(buffer glbase.Buffer) bool { - glresult := C.gl3_2core_glIsBuffer(gl.funcs, C.GLuint(buffer)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// GenBuffers returns n buffer object names. There is no guarantee that -// the names form a contiguous set of integers; however, it is guaranteed -// that none of the returned names was in use immediately before the call to -// GenBuffers. -// -// Buffer object names returned by a call to GenBuffers are not returned by -// subsequent calls, unless they are first deleted with DeleteBuffers. -// -// No buffer objects are associated with the returned buffer object names -// until they are first bound by calling BindBuffer. -// -// Error GL.INVALID_VALUE is generated if n is negative. GL.INVALID_OPERATION -// is generated if GenBuffers is executed between the execution of Begin -// and the corresponding execution of End. -// -// GenBuffers is available in GL version 1.5 or greater. -func (gl *GL) GenBuffers(n int) []glbase.Buffer { - if n == 0 { - return nil - } - buffers := make([]glbase.Buffer, n) - C.gl3_2core_glGenBuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&buffers[0]))) - return buffers -} - -// DeleteBuffers deletes the buffer objects whose names are stored in the -// buffers slice. -// -// After a buffer object is deleted, it has no contents, and its name is free -// for reuse (for example by GenBuffers). If a buffer object that is -// currently bound is deleted, the binding reverts to 0 (the absence of any -// buffer object, which reverts to client memory usage). -// -// DeleteBuffers silently ignores 0's and names that do not correspond to -// existing buffer objects. -// -// Error GL.INVALID_VALUE is generated if n is negative. GL.INVALID_OPERATION -// is generated if DeleteBuffers is executed between the execution of Begin -// and the corresponding execution of End. -// -// DeleteBuffers is available in GL version 1.5 or greater. -func (gl *GL) DeleteBuffers(buffers []glbase.Buffer) { - n := len(buffers) - if n == 0 { - return - } - C.gl3_2core_glDeleteBuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&buffers[0]))) -} - -// BindBuffer creates or puts in use a named buffer object. -// Calling BindBuffer with target set to GL.ARRAY_BUFFER, -// GL.ELEMENT_ARRAY_BUFFER, GL.PIXEL_PACK_BUFFER or GL.PIXEL_UNPACK_BUFFER -// and buffer set to the name of the new buffer object binds the buffer -// object name to the target. When a buffer object is bound to a target, the -// previous binding for that target is automatically broken. -// -// Buffer object names are unsigned integers. The value zero is reserved, but -// there is no default buffer object for each buffer object target. Instead, -// buffer set to zero effectively unbinds any buffer object previously bound, -// and restores client memory usage for that buffer object target. Buffer -// object names and the corresponding buffer object contents are local to the -// shared display-list space (see XCreateContext) of the current GL rendering -// context; two rendering contexts share buffer object names only if they -// also share display lists. -// -// GenBuffers may be called to generate a set of new buffer object names. -// -// The state of a buffer object immediately after it is first bound is an -// unmapped zero-sized memory buffer with GL.READ_WRITE access and -// GL.STATIC_DRAW usage. -// -// While a non-zero buffer object name is bound, GL operations on the target -// to which it is bound affect the bound buffer object, and queries of the -// target to which it is bound return state from the bound buffer object. -// While buffer object name zero is bound, as in the initial state, attempts -// to modify or query state on the target to which it is bound generates an -// GL.INVALID_OPERATION error. -// -// When vertex array pointer state is changed, for example by a call to -// NormalPointer, the current buffer object binding (GL.ARRAY_BUFFER_BINDING) -// is copied into the corresponding client state for the vertex array type -// being changed, for example GL.NORMAL_ARRAY_BUFFER_BINDING. While a -// non-zero buffer object is bound to the GL.ARRAY_BUFFER target, the vertex -// array pointer parameter that is traditionally interpreted as a pointer to -// client-side memory is instead interpreted as an offset within the buffer -// object measured in basic machine units. -// -// While a non-zero buffer object is bound to the GL.ELEMENT_ARRAY_BUFFER -// target, the indices parameter of DrawElements, DrawRangeElements, or -// MultiDrawElements that is traditionally interpreted as a pointer to -// client-side memory is instead interpreted as an offset within the buffer -// object measured in basic machine units. -// -// While a non-zero buffer object is bound to the GL.PIXEL_PACK_BUFFER -// target, the following commands are affected: GetCompressedTexImage, -// GetConvolutionFilter, GetHistogram, GetMinmax, GetPixelMap, -// GetPolygonStipple, GetSeparableFilter, GetTexImage, and ReadPixels. The -// pointer parameter that is traditionally interpreted as a pointer to -// client-side memory where the pixels are to be packed is instead -// interpreted as an offset within the buffer object measured in basic -// machine units. -// -// While a non-zero buffer object is bound to the GL.PIXEL_UNPACK_BUFFER -// target, the following commands are affected: Bitmap, ColorSubTable, -// ColorTable, CompressedTexImage1D, CompressedTexImage2D, -// CompressedTexImage3D, CompressedTexSubImage1D, CompressedTexSubImage2D, -// CompressedTexSubImage3D, ConvolutionFilter1D, ConvolutionFilter2D, -// DrawPixels, PixelMap, PolygonStipple, SeparableFilter2D, TexImage1D, -// TexImage2D, TexImage3D, TexSubImage1D, TexSubImage2D, and TexSubImage3D. -// The pointer parameter that is traditionally interpreted as a pointer to -// client-side memory from which the pixels are to be unpacked is instead -// interpreted as an offset within the buffer object measured in basic -// machine units. -// -// A buffer object binding created with BindBuffer remains active until a -// different buffer object name is bound to the same target, or until the -// bound buffer object is deleted with DeleteBuffers. -// -// Once created, a named buffer object may be re-bound to any target as often -// as needed. However, the GL implementation may make choices about how to -// optimize the storage of a buffer object based on its initial binding -// target. -// -// Error GL.INVALID_ENUM is generated if target is not one of the allowable -// values. GL.INVALID_OPERATION is generated if BindBuffer is executed -// between the execution of Begin and the corresponding execution of End. -// -// BindBuffer is available in GL version 1.5 or greater. -func (gl *GL) BindBuffer(target glbase.Enum, buffer glbase.Buffer) { - C.gl3_2core_glBindBuffer(gl.funcs, C.GLenum(target), C.GLuint(buffer)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetQueryObjectuiv.xml -func (gl *GL) GetQueryObjectuiv(id uint32, pname glbase.Enum, params []uint32) { - C.gl3_2core_glGetQueryObjectuiv(gl.funcs, C.GLuint(id), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetQueryObjectiv.xml -func (gl *GL) GetQueryObjectiv(id uint32, pname glbase.Enum, params []int32) { - C.gl3_2core_glGetQueryObjectiv(gl.funcs, C.GLuint(id), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetQueryiv.xml -func (gl *GL) GetQueryiv(target, pname glbase.Enum, params []int32) { - C.gl3_2core_glGetQueryiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEndQuery.xml -func (gl *GL) EndQuery(target glbase.Enum) { - C.gl3_2core_glEndQuery(gl.funcs, C.GLenum(target)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBeginQuery.xml -func (gl *GL) BeginQuery(target glbase.Enum, id uint32) { - C.gl3_2core_glBeginQuery(gl.funcs, C.GLenum(target), C.GLuint(id)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsQuery.xml -func (gl *GL) IsQuery(id uint32) bool { - glresult := C.gl3_2core_glIsQuery(gl.funcs, C.GLuint(id)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDeleteQueries.xml -func (gl *GL) DeleteQueries(n int, ids []uint32) { - C.gl3_2core_glDeleteQueries(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&ids[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGenQueries.xml -func (gl *GL) GenQueries(n int, ids []uint32) { - C.gl3_2core_glGenQueries(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&ids[0]))) -} - -// VertexAttribPointer specifies the location and data format of the array -// of generic vertex attributes at index to use when rendering. size -// specifies the number of components per attribute and must be 1, 2, 3, or -// 4. type specifies the data type of each component, and stride specifies -// the byte stride from one attribute to the next, allowing vertices and -// attributes to be packed into a single array or stored in separate arrays. -// normalized indicates whether the values stored in an integer format are -// to be mapped to the range [-1,1] (for signed values) or [0,1] -// (for unsigned values) when they are accessed and converted to floating -// point; otherwise, values will be converted to floats directly without -// normalization. offset is a byte offset into the buffer object's data -// store, which must be bound to the GL.ARRAY_BUFFER target with BindBuffer. -// -// The buffer object binding (GL.ARRAY_BUFFER_BINDING) is saved as -// generic vertex attribute array client-side state -// (GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING) for the provided index. -// -// To enable and disable a generic vertex attribute array, call -// EnableVertexAttribArray and DisableVertexAttribArray with index. If -// enabled, the generic vertex attribute array is used when DrawArrays or -// DrawElements is called. Each generic vertex attribute array is initially -// disabled. -// -// VertexAttribPointer is typically implemented on the client side. -// -// Error GL.INVALID_ENUM is generated if type is not an accepted value. -// GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. GL.INVALID_VALUE is generated if size is not 1, 2, -// 3, or 4. GL.INVALID_VALUE is generated if stride is negative. -func (gl *GL) VertexAttribPointer(index glbase.Attrib, size int, gltype glbase.Enum, normalized bool, stride int, offset uintptr) { - offset_ptr := unsafe.Pointer(offset) - C.gl3_2core_glVertexAttribPointer(gl.funcs, C.GLuint(index), C.GLint(size), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), C.GLsizei(stride), offset_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glValidateProgram.xml -func (gl *GL) ValidateProgram(program glbase.Program) { - C.gl3_2core_glValidateProgram(gl.funcs, C.GLuint(program)) -} - -// UniformMatrix4fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix4fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix4fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(4*4) != 0 { - panic("invalid value length for UniformMatrix4fv") - } - count := len(value) / (4 * 4) - C.gl3_2core_glUniformMatrix4fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix3fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix3fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix3fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(3*3) != 0 { - panic("invalid value length for UniformMatrix3fv") - } - count := len(value) / (3 * 3) - C.gl3_2core_glUniformMatrix3fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix2fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix2fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix2fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(2*2) != 0 { - panic("invalid value length for UniformMatrix2fv") - } - count := len(value) / (2 * 2) - C.gl3_2core_glUniformMatrix2fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform4iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform4iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - if len(value)%4 != 0 { - panic("invalid value length for Uniform4iv") - } - count := len(value) / 4 - C.gl3_2core_glUniform4iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// Uniform3iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform3iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - if len(value)%3 != 0 { - panic("invalid value length for Uniform3iv") - } - count := len(value) / 3 - C.gl3_2core_glUniform3iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// Uniform2iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform2iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - if len(value)%2 != 0 { - panic("invalid value length for Uniform2iv") - } - count := len(value) / 2 - C.gl3_2core_glUniform2iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// Uniform1iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform1iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - count := len(value) - C.gl3_2core_glUniform1iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// Uniform4fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform4fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - if len(value)%4 != 0 { - panic("invalid value length for Uniform4fv") - } - count := len(value) / 4 - C.gl3_2core_glUniform4fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform3fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform3fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - if len(value)%3 != 0 { - panic("invalid value length for Uniform3fv") - } - count := len(value) / 3 - C.gl3_2core_glUniform3fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform2fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform2fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - if len(value)%2 != 0 { - panic("invalid value length for Uniform2fv") - } - count := len(value) / 2 - C.gl3_2core_glUniform2fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform1fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform1fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - count := len(value) - C.gl3_2core_glUniform1fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform4i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform4i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4i(location glbase.Uniform, v0, v1, v2, v3 int32) { - C.gl3_2core_glUniform4i(gl.funcs, C.GLint(location), C.GLint(v0), C.GLint(v1), C.GLint(v2), C.GLint(v3)) -} - -// Uniform3i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform3i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3i(location glbase.Uniform, v0, v1, v2 int32) { - C.gl3_2core_glUniform3i(gl.funcs, C.GLint(location), C.GLint(v0), C.GLint(v1), C.GLint(v2)) -} - -// Uniform2i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform2i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2i(location glbase.Uniform, v0, v1 int32) { - C.gl3_2core_glUniform2i(gl.funcs, C.GLint(location), C.GLint(v0), C.GLint(v1)) -} - -// Uniform1i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform1i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1i(location glbase.Uniform, v0 int32) { - C.gl3_2core_glUniform1i(gl.funcs, C.GLint(location), C.GLint(v0)) -} - -// Uniform4f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform4f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4f(location glbase.Uniform, v0, v1, v2, v3 float32) { - C.gl3_2core_glUniform4f(gl.funcs, C.GLint(location), C.GLfloat(v0), C.GLfloat(v1), C.GLfloat(v2), C.GLfloat(v3)) -} - -// Uniform3f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform3f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3f(location glbase.Uniform, v0, v1, v2 float32) { - C.gl3_2core_glUniform3f(gl.funcs, C.GLint(location), C.GLfloat(v0), C.GLfloat(v1), C.GLfloat(v2)) -} - -// Uniform2f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform2f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2f(location glbase.Uniform, v0, v1 float32) { - C.gl3_2core_glUniform2f(gl.funcs, C.GLint(location), C.GLfloat(v0), C.GLfloat(v1)) -} - -// Uniform1f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform1f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1f(location glbase.Uniform, v0 float32) { - C.gl3_2core_glUniform1f(gl.funcs, C.GLint(location), C.GLfloat(v0)) -} - -// UseProgram installs the program object specified by program as part of -// current rendering state. One or more executables are created in a program -// object by successfully attaching shader objects to it with AttachShader, -// successfully compiling the shader objects with CompileShader, and -// successfully linking the program object with LinkProgram. -// -// A program object will contain an executable that will run on the vertex -// processor if it contains one or more shader objects of type -// GL.VERTEX_SHADER that have been successfully compiled and linked. -// Similarly, a program object will contain an executable that will run on -// the fragment processor if it contains one or more shader objects of type -// GL.FRAGMENT_SHADER that have been successfully compiled and linked. -// -// Successfully installing an executable on a programmable processor will -// cause the corresponding fixed functionality of OpenGL to be disabled. -// Specifically, if an executable is installed on the vertex processor, the -// OpenGL fixed functionality will be disabled as follows. -// -// - The modelview matrix is not applied to vertex coordinates. -// -// - The projection matrix is not applied to vertex coordinates. -// -// - The texture matrices are not applied to texture coordinates. -// -// - Normals are not transformed to eye coordinates. -// -// - Normals are not rescaled or normalized. -// -// - Normalization of GL.AUTO_NORMAL evaluated normals is not performed. -// -// - Texture coordinates are not generated automatically. -// -// - Per-vertex lighting is not performed. -// -// - Color material computations are not performed. -// -// - Color index lighting is not performed. -// -// - This list also applies when setting the current raster position. -// -// The executable that is installed on the vertex processor is expected to -// implement any or all of the desired functionality from the preceding list. -// Similarly, if an executable is installed on the fragment processor, the -// OpenGL fixed functionality will be disabled as follows. -// -// - Texture environment and texture functions are not applied. -// -// - Texture application is not applied. -// -// - Color sum is not applied. -// -// - Fog is not applied. -// -// Again, the fragment shader that is installed is expected to implement any -// or all of the desired functionality from the preceding list. -// -// While a program object is in use, applications are free to modify attached -// shader objects, compile attached shader objects, attach additional shader -// objects, and detach or delete shader objects. None of these operations -// will affect the executables that are part of the current state. However, -// relinking the program object that is currently in use will install the -// program object as part of the current rendering state if the link -// operation was successful (see LinkProgram). If the program object -// currently in use is relinked unsuccessfully, its link status will be set -// to GL.FALSE, but the executables and associated state will remain part of -// the current state until a subsequent call to UseProgram removes it from -// use. After it is removed from use, it cannot be made part of current state -// until it has been successfully relinked. -// -// If program contains shader objects of type GL.VERTEX_SHADER but it does -// not contain shader objects of type GL.FRAGMENT_SHADER, an executable will -// be installed on the vertex processor, but fixed functionality will be used -// for fragment processing. Similarly, if program contains shader objects of -// type GL.FRAGMENT_SHADER but it does not contain shader objects of type -// GL.VERTEX_SHADER, an executable will be installed on the fragment -// processor, but fixed functionality will be used for vertex processing. If -// program is 0, the programmable processors will be disabled, and fixed -// functionality will be used for both vertex and fragment processing. -// -// While a program object is in use, the state that controls the disabled -// fixed functionality may also be updated using the normal OpenGL calls. -// -// Like display lists and texture objects, the name space for program objects -// may be shared across a set of contexts, as long as the server sides of the -// contexts share the same address space. If the name space is shared across -// contexts, any attached objects and the data associated with those attached -// objects are shared as well. -// -// Applications are responsible for providing the synchronization across API -// calls when objects are accessed from different execution threads. -// -// Error GL.INVALID_VALUE is generated if program is neither 0 nor a value -// generated by OpenGL. GL.INVALID_OPERATION is generated if program is not -// a program object. GL.INVALID_OPERATION is generated if program could not -// be made part of current state. GL.INVALID_OPERATION is generated if -// UseProgram is executed between the execution of Begin and the -// corresponding execution of End. -// -// UseProgram is available in GL version 2.0 or greater. -func (gl *GL) UseProgram(program glbase.Program) { - C.gl3_2core_glUseProgram(gl.funcs, C.GLuint(program)) -} - -// ShaderSource sets the source code in shader to the provided source code. Any source -// code previously stored in the shader object is completely replaced. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader is not a shader -// object. GL.INVALID_VALUE is generated if count is less than 0. -// GL.INVALID_OPERATION is generated if ShaderSource is executed between the -// execution of Begin and the corresponding execution of End. -// -// ShaderSource is available in GL version 2.0 or greater. -func (gl *GL) ShaderSource(shader glbase.Shader, source ...string) { - count := len(source) - length := make([]int32, count) - source_c := make([]unsafe.Pointer, count) - for i, src := range source { - length[i] = int32(len(src)) - if len(src) > 0 { - source_c[i] = *(*unsafe.Pointer)(unsafe.Pointer(&src)) - } else { - source_c[i] = unsafe.Pointer(uintptr(0)) - } - } - C.gl3_2core_glShaderSource(gl.funcs, C.GLuint(shader), C.GLsizei(count), (**C.GLchar)(unsafe.Pointer(&source_c[0])), (*C.GLint)(unsafe.Pointer(&length[0]))) -} - -// LinkProgram links the program object specified by program. If any shader -// objects of type GL.VERTEX_SHADER are attached to program, they will be -// used to create an executable that will run on the programmable vertex -// processor. If any shader objects of type GL.FRAGMENT_SHADER are attached -// to program, they will be used to create an executable that will run on the -// programmable fragment processor. -// -// The status of the link operation will be stored as part of the program -// object's state. This value will be set to GL.TRUE if the program object -// was linked without errors and is ready for use, and GL.FALSE otherwise. It -// can be queried by calling GetProgramiv with arguments program and -// GL.LINK_STATUS. -// -// As a result of a successful link operation, all active user-defined -// uniform variables belonging to program will be initialized to 0, and each -// of the program object's active uniform variables will be assigned a -// location that can be queried by calling GetUniformLocation. Also, any -// active user-defined attribute variables that have not been bound to a -// generic vertex attribute index will be bound to one at this time. -// -// Linking of a program object can fail for a number of reasons as specified -// in the OpenGL Shading Language Specification. The following lists some of -// the conditions that will cause a link error. -// -// - The number of active attribute variables supported by the -// implementation has been exceeded. -// -// - The storage limit for uniform variables has been exceeded. -// -// - The number of active uniform variables supported by the implementation -// has been exceeded. -// -// - The main function is missing for the vertex shader or the fragment -// shader. -// -// - A varying variable actually used in the fragment shader is not -// declared in the same way (or is not declared at all) in the vertex -// shader. -// -// - A reference to a function or variable name is unresolved. -// -// - A shared global is declared with two different types or two different -// initial values. -// -// - One or more of the attached shader objects has not been successfully -// compiled. -// -// - Binding a generic attribute matrix caused some rows of the matrix to -// fall outside the allowed maximum of GL.MAX_VERTEX_ATTRIBS. -// -// - Not enough contiguous vertex attribute slots could be found to bind -// attribute matrices. -// -// When a program object has been successfully linked, the program object can -// be made part of current state by calling UseProgram. Whether or not the -// link operation was successful, the program object's information log will -// be overwritten. The information log can be retrieved by calling -// GetProgramInfoLog. -// -// LinkProgram will also install the generated executables as part of the -// current rendering state if the link operation was successful and the -// specified program object is already currently in use as a result of a -// previous call to UseProgram. If the program object currently in use is -// relinked unsuccessfully, its link status will be set to GL.FALSE , but the -// executables and associated state will remain part of the current state -// until a subsequent call to UseProgram removes it from use. After it is -// removed from use, it cannot be made part of current state until it has -// been successfully relinked. -// -// If program contains shader objects of type GL.VERTEX_SHADER but does not -// contain shader objects of type GL.FRAGMENT_SHADER, the vertex shader will -// be linked against the implicit interface for fixed functionality fragment -// processing. Similarly, if program contains shader objects of type -// GL.FRAGMENT_SHADER but it does not contain shader objects of type -// GL.VERTEX_SHADER, the fragment shader will be linked against the implicit -// interface for fixed functionality vertex processing. -// -// The program object's information log is updated and the program is -// generated at the time of the link operation. After the link operation, -// applications are free to modify attached shader objects, compile attached -// shader objects, detach shader objects, delete shader objects, and attach -// additional shader objects. None of these operations affects the -// information log or the program that is part of the program object. -// -// If the link operation is unsuccessful, any information about a previous -// link operation on program is lost (a failed link does not restore the -// old state of program). Certain information can still be retrieved -// from program even after an unsuccessful link operation. See for instance -// GetActiveAttrib and GetActiveUniform. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program -// object. GL.INVALID_OPERATION is generated if LinkProgram is executed -// between the execution of Begin and the corresponding execution of End. -// -// LinkProgram is available in GL version 2.0 or greater. -func (gl *GL) LinkProgram(program glbase.Program) { - C.gl3_2core_glLinkProgram(gl.funcs, C.GLuint(program)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsShader.xml -func (gl *GL) IsShader(shader glbase.Shader) bool { - glresult := C.gl3_2core_glIsShader(gl.funcs, C.GLuint(shader)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsProgram.xml -func (gl *GL) IsProgram(program glbase.Program) bool { - glresult := C.gl3_2core_glIsProgram(gl.funcs, C.GLuint(program)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// GetVertexAttribiv returns in params the value of a generic vertex attribute -// parameter. The generic vertex attribute to be queried is specified by -// index, and the parameter to be queried is specified by pname. -// -// The accepted parameter names are as follows: -// -// GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING -// params returns a single value, the name of the buffer object -// currently bound to the binding point corresponding to generic vertex -// attribute array index. If no buffer object is bound, 0 is returned. -// The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_ENABLED -// params returns a single value that is non-zero (true) if the vertex -// attribute array for index is enabled and 0 (false) if it is -// disabled. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_SIZE -// params returns a single value, the size of the vertex attribute -// array for index. The size is the number of values for each element -// of the vertex attribute array, and it will be 1, 2, 3, or 4. The -// initial value is 4. -// -// GL.VERTEX_ATTRIB_ARRAY_STRIDE -// params returns a single value, the array stride for (number of bytes -// between successive elements in) the vertex attribute array for -// index. A value of 0 indicates that the array elements are stored -// sequentially in memory. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_TYPE -// params returns a single value, a symbolic constant indicating the -// array type for the vertex attribute array for index. Possible values -// are GL.BYTE, GL.UNSIGNED_BYTE, GL.SHORT, GL.UNSIGNED_SHORT, GL.INT, -// GL.UNSIGNED_INT, GL.FLOAT, and GL.DOUBLE. The initial value is -// GL.FLOAT. -// -// GL.VERTEX_ATTRIB_ARRAY_NORMALIZED -// params returns a single value that is non-zero (true) if fixed-point -// data types for the vertex attribute array indicated by index are -// normalized when they are converted to floating point, and 0 (false) -// otherwise. The initial value is 0. -// -// GL.CURRENT_VERTEX_ATTRIB -// params returns four values that represent the current value for the -// generic vertex attribute specified by index. Generic vertex -// attribute 0 is unique in that it has no current state, so an error -// will be generated if index is 0. The initial value for all other -// generic vertex attributes is (0,0,0,1). -// -// All of the parameters except GL.CURRENT_VERTEX_ATTRIB represent -// client-side state. -// -// Error GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. GL.INVALID_ENUM is generated if pname is not an -// accepted value. GL.INVALID_OPERATION is generated if index is 0 and pname -// is GL.CURRENT_VERTEX_ATTRIB. -// -// GetVertexAttribiv is available in GL version 2.0 or greater. -func (gl *GL) GetVertexAttribiv(index glbase.Attrib, pname glbase.Enum, params []int32) { - var params_c [4]int32 - C.gl3_2core_glGetVertexAttribiv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetVertexAttribfv returns in params the value of a generic vertex attribute -// parameter. The generic vertex attribute to be queried is specified by -// index, and the parameter to be queried is specified by pname. -// -// The accepted parameter names are as follows: -// -// GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING -// params returns a single value, the name of the buffer object -// currently bound to the binding point corresponding to generic vertex -// attribute array index. If no buffer object is bound, 0 is returned. -// The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_ENABLED -// params returns a single value that is non-zero (true) if the vertex -// attribute array for index is enabled and 0 (false) if it is -// disabled. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_SIZE -// params returns a single value, the size of the vertex attribute -// array for index. The size is the number of values for each element -// of the vertex attribute array, and it will be 1, 2, 3, or 4. The -// initial value is 4. -// -// GL.VERTEX_ATTRIB_ARRAY_STRIDE -// params returns a single value, the array stride for (number of bytes -// between successive elements in) the vertex attribute array for -// index. A value of 0 indicates that the array elements are stored -// sequentially in memory. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_TYPE -// params returns a single value, a symbolic constant indicating the -// array type for the vertex attribute array for index. Possible values -// are GL.BYTE, GL.UNSIGNED_BYTE, GL.SHORT, GL.UNSIGNED_SHORT, GL.INT, -// GL.UNSIGNED_INT, GL.FLOAT, and GL.DOUBLE. The initial value is -// GL.FLOAT. -// -// GL.VERTEX_ATTRIB_ARRAY_NORMALIZED -// params returns a single value that is non-zero (true) if fixed-point -// data types for the vertex attribute array indicated by index are -// normalized when they are converted to floating point, and 0 (false) -// otherwise. The initial value is 0. -// -// GL.CURRENT_VERTEX_ATTRIB -// params returns four values that represent the current value for the -// generic vertex attribute specified by index. Generic vertex -// attribute 0 is unique in that it has no current state, so an error -// will be generated if index is 0. The initial value for all other -// generic vertex attributes is (0,0,0,1). -// -// All of the parameters except GL.CURRENT_VERTEX_ATTRIB represent -// client-side state. -// -// Error GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. GL.INVALID_ENUM is generated if pname is not an -// accepted value. GL.INVALID_OPERATION is generated if index is 0 and pname -// is GL.CURRENT_VERTEX_ATTRIB. -// -// GetVertexAttribfv is available in GL version 2.0 or greater. -func (gl *GL) GetVertexAttribfv(index glbase.Attrib, pname glbase.Enum, params []float32) { - var params_c [4]float32 - C.gl3_2core_glGetVertexAttribfv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetVertexAttribdv returns in params the value of a generic vertex attribute -// parameter. The generic vertex attribute to be queried is specified by -// index, and the parameter to be queried is specified by pname. -// -// The accepted parameter names are as follows: -// -// GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING -// params returns a single value, the name of the buffer object -// currently bound to the binding point corresponding to generic vertex -// attribute array index. If no buffer object is bound, 0 is returned. -// The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_ENABLED -// params returns a single value that is non-zero (true) if the vertex -// attribute array for index is enabled and 0 (false) if it is -// disabled. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_SIZE -// params returns a single value, the size of the vertex attribute -// array for index. The size is the number of values for each element -// of the vertex attribute array, and it will be 1, 2, 3, or 4. The -// initial value is 4. -// -// GL.VERTEX_ATTRIB_ARRAY_STRIDE -// params returns a single value, the array stride for (number of bytes -// between successive elements in) the vertex attribute array for -// index. A value of 0 indicates that the array elements are stored -// sequentially in memory. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_TYPE -// params returns a single value, a symbolic constant indicating the -// array type for the vertex attribute array for index. Possible values -// are GL.BYTE, GL.UNSIGNED_BYTE, GL.SHORT, GL.UNSIGNED_SHORT, GL.INT, -// GL.UNSIGNED_INT, GL.FLOAT, and GL.DOUBLE. The initial value is -// GL.FLOAT. -// -// GL.VERTEX_ATTRIB_ARRAY_NORMALIZED -// params returns a single value that is non-zero (true) if fixed-point -// data types for the vertex attribute array indicated by index are -// normalized when they are converted to floating point, and 0 (false) -// otherwise. The initial value is 0. -// -// GL.CURRENT_VERTEX_ATTRIB -// params returns four values that represent the current value for the -// generic vertex attribute specified by index. Generic vertex -// attribute 0 is unique in that it has no current state, so an error -// will be generated if index is 0. The initial value for all other -// generic vertex attributes is (0,0,0,1). -// -// All of the parameters except GL.CURRENT_VERTEX_ATTRIB represent -// client-side state. -// -// Error GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. GL.INVALID_ENUM is generated if pname is not an -// accepted value. GL.INVALID_OPERATION is generated if index is 0 and pname -// is GL.CURRENT_VERTEX_ATTRIB. -// -// GetVertexAttribdv is available in GL version 2.0 or greater. -func (gl *GL) GetVertexAttribdv(index glbase.Attrib, pname glbase.Enum, params []float64) { - var params_c [4]float64 - C.gl3_2core_glGetVertexAttribdv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetUniformiv returns in params the value of the specified uniform -// variable. The type of the uniform variable specified by location -// determines the number of values returned. If the uniform variable is -// defined in the shader as a boolean, int, or float, a single value will be -// returned. If it is defined as a vec2, ivec2, or bvec2, two values will be -// returned. If it is defined as a vec3, ivec3, or bvec3, three values will -// be returned, and so on. To query values stored in uniform variables -// declared as arrays, call GetUniformiv for each element of the array. To -// query values stored in uniform variables declared as structures, call -// GetUniformiv for each field in the structure. The values for uniform -// variables declared as a matrix will be returned in column major order. -// -// The locations assigned to uniform variables are not known until the -// program object is linked. After linking has occurred, the command -// GetUniformLocation can be used to obtain the location of a uniform -// variable. This location value can then be passed to GetUniformiv in order -// to query the current value of the uniform variable. After a program object -// has been linked successfully, the index values for uniform variables -// remain fixed until the next link command occurs. The uniform variable -// values can only be queried after a link if the link was successful. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program -// object. GL.INVALID_OPERATION is generated if program has not been -// successfully linked. GL.INVALID_OPERATION is generated if location does -// not correspond to a valid uniform variable location for the specified -// program object. GL.INVALID_OPERATION is generated if GetUniformiv is -// executed between the execution of Begin and the corresponding execution of -// End. -// -// GetUniformiv is available in GL version 2.0 or greater. -func (gl *GL) GetUniformiv(program glbase.Program, location glbase.Uniform, params []int32) { - var params_c [4]int32 - C.gl3_2core_glGetUniformiv(gl.funcs, C.GLuint(program), C.GLint(location), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetUniformfv returns in params the value of the specified uniform -// variable. The type of the uniform variable specified by location -// determines the number of values returned. If the uniform variable is -// defined in the shader as a boolean, int, or float, a single value will be -// returned. If it is defined as a vec2, ivec2, or bvec2, two values will be -// returned. If it is defined as a vec3, ivec3, or bvec3, three values will -// be returned, and so on. To query values stored in uniform variables -// declared as arrays, call GetUniformfv for each element of the array. To -// query values stored in uniform variables declared as structures, call -// GetUniformfv for each field in the structure. The values for uniform -// variables declared as a matrix will be returned in column major order. -// -// The locations assigned to uniform variables are not known until the -// program object is linked. After linking has occurred, the command -// GetUniformLocation can be used to obtain the location of a uniform -// variable. This location value can then be passed to GetUniformfv in order -// to query the current value of the uniform variable. After a program object -// has been linked successfully, the index values for uniform variables -// remain fixed until the next link command occurs. The uniform variable -// values can only be queried after a link if the link was successful. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program -// object. GL.INVALID_OPERATION is generated if program has not been -// successfully linked. GL.INVALID_OPERATION is generated if location does -// not correspond to a valid uniform variable location for the specified -// program object. GL.INVALID_OPERATION is generated if GetUniformfv is -// executed between the execution of Begin and the corresponding execution of -// End. -// -// GetUniformfv is available in GL version 2.0 or greater. -func (gl *GL) GetUniformfv(program glbase.Program, location glbase.Uniform, params []float32) { - var params_c [4]float32 - C.gl3_2core_glGetUniformfv(gl.funcs, C.GLuint(program), C.GLint(location), (*C.GLfloat)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetUniformLocation returns an integer that represents the location of a -// specific uniform variable within a program object. name must be an active -// uniform variable name in program that is not a structure, an array of -// structures, or a subcomponent of a vector or a matrix. This function -// returns -1 if name does not correspond to an active uniform variable in -// program or if name starts with the reserved prefix "gl_". -// -// Uniform variables that are structures or arrays of structures may be -// queried by calling GetUniformLocation for each field within the -// structure. The array element operator "[]" and the structure field -// operator "." may be used in name in order to select elements within an -// array or fields within a structure. The result of using these operators is -// not allowed to be another structure, an array of structures, or a -// subcomponent of a vector or a matrix. Except if the last part of name -// indicates a uniform variable array, the location of the first element of -// an array can be retrieved by using the name of the array, or by using the -// name appended by "[0]". -// -// The actual locations assigned to uniform variables are not known until the -// program object is linked successfully. After linking has occurred, the -// command GetUniformLocation can be used to obtain the location of a -// uniform variable. This location value can then be passed to Uniform to -// set the value of the uniform variable or to GetUniform in order to query -// the current value of the uniform variable. After a program object has been -// linked successfully, the index values for uniform variables remain fixed -// until the next link command occurs. Uniform variable locations and values -// can only be queried after a link if the link was successful. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program object. -// GL.INVALID_OPERATION is generated if program has not been successfully -// linked. GL.INVALID_OPERATION is generated if GetUniformLocation is executed -// between the execution of Begin and the corresponding execution of End. -// -// GetUniformLocation is available in GL version 2.0 or greater. -func (gl *GL) GetUniformLocation(program glbase.Program, name string) glbase.Uniform { - name_cstr := C.CString(name) - glresult := C.gl3_2core_glGetUniformLocation(gl.funcs, C.GLuint(program), (*C.GLchar)(name_cstr)) - C.free(unsafe.Pointer(name_cstr)) - return glbase.Uniform(glresult) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetShaderSource.xml -func (gl *GL) GetShaderSource(shader glbase.Shader, bufSize int32, length []int32, source []byte) { - C.gl3_2core_glGetShaderSource(gl.funcs, C.GLuint(shader), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLchar)(unsafe.Pointer(&source[0]))) -} - -// GetShaderInfoLog returns the information log for the specified shader -// object. The information log for a shader object is modified when the -// shader is compiled. -// -// The information log for a shader object is a string that may contain -// diagnostic messages, warning messages, and other information about the -// last compile operation. When a shader object is created, its information -// log will be a string of length 0, and the size of the current log can be -// obtained by calling GetShaderiv with the value GL.INFO_LOG_LENGTH. -// -// The information log for a shader object is the OpenGL implementer's -// primary mechanism for conveying information about the compilation process. -// Therefore, the information log can be helpful to application developers -// during the development process, even when compilation is successful. -// Application developers should not expect different OpenGL implementations -// to produce identical information logs. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader is not a shader -// object. GL.INVALID_VALUE is generated if maxLength is less than 0. -// GL.INVALID_OPERATION is generated if GetShaderInfoLog is executed -// between the execution of Begin and the corresponding execution of End. -// -// GetShaderInfoLog is available in GL version 2.0 or greater. -func (gl *GL) GetShaderInfoLog(shader glbase.Shader) []byte { - var params [1]int32 - var length int32 - gl.GetShaderiv(shader, INFO_LOG_LENGTH, params[:]) - bufSize := params[0] - infoLog := make([]byte, int(bufSize)) - C.gl3_2core_glGetShaderInfoLog(gl.funcs, C.GLuint(shader), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length)), (*C.GLchar)(unsafe.Pointer(&infoLog[0]))) - return infoLog -} - -// GetShaderiv GetShader returns in params the value of a parameter for a specific -// shader object. The following parameters are defined: -// -// GL.SHADER_TYPE -// params returns GL.VERTEX_SHADER if shader is a vertex shader object, -// and GL.FRAGMENT_SHADER if shader is a fragment shader object. -// -// GL.DELETE_STATUS -// params returns GL.TRUE if shader is currently flagged for deletion, -// and GL.FALSE otherwise. -// -// GL.COMPILE_STATUS -// params returns GL.TRUE if the last compile operation on shader was -// successful, and GL.FALSE otherwise. -// -// GL.INFO_LOG_LENGTH -// params returns the number of characters in the information log for -// shader including the null termination character (the size of the -// character buffer required to store the information log). If shader has -// no information log, a value of 0 is returned. -// -// GL.SHADER_SOURCE_LENGTH -// params returns the length of the concatenation of the source strings -// that make up the shader source for the shader, including the null -// termination character. (the size of the character buffer -// required to store the shader source). If no source code exists, 0 is -// returned. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader does not refer to a -// shader object. GL.INVALID_ENUM is generated if pname is not an accepted -// value. GL.INVALID_OPERATION is generated if GetShader is executed -// between the execution of Begin and the corresponding execution of End. -// -// GetShaderiv is available in GL version 2.0 or greater. -func (gl *GL) GetShaderiv(shader glbase.Shader, pname glbase.Enum, params []int32) { - var params_c [4]int32 - C.gl3_2core_glGetShaderiv(gl.funcs, C.GLuint(shader), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetProgramInfoLog returns the information log for the specified program -// object. The information log for a program object is modified when the -// program object is linked or validated. -// -// The information log for a program object is either an empty string, or a -// string containing information about the last link operation, or a string -// containing information about the last validation operation. It may contain -// diagnostic messages, warning messages, and other information. When a -// program object is created, its information log will be a string of length -// 0, and the size of the current log can be obtained by calling GetProgramiv -// with the value GL.INFO_LOG_LENGTH. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated -// by OpenGL. GL.INVALID_OPERATION is generated if program is not a -// program object. -func (gl *GL) GetProgramInfoLog(program glbase.Program) []byte { - var params [1]int32 - var length int32 - gl.GetProgramiv(program, INFO_LOG_LENGTH, params[:]) - bufSize := params[0] - infoLog := make([]byte, int(bufSize)) - C.gl3_2core_glGetProgramInfoLog(gl.funcs, C.GLuint(program), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length)), (*C.GLchar)(unsafe.Pointer(&infoLog[0]))) - return infoLog -} - -// GetProgramiv returns in params the value of a parameter for a specific -// program object. The following parameters are defined: -// -// GL.DELETE_STATUS -// params returns GL.TRUE if program is currently flagged for deletion, -// and GL.FALSE otherwise. -// -// GL.LINK_STATUS -// params returns GL.TRUE if the last link operation on program was -// successful, and GL.FALSE otherwise. -// -// GL.VALIDATE_STATUS -// params returns GL.TRUE or if the last validation operation on -// program was successful, and GL.FALSE otherwise. -// -// GL.INFO_LOG_LENGTH -// params returns the number of characters in the information log for -// program including the null termination character (the size of -// the character buffer required to store the information log). If -// program has no information log, a value of 0 is returned. -// -// GL.ATTACHED_SHADERS -// params returns the number of shader objects attached to program. -// -// GL.ACTIVE_ATTRIBUTES -// params returns the number of active attribute variables for program. -// -// GL.ACTIVE_ATTRIBUTE_MAX_LENGTH -// params returns the length of the longest active attribute name for -// program, including the null termination character (the size of -// the character buffer required to store the longest attribute name). -// If no active attributes exist, 0 is returned. -// -// GL.ACTIVE_UNIFORMS -// params returns the number of active uniform variables for program. -// -// GL.ACTIVE_UNIFORM_MAX_LENGTH -// params returns the length of the longest active uniform variable -// name for program, including the null termination character (i.e., -// the size of the character buffer required to store the longest -// uniform variable name). If no active uniform variables exist, 0 is -// returned. -// -// GL.TRANSFORM_FEEDBACK_BUFFER_MODE -// params returns a symbolic constant indicating the buffer mode used -// when transform feedback is active. This may be GL.SEPARATE_ATTRIBS -// or GL.INTERLEAVED_ATTRIBS. -// -// GL.TRANSFORM_FEEDBACK_VARYINGS -// params returns the number of varying variables to capture in transform -// feedback mode for the program. -// -// GL.TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH -// params returns the length of the longest variable name to be used for -// transform feedback, including the null-terminator. -// -// GL.GEOMETRY_VERTICES_OUT -// params returns the maximum number of vertices that the geometry shader in -// program will output. -// -// GL.GEOMETRY_INPUT_TYPE -// params returns a symbolic constant indicating the primitive type accepted -// as input to the geometry shader contained in program. -// -// GL.GEOMETRY_OUTPUT_TYPE -// params returns a symbolic constant indicating the primitive type that will -// be output by the geometry shader contained in program. -// -// GL.ACTIVE_UNIFORM_BLOCKS and GL.ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH are -// available only if the GL version 3.1 or greater. -// -// GL.GEOMETRY_VERTICES_OUT, GL.GEOMETRY_INPUT_TYPE and -// GL.GEOMETRY_OUTPUT_TYPE are accepted only if the GL version is 3.2 or -// greater. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program does not refer to a -// program object. GL.INVALID_OPERATION is generated if pname is -// GL.GEOMETRY_VERTICES_OUT, GL.GEOMETRY_INPUT_TYPE, or -// GL.GEOMETRY_OUTPUT_TYPE, and program does not contain a geometry shader. -// GL.INVALID_ENUM is generated if pname is not an accepted value. -func (gl *GL) GetProgramiv(program glbase.Program, pname glbase.Enum, params []int32) { - var params_c [4]int32 - C.gl3_2core_glGetProgramiv(gl.funcs, C.GLuint(program), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetAttribLocation queries the previously linked program object specified -// by program for the attribute variable specified by name and returns the -// index of the generic vertex attribute that is bound to that attribute -// variable. If name is a matrix attribute variable, the index of the first -// column of the matrix is returned. If the named attribute variable is not -// an active attribute in the specified program object or if name starts with -// the reserved prefix "gl_", a value of -1 is returned. -// -// The association between an attribute variable name and a generic attribute -// index can be specified at any time by calling BindAttribLocation. -// Attribute bindings do not go into effect until LinkProgram is called. -// After a program object has been linked successfully, the index values for -// attribute variables remain fixed until the next link command occurs. The -// attribute values can only be queried after a link if the link was -// successful. GetAttribLocation returns the binding that actually went -// into effect the last time LinkProgram was called for the specified -// program object. Attribute bindings that have been specified since the last -// link operation are not returned by GetAttribLocation. -// -// Error GL_INVALID_OPERATION is generated if program is not a value -// generated by OpenGL. GL_INVALID_OPERATION is generated if program is not -// a program object. GL_INVALID_OPERATION is generated if program has not -// been successfully linked. GL_INVALID_OPERATION is generated if -// GetAttribLocation is executed between the execution of Begin and the -// corresponding execution of End. -// -// GetAttribLocation is available in GL version 2.0 or greater. -func (gl *GL) GetAttribLocation(program glbase.Program, name string) glbase.Attrib { - name_cstr := C.CString(name) - glresult := C.gl3_2core_glGetAttribLocation(gl.funcs, C.GLuint(program), (*C.GLchar)(name_cstr)) - C.free(unsafe.Pointer(name_cstr)) - return glbase.Attrib(glresult) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetAttachedShaders.xml -func (gl *GL) GetAttachedShaders(program glbase.Program, maxCount int32, count []int, obj []uint32) { - C.gl3_2core_glGetAttachedShaders(gl.funcs, C.GLuint(program), C.GLsizei(maxCount), (*C.GLsizei)(unsafe.Pointer(&count[0])), (*C.GLuint)(unsafe.Pointer(&obj[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetActiveUniform.xml -func (gl *GL) GetActiveUniform(program glbase.Program, index uint32, bufSize int32, length []int32, size []int, gltype []glbase.Enum, name []byte) { - C.gl3_2core_glGetActiveUniform(gl.funcs, C.GLuint(program), C.GLuint(index), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLint)(unsafe.Pointer(&size[0])), (*C.GLenum)(unsafe.Pointer(&gltype[0])), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetActiveAttrib.xml -func (gl *GL) GetActiveAttrib(program glbase.Program, index glbase.Attrib, bufSize int32, length []int32, size []int, gltype []glbase.Enum, name []byte) { - C.gl3_2core_glGetActiveAttrib(gl.funcs, C.GLuint(program), C.GLuint(index), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLint)(unsafe.Pointer(&size[0])), (*C.GLenum)(unsafe.Pointer(&gltype[0])), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEnableVertexAttribArray.xml -func (gl *GL) EnableVertexAttribArray(index glbase.Attrib) { - C.gl3_2core_glEnableVertexAttribArray(gl.funcs, C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDisableVertexAttribArray.xml -func (gl *GL) DisableVertexAttribArray(index glbase.Attrib) { - C.gl3_2core_glDisableVertexAttribArray(gl.funcs, C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDetachShader.xml -func (gl *GL) DetachShader(program glbase.Program, shader glbase.Shader) { - C.gl3_2core_glDetachShader(gl.funcs, C.GLuint(program), C.GLuint(shader)) -} - -// DeleteShader frees the memory and invalidates the name associated with -// the shader object specified by shader. This command effectively undoes the -// effects of a call to CreateShader. -// -// If a shader object to be deleted is attached to a program object, it will -// be flagged for deletion, but it will not be deleted until it is no longer -// attached to any program object, for any rendering context (it must -// be detached from wherever it was attached before it will be deleted). A -// value of 0 for shader will be silently ignored. -// -// To determine whether an object has been flagged for deletion, call -// GetShader with arguments shader and GL.DELETE_STATUS. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. -// -// DeleteShader is available in GL version 2.0 or greater. -func (gl *GL) DeleteShader(shader glbase.Shader) { - C.gl3_2core_glDeleteShader(gl.funcs, C.GLuint(shader)) -} - -// DeleteProgram frees the memory and invalidates the name associated with -// the program object specified by program. This command effectively undoes -// the effects of a call to CreateProgram. -// -// If a program object is in use as part of current rendering state, it will -// be flagged for deletion, but it will not be deleted until it is no longer -// part of current state for any rendering context. If a program object to be -// deleted has shader objects attached to it, those shader objects will be -// automatically detached but not deleted unless they have already been -// flagged for deletion by a previous call to DeleteShader. A value of 0 -// for program will be silently ignored. -// -// To determine whether a program object has been flagged for deletion, call -// GetProgram with arguments program and GL.DELETE_STATUS. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. -// -// DeleteProgram is available in GL version 2.0 or greater. -func (gl *GL) DeleteProgram(program glbase.Program) { - C.gl3_2core_glDeleteProgram(gl.funcs, C.GLuint(program)) -} - -// CreateShader creates an empty shader object and returns a non-zero value -// by which it can be referenced. A shader object is used to maintain the -// source code strings that define a shader. shaderType indicates the type of -// shader to be created. -// -// Two types of shaders are supported. A shader of type GL.VERTEX_SHADER is a -// shader that is intended to run on the programmable vertex processor and -// replace the fixed functionality vertex processing in OpenGL. A shader of -// type GL.FRAGMENT_SHADER is a shader that is intended to run on the -// programmable fragment processor and replace the fixed functionality -// fragment processing in OpenGL. -// -// When created, a shader object's GL.SHADER_TYPE parameter is set to either -// GL.VERTEX_SHADER or GL.FRAGMENT_SHADER, depending on the value of -// shaderType. -// -// Like display lists and texture objects, the name space for shader objects -// may be shared across a set of contexts, as long as the server sides of the -// contexts share the same address space. If the name space is shared across -// contexts, any attached objects and the data associated with those attached -// objects are shared as well. -// -// This function returns 0 if an error occurs creating the shader object. -// -// Error GL.INVALID_ENUM is generated if shaderType is not an accepted value. -// GL.INVALID_OPERATION is generated if CreateShader is executed between the -// execution of Begin and the corresponding execution of End. -// -// CreateShader is available in GL version 2.0 or greater. -func (gl *GL) CreateShader(gltype glbase.Enum) glbase.Shader { - glresult := C.gl3_2core_glCreateShader(gl.funcs, C.GLenum(gltype)) - return glbase.Shader(glresult) -} - -// CreateProgram creates an empty program object and returns a non-zero -// value by which it can be referenced. A program object is an object to -// which shader objects can be attached. This provides a mechanism to specify -// the shader objects that will be linked to create a program. It also -// provides a means for checking the compatibility of the shaders that will -// be used to create a program (for instance, checking the compatibility -// between a vertex shader and a fragment shader). When no longer needed as -// part of a program object, shader objects can be detached. -// -// One or more executables are created in a program object by successfully -// attaching shader objects to it with AttachShader, successfully compiling -// the shader objects with CompileShader, and successfully linking the -// program object with LinkProgram. These executables are made part of -// current state when UseProgram is called. Program objects can be deleted -// by calling DeleteProgram. The memory associated with the program object -// will be deleted when it is no longer part of current rendering state for -// any context. -// -// Like display lists and texture objects, the name space for program objects -// may be shared across a set of contexts, as long as the server sides of the -// contexts share the same address space. If the name space is shared across -// contexts, any attached objects and the data associated with those attached -// objects are shared as well. -// -// Applications are responsible for providing the synchronization across API -// calls when objects are accessed from different execution threads. -// -// This function returns 0 if an error occurs creating the program object. -// -// Error GL.INVALID_OPERATION is generated if CreateProgram is executed -// between the execution of Begin and the corresponding execution of End. -// -// CreateProgram is available in GL version 2.0 or greater. -func (gl *GL) CreateProgram() glbase.Program { - glresult := C.gl3_2core_glCreateProgram(gl.funcs) - return glbase.Program(glresult) -} - -// CompileShader compiles the source code strings that have been stored in -// the shader object specified by shader. -// -// The compilation status will be stored as part of the shader object's -// state. This value will be set to GL.TRUE if the shader was compiled without -// errors and is ready for use, and GL.FALSE otherwise. It can be queried by -// calling GetShaderiv with arguments shader and GL.COMPILE_STATUS. -// -// Compilation of a shader can fail for a number of reasons as specified by -// the OpenGL Shading Language Specification. Whether or not the compilation -// was successful, information about the compilation can be obtained from the -// shader object's information log by calling GetShaderInfoLog. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader is not a shader -// object. GL.INVALID_OPERATION is generated if CompileShader is executed -// between the execution of Begin and the corresponding execution of End. -// -// CompileShader is available in GL version 2.0 or greater. -func (gl *GL) CompileShader(shader glbase.Shader) { - C.gl3_2core_glCompileShader(gl.funcs, C.GLuint(shader)) -} - -// BindAttribLocation associates a user-defined attribute variable in the program -// object specified by program with a generic vertex attribute index. The name -// parameter specifies the name of the vertex shader attribute variable to -// which index is to be bound. When program is made part of the current state, -// values provided via the generic vertex attribute index will modify the -// value of the user-defined attribute variable specified by name. -// -// If name refers to a matrix attribute variable, index refers to the first -// column of the matrix. Other matrix columns are then automatically bound to -// locations index+1 for a matrix of type mat2; index+1 and index+2 for a -// matrix of type mat3; and index+1, index+2, and index+3 for a matrix of -// type mat4. -// -// This command makes it possible for vertex shaders to use descriptive names -// for attribute variables rather than generic variables that are numbered -// from 0 to GL.MAX_VERTEX_ATTRIBS-1. The values sent to each generic -// attribute index are part of current state, just like standard vertex -// attributes such as color, normal, and vertex position. If a different -// program object is made current by calling UseProgram, the generic vertex -// attributes are tracked in such a way that the same values will be observed -// by attributes in the new program object that are also bound to index. -// -// Attribute variable name-to-generic attribute index bindings for a program -// object can be explicitly assigned at any time by calling -// BindAttribLocation. Attribute bindings do not go into effect until -// LinkProgram is called. After a program object has been linked -// successfully, the index values for generic attributes remain fixed (and -// their values can be queried) until the next link command occurs. -// -// Applications are not allowed to bind any of the standard OpenGL vertex -// attributes using this command, as they are bound automatically when -// needed. Any attribute binding that occurs after the program object has -// been linked will not take effect until the next time the program object is -// linked. -// -// If name was bound previously, that information is lost. Thus you cannot -// bind one user-defined attribute variable to multiple indices, but you can -// bind multiple user-defined attribute variables to the same index. -// -// Applications are allowed to bind more than one user-defined attribute -// variable to the same generic vertex attribute index. This is called -// aliasing, and it is allowed only if just one of the aliased attributes is -// active in the executable program, or if no path through the shader -// consumes more than one attribute of a set of attributes aliased to the -// same location. The compiler and linker are allowed to assume that no -// aliasing is done and are free to employ optimizations that work only in -// the absence of aliasing. OpenGL implementations are not required to do -// error checking to detect aliasing. Because there is no way to bind -// standard attributes, it is not possible to alias generic attributes with -// conventional ones (except for generic attribute 0). -// -// BindAttribLocation can be called before any vertex shader objects are -// bound to the specified program object. It is also permissible to bind a -// generic attribute index to an attribute variable name that is never used -// in a vertex shader. -// -// Active attributes that are not explicitly bound will be bound by the -// linker when LinkProgram is called. The locations assigned can be queried -// by calling GetAttribLocation. -// -// Error GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. -// GL.INVALID_OPERATION is generated if name starts with the reserved prefix "gl_". -// GL.INVALID_VALUE is generated if program is not a value generated by OpenGL. -// GL.INVALID_OPERATION is generated if program is not a program object. -// GL.INVALID_OPERATION is generated if BindAttribLocation is executed -// between the execution of Begin and the corresponding execution of End. -// -// BindAttribLocation is available in GL version 2.0 or greater. -func (gl *GL) BindAttribLocation(program glbase.Program, index glbase.Attrib, name string) { - name_cstr := C.CString(name) - C.gl3_2core_glBindAttribLocation(gl.funcs, C.GLuint(program), C.GLuint(index), (*C.GLchar)(name_cstr)) - C.free(unsafe.Pointer(name_cstr)) -} - -// AttachShader attaches a shader object to a program object. -// -// In order to create an executable, there must be a way to specify the list -// of things that will be linked together. Program objects provide this -// mechanism. Shaders that are to be linked together in a program object must -// first be attached to that program object. This indicates that shader will -// be included in link operations that will be performed on program. -// -// All operations that can be performed on a shader object are valid whether -// or not the shader object is attached to a program object. It is -// permissible to attach a shader object to a program object before source -// code has been loaded into the shader object or before the shader object -// has been compiled. It is permissible to attach multiple shader objects of -// the same type because each may contain a portion of the complete shader. -// It is also permissible to attach a shader object to more than one program -// object. If a shader object is deleted while it is attached to a program -// object, it will be flagged for deletion, and deletion will not occur until -// DetachShader is called to detach it from all program objects to which it -// is attached. -// -// Error GL.INVALID_VALUE is generated if either program or shader is not a -// value generated by OpenGL. GL.INVALID_OPERATION is generated if program -// is not a program object. GL.INVALID_OPERATION is generated if shader is -// not a shader object. GL.INVALID_OPERATION is generated if shader is -// already attached to program. GL.INVALID_OPERATION is generated if -// AttachShader is executed between the execution of Begin and the -// corresponding execution of End. -// -// AttachShader is available in GL version 2.0 or greater. -func (gl *GL) AttachShader(program glbase.Program, shader glbase.Shader) { - C.gl3_2core_glAttachShader(gl.funcs, C.GLuint(program), C.GLuint(shader)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glStencilMaskSeparate.xml -func (gl *GL) StencilMaskSeparate(face glbase.Enum, mask uint32) { - C.gl3_2core_glStencilMaskSeparate(gl.funcs, C.GLenum(face), C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glStencilFuncSeparate.xml -func (gl *GL) StencilFuncSeparate(face, glfunc glbase.Enum, ref int32, mask uint32) { - C.gl3_2core_glStencilFuncSeparate(gl.funcs, C.GLenum(face), C.GLenum(glfunc), C.GLint(ref), C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glStencilOpSeparate.xml -func (gl *GL) StencilOpSeparate(face, sfail, dpfail, dppass glbase.Enum) { - C.gl3_2core_glStencilOpSeparate(gl.funcs, C.GLenum(face), C.GLenum(sfail), C.GLenum(dpfail), C.GLenum(dppass)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDrawBuffers.xml -func (gl *GL) DrawBuffers(n int, bufs []glbase.Enum) { - C.gl3_2core_glDrawBuffers(gl.funcs, C.GLsizei(n), (*C.GLenum)(unsafe.Pointer(&bufs[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBlendEquationSeparate.xml -func (gl *GL) BlendEquationSeparate(modeRGB, modeAlpha glbase.Enum) { - C.gl3_2core_glBlendEquationSeparate(gl.funcs, C.GLenum(modeRGB), C.GLenum(modeAlpha)) -} - -// UniformMatrix4x3fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix4x3fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix4x3fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(4*3) != 0 { - panic("invalid value length for UniformMatrix4x3fv") - } - count := len(value) / (4 * 3) - C.gl3_2core_glUniformMatrix4x3fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix3x4fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix3x4fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix3x4fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(3*4) != 0 { - panic("invalid value length for UniformMatrix3x4fv") - } - count := len(value) / (3 * 4) - C.gl3_2core_glUniformMatrix3x4fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix4x2fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix4x2fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix4x2fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(4*2) != 0 { - panic("invalid value length for UniformMatrix4x2fv") - } - count := len(value) / (4 * 2) - C.gl3_2core_glUniformMatrix4x2fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix2x4fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix2x4fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix2x4fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(2*4) != 0 { - panic("invalid value length for UniformMatrix2x4fv") - } - count := len(value) / (2 * 4) - C.gl3_2core_glUniformMatrix2x4fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix3x2fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix3x2fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix3x2fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(3*2) != 0 { - panic("invalid value length for UniformMatrix3x2fv") - } - count := len(value) / (3 * 2) - C.gl3_2core_glUniformMatrix3x2fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix2x3fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix2x3fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix2x3fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(2*3) != 0 { - panic("invalid value length for UniformMatrix2x3fv") - } - count := len(value) / (2 * 3) - C.gl3_2core_glUniformMatrix2x3fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsVertexArray.xml -func (gl *GL) IsVertexArray(array uint32) bool { - glresult := C.gl3_2core_glIsVertexArray(gl.funcs, C.GLuint(array)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGenVertexArrays.xml -func (gl *GL) GenVertexArrays(n int, arrays []uint32) { - C.gl3_2core_glGenVertexArrays(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&arrays[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDeleteVertexArrays.xml -func (gl *GL) DeleteVertexArrays(n int, arrays []uint32) { - C.gl3_2core_glDeleteVertexArrays(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&arrays[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBindVertexArray.xml -func (gl *GL) BindVertexArray(array uint32) { - C.gl3_2core_glBindVertexArray(gl.funcs, C.GLuint(array)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFlushMappedBufferRange.xml -func (gl *GL) FlushMappedBufferRange(target glbase.Enum, offset, length int) { - C.gl3_2core_glFlushMappedBufferRange(gl.funcs, C.GLenum(target), C.GLintptr(offset), C.GLsizeiptr(length)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFramebufferTextureLayer.xml -func (gl *GL) FramebufferTextureLayer(target, attachment glbase.Enum, texture glbase.Texture, level int, layer int32) { - C.gl3_2core_glFramebufferTextureLayer(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLuint(texture), C.GLint(level), C.GLint(layer)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRenderbufferStorageMultisample.xml -func (gl *GL) RenderbufferStorageMultisample(target glbase.Enum, samples int32, internalFormat glbase.Enum, width, height int) { - C.gl3_2core_glRenderbufferStorageMultisample(gl.funcs, C.GLenum(target), C.GLsizei(samples), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBlitFramebuffer.xml -func (gl *GL) BlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1 int32, mask glbase.Bitfield, filter glbase.Enum) { - C.gl3_2core_glBlitFramebuffer(gl.funcs, C.GLint(srcX0), C.GLint(srcY0), C.GLint(srcX1), C.GLint(srcY1), C.GLint(dstX0), C.GLint(dstY0), C.GLint(dstX1), C.GLint(dstY1), C.GLbitfield(mask), C.GLenum(filter)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGenerateMipmap.xml -func (gl *GL) GenerateMipmap(target glbase.Enum) { - C.gl3_2core_glGenerateMipmap(gl.funcs, C.GLenum(target)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetFramebufferAttachmentParameteriv.xml -func (gl *GL) GetFramebufferAttachmentParameteriv(target, attachment, pname glbase.Enum, params []int32) { - C.gl3_2core_glGetFramebufferAttachmentParameteriv(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFramebufferRenderbuffer.xml -func (gl *GL) FramebufferRenderbuffer(target, attachment, renderbuffertarget glbase.Enum, renderbuffer glbase.Renderbuffer) { - C.gl3_2core_glFramebufferRenderbuffer(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(renderbuffertarget), C.GLuint(renderbuffer)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFramebufferTexture3D.xml -func (gl *GL) FramebufferTexture3D(target, attachment, textarget glbase.Enum, texture glbase.Texture, level int, zoffset int32) { - C.gl3_2core_glFramebufferTexture3D(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(textarget), C.GLuint(texture), C.GLint(level), C.GLint(zoffset)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFramebufferTexture2D.xml -func (gl *GL) FramebufferTexture2D(target, attachment, textarget glbase.Enum, texture glbase.Texture, level int) { - C.gl3_2core_glFramebufferTexture2D(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(textarget), C.GLuint(texture), C.GLint(level)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFramebufferTexture1D.xml -func (gl *GL) FramebufferTexture1D(target, attachment, textarget glbase.Enum, texture glbase.Texture, level int) { - C.gl3_2core_glFramebufferTexture1D(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(textarget), C.GLuint(texture), C.GLint(level)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCheckFramebufferStatus.xml -func (gl *GL) CheckFramebufferStatus(target glbase.Enum) glbase.Enum { - glresult := C.gl3_2core_glCheckFramebufferStatus(gl.funcs, C.GLenum(target)) - return glbase.Enum(glresult) -} - -// GenFramebuffers returns n framebuffer object names in ids. There is no -// guarantee that the names form a contiguous set of integers; however, it is -// guaranteed that none of the returned names was in use immediately before -// the call to GenFramebuffers. -// -// Framebuffer object names returned by a call to GenFramebuffers are not -// returned by subsequent calls, unless they are first deleted with -// DeleteFramebuffers. -// -// The names returned in ids are marked as used, for the purposes of -// GenFramebuffers only, but they acquire state and type only when they are -// first bound. -// -// Error GL.INVALID_VALUE is generated if n is negative. -func (gl *GL) GenFramebuffers(n int) []glbase.Framebuffer { - if n == 0 { - return nil - } - framebuffers := make([]glbase.Framebuffer, n) - C.gl3_2core_glGenFramebuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&framebuffers[0]))) - return framebuffers -} - -// DeleteFramebuffers deletes the framebuffer objects whose names are -// stored in the framebuffers slice. The name zero is reserved by the GL and -// is silently ignored, should it occur in framebuffers, as are other unused -// names. Once a framebuffer object is deleted, its name is again unused and -// it has no attachments. If a framebuffer that is currently bound to one or -// more of the targets GL.DRAW_FRAMEBUFFER or GL.READ_FRAMEBUFFER is deleted, -// it is as though BindFramebuffer had been executed with the corresponding -// target and framebuffer zero. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// DeleteFramebuffers is available in GL version 3.0 or greater. -func (gl *GL) DeleteFramebuffers(framebuffers []glbase.Framebuffer) { - n := len(framebuffers) - if n == 0 { - return - } - C.gl3_2core_glDeleteFramebuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&framebuffers[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBindFramebuffer.xml -func (gl *GL) BindFramebuffer(target glbase.Enum, framebuffer glbase.Framebuffer) { - C.gl3_2core_glBindFramebuffer(gl.funcs, C.GLenum(target), C.GLuint(framebuffer)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsFramebuffer.xml -func (gl *GL) IsFramebuffer(framebuffer glbase.Framebuffer) bool { - glresult := C.gl3_2core_glIsFramebuffer(gl.funcs, C.GLuint(framebuffer)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetRenderbufferParameteriv.xml -func (gl *GL) GetRenderbufferParameteriv(target, pname glbase.Enum, params []int32) { - C.gl3_2core_glGetRenderbufferParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRenderbufferStorage.xml -func (gl *GL) RenderbufferStorage(target, internalFormat glbase.Enum, width, height int) { - C.gl3_2core_glRenderbufferStorage(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height)) -} - -// GenRenderbuffers returns n renderbuffer object names in renderbuffers. -// There is no guarantee that the names form a contiguous set of integers; -// however, it is guaranteed that none of the returned names was in use -// immediately before the call to GenRenderbuffers. -// -// Renderbuffer object names returned by a call to GenRenderbuffers are not -// returned by subsequent calls, unless they are first deleted with -// DeleteRenderbuffers. -// -// The names returned in renderbuffers are marked as used, for the purposes -// of GenRenderbuffers only, but they acquire state and type only when they -// are first bound. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// GenRenderbuffers is available in GL version 3.0 or greater. -func (gl *GL) GenRenderbuffers(n int) []glbase.Renderbuffer { - if n == 0 { - return nil - } - renderbuffers := make([]glbase.Renderbuffer, n) - C.gl3_2core_glGenRenderbuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&renderbuffers[0]))) - return renderbuffers -} - -// DeleteRenderbuffers deletes the renderbuffer objects whose names are stored -// in the renderbuffers slice. The name zero is reserved by the GL and -// is silently ignored, should it occur in renderbuffers, as are other unused -// names. Once a renderbuffer object is deleted, its name is again unused and -// it has no contents. If a renderbuffer that is currently bound to the -// target GL.RENDERBUFFER is deleted, it is as though BindRenderbuffer had -// been executed with a target of GL.RENDERBUFFER and a name of zero. -// -// If a renderbuffer object is attached to one or more attachment points in -// the currently bound framebuffer, then it as if FramebufferRenderbuffer -// had been called, with a renderbuffer of zero for each attachment point to -// which this image was attached in the currently bound framebuffer. In other -// words, this renderbuffer object is first detached from all attachment -// ponits in the currently bound framebuffer. Note that the renderbuffer -// image is specifically not detached from any non-bound framebuffers. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// DeleteRenderbuffers is available in GL version 3.0 or greater. -func (gl *GL) DeleteRenderbuffers(renderbuffers []glbase.Renderbuffer) { - n := len(renderbuffers) - if n == 0 { - return - } - C.gl3_2core_glDeleteRenderbuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&renderbuffers[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBindRenderbuffer.xml -func (gl *GL) BindRenderbuffer(target glbase.Enum, renderbuffer glbase.Renderbuffer) { - C.gl3_2core_glBindRenderbuffer(gl.funcs, C.GLenum(target), C.GLuint(renderbuffer)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsRenderbuffer.xml -func (gl *GL) IsRenderbuffer(renderbuffer glbase.Renderbuffer) bool { - glresult := C.gl3_2core_glIsRenderbuffer(gl.funcs, C.GLuint(renderbuffer)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClearBufferfi.xml -func (gl *GL) ClearBufferfi(buffer glbase.Enum, drawbuffer int32, depth float32, stencil int32) { - C.gl3_2core_glClearBufferfi(gl.funcs, C.GLenum(buffer), C.GLint(drawbuffer), C.GLfloat(depth), C.GLint(stencil)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClearBufferfv.xml -func (gl *GL) ClearBufferfv(buffer glbase.Enum, drawbuffer int32, value []float32) { - C.gl3_2core_glClearBufferfv(gl.funcs, C.GLenum(buffer), C.GLint(drawbuffer), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClearBufferuiv.xml -func (gl *GL) ClearBufferuiv(buffer glbase.Enum, drawbuffer int32, value []uint32) { - C.gl3_2core_glClearBufferuiv(gl.funcs, C.GLenum(buffer), C.GLint(drawbuffer), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClearBufferiv.xml -func (gl *GL) ClearBufferiv(buffer glbase.Enum, drawbuffer int32, value []int32) { - C.gl3_2core_glClearBufferiv(gl.funcs, C.GLenum(buffer), C.GLint(drawbuffer), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetTexParameterIuiv.xml -func (gl *GL) GetTexParameterIuiv(target, pname glbase.Enum, params []uint32) { - C.gl3_2core_glGetTexParameterIuiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetTexParameterIiv.xml -func (gl *GL) GetTexParameterIiv(target, pname glbase.Enum, params []int32) { - C.gl3_2core_glGetTexParameterIiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexParameterIuiv.xml -func (gl *GL) TexParameterIuiv(target, pname glbase.Enum, params []uint32) { - C.gl3_2core_glTexParameterIuiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexParameterIiv.xml -func (gl *GL) TexParameterIiv(target, pname glbase.Enum, params []int32) { - C.gl3_2core_glTexParameterIiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// Uniform4uiv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform4uiv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4uiv(location glbase.Uniform, value []uint32) { - if len(value) == 0 { - return - } - if len(value)%4 != 0 { - panic("invalid value length for Uniform4uiv") - } - count := len(value) / 4 - C.gl3_2core_glUniform4uiv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// Uniform3uiv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform3uiv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3uiv(location glbase.Uniform, value []uint32) { - if len(value) == 0 { - return - } - if len(value)%3 != 0 { - panic("invalid value length for Uniform3uiv") - } - count := len(value) / 3 - C.gl3_2core_glUniform3uiv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// Uniform2uiv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform2uiv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2uiv(location glbase.Uniform, value []uint32) { - if len(value) == 0 { - return - } - if len(value)%2 != 0 { - panic("invalid value length for Uniform2uiv") - } - count := len(value) / 2 - C.gl3_2core_glUniform2uiv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// Uniform1uiv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform1uiv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1uiv(location glbase.Uniform, value []uint32) { - if len(value) == 0 { - return - } - count := len(value) - C.gl3_2core_glUniform1uiv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// Uniform4ui modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform4ui operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4ui(location glbase.Uniform, v0, v1, v2, v3 uint32) { - C.gl3_2core_glUniform4ui(gl.funcs, C.GLint(location), C.GLuint(v0), C.GLuint(v1), C.GLuint(v2), C.GLuint(v3)) -} - -// Uniform3ui modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform3ui operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3ui(location glbase.Uniform, v0, v1, v2 uint32) { - C.gl3_2core_glUniform3ui(gl.funcs, C.GLint(location), C.GLuint(v0), C.GLuint(v1), C.GLuint(v2)) -} - -// Uniform2ui modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform2ui operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2ui(location glbase.Uniform, v0, v1 uint32) { - C.gl3_2core_glUniform2ui(gl.funcs, C.GLint(location), C.GLuint(v0), C.GLuint(v1)) -} - -// Uniform1ui modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform1ui operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1ui(location glbase.Uniform, v0 uint32) { - C.gl3_2core_glUniform1ui(gl.funcs, C.GLint(location), C.GLuint(v0)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetFragDataLocation.xml -func (gl *GL) GetFragDataLocation(program glbase.Program, name []byte) int32 { - glresult := C.gl3_2core_glGetFragDataLocation(gl.funcs, C.GLuint(program), (*C.GLchar)(unsafe.Pointer(&name[0]))) - return int32(glresult) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBindFragDataLocation.xml -func (gl *GL) BindFragDataLocation(program glbase.Program, color uint32, name []byte) { - C.gl3_2core_glBindFragDataLocation(gl.funcs, C.GLuint(program), C.GLuint(color), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetUniformuiv.xml -func (gl *GL) GetUniformuiv(program glbase.Program, location glbase.Uniform, params []uint32) { - C.gl3_2core_glGetUniformuiv(gl.funcs, C.GLuint(program), C.GLint(location), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetVertexAttribIuiv.xml -func (gl *GL) GetVertexAttribIuiv(index glbase.Attrib, pname glbase.Enum, params []uint32) { - C.gl3_2core_glGetVertexAttribIuiv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetVertexAttribIiv.xml -func (gl *GL) GetVertexAttribIiv(index glbase.Attrib, pname glbase.Enum, params []int32) { - C.gl3_2core_glGetVertexAttribIiv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribIPointer.xml -func (gl *GL) VertexAttribIPointer(index glbase.Attrib, size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl3_2core_glVertexAttribIPointer(gl.funcs, C.GLuint(index), C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEndConditionalRender.xml -func (gl *GL) EndConditionalRender() { - C.gl3_2core_glEndConditionalRender(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBeginConditionalRender.xml -func (gl *GL) BeginConditionalRender(id uint32, mode glbase.Enum) { - C.gl3_2core_glBeginConditionalRender(gl.funcs, C.GLuint(id), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClampColor.xml -func (gl *GL) ClampColor(target, clamp glbase.Enum) { - C.gl3_2core_glClampColor(gl.funcs, C.GLenum(target), C.GLenum(clamp)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetTransformFeedbackVarying.xml -func (gl *GL) GetTransformFeedbackVarying(program glbase.Program, index uint32, bufSize int32, length []int32, size []int, gltype []glbase.Enum, name []byte) { - C.gl3_2core_glGetTransformFeedbackVarying(gl.funcs, C.GLuint(program), C.GLuint(index), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLsizei)(unsafe.Pointer(&size[0])), (*C.GLenum)(unsafe.Pointer(&gltype[0])), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBindBufferBase.xml -func (gl *GL) BindBufferBase(target glbase.Enum, index uint32, buffer glbase.Buffer) { - C.gl3_2core_glBindBufferBase(gl.funcs, C.GLenum(target), C.GLuint(index), C.GLuint(buffer)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBindBufferRange.xml -func (gl *GL) BindBufferRange(target glbase.Enum, index uint32, buffer glbase.Buffer, offset, size int) { - C.gl3_2core_glBindBufferRange(gl.funcs, C.GLenum(target), C.GLuint(index), C.GLuint(buffer), C.GLintptr(offset), C.GLsizeiptr(size)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEndTransformFeedback.xml -func (gl *GL) EndTransformFeedback() { - C.gl3_2core_glEndTransformFeedback(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBeginTransformFeedback.xml -func (gl *GL) BeginTransformFeedback(primitiveMode glbase.Enum) { - C.gl3_2core_glBeginTransformFeedback(gl.funcs, C.GLenum(primitiveMode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsEnabledi.xml -func (gl *GL) IsEnabledi(target glbase.Enum, index uint32) bool { - glresult := C.gl3_2core_glIsEnabledi(gl.funcs, C.GLenum(target), C.GLuint(index)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDisablei.xml -func (gl *GL) Disablei(target glbase.Enum, index uint32) { - C.gl3_2core_glDisablei(gl.funcs, C.GLenum(target), C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEnablei.xml -func (gl *GL) Enablei(target glbase.Enum, index uint32) { - C.gl3_2core_glEnablei(gl.funcs, C.GLenum(target), C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetIntegeri_v.xml -func (gl *GL) GetIntegeri_v(target glbase.Enum, index uint32, data []int32) { - C.gl3_2core_glGetIntegeri_v(gl.funcs, C.GLenum(target), C.GLuint(index), (*C.GLint)(unsafe.Pointer(&data[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetBooleani_v.xml -func (gl *GL) GetBooleani_v(target glbase.Enum, index uint32, data []bool) { - C.gl3_2core_glGetBooleani_v(gl.funcs, C.GLenum(target), C.GLuint(index), (*C.GLboolean)(unsafe.Pointer(&data[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColorMaski.xml -func (gl *GL) ColorMaski(index uint32, r, g, b, a bool) { - C.gl3_2core_glColorMaski(gl.funcs, C.GLuint(index), *(*C.GLboolean)(unsafe.Pointer(&r)), *(*C.GLboolean)(unsafe.Pointer(&g)), *(*C.GLboolean)(unsafe.Pointer(&b)), *(*C.GLboolean)(unsafe.Pointer(&a))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCopyBufferSubData.xml -func (gl *GL) CopyBufferSubData(readTarget, writeTarget glbase.Enum, readOffset, writeOffset, size int) { - C.gl3_2core_glCopyBufferSubData(gl.funcs, C.GLenum(readTarget), C.GLenum(writeTarget), C.GLintptr(readOffset), C.GLintptr(writeOffset), C.GLsizeiptr(size)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glUniformBlockBinding.xml -func (gl *GL) UniformBlockBinding(program glbase.Program, v0, v1 uint32) { - C.gl3_2core_glUniformBlockBinding(gl.funcs, C.GLuint(program), C.GLuint(v0), C.GLuint(v1)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetActiveUniformBlockName.xml -func (gl *GL) GetActiveUniformBlockName(program glbase.Program, uniformBlockIndex uint32, bufSize int32, length []int32, uniformBlockName []byte) { - C.gl3_2core_glGetActiveUniformBlockName(gl.funcs, C.GLuint(program), C.GLuint(uniformBlockIndex), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLchar)(unsafe.Pointer(&uniformBlockName[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetActiveUniformBlockiv.xml -func (gl *GL) GetActiveUniformBlockiv(program glbase.Program, uniformBlockIndex uint32, pname glbase.Enum, params []int32) { - C.gl3_2core_glGetActiveUniformBlockiv(gl.funcs, C.GLuint(program), C.GLuint(uniformBlockIndex), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetUniformBlockIndex.xml -func (gl *GL) GetUniformBlockIndex(program glbase.Program, uniformBlockName []byte) uint32 { - glresult := C.gl3_2core_glGetUniformBlockIndex(gl.funcs, C.GLuint(program), (*C.GLchar)(unsafe.Pointer(&uniformBlockName[0]))) - return uint32(glresult) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetActiveUniformName.xml -func (gl *GL) GetActiveUniformName(program glbase.Program, uniformIndex uint32, bufSize int32, length []int32, uniformName []byte) { - C.gl3_2core_glGetActiveUniformName(gl.funcs, C.GLuint(program), C.GLuint(uniformIndex), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLchar)(unsafe.Pointer(&uniformName[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetActiveUniformsiv.xml -func (gl *GL) GetActiveUniformsiv(program glbase.Program, uniformCount int32, uniformIndices []uint32, pname glbase.Enum, params []int32) { - C.gl3_2core_glGetActiveUniformsiv(gl.funcs, C.GLuint(program), C.GLsizei(uniformCount), (*C.GLuint)(unsafe.Pointer(&uniformIndices[0])), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPrimitiveRestartIndex.xml -func (gl *GL) PrimitiveRestartIndex(index uint32) { - C.gl3_2core_glPrimitiveRestartIndex(gl.funcs, C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexBuffer.xml -func (gl *GL) TexBuffer(target, internalFormat glbase.Enum, buffer glbase.Buffer) { - C.gl3_2core_glTexBuffer(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLuint(buffer)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDrawElementsInstanced.xml -func (gl *GL) DrawElementsInstanced(mode glbase.Enum, count int, gltype glbase.Enum, indices interface{}, instancecount int32) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl3_2core_glDrawElementsInstanced(gl.funcs, C.GLenum(mode), C.GLsizei(count), C.GLenum(gltype), indices_ptr, C.GLsizei(instancecount)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDrawArraysInstanced.xml -func (gl *GL) DrawArraysInstanced(mode glbase.Enum, first, count int, instancecount int32) { - C.gl3_2core_glDrawArraysInstanced(gl.funcs, C.GLenum(mode), C.GLint(first), C.GLsizei(count), C.GLsizei(instancecount)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSampleMaski.xml -func (gl *GL) SampleMaski(index uint32, mask glbase.Bitfield) { - C.gl3_2core_glSampleMaski(gl.funcs, C.GLuint(index), C.GLbitfield(mask)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetMultisamplefv.xml -func (gl *GL) GetMultisamplefv(pname glbase.Enum, index uint32, val []float32) { - C.gl3_2core_glGetMultisamplefv(gl.funcs, C.GLenum(pname), C.GLuint(index), (*C.GLfloat)(unsafe.Pointer(&val[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexImage3DMultisample.xml -func (gl *GL) TexImage3DMultisample(target glbase.Enum, samples, internalFormat int32, width, height int, depth int32, fixedsamplelocations bool) { - C.gl3_2core_glTexImage3DMultisample(gl.funcs, C.GLenum(target), C.GLsizei(samples), C.GLint(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), *(*C.GLboolean)(unsafe.Pointer(&fixedsamplelocations))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexImage2DMultisample.xml -func (gl *GL) TexImage2DMultisample(target glbase.Enum, samples, internalFormat int32, width, height int, fixedsamplelocations bool) { - C.gl3_2core_glTexImage2DMultisample(gl.funcs, C.GLenum(target), C.GLsizei(samples), C.GLint(internalFormat), C.GLsizei(width), C.GLsizei(height), *(*C.GLboolean)(unsafe.Pointer(&fixedsamplelocations))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetSynciv.xml -func (gl *GL) GetSynciv(sync glbase.Sync, pname glbase.Enum, bufSize int32, length, values []int32) { - C.gl3_2core_glGetSynciv(gl.funcs, C.GLsync(unsafe.Pointer(sync)), C.GLenum(pname), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLint)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetInteger64v.xml -func (gl *GL) GetInteger64v(pname glbase.Enum, params []int64) { - C.gl3_2core_glGetInteger64v(gl.funcs, C.GLenum(pname), (*C.GLint64)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glWaitSync.xml -func (gl *GL) WaitSync(sync glbase.Sync, flags glbase.Bitfield, timeout uint64) { - C.gl3_2core_glWaitSync(gl.funcs, C.GLsync(unsafe.Pointer(sync)), C.GLbitfield(flags), C.GLuint64(timeout)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClientWaitSync.xml -func (gl *GL) ClientWaitSync(sync glbase.Sync, flags glbase.Bitfield, timeout uint64) glbase.Enum { - glresult := C.gl3_2core_glClientWaitSync(gl.funcs, C.GLsync(unsafe.Pointer(sync)), C.GLbitfield(flags), C.GLuint64(timeout)) - return glbase.Enum(glresult) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDeleteSync.xml -func (gl *GL) DeleteSync(sync glbase.Sync) { - C.gl3_2core_glDeleteSync(gl.funcs, C.GLsync(unsafe.Pointer(sync))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsSync.xml -func (gl *GL) IsSync(sync glbase.Sync) bool { - glresult := C.gl3_2core_glIsSync(gl.funcs, C.GLsync(unsafe.Pointer(sync))) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFenceSync.xml -func (gl *GL) FenceSync(condition glbase.Enum, flags glbase.Bitfield) glbase.Sync { - glresult := C.gl3_2core_glFenceSync(gl.funcs, C.GLenum(condition), C.GLbitfield(flags)) - return glbase.Sync(unsafe.Pointer(glresult)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glProvokingVertex.xml -func (gl *GL) ProvokingVertex(mode glbase.Enum) { - C.gl3_2core_glProvokingVertex(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDrawElementsInstancedBaseVertex.xml -func (gl *GL) DrawElementsInstancedBaseVertex(mode glbase.Enum, count int, gltype glbase.Enum, indices interface{}, instancecount, basevertex int32) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl3_2core_glDrawElementsInstancedBaseVertex(gl.funcs, C.GLenum(mode), C.GLsizei(count), C.GLenum(gltype), indices_ptr, C.GLsizei(instancecount), C.GLint(basevertex)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDrawRangeElementsBaseVertex.xml -func (gl *GL) DrawRangeElementsBaseVertex(mode glbase.Enum, start, end uint32, count int, gltype glbase.Enum, indices interface{}, basevertex int32) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl3_2core_glDrawRangeElementsBaseVertex(gl.funcs, C.GLenum(mode), C.GLuint(start), C.GLuint(end), C.GLsizei(count), C.GLenum(gltype), indices_ptr, C.GLint(basevertex)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDrawElementsBaseVertex.xml -func (gl *GL) DrawElementsBaseVertex(mode glbase.Enum, count int, gltype glbase.Enum, indices interface{}, basevertex int32) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl3_2core_glDrawElementsBaseVertex(gl.funcs, C.GLenum(mode), C.GLsizei(count), C.GLenum(gltype), indices_ptr, C.GLint(basevertex)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFramebufferTexture.xml -func (gl *GL) FramebufferTexture(target, attachment glbase.Enum, texture glbase.Texture, level int) { - C.gl3_2core_glFramebufferTexture(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLuint(texture), C.GLint(level)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetBufferParameteri64v.xml -func (gl *GL) GetBufferParameteri64v(target, pname glbase.Enum, params []int64) { - C.gl3_2core_glGetBufferParameteri64v(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint64)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetInteger64i_v.xml -func (gl *GL) GetInteger64i_v(target glbase.Enum, index uint32, data []int64) { - C.gl3_2core_glGetInteger64i_v(gl.funcs, C.GLenum(target), C.GLuint(index), (*C.GLint64)(unsafe.Pointer(&data[0]))) -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/3.3compat/funcs.cpp b/Godeps/_workspace/src/github.com/obscuren/qml/gl/3.3compat/funcs.cpp deleted file mode 100644 index 65c02b7de4..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/3.3compat/funcs.cpp +++ /dev/null @@ -1,4488 +0,0 @@ - -// ** file automatically generated by glgen -- do not edit manually ** - -#include -#include - -#include "funcs.h" - -void *gl3_3compat_funcs() { - QOpenGLFunctions_3_3_Compatibility* funcs = QOpenGLContext::currentContext()->versionFunctions(); - if (!funcs) { - return 0; - } - funcs->initializeOpenGLFunctions(); - return funcs; -} - - -void gl3_3compat_glViewport(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glViewport(x, y, width, height); -} - -void gl3_3compat_glDepthRange(void *_glfuncs, GLdouble nearVal, GLdouble farVal) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthRange(nearVal, farVal); -} - -GLboolean gl3_3compat_glIsEnabled(void *_glfuncs, GLenum cap) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsEnabled(cap); -} - -void gl3_3compat_glGetTexLevelParameteriv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexLevelParameteriv(target, level, pname, params); -} - -void gl3_3compat_glGetTexLevelParameterfv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexLevelParameterfv(target, level, pname, params); -} - -void gl3_3compat_glGetTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameteriv(target, pname, params); -} - -void gl3_3compat_glGetTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameterfv(target, pname, params); -} - -void gl3_3compat_glGetTexImage(void *_glfuncs, GLenum target, GLint level, GLenum format, GLenum gltype, GLvoid* pixels) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexImage(target, level, format, gltype, pixels); -} - -void gl3_3compat_glGetIntegerv(void *_glfuncs, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetIntegerv(pname, params); -} - -void gl3_3compat_glGetFloatv(void *_glfuncs, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetFloatv(pname, params); -} - -GLenum gl3_3compat_glGetError(void *_glfuncs) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetError(); -} - -void gl3_3compat_glGetDoublev(void *_glfuncs, GLenum pname, GLdouble* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetDoublev(pname, params); -} - -void gl3_3compat_glGetBooleanv(void *_glfuncs, GLenum pname, GLboolean* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBooleanv(pname, params); -} - -void gl3_3compat_glReadPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum gltype, GLvoid* pixels) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glReadPixels(x, y, width, height, format, gltype, pixels); -} - -void gl3_3compat_glReadBuffer(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glReadBuffer(mode); -} - -void gl3_3compat_glPixelStorei(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelStorei(pname, param); -} - -void gl3_3compat_glPixelStoref(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelStoref(pname, param); -} - -void gl3_3compat_glDepthFunc(void *_glfuncs, GLenum glfunc) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthFunc(glfunc); -} - -void gl3_3compat_glStencilOp(void *_glfuncs, GLenum fail, GLenum zfail, GLenum zpass) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilOp(fail, zfail, zpass); -} - -void gl3_3compat_glStencilFunc(void *_glfuncs, GLenum glfunc, GLint ref, GLuint mask) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilFunc(glfunc, ref, mask); -} - -void gl3_3compat_glLogicOp(void *_glfuncs, GLenum opcode) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLogicOp(opcode); -} - -void gl3_3compat_glBlendFunc(void *_glfuncs, GLenum sfactor, GLenum dfactor) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendFunc(sfactor, dfactor); -} - -void gl3_3compat_glFlush(void *_glfuncs) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFlush(); -} - -void gl3_3compat_glFinish(void *_glfuncs) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFinish(); -} - -void gl3_3compat_glEnable(void *_glfuncs, GLenum cap) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnable(cap); -} - -void gl3_3compat_glDisable(void *_glfuncs, GLenum cap) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDisable(cap); -} - -void gl3_3compat_glDepthMask(void *_glfuncs, GLboolean flag) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthMask(flag); -} - -void gl3_3compat_glColorMask(void *_glfuncs, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorMask(red, green, blue, alpha); -} - -void gl3_3compat_glStencilMask(void *_glfuncs, GLuint mask) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilMask(mask); -} - -void gl3_3compat_glClearDepth(void *_glfuncs, GLdouble depth) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearDepth(depth); -} - -void gl3_3compat_glClearStencil(void *_glfuncs, GLint s) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearStencil(s); -} - -void gl3_3compat_glClearColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearColor(red, green, blue, alpha); -} - -void gl3_3compat_glClear(void *_glfuncs, GLbitfield mask) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClear(mask); -} - -void gl3_3compat_glDrawBuffer(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawBuffer(mode); -} - -void gl3_3compat_glTexImage2D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage2D(target, level, internalFormat, width, height, border, format, gltype, pixels); -} - -void gl3_3compat_glTexImage1D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage1D(target, level, internalFormat, width, border, format, gltype, pixels); -} - -void gl3_3compat_glTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameteriv(target, pname, params); -} - -void gl3_3compat_glTexParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint param) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameteri(target, pname, param); -} - -void gl3_3compat_glTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterfv(target, pname, params); -} - -void gl3_3compat_glTexParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterf(target, pname, param); -} - -void gl3_3compat_glScissor(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScissor(x, y, width, height); -} - -void gl3_3compat_glPolygonMode(void *_glfuncs, GLenum face, GLenum mode) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPolygonMode(face, mode); -} - -void gl3_3compat_glPointSize(void *_glfuncs, GLfloat size) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointSize(size); -} - -void gl3_3compat_glLineWidth(void *_glfuncs, GLfloat width) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLineWidth(width); -} - -void gl3_3compat_glHint(void *_glfuncs, GLenum target, GLenum mode) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glHint(target, mode); -} - -void gl3_3compat_glFrontFace(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFrontFace(mode); -} - -void gl3_3compat_glCullFace(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCullFace(mode); -} - -void gl3_3compat_glIndexubv(void *_glfuncs, const GLubyte* c) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexubv(c); -} - -void gl3_3compat_glIndexub(void *_glfuncs, GLubyte c) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexub(c); -} - -GLboolean gl3_3compat_glIsTexture(void *_glfuncs, GLuint texture) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsTexture(texture); -} - -void gl3_3compat_glGenTextures(void *_glfuncs, GLsizei n, GLuint* textures) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenTextures(n, textures); -} - -void gl3_3compat_glDeleteTextures(void *_glfuncs, GLsizei n, const GLuint* textures) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteTextures(n, textures); -} - -void gl3_3compat_glBindTexture(void *_glfuncs, GLenum target, GLuint texture) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindTexture(target, texture); -} - -void gl3_3compat_glTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, gltype, pixels); -} - -void gl3_3compat_glTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexSubImage1D(target, level, xoffset, width, format, gltype, pixels); -} - -void gl3_3compat_glCopyTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height); -} - -void gl3_3compat_glCopyTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexSubImage1D(target, level, xoffset, x, y, width); -} - -void gl3_3compat_glCopyTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexImage2D(target, level, internalFormat, x, y, width, height, border); -} - -void gl3_3compat_glCopyTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexImage1D(target, level, internalFormat, x, y, width, border); -} - -void gl3_3compat_glPolygonOffset(void *_glfuncs, GLfloat factor, GLfloat units) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPolygonOffset(factor, units); -} - -void gl3_3compat_glDrawElements(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElements(mode, count, gltype, indices); -} - -void gl3_3compat_glDrawArrays(void *_glfuncs, GLenum mode, GLint first, GLsizei count) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawArrays(mode, first, count); -} - -void gl3_3compat_glCopyTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexSubImage3D(target, level, xoffset, yoffset, zoffset, x, y, width, height); -} - -void gl3_3compat_glTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, gltype, pixels); -} - -void gl3_3compat_glTexImage3D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage3D(target, level, internalFormat, width, height, depth, border, format, gltype, pixels); -} - -void gl3_3compat_glDrawRangeElements(void *_glfuncs, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum gltype, const GLvoid* indices) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawRangeElements(mode, start, end, count, gltype, indices); -} - -void gl3_3compat_glBlendEquation(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendEquation(mode); -} - -void gl3_3compat_glBlendColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendColor(red, green, blue, alpha); -} - -void gl3_3compat_glGetCompressedTexImage(void *_glfuncs, GLenum target, GLint level, GLvoid* img) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetCompressedTexImage(target, level, img); -} - -void gl3_3compat_glCompressedTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexSubImage1D(target, level, xoffset, width, format, imageSize, data); -} - -void gl3_3compat_glCompressedTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data); -} - -void gl3_3compat_glCompressedTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data); -} - -void gl3_3compat_glCompressedTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexImage1D(target, level, internalFormat, width, border, imageSize, data); -} - -void gl3_3compat_glCompressedTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexImage2D(target, level, internalFormat, width, height, border, imageSize, data); -} - -void gl3_3compat_glCompressedTexImage3D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexImage3D(target, level, internalFormat, width, height, depth, border, imageSize, data); -} - -void gl3_3compat_glSampleCoverage(void *_glfuncs, GLfloat value, GLboolean invert) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSampleCoverage(value, invert); -} - -void gl3_3compat_glActiveTexture(void *_glfuncs, GLenum texture) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glActiveTexture(texture); -} - -void gl3_3compat_glPointParameteriv(void *_glfuncs, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameteriv(pname, params); -} - -void gl3_3compat_glPointParameteri(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameteri(pname, param); -} - -void gl3_3compat_glPointParameterfv(void *_glfuncs, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameterfv(pname, params); -} - -void gl3_3compat_glPointParameterf(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameterf(pname, param); -} - -void gl3_3compat_glMultiDrawArrays(void *_glfuncs, GLenum mode, const GLint* first, const GLsizei* count, GLsizei drawcount) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiDrawArrays(mode, first, count, drawcount); -} - -void gl3_3compat_glBlendFuncSeparate(void *_glfuncs, GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendFuncSeparate(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha); -} - -void gl3_3compat_glGetBufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBufferParameteriv(target, pname, params); -} - -GLboolean gl3_3compat_glUnmapBuffer(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glUnmapBuffer(target); -} - -void gl3_3compat_glGetBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, GLvoid* data) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBufferSubData(target, offset, size, data); -} - -void gl3_3compat_glBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBufferSubData(target, offset, size, data); -} - -void gl3_3compat_glBufferData(void *_glfuncs, GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBufferData(target, size, data, usage); -} - -GLboolean gl3_3compat_glIsBuffer(void *_glfuncs, GLuint buffer) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsBuffer(buffer); -} - -void gl3_3compat_glGenBuffers(void *_glfuncs, GLsizei n, GLuint* buffers) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenBuffers(n, buffers); -} - -void gl3_3compat_glDeleteBuffers(void *_glfuncs, GLsizei n, const GLuint* buffers) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteBuffers(n, buffers); -} - -void gl3_3compat_glBindBuffer(void *_glfuncs, GLenum target, GLuint buffer) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindBuffer(target, buffer); -} - -void gl3_3compat_glGetQueryObjectuiv(void *_glfuncs, GLuint id, GLenum pname, GLuint* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryObjectuiv(id, pname, params); -} - -void gl3_3compat_glGetQueryObjectiv(void *_glfuncs, GLuint id, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryObjectiv(id, pname, params); -} - -void gl3_3compat_glGetQueryiv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryiv(target, pname, params); -} - -void gl3_3compat_glEndQuery(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndQuery(target); -} - -void gl3_3compat_glBeginQuery(void *_glfuncs, GLenum target, GLuint id) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBeginQuery(target, id); -} - -GLboolean gl3_3compat_glIsQuery(void *_glfuncs, GLuint id) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsQuery(id); -} - -void gl3_3compat_glDeleteQueries(void *_glfuncs, GLsizei n, const GLuint* ids) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteQueries(n, ids); -} - -void gl3_3compat_glGenQueries(void *_glfuncs, GLsizei n, GLuint* ids) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenQueries(n, ids); -} - -void gl3_3compat_glVertexAttribPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLboolean normalized, GLsizei stride, const GLvoid* offset) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribPointer(index, size, gltype, normalized, stride, offset); -} - -void gl3_3compat_glValidateProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glValidateProgram(program); -} - -void gl3_3compat_glUniformMatrix4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4fv(location, count, transpose, value); -} - -void gl3_3compat_glUniformMatrix3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3fv(location, count, transpose, value); -} - -void gl3_3compat_glUniformMatrix2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2fv(location, count, transpose, value); -} - -void gl3_3compat_glUniform4iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4iv(location, count, value); -} - -void gl3_3compat_glUniform3iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3iv(location, count, value); -} - -void gl3_3compat_glUniform2iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2iv(location, count, value); -} - -void gl3_3compat_glUniform1iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1iv(location, count, value); -} - -void gl3_3compat_glUniform4fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4fv(location, count, value); -} - -void gl3_3compat_glUniform3fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3fv(location, count, value); -} - -void gl3_3compat_glUniform2fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2fv(location, count, value); -} - -void gl3_3compat_glUniform1fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1fv(location, count, value); -} - -void gl3_3compat_glUniform4i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2, GLint v3) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4i(location, v0, v1, v2, v3); -} - -void gl3_3compat_glUniform3i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3i(location, v0, v1, v2); -} - -void gl3_3compat_glUniform2i(void *_glfuncs, GLint location, GLint v0, GLint v1) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2i(location, v0, v1); -} - -void gl3_3compat_glUniform1i(void *_glfuncs, GLint location, GLint v0) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1i(location, v0); -} - -void gl3_3compat_glUniform4f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4f(location, v0, v1, v2, v3); -} - -void gl3_3compat_glUniform3f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3f(location, v0, v1, v2); -} - -void gl3_3compat_glUniform2f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2f(location, v0, v1); -} - -void gl3_3compat_glUniform1f(void *_glfuncs, GLint location, GLfloat v0) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1f(location, v0); -} - -void gl3_3compat_glUseProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUseProgram(program); -} - -void gl3_3compat_glShaderSource(void *_glfuncs, GLuint shader, GLsizei count, const GLchar** source, const GLint* length) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glShaderSource(shader, count, source, length); -} - -void gl3_3compat_glLinkProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLinkProgram(program); -} - -GLboolean gl3_3compat_glIsShader(void *_glfuncs, GLuint shader) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsShader(shader); -} - -GLboolean gl3_3compat_glIsProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsProgram(program); -} - -void gl3_3compat_glGetVertexAttribiv(void *_glfuncs, GLuint index, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribiv(index, pname, params); -} - -void gl3_3compat_glGetVertexAttribfv(void *_glfuncs, GLuint index, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribfv(index, pname, params); -} - -void gl3_3compat_glGetVertexAttribdv(void *_glfuncs, GLuint index, GLenum pname, GLdouble* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribdv(index, pname, params); -} - -void gl3_3compat_glGetUniformiv(void *_glfuncs, GLuint program, GLint location, GLint* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetUniformiv(program, location, params); -} - -void gl3_3compat_glGetUniformfv(void *_glfuncs, GLuint program, GLint location, GLfloat* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetUniformfv(program, location, params); -} - -GLint gl3_3compat_glGetUniformLocation(void *_glfuncs, GLuint program, const GLchar* name) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetUniformLocation(program, name); -} - -void gl3_3compat_glGetShaderSource(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* source) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetShaderSource(shader, bufSize, length, source); -} - -void gl3_3compat_glGetShaderInfoLog(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* infoLog) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetShaderInfoLog(shader, bufSize, length, infoLog); -} - -void gl3_3compat_glGetShaderiv(void *_glfuncs, GLuint shader, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetShaderiv(shader, pname, params); -} - -void gl3_3compat_glGetProgramInfoLog(void *_glfuncs, GLuint program, GLsizei bufSize, GLsizei* length, GLchar* infoLog) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetProgramInfoLog(program, bufSize, length, infoLog); -} - -void gl3_3compat_glGetProgramiv(void *_glfuncs, GLuint program, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetProgramiv(program, pname, params); -} - -GLint gl3_3compat_glGetAttribLocation(void *_glfuncs, GLuint program, const GLchar* name) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetAttribLocation(program, name); -} - -void gl3_3compat_glGetAttachedShaders(void *_glfuncs, GLuint program, GLsizei maxCount, GLsizei* count, GLuint* obj) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetAttachedShaders(program, maxCount, count, obj); -} - -void gl3_3compat_glGetActiveUniform(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniform(program, index, bufSize, length, size, gltype, name); -} - -void gl3_3compat_glGetActiveAttrib(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveAttrib(program, index, bufSize, length, size, gltype, name); -} - -void gl3_3compat_glEnableVertexAttribArray(void *_glfuncs, GLuint index) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnableVertexAttribArray(index); -} - -void gl3_3compat_glDisableVertexAttribArray(void *_glfuncs, GLuint index) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDisableVertexAttribArray(index); -} - -void gl3_3compat_glDetachShader(void *_glfuncs, GLuint program, GLuint shader) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDetachShader(program, shader); -} - -void gl3_3compat_glDeleteShader(void *_glfuncs, GLuint shader) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteShader(shader); -} - -void gl3_3compat_glDeleteProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteProgram(program); -} - -GLuint gl3_3compat_glCreateShader(void *_glfuncs, GLenum gltype) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glCreateShader(gltype); -} - -GLuint gl3_3compat_glCreateProgram(void *_glfuncs) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glCreateProgram(); -} - -void gl3_3compat_glCompileShader(void *_glfuncs, GLuint shader) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompileShader(shader); -} - -void gl3_3compat_glBindAttribLocation(void *_glfuncs, GLuint program, GLuint index, const GLchar* name) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindAttribLocation(program, index, name); -} - -void gl3_3compat_glAttachShader(void *_glfuncs, GLuint program, GLuint shader) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glAttachShader(program, shader); -} - -void gl3_3compat_glStencilMaskSeparate(void *_glfuncs, GLenum face, GLuint mask) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilMaskSeparate(face, mask); -} - -void gl3_3compat_glStencilFuncSeparate(void *_glfuncs, GLenum face, GLenum glfunc, GLint ref, GLuint mask) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilFuncSeparate(face, glfunc, ref, mask); -} - -void gl3_3compat_glStencilOpSeparate(void *_glfuncs, GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilOpSeparate(face, sfail, dpfail, dppass); -} - -void gl3_3compat_glDrawBuffers(void *_glfuncs, GLsizei n, const GLenum* bufs) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawBuffers(n, bufs); -} - -void gl3_3compat_glBlendEquationSeparate(void *_glfuncs, GLenum modeRGB, GLenum modeAlpha) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendEquationSeparate(modeRGB, modeAlpha); -} - -void gl3_3compat_glUniformMatrix4x3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4x3fv(location, count, transpose, value); -} - -void gl3_3compat_glUniformMatrix3x4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3x4fv(location, count, transpose, value); -} - -void gl3_3compat_glUniformMatrix4x2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4x2fv(location, count, transpose, value); -} - -void gl3_3compat_glUniformMatrix2x4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2x4fv(location, count, transpose, value); -} - -void gl3_3compat_glUniformMatrix3x2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3x2fv(location, count, transpose, value); -} - -void gl3_3compat_glUniformMatrix2x3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2x3fv(location, count, transpose, value); -} - -GLboolean gl3_3compat_glIsVertexArray(void *_glfuncs, GLuint array) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsVertexArray(array); -} - -void gl3_3compat_glGenVertexArrays(void *_glfuncs, GLsizei n, GLuint* arrays) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenVertexArrays(n, arrays); -} - -void gl3_3compat_glDeleteVertexArrays(void *_glfuncs, GLsizei n, const GLuint* arrays) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteVertexArrays(n, arrays); -} - -void gl3_3compat_glBindVertexArray(void *_glfuncs, GLuint array) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindVertexArray(array); -} - -void gl3_3compat_glFlushMappedBufferRange(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr length) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFlushMappedBufferRange(target, offset, length); -} - -void gl3_3compat_glFramebufferTextureLayer(void *_glfuncs, GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTextureLayer(target, attachment, texture, level, layer); -} - -void gl3_3compat_glRenderbufferStorageMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRenderbufferStorageMultisample(target, samples, internalFormat, width, height); -} - -void gl3_3compat_glBlitFramebuffer(void *_glfuncs, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter); -} - -void gl3_3compat_glGenerateMipmap(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenerateMipmap(target); -} - -void gl3_3compat_glGetFramebufferAttachmentParameteriv(void *_glfuncs, GLenum target, GLenum attachment, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetFramebufferAttachmentParameteriv(target, attachment, pname, params); -} - -void gl3_3compat_glFramebufferRenderbuffer(void *_glfuncs, GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer); -} - -void gl3_3compat_glFramebufferTexture3D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTexture3D(target, attachment, textarget, texture, level, zoffset); -} - -void gl3_3compat_glFramebufferTexture2D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTexture2D(target, attachment, textarget, texture, level); -} - -void gl3_3compat_glFramebufferTexture1D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTexture1D(target, attachment, textarget, texture, level); -} - -GLenum gl3_3compat_glCheckFramebufferStatus(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glCheckFramebufferStatus(target); -} - -void gl3_3compat_glGenFramebuffers(void *_glfuncs, GLsizei n, GLuint* framebuffers) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenFramebuffers(n, framebuffers); -} - -void gl3_3compat_glDeleteFramebuffers(void *_glfuncs, GLsizei n, const GLuint* framebuffers) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteFramebuffers(n, framebuffers); -} - -void gl3_3compat_glBindFramebuffer(void *_glfuncs, GLenum target, GLuint framebuffer) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindFramebuffer(target, framebuffer); -} - -GLboolean gl3_3compat_glIsFramebuffer(void *_glfuncs, GLuint framebuffer) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsFramebuffer(framebuffer); -} - -void gl3_3compat_glGetRenderbufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetRenderbufferParameteriv(target, pname, params); -} - -void gl3_3compat_glRenderbufferStorage(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRenderbufferStorage(target, internalFormat, width, height); -} - -void gl3_3compat_glGenRenderbuffers(void *_glfuncs, GLsizei n, GLuint* renderbuffers) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenRenderbuffers(n, renderbuffers); -} - -void gl3_3compat_glDeleteRenderbuffers(void *_glfuncs, GLsizei n, const GLuint* renderbuffers) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteRenderbuffers(n, renderbuffers); -} - -void gl3_3compat_glBindRenderbuffer(void *_glfuncs, GLenum target, GLuint renderbuffer) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindRenderbuffer(target, renderbuffer); -} - -GLboolean gl3_3compat_glIsRenderbuffer(void *_glfuncs, GLuint renderbuffer) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsRenderbuffer(renderbuffer); -} - -void gl3_3compat_glClearBufferfi(void *_glfuncs, GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearBufferfi(buffer, drawbuffer, depth, stencil); -} - -void gl3_3compat_glClearBufferfv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLfloat* value) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearBufferfv(buffer, drawbuffer, value); -} - -void gl3_3compat_glClearBufferuiv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLuint* value) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearBufferuiv(buffer, drawbuffer, value); -} - -void gl3_3compat_glClearBufferiv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLint* value) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearBufferiv(buffer, drawbuffer, value); -} - -void gl3_3compat_glGetTexParameterIuiv(void *_glfuncs, GLenum target, GLenum pname, GLuint* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameterIuiv(target, pname, params); -} - -void gl3_3compat_glGetTexParameterIiv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameterIiv(target, pname, params); -} - -void gl3_3compat_glTexParameterIuiv(void *_glfuncs, GLenum target, GLenum pname, const GLuint* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterIuiv(target, pname, params); -} - -void gl3_3compat_glTexParameterIiv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterIiv(target, pname, params); -} - -void gl3_3compat_glUniform4uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4uiv(location, count, value); -} - -void gl3_3compat_glUniform3uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3uiv(location, count, value); -} - -void gl3_3compat_glUniform2uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2uiv(location, count, value); -} - -void gl3_3compat_glUniform1uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1uiv(location, count, value); -} - -void gl3_3compat_glUniform4ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4ui(location, v0, v1, v2, v3); -} - -void gl3_3compat_glUniform3ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1, GLuint v2) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3ui(location, v0, v1, v2); -} - -void gl3_3compat_glUniform2ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2ui(location, v0, v1); -} - -void gl3_3compat_glUniform1ui(void *_glfuncs, GLint location, GLuint v0) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1ui(location, v0); -} - -GLint gl3_3compat_glGetFragDataLocation(void *_glfuncs, GLuint program, const GLchar* name) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetFragDataLocation(program, name); -} - -void gl3_3compat_glBindFragDataLocation(void *_glfuncs, GLuint program, GLuint color, const GLchar* name) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindFragDataLocation(program, color, name); -} - -void gl3_3compat_glGetUniformuiv(void *_glfuncs, GLuint program, GLint location, GLuint* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetUniformuiv(program, location, params); -} - -void gl3_3compat_glGetVertexAttribIuiv(void *_glfuncs, GLuint index, GLenum pname, GLuint* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribIuiv(index, pname, params); -} - -void gl3_3compat_glGetVertexAttribIiv(void *_glfuncs, GLuint index, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribIiv(index, pname, params); -} - -void gl3_3compat_glVertexAttribIPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribIPointer(index, size, gltype, stride, pointer); -} - -void gl3_3compat_glEndConditionalRender(void *_glfuncs) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndConditionalRender(); -} - -void gl3_3compat_glBeginConditionalRender(void *_glfuncs, GLuint id, GLenum mode) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBeginConditionalRender(id, mode); -} - -void gl3_3compat_glClampColor(void *_glfuncs, GLenum target, GLenum clamp) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClampColor(target, clamp); -} - -void gl3_3compat_glGetTransformFeedbackVarying(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* gltype, GLchar* name) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTransformFeedbackVarying(program, index, bufSize, length, size, gltype, name); -} - -void gl3_3compat_glBindBufferBase(void *_glfuncs, GLenum target, GLuint index, GLuint buffer) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindBufferBase(target, index, buffer); -} - -void gl3_3compat_glBindBufferRange(void *_glfuncs, GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindBufferRange(target, index, buffer, offset, size); -} - -void gl3_3compat_glEndTransformFeedback(void *_glfuncs) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndTransformFeedback(); -} - -void gl3_3compat_glBeginTransformFeedback(void *_glfuncs, GLenum primitiveMode) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBeginTransformFeedback(primitiveMode); -} - -GLboolean gl3_3compat_glIsEnabledi(void *_glfuncs, GLenum target, GLuint index) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsEnabledi(target, index); -} - -void gl3_3compat_glDisablei(void *_glfuncs, GLenum target, GLuint index) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDisablei(target, index); -} - -void gl3_3compat_glEnablei(void *_glfuncs, GLenum target, GLuint index) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnablei(target, index); -} - -void gl3_3compat_glGetIntegeri_v(void *_glfuncs, GLenum target, GLuint index, GLint* data) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetIntegeri_v(target, index, data); -} - -void gl3_3compat_glGetBooleani_v(void *_glfuncs, GLenum target, GLuint index, GLboolean* data) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBooleani_v(target, index, data); -} - -void gl3_3compat_glColorMaski(void *_glfuncs, GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorMaski(index, r, g, b, a); -} - -void gl3_3compat_glCopyBufferSubData(void *_glfuncs, GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyBufferSubData(readTarget, writeTarget, readOffset, writeOffset, size); -} - -void gl3_3compat_glUniformBlockBinding(void *_glfuncs, GLuint program, GLuint v0, GLuint v1) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformBlockBinding(program, v0, v1); -} - -void gl3_3compat_glGetActiveUniformBlockName(void *_glfuncs, GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformBlockName) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniformBlockName(program, uniformBlockIndex, bufSize, length, uniformBlockName); -} - -void gl3_3compat_glGetActiveUniformBlockiv(void *_glfuncs, GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniformBlockiv(program, uniformBlockIndex, pname, params); -} - -GLuint gl3_3compat_glGetUniformBlockIndex(void *_glfuncs, GLuint program, const GLchar* uniformBlockName) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetUniformBlockIndex(program, uniformBlockName); -} - -void gl3_3compat_glGetActiveUniformName(void *_glfuncs, GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformName) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniformName(program, uniformIndex, bufSize, length, uniformName); -} - -void gl3_3compat_glGetActiveUniformsiv(void *_glfuncs, GLuint program, GLsizei uniformCount, const GLuint* uniformIndices, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniformsiv(program, uniformCount, uniformIndices, pname, params); -} - -void gl3_3compat_glPrimitiveRestartIndex(void *_glfuncs, GLuint index) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPrimitiveRestartIndex(index); -} - -void gl3_3compat_glTexBuffer(void *_glfuncs, GLenum target, GLenum internalFormat, GLuint buffer) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexBuffer(target, internalFormat, buffer); -} - -void gl3_3compat_glDrawElementsInstanced(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLsizei instancecount) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElementsInstanced(mode, count, gltype, indices, instancecount); -} - -void gl3_3compat_glDrawArraysInstanced(void *_glfuncs, GLenum mode, GLint first, GLsizei count, GLsizei instancecount) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawArraysInstanced(mode, first, count, instancecount); -} - -void gl3_3compat_glSampleMaski(void *_glfuncs, GLuint index, GLbitfield mask) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSampleMaski(index, mask); -} - -void gl3_3compat_glGetMultisamplefv(void *_glfuncs, GLenum pname, GLuint index, GLfloat* val) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMultisamplefv(pname, index, val); -} - -void gl3_3compat_glTexImage3DMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage3DMultisample(target, samples, internalFormat, width, height, depth, fixedsamplelocations); -} - -void gl3_3compat_glTexImage2DMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage2DMultisample(target, samples, internalFormat, width, height, fixedsamplelocations); -} - -void gl3_3compat_glGetSynciv(void *_glfuncs, GLsync sync, GLenum pname, GLsizei bufSize, GLsizei* length, GLint* values) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetSynciv(sync, pname, bufSize, length, values); -} - -void gl3_3compat_glGetInteger64v(void *_glfuncs, GLenum pname, GLint64* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetInteger64v(pname, params); -} - -void gl3_3compat_glWaitSync(void *_glfuncs, GLsync sync, GLbitfield flags, GLuint64 timeout) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWaitSync(sync, flags, timeout); -} - -GLenum gl3_3compat_glClientWaitSync(void *_glfuncs, GLsync sync, GLbitfield flags, GLuint64 timeout) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glClientWaitSync(sync, flags, timeout); -} - -void gl3_3compat_glDeleteSync(void *_glfuncs, GLsync sync) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteSync(sync); -} - -GLboolean gl3_3compat_glIsSync(void *_glfuncs, GLsync sync) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsSync(sync); -} - -GLsync gl3_3compat_glFenceSync(void *_glfuncs, GLenum condition, GLbitfield flags) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glFenceSync(condition, flags); -} - -void gl3_3compat_glProvokingVertex(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProvokingVertex(mode); -} - -void gl3_3compat_glDrawElementsInstancedBaseVertex(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLsizei instancecount, GLint basevertex) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElementsInstancedBaseVertex(mode, count, gltype, indices, instancecount, basevertex); -} - -void gl3_3compat_glDrawRangeElementsBaseVertex(void *_glfuncs, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum gltype, const GLvoid* indices, GLint basevertex) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawRangeElementsBaseVertex(mode, start, end, count, gltype, indices, basevertex); -} - -void gl3_3compat_glDrawElementsBaseVertex(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLint basevertex) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElementsBaseVertex(mode, count, gltype, indices, basevertex); -} - -void gl3_3compat_glFramebufferTexture(void *_glfuncs, GLenum target, GLenum attachment, GLuint texture, GLint level) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTexture(target, attachment, texture, level); -} - -void gl3_3compat_glGetBufferParameteri64v(void *_glfuncs, GLenum target, GLenum pname, GLint64* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBufferParameteri64v(target, pname, params); -} - -void gl3_3compat_glGetInteger64i_v(void *_glfuncs, GLenum target, GLuint index, GLint64* data) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetInteger64i_v(target, index, data); -} - -void gl3_3compat_glVertexAttribP4uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP4uiv(index, gltype, normalized, value); -} - -void gl3_3compat_glVertexAttribP4ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP4ui(index, gltype, normalized, value); -} - -void gl3_3compat_glVertexAttribP3uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP3uiv(index, gltype, normalized, value); -} - -void gl3_3compat_glVertexAttribP3ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP3ui(index, gltype, normalized, value); -} - -void gl3_3compat_glVertexAttribP2uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP2uiv(index, gltype, normalized, value); -} - -void gl3_3compat_glVertexAttribP2ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP2ui(index, gltype, normalized, value); -} - -void gl3_3compat_glVertexAttribP1uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP1uiv(index, gltype, normalized, value); -} - -void gl3_3compat_glVertexAttribP1ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP1ui(index, gltype, normalized, value); -} - -void gl3_3compat_glSecondaryColorP3uiv(void *_glfuncs, GLenum gltype, const GLuint* color) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColorP3uiv(gltype, color); -} - -void gl3_3compat_glSecondaryColorP3ui(void *_glfuncs, GLenum gltype, GLuint color) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColorP3ui(gltype, color); -} - -void gl3_3compat_glColorP4uiv(void *_glfuncs, GLenum gltype, const GLuint* color) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorP4uiv(gltype, color); -} - -void gl3_3compat_glColorP4ui(void *_glfuncs, GLenum gltype, GLuint color) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorP4ui(gltype, color); -} - -void gl3_3compat_glColorP3uiv(void *_glfuncs, GLenum gltype, const GLuint* color) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorP3uiv(gltype, color); -} - -void gl3_3compat_glColorP3ui(void *_glfuncs, GLenum gltype, GLuint color) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorP3ui(gltype, color); -} - -void gl3_3compat_glNormalP3uiv(void *_glfuncs, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormalP3uiv(gltype, coords); -} - -void gl3_3compat_glNormalP3ui(void *_glfuncs, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormalP3ui(gltype, coords); -} - -void gl3_3compat_glMultiTexCoordP4uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP4uiv(texture, gltype, coords); -} - -void gl3_3compat_glMultiTexCoordP4ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP4ui(texture, gltype, coords); -} - -void gl3_3compat_glMultiTexCoordP3uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP3uiv(texture, gltype, coords); -} - -void gl3_3compat_glMultiTexCoordP3ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP3ui(texture, gltype, coords); -} - -void gl3_3compat_glMultiTexCoordP2uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP2uiv(texture, gltype, coords); -} - -void gl3_3compat_glMultiTexCoordP2ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP2ui(texture, gltype, coords); -} - -void gl3_3compat_glMultiTexCoordP1uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP1uiv(texture, gltype, coords); -} - -void gl3_3compat_glMultiTexCoordP1ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP1ui(texture, gltype, coords); -} - -void gl3_3compat_glTexCoordP4uiv(void *_glfuncs, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP4uiv(gltype, coords); -} - -void gl3_3compat_glTexCoordP4ui(void *_glfuncs, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP4ui(gltype, coords); -} - -void gl3_3compat_glTexCoordP3uiv(void *_glfuncs, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP3uiv(gltype, coords); -} - -void gl3_3compat_glTexCoordP3ui(void *_glfuncs, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP3ui(gltype, coords); -} - -void gl3_3compat_glTexCoordP2uiv(void *_glfuncs, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP2uiv(gltype, coords); -} - -void gl3_3compat_glTexCoordP2ui(void *_glfuncs, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP2ui(gltype, coords); -} - -void gl3_3compat_glTexCoordP1uiv(void *_glfuncs, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP1uiv(gltype, coords); -} - -void gl3_3compat_glTexCoordP1ui(void *_glfuncs, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP1ui(gltype, coords); -} - -void gl3_3compat_glVertexP4uiv(void *_glfuncs, GLenum gltype, const GLuint* value) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexP4uiv(gltype, value); -} - -void gl3_3compat_glVertexP4ui(void *_glfuncs, GLenum gltype, GLuint value) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexP4ui(gltype, value); -} - -void gl3_3compat_glVertexP3uiv(void *_glfuncs, GLenum gltype, const GLuint* value) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexP3uiv(gltype, value); -} - -void gl3_3compat_glVertexP3ui(void *_glfuncs, GLenum gltype, GLuint value) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexP3ui(gltype, value); -} - -void gl3_3compat_glVertexP2uiv(void *_glfuncs, GLenum gltype, const GLuint* value) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexP2uiv(gltype, value); -} - -void gl3_3compat_glVertexP2ui(void *_glfuncs, GLenum gltype, GLuint value) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexP2ui(gltype, value); -} - -void gl3_3compat_glGetQueryObjectui64v(void *_glfuncs, GLuint id, GLenum pname, GLuint64* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryObjectui64v(id, pname, params); -} - -void gl3_3compat_glGetQueryObjecti64v(void *_glfuncs, GLuint id, GLenum pname, GLint64* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryObjecti64v(id, pname, params); -} - -void gl3_3compat_glQueryCounter(void *_glfuncs, GLuint id, GLenum target) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glQueryCounter(id, target); -} - -void gl3_3compat_glGetSamplerParameterIuiv(void *_glfuncs, GLuint sampler, GLenum pname, GLuint* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetSamplerParameterIuiv(sampler, pname, params); -} - -void gl3_3compat_glGetSamplerParameterfv(void *_glfuncs, GLuint sampler, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetSamplerParameterfv(sampler, pname, params); -} - -void gl3_3compat_glGetSamplerParameterIiv(void *_glfuncs, GLuint sampler, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetSamplerParameterIiv(sampler, pname, params); -} - -void gl3_3compat_glGetSamplerParameteriv(void *_glfuncs, GLuint sampler, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetSamplerParameteriv(sampler, pname, params); -} - -void gl3_3compat_glSamplerParameterIuiv(void *_glfuncs, GLuint sampler, GLenum pname, const GLuint* param) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSamplerParameterIuiv(sampler, pname, param); -} - -void gl3_3compat_glSamplerParameterIiv(void *_glfuncs, GLuint sampler, GLenum pname, const GLint* param) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSamplerParameterIiv(sampler, pname, param); -} - -void gl3_3compat_glSamplerParameterfv(void *_glfuncs, GLuint sampler, GLenum pname, const GLfloat* param) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSamplerParameterfv(sampler, pname, param); -} - -void gl3_3compat_glSamplerParameterf(void *_glfuncs, GLuint sampler, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSamplerParameterf(sampler, pname, param); -} - -void gl3_3compat_glSamplerParameteriv(void *_glfuncs, GLuint sampler, GLenum pname, const GLint* param) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSamplerParameteriv(sampler, pname, param); -} - -void gl3_3compat_glSamplerParameteri(void *_glfuncs, GLuint sampler, GLenum pname, GLint param) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSamplerParameteri(sampler, pname, param); -} - -void gl3_3compat_glBindSampler(void *_glfuncs, GLuint unit, GLuint sampler) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindSampler(unit, sampler); -} - -GLboolean gl3_3compat_glIsSampler(void *_glfuncs, GLuint sampler) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsSampler(sampler); -} - -void gl3_3compat_glDeleteSamplers(void *_glfuncs, GLsizei count, const GLuint* samplers) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteSamplers(count, samplers); -} - -void gl3_3compat_glGenSamplers(void *_glfuncs, GLsizei count, GLuint* samplers) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenSamplers(count, samplers); -} - -GLint gl3_3compat_glGetFragDataIndex(void *_glfuncs, GLuint program, const GLchar* name) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetFragDataIndex(program, name); -} - -void gl3_3compat_glBindFragDataLocationIndexed(void *_glfuncs, GLuint program, GLuint colorNumber, GLuint index, const GLchar* name) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindFragDataLocationIndexed(program, colorNumber, index, name); -} - -void gl3_3compat_glVertexAttribDivisor(void *_glfuncs, GLuint index, GLuint divisor) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribDivisor(index, divisor); -} - -void gl3_3compat_glTranslatef(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTranslatef(x, y, z); -} - -void gl3_3compat_glTranslated(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTranslated(x, y, z); -} - -void gl3_3compat_glScalef(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScalef(x, y, z); -} - -void gl3_3compat_glScaled(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScaled(x, y, z); -} - -void gl3_3compat_glRotatef(void *_glfuncs, GLfloat angle, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRotatef(angle, x, y, z); -} - -void gl3_3compat_glRotated(void *_glfuncs, GLdouble angle, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRotated(angle, x, y, z); -} - -void gl3_3compat_glPushMatrix(void *_glfuncs) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPushMatrix(); -} - -void gl3_3compat_glPopMatrix(void *_glfuncs) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPopMatrix(); -} - -void gl3_3compat_glOrtho(void *_glfuncs, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glOrtho(left, right, bottom, top, zNear, zFar); -} - -void gl3_3compat_glMultMatrixd(void *_glfuncs, const GLdouble* m) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultMatrixd(m); -} - -void gl3_3compat_glMultMatrixf(void *_glfuncs, const GLfloat* m) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultMatrixf(m); -} - -void gl3_3compat_glMatrixMode(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMatrixMode(mode); -} - -void gl3_3compat_glLoadMatrixd(void *_glfuncs, const GLdouble* m) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadMatrixd(m); -} - -void gl3_3compat_glLoadMatrixf(void *_glfuncs, const GLfloat* m) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadMatrixf(m); -} - -void gl3_3compat_glLoadIdentity(void *_glfuncs) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadIdentity(); -} - -void gl3_3compat_glFrustum(void *_glfuncs, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFrustum(left, right, bottom, top, zNear, zFar); -} - -GLboolean gl3_3compat_glIsList(void *_glfuncs, GLuint list) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsList(list); -} - -void gl3_3compat_glGetTexGeniv(void *_glfuncs, GLenum coord, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexGeniv(coord, pname, params); -} - -void gl3_3compat_glGetTexGenfv(void *_glfuncs, GLenum coord, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexGenfv(coord, pname, params); -} - -void gl3_3compat_glGetTexGendv(void *_glfuncs, GLenum coord, GLenum pname, GLdouble* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexGendv(coord, pname, params); -} - -void gl3_3compat_glGetTexEnviv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexEnviv(target, pname, params); -} - -void gl3_3compat_glGetTexEnvfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexEnvfv(target, pname, params); -} - -void gl3_3compat_glGetPolygonStipple(void *_glfuncs, GLubyte* mask) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetPolygonStipple(mask); -} - -void gl3_3compat_glGetPixelMapusv(void *_glfuncs, GLenum glmap, GLushort* values) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetPixelMapusv(glmap, values); -} - -void gl3_3compat_glGetPixelMapuiv(void *_glfuncs, GLenum glmap, GLuint* values) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetPixelMapuiv(glmap, values); -} - -void gl3_3compat_glGetPixelMapfv(void *_glfuncs, GLenum glmap, GLfloat* values) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetPixelMapfv(glmap, values); -} - -void gl3_3compat_glGetMaterialiv(void *_glfuncs, GLenum face, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMaterialiv(face, pname, params); -} - -void gl3_3compat_glGetMaterialfv(void *_glfuncs, GLenum face, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMaterialfv(face, pname, params); -} - -void gl3_3compat_glGetMapiv(void *_glfuncs, GLenum target, GLenum query, GLint* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMapiv(target, query, v); -} - -void gl3_3compat_glGetMapfv(void *_glfuncs, GLenum target, GLenum query, GLfloat* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMapfv(target, query, v); -} - -void gl3_3compat_glGetMapdv(void *_glfuncs, GLenum target, GLenum query, GLdouble* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMapdv(target, query, v); -} - -void gl3_3compat_glGetLightiv(void *_glfuncs, GLenum light, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetLightiv(light, pname, params); -} - -void gl3_3compat_glGetLightfv(void *_glfuncs, GLenum light, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetLightfv(light, pname, params); -} - -void gl3_3compat_glGetClipPlane(void *_glfuncs, GLenum plane, GLdouble* equation) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetClipPlane(plane, equation); -} - -void gl3_3compat_glDrawPixels(void *_glfuncs, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawPixels(width, height, format, gltype, pixels); -} - -void gl3_3compat_glCopyPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum gltype) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyPixels(x, y, width, height, gltype); -} - -void gl3_3compat_glPixelMapusv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLushort* values) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelMapusv(glmap, mapsize, values); -} - -void gl3_3compat_glPixelMapuiv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLuint* values) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelMapuiv(glmap, mapsize, values); -} - -void gl3_3compat_glPixelMapfv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLfloat* values) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelMapfv(glmap, mapsize, values); -} - -void gl3_3compat_glPixelTransferi(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelTransferi(pname, param); -} - -void gl3_3compat_glPixelTransferf(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelTransferf(pname, param); -} - -void gl3_3compat_glPixelZoom(void *_glfuncs, GLfloat xfactor, GLfloat yfactor) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelZoom(xfactor, yfactor); -} - -void gl3_3compat_glAlphaFunc(void *_glfuncs, GLenum glfunc, GLfloat ref) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glAlphaFunc(glfunc, ref); -} - -void gl3_3compat_glEvalPoint2(void *_glfuncs, GLint i, GLint j) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalPoint2(i, j); -} - -void gl3_3compat_glEvalMesh2(void *_glfuncs, GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalMesh2(mode, i1, i2, j1, j2); -} - -void gl3_3compat_glEvalPoint1(void *_glfuncs, GLint i) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalPoint1(i); -} - -void gl3_3compat_glEvalMesh1(void *_glfuncs, GLenum mode, GLint i1, GLint i2) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalMesh1(mode, i1, i2); -} - -void gl3_3compat_glEvalCoord2fv(void *_glfuncs, const GLfloat* u) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord2fv(u); -} - -void gl3_3compat_glEvalCoord2f(void *_glfuncs, GLfloat u, GLfloat v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord2f(u, v); -} - -void gl3_3compat_glEvalCoord2dv(void *_glfuncs, const GLdouble* u) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord2dv(u); -} - -void gl3_3compat_glEvalCoord2d(void *_glfuncs, GLdouble u, GLdouble v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord2d(u, v); -} - -void gl3_3compat_glEvalCoord1fv(void *_glfuncs, const GLfloat* u) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord1fv(u); -} - -void gl3_3compat_glEvalCoord1f(void *_glfuncs, GLfloat u) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord1f(u); -} - -void gl3_3compat_glEvalCoord1dv(void *_glfuncs, const GLdouble* u) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord1dv(u); -} - -void gl3_3compat_glEvalCoord1d(void *_glfuncs, GLdouble u) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord1d(u); -} - -void gl3_3compat_glMapGrid2f(void *_glfuncs, GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMapGrid2f(un, u1, u2, vn, v1, v2); -} - -void gl3_3compat_glMapGrid2d(void *_glfuncs, GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMapGrid2d(un, u1, u2, vn, v1, v2); -} - -void gl3_3compat_glMapGrid1f(void *_glfuncs, GLint un, GLfloat u1, GLfloat u2) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMapGrid1f(un, u1, u2); -} - -void gl3_3compat_glMapGrid1d(void *_glfuncs, GLint un, GLdouble u1, GLdouble u2) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMapGrid1d(un, u1, u2); -} - -void gl3_3compat_glMap2f(void *_glfuncs, GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat* points) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMap2f(target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points); -} - -void gl3_3compat_glMap2d(void *_glfuncs, GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble* points) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMap2d(target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points); -} - -void gl3_3compat_glMap1f(void *_glfuncs, GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat* points) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMap1f(target, u1, u2, stride, order, points); -} - -void gl3_3compat_glMap1d(void *_glfuncs, GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble* points) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMap1d(target, u1, u2, stride, order, points); -} - -void gl3_3compat_glPushAttrib(void *_glfuncs, GLbitfield mask) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPushAttrib(mask); -} - -void gl3_3compat_glPopAttrib(void *_glfuncs) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPopAttrib(); -} - -void gl3_3compat_glAccum(void *_glfuncs, GLenum op, GLfloat value) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glAccum(op, value); -} - -void gl3_3compat_glIndexMask(void *_glfuncs, GLuint mask) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexMask(mask); -} - -void gl3_3compat_glClearIndex(void *_glfuncs, GLfloat c) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearIndex(c); -} - -void gl3_3compat_glClearAccum(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearAccum(red, green, blue, alpha); -} - -void gl3_3compat_glPushName(void *_glfuncs, GLuint name) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPushName(name); -} - -void gl3_3compat_glPopName(void *_glfuncs) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPopName(); -} - -void gl3_3compat_glPassThrough(void *_glfuncs, GLfloat token) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPassThrough(token); -} - -void gl3_3compat_glLoadName(void *_glfuncs, GLuint name) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadName(name); -} - -void gl3_3compat_glInitNames(void *_glfuncs) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glInitNames(); -} - -GLint gl3_3compat_glRenderMode(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glRenderMode(mode); -} - -void gl3_3compat_glSelectBuffer(void *_glfuncs, GLsizei size, GLuint* buffer) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSelectBuffer(size, buffer); -} - -void gl3_3compat_glFeedbackBuffer(void *_glfuncs, GLsizei size, GLenum gltype, GLfloat* buffer) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFeedbackBuffer(size, gltype, buffer); -} - -void gl3_3compat_glTexGeniv(void *_glfuncs, GLenum coord, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGeniv(coord, pname, params); -} - -void gl3_3compat_glTexGeni(void *_glfuncs, GLenum coord, GLenum pname, GLint param) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGeni(coord, pname, param); -} - -void gl3_3compat_glTexGenfv(void *_glfuncs, GLenum coord, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGenfv(coord, pname, params); -} - -void gl3_3compat_glTexGenf(void *_glfuncs, GLenum coord, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGenf(coord, pname, param); -} - -void gl3_3compat_glTexGendv(void *_glfuncs, GLenum coord, GLenum pname, const GLdouble* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGendv(coord, pname, params); -} - -void gl3_3compat_glTexGend(void *_glfuncs, GLenum coord, GLenum pname, GLdouble param) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGend(coord, pname, param); -} - -void gl3_3compat_glTexEnviv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexEnviv(target, pname, params); -} - -void gl3_3compat_glTexEnvi(void *_glfuncs, GLenum target, GLenum pname, GLint param) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexEnvi(target, pname, param); -} - -void gl3_3compat_glTexEnvfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexEnvfv(target, pname, params); -} - -void gl3_3compat_glTexEnvf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexEnvf(target, pname, param); -} - -void gl3_3compat_glShadeModel(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glShadeModel(mode); -} - -void gl3_3compat_glPolygonStipple(void *_glfuncs, const GLubyte* mask) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPolygonStipple(mask); -} - -void gl3_3compat_glMaterialiv(void *_glfuncs, GLenum face, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMaterialiv(face, pname, params); -} - -void gl3_3compat_glMateriali(void *_glfuncs, GLenum face, GLenum pname, GLint param) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMateriali(face, pname, param); -} - -void gl3_3compat_glMaterialfv(void *_glfuncs, GLenum face, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMaterialfv(face, pname, params); -} - -void gl3_3compat_glMaterialf(void *_glfuncs, GLenum face, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMaterialf(face, pname, param); -} - -void gl3_3compat_glLineStipple(void *_glfuncs, GLint factor, GLushort pattern) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLineStipple(factor, pattern); -} - -void gl3_3compat_glLightModeliv(void *_glfuncs, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightModeliv(pname, params); -} - -void gl3_3compat_glLightModeli(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightModeli(pname, param); -} - -void gl3_3compat_glLightModelfv(void *_glfuncs, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightModelfv(pname, params); -} - -void gl3_3compat_glLightModelf(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightModelf(pname, param); -} - -void gl3_3compat_glLightiv(void *_glfuncs, GLenum light, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightiv(light, pname, params); -} - -void gl3_3compat_glLighti(void *_glfuncs, GLenum light, GLenum pname, GLint param) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLighti(light, pname, param); -} - -void gl3_3compat_glLightfv(void *_glfuncs, GLenum light, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightfv(light, pname, params); -} - -void gl3_3compat_glLightf(void *_glfuncs, GLenum light, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightf(light, pname, param); -} - -void gl3_3compat_glFogiv(void *_glfuncs, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogiv(pname, params); -} - -void gl3_3compat_glFogi(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogi(pname, param); -} - -void gl3_3compat_glFogfv(void *_glfuncs, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogfv(pname, params); -} - -void gl3_3compat_glFogf(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogf(pname, param); -} - -void gl3_3compat_glColorMaterial(void *_glfuncs, GLenum face, GLenum mode) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorMaterial(face, mode); -} - -void gl3_3compat_glClipPlane(void *_glfuncs, GLenum plane, const GLdouble* equation) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClipPlane(plane, equation); -} - -void gl3_3compat_glVertex4sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4sv(v); -} - -void gl3_3compat_glVertex4s(void *_glfuncs, GLshort x, GLshort y, GLshort z, GLshort w) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4s(x, y, z, w); -} - -void gl3_3compat_glVertex4iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4iv(v); -} - -void gl3_3compat_glVertex4i(void *_glfuncs, GLint x, GLint y, GLint z, GLint w) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4i(x, y, z, w); -} - -void gl3_3compat_glVertex4fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4fv(v); -} - -void gl3_3compat_glVertex4f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z, GLfloat w) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4f(x, y, z, w); -} - -void gl3_3compat_glVertex4dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4dv(v); -} - -void gl3_3compat_glVertex4d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z, GLdouble w) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4d(x, y, z, w); -} - -void gl3_3compat_glVertex3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3sv(v); -} - -void gl3_3compat_glVertex3s(void *_glfuncs, GLshort x, GLshort y, GLshort z) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3s(x, y, z); -} - -void gl3_3compat_glVertex3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3iv(v); -} - -void gl3_3compat_glVertex3i(void *_glfuncs, GLint x, GLint y, GLint z) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3i(x, y, z); -} - -void gl3_3compat_glVertex3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3fv(v); -} - -void gl3_3compat_glVertex3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3f(x, y, z); -} - -void gl3_3compat_glVertex3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3dv(v); -} - -void gl3_3compat_glVertex3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3d(x, y, z); -} - -void gl3_3compat_glVertex2sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2sv(v); -} - -void gl3_3compat_glVertex2s(void *_glfuncs, GLshort x, GLshort y) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2s(x, y); -} - -void gl3_3compat_glVertex2iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2iv(v); -} - -void gl3_3compat_glVertex2i(void *_glfuncs, GLint x, GLint y) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2i(x, y); -} - -void gl3_3compat_glVertex2fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2fv(v); -} - -void gl3_3compat_glVertex2f(void *_glfuncs, GLfloat x, GLfloat y) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2f(x, y); -} - -void gl3_3compat_glVertex2dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2dv(v); -} - -void gl3_3compat_glVertex2d(void *_glfuncs, GLdouble x, GLdouble y) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2d(x, y); -} - -void gl3_3compat_glTexCoord4sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4sv(v); -} - -void gl3_3compat_glTexCoord4s(void *_glfuncs, GLshort s, GLshort t, GLshort r, GLshort q) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4s(s, t, r, q); -} - -void gl3_3compat_glTexCoord4iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4iv(v); -} - -void gl3_3compat_glTexCoord4i(void *_glfuncs, GLint s, GLint t, GLint r, GLint q) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4i(s, t, r, q); -} - -void gl3_3compat_glTexCoord4fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4fv(v); -} - -void gl3_3compat_glTexCoord4f(void *_glfuncs, GLfloat s, GLfloat t, GLfloat r, GLfloat q) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4f(s, t, r, q); -} - -void gl3_3compat_glTexCoord4dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4dv(v); -} - -void gl3_3compat_glTexCoord4d(void *_glfuncs, GLdouble s, GLdouble t, GLdouble r, GLdouble q) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4d(s, t, r, q); -} - -void gl3_3compat_glTexCoord3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3sv(v); -} - -void gl3_3compat_glTexCoord3s(void *_glfuncs, GLshort s, GLshort t, GLshort r) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3s(s, t, r); -} - -void gl3_3compat_glTexCoord3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3iv(v); -} - -void gl3_3compat_glTexCoord3i(void *_glfuncs, GLint s, GLint t, GLint r) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3i(s, t, r); -} - -void gl3_3compat_glTexCoord3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3fv(v); -} - -void gl3_3compat_glTexCoord3f(void *_glfuncs, GLfloat s, GLfloat t, GLfloat r) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3f(s, t, r); -} - -void gl3_3compat_glTexCoord3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3dv(v); -} - -void gl3_3compat_glTexCoord3d(void *_glfuncs, GLdouble s, GLdouble t, GLdouble r) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3d(s, t, r); -} - -void gl3_3compat_glTexCoord2sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2sv(v); -} - -void gl3_3compat_glTexCoord2s(void *_glfuncs, GLshort s, GLshort t) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2s(s, t); -} - -void gl3_3compat_glTexCoord2iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2iv(v); -} - -void gl3_3compat_glTexCoord2i(void *_glfuncs, GLint s, GLint t) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2i(s, t); -} - -void gl3_3compat_glTexCoord2fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2fv(v); -} - -void gl3_3compat_glTexCoord2f(void *_glfuncs, GLfloat s, GLfloat t) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2f(s, t); -} - -void gl3_3compat_glTexCoord2dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2dv(v); -} - -void gl3_3compat_glTexCoord2d(void *_glfuncs, GLdouble s, GLdouble t) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2d(s, t); -} - -void gl3_3compat_glTexCoord1sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1sv(v); -} - -void gl3_3compat_glTexCoord1s(void *_glfuncs, GLshort s) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1s(s); -} - -void gl3_3compat_glTexCoord1iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1iv(v); -} - -void gl3_3compat_glTexCoord1i(void *_glfuncs, GLint s) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1i(s); -} - -void gl3_3compat_glTexCoord1fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1fv(v); -} - -void gl3_3compat_glTexCoord1f(void *_glfuncs, GLfloat s) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1f(s); -} - -void gl3_3compat_glTexCoord1dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1dv(v); -} - -void gl3_3compat_glTexCoord1d(void *_glfuncs, GLdouble s) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1d(s); -} - -void gl3_3compat_glRectsv(void *_glfuncs, const GLshort* v1, const GLshort* v2) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectsv(v1, v2); -} - -void gl3_3compat_glRects(void *_glfuncs, GLshort x1, GLshort y1, GLshort x2, GLshort y2) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRects(x1, y1, x2, y2); -} - -void gl3_3compat_glRectiv(void *_glfuncs, const GLint* v1, const GLint* v2) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectiv(v1, v2); -} - -void gl3_3compat_glRecti(void *_glfuncs, GLint x1, GLint y1, GLint x2, GLint y2) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRecti(x1, y1, x2, y2); -} - -void gl3_3compat_glRectfv(void *_glfuncs, const GLfloat* v1, const GLfloat* v2) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectfv(v1, v2); -} - -void gl3_3compat_glRectf(void *_glfuncs, GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectf(x1, y1, x2, y2); -} - -void gl3_3compat_glRectdv(void *_glfuncs, const GLdouble* v1, const GLdouble* v2) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectdv(v1, v2); -} - -void gl3_3compat_glRectd(void *_glfuncs, GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectd(x1, y1, x2, y2); -} - -void gl3_3compat_glRasterPos4sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4sv(v); -} - -void gl3_3compat_glRasterPos4s(void *_glfuncs, GLshort x, GLshort y, GLshort z, GLshort w) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4s(x, y, z, w); -} - -void gl3_3compat_glRasterPos4iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4iv(v); -} - -void gl3_3compat_glRasterPos4i(void *_glfuncs, GLint x, GLint y, GLint z, GLint w) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4i(x, y, z, w); -} - -void gl3_3compat_glRasterPos4fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4fv(v); -} - -void gl3_3compat_glRasterPos4f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z, GLfloat w) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4f(x, y, z, w); -} - -void gl3_3compat_glRasterPos4dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4dv(v); -} - -void gl3_3compat_glRasterPos4d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z, GLdouble w) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4d(x, y, z, w); -} - -void gl3_3compat_glRasterPos3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3sv(v); -} - -void gl3_3compat_glRasterPos3s(void *_glfuncs, GLshort x, GLshort y, GLshort z) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3s(x, y, z); -} - -void gl3_3compat_glRasterPos3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3iv(v); -} - -void gl3_3compat_glRasterPos3i(void *_glfuncs, GLint x, GLint y, GLint z) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3i(x, y, z); -} - -void gl3_3compat_glRasterPos3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3fv(v); -} - -void gl3_3compat_glRasterPos3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3f(x, y, z); -} - -void gl3_3compat_glRasterPos3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3dv(v); -} - -void gl3_3compat_glRasterPos3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3d(x, y, z); -} - -void gl3_3compat_glRasterPos2sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2sv(v); -} - -void gl3_3compat_glRasterPos2s(void *_glfuncs, GLshort x, GLshort y) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2s(x, y); -} - -void gl3_3compat_glRasterPos2iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2iv(v); -} - -void gl3_3compat_glRasterPos2i(void *_glfuncs, GLint x, GLint y) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2i(x, y); -} - -void gl3_3compat_glRasterPos2fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2fv(v); -} - -void gl3_3compat_glRasterPos2f(void *_glfuncs, GLfloat x, GLfloat y) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2f(x, y); -} - -void gl3_3compat_glRasterPos2dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2dv(v); -} - -void gl3_3compat_glRasterPos2d(void *_glfuncs, GLdouble x, GLdouble y) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2d(x, y); -} - -void gl3_3compat_glNormal3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3sv(v); -} - -void gl3_3compat_glNormal3s(void *_glfuncs, GLshort nx, GLshort ny, GLshort nz) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3s(nx, ny, nz); -} - -void gl3_3compat_glNormal3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3iv(v); -} - -void gl3_3compat_glNormal3i(void *_glfuncs, GLint nx, GLint ny, GLint nz) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3i(nx, ny, nz); -} - -void gl3_3compat_glNormal3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3fv(v); -} - -void gl3_3compat_glNormal3f(void *_glfuncs, GLfloat nx, GLfloat ny, GLfloat nz) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3f(nx, ny, nz); -} - -void gl3_3compat_glNormal3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3dv(v); -} - -void gl3_3compat_glNormal3d(void *_glfuncs, GLdouble nx, GLdouble ny, GLdouble nz) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3d(nx, ny, nz); -} - -void gl3_3compat_glNormal3bv(void *_glfuncs, const GLbyte* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3bv(v); -} - -void gl3_3compat_glNormal3b(void *_glfuncs, GLbyte nx, GLbyte ny, GLbyte nz) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3b(nx, ny, nz); -} - -void gl3_3compat_glIndexsv(void *_glfuncs, const GLshort* c) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexsv(c); -} - -void gl3_3compat_glIndexs(void *_glfuncs, GLshort c) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexs(c); -} - -void gl3_3compat_glIndexiv(void *_glfuncs, const GLint* c) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexiv(c); -} - -void gl3_3compat_glIndexi(void *_glfuncs, GLint c) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexi(c); -} - -void gl3_3compat_glIndexfv(void *_glfuncs, const GLfloat* c) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexfv(c); -} - -void gl3_3compat_glIndexf(void *_glfuncs, GLfloat c) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexf(c); -} - -void gl3_3compat_glIndexdv(void *_glfuncs, const GLdouble* c) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexdv(c); -} - -void gl3_3compat_glIndexd(void *_glfuncs, GLdouble c) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexd(c); -} - -void gl3_3compat_glEnd(void *_glfuncs) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnd(); -} - -void gl3_3compat_glEdgeFlagv(void *_glfuncs, const GLboolean* flag) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEdgeFlagv(flag); -} - -void gl3_3compat_glEdgeFlag(void *_glfuncs, GLboolean flag) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEdgeFlag(flag); -} - -void gl3_3compat_glColor4usv(void *_glfuncs, const GLushort* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4usv(v); -} - -void gl3_3compat_glColor4us(void *_glfuncs, GLushort red, GLushort green, GLushort blue, GLushort alpha) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4us(red, green, blue, alpha); -} - -void gl3_3compat_glColor4uiv(void *_glfuncs, const GLuint* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4uiv(v); -} - -void gl3_3compat_glColor4ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue, GLuint alpha) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4ui(red, green, blue, alpha); -} - -void gl3_3compat_glColor4ubv(void *_glfuncs, const GLubyte* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4ubv(v); -} - -void gl3_3compat_glColor4ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4ub(red, green, blue, alpha); -} - -void gl3_3compat_glColor4sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4sv(v); -} - -void gl3_3compat_glColor4s(void *_glfuncs, GLshort red, GLshort green, GLshort blue, GLshort alpha) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4s(red, green, blue, alpha); -} - -void gl3_3compat_glColor4iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4iv(v); -} - -void gl3_3compat_glColor4i(void *_glfuncs, GLint red, GLint green, GLint blue, GLint alpha) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4i(red, green, blue, alpha); -} - -void gl3_3compat_glColor4fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4fv(v); -} - -void gl3_3compat_glColor4f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4f(red, green, blue, alpha); -} - -void gl3_3compat_glColor4dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4dv(v); -} - -void gl3_3compat_glColor4d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4d(red, green, blue, alpha); -} - -void gl3_3compat_glColor4bv(void *_glfuncs, const GLbyte* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4bv(v); -} - -void gl3_3compat_glColor4b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4b(red, green, blue, alpha); -} - -void gl3_3compat_glColor3usv(void *_glfuncs, const GLushort* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3usv(v); -} - -void gl3_3compat_glColor3us(void *_glfuncs, GLushort red, GLushort green, GLushort blue) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3us(red, green, blue); -} - -void gl3_3compat_glColor3uiv(void *_glfuncs, const GLuint* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3uiv(v); -} - -void gl3_3compat_glColor3ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3ui(red, green, blue); -} - -void gl3_3compat_glColor3ubv(void *_glfuncs, const GLubyte* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3ubv(v); -} - -void gl3_3compat_glColor3ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3ub(red, green, blue); -} - -void gl3_3compat_glColor3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3sv(v); -} - -void gl3_3compat_glColor3s(void *_glfuncs, GLshort red, GLshort green, GLshort blue) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3s(red, green, blue); -} - -void gl3_3compat_glColor3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3iv(v); -} - -void gl3_3compat_glColor3i(void *_glfuncs, GLint red, GLint green, GLint blue) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3i(red, green, blue); -} - -void gl3_3compat_glColor3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3fv(v); -} - -void gl3_3compat_glColor3f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3f(red, green, blue); -} - -void gl3_3compat_glColor3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3dv(v); -} - -void gl3_3compat_glColor3d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3d(red, green, blue); -} - -void gl3_3compat_glColor3bv(void *_glfuncs, const GLbyte* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3bv(v); -} - -void gl3_3compat_glColor3b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3b(red, green, blue); -} - -void gl3_3compat_glBitmap(void *_glfuncs, GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte* bitmap) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBitmap(width, height, xorig, yorig, xmove, ymove, bitmap); -} - -void gl3_3compat_glBegin(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBegin(mode); -} - -void gl3_3compat_glListBase(void *_glfuncs, GLuint base) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glListBase(base); -} - -GLuint gl3_3compat_glGenLists(void *_glfuncs, GLsizei range_) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGenLists(range_); -} - -void gl3_3compat_glDeleteLists(void *_glfuncs, GLuint list, GLsizei range_) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteLists(list, range_); -} - -void gl3_3compat_glCallLists(void *_glfuncs, GLsizei n, GLenum gltype, const GLvoid* lists) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCallLists(n, gltype, lists); -} - -void gl3_3compat_glCallList(void *_glfuncs, GLuint list) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCallList(list); -} - -void gl3_3compat_glEndList(void *_glfuncs) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndList(); -} - -void gl3_3compat_glNewList(void *_glfuncs, GLuint list, GLenum mode) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNewList(list, mode); -} - -void gl3_3compat_glPushClientAttrib(void *_glfuncs, GLbitfield mask) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPushClientAttrib(mask); -} - -void gl3_3compat_glPopClientAttrib(void *_glfuncs) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPopClientAttrib(); -} - -void gl3_3compat_glPrioritizeTextures(void *_glfuncs, GLsizei n, const GLuint* textures, const GLfloat* priorities) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPrioritizeTextures(n, textures, priorities); -} - -GLboolean gl3_3compat_glAreTexturesResident(void *_glfuncs, GLsizei n, const GLuint* textures, GLboolean* residences) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glAreTexturesResident(n, textures, residences); -} - -void gl3_3compat_glVertexPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexPointer(size, gltype, stride, pointer); -} - -void gl3_3compat_glTexCoordPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordPointer(size, gltype, stride, pointer); -} - -void gl3_3compat_glNormalPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormalPointer(gltype, stride, pointer); -} - -void gl3_3compat_glInterleavedArrays(void *_glfuncs, GLenum format, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glInterleavedArrays(format, stride, pointer); -} - -void gl3_3compat_glIndexPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexPointer(gltype, stride, pointer); -} - -void gl3_3compat_glEnableClientState(void *_glfuncs, GLenum array) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnableClientState(array); -} - -void gl3_3compat_glEdgeFlagPointer(void *_glfuncs, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEdgeFlagPointer(stride, pointer); -} - -void gl3_3compat_glDisableClientState(void *_glfuncs, GLenum array) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDisableClientState(array); -} - -void gl3_3compat_glColorPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorPointer(size, gltype, stride, pointer); -} - -void gl3_3compat_glArrayElement(void *_glfuncs, GLint i) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glArrayElement(i); -} - -void gl3_3compat_glResetMinmax(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glResetMinmax(target); -} - -void gl3_3compat_glResetHistogram(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glResetHistogram(target); -} - -void gl3_3compat_glMinmax(void *_glfuncs, GLenum target, GLenum internalFormat, GLboolean sink) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMinmax(target, internalFormat, sink); -} - -void gl3_3compat_glHistogram(void *_glfuncs, GLenum target, GLsizei width, GLenum internalFormat, GLboolean sink) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glHistogram(target, width, internalFormat, sink); -} - -void gl3_3compat_glGetMinmaxParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMinmaxParameteriv(target, pname, params); -} - -void gl3_3compat_glGetMinmaxParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMinmaxParameterfv(target, pname, params); -} - -void gl3_3compat_glGetMinmax(void *_glfuncs, GLenum target, GLboolean reset, GLenum format, GLenum gltype, GLvoid* values) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMinmax(target, reset, format, gltype, values); -} - -void gl3_3compat_glGetHistogramParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetHistogramParameteriv(target, pname, params); -} - -void gl3_3compat_glGetHistogramParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetHistogramParameterfv(target, pname, params); -} - -void gl3_3compat_glGetHistogram(void *_glfuncs, GLenum target, GLboolean reset, GLenum format, GLenum gltype, GLvoid* values) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetHistogram(target, reset, format, gltype, values); -} - -void gl3_3compat_glSeparableFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* row, const GLvoid* column) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSeparableFilter2D(target, internalFormat, width, height, format, gltype, row, column); -} - -void gl3_3compat_glGetSeparableFilter(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* row, GLvoid* column, GLvoid* span) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetSeparableFilter(target, format, gltype, row, column, span); -} - -void gl3_3compat_glGetConvolutionParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetConvolutionParameteriv(target, pname, params); -} - -void gl3_3compat_glGetConvolutionParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetConvolutionParameterfv(target, pname, params); -} - -void gl3_3compat_glGetConvolutionFilter(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* image) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetConvolutionFilter(target, format, gltype, image); -} - -void gl3_3compat_glCopyConvolutionFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyConvolutionFilter2D(target, internalFormat, x, y, width, height); -} - -void gl3_3compat_glCopyConvolutionFilter1D(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyConvolutionFilter1D(target, internalFormat, x, y, width); -} - -void gl3_3compat_glConvolutionParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionParameteriv(target, pname, params); -} - -void gl3_3compat_glConvolutionParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionParameteri(target, pname, params); -} - -void gl3_3compat_glConvolutionParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionParameterfv(target, pname, params); -} - -void gl3_3compat_glConvolutionParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionParameterf(target, pname, params); -} - -void gl3_3compat_glConvolutionFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* image) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionFilter2D(target, internalFormat, width, height, format, gltype, image); -} - -void gl3_3compat_glConvolutionFilter1D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum gltype, const GLvoid* image) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionFilter1D(target, internalFormat, width, format, gltype, image); -} - -void gl3_3compat_glCopyColorSubTable(void *_glfuncs, GLenum target, GLsizei start, GLint x, GLint y, GLsizei width) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyColorSubTable(target, start, x, y, width); -} - -void gl3_3compat_glColorSubTable(void *_glfuncs, GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum gltype, const GLvoid* data) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorSubTable(target, start, count, format, gltype, data); -} - -void gl3_3compat_glGetColorTableParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetColorTableParameteriv(target, pname, params); -} - -void gl3_3compat_glGetColorTableParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetColorTableParameterfv(target, pname, params); -} - -void gl3_3compat_glGetColorTable(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* table) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetColorTable(target, format, gltype, table); -} - -void gl3_3compat_glCopyColorTable(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyColorTable(target, internalFormat, x, y, width); -} - -void gl3_3compat_glColorTableParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorTableParameteriv(target, pname, params); -} - -void gl3_3compat_glColorTableParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorTableParameterfv(target, pname, params); -} - -void gl3_3compat_glColorTable(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum gltype, const GLvoid* table) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorTable(target, internalFormat, width, format, gltype, table); -} - -void gl3_3compat_glMultTransposeMatrixd(void *_glfuncs, const GLdouble* m) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultTransposeMatrixd(m); -} - -void gl3_3compat_glMultTransposeMatrixf(void *_glfuncs, const GLfloat* m) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultTransposeMatrixf(m); -} - -void gl3_3compat_glLoadTransposeMatrixd(void *_glfuncs, const GLdouble* m) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadTransposeMatrixd(m); -} - -void gl3_3compat_glLoadTransposeMatrixf(void *_glfuncs, const GLfloat* m) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadTransposeMatrixf(m); -} - -void gl3_3compat_glMultiTexCoord4sv(void *_glfuncs, GLenum target, const GLshort* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4sv(target, v); -} - -void gl3_3compat_glMultiTexCoord4s(void *_glfuncs, GLenum target, GLshort s, GLshort t, GLshort r, GLshort q) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4s(target, s, t, r, q); -} - -void gl3_3compat_glMultiTexCoord4iv(void *_glfuncs, GLenum target, const GLint* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4iv(target, v); -} - -void gl3_3compat_glMultiTexCoord4i(void *_glfuncs, GLenum target, GLint s, GLint t, GLint r, GLint q) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4i(target, s, t, r, q); -} - -void gl3_3compat_glMultiTexCoord4fv(void *_glfuncs, GLenum target, const GLfloat* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4fv(target, v); -} - -void gl3_3compat_glMultiTexCoord4f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4f(target, s, t, r, q); -} - -void gl3_3compat_glMultiTexCoord4dv(void *_glfuncs, GLenum target, const GLdouble* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4dv(target, v); -} - -void gl3_3compat_glMultiTexCoord4d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4d(target, s, t, r, q); -} - -void gl3_3compat_glMultiTexCoord3sv(void *_glfuncs, GLenum target, const GLshort* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3sv(target, v); -} - -void gl3_3compat_glMultiTexCoord3s(void *_glfuncs, GLenum target, GLshort s, GLshort t, GLshort r) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3s(target, s, t, r); -} - -void gl3_3compat_glMultiTexCoord3iv(void *_glfuncs, GLenum target, const GLint* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3iv(target, v); -} - -void gl3_3compat_glMultiTexCoord3i(void *_glfuncs, GLenum target, GLint s, GLint t, GLint r) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3i(target, s, t, r); -} - -void gl3_3compat_glMultiTexCoord3fv(void *_glfuncs, GLenum target, const GLfloat* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3fv(target, v); -} - -void gl3_3compat_glMultiTexCoord3f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t, GLfloat r) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3f(target, s, t, r); -} - -void gl3_3compat_glMultiTexCoord3dv(void *_glfuncs, GLenum target, const GLdouble* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3dv(target, v); -} - -void gl3_3compat_glMultiTexCoord3d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t, GLdouble r) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3d(target, s, t, r); -} - -void gl3_3compat_glMultiTexCoord2sv(void *_glfuncs, GLenum target, const GLshort* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2sv(target, v); -} - -void gl3_3compat_glMultiTexCoord2s(void *_glfuncs, GLenum target, GLshort s, GLshort t) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2s(target, s, t); -} - -void gl3_3compat_glMultiTexCoord2iv(void *_glfuncs, GLenum target, const GLint* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2iv(target, v); -} - -void gl3_3compat_glMultiTexCoord2i(void *_glfuncs, GLenum target, GLint s, GLint t) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2i(target, s, t); -} - -void gl3_3compat_glMultiTexCoord2fv(void *_glfuncs, GLenum target, const GLfloat* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2fv(target, v); -} - -void gl3_3compat_glMultiTexCoord2f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2f(target, s, t); -} - -void gl3_3compat_glMultiTexCoord2dv(void *_glfuncs, GLenum target, const GLdouble* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2dv(target, v); -} - -void gl3_3compat_glMultiTexCoord2d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2d(target, s, t); -} - -void gl3_3compat_glMultiTexCoord1sv(void *_glfuncs, GLenum target, const GLshort* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1sv(target, v); -} - -void gl3_3compat_glMultiTexCoord1s(void *_glfuncs, GLenum target, GLshort s) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1s(target, s); -} - -void gl3_3compat_glMultiTexCoord1iv(void *_glfuncs, GLenum target, const GLint* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1iv(target, v); -} - -void gl3_3compat_glMultiTexCoord1i(void *_glfuncs, GLenum target, GLint s) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1i(target, s); -} - -void gl3_3compat_glMultiTexCoord1fv(void *_glfuncs, GLenum target, const GLfloat* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1fv(target, v); -} - -void gl3_3compat_glMultiTexCoord1f(void *_glfuncs, GLenum target, GLfloat s) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1f(target, s); -} - -void gl3_3compat_glMultiTexCoord1dv(void *_glfuncs, GLenum target, const GLdouble* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1dv(target, v); -} - -void gl3_3compat_glMultiTexCoord1d(void *_glfuncs, GLenum target, GLdouble s) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1d(target, s); -} - -void gl3_3compat_glClientActiveTexture(void *_glfuncs, GLenum texture) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClientActiveTexture(texture); -} - -void gl3_3compat_glWindowPos3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3sv(v); -} - -void gl3_3compat_glWindowPos3s(void *_glfuncs, GLshort x, GLshort y, GLshort z) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3s(x, y, z); -} - -void gl3_3compat_glWindowPos3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3iv(v); -} - -void gl3_3compat_glWindowPos3i(void *_glfuncs, GLint x, GLint y, GLint z) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3i(x, y, z); -} - -void gl3_3compat_glWindowPos3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3fv(v); -} - -void gl3_3compat_glWindowPos3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3f(x, y, z); -} - -void gl3_3compat_glWindowPos3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3dv(v); -} - -void gl3_3compat_glWindowPos3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3d(x, y, z); -} - -void gl3_3compat_glWindowPos2sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2sv(v); -} - -void gl3_3compat_glWindowPos2s(void *_glfuncs, GLshort x, GLshort y) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2s(x, y); -} - -void gl3_3compat_glWindowPos2iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2iv(v); -} - -void gl3_3compat_glWindowPos2i(void *_glfuncs, GLint x, GLint y) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2i(x, y); -} - -void gl3_3compat_glWindowPos2fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2fv(v); -} - -void gl3_3compat_glWindowPos2f(void *_glfuncs, GLfloat x, GLfloat y) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2f(x, y); -} - -void gl3_3compat_glWindowPos2dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2dv(v); -} - -void gl3_3compat_glWindowPos2d(void *_glfuncs, GLdouble x, GLdouble y) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2d(x, y); -} - -void gl3_3compat_glSecondaryColorPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColorPointer(size, gltype, stride, pointer); -} - -void gl3_3compat_glSecondaryColor3usv(void *_glfuncs, const GLushort* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3usv(v); -} - -void gl3_3compat_glSecondaryColor3us(void *_glfuncs, GLushort red, GLushort green, GLushort blue) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3us(red, green, blue); -} - -void gl3_3compat_glSecondaryColor3uiv(void *_glfuncs, const GLuint* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3uiv(v); -} - -void gl3_3compat_glSecondaryColor3ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3ui(red, green, blue); -} - -void gl3_3compat_glSecondaryColor3ubv(void *_glfuncs, const GLubyte* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3ubv(v); -} - -void gl3_3compat_glSecondaryColor3ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3ub(red, green, blue); -} - -void gl3_3compat_glSecondaryColor3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3sv(v); -} - -void gl3_3compat_glSecondaryColor3s(void *_glfuncs, GLshort red, GLshort green, GLshort blue) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3s(red, green, blue); -} - -void gl3_3compat_glSecondaryColor3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3iv(v); -} - -void gl3_3compat_glSecondaryColor3i(void *_glfuncs, GLint red, GLint green, GLint blue) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3i(red, green, blue); -} - -void gl3_3compat_glSecondaryColor3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3fv(v); -} - -void gl3_3compat_glSecondaryColor3f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3f(red, green, blue); -} - -void gl3_3compat_glSecondaryColor3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3dv(v); -} - -void gl3_3compat_glSecondaryColor3d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3d(red, green, blue); -} - -void gl3_3compat_glSecondaryColor3bv(void *_glfuncs, const GLbyte* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3bv(v); -} - -void gl3_3compat_glSecondaryColor3b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3b(red, green, blue); -} - -void gl3_3compat_glFogCoordPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogCoordPointer(gltype, stride, pointer); -} - -void gl3_3compat_glFogCoorddv(void *_glfuncs, const GLdouble* coord) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogCoorddv(coord); -} - -void gl3_3compat_glFogCoordd(void *_glfuncs, GLdouble coord) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogCoordd(coord); -} - -void gl3_3compat_glFogCoordfv(void *_glfuncs, const GLfloat* coord) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogCoordfv(coord); -} - -void gl3_3compat_glFogCoordf(void *_glfuncs, GLfloat coord) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogCoordf(coord); -} - -void gl3_3compat_glVertexAttrib4usv(void *_glfuncs, GLuint index, const GLushort* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4usv(index, v); -} - -void gl3_3compat_glVertexAttrib4uiv(void *_glfuncs, GLuint index, const GLuint* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4uiv(index, v); -} - -void gl3_3compat_glVertexAttrib4ubv(void *_glfuncs, GLuint index, const GLubyte* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4ubv(index, v); -} - -void gl3_3compat_glVertexAttrib4sv(void *_glfuncs, GLuint index, const GLshort* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4sv(index, v); -} - -void gl3_3compat_glVertexAttrib4s(void *_glfuncs, GLuint index, GLshort x, GLshort y, GLshort z, GLshort w) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4s(index, x, y, z, w); -} - -void gl3_3compat_glVertexAttrib4iv(void *_glfuncs, GLuint index, const GLint* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4iv(index, v); -} - -void gl3_3compat_glVertexAttrib4fv(void *_glfuncs, GLuint index, const GLfloat* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4fv(index, v); -} - -void gl3_3compat_glVertexAttrib4f(void *_glfuncs, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4f(index, x, y, z, w); -} - -void gl3_3compat_glVertexAttrib4dv(void *_glfuncs, GLuint index, const GLdouble* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4dv(index, v); -} - -void gl3_3compat_glVertexAttrib4d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4d(index, x, y, z, w); -} - -void gl3_3compat_glVertexAttrib4bv(void *_glfuncs, GLuint index, const GLbyte* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4bv(index, v); -} - -void gl3_3compat_glVertexAttrib4Nusv(void *_glfuncs, GLuint index, const GLushort* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4Nusv(index, v); -} - -void gl3_3compat_glVertexAttrib4Nuiv(void *_glfuncs, GLuint index, const GLuint* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4Nuiv(index, v); -} - -void gl3_3compat_glVertexAttrib4Nubv(void *_glfuncs, GLuint index, const GLubyte* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4Nubv(index, v); -} - -void gl3_3compat_glVertexAttrib4Nub(void *_glfuncs, GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4Nub(index, x, y, z, w); -} - -void gl3_3compat_glVertexAttrib4Nsv(void *_glfuncs, GLuint index, const GLshort* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4Nsv(index, v); -} - -void gl3_3compat_glVertexAttrib4Niv(void *_glfuncs, GLuint index, const GLint* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4Niv(index, v); -} - -void gl3_3compat_glVertexAttrib4Nbv(void *_glfuncs, GLuint index, const GLbyte* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4Nbv(index, v); -} - -void gl3_3compat_glVertexAttrib3sv(void *_glfuncs, GLuint index, const GLshort* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib3sv(index, v); -} - -void gl3_3compat_glVertexAttrib3s(void *_glfuncs, GLuint index, GLshort x, GLshort y, GLshort z) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib3s(index, x, y, z); -} - -void gl3_3compat_glVertexAttrib3fv(void *_glfuncs, GLuint index, const GLfloat* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib3fv(index, v); -} - -void gl3_3compat_glVertexAttrib3f(void *_glfuncs, GLuint index, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib3f(index, x, y, z); -} - -void gl3_3compat_glVertexAttrib3dv(void *_glfuncs, GLuint index, const GLdouble* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib3dv(index, v); -} - -void gl3_3compat_glVertexAttrib3d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib3d(index, x, y, z); -} - -void gl3_3compat_glVertexAttrib2sv(void *_glfuncs, GLuint index, const GLshort* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib2sv(index, v); -} - -void gl3_3compat_glVertexAttrib2s(void *_glfuncs, GLuint index, GLshort x, GLshort y) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib2s(index, x, y); -} - -void gl3_3compat_glVertexAttrib2fv(void *_glfuncs, GLuint index, const GLfloat* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib2fv(index, v); -} - -void gl3_3compat_glVertexAttrib2f(void *_glfuncs, GLuint index, GLfloat x, GLfloat y) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib2f(index, x, y); -} - -void gl3_3compat_glVertexAttrib2dv(void *_glfuncs, GLuint index, const GLdouble* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib2dv(index, v); -} - -void gl3_3compat_glVertexAttrib2d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib2d(index, x, y); -} - -void gl3_3compat_glVertexAttrib1sv(void *_glfuncs, GLuint index, const GLshort* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib1sv(index, v); -} - -void gl3_3compat_glVertexAttrib1s(void *_glfuncs, GLuint index, GLshort x) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib1s(index, x); -} - -void gl3_3compat_glVertexAttrib1fv(void *_glfuncs, GLuint index, const GLfloat* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib1fv(index, v); -} - -void gl3_3compat_glVertexAttrib1f(void *_glfuncs, GLuint index, GLfloat x) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib1f(index, x); -} - -void gl3_3compat_glVertexAttrib1dv(void *_glfuncs, GLuint index, const GLdouble* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib1dv(index, v); -} - -void gl3_3compat_glVertexAttrib1d(void *_glfuncs, GLuint index, GLdouble x) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib1d(index, x); -} - -void gl3_3compat_glVertexAttribI4usv(void *_glfuncs, GLuint index, const GLushort* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI4usv(index, v); -} - -void gl3_3compat_glVertexAttribI4ubv(void *_glfuncs, GLuint index, const GLubyte* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI4ubv(index, v); -} - -void gl3_3compat_glVertexAttribI4sv(void *_glfuncs, GLuint index, const GLshort* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI4sv(index, v); -} - -void gl3_3compat_glVertexAttribI4bv(void *_glfuncs, GLuint index, const GLbyte* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI4bv(index, v); -} - -void gl3_3compat_glVertexAttribI4uiv(void *_glfuncs, GLuint index, const GLuint* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI4uiv(index, v); -} - -void gl3_3compat_glVertexAttribI3uiv(void *_glfuncs, GLuint index, const GLuint* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI3uiv(index, v); -} - -void gl3_3compat_glVertexAttribI2uiv(void *_glfuncs, GLuint index, const GLuint* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI2uiv(index, v); -} - -void gl3_3compat_glVertexAttribI1uiv(void *_glfuncs, GLuint index, const GLuint* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI1uiv(index, v); -} - -void gl3_3compat_glVertexAttribI4iv(void *_glfuncs, GLuint index, const GLint* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI4iv(index, v); -} - -void gl3_3compat_glVertexAttribI3iv(void *_glfuncs, GLuint index, const GLint* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI3iv(index, v); -} - -void gl3_3compat_glVertexAttribI2iv(void *_glfuncs, GLuint index, const GLint* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI2iv(index, v); -} - -void gl3_3compat_glVertexAttribI1iv(void *_glfuncs, GLuint index, const GLint* v) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI1iv(index, v); -} - -void gl3_3compat_glVertexAttribI4ui(void *_glfuncs, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI4ui(index, x, y, z, w); -} - -void gl3_3compat_glVertexAttribI3ui(void *_glfuncs, GLuint index, GLuint x, GLuint y, GLuint z) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI3ui(index, x, y, z); -} - -void gl3_3compat_glVertexAttribI2ui(void *_glfuncs, GLuint index, GLuint x, GLuint y) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI2ui(index, x, y); -} - -void gl3_3compat_glVertexAttribI1ui(void *_glfuncs, GLuint index, GLuint x) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI1ui(index, x); -} - -void gl3_3compat_glVertexAttribI4i(void *_glfuncs, GLuint index, GLint x, GLint y, GLint z, GLint w) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI4i(index, x, y, z, w); -} - -void gl3_3compat_glVertexAttribI3i(void *_glfuncs, GLuint index, GLint x, GLint y, GLint z) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI3i(index, x, y, z); -} - -void gl3_3compat_glVertexAttribI2i(void *_glfuncs, GLuint index, GLint x, GLint y) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI2i(index, x, y); -} - -void gl3_3compat_glVertexAttribI1i(void *_glfuncs, GLuint index, GLint x) -{ - QOpenGLFunctions_3_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI1i(index, x); -} - diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/3.3compat/funcs.h b/Godeps/_workspace/src/github.com/obscuren/qml/gl/3.3compat/funcs.h deleted file mode 100644 index bd7747532b..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/3.3compat/funcs.h +++ /dev/null @@ -1,787 +0,0 @@ - -// ** file automatically generated by glgen -- do not edit manually ** - -#ifndef __cplusplus -#include -#include -typedef unsigned int GLenum; -typedef unsigned char GLboolean; -typedef unsigned int GLbitfield; -typedef void GLvoid; -typedef char GLchar; -typedef signed char GLbyte; /* 1-byte signed */ -typedef short GLshort; /* 2-byte signed */ -typedef int GLint; /* 4-byte signed */ -typedef unsigned char GLubyte; /* 1-byte unsigned */ -typedef unsigned short GLushort; /* 2-byte unsigned */ -typedef unsigned int GLuint; /* 4-byte unsigned */ -typedef int GLsizei; /* 4-byte signed */ -typedef float GLfloat; /* single precision float */ -typedef float GLclampf; /* single precision float in [0,1] */ -typedef double GLdouble; /* double precision float */ -typedef double GLclampd; /* double precision float in [0,1] */ -typedef int64_t GLint64; -typedef uint64_t GLuint64; -typedef ptrdiff_t GLintptr; -typedef ptrdiff_t GLsizeiptr; -typedef ptrdiff_t GLintptrARB; -typedef ptrdiff_t GLsizeiptrARB; -typedef struct __GLsync *GLsync; -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -void *gl3_3compat_funcs(); - -void gl3_3compat_glViewport(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height); -void gl3_3compat_glDepthRange(void *_glfuncs, GLdouble nearVal, GLdouble farVal); -GLboolean gl3_3compat_glIsEnabled(void *_glfuncs, GLenum cap); -void gl3_3compat_glGetTexLevelParameteriv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLint* params); -void gl3_3compat_glGetTexLevelParameterfv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLfloat* params); -void gl3_3compat_glGetTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl3_3compat_glGetTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl3_3compat_glGetTexImage(void *_glfuncs, GLenum target, GLint level, GLenum format, GLenum gltype, GLvoid* pixels); -void gl3_3compat_glGetIntegerv(void *_glfuncs, GLenum pname, GLint* params); -void gl3_3compat_glGetFloatv(void *_glfuncs, GLenum pname, GLfloat* params); -GLenum gl3_3compat_glGetError(void *_glfuncs); -void gl3_3compat_glGetDoublev(void *_glfuncs, GLenum pname, GLdouble* params); -void gl3_3compat_glGetBooleanv(void *_glfuncs, GLenum pname, GLboolean* params); -void gl3_3compat_glReadPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum gltype, GLvoid* pixels); -void gl3_3compat_glReadBuffer(void *_glfuncs, GLenum mode); -void gl3_3compat_glPixelStorei(void *_glfuncs, GLenum pname, GLint param); -void gl3_3compat_glPixelStoref(void *_glfuncs, GLenum pname, GLfloat param); -void gl3_3compat_glDepthFunc(void *_glfuncs, GLenum glfunc); -void gl3_3compat_glStencilOp(void *_glfuncs, GLenum fail, GLenum zfail, GLenum zpass); -void gl3_3compat_glStencilFunc(void *_glfuncs, GLenum glfunc, GLint ref, GLuint mask); -void gl3_3compat_glLogicOp(void *_glfuncs, GLenum opcode); -void gl3_3compat_glBlendFunc(void *_glfuncs, GLenum sfactor, GLenum dfactor); -void gl3_3compat_glFlush(void *_glfuncs); -void gl3_3compat_glFinish(void *_glfuncs); -void gl3_3compat_glEnable(void *_glfuncs, GLenum cap); -void gl3_3compat_glDisable(void *_glfuncs, GLenum cap); -void gl3_3compat_glDepthMask(void *_glfuncs, GLboolean flag); -void gl3_3compat_glColorMask(void *_glfuncs, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); -void gl3_3compat_glStencilMask(void *_glfuncs, GLuint mask); -void gl3_3compat_glClearDepth(void *_glfuncs, GLdouble depth); -void gl3_3compat_glClearStencil(void *_glfuncs, GLint s); -void gl3_3compat_glClearColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl3_3compat_glClear(void *_glfuncs, GLbitfield mask); -void gl3_3compat_glDrawBuffer(void *_glfuncs, GLenum mode); -void gl3_3compat_glTexImage2D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl3_3compat_glTexImage1D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl3_3compat_glTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl3_3compat_glTexParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint param); -void gl3_3compat_glTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params); -void gl3_3compat_glTexParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param); -void gl3_3compat_glScissor(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height); -void gl3_3compat_glPolygonMode(void *_glfuncs, GLenum face, GLenum mode); -void gl3_3compat_glPointSize(void *_glfuncs, GLfloat size); -void gl3_3compat_glLineWidth(void *_glfuncs, GLfloat width); -void gl3_3compat_glHint(void *_glfuncs, GLenum target, GLenum mode); -void gl3_3compat_glFrontFace(void *_glfuncs, GLenum mode); -void gl3_3compat_glCullFace(void *_glfuncs, GLenum mode); -void gl3_3compat_glIndexubv(void *_glfuncs, const GLubyte* c); -void gl3_3compat_glIndexub(void *_glfuncs, GLubyte c); -GLboolean gl3_3compat_glIsTexture(void *_glfuncs, GLuint texture); -void gl3_3compat_glGenTextures(void *_glfuncs, GLsizei n, GLuint* textures); -void gl3_3compat_glDeleteTextures(void *_glfuncs, GLsizei n, const GLuint* textures); -void gl3_3compat_glBindTexture(void *_glfuncs, GLenum target, GLuint texture); -void gl3_3compat_glTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl3_3compat_glTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl3_3compat_glCopyTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -void gl3_3compat_glCopyTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -void gl3_3compat_glCopyTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -void gl3_3compat_glCopyTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border); -void gl3_3compat_glPolygonOffset(void *_glfuncs, GLfloat factor, GLfloat units); -void gl3_3compat_glDrawElements(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices); -void gl3_3compat_glDrawArrays(void *_glfuncs, GLenum mode, GLint first, GLsizei count); -void gl3_3compat_glCopyTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -void gl3_3compat_glTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl3_3compat_glTexImage3D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl3_3compat_glDrawRangeElements(void *_glfuncs, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum gltype, const GLvoid* indices); -void gl3_3compat_glBlendEquation(void *_glfuncs, GLenum mode); -void gl3_3compat_glBlendColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl3_3compat_glGetCompressedTexImage(void *_glfuncs, GLenum target, GLint level, GLvoid* img); -void gl3_3compat_glCompressedTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid* data); -void gl3_3compat_glCompressedTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data); -void gl3_3compat_glCompressedTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data); -void gl3_3compat_glCompressedTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid* data); -void gl3_3compat_glCompressedTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data); -void gl3_3compat_glCompressedTexImage3D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data); -void gl3_3compat_glSampleCoverage(void *_glfuncs, GLfloat value, GLboolean invert); -void gl3_3compat_glActiveTexture(void *_glfuncs, GLenum texture); -void gl3_3compat_glPointParameteriv(void *_glfuncs, GLenum pname, const GLint* params); -void gl3_3compat_glPointParameteri(void *_glfuncs, GLenum pname, GLint param); -void gl3_3compat_glPointParameterfv(void *_glfuncs, GLenum pname, const GLfloat* params); -void gl3_3compat_glPointParameterf(void *_glfuncs, GLenum pname, GLfloat param); -void gl3_3compat_glMultiDrawArrays(void *_glfuncs, GLenum mode, const GLint* first, const GLsizei* count, GLsizei drawcount); -void gl3_3compat_glBlendFuncSeparate(void *_glfuncs, GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -void gl3_3compat_glGetBufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -GLboolean gl3_3compat_glUnmapBuffer(void *_glfuncs, GLenum target); -void gl3_3compat_glGetBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, GLvoid* data); -void gl3_3compat_glBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data); -void gl3_3compat_glBufferData(void *_glfuncs, GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage); -GLboolean gl3_3compat_glIsBuffer(void *_glfuncs, GLuint buffer); -void gl3_3compat_glGenBuffers(void *_glfuncs, GLsizei n, GLuint* buffers); -void gl3_3compat_glDeleteBuffers(void *_glfuncs, GLsizei n, const GLuint* buffers); -void gl3_3compat_glBindBuffer(void *_glfuncs, GLenum target, GLuint buffer); -void gl3_3compat_glGetQueryObjectuiv(void *_glfuncs, GLuint id, GLenum pname, GLuint* params); -void gl3_3compat_glGetQueryObjectiv(void *_glfuncs, GLuint id, GLenum pname, GLint* params); -void gl3_3compat_glGetQueryiv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl3_3compat_glEndQuery(void *_glfuncs, GLenum target); -void gl3_3compat_glBeginQuery(void *_glfuncs, GLenum target, GLuint id); -GLboolean gl3_3compat_glIsQuery(void *_glfuncs, GLuint id); -void gl3_3compat_glDeleteQueries(void *_glfuncs, GLsizei n, const GLuint* ids); -void gl3_3compat_glGenQueries(void *_glfuncs, GLsizei n, GLuint* ids); -void gl3_3compat_glVertexAttribPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLboolean normalized, GLsizei stride, const GLvoid* offset); -void gl3_3compat_glValidateProgram(void *_glfuncs, GLuint program); -void gl3_3compat_glUniformMatrix4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl3_3compat_glUniformMatrix3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl3_3compat_glUniformMatrix2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl3_3compat_glUniform4iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gl3_3compat_glUniform3iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gl3_3compat_glUniform2iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gl3_3compat_glUniform1iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gl3_3compat_glUniform4fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gl3_3compat_glUniform3fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gl3_3compat_glUniform2fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gl3_3compat_glUniform1fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gl3_3compat_glUniform4i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -void gl3_3compat_glUniform3i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2); -void gl3_3compat_glUniform2i(void *_glfuncs, GLint location, GLint v0, GLint v1); -void gl3_3compat_glUniform1i(void *_glfuncs, GLint location, GLint v0); -void gl3_3compat_glUniform4f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -void gl3_3compat_glUniform3f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -void gl3_3compat_glUniform2f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1); -void gl3_3compat_glUniform1f(void *_glfuncs, GLint location, GLfloat v0); -void gl3_3compat_glUseProgram(void *_glfuncs, GLuint program); -void gl3_3compat_glShaderSource(void *_glfuncs, GLuint shader, GLsizei count, const GLchar** source, const GLint* length); -void gl3_3compat_glLinkProgram(void *_glfuncs, GLuint program); -GLboolean gl3_3compat_glIsShader(void *_glfuncs, GLuint shader); -GLboolean gl3_3compat_glIsProgram(void *_glfuncs, GLuint program); -void gl3_3compat_glGetVertexAttribiv(void *_glfuncs, GLuint index, GLenum pname, GLint* params); -void gl3_3compat_glGetVertexAttribfv(void *_glfuncs, GLuint index, GLenum pname, GLfloat* params); -void gl3_3compat_glGetVertexAttribdv(void *_glfuncs, GLuint index, GLenum pname, GLdouble* params); -void gl3_3compat_glGetUniformiv(void *_glfuncs, GLuint program, GLint location, GLint* params); -void gl3_3compat_glGetUniformfv(void *_glfuncs, GLuint program, GLint location, GLfloat* params); -GLint gl3_3compat_glGetUniformLocation(void *_glfuncs, GLuint program, const GLchar* name); -void gl3_3compat_glGetShaderSource(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* source); -void gl3_3compat_glGetShaderInfoLog(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* infoLog); -void gl3_3compat_glGetShaderiv(void *_glfuncs, GLuint shader, GLenum pname, GLint* params); -void gl3_3compat_glGetProgramInfoLog(void *_glfuncs, GLuint program, GLsizei bufSize, GLsizei* length, GLchar* infoLog); -void gl3_3compat_glGetProgramiv(void *_glfuncs, GLuint program, GLenum pname, GLint* params); -GLint gl3_3compat_glGetAttribLocation(void *_glfuncs, GLuint program, const GLchar* name); -void gl3_3compat_glGetAttachedShaders(void *_glfuncs, GLuint program, GLsizei maxCount, GLsizei* count, GLuint* obj); -void gl3_3compat_glGetActiveUniform(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name); -void gl3_3compat_glGetActiveAttrib(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name); -void gl3_3compat_glEnableVertexAttribArray(void *_glfuncs, GLuint index); -void gl3_3compat_glDisableVertexAttribArray(void *_glfuncs, GLuint index); -void gl3_3compat_glDetachShader(void *_glfuncs, GLuint program, GLuint shader); -void gl3_3compat_glDeleteShader(void *_glfuncs, GLuint shader); -void gl3_3compat_glDeleteProgram(void *_glfuncs, GLuint program); -GLuint gl3_3compat_glCreateShader(void *_glfuncs, GLenum gltype); -GLuint gl3_3compat_glCreateProgram(void *_glfuncs); -void gl3_3compat_glCompileShader(void *_glfuncs, GLuint shader); -void gl3_3compat_glBindAttribLocation(void *_glfuncs, GLuint program, GLuint index, const GLchar* name); -void gl3_3compat_glAttachShader(void *_glfuncs, GLuint program, GLuint shader); -void gl3_3compat_glStencilMaskSeparate(void *_glfuncs, GLenum face, GLuint mask); -void gl3_3compat_glStencilFuncSeparate(void *_glfuncs, GLenum face, GLenum glfunc, GLint ref, GLuint mask); -void gl3_3compat_glStencilOpSeparate(void *_glfuncs, GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); -void gl3_3compat_glDrawBuffers(void *_glfuncs, GLsizei n, const GLenum* bufs); -void gl3_3compat_glBlendEquationSeparate(void *_glfuncs, GLenum modeRGB, GLenum modeAlpha); -void gl3_3compat_glUniformMatrix4x3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl3_3compat_glUniformMatrix3x4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl3_3compat_glUniformMatrix4x2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl3_3compat_glUniformMatrix2x4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl3_3compat_glUniformMatrix3x2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl3_3compat_glUniformMatrix2x3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -GLboolean gl3_3compat_glIsVertexArray(void *_glfuncs, GLuint array); -void gl3_3compat_glGenVertexArrays(void *_glfuncs, GLsizei n, GLuint* arrays); -void gl3_3compat_glDeleteVertexArrays(void *_glfuncs, GLsizei n, const GLuint* arrays); -void gl3_3compat_glBindVertexArray(void *_glfuncs, GLuint array); -void gl3_3compat_glFlushMappedBufferRange(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr length); -void gl3_3compat_glFramebufferTextureLayer(void *_glfuncs, GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); -void gl3_3compat_glRenderbufferStorageMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height); -void gl3_3compat_glBlitFramebuffer(void *_glfuncs, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -void gl3_3compat_glGenerateMipmap(void *_glfuncs, GLenum target); -void gl3_3compat_glGetFramebufferAttachmentParameteriv(void *_glfuncs, GLenum target, GLenum attachment, GLenum pname, GLint* params); -void gl3_3compat_glFramebufferRenderbuffer(void *_glfuncs, GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -void gl3_3compat_glFramebufferTexture3D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -void gl3_3compat_glFramebufferTexture2D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -void gl3_3compat_glFramebufferTexture1D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLenum gl3_3compat_glCheckFramebufferStatus(void *_glfuncs, GLenum target); -void gl3_3compat_glGenFramebuffers(void *_glfuncs, GLsizei n, GLuint* framebuffers); -void gl3_3compat_glDeleteFramebuffers(void *_glfuncs, GLsizei n, const GLuint* framebuffers); -void gl3_3compat_glBindFramebuffer(void *_glfuncs, GLenum target, GLuint framebuffer); -GLboolean gl3_3compat_glIsFramebuffer(void *_glfuncs, GLuint framebuffer); -void gl3_3compat_glGetRenderbufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl3_3compat_glRenderbufferStorage(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height); -void gl3_3compat_glGenRenderbuffers(void *_glfuncs, GLsizei n, GLuint* renderbuffers); -void gl3_3compat_glDeleteRenderbuffers(void *_glfuncs, GLsizei n, const GLuint* renderbuffers); -void gl3_3compat_glBindRenderbuffer(void *_glfuncs, GLenum target, GLuint renderbuffer); -GLboolean gl3_3compat_glIsRenderbuffer(void *_glfuncs, GLuint renderbuffer); -void gl3_3compat_glClearBufferfi(void *_glfuncs, GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); -void gl3_3compat_glClearBufferfv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLfloat* value); -void gl3_3compat_glClearBufferuiv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLuint* value); -void gl3_3compat_glClearBufferiv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLint* value); -void gl3_3compat_glGetTexParameterIuiv(void *_glfuncs, GLenum target, GLenum pname, GLuint* params); -void gl3_3compat_glGetTexParameterIiv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl3_3compat_glTexParameterIuiv(void *_glfuncs, GLenum target, GLenum pname, const GLuint* params); -void gl3_3compat_glTexParameterIiv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl3_3compat_glUniform4uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value); -void gl3_3compat_glUniform3uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value); -void gl3_3compat_glUniform2uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value); -void gl3_3compat_glUniform1uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value); -void gl3_3compat_glUniform4ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -void gl3_3compat_glUniform3ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1, GLuint v2); -void gl3_3compat_glUniform2ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1); -void gl3_3compat_glUniform1ui(void *_glfuncs, GLint location, GLuint v0); -GLint gl3_3compat_glGetFragDataLocation(void *_glfuncs, GLuint program, const GLchar* name); -void gl3_3compat_glBindFragDataLocation(void *_glfuncs, GLuint program, GLuint color, const GLchar* name); -void gl3_3compat_glGetUniformuiv(void *_glfuncs, GLuint program, GLint location, GLuint* params); -void gl3_3compat_glGetVertexAttribIuiv(void *_glfuncs, GLuint index, GLenum pname, GLuint* params); -void gl3_3compat_glGetVertexAttribIiv(void *_glfuncs, GLuint index, GLenum pname, GLint* params); -void gl3_3compat_glVertexAttribIPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl3_3compat_glEndConditionalRender(void *_glfuncs); -void gl3_3compat_glBeginConditionalRender(void *_glfuncs, GLuint id, GLenum mode); -void gl3_3compat_glClampColor(void *_glfuncs, GLenum target, GLenum clamp); -void gl3_3compat_glGetTransformFeedbackVarying(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* gltype, GLchar* name); -void gl3_3compat_glBindBufferBase(void *_glfuncs, GLenum target, GLuint index, GLuint buffer); -void gl3_3compat_glBindBufferRange(void *_glfuncs, GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -void gl3_3compat_glEndTransformFeedback(void *_glfuncs); -void gl3_3compat_glBeginTransformFeedback(void *_glfuncs, GLenum primitiveMode); -GLboolean gl3_3compat_glIsEnabledi(void *_glfuncs, GLenum target, GLuint index); -void gl3_3compat_glDisablei(void *_glfuncs, GLenum target, GLuint index); -void gl3_3compat_glEnablei(void *_glfuncs, GLenum target, GLuint index); -void gl3_3compat_glGetIntegeri_v(void *_glfuncs, GLenum target, GLuint index, GLint* data); -void gl3_3compat_glGetBooleani_v(void *_glfuncs, GLenum target, GLuint index, GLboolean* data); -void gl3_3compat_glColorMaski(void *_glfuncs, GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); -void gl3_3compat_glCopyBufferSubData(void *_glfuncs, GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); -void gl3_3compat_glUniformBlockBinding(void *_glfuncs, GLuint program, GLuint v0, GLuint v1); -void gl3_3compat_glGetActiveUniformBlockName(void *_glfuncs, GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformBlockName); -void gl3_3compat_glGetActiveUniformBlockiv(void *_glfuncs, GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint* params); -GLuint gl3_3compat_glGetUniformBlockIndex(void *_glfuncs, GLuint program, const GLchar* uniformBlockName); -void gl3_3compat_glGetActiveUniformName(void *_glfuncs, GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformName); -void gl3_3compat_glGetActiveUniformsiv(void *_glfuncs, GLuint program, GLsizei uniformCount, const GLuint* uniformIndices, GLenum pname, GLint* params); -void gl3_3compat_glPrimitiveRestartIndex(void *_glfuncs, GLuint index); -void gl3_3compat_glTexBuffer(void *_glfuncs, GLenum target, GLenum internalFormat, GLuint buffer); -void gl3_3compat_glDrawElementsInstanced(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLsizei instancecount); -void gl3_3compat_glDrawArraysInstanced(void *_glfuncs, GLenum mode, GLint first, GLsizei count, GLsizei instancecount); -void gl3_3compat_glSampleMaski(void *_glfuncs, GLuint index, GLbitfield mask); -void gl3_3compat_glGetMultisamplefv(void *_glfuncs, GLenum pname, GLuint index, GLfloat* val); -void gl3_3compat_glTexImage3DMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); -void gl3_3compat_glTexImage2DMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); -void gl3_3compat_glGetSynciv(void *_glfuncs, GLsync sync, GLenum pname, GLsizei bufSize, GLsizei* length, GLint* values); -void gl3_3compat_glGetInteger64v(void *_glfuncs, GLenum pname, GLint64* params); -void gl3_3compat_glWaitSync(void *_glfuncs, GLsync sync, GLbitfield flags, GLuint64 timeout); -GLenum gl3_3compat_glClientWaitSync(void *_glfuncs, GLsync sync, GLbitfield flags, GLuint64 timeout); -void gl3_3compat_glDeleteSync(void *_glfuncs, GLsync sync); -GLboolean gl3_3compat_glIsSync(void *_glfuncs, GLsync sync); -GLsync gl3_3compat_glFenceSync(void *_glfuncs, GLenum condition, GLbitfield flags); -void gl3_3compat_glProvokingVertex(void *_glfuncs, GLenum mode); -void gl3_3compat_glDrawElementsInstancedBaseVertex(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLsizei instancecount, GLint basevertex); -void gl3_3compat_glDrawRangeElementsBaseVertex(void *_glfuncs, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum gltype, const GLvoid* indices, GLint basevertex); -void gl3_3compat_glDrawElementsBaseVertex(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLint basevertex); -void gl3_3compat_glFramebufferTexture(void *_glfuncs, GLenum target, GLenum attachment, GLuint texture, GLint level); -void gl3_3compat_glGetBufferParameteri64v(void *_glfuncs, GLenum target, GLenum pname, GLint64* params); -void gl3_3compat_glGetInteger64i_v(void *_glfuncs, GLenum target, GLuint index, GLint64* data); -void gl3_3compat_glVertexAttribP4uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value); -void gl3_3compat_glVertexAttribP4ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value); -void gl3_3compat_glVertexAttribP3uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value); -void gl3_3compat_glVertexAttribP3ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value); -void gl3_3compat_glVertexAttribP2uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value); -void gl3_3compat_glVertexAttribP2ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value); -void gl3_3compat_glVertexAttribP1uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value); -void gl3_3compat_glVertexAttribP1ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value); -void gl3_3compat_glSecondaryColorP3uiv(void *_glfuncs, GLenum gltype, const GLuint* color); -void gl3_3compat_glSecondaryColorP3ui(void *_glfuncs, GLenum gltype, GLuint color); -void gl3_3compat_glColorP4uiv(void *_glfuncs, GLenum gltype, const GLuint* color); -void gl3_3compat_glColorP4ui(void *_glfuncs, GLenum gltype, GLuint color); -void gl3_3compat_glColorP3uiv(void *_glfuncs, GLenum gltype, const GLuint* color); -void gl3_3compat_glColorP3ui(void *_glfuncs, GLenum gltype, GLuint color); -void gl3_3compat_glNormalP3uiv(void *_glfuncs, GLenum gltype, const GLuint* coords); -void gl3_3compat_glNormalP3ui(void *_glfuncs, GLenum gltype, GLuint coords); -void gl3_3compat_glMultiTexCoordP4uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords); -void gl3_3compat_glMultiTexCoordP4ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords); -void gl3_3compat_glMultiTexCoordP3uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords); -void gl3_3compat_glMultiTexCoordP3ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords); -void gl3_3compat_glMultiTexCoordP2uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords); -void gl3_3compat_glMultiTexCoordP2ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords); -void gl3_3compat_glMultiTexCoordP1uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords); -void gl3_3compat_glMultiTexCoordP1ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords); -void gl3_3compat_glTexCoordP4uiv(void *_glfuncs, GLenum gltype, const GLuint* coords); -void gl3_3compat_glTexCoordP4ui(void *_glfuncs, GLenum gltype, GLuint coords); -void gl3_3compat_glTexCoordP3uiv(void *_glfuncs, GLenum gltype, const GLuint* coords); -void gl3_3compat_glTexCoordP3ui(void *_glfuncs, GLenum gltype, GLuint coords); -void gl3_3compat_glTexCoordP2uiv(void *_glfuncs, GLenum gltype, const GLuint* coords); -void gl3_3compat_glTexCoordP2ui(void *_glfuncs, GLenum gltype, GLuint coords); -void gl3_3compat_glTexCoordP1uiv(void *_glfuncs, GLenum gltype, const GLuint* coords); -void gl3_3compat_glTexCoordP1ui(void *_glfuncs, GLenum gltype, GLuint coords); -void gl3_3compat_glVertexP4uiv(void *_glfuncs, GLenum gltype, const GLuint* value); -void gl3_3compat_glVertexP4ui(void *_glfuncs, GLenum gltype, GLuint value); -void gl3_3compat_glVertexP3uiv(void *_glfuncs, GLenum gltype, const GLuint* value); -void gl3_3compat_glVertexP3ui(void *_glfuncs, GLenum gltype, GLuint value); -void gl3_3compat_glVertexP2uiv(void *_glfuncs, GLenum gltype, const GLuint* value); -void gl3_3compat_glVertexP2ui(void *_glfuncs, GLenum gltype, GLuint value); -void gl3_3compat_glGetQueryObjectui64v(void *_glfuncs, GLuint id, GLenum pname, GLuint64* params); -void gl3_3compat_glGetQueryObjecti64v(void *_glfuncs, GLuint id, GLenum pname, GLint64* params); -void gl3_3compat_glQueryCounter(void *_glfuncs, GLuint id, GLenum target); -void gl3_3compat_glGetSamplerParameterIuiv(void *_glfuncs, GLuint sampler, GLenum pname, GLuint* params); -void gl3_3compat_glGetSamplerParameterfv(void *_glfuncs, GLuint sampler, GLenum pname, GLfloat* params); -void gl3_3compat_glGetSamplerParameterIiv(void *_glfuncs, GLuint sampler, GLenum pname, GLint* params); -void gl3_3compat_glGetSamplerParameteriv(void *_glfuncs, GLuint sampler, GLenum pname, GLint* params); -void gl3_3compat_glSamplerParameterIuiv(void *_glfuncs, GLuint sampler, GLenum pname, const GLuint* param); -void gl3_3compat_glSamplerParameterIiv(void *_glfuncs, GLuint sampler, GLenum pname, const GLint* param); -void gl3_3compat_glSamplerParameterfv(void *_glfuncs, GLuint sampler, GLenum pname, const GLfloat* param); -void gl3_3compat_glSamplerParameterf(void *_glfuncs, GLuint sampler, GLenum pname, GLfloat param); -void gl3_3compat_glSamplerParameteriv(void *_glfuncs, GLuint sampler, GLenum pname, const GLint* param); -void gl3_3compat_glSamplerParameteri(void *_glfuncs, GLuint sampler, GLenum pname, GLint param); -void gl3_3compat_glBindSampler(void *_glfuncs, GLuint unit, GLuint sampler); -GLboolean gl3_3compat_glIsSampler(void *_glfuncs, GLuint sampler); -void gl3_3compat_glDeleteSamplers(void *_glfuncs, GLsizei count, const GLuint* samplers); -void gl3_3compat_glGenSamplers(void *_glfuncs, GLsizei count, GLuint* samplers); -GLint gl3_3compat_glGetFragDataIndex(void *_glfuncs, GLuint program, const GLchar* name); -void gl3_3compat_glBindFragDataLocationIndexed(void *_glfuncs, GLuint program, GLuint colorNumber, GLuint index, const GLchar* name); -void gl3_3compat_glVertexAttribDivisor(void *_glfuncs, GLuint index, GLuint divisor); -void gl3_3compat_glTranslatef(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl3_3compat_glTranslated(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl3_3compat_glScalef(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl3_3compat_glScaled(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl3_3compat_glRotatef(void *_glfuncs, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); -void gl3_3compat_glRotated(void *_glfuncs, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); -void gl3_3compat_glPushMatrix(void *_glfuncs); -void gl3_3compat_glPopMatrix(void *_glfuncs); -void gl3_3compat_glOrtho(void *_glfuncs, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -void gl3_3compat_glMultMatrixd(void *_glfuncs, const GLdouble* m); -void gl3_3compat_glMultMatrixf(void *_glfuncs, const GLfloat* m); -void gl3_3compat_glMatrixMode(void *_glfuncs, GLenum mode); -void gl3_3compat_glLoadMatrixd(void *_glfuncs, const GLdouble* m); -void gl3_3compat_glLoadMatrixf(void *_glfuncs, const GLfloat* m); -void gl3_3compat_glLoadIdentity(void *_glfuncs); -void gl3_3compat_glFrustum(void *_glfuncs, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -GLboolean gl3_3compat_glIsList(void *_glfuncs, GLuint list); -void gl3_3compat_glGetTexGeniv(void *_glfuncs, GLenum coord, GLenum pname, GLint* params); -void gl3_3compat_glGetTexGenfv(void *_glfuncs, GLenum coord, GLenum pname, GLfloat* params); -void gl3_3compat_glGetTexGendv(void *_glfuncs, GLenum coord, GLenum pname, GLdouble* params); -void gl3_3compat_glGetTexEnviv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl3_3compat_glGetTexEnvfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl3_3compat_glGetPolygonStipple(void *_glfuncs, GLubyte* mask); -void gl3_3compat_glGetPixelMapusv(void *_glfuncs, GLenum glmap, GLushort* values); -void gl3_3compat_glGetPixelMapuiv(void *_glfuncs, GLenum glmap, GLuint* values); -void gl3_3compat_glGetPixelMapfv(void *_glfuncs, GLenum glmap, GLfloat* values); -void gl3_3compat_glGetMaterialiv(void *_glfuncs, GLenum face, GLenum pname, GLint* params); -void gl3_3compat_glGetMaterialfv(void *_glfuncs, GLenum face, GLenum pname, GLfloat* params); -void gl3_3compat_glGetMapiv(void *_glfuncs, GLenum target, GLenum query, GLint* v); -void gl3_3compat_glGetMapfv(void *_glfuncs, GLenum target, GLenum query, GLfloat* v); -void gl3_3compat_glGetMapdv(void *_glfuncs, GLenum target, GLenum query, GLdouble* v); -void gl3_3compat_glGetLightiv(void *_glfuncs, GLenum light, GLenum pname, GLint* params); -void gl3_3compat_glGetLightfv(void *_glfuncs, GLenum light, GLenum pname, GLfloat* params); -void gl3_3compat_glGetClipPlane(void *_glfuncs, GLenum plane, GLdouble* equation); -void gl3_3compat_glDrawPixels(void *_glfuncs, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl3_3compat_glCopyPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum gltype); -void gl3_3compat_glPixelMapusv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLushort* values); -void gl3_3compat_glPixelMapuiv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLuint* values); -void gl3_3compat_glPixelMapfv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLfloat* values); -void gl3_3compat_glPixelTransferi(void *_glfuncs, GLenum pname, GLint param); -void gl3_3compat_glPixelTransferf(void *_glfuncs, GLenum pname, GLfloat param); -void gl3_3compat_glPixelZoom(void *_glfuncs, GLfloat xfactor, GLfloat yfactor); -void gl3_3compat_glAlphaFunc(void *_glfuncs, GLenum glfunc, GLfloat ref); -void gl3_3compat_glEvalPoint2(void *_glfuncs, GLint i, GLint j); -void gl3_3compat_glEvalMesh2(void *_glfuncs, GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2); -void gl3_3compat_glEvalPoint1(void *_glfuncs, GLint i); -void gl3_3compat_glEvalMesh1(void *_glfuncs, GLenum mode, GLint i1, GLint i2); -void gl3_3compat_glEvalCoord2fv(void *_glfuncs, const GLfloat* u); -void gl3_3compat_glEvalCoord2f(void *_glfuncs, GLfloat u, GLfloat v); -void gl3_3compat_glEvalCoord2dv(void *_glfuncs, const GLdouble* u); -void gl3_3compat_glEvalCoord2d(void *_glfuncs, GLdouble u, GLdouble v); -void gl3_3compat_glEvalCoord1fv(void *_glfuncs, const GLfloat* u); -void gl3_3compat_glEvalCoord1f(void *_glfuncs, GLfloat u); -void gl3_3compat_glEvalCoord1dv(void *_glfuncs, const GLdouble* u); -void gl3_3compat_glEvalCoord1d(void *_glfuncs, GLdouble u); -void gl3_3compat_glMapGrid2f(void *_glfuncs, GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2); -void gl3_3compat_glMapGrid2d(void *_glfuncs, GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2); -void gl3_3compat_glMapGrid1f(void *_glfuncs, GLint un, GLfloat u1, GLfloat u2); -void gl3_3compat_glMapGrid1d(void *_glfuncs, GLint un, GLdouble u1, GLdouble u2); -void gl3_3compat_glMap2f(void *_glfuncs, GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat* points); -void gl3_3compat_glMap2d(void *_glfuncs, GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble* points); -void gl3_3compat_glMap1f(void *_glfuncs, GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat* points); -void gl3_3compat_glMap1d(void *_glfuncs, GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble* points); -void gl3_3compat_glPushAttrib(void *_glfuncs, GLbitfield mask); -void gl3_3compat_glPopAttrib(void *_glfuncs); -void gl3_3compat_glAccum(void *_glfuncs, GLenum op, GLfloat value); -void gl3_3compat_glIndexMask(void *_glfuncs, GLuint mask); -void gl3_3compat_glClearIndex(void *_glfuncs, GLfloat c); -void gl3_3compat_glClearAccum(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl3_3compat_glPushName(void *_glfuncs, GLuint name); -void gl3_3compat_glPopName(void *_glfuncs); -void gl3_3compat_glPassThrough(void *_glfuncs, GLfloat token); -void gl3_3compat_glLoadName(void *_glfuncs, GLuint name); -void gl3_3compat_glInitNames(void *_glfuncs); -GLint gl3_3compat_glRenderMode(void *_glfuncs, GLenum mode); -void gl3_3compat_glSelectBuffer(void *_glfuncs, GLsizei size, GLuint* buffer); -void gl3_3compat_glFeedbackBuffer(void *_glfuncs, GLsizei size, GLenum gltype, GLfloat* buffer); -void gl3_3compat_glTexGeniv(void *_glfuncs, GLenum coord, GLenum pname, const GLint* params); -void gl3_3compat_glTexGeni(void *_glfuncs, GLenum coord, GLenum pname, GLint param); -void gl3_3compat_glTexGenfv(void *_glfuncs, GLenum coord, GLenum pname, const GLfloat* params); -void gl3_3compat_glTexGenf(void *_glfuncs, GLenum coord, GLenum pname, GLfloat param); -void gl3_3compat_glTexGendv(void *_glfuncs, GLenum coord, GLenum pname, const GLdouble* params); -void gl3_3compat_glTexGend(void *_glfuncs, GLenum coord, GLenum pname, GLdouble param); -void gl3_3compat_glTexEnviv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl3_3compat_glTexEnvi(void *_glfuncs, GLenum target, GLenum pname, GLint param); -void gl3_3compat_glTexEnvfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params); -void gl3_3compat_glTexEnvf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param); -void gl3_3compat_glShadeModel(void *_glfuncs, GLenum mode); -void gl3_3compat_glPolygonStipple(void *_glfuncs, const GLubyte* mask); -void gl3_3compat_glMaterialiv(void *_glfuncs, GLenum face, GLenum pname, const GLint* params); -void gl3_3compat_glMateriali(void *_glfuncs, GLenum face, GLenum pname, GLint param); -void gl3_3compat_glMaterialfv(void *_glfuncs, GLenum face, GLenum pname, const GLfloat* params); -void gl3_3compat_glMaterialf(void *_glfuncs, GLenum face, GLenum pname, GLfloat param); -void gl3_3compat_glLineStipple(void *_glfuncs, GLint factor, GLushort pattern); -void gl3_3compat_glLightModeliv(void *_glfuncs, GLenum pname, const GLint* params); -void gl3_3compat_glLightModeli(void *_glfuncs, GLenum pname, GLint param); -void gl3_3compat_glLightModelfv(void *_glfuncs, GLenum pname, const GLfloat* params); -void gl3_3compat_glLightModelf(void *_glfuncs, GLenum pname, GLfloat param); -void gl3_3compat_glLightiv(void *_glfuncs, GLenum light, GLenum pname, const GLint* params); -void gl3_3compat_glLighti(void *_glfuncs, GLenum light, GLenum pname, GLint param); -void gl3_3compat_glLightfv(void *_glfuncs, GLenum light, GLenum pname, const GLfloat* params); -void gl3_3compat_glLightf(void *_glfuncs, GLenum light, GLenum pname, GLfloat param); -void gl3_3compat_glFogiv(void *_glfuncs, GLenum pname, const GLint* params); -void gl3_3compat_glFogi(void *_glfuncs, GLenum pname, GLint param); -void gl3_3compat_glFogfv(void *_glfuncs, GLenum pname, const GLfloat* params); -void gl3_3compat_glFogf(void *_glfuncs, GLenum pname, GLfloat param); -void gl3_3compat_glColorMaterial(void *_glfuncs, GLenum face, GLenum mode); -void gl3_3compat_glClipPlane(void *_glfuncs, GLenum plane, const GLdouble* equation); -void gl3_3compat_glVertex4sv(void *_glfuncs, const GLshort* v); -void gl3_3compat_glVertex4s(void *_glfuncs, GLshort x, GLshort y, GLshort z, GLshort w); -void gl3_3compat_glVertex4iv(void *_glfuncs, const GLint* v); -void gl3_3compat_glVertex4i(void *_glfuncs, GLint x, GLint y, GLint z, GLint w); -void gl3_3compat_glVertex4fv(void *_glfuncs, const GLfloat* v); -void gl3_3compat_glVertex4f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -void gl3_3compat_glVertex4dv(void *_glfuncs, const GLdouble* v); -void gl3_3compat_glVertex4d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -void gl3_3compat_glVertex3sv(void *_glfuncs, const GLshort* v); -void gl3_3compat_glVertex3s(void *_glfuncs, GLshort x, GLshort y, GLshort z); -void gl3_3compat_glVertex3iv(void *_glfuncs, const GLint* v); -void gl3_3compat_glVertex3i(void *_glfuncs, GLint x, GLint y, GLint z); -void gl3_3compat_glVertex3fv(void *_glfuncs, const GLfloat* v); -void gl3_3compat_glVertex3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl3_3compat_glVertex3dv(void *_glfuncs, const GLdouble* v); -void gl3_3compat_glVertex3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl3_3compat_glVertex2sv(void *_glfuncs, const GLshort* v); -void gl3_3compat_glVertex2s(void *_glfuncs, GLshort x, GLshort y); -void gl3_3compat_glVertex2iv(void *_glfuncs, const GLint* v); -void gl3_3compat_glVertex2i(void *_glfuncs, GLint x, GLint y); -void gl3_3compat_glVertex2fv(void *_glfuncs, const GLfloat* v); -void gl3_3compat_glVertex2f(void *_glfuncs, GLfloat x, GLfloat y); -void gl3_3compat_glVertex2dv(void *_glfuncs, const GLdouble* v); -void gl3_3compat_glVertex2d(void *_glfuncs, GLdouble x, GLdouble y); -void gl3_3compat_glTexCoord4sv(void *_glfuncs, const GLshort* v); -void gl3_3compat_glTexCoord4s(void *_glfuncs, GLshort s, GLshort t, GLshort r, GLshort q); -void gl3_3compat_glTexCoord4iv(void *_glfuncs, const GLint* v); -void gl3_3compat_glTexCoord4i(void *_glfuncs, GLint s, GLint t, GLint r, GLint q); -void gl3_3compat_glTexCoord4fv(void *_glfuncs, const GLfloat* v); -void gl3_3compat_glTexCoord4f(void *_glfuncs, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -void gl3_3compat_glTexCoord4dv(void *_glfuncs, const GLdouble* v); -void gl3_3compat_glTexCoord4d(void *_glfuncs, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -void gl3_3compat_glTexCoord3sv(void *_glfuncs, const GLshort* v); -void gl3_3compat_glTexCoord3s(void *_glfuncs, GLshort s, GLshort t, GLshort r); -void gl3_3compat_glTexCoord3iv(void *_glfuncs, const GLint* v); -void gl3_3compat_glTexCoord3i(void *_glfuncs, GLint s, GLint t, GLint r); -void gl3_3compat_glTexCoord3fv(void *_glfuncs, const GLfloat* v); -void gl3_3compat_glTexCoord3f(void *_glfuncs, GLfloat s, GLfloat t, GLfloat r); -void gl3_3compat_glTexCoord3dv(void *_glfuncs, const GLdouble* v); -void gl3_3compat_glTexCoord3d(void *_glfuncs, GLdouble s, GLdouble t, GLdouble r); -void gl3_3compat_glTexCoord2sv(void *_glfuncs, const GLshort* v); -void gl3_3compat_glTexCoord2s(void *_glfuncs, GLshort s, GLshort t); -void gl3_3compat_glTexCoord2iv(void *_glfuncs, const GLint* v); -void gl3_3compat_glTexCoord2i(void *_glfuncs, GLint s, GLint t); -void gl3_3compat_glTexCoord2fv(void *_glfuncs, const GLfloat* v); -void gl3_3compat_glTexCoord2f(void *_glfuncs, GLfloat s, GLfloat t); -void gl3_3compat_glTexCoord2dv(void *_glfuncs, const GLdouble* v); -void gl3_3compat_glTexCoord2d(void *_glfuncs, GLdouble s, GLdouble t); -void gl3_3compat_glTexCoord1sv(void *_glfuncs, const GLshort* v); -void gl3_3compat_glTexCoord1s(void *_glfuncs, GLshort s); -void gl3_3compat_glTexCoord1iv(void *_glfuncs, const GLint* v); -void gl3_3compat_glTexCoord1i(void *_glfuncs, GLint s); -void gl3_3compat_glTexCoord1fv(void *_glfuncs, const GLfloat* v); -void gl3_3compat_glTexCoord1f(void *_glfuncs, GLfloat s); -void gl3_3compat_glTexCoord1dv(void *_glfuncs, const GLdouble* v); -void gl3_3compat_glTexCoord1d(void *_glfuncs, GLdouble s); -void gl3_3compat_glRectsv(void *_glfuncs, const GLshort* v1, const GLshort* v2); -void gl3_3compat_glRects(void *_glfuncs, GLshort x1, GLshort y1, GLshort x2, GLshort y2); -void gl3_3compat_glRectiv(void *_glfuncs, const GLint* v1, const GLint* v2); -void gl3_3compat_glRecti(void *_glfuncs, GLint x1, GLint y1, GLint x2, GLint y2); -void gl3_3compat_glRectfv(void *_glfuncs, const GLfloat* v1, const GLfloat* v2); -void gl3_3compat_glRectf(void *_glfuncs, GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2); -void gl3_3compat_glRectdv(void *_glfuncs, const GLdouble* v1, const GLdouble* v2); -void gl3_3compat_glRectd(void *_glfuncs, GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2); -void gl3_3compat_glRasterPos4sv(void *_glfuncs, const GLshort* v); -void gl3_3compat_glRasterPos4s(void *_glfuncs, GLshort x, GLshort y, GLshort z, GLshort w); -void gl3_3compat_glRasterPos4iv(void *_glfuncs, const GLint* v); -void gl3_3compat_glRasterPos4i(void *_glfuncs, GLint x, GLint y, GLint z, GLint w); -void gl3_3compat_glRasterPos4fv(void *_glfuncs, const GLfloat* v); -void gl3_3compat_glRasterPos4f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -void gl3_3compat_glRasterPos4dv(void *_glfuncs, const GLdouble* v); -void gl3_3compat_glRasterPos4d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -void gl3_3compat_glRasterPos3sv(void *_glfuncs, const GLshort* v); -void gl3_3compat_glRasterPos3s(void *_glfuncs, GLshort x, GLshort y, GLshort z); -void gl3_3compat_glRasterPos3iv(void *_glfuncs, const GLint* v); -void gl3_3compat_glRasterPos3i(void *_glfuncs, GLint x, GLint y, GLint z); -void gl3_3compat_glRasterPos3fv(void *_glfuncs, const GLfloat* v); -void gl3_3compat_glRasterPos3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl3_3compat_glRasterPos3dv(void *_glfuncs, const GLdouble* v); -void gl3_3compat_glRasterPos3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl3_3compat_glRasterPos2sv(void *_glfuncs, const GLshort* v); -void gl3_3compat_glRasterPos2s(void *_glfuncs, GLshort x, GLshort y); -void gl3_3compat_glRasterPos2iv(void *_glfuncs, const GLint* v); -void gl3_3compat_glRasterPos2i(void *_glfuncs, GLint x, GLint y); -void gl3_3compat_glRasterPos2fv(void *_glfuncs, const GLfloat* v); -void gl3_3compat_glRasterPos2f(void *_glfuncs, GLfloat x, GLfloat y); -void gl3_3compat_glRasterPos2dv(void *_glfuncs, const GLdouble* v); -void gl3_3compat_glRasterPos2d(void *_glfuncs, GLdouble x, GLdouble y); -void gl3_3compat_glNormal3sv(void *_glfuncs, const GLshort* v); -void gl3_3compat_glNormal3s(void *_glfuncs, GLshort nx, GLshort ny, GLshort nz); -void gl3_3compat_glNormal3iv(void *_glfuncs, const GLint* v); -void gl3_3compat_glNormal3i(void *_glfuncs, GLint nx, GLint ny, GLint nz); -void gl3_3compat_glNormal3fv(void *_glfuncs, const GLfloat* v); -void gl3_3compat_glNormal3f(void *_glfuncs, GLfloat nx, GLfloat ny, GLfloat nz); -void gl3_3compat_glNormal3dv(void *_glfuncs, const GLdouble* v); -void gl3_3compat_glNormal3d(void *_glfuncs, GLdouble nx, GLdouble ny, GLdouble nz); -void gl3_3compat_glNormal3bv(void *_glfuncs, const GLbyte* v); -void gl3_3compat_glNormal3b(void *_glfuncs, GLbyte nx, GLbyte ny, GLbyte nz); -void gl3_3compat_glIndexsv(void *_glfuncs, const GLshort* c); -void gl3_3compat_glIndexs(void *_glfuncs, GLshort c); -void gl3_3compat_glIndexiv(void *_glfuncs, const GLint* c); -void gl3_3compat_glIndexi(void *_glfuncs, GLint c); -void gl3_3compat_glIndexfv(void *_glfuncs, const GLfloat* c); -void gl3_3compat_glIndexf(void *_glfuncs, GLfloat c); -void gl3_3compat_glIndexdv(void *_glfuncs, const GLdouble* c); -void gl3_3compat_glIndexd(void *_glfuncs, GLdouble c); -void gl3_3compat_glEnd(void *_glfuncs); -void gl3_3compat_glEdgeFlagv(void *_glfuncs, const GLboolean* flag); -void gl3_3compat_glEdgeFlag(void *_glfuncs, GLboolean flag); -void gl3_3compat_glColor4usv(void *_glfuncs, const GLushort* v); -void gl3_3compat_glColor4us(void *_glfuncs, GLushort red, GLushort green, GLushort blue, GLushort alpha); -void gl3_3compat_glColor4uiv(void *_glfuncs, const GLuint* v); -void gl3_3compat_glColor4ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue, GLuint alpha); -void gl3_3compat_glColor4ubv(void *_glfuncs, const GLubyte* v); -void gl3_3compat_glColor4ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha); -void gl3_3compat_glColor4sv(void *_glfuncs, const GLshort* v); -void gl3_3compat_glColor4s(void *_glfuncs, GLshort red, GLshort green, GLshort blue, GLshort alpha); -void gl3_3compat_glColor4iv(void *_glfuncs, const GLint* v); -void gl3_3compat_glColor4i(void *_glfuncs, GLint red, GLint green, GLint blue, GLint alpha); -void gl3_3compat_glColor4fv(void *_glfuncs, const GLfloat* v); -void gl3_3compat_glColor4f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl3_3compat_glColor4dv(void *_glfuncs, const GLdouble* v); -void gl3_3compat_glColor4d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha); -void gl3_3compat_glColor4bv(void *_glfuncs, const GLbyte* v); -void gl3_3compat_glColor4b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha); -void gl3_3compat_glColor3usv(void *_glfuncs, const GLushort* v); -void gl3_3compat_glColor3us(void *_glfuncs, GLushort red, GLushort green, GLushort blue); -void gl3_3compat_glColor3uiv(void *_glfuncs, const GLuint* v); -void gl3_3compat_glColor3ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue); -void gl3_3compat_glColor3ubv(void *_glfuncs, const GLubyte* v); -void gl3_3compat_glColor3ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue); -void gl3_3compat_glColor3sv(void *_glfuncs, const GLshort* v); -void gl3_3compat_glColor3s(void *_glfuncs, GLshort red, GLshort green, GLshort blue); -void gl3_3compat_glColor3iv(void *_glfuncs, const GLint* v); -void gl3_3compat_glColor3i(void *_glfuncs, GLint red, GLint green, GLint blue); -void gl3_3compat_glColor3fv(void *_glfuncs, const GLfloat* v); -void gl3_3compat_glColor3f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue); -void gl3_3compat_glColor3dv(void *_glfuncs, const GLdouble* v); -void gl3_3compat_glColor3d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue); -void gl3_3compat_glColor3bv(void *_glfuncs, const GLbyte* v); -void gl3_3compat_glColor3b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue); -void gl3_3compat_glBitmap(void *_glfuncs, GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte* bitmap); -void gl3_3compat_glBegin(void *_glfuncs, GLenum mode); -void gl3_3compat_glListBase(void *_glfuncs, GLuint base); -GLuint gl3_3compat_glGenLists(void *_glfuncs, GLsizei range_); -void gl3_3compat_glDeleteLists(void *_glfuncs, GLuint list, GLsizei range_); -void gl3_3compat_glCallLists(void *_glfuncs, GLsizei n, GLenum gltype, const GLvoid* lists); -void gl3_3compat_glCallList(void *_glfuncs, GLuint list); -void gl3_3compat_glEndList(void *_glfuncs); -void gl3_3compat_glNewList(void *_glfuncs, GLuint list, GLenum mode); -void gl3_3compat_glPushClientAttrib(void *_glfuncs, GLbitfield mask); -void gl3_3compat_glPopClientAttrib(void *_glfuncs); -void gl3_3compat_glPrioritizeTextures(void *_glfuncs, GLsizei n, const GLuint* textures, const GLfloat* priorities); -GLboolean gl3_3compat_glAreTexturesResident(void *_glfuncs, GLsizei n, const GLuint* textures, GLboolean* residences); -void gl3_3compat_glVertexPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl3_3compat_glTexCoordPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl3_3compat_glNormalPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl3_3compat_glInterleavedArrays(void *_glfuncs, GLenum format, GLsizei stride, const GLvoid* pointer); -void gl3_3compat_glIndexPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl3_3compat_glEnableClientState(void *_glfuncs, GLenum array); -void gl3_3compat_glEdgeFlagPointer(void *_glfuncs, GLsizei stride, const GLvoid* pointer); -void gl3_3compat_glDisableClientState(void *_glfuncs, GLenum array); -void gl3_3compat_glColorPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl3_3compat_glArrayElement(void *_glfuncs, GLint i); -void gl3_3compat_glResetMinmax(void *_glfuncs, GLenum target); -void gl3_3compat_glResetHistogram(void *_glfuncs, GLenum target); -void gl3_3compat_glMinmax(void *_glfuncs, GLenum target, GLenum internalFormat, GLboolean sink); -void gl3_3compat_glHistogram(void *_glfuncs, GLenum target, GLsizei width, GLenum internalFormat, GLboolean sink); -void gl3_3compat_glGetMinmaxParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl3_3compat_glGetMinmaxParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl3_3compat_glGetMinmax(void *_glfuncs, GLenum target, GLboolean reset, GLenum format, GLenum gltype, GLvoid* values); -void gl3_3compat_glGetHistogramParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl3_3compat_glGetHistogramParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl3_3compat_glGetHistogram(void *_glfuncs, GLenum target, GLboolean reset, GLenum format, GLenum gltype, GLvoid* values); -void gl3_3compat_glSeparableFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* row, const GLvoid* column); -void gl3_3compat_glGetSeparableFilter(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* row, GLvoid* column, GLvoid* span); -void gl3_3compat_glGetConvolutionParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl3_3compat_glGetConvolutionParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl3_3compat_glGetConvolutionFilter(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* image); -void gl3_3compat_glCopyConvolutionFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height); -void gl3_3compat_glCopyConvolutionFilter1D(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width); -void gl3_3compat_glConvolutionParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl3_3compat_glConvolutionParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint params); -void gl3_3compat_glConvolutionParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params); -void gl3_3compat_glConvolutionParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat params); -void gl3_3compat_glConvolutionFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* image); -void gl3_3compat_glConvolutionFilter1D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum gltype, const GLvoid* image); -void gl3_3compat_glCopyColorSubTable(void *_glfuncs, GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); -void gl3_3compat_glColorSubTable(void *_glfuncs, GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum gltype, const GLvoid* data); -void gl3_3compat_glGetColorTableParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl3_3compat_glGetColorTableParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl3_3compat_glGetColorTable(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* table); -void gl3_3compat_glCopyColorTable(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width); -void gl3_3compat_glColorTableParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl3_3compat_glColorTableParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params); -void gl3_3compat_glColorTable(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum gltype, const GLvoid* table); -void gl3_3compat_glMultTransposeMatrixd(void *_glfuncs, const GLdouble* m); -void gl3_3compat_glMultTransposeMatrixf(void *_glfuncs, const GLfloat* m); -void gl3_3compat_glLoadTransposeMatrixd(void *_glfuncs, const GLdouble* m); -void gl3_3compat_glLoadTransposeMatrixf(void *_glfuncs, const GLfloat* m); -void gl3_3compat_glMultiTexCoord4sv(void *_glfuncs, GLenum target, const GLshort* v); -void gl3_3compat_glMultiTexCoord4s(void *_glfuncs, GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); -void gl3_3compat_glMultiTexCoord4iv(void *_glfuncs, GLenum target, const GLint* v); -void gl3_3compat_glMultiTexCoord4i(void *_glfuncs, GLenum target, GLint s, GLint t, GLint r, GLint q); -void gl3_3compat_glMultiTexCoord4fv(void *_glfuncs, GLenum target, const GLfloat* v); -void gl3_3compat_glMultiTexCoord4f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -void gl3_3compat_glMultiTexCoord4dv(void *_glfuncs, GLenum target, const GLdouble* v); -void gl3_3compat_glMultiTexCoord4d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -void gl3_3compat_glMultiTexCoord3sv(void *_glfuncs, GLenum target, const GLshort* v); -void gl3_3compat_glMultiTexCoord3s(void *_glfuncs, GLenum target, GLshort s, GLshort t, GLshort r); -void gl3_3compat_glMultiTexCoord3iv(void *_glfuncs, GLenum target, const GLint* v); -void gl3_3compat_glMultiTexCoord3i(void *_glfuncs, GLenum target, GLint s, GLint t, GLint r); -void gl3_3compat_glMultiTexCoord3fv(void *_glfuncs, GLenum target, const GLfloat* v); -void gl3_3compat_glMultiTexCoord3f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t, GLfloat r); -void gl3_3compat_glMultiTexCoord3dv(void *_glfuncs, GLenum target, const GLdouble* v); -void gl3_3compat_glMultiTexCoord3d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t, GLdouble r); -void gl3_3compat_glMultiTexCoord2sv(void *_glfuncs, GLenum target, const GLshort* v); -void gl3_3compat_glMultiTexCoord2s(void *_glfuncs, GLenum target, GLshort s, GLshort t); -void gl3_3compat_glMultiTexCoord2iv(void *_glfuncs, GLenum target, const GLint* v); -void gl3_3compat_glMultiTexCoord2i(void *_glfuncs, GLenum target, GLint s, GLint t); -void gl3_3compat_glMultiTexCoord2fv(void *_glfuncs, GLenum target, const GLfloat* v); -void gl3_3compat_glMultiTexCoord2f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t); -void gl3_3compat_glMultiTexCoord2dv(void *_glfuncs, GLenum target, const GLdouble* v); -void gl3_3compat_glMultiTexCoord2d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t); -void gl3_3compat_glMultiTexCoord1sv(void *_glfuncs, GLenum target, const GLshort* v); -void gl3_3compat_glMultiTexCoord1s(void *_glfuncs, GLenum target, GLshort s); -void gl3_3compat_glMultiTexCoord1iv(void *_glfuncs, GLenum target, const GLint* v); -void gl3_3compat_glMultiTexCoord1i(void *_glfuncs, GLenum target, GLint s); -void gl3_3compat_glMultiTexCoord1fv(void *_glfuncs, GLenum target, const GLfloat* v); -void gl3_3compat_glMultiTexCoord1f(void *_glfuncs, GLenum target, GLfloat s); -void gl3_3compat_glMultiTexCoord1dv(void *_glfuncs, GLenum target, const GLdouble* v); -void gl3_3compat_glMultiTexCoord1d(void *_glfuncs, GLenum target, GLdouble s); -void gl3_3compat_glClientActiveTexture(void *_glfuncs, GLenum texture); -void gl3_3compat_glWindowPos3sv(void *_glfuncs, const GLshort* v); -void gl3_3compat_glWindowPos3s(void *_glfuncs, GLshort x, GLshort y, GLshort z); -void gl3_3compat_glWindowPos3iv(void *_glfuncs, const GLint* v); -void gl3_3compat_glWindowPos3i(void *_glfuncs, GLint x, GLint y, GLint z); -void gl3_3compat_glWindowPos3fv(void *_glfuncs, const GLfloat* v); -void gl3_3compat_glWindowPos3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl3_3compat_glWindowPos3dv(void *_glfuncs, const GLdouble* v); -void gl3_3compat_glWindowPos3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl3_3compat_glWindowPos2sv(void *_glfuncs, const GLshort* v); -void gl3_3compat_glWindowPos2s(void *_glfuncs, GLshort x, GLshort y); -void gl3_3compat_glWindowPos2iv(void *_glfuncs, const GLint* v); -void gl3_3compat_glWindowPos2i(void *_glfuncs, GLint x, GLint y); -void gl3_3compat_glWindowPos2fv(void *_glfuncs, const GLfloat* v); -void gl3_3compat_glWindowPos2f(void *_glfuncs, GLfloat x, GLfloat y); -void gl3_3compat_glWindowPos2dv(void *_glfuncs, const GLdouble* v); -void gl3_3compat_glWindowPos2d(void *_glfuncs, GLdouble x, GLdouble y); -void gl3_3compat_glSecondaryColorPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl3_3compat_glSecondaryColor3usv(void *_glfuncs, const GLushort* v); -void gl3_3compat_glSecondaryColor3us(void *_glfuncs, GLushort red, GLushort green, GLushort blue); -void gl3_3compat_glSecondaryColor3uiv(void *_glfuncs, const GLuint* v); -void gl3_3compat_glSecondaryColor3ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue); -void gl3_3compat_glSecondaryColor3ubv(void *_glfuncs, const GLubyte* v); -void gl3_3compat_glSecondaryColor3ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue); -void gl3_3compat_glSecondaryColor3sv(void *_glfuncs, const GLshort* v); -void gl3_3compat_glSecondaryColor3s(void *_glfuncs, GLshort red, GLshort green, GLshort blue); -void gl3_3compat_glSecondaryColor3iv(void *_glfuncs, const GLint* v); -void gl3_3compat_glSecondaryColor3i(void *_glfuncs, GLint red, GLint green, GLint blue); -void gl3_3compat_glSecondaryColor3fv(void *_glfuncs, const GLfloat* v); -void gl3_3compat_glSecondaryColor3f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue); -void gl3_3compat_glSecondaryColor3dv(void *_glfuncs, const GLdouble* v); -void gl3_3compat_glSecondaryColor3d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue); -void gl3_3compat_glSecondaryColor3bv(void *_glfuncs, const GLbyte* v); -void gl3_3compat_glSecondaryColor3b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue); -void gl3_3compat_glFogCoordPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl3_3compat_glFogCoorddv(void *_glfuncs, const GLdouble* coord); -void gl3_3compat_glFogCoordd(void *_glfuncs, GLdouble coord); -void gl3_3compat_glFogCoordfv(void *_glfuncs, const GLfloat* coord); -void gl3_3compat_glFogCoordf(void *_glfuncs, GLfloat coord); -void gl3_3compat_glVertexAttrib4usv(void *_glfuncs, GLuint index, const GLushort* v); -void gl3_3compat_glVertexAttrib4uiv(void *_glfuncs, GLuint index, const GLuint* v); -void gl3_3compat_glVertexAttrib4ubv(void *_glfuncs, GLuint index, const GLubyte* v); -void gl3_3compat_glVertexAttrib4sv(void *_glfuncs, GLuint index, const GLshort* v); -void gl3_3compat_glVertexAttrib4s(void *_glfuncs, GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -void gl3_3compat_glVertexAttrib4iv(void *_glfuncs, GLuint index, const GLint* v); -void gl3_3compat_glVertexAttrib4fv(void *_glfuncs, GLuint index, const GLfloat* v); -void gl3_3compat_glVertexAttrib4f(void *_glfuncs, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -void gl3_3compat_glVertexAttrib4dv(void *_glfuncs, GLuint index, const GLdouble* v); -void gl3_3compat_glVertexAttrib4d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -void gl3_3compat_glVertexAttrib4bv(void *_glfuncs, GLuint index, const GLbyte* v); -void gl3_3compat_glVertexAttrib4Nusv(void *_glfuncs, GLuint index, const GLushort* v); -void gl3_3compat_glVertexAttrib4Nuiv(void *_glfuncs, GLuint index, const GLuint* v); -void gl3_3compat_glVertexAttrib4Nubv(void *_glfuncs, GLuint index, const GLubyte* v); -void gl3_3compat_glVertexAttrib4Nub(void *_glfuncs, GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -void gl3_3compat_glVertexAttrib4Nsv(void *_glfuncs, GLuint index, const GLshort* v); -void gl3_3compat_glVertexAttrib4Niv(void *_glfuncs, GLuint index, const GLint* v); -void gl3_3compat_glVertexAttrib4Nbv(void *_glfuncs, GLuint index, const GLbyte* v); -void gl3_3compat_glVertexAttrib3sv(void *_glfuncs, GLuint index, const GLshort* v); -void gl3_3compat_glVertexAttrib3s(void *_glfuncs, GLuint index, GLshort x, GLshort y, GLshort z); -void gl3_3compat_glVertexAttrib3fv(void *_glfuncs, GLuint index, const GLfloat* v); -void gl3_3compat_glVertexAttrib3f(void *_glfuncs, GLuint index, GLfloat x, GLfloat y, GLfloat z); -void gl3_3compat_glVertexAttrib3dv(void *_glfuncs, GLuint index, const GLdouble* v); -void gl3_3compat_glVertexAttrib3d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y, GLdouble z); -void gl3_3compat_glVertexAttrib2sv(void *_glfuncs, GLuint index, const GLshort* v); -void gl3_3compat_glVertexAttrib2s(void *_glfuncs, GLuint index, GLshort x, GLshort y); -void gl3_3compat_glVertexAttrib2fv(void *_glfuncs, GLuint index, const GLfloat* v); -void gl3_3compat_glVertexAttrib2f(void *_glfuncs, GLuint index, GLfloat x, GLfloat y); -void gl3_3compat_glVertexAttrib2dv(void *_glfuncs, GLuint index, const GLdouble* v); -void gl3_3compat_glVertexAttrib2d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y); -void gl3_3compat_glVertexAttrib1sv(void *_glfuncs, GLuint index, const GLshort* v); -void gl3_3compat_glVertexAttrib1s(void *_glfuncs, GLuint index, GLshort x); -void gl3_3compat_glVertexAttrib1fv(void *_glfuncs, GLuint index, const GLfloat* v); -void gl3_3compat_glVertexAttrib1f(void *_glfuncs, GLuint index, GLfloat x); -void gl3_3compat_glVertexAttrib1dv(void *_glfuncs, GLuint index, const GLdouble* v); -void gl3_3compat_glVertexAttrib1d(void *_glfuncs, GLuint index, GLdouble x); -void gl3_3compat_glVertexAttribI4usv(void *_glfuncs, GLuint index, const GLushort* v); -void gl3_3compat_glVertexAttribI4ubv(void *_glfuncs, GLuint index, const GLubyte* v); -void gl3_3compat_glVertexAttribI4sv(void *_glfuncs, GLuint index, const GLshort* v); -void gl3_3compat_glVertexAttribI4bv(void *_glfuncs, GLuint index, const GLbyte* v); -void gl3_3compat_glVertexAttribI4uiv(void *_glfuncs, GLuint index, const GLuint* v); -void gl3_3compat_glVertexAttribI3uiv(void *_glfuncs, GLuint index, const GLuint* v); -void gl3_3compat_glVertexAttribI2uiv(void *_glfuncs, GLuint index, const GLuint* v); -void gl3_3compat_glVertexAttribI1uiv(void *_glfuncs, GLuint index, const GLuint* v); -void gl3_3compat_glVertexAttribI4iv(void *_glfuncs, GLuint index, const GLint* v); -void gl3_3compat_glVertexAttribI3iv(void *_glfuncs, GLuint index, const GLint* v); -void gl3_3compat_glVertexAttribI2iv(void *_glfuncs, GLuint index, const GLint* v); -void gl3_3compat_glVertexAttribI1iv(void *_glfuncs, GLuint index, const GLint* v); -void gl3_3compat_glVertexAttribI4ui(void *_glfuncs, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -void gl3_3compat_glVertexAttribI3ui(void *_glfuncs, GLuint index, GLuint x, GLuint y, GLuint z); -void gl3_3compat_glVertexAttribI2ui(void *_glfuncs, GLuint index, GLuint x, GLuint y); -void gl3_3compat_glVertexAttribI1ui(void *_glfuncs, GLuint index, GLuint x); -void gl3_3compat_glVertexAttribI4i(void *_glfuncs, GLuint index, GLint x, GLint y, GLint z, GLint w); -void gl3_3compat_glVertexAttribI3i(void *_glfuncs, GLuint index, GLint x, GLint y, GLint z); -void gl3_3compat_glVertexAttribI2i(void *_glfuncs, GLuint index, GLint x, GLint y); -void gl3_3compat_glVertexAttribI1i(void *_glfuncs, GLuint index, GLint x); - - -#ifdef __cplusplus -} // extern "C" -#endif diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/3.3compat/gl.go b/Godeps/_workspace/src/github.com/obscuren/qml/gl/3.3compat/gl.go deleted file mode 100644 index 8772aa9bc6..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/3.3compat/gl.go +++ /dev/null @@ -1,8281 +0,0 @@ -// ** file automatically generated by glgen -- do not edit manually ** - -package GL - -// #cgo CXXFLAGS: -std=c++0x -pedantic-errors -Wall -fno-strict-aliasing -// #cgo LDFLAGS: -lstdc++ -// #cgo pkg-config: Qt5Core Qt5OpenGL -// -// #include "funcs.h" -// -// void free(void*); -// -import "C" - -import ( - "fmt" - "reflect" - "unsafe" - - "gopkg.in/qml.v1/gl/glbase" -) - -// API returns a value that offers methods matching the OpenGL version 3.3 API. -// -// The returned API must not be used after the provided OpenGL context becomes invalid. -func API(context glbase.Contexter) *GL { - gl := &GL{} - gl.funcs = C.gl3_3compat_funcs() - if gl.funcs == nil { - panic(fmt.Errorf("OpenGL version 3.3 is not available")) - } - return gl -} - -// GL implements the OpenGL version 3.3 API. Values of this -// type must be created via the API function, and it must not be used after -// the associated OpenGL context becomes invalid. -type GL struct { - funcs unsafe.Pointer -} - -const ( - FALSE = 0 - TRUE = 1 - NONE = 0 - - BYTE = 0x1400 - UNSIGNED_BYTE = 0x1401 - SHORT = 0x1402 - UNSIGNED_SHORT = 0x1403 - INT = 0x1404 - UNSIGNED_INT = 0x1405 - FLOAT = 0x1406 - N2_BYTES = 0x1407 - N3_BYTES = 0x1408 - N4_BYTES = 0x1409 - DOUBLE = 0x140A - HALF_FLOAT = 0x140B - - ACCUM = 0x0100 - LOAD = 0x0101 - RETURN = 0x0102 - MULT = 0x0103 - ADD = 0x0104 - - ACCUM_BUFFER_BIT = 0x00000200 - ALL_ATTRIB_BITS = 0xFFFFFFFF - COLOR_BUFFER_BIT = 0x00004000 - CURRENT_BIT = 0x00000001 - DEPTH_BUFFER_BIT = 0x00000100 - ENABLE_BIT = 0x00002000 - EVAL_BIT = 0x00010000 - FOG_BIT = 0x00000080 - HINT_BIT = 0x00008000 - LIGHTING_BIT = 0x00000040 - LINE_BIT = 0x00000004 - LIST_BIT = 0x00020000 - MULTISAMPLE_BIT = 0x20000000 - PIXEL_MODE_BIT = 0x00000020 - POINT_BIT = 0x00000002 - POLYGON_BIT = 0x00000008 - POLYGON_STIPPLE_BIT = 0x00000010 - SCISSOR_BIT = 0x00080000 - STENCIL_BUFFER_BIT = 0x00000400 - TEXTURE_BIT = 0x00040000 - TRANSFORM_BIT = 0x00001000 - VIEWPORT_BIT = 0x00000800 - - ALWAYS = 0x0207 - EQUAL = 0x0202 - GEQUAL = 0x0206 - GREATER = 0x0204 - LEQUAL = 0x0203 - LESS = 0x0201 - NEVER = 0x0200 - NOTEQUAL = 0x0205 - - LOGIC_OP = 0x0BF1 - - DST_ALPHA = 0x0304 - ONE = 1 - ONE_MINUS_DST_ALPHA = 0x0305 - ONE_MINUS_SRC_ALPHA = 0x0303 - ONE_MINUS_SRC_COLOR = 0x0301 - SRC_ALPHA = 0x0302 - SRC_COLOR = 0x0300 - ZERO = 0 - - DST_COLOR = 0x0306 - ONE_MINUS_DST_COLOR = 0x0307 - SRC_ALPHA_SATURATE = 0x0308 - - CLIENT_ALL_ATTRIB_BITS = 0xFFFFFFFF - CLIENT_PIXEL_STORE_BIT = 0x00000001 - CLIENT_VERTEX_ARRAY_BIT = 0x00000002 - - CLIP_DISTANCE0 = 0x3000 - CLIP_DISTANCE1 = 0x3001 - CLIP_DISTANCE2 = 0x3002 - CLIP_DISTANCE3 = 0x3003 - CLIP_DISTANCE4 = 0x3004 - CLIP_DISTANCE5 = 0x3005 - CLIP_DISTANCE6 = 0x3006 - CLIP_DISTANCE7 = 0x3007 - CLIP_PLANE0 = 0x3000 - CLIP_PLANE1 = 0x3001 - CLIP_PLANE2 = 0x3002 - CLIP_PLANE3 = 0x3003 - CLIP_PLANE4 = 0x3004 - CLIP_PLANE5 = 0x3005 - - BACK = 0x0405 - FRONT = 0x0404 - FRONT_AND_BACK = 0x0408 - - AMBIENT = 0x1200 - AMBIENT_AND_DIFFUSE = 0x1602 - DIFFUSE = 0x1201 - EMISSION = 0x1600 - SPECULAR = 0x1202 - - CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT = 0x00000001 - - CONTEXT_COMPATIBILITY_PROFILE_BIT = 0x00000002 - CONTEXT_CORE_PROFILE_BIT = 0x00000001 - - AUX0 = 0x0409 - AUX1 = 0x040A - AUX2 = 0x040B - AUX3 = 0x040C - BACK_LEFT = 0x0402 - BACK_RIGHT = 0x0403 - FRONT_LEFT = 0x0400 - FRONT_RIGHT = 0x0401 - LEFT = 0x0406 - RIGHT = 0x0407 - - ALPHA_TEST = 0x0BC0 - AUTO_NORMAL = 0x0D80 - BLEND = 0x0BE2 - COLOR_ARRAY = 0x8076 - COLOR_LOGIC_OP = 0x0BF2 - COLOR_MATERIAL = 0x0B57 - CULL_FACE = 0x0B44 - DEPTH_TEST = 0x0B71 - DITHER = 0x0BD0 - EDGE_FLAG_ARRAY = 0x8079 - FOG = 0x0B60 - INDEX_ARRAY = 0x8077 - INDEX_LOGIC_OP = 0x0BF1 - LIGHT0 = 0x4000 - LIGHT1 = 0x4001 - LIGHT2 = 0x4002 - LIGHT3 = 0x4003 - LIGHT4 = 0x4004 - LIGHT5 = 0x4005 - LIGHT6 = 0x4006 - LIGHT7 = 0x4007 - LIGHTING = 0x0B50 - LINE_SMOOTH = 0x0B20 - LINE_STIPPLE = 0x0B24 - MAP1_COLOR_4 = 0x0D90 - MAP1_INDEX = 0x0D91 - MAP1_NORMAL = 0x0D92 - MAP1_TEXTURE_COORD_1 = 0x0D93 - MAP1_TEXTURE_COORD_2 = 0x0D94 - MAP1_TEXTURE_COORD_3 = 0x0D95 - MAP1_TEXTURE_COORD_4 = 0x0D96 - MAP1_VERTEX_3 = 0x0D97 - MAP1_VERTEX_4 = 0x0D98 - MAP2_COLOR_4 = 0x0DB0 - MAP2_INDEX = 0x0DB1 - MAP2_NORMAL = 0x0DB2 - MAP2_TEXTURE_COORD_1 = 0x0DB3 - MAP2_TEXTURE_COORD_2 = 0x0DB4 - MAP2_TEXTURE_COORD_3 = 0x0DB5 - MAP2_TEXTURE_COORD_4 = 0x0DB6 - MAP2_VERTEX_3 = 0x0DB7 - MAP2_VERTEX_4 = 0x0DB8 - NORMALIZE = 0x0BA1 - NORMAL_ARRAY = 0x8075 - POINT_SMOOTH = 0x0B10 - POLYGON_OFFSET_FILL = 0x8037 - POLYGON_OFFSET_LINE = 0x2A02 - POLYGON_OFFSET_POINT = 0x2A01 - POLYGON_SMOOTH = 0x0B41 - POLYGON_STIPPLE = 0x0B42 - SCISSOR_TEST = 0x0C11 - STENCIL_TEST = 0x0B90 - TEXTURE_1D = 0x0DE0 - TEXTURE_2D = 0x0DE1 - TEXTURE_COORD_ARRAY = 0x8078 - TEXTURE_GEN_Q = 0x0C63 - TEXTURE_GEN_R = 0x0C62 - TEXTURE_GEN_S = 0x0C60 - TEXTURE_GEN_T = 0x0C61 - VERTEX_ARRAY = 0x8074 - - INVALID_ENUM = 0x0500 - INVALID_FRAMEBUFFER_OPERATION = 0x0506 - INVALID_OPERATION = 0x0502 - INVALID_VALUE = 0x0501 - NO_ERROR = 0 - OUT_OF_MEMORY = 0x0505 - STACK_OVERFLOW = 0x0503 - STACK_UNDERFLOW = 0x0504 - - N2D = 0x0600 - N3D = 0x0601 - N3D_COLOR = 0x0602 - N3D_COLOR_TEXTURE = 0x0603 - N4D_COLOR_TEXTURE = 0x0604 - - BITMAP_TOKEN = 0x0704 - COPY_PIXEL_TOKEN = 0x0706 - DRAW_PIXEL_TOKEN = 0x0705 - LINE_RESET_TOKEN = 0x0707 - LINE_TOKEN = 0x0702 - PASS_THROUGH_TOKEN = 0x0700 - POINT_TOKEN = 0x0701 - POLYGON_TOKEN = 0x0703 - - EXP = 0x0800 - EXP2 = 0x0801 - LINEAR = 0x2601 - - FOG_COLOR = 0x0B66 - FOG_DENSITY = 0x0B62 - FOG_END = 0x0B64 - FOG_INDEX = 0x0B61 - FOG_MODE = 0x0B65 - FOG_START = 0x0B63 - - CCW = 0x0901 - CW = 0x0900 - - COEFF = 0x0A00 - DOMAIN = 0x0A02 - ORDER = 0x0A01 - - PIXEL_MAP_A_TO_A = 0x0C79 - PIXEL_MAP_B_TO_B = 0x0C78 - PIXEL_MAP_G_TO_G = 0x0C77 - PIXEL_MAP_I_TO_A = 0x0C75 - PIXEL_MAP_I_TO_B = 0x0C74 - PIXEL_MAP_I_TO_G = 0x0C73 - PIXEL_MAP_I_TO_I = 0x0C70 - PIXEL_MAP_I_TO_R = 0x0C72 - PIXEL_MAP_R_TO_R = 0x0C76 - PIXEL_MAP_S_TO_S = 0x0C71 - - ACCUM_ALPHA_BITS = 0x0D5B - ACCUM_BLUE_BITS = 0x0D5A - ACCUM_CLEAR_VALUE = 0x0B80 - ACCUM_GREEN_BITS = 0x0D59 - ACCUM_RED_BITS = 0x0D58 - ALIASED_LINE_WIDTH_RANGE = 0x846E - ALIASED_POINT_SIZE_RANGE = 0x846D - ALPHA_BIAS = 0x0D1D - ALPHA_BITS = 0x0D55 - ALPHA_SCALE = 0x0D1C - ALPHA_TEST_FUNC = 0x0BC1 - ALPHA_TEST_REF = 0x0BC2 - ATTRIB_STACK_DEPTH = 0x0BB0 - AUX_BUFFERS = 0x0C00 - BLEND_DST = 0x0BE0 - BLEND_SRC = 0x0BE1 - BLUE_BIAS = 0x0D1B - BLUE_BITS = 0x0D54 - BLUE_SCALE = 0x0D1A - CLIENT_ATTRIB_STACK_DEPTH = 0x0BB1 - COLOR_ARRAY_SIZE = 0x8081 - COLOR_ARRAY_STRIDE = 0x8083 - COLOR_ARRAY_TYPE = 0x8082 - COLOR_CLEAR_VALUE = 0x0C22 - COLOR_MATERIAL_FACE = 0x0B55 - COLOR_MATERIAL_PARAMETER = 0x0B56 - COLOR_WRITEMASK = 0x0C23 - CULL_FACE_MODE = 0x0B45 - CURRENT_COLOR = 0x0B00 - CURRENT_INDEX = 0x0B01 - CURRENT_NORMAL = 0x0B02 - CURRENT_RASTER_COLOR = 0x0B04 - CURRENT_RASTER_DISTANCE = 0x0B09 - CURRENT_RASTER_INDEX = 0x0B05 - CURRENT_RASTER_POSITION = 0x0B07 - CURRENT_RASTER_POSITION_VALID = 0x0B08 - CURRENT_RASTER_TEXTURE_COORDS = 0x0B06 - CURRENT_TEXTURE_COORDS = 0x0B03 - DEPTH_BIAS = 0x0D1F - DEPTH_BITS = 0x0D56 - DEPTH_CLEAR_VALUE = 0x0B73 - DEPTH_FUNC = 0x0B74 - DEPTH_RANGE = 0x0B70 - DEPTH_SCALE = 0x0D1E - DEPTH_WRITEMASK = 0x0B72 - DOUBLEBUFFER = 0x0C32 - DRAW_BUFFER = 0x0C01 - EDGE_FLAG = 0x0B43 - EDGE_FLAG_ARRAY_STRIDE = 0x808C - FEEDBACK_BUFFER_SIZE = 0x0DF1 - FEEDBACK_BUFFER_TYPE = 0x0DF2 - FOG_HINT = 0x0C54 - FRONT_FACE = 0x0B46 - GREEN_BIAS = 0x0D19 - GREEN_BITS = 0x0D53 - GREEN_SCALE = 0x0D18 - INDEX_ARRAY_STRIDE = 0x8086 - INDEX_ARRAY_TYPE = 0x8085 - INDEX_BITS = 0x0D51 - INDEX_CLEAR_VALUE = 0x0C20 - INDEX_MODE = 0x0C30 - INDEX_OFFSET = 0x0D13 - INDEX_SHIFT = 0x0D12 - INDEX_WRITEMASK = 0x0C21 - LIGHT_MODEL_AMBIENT = 0x0B53 - LIGHT_MODEL_COLOR_CONTROL = 0x81F8 - LIGHT_MODEL_LOCAL_VIEWER = 0x0B51 - LIGHT_MODEL_TWO_SIDE = 0x0B52 - LINE_SMOOTH_HINT = 0x0C52 - LINE_STIPPLE_PATTERN = 0x0B25 - LINE_STIPPLE_REPEAT = 0x0B26 - LINE_WIDTH = 0x0B21 - LINE_WIDTH_GRANULARITY = 0x0B23 - LINE_WIDTH_RANGE = 0x0B22 - LIST_BASE = 0x0B32 - LIST_INDEX = 0x0B33 - LIST_MODE = 0x0B30 - LOGIC_OP_MODE = 0x0BF0 - MAP1_GRID_DOMAIN = 0x0DD0 - MAP1_GRID_SEGMENTS = 0x0DD1 - MAP2_GRID_DOMAIN = 0x0DD2 - MAP2_GRID_SEGMENTS = 0x0DD3 - MAP_COLOR = 0x0D10 - MAP_STENCIL = 0x0D11 - MATRIX_MODE = 0x0BA0 - MAX_ATTRIB_STACK_DEPTH = 0x0D35 - MAX_CLIENT_ATTRIB_STACK_DEPTH = 0x0D3B - MAX_CLIP_DISTANCES = 0x0D32 - MAX_CLIP_PLANES = 0x0D32 - MAX_EVAL_ORDER = 0x0D30 - MAX_LIGHTS = 0x0D31 - MAX_LIST_NESTING = 0x0B31 - MAX_MODELVIEW_STACK_DEPTH = 0x0D36 - MAX_NAME_STACK_DEPTH = 0x0D37 - MAX_PIXEL_MAP_TABLE = 0x0D34 - MAX_PROJECTION_STACK_DEPTH = 0x0D38 - MAX_TEXTURE_SIZE = 0x0D33 - MAX_TEXTURE_STACK_DEPTH = 0x0D39 - MAX_VIEWPORT_DIMS = 0x0D3A - MODELVIEW_MATRIX = 0x0BA6 - MODELVIEW_STACK_DEPTH = 0x0BA3 - NAME_STACK_DEPTH = 0x0D70 - NORMAL_ARRAY_STRIDE = 0x807F - NORMAL_ARRAY_TYPE = 0x807E - PACK_ALIGNMENT = 0x0D05 - PACK_LSB_FIRST = 0x0D01 - PACK_ROW_LENGTH = 0x0D02 - PACK_SKIP_PIXELS = 0x0D04 - PACK_SKIP_ROWS = 0x0D03 - PACK_SWAP_BYTES = 0x0D00 - PERSPECTIVE_CORRECTION_HINT = 0x0C50 - PIXEL_MAP_A_TO_A_SIZE = 0x0CB9 - PIXEL_MAP_B_TO_B_SIZE = 0x0CB8 - PIXEL_MAP_G_TO_G_SIZE = 0x0CB7 - PIXEL_MAP_I_TO_A_SIZE = 0x0CB5 - PIXEL_MAP_I_TO_B_SIZE = 0x0CB4 - PIXEL_MAP_I_TO_G_SIZE = 0x0CB3 - PIXEL_MAP_I_TO_I_SIZE = 0x0CB0 - PIXEL_MAP_I_TO_R_SIZE = 0x0CB2 - PIXEL_MAP_R_TO_R_SIZE = 0x0CB6 - PIXEL_MAP_S_TO_S_SIZE = 0x0CB1 - POINT_SIZE = 0x0B11 - POINT_SIZE_GRANULARITY = 0x0B13 - POINT_SIZE_RANGE = 0x0B12 - POINT_SMOOTH_HINT = 0x0C51 - POLYGON_MODE = 0x0B40 - POLYGON_OFFSET_FACTOR = 0x8038 - POLYGON_OFFSET_UNITS = 0x2A00 - POLYGON_SMOOTH_HINT = 0x0C53 - PROJECTION_MATRIX = 0x0BA7 - PROJECTION_STACK_DEPTH = 0x0BA4 - READ_BUFFER = 0x0C02 - RED_BIAS = 0x0D15 - RED_BITS = 0x0D52 - RED_SCALE = 0x0D14 - RENDER_MODE = 0x0C40 - RGBA_MODE = 0x0C31 - SCISSOR_BOX = 0x0C10 - SELECTION_BUFFER_SIZE = 0x0DF4 - SHADE_MODEL = 0x0B54 - SMOOTH_LINE_WIDTH_GRANULARITY = 0x0B23 - SMOOTH_LINE_WIDTH_RANGE = 0x0B22 - SMOOTH_POINT_SIZE_GRANULARITY = 0x0B13 - SMOOTH_POINT_SIZE_RANGE = 0x0B12 - STENCIL_BITS = 0x0D57 - STENCIL_CLEAR_VALUE = 0x0B91 - STENCIL_FAIL = 0x0B94 - STENCIL_FUNC = 0x0B92 - STENCIL_PASS_DEPTH_FAIL = 0x0B95 - STENCIL_PASS_DEPTH_PASS = 0x0B96 - STENCIL_REF = 0x0B97 - STENCIL_VALUE_MASK = 0x0B93 - STENCIL_WRITEMASK = 0x0B98 - STEREO = 0x0C33 - SUBPIXEL_BITS = 0x0D50 - TEXTURE_BINDING_1D = 0x8068 - TEXTURE_BINDING_2D = 0x8069 - TEXTURE_BINDING_3D = 0x806A - TEXTURE_COORD_ARRAY_SIZE = 0x8088 - TEXTURE_COORD_ARRAY_STRIDE = 0x808A - TEXTURE_COORD_ARRAY_TYPE = 0x8089 - TEXTURE_MATRIX = 0x0BA8 - TEXTURE_STACK_DEPTH = 0x0BA5 - UNPACK_ALIGNMENT = 0x0CF5 - UNPACK_LSB_FIRST = 0x0CF1 - UNPACK_ROW_LENGTH = 0x0CF2 - UNPACK_SKIP_PIXELS = 0x0CF4 - UNPACK_SKIP_ROWS = 0x0CF3 - UNPACK_SWAP_BYTES = 0x0CF0 - VERTEX_ARRAY_SIZE = 0x807A - VERTEX_ARRAY_STRIDE = 0x807C - VERTEX_ARRAY_TYPE = 0x807B - VIEWPORT = 0x0BA2 - ZOOM_X = 0x0D16 - ZOOM_Y = 0x0D17 - - COLOR_ARRAY_POINTER = 0x8090 - EDGE_FLAG_ARRAY_POINTER = 0x8093 - FEEDBACK_BUFFER_POINTER = 0x0DF0 - INDEX_ARRAY_POINTER = 0x8091 - NORMAL_ARRAY_POINTER = 0x808F - SELECTION_BUFFER_POINTER = 0x0DF3 - TEXTURE_COORD_ARRAY_POINTER = 0x8092 - VERTEX_ARRAY_POINTER = 0x808E - - TEXTURE_ALPHA_SIZE = 0x805F - TEXTURE_BLUE_SIZE = 0x805E - TEXTURE_BORDER = 0x1005 - TEXTURE_BORDER_COLOR = 0x1004 - TEXTURE_COMPONENTS = 0x1003 - TEXTURE_GREEN_SIZE = 0x805D - TEXTURE_HEIGHT = 0x1001 - TEXTURE_INTENSITY_SIZE = 0x8061 - TEXTURE_INTERNAL_FORMAT = 0x1003 - TEXTURE_LUMINANCE_SIZE = 0x8060 - TEXTURE_MAG_FILTER = 0x2800 - TEXTURE_MIN_FILTER = 0x2801 - TEXTURE_PRIORITY = 0x8066 - TEXTURE_RED_SIZE = 0x805C - TEXTURE_RESIDENT = 0x8067 - TEXTURE_WIDTH = 0x1000 - TEXTURE_WRAP_S = 0x2802 - TEXTURE_WRAP_T = 0x2803 - - DONT_CARE = 0x1100 - FASTEST = 0x1101 - NICEST = 0x1102 - - FRAGMENT_SHADER_DERIVATIVE_HINT = 0x8B8B - GENERATE_MIPMAP_HINT = 0x8192 - TEXTURE_COMPRESSION_HINT = 0x84EF - - C3F_V3F = 0x2A24 - C4F_N3F_V3F = 0x2A26 - C4UB_V2F = 0x2A22 - C4UB_V3F = 0x2A23 - N3F_V3F = 0x2A25 - T2F_C3F_V3F = 0x2A2A - T2F_C4F_N3F_V3F = 0x2A2C - T2F_C4UB_V3F = 0x2A29 - T2F_N3F_V3F = 0x2A2B - T2F_V3F = 0x2A27 - T4F_C4F_N3F_V4F = 0x2A2D - T4F_V4F = 0x2A28 - V2F = 0x2A20 - V3F = 0x2A21 - - MODULATE = 0x2100 - REPLACE = 0x1E01 - - SEPARATE_SPECULAR_COLOR = 0x81FA - SINGLE_COLOR = 0x81F9 - - CONSTANT_ATTENUATION = 0x1207 - LINEAR_ATTENUATION = 0x1208 - POSITION = 0x1203 - QUADRATIC_ATTENUATION = 0x1209 - SPOT_CUTOFF = 0x1206 - SPOT_DIRECTION = 0x1204 - SPOT_EXPONENT = 0x1205 - - COMPILE = 0x1300 - COMPILE_AND_EXECUTE = 0x1301 - - AND = 0x1501 - AND_INVERTED = 0x1504 - AND_REVERSE = 0x1502 - CLEAR = 0x1500 - COPY = 0x1503 - COPY_INVERTED = 0x150C - EQUIV = 0x1509 - INVERT = 0x150A - NAND = 0x150E - NOOP = 0x1505 - NOR = 0x1508 - OR = 0x1507 - OR_INVERTED = 0x150D - OR_REVERSE = 0x150B - SET = 0x150F - XOR = 0x1506 - - MAP_FLUSH_EXPLICIT_BIT = 0x0010 - MAP_INVALIDATE_BUFFER_BIT = 0x0008 - MAP_INVALIDATE_RANGE_BIT = 0x0004 - MAP_READ_BIT = 0x0001 - MAP_UNSYNCHRONIZED_BIT = 0x0020 - MAP_WRITE_BIT = 0x0002 - - COLOR_INDEXES = 0x1603 - SHININESS = 0x1601 - - MODELVIEW = 0x1700 - PROJECTION = 0x1701 - TEXTURE = 0x1702 - - LINE = 0x1B01 - POINT = 0x1B00 - - FILL = 0x1B02 - - COLOR = 0x1800 - DEPTH = 0x1801 - STENCIL = 0x1802 - - ALPHA = 0x1906 - BLUE = 0x1905 - COLOR_INDEX = 0x1900 - DEPTH_COMPONENT = 0x1902 - GREEN = 0x1904 - LUMINANCE = 0x1909 - LUMINANCE_ALPHA = 0x190A - RED = 0x1903 - RGB = 0x1907 - RGBA = 0x1908 - STENCIL_INDEX = 0x1901 - - ALPHA12 = 0x803D - ALPHA16 = 0x803E - ALPHA4 = 0x803B - ALPHA8 = 0x803C - INTENSITY = 0x8049 - INTENSITY12 = 0x804C - INTENSITY16 = 0x804D - INTENSITY4 = 0x804A - INTENSITY8 = 0x804B - LUMINANCE12 = 0x8041 - LUMINANCE12_ALPHA12 = 0x8047 - LUMINANCE12_ALPHA4 = 0x8046 - LUMINANCE16 = 0x8042 - LUMINANCE16_ALPHA16 = 0x8048 - LUMINANCE4 = 0x803F - LUMINANCE4_ALPHA4 = 0x8043 - LUMINANCE6_ALPHA2 = 0x8044 - LUMINANCE8 = 0x8040 - LUMINANCE8_ALPHA8 = 0x8045 - R3_G3_B2 = 0x2A10 - RGB10 = 0x8052 - RGB10_A2 = 0x8059 - RGB12 = 0x8053 - RGB16 = 0x8054 - RGB4 = 0x804F - RGB5 = 0x8050 - RGB5_A1 = 0x8057 - RGB8 = 0x8051 - RGBA12 = 0x805A - RGBA16 = 0x805B - RGBA2 = 0x8055 - RGBA4 = 0x8056 - RGBA8 = 0x8058 - - PACK_IMAGE_HEIGHT = 0x806C - PACK_SKIP_IMAGES = 0x806B - UNPACK_IMAGE_HEIGHT = 0x806E - UNPACK_SKIP_IMAGES = 0x806D - - BITMAP = 0x1A00 - UNSIGNED_BYTE_3_3_2 = 0x8032 - UNSIGNED_INT_10_10_10_2 = 0x8036 - UNSIGNED_INT_8_8_8_8 = 0x8035 - UNSIGNED_SHORT_4_4_4_4 = 0x8033 - UNSIGNED_SHORT_5_5_5_1 = 0x8034 - - POINT_DISTANCE_ATTENUATION = 0x8129 - POINT_FADE_THRESHOLD_SIZE = 0x8128 - POINT_SIZE_MAX = 0x8127 - POINT_SIZE_MIN = 0x8126 - - LINES = 0x0001 - LINES_ADJACENCY = 0x000A - LINE_LOOP = 0x0002 - LINE_STRIP = 0x0003 - LINE_STRIP_ADJACENCY = 0x000B - POINTS = 0x0000 - POLYGON = 0x0009 - QUADS = 0x0007 - QUAD_STRIP = 0x0008 - TRIANGLES = 0x0004 - TRIANGLES_ADJACENCY = 0x000C - TRIANGLE_FAN = 0x0006 - TRIANGLE_STRIP = 0x0005 - TRIANGLE_STRIP_ADJACENCY = 0x000D - - FEEDBACK = 0x1C01 - RENDER = 0x1C00 - SELECT = 0x1C02 - - FLAT = 0x1D00 - SMOOTH = 0x1D01 - - DECR = 0x1E03 - INCR = 0x1E02 - KEEP = 0x1E00 - - EXTENSIONS = 0x1F03 - RENDERER = 0x1F01 - VENDOR = 0x1F00 - VERSION = 0x1F02 - - S = 0x2000 - T = 0x2001 - R = 0x2002 - Q = 0x2003 - - DECAL = 0x2101 - - TEXTURE_ENV_COLOR = 0x2201 - TEXTURE_ENV_MODE = 0x2200 - - TEXTURE_ENV = 0x2300 - - EYE_LINEAR = 0x2400 - OBJECT_LINEAR = 0x2401 - SPHERE_MAP = 0x2402 - - EYE_PLANE = 0x2502 - OBJECT_PLANE = 0x2501 - TEXTURE_GEN_MODE = 0x2500 - - NEAREST = 0x2600 - - LINEAR_MIPMAP_LINEAR = 0x2703 - LINEAR_MIPMAP_NEAREST = 0x2701 - NEAREST_MIPMAP_LINEAR = 0x2702 - NEAREST_MIPMAP_NEAREST = 0x2700 - - GENERATE_MIPMAP = 0x8191 - TEXTURE_WRAP_R = 0x8072 - - PROXY_TEXTURE_1D = 0x8063 - PROXY_TEXTURE_2D = 0x8064 - PROXY_TEXTURE_3D = 0x8070 - TEXTURE_3D = 0x806F - TEXTURE_BASE_LEVEL = 0x813C - TEXTURE_MAX_LEVEL = 0x813D - TEXTURE_MAX_LOD = 0x813B - TEXTURE_MIN_LOD = 0x813A - - CLAMP = 0x2900 - CLAMP_TO_BORDER = 0x812D - CLAMP_TO_EDGE = 0x812F - REPEAT = 0x2901 - - SYNC_FLUSH_COMMANDS_BIT = 0x00000001 - INVALID_INDEX = 0xFFFFFFFF - TIMEOUT_IGNORED = 0xFFFFFFFFFFFFFFFF - CONSTANT_COLOR = 0x8001 - ONE_MINUS_CONSTANT_COLOR = 0x8002 - CONSTANT_ALPHA = 0x8003 - ONE_MINUS_CONSTANT_ALPHA = 0x8004 - FUNC_ADD = 0x8006 - MIN = 0x8007 - MAX = 0x8008 - BLEND_EQUATION_RGB = 0x8009 - FUNC_SUBTRACT = 0x800A - FUNC_REVERSE_SUBTRACT = 0x800B - RESCALE_NORMAL = 0x803A - TEXTURE_DEPTH = 0x8071 - MAX_3D_TEXTURE_SIZE = 0x8073 - MULTISAMPLE = 0x809D - SAMPLE_ALPHA_TO_COVERAGE = 0x809E - SAMPLE_ALPHA_TO_ONE = 0x809F - SAMPLE_COVERAGE = 0x80A0 - SAMPLE_BUFFERS = 0x80A8 - SAMPLES = 0x80A9 - SAMPLE_COVERAGE_VALUE = 0x80AA - SAMPLE_COVERAGE_INVERT = 0x80AB - BLEND_DST_RGB = 0x80C8 - BLEND_SRC_RGB = 0x80C9 - BLEND_DST_ALPHA = 0x80CA - BLEND_SRC_ALPHA = 0x80CB - BGR = 0x80E0 - BGRA = 0x80E1 - MAX_ELEMENTS_VERTICES = 0x80E8 - MAX_ELEMENTS_INDICES = 0x80E9 - DEPTH_COMPONENT16 = 0x81A5 - DEPTH_COMPONENT24 = 0x81A6 - DEPTH_COMPONENT32 = 0x81A7 - FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING = 0x8210 - FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE = 0x8211 - FRAMEBUFFER_ATTACHMENT_RED_SIZE = 0x8212 - FRAMEBUFFER_ATTACHMENT_GREEN_SIZE = 0x8213 - FRAMEBUFFER_ATTACHMENT_BLUE_SIZE = 0x8214 - FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE = 0x8215 - FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE = 0x8216 - FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE = 0x8217 - FRAMEBUFFER_DEFAULT = 0x8218 - FRAMEBUFFER_UNDEFINED = 0x8219 - DEPTH_STENCIL_ATTACHMENT = 0x821A - MAJOR_VERSION = 0x821B - MINOR_VERSION = 0x821C - NUM_EXTENSIONS = 0x821D - CONTEXT_FLAGS = 0x821E - INDEX = 0x8222 - COMPRESSED_RED = 0x8225 - COMPRESSED_RG = 0x8226 - RG = 0x8227 - RG_INTEGER = 0x8228 - R8 = 0x8229 - R16 = 0x822A - RG8 = 0x822B - RG16 = 0x822C - R16F = 0x822D - R32F = 0x822E - RG16F = 0x822F - RG32F = 0x8230 - R8I = 0x8231 - R8UI = 0x8232 - R16I = 0x8233 - R16UI = 0x8234 - R32I = 0x8235 - R32UI = 0x8236 - RG8I = 0x8237 - RG8UI = 0x8238 - RG16I = 0x8239 - RG16UI = 0x823A - RG32I = 0x823B - RG32UI = 0x823C - UNSIGNED_BYTE_2_3_3_REV = 0x8362 - UNSIGNED_SHORT_5_6_5 = 0x8363 - UNSIGNED_SHORT_5_6_5_REV = 0x8364 - UNSIGNED_SHORT_4_4_4_4_REV = 0x8365 - UNSIGNED_SHORT_1_5_5_5_REV = 0x8366 - UNSIGNED_INT_8_8_8_8_REV = 0x8367 - UNSIGNED_INT_2_10_10_10_REV = 0x8368 - MIRRORED_REPEAT = 0x8370 - FOG_COORDINATE_SOURCE = 0x8450 - FOG_COORD_SRC = 0x8450 - FOG_COORDINATE = 0x8451 - FOG_COORD = 0x8451 - FRAGMENT_DEPTH = 0x8452 - CURRENT_FOG_COORDINATE = 0x8453 - CURRENT_FOG_COORD = 0x8453 - FOG_COORDINATE_ARRAY_TYPE = 0x8454 - FOG_COORD_ARRAY_TYPE = 0x8454 - FOG_COORDINATE_ARRAY_STRIDE = 0x8455 - FOG_COORD_ARRAY_STRIDE = 0x8455 - FOG_COORDINATE_ARRAY_POINTER = 0x8456 - FOG_COORD_ARRAY_POINTER = 0x8456 - FOG_COORDINATE_ARRAY = 0x8457 - FOG_COORD_ARRAY = 0x8457 - COLOR_SUM = 0x8458 - CURRENT_SECONDARY_COLOR = 0x8459 - SECONDARY_COLOR_ARRAY_SIZE = 0x845A - SECONDARY_COLOR_ARRAY_TYPE = 0x845B - SECONDARY_COLOR_ARRAY_STRIDE = 0x845C - SECONDARY_COLOR_ARRAY_POINTER = 0x845D - SECONDARY_COLOR_ARRAY = 0x845E - CURRENT_RASTER_SECONDARY_COLOR = 0x845F - TEXTURE0 = 0x84C0 - TEXTURE1 = 0x84C1 - TEXTURE2 = 0x84C2 - TEXTURE3 = 0x84C3 - TEXTURE4 = 0x84C4 - TEXTURE5 = 0x84C5 - TEXTURE6 = 0x84C6 - TEXTURE7 = 0x84C7 - TEXTURE8 = 0x84C8 - TEXTURE9 = 0x84C9 - TEXTURE10 = 0x84CA - TEXTURE11 = 0x84CB - TEXTURE12 = 0x84CC - TEXTURE13 = 0x84CD - TEXTURE14 = 0x84CE - TEXTURE15 = 0x84CF - TEXTURE16 = 0x84D0 - TEXTURE17 = 0x84D1 - TEXTURE18 = 0x84D2 - TEXTURE19 = 0x84D3 - TEXTURE20 = 0x84D4 - TEXTURE21 = 0x84D5 - TEXTURE22 = 0x84D6 - TEXTURE23 = 0x84D7 - TEXTURE24 = 0x84D8 - TEXTURE25 = 0x84D9 - TEXTURE26 = 0x84DA - TEXTURE27 = 0x84DB - TEXTURE28 = 0x84DC - TEXTURE29 = 0x84DD - TEXTURE30 = 0x84DE - TEXTURE31 = 0x84DF - ACTIVE_TEXTURE = 0x84E0 - CLIENT_ACTIVE_TEXTURE = 0x84E1 - MAX_TEXTURE_UNITS = 0x84E2 - TRANSPOSE_MODELVIEW_MATRIX = 0x84E3 - TRANSPOSE_PROJECTION_MATRIX = 0x84E4 - TRANSPOSE_TEXTURE_MATRIX = 0x84E5 - TRANSPOSE_COLOR_MATRIX = 0x84E6 - SUBTRACT = 0x84E7 - MAX_RENDERBUFFER_SIZE = 0x84E8 - COMPRESSED_ALPHA = 0x84E9 - COMPRESSED_LUMINANCE = 0x84EA - COMPRESSED_LUMINANCE_ALPHA = 0x84EB - COMPRESSED_INTENSITY = 0x84EC - COMPRESSED_RGB = 0x84ED - COMPRESSED_RGBA = 0x84EE - TEXTURE_RECTANGLE = 0x84F5 - TEXTURE_BINDING_RECTANGLE = 0x84F6 - PROXY_TEXTURE_RECTANGLE = 0x84F7 - MAX_RECTANGLE_TEXTURE_SIZE = 0x84F8 - DEPTH_STENCIL = 0x84F9 - UNSIGNED_INT_24_8 = 0x84FA - MAX_TEXTURE_LOD_BIAS = 0x84FD - TEXTURE_FILTER_CONTROL = 0x8500 - TEXTURE_LOD_BIAS = 0x8501 - INCR_WRAP = 0x8507 - DECR_WRAP = 0x8508 - NORMAL_MAP = 0x8511 - REFLECTION_MAP = 0x8512 - TEXTURE_CUBE_MAP = 0x8513 - TEXTURE_BINDING_CUBE_MAP = 0x8514 - TEXTURE_CUBE_MAP_POSITIVE_X = 0x8515 - TEXTURE_CUBE_MAP_NEGATIVE_X = 0x8516 - TEXTURE_CUBE_MAP_POSITIVE_Y = 0x8517 - TEXTURE_CUBE_MAP_NEGATIVE_Y = 0x8518 - TEXTURE_CUBE_MAP_POSITIVE_Z = 0x8519 - TEXTURE_CUBE_MAP_NEGATIVE_Z = 0x851A - PROXY_TEXTURE_CUBE_MAP = 0x851B - MAX_CUBE_MAP_TEXTURE_SIZE = 0x851C - COMBINE = 0x8570 - COMBINE_RGB = 0x8571 - COMBINE_ALPHA = 0x8572 - RGB_SCALE = 0x8573 - ADD_SIGNED = 0x8574 - INTERPOLATE = 0x8575 - CONSTANT = 0x8576 - PRIMARY_COLOR = 0x8577 - PREVIOUS = 0x8578 - SOURCE0_RGB = 0x8580 - SRC0_RGB = 0x8580 - SOURCE1_RGB = 0x8581 - SRC1_RGB = 0x8581 - SOURCE2_RGB = 0x8582 - SRC2_RGB = 0x8582 - SOURCE0_ALPHA = 0x8588 - SRC0_ALPHA = 0x8588 - SOURCE1_ALPHA = 0x8589 - SRC1_ALPHA = 0x8589 - SOURCE2_ALPHA = 0x858A - SRC2_ALPHA = 0x858A - OPERAND0_RGB = 0x8590 - OPERAND1_RGB = 0x8591 - OPERAND2_RGB = 0x8592 - OPERAND0_ALPHA = 0x8598 - OPERAND1_ALPHA = 0x8599 - OPERAND2_ALPHA = 0x859A - VERTEX_ARRAY_BINDING = 0x85B5 - VERTEX_ATTRIB_ARRAY_ENABLED = 0x8622 - VERTEX_ATTRIB_ARRAY_SIZE = 0x8623 - VERTEX_ATTRIB_ARRAY_STRIDE = 0x8624 - VERTEX_ATTRIB_ARRAY_TYPE = 0x8625 - CURRENT_VERTEX_ATTRIB = 0x8626 - VERTEX_PROGRAM_POINT_SIZE = 0x8642 - PROGRAM_POINT_SIZE = 0x8642 - VERTEX_PROGRAM_TWO_SIDE = 0x8643 - VERTEX_ATTRIB_ARRAY_POINTER = 0x8645 - DEPTH_CLAMP = 0x864F - TEXTURE_COMPRESSED_IMAGE_SIZE = 0x86A0 - TEXTURE_COMPRESSED = 0x86A1 - NUM_COMPRESSED_TEXTURE_FORMATS = 0x86A2 - COMPRESSED_TEXTURE_FORMATS = 0x86A3 - DOT3_RGB = 0x86AE - DOT3_RGBA = 0x86AF - BUFFER_SIZE = 0x8764 - BUFFER_USAGE = 0x8765 - STENCIL_BACK_FUNC = 0x8800 - STENCIL_BACK_FAIL = 0x8801 - STENCIL_BACK_PASS_DEPTH_FAIL = 0x8802 - STENCIL_BACK_PASS_DEPTH_PASS = 0x8803 - RGBA32F = 0x8814 - RGB32F = 0x8815 - RGBA16F = 0x881A - RGB16F = 0x881B - MAX_DRAW_BUFFERS = 0x8824 - DRAW_BUFFER0 = 0x8825 - DRAW_BUFFER1 = 0x8826 - DRAW_BUFFER2 = 0x8827 - DRAW_BUFFER3 = 0x8828 - DRAW_BUFFER4 = 0x8829 - DRAW_BUFFER5 = 0x882A - DRAW_BUFFER6 = 0x882B - DRAW_BUFFER7 = 0x882C - DRAW_BUFFER8 = 0x882D - DRAW_BUFFER9 = 0x882E - DRAW_BUFFER10 = 0x882F - DRAW_BUFFER11 = 0x8830 - DRAW_BUFFER12 = 0x8831 - DRAW_BUFFER13 = 0x8832 - DRAW_BUFFER14 = 0x8833 - DRAW_BUFFER15 = 0x8834 - BLEND_EQUATION_ALPHA = 0x883D - TEXTURE_DEPTH_SIZE = 0x884A - DEPTH_TEXTURE_MODE = 0x884B - TEXTURE_COMPARE_MODE = 0x884C - TEXTURE_COMPARE_FUNC = 0x884D - COMPARE_R_TO_TEXTURE = 0x884E - COMPARE_REF_TO_TEXTURE = 0x884E - TEXTURE_CUBE_MAP_SEAMLESS = 0x884F - POINT_SPRITE = 0x8861 - COORD_REPLACE = 0x8862 - QUERY_COUNTER_BITS = 0x8864 - CURRENT_QUERY = 0x8865 - QUERY_RESULT = 0x8866 - QUERY_RESULT_AVAILABLE = 0x8867 - MAX_VERTEX_ATTRIBS = 0x8869 - VERTEX_ATTRIB_ARRAY_NORMALIZED = 0x886A - MAX_TEXTURE_COORDS = 0x8871 - MAX_TEXTURE_IMAGE_UNITS = 0x8872 - ARRAY_BUFFER = 0x8892 - ELEMENT_ARRAY_BUFFER = 0x8893 - ARRAY_BUFFER_BINDING = 0x8894 - ELEMENT_ARRAY_BUFFER_BINDING = 0x8895 - VERTEX_ARRAY_BUFFER_BINDING = 0x8896 - NORMAL_ARRAY_BUFFER_BINDING = 0x8897 - COLOR_ARRAY_BUFFER_BINDING = 0x8898 - INDEX_ARRAY_BUFFER_BINDING = 0x8899 - TEXTURE_COORD_ARRAY_BUFFER_BINDING = 0x889A - EDGE_FLAG_ARRAY_BUFFER_BINDING = 0x889B - SECONDARY_COLOR_ARRAY_BUFFER_BINDING = 0x889C - FOG_COORDINATE_ARRAY_BUFFER_BINDING = 0x889D - FOG_COORD_ARRAY_BUFFER_BINDING = 0x889D - WEIGHT_ARRAY_BUFFER_BINDING = 0x889E - VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = 0x889F - READ_ONLY = 0x88B8 - WRITE_ONLY = 0x88B9 - READ_WRITE = 0x88BA - BUFFER_ACCESS = 0x88BB - BUFFER_MAPPED = 0x88BC - BUFFER_MAP_POINTER = 0x88BD - TIME_ELAPSED = 0x88BF - STREAM_DRAW = 0x88E0 - STREAM_READ = 0x88E1 - STREAM_COPY = 0x88E2 - STATIC_DRAW = 0x88E4 - STATIC_READ = 0x88E5 - STATIC_COPY = 0x88E6 - DYNAMIC_DRAW = 0x88E8 - DYNAMIC_READ = 0x88E9 - DYNAMIC_COPY = 0x88EA - PIXEL_PACK_BUFFER = 0x88EB - PIXEL_UNPACK_BUFFER = 0x88EC - PIXEL_PACK_BUFFER_BINDING = 0x88ED - PIXEL_UNPACK_BUFFER_BINDING = 0x88EF - DEPTH24_STENCIL8 = 0x88F0 - TEXTURE_STENCIL_SIZE = 0x88F1 - SRC1_COLOR = 0x88F9 - ONE_MINUS_SRC1_COLOR = 0x88FA - ONE_MINUS_SRC1_ALPHA = 0x88FB - MAX_DUAL_SOURCE_DRAW_BUFFERS = 0x88FC - VERTEX_ATTRIB_ARRAY_INTEGER = 0x88FD - VERTEX_ATTRIB_ARRAY_DIVISOR = 0x88FE - MAX_ARRAY_TEXTURE_LAYERS = 0x88FF - MIN_PROGRAM_TEXEL_OFFSET = 0x8904 - MAX_PROGRAM_TEXEL_OFFSET = 0x8905 - SAMPLES_PASSED = 0x8914 - GEOMETRY_VERTICES_OUT = 0x8916 - GEOMETRY_INPUT_TYPE = 0x8917 - GEOMETRY_OUTPUT_TYPE = 0x8918 - SAMPLER_BINDING = 0x8919 - CLAMP_VERTEX_COLOR = 0x891A - CLAMP_FRAGMENT_COLOR = 0x891B - CLAMP_READ_COLOR = 0x891C - FIXED_ONLY = 0x891D - UNIFORM_BUFFER = 0x8A11 - UNIFORM_BUFFER_BINDING = 0x8A28 - UNIFORM_BUFFER_START = 0x8A29 - UNIFORM_BUFFER_SIZE = 0x8A2A - MAX_VERTEX_UNIFORM_BLOCKS = 0x8A2B - MAX_GEOMETRY_UNIFORM_BLOCKS = 0x8A2C - MAX_FRAGMENT_UNIFORM_BLOCKS = 0x8A2D - MAX_COMBINED_UNIFORM_BLOCKS = 0x8A2E - MAX_UNIFORM_BUFFER_BINDINGS = 0x8A2F - MAX_UNIFORM_BLOCK_SIZE = 0x8A30 - MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS = 0x8A31 - MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS = 0x8A32 - MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS = 0x8A33 - UNIFORM_BUFFER_OFFSET_ALIGNMENT = 0x8A34 - ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH = 0x8A35 - ACTIVE_UNIFORM_BLOCKS = 0x8A36 - UNIFORM_TYPE = 0x8A37 - UNIFORM_SIZE = 0x8A38 - UNIFORM_NAME_LENGTH = 0x8A39 - UNIFORM_BLOCK_INDEX = 0x8A3A - UNIFORM_OFFSET = 0x8A3B - UNIFORM_ARRAY_STRIDE = 0x8A3C - UNIFORM_MATRIX_STRIDE = 0x8A3D - UNIFORM_IS_ROW_MAJOR = 0x8A3E - UNIFORM_BLOCK_BINDING = 0x8A3F - UNIFORM_BLOCK_DATA_SIZE = 0x8A40 - UNIFORM_BLOCK_NAME_LENGTH = 0x8A41 - UNIFORM_BLOCK_ACTIVE_UNIFORMS = 0x8A42 - UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES = 0x8A43 - UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER = 0x8A44 - UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER = 0x8A45 - UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER = 0x8A46 - FRAGMENT_SHADER = 0x8B30 - VERTEX_SHADER = 0x8B31 - MAX_FRAGMENT_UNIFORM_COMPONENTS = 0x8B49 - MAX_VERTEX_UNIFORM_COMPONENTS = 0x8B4A - MAX_VARYING_FLOATS = 0x8B4B - MAX_VARYING_COMPONENTS = 0x8B4B - MAX_VERTEX_TEXTURE_IMAGE_UNITS = 0x8B4C - MAX_COMBINED_TEXTURE_IMAGE_UNITS = 0x8B4D - SHADER_TYPE = 0x8B4F - FLOAT_VEC2 = 0x8B50 - FLOAT_VEC3 = 0x8B51 - FLOAT_VEC4 = 0x8B52 - INT_VEC2 = 0x8B53 - INT_VEC3 = 0x8B54 - INT_VEC4 = 0x8B55 - BOOL = 0x8B56 - BOOL_VEC2 = 0x8B57 - BOOL_VEC3 = 0x8B58 - BOOL_VEC4 = 0x8B59 - FLOAT_MAT2 = 0x8B5A - FLOAT_MAT3 = 0x8B5B - FLOAT_MAT4 = 0x8B5C - SAMPLER_1D = 0x8B5D - SAMPLER_2D = 0x8B5E - SAMPLER_3D = 0x8B5F - SAMPLER_CUBE = 0x8B60 - SAMPLER_1D_SHADOW = 0x8B61 - SAMPLER_2D_SHADOW = 0x8B62 - SAMPLER_2D_RECT = 0x8B63 - SAMPLER_2D_RECT_SHADOW = 0x8B64 - FLOAT_MAT2x3 = 0x8B65 - FLOAT_MAT2x4 = 0x8B66 - FLOAT_MAT3x2 = 0x8B67 - FLOAT_MAT3x4 = 0x8B68 - FLOAT_MAT4x2 = 0x8B69 - FLOAT_MAT4x3 = 0x8B6A - DELETE_STATUS = 0x8B80 - COMPILE_STATUS = 0x8B81 - LINK_STATUS = 0x8B82 - VALIDATE_STATUS = 0x8B83 - INFO_LOG_LENGTH = 0x8B84 - ATTACHED_SHADERS = 0x8B85 - ACTIVE_UNIFORMS = 0x8B86 - ACTIVE_UNIFORM_MAX_LENGTH = 0x8B87 - SHADER_SOURCE_LENGTH = 0x8B88 - ACTIVE_ATTRIBUTES = 0x8B89 - ACTIVE_ATTRIBUTE_MAX_LENGTH = 0x8B8A - SHADING_LANGUAGE_VERSION = 0x8B8C - CURRENT_PROGRAM = 0x8B8D - TEXTURE_RED_TYPE = 0x8C10 - TEXTURE_GREEN_TYPE = 0x8C11 - TEXTURE_BLUE_TYPE = 0x8C12 - TEXTURE_ALPHA_TYPE = 0x8C13 - TEXTURE_LUMINANCE_TYPE = 0x8C14 - TEXTURE_INTENSITY_TYPE = 0x8C15 - TEXTURE_DEPTH_TYPE = 0x8C16 - UNSIGNED_NORMALIZED = 0x8C17 - TEXTURE_1D_ARRAY = 0x8C18 - PROXY_TEXTURE_1D_ARRAY = 0x8C19 - TEXTURE_2D_ARRAY = 0x8C1A - PROXY_TEXTURE_2D_ARRAY = 0x8C1B - TEXTURE_BINDING_1D_ARRAY = 0x8C1C - TEXTURE_BINDING_2D_ARRAY = 0x8C1D - MAX_GEOMETRY_TEXTURE_IMAGE_UNITS = 0x8C29 - TEXTURE_BUFFER = 0x8C2A - MAX_TEXTURE_BUFFER_SIZE = 0x8C2B - TEXTURE_BINDING_BUFFER = 0x8C2C - TEXTURE_BUFFER_DATA_STORE_BINDING = 0x8C2D - ANY_SAMPLES_PASSED = 0x8C2F - R11F_G11F_B10F = 0x8C3A - UNSIGNED_INT_10F_11F_11F_REV = 0x8C3B - RGB9_E5 = 0x8C3D - UNSIGNED_INT_5_9_9_9_REV = 0x8C3E - TEXTURE_SHARED_SIZE = 0x8C3F - SRGB = 0x8C40 - SRGB8 = 0x8C41 - SRGB_ALPHA = 0x8C42 - SRGB8_ALPHA8 = 0x8C43 - SLUMINANCE_ALPHA = 0x8C44 - SLUMINANCE8_ALPHA8 = 0x8C45 - SLUMINANCE = 0x8C46 - SLUMINANCE8 = 0x8C47 - COMPRESSED_SRGB = 0x8C48 - COMPRESSED_SRGB_ALPHA = 0x8C49 - COMPRESSED_SLUMINANCE = 0x8C4A - COMPRESSED_SLUMINANCE_ALPHA = 0x8C4B - TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH = 0x8C76 - TRANSFORM_FEEDBACK_BUFFER_MODE = 0x8C7F - MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS = 0x8C80 - TRANSFORM_FEEDBACK_VARYINGS = 0x8C83 - TRANSFORM_FEEDBACK_BUFFER_START = 0x8C84 - TRANSFORM_FEEDBACK_BUFFER_SIZE = 0x8C85 - PRIMITIVES_GENERATED = 0x8C87 - TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN = 0x8C88 - RASTERIZER_DISCARD = 0x8C89 - MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS = 0x8C8A - MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS = 0x8C8B - INTERLEAVED_ATTRIBS = 0x8C8C - SEPARATE_ATTRIBS = 0x8C8D - TRANSFORM_FEEDBACK_BUFFER = 0x8C8E - TRANSFORM_FEEDBACK_BUFFER_BINDING = 0x8C8F - POINT_SPRITE_COORD_ORIGIN = 0x8CA0 - LOWER_LEFT = 0x8CA1 - UPPER_LEFT = 0x8CA2 - STENCIL_BACK_REF = 0x8CA3 - STENCIL_BACK_VALUE_MASK = 0x8CA4 - STENCIL_BACK_WRITEMASK = 0x8CA5 - DRAW_FRAMEBUFFER_BINDING = 0x8CA6 - FRAMEBUFFER_BINDING = 0x8CA6 - RENDERBUFFER_BINDING = 0x8CA7 - READ_FRAMEBUFFER = 0x8CA8 - DRAW_FRAMEBUFFER = 0x8CA9 - READ_FRAMEBUFFER_BINDING = 0x8CAA - RENDERBUFFER_SAMPLES = 0x8CAB - DEPTH_COMPONENT32F = 0x8CAC - DEPTH32F_STENCIL8 = 0x8CAD - FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE = 0x8CD0 - FRAMEBUFFER_ATTACHMENT_OBJECT_NAME = 0x8CD1 - FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL = 0x8CD2 - FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE = 0x8CD3 - FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER = 0x8CD4 - FRAMEBUFFER_COMPLETE = 0x8CD5 - FRAMEBUFFER_INCOMPLETE_ATTACHMENT = 0x8CD6 - FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = 0x8CD7 - FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER = 0x8CDB - FRAMEBUFFER_INCOMPLETE_READ_BUFFER = 0x8CDC - FRAMEBUFFER_UNSUPPORTED = 0x8CDD - MAX_COLOR_ATTACHMENTS = 0x8CDF - COLOR_ATTACHMENT0 = 0x8CE0 - COLOR_ATTACHMENT1 = 0x8CE1 - COLOR_ATTACHMENT2 = 0x8CE2 - COLOR_ATTACHMENT3 = 0x8CE3 - COLOR_ATTACHMENT4 = 0x8CE4 - COLOR_ATTACHMENT5 = 0x8CE5 - COLOR_ATTACHMENT6 = 0x8CE6 - COLOR_ATTACHMENT7 = 0x8CE7 - COLOR_ATTACHMENT8 = 0x8CE8 - COLOR_ATTACHMENT9 = 0x8CE9 - COLOR_ATTACHMENT10 = 0x8CEA - COLOR_ATTACHMENT11 = 0x8CEB - COLOR_ATTACHMENT12 = 0x8CEC - COLOR_ATTACHMENT13 = 0x8CED - COLOR_ATTACHMENT14 = 0x8CEE - COLOR_ATTACHMENT15 = 0x8CEF - DEPTH_ATTACHMENT = 0x8D00 - STENCIL_ATTACHMENT = 0x8D20 - FRAMEBUFFER = 0x8D40 - RENDERBUFFER = 0x8D41 - RENDERBUFFER_WIDTH = 0x8D42 - RENDERBUFFER_HEIGHT = 0x8D43 - RENDERBUFFER_INTERNAL_FORMAT = 0x8D44 - STENCIL_INDEX1 = 0x8D46 - STENCIL_INDEX4 = 0x8D47 - STENCIL_INDEX8 = 0x8D48 - STENCIL_INDEX16 = 0x8D49 - RENDERBUFFER_RED_SIZE = 0x8D50 - RENDERBUFFER_GREEN_SIZE = 0x8D51 - RENDERBUFFER_BLUE_SIZE = 0x8D52 - RENDERBUFFER_ALPHA_SIZE = 0x8D53 - RENDERBUFFER_DEPTH_SIZE = 0x8D54 - RENDERBUFFER_STENCIL_SIZE = 0x8D55 - FRAMEBUFFER_INCOMPLETE_MULTISAMPLE = 0x8D56 - MAX_SAMPLES = 0x8D57 - RGBA32UI = 0x8D70 - RGB32UI = 0x8D71 - RGBA16UI = 0x8D76 - RGB16UI = 0x8D77 - RGBA8UI = 0x8D7C - RGB8UI = 0x8D7D - RGBA32I = 0x8D82 - RGB32I = 0x8D83 - RGBA16I = 0x8D88 - RGB16I = 0x8D89 - RGBA8I = 0x8D8E - RGB8I = 0x8D8F - RED_INTEGER = 0x8D94 - GREEN_INTEGER = 0x8D95 - BLUE_INTEGER = 0x8D96 - ALPHA_INTEGER = 0x8D97 - RGB_INTEGER = 0x8D98 - RGBA_INTEGER = 0x8D99 - BGR_INTEGER = 0x8D9A - BGRA_INTEGER = 0x8D9B - INT_2_10_10_10_REV = 0x8D9F - FRAMEBUFFER_ATTACHMENT_LAYERED = 0x8DA7 - FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS = 0x8DA8 - FLOAT_32_UNSIGNED_INT_24_8_REV = 0x8DAD - FRAMEBUFFER_SRGB = 0x8DB9 - COMPRESSED_RED_RGTC1 = 0x8DBB - COMPRESSED_SIGNED_RED_RGTC1 = 0x8DBC - COMPRESSED_RG_RGTC2 = 0x8DBD - COMPRESSED_SIGNED_RG_RGTC2 = 0x8DBE - SAMPLER_1D_ARRAY = 0x8DC0 - SAMPLER_2D_ARRAY = 0x8DC1 - SAMPLER_BUFFER = 0x8DC2 - SAMPLER_1D_ARRAY_SHADOW = 0x8DC3 - SAMPLER_2D_ARRAY_SHADOW = 0x8DC4 - SAMPLER_CUBE_SHADOW = 0x8DC5 - UNSIGNED_INT_VEC2 = 0x8DC6 - UNSIGNED_INT_VEC3 = 0x8DC7 - UNSIGNED_INT_VEC4 = 0x8DC8 - INT_SAMPLER_1D = 0x8DC9 - INT_SAMPLER_2D = 0x8DCA - INT_SAMPLER_3D = 0x8DCB - INT_SAMPLER_CUBE = 0x8DCC - INT_SAMPLER_2D_RECT = 0x8DCD - INT_SAMPLER_1D_ARRAY = 0x8DCE - INT_SAMPLER_2D_ARRAY = 0x8DCF - INT_SAMPLER_BUFFER = 0x8DD0 - UNSIGNED_INT_SAMPLER_1D = 0x8DD1 - UNSIGNED_INT_SAMPLER_2D = 0x8DD2 - UNSIGNED_INT_SAMPLER_3D = 0x8DD3 - UNSIGNED_INT_SAMPLER_CUBE = 0x8DD4 - UNSIGNED_INT_SAMPLER_2D_RECT = 0x8DD5 - UNSIGNED_INT_SAMPLER_1D_ARRAY = 0x8DD6 - UNSIGNED_INT_SAMPLER_2D_ARRAY = 0x8DD7 - UNSIGNED_INT_SAMPLER_BUFFER = 0x8DD8 - GEOMETRY_SHADER = 0x8DD9 - MAX_GEOMETRY_UNIFORM_COMPONENTS = 0x8DDF - MAX_GEOMETRY_OUTPUT_VERTICES = 0x8DE0 - MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS = 0x8DE1 - QUERY_WAIT = 0x8E13 - QUERY_NO_WAIT = 0x8E14 - QUERY_BY_REGION_WAIT = 0x8E15 - QUERY_BY_REGION_NO_WAIT = 0x8E16 - TIMESTAMP = 0x8E28 - TEXTURE_SWIZZLE_R = 0x8E42 - TEXTURE_SWIZZLE_G = 0x8E43 - TEXTURE_SWIZZLE_B = 0x8E44 - TEXTURE_SWIZZLE_A = 0x8E45 - TEXTURE_SWIZZLE_RGBA = 0x8E46 - QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION = 0x8E4C - FIRST_VERTEX_CONVENTION = 0x8E4D - LAST_VERTEX_CONVENTION = 0x8E4E - PROVOKING_VERTEX = 0x8E4F - SAMPLE_POSITION = 0x8E50 - SAMPLE_MASK = 0x8E51 - SAMPLE_MASK_VALUE = 0x8E52 - MAX_SAMPLE_MASK_WORDS = 0x8E59 - COPY_READ_BUFFER = 0x8F36 - COPY_WRITE_BUFFER = 0x8F37 - R8_SNORM = 0x8F94 - RG8_SNORM = 0x8F95 - RGB8_SNORM = 0x8F96 - RGBA8_SNORM = 0x8F97 - R16_SNORM = 0x8F98 - RG16_SNORM = 0x8F99 - RGB16_SNORM = 0x8F9A - RGBA16_SNORM = 0x8F9B - SIGNED_NORMALIZED = 0x8F9C - PRIMITIVE_RESTART = 0x8F9D - PRIMITIVE_RESTART_INDEX = 0x8F9E - RGB10_A2UI = 0x906F - TEXTURE_2D_MULTISAMPLE = 0x9100 - PROXY_TEXTURE_2D_MULTISAMPLE = 0x9101 - TEXTURE_2D_MULTISAMPLE_ARRAY = 0x9102 - PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY = 0x9103 - TEXTURE_BINDING_2D_MULTISAMPLE = 0x9104 - TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY = 0x9105 - TEXTURE_SAMPLES = 0x9106 - TEXTURE_FIXED_SAMPLE_LOCATIONS = 0x9107 - SAMPLER_2D_MULTISAMPLE = 0x9108 - INT_SAMPLER_2D_MULTISAMPLE = 0x9109 - UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE = 0x910A - SAMPLER_2D_MULTISAMPLE_ARRAY = 0x910B - INT_SAMPLER_2D_MULTISAMPLE_ARRAY = 0x910C - UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY = 0x910D - MAX_COLOR_TEXTURE_SAMPLES = 0x910E - MAX_DEPTH_TEXTURE_SAMPLES = 0x910F - MAX_INTEGER_SAMPLES = 0x9110 - MAX_SERVER_WAIT_TIMEOUT = 0x9111 - OBJECT_TYPE = 0x9112 - SYNC_CONDITION = 0x9113 - SYNC_STATUS = 0x9114 - SYNC_FLAGS = 0x9115 - SYNC_FENCE = 0x9116 - SYNC_GPU_COMMANDS_COMPLETE = 0x9117 - UNSIGNALED = 0x9118 - SIGNALED = 0x9119 - ALREADY_SIGNALED = 0x911A - TIMEOUT_EXPIRED = 0x911B - CONDITION_SATISFIED = 0x911C - WAIT_FAILED = 0x911D - BUFFER_ACCESS_FLAGS = 0x911F - BUFFER_MAP_LENGTH = 0x9120 - BUFFER_MAP_OFFSET = 0x9121 - MAX_VERTEX_OUTPUT_COMPONENTS = 0x9122 - MAX_GEOMETRY_INPUT_COMPONENTS = 0x9123 - MAX_GEOMETRY_OUTPUT_COMPONENTS = 0x9124 - MAX_FRAGMENT_INPUT_COMPONENTS = 0x9125 - CONTEXT_PROFILE_MASK = 0x9126 -) - -// https://www.opengl.org/sdk/docs/man3/xhtml/glViewport.xml -func (gl *GL) Viewport(x, y, width, height int) { - C.gl3_3compat_glViewport(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// DepthRange specifies the mapping of depth values from normalized device -// coordinates to window coordinates. -// -// Parameter nearVal specifies the mapping of the near clipping plane to window -// coordinates (defaults to 0), while farVal specifies the mapping of the far -// clipping plane to window coordinates (defaults to 1). -// -// After clipping and division by w, depth coordinates range from -1 to 1, -// corresponding to the near and far clipping planes. DepthRange specifies a -// linear mapping of the normalized depth coordinates in this range to window -// depth coordinates. Regardless of the actual depth buffer implementation, -// window coordinate depth values are treated as though they range from 0 through 1 -// (like color components). Thus, the values accepted by DepthRange are both -// clamped to this range before they are accepted. -// -// The default setting of (0, 1) maps the near plane to 0 and the far plane to 1. -// With this mapping, the depth buffer range is fully utilized. -// -// It is not necessary that nearVal be less than farVal. Reverse mappings such as -// nearVal 1, and farVal 0 are acceptable. -// -// GL.INVALID_OPERATION is generated if DepthRange is executed between the -// execution of Begin and the corresponding execution of End. -func (gl *GL) DepthRange(nearVal, farVal float64) { - C.gl3_3compat_glDepthRange(gl.funcs, C.GLdouble(nearVal), C.GLdouble(farVal)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsEnabled.xml -func (gl *GL) IsEnabled(cap glbase.Enum) bool { - glresult := C.gl3_3compat_glIsEnabled(gl.funcs, C.GLenum(cap)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetTexLevelParameteriv.xml -func (gl *GL) GetTexLevelParameteriv(target glbase.Enum, level int, pname glbase.Enum, params []int32) { - C.gl3_3compat_glGetTexLevelParameteriv(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetTexLevelParameterfv.xml -func (gl *GL) GetTexLevelParameterfv(target glbase.Enum, level int, pname glbase.Enum, params []float32) { - C.gl3_3compat_glGetTexLevelParameterfv(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetTexParameteriv.xml -func (gl *GL) GetTexParameteriv(target, pname glbase.Enum, params []int32) { - C.gl3_3compat_glGetTexParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetTexParameterfv.xml -func (gl *GL) GetTexParameterfv(target, pname glbase.Enum, params []float32) { - C.gl3_3compat_glGetTexParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetTexImage.xml -func (gl *GL) GetTexImage(target glbase.Enum, level int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl3_3compat_glGetTexImage(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetIntegerv.xml -func (gl *GL) GetIntegerv(pname glbase.Enum, params []int32) { - C.gl3_3compat_glGetIntegerv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetFloatv.xml -func (gl *GL) GetFloatv(pname glbase.Enum, params []float32) { - C.gl3_3compat_glGetFloatv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetError.xml -func (gl *GL) GetError() glbase.Enum { - glresult := C.gl3_3compat_glGetError(gl.funcs) - return glbase.Enum(glresult) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetDoublev.xml -func (gl *GL) GetDoublev(pname glbase.Enum, params []float64) { - C.gl3_3compat_glGetDoublev(gl.funcs, C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetBooleanv.xml -func (gl *GL) GetBooleanv(pname glbase.Enum, params []bool) { - C.gl3_3compat_glGetBooleanv(gl.funcs, C.GLenum(pname), (*C.GLboolean)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glReadPixels.xml -func (gl *GL) ReadPixels(x, y, width, height int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl3_3compat_glReadPixels(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glReadBuffer.xml -func (gl *GL) ReadBuffer(mode glbase.Enum) { - C.gl3_3compat_glReadBuffer(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPixelStorei.xml -func (gl *GL) PixelStorei(pname glbase.Enum, param int32) { - C.gl3_3compat_glPixelStorei(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPixelStoref.xml -func (gl *GL) PixelStoref(pname glbase.Enum, param float32) { - C.gl3_3compat_glPixelStoref(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDepthFunc.xml -func (gl *GL) DepthFunc(glfunc glbase.Enum) { - C.gl3_3compat_glDepthFunc(gl.funcs, C.GLenum(glfunc)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glStencilOp.xml -func (gl *GL) StencilOp(fail, zfail, zpass glbase.Enum) { - C.gl3_3compat_glStencilOp(gl.funcs, C.GLenum(fail), C.GLenum(zfail), C.GLenum(zpass)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glStencilFunc.xml -func (gl *GL) StencilFunc(glfunc glbase.Enum, ref int32, mask uint32) { - C.gl3_3compat_glStencilFunc(gl.funcs, C.GLenum(glfunc), C.GLint(ref), C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glLogicOp.xml -func (gl *GL) LogicOp(opcode glbase.Enum) { - C.gl3_3compat_glLogicOp(gl.funcs, C.GLenum(opcode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBlendFunc.xml -func (gl *GL) BlendFunc(sfactor, dfactor glbase.Enum) { - C.gl3_3compat_glBlendFunc(gl.funcs, C.GLenum(sfactor), C.GLenum(dfactor)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFlush.xml -func (gl *GL) Flush() { - C.gl3_3compat_glFlush(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFinish.xml -func (gl *GL) Finish() { - C.gl3_3compat_glFinish(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEnable.xml -func (gl *GL) Enable(cap glbase.Enum) { - C.gl3_3compat_glEnable(gl.funcs, C.GLenum(cap)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDisable.xml -func (gl *GL) Disable(cap glbase.Enum) { - C.gl3_3compat_glDisable(gl.funcs, C.GLenum(cap)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDepthMask.xml -func (gl *GL) DepthMask(flag bool) { - C.gl3_3compat_glDepthMask(gl.funcs, *(*C.GLboolean)(unsafe.Pointer(&flag))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColorMask.xml -func (gl *GL) ColorMask(red, green, blue, alpha bool) { - C.gl3_3compat_glColorMask(gl.funcs, *(*C.GLboolean)(unsafe.Pointer(&red)), *(*C.GLboolean)(unsafe.Pointer(&green)), *(*C.GLboolean)(unsafe.Pointer(&blue)), *(*C.GLboolean)(unsafe.Pointer(&alpha))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glStencilMask.xml -func (gl *GL) StencilMask(mask uint32) { - C.gl3_3compat_glStencilMask(gl.funcs, C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClearDepth.xml -func (gl *GL) ClearDepth(depth float64) { - C.gl3_3compat_glClearDepth(gl.funcs, C.GLdouble(depth)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClearStencil.xml -func (gl *GL) ClearStencil(s int32) { - C.gl3_3compat_glClearStencil(gl.funcs, C.GLint(s)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClearColor.xml -func (gl *GL) ClearColor(red, green, blue, alpha float32) { - C.gl3_3compat_glClearColor(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClear.xml -func (gl *GL) Clear(mask glbase.Bitfield) { - C.gl3_3compat_glClear(gl.funcs, C.GLbitfield(mask)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDrawBuffer.xml -func (gl *GL) DrawBuffer(mode glbase.Enum) { - C.gl3_3compat_glDrawBuffer(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexImage2D.xml -func (gl *GL) TexImage2D(target glbase.Enum, level int, internalFormat int32, width, height, border int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl3_3compat_glTexImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLint(border), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexImage1D.xml -func (gl *GL) TexImage1D(target glbase.Enum, level int, internalFormat int32, width, border int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl3_3compat_glTexImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(internalFormat), C.GLsizei(width), C.GLint(border), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexParameteriv.xml -func (gl *GL) TexParameteriv(target, pname glbase.Enum, params []int32) { - C.gl3_3compat_glTexParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexParameteri.xml -func (gl *GL) TexParameteri(target, pname glbase.Enum, param int32) { - C.gl3_3compat_glTexParameteri(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexParameterfv.xml -func (gl *GL) TexParameterfv(target, pname glbase.Enum, params []float32) { - C.gl3_3compat_glTexParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexParameterf.xml -func (gl *GL) TexParameterf(target, pname glbase.Enum, param float32) { - C.gl3_3compat_glTexParameterf(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glScissor.xml -func (gl *GL) Scissor(x, y, width, height int) { - C.gl3_3compat_glScissor(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPolygonMode.xml -func (gl *GL) PolygonMode(face, mode glbase.Enum) { - C.gl3_3compat_glPolygonMode(gl.funcs, C.GLenum(face), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPointSize.xml -func (gl *GL) PointSize(size float32) { - C.gl3_3compat_glPointSize(gl.funcs, C.GLfloat(size)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glLineWidth.xml -func (gl *GL) LineWidth(width float32) { - C.gl3_3compat_glLineWidth(gl.funcs, C.GLfloat(width)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glHint.xml -func (gl *GL) Hint(target, mode glbase.Enum) { - C.gl3_3compat_glHint(gl.funcs, C.GLenum(target), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFrontFace.xml -func (gl *GL) FrontFace(mode glbase.Enum) { - C.gl3_3compat_glFrontFace(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCullFace.xml -func (gl *GL) CullFace(mode glbase.Enum) { - C.gl3_3compat_glCullFace(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIndexubv.xml -func (gl *GL) Indexubv(c []uint8) { - C.gl3_3compat_glIndexubv(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIndexub.xml -func (gl *GL) Indexub(c uint8) { - C.gl3_3compat_glIndexub(gl.funcs, C.GLubyte(c)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsTexture.xml -func (gl *GL) IsTexture(texture glbase.Texture) bool { - glresult := C.gl3_3compat_glIsTexture(gl.funcs, C.GLuint(texture)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// GenTextures returns n texture names in textures. There is no guarantee -// that the names form a contiguous set of integers; however, it is -// guaranteed that none of the returned names was in use immediately before -// the call to GenTextures. -// -// The generated textures have no dimensionality; they assume the -// dimensionality of the texture target to which they are first bound (see -// BindTexture). -// -// Texture names returned by a call to GenTextures are not returned by -// subsequent calls, unless they are first deleted with DeleteTextures. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// GenTextures is available in GL version 2.0 or greater. -func (gl *GL) GenTextures(n int) []glbase.Texture { - if n == 0 { - return nil - } - textures := make([]glbase.Texture, n) - C.gl3_3compat_glGenTextures(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0]))) - return textures -} - -// DeleteTextures deletes the textures objects whose names are stored -// in the textures slice. After a texture is deleted, it has no contents or -// dimensionality, and its name is free for reuse (for example by -// GenTextures). If a texture that is currently bound is deleted, the binding -// reverts to 0 (the default texture). -// -// DeleteTextures silently ignores 0's and names that do not correspond to -// existing textures. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// DeleteTextures is available in GL version 2.0 or greater. -func (gl *GL) DeleteTextures(textures []glbase.Texture) { - n := len(textures) - if n == 0 { - return - } - C.gl3_3compat_glDeleteTextures(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBindTexture.xml -func (gl *GL) BindTexture(target glbase.Enum, texture glbase.Texture) { - C.gl3_3compat_glBindTexture(gl.funcs, C.GLenum(target), C.GLuint(texture)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexSubImage2D.xml -func (gl *GL) TexSubImage2D(target glbase.Enum, level, xoffset, yoffset, width, height int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl3_3compat_glTexSubImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexSubImage1D.xml -func (gl *GL) TexSubImage1D(target glbase.Enum, level, xoffset, width int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl3_3compat_glTexSubImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLsizei(width), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCopyTexSubImage2D.xml -func (gl *GL) CopyTexSubImage2D(target glbase.Enum, level, xoffset, yoffset, x, y, width, height int) { - C.gl3_3compat_glCopyTexSubImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCopyTexSubImage1D.xml -func (gl *GL) CopyTexSubImage1D(target glbase.Enum, level, xoffset, x, y, width int) { - C.gl3_3compat_glCopyTexSubImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(x), C.GLint(y), C.GLsizei(width)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCopyTexImage2D.xml -func (gl *GL) CopyTexImage2D(target glbase.Enum, level int, internalFormat glbase.Enum, x, y, width, height, border int) { - C.gl3_3compat_glCopyTexImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height), C.GLint(border)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCopyTexImage1D.xml -func (gl *GL) CopyTexImage1D(target glbase.Enum, level int, internalFormat glbase.Enum, x, y, width, border int) { - C.gl3_3compat_glCopyTexImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLint(border)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPolygonOffset.xml -func (gl *GL) PolygonOffset(factor, units float32) { - C.gl3_3compat_glPolygonOffset(gl.funcs, C.GLfloat(factor), C.GLfloat(units)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDrawElements.xml -func (gl *GL) DrawElements(mode glbase.Enum, count int, gltype glbase.Enum, indices interface{}) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl3_3compat_glDrawElements(gl.funcs, C.GLenum(mode), C.GLsizei(count), C.GLenum(gltype), indices_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDrawArrays.xml -func (gl *GL) DrawArrays(mode glbase.Enum, first, count int) { - C.gl3_3compat_glDrawArrays(gl.funcs, C.GLenum(mode), C.GLint(first), C.GLsizei(count)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCopyTexSubImage3D.xml -func (gl *GL) CopyTexSubImage3D(target glbase.Enum, level, xoffset, yoffset int, zoffset int32, x, y, width, height int) { - C.gl3_3compat_glCopyTexSubImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(zoffset), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexSubImage3D.xml -func (gl *GL) TexSubImage3D(target glbase.Enum, level, xoffset, yoffset int, zoffset int32, width, height int, depth int32, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl3_3compat_glTexSubImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(zoffset), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexImage3D.xml -func (gl *GL) TexImage3D(target glbase.Enum, level int, internalFormat int32, width, height int, depth int32, border int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl3_3compat_glTexImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLint(border), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDrawRangeElements.xml -func (gl *GL) DrawRangeElements(mode glbase.Enum, start, end uint32, count int, gltype glbase.Enum, indices interface{}) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl3_3compat_glDrawRangeElements(gl.funcs, C.GLenum(mode), C.GLuint(start), C.GLuint(end), C.GLsizei(count), C.GLenum(gltype), indices_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBlendEquation.xml -func (gl *GL) BlendEquation(mode glbase.Enum) { - C.gl3_3compat_glBlendEquation(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBlendColor.xml -func (gl *GL) BlendColor(red, green, blue, alpha float32) { - C.gl3_3compat_glBlendColor(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetCompressedTexImage.xml -func (gl *GL) GetCompressedTexImage(target glbase.Enum, level int, img interface{}) { - var img_ptr unsafe.Pointer - var img_v = reflect.ValueOf(img) - if img != nil && img_v.Kind() != reflect.Slice { - panic("parameter img must be a slice") - } - if img != nil { - img_ptr = unsafe.Pointer(img_v.Index(0).Addr().Pointer()) - } - C.gl3_3compat_glGetCompressedTexImage(gl.funcs, C.GLenum(target), C.GLint(level), img_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCompressedTexSubImage1D.xml -func (gl *GL) CompressedTexSubImage1D(target glbase.Enum, level, xoffset, width int, format glbase.Enum, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl3_3compat_glCompressedTexSubImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLsizei(width), C.GLenum(format), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCompressedTexSubImage2D.xml -func (gl *GL) CompressedTexSubImage2D(target glbase.Enum, level, xoffset, yoffset, width, height int, format glbase.Enum, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl3_3compat_glCompressedTexSubImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCompressedTexSubImage3D.xml -func (gl *GL) CompressedTexSubImage3D(target glbase.Enum, level, xoffset, yoffset int, zoffset int32, width, height int, depth int32, format glbase.Enum, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl3_3compat_glCompressedTexSubImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(zoffset), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLenum(format), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCompressedTexImage1D.xml -func (gl *GL) CompressedTexImage1D(target glbase.Enum, level int, internalFormat glbase.Enum, width, border, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl3_3compat_glCompressedTexImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLsizei(width), C.GLint(border), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCompressedTexImage2D.xml -func (gl *GL) CompressedTexImage2D(target glbase.Enum, level int, internalFormat glbase.Enum, width, height, border, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl3_3compat_glCompressedTexImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLint(border), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCompressedTexImage3D.xml -func (gl *GL) CompressedTexImage3D(target glbase.Enum, level int, internalFormat glbase.Enum, width, height int, depth int32, border, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl3_3compat_glCompressedTexImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLint(border), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSampleCoverage.xml -func (gl *GL) SampleCoverage(value float32, invert bool) { - C.gl3_3compat_glSampleCoverage(gl.funcs, C.GLfloat(value), *(*C.GLboolean)(unsafe.Pointer(&invert))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glActiveTexture.xml -func (gl *GL) ActiveTexture(texture glbase.Enum) { - C.gl3_3compat_glActiveTexture(gl.funcs, C.GLenum(texture)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPointParameteriv.xml -func (gl *GL) PointParameteriv(pname glbase.Enum, params []int32) { - C.gl3_3compat_glPointParameteriv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPointParameteri.xml -func (gl *GL) PointParameteri(pname glbase.Enum, param int32) { - C.gl3_3compat_glPointParameteri(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPointParameterfv.xml -func (gl *GL) PointParameterfv(pname glbase.Enum, params []float32) { - C.gl3_3compat_glPointParameterfv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPointParameterf.xml -func (gl *GL) PointParameterf(pname glbase.Enum, param float32) { - C.gl3_3compat_glPointParameterf(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiDrawArrays.xml -func (gl *GL) MultiDrawArrays(mode glbase.Enum, first, count []int, drawcount int32) { - C.gl3_3compat_glMultiDrawArrays(gl.funcs, C.GLenum(mode), (*C.GLint)(unsafe.Pointer(&first[0])), (*C.GLsizei)(unsafe.Pointer(&count[0])), C.GLsizei(drawcount)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBlendFuncSeparate.xml -func (gl *GL) BlendFuncSeparate(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha glbase.Enum) { - C.gl3_3compat_glBlendFuncSeparate(gl.funcs, C.GLenum(sfactorRGB), C.GLenum(dfactorRGB), C.GLenum(sfactorAlpha), C.GLenum(dfactorAlpha)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetBufferParameteriv.xml -func (gl *GL) GetBufferParameteriv(target, pname glbase.Enum, params []int32) { - C.gl3_3compat_glGetBufferParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glUnmapBuffer.xml -func (gl *GL) UnmapBuffer(target glbase.Enum) bool { - glresult := C.gl3_3compat_glUnmapBuffer(gl.funcs, C.GLenum(target)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetBufferSubData.xml -func (gl *GL) GetBufferSubData(target glbase.Enum, offset, size int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl3_3compat_glGetBufferSubData(gl.funcs, C.GLenum(target), C.GLintptr(offset), C.GLsizeiptr(size), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBufferSubData.xml -func (gl *GL) BufferSubData(target glbase.Enum, offset, size int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl3_3compat_glBufferSubData(gl.funcs, C.GLenum(target), C.GLintptr(offset), C.GLsizeiptr(size), data_ptr) -} - -// BufferData creates a new data store for the buffer object currently -// bound to target. Any pre-existing data store is deleted. The new data -// store is created with the specified size in bytes and usage. If data is -// not nil, it must be a slice that is used to initialize the data store. -// In that case the size parameter is ignored and the store size will match -// the slice data size. -// -// In its initial state, the new data store is not mapped, it has a NULL -// mapped pointer, and its mapped access is GL.READ_WRITE. -// -// The target constant must be one of GL.ARRAY_BUFFER, GL.COPY_READ_BUFFER, -// GL.COPY_WRITE_BUFFER, GL.ELEMENT_ARRAY_BUFFER, GL.PIXEL_PACK_BUFFER, -// GL.PIXEL_UNPACK_BUFFER, GL.TEXTURE_BUFFER, GL.TRANSFORM_FEEDBACK_BUFFER, -// or GL.UNIFORM_BUFFER. -// -// The usage parameter is a hint to the GL implementation as to how a buffer -// object's data store will be accessed. This enables the GL implementation -// to make more intelligent decisions that may significantly impact buffer -// object performance. It does not, however, constrain the actual usage of -// the data store. usage can be broken down into two parts: first, the -// frequency of access (modification and usage), and second, the nature of -// that access. -// -// A usage frequency of STREAM and nature of DRAW is specified via the -// constant GL.STREAM_DRAW, for example. -// -// The usage frequency of access may be one of: -// -// STREAM -// The data store contents will be modified once and used at most a few times. -// -// STATIC -// The data store contents will be modified once and used many times. -// -// DYNAMIC -// The data store contents will be modified repeatedly and used many times. -// -// The usage nature of access may be one of: -// -// DRAW -// The data store contents are modified by the application, and used as -// the source for GL drawing and image specification commands. -// -// READ -// The data store contents are modified by reading data from the GL, -// and used to return that data when queried by the application. -// -// COPY -// The data store contents are modified by reading data from the GL, -// and used as the source for GL drawing and image specification -// commands. -// -// Clients must align data elements consistent with the requirements of the -// client platform, with an additional base-level requirement that an offset -// within a buffer to a datum comprising N bytes be a multiple of N. -// -// Error GL.INVALID_ENUM is generated if target is not one of the accepted -// buffer targets. GL.INVALID_ENUM is generated if usage is not -// GL.STREAM_DRAW, GL.STREAM_READ, GL.STREAM_COPY, GL.STATIC_DRAW, -// GL.STATIC_READ, GL.STATIC_COPY, GL.DYNAMIC_DRAW, GL.DYNAMIC_READ, or -// GL.DYNAMIC_COPY. GL.INVALID_VALUE is generated if size is negative. -// GL.INVALID_OPERATION is generated if the reserved buffer object name 0 is -// bound to target. GL.OUT_OF_MEMORY is generated if the GL is unable to -// create a data store with the specified size. -func (gl *GL) BufferData(target glbase.Enum, size int, data interface{}, usage glbase.Enum) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - if data != nil { - size = int(data_v.Type().Size()) * data_v.Len() - } - C.gl3_3compat_glBufferData(gl.funcs, C.GLenum(target), C.GLsizeiptr(size), data_ptr, C.GLenum(usage)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsBuffer.xml -func (gl *GL) IsBuffer(buffer glbase.Buffer) bool { - glresult := C.gl3_3compat_glIsBuffer(gl.funcs, C.GLuint(buffer)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// GenBuffers returns n buffer object names. There is no guarantee that -// the names form a contiguous set of integers; however, it is guaranteed -// that none of the returned names was in use immediately before the call to -// GenBuffers. -// -// Buffer object names returned by a call to GenBuffers are not returned by -// subsequent calls, unless they are first deleted with DeleteBuffers. -// -// No buffer objects are associated with the returned buffer object names -// until they are first bound by calling BindBuffer. -// -// Error GL.INVALID_VALUE is generated if n is negative. GL.INVALID_OPERATION -// is generated if GenBuffers is executed between the execution of Begin -// and the corresponding execution of End. -// -// GenBuffers is available in GL version 1.5 or greater. -func (gl *GL) GenBuffers(n int) []glbase.Buffer { - if n == 0 { - return nil - } - buffers := make([]glbase.Buffer, n) - C.gl3_3compat_glGenBuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&buffers[0]))) - return buffers -} - -// DeleteBuffers deletes the buffer objects whose names are stored in the -// buffers slice. -// -// After a buffer object is deleted, it has no contents, and its name is free -// for reuse (for example by GenBuffers). If a buffer object that is -// currently bound is deleted, the binding reverts to 0 (the absence of any -// buffer object, which reverts to client memory usage). -// -// DeleteBuffers silently ignores 0's and names that do not correspond to -// existing buffer objects. -// -// Error GL.INVALID_VALUE is generated if n is negative. GL.INVALID_OPERATION -// is generated if DeleteBuffers is executed between the execution of Begin -// and the corresponding execution of End. -// -// DeleteBuffers is available in GL version 1.5 or greater. -func (gl *GL) DeleteBuffers(buffers []glbase.Buffer) { - n := len(buffers) - if n == 0 { - return - } - C.gl3_3compat_glDeleteBuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&buffers[0]))) -} - -// BindBuffer creates or puts in use a named buffer object. -// Calling BindBuffer with target set to GL.ARRAY_BUFFER, -// GL.ELEMENT_ARRAY_BUFFER, GL.PIXEL_PACK_BUFFER or GL.PIXEL_UNPACK_BUFFER -// and buffer set to the name of the new buffer object binds the buffer -// object name to the target. When a buffer object is bound to a target, the -// previous binding for that target is automatically broken. -// -// Buffer object names are unsigned integers. The value zero is reserved, but -// there is no default buffer object for each buffer object target. Instead, -// buffer set to zero effectively unbinds any buffer object previously bound, -// and restores client memory usage for that buffer object target. Buffer -// object names and the corresponding buffer object contents are local to the -// shared display-list space (see XCreateContext) of the current GL rendering -// context; two rendering contexts share buffer object names only if they -// also share display lists. -// -// GenBuffers may be called to generate a set of new buffer object names. -// -// The state of a buffer object immediately after it is first bound is an -// unmapped zero-sized memory buffer with GL.READ_WRITE access and -// GL.STATIC_DRAW usage. -// -// While a non-zero buffer object name is bound, GL operations on the target -// to which it is bound affect the bound buffer object, and queries of the -// target to which it is bound return state from the bound buffer object. -// While buffer object name zero is bound, as in the initial state, attempts -// to modify or query state on the target to which it is bound generates an -// GL.INVALID_OPERATION error. -// -// When vertex array pointer state is changed, for example by a call to -// NormalPointer, the current buffer object binding (GL.ARRAY_BUFFER_BINDING) -// is copied into the corresponding client state for the vertex array type -// being changed, for example GL.NORMAL_ARRAY_BUFFER_BINDING. While a -// non-zero buffer object is bound to the GL.ARRAY_BUFFER target, the vertex -// array pointer parameter that is traditionally interpreted as a pointer to -// client-side memory is instead interpreted as an offset within the buffer -// object measured in basic machine units. -// -// While a non-zero buffer object is bound to the GL.ELEMENT_ARRAY_BUFFER -// target, the indices parameter of DrawElements, DrawRangeElements, or -// MultiDrawElements that is traditionally interpreted as a pointer to -// client-side memory is instead interpreted as an offset within the buffer -// object measured in basic machine units. -// -// While a non-zero buffer object is bound to the GL.PIXEL_PACK_BUFFER -// target, the following commands are affected: GetCompressedTexImage, -// GetConvolutionFilter, GetHistogram, GetMinmax, GetPixelMap, -// GetPolygonStipple, GetSeparableFilter, GetTexImage, and ReadPixels. The -// pointer parameter that is traditionally interpreted as a pointer to -// client-side memory where the pixels are to be packed is instead -// interpreted as an offset within the buffer object measured in basic -// machine units. -// -// While a non-zero buffer object is bound to the GL.PIXEL_UNPACK_BUFFER -// target, the following commands are affected: Bitmap, ColorSubTable, -// ColorTable, CompressedTexImage1D, CompressedTexImage2D, -// CompressedTexImage3D, CompressedTexSubImage1D, CompressedTexSubImage2D, -// CompressedTexSubImage3D, ConvolutionFilter1D, ConvolutionFilter2D, -// DrawPixels, PixelMap, PolygonStipple, SeparableFilter2D, TexImage1D, -// TexImage2D, TexImage3D, TexSubImage1D, TexSubImage2D, and TexSubImage3D. -// The pointer parameter that is traditionally interpreted as a pointer to -// client-side memory from which the pixels are to be unpacked is instead -// interpreted as an offset within the buffer object measured in basic -// machine units. -// -// A buffer object binding created with BindBuffer remains active until a -// different buffer object name is bound to the same target, or until the -// bound buffer object is deleted with DeleteBuffers. -// -// Once created, a named buffer object may be re-bound to any target as often -// as needed. However, the GL implementation may make choices about how to -// optimize the storage of a buffer object based on its initial binding -// target. -// -// Error GL.INVALID_ENUM is generated if target is not one of the allowable -// values. GL.INVALID_OPERATION is generated if BindBuffer is executed -// between the execution of Begin and the corresponding execution of End. -// -// BindBuffer is available in GL version 1.5 or greater. -func (gl *GL) BindBuffer(target glbase.Enum, buffer glbase.Buffer) { - C.gl3_3compat_glBindBuffer(gl.funcs, C.GLenum(target), C.GLuint(buffer)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetQueryObjectuiv.xml -func (gl *GL) GetQueryObjectuiv(id uint32, pname glbase.Enum, params []uint32) { - C.gl3_3compat_glGetQueryObjectuiv(gl.funcs, C.GLuint(id), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetQueryObjectiv.xml -func (gl *GL) GetQueryObjectiv(id uint32, pname glbase.Enum, params []int32) { - C.gl3_3compat_glGetQueryObjectiv(gl.funcs, C.GLuint(id), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetQueryiv.xml -func (gl *GL) GetQueryiv(target, pname glbase.Enum, params []int32) { - C.gl3_3compat_glGetQueryiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEndQuery.xml -func (gl *GL) EndQuery(target glbase.Enum) { - C.gl3_3compat_glEndQuery(gl.funcs, C.GLenum(target)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBeginQuery.xml -func (gl *GL) BeginQuery(target glbase.Enum, id uint32) { - C.gl3_3compat_glBeginQuery(gl.funcs, C.GLenum(target), C.GLuint(id)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsQuery.xml -func (gl *GL) IsQuery(id uint32) bool { - glresult := C.gl3_3compat_glIsQuery(gl.funcs, C.GLuint(id)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDeleteQueries.xml -func (gl *GL) DeleteQueries(n int, ids []uint32) { - C.gl3_3compat_glDeleteQueries(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&ids[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGenQueries.xml -func (gl *GL) GenQueries(n int, ids []uint32) { - C.gl3_3compat_glGenQueries(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&ids[0]))) -} - -// VertexAttribPointer specifies the location and data format of the array -// of generic vertex attributes at index to use when rendering. size -// specifies the number of components per attribute and must be 1, 2, 3, or -// 4. type specifies the data type of each component, and stride specifies -// the byte stride from one attribute to the next, allowing vertices and -// attributes to be packed into a single array or stored in separate arrays. -// normalized indicates whether the values stored in an integer format are -// to be mapped to the range [-1,1] (for signed values) or [0,1] -// (for unsigned values) when they are accessed and converted to floating -// point; otherwise, values will be converted to floats directly without -// normalization. offset is a byte offset into the buffer object's data -// store, which must be bound to the GL.ARRAY_BUFFER target with BindBuffer. -// -// The buffer object binding (GL.ARRAY_BUFFER_BINDING) is saved as -// generic vertex attribute array client-side state -// (GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING) for the provided index. -// -// To enable and disable a generic vertex attribute array, call -// EnableVertexAttribArray and DisableVertexAttribArray with index. If -// enabled, the generic vertex attribute array is used when DrawArrays or -// DrawElements is called. Each generic vertex attribute array is initially -// disabled. -// -// VertexAttribPointer is typically implemented on the client side. -// -// Error GL.INVALID_ENUM is generated if type is not an accepted value. -// GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. GL.INVALID_VALUE is generated if size is not 1, 2, -// 3, or 4. GL.INVALID_VALUE is generated if stride is negative. -func (gl *GL) VertexAttribPointer(index glbase.Attrib, size int, gltype glbase.Enum, normalized bool, stride int, offset uintptr) { - offset_ptr := unsafe.Pointer(offset) - C.gl3_3compat_glVertexAttribPointer(gl.funcs, C.GLuint(index), C.GLint(size), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), C.GLsizei(stride), offset_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glValidateProgram.xml -func (gl *GL) ValidateProgram(program glbase.Program) { - C.gl3_3compat_glValidateProgram(gl.funcs, C.GLuint(program)) -} - -// UniformMatrix4fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix4fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix4fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(4*4) != 0 { - panic("invalid value length for UniformMatrix4fv") - } - count := len(value) / (4 * 4) - C.gl3_3compat_glUniformMatrix4fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix3fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix3fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix3fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(3*3) != 0 { - panic("invalid value length for UniformMatrix3fv") - } - count := len(value) / (3 * 3) - C.gl3_3compat_glUniformMatrix3fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix2fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix2fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix2fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(2*2) != 0 { - panic("invalid value length for UniformMatrix2fv") - } - count := len(value) / (2 * 2) - C.gl3_3compat_glUniformMatrix2fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform4iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform4iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - if len(value)%4 != 0 { - panic("invalid value length for Uniform4iv") - } - count := len(value) / 4 - C.gl3_3compat_glUniform4iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// Uniform3iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform3iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - if len(value)%3 != 0 { - panic("invalid value length for Uniform3iv") - } - count := len(value) / 3 - C.gl3_3compat_glUniform3iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// Uniform2iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform2iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - if len(value)%2 != 0 { - panic("invalid value length for Uniform2iv") - } - count := len(value) / 2 - C.gl3_3compat_glUniform2iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// Uniform1iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform1iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - count := len(value) - C.gl3_3compat_glUniform1iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// Uniform4fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform4fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - if len(value)%4 != 0 { - panic("invalid value length for Uniform4fv") - } - count := len(value) / 4 - C.gl3_3compat_glUniform4fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform3fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform3fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - if len(value)%3 != 0 { - panic("invalid value length for Uniform3fv") - } - count := len(value) / 3 - C.gl3_3compat_glUniform3fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform2fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform2fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - if len(value)%2 != 0 { - panic("invalid value length for Uniform2fv") - } - count := len(value) / 2 - C.gl3_3compat_glUniform2fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform1fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform1fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - count := len(value) - C.gl3_3compat_glUniform1fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform4i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform4i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4i(location glbase.Uniform, v0, v1, v2, v3 int32) { - C.gl3_3compat_glUniform4i(gl.funcs, C.GLint(location), C.GLint(v0), C.GLint(v1), C.GLint(v2), C.GLint(v3)) -} - -// Uniform3i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform3i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3i(location glbase.Uniform, v0, v1, v2 int32) { - C.gl3_3compat_glUniform3i(gl.funcs, C.GLint(location), C.GLint(v0), C.GLint(v1), C.GLint(v2)) -} - -// Uniform2i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform2i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2i(location glbase.Uniform, v0, v1 int32) { - C.gl3_3compat_glUniform2i(gl.funcs, C.GLint(location), C.GLint(v0), C.GLint(v1)) -} - -// Uniform1i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform1i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1i(location glbase.Uniform, v0 int32) { - C.gl3_3compat_glUniform1i(gl.funcs, C.GLint(location), C.GLint(v0)) -} - -// Uniform4f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform4f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4f(location glbase.Uniform, v0, v1, v2, v3 float32) { - C.gl3_3compat_glUniform4f(gl.funcs, C.GLint(location), C.GLfloat(v0), C.GLfloat(v1), C.GLfloat(v2), C.GLfloat(v3)) -} - -// Uniform3f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform3f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3f(location glbase.Uniform, v0, v1, v2 float32) { - C.gl3_3compat_glUniform3f(gl.funcs, C.GLint(location), C.GLfloat(v0), C.GLfloat(v1), C.GLfloat(v2)) -} - -// Uniform2f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform2f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2f(location glbase.Uniform, v0, v1 float32) { - C.gl3_3compat_glUniform2f(gl.funcs, C.GLint(location), C.GLfloat(v0), C.GLfloat(v1)) -} - -// Uniform1f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform1f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1f(location glbase.Uniform, v0 float32) { - C.gl3_3compat_glUniform1f(gl.funcs, C.GLint(location), C.GLfloat(v0)) -} - -// UseProgram installs the program object specified by program as part of -// current rendering state. One or more executables are created in a program -// object by successfully attaching shader objects to it with AttachShader, -// successfully compiling the shader objects with CompileShader, and -// successfully linking the program object with LinkProgram. -// -// A program object will contain an executable that will run on the vertex -// processor if it contains one or more shader objects of type -// GL.VERTEX_SHADER that have been successfully compiled and linked. -// Similarly, a program object will contain an executable that will run on -// the fragment processor if it contains one or more shader objects of type -// GL.FRAGMENT_SHADER that have been successfully compiled and linked. -// -// Successfully installing an executable on a programmable processor will -// cause the corresponding fixed functionality of OpenGL to be disabled. -// Specifically, if an executable is installed on the vertex processor, the -// OpenGL fixed functionality will be disabled as follows. -// -// - The modelview matrix is not applied to vertex coordinates. -// -// - The projection matrix is not applied to vertex coordinates. -// -// - The texture matrices are not applied to texture coordinates. -// -// - Normals are not transformed to eye coordinates. -// -// - Normals are not rescaled or normalized. -// -// - Normalization of GL.AUTO_NORMAL evaluated normals is not performed. -// -// - Texture coordinates are not generated automatically. -// -// - Per-vertex lighting is not performed. -// -// - Color material computations are not performed. -// -// - Color index lighting is not performed. -// -// - This list also applies when setting the current raster position. -// -// The executable that is installed on the vertex processor is expected to -// implement any or all of the desired functionality from the preceding list. -// Similarly, if an executable is installed on the fragment processor, the -// OpenGL fixed functionality will be disabled as follows. -// -// - Texture environment and texture functions are not applied. -// -// - Texture application is not applied. -// -// - Color sum is not applied. -// -// - Fog is not applied. -// -// Again, the fragment shader that is installed is expected to implement any -// or all of the desired functionality from the preceding list. -// -// While a program object is in use, applications are free to modify attached -// shader objects, compile attached shader objects, attach additional shader -// objects, and detach or delete shader objects. None of these operations -// will affect the executables that are part of the current state. However, -// relinking the program object that is currently in use will install the -// program object as part of the current rendering state if the link -// operation was successful (see LinkProgram). If the program object -// currently in use is relinked unsuccessfully, its link status will be set -// to GL.FALSE, but the executables and associated state will remain part of -// the current state until a subsequent call to UseProgram removes it from -// use. After it is removed from use, it cannot be made part of current state -// until it has been successfully relinked. -// -// If program contains shader objects of type GL.VERTEX_SHADER but it does -// not contain shader objects of type GL.FRAGMENT_SHADER, an executable will -// be installed on the vertex processor, but fixed functionality will be used -// for fragment processing. Similarly, if program contains shader objects of -// type GL.FRAGMENT_SHADER but it does not contain shader objects of type -// GL.VERTEX_SHADER, an executable will be installed on the fragment -// processor, but fixed functionality will be used for vertex processing. If -// program is 0, the programmable processors will be disabled, and fixed -// functionality will be used for both vertex and fragment processing. -// -// While a program object is in use, the state that controls the disabled -// fixed functionality may also be updated using the normal OpenGL calls. -// -// Like display lists and texture objects, the name space for program objects -// may be shared across a set of contexts, as long as the server sides of the -// contexts share the same address space. If the name space is shared across -// contexts, any attached objects and the data associated with those attached -// objects are shared as well. -// -// Applications are responsible for providing the synchronization across API -// calls when objects are accessed from different execution threads. -// -// Error GL.INVALID_VALUE is generated if program is neither 0 nor a value -// generated by OpenGL. GL.INVALID_OPERATION is generated if program is not -// a program object. GL.INVALID_OPERATION is generated if program could not -// be made part of current state. GL.INVALID_OPERATION is generated if -// UseProgram is executed between the execution of Begin and the -// corresponding execution of End. -// -// UseProgram is available in GL version 2.0 or greater. -func (gl *GL) UseProgram(program glbase.Program) { - C.gl3_3compat_glUseProgram(gl.funcs, C.GLuint(program)) -} - -// ShaderSource sets the source code in shader to the provided source code. Any source -// code previously stored in the shader object is completely replaced. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader is not a shader -// object. GL.INVALID_VALUE is generated if count is less than 0. -// GL.INVALID_OPERATION is generated if ShaderSource is executed between the -// execution of Begin and the corresponding execution of End. -// -// ShaderSource is available in GL version 2.0 or greater. -func (gl *GL) ShaderSource(shader glbase.Shader, source ...string) { - count := len(source) - length := make([]int32, count) - source_c := make([]unsafe.Pointer, count) - for i, src := range source { - length[i] = int32(len(src)) - if len(src) > 0 { - source_c[i] = *(*unsafe.Pointer)(unsafe.Pointer(&src)) - } else { - source_c[i] = unsafe.Pointer(uintptr(0)) - } - } - C.gl3_3compat_glShaderSource(gl.funcs, C.GLuint(shader), C.GLsizei(count), (**C.GLchar)(unsafe.Pointer(&source_c[0])), (*C.GLint)(unsafe.Pointer(&length[0]))) -} - -// LinkProgram links the program object specified by program. If any shader -// objects of type GL.VERTEX_SHADER are attached to program, they will be -// used to create an executable that will run on the programmable vertex -// processor. If any shader objects of type GL.FRAGMENT_SHADER are attached -// to program, they will be used to create an executable that will run on the -// programmable fragment processor. -// -// The status of the link operation will be stored as part of the program -// object's state. This value will be set to GL.TRUE if the program object -// was linked without errors and is ready for use, and GL.FALSE otherwise. It -// can be queried by calling GetProgramiv with arguments program and -// GL.LINK_STATUS. -// -// As a result of a successful link operation, all active user-defined -// uniform variables belonging to program will be initialized to 0, and each -// of the program object's active uniform variables will be assigned a -// location that can be queried by calling GetUniformLocation. Also, any -// active user-defined attribute variables that have not been bound to a -// generic vertex attribute index will be bound to one at this time. -// -// Linking of a program object can fail for a number of reasons as specified -// in the OpenGL Shading Language Specification. The following lists some of -// the conditions that will cause a link error. -// -// - The number of active attribute variables supported by the -// implementation has been exceeded. -// -// - The storage limit for uniform variables has been exceeded. -// -// - The number of active uniform variables supported by the implementation -// has been exceeded. -// -// - The main function is missing for the vertex shader or the fragment -// shader. -// -// - A varying variable actually used in the fragment shader is not -// declared in the same way (or is not declared at all) in the vertex -// shader. -// -// - A reference to a function or variable name is unresolved. -// -// - A shared global is declared with two different types or two different -// initial values. -// -// - One or more of the attached shader objects has not been successfully -// compiled. -// -// - Binding a generic attribute matrix caused some rows of the matrix to -// fall outside the allowed maximum of GL.MAX_VERTEX_ATTRIBS. -// -// - Not enough contiguous vertex attribute slots could be found to bind -// attribute matrices. -// -// When a program object has been successfully linked, the program object can -// be made part of current state by calling UseProgram. Whether or not the -// link operation was successful, the program object's information log will -// be overwritten. The information log can be retrieved by calling -// GetProgramInfoLog. -// -// LinkProgram will also install the generated executables as part of the -// current rendering state if the link operation was successful and the -// specified program object is already currently in use as a result of a -// previous call to UseProgram. If the program object currently in use is -// relinked unsuccessfully, its link status will be set to GL.FALSE , but the -// executables and associated state will remain part of the current state -// until a subsequent call to UseProgram removes it from use. After it is -// removed from use, it cannot be made part of current state until it has -// been successfully relinked. -// -// If program contains shader objects of type GL.VERTEX_SHADER but does not -// contain shader objects of type GL.FRAGMENT_SHADER, the vertex shader will -// be linked against the implicit interface for fixed functionality fragment -// processing. Similarly, if program contains shader objects of type -// GL.FRAGMENT_SHADER but it does not contain shader objects of type -// GL.VERTEX_SHADER, the fragment shader will be linked against the implicit -// interface for fixed functionality vertex processing. -// -// The program object's information log is updated and the program is -// generated at the time of the link operation. After the link operation, -// applications are free to modify attached shader objects, compile attached -// shader objects, detach shader objects, delete shader objects, and attach -// additional shader objects. None of these operations affects the -// information log or the program that is part of the program object. -// -// If the link operation is unsuccessful, any information about a previous -// link operation on program is lost (a failed link does not restore the -// old state of program). Certain information can still be retrieved -// from program even after an unsuccessful link operation. See for instance -// GetActiveAttrib and GetActiveUniform. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program -// object. GL.INVALID_OPERATION is generated if LinkProgram is executed -// between the execution of Begin and the corresponding execution of End. -// -// LinkProgram is available in GL version 2.0 or greater. -func (gl *GL) LinkProgram(program glbase.Program) { - C.gl3_3compat_glLinkProgram(gl.funcs, C.GLuint(program)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsShader.xml -func (gl *GL) IsShader(shader glbase.Shader) bool { - glresult := C.gl3_3compat_glIsShader(gl.funcs, C.GLuint(shader)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsProgram.xml -func (gl *GL) IsProgram(program glbase.Program) bool { - glresult := C.gl3_3compat_glIsProgram(gl.funcs, C.GLuint(program)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// GetVertexAttribiv returns in params the value of a generic vertex attribute -// parameter. The generic vertex attribute to be queried is specified by -// index, and the parameter to be queried is specified by pname. -// -// The accepted parameter names are as follows: -// -// GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING -// params returns a single value, the name of the buffer object -// currently bound to the binding point corresponding to generic vertex -// attribute array index. If no buffer object is bound, 0 is returned. -// The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_ENABLED -// params returns a single value that is non-zero (true) if the vertex -// attribute array for index is enabled and 0 (false) if it is -// disabled. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_SIZE -// params returns a single value, the size of the vertex attribute -// array for index. The size is the number of values for each element -// of the vertex attribute array, and it will be 1, 2, 3, or 4. The -// initial value is 4. -// -// GL.VERTEX_ATTRIB_ARRAY_STRIDE -// params returns a single value, the array stride for (number of bytes -// between successive elements in) the vertex attribute array for -// index. A value of 0 indicates that the array elements are stored -// sequentially in memory. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_TYPE -// params returns a single value, a symbolic constant indicating the -// array type for the vertex attribute array for index. Possible values -// are GL.BYTE, GL.UNSIGNED_BYTE, GL.SHORT, GL.UNSIGNED_SHORT, GL.INT, -// GL.UNSIGNED_INT, GL.FLOAT, and GL.DOUBLE. The initial value is -// GL.FLOAT. -// -// GL.VERTEX_ATTRIB_ARRAY_NORMALIZED -// params returns a single value that is non-zero (true) if fixed-point -// data types for the vertex attribute array indicated by index are -// normalized when they are converted to floating point, and 0 (false) -// otherwise. The initial value is 0. -// -// GL.CURRENT_VERTEX_ATTRIB -// params returns four values that represent the current value for the -// generic vertex attribute specified by index. Generic vertex -// attribute 0 is unique in that it has no current state, so an error -// will be generated if index is 0. The initial value for all other -// generic vertex attributes is (0,0,0,1). -// -// All of the parameters except GL.CURRENT_VERTEX_ATTRIB represent -// client-side state. -// -// Error GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. GL.INVALID_ENUM is generated if pname is not an -// accepted value. GL.INVALID_OPERATION is generated if index is 0 and pname -// is GL.CURRENT_VERTEX_ATTRIB. -// -// GetVertexAttribiv is available in GL version 2.0 or greater. -func (gl *GL) GetVertexAttribiv(index glbase.Attrib, pname glbase.Enum, params []int32) { - var params_c [4]int32 - C.gl3_3compat_glGetVertexAttribiv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetVertexAttribfv returns in params the value of a generic vertex attribute -// parameter. The generic vertex attribute to be queried is specified by -// index, and the parameter to be queried is specified by pname. -// -// The accepted parameter names are as follows: -// -// GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING -// params returns a single value, the name of the buffer object -// currently bound to the binding point corresponding to generic vertex -// attribute array index. If no buffer object is bound, 0 is returned. -// The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_ENABLED -// params returns a single value that is non-zero (true) if the vertex -// attribute array for index is enabled and 0 (false) if it is -// disabled. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_SIZE -// params returns a single value, the size of the vertex attribute -// array for index. The size is the number of values for each element -// of the vertex attribute array, and it will be 1, 2, 3, or 4. The -// initial value is 4. -// -// GL.VERTEX_ATTRIB_ARRAY_STRIDE -// params returns a single value, the array stride for (number of bytes -// between successive elements in) the vertex attribute array for -// index. A value of 0 indicates that the array elements are stored -// sequentially in memory. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_TYPE -// params returns a single value, a symbolic constant indicating the -// array type for the vertex attribute array for index. Possible values -// are GL.BYTE, GL.UNSIGNED_BYTE, GL.SHORT, GL.UNSIGNED_SHORT, GL.INT, -// GL.UNSIGNED_INT, GL.FLOAT, and GL.DOUBLE. The initial value is -// GL.FLOAT. -// -// GL.VERTEX_ATTRIB_ARRAY_NORMALIZED -// params returns a single value that is non-zero (true) if fixed-point -// data types for the vertex attribute array indicated by index are -// normalized when they are converted to floating point, and 0 (false) -// otherwise. The initial value is 0. -// -// GL.CURRENT_VERTEX_ATTRIB -// params returns four values that represent the current value for the -// generic vertex attribute specified by index. Generic vertex -// attribute 0 is unique in that it has no current state, so an error -// will be generated if index is 0. The initial value for all other -// generic vertex attributes is (0,0,0,1). -// -// All of the parameters except GL.CURRENT_VERTEX_ATTRIB represent -// client-side state. -// -// Error GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. GL.INVALID_ENUM is generated if pname is not an -// accepted value. GL.INVALID_OPERATION is generated if index is 0 and pname -// is GL.CURRENT_VERTEX_ATTRIB. -// -// GetVertexAttribfv is available in GL version 2.0 or greater. -func (gl *GL) GetVertexAttribfv(index glbase.Attrib, pname glbase.Enum, params []float32) { - var params_c [4]float32 - C.gl3_3compat_glGetVertexAttribfv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetVertexAttribdv returns in params the value of a generic vertex attribute -// parameter. The generic vertex attribute to be queried is specified by -// index, and the parameter to be queried is specified by pname. -// -// The accepted parameter names are as follows: -// -// GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING -// params returns a single value, the name of the buffer object -// currently bound to the binding point corresponding to generic vertex -// attribute array index. If no buffer object is bound, 0 is returned. -// The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_ENABLED -// params returns a single value that is non-zero (true) if the vertex -// attribute array for index is enabled and 0 (false) if it is -// disabled. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_SIZE -// params returns a single value, the size of the vertex attribute -// array for index. The size is the number of values for each element -// of the vertex attribute array, and it will be 1, 2, 3, or 4. The -// initial value is 4. -// -// GL.VERTEX_ATTRIB_ARRAY_STRIDE -// params returns a single value, the array stride for (number of bytes -// between successive elements in) the vertex attribute array for -// index. A value of 0 indicates that the array elements are stored -// sequentially in memory. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_TYPE -// params returns a single value, a symbolic constant indicating the -// array type for the vertex attribute array for index. Possible values -// are GL.BYTE, GL.UNSIGNED_BYTE, GL.SHORT, GL.UNSIGNED_SHORT, GL.INT, -// GL.UNSIGNED_INT, GL.FLOAT, and GL.DOUBLE. The initial value is -// GL.FLOAT. -// -// GL.VERTEX_ATTRIB_ARRAY_NORMALIZED -// params returns a single value that is non-zero (true) if fixed-point -// data types for the vertex attribute array indicated by index are -// normalized when they are converted to floating point, and 0 (false) -// otherwise. The initial value is 0. -// -// GL.CURRENT_VERTEX_ATTRIB -// params returns four values that represent the current value for the -// generic vertex attribute specified by index. Generic vertex -// attribute 0 is unique in that it has no current state, so an error -// will be generated if index is 0. The initial value for all other -// generic vertex attributes is (0,0,0,1). -// -// All of the parameters except GL.CURRENT_VERTEX_ATTRIB represent -// client-side state. -// -// Error GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. GL.INVALID_ENUM is generated if pname is not an -// accepted value. GL.INVALID_OPERATION is generated if index is 0 and pname -// is GL.CURRENT_VERTEX_ATTRIB. -// -// GetVertexAttribdv is available in GL version 2.0 or greater. -func (gl *GL) GetVertexAttribdv(index glbase.Attrib, pname glbase.Enum, params []float64) { - var params_c [4]float64 - C.gl3_3compat_glGetVertexAttribdv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetUniformiv returns in params the value of the specified uniform -// variable. The type of the uniform variable specified by location -// determines the number of values returned. If the uniform variable is -// defined in the shader as a boolean, int, or float, a single value will be -// returned. If it is defined as a vec2, ivec2, or bvec2, two values will be -// returned. If it is defined as a vec3, ivec3, or bvec3, three values will -// be returned, and so on. To query values stored in uniform variables -// declared as arrays, call GetUniformiv for each element of the array. To -// query values stored in uniform variables declared as structures, call -// GetUniformiv for each field in the structure. The values for uniform -// variables declared as a matrix will be returned in column major order. -// -// The locations assigned to uniform variables are not known until the -// program object is linked. After linking has occurred, the command -// GetUniformLocation can be used to obtain the location of a uniform -// variable. This location value can then be passed to GetUniformiv in order -// to query the current value of the uniform variable. After a program object -// has been linked successfully, the index values for uniform variables -// remain fixed until the next link command occurs. The uniform variable -// values can only be queried after a link if the link was successful. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program -// object. GL.INVALID_OPERATION is generated if program has not been -// successfully linked. GL.INVALID_OPERATION is generated if location does -// not correspond to a valid uniform variable location for the specified -// program object. GL.INVALID_OPERATION is generated if GetUniformiv is -// executed between the execution of Begin and the corresponding execution of -// End. -// -// GetUniformiv is available in GL version 2.0 or greater. -func (gl *GL) GetUniformiv(program glbase.Program, location glbase.Uniform, params []int32) { - var params_c [4]int32 - C.gl3_3compat_glGetUniformiv(gl.funcs, C.GLuint(program), C.GLint(location), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetUniformfv returns in params the value of the specified uniform -// variable. The type of the uniform variable specified by location -// determines the number of values returned. If the uniform variable is -// defined in the shader as a boolean, int, or float, a single value will be -// returned. If it is defined as a vec2, ivec2, or bvec2, two values will be -// returned. If it is defined as a vec3, ivec3, or bvec3, three values will -// be returned, and so on. To query values stored in uniform variables -// declared as arrays, call GetUniformfv for each element of the array. To -// query values stored in uniform variables declared as structures, call -// GetUniformfv for each field in the structure. The values for uniform -// variables declared as a matrix will be returned in column major order. -// -// The locations assigned to uniform variables are not known until the -// program object is linked. After linking has occurred, the command -// GetUniformLocation can be used to obtain the location of a uniform -// variable. This location value can then be passed to GetUniformfv in order -// to query the current value of the uniform variable. After a program object -// has been linked successfully, the index values for uniform variables -// remain fixed until the next link command occurs. The uniform variable -// values can only be queried after a link if the link was successful. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program -// object. GL.INVALID_OPERATION is generated if program has not been -// successfully linked. GL.INVALID_OPERATION is generated if location does -// not correspond to a valid uniform variable location for the specified -// program object. GL.INVALID_OPERATION is generated if GetUniformfv is -// executed between the execution of Begin and the corresponding execution of -// End. -// -// GetUniformfv is available in GL version 2.0 or greater. -func (gl *GL) GetUniformfv(program glbase.Program, location glbase.Uniform, params []float32) { - var params_c [4]float32 - C.gl3_3compat_glGetUniformfv(gl.funcs, C.GLuint(program), C.GLint(location), (*C.GLfloat)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetUniformLocation returns an integer that represents the location of a -// specific uniform variable within a program object. name must be an active -// uniform variable name in program that is not a structure, an array of -// structures, or a subcomponent of a vector or a matrix. This function -// returns -1 if name does not correspond to an active uniform variable in -// program or if name starts with the reserved prefix "gl_". -// -// Uniform variables that are structures or arrays of structures may be -// queried by calling GetUniformLocation for each field within the -// structure. The array element operator "[]" and the structure field -// operator "." may be used in name in order to select elements within an -// array or fields within a structure. The result of using these operators is -// not allowed to be another structure, an array of structures, or a -// subcomponent of a vector or a matrix. Except if the last part of name -// indicates a uniform variable array, the location of the first element of -// an array can be retrieved by using the name of the array, or by using the -// name appended by "[0]". -// -// The actual locations assigned to uniform variables are not known until the -// program object is linked successfully. After linking has occurred, the -// command GetUniformLocation can be used to obtain the location of a -// uniform variable. This location value can then be passed to Uniform to -// set the value of the uniform variable or to GetUniform in order to query -// the current value of the uniform variable. After a program object has been -// linked successfully, the index values for uniform variables remain fixed -// until the next link command occurs. Uniform variable locations and values -// can only be queried after a link if the link was successful. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program object. -// GL.INVALID_OPERATION is generated if program has not been successfully -// linked. GL.INVALID_OPERATION is generated if GetUniformLocation is executed -// between the execution of Begin and the corresponding execution of End. -// -// GetUniformLocation is available in GL version 2.0 or greater. -func (gl *GL) GetUniformLocation(program glbase.Program, name string) glbase.Uniform { - name_cstr := C.CString(name) - glresult := C.gl3_3compat_glGetUniformLocation(gl.funcs, C.GLuint(program), (*C.GLchar)(name_cstr)) - C.free(unsafe.Pointer(name_cstr)) - return glbase.Uniform(glresult) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetShaderSource.xml -func (gl *GL) GetShaderSource(shader glbase.Shader, bufSize int32, length []int32, source []byte) { - C.gl3_3compat_glGetShaderSource(gl.funcs, C.GLuint(shader), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLchar)(unsafe.Pointer(&source[0]))) -} - -// GetShaderInfoLog returns the information log for the specified shader -// object. The information log for a shader object is modified when the -// shader is compiled. -// -// The information log for a shader object is a string that may contain -// diagnostic messages, warning messages, and other information about the -// last compile operation. When a shader object is created, its information -// log will be a string of length 0, and the size of the current log can be -// obtained by calling GetShaderiv with the value GL.INFO_LOG_LENGTH. -// -// The information log for a shader object is the OpenGL implementer's -// primary mechanism for conveying information about the compilation process. -// Therefore, the information log can be helpful to application developers -// during the development process, even when compilation is successful. -// Application developers should not expect different OpenGL implementations -// to produce identical information logs. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader is not a shader -// object. GL.INVALID_VALUE is generated if maxLength is less than 0. -// GL.INVALID_OPERATION is generated if GetShaderInfoLog is executed -// between the execution of Begin and the corresponding execution of End. -// -// GetShaderInfoLog is available in GL version 2.0 or greater. -func (gl *GL) GetShaderInfoLog(shader glbase.Shader) []byte { - var params [1]int32 - var length int32 - gl.GetShaderiv(shader, INFO_LOG_LENGTH, params[:]) - bufSize := params[0] - infoLog := make([]byte, int(bufSize)) - C.gl3_3compat_glGetShaderInfoLog(gl.funcs, C.GLuint(shader), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length)), (*C.GLchar)(unsafe.Pointer(&infoLog[0]))) - return infoLog -} - -// GetShaderiv GetShader returns in params the value of a parameter for a specific -// shader object. The following parameters are defined: -// -// GL.SHADER_TYPE -// params returns GL.VERTEX_SHADER if shader is a vertex shader object, -// and GL.FRAGMENT_SHADER if shader is a fragment shader object. -// -// GL.DELETE_STATUS -// params returns GL.TRUE if shader is currently flagged for deletion, -// and GL.FALSE otherwise. -// -// GL.COMPILE_STATUS -// params returns GL.TRUE if the last compile operation on shader was -// successful, and GL.FALSE otherwise. -// -// GL.INFO_LOG_LENGTH -// params returns the number of characters in the information log for -// shader including the null termination character (the size of the -// character buffer required to store the information log). If shader has -// no information log, a value of 0 is returned. -// -// GL.SHADER_SOURCE_LENGTH -// params returns the length of the concatenation of the source strings -// that make up the shader source for the shader, including the null -// termination character. (the size of the character buffer -// required to store the shader source). If no source code exists, 0 is -// returned. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader does not refer to a -// shader object. GL.INVALID_ENUM is generated if pname is not an accepted -// value. GL.INVALID_OPERATION is generated if GetShader is executed -// between the execution of Begin and the corresponding execution of End. -// -// GetShaderiv is available in GL version 2.0 or greater. -func (gl *GL) GetShaderiv(shader glbase.Shader, pname glbase.Enum, params []int32) { - var params_c [4]int32 - C.gl3_3compat_glGetShaderiv(gl.funcs, C.GLuint(shader), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetProgramInfoLog returns the information log for the specified program -// object. The information log for a program object is modified when the -// program object is linked or validated. -// -// The information log for a program object is either an empty string, or a -// string containing information about the last link operation, or a string -// containing information about the last validation operation. It may contain -// diagnostic messages, warning messages, and other information. When a -// program object is created, its information log will be a string of length -// 0, and the size of the current log can be obtained by calling GetProgramiv -// with the value GL.INFO_LOG_LENGTH. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated -// by OpenGL. GL.INVALID_OPERATION is generated if program is not a -// program object. -func (gl *GL) GetProgramInfoLog(program glbase.Program) []byte { - var params [1]int32 - var length int32 - gl.GetProgramiv(program, INFO_LOG_LENGTH, params[:]) - bufSize := params[0] - infoLog := make([]byte, int(bufSize)) - C.gl3_3compat_glGetProgramInfoLog(gl.funcs, C.GLuint(program), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length)), (*C.GLchar)(unsafe.Pointer(&infoLog[0]))) - return infoLog -} - -// GetProgramiv returns in params the value of a parameter for a specific -// program object. The following parameters are defined: -// -// GL.DELETE_STATUS -// params returns GL.TRUE if program is currently flagged for deletion, -// and GL.FALSE otherwise. -// -// GL.LINK_STATUS -// params returns GL.TRUE if the last link operation on program was -// successful, and GL.FALSE otherwise. -// -// GL.VALIDATE_STATUS -// params returns GL.TRUE or if the last validation operation on -// program was successful, and GL.FALSE otherwise. -// -// GL.INFO_LOG_LENGTH -// params returns the number of characters in the information log for -// program including the null termination character (the size of -// the character buffer required to store the information log). If -// program has no information log, a value of 0 is returned. -// -// GL.ATTACHED_SHADERS -// params returns the number of shader objects attached to program. -// -// GL.ACTIVE_ATTRIBUTES -// params returns the number of active attribute variables for program. -// -// GL.ACTIVE_ATTRIBUTE_MAX_LENGTH -// params returns the length of the longest active attribute name for -// program, including the null termination character (the size of -// the character buffer required to store the longest attribute name). -// If no active attributes exist, 0 is returned. -// -// GL.ACTIVE_UNIFORMS -// params returns the number of active uniform variables for program. -// -// GL.ACTIVE_UNIFORM_MAX_LENGTH -// params returns the length of the longest active uniform variable -// name for program, including the null termination character (i.e., -// the size of the character buffer required to store the longest -// uniform variable name). If no active uniform variables exist, 0 is -// returned. -// -// GL.TRANSFORM_FEEDBACK_BUFFER_MODE -// params returns a symbolic constant indicating the buffer mode used -// when transform feedback is active. This may be GL.SEPARATE_ATTRIBS -// or GL.INTERLEAVED_ATTRIBS. -// -// GL.TRANSFORM_FEEDBACK_VARYINGS -// params returns the number of varying variables to capture in transform -// feedback mode for the program. -// -// GL.TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH -// params returns the length of the longest variable name to be used for -// transform feedback, including the null-terminator. -// -// GL.GEOMETRY_VERTICES_OUT -// params returns the maximum number of vertices that the geometry shader in -// program will output. -// -// GL.GEOMETRY_INPUT_TYPE -// params returns a symbolic constant indicating the primitive type accepted -// as input to the geometry shader contained in program. -// -// GL.GEOMETRY_OUTPUT_TYPE -// params returns a symbolic constant indicating the primitive type that will -// be output by the geometry shader contained in program. -// -// GL.ACTIVE_UNIFORM_BLOCKS and GL.ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH are -// available only if the GL version 3.1 or greater. -// -// GL.GEOMETRY_VERTICES_OUT, GL.GEOMETRY_INPUT_TYPE and -// GL.GEOMETRY_OUTPUT_TYPE are accepted only if the GL version is 3.2 or -// greater. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program does not refer to a -// program object. GL.INVALID_OPERATION is generated if pname is -// GL.GEOMETRY_VERTICES_OUT, GL.GEOMETRY_INPUT_TYPE, or -// GL.GEOMETRY_OUTPUT_TYPE, and program does not contain a geometry shader. -// GL.INVALID_ENUM is generated if pname is not an accepted value. -func (gl *GL) GetProgramiv(program glbase.Program, pname glbase.Enum, params []int32) { - var params_c [4]int32 - C.gl3_3compat_glGetProgramiv(gl.funcs, C.GLuint(program), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetAttribLocation queries the previously linked program object specified -// by program for the attribute variable specified by name and returns the -// index of the generic vertex attribute that is bound to that attribute -// variable. If name is a matrix attribute variable, the index of the first -// column of the matrix is returned. If the named attribute variable is not -// an active attribute in the specified program object or if name starts with -// the reserved prefix "gl_", a value of -1 is returned. -// -// The association between an attribute variable name and a generic attribute -// index can be specified at any time by calling BindAttribLocation. -// Attribute bindings do not go into effect until LinkProgram is called. -// After a program object has been linked successfully, the index values for -// attribute variables remain fixed until the next link command occurs. The -// attribute values can only be queried after a link if the link was -// successful. GetAttribLocation returns the binding that actually went -// into effect the last time LinkProgram was called for the specified -// program object. Attribute bindings that have been specified since the last -// link operation are not returned by GetAttribLocation. -// -// Error GL_INVALID_OPERATION is generated if program is not a value -// generated by OpenGL. GL_INVALID_OPERATION is generated if program is not -// a program object. GL_INVALID_OPERATION is generated if program has not -// been successfully linked. GL_INVALID_OPERATION is generated if -// GetAttribLocation is executed between the execution of Begin and the -// corresponding execution of End. -// -// GetAttribLocation is available in GL version 2.0 or greater. -func (gl *GL) GetAttribLocation(program glbase.Program, name string) glbase.Attrib { - name_cstr := C.CString(name) - glresult := C.gl3_3compat_glGetAttribLocation(gl.funcs, C.GLuint(program), (*C.GLchar)(name_cstr)) - C.free(unsafe.Pointer(name_cstr)) - return glbase.Attrib(glresult) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetAttachedShaders.xml -func (gl *GL) GetAttachedShaders(program glbase.Program, maxCount int32, count []int, obj []uint32) { - C.gl3_3compat_glGetAttachedShaders(gl.funcs, C.GLuint(program), C.GLsizei(maxCount), (*C.GLsizei)(unsafe.Pointer(&count[0])), (*C.GLuint)(unsafe.Pointer(&obj[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetActiveUniform.xml -func (gl *GL) GetActiveUniform(program glbase.Program, index uint32, bufSize int32, length []int32, size []int, gltype []glbase.Enum, name []byte) { - C.gl3_3compat_glGetActiveUniform(gl.funcs, C.GLuint(program), C.GLuint(index), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLint)(unsafe.Pointer(&size[0])), (*C.GLenum)(unsafe.Pointer(&gltype[0])), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetActiveAttrib.xml -func (gl *GL) GetActiveAttrib(program glbase.Program, index glbase.Attrib, bufSize int32, length []int32, size []int, gltype []glbase.Enum, name []byte) { - C.gl3_3compat_glGetActiveAttrib(gl.funcs, C.GLuint(program), C.GLuint(index), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLint)(unsafe.Pointer(&size[0])), (*C.GLenum)(unsafe.Pointer(&gltype[0])), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEnableVertexAttribArray.xml -func (gl *GL) EnableVertexAttribArray(index glbase.Attrib) { - C.gl3_3compat_glEnableVertexAttribArray(gl.funcs, C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDisableVertexAttribArray.xml -func (gl *GL) DisableVertexAttribArray(index glbase.Attrib) { - C.gl3_3compat_glDisableVertexAttribArray(gl.funcs, C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDetachShader.xml -func (gl *GL) DetachShader(program glbase.Program, shader glbase.Shader) { - C.gl3_3compat_glDetachShader(gl.funcs, C.GLuint(program), C.GLuint(shader)) -} - -// DeleteShader frees the memory and invalidates the name associated with -// the shader object specified by shader. This command effectively undoes the -// effects of a call to CreateShader. -// -// If a shader object to be deleted is attached to a program object, it will -// be flagged for deletion, but it will not be deleted until it is no longer -// attached to any program object, for any rendering context (it must -// be detached from wherever it was attached before it will be deleted). A -// value of 0 for shader will be silently ignored. -// -// To determine whether an object has been flagged for deletion, call -// GetShader with arguments shader and GL.DELETE_STATUS. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. -// -// DeleteShader is available in GL version 2.0 or greater. -func (gl *GL) DeleteShader(shader glbase.Shader) { - C.gl3_3compat_glDeleteShader(gl.funcs, C.GLuint(shader)) -} - -// DeleteProgram frees the memory and invalidates the name associated with -// the program object specified by program. This command effectively undoes -// the effects of a call to CreateProgram. -// -// If a program object is in use as part of current rendering state, it will -// be flagged for deletion, but it will not be deleted until it is no longer -// part of current state for any rendering context. If a program object to be -// deleted has shader objects attached to it, those shader objects will be -// automatically detached but not deleted unless they have already been -// flagged for deletion by a previous call to DeleteShader. A value of 0 -// for program will be silently ignored. -// -// To determine whether a program object has been flagged for deletion, call -// GetProgram with arguments program and GL.DELETE_STATUS. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. -// -// DeleteProgram is available in GL version 2.0 or greater. -func (gl *GL) DeleteProgram(program glbase.Program) { - C.gl3_3compat_glDeleteProgram(gl.funcs, C.GLuint(program)) -} - -// CreateShader creates an empty shader object and returns a non-zero value -// by which it can be referenced. A shader object is used to maintain the -// source code strings that define a shader. shaderType indicates the type of -// shader to be created. -// -// Two types of shaders are supported. A shader of type GL.VERTEX_SHADER is a -// shader that is intended to run on the programmable vertex processor and -// replace the fixed functionality vertex processing in OpenGL. A shader of -// type GL.FRAGMENT_SHADER is a shader that is intended to run on the -// programmable fragment processor and replace the fixed functionality -// fragment processing in OpenGL. -// -// When created, a shader object's GL.SHADER_TYPE parameter is set to either -// GL.VERTEX_SHADER or GL.FRAGMENT_SHADER, depending on the value of -// shaderType. -// -// Like display lists and texture objects, the name space for shader objects -// may be shared across a set of contexts, as long as the server sides of the -// contexts share the same address space. If the name space is shared across -// contexts, any attached objects and the data associated with those attached -// objects are shared as well. -// -// This function returns 0 if an error occurs creating the shader object. -// -// Error GL.INVALID_ENUM is generated if shaderType is not an accepted value. -// GL.INVALID_OPERATION is generated if CreateShader is executed between the -// execution of Begin and the corresponding execution of End. -// -// CreateShader is available in GL version 2.0 or greater. -func (gl *GL) CreateShader(gltype glbase.Enum) glbase.Shader { - glresult := C.gl3_3compat_glCreateShader(gl.funcs, C.GLenum(gltype)) - return glbase.Shader(glresult) -} - -// CreateProgram creates an empty program object and returns a non-zero -// value by which it can be referenced. A program object is an object to -// which shader objects can be attached. This provides a mechanism to specify -// the shader objects that will be linked to create a program. It also -// provides a means for checking the compatibility of the shaders that will -// be used to create a program (for instance, checking the compatibility -// between a vertex shader and a fragment shader). When no longer needed as -// part of a program object, shader objects can be detached. -// -// One or more executables are created in a program object by successfully -// attaching shader objects to it with AttachShader, successfully compiling -// the shader objects with CompileShader, and successfully linking the -// program object with LinkProgram. These executables are made part of -// current state when UseProgram is called. Program objects can be deleted -// by calling DeleteProgram. The memory associated with the program object -// will be deleted when it is no longer part of current rendering state for -// any context. -// -// Like display lists and texture objects, the name space for program objects -// may be shared across a set of contexts, as long as the server sides of the -// contexts share the same address space. If the name space is shared across -// contexts, any attached objects and the data associated with those attached -// objects are shared as well. -// -// Applications are responsible for providing the synchronization across API -// calls when objects are accessed from different execution threads. -// -// This function returns 0 if an error occurs creating the program object. -// -// Error GL.INVALID_OPERATION is generated if CreateProgram is executed -// between the execution of Begin and the corresponding execution of End. -// -// CreateProgram is available in GL version 2.0 or greater. -func (gl *GL) CreateProgram() glbase.Program { - glresult := C.gl3_3compat_glCreateProgram(gl.funcs) - return glbase.Program(glresult) -} - -// CompileShader compiles the source code strings that have been stored in -// the shader object specified by shader. -// -// The compilation status will be stored as part of the shader object's -// state. This value will be set to GL.TRUE if the shader was compiled without -// errors and is ready for use, and GL.FALSE otherwise. It can be queried by -// calling GetShaderiv with arguments shader and GL.COMPILE_STATUS. -// -// Compilation of a shader can fail for a number of reasons as specified by -// the OpenGL Shading Language Specification. Whether or not the compilation -// was successful, information about the compilation can be obtained from the -// shader object's information log by calling GetShaderInfoLog. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader is not a shader -// object. GL.INVALID_OPERATION is generated if CompileShader is executed -// between the execution of Begin and the corresponding execution of End. -// -// CompileShader is available in GL version 2.0 or greater. -func (gl *GL) CompileShader(shader glbase.Shader) { - C.gl3_3compat_glCompileShader(gl.funcs, C.GLuint(shader)) -} - -// BindAttribLocation associates a user-defined attribute variable in the program -// object specified by program with a generic vertex attribute index. The name -// parameter specifies the name of the vertex shader attribute variable to -// which index is to be bound. When program is made part of the current state, -// values provided via the generic vertex attribute index will modify the -// value of the user-defined attribute variable specified by name. -// -// If name refers to a matrix attribute variable, index refers to the first -// column of the matrix. Other matrix columns are then automatically bound to -// locations index+1 for a matrix of type mat2; index+1 and index+2 for a -// matrix of type mat3; and index+1, index+2, and index+3 for a matrix of -// type mat4. -// -// This command makes it possible for vertex shaders to use descriptive names -// for attribute variables rather than generic variables that are numbered -// from 0 to GL.MAX_VERTEX_ATTRIBS-1. The values sent to each generic -// attribute index are part of current state, just like standard vertex -// attributes such as color, normal, and vertex position. If a different -// program object is made current by calling UseProgram, the generic vertex -// attributes are tracked in such a way that the same values will be observed -// by attributes in the new program object that are also bound to index. -// -// Attribute variable name-to-generic attribute index bindings for a program -// object can be explicitly assigned at any time by calling -// BindAttribLocation. Attribute bindings do not go into effect until -// LinkProgram is called. After a program object has been linked -// successfully, the index values for generic attributes remain fixed (and -// their values can be queried) until the next link command occurs. -// -// Applications are not allowed to bind any of the standard OpenGL vertex -// attributes using this command, as they are bound automatically when -// needed. Any attribute binding that occurs after the program object has -// been linked will not take effect until the next time the program object is -// linked. -// -// If name was bound previously, that information is lost. Thus you cannot -// bind one user-defined attribute variable to multiple indices, but you can -// bind multiple user-defined attribute variables to the same index. -// -// Applications are allowed to bind more than one user-defined attribute -// variable to the same generic vertex attribute index. This is called -// aliasing, and it is allowed only if just one of the aliased attributes is -// active in the executable program, or if no path through the shader -// consumes more than one attribute of a set of attributes aliased to the -// same location. The compiler and linker are allowed to assume that no -// aliasing is done and are free to employ optimizations that work only in -// the absence of aliasing. OpenGL implementations are not required to do -// error checking to detect aliasing. Because there is no way to bind -// standard attributes, it is not possible to alias generic attributes with -// conventional ones (except for generic attribute 0). -// -// BindAttribLocation can be called before any vertex shader objects are -// bound to the specified program object. It is also permissible to bind a -// generic attribute index to an attribute variable name that is never used -// in a vertex shader. -// -// Active attributes that are not explicitly bound will be bound by the -// linker when LinkProgram is called. The locations assigned can be queried -// by calling GetAttribLocation. -// -// Error GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. -// GL.INVALID_OPERATION is generated if name starts with the reserved prefix "gl_". -// GL.INVALID_VALUE is generated if program is not a value generated by OpenGL. -// GL.INVALID_OPERATION is generated if program is not a program object. -// GL.INVALID_OPERATION is generated if BindAttribLocation is executed -// between the execution of Begin and the corresponding execution of End. -// -// BindAttribLocation is available in GL version 2.0 or greater. -func (gl *GL) BindAttribLocation(program glbase.Program, index glbase.Attrib, name string) { - name_cstr := C.CString(name) - C.gl3_3compat_glBindAttribLocation(gl.funcs, C.GLuint(program), C.GLuint(index), (*C.GLchar)(name_cstr)) - C.free(unsafe.Pointer(name_cstr)) -} - -// AttachShader attaches a shader object to a program object. -// -// In order to create an executable, there must be a way to specify the list -// of things that will be linked together. Program objects provide this -// mechanism. Shaders that are to be linked together in a program object must -// first be attached to that program object. This indicates that shader will -// be included in link operations that will be performed on program. -// -// All operations that can be performed on a shader object are valid whether -// or not the shader object is attached to a program object. It is -// permissible to attach a shader object to a program object before source -// code has been loaded into the shader object or before the shader object -// has been compiled. It is permissible to attach multiple shader objects of -// the same type because each may contain a portion of the complete shader. -// It is also permissible to attach a shader object to more than one program -// object. If a shader object is deleted while it is attached to a program -// object, it will be flagged for deletion, and deletion will not occur until -// DetachShader is called to detach it from all program objects to which it -// is attached. -// -// Error GL.INVALID_VALUE is generated if either program or shader is not a -// value generated by OpenGL. GL.INVALID_OPERATION is generated if program -// is not a program object. GL.INVALID_OPERATION is generated if shader is -// not a shader object. GL.INVALID_OPERATION is generated if shader is -// already attached to program. GL.INVALID_OPERATION is generated if -// AttachShader is executed between the execution of Begin and the -// corresponding execution of End. -// -// AttachShader is available in GL version 2.0 or greater. -func (gl *GL) AttachShader(program glbase.Program, shader glbase.Shader) { - C.gl3_3compat_glAttachShader(gl.funcs, C.GLuint(program), C.GLuint(shader)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glStencilMaskSeparate.xml -func (gl *GL) StencilMaskSeparate(face glbase.Enum, mask uint32) { - C.gl3_3compat_glStencilMaskSeparate(gl.funcs, C.GLenum(face), C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glStencilFuncSeparate.xml -func (gl *GL) StencilFuncSeparate(face, glfunc glbase.Enum, ref int32, mask uint32) { - C.gl3_3compat_glStencilFuncSeparate(gl.funcs, C.GLenum(face), C.GLenum(glfunc), C.GLint(ref), C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glStencilOpSeparate.xml -func (gl *GL) StencilOpSeparate(face, sfail, dpfail, dppass glbase.Enum) { - C.gl3_3compat_glStencilOpSeparate(gl.funcs, C.GLenum(face), C.GLenum(sfail), C.GLenum(dpfail), C.GLenum(dppass)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDrawBuffers.xml -func (gl *GL) DrawBuffers(n int, bufs []glbase.Enum) { - C.gl3_3compat_glDrawBuffers(gl.funcs, C.GLsizei(n), (*C.GLenum)(unsafe.Pointer(&bufs[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBlendEquationSeparate.xml -func (gl *GL) BlendEquationSeparate(modeRGB, modeAlpha glbase.Enum) { - C.gl3_3compat_glBlendEquationSeparate(gl.funcs, C.GLenum(modeRGB), C.GLenum(modeAlpha)) -} - -// UniformMatrix4x3fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix4x3fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix4x3fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(4*3) != 0 { - panic("invalid value length for UniformMatrix4x3fv") - } - count := len(value) / (4 * 3) - C.gl3_3compat_glUniformMatrix4x3fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix3x4fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix3x4fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix3x4fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(3*4) != 0 { - panic("invalid value length for UniformMatrix3x4fv") - } - count := len(value) / (3 * 4) - C.gl3_3compat_glUniformMatrix3x4fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix4x2fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix4x2fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix4x2fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(4*2) != 0 { - panic("invalid value length for UniformMatrix4x2fv") - } - count := len(value) / (4 * 2) - C.gl3_3compat_glUniformMatrix4x2fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix2x4fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix2x4fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix2x4fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(2*4) != 0 { - panic("invalid value length for UniformMatrix2x4fv") - } - count := len(value) / (2 * 4) - C.gl3_3compat_glUniformMatrix2x4fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix3x2fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix3x2fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix3x2fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(3*2) != 0 { - panic("invalid value length for UniformMatrix3x2fv") - } - count := len(value) / (3 * 2) - C.gl3_3compat_glUniformMatrix3x2fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix2x3fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix2x3fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix2x3fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(2*3) != 0 { - panic("invalid value length for UniformMatrix2x3fv") - } - count := len(value) / (2 * 3) - C.gl3_3compat_glUniformMatrix2x3fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsVertexArray.xml -func (gl *GL) IsVertexArray(array uint32) bool { - glresult := C.gl3_3compat_glIsVertexArray(gl.funcs, C.GLuint(array)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGenVertexArrays.xml -func (gl *GL) GenVertexArrays(n int, arrays []uint32) { - C.gl3_3compat_glGenVertexArrays(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&arrays[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDeleteVertexArrays.xml -func (gl *GL) DeleteVertexArrays(n int, arrays []uint32) { - C.gl3_3compat_glDeleteVertexArrays(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&arrays[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBindVertexArray.xml -func (gl *GL) BindVertexArray(array uint32) { - C.gl3_3compat_glBindVertexArray(gl.funcs, C.GLuint(array)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFlushMappedBufferRange.xml -func (gl *GL) FlushMappedBufferRange(target glbase.Enum, offset, length int) { - C.gl3_3compat_glFlushMappedBufferRange(gl.funcs, C.GLenum(target), C.GLintptr(offset), C.GLsizeiptr(length)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFramebufferTextureLayer.xml -func (gl *GL) FramebufferTextureLayer(target, attachment glbase.Enum, texture glbase.Texture, level int, layer int32) { - C.gl3_3compat_glFramebufferTextureLayer(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLuint(texture), C.GLint(level), C.GLint(layer)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRenderbufferStorageMultisample.xml -func (gl *GL) RenderbufferStorageMultisample(target glbase.Enum, samples int32, internalFormat glbase.Enum, width, height int) { - C.gl3_3compat_glRenderbufferStorageMultisample(gl.funcs, C.GLenum(target), C.GLsizei(samples), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBlitFramebuffer.xml -func (gl *GL) BlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1 int32, mask glbase.Bitfield, filter glbase.Enum) { - C.gl3_3compat_glBlitFramebuffer(gl.funcs, C.GLint(srcX0), C.GLint(srcY0), C.GLint(srcX1), C.GLint(srcY1), C.GLint(dstX0), C.GLint(dstY0), C.GLint(dstX1), C.GLint(dstY1), C.GLbitfield(mask), C.GLenum(filter)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGenerateMipmap.xml -func (gl *GL) GenerateMipmap(target glbase.Enum) { - C.gl3_3compat_glGenerateMipmap(gl.funcs, C.GLenum(target)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetFramebufferAttachmentParameteriv.xml -func (gl *GL) GetFramebufferAttachmentParameteriv(target, attachment, pname glbase.Enum, params []int32) { - C.gl3_3compat_glGetFramebufferAttachmentParameteriv(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFramebufferRenderbuffer.xml -func (gl *GL) FramebufferRenderbuffer(target, attachment, renderbuffertarget glbase.Enum, renderbuffer glbase.Renderbuffer) { - C.gl3_3compat_glFramebufferRenderbuffer(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(renderbuffertarget), C.GLuint(renderbuffer)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFramebufferTexture3D.xml -func (gl *GL) FramebufferTexture3D(target, attachment, textarget glbase.Enum, texture glbase.Texture, level int, zoffset int32) { - C.gl3_3compat_glFramebufferTexture3D(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(textarget), C.GLuint(texture), C.GLint(level), C.GLint(zoffset)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFramebufferTexture2D.xml -func (gl *GL) FramebufferTexture2D(target, attachment, textarget glbase.Enum, texture glbase.Texture, level int) { - C.gl3_3compat_glFramebufferTexture2D(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(textarget), C.GLuint(texture), C.GLint(level)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFramebufferTexture1D.xml -func (gl *GL) FramebufferTexture1D(target, attachment, textarget glbase.Enum, texture glbase.Texture, level int) { - C.gl3_3compat_glFramebufferTexture1D(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(textarget), C.GLuint(texture), C.GLint(level)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCheckFramebufferStatus.xml -func (gl *GL) CheckFramebufferStatus(target glbase.Enum) glbase.Enum { - glresult := C.gl3_3compat_glCheckFramebufferStatus(gl.funcs, C.GLenum(target)) - return glbase.Enum(glresult) -} - -// GenFramebuffers returns n framebuffer object names in ids. There is no -// guarantee that the names form a contiguous set of integers; however, it is -// guaranteed that none of the returned names was in use immediately before -// the call to GenFramebuffers. -// -// Framebuffer object names returned by a call to GenFramebuffers are not -// returned by subsequent calls, unless they are first deleted with -// DeleteFramebuffers. -// -// The names returned in ids are marked as used, for the purposes of -// GenFramebuffers only, but they acquire state and type only when they are -// first bound. -// -// Error GL.INVALID_VALUE is generated if n is negative. -func (gl *GL) GenFramebuffers(n int) []glbase.Framebuffer { - if n == 0 { - return nil - } - framebuffers := make([]glbase.Framebuffer, n) - C.gl3_3compat_glGenFramebuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&framebuffers[0]))) - return framebuffers -} - -// DeleteFramebuffers deletes the framebuffer objects whose names are -// stored in the framebuffers slice. The name zero is reserved by the GL and -// is silently ignored, should it occur in framebuffers, as are other unused -// names. Once a framebuffer object is deleted, its name is again unused and -// it has no attachments. If a framebuffer that is currently bound to one or -// more of the targets GL.DRAW_FRAMEBUFFER or GL.READ_FRAMEBUFFER is deleted, -// it is as though BindFramebuffer had been executed with the corresponding -// target and framebuffer zero. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// DeleteFramebuffers is available in GL version 3.0 or greater. -func (gl *GL) DeleteFramebuffers(framebuffers []glbase.Framebuffer) { - n := len(framebuffers) - if n == 0 { - return - } - C.gl3_3compat_glDeleteFramebuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&framebuffers[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBindFramebuffer.xml -func (gl *GL) BindFramebuffer(target glbase.Enum, framebuffer glbase.Framebuffer) { - C.gl3_3compat_glBindFramebuffer(gl.funcs, C.GLenum(target), C.GLuint(framebuffer)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsFramebuffer.xml -func (gl *GL) IsFramebuffer(framebuffer glbase.Framebuffer) bool { - glresult := C.gl3_3compat_glIsFramebuffer(gl.funcs, C.GLuint(framebuffer)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetRenderbufferParameteriv.xml -func (gl *GL) GetRenderbufferParameteriv(target, pname glbase.Enum, params []int32) { - C.gl3_3compat_glGetRenderbufferParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRenderbufferStorage.xml -func (gl *GL) RenderbufferStorage(target, internalFormat glbase.Enum, width, height int) { - C.gl3_3compat_glRenderbufferStorage(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height)) -} - -// GenRenderbuffers returns n renderbuffer object names in renderbuffers. -// There is no guarantee that the names form a contiguous set of integers; -// however, it is guaranteed that none of the returned names was in use -// immediately before the call to GenRenderbuffers. -// -// Renderbuffer object names returned by a call to GenRenderbuffers are not -// returned by subsequent calls, unless they are first deleted with -// DeleteRenderbuffers. -// -// The names returned in renderbuffers are marked as used, for the purposes -// of GenRenderbuffers only, but they acquire state and type only when they -// are first bound. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// GenRenderbuffers is available in GL version 3.0 or greater. -func (gl *GL) GenRenderbuffers(n int) []glbase.Renderbuffer { - if n == 0 { - return nil - } - renderbuffers := make([]glbase.Renderbuffer, n) - C.gl3_3compat_glGenRenderbuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&renderbuffers[0]))) - return renderbuffers -} - -// DeleteRenderbuffers deletes the renderbuffer objects whose names are stored -// in the renderbuffers slice. The name zero is reserved by the GL and -// is silently ignored, should it occur in renderbuffers, as are other unused -// names. Once a renderbuffer object is deleted, its name is again unused and -// it has no contents. If a renderbuffer that is currently bound to the -// target GL.RENDERBUFFER is deleted, it is as though BindRenderbuffer had -// been executed with a target of GL.RENDERBUFFER and a name of zero. -// -// If a renderbuffer object is attached to one or more attachment points in -// the currently bound framebuffer, then it as if FramebufferRenderbuffer -// had been called, with a renderbuffer of zero for each attachment point to -// which this image was attached in the currently bound framebuffer. In other -// words, this renderbuffer object is first detached from all attachment -// ponits in the currently bound framebuffer. Note that the renderbuffer -// image is specifically not detached from any non-bound framebuffers. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// DeleteRenderbuffers is available in GL version 3.0 or greater. -func (gl *GL) DeleteRenderbuffers(renderbuffers []glbase.Renderbuffer) { - n := len(renderbuffers) - if n == 0 { - return - } - C.gl3_3compat_glDeleteRenderbuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&renderbuffers[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBindRenderbuffer.xml -func (gl *GL) BindRenderbuffer(target glbase.Enum, renderbuffer glbase.Renderbuffer) { - C.gl3_3compat_glBindRenderbuffer(gl.funcs, C.GLenum(target), C.GLuint(renderbuffer)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsRenderbuffer.xml -func (gl *GL) IsRenderbuffer(renderbuffer glbase.Renderbuffer) bool { - glresult := C.gl3_3compat_glIsRenderbuffer(gl.funcs, C.GLuint(renderbuffer)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClearBufferfi.xml -func (gl *GL) ClearBufferfi(buffer glbase.Enum, drawbuffer int32, depth float32, stencil int32) { - C.gl3_3compat_glClearBufferfi(gl.funcs, C.GLenum(buffer), C.GLint(drawbuffer), C.GLfloat(depth), C.GLint(stencil)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClearBufferfv.xml -func (gl *GL) ClearBufferfv(buffer glbase.Enum, drawbuffer int32, value []float32) { - C.gl3_3compat_glClearBufferfv(gl.funcs, C.GLenum(buffer), C.GLint(drawbuffer), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClearBufferuiv.xml -func (gl *GL) ClearBufferuiv(buffer glbase.Enum, drawbuffer int32, value []uint32) { - C.gl3_3compat_glClearBufferuiv(gl.funcs, C.GLenum(buffer), C.GLint(drawbuffer), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClearBufferiv.xml -func (gl *GL) ClearBufferiv(buffer glbase.Enum, drawbuffer int32, value []int32) { - C.gl3_3compat_glClearBufferiv(gl.funcs, C.GLenum(buffer), C.GLint(drawbuffer), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetTexParameterIuiv.xml -func (gl *GL) GetTexParameterIuiv(target, pname glbase.Enum, params []uint32) { - C.gl3_3compat_glGetTexParameterIuiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetTexParameterIiv.xml -func (gl *GL) GetTexParameterIiv(target, pname glbase.Enum, params []int32) { - C.gl3_3compat_glGetTexParameterIiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexParameterIuiv.xml -func (gl *GL) TexParameterIuiv(target, pname glbase.Enum, params []uint32) { - C.gl3_3compat_glTexParameterIuiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexParameterIiv.xml -func (gl *GL) TexParameterIiv(target, pname glbase.Enum, params []int32) { - C.gl3_3compat_glTexParameterIiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// Uniform4uiv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform4uiv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4uiv(location glbase.Uniform, value []uint32) { - if len(value) == 0 { - return - } - if len(value)%4 != 0 { - panic("invalid value length for Uniform4uiv") - } - count := len(value) / 4 - C.gl3_3compat_glUniform4uiv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// Uniform3uiv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform3uiv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3uiv(location glbase.Uniform, value []uint32) { - if len(value) == 0 { - return - } - if len(value)%3 != 0 { - panic("invalid value length for Uniform3uiv") - } - count := len(value) / 3 - C.gl3_3compat_glUniform3uiv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// Uniform2uiv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform2uiv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2uiv(location glbase.Uniform, value []uint32) { - if len(value) == 0 { - return - } - if len(value)%2 != 0 { - panic("invalid value length for Uniform2uiv") - } - count := len(value) / 2 - C.gl3_3compat_glUniform2uiv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// Uniform1uiv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform1uiv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1uiv(location glbase.Uniform, value []uint32) { - if len(value) == 0 { - return - } - count := len(value) - C.gl3_3compat_glUniform1uiv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// Uniform4ui modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform4ui operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4ui(location glbase.Uniform, v0, v1, v2, v3 uint32) { - C.gl3_3compat_glUniform4ui(gl.funcs, C.GLint(location), C.GLuint(v0), C.GLuint(v1), C.GLuint(v2), C.GLuint(v3)) -} - -// Uniform3ui modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform3ui operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3ui(location glbase.Uniform, v0, v1, v2 uint32) { - C.gl3_3compat_glUniform3ui(gl.funcs, C.GLint(location), C.GLuint(v0), C.GLuint(v1), C.GLuint(v2)) -} - -// Uniform2ui modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform2ui operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2ui(location glbase.Uniform, v0, v1 uint32) { - C.gl3_3compat_glUniform2ui(gl.funcs, C.GLint(location), C.GLuint(v0), C.GLuint(v1)) -} - -// Uniform1ui modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform1ui operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1ui(location glbase.Uniform, v0 uint32) { - C.gl3_3compat_glUniform1ui(gl.funcs, C.GLint(location), C.GLuint(v0)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetFragDataLocation.xml -func (gl *GL) GetFragDataLocation(program glbase.Program, name []byte) int32 { - glresult := C.gl3_3compat_glGetFragDataLocation(gl.funcs, C.GLuint(program), (*C.GLchar)(unsafe.Pointer(&name[0]))) - return int32(glresult) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBindFragDataLocation.xml -func (gl *GL) BindFragDataLocation(program glbase.Program, color uint32, name []byte) { - C.gl3_3compat_glBindFragDataLocation(gl.funcs, C.GLuint(program), C.GLuint(color), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetUniformuiv.xml -func (gl *GL) GetUniformuiv(program glbase.Program, location glbase.Uniform, params []uint32) { - C.gl3_3compat_glGetUniformuiv(gl.funcs, C.GLuint(program), C.GLint(location), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetVertexAttribIuiv.xml -func (gl *GL) GetVertexAttribIuiv(index glbase.Attrib, pname glbase.Enum, params []uint32) { - C.gl3_3compat_glGetVertexAttribIuiv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetVertexAttribIiv.xml -func (gl *GL) GetVertexAttribIiv(index glbase.Attrib, pname glbase.Enum, params []int32) { - C.gl3_3compat_glGetVertexAttribIiv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribIPointer.xml -func (gl *GL) VertexAttribIPointer(index glbase.Attrib, size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl3_3compat_glVertexAttribIPointer(gl.funcs, C.GLuint(index), C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEndConditionalRender.xml -func (gl *GL) EndConditionalRender() { - C.gl3_3compat_glEndConditionalRender(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBeginConditionalRender.xml -func (gl *GL) BeginConditionalRender(id uint32, mode glbase.Enum) { - C.gl3_3compat_glBeginConditionalRender(gl.funcs, C.GLuint(id), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClampColor.xml -func (gl *GL) ClampColor(target, clamp glbase.Enum) { - C.gl3_3compat_glClampColor(gl.funcs, C.GLenum(target), C.GLenum(clamp)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetTransformFeedbackVarying.xml -func (gl *GL) GetTransformFeedbackVarying(program glbase.Program, index uint32, bufSize int32, length []int32, size []int, gltype []glbase.Enum, name []byte) { - C.gl3_3compat_glGetTransformFeedbackVarying(gl.funcs, C.GLuint(program), C.GLuint(index), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLsizei)(unsafe.Pointer(&size[0])), (*C.GLenum)(unsafe.Pointer(&gltype[0])), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBindBufferBase.xml -func (gl *GL) BindBufferBase(target glbase.Enum, index uint32, buffer glbase.Buffer) { - C.gl3_3compat_glBindBufferBase(gl.funcs, C.GLenum(target), C.GLuint(index), C.GLuint(buffer)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBindBufferRange.xml -func (gl *GL) BindBufferRange(target glbase.Enum, index uint32, buffer glbase.Buffer, offset, size int) { - C.gl3_3compat_glBindBufferRange(gl.funcs, C.GLenum(target), C.GLuint(index), C.GLuint(buffer), C.GLintptr(offset), C.GLsizeiptr(size)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEndTransformFeedback.xml -func (gl *GL) EndTransformFeedback() { - C.gl3_3compat_glEndTransformFeedback(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBeginTransformFeedback.xml -func (gl *GL) BeginTransformFeedback(primitiveMode glbase.Enum) { - C.gl3_3compat_glBeginTransformFeedback(gl.funcs, C.GLenum(primitiveMode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsEnabledi.xml -func (gl *GL) IsEnabledi(target glbase.Enum, index uint32) bool { - glresult := C.gl3_3compat_glIsEnabledi(gl.funcs, C.GLenum(target), C.GLuint(index)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDisablei.xml -func (gl *GL) Disablei(target glbase.Enum, index uint32) { - C.gl3_3compat_glDisablei(gl.funcs, C.GLenum(target), C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEnablei.xml -func (gl *GL) Enablei(target glbase.Enum, index uint32) { - C.gl3_3compat_glEnablei(gl.funcs, C.GLenum(target), C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetIntegeri_v.xml -func (gl *GL) GetIntegeri_v(target glbase.Enum, index uint32, data []int32) { - C.gl3_3compat_glGetIntegeri_v(gl.funcs, C.GLenum(target), C.GLuint(index), (*C.GLint)(unsafe.Pointer(&data[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetBooleani_v.xml -func (gl *GL) GetBooleani_v(target glbase.Enum, index uint32, data []bool) { - C.gl3_3compat_glGetBooleani_v(gl.funcs, C.GLenum(target), C.GLuint(index), (*C.GLboolean)(unsafe.Pointer(&data[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColorMaski.xml -func (gl *GL) ColorMaski(index uint32, r, g, b, a bool) { - C.gl3_3compat_glColorMaski(gl.funcs, C.GLuint(index), *(*C.GLboolean)(unsafe.Pointer(&r)), *(*C.GLboolean)(unsafe.Pointer(&g)), *(*C.GLboolean)(unsafe.Pointer(&b)), *(*C.GLboolean)(unsafe.Pointer(&a))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCopyBufferSubData.xml -func (gl *GL) CopyBufferSubData(readTarget, writeTarget glbase.Enum, readOffset, writeOffset, size int) { - C.gl3_3compat_glCopyBufferSubData(gl.funcs, C.GLenum(readTarget), C.GLenum(writeTarget), C.GLintptr(readOffset), C.GLintptr(writeOffset), C.GLsizeiptr(size)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glUniformBlockBinding.xml -func (gl *GL) UniformBlockBinding(program glbase.Program, v0, v1 uint32) { - C.gl3_3compat_glUniformBlockBinding(gl.funcs, C.GLuint(program), C.GLuint(v0), C.GLuint(v1)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetActiveUniformBlockName.xml -func (gl *GL) GetActiveUniformBlockName(program glbase.Program, uniformBlockIndex uint32, bufSize int32, length []int32, uniformBlockName []byte) { - C.gl3_3compat_glGetActiveUniformBlockName(gl.funcs, C.GLuint(program), C.GLuint(uniformBlockIndex), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLchar)(unsafe.Pointer(&uniformBlockName[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetActiveUniformBlockiv.xml -func (gl *GL) GetActiveUniformBlockiv(program glbase.Program, uniformBlockIndex uint32, pname glbase.Enum, params []int32) { - C.gl3_3compat_glGetActiveUniformBlockiv(gl.funcs, C.GLuint(program), C.GLuint(uniformBlockIndex), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetUniformBlockIndex.xml -func (gl *GL) GetUniformBlockIndex(program glbase.Program, uniformBlockName []byte) uint32 { - glresult := C.gl3_3compat_glGetUniformBlockIndex(gl.funcs, C.GLuint(program), (*C.GLchar)(unsafe.Pointer(&uniformBlockName[0]))) - return uint32(glresult) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetActiveUniformName.xml -func (gl *GL) GetActiveUniformName(program glbase.Program, uniformIndex uint32, bufSize int32, length []int32, uniformName []byte) { - C.gl3_3compat_glGetActiveUniformName(gl.funcs, C.GLuint(program), C.GLuint(uniformIndex), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLchar)(unsafe.Pointer(&uniformName[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetActiveUniformsiv.xml -func (gl *GL) GetActiveUniformsiv(program glbase.Program, uniformCount int32, uniformIndices []uint32, pname glbase.Enum, params []int32) { - C.gl3_3compat_glGetActiveUniformsiv(gl.funcs, C.GLuint(program), C.GLsizei(uniformCount), (*C.GLuint)(unsafe.Pointer(&uniformIndices[0])), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPrimitiveRestartIndex.xml -func (gl *GL) PrimitiveRestartIndex(index uint32) { - C.gl3_3compat_glPrimitiveRestartIndex(gl.funcs, C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexBuffer.xml -func (gl *GL) TexBuffer(target, internalFormat glbase.Enum, buffer glbase.Buffer) { - C.gl3_3compat_glTexBuffer(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLuint(buffer)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDrawElementsInstanced.xml -func (gl *GL) DrawElementsInstanced(mode glbase.Enum, count int, gltype glbase.Enum, indices interface{}, instancecount int32) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl3_3compat_glDrawElementsInstanced(gl.funcs, C.GLenum(mode), C.GLsizei(count), C.GLenum(gltype), indices_ptr, C.GLsizei(instancecount)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDrawArraysInstanced.xml -func (gl *GL) DrawArraysInstanced(mode glbase.Enum, first, count int, instancecount int32) { - C.gl3_3compat_glDrawArraysInstanced(gl.funcs, C.GLenum(mode), C.GLint(first), C.GLsizei(count), C.GLsizei(instancecount)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSampleMaski.xml -func (gl *GL) SampleMaski(index uint32, mask glbase.Bitfield) { - C.gl3_3compat_glSampleMaski(gl.funcs, C.GLuint(index), C.GLbitfield(mask)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetMultisamplefv.xml -func (gl *GL) GetMultisamplefv(pname glbase.Enum, index uint32, val []float32) { - C.gl3_3compat_glGetMultisamplefv(gl.funcs, C.GLenum(pname), C.GLuint(index), (*C.GLfloat)(unsafe.Pointer(&val[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexImage3DMultisample.xml -func (gl *GL) TexImage3DMultisample(target glbase.Enum, samples, internalFormat int32, width, height int, depth int32, fixedsamplelocations bool) { - C.gl3_3compat_glTexImage3DMultisample(gl.funcs, C.GLenum(target), C.GLsizei(samples), C.GLint(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), *(*C.GLboolean)(unsafe.Pointer(&fixedsamplelocations))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexImage2DMultisample.xml -func (gl *GL) TexImage2DMultisample(target glbase.Enum, samples, internalFormat int32, width, height int, fixedsamplelocations bool) { - C.gl3_3compat_glTexImage2DMultisample(gl.funcs, C.GLenum(target), C.GLsizei(samples), C.GLint(internalFormat), C.GLsizei(width), C.GLsizei(height), *(*C.GLboolean)(unsafe.Pointer(&fixedsamplelocations))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetSynciv.xml -func (gl *GL) GetSynciv(sync glbase.Sync, pname glbase.Enum, bufSize int32, length, values []int32) { - C.gl3_3compat_glGetSynciv(gl.funcs, C.GLsync(unsafe.Pointer(sync)), C.GLenum(pname), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLint)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetInteger64v.xml -func (gl *GL) GetInteger64v(pname glbase.Enum, params []int64) { - C.gl3_3compat_glGetInteger64v(gl.funcs, C.GLenum(pname), (*C.GLint64)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glWaitSync.xml -func (gl *GL) WaitSync(sync glbase.Sync, flags glbase.Bitfield, timeout uint64) { - C.gl3_3compat_glWaitSync(gl.funcs, C.GLsync(unsafe.Pointer(sync)), C.GLbitfield(flags), C.GLuint64(timeout)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClientWaitSync.xml -func (gl *GL) ClientWaitSync(sync glbase.Sync, flags glbase.Bitfield, timeout uint64) glbase.Enum { - glresult := C.gl3_3compat_glClientWaitSync(gl.funcs, C.GLsync(unsafe.Pointer(sync)), C.GLbitfield(flags), C.GLuint64(timeout)) - return glbase.Enum(glresult) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDeleteSync.xml -func (gl *GL) DeleteSync(sync glbase.Sync) { - C.gl3_3compat_glDeleteSync(gl.funcs, C.GLsync(unsafe.Pointer(sync))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsSync.xml -func (gl *GL) IsSync(sync glbase.Sync) bool { - glresult := C.gl3_3compat_glIsSync(gl.funcs, C.GLsync(unsafe.Pointer(sync))) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFenceSync.xml -func (gl *GL) FenceSync(condition glbase.Enum, flags glbase.Bitfield) glbase.Sync { - glresult := C.gl3_3compat_glFenceSync(gl.funcs, C.GLenum(condition), C.GLbitfield(flags)) - return glbase.Sync(unsafe.Pointer(glresult)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glProvokingVertex.xml -func (gl *GL) ProvokingVertex(mode glbase.Enum) { - C.gl3_3compat_glProvokingVertex(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDrawElementsInstancedBaseVertex.xml -func (gl *GL) DrawElementsInstancedBaseVertex(mode glbase.Enum, count int, gltype glbase.Enum, indices interface{}, instancecount, basevertex int32) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl3_3compat_glDrawElementsInstancedBaseVertex(gl.funcs, C.GLenum(mode), C.GLsizei(count), C.GLenum(gltype), indices_ptr, C.GLsizei(instancecount), C.GLint(basevertex)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDrawRangeElementsBaseVertex.xml -func (gl *GL) DrawRangeElementsBaseVertex(mode glbase.Enum, start, end uint32, count int, gltype glbase.Enum, indices interface{}, basevertex int32) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl3_3compat_glDrawRangeElementsBaseVertex(gl.funcs, C.GLenum(mode), C.GLuint(start), C.GLuint(end), C.GLsizei(count), C.GLenum(gltype), indices_ptr, C.GLint(basevertex)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDrawElementsBaseVertex.xml -func (gl *GL) DrawElementsBaseVertex(mode glbase.Enum, count int, gltype glbase.Enum, indices interface{}, basevertex int32) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl3_3compat_glDrawElementsBaseVertex(gl.funcs, C.GLenum(mode), C.GLsizei(count), C.GLenum(gltype), indices_ptr, C.GLint(basevertex)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFramebufferTexture.xml -func (gl *GL) FramebufferTexture(target, attachment glbase.Enum, texture glbase.Texture, level int) { - C.gl3_3compat_glFramebufferTexture(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLuint(texture), C.GLint(level)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetBufferParameteri64v.xml -func (gl *GL) GetBufferParameteri64v(target, pname glbase.Enum, params []int64) { - C.gl3_3compat_glGetBufferParameteri64v(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint64)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetInteger64i_v.xml -func (gl *GL) GetInteger64i_v(target glbase.Enum, index uint32, data []int64) { - C.gl3_3compat_glGetInteger64i_v(gl.funcs, C.GLenum(target), C.GLuint(index), (*C.GLint64)(unsafe.Pointer(&data[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribP4uiv.xml -func (gl *GL) VertexAttribP4uiv(index glbase.Attrib, gltype glbase.Enum, normalized bool, value []uint32) { - C.gl3_3compat_glVertexAttribP4uiv(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribP4ui.xml -func (gl *GL) VertexAttribP4ui(index glbase.Attrib, gltype glbase.Enum, normalized bool, value uint32) { - C.gl3_3compat_glVertexAttribP4ui(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribP3uiv.xml -func (gl *GL) VertexAttribP3uiv(index glbase.Attrib, gltype glbase.Enum, normalized bool, value []uint32) { - C.gl3_3compat_glVertexAttribP3uiv(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribP3ui.xml -func (gl *GL) VertexAttribP3ui(index glbase.Attrib, gltype glbase.Enum, normalized bool, value uint32) { - C.gl3_3compat_glVertexAttribP3ui(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribP2uiv.xml -func (gl *GL) VertexAttribP2uiv(index glbase.Attrib, gltype glbase.Enum, normalized bool, value []uint32) { - C.gl3_3compat_glVertexAttribP2uiv(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribP2ui.xml -func (gl *GL) VertexAttribP2ui(index glbase.Attrib, gltype glbase.Enum, normalized bool, value uint32) { - C.gl3_3compat_glVertexAttribP2ui(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribP1uiv.xml -func (gl *GL) VertexAttribP1uiv(index glbase.Attrib, gltype glbase.Enum, normalized bool, value []uint32) { - C.gl3_3compat_glVertexAttribP1uiv(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribP1ui.xml -func (gl *GL) VertexAttribP1ui(index glbase.Attrib, gltype glbase.Enum, normalized bool, value uint32) { - C.gl3_3compat_glVertexAttribP1ui(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSecondaryColorP3uiv.xml -func (gl *GL) SecondaryColorP3uiv(gltype glbase.Enum, color []uint32) { - C.gl3_3compat_glSecondaryColorP3uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&color[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSecondaryColorP3ui.xml -func (gl *GL) SecondaryColorP3ui(gltype glbase.Enum, color uint32) { - C.gl3_3compat_glSecondaryColorP3ui(gl.funcs, C.GLenum(gltype), C.GLuint(color)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColorP4uiv.xml -func (gl *GL) ColorP4uiv(gltype glbase.Enum, color []uint32) { - C.gl3_3compat_glColorP4uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&color[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColorP4ui.xml -func (gl *GL) ColorP4ui(gltype glbase.Enum, color uint32) { - C.gl3_3compat_glColorP4ui(gl.funcs, C.GLenum(gltype), C.GLuint(color)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColorP3uiv.xml -func (gl *GL) ColorP3uiv(gltype glbase.Enum, color []uint32) { - C.gl3_3compat_glColorP3uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&color[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColorP3ui.xml -func (gl *GL) ColorP3ui(gltype glbase.Enum, color uint32) { - C.gl3_3compat_glColorP3ui(gl.funcs, C.GLenum(gltype), C.GLuint(color)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glNormalP3uiv.xml -func (gl *GL) NormalP3uiv(gltype glbase.Enum, coords []uint32) { - C.gl3_3compat_glNormalP3uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glNormalP3ui.xml -func (gl *GL) NormalP3ui(gltype glbase.Enum, coords uint32) { - C.gl3_3compat_glNormalP3ui(gl.funcs, C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoordP4uiv.xml -func (gl *GL) MultiTexCoordP4uiv(texture, gltype glbase.Enum, coords []uint32) { - C.gl3_3compat_glMultiTexCoordP4uiv(gl.funcs, C.GLenum(texture), C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoordP4ui.xml -func (gl *GL) MultiTexCoordP4ui(texture, gltype glbase.Enum, coords uint32) { - C.gl3_3compat_glMultiTexCoordP4ui(gl.funcs, C.GLenum(texture), C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoordP3uiv.xml -func (gl *GL) MultiTexCoordP3uiv(texture, gltype glbase.Enum, coords []uint32) { - C.gl3_3compat_glMultiTexCoordP3uiv(gl.funcs, C.GLenum(texture), C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoordP3ui.xml -func (gl *GL) MultiTexCoordP3ui(texture, gltype glbase.Enum, coords uint32) { - C.gl3_3compat_glMultiTexCoordP3ui(gl.funcs, C.GLenum(texture), C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoordP2uiv.xml -func (gl *GL) MultiTexCoordP2uiv(texture, gltype glbase.Enum, coords []uint32) { - C.gl3_3compat_glMultiTexCoordP2uiv(gl.funcs, C.GLenum(texture), C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoordP2ui.xml -func (gl *GL) MultiTexCoordP2ui(texture, gltype glbase.Enum, coords uint32) { - C.gl3_3compat_glMultiTexCoordP2ui(gl.funcs, C.GLenum(texture), C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoordP1uiv.xml -func (gl *GL) MultiTexCoordP1uiv(texture, gltype glbase.Enum, coords []uint32) { - C.gl3_3compat_glMultiTexCoordP1uiv(gl.funcs, C.GLenum(texture), C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoordP1ui.xml -func (gl *GL) MultiTexCoordP1ui(texture, gltype glbase.Enum, coords uint32) { - C.gl3_3compat_glMultiTexCoordP1ui(gl.funcs, C.GLenum(texture), C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoordP4uiv.xml -func (gl *GL) TexCoordP4uiv(gltype glbase.Enum, coords []uint32) { - C.gl3_3compat_glTexCoordP4uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoordP4ui.xml -func (gl *GL) TexCoordP4ui(gltype glbase.Enum, coords uint32) { - C.gl3_3compat_glTexCoordP4ui(gl.funcs, C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoordP3uiv.xml -func (gl *GL) TexCoordP3uiv(gltype glbase.Enum, coords []uint32) { - C.gl3_3compat_glTexCoordP3uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoordP3ui.xml -func (gl *GL) TexCoordP3ui(gltype glbase.Enum, coords uint32) { - C.gl3_3compat_glTexCoordP3ui(gl.funcs, C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoordP2uiv.xml -func (gl *GL) TexCoordP2uiv(gltype glbase.Enum, coords []uint32) { - C.gl3_3compat_glTexCoordP2uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoordP2ui.xml -func (gl *GL) TexCoordP2ui(gltype glbase.Enum, coords uint32) { - C.gl3_3compat_glTexCoordP2ui(gl.funcs, C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoordP1uiv.xml -func (gl *GL) TexCoordP1uiv(gltype glbase.Enum, coords []uint32) { - C.gl3_3compat_glTexCoordP1uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoordP1ui.xml -func (gl *GL) TexCoordP1ui(gltype glbase.Enum, coords uint32) { - C.gl3_3compat_glTexCoordP1ui(gl.funcs, C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexP4uiv.xml -func (gl *GL) VertexP4uiv(gltype glbase.Enum, value []uint32) { - C.gl3_3compat_glVertexP4uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexP4ui.xml -func (gl *GL) VertexP4ui(gltype glbase.Enum, value uint32) { - C.gl3_3compat_glVertexP4ui(gl.funcs, C.GLenum(gltype), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexP3uiv.xml -func (gl *GL) VertexP3uiv(gltype glbase.Enum, value []uint32) { - C.gl3_3compat_glVertexP3uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexP3ui.xml -func (gl *GL) VertexP3ui(gltype glbase.Enum, value uint32) { - C.gl3_3compat_glVertexP3ui(gl.funcs, C.GLenum(gltype), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexP2uiv.xml -func (gl *GL) VertexP2uiv(gltype glbase.Enum, value []uint32) { - C.gl3_3compat_glVertexP2uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexP2ui.xml -func (gl *GL) VertexP2ui(gltype glbase.Enum, value uint32) { - C.gl3_3compat_glVertexP2ui(gl.funcs, C.GLenum(gltype), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetQueryObjectui64v.xml -func (gl *GL) GetQueryObjectui64v(id uint32, pname glbase.Enum, params []uint64) { - C.gl3_3compat_glGetQueryObjectui64v(gl.funcs, C.GLuint(id), C.GLenum(pname), (*C.GLuint64)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetQueryObjecti64v.xml -func (gl *GL) GetQueryObjecti64v(id uint32, pname glbase.Enum, params []int64) { - C.gl3_3compat_glGetQueryObjecti64v(gl.funcs, C.GLuint(id), C.GLenum(pname), (*C.GLint64)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glQueryCounter.xml -func (gl *GL) QueryCounter(id uint32, target glbase.Enum) { - C.gl3_3compat_glQueryCounter(gl.funcs, C.GLuint(id), C.GLenum(target)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetSamplerParameterIuiv.xml -func (gl *GL) GetSamplerParameterIuiv(sampler uint32, pname glbase.Enum, params []uint32) { - C.gl3_3compat_glGetSamplerParameterIuiv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetSamplerParameterfv.xml -func (gl *GL) GetSamplerParameterfv(sampler uint32, pname glbase.Enum, params []float32) { - C.gl3_3compat_glGetSamplerParameterfv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetSamplerParameterIiv.xml -func (gl *GL) GetSamplerParameterIiv(sampler uint32, pname glbase.Enum, params []int32) { - C.gl3_3compat_glGetSamplerParameterIiv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetSamplerParameteriv.xml -func (gl *GL) GetSamplerParameteriv(sampler uint32, pname glbase.Enum, params []int32) { - C.gl3_3compat_glGetSamplerParameteriv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSamplerParameterIuiv.xml -func (gl *GL) SamplerParameterIuiv(sampler uint32, pname glbase.Enum, param []uint32) { - C.gl3_3compat_glSamplerParameterIuiv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶m[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSamplerParameterIiv.xml -func (gl *GL) SamplerParameterIiv(sampler uint32, pname glbase.Enum, param []int32) { - C.gl3_3compat_glSamplerParameterIiv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶m[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSamplerParameterfv.xml -func (gl *GL) SamplerParameterfv(sampler uint32, pname glbase.Enum, param []float32) { - C.gl3_3compat_glSamplerParameterfv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶m[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSamplerParameterf.xml -func (gl *GL) SamplerParameterf(sampler uint32, pname glbase.Enum, param float32) { - C.gl3_3compat_glSamplerParameterf(gl.funcs, C.GLuint(sampler), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSamplerParameteriv.xml -func (gl *GL) SamplerParameteriv(sampler uint32, pname glbase.Enum, param []int32) { - C.gl3_3compat_glSamplerParameteriv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶m[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSamplerParameteri.xml -func (gl *GL) SamplerParameteri(sampler uint32, pname glbase.Enum, param int32) { - C.gl3_3compat_glSamplerParameteri(gl.funcs, C.GLuint(sampler), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBindSampler.xml -func (gl *GL) BindSampler(unit, sampler uint32) { - C.gl3_3compat_glBindSampler(gl.funcs, C.GLuint(unit), C.GLuint(sampler)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsSampler.xml -func (gl *GL) IsSampler(sampler uint32) bool { - glresult := C.gl3_3compat_glIsSampler(gl.funcs, C.GLuint(sampler)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDeleteSamplers.xml -func (gl *GL) DeleteSamplers(count int, samplers []uint32) { - C.gl3_3compat_glDeleteSamplers(gl.funcs, C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&samplers[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGenSamplers.xml -func (gl *GL) GenSamplers(count int, samplers []uint32) { - C.gl3_3compat_glGenSamplers(gl.funcs, C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&samplers[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetFragDataIndex.xml -func (gl *GL) GetFragDataIndex(program glbase.Program, name []byte) int32 { - glresult := C.gl3_3compat_glGetFragDataIndex(gl.funcs, C.GLuint(program), (*C.GLchar)(unsafe.Pointer(&name[0]))) - return int32(glresult) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBindFragDataLocationIndexed.xml -func (gl *GL) BindFragDataLocationIndexed(program glbase.Program, colorNumber, index uint32, name []byte) { - C.gl3_3compat_glBindFragDataLocationIndexed(gl.funcs, C.GLuint(program), C.GLuint(colorNumber), C.GLuint(index), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribDivisor.xml -func (gl *GL) VertexAttribDivisor(index glbase.Attrib, divisor uint32) { - C.gl3_3compat_glVertexAttribDivisor(gl.funcs, C.GLuint(index), C.GLuint(divisor)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTranslatef.xml -func (gl *GL) Translatef(x, y, z float32) { - C.gl3_3compat_glTranslatef(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTranslated.xml -func (gl *GL) Translated(x, y, z float64) { - C.gl3_3compat_glTranslated(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glScalef.xml -func (gl *GL) Scalef(x, y, z float32) { - C.gl3_3compat_glScalef(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glScaled.xml -func (gl *GL) Scaled(x, y, z float64) { - C.gl3_3compat_glScaled(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRotatef.xml -func (gl *GL) Rotatef(angle, x, y, z float32) { - C.gl3_3compat_glRotatef(gl.funcs, C.GLfloat(angle), C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRotated.xml -func (gl *GL) Rotated(angle, x, y, z float64) { - C.gl3_3compat_glRotated(gl.funcs, C.GLdouble(angle), C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPushMatrix.xml -func (gl *GL) PushMatrix() { - C.gl3_3compat_glPushMatrix(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPopMatrix.xml -func (gl *GL) PopMatrix() { - C.gl3_3compat_glPopMatrix(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glOrtho.xml -func (gl *GL) Ortho(left, right, bottom, top, zNear, zFar float64) { - C.gl3_3compat_glOrtho(gl.funcs, C.GLdouble(left), C.GLdouble(right), C.GLdouble(bottom), C.GLdouble(top), C.GLdouble(zNear), C.GLdouble(zFar)) -} - -// MultMatrixd multiplies the current matrix with the provided matrix. -// -// The m parameter must hold 16 consecutive elements of a 4x4 column-major matrix. -// -// The current matrix is determined by the current matrix mode (see -// MatrixMode). It is either the projection matrix, modelview matrix, or the -// texture matrix. -// -// For example, if the current matrix is C and the coordinates to be transformed -// are v = (v[0], v[1], v[2], v[3]), then the current transformation is C × v, or -// -// c[0] c[4] c[8] c[12] v[0] -// c[1] c[5] c[9] c[13] v[1] -// c[2] c[6] c[10] c[14] X v[2] -// c[3] c[7] c[11] c[15] v[3] -// -// Calling MultMatrix with an argument of m = m[0], m[1], ..., m[15] -// replaces the current transformation with (C X M) x v, or -// -// c[0] c[4] c[8] c[12] m[0] m[4] m[8] m[12] v[0] -// c[1] c[5] c[9] c[13] m[1] m[5] m[9] m[13] v[1] -// c[2] c[6] c[10] c[14] X m[2] m[6] m[10] m[14] X v[2] -// c[3] c[7] c[11] c[15] m[3] m[7] m[11] m[15] v[3] -// -// Where 'X' denotes matrix multiplication, and v is represented as a 4x1 matrix. -// -// While the elements of the matrix may be specified with single or double -// precision, the GL may store or operate on these values in less-than-single -// precision. -// -// In many computer languages, 4×4 arrays are represented in row-major -// order. The transformations just described represent these matrices in -// column-major order. The order of the multiplication is important. For -// example, if the current transformation is a rotation, and MultMatrix is -// called with a translation matrix, the translation is done directly on the -// coordinates to be transformed, while the rotation is done on the results -// of that translation. -// -// GL.INVALID_OPERATION is generated if MultMatrix is executed between the -// execution of Begin and the corresponding execution of End. -func (gl *GL) MultMatrixd(m []float64) { - if len(m) != 16 { - panic("parameter m must have length 16 for the 4x4 matrix") - } - C.gl3_3compat_glMultMatrixd(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&m[0]))) -} - -// MultMatrixf multiplies the current matrix with the provided matrix. -// -// The m parameter must hold 16 consecutive elements of a 4x4 column-major matrix. -// -// The current matrix is determined by the current matrix mode (see -// MatrixMode). It is either the projection matrix, modelview matrix, or the -// texture matrix. -// -// For example, if the current matrix is C and the coordinates to be transformed -// are v = (v[0], v[1], v[2], v[3]), then the current transformation is C × v, or -// -// c[0] c[4] c[8] c[12] v[0] -// c[1] c[5] c[9] c[13] v[1] -// c[2] c[6] c[10] c[14] X v[2] -// c[3] c[7] c[11] c[15] v[3] -// -// Calling MultMatrix with an argument of m = m[0], m[1], ..., m[15] -// replaces the current transformation with (C X M) x v, or -// -// c[0] c[4] c[8] c[12] m[0] m[4] m[8] m[12] v[0] -// c[1] c[5] c[9] c[13] m[1] m[5] m[9] m[13] v[1] -// c[2] c[6] c[10] c[14] X m[2] m[6] m[10] m[14] X v[2] -// c[3] c[7] c[11] c[15] m[3] m[7] m[11] m[15] v[3] -// -// Where 'X' denotes matrix multiplication, and v is represented as a 4x1 matrix. -// -// While the elements of the matrix may be specified with single or double -// precision, the GL may store or operate on these values in less-than-single -// precision. -// -// In many computer languages, 4×4 arrays are represented in row-major -// order. The transformations just described represent these matrices in -// column-major order. The order of the multiplication is important. For -// example, if the current transformation is a rotation, and MultMatrix is -// called with a translation matrix, the translation is done directly on the -// coordinates to be transformed, while the rotation is done on the results -// of that translation. -// -// GL.INVALID_OPERATION is generated if MultMatrix is executed between the -// execution of Begin and the corresponding execution of End. -func (gl *GL) MultMatrixf(m []float32) { - if len(m) != 16 { - panic("parameter m must have length 16 for the 4x4 matrix") - } - C.gl3_3compat_glMultMatrixf(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMatrixMode.xml -func (gl *GL) MatrixMode(mode glbase.Enum) { - C.gl3_3compat_glMatrixMode(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glLoadMatrixd.xml -func (gl *GL) LoadMatrixd(m []float64) { - C.gl3_3compat_glLoadMatrixd(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glLoadMatrixf.xml -func (gl *GL) LoadMatrixf(m []float32) { - C.gl3_3compat_glLoadMatrixf(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glLoadIdentity.xml -func (gl *GL) LoadIdentity() { - C.gl3_3compat_glLoadIdentity(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFrustum.xml -func (gl *GL) Frustum(left, right, bottom, top, zNear, zFar float64) { - C.gl3_3compat_glFrustum(gl.funcs, C.GLdouble(left), C.GLdouble(right), C.GLdouble(bottom), C.GLdouble(top), C.GLdouble(zNear), C.GLdouble(zFar)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsList.xml -func (gl *GL) IsList(list uint32) bool { - glresult := C.gl3_3compat_glIsList(gl.funcs, C.GLuint(list)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetTexGeniv.xml -func (gl *GL) GetTexGeniv(coord, pname glbase.Enum, params []int32) { - C.gl3_3compat_glGetTexGeniv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetTexGenfv.xml -func (gl *GL) GetTexGenfv(coord, pname glbase.Enum, params []float32) { - C.gl3_3compat_glGetTexGenfv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetTexGendv.xml -func (gl *GL) GetTexGendv(coord, pname glbase.Enum, params []float64) { - C.gl3_3compat_glGetTexGendv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetTexEnviv.xml -func (gl *GL) GetTexEnviv(target, pname glbase.Enum, params []int32) { - C.gl3_3compat_glGetTexEnviv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetTexEnvfv.xml -func (gl *GL) GetTexEnvfv(target, pname glbase.Enum, params []float32) { - C.gl3_3compat_glGetTexEnvfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetPolygonStipple.xml -func (gl *GL) GetPolygonStipple(mask []uint8) { - C.gl3_3compat_glGetPolygonStipple(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&mask[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetPixelMapusv.xml -func (gl *GL) GetPixelMapusv(glmap glbase.Enum, values []uint16) { - C.gl3_3compat_glGetPixelMapusv(gl.funcs, C.GLenum(glmap), (*C.GLushort)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetPixelMapuiv.xml -func (gl *GL) GetPixelMapuiv(glmap glbase.Enum, values []uint32) { - C.gl3_3compat_glGetPixelMapuiv(gl.funcs, C.GLenum(glmap), (*C.GLuint)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetPixelMapfv.xml -func (gl *GL) GetPixelMapfv(glmap glbase.Enum, values []float32) { - C.gl3_3compat_glGetPixelMapfv(gl.funcs, C.GLenum(glmap), (*C.GLfloat)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetMaterialiv.xml -func (gl *GL) GetMaterialiv(face, pname glbase.Enum, params []int32) { - C.gl3_3compat_glGetMaterialiv(gl.funcs, C.GLenum(face), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetMaterialfv.xml -func (gl *GL) GetMaterialfv(face, pname glbase.Enum, params []float32) { - C.gl3_3compat_glGetMaterialfv(gl.funcs, C.GLenum(face), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetMapiv.xml -func (gl *GL) GetMapiv(target, query glbase.Enum, v []int32) { - C.gl3_3compat_glGetMapiv(gl.funcs, C.GLenum(target), C.GLenum(query), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetMapfv.xml -func (gl *GL) GetMapfv(target, query glbase.Enum, v []float32) { - C.gl3_3compat_glGetMapfv(gl.funcs, C.GLenum(target), C.GLenum(query), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetMapdv.xml -func (gl *GL) GetMapdv(target, query glbase.Enum, v []float64) { - C.gl3_3compat_glGetMapdv(gl.funcs, C.GLenum(target), C.GLenum(query), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetLightiv.xml -func (gl *GL) GetLightiv(light, pname glbase.Enum, params []int32) { - C.gl3_3compat_glGetLightiv(gl.funcs, C.GLenum(light), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetLightfv.xml -func (gl *GL) GetLightfv(light, pname glbase.Enum, params []float32) { - C.gl3_3compat_glGetLightfv(gl.funcs, C.GLenum(light), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetClipPlane.xml -func (gl *GL) GetClipPlane(plane glbase.Enum, equation []float64) { - C.gl3_3compat_glGetClipPlane(gl.funcs, C.GLenum(plane), (*C.GLdouble)(unsafe.Pointer(&equation[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDrawPixels.xml -func (gl *GL) DrawPixels(width, height int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl3_3compat_glDrawPixels(gl.funcs, C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCopyPixels.xml -func (gl *GL) CopyPixels(x, y, width, height int, gltype glbase.Enum) { - C.gl3_3compat_glCopyPixels(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height), C.GLenum(gltype)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPixelMapusv.xml -func (gl *GL) PixelMapusv(glmap glbase.Enum, mapsize int32, values []uint16) { - C.gl3_3compat_glPixelMapusv(gl.funcs, C.GLenum(glmap), C.GLint(mapsize), (*C.GLushort)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPixelMapuiv.xml -func (gl *GL) PixelMapuiv(glmap glbase.Enum, mapsize int32, values []uint32) { - C.gl3_3compat_glPixelMapuiv(gl.funcs, C.GLenum(glmap), C.GLint(mapsize), (*C.GLuint)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPixelMapfv.xml -func (gl *GL) PixelMapfv(glmap glbase.Enum, mapsize int32, values []float32) { - C.gl3_3compat_glPixelMapfv(gl.funcs, C.GLenum(glmap), C.GLint(mapsize), (*C.GLfloat)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPixelTransferi.xml -func (gl *GL) PixelTransferi(pname glbase.Enum, param int32) { - C.gl3_3compat_glPixelTransferi(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPixelTransferf.xml -func (gl *GL) PixelTransferf(pname glbase.Enum, param float32) { - C.gl3_3compat_glPixelTransferf(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPixelZoom.xml -func (gl *GL) PixelZoom(xfactor, yfactor float32) { - C.gl3_3compat_glPixelZoom(gl.funcs, C.GLfloat(xfactor), C.GLfloat(yfactor)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glAlphaFunc.xml -func (gl *GL) AlphaFunc(glfunc glbase.Enum, ref float32) { - C.gl3_3compat_glAlphaFunc(gl.funcs, C.GLenum(glfunc), C.GLfloat(ref)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEvalPoint2.xml -func (gl *GL) EvalPoint2(i, j int32) { - C.gl3_3compat_glEvalPoint2(gl.funcs, C.GLint(i), C.GLint(j)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEvalMesh2.xml -func (gl *GL) EvalMesh2(mode glbase.Enum, i1, i2, j1, j2 int32) { - C.gl3_3compat_glEvalMesh2(gl.funcs, C.GLenum(mode), C.GLint(i1), C.GLint(i2), C.GLint(j1), C.GLint(j2)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEvalPoint1.xml -func (gl *GL) EvalPoint1(i int32) { - C.gl3_3compat_glEvalPoint1(gl.funcs, C.GLint(i)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEvalMesh1.xml -func (gl *GL) EvalMesh1(mode glbase.Enum, i1, i2 int32) { - C.gl3_3compat_glEvalMesh1(gl.funcs, C.GLenum(mode), C.GLint(i1), C.GLint(i2)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEvalCoord2fv.xml -func (gl *GL) EvalCoord2fv(u []float32) { - if len(u) != 2 { - panic("parameter u has incorrect length") - } - C.gl3_3compat_glEvalCoord2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&u[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEvalCoord2f.xml -func (gl *GL) EvalCoord2f(u, v float32) { - C.gl3_3compat_glEvalCoord2f(gl.funcs, C.GLfloat(u), C.GLfloat(v)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEvalCoord2dv.xml -func (gl *GL) EvalCoord2dv(u []float64) { - if len(u) != 2 { - panic("parameter u has incorrect length") - } - C.gl3_3compat_glEvalCoord2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&u[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEvalCoord2d.xml -func (gl *GL) EvalCoord2d(u, v float64) { - C.gl3_3compat_glEvalCoord2d(gl.funcs, C.GLdouble(u), C.GLdouble(v)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEvalCoord1fv.xml -func (gl *GL) EvalCoord1fv(u []float32) { - C.gl3_3compat_glEvalCoord1fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&u[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEvalCoord1f.xml -func (gl *GL) EvalCoord1f(u float32) { - C.gl3_3compat_glEvalCoord1f(gl.funcs, C.GLfloat(u)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEvalCoord1dv.xml -func (gl *GL) EvalCoord1dv(u []float64) { - C.gl3_3compat_glEvalCoord1dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&u[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEvalCoord1d.xml -func (gl *GL) EvalCoord1d(u float64) { - C.gl3_3compat_glEvalCoord1d(gl.funcs, C.GLdouble(u)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMapGrid2f.xml -func (gl *GL) MapGrid2f(un int32, u1, u2 float32, vn int32, v1, v2 float32) { - C.gl3_3compat_glMapGrid2f(gl.funcs, C.GLint(un), C.GLfloat(u1), C.GLfloat(u2), C.GLint(vn), C.GLfloat(v1), C.GLfloat(v2)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMapGrid2d.xml -func (gl *GL) MapGrid2d(un int32, u1, u2 float64, vn int32, v1, v2 float64) { - C.gl3_3compat_glMapGrid2d(gl.funcs, C.GLint(un), C.GLdouble(u1), C.GLdouble(u2), C.GLint(vn), C.GLdouble(v1), C.GLdouble(v2)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMapGrid1f.xml -func (gl *GL) MapGrid1f(un int32, u1, u2 float32) { - C.gl3_3compat_glMapGrid1f(gl.funcs, C.GLint(un), C.GLfloat(u1), C.GLfloat(u2)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMapGrid1d.xml -func (gl *GL) MapGrid1d(un int32, u1, u2 float64) { - C.gl3_3compat_glMapGrid1d(gl.funcs, C.GLint(un), C.GLdouble(u1), C.GLdouble(u2)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMap2f.xml -func (gl *GL) Map2f(target glbase.Enum, u1, u2 float32, ustride, uorder int32, v1, v2 float32, vstride, vorder int32, points []float32) { - C.gl3_3compat_glMap2f(gl.funcs, C.GLenum(target), C.GLfloat(u1), C.GLfloat(u2), C.GLint(ustride), C.GLint(uorder), C.GLfloat(v1), C.GLfloat(v2), C.GLint(vstride), C.GLint(vorder), (*C.GLfloat)(unsafe.Pointer(&points[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMap2d.xml -func (gl *GL) Map2d(target glbase.Enum, u1, u2 float64, ustride, uorder int32, v1, v2 float64, vstride, vorder int32, points []float64) { - C.gl3_3compat_glMap2d(gl.funcs, C.GLenum(target), C.GLdouble(u1), C.GLdouble(u2), C.GLint(ustride), C.GLint(uorder), C.GLdouble(v1), C.GLdouble(v2), C.GLint(vstride), C.GLint(vorder), (*C.GLdouble)(unsafe.Pointer(&points[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMap1f.xml -func (gl *GL) Map1f(target glbase.Enum, u1, u2 float32, stride, order int, points []float32) { - C.gl3_3compat_glMap1f(gl.funcs, C.GLenum(target), C.GLfloat(u1), C.GLfloat(u2), C.GLint(stride), C.GLint(order), (*C.GLfloat)(unsafe.Pointer(&points[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMap1d.xml -func (gl *GL) Map1d(target glbase.Enum, u1, u2 float64, stride, order int, points []float64) { - C.gl3_3compat_glMap1d(gl.funcs, C.GLenum(target), C.GLdouble(u1), C.GLdouble(u2), C.GLint(stride), C.GLint(order), (*C.GLdouble)(unsafe.Pointer(&points[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPushAttrib.xml -func (gl *GL) PushAttrib(mask glbase.Bitfield) { - C.gl3_3compat_glPushAttrib(gl.funcs, C.GLbitfield(mask)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPopAttrib.xml -func (gl *GL) PopAttrib() { - C.gl3_3compat_glPopAttrib(gl.funcs) -} - -// Accum executes an operation on the accumulation buffer. -// -// Parameter op defines the accumulation buffer operation (GL.ACCUM, GL.LOAD, -// GL.ADD, GL.MULT, or GL.RETURN) and specifies how the value parameter is -// used. -// -// The accumulation buffer is an extended-range color buffer. Images are not -// rendered into it. Rather, images rendered into one of the color buffers -// are added to the contents of the accumulation buffer after rendering. -// Effects such as antialiasing (of points, lines, and polygons), motion -// blur, and depth of field can be created by accumulating images generated -// with different transformation matrices. -// -// Each pixel in the accumulation buffer consists of red, green, blue, and -// alpha values. The number of bits per component in the accumulation buffer -// depends on the implementation. You can examine this number by calling -// GetIntegerv four times, with arguments GL.ACCUM_RED_BITS, -// GL.ACCUM_GREEN_BITS, GL.ACCUM_BLUE_BITS, and GL.ACCUM_ALPHA_BITS. -// Regardless of the number of bits per component, the range of values stored -// by each component is (-1, 1). The accumulation buffer pixels are mapped -// one-to-one with frame buffer pixels. -// -// All accumulation buffer operations are limited to the area of the current -// scissor box and applied identically to the red, green, blue, and alpha -// components of each pixel. If a Accum operation results in a value outside -// the range (-1, 1), the contents of an accumulation buffer pixel component -// are undefined. -// -// The operations are as follows: -// -// GL.ACCUM -// Obtains R, G, B, and A values from the buffer currently selected for -// reading (see ReadBuffer). Each component value is divided by 2 n - -// 1 , where n is the number of bits allocated to each color component -// in the currently selected buffer. The result is a floating-point -// value in the range 0 1 , which is multiplied by value and added to -// the corresponding pixel component in the accumulation buffer, -// thereby updating the accumulation buffer. -// -// GL.LOAD -// Similar to GL.ACCUM, except that the current value in the -// accumulation buffer is not used in the calculation of the new value. -// That is, the R, G, B, and A values from the currently selected -// buffer are divided by 2 n - 1 , multiplied by value, and then stored -// in the corresponding accumulation buffer cell, overwriting the -// current value. -// -// GL.ADD -// Adds value to each R, G, B, and A in the accumulation buffer. -// -// GL.MULT -// Multiplies each R, G, B, and A in the accumulation buffer by value -// and returns the scaled component to its corresponding accumulation -// buffer location. -// -// GL.RETURN -// Transfers accumulation buffer values to the color buffer or buffers -// currently selected for writing. Each R, G, B, and A component is -// multiplied by value, then multiplied by 2 n - 1 , clamped to the -// range 0 2 n - 1 , and stored in the corresponding display buffer -// cell. The only fragment operations that are applied to this transfer -// are pixel ownership, scissor, dithering, and color writemasks. -// -// To clear the accumulation buffer, call ClearAccum with R, G, B, and A -// values to set it to, then call Clear with the accumulation buffer -// enabled. -// -// Error GL.INVALID_ENUM is generated if op is not an accepted value. -// GL.INVALID_OPERATION is generated if there is no accumulation buffer. -// GL.INVALID_OPERATION is generated if Accum is executed between the -// execution of Begin and the corresponding execution of End. -func (gl *GL) Accum(op glbase.Enum, value float32) { - C.gl3_3compat_glAccum(gl.funcs, C.GLenum(op), C.GLfloat(value)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIndexMask.xml -func (gl *GL) IndexMask(mask uint32) { - C.gl3_3compat_glIndexMask(gl.funcs, C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClearIndex.xml -func (gl *GL) ClearIndex(c float32) { - C.gl3_3compat_glClearIndex(gl.funcs, C.GLfloat(c)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClearAccum.xml -func (gl *GL) ClearAccum(red, green, blue, alpha float32) { - C.gl3_3compat_glClearAccum(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPushName.xml -func (gl *GL) PushName(name uint32) { - C.gl3_3compat_glPushName(gl.funcs, C.GLuint(name)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPopName.xml -func (gl *GL) PopName() { - C.gl3_3compat_glPopName(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPassThrough.xml -func (gl *GL) PassThrough(token float32) { - C.gl3_3compat_glPassThrough(gl.funcs, C.GLfloat(token)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glLoadName.xml -func (gl *GL) LoadName(name uint32) { - C.gl3_3compat_glLoadName(gl.funcs, C.GLuint(name)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glInitNames.xml -func (gl *GL) InitNames() { - C.gl3_3compat_glInitNames(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRenderMode.xml -func (gl *GL) RenderMode(mode glbase.Enum) int32 { - glresult := C.gl3_3compat_glRenderMode(gl.funcs, C.GLenum(mode)) - return int32(glresult) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSelectBuffer.xml -func (gl *GL) SelectBuffer(size int, buffer []glbase.Buffer) { - C.gl3_3compat_glSelectBuffer(gl.funcs, C.GLsizei(size), (*C.GLuint)(unsafe.Pointer(&buffer[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFeedbackBuffer.xml -func (gl *GL) FeedbackBuffer(size int, gltype glbase.Enum, buffer []float32) { - C.gl3_3compat_glFeedbackBuffer(gl.funcs, C.GLsizei(size), C.GLenum(gltype), (*C.GLfloat)(unsafe.Pointer(&buffer[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexGeniv.xml -func (gl *GL) TexGeniv(coord, pname glbase.Enum, params []int32) { - C.gl3_3compat_glTexGeniv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexGeni.xml -func (gl *GL) TexGeni(coord, pname glbase.Enum, param int32) { - C.gl3_3compat_glTexGeni(gl.funcs, C.GLenum(coord), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexGenfv.xml -func (gl *GL) TexGenfv(coord, pname glbase.Enum, params []float32) { - C.gl3_3compat_glTexGenfv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexGenf.xml -func (gl *GL) TexGenf(coord, pname glbase.Enum, param float32) { - C.gl3_3compat_glTexGenf(gl.funcs, C.GLenum(coord), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexGendv.xml -func (gl *GL) TexGendv(coord, pname glbase.Enum, params []float64) { - C.gl3_3compat_glTexGendv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexGend.xml -func (gl *GL) TexGend(coord, pname glbase.Enum, param float64) { - C.gl3_3compat_glTexGend(gl.funcs, C.GLenum(coord), C.GLenum(pname), C.GLdouble(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexEnviv.xml -func (gl *GL) TexEnviv(target, pname glbase.Enum, params []int32) { - C.gl3_3compat_glTexEnviv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexEnvi.xml -func (gl *GL) TexEnvi(target, pname glbase.Enum, param int32) { - C.gl3_3compat_glTexEnvi(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexEnvfv.xml -func (gl *GL) TexEnvfv(target, pname glbase.Enum, params []float32) { - C.gl3_3compat_glTexEnvfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexEnvf.xml -func (gl *GL) TexEnvf(target, pname glbase.Enum, param float32) { - C.gl3_3compat_glTexEnvf(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glShadeModel.xml -func (gl *GL) ShadeModel(mode glbase.Enum) { - C.gl3_3compat_glShadeModel(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPolygonStipple.xml -func (gl *GL) PolygonStipple(mask []uint8) { - C.gl3_3compat_glPolygonStipple(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&mask[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMaterialiv.xml -func (gl *GL) Materialiv(face, pname glbase.Enum, params []int32) { - C.gl3_3compat_glMaterialiv(gl.funcs, C.GLenum(face), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMateriali.xml -func (gl *GL) Materiali(face, pname glbase.Enum, param int32) { - C.gl3_3compat_glMateriali(gl.funcs, C.GLenum(face), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMaterialfv.xml -func (gl *GL) Materialfv(face, pname glbase.Enum, params []float32) { - C.gl3_3compat_glMaterialfv(gl.funcs, C.GLenum(face), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMaterialf.xml -func (gl *GL) Materialf(face, pname glbase.Enum, param float32) { - C.gl3_3compat_glMaterialf(gl.funcs, C.GLenum(face), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glLineStipple.xml -func (gl *GL) LineStipple(factor int32, pattern uint16) { - C.gl3_3compat_glLineStipple(gl.funcs, C.GLint(factor), C.GLushort(pattern)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glLightModeliv.xml -func (gl *GL) LightModeliv(pname glbase.Enum, params []int32) { - C.gl3_3compat_glLightModeliv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glLightModeli.xml -func (gl *GL) LightModeli(pname glbase.Enum, param int32) { - C.gl3_3compat_glLightModeli(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glLightModelfv.xml -func (gl *GL) LightModelfv(pname glbase.Enum, params []float32) { - C.gl3_3compat_glLightModelfv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glLightModelf.xml -func (gl *GL) LightModelf(pname glbase.Enum, param float32) { - C.gl3_3compat_glLightModelf(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glLightiv.xml -func (gl *GL) Lightiv(light, pname glbase.Enum, params []int32) { - C.gl3_3compat_glLightiv(gl.funcs, C.GLenum(light), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glLighti.xml -func (gl *GL) Lighti(light, pname glbase.Enum, param int32) { - C.gl3_3compat_glLighti(gl.funcs, C.GLenum(light), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glLightfv.xml -func (gl *GL) Lightfv(light, pname glbase.Enum, params []float32) { - C.gl3_3compat_glLightfv(gl.funcs, C.GLenum(light), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glLightf.xml -func (gl *GL) Lightf(light, pname glbase.Enum, param float32) { - C.gl3_3compat_glLightf(gl.funcs, C.GLenum(light), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFogiv.xml -func (gl *GL) Fogiv(pname glbase.Enum, params []int32) { - C.gl3_3compat_glFogiv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFogi.xml -func (gl *GL) Fogi(pname glbase.Enum, param int32) { - C.gl3_3compat_glFogi(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFogfv.xml -func (gl *GL) Fogfv(pname glbase.Enum, params []float32) { - C.gl3_3compat_glFogfv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFogf.xml -func (gl *GL) Fogf(pname glbase.Enum, param float32) { - C.gl3_3compat_glFogf(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColorMaterial.xml -func (gl *GL) ColorMaterial(face, mode glbase.Enum) { - C.gl3_3compat_glColorMaterial(gl.funcs, C.GLenum(face), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClipPlane.xml -func (gl *GL) ClipPlane(plane glbase.Enum, equation []float64) { - C.gl3_3compat_glClipPlane(gl.funcs, C.GLenum(plane), (*C.GLdouble)(unsafe.Pointer(&equation[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex4sv.xml -func (gl *GL) Vertex4sv(v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glVertex4sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex4s.xml -func (gl *GL) Vertex4s(x, y, z, w int16) { - C.gl3_3compat_glVertex4s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z), C.GLshort(w)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex4iv.xml -func (gl *GL) Vertex4iv(v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glVertex4iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex4i.xml -func (gl *GL) Vertex4i(x, y, z, w int) { - C.gl3_3compat_glVertex4i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z), C.GLint(w)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex4fv.xml -func (gl *GL) Vertex4fv(v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glVertex4fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex4f.xml -func (gl *GL) Vertex4f(x, y, z, w float32) { - C.gl3_3compat_glVertex4f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z), C.GLfloat(w)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex4dv.xml -func (gl *GL) Vertex4dv(v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glVertex4dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex4d.xml -func (gl *GL) Vertex4d(x, y, z, w float64) { - C.gl3_3compat_glVertex4d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z), C.GLdouble(w)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex3sv.xml -func (gl *GL) Vertex3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glVertex3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex3s.xml -func (gl *GL) Vertex3s(x, y, z int16) { - C.gl3_3compat_glVertex3s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex3iv.xml -func (gl *GL) Vertex3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glVertex3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex3i.xml -func (gl *GL) Vertex3i(x, y, z int) { - C.gl3_3compat_glVertex3i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex3fv.xml -func (gl *GL) Vertex3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glVertex3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex3f.xml -func (gl *GL) Vertex3f(x, y, z float32) { - C.gl3_3compat_glVertex3f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex3dv.xml -func (gl *GL) Vertex3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glVertex3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex3d.xml -func (gl *GL) Vertex3d(x, y, z float64) { - C.gl3_3compat_glVertex3d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex2sv.xml -func (gl *GL) Vertex2sv(v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glVertex2sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex2s.xml -func (gl *GL) Vertex2s(x, y int16) { - C.gl3_3compat_glVertex2s(gl.funcs, C.GLshort(x), C.GLshort(y)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex2iv.xml -func (gl *GL) Vertex2iv(v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glVertex2iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex2i.xml -func (gl *GL) Vertex2i(x, y int) { - C.gl3_3compat_glVertex2i(gl.funcs, C.GLint(x), C.GLint(y)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex2fv.xml -func (gl *GL) Vertex2fv(v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glVertex2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex2f.xml -func (gl *GL) Vertex2f(x, y float32) { - C.gl3_3compat_glVertex2f(gl.funcs, C.GLfloat(x), C.GLfloat(y)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex2dv.xml -func (gl *GL) Vertex2dv(v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glVertex2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertex2d.xml -func (gl *GL) Vertex2d(x, y float64) { - C.gl3_3compat_glVertex2d(gl.funcs, C.GLdouble(x), C.GLdouble(y)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord4sv.xml -func (gl *GL) TexCoord4sv(v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glTexCoord4sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord4s.xml -func (gl *GL) TexCoord4s(s, t, r, q int16) { - C.gl3_3compat_glTexCoord4s(gl.funcs, C.GLshort(s), C.GLshort(t), C.GLshort(r), C.GLshort(q)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord4iv.xml -func (gl *GL) TexCoord4iv(v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glTexCoord4iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord4i.xml -func (gl *GL) TexCoord4i(s, t, r, q int32) { - C.gl3_3compat_glTexCoord4i(gl.funcs, C.GLint(s), C.GLint(t), C.GLint(r), C.GLint(q)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord4fv.xml -func (gl *GL) TexCoord4fv(v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glTexCoord4fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord4f.xml -func (gl *GL) TexCoord4f(s, t, r, q float32) { - C.gl3_3compat_glTexCoord4f(gl.funcs, C.GLfloat(s), C.GLfloat(t), C.GLfloat(r), C.GLfloat(q)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord4dv.xml -func (gl *GL) TexCoord4dv(v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glTexCoord4dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord4d.xml -func (gl *GL) TexCoord4d(s, t, r, q float64) { - C.gl3_3compat_glTexCoord4d(gl.funcs, C.GLdouble(s), C.GLdouble(t), C.GLdouble(r), C.GLdouble(q)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord3sv.xml -func (gl *GL) TexCoord3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glTexCoord3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord3s.xml -func (gl *GL) TexCoord3s(s, t, r int16) { - C.gl3_3compat_glTexCoord3s(gl.funcs, C.GLshort(s), C.GLshort(t), C.GLshort(r)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord3iv.xml -func (gl *GL) TexCoord3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glTexCoord3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord3i.xml -func (gl *GL) TexCoord3i(s, t, r int32) { - C.gl3_3compat_glTexCoord3i(gl.funcs, C.GLint(s), C.GLint(t), C.GLint(r)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord3fv.xml -func (gl *GL) TexCoord3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glTexCoord3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord3f.xml -func (gl *GL) TexCoord3f(s, t, r float32) { - C.gl3_3compat_glTexCoord3f(gl.funcs, C.GLfloat(s), C.GLfloat(t), C.GLfloat(r)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord3dv.xml -func (gl *GL) TexCoord3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glTexCoord3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord3d.xml -func (gl *GL) TexCoord3d(s, t, r float64) { - C.gl3_3compat_glTexCoord3d(gl.funcs, C.GLdouble(s), C.GLdouble(t), C.GLdouble(r)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord2sv.xml -func (gl *GL) TexCoord2sv(v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glTexCoord2sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord2s.xml -func (gl *GL) TexCoord2s(s, t int16) { - C.gl3_3compat_glTexCoord2s(gl.funcs, C.GLshort(s), C.GLshort(t)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord2iv.xml -func (gl *GL) TexCoord2iv(v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glTexCoord2iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord2i.xml -func (gl *GL) TexCoord2i(s, t int32) { - C.gl3_3compat_glTexCoord2i(gl.funcs, C.GLint(s), C.GLint(t)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord2fv.xml -func (gl *GL) TexCoord2fv(v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glTexCoord2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord2f.xml -func (gl *GL) TexCoord2f(s, t float32) { - C.gl3_3compat_glTexCoord2f(gl.funcs, C.GLfloat(s), C.GLfloat(t)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord2dv.xml -func (gl *GL) TexCoord2dv(v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glTexCoord2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord2d.xml -func (gl *GL) TexCoord2d(s, t float64) { - C.gl3_3compat_glTexCoord2d(gl.funcs, C.GLdouble(s), C.GLdouble(t)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord1sv.xml -func (gl *GL) TexCoord1sv(v []int16) { - C.gl3_3compat_glTexCoord1sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord1s.xml -func (gl *GL) TexCoord1s(s int16) { - C.gl3_3compat_glTexCoord1s(gl.funcs, C.GLshort(s)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord1iv.xml -func (gl *GL) TexCoord1iv(v []int32) { - C.gl3_3compat_glTexCoord1iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord1i.xml -func (gl *GL) TexCoord1i(s int32) { - C.gl3_3compat_glTexCoord1i(gl.funcs, C.GLint(s)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord1fv.xml -func (gl *GL) TexCoord1fv(v []float32) { - C.gl3_3compat_glTexCoord1fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord1f.xml -func (gl *GL) TexCoord1f(s float32) { - C.gl3_3compat_glTexCoord1f(gl.funcs, C.GLfloat(s)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord1dv.xml -func (gl *GL) TexCoord1dv(v []float64) { - C.gl3_3compat_glTexCoord1dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoord1d.xml -func (gl *GL) TexCoord1d(s float64) { - C.gl3_3compat_glTexCoord1d(gl.funcs, C.GLdouble(s)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRectsv.xml -func (gl *GL) Rectsv(v1, v2 []int16) { - C.gl3_3compat_glRectsv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v1[0])), (*C.GLshort)(unsafe.Pointer(&v2[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRects.xml -func (gl *GL) Rects(x1, y1, x2, y2 int16) { - C.gl3_3compat_glRects(gl.funcs, C.GLshort(x1), C.GLshort(y1), C.GLshort(x2), C.GLshort(y2)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRectiv.xml -func (gl *GL) Rectiv(v1, v2 []int32) { - C.gl3_3compat_glRectiv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v1[0])), (*C.GLint)(unsafe.Pointer(&v2[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRecti.xml -func (gl *GL) Recti(x1, y1, x2, y2 int32) { - C.gl3_3compat_glRecti(gl.funcs, C.GLint(x1), C.GLint(y1), C.GLint(x2), C.GLint(y2)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRectfv.xml -func (gl *GL) Rectfv(v1, v2 []float32) { - C.gl3_3compat_glRectfv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v1[0])), (*C.GLfloat)(unsafe.Pointer(&v2[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRectf.xml -func (gl *GL) Rectf(x1, y1, x2, y2 float32) { - C.gl3_3compat_glRectf(gl.funcs, C.GLfloat(x1), C.GLfloat(y1), C.GLfloat(x2), C.GLfloat(y2)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRectdv.xml -func (gl *GL) Rectdv(v1, v2 []float64) { - C.gl3_3compat_glRectdv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v1[0])), (*C.GLdouble)(unsafe.Pointer(&v2[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRectd.xml -func (gl *GL) Rectd(x1, y1, x2, y2 float64) { - C.gl3_3compat_glRectd(gl.funcs, C.GLdouble(x1), C.GLdouble(y1), C.GLdouble(x2), C.GLdouble(y2)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos4sv.xml -func (gl *GL) RasterPos4sv(v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glRasterPos4sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos4s.xml -func (gl *GL) RasterPos4s(x, y, z, w int16) { - C.gl3_3compat_glRasterPos4s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z), C.GLshort(w)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos4iv.xml -func (gl *GL) RasterPos4iv(v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glRasterPos4iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos4i.xml -func (gl *GL) RasterPos4i(x, y, z, w int) { - C.gl3_3compat_glRasterPos4i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z), C.GLint(w)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos4fv.xml -func (gl *GL) RasterPos4fv(v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glRasterPos4fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos4f.xml -func (gl *GL) RasterPos4f(x, y, z, w float32) { - C.gl3_3compat_glRasterPos4f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z), C.GLfloat(w)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos4dv.xml -func (gl *GL) RasterPos4dv(v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glRasterPos4dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos4d.xml -func (gl *GL) RasterPos4d(x, y, z, w float64) { - C.gl3_3compat_glRasterPos4d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z), C.GLdouble(w)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos3sv.xml -func (gl *GL) RasterPos3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glRasterPos3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos3s.xml -func (gl *GL) RasterPos3s(x, y, z int16) { - C.gl3_3compat_glRasterPos3s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos3iv.xml -func (gl *GL) RasterPos3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glRasterPos3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos3i.xml -func (gl *GL) RasterPos3i(x, y, z int) { - C.gl3_3compat_glRasterPos3i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos3fv.xml -func (gl *GL) RasterPos3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glRasterPos3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos3f.xml -func (gl *GL) RasterPos3f(x, y, z float32) { - C.gl3_3compat_glRasterPos3f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos3dv.xml -func (gl *GL) RasterPos3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glRasterPos3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos3d.xml -func (gl *GL) RasterPos3d(x, y, z float64) { - C.gl3_3compat_glRasterPos3d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos2sv.xml -func (gl *GL) RasterPos2sv(v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glRasterPos2sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos2s.xml -func (gl *GL) RasterPos2s(x, y int16) { - C.gl3_3compat_glRasterPos2s(gl.funcs, C.GLshort(x), C.GLshort(y)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos2iv.xml -func (gl *GL) RasterPos2iv(v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glRasterPos2iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos2i.xml -func (gl *GL) RasterPos2i(x, y int) { - C.gl3_3compat_glRasterPos2i(gl.funcs, C.GLint(x), C.GLint(y)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos2fv.xml -func (gl *GL) RasterPos2fv(v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glRasterPos2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos2f.xml -func (gl *GL) RasterPos2f(x, y float32) { - C.gl3_3compat_glRasterPos2f(gl.funcs, C.GLfloat(x), C.GLfloat(y)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos2dv.xml -func (gl *GL) RasterPos2dv(v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glRasterPos2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRasterPos2d.xml -func (gl *GL) RasterPos2d(x, y float64) { - C.gl3_3compat_glRasterPos2d(gl.funcs, C.GLdouble(x), C.GLdouble(y)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glNormal3sv.xml -func (gl *GL) Normal3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glNormal3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glNormal3s.xml -func (gl *GL) Normal3s(nx, ny, nz int16) { - C.gl3_3compat_glNormal3s(gl.funcs, C.GLshort(nx), C.GLshort(ny), C.GLshort(nz)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glNormal3iv.xml -func (gl *GL) Normal3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glNormal3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glNormal3i.xml -func (gl *GL) Normal3i(nx, ny, nz int32) { - C.gl3_3compat_glNormal3i(gl.funcs, C.GLint(nx), C.GLint(ny), C.GLint(nz)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glNormal3fv.xml -func (gl *GL) Normal3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glNormal3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glNormal3f.xml -func (gl *GL) Normal3f(nx, ny, nz float32) { - C.gl3_3compat_glNormal3f(gl.funcs, C.GLfloat(nx), C.GLfloat(ny), C.GLfloat(nz)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glNormal3dv.xml -func (gl *GL) Normal3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glNormal3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glNormal3d.xml -func (gl *GL) Normal3d(nx, ny, nz float64) { - C.gl3_3compat_glNormal3d(gl.funcs, C.GLdouble(nx), C.GLdouble(ny), C.GLdouble(nz)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glNormal3bv.xml -func (gl *GL) Normal3bv(v []byte) { - C.gl3_3compat_glNormal3bv(gl.funcs, (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glNormal3b.xml -func (gl *GL) Normal3b(nx, ny, nz byte) { - C.gl3_3compat_glNormal3b(gl.funcs, C.GLbyte(nx), C.GLbyte(ny), C.GLbyte(nz)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIndexsv.xml -func (gl *GL) Indexsv(c []int16) { - C.gl3_3compat_glIndexsv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIndexs.xml -func (gl *GL) Indexs(c int16) { - C.gl3_3compat_glIndexs(gl.funcs, C.GLshort(c)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIndexiv.xml -func (gl *GL) Indexiv(c []int32) { - C.gl3_3compat_glIndexiv(gl.funcs, (*C.GLint)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIndexi.xml -func (gl *GL) Indexi(c int32) { - C.gl3_3compat_glIndexi(gl.funcs, C.GLint(c)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIndexfv.xml -func (gl *GL) Indexfv(c []float32) { - C.gl3_3compat_glIndexfv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIndexf.xml -func (gl *GL) Indexf(c float32) { - C.gl3_3compat_glIndexf(gl.funcs, C.GLfloat(c)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIndexdv.xml -func (gl *GL) Indexdv(c []float64) { - C.gl3_3compat_glIndexdv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIndexd.xml -func (gl *GL) Indexd(c float64) { - C.gl3_3compat_glIndexd(gl.funcs, C.GLdouble(c)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEnd.xml -func (gl *GL) End() { - C.gl3_3compat_glEnd(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEdgeFlagv.xml -func (gl *GL) EdgeFlagv(flag []bool) { - C.gl3_3compat_glEdgeFlagv(gl.funcs, (*C.GLboolean)(unsafe.Pointer(&flag[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEdgeFlag.xml -func (gl *GL) EdgeFlag(flag bool) { - C.gl3_3compat_glEdgeFlag(gl.funcs, *(*C.GLboolean)(unsafe.Pointer(&flag))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor4usv.xml -func (gl *GL) Color4usv(v []uint16) { - C.gl3_3compat_glColor4usv(gl.funcs, (*C.GLushort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor4us.xml -func (gl *GL) Color4us(red, green, blue, alpha uint16) { - C.gl3_3compat_glColor4us(gl.funcs, C.GLushort(red), C.GLushort(green), C.GLushort(blue), C.GLushort(alpha)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor4uiv.xml -func (gl *GL) Color4uiv(v []uint32) { - C.gl3_3compat_glColor4uiv(gl.funcs, (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor4ui.xml -func (gl *GL) Color4ui(red, green, blue, alpha uint32) { - C.gl3_3compat_glColor4ui(gl.funcs, C.GLuint(red), C.GLuint(green), C.GLuint(blue), C.GLuint(alpha)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor4ubv.xml -func (gl *GL) Color4ubv(v []uint8) { - C.gl3_3compat_glColor4ubv(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor4ub.xml -func (gl *GL) Color4ub(red, green, blue, alpha uint8) { - C.gl3_3compat_glColor4ub(gl.funcs, C.GLubyte(red), C.GLubyte(green), C.GLubyte(blue), C.GLubyte(alpha)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor4sv.xml -func (gl *GL) Color4sv(v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glColor4sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor4s.xml -func (gl *GL) Color4s(red, green, blue, alpha int16) { - C.gl3_3compat_glColor4s(gl.funcs, C.GLshort(red), C.GLshort(green), C.GLshort(blue), C.GLshort(alpha)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor4iv.xml -func (gl *GL) Color4iv(v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glColor4iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor4i.xml -func (gl *GL) Color4i(red, green, blue, alpha int32) { - C.gl3_3compat_glColor4i(gl.funcs, C.GLint(red), C.GLint(green), C.GLint(blue), C.GLint(alpha)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor4fv.xml -func (gl *GL) Color4fv(v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glColor4fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor4f.xml -func (gl *GL) Color4f(red, green, blue, alpha float32) { - C.gl3_3compat_glColor4f(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor4dv.xml -func (gl *GL) Color4dv(v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glColor4dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor4d.xml -func (gl *GL) Color4d(red, green, blue, alpha float64) { - C.gl3_3compat_glColor4d(gl.funcs, C.GLdouble(red), C.GLdouble(green), C.GLdouble(blue), C.GLdouble(alpha)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor4bv.xml -func (gl *GL) Color4bv(v []byte) { - C.gl3_3compat_glColor4bv(gl.funcs, (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor4b.xml -func (gl *GL) Color4b(red, green, blue, alpha byte) { - C.gl3_3compat_glColor4b(gl.funcs, C.GLbyte(red), C.GLbyte(green), C.GLbyte(blue), C.GLbyte(alpha)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor3usv.xml -func (gl *GL) Color3usv(v []uint16) { - C.gl3_3compat_glColor3usv(gl.funcs, (*C.GLushort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor3us.xml -func (gl *GL) Color3us(red, green, blue uint16) { - C.gl3_3compat_glColor3us(gl.funcs, C.GLushort(red), C.GLushort(green), C.GLushort(blue)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor3uiv.xml -func (gl *GL) Color3uiv(v []uint32) { - C.gl3_3compat_glColor3uiv(gl.funcs, (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor3ui.xml -func (gl *GL) Color3ui(red, green, blue uint32) { - C.gl3_3compat_glColor3ui(gl.funcs, C.GLuint(red), C.GLuint(green), C.GLuint(blue)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor3ubv.xml -func (gl *GL) Color3ubv(v []uint8) { - C.gl3_3compat_glColor3ubv(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor3ub.xml -func (gl *GL) Color3ub(red, green, blue uint8) { - C.gl3_3compat_glColor3ub(gl.funcs, C.GLubyte(red), C.GLubyte(green), C.GLubyte(blue)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor3sv.xml -func (gl *GL) Color3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glColor3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor3s.xml -func (gl *GL) Color3s(red, green, blue int16) { - C.gl3_3compat_glColor3s(gl.funcs, C.GLshort(red), C.GLshort(green), C.GLshort(blue)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor3iv.xml -func (gl *GL) Color3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glColor3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor3i.xml -func (gl *GL) Color3i(red, green, blue int32) { - C.gl3_3compat_glColor3i(gl.funcs, C.GLint(red), C.GLint(green), C.GLint(blue)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor3fv.xml -func (gl *GL) Color3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glColor3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor3f.xml -func (gl *GL) Color3f(red, green, blue float32) { - C.gl3_3compat_glColor3f(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor3dv.xml -func (gl *GL) Color3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glColor3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor3d.xml -func (gl *GL) Color3d(red, green, blue float64) { - C.gl3_3compat_glColor3d(gl.funcs, C.GLdouble(red), C.GLdouble(green), C.GLdouble(blue)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor3bv.xml -func (gl *GL) Color3bv(v []byte) { - C.gl3_3compat_glColor3bv(gl.funcs, (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColor3b.xml -func (gl *GL) Color3b(red, green, blue byte) { - C.gl3_3compat_glColor3b(gl.funcs, C.GLbyte(red), C.GLbyte(green), C.GLbyte(blue)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBitmap.xml -func (gl *GL) Bitmap(width, height int, xorig, yorig, xmove, ymove float32, bitmap []uint8) { - C.gl3_3compat_glBitmap(gl.funcs, C.GLsizei(width), C.GLsizei(height), C.GLfloat(xorig), C.GLfloat(yorig), C.GLfloat(xmove), C.GLfloat(ymove), (*C.GLubyte)(unsafe.Pointer(&bitmap[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBegin.xml -func (gl *GL) Begin(mode glbase.Enum) { - C.gl3_3compat_glBegin(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glListBase.xml -func (gl *GL) ListBase(base uint32) { - C.gl3_3compat_glListBase(gl.funcs, C.GLuint(base)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGenLists.xml -func (gl *GL) GenLists(range_ int32) uint32 { - glresult := C.gl3_3compat_glGenLists(gl.funcs, C.GLsizei(range_)) - return uint32(glresult) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDeleteLists.xml -func (gl *GL) DeleteLists(list uint32, range_ int32) { - C.gl3_3compat_glDeleteLists(gl.funcs, C.GLuint(list), C.GLsizei(range_)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCallLists.xml -func (gl *GL) CallLists(n int, gltype glbase.Enum, lists interface{}) { - var lists_ptr unsafe.Pointer - var lists_v = reflect.ValueOf(lists) - if lists != nil && lists_v.Kind() != reflect.Slice { - panic("parameter lists must be a slice") - } - if lists != nil { - lists_ptr = unsafe.Pointer(lists_v.Index(0).Addr().Pointer()) - } - C.gl3_3compat_glCallLists(gl.funcs, C.GLsizei(n), C.GLenum(gltype), lists_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCallList.xml -func (gl *GL) CallList(list uint32) { - C.gl3_3compat_glCallList(gl.funcs, C.GLuint(list)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEndList.xml -func (gl *GL) EndList() { - C.gl3_3compat_glEndList(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glNewList.xml -func (gl *GL) NewList(list uint32, mode glbase.Enum) { - C.gl3_3compat_glNewList(gl.funcs, C.GLuint(list), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPushClientAttrib.xml -func (gl *GL) PushClientAttrib(mask glbase.Bitfield) { - C.gl3_3compat_glPushClientAttrib(gl.funcs, C.GLbitfield(mask)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPopClientAttrib.xml -func (gl *GL) PopClientAttrib() { - C.gl3_3compat_glPopClientAttrib(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPrioritizeTextures.xml -func (gl *GL) PrioritizeTextures(n int, textures []glbase.Texture, priorities []float32) { - C.gl3_3compat_glPrioritizeTextures(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0])), (*C.GLfloat)(unsafe.Pointer(&priorities[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glAreTexturesResident.xml -func (gl *GL) AreTexturesResident(n int, textures []glbase.Texture, residences []bool) bool { - glresult := C.gl3_3compat_glAreTexturesResident(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0])), (*C.GLboolean)(unsafe.Pointer(&residences[0]))) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexPointer.xml -func (gl *GL) VertexPointer(size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl3_3compat_glVertexPointer(gl.funcs, C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoordPointer.xml -func (gl *GL) TexCoordPointer(size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl3_3compat_glTexCoordPointer(gl.funcs, C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glNormalPointer.xml -func (gl *GL) NormalPointer(gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl3_3compat_glNormalPointer(gl.funcs, C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glInterleavedArrays.xml -func (gl *GL) InterleavedArrays(format glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl3_3compat_glInterleavedArrays(gl.funcs, C.GLenum(format), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIndexPointer.xml -func (gl *GL) IndexPointer(gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl3_3compat_glIndexPointer(gl.funcs, C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEnableClientState.xml -func (gl *GL) EnableClientState(array glbase.Enum) { - C.gl3_3compat_glEnableClientState(gl.funcs, C.GLenum(array)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEdgeFlagPointer.xml -func (gl *GL) EdgeFlagPointer(stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl3_3compat_glEdgeFlagPointer(gl.funcs, C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDisableClientState.xml -func (gl *GL) DisableClientState(array glbase.Enum) { - C.gl3_3compat_glDisableClientState(gl.funcs, C.GLenum(array)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColorPointer.xml -func (gl *GL) ColorPointer(size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl3_3compat_glColorPointer(gl.funcs, C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glArrayElement.xml -func (gl *GL) ArrayElement(i int32) { - C.gl3_3compat_glArrayElement(gl.funcs, C.GLint(i)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glResetMinmax.xml -func (gl *GL) ResetMinmax(target glbase.Enum) { - C.gl3_3compat_glResetMinmax(gl.funcs, C.GLenum(target)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glResetHistogram.xml -func (gl *GL) ResetHistogram(target glbase.Enum) { - C.gl3_3compat_glResetHistogram(gl.funcs, C.GLenum(target)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMinmax.xml -func (gl *GL) Minmax(target, internalFormat glbase.Enum, sink bool) { - C.gl3_3compat_glMinmax(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), *(*C.GLboolean)(unsafe.Pointer(&sink))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glHistogram.xml -func (gl *GL) Histogram(target glbase.Enum, width int, internalFormat glbase.Enum, sink bool) { - C.gl3_3compat_glHistogram(gl.funcs, C.GLenum(target), C.GLsizei(width), C.GLenum(internalFormat), *(*C.GLboolean)(unsafe.Pointer(&sink))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetMinmaxParameteriv.xml -func (gl *GL) GetMinmaxParameteriv(target, pname glbase.Enum, params []int32) { - C.gl3_3compat_glGetMinmaxParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetMinmaxParameterfv.xml -func (gl *GL) GetMinmaxParameterfv(target, pname glbase.Enum, params []float32) { - C.gl3_3compat_glGetMinmaxParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetMinmax.xml -func (gl *GL) GetMinmax(target glbase.Enum, reset bool, format, gltype glbase.Enum, values interface{}) { - var values_ptr unsafe.Pointer - var values_v = reflect.ValueOf(values) - if values != nil && values_v.Kind() != reflect.Slice { - panic("parameter values must be a slice") - } - if values != nil { - values_ptr = unsafe.Pointer(values_v.Index(0).Addr().Pointer()) - } - C.gl3_3compat_glGetMinmax(gl.funcs, C.GLenum(target), *(*C.GLboolean)(unsafe.Pointer(&reset)), C.GLenum(format), C.GLenum(gltype), values_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetHistogramParameteriv.xml -func (gl *GL) GetHistogramParameteriv(target, pname glbase.Enum, params []int32) { - C.gl3_3compat_glGetHistogramParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetHistogramParameterfv.xml -func (gl *GL) GetHistogramParameterfv(target, pname glbase.Enum, params []float32) { - C.gl3_3compat_glGetHistogramParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetHistogram.xml -func (gl *GL) GetHistogram(target glbase.Enum, reset bool, format, gltype glbase.Enum, values interface{}) { - var values_ptr unsafe.Pointer - var values_v = reflect.ValueOf(values) - if values != nil && values_v.Kind() != reflect.Slice { - panic("parameter values must be a slice") - } - if values != nil { - values_ptr = unsafe.Pointer(values_v.Index(0).Addr().Pointer()) - } - C.gl3_3compat_glGetHistogram(gl.funcs, C.GLenum(target), *(*C.GLboolean)(unsafe.Pointer(&reset)), C.GLenum(format), C.GLenum(gltype), values_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSeparableFilter2D.xml -func (gl *GL) SeparableFilter2D(target, internalFormat glbase.Enum, width, height int, format, gltype glbase.Enum, row, column interface{}) { - var row_ptr unsafe.Pointer - var row_v = reflect.ValueOf(row) - if row != nil && row_v.Kind() != reflect.Slice { - panic("parameter row must be a slice") - } - if row != nil { - row_ptr = unsafe.Pointer(row_v.Index(0).Addr().Pointer()) - } - var column_ptr unsafe.Pointer - var column_v = reflect.ValueOf(column) - if column != nil && column_v.Kind() != reflect.Slice { - panic("parameter column must be a slice") - } - if column != nil { - column_ptr = unsafe.Pointer(column_v.Index(0).Addr().Pointer()) - } - C.gl3_3compat_glSeparableFilter2D(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), row_ptr, column_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetSeparableFilter.xml -func (gl *GL) GetSeparableFilter(target, format, gltype glbase.Enum, row, column, span interface{}) { - var row_ptr unsafe.Pointer - var row_v = reflect.ValueOf(row) - if row != nil && row_v.Kind() != reflect.Slice { - panic("parameter row must be a slice") - } - if row != nil { - row_ptr = unsafe.Pointer(row_v.Index(0).Addr().Pointer()) - } - var column_ptr unsafe.Pointer - var column_v = reflect.ValueOf(column) - if column != nil && column_v.Kind() != reflect.Slice { - panic("parameter column must be a slice") - } - if column != nil { - column_ptr = unsafe.Pointer(column_v.Index(0).Addr().Pointer()) - } - var span_ptr unsafe.Pointer - var span_v = reflect.ValueOf(span) - if span != nil && span_v.Kind() != reflect.Slice { - panic("parameter span must be a slice") - } - if span != nil { - span_ptr = unsafe.Pointer(span_v.Index(0).Addr().Pointer()) - } - C.gl3_3compat_glGetSeparableFilter(gl.funcs, C.GLenum(target), C.GLenum(format), C.GLenum(gltype), row_ptr, column_ptr, span_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetConvolutionParameteriv.xml -func (gl *GL) GetConvolutionParameteriv(target, pname glbase.Enum, params []int32) { - C.gl3_3compat_glGetConvolutionParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetConvolutionParameterfv.xml -func (gl *GL) GetConvolutionParameterfv(target, pname glbase.Enum, params []float32) { - C.gl3_3compat_glGetConvolutionParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetConvolutionFilter.xml -func (gl *GL) GetConvolutionFilter(target, format, gltype glbase.Enum, image interface{}) { - var image_ptr unsafe.Pointer - var image_v = reflect.ValueOf(image) - if image != nil && image_v.Kind() != reflect.Slice { - panic("parameter image must be a slice") - } - if image != nil { - image_ptr = unsafe.Pointer(image_v.Index(0).Addr().Pointer()) - } - C.gl3_3compat_glGetConvolutionFilter(gl.funcs, C.GLenum(target), C.GLenum(format), C.GLenum(gltype), image_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCopyConvolutionFilter2D.xml -func (gl *GL) CopyConvolutionFilter2D(target, internalFormat glbase.Enum, x, y, width, height int) { - C.gl3_3compat_glCopyConvolutionFilter2D(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCopyConvolutionFilter1D.xml -func (gl *GL) CopyConvolutionFilter1D(target, internalFormat glbase.Enum, x, y, width int) { - C.gl3_3compat_glCopyConvolutionFilter1D(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glConvolutionParameteriv.xml -func (gl *GL) ConvolutionParameteriv(target, pname glbase.Enum, params []int32) { - C.gl3_3compat_glConvolutionParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glConvolutionParameteri.xml -func (gl *GL) ConvolutionParameteri(target, pname glbase.Enum, params int32) { - C.gl3_3compat_glConvolutionParameteri(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLint(params)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glConvolutionParameterfv.xml -func (gl *GL) ConvolutionParameterfv(target, pname glbase.Enum, params []float32) { - C.gl3_3compat_glConvolutionParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glConvolutionParameterf.xml -func (gl *GL) ConvolutionParameterf(target, pname glbase.Enum, params float32) { - C.gl3_3compat_glConvolutionParameterf(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLfloat(params)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glConvolutionFilter2D.xml -func (gl *GL) ConvolutionFilter2D(target, internalFormat glbase.Enum, width, height int, format, gltype glbase.Enum, image interface{}) { - var image_ptr unsafe.Pointer - var image_v = reflect.ValueOf(image) - if image != nil && image_v.Kind() != reflect.Slice { - panic("parameter image must be a slice") - } - if image != nil { - image_ptr = unsafe.Pointer(image_v.Index(0).Addr().Pointer()) - } - C.gl3_3compat_glConvolutionFilter2D(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), image_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glConvolutionFilter1D.xml -func (gl *GL) ConvolutionFilter1D(target, internalFormat glbase.Enum, width int, format, gltype glbase.Enum, image interface{}) { - var image_ptr unsafe.Pointer - var image_v = reflect.ValueOf(image) - if image != nil && image_v.Kind() != reflect.Slice { - panic("parameter image must be a slice") - } - if image != nil { - image_ptr = unsafe.Pointer(image_v.Index(0).Addr().Pointer()) - } - C.gl3_3compat_glConvolutionFilter1D(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLsizei(width), C.GLenum(format), C.GLenum(gltype), image_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCopyColorSubTable.xml -func (gl *GL) CopyColorSubTable(target glbase.Enum, start int32, x, y, width int) { - C.gl3_3compat_glCopyColorSubTable(gl.funcs, C.GLenum(target), C.GLsizei(start), C.GLint(x), C.GLint(y), C.GLsizei(width)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColorSubTable.xml -func (gl *GL) ColorSubTable(target glbase.Enum, start int32, count int, format, gltype glbase.Enum, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl3_3compat_glColorSubTable(gl.funcs, C.GLenum(target), C.GLsizei(start), C.GLsizei(count), C.GLenum(format), C.GLenum(gltype), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetColorTableParameteriv.xml -func (gl *GL) GetColorTableParameteriv(target, pname glbase.Enum, params []int32) { - C.gl3_3compat_glGetColorTableParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetColorTableParameterfv.xml -func (gl *GL) GetColorTableParameterfv(target, pname glbase.Enum, params []float32) { - C.gl3_3compat_glGetColorTableParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetColorTable.xml -func (gl *GL) GetColorTable(target, format, gltype glbase.Enum, table interface{}) { - var table_ptr unsafe.Pointer - var table_v = reflect.ValueOf(table) - if table != nil && table_v.Kind() != reflect.Slice { - panic("parameter table must be a slice") - } - if table != nil { - table_ptr = unsafe.Pointer(table_v.Index(0).Addr().Pointer()) - } - C.gl3_3compat_glGetColorTable(gl.funcs, C.GLenum(target), C.GLenum(format), C.GLenum(gltype), table_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCopyColorTable.xml -func (gl *GL) CopyColorTable(target, internalFormat glbase.Enum, x, y, width int) { - C.gl3_3compat_glCopyColorTable(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColorTableParameteriv.xml -func (gl *GL) ColorTableParameteriv(target, pname glbase.Enum, params []int32) { - C.gl3_3compat_glColorTableParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColorTableParameterfv.xml -func (gl *GL) ColorTableParameterfv(target, pname glbase.Enum, params []float32) { - C.gl3_3compat_glColorTableParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColorTable.xml -func (gl *GL) ColorTable(target, internalFormat glbase.Enum, width int, format, gltype glbase.Enum, table interface{}) { - var table_ptr unsafe.Pointer - var table_v = reflect.ValueOf(table) - if table != nil && table_v.Kind() != reflect.Slice { - panic("parameter table must be a slice") - } - if table != nil { - table_ptr = unsafe.Pointer(table_v.Index(0).Addr().Pointer()) - } - C.gl3_3compat_glColorTable(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLsizei(width), C.GLenum(format), C.GLenum(gltype), table_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultTransposeMatrixd.xml -func (gl *GL) MultTransposeMatrixd(m []float64) { - C.gl3_3compat_glMultTransposeMatrixd(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultTransposeMatrixf.xml -func (gl *GL) MultTransposeMatrixf(m []float32) { - C.gl3_3compat_glMultTransposeMatrixf(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glLoadTransposeMatrixd.xml -func (gl *GL) LoadTransposeMatrixd(m []float64) { - C.gl3_3compat_glLoadTransposeMatrixd(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glLoadTransposeMatrixf.xml -func (gl *GL) LoadTransposeMatrixf(m []float32) { - C.gl3_3compat_glLoadTransposeMatrixf(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord4sv.xml -func (gl *GL) MultiTexCoord4sv(target glbase.Enum, v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glMultiTexCoord4sv(gl.funcs, C.GLenum(target), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord4s.xml -func (gl *GL) MultiTexCoord4s(target glbase.Enum, s, t, r, q int16) { - C.gl3_3compat_glMultiTexCoord4s(gl.funcs, C.GLenum(target), C.GLshort(s), C.GLshort(t), C.GLshort(r), C.GLshort(q)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord4iv.xml -func (gl *GL) MultiTexCoord4iv(target glbase.Enum, v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glMultiTexCoord4iv(gl.funcs, C.GLenum(target), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord4i.xml -func (gl *GL) MultiTexCoord4i(target glbase.Enum, s, t, r, q int32) { - C.gl3_3compat_glMultiTexCoord4i(gl.funcs, C.GLenum(target), C.GLint(s), C.GLint(t), C.GLint(r), C.GLint(q)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord4fv.xml -func (gl *GL) MultiTexCoord4fv(target glbase.Enum, v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glMultiTexCoord4fv(gl.funcs, C.GLenum(target), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord4f.xml -func (gl *GL) MultiTexCoord4f(target glbase.Enum, s, t, r, q float32) { - C.gl3_3compat_glMultiTexCoord4f(gl.funcs, C.GLenum(target), C.GLfloat(s), C.GLfloat(t), C.GLfloat(r), C.GLfloat(q)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord4dv.xml -func (gl *GL) MultiTexCoord4dv(target glbase.Enum, v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glMultiTexCoord4dv(gl.funcs, C.GLenum(target), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord4d.xml -func (gl *GL) MultiTexCoord4d(target glbase.Enum, s, t, r, q float64) { - C.gl3_3compat_glMultiTexCoord4d(gl.funcs, C.GLenum(target), C.GLdouble(s), C.GLdouble(t), C.GLdouble(r), C.GLdouble(q)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord3sv.xml -func (gl *GL) MultiTexCoord3sv(target glbase.Enum, v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glMultiTexCoord3sv(gl.funcs, C.GLenum(target), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord3s.xml -func (gl *GL) MultiTexCoord3s(target glbase.Enum, s, t, r int16) { - C.gl3_3compat_glMultiTexCoord3s(gl.funcs, C.GLenum(target), C.GLshort(s), C.GLshort(t), C.GLshort(r)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord3iv.xml -func (gl *GL) MultiTexCoord3iv(target glbase.Enum, v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glMultiTexCoord3iv(gl.funcs, C.GLenum(target), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord3i.xml -func (gl *GL) MultiTexCoord3i(target glbase.Enum, s, t, r int32) { - C.gl3_3compat_glMultiTexCoord3i(gl.funcs, C.GLenum(target), C.GLint(s), C.GLint(t), C.GLint(r)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord3fv.xml -func (gl *GL) MultiTexCoord3fv(target glbase.Enum, v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glMultiTexCoord3fv(gl.funcs, C.GLenum(target), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord3f.xml -func (gl *GL) MultiTexCoord3f(target glbase.Enum, s, t, r float32) { - C.gl3_3compat_glMultiTexCoord3f(gl.funcs, C.GLenum(target), C.GLfloat(s), C.GLfloat(t), C.GLfloat(r)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord3dv.xml -func (gl *GL) MultiTexCoord3dv(target glbase.Enum, v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glMultiTexCoord3dv(gl.funcs, C.GLenum(target), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord3d.xml -func (gl *GL) MultiTexCoord3d(target glbase.Enum, s, t, r float64) { - C.gl3_3compat_glMultiTexCoord3d(gl.funcs, C.GLenum(target), C.GLdouble(s), C.GLdouble(t), C.GLdouble(r)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord2sv.xml -func (gl *GL) MultiTexCoord2sv(target glbase.Enum, v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glMultiTexCoord2sv(gl.funcs, C.GLenum(target), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord2s.xml -func (gl *GL) MultiTexCoord2s(target glbase.Enum, s, t int16) { - C.gl3_3compat_glMultiTexCoord2s(gl.funcs, C.GLenum(target), C.GLshort(s), C.GLshort(t)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord2iv.xml -func (gl *GL) MultiTexCoord2iv(target glbase.Enum, v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glMultiTexCoord2iv(gl.funcs, C.GLenum(target), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord2i.xml -func (gl *GL) MultiTexCoord2i(target glbase.Enum, s, t int32) { - C.gl3_3compat_glMultiTexCoord2i(gl.funcs, C.GLenum(target), C.GLint(s), C.GLint(t)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord2fv.xml -func (gl *GL) MultiTexCoord2fv(target glbase.Enum, v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glMultiTexCoord2fv(gl.funcs, C.GLenum(target), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord2f.xml -func (gl *GL) MultiTexCoord2f(target glbase.Enum, s, t float32) { - C.gl3_3compat_glMultiTexCoord2f(gl.funcs, C.GLenum(target), C.GLfloat(s), C.GLfloat(t)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord2dv.xml -func (gl *GL) MultiTexCoord2dv(target glbase.Enum, v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glMultiTexCoord2dv(gl.funcs, C.GLenum(target), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord2d.xml -func (gl *GL) MultiTexCoord2d(target glbase.Enum, s, t float64) { - C.gl3_3compat_glMultiTexCoord2d(gl.funcs, C.GLenum(target), C.GLdouble(s), C.GLdouble(t)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord1sv.xml -func (gl *GL) MultiTexCoord1sv(target glbase.Enum, v []int16) { - C.gl3_3compat_glMultiTexCoord1sv(gl.funcs, C.GLenum(target), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord1s.xml -func (gl *GL) MultiTexCoord1s(target glbase.Enum, s int16) { - C.gl3_3compat_glMultiTexCoord1s(gl.funcs, C.GLenum(target), C.GLshort(s)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord1iv.xml -func (gl *GL) MultiTexCoord1iv(target glbase.Enum, v []int32) { - C.gl3_3compat_glMultiTexCoord1iv(gl.funcs, C.GLenum(target), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord1i.xml -func (gl *GL) MultiTexCoord1i(target glbase.Enum, s int32) { - C.gl3_3compat_glMultiTexCoord1i(gl.funcs, C.GLenum(target), C.GLint(s)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord1fv.xml -func (gl *GL) MultiTexCoord1fv(target glbase.Enum, v []float32) { - C.gl3_3compat_glMultiTexCoord1fv(gl.funcs, C.GLenum(target), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord1f.xml -func (gl *GL) MultiTexCoord1f(target glbase.Enum, s float32) { - C.gl3_3compat_glMultiTexCoord1f(gl.funcs, C.GLenum(target), C.GLfloat(s)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord1dv.xml -func (gl *GL) MultiTexCoord1dv(target glbase.Enum, v []float64) { - C.gl3_3compat_glMultiTexCoord1dv(gl.funcs, C.GLenum(target), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoord1d.xml -func (gl *GL) MultiTexCoord1d(target glbase.Enum, s float64) { - C.gl3_3compat_glMultiTexCoord1d(gl.funcs, C.GLenum(target), C.GLdouble(s)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClientActiveTexture.xml -func (gl *GL) ClientActiveTexture(texture glbase.Enum) { - C.gl3_3compat_glClientActiveTexture(gl.funcs, C.GLenum(texture)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glWindowPos3sv.xml -func (gl *GL) WindowPos3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glWindowPos3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glWindowPos3s.xml -func (gl *GL) WindowPos3s(x, y, z int16) { - C.gl3_3compat_glWindowPos3s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glWindowPos3iv.xml -func (gl *GL) WindowPos3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glWindowPos3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glWindowPos3i.xml -func (gl *GL) WindowPos3i(x, y, z int) { - C.gl3_3compat_glWindowPos3i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glWindowPos3fv.xml -func (gl *GL) WindowPos3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glWindowPos3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glWindowPos3f.xml -func (gl *GL) WindowPos3f(x, y, z float32) { - C.gl3_3compat_glWindowPos3f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glWindowPos3dv.xml -func (gl *GL) WindowPos3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glWindowPos3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glWindowPos3d.xml -func (gl *GL) WindowPos3d(x, y, z float64) { - C.gl3_3compat_glWindowPos3d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glWindowPos2sv.xml -func (gl *GL) WindowPos2sv(v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glWindowPos2sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glWindowPos2s.xml -func (gl *GL) WindowPos2s(x, y int16) { - C.gl3_3compat_glWindowPos2s(gl.funcs, C.GLshort(x), C.GLshort(y)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glWindowPos2iv.xml -func (gl *GL) WindowPos2iv(v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glWindowPos2iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glWindowPos2i.xml -func (gl *GL) WindowPos2i(x, y int) { - C.gl3_3compat_glWindowPos2i(gl.funcs, C.GLint(x), C.GLint(y)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glWindowPos2fv.xml -func (gl *GL) WindowPos2fv(v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glWindowPos2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glWindowPos2f.xml -func (gl *GL) WindowPos2f(x, y float32) { - C.gl3_3compat_glWindowPos2f(gl.funcs, C.GLfloat(x), C.GLfloat(y)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glWindowPos2dv.xml -func (gl *GL) WindowPos2dv(v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glWindowPos2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glWindowPos2d.xml -func (gl *GL) WindowPos2d(x, y float64) { - C.gl3_3compat_glWindowPos2d(gl.funcs, C.GLdouble(x), C.GLdouble(y)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSecondaryColorPointer.xml -func (gl *GL) SecondaryColorPointer(size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl3_3compat_glSecondaryColorPointer(gl.funcs, C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSecondaryColor3usv.xml -func (gl *GL) SecondaryColor3usv(v []uint16) { - C.gl3_3compat_glSecondaryColor3usv(gl.funcs, (*C.GLushort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSecondaryColor3us.xml -func (gl *GL) SecondaryColor3us(red, green, blue uint16) { - C.gl3_3compat_glSecondaryColor3us(gl.funcs, C.GLushort(red), C.GLushort(green), C.GLushort(blue)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSecondaryColor3uiv.xml -func (gl *GL) SecondaryColor3uiv(v []uint32) { - C.gl3_3compat_glSecondaryColor3uiv(gl.funcs, (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSecondaryColor3ui.xml -func (gl *GL) SecondaryColor3ui(red, green, blue uint32) { - C.gl3_3compat_glSecondaryColor3ui(gl.funcs, C.GLuint(red), C.GLuint(green), C.GLuint(blue)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSecondaryColor3ubv.xml -func (gl *GL) SecondaryColor3ubv(v []uint8) { - C.gl3_3compat_glSecondaryColor3ubv(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSecondaryColor3ub.xml -func (gl *GL) SecondaryColor3ub(red, green, blue uint8) { - C.gl3_3compat_glSecondaryColor3ub(gl.funcs, C.GLubyte(red), C.GLubyte(green), C.GLubyte(blue)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSecondaryColor3sv.xml -func (gl *GL) SecondaryColor3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glSecondaryColor3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSecondaryColor3s.xml -func (gl *GL) SecondaryColor3s(red, green, blue int16) { - C.gl3_3compat_glSecondaryColor3s(gl.funcs, C.GLshort(red), C.GLshort(green), C.GLshort(blue)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSecondaryColor3iv.xml -func (gl *GL) SecondaryColor3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glSecondaryColor3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSecondaryColor3i.xml -func (gl *GL) SecondaryColor3i(red, green, blue int32) { - C.gl3_3compat_glSecondaryColor3i(gl.funcs, C.GLint(red), C.GLint(green), C.GLint(blue)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSecondaryColor3fv.xml -func (gl *GL) SecondaryColor3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glSecondaryColor3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSecondaryColor3f.xml -func (gl *GL) SecondaryColor3f(red, green, blue float32) { - C.gl3_3compat_glSecondaryColor3f(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSecondaryColor3dv.xml -func (gl *GL) SecondaryColor3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glSecondaryColor3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSecondaryColor3d.xml -func (gl *GL) SecondaryColor3d(red, green, blue float64) { - C.gl3_3compat_glSecondaryColor3d(gl.funcs, C.GLdouble(red), C.GLdouble(green), C.GLdouble(blue)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSecondaryColor3bv.xml -func (gl *GL) SecondaryColor3bv(v []byte) { - C.gl3_3compat_glSecondaryColor3bv(gl.funcs, (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSecondaryColor3b.xml -func (gl *GL) SecondaryColor3b(red, green, blue byte) { - C.gl3_3compat_glSecondaryColor3b(gl.funcs, C.GLbyte(red), C.GLbyte(green), C.GLbyte(blue)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFogCoordPointer.xml -func (gl *GL) FogCoordPointer(gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl3_3compat_glFogCoordPointer(gl.funcs, C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFogCoorddv.xml -func (gl *GL) FogCoorddv(coord []float64) { - C.gl3_3compat_glFogCoorddv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&coord[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFogCoordd.xml -func (gl *GL) FogCoordd(coord float64) { - C.gl3_3compat_glFogCoordd(gl.funcs, C.GLdouble(coord)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFogCoordfv.xml -func (gl *GL) FogCoordfv(coord []float32) { - C.gl3_3compat_glFogCoordfv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&coord[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFogCoordf.xml -func (gl *GL) FogCoordf(coord float32) { - C.gl3_3compat_glFogCoordf(gl.funcs, C.GLfloat(coord)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib4usv.xml -func (gl *GL) VertexAttrib4usv(index glbase.Attrib, v []uint16) { - C.gl3_3compat_glVertexAttrib4usv(gl.funcs, C.GLuint(index), (*C.GLushort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib4uiv.xml -func (gl *GL) VertexAttrib4uiv(index glbase.Attrib, v []uint32) { - C.gl3_3compat_glVertexAttrib4uiv(gl.funcs, C.GLuint(index), (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib4ubv.xml -func (gl *GL) VertexAttrib4ubv(index glbase.Attrib, v []uint8) { - C.gl3_3compat_glVertexAttrib4ubv(gl.funcs, C.GLuint(index), (*C.GLubyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib4sv.xml -func (gl *GL) VertexAttrib4sv(index glbase.Attrib, v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glVertexAttrib4sv(gl.funcs, C.GLuint(index), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib4s.xml -func (gl *GL) VertexAttrib4s(index glbase.Attrib, x, y, z, w int16) { - C.gl3_3compat_glVertexAttrib4s(gl.funcs, C.GLuint(index), C.GLshort(x), C.GLshort(y), C.GLshort(z), C.GLshort(w)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib4iv.xml -func (gl *GL) VertexAttrib4iv(index glbase.Attrib, v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glVertexAttrib4iv(gl.funcs, C.GLuint(index), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib4fv.xml -func (gl *GL) VertexAttrib4fv(index glbase.Attrib, v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glVertexAttrib4fv(gl.funcs, C.GLuint(index), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib4f.xml -func (gl *GL) VertexAttrib4f(index glbase.Attrib, x, y, z, w float32) { - C.gl3_3compat_glVertexAttrib4f(gl.funcs, C.GLuint(index), C.GLfloat(x), C.GLfloat(y), C.GLfloat(z), C.GLfloat(w)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib4dv.xml -func (gl *GL) VertexAttrib4dv(index glbase.Attrib, v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glVertexAttrib4dv(gl.funcs, C.GLuint(index), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib4d.xml -func (gl *GL) VertexAttrib4d(index glbase.Attrib, x, y, z, w float64) { - C.gl3_3compat_glVertexAttrib4d(gl.funcs, C.GLuint(index), C.GLdouble(x), C.GLdouble(y), C.GLdouble(z), C.GLdouble(w)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib4bv.xml -func (gl *GL) VertexAttrib4bv(index glbase.Attrib, v []byte) { - C.gl3_3compat_glVertexAttrib4bv(gl.funcs, C.GLuint(index), (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib4Nusv.xml -func (gl *GL) VertexAttrib4Nusv(index glbase.Attrib, v []uint16) { - C.gl3_3compat_glVertexAttrib4Nusv(gl.funcs, C.GLuint(index), (*C.GLushort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib4Nuiv.xml -func (gl *GL) VertexAttrib4Nuiv(index glbase.Attrib, v []uint32) { - C.gl3_3compat_glVertexAttrib4Nuiv(gl.funcs, C.GLuint(index), (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib4Nubv.xml -func (gl *GL) VertexAttrib4Nubv(index glbase.Attrib, v []uint8) { - C.gl3_3compat_glVertexAttrib4Nubv(gl.funcs, C.GLuint(index), (*C.GLubyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib4Nub.xml -func (gl *GL) VertexAttrib4Nub(index glbase.Attrib, x, y, z, w uint8) { - C.gl3_3compat_glVertexAttrib4Nub(gl.funcs, C.GLuint(index), C.GLubyte(x), C.GLubyte(y), C.GLubyte(z), C.GLubyte(w)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib4Nsv.xml -func (gl *GL) VertexAttrib4Nsv(index glbase.Attrib, v []int16) { - C.gl3_3compat_glVertexAttrib4Nsv(gl.funcs, C.GLuint(index), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib4Niv.xml -func (gl *GL) VertexAttrib4Niv(index glbase.Attrib, v []int32) { - C.gl3_3compat_glVertexAttrib4Niv(gl.funcs, C.GLuint(index), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib4Nbv.xml -func (gl *GL) VertexAttrib4Nbv(index glbase.Attrib, v []byte) { - C.gl3_3compat_glVertexAttrib4Nbv(gl.funcs, C.GLuint(index), (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib3sv.xml -func (gl *GL) VertexAttrib3sv(index glbase.Attrib, v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glVertexAttrib3sv(gl.funcs, C.GLuint(index), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib3s.xml -func (gl *GL) VertexAttrib3s(index glbase.Attrib, x, y, z int16) { - C.gl3_3compat_glVertexAttrib3s(gl.funcs, C.GLuint(index), C.GLshort(x), C.GLshort(y), C.GLshort(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib3fv.xml -func (gl *GL) VertexAttrib3fv(index glbase.Attrib, v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glVertexAttrib3fv(gl.funcs, C.GLuint(index), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib3f.xml -func (gl *GL) VertexAttrib3f(index glbase.Attrib, x, y, z float32) { - C.gl3_3compat_glVertexAttrib3f(gl.funcs, C.GLuint(index), C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib3dv.xml -func (gl *GL) VertexAttrib3dv(index glbase.Attrib, v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glVertexAttrib3dv(gl.funcs, C.GLuint(index), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib3d.xml -func (gl *GL) VertexAttrib3d(index glbase.Attrib, x, y, z float64) { - C.gl3_3compat_glVertexAttrib3d(gl.funcs, C.GLuint(index), C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib2sv.xml -func (gl *GL) VertexAttrib2sv(index glbase.Attrib, v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glVertexAttrib2sv(gl.funcs, C.GLuint(index), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib2s.xml -func (gl *GL) VertexAttrib2s(index glbase.Attrib, x, y int16) { - C.gl3_3compat_glVertexAttrib2s(gl.funcs, C.GLuint(index), C.GLshort(x), C.GLshort(y)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib2fv.xml -func (gl *GL) VertexAttrib2fv(index glbase.Attrib, v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glVertexAttrib2fv(gl.funcs, C.GLuint(index), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib2f.xml -func (gl *GL) VertexAttrib2f(index glbase.Attrib, x, y float32) { - C.gl3_3compat_glVertexAttrib2f(gl.funcs, C.GLuint(index), C.GLfloat(x), C.GLfloat(y)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib2dv.xml -func (gl *GL) VertexAttrib2dv(index glbase.Attrib, v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glVertexAttrib2dv(gl.funcs, C.GLuint(index), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib2d.xml -func (gl *GL) VertexAttrib2d(index glbase.Attrib, x, y float64) { - C.gl3_3compat_glVertexAttrib2d(gl.funcs, C.GLuint(index), C.GLdouble(x), C.GLdouble(y)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib1sv.xml -func (gl *GL) VertexAttrib1sv(index glbase.Attrib, v []int16) { - C.gl3_3compat_glVertexAttrib1sv(gl.funcs, C.GLuint(index), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib1s.xml -func (gl *GL) VertexAttrib1s(index glbase.Attrib, x int16) { - C.gl3_3compat_glVertexAttrib1s(gl.funcs, C.GLuint(index), C.GLshort(x)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib1fv.xml -func (gl *GL) VertexAttrib1fv(index glbase.Attrib, v []float32) { - C.gl3_3compat_glVertexAttrib1fv(gl.funcs, C.GLuint(index), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib1f.xml -func (gl *GL) VertexAttrib1f(index glbase.Attrib, x float32) { - C.gl3_3compat_glVertexAttrib1f(gl.funcs, C.GLuint(index), C.GLfloat(x)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib1dv.xml -func (gl *GL) VertexAttrib1dv(index glbase.Attrib, v []float64) { - C.gl3_3compat_glVertexAttrib1dv(gl.funcs, C.GLuint(index), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib1d.xml -func (gl *GL) VertexAttrib1d(index glbase.Attrib, x float64) { - C.gl3_3compat_glVertexAttrib1d(gl.funcs, C.GLuint(index), C.GLdouble(x)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribI4usv.xml -func (gl *GL) VertexAttribI4usv(index glbase.Attrib, v []uint16) { - C.gl3_3compat_glVertexAttribI4usv(gl.funcs, C.GLuint(index), (*C.GLushort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribI4ubv.xml -func (gl *GL) VertexAttribI4ubv(index glbase.Attrib, v []uint8) { - C.gl3_3compat_glVertexAttribI4ubv(gl.funcs, C.GLuint(index), (*C.GLubyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribI4sv.xml -func (gl *GL) VertexAttribI4sv(index glbase.Attrib, v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glVertexAttribI4sv(gl.funcs, C.GLuint(index), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribI4bv.xml -func (gl *GL) VertexAttribI4bv(index glbase.Attrib, v []byte) { - C.gl3_3compat_glVertexAttribI4bv(gl.funcs, C.GLuint(index), (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribI4uiv.xml -func (gl *GL) VertexAttribI4uiv(index glbase.Attrib, v []uint32) { - C.gl3_3compat_glVertexAttribI4uiv(gl.funcs, C.GLuint(index), (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribI3uiv.xml -func (gl *GL) VertexAttribI3uiv(index glbase.Attrib, v []uint32) { - C.gl3_3compat_glVertexAttribI3uiv(gl.funcs, C.GLuint(index), (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribI2uiv.xml -func (gl *GL) VertexAttribI2uiv(index glbase.Attrib, v []uint32) { - C.gl3_3compat_glVertexAttribI2uiv(gl.funcs, C.GLuint(index), (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribI1uiv.xml -func (gl *GL) VertexAttribI1uiv(index glbase.Attrib, v []uint32) { - C.gl3_3compat_glVertexAttribI1uiv(gl.funcs, C.GLuint(index), (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribI4iv.xml -func (gl *GL) VertexAttribI4iv(index glbase.Attrib, v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glVertexAttribI4iv(gl.funcs, C.GLuint(index), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribI3iv.xml -func (gl *GL) VertexAttribI3iv(index glbase.Attrib, v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glVertexAttribI3iv(gl.funcs, C.GLuint(index), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribI2iv.xml -func (gl *GL) VertexAttribI2iv(index glbase.Attrib, v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl3_3compat_glVertexAttribI2iv(gl.funcs, C.GLuint(index), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribI1iv.xml -func (gl *GL) VertexAttribI1iv(index glbase.Attrib, v []int32) { - C.gl3_3compat_glVertexAttribI1iv(gl.funcs, C.GLuint(index), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribI4ui.xml -func (gl *GL) VertexAttribI4ui(index glbase.Attrib, x, y, z, w uint32) { - C.gl3_3compat_glVertexAttribI4ui(gl.funcs, C.GLuint(index), C.GLuint(x), C.GLuint(y), C.GLuint(z), C.GLuint(w)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribI3ui.xml -func (gl *GL) VertexAttribI3ui(index glbase.Attrib, x, y, z uint32) { - C.gl3_3compat_glVertexAttribI3ui(gl.funcs, C.GLuint(index), C.GLuint(x), C.GLuint(y), C.GLuint(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribI2ui.xml -func (gl *GL) VertexAttribI2ui(index glbase.Attrib, x, y uint32) { - C.gl3_3compat_glVertexAttribI2ui(gl.funcs, C.GLuint(index), C.GLuint(x), C.GLuint(y)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribI1ui.xml -func (gl *GL) VertexAttribI1ui(index glbase.Attrib, x uint32) { - C.gl3_3compat_glVertexAttribI1ui(gl.funcs, C.GLuint(index), C.GLuint(x)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribI4i.xml -func (gl *GL) VertexAttribI4i(index glbase.Attrib, x, y, z, w int) { - C.gl3_3compat_glVertexAttribI4i(gl.funcs, C.GLuint(index), C.GLint(x), C.GLint(y), C.GLint(z), C.GLint(w)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribI3i.xml -func (gl *GL) VertexAttribI3i(index glbase.Attrib, x, y, z int) { - C.gl3_3compat_glVertexAttribI3i(gl.funcs, C.GLuint(index), C.GLint(x), C.GLint(y), C.GLint(z)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribI2i.xml -func (gl *GL) VertexAttribI2i(index glbase.Attrib, x, y int) { - C.gl3_3compat_glVertexAttribI2i(gl.funcs, C.GLuint(index), C.GLint(x), C.GLint(y)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribI1i.xml -func (gl *GL) VertexAttribI1i(index glbase.Attrib, x int) { - C.gl3_3compat_glVertexAttribI1i(gl.funcs, C.GLuint(index), C.GLint(x)) -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/3.3core/funcs.cpp b/Godeps/_workspace/src/github.com/obscuren/qml/gl/3.3core/funcs.cpp deleted file mode 100644 index b03b94ac9a..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/3.3core/funcs.cpp +++ /dev/null @@ -1,1878 +0,0 @@ - -// ** file automatically generated by glgen -- do not edit manually ** - -#include -#include - -#include "funcs.h" - -void *gl3_3core_funcs() { - QOpenGLFunctions_3_3_Core* funcs = QOpenGLContext::currentContext()->versionFunctions(); - if (!funcs) { - return 0; - } - funcs->initializeOpenGLFunctions(); - return funcs; -} - - -void gl3_3core_glViewport(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glViewport(x, y, width, height); -} - -void gl3_3core_glDepthRange(void *_glfuncs, GLdouble nearVal, GLdouble farVal) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthRange(nearVal, farVal); -} - -GLboolean gl3_3core_glIsEnabled(void *_glfuncs, GLenum cap) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsEnabled(cap); -} - -void gl3_3core_glGetTexLevelParameteriv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexLevelParameteriv(target, level, pname, params); -} - -void gl3_3core_glGetTexLevelParameterfv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexLevelParameterfv(target, level, pname, params); -} - -void gl3_3core_glGetTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameteriv(target, pname, params); -} - -void gl3_3core_glGetTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameterfv(target, pname, params); -} - -void gl3_3core_glGetTexImage(void *_glfuncs, GLenum target, GLint level, GLenum format, GLenum gltype, GLvoid* pixels) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexImage(target, level, format, gltype, pixels); -} - -void gl3_3core_glGetIntegerv(void *_glfuncs, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetIntegerv(pname, params); -} - -void gl3_3core_glGetFloatv(void *_glfuncs, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetFloatv(pname, params); -} - -GLenum gl3_3core_glGetError(void *_glfuncs) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetError(); -} - -void gl3_3core_glGetDoublev(void *_glfuncs, GLenum pname, GLdouble* params) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetDoublev(pname, params); -} - -void gl3_3core_glGetBooleanv(void *_glfuncs, GLenum pname, GLboolean* params) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBooleanv(pname, params); -} - -void gl3_3core_glReadPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum gltype, GLvoid* pixels) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glReadPixels(x, y, width, height, format, gltype, pixels); -} - -void gl3_3core_glReadBuffer(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glReadBuffer(mode); -} - -void gl3_3core_glPixelStorei(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelStorei(pname, param); -} - -void gl3_3core_glPixelStoref(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelStoref(pname, param); -} - -void gl3_3core_glDepthFunc(void *_glfuncs, GLenum glfunc) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthFunc(glfunc); -} - -void gl3_3core_glStencilOp(void *_glfuncs, GLenum fail, GLenum zfail, GLenum zpass) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilOp(fail, zfail, zpass); -} - -void gl3_3core_glStencilFunc(void *_glfuncs, GLenum glfunc, GLint ref, GLuint mask) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilFunc(glfunc, ref, mask); -} - -void gl3_3core_glLogicOp(void *_glfuncs, GLenum opcode) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLogicOp(opcode); -} - -void gl3_3core_glBlendFunc(void *_glfuncs, GLenum sfactor, GLenum dfactor) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendFunc(sfactor, dfactor); -} - -void gl3_3core_glFlush(void *_glfuncs) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFlush(); -} - -void gl3_3core_glFinish(void *_glfuncs) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFinish(); -} - -void gl3_3core_glEnable(void *_glfuncs, GLenum cap) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnable(cap); -} - -void gl3_3core_glDisable(void *_glfuncs, GLenum cap) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDisable(cap); -} - -void gl3_3core_glDepthMask(void *_glfuncs, GLboolean flag) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthMask(flag); -} - -void gl3_3core_glColorMask(void *_glfuncs, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorMask(red, green, blue, alpha); -} - -void gl3_3core_glStencilMask(void *_glfuncs, GLuint mask) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilMask(mask); -} - -void gl3_3core_glClearDepth(void *_glfuncs, GLdouble depth) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearDepth(depth); -} - -void gl3_3core_glClearStencil(void *_glfuncs, GLint s) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearStencil(s); -} - -void gl3_3core_glClearColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearColor(red, green, blue, alpha); -} - -void gl3_3core_glClear(void *_glfuncs, GLbitfield mask) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClear(mask); -} - -void gl3_3core_glDrawBuffer(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawBuffer(mode); -} - -void gl3_3core_glTexImage2D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage2D(target, level, internalFormat, width, height, border, format, gltype, pixels); -} - -void gl3_3core_glTexImage1D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage1D(target, level, internalFormat, width, border, format, gltype, pixels); -} - -void gl3_3core_glTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameteriv(target, pname, params); -} - -void gl3_3core_glTexParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint param) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameteri(target, pname, param); -} - -void gl3_3core_glTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterfv(target, pname, params); -} - -void gl3_3core_glTexParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterf(target, pname, param); -} - -void gl3_3core_glScissor(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScissor(x, y, width, height); -} - -void gl3_3core_glPolygonMode(void *_glfuncs, GLenum face, GLenum mode) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPolygonMode(face, mode); -} - -void gl3_3core_glPointSize(void *_glfuncs, GLfloat size) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointSize(size); -} - -void gl3_3core_glLineWidth(void *_glfuncs, GLfloat width) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLineWidth(width); -} - -void gl3_3core_glHint(void *_glfuncs, GLenum target, GLenum mode) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glHint(target, mode); -} - -void gl3_3core_glFrontFace(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFrontFace(mode); -} - -void gl3_3core_glCullFace(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCullFace(mode); -} - -void gl3_3core_glIndexubv(void *_glfuncs, const GLubyte* c) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexubv(c); -} - -void gl3_3core_glIndexub(void *_glfuncs, GLubyte c) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexub(c); -} - -GLboolean gl3_3core_glIsTexture(void *_glfuncs, GLuint texture) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsTexture(texture); -} - -void gl3_3core_glGenTextures(void *_glfuncs, GLsizei n, GLuint* textures) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenTextures(n, textures); -} - -void gl3_3core_glDeleteTextures(void *_glfuncs, GLsizei n, const GLuint* textures) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteTextures(n, textures); -} - -void gl3_3core_glBindTexture(void *_glfuncs, GLenum target, GLuint texture) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindTexture(target, texture); -} - -void gl3_3core_glTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, gltype, pixels); -} - -void gl3_3core_glTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexSubImage1D(target, level, xoffset, width, format, gltype, pixels); -} - -void gl3_3core_glCopyTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height); -} - -void gl3_3core_glCopyTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexSubImage1D(target, level, xoffset, x, y, width); -} - -void gl3_3core_glCopyTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexImage2D(target, level, internalFormat, x, y, width, height, border); -} - -void gl3_3core_glCopyTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexImage1D(target, level, internalFormat, x, y, width, border); -} - -void gl3_3core_glPolygonOffset(void *_glfuncs, GLfloat factor, GLfloat units) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPolygonOffset(factor, units); -} - -void gl3_3core_glDrawElements(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElements(mode, count, gltype, indices); -} - -void gl3_3core_glDrawArrays(void *_glfuncs, GLenum mode, GLint first, GLsizei count) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawArrays(mode, first, count); -} - -void gl3_3core_glCopyTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexSubImage3D(target, level, xoffset, yoffset, zoffset, x, y, width, height); -} - -void gl3_3core_glTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, gltype, pixels); -} - -void gl3_3core_glTexImage3D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage3D(target, level, internalFormat, width, height, depth, border, format, gltype, pixels); -} - -void gl3_3core_glDrawRangeElements(void *_glfuncs, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum gltype, const GLvoid* indices) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawRangeElements(mode, start, end, count, gltype, indices); -} - -void gl3_3core_glBlendEquation(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendEquation(mode); -} - -void gl3_3core_glBlendColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendColor(red, green, blue, alpha); -} - -void gl3_3core_glGetCompressedTexImage(void *_glfuncs, GLenum target, GLint level, GLvoid* img) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetCompressedTexImage(target, level, img); -} - -void gl3_3core_glCompressedTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexSubImage1D(target, level, xoffset, width, format, imageSize, data); -} - -void gl3_3core_glCompressedTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data); -} - -void gl3_3core_glCompressedTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data); -} - -void gl3_3core_glCompressedTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexImage1D(target, level, internalFormat, width, border, imageSize, data); -} - -void gl3_3core_glCompressedTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexImage2D(target, level, internalFormat, width, height, border, imageSize, data); -} - -void gl3_3core_glCompressedTexImage3D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexImage3D(target, level, internalFormat, width, height, depth, border, imageSize, data); -} - -void gl3_3core_glSampleCoverage(void *_glfuncs, GLfloat value, GLboolean invert) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSampleCoverage(value, invert); -} - -void gl3_3core_glActiveTexture(void *_glfuncs, GLenum texture) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glActiveTexture(texture); -} - -void gl3_3core_glPointParameteriv(void *_glfuncs, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameteriv(pname, params); -} - -void gl3_3core_glPointParameteri(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameteri(pname, param); -} - -void gl3_3core_glPointParameterfv(void *_glfuncs, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameterfv(pname, params); -} - -void gl3_3core_glPointParameterf(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameterf(pname, param); -} - -void gl3_3core_glMultiDrawArrays(void *_glfuncs, GLenum mode, const GLint* first, const GLsizei* count, GLsizei drawcount) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiDrawArrays(mode, first, count, drawcount); -} - -void gl3_3core_glBlendFuncSeparate(void *_glfuncs, GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendFuncSeparate(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha); -} - -void gl3_3core_glGetBufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBufferParameteriv(target, pname, params); -} - -GLboolean gl3_3core_glUnmapBuffer(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glUnmapBuffer(target); -} - -void gl3_3core_glGetBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, GLvoid* data) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBufferSubData(target, offset, size, data); -} - -void gl3_3core_glBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBufferSubData(target, offset, size, data); -} - -void gl3_3core_glBufferData(void *_glfuncs, GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBufferData(target, size, data, usage); -} - -GLboolean gl3_3core_glIsBuffer(void *_glfuncs, GLuint buffer) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsBuffer(buffer); -} - -void gl3_3core_glGenBuffers(void *_glfuncs, GLsizei n, GLuint* buffers) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenBuffers(n, buffers); -} - -void gl3_3core_glDeleteBuffers(void *_glfuncs, GLsizei n, const GLuint* buffers) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteBuffers(n, buffers); -} - -void gl3_3core_glBindBuffer(void *_glfuncs, GLenum target, GLuint buffer) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindBuffer(target, buffer); -} - -void gl3_3core_glGetQueryObjectuiv(void *_glfuncs, GLuint id, GLenum pname, GLuint* params) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryObjectuiv(id, pname, params); -} - -void gl3_3core_glGetQueryObjectiv(void *_glfuncs, GLuint id, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryObjectiv(id, pname, params); -} - -void gl3_3core_glGetQueryiv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryiv(target, pname, params); -} - -void gl3_3core_glEndQuery(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndQuery(target); -} - -void gl3_3core_glBeginQuery(void *_glfuncs, GLenum target, GLuint id) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBeginQuery(target, id); -} - -GLboolean gl3_3core_glIsQuery(void *_glfuncs, GLuint id) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsQuery(id); -} - -void gl3_3core_glDeleteQueries(void *_glfuncs, GLsizei n, const GLuint* ids) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteQueries(n, ids); -} - -void gl3_3core_glGenQueries(void *_glfuncs, GLsizei n, GLuint* ids) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenQueries(n, ids); -} - -void gl3_3core_glVertexAttribPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLboolean normalized, GLsizei stride, const GLvoid* offset) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribPointer(index, size, gltype, normalized, stride, offset); -} - -void gl3_3core_glValidateProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glValidateProgram(program); -} - -void gl3_3core_glUniformMatrix4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4fv(location, count, transpose, value); -} - -void gl3_3core_glUniformMatrix3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3fv(location, count, transpose, value); -} - -void gl3_3core_glUniformMatrix2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2fv(location, count, transpose, value); -} - -void gl3_3core_glUniform4iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4iv(location, count, value); -} - -void gl3_3core_glUniform3iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3iv(location, count, value); -} - -void gl3_3core_glUniform2iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2iv(location, count, value); -} - -void gl3_3core_glUniform1iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1iv(location, count, value); -} - -void gl3_3core_glUniform4fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4fv(location, count, value); -} - -void gl3_3core_glUniform3fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3fv(location, count, value); -} - -void gl3_3core_glUniform2fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2fv(location, count, value); -} - -void gl3_3core_glUniform1fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1fv(location, count, value); -} - -void gl3_3core_glUniform4i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2, GLint v3) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4i(location, v0, v1, v2, v3); -} - -void gl3_3core_glUniform3i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3i(location, v0, v1, v2); -} - -void gl3_3core_glUniform2i(void *_glfuncs, GLint location, GLint v0, GLint v1) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2i(location, v0, v1); -} - -void gl3_3core_glUniform1i(void *_glfuncs, GLint location, GLint v0) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1i(location, v0); -} - -void gl3_3core_glUniform4f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4f(location, v0, v1, v2, v3); -} - -void gl3_3core_glUniform3f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3f(location, v0, v1, v2); -} - -void gl3_3core_glUniform2f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2f(location, v0, v1); -} - -void gl3_3core_glUniform1f(void *_glfuncs, GLint location, GLfloat v0) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1f(location, v0); -} - -void gl3_3core_glUseProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUseProgram(program); -} - -void gl3_3core_glShaderSource(void *_glfuncs, GLuint shader, GLsizei count, const GLchar** source, const GLint* length) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glShaderSource(shader, count, source, length); -} - -void gl3_3core_glLinkProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLinkProgram(program); -} - -GLboolean gl3_3core_glIsShader(void *_glfuncs, GLuint shader) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsShader(shader); -} - -GLboolean gl3_3core_glIsProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsProgram(program); -} - -void gl3_3core_glGetVertexAttribiv(void *_glfuncs, GLuint index, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribiv(index, pname, params); -} - -void gl3_3core_glGetVertexAttribfv(void *_glfuncs, GLuint index, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribfv(index, pname, params); -} - -void gl3_3core_glGetVertexAttribdv(void *_glfuncs, GLuint index, GLenum pname, GLdouble* params) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribdv(index, pname, params); -} - -void gl3_3core_glGetUniformiv(void *_glfuncs, GLuint program, GLint location, GLint* params) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetUniformiv(program, location, params); -} - -void gl3_3core_glGetUniformfv(void *_glfuncs, GLuint program, GLint location, GLfloat* params) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetUniformfv(program, location, params); -} - -GLint gl3_3core_glGetUniformLocation(void *_glfuncs, GLuint program, const GLchar* name) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetUniformLocation(program, name); -} - -void gl3_3core_glGetShaderSource(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* source) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetShaderSource(shader, bufSize, length, source); -} - -void gl3_3core_glGetShaderInfoLog(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* infoLog) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetShaderInfoLog(shader, bufSize, length, infoLog); -} - -void gl3_3core_glGetShaderiv(void *_glfuncs, GLuint shader, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetShaderiv(shader, pname, params); -} - -void gl3_3core_glGetProgramInfoLog(void *_glfuncs, GLuint program, GLsizei bufSize, GLsizei* length, GLchar* infoLog) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetProgramInfoLog(program, bufSize, length, infoLog); -} - -void gl3_3core_glGetProgramiv(void *_glfuncs, GLuint program, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetProgramiv(program, pname, params); -} - -GLint gl3_3core_glGetAttribLocation(void *_glfuncs, GLuint program, const GLchar* name) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetAttribLocation(program, name); -} - -void gl3_3core_glGetAttachedShaders(void *_glfuncs, GLuint program, GLsizei maxCount, GLsizei* count, GLuint* obj) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetAttachedShaders(program, maxCount, count, obj); -} - -void gl3_3core_glGetActiveUniform(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniform(program, index, bufSize, length, size, gltype, name); -} - -void gl3_3core_glGetActiveAttrib(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveAttrib(program, index, bufSize, length, size, gltype, name); -} - -void gl3_3core_glEnableVertexAttribArray(void *_glfuncs, GLuint index) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnableVertexAttribArray(index); -} - -void gl3_3core_glDisableVertexAttribArray(void *_glfuncs, GLuint index) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDisableVertexAttribArray(index); -} - -void gl3_3core_glDetachShader(void *_glfuncs, GLuint program, GLuint shader) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDetachShader(program, shader); -} - -void gl3_3core_glDeleteShader(void *_glfuncs, GLuint shader) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteShader(shader); -} - -void gl3_3core_glDeleteProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteProgram(program); -} - -GLuint gl3_3core_glCreateShader(void *_glfuncs, GLenum gltype) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glCreateShader(gltype); -} - -GLuint gl3_3core_glCreateProgram(void *_glfuncs) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glCreateProgram(); -} - -void gl3_3core_glCompileShader(void *_glfuncs, GLuint shader) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompileShader(shader); -} - -void gl3_3core_glBindAttribLocation(void *_glfuncs, GLuint program, GLuint index, const GLchar* name) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindAttribLocation(program, index, name); -} - -void gl3_3core_glAttachShader(void *_glfuncs, GLuint program, GLuint shader) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glAttachShader(program, shader); -} - -void gl3_3core_glStencilMaskSeparate(void *_glfuncs, GLenum face, GLuint mask) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilMaskSeparate(face, mask); -} - -void gl3_3core_glStencilFuncSeparate(void *_glfuncs, GLenum face, GLenum glfunc, GLint ref, GLuint mask) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilFuncSeparate(face, glfunc, ref, mask); -} - -void gl3_3core_glStencilOpSeparate(void *_glfuncs, GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilOpSeparate(face, sfail, dpfail, dppass); -} - -void gl3_3core_glDrawBuffers(void *_glfuncs, GLsizei n, const GLenum* bufs) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawBuffers(n, bufs); -} - -void gl3_3core_glBlendEquationSeparate(void *_glfuncs, GLenum modeRGB, GLenum modeAlpha) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendEquationSeparate(modeRGB, modeAlpha); -} - -void gl3_3core_glUniformMatrix4x3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4x3fv(location, count, transpose, value); -} - -void gl3_3core_glUniformMatrix3x4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3x4fv(location, count, transpose, value); -} - -void gl3_3core_glUniformMatrix4x2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4x2fv(location, count, transpose, value); -} - -void gl3_3core_glUniformMatrix2x4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2x4fv(location, count, transpose, value); -} - -void gl3_3core_glUniformMatrix3x2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3x2fv(location, count, transpose, value); -} - -void gl3_3core_glUniformMatrix2x3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2x3fv(location, count, transpose, value); -} - -GLboolean gl3_3core_glIsVertexArray(void *_glfuncs, GLuint array) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsVertexArray(array); -} - -void gl3_3core_glGenVertexArrays(void *_glfuncs, GLsizei n, GLuint* arrays) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenVertexArrays(n, arrays); -} - -void gl3_3core_glDeleteVertexArrays(void *_glfuncs, GLsizei n, const GLuint* arrays) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteVertexArrays(n, arrays); -} - -void gl3_3core_glBindVertexArray(void *_glfuncs, GLuint array) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindVertexArray(array); -} - -void gl3_3core_glFlushMappedBufferRange(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr length) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFlushMappedBufferRange(target, offset, length); -} - -void gl3_3core_glFramebufferTextureLayer(void *_glfuncs, GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTextureLayer(target, attachment, texture, level, layer); -} - -void gl3_3core_glRenderbufferStorageMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRenderbufferStorageMultisample(target, samples, internalFormat, width, height); -} - -void gl3_3core_glBlitFramebuffer(void *_glfuncs, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter); -} - -void gl3_3core_glGenerateMipmap(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenerateMipmap(target); -} - -void gl3_3core_glGetFramebufferAttachmentParameteriv(void *_glfuncs, GLenum target, GLenum attachment, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetFramebufferAttachmentParameteriv(target, attachment, pname, params); -} - -void gl3_3core_glFramebufferRenderbuffer(void *_glfuncs, GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer); -} - -void gl3_3core_glFramebufferTexture3D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTexture3D(target, attachment, textarget, texture, level, zoffset); -} - -void gl3_3core_glFramebufferTexture2D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTexture2D(target, attachment, textarget, texture, level); -} - -void gl3_3core_glFramebufferTexture1D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTexture1D(target, attachment, textarget, texture, level); -} - -GLenum gl3_3core_glCheckFramebufferStatus(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glCheckFramebufferStatus(target); -} - -void gl3_3core_glGenFramebuffers(void *_glfuncs, GLsizei n, GLuint* framebuffers) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenFramebuffers(n, framebuffers); -} - -void gl3_3core_glDeleteFramebuffers(void *_glfuncs, GLsizei n, const GLuint* framebuffers) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteFramebuffers(n, framebuffers); -} - -void gl3_3core_glBindFramebuffer(void *_glfuncs, GLenum target, GLuint framebuffer) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindFramebuffer(target, framebuffer); -} - -GLboolean gl3_3core_glIsFramebuffer(void *_glfuncs, GLuint framebuffer) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsFramebuffer(framebuffer); -} - -void gl3_3core_glGetRenderbufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetRenderbufferParameteriv(target, pname, params); -} - -void gl3_3core_glRenderbufferStorage(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRenderbufferStorage(target, internalFormat, width, height); -} - -void gl3_3core_glGenRenderbuffers(void *_glfuncs, GLsizei n, GLuint* renderbuffers) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenRenderbuffers(n, renderbuffers); -} - -void gl3_3core_glDeleteRenderbuffers(void *_glfuncs, GLsizei n, const GLuint* renderbuffers) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteRenderbuffers(n, renderbuffers); -} - -void gl3_3core_glBindRenderbuffer(void *_glfuncs, GLenum target, GLuint renderbuffer) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindRenderbuffer(target, renderbuffer); -} - -GLboolean gl3_3core_glIsRenderbuffer(void *_glfuncs, GLuint renderbuffer) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsRenderbuffer(renderbuffer); -} - -void gl3_3core_glClearBufferfi(void *_glfuncs, GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearBufferfi(buffer, drawbuffer, depth, stencil); -} - -void gl3_3core_glClearBufferfv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLfloat* value) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearBufferfv(buffer, drawbuffer, value); -} - -void gl3_3core_glClearBufferuiv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLuint* value) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearBufferuiv(buffer, drawbuffer, value); -} - -void gl3_3core_glClearBufferiv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLint* value) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearBufferiv(buffer, drawbuffer, value); -} - -void gl3_3core_glGetTexParameterIuiv(void *_glfuncs, GLenum target, GLenum pname, GLuint* params) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameterIuiv(target, pname, params); -} - -void gl3_3core_glGetTexParameterIiv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameterIiv(target, pname, params); -} - -void gl3_3core_glTexParameterIuiv(void *_glfuncs, GLenum target, GLenum pname, const GLuint* params) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterIuiv(target, pname, params); -} - -void gl3_3core_glTexParameterIiv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterIiv(target, pname, params); -} - -void gl3_3core_glUniform4uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4uiv(location, count, value); -} - -void gl3_3core_glUniform3uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3uiv(location, count, value); -} - -void gl3_3core_glUniform2uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2uiv(location, count, value); -} - -void gl3_3core_glUniform1uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1uiv(location, count, value); -} - -void gl3_3core_glUniform4ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4ui(location, v0, v1, v2, v3); -} - -void gl3_3core_glUniform3ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1, GLuint v2) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3ui(location, v0, v1, v2); -} - -void gl3_3core_glUniform2ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2ui(location, v0, v1); -} - -void gl3_3core_glUniform1ui(void *_glfuncs, GLint location, GLuint v0) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1ui(location, v0); -} - -GLint gl3_3core_glGetFragDataLocation(void *_glfuncs, GLuint program, const GLchar* name) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetFragDataLocation(program, name); -} - -void gl3_3core_glBindFragDataLocation(void *_glfuncs, GLuint program, GLuint color, const GLchar* name) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindFragDataLocation(program, color, name); -} - -void gl3_3core_glGetUniformuiv(void *_glfuncs, GLuint program, GLint location, GLuint* params) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetUniformuiv(program, location, params); -} - -void gl3_3core_glGetVertexAttribIuiv(void *_glfuncs, GLuint index, GLenum pname, GLuint* params) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribIuiv(index, pname, params); -} - -void gl3_3core_glGetVertexAttribIiv(void *_glfuncs, GLuint index, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribIiv(index, pname, params); -} - -void gl3_3core_glVertexAttribIPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribIPointer(index, size, gltype, stride, pointer); -} - -void gl3_3core_glEndConditionalRender(void *_glfuncs) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndConditionalRender(); -} - -void gl3_3core_glBeginConditionalRender(void *_glfuncs, GLuint id, GLenum mode) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBeginConditionalRender(id, mode); -} - -void gl3_3core_glClampColor(void *_glfuncs, GLenum target, GLenum clamp) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClampColor(target, clamp); -} - -void gl3_3core_glGetTransformFeedbackVarying(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* gltype, GLchar* name) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTransformFeedbackVarying(program, index, bufSize, length, size, gltype, name); -} - -void gl3_3core_glBindBufferBase(void *_glfuncs, GLenum target, GLuint index, GLuint buffer) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindBufferBase(target, index, buffer); -} - -void gl3_3core_glBindBufferRange(void *_glfuncs, GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindBufferRange(target, index, buffer, offset, size); -} - -void gl3_3core_glEndTransformFeedback(void *_glfuncs) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndTransformFeedback(); -} - -void gl3_3core_glBeginTransformFeedback(void *_glfuncs, GLenum primitiveMode) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBeginTransformFeedback(primitiveMode); -} - -GLboolean gl3_3core_glIsEnabledi(void *_glfuncs, GLenum target, GLuint index) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsEnabledi(target, index); -} - -void gl3_3core_glDisablei(void *_glfuncs, GLenum target, GLuint index) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDisablei(target, index); -} - -void gl3_3core_glEnablei(void *_glfuncs, GLenum target, GLuint index) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnablei(target, index); -} - -void gl3_3core_glGetIntegeri_v(void *_glfuncs, GLenum target, GLuint index, GLint* data) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetIntegeri_v(target, index, data); -} - -void gl3_3core_glGetBooleani_v(void *_glfuncs, GLenum target, GLuint index, GLboolean* data) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBooleani_v(target, index, data); -} - -void gl3_3core_glColorMaski(void *_glfuncs, GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorMaski(index, r, g, b, a); -} - -void gl3_3core_glCopyBufferSubData(void *_glfuncs, GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyBufferSubData(readTarget, writeTarget, readOffset, writeOffset, size); -} - -void gl3_3core_glUniformBlockBinding(void *_glfuncs, GLuint program, GLuint v0, GLuint v1) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformBlockBinding(program, v0, v1); -} - -void gl3_3core_glGetActiveUniformBlockName(void *_glfuncs, GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformBlockName) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniformBlockName(program, uniformBlockIndex, bufSize, length, uniformBlockName); -} - -void gl3_3core_glGetActiveUniformBlockiv(void *_glfuncs, GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniformBlockiv(program, uniformBlockIndex, pname, params); -} - -GLuint gl3_3core_glGetUniformBlockIndex(void *_glfuncs, GLuint program, const GLchar* uniformBlockName) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetUniformBlockIndex(program, uniformBlockName); -} - -void gl3_3core_glGetActiveUniformName(void *_glfuncs, GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformName) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniformName(program, uniformIndex, bufSize, length, uniformName); -} - -void gl3_3core_glGetActiveUniformsiv(void *_glfuncs, GLuint program, GLsizei uniformCount, const GLuint* uniformIndices, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniformsiv(program, uniformCount, uniformIndices, pname, params); -} - -void gl3_3core_glPrimitiveRestartIndex(void *_glfuncs, GLuint index) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPrimitiveRestartIndex(index); -} - -void gl3_3core_glTexBuffer(void *_glfuncs, GLenum target, GLenum internalFormat, GLuint buffer) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexBuffer(target, internalFormat, buffer); -} - -void gl3_3core_glDrawElementsInstanced(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLsizei instancecount) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElementsInstanced(mode, count, gltype, indices, instancecount); -} - -void gl3_3core_glDrawArraysInstanced(void *_glfuncs, GLenum mode, GLint first, GLsizei count, GLsizei instancecount) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawArraysInstanced(mode, first, count, instancecount); -} - -void gl3_3core_glSampleMaski(void *_glfuncs, GLuint index, GLbitfield mask) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSampleMaski(index, mask); -} - -void gl3_3core_glGetMultisamplefv(void *_glfuncs, GLenum pname, GLuint index, GLfloat* val) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMultisamplefv(pname, index, val); -} - -void gl3_3core_glTexImage3DMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage3DMultisample(target, samples, internalFormat, width, height, depth, fixedsamplelocations); -} - -void gl3_3core_glTexImage2DMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage2DMultisample(target, samples, internalFormat, width, height, fixedsamplelocations); -} - -void gl3_3core_glGetSynciv(void *_glfuncs, GLsync sync, GLenum pname, GLsizei bufSize, GLsizei* length, GLint* values) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetSynciv(sync, pname, bufSize, length, values); -} - -void gl3_3core_glGetInteger64v(void *_glfuncs, GLenum pname, GLint64* params) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetInteger64v(pname, params); -} - -void gl3_3core_glWaitSync(void *_glfuncs, GLsync sync, GLbitfield flags, GLuint64 timeout) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWaitSync(sync, flags, timeout); -} - -GLenum gl3_3core_glClientWaitSync(void *_glfuncs, GLsync sync, GLbitfield flags, GLuint64 timeout) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glClientWaitSync(sync, flags, timeout); -} - -void gl3_3core_glDeleteSync(void *_glfuncs, GLsync sync) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteSync(sync); -} - -GLboolean gl3_3core_glIsSync(void *_glfuncs, GLsync sync) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsSync(sync); -} - -GLsync gl3_3core_glFenceSync(void *_glfuncs, GLenum condition, GLbitfield flags) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glFenceSync(condition, flags); -} - -void gl3_3core_glProvokingVertex(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProvokingVertex(mode); -} - -void gl3_3core_glDrawElementsInstancedBaseVertex(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLsizei instancecount, GLint basevertex) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElementsInstancedBaseVertex(mode, count, gltype, indices, instancecount, basevertex); -} - -void gl3_3core_glDrawRangeElementsBaseVertex(void *_glfuncs, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum gltype, const GLvoid* indices, GLint basevertex) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawRangeElementsBaseVertex(mode, start, end, count, gltype, indices, basevertex); -} - -void gl3_3core_glDrawElementsBaseVertex(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLint basevertex) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElementsBaseVertex(mode, count, gltype, indices, basevertex); -} - -void gl3_3core_glFramebufferTexture(void *_glfuncs, GLenum target, GLenum attachment, GLuint texture, GLint level) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTexture(target, attachment, texture, level); -} - -void gl3_3core_glGetBufferParameteri64v(void *_glfuncs, GLenum target, GLenum pname, GLint64* params) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBufferParameteri64v(target, pname, params); -} - -void gl3_3core_glGetInteger64i_v(void *_glfuncs, GLenum target, GLuint index, GLint64* data) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetInteger64i_v(target, index, data); -} - -void gl3_3core_glVertexAttribP4uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP4uiv(index, gltype, normalized, value); -} - -void gl3_3core_glVertexAttribP4ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP4ui(index, gltype, normalized, value); -} - -void gl3_3core_glVertexAttribP3uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP3uiv(index, gltype, normalized, value); -} - -void gl3_3core_glVertexAttribP3ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP3ui(index, gltype, normalized, value); -} - -void gl3_3core_glVertexAttribP2uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP2uiv(index, gltype, normalized, value); -} - -void gl3_3core_glVertexAttribP2ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP2ui(index, gltype, normalized, value); -} - -void gl3_3core_glVertexAttribP1uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP1uiv(index, gltype, normalized, value); -} - -void gl3_3core_glVertexAttribP1ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP1ui(index, gltype, normalized, value); -} - -void gl3_3core_glSecondaryColorP3uiv(void *_glfuncs, GLenum gltype, const GLuint* color) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColorP3uiv(gltype, color); -} - -void gl3_3core_glSecondaryColorP3ui(void *_glfuncs, GLenum gltype, GLuint color) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColorP3ui(gltype, color); -} - -void gl3_3core_glColorP4uiv(void *_glfuncs, GLenum gltype, const GLuint* color) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorP4uiv(gltype, color); -} - -void gl3_3core_glColorP4ui(void *_glfuncs, GLenum gltype, GLuint color) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorP4ui(gltype, color); -} - -void gl3_3core_glColorP3uiv(void *_glfuncs, GLenum gltype, const GLuint* color) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorP3uiv(gltype, color); -} - -void gl3_3core_glColorP3ui(void *_glfuncs, GLenum gltype, GLuint color) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorP3ui(gltype, color); -} - -void gl3_3core_glNormalP3uiv(void *_glfuncs, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormalP3uiv(gltype, coords); -} - -void gl3_3core_glNormalP3ui(void *_glfuncs, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormalP3ui(gltype, coords); -} - -void gl3_3core_glMultiTexCoordP4uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP4uiv(texture, gltype, coords); -} - -void gl3_3core_glMultiTexCoordP4ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP4ui(texture, gltype, coords); -} - -void gl3_3core_glMultiTexCoordP3uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP3uiv(texture, gltype, coords); -} - -void gl3_3core_glMultiTexCoordP3ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP3ui(texture, gltype, coords); -} - -void gl3_3core_glMultiTexCoordP2uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP2uiv(texture, gltype, coords); -} - -void gl3_3core_glMultiTexCoordP2ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP2ui(texture, gltype, coords); -} - -void gl3_3core_glMultiTexCoordP1uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP1uiv(texture, gltype, coords); -} - -void gl3_3core_glMultiTexCoordP1ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP1ui(texture, gltype, coords); -} - -void gl3_3core_glTexCoordP4uiv(void *_glfuncs, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP4uiv(gltype, coords); -} - -void gl3_3core_glTexCoordP4ui(void *_glfuncs, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP4ui(gltype, coords); -} - -void gl3_3core_glTexCoordP3uiv(void *_glfuncs, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP3uiv(gltype, coords); -} - -void gl3_3core_glTexCoordP3ui(void *_glfuncs, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP3ui(gltype, coords); -} - -void gl3_3core_glTexCoordP2uiv(void *_glfuncs, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP2uiv(gltype, coords); -} - -void gl3_3core_glTexCoordP2ui(void *_glfuncs, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP2ui(gltype, coords); -} - -void gl3_3core_glTexCoordP1uiv(void *_glfuncs, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP1uiv(gltype, coords); -} - -void gl3_3core_glTexCoordP1ui(void *_glfuncs, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP1ui(gltype, coords); -} - -void gl3_3core_glVertexP4uiv(void *_glfuncs, GLenum gltype, const GLuint* value) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexP4uiv(gltype, value); -} - -void gl3_3core_glVertexP4ui(void *_glfuncs, GLenum gltype, GLuint value) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexP4ui(gltype, value); -} - -void gl3_3core_glVertexP3uiv(void *_glfuncs, GLenum gltype, const GLuint* value) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexP3uiv(gltype, value); -} - -void gl3_3core_glVertexP3ui(void *_glfuncs, GLenum gltype, GLuint value) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexP3ui(gltype, value); -} - -void gl3_3core_glVertexP2uiv(void *_glfuncs, GLenum gltype, const GLuint* value) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexP2uiv(gltype, value); -} - -void gl3_3core_glVertexP2ui(void *_glfuncs, GLenum gltype, GLuint value) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexP2ui(gltype, value); -} - -void gl3_3core_glGetQueryObjectui64v(void *_glfuncs, GLuint id, GLenum pname, GLuint64* params) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryObjectui64v(id, pname, params); -} - -void gl3_3core_glGetQueryObjecti64v(void *_glfuncs, GLuint id, GLenum pname, GLint64* params) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryObjecti64v(id, pname, params); -} - -void gl3_3core_glQueryCounter(void *_glfuncs, GLuint id, GLenum target) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glQueryCounter(id, target); -} - -void gl3_3core_glGetSamplerParameterIuiv(void *_glfuncs, GLuint sampler, GLenum pname, GLuint* params) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetSamplerParameterIuiv(sampler, pname, params); -} - -void gl3_3core_glGetSamplerParameterfv(void *_glfuncs, GLuint sampler, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetSamplerParameterfv(sampler, pname, params); -} - -void gl3_3core_glGetSamplerParameterIiv(void *_glfuncs, GLuint sampler, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetSamplerParameterIiv(sampler, pname, params); -} - -void gl3_3core_glGetSamplerParameteriv(void *_glfuncs, GLuint sampler, GLenum pname, GLint* params) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetSamplerParameteriv(sampler, pname, params); -} - -void gl3_3core_glSamplerParameterIuiv(void *_glfuncs, GLuint sampler, GLenum pname, const GLuint* param) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSamplerParameterIuiv(sampler, pname, param); -} - -void gl3_3core_glSamplerParameterIiv(void *_glfuncs, GLuint sampler, GLenum pname, const GLint* param) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSamplerParameterIiv(sampler, pname, param); -} - -void gl3_3core_glSamplerParameterfv(void *_glfuncs, GLuint sampler, GLenum pname, const GLfloat* param) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSamplerParameterfv(sampler, pname, param); -} - -void gl3_3core_glSamplerParameterf(void *_glfuncs, GLuint sampler, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSamplerParameterf(sampler, pname, param); -} - -void gl3_3core_glSamplerParameteriv(void *_glfuncs, GLuint sampler, GLenum pname, const GLint* param) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSamplerParameteriv(sampler, pname, param); -} - -void gl3_3core_glSamplerParameteri(void *_glfuncs, GLuint sampler, GLenum pname, GLint param) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSamplerParameteri(sampler, pname, param); -} - -void gl3_3core_glBindSampler(void *_glfuncs, GLuint unit, GLuint sampler) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindSampler(unit, sampler); -} - -GLboolean gl3_3core_glIsSampler(void *_glfuncs, GLuint sampler) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsSampler(sampler); -} - -void gl3_3core_glDeleteSamplers(void *_glfuncs, GLsizei count, const GLuint* samplers) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteSamplers(count, samplers); -} - -void gl3_3core_glGenSamplers(void *_glfuncs, GLsizei count, GLuint* samplers) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenSamplers(count, samplers); -} - -GLint gl3_3core_glGetFragDataIndex(void *_glfuncs, GLuint program, const GLchar* name) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetFragDataIndex(program, name); -} - -void gl3_3core_glBindFragDataLocationIndexed(void *_glfuncs, GLuint program, GLuint colorNumber, GLuint index, const GLchar* name) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindFragDataLocationIndexed(program, colorNumber, index, name); -} - -void gl3_3core_glVertexAttribDivisor(void *_glfuncs, GLuint index, GLuint divisor) -{ - QOpenGLFunctions_3_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribDivisor(index, divisor); -} - diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/3.3core/funcs.h b/Godeps/_workspace/src/github.com/obscuren/qml/gl/3.3core/funcs.h deleted file mode 100644 index 77017a8c75..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/3.3core/funcs.h +++ /dev/null @@ -1,352 +0,0 @@ - -// ** file automatically generated by glgen -- do not edit manually ** - -#ifndef __cplusplus -#include -#include -typedef unsigned int GLenum; -typedef unsigned char GLboolean; -typedef unsigned int GLbitfield; -typedef void GLvoid; -typedef char GLchar; -typedef signed char GLbyte; /* 1-byte signed */ -typedef short GLshort; /* 2-byte signed */ -typedef int GLint; /* 4-byte signed */ -typedef unsigned char GLubyte; /* 1-byte unsigned */ -typedef unsigned short GLushort; /* 2-byte unsigned */ -typedef unsigned int GLuint; /* 4-byte unsigned */ -typedef int GLsizei; /* 4-byte signed */ -typedef float GLfloat; /* single precision float */ -typedef float GLclampf; /* single precision float in [0,1] */ -typedef double GLdouble; /* double precision float */ -typedef double GLclampd; /* double precision float in [0,1] */ -typedef int64_t GLint64; -typedef uint64_t GLuint64; -typedef ptrdiff_t GLintptr; -typedef ptrdiff_t GLsizeiptr; -typedef ptrdiff_t GLintptrARB; -typedef ptrdiff_t GLsizeiptrARB; -typedef struct __GLsync *GLsync; -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -void *gl3_3core_funcs(); - -void gl3_3core_glViewport(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height); -void gl3_3core_glDepthRange(void *_glfuncs, GLdouble nearVal, GLdouble farVal); -GLboolean gl3_3core_glIsEnabled(void *_glfuncs, GLenum cap); -void gl3_3core_glGetTexLevelParameteriv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLint* params); -void gl3_3core_glGetTexLevelParameterfv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLfloat* params); -void gl3_3core_glGetTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl3_3core_glGetTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl3_3core_glGetTexImage(void *_glfuncs, GLenum target, GLint level, GLenum format, GLenum gltype, GLvoid* pixels); -void gl3_3core_glGetIntegerv(void *_glfuncs, GLenum pname, GLint* params); -void gl3_3core_glGetFloatv(void *_glfuncs, GLenum pname, GLfloat* params); -GLenum gl3_3core_glGetError(void *_glfuncs); -void gl3_3core_glGetDoublev(void *_glfuncs, GLenum pname, GLdouble* params); -void gl3_3core_glGetBooleanv(void *_glfuncs, GLenum pname, GLboolean* params); -void gl3_3core_glReadPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum gltype, GLvoid* pixels); -void gl3_3core_glReadBuffer(void *_glfuncs, GLenum mode); -void gl3_3core_glPixelStorei(void *_glfuncs, GLenum pname, GLint param); -void gl3_3core_glPixelStoref(void *_glfuncs, GLenum pname, GLfloat param); -void gl3_3core_glDepthFunc(void *_glfuncs, GLenum glfunc); -void gl3_3core_glStencilOp(void *_glfuncs, GLenum fail, GLenum zfail, GLenum zpass); -void gl3_3core_glStencilFunc(void *_glfuncs, GLenum glfunc, GLint ref, GLuint mask); -void gl3_3core_glLogicOp(void *_glfuncs, GLenum opcode); -void gl3_3core_glBlendFunc(void *_glfuncs, GLenum sfactor, GLenum dfactor); -void gl3_3core_glFlush(void *_glfuncs); -void gl3_3core_glFinish(void *_glfuncs); -void gl3_3core_glEnable(void *_glfuncs, GLenum cap); -void gl3_3core_glDisable(void *_glfuncs, GLenum cap); -void gl3_3core_glDepthMask(void *_glfuncs, GLboolean flag); -void gl3_3core_glColorMask(void *_glfuncs, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); -void gl3_3core_glStencilMask(void *_glfuncs, GLuint mask); -void gl3_3core_glClearDepth(void *_glfuncs, GLdouble depth); -void gl3_3core_glClearStencil(void *_glfuncs, GLint s); -void gl3_3core_glClearColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl3_3core_glClear(void *_glfuncs, GLbitfield mask); -void gl3_3core_glDrawBuffer(void *_glfuncs, GLenum mode); -void gl3_3core_glTexImage2D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl3_3core_glTexImage1D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl3_3core_glTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl3_3core_glTexParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint param); -void gl3_3core_glTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params); -void gl3_3core_glTexParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param); -void gl3_3core_glScissor(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height); -void gl3_3core_glPolygonMode(void *_glfuncs, GLenum face, GLenum mode); -void gl3_3core_glPointSize(void *_glfuncs, GLfloat size); -void gl3_3core_glLineWidth(void *_glfuncs, GLfloat width); -void gl3_3core_glHint(void *_glfuncs, GLenum target, GLenum mode); -void gl3_3core_glFrontFace(void *_glfuncs, GLenum mode); -void gl3_3core_glCullFace(void *_glfuncs, GLenum mode); -void gl3_3core_glIndexubv(void *_glfuncs, const GLubyte* c); -void gl3_3core_glIndexub(void *_glfuncs, GLubyte c); -GLboolean gl3_3core_glIsTexture(void *_glfuncs, GLuint texture); -void gl3_3core_glGenTextures(void *_glfuncs, GLsizei n, GLuint* textures); -void gl3_3core_glDeleteTextures(void *_glfuncs, GLsizei n, const GLuint* textures); -void gl3_3core_glBindTexture(void *_glfuncs, GLenum target, GLuint texture); -void gl3_3core_glTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl3_3core_glTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl3_3core_glCopyTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -void gl3_3core_glCopyTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -void gl3_3core_glCopyTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -void gl3_3core_glCopyTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border); -void gl3_3core_glPolygonOffset(void *_glfuncs, GLfloat factor, GLfloat units); -void gl3_3core_glDrawElements(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices); -void gl3_3core_glDrawArrays(void *_glfuncs, GLenum mode, GLint first, GLsizei count); -void gl3_3core_glCopyTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -void gl3_3core_glTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl3_3core_glTexImage3D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl3_3core_glDrawRangeElements(void *_glfuncs, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum gltype, const GLvoid* indices); -void gl3_3core_glBlendEquation(void *_glfuncs, GLenum mode); -void gl3_3core_glBlendColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl3_3core_glGetCompressedTexImage(void *_glfuncs, GLenum target, GLint level, GLvoid* img); -void gl3_3core_glCompressedTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid* data); -void gl3_3core_glCompressedTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data); -void gl3_3core_glCompressedTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data); -void gl3_3core_glCompressedTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid* data); -void gl3_3core_glCompressedTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data); -void gl3_3core_glCompressedTexImage3D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data); -void gl3_3core_glSampleCoverage(void *_glfuncs, GLfloat value, GLboolean invert); -void gl3_3core_glActiveTexture(void *_glfuncs, GLenum texture); -void gl3_3core_glPointParameteriv(void *_glfuncs, GLenum pname, const GLint* params); -void gl3_3core_glPointParameteri(void *_glfuncs, GLenum pname, GLint param); -void gl3_3core_glPointParameterfv(void *_glfuncs, GLenum pname, const GLfloat* params); -void gl3_3core_glPointParameterf(void *_glfuncs, GLenum pname, GLfloat param); -void gl3_3core_glMultiDrawArrays(void *_glfuncs, GLenum mode, const GLint* first, const GLsizei* count, GLsizei drawcount); -void gl3_3core_glBlendFuncSeparate(void *_glfuncs, GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -void gl3_3core_glGetBufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -GLboolean gl3_3core_glUnmapBuffer(void *_glfuncs, GLenum target); -void gl3_3core_glGetBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, GLvoid* data); -void gl3_3core_glBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data); -void gl3_3core_glBufferData(void *_glfuncs, GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage); -GLboolean gl3_3core_glIsBuffer(void *_glfuncs, GLuint buffer); -void gl3_3core_glGenBuffers(void *_glfuncs, GLsizei n, GLuint* buffers); -void gl3_3core_glDeleteBuffers(void *_glfuncs, GLsizei n, const GLuint* buffers); -void gl3_3core_glBindBuffer(void *_glfuncs, GLenum target, GLuint buffer); -void gl3_3core_glGetQueryObjectuiv(void *_glfuncs, GLuint id, GLenum pname, GLuint* params); -void gl3_3core_glGetQueryObjectiv(void *_glfuncs, GLuint id, GLenum pname, GLint* params); -void gl3_3core_glGetQueryiv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl3_3core_glEndQuery(void *_glfuncs, GLenum target); -void gl3_3core_glBeginQuery(void *_glfuncs, GLenum target, GLuint id); -GLboolean gl3_3core_glIsQuery(void *_glfuncs, GLuint id); -void gl3_3core_glDeleteQueries(void *_glfuncs, GLsizei n, const GLuint* ids); -void gl3_3core_glGenQueries(void *_glfuncs, GLsizei n, GLuint* ids); -void gl3_3core_glVertexAttribPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLboolean normalized, GLsizei stride, const GLvoid* offset); -void gl3_3core_glValidateProgram(void *_glfuncs, GLuint program); -void gl3_3core_glUniformMatrix4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl3_3core_glUniformMatrix3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl3_3core_glUniformMatrix2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl3_3core_glUniform4iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gl3_3core_glUniform3iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gl3_3core_glUniform2iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gl3_3core_glUniform1iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gl3_3core_glUniform4fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gl3_3core_glUniform3fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gl3_3core_glUniform2fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gl3_3core_glUniform1fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gl3_3core_glUniform4i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -void gl3_3core_glUniform3i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2); -void gl3_3core_glUniform2i(void *_glfuncs, GLint location, GLint v0, GLint v1); -void gl3_3core_glUniform1i(void *_glfuncs, GLint location, GLint v0); -void gl3_3core_glUniform4f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -void gl3_3core_glUniform3f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -void gl3_3core_glUniform2f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1); -void gl3_3core_glUniform1f(void *_glfuncs, GLint location, GLfloat v0); -void gl3_3core_glUseProgram(void *_glfuncs, GLuint program); -void gl3_3core_glShaderSource(void *_glfuncs, GLuint shader, GLsizei count, const GLchar** source, const GLint* length); -void gl3_3core_glLinkProgram(void *_glfuncs, GLuint program); -GLboolean gl3_3core_glIsShader(void *_glfuncs, GLuint shader); -GLboolean gl3_3core_glIsProgram(void *_glfuncs, GLuint program); -void gl3_3core_glGetVertexAttribiv(void *_glfuncs, GLuint index, GLenum pname, GLint* params); -void gl3_3core_glGetVertexAttribfv(void *_glfuncs, GLuint index, GLenum pname, GLfloat* params); -void gl3_3core_glGetVertexAttribdv(void *_glfuncs, GLuint index, GLenum pname, GLdouble* params); -void gl3_3core_glGetUniformiv(void *_glfuncs, GLuint program, GLint location, GLint* params); -void gl3_3core_glGetUniformfv(void *_glfuncs, GLuint program, GLint location, GLfloat* params); -GLint gl3_3core_glGetUniformLocation(void *_glfuncs, GLuint program, const GLchar* name); -void gl3_3core_glGetShaderSource(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* source); -void gl3_3core_glGetShaderInfoLog(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* infoLog); -void gl3_3core_glGetShaderiv(void *_glfuncs, GLuint shader, GLenum pname, GLint* params); -void gl3_3core_glGetProgramInfoLog(void *_glfuncs, GLuint program, GLsizei bufSize, GLsizei* length, GLchar* infoLog); -void gl3_3core_glGetProgramiv(void *_glfuncs, GLuint program, GLenum pname, GLint* params); -GLint gl3_3core_glGetAttribLocation(void *_glfuncs, GLuint program, const GLchar* name); -void gl3_3core_glGetAttachedShaders(void *_glfuncs, GLuint program, GLsizei maxCount, GLsizei* count, GLuint* obj); -void gl3_3core_glGetActiveUniform(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name); -void gl3_3core_glGetActiveAttrib(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name); -void gl3_3core_glEnableVertexAttribArray(void *_glfuncs, GLuint index); -void gl3_3core_glDisableVertexAttribArray(void *_glfuncs, GLuint index); -void gl3_3core_glDetachShader(void *_glfuncs, GLuint program, GLuint shader); -void gl3_3core_glDeleteShader(void *_glfuncs, GLuint shader); -void gl3_3core_glDeleteProgram(void *_glfuncs, GLuint program); -GLuint gl3_3core_glCreateShader(void *_glfuncs, GLenum gltype); -GLuint gl3_3core_glCreateProgram(void *_glfuncs); -void gl3_3core_glCompileShader(void *_glfuncs, GLuint shader); -void gl3_3core_glBindAttribLocation(void *_glfuncs, GLuint program, GLuint index, const GLchar* name); -void gl3_3core_glAttachShader(void *_glfuncs, GLuint program, GLuint shader); -void gl3_3core_glStencilMaskSeparate(void *_glfuncs, GLenum face, GLuint mask); -void gl3_3core_glStencilFuncSeparate(void *_glfuncs, GLenum face, GLenum glfunc, GLint ref, GLuint mask); -void gl3_3core_glStencilOpSeparate(void *_glfuncs, GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); -void gl3_3core_glDrawBuffers(void *_glfuncs, GLsizei n, const GLenum* bufs); -void gl3_3core_glBlendEquationSeparate(void *_glfuncs, GLenum modeRGB, GLenum modeAlpha); -void gl3_3core_glUniformMatrix4x3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl3_3core_glUniformMatrix3x4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl3_3core_glUniformMatrix4x2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl3_3core_glUniformMatrix2x4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl3_3core_glUniformMatrix3x2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl3_3core_glUniformMatrix2x3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -GLboolean gl3_3core_glIsVertexArray(void *_glfuncs, GLuint array); -void gl3_3core_glGenVertexArrays(void *_glfuncs, GLsizei n, GLuint* arrays); -void gl3_3core_glDeleteVertexArrays(void *_glfuncs, GLsizei n, const GLuint* arrays); -void gl3_3core_glBindVertexArray(void *_glfuncs, GLuint array); -void gl3_3core_glFlushMappedBufferRange(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr length); -void gl3_3core_glFramebufferTextureLayer(void *_glfuncs, GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); -void gl3_3core_glRenderbufferStorageMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height); -void gl3_3core_glBlitFramebuffer(void *_glfuncs, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -void gl3_3core_glGenerateMipmap(void *_glfuncs, GLenum target); -void gl3_3core_glGetFramebufferAttachmentParameteriv(void *_glfuncs, GLenum target, GLenum attachment, GLenum pname, GLint* params); -void gl3_3core_glFramebufferRenderbuffer(void *_glfuncs, GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -void gl3_3core_glFramebufferTexture3D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -void gl3_3core_glFramebufferTexture2D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -void gl3_3core_glFramebufferTexture1D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLenum gl3_3core_glCheckFramebufferStatus(void *_glfuncs, GLenum target); -void gl3_3core_glGenFramebuffers(void *_glfuncs, GLsizei n, GLuint* framebuffers); -void gl3_3core_glDeleteFramebuffers(void *_glfuncs, GLsizei n, const GLuint* framebuffers); -void gl3_3core_glBindFramebuffer(void *_glfuncs, GLenum target, GLuint framebuffer); -GLboolean gl3_3core_glIsFramebuffer(void *_glfuncs, GLuint framebuffer); -void gl3_3core_glGetRenderbufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl3_3core_glRenderbufferStorage(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height); -void gl3_3core_glGenRenderbuffers(void *_glfuncs, GLsizei n, GLuint* renderbuffers); -void gl3_3core_glDeleteRenderbuffers(void *_glfuncs, GLsizei n, const GLuint* renderbuffers); -void gl3_3core_glBindRenderbuffer(void *_glfuncs, GLenum target, GLuint renderbuffer); -GLboolean gl3_3core_glIsRenderbuffer(void *_glfuncs, GLuint renderbuffer); -void gl3_3core_glClearBufferfi(void *_glfuncs, GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); -void gl3_3core_glClearBufferfv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLfloat* value); -void gl3_3core_glClearBufferuiv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLuint* value); -void gl3_3core_glClearBufferiv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLint* value); -void gl3_3core_glGetTexParameterIuiv(void *_glfuncs, GLenum target, GLenum pname, GLuint* params); -void gl3_3core_glGetTexParameterIiv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl3_3core_glTexParameterIuiv(void *_glfuncs, GLenum target, GLenum pname, const GLuint* params); -void gl3_3core_glTexParameterIiv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl3_3core_glUniform4uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value); -void gl3_3core_glUniform3uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value); -void gl3_3core_glUniform2uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value); -void gl3_3core_glUniform1uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value); -void gl3_3core_glUniform4ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -void gl3_3core_glUniform3ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1, GLuint v2); -void gl3_3core_glUniform2ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1); -void gl3_3core_glUniform1ui(void *_glfuncs, GLint location, GLuint v0); -GLint gl3_3core_glGetFragDataLocation(void *_glfuncs, GLuint program, const GLchar* name); -void gl3_3core_glBindFragDataLocation(void *_glfuncs, GLuint program, GLuint color, const GLchar* name); -void gl3_3core_glGetUniformuiv(void *_glfuncs, GLuint program, GLint location, GLuint* params); -void gl3_3core_glGetVertexAttribIuiv(void *_glfuncs, GLuint index, GLenum pname, GLuint* params); -void gl3_3core_glGetVertexAttribIiv(void *_glfuncs, GLuint index, GLenum pname, GLint* params); -void gl3_3core_glVertexAttribIPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl3_3core_glEndConditionalRender(void *_glfuncs); -void gl3_3core_glBeginConditionalRender(void *_glfuncs, GLuint id, GLenum mode); -void gl3_3core_glClampColor(void *_glfuncs, GLenum target, GLenum clamp); -void gl3_3core_glGetTransformFeedbackVarying(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* gltype, GLchar* name); -void gl3_3core_glBindBufferBase(void *_glfuncs, GLenum target, GLuint index, GLuint buffer); -void gl3_3core_glBindBufferRange(void *_glfuncs, GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -void gl3_3core_glEndTransformFeedback(void *_glfuncs); -void gl3_3core_glBeginTransformFeedback(void *_glfuncs, GLenum primitiveMode); -GLboolean gl3_3core_glIsEnabledi(void *_glfuncs, GLenum target, GLuint index); -void gl3_3core_glDisablei(void *_glfuncs, GLenum target, GLuint index); -void gl3_3core_glEnablei(void *_glfuncs, GLenum target, GLuint index); -void gl3_3core_glGetIntegeri_v(void *_glfuncs, GLenum target, GLuint index, GLint* data); -void gl3_3core_glGetBooleani_v(void *_glfuncs, GLenum target, GLuint index, GLboolean* data); -void gl3_3core_glColorMaski(void *_glfuncs, GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); -void gl3_3core_glCopyBufferSubData(void *_glfuncs, GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); -void gl3_3core_glUniformBlockBinding(void *_glfuncs, GLuint program, GLuint v0, GLuint v1); -void gl3_3core_glGetActiveUniformBlockName(void *_glfuncs, GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformBlockName); -void gl3_3core_glGetActiveUniformBlockiv(void *_glfuncs, GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint* params); -GLuint gl3_3core_glGetUniformBlockIndex(void *_glfuncs, GLuint program, const GLchar* uniformBlockName); -void gl3_3core_glGetActiveUniformName(void *_glfuncs, GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformName); -void gl3_3core_glGetActiveUniformsiv(void *_glfuncs, GLuint program, GLsizei uniformCount, const GLuint* uniformIndices, GLenum pname, GLint* params); -void gl3_3core_glPrimitiveRestartIndex(void *_glfuncs, GLuint index); -void gl3_3core_glTexBuffer(void *_glfuncs, GLenum target, GLenum internalFormat, GLuint buffer); -void gl3_3core_glDrawElementsInstanced(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLsizei instancecount); -void gl3_3core_glDrawArraysInstanced(void *_glfuncs, GLenum mode, GLint first, GLsizei count, GLsizei instancecount); -void gl3_3core_glSampleMaski(void *_glfuncs, GLuint index, GLbitfield mask); -void gl3_3core_glGetMultisamplefv(void *_glfuncs, GLenum pname, GLuint index, GLfloat* val); -void gl3_3core_glTexImage3DMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); -void gl3_3core_glTexImage2DMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); -void gl3_3core_glGetSynciv(void *_glfuncs, GLsync sync, GLenum pname, GLsizei bufSize, GLsizei* length, GLint* values); -void gl3_3core_glGetInteger64v(void *_glfuncs, GLenum pname, GLint64* params); -void gl3_3core_glWaitSync(void *_glfuncs, GLsync sync, GLbitfield flags, GLuint64 timeout); -GLenum gl3_3core_glClientWaitSync(void *_glfuncs, GLsync sync, GLbitfield flags, GLuint64 timeout); -void gl3_3core_glDeleteSync(void *_glfuncs, GLsync sync); -GLboolean gl3_3core_glIsSync(void *_glfuncs, GLsync sync); -GLsync gl3_3core_glFenceSync(void *_glfuncs, GLenum condition, GLbitfield flags); -void gl3_3core_glProvokingVertex(void *_glfuncs, GLenum mode); -void gl3_3core_glDrawElementsInstancedBaseVertex(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLsizei instancecount, GLint basevertex); -void gl3_3core_glDrawRangeElementsBaseVertex(void *_glfuncs, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum gltype, const GLvoid* indices, GLint basevertex); -void gl3_3core_glDrawElementsBaseVertex(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLint basevertex); -void gl3_3core_glFramebufferTexture(void *_glfuncs, GLenum target, GLenum attachment, GLuint texture, GLint level); -void gl3_3core_glGetBufferParameteri64v(void *_glfuncs, GLenum target, GLenum pname, GLint64* params); -void gl3_3core_glGetInteger64i_v(void *_glfuncs, GLenum target, GLuint index, GLint64* data); -void gl3_3core_glVertexAttribP4uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value); -void gl3_3core_glVertexAttribP4ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value); -void gl3_3core_glVertexAttribP3uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value); -void gl3_3core_glVertexAttribP3ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value); -void gl3_3core_glVertexAttribP2uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value); -void gl3_3core_glVertexAttribP2ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value); -void gl3_3core_glVertexAttribP1uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value); -void gl3_3core_glVertexAttribP1ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value); -void gl3_3core_glSecondaryColorP3uiv(void *_glfuncs, GLenum gltype, const GLuint* color); -void gl3_3core_glSecondaryColorP3ui(void *_glfuncs, GLenum gltype, GLuint color); -void gl3_3core_glColorP4uiv(void *_glfuncs, GLenum gltype, const GLuint* color); -void gl3_3core_glColorP4ui(void *_glfuncs, GLenum gltype, GLuint color); -void gl3_3core_glColorP3uiv(void *_glfuncs, GLenum gltype, const GLuint* color); -void gl3_3core_glColorP3ui(void *_glfuncs, GLenum gltype, GLuint color); -void gl3_3core_glNormalP3uiv(void *_glfuncs, GLenum gltype, const GLuint* coords); -void gl3_3core_glNormalP3ui(void *_glfuncs, GLenum gltype, GLuint coords); -void gl3_3core_glMultiTexCoordP4uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords); -void gl3_3core_glMultiTexCoordP4ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords); -void gl3_3core_glMultiTexCoordP3uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords); -void gl3_3core_glMultiTexCoordP3ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords); -void gl3_3core_glMultiTexCoordP2uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords); -void gl3_3core_glMultiTexCoordP2ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords); -void gl3_3core_glMultiTexCoordP1uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords); -void gl3_3core_glMultiTexCoordP1ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords); -void gl3_3core_glTexCoordP4uiv(void *_glfuncs, GLenum gltype, const GLuint* coords); -void gl3_3core_glTexCoordP4ui(void *_glfuncs, GLenum gltype, GLuint coords); -void gl3_3core_glTexCoordP3uiv(void *_glfuncs, GLenum gltype, const GLuint* coords); -void gl3_3core_glTexCoordP3ui(void *_glfuncs, GLenum gltype, GLuint coords); -void gl3_3core_glTexCoordP2uiv(void *_glfuncs, GLenum gltype, const GLuint* coords); -void gl3_3core_glTexCoordP2ui(void *_glfuncs, GLenum gltype, GLuint coords); -void gl3_3core_glTexCoordP1uiv(void *_glfuncs, GLenum gltype, const GLuint* coords); -void gl3_3core_glTexCoordP1ui(void *_glfuncs, GLenum gltype, GLuint coords); -void gl3_3core_glVertexP4uiv(void *_glfuncs, GLenum gltype, const GLuint* value); -void gl3_3core_glVertexP4ui(void *_glfuncs, GLenum gltype, GLuint value); -void gl3_3core_glVertexP3uiv(void *_glfuncs, GLenum gltype, const GLuint* value); -void gl3_3core_glVertexP3ui(void *_glfuncs, GLenum gltype, GLuint value); -void gl3_3core_glVertexP2uiv(void *_glfuncs, GLenum gltype, const GLuint* value); -void gl3_3core_glVertexP2ui(void *_glfuncs, GLenum gltype, GLuint value); -void gl3_3core_glGetQueryObjectui64v(void *_glfuncs, GLuint id, GLenum pname, GLuint64* params); -void gl3_3core_glGetQueryObjecti64v(void *_glfuncs, GLuint id, GLenum pname, GLint64* params); -void gl3_3core_glQueryCounter(void *_glfuncs, GLuint id, GLenum target); -void gl3_3core_glGetSamplerParameterIuiv(void *_glfuncs, GLuint sampler, GLenum pname, GLuint* params); -void gl3_3core_glGetSamplerParameterfv(void *_glfuncs, GLuint sampler, GLenum pname, GLfloat* params); -void gl3_3core_glGetSamplerParameterIiv(void *_glfuncs, GLuint sampler, GLenum pname, GLint* params); -void gl3_3core_glGetSamplerParameteriv(void *_glfuncs, GLuint sampler, GLenum pname, GLint* params); -void gl3_3core_glSamplerParameterIuiv(void *_glfuncs, GLuint sampler, GLenum pname, const GLuint* param); -void gl3_3core_glSamplerParameterIiv(void *_glfuncs, GLuint sampler, GLenum pname, const GLint* param); -void gl3_3core_glSamplerParameterfv(void *_glfuncs, GLuint sampler, GLenum pname, const GLfloat* param); -void gl3_3core_glSamplerParameterf(void *_glfuncs, GLuint sampler, GLenum pname, GLfloat param); -void gl3_3core_glSamplerParameteriv(void *_glfuncs, GLuint sampler, GLenum pname, const GLint* param); -void gl3_3core_glSamplerParameteri(void *_glfuncs, GLuint sampler, GLenum pname, GLint param); -void gl3_3core_glBindSampler(void *_glfuncs, GLuint unit, GLuint sampler); -GLboolean gl3_3core_glIsSampler(void *_glfuncs, GLuint sampler); -void gl3_3core_glDeleteSamplers(void *_glfuncs, GLsizei count, const GLuint* samplers); -void gl3_3core_glGenSamplers(void *_glfuncs, GLsizei count, GLuint* samplers); -GLint gl3_3core_glGetFragDataIndex(void *_glfuncs, GLuint program, const GLchar* name); -void gl3_3core_glBindFragDataLocationIndexed(void *_glfuncs, GLuint program, GLuint colorNumber, GLuint index, const GLchar* name); -void gl3_3core_glVertexAttribDivisor(void *_glfuncs, GLuint index, GLuint divisor); - - -#ifdef __cplusplus -} // extern "C" -#endif diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/3.3core/gl.go b/Godeps/_workspace/src/github.com/obscuren/qml/gl/3.3core/gl.go deleted file mode 100644 index 13e2a4a941..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/3.3core/gl.go +++ /dev/null @@ -1,5489 +0,0 @@ -// ** file automatically generated by glgen -- do not edit manually ** - -package GL - -// #cgo CXXFLAGS: -std=c++0x -pedantic-errors -Wall -fno-strict-aliasing -// #cgo LDFLAGS: -lstdc++ -// #cgo pkg-config: Qt5Core Qt5OpenGL -// -// #include "funcs.h" -// -// void free(void*); -// -import "C" - -import ( - "fmt" - "reflect" - "unsafe" - - "gopkg.in/qml.v1/gl/glbase" -) - -// API returns a value that offers methods matching the OpenGL version 3.3 API. -// -// The returned API must not be used after the provided OpenGL context becomes invalid. -func API(context glbase.Contexter) *GL { - gl := &GL{} - gl.funcs = C.gl3_3core_funcs() - if gl.funcs == nil { - panic(fmt.Errorf("OpenGL version 3.3 is not available")) - } - return gl -} - -// GL implements the OpenGL version 3.3 API. Values of this -// type must be created via the API function, and it must not be used after -// the associated OpenGL context becomes invalid. -type GL struct { - funcs unsafe.Pointer -} - -const ( - FALSE = 0 - TRUE = 1 - NONE = 0 - - BYTE = 0x1400 - UNSIGNED_BYTE = 0x1401 - SHORT = 0x1402 - UNSIGNED_SHORT = 0x1403 - INT = 0x1404 - UNSIGNED_INT = 0x1405 - FLOAT = 0x1406 - N2_BYTES = 0x1407 - N3_BYTES = 0x1408 - N4_BYTES = 0x1409 - DOUBLE = 0x140A - HALF_FLOAT = 0x140B - - ACCUM = 0x0100 - LOAD = 0x0101 - RETURN = 0x0102 - MULT = 0x0103 - ADD = 0x0104 - - ACCUM_BUFFER_BIT = 0x00000200 - ALL_ATTRIB_BITS = 0xFFFFFFFF - COLOR_BUFFER_BIT = 0x00004000 - CURRENT_BIT = 0x00000001 - DEPTH_BUFFER_BIT = 0x00000100 - ENABLE_BIT = 0x00002000 - EVAL_BIT = 0x00010000 - FOG_BIT = 0x00000080 - HINT_BIT = 0x00008000 - LIGHTING_BIT = 0x00000040 - LINE_BIT = 0x00000004 - LIST_BIT = 0x00020000 - MULTISAMPLE_BIT = 0x20000000 - PIXEL_MODE_BIT = 0x00000020 - POINT_BIT = 0x00000002 - POLYGON_BIT = 0x00000008 - POLYGON_STIPPLE_BIT = 0x00000010 - SCISSOR_BIT = 0x00080000 - STENCIL_BUFFER_BIT = 0x00000400 - TEXTURE_BIT = 0x00040000 - TRANSFORM_BIT = 0x00001000 - VIEWPORT_BIT = 0x00000800 - - ALWAYS = 0x0207 - EQUAL = 0x0202 - GEQUAL = 0x0206 - GREATER = 0x0204 - LEQUAL = 0x0203 - LESS = 0x0201 - NEVER = 0x0200 - NOTEQUAL = 0x0205 - - LOGIC_OP = 0x0BF1 - - DST_ALPHA = 0x0304 - ONE = 1 - ONE_MINUS_DST_ALPHA = 0x0305 - ONE_MINUS_SRC_ALPHA = 0x0303 - ONE_MINUS_SRC_COLOR = 0x0301 - SRC_ALPHA = 0x0302 - SRC_COLOR = 0x0300 - ZERO = 0 - - DST_COLOR = 0x0306 - ONE_MINUS_DST_COLOR = 0x0307 - SRC_ALPHA_SATURATE = 0x0308 - - CLIENT_ALL_ATTRIB_BITS = 0xFFFFFFFF - CLIENT_PIXEL_STORE_BIT = 0x00000001 - CLIENT_VERTEX_ARRAY_BIT = 0x00000002 - - CLIP_DISTANCE0 = 0x3000 - CLIP_DISTANCE1 = 0x3001 - CLIP_DISTANCE2 = 0x3002 - CLIP_DISTANCE3 = 0x3003 - CLIP_DISTANCE4 = 0x3004 - CLIP_DISTANCE5 = 0x3005 - CLIP_DISTANCE6 = 0x3006 - CLIP_DISTANCE7 = 0x3007 - CLIP_PLANE0 = 0x3000 - CLIP_PLANE1 = 0x3001 - CLIP_PLANE2 = 0x3002 - CLIP_PLANE3 = 0x3003 - CLIP_PLANE4 = 0x3004 - CLIP_PLANE5 = 0x3005 - - BACK = 0x0405 - FRONT = 0x0404 - FRONT_AND_BACK = 0x0408 - - AMBIENT = 0x1200 - AMBIENT_AND_DIFFUSE = 0x1602 - DIFFUSE = 0x1201 - EMISSION = 0x1600 - SPECULAR = 0x1202 - - CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT = 0x00000001 - - CONTEXT_COMPATIBILITY_PROFILE_BIT = 0x00000002 - CONTEXT_CORE_PROFILE_BIT = 0x00000001 - - AUX0 = 0x0409 - AUX1 = 0x040A - AUX2 = 0x040B - AUX3 = 0x040C - BACK_LEFT = 0x0402 - BACK_RIGHT = 0x0403 - FRONT_LEFT = 0x0400 - FRONT_RIGHT = 0x0401 - LEFT = 0x0406 - RIGHT = 0x0407 - - ALPHA_TEST = 0x0BC0 - AUTO_NORMAL = 0x0D80 - BLEND = 0x0BE2 - COLOR_ARRAY = 0x8076 - COLOR_LOGIC_OP = 0x0BF2 - COLOR_MATERIAL = 0x0B57 - CULL_FACE = 0x0B44 - DEPTH_TEST = 0x0B71 - DITHER = 0x0BD0 - EDGE_FLAG_ARRAY = 0x8079 - FOG = 0x0B60 - INDEX_ARRAY = 0x8077 - INDEX_LOGIC_OP = 0x0BF1 - LIGHT0 = 0x4000 - LIGHT1 = 0x4001 - LIGHT2 = 0x4002 - LIGHT3 = 0x4003 - LIGHT4 = 0x4004 - LIGHT5 = 0x4005 - LIGHT6 = 0x4006 - LIGHT7 = 0x4007 - LIGHTING = 0x0B50 - LINE_SMOOTH = 0x0B20 - LINE_STIPPLE = 0x0B24 - MAP1_COLOR_4 = 0x0D90 - MAP1_INDEX = 0x0D91 - MAP1_NORMAL = 0x0D92 - MAP1_TEXTURE_COORD_1 = 0x0D93 - MAP1_TEXTURE_COORD_2 = 0x0D94 - MAP1_TEXTURE_COORD_3 = 0x0D95 - MAP1_TEXTURE_COORD_4 = 0x0D96 - MAP1_VERTEX_3 = 0x0D97 - MAP1_VERTEX_4 = 0x0D98 - MAP2_COLOR_4 = 0x0DB0 - MAP2_INDEX = 0x0DB1 - MAP2_NORMAL = 0x0DB2 - MAP2_TEXTURE_COORD_1 = 0x0DB3 - MAP2_TEXTURE_COORD_2 = 0x0DB4 - MAP2_TEXTURE_COORD_3 = 0x0DB5 - MAP2_TEXTURE_COORD_4 = 0x0DB6 - MAP2_VERTEX_3 = 0x0DB7 - MAP2_VERTEX_4 = 0x0DB8 - NORMALIZE = 0x0BA1 - NORMAL_ARRAY = 0x8075 - POINT_SMOOTH = 0x0B10 - POLYGON_OFFSET_FILL = 0x8037 - POLYGON_OFFSET_LINE = 0x2A02 - POLYGON_OFFSET_POINT = 0x2A01 - POLYGON_SMOOTH = 0x0B41 - POLYGON_STIPPLE = 0x0B42 - SCISSOR_TEST = 0x0C11 - STENCIL_TEST = 0x0B90 - TEXTURE_1D = 0x0DE0 - TEXTURE_2D = 0x0DE1 - TEXTURE_COORD_ARRAY = 0x8078 - TEXTURE_GEN_Q = 0x0C63 - TEXTURE_GEN_R = 0x0C62 - TEXTURE_GEN_S = 0x0C60 - TEXTURE_GEN_T = 0x0C61 - VERTEX_ARRAY = 0x8074 - - INVALID_ENUM = 0x0500 - INVALID_FRAMEBUFFER_OPERATION = 0x0506 - INVALID_OPERATION = 0x0502 - INVALID_VALUE = 0x0501 - NO_ERROR = 0 - OUT_OF_MEMORY = 0x0505 - STACK_OVERFLOW = 0x0503 - STACK_UNDERFLOW = 0x0504 - - N2D = 0x0600 - N3D = 0x0601 - N3D_COLOR = 0x0602 - N3D_COLOR_TEXTURE = 0x0603 - N4D_COLOR_TEXTURE = 0x0604 - - BITMAP_TOKEN = 0x0704 - COPY_PIXEL_TOKEN = 0x0706 - DRAW_PIXEL_TOKEN = 0x0705 - LINE_RESET_TOKEN = 0x0707 - LINE_TOKEN = 0x0702 - PASS_THROUGH_TOKEN = 0x0700 - POINT_TOKEN = 0x0701 - POLYGON_TOKEN = 0x0703 - - EXP = 0x0800 - EXP2 = 0x0801 - LINEAR = 0x2601 - - FOG_COLOR = 0x0B66 - FOG_DENSITY = 0x0B62 - FOG_END = 0x0B64 - FOG_INDEX = 0x0B61 - FOG_MODE = 0x0B65 - FOG_START = 0x0B63 - - CCW = 0x0901 - CW = 0x0900 - - COEFF = 0x0A00 - DOMAIN = 0x0A02 - ORDER = 0x0A01 - - PIXEL_MAP_A_TO_A = 0x0C79 - PIXEL_MAP_B_TO_B = 0x0C78 - PIXEL_MAP_G_TO_G = 0x0C77 - PIXEL_MAP_I_TO_A = 0x0C75 - PIXEL_MAP_I_TO_B = 0x0C74 - PIXEL_MAP_I_TO_G = 0x0C73 - PIXEL_MAP_I_TO_I = 0x0C70 - PIXEL_MAP_I_TO_R = 0x0C72 - PIXEL_MAP_R_TO_R = 0x0C76 - PIXEL_MAP_S_TO_S = 0x0C71 - - ACCUM_ALPHA_BITS = 0x0D5B - ACCUM_BLUE_BITS = 0x0D5A - ACCUM_CLEAR_VALUE = 0x0B80 - ACCUM_GREEN_BITS = 0x0D59 - ACCUM_RED_BITS = 0x0D58 - ALIASED_LINE_WIDTH_RANGE = 0x846E - ALIASED_POINT_SIZE_RANGE = 0x846D - ALPHA_BIAS = 0x0D1D - ALPHA_BITS = 0x0D55 - ALPHA_SCALE = 0x0D1C - ALPHA_TEST_FUNC = 0x0BC1 - ALPHA_TEST_REF = 0x0BC2 - ATTRIB_STACK_DEPTH = 0x0BB0 - AUX_BUFFERS = 0x0C00 - BLEND_DST = 0x0BE0 - BLEND_SRC = 0x0BE1 - BLUE_BIAS = 0x0D1B - BLUE_BITS = 0x0D54 - BLUE_SCALE = 0x0D1A - CLIENT_ATTRIB_STACK_DEPTH = 0x0BB1 - COLOR_ARRAY_SIZE = 0x8081 - COLOR_ARRAY_STRIDE = 0x8083 - COLOR_ARRAY_TYPE = 0x8082 - COLOR_CLEAR_VALUE = 0x0C22 - COLOR_MATERIAL_FACE = 0x0B55 - COLOR_MATERIAL_PARAMETER = 0x0B56 - COLOR_WRITEMASK = 0x0C23 - CULL_FACE_MODE = 0x0B45 - CURRENT_COLOR = 0x0B00 - CURRENT_INDEX = 0x0B01 - CURRENT_NORMAL = 0x0B02 - CURRENT_RASTER_COLOR = 0x0B04 - CURRENT_RASTER_DISTANCE = 0x0B09 - CURRENT_RASTER_INDEX = 0x0B05 - CURRENT_RASTER_POSITION = 0x0B07 - CURRENT_RASTER_POSITION_VALID = 0x0B08 - CURRENT_RASTER_TEXTURE_COORDS = 0x0B06 - CURRENT_TEXTURE_COORDS = 0x0B03 - DEPTH_BIAS = 0x0D1F - DEPTH_BITS = 0x0D56 - DEPTH_CLEAR_VALUE = 0x0B73 - DEPTH_FUNC = 0x0B74 - DEPTH_RANGE = 0x0B70 - DEPTH_SCALE = 0x0D1E - DEPTH_WRITEMASK = 0x0B72 - DOUBLEBUFFER = 0x0C32 - DRAW_BUFFER = 0x0C01 - EDGE_FLAG = 0x0B43 - EDGE_FLAG_ARRAY_STRIDE = 0x808C - FEEDBACK_BUFFER_SIZE = 0x0DF1 - FEEDBACK_BUFFER_TYPE = 0x0DF2 - FOG_HINT = 0x0C54 - FRONT_FACE = 0x0B46 - GREEN_BIAS = 0x0D19 - GREEN_BITS = 0x0D53 - GREEN_SCALE = 0x0D18 - INDEX_ARRAY_STRIDE = 0x8086 - INDEX_ARRAY_TYPE = 0x8085 - INDEX_BITS = 0x0D51 - INDEX_CLEAR_VALUE = 0x0C20 - INDEX_MODE = 0x0C30 - INDEX_OFFSET = 0x0D13 - INDEX_SHIFT = 0x0D12 - INDEX_WRITEMASK = 0x0C21 - LIGHT_MODEL_AMBIENT = 0x0B53 - LIGHT_MODEL_COLOR_CONTROL = 0x81F8 - LIGHT_MODEL_LOCAL_VIEWER = 0x0B51 - LIGHT_MODEL_TWO_SIDE = 0x0B52 - LINE_SMOOTH_HINT = 0x0C52 - LINE_STIPPLE_PATTERN = 0x0B25 - LINE_STIPPLE_REPEAT = 0x0B26 - LINE_WIDTH = 0x0B21 - LINE_WIDTH_GRANULARITY = 0x0B23 - LINE_WIDTH_RANGE = 0x0B22 - LIST_BASE = 0x0B32 - LIST_INDEX = 0x0B33 - LIST_MODE = 0x0B30 - LOGIC_OP_MODE = 0x0BF0 - MAP1_GRID_DOMAIN = 0x0DD0 - MAP1_GRID_SEGMENTS = 0x0DD1 - MAP2_GRID_DOMAIN = 0x0DD2 - MAP2_GRID_SEGMENTS = 0x0DD3 - MAP_COLOR = 0x0D10 - MAP_STENCIL = 0x0D11 - MATRIX_MODE = 0x0BA0 - MAX_ATTRIB_STACK_DEPTH = 0x0D35 - MAX_CLIENT_ATTRIB_STACK_DEPTH = 0x0D3B - MAX_CLIP_DISTANCES = 0x0D32 - MAX_CLIP_PLANES = 0x0D32 - MAX_EVAL_ORDER = 0x0D30 - MAX_LIGHTS = 0x0D31 - MAX_LIST_NESTING = 0x0B31 - MAX_MODELVIEW_STACK_DEPTH = 0x0D36 - MAX_NAME_STACK_DEPTH = 0x0D37 - MAX_PIXEL_MAP_TABLE = 0x0D34 - MAX_PROJECTION_STACK_DEPTH = 0x0D38 - MAX_TEXTURE_SIZE = 0x0D33 - MAX_TEXTURE_STACK_DEPTH = 0x0D39 - MAX_VIEWPORT_DIMS = 0x0D3A - MODELVIEW_MATRIX = 0x0BA6 - MODELVIEW_STACK_DEPTH = 0x0BA3 - NAME_STACK_DEPTH = 0x0D70 - NORMAL_ARRAY_STRIDE = 0x807F - NORMAL_ARRAY_TYPE = 0x807E - PACK_ALIGNMENT = 0x0D05 - PACK_LSB_FIRST = 0x0D01 - PACK_ROW_LENGTH = 0x0D02 - PACK_SKIP_PIXELS = 0x0D04 - PACK_SKIP_ROWS = 0x0D03 - PACK_SWAP_BYTES = 0x0D00 - PERSPECTIVE_CORRECTION_HINT = 0x0C50 - PIXEL_MAP_A_TO_A_SIZE = 0x0CB9 - PIXEL_MAP_B_TO_B_SIZE = 0x0CB8 - PIXEL_MAP_G_TO_G_SIZE = 0x0CB7 - PIXEL_MAP_I_TO_A_SIZE = 0x0CB5 - PIXEL_MAP_I_TO_B_SIZE = 0x0CB4 - PIXEL_MAP_I_TO_G_SIZE = 0x0CB3 - PIXEL_MAP_I_TO_I_SIZE = 0x0CB0 - PIXEL_MAP_I_TO_R_SIZE = 0x0CB2 - PIXEL_MAP_R_TO_R_SIZE = 0x0CB6 - PIXEL_MAP_S_TO_S_SIZE = 0x0CB1 - POINT_SIZE = 0x0B11 - POINT_SIZE_GRANULARITY = 0x0B13 - POINT_SIZE_RANGE = 0x0B12 - POINT_SMOOTH_HINT = 0x0C51 - POLYGON_MODE = 0x0B40 - POLYGON_OFFSET_FACTOR = 0x8038 - POLYGON_OFFSET_UNITS = 0x2A00 - POLYGON_SMOOTH_HINT = 0x0C53 - PROJECTION_MATRIX = 0x0BA7 - PROJECTION_STACK_DEPTH = 0x0BA4 - READ_BUFFER = 0x0C02 - RED_BIAS = 0x0D15 - RED_BITS = 0x0D52 - RED_SCALE = 0x0D14 - RENDER_MODE = 0x0C40 - RGBA_MODE = 0x0C31 - SCISSOR_BOX = 0x0C10 - SELECTION_BUFFER_SIZE = 0x0DF4 - SHADE_MODEL = 0x0B54 - SMOOTH_LINE_WIDTH_GRANULARITY = 0x0B23 - SMOOTH_LINE_WIDTH_RANGE = 0x0B22 - SMOOTH_POINT_SIZE_GRANULARITY = 0x0B13 - SMOOTH_POINT_SIZE_RANGE = 0x0B12 - STENCIL_BITS = 0x0D57 - STENCIL_CLEAR_VALUE = 0x0B91 - STENCIL_FAIL = 0x0B94 - STENCIL_FUNC = 0x0B92 - STENCIL_PASS_DEPTH_FAIL = 0x0B95 - STENCIL_PASS_DEPTH_PASS = 0x0B96 - STENCIL_REF = 0x0B97 - STENCIL_VALUE_MASK = 0x0B93 - STENCIL_WRITEMASK = 0x0B98 - STEREO = 0x0C33 - SUBPIXEL_BITS = 0x0D50 - TEXTURE_BINDING_1D = 0x8068 - TEXTURE_BINDING_2D = 0x8069 - TEXTURE_BINDING_3D = 0x806A - TEXTURE_COORD_ARRAY_SIZE = 0x8088 - TEXTURE_COORD_ARRAY_STRIDE = 0x808A - TEXTURE_COORD_ARRAY_TYPE = 0x8089 - TEXTURE_MATRIX = 0x0BA8 - TEXTURE_STACK_DEPTH = 0x0BA5 - UNPACK_ALIGNMENT = 0x0CF5 - UNPACK_LSB_FIRST = 0x0CF1 - UNPACK_ROW_LENGTH = 0x0CF2 - UNPACK_SKIP_PIXELS = 0x0CF4 - UNPACK_SKIP_ROWS = 0x0CF3 - UNPACK_SWAP_BYTES = 0x0CF0 - VERTEX_ARRAY_SIZE = 0x807A - VERTEX_ARRAY_STRIDE = 0x807C - VERTEX_ARRAY_TYPE = 0x807B - VIEWPORT = 0x0BA2 - ZOOM_X = 0x0D16 - ZOOM_Y = 0x0D17 - - COLOR_ARRAY_POINTER = 0x8090 - EDGE_FLAG_ARRAY_POINTER = 0x8093 - FEEDBACK_BUFFER_POINTER = 0x0DF0 - INDEX_ARRAY_POINTER = 0x8091 - NORMAL_ARRAY_POINTER = 0x808F - SELECTION_BUFFER_POINTER = 0x0DF3 - TEXTURE_COORD_ARRAY_POINTER = 0x8092 - VERTEX_ARRAY_POINTER = 0x808E - - TEXTURE_ALPHA_SIZE = 0x805F - TEXTURE_BLUE_SIZE = 0x805E - TEXTURE_BORDER = 0x1005 - TEXTURE_BORDER_COLOR = 0x1004 - TEXTURE_COMPONENTS = 0x1003 - TEXTURE_GREEN_SIZE = 0x805D - TEXTURE_HEIGHT = 0x1001 - TEXTURE_INTENSITY_SIZE = 0x8061 - TEXTURE_INTERNAL_FORMAT = 0x1003 - TEXTURE_LUMINANCE_SIZE = 0x8060 - TEXTURE_MAG_FILTER = 0x2800 - TEXTURE_MIN_FILTER = 0x2801 - TEXTURE_PRIORITY = 0x8066 - TEXTURE_RED_SIZE = 0x805C - TEXTURE_RESIDENT = 0x8067 - TEXTURE_WIDTH = 0x1000 - TEXTURE_WRAP_S = 0x2802 - TEXTURE_WRAP_T = 0x2803 - - DONT_CARE = 0x1100 - FASTEST = 0x1101 - NICEST = 0x1102 - - FRAGMENT_SHADER_DERIVATIVE_HINT = 0x8B8B - GENERATE_MIPMAP_HINT = 0x8192 - TEXTURE_COMPRESSION_HINT = 0x84EF - - C3F_V3F = 0x2A24 - C4F_N3F_V3F = 0x2A26 - C4UB_V2F = 0x2A22 - C4UB_V3F = 0x2A23 - N3F_V3F = 0x2A25 - T2F_C3F_V3F = 0x2A2A - T2F_C4F_N3F_V3F = 0x2A2C - T2F_C4UB_V3F = 0x2A29 - T2F_N3F_V3F = 0x2A2B - T2F_V3F = 0x2A27 - T4F_C4F_N3F_V4F = 0x2A2D - T4F_V4F = 0x2A28 - V2F = 0x2A20 - V3F = 0x2A21 - - MODULATE = 0x2100 - REPLACE = 0x1E01 - - SEPARATE_SPECULAR_COLOR = 0x81FA - SINGLE_COLOR = 0x81F9 - - CONSTANT_ATTENUATION = 0x1207 - LINEAR_ATTENUATION = 0x1208 - POSITION = 0x1203 - QUADRATIC_ATTENUATION = 0x1209 - SPOT_CUTOFF = 0x1206 - SPOT_DIRECTION = 0x1204 - SPOT_EXPONENT = 0x1205 - - COMPILE = 0x1300 - COMPILE_AND_EXECUTE = 0x1301 - - AND = 0x1501 - AND_INVERTED = 0x1504 - AND_REVERSE = 0x1502 - CLEAR = 0x1500 - COPY = 0x1503 - COPY_INVERTED = 0x150C - EQUIV = 0x1509 - INVERT = 0x150A - NAND = 0x150E - NOOP = 0x1505 - NOR = 0x1508 - OR = 0x1507 - OR_INVERTED = 0x150D - OR_REVERSE = 0x150B - SET = 0x150F - XOR = 0x1506 - - MAP_FLUSH_EXPLICIT_BIT = 0x0010 - MAP_INVALIDATE_BUFFER_BIT = 0x0008 - MAP_INVALIDATE_RANGE_BIT = 0x0004 - MAP_READ_BIT = 0x0001 - MAP_UNSYNCHRONIZED_BIT = 0x0020 - MAP_WRITE_BIT = 0x0002 - - COLOR_INDEXES = 0x1603 - SHININESS = 0x1601 - - MODELVIEW = 0x1700 - PROJECTION = 0x1701 - TEXTURE = 0x1702 - - LINE = 0x1B01 - POINT = 0x1B00 - - FILL = 0x1B02 - - COLOR = 0x1800 - DEPTH = 0x1801 - STENCIL = 0x1802 - - ALPHA = 0x1906 - BLUE = 0x1905 - COLOR_INDEX = 0x1900 - DEPTH_COMPONENT = 0x1902 - GREEN = 0x1904 - LUMINANCE = 0x1909 - LUMINANCE_ALPHA = 0x190A - RED = 0x1903 - RGB = 0x1907 - RGBA = 0x1908 - STENCIL_INDEX = 0x1901 - - ALPHA12 = 0x803D - ALPHA16 = 0x803E - ALPHA4 = 0x803B - ALPHA8 = 0x803C - INTENSITY = 0x8049 - INTENSITY12 = 0x804C - INTENSITY16 = 0x804D - INTENSITY4 = 0x804A - INTENSITY8 = 0x804B - LUMINANCE12 = 0x8041 - LUMINANCE12_ALPHA12 = 0x8047 - LUMINANCE12_ALPHA4 = 0x8046 - LUMINANCE16 = 0x8042 - LUMINANCE16_ALPHA16 = 0x8048 - LUMINANCE4 = 0x803F - LUMINANCE4_ALPHA4 = 0x8043 - LUMINANCE6_ALPHA2 = 0x8044 - LUMINANCE8 = 0x8040 - LUMINANCE8_ALPHA8 = 0x8045 - R3_G3_B2 = 0x2A10 - RGB10 = 0x8052 - RGB10_A2 = 0x8059 - RGB12 = 0x8053 - RGB16 = 0x8054 - RGB4 = 0x804F - RGB5 = 0x8050 - RGB5_A1 = 0x8057 - RGB8 = 0x8051 - RGBA12 = 0x805A - RGBA16 = 0x805B - RGBA2 = 0x8055 - RGBA4 = 0x8056 - RGBA8 = 0x8058 - - PACK_IMAGE_HEIGHT = 0x806C - PACK_SKIP_IMAGES = 0x806B - UNPACK_IMAGE_HEIGHT = 0x806E - UNPACK_SKIP_IMAGES = 0x806D - - BITMAP = 0x1A00 - UNSIGNED_BYTE_3_3_2 = 0x8032 - UNSIGNED_INT_10_10_10_2 = 0x8036 - UNSIGNED_INT_8_8_8_8 = 0x8035 - UNSIGNED_SHORT_4_4_4_4 = 0x8033 - UNSIGNED_SHORT_5_5_5_1 = 0x8034 - - POINT_DISTANCE_ATTENUATION = 0x8129 - POINT_FADE_THRESHOLD_SIZE = 0x8128 - POINT_SIZE_MAX = 0x8127 - POINT_SIZE_MIN = 0x8126 - - LINES = 0x0001 - LINES_ADJACENCY = 0x000A - LINE_LOOP = 0x0002 - LINE_STRIP = 0x0003 - LINE_STRIP_ADJACENCY = 0x000B - POINTS = 0x0000 - POLYGON = 0x0009 - QUADS = 0x0007 - QUAD_STRIP = 0x0008 - TRIANGLES = 0x0004 - TRIANGLES_ADJACENCY = 0x000C - TRIANGLE_FAN = 0x0006 - TRIANGLE_STRIP = 0x0005 - TRIANGLE_STRIP_ADJACENCY = 0x000D - - FEEDBACK = 0x1C01 - RENDER = 0x1C00 - SELECT = 0x1C02 - - FLAT = 0x1D00 - SMOOTH = 0x1D01 - - DECR = 0x1E03 - INCR = 0x1E02 - KEEP = 0x1E00 - - EXTENSIONS = 0x1F03 - RENDERER = 0x1F01 - VENDOR = 0x1F00 - VERSION = 0x1F02 - - S = 0x2000 - T = 0x2001 - R = 0x2002 - Q = 0x2003 - - DECAL = 0x2101 - - TEXTURE_ENV_COLOR = 0x2201 - TEXTURE_ENV_MODE = 0x2200 - - TEXTURE_ENV = 0x2300 - - EYE_LINEAR = 0x2400 - OBJECT_LINEAR = 0x2401 - SPHERE_MAP = 0x2402 - - EYE_PLANE = 0x2502 - OBJECT_PLANE = 0x2501 - TEXTURE_GEN_MODE = 0x2500 - - NEAREST = 0x2600 - - LINEAR_MIPMAP_LINEAR = 0x2703 - LINEAR_MIPMAP_NEAREST = 0x2701 - NEAREST_MIPMAP_LINEAR = 0x2702 - NEAREST_MIPMAP_NEAREST = 0x2700 - - GENERATE_MIPMAP = 0x8191 - TEXTURE_WRAP_R = 0x8072 - - PROXY_TEXTURE_1D = 0x8063 - PROXY_TEXTURE_2D = 0x8064 - PROXY_TEXTURE_3D = 0x8070 - TEXTURE_3D = 0x806F - TEXTURE_BASE_LEVEL = 0x813C - TEXTURE_MAX_LEVEL = 0x813D - TEXTURE_MAX_LOD = 0x813B - TEXTURE_MIN_LOD = 0x813A - - CLAMP = 0x2900 - CLAMP_TO_BORDER = 0x812D - CLAMP_TO_EDGE = 0x812F - REPEAT = 0x2901 - - SYNC_FLUSH_COMMANDS_BIT = 0x00000001 - INVALID_INDEX = 0xFFFFFFFF - TIMEOUT_IGNORED = 0xFFFFFFFFFFFFFFFF - CONSTANT_COLOR = 0x8001 - ONE_MINUS_CONSTANT_COLOR = 0x8002 - CONSTANT_ALPHA = 0x8003 - ONE_MINUS_CONSTANT_ALPHA = 0x8004 - FUNC_ADD = 0x8006 - MIN = 0x8007 - MAX = 0x8008 - BLEND_EQUATION_RGB = 0x8009 - FUNC_SUBTRACT = 0x800A - FUNC_REVERSE_SUBTRACT = 0x800B - RESCALE_NORMAL = 0x803A - TEXTURE_DEPTH = 0x8071 - MAX_3D_TEXTURE_SIZE = 0x8073 - MULTISAMPLE = 0x809D - SAMPLE_ALPHA_TO_COVERAGE = 0x809E - SAMPLE_ALPHA_TO_ONE = 0x809F - SAMPLE_COVERAGE = 0x80A0 - SAMPLE_BUFFERS = 0x80A8 - SAMPLES = 0x80A9 - SAMPLE_COVERAGE_VALUE = 0x80AA - SAMPLE_COVERAGE_INVERT = 0x80AB - BLEND_DST_RGB = 0x80C8 - BLEND_SRC_RGB = 0x80C9 - BLEND_DST_ALPHA = 0x80CA - BLEND_SRC_ALPHA = 0x80CB - BGR = 0x80E0 - BGRA = 0x80E1 - MAX_ELEMENTS_VERTICES = 0x80E8 - MAX_ELEMENTS_INDICES = 0x80E9 - DEPTH_COMPONENT16 = 0x81A5 - DEPTH_COMPONENT24 = 0x81A6 - DEPTH_COMPONENT32 = 0x81A7 - FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING = 0x8210 - FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE = 0x8211 - FRAMEBUFFER_ATTACHMENT_RED_SIZE = 0x8212 - FRAMEBUFFER_ATTACHMENT_GREEN_SIZE = 0x8213 - FRAMEBUFFER_ATTACHMENT_BLUE_SIZE = 0x8214 - FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE = 0x8215 - FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE = 0x8216 - FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE = 0x8217 - FRAMEBUFFER_DEFAULT = 0x8218 - FRAMEBUFFER_UNDEFINED = 0x8219 - DEPTH_STENCIL_ATTACHMENT = 0x821A - MAJOR_VERSION = 0x821B - MINOR_VERSION = 0x821C - NUM_EXTENSIONS = 0x821D - CONTEXT_FLAGS = 0x821E - COMPRESSED_RED = 0x8225 - COMPRESSED_RG = 0x8226 - RG = 0x8227 - RG_INTEGER = 0x8228 - R8 = 0x8229 - R16 = 0x822A - RG8 = 0x822B - RG16 = 0x822C - R16F = 0x822D - R32F = 0x822E - RG16F = 0x822F - RG32F = 0x8230 - R8I = 0x8231 - R8UI = 0x8232 - R16I = 0x8233 - R16UI = 0x8234 - R32I = 0x8235 - R32UI = 0x8236 - RG8I = 0x8237 - RG8UI = 0x8238 - RG16I = 0x8239 - RG16UI = 0x823A - RG32I = 0x823B - RG32UI = 0x823C - UNSIGNED_BYTE_2_3_3_REV = 0x8362 - UNSIGNED_SHORT_5_6_5 = 0x8363 - UNSIGNED_SHORT_5_6_5_REV = 0x8364 - UNSIGNED_SHORT_4_4_4_4_REV = 0x8365 - UNSIGNED_SHORT_1_5_5_5_REV = 0x8366 - UNSIGNED_INT_8_8_8_8_REV = 0x8367 - UNSIGNED_INT_2_10_10_10_REV = 0x8368 - MIRRORED_REPEAT = 0x8370 - FOG_COORDINATE_SOURCE = 0x8450 - FOG_COORD_SRC = 0x8450 - FOG_COORDINATE = 0x8451 - FOG_COORD = 0x8451 - FRAGMENT_DEPTH = 0x8452 - CURRENT_FOG_COORDINATE = 0x8453 - CURRENT_FOG_COORD = 0x8453 - FOG_COORDINATE_ARRAY_TYPE = 0x8454 - FOG_COORD_ARRAY_TYPE = 0x8454 - FOG_COORDINATE_ARRAY_STRIDE = 0x8455 - FOG_COORD_ARRAY_STRIDE = 0x8455 - FOG_COORDINATE_ARRAY_POINTER = 0x8456 - FOG_COORD_ARRAY_POINTER = 0x8456 - FOG_COORDINATE_ARRAY = 0x8457 - FOG_COORD_ARRAY = 0x8457 - COLOR_SUM = 0x8458 - CURRENT_SECONDARY_COLOR = 0x8459 - SECONDARY_COLOR_ARRAY_SIZE = 0x845A - SECONDARY_COLOR_ARRAY_TYPE = 0x845B - SECONDARY_COLOR_ARRAY_STRIDE = 0x845C - SECONDARY_COLOR_ARRAY_POINTER = 0x845D - SECONDARY_COLOR_ARRAY = 0x845E - CURRENT_RASTER_SECONDARY_COLOR = 0x845F - TEXTURE0 = 0x84C0 - TEXTURE1 = 0x84C1 - TEXTURE2 = 0x84C2 - TEXTURE3 = 0x84C3 - TEXTURE4 = 0x84C4 - TEXTURE5 = 0x84C5 - TEXTURE6 = 0x84C6 - TEXTURE7 = 0x84C7 - TEXTURE8 = 0x84C8 - TEXTURE9 = 0x84C9 - TEXTURE10 = 0x84CA - TEXTURE11 = 0x84CB - TEXTURE12 = 0x84CC - TEXTURE13 = 0x84CD - TEXTURE14 = 0x84CE - TEXTURE15 = 0x84CF - TEXTURE16 = 0x84D0 - TEXTURE17 = 0x84D1 - TEXTURE18 = 0x84D2 - TEXTURE19 = 0x84D3 - TEXTURE20 = 0x84D4 - TEXTURE21 = 0x84D5 - TEXTURE22 = 0x84D6 - TEXTURE23 = 0x84D7 - TEXTURE24 = 0x84D8 - TEXTURE25 = 0x84D9 - TEXTURE26 = 0x84DA - TEXTURE27 = 0x84DB - TEXTURE28 = 0x84DC - TEXTURE29 = 0x84DD - TEXTURE30 = 0x84DE - TEXTURE31 = 0x84DF - ACTIVE_TEXTURE = 0x84E0 - CLIENT_ACTIVE_TEXTURE = 0x84E1 - MAX_TEXTURE_UNITS = 0x84E2 - TRANSPOSE_MODELVIEW_MATRIX = 0x84E3 - TRANSPOSE_PROJECTION_MATRIX = 0x84E4 - TRANSPOSE_TEXTURE_MATRIX = 0x84E5 - TRANSPOSE_COLOR_MATRIX = 0x84E6 - SUBTRACT = 0x84E7 - MAX_RENDERBUFFER_SIZE = 0x84E8 - COMPRESSED_ALPHA = 0x84E9 - COMPRESSED_LUMINANCE = 0x84EA - COMPRESSED_LUMINANCE_ALPHA = 0x84EB - COMPRESSED_INTENSITY = 0x84EC - COMPRESSED_RGB = 0x84ED - COMPRESSED_RGBA = 0x84EE - TEXTURE_RECTANGLE = 0x84F5 - TEXTURE_BINDING_RECTANGLE = 0x84F6 - PROXY_TEXTURE_RECTANGLE = 0x84F7 - MAX_RECTANGLE_TEXTURE_SIZE = 0x84F8 - DEPTH_STENCIL = 0x84F9 - UNSIGNED_INT_24_8 = 0x84FA - MAX_TEXTURE_LOD_BIAS = 0x84FD - TEXTURE_FILTER_CONTROL = 0x8500 - TEXTURE_LOD_BIAS = 0x8501 - INCR_WRAP = 0x8507 - DECR_WRAP = 0x8508 - NORMAL_MAP = 0x8511 - REFLECTION_MAP = 0x8512 - TEXTURE_CUBE_MAP = 0x8513 - TEXTURE_BINDING_CUBE_MAP = 0x8514 - TEXTURE_CUBE_MAP_POSITIVE_X = 0x8515 - TEXTURE_CUBE_MAP_NEGATIVE_X = 0x8516 - TEXTURE_CUBE_MAP_POSITIVE_Y = 0x8517 - TEXTURE_CUBE_MAP_NEGATIVE_Y = 0x8518 - TEXTURE_CUBE_MAP_POSITIVE_Z = 0x8519 - TEXTURE_CUBE_MAP_NEGATIVE_Z = 0x851A - PROXY_TEXTURE_CUBE_MAP = 0x851B - MAX_CUBE_MAP_TEXTURE_SIZE = 0x851C - COMBINE = 0x8570 - COMBINE_RGB = 0x8571 - COMBINE_ALPHA = 0x8572 - RGB_SCALE = 0x8573 - ADD_SIGNED = 0x8574 - INTERPOLATE = 0x8575 - CONSTANT = 0x8576 - PRIMARY_COLOR = 0x8577 - PREVIOUS = 0x8578 - SOURCE0_RGB = 0x8580 - SRC0_RGB = 0x8580 - SOURCE1_RGB = 0x8581 - SRC1_RGB = 0x8581 - SOURCE2_RGB = 0x8582 - SRC2_RGB = 0x8582 - SOURCE0_ALPHA = 0x8588 - SRC0_ALPHA = 0x8588 - SOURCE1_ALPHA = 0x8589 - SRC1_ALPHA = 0x8589 - SOURCE2_ALPHA = 0x858A - SRC2_ALPHA = 0x858A - OPERAND0_RGB = 0x8590 - OPERAND1_RGB = 0x8591 - OPERAND2_RGB = 0x8592 - OPERAND0_ALPHA = 0x8598 - OPERAND1_ALPHA = 0x8599 - OPERAND2_ALPHA = 0x859A - VERTEX_ARRAY_BINDING = 0x85B5 - VERTEX_ATTRIB_ARRAY_ENABLED = 0x8622 - VERTEX_ATTRIB_ARRAY_SIZE = 0x8623 - VERTEX_ATTRIB_ARRAY_STRIDE = 0x8624 - VERTEX_ATTRIB_ARRAY_TYPE = 0x8625 - CURRENT_VERTEX_ATTRIB = 0x8626 - VERTEX_PROGRAM_POINT_SIZE = 0x8642 - PROGRAM_POINT_SIZE = 0x8642 - VERTEX_PROGRAM_TWO_SIDE = 0x8643 - VERTEX_ATTRIB_ARRAY_POINTER = 0x8645 - DEPTH_CLAMP = 0x864F - TEXTURE_COMPRESSED_IMAGE_SIZE = 0x86A0 - TEXTURE_COMPRESSED = 0x86A1 - NUM_COMPRESSED_TEXTURE_FORMATS = 0x86A2 - COMPRESSED_TEXTURE_FORMATS = 0x86A3 - DOT3_RGB = 0x86AE - DOT3_RGBA = 0x86AF - BUFFER_SIZE = 0x8764 - BUFFER_USAGE = 0x8765 - STENCIL_BACK_FUNC = 0x8800 - STENCIL_BACK_FAIL = 0x8801 - STENCIL_BACK_PASS_DEPTH_FAIL = 0x8802 - STENCIL_BACK_PASS_DEPTH_PASS = 0x8803 - RGBA32F = 0x8814 - RGB32F = 0x8815 - RGBA16F = 0x881A - RGB16F = 0x881B - MAX_DRAW_BUFFERS = 0x8824 - DRAW_BUFFER0 = 0x8825 - DRAW_BUFFER1 = 0x8826 - DRAW_BUFFER2 = 0x8827 - DRAW_BUFFER3 = 0x8828 - DRAW_BUFFER4 = 0x8829 - DRAW_BUFFER5 = 0x882A - DRAW_BUFFER6 = 0x882B - DRAW_BUFFER7 = 0x882C - DRAW_BUFFER8 = 0x882D - DRAW_BUFFER9 = 0x882E - DRAW_BUFFER10 = 0x882F - DRAW_BUFFER11 = 0x8830 - DRAW_BUFFER12 = 0x8831 - DRAW_BUFFER13 = 0x8832 - DRAW_BUFFER14 = 0x8833 - DRAW_BUFFER15 = 0x8834 - BLEND_EQUATION_ALPHA = 0x883D - TEXTURE_DEPTH_SIZE = 0x884A - DEPTH_TEXTURE_MODE = 0x884B - TEXTURE_COMPARE_MODE = 0x884C - TEXTURE_COMPARE_FUNC = 0x884D - COMPARE_R_TO_TEXTURE = 0x884E - COMPARE_REF_TO_TEXTURE = 0x884E - TEXTURE_CUBE_MAP_SEAMLESS = 0x884F - POINT_SPRITE = 0x8861 - COORD_REPLACE = 0x8862 - QUERY_COUNTER_BITS = 0x8864 - CURRENT_QUERY = 0x8865 - QUERY_RESULT = 0x8866 - QUERY_RESULT_AVAILABLE = 0x8867 - MAX_VERTEX_ATTRIBS = 0x8869 - VERTEX_ATTRIB_ARRAY_NORMALIZED = 0x886A - MAX_TEXTURE_COORDS = 0x8871 - MAX_TEXTURE_IMAGE_UNITS = 0x8872 - ARRAY_BUFFER = 0x8892 - ELEMENT_ARRAY_BUFFER = 0x8893 - ARRAY_BUFFER_BINDING = 0x8894 - ELEMENT_ARRAY_BUFFER_BINDING = 0x8895 - VERTEX_ARRAY_BUFFER_BINDING = 0x8896 - NORMAL_ARRAY_BUFFER_BINDING = 0x8897 - COLOR_ARRAY_BUFFER_BINDING = 0x8898 - INDEX_ARRAY_BUFFER_BINDING = 0x8899 - TEXTURE_COORD_ARRAY_BUFFER_BINDING = 0x889A - EDGE_FLAG_ARRAY_BUFFER_BINDING = 0x889B - SECONDARY_COLOR_ARRAY_BUFFER_BINDING = 0x889C - FOG_COORDINATE_ARRAY_BUFFER_BINDING = 0x889D - FOG_COORD_ARRAY_BUFFER_BINDING = 0x889D - WEIGHT_ARRAY_BUFFER_BINDING = 0x889E - VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = 0x889F - READ_ONLY = 0x88B8 - WRITE_ONLY = 0x88B9 - READ_WRITE = 0x88BA - BUFFER_ACCESS = 0x88BB - BUFFER_MAPPED = 0x88BC - BUFFER_MAP_POINTER = 0x88BD - TIME_ELAPSED = 0x88BF - STREAM_DRAW = 0x88E0 - STREAM_READ = 0x88E1 - STREAM_COPY = 0x88E2 - STATIC_DRAW = 0x88E4 - STATIC_READ = 0x88E5 - STATIC_COPY = 0x88E6 - DYNAMIC_DRAW = 0x88E8 - DYNAMIC_READ = 0x88E9 - DYNAMIC_COPY = 0x88EA - PIXEL_PACK_BUFFER = 0x88EB - PIXEL_UNPACK_BUFFER = 0x88EC - PIXEL_PACK_BUFFER_BINDING = 0x88ED - PIXEL_UNPACK_BUFFER_BINDING = 0x88EF - DEPTH24_STENCIL8 = 0x88F0 - TEXTURE_STENCIL_SIZE = 0x88F1 - SRC1_COLOR = 0x88F9 - ONE_MINUS_SRC1_COLOR = 0x88FA - ONE_MINUS_SRC1_ALPHA = 0x88FB - MAX_DUAL_SOURCE_DRAW_BUFFERS = 0x88FC - VERTEX_ATTRIB_ARRAY_INTEGER = 0x88FD - VERTEX_ATTRIB_ARRAY_DIVISOR = 0x88FE - MAX_ARRAY_TEXTURE_LAYERS = 0x88FF - MIN_PROGRAM_TEXEL_OFFSET = 0x8904 - MAX_PROGRAM_TEXEL_OFFSET = 0x8905 - SAMPLES_PASSED = 0x8914 - GEOMETRY_VERTICES_OUT = 0x8916 - GEOMETRY_INPUT_TYPE = 0x8917 - GEOMETRY_OUTPUT_TYPE = 0x8918 - SAMPLER_BINDING = 0x8919 - CLAMP_VERTEX_COLOR = 0x891A - CLAMP_FRAGMENT_COLOR = 0x891B - CLAMP_READ_COLOR = 0x891C - FIXED_ONLY = 0x891D - UNIFORM_BUFFER = 0x8A11 - UNIFORM_BUFFER_BINDING = 0x8A28 - UNIFORM_BUFFER_START = 0x8A29 - UNIFORM_BUFFER_SIZE = 0x8A2A - MAX_VERTEX_UNIFORM_BLOCKS = 0x8A2B - MAX_GEOMETRY_UNIFORM_BLOCKS = 0x8A2C - MAX_FRAGMENT_UNIFORM_BLOCKS = 0x8A2D - MAX_COMBINED_UNIFORM_BLOCKS = 0x8A2E - MAX_UNIFORM_BUFFER_BINDINGS = 0x8A2F - MAX_UNIFORM_BLOCK_SIZE = 0x8A30 - MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS = 0x8A31 - MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS = 0x8A32 - MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS = 0x8A33 - UNIFORM_BUFFER_OFFSET_ALIGNMENT = 0x8A34 - ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH = 0x8A35 - ACTIVE_UNIFORM_BLOCKS = 0x8A36 - UNIFORM_TYPE = 0x8A37 - UNIFORM_SIZE = 0x8A38 - UNIFORM_NAME_LENGTH = 0x8A39 - UNIFORM_BLOCK_INDEX = 0x8A3A - UNIFORM_OFFSET = 0x8A3B - UNIFORM_ARRAY_STRIDE = 0x8A3C - UNIFORM_MATRIX_STRIDE = 0x8A3D - UNIFORM_IS_ROW_MAJOR = 0x8A3E - UNIFORM_BLOCK_BINDING = 0x8A3F - UNIFORM_BLOCK_DATA_SIZE = 0x8A40 - UNIFORM_BLOCK_NAME_LENGTH = 0x8A41 - UNIFORM_BLOCK_ACTIVE_UNIFORMS = 0x8A42 - UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES = 0x8A43 - UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER = 0x8A44 - UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER = 0x8A45 - UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER = 0x8A46 - FRAGMENT_SHADER = 0x8B30 - VERTEX_SHADER = 0x8B31 - MAX_FRAGMENT_UNIFORM_COMPONENTS = 0x8B49 - MAX_VERTEX_UNIFORM_COMPONENTS = 0x8B4A - MAX_VARYING_FLOATS = 0x8B4B - MAX_VARYING_COMPONENTS = 0x8B4B - MAX_VERTEX_TEXTURE_IMAGE_UNITS = 0x8B4C - MAX_COMBINED_TEXTURE_IMAGE_UNITS = 0x8B4D - SHADER_TYPE = 0x8B4F - FLOAT_VEC2 = 0x8B50 - FLOAT_VEC3 = 0x8B51 - FLOAT_VEC4 = 0x8B52 - INT_VEC2 = 0x8B53 - INT_VEC3 = 0x8B54 - INT_VEC4 = 0x8B55 - BOOL = 0x8B56 - BOOL_VEC2 = 0x8B57 - BOOL_VEC3 = 0x8B58 - BOOL_VEC4 = 0x8B59 - FLOAT_MAT2 = 0x8B5A - FLOAT_MAT3 = 0x8B5B - FLOAT_MAT4 = 0x8B5C - SAMPLER_1D = 0x8B5D - SAMPLER_2D = 0x8B5E - SAMPLER_3D = 0x8B5F - SAMPLER_CUBE = 0x8B60 - SAMPLER_1D_SHADOW = 0x8B61 - SAMPLER_2D_SHADOW = 0x8B62 - SAMPLER_2D_RECT = 0x8B63 - SAMPLER_2D_RECT_SHADOW = 0x8B64 - FLOAT_MAT2x3 = 0x8B65 - FLOAT_MAT2x4 = 0x8B66 - FLOAT_MAT3x2 = 0x8B67 - FLOAT_MAT3x4 = 0x8B68 - FLOAT_MAT4x2 = 0x8B69 - FLOAT_MAT4x3 = 0x8B6A - DELETE_STATUS = 0x8B80 - COMPILE_STATUS = 0x8B81 - LINK_STATUS = 0x8B82 - VALIDATE_STATUS = 0x8B83 - INFO_LOG_LENGTH = 0x8B84 - ATTACHED_SHADERS = 0x8B85 - ACTIVE_UNIFORMS = 0x8B86 - ACTIVE_UNIFORM_MAX_LENGTH = 0x8B87 - SHADER_SOURCE_LENGTH = 0x8B88 - ACTIVE_ATTRIBUTES = 0x8B89 - ACTIVE_ATTRIBUTE_MAX_LENGTH = 0x8B8A - SHADING_LANGUAGE_VERSION = 0x8B8C - CURRENT_PROGRAM = 0x8B8D - TEXTURE_RED_TYPE = 0x8C10 - TEXTURE_GREEN_TYPE = 0x8C11 - TEXTURE_BLUE_TYPE = 0x8C12 - TEXTURE_ALPHA_TYPE = 0x8C13 - TEXTURE_DEPTH_TYPE = 0x8C16 - UNSIGNED_NORMALIZED = 0x8C17 - TEXTURE_1D_ARRAY = 0x8C18 - PROXY_TEXTURE_1D_ARRAY = 0x8C19 - TEXTURE_2D_ARRAY = 0x8C1A - PROXY_TEXTURE_2D_ARRAY = 0x8C1B - TEXTURE_BINDING_1D_ARRAY = 0x8C1C - TEXTURE_BINDING_2D_ARRAY = 0x8C1D - MAX_GEOMETRY_TEXTURE_IMAGE_UNITS = 0x8C29 - TEXTURE_BUFFER = 0x8C2A - MAX_TEXTURE_BUFFER_SIZE = 0x8C2B - TEXTURE_BINDING_BUFFER = 0x8C2C - TEXTURE_BUFFER_DATA_STORE_BINDING = 0x8C2D - ANY_SAMPLES_PASSED = 0x8C2F - R11F_G11F_B10F = 0x8C3A - UNSIGNED_INT_10F_11F_11F_REV = 0x8C3B - RGB9_E5 = 0x8C3D - UNSIGNED_INT_5_9_9_9_REV = 0x8C3E - TEXTURE_SHARED_SIZE = 0x8C3F - SRGB = 0x8C40 - SRGB8 = 0x8C41 - SRGB_ALPHA = 0x8C42 - SRGB8_ALPHA8 = 0x8C43 - SLUMINANCE_ALPHA = 0x8C44 - SLUMINANCE8_ALPHA8 = 0x8C45 - SLUMINANCE = 0x8C46 - SLUMINANCE8 = 0x8C47 - COMPRESSED_SRGB = 0x8C48 - COMPRESSED_SRGB_ALPHA = 0x8C49 - COMPRESSED_SLUMINANCE = 0x8C4A - COMPRESSED_SLUMINANCE_ALPHA = 0x8C4B - TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH = 0x8C76 - TRANSFORM_FEEDBACK_BUFFER_MODE = 0x8C7F - MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS = 0x8C80 - TRANSFORM_FEEDBACK_VARYINGS = 0x8C83 - TRANSFORM_FEEDBACK_BUFFER_START = 0x8C84 - TRANSFORM_FEEDBACK_BUFFER_SIZE = 0x8C85 - PRIMITIVES_GENERATED = 0x8C87 - TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN = 0x8C88 - RASTERIZER_DISCARD = 0x8C89 - MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS = 0x8C8A - MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS = 0x8C8B - INTERLEAVED_ATTRIBS = 0x8C8C - SEPARATE_ATTRIBS = 0x8C8D - TRANSFORM_FEEDBACK_BUFFER = 0x8C8E - TRANSFORM_FEEDBACK_BUFFER_BINDING = 0x8C8F - POINT_SPRITE_COORD_ORIGIN = 0x8CA0 - LOWER_LEFT = 0x8CA1 - UPPER_LEFT = 0x8CA2 - STENCIL_BACK_REF = 0x8CA3 - STENCIL_BACK_VALUE_MASK = 0x8CA4 - STENCIL_BACK_WRITEMASK = 0x8CA5 - DRAW_FRAMEBUFFER_BINDING = 0x8CA6 - FRAMEBUFFER_BINDING = 0x8CA6 - RENDERBUFFER_BINDING = 0x8CA7 - READ_FRAMEBUFFER = 0x8CA8 - DRAW_FRAMEBUFFER = 0x8CA9 - READ_FRAMEBUFFER_BINDING = 0x8CAA - RENDERBUFFER_SAMPLES = 0x8CAB - DEPTH_COMPONENT32F = 0x8CAC - DEPTH32F_STENCIL8 = 0x8CAD - FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE = 0x8CD0 - FRAMEBUFFER_ATTACHMENT_OBJECT_NAME = 0x8CD1 - FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL = 0x8CD2 - FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE = 0x8CD3 - FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER = 0x8CD4 - FRAMEBUFFER_COMPLETE = 0x8CD5 - FRAMEBUFFER_INCOMPLETE_ATTACHMENT = 0x8CD6 - FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = 0x8CD7 - FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER = 0x8CDB - FRAMEBUFFER_INCOMPLETE_READ_BUFFER = 0x8CDC - FRAMEBUFFER_UNSUPPORTED = 0x8CDD - MAX_COLOR_ATTACHMENTS = 0x8CDF - COLOR_ATTACHMENT0 = 0x8CE0 - COLOR_ATTACHMENT1 = 0x8CE1 - COLOR_ATTACHMENT2 = 0x8CE2 - COLOR_ATTACHMENT3 = 0x8CE3 - COLOR_ATTACHMENT4 = 0x8CE4 - COLOR_ATTACHMENT5 = 0x8CE5 - COLOR_ATTACHMENT6 = 0x8CE6 - COLOR_ATTACHMENT7 = 0x8CE7 - COLOR_ATTACHMENT8 = 0x8CE8 - COLOR_ATTACHMENT9 = 0x8CE9 - COLOR_ATTACHMENT10 = 0x8CEA - COLOR_ATTACHMENT11 = 0x8CEB - COLOR_ATTACHMENT12 = 0x8CEC - COLOR_ATTACHMENT13 = 0x8CED - COLOR_ATTACHMENT14 = 0x8CEE - COLOR_ATTACHMENT15 = 0x8CEF - DEPTH_ATTACHMENT = 0x8D00 - STENCIL_ATTACHMENT = 0x8D20 - FRAMEBUFFER = 0x8D40 - RENDERBUFFER = 0x8D41 - RENDERBUFFER_WIDTH = 0x8D42 - RENDERBUFFER_HEIGHT = 0x8D43 - RENDERBUFFER_INTERNAL_FORMAT = 0x8D44 - STENCIL_INDEX1 = 0x8D46 - STENCIL_INDEX4 = 0x8D47 - STENCIL_INDEX8 = 0x8D48 - STENCIL_INDEX16 = 0x8D49 - RENDERBUFFER_RED_SIZE = 0x8D50 - RENDERBUFFER_GREEN_SIZE = 0x8D51 - RENDERBUFFER_BLUE_SIZE = 0x8D52 - RENDERBUFFER_ALPHA_SIZE = 0x8D53 - RENDERBUFFER_DEPTH_SIZE = 0x8D54 - RENDERBUFFER_STENCIL_SIZE = 0x8D55 - FRAMEBUFFER_INCOMPLETE_MULTISAMPLE = 0x8D56 - MAX_SAMPLES = 0x8D57 - RGBA32UI = 0x8D70 - RGB32UI = 0x8D71 - RGBA16UI = 0x8D76 - RGB16UI = 0x8D77 - RGBA8UI = 0x8D7C - RGB8UI = 0x8D7D - RGBA32I = 0x8D82 - RGB32I = 0x8D83 - RGBA16I = 0x8D88 - RGB16I = 0x8D89 - RGBA8I = 0x8D8E - RGB8I = 0x8D8F - RED_INTEGER = 0x8D94 - GREEN_INTEGER = 0x8D95 - BLUE_INTEGER = 0x8D96 - ALPHA_INTEGER = 0x8D97 - RGB_INTEGER = 0x8D98 - RGBA_INTEGER = 0x8D99 - BGR_INTEGER = 0x8D9A - BGRA_INTEGER = 0x8D9B - INT_2_10_10_10_REV = 0x8D9F - FRAMEBUFFER_ATTACHMENT_LAYERED = 0x8DA7 - FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS = 0x8DA8 - FLOAT_32_UNSIGNED_INT_24_8_REV = 0x8DAD - FRAMEBUFFER_SRGB = 0x8DB9 - COMPRESSED_RED_RGTC1 = 0x8DBB - COMPRESSED_SIGNED_RED_RGTC1 = 0x8DBC - COMPRESSED_RG_RGTC2 = 0x8DBD - COMPRESSED_SIGNED_RG_RGTC2 = 0x8DBE - SAMPLER_1D_ARRAY = 0x8DC0 - SAMPLER_2D_ARRAY = 0x8DC1 - SAMPLER_BUFFER = 0x8DC2 - SAMPLER_1D_ARRAY_SHADOW = 0x8DC3 - SAMPLER_2D_ARRAY_SHADOW = 0x8DC4 - SAMPLER_CUBE_SHADOW = 0x8DC5 - UNSIGNED_INT_VEC2 = 0x8DC6 - UNSIGNED_INT_VEC3 = 0x8DC7 - UNSIGNED_INT_VEC4 = 0x8DC8 - INT_SAMPLER_1D = 0x8DC9 - INT_SAMPLER_2D = 0x8DCA - INT_SAMPLER_3D = 0x8DCB - INT_SAMPLER_CUBE = 0x8DCC - INT_SAMPLER_2D_RECT = 0x8DCD - INT_SAMPLER_1D_ARRAY = 0x8DCE - INT_SAMPLER_2D_ARRAY = 0x8DCF - INT_SAMPLER_BUFFER = 0x8DD0 - UNSIGNED_INT_SAMPLER_1D = 0x8DD1 - UNSIGNED_INT_SAMPLER_2D = 0x8DD2 - UNSIGNED_INT_SAMPLER_3D = 0x8DD3 - UNSIGNED_INT_SAMPLER_CUBE = 0x8DD4 - UNSIGNED_INT_SAMPLER_2D_RECT = 0x8DD5 - UNSIGNED_INT_SAMPLER_1D_ARRAY = 0x8DD6 - UNSIGNED_INT_SAMPLER_2D_ARRAY = 0x8DD7 - UNSIGNED_INT_SAMPLER_BUFFER = 0x8DD8 - GEOMETRY_SHADER = 0x8DD9 - MAX_GEOMETRY_UNIFORM_COMPONENTS = 0x8DDF - MAX_GEOMETRY_OUTPUT_VERTICES = 0x8DE0 - MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS = 0x8DE1 - QUERY_WAIT = 0x8E13 - QUERY_NO_WAIT = 0x8E14 - QUERY_BY_REGION_WAIT = 0x8E15 - QUERY_BY_REGION_NO_WAIT = 0x8E16 - TIMESTAMP = 0x8E28 - TEXTURE_SWIZZLE_R = 0x8E42 - TEXTURE_SWIZZLE_G = 0x8E43 - TEXTURE_SWIZZLE_B = 0x8E44 - TEXTURE_SWIZZLE_A = 0x8E45 - TEXTURE_SWIZZLE_RGBA = 0x8E46 - QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION = 0x8E4C - FIRST_VERTEX_CONVENTION = 0x8E4D - LAST_VERTEX_CONVENTION = 0x8E4E - PROVOKING_VERTEX = 0x8E4F - SAMPLE_POSITION = 0x8E50 - SAMPLE_MASK = 0x8E51 - SAMPLE_MASK_VALUE = 0x8E52 - MAX_SAMPLE_MASK_WORDS = 0x8E59 - COPY_READ_BUFFER = 0x8F36 - COPY_WRITE_BUFFER = 0x8F37 - R8_SNORM = 0x8F94 - RG8_SNORM = 0x8F95 - RGB8_SNORM = 0x8F96 - RGBA8_SNORM = 0x8F97 - R16_SNORM = 0x8F98 - RG16_SNORM = 0x8F99 - RGB16_SNORM = 0x8F9A - RGBA16_SNORM = 0x8F9B - SIGNED_NORMALIZED = 0x8F9C - PRIMITIVE_RESTART = 0x8F9D - PRIMITIVE_RESTART_INDEX = 0x8F9E - RGB10_A2UI = 0x906F - TEXTURE_2D_MULTISAMPLE = 0x9100 - PROXY_TEXTURE_2D_MULTISAMPLE = 0x9101 - TEXTURE_2D_MULTISAMPLE_ARRAY = 0x9102 - PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY = 0x9103 - TEXTURE_BINDING_2D_MULTISAMPLE = 0x9104 - TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY = 0x9105 - TEXTURE_SAMPLES = 0x9106 - TEXTURE_FIXED_SAMPLE_LOCATIONS = 0x9107 - SAMPLER_2D_MULTISAMPLE = 0x9108 - INT_SAMPLER_2D_MULTISAMPLE = 0x9109 - UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE = 0x910A - SAMPLER_2D_MULTISAMPLE_ARRAY = 0x910B - INT_SAMPLER_2D_MULTISAMPLE_ARRAY = 0x910C - UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY = 0x910D - MAX_COLOR_TEXTURE_SAMPLES = 0x910E - MAX_DEPTH_TEXTURE_SAMPLES = 0x910F - MAX_INTEGER_SAMPLES = 0x9110 - MAX_SERVER_WAIT_TIMEOUT = 0x9111 - OBJECT_TYPE = 0x9112 - SYNC_CONDITION = 0x9113 - SYNC_STATUS = 0x9114 - SYNC_FLAGS = 0x9115 - SYNC_FENCE = 0x9116 - SYNC_GPU_COMMANDS_COMPLETE = 0x9117 - UNSIGNALED = 0x9118 - SIGNALED = 0x9119 - ALREADY_SIGNALED = 0x911A - TIMEOUT_EXPIRED = 0x911B - CONDITION_SATISFIED = 0x911C - WAIT_FAILED = 0x911D - BUFFER_ACCESS_FLAGS = 0x911F - BUFFER_MAP_LENGTH = 0x9120 - BUFFER_MAP_OFFSET = 0x9121 - MAX_VERTEX_OUTPUT_COMPONENTS = 0x9122 - MAX_GEOMETRY_INPUT_COMPONENTS = 0x9123 - MAX_GEOMETRY_OUTPUT_COMPONENTS = 0x9124 - MAX_FRAGMENT_INPUT_COMPONENTS = 0x9125 - CONTEXT_PROFILE_MASK = 0x9126 -) - -// https://www.opengl.org/sdk/docs/man3/xhtml/glViewport.xml -func (gl *GL) Viewport(x, y, width, height int) { - C.gl3_3core_glViewport(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// DepthRange specifies the mapping of depth values from normalized device -// coordinates to window coordinates. -// -// Parameter nearVal specifies the mapping of the near clipping plane to window -// coordinates (defaults to 0), while farVal specifies the mapping of the far -// clipping plane to window coordinates (defaults to 1). -// -// After clipping and division by w, depth coordinates range from -1 to 1, -// corresponding to the near and far clipping planes. DepthRange specifies a -// linear mapping of the normalized depth coordinates in this range to window -// depth coordinates. Regardless of the actual depth buffer implementation, -// window coordinate depth values are treated as though they range from 0 through 1 -// (like color components). Thus, the values accepted by DepthRange are both -// clamped to this range before they are accepted. -// -// The default setting of (0, 1) maps the near plane to 0 and the far plane to 1. -// With this mapping, the depth buffer range is fully utilized. -// -// It is not necessary that nearVal be less than farVal. Reverse mappings such as -// nearVal 1, and farVal 0 are acceptable. -// -// GL.INVALID_OPERATION is generated if DepthRange is executed between the -// execution of Begin and the corresponding execution of End. -func (gl *GL) DepthRange(nearVal, farVal float64) { - C.gl3_3core_glDepthRange(gl.funcs, C.GLdouble(nearVal), C.GLdouble(farVal)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsEnabled.xml -func (gl *GL) IsEnabled(cap glbase.Enum) bool { - glresult := C.gl3_3core_glIsEnabled(gl.funcs, C.GLenum(cap)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetTexLevelParameteriv.xml -func (gl *GL) GetTexLevelParameteriv(target glbase.Enum, level int, pname glbase.Enum, params []int32) { - C.gl3_3core_glGetTexLevelParameteriv(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetTexLevelParameterfv.xml -func (gl *GL) GetTexLevelParameterfv(target glbase.Enum, level int, pname glbase.Enum, params []float32) { - C.gl3_3core_glGetTexLevelParameterfv(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetTexParameteriv.xml -func (gl *GL) GetTexParameteriv(target, pname glbase.Enum, params []int32) { - C.gl3_3core_glGetTexParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetTexParameterfv.xml -func (gl *GL) GetTexParameterfv(target, pname glbase.Enum, params []float32) { - C.gl3_3core_glGetTexParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetTexImage.xml -func (gl *GL) GetTexImage(target glbase.Enum, level int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl3_3core_glGetTexImage(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetIntegerv.xml -func (gl *GL) GetIntegerv(pname glbase.Enum, params []int32) { - C.gl3_3core_glGetIntegerv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetFloatv.xml -func (gl *GL) GetFloatv(pname glbase.Enum, params []float32) { - C.gl3_3core_glGetFloatv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetError.xml -func (gl *GL) GetError() glbase.Enum { - glresult := C.gl3_3core_glGetError(gl.funcs) - return glbase.Enum(glresult) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetDoublev.xml -func (gl *GL) GetDoublev(pname glbase.Enum, params []float64) { - C.gl3_3core_glGetDoublev(gl.funcs, C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetBooleanv.xml -func (gl *GL) GetBooleanv(pname glbase.Enum, params []bool) { - C.gl3_3core_glGetBooleanv(gl.funcs, C.GLenum(pname), (*C.GLboolean)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glReadPixels.xml -func (gl *GL) ReadPixels(x, y, width, height int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl3_3core_glReadPixels(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glReadBuffer.xml -func (gl *GL) ReadBuffer(mode glbase.Enum) { - C.gl3_3core_glReadBuffer(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPixelStorei.xml -func (gl *GL) PixelStorei(pname glbase.Enum, param int32) { - C.gl3_3core_glPixelStorei(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPixelStoref.xml -func (gl *GL) PixelStoref(pname glbase.Enum, param float32) { - C.gl3_3core_glPixelStoref(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDepthFunc.xml -func (gl *GL) DepthFunc(glfunc glbase.Enum) { - C.gl3_3core_glDepthFunc(gl.funcs, C.GLenum(glfunc)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glStencilOp.xml -func (gl *GL) StencilOp(fail, zfail, zpass glbase.Enum) { - C.gl3_3core_glStencilOp(gl.funcs, C.GLenum(fail), C.GLenum(zfail), C.GLenum(zpass)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glStencilFunc.xml -func (gl *GL) StencilFunc(glfunc glbase.Enum, ref int32, mask uint32) { - C.gl3_3core_glStencilFunc(gl.funcs, C.GLenum(glfunc), C.GLint(ref), C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glLogicOp.xml -func (gl *GL) LogicOp(opcode glbase.Enum) { - C.gl3_3core_glLogicOp(gl.funcs, C.GLenum(opcode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBlendFunc.xml -func (gl *GL) BlendFunc(sfactor, dfactor glbase.Enum) { - C.gl3_3core_glBlendFunc(gl.funcs, C.GLenum(sfactor), C.GLenum(dfactor)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFlush.xml -func (gl *GL) Flush() { - C.gl3_3core_glFlush(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFinish.xml -func (gl *GL) Finish() { - C.gl3_3core_glFinish(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEnable.xml -func (gl *GL) Enable(cap glbase.Enum) { - C.gl3_3core_glEnable(gl.funcs, C.GLenum(cap)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDisable.xml -func (gl *GL) Disable(cap glbase.Enum) { - C.gl3_3core_glDisable(gl.funcs, C.GLenum(cap)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDepthMask.xml -func (gl *GL) DepthMask(flag bool) { - C.gl3_3core_glDepthMask(gl.funcs, *(*C.GLboolean)(unsafe.Pointer(&flag))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColorMask.xml -func (gl *GL) ColorMask(red, green, blue, alpha bool) { - C.gl3_3core_glColorMask(gl.funcs, *(*C.GLboolean)(unsafe.Pointer(&red)), *(*C.GLboolean)(unsafe.Pointer(&green)), *(*C.GLboolean)(unsafe.Pointer(&blue)), *(*C.GLboolean)(unsafe.Pointer(&alpha))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glStencilMask.xml -func (gl *GL) StencilMask(mask uint32) { - C.gl3_3core_glStencilMask(gl.funcs, C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClearDepth.xml -func (gl *GL) ClearDepth(depth float64) { - C.gl3_3core_glClearDepth(gl.funcs, C.GLdouble(depth)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClearStencil.xml -func (gl *GL) ClearStencil(s int32) { - C.gl3_3core_glClearStencil(gl.funcs, C.GLint(s)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClearColor.xml -func (gl *GL) ClearColor(red, green, blue, alpha float32) { - C.gl3_3core_glClearColor(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClear.xml -func (gl *GL) Clear(mask glbase.Bitfield) { - C.gl3_3core_glClear(gl.funcs, C.GLbitfield(mask)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDrawBuffer.xml -func (gl *GL) DrawBuffer(mode glbase.Enum) { - C.gl3_3core_glDrawBuffer(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexImage2D.xml -func (gl *GL) TexImage2D(target glbase.Enum, level int, internalFormat int32, width, height, border int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl3_3core_glTexImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLint(border), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexImage1D.xml -func (gl *GL) TexImage1D(target glbase.Enum, level int, internalFormat int32, width, border int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl3_3core_glTexImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(internalFormat), C.GLsizei(width), C.GLint(border), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexParameteriv.xml -func (gl *GL) TexParameteriv(target, pname glbase.Enum, params []int32) { - C.gl3_3core_glTexParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexParameteri.xml -func (gl *GL) TexParameteri(target, pname glbase.Enum, param int32) { - C.gl3_3core_glTexParameteri(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexParameterfv.xml -func (gl *GL) TexParameterfv(target, pname glbase.Enum, params []float32) { - C.gl3_3core_glTexParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexParameterf.xml -func (gl *GL) TexParameterf(target, pname glbase.Enum, param float32) { - C.gl3_3core_glTexParameterf(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glScissor.xml -func (gl *GL) Scissor(x, y, width, height int) { - C.gl3_3core_glScissor(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPolygonMode.xml -func (gl *GL) PolygonMode(face, mode glbase.Enum) { - C.gl3_3core_glPolygonMode(gl.funcs, C.GLenum(face), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPointSize.xml -func (gl *GL) PointSize(size float32) { - C.gl3_3core_glPointSize(gl.funcs, C.GLfloat(size)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glLineWidth.xml -func (gl *GL) LineWidth(width float32) { - C.gl3_3core_glLineWidth(gl.funcs, C.GLfloat(width)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glHint.xml -func (gl *GL) Hint(target, mode glbase.Enum) { - C.gl3_3core_glHint(gl.funcs, C.GLenum(target), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFrontFace.xml -func (gl *GL) FrontFace(mode glbase.Enum) { - C.gl3_3core_glFrontFace(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCullFace.xml -func (gl *GL) CullFace(mode glbase.Enum) { - C.gl3_3core_glCullFace(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIndexubv.xml -func (gl *GL) Indexubv(c []uint8) { - C.gl3_3core_glIndexubv(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIndexub.xml -func (gl *GL) Indexub(c uint8) { - C.gl3_3core_glIndexub(gl.funcs, C.GLubyte(c)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsTexture.xml -func (gl *GL) IsTexture(texture glbase.Texture) bool { - glresult := C.gl3_3core_glIsTexture(gl.funcs, C.GLuint(texture)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// GenTextures returns n texture names in textures. There is no guarantee -// that the names form a contiguous set of integers; however, it is -// guaranteed that none of the returned names was in use immediately before -// the call to GenTextures. -// -// The generated textures have no dimensionality; they assume the -// dimensionality of the texture target to which they are first bound (see -// BindTexture). -// -// Texture names returned by a call to GenTextures are not returned by -// subsequent calls, unless they are first deleted with DeleteTextures. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// GenTextures is available in GL version 2.0 or greater. -func (gl *GL) GenTextures(n int) []glbase.Texture { - if n == 0 { - return nil - } - textures := make([]glbase.Texture, n) - C.gl3_3core_glGenTextures(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0]))) - return textures -} - -// DeleteTextures deletes the textures objects whose names are stored -// in the textures slice. After a texture is deleted, it has no contents or -// dimensionality, and its name is free for reuse (for example by -// GenTextures). If a texture that is currently bound is deleted, the binding -// reverts to 0 (the default texture). -// -// DeleteTextures silently ignores 0's and names that do not correspond to -// existing textures. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// DeleteTextures is available in GL version 2.0 or greater. -func (gl *GL) DeleteTextures(textures []glbase.Texture) { - n := len(textures) - if n == 0 { - return - } - C.gl3_3core_glDeleteTextures(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBindTexture.xml -func (gl *GL) BindTexture(target glbase.Enum, texture glbase.Texture) { - C.gl3_3core_glBindTexture(gl.funcs, C.GLenum(target), C.GLuint(texture)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexSubImage2D.xml -func (gl *GL) TexSubImage2D(target glbase.Enum, level, xoffset, yoffset, width, height int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl3_3core_glTexSubImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexSubImage1D.xml -func (gl *GL) TexSubImage1D(target glbase.Enum, level, xoffset, width int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl3_3core_glTexSubImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLsizei(width), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCopyTexSubImage2D.xml -func (gl *GL) CopyTexSubImage2D(target glbase.Enum, level, xoffset, yoffset, x, y, width, height int) { - C.gl3_3core_glCopyTexSubImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCopyTexSubImage1D.xml -func (gl *GL) CopyTexSubImage1D(target glbase.Enum, level, xoffset, x, y, width int) { - C.gl3_3core_glCopyTexSubImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(x), C.GLint(y), C.GLsizei(width)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCopyTexImage2D.xml -func (gl *GL) CopyTexImage2D(target glbase.Enum, level int, internalFormat glbase.Enum, x, y, width, height, border int) { - C.gl3_3core_glCopyTexImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height), C.GLint(border)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCopyTexImage1D.xml -func (gl *GL) CopyTexImage1D(target glbase.Enum, level int, internalFormat glbase.Enum, x, y, width, border int) { - C.gl3_3core_glCopyTexImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLint(border)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPolygonOffset.xml -func (gl *GL) PolygonOffset(factor, units float32) { - C.gl3_3core_glPolygonOffset(gl.funcs, C.GLfloat(factor), C.GLfloat(units)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDrawElements.xml -func (gl *GL) DrawElements(mode glbase.Enum, count int, gltype glbase.Enum, indices interface{}) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl3_3core_glDrawElements(gl.funcs, C.GLenum(mode), C.GLsizei(count), C.GLenum(gltype), indices_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDrawArrays.xml -func (gl *GL) DrawArrays(mode glbase.Enum, first, count int) { - C.gl3_3core_glDrawArrays(gl.funcs, C.GLenum(mode), C.GLint(first), C.GLsizei(count)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCopyTexSubImage3D.xml -func (gl *GL) CopyTexSubImage3D(target glbase.Enum, level, xoffset, yoffset int, zoffset int32, x, y, width, height int) { - C.gl3_3core_glCopyTexSubImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(zoffset), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexSubImage3D.xml -func (gl *GL) TexSubImage3D(target glbase.Enum, level, xoffset, yoffset int, zoffset int32, width, height int, depth int32, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl3_3core_glTexSubImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(zoffset), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexImage3D.xml -func (gl *GL) TexImage3D(target glbase.Enum, level int, internalFormat int32, width, height int, depth int32, border int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl3_3core_glTexImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLint(border), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDrawRangeElements.xml -func (gl *GL) DrawRangeElements(mode glbase.Enum, start, end uint32, count int, gltype glbase.Enum, indices interface{}) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl3_3core_glDrawRangeElements(gl.funcs, C.GLenum(mode), C.GLuint(start), C.GLuint(end), C.GLsizei(count), C.GLenum(gltype), indices_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBlendEquation.xml -func (gl *GL) BlendEquation(mode glbase.Enum) { - C.gl3_3core_glBlendEquation(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBlendColor.xml -func (gl *GL) BlendColor(red, green, blue, alpha float32) { - C.gl3_3core_glBlendColor(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetCompressedTexImage.xml -func (gl *GL) GetCompressedTexImage(target glbase.Enum, level int, img interface{}) { - var img_ptr unsafe.Pointer - var img_v = reflect.ValueOf(img) - if img != nil && img_v.Kind() != reflect.Slice { - panic("parameter img must be a slice") - } - if img != nil { - img_ptr = unsafe.Pointer(img_v.Index(0).Addr().Pointer()) - } - C.gl3_3core_glGetCompressedTexImage(gl.funcs, C.GLenum(target), C.GLint(level), img_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCompressedTexSubImage1D.xml -func (gl *GL) CompressedTexSubImage1D(target glbase.Enum, level, xoffset, width int, format glbase.Enum, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl3_3core_glCompressedTexSubImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLsizei(width), C.GLenum(format), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCompressedTexSubImage2D.xml -func (gl *GL) CompressedTexSubImage2D(target glbase.Enum, level, xoffset, yoffset, width, height int, format glbase.Enum, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl3_3core_glCompressedTexSubImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCompressedTexSubImage3D.xml -func (gl *GL) CompressedTexSubImage3D(target glbase.Enum, level, xoffset, yoffset int, zoffset int32, width, height int, depth int32, format glbase.Enum, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl3_3core_glCompressedTexSubImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(zoffset), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLenum(format), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCompressedTexImage1D.xml -func (gl *GL) CompressedTexImage1D(target glbase.Enum, level int, internalFormat glbase.Enum, width, border, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl3_3core_glCompressedTexImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLsizei(width), C.GLint(border), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCompressedTexImage2D.xml -func (gl *GL) CompressedTexImage2D(target glbase.Enum, level int, internalFormat glbase.Enum, width, height, border, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl3_3core_glCompressedTexImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLint(border), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCompressedTexImage3D.xml -func (gl *GL) CompressedTexImage3D(target glbase.Enum, level int, internalFormat glbase.Enum, width, height int, depth int32, border, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl3_3core_glCompressedTexImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLint(border), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSampleCoverage.xml -func (gl *GL) SampleCoverage(value float32, invert bool) { - C.gl3_3core_glSampleCoverage(gl.funcs, C.GLfloat(value), *(*C.GLboolean)(unsafe.Pointer(&invert))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glActiveTexture.xml -func (gl *GL) ActiveTexture(texture glbase.Enum) { - C.gl3_3core_glActiveTexture(gl.funcs, C.GLenum(texture)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPointParameteriv.xml -func (gl *GL) PointParameteriv(pname glbase.Enum, params []int32) { - C.gl3_3core_glPointParameteriv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPointParameteri.xml -func (gl *GL) PointParameteri(pname glbase.Enum, param int32) { - C.gl3_3core_glPointParameteri(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPointParameterfv.xml -func (gl *GL) PointParameterfv(pname glbase.Enum, params []float32) { - C.gl3_3core_glPointParameterfv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPointParameterf.xml -func (gl *GL) PointParameterf(pname glbase.Enum, param float32) { - C.gl3_3core_glPointParameterf(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiDrawArrays.xml -func (gl *GL) MultiDrawArrays(mode glbase.Enum, first, count []int, drawcount int32) { - C.gl3_3core_glMultiDrawArrays(gl.funcs, C.GLenum(mode), (*C.GLint)(unsafe.Pointer(&first[0])), (*C.GLsizei)(unsafe.Pointer(&count[0])), C.GLsizei(drawcount)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBlendFuncSeparate.xml -func (gl *GL) BlendFuncSeparate(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha glbase.Enum) { - C.gl3_3core_glBlendFuncSeparate(gl.funcs, C.GLenum(sfactorRGB), C.GLenum(dfactorRGB), C.GLenum(sfactorAlpha), C.GLenum(dfactorAlpha)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetBufferParameteriv.xml -func (gl *GL) GetBufferParameteriv(target, pname glbase.Enum, params []int32) { - C.gl3_3core_glGetBufferParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glUnmapBuffer.xml -func (gl *GL) UnmapBuffer(target glbase.Enum) bool { - glresult := C.gl3_3core_glUnmapBuffer(gl.funcs, C.GLenum(target)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetBufferSubData.xml -func (gl *GL) GetBufferSubData(target glbase.Enum, offset, size int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl3_3core_glGetBufferSubData(gl.funcs, C.GLenum(target), C.GLintptr(offset), C.GLsizeiptr(size), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBufferSubData.xml -func (gl *GL) BufferSubData(target glbase.Enum, offset, size int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl3_3core_glBufferSubData(gl.funcs, C.GLenum(target), C.GLintptr(offset), C.GLsizeiptr(size), data_ptr) -} - -// BufferData creates a new data store for the buffer object currently -// bound to target. Any pre-existing data store is deleted. The new data -// store is created with the specified size in bytes and usage. If data is -// not nil, it must be a slice that is used to initialize the data store. -// In that case the size parameter is ignored and the store size will match -// the slice data size. -// -// In its initial state, the new data store is not mapped, it has a NULL -// mapped pointer, and its mapped access is GL.READ_WRITE. -// -// The target constant must be one of GL.ARRAY_BUFFER, GL.COPY_READ_BUFFER, -// GL.COPY_WRITE_BUFFER, GL.ELEMENT_ARRAY_BUFFER, GL.PIXEL_PACK_BUFFER, -// GL.PIXEL_UNPACK_BUFFER, GL.TEXTURE_BUFFER, GL.TRANSFORM_FEEDBACK_BUFFER, -// or GL.UNIFORM_BUFFER. -// -// The usage parameter is a hint to the GL implementation as to how a buffer -// object's data store will be accessed. This enables the GL implementation -// to make more intelligent decisions that may significantly impact buffer -// object performance. It does not, however, constrain the actual usage of -// the data store. usage can be broken down into two parts: first, the -// frequency of access (modification and usage), and second, the nature of -// that access. -// -// A usage frequency of STREAM and nature of DRAW is specified via the -// constant GL.STREAM_DRAW, for example. -// -// The usage frequency of access may be one of: -// -// STREAM -// The data store contents will be modified once and used at most a few times. -// -// STATIC -// The data store contents will be modified once and used many times. -// -// DYNAMIC -// The data store contents will be modified repeatedly and used many times. -// -// The usage nature of access may be one of: -// -// DRAW -// The data store contents are modified by the application, and used as -// the source for GL drawing and image specification commands. -// -// READ -// The data store contents are modified by reading data from the GL, -// and used to return that data when queried by the application. -// -// COPY -// The data store contents are modified by reading data from the GL, -// and used as the source for GL drawing and image specification -// commands. -// -// Clients must align data elements consistent with the requirements of the -// client platform, with an additional base-level requirement that an offset -// within a buffer to a datum comprising N bytes be a multiple of N. -// -// Error GL.INVALID_ENUM is generated if target is not one of the accepted -// buffer targets. GL.INVALID_ENUM is generated if usage is not -// GL.STREAM_DRAW, GL.STREAM_READ, GL.STREAM_COPY, GL.STATIC_DRAW, -// GL.STATIC_READ, GL.STATIC_COPY, GL.DYNAMIC_DRAW, GL.DYNAMIC_READ, or -// GL.DYNAMIC_COPY. GL.INVALID_VALUE is generated if size is negative. -// GL.INVALID_OPERATION is generated if the reserved buffer object name 0 is -// bound to target. GL.OUT_OF_MEMORY is generated if the GL is unable to -// create a data store with the specified size. -func (gl *GL) BufferData(target glbase.Enum, size int, data interface{}, usage glbase.Enum) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - if data != nil { - size = int(data_v.Type().Size()) * data_v.Len() - } - C.gl3_3core_glBufferData(gl.funcs, C.GLenum(target), C.GLsizeiptr(size), data_ptr, C.GLenum(usage)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsBuffer.xml -func (gl *GL) IsBuffer(buffer glbase.Buffer) bool { - glresult := C.gl3_3core_glIsBuffer(gl.funcs, C.GLuint(buffer)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// GenBuffers returns n buffer object names. There is no guarantee that -// the names form a contiguous set of integers; however, it is guaranteed -// that none of the returned names was in use immediately before the call to -// GenBuffers. -// -// Buffer object names returned by a call to GenBuffers are not returned by -// subsequent calls, unless they are first deleted with DeleteBuffers. -// -// No buffer objects are associated with the returned buffer object names -// until they are first bound by calling BindBuffer. -// -// Error GL.INVALID_VALUE is generated if n is negative. GL.INVALID_OPERATION -// is generated if GenBuffers is executed between the execution of Begin -// and the corresponding execution of End. -// -// GenBuffers is available in GL version 1.5 or greater. -func (gl *GL) GenBuffers(n int) []glbase.Buffer { - if n == 0 { - return nil - } - buffers := make([]glbase.Buffer, n) - C.gl3_3core_glGenBuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&buffers[0]))) - return buffers -} - -// DeleteBuffers deletes the buffer objects whose names are stored in the -// buffers slice. -// -// After a buffer object is deleted, it has no contents, and its name is free -// for reuse (for example by GenBuffers). If a buffer object that is -// currently bound is deleted, the binding reverts to 0 (the absence of any -// buffer object, which reverts to client memory usage). -// -// DeleteBuffers silently ignores 0's and names that do not correspond to -// existing buffer objects. -// -// Error GL.INVALID_VALUE is generated if n is negative. GL.INVALID_OPERATION -// is generated if DeleteBuffers is executed between the execution of Begin -// and the corresponding execution of End. -// -// DeleteBuffers is available in GL version 1.5 or greater. -func (gl *GL) DeleteBuffers(buffers []glbase.Buffer) { - n := len(buffers) - if n == 0 { - return - } - C.gl3_3core_glDeleteBuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&buffers[0]))) -} - -// BindBuffer creates or puts in use a named buffer object. -// Calling BindBuffer with target set to GL.ARRAY_BUFFER, -// GL.ELEMENT_ARRAY_BUFFER, GL.PIXEL_PACK_BUFFER or GL.PIXEL_UNPACK_BUFFER -// and buffer set to the name of the new buffer object binds the buffer -// object name to the target. When a buffer object is bound to a target, the -// previous binding for that target is automatically broken. -// -// Buffer object names are unsigned integers. The value zero is reserved, but -// there is no default buffer object for each buffer object target. Instead, -// buffer set to zero effectively unbinds any buffer object previously bound, -// and restores client memory usage for that buffer object target. Buffer -// object names and the corresponding buffer object contents are local to the -// shared display-list space (see XCreateContext) of the current GL rendering -// context; two rendering contexts share buffer object names only if they -// also share display lists. -// -// GenBuffers may be called to generate a set of new buffer object names. -// -// The state of a buffer object immediately after it is first bound is an -// unmapped zero-sized memory buffer with GL.READ_WRITE access and -// GL.STATIC_DRAW usage. -// -// While a non-zero buffer object name is bound, GL operations on the target -// to which it is bound affect the bound buffer object, and queries of the -// target to which it is bound return state from the bound buffer object. -// While buffer object name zero is bound, as in the initial state, attempts -// to modify or query state on the target to which it is bound generates an -// GL.INVALID_OPERATION error. -// -// When vertex array pointer state is changed, for example by a call to -// NormalPointer, the current buffer object binding (GL.ARRAY_BUFFER_BINDING) -// is copied into the corresponding client state for the vertex array type -// being changed, for example GL.NORMAL_ARRAY_BUFFER_BINDING. While a -// non-zero buffer object is bound to the GL.ARRAY_BUFFER target, the vertex -// array pointer parameter that is traditionally interpreted as a pointer to -// client-side memory is instead interpreted as an offset within the buffer -// object measured in basic machine units. -// -// While a non-zero buffer object is bound to the GL.ELEMENT_ARRAY_BUFFER -// target, the indices parameter of DrawElements, DrawRangeElements, or -// MultiDrawElements that is traditionally interpreted as a pointer to -// client-side memory is instead interpreted as an offset within the buffer -// object measured in basic machine units. -// -// While a non-zero buffer object is bound to the GL.PIXEL_PACK_BUFFER -// target, the following commands are affected: GetCompressedTexImage, -// GetConvolutionFilter, GetHistogram, GetMinmax, GetPixelMap, -// GetPolygonStipple, GetSeparableFilter, GetTexImage, and ReadPixels. The -// pointer parameter that is traditionally interpreted as a pointer to -// client-side memory where the pixels are to be packed is instead -// interpreted as an offset within the buffer object measured in basic -// machine units. -// -// While a non-zero buffer object is bound to the GL.PIXEL_UNPACK_BUFFER -// target, the following commands are affected: Bitmap, ColorSubTable, -// ColorTable, CompressedTexImage1D, CompressedTexImage2D, -// CompressedTexImage3D, CompressedTexSubImage1D, CompressedTexSubImage2D, -// CompressedTexSubImage3D, ConvolutionFilter1D, ConvolutionFilter2D, -// DrawPixels, PixelMap, PolygonStipple, SeparableFilter2D, TexImage1D, -// TexImage2D, TexImage3D, TexSubImage1D, TexSubImage2D, and TexSubImage3D. -// The pointer parameter that is traditionally interpreted as a pointer to -// client-side memory from which the pixels are to be unpacked is instead -// interpreted as an offset within the buffer object measured in basic -// machine units. -// -// A buffer object binding created with BindBuffer remains active until a -// different buffer object name is bound to the same target, or until the -// bound buffer object is deleted with DeleteBuffers. -// -// Once created, a named buffer object may be re-bound to any target as often -// as needed. However, the GL implementation may make choices about how to -// optimize the storage of a buffer object based on its initial binding -// target. -// -// Error GL.INVALID_ENUM is generated if target is not one of the allowable -// values. GL.INVALID_OPERATION is generated if BindBuffer is executed -// between the execution of Begin and the corresponding execution of End. -// -// BindBuffer is available in GL version 1.5 or greater. -func (gl *GL) BindBuffer(target glbase.Enum, buffer glbase.Buffer) { - C.gl3_3core_glBindBuffer(gl.funcs, C.GLenum(target), C.GLuint(buffer)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetQueryObjectuiv.xml -func (gl *GL) GetQueryObjectuiv(id uint32, pname glbase.Enum, params []uint32) { - C.gl3_3core_glGetQueryObjectuiv(gl.funcs, C.GLuint(id), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetQueryObjectiv.xml -func (gl *GL) GetQueryObjectiv(id uint32, pname glbase.Enum, params []int32) { - C.gl3_3core_glGetQueryObjectiv(gl.funcs, C.GLuint(id), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetQueryiv.xml -func (gl *GL) GetQueryiv(target, pname glbase.Enum, params []int32) { - C.gl3_3core_glGetQueryiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEndQuery.xml -func (gl *GL) EndQuery(target glbase.Enum) { - C.gl3_3core_glEndQuery(gl.funcs, C.GLenum(target)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBeginQuery.xml -func (gl *GL) BeginQuery(target glbase.Enum, id uint32) { - C.gl3_3core_glBeginQuery(gl.funcs, C.GLenum(target), C.GLuint(id)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsQuery.xml -func (gl *GL) IsQuery(id uint32) bool { - glresult := C.gl3_3core_glIsQuery(gl.funcs, C.GLuint(id)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDeleteQueries.xml -func (gl *GL) DeleteQueries(n int, ids []uint32) { - C.gl3_3core_glDeleteQueries(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&ids[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGenQueries.xml -func (gl *GL) GenQueries(n int, ids []uint32) { - C.gl3_3core_glGenQueries(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&ids[0]))) -} - -// VertexAttribPointer specifies the location and data format of the array -// of generic vertex attributes at index to use when rendering. size -// specifies the number of components per attribute and must be 1, 2, 3, or -// 4. type specifies the data type of each component, and stride specifies -// the byte stride from one attribute to the next, allowing vertices and -// attributes to be packed into a single array or stored in separate arrays. -// normalized indicates whether the values stored in an integer format are -// to be mapped to the range [-1,1] (for signed values) or [0,1] -// (for unsigned values) when they are accessed and converted to floating -// point; otherwise, values will be converted to floats directly without -// normalization. offset is a byte offset into the buffer object's data -// store, which must be bound to the GL.ARRAY_BUFFER target with BindBuffer. -// -// The buffer object binding (GL.ARRAY_BUFFER_BINDING) is saved as -// generic vertex attribute array client-side state -// (GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING) for the provided index. -// -// To enable and disable a generic vertex attribute array, call -// EnableVertexAttribArray and DisableVertexAttribArray with index. If -// enabled, the generic vertex attribute array is used when DrawArrays or -// DrawElements is called. Each generic vertex attribute array is initially -// disabled. -// -// VertexAttribPointer is typically implemented on the client side. -// -// Error GL.INVALID_ENUM is generated if type is not an accepted value. -// GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. GL.INVALID_VALUE is generated if size is not 1, 2, -// 3, or 4. GL.INVALID_VALUE is generated if stride is negative. -func (gl *GL) VertexAttribPointer(index glbase.Attrib, size int, gltype glbase.Enum, normalized bool, stride int, offset uintptr) { - offset_ptr := unsafe.Pointer(offset) - C.gl3_3core_glVertexAttribPointer(gl.funcs, C.GLuint(index), C.GLint(size), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), C.GLsizei(stride), offset_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glValidateProgram.xml -func (gl *GL) ValidateProgram(program glbase.Program) { - C.gl3_3core_glValidateProgram(gl.funcs, C.GLuint(program)) -} - -// UniformMatrix4fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix4fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix4fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(4*4) != 0 { - panic("invalid value length for UniformMatrix4fv") - } - count := len(value) / (4 * 4) - C.gl3_3core_glUniformMatrix4fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix3fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix3fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix3fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(3*3) != 0 { - panic("invalid value length for UniformMatrix3fv") - } - count := len(value) / (3 * 3) - C.gl3_3core_glUniformMatrix3fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix2fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix2fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix2fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(2*2) != 0 { - panic("invalid value length for UniformMatrix2fv") - } - count := len(value) / (2 * 2) - C.gl3_3core_glUniformMatrix2fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform4iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform4iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - if len(value)%4 != 0 { - panic("invalid value length for Uniform4iv") - } - count := len(value) / 4 - C.gl3_3core_glUniform4iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// Uniform3iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform3iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - if len(value)%3 != 0 { - panic("invalid value length for Uniform3iv") - } - count := len(value) / 3 - C.gl3_3core_glUniform3iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// Uniform2iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform2iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - if len(value)%2 != 0 { - panic("invalid value length for Uniform2iv") - } - count := len(value) / 2 - C.gl3_3core_glUniform2iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// Uniform1iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform1iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - count := len(value) - C.gl3_3core_glUniform1iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// Uniform4fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform4fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - if len(value)%4 != 0 { - panic("invalid value length for Uniform4fv") - } - count := len(value) / 4 - C.gl3_3core_glUniform4fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform3fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform3fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - if len(value)%3 != 0 { - panic("invalid value length for Uniform3fv") - } - count := len(value) / 3 - C.gl3_3core_glUniform3fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform2fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform2fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - if len(value)%2 != 0 { - panic("invalid value length for Uniform2fv") - } - count := len(value) / 2 - C.gl3_3core_glUniform2fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform1fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform1fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - count := len(value) - C.gl3_3core_glUniform1fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform4i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform4i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4i(location glbase.Uniform, v0, v1, v2, v3 int32) { - C.gl3_3core_glUniform4i(gl.funcs, C.GLint(location), C.GLint(v0), C.GLint(v1), C.GLint(v2), C.GLint(v3)) -} - -// Uniform3i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform3i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3i(location glbase.Uniform, v0, v1, v2 int32) { - C.gl3_3core_glUniform3i(gl.funcs, C.GLint(location), C.GLint(v0), C.GLint(v1), C.GLint(v2)) -} - -// Uniform2i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform2i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2i(location glbase.Uniform, v0, v1 int32) { - C.gl3_3core_glUniform2i(gl.funcs, C.GLint(location), C.GLint(v0), C.GLint(v1)) -} - -// Uniform1i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform1i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1i(location glbase.Uniform, v0 int32) { - C.gl3_3core_glUniform1i(gl.funcs, C.GLint(location), C.GLint(v0)) -} - -// Uniform4f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform4f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4f(location glbase.Uniform, v0, v1, v2, v3 float32) { - C.gl3_3core_glUniform4f(gl.funcs, C.GLint(location), C.GLfloat(v0), C.GLfloat(v1), C.GLfloat(v2), C.GLfloat(v3)) -} - -// Uniform3f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform3f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3f(location glbase.Uniform, v0, v1, v2 float32) { - C.gl3_3core_glUniform3f(gl.funcs, C.GLint(location), C.GLfloat(v0), C.GLfloat(v1), C.GLfloat(v2)) -} - -// Uniform2f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform2f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2f(location glbase.Uniform, v0, v1 float32) { - C.gl3_3core_glUniform2f(gl.funcs, C.GLint(location), C.GLfloat(v0), C.GLfloat(v1)) -} - -// Uniform1f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform1f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1f(location glbase.Uniform, v0 float32) { - C.gl3_3core_glUniform1f(gl.funcs, C.GLint(location), C.GLfloat(v0)) -} - -// UseProgram installs the program object specified by program as part of -// current rendering state. One or more executables are created in a program -// object by successfully attaching shader objects to it with AttachShader, -// successfully compiling the shader objects with CompileShader, and -// successfully linking the program object with LinkProgram. -// -// A program object will contain an executable that will run on the vertex -// processor if it contains one or more shader objects of type -// GL.VERTEX_SHADER that have been successfully compiled and linked. -// Similarly, a program object will contain an executable that will run on -// the fragment processor if it contains one or more shader objects of type -// GL.FRAGMENT_SHADER that have been successfully compiled and linked. -// -// Successfully installing an executable on a programmable processor will -// cause the corresponding fixed functionality of OpenGL to be disabled. -// Specifically, if an executable is installed on the vertex processor, the -// OpenGL fixed functionality will be disabled as follows. -// -// - The modelview matrix is not applied to vertex coordinates. -// -// - The projection matrix is not applied to vertex coordinates. -// -// - The texture matrices are not applied to texture coordinates. -// -// - Normals are not transformed to eye coordinates. -// -// - Normals are not rescaled or normalized. -// -// - Normalization of GL.AUTO_NORMAL evaluated normals is not performed. -// -// - Texture coordinates are not generated automatically. -// -// - Per-vertex lighting is not performed. -// -// - Color material computations are not performed. -// -// - Color index lighting is not performed. -// -// - This list also applies when setting the current raster position. -// -// The executable that is installed on the vertex processor is expected to -// implement any or all of the desired functionality from the preceding list. -// Similarly, if an executable is installed on the fragment processor, the -// OpenGL fixed functionality will be disabled as follows. -// -// - Texture environment and texture functions are not applied. -// -// - Texture application is not applied. -// -// - Color sum is not applied. -// -// - Fog is not applied. -// -// Again, the fragment shader that is installed is expected to implement any -// or all of the desired functionality from the preceding list. -// -// While a program object is in use, applications are free to modify attached -// shader objects, compile attached shader objects, attach additional shader -// objects, and detach or delete shader objects. None of these operations -// will affect the executables that are part of the current state. However, -// relinking the program object that is currently in use will install the -// program object as part of the current rendering state if the link -// operation was successful (see LinkProgram). If the program object -// currently in use is relinked unsuccessfully, its link status will be set -// to GL.FALSE, but the executables and associated state will remain part of -// the current state until a subsequent call to UseProgram removes it from -// use. After it is removed from use, it cannot be made part of current state -// until it has been successfully relinked. -// -// If program contains shader objects of type GL.VERTEX_SHADER but it does -// not contain shader objects of type GL.FRAGMENT_SHADER, an executable will -// be installed on the vertex processor, but fixed functionality will be used -// for fragment processing. Similarly, if program contains shader objects of -// type GL.FRAGMENT_SHADER but it does not contain shader objects of type -// GL.VERTEX_SHADER, an executable will be installed on the fragment -// processor, but fixed functionality will be used for vertex processing. If -// program is 0, the programmable processors will be disabled, and fixed -// functionality will be used for both vertex and fragment processing. -// -// While a program object is in use, the state that controls the disabled -// fixed functionality may also be updated using the normal OpenGL calls. -// -// Like display lists and texture objects, the name space for program objects -// may be shared across a set of contexts, as long as the server sides of the -// contexts share the same address space. If the name space is shared across -// contexts, any attached objects and the data associated with those attached -// objects are shared as well. -// -// Applications are responsible for providing the synchronization across API -// calls when objects are accessed from different execution threads. -// -// Error GL.INVALID_VALUE is generated if program is neither 0 nor a value -// generated by OpenGL. GL.INVALID_OPERATION is generated if program is not -// a program object. GL.INVALID_OPERATION is generated if program could not -// be made part of current state. GL.INVALID_OPERATION is generated if -// UseProgram is executed between the execution of Begin and the -// corresponding execution of End. -// -// UseProgram is available in GL version 2.0 or greater. -func (gl *GL) UseProgram(program glbase.Program) { - C.gl3_3core_glUseProgram(gl.funcs, C.GLuint(program)) -} - -// ShaderSource sets the source code in shader to the provided source code. Any source -// code previously stored in the shader object is completely replaced. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader is not a shader -// object. GL.INVALID_VALUE is generated if count is less than 0. -// GL.INVALID_OPERATION is generated if ShaderSource is executed between the -// execution of Begin and the corresponding execution of End. -// -// ShaderSource is available in GL version 2.0 or greater. -func (gl *GL) ShaderSource(shader glbase.Shader, source ...string) { - count := len(source) - length := make([]int32, count) - source_c := make([]unsafe.Pointer, count) - for i, src := range source { - length[i] = int32(len(src)) - if len(src) > 0 { - source_c[i] = *(*unsafe.Pointer)(unsafe.Pointer(&src)) - } else { - source_c[i] = unsafe.Pointer(uintptr(0)) - } - } - C.gl3_3core_glShaderSource(gl.funcs, C.GLuint(shader), C.GLsizei(count), (**C.GLchar)(unsafe.Pointer(&source_c[0])), (*C.GLint)(unsafe.Pointer(&length[0]))) -} - -// LinkProgram links the program object specified by program. If any shader -// objects of type GL.VERTEX_SHADER are attached to program, they will be -// used to create an executable that will run on the programmable vertex -// processor. If any shader objects of type GL.FRAGMENT_SHADER are attached -// to program, they will be used to create an executable that will run on the -// programmable fragment processor. -// -// The status of the link operation will be stored as part of the program -// object's state. This value will be set to GL.TRUE if the program object -// was linked without errors and is ready for use, and GL.FALSE otherwise. It -// can be queried by calling GetProgramiv with arguments program and -// GL.LINK_STATUS. -// -// As a result of a successful link operation, all active user-defined -// uniform variables belonging to program will be initialized to 0, and each -// of the program object's active uniform variables will be assigned a -// location that can be queried by calling GetUniformLocation. Also, any -// active user-defined attribute variables that have not been bound to a -// generic vertex attribute index will be bound to one at this time. -// -// Linking of a program object can fail for a number of reasons as specified -// in the OpenGL Shading Language Specification. The following lists some of -// the conditions that will cause a link error. -// -// - The number of active attribute variables supported by the -// implementation has been exceeded. -// -// - The storage limit for uniform variables has been exceeded. -// -// - The number of active uniform variables supported by the implementation -// has been exceeded. -// -// - The main function is missing for the vertex shader or the fragment -// shader. -// -// - A varying variable actually used in the fragment shader is not -// declared in the same way (or is not declared at all) in the vertex -// shader. -// -// - A reference to a function or variable name is unresolved. -// -// - A shared global is declared with two different types or two different -// initial values. -// -// - One or more of the attached shader objects has not been successfully -// compiled. -// -// - Binding a generic attribute matrix caused some rows of the matrix to -// fall outside the allowed maximum of GL.MAX_VERTEX_ATTRIBS. -// -// - Not enough contiguous vertex attribute slots could be found to bind -// attribute matrices. -// -// When a program object has been successfully linked, the program object can -// be made part of current state by calling UseProgram. Whether or not the -// link operation was successful, the program object's information log will -// be overwritten. The information log can be retrieved by calling -// GetProgramInfoLog. -// -// LinkProgram will also install the generated executables as part of the -// current rendering state if the link operation was successful and the -// specified program object is already currently in use as a result of a -// previous call to UseProgram. If the program object currently in use is -// relinked unsuccessfully, its link status will be set to GL.FALSE , but the -// executables and associated state will remain part of the current state -// until a subsequent call to UseProgram removes it from use. After it is -// removed from use, it cannot be made part of current state until it has -// been successfully relinked. -// -// If program contains shader objects of type GL.VERTEX_SHADER but does not -// contain shader objects of type GL.FRAGMENT_SHADER, the vertex shader will -// be linked against the implicit interface for fixed functionality fragment -// processing. Similarly, if program contains shader objects of type -// GL.FRAGMENT_SHADER but it does not contain shader objects of type -// GL.VERTEX_SHADER, the fragment shader will be linked against the implicit -// interface for fixed functionality vertex processing. -// -// The program object's information log is updated and the program is -// generated at the time of the link operation. After the link operation, -// applications are free to modify attached shader objects, compile attached -// shader objects, detach shader objects, delete shader objects, and attach -// additional shader objects. None of these operations affects the -// information log or the program that is part of the program object. -// -// If the link operation is unsuccessful, any information about a previous -// link operation on program is lost (a failed link does not restore the -// old state of program). Certain information can still be retrieved -// from program even after an unsuccessful link operation. See for instance -// GetActiveAttrib and GetActiveUniform. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program -// object. GL.INVALID_OPERATION is generated if LinkProgram is executed -// between the execution of Begin and the corresponding execution of End. -// -// LinkProgram is available in GL version 2.0 or greater. -func (gl *GL) LinkProgram(program glbase.Program) { - C.gl3_3core_glLinkProgram(gl.funcs, C.GLuint(program)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsShader.xml -func (gl *GL) IsShader(shader glbase.Shader) bool { - glresult := C.gl3_3core_glIsShader(gl.funcs, C.GLuint(shader)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsProgram.xml -func (gl *GL) IsProgram(program glbase.Program) bool { - glresult := C.gl3_3core_glIsProgram(gl.funcs, C.GLuint(program)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// GetVertexAttribiv returns in params the value of a generic vertex attribute -// parameter. The generic vertex attribute to be queried is specified by -// index, and the parameter to be queried is specified by pname. -// -// The accepted parameter names are as follows: -// -// GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING -// params returns a single value, the name of the buffer object -// currently bound to the binding point corresponding to generic vertex -// attribute array index. If no buffer object is bound, 0 is returned. -// The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_ENABLED -// params returns a single value that is non-zero (true) if the vertex -// attribute array for index is enabled and 0 (false) if it is -// disabled. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_SIZE -// params returns a single value, the size of the vertex attribute -// array for index. The size is the number of values for each element -// of the vertex attribute array, and it will be 1, 2, 3, or 4. The -// initial value is 4. -// -// GL.VERTEX_ATTRIB_ARRAY_STRIDE -// params returns a single value, the array stride for (number of bytes -// between successive elements in) the vertex attribute array for -// index. A value of 0 indicates that the array elements are stored -// sequentially in memory. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_TYPE -// params returns a single value, a symbolic constant indicating the -// array type for the vertex attribute array for index. Possible values -// are GL.BYTE, GL.UNSIGNED_BYTE, GL.SHORT, GL.UNSIGNED_SHORT, GL.INT, -// GL.UNSIGNED_INT, GL.FLOAT, and GL.DOUBLE. The initial value is -// GL.FLOAT. -// -// GL.VERTEX_ATTRIB_ARRAY_NORMALIZED -// params returns a single value that is non-zero (true) if fixed-point -// data types for the vertex attribute array indicated by index are -// normalized when they are converted to floating point, and 0 (false) -// otherwise. The initial value is 0. -// -// GL.CURRENT_VERTEX_ATTRIB -// params returns four values that represent the current value for the -// generic vertex attribute specified by index. Generic vertex -// attribute 0 is unique in that it has no current state, so an error -// will be generated if index is 0. The initial value for all other -// generic vertex attributes is (0,0,0,1). -// -// All of the parameters except GL.CURRENT_VERTEX_ATTRIB represent -// client-side state. -// -// Error GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. GL.INVALID_ENUM is generated if pname is not an -// accepted value. GL.INVALID_OPERATION is generated if index is 0 and pname -// is GL.CURRENT_VERTEX_ATTRIB. -// -// GetVertexAttribiv is available in GL version 2.0 or greater. -func (gl *GL) GetVertexAttribiv(index glbase.Attrib, pname glbase.Enum, params []int32) { - var params_c [4]int32 - C.gl3_3core_glGetVertexAttribiv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetVertexAttribfv returns in params the value of a generic vertex attribute -// parameter. The generic vertex attribute to be queried is specified by -// index, and the parameter to be queried is specified by pname. -// -// The accepted parameter names are as follows: -// -// GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING -// params returns a single value, the name of the buffer object -// currently bound to the binding point corresponding to generic vertex -// attribute array index. If no buffer object is bound, 0 is returned. -// The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_ENABLED -// params returns a single value that is non-zero (true) if the vertex -// attribute array for index is enabled and 0 (false) if it is -// disabled. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_SIZE -// params returns a single value, the size of the vertex attribute -// array for index. The size is the number of values for each element -// of the vertex attribute array, and it will be 1, 2, 3, or 4. The -// initial value is 4. -// -// GL.VERTEX_ATTRIB_ARRAY_STRIDE -// params returns a single value, the array stride for (number of bytes -// between successive elements in) the vertex attribute array for -// index. A value of 0 indicates that the array elements are stored -// sequentially in memory. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_TYPE -// params returns a single value, a symbolic constant indicating the -// array type for the vertex attribute array for index. Possible values -// are GL.BYTE, GL.UNSIGNED_BYTE, GL.SHORT, GL.UNSIGNED_SHORT, GL.INT, -// GL.UNSIGNED_INT, GL.FLOAT, and GL.DOUBLE. The initial value is -// GL.FLOAT. -// -// GL.VERTEX_ATTRIB_ARRAY_NORMALIZED -// params returns a single value that is non-zero (true) if fixed-point -// data types for the vertex attribute array indicated by index are -// normalized when they are converted to floating point, and 0 (false) -// otherwise. The initial value is 0. -// -// GL.CURRENT_VERTEX_ATTRIB -// params returns four values that represent the current value for the -// generic vertex attribute specified by index. Generic vertex -// attribute 0 is unique in that it has no current state, so an error -// will be generated if index is 0. The initial value for all other -// generic vertex attributes is (0,0,0,1). -// -// All of the parameters except GL.CURRENT_VERTEX_ATTRIB represent -// client-side state. -// -// Error GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. GL.INVALID_ENUM is generated if pname is not an -// accepted value. GL.INVALID_OPERATION is generated if index is 0 and pname -// is GL.CURRENT_VERTEX_ATTRIB. -// -// GetVertexAttribfv is available in GL version 2.0 or greater. -func (gl *GL) GetVertexAttribfv(index glbase.Attrib, pname glbase.Enum, params []float32) { - var params_c [4]float32 - C.gl3_3core_glGetVertexAttribfv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetVertexAttribdv returns in params the value of a generic vertex attribute -// parameter. The generic vertex attribute to be queried is specified by -// index, and the parameter to be queried is specified by pname. -// -// The accepted parameter names are as follows: -// -// GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING -// params returns a single value, the name of the buffer object -// currently bound to the binding point corresponding to generic vertex -// attribute array index. If no buffer object is bound, 0 is returned. -// The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_ENABLED -// params returns a single value that is non-zero (true) if the vertex -// attribute array for index is enabled and 0 (false) if it is -// disabled. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_SIZE -// params returns a single value, the size of the vertex attribute -// array for index. The size is the number of values for each element -// of the vertex attribute array, and it will be 1, 2, 3, or 4. The -// initial value is 4. -// -// GL.VERTEX_ATTRIB_ARRAY_STRIDE -// params returns a single value, the array stride for (number of bytes -// between successive elements in) the vertex attribute array for -// index. A value of 0 indicates that the array elements are stored -// sequentially in memory. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_TYPE -// params returns a single value, a symbolic constant indicating the -// array type for the vertex attribute array for index. Possible values -// are GL.BYTE, GL.UNSIGNED_BYTE, GL.SHORT, GL.UNSIGNED_SHORT, GL.INT, -// GL.UNSIGNED_INT, GL.FLOAT, and GL.DOUBLE. The initial value is -// GL.FLOAT. -// -// GL.VERTEX_ATTRIB_ARRAY_NORMALIZED -// params returns a single value that is non-zero (true) if fixed-point -// data types for the vertex attribute array indicated by index are -// normalized when they are converted to floating point, and 0 (false) -// otherwise. The initial value is 0. -// -// GL.CURRENT_VERTEX_ATTRIB -// params returns four values that represent the current value for the -// generic vertex attribute specified by index. Generic vertex -// attribute 0 is unique in that it has no current state, so an error -// will be generated if index is 0. The initial value for all other -// generic vertex attributes is (0,0,0,1). -// -// All of the parameters except GL.CURRENT_VERTEX_ATTRIB represent -// client-side state. -// -// Error GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. GL.INVALID_ENUM is generated if pname is not an -// accepted value. GL.INVALID_OPERATION is generated if index is 0 and pname -// is GL.CURRENT_VERTEX_ATTRIB. -// -// GetVertexAttribdv is available in GL version 2.0 or greater. -func (gl *GL) GetVertexAttribdv(index glbase.Attrib, pname glbase.Enum, params []float64) { - var params_c [4]float64 - C.gl3_3core_glGetVertexAttribdv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetUniformiv returns in params the value of the specified uniform -// variable. The type of the uniform variable specified by location -// determines the number of values returned. If the uniform variable is -// defined in the shader as a boolean, int, or float, a single value will be -// returned. If it is defined as a vec2, ivec2, or bvec2, two values will be -// returned. If it is defined as a vec3, ivec3, or bvec3, three values will -// be returned, and so on. To query values stored in uniform variables -// declared as arrays, call GetUniformiv for each element of the array. To -// query values stored in uniform variables declared as structures, call -// GetUniformiv for each field in the structure. The values for uniform -// variables declared as a matrix will be returned in column major order. -// -// The locations assigned to uniform variables are not known until the -// program object is linked. After linking has occurred, the command -// GetUniformLocation can be used to obtain the location of a uniform -// variable. This location value can then be passed to GetUniformiv in order -// to query the current value of the uniform variable. After a program object -// has been linked successfully, the index values for uniform variables -// remain fixed until the next link command occurs. The uniform variable -// values can only be queried after a link if the link was successful. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program -// object. GL.INVALID_OPERATION is generated if program has not been -// successfully linked. GL.INVALID_OPERATION is generated if location does -// not correspond to a valid uniform variable location for the specified -// program object. GL.INVALID_OPERATION is generated if GetUniformiv is -// executed between the execution of Begin and the corresponding execution of -// End. -// -// GetUniformiv is available in GL version 2.0 or greater. -func (gl *GL) GetUniformiv(program glbase.Program, location glbase.Uniform, params []int32) { - var params_c [4]int32 - C.gl3_3core_glGetUniformiv(gl.funcs, C.GLuint(program), C.GLint(location), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetUniformfv returns in params the value of the specified uniform -// variable. The type of the uniform variable specified by location -// determines the number of values returned. If the uniform variable is -// defined in the shader as a boolean, int, or float, a single value will be -// returned. If it is defined as a vec2, ivec2, or bvec2, two values will be -// returned. If it is defined as a vec3, ivec3, or bvec3, three values will -// be returned, and so on. To query values stored in uniform variables -// declared as arrays, call GetUniformfv for each element of the array. To -// query values stored in uniform variables declared as structures, call -// GetUniformfv for each field in the structure. The values for uniform -// variables declared as a matrix will be returned in column major order. -// -// The locations assigned to uniform variables are not known until the -// program object is linked. After linking has occurred, the command -// GetUniformLocation can be used to obtain the location of a uniform -// variable. This location value can then be passed to GetUniformfv in order -// to query the current value of the uniform variable. After a program object -// has been linked successfully, the index values for uniform variables -// remain fixed until the next link command occurs. The uniform variable -// values can only be queried after a link if the link was successful. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program -// object. GL.INVALID_OPERATION is generated if program has not been -// successfully linked. GL.INVALID_OPERATION is generated if location does -// not correspond to a valid uniform variable location for the specified -// program object. GL.INVALID_OPERATION is generated if GetUniformfv is -// executed between the execution of Begin and the corresponding execution of -// End. -// -// GetUniformfv is available in GL version 2.0 or greater. -func (gl *GL) GetUniformfv(program glbase.Program, location glbase.Uniform, params []float32) { - var params_c [4]float32 - C.gl3_3core_glGetUniformfv(gl.funcs, C.GLuint(program), C.GLint(location), (*C.GLfloat)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetUniformLocation returns an integer that represents the location of a -// specific uniform variable within a program object. name must be an active -// uniform variable name in program that is not a structure, an array of -// structures, or a subcomponent of a vector or a matrix. This function -// returns -1 if name does not correspond to an active uniform variable in -// program or if name starts with the reserved prefix "gl_". -// -// Uniform variables that are structures or arrays of structures may be -// queried by calling GetUniformLocation for each field within the -// structure. The array element operator "[]" and the structure field -// operator "." may be used in name in order to select elements within an -// array or fields within a structure. The result of using these operators is -// not allowed to be another structure, an array of structures, or a -// subcomponent of a vector or a matrix. Except if the last part of name -// indicates a uniform variable array, the location of the first element of -// an array can be retrieved by using the name of the array, or by using the -// name appended by "[0]". -// -// The actual locations assigned to uniform variables are not known until the -// program object is linked successfully. After linking has occurred, the -// command GetUniformLocation can be used to obtain the location of a -// uniform variable. This location value can then be passed to Uniform to -// set the value of the uniform variable or to GetUniform in order to query -// the current value of the uniform variable. After a program object has been -// linked successfully, the index values for uniform variables remain fixed -// until the next link command occurs. Uniform variable locations and values -// can only be queried after a link if the link was successful. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program object. -// GL.INVALID_OPERATION is generated if program has not been successfully -// linked. GL.INVALID_OPERATION is generated if GetUniformLocation is executed -// between the execution of Begin and the corresponding execution of End. -// -// GetUniformLocation is available in GL version 2.0 or greater. -func (gl *GL) GetUniformLocation(program glbase.Program, name string) glbase.Uniform { - name_cstr := C.CString(name) - glresult := C.gl3_3core_glGetUniformLocation(gl.funcs, C.GLuint(program), (*C.GLchar)(name_cstr)) - C.free(unsafe.Pointer(name_cstr)) - return glbase.Uniform(glresult) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetShaderSource.xml -func (gl *GL) GetShaderSource(shader glbase.Shader, bufSize int32, length []int32, source []byte) { - C.gl3_3core_glGetShaderSource(gl.funcs, C.GLuint(shader), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLchar)(unsafe.Pointer(&source[0]))) -} - -// GetShaderInfoLog returns the information log for the specified shader -// object. The information log for a shader object is modified when the -// shader is compiled. -// -// The information log for a shader object is a string that may contain -// diagnostic messages, warning messages, and other information about the -// last compile operation. When a shader object is created, its information -// log will be a string of length 0, and the size of the current log can be -// obtained by calling GetShaderiv with the value GL.INFO_LOG_LENGTH. -// -// The information log for a shader object is the OpenGL implementer's -// primary mechanism for conveying information about the compilation process. -// Therefore, the information log can be helpful to application developers -// during the development process, even when compilation is successful. -// Application developers should not expect different OpenGL implementations -// to produce identical information logs. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader is not a shader -// object. GL.INVALID_VALUE is generated if maxLength is less than 0. -// GL.INVALID_OPERATION is generated if GetShaderInfoLog is executed -// between the execution of Begin and the corresponding execution of End. -// -// GetShaderInfoLog is available in GL version 2.0 or greater. -func (gl *GL) GetShaderInfoLog(shader glbase.Shader) []byte { - var params [1]int32 - var length int32 - gl.GetShaderiv(shader, INFO_LOG_LENGTH, params[:]) - bufSize := params[0] - infoLog := make([]byte, int(bufSize)) - C.gl3_3core_glGetShaderInfoLog(gl.funcs, C.GLuint(shader), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length)), (*C.GLchar)(unsafe.Pointer(&infoLog[0]))) - return infoLog -} - -// GetShaderiv GetShader returns in params the value of a parameter for a specific -// shader object. The following parameters are defined: -// -// GL.SHADER_TYPE -// params returns GL.VERTEX_SHADER if shader is a vertex shader object, -// and GL.FRAGMENT_SHADER if shader is a fragment shader object. -// -// GL.DELETE_STATUS -// params returns GL.TRUE if shader is currently flagged for deletion, -// and GL.FALSE otherwise. -// -// GL.COMPILE_STATUS -// params returns GL.TRUE if the last compile operation on shader was -// successful, and GL.FALSE otherwise. -// -// GL.INFO_LOG_LENGTH -// params returns the number of characters in the information log for -// shader including the null termination character (the size of the -// character buffer required to store the information log). If shader has -// no information log, a value of 0 is returned. -// -// GL.SHADER_SOURCE_LENGTH -// params returns the length of the concatenation of the source strings -// that make up the shader source for the shader, including the null -// termination character. (the size of the character buffer -// required to store the shader source). If no source code exists, 0 is -// returned. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader does not refer to a -// shader object. GL.INVALID_ENUM is generated if pname is not an accepted -// value. GL.INVALID_OPERATION is generated if GetShader is executed -// between the execution of Begin and the corresponding execution of End. -// -// GetShaderiv is available in GL version 2.0 or greater. -func (gl *GL) GetShaderiv(shader glbase.Shader, pname glbase.Enum, params []int32) { - var params_c [4]int32 - C.gl3_3core_glGetShaderiv(gl.funcs, C.GLuint(shader), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetProgramInfoLog returns the information log for the specified program -// object. The information log for a program object is modified when the -// program object is linked or validated. -// -// The information log for a program object is either an empty string, or a -// string containing information about the last link operation, or a string -// containing information about the last validation operation. It may contain -// diagnostic messages, warning messages, and other information. When a -// program object is created, its information log will be a string of length -// 0, and the size of the current log can be obtained by calling GetProgramiv -// with the value GL.INFO_LOG_LENGTH. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated -// by OpenGL. GL.INVALID_OPERATION is generated if program is not a -// program object. -func (gl *GL) GetProgramInfoLog(program glbase.Program) []byte { - var params [1]int32 - var length int32 - gl.GetProgramiv(program, INFO_LOG_LENGTH, params[:]) - bufSize := params[0] - infoLog := make([]byte, int(bufSize)) - C.gl3_3core_glGetProgramInfoLog(gl.funcs, C.GLuint(program), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length)), (*C.GLchar)(unsafe.Pointer(&infoLog[0]))) - return infoLog -} - -// GetProgramiv returns in params the value of a parameter for a specific -// program object. The following parameters are defined: -// -// GL.DELETE_STATUS -// params returns GL.TRUE if program is currently flagged for deletion, -// and GL.FALSE otherwise. -// -// GL.LINK_STATUS -// params returns GL.TRUE if the last link operation on program was -// successful, and GL.FALSE otherwise. -// -// GL.VALIDATE_STATUS -// params returns GL.TRUE or if the last validation operation on -// program was successful, and GL.FALSE otherwise. -// -// GL.INFO_LOG_LENGTH -// params returns the number of characters in the information log for -// program including the null termination character (the size of -// the character buffer required to store the information log). If -// program has no information log, a value of 0 is returned. -// -// GL.ATTACHED_SHADERS -// params returns the number of shader objects attached to program. -// -// GL.ACTIVE_ATTRIBUTES -// params returns the number of active attribute variables for program. -// -// GL.ACTIVE_ATTRIBUTE_MAX_LENGTH -// params returns the length of the longest active attribute name for -// program, including the null termination character (the size of -// the character buffer required to store the longest attribute name). -// If no active attributes exist, 0 is returned. -// -// GL.ACTIVE_UNIFORMS -// params returns the number of active uniform variables for program. -// -// GL.ACTIVE_UNIFORM_MAX_LENGTH -// params returns the length of the longest active uniform variable -// name for program, including the null termination character (i.e., -// the size of the character buffer required to store the longest -// uniform variable name). If no active uniform variables exist, 0 is -// returned. -// -// GL.TRANSFORM_FEEDBACK_BUFFER_MODE -// params returns a symbolic constant indicating the buffer mode used -// when transform feedback is active. This may be GL.SEPARATE_ATTRIBS -// or GL.INTERLEAVED_ATTRIBS. -// -// GL.TRANSFORM_FEEDBACK_VARYINGS -// params returns the number of varying variables to capture in transform -// feedback mode for the program. -// -// GL.TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH -// params returns the length of the longest variable name to be used for -// transform feedback, including the null-terminator. -// -// GL.GEOMETRY_VERTICES_OUT -// params returns the maximum number of vertices that the geometry shader in -// program will output. -// -// GL.GEOMETRY_INPUT_TYPE -// params returns a symbolic constant indicating the primitive type accepted -// as input to the geometry shader contained in program. -// -// GL.GEOMETRY_OUTPUT_TYPE -// params returns a symbolic constant indicating the primitive type that will -// be output by the geometry shader contained in program. -// -// GL.ACTIVE_UNIFORM_BLOCKS and GL.ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH are -// available only if the GL version 3.1 or greater. -// -// GL.GEOMETRY_VERTICES_OUT, GL.GEOMETRY_INPUT_TYPE and -// GL.GEOMETRY_OUTPUT_TYPE are accepted only if the GL version is 3.2 or -// greater. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program does not refer to a -// program object. GL.INVALID_OPERATION is generated if pname is -// GL.GEOMETRY_VERTICES_OUT, GL.GEOMETRY_INPUT_TYPE, or -// GL.GEOMETRY_OUTPUT_TYPE, and program does not contain a geometry shader. -// GL.INVALID_ENUM is generated if pname is not an accepted value. -func (gl *GL) GetProgramiv(program glbase.Program, pname glbase.Enum, params []int32) { - var params_c [4]int32 - C.gl3_3core_glGetProgramiv(gl.funcs, C.GLuint(program), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetAttribLocation queries the previously linked program object specified -// by program for the attribute variable specified by name and returns the -// index of the generic vertex attribute that is bound to that attribute -// variable. If name is a matrix attribute variable, the index of the first -// column of the matrix is returned. If the named attribute variable is not -// an active attribute in the specified program object or if name starts with -// the reserved prefix "gl_", a value of -1 is returned. -// -// The association between an attribute variable name and a generic attribute -// index can be specified at any time by calling BindAttribLocation. -// Attribute bindings do not go into effect until LinkProgram is called. -// After a program object has been linked successfully, the index values for -// attribute variables remain fixed until the next link command occurs. The -// attribute values can only be queried after a link if the link was -// successful. GetAttribLocation returns the binding that actually went -// into effect the last time LinkProgram was called for the specified -// program object. Attribute bindings that have been specified since the last -// link operation are not returned by GetAttribLocation. -// -// Error GL_INVALID_OPERATION is generated if program is not a value -// generated by OpenGL. GL_INVALID_OPERATION is generated if program is not -// a program object. GL_INVALID_OPERATION is generated if program has not -// been successfully linked. GL_INVALID_OPERATION is generated if -// GetAttribLocation is executed between the execution of Begin and the -// corresponding execution of End. -// -// GetAttribLocation is available in GL version 2.0 or greater. -func (gl *GL) GetAttribLocation(program glbase.Program, name string) glbase.Attrib { - name_cstr := C.CString(name) - glresult := C.gl3_3core_glGetAttribLocation(gl.funcs, C.GLuint(program), (*C.GLchar)(name_cstr)) - C.free(unsafe.Pointer(name_cstr)) - return glbase.Attrib(glresult) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetAttachedShaders.xml -func (gl *GL) GetAttachedShaders(program glbase.Program, maxCount int32, count []int, obj []uint32) { - C.gl3_3core_glGetAttachedShaders(gl.funcs, C.GLuint(program), C.GLsizei(maxCount), (*C.GLsizei)(unsafe.Pointer(&count[0])), (*C.GLuint)(unsafe.Pointer(&obj[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetActiveUniform.xml -func (gl *GL) GetActiveUniform(program glbase.Program, index uint32, bufSize int32, length []int32, size []int, gltype []glbase.Enum, name []byte) { - C.gl3_3core_glGetActiveUniform(gl.funcs, C.GLuint(program), C.GLuint(index), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLint)(unsafe.Pointer(&size[0])), (*C.GLenum)(unsafe.Pointer(&gltype[0])), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetActiveAttrib.xml -func (gl *GL) GetActiveAttrib(program glbase.Program, index glbase.Attrib, bufSize int32, length []int32, size []int, gltype []glbase.Enum, name []byte) { - C.gl3_3core_glGetActiveAttrib(gl.funcs, C.GLuint(program), C.GLuint(index), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLint)(unsafe.Pointer(&size[0])), (*C.GLenum)(unsafe.Pointer(&gltype[0])), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEnableVertexAttribArray.xml -func (gl *GL) EnableVertexAttribArray(index glbase.Attrib) { - C.gl3_3core_glEnableVertexAttribArray(gl.funcs, C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDisableVertexAttribArray.xml -func (gl *GL) DisableVertexAttribArray(index glbase.Attrib) { - C.gl3_3core_glDisableVertexAttribArray(gl.funcs, C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDetachShader.xml -func (gl *GL) DetachShader(program glbase.Program, shader glbase.Shader) { - C.gl3_3core_glDetachShader(gl.funcs, C.GLuint(program), C.GLuint(shader)) -} - -// DeleteShader frees the memory and invalidates the name associated with -// the shader object specified by shader. This command effectively undoes the -// effects of a call to CreateShader. -// -// If a shader object to be deleted is attached to a program object, it will -// be flagged for deletion, but it will not be deleted until it is no longer -// attached to any program object, for any rendering context (it must -// be detached from wherever it was attached before it will be deleted). A -// value of 0 for shader will be silently ignored. -// -// To determine whether an object has been flagged for deletion, call -// GetShader with arguments shader and GL.DELETE_STATUS. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. -// -// DeleteShader is available in GL version 2.0 or greater. -func (gl *GL) DeleteShader(shader glbase.Shader) { - C.gl3_3core_glDeleteShader(gl.funcs, C.GLuint(shader)) -} - -// DeleteProgram frees the memory and invalidates the name associated with -// the program object specified by program. This command effectively undoes -// the effects of a call to CreateProgram. -// -// If a program object is in use as part of current rendering state, it will -// be flagged for deletion, but it will not be deleted until it is no longer -// part of current state for any rendering context. If a program object to be -// deleted has shader objects attached to it, those shader objects will be -// automatically detached but not deleted unless they have already been -// flagged for deletion by a previous call to DeleteShader. A value of 0 -// for program will be silently ignored. -// -// To determine whether a program object has been flagged for deletion, call -// GetProgram with arguments program and GL.DELETE_STATUS. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. -// -// DeleteProgram is available in GL version 2.0 or greater. -func (gl *GL) DeleteProgram(program glbase.Program) { - C.gl3_3core_glDeleteProgram(gl.funcs, C.GLuint(program)) -} - -// CreateShader creates an empty shader object and returns a non-zero value -// by which it can be referenced. A shader object is used to maintain the -// source code strings that define a shader. shaderType indicates the type of -// shader to be created. -// -// Two types of shaders are supported. A shader of type GL.VERTEX_SHADER is a -// shader that is intended to run on the programmable vertex processor and -// replace the fixed functionality vertex processing in OpenGL. A shader of -// type GL.FRAGMENT_SHADER is a shader that is intended to run on the -// programmable fragment processor and replace the fixed functionality -// fragment processing in OpenGL. -// -// When created, a shader object's GL.SHADER_TYPE parameter is set to either -// GL.VERTEX_SHADER or GL.FRAGMENT_SHADER, depending on the value of -// shaderType. -// -// Like display lists and texture objects, the name space for shader objects -// may be shared across a set of contexts, as long as the server sides of the -// contexts share the same address space. If the name space is shared across -// contexts, any attached objects and the data associated with those attached -// objects are shared as well. -// -// This function returns 0 if an error occurs creating the shader object. -// -// Error GL.INVALID_ENUM is generated if shaderType is not an accepted value. -// GL.INVALID_OPERATION is generated if CreateShader is executed between the -// execution of Begin and the corresponding execution of End. -// -// CreateShader is available in GL version 2.0 or greater. -func (gl *GL) CreateShader(gltype glbase.Enum) glbase.Shader { - glresult := C.gl3_3core_glCreateShader(gl.funcs, C.GLenum(gltype)) - return glbase.Shader(glresult) -} - -// CreateProgram creates an empty program object and returns a non-zero -// value by which it can be referenced. A program object is an object to -// which shader objects can be attached. This provides a mechanism to specify -// the shader objects that will be linked to create a program. It also -// provides a means for checking the compatibility of the shaders that will -// be used to create a program (for instance, checking the compatibility -// between a vertex shader and a fragment shader). When no longer needed as -// part of a program object, shader objects can be detached. -// -// One or more executables are created in a program object by successfully -// attaching shader objects to it with AttachShader, successfully compiling -// the shader objects with CompileShader, and successfully linking the -// program object with LinkProgram. These executables are made part of -// current state when UseProgram is called. Program objects can be deleted -// by calling DeleteProgram. The memory associated with the program object -// will be deleted when it is no longer part of current rendering state for -// any context. -// -// Like display lists and texture objects, the name space for program objects -// may be shared across a set of contexts, as long as the server sides of the -// contexts share the same address space. If the name space is shared across -// contexts, any attached objects and the data associated with those attached -// objects are shared as well. -// -// Applications are responsible for providing the synchronization across API -// calls when objects are accessed from different execution threads. -// -// This function returns 0 if an error occurs creating the program object. -// -// Error GL.INVALID_OPERATION is generated if CreateProgram is executed -// between the execution of Begin and the corresponding execution of End. -// -// CreateProgram is available in GL version 2.0 or greater. -func (gl *GL) CreateProgram() glbase.Program { - glresult := C.gl3_3core_glCreateProgram(gl.funcs) - return glbase.Program(glresult) -} - -// CompileShader compiles the source code strings that have been stored in -// the shader object specified by shader. -// -// The compilation status will be stored as part of the shader object's -// state. This value will be set to GL.TRUE if the shader was compiled without -// errors and is ready for use, and GL.FALSE otherwise. It can be queried by -// calling GetShaderiv with arguments shader and GL.COMPILE_STATUS. -// -// Compilation of a shader can fail for a number of reasons as specified by -// the OpenGL Shading Language Specification. Whether or not the compilation -// was successful, information about the compilation can be obtained from the -// shader object's information log by calling GetShaderInfoLog. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader is not a shader -// object. GL.INVALID_OPERATION is generated if CompileShader is executed -// between the execution of Begin and the corresponding execution of End. -// -// CompileShader is available in GL version 2.0 or greater. -func (gl *GL) CompileShader(shader glbase.Shader) { - C.gl3_3core_glCompileShader(gl.funcs, C.GLuint(shader)) -} - -// BindAttribLocation associates a user-defined attribute variable in the program -// object specified by program with a generic vertex attribute index. The name -// parameter specifies the name of the vertex shader attribute variable to -// which index is to be bound. When program is made part of the current state, -// values provided via the generic vertex attribute index will modify the -// value of the user-defined attribute variable specified by name. -// -// If name refers to a matrix attribute variable, index refers to the first -// column of the matrix. Other matrix columns are then automatically bound to -// locations index+1 for a matrix of type mat2; index+1 and index+2 for a -// matrix of type mat3; and index+1, index+2, and index+3 for a matrix of -// type mat4. -// -// This command makes it possible for vertex shaders to use descriptive names -// for attribute variables rather than generic variables that are numbered -// from 0 to GL.MAX_VERTEX_ATTRIBS-1. The values sent to each generic -// attribute index are part of current state, just like standard vertex -// attributes such as color, normal, and vertex position. If a different -// program object is made current by calling UseProgram, the generic vertex -// attributes are tracked in such a way that the same values will be observed -// by attributes in the new program object that are also bound to index. -// -// Attribute variable name-to-generic attribute index bindings for a program -// object can be explicitly assigned at any time by calling -// BindAttribLocation. Attribute bindings do not go into effect until -// LinkProgram is called. After a program object has been linked -// successfully, the index values for generic attributes remain fixed (and -// their values can be queried) until the next link command occurs. -// -// Applications are not allowed to bind any of the standard OpenGL vertex -// attributes using this command, as they are bound automatically when -// needed. Any attribute binding that occurs after the program object has -// been linked will not take effect until the next time the program object is -// linked. -// -// If name was bound previously, that information is lost. Thus you cannot -// bind one user-defined attribute variable to multiple indices, but you can -// bind multiple user-defined attribute variables to the same index. -// -// Applications are allowed to bind more than one user-defined attribute -// variable to the same generic vertex attribute index. This is called -// aliasing, and it is allowed only if just one of the aliased attributes is -// active in the executable program, or if no path through the shader -// consumes more than one attribute of a set of attributes aliased to the -// same location. The compiler and linker are allowed to assume that no -// aliasing is done and are free to employ optimizations that work only in -// the absence of aliasing. OpenGL implementations are not required to do -// error checking to detect aliasing. Because there is no way to bind -// standard attributes, it is not possible to alias generic attributes with -// conventional ones (except for generic attribute 0). -// -// BindAttribLocation can be called before any vertex shader objects are -// bound to the specified program object. It is also permissible to bind a -// generic attribute index to an attribute variable name that is never used -// in a vertex shader. -// -// Active attributes that are not explicitly bound will be bound by the -// linker when LinkProgram is called. The locations assigned can be queried -// by calling GetAttribLocation. -// -// Error GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. -// GL.INVALID_OPERATION is generated if name starts with the reserved prefix "gl_". -// GL.INVALID_VALUE is generated if program is not a value generated by OpenGL. -// GL.INVALID_OPERATION is generated if program is not a program object. -// GL.INVALID_OPERATION is generated if BindAttribLocation is executed -// between the execution of Begin and the corresponding execution of End. -// -// BindAttribLocation is available in GL version 2.0 or greater. -func (gl *GL) BindAttribLocation(program glbase.Program, index glbase.Attrib, name string) { - name_cstr := C.CString(name) - C.gl3_3core_glBindAttribLocation(gl.funcs, C.GLuint(program), C.GLuint(index), (*C.GLchar)(name_cstr)) - C.free(unsafe.Pointer(name_cstr)) -} - -// AttachShader attaches a shader object to a program object. -// -// In order to create an executable, there must be a way to specify the list -// of things that will be linked together. Program objects provide this -// mechanism. Shaders that are to be linked together in a program object must -// first be attached to that program object. This indicates that shader will -// be included in link operations that will be performed on program. -// -// All operations that can be performed on a shader object are valid whether -// or not the shader object is attached to a program object. It is -// permissible to attach a shader object to a program object before source -// code has been loaded into the shader object or before the shader object -// has been compiled. It is permissible to attach multiple shader objects of -// the same type because each may contain a portion of the complete shader. -// It is also permissible to attach a shader object to more than one program -// object. If a shader object is deleted while it is attached to a program -// object, it will be flagged for deletion, and deletion will not occur until -// DetachShader is called to detach it from all program objects to which it -// is attached. -// -// Error GL.INVALID_VALUE is generated if either program or shader is not a -// value generated by OpenGL. GL.INVALID_OPERATION is generated if program -// is not a program object. GL.INVALID_OPERATION is generated if shader is -// not a shader object. GL.INVALID_OPERATION is generated if shader is -// already attached to program. GL.INVALID_OPERATION is generated if -// AttachShader is executed between the execution of Begin and the -// corresponding execution of End. -// -// AttachShader is available in GL version 2.0 or greater. -func (gl *GL) AttachShader(program glbase.Program, shader glbase.Shader) { - C.gl3_3core_glAttachShader(gl.funcs, C.GLuint(program), C.GLuint(shader)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glStencilMaskSeparate.xml -func (gl *GL) StencilMaskSeparate(face glbase.Enum, mask uint32) { - C.gl3_3core_glStencilMaskSeparate(gl.funcs, C.GLenum(face), C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glStencilFuncSeparate.xml -func (gl *GL) StencilFuncSeparate(face, glfunc glbase.Enum, ref int32, mask uint32) { - C.gl3_3core_glStencilFuncSeparate(gl.funcs, C.GLenum(face), C.GLenum(glfunc), C.GLint(ref), C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glStencilOpSeparate.xml -func (gl *GL) StencilOpSeparate(face, sfail, dpfail, dppass glbase.Enum) { - C.gl3_3core_glStencilOpSeparate(gl.funcs, C.GLenum(face), C.GLenum(sfail), C.GLenum(dpfail), C.GLenum(dppass)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDrawBuffers.xml -func (gl *GL) DrawBuffers(n int, bufs []glbase.Enum) { - C.gl3_3core_glDrawBuffers(gl.funcs, C.GLsizei(n), (*C.GLenum)(unsafe.Pointer(&bufs[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBlendEquationSeparate.xml -func (gl *GL) BlendEquationSeparate(modeRGB, modeAlpha glbase.Enum) { - C.gl3_3core_glBlendEquationSeparate(gl.funcs, C.GLenum(modeRGB), C.GLenum(modeAlpha)) -} - -// UniformMatrix4x3fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix4x3fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix4x3fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(4*3) != 0 { - panic("invalid value length for UniformMatrix4x3fv") - } - count := len(value) / (4 * 3) - C.gl3_3core_glUniformMatrix4x3fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix3x4fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix3x4fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix3x4fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(3*4) != 0 { - panic("invalid value length for UniformMatrix3x4fv") - } - count := len(value) / (3 * 4) - C.gl3_3core_glUniformMatrix3x4fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix4x2fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix4x2fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix4x2fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(4*2) != 0 { - panic("invalid value length for UniformMatrix4x2fv") - } - count := len(value) / (4 * 2) - C.gl3_3core_glUniformMatrix4x2fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix2x4fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix2x4fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix2x4fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(2*4) != 0 { - panic("invalid value length for UniformMatrix2x4fv") - } - count := len(value) / (2 * 4) - C.gl3_3core_glUniformMatrix2x4fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix3x2fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix3x2fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix3x2fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(3*2) != 0 { - panic("invalid value length for UniformMatrix3x2fv") - } - count := len(value) / (3 * 2) - C.gl3_3core_glUniformMatrix3x2fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix2x3fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix2x3fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix2x3fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(2*3) != 0 { - panic("invalid value length for UniformMatrix2x3fv") - } - count := len(value) / (2 * 3) - C.gl3_3core_glUniformMatrix2x3fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsVertexArray.xml -func (gl *GL) IsVertexArray(array uint32) bool { - glresult := C.gl3_3core_glIsVertexArray(gl.funcs, C.GLuint(array)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGenVertexArrays.xml -func (gl *GL) GenVertexArrays(n int, arrays []uint32) { - C.gl3_3core_glGenVertexArrays(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&arrays[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDeleteVertexArrays.xml -func (gl *GL) DeleteVertexArrays(n int, arrays []uint32) { - C.gl3_3core_glDeleteVertexArrays(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&arrays[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBindVertexArray.xml -func (gl *GL) BindVertexArray(array uint32) { - C.gl3_3core_glBindVertexArray(gl.funcs, C.GLuint(array)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFlushMappedBufferRange.xml -func (gl *GL) FlushMappedBufferRange(target glbase.Enum, offset, length int) { - C.gl3_3core_glFlushMappedBufferRange(gl.funcs, C.GLenum(target), C.GLintptr(offset), C.GLsizeiptr(length)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFramebufferTextureLayer.xml -func (gl *GL) FramebufferTextureLayer(target, attachment glbase.Enum, texture glbase.Texture, level int, layer int32) { - C.gl3_3core_glFramebufferTextureLayer(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLuint(texture), C.GLint(level), C.GLint(layer)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRenderbufferStorageMultisample.xml -func (gl *GL) RenderbufferStorageMultisample(target glbase.Enum, samples int32, internalFormat glbase.Enum, width, height int) { - C.gl3_3core_glRenderbufferStorageMultisample(gl.funcs, C.GLenum(target), C.GLsizei(samples), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBlitFramebuffer.xml -func (gl *GL) BlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1 int32, mask glbase.Bitfield, filter glbase.Enum) { - C.gl3_3core_glBlitFramebuffer(gl.funcs, C.GLint(srcX0), C.GLint(srcY0), C.GLint(srcX1), C.GLint(srcY1), C.GLint(dstX0), C.GLint(dstY0), C.GLint(dstX1), C.GLint(dstY1), C.GLbitfield(mask), C.GLenum(filter)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGenerateMipmap.xml -func (gl *GL) GenerateMipmap(target glbase.Enum) { - C.gl3_3core_glGenerateMipmap(gl.funcs, C.GLenum(target)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetFramebufferAttachmentParameteriv.xml -func (gl *GL) GetFramebufferAttachmentParameteriv(target, attachment, pname glbase.Enum, params []int32) { - C.gl3_3core_glGetFramebufferAttachmentParameteriv(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFramebufferRenderbuffer.xml -func (gl *GL) FramebufferRenderbuffer(target, attachment, renderbuffertarget glbase.Enum, renderbuffer glbase.Renderbuffer) { - C.gl3_3core_glFramebufferRenderbuffer(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(renderbuffertarget), C.GLuint(renderbuffer)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFramebufferTexture3D.xml -func (gl *GL) FramebufferTexture3D(target, attachment, textarget glbase.Enum, texture glbase.Texture, level int, zoffset int32) { - C.gl3_3core_glFramebufferTexture3D(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(textarget), C.GLuint(texture), C.GLint(level), C.GLint(zoffset)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFramebufferTexture2D.xml -func (gl *GL) FramebufferTexture2D(target, attachment, textarget glbase.Enum, texture glbase.Texture, level int) { - C.gl3_3core_glFramebufferTexture2D(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(textarget), C.GLuint(texture), C.GLint(level)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFramebufferTexture1D.xml -func (gl *GL) FramebufferTexture1D(target, attachment, textarget glbase.Enum, texture glbase.Texture, level int) { - C.gl3_3core_glFramebufferTexture1D(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(textarget), C.GLuint(texture), C.GLint(level)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCheckFramebufferStatus.xml -func (gl *GL) CheckFramebufferStatus(target glbase.Enum) glbase.Enum { - glresult := C.gl3_3core_glCheckFramebufferStatus(gl.funcs, C.GLenum(target)) - return glbase.Enum(glresult) -} - -// GenFramebuffers returns n framebuffer object names in ids. There is no -// guarantee that the names form a contiguous set of integers; however, it is -// guaranteed that none of the returned names was in use immediately before -// the call to GenFramebuffers. -// -// Framebuffer object names returned by a call to GenFramebuffers are not -// returned by subsequent calls, unless they are first deleted with -// DeleteFramebuffers. -// -// The names returned in ids are marked as used, for the purposes of -// GenFramebuffers only, but they acquire state and type only when they are -// first bound. -// -// Error GL.INVALID_VALUE is generated if n is negative. -func (gl *GL) GenFramebuffers(n int) []glbase.Framebuffer { - if n == 0 { - return nil - } - framebuffers := make([]glbase.Framebuffer, n) - C.gl3_3core_glGenFramebuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&framebuffers[0]))) - return framebuffers -} - -// DeleteFramebuffers deletes the framebuffer objects whose names are -// stored in the framebuffers slice. The name zero is reserved by the GL and -// is silently ignored, should it occur in framebuffers, as are other unused -// names. Once a framebuffer object is deleted, its name is again unused and -// it has no attachments. If a framebuffer that is currently bound to one or -// more of the targets GL.DRAW_FRAMEBUFFER or GL.READ_FRAMEBUFFER is deleted, -// it is as though BindFramebuffer had been executed with the corresponding -// target and framebuffer zero. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// DeleteFramebuffers is available in GL version 3.0 or greater. -func (gl *GL) DeleteFramebuffers(framebuffers []glbase.Framebuffer) { - n := len(framebuffers) - if n == 0 { - return - } - C.gl3_3core_glDeleteFramebuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&framebuffers[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBindFramebuffer.xml -func (gl *GL) BindFramebuffer(target glbase.Enum, framebuffer glbase.Framebuffer) { - C.gl3_3core_glBindFramebuffer(gl.funcs, C.GLenum(target), C.GLuint(framebuffer)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsFramebuffer.xml -func (gl *GL) IsFramebuffer(framebuffer glbase.Framebuffer) bool { - glresult := C.gl3_3core_glIsFramebuffer(gl.funcs, C.GLuint(framebuffer)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetRenderbufferParameteriv.xml -func (gl *GL) GetRenderbufferParameteriv(target, pname glbase.Enum, params []int32) { - C.gl3_3core_glGetRenderbufferParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glRenderbufferStorage.xml -func (gl *GL) RenderbufferStorage(target, internalFormat glbase.Enum, width, height int) { - C.gl3_3core_glRenderbufferStorage(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height)) -} - -// GenRenderbuffers returns n renderbuffer object names in renderbuffers. -// There is no guarantee that the names form a contiguous set of integers; -// however, it is guaranteed that none of the returned names was in use -// immediately before the call to GenRenderbuffers. -// -// Renderbuffer object names returned by a call to GenRenderbuffers are not -// returned by subsequent calls, unless they are first deleted with -// DeleteRenderbuffers. -// -// The names returned in renderbuffers are marked as used, for the purposes -// of GenRenderbuffers only, but they acquire state and type only when they -// are first bound. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// GenRenderbuffers is available in GL version 3.0 or greater. -func (gl *GL) GenRenderbuffers(n int) []glbase.Renderbuffer { - if n == 0 { - return nil - } - renderbuffers := make([]glbase.Renderbuffer, n) - C.gl3_3core_glGenRenderbuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&renderbuffers[0]))) - return renderbuffers -} - -// DeleteRenderbuffers deletes the renderbuffer objects whose names are stored -// in the renderbuffers slice. The name zero is reserved by the GL and -// is silently ignored, should it occur in renderbuffers, as are other unused -// names. Once a renderbuffer object is deleted, its name is again unused and -// it has no contents. If a renderbuffer that is currently bound to the -// target GL.RENDERBUFFER is deleted, it is as though BindRenderbuffer had -// been executed with a target of GL.RENDERBUFFER and a name of zero. -// -// If a renderbuffer object is attached to one or more attachment points in -// the currently bound framebuffer, then it as if FramebufferRenderbuffer -// had been called, with a renderbuffer of zero for each attachment point to -// which this image was attached in the currently bound framebuffer. In other -// words, this renderbuffer object is first detached from all attachment -// ponits in the currently bound framebuffer. Note that the renderbuffer -// image is specifically not detached from any non-bound framebuffers. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// DeleteRenderbuffers is available in GL version 3.0 or greater. -func (gl *GL) DeleteRenderbuffers(renderbuffers []glbase.Renderbuffer) { - n := len(renderbuffers) - if n == 0 { - return - } - C.gl3_3core_glDeleteRenderbuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&renderbuffers[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBindRenderbuffer.xml -func (gl *GL) BindRenderbuffer(target glbase.Enum, renderbuffer glbase.Renderbuffer) { - C.gl3_3core_glBindRenderbuffer(gl.funcs, C.GLenum(target), C.GLuint(renderbuffer)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsRenderbuffer.xml -func (gl *GL) IsRenderbuffer(renderbuffer glbase.Renderbuffer) bool { - glresult := C.gl3_3core_glIsRenderbuffer(gl.funcs, C.GLuint(renderbuffer)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClearBufferfi.xml -func (gl *GL) ClearBufferfi(buffer glbase.Enum, drawbuffer int32, depth float32, stencil int32) { - C.gl3_3core_glClearBufferfi(gl.funcs, C.GLenum(buffer), C.GLint(drawbuffer), C.GLfloat(depth), C.GLint(stencil)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClearBufferfv.xml -func (gl *GL) ClearBufferfv(buffer glbase.Enum, drawbuffer int32, value []float32) { - C.gl3_3core_glClearBufferfv(gl.funcs, C.GLenum(buffer), C.GLint(drawbuffer), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClearBufferuiv.xml -func (gl *GL) ClearBufferuiv(buffer glbase.Enum, drawbuffer int32, value []uint32) { - C.gl3_3core_glClearBufferuiv(gl.funcs, C.GLenum(buffer), C.GLint(drawbuffer), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClearBufferiv.xml -func (gl *GL) ClearBufferiv(buffer glbase.Enum, drawbuffer int32, value []int32) { - C.gl3_3core_glClearBufferiv(gl.funcs, C.GLenum(buffer), C.GLint(drawbuffer), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetTexParameterIuiv.xml -func (gl *GL) GetTexParameterIuiv(target, pname glbase.Enum, params []uint32) { - C.gl3_3core_glGetTexParameterIuiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetTexParameterIiv.xml -func (gl *GL) GetTexParameterIiv(target, pname glbase.Enum, params []int32) { - C.gl3_3core_glGetTexParameterIiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexParameterIuiv.xml -func (gl *GL) TexParameterIuiv(target, pname glbase.Enum, params []uint32) { - C.gl3_3core_glTexParameterIuiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexParameterIiv.xml -func (gl *GL) TexParameterIiv(target, pname glbase.Enum, params []int32) { - C.gl3_3core_glTexParameterIiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// Uniform4uiv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform4uiv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4uiv(location glbase.Uniform, value []uint32) { - if len(value) == 0 { - return - } - if len(value)%4 != 0 { - panic("invalid value length for Uniform4uiv") - } - count := len(value) / 4 - C.gl3_3core_glUniform4uiv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// Uniform3uiv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform3uiv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3uiv(location glbase.Uniform, value []uint32) { - if len(value) == 0 { - return - } - if len(value)%3 != 0 { - panic("invalid value length for Uniform3uiv") - } - count := len(value) / 3 - C.gl3_3core_glUniform3uiv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// Uniform2uiv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform2uiv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2uiv(location glbase.Uniform, value []uint32) { - if len(value) == 0 { - return - } - if len(value)%2 != 0 { - panic("invalid value length for Uniform2uiv") - } - count := len(value) / 2 - C.gl3_3core_glUniform2uiv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// Uniform1uiv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform1uiv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1uiv(location glbase.Uniform, value []uint32) { - if len(value) == 0 { - return - } - count := len(value) - C.gl3_3core_glUniform1uiv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// Uniform4ui modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform4ui operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4ui(location glbase.Uniform, v0, v1, v2, v3 uint32) { - C.gl3_3core_glUniform4ui(gl.funcs, C.GLint(location), C.GLuint(v0), C.GLuint(v1), C.GLuint(v2), C.GLuint(v3)) -} - -// Uniform3ui modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform3ui operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3ui(location glbase.Uniform, v0, v1, v2 uint32) { - C.gl3_3core_glUniform3ui(gl.funcs, C.GLint(location), C.GLuint(v0), C.GLuint(v1), C.GLuint(v2)) -} - -// Uniform2ui modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform2ui operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2ui(location glbase.Uniform, v0, v1 uint32) { - C.gl3_3core_glUniform2ui(gl.funcs, C.GLint(location), C.GLuint(v0), C.GLuint(v1)) -} - -// Uniform1ui modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform1ui operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1ui(location glbase.Uniform, v0 uint32) { - C.gl3_3core_glUniform1ui(gl.funcs, C.GLint(location), C.GLuint(v0)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetFragDataLocation.xml -func (gl *GL) GetFragDataLocation(program glbase.Program, name []byte) int32 { - glresult := C.gl3_3core_glGetFragDataLocation(gl.funcs, C.GLuint(program), (*C.GLchar)(unsafe.Pointer(&name[0]))) - return int32(glresult) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBindFragDataLocation.xml -func (gl *GL) BindFragDataLocation(program glbase.Program, color uint32, name []byte) { - C.gl3_3core_glBindFragDataLocation(gl.funcs, C.GLuint(program), C.GLuint(color), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetUniformuiv.xml -func (gl *GL) GetUniformuiv(program glbase.Program, location glbase.Uniform, params []uint32) { - C.gl3_3core_glGetUniformuiv(gl.funcs, C.GLuint(program), C.GLint(location), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetVertexAttribIuiv.xml -func (gl *GL) GetVertexAttribIuiv(index glbase.Attrib, pname glbase.Enum, params []uint32) { - C.gl3_3core_glGetVertexAttribIuiv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetVertexAttribIiv.xml -func (gl *GL) GetVertexAttribIiv(index glbase.Attrib, pname glbase.Enum, params []int32) { - C.gl3_3core_glGetVertexAttribIiv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribIPointer.xml -func (gl *GL) VertexAttribIPointer(index glbase.Attrib, size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl3_3core_glVertexAttribIPointer(gl.funcs, C.GLuint(index), C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEndConditionalRender.xml -func (gl *GL) EndConditionalRender() { - C.gl3_3core_glEndConditionalRender(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBeginConditionalRender.xml -func (gl *GL) BeginConditionalRender(id uint32, mode glbase.Enum) { - C.gl3_3core_glBeginConditionalRender(gl.funcs, C.GLuint(id), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClampColor.xml -func (gl *GL) ClampColor(target, clamp glbase.Enum) { - C.gl3_3core_glClampColor(gl.funcs, C.GLenum(target), C.GLenum(clamp)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetTransformFeedbackVarying.xml -func (gl *GL) GetTransformFeedbackVarying(program glbase.Program, index uint32, bufSize int32, length []int32, size []int, gltype []glbase.Enum, name []byte) { - C.gl3_3core_glGetTransformFeedbackVarying(gl.funcs, C.GLuint(program), C.GLuint(index), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLsizei)(unsafe.Pointer(&size[0])), (*C.GLenum)(unsafe.Pointer(&gltype[0])), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBindBufferBase.xml -func (gl *GL) BindBufferBase(target glbase.Enum, index uint32, buffer glbase.Buffer) { - C.gl3_3core_glBindBufferBase(gl.funcs, C.GLenum(target), C.GLuint(index), C.GLuint(buffer)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBindBufferRange.xml -func (gl *GL) BindBufferRange(target glbase.Enum, index uint32, buffer glbase.Buffer, offset, size int) { - C.gl3_3core_glBindBufferRange(gl.funcs, C.GLenum(target), C.GLuint(index), C.GLuint(buffer), C.GLintptr(offset), C.GLsizeiptr(size)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEndTransformFeedback.xml -func (gl *GL) EndTransformFeedback() { - C.gl3_3core_glEndTransformFeedback(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBeginTransformFeedback.xml -func (gl *GL) BeginTransformFeedback(primitiveMode glbase.Enum) { - C.gl3_3core_glBeginTransformFeedback(gl.funcs, C.GLenum(primitiveMode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsEnabledi.xml -func (gl *GL) IsEnabledi(target glbase.Enum, index uint32) bool { - glresult := C.gl3_3core_glIsEnabledi(gl.funcs, C.GLenum(target), C.GLuint(index)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDisablei.xml -func (gl *GL) Disablei(target glbase.Enum, index uint32) { - C.gl3_3core_glDisablei(gl.funcs, C.GLenum(target), C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glEnablei.xml -func (gl *GL) Enablei(target glbase.Enum, index uint32) { - C.gl3_3core_glEnablei(gl.funcs, C.GLenum(target), C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetIntegeri_v.xml -func (gl *GL) GetIntegeri_v(target glbase.Enum, index uint32, data []int32) { - C.gl3_3core_glGetIntegeri_v(gl.funcs, C.GLenum(target), C.GLuint(index), (*C.GLint)(unsafe.Pointer(&data[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetBooleani_v.xml -func (gl *GL) GetBooleani_v(target glbase.Enum, index uint32, data []bool) { - C.gl3_3core_glGetBooleani_v(gl.funcs, C.GLenum(target), C.GLuint(index), (*C.GLboolean)(unsafe.Pointer(&data[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColorMaski.xml -func (gl *GL) ColorMaski(index uint32, r, g, b, a bool) { - C.gl3_3core_glColorMaski(gl.funcs, C.GLuint(index), *(*C.GLboolean)(unsafe.Pointer(&r)), *(*C.GLboolean)(unsafe.Pointer(&g)), *(*C.GLboolean)(unsafe.Pointer(&b)), *(*C.GLboolean)(unsafe.Pointer(&a))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glCopyBufferSubData.xml -func (gl *GL) CopyBufferSubData(readTarget, writeTarget glbase.Enum, readOffset, writeOffset, size int) { - C.gl3_3core_glCopyBufferSubData(gl.funcs, C.GLenum(readTarget), C.GLenum(writeTarget), C.GLintptr(readOffset), C.GLintptr(writeOffset), C.GLsizeiptr(size)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glUniformBlockBinding.xml -func (gl *GL) UniformBlockBinding(program glbase.Program, v0, v1 uint32) { - C.gl3_3core_glUniformBlockBinding(gl.funcs, C.GLuint(program), C.GLuint(v0), C.GLuint(v1)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetActiveUniformBlockName.xml -func (gl *GL) GetActiveUniformBlockName(program glbase.Program, uniformBlockIndex uint32, bufSize int32, length []int32, uniformBlockName []byte) { - C.gl3_3core_glGetActiveUniformBlockName(gl.funcs, C.GLuint(program), C.GLuint(uniformBlockIndex), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLchar)(unsafe.Pointer(&uniformBlockName[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetActiveUniformBlockiv.xml -func (gl *GL) GetActiveUniformBlockiv(program glbase.Program, uniformBlockIndex uint32, pname glbase.Enum, params []int32) { - C.gl3_3core_glGetActiveUniformBlockiv(gl.funcs, C.GLuint(program), C.GLuint(uniformBlockIndex), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetUniformBlockIndex.xml -func (gl *GL) GetUniformBlockIndex(program glbase.Program, uniformBlockName []byte) uint32 { - glresult := C.gl3_3core_glGetUniformBlockIndex(gl.funcs, C.GLuint(program), (*C.GLchar)(unsafe.Pointer(&uniformBlockName[0]))) - return uint32(glresult) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetActiveUniformName.xml -func (gl *GL) GetActiveUniformName(program glbase.Program, uniformIndex uint32, bufSize int32, length []int32, uniformName []byte) { - C.gl3_3core_glGetActiveUniformName(gl.funcs, C.GLuint(program), C.GLuint(uniformIndex), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLchar)(unsafe.Pointer(&uniformName[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetActiveUniformsiv.xml -func (gl *GL) GetActiveUniformsiv(program glbase.Program, uniformCount int32, uniformIndices []uint32, pname glbase.Enum, params []int32) { - C.gl3_3core_glGetActiveUniformsiv(gl.funcs, C.GLuint(program), C.GLsizei(uniformCount), (*C.GLuint)(unsafe.Pointer(&uniformIndices[0])), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glPrimitiveRestartIndex.xml -func (gl *GL) PrimitiveRestartIndex(index uint32) { - C.gl3_3core_glPrimitiveRestartIndex(gl.funcs, C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexBuffer.xml -func (gl *GL) TexBuffer(target, internalFormat glbase.Enum, buffer glbase.Buffer) { - C.gl3_3core_glTexBuffer(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLuint(buffer)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDrawElementsInstanced.xml -func (gl *GL) DrawElementsInstanced(mode glbase.Enum, count int, gltype glbase.Enum, indices interface{}, instancecount int32) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl3_3core_glDrawElementsInstanced(gl.funcs, C.GLenum(mode), C.GLsizei(count), C.GLenum(gltype), indices_ptr, C.GLsizei(instancecount)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDrawArraysInstanced.xml -func (gl *GL) DrawArraysInstanced(mode glbase.Enum, first, count int, instancecount int32) { - C.gl3_3core_glDrawArraysInstanced(gl.funcs, C.GLenum(mode), C.GLint(first), C.GLsizei(count), C.GLsizei(instancecount)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSampleMaski.xml -func (gl *GL) SampleMaski(index uint32, mask glbase.Bitfield) { - C.gl3_3core_glSampleMaski(gl.funcs, C.GLuint(index), C.GLbitfield(mask)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetMultisamplefv.xml -func (gl *GL) GetMultisamplefv(pname glbase.Enum, index uint32, val []float32) { - C.gl3_3core_glGetMultisamplefv(gl.funcs, C.GLenum(pname), C.GLuint(index), (*C.GLfloat)(unsafe.Pointer(&val[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexImage3DMultisample.xml -func (gl *GL) TexImage3DMultisample(target glbase.Enum, samples, internalFormat int32, width, height int, depth int32, fixedsamplelocations bool) { - C.gl3_3core_glTexImage3DMultisample(gl.funcs, C.GLenum(target), C.GLsizei(samples), C.GLint(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), *(*C.GLboolean)(unsafe.Pointer(&fixedsamplelocations))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexImage2DMultisample.xml -func (gl *GL) TexImage2DMultisample(target glbase.Enum, samples, internalFormat int32, width, height int, fixedsamplelocations bool) { - C.gl3_3core_glTexImage2DMultisample(gl.funcs, C.GLenum(target), C.GLsizei(samples), C.GLint(internalFormat), C.GLsizei(width), C.GLsizei(height), *(*C.GLboolean)(unsafe.Pointer(&fixedsamplelocations))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetSynciv.xml -func (gl *GL) GetSynciv(sync glbase.Sync, pname glbase.Enum, bufSize int32, length, values []int32) { - C.gl3_3core_glGetSynciv(gl.funcs, C.GLsync(unsafe.Pointer(sync)), C.GLenum(pname), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLint)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetInteger64v.xml -func (gl *GL) GetInteger64v(pname glbase.Enum, params []int64) { - C.gl3_3core_glGetInteger64v(gl.funcs, C.GLenum(pname), (*C.GLint64)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glWaitSync.xml -func (gl *GL) WaitSync(sync glbase.Sync, flags glbase.Bitfield, timeout uint64) { - C.gl3_3core_glWaitSync(gl.funcs, C.GLsync(unsafe.Pointer(sync)), C.GLbitfield(flags), C.GLuint64(timeout)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glClientWaitSync.xml -func (gl *GL) ClientWaitSync(sync glbase.Sync, flags glbase.Bitfield, timeout uint64) glbase.Enum { - glresult := C.gl3_3core_glClientWaitSync(gl.funcs, C.GLsync(unsafe.Pointer(sync)), C.GLbitfield(flags), C.GLuint64(timeout)) - return glbase.Enum(glresult) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDeleteSync.xml -func (gl *GL) DeleteSync(sync glbase.Sync) { - C.gl3_3core_glDeleteSync(gl.funcs, C.GLsync(unsafe.Pointer(sync))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsSync.xml -func (gl *GL) IsSync(sync glbase.Sync) bool { - glresult := C.gl3_3core_glIsSync(gl.funcs, C.GLsync(unsafe.Pointer(sync))) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFenceSync.xml -func (gl *GL) FenceSync(condition glbase.Enum, flags glbase.Bitfield) glbase.Sync { - glresult := C.gl3_3core_glFenceSync(gl.funcs, C.GLenum(condition), C.GLbitfield(flags)) - return glbase.Sync(unsafe.Pointer(glresult)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glProvokingVertex.xml -func (gl *GL) ProvokingVertex(mode glbase.Enum) { - C.gl3_3core_glProvokingVertex(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDrawElementsInstancedBaseVertex.xml -func (gl *GL) DrawElementsInstancedBaseVertex(mode glbase.Enum, count int, gltype glbase.Enum, indices interface{}, instancecount, basevertex int32) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl3_3core_glDrawElementsInstancedBaseVertex(gl.funcs, C.GLenum(mode), C.GLsizei(count), C.GLenum(gltype), indices_ptr, C.GLsizei(instancecount), C.GLint(basevertex)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDrawRangeElementsBaseVertex.xml -func (gl *GL) DrawRangeElementsBaseVertex(mode glbase.Enum, start, end uint32, count int, gltype glbase.Enum, indices interface{}, basevertex int32) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl3_3core_glDrawRangeElementsBaseVertex(gl.funcs, C.GLenum(mode), C.GLuint(start), C.GLuint(end), C.GLsizei(count), C.GLenum(gltype), indices_ptr, C.GLint(basevertex)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDrawElementsBaseVertex.xml -func (gl *GL) DrawElementsBaseVertex(mode glbase.Enum, count int, gltype glbase.Enum, indices interface{}, basevertex int32) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl3_3core_glDrawElementsBaseVertex(gl.funcs, C.GLenum(mode), C.GLsizei(count), C.GLenum(gltype), indices_ptr, C.GLint(basevertex)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glFramebufferTexture.xml -func (gl *GL) FramebufferTexture(target, attachment glbase.Enum, texture glbase.Texture, level int) { - C.gl3_3core_glFramebufferTexture(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLuint(texture), C.GLint(level)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetBufferParameteri64v.xml -func (gl *GL) GetBufferParameteri64v(target, pname glbase.Enum, params []int64) { - C.gl3_3core_glGetBufferParameteri64v(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint64)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetInteger64i_v.xml -func (gl *GL) GetInteger64i_v(target glbase.Enum, index uint32, data []int64) { - C.gl3_3core_glGetInteger64i_v(gl.funcs, C.GLenum(target), C.GLuint(index), (*C.GLint64)(unsafe.Pointer(&data[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribP4uiv.xml -func (gl *GL) VertexAttribP4uiv(index glbase.Attrib, gltype glbase.Enum, normalized bool, value []uint32) { - C.gl3_3core_glVertexAttribP4uiv(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribP4ui.xml -func (gl *GL) VertexAttribP4ui(index glbase.Attrib, gltype glbase.Enum, normalized bool, value uint32) { - C.gl3_3core_glVertexAttribP4ui(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribP3uiv.xml -func (gl *GL) VertexAttribP3uiv(index glbase.Attrib, gltype glbase.Enum, normalized bool, value []uint32) { - C.gl3_3core_glVertexAttribP3uiv(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribP3ui.xml -func (gl *GL) VertexAttribP3ui(index glbase.Attrib, gltype glbase.Enum, normalized bool, value uint32) { - C.gl3_3core_glVertexAttribP3ui(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribP2uiv.xml -func (gl *GL) VertexAttribP2uiv(index glbase.Attrib, gltype glbase.Enum, normalized bool, value []uint32) { - C.gl3_3core_glVertexAttribP2uiv(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribP2ui.xml -func (gl *GL) VertexAttribP2ui(index glbase.Attrib, gltype glbase.Enum, normalized bool, value uint32) { - C.gl3_3core_glVertexAttribP2ui(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribP1uiv.xml -func (gl *GL) VertexAttribP1uiv(index glbase.Attrib, gltype glbase.Enum, normalized bool, value []uint32) { - C.gl3_3core_glVertexAttribP1uiv(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribP1ui.xml -func (gl *GL) VertexAttribP1ui(index glbase.Attrib, gltype glbase.Enum, normalized bool, value uint32) { - C.gl3_3core_glVertexAttribP1ui(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSecondaryColorP3uiv.xml -func (gl *GL) SecondaryColorP3uiv(gltype glbase.Enum, color []uint32) { - C.gl3_3core_glSecondaryColorP3uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&color[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSecondaryColorP3ui.xml -func (gl *GL) SecondaryColorP3ui(gltype glbase.Enum, color uint32) { - C.gl3_3core_glSecondaryColorP3ui(gl.funcs, C.GLenum(gltype), C.GLuint(color)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColorP4uiv.xml -func (gl *GL) ColorP4uiv(gltype glbase.Enum, color []uint32) { - C.gl3_3core_glColorP4uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&color[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColorP4ui.xml -func (gl *GL) ColorP4ui(gltype glbase.Enum, color uint32) { - C.gl3_3core_glColorP4ui(gl.funcs, C.GLenum(gltype), C.GLuint(color)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColorP3uiv.xml -func (gl *GL) ColorP3uiv(gltype glbase.Enum, color []uint32) { - C.gl3_3core_glColorP3uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&color[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glColorP3ui.xml -func (gl *GL) ColorP3ui(gltype glbase.Enum, color uint32) { - C.gl3_3core_glColorP3ui(gl.funcs, C.GLenum(gltype), C.GLuint(color)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glNormalP3uiv.xml -func (gl *GL) NormalP3uiv(gltype glbase.Enum, coords []uint32) { - C.gl3_3core_glNormalP3uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glNormalP3ui.xml -func (gl *GL) NormalP3ui(gltype glbase.Enum, coords uint32) { - C.gl3_3core_glNormalP3ui(gl.funcs, C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoordP4uiv.xml -func (gl *GL) MultiTexCoordP4uiv(texture, gltype glbase.Enum, coords []uint32) { - C.gl3_3core_glMultiTexCoordP4uiv(gl.funcs, C.GLenum(texture), C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoordP4ui.xml -func (gl *GL) MultiTexCoordP4ui(texture, gltype glbase.Enum, coords uint32) { - C.gl3_3core_glMultiTexCoordP4ui(gl.funcs, C.GLenum(texture), C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoordP3uiv.xml -func (gl *GL) MultiTexCoordP3uiv(texture, gltype glbase.Enum, coords []uint32) { - C.gl3_3core_glMultiTexCoordP3uiv(gl.funcs, C.GLenum(texture), C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoordP3ui.xml -func (gl *GL) MultiTexCoordP3ui(texture, gltype glbase.Enum, coords uint32) { - C.gl3_3core_glMultiTexCoordP3ui(gl.funcs, C.GLenum(texture), C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoordP2uiv.xml -func (gl *GL) MultiTexCoordP2uiv(texture, gltype glbase.Enum, coords []uint32) { - C.gl3_3core_glMultiTexCoordP2uiv(gl.funcs, C.GLenum(texture), C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoordP2ui.xml -func (gl *GL) MultiTexCoordP2ui(texture, gltype glbase.Enum, coords uint32) { - C.gl3_3core_glMultiTexCoordP2ui(gl.funcs, C.GLenum(texture), C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoordP1uiv.xml -func (gl *GL) MultiTexCoordP1uiv(texture, gltype glbase.Enum, coords []uint32) { - C.gl3_3core_glMultiTexCoordP1uiv(gl.funcs, C.GLenum(texture), C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glMultiTexCoordP1ui.xml -func (gl *GL) MultiTexCoordP1ui(texture, gltype glbase.Enum, coords uint32) { - C.gl3_3core_glMultiTexCoordP1ui(gl.funcs, C.GLenum(texture), C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoordP4uiv.xml -func (gl *GL) TexCoordP4uiv(gltype glbase.Enum, coords []uint32) { - C.gl3_3core_glTexCoordP4uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoordP4ui.xml -func (gl *GL) TexCoordP4ui(gltype glbase.Enum, coords uint32) { - C.gl3_3core_glTexCoordP4ui(gl.funcs, C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoordP3uiv.xml -func (gl *GL) TexCoordP3uiv(gltype glbase.Enum, coords []uint32) { - C.gl3_3core_glTexCoordP3uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoordP3ui.xml -func (gl *GL) TexCoordP3ui(gltype glbase.Enum, coords uint32) { - C.gl3_3core_glTexCoordP3ui(gl.funcs, C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoordP2uiv.xml -func (gl *GL) TexCoordP2uiv(gltype glbase.Enum, coords []uint32) { - C.gl3_3core_glTexCoordP2uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoordP2ui.xml -func (gl *GL) TexCoordP2ui(gltype glbase.Enum, coords uint32) { - C.gl3_3core_glTexCoordP2ui(gl.funcs, C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoordP1uiv.xml -func (gl *GL) TexCoordP1uiv(gltype glbase.Enum, coords []uint32) { - C.gl3_3core_glTexCoordP1uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glTexCoordP1ui.xml -func (gl *GL) TexCoordP1ui(gltype glbase.Enum, coords uint32) { - C.gl3_3core_glTexCoordP1ui(gl.funcs, C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexP4uiv.xml -func (gl *GL) VertexP4uiv(gltype glbase.Enum, value []uint32) { - C.gl3_3core_glVertexP4uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexP4ui.xml -func (gl *GL) VertexP4ui(gltype glbase.Enum, value uint32) { - C.gl3_3core_glVertexP4ui(gl.funcs, C.GLenum(gltype), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexP3uiv.xml -func (gl *GL) VertexP3uiv(gltype glbase.Enum, value []uint32) { - C.gl3_3core_glVertexP3uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexP3ui.xml -func (gl *GL) VertexP3ui(gltype glbase.Enum, value uint32) { - C.gl3_3core_glVertexP3ui(gl.funcs, C.GLenum(gltype), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexP2uiv.xml -func (gl *GL) VertexP2uiv(gltype glbase.Enum, value []uint32) { - C.gl3_3core_glVertexP2uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexP2ui.xml -func (gl *GL) VertexP2ui(gltype glbase.Enum, value uint32) { - C.gl3_3core_glVertexP2ui(gl.funcs, C.GLenum(gltype), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetQueryObjectui64v.xml -func (gl *GL) GetQueryObjectui64v(id uint32, pname glbase.Enum, params []uint64) { - C.gl3_3core_glGetQueryObjectui64v(gl.funcs, C.GLuint(id), C.GLenum(pname), (*C.GLuint64)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetQueryObjecti64v.xml -func (gl *GL) GetQueryObjecti64v(id uint32, pname glbase.Enum, params []int64) { - C.gl3_3core_glGetQueryObjecti64v(gl.funcs, C.GLuint(id), C.GLenum(pname), (*C.GLint64)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glQueryCounter.xml -func (gl *GL) QueryCounter(id uint32, target glbase.Enum) { - C.gl3_3core_glQueryCounter(gl.funcs, C.GLuint(id), C.GLenum(target)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetSamplerParameterIuiv.xml -func (gl *GL) GetSamplerParameterIuiv(sampler uint32, pname glbase.Enum, params []uint32) { - C.gl3_3core_glGetSamplerParameterIuiv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetSamplerParameterfv.xml -func (gl *GL) GetSamplerParameterfv(sampler uint32, pname glbase.Enum, params []float32) { - C.gl3_3core_glGetSamplerParameterfv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetSamplerParameterIiv.xml -func (gl *GL) GetSamplerParameterIiv(sampler uint32, pname glbase.Enum, params []int32) { - C.gl3_3core_glGetSamplerParameterIiv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetSamplerParameteriv.xml -func (gl *GL) GetSamplerParameteriv(sampler uint32, pname glbase.Enum, params []int32) { - C.gl3_3core_glGetSamplerParameteriv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSamplerParameterIuiv.xml -func (gl *GL) SamplerParameterIuiv(sampler uint32, pname glbase.Enum, param []uint32) { - C.gl3_3core_glSamplerParameterIuiv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶m[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSamplerParameterIiv.xml -func (gl *GL) SamplerParameterIiv(sampler uint32, pname glbase.Enum, param []int32) { - C.gl3_3core_glSamplerParameterIiv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶m[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSamplerParameterfv.xml -func (gl *GL) SamplerParameterfv(sampler uint32, pname glbase.Enum, param []float32) { - C.gl3_3core_glSamplerParameterfv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶m[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSamplerParameterf.xml -func (gl *GL) SamplerParameterf(sampler uint32, pname glbase.Enum, param float32) { - C.gl3_3core_glSamplerParameterf(gl.funcs, C.GLuint(sampler), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSamplerParameteriv.xml -func (gl *GL) SamplerParameteriv(sampler uint32, pname glbase.Enum, param []int32) { - C.gl3_3core_glSamplerParameteriv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶m[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glSamplerParameteri.xml -func (gl *GL) SamplerParameteri(sampler uint32, pname glbase.Enum, param int32) { - C.gl3_3core_glSamplerParameteri(gl.funcs, C.GLuint(sampler), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBindSampler.xml -func (gl *GL) BindSampler(unit, sampler uint32) { - C.gl3_3core_glBindSampler(gl.funcs, C.GLuint(unit), C.GLuint(sampler)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glIsSampler.xml -func (gl *GL) IsSampler(sampler uint32) bool { - glresult := C.gl3_3core_glIsSampler(gl.funcs, C.GLuint(sampler)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glDeleteSamplers.xml -func (gl *GL) DeleteSamplers(count int, samplers []uint32) { - C.gl3_3core_glDeleteSamplers(gl.funcs, C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&samplers[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGenSamplers.xml -func (gl *GL) GenSamplers(count int, samplers []uint32) { - C.gl3_3core_glGenSamplers(gl.funcs, C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&samplers[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glGetFragDataIndex.xml -func (gl *GL) GetFragDataIndex(program glbase.Program, name []byte) int32 { - glresult := C.gl3_3core_glGetFragDataIndex(gl.funcs, C.GLuint(program), (*C.GLchar)(unsafe.Pointer(&name[0]))) - return int32(glresult) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glBindFragDataLocationIndexed.xml -func (gl *GL) BindFragDataLocationIndexed(program glbase.Program, colorNumber, index uint32, name []byte) { - C.gl3_3core_glBindFragDataLocationIndexed(gl.funcs, C.GLuint(program), C.GLuint(colorNumber), C.GLuint(index), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribDivisor.xml -func (gl *GL) VertexAttribDivisor(index glbase.Attrib, divisor uint32) { - C.gl3_3core_glVertexAttribDivisor(gl.funcs, C.GLuint(index), C.GLuint(divisor)) -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.0compat/funcs.cpp b/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.0compat/funcs.cpp deleted file mode 100644 index 1dfaf3f0d7..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.0compat/funcs.cpp +++ /dev/null @@ -1,4764 +0,0 @@ - -// ** file automatically generated by glgen -- do not edit manually ** - -#include -#include - -#include "funcs.h" - -void *gl4_0compat_funcs() { - QOpenGLFunctions_4_0_Compatibility* funcs = QOpenGLContext::currentContext()->versionFunctions(); - if (!funcs) { - return 0; - } - funcs->initializeOpenGLFunctions(); - return funcs; -} - - -void gl4_0compat_glViewport(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glViewport(x, y, width, height); -} - -void gl4_0compat_glDepthRange(void *_glfuncs, GLdouble nearVal, GLdouble farVal) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthRange(nearVal, farVal); -} - -GLboolean gl4_0compat_glIsEnabled(void *_glfuncs, GLenum cap) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsEnabled(cap); -} - -void gl4_0compat_glGetTexLevelParameteriv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexLevelParameteriv(target, level, pname, params); -} - -void gl4_0compat_glGetTexLevelParameterfv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexLevelParameterfv(target, level, pname, params); -} - -void gl4_0compat_glGetTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameteriv(target, pname, params); -} - -void gl4_0compat_glGetTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameterfv(target, pname, params); -} - -void gl4_0compat_glGetTexImage(void *_glfuncs, GLenum target, GLint level, GLenum format, GLenum gltype, GLvoid* pixels) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexImage(target, level, format, gltype, pixels); -} - -void gl4_0compat_glGetIntegerv(void *_glfuncs, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetIntegerv(pname, params); -} - -void gl4_0compat_glGetFloatv(void *_glfuncs, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetFloatv(pname, params); -} - -GLenum gl4_0compat_glGetError(void *_glfuncs) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetError(); -} - -void gl4_0compat_glGetDoublev(void *_glfuncs, GLenum pname, GLdouble* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetDoublev(pname, params); -} - -void gl4_0compat_glGetBooleanv(void *_glfuncs, GLenum pname, GLboolean* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBooleanv(pname, params); -} - -void gl4_0compat_glReadPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum gltype, GLvoid* pixels) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glReadPixels(x, y, width, height, format, gltype, pixels); -} - -void gl4_0compat_glReadBuffer(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glReadBuffer(mode); -} - -void gl4_0compat_glPixelStorei(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelStorei(pname, param); -} - -void gl4_0compat_glPixelStoref(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelStoref(pname, param); -} - -void gl4_0compat_glDepthFunc(void *_glfuncs, GLenum glfunc) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthFunc(glfunc); -} - -void gl4_0compat_glStencilOp(void *_glfuncs, GLenum fail, GLenum zfail, GLenum zpass) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilOp(fail, zfail, zpass); -} - -void gl4_0compat_glStencilFunc(void *_glfuncs, GLenum glfunc, GLint ref, GLuint mask) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilFunc(glfunc, ref, mask); -} - -void gl4_0compat_glLogicOp(void *_glfuncs, GLenum opcode) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLogicOp(opcode); -} - -void gl4_0compat_glBlendFunc(void *_glfuncs, GLenum sfactor, GLenum dfactor) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendFunc(sfactor, dfactor); -} - -void gl4_0compat_glFlush(void *_glfuncs) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFlush(); -} - -void gl4_0compat_glFinish(void *_glfuncs) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFinish(); -} - -void gl4_0compat_glEnable(void *_glfuncs, GLenum cap) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnable(cap); -} - -void gl4_0compat_glDisable(void *_glfuncs, GLenum cap) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDisable(cap); -} - -void gl4_0compat_glDepthMask(void *_glfuncs, GLboolean flag) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthMask(flag); -} - -void gl4_0compat_glColorMask(void *_glfuncs, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorMask(red, green, blue, alpha); -} - -void gl4_0compat_glStencilMask(void *_glfuncs, GLuint mask) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilMask(mask); -} - -void gl4_0compat_glClearDepth(void *_glfuncs, GLdouble depth) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearDepth(depth); -} - -void gl4_0compat_glClearStencil(void *_glfuncs, GLint s) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearStencil(s); -} - -void gl4_0compat_glClearColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearColor(red, green, blue, alpha); -} - -void gl4_0compat_glClear(void *_glfuncs, GLbitfield mask) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClear(mask); -} - -void gl4_0compat_glDrawBuffer(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawBuffer(mode); -} - -void gl4_0compat_glTexImage2D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage2D(target, level, internalFormat, width, height, border, format, gltype, pixels); -} - -void gl4_0compat_glTexImage1D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage1D(target, level, internalFormat, width, border, format, gltype, pixels); -} - -void gl4_0compat_glTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameteriv(target, pname, params); -} - -void gl4_0compat_glTexParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint param) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameteri(target, pname, param); -} - -void gl4_0compat_glTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterfv(target, pname, params); -} - -void gl4_0compat_glTexParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterf(target, pname, param); -} - -void gl4_0compat_glScissor(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScissor(x, y, width, height); -} - -void gl4_0compat_glPolygonMode(void *_glfuncs, GLenum face, GLenum mode) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPolygonMode(face, mode); -} - -void gl4_0compat_glPointSize(void *_glfuncs, GLfloat size) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointSize(size); -} - -void gl4_0compat_glLineWidth(void *_glfuncs, GLfloat width) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLineWidth(width); -} - -void gl4_0compat_glHint(void *_glfuncs, GLenum target, GLenum mode) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glHint(target, mode); -} - -void gl4_0compat_glFrontFace(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFrontFace(mode); -} - -void gl4_0compat_glCullFace(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCullFace(mode); -} - -void gl4_0compat_glIndexubv(void *_glfuncs, const GLubyte* c) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexubv(c); -} - -void gl4_0compat_glIndexub(void *_glfuncs, GLubyte c) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexub(c); -} - -GLboolean gl4_0compat_glIsTexture(void *_glfuncs, GLuint texture) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsTexture(texture); -} - -void gl4_0compat_glGenTextures(void *_glfuncs, GLsizei n, GLuint* textures) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenTextures(n, textures); -} - -void gl4_0compat_glDeleteTextures(void *_glfuncs, GLsizei n, const GLuint* textures) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteTextures(n, textures); -} - -void gl4_0compat_glBindTexture(void *_glfuncs, GLenum target, GLuint texture) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindTexture(target, texture); -} - -void gl4_0compat_glTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, gltype, pixels); -} - -void gl4_0compat_glTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexSubImage1D(target, level, xoffset, width, format, gltype, pixels); -} - -void gl4_0compat_glCopyTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height); -} - -void gl4_0compat_glCopyTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexSubImage1D(target, level, xoffset, x, y, width); -} - -void gl4_0compat_glCopyTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexImage2D(target, level, internalFormat, x, y, width, height, border); -} - -void gl4_0compat_glCopyTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexImage1D(target, level, internalFormat, x, y, width, border); -} - -void gl4_0compat_glPolygonOffset(void *_glfuncs, GLfloat factor, GLfloat units) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPolygonOffset(factor, units); -} - -void gl4_0compat_glDrawElements(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElements(mode, count, gltype, indices); -} - -void gl4_0compat_glDrawArrays(void *_glfuncs, GLenum mode, GLint first, GLsizei count) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawArrays(mode, first, count); -} - -void gl4_0compat_glCopyTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexSubImage3D(target, level, xoffset, yoffset, zoffset, x, y, width, height); -} - -void gl4_0compat_glTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, gltype, pixels); -} - -void gl4_0compat_glTexImage3D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage3D(target, level, internalFormat, width, height, depth, border, format, gltype, pixels); -} - -void gl4_0compat_glDrawRangeElements(void *_glfuncs, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum gltype, const GLvoid* indices) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawRangeElements(mode, start, end, count, gltype, indices); -} - -void gl4_0compat_glBlendEquation(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendEquation(mode); -} - -void gl4_0compat_glBlendColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendColor(red, green, blue, alpha); -} - -void gl4_0compat_glGetCompressedTexImage(void *_glfuncs, GLenum target, GLint level, GLvoid* img) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetCompressedTexImage(target, level, img); -} - -void gl4_0compat_glCompressedTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexSubImage1D(target, level, xoffset, width, format, imageSize, data); -} - -void gl4_0compat_glCompressedTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data); -} - -void gl4_0compat_glCompressedTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data); -} - -void gl4_0compat_glCompressedTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexImage1D(target, level, internalFormat, width, border, imageSize, data); -} - -void gl4_0compat_glCompressedTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexImage2D(target, level, internalFormat, width, height, border, imageSize, data); -} - -void gl4_0compat_glCompressedTexImage3D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexImage3D(target, level, internalFormat, width, height, depth, border, imageSize, data); -} - -void gl4_0compat_glSampleCoverage(void *_glfuncs, GLfloat value, GLboolean invert) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSampleCoverage(value, invert); -} - -void gl4_0compat_glActiveTexture(void *_glfuncs, GLenum texture) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glActiveTexture(texture); -} - -void gl4_0compat_glPointParameteriv(void *_glfuncs, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameteriv(pname, params); -} - -void gl4_0compat_glPointParameteri(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameteri(pname, param); -} - -void gl4_0compat_glPointParameterfv(void *_glfuncs, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameterfv(pname, params); -} - -void gl4_0compat_glPointParameterf(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameterf(pname, param); -} - -void gl4_0compat_glMultiDrawArrays(void *_glfuncs, GLenum mode, const GLint* first, const GLsizei* count, GLsizei drawcount) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiDrawArrays(mode, first, count, drawcount); -} - -void gl4_0compat_glBlendFuncSeparate(void *_glfuncs, GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendFuncSeparate(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha); -} - -void gl4_0compat_glGetBufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBufferParameteriv(target, pname, params); -} - -GLboolean gl4_0compat_glUnmapBuffer(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glUnmapBuffer(target); -} - -void gl4_0compat_glGetBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, GLvoid* data) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBufferSubData(target, offset, size, data); -} - -void gl4_0compat_glBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBufferSubData(target, offset, size, data); -} - -void gl4_0compat_glBufferData(void *_glfuncs, GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBufferData(target, size, data, usage); -} - -GLboolean gl4_0compat_glIsBuffer(void *_glfuncs, GLuint buffer) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsBuffer(buffer); -} - -void gl4_0compat_glGenBuffers(void *_glfuncs, GLsizei n, GLuint* buffers) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenBuffers(n, buffers); -} - -void gl4_0compat_glDeleteBuffers(void *_glfuncs, GLsizei n, const GLuint* buffers) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteBuffers(n, buffers); -} - -void gl4_0compat_glBindBuffer(void *_glfuncs, GLenum target, GLuint buffer) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindBuffer(target, buffer); -} - -void gl4_0compat_glGetQueryObjectuiv(void *_glfuncs, GLuint id, GLenum pname, GLuint* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryObjectuiv(id, pname, params); -} - -void gl4_0compat_glGetQueryObjectiv(void *_glfuncs, GLuint id, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryObjectiv(id, pname, params); -} - -void gl4_0compat_glGetQueryiv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryiv(target, pname, params); -} - -void gl4_0compat_glEndQuery(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndQuery(target); -} - -void gl4_0compat_glBeginQuery(void *_glfuncs, GLenum target, GLuint id) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBeginQuery(target, id); -} - -GLboolean gl4_0compat_glIsQuery(void *_glfuncs, GLuint id) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsQuery(id); -} - -void gl4_0compat_glDeleteQueries(void *_glfuncs, GLsizei n, const GLuint* ids) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteQueries(n, ids); -} - -void gl4_0compat_glGenQueries(void *_glfuncs, GLsizei n, GLuint* ids) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenQueries(n, ids); -} - -void gl4_0compat_glVertexAttribPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLboolean normalized, GLsizei stride, const GLvoid* offset) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribPointer(index, size, gltype, normalized, stride, offset); -} - -void gl4_0compat_glValidateProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glValidateProgram(program); -} - -void gl4_0compat_glUniformMatrix4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4fv(location, count, transpose, value); -} - -void gl4_0compat_glUniformMatrix3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3fv(location, count, transpose, value); -} - -void gl4_0compat_glUniformMatrix2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2fv(location, count, transpose, value); -} - -void gl4_0compat_glUniform4iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4iv(location, count, value); -} - -void gl4_0compat_glUniform3iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3iv(location, count, value); -} - -void gl4_0compat_glUniform2iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2iv(location, count, value); -} - -void gl4_0compat_glUniform1iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1iv(location, count, value); -} - -void gl4_0compat_glUniform4fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4fv(location, count, value); -} - -void gl4_0compat_glUniform3fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3fv(location, count, value); -} - -void gl4_0compat_glUniform2fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2fv(location, count, value); -} - -void gl4_0compat_glUniform1fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1fv(location, count, value); -} - -void gl4_0compat_glUniform4i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2, GLint v3) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4i(location, v0, v1, v2, v3); -} - -void gl4_0compat_glUniform3i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3i(location, v0, v1, v2); -} - -void gl4_0compat_glUniform2i(void *_glfuncs, GLint location, GLint v0, GLint v1) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2i(location, v0, v1); -} - -void gl4_0compat_glUniform1i(void *_glfuncs, GLint location, GLint v0) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1i(location, v0); -} - -void gl4_0compat_glUniform4f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4f(location, v0, v1, v2, v3); -} - -void gl4_0compat_glUniform3f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3f(location, v0, v1, v2); -} - -void gl4_0compat_glUniform2f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2f(location, v0, v1); -} - -void gl4_0compat_glUniform1f(void *_glfuncs, GLint location, GLfloat v0) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1f(location, v0); -} - -void gl4_0compat_glUseProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUseProgram(program); -} - -void gl4_0compat_glShaderSource(void *_glfuncs, GLuint shader, GLsizei count, const GLchar** source, const GLint* length) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glShaderSource(shader, count, source, length); -} - -void gl4_0compat_glLinkProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLinkProgram(program); -} - -GLboolean gl4_0compat_glIsShader(void *_glfuncs, GLuint shader) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsShader(shader); -} - -GLboolean gl4_0compat_glIsProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsProgram(program); -} - -void gl4_0compat_glGetVertexAttribiv(void *_glfuncs, GLuint index, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribiv(index, pname, params); -} - -void gl4_0compat_glGetVertexAttribfv(void *_glfuncs, GLuint index, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribfv(index, pname, params); -} - -void gl4_0compat_glGetVertexAttribdv(void *_glfuncs, GLuint index, GLenum pname, GLdouble* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribdv(index, pname, params); -} - -void gl4_0compat_glGetUniformiv(void *_glfuncs, GLuint program, GLint location, GLint* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetUniformiv(program, location, params); -} - -void gl4_0compat_glGetUniformfv(void *_glfuncs, GLuint program, GLint location, GLfloat* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetUniformfv(program, location, params); -} - -GLint gl4_0compat_glGetUniformLocation(void *_glfuncs, GLuint program, const GLchar* name) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetUniformLocation(program, name); -} - -void gl4_0compat_glGetShaderSource(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* source) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetShaderSource(shader, bufSize, length, source); -} - -void gl4_0compat_glGetShaderInfoLog(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* infoLog) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetShaderInfoLog(shader, bufSize, length, infoLog); -} - -void gl4_0compat_glGetShaderiv(void *_glfuncs, GLuint shader, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetShaderiv(shader, pname, params); -} - -void gl4_0compat_glGetProgramInfoLog(void *_glfuncs, GLuint program, GLsizei bufSize, GLsizei* length, GLchar* infoLog) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetProgramInfoLog(program, bufSize, length, infoLog); -} - -void gl4_0compat_glGetProgramiv(void *_glfuncs, GLuint program, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetProgramiv(program, pname, params); -} - -GLint gl4_0compat_glGetAttribLocation(void *_glfuncs, GLuint program, const GLchar* name) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetAttribLocation(program, name); -} - -void gl4_0compat_glGetAttachedShaders(void *_glfuncs, GLuint program, GLsizei maxCount, GLsizei* count, GLuint* obj) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetAttachedShaders(program, maxCount, count, obj); -} - -void gl4_0compat_glGetActiveUniform(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniform(program, index, bufSize, length, size, gltype, name); -} - -void gl4_0compat_glGetActiveAttrib(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveAttrib(program, index, bufSize, length, size, gltype, name); -} - -void gl4_0compat_glEnableVertexAttribArray(void *_glfuncs, GLuint index) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnableVertexAttribArray(index); -} - -void gl4_0compat_glDisableVertexAttribArray(void *_glfuncs, GLuint index) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDisableVertexAttribArray(index); -} - -void gl4_0compat_glDetachShader(void *_glfuncs, GLuint program, GLuint shader) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDetachShader(program, shader); -} - -void gl4_0compat_glDeleteShader(void *_glfuncs, GLuint shader) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteShader(shader); -} - -void gl4_0compat_glDeleteProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteProgram(program); -} - -GLuint gl4_0compat_glCreateShader(void *_glfuncs, GLenum gltype) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glCreateShader(gltype); -} - -GLuint gl4_0compat_glCreateProgram(void *_glfuncs) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glCreateProgram(); -} - -void gl4_0compat_glCompileShader(void *_glfuncs, GLuint shader) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompileShader(shader); -} - -void gl4_0compat_glBindAttribLocation(void *_glfuncs, GLuint program, GLuint index, const GLchar* name) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindAttribLocation(program, index, name); -} - -void gl4_0compat_glAttachShader(void *_glfuncs, GLuint program, GLuint shader) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glAttachShader(program, shader); -} - -void gl4_0compat_glStencilMaskSeparate(void *_glfuncs, GLenum face, GLuint mask) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilMaskSeparate(face, mask); -} - -void gl4_0compat_glStencilFuncSeparate(void *_glfuncs, GLenum face, GLenum glfunc, GLint ref, GLuint mask) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilFuncSeparate(face, glfunc, ref, mask); -} - -void gl4_0compat_glStencilOpSeparate(void *_glfuncs, GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilOpSeparate(face, sfail, dpfail, dppass); -} - -void gl4_0compat_glDrawBuffers(void *_glfuncs, GLsizei n, const GLenum* bufs) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawBuffers(n, bufs); -} - -void gl4_0compat_glBlendEquationSeparate(void *_glfuncs, GLenum modeRGB, GLenum modeAlpha) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendEquationSeparate(modeRGB, modeAlpha); -} - -void gl4_0compat_glUniformMatrix4x3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4x3fv(location, count, transpose, value); -} - -void gl4_0compat_glUniformMatrix3x4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3x4fv(location, count, transpose, value); -} - -void gl4_0compat_glUniformMatrix4x2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4x2fv(location, count, transpose, value); -} - -void gl4_0compat_glUniformMatrix2x4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2x4fv(location, count, transpose, value); -} - -void gl4_0compat_glUniformMatrix3x2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3x2fv(location, count, transpose, value); -} - -void gl4_0compat_glUniformMatrix2x3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2x3fv(location, count, transpose, value); -} - -GLboolean gl4_0compat_glIsVertexArray(void *_glfuncs, GLuint array) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsVertexArray(array); -} - -void gl4_0compat_glGenVertexArrays(void *_glfuncs, GLsizei n, GLuint* arrays) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenVertexArrays(n, arrays); -} - -void gl4_0compat_glDeleteVertexArrays(void *_glfuncs, GLsizei n, const GLuint* arrays) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteVertexArrays(n, arrays); -} - -void gl4_0compat_glBindVertexArray(void *_glfuncs, GLuint array) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindVertexArray(array); -} - -void gl4_0compat_glFlushMappedBufferRange(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr length) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFlushMappedBufferRange(target, offset, length); -} - -void gl4_0compat_glFramebufferTextureLayer(void *_glfuncs, GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTextureLayer(target, attachment, texture, level, layer); -} - -void gl4_0compat_glRenderbufferStorageMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRenderbufferStorageMultisample(target, samples, internalFormat, width, height); -} - -void gl4_0compat_glBlitFramebuffer(void *_glfuncs, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter); -} - -void gl4_0compat_glGenerateMipmap(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenerateMipmap(target); -} - -void gl4_0compat_glGetFramebufferAttachmentParameteriv(void *_glfuncs, GLenum target, GLenum attachment, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetFramebufferAttachmentParameteriv(target, attachment, pname, params); -} - -void gl4_0compat_glFramebufferRenderbuffer(void *_glfuncs, GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer); -} - -void gl4_0compat_glFramebufferTexture3D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTexture3D(target, attachment, textarget, texture, level, zoffset); -} - -void gl4_0compat_glFramebufferTexture2D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTexture2D(target, attachment, textarget, texture, level); -} - -void gl4_0compat_glFramebufferTexture1D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTexture1D(target, attachment, textarget, texture, level); -} - -GLenum gl4_0compat_glCheckFramebufferStatus(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glCheckFramebufferStatus(target); -} - -void gl4_0compat_glGenFramebuffers(void *_glfuncs, GLsizei n, GLuint* framebuffers) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenFramebuffers(n, framebuffers); -} - -void gl4_0compat_glDeleteFramebuffers(void *_glfuncs, GLsizei n, const GLuint* framebuffers) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteFramebuffers(n, framebuffers); -} - -void gl4_0compat_glBindFramebuffer(void *_glfuncs, GLenum target, GLuint framebuffer) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindFramebuffer(target, framebuffer); -} - -GLboolean gl4_0compat_glIsFramebuffer(void *_glfuncs, GLuint framebuffer) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsFramebuffer(framebuffer); -} - -void gl4_0compat_glGetRenderbufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetRenderbufferParameteriv(target, pname, params); -} - -void gl4_0compat_glRenderbufferStorage(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRenderbufferStorage(target, internalFormat, width, height); -} - -void gl4_0compat_glGenRenderbuffers(void *_glfuncs, GLsizei n, GLuint* renderbuffers) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenRenderbuffers(n, renderbuffers); -} - -void gl4_0compat_glDeleteRenderbuffers(void *_glfuncs, GLsizei n, const GLuint* renderbuffers) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteRenderbuffers(n, renderbuffers); -} - -void gl4_0compat_glBindRenderbuffer(void *_glfuncs, GLenum target, GLuint renderbuffer) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindRenderbuffer(target, renderbuffer); -} - -GLboolean gl4_0compat_glIsRenderbuffer(void *_glfuncs, GLuint renderbuffer) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsRenderbuffer(renderbuffer); -} - -void gl4_0compat_glClearBufferfi(void *_glfuncs, GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearBufferfi(buffer, drawbuffer, depth, stencil); -} - -void gl4_0compat_glClearBufferfv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLfloat* value) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearBufferfv(buffer, drawbuffer, value); -} - -void gl4_0compat_glClearBufferuiv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLuint* value) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearBufferuiv(buffer, drawbuffer, value); -} - -void gl4_0compat_glClearBufferiv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLint* value) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearBufferiv(buffer, drawbuffer, value); -} - -void gl4_0compat_glGetTexParameterIuiv(void *_glfuncs, GLenum target, GLenum pname, GLuint* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameterIuiv(target, pname, params); -} - -void gl4_0compat_glGetTexParameterIiv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameterIiv(target, pname, params); -} - -void gl4_0compat_glTexParameterIuiv(void *_glfuncs, GLenum target, GLenum pname, const GLuint* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterIuiv(target, pname, params); -} - -void gl4_0compat_glTexParameterIiv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterIiv(target, pname, params); -} - -void gl4_0compat_glUniform4uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4uiv(location, count, value); -} - -void gl4_0compat_glUniform3uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3uiv(location, count, value); -} - -void gl4_0compat_glUniform2uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2uiv(location, count, value); -} - -void gl4_0compat_glUniform1uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1uiv(location, count, value); -} - -void gl4_0compat_glUniform4ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4ui(location, v0, v1, v2, v3); -} - -void gl4_0compat_glUniform3ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1, GLuint v2) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3ui(location, v0, v1, v2); -} - -void gl4_0compat_glUniform2ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2ui(location, v0, v1); -} - -void gl4_0compat_glUniform1ui(void *_glfuncs, GLint location, GLuint v0) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1ui(location, v0); -} - -GLint gl4_0compat_glGetFragDataLocation(void *_glfuncs, GLuint program, const GLchar* name) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetFragDataLocation(program, name); -} - -void gl4_0compat_glBindFragDataLocation(void *_glfuncs, GLuint program, GLuint color, const GLchar* name) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindFragDataLocation(program, color, name); -} - -void gl4_0compat_glGetUniformuiv(void *_glfuncs, GLuint program, GLint location, GLuint* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetUniformuiv(program, location, params); -} - -void gl4_0compat_glGetVertexAttribIuiv(void *_glfuncs, GLuint index, GLenum pname, GLuint* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribIuiv(index, pname, params); -} - -void gl4_0compat_glGetVertexAttribIiv(void *_glfuncs, GLuint index, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribIiv(index, pname, params); -} - -void gl4_0compat_glVertexAttribIPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribIPointer(index, size, gltype, stride, pointer); -} - -void gl4_0compat_glEndConditionalRender(void *_glfuncs) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndConditionalRender(); -} - -void gl4_0compat_glBeginConditionalRender(void *_glfuncs, GLuint id, GLenum mode) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBeginConditionalRender(id, mode); -} - -void gl4_0compat_glClampColor(void *_glfuncs, GLenum target, GLenum clamp) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClampColor(target, clamp); -} - -void gl4_0compat_glGetTransformFeedbackVarying(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* gltype, GLchar* name) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTransformFeedbackVarying(program, index, bufSize, length, size, gltype, name); -} - -void gl4_0compat_glBindBufferBase(void *_glfuncs, GLenum target, GLuint index, GLuint buffer) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindBufferBase(target, index, buffer); -} - -void gl4_0compat_glBindBufferRange(void *_glfuncs, GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindBufferRange(target, index, buffer, offset, size); -} - -void gl4_0compat_glEndTransformFeedback(void *_glfuncs) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndTransformFeedback(); -} - -void gl4_0compat_glBeginTransformFeedback(void *_glfuncs, GLenum primitiveMode) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBeginTransformFeedback(primitiveMode); -} - -GLboolean gl4_0compat_glIsEnabledi(void *_glfuncs, GLenum target, GLuint index) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsEnabledi(target, index); -} - -void gl4_0compat_glDisablei(void *_glfuncs, GLenum target, GLuint index) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDisablei(target, index); -} - -void gl4_0compat_glEnablei(void *_glfuncs, GLenum target, GLuint index) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnablei(target, index); -} - -void gl4_0compat_glGetIntegeri_v(void *_glfuncs, GLenum target, GLuint index, GLint* data) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetIntegeri_v(target, index, data); -} - -void gl4_0compat_glGetBooleani_v(void *_glfuncs, GLenum target, GLuint index, GLboolean* data) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBooleani_v(target, index, data); -} - -void gl4_0compat_glColorMaski(void *_glfuncs, GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorMaski(index, r, g, b, a); -} - -void gl4_0compat_glCopyBufferSubData(void *_glfuncs, GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyBufferSubData(readTarget, writeTarget, readOffset, writeOffset, size); -} - -void gl4_0compat_glUniformBlockBinding(void *_glfuncs, GLuint program, GLuint v0, GLuint v1) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformBlockBinding(program, v0, v1); -} - -void gl4_0compat_glGetActiveUniformBlockName(void *_glfuncs, GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformBlockName) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniformBlockName(program, uniformBlockIndex, bufSize, length, uniformBlockName); -} - -void gl4_0compat_glGetActiveUniformBlockiv(void *_glfuncs, GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniformBlockiv(program, uniformBlockIndex, pname, params); -} - -GLuint gl4_0compat_glGetUniformBlockIndex(void *_glfuncs, GLuint program, const GLchar* uniformBlockName) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetUniformBlockIndex(program, uniformBlockName); -} - -void gl4_0compat_glGetActiveUniformName(void *_glfuncs, GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformName) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniformName(program, uniformIndex, bufSize, length, uniformName); -} - -void gl4_0compat_glGetActiveUniformsiv(void *_glfuncs, GLuint program, GLsizei uniformCount, const GLuint* uniformIndices, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniformsiv(program, uniformCount, uniformIndices, pname, params); -} - -void gl4_0compat_glPrimitiveRestartIndex(void *_glfuncs, GLuint index) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPrimitiveRestartIndex(index); -} - -void gl4_0compat_glTexBuffer(void *_glfuncs, GLenum target, GLenum internalFormat, GLuint buffer) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexBuffer(target, internalFormat, buffer); -} - -void gl4_0compat_glDrawElementsInstanced(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLsizei instancecount) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElementsInstanced(mode, count, gltype, indices, instancecount); -} - -void gl4_0compat_glDrawArraysInstanced(void *_glfuncs, GLenum mode, GLint first, GLsizei count, GLsizei instancecount) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawArraysInstanced(mode, first, count, instancecount); -} - -void gl4_0compat_glSampleMaski(void *_glfuncs, GLuint index, GLbitfield mask) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSampleMaski(index, mask); -} - -void gl4_0compat_glGetMultisamplefv(void *_glfuncs, GLenum pname, GLuint index, GLfloat* val) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMultisamplefv(pname, index, val); -} - -void gl4_0compat_glTexImage3DMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage3DMultisample(target, samples, internalFormat, width, height, depth, fixedsamplelocations); -} - -void gl4_0compat_glTexImage2DMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage2DMultisample(target, samples, internalFormat, width, height, fixedsamplelocations); -} - -void gl4_0compat_glGetSynciv(void *_glfuncs, GLsync sync, GLenum pname, GLsizei bufSize, GLsizei* length, GLint* values) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetSynciv(sync, pname, bufSize, length, values); -} - -void gl4_0compat_glGetInteger64v(void *_glfuncs, GLenum pname, GLint64* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetInteger64v(pname, params); -} - -void gl4_0compat_glWaitSync(void *_glfuncs, GLsync sync, GLbitfield flags, GLuint64 timeout) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWaitSync(sync, flags, timeout); -} - -GLenum gl4_0compat_glClientWaitSync(void *_glfuncs, GLsync sync, GLbitfield flags, GLuint64 timeout) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glClientWaitSync(sync, flags, timeout); -} - -void gl4_0compat_glDeleteSync(void *_glfuncs, GLsync sync) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteSync(sync); -} - -GLboolean gl4_0compat_glIsSync(void *_glfuncs, GLsync sync) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsSync(sync); -} - -GLsync gl4_0compat_glFenceSync(void *_glfuncs, GLenum condition, GLbitfield flags) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glFenceSync(condition, flags); -} - -void gl4_0compat_glProvokingVertex(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProvokingVertex(mode); -} - -void gl4_0compat_glDrawElementsInstancedBaseVertex(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLsizei instancecount, GLint basevertex) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElementsInstancedBaseVertex(mode, count, gltype, indices, instancecount, basevertex); -} - -void gl4_0compat_glDrawRangeElementsBaseVertex(void *_glfuncs, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum gltype, const GLvoid* indices, GLint basevertex) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawRangeElementsBaseVertex(mode, start, end, count, gltype, indices, basevertex); -} - -void gl4_0compat_glDrawElementsBaseVertex(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLint basevertex) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElementsBaseVertex(mode, count, gltype, indices, basevertex); -} - -void gl4_0compat_glFramebufferTexture(void *_glfuncs, GLenum target, GLenum attachment, GLuint texture, GLint level) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTexture(target, attachment, texture, level); -} - -void gl4_0compat_glGetBufferParameteri64v(void *_glfuncs, GLenum target, GLenum pname, GLint64* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBufferParameteri64v(target, pname, params); -} - -void gl4_0compat_glGetInteger64i_v(void *_glfuncs, GLenum target, GLuint index, GLint64* data) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetInteger64i_v(target, index, data); -} - -void gl4_0compat_glVertexAttribP4uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP4uiv(index, gltype, normalized, value); -} - -void gl4_0compat_glVertexAttribP4ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP4ui(index, gltype, normalized, value); -} - -void gl4_0compat_glVertexAttribP3uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP3uiv(index, gltype, normalized, value); -} - -void gl4_0compat_glVertexAttribP3ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP3ui(index, gltype, normalized, value); -} - -void gl4_0compat_glVertexAttribP2uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP2uiv(index, gltype, normalized, value); -} - -void gl4_0compat_glVertexAttribP2ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP2ui(index, gltype, normalized, value); -} - -void gl4_0compat_glVertexAttribP1uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP1uiv(index, gltype, normalized, value); -} - -void gl4_0compat_glVertexAttribP1ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP1ui(index, gltype, normalized, value); -} - -void gl4_0compat_glSecondaryColorP3uiv(void *_glfuncs, GLenum gltype, const GLuint* color) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColorP3uiv(gltype, color); -} - -void gl4_0compat_glSecondaryColorP3ui(void *_glfuncs, GLenum gltype, GLuint color) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColorP3ui(gltype, color); -} - -void gl4_0compat_glColorP4uiv(void *_glfuncs, GLenum gltype, const GLuint* color) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorP4uiv(gltype, color); -} - -void gl4_0compat_glColorP4ui(void *_glfuncs, GLenum gltype, GLuint color) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorP4ui(gltype, color); -} - -void gl4_0compat_glColorP3uiv(void *_glfuncs, GLenum gltype, const GLuint* color) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorP3uiv(gltype, color); -} - -void gl4_0compat_glColorP3ui(void *_glfuncs, GLenum gltype, GLuint color) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorP3ui(gltype, color); -} - -void gl4_0compat_glNormalP3uiv(void *_glfuncs, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormalP3uiv(gltype, coords); -} - -void gl4_0compat_glNormalP3ui(void *_glfuncs, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormalP3ui(gltype, coords); -} - -void gl4_0compat_glMultiTexCoordP4uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP4uiv(texture, gltype, coords); -} - -void gl4_0compat_glMultiTexCoordP4ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP4ui(texture, gltype, coords); -} - -void gl4_0compat_glMultiTexCoordP3uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP3uiv(texture, gltype, coords); -} - -void gl4_0compat_glMultiTexCoordP3ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP3ui(texture, gltype, coords); -} - -void gl4_0compat_glMultiTexCoordP2uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP2uiv(texture, gltype, coords); -} - -void gl4_0compat_glMultiTexCoordP2ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP2ui(texture, gltype, coords); -} - -void gl4_0compat_glMultiTexCoordP1uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP1uiv(texture, gltype, coords); -} - -void gl4_0compat_glMultiTexCoordP1ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP1ui(texture, gltype, coords); -} - -void gl4_0compat_glTexCoordP4uiv(void *_glfuncs, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP4uiv(gltype, coords); -} - -void gl4_0compat_glTexCoordP4ui(void *_glfuncs, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP4ui(gltype, coords); -} - -void gl4_0compat_glTexCoordP3uiv(void *_glfuncs, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP3uiv(gltype, coords); -} - -void gl4_0compat_glTexCoordP3ui(void *_glfuncs, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP3ui(gltype, coords); -} - -void gl4_0compat_glTexCoordP2uiv(void *_glfuncs, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP2uiv(gltype, coords); -} - -void gl4_0compat_glTexCoordP2ui(void *_glfuncs, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP2ui(gltype, coords); -} - -void gl4_0compat_glTexCoordP1uiv(void *_glfuncs, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP1uiv(gltype, coords); -} - -void gl4_0compat_glTexCoordP1ui(void *_glfuncs, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP1ui(gltype, coords); -} - -void gl4_0compat_glVertexP4uiv(void *_glfuncs, GLenum gltype, const GLuint* value) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexP4uiv(gltype, value); -} - -void gl4_0compat_glVertexP4ui(void *_glfuncs, GLenum gltype, GLuint value) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexP4ui(gltype, value); -} - -void gl4_0compat_glVertexP3uiv(void *_glfuncs, GLenum gltype, const GLuint* value) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexP3uiv(gltype, value); -} - -void gl4_0compat_glVertexP3ui(void *_glfuncs, GLenum gltype, GLuint value) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexP3ui(gltype, value); -} - -void gl4_0compat_glVertexP2uiv(void *_glfuncs, GLenum gltype, const GLuint* value) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexP2uiv(gltype, value); -} - -void gl4_0compat_glVertexP2ui(void *_glfuncs, GLenum gltype, GLuint value) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexP2ui(gltype, value); -} - -void gl4_0compat_glGetQueryObjectui64v(void *_glfuncs, GLuint id, GLenum pname, GLuint64* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryObjectui64v(id, pname, params); -} - -void gl4_0compat_glGetQueryObjecti64v(void *_glfuncs, GLuint id, GLenum pname, GLint64* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryObjecti64v(id, pname, params); -} - -void gl4_0compat_glQueryCounter(void *_glfuncs, GLuint id, GLenum target) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glQueryCounter(id, target); -} - -void gl4_0compat_glGetSamplerParameterIuiv(void *_glfuncs, GLuint sampler, GLenum pname, GLuint* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetSamplerParameterIuiv(sampler, pname, params); -} - -void gl4_0compat_glGetSamplerParameterfv(void *_glfuncs, GLuint sampler, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetSamplerParameterfv(sampler, pname, params); -} - -void gl4_0compat_glGetSamplerParameterIiv(void *_glfuncs, GLuint sampler, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetSamplerParameterIiv(sampler, pname, params); -} - -void gl4_0compat_glGetSamplerParameteriv(void *_glfuncs, GLuint sampler, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetSamplerParameteriv(sampler, pname, params); -} - -void gl4_0compat_glSamplerParameterIuiv(void *_glfuncs, GLuint sampler, GLenum pname, const GLuint* param) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSamplerParameterIuiv(sampler, pname, param); -} - -void gl4_0compat_glSamplerParameterIiv(void *_glfuncs, GLuint sampler, GLenum pname, const GLint* param) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSamplerParameterIiv(sampler, pname, param); -} - -void gl4_0compat_glSamplerParameterfv(void *_glfuncs, GLuint sampler, GLenum pname, const GLfloat* param) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSamplerParameterfv(sampler, pname, param); -} - -void gl4_0compat_glSamplerParameterf(void *_glfuncs, GLuint sampler, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSamplerParameterf(sampler, pname, param); -} - -void gl4_0compat_glSamplerParameteriv(void *_glfuncs, GLuint sampler, GLenum pname, const GLint* param) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSamplerParameteriv(sampler, pname, param); -} - -void gl4_0compat_glSamplerParameteri(void *_glfuncs, GLuint sampler, GLenum pname, GLint param) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSamplerParameteri(sampler, pname, param); -} - -void gl4_0compat_glBindSampler(void *_glfuncs, GLuint unit, GLuint sampler) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindSampler(unit, sampler); -} - -GLboolean gl4_0compat_glIsSampler(void *_glfuncs, GLuint sampler) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsSampler(sampler); -} - -void gl4_0compat_glDeleteSamplers(void *_glfuncs, GLsizei count, const GLuint* samplers) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteSamplers(count, samplers); -} - -void gl4_0compat_glGenSamplers(void *_glfuncs, GLsizei count, GLuint* samplers) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenSamplers(count, samplers); -} - -GLint gl4_0compat_glGetFragDataIndex(void *_glfuncs, GLuint program, const GLchar* name) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetFragDataIndex(program, name); -} - -void gl4_0compat_glBindFragDataLocationIndexed(void *_glfuncs, GLuint program, GLuint colorNumber, GLuint index, const GLchar* name) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindFragDataLocationIndexed(program, colorNumber, index, name); -} - -void gl4_0compat_glVertexAttribDivisor(void *_glfuncs, GLuint index, GLuint divisor) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribDivisor(index, divisor); -} - -void gl4_0compat_glGetQueryIndexediv(void *_glfuncs, GLenum target, GLuint index, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryIndexediv(target, index, pname, params); -} - -void gl4_0compat_glEndQueryIndexed(void *_glfuncs, GLenum target, GLuint index) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndQueryIndexed(target, index); -} - -void gl4_0compat_glBeginQueryIndexed(void *_glfuncs, GLenum target, GLuint index, GLuint id) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBeginQueryIndexed(target, index, id); -} - -void gl4_0compat_glDrawTransformFeedbackStream(void *_glfuncs, GLenum mode, GLuint id, GLuint stream) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawTransformFeedbackStream(mode, id, stream); -} - -void gl4_0compat_glDrawTransformFeedback(void *_glfuncs, GLenum mode, GLuint id) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawTransformFeedback(mode, id); -} - -void gl4_0compat_glResumeTransformFeedback(void *_glfuncs) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glResumeTransformFeedback(); -} - -void gl4_0compat_glPauseTransformFeedback(void *_glfuncs) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPauseTransformFeedback(); -} - -GLboolean gl4_0compat_glIsTransformFeedback(void *_glfuncs, GLuint id) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsTransformFeedback(id); -} - -void gl4_0compat_glGenTransformFeedbacks(void *_glfuncs, GLsizei n, GLuint* ids) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenTransformFeedbacks(n, ids); -} - -void gl4_0compat_glDeleteTransformFeedbacks(void *_glfuncs, GLsizei n, const GLuint* ids) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteTransformFeedbacks(n, ids); -} - -void gl4_0compat_glBindTransformFeedback(void *_glfuncs, GLenum target, GLuint id) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindTransformFeedback(target, id); -} - -void gl4_0compat_glPatchParameterfv(void *_glfuncs, GLenum pname, const GLfloat* values) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPatchParameterfv(pname, values); -} - -void gl4_0compat_glPatchParameteri(void *_glfuncs, GLenum pname, GLint value) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPatchParameteri(pname, value); -} - -void gl4_0compat_glGetProgramStageiv(void *_glfuncs, GLuint program, GLenum shadertype, GLenum pname, GLint* values) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetProgramStageiv(program, shadertype, pname, values); -} - -void gl4_0compat_glGetUniformSubroutineuiv(void *_glfuncs, GLenum shadertype, GLint location, GLuint* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetUniformSubroutineuiv(shadertype, location, params); -} - -void gl4_0compat_glUniformSubroutinesuiv(void *_glfuncs, GLenum shadertype, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformSubroutinesuiv(shadertype, count, value); -} - -void gl4_0compat_glGetActiveSubroutineName(void *_glfuncs, GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei* length, GLchar* name) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveSubroutineName(program, shadertype, index, bufSize, length, name); -} - -void gl4_0compat_glGetActiveSubroutineUniformName(void *_glfuncs, GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei* length, GLchar* name) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveSubroutineUniformName(program, shadertype, index, bufSize, length, name); -} - -void gl4_0compat_glGetActiveSubroutineUniformiv(void *_glfuncs, GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint* values) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveSubroutineUniformiv(program, shadertype, index, pname, values); -} - -GLuint gl4_0compat_glGetSubroutineIndex(void *_glfuncs, GLuint program, GLenum shadertype, const GLchar* name) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetSubroutineIndex(program, shadertype, name); -} - -GLint gl4_0compat_glGetSubroutineUniformLocation(void *_glfuncs, GLuint program, GLenum shadertype, const GLchar* name) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetSubroutineUniformLocation(program, shadertype, name); -} - -void gl4_0compat_glGetUniformdv(void *_glfuncs, GLuint program, GLint location, GLdouble* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetUniformdv(program, location, params); -} - -void gl4_0compat_glUniformMatrix4x3dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4x3dv(location, count, transpose, value); -} - -void gl4_0compat_glUniformMatrix4x2dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4x2dv(location, count, transpose, value); -} - -void gl4_0compat_glUniformMatrix3x4dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3x4dv(location, count, transpose, value); -} - -void gl4_0compat_glUniformMatrix3x2dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3x2dv(location, count, transpose, value); -} - -void gl4_0compat_glUniformMatrix2x4dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2x4dv(location, count, transpose, value); -} - -void gl4_0compat_glUniformMatrix2x3dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2x3dv(location, count, transpose, value); -} - -void gl4_0compat_glUniformMatrix4dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4dv(location, count, transpose, value); -} - -void gl4_0compat_glUniformMatrix3dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3dv(location, count, transpose, value); -} - -void gl4_0compat_glUniformMatrix2dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2dv(location, count, transpose, value); -} - -void gl4_0compat_glUniform4dv(void *_glfuncs, GLint location, GLsizei count, const GLdouble* value) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4dv(location, count, value); -} - -void gl4_0compat_glUniform3dv(void *_glfuncs, GLint location, GLsizei count, const GLdouble* value) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3dv(location, count, value); -} - -void gl4_0compat_glUniform2dv(void *_glfuncs, GLint location, GLsizei count, const GLdouble* value) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2dv(location, count, value); -} - -void gl4_0compat_glUniform1dv(void *_glfuncs, GLint location, GLsizei count, const GLdouble* value) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1dv(location, count, value); -} - -void gl4_0compat_glUniform4d(void *_glfuncs, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4d(location, v0, v1, v2, v3); -} - -void gl4_0compat_glUniform3d(void *_glfuncs, GLint location, GLdouble v0, GLdouble v1, GLdouble v2) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3d(location, v0, v1, v2); -} - -void gl4_0compat_glUniform2d(void *_glfuncs, GLint location, GLdouble v0, GLdouble v1) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2d(location, v0, v1); -} - -void gl4_0compat_glUniform1d(void *_glfuncs, GLint location, GLdouble v0) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1d(location, v0); -} - -void gl4_0compat_glDrawElementsIndirect(void *_glfuncs, GLenum mode, GLenum gltype, const GLvoid* indirect) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElementsIndirect(mode, gltype, indirect); -} - -void gl4_0compat_glDrawArraysIndirect(void *_glfuncs, GLenum mode, const GLvoid* indirect) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawArraysIndirect(mode, indirect); -} - -void gl4_0compat_glBlendFuncSeparatei(void *_glfuncs, GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendFuncSeparatei(buf, srcRGB, dstRGB, srcAlpha, dstAlpha); -} - -void gl4_0compat_glBlendFunci(void *_glfuncs, GLuint buf, GLenum src, GLenum dst) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendFunci(buf, src, dst); -} - -void gl4_0compat_glBlendEquationSeparatei(void *_glfuncs, GLuint buf, GLenum modeRGB, GLenum modeAlpha) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendEquationSeparatei(buf, modeRGB, modeAlpha); -} - -void gl4_0compat_glBlendEquationi(void *_glfuncs, GLuint buf, GLenum mode) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendEquationi(buf, mode); -} - -void gl4_0compat_glMinSampleShading(void *_glfuncs, GLfloat value) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMinSampleShading(value); -} - -void gl4_0compat_glTranslatef(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTranslatef(x, y, z); -} - -void gl4_0compat_glTranslated(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTranslated(x, y, z); -} - -void gl4_0compat_glScalef(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScalef(x, y, z); -} - -void gl4_0compat_glScaled(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScaled(x, y, z); -} - -void gl4_0compat_glRotatef(void *_glfuncs, GLfloat angle, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRotatef(angle, x, y, z); -} - -void gl4_0compat_glRotated(void *_glfuncs, GLdouble angle, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRotated(angle, x, y, z); -} - -void gl4_0compat_glPushMatrix(void *_glfuncs) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPushMatrix(); -} - -void gl4_0compat_glPopMatrix(void *_glfuncs) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPopMatrix(); -} - -void gl4_0compat_glOrtho(void *_glfuncs, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glOrtho(left, right, bottom, top, zNear, zFar); -} - -void gl4_0compat_glMultMatrixd(void *_glfuncs, const GLdouble* m) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultMatrixd(m); -} - -void gl4_0compat_glMultMatrixf(void *_glfuncs, const GLfloat* m) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultMatrixf(m); -} - -void gl4_0compat_glMatrixMode(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMatrixMode(mode); -} - -void gl4_0compat_glLoadMatrixd(void *_glfuncs, const GLdouble* m) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadMatrixd(m); -} - -void gl4_0compat_glLoadMatrixf(void *_glfuncs, const GLfloat* m) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadMatrixf(m); -} - -void gl4_0compat_glLoadIdentity(void *_glfuncs) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadIdentity(); -} - -void gl4_0compat_glFrustum(void *_glfuncs, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFrustum(left, right, bottom, top, zNear, zFar); -} - -GLboolean gl4_0compat_glIsList(void *_glfuncs, GLuint list) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsList(list); -} - -void gl4_0compat_glGetTexGeniv(void *_glfuncs, GLenum coord, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexGeniv(coord, pname, params); -} - -void gl4_0compat_glGetTexGenfv(void *_glfuncs, GLenum coord, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexGenfv(coord, pname, params); -} - -void gl4_0compat_glGetTexGendv(void *_glfuncs, GLenum coord, GLenum pname, GLdouble* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexGendv(coord, pname, params); -} - -void gl4_0compat_glGetTexEnviv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexEnviv(target, pname, params); -} - -void gl4_0compat_glGetTexEnvfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexEnvfv(target, pname, params); -} - -void gl4_0compat_glGetPolygonStipple(void *_glfuncs, GLubyte* mask) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetPolygonStipple(mask); -} - -void gl4_0compat_glGetPixelMapusv(void *_glfuncs, GLenum glmap, GLushort* values) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetPixelMapusv(glmap, values); -} - -void gl4_0compat_glGetPixelMapuiv(void *_glfuncs, GLenum glmap, GLuint* values) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetPixelMapuiv(glmap, values); -} - -void gl4_0compat_glGetPixelMapfv(void *_glfuncs, GLenum glmap, GLfloat* values) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetPixelMapfv(glmap, values); -} - -void gl4_0compat_glGetMaterialiv(void *_glfuncs, GLenum face, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMaterialiv(face, pname, params); -} - -void gl4_0compat_glGetMaterialfv(void *_glfuncs, GLenum face, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMaterialfv(face, pname, params); -} - -void gl4_0compat_glGetMapiv(void *_glfuncs, GLenum target, GLenum query, GLint* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMapiv(target, query, v); -} - -void gl4_0compat_glGetMapfv(void *_glfuncs, GLenum target, GLenum query, GLfloat* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMapfv(target, query, v); -} - -void gl4_0compat_glGetMapdv(void *_glfuncs, GLenum target, GLenum query, GLdouble* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMapdv(target, query, v); -} - -void gl4_0compat_glGetLightiv(void *_glfuncs, GLenum light, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetLightiv(light, pname, params); -} - -void gl4_0compat_glGetLightfv(void *_glfuncs, GLenum light, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetLightfv(light, pname, params); -} - -void gl4_0compat_glGetClipPlane(void *_glfuncs, GLenum plane, GLdouble* equation) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetClipPlane(plane, equation); -} - -void gl4_0compat_glDrawPixels(void *_glfuncs, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawPixels(width, height, format, gltype, pixels); -} - -void gl4_0compat_glCopyPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum gltype) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyPixels(x, y, width, height, gltype); -} - -void gl4_0compat_glPixelMapusv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLushort* values) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelMapusv(glmap, mapsize, values); -} - -void gl4_0compat_glPixelMapuiv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLuint* values) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelMapuiv(glmap, mapsize, values); -} - -void gl4_0compat_glPixelMapfv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLfloat* values) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelMapfv(glmap, mapsize, values); -} - -void gl4_0compat_glPixelTransferi(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelTransferi(pname, param); -} - -void gl4_0compat_glPixelTransferf(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelTransferf(pname, param); -} - -void gl4_0compat_glPixelZoom(void *_glfuncs, GLfloat xfactor, GLfloat yfactor) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelZoom(xfactor, yfactor); -} - -void gl4_0compat_glAlphaFunc(void *_glfuncs, GLenum glfunc, GLfloat ref) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glAlphaFunc(glfunc, ref); -} - -void gl4_0compat_glEvalPoint2(void *_glfuncs, GLint i, GLint j) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalPoint2(i, j); -} - -void gl4_0compat_glEvalMesh2(void *_glfuncs, GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalMesh2(mode, i1, i2, j1, j2); -} - -void gl4_0compat_glEvalPoint1(void *_glfuncs, GLint i) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalPoint1(i); -} - -void gl4_0compat_glEvalMesh1(void *_glfuncs, GLenum mode, GLint i1, GLint i2) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalMesh1(mode, i1, i2); -} - -void gl4_0compat_glEvalCoord2fv(void *_glfuncs, const GLfloat* u) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord2fv(u); -} - -void gl4_0compat_glEvalCoord2f(void *_glfuncs, GLfloat u, GLfloat v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord2f(u, v); -} - -void gl4_0compat_glEvalCoord2dv(void *_glfuncs, const GLdouble* u) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord2dv(u); -} - -void gl4_0compat_glEvalCoord2d(void *_glfuncs, GLdouble u, GLdouble v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord2d(u, v); -} - -void gl4_0compat_glEvalCoord1fv(void *_glfuncs, const GLfloat* u) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord1fv(u); -} - -void gl4_0compat_glEvalCoord1f(void *_glfuncs, GLfloat u) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord1f(u); -} - -void gl4_0compat_glEvalCoord1dv(void *_glfuncs, const GLdouble* u) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord1dv(u); -} - -void gl4_0compat_glEvalCoord1d(void *_glfuncs, GLdouble u) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord1d(u); -} - -void gl4_0compat_glMapGrid2f(void *_glfuncs, GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMapGrid2f(un, u1, u2, vn, v1, v2); -} - -void gl4_0compat_glMapGrid2d(void *_glfuncs, GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMapGrid2d(un, u1, u2, vn, v1, v2); -} - -void gl4_0compat_glMapGrid1f(void *_glfuncs, GLint un, GLfloat u1, GLfloat u2) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMapGrid1f(un, u1, u2); -} - -void gl4_0compat_glMapGrid1d(void *_glfuncs, GLint un, GLdouble u1, GLdouble u2) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMapGrid1d(un, u1, u2); -} - -void gl4_0compat_glMap2f(void *_glfuncs, GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat* points) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMap2f(target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points); -} - -void gl4_0compat_glMap2d(void *_glfuncs, GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble* points) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMap2d(target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points); -} - -void gl4_0compat_glMap1f(void *_glfuncs, GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat* points) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMap1f(target, u1, u2, stride, order, points); -} - -void gl4_0compat_glMap1d(void *_glfuncs, GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble* points) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMap1d(target, u1, u2, stride, order, points); -} - -void gl4_0compat_glPushAttrib(void *_glfuncs, GLbitfield mask) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPushAttrib(mask); -} - -void gl4_0compat_glPopAttrib(void *_glfuncs) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPopAttrib(); -} - -void gl4_0compat_glAccum(void *_glfuncs, GLenum op, GLfloat value) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glAccum(op, value); -} - -void gl4_0compat_glIndexMask(void *_glfuncs, GLuint mask) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexMask(mask); -} - -void gl4_0compat_glClearIndex(void *_glfuncs, GLfloat c) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearIndex(c); -} - -void gl4_0compat_glClearAccum(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearAccum(red, green, blue, alpha); -} - -void gl4_0compat_glPushName(void *_glfuncs, GLuint name) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPushName(name); -} - -void gl4_0compat_glPopName(void *_glfuncs) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPopName(); -} - -void gl4_0compat_glPassThrough(void *_glfuncs, GLfloat token) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPassThrough(token); -} - -void gl4_0compat_glLoadName(void *_glfuncs, GLuint name) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadName(name); -} - -void gl4_0compat_glInitNames(void *_glfuncs) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glInitNames(); -} - -GLint gl4_0compat_glRenderMode(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glRenderMode(mode); -} - -void gl4_0compat_glSelectBuffer(void *_glfuncs, GLsizei size, GLuint* buffer) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSelectBuffer(size, buffer); -} - -void gl4_0compat_glFeedbackBuffer(void *_glfuncs, GLsizei size, GLenum gltype, GLfloat* buffer) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFeedbackBuffer(size, gltype, buffer); -} - -void gl4_0compat_glTexGeniv(void *_glfuncs, GLenum coord, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGeniv(coord, pname, params); -} - -void gl4_0compat_glTexGeni(void *_glfuncs, GLenum coord, GLenum pname, GLint param) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGeni(coord, pname, param); -} - -void gl4_0compat_glTexGenfv(void *_glfuncs, GLenum coord, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGenfv(coord, pname, params); -} - -void gl4_0compat_glTexGenf(void *_glfuncs, GLenum coord, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGenf(coord, pname, param); -} - -void gl4_0compat_glTexGendv(void *_glfuncs, GLenum coord, GLenum pname, const GLdouble* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGendv(coord, pname, params); -} - -void gl4_0compat_glTexGend(void *_glfuncs, GLenum coord, GLenum pname, GLdouble param) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGend(coord, pname, param); -} - -void gl4_0compat_glTexEnviv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexEnviv(target, pname, params); -} - -void gl4_0compat_glTexEnvi(void *_glfuncs, GLenum target, GLenum pname, GLint param) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexEnvi(target, pname, param); -} - -void gl4_0compat_glTexEnvfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexEnvfv(target, pname, params); -} - -void gl4_0compat_glTexEnvf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexEnvf(target, pname, param); -} - -void gl4_0compat_glShadeModel(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glShadeModel(mode); -} - -void gl4_0compat_glPolygonStipple(void *_glfuncs, const GLubyte* mask) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPolygonStipple(mask); -} - -void gl4_0compat_glMaterialiv(void *_glfuncs, GLenum face, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMaterialiv(face, pname, params); -} - -void gl4_0compat_glMateriali(void *_glfuncs, GLenum face, GLenum pname, GLint param) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMateriali(face, pname, param); -} - -void gl4_0compat_glMaterialfv(void *_glfuncs, GLenum face, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMaterialfv(face, pname, params); -} - -void gl4_0compat_glMaterialf(void *_glfuncs, GLenum face, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMaterialf(face, pname, param); -} - -void gl4_0compat_glLineStipple(void *_glfuncs, GLint factor, GLushort pattern) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLineStipple(factor, pattern); -} - -void gl4_0compat_glLightModeliv(void *_glfuncs, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightModeliv(pname, params); -} - -void gl4_0compat_glLightModeli(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightModeli(pname, param); -} - -void gl4_0compat_glLightModelfv(void *_glfuncs, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightModelfv(pname, params); -} - -void gl4_0compat_glLightModelf(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightModelf(pname, param); -} - -void gl4_0compat_glLightiv(void *_glfuncs, GLenum light, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightiv(light, pname, params); -} - -void gl4_0compat_glLighti(void *_glfuncs, GLenum light, GLenum pname, GLint param) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLighti(light, pname, param); -} - -void gl4_0compat_glLightfv(void *_glfuncs, GLenum light, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightfv(light, pname, params); -} - -void gl4_0compat_glLightf(void *_glfuncs, GLenum light, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightf(light, pname, param); -} - -void gl4_0compat_glFogiv(void *_glfuncs, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogiv(pname, params); -} - -void gl4_0compat_glFogi(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogi(pname, param); -} - -void gl4_0compat_glFogfv(void *_glfuncs, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogfv(pname, params); -} - -void gl4_0compat_glFogf(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogf(pname, param); -} - -void gl4_0compat_glColorMaterial(void *_glfuncs, GLenum face, GLenum mode) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorMaterial(face, mode); -} - -void gl4_0compat_glClipPlane(void *_glfuncs, GLenum plane, const GLdouble* equation) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClipPlane(plane, equation); -} - -void gl4_0compat_glVertex4sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4sv(v); -} - -void gl4_0compat_glVertex4s(void *_glfuncs, GLshort x, GLshort y, GLshort z, GLshort w) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4s(x, y, z, w); -} - -void gl4_0compat_glVertex4iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4iv(v); -} - -void gl4_0compat_glVertex4i(void *_glfuncs, GLint x, GLint y, GLint z, GLint w) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4i(x, y, z, w); -} - -void gl4_0compat_glVertex4fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4fv(v); -} - -void gl4_0compat_glVertex4f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z, GLfloat w) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4f(x, y, z, w); -} - -void gl4_0compat_glVertex4dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4dv(v); -} - -void gl4_0compat_glVertex4d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z, GLdouble w) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4d(x, y, z, w); -} - -void gl4_0compat_glVertex3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3sv(v); -} - -void gl4_0compat_glVertex3s(void *_glfuncs, GLshort x, GLshort y, GLshort z) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3s(x, y, z); -} - -void gl4_0compat_glVertex3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3iv(v); -} - -void gl4_0compat_glVertex3i(void *_glfuncs, GLint x, GLint y, GLint z) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3i(x, y, z); -} - -void gl4_0compat_glVertex3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3fv(v); -} - -void gl4_0compat_glVertex3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3f(x, y, z); -} - -void gl4_0compat_glVertex3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3dv(v); -} - -void gl4_0compat_glVertex3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3d(x, y, z); -} - -void gl4_0compat_glVertex2sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2sv(v); -} - -void gl4_0compat_glVertex2s(void *_glfuncs, GLshort x, GLshort y) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2s(x, y); -} - -void gl4_0compat_glVertex2iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2iv(v); -} - -void gl4_0compat_glVertex2i(void *_glfuncs, GLint x, GLint y) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2i(x, y); -} - -void gl4_0compat_glVertex2fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2fv(v); -} - -void gl4_0compat_glVertex2f(void *_glfuncs, GLfloat x, GLfloat y) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2f(x, y); -} - -void gl4_0compat_glVertex2dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2dv(v); -} - -void gl4_0compat_glVertex2d(void *_glfuncs, GLdouble x, GLdouble y) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2d(x, y); -} - -void gl4_0compat_glTexCoord4sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4sv(v); -} - -void gl4_0compat_glTexCoord4s(void *_glfuncs, GLshort s, GLshort t, GLshort r, GLshort q) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4s(s, t, r, q); -} - -void gl4_0compat_glTexCoord4iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4iv(v); -} - -void gl4_0compat_glTexCoord4i(void *_glfuncs, GLint s, GLint t, GLint r, GLint q) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4i(s, t, r, q); -} - -void gl4_0compat_glTexCoord4fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4fv(v); -} - -void gl4_0compat_glTexCoord4f(void *_glfuncs, GLfloat s, GLfloat t, GLfloat r, GLfloat q) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4f(s, t, r, q); -} - -void gl4_0compat_glTexCoord4dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4dv(v); -} - -void gl4_0compat_glTexCoord4d(void *_glfuncs, GLdouble s, GLdouble t, GLdouble r, GLdouble q) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4d(s, t, r, q); -} - -void gl4_0compat_glTexCoord3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3sv(v); -} - -void gl4_0compat_glTexCoord3s(void *_glfuncs, GLshort s, GLshort t, GLshort r) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3s(s, t, r); -} - -void gl4_0compat_glTexCoord3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3iv(v); -} - -void gl4_0compat_glTexCoord3i(void *_glfuncs, GLint s, GLint t, GLint r) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3i(s, t, r); -} - -void gl4_0compat_glTexCoord3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3fv(v); -} - -void gl4_0compat_glTexCoord3f(void *_glfuncs, GLfloat s, GLfloat t, GLfloat r) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3f(s, t, r); -} - -void gl4_0compat_glTexCoord3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3dv(v); -} - -void gl4_0compat_glTexCoord3d(void *_glfuncs, GLdouble s, GLdouble t, GLdouble r) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3d(s, t, r); -} - -void gl4_0compat_glTexCoord2sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2sv(v); -} - -void gl4_0compat_glTexCoord2s(void *_glfuncs, GLshort s, GLshort t) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2s(s, t); -} - -void gl4_0compat_glTexCoord2iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2iv(v); -} - -void gl4_0compat_glTexCoord2i(void *_glfuncs, GLint s, GLint t) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2i(s, t); -} - -void gl4_0compat_glTexCoord2fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2fv(v); -} - -void gl4_0compat_glTexCoord2f(void *_glfuncs, GLfloat s, GLfloat t) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2f(s, t); -} - -void gl4_0compat_glTexCoord2dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2dv(v); -} - -void gl4_0compat_glTexCoord2d(void *_glfuncs, GLdouble s, GLdouble t) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2d(s, t); -} - -void gl4_0compat_glTexCoord1sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1sv(v); -} - -void gl4_0compat_glTexCoord1s(void *_glfuncs, GLshort s) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1s(s); -} - -void gl4_0compat_glTexCoord1iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1iv(v); -} - -void gl4_0compat_glTexCoord1i(void *_glfuncs, GLint s) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1i(s); -} - -void gl4_0compat_glTexCoord1fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1fv(v); -} - -void gl4_0compat_glTexCoord1f(void *_glfuncs, GLfloat s) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1f(s); -} - -void gl4_0compat_glTexCoord1dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1dv(v); -} - -void gl4_0compat_glTexCoord1d(void *_glfuncs, GLdouble s) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1d(s); -} - -void gl4_0compat_glRectsv(void *_glfuncs, const GLshort* v1, const GLshort* v2) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectsv(v1, v2); -} - -void gl4_0compat_glRects(void *_glfuncs, GLshort x1, GLshort y1, GLshort x2, GLshort y2) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRects(x1, y1, x2, y2); -} - -void gl4_0compat_glRectiv(void *_glfuncs, const GLint* v1, const GLint* v2) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectiv(v1, v2); -} - -void gl4_0compat_glRecti(void *_glfuncs, GLint x1, GLint y1, GLint x2, GLint y2) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRecti(x1, y1, x2, y2); -} - -void gl4_0compat_glRectfv(void *_glfuncs, const GLfloat* v1, const GLfloat* v2) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectfv(v1, v2); -} - -void gl4_0compat_glRectf(void *_glfuncs, GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectf(x1, y1, x2, y2); -} - -void gl4_0compat_glRectdv(void *_glfuncs, const GLdouble* v1, const GLdouble* v2) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectdv(v1, v2); -} - -void gl4_0compat_glRectd(void *_glfuncs, GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectd(x1, y1, x2, y2); -} - -void gl4_0compat_glRasterPos4sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4sv(v); -} - -void gl4_0compat_glRasterPos4s(void *_glfuncs, GLshort x, GLshort y, GLshort z, GLshort w) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4s(x, y, z, w); -} - -void gl4_0compat_glRasterPos4iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4iv(v); -} - -void gl4_0compat_glRasterPos4i(void *_glfuncs, GLint x, GLint y, GLint z, GLint w) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4i(x, y, z, w); -} - -void gl4_0compat_glRasterPos4fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4fv(v); -} - -void gl4_0compat_glRasterPos4f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z, GLfloat w) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4f(x, y, z, w); -} - -void gl4_0compat_glRasterPos4dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4dv(v); -} - -void gl4_0compat_glRasterPos4d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z, GLdouble w) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4d(x, y, z, w); -} - -void gl4_0compat_glRasterPos3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3sv(v); -} - -void gl4_0compat_glRasterPos3s(void *_glfuncs, GLshort x, GLshort y, GLshort z) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3s(x, y, z); -} - -void gl4_0compat_glRasterPos3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3iv(v); -} - -void gl4_0compat_glRasterPos3i(void *_glfuncs, GLint x, GLint y, GLint z) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3i(x, y, z); -} - -void gl4_0compat_glRasterPos3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3fv(v); -} - -void gl4_0compat_glRasterPos3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3f(x, y, z); -} - -void gl4_0compat_glRasterPos3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3dv(v); -} - -void gl4_0compat_glRasterPos3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3d(x, y, z); -} - -void gl4_0compat_glRasterPos2sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2sv(v); -} - -void gl4_0compat_glRasterPos2s(void *_glfuncs, GLshort x, GLshort y) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2s(x, y); -} - -void gl4_0compat_glRasterPos2iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2iv(v); -} - -void gl4_0compat_glRasterPos2i(void *_glfuncs, GLint x, GLint y) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2i(x, y); -} - -void gl4_0compat_glRasterPos2fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2fv(v); -} - -void gl4_0compat_glRasterPos2f(void *_glfuncs, GLfloat x, GLfloat y) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2f(x, y); -} - -void gl4_0compat_glRasterPos2dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2dv(v); -} - -void gl4_0compat_glRasterPos2d(void *_glfuncs, GLdouble x, GLdouble y) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2d(x, y); -} - -void gl4_0compat_glNormal3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3sv(v); -} - -void gl4_0compat_glNormal3s(void *_glfuncs, GLshort nx, GLshort ny, GLshort nz) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3s(nx, ny, nz); -} - -void gl4_0compat_glNormal3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3iv(v); -} - -void gl4_0compat_glNormal3i(void *_glfuncs, GLint nx, GLint ny, GLint nz) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3i(nx, ny, nz); -} - -void gl4_0compat_glNormal3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3fv(v); -} - -void gl4_0compat_glNormal3f(void *_glfuncs, GLfloat nx, GLfloat ny, GLfloat nz) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3f(nx, ny, nz); -} - -void gl4_0compat_glNormal3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3dv(v); -} - -void gl4_0compat_glNormal3d(void *_glfuncs, GLdouble nx, GLdouble ny, GLdouble nz) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3d(nx, ny, nz); -} - -void gl4_0compat_glNormal3bv(void *_glfuncs, const GLbyte* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3bv(v); -} - -void gl4_0compat_glNormal3b(void *_glfuncs, GLbyte nx, GLbyte ny, GLbyte nz) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3b(nx, ny, nz); -} - -void gl4_0compat_glIndexsv(void *_glfuncs, const GLshort* c) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexsv(c); -} - -void gl4_0compat_glIndexs(void *_glfuncs, GLshort c) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexs(c); -} - -void gl4_0compat_glIndexiv(void *_glfuncs, const GLint* c) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexiv(c); -} - -void gl4_0compat_glIndexi(void *_glfuncs, GLint c) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexi(c); -} - -void gl4_0compat_glIndexfv(void *_glfuncs, const GLfloat* c) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexfv(c); -} - -void gl4_0compat_glIndexf(void *_glfuncs, GLfloat c) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexf(c); -} - -void gl4_0compat_glIndexdv(void *_glfuncs, const GLdouble* c) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexdv(c); -} - -void gl4_0compat_glIndexd(void *_glfuncs, GLdouble c) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexd(c); -} - -void gl4_0compat_glEnd(void *_glfuncs) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnd(); -} - -void gl4_0compat_glEdgeFlagv(void *_glfuncs, const GLboolean* flag) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEdgeFlagv(flag); -} - -void gl4_0compat_glEdgeFlag(void *_glfuncs, GLboolean flag) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEdgeFlag(flag); -} - -void gl4_0compat_glColor4usv(void *_glfuncs, const GLushort* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4usv(v); -} - -void gl4_0compat_glColor4us(void *_glfuncs, GLushort red, GLushort green, GLushort blue, GLushort alpha) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4us(red, green, blue, alpha); -} - -void gl4_0compat_glColor4uiv(void *_glfuncs, const GLuint* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4uiv(v); -} - -void gl4_0compat_glColor4ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue, GLuint alpha) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4ui(red, green, blue, alpha); -} - -void gl4_0compat_glColor4ubv(void *_glfuncs, const GLubyte* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4ubv(v); -} - -void gl4_0compat_glColor4ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4ub(red, green, blue, alpha); -} - -void gl4_0compat_glColor4sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4sv(v); -} - -void gl4_0compat_glColor4s(void *_glfuncs, GLshort red, GLshort green, GLshort blue, GLshort alpha) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4s(red, green, blue, alpha); -} - -void gl4_0compat_glColor4iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4iv(v); -} - -void gl4_0compat_glColor4i(void *_glfuncs, GLint red, GLint green, GLint blue, GLint alpha) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4i(red, green, blue, alpha); -} - -void gl4_0compat_glColor4fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4fv(v); -} - -void gl4_0compat_glColor4f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4f(red, green, blue, alpha); -} - -void gl4_0compat_glColor4dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4dv(v); -} - -void gl4_0compat_glColor4d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4d(red, green, blue, alpha); -} - -void gl4_0compat_glColor4bv(void *_glfuncs, const GLbyte* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4bv(v); -} - -void gl4_0compat_glColor4b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4b(red, green, blue, alpha); -} - -void gl4_0compat_glColor3usv(void *_glfuncs, const GLushort* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3usv(v); -} - -void gl4_0compat_glColor3us(void *_glfuncs, GLushort red, GLushort green, GLushort blue) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3us(red, green, blue); -} - -void gl4_0compat_glColor3uiv(void *_glfuncs, const GLuint* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3uiv(v); -} - -void gl4_0compat_glColor3ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3ui(red, green, blue); -} - -void gl4_0compat_glColor3ubv(void *_glfuncs, const GLubyte* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3ubv(v); -} - -void gl4_0compat_glColor3ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3ub(red, green, blue); -} - -void gl4_0compat_glColor3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3sv(v); -} - -void gl4_0compat_glColor3s(void *_glfuncs, GLshort red, GLshort green, GLshort blue) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3s(red, green, blue); -} - -void gl4_0compat_glColor3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3iv(v); -} - -void gl4_0compat_glColor3i(void *_glfuncs, GLint red, GLint green, GLint blue) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3i(red, green, blue); -} - -void gl4_0compat_glColor3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3fv(v); -} - -void gl4_0compat_glColor3f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3f(red, green, blue); -} - -void gl4_0compat_glColor3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3dv(v); -} - -void gl4_0compat_glColor3d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3d(red, green, blue); -} - -void gl4_0compat_glColor3bv(void *_glfuncs, const GLbyte* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3bv(v); -} - -void gl4_0compat_glColor3b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3b(red, green, blue); -} - -void gl4_0compat_glBitmap(void *_glfuncs, GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte* bitmap) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBitmap(width, height, xorig, yorig, xmove, ymove, bitmap); -} - -void gl4_0compat_glBegin(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBegin(mode); -} - -void gl4_0compat_glListBase(void *_glfuncs, GLuint base) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glListBase(base); -} - -GLuint gl4_0compat_glGenLists(void *_glfuncs, GLsizei range_) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGenLists(range_); -} - -void gl4_0compat_glDeleteLists(void *_glfuncs, GLuint list, GLsizei range_) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteLists(list, range_); -} - -void gl4_0compat_glCallLists(void *_glfuncs, GLsizei n, GLenum gltype, const GLvoid* lists) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCallLists(n, gltype, lists); -} - -void gl4_0compat_glCallList(void *_glfuncs, GLuint list) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCallList(list); -} - -void gl4_0compat_glEndList(void *_glfuncs) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndList(); -} - -void gl4_0compat_glNewList(void *_glfuncs, GLuint list, GLenum mode) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNewList(list, mode); -} - -void gl4_0compat_glPushClientAttrib(void *_glfuncs, GLbitfield mask) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPushClientAttrib(mask); -} - -void gl4_0compat_glPopClientAttrib(void *_glfuncs) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPopClientAttrib(); -} - -void gl4_0compat_glPrioritizeTextures(void *_glfuncs, GLsizei n, const GLuint* textures, const GLfloat* priorities) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPrioritizeTextures(n, textures, priorities); -} - -GLboolean gl4_0compat_glAreTexturesResident(void *_glfuncs, GLsizei n, const GLuint* textures, GLboolean* residences) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glAreTexturesResident(n, textures, residences); -} - -void gl4_0compat_glVertexPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexPointer(size, gltype, stride, pointer); -} - -void gl4_0compat_glTexCoordPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordPointer(size, gltype, stride, pointer); -} - -void gl4_0compat_glNormalPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormalPointer(gltype, stride, pointer); -} - -void gl4_0compat_glInterleavedArrays(void *_glfuncs, GLenum format, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glInterleavedArrays(format, stride, pointer); -} - -void gl4_0compat_glIndexPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexPointer(gltype, stride, pointer); -} - -void gl4_0compat_glEnableClientState(void *_glfuncs, GLenum array) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnableClientState(array); -} - -void gl4_0compat_glEdgeFlagPointer(void *_glfuncs, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEdgeFlagPointer(stride, pointer); -} - -void gl4_0compat_glDisableClientState(void *_glfuncs, GLenum array) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDisableClientState(array); -} - -void gl4_0compat_glColorPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorPointer(size, gltype, stride, pointer); -} - -void gl4_0compat_glArrayElement(void *_glfuncs, GLint i) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glArrayElement(i); -} - -void gl4_0compat_glResetMinmax(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glResetMinmax(target); -} - -void gl4_0compat_glResetHistogram(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glResetHistogram(target); -} - -void gl4_0compat_glMinmax(void *_glfuncs, GLenum target, GLenum internalFormat, GLboolean sink) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMinmax(target, internalFormat, sink); -} - -void gl4_0compat_glHistogram(void *_glfuncs, GLenum target, GLsizei width, GLenum internalFormat, GLboolean sink) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glHistogram(target, width, internalFormat, sink); -} - -void gl4_0compat_glGetMinmaxParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMinmaxParameteriv(target, pname, params); -} - -void gl4_0compat_glGetMinmaxParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMinmaxParameterfv(target, pname, params); -} - -void gl4_0compat_glGetMinmax(void *_glfuncs, GLenum target, GLboolean reset, GLenum format, GLenum gltype, GLvoid* values) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMinmax(target, reset, format, gltype, values); -} - -void gl4_0compat_glGetHistogramParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetHistogramParameteriv(target, pname, params); -} - -void gl4_0compat_glGetHistogramParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetHistogramParameterfv(target, pname, params); -} - -void gl4_0compat_glGetHistogram(void *_glfuncs, GLenum target, GLboolean reset, GLenum format, GLenum gltype, GLvoid* values) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetHistogram(target, reset, format, gltype, values); -} - -void gl4_0compat_glSeparableFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* row, const GLvoid* column) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSeparableFilter2D(target, internalFormat, width, height, format, gltype, row, column); -} - -void gl4_0compat_glGetSeparableFilter(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* row, GLvoid* column, GLvoid* span) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetSeparableFilter(target, format, gltype, row, column, span); -} - -void gl4_0compat_glGetConvolutionParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetConvolutionParameteriv(target, pname, params); -} - -void gl4_0compat_glGetConvolutionParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetConvolutionParameterfv(target, pname, params); -} - -void gl4_0compat_glGetConvolutionFilter(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* image) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetConvolutionFilter(target, format, gltype, image); -} - -void gl4_0compat_glCopyConvolutionFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyConvolutionFilter2D(target, internalFormat, x, y, width, height); -} - -void gl4_0compat_glCopyConvolutionFilter1D(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyConvolutionFilter1D(target, internalFormat, x, y, width); -} - -void gl4_0compat_glConvolutionParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionParameteriv(target, pname, params); -} - -void gl4_0compat_glConvolutionParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionParameteri(target, pname, params); -} - -void gl4_0compat_glConvolutionParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionParameterfv(target, pname, params); -} - -void gl4_0compat_glConvolutionParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionParameterf(target, pname, params); -} - -void gl4_0compat_glConvolutionFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* image) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionFilter2D(target, internalFormat, width, height, format, gltype, image); -} - -void gl4_0compat_glConvolutionFilter1D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum gltype, const GLvoid* image) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionFilter1D(target, internalFormat, width, format, gltype, image); -} - -void gl4_0compat_glCopyColorSubTable(void *_glfuncs, GLenum target, GLsizei start, GLint x, GLint y, GLsizei width) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyColorSubTable(target, start, x, y, width); -} - -void gl4_0compat_glColorSubTable(void *_glfuncs, GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum gltype, const GLvoid* data) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorSubTable(target, start, count, format, gltype, data); -} - -void gl4_0compat_glGetColorTableParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetColorTableParameteriv(target, pname, params); -} - -void gl4_0compat_glGetColorTableParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetColorTableParameterfv(target, pname, params); -} - -void gl4_0compat_glGetColorTable(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* table) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetColorTable(target, format, gltype, table); -} - -void gl4_0compat_glCopyColorTable(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyColorTable(target, internalFormat, x, y, width); -} - -void gl4_0compat_glColorTableParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorTableParameteriv(target, pname, params); -} - -void gl4_0compat_glColorTableParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorTableParameterfv(target, pname, params); -} - -void gl4_0compat_glColorTable(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum gltype, const GLvoid* table) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorTable(target, internalFormat, width, format, gltype, table); -} - -void gl4_0compat_glMultTransposeMatrixd(void *_glfuncs, const GLdouble* m) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultTransposeMatrixd(m); -} - -void gl4_0compat_glMultTransposeMatrixf(void *_glfuncs, const GLfloat* m) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultTransposeMatrixf(m); -} - -void gl4_0compat_glLoadTransposeMatrixd(void *_glfuncs, const GLdouble* m) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadTransposeMatrixd(m); -} - -void gl4_0compat_glLoadTransposeMatrixf(void *_glfuncs, const GLfloat* m) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadTransposeMatrixf(m); -} - -void gl4_0compat_glMultiTexCoord4sv(void *_glfuncs, GLenum target, const GLshort* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4sv(target, v); -} - -void gl4_0compat_glMultiTexCoord4s(void *_glfuncs, GLenum target, GLshort s, GLshort t, GLshort r, GLshort q) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4s(target, s, t, r, q); -} - -void gl4_0compat_glMultiTexCoord4iv(void *_glfuncs, GLenum target, const GLint* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4iv(target, v); -} - -void gl4_0compat_glMultiTexCoord4i(void *_glfuncs, GLenum target, GLint s, GLint t, GLint r, GLint q) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4i(target, s, t, r, q); -} - -void gl4_0compat_glMultiTexCoord4fv(void *_glfuncs, GLenum target, const GLfloat* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4fv(target, v); -} - -void gl4_0compat_glMultiTexCoord4f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4f(target, s, t, r, q); -} - -void gl4_0compat_glMultiTexCoord4dv(void *_glfuncs, GLenum target, const GLdouble* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4dv(target, v); -} - -void gl4_0compat_glMultiTexCoord4d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4d(target, s, t, r, q); -} - -void gl4_0compat_glMultiTexCoord3sv(void *_glfuncs, GLenum target, const GLshort* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3sv(target, v); -} - -void gl4_0compat_glMultiTexCoord3s(void *_glfuncs, GLenum target, GLshort s, GLshort t, GLshort r) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3s(target, s, t, r); -} - -void gl4_0compat_glMultiTexCoord3iv(void *_glfuncs, GLenum target, const GLint* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3iv(target, v); -} - -void gl4_0compat_glMultiTexCoord3i(void *_glfuncs, GLenum target, GLint s, GLint t, GLint r) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3i(target, s, t, r); -} - -void gl4_0compat_glMultiTexCoord3fv(void *_glfuncs, GLenum target, const GLfloat* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3fv(target, v); -} - -void gl4_0compat_glMultiTexCoord3f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t, GLfloat r) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3f(target, s, t, r); -} - -void gl4_0compat_glMultiTexCoord3dv(void *_glfuncs, GLenum target, const GLdouble* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3dv(target, v); -} - -void gl4_0compat_glMultiTexCoord3d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t, GLdouble r) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3d(target, s, t, r); -} - -void gl4_0compat_glMultiTexCoord2sv(void *_glfuncs, GLenum target, const GLshort* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2sv(target, v); -} - -void gl4_0compat_glMultiTexCoord2s(void *_glfuncs, GLenum target, GLshort s, GLshort t) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2s(target, s, t); -} - -void gl4_0compat_glMultiTexCoord2iv(void *_glfuncs, GLenum target, const GLint* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2iv(target, v); -} - -void gl4_0compat_glMultiTexCoord2i(void *_glfuncs, GLenum target, GLint s, GLint t) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2i(target, s, t); -} - -void gl4_0compat_glMultiTexCoord2fv(void *_glfuncs, GLenum target, const GLfloat* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2fv(target, v); -} - -void gl4_0compat_glMultiTexCoord2f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2f(target, s, t); -} - -void gl4_0compat_glMultiTexCoord2dv(void *_glfuncs, GLenum target, const GLdouble* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2dv(target, v); -} - -void gl4_0compat_glMultiTexCoord2d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2d(target, s, t); -} - -void gl4_0compat_glMultiTexCoord1sv(void *_glfuncs, GLenum target, const GLshort* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1sv(target, v); -} - -void gl4_0compat_glMultiTexCoord1s(void *_glfuncs, GLenum target, GLshort s) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1s(target, s); -} - -void gl4_0compat_glMultiTexCoord1iv(void *_glfuncs, GLenum target, const GLint* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1iv(target, v); -} - -void gl4_0compat_glMultiTexCoord1i(void *_glfuncs, GLenum target, GLint s) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1i(target, s); -} - -void gl4_0compat_glMultiTexCoord1fv(void *_glfuncs, GLenum target, const GLfloat* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1fv(target, v); -} - -void gl4_0compat_glMultiTexCoord1f(void *_glfuncs, GLenum target, GLfloat s) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1f(target, s); -} - -void gl4_0compat_glMultiTexCoord1dv(void *_glfuncs, GLenum target, const GLdouble* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1dv(target, v); -} - -void gl4_0compat_glMultiTexCoord1d(void *_glfuncs, GLenum target, GLdouble s) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1d(target, s); -} - -void gl4_0compat_glClientActiveTexture(void *_glfuncs, GLenum texture) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClientActiveTexture(texture); -} - -void gl4_0compat_glWindowPos3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3sv(v); -} - -void gl4_0compat_glWindowPos3s(void *_glfuncs, GLshort x, GLshort y, GLshort z) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3s(x, y, z); -} - -void gl4_0compat_glWindowPos3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3iv(v); -} - -void gl4_0compat_glWindowPos3i(void *_glfuncs, GLint x, GLint y, GLint z) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3i(x, y, z); -} - -void gl4_0compat_glWindowPos3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3fv(v); -} - -void gl4_0compat_glWindowPos3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3f(x, y, z); -} - -void gl4_0compat_glWindowPos3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3dv(v); -} - -void gl4_0compat_glWindowPos3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3d(x, y, z); -} - -void gl4_0compat_glWindowPos2sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2sv(v); -} - -void gl4_0compat_glWindowPos2s(void *_glfuncs, GLshort x, GLshort y) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2s(x, y); -} - -void gl4_0compat_glWindowPos2iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2iv(v); -} - -void gl4_0compat_glWindowPos2i(void *_glfuncs, GLint x, GLint y) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2i(x, y); -} - -void gl4_0compat_glWindowPos2fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2fv(v); -} - -void gl4_0compat_glWindowPos2f(void *_glfuncs, GLfloat x, GLfloat y) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2f(x, y); -} - -void gl4_0compat_glWindowPos2dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2dv(v); -} - -void gl4_0compat_glWindowPos2d(void *_glfuncs, GLdouble x, GLdouble y) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2d(x, y); -} - -void gl4_0compat_glSecondaryColorPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColorPointer(size, gltype, stride, pointer); -} - -void gl4_0compat_glSecondaryColor3usv(void *_glfuncs, const GLushort* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3usv(v); -} - -void gl4_0compat_glSecondaryColor3us(void *_glfuncs, GLushort red, GLushort green, GLushort blue) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3us(red, green, blue); -} - -void gl4_0compat_glSecondaryColor3uiv(void *_glfuncs, const GLuint* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3uiv(v); -} - -void gl4_0compat_glSecondaryColor3ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3ui(red, green, blue); -} - -void gl4_0compat_glSecondaryColor3ubv(void *_glfuncs, const GLubyte* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3ubv(v); -} - -void gl4_0compat_glSecondaryColor3ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3ub(red, green, blue); -} - -void gl4_0compat_glSecondaryColor3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3sv(v); -} - -void gl4_0compat_glSecondaryColor3s(void *_glfuncs, GLshort red, GLshort green, GLshort blue) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3s(red, green, blue); -} - -void gl4_0compat_glSecondaryColor3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3iv(v); -} - -void gl4_0compat_glSecondaryColor3i(void *_glfuncs, GLint red, GLint green, GLint blue) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3i(red, green, blue); -} - -void gl4_0compat_glSecondaryColor3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3fv(v); -} - -void gl4_0compat_glSecondaryColor3f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3f(red, green, blue); -} - -void gl4_0compat_glSecondaryColor3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3dv(v); -} - -void gl4_0compat_glSecondaryColor3d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3d(red, green, blue); -} - -void gl4_0compat_glSecondaryColor3bv(void *_glfuncs, const GLbyte* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3bv(v); -} - -void gl4_0compat_glSecondaryColor3b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3b(red, green, blue); -} - -void gl4_0compat_glFogCoordPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogCoordPointer(gltype, stride, pointer); -} - -void gl4_0compat_glFogCoorddv(void *_glfuncs, const GLdouble* coord) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogCoorddv(coord); -} - -void gl4_0compat_glFogCoordd(void *_glfuncs, GLdouble coord) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogCoordd(coord); -} - -void gl4_0compat_glFogCoordfv(void *_glfuncs, const GLfloat* coord) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogCoordfv(coord); -} - -void gl4_0compat_glFogCoordf(void *_glfuncs, GLfloat coord) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogCoordf(coord); -} - -void gl4_0compat_glVertexAttrib4usv(void *_glfuncs, GLuint index, const GLushort* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4usv(index, v); -} - -void gl4_0compat_glVertexAttrib4uiv(void *_glfuncs, GLuint index, const GLuint* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4uiv(index, v); -} - -void gl4_0compat_glVertexAttrib4ubv(void *_glfuncs, GLuint index, const GLubyte* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4ubv(index, v); -} - -void gl4_0compat_glVertexAttrib4sv(void *_glfuncs, GLuint index, const GLshort* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4sv(index, v); -} - -void gl4_0compat_glVertexAttrib4s(void *_glfuncs, GLuint index, GLshort x, GLshort y, GLshort z, GLshort w) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4s(index, x, y, z, w); -} - -void gl4_0compat_glVertexAttrib4iv(void *_glfuncs, GLuint index, const GLint* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4iv(index, v); -} - -void gl4_0compat_glVertexAttrib4fv(void *_glfuncs, GLuint index, const GLfloat* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4fv(index, v); -} - -void gl4_0compat_glVertexAttrib4f(void *_glfuncs, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4f(index, x, y, z, w); -} - -void gl4_0compat_glVertexAttrib4dv(void *_glfuncs, GLuint index, const GLdouble* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4dv(index, v); -} - -void gl4_0compat_glVertexAttrib4d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4d(index, x, y, z, w); -} - -void gl4_0compat_glVertexAttrib4bv(void *_glfuncs, GLuint index, const GLbyte* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4bv(index, v); -} - -void gl4_0compat_glVertexAttrib4Nusv(void *_glfuncs, GLuint index, const GLushort* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4Nusv(index, v); -} - -void gl4_0compat_glVertexAttrib4Nuiv(void *_glfuncs, GLuint index, const GLuint* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4Nuiv(index, v); -} - -void gl4_0compat_glVertexAttrib4Nubv(void *_glfuncs, GLuint index, const GLubyte* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4Nubv(index, v); -} - -void gl4_0compat_glVertexAttrib4Nub(void *_glfuncs, GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4Nub(index, x, y, z, w); -} - -void gl4_0compat_glVertexAttrib4Nsv(void *_glfuncs, GLuint index, const GLshort* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4Nsv(index, v); -} - -void gl4_0compat_glVertexAttrib4Niv(void *_glfuncs, GLuint index, const GLint* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4Niv(index, v); -} - -void gl4_0compat_glVertexAttrib4Nbv(void *_glfuncs, GLuint index, const GLbyte* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4Nbv(index, v); -} - -void gl4_0compat_glVertexAttrib3sv(void *_glfuncs, GLuint index, const GLshort* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib3sv(index, v); -} - -void gl4_0compat_glVertexAttrib3s(void *_glfuncs, GLuint index, GLshort x, GLshort y, GLshort z) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib3s(index, x, y, z); -} - -void gl4_0compat_glVertexAttrib3fv(void *_glfuncs, GLuint index, const GLfloat* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib3fv(index, v); -} - -void gl4_0compat_glVertexAttrib3f(void *_glfuncs, GLuint index, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib3f(index, x, y, z); -} - -void gl4_0compat_glVertexAttrib3dv(void *_glfuncs, GLuint index, const GLdouble* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib3dv(index, v); -} - -void gl4_0compat_glVertexAttrib3d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib3d(index, x, y, z); -} - -void gl4_0compat_glVertexAttrib2sv(void *_glfuncs, GLuint index, const GLshort* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib2sv(index, v); -} - -void gl4_0compat_glVertexAttrib2s(void *_glfuncs, GLuint index, GLshort x, GLshort y) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib2s(index, x, y); -} - -void gl4_0compat_glVertexAttrib2fv(void *_glfuncs, GLuint index, const GLfloat* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib2fv(index, v); -} - -void gl4_0compat_glVertexAttrib2f(void *_glfuncs, GLuint index, GLfloat x, GLfloat y) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib2f(index, x, y); -} - -void gl4_0compat_glVertexAttrib2dv(void *_glfuncs, GLuint index, const GLdouble* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib2dv(index, v); -} - -void gl4_0compat_glVertexAttrib2d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib2d(index, x, y); -} - -void gl4_0compat_glVertexAttrib1sv(void *_glfuncs, GLuint index, const GLshort* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib1sv(index, v); -} - -void gl4_0compat_glVertexAttrib1s(void *_glfuncs, GLuint index, GLshort x) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib1s(index, x); -} - -void gl4_0compat_glVertexAttrib1fv(void *_glfuncs, GLuint index, const GLfloat* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib1fv(index, v); -} - -void gl4_0compat_glVertexAttrib1f(void *_glfuncs, GLuint index, GLfloat x) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib1f(index, x); -} - -void gl4_0compat_glVertexAttrib1dv(void *_glfuncs, GLuint index, const GLdouble* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib1dv(index, v); -} - -void gl4_0compat_glVertexAttrib1d(void *_glfuncs, GLuint index, GLdouble x) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib1d(index, x); -} - -void gl4_0compat_glVertexAttribI4usv(void *_glfuncs, GLuint index, const GLushort* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI4usv(index, v); -} - -void gl4_0compat_glVertexAttribI4ubv(void *_glfuncs, GLuint index, const GLubyte* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI4ubv(index, v); -} - -void gl4_0compat_glVertexAttribI4sv(void *_glfuncs, GLuint index, const GLshort* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI4sv(index, v); -} - -void gl4_0compat_glVertexAttribI4bv(void *_glfuncs, GLuint index, const GLbyte* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI4bv(index, v); -} - -void gl4_0compat_glVertexAttribI4uiv(void *_glfuncs, GLuint index, const GLuint* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI4uiv(index, v); -} - -void gl4_0compat_glVertexAttribI3uiv(void *_glfuncs, GLuint index, const GLuint* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI3uiv(index, v); -} - -void gl4_0compat_glVertexAttribI2uiv(void *_glfuncs, GLuint index, const GLuint* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI2uiv(index, v); -} - -void gl4_0compat_glVertexAttribI1uiv(void *_glfuncs, GLuint index, const GLuint* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI1uiv(index, v); -} - -void gl4_0compat_glVertexAttribI4iv(void *_glfuncs, GLuint index, const GLint* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI4iv(index, v); -} - -void gl4_0compat_glVertexAttribI3iv(void *_glfuncs, GLuint index, const GLint* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI3iv(index, v); -} - -void gl4_0compat_glVertexAttribI2iv(void *_glfuncs, GLuint index, const GLint* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI2iv(index, v); -} - -void gl4_0compat_glVertexAttribI1iv(void *_glfuncs, GLuint index, const GLint* v) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI1iv(index, v); -} - -void gl4_0compat_glVertexAttribI4ui(void *_glfuncs, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI4ui(index, x, y, z, w); -} - -void gl4_0compat_glVertexAttribI3ui(void *_glfuncs, GLuint index, GLuint x, GLuint y, GLuint z) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI3ui(index, x, y, z); -} - -void gl4_0compat_glVertexAttribI2ui(void *_glfuncs, GLuint index, GLuint x, GLuint y) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI2ui(index, x, y); -} - -void gl4_0compat_glVertexAttribI1ui(void *_glfuncs, GLuint index, GLuint x) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI1ui(index, x); -} - -void gl4_0compat_glVertexAttribI4i(void *_glfuncs, GLuint index, GLint x, GLint y, GLint z, GLint w) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI4i(index, x, y, z, w); -} - -void gl4_0compat_glVertexAttribI3i(void *_glfuncs, GLuint index, GLint x, GLint y, GLint z) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI3i(index, x, y, z); -} - -void gl4_0compat_glVertexAttribI2i(void *_glfuncs, GLuint index, GLint x, GLint y) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI2i(index, x, y); -} - -void gl4_0compat_glVertexAttribI1i(void *_glfuncs, GLuint index, GLint x) -{ - QOpenGLFunctions_4_0_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI1i(index, x); -} - diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.0compat/funcs.h b/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.0compat/funcs.h deleted file mode 100644 index e556b73577..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.0compat/funcs.h +++ /dev/null @@ -1,833 +0,0 @@ - -// ** file automatically generated by glgen -- do not edit manually ** - -#ifndef __cplusplus -#include -#include -typedef unsigned int GLenum; -typedef unsigned char GLboolean; -typedef unsigned int GLbitfield; -typedef void GLvoid; -typedef char GLchar; -typedef signed char GLbyte; /* 1-byte signed */ -typedef short GLshort; /* 2-byte signed */ -typedef int GLint; /* 4-byte signed */ -typedef unsigned char GLubyte; /* 1-byte unsigned */ -typedef unsigned short GLushort; /* 2-byte unsigned */ -typedef unsigned int GLuint; /* 4-byte unsigned */ -typedef int GLsizei; /* 4-byte signed */ -typedef float GLfloat; /* single precision float */ -typedef float GLclampf; /* single precision float in [0,1] */ -typedef double GLdouble; /* double precision float */ -typedef double GLclampd; /* double precision float in [0,1] */ -typedef int64_t GLint64; -typedef uint64_t GLuint64; -typedef ptrdiff_t GLintptr; -typedef ptrdiff_t GLsizeiptr; -typedef ptrdiff_t GLintptrARB; -typedef ptrdiff_t GLsizeiptrARB; -typedef struct __GLsync *GLsync; -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -void *gl4_0compat_funcs(); - -void gl4_0compat_glViewport(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height); -void gl4_0compat_glDepthRange(void *_glfuncs, GLdouble nearVal, GLdouble farVal); -GLboolean gl4_0compat_glIsEnabled(void *_glfuncs, GLenum cap); -void gl4_0compat_glGetTexLevelParameteriv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLint* params); -void gl4_0compat_glGetTexLevelParameterfv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLfloat* params); -void gl4_0compat_glGetTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl4_0compat_glGetTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl4_0compat_glGetTexImage(void *_glfuncs, GLenum target, GLint level, GLenum format, GLenum gltype, GLvoid* pixels); -void gl4_0compat_glGetIntegerv(void *_glfuncs, GLenum pname, GLint* params); -void gl4_0compat_glGetFloatv(void *_glfuncs, GLenum pname, GLfloat* params); -GLenum gl4_0compat_glGetError(void *_glfuncs); -void gl4_0compat_glGetDoublev(void *_glfuncs, GLenum pname, GLdouble* params); -void gl4_0compat_glGetBooleanv(void *_glfuncs, GLenum pname, GLboolean* params); -void gl4_0compat_glReadPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum gltype, GLvoid* pixels); -void gl4_0compat_glReadBuffer(void *_glfuncs, GLenum mode); -void gl4_0compat_glPixelStorei(void *_glfuncs, GLenum pname, GLint param); -void gl4_0compat_glPixelStoref(void *_glfuncs, GLenum pname, GLfloat param); -void gl4_0compat_glDepthFunc(void *_glfuncs, GLenum glfunc); -void gl4_0compat_glStencilOp(void *_glfuncs, GLenum fail, GLenum zfail, GLenum zpass); -void gl4_0compat_glStencilFunc(void *_glfuncs, GLenum glfunc, GLint ref, GLuint mask); -void gl4_0compat_glLogicOp(void *_glfuncs, GLenum opcode); -void gl4_0compat_glBlendFunc(void *_glfuncs, GLenum sfactor, GLenum dfactor); -void gl4_0compat_glFlush(void *_glfuncs); -void gl4_0compat_glFinish(void *_glfuncs); -void gl4_0compat_glEnable(void *_glfuncs, GLenum cap); -void gl4_0compat_glDisable(void *_glfuncs, GLenum cap); -void gl4_0compat_glDepthMask(void *_glfuncs, GLboolean flag); -void gl4_0compat_glColorMask(void *_glfuncs, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); -void gl4_0compat_glStencilMask(void *_glfuncs, GLuint mask); -void gl4_0compat_glClearDepth(void *_glfuncs, GLdouble depth); -void gl4_0compat_glClearStencil(void *_glfuncs, GLint s); -void gl4_0compat_glClearColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl4_0compat_glClear(void *_glfuncs, GLbitfield mask); -void gl4_0compat_glDrawBuffer(void *_glfuncs, GLenum mode); -void gl4_0compat_glTexImage2D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl4_0compat_glTexImage1D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl4_0compat_glTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl4_0compat_glTexParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint param); -void gl4_0compat_glTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params); -void gl4_0compat_glTexParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param); -void gl4_0compat_glScissor(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height); -void gl4_0compat_glPolygonMode(void *_glfuncs, GLenum face, GLenum mode); -void gl4_0compat_glPointSize(void *_glfuncs, GLfloat size); -void gl4_0compat_glLineWidth(void *_glfuncs, GLfloat width); -void gl4_0compat_glHint(void *_glfuncs, GLenum target, GLenum mode); -void gl4_0compat_glFrontFace(void *_glfuncs, GLenum mode); -void gl4_0compat_glCullFace(void *_glfuncs, GLenum mode); -void gl4_0compat_glIndexubv(void *_glfuncs, const GLubyte* c); -void gl4_0compat_glIndexub(void *_glfuncs, GLubyte c); -GLboolean gl4_0compat_glIsTexture(void *_glfuncs, GLuint texture); -void gl4_0compat_glGenTextures(void *_glfuncs, GLsizei n, GLuint* textures); -void gl4_0compat_glDeleteTextures(void *_glfuncs, GLsizei n, const GLuint* textures); -void gl4_0compat_glBindTexture(void *_glfuncs, GLenum target, GLuint texture); -void gl4_0compat_glTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl4_0compat_glTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl4_0compat_glCopyTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -void gl4_0compat_glCopyTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -void gl4_0compat_glCopyTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -void gl4_0compat_glCopyTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border); -void gl4_0compat_glPolygonOffset(void *_glfuncs, GLfloat factor, GLfloat units); -void gl4_0compat_glDrawElements(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices); -void gl4_0compat_glDrawArrays(void *_glfuncs, GLenum mode, GLint first, GLsizei count); -void gl4_0compat_glCopyTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -void gl4_0compat_glTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl4_0compat_glTexImage3D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl4_0compat_glDrawRangeElements(void *_glfuncs, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum gltype, const GLvoid* indices); -void gl4_0compat_glBlendEquation(void *_glfuncs, GLenum mode); -void gl4_0compat_glBlendColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl4_0compat_glGetCompressedTexImage(void *_glfuncs, GLenum target, GLint level, GLvoid* img); -void gl4_0compat_glCompressedTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid* data); -void gl4_0compat_glCompressedTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data); -void gl4_0compat_glCompressedTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data); -void gl4_0compat_glCompressedTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid* data); -void gl4_0compat_glCompressedTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data); -void gl4_0compat_glCompressedTexImage3D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data); -void gl4_0compat_glSampleCoverage(void *_glfuncs, GLfloat value, GLboolean invert); -void gl4_0compat_glActiveTexture(void *_glfuncs, GLenum texture); -void gl4_0compat_glPointParameteriv(void *_glfuncs, GLenum pname, const GLint* params); -void gl4_0compat_glPointParameteri(void *_glfuncs, GLenum pname, GLint param); -void gl4_0compat_glPointParameterfv(void *_glfuncs, GLenum pname, const GLfloat* params); -void gl4_0compat_glPointParameterf(void *_glfuncs, GLenum pname, GLfloat param); -void gl4_0compat_glMultiDrawArrays(void *_glfuncs, GLenum mode, const GLint* first, const GLsizei* count, GLsizei drawcount); -void gl4_0compat_glBlendFuncSeparate(void *_glfuncs, GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -void gl4_0compat_glGetBufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -GLboolean gl4_0compat_glUnmapBuffer(void *_glfuncs, GLenum target); -void gl4_0compat_glGetBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, GLvoid* data); -void gl4_0compat_glBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data); -void gl4_0compat_glBufferData(void *_glfuncs, GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage); -GLboolean gl4_0compat_glIsBuffer(void *_glfuncs, GLuint buffer); -void gl4_0compat_glGenBuffers(void *_glfuncs, GLsizei n, GLuint* buffers); -void gl4_0compat_glDeleteBuffers(void *_glfuncs, GLsizei n, const GLuint* buffers); -void gl4_0compat_glBindBuffer(void *_glfuncs, GLenum target, GLuint buffer); -void gl4_0compat_glGetQueryObjectuiv(void *_glfuncs, GLuint id, GLenum pname, GLuint* params); -void gl4_0compat_glGetQueryObjectiv(void *_glfuncs, GLuint id, GLenum pname, GLint* params); -void gl4_0compat_glGetQueryiv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl4_0compat_glEndQuery(void *_glfuncs, GLenum target); -void gl4_0compat_glBeginQuery(void *_glfuncs, GLenum target, GLuint id); -GLboolean gl4_0compat_glIsQuery(void *_glfuncs, GLuint id); -void gl4_0compat_glDeleteQueries(void *_glfuncs, GLsizei n, const GLuint* ids); -void gl4_0compat_glGenQueries(void *_glfuncs, GLsizei n, GLuint* ids); -void gl4_0compat_glVertexAttribPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLboolean normalized, GLsizei stride, const GLvoid* offset); -void gl4_0compat_glValidateProgram(void *_glfuncs, GLuint program); -void gl4_0compat_glUniformMatrix4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_0compat_glUniformMatrix3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_0compat_glUniformMatrix2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_0compat_glUniform4iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gl4_0compat_glUniform3iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gl4_0compat_glUniform2iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gl4_0compat_glUniform1iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gl4_0compat_glUniform4fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gl4_0compat_glUniform3fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gl4_0compat_glUniform2fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gl4_0compat_glUniform1fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gl4_0compat_glUniform4i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -void gl4_0compat_glUniform3i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2); -void gl4_0compat_glUniform2i(void *_glfuncs, GLint location, GLint v0, GLint v1); -void gl4_0compat_glUniform1i(void *_glfuncs, GLint location, GLint v0); -void gl4_0compat_glUniform4f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -void gl4_0compat_glUniform3f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -void gl4_0compat_glUniform2f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1); -void gl4_0compat_glUniform1f(void *_glfuncs, GLint location, GLfloat v0); -void gl4_0compat_glUseProgram(void *_glfuncs, GLuint program); -void gl4_0compat_glShaderSource(void *_glfuncs, GLuint shader, GLsizei count, const GLchar** source, const GLint* length); -void gl4_0compat_glLinkProgram(void *_glfuncs, GLuint program); -GLboolean gl4_0compat_glIsShader(void *_glfuncs, GLuint shader); -GLboolean gl4_0compat_glIsProgram(void *_glfuncs, GLuint program); -void gl4_0compat_glGetVertexAttribiv(void *_glfuncs, GLuint index, GLenum pname, GLint* params); -void gl4_0compat_glGetVertexAttribfv(void *_glfuncs, GLuint index, GLenum pname, GLfloat* params); -void gl4_0compat_glGetVertexAttribdv(void *_glfuncs, GLuint index, GLenum pname, GLdouble* params); -void gl4_0compat_glGetUniformiv(void *_glfuncs, GLuint program, GLint location, GLint* params); -void gl4_0compat_glGetUniformfv(void *_glfuncs, GLuint program, GLint location, GLfloat* params); -GLint gl4_0compat_glGetUniformLocation(void *_glfuncs, GLuint program, const GLchar* name); -void gl4_0compat_glGetShaderSource(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* source); -void gl4_0compat_glGetShaderInfoLog(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* infoLog); -void gl4_0compat_glGetShaderiv(void *_glfuncs, GLuint shader, GLenum pname, GLint* params); -void gl4_0compat_glGetProgramInfoLog(void *_glfuncs, GLuint program, GLsizei bufSize, GLsizei* length, GLchar* infoLog); -void gl4_0compat_glGetProgramiv(void *_glfuncs, GLuint program, GLenum pname, GLint* params); -GLint gl4_0compat_glGetAttribLocation(void *_glfuncs, GLuint program, const GLchar* name); -void gl4_0compat_glGetAttachedShaders(void *_glfuncs, GLuint program, GLsizei maxCount, GLsizei* count, GLuint* obj); -void gl4_0compat_glGetActiveUniform(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name); -void gl4_0compat_glGetActiveAttrib(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name); -void gl4_0compat_glEnableVertexAttribArray(void *_glfuncs, GLuint index); -void gl4_0compat_glDisableVertexAttribArray(void *_glfuncs, GLuint index); -void gl4_0compat_glDetachShader(void *_glfuncs, GLuint program, GLuint shader); -void gl4_0compat_glDeleteShader(void *_glfuncs, GLuint shader); -void gl4_0compat_glDeleteProgram(void *_glfuncs, GLuint program); -GLuint gl4_0compat_glCreateShader(void *_glfuncs, GLenum gltype); -GLuint gl4_0compat_glCreateProgram(void *_glfuncs); -void gl4_0compat_glCompileShader(void *_glfuncs, GLuint shader); -void gl4_0compat_glBindAttribLocation(void *_glfuncs, GLuint program, GLuint index, const GLchar* name); -void gl4_0compat_glAttachShader(void *_glfuncs, GLuint program, GLuint shader); -void gl4_0compat_glStencilMaskSeparate(void *_glfuncs, GLenum face, GLuint mask); -void gl4_0compat_glStencilFuncSeparate(void *_glfuncs, GLenum face, GLenum glfunc, GLint ref, GLuint mask); -void gl4_0compat_glStencilOpSeparate(void *_glfuncs, GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); -void gl4_0compat_glDrawBuffers(void *_glfuncs, GLsizei n, const GLenum* bufs); -void gl4_0compat_glBlendEquationSeparate(void *_glfuncs, GLenum modeRGB, GLenum modeAlpha); -void gl4_0compat_glUniformMatrix4x3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_0compat_glUniformMatrix3x4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_0compat_glUniformMatrix4x2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_0compat_glUniformMatrix2x4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_0compat_glUniformMatrix3x2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_0compat_glUniformMatrix2x3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -GLboolean gl4_0compat_glIsVertexArray(void *_glfuncs, GLuint array); -void gl4_0compat_glGenVertexArrays(void *_glfuncs, GLsizei n, GLuint* arrays); -void gl4_0compat_glDeleteVertexArrays(void *_glfuncs, GLsizei n, const GLuint* arrays); -void gl4_0compat_glBindVertexArray(void *_glfuncs, GLuint array); -void gl4_0compat_glFlushMappedBufferRange(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr length); -void gl4_0compat_glFramebufferTextureLayer(void *_glfuncs, GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); -void gl4_0compat_glRenderbufferStorageMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height); -void gl4_0compat_glBlitFramebuffer(void *_glfuncs, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -void gl4_0compat_glGenerateMipmap(void *_glfuncs, GLenum target); -void gl4_0compat_glGetFramebufferAttachmentParameteriv(void *_glfuncs, GLenum target, GLenum attachment, GLenum pname, GLint* params); -void gl4_0compat_glFramebufferRenderbuffer(void *_glfuncs, GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -void gl4_0compat_glFramebufferTexture3D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -void gl4_0compat_glFramebufferTexture2D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -void gl4_0compat_glFramebufferTexture1D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLenum gl4_0compat_glCheckFramebufferStatus(void *_glfuncs, GLenum target); -void gl4_0compat_glGenFramebuffers(void *_glfuncs, GLsizei n, GLuint* framebuffers); -void gl4_0compat_glDeleteFramebuffers(void *_glfuncs, GLsizei n, const GLuint* framebuffers); -void gl4_0compat_glBindFramebuffer(void *_glfuncs, GLenum target, GLuint framebuffer); -GLboolean gl4_0compat_glIsFramebuffer(void *_glfuncs, GLuint framebuffer); -void gl4_0compat_glGetRenderbufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl4_0compat_glRenderbufferStorage(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height); -void gl4_0compat_glGenRenderbuffers(void *_glfuncs, GLsizei n, GLuint* renderbuffers); -void gl4_0compat_glDeleteRenderbuffers(void *_glfuncs, GLsizei n, const GLuint* renderbuffers); -void gl4_0compat_glBindRenderbuffer(void *_glfuncs, GLenum target, GLuint renderbuffer); -GLboolean gl4_0compat_glIsRenderbuffer(void *_glfuncs, GLuint renderbuffer); -void gl4_0compat_glClearBufferfi(void *_glfuncs, GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); -void gl4_0compat_glClearBufferfv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLfloat* value); -void gl4_0compat_glClearBufferuiv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLuint* value); -void gl4_0compat_glClearBufferiv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLint* value); -void gl4_0compat_glGetTexParameterIuiv(void *_glfuncs, GLenum target, GLenum pname, GLuint* params); -void gl4_0compat_glGetTexParameterIiv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl4_0compat_glTexParameterIuiv(void *_glfuncs, GLenum target, GLenum pname, const GLuint* params); -void gl4_0compat_glTexParameterIiv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl4_0compat_glUniform4uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value); -void gl4_0compat_glUniform3uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value); -void gl4_0compat_glUniform2uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value); -void gl4_0compat_glUniform1uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value); -void gl4_0compat_glUniform4ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -void gl4_0compat_glUniform3ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1, GLuint v2); -void gl4_0compat_glUniform2ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1); -void gl4_0compat_glUniform1ui(void *_glfuncs, GLint location, GLuint v0); -GLint gl4_0compat_glGetFragDataLocation(void *_glfuncs, GLuint program, const GLchar* name); -void gl4_0compat_glBindFragDataLocation(void *_glfuncs, GLuint program, GLuint color, const GLchar* name); -void gl4_0compat_glGetUniformuiv(void *_glfuncs, GLuint program, GLint location, GLuint* params); -void gl4_0compat_glGetVertexAttribIuiv(void *_glfuncs, GLuint index, GLenum pname, GLuint* params); -void gl4_0compat_glGetVertexAttribIiv(void *_glfuncs, GLuint index, GLenum pname, GLint* params); -void gl4_0compat_glVertexAttribIPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl4_0compat_glEndConditionalRender(void *_glfuncs); -void gl4_0compat_glBeginConditionalRender(void *_glfuncs, GLuint id, GLenum mode); -void gl4_0compat_glClampColor(void *_glfuncs, GLenum target, GLenum clamp); -void gl4_0compat_glGetTransformFeedbackVarying(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* gltype, GLchar* name); -void gl4_0compat_glBindBufferBase(void *_glfuncs, GLenum target, GLuint index, GLuint buffer); -void gl4_0compat_glBindBufferRange(void *_glfuncs, GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -void gl4_0compat_glEndTransformFeedback(void *_glfuncs); -void gl4_0compat_glBeginTransformFeedback(void *_glfuncs, GLenum primitiveMode); -GLboolean gl4_0compat_glIsEnabledi(void *_glfuncs, GLenum target, GLuint index); -void gl4_0compat_glDisablei(void *_glfuncs, GLenum target, GLuint index); -void gl4_0compat_glEnablei(void *_glfuncs, GLenum target, GLuint index); -void gl4_0compat_glGetIntegeri_v(void *_glfuncs, GLenum target, GLuint index, GLint* data); -void gl4_0compat_glGetBooleani_v(void *_glfuncs, GLenum target, GLuint index, GLboolean* data); -void gl4_0compat_glColorMaski(void *_glfuncs, GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); -void gl4_0compat_glCopyBufferSubData(void *_glfuncs, GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); -void gl4_0compat_glUniformBlockBinding(void *_glfuncs, GLuint program, GLuint v0, GLuint v1); -void gl4_0compat_glGetActiveUniformBlockName(void *_glfuncs, GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformBlockName); -void gl4_0compat_glGetActiveUniformBlockiv(void *_glfuncs, GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint* params); -GLuint gl4_0compat_glGetUniformBlockIndex(void *_glfuncs, GLuint program, const GLchar* uniformBlockName); -void gl4_0compat_glGetActiveUniformName(void *_glfuncs, GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformName); -void gl4_0compat_glGetActiveUniformsiv(void *_glfuncs, GLuint program, GLsizei uniformCount, const GLuint* uniformIndices, GLenum pname, GLint* params); -void gl4_0compat_glPrimitiveRestartIndex(void *_glfuncs, GLuint index); -void gl4_0compat_glTexBuffer(void *_glfuncs, GLenum target, GLenum internalFormat, GLuint buffer); -void gl4_0compat_glDrawElementsInstanced(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLsizei instancecount); -void gl4_0compat_glDrawArraysInstanced(void *_glfuncs, GLenum mode, GLint first, GLsizei count, GLsizei instancecount); -void gl4_0compat_glSampleMaski(void *_glfuncs, GLuint index, GLbitfield mask); -void gl4_0compat_glGetMultisamplefv(void *_glfuncs, GLenum pname, GLuint index, GLfloat* val); -void gl4_0compat_glTexImage3DMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); -void gl4_0compat_glTexImage2DMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); -void gl4_0compat_glGetSynciv(void *_glfuncs, GLsync sync, GLenum pname, GLsizei bufSize, GLsizei* length, GLint* values); -void gl4_0compat_glGetInteger64v(void *_glfuncs, GLenum pname, GLint64* params); -void gl4_0compat_glWaitSync(void *_glfuncs, GLsync sync, GLbitfield flags, GLuint64 timeout); -GLenum gl4_0compat_glClientWaitSync(void *_glfuncs, GLsync sync, GLbitfield flags, GLuint64 timeout); -void gl4_0compat_glDeleteSync(void *_glfuncs, GLsync sync); -GLboolean gl4_0compat_glIsSync(void *_glfuncs, GLsync sync); -GLsync gl4_0compat_glFenceSync(void *_glfuncs, GLenum condition, GLbitfield flags); -void gl4_0compat_glProvokingVertex(void *_glfuncs, GLenum mode); -void gl4_0compat_glDrawElementsInstancedBaseVertex(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLsizei instancecount, GLint basevertex); -void gl4_0compat_glDrawRangeElementsBaseVertex(void *_glfuncs, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum gltype, const GLvoid* indices, GLint basevertex); -void gl4_0compat_glDrawElementsBaseVertex(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLint basevertex); -void gl4_0compat_glFramebufferTexture(void *_glfuncs, GLenum target, GLenum attachment, GLuint texture, GLint level); -void gl4_0compat_glGetBufferParameteri64v(void *_glfuncs, GLenum target, GLenum pname, GLint64* params); -void gl4_0compat_glGetInteger64i_v(void *_glfuncs, GLenum target, GLuint index, GLint64* data); -void gl4_0compat_glVertexAttribP4uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value); -void gl4_0compat_glVertexAttribP4ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value); -void gl4_0compat_glVertexAttribP3uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value); -void gl4_0compat_glVertexAttribP3ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value); -void gl4_0compat_glVertexAttribP2uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value); -void gl4_0compat_glVertexAttribP2ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value); -void gl4_0compat_glVertexAttribP1uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value); -void gl4_0compat_glVertexAttribP1ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value); -void gl4_0compat_glSecondaryColorP3uiv(void *_glfuncs, GLenum gltype, const GLuint* color); -void gl4_0compat_glSecondaryColorP3ui(void *_glfuncs, GLenum gltype, GLuint color); -void gl4_0compat_glColorP4uiv(void *_glfuncs, GLenum gltype, const GLuint* color); -void gl4_0compat_glColorP4ui(void *_glfuncs, GLenum gltype, GLuint color); -void gl4_0compat_glColorP3uiv(void *_glfuncs, GLenum gltype, const GLuint* color); -void gl4_0compat_glColorP3ui(void *_glfuncs, GLenum gltype, GLuint color); -void gl4_0compat_glNormalP3uiv(void *_glfuncs, GLenum gltype, const GLuint* coords); -void gl4_0compat_glNormalP3ui(void *_glfuncs, GLenum gltype, GLuint coords); -void gl4_0compat_glMultiTexCoordP4uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords); -void gl4_0compat_glMultiTexCoordP4ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords); -void gl4_0compat_glMultiTexCoordP3uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords); -void gl4_0compat_glMultiTexCoordP3ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords); -void gl4_0compat_glMultiTexCoordP2uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords); -void gl4_0compat_glMultiTexCoordP2ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords); -void gl4_0compat_glMultiTexCoordP1uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords); -void gl4_0compat_glMultiTexCoordP1ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords); -void gl4_0compat_glTexCoordP4uiv(void *_glfuncs, GLenum gltype, const GLuint* coords); -void gl4_0compat_glTexCoordP4ui(void *_glfuncs, GLenum gltype, GLuint coords); -void gl4_0compat_glTexCoordP3uiv(void *_glfuncs, GLenum gltype, const GLuint* coords); -void gl4_0compat_glTexCoordP3ui(void *_glfuncs, GLenum gltype, GLuint coords); -void gl4_0compat_glTexCoordP2uiv(void *_glfuncs, GLenum gltype, const GLuint* coords); -void gl4_0compat_glTexCoordP2ui(void *_glfuncs, GLenum gltype, GLuint coords); -void gl4_0compat_glTexCoordP1uiv(void *_glfuncs, GLenum gltype, const GLuint* coords); -void gl4_0compat_glTexCoordP1ui(void *_glfuncs, GLenum gltype, GLuint coords); -void gl4_0compat_glVertexP4uiv(void *_glfuncs, GLenum gltype, const GLuint* value); -void gl4_0compat_glVertexP4ui(void *_glfuncs, GLenum gltype, GLuint value); -void gl4_0compat_glVertexP3uiv(void *_glfuncs, GLenum gltype, const GLuint* value); -void gl4_0compat_glVertexP3ui(void *_glfuncs, GLenum gltype, GLuint value); -void gl4_0compat_glVertexP2uiv(void *_glfuncs, GLenum gltype, const GLuint* value); -void gl4_0compat_glVertexP2ui(void *_glfuncs, GLenum gltype, GLuint value); -void gl4_0compat_glGetQueryObjectui64v(void *_glfuncs, GLuint id, GLenum pname, GLuint64* params); -void gl4_0compat_glGetQueryObjecti64v(void *_glfuncs, GLuint id, GLenum pname, GLint64* params); -void gl4_0compat_glQueryCounter(void *_glfuncs, GLuint id, GLenum target); -void gl4_0compat_glGetSamplerParameterIuiv(void *_glfuncs, GLuint sampler, GLenum pname, GLuint* params); -void gl4_0compat_glGetSamplerParameterfv(void *_glfuncs, GLuint sampler, GLenum pname, GLfloat* params); -void gl4_0compat_glGetSamplerParameterIiv(void *_glfuncs, GLuint sampler, GLenum pname, GLint* params); -void gl4_0compat_glGetSamplerParameteriv(void *_glfuncs, GLuint sampler, GLenum pname, GLint* params); -void gl4_0compat_glSamplerParameterIuiv(void *_glfuncs, GLuint sampler, GLenum pname, const GLuint* param); -void gl4_0compat_glSamplerParameterIiv(void *_glfuncs, GLuint sampler, GLenum pname, const GLint* param); -void gl4_0compat_glSamplerParameterfv(void *_glfuncs, GLuint sampler, GLenum pname, const GLfloat* param); -void gl4_0compat_glSamplerParameterf(void *_glfuncs, GLuint sampler, GLenum pname, GLfloat param); -void gl4_0compat_glSamplerParameteriv(void *_glfuncs, GLuint sampler, GLenum pname, const GLint* param); -void gl4_0compat_glSamplerParameteri(void *_glfuncs, GLuint sampler, GLenum pname, GLint param); -void gl4_0compat_glBindSampler(void *_glfuncs, GLuint unit, GLuint sampler); -GLboolean gl4_0compat_glIsSampler(void *_glfuncs, GLuint sampler); -void gl4_0compat_glDeleteSamplers(void *_glfuncs, GLsizei count, const GLuint* samplers); -void gl4_0compat_glGenSamplers(void *_glfuncs, GLsizei count, GLuint* samplers); -GLint gl4_0compat_glGetFragDataIndex(void *_glfuncs, GLuint program, const GLchar* name); -void gl4_0compat_glBindFragDataLocationIndexed(void *_glfuncs, GLuint program, GLuint colorNumber, GLuint index, const GLchar* name); -void gl4_0compat_glVertexAttribDivisor(void *_glfuncs, GLuint index, GLuint divisor); -void gl4_0compat_glGetQueryIndexediv(void *_glfuncs, GLenum target, GLuint index, GLenum pname, GLint* params); -void gl4_0compat_glEndQueryIndexed(void *_glfuncs, GLenum target, GLuint index); -void gl4_0compat_glBeginQueryIndexed(void *_glfuncs, GLenum target, GLuint index, GLuint id); -void gl4_0compat_glDrawTransformFeedbackStream(void *_glfuncs, GLenum mode, GLuint id, GLuint stream); -void gl4_0compat_glDrawTransformFeedback(void *_glfuncs, GLenum mode, GLuint id); -void gl4_0compat_glResumeTransformFeedback(void *_glfuncs); -void gl4_0compat_glPauseTransformFeedback(void *_glfuncs); -GLboolean gl4_0compat_glIsTransformFeedback(void *_glfuncs, GLuint id); -void gl4_0compat_glGenTransformFeedbacks(void *_glfuncs, GLsizei n, GLuint* ids); -void gl4_0compat_glDeleteTransformFeedbacks(void *_glfuncs, GLsizei n, const GLuint* ids); -void gl4_0compat_glBindTransformFeedback(void *_glfuncs, GLenum target, GLuint id); -void gl4_0compat_glPatchParameterfv(void *_glfuncs, GLenum pname, const GLfloat* values); -void gl4_0compat_glPatchParameteri(void *_glfuncs, GLenum pname, GLint value); -void gl4_0compat_glGetProgramStageiv(void *_glfuncs, GLuint program, GLenum shadertype, GLenum pname, GLint* values); -void gl4_0compat_glGetUniformSubroutineuiv(void *_glfuncs, GLenum shadertype, GLint location, GLuint* params); -void gl4_0compat_glUniformSubroutinesuiv(void *_glfuncs, GLenum shadertype, GLsizei count, const GLuint* value); -void gl4_0compat_glGetActiveSubroutineName(void *_glfuncs, GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei* length, GLchar* name); -void gl4_0compat_glGetActiveSubroutineUniformName(void *_glfuncs, GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei* length, GLchar* name); -void gl4_0compat_glGetActiveSubroutineUniformiv(void *_glfuncs, GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint* values); -GLuint gl4_0compat_glGetSubroutineIndex(void *_glfuncs, GLuint program, GLenum shadertype, const GLchar* name); -GLint gl4_0compat_glGetSubroutineUniformLocation(void *_glfuncs, GLuint program, GLenum shadertype, const GLchar* name); -void gl4_0compat_glGetUniformdv(void *_glfuncs, GLuint program, GLint location, GLdouble* params); -void gl4_0compat_glUniformMatrix4x3dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_0compat_glUniformMatrix4x2dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_0compat_glUniformMatrix3x4dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_0compat_glUniformMatrix3x2dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_0compat_glUniformMatrix2x4dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_0compat_glUniformMatrix2x3dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_0compat_glUniformMatrix4dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_0compat_glUniformMatrix3dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_0compat_glUniformMatrix2dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_0compat_glUniform4dv(void *_glfuncs, GLint location, GLsizei count, const GLdouble* value); -void gl4_0compat_glUniform3dv(void *_glfuncs, GLint location, GLsizei count, const GLdouble* value); -void gl4_0compat_glUniform2dv(void *_glfuncs, GLint location, GLsizei count, const GLdouble* value); -void gl4_0compat_glUniform1dv(void *_glfuncs, GLint location, GLsizei count, const GLdouble* value); -void gl4_0compat_glUniform4d(void *_glfuncs, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3); -void gl4_0compat_glUniform3d(void *_glfuncs, GLint location, GLdouble v0, GLdouble v1, GLdouble v2); -void gl4_0compat_glUniform2d(void *_glfuncs, GLint location, GLdouble v0, GLdouble v1); -void gl4_0compat_glUniform1d(void *_glfuncs, GLint location, GLdouble v0); -void gl4_0compat_glDrawElementsIndirect(void *_glfuncs, GLenum mode, GLenum gltype, const GLvoid* indirect); -void gl4_0compat_glDrawArraysIndirect(void *_glfuncs, GLenum mode, const GLvoid* indirect); -void gl4_0compat_glBlendFuncSeparatei(void *_glfuncs, GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -void gl4_0compat_glBlendFunci(void *_glfuncs, GLuint buf, GLenum src, GLenum dst); -void gl4_0compat_glBlendEquationSeparatei(void *_glfuncs, GLuint buf, GLenum modeRGB, GLenum modeAlpha); -void gl4_0compat_glBlendEquationi(void *_glfuncs, GLuint buf, GLenum mode); -void gl4_0compat_glMinSampleShading(void *_glfuncs, GLfloat value); -void gl4_0compat_glTranslatef(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl4_0compat_glTranslated(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl4_0compat_glScalef(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl4_0compat_glScaled(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl4_0compat_glRotatef(void *_glfuncs, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); -void gl4_0compat_glRotated(void *_glfuncs, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); -void gl4_0compat_glPushMatrix(void *_glfuncs); -void gl4_0compat_glPopMatrix(void *_glfuncs); -void gl4_0compat_glOrtho(void *_glfuncs, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -void gl4_0compat_glMultMatrixd(void *_glfuncs, const GLdouble* m); -void gl4_0compat_glMultMatrixf(void *_glfuncs, const GLfloat* m); -void gl4_0compat_glMatrixMode(void *_glfuncs, GLenum mode); -void gl4_0compat_glLoadMatrixd(void *_glfuncs, const GLdouble* m); -void gl4_0compat_glLoadMatrixf(void *_glfuncs, const GLfloat* m); -void gl4_0compat_glLoadIdentity(void *_glfuncs); -void gl4_0compat_glFrustum(void *_glfuncs, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -GLboolean gl4_0compat_glIsList(void *_glfuncs, GLuint list); -void gl4_0compat_glGetTexGeniv(void *_glfuncs, GLenum coord, GLenum pname, GLint* params); -void gl4_0compat_glGetTexGenfv(void *_glfuncs, GLenum coord, GLenum pname, GLfloat* params); -void gl4_0compat_glGetTexGendv(void *_glfuncs, GLenum coord, GLenum pname, GLdouble* params); -void gl4_0compat_glGetTexEnviv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl4_0compat_glGetTexEnvfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl4_0compat_glGetPolygonStipple(void *_glfuncs, GLubyte* mask); -void gl4_0compat_glGetPixelMapusv(void *_glfuncs, GLenum glmap, GLushort* values); -void gl4_0compat_glGetPixelMapuiv(void *_glfuncs, GLenum glmap, GLuint* values); -void gl4_0compat_glGetPixelMapfv(void *_glfuncs, GLenum glmap, GLfloat* values); -void gl4_0compat_glGetMaterialiv(void *_glfuncs, GLenum face, GLenum pname, GLint* params); -void gl4_0compat_glGetMaterialfv(void *_glfuncs, GLenum face, GLenum pname, GLfloat* params); -void gl4_0compat_glGetMapiv(void *_glfuncs, GLenum target, GLenum query, GLint* v); -void gl4_0compat_glGetMapfv(void *_glfuncs, GLenum target, GLenum query, GLfloat* v); -void gl4_0compat_glGetMapdv(void *_glfuncs, GLenum target, GLenum query, GLdouble* v); -void gl4_0compat_glGetLightiv(void *_glfuncs, GLenum light, GLenum pname, GLint* params); -void gl4_0compat_glGetLightfv(void *_glfuncs, GLenum light, GLenum pname, GLfloat* params); -void gl4_0compat_glGetClipPlane(void *_glfuncs, GLenum plane, GLdouble* equation); -void gl4_0compat_glDrawPixels(void *_glfuncs, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl4_0compat_glCopyPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum gltype); -void gl4_0compat_glPixelMapusv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLushort* values); -void gl4_0compat_glPixelMapuiv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLuint* values); -void gl4_0compat_glPixelMapfv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLfloat* values); -void gl4_0compat_glPixelTransferi(void *_glfuncs, GLenum pname, GLint param); -void gl4_0compat_glPixelTransferf(void *_glfuncs, GLenum pname, GLfloat param); -void gl4_0compat_glPixelZoom(void *_glfuncs, GLfloat xfactor, GLfloat yfactor); -void gl4_0compat_glAlphaFunc(void *_glfuncs, GLenum glfunc, GLfloat ref); -void gl4_0compat_glEvalPoint2(void *_glfuncs, GLint i, GLint j); -void gl4_0compat_glEvalMesh2(void *_glfuncs, GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2); -void gl4_0compat_glEvalPoint1(void *_glfuncs, GLint i); -void gl4_0compat_glEvalMesh1(void *_glfuncs, GLenum mode, GLint i1, GLint i2); -void gl4_0compat_glEvalCoord2fv(void *_glfuncs, const GLfloat* u); -void gl4_0compat_glEvalCoord2f(void *_glfuncs, GLfloat u, GLfloat v); -void gl4_0compat_glEvalCoord2dv(void *_glfuncs, const GLdouble* u); -void gl4_0compat_glEvalCoord2d(void *_glfuncs, GLdouble u, GLdouble v); -void gl4_0compat_glEvalCoord1fv(void *_glfuncs, const GLfloat* u); -void gl4_0compat_glEvalCoord1f(void *_glfuncs, GLfloat u); -void gl4_0compat_glEvalCoord1dv(void *_glfuncs, const GLdouble* u); -void gl4_0compat_glEvalCoord1d(void *_glfuncs, GLdouble u); -void gl4_0compat_glMapGrid2f(void *_glfuncs, GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2); -void gl4_0compat_glMapGrid2d(void *_glfuncs, GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2); -void gl4_0compat_glMapGrid1f(void *_glfuncs, GLint un, GLfloat u1, GLfloat u2); -void gl4_0compat_glMapGrid1d(void *_glfuncs, GLint un, GLdouble u1, GLdouble u2); -void gl4_0compat_glMap2f(void *_glfuncs, GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat* points); -void gl4_0compat_glMap2d(void *_glfuncs, GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble* points); -void gl4_0compat_glMap1f(void *_glfuncs, GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat* points); -void gl4_0compat_glMap1d(void *_glfuncs, GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble* points); -void gl4_0compat_glPushAttrib(void *_glfuncs, GLbitfield mask); -void gl4_0compat_glPopAttrib(void *_glfuncs); -void gl4_0compat_glAccum(void *_glfuncs, GLenum op, GLfloat value); -void gl4_0compat_glIndexMask(void *_glfuncs, GLuint mask); -void gl4_0compat_glClearIndex(void *_glfuncs, GLfloat c); -void gl4_0compat_glClearAccum(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl4_0compat_glPushName(void *_glfuncs, GLuint name); -void gl4_0compat_glPopName(void *_glfuncs); -void gl4_0compat_glPassThrough(void *_glfuncs, GLfloat token); -void gl4_0compat_glLoadName(void *_glfuncs, GLuint name); -void gl4_0compat_glInitNames(void *_glfuncs); -GLint gl4_0compat_glRenderMode(void *_glfuncs, GLenum mode); -void gl4_0compat_glSelectBuffer(void *_glfuncs, GLsizei size, GLuint* buffer); -void gl4_0compat_glFeedbackBuffer(void *_glfuncs, GLsizei size, GLenum gltype, GLfloat* buffer); -void gl4_0compat_glTexGeniv(void *_glfuncs, GLenum coord, GLenum pname, const GLint* params); -void gl4_0compat_glTexGeni(void *_glfuncs, GLenum coord, GLenum pname, GLint param); -void gl4_0compat_glTexGenfv(void *_glfuncs, GLenum coord, GLenum pname, const GLfloat* params); -void gl4_0compat_glTexGenf(void *_glfuncs, GLenum coord, GLenum pname, GLfloat param); -void gl4_0compat_glTexGendv(void *_glfuncs, GLenum coord, GLenum pname, const GLdouble* params); -void gl4_0compat_glTexGend(void *_glfuncs, GLenum coord, GLenum pname, GLdouble param); -void gl4_0compat_glTexEnviv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl4_0compat_glTexEnvi(void *_glfuncs, GLenum target, GLenum pname, GLint param); -void gl4_0compat_glTexEnvfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params); -void gl4_0compat_glTexEnvf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param); -void gl4_0compat_glShadeModel(void *_glfuncs, GLenum mode); -void gl4_0compat_glPolygonStipple(void *_glfuncs, const GLubyte* mask); -void gl4_0compat_glMaterialiv(void *_glfuncs, GLenum face, GLenum pname, const GLint* params); -void gl4_0compat_glMateriali(void *_glfuncs, GLenum face, GLenum pname, GLint param); -void gl4_0compat_glMaterialfv(void *_glfuncs, GLenum face, GLenum pname, const GLfloat* params); -void gl4_0compat_glMaterialf(void *_glfuncs, GLenum face, GLenum pname, GLfloat param); -void gl4_0compat_glLineStipple(void *_glfuncs, GLint factor, GLushort pattern); -void gl4_0compat_glLightModeliv(void *_glfuncs, GLenum pname, const GLint* params); -void gl4_0compat_glLightModeli(void *_glfuncs, GLenum pname, GLint param); -void gl4_0compat_glLightModelfv(void *_glfuncs, GLenum pname, const GLfloat* params); -void gl4_0compat_glLightModelf(void *_glfuncs, GLenum pname, GLfloat param); -void gl4_0compat_glLightiv(void *_glfuncs, GLenum light, GLenum pname, const GLint* params); -void gl4_0compat_glLighti(void *_glfuncs, GLenum light, GLenum pname, GLint param); -void gl4_0compat_glLightfv(void *_glfuncs, GLenum light, GLenum pname, const GLfloat* params); -void gl4_0compat_glLightf(void *_glfuncs, GLenum light, GLenum pname, GLfloat param); -void gl4_0compat_glFogiv(void *_glfuncs, GLenum pname, const GLint* params); -void gl4_0compat_glFogi(void *_glfuncs, GLenum pname, GLint param); -void gl4_0compat_glFogfv(void *_glfuncs, GLenum pname, const GLfloat* params); -void gl4_0compat_glFogf(void *_glfuncs, GLenum pname, GLfloat param); -void gl4_0compat_glColorMaterial(void *_glfuncs, GLenum face, GLenum mode); -void gl4_0compat_glClipPlane(void *_glfuncs, GLenum plane, const GLdouble* equation); -void gl4_0compat_glVertex4sv(void *_glfuncs, const GLshort* v); -void gl4_0compat_glVertex4s(void *_glfuncs, GLshort x, GLshort y, GLshort z, GLshort w); -void gl4_0compat_glVertex4iv(void *_glfuncs, const GLint* v); -void gl4_0compat_glVertex4i(void *_glfuncs, GLint x, GLint y, GLint z, GLint w); -void gl4_0compat_glVertex4fv(void *_glfuncs, const GLfloat* v); -void gl4_0compat_glVertex4f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -void gl4_0compat_glVertex4dv(void *_glfuncs, const GLdouble* v); -void gl4_0compat_glVertex4d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -void gl4_0compat_glVertex3sv(void *_glfuncs, const GLshort* v); -void gl4_0compat_glVertex3s(void *_glfuncs, GLshort x, GLshort y, GLshort z); -void gl4_0compat_glVertex3iv(void *_glfuncs, const GLint* v); -void gl4_0compat_glVertex3i(void *_glfuncs, GLint x, GLint y, GLint z); -void gl4_0compat_glVertex3fv(void *_glfuncs, const GLfloat* v); -void gl4_0compat_glVertex3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl4_0compat_glVertex3dv(void *_glfuncs, const GLdouble* v); -void gl4_0compat_glVertex3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl4_0compat_glVertex2sv(void *_glfuncs, const GLshort* v); -void gl4_0compat_glVertex2s(void *_glfuncs, GLshort x, GLshort y); -void gl4_0compat_glVertex2iv(void *_glfuncs, const GLint* v); -void gl4_0compat_glVertex2i(void *_glfuncs, GLint x, GLint y); -void gl4_0compat_glVertex2fv(void *_glfuncs, const GLfloat* v); -void gl4_0compat_glVertex2f(void *_glfuncs, GLfloat x, GLfloat y); -void gl4_0compat_glVertex2dv(void *_glfuncs, const GLdouble* v); -void gl4_0compat_glVertex2d(void *_glfuncs, GLdouble x, GLdouble y); -void gl4_0compat_glTexCoord4sv(void *_glfuncs, const GLshort* v); -void gl4_0compat_glTexCoord4s(void *_glfuncs, GLshort s, GLshort t, GLshort r, GLshort q); -void gl4_0compat_glTexCoord4iv(void *_glfuncs, const GLint* v); -void gl4_0compat_glTexCoord4i(void *_glfuncs, GLint s, GLint t, GLint r, GLint q); -void gl4_0compat_glTexCoord4fv(void *_glfuncs, const GLfloat* v); -void gl4_0compat_glTexCoord4f(void *_glfuncs, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -void gl4_0compat_glTexCoord4dv(void *_glfuncs, const GLdouble* v); -void gl4_0compat_glTexCoord4d(void *_glfuncs, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -void gl4_0compat_glTexCoord3sv(void *_glfuncs, const GLshort* v); -void gl4_0compat_glTexCoord3s(void *_glfuncs, GLshort s, GLshort t, GLshort r); -void gl4_0compat_glTexCoord3iv(void *_glfuncs, const GLint* v); -void gl4_0compat_glTexCoord3i(void *_glfuncs, GLint s, GLint t, GLint r); -void gl4_0compat_glTexCoord3fv(void *_glfuncs, const GLfloat* v); -void gl4_0compat_glTexCoord3f(void *_glfuncs, GLfloat s, GLfloat t, GLfloat r); -void gl4_0compat_glTexCoord3dv(void *_glfuncs, const GLdouble* v); -void gl4_0compat_glTexCoord3d(void *_glfuncs, GLdouble s, GLdouble t, GLdouble r); -void gl4_0compat_glTexCoord2sv(void *_glfuncs, const GLshort* v); -void gl4_0compat_glTexCoord2s(void *_glfuncs, GLshort s, GLshort t); -void gl4_0compat_glTexCoord2iv(void *_glfuncs, const GLint* v); -void gl4_0compat_glTexCoord2i(void *_glfuncs, GLint s, GLint t); -void gl4_0compat_glTexCoord2fv(void *_glfuncs, const GLfloat* v); -void gl4_0compat_glTexCoord2f(void *_glfuncs, GLfloat s, GLfloat t); -void gl4_0compat_glTexCoord2dv(void *_glfuncs, const GLdouble* v); -void gl4_0compat_glTexCoord2d(void *_glfuncs, GLdouble s, GLdouble t); -void gl4_0compat_glTexCoord1sv(void *_glfuncs, const GLshort* v); -void gl4_0compat_glTexCoord1s(void *_glfuncs, GLshort s); -void gl4_0compat_glTexCoord1iv(void *_glfuncs, const GLint* v); -void gl4_0compat_glTexCoord1i(void *_glfuncs, GLint s); -void gl4_0compat_glTexCoord1fv(void *_glfuncs, const GLfloat* v); -void gl4_0compat_glTexCoord1f(void *_glfuncs, GLfloat s); -void gl4_0compat_glTexCoord1dv(void *_glfuncs, const GLdouble* v); -void gl4_0compat_glTexCoord1d(void *_glfuncs, GLdouble s); -void gl4_0compat_glRectsv(void *_glfuncs, const GLshort* v1, const GLshort* v2); -void gl4_0compat_glRects(void *_glfuncs, GLshort x1, GLshort y1, GLshort x2, GLshort y2); -void gl4_0compat_glRectiv(void *_glfuncs, const GLint* v1, const GLint* v2); -void gl4_0compat_glRecti(void *_glfuncs, GLint x1, GLint y1, GLint x2, GLint y2); -void gl4_0compat_glRectfv(void *_glfuncs, const GLfloat* v1, const GLfloat* v2); -void gl4_0compat_glRectf(void *_glfuncs, GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2); -void gl4_0compat_glRectdv(void *_glfuncs, const GLdouble* v1, const GLdouble* v2); -void gl4_0compat_glRectd(void *_glfuncs, GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2); -void gl4_0compat_glRasterPos4sv(void *_glfuncs, const GLshort* v); -void gl4_0compat_glRasterPos4s(void *_glfuncs, GLshort x, GLshort y, GLshort z, GLshort w); -void gl4_0compat_glRasterPos4iv(void *_glfuncs, const GLint* v); -void gl4_0compat_glRasterPos4i(void *_glfuncs, GLint x, GLint y, GLint z, GLint w); -void gl4_0compat_glRasterPos4fv(void *_glfuncs, const GLfloat* v); -void gl4_0compat_glRasterPos4f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -void gl4_0compat_glRasterPos4dv(void *_glfuncs, const GLdouble* v); -void gl4_0compat_glRasterPos4d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -void gl4_0compat_glRasterPos3sv(void *_glfuncs, const GLshort* v); -void gl4_0compat_glRasterPos3s(void *_glfuncs, GLshort x, GLshort y, GLshort z); -void gl4_0compat_glRasterPos3iv(void *_glfuncs, const GLint* v); -void gl4_0compat_glRasterPos3i(void *_glfuncs, GLint x, GLint y, GLint z); -void gl4_0compat_glRasterPos3fv(void *_glfuncs, const GLfloat* v); -void gl4_0compat_glRasterPos3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl4_0compat_glRasterPos3dv(void *_glfuncs, const GLdouble* v); -void gl4_0compat_glRasterPos3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl4_0compat_glRasterPos2sv(void *_glfuncs, const GLshort* v); -void gl4_0compat_glRasterPos2s(void *_glfuncs, GLshort x, GLshort y); -void gl4_0compat_glRasterPos2iv(void *_glfuncs, const GLint* v); -void gl4_0compat_glRasterPos2i(void *_glfuncs, GLint x, GLint y); -void gl4_0compat_glRasterPos2fv(void *_glfuncs, const GLfloat* v); -void gl4_0compat_glRasterPos2f(void *_glfuncs, GLfloat x, GLfloat y); -void gl4_0compat_glRasterPos2dv(void *_glfuncs, const GLdouble* v); -void gl4_0compat_glRasterPos2d(void *_glfuncs, GLdouble x, GLdouble y); -void gl4_0compat_glNormal3sv(void *_glfuncs, const GLshort* v); -void gl4_0compat_glNormal3s(void *_glfuncs, GLshort nx, GLshort ny, GLshort nz); -void gl4_0compat_glNormal3iv(void *_glfuncs, const GLint* v); -void gl4_0compat_glNormal3i(void *_glfuncs, GLint nx, GLint ny, GLint nz); -void gl4_0compat_glNormal3fv(void *_glfuncs, const GLfloat* v); -void gl4_0compat_glNormal3f(void *_glfuncs, GLfloat nx, GLfloat ny, GLfloat nz); -void gl4_0compat_glNormal3dv(void *_glfuncs, const GLdouble* v); -void gl4_0compat_glNormal3d(void *_glfuncs, GLdouble nx, GLdouble ny, GLdouble nz); -void gl4_0compat_glNormal3bv(void *_glfuncs, const GLbyte* v); -void gl4_0compat_glNormal3b(void *_glfuncs, GLbyte nx, GLbyte ny, GLbyte nz); -void gl4_0compat_glIndexsv(void *_glfuncs, const GLshort* c); -void gl4_0compat_glIndexs(void *_glfuncs, GLshort c); -void gl4_0compat_glIndexiv(void *_glfuncs, const GLint* c); -void gl4_0compat_glIndexi(void *_glfuncs, GLint c); -void gl4_0compat_glIndexfv(void *_glfuncs, const GLfloat* c); -void gl4_0compat_glIndexf(void *_glfuncs, GLfloat c); -void gl4_0compat_glIndexdv(void *_glfuncs, const GLdouble* c); -void gl4_0compat_glIndexd(void *_glfuncs, GLdouble c); -void gl4_0compat_glEnd(void *_glfuncs); -void gl4_0compat_glEdgeFlagv(void *_glfuncs, const GLboolean* flag); -void gl4_0compat_glEdgeFlag(void *_glfuncs, GLboolean flag); -void gl4_0compat_glColor4usv(void *_glfuncs, const GLushort* v); -void gl4_0compat_glColor4us(void *_glfuncs, GLushort red, GLushort green, GLushort blue, GLushort alpha); -void gl4_0compat_glColor4uiv(void *_glfuncs, const GLuint* v); -void gl4_0compat_glColor4ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue, GLuint alpha); -void gl4_0compat_glColor4ubv(void *_glfuncs, const GLubyte* v); -void gl4_0compat_glColor4ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha); -void gl4_0compat_glColor4sv(void *_glfuncs, const GLshort* v); -void gl4_0compat_glColor4s(void *_glfuncs, GLshort red, GLshort green, GLshort blue, GLshort alpha); -void gl4_0compat_glColor4iv(void *_glfuncs, const GLint* v); -void gl4_0compat_glColor4i(void *_glfuncs, GLint red, GLint green, GLint blue, GLint alpha); -void gl4_0compat_glColor4fv(void *_glfuncs, const GLfloat* v); -void gl4_0compat_glColor4f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl4_0compat_glColor4dv(void *_glfuncs, const GLdouble* v); -void gl4_0compat_glColor4d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha); -void gl4_0compat_glColor4bv(void *_glfuncs, const GLbyte* v); -void gl4_0compat_glColor4b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha); -void gl4_0compat_glColor3usv(void *_glfuncs, const GLushort* v); -void gl4_0compat_glColor3us(void *_glfuncs, GLushort red, GLushort green, GLushort blue); -void gl4_0compat_glColor3uiv(void *_glfuncs, const GLuint* v); -void gl4_0compat_glColor3ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue); -void gl4_0compat_glColor3ubv(void *_glfuncs, const GLubyte* v); -void gl4_0compat_glColor3ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue); -void gl4_0compat_glColor3sv(void *_glfuncs, const GLshort* v); -void gl4_0compat_glColor3s(void *_glfuncs, GLshort red, GLshort green, GLshort blue); -void gl4_0compat_glColor3iv(void *_glfuncs, const GLint* v); -void gl4_0compat_glColor3i(void *_glfuncs, GLint red, GLint green, GLint blue); -void gl4_0compat_glColor3fv(void *_glfuncs, const GLfloat* v); -void gl4_0compat_glColor3f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue); -void gl4_0compat_glColor3dv(void *_glfuncs, const GLdouble* v); -void gl4_0compat_glColor3d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue); -void gl4_0compat_glColor3bv(void *_glfuncs, const GLbyte* v); -void gl4_0compat_glColor3b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue); -void gl4_0compat_glBitmap(void *_glfuncs, GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte* bitmap); -void gl4_0compat_glBegin(void *_glfuncs, GLenum mode); -void gl4_0compat_glListBase(void *_glfuncs, GLuint base); -GLuint gl4_0compat_glGenLists(void *_glfuncs, GLsizei range_); -void gl4_0compat_glDeleteLists(void *_glfuncs, GLuint list, GLsizei range_); -void gl4_0compat_glCallLists(void *_glfuncs, GLsizei n, GLenum gltype, const GLvoid* lists); -void gl4_0compat_glCallList(void *_glfuncs, GLuint list); -void gl4_0compat_glEndList(void *_glfuncs); -void gl4_0compat_glNewList(void *_glfuncs, GLuint list, GLenum mode); -void gl4_0compat_glPushClientAttrib(void *_glfuncs, GLbitfield mask); -void gl4_0compat_glPopClientAttrib(void *_glfuncs); -void gl4_0compat_glPrioritizeTextures(void *_glfuncs, GLsizei n, const GLuint* textures, const GLfloat* priorities); -GLboolean gl4_0compat_glAreTexturesResident(void *_glfuncs, GLsizei n, const GLuint* textures, GLboolean* residences); -void gl4_0compat_glVertexPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl4_0compat_glTexCoordPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl4_0compat_glNormalPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl4_0compat_glInterleavedArrays(void *_glfuncs, GLenum format, GLsizei stride, const GLvoid* pointer); -void gl4_0compat_glIndexPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl4_0compat_glEnableClientState(void *_glfuncs, GLenum array); -void gl4_0compat_glEdgeFlagPointer(void *_glfuncs, GLsizei stride, const GLvoid* pointer); -void gl4_0compat_glDisableClientState(void *_glfuncs, GLenum array); -void gl4_0compat_glColorPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl4_0compat_glArrayElement(void *_glfuncs, GLint i); -void gl4_0compat_glResetMinmax(void *_glfuncs, GLenum target); -void gl4_0compat_glResetHistogram(void *_glfuncs, GLenum target); -void gl4_0compat_glMinmax(void *_glfuncs, GLenum target, GLenum internalFormat, GLboolean sink); -void gl4_0compat_glHistogram(void *_glfuncs, GLenum target, GLsizei width, GLenum internalFormat, GLboolean sink); -void gl4_0compat_glGetMinmaxParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl4_0compat_glGetMinmaxParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl4_0compat_glGetMinmax(void *_glfuncs, GLenum target, GLboolean reset, GLenum format, GLenum gltype, GLvoid* values); -void gl4_0compat_glGetHistogramParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl4_0compat_glGetHistogramParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl4_0compat_glGetHistogram(void *_glfuncs, GLenum target, GLboolean reset, GLenum format, GLenum gltype, GLvoid* values); -void gl4_0compat_glSeparableFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* row, const GLvoid* column); -void gl4_0compat_glGetSeparableFilter(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* row, GLvoid* column, GLvoid* span); -void gl4_0compat_glGetConvolutionParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl4_0compat_glGetConvolutionParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl4_0compat_glGetConvolutionFilter(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* image); -void gl4_0compat_glCopyConvolutionFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height); -void gl4_0compat_glCopyConvolutionFilter1D(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width); -void gl4_0compat_glConvolutionParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl4_0compat_glConvolutionParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint params); -void gl4_0compat_glConvolutionParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params); -void gl4_0compat_glConvolutionParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat params); -void gl4_0compat_glConvolutionFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* image); -void gl4_0compat_glConvolutionFilter1D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum gltype, const GLvoid* image); -void gl4_0compat_glCopyColorSubTable(void *_glfuncs, GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); -void gl4_0compat_glColorSubTable(void *_glfuncs, GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum gltype, const GLvoid* data); -void gl4_0compat_glGetColorTableParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl4_0compat_glGetColorTableParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl4_0compat_glGetColorTable(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* table); -void gl4_0compat_glCopyColorTable(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width); -void gl4_0compat_glColorTableParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl4_0compat_glColorTableParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params); -void gl4_0compat_glColorTable(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum gltype, const GLvoid* table); -void gl4_0compat_glMultTransposeMatrixd(void *_glfuncs, const GLdouble* m); -void gl4_0compat_glMultTransposeMatrixf(void *_glfuncs, const GLfloat* m); -void gl4_0compat_glLoadTransposeMatrixd(void *_glfuncs, const GLdouble* m); -void gl4_0compat_glLoadTransposeMatrixf(void *_glfuncs, const GLfloat* m); -void gl4_0compat_glMultiTexCoord4sv(void *_glfuncs, GLenum target, const GLshort* v); -void gl4_0compat_glMultiTexCoord4s(void *_glfuncs, GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); -void gl4_0compat_glMultiTexCoord4iv(void *_glfuncs, GLenum target, const GLint* v); -void gl4_0compat_glMultiTexCoord4i(void *_glfuncs, GLenum target, GLint s, GLint t, GLint r, GLint q); -void gl4_0compat_glMultiTexCoord4fv(void *_glfuncs, GLenum target, const GLfloat* v); -void gl4_0compat_glMultiTexCoord4f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -void gl4_0compat_glMultiTexCoord4dv(void *_glfuncs, GLenum target, const GLdouble* v); -void gl4_0compat_glMultiTexCoord4d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -void gl4_0compat_glMultiTexCoord3sv(void *_glfuncs, GLenum target, const GLshort* v); -void gl4_0compat_glMultiTexCoord3s(void *_glfuncs, GLenum target, GLshort s, GLshort t, GLshort r); -void gl4_0compat_glMultiTexCoord3iv(void *_glfuncs, GLenum target, const GLint* v); -void gl4_0compat_glMultiTexCoord3i(void *_glfuncs, GLenum target, GLint s, GLint t, GLint r); -void gl4_0compat_glMultiTexCoord3fv(void *_glfuncs, GLenum target, const GLfloat* v); -void gl4_0compat_glMultiTexCoord3f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t, GLfloat r); -void gl4_0compat_glMultiTexCoord3dv(void *_glfuncs, GLenum target, const GLdouble* v); -void gl4_0compat_glMultiTexCoord3d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t, GLdouble r); -void gl4_0compat_glMultiTexCoord2sv(void *_glfuncs, GLenum target, const GLshort* v); -void gl4_0compat_glMultiTexCoord2s(void *_glfuncs, GLenum target, GLshort s, GLshort t); -void gl4_0compat_glMultiTexCoord2iv(void *_glfuncs, GLenum target, const GLint* v); -void gl4_0compat_glMultiTexCoord2i(void *_glfuncs, GLenum target, GLint s, GLint t); -void gl4_0compat_glMultiTexCoord2fv(void *_glfuncs, GLenum target, const GLfloat* v); -void gl4_0compat_glMultiTexCoord2f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t); -void gl4_0compat_glMultiTexCoord2dv(void *_glfuncs, GLenum target, const GLdouble* v); -void gl4_0compat_glMultiTexCoord2d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t); -void gl4_0compat_glMultiTexCoord1sv(void *_glfuncs, GLenum target, const GLshort* v); -void gl4_0compat_glMultiTexCoord1s(void *_glfuncs, GLenum target, GLshort s); -void gl4_0compat_glMultiTexCoord1iv(void *_glfuncs, GLenum target, const GLint* v); -void gl4_0compat_glMultiTexCoord1i(void *_glfuncs, GLenum target, GLint s); -void gl4_0compat_glMultiTexCoord1fv(void *_glfuncs, GLenum target, const GLfloat* v); -void gl4_0compat_glMultiTexCoord1f(void *_glfuncs, GLenum target, GLfloat s); -void gl4_0compat_glMultiTexCoord1dv(void *_glfuncs, GLenum target, const GLdouble* v); -void gl4_0compat_glMultiTexCoord1d(void *_glfuncs, GLenum target, GLdouble s); -void gl4_0compat_glClientActiveTexture(void *_glfuncs, GLenum texture); -void gl4_0compat_glWindowPos3sv(void *_glfuncs, const GLshort* v); -void gl4_0compat_glWindowPos3s(void *_glfuncs, GLshort x, GLshort y, GLshort z); -void gl4_0compat_glWindowPos3iv(void *_glfuncs, const GLint* v); -void gl4_0compat_glWindowPos3i(void *_glfuncs, GLint x, GLint y, GLint z); -void gl4_0compat_glWindowPos3fv(void *_glfuncs, const GLfloat* v); -void gl4_0compat_glWindowPos3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl4_0compat_glWindowPos3dv(void *_glfuncs, const GLdouble* v); -void gl4_0compat_glWindowPos3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl4_0compat_glWindowPos2sv(void *_glfuncs, const GLshort* v); -void gl4_0compat_glWindowPos2s(void *_glfuncs, GLshort x, GLshort y); -void gl4_0compat_glWindowPos2iv(void *_glfuncs, const GLint* v); -void gl4_0compat_glWindowPos2i(void *_glfuncs, GLint x, GLint y); -void gl4_0compat_glWindowPos2fv(void *_glfuncs, const GLfloat* v); -void gl4_0compat_glWindowPos2f(void *_glfuncs, GLfloat x, GLfloat y); -void gl4_0compat_glWindowPos2dv(void *_glfuncs, const GLdouble* v); -void gl4_0compat_glWindowPos2d(void *_glfuncs, GLdouble x, GLdouble y); -void gl4_0compat_glSecondaryColorPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl4_0compat_glSecondaryColor3usv(void *_glfuncs, const GLushort* v); -void gl4_0compat_glSecondaryColor3us(void *_glfuncs, GLushort red, GLushort green, GLushort blue); -void gl4_0compat_glSecondaryColor3uiv(void *_glfuncs, const GLuint* v); -void gl4_0compat_glSecondaryColor3ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue); -void gl4_0compat_glSecondaryColor3ubv(void *_glfuncs, const GLubyte* v); -void gl4_0compat_glSecondaryColor3ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue); -void gl4_0compat_glSecondaryColor3sv(void *_glfuncs, const GLshort* v); -void gl4_0compat_glSecondaryColor3s(void *_glfuncs, GLshort red, GLshort green, GLshort blue); -void gl4_0compat_glSecondaryColor3iv(void *_glfuncs, const GLint* v); -void gl4_0compat_glSecondaryColor3i(void *_glfuncs, GLint red, GLint green, GLint blue); -void gl4_0compat_glSecondaryColor3fv(void *_glfuncs, const GLfloat* v); -void gl4_0compat_glSecondaryColor3f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue); -void gl4_0compat_glSecondaryColor3dv(void *_glfuncs, const GLdouble* v); -void gl4_0compat_glSecondaryColor3d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue); -void gl4_0compat_glSecondaryColor3bv(void *_glfuncs, const GLbyte* v); -void gl4_0compat_glSecondaryColor3b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue); -void gl4_0compat_glFogCoordPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl4_0compat_glFogCoorddv(void *_glfuncs, const GLdouble* coord); -void gl4_0compat_glFogCoordd(void *_glfuncs, GLdouble coord); -void gl4_0compat_glFogCoordfv(void *_glfuncs, const GLfloat* coord); -void gl4_0compat_glFogCoordf(void *_glfuncs, GLfloat coord); -void gl4_0compat_glVertexAttrib4usv(void *_glfuncs, GLuint index, const GLushort* v); -void gl4_0compat_glVertexAttrib4uiv(void *_glfuncs, GLuint index, const GLuint* v); -void gl4_0compat_glVertexAttrib4ubv(void *_glfuncs, GLuint index, const GLubyte* v); -void gl4_0compat_glVertexAttrib4sv(void *_glfuncs, GLuint index, const GLshort* v); -void gl4_0compat_glVertexAttrib4s(void *_glfuncs, GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -void gl4_0compat_glVertexAttrib4iv(void *_glfuncs, GLuint index, const GLint* v); -void gl4_0compat_glVertexAttrib4fv(void *_glfuncs, GLuint index, const GLfloat* v); -void gl4_0compat_glVertexAttrib4f(void *_glfuncs, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -void gl4_0compat_glVertexAttrib4dv(void *_glfuncs, GLuint index, const GLdouble* v); -void gl4_0compat_glVertexAttrib4d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -void gl4_0compat_glVertexAttrib4bv(void *_glfuncs, GLuint index, const GLbyte* v); -void gl4_0compat_glVertexAttrib4Nusv(void *_glfuncs, GLuint index, const GLushort* v); -void gl4_0compat_glVertexAttrib4Nuiv(void *_glfuncs, GLuint index, const GLuint* v); -void gl4_0compat_glVertexAttrib4Nubv(void *_glfuncs, GLuint index, const GLubyte* v); -void gl4_0compat_glVertexAttrib4Nub(void *_glfuncs, GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -void gl4_0compat_glVertexAttrib4Nsv(void *_glfuncs, GLuint index, const GLshort* v); -void gl4_0compat_glVertexAttrib4Niv(void *_glfuncs, GLuint index, const GLint* v); -void gl4_0compat_glVertexAttrib4Nbv(void *_glfuncs, GLuint index, const GLbyte* v); -void gl4_0compat_glVertexAttrib3sv(void *_glfuncs, GLuint index, const GLshort* v); -void gl4_0compat_glVertexAttrib3s(void *_glfuncs, GLuint index, GLshort x, GLshort y, GLshort z); -void gl4_0compat_glVertexAttrib3fv(void *_glfuncs, GLuint index, const GLfloat* v); -void gl4_0compat_glVertexAttrib3f(void *_glfuncs, GLuint index, GLfloat x, GLfloat y, GLfloat z); -void gl4_0compat_glVertexAttrib3dv(void *_glfuncs, GLuint index, const GLdouble* v); -void gl4_0compat_glVertexAttrib3d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y, GLdouble z); -void gl4_0compat_glVertexAttrib2sv(void *_glfuncs, GLuint index, const GLshort* v); -void gl4_0compat_glVertexAttrib2s(void *_glfuncs, GLuint index, GLshort x, GLshort y); -void gl4_0compat_glVertexAttrib2fv(void *_glfuncs, GLuint index, const GLfloat* v); -void gl4_0compat_glVertexAttrib2f(void *_glfuncs, GLuint index, GLfloat x, GLfloat y); -void gl4_0compat_glVertexAttrib2dv(void *_glfuncs, GLuint index, const GLdouble* v); -void gl4_0compat_glVertexAttrib2d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y); -void gl4_0compat_glVertexAttrib1sv(void *_glfuncs, GLuint index, const GLshort* v); -void gl4_0compat_glVertexAttrib1s(void *_glfuncs, GLuint index, GLshort x); -void gl4_0compat_glVertexAttrib1fv(void *_glfuncs, GLuint index, const GLfloat* v); -void gl4_0compat_glVertexAttrib1f(void *_glfuncs, GLuint index, GLfloat x); -void gl4_0compat_glVertexAttrib1dv(void *_glfuncs, GLuint index, const GLdouble* v); -void gl4_0compat_glVertexAttrib1d(void *_glfuncs, GLuint index, GLdouble x); -void gl4_0compat_glVertexAttribI4usv(void *_glfuncs, GLuint index, const GLushort* v); -void gl4_0compat_glVertexAttribI4ubv(void *_glfuncs, GLuint index, const GLubyte* v); -void gl4_0compat_glVertexAttribI4sv(void *_glfuncs, GLuint index, const GLshort* v); -void gl4_0compat_glVertexAttribI4bv(void *_glfuncs, GLuint index, const GLbyte* v); -void gl4_0compat_glVertexAttribI4uiv(void *_glfuncs, GLuint index, const GLuint* v); -void gl4_0compat_glVertexAttribI3uiv(void *_glfuncs, GLuint index, const GLuint* v); -void gl4_0compat_glVertexAttribI2uiv(void *_glfuncs, GLuint index, const GLuint* v); -void gl4_0compat_glVertexAttribI1uiv(void *_glfuncs, GLuint index, const GLuint* v); -void gl4_0compat_glVertexAttribI4iv(void *_glfuncs, GLuint index, const GLint* v); -void gl4_0compat_glVertexAttribI3iv(void *_glfuncs, GLuint index, const GLint* v); -void gl4_0compat_glVertexAttribI2iv(void *_glfuncs, GLuint index, const GLint* v); -void gl4_0compat_glVertexAttribI1iv(void *_glfuncs, GLuint index, const GLint* v); -void gl4_0compat_glVertexAttribI4ui(void *_glfuncs, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -void gl4_0compat_glVertexAttribI3ui(void *_glfuncs, GLuint index, GLuint x, GLuint y, GLuint z); -void gl4_0compat_glVertexAttribI2ui(void *_glfuncs, GLuint index, GLuint x, GLuint y); -void gl4_0compat_glVertexAttribI1ui(void *_glfuncs, GLuint index, GLuint x); -void gl4_0compat_glVertexAttribI4i(void *_glfuncs, GLuint index, GLint x, GLint y, GLint z, GLint w); -void gl4_0compat_glVertexAttribI3i(void *_glfuncs, GLuint index, GLint x, GLint y, GLint z); -void gl4_0compat_glVertexAttribI2i(void *_glfuncs, GLuint index, GLint x, GLint y); -void gl4_0compat_glVertexAttribI1i(void *_glfuncs, GLuint index, GLint x); - - -#ifdef __cplusplus -} // extern "C" -#endif diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.0compat/gl.go b/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.0compat/gl.go deleted file mode 100644 index 246afb061b..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.0compat/gl.go +++ /dev/null @@ -1,8607 +0,0 @@ -// ** file automatically generated by glgen -- do not edit manually ** - -package GL - -// #cgo CXXFLAGS: -std=c++0x -pedantic-errors -Wall -fno-strict-aliasing -// #cgo LDFLAGS: -lstdc++ -// #cgo pkg-config: Qt5Core Qt5OpenGL -// -// #include "funcs.h" -// -// void free(void*); -// -import "C" - -import ( - "fmt" - "reflect" - "unsafe" - - "gopkg.in/qml.v1/gl/glbase" -) - -// API returns a value that offers methods matching the OpenGL version 4.0 API. -// -// The returned API must not be used after the provided OpenGL context becomes invalid. -func API(context glbase.Contexter) *GL { - gl := &GL{} - gl.funcs = C.gl4_0compat_funcs() - if gl.funcs == nil { - panic(fmt.Errorf("OpenGL version 4.0 is not available")) - } - return gl -} - -// GL implements the OpenGL version 4.0 API. Values of this -// type must be created via the API function, and it must not be used after -// the associated OpenGL context becomes invalid. -type GL struct { - funcs unsafe.Pointer -} - -const ( - FALSE = 0 - TRUE = 1 - NONE = 0 - - BYTE = 0x1400 - UNSIGNED_BYTE = 0x1401 - SHORT = 0x1402 - UNSIGNED_SHORT = 0x1403 - INT = 0x1404 - UNSIGNED_INT = 0x1405 - FLOAT = 0x1406 - N2_BYTES = 0x1407 - N3_BYTES = 0x1408 - N4_BYTES = 0x1409 - DOUBLE = 0x140A - HALF_FLOAT = 0x140B - - ACCUM = 0x0100 - LOAD = 0x0101 - RETURN = 0x0102 - MULT = 0x0103 - ADD = 0x0104 - - ACCUM_BUFFER_BIT = 0x00000200 - ALL_ATTRIB_BITS = 0xFFFFFFFF - COLOR_BUFFER_BIT = 0x00004000 - CURRENT_BIT = 0x00000001 - DEPTH_BUFFER_BIT = 0x00000100 - ENABLE_BIT = 0x00002000 - EVAL_BIT = 0x00010000 - FOG_BIT = 0x00000080 - HINT_BIT = 0x00008000 - LIGHTING_BIT = 0x00000040 - LINE_BIT = 0x00000004 - LIST_BIT = 0x00020000 - MULTISAMPLE_BIT = 0x20000000 - PIXEL_MODE_BIT = 0x00000020 - POINT_BIT = 0x00000002 - POLYGON_BIT = 0x00000008 - POLYGON_STIPPLE_BIT = 0x00000010 - SCISSOR_BIT = 0x00080000 - STENCIL_BUFFER_BIT = 0x00000400 - TEXTURE_BIT = 0x00040000 - TRANSFORM_BIT = 0x00001000 - VIEWPORT_BIT = 0x00000800 - - ALWAYS = 0x0207 - EQUAL = 0x0202 - GEQUAL = 0x0206 - GREATER = 0x0204 - LEQUAL = 0x0203 - LESS = 0x0201 - NEVER = 0x0200 - NOTEQUAL = 0x0205 - - LOGIC_OP = 0x0BF1 - - DST_ALPHA = 0x0304 - ONE = 1 - ONE_MINUS_DST_ALPHA = 0x0305 - ONE_MINUS_SRC_ALPHA = 0x0303 - ONE_MINUS_SRC_COLOR = 0x0301 - SRC_ALPHA = 0x0302 - SRC_COLOR = 0x0300 - ZERO = 0 - - DST_COLOR = 0x0306 - ONE_MINUS_DST_COLOR = 0x0307 - SRC_ALPHA_SATURATE = 0x0308 - - CLIENT_ALL_ATTRIB_BITS = 0xFFFFFFFF - CLIENT_PIXEL_STORE_BIT = 0x00000001 - CLIENT_VERTEX_ARRAY_BIT = 0x00000002 - - CLIP_DISTANCE0 = 0x3000 - CLIP_DISTANCE1 = 0x3001 - CLIP_DISTANCE2 = 0x3002 - CLIP_DISTANCE3 = 0x3003 - CLIP_DISTANCE4 = 0x3004 - CLIP_DISTANCE5 = 0x3005 - CLIP_DISTANCE6 = 0x3006 - CLIP_DISTANCE7 = 0x3007 - CLIP_PLANE0 = 0x3000 - CLIP_PLANE1 = 0x3001 - CLIP_PLANE2 = 0x3002 - CLIP_PLANE3 = 0x3003 - CLIP_PLANE4 = 0x3004 - CLIP_PLANE5 = 0x3005 - - BACK = 0x0405 - FRONT = 0x0404 - FRONT_AND_BACK = 0x0408 - - AMBIENT = 0x1200 - AMBIENT_AND_DIFFUSE = 0x1602 - DIFFUSE = 0x1201 - EMISSION = 0x1600 - SPECULAR = 0x1202 - - CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT = 0x00000001 - - CONTEXT_COMPATIBILITY_PROFILE_BIT = 0x00000002 - CONTEXT_CORE_PROFILE_BIT = 0x00000001 - - AUX0 = 0x0409 - AUX1 = 0x040A - AUX2 = 0x040B - AUX3 = 0x040C - BACK_LEFT = 0x0402 - BACK_RIGHT = 0x0403 - FRONT_LEFT = 0x0400 - FRONT_RIGHT = 0x0401 - LEFT = 0x0406 - RIGHT = 0x0407 - - ALPHA_TEST = 0x0BC0 - AUTO_NORMAL = 0x0D80 - BLEND = 0x0BE2 - COLOR_ARRAY = 0x8076 - COLOR_LOGIC_OP = 0x0BF2 - COLOR_MATERIAL = 0x0B57 - CULL_FACE = 0x0B44 - DEPTH_TEST = 0x0B71 - DITHER = 0x0BD0 - EDGE_FLAG_ARRAY = 0x8079 - FOG = 0x0B60 - INDEX_ARRAY = 0x8077 - INDEX_LOGIC_OP = 0x0BF1 - LIGHT0 = 0x4000 - LIGHT1 = 0x4001 - LIGHT2 = 0x4002 - LIGHT3 = 0x4003 - LIGHT4 = 0x4004 - LIGHT5 = 0x4005 - LIGHT6 = 0x4006 - LIGHT7 = 0x4007 - LIGHTING = 0x0B50 - LINE_SMOOTH = 0x0B20 - LINE_STIPPLE = 0x0B24 - MAP1_COLOR_4 = 0x0D90 - MAP1_INDEX = 0x0D91 - MAP1_NORMAL = 0x0D92 - MAP1_TEXTURE_COORD_1 = 0x0D93 - MAP1_TEXTURE_COORD_2 = 0x0D94 - MAP1_TEXTURE_COORD_3 = 0x0D95 - MAP1_TEXTURE_COORD_4 = 0x0D96 - MAP1_VERTEX_3 = 0x0D97 - MAP1_VERTEX_4 = 0x0D98 - MAP2_COLOR_4 = 0x0DB0 - MAP2_INDEX = 0x0DB1 - MAP2_NORMAL = 0x0DB2 - MAP2_TEXTURE_COORD_1 = 0x0DB3 - MAP2_TEXTURE_COORD_2 = 0x0DB4 - MAP2_TEXTURE_COORD_3 = 0x0DB5 - MAP2_TEXTURE_COORD_4 = 0x0DB6 - MAP2_VERTEX_3 = 0x0DB7 - MAP2_VERTEX_4 = 0x0DB8 - NORMALIZE = 0x0BA1 - NORMAL_ARRAY = 0x8075 - POINT_SMOOTH = 0x0B10 - POLYGON_OFFSET_FILL = 0x8037 - POLYGON_OFFSET_LINE = 0x2A02 - POLYGON_OFFSET_POINT = 0x2A01 - POLYGON_SMOOTH = 0x0B41 - POLYGON_STIPPLE = 0x0B42 - SCISSOR_TEST = 0x0C11 - STENCIL_TEST = 0x0B90 - TEXTURE_1D = 0x0DE0 - TEXTURE_2D = 0x0DE1 - TEXTURE_COORD_ARRAY = 0x8078 - TEXTURE_GEN_Q = 0x0C63 - TEXTURE_GEN_R = 0x0C62 - TEXTURE_GEN_S = 0x0C60 - TEXTURE_GEN_T = 0x0C61 - VERTEX_ARRAY = 0x8074 - - INVALID_ENUM = 0x0500 - INVALID_FRAMEBUFFER_OPERATION = 0x0506 - INVALID_OPERATION = 0x0502 - INVALID_VALUE = 0x0501 - NO_ERROR = 0 - OUT_OF_MEMORY = 0x0505 - STACK_OVERFLOW = 0x0503 - STACK_UNDERFLOW = 0x0504 - - N2D = 0x0600 - N3D = 0x0601 - N3D_COLOR = 0x0602 - N3D_COLOR_TEXTURE = 0x0603 - N4D_COLOR_TEXTURE = 0x0604 - - BITMAP_TOKEN = 0x0704 - COPY_PIXEL_TOKEN = 0x0706 - DRAW_PIXEL_TOKEN = 0x0705 - LINE_RESET_TOKEN = 0x0707 - LINE_TOKEN = 0x0702 - PASS_THROUGH_TOKEN = 0x0700 - POINT_TOKEN = 0x0701 - POLYGON_TOKEN = 0x0703 - - EXP = 0x0800 - EXP2 = 0x0801 - LINEAR = 0x2601 - - FOG_COLOR = 0x0B66 - FOG_DENSITY = 0x0B62 - FOG_END = 0x0B64 - FOG_INDEX = 0x0B61 - FOG_MODE = 0x0B65 - FOG_START = 0x0B63 - - CCW = 0x0901 - CW = 0x0900 - - COEFF = 0x0A00 - DOMAIN = 0x0A02 - ORDER = 0x0A01 - - PIXEL_MAP_A_TO_A = 0x0C79 - PIXEL_MAP_B_TO_B = 0x0C78 - PIXEL_MAP_G_TO_G = 0x0C77 - PIXEL_MAP_I_TO_A = 0x0C75 - PIXEL_MAP_I_TO_B = 0x0C74 - PIXEL_MAP_I_TO_G = 0x0C73 - PIXEL_MAP_I_TO_I = 0x0C70 - PIXEL_MAP_I_TO_R = 0x0C72 - PIXEL_MAP_R_TO_R = 0x0C76 - PIXEL_MAP_S_TO_S = 0x0C71 - - ACCUM_ALPHA_BITS = 0x0D5B - ACCUM_BLUE_BITS = 0x0D5A - ACCUM_CLEAR_VALUE = 0x0B80 - ACCUM_GREEN_BITS = 0x0D59 - ACCUM_RED_BITS = 0x0D58 - ALIASED_LINE_WIDTH_RANGE = 0x846E - ALIASED_POINT_SIZE_RANGE = 0x846D - ALPHA_BIAS = 0x0D1D - ALPHA_BITS = 0x0D55 - ALPHA_SCALE = 0x0D1C - ALPHA_TEST_FUNC = 0x0BC1 - ALPHA_TEST_REF = 0x0BC2 - ATTRIB_STACK_DEPTH = 0x0BB0 - AUX_BUFFERS = 0x0C00 - BLEND_DST = 0x0BE0 - BLEND_SRC = 0x0BE1 - BLUE_BIAS = 0x0D1B - BLUE_BITS = 0x0D54 - BLUE_SCALE = 0x0D1A - CLIENT_ATTRIB_STACK_DEPTH = 0x0BB1 - COLOR_ARRAY_SIZE = 0x8081 - COLOR_ARRAY_STRIDE = 0x8083 - COLOR_ARRAY_TYPE = 0x8082 - COLOR_CLEAR_VALUE = 0x0C22 - COLOR_MATERIAL_FACE = 0x0B55 - COLOR_MATERIAL_PARAMETER = 0x0B56 - COLOR_WRITEMASK = 0x0C23 - CULL_FACE_MODE = 0x0B45 - CURRENT_COLOR = 0x0B00 - CURRENT_INDEX = 0x0B01 - CURRENT_NORMAL = 0x0B02 - CURRENT_RASTER_COLOR = 0x0B04 - CURRENT_RASTER_DISTANCE = 0x0B09 - CURRENT_RASTER_INDEX = 0x0B05 - CURRENT_RASTER_POSITION = 0x0B07 - CURRENT_RASTER_POSITION_VALID = 0x0B08 - CURRENT_RASTER_TEXTURE_COORDS = 0x0B06 - CURRENT_TEXTURE_COORDS = 0x0B03 - DEPTH_BIAS = 0x0D1F - DEPTH_BITS = 0x0D56 - DEPTH_CLEAR_VALUE = 0x0B73 - DEPTH_FUNC = 0x0B74 - DEPTH_RANGE = 0x0B70 - DEPTH_SCALE = 0x0D1E - DEPTH_WRITEMASK = 0x0B72 - DOUBLEBUFFER = 0x0C32 - DRAW_BUFFER = 0x0C01 - EDGE_FLAG = 0x0B43 - EDGE_FLAG_ARRAY_STRIDE = 0x808C - FEEDBACK_BUFFER_SIZE = 0x0DF1 - FEEDBACK_BUFFER_TYPE = 0x0DF2 - FOG_HINT = 0x0C54 - FRONT_FACE = 0x0B46 - GREEN_BIAS = 0x0D19 - GREEN_BITS = 0x0D53 - GREEN_SCALE = 0x0D18 - INDEX_ARRAY_STRIDE = 0x8086 - INDEX_ARRAY_TYPE = 0x8085 - INDEX_BITS = 0x0D51 - INDEX_CLEAR_VALUE = 0x0C20 - INDEX_MODE = 0x0C30 - INDEX_OFFSET = 0x0D13 - INDEX_SHIFT = 0x0D12 - INDEX_WRITEMASK = 0x0C21 - LIGHT_MODEL_AMBIENT = 0x0B53 - LIGHT_MODEL_COLOR_CONTROL = 0x81F8 - LIGHT_MODEL_LOCAL_VIEWER = 0x0B51 - LIGHT_MODEL_TWO_SIDE = 0x0B52 - LINE_SMOOTH_HINT = 0x0C52 - LINE_STIPPLE_PATTERN = 0x0B25 - LINE_STIPPLE_REPEAT = 0x0B26 - LINE_WIDTH = 0x0B21 - LINE_WIDTH_GRANULARITY = 0x0B23 - LINE_WIDTH_RANGE = 0x0B22 - LIST_BASE = 0x0B32 - LIST_INDEX = 0x0B33 - LIST_MODE = 0x0B30 - LOGIC_OP_MODE = 0x0BF0 - MAP1_GRID_DOMAIN = 0x0DD0 - MAP1_GRID_SEGMENTS = 0x0DD1 - MAP2_GRID_DOMAIN = 0x0DD2 - MAP2_GRID_SEGMENTS = 0x0DD3 - MAP_COLOR = 0x0D10 - MAP_STENCIL = 0x0D11 - MATRIX_MODE = 0x0BA0 - MAX_ATTRIB_STACK_DEPTH = 0x0D35 - MAX_CLIENT_ATTRIB_STACK_DEPTH = 0x0D3B - MAX_CLIP_DISTANCES = 0x0D32 - MAX_CLIP_PLANES = 0x0D32 - MAX_EVAL_ORDER = 0x0D30 - MAX_LIGHTS = 0x0D31 - MAX_LIST_NESTING = 0x0B31 - MAX_MODELVIEW_STACK_DEPTH = 0x0D36 - MAX_NAME_STACK_DEPTH = 0x0D37 - MAX_PIXEL_MAP_TABLE = 0x0D34 - MAX_PROJECTION_STACK_DEPTH = 0x0D38 - MAX_TEXTURE_SIZE = 0x0D33 - MAX_TEXTURE_STACK_DEPTH = 0x0D39 - MAX_VIEWPORT_DIMS = 0x0D3A - MODELVIEW_MATRIX = 0x0BA6 - MODELVIEW_STACK_DEPTH = 0x0BA3 - NAME_STACK_DEPTH = 0x0D70 - NORMAL_ARRAY_STRIDE = 0x807F - NORMAL_ARRAY_TYPE = 0x807E - PACK_ALIGNMENT = 0x0D05 - PACK_LSB_FIRST = 0x0D01 - PACK_ROW_LENGTH = 0x0D02 - PACK_SKIP_PIXELS = 0x0D04 - PACK_SKIP_ROWS = 0x0D03 - PACK_SWAP_BYTES = 0x0D00 - PERSPECTIVE_CORRECTION_HINT = 0x0C50 - PIXEL_MAP_A_TO_A_SIZE = 0x0CB9 - PIXEL_MAP_B_TO_B_SIZE = 0x0CB8 - PIXEL_MAP_G_TO_G_SIZE = 0x0CB7 - PIXEL_MAP_I_TO_A_SIZE = 0x0CB5 - PIXEL_MAP_I_TO_B_SIZE = 0x0CB4 - PIXEL_MAP_I_TO_G_SIZE = 0x0CB3 - PIXEL_MAP_I_TO_I_SIZE = 0x0CB0 - PIXEL_MAP_I_TO_R_SIZE = 0x0CB2 - PIXEL_MAP_R_TO_R_SIZE = 0x0CB6 - PIXEL_MAP_S_TO_S_SIZE = 0x0CB1 - POINT_SIZE = 0x0B11 - POINT_SIZE_GRANULARITY = 0x0B13 - POINT_SIZE_RANGE = 0x0B12 - POINT_SMOOTH_HINT = 0x0C51 - POLYGON_MODE = 0x0B40 - POLYGON_OFFSET_FACTOR = 0x8038 - POLYGON_OFFSET_UNITS = 0x2A00 - POLYGON_SMOOTH_HINT = 0x0C53 - PROJECTION_MATRIX = 0x0BA7 - PROJECTION_STACK_DEPTH = 0x0BA4 - READ_BUFFER = 0x0C02 - RED_BIAS = 0x0D15 - RED_BITS = 0x0D52 - RED_SCALE = 0x0D14 - RENDER_MODE = 0x0C40 - RGBA_MODE = 0x0C31 - SCISSOR_BOX = 0x0C10 - SELECTION_BUFFER_SIZE = 0x0DF4 - SHADE_MODEL = 0x0B54 - SMOOTH_LINE_WIDTH_GRANULARITY = 0x0B23 - SMOOTH_LINE_WIDTH_RANGE = 0x0B22 - SMOOTH_POINT_SIZE_GRANULARITY = 0x0B13 - SMOOTH_POINT_SIZE_RANGE = 0x0B12 - STENCIL_BITS = 0x0D57 - STENCIL_CLEAR_VALUE = 0x0B91 - STENCIL_FAIL = 0x0B94 - STENCIL_FUNC = 0x0B92 - STENCIL_PASS_DEPTH_FAIL = 0x0B95 - STENCIL_PASS_DEPTH_PASS = 0x0B96 - STENCIL_REF = 0x0B97 - STENCIL_VALUE_MASK = 0x0B93 - STENCIL_WRITEMASK = 0x0B98 - STEREO = 0x0C33 - SUBPIXEL_BITS = 0x0D50 - TEXTURE_BINDING_1D = 0x8068 - TEXTURE_BINDING_2D = 0x8069 - TEXTURE_BINDING_3D = 0x806A - TEXTURE_COORD_ARRAY_SIZE = 0x8088 - TEXTURE_COORD_ARRAY_STRIDE = 0x808A - TEXTURE_COORD_ARRAY_TYPE = 0x8089 - TEXTURE_MATRIX = 0x0BA8 - TEXTURE_STACK_DEPTH = 0x0BA5 - UNPACK_ALIGNMENT = 0x0CF5 - UNPACK_LSB_FIRST = 0x0CF1 - UNPACK_ROW_LENGTH = 0x0CF2 - UNPACK_SKIP_PIXELS = 0x0CF4 - UNPACK_SKIP_ROWS = 0x0CF3 - UNPACK_SWAP_BYTES = 0x0CF0 - VERTEX_ARRAY_SIZE = 0x807A - VERTEX_ARRAY_STRIDE = 0x807C - VERTEX_ARRAY_TYPE = 0x807B - VIEWPORT = 0x0BA2 - ZOOM_X = 0x0D16 - ZOOM_Y = 0x0D17 - - COLOR_ARRAY_POINTER = 0x8090 - EDGE_FLAG_ARRAY_POINTER = 0x8093 - FEEDBACK_BUFFER_POINTER = 0x0DF0 - INDEX_ARRAY_POINTER = 0x8091 - NORMAL_ARRAY_POINTER = 0x808F - SELECTION_BUFFER_POINTER = 0x0DF3 - TEXTURE_COORD_ARRAY_POINTER = 0x8092 - VERTEX_ARRAY_POINTER = 0x808E - - TEXTURE_ALPHA_SIZE = 0x805F - TEXTURE_BLUE_SIZE = 0x805E - TEXTURE_BORDER = 0x1005 - TEXTURE_BORDER_COLOR = 0x1004 - TEXTURE_COMPONENTS = 0x1003 - TEXTURE_GREEN_SIZE = 0x805D - TEXTURE_HEIGHT = 0x1001 - TEXTURE_INTENSITY_SIZE = 0x8061 - TEXTURE_INTERNAL_FORMAT = 0x1003 - TEXTURE_LUMINANCE_SIZE = 0x8060 - TEXTURE_MAG_FILTER = 0x2800 - TEXTURE_MIN_FILTER = 0x2801 - TEXTURE_PRIORITY = 0x8066 - TEXTURE_RED_SIZE = 0x805C - TEXTURE_RESIDENT = 0x8067 - TEXTURE_WIDTH = 0x1000 - TEXTURE_WRAP_S = 0x2802 - TEXTURE_WRAP_T = 0x2803 - - DONT_CARE = 0x1100 - FASTEST = 0x1101 - NICEST = 0x1102 - - FRAGMENT_SHADER_DERIVATIVE_HINT = 0x8B8B - GENERATE_MIPMAP_HINT = 0x8192 - TEXTURE_COMPRESSION_HINT = 0x84EF - - C3F_V3F = 0x2A24 - C4F_N3F_V3F = 0x2A26 - C4UB_V2F = 0x2A22 - C4UB_V3F = 0x2A23 - N3F_V3F = 0x2A25 - T2F_C3F_V3F = 0x2A2A - T2F_C4F_N3F_V3F = 0x2A2C - T2F_C4UB_V3F = 0x2A29 - T2F_N3F_V3F = 0x2A2B - T2F_V3F = 0x2A27 - T4F_C4F_N3F_V4F = 0x2A2D - T4F_V4F = 0x2A28 - V2F = 0x2A20 - V3F = 0x2A21 - - MODULATE = 0x2100 - REPLACE = 0x1E01 - - SEPARATE_SPECULAR_COLOR = 0x81FA - SINGLE_COLOR = 0x81F9 - - CONSTANT_ATTENUATION = 0x1207 - LINEAR_ATTENUATION = 0x1208 - POSITION = 0x1203 - QUADRATIC_ATTENUATION = 0x1209 - SPOT_CUTOFF = 0x1206 - SPOT_DIRECTION = 0x1204 - SPOT_EXPONENT = 0x1205 - - COMPILE = 0x1300 - COMPILE_AND_EXECUTE = 0x1301 - - AND = 0x1501 - AND_INVERTED = 0x1504 - AND_REVERSE = 0x1502 - CLEAR = 0x1500 - COPY = 0x1503 - COPY_INVERTED = 0x150C - EQUIV = 0x1509 - INVERT = 0x150A - NAND = 0x150E - NOOP = 0x1505 - NOR = 0x1508 - OR = 0x1507 - OR_INVERTED = 0x150D - OR_REVERSE = 0x150B - SET = 0x150F - XOR = 0x1506 - - MAP_FLUSH_EXPLICIT_BIT = 0x0010 - MAP_INVALIDATE_BUFFER_BIT = 0x0008 - MAP_INVALIDATE_RANGE_BIT = 0x0004 - MAP_READ_BIT = 0x0001 - MAP_UNSYNCHRONIZED_BIT = 0x0020 - MAP_WRITE_BIT = 0x0002 - - COLOR_INDEXES = 0x1603 - SHININESS = 0x1601 - - MODELVIEW = 0x1700 - PROJECTION = 0x1701 - TEXTURE = 0x1702 - - LINE = 0x1B01 - POINT = 0x1B00 - - FILL = 0x1B02 - - COLOR = 0x1800 - DEPTH = 0x1801 - STENCIL = 0x1802 - - ALPHA = 0x1906 - BLUE = 0x1905 - COLOR_INDEX = 0x1900 - DEPTH_COMPONENT = 0x1902 - GREEN = 0x1904 - LUMINANCE = 0x1909 - LUMINANCE_ALPHA = 0x190A - RED = 0x1903 - RGB = 0x1907 - RGBA = 0x1908 - STENCIL_INDEX = 0x1901 - - ALPHA12 = 0x803D - ALPHA16 = 0x803E - ALPHA4 = 0x803B - ALPHA8 = 0x803C - INTENSITY = 0x8049 - INTENSITY12 = 0x804C - INTENSITY16 = 0x804D - INTENSITY4 = 0x804A - INTENSITY8 = 0x804B - LUMINANCE12 = 0x8041 - LUMINANCE12_ALPHA12 = 0x8047 - LUMINANCE12_ALPHA4 = 0x8046 - LUMINANCE16 = 0x8042 - LUMINANCE16_ALPHA16 = 0x8048 - LUMINANCE4 = 0x803F - LUMINANCE4_ALPHA4 = 0x8043 - LUMINANCE6_ALPHA2 = 0x8044 - LUMINANCE8 = 0x8040 - LUMINANCE8_ALPHA8 = 0x8045 - R3_G3_B2 = 0x2A10 - RGB10 = 0x8052 - RGB10_A2 = 0x8059 - RGB12 = 0x8053 - RGB16 = 0x8054 - RGB4 = 0x804F - RGB5 = 0x8050 - RGB5_A1 = 0x8057 - RGB8 = 0x8051 - RGBA12 = 0x805A - RGBA16 = 0x805B - RGBA2 = 0x8055 - RGBA4 = 0x8056 - RGBA8 = 0x8058 - - PACK_IMAGE_HEIGHT = 0x806C - PACK_SKIP_IMAGES = 0x806B - UNPACK_IMAGE_HEIGHT = 0x806E - UNPACK_SKIP_IMAGES = 0x806D - - BITMAP = 0x1A00 - UNSIGNED_BYTE_3_3_2 = 0x8032 - UNSIGNED_INT_10_10_10_2 = 0x8036 - UNSIGNED_INT_8_8_8_8 = 0x8035 - UNSIGNED_SHORT_4_4_4_4 = 0x8033 - UNSIGNED_SHORT_5_5_5_1 = 0x8034 - - POINT_DISTANCE_ATTENUATION = 0x8129 - POINT_FADE_THRESHOLD_SIZE = 0x8128 - POINT_SIZE_MAX = 0x8127 - POINT_SIZE_MIN = 0x8126 - - LINES = 0x0001 - LINES_ADJACENCY = 0x000A - LINE_LOOP = 0x0002 - LINE_STRIP = 0x0003 - LINE_STRIP_ADJACENCY = 0x000B - PATCHES = 0x000E - POINTS = 0x0000 - POLYGON = 0x0009 - QUADS = 0x0007 - QUAD_STRIP = 0x0008 - TRIANGLES = 0x0004 - TRIANGLES_ADJACENCY = 0x000C - TRIANGLE_FAN = 0x0006 - TRIANGLE_STRIP = 0x0005 - TRIANGLE_STRIP_ADJACENCY = 0x000D - - FEEDBACK = 0x1C01 - RENDER = 0x1C00 - SELECT = 0x1C02 - - FLAT = 0x1D00 - SMOOTH = 0x1D01 - - DECR = 0x1E03 - INCR = 0x1E02 - KEEP = 0x1E00 - - EXTENSIONS = 0x1F03 - RENDERER = 0x1F01 - VENDOR = 0x1F00 - VERSION = 0x1F02 - - S = 0x2000 - T = 0x2001 - R = 0x2002 - Q = 0x2003 - - DECAL = 0x2101 - - TEXTURE_ENV_COLOR = 0x2201 - TEXTURE_ENV_MODE = 0x2200 - - TEXTURE_ENV = 0x2300 - - EYE_LINEAR = 0x2400 - OBJECT_LINEAR = 0x2401 - SPHERE_MAP = 0x2402 - - EYE_PLANE = 0x2502 - OBJECT_PLANE = 0x2501 - TEXTURE_GEN_MODE = 0x2500 - - NEAREST = 0x2600 - - LINEAR_MIPMAP_LINEAR = 0x2703 - LINEAR_MIPMAP_NEAREST = 0x2701 - NEAREST_MIPMAP_LINEAR = 0x2702 - NEAREST_MIPMAP_NEAREST = 0x2700 - - GENERATE_MIPMAP = 0x8191 - TEXTURE_WRAP_R = 0x8072 - - PROXY_TEXTURE_1D = 0x8063 - PROXY_TEXTURE_2D = 0x8064 - PROXY_TEXTURE_3D = 0x8070 - TEXTURE_3D = 0x806F - TEXTURE_BASE_LEVEL = 0x813C - TEXTURE_MAX_LEVEL = 0x813D - TEXTURE_MAX_LOD = 0x813B - TEXTURE_MIN_LOD = 0x813A - - CLAMP = 0x2900 - CLAMP_TO_BORDER = 0x812D - CLAMP_TO_EDGE = 0x812F - REPEAT = 0x2901 - - SYNC_FLUSH_COMMANDS_BIT = 0x00000001 - INVALID_INDEX = 0xFFFFFFFF - TIMEOUT_IGNORED = 0xFFFFFFFFFFFFFFFF - CONSTANT_COLOR = 0x8001 - ONE_MINUS_CONSTANT_COLOR = 0x8002 - CONSTANT_ALPHA = 0x8003 - ONE_MINUS_CONSTANT_ALPHA = 0x8004 - FUNC_ADD = 0x8006 - MIN = 0x8007 - MAX = 0x8008 - BLEND_EQUATION_RGB = 0x8009 - FUNC_SUBTRACT = 0x800A - FUNC_REVERSE_SUBTRACT = 0x800B - RESCALE_NORMAL = 0x803A - TEXTURE_DEPTH = 0x8071 - MAX_3D_TEXTURE_SIZE = 0x8073 - MULTISAMPLE = 0x809D - SAMPLE_ALPHA_TO_COVERAGE = 0x809E - SAMPLE_ALPHA_TO_ONE = 0x809F - SAMPLE_COVERAGE = 0x80A0 - SAMPLE_BUFFERS = 0x80A8 - SAMPLES = 0x80A9 - SAMPLE_COVERAGE_VALUE = 0x80AA - SAMPLE_COVERAGE_INVERT = 0x80AB - BLEND_DST_RGB = 0x80C8 - BLEND_SRC_RGB = 0x80C9 - BLEND_DST_ALPHA = 0x80CA - BLEND_SRC_ALPHA = 0x80CB - BGR = 0x80E0 - BGRA = 0x80E1 - MAX_ELEMENTS_VERTICES = 0x80E8 - MAX_ELEMENTS_INDICES = 0x80E9 - DEPTH_COMPONENT16 = 0x81A5 - DEPTH_COMPONENT24 = 0x81A6 - DEPTH_COMPONENT32 = 0x81A7 - FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING = 0x8210 - FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE = 0x8211 - FRAMEBUFFER_ATTACHMENT_RED_SIZE = 0x8212 - FRAMEBUFFER_ATTACHMENT_GREEN_SIZE = 0x8213 - FRAMEBUFFER_ATTACHMENT_BLUE_SIZE = 0x8214 - FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE = 0x8215 - FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE = 0x8216 - FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE = 0x8217 - FRAMEBUFFER_DEFAULT = 0x8218 - FRAMEBUFFER_UNDEFINED = 0x8219 - DEPTH_STENCIL_ATTACHMENT = 0x821A - MAJOR_VERSION = 0x821B - MINOR_VERSION = 0x821C - NUM_EXTENSIONS = 0x821D - CONTEXT_FLAGS = 0x821E - INDEX = 0x8222 - COMPRESSED_RED = 0x8225 - COMPRESSED_RG = 0x8226 - RG = 0x8227 - RG_INTEGER = 0x8228 - R8 = 0x8229 - R16 = 0x822A - RG8 = 0x822B - RG16 = 0x822C - R16F = 0x822D - R32F = 0x822E - RG16F = 0x822F - RG32F = 0x8230 - R8I = 0x8231 - R8UI = 0x8232 - R16I = 0x8233 - R16UI = 0x8234 - R32I = 0x8235 - R32UI = 0x8236 - RG8I = 0x8237 - RG8UI = 0x8238 - RG16I = 0x8239 - RG16UI = 0x823A - RG32I = 0x823B - RG32UI = 0x823C - UNSIGNED_BYTE_2_3_3_REV = 0x8362 - UNSIGNED_SHORT_5_6_5 = 0x8363 - UNSIGNED_SHORT_5_6_5_REV = 0x8364 - UNSIGNED_SHORT_4_4_4_4_REV = 0x8365 - UNSIGNED_SHORT_1_5_5_5_REV = 0x8366 - UNSIGNED_INT_8_8_8_8_REV = 0x8367 - UNSIGNED_INT_2_10_10_10_REV = 0x8368 - MIRRORED_REPEAT = 0x8370 - FOG_COORDINATE_SOURCE = 0x8450 - FOG_COORD_SRC = 0x8450 - FOG_COORDINATE = 0x8451 - FOG_COORD = 0x8451 - FRAGMENT_DEPTH = 0x8452 - CURRENT_FOG_COORDINATE = 0x8453 - CURRENT_FOG_COORD = 0x8453 - FOG_COORDINATE_ARRAY_TYPE = 0x8454 - FOG_COORD_ARRAY_TYPE = 0x8454 - FOG_COORDINATE_ARRAY_STRIDE = 0x8455 - FOG_COORD_ARRAY_STRIDE = 0x8455 - FOG_COORDINATE_ARRAY_POINTER = 0x8456 - FOG_COORD_ARRAY_POINTER = 0x8456 - FOG_COORDINATE_ARRAY = 0x8457 - FOG_COORD_ARRAY = 0x8457 - COLOR_SUM = 0x8458 - CURRENT_SECONDARY_COLOR = 0x8459 - SECONDARY_COLOR_ARRAY_SIZE = 0x845A - SECONDARY_COLOR_ARRAY_TYPE = 0x845B - SECONDARY_COLOR_ARRAY_STRIDE = 0x845C - SECONDARY_COLOR_ARRAY_POINTER = 0x845D - SECONDARY_COLOR_ARRAY = 0x845E - CURRENT_RASTER_SECONDARY_COLOR = 0x845F - TEXTURE0 = 0x84C0 - TEXTURE1 = 0x84C1 - TEXTURE2 = 0x84C2 - TEXTURE3 = 0x84C3 - TEXTURE4 = 0x84C4 - TEXTURE5 = 0x84C5 - TEXTURE6 = 0x84C6 - TEXTURE7 = 0x84C7 - TEXTURE8 = 0x84C8 - TEXTURE9 = 0x84C9 - TEXTURE10 = 0x84CA - TEXTURE11 = 0x84CB - TEXTURE12 = 0x84CC - TEXTURE13 = 0x84CD - TEXTURE14 = 0x84CE - TEXTURE15 = 0x84CF - TEXTURE16 = 0x84D0 - TEXTURE17 = 0x84D1 - TEXTURE18 = 0x84D2 - TEXTURE19 = 0x84D3 - TEXTURE20 = 0x84D4 - TEXTURE21 = 0x84D5 - TEXTURE22 = 0x84D6 - TEXTURE23 = 0x84D7 - TEXTURE24 = 0x84D8 - TEXTURE25 = 0x84D9 - TEXTURE26 = 0x84DA - TEXTURE27 = 0x84DB - TEXTURE28 = 0x84DC - TEXTURE29 = 0x84DD - TEXTURE30 = 0x84DE - TEXTURE31 = 0x84DF - ACTIVE_TEXTURE = 0x84E0 - CLIENT_ACTIVE_TEXTURE = 0x84E1 - MAX_TEXTURE_UNITS = 0x84E2 - TRANSPOSE_MODELVIEW_MATRIX = 0x84E3 - TRANSPOSE_PROJECTION_MATRIX = 0x84E4 - TRANSPOSE_TEXTURE_MATRIX = 0x84E5 - TRANSPOSE_COLOR_MATRIX = 0x84E6 - SUBTRACT = 0x84E7 - MAX_RENDERBUFFER_SIZE = 0x84E8 - COMPRESSED_ALPHA = 0x84E9 - COMPRESSED_LUMINANCE = 0x84EA - COMPRESSED_LUMINANCE_ALPHA = 0x84EB - COMPRESSED_INTENSITY = 0x84EC - COMPRESSED_RGB = 0x84ED - COMPRESSED_RGBA = 0x84EE - UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER = 0x84F0 - UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER = 0x84F1 - TEXTURE_RECTANGLE = 0x84F5 - TEXTURE_BINDING_RECTANGLE = 0x84F6 - PROXY_TEXTURE_RECTANGLE = 0x84F7 - MAX_RECTANGLE_TEXTURE_SIZE = 0x84F8 - DEPTH_STENCIL = 0x84F9 - UNSIGNED_INT_24_8 = 0x84FA - MAX_TEXTURE_LOD_BIAS = 0x84FD - TEXTURE_FILTER_CONTROL = 0x8500 - TEXTURE_LOD_BIAS = 0x8501 - INCR_WRAP = 0x8507 - DECR_WRAP = 0x8508 - NORMAL_MAP = 0x8511 - REFLECTION_MAP = 0x8512 - TEXTURE_CUBE_MAP = 0x8513 - TEXTURE_BINDING_CUBE_MAP = 0x8514 - TEXTURE_CUBE_MAP_POSITIVE_X = 0x8515 - TEXTURE_CUBE_MAP_NEGATIVE_X = 0x8516 - TEXTURE_CUBE_MAP_POSITIVE_Y = 0x8517 - TEXTURE_CUBE_MAP_NEGATIVE_Y = 0x8518 - TEXTURE_CUBE_MAP_POSITIVE_Z = 0x8519 - TEXTURE_CUBE_MAP_NEGATIVE_Z = 0x851A - PROXY_TEXTURE_CUBE_MAP = 0x851B - MAX_CUBE_MAP_TEXTURE_SIZE = 0x851C - COMBINE = 0x8570 - COMBINE_RGB = 0x8571 - COMBINE_ALPHA = 0x8572 - RGB_SCALE = 0x8573 - ADD_SIGNED = 0x8574 - INTERPOLATE = 0x8575 - CONSTANT = 0x8576 - PRIMARY_COLOR = 0x8577 - PREVIOUS = 0x8578 - SOURCE0_RGB = 0x8580 - SRC0_RGB = 0x8580 - SOURCE1_RGB = 0x8581 - SRC1_RGB = 0x8581 - SOURCE2_RGB = 0x8582 - SRC2_RGB = 0x8582 - SOURCE0_ALPHA = 0x8588 - SRC0_ALPHA = 0x8588 - SOURCE1_ALPHA = 0x8589 - SRC1_ALPHA = 0x8589 - SOURCE2_ALPHA = 0x858A - SRC2_ALPHA = 0x858A - OPERAND0_RGB = 0x8590 - OPERAND1_RGB = 0x8591 - OPERAND2_RGB = 0x8592 - OPERAND0_ALPHA = 0x8598 - OPERAND1_ALPHA = 0x8599 - OPERAND2_ALPHA = 0x859A - VERTEX_ARRAY_BINDING = 0x85B5 - VERTEX_ATTRIB_ARRAY_ENABLED = 0x8622 - VERTEX_ATTRIB_ARRAY_SIZE = 0x8623 - VERTEX_ATTRIB_ARRAY_STRIDE = 0x8624 - VERTEX_ATTRIB_ARRAY_TYPE = 0x8625 - CURRENT_VERTEX_ATTRIB = 0x8626 - VERTEX_PROGRAM_POINT_SIZE = 0x8642 - PROGRAM_POINT_SIZE = 0x8642 - VERTEX_PROGRAM_TWO_SIDE = 0x8643 - VERTEX_ATTRIB_ARRAY_POINTER = 0x8645 - DEPTH_CLAMP = 0x864F - TEXTURE_COMPRESSED_IMAGE_SIZE = 0x86A0 - TEXTURE_COMPRESSED = 0x86A1 - NUM_COMPRESSED_TEXTURE_FORMATS = 0x86A2 - COMPRESSED_TEXTURE_FORMATS = 0x86A3 - DOT3_RGB = 0x86AE - DOT3_RGBA = 0x86AF - BUFFER_SIZE = 0x8764 - BUFFER_USAGE = 0x8765 - STENCIL_BACK_FUNC = 0x8800 - STENCIL_BACK_FAIL = 0x8801 - STENCIL_BACK_PASS_DEPTH_FAIL = 0x8802 - STENCIL_BACK_PASS_DEPTH_PASS = 0x8803 - RGBA32F = 0x8814 - RGB32F = 0x8815 - RGBA16F = 0x881A - RGB16F = 0x881B - MAX_DRAW_BUFFERS = 0x8824 - DRAW_BUFFER0 = 0x8825 - DRAW_BUFFER1 = 0x8826 - DRAW_BUFFER2 = 0x8827 - DRAW_BUFFER3 = 0x8828 - DRAW_BUFFER4 = 0x8829 - DRAW_BUFFER5 = 0x882A - DRAW_BUFFER6 = 0x882B - DRAW_BUFFER7 = 0x882C - DRAW_BUFFER8 = 0x882D - DRAW_BUFFER9 = 0x882E - DRAW_BUFFER10 = 0x882F - DRAW_BUFFER11 = 0x8830 - DRAW_BUFFER12 = 0x8831 - DRAW_BUFFER13 = 0x8832 - DRAW_BUFFER14 = 0x8833 - DRAW_BUFFER15 = 0x8834 - BLEND_EQUATION_ALPHA = 0x883D - TEXTURE_DEPTH_SIZE = 0x884A - DEPTH_TEXTURE_MODE = 0x884B - TEXTURE_COMPARE_MODE = 0x884C - TEXTURE_COMPARE_FUNC = 0x884D - COMPARE_R_TO_TEXTURE = 0x884E - COMPARE_REF_TO_TEXTURE = 0x884E - TEXTURE_CUBE_MAP_SEAMLESS = 0x884F - POINT_SPRITE = 0x8861 - COORD_REPLACE = 0x8862 - QUERY_COUNTER_BITS = 0x8864 - CURRENT_QUERY = 0x8865 - QUERY_RESULT = 0x8866 - QUERY_RESULT_AVAILABLE = 0x8867 - MAX_VERTEX_ATTRIBS = 0x8869 - VERTEX_ATTRIB_ARRAY_NORMALIZED = 0x886A - MAX_TESS_CONTROL_INPUT_COMPONENTS = 0x886C - MAX_TESS_EVALUATION_INPUT_COMPONENTS = 0x886D - MAX_TEXTURE_COORDS = 0x8871 - MAX_TEXTURE_IMAGE_UNITS = 0x8872 - GEOMETRY_SHADER_INVOCATIONS = 0x887F - ARRAY_BUFFER = 0x8892 - ELEMENT_ARRAY_BUFFER = 0x8893 - ARRAY_BUFFER_BINDING = 0x8894 - ELEMENT_ARRAY_BUFFER_BINDING = 0x8895 - VERTEX_ARRAY_BUFFER_BINDING = 0x8896 - NORMAL_ARRAY_BUFFER_BINDING = 0x8897 - COLOR_ARRAY_BUFFER_BINDING = 0x8898 - INDEX_ARRAY_BUFFER_BINDING = 0x8899 - TEXTURE_COORD_ARRAY_BUFFER_BINDING = 0x889A - EDGE_FLAG_ARRAY_BUFFER_BINDING = 0x889B - SECONDARY_COLOR_ARRAY_BUFFER_BINDING = 0x889C - FOG_COORDINATE_ARRAY_BUFFER_BINDING = 0x889D - FOG_COORD_ARRAY_BUFFER_BINDING = 0x889D - WEIGHT_ARRAY_BUFFER_BINDING = 0x889E - VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = 0x889F - READ_ONLY = 0x88B8 - WRITE_ONLY = 0x88B9 - READ_WRITE = 0x88BA - BUFFER_ACCESS = 0x88BB - BUFFER_MAPPED = 0x88BC - BUFFER_MAP_POINTER = 0x88BD - TIME_ELAPSED = 0x88BF - STREAM_DRAW = 0x88E0 - STREAM_READ = 0x88E1 - STREAM_COPY = 0x88E2 - STATIC_DRAW = 0x88E4 - STATIC_READ = 0x88E5 - STATIC_COPY = 0x88E6 - DYNAMIC_DRAW = 0x88E8 - DYNAMIC_READ = 0x88E9 - DYNAMIC_COPY = 0x88EA - PIXEL_PACK_BUFFER = 0x88EB - PIXEL_UNPACK_BUFFER = 0x88EC - PIXEL_PACK_BUFFER_BINDING = 0x88ED - PIXEL_UNPACK_BUFFER_BINDING = 0x88EF - DEPTH24_STENCIL8 = 0x88F0 - TEXTURE_STENCIL_SIZE = 0x88F1 - SRC1_COLOR = 0x88F9 - ONE_MINUS_SRC1_COLOR = 0x88FA - ONE_MINUS_SRC1_ALPHA = 0x88FB - MAX_DUAL_SOURCE_DRAW_BUFFERS = 0x88FC - VERTEX_ATTRIB_ARRAY_INTEGER = 0x88FD - VERTEX_ATTRIB_ARRAY_DIVISOR = 0x88FE - MAX_ARRAY_TEXTURE_LAYERS = 0x88FF - MIN_PROGRAM_TEXEL_OFFSET = 0x8904 - MAX_PROGRAM_TEXEL_OFFSET = 0x8905 - SAMPLES_PASSED = 0x8914 - GEOMETRY_VERTICES_OUT = 0x8916 - GEOMETRY_INPUT_TYPE = 0x8917 - GEOMETRY_OUTPUT_TYPE = 0x8918 - SAMPLER_BINDING = 0x8919 - CLAMP_VERTEX_COLOR = 0x891A - CLAMP_FRAGMENT_COLOR = 0x891B - CLAMP_READ_COLOR = 0x891C - FIXED_ONLY = 0x891D - UNIFORM_BUFFER = 0x8A11 - UNIFORM_BUFFER_BINDING = 0x8A28 - UNIFORM_BUFFER_START = 0x8A29 - UNIFORM_BUFFER_SIZE = 0x8A2A - MAX_VERTEX_UNIFORM_BLOCKS = 0x8A2B - MAX_GEOMETRY_UNIFORM_BLOCKS = 0x8A2C - MAX_FRAGMENT_UNIFORM_BLOCKS = 0x8A2D - MAX_COMBINED_UNIFORM_BLOCKS = 0x8A2E - MAX_UNIFORM_BUFFER_BINDINGS = 0x8A2F - MAX_UNIFORM_BLOCK_SIZE = 0x8A30 - MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS = 0x8A31 - MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS = 0x8A32 - MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS = 0x8A33 - UNIFORM_BUFFER_OFFSET_ALIGNMENT = 0x8A34 - ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH = 0x8A35 - ACTIVE_UNIFORM_BLOCKS = 0x8A36 - UNIFORM_TYPE = 0x8A37 - UNIFORM_SIZE = 0x8A38 - UNIFORM_NAME_LENGTH = 0x8A39 - UNIFORM_BLOCK_INDEX = 0x8A3A - UNIFORM_OFFSET = 0x8A3B - UNIFORM_ARRAY_STRIDE = 0x8A3C - UNIFORM_MATRIX_STRIDE = 0x8A3D - UNIFORM_IS_ROW_MAJOR = 0x8A3E - UNIFORM_BLOCK_BINDING = 0x8A3F - UNIFORM_BLOCK_DATA_SIZE = 0x8A40 - UNIFORM_BLOCK_NAME_LENGTH = 0x8A41 - UNIFORM_BLOCK_ACTIVE_UNIFORMS = 0x8A42 - UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES = 0x8A43 - UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER = 0x8A44 - UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER = 0x8A45 - UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER = 0x8A46 - FRAGMENT_SHADER = 0x8B30 - VERTEX_SHADER = 0x8B31 - MAX_FRAGMENT_UNIFORM_COMPONENTS = 0x8B49 - MAX_VERTEX_UNIFORM_COMPONENTS = 0x8B4A - MAX_VARYING_FLOATS = 0x8B4B - MAX_VARYING_COMPONENTS = 0x8B4B - MAX_VERTEX_TEXTURE_IMAGE_UNITS = 0x8B4C - MAX_COMBINED_TEXTURE_IMAGE_UNITS = 0x8B4D - SHADER_TYPE = 0x8B4F - FLOAT_VEC2 = 0x8B50 - FLOAT_VEC3 = 0x8B51 - FLOAT_VEC4 = 0x8B52 - INT_VEC2 = 0x8B53 - INT_VEC3 = 0x8B54 - INT_VEC4 = 0x8B55 - BOOL = 0x8B56 - BOOL_VEC2 = 0x8B57 - BOOL_VEC3 = 0x8B58 - BOOL_VEC4 = 0x8B59 - FLOAT_MAT2 = 0x8B5A - FLOAT_MAT3 = 0x8B5B - FLOAT_MAT4 = 0x8B5C - SAMPLER_1D = 0x8B5D - SAMPLER_2D = 0x8B5E - SAMPLER_3D = 0x8B5F - SAMPLER_CUBE = 0x8B60 - SAMPLER_1D_SHADOW = 0x8B61 - SAMPLER_2D_SHADOW = 0x8B62 - SAMPLER_2D_RECT = 0x8B63 - SAMPLER_2D_RECT_SHADOW = 0x8B64 - FLOAT_MAT2x3 = 0x8B65 - FLOAT_MAT2x4 = 0x8B66 - FLOAT_MAT3x2 = 0x8B67 - FLOAT_MAT3x4 = 0x8B68 - FLOAT_MAT4x2 = 0x8B69 - FLOAT_MAT4x3 = 0x8B6A - DELETE_STATUS = 0x8B80 - COMPILE_STATUS = 0x8B81 - LINK_STATUS = 0x8B82 - VALIDATE_STATUS = 0x8B83 - INFO_LOG_LENGTH = 0x8B84 - ATTACHED_SHADERS = 0x8B85 - ACTIVE_UNIFORMS = 0x8B86 - ACTIVE_UNIFORM_MAX_LENGTH = 0x8B87 - SHADER_SOURCE_LENGTH = 0x8B88 - ACTIVE_ATTRIBUTES = 0x8B89 - ACTIVE_ATTRIBUTE_MAX_LENGTH = 0x8B8A - SHADING_LANGUAGE_VERSION = 0x8B8C - CURRENT_PROGRAM = 0x8B8D - TEXTURE_RED_TYPE = 0x8C10 - TEXTURE_GREEN_TYPE = 0x8C11 - TEXTURE_BLUE_TYPE = 0x8C12 - TEXTURE_ALPHA_TYPE = 0x8C13 - TEXTURE_LUMINANCE_TYPE = 0x8C14 - TEXTURE_INTENSITY_TYPE = 0x8C15 - TEXTURE_DEPTH_TYPE = 0x8C16 - UNSIGNED_NORMALIZED = 0x8C17 - TEXTURE_1D_ARRAY = 0x8C18 - PROXY_TEXTURE_1D_ARRAY = 0x8C19 - TEXTURE_2D_ARRAY = 0x8C1A - PROXY_TEXTURE_2D_ARRAY = 0x8C1B - TEXTURE_BINDING_1D_ARRAY = 0x8C1C - TEXTURE_BINDING_2D_ARRAY = 0x8C1D - MAX_GEOMETRY_TEXTURE_IMAGE_UNITS = 0x8C29 - TEXTURE_BUFFER = 0x8C2A - MAX_TEXTURE_BUFFER_SIZE = 0x8C2B - TEXTURE_BINDING_BUFFER = 0x8C2C - TEXTURE_BUFFER_DATA_STORE_BINDING = 0x8C2D - ANY_SAMPLES_PASSED = 0x8C2F - SAMPLE_SHADING = 0x8C36 - MIN_SAMPLE_SHADING_VALUE = 0x8C37 - R11F_G11F_B10F = 0x8C3A - UNSIGNED_INT_10F_11F_11F_REV = 0x8C3B - RGB9_E5 = 0x8C3D - UNSIGNED_INT_5_9_9_9_REV = 0x8C3E - TEXTURE_SHARED_SIZE = 0x8C3F - SRGB = 0x8C40 - SRGB8 = 0x8C41 - SRGB_ALPHA = 0x8C42 - SRGB8_ALPHA8 = 0x8C43 - SLUMINANCE_ALPHA = 0x8C44 - SLUMINANCE8_ALPHA8 = 0x8C45 - SLUMINANCE = 0x8C46 - SLUMINANCE8 = 0x8C47 - COMPRESSED_SRGB = 0x8C48 - COMPRESSED_SRGB_ALPHA = 0x8C49 - COMPRESSED_SLUMINANCE = 0x8C4A - COMPRESSED_SLUMINANCE_ALPHA = 0x8C4B - TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH = 0x8C76 - TRANSFORM_FEEDBACK_BUFFER_MODE = 0x8C7F - MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS = 0x8C80 - TRANSFORM_FEEDBACK_VARYINGS = 0x8C83 - TRANSFORM_FEEDBACK_BUFFER_START = 0x8C84 - TRANSFORM_FEEDBACK_BUFFER_SIZE = 0x8C85 - PRIMITIVES_GENERATED = 0x8C87 - TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN = 0x8C88 - RASTERIZER_DISCARD = 0x8C89 - MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS = 0x8C8A - MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS = 0x8C8B - INTERLEAVED_ATTRIBS = 0x8C8C - SEPARATE_ATTRIBS = 0x8C8D - TRANSFORM_FEEDBACK_BUFFER = 0x8C8E - TRANSFORM_FEEDBACK_BUFFER_BINDING = 0x8C8F - POINT_SPRITE_COORD_ORIGIN = 0x8CA0 - LOWER_LEFT = 0x8CA1 - UPPER_LEFT = 0x8CA2 - STENCIL_BACK_REF = 0x8CA3 - STENCIL_BACK_VALUE_MASK = 0x8CA4 - STENCIL_BACK_WRITEMASK = 0x8CA5 - DRAW_FRAMEBUFFER_BINDING = 0x8CA6 - FRAMEBUFFER_BINDING = 0x8CA6 - RENDERBUFFER_BINDING = 0x8CA7 - READ_FRAMEBUFFER = 0x8CA8 - DRAW_FRAMEBUFFER = 0x8CA9 - READ_FRAMEBUFFER_BINDING = 0x8CAA - RENDERBUFFER_SAMPLES = 0x8CAB - DEPTH_COMPONENT32F = 0x8CAC - DEPTH32F_STENCIL8 = 0x8CAD - FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE = 0x8CD0 - FRAMEBUFFER_ATTACHMENT_OBJECT_NAME = 0x8CD1 - FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL = 0x8CD2 - FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE = 0x8CD3 - FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER = 0x8CD4 - FRAMEBUFFER_COMPLETE = 0x8CD5 - FRAMEBUFFER_INCOMPLETE_ATTACHMENT = 0x8CD6 - FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = 0x8CD7 - FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER = 0x8CDB - FRAMEBUFFER_INCOMPLETE_READ_BUFFER = 0x8CDC - FRAMEBUFFER_UNSUPPORTED = 0x8CDD - MAX_COLOR_ATTACHMENTS = 0x8CDF - COLOR_ATTACHMENT0 = 0x8CE0 - COLOR_ATTACHMENT1 = 0x8CE1 - COLOR_ATTACHMENT2 = 0x8CE2 - COLOR_ATTACHMENT3 = 0x8CE3 - COLOR_ATTACHMENT4 = 0x8CE4 - COLOR_ATTACHMENT5 = 0x8CE5 - COLOR_ATTACHMENT6 = 0x8CE6 - COLOR_ATTACHMENT7 = 0x8CE7 - COLOR_ATTACHMENT8 = 0x8CE8 - COLOR_ATTACHMENT9 = 0x8CE9 - COLOR_ATTACHMENT10 = 0x8CEA - COLOR_ATTACHMENT11 = 0x8CEB - COLOR_ATTACHMENT12 = 0x8CEC - COLOR_ATTACHMENT13 = 0x8CED - COLOR_ATTACHMENT14 = 0x8CEE - COLOR_ATTACHMENT15 = 0x8CEF - DEPTH_ATTACHMENT = 0x8D00 - STENCIL_ATTACHMENT = 0x8D20 - FRAMEBUFFER = 0x8D40 - RENDERBUFFER = 0x8D41 - RENDERBUFFER_WIDTH = 0x8D42 - RENDERBUFFER_HEIGHT = 0x8D43 - RENDERBUFFER_INTERNAL_FORMAT = 0x8D44 - STENCIL_INDEX1 = 0x8D46 - STENCIL_INDEX4 = 0x8D47 - STENCIL_INDEX8 = 0x8D48 - STENCIL_INDEX16 = 0x8D49 - RENDERBUFFER_RED_SIZE = 0x8D50 - RENDERBUFFER_GREEN_SIZE = 0x8D51 - RENDERBUFFER_BLUE_SIZE = 0x8D52 - RENDERBUFFER_ALPHA_SIZE = 0x8D53 - RENDERBUFFER_DEPTH_SIZE = 0x8D54 - RENDERBUFFER_STENCIL_SIZE = 0x8D55 - FRAMEBUFFER_INCOMPLETE_MULTISAMPLE = 0x8D56 - MAX_SAMPLES = 0x8D57 - RGBA32UI = 0x8D70 - RGB32UI = 0x8D71 - RGBA16UI = 0x8D76 - RGB16UI = 0x8D77 - RGBA8UI = 0x8D7C - RGB8UI = 0x8D7D - RGBA32I = 0x8D82 - RGB32I = 0x8D83 - RGBA16I = 0x8D88 - RGB16I = 0x8D89 - RGBA8I = 0x8D8E - RGB8I = 0x8D8F - RED_INTEGER = 0x8D94 - GREEN_INTEGER = 0x8D95 - BLUE_INTEGER = 0x8D96 - ALPHA_INTEGER = 0x8D97 - RGB_INTEGER = 0x8D98 - RGBA_INTEGER = 0x8D99 - BGR_INTEGER = 0x8D9A - BGRA_INTEGER = 0x8D9B - INT_2_10_10_10_REV = 0x8D9F - FRAMEBUFFER_ATTACHMENT_LAYERED = 0x8DA7 - FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS = 0x8DA8 - FLOAT_32_UNSIGNED_INT_24_8_REV = 0x8DAD - FRAMEBUFFER_SRGB = 0x8DB9 - COMPRESSED_RED_RGTC1 = 0x8DBB - COMPRESSED_SIGNED_RED_RGTC1 = 0x8DBC - COMPRESSED_RG_RGTC2 = 0x8DBD - COMPRESSED_SIGNED_RG_RGTC2 = 0x8DBE - SAMPLER_1D_ARRAY = 0x8DC0 - SAMPLER_2D_ARRAY = 0x8DC1 - SAMPLER_BUFFER = 0x8DC2 - SAMPLER_1D_ARRAY_SHADOW = 0x8DC3 - SAMPLER_2D_ARRAY_SHADOW = 0x8DC4 - SAMPLER_CUBE_SHADOW = 0x8DC5 - UNSIGNED_INT_VEC2 = 0x8DC6 - UNSIGNED_INT_VEC3 = 0x8DC7 - UNSIGNED_INT_VEC4 = 0x8DC8 - INT_SAMPLER_1D = 0x8DC9 - INT_SAMPLER_2D = 0x8DCA - INT_SAMPLER_3D = 0x8DCB - INT_SAMPLER_CUBE = 0x8DCC - INT_SAMPLER_2D_RECT = 0x8DCD - INT_SAMPLER_1D_ARRAY = 0x8DCE - INT_SAMPLER_2D_ARRAY = 0x8DCF - INT_SAMPLER_BUFFER = 0x8DD0 - UNSIGNED_INT_SAMPLER_1D = 0x8DD1 - UNSIGNED_INT_SAMPLER_2D = 0x8DD2 - UNSIGNED_INT_SAMPLER_3D = 0x8DD3 - UNSIGNED_INT_SAMPLER_CUBE = 0x8DD4 - UNSIGNED_INT_SAMPLER_2D_RECT = 0x8DD5 - UNSIGNED_INT_SAMPLER_1D_ARRAY = 0x8DD6 - UNSIGNED_INT_SAMPLER_2D_ARRAY = 0x8DD7 - UNSIGNED_INT_SAMPLER_BUFFER = 0x8DD8 - GEOMETRY_SHADER = 0x8DD9 - MAX_GEOMETRY_UNIFORM_COMPONENTS = 0x8DDF - MAX_GEOMETRY_OUTPUT_VERTICES = 0x8DE0 - MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS = 0x8DE1 - ACTIVE_SUBROUTINES = 0x8DE5 - ACTIVE_SUBROUTINE_UNIFORMS = 0x8DE6 - MAX_SUBROUTINES = 0x8DE7 - MAX_SUBROUTINE_UNIFORM_LOCATIONS = 0x8DE8 - QUERY_WAIT = 0x8E13 - QUERY_NO_WAIT = 0x8E14 - QUERY_BY_REGION_WAIT = 0x8E15 - QUERY_BY_REGION_NO_WAIT = 0x8E16 - MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS = 0x8E1E - MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS = 0x8E1F - TRANSFORM_FEEDBACK = 0x8E22 - TRANSFORM_FEEDBACK_BUFFER_PAUSED = 0x8E23 - TRANSFORM_FEEDBACK_BUFFER_ACTIVE = 0x8E24 - TRANSFORM_FEEDBACK_BINDING = 0x8E25 - TIMESTAMP = 0x8E28 - TEXTURE_SWIZZLE_R = 0x8E42 - TEXTURE_SWIZZLE_G = 0x8E43 - TEXTURE_SWIZZLE_B = 0x8E44 - TEXTURE_SWIZZLE_A = 0x8E45 - TEXTURE_SWIZZLE_RGBA = 0x8E46 - ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS = 0x8E47 - ACTIVE_SUBROUTINE_MAX_LENGTH = 0x8E48 - ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH = 0x8E49 - NUM_COMPATIBLE_SUBROUTINES = 0x8E4A - COMPATIBLE_SUBROUTINES = 0x8E4B - QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION = 0x8E4C - FIRST_VERTEX_CONVENTION = 0x8E4D - LAST_VERTEX_CONVENTION = 0x8E4E - PROVOKING_VERTEX = 0x8E4F - SAMPLE_POSITION = 0x8E50 - SAMPLE_MASK = 0x8E51 - SAMPLE_MASK_VALUE = 0x8E52 - MAX_SAMPLE_MASK_WORDS = 0x8E59 - MAX_GEOMETRY_SHADER_INVOCATIONS = 0x8E5A - MIN_FRAGMENT_INTERPOLATION_OFFSET = 0x8E5B - MAX_FRAGMENT_INTERPOLATION_OFFSET = 0x8E5C - FRAGMENT_INTERPOLATION_OFFSET_BITS = 0x8E5D - MIN_PROGRAM_TEXTURE_GATHER_OFFSET = 0x8E5E - MAX_PROGRAM_TEXTURE_GATHER_OFFSET = 0x8E5F - MAX_TRANSFORM_FEEDBACK_BUFFERS = 0x8E70 - MAX_VERTEX_STREAMS = 0x8E71 - PATCH_VERTICES = 0x8E72 - PATCH_DEFAULT_INNER_LEVEL = 0x8E73 - PATCH_DEFAULT_OUTER_LEVEL = 0x8E74 - TESS_CONTROL_OUTPUT_VERTICES = 0x8E75 - TESS_GEN_MODE = 0x8E76 - TESS_GEN_SPACING = 0x8E77 - TESS_GEN_VERTEX_ORDER = 0x8E78 - TESS_GEN_POINT_MODE = 0x8E79 - ISOLINES = 0x8E7A - FRACTIONAL_ODD = 0x8E7B - FRACTIONAL_EVEN = 0x8E7C - MAX_PATCH_VERTICES = 0x8E7D - MAX_TESS_GEN_LEVEL = 0x8E7E - MAX_TESS_CONTROL_UNIFORM_COMPONENTS = 0x8E7F - MAX_TESS_EVALUATION_UNIFORM_COMPONENTS = 0x8E80 - MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS = 0x8E81 - MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS = 0x8E82 - MAX_TESS_CONTROL_OUTPUT_COMPONENTS = 0x8E83 - MAX_TESS_PATCH_COMPONENTS = 0x8E84 - MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS = 0x8E85 - MAX_TESS_EVALUATION_OUTPUT_COMPONENTS = 0x8E86 - TESS_EVALUATION_SHADER = 0x8E87 - TESS_CONTROL_SHADER = 0x8E88 - MAX_TESS_CONTROL_UNIFORM_BLOCKS = 0x8E89 - MAX_TESS_EVALUATION_UNIFORM_BLOCKS = 0x8E8A - COPY_READ_BUFFER = 0x8F36 - COPY_WRITE_BUFFER = 0x8F37 - DRAW_INDIRECT_BUFFER = 0x8F3F - DRAW_INDIRECT_BUFFER_BINDING = 0x8F43 - DOUBLE_MAT2 = 0x8F46 - DOUBLE_MAT3 = 0x8F47 - DOUBLE_MAT4 = 0x8F48 - DOUBLE_MAT2x3 = 0x8F49 - DOUBLE_MAT2x4 = 0x8F4A - DOUBLE_MAT3x2 = 0x8F4B - DOUBLE_MAT3x4 = 0x8F4C - DOUBLE_MAT4x2 = 0x8F4D - DOUBLE_MAT4x3 = 0x8F4E - R8_SNORM = 0x8F94 - RG8_SNORM = 0x8F95 - RGB8_SNORM = 0x8F96 - RGBA8_SNORM = 0x8F97 - R16_SNORM = 0x8F98 - RG16_SNORM = 0x8F99 - RGB16_SNORM = 0x8F9A - RGBA16_SNORM = 0x8F9B - SIGNED_NORMALIZED = 0x8F9C - PRIMITIVE_RESTART = 0x8F9D - PRIMITIVE_RESTART_INDEX = 0x8F9E - DOUBLE_VEC2 = 0x8FFC - DOUBLE_VEC3 = 0x8FFD - DOUBLE_VEC4 = 0x8FFE - TEXTURE_CUBE_MAP_ARRAY = 0x9009 - TEXTURE_BINDING_CUBE_MAP_ARRAY = 0x900A - PROXY_TEXTURE_CUBE_MAP_ARRAY = 0x900B - SAMPLER_CUBE_MAP_ARRAY = 0x900C - SAMPLER_CUBE_MAP_ARRAY_SHADOW = 0x900D - INT_SAMPLER_CUBE_MAP_ARRAY = 0x900E - UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY = 0x900F - RGB10_A2UI = 0x906F - TEXTURE_2D_MULTISAMPLE = 0x9100 - PROXY_TEXTURE_2D_MULTISAMPLE = 0x9101 - TEXTURE_2D_MULTISAMPLE_ARRAY = 0x9102 - PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY = 0x9103 - TEXTURE_BINDING_2D_MULTISAMPLE = 0x9104 - TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY = 0x9105 - TEXTURE_SAMPLES = 0x9106 - TEXTURE_FIXED_SAMPLE_LOCATIONS = 0x9107 - SAMPLER_2D_MULTISAMPLE = 0x9108 - INT_SAMPLER_2D_MULTISAMPLE = 0x9109 - UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE = 0x910A - SAMPLER_2D_MULTISAMPLE_ARRAY = 0x910B - INT_SAMPLER_2D_MULTISAMPLE_ARRAY = 0x910C - UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY = 0x910D - MAX_COLOR_TEXTURE_SAMPLES = 0x910E - MAX_DEPTH_TEXTURE_SAMPLES = 0x910F - MAX_INTEGER_SAMPLES = 0x9110 - MAX_SERVER_WAIT_TIMEOUT = 0x9111 - OBJECT_TYPE = 0x9112 - SYNC_CONDITION = 0x9113 - SYNC_STATUS = 0x9114 - SYNC_FLAGS = 0x9115 - SYNC_FENCE = 0x9116 - SYNC_GPU_COMMANDS_COMPLETE = 0x9117 - UNSIGNALED = 0x9118 - SIGNALED = 0x9119 - ALREADY_SIGNALED = 0x911A - TIMEOUT_EXPIRED = 0x911B - CONDITION_SATISFIED = 0x911C - WAIT_FAILED = 0x911D - BUFFER_ACCESS_FLAGS = 0x911F - BUFFER_MAP_LENGTH = 0x9120 - BUFFER_MAP_OFFSET = 0x9121 - MAX_VERTEX_OUTPUT_COMPONENTS = 0x9122 - MAX_GEOMETRY_INPUT_COMPONENTS = 0x9123 - MAX_GEOMETRY_OUTPUT_COMPONENTS = 0x9124 - MAX_FRAGMENT_INPUT_COMPONENTS = 0x9125 - CONTEXT_PROFILE_MASK = 0x9126 -) - -// https://www.opengl.org/sdk/docs/man4/xhtml/glViewport.xml -func (gl *GL) Viewport(x, y, width, height int) { - C.gl4_0compat_glViewport(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// DepthRange specifies the mapping of depth values from normalized device -// coordinates to window coordinates. -// -// Parameter nearVal specifies the mapping of the near clipping plane to window -// coordinates (defaults to 0), while farVal specifies the mapping of the far -// clipping plane to window coordinates (defaults to 1). -// -// After clipping and division by w, depth coordinates range from -1 to 1, -// corresponding to the near and far clipping planes. DepthRange specifies a -// linear mapping of the normalized depth coordinates in this range to window -// depth coordinates. Regardless of the actual depth buffer implementation, -// window coordinate depth values are treated as though they range from 0 through 1 -// (like color components). Thus, the values accepted by DepthRange are both -// clamped to this range before they are accepted. -// -// The default setting of (0, 1) maps the near plane to 0 and the far plane to 1. -// With this mapping, the depth buffer range is fully utilized. -// -// It is not necessary that nearVal be less than farVal. Reverse mappings such as -// nearVal 1, and farVal 0 are acceptable. -// -// GL.INVALID_OPERATION is generated if DepthRange is executed between the -// execution of Begin and the corresponding execution of End. -func (gl *GL) DepthRange(nearVal, farVal float64) { - C.gl4_0compat_glDepthRange(gl.funcs, C.GLdouble(nearVal), C.GLdouble(farVal)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsEnabled.xml -func (gl *GL) IsEnabled(cap glbase.Enum) bool { - glresult := C.gl4_0compat_glIsEnabled(gl.funcs, C.GLenum(cap)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexLevelParameteriv.xml -func (gl *GL) GetTexLevelParameteriv(target glbase.Enum, level int, pname glbase.Enum, params []int32) { - C.gl4_0compat_glGetTexLevelParameteriv(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexLevelParameterfv.xml -func (gl *GL) GetTexLevelParameterfv(target glbase.Enum, level int, pname glbase.Enum, params []float32) { - C.gl4_0compat_glGetTexLevelParameterfv(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexParameteriv.xml -func (gl *GL) GetTexParameteriv(target, pname glbase.Enum, params []int32) { - C.gl4_0compat_glGetTexParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexParameterfv.xml -func (gl *GL) GetTexParameterfv(target, pname glbase.Enum, params []float32) { - C.gl4_0compat_glGetTexParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexImage.xml -func (gl *GL) GetTexImage(target glbase.Enum, level int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_0compat_glGetTexImage(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetIntegerv.xml -func (gl *GL) GetIntegerv(pname glbase.Enum, params []int32) { - C.gl4_0compat_glGetIntegerv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetFloatv.xml -func (gl *GL) GetFloatv(pname glbase.Enum, params []float32) { - C.gl4_0compat_glGetFloatv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetError.xml -func (gl *GL) GetError() glbase.Enum { - glresult := C.gl4_0compat_glGetError(gl.funcs) - return glbase.Enum(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetDoublev.xml -func (gl *GL) GetDoublev(pname glbase.Enum, params []float64) { - C.gl4_0compat_glGetDoublev(gl.funcs, C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetBooleanv.xml -func (gl *GL) GetBooleanv(pname glbase.Enum, params []bool) { - C.gl4_0compat_glGetBooleanv(gl.funcs, C.GLenum(pname), (*C.GLboolean)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glReadPixels.xml -func (gl *GL) ReadPixels(x, y, width, height int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_0compat_glReadPixels(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glReadBuffer.xml -func (gl *GL) ReadBuffer(mode glbase.Enum) { - C.gl4_0compat_glReadBuffer(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPixelStorei.xml -func (gl *GL) PixelStorei(pname glbase.Enum, param int32) { - C.gl4_0compat_glPixelStorei(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPixelStoref.xml -func (gl *GL) PixelStoref(pname glbase.Enum, param float32) { - C.gl4_0compat_glPixelStoref(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDepthFunc.xml -func (gl *GL) DepthFunc(glfunc glbase.Enum) { - C.gl4_0compat_glDepthFunc(gl.funcs, C.GLenum(glfunc)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glStencilOp.xml -func (gl *GL) StencilOp(fail, zfail, zpass glbase.Enum) { - C.gl4_0compat_glStencilOp(gl.funcs, C.GLenum(fail), C.GLenum(zfail), C.GLenum(zpass)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glStencilFunc.xml -func (gl *GL) StencilFunc(glfunc glbase.Enum, ref int32, mask uint32) { - C.gl4_0compat_glStencilFunc(gl.funcs, C.GLenum(glfunc), C.GLint(ref), C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLogicOp.xml -func (gl *GL) LogicOp(opcode glbase.Enum) { - C.gl4_0compat_glLogicOp(gl.funcs, C.GLenum(opcode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendFunc.xml -func (gl *GL) BlendFunc(sfactor, dfactor glbase.Enum) { - C.gl4_0compat_glBlendFunc(gl.funcs, C.GLenum(sfactor), C.GLenum(dfactor)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFlush.xml -func (gl *GL) Flush() { - C.gl4_0compat_glFlush(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFinish.xml -func (gl *GL) Finish() { - C.gl4_0compat_glFinish(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEnable.xml -func (gl *GL) Enable(cap glbase.Enum) { - C.gl4_0compat_glEnable(gl.funcs, C.GLenum(cap)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDisable.xml -func (gl *GL) Disable(cap glbase.Enum) { - C.gl4_0compat_glDisable(gl.funcs, C.GLenum(cap)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDepthMask.xml -func (gl *GL) DepthMask(flag bool) { - C.gl4_0compat_glDepthMask(gl.funcs, *(*C.GLboolean)(unsafe.Pointer(&flag))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorMask.xml -func (gl *GL) ColorMask(red, green, blue, alpha bool) { - C.gl4_0compat_glColorMask(gl.funcs, *(*C.GLboolean)(unsafe.Pointer(&red)), *(*C.GLboolean)(unsafe.Pointer(&green)), *(*C.GLboolean)(unsafe.Pointer(&blue)), *(*C.GLboolean)(unsafe.Pointer(&alpha))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glStencilMask.xml -func (gl *GL) StencilMask(mask uint32) { - C.gl4_0compat_glStencilMask(gl.funcs, C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearDepth.xml -func (gl *GL) ClearDepth(depth float64) { - C.gl4_0compat_glClearDepth(gl.funcs, C.GLdouble(depth)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearStencil.xml -func (gl *GL) ClearStencil(s int32) { - C.gl4_0compat_glClearStencil(gl.funcs, C.GLint(s)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearColor.xml -func (gl *GL) ClearColor(red, green, blue, alpha float32) { - C.gl4_0compat_glClearColor(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClear.xml -func (gl *GL) Clear(mask glbase.Bitfield) { - C.gl4_0compat_glClear(gl.funcs, C.GLbitfield(mask)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawBuffer.xml -func (gl *GL) DrawBuffer(mode glbase.Enum) { - C.gl4_0compat_glDrawBuffer(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexImage2D.xml -func (gl *GL) TexImage2D(target glbase.Enum, level int, internalFormat int32, width, height, border int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_0compat_glTexImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLint(border), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexImage1D.xml -func (gl *GL) TexImage1D(target glbase.Enum, level int, internalFormat int32, width, border int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_0compat_glTexImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(internalFormat), C.GLsizei(width), C.GLint(border), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexParameteriv.xml -func (gl *GL) TexParameteriv(target, pname glbase.Enum, params []int32) { - C.gl4_0compat_glTexParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexParameteri.xml -func (gl *GL) TexParameteri(target, pname glbase.Enum, param int32) { - C.gl4_0compat_glTexParameteri(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexParameterfv.xml -func (gl *GL) TexParameterfv(target, pname glbase.Enum, params []float32) { - C.gl4_0compat_glTexParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexParameterf.xml -func (gl *GL) TexParameterf(target, pname glbase.Enum, param float32) { - C.gl4_0compat_glTexParameterf(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glScissor.xml -func (gl *GL) Scissor(x, y, width, height int) { - C.gl4_0compat_glScissor(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPolygonMode.xml -func (gl *GL) PolygonMode(face, mode glbase.Enum) { - C.gl4_0compat_glPolygonMode(gl.funcs, C.GLenum(face), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPointSize.xml -func (gl *GL) PointSize(size float32) { - C.gl4_0compat_glPointSize(gl.funcs, C.GLfloat(size)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLineWidth.xml -func (gl *GL) LineWidth(width float32) { - C.gl4_0compat_glLineWidth(gl.funcs, C.GLfloat(width)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glHint.xml -func (gl *GL) Hint(target, mode glbase.Enum) { - C.gl4_0compat_glHint(gl.funcs, C.GLenum(target), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFrontFace.xml -func (gl *GL) FrontFace(mode glbase.Enum) { - C.gl4_0compat_glFrontFace(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCullFace.xml -func (gl *GL) CullFace(mode glbase.Enum) { - C.gl4_0compat_glCullFace(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIndexubv.xml -func (gl *GL) Indexubv(c []uint8) { - C.gl4_0compat_glIndexubv(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIndexub.xml -func (gl *GL) Indexub(c uint8) { - C.gl4_0compat_glIndexub(gl.funcs, C.GLubyte(c)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsTexture.xml -func (gl *GL) IsTexture(texture glbase.Texture) bool { - glresult := C.gl4_0compat_glIsTexture(gl.funcs, C.GLuint(texture)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// GenTextures returns n texture names in textures. There is no guarantee -// that the names form a contiguous set of integers; however, it is -// guaranteed that none of the returned names was in use immediately before -// the call to GenTextures. -// -// The generated textures have no dimensionality; they assume the -// dimensionality of the texture target to which they are first bound (see -// BindTexture). -// -// Texture names returned by a call to GenTextures are not returned by -// subsequent calls, unless they are first deleted with DeleteTextures. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// GenTextures is available in GL version 2.0 or greater. -func (gl *GL) GenTextures(n int) []glbase.Texture { - if n == 0 { - return nil - } - textures := make([]glbase.Texture, n) - C.gl4_0compat_glGenTextures(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0]))) - return textures -} - -// DeleteTextures deletes the textures objects whose names are stored -// in the textures slice. After a texture is deleted, it has no contents or -// dimensionality, and its name is free for reuse (for example by -// GenTextures). If a texture that is currently bound is deleted, the binding -// reverts to 0 (the default texture). -// -// DeleteTextures silently ignores 0's and names that do not correspond to -// existing textures. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// DeleteTextures is available in GL version 2.0 or greater. -func (gl *GL) DeleteTextures(textures []glbase.Texture) { - n := len(textures) - if n == 0 { - return - } - C.gl4_0compat_glDeleteTextures(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindTexture.xml -func (gl *GL) BindTexture(target glbase.Enum, texture glbase.Texture) { - C.gl4_0compat_glBindTexture(gl.funcs, C.GLenum(target), C.GLuint(texture)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexSubImage2D.xml -func (gl *GL) TexSubImage2D(target glbase.Enum, level, xoffset, yoffset, width, height int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_0compat_glTexSubImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexSubImage1D.xml -func (gl *GL) TexSubImage1D(target glbase.Enum, level, xoffset, width int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_0compat_glTexSubImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLsizei(width), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyTexSubImage2D.xml -func (gl *GL) CopyTexSubImage2D(target glbase.Enum, level, xoffset, yoffset, x, y, width, height int) { - C.gl4_0compat_glCopyTexSubImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyTexSubImage1D.xml -func (gl *GL) CopyTexSubImage1D(target glbase.Enum, level, xoffset, x, y, width int) { - C.gl4_0compat_glCopyTexSubImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(x), C.GLint(y), C.GLsizei(width)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyTexImage2D.xml -func (gl *GL) CopyTexImage2D(target glbase.Enum, level int, internalFormat glbase.Enum, x, y, width, height, border int) { - C.gl4_0compat_glCopyTexImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height), C.GLint(border)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyTexImage1D.xml -func (gl *GL) CopyTexImage1D(target glbase.Enum, level int, internalFormat glbase.Enum, x, y, width, border int) { - C.gl4_0compat_glCopyTexImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLint(border)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPolygonOffset.xml -func (gl *GL) PolygonOffset(factor, units float32) { - C.gl4_0compat_glPolygonOffset(gl.funcs, C.GLfloat(factor), C.GLfloat(units)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawElements.xml -func (gl *GL) DrawElements(mode glbase.Enum, count int, gltype glbase.Enum, indices interface{}) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl4_0compat_glDrawElements(gl.funcs, C.GLenum(mode), C.GLsizei(count), C.GLenum(gltype), indices_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawArrays.xml -func (gl *GL) DrawArrays(mode glbase.Enum, first, count int) { - C.gl4_0compat_glDrawArrays(gl.funcs, C.GLenum(mode), C.GLint(first), C.GLsizei(count)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyTexSubImage3D.xml -func (gl *GL) CopyTexSubImage3D(target glbase.Enum, level, xoffset, yoffset int, zoffset int32, x, y, width, height int) { - C.gl4_0compat_glCopyTexSubImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(zoffset), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexSubImage3D.xml -func (gl *GL) TexSubImage3D(target glbase.Enum, level, xoffset, yoffset int, zoffset int32, width, height int, depth int32, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_0compat_glTexSubImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(zoffset), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexImage3D.xml -func (gl *GL) TexImage3D(target glbase.Enum, level int, internalFormat int32, width, height int, depth int32, border int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_0compat_glTexImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLint(border), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawRangeElements.xml -func (gl *GL) DrawRangeElements(mode glbase.Enum, start, end uint32, count int, gltype glbase.Enum, indices interface{}) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl4_0compat_glDrawRangeElements(gl.funcs, C.GLenum(mode), C.GLuint(start), C.GLuint(end), C.GLsizei(count), C.GLenum(gltype), indices_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendEquation.xml -func (gl *GL) BlendEquation(mode glbase.Enum) { - C.gl4_0compat_glBlendEquation(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendColor.xml -func (gl *GL) BlendColor(red, green, blue, alpha float32) { - C.gl4_0compat_glBlendColor(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetCompressedTexImage.xml -func (gl *GL) GetCompressedTexImage(target glbase.Enum, level int, img interface{}) { - var img_ptr unsafe.Pointer - var img_v = reflect.ValueOf(img) - if img != nil && img_v.Kind() != reflect.Slice { - panic("parameter img must be a slice") - } - if img != nil { - img_ptr = unsafe.Pointer(img_v.Index(0).Addr().Pointer()) - } - C.gl4_0compat_glGetCompressedTexImage(gl.funcs, C.GLenum(target), C.GLint(level), img_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCompressedTexSubImage1D.xml -func (gl *GL) CompressedTexSubImage1D(target glbase.Enum, level, xoffset, width int, format glbase.Enum, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_0compat_glCompressedTexSubImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLsizei(width), C.GLenum(format), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCompressedTexSubImage2D.xml -func (gl *GL) CompressedTexSubImage2D(target glbase.Enum, level, xoffset, yoffset, width, height int, format glbase.Enum, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_0compat_glCompressedTexSubImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCompressedTexSubImage3D.xml -func (gl *GL) CompressedTexSubImage3D(target glbase.Enum, level, xoffset, yoffset int, zoffset int32, width, height int, depth int32, format glbase.Enum, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_0compat_glCompressedTexSubImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(zoffset), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLenum(format), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCompressedTexImage1D.xml -func (gl *GL) CompressedTexImage1D(target glbase.Enum, level int, internalFormat glbase.Enum, width, border, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_0compat_glCompressedTexImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLsizei(width), C.GLint(border), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCompressedTexImage2D.xml -func (gl *GL) CompressedTexImage2D(target glbase.Enum, level int, internalFormat glbase.Enum, width, height, border, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_0compat_glCompressedTexImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLint(border), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCompressedTexImage3D.xml -func (gl *GL) CompressedTexImage3D(target glbase.Enum, level int, internalFormat glbase.Enum, width, height int, depth int32, border, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_0compat_glCompressedTexImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLint(border), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSampleCoverage.xml -func (gl *GL) SampleCoverage(value float32, invert bool) { - C.gl4_0compat_glSampleCoverage(gl.funcs, C.GLfloat(value), *(*C.GLboolean)(unsafe.Pointer(&invert))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glActiveTexture.xml -func (gl *GL) ActiveTexture(texture glbase.Enum) { - C.gl4_0compat_glActiveTexture(gl.funcs, C.GLenum(texture)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPointParameteriv.xml -func (gl *GL) PointParameteriv(pname glbase.Enum, params []int32) { - C.gl4_0compat_glPointParameteriv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPointParameteri.xml -func (gl *GL) PointParameteri(pname glbase.Enum, param int32) { - C.gl4_0compat_glPointParameteri(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPointParameterfv.xml -func (gl *GL) PointParameterfv(pname glbase.Enum, params []float32) { - C.gl4_0compat_glPointParameterfv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPointParameterf.xml -func (gl *GL) PointParameterf(pname glbase.Enum, param float32) { - C.gl4_0compat_glPointParameterf(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiDrawArrays.xml -func (gl *GL) MultiDrawArrays(mode glbase.Enum, first, count []int, drawcount int32) { - C.gl4_0compat_glMultiDrawArrays(gl.funcs, C.GLenum(mode), (*C.GLint)(unsafe.Pointer(&first[0])), (*C.GLsizei)(unsafe.Pointer(&count[0])), C.GLsizei(drawcount)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendFuncSeparate.xml -func (gl *GL) BlendFuncSeparate(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha glbase.Enum) { - C.gl4_0compat_glBlendFuncSeparate(gl.funcs, C.GLenum(sfactorRGB), C.GLenum(dfactorRGB), C.GLenum(sfactorAlpha), C.GLenum(dfactorAlpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetBufferParameteriv.xml -func (gl *GL) GetBufferParameteriv(target, pname glbase.Enum, params []int32) { - C.gl4_0compat_glGetBufferParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUnmapBuffer.xml -func (gl *GL) UnmapBuffer(target glbase.Enum) bool { - glresult := C.gl4_0compat_glUnmapBuffer(gl.funcs, C.GLenum(target)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetBufferSubData.xml -func (gl *GL) GetBufferSubData(target glbase.Enum, offset, size int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_0compat_glGetBufferSubData(gl.funcs, C.GLenum(target), C.GLintptr(offset), C.GLsizeiptr(size), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBufferSubData.xml -func (gl *GL) BufferSubData(target glbase.Enum, offset, size int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_0compat_glBufferSubData(gl.funcs, C.GLenum(target), C.GLintptr(offset), C.GLsizeiptr(size), data_ptr) -} - -// BufferData creates a new data store for the buffer object currently -// bound to target. Any pre-existing data store is deleted. The new data -// store is created with the specified size in bytes and usage. If data is -// not nil, it must be a slice that is used to initialize the data store. -// In that case the size parameter is ignored and the store size will match -// the slice data size. -// -// In its initial state, the new data store is not mapped, it has a NULL -// mapped pointer, and its mapped access is GL.READ_WRITE. -// -// The target constant must be one of GL.ARRAY_BUFFER, GL.COPY_READ_BUFFER, -// GL.COPY_WRITE_BUFFER, GL.ELEMENT_ARRAY_BUFFER, GL.PIXEL_PACK_BUFFER, -// GL.PIXEL_UNPACK_BUFFER, GL.TEXTURE_BUFFER, GL.TRANSFORM_FEEDBACK_BUFFER, -// or GL.UNIFORM_BUFFER. -// -// The usage parameter is a hint to the GL implementation as to how a buffer -// object's data store will be accessed. This enables the GL implementation -// to make more intelligent decisions that may significantly impact buffer -// object performance. It does not, however, constrain the actual usage of -// the data store. usage can be broken down into two parts: first, the -// frequency of access (modification and usage), and second, the nature of -// that access. -// -// A usage frequency of STREAM and nature of DRAW is specified via the -// constant GL.STREAM_DRAW, for example. -// -// The usage frequency of access may be one of: -// -// STREAM -// The data store contents will be modified once and used at most a few times. -// -// STATIC -// The data store contents will be modified once and used many times. -// -// DYNAMIC -// The data store contents will be modified repeatedly and used many times. -// -// The usage nature of access may be one of: -// -// DRAW -// The data store contents are modified by the application, and used as -// the source for GL drawing and image specification commands. -// -// READ -// The data store contents are modified by reading data from the GL, -// and used to return that data when queried by the application. -// -// COPY -// The data store contents are modified by reading data from the GL, -// and used as the source for GL drawing and image specification -// commands. -// -// Clients must align data elements consistent with the requirements of the -// client platform, with an additional base-level requirement that an offset -// within a buffer to a datum comprising N bytes be a multiple of N. -// -// Error GL.INVALID_ENUM is generated if target is not one of the accepted -// buffer targets. GL.INVALID_ENUM is generated if usage is not -// GL.STREAM_DRAW, GL.STREAM_READ, GL.STREAM_COPY, GL.STATIC_DRAW, -// GL.STATIC_READ, GL.STATIC_COPY, GL.DYNAMIC_DRAW, GL.DYNAMIC_READ, or -// GL.DYNAMIC_COPY. GL.INVALID_VALUE is generated if size is negative. -// GL.INVALID_OPERATION is generated if the reserved buffer object name 0 is -// bound to target. GL.OUT_OF_MEMORY is generated if the GL is unable to -// create a data store with the specified size. -func (gl *GL) BufferData(target glbase.Enum, size int, data interface{}, usage glbase.Enum) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - if data != nil { - size = int(data_v.Type().Size()) * data_v.Len() - } - C.gl4_0compat_glBufferData(gl.funcs, C.GLenum(target), C.GLsizeiptr(size), data_ptr, C.GLenum(usage)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsBuffer.xml -func (gl *GL) IsBuffer(buffer glbase.Buffer) bool { - glresult := C.gl4_0compat_glIsBuffer(gl.funcs, C.GLuint(buffer)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// GenBuffers returns n buffer object names. There is no guarantee that -// the names form a contiguous set of integers; however, it is guaranteed -// that none of the returned names was in use immediately before the call to -// GenBuffers. -// -// Buffer object names returned by a call to GenBuffers are not returned by -// subsequent calls, unless they are first deleted with DeleteBuffers. -// -// No buffer objects are associated with the returned buffer object names -// until they are first bound by calling BindBuffer. -// -// Error GL.INVALID_VALUE is generated if n is negative. GL.INVALID_OPERATION -// is generated if GenBuffers is executed between the execution of Begin -// and the corresponding execution of End. -// -// GenBuffers is available in GL version 1.5 or greater. -func (gl *GL) GenBuffers(n int) []glbase.Buffer { - if n == 0 { - return nil - } - buffers := make([]glbase.Buffer, n) - C.gl4_0compat_glGenBuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&buffers[0]))) - return buffers -} - -// DeleteBuffers deletes the buffer objects whose names are stored in the -// buffers slice. -// -// After a buffer object is deleted, it has no contents, and its name is free -// for reuse (for example by GenBuffers). If a buffer object that is -// currently bound is deleted, the binding reverts to 0 (the absence of any -// buffer object, which reverts to client memory usage). -// -// DeleteBuffers silently ignores 0's and names that do not correspond to -// existing buffer objects. -// -// Error GL.INVALID_VALUE is generated if n is negative. GL.INVALID_OPERATION -// is generated if DeleteBuffers is executed between the execution of Begin -// and the corresponding execution of End. -// -// DeleteBuffers is available in GL version 1.5 or greater. -func (gl *GL) DeleteBuffers(buffers []glbase.Buffer) { - n := len(buffers) - if n == 0 { - return - } - C.gl4_0compat_glDeleteBuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&buffers[0]))) -} - -// BindBuffer creates or puts in use a named buffer object. -// Calling BindBuffer with target set to GL.ARRAY_BUFFER, -// GL.ELEMENT_ARRAY_BUFFER, GL.PIXEL_PACK_BUFFER or GL.PIXEL_UNPACK_BUFFER -// and buffer set to the name of the new buffer object binds the buffer -// object name to the target. When a buffer object is bound to a target, the -// previous binding for that target is automatically broken. -// -// Buffer object names are unsigned integers. The value zero is reserved, but -// there is no default buffer object for each buffer object target. Instead, -// buffer set to zero effectively unbinds any buffer object previously bound, -// and restores client memory usage for that buffer object target. Buffer -// object names and the corresponding buffer object contents are local to the -// shared display-list space (see XCreateContext) of the current GL rendering -// context; two rendering contexts share buffer object names only if they -// also share display lists. -// -// GenBuffers may be called to generate a set of new buffer object names. -// -// The state of a buffer object immediately after it is first bound is an -// unmapped zero-sized memory buffer with GL.READ_WRITE access and -// GL.STATIC_DRAW usage. -// -// While a non-zero buffer object name is bound, GL operations on the target -// to which it is bound affect the bound buffer object, and queries of the -// target to which it is bound return state from the bound buffer object. -// While buffer object name zero is bound, as in the initial state, attempts -// to modify or query state on the target to which it is bound generates an -// GL.INVALID_OPERATION error. -// -// When vertex array pointer state is changed, for example by a call to -// NormalPointer, the current buffer object binding (GL.ARRAY_BUFFER_BINDING) -// is copied into the corresponding client state for the vertex array type -// being changed, for example GL.NORMAL_ARRAY_BUFFER_BINDING. While a -// non-zero buffer object is bound to the GL.ARRAY_BUFFER target, the vertex -// array pointer parameter that is traditionally interpreted as a pointer to -// client-side memory is instead interpreted as an offset within the buffer -// object measured in basic machine units. -// -// While a non-zero buffer object is bound to the GL.ELEMENT_ARRAY_BUFFER -// target, the indices parameter of DrawElements, DrawRangeElements, or -// MultiDrawElements that is traditionally interpreted as a pointer to -// client-side memory is instead interpreted as an offset within the buffer -// object measured in basic machine units. -// -// While a non-zero buffer object is bound to the GL.PIXEL_PACK_BUFFER -// target, the following commands are affected: GetCompressedTexImage, -// GetConvolutionFilter, GetHistogram, GetMinmax, GetPixelMap, -// GetPolygonStipple, GetSeparableFilter, GetTexImage, and ReadPixels. The -// pointer parameter that is traditionally interpreted as a pointer to -// client-side memory where the pixels are to be packed is instead -// interpreted as an offset within the buffer object measured in basic -// machine units. -// -// While a non-zero buffer object is bound to the GL.PIXEL_UNPACK_BUFFER -// target, the following commands are affected: Bitmap, ColorSubTable, -// ColorTable, CompressedTexImage1D, CompressedTexImage2D, -// CompressedTexImage3D, CompressedTexSubImage1D, CompressedTexSubImage2D, -// CompressedTexSubImage3D, ConvolutionFilter1D, ConvolutionFilter2D, -// DrawPixels, PixelMap, PolygonStipple, SeparableFilter2D, TexImage1D, -// TexImage2D, TexImage3D, TexSubImage1D, TexSubImage2D, and TexSubImage3D. -// The pointer parameter that is traditionally interpreted as a pointer to -// client-side memory from which the pixels are to be unpacked is instead -// interpreted as an offset within the buffer object measured in basic -// machine units. -// -// A buffer object binding created with BindBuffer remains active until a -// different buffer object name is bound to the same target, or until the -// bound buffer object is deleted with DeleteBuffers. -// -// Once created, a named buffer object may be re-bound to any target as often -// as needed. However, the GL implementation may make choices about how to -// optimize the storage of a buffer object based on its initial binding -// target. -// -// Error GL.INVALID_ENUM is generated if target is not one of the allowable -// values. GL.INVALID_OPERATION is generated if BindBuffer is executed -// between the execution of Begin and the corresponding execution of End. -// -// BindBuffer is available in GL version 1.5 or greater. -func (gl *GL) BindBuffer(target glbase.Enum, buffer glbase.Buffer) { - C.gl4_0compat_glBindBuffer(gl.funcs, C.GLenum(target), C.GLuint(buffer)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetQueryObjectuiv.xml -func (gl *GL) GetQueryObjectuiv(id uint32, pname glbase.Enum, params []uint32) { - C.gl4_0compat_glGetQueryObjectuiv(gl.funcs, C.GLuint(id), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetQueryObjectiv.xml -func (gl *GL) GetQueryObjectiv(id uint32, pname glbase.Enum, params []int32) { - C.gl4_0compat_glGetQueryObjectiv(gl.funcs, C.GLuint(id), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetQueryiv.xml -func (gl *GL) GetQueryiv(target, pname glbase.Enum, params []int32) { - C.gl4_0compat_glGetQueryiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEndQuery.xml -func (gl *GL) EndQuery(target glbase.Enum) { - C.gl4_0compat_glEndQuery(gl.funcs, C.GLenum(target)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBeginQuery.xml -func (gl *GL) BeginQuery(target glbase.Enum, id uint32) { - C.gl4_0compat_glBeginQuery(gl.funcs, C.GLenum(target), C.GLuint(id)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsQuery.xml -func (gl *GL) IsQuery(id uint32) bool { - glresult := C.gl4_0compat_glIsQuery(gl.funcs, C.GLuint(id)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDeleteQueries.xml -func (gl *GL) DeleteQueries(n int, ids []uint32) { - C.gl4_0compat_glDeleteQueries(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&ids[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGenQueries.xml -func (gl *GL) GenQueries(n int, ids []uint32) { - C.gl4_0compat_glGenQueries(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&ids[0]))) -} - -// VertexAttribPointer specifies the location and data format of the array -// of generic vertex attributes at index to use when rendering. size -// specifies the number of components per attribute and must be 1, 2, 3, or -// 4. type specifies the data type of each component, and stride specifies -// the byte stride from one attribute to the next, allowing vertices and -// attributes to be packed into a single array or stored in separate arrays. -// normalized indicates whether the values stored in an integer format are -// to be mapped to the range [-1,1] (for signed values) or [0,1] -// (for unsigned values) when they are accessed and converted to floating -// point; otherwise, values will be converted to floats directly without -// normalization. offset is a byte offset into the buffer object's data -// store, which must be bound to the GL.ARRAY_BUFFER target with BindBuffer. -// -// The buffer object binding (GL.ARRAY_BUFFER_BINDING) is saved as -// generic vertex attribute array client-side state -// (GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING) for the provided index. -// -// To enable and disable a generic vertex attribute array, call -// EnableVertexAttribArray and DisableVertexAttribArray with index. If -// enabled, the generic vertex attribute array is used when DrawArrays or -// DrawElements is called. Each generic vertex attribute array is initially -// disabled. -// -// VertexAttribPointer is typically implemented on the client side. -// -// Error GL.INVALID_ENUM is generated if type is not an accepted value. -// GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. GL.INVALID_VALUE is generated if size is not 1, 2, -// 3, or 4. GL.INVALID_VALUE is generated if stride is negative. -func (gl *GL) VertexAttribPointer(index glbase.Attrib, size int, gltype glbase.Enum, normalized bool, stride int, offset uintptr) { - offset_ptr := unsafe.Pointer(offset) - C.gl4_0compat_glVertexAttribPointer(gl.funcs, C.GLuint(index), C.GLint(size), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), C.GLsizei(stride), offset_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glValidateProgram.xml -func (gl *GL) ValidateProgram(program glbase.Program) { - C.gl4_0compat_glValidateProgram(gl.funcs, C.GLuint(program)) -} - -// UniformMatrix4fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix4fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix4fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(4*4) != 0 { - panic("invalid value length for UniformMatrix4fv") - } - count := len(value) / (4 * 4) - C.gl4_0compat_glUniformMatrix4fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix3fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix3fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix3fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(3*3) != 0 { - panic("invalid value length for UniformMatrix3fv") - } - count := len(value) / (3 * 3) - C.gl4_0compat_glUniformMatrix3fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix2fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix2fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix2fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(2*2) != 0 { - panic("invalid value length for UniformMatrix2fv") - } - count := len(value) / (2 * 2) - C.gl4_0compat_glUniformMatrix2fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform4iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform4iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - if len(value)%4 != 0 { - panic("invalid value length for Uniform4iv") - } - count := len(value) / 4 - C.gl4_0compat_glUniform4iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// Uniform3iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform3iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - if len(value)%3 != 0 { - panic("invalid value length for Uniform3iv") - } - count := len(value) / 3 - C.gl4_0compat_glUniform3iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// Uniform2iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform2iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - if len(value)%2 != 0 { - panic("invalid value length for Uniform2iv") - } - count := len(value) / 2 - C.gl4_0compat_glUniform2iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// Uniform1iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform1iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - count := len(value) - C.gl4_0compat_glUniform1iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// Uniform4fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform4fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - if len(value)%4 != 0 { - panic("invalid value length for Uniform4fv") - } - count := len(value) / 4 - C.gl4_0compat_glUniform4fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform3fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform3fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - if len(value)%3 != 0 { - panic("invalid value length for Uniform3fv") - } - count := len(value) / 3 - C.gl4_0compat_glUniform3fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform2fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform2fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - if len(value)%2 != 0 { - panic("invalid value length for Uniform2fv") - } - count := len(value) / 2 - C.gl4_0compat_glUniform2fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform1fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform1fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - count := len(value) - C.gl4_0compat_glUniform1fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform4i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform4i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4i(location glbase.Uniform, v0, v1, v2, v3 int32) { - C.gl4_0compat_glUniform4i(gl.funcs, C.GLint(location), C.GLint(v0), C.GLint(v1), C.GLint(v2), C.GLint(v3)) -} - -// Uniform3i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform3i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3i(location glbase.Uniform, v0, v1, v2 int32) { - C.gl4_0compat_glUniform3i(gl.funcs, C.GLint(location), C.GLint(v0), C.GLint(v1), C.GLint(v2)) -} - -// Uniform2i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform2i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2i(location glbase.Uniform, v0, v1 int32) { - C.gl4_0compat_glUniform2i(gl.funcs, C.GLint(location), C.GLint(v0), C.GLint(v1)) -} - -// Uniform1i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform1i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1i(location glbase.Uniform, v0 int32) { - C.gl4_0compat_glUniform1i(gl.funcs, C.GLint(location), C.GLint(v0)) -} - -// Uniform4f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform4f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4f(location glbase.Uniform, v0, v1, v2, v3 float32) { - C.gl4_0compat_glUniform4f(gl.funcs, C.GLint(location), C.GLfloat(v0), C.GLfloat(v1), C.GLfloat(v2), C.GLfloat(v3)) -} - -// Uniform3f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform3f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3f(location glbase.Uniform, v0, v1, v2 float32) { - C.gl4_0compat_glUniform3f(gl.funcs, C.GLint(location), C.GLfloat(v0), C.GLfloat(v1), C.GLfloat(v2)) -} - -// Uniform2f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform2f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2f(location glbase.Uniform, v0, v1 float32) { - C.gl4_0compat_glUniform2f(gl.funcs, C.GLint(location), C.GLfloat(v0), C.GLfloat(v1)) -} - -// Uniform1f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform1f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1f(location glbase.Uniform, v0 float32) { - C.gl4_0compat_glUniform1f(gl.funcs, C.GLint(location), C.GLfloat(v0)) -} - -// UseProgram installs the program object specified by program as part of -// current rendering state. One or more executables are created in a program -// object by successfully attaching shader objects to it with AttachShader, -// successfully compiling the shader objects with CompileShader, and -// successfully linking the program object with LinkProgram. -// -// A program object will contain an executable that will run on the vertex -// processor if it contains one or more shader objects of type -// GL.VERTEX_SHADER that have been successfully compiled and linked. -// Similarly, a program object will contain an executable that will run on -// the fragment processor if it contains one or more shader objects of type -// GL.FRAGMENT_SHADER that have been successfully compiled and linked. -// -// Successfully installing an executable on a programmable processor will -// cause the corresponding fixed functionality of OpenGL to be disabled. -// Specifically, if an executable is installed on the vertex processor, the -// OpenGL fixed functionality will be disabled as follows. -// -// - The modelview matrix is not applied to vertex coordinates. -// -// - The projection matrix is not applied to vertex coordinates. -// -// - The texture matrices are not applied to texture coordinates. -// -// - Normals are not transformed to eye coordinates. -// -// - Normals are not rescaled or normalized. -// -// - Normalization of GL.AUTO_NORMAL evaluated normals is not performed. -// -// - Texture coordinates are not generated automatically. -// -// - Per-vertex lighting is not performed. -// -// - Color material computations are not performed. -// -// - Color index lighting is not performed. -// -// - This list also applies when setting the current raster position. -// -// The executable that is installed on the vertex processor is expected to -// implement any or all of the desired functionality from the preceding list. -// Similarly, if an executable is installed on the fragment processor, the -// OpenGL fixed functionality will be disabled as follows. -// -// - Texture environment and texture functions are not applied. -// -// - Texture application is not applied. -// -// - Color sum is not applied. -// -// - Fog is not applied. -// -// Again, the fragment shader that is installed is expected to implement any -// or all of the desired functionality from the preceding list. -// -// While a program object is in use, applications are free to modify attached -// shader objects, compile attached shader objects, attach additional shader -// objects, and detach or delete shader objects. None of these operations -// will affect the executables that are part of the current state. However, -// relinking the program object that is currently in use will install the -// program object as part of the current rendering state if the link -// operation was successful (see LinkProgram). If the program object -// currently in use is relinked unsuccessfully, its link status will be set -// to GL.FALSE, but the executables and associated state will remain part of -// the current state until a subsequent call to UseProgram removes it from -// use. After it is removed from use, it cannot be made part of current state -// until it has been successfully relinked. -// -// If program contains shader objects of type GL.VERTEX_SHADER but it does -// not contain shader objects of type GL.FRAGMENT_SHADER, an executable will -// be installed on the vertex processor, but fixed functionality will be used -// for fragment processing. Similarly, if program contains shader objects of -// type GL.FRAGMENT_SHADER but it does not contain shader objects of type -// GL.VERTEX_SHADER, an executable will be installed on the fragment -// processor, but fixed functionality will be used for vertex processing. If -// program is 0, the programmable processors will be disabled, and fixed -// functionality will be used for both vertex and fragment processing. -// -// While a program object is in use, the state that controls the disabled -// fixed functionality may also be updated using the normal OpenGL calls. -// -// Like display lists and texture objects, the name space for program objects -// may be shared across a set of contexts, as long as the server sides of the -// contexts share the same address space. If the name space is shared across -// contexts, any attached objects and the data associated with those attached -// objects are shared as well. -// -// Applications are responsible for providing the synchronization across API -// calls when objects are accessed from different execution threads. -// -// Error GL.INVALID_VALUE is generated if program is neither 0 nor a value -// generated by OpenGL. GL.INVALID_OPERATION is generated if program is not -// a program object. GL.INVALID_OPERATION is generated if program could not -// be made part of current state. GL.INVALID_OPERATION is generated if -// UseProgram is executed between the execution of Begin and the -// corresponding execution of End. -// -// UseProgram is available in GL version 2.0 or greater. -func (gl *GL) UseProgram(program glbase.Program) { - C.gl4_0compat_glUseProgram(gl.funcs, C.GLuint(program)) -} - -// ShaderSource sets the source code in shader to the provided source code. Any source -// code previously stored in the shader object is completely replaced. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader is not a shader -// object. GL.INVALID_VALUE is generated if count is less than 0. -// GL.INVALID_OPERATION is generated if ShaderSource is executed between the -// execution of Begin and the corresponding execution of End. -// -// ShaderSource is available in GL version 2.0 or greater. -func (gl *GL) ShaderSource(shader glbase.Shader, source ...string) { - count := len(source) - length := make([]int32, count) - source_c := make([]unsafe.Pointer, count) - for i, src := range source { - length[i] = int32(len(src)) - if len(src) > 0 { - source_c[i] = *(*unsafe.Pointer)(unsafe.Pointer(&src)) - } else { - source_c[i] = unsafe.Pointer(uintptr(0)) - } - } - C.gl4_0compat_glShaderSource(gl.funcs, C.GLuint(shader), C.GLsizei(count), (**C.GLchar)(unsafe.Pointer(&source_c[0])), (*C.GLint)(unsafe.Pointer(&length[0]))) -} - -// LinkProgram links the program object specified by program. If any shader -// objects of type GL.VERTEX_SHADER are attached to program, they will be -// used to create an executable that will run on the programmable vertex -// processor. If any shader objects of type GL.FRAGMENT_SHADER are attached -// to program, they will be used to create an executable that will run on the -// programmable fragment processor. -// -// The status of the link operation will be stored as part of the program -// object's state. This value will be set to GL.TRUE if the program object -// was linked without errors and is ready for use, and GL.FALSE otherwise. It -// can be queried by calling GetProgramiv with arguments program and -// GL.LINK_STATUS. -// -// As a result of a successful link operation, all active user-defined -// uniform variables belonging to program will be initialized to 0, and each -// of the program object's active uniform variables will be assigned a -// location that can be queried by calling GetUniformLocation. Also, any -// active user-defined attribute variables that have not been bound to a -// generic vertex attribute index will be bound to one at this time. -// -// Linking of a program object can fail for a number of reasons as specified -// in the OpenGL Shading Language Specification. The following lists some of -// the conditions that will cause a link error. -// -// - The number of active attribute variables supported by the -// implementation has been exceeded. -// -// - The storage limit for uniform variables has been exceeded. -// -// - The number of active uniform variables supported by the implementation -// has been exceeded. -// -// - The main function is missing for the vertex shader or the fragment -// shader. -// -// - A varying variable actually used in the fragment shader is not -// declared in the same way (or is not declared at all) in the vertex -// shader. -// -// - A reference to a function or variable name is unresolved. -// -// - A shared global is declared with two different types or two different -// initial values. -// -// - One or more of the attached shader objects has not been successfully -// compiled. -// -// - Binding a generic attribute matrix caused some rows of the matrix to -// fall outside the allowed maximum of GL.MAX_VERTEX_ATTRIBS. -// -// - Not enough contiguous vertex attribute slots could be found to bind -// attribute matrices. -// -// When a program object has been successfully linked, the program object can -// be made part of current state by calling UseProgram. Whether or not the -// link operation was successful, the program object's information log will -// be overwritten. The information log can be retrieved by calling -// GetProgramInfoLog. -// -// LinkProgram will also install the generated executables as part of the -// current rendering state if the link operation was successful and the -// specified program object is already currently in use as a result of a -// previous call to UseProgram. If the program object currently in use is -// relinked unsuccessfully, its link status will be set to GL.FALSE , but the -// executables and associated state will remain part of the current state -// until a subsequent call to UseProgram removes it from use. After it is -// removed from use, it cannot be made part of current state until it has -// been successfully relinked. -// -// If program contains shader objects of type GL.VERTEX_SHADER but does not -// contain shader objects of type GL.FRAGMENT_SHADER, the vertex shader will -// be linked against the implicit interface for fixed functionality fragment -// processing. Similarly, if program contains shader objects of type -// GL.FRAGMENT_SHADER but it does not contain shader objects of type -// GL.VERTEX_SHADER, the fragment shader will be linked against the implicit -// interface for fixed functionality vertex processing. -// -// The program object's information log is updated and the program is -// generated at the time of the link operation. After the link operation, -// applications are free to modify attached shader objects, compile attached -// shader objects, detach shader objects, delete shader objects, and attach -// additional shader objects. None of these operations affects the -// information log or the program that is part of the program object. -// -// If the link operation is unsuccessful, any information about a previous -// link operation on program is lost (a failed link does not restore the -// old state of program). Certain information can still be retrieved -// from program even after an unsuccessful link operation. See for instance -// GetActiveAttrib and GetActiveUniform. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program -// object. GL.INVALID_OPERATION is generated if LinkProgram is executed -// between the execution of Begin and the corresponding execution of End. -// -// LinkProgram is available in GL version 2.0 or greater. -func (gl *GL) LinkProgram(program glbase.Program) { - C.gl4_0compat_glLinkProgram(gl.funcs, C.GLuint(program)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsShader.xml -func (gl *GL) IsShader(shader glbase.Shader) bool { - glresult := C.gl4_0compat_glIsShader(gl.funcs, C.GLuint(shader)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsProgram.xml -func (gl *GL) IsProgram(program glbase.Program) bool { - glresult := C.gl4_0compat_glIsProgram(gl.funcs, C.GLuint(program)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// GetVertexAttribiv returns in params the value of a generic vertex attribute -// parameter. The generic vertex attribute to be queried is specified by -// index, and the parameter to be queried is specified by pname. -// -// The accepted parameter names are as follows: -// -// GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING -// params returns a single value, the name of the buffer object -// currently bound to the binding point corresponding to generic vertex -// attribute array index. If no buffer object is bound, 0 is returned. -// The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_ENABLED -// params returns a single value that is non-zero (true) if the vertex -// attribute array for index is enabled and 0 (false) if it is -// disabled. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_SIZE -// params returns a single value, the size of the vertex attribute -// array for index. The size is the number of values for each element -// of the vertex attribute array, and it will be 1, 2, 3, or 4. The -// initial value is 4. -// -// GL.VERTEX_ATTRIB_ARRAY_STRIDE -// params returns a single value, the array stride for (number of bytes -// between successive elements in) the vertex attribute array for -// index. A value of 0 indicates that the array elements are stored -// sequentially in memory. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_TYPE -// params returns a single value, a symbolic constant indicating the -// array type for the vertex attribute array for index. Possible values -// are GL.BYTE, GL.UNSIGNED_BYTE, GL.SHORT, GL.UNSIGNED_SHORT, GL.INT, -// GL.UNSIGNED_INT, GL.FLOAT, and GL.DOUBLE. The initial value is -// GL.FLOAT. -// -// GL.VERTEX_ATTRIB_ARRAY_NORMALIZED -// params returns a single value that is non-zero (true) if fixed-point -// data types for the vertex attribute array indicated by index are -// normalized when they are converted to floating point, and 0 (false) -// otherwise. The initial value is 0. -// -// GL.CURRENT_VERTEX_ATTRIB -// params returns four values that represent the current value for the -// generic vertex attribute specified by index. Generic vertex -// attribute 0 is unique in that it has no current state, so an error -// will be generated if index is 0. The initial value for all other -// generic vertex attributes is (0,0,0,1). -// -// All of the parameters except GL.CURRENT_VERTEX_ATTRIB represent -// client-side state. -// -// Error GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. GL.INVALID_ENUM is generated if pname is not an -// accepted value. GL.INVALID_OPERATION is generated if index is 0 and pname -// is GL.CURRENT_VERTEX_ATTRIB. -// -// GetVertexAttribiv is available in GL version 2.0 or greater. -func (gl *GL) GetVertexAttribiv(index glbase.Attrib, pname glbase.Enum, params []int32) { - var params_c [4]int32 - C.gl4_0compat_glGetVertexAttribiv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetVertexAttribfv returns in params the value of a generic vertex attribute -// parameter. The generic vertex attribute to be queried is specified by -// index, and the parameter to be queried is specified by pname. -// -// The accepted parameter names are as follows: -// -// GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING -// params returns a single value, the name of the buffer object -// currently bound to the binding point corresponding to generic vertex -// attribute array index. If no buffer object is bound, 0 is returned. -// The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_ENABLED -// params returns a single value that is non-zero (true) if the vertex -// attribute array for index is enabled and 0 (false) if it is -// disabled. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_SIZE -// params returns a single value, the size of the vertex attribute -// array for index. The size is the number of values for each element -// of the vertex attribute array, and it will be 1, 2, 3, or 4. The -// initial value is 4. -// -// GL.VERTEX_ATTRIB_ARRAY_STRIDE -// params returns a single value, the array stride for (number of bytes -// between successive elements in) the vertex attribute array for -// index. A value of 0 indicates that the array elements are stored -// sequentially in memory. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_TYPE -// params returns a single value, a symbolic constant indicating the -// array type for the vertex attribute array for index. Possible values -// are GL.BYTE, GL.UNSIGNED_BYTE, GL.SHORT, GL.UNSIGNED_SHORT, GL.INT, -// GL.UNSIGNED_INT, GL.FLOAT, and GL.DOUBLE. The initial value is -// GL.FLOAT. -// -// GL.VERTEX_ATTRIB_ARRAY_NORMALIZED -// params returns a single value that is non-zero (true) if fixed-point -// data types for the vertex attribute array indicated by index are -// normalized when they are converted to floating point, and 0 (false) -// otherwise. The initial value is 0. -// -// GL.CURRENT_VERTEX_ATTRIB -// params returns four values that represent the current value for the -// generic vertex attribute specified by index. Generic vertex -// attribute 0 is unique in that it has no current state, so an error -// will be generated if index is 0. The initial value for all other -// generic vertex attributes is (0,0,0,1). -// -// All of the parameters except GL.CURRENT_VERTEX_ATTRIB represent -// client-side state. -// -// Error GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. GL.INVALID_ENUM is generated if pname is not an -// accepted value. GL.INVALID_OPERATION is generated if index is 0 and pname -// is GL.CURRENT_VERTEX_ATTRIB. -// -// GetVertexAttribfv is available in GL version 2.0 or greater. -func (gl *GL) GetVertexAttribfv(index glbase.Attrib, pname glbase.Enum, params []float32) { - var params_c [4]float32 - C.gl4_0compat_glGetVertexAttribfv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetVertexAttribdv returns in params the value of a generic vertex attribute -// parameter. The generic vertex attribute to be queried is specified by -// index, and the parameter to be queried is specified by pname. -// -// The accepted parameter names are as follows: -// -// GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING -// params returns a single value, the name of the buffer object -// currently bound to the binding point corresponding to generic vertex -// attribute array index. If no buffer object is bound, 0 is returned. -// The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_ENABLED -// params returns a single value that is non-zero (true) if the vertex -// attribute array for index is enabled and 0 (false) if it is -// disabled. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_SIZE -// params returns a single value, the size of the vertex attribute -// array for index. The size is the number of values for each element -// of the vertex attribute array, and it will be 1, 2, 3, or 4. The -// initial value is 4. -// -// GL.VERTEX_ATTRIB_ARRAY_STRIDE -// params returns a single value, the array stride for (number of bytes -// between successive elements in) the vertex attribute array for -// index. A value of 0 indicates that the array elements are stored -// sequentially in memory. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_TYPE -// params returns a single value, a symbolic constant indicating the -// array type for the vertex attribute array for index. Possible values -// are GL.BYTE, GL.UNSIGNED_BYTE, GL.SHORT, GL.UNSIGNED_SHORT, GL.INT, -// GL.UNSIGNED_INT, GL.FLOAT, and GL.DOUBLE. The initial value is -// GL.FLOAT. -// -// GL.VERTEX_ATTRIB_ARRAY_NORMALIZED -// params returns a single value that is non-zero (true) if fixed-point -// data types for the vertex attribute array indicated by index are -// normalized when they are converted to floating point, and 0 (false) -// otherwise. The initial value is 0. -// -// GL.CURRENT_VERTEX_ATTRIB -// params returns four values that represent the current value for the -// generic vertex attribute specified by index. Generic vertex -// attribute 0 is unique in that it has no current state, so an error -// will be generated if index is 0. The initial value for all other -// generic vertex attributes is (0,0,0,1). -// -// All of the parameters except GL.CURRENT_VERTEX_ATTRIB represent -// client-side state. -// -// Error GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. GL.INVALID_ENUM is generated if pname is not an -// accepted value. GL.INVALID_OPERATION is generated if index is 0 and pname -// is GL.CURRENT_VERTEX_ATTRIB. -// -// GetVertexAttribdv is available in GL version 2.0 or greater. -func (gl *GL) GetVertexAttribdv(index glbase.Attrib, pname glbase.Enum, params []float64) { - var params_c [4]float64 - C.gl4_0compat_glGetVertexAttribdv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetUniformiv returns in params the value of the specified uniform -// variable. The type of the uniform variable specified by location -// determines the number of values returned. If the uniform variable is -// defined in the shader as a boolean, int, or float, a single value will be -// returned. If it is defined as a vec2, ivec2, or bvec2, two values will be -// returned. If it is defined as a vec3, ivec3, or bvec3, three values will -// be returned, and so on. To query values stored in uniform variables -// declared as arrays, call GetUniformiv for each element of the array. To -// query values stored in uniform variables declared as structures, call -// GetUniformiv for each field in the structure. The values for uniform -// variables declared as a matrix will be returned in column major order. -// -// The locations assigned to uniform variables are not known until the -// program object is linked. After linking has occurred, the command -// GetUniformLocation can be used to obtain the location of a uniform -// variable. This location value can then be passed to GetUniformiv in order -// to query the current value of the uniform variable. After a program object -// has been linked successfully, the index values for uniform variables -// remain fixed until the next link command occurs. The uniform variable -// values can only be queried after a link if the link was successful. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program -// object. GL.INVALID_OPERATION is generated if program has not been -// successfully linked. GL.INVALID_OPERATION is generated if location does -// not correspond to a valid uniform variable location for the specified -// program object. GL.INVALID_OPERATION is generated if GetUniformiv is -// executed between the execution of Begin and the corresponding execution of -// End. -// -// GetUniformiv is available in GL version 2.0 or greater. -func (gl *GL) GetUniformiv(program glbase.Program, location glbase.Uniform, params []int32) { - var params_c [4]int32 - C.gl4_0compat_glGetUniformiv(gl.funcs, C.GLuint(program), C.GLint(location), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetUniformfv returns in params the value of the specified uniform -// variable. The type of the uniform variable specified by location -// determines the number of values returned. If the uniform variable is -// defined in the shader as a boolean, int, or float, a single value will be -// returned. If it is defined as a vec2, ivec2, or bvec2, two values will be -// returned. If it is defined as a vec3, ivec3, or bvec3, three values will -// be returned, and so on. To query values stored in uniform variables -// declared as arrays, call GetUniformfv for each element of the array. To -// query values stored in uniform variables declared as structures, call -// GetUniformfv for each field in the structure. The values for uniform -// variables declared as a matrix will be returned in column major order. -// -// The locations assigned to uniform variables are not known until the -// program object is linked. After linking has occurred, the command -// GetUniformLocation can be used to obtain the location of a uniform -// variable. This location value can then be passed to GetUniformfv in order -// to query the current value of the uniform variable. After a program object -// has been linked successfully, the index values for uniform variables -// remain fixed until the next link command occurs. The uniform variable -// values can only be queried after a link if the link was successful. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program -// object. GL.INVALID_OPERATION is generated if program has not been -// successfully linked. GL.INVALID_OPERATION is generated if location does -// not correspond to a valid uniform variable location for the specified -// program object. GL.INVALID_OPERATION is generated if GetUniformfv is -// executed between the execution of Begin and the corresponding execution of -// End. -// -// GetUniformfv is available in GL version 2.0 or greater. -func (gl *GL) GetUniformfv(program glbase.Program, location glbase.Uniform, params []float32) { - var params_c [4]float32 - C.gl4_0compat_glGetUniformfv(gl.funcs, C.GLuint(program), C.GLint(location), (*C.GLfloat)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetUniformLocation returns an integer that represents the location of a -// specific uniform variable within a program object. name must be an active -// uniform variable name in program that is not a structure, an array of -// structures, or a subcomponent of a vector or a matrix. This function -// returns -1 if name does not correspond to an active uniform variable in -// program or if name starts with the reserved prefix "gl_". -// -// Uniform variables that are structures or arrays of structures may be -// queried by calling GetUniformLocation for each field within the -// structure. The array element operator "[]" and the structure field -// operator "." may be used in name in order to select elements within an -// array or fields within a structure. The result of using these operators is -// not allowed to be another structure, an array of structures, or a -// subcomponent of a vector or a matrix. Except if the last part of name -// indicates a uniform variable array, the location of the first element of -// an array can be retrieved by using the name of the array, or by using the -// name appended by "[0]". -// -// The actual locations assigned to uniform variables are not known until the -// program object is linked successfully. After linking has occurred, the -// command GetUniformLocation can be used to obtain the location of a -// uniform variable. This location value can then be passed to Uniform to -// set the value of the uniform variable or to GetUniform in order to query -// the current value of the uniform variable. After a program object has been -// linked successfully, the index values for uniform variables remain fixed -// until the next link command occurs. Uniform variable locations and values -// can only be queried after a link if the link was successful. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program object. -// GL.INVALID_OPERATION is generated if program has not been successfully -// linked. GL.INVALID_OPERATION is generated if GetUniformLocation is executed -// between the execution of Begin and the corresponding execution of End. -// -// GetUniformLocation is available in GL version 2.0 or greater. -func (gl *GL) GetUniformLocation(program glbase.Program, name string) glbase.Uniform { - name_cstr := C.CString(name) - glresult := C.gl4_0compat_glGetUniformLocation(gl.funcs, C.GLuint(program), (*C.GLchar)(name_cstr)) - C.free(unsafe.Pointer(name_cstr)) - return glbase.Uniform(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetShaderSource.xml -func (gl *GL) GetShaderSource(shader glbase.Shader, bufSize int32, length []int32, source []byte) { - C.gl4_0compat_glGetShaderSource(gl.funcs, C.GLuint(shader), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLchar)(unsafe.Pointer(&source[0]))) -} - -// GetShaderInfoLog returns the information log for the specified shader -// object. The information log for a shader object is modified when the -// shader is compiled. -// -// The information log for a shader object is a string that may contain -// diagnostic messages, warning messages, and other information about the -// last compile operation. When a shader object is created, its information -// log will be a string of length 0, and the size of the current log can be -// obtained by calling GetShaderiv with the value GL.INFO_LOG_LENGTH. -// -// The information log for a shader object is the OpenGL implementer's -// primary mechanism for conveying information about the compilation process. -// Therefore, the information log can be helpful to application developers -// during the development process, even when compilation is successful. -// Application developers should not expect different OpenGL implementations -// to produce identical information logs. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader is not a shader -// object. GL.INVALID_VALUE is generated if maxLength is less than 0. -// GL.INVALID_OPERATION is generated if GetShaderInfoLog is executed -// between the execution of Begin and the corresponding execution of End. -// -// GetShaderInfoLog is available in GL version 2.0 or greater. -func (gl *GL) GetShaderInfoLog(shader glbase.Shader) []byte { - var params [1]int32 - var length int32 - gl.GetShaderiv(shader, INFO_LOG_LENGTH, params[:]) - bufSize := params[0] - infoLog := make([]byte, int(bufSize)) - C.gl4_0compat_glGetShaderInfoLog(gl.funcs, C.GLuint(shader), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length)), (*C.GLchar)(unsafe.Pointer(&infoLog[0]))) - return infoLog -} - -// GetShaderiv GetShader returns in params the value of a parameter for a specific -// shader object. The following parameters are defined: -// -// GL.SHADER_TYPE -// params returns GL.VERTEX_SHADER if shader is a vertex shader object, -// and GL.FRAGMENT_SHADER if shader is a fragment shader object. -// -// GL.DELETE_STATUS -// params returns GL.TRUE if shader is currently flagged for deletion, -// and GL.FALSE otherwise. -// -// GL.COMPILE_STATUS -// params returns GL.TRUE if the last compile operation on shader was -// successful, and GL.FALSE otherwise. -// -// GL.INFO_LOG_LENGTH -// params returns the number of characters in the information log for -// shader including the null termination character (the size of the -// character buffer required to store the information log). If shader has -// no information log, a value of 0 is returned. -// -// GL.SHADER_SOURCE_LENGTH -// params returns the length of the concatenation of the source strings -// that make up the shader source for the shader, including the null -// termination character. (the size of the character buffer -// required to store the shader source). If no source code exists, 0 is -// returned. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader does not refer to a -// shader object. GL.INVALID_ENUM is generated if pname is not an accepted -// value. GL.INVALID_OPERATION is generated if GetShader is executed -// between the execution of Begin and the corresponding execution of End. -// -// GetShaderiv is available in GL version 2.0 or greater. -func (gl *GL) GetShaderiv(shader glbase.Shader, pname glbase.Enum, params []int32) { - var params_c [4]int32 - C.gl4_0compat_glGetShaderiv(gl.funcs, C.GLuint(shader), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetProgramInfoLog returns the information log for the specified program -// object. The information log for a program object is modified when the -// program object is linked or validated. -// -// The information log for a program object is either an empty string, or a -// string containing information about the last link operation, or a string -// containing information about the last validation operation. It may contain -// diagnostic messages, warning messages, and other information. When a -// program object is created, its information log will be a string of length -// 0, and the size of the current log can be obtained by calling GetProgramiv -// with the value GL.INFO_LOG_LENGTH. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated -// by OpenGL. GL.INVALID_OPERATION is generated if program is not a -// program object. -func (gl *GL) GetProgramInfoLog(program glbase.Program) []byte { - var params [1]int32 - var length int32 - gl.GetProgramiv(program, INFO_LOG_LENGTH, params[:]) - bufSize := params[0] - infoLog := make([]byte, int(bufSize)) - C.gl4_0compat_glGetProgramInfoLog(gl.funcs, C.GLuint(program), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length)), (*C.GLchar)(unsafe.Pointer(&infoLog[0]))) - return infoLog -} - -// GetProgramiv returns in params the value of a parameter for a specific -// program object. The following parameters are defined: -// -// GL.DELETE_STATUS -// params returns GL.TRUE if program is currently flagged for deletion, -// and GL.FALSE otherwise. -// -// GL.LINK_STATUS -// params returns GL.TRUE if the last link operation on program was -// successful, and GL.FALSE otherwise. -// -// GL.VALIDATE_STATUS -// params returns GL.TRUE or if the last validation operation on -// program was successful, and GL.FALSE otherwise. -// -// GL.INFO_LOG_LENGTH -// params returns the number of characters in the information log for -// program including the null termination character (the size of -// the character buffer required to store the information log). If -// program has no information log, a value of 0 is returned. -// -// GL.ATTACHED_SHADERS -// params returns the number of shader objects attached to program. -// -// GL.ACTIVE_ATTRIBUTES -// params returns the number of active attribute variables for program. -// -// GL.ACTIVE_ATTRIBUTE_MAX_LENGTH -// params returns the length of the longest active attribute name for -// program, including the null termination character (the size of -// the character buffer required to store the longest attribute name). -// If no active attributes exist, 0 is returned. -// -// GL.ACTIVE_UNIFORMS -// params returns the number of active uniform variables for program. -// -// GL.ACTIVE_UNIFORM_MAX_LENGTH -// params returns the length of the longest active uniform variable -// name for program, including the null termination character (i.e., -// the size of the character buffer required to store the longest -// uniform variable name). If no active uniform variables exist, 0 is -// returned. -// -// GL.TRANSFORM_FEEDBACK_BUFFER_MODE -// params returns a symbolic constant indicating the buffer mode used -// when transform feedback is active. This may be GL.SEPARATE_ATTRIBS -// or GL.INTERLEAVED_ATTRIBS. -// -// GL.TRANSFORM_FEEDBACK_VARYINGS -// params returns the number of varying variables to capture in transform -// feedback mode for the program. -// -// GL.TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH -// params returns the length of the longest variable name to be used for -// transform feedback, including the null-terminator. -// -// GL.GEOMETRY_VERTICES_OUT -// params returns the maximum number of vertices that the geometry shader in -// program will output. -// -// GL.GEOMETRY_INPUT_TYPE -// params returns a symbolic constant indicating the primitive type accepted -// as input to the geometry shader contained in program. -// -// GL.GEOMETRY_OUTPUT_TYPE -// params returns a symbolic constant indicating the primitive type that will -// be output by the geometry shader contained in program. -// -// GL.ACTIVE_UNIFORM_BLOCKS and GL.ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH are -// available only if the GL version 3.1 or greater. -// -// GL.GEOMETRY_VERTICES_OUT, GL.GEOMETRY_INPUT_TYPE and -// GL.GEOMETRY_OUTPUT_TYPE are accepted only if the GL version is 3.2 or -// greater. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program does not refer to a -// program object. GL.INVALID_OPERATION is generated if pname is -// GL.GEOMETRY_VERTICES_OUT, GL.GEOMETRY_INPUT_TYPE, or -// GL.GEOMETRY_OUTPUT_TYPE, and program does not contain a geometry shader. -// GL.INVALID_ENUM is generated if pname is not an accepted value. -func (gl *GL) GetProgramiv(program glbase.Program, pname glbase.Enum, params []int32) { - var params_c [4]int32 - C.gl4_0compat_glGetProgramiv(gl.funcs, C.GLuint(program), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetAttribLocation queries the previously linked program object specified -// by program for the attribute variable specified by name and returns the -// index of the generic vertex attribute that is bound to that attribute -// variable. If name is a matrix attribute variable, the index of the first -// column of the matrix is returned. If the named attribute variable is not -// an active attribute in the specified program object or if name starts with -// the reserved prefix "gl_", a value of -1 is returned. -// -// The association between an attribute variable name and a generic attribute -// index can be specified at any time by calling BindAttribLocation. -// Attribute bindings do not go into effect until LinkProgram is called. -// After a program object has been linked successfully, the index values for -// attribute variables remain fixed until the next link command occurs. The -// attribute values can only be queried after a link if the link was -// successful. GetAttribLocation returns the binding that actually went -// into effect the last time LinkProgram was called for the specified -// program object. Attribute bindings that have been specified since the last -// link operation are not returned by GetAttribLocation. -// -// Error GL_INVALID_OPERATION is generated if program is not a value -// generated by OpenGL. GL_INVALID_OPERATION is generated if program is not -// a program object. GL_INVALID_OPERATION is generated if program has not -// been successfully linked. GL_INVALID_OPERATION is generated if -// GetAttribLocation is executed between the execution of Begin and the -// corresponding execution of End. -// -// GetAttribLocation is available in GL version 2.0 or greater. -func (gl *GL) GetAttribLocation(program glbase.Program, name string) glbase.Attrib { - name_cstr := C.CString(name) - glresult := C.gl4_0compat_glGetAttribLocation(gl.funcs, C.GLuint(program), (*C.GLchar)(name_cstr)) - C.free(unsafe.Pointer(name_cstr)) - return glbase.Attrib(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetAttachedShaders.xml -func (gl *GL) GetAttachedShaders(program glbase.Program, maxCount int32, count []int, obj []uint32) { - C.gl4_0compat_glGetAttachedShaders(gl.funcs, C.GLuint(program), C.GLsizei(maxCount), (*C.GLsizei)(unsafe.Pointer(&count[0])), (*C.GLuint)(unsafe.Pointer(&obj[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveUniform.xml -func (gl *GL) GetActiveUniform(program glbase.Program, index uint32, bufSize int32, length []int32, size []int, gltype []glbase.Enum, name []byte) { - C.gl4_0compat_glGetActiveUniform(gl.funcs, C.GLuint(program), C.GLuint(index), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLint)(unsafe.Pointer(&size[0])), (*C.GLenum)(unsafe.Pointer(&gltype[0])), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveAttrib.xml -func (gl *GL) GetActiveAttrib(program glbase.Program, index glbase.Attrib, bufSize int32, length []int32, size []int, gltype []glbase.Enum, name []byte) { - C.gl4_0compat_glGetActiveAttrib(gl.funcs, C.GLuint(program), C.GLuint(index), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLint)(unsafe.Pointer(&size[0])), (*C.GLenum)(unsafe.Pointer(&gltype[0])), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEnableVertexAttribArray.xml -func (gl *GL) EnableVertexAttribArray(index glbase.Attrib) { - C.gl4_0compat_glEnableVertexAttribArray(gl.funcs, C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDisableVertexAttribArray.xml -func (gl *GL) DisableVertexAttribArray(index glbase.Attrib) { - C.gl4_0compat_glDisableVertexAttribArray(gl.funcs, C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDetachShader.xml -func (gl *GL) DetachShader(program glbase.Program, shader glbase.Shader) { - C.gl4_0compat_glDetachShader(gl.funcs, C.GLuint(program), C.GLuint(shader)) -} - -// DeleteShader frees the memory and invalidates the name associated with -// the shader object specified by shader. This command effectively undoes the -// effects of a call to CreateShader. -// -// If a shader object to be deleted is attached to a program object, it will -// be flagged for deletion, but it will not be deleted until it is no longer -// attached to any program object, for any rendering context (it must -// be detached from wherever it was attached before it will be deleted). A -// value of 0 for shader will be silently ignored. -// -// To determine whether an object has been flagged for deletion, call -// GetShader with arguments shader and GL.DELETE_STATUS. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. -// -// DeleteShader is available in GL version 2.0 or greater. -func (gl *GL) DeleteShader(shader glbase.Shader) { - C.gl4_0compat_glDeleteShader(gl.funcs, C.GLuint(shader)) -} - -// DeleteProgram frees the memory and invalidates the name associated with -// the program object specified by program. This command effectively undoes -// the effects of a call to CreateProgram. -// -// If a program object is in use as part of current rendering state, it will -// be flagged for deletion, but it will not be deleted until it is no longer -// part of current state for any rendering context. If a program object to be -// deleted has shader objects attached to it, those shader objects will be -// automatically detached but not deleted unless they have already been -// flagged for deletion by a previous call to DeleteShader. A value of 0 -// for program will be silently ignored. -// -// To determine whether a program object has been flagged for deletion, call -// GetProgram with arguments program and GL.DELETE_STATUS. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. -// -// DeleteProgram is available in GL version 2.0 or greater. -func (gl *GL) DeleteProgram(program glbase.Program) { - C.gl4_0compat_glDeleteProgram(gl.funcs, C.GLuint(program)) -} - -// CreateShader creates an empty shader object and returns a non-zero value -// by which it can be referenced. A shader object is used to maintain the -// source code strings that define a shader. shaderType indicates the type of -// shader to be created. -// -// Two types of shaders are supported. A shader of type GL.VERTEX_SHADER is a -// shader that is intended to run on the programmable vertex processor and -// replace the fixed functionality vertex processing in OpenGL. A shader of -// type GL.FRAGMENT_SHADER is a shader that is intended to run on the -// programmable fragment processor and replace the fixed functionality -// fragment processing in OpenGL. -// -// When created, a shader object's GL.SHADER_TYPE parameter is set to either -// GL.VERTEX_SHADER or GL.FRAGMENT_SHADER, depending on the value of -// shaderType. -// -// Like display lists and texture objects, the name space for shader objects -// may be shared across a set of contexts, as long as the server sides of the -// contexts share the same address space. If the name space is shared across -// contexts, any attached objects and the data associated with those attached -// objects are shared as well. -// -// This function returns 0 if an error occurs creating the shader object. -// -// Error GL.INVALID_ENUM is generated if shaderType is not an accepted value. -// GL.INVALID_OPERATION is generated if CreateShader is executed between the -// execution of Begin and the corresponding execution of End. -// -// CreateShader is available in GL version 2.0 or greater. -func (gl *GL) CreateShader(gltype glbase.Enum) glbase.Shader { - glresult := C.gl4_0compat_glCreateShader(gl.funcs, C.GLenum(gltype)) - return glbase.Shader(glresult) -} - -// CreateProgram creates an empty program object and returns a non-zero -// value by which it can be referenced. A program object is an object to -// which shader objects can be attached. This provides a mechanism to specify -// the shader objects that will be linked to create a program. It also -// provides a means for checking the compatibility of the shaders that will -// be used to create a program (for instance, checking the compatibility -// between a vertex shader and a fragment shader). When no longer needed as -// part of a program object, shader objects can be detached. -// -// One or more executables are created in a program object by successfully -// attaching shader objects to it with AttachShader, successfully compiling -// the shader objects with CompileShader, and successfully linking the -// program object with LinkProgram. These executables are made part of -// current state when UseProgram is called. Program objects can be deleted -// by calling DeleteProgram. The memory associated with the program object -// will be deleted when it is no longer part of current rendering state for -// any context. -// -// Like display lists and texture objects, the name space for program objects -// may be shared across a set of contexts, as long as the server sides of the -// contexts share the same address space. If the name space is shared across -// contexts, any attached objects and the data associated with those attached -// objects are shared as well. -// -// Applications are responsible for providing the synchronization across API -// calls when objects are accessed from different execution threads. -// -// This function returns 0 if an error occurs creating the program object. -// -// Error GL.INVALID_OPERATION is generated if CreateProgram is executed -// between the execution of Begin and the corresponding execution of End. -// -// CreateProgram is available in GL version 2.0 or greater. -func (gl *GL) CreateProgram() glbase.Program { - glresult := C.gl4_0compat_glCreateProgram(gl.funcs) - return glbase.Program(glresult) -} - -// CompileShader compiles the source code strings that have been stored in -// the shader object specified by shader. -// -// The compilation status will be stored as part of the shader object's -// state. This value will be set to GL.TRUE if the shader was compiled without -// errors and is ready for use, and GL.FALSE otherwise. It can be queried by -// calling GetShaderiv with arguments shader and GL.COMPILE_STATUS. -// -// Compilation of a shader can fail for a number of reasons as specified by -// the OpenGL Shading Language Specification. Whether or not the compilation -// was successful, information about the compilation can be obtained from the -// shader object's information log by calling GetShaderInfoLog. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader is not a shader -// object. GL.INVALID_OPERATION is generated if CompileShader is executed -// between the execution of Begin and the corresponding execution of End. -// -// CompileShader is available in GL version 2.0 or greater. -func (gl *GL) CompileShader(shader glbase.Shader) { - C.gl4_0compat_glCompileShader(gl.funcs, C.GLuint(shader)) -} - -// BindAttribLocation associates a user-defined attribute variable in the program -// object specified by program with a generic vertex attribute index. The name -// parameter specifies the name of the vertex shader attribute variable to -// which index is to be bound. When program is made part of the current state, -// values provided via the generic vertex attribute index will modify the -// value of the user-defined attribute variable specified by name. -// -// If name refers to a matrix attribute variable, index refers to the first -// column of the matrix. Other matrix columns are then automatically bound to -// locations index+1 for a matrix of type mat2; index+1 and index+2 for a -// matrix of type mat3; and index+1, index+2, and index+3 for a matrix of -// type mat4. -// -// This command makes it possible for vertex shaders to use descriptive names -// for attribute variables rather than generic variables that are numbered -// from 0 to GL.MAX_VERTEX_ATTRIBS-1. The values sent to each generic -// attribute index are part of current state, just like standard vertex -// attributes such as color, normal, and vertex position. If a different -// program object is made current by calling UseProgram, the generic vertex -// attributes are tracked in such a way that the same values will be observed -// by attributes in the new program object that are also bound to index. -// -// Attribute variable name-to-generic attribute index bindings for a program -// object can be explicitly assigned at any time by calling -// BindAttribLocation. Attribute bindings do not go into effect until -// LinkProgram is called. After a program object has been linked -// successfully, the index values for generic attributes remain fixed (and -// their values can be queried) until the next link command occurs. -// -// Applications are not allowed to bind any of the standard OpenGL vertex -// attributes using this command, as they are bound automatically when -// needed. Any attribute binding that occurs after the program object has -// been linked will not take effect until the next time the program object is -// linked. -// -// If name was bound previously, that information is lost. Thus you cannot -// bind one user-defined attribute variable to multiple indices, but you can -// bind multiple user-defined attribute variables to the same index. -// -// Applications are allowed to bind more than one user-defined attribute -// variable to the same generic vertex attribute index. This is called -// aliasing, and it is allowed only if just one of the aliased attributes is -// active in the executable program, or if no path through the shader -// consumes more than one attribute of a set of attributes aliased to the -// same location. The compiler and linker are allowed to assume that no -// aliasing is done and are free to employ optimizations that work only in -// the absence of aliasing. OpenGL implementations are not required to do -// error checking to detect aliasing. Because there is no way to bind -// standard attributes, it is not possible to alias generic attributes with -// conventional ones (except for generic attribute 0). -// -// BindAttribLocation can be called before any vertex shader objects are -// bound to the specified program object. It is also permissible to bind a -// generic attribute index to an attribute variable name that is never used -// in a vertex shader. -// -// Active attributes that are not explicitly bound will be bound by the -// linker when LinkProgram is called. The locations assigned can be queried -// by calling GetAttribLocation. -// -// Error GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. -// GL.INVALID_OPERATION is generated if name starts with the reserved prefix "gl_". -// GL.INVALID_VALUE is generated if program is not a value generated by OpenGL. -// GL.INVALID_OPERATION is generated if program is not a program object. -// GL.INVALID_OPERATION is generated if BindAttribLocation is executed -// between the execution of Begin and the corresponding execution of End. -// -// BindAttribLocation is available in GL version 2.0 or greater. -func (gl *GL) BindAttribLocation(program glbase.Program, index glbase.Attrib, name string) { - name_cstr := C.CString(name) - C.gl4_0compat_glBindAttribLocation(gl.funcs, C.GLuint(program), C.GLuint(index), (*C.GLchar)(name_cstr)) - C.free(unsafe.Pointer(name_cstr)) -} - -// AttachShader attaches a shader object to a program object. -// -// In order to create an executable, there must be a way to specify the list -// of things that will be linked together. Program objects provide this -// mechanism. Shaders that are to be linked together in a program object must -// first be attached to that program object. This indicates that shader will -// be included in link operations that will be performed on program. -// -// All operations that can be performed on a shader object are valid whether -// or not the shader object is attached to a program object. It is -// permissible to attach a shader object to a program object before source -// code has been loaded into the shader object or before the shader object -// has been compiled. It is permissible to attach multiple shader objects of -// the same type because each may contain a portion of the complete shader. -// It is also permissible to attach a shader object to more than one program -// object. If a shader object is deleted while it is attached to a program -// object, it will be flagged for deletion, and deletion will not occur until -// DetachShader is called to detach it from all program objects to which it -// is attached. -// -// Error GL.INVALID_VALUE is generated if either program or shader is not a -// value generated by OpenGL. GL.INVALID_OPERATION is generated if program -// is not a program object. GL.INVALID_OPERATION is generated if shader is -// not a shader object. GL.INVALID_OPERATION is generated if shader is -// already attached to program. GL.INVALID_OPERATION is generated if -// AttachShader is executed between the execution of Begin and the -// corresponding execution of End. -// -// AttachShader is available in GL version 2.0 or greater. -func (gl *GL) AttachShader(program glbase.Program, shader glbase.Shader) { - C.gl4_0compat_glAttachShader(gl.funcs, C.GLuint(program), C.GLuint(shader)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glStencilMaskSeparate.xml -func (gl *GL) StencilMaskSeparate(face glbase.Enum, mask uint32) { - C.gl4_0compat_glStencilMaskSeparate(gl.funcs, C.GLenum(face), C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glStencilFuncSeparate.xml -func (gl *GL) StencilFuncSeparate(face, glfunc glbase.Enum, ref int32, mask uint32) { - C.gl4_0compat_glStencilFuncSeparate(gl.funcs, C.GLenum(face), C.GLenum(glfunc), C.GLint(ref), C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glStencilOpSeparate.xml -func (gl *GL) StencilOpSeparate(face, sfail, dpfail, dppass glbase.Enum) { - C.gl4_0compat_glStencilOpSeparate(gl.funcs, C.GLenum(face), C.GLenum(sfail), C.GLenum(dpfail), C.GLenum(dppass)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawBuffers.xml -func (gl *GL) DrawBuffers(n int, bufs []glbase.Enum) { - C.gl4_0compat_glDrawBuffers(gl.funcs, C.GLsizei(n), (*C.GLenum)(unsafe.Pointer(&bufs[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendEquationSeparate.xml -func (gl *GL) BlendEquationSeparate(modeRGB, modeAlpha glbase.Enum) { - C.gl4_0compat_glBlendEquationSeparate(gl.funcs, C.GLenum(modeRGB), C.GLenum(modeAlpha)) -} - -// UniformMatrix4x3fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix4x3fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix4x3fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(4*3) != 0 { - panic("invalid value length for UniformMatrix4x3fv") - } - count := len(value) / (4 * 3) - C.gl4_0compat_glUniformMatrix4x3fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix3x4fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix3x4fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix3x4fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(3*4) != 0 { - panic("invalid value length for UniformMatrix3x4fv") - } - count := len(value) / (3 * 4) - C.gl4_0compat_glUniformMatrix3x4fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix4x2fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix4x2fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix4x2fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(4*2) != 0 { - panic("invalid value length for UniformMatrix4x2fv") - } - count := len(value) / (4 * 2) - C.gl4_0compat_glUniformMatrix4x2fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix2x4fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix2x4fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix2x4fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(2*4) != 0 { - panic("invalid value length for UniformMatrix2x4fv") - } - count := len(value) / (2 * 4) - C.gl4_0compat_glUniformMatrix2x4fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix3x2fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix3x2fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix3x2fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(3*2) != 0 { - panic("invalid value length for UniformMatrix3x2fv") - } - count := len(value) / (3 * 2) - C.gl4_0compat_glUniformMatrix3x2fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix2x3fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix2x3fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix2x3fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(2*3) != 0 { - panic("invalid value length for UniformMatrix2x3fv") - } - count := len(value) / (2 * 3) - C.gl4_0compat_glUniformMatrix2x3fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsVertexArray.xml -func (gl *GL) IsVertexArray(array uint32) bool { - glresult := C.gl4_0compat_glIsVertexArray(gl.funcs, C.GLuint(array)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGenVertexArrays.xml -func (gl *GL) GenVertexArrays(n int, arrays []uint32) { - C.gl4_0compat_glGenVertexArrays(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&arrays[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDeleteVertexArrays.xml -func (gl *GL) DeleteVertexArrays(n int, arrays []uint32) { - C.gl4_0compat_glDeleteVertexArrays(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&arrays[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindVertexArray.xml -func (gl *GL) BindVertexArray(array uint32) { - C.gl4_0compat_glBindVertexArray(gl.funcs, C.GLuint(array)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFlushMappedBufferRange.xml -func (gl *GL) FlushMappedBufferRange(target glbase.Enum, offset, length int) { - C.gl4_0compat_glFlushMappedBufferRange(gl.funcs, C.GLenum(target), C.GLintptr(offset), C.GLsizeiptr(length)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFramebufferTextureLayer.xml -func (gl *GL) FramebufferTextureLayer(target, attachment glbase.Enum, texture glbase.Texture, level int, layer int32) { - C.gl4_0compat_glFramebufferTextureLayer(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLuint(texture), C.GLint(level), C.GLint(layer)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRenderbufferStorageMultisample.xml -func (gl *GL) RenderbufferStorageMultisample(target glbase.Enum, samples int32, internalFormat glbase.Enum, width, height int) { - C.gl4_0compat_glRenderbufferStorageMultisample(gl.funcs, C.GLenum(target), C.GLsizei(samples), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlitFramebuffer.xml -func (gl *GL) BlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1 int32, mask glbase.Bitfield, filter glbase.Enum) { - C.gl4_0compat_glBlitFramebuffer(gl.funcs, C.GLint(srcX0), C.GLint(srcY0), C.GLint(srcX1), C.GLint(srcY1), C.GLint(dstX0), C.GLint(dstY0), C.GLint(dstX1), C.GLint(dstY1), C.GLbitfield(mask), C.GLenum(filter)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGenerateMipmap.xml -func (gl *GL) GenerateMipmap(target glbase.Enum) { - C.gl4_0compat_glGenerateMipmap(gl.funcs, C.GLenum(target)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetFramebufferAttachmentParameteriv.xml -func (gl *GL) GetFramebufferAttachmentParameteriv(target, attachment, pname glbase.Enum, params []int32) { - C.gl4_0compat_glGetFramebufferAttachmentParameteriv(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFramebufferRenderbuffer.xml -func (gl *GL) FramebufferRenderbuffer(target, attachment, renderbuffertarget glbase.Enum, renderbuffer glbase.Renderbuffer) { - C.gl4_0compat_glFramebufferRenderbuffer(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(renderbuffertarget), C.GLuint(renderbuffer)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFramebufferTexture3D.xml -func (gl *GL) FramebufferTexture3D(target, attachment, textarget glbase.Enum, texture glbase.Texture, level int, zoffset int32) { - C.gl4_0compat_glFramebufferTexture3D(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(textarget), C.GLuint(texture), C.GLint(level), C.GLint(zoffset)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFramebufferTexture2D.xml -func (gl *GL) FramebufferTexture2D(target, attachment, textarget glbase.Enum, texture glbase.Texture, level int) { - C.gl4_0compat_glFramebufferTexture2D(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(textarget), C.GLuint(texture), C.GLint(level)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFramebufferTexture1D.xml -func (gl *GL) FramebufferTexture1D(target, attachment, textarget glbase.Enum, texture glbase.Texture, level int) { - C.gl4_0compat_glFramebufferTexture1D(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(textarget), C.GLuint(texture), C.GLint(level)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCheckFramebufferStatus.xml -func (gl *GL) CheckFramebufferStatus(target glbase.Enum) glbase.Enum { - glresult := C.gl4_0compat_glCheckFramebufferStatus(gl.funcs, C.GLenum(target)) - return glbase.Enum(glresult) -} - -// GenFramebuffers returns n framebuffer object names in ids. There is no -// guarantee that the names form a contiguous set of integers; however, it is -// guaranteed that none of the returned names was in use immediately before -// the call to GenFramebuffers. -// -// Framebuffer object names returned by a call to GenFramebuffers are not -// returned by subsequent calls, unless they are first deleted with -// DeleteFramebuffers. -// -// The names returned in ids are marked as used, for the purposes of -// GenFramebuffers only, but they acquire state and type only when they are -// first bound. -// -// Error GL.INVALID_VALUE is generated if n is negative. -func (gl *GL) GenFramebuffers(n int) []glbase.Framebuffer { - if n == 0 { - return nil - } - framebuffers := make([]glbase.Framebuffer, n) - C.gl4_0compat_glGenFramebuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&framebuffers[0]))) - return framebuffers -} - -// DeleteFramebuffers deletes the framebuffer objects whose names are -// stored in the framebuffers slice. The name zero is reserved by the GL and -// is silently ignored, should it occur in framebuffers, as are other unused -// names. Once a framebuffer object is deleted, its name is again unused and -// it has no attachments. If a framebuffer that is currently bound to one or -// more of the targets GL.DRAW_FRAMEBUFFER or GL.READ_FRAMEBUFFER is deleted, -// it is as though BindFramebuffer had been executed with the corresponding -// target and framebuffer zero. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// DeleteFramebuffers is available in GL version 3.0 or greater. -func (gl *GL) DeleteFramebuffers(framebuffers []glbase.Framebuffer) { - n := len(framebuffers) - if n == 0 { - return - } - C.gl4_0compat_glDeleteFramebuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&framebuffers[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindFramebuffer.xml -func (gl *GL) BindFramebuffer(target glbase.Enum, framebuffer glbase.Framebuffer) { - C.gl4_0compat_glBindFramebuffer(gl.funcs, C.GLenum(target), C.GLuint(framebuffer)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsFramebuffer.xml -func (gl *GL) IsFramebuffer(framebuffer glbase.Framebuffer) bool { - glresult := C.gl4_0compat_glIsFramebuffer(gl.funcs, C.GLuint(framebuffer)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetRenderbufferParameteriv.xml -func (gl *GL) GetRenderbufferParameteriv(target, pname glbase.Enum, params []int32) { - C.gl4_0compat_glGetRenderbufferParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRenderbufferStorage.xml -func (gl *GL) RenderbufferStorage(target, internalFormat glbase.Enum, width, height int) { - C.gl4_0compat_glRenderbufferStorage(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height)) -} - -// GenRenderbuffers returns n renderbuffer object names in renderbuffers. -// There is no guarantee that the names form a contiguous set of integers; -// however, it is guaranteed that none of the returned names was in use -// immediately before the call to GenRenderbuffers. -// -// Renderbuffer object names returned by a call to GenRenderbuffers are not -// returned by subsequent calls, unless they are first deleted with -// DeleteRenderbuffers. -// -// The names returned in renderbuffers are marked as used, for the purposes -// of GenRenderbuffers only, but they acquire state and type only when they -// are first bound. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// GenRenderbuffers is available in GL version 3.0 or greater. -func (gl *GL) GenRenderbuffers(n int) []glbase.Renderbuffer { - if n == 0 { - return nil - } - renderbuffers := make([]glbase.Renderbuffer, n) - C.gl4_0compat_glGenRenderbuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&renderbuffers[0]))) - return renderbuffers -} - -// DeleteRenderbuffers deletes the renderbuffer objects whose names are stored -// in the renderbuffers slice. The name zero is reserved by the GL and -// is silently ignored, should it occur in renderbuffers, as are other unused -// names. Once a renderbuffer object is deleted, its name is again unused and -// it has no contents. If a renderbuffer that is currently bound to the -// target GL.RENDERBUFFER is deleted, it is as though BindRenderbuffer had -// been executed with a target of GL.RENDERBUFFER and a name of zero. -// -// If a renderbuffer object is attached to one or more attachment points in -// the currently bound framebuffer, then it as if FramebufferRenderbuffer -// had been called, with a renderbuffer of zero for each attachment point to -// which this image was attached in the currently bound framebuffer. In other -// words, this renderbuffer object is first detached from all attachment -// ponits in the currently bound framebuffer. Note that the renderbuffer -// image is specifically not detached from any non-bound framebuffers. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// DeleteRenderbuffers is available in GL version 3.0 or greater. -func (gl *GL) DeleteRenderbuffers(renderbuffers []glbase.Renderbuffer) { - n := len(renderbuffers) - if n == 0 { - return - } - C.gl4_0compat_glDeleteRenderbuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&renderbuffers[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindRenderbuffer.xml -func (gl *GL) BindRenderbuffer(target glbase.Enum, renderbuffer glbase.Renderbuffer) { - C.gl4_0compat_glBindRenderbuffer(gl.funcs, C.GLenum(target), C.GLuint(renderbuffer)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsRenderbuffer.xml -func (gl *GL) IsRenderbuffer(renderbuffer glbase.Renderbuffer) bool { - glresult := C.gl4_0compat_glIsRenderbuffer(gl.funcs, C.GLuint(renderbuffer)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearBufferfi.xml -func (gl *GL) ClearBufferfi(buffer glbase.Enum, drawbuffer int32, depth float32, stencil int32) { - C.gl4_0compat_glClearBufferfi(gl.funcs, C.GLenum(buffer), C.GLint(drawbuffer), C.GLfloat(depth), C.GLint(stencil)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearBufferfv.xml -func (gl *GL) ClearBufferfv(buffer glbase.Enum, drawbuffer int32, value []float32) { - C.gl4_0compat_glClearBufferfv(gl.funcs, C.GLenum(buffer), C.GLint(drawbuffer), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearBufferuiv.xml -func (gl *GL) ClearBufferuiv(buffer glbase.Enum, drawbuffer int32, value []uint32) { - C.gl4_0compat_glClearBufferuiv(gl.funcs, C.GLenum(buffer), C.GLint(drawbuffer), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearBufferiv.xml -func (gl *GL) ClearBufferiv(buffer glbase.Enum, drawbuffer int32, value []int32) { - C.gl4_0compat_glClearBufferiv(gl.funcs, C.GLenum(buffer), C.GLint(drawbuffer), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexParameterIuiv.xml -func (gl *GL) GetTexParameterIuiv(target, pname glbase.Enum, params []uint32) { - C.gl4_0compat_glGetTexParameterIuiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexParameterIiv.xml -func (gl *GL) GetTexParameterIiv(target, pname glbase.Enum, params []int32) { - C.gl4_0compat_glGetTexParameterIiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexParameterIuiv.xml -func (gl *GL) TexParameterIuiv(target, pname glbase.Enum, params []uint32) { - C.gl4_0compat_glTexParameterIuiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexParameterIiv.xml -func (gl *GL) TexParameterIiv(target, pname glbase.Enum, params []int32) { - C.gl4_0compat_glTexParameterIiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// Uniform4uiv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform4uiv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4uiv(location glbase.Uniform, value []uint32) { - if len(value) == 0 { - return - } - if len(value)%4 != 0 { - panic("invalid value length for Uniform4uiv") - } - count := len(value) / 4 - C.gl4_0compat_glUniform4uiv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// Uniform3uiv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform3uiv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3uiv(location glbase.Uniform, value []uint32) { - if len(value) == 0 { - return - } - if len(value)%3 != 0 { - panic("invalid value length for Uniform3uiv") - } - count := len(value) / 3 - C.gl4_0compat_glUniform3uiv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// Uniform2uiv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform2uiv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2uiv(location glbase.Uniform, value []uint32) { - if len(value) == 0 { - return - } - if len(value)%2 != 0 { - panic("invalid value length for Uniform2uiv") - } - count := len(value) / 2 - C.gl4_0compat_glUniform2uiv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// Uniform1uiv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform1uiv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1uiv(location glbase.Uniform, value []uint32) { - if len(value) == 0 { - return - } - count := len(value) - C.gl4_0compat_glUniform1uiv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// Uniform4ui modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform4ui operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4ui(location glbase.Uniform, v0, v1, v2, v3 uint32) { - C.gl4_0compat_glUniform4ui(gl.funcs, C.GLint(location), C.GLuint(v0), C.GLuint(v1), C.GLuint(v2), C.GLuint(v3)) -} - -// Uniform3ui modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform3ui operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3ui(location glbase.Uniform, v0, v1, v2 uint32) { - C.gl4_0compat_glUniform3ui(gl.funcs, C.GLint(location), C.GLuint(v0), C.GLuint(v1), C.GLuint(v2)) -} - -// Uniform2ui modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform2ui operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2ui(location glbase.Uniform, v0, v1 uint32) { - C.gl4_0compat_glUniform2ui(gl.funcs, C.GLint(location), C.GLuint(v0), C.GLuint(v1)) -} - -// Uniform1ui modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform1ui operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1ui(location glbase.Uniform, v0 uint32) { - C.gl4_0compat_glUniform1ui(gl.funcs, C.GLint(location), C.GLuint(v0)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetFragDataLocation.xml -func (gl *GL) GetFragDataLocation(program glbase.Program, name []byte) int32 { - glresult := C.gl4_0compat_glGetFragDataLocation(gl.funcs, C.GLuint(program), (*C.GLchar)(unsafe.Pointer(&name[0]))) - return int32(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindFragDataLocation.xml -func (gl *GL) BindFragDataLocation(program glbase.Program, color uint32, name []byte) { - C.gl4_0compat_glBindFragDataLocation(gl.funcs, C.GLuint(program), C.GLuint(color), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetUniformuiv.xml -func (gl *GL) GetUniformuiv(program glbase.Program, location glbase.Uniform, params []uint32) { - C.gl4_0compat_glGetUniformuiv(gl.funcs, C.GLuint(program), C.GLint(location), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetVertexAttribIuiv.xml -func (gl *GL) GetVertexAttribIuiv(index glbase.Attrib, pname glbase.Enum, params []uint32) { - C.gl4_0compat_glGetVertexAttribIuiv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetVertexAttribIiv.xml -func (gl *GL) GetVertexAttribIiv(index glbase.Attrib, pname glbase.Enum, params []int32) { - C.gl4_0compat_glGetVertexAttribIiv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribIPointer.xml -func (gl *GL) VertexAttribIPointer(index glbase.Attrib, size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl4_0compat_glVertexAttribIPointer(gl.funcs, C.GLuint(index), C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEndConditionalRender.xml -func (gl *GL) EndConditionalRender() { - C.gl4_0compat_glEndConditionalRender(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBeginConditionalRender.xml -func (gl *GL) BeginConditionalRender(id uint32, mode glbase.Enum) { - C.gl4_0compat_glBeginConditionalRender(gl.funcs, C.GLuint(id), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClampColor.xml -func (gl *GL) ClampColor(target, clamp glbase.Enum) { - C.gl4_0compat_glClampColor(gl.funcs, C.GLenum(target), C.GLenum(clamp)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTransformFeedbackVarying.xml -func (gl *GL) GetTransformFeedbackVarying(program glbase.Program, index uint32, bufSize int32, length []int32, size []int, gltype []glbase.Enum, name []byte) { - C.gl4_0compat_glGetTransformFeedbackVarying(gl.funcs, C.GLuint(program), C.GLuint(index), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLsizei)(unsafe.Pointer(&size[0])), (*C.GLenum)(unsafe.Pointer(&gltype[0])), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindBufferBase.xml -func (gl *GL) BindBufferBase(target glbase.Enum, index uint32, buffer glbase.Buffer) { - C.gl4_0compat_glBindBufferBase(gl.funcs, C.GLenum(target), C.GLuint(index), C.GLuint(buffer)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindBufferRange.xml -func (gl *GL) BindBufferRange(target glbase.Enum, index uint32, buffer glbase.Buffer, offset, size int) { - C.gl4_0compat_glBindBufferRange(gl.funcs, C.GLenum(target), C.GLuint(index), C.GLuint(buffer), C.GLintptr(offset), C.GLsizeiptr(size)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEndTransformFeedback.xml -func (gl *GL) EndTransformFeedback() { - C.gl4_0compat_glEndTransformFeedback(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBeginTransformFeedback.xml -func (gl *GL) BeginTransformFeedback(primitiveMode glbase.Enum) { - C.gl4_0compat_glBeginTransformFeedback(gl.funcs, C.GLenum(primitiveMode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsEnabledi.xml -func (gl *GL) IsEnabledi(target glbase.Enum, index uint32) bool { - glresult := C.gl4_0compat_glIsEnabledi(gl.funcs, C.GLenum(target), C.GLuint(index)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDisablei.xml -func (gl *GL) Disablei(target glbase.Enum, index uint32) { - C.gl4_0compat_glDisablei(gl.funcs, C.GLenum(target), C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEnablei.xml -func (gl *GL) Enablei(target glbase.Enum, index uint32) { - C.gl4_0compat_glEnablei(gl.funcs, C.GLenum(target), C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetIntegeri_v.xml -func (gl *GL) GetIntegeri_v(target glbase.Enum, index uint32, data []int32) { - C.gl4_0compat_glGetIntegeri_v(gl.funcs, C.GLenum(target), C.GLuint(index), (*C.GLint)(unsafe.Pointer(&data[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetBooleani_v.xml -func (gl *GL) GetBooleani_v(target glbase.Enum, index uint32, data []bool) { - C.gl4_0compat_glGetBooleani_v(gl.funcs, C.GLenum(target), C.GLuint(index), (*C.GLboolean)(unsafe.Pointer(&data[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorMaski.xml -func (gl *GL) ColorMaski(index uint32, r, g, b, a bool) { - C.gl4_0compat_glColorMaski(gl.funcs, C.GLuint(index), *(*C.GLboolean)(unsafe.Pointer(&r)), *(*C.GLboolean)(unsafe.Pointer(&g)), *(*C.GLboolean)(unsafe.Pointer(&b)), *(*C.GLboolean)(unsafe.Pointer(&a))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyBufferSubData.xml -func (gl *GL) CopyBufferSubData(readTarget, writeTarget glbase.Enum, readOffset, writeOffset, size int) { - C.gl4_0compat_glCopyBufferSubData(gl.funcs, C.GLenum(readTarget), C.GLenum(writeTarget), C.GLintptr(readOffset), C.GLintptr(writeOffset), C.GLsizeiptr(size)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformBlockBinding.xml -func (gl *GL) UniformBlockBinding(program glbase.Program, v0, v1 uint32) { - C.gl4_0compat_glUniformBlockBinding(gl.funcs, C.GLuint(program), C.GLuint(v0), C.GLuint(v1)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveUniformBlockName.xml -func (gl *GL) GetActiveUniformBlockName(program glbase.Program, uniformBlockIndex uint32, bufSize int32, length []int32, uniformBlockName []byte) { - C.gl4_0compat_glGetActiveUniformBlockName(gl.funcs, C.GLuint(program), C.GLuint(uniformBlockIndex), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLchar)(unsafe.Pointer(&uniformBlockName[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveUniformBlockiv.xml -func (gl *GL) GetActiveUniformBlockiv(program glbase.Program, uniformBlockIndex uint32, pname glbase.Enum, params []int32) { - C.gl4_0compat_glGetActiveUniformBlockiv(gl.funcs, C.GLuint(program), C.GLuint(uniformBlockIndex), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetUniformBlockIndex.xml -func (gl *GL) GetUniformBlockIndex(program glbase.Program, uniformBlockName []byte) uint32 { - glresult := C.gl4_0compat_glGetUniformBlockIndex(gl.funcs, C.GLuint(program), (*C.GLchar)(unsafe.Pointer(&uniformBlockName[0]))) - return uint32(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveUniformName.xml -func (gl *GL) GetActiveUniformName(program glbase.Program, uniformIndex uint32, bufSize int32, length []int32, uniformName []byte) { - C.gl4_0compat_glGetActiveUniformName(gl.funcs, C.GLuint(program), C.GLuint(uniformIndex), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLchar)(unsafe.Pointer(&uniformName[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveUniformsiv.xml -func (gl *GL) GetActiveUniformsiv(program glbase.Program, uniformCount int32, uniformIndices []uint32, pname glbase.Enum, params []int32) { - C.gl4_0compat_glGetActiveUniformsiv(gl.funcs, C.GLuint(program), C.GLsizei(uniformCount), (*C.GLuint)(unsafe.Pointer(&uniformIndices[0])), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPrimitiveRestartIndex.xml -func (gl *GL) PrimitiveRestartIndex(index uint32) { - C.gl4_0compat_glPrimitiveRestartIndex(gl.funcs, C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexBuffer.xml -func (gl *GL) TexBuffer(target, internalFormat glbase.Enum, buffer glbase.Buffer) { - C.gl4_0compat_glTexBuffer(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLuint(buffer)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawElementsInstanced.xml -func (gl *GL) DrawElementsInstanced(mode glbase.Enum, count int, gltype glbase.Enum, indices interface{}, instancecount int32) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl4_0compat_glDrawElementsInstanced(gl.funcs, C.GLenum(mode), C.GLsizei(count), C.GLenum(gltype), indices_ptr, C.GLsizei(instancecount)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawArraysInstanced.xml -func (gl *GL) DrawArraysInstanced(mode glbase.Enum, first, count int, instancecount int32) { - C.gl4_0compat_glDrawArraysInstanced(gl.funcs, C.GLenum(mode), C.GLint(first), C.GLsizei(count), C.GLsizei(instancecount)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSampleMaski.xml -func (gl *GL) SampleMaski(index uint32, mask glbase.Bitfield) { - C.gl4_0compat_glSampleMaski(gl.funcs, C.GLuint(index), C.GLbitfield(mask)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetMultisamplefv.xml -func (gl *GL) GetMultisamplefv(pname glbase.Enum, index uint32, val []float32) { - C.gl4_0compat_glGetMultisamplefv(gl.funcs, C.GLenum(pname), C.GLuint(index), (*C.GLfloat)(unsafe.Pointer(&val[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexImage3DMultisample.xml -func (gl *GL) TexImage3DMultisample(target glbase.Enum, samples, internalFormat int32, width, height int, depth int32, fixedsamplelocations bool) { - C.gl4_0compat_glTexImage3DMultisample(gl.funcs, C.GLenum(target), C.GLsizei(samples), C.GLint(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), *(*C.GLboolean)(unsafe.Pointer(&fixedsamplelocations))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexImage2DMultisample.xml -func (gl *GL) TexImage2DMultisample(target glbase.Enum, samples, internalFormat int32, width, height int, fixedsamplelocations bool) { - C.gl4_0compat_glTexImage2DMultisample(gl.funcs, C.GLenum(target), C.GLsizei(samples), C.GLint(internalFormat), C.GLsizei(width), C.GLsizei(height), *(*C.GLboolean)(unsafe.Pointer(&fixedsamplelocations))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetSynciv.xml -func (gl *GL) GetSynciv(sync glbase.Sync, pname glbase.Enum, bufSize int32, length, values []int32) { - C.gl4_0compat_glGetSynciv(gl.funcs, C.GLsync(unsafe.Pointer(sync)), C.GLenum(pname), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLint)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetInteger64v.xml -func (gl *GL) GetInteger64v(pname glbase.Enum, params []int64) { - C.gl4_0compat_glGetInteger64v(gl.funcs, C.GLenum(pname), (*C.GLint64)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWaitSync.xml -func (gl *GL) WaitSync(sync glbase.Sync, flags glbase.Bitfield, timeout uint64) { - C.gl4_0compat_glWaitSync(gl.funcs, C.GLsync(unsafe.Pointer(sync)), C.GLbitfield(flags), C.GLuint64(timeout)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClientWaitSync.xml -func (gl *GL) ClientWaitSync(sync glbase.Sync, flags glbase.Bitfield, timeout uint64) glbase.Enum { - glresult := C.gl4_0compat_glClientWaitSync(gl.funcs, C.GLsync(unsafe.Pointer(sync)), C.GLbitfield(flags), C.GLuint64(timeout)) - return glbase.Enum(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDeleteSync.xml -func (gl *GL) DeleteSync(sync glbase.Sync) { - C.gl4_0compat_glDeleteSync(gl.funcs, C.GLsync(unsafe.Pointer(sync))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsSync.xml -func (gl *GL) IsSync(sync glbase.Sync) bool { - glresult := C.gl4_0compat_glIsSync(gl.funcs, C.GLsync(unsafe.Pointer(sync))) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFenceSync.xml -func (gl *GL) FenceSync(condition glbase.Enum, flags glbase.Bitfield) glbase.Sync { - glresult := C.gl4_0compat_glFenceSync(gl.funcs, C.GLenum(condition), C.GLbitfield(flags)) - return glbase.Sync(unsafe.Pointer(glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProvokingVertex.xml -func (gl *GL) ProvokingVertex(mode glbase.Enum) { - C.gl4_0compat_glProvokingVertex(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawElementsInstancedBaseVertex.xml -func (gl *GL) DrawElementsInstancedBaseVertex(mode glbase.Enum, count int, gltype glbase.Enum, indices interface{}, instancecount, basevertex int32) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl4_0compat_glDrawElementsInstancedBaseVertex(gl.funcs, C.GLenum(mode), C.GLsizei(count), C.GLenum(gltype), indices_ptr, C.GLsizei(instancecount), C.GLint(basevertex)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawRangeElementsBaseVertex.xml -func (gl *GL) DrawRangeElementsBaseVertex(mode glbase.Enum, start, end uint32, count int, gltype glbase.Enum, indices interface{}, basevertex int32) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl4_0compat_glDrawRangeElementsBaseVertex(gl.funcs, C.GLenum(mode), C.GLuint(start), C.GLuint(end), C.GLsizei(count), C.GLenum(gltype), indices_ptr, C.GLint(basevertex)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawElementsBaseVertex.xml -func (gl *GL) DrawElementsBaseVertex(mode glbase.Enum, count int, gltype glbase.Enum, indices interface{}, basevertex int32) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl4_0compat_glDrawElementsBaseVertex(gl.funcs, C.GLenum(mode), C.GLsizei(count), C.GLenum(gltype), indices_ptr, C.GLint(basevertex)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFramebufferTexture.xml -func (gl *GL) FramebufferTexture(target, attachment glbase.Enum, texture glbase.Texture, level int) { - C.gl4_0compat_glFramebufferTexture(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLuint(texture), C.GLint(level)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetBufferParameteri64v.xml -func (gl *GL) GetBufferParameteri64v(target, pname glbase.Enum, params []int64) { - C.gl4_0compat_glGetBufferParameteri64v(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint64)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetInteger64i_v.xml -func (gl *GL) GetInteger64i_v(target glbase.Enum, index uint32, data []int64) { - C.gl4_0compat_glGetInteger64i_v(gl.funcs, C.GLenum(target), C.GLuint(index), (*C.GLint64)(unsafe.Pointer(&data[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribP4uiv.xml -func (gl *GL) VertexAttribP4uiv(index glbase.Attrib, gltype glbase.Enum, normalized bool, value []uint32) { - C.gl4_0compat_glVertexAttribP4uiv(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribP4ui.xml -func (gl *GL) VertexAttribP4ui(index glbase.Attrib, gltype glbase.Enum, normalized bool, value uint32) { - C.gl4_0compat_glVertexAttribP4ui(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribP3uiv.xml -func (gl *GL) VertexAttribP3uiv(index glbase.Attrib, gltype glbase.Enum, normalized bool, value []uint32) { - C.gl4_0compat_glVertexAttribP3uiv(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribP3ui.xml -func (gl *GL) VertexAttribP3ui(index glbase.Attrib, gltype glbase.Enum, normalized bool, value uint32) { - C.gl4_0compat_glVertexAttribP3ui(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribP2uiv.xml -func (gl *GL) VertexAttribP2uiv(index glbase.Attrib, gltype glbase.Enum, normalized bool, value []uint32) { - C.gl4_0compat_glVertexAttribP2uiv(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribP2ui.xml -func (gl *GL) VertexAttribP2ui(index glbase.Attrib, gltype glbase.Enum, normalized bool, value uint32) { - C.gl4_0compat_glVertexAttribP2ui(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribP1uiv.xml -func (gl *GL) VertexAttribP1uiv(index glbase.Attrib, gltype glbase.Enum, normalized bool, value []uint32) { - C.gl4_0compat_glVertexAttribP1uiv(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribP1ui.xml -func (gl *GL) VertexAttribP1ui(index glbase.Attrib, gltype glbase.Enum, normalized bool, value uint32) { - C.gl4_0compat_glVertexAttribP1ui(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColorP3uiv.xml -func (gl *GL) SecondaryColorP3uiv(gltype glbase.Enum, color []uint32) { - C.gl4_0compat_glSecondaryColorP3uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&color[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColorP3ui.xml -func (gl *GL) SecondaryColorP3ui(gltype glbase.Enum, color uint32) { - C.gl4_0compat_glSecondaryColorP3ui(gl.funcs, C.GLenum(gltype), C.GLuint(color)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorP4uiv.xml -func (gl *GL) ColorP4uiv(gltype glbase.Enum, color []uint32) { - C.gl4_0compat_glColorP4uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&color[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorP4ui.xml -func (gl *GL) ColorP4ui(gltype glbase.Enum, color uint32) { - C.gl4_0compat_glColorP4ui(gl.funcs, C.GLenum(gltype), C.GLuint(color)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorP3uiv.xml -func (gl *GL) ColorP3uiv(gltype glbase.Enum, color []uint32) { - C.gl4_0compat_glColorP3uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&color[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorP3ui.xml -func (gl *GL) ColorP3ui(gltype glbase.Enum, color uint32) { - C.gl4_0compat_glColorP3ui(gl.funcs, C.GLenum(gltype), C.GLuint(color)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glNormalP3uiv.xml -func (gl *GL) NormalP3uiv(gltype glbase.Enum, coords []uint32) { - C.gl4_0compat_glNormalP3uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glNormalP3ui.xml -func (gl *GL) NormalP3ui(gltype glbase.Enum, coords uint32) { - C.gl4_0compat_glNormalP3ui(gl.funcs, C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoordP4uiv.xml -func (gl *GL) MultiTexCoordP4uiv(texture, gltype glbase.Enum, coords []uint32) { - C.gl4_0compat_glMultiTexCoordP4uiv(gl.funcs, C.GLenum(texture), C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoordP4ui.xml -func (gl *GL) MultiTexCoordP4ui(texture, gltype glbase.Enum, coords uint32) { - C.gl4_0compat_glMultiTexCoordP4ui(gl.funcs, C.GLenum(texture), C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoordP3uiv.xml -func (gl *GL) MultiTexCoordP3uiv(texture, gltype glbase.Enum, coords []uint32) { - C.gl4_0compat_glMultiTexCoordP3uiv(gl.funcs, C.GLenum(texture), C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoordP3ui.xml -func (gl *GL) MultiTexCoordP3ui(texture, gltype glbase.Enum, coords uint32) { - C.gl4_0compat_glMultiTexCoordP3ui(gl.funcs, C.GLenum(texture), C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoordP2uiv.xml -func (gl *GL) MultiTexCoordP2uiv(texture, gltype glbase.Enum, coords []uint32) { - C.gl4_0compat_glMultiTexCoordP2uiv(gl.funcs, C.GLenum(texture), C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoordP2ui.xml -func (gl *GL) MultiTexCoordP2ui(texture, gltype glbase.Enum, coords uint32) { - C.gl4_0compat_glMultiTexCoordP2ui(gl.funcs, C.GLenum(texture), C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoordP1uiv.xml -func (gl *GL) MultiTexCoordP1uiv(texture, gltype glbase.Enum, coords []uint32) { - C.gl4_0compat_glMultiTexCoordP1uiv(gl.funcs, C.GLenum(texture), C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoordP1ui.xml -func (gl *GL) MultiTexCoordP1ui(texture, gltype glbase.Enum, coords uint32) { - C.gl4_0compat_glMultiTexCoordP1ui(gl.funcs, C.GLenum(texture), C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordP4uiv.xml -func (gl *GL) TexCoordP4uiv(gltype glbase.Enum, coords []uint32) { - C.gl4_0compat_glTexCoordP4uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordP4ui.xml -func (gl *GL) TexCoordP4ui(gltype glbase.Enum, coords uint32) { - C.gl4_0compat_glTexCoordP4ui(gl.funcs, C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordP3uiv.xml -func (gl *GL) TexCoordP3uiv(gltype glbase.Enum, coords []uint32) { - C.gl4_0compat_glTexCoordP3uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordP3ui.xml -func (gl *GL) TexCoordP3ui(gltype glbase.Enum, coords uint32) { - C.gl4_0compat_glTexCoordP3ui(gl.funcs, C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordP2uiv.xml -func (gl *GL) TexCoordP2uiv(gltype glbase.Enum, coords []uint32) { - C.gl4_0compat_glTexCoordP2uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordP2ui.xml -func (gl *GL) TexCoordP2ui(gltype glbase.Enum, coords uint32) { - C.gl4_0compat_glTexCoordP2ui(gl.funcs, C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordP1uiv.xml -func (gl *GL) TexCoordP1uiv(gltype glbase.Enum, coords []uint32) { - C.gl4_0compat_glTexCoordP1uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordP1ui.xml -func (gl *GL) TexCoordP1ui(gltype glbase.Enum, coords uint32) { - C.gl4_0compat_glTexCoordP1ui(gl.funcs, C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexP4uiv.xml -func (gl *GL) VertexP4uiv(gltype glbase.Enum, value []uint32) { - C.gl4_0compat_glVertexP4uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexP4ui.xml -func (gl *GL) VertexP4ui(gltype glbase.Enum, value uint32) { - C.gl4_0compat_glVertexP4ui(gl.funcs, C.GLenum(gltype), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexP3uiv.xml -func (gl *GL) VertexP3uiv(gltype glbase.Enum, value []uint32) { - C.gl4_0compat_glVertexP3uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexP3ui.xml -func (gl *GL) VertexP3ui(gltype glbase.Enum, value uint32) { - C.gl4_0compat_glVertexP3ui(gl.funcs, C.GLenum(gltype), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexP2uiv.xml -func (gl *GL) VertexP2uiv(gltype glbase.Enum, value []uint32) { - C.gl4_0compat_glVertexP2uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexP2ui.xml -func (gl *GL) VertexP2ui(gltype glbase.Enum, value uint32) { - C.gl4_0compat_glVertexP2ui(gl.funcs, C.GLenum(gltype), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetQueryObjectui64v.xml -func (gl *GL) GetQueryObjectui64v(id uint32, pname glbase.Enum, params []uint64) { - C.gl4_0compat_glGetQueryObjectui64v(gl.funcs, C.GLuint(id), C.GLenum(pname), (*C.GLuint64)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetQueryObjecti64v.xml -func (gl *GL) GetQueryObjecti64v(id uint32, pname glbase.Enum, params []int64) { - C.gl4_0compat_glGetQueryObjecti64v(gl.funcs, C.GLuint(id), C.GLenum(pname), (*C.GLint64)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glQueryCounter.xml -func (gl *GL) QueryCounter(id uint32, target glbase.Enum) { - C.gl4_0compat_glQueryCounter(gl.funcs, C.GLuint(id), C.GLenum(target)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetSamplerParameterIuiv.xml -func (gl *GL) GetSamplerParameterIuiv(sampler uint32, pname glbase.Enum, params []uint32) { - C.gl4_0compat_glGetSamplerParameterIuiv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetSamplerParameterfv.xml -func (gl *GL) GetSamplerParameterfv(sampler uint32, pname glbase.Enum, params []float32) { - C.gl4_0compat_glGetSamplerParameterfv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetSamplerParameterIiv.xml -func (gl *GL) GetSamplerParameterIiv(sampler uint32, pname glbase.Enum, params []int32) { - C.gl4_0compat_glGetSamplerParameterIiv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetSamplerParameteriv.xml -func (gl *GL) GetSamplerParameteriv(sampler uint32, pname glbase.Enum, params []int32) { - C.gl4_0compat_glGetSamplerParameteriv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSamplerParameterIuiv.xml -func (gl *GL) SamplerParameterIuiv(sampler uint32, pname glbase.Enum, param []uint32) { - C.gl4_0compat_glSamplerParameterIuiv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶m[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSamplerParameterIiv.xml -func (gl *GL) SamplerParameterIiv(sampler uint32, pname glbase.Enum, param []int32) { - C.gl4_0compat_glSamplerParameterIiv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶m[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSamplerParameterfv.xml -func (gl *GL) SamplerParameterfv(sampler uint32, pname glbase.Enum, param []float32) { - C.gl4_0compat_glSamplerParameterfv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶m[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSamplerParameterf.xml -func (gl *GL) SamplerParameterf(sampler uint32, pname glbase.Enum, param float32) { - C.gl4_0compat_glSamplerParameterf(gl.funcs, C.GLuint(sampler), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSamplerParameteriv.xml -func (gl *GL) SamplerParameteriv(sampler uint32, pname glbase.Enum, param []int32) { - C.gl4_0compat_glSamplerParameteriv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶m[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSamplerParameteri.xml -func (gl *GL) SamplerParameteri(sampler uint32, pname glbase.Enum, param int32) { - C.gl4_0compat_glSamplerParameteri(gl.funcs, C.GLuint(sampler), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindSampler.xml -func (gl *GL) BindSampler(unit, sampler uint32) { - C.gl4_0compat_glBindSampler(gl.funcs, C.GLuint(unit), C.GLuint(sampler)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsSampler.xml -func (gl *GL) IsSampler(sampler uint32) bool { - glresult := C.gl4_0compat_glIsSampler(gl.funcs, C.GLuint(sampler)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDeleteSamplers.xml -func (gl *GL) DeleteSamplers(count int, samplers []uint32) { - C.gl4_0compat_glDeleteSamplers(gl.funcs, C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&samplers[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGenSamplers.xml -func (gl *GL) GenSamplers(count int, samplers []uint32) { - C.gl4_0compat_glGenSamplers(gl.funcs, C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&samplers[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetFragDataIndex.xml -func (gl *GL) GetFragDataIndex(program glbase.Program, name []byte) int32 { - glresult := C.gl4_0compat_glGetFragDataIndex(gl.funcs, C.GLuint(program), (*C.GLchar)(unsafe.Pointer(&name[0]))) - return int32(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindFragDataLocationIndexed.xml -func (gl *GL) BindFragDataLocationIndexed(program glbase.Program, colorNumber, index uint32, name []byte) { - C.gl4_0compat_glBindFragDataLocationIndexed(gl.funcs, C.GLuint(program), C.GLuint(colorNumber), C.GLuint(index), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribDivisor.xml -func (gl *GL) VertexAttribDivisor(index glbase.Attrib, divisor uint32) { - C.gl4_0compat_glVertexAttribDivisor(gl.funcs, C.GLuint(index), C.GLuint(divisor)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetQueryIndexediv.xml -func (gl *GL) GetQueryIndexediv(target glbase.Enum, index uint32, pname glbase.Enum, params []int32) { - C.gl4_0compat_glGetQueryIndexediv(gl.funcs, C.GLenum(target), C.GLuint(index), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEndQueryIndexed.xml -func (gl *GL) EndQueryIndexed(target glbase.Enum, index uint32) { - C.gl4_0compat_glEndQueryIndexed(gl.funcs, C.GLenum(target), C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBeginQueryIndexed.xml -func (gl *GL) BeginQueryIndexed(target glbase.Enum, index, id uint32) { - C.gl4_0compat_glBeginQueryIndexed(gl.funcs, C.GLenum(target), C.GLuint(index), C.GLuint(id)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawTransformFeedbackStream.xml -func (gl *GL) DrawTransformFeedbackStream(mode glbase.Enum, id, stream uint32) { - C.gl4_0compat_glDrawTransformFeedbackStream(gl.funcs, C.GLenum(mode), C.GLuint(id), C.GLuint(stream)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawTransformFeedback.xml -func (gl *GL) DrawTransformFeedback(mode glbase.Enum, id uint32) { - C.gl4_0compat_glDrawTransformFeedback(gl.funcs, C.GLenum(mode), C.GLuint(id)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glResumeTransformFeedback.xml -func (gl *GL) ResumeTransformFeedback() { - C.gl4_0compat_glResumeTransformFeedback(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPauseTransformFeedback.xml -func (gl *GL) PauseTransformFeedback() { - C.gl4_0compat_glPauseTransformFeedback(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsTransformFeedback.xml -func (gl *GL) IsTransformFeedback(id uint32) bool { - glresult := C.gl4_0compat_glIsTransformFeedback(gl.funcs, C.GLuint(id)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGenTransformFeedbacks.xml -func (gl *GL) GenTransformFeedbacks(n int, ids []uint32) { - C.gl4_0compat_glGenTransformFeedbacks(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&ids[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDeleteTransformFeedbacks.xml -func (gl *GL) DeleteTransformFeedbacks(n int, ids []uint32) { - C.gl4_0compat_glDeleteTransformFeedbacks(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&ids[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindTransformFeedback.xml -func (gl *GL) BindTransformFeedback(target glbase.Enum, id uint32) { - C.gl4_0compat_glBindTransformFeedback(gl.funcs, C.GLenum(target), C.GLuint(id)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPatchParameterfv.xml -func (gl *GL) PatchParameterfv(pname glbase.Enum, values []float32) { - C.gl4_0compat_glPatchParameterfv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPatchParameteri.xml -func (gl *GL) PatchParameteri(pname glbase.Enum, value int32) { - C.gl4_0compat_glPatchParameteri(gl.funcs, C.GLenum(pname), C.GLint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetProgramStageiv.xml -func (gl *GL) GetProgramStageiv(program glbase.Program, shadertype, pname glbase.Enum, values []int32) { - C.gl4_0compat_glGetProgramStageiv(gl.funcs, C.GLuint(program), C.GLenum(shadertype), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetUniformSubroutineuiv.xml -func (gl *GL) GetUniformSubroutineuiv(shadertype glbase.Enum, location glbase.Uniform, params []uint32) { - C.gl4_0compat_glGetUniformSubroutineuiv(gl.funcs, C.GLenum(shadertype), C.GLint(location), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformSubroutinesuiv.xml -func (gl *GL) UniformSubroutinesuiv(shadertype glbase.Enum, count int, value []uint32) { - C.gl4_0compat_glUniformSubroutinesuiv(gl.funcs, C.GLenum(shadertype), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveSubroutineName.xml -func (gl *GL) GetActiveSubroutineName(program glbase.Program, shadertype glbase.Enum, index uint32, bufSize int32, length []int32, name []byte) { - C.gl4_0compat_glGetActiveSubroutineName(gl.funcs, C.GLuint(program), C.GLenum(shadertype), C.GLuint(index), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveSubroutineUniformName.xml -func (gl *GL) GetActiveSubroutineUniformName(program glbase.Program, shadertype glbase.Enum, index uint32, bufSize int32, length []int32, name []byte) { - C.gl4_0compat_glGetActiveSubroutineUniformName(gl.funcs, C.GLuint(program), C.GLenum(shadertype), C.GLuint(index), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveSubroutineUniformiv.xml -func (gl *GL) GetActiveSubroutineUniformiv(program glbase.Program, shadertype glbase.Enum, index uint32, pname glbase.Enum, values []int32) { - C.gl4_0compat_glGetActiveSubroutineUniformiv(gl.funcs, C.GLuint(program), C.GLenum(shadertype), C.GLuint(index), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetSubroutineIndex.xml -func (gl *GL) GetSubroutineIndex(program glbase.Program, shadertype glbase.Enum, name []byte) uint32 { - glresult := C.gl4_0compat_glGetSubroutineIndex(gl.funcs, C.GLuint(program), C.GLenum(shadertype), (*C.GLchar)(unsafe.Pointer(&name[0]))) - return uint32(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetSubroutineUniformLocation.xml -func (gl *GL) GetSubroutineUniformLocation(program glbase.Program, shadertype glbase.Enum, name []byte) int32 { - glresult := C.gl4_0compat_glGetSubroutineUniformLocation(gl.funcs, C.GLuint(program), C.GLenum(shadertype), (*C.GLchar)(unsafe.Pointer(&name[0]))) - return int32(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetUniformdv.xml -func (gl *GL) GetUniformdv(program glbase.Program, location glbase.Uniform, params []float64) { - C.gl4_0compat_glGetUniformdv(gl.funcs, C.GLuint(program), C.GLint(location), (*C.GLdouble)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix4x3dv.xml -func (gl *GL) UniformMatrix4x3dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_0compat_glUniformMatrix4x3dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix4x2dv.xml -func (gl *GL) UniformMatrix4x2dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_0compat_glUniformMatrix4x2dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix3x4dv.xml -func (gl *GL) UniformMatrix3x4dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_0compat_glUniformMatrix3x4dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix3x2dv.xml -func (gl *GL) UniformMatrix3x2dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_0compat_glUniformMatrix3x2dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix2x4dv.xml -func (gl *GL) UniformMatrix2x4dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_0compat_glUniformMatrix2x4dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix2x3dv.xml -func (gl *GL) UniformMatrix2x3dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_0compat_glUniformMatrix2x3dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix4dv.xml -func (gl *GL) UniformMatrix4dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_0compat_glUniformMatrix4dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix3dv.xml -func (gl *GL) UniformMatrix3dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_0compat_glUniformMatrix3dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix2dv.xml -func (gl *GL) UniformMatrix2dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_0compat_glUniformMatrix2dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniform4dv.xml -func (gl *GL) Uniform4dv(location glbase.Uniform, count int, value []float64) { - C.gl4_0compat_glUniform4dv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniform3dv.xml -func (gl *GL) Uniform3dv(location glbase.Uniform, count int, value []float64) { - C.gl4_0compat_glUniform3dv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniform2dv.xml -func (gl *GL) Uniform2dv(location glbase.Uniform, count int, value []float64) { - C.gl4_0compat_glUniform2dv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniform1dv.xml -func (gl *GL) Uniform1dv(location glbase.Uniform, count int, value []float64) { - C.gl4_0compat_glUniform1dv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniform4d.xml -func (gl *GL) Uniform4d(location glbase.Uniform, v0, v1, v2, v3 float64) { - C.gl4_0compat_glUniform4d(gl.funcs, C.GLint(location), C.GLdouble(v0), C.GLdouble(v1), C.GLdouble(v2), C.GLdouble(v3)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniform3d.xml -func (gl *GL) Uniform3d(location glbase.Uniform, v0, v1, v2 float64) { - C.gl4_0compat_glUniform3d(gl.funcs, C.GLint(location), C.GLdouble(v0), C.GLdouble(v1), C.GLdouble(v2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniform2d.xml -func (gl *GL) Uniform2d(location glbase.Uniform, v0, v1 float64) { - C.gl4_0compat_glUniform2d(gl.funcs, C.GLint(location), C.GLdouble(v0), C.GLdouble(v1)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniform1d.xml -func (gl *GL) Uniform1d(location glbase.Uniform, v0 float64) { - C.gl4_0compat_glUniform1d(gl.funcs, C.GLint(location), C.GLdouble(v0)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawElementsIndirect.xml -func (gl *GL) DrawElementsIndirect(mode, gltype glbase.Enum, indirect interface{}) { - var indirect_ptr unsafe.Pointer - var indirect_v = reflect.ValueOf(indirect) - if indirect != nil && indirect_v.Kind() != reflect.Slice { - panic("parameter indirect must be a slice") - } - if indirect != nil { - indirect_ptr = unsafe.Pointer(indirect_v.Index(0).Addr().Pointer()) - } - C.gl4_0compat_glDrawElementsIndirect(gl.funcs, C.GLenum(mode), C.GLenum(gltype), indirect_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawArraysIndirect.xml -func (gl *GL) DrawArraysIndirect(mode glbase.Enum, indirect interface{}) { - var indirect_ptr unsafe.Pointer - var indirect_v = reflect.ValueOf(indirect) - if indirect != nil && indirect_v.Kind() != reflect.Slice { - panic("parameter indirect must be a slice") - } - if indirect != nil { - indirect_ptr = unsafe.Pointer(indirect_v.Index(0).Addr().Pointer()) - } - C.gl4_0compat_glDrawArraysIndirect(gl.funcs, C.GLenum(mode), indirect_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendFuncSeparatei.xml -func (gl *GL) BlendFuncSeparatei(buf uint32, srcRGB, dstRGB, srcAlpha, dstAlpha glbase.Enum) { - C.gl4_0compat_glBlendFuncSeparatei(gl.funcs, C.GLuint(buf), C.GLenum(srcRGB), C.GLenum(dstRGB), C.GLenum(srcAlpha), C.GLenum(dstAlpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendFunci.xml -func (gl *GL) BlendFunci(buf uint32, src, dst glbase.Enum) { - C.gl4_0compat_glBlendFunci(gl.funcs, C.GLuint(buf), C.GLenum(src), C.GLenum(dst)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendEquationSeparatei.xml -func (gl *GL) BlendEquationSeparatei(buf uint32, modeRGB, modeAlpha glbase.Enum) { - C.gl4_0compat_glBlendEquationSeparatei(gl.funcs, C.GLuint(buf), C.GLenum(modeRGB), C.GLenum(modeAlpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendEquationi.xml -func (gl *GL) BlendEquationi(buf uint32, mode glbase.Enum) { - C.gl4_0compat_glBlendEquationi(gl.funcs, C.GLuint(buf), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMinSampleShading.xml -func (gl *GL) MinSampleShading(value float32) { - C.gl4_0compat_glMinSampleShading(gl.funcs, C.GLfloat(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTranslatef.xml -func (gl *GL) Translatef(x, y, z float32) { - C.gl4_0compat_glTranslatef(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTranslated.xml -func (gl *GL) Translated(x, y, z float64) { - C.gl4_0compat_glTranslated(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glScalef.xml -func (gl *GL) Scalef(x, y, z float32) { - C.gl4_0compat_glScalef(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glScaled.xml -func (gl *GL) Scaled(x, y, z float64) { - C.gl4_0compat_glScaled(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRotatef.xml -func (gl *GL) Rotatef(angle, x, y, z float32) { - C.gl4_0compat_glRotatef(gl.funcs, C.GLfloat(angle), C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRotated.xml -func (gl *GL) Rotated(angle, x, y, z float64) { - C.gl4_0compat_glRotated(gl.funcs, C.GLdouble(angle), C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPushMatrix.xml -func (gl *GL) PushMatrix() { - C.gl4_0compat_glPushMatrix(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPopMatrix.xml -func (gl *GL) PopMatrix() { - C.gl4_0compat_glPopMatrix(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glOrtho.xml -func (gl *GL) Ortho(left, right, bottom, top, zNear, zFar float64) { - C.gl4_0compat_glOrtho(gl.funcs, C.GLdouble(left), C.GLdouble(right), C.GLdouble(bottom), C.GLdouble(top), C.GLdouble(zNear), C.GLdouble(zFar)) -} - -// MultMatrixd multiplies the current matrix with the provided matrix. -// -// The m parameter must hold 16 consecutive elements of a 4x4 column-major matrix. -// -// The current matrix is determined by the current matrix mode (see -// MatrixMode). It is either the projection matrix, modelview matrix, or the -// texture matrix. -// -// For example, if the current matrix is C and the coordinates to be transformed -// are v = (v[0], v[1], v[2], v[3]), then the current transformation is C × v, or -// -// c[0] c[4] c[8] c[12] v[0] -// c[1] c[5] c[9] c[13] v[1] -// c[2] c[6] c[10] c[14] X v[2] -// c[3] c[7] c[11] c[15] v[3] -// -// Calling MultMatrix with an argument of m = m[0], m[1], ..., m[15] -// replaces the current transformation with (C X M) x v, or -// -// c[0] c[4] c[8] c[12] m[0] m[4] m[8] m[12] v[0] -// c[1] c[5] c[9] c[13] m[1] m[5] m[9] m[13] v[1] -// c[2] c[6] c[10] c[14] X m[2] m[6] m[10] m[14] X v[2] -// c[3] c[7] c[11] c[15] m[3] m[7] m[11] m[15] v[3] -// -// Where 'X' denotes matrix multiplication, and v is represented as a 4x1 matrix. -// -// While the elements of the matrix may be specified with single or double -// precision, the GL may store or operate on these values in less-than-single -// precision. -// -// In many computer languages, 4×4 arrays are represented in row-major -// order. The transformations just described represent these matrices in -// column-major order. The order of the multiplication is important. For -// example, if the current transformation is a rotation, and MultMatrix is -// called with a translation matrix, the translation is done directly on the -// coordinates to be transformed, while the rotation is done on the results -// of that translation. -// -// GL.INVALID_OPERATION is generated if MultMatrix is executed between the -// execution of Begin and the corresponding execution of End. -func (gl *GL) MultMatrixd(m []float64) { - if len(m) != 16 { - panic("parameter m must have length 16 for the 4x4 matrix") - } - C.gl4_0compat_glMultMatrixd(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&m[0]))) -} - -// MultMatrixf multiplies the current matrix with the provided matrix. -// -// The m parameter must hold 16 consecutive elements of a 4x4 column-major matrix. -// -// The current matrix is determined by the current matrix mode (see -// MatrixMode). It is either the projection matrix, modelview matrix, or the -// texture matrix. -// -// For example, if the current matrix is C and the coordinates to be transformed -// are v = (v[0], v[1], v[2], v[3]), then the current transformation is C × v, or -// -// c[0] c[4] c[8] c[12] v[0] -// c[1] c[5] c[9] c[13] v[1] -// c[2] c[6] c[10] c[14] X v[2] -// c[3] c[7] c[11] c[15] v[3] -// -// Calling MultMatrix with an argument of m = m[0], m[1], ..., m[15] -// replaces the current transformation with (C X M) x v, or -// -// c[0] c[4] c[8] c[12] m[0] m[4] m[8] m[12] v[0] -// c[1] c[5] c[9] c[13] m[1] m[5] m[9] m[13] v[1] -// c[2] c[6] c[10] c[14] X m[2] m[6] m[10] m[14] X v[2] -// c[3] c[7] c[11] c[15] m[3] m[7] m[11] m[15] v[3] -// -// Where 'X' denotes matrix multiplication, and v is represented as a 4x1 matrix. -// -// While the elements of the matrix may be specified with single or double -// precision, the GL may store or operate on these values in less-than-single -// precision. -// -// In many computer languages, 4×4 arrays are represented in row-major -// order. The transformations just described represent these matrices in -// column-major order. The order of the multiplication is important. For -// example, if the current transformation is a rotation, and MultMatrix is -// called with a translation matrix, the translation is done directly on the -// coordinates to be transformed, while the rotation is done on the results -// of that translation. -// -// GL.INVALID_OPERATION is generated if MultMatrix is executed between the -// execution of Begin and the corresponding execution of End. -func (gl *GL) MultMatrixf(m []float32) { - if len(m) != 16 { - panic("parameter m must have length 16 for the 4x4 matrix") - } - C.gl4_0compat_glMultMatrixf(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMatrixMode.xml -func (gl *GL) MatrixMode(mode glbase.Enum) { - C.gl4_0compat_glMatrixMode(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLoadMatrixd.xml -func (gl *GL) LoadMatrixd(m []float64) { - C.gl4_0compat_glLoadMatrixd(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLoadMatrixf.xml -func (gl *GL) LoadMatrixf(m []float32) { - C.gl4_0compat_glLoadMatrixf(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLoadIdentity.xml -func (gl *GL) LoadIdentity() { - C.gl4_0compat_glLoadIdentity(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFrustum.xml -func (gl *GL) Frustum(left, right, bottom, top, zNear, zFar float64) { - C.gl4_0compat_glFrustum(gl.funcs, C.GLdouble(left), C.GLdouble(right), C.GLdouble(bottom), C.GLdouble(top), C.GLdouble(zNear), C.GLdouble(zFar)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsList.xml -func (gl *GL) IsList(list uint32) bool { - glresult := C.gl4_0compat_glIsList(gl.funcs, C.GLuint(list)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexGeniv.xml -func (gl *GL) GetTexGeniv(coord, pname glbase.Enum, params []int32) { - C.gl4_0compat_glGetTexGeniv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexGenfv.xml -func (gl *GL) GetTexGenfv(coord, pname glbase.Enum, params []float32) { - C.gl4_0compat_glGetTexGenfv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexGendv.xml -func (gl *GL) GetTexGendv(coord, pname glbase.Enum, params []float64) { - C.gl4_0compat_glGetTexGendv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexEnviv.xml -func (gl *GL) GetTexEnviv(target, pname glbase.Enum, params []int32) { - C.gl4_0compat_glGetTexEnviv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexEnvfv.xml -func (gl *GL) GetTexEnvfv(target, pname glbase.Enum, params []float32) { - C.gl4_0compat_glGetTexEnvfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetPolygonStipple.xml -func (gl *GL) GetPolygonStipple(mask []uint8) { - C.gl4_0compat_glGetPolygonStipple(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&mask[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetPixelMapusv.xml -func (gl *GL) GetPixelMapusv(glmap glbase.Enum, values []uint16) { - C.gl4_0compat_glGetPixelMapusv(gl.funcs, C.GLenum(glmap), (*C.GLushort)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetPixelMapuiv.xml -func (gl *GL) GetPixelMapuiv(glmap glbase.Enum, values []uint32) { - C.gl4_0compat_glGetPixelMapuiv(gl.funcs, C.GLenum(glmap), (*C.GLuint)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetPixelMapfv.xml -func (gl *GL) GetPixelMapfv(glmap glbase.Enum, values []float32) { - C.gl4_0compat_glGetPixelMapfv(gl.funcs, C.GLenum(glmap), (*C.GLfloat)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetMaterialiv.xml -func (gl *GL) GetMaterialiv(face, pname glbase.Enum, params []int32) { - C.gl4_0compat_glGetMaterialiv(gl.funcs, C.GLenum(face), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetMaterialfv.xml -func (gl *GL) GetMaterialfv(face, pname glbase.Enum, params []float32) { - C.gl4_0compat_glGetMaterialfv(gl.funcs, C.GLenum(face), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetMapiv.xml -func (gl *GL) GetMapiv(target, query glbase.Enum, v []int32) { - C.gl4_0compat_glGetMapiv(gl.funcs, C.GLenum(target), C.GLenum(query), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetMapfv.xml -func (gl *GL) GetMapfv(target, query glbase.Enum, v []float32) { - C.gl4_0compat_glGetMapfv(gl.funcs, C.GLenum(target), C.GLenum(query), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetMapdv.xml -func (gl *GL) GetMapdv(target, query glbase.Enum, v []float64) { - C.gl4_0compat_glGetMapdv(gl.funcs, C.GLenum(target), C.GLenum(query), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetLightiv.xml -func (gl *GL) GetLightiv(light, pname glbase.Enum, params []int32) { - C.gl4_0compat_glGetLightiv(gl.funcs, C.GLenum(light), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetLightfv.xml -func (gl *GL) GetLightfv(light, pname glbase.Enum, params []float32) { - C.gl4_0compat_glGetLightfv(gl.funcs, C.GLenum(light), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetClipPlane.xml -func (gl *GL) GetClipPlane(plane glbase.Enum, equation []float64) { - C.gl4_0compat_glGetClipPlane(gl.funcs, C.GLenum(plane), (*C.GLdouble)(unsafe.Pointer(&equation[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawPixels.xml -func (gl *GL) DrawPixels(width, height int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_0compat_glDrawPixels(gl.funcs, C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyPixels.xml -func (gl *GL) CopyPixels(x, y, width, height int, gltype glbase.Enum) { - C.gl4_0compat_glCopyPixels(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height), C.GLenum(gltype)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPixelMapusv.xml -func (gl *GL) PixelMapusv(glmap glbase.Enum, mapsize int32, values []uint16) { - C.gl4_0compat_glPixelMapusv(gl.funcs, C.GLenum(glmap), C.GLint(mapsize), (*C.GLushort)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPixelMapuiv.xml -func (gl *GL) PixelMapuiv(glmap glbase.Enum, mapsize int32, values []uint32) { - C.gl4_0compat_glPixelMapuiv(gl.funcs, C.GLenum(glmap), C.GLint(mapsize), (*C.GLuint)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPixelMapfv.xml -func (gl *GL) PixelMapfv(glmap glbase.Enum, mapsize int32, values []float32) { - C.gl4_0compat_glPixelMapfv(gl.funcs, C.GLenum(glmap), C.GLint(mapsize), (*C.GLfloat)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPixelTransferi.xml -func (gl *GL) PixelTransferi(pname glbase.Enum, param int32) { - C.gl4_0compat_glPixelTransferi(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPixelTransferf.xml -func (gl *GL) PixelTransferf(pname glbase.Enum, param float32) { - C.gl4_0compat_glPixelTransferf(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPixelZoom.xml -func (gl *GL) PixelZoom(xfactor, yfactor float32) { - C.gl4_0compat_glPixelZoom(gl.funcs, C.GLfloat(xfactor), C.GLfloat(yfactor)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glAlphaFunc.xml -func (gl *GL) AlphaFunc(glfunc glbase.Enum, ref float32) { - C.gl4_0compat_glAlphaFunc(gl.funcs, C.GLenum(glfunc), C.GLfloat(ref)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEvalPoint2.xml -func (gl *GL) EvalPoint2(i, j int32) { - C.gl4_0compat_glEvalPoint2(gl.funcs, C.GLint(i), C.GLint(j)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEvalMesh2.xml -func (gl *GL) EvalMesh2(mode glbase.Enum, i1, i2, j1, j2 int32) { - C.gl4_0compat_glEvalMesh2(gl.funcs, C.GLenum(mode), C.GLint(i1), C.GLint(i2), C.GLint(j1), C.GLint(j2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEvalPoint1.xml -func (gl *GL) EvalPoint1(i int32) { - C.gl4_0compat_glEvalPoint1(gl.funcs, C.GLint(i)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEvalMesh1.xml -func (gl *GL) EvalMesh1(mode glbase.Enum, i1, i2 int32) { - C.gl4_0compat_glEvalMesh1(gl.funcs, C.GLenum(mode), C.GLint(i1), C.GLint(i2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEvalCoord2fv.xml -func (gl *GL) EvalCoord2fv(u []float32) { - if len(u) != 2 { - panic("parameter u has incorrect length") - } - C.gl4_0compat_glEvalCoord2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&u[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEvalCoord2f.xml -func (gl *GL) EvalCoord2f(u, v float32) { - C.gl4_0compat_glEvalCoord2f(gl.funcs, C.GLfloat(u), C.GLfloat(v)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEvalCoord2dv.xml -func (gl *GL) EvalCoord2dv(u []float64) { - if len(u) != 2 { - panic("parameter u has incorrect length") - } - C.gl4_0compat_glEvalCoord2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&u[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEvalCoord2d.xml -func (gl *GL) EvalCoord2d(u, v float64) { - C.gl4_0compat_glEvalCoord2d(gl.funcs, C.GLdouble(u), C.GLdouble(v)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEvalCoord1fv.xml -func (gl *GL) EvalCoord1fv(u []float32) { - C.gl4_0compat_glEvalCoord1fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&u[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEvalCoord1f.xml -func (gl *GL) EvalCoord1f(u float32) { - C.gl4_0compat_glEvalCoord1f(gl.funcs, C.GLfloat(u)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEvalCoord1dv.xml -func (gl *GL) EvalCoord1dv(u []float64) { - C.gl4_0compat_glEvalCoord1dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&u[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEvalCoord1d.xml -func (gl *GL) EvalCoord1d(u float64) { - C.gl4_0compat_glEvalCoord1d(gl.funcs, C.GLdouble(u)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMapGrid2f.xml -func (gl *GL) MapGrid2f(un int32, u1, u2 float32, vn int32, v1, v2 float32) { - C.gl4_0compat_glMapGrid2f(gl.funcs, C.GLint(un), C.GLfloat(u1), C.GLfloat(u2), C.GLint(vn), C.GLfloat(v1), C.GLfloat(v2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMapGrid2d.xml -func (gl *GL) MapGrid2d(un int32, u1, u2 float64, vn int32, v1, v2 float64) { - C.gl4_0compat_glMapGrid2d(gl.funcs, C.GLint(un), C.GLdouble(u1), C.GLdouble(u2), C.GLint(vn), C.GLdouble(v1), C.GLdouble(v2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMapGrid1f.xml -func (gl *GL) MapGrid1f(un int32, u1, u2 float32) { - C.gl4_0compat_glMapGrid1f(gl.funcs, C.GLint(un), C.GLfloat(u1), C.GLfloat(u2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMapGrid1d.xml -func (gl *GL) MapGrid1d(un int32, u1, u2 float64) { - C.gl4_0compat_glMapGrid1d(gl.funcs, C.GLint(un), C.GLdouble(u1), C.GLdouble(u2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMap2f.xml -func (gl *GL) Map2f(target glbase.Enum, u1, u2 float32, ustride, uorder int32, v1, v2 float32, vstride, vorder int32, points []float32) { - C.gl4_0compat_glMap2f(gl.funcs, C.GLenum(target), C.GLfloat(u1), C.GLfloat(u2), C.GLint(ustride), C.GLint(uorder), C.GLfloat(v1), C.GLfloat(v2), C.GLint(vstride), C.GLint(vorder), (*C.GLfloat)(unsafe.Pointer(&points[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMap2d.xml -func (gl *GL) Map2d(target glbase.Enum, u1, u2 float64, ustride, uorder int32, v1, v2 float64, vstride, vorder int32, points []float64) { - C.gl4_0compat_glMap2d(gl.funcs, C.GLenum(target), C.GLdouble(u1), C.GLdouble(u2), C.GLint(ustride), C.GLint(uorder), C.GLdouble(v1), C.GLdouble(v2), C.GLint(vstride), C.GLint(vorder), (*C.GLdouble)(unsafe.Pointer(&points[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMap1f.xml -func (gl *GL) Map1f(target glbase.Enum, u1, u2 float32, stride, order int, points []float32) { - C.gl4_0compat_glMap1f(gl.funcs, C.GLenum(target), C.GLfloat(u1), C.GLfloat(u2), C.GLint(stride), C.GLint(order), (*C.GLfloat)(unsafe.Pointer(&points[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMap1d.xml -func (gl *GL) Map1d(target glbase.Enum, u1, u2 float64, stride, order int, points []float64) { - C.gl4_0compat_glMap1d(gl.funcs, C.GLenum(target), C.GLdouble(u1), C.GLdouble(u2), C.GLint(stride), C.GLint(order), (*C.GLdouble)(unsafe.Pointer(&points[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPushAttrib.xml -func (gl *GL) PushAttrib(mask glbase.Bitfield) { - C.gl4_0compat_glPushAttrib(gl.funcs, C.GLbitfield(mask)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPopAttrib.xml -func (gl *GL) PopAttrib() { - C.gl4_0compat_glPopAttrib(gl.funcs) -} - -// Accum executes an operation on the accumulation buffer. -// -// Parameter op defines the accumulation buffer operation (GL.ACCUM, GL.LOAD, -// GL.ADD, GL.MULT, or GL.RETURN) and specifies how the value parameter is -// used. -// -// The accumulation buffer is an extended-range color buffer. Images are not -// rendered into it. Rather, images rendered into one of the color buffers -// are added to the contents of the accumulation buffer after rendering. -// Effects such as antialiasing (of points, lines, and polygons), motion -// blur, and depth of field can be created by accumulating images generated -// with different transformation matrices. -// -// Each pixel in the accumulation buffer consists of red, green, blue, and -// alpha values. The number of bits per component in the accumulation buffer -// depends on the implementation. You can examine this number by calling -// GetIntegerv four times, with arguments GL.ACCUM_RED_BITS, -// GL.ACCUM_GREEN_BITS, GL.ACCUM_BLUE_BITS, and GL.ACCUM_ALPHA_BITS. -// Regardless of the number of bits per component, the range of values stored -// by each component is (-1, 1). The accumulation buffer pixels are mapped -// one-to-one with frame buffer pixels. -// -// All accumulation buffer operations are limited to the area of the current -// scissor box and applied identically to the red, green, blue, and alpha -// components of each pixel. If a Accum operation results in a value outside -// the range (-1, 1), the contents of an accumulation buffer pixel component -// are undefined. -// -// The operations are as follows: -// -// GL.ACCUM -// Obtains R, G, B, and A values from the buffer currently selected for -// reading (see ReadBuffer). Each component value is divided by 2 n - -// 1 , where n is the number of bits allocated to each color component -// in the currently selected buffer. The result is a floating-point -// value in the range 0 1 , which is multiplied by value and added to -// the corresponding pixel component in the accumulation buffer, -// thereby updating the accumulation buffer. -// -// GL.LOAD -// Similar to GL.ACCUM, except that the current value in the -// accumulation buffer is not used in the calculation of the new value. -// That is, the R, G, B, and A values from the currently selected -// buffer are divided by 2 n - 1 , multiplied by value, and then stored -// in the corresponding accumulation buffer cell, overwriting the -// current value. -// -// GL.ADD -// Adds value to each R, G, B, and A in the accumulation buffer. -// -// GL.MULT -// Multiplies each R, G, B, and A in the accumulation buffer by value -// and returns the scaled component to its corresponding accumulation -// buffer location. -// -// GL.RETURN -// Transfers accumulation buffer values to the color buffer or buffers -// currently selected for writing. Each R, G, B, and A component is -// multiplied by value, then multiplied by 2 n - 1 , clamped to the -// range 0 2 n - 1 , and stored in the corresponding display buffer -// cell. The only fragment operations that are applied to this transfer -// are pixel ownership, scissor, dithering, and color writemasks. -// -// To clear the accumulation buffer, call ClearAccum with R, G, B, and A -// values to set it to, then call Clear with the accumulation buffer -// enabled. -// -// Error GL.INVALID_ENUM is generated if op is not an accepted value. -// GL.INVALID_OPERATION is generated if there is no accumulation buffer. -// GL.INVALID_OPERATION is generated if Accum is executed between the -// execution of Begin and the corresponding execution of End. -func (gl *GL) Accum(op glbase.Enum, value float32) { - C.gl4_0compat_glAccum(gl.funcs, C.GLenum(op), C.GLfloat(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIndexMask.xml -func (gl *GL) IndexMask(mask uint32) { - C.gl4_0compat_glIndexMask(gl.funcs, C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearIndex.xml -func (gl *GL) ClearIndex(c float32) { - C.gl4_0compat_glClearIndex(gl.funcs, C.GLfloat(c)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearAccum.xml -func (gl *GL) ClearAccum(red, green, blue, alpha float32) { - C.gl4_0compat_glClearAccum(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPushName.xml -func (gl *GL) PushName(name uint32) { - C.gl4_0compat_glPushName(gl.funcs, C.GLuint(name)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPopName.xml -func (gl *GL) PopName() { - C.gl4_0compat_glPopName(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPassThrough.xml -func (gl *GL) PassThrough(token float32) { - C.gl4_0compat_glPassThrough(gl.funcs, C.GLfloat(token)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLoadName.xml -func (gl *GL) LoadName(name uint32) { - C.gl4_0compat_glLoadName(gl.funcs, C.GLuint(name)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glInitNames.xml -func (gl *GL) InitNames() { - C.gl4_0compat_glInitNames(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRenderMode.xml -func (gl *GL) RenderMode(mode glbase.Enum) int32 { - glresult := C.gl4_0compat_glRenderMode(gl.funcs, C.GLenum(mode)) - return int32(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSelectBuffer.xml -func (gl *GL) SelectBuffer(size int, buffer []glbase.Buffer) { - C.gl4_0compat_glSelectBuffer(gl.funcs, C.GLsizei(size), (*C.GLuint)(unsafe.Pointer(&buffer[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFeedbackBuffer.xml -func (gl *GL) FeedbackBuffer(size int, gltype glbase.Enum, buffer []float32) { - C.gl4_0compat_glFeedbackBuffer(gl.funcs, C.GLsizei(size), C.GLenum(gltype), (*C.GLfloat)(unsafe.Pointer(&buffer[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexGeniv.xml -func (gl *GL) TexGeniv(coord, pname glbase.Enum, params []int32) { - C.gl4_0compat_glTexGeniv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexGeni.xml -func (gl *GL) TexGeni(coord, pname glbase.Enum, param int32) { - C.gl4_0compat_glTexGeni(gl.funcs, C.GLenum(coord), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexGenfv.xml -func (gl *GL) TexGenfv(coord, pname glbase.Enum, params []float32) { - C.gl4_0compat_glTexGenfv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexGenf.xml -func (gl *GL) TexGenf(coord, pname glbase.Enum, param float32) { - C.gl4_0compat_glTexGenf(gl.funcs, C.GLenum(coord), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexGendv.xml -func (gl *GL) TexGendv(coord, pname glbase.Enum, params []float64) { - C.gl4_0compat_glTexGendv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexGend.xml -func (gl *GL) TexGend(coord, pname glbase.Enum, param float64) { - C.gl4_0compat_glTexGend(gl.funcs, C.GLenum(coord), C.GLenum(pname), C.GLdouble(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexEnviv.xml -func (gl *GL) TexEnviv(target, pname glbase.Enum, params []int32) { - C.gl4_0compat_glTexEnviv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexEnvi.xml -func (gl *GL) TexEnvi(target, pname glbase.Enum, param int32) { - C.gl4_0compat_glTexEnvi(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexEnvfv.xml -func (gl *GL) TexEnvfv(target, pname glbase.Enum, params []float32) { - C.gl4_0compat_glTexEnvfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexEnvf.xml -func (gl *GL) TexEnvf(target, pname glbase.Enum, param float32) { - C.gl4_0compat_glTexEnvf(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glShadeModel.xml -func (gl *GL) ShadeModel(mode glbase.Enum) { - C.gl4_0compat_glShadeModel(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPolygonStipple.xml -func (gl *GL) PolygonStipple(mask []uint8) { - C.gl4_0compat_glPolygonStipple(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&mask[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMaterialiv.xml -func (gl *GL) Materialiv(face, pname glbase.Enum, params []int32) { - C.gl4_0compat_glMaterialiv(gl.funcs, C.GLenum(face), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMateriali.xml -func (gl *GL) Materiali(face, pname glbase.Enum, param int32) { - C.gl4_0compat_glMateriali(gl.funcs, C.GLenum(face), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMaterialfv.xml -func (gl *GL) Materialfv(face, pname glbase.Enum, params []float32) { - C.gl4_0compat_glMaterialfv(gl.funcs, C.GLenum(face), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMaterialf.xml -func (gl *GL) Materialf(face, pname glbase.Enum, param float32) { - C.gl4_0compat_glMaterialf(gl.funcs, C.GLenum(face), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLineStipple.xml -func (gl *GL) LineStipple(factor int32, pattern uint16) { - C.gl4_0compat_glLineStipple(gl.funcs, C.GLint(factor), C.GLushort(pattern)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLightModeliv.xml -func (gl *GL) LightModeliv(pname glbase.Enum, params []int32) { - C.gl4_0compat_glLightModeliv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLightModeli.xml -func (gl *GL) LightModeli(pname glbase.Enum, param int32) { - C.gl4_0compat_glLightModeli(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLightModelfv.xml -func (gl *GL) LightModelfv(pname glbase.Enum, params []float32) { - C.gl4_0compat_glLightModelfv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLightModelf.xml -func (gl *GL) LightModelf(pname glbase.Enum, param float32) { - C.gl4_0compat_glLightModelf(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLightiv.xml -func (gl *GL) Lightiv(light, pname glbase.Enum, params []int32) { - C.gl4_0compat_glLightiv(gl.funcs, C.GLenum(light), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLighti.xml -func (gl *GL) Lighti(light, pname glbase.Enum, param int32) { - C.gl4_0compat_glLighti(gl.funcs, C.GLenum(light), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLightfv.xml -func (gl *GL) Lightfv(light, pname glbase.Enum, params []float32) { - C.gl4_0compat_glLightfv(gl.funcs, C.GLenum(light), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLightf.xml -func (gl *GL) Lightf(light, pname glbase.Enum, param float32) { - C.gl4_0compat_glLightf(gl.funcs, C.GLenum(light), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFogiv.xml -func (gl *GL) Fogiv(pname glbase.Enum, params []int32) { - C.gl4_0compat_glFogiv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFogi.xml -func (gl *GL) Fogi(pname glbase.Enum, param int32) { - C.gl4_0compat_glFogi(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFogfv.xml -func (gl *GL) Fogfv(pname glbase.Enum, params []float32) { - C.gl4_0compat_glFogfv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFogf.xml -func (gl *GL) Fogf(pname glbase.Enum, param float32) { - C.gl4_0compat_glFogf(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorMaterial.xml -func (gl *GL) ColorMaterial(face, mode glbase.Enum) { - C.gl4_0compat_glColorMaterial(gl.funcs, C.GLenum(face), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClipPlane.xml -func (gl *GL) ClipPlane(plane glbase.Enum, equation []float64) { - C.gl4_0compat_glClipPlane(gl.funcs, C.GLenum(plane), (*C.GLdouble)(unsafe.Pointer(&equation[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex4sv.xml -func (gl *GL) Vertex4sv(v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glVertex4sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex4s.xml -func (gl *GL) Vertex4s(x, y, z, w int16) { - C.gl4_0compat_glVertex4s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z), C.GLshort(w)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex4iv.xml -func (gl *GL) Vertex4iv(v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glVertex4iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex4i.xml -func (gl *GL) Vertex4i(x, y, z, w int) { - C.gl4_0compat_glVertex4i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z), C.GLint(w)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex4fv.xml -func (gl *GL) Vertex4fv(v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glVertex4fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex4f.xml -func (gl *GL) Vertex4f(x, y, z, w float32) { - C.gl4_0compat_glVertex4f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z), C.GLfloat(w)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex4dv.xml -func (gl *GL) Vertex4dv(v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glVertex4dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex4d.xml -func (gl *GL) Vertex4d(x, y, z, w float64) { - C.gl4_0compat_glVertex4d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z), C.GLdouble(w)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex3sv.xml -func (gl *GL) Vertex3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glVertex3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex3s.xml -func (gl *GL) Vertex3s(x, y, z int16) { - C.gl4_0compat_glVertex3s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex3iv.xml -func (gl *GL) Vertex3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glVertex3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex3i.xml -func (gl *GL) Vertex3i(x, y, z int) { - C.gl4_0compat_glVertex3i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex3fv.xml -func (gl *GL) Vertex3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glVertex3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex3f.xml -func (gl *GL) Vertex3f(x, y, z float32) { - C.gl4_0compat_glVertex3f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex3dv.xml -func (gl *GL) Vertex3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glVertex3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex3d.xml -func (gl *GL) Vertex3d(x, y, z float64) { - C.gl4_0compat_glVertex3d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex2sv.xml -func (gl *GL) Vertex2sv(v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glVertex2sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex2s.xml -func (gl *GL) Vertex2s(x, y int16) { - C.gl4_0compat_glVertex2s(gl.funcs, C.GLshort(x), C.GLshort(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex2iv.xml -func (gl *GL) Vertex2iv(v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glVertex2iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex2i.xml -func (gl *GL) Vertex2i(x, y int) { - C.gl4_0compat_glVertex2i(gl.funcs, C.GLint(x), C.GLint(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex2fv.xml -func (gl *GL) Vertex2fv(v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glVertex2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex2f.xml -func (gl *GL) Vertex2f(x, y float32) { - C.gl4_0compat_glVertex2f(gl.funcs, C.GLfloat(x), C.GLfloat(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex2dv.xml -func (gl *GL) Vertex2dv(v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glVertex2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex2d.xml -func (gl *GL) Vertex2d(x, y float64) { - C.gl4_0compat_glVertex2d(gl.funcs, C.GLdouble(x), C.GLdouble(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord4sv.xml -func (gl *GL) TexCoord4sv(v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glTexCoord4sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord4s.xml -func (gl *GL) TexCoord4s(s, t, r, q int16) { - C.gl4_0compat_glTexCoord4s(gl.funcs, C.GLshort(s), C.GLshort(t), C.GLshort(r), C.GLshort(q)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord4iv.xml -func (gl *GL) TexCoord4iv(v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glTexCoord4iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord4i.xml -func (gl *GL) TexCoord4i(s, t, r, q int32) { - C.gl4_0compat_glTexCoord4i(gl.funcs, C.GLint(s), C.GLint(t), C.GLint(r), C.GLint(q)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord4fv.xml -func (gl *GL) TexCoord4fv(v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glTexCoord4fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord4f.xml -func (gl *GL) TexCoord4f(s, t, r, q float32) { - C.gl4_0compat_glTexCoord4f(gl.funcs, C.GLfloat(s), C.GLfloat(t), C.GLfloat(r), C.GLfloat(q)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord4dv.xml -func (gl *GL) TexCoord4dv(v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glTexCoord4dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord4d.xml -func (gl *GL) TexCoord4d(s, t, r, q float64) { - C.gl4_0compat_glTexCoord4d(gl.funcs, C.GLdouble(s), C.GLdouble(t), C.GLdouble(r), C.GLdouble(q)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord3sv.xml -func (gl *GL) TexCoord3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glTexCoord3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord3s.xml -func (gl *GL) TexCoord3s(s, t, r int16) { - C.gl4_0compat_glTexCoord3s(gl.funcs, C.GLshort(s), C.GLshort(t), C.GLshort(r)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord3iv.xml -func (gl *GL) TexCoord3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glTexCoord3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord3i.xml -func (gl *GL) TexCoord3i(s, t, r int32) { - C.gl4_0compat_glTexCoord3i(gl.funcs, C.GLint(s), C.GLint(t), C.GLint(r)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord3fv.xml -func (gl *GL) TexCoord3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glTexCoord3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord3f.xml -func (gl *GL) TexCoord3f(s, t, r float32) { - C.gl4_0compat_glTexCoord3f(gl.funcs, C.GLfloat(s), C.GLfloat(t), C.GLfloat(r)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord3dv.xml -func (gl *GL) TexCoord3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glTexCoord3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord3d.xml -func (gl *GL) TexCoord3d(s, t, r float64) { - C.gl4_0compat_glTexCoord3d(gl.funcs, C.GLdouble(s), C.GLdouble(t), C.GLdouble(r)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord2sv.xml -func (gl *GL) TexCoord2sv(v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glTexCoord2sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord2s.xml -func (gl *GL) TexCoord2s(s, t int16) { - C.gl4_0compat_glTexCoord2s(gl.funcs, C.GLshort(s), C.GLshort(t)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord2iv.xml -func (gl *GL) TexCoord2iv(v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glTexCoord2iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord2i.xml -func (gl *GL) TexCoord2i(s, t int32) { - C.gl4_0compat_glTexCoord2i(gl.funcs, C.GLint(s), C.GLint(t)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord2fv.xml -func (gl *GL) TexCoord2fv(v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glTexCoord2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord2f.xml -func (gl *GL) TexCoord2f(s, t float32) { - C.gl4_0compat_glTexCoord2f(gl.funcs, C.GLfloat(s), C.GLfloat(t)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord2dv.xml -func (gl *GL) TexCoord2dv(v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glTexCoord2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord2d.xml -func (gl *GL) TexCoord2d(s, t float64) { - C.gl4_0compat_glTexCoord2d(gl.funcs, C.GLdouble(s), C.GLdouble(t)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord1sv.xml -func (gl *GL) TexCoord1sv(v []int16) { - C.gl4_0compat_glTexCoord1sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord1s.xml -func (gl *GL) TexCoord1s(s int16) { - C.gl4_0compat_glTexCoord1s(gl.funcs, C.GLshort(s)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord1iv.xml -func (gl *GL) TexCoord1iv(v []int32) { - C.gl4_0compat_glTexCoord1iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord1i.xml -func (gl *GL) TexCoord1i(s int32) { - C.gl4_0compat_glTexCoord1i(gl.funcs, C.GLint(s)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord1fv.xml -func (gl *GL) TexCoord1fv(v []float32) { - C.gl4_0compat_glTexCoord1fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord1f.xml -func (gl *GL) TexCoord1f(s float32) { - C.gl4_0compat_glTexCoord1f(gl.funcs, C.GLfloat(s)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord1dv.xml -func (gl *GL) TexCoord1dv(v []float64) { - C.gl4_0compat_glTexCoord1dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord1d.xml -func (gl *GL) TexCoord1d(s float64) { - C.gl4_0compat_glTexCoord1d(gl.funcs, C.GLdouble(s)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRectsv.xml -func (gl *GL) Rectsv(v1, v2 []int16) { - C.gl4_0compat_glRectsv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v1[0])), (*C.GLshort)(unsafe.Pointer(&v2[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRects.xml -func (gl *GL) Rects(x1, y1, x2, y2 int16) { - C.gl4_0compat_glRects(gl.funcs, C.GLshort(x1), C.GLshort(y1), C.GLshort(x2), C.GLshort(y2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRectiv.xml -func (gl *GL) Rectiv(v1, v2 []int32) { - C.gl4_0compat_glRectiv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v1[0])), (*C.GLint)(unsafe.Pointer(&v2[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRecti.xml -func (gl *GL) Recti(x1, y1, x2, y2 int32) { - C.gl4_0compat_glRecti(gl.funcs, C.GLint(x1), C.GLint(y1), C.GLint(x2), C.GLint(y2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRectfv.xml -func (gl *GL) Rectfv(v1, v2 []float32) { - C.gl4_0compat_glRectfv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v1[0])), (*C.GLfloat)(unsafe.Pointer(&v2[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRectf.xml -func (gl *GL) Rectf(x1, y1, x2, y2 float32) { - C.gl4_0compat_glRectf(gl.funcs, C.GLfloat(x1), C.GLfloat(y1), C.GLfloat(x2), C.GLfloat(y2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRectdv.xml -func (gl *GL) Rectdv(v1, v2 []float64) { - C.gl4_0compat_glRectdv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v1[0])), (*C.GLdouble)(unsafe.Pointer(&v2[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRectd.xml -func (gl *GL) Rectd(x1, y1, x2, y2 float64) { - C.gl4_0compat_glRectd(gl.funcs, C.GLdouble(x1), C.GLdouble(y1), C.GLdouble(x2), C.GLdouble(y2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos4sv.xml -func (gl *GL) RasterPos4sv(v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glRasterPos4sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos4s.xml -func (gl *GL) RasterPos4s(x, y, z, w int16) { - C.gl4_0compat_glRasterPos4s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z), C.GLshort(w)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos4iv.xml -func (gl *GL) RasterPos4iv(v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glRasterPos4iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos4i.xml -func (gl *GL) RasterPos4i(x, y, z, w int) { - C.gl4_0compat_glRasterPos4i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z), C.GLint(w)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos4fv.xml -func (gl *GL) RasterPos4fv(v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glRasterPos4fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos4f.xml -func (gl *GL) RasterPos4f(x, y, z, w float32) { - C.gl4_0compat_glRasterPos4f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z), C.GLfloat(w)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos4dv.xml -func (gl *GL) RasterPos4dv(v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glRasterPos4dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos4d.xml -func (gl *GL) RasterPos4d(x, y, z, w float64) { - C.gl4_0compat_glRasterPos4d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z), C.GLdouble(w)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos3sv.xml -func (gl *GL) RasterPos3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glRasterPos3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos3s.xml -func (gl *GL) RasterPos3s(x, y, z int16) { - C.gl4_0compat_glRasterPos3s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos3iv.xml -func (gl *GL) RasterPos3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glRasterPos3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos3i.xml -func (gl *GL) RasterPos3i(x, y, z int) { - C.gl4_0compat_glRasterPos3i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos3fv.xml -func (gl *GL) RasterPos3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glRasterPos3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos3f.xml -func (gl *GL) RasterPos3f(x, y, z float32) { - C.gl4_0compat_glRasterPos3f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos3dv.xml -func (gl *GL) RasterPos3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glRasterPos3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos3d.xml -func (gl *GL) RasterPos3d(x, y, z float64) { - C.gl4_0compat_glRasterPos3d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos2sv.xml -func (gl *GL) RasterPos2sv(v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glRasterPos2sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos2s.xml -func (gl *GL) RasterPos2s(x, y int16) { - C.gl4_0compat_glRasterPos2s(gl.funcs, C.GLshort(x), C.GLshort(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos2iv.xml -func (gl *GL) RasterPos2iv(v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glRasterPos2iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos2i.xml -func (gl *GL) RasterPos2i(x, y int) { - C.gl4_0compat_glRasterPos2i(gl.funcs, C.GLint(x), C.GLint(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos2fv.xml -func (gl *GL) RasterPos2fv(v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glRasterPos2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos2f.xml -func (gl *GL) RasterPos2f(x, y float32) { - C.gl4_0compat_glRasterPos2f(gl.funcs, C.GLfloat(x), C.GLfloat(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos2dv.xml -func (gl *GL) RasterPos2dv(v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glRasterPos2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos2d.xml -func (gl *GL) RasterPos2d(x, y float64) { - C.gl4_0compat_glRasterPos2d(gl.funcs, C.GLdouble(x), C.GLdouble(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glNormal3sv.xml -func (gl *GL) Normal3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glNormal3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glNormal3s.xml -func (gl *GL) Normal3s(nx, ny, nz int16) { - C.gl4_0compat_glNormal3s(gl.funcs, C.GLshort(nx), C.GLshort(ny), C.GLshort(nz)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glNormal3iv.xml -func (gl *GL) Normal3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glNormal3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glNormal3i.xml -func (gl *GL) Normal3i(nx, ny, nz int32) { - C.gl4_0compat_glNormal3i(gl.funcs, C.GLint(nx), C.GLint(ny), C.GLint(nz)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glNormal3fv.xml -func (gl *GL) Normal3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glNormal3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glNormal3f.xml -func (gl *GL) Normal3f(nx, ny, nz float32) { - C.gl4_0compat_glNormal3f(gl.funcs, C.GLfloat(nx), C.GLfloat(ny), C.GLfloat(nz)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glNormal3dv.xml -func (gl *GL) Normal3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glNormal3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glNormal3d.xml -func (gl *GL) Normal3d(nx, ny, nz float64) { - C.gl4_0compat_glNormal3d(gl.funcs, C.GLdouble(nx), C.GLdouble(ny), C.GLdouble(nz)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glNormal3bv.xml -func (gl *GL) Normal3bv(v []byte) { - C.gl4_0compat_glNormal3bv(gl.funcs, (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glNormal3b.xml -func (gl *GL) Normal3b(nx, ny, nz byte) { - C.gl4_0compat_glNormal3b(gl.funcs, C.GLbyte(nx), C.GLbyte(ny), C.GLbyte(nz)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIndexsv.xml -func (gl *GL) Indexsv(c []int16) { - C.gl4_0compat_glIndexsv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIndexs.xml -func (gl *GL) Indexs(c int16) { - C.gl4_0compat_glIndexs(gl.funcs, C.GLshort(c)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIndexiv.xml -func (gl *GL) Indexiv(c []int32) { - C.gl4_0compat_glIndexiv(gl.funcs, (*C.GLint)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIndexi.xml -func (gl *GL) Indexi(c int32) { - C.gl4_0compat_glIndexi(gl.funcs, C.GLint(c)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIndexfv.xml -func (gl *GL) Indexfv(c []float32) { - C.gl4_0compat_glIndexfv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIndexf.xml -func (gl *GL) Indexf(c float32) { - C.gl4_0compat_glIndexf(gl.funcs, C.GLfloat(c)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIndexdv.xml -func (gl *GL) Indexdv(c []float64) { - C.gl4_0compat_glIndexdv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIndexd.xml -func (gl *GL) Indexd(c float64) { - C.gl4_0compat_glIndexd(gl.funcs, C.GLdouble(c)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEnd.xml -func (gl *GL) End() { - C.gl4_0compat_glEnd(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEdgeFlagv.xml -func (gl *GL) EdgeFlagv(flag []bool) { - C.gl4_0compat_glEdgeFlagv(gl.funcs, (*C.GLboolean)(unsafe.Pointer(&flag[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEdgeFlag.xml -func (gl *GL) EdgeFlag(flag bool) { - C.gl4_0compat_glEdgeFlag(gl.funcs, *(*C.GLboolean)(unsafe.Pointer(&flag))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor4usv.xml -func (gl *GL) Color4usv(v []uint16) { - C.gl4_0compat_glColor4usv(gl.funcs, (*C.GLushort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor4us.xml -func (gl *GL) Color4us(red, green, blue, alpha uint16) { - C.gl4_0compat_glColor4us(gl.funcs, C.GLushort(red), C.GLushort(green), C.GLushort(blue), C.GLushort(alpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor4uiv.xml -func (gl *GL) Color4uiv(v []uint32) { - C.gl4_0compat_glColor4uiv(gl.funcs, (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor4ui.xml -func (gl *GL) Color4ui(red, green, blue, alpha uint32) { - C.gl4_0compat_glColor4ui(gl.funcs, C.GLuint(red), C.GLuint(green), C.GLuint(blue), C.GLuint(alpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor4ubv.xml -func (gl *GL) Color4ubv(v []uint8) { - C.gl4_0compat_glColor4ubv(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor4ub.xml -func (gl *GL) Color4ub(red, green, blue, alpha uint8) { - C.gl4_0compat_glColor4ub(gl.funcs, C.GLubyte(red), C.GLubyte(green), C.GLubyte(blue), C.GLubyte(alpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor4sv.xml -func (gl *GL) Color4sv(v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glColor4sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor4s.xml -func (gl *GL) Color4s(red, green, blue, alpha int16) { - C.gl4_0compat_glColor4s(gl.funcs, C.GLshort(red), C.GLshort(green), C.GLshort(blue), C.GLshort(alpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor4iv.xml -func (gl *GL) Color4iv(v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glColor4iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor4i.xml -func (gl *GL) Color4i(red, green, blue, alpha int32) { - C.gl4_0compat_glColor4i(gl.funcs, C.GLint(red), C.GLint(green), C.GLint(blue), C.GLint(alpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor4fv.xml -func (gl *GL) Color4fv(v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glColor4fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor4f.xml -func (gl *GL) Color4f(red, green, blue, alpha float32) { - C.gl4_0compat_glColor4f(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor4dv.xml -func (gl *GL) Color4dv(v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glColor4dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor4d.xml -func (gl *GL) Color4d(red, green, blue, alpha float64) { - C.gl4_0compat_glColor4d(gl.funcs, C.GLdouble(red), C.GLdouble(green), C.GLdouble(blue), C.GLdouble(alpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor4bv.xml -func (gl *GL) Color4bv(v []byte) { - C.gl4_0compat_glColor4bv(gl.funcs, (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor4b.xml -func (gl *GL) Color4b(red, green, blue, alpha byte) { - C.gl4_0compat_glColor4b(gl.funcs, C.GLbyte(red), C.GLbyte(green), C.GLbyte(blue), C.GLbyte(alpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor3usv.xml -func (gl *GL) Color3usv(v []uint16) { - C.gl4_0compat_glColor3usv(gl.funcs, (*C.GLushort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor3us.xml -func (gl *GL) Color3us(red, green, blue uint16) { - C.gl4_0compat_glColor3us(gl.funcs, C.GLushort(red), C.GLushort(green), C.GLushort(blue)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor3uiv.xml -func (gl *GL) Color3uiv(v []uint32) { - C.gl4_0compat_glColor3uiv(gl.funcs, (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor3ui.xml -func (gl *GL) Color3ui(red, green, blue uint32) { - C.gl4_0compat_glColor3ui(gl.funcs, C.GLuint(red), C.GLuint(green), C.GLuint(blue)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor3ubv.xml -func (gl *GL) Color3ubv(v []uint8) { - C.gl4_0compat_glColor3ubv(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor3ub.xml -func (gl *GL) Color3ub(red, green, blue uint8) { - C.gl4_0compat_glColor3ub(gl.funcs, C.GLubyte(red), C.GLubyte(green), C.GLubyte(blue)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor3sv.xml -func (gl *GL) Color3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glColor3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor3s.xml -func (gl *GL) Color3s(red, green, blue int16) { - C.gl4_0compat_glColor3s(gl.funcs, C.GLshort(red), C.GLshort(green), C.GLshort(blue)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor3iv.xml -func (gl *GL) Color3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glColor3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor3i.xml -func (gl *GL) Color3i(red, green, blue int32) { - C.gl4_0compat_glColor3i(gl.funcs, C.GLint(red), C.GLint(green), C.GLint(blue)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor3fv.xml -func (gl *GL) Color3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glColor3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor3f.xml -func (gl *GL) Color3f(red, green, blue float32) { - C.gl4_0compat_glColor3f(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor3dv.xml -func (gl *GL) Color3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glColor3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor3d.xml -func (gl *GL) Color3d(red, green, blue float64) { - C.gl4_0compat_glColor3d(gl.funcs, C.GLdouble(red), C.GLdouble(green), C.GLdouble(blue)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor3bv.xml -func (gl *GL) Color3bv(v []byte) { - C.gl4_0compat_glColor3bv(gl.funcs, (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor3b.xml -func (gl *GL) Color3b(red, green, blue byte) { - C.gl4_0compat_glColor3b(gl.funcs, C.GLbyte(red), C.GLbyte(green), C.GLbyte(blue)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBitmap.xml -func (gl *GL) Bitmap(width, height int, xorig, yorig, xmove, ymove float32, bitmap []uint8) { - C.gl4_0compat_glBitmap(gl.funcs, C.GLsizei(width), C.GLsizei(height), C.GLfloat(xorig), C.GLfloat(yorig), C.GLfloat(xmove), C.GLfloat(ymove), (*C.GLubyte)(unsafe.Pointer(&bitmap[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBegin.xml -func (gl *GL) Begin(mode glbase.Enum) { - C.gl4_0compat_glBegin(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glListBase.xml -func (gl *GL) ListBase(base uint32) { - C.gl4_0compat_glListBase(gl.funcs, C.GLuint(base)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGenLists.xml -func (gl *GL) GenLists(range_ int32) uint32 { - glresult := C.gl4_0compat_glGenLists(gl.funcs, C.GLsizei(range_)) - return uint32(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDeleteLists.xml -func (gl *GL) DeleteLists(list uint32, range_ int32) { - C.gl4_0compat_glDeleteLists(gl.funcs, C.GLuint(list), C.GLsizei(range_)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCallLists.xml -func (gl *GL) CallLists(n int, gltype glbase.Enum, lists interface{}) { - var lists_ptr unsafe.Pointer - var lists_v = reflect.ValueOf(lists) - if lists != nil && lists_v.Kind() != reflect.Slice { - panic("parameter lists must be a slice") - } - if lists != nil { - lists_ptr = unsafe.Pointer(lists_v.Index(0).Addr().Pointer()) - } - C.gl4_0compat_glCallLists(gl.funcs, C.GLsizei(n), C.GLenum(gltype), lists_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCallList.xml -func (gl *GL) CallList(list uint32) { - C.gl4_0compat_glCallList(gl.funcs, C.GLuint(list)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEndList.xml -func (gl *GL) EndList() { - C.gl4_0compat_glEndList(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glNewList.xml -func (gl *GL) NewList(list uint32, mode glbase.Enum) { - C.gl4_0compat_glNewList(gl.funcs, C.GLuint(list), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPushClientAttrib.xml -func (gl *GL) PushClientAttrib(mask glbase.Bitfield) { - C.gl4_0compat_glPushClientAttrib(gl.funcs, C.GLbitfield(mask)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPopClientAttrib.xml -func (gl *GL) PopClientAttrib() { - C.gl4_0compat_glPopClientAttrib(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPrioritizeTextures.xml -func (gl *GL) PrioritizeTextures(n int, textures []glbase.Texture, priorities []float32) { - C.gl4_0compat_glPrioritizeTextures(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0])), (*C.GLfloat)(unsafe.Pointer(&priorities[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glAreTexturesResident.xml -func (gl *GL) AreTexturesResident(n int, textures []glbase.Texture, residences []bool) bool { - glresult := C.gl4_0compat_glAreTexturesResident(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0])), (*C.GLboolean)(unsafe.Pointer(&residences[0]))) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexPointer.xml -func (gl *GL) VertexPointer(size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl4_0compat_glVertexPointer(gl.funcs, C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordPointer.xml -func (gl *GL) TexCoordPointer(size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl4_0compat_glTexCoordPointer(gl.funcs, C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glNormalPointer.xml -func (gl *GL) NormalPointer(gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl4_0compat_glNormalPointer(gl.funcs, C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glInterleavedArrays.xml -func (gl *GL) InterleavedArrays(format glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl4_0compat_glInterleavedArrays(gl.funcs, C.GLenum(format), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIndexPointer.xml -func (gl *GL) IndexPointer(gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl4_0compat_glIndexPointer(gl.funcs, C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEnableClientState.xml -func (gl *GL) EnableClientState(array glbase.Enum) { - C.gl4_0compat_glEnableClientState(gl.funcs, C.GLenum(array)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEdgeFlagPointer.xml -func (gl *GL) EdgeFlagPointer(stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl4_0compat_glEdgeFlagPointer(gl.funcs, C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDisableClientState.xml -func (gl *GL) DisableClientState(array glbase.Enum) { - C.gl4_0compat_glDisableClientState(gl.funcs, C.GLenum(array)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorPointer.xml -func (gl *GL) ColorPointer(size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl4_0compat_glColorPointer(gl.funcs, C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glArrayElement.xml -func (gl *GL) ArrayElement(i int32) { - C.gl4_0compat_glArrayElement(gl.funcs, C.GLint(i)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glResetMinmax.xml -func (gl *GL) ResetMinmax(target glbase.Enum) { - C.gl4_0compat_glResetMinmax(gl.funcs, C.GLenum(target)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glResetHistogram.xml -func (gl *GL) ResetHistogram(target glbase.Enum) { - C.gl4_0compat_glResetHistogram(gl.funcs, C.GLenum(target)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMinmax.xml -func (gl *GL) Minmax(target, internalFormat glbase.Enum, sink bool) { - C.gl4_0compat_glMinmax(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), *(*C.GLboolean)(unsafe.Pointer(&sink))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glHistogram.xml -func (gl *GL) Histogram(target glbase.Enum, width int, internalFormat glbase.Enum, sink bool) { - C.gl4_0compat_glHistogram(gl.funcs, C.GLenum(target), C.GLsizei(width), C.GLenum(internalFormat), *(*C.GLboolean)(unsafe.Pointer(&sink))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetMinmaxParameteriv.xml -func (gl *GL) GetMinmaxParameteriv(target, pname glbase.Enum, params []int32) { - C.gl4_0compat_glGetMinmaxParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetMinmaxParameterfv.xml -func (gl *GL) GetMinmaxParameterfv(target, pname glbase.Enum, params []float32) { - C.gl4_0compat_glGetMinmaxParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetMinmax.xml -func (gl *GL) GetMinmax(target glbase.Enum, reset bool, format, gltype glbase.Enum, values interface{}) { - var values_ptr unsafe.Pointer - var values_v = reflect.ValueOf(values) - if values != nil && values_v.Kind() != reflect.Slice { - panic("parameter values must be a slice") - } - if values != nil { - values_ptr = unsafe.Pointer(values_v.Index(0).Addr().Pointer()) - } - C.gl4_0compat_glGetMinmax(gl.funcs, C.GLenum(target), *(*C.GLboolean)(unsafe.Pointer(&reset)), C.GLenum(format), C.GLenum(gltype), values_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetHistogramParameteriv.xml -func (gl *GL) GetHistogramParameteriv(target, pname glbase.Enum, params []int32) { - C.gl4_0compat_glGetHistogramParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetHistogramParameterfv.xml -func (gl *GL) GetHistogramParameterfv(target, pname glbase.Enum, params []float32) { - C.gl4_0compat_glGetHistogramParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetHistogram.xml -func (gl *GL) GetHistogram(target glbase.Enum, reset bool, format, gltype glbase.Enum, values interface{}) { - var values_ptr unsafe.Pointer - var values_v = reflect.ValueOf(values) - if values != nil && values_v.Kind() != reflect.Slice { - panic("parameter values must be a slice") - } - if values != nil { - values_ptr = unsafe.Pointer(values_v.Index(0).Addr().Pointer()) - } - C.gl4_0compat_glGetHistogram(gl.funcs, C.GLenum(target), *(*C.GLboolean)(unsafe.Pointer(&reset)), C.GLenum(format), C.GLenum(gltype), values_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSeparableFilter2D.xml -func (gl *GL) SeparableFilter2D(target, internalFormat glbase.Enum, width, height int, format, gltype glbase.Enum, row, column interface{}) { - var row_ptr unsafe.Pointer - var row_v = reflect.ValueOf(row) - if row != nil && row_v.Kind() != reflect.Slice { - panic("parameter row must be a slice") - } - if row != nil { - row_ptr = unsafe.Pointer(row_v.Index(0).Addr().Pointer()) - } - var column_ptr unsafe.Pointer - var column_v = reflect.ValueOf(column) - if column != nil && column_v.Kind() != reflect.Slice { - panic("parameter column must be a slice") - } - if column != nil { - column_ptr = unsafe.Pointer(column_v.Index(0).Addr().Pointer()) - } - C.gl4_0compat_glSeparableFilter2D(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), row_ptr, column_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetSeparableFilter.xml -func (gl *GL) GetSeparableFilter(target, format, gltype glbase.Enum, row, column, span interface{}) { - var row_ptr unsafe.Pointer - var row_v = reflect.ValueOf(row) - if row != nil && row_v.Kind() != reflect.Slice { - panic("parameter row must be a slice") - } - if row != nil { - row_ptr = unsafe.Pointer(row_v.Index(0).Addr().Pointer()) - } - var column_ptr unsafe.Pointer - var column_v = reflect.ValueOf(column) - if column != nil && column_v.Kind() != reflect.Slice { - panic("parameter column must be a slice") - } - if column != nil { - column_ptr = unsafe.Pointer(column_v.Index(0).Addr().Pointer()) - } - var span_ptr unsafe.Pointer - var span_v = reflect.ValueOf(span) - if span != nil && span_v.Kind() != reflect.Slice { - panic("parameter span must be a slice") - } - if span != nil { - span_ptr = unsafe.Pointer(span_v.Index(0).Addr().Pointer()) - } - C.gl4_0compat_glGetSeparableFilter(gl.funcs, C.GLenum(target), C.GLenum(format), C.GLenum(gltype), row_ptr, column_ptr, span_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetConvolutionParameteriv.xml -func (gl *GL) GetConvolutionParameteriv(target, pname glbase.Enum, params []int32) { - C.gl4_0compat_glGetConvolutionParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetConvolutionParameterfv.xml -func (gl *GL) GetConvolutionParameterfv(target, pname glbase.Enum, params []float32) { - C.gl4_0compat_glGetConvolutionParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetConvolutionFilter.xml -func (gl *GL) GetConvolutionFilter(target, format, gltype glbase.Enum, image interface{}) { - var image_ptr unsafe.Pointer - var image_v = reflect.ValueOf(image) - if image != nil && image_v.Kind() != reflect.Slice { - panic("parameter image must be a slice") - } - if image != nil { - image_ptr = unsafe.Pointer(image_v.Index(0).Addr().Pointer()) - } - C.gl4_0compat_glGetConvolutionFilter(gl.funcs, C.GLenum(target), C.GLenum(format), C.GLenum(gltype), image_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyConvolutionFilter2D.xml -func (gl *GL) CopyConvolutionFilter2D(target, internalFormat glbase.Enum, x, y, width, height int) { - C.gl4_0compat_glCopyConvolutionFilter2D(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyConvolutionFilter1D.xml -func (gl *GL) CopyConvolutionFilter1D(target, internalFormat glbase.Enum, x, y, width int) { - C.gl4_0compat_glCopyConvolutionFilter1D(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glConvolutionParameteriv.xml -func (gl *GL) ConvolutionParameteriv(target, pname glbase.Enum, params []int32) { - C.gl4_0compat_glConvolutionParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glConvolutionParameteri.xml -func (gl *GL) ConvolutionParameteri(target, pname glbase.Enum, params int32) { - C.gl4_0compat_glConvolutionParameteri(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLint(params)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glConvolutionParameterfv.xml -func (gl *GL) ConvolutionParameterfv(target, pname glbase.Enum, params []float32) { - C.gl4_0compat_glConvolutionParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glConvolutionParameterf.xml -func (gl *GL) ConvolutionParameterf(target, pname glbase.Enum, params float32) { - C.gl4_0compat_glConvolutionParameterf(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLfloat(params)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glConvolutionFilter2D.xml -func (gl *GL) ConvolutionFilter2D(target, internalFormat glbase.Enum, width, height int, format, gltype glbase.Enum, image interface{}) { - var image_ptr unsafe.Pointer - var image_v = reflect.ValueOf(image) - if image != nil && image_v.Kind() != reflect.Slice { - panic("parameter image must be a slice") - } - if image != nil { - image_ptr = unsafe.Pointer(image_v.Index(0).Addr().Pointer()) - } - C.gl4_0compat_glConvolutionFilter2D(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), image_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glConvolutionFilter1D.xml -func (gl *GL) ConvolutionFilter1D(target, internalFormat glbase.Enum, width int, format, gltype glbase.Enum, image interface{}) { - var image_ptr unsafe.Pointer - var image_v = reflect.ValueOf(image) - if image != nil && image_v.Kind() != reflect.Slice { - panic("parameter image must be a slice") - } - if image != nil { - image_ptr = unsafe.Pointer(image_v.Index(0).Addr().Pointer()) - } - C.gl4_0compat_glConvolutionFilter1D(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLsizei(width), C.GLenum(format), C.GLenum(gltype), image_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyColorSubTable.xml -func (gl *GL) CopyColorSubTable(target glbase.Enum, start int32, x, y, width int) { - C.gl4_0compat_glCopyColorSubTable(gl.funcs, C.GLenum(target), C.GLsizei(start), C.GLint(x), C.GLint(y), C.GLsizei(width)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorSubTable.xml -func (gl *GL) ColorSubTable(target glbase.Enum, start int32, count int, format, gltype glbase.Enum, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_0compat_glColorSubTable(gl.funcs, C.GLenum(target), C.GLsizei(start), C.GLsizei(count), C.GLenum(format), C.GLenum(gltype), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetColorTableParameteriv.xml -func (gl *GL) GetColorTableParameteriv(target, pname glbase.Enum, params []int32) { - C.gl4_0compat_glGetColorTableParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetColorTableParameterfv.xml -func (gl *GL) GetColorTableParameterfv(target, pname glbase.Enum, params []float32) { - C.gl4_0compat_glGetColorTableParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetColorTable.xml -func (gl *GL) GetColorTable(target, format, gltype glbase.Enum, table interface{}) { - var table_ptr unsafe.Pointer - var table_v = reflect.ValueOf(table) - if table != nil && table_v.Kind() != reflect.Slice { - panic("parameter table must be a slice") - } - if table != nil { - table_ptr = unsafe.Pointer(table_v.Index(0).Addr().Pointer()) - } - C.gl4_0compat_glGetColorTable(gl.funcs, C.GLenum(target), C.GLenum(format), C.GLenum(gltype), table_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyColorTable.xml -func (gl *GL) CopyColorTable(target, internalFormat glbase.Enum, x, y, width int) { - C.gl4_0compat_glCopyColorTable(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorTableParameteriv.xml -func (gl *GL) ColorTableParameteriv(target, pname glbase.Enum, params []int32) { - C.gl4_0compat_glColorTableParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorTableParameterfv.xml -func (gl *GL) ColorTableParameterfv(target, pname glbase.Enum, params []float32) { - C.gl4_0compat_glColorTableParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorTable.xml -func (gl *GL) ColorTable(target, internalFormat glbase.Enum, width int, format, gltype glbase.Enum, table interface{}) { - var table_ptr unsafe.Pointer - var table_v = reflect.ValueOf(table) - if table != nil && table_v.Kind() != reflect.Slice { - panic("parameter table must be a slice") - } - if table != nil { - table_ptr = unsafe.Pointer(table_v.Index(0).Addr().Pointer()) - } - C.gl4_0compat_glColorTable(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLsizei(width), C.GLenum(format), C.GLenum(gltype), table_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultTransposeMatrixd.xml -func (gl *GL) MultTransposeMatrixd(m []float64) { - C.gl4_0compat_glMultTransposeMatrixd(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultTransposeMatrixf.xml -func (gl *GL) MultTransposeMatrixf(m []float32) { - C.gl4_0compat_glMultTransposeMatrixf(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLoadTransposeMatrixd.xml -func (gl *GL) LoadTransposeMatrixd(m []float64) { - C.gl4_0compat_glLoadTransposeMatrixd(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLoadTransposeMatrixf.xml -func (gl *GL) LoadTransposeMatrixf(m []float32) { - C.gl4_0compat_glLoadTransposeMatrixf(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord4sv.xml -func (gl *GL) MultiTexCoord4sv(target glbase.Enum, v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glMultiTexCoord4sv(gl.funcs, C.GLenum(target), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord4s.xml -func (gl *GL) MultiTexCoord4s(target glbase.Enum, s, t, r, q int16) { - C.gl4_0compat_glMultiTexCoord4s(gl.funcs, C.GLenum(target), C.GLshort(s), C.GLshort(t), C.GLshort(r), C.GLshort(q)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord4iv.xml -func (gl *GL) MultiTexCoord4iv(target glbase.Enum, v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glMultiTexCoord4iv(gl.funcs, C.GLenum(target), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord4i.xml -func (gl *GL) MultiTexCoord4i(target glbase.Enum, s, t, r, q int32) { - C.gl4_0compat_glMultiTexCoord4i(gl.funcs, C.GLenum(target), C.GLint(s), C.GLint(t), C.GLint(r), C.GLint(q)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord4fv.xml -func (gl *GL) MultiTexCoord4fv(target glbase.Enum, v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glMultiTexCoord4fv(gl.funcs, C.GLenum(target), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord4f.xml -func (gl *GL) MultiTexCoord4f(target glbase.Enum, s, t, r, q float32) { - C.gl4_0compat_glMultiTexCoord4f(gl.funcs, C.GLenum(target), C.GLfloat(s), C.GLfloat(t), C.GLfloat(r), C.GLfloat(q)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord4dv.xml -func (gl *GL) MultiTexCoord4dv(target glbase.Enum, v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glMultiTexCoord4dv(gl.funcs, C.GLenum(target), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord4d.xml -func (gl *GL) MultiTexCoord4d(target glbase.Enum, s, t, r, q float64) { - C.gl4_0compat_glMultiTexCoord4d(gl.funcs, C.GLenum(target), C.GLdouble(s), C.GLdouble(t), C.GLdouble(r), C.GLdouble(q)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord3sv.xml -func (gl *GL) MultiTexCoord3sv(target glbase.Enum, v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glMultiTexCoord3sv(gl.funcs, C.GLenum(target), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord3s.xml -func (gl *GL) MultiTexCoord3s(target glbase.Enum, s, t, r int16) { - C.gl4_0compat_glMultiTexCoord3s(gl.funcs, C.GLenum(target), C.GLshort(s), C.GLshort(t), C.GLshort(r)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord3iv.xml -func (gl *GL) MultiTexCoord3iv(target glbase.Enum, v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glMultiTexCoord3iv(gl.funcs, C.GLenum(target), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord3i.xml -func (gl *GL) MultiTexCoord3i(target glbase.Enum, s, t, r int32) { - C.gl4_0compat_glMultiTexCoord3i(gl.funcs, C.GLenum(target), C.GLint(s), C.GLint(t), C.GLint(r)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord3fv.xml -func (gl *GL) MultiTexCoord3fv(target glbase.Enum, v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glMultiTexCoord3fv(gl.funcs, C.GLenum(target), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord3f.xml -func (gl *GL) MultiTexCoord3f(target glbase.Enum, s, t, r float32) { - C.gl4_0compat_glMultiTexCoord3f(gl.funcs, C.GLenum(target), C.GLfloat(s), C.GLfloat(t), C.GLfloat(r)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord3dv.xml -func (gl *GL) MultiTexCoord3dv(target glbase.Enum, v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glMultiTexCoord3dv(gl.funcs, C.GLenum(target), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord3d.xml -func (gl *GL) MultiTexCoord3d(target glbase.Enum, s, t, r float64) { - C.gl4_0compat_glMultiTexCoord3d(gl.funcs, C.GLenum(target), C.GLdouble(s), C.GLdouble(t), C.GLdouble(r)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord2sv.xml -func (gl *GL) MultiTexCoord2sv(target glbase.Enum, v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glMultiTexCoord2sv(gl.funcs, C.GLenum(target), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord2s.xml -func (gl *GL) MultiTexCoord2s(target glbase.Enum, s, t int16) { - C.gl4_0compat_glMultiTexCoord2s(gl.funcs, C.GLenum(target), C.GLshort(s), C.GLshort(t)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord2iv.xml -func (gl *GL) MultiTexCoord2iv(target glbase.Enum, v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glMultiTexCoord2iv(gl.funcs, C.GLenum(target), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord2i.xml -func (gl *GL) MultiTexCoord2i(target glbase.Enum, s, t int32) { - C.gl4_0compat_glMultiTexCoord2i(gl.funcs, C.GLenum(target), C.GLint(s), C.GLint(t)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord2fv.xml -func (gl *GL) MultiTexCoord2fv(target glbase.Enum, v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glMultiTexCoord2fv(gl.funcs, C.GLenum(target), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord2f.xml -func (gl *GL) MultiTexCoord2f(target glbase.Enum, s, t float32) { - C.gl4_0compat_glMultiTexCoord2f(gl.funcs, C.GLenum(target), C.GLfloat(s), C.GLfloat(t)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord2dv.xml -func (gl *GL) MultiTexCoord2dv(target glbase.Enum, v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glMultiTexCoord2dv(gl.funcs, C.GLenum(target), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord2d.xml -func (gl *GL) MultiTexCoord2d(target glbase.Enum, s, t float64) { - C.gl4_0compat_glMultiTexCoord2d(gl.funcs, C.GLenum(target), C.GLdouble(s), C.GLdouble(t)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord1sv.xml -func (gl *GL) MultiTexCoord1sv(target glbase.Enum, v []int16) { - C.gl4_0compat_glMultiTexCoord1sv(gl.funcs, C.GLenum(target), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord1s.xml -func (gl *GL) MultiTexCoord1s(target glbase.Enum, s int16) { - C.gl4_0compat_glMultiTexCoord1s(gl.funcs, C.GLenum(target), C.GLshort(s)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord1iv.xml -func (gl *GL) MultiTexCoord1iv(target glbase.Enum, v []int32) { - C.gl4_0compat_glMultiTexCoord1iv(gl.funcs, C.GLenum(target), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord1i.xml -func (gl *GL) MultiTexCoord1i(target glbase.Enum, s int32) { - C.gl4_0compat_glMultiTexCoord1i(gl.funcs, C.GLenum(target), C.GLint(s)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord1fv.xml -func (gl *GL) MultiTexCoord1fv(target glbase.Enum, v []float32) { - C.gl4_0compat_glMultiTexCoord1fv(gl.funcs, C.GLenum(target), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord1f.xml -func (gl *GL) MultiTexCoord1f(target glbase.Enum, s float32) { - C.gl4_0compat_glMultiTexCoord1f(gl.funcs, C.GLenum(target), C.GLfloat(s)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord1dv.xml -func (gl *GL) MultiTexCoord1dv(target glbase.Enum, v []float64) { - C.gl4_0compat_glMultiTexCoord1dv(gl.funcs, C.GLenum(target), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord1d.xml -func (gl *GL) MultiTexCoord1d(target glbase.Enum, s float64) { - C.gl4_0compat_glMultiTexCoord1d(gl.funcs, C.GLenum(target), C.GLdouble(s)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClientActiveTexture.xml -func (gl *GL) ClientActiveTexture(texture glbase.Enum) { - C.gl4_0compat_glClientActiveTexture(gl.funcs, C.GLenum(texture)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWindowPos3sv.xml -func (gl *GL) WindowPos3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glWindowPos3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWindowPos3s.xml -func (gl *GL) WindowPos3s(x, y, z int16) { - C.gl4_0compat_glWindowPos3s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWindowPos3iv.xml -func (gl *GL) WindowPos3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glWindowPos3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWindowPos3i.xml -func (gl *GL) WindowPos3i(x, y, z int) { - C.gl4_0compat_glWindowPos3i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWindowPos3fv.xml -func (gl *GL) WindowPos3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glWindowPos3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWindowPos3f.xml -func (gl *GL) WindowPos3f(x, y, z float32) { - C.gl4_0compat_glWindowPos3f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWindowPos3dv.xml -func (gl *GL) WindowPos3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glWindowPos3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWindowPos3d.xml -func (gl *GL) WindowPos3d(x, y, z float64) { - C.gl4_0compat_glWindowPos3d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWindowPos2sv.xml -func (gl *GL) WindowPos2sv(v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glWindowPos2sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWindowPos2s.xml -func (gl *GL) WindowPos2s(x, y int16) { - C.gl4_0compat_glWindowPos2s(gl.funcs, C.GLshort(x), C.GLshort(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWindowPos2iv.xml -func (gl *GL) WindowPos2iv(v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glWindowPos2iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWindowPos2i.xml -func (gl *GL) WindowPos2i(x, y int) { - C.gl4_0compat_glWindowPos2i(gl.funcs, C.GLint(x), C.GLint(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWindowPos2fv.xml -func (gl *GL) WindowPos2fv(v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glWindowPos2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWindowPos2f.xml -func (gl *GL) WindowPos2f(x, y float32) { - C.gl4_0compat_glWindowPos2f(gl.funcs, C.GLfloat(x), C.GLfloat(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWindowPos2dv.xml -func (gl *GL) WindowPos2dv(v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glWindowPos2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWindowPos2d.xml -func (gl *GL) WindowPos2d(x, y float64) { - C.gl4_0compat_glWindowPos2d(gl.funcs, C.GLdouble(x), C.GLdouble(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColorPointer.xml -func (gl *GL) SecondaryColorPointer(size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl4_0compat_glSecondaryColorPointer(gl.funcs, C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColor3usv.xml -func (gl *GL) SecondaryColor3usv(v []uint16) { - C.gl4_0compat_glSecondaryColor3usv(gl.funcs, (*C.GLushort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColor3us.xml -func (gl *GL) SecondaryColor3us(red, green, blue uint16) { - C.gl4_0compat_glSecondaryColor3us(gl.funcs, C.GLushort(red), C.GLushort(green), C.GLushort(blue)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColor3uiv.xml -func (gl *GL) SecondaryColor3uiv(v []uint32) { - C.gl4_0compat_glSecondaryColor3uiv(gl.funcs, (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColor3ui.xml -func (gl *GL) SecondaryColor3ui(red, green, blue uint32) { - C.gl4_0compat_glSecondaryColor3ui(gl.funcs, C.GLuint(red), C.GLuint(green), C.GLuint(blue)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColor3ubv.xml -func (gl *GL) SecondaryColor3ubv(v []uint8) { - C.gl4_0compat_glSecondaryColor3ubv(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColor3ub.xml -func (gl *GL) SecondaryColor3ub(red, green, blue uint8) { - C.gl4_0compat_glSecondaryColor3ub(gl.funcs, C.GLubyte(red), C.GLubyte(green), C.GLubyte(blue)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColor3sv.xml -func (gl *GL) SecondaryColor3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glSecondaryColor3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColor3s.xml -func (gl *GL) SecondaryColor3s(red, green, blue int16) { - C.gl4_0compat_glSecondaryColor3s(gl.funcs, C.GLshort(red), C.GLshort(green), C.GLshort(blue)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColor3iv.xml -func (gl *GL) SecondaryColor3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glSecondaryColor3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColor3i.xml -func (gl *GL) SecondaryColor3i(red, green, blue int32) { - C.gl4_0compat_glSecondaryColor3i(gl.funcs, C.GLint(red), C.GLint(green), C.GLint(blue)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColor3fv.xml -func (gl *GL) SecondaryColor3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glSecondaryColor3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColor3f.xml -func (gl *GL) SecondaryColor3f(red, green, blue float32) { - C.gl4_0compat_glSecondaryColor3f(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColor3dv.xml -func (gl *GL) SecondaryColor3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glSecondaryColor3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColor3d.xml -func (gl *GL) SecondaryColor3d(red, green, blue float64) { - C.gl4_0compat_glSecondaryColor3d(gl.funcs, C.GLdouble(red), C.GLdouble(green), C.GLdouble(blue)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColor3bv.xml -func (gl *GL) SecondaryColor3bv(v []byte) { - C.gl4_0compat_glSecondaryColor3bv(gl.funcs, (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColor3b.xml -func (gl *GL) SecondaryColor3b(red, green, blue byte) { - C.gl4_0compat_glSecondaryColor3b(gl.funcs, C.GLbyte(red), C.GLbyte(green), C.GLbyte(blue)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFogCoordPointer.xml -func (gl *GL) FogCoordPointer(gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl4_0compat_glFogCoordPointer(gl.funcs, C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFogCoorddv.xml -func (gl *GL) FogCoorddv(coord []float64) { - C.gl4_0compat_glFogCoorddv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&coord[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFogCoordd.xml -func (gl *GL) FogCoordd(coord float64) { - C.gl4_0compat_glFogCoordd(gl.funcs, C.GLdouble(coord)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFogCoordfv.xml -func (gl *GL) FogCoordfv(coord []float32) { - C.gl4_0compat_glFogCoordfv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&coord[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFogCoordf.xml -func (gl *GL) FogCoordf(coord float32) { - C.gl4_0compat_glFogCoordf(gl.funcs, C.GLfloat(coord)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4usv.xml -func (gl *GL) VertexAttrib4usv(index glbase.Attrib, v []uint16) { - C.gl4_0compat_glVertexAttrib4usv(gl.funcs, C.GLuint(index), (*C.GLushort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4uiv.xml -func (gl *GL) VertexAttrib4uiv(index glbase.Attrib, v []uint32) { - C.gl4_0compat_glVertexAttrib4uiv(gl.funcs, C.GLuint(index), (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4ubv.xml -func (gl *GL) VertexAttrib4ubv(index glbase.Attrib, v []uint8) { - C.gl4_0compat_glVertexAttrib4ubv(gl.funcs, C.GLuint(index), (*C.GLubyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4sv.xml -func (gl *GL) VertexAttrib4sv(index glbase.Attrib, v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glVertexAttrib4sv(gl.funcs, C.GLuint(index), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4s.xml -func (gl *GL) VertexAttrib4s(index glbase.Attrib, x, y, z, w int16) { - C.gl4_0compat_glVertexAttrib4s(gl.funcs, C.GLuint(index), C.GLshort(x), C.GLshort(y), C.GLshort(z), C.GLshort(w)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4iv.xml -func (gl *GL) VertexAttrib4iv(index glbase.Attrib, v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glVertexAttrib4iv(gl.funcs, C.GLuint(index), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4fv.xml -func (gl *GL) VertexAttrib4fv(index glbase.Attrib, v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glVertexAttrib4fv(gl.funcs, C.GLuint(index), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4f.xml -func (gl *GL) VertexAttrib4f(index glbase.Attrib, x, y, z, w float32) { - C.gl4_0compat_glVertexAttrib4f(gl.funcs, C.GLuint(index), C.GLfloat(x), C.GLfloat(y), C.GLfloat(z), C.GLfloat(w)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4dv.xml -func (gl *GL) VertexAttrib4dv(index glbase.Attrib, v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glVertexAttrib4dv(gl.funcs, C.GLuint(index), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4d.xml -func (gl *GL) VertexAttrib4d(index glbase.Attrib, x, y, z, w float64) { - C.gl4_0compat_glVertexAttrib4d(gl.funcs, C.GLuint(index), C.GLdouble(x), C.GLdouble(y), C.GLdouble(z), C.GLdouble(w)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4bv.xml -func (gl *GL) VertexAttrib4bv(index glbase.Attrib, v []byte) { - C.gl4_0compat_glVertexAttrib4bv(gl.funcs, C.GLuint(index), (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4Nusv.xml -func (gl *GL) VertexAttrib4Nusv(index glbase.Attrib, v []uint16) { - C.gl4_0compat_glVertexAttrib4Nusv(gl.funcs, C.GLuint(index), (*C.GLushort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4Nuiv.xml -func (gl *GL) VertexAttrib4Nuiv(index glbase.Attrib, v []uint32) { - C.gl4_0compat_glVertexAttrib4Nuiv(gl.funcs, C.GLuint(index), (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4Nubv.xml -func (gl *GL) VertexAttrib4Nubv(index glbase.Attrib, v []uint8) { - C.gl4_0compat_glVertexAttrib4Nubv(gl.funcs, C.GLuint(index), (*C.GLubyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4Nub.xml -func (gl *GL) VertexAttrib4Nub(index glbase.Attrib, x, y, z, w uint8) { - C.gl4_0compat_glVertexAttrib4Nub(gl.funcs, C.GLuint(index), C.GLubyte(x), C.GLubyte(y), C.GLubyte(z), C.GLubyte(w)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4Nsv.xml -func (gl *GL) VertexAttrib4Nsv(index glbase.Attrib, v []int16) { - C.gl4_0compat_glVertexAttrib4Nsv(gl.funcs, C.GLuint(index), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4Niv.xml -func (gl *GL) VertexAttrib4Niv(index glbase.Attrib, v []int32) { - C.gl4_0compat_glVertexAttrib4Niv(gl.funcs, C.GLuint(index), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4Nbv.xml -func (gl *GL) VertexAttrib4Nbv(index glbase.Attrib, v []byte) { - C.gl4_0compat_glVertexAttrib4Nbv(gl.funcs, C.GLuint(index), (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib3sv.xml -func (gl *GL) VertexAttrib3sv(index glbase.Attrib, v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glVertexAttrib3sv(gl.funcs, C.GLuint(index), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib3s.xml -func (gl *GL) VertexAttrib3s(index glbase.Attrib, x, y, z int16) { - C.gl4_0compat_glVertexAttrib3s(gl.funcs, C.GLuint(index), C.GLshort(x), C.GLshort(y), C.GLshort(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib3fv.xml -func (gl *GL) VertexAttrib3fv(index glbase.Attrib, v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glVertexAttrib3fv(gl.funcs, C.GLuint(index), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib3f.xml -func (gl *GL) VertexAttrib3f(index glbase.Attrib, x, y, z float32) { - C.gl4_0compat_glVertexAttrib3f(gl.funcs, C.GLuint(index), C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib3dv.xml -func (gl *GL) VertexAttrib3dv(index glbase.Attrib, v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glVertexAttrib3dv(gl.funcs, C.GLuint(index), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib3d.xml -func (gl *GL) VertexAttrib3d(index glbase.Attrib, x, y, z float64) { - C.gl4_0compat_glVertexAttrib3d(gl.funcs, C.GLuint(index), C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib2sv.xml -func (gl *GL) VertexAttrib2sv(index glbase.Attrib, v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glVertexAttrib2sv(gl.funcs, C.GLuint(index), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib2s.xml -func (gl *GL) VertexAttrib2s(index glbase.Attrib, x, y int16) { - C.gl4_0compat_glVertexAttrib2s(gl.funcs, C.GLuint(index), C.GLshort(x), C.GLshort(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib2fv.xml -func (gl *GL) VertexAttrib2fv(index glbase.Attrib, v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glVertexAttrib2fv(gl.funcs, C.GLuint(index), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib2f.xml -func (gl *GL) VertexAttrib2f(index glbase.Attrib, x, y float32) { - C.gl4_0compat_glVertexAttrib2f(gl.funcs, C.GLuint(index), C.GLfloat(x), C.GLfloat(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib2dv.xml -func (gl *GL) VertexAttrib2dv(index glbase.Attrib, v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glVertexAttrib2dv(gl.funcs, C.GLuint(index), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib2d.xml -func (gl *GL) VertexAttrib2d(index glbase.Attrib, x, y float64) { - C.gl4_0compat_glVertexAttrib2d(gl.funcs, C.GLuint(index), C.GLdouble(x), C.GLdouble(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib1sv.xml -func (gl *GL) VertexAttrib1sv(index glbase.Attrib, v []int16) { - C.gl4_0compat_glVertexAttrib1sv(gl.funcs, C.GLuint(index), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib1s.xml -func (gl *GL) VertexAttrib1s(index glbase.Attrib, x int16) { - C.gl4_0compat_glVertexAttrib1s(gl.funcs, C.GLuint(index), C.GLshort(x)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib1fv.xml -func (gl *GL) VertexAttrib1fv(index glbase.Attrib, v []float32) { - C.gl4_0compat_glVertexAttrib1fv(gl.funcs, C.GLuint(index), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib1f.xml -func (gl *GL) VertexAttrib1f(index glbase.Attrib, x float32) { - C.gl4_0compat_glVertexAttrib1f(gl.funcs, C.GLuint(index), C.GLfloat(x)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib1dv.xml -func (gl *GL) VertexAttrib1dv(index glbase.Attrib, v []float64) { - C.gl4_0compat_glVertexAttrib1dv(gl.funcs, C.GLuint(index), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib1d.xml -func (gl *GL) VertexAttrib1d(index glbase.Attrib, x float64) { - C.gl4_0compat_glVertexAttrib1d(gl.funcs, C.GLuint(index), C.GLdouble(x)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI4usv.xml -func (gl *GL) VertexAttribI4usv(index glbase.Attrib, v []uint16) { - C.gl4_0compat_glVertexAttribI4usv(gl.funcs, C.GLuint(index), (*C.GLushort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI4ubv.xml -func (gl *GL) VertexAttribI4ubv(index glbase.Attrib, v []uint8) { - C.gl4_0compat_glVertexAttribI4ubv(gl.funcs, C.GLuint(index), (*C.GLubyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI4sv.xml -func (gl *GL) VertexAttribI4sv(index glbase.Attrib, v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glVertexAttribI4sv(gl.funcs, C.GLuint(index), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI4bv.xml -func (gl *GL) VertexAttribI4bv(index glbase.Attrib, v []byte) { - C.gl4_0compat_glVertexAttribI4bv(gl.funcs, C.GLuint(index), (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI4uiv.xml -func (gl *GL) VertexAttribI4uiv(index glbase.Attrib, v []uint32) { - C.gl4_0compat_glVertexAttribI4uiv(gl.funcs, C.GLuint(index), (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI3uiv.xml -func (gl *GL) VertexAttribI3uiv(index glbase.Attrib, v []uint32) { - C.gl4_0compat_glVertexAttribI3uiv(gl.funcs, C.GLuint(index), (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI2uiv.xml -func (gl *GL) VertexAttribI2uiv(index glbase.Attrib, v []uint32) { - C.gl4_0compat_glVertexAttribI2uiv(gl.funcs, C.GLuint(index), (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI1uiv.xml -func (gl *GL) VertexAttribI1uiv(index glbase.Attrib, v []uint32) { - C.gl4_0compat_glVertexAttribI1uiv(gl.funcs, C.GLuint(index), (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI4iv.xml -func (gl *GL) VertexAttribI4iv(index glbase.Attrib, v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glVertexAttribI4iv(gl.funcs, C.GLuint(index), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI3iv.xml -func (gl *GL) VertexAttribI3iv(index glbase.Attrib, v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glVertexAttribI3iv(gl.funcs, C.GLuint(index), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI2iv.xml -func (gl *GL) VertexAttribI2iv(index glbase.Attrib, v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_0compat_glVertexAttribI2iv(gl.funcs, C.GLuint(index), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI1iv.xml -func (gl *GL) VertexAttribI1iv(index glbase.Attrib, v []int32) { - C.gl4_0compat_glVertexAttribI1iv(gl.funcs, C.GLuint(index), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI4ui.xml -func (gl *GL) VertexAttribI4ui(index glbase.Attrib, x, y, z, w uint32) { - C.gl4_0compat_glVertexAttribI4ui(gl.funcs, C.GLuint(index), C.GLuint(x), C.GLuint(y), C.GLuint(z), C.GLuint(w)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI3ui.xml -func (gl *GL) VertexAttribI3ui(index glbase.Attrib, x, y, z uint32) { - C.gl4_0compat_glVertexAttribI3ui(gl.funcs, C.GLuint(index), C.GLuint(x), C.GLuint(y), C.GLuint(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI2ui.xml -func (gl *GL) VertexAttribI2ui(index glbase.Attrib, x, y uint32) { - C.gl4_0compat_glVertexAttribI2ui(gl.funcs, C.GLuint(index), C.GLuint(x), C.GLuint(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI1ui.xml -func (gl *GL) VertexAttribI1ui(index glbase.Attrib, x uint32) { - C.gl4_0compat_glVertexAttribI1ui(gl.funcs, C.GLuint(index), C.GLuint(x)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI4i.xml -func (gl *GL) VertexAttribI4i(index glbase.Attrib, x, y, z, w int) { - C.gl4_0compat_glVertexAttribI4i(gl.funcs, C.GLuint(index), C.GLint(x), C.GLint(y), C.GLint(z), C.GLint(w)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI3i.xml -func (gl *GL) VertexAttribI3i(index glbase.Attrib, x, y, z int) { - C.gl4_0compat_glVertexAttribI3i(gl.funcs, C.GLuint(index), C.GLint(x), C.GLint(y), C.GLint(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI2i.xml -func (gl *GL) VertexAttribI2i(index glbase.Attrib, x, y int) { - C.gl4_0compat_glVertexAttribI2i(gl.funcs, C.GLuint(index), C.GLint(x), C.GLint(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI1i.xml -func (gl *GL) VertexAttribI1i(index glbase.Attrib, x int) { - C.gl4_0compat_glVertexAttribI1i(gl.funcs, C.GLuint(index), C.GLint(x)) -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.0core/funcs.cpp b/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.0core/funcs.cpp deleted file mode 100644 index 1be157d647..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.0core/funcs.cpp +++ /dev/null @@ -1,2154 +0,0 @@ - -// ** file automatically generated by glgen -- do not edit manually ** - -#include -#include - -#include "funcs.h" - -void *gl4_0core_funcs() { - QOpenGLFunctions_4_0_Core* funcs = QOpenGLContext::currentContext()->versionFunctions(); - if (!funcs) { - return 0; - } - funcs->initializeOpenGLFunctions(); - return funcs; -} - - -void gl4_0core_glViewport(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glViewport(x, y, width, height); -} - -void gl4_0core_glDepthRange(void *_glfuncs, GLdouble nearVal, GLdouble farVal) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthRange(nearVal, farVal); -} - -GLboolean gl4_0core_glIsEnabled(void *_glfuncs, GLenum cap) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsEnabled(cap); -} - -void gl4_0core_glGetTexLevelParameteriv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexLevelParameteriv(target, level, pname, params); -} - -void gl4_0core_glGetTexLevelParameterfv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexLevelParameterfv(target, level, pname, params); -} - -void gl4_0core_glGetTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameteriv(target, pname, params); -} - -void gl4_0core_glGetTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameterfv(target, pname, params); -} - -void gl4_0core_glGetTexImage(void *_glfuncs, GLenum target, GLint level, GLenum format, GLenum gltype, GLvoid* pixels) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexImage(target, level, format, gltype, pixels); -} - -void gl4_0core_glGetIntegerv(void *_glfuncs, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetIntegerv(pname, params); -} - -void gl4_0core_glGetFloatv(void *_glfuncs, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetFloatv(pname, params); -} - -GLenum gl4_0core_glGetError(void *_glfuncs) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetError(); -} - -void gl4_0core_glGetDoublev(void *_glfuncs, GLenum pname, GLdouble* params) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetDoublev(pname, params); -} - -void gl4_0core_glGetBooleanv(void *_glfuncs, GLenum pname, GLboolean* params) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBooleanv(pname, params); -} - -void gl4_0core_glReadPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum gltype, GLvoid* pixels) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glReadPixels(x, y, width, height, format, gltype, pixels); -} - -void gl4_0core_glReadBuffer(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glReadBuffer(mode); -} - -void gl4_0core_glPixelStorei(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelStorei(pname, param); -} - -void gl4_0core_glPixelStoref(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelStoref(pname, param); -} - -void gl4_0core_glDepthFunc(void *_glfuncs, GLenum glfunc) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthFunc(glfunc); -} - -void gl4_0core_glStencilOp(void *_glfuncs, GLenum fail, GLenum zfail, GLenum zpass) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilOp(fail, zfail, zpass); -} - -void gl4_0core_glStencilFunc(void *_glfuncs, GLenum glfunc, GLint ref, GLuint mask) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilFunc(glfunc, ref, mask); -} - -void gl4_0core_glLogicOp(void *_glfuncs, GLenum opcode) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLogicOp(opcode); -} - -void gl4_0core_glBlendFunc(void *_glfuncs, GLenum sfactor, GLenum dfactor) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendFunc(sfactor, dfactor); -} - -void gl4_0core_glFlush(void *_glfuncs) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFlush(); -} - -void gl4_0core_glFinish(void *_glfuncs) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFinish(); -} - -void gl4_0core_glEnable(void *_glfuncs, GLenum cap) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnable(cap); -} - -void gl4_0core_glDisable(void *_glfuncs, GLenum cap) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDisable(cap); -} - -void gl4_0core_glDepthMask(void *_glfuncs, GLboolean flag) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthMask(flag); -} - -void gl4_0core_glColorMask(void *_glfuncs, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorMask(red, green, blue, alpha); -} - -void gl4_0core_glStencilMask(void *_glfuncs, GLuint mask) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilMask(mask); -} - -void gl4_0core_glClearDepth(void *_glfuncs, GLdouble depth) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearDepth(depth); -} - -void gl4_0core_glClearStencil(void *_glfuncs, GLint s) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearStencil(s); -} - -void gl4_0core_glClearColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearColor(red, green, blue, alpha); -} - -void gl4_0core_glClear(void *_glfuncs, GLbitfield mask) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClear(mask); -} - -void gl4_0core_glDrawBuffer(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawBuffer(mode); -} - -void gl4_0core_glTexImage2D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage2D(target, level, internalFormat, width, height, border, format, gltype, pixels); -} - -void gl4_0core_glTexImage1D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage1D(target, level, internalFormat, width, border, format, gltype, pixels); -} - -void gl4_0core_glTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameteriv(target, pname, params); -} - -void gl4_0core_glTexParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint param) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameteri(target, pname, param); -} - -void gl4_0core_glTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterfv(target, pname, params); -} - -void gl4_0core_glTexParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterf(target, pname, param); -} - -void gl4_0core_glScissor(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScissor(x, y, width, height); -} - -void gl4_0core_glPolygonMode(void *_glfuncs, GLenum face, GLenum mode) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPolygonMode(face, mode); -} - -void gl4_0core_glPointSize(void *_glfuncs, GLfloat size) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointSize(size); -} - -void gl4_0core_glLineWidth(void *_glfuncs, GLfloat width) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLineWidth(width); -} - -void gl4_0core_glHint(void *_glfuncs, GLenum target, GLenum mode) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glHint(target, mode); -} - -void gl4_0core_glFrontFace(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFrontFace(mode); -} - -void gl4_0core_glCullFace(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCullFace(mode); -} - -void gl4_0core_glIndexubv(void *_glfuncs, const GLubyte* c) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexubv(c); -} - -void gl4_0core_glIndexub(void *_glfuncs, GLubyte c) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexub(c); -} - -GLboolean gl4_0core_glIsTexture(void *_glfuncs, GLuint texture) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsTexture(texture); -} - -void gl4_0core_glGenTextures(void *_glfuncs, GLsizei n, GLuint* textures) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenTextures(n, textures); -} - -void gl4_0core_glDeleteTextures(void *_glfuncs, GLsizei n, const GLuint* textures) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteTextures(n, textures); -} - -void gl4_0core_glBindTexture(void *_glfuncs, GLenum target, GLuint texture) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindTexture(target, texture); -} - -void gl4_0core_glTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, gltype, pixels); -} - -void gl4_0core_glTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexSubImage1D(target, level, xoffset, width, format, gltype, pixels); -} - -void gl4_0core_glCopyTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height); -} - -void gl4_0core_glCopyTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexSubImage1D(target, level, xoffset, x, y, width); -} - -void gl4_0core_glCopyTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexImage2D(target, level, internalFormat, x, y, width, height, border); -} - -void gl4_0core_glCopyTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexImage1D(target, level, internalFormat, x, y, width, border); -} - -void gl4_0core_glPolygonOffset(void *_glfuncs, GLfloat factor, GLfloat units) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPolygonOffset(factor, units); -} - -void gl4_0core_glDrawElements(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElements(mode, count, gltype, indices); -} - -void gl4_0core_glDrawArrays(void *_glfuncs, GLenum mode, GLint first, GLsizei count) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawArrays(mode, first, count); -} - -void gl4_0core_glCopyTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexSubImage3D(target, level, xoffset, yoffset, zoffset, x, y, width, height); -} - -void gl4_0core_glTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, gltype, pixels); -} - -void gl4_0core_glTexImage3D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage3D(target, level, internalFormat, width, height, depth, border, format, gltype, pixels); -} - -void gl4_0core_glDrawRangeElements(void *_glfuncs, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum gltype, const GLvoid* indices) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawRangeElements(mode, start, end, count, gltype, indices); -} - -void gl4_0core_glBlendEquation(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendEquation(mode); -} - -void gl4_0core_glBlendColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendColor(red, green, blue, alpha); -} - -void gl4_0core_glGetCompressedTexImage(void *_glfuncs, GLenum target, GLint level, GLvoid* img) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetCompressedTexImage(target, level, img); -} - -void gl4_0core_glCompressedTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexSubImage1D(target, level, xoffset, width, format, imageSize, data); -} - -void gl4_0core_glCompressedTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data); -} - -void gl4_0core_glCompressedTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data); -} - -void gl4_0core_glCompressedTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexImage1D(target, level, internalFormat, width, border, imageSize, data); -} - -void gl4_0core_glCompressedTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexImage2D(target, level, internalFormat, width, height, border, imageSize, data); -} - -void gl4_0core_glCompressedTexImage3D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexImage3D(target, level, internalFormat, width, height, depth, border, imageSize, data); -} - -void gl4_0core_glSampleCoverage(void *_glfuncs, GLfloat value, GLboolean invert) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSampleCoverage(value, invert); -} - -void gl4_0core_glActiveTexture(void *_glfuncs, GLenum texture) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glActiveTexture(texture); -} - -void gl4_0core_glPointParameteriv(void *_glfuncs, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameteriv(pname, params); -} - -void gl4_0core_glPointParameteri(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameteri(pname, param); -} - -void gl4_0core_glPointParameterfv(void *_glfuncs, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameterfv(pname, params); -} - -void gl4_0core_glPointParameterf(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameterf(pname, param); -} - -void gl4_0core_glMultiDrawArrays(void *_glfuncs, GLenum mode, const GLint* first, const GLsizei* count, GLsizei drawcount) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiDrawArrays(mode, first, count, drawcount); -} - -void gl4_0core_glBlendFuncSeparate(void *_glfuncs, GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendFuncSeparate(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha); -} - -void gl4_0core_glGetBufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBufferParameteriv(target, pname, params); -} - -GLboolean gl4_0core_glUnmapBuffer(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glUnmapBuffer(target); -} - -void gl4_0core_glGetBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, GLvoid* data) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBufferSubData(target, offset, size, data); -} - -void gl4_0core_glBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBufferSubData(target, offset, size, data); -} - -void gl4_0core_glBufferData(void *_glfuncs, GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBufferData(target, size, data, usage); -} - -GLboolean gl4_0core_glIsBuffer(void *_glfuncs, GLuint buffer) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsBuffer(buffer); -} - -void gl4_0core_glGenBuffers(void *_glfuncs, GLsizei n, GLuint* buffers) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenBuffers(n, buffers); -} - -void gl4_0core_glDeleteBuffers(void *_glfuncs, GLsizei n, const GLuint* buffers) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteBuffers(n, buffers); -} - -void gl4_0core_glBindBuffer(void *_glfuncs, GLenum target, GLuint buffer) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindBuffer(target, buffer); -} - -void gl4_0core_glGetQueryObjectuiv(void *_glfuncs, GLuint id, GLenum pname, GLuint* params) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryObjectuiv(id, pname, params); -} - -void gl4_0core_glGetQueryObjectiv(void *_glfuncs, GLuint id, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryObjectiv(id, pname, params); -} - -void gl4_0core_glGetQueryiv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryiv(target, pname, params); -} - -void gl4_0core_glEndQuery(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndQuery(target); -} - -void gl4_0core_glBeginQuery(void *_glfuncs, GLenum target, GLuint id) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBeginQuery(target, id); -} - -GLboolean gl4_0core_glIsQuery(void *_glfuncs, GLuint id) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsQuery(id); -} - -void gl4_0core_glDeleteQueries(void *_glfuncs, GLsizei n, const GLuint* ids) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteQueries(n, ids); -} - -void gl4_0core_glGenQueries(void *_glfuncs, GLsizei n, GLuint* ids) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenQueries(n, ids); -} - -void gl4_0core_glVertexAttribPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLboolean normalized, GLsizei stride, const GLvoid* offset) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribPointer(index, size, gltype, normalized, stride, offset); -} - -void gl4_0core_glValidateProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glValidateProgram(program); -} - -void gl4_0core_glUniformMatrix4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4fv(location, count, transpose, value); -} - -void gl4_0core_glUniformMatrix3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3fv(location, count, transpose, value); -} - -void gl4_0core_glUniformMatrix2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2fv(location, count, transpose, value); -} - -void gl4_0core_glUniform4iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4iv(location, count, value); -} - -void gl4_0core_glUniform3iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3iv(location, count, value); -} - -void gl4_0core_glUniform2iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2iv(location, count, value); -} - -void gl4_0core_glUniform1iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1iv(location, count, value); -} - -void gl4_0core_glUniform4fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4fv(location, count, value); -} - -void gl4_0core_glUniform3fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3fv(location, count, value); -} - -void gl4_0core_glUniform2fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2fv(location, count, value); -} - -void gl4_0core_glUniform1fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1fv(location, count, value); -} - -void gl4_0core_glUniform4i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2, GLint v3) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4i(location, v0, v1, v2, v3); -} - -void gl4_0core_glUniform3i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3i(location, v0, v1, v2); -} - -void gl4_0core_glUniform2i(void *_glfuncs, GLint location, GLint v0, GLint v1) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2i(location, v0, v1); -} - -void gl4_0core_glUniform1i(void *_glfuncs, GLint location, GLint v0) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1i(location, v0); -} - -void gl4_0core_glUniform4f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4f(location, v0, v1, v2, v3); -} - -void gl4_0core_glUniform3f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3f(location, v0, v1, v2); -} - -void gl4_0core_glUniform2f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2f(location, v0, v1); -} - -void gl4_0core_glUniform1f(void *_glfuncs, GLint location, GLfloat v0) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1f(location, v0); -} - -void gl4_0core_glUseProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUseProgram(program); -} - -void gl4_0core_glShaderSource(void *_glfuncs, GLuint shader, GLsizei count, const GLchar** source, const GLint* length) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glShaderSource(shader, count, source, length); -} - -void gl4_0core_glLinkProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLinkProgram(program); -} - -GLboolean gl4_0core_glIsShader(void *_glfuncs, GLuint shader) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsShader(shader); -} - -GLboolean gl4_0core_glIsProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsProgram(program); -} - -void gl4_0core_glGetVertexAttribiv(void *_glfuncs, GLuint index, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribiv(index, pname, params); -} - -void gl4_0core_glGetVertexAttribfv(void *_glfuncs, GLuint index, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribfv(index, pname, params); -} - -void gl4_0core_glGetVertexAttribdv(void *_glfuncs, GLuint index, GLenum pname, GLdouble* params) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribdv(index, pname, params); -} - -void gl4_0core_glGetUniformiv(void *_glfuncs, GLuint program, GLint location, GLint* params) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetUniformiv(program, location, params); -} - -void gl4_0core_glGetUniformfv(void *_glfuncs, GLuint program, GLint location, GLfloat* params) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetUniformfv(program, location, params); -} - -GLint gl4_0core_glGetUniformLocation(void *_glfuncs, GLuint program, const GLchar* name) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetUniformLocation(program, name); -} - -void gl4_0core_glGetShaderSource(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* source) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetShaderSource(shader, bufSize, length, source); -} - -void gl4_0core_glGetShaderInfoLog(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* infoLog) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetShaderInfoLog(shader, bufSize, length, infoLog); -} - -void gl4_0core_glGetShaderiv(void *_glfuncs, GLuint shader, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetShaderiv(shader, pname, params); -} - -void gl4_0core_glGetProgramInfoLog(void *_glfuncs, GLuint program, GLsizei bufSize, GLsizei* length, GLchar* infoLog) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetProgramInfoLog(program, bufSize, length, infoLog); -} - -void gl4_0core_glGetProgramiv(void *_glfuncs, GLuint program, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetProgramiv(program, pname, params); -} - -GLint gl4_0core_glGetAttribLocation(void *_glfuncs, GLuint program, const GLchar* name) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetAttribLocation(program, name); -} - -void gl4_0core_glGetAttachedShaders(void *_glfuncs, GLuint program, GLsizei maxCount, GLsizei* count, GLuint* obj) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetAttachedShaders(program, maxCount, count, obj); -} - -void gl4_0core_glGetActiveUniform(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniform(program, index, bufSize, length, size, gltype, name); -} - -void gl4_0core_glGetActiveAttrib(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveAttrib(program, index, bufSize, length, size, gltype, name); -} - -void gl4_0core_glEnableVertexAttribArray(void *_glfuncs, GLuint index) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnableVertexAttribArray(index); -} - -void gl4_0core_glDisableVertexAttribArray(void *_glfuncs, GLuint index) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDisableVertexAttribArray(index); -} - -void gl4_0core_glDetachShader(void *_glfuncs, GLuint program, GLuint shader) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDetachShader(program, shader); -} - -void gl4_0core_glDeleteShader(void *_glfuncs, GLuint shader) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteShader(shader); -} - -void gl4_0core_glDeleteProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteProgram(program); -} - -GLuint gl4_0core_glCreateShader(void *_glfuncs, GLenum gltype) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glCreateShader(gltype); -} - -GLuint gl4_0core_glCreateProgram(void *_glfuncs) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glCreateProgram(); -} - -void gl4_0core_glCompileShader(void *_glfuncs, GLuint shader) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompileShader(shader); -} - -void gl4_0core_glBindAttribLocation(void *_glfuncs, GLuint program, GLuint index, const GLchar* name) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindAttribLocation(program, index, name); -} - -void gl4_0core_glAttachShader(void *_glfuncs, GLuint program, GLuint shader) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glAttachShader(program, shader); -} - -void gl4_0core_glStencilMaskSeparate(void *_glfuncs, GLenum face, GLuint mask) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilMaskSeparate(face, mask); -} - -void gl4_0core_glStencilFuncSeparate(void *_glfuncs, GLenum face, GLenum glfunc, GLint ref, GLuint mask) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilFuncSeparate(face, glfunc, ref, mask); -} - -void gl4_0core_glStencilOpSeparate(void *_glfuncs, GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilOpSeparate(face, sfail, dpfail, dppass); -} - -void gl4_0core_glDrawBuffers(void *_glfuncs, GLsizei n, const GLenum* bufs) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawBuffers(n, bufs); -} - -void gl4_0core_glBlendEquationSeparate(void *_glfuncs, GLenum modeRGB, GLenum modeAlpha) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendEquationSeparate(modeRGB, modeAlpha); -} - -void gl4_0core_glUniformMatrix4x3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4x3fv(location, count, transpose, value); -} - -void gl4_0core_glUniformMatrix3x4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3x4fv(location, count, transpose, value); -} - -void gl4_0core_glUniformMatrix4x2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4x2fv(location, count, transpose, value); -} - -void gl4_0core_glUniformMatrix2x4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2x4fv(location, count, transpose, value); -} - -void gl4_0core_glUniformMatrix3x2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3x2fv(location, count, transpose, value); -} - -void gl4_0core_glUniformMatrix2x3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2x3fv(location, count, transpose, value); -} - -GLboolean gl4_0core_glIsVertexArray(void *_glfuncs, GLuint array) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsVertexArray(array); -} - -void gl4_0core_glGenVertexArrays(void *_glfuncs, GLsizei n, GLuint* arrays) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenVertexArrays(n, arrays); -} - -void gl4_0core_glDeleteVertexArrays(void *_glfuncs, GLsizei n, const GLuint* arrays) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteVertexArrays(n, arrays); -} - -void gl4_0core_glBindVertexArray(void *_glfuncs, GLuint array) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindVertexArray(array); -} - -void gl4_0core_glFlushMappedBufferRange(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr length) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFlushMappedBufferRange(target, offset, length); -} - -void gl4_0core_glFramebufferTextureLayer(void *_glfuncs, GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTextureLayer(target, attachment, texture, level, layer); -} - -void gl4_0core_glRenderbufferStorageMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRenderbufferStorageMultisample(target, samples, internalFormat, width, height); -} - -void gl4_0core_glBlitFramebuffer(void *_glfuncs, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter); -} - -void gl4_0core_glGenerateMipmap(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenerateMipmap(target); -} - -void gl4_0core_glGetFramebufferAttachmentParameteriv(void *_glfuncs, GLenum target, GLenum attachment, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetFramebufferAttachmentParameteriv(target, attachment, pname, params); -} - -void gl4_0core_glFramebufferRenderbuffer(void *_glfuncs, GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer); -} - -void gl4_0core_glFramebufferTexture3D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTexture3D(target, attachment, textarget, texture, level, zoffset); -} - -void gl4_0core_glFramebufferTexture2D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTexture2D(target, attachment, textarget, texture, level); -} - -void gl4_0core_glFramebufferTexture1D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTexture1D(target, attachment, textarget, texture, level); -} - -GLenum gl4_0core_glCheckFramebufferStatus(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glCheckFramebufferStatus(target); -} - -void gl4_0core_glGenFramebuffers(void *_glfuncs, GLsizei n, GLuint* framebuffers) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenFramebuffers(n, framebuffers); -} - -void gl4_0core_glDeleteFramebuffers(void *_glfuncs, GLsizei n, const GLuint* framebuffers) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteFramebuffers(n, framebuffers); -} - -void gl4_0core_glBindFramebuffer(void *_glfuncs, GLenum target, GLuint framebuffer) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindFramebuffer(target, framebuffer); -} - -GLboolean gl4_0core_glIsFramebuffer(void *_glfuncs, GLuint framebuffer) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsFramebuffer(framebuffer); -} - -void gl4_0core_glGetRenderbufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetRenderbufferParameteriv(target, pname, params); -} - -void gl4_0core_glRenderbufferStorage(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRenderbufferStorage(target, internalFormat, width, height); -} - -void gl4_0core_glGenRenderbuffers(void *_glfuncs, GLsizei n, GLuint* renderbuffers) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenRenderbuffers(n, renderbuffers); -} - -void gl4_0core_glDeleteRenderbuffers(void *_glfuncs, GLsizei n, const GLuint* renderbuffers) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteRenderbuffers(n, renderbuffers); -} - -void gl4_0core_glBindRenderbuffer(void *_glfuncs, GLenum target, GLuint renderbuffer) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindRenderbuffer(target, renderbuffer); -} - -GLboolean gl4_0core_glIsRenderbuffer(void *_glfuncs, GLuint renderbuffer) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsRenderbuffer(renderbuffer); -} - -void gl4_0core_glClearBufferfi(void *_glfuncs, GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearBufferfi(buffer, drawbuffer, depth, stencil); -} - -void gl4_0core_glClearBufferfv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLfloat* value) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearBufferfv(buffer, drawbuffer, value); -} - -void gl4_0core_glClearBufferuiv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLuint* value) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearBufferuiv(buffer, drawbuffer, value); -} - -void gl4_0core_glClearBufferiv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLint* value) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearBufferiv(buffer, drawbuffer, value); -} - -void gl4_0core_glGetTexParameterIuiv(void *_glfuncs, GLenum target, GLenum pname, GLuint* params) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameterIuiv(target, pname, params); -} - -void gl4_0core_glGetTexParameterIiv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameterIiv(target, pname, params); -} - -void gl4_0core_glTexParameterIuiv(void *_glfuncs, GLenum target, GLenum pname, const GLuint* params) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterIuiv(target, pname, params); -} - -void gl4_0core_glTexParameterIiv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterIiv(target, pname, params); -} - -void gl4_0core_glUniform4uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4uiv(location, count, value); -} - -void gl4_0core_glUniform3uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3uiv(location, count, value); -} - -void gl4_0core_glUniform2uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2uiv(location, count, value); -} - -void gl4_0core_glUniform1uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1uiv(location, count, value); -} - -void gl4_0core_glUniform4ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4ui(location, v0, v1, v2, v3); -} - -void gl4_0core_glUniform3ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1, GLuint v2) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3ui(location, v0, v1, v2); -} - -void gl4_0core_glUniform2ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2ui(location, v0, v1); -} - -void gl4_0core_glUniform1ui(void *_glfuncs, GLint location, GLuint v0) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1ui(location, v0); -} - -GLint gl4_0core_glGetFragDataLocation(void *_glfuncs, GLuint program, const GLchar* name) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetFragDataLocation(program, name); -} - -void gl4_0core_glBindFragDataLocation(void *_glfuncs, GLuint program, GLuint color, const GLchar* name) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindFragDataLocation(program, color, name); -} - -void gl4_0core_glGetUniformuiv(void *_glfuncs, GLuint program, GLint location, GLuint* params) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetUniformuiv(program, location, params); -} - -void gl4_0core_glGetVertexAttribIuiv(void *_glfuncs, GLuint index, GLenum pname, GLuint* params) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribIuiv(index, pname, params); -} - -void gl4_0core_glGetVertexAttribIiv(void *_glfuncs, GLuint index, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribIiv(index, pname, params); -} - -void gl4_0core_glVertexAttribIPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribIPointer(index, size, gltype, stride, pointer); -} - -void gl4_0core_glEndConditionalRender(void *_glfuncs) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndConditionalRender(); -} - -void gl4_0core_glBeginConditionalRender(void *_glfuncs, GLuint id, GLenum mode) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBeginConditionalRender(id, mode); -} - -void gl4_0core_glClampColor(void *_glfuncs, GLenum target, GLenum clamp) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClampColor(target, clamp); -} - -void gl4_0core_glGetTransformFeedbackVarying(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* gltype, GLchar* name) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTransformFeedbackVarying(program, index, bufSize, length, size, gltype, name); -} - -void gl4_0core_glBindBufferBase(void *_glfuncs, GLenum target, GLuint index, GLuint buffer) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindBufferBase(target, index, buffer); -} - -void gl4_0core_glBindBufferRange(void *_glfuncs, GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindBufferRange(target, index, buffer, offset, size); -} - -void gl4_0core_glEndTransformFeedback(void *_glfuncs) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndTransformFeedback(); -} - -void gl4_0core_glBeginTransformFeedback(void *_glfuncs, GLenum primitiveMode) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBeginTransformFeedback(primitiveMode); -} - -GLboolean gl4_0core_glIsEnabledi(void *_glfuncs, GLenum target, GLuint index) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsEnabledi(target, index); -} - -void gl4_0core_glDisablei(void *_glfuncs, GLenum target, GLuint index) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDisablei(target, index); -} - -void gl4_0core_glEnablei(void *_glfuncs, GLenum target, GLuint index) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnablei(target, index); -} - -void gl4_0core_glGetIntegeri_v(void *_glfuncs, GLenum target, GLuint index, GLint* data) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetIntegeri_v(target, index, data); -} - -void gl4_0core_glGetBooleani_v(void *_glfuncs, GLenum target, GLuint index, GLboolean* data) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBooleani_v(target, index, data); -} - -void gl4_0core_glColorMaski(void *_glfuncs, GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorMaski(index, r, g, b, a); -} - -void gl4_0core_glCopyBufferSubData(void *_glfuncs, GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyBufferSubData(readTarget, writeTarget, readOffset, writeOffset, size); -} - -void gl4_0core_glUniformBlockBinding(void *_glfuncs, GLuint program, GLuint v0, GLuint v1) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformBlockBinding(program, v0, v1); -} - -void gl4_0core_glGetActiveUniformBlockName(void *_glfuncs, GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformBlockName) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniformBlockName(program, uniformBlockIndex, bufSize, length, uniformBlockName); -} - -void gl4_0core_glGetActiveUniformBlockiv(void *_glfuncs, GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniformBlockiv(program, uniformBlockIndex, pname, params); -} - -GLuint gl4_0core_glGetUniformBlockIndex(void *_glfuncs, GLuint program, const GLchar* uniformBlockName) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetUniformBlockIndex(program, uniformBlockName); -} - -void gl4_0core_glGetActiveUniformName(void *_glfuncs, GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformName) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniformName(program, uniformIndex, bufSize, length, uniformName); -} - -void gl4_0core_glGetActiveUniformsiv(void *_glfuncs, GLuint program, GLsizei uniformCount, const GLuint* uniformIndices, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniformsiv(program, uniformCount, uniformIndices, pname, params); -} - -void gl4_0core_glPrimitiveRestartIndex(void *_glfuncs, GLuint index) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPrimitiveRestartIndex(index); -} - -void gl4_0core_glTexBuffer(void *_glfuncs, GLenum target, GLenum internalFormat, GLuint buffer) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexBuffer(target, internalFormat, buffer); -} - -void gl4_0core_glDrawElementsInstanced(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLsizei instancecount) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElementsInstanced(mode, count, gltype, indices, instancecount); -} - -void gl4_0core_glDrawArraysInstanced(void *_glfuncs, GLenum mode, GLint first, GLsizei count, GLsizei instancecount) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawArraysInstanced(mode, first, count, instancecount); -} - -void gl4_0core_glSampleMaski(void *_glfuncs, GLuint index, GLbitfield mask) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSampleMaski(index, mask); -} - -void gl4_0core_glGetMultisamplefv(void *_glfuncs, GLenum pname, GLuint index, GLfloat* val) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMultisamplefv(pname, index, val); -} - -void gl4_0core_glTexImage3DMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage3DMultisample(target, samples, internalFormat, width, height, depth, fixedsamplelocations); -} - -void gl4_0core_glTexImage2DMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage2DMultisample(target, samples, internalFormat, width, height, fixedsamplelocations); -} - -void gl4_0core_glGetSynciv(void *_glfuncs, GLsync sync, GLenum pname, GLsizei bufSize, GLsizei* length, GLint* values) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetSynciv(sync, pname, bufSize, length, values); -} - -void gl4_0core_glGetInteger64v(void *_glfuncs, GLenum pname, GLint64* params) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetInteger64v(pname, params); -} - -void gl4_0core_glWaitSync(void *_glfuncs, GLsync sync, GLbitfield flags, GLuint64 timeout) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWaitSync(sync, flags, timeout); -} - -GLenum gl4_0core_glClientWaitSync(void *_glfuncs, GLsync sync, GLbitfield flags, GLuint64 timeout) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glClientWaitSync(sync, flags, timeout); -} - -void gl4_0core_glDeleteSync(void *_glfuncs, GLsync sync) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteSync(sync); -} - -GLboolean gl4_0core_glIsSync(void *_glfuncs, GLsync sync) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsSync(sync); -} - -GLsync gl4_0core_glFenceSync(void *_glfuncs, GLenum condition, GLbitfield flags) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glFenceSync(condition, flags); -} - -void gl4_0core_glProvokingVertex(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProvokingVertex(mode); -} - -void gl4_0core_glDrawElementsInstancedBaseVertex(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLsizei instancecount, GLint basevertex) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElementsInstancedBaseVertex(mode, count, gltype, indices, instancecount, basevertex); -} - -void gl4_0core_glDrawRangeElementsBaseVertex(void *_glfuncs, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum gltype, const GLvoid* indices, GLint basevertex) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawRangeElementsBaseVertex(mode, start, end, count, gltype, indices, basevertex); -} - -void gl4_0core_glDrawElementsBaseVertex(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLint basevertex) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElementsBaseVertex(mode, count, gltype, indices, basevertex); -} - -void gl4_0core_glFramebufferTexture(void *_glfuncs, GLenum target, GLenum attachment, GLuint texture, GLint level) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTexture(target, attachment, texture, level); -} - -void gl4_0core_glGetBufferParameteri64v(void *_glfuncs, GLenum target, GLenum pname, GLint64* params) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBufferParameteri64v(target, pname, params); -} - -void gl4_0core_glGetInteger64i_v(void *_glfuncs, GLenum target, GLuint index, GLint64* data) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetInteger64i_v(target, index, data); -} - -void gl4_0core_glVertexAttribP4uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP4uiv(index, gltype, normalized, value); -} - -void gl4_0core_glVertexAttribP4ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP4ui(index, gltype, normalized, value); -} - -void gl4_0core_glVertexAttribP3uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP3uiv(index, gltype, normalized, value); -} - -void gl4_0core_glVertexAttribP3ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP3ui(index, gltype, normalized, value); -} - -void gl4_0core_glVertexAttribP2uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP2uiv(index, gltype, normalized, value); -} - -void gl4_0core_glVertexAttribP2ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP2ui(index, gltype, normalized, value); -} - -void gl4_0core_glVertexAttribP1uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP1uiv(index, gltype, normalized, value); -} - -void gl4_0core_glVertexAttribP1ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP1ui(index, gltype, normalized, value); -} - -void gl4_0core_glSecondaryColorP3uiv(void *_glfuncs, GLenum gltype, const GLuint* color) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColorP3uiv(gltype, color); -} - -void gl4_0core_glSecondaryColorP3ui(void *_glfuncs, GLenum gltype, GLuint color) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColorP3ui(gltype, color); -} - -void gl4_0core_glColorP4uiv(void *_glfuncs, GLenum gltype, const GLuint* color) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorP4uiv(gltype, color); -} - -void gl4_0core_glColorP4ui(void *_glfuncs, GLenum gltype, GLuint color) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorP4ui(gltype, color); -} - -void gl4_0core_glColorP3uiv(void *_glfuncs, GLenum gltype, const GLuint* color) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorP3uiv(gltype, color); -} - -void gl4_0core_glColorP3ui(void *_glfuncs, GLenum gltype, GLuint color) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorP3ui(gltype, color); -} - -void gl4_0core_glNormalP3uiv(void *_glfuncs, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormalP3uiv(gltype, coords); -} - -void gl4_0core_glNormalP3ui(void *_glfuncs, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormalP3ui(gltype, coords); -} - -void gl4_0core_glMultiTexCoordP4uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP4uiv(texture, gltype, coords); -} - -void gl4_0core_glMultiTexCoordP4ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP4ui(texture, gltype, coords); -} - -void gl4_0core_glMultiTexCoordP3uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP3uiv(texture, gltype, coords); -} - -void gl4_0core_glMultiTexCoordP3ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP3ui(texture, gltype, coords); -} - -void gl4_0core_glMultiTexCoordP2uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP2uiv(texture, gltype, coords); -} - -void gl4_0core_glMultiTexCoordP2ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP2ui(texture, gltype, coords); -} - -void gl4_0core_glMultiTexCoordP1uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP1uiv(texture, gltype, coords); -} - -void gl4_0core_glMultiTexCoordP1ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP1ui(texture, gltype, coords); -} - -void gl4_0core_glTexCoordP4uiv(void *_glfuncs, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP4uiv(gltype, coords); -} - -void gl4_0core_glTexCoordP4ui(void *_glfuncs, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP4ui(gltype, coords); -} - -void gl4_0core_glTexCoordP3uiv(void *_glfuncs, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP3uiv(gltype, coords); -} - -void gl4_0core_glTexCoordP3ui(void *_glfuncs, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP3ui(gltype, coords); -} - -void gl4_0core_glTexCoordP2uiv(void *_glfuncs, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP2uiv(gltype, coords); -} - -void gl4_0core_glTexCoordP2ui(void *_glfuncs, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP2ui(gltype, coords); -} - -void gl4_0core_glTexCoordP1uiv(void *_glfuncs, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP1uiv(gltype, coords); -} - -void gl4_0core_glTexCoordP1ui(void *_glfuncs, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP1ui(gltype, coords); -} - -void gl4_0core_glVertexP4uiv(void *_glfuncs, GLenum gltype, const GLuint* value) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexP4uiv(gltype, value); -} - -void gl4_0core_glVertexP4ui(void *_glfuncs, GLenum gltype, GLuint value) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexP4ui(gltype, value); -} - -void gl4_0core_glVertexP3uiv(void *_glfuncs, GLenum gltype, const GLuint* value) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexP3uiv(gltype, value); -} - -void gl4_0core_glVertexP3ui(void *_glfuncs, GLenum gltype, GLuint value) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexP3ui(gltype, value); -} - -void gl4_0core_glVertexP2uiv(void *_glfuncs, GLenum gltype, const GLuint* value) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexP2uiv(gltype, value); -} - -void gl4_0core_glVertexP2ui(void *_glfuncs, GLenum gltype, GLuint value) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexP2ui(gltype, value); -} - -void gl4_0core_glGetQueryObjectui64v(void *_glfuncs, GLuint id, GLenum pname, GLuint64* params) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryObjectui64v(id, pname, params); -} - -void gl4_0core_glGetQueryObjecti64v(void *_glfuncs, GLuint id, GLenum pname, GLint64* params) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryObjecti64v(id, pname, params); -} - -void gl4_0core_glQueryCounter(void *_glfuncs, GLuint id, GLenum target) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glQueryCounter(id, target); -} - -void gl4_0core_glGetSamplerParameterIuiv(void *_glfuncs, GLuint sampler, GLenum pname, GLuint* params) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetSamplerParameterIuiv(sampler, pname, params); -} - -void gl4_0core_glGetSamplerParameterfv(void *_glfuncs, GLuint sampler, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetSamplerParameterfv(sampler, pname, params); -} - -void gl4_0core_glGetSamplerParameterIiv(void *_glfuncs, GLuint sampler, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetSamplerParameterIiv(sampler, pname, params); -} - -void gl4_0core_glGetSamplerParameteriv(void *_glfuncs, GLuint sampler, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetSamplerParameteriv(sampler, pname, params); -} - -void gl4_0core_glSamplerParameterIuiv(void *_glfuncs, GLuint sampler, GLenum pname, const GLuint* param) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSamplerParameterIuiv(sampler, pname, param); -} - -void gl4_0core_glSamplerParameterIiv(void *_glfuncs, GLuint sampler, GLenum pname, const GLint* param) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSamplerParameterIiv(sampler, pname, param); -} - -void gl4_0core_glSamplerParameterfv(void *_glfuncs, GLuint sampler, GLenum pname, const GLfloat* param) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSamplerParameterfv(sampler, pname, param); -} - -void gl4_0core_glSamplerParameterf(void *_glfuncs, GLuint sampler, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSamplerParameterf(sampler, pname, param); -} - -void gl4_0core_glSamplerParameteriv(void *_glfuncs, GLuint sampler, GLenum pname, const GLint* param) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSamplerParameteriv(sampler, pname, param); -} - -void gl4_0core_glSamplerParameteri(void *_glfuncs, GLuint sampler, GLenum pname, GLint param) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSamplerParameteri(sampler, pname, param); -} - -void gl4_0core_glBindSampler(void *_glfuncs, GLuint unit, GLuint sampler) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindSampler(unit, sampler); -} - -GLboolean gl4_0core_glIsSampler(void *_glfuncs, GLuint sampler) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsSampler(sampler); -} - -void gl4_0core_glDeleteSamplers(void *_glfuncs, GLsizei count, const GLuint* samplers) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteSamplers(count, samplers); -} - -void gl4_0core_glGenSamplers(void *_glfuncs, GLsizei count, GLuint* samplers) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenSamplers(count, samplers); -} - -GLint gl4_0core_glGetFragDataIndex(void *_glfuncs, GLuint program, const GLchar* name) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetFragDataIndex(program, name); -} - -void gl4_0core_glBindFragDataLocationIndexed(void *_glfuncs, GLuint program, GLuint colorNumber, GLuint index, const GLchar* name) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindFragDataLocationIndexed(program, colorNumber, index, name); -} - -void gl4_0core_glVertexAttribDivisor(void *_glfuncs, GLuint index, GLuint divisor) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribDivisor(index, divisor); -} - -void gl4_0core_glGetQueryIndexediv(void *_glfuncs, GLenum target, GLuint index, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryIndexediv(target, index, pname, params); -} - -void gl4_0core_glEndQueryIndexed(void *_glfuncs, GLenum target, GLuint index) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndQueryIndexed(target, index); -} - -void gl4_0core_glBeginQueryIndexed(void *_glfuncs, GLenum target, GLuint index, GLuint id) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBeginQueryIndexed(target, index, id); -} - -void gl4_0core_glDrawTransformFeedbackStream(void *_glfuncs, GLenum mode, GLuint id, GLuint stream) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawTransformFeedbackStream(mode, id, stream); -} - -void gl4_0core_glDrawTransformFeedback(void *_glfuncs, GLenum mode, GLuint id) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawTransformFeedback(mode, id); -} - -void gl4_0core_glResumeTransformFeedback(void *_glfuncs) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glResumeTransformFeedback(); -} - -void gl4_0core_glPauseTransformFeedback(void *_glfuncs) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPauseTransformFeedback(); -} - -GLboolean gl4_0core_glIsTransformFeedback(void *_glfuncs, GLuint id) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsTransformFeedback(id); -} - -void gl4_0core_glGenTransformFeedbacks(void *_glfuncs, GLsizei n, GLuint* ids) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenTransformFeedbacks(n, ids); -} - -void gl4_0core_glDeleteTransformFeedbacks(void *_glfuncs, GLsizei n, const GLuint* ids) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteTransformFeedbacks(n, ids); -} - -void gl4_0core_glBindTransformFeedback(void *_glfuncs, GLenum target, GLuint id) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindTransformFeedback(target, id); -} - -void gl4_0core_glPatchParameterfv(void *_glfuncs, GLenum pname, const GLfloat* values) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPatchParameterfv(pname, values); -} - -void gl4_0core_glPatchParameteri(void *_glfuncs, GLenum pname, GLint value) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPatchParameteri(pname, value); -} - -void gl4_0core_glGetProgramStageiv(void *_glfuncs, GLuint program, GLenum shadertype, GLenum pname, GLint* values) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetProgramStageiv(program, shadertype, pname, values); -} - -void gl4_0core_glGetUniformSubroutineuiv(void *_glfuncs, GLenum shadertype, GLint location, GLuint* params) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetUniformSubroutineuiv(shadertype, location, params); -} - -void gl4_0core_glUniformSubroutinesuiv(void *_glfuncs, GLenum shadertype, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformSubroutinesuiv(shadertype, count, value); -} - -void gl4_0core_glGetActiveSubroutineName(void *_glfuncs, GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei* length, GLchar* name) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveSubroutineName(program, shadertype, index, bufSize, length, name); -} - -void gl4_0core_glGetActiveSubroutineUniformName(void *_glfuncs, GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei* length, GLchar* name) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveSubroutineUniformName(program, shadertype, index, bufSize, length, name); -} - -void gl4_0core_glGetActiveSubroutineUniformiv(void *_glfuncs, GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint* values) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveSubroutineUniformiv(program, shadertype, index, pname, values); -} - -GLuint gl4_0core_glGetSubroutineIndex(void *_glfuncs, GLuint program, GLenum shadertype, const GLchar* name) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetSubroutineIndex(program, shadertype, name); -} - -GLint gl4_0core_glGetSubroutineUniformLocation(void *_glfuncs, GLuint program, GLenum shadertype, const GLchar* name) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetSubroutineUniformLocation(program, shadertype, name); -} - -void gl4_0core_glGetUniformdv(void *_glfuncs, GLuint program, GLint location, GLdouble* params) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetUniformdv(program, location, params); -} - -void gl4_0core_glUniformMatrix4x3dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4x3dv(location, count, transpose, value); -} - -void gl4_0core_glUniformMatrix4x2dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4x2dv(location, count, transpose, value); -} - -void gl4_0core_glUniformMatrix3x4dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3x4dv(location, count, transpose, value); -} - -void gl4_0core_glUniformMatrix3x2dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3x2dv(location, count, transpose, value); -} - -void gl4_0core_glUniformMatrix2x4dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2x4dv(location, count, transpose, value); -} - -void gl4_0core_glUniformMatrix2x3dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2x3dv(location, count, transpose, value); -} - -void gl4_0core_glUniformMatrix4dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4dv(location, count, transpose, value); -} - -void gl4_0core_glUniformMatrix3dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3dv(location, count, transpose, value); -} - -void gl4_0core_glUniformMatrix2dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2dv(location, count, transpose, value); -} - -void gl4_0core_glUniform4dv(void *_glfuncs, GLint location, GLsizei count, const GLdouble* value) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4dv(location, count, value); -} - -void gl4_0core_glUniform3dv(void *_glfuncs, GLint location, GLsizei count, const GLdouble* value) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3dv(location, count, value); -} - -void gl4_0core_glUniform2dv(void *_glfuncs, GLint location, GLsizei count, const GLdouble* value) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2dv(location, count, value); -} - -void gl4_0core_glUniform1dv(void *_glfuncs, GLint location, GLsizei count, const GLdouble* value) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1dv(location, count, value); -} - -void gl4_0core_glUniform4d(void *_glfuncs, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4d(location, v0, v1, v2, v3); -} - -void gl4_0core_glUniform3d(void *_glfuncs, GLint location, GLdouble v0, GLdouble v1, GLdouble v2) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3d(location, v0, v1, v2); -} - -void gl4_0core_glUniform2d(void *_glfuncs, GLint location, GLdouble v0, GLdouble v1) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2d(location, v0, v1); -} - -void gl4_0core_glUniform1d(void *_glfuncs, GLint location, GLdouble v0) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1d(location, v0); -} - -void gl4_0core_glDrawElementsIndirect(void *_glfuncs, GLenum mode, GLenum gltype, const GLvoid* indirect) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElementsIndirect(mode, gltype, indirect); -} - -void gl4_0core_glDrawArraysIndirect(void *_glfuncs, GLenum mode, const GLvoid* indirect) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawArraysIndirect(mode, indirect); -} - -void gl4_0core_glBlendFuncSeparatei(void *_glfuncs, GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendFuncSeparatei(buf, srcRGB, dstRGB, srcAlpha, dstAlpha); -} - -void gl4_0core_glBlendFunci(void *_glfuncs, GLuint buf, GLenum src, GLenum dst) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendFunci(buf, src, dst); -} - -void gl4_0core_glBlendEquationSeparatei(void *_glfuncs, GLuint buf, GLenum modeRGB, GLenum modeAlpha) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendEquationSeparatei(buf, modeRGB, modeAlpha); -} - -void gl4_0core_glBlendEquationi(void *_glfuncs, GLuint buf, GLenum mode) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendEquationi(buf, mode); -} - -void gl4_0core_glMinSampleShading(void *_glfuncs, GLfloat value) -{ - QOpenGLFunctions_4_0_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMinSampleShading(value); -} - diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.0core/funcs.h b/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.0core/funcs.h deleted file mode 100644 index 55af051dc0..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.0core/funcs.h +++ /dev/null @@ -1,398 +0,0 @@ - -// ** file automatically generated by glgen -- do not edit manually ** - -#ifndef __cplusplus -#include -#include -typedef unsigned int GLenum; -typedef unsigned char GLboolean; -typedef unsigned int GLbitfield; -typedef void GLvoid; -typedef char GLchar; -typedef signed char GLbyte; /* 1-byte signed */ -typedef short GLshort; /* 2-byte signed */ -typedef int GLint; /* 4-byte signed */ -typedef unsigned char GLubyte; /* 1-byte unsigned */ -typedef unsigned short GLushort; /* 2-byte unsigned */ -typedef unsigned int GLuint; /* 4-byte unsigned */ -typedef int GLsizei; /* 4-byte signed */ -typedef float GLfloat; /* single precision float */ -typedef float GLclampf; /* single precision float in [0,1] */ -typedef double GLdouble; /* double precision float */ -typedef double GLclampd; /* double precision float in [0,1] */ -typedef int64_t GLint64; -typedef uint64_t GLuint64; -typedef ptrdiff_t GLintptr; -typedef ptrdiff_t GLsizeiptr; -typedef ptrdiff_t GLintptrARB; -typedef ptrdiff_t GLsizeiptrARB; -typedef struct __GLsync *GLsync; -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -void *gl4_0core_funcs(); - -void gl4_0core_glViewport(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height); -void gl4_0core_glDepthRange(void *_glfuncs, GLdouble nearVal, GLdouble farVal); -GLboolean gl4_0core_glIsEnabled(void *_glfuncs, GLenum cap); -void gl4_0core_glGetTexLevelParameteriv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLint* params); -void gl4_0core_glGetTexLevelParameterfv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLfloat* params); -void gl4_0core_glGetTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl4_0core_glGetTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl4_0core_glGetTexImage(void *_glfuncs, GLenum target, GLint level, GLenum format, GLenum gltype, GLvoid* pixels); -void gl4_0core_glGetIntegerv(void *_glfuncs, GLenum pname, GLint* params); -void gl4_0core_glGetFloatv(void *_glfuncs, GLenum pname, GLfloat* params); -GLenum gl4_0core_glGetError(void *_glfuncs); -void gl4_0core_glGetDoublev(void *_glfuncs, GLenum pname, GLdouble* params); -void gl4_0core_glGetBooleanv(void *_glfuncs, GLenum pname, GLboolean* params); -void gl4_0core_glReadPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum gltype, GLvoid* pixels); -void gl4_0core_glReadBuffer(void *_glfuncs, GLenum mode); -void gl4_0core_glPixelStorei(void *_glfuncs, GLenum pname, GLint param); -void gl4_0core_glPixelStoref(void *_glfuncs, GLenum pname, GLfloat param); -void gl4_0core_glDepthFunc(void *_glfuncs, GLenum glfunc); -void gl4_0core_glStencilOp(void *_glfuncs, GLenum fail, GLenum zfail, GLenum zpass); -void gl4_0core_glStencilFunc(void *_glfuncs, GLenum glfunc, GLint ref, GLuint mask); -void gl4_0core_glLogicOp(void *_glfuncs, GLenum opcode); -void gl4_0core_glBlendFunc(void *_glfuncs, GLenum sfactor, GLenum dfactor); -void gl4_0core_glFlush(void *_glfuncs); -void gl4_0core_glFinish(void *_glfuncs); -void gl4_0core_glEnable(void *_glfuncs, GLenum cap); -void gl4_0core_glDisable(void *_glfuncs, GLenum cap); -void gl4_0core_glDepthMask(void *_glfuncs, GLboolean flag); -void gl4_0core_glColorMask(void *_glfuncs, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); -void gl4_0core_glStencilMask(void *_glfuncs, GLuint mask); -void gl4_0core_glClearDepth(void *_glfuncs, GLdouble depth); -void gl4_0core_glClearStencil(void *_glfuncs, GLint s); -void gl4_0core_glClearColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl4_0core_glClear(void *_glfuncs, GLbitfield mask); -void gl4_0core_glDrawBuffer(void *_glfuncs, GLenum mode); -void gl4_0core_glTexImage2D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl4_0core_glTexImage1D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl4_0core_glTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl4_0core_glTexParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint param); -void gl4_0core_glTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params); -void gl4_0core_glTexParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param); -void gl4_0core_glScissor(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height); -void gl4_0core_glPolygonMode(void *_glfuncs, GLenum face, GLenum mode); -void gl4_0core_glPointSize(void *_glfuncs, GLfloat size); -void gl4_0core_glLineWidth(void *_glfuncs, GLfloat width); -void gl4_0core_glHint(void *_glfuncs, GLenum target, GLenum mode); -void gl4_0core_glFrontFace(void *_glfuncs, GLenum mode); -void gl4_0core_glCullFace(void *_glfuncs, GLenum mode); -void gl4_0core_glIndexubv(void *_glfuncs, const GLubyte* c); -void gl4_0core_glIndexub(void *_glfuncs, GLubyte c); -GLboolean gl4_0core_glIsTexture(void *_glfuncs, GLuint texture); -void gl4_0core_glGenTextures(void *_glfuncs, GLsizei n, GLuint* textures); -void gl4_0core_glDeleteTextures(void *_glfuncs, GLsizei n, const GLuint* textures); -void gl4_0core_glBindTexture(void *_glfuncs, GLenum target, GLuint texture); -void gl4_0core_glTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl4_0core_glTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl4_0core_glCopyTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -void gl4_0core_glCopyTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -void gl4_0core_glCopyTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -void gl4_0core_glCopyTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border); -void gl4_0core_glPolygonOffset(void *_glfuncs, GLfloat factor, GLfloat units); -void gl4_0core_glDrawElements(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices); -void gl4_0core_glDrawArrays(void *_glfuncs, GLenum mode, GLint first, GLsizei count); -void gl4_0core_glCopyTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -void gl4_0core_glTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl4_0core_glTexImage3D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl4_0core_glDrawRangeElements(void *_glfuncs, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum gltype, const GLvoid* indices); -void gl4_0core_glBlendEquation(void *_glfuncs, GLenum mode); -void gl4_0core_glBlendColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl4_0core_glGetCompressedTexImage(void *_glfuncs, GLenum target, GLint level, GLvoid* img); -void gl4_0core_glCompressedTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid* data); -void gl4_0core_glCompressedTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data); -void gl4_0core_glCompressedTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data); -void gl4_0core_glCompressedTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid* data); -void gl4_0core_glCompressedTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data); -void gl4_0core_glCompressedTexImage3D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data); -void gl4_0core_glSampleCoverage(void *_glfuncs, GLfloat value, GLboolean invert); -void gl4_0core_glActiveTexture(void *_glfuncs, GLenum texture); -void gl4_0core_glPointParameteriv(void *_glfuncs, GLenum pname, const GLint* params); -void gl4_0core_glPointParameteri(void *_glfuncs, GLenum pname, GLint param); -void gl4_0core_glPointParameterfv(void *_glfuncs, GLenum pname, const GLfloat* params); -void gl4_0core_glPointParameterf(void *_glfuncs, GLenum pname, GLfloat param); -void gl4_0core_glMultiDrawArrays(void *_glfuncs, GLenum mode, const GLint* first, const GLsizei* count, GLsizei drawcount); -void gl4_0core_glBlendFuncSeparate(void *_glfuncs, GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -void gl4_0core_glGetBufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -GLboolean gl4_0core_glUnmapBuffer(void *_glfuncs, GLenum target); -void gl4_0core_glGetBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, GLvoid* data); -void gl4_0core_glBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data); -void gl4_0core_glBufferData(void *_glfuncs, GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage); -GLboolean gl4_0core_glIsBuffer(void *_glfuncs, GLuint buffer); -void gl4_0core_glGenBuffers(void *_glfuncs, GLsizei n, GLuint* buffers); -void gl4_0core_glDeleteBuffers(void *_glfuncs, GLsizei n, const GLuint* buffers); -void gl4_0core_glBindBuffer(void *_glfuncs, GLenum target, GLuint buffer); -void gl4_0core_glGetQueryObjectuiv(void *_glfuncs, GLuint id, GLenum pname, GLuint* params); -void gl4_0core_glGetQueryObjectiv(void *_glfuncs, GLuint id, GLenum pname, GLint* params); -void gl4_0core_glGetQueryiv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl4_0core_glEndQuery(void *_glfuncs, GLenum target); -void gl4_0core_glBeginQuery(void *_glfuncs, GLenum target, GLuint id); -GLboolean gl4_0core_glIsQuery(void *_glfuncs, GLuint id); -void gl4_0core_glDeleteQueries(void *_glfuncs, GLsizei n, const GLuint* ids); -void gl4_0core_glGenQueries(void *_glfuncs, GLsizei n, GLuint* ids); -void gl4_0core_glVertexAttribPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLboolean normalized, GLsizei stride, const GLvoid* offset); -void gl4_0core_glValidateProgram(void *_glfuncs, GLuint program); -void gl4_0core_glUniformMatrix4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_0core_glUniformMatrix3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_0core_glUniformMatrix2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_0core_glUniform4iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gl4_0core_glUniform3iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gl4_0core_glUniform2iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gl4_0core_glUniform1iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gl4_0core_glUniform4fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gl4_0core_glUniform3fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gl4_0core_glUniform2fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gl4_0core_glUniform1fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gl4_0core_glUniform4i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -void gl4_0core_glUniform3i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2); -void gl4_0core_glUniform2i(void *_glfuncs, GLint location, GLint v0, GLint v1); -void gl4_0core_glUniform1i(void *_glfuncs, GLint location, GLint v0); -void gl4_0core_glUniform4f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -void gl4_0core_glUniform3f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -void gl4_0core_glUniform2f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1); -void gl4_0core_glUniform1f(void *_glfuncs, GLint location, GLfloat v0); -void gl4_0core_glUseProgram(void *_glfuncs, GLuint program); -void gl4_0core_glShaderSource(void *_glfuncs, GLuint shader, GLsizei count, const GLchar** source, const GLint* length); -void gl4_0core_glLinkProgram(void *_glfuncs, GLuint program); -GLboolean gl4_0core_glIsShader(void *_glfuncs, GLuint shader); -GLboolean gl4_0core_glIsProgram(void *_glfuncs, GLuint program); -void gl4_0core_glGetVertexAttribiv(void *_glfuncs, GLuint index, GLenum pname, GLint* params); -void gl4_0core_glGetVertexAttribfv(void *_glfuncs, GLuint index, GLenum pname, GLfloat* params); -void gl4_0core_glGetVertexAttribdv(void *_glfuncs, GLuint index, GLenum pname, GLdouble* params); -void gl4_0core_glGetUniformiv(void *_glfuncs, GLuint program, GLint location, GLint* params); -void gl4_0core_glGetUniformfv(void *_glfuncs, GLuint program, GLint location, GLfloat* params); -GLint gl4_0core_glGetUniformLocation(void *_glfuncs, GLuint program, const GLchar* name); -void gl4_0core_glGetShaderSource(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* source); -void gl4_0core_glGetShaderInfoLog(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* infoLog); -void gl4_0core_glGetShaderiv(void *_glfuncs, GLuint shader, GLenum pname, GLint* params); -void gl4_0core_glGetProgramInfoLog(void *_glfuncs, GLuint program, GLsizei bufSize, GLsizei* length, GLchar* infoLog); -void gl4_0core_glGetProgramiv(void *_glfuncs, GLuint program, GLenum pname, GLint* params); -GLint gl4_0core_glGetAttribLocation(void *_glfuncs, GLuint program, const GLchar* name); -void gl4_0core_glGetAttachedShaders(void *_glfuncs, GLuint program, GLsizei maxCount, GLsizei* count, GLuint* obj); -void gl4_0core_glGetActiveUniform(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name); -void gl4_0core_glGetActiveAttrib(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name); -void gl4_0core_glEnableVertexAttribArray(void *_glfuncs, GLuint index); -void gl4_0core_glDisableVertexAttribArray(void *_glfuncs, GLuint index); -void gl4_0core_glDetachShader(void *_glfuncs, GLuint program, GLuint shader); -void gl4_0core_glDeleteShader(void *_glfuncs, GLuint shader); -void gl4_0core_glDeleteProgram(void *_glfuncs, GLuint program); -GLuint gl4_0core_glCreateShader(void *_glfuncs, GLenum gltype); -GLuint gl4_0core_glCreateProgram(void *_glfuncs); -void gl4_0core_glCompileShader(void *_glfuncs, GLuint shader); -void gl4_0core_glBindAttribLocation(void *_glfuncs, GLuint program, GLuint index, const GLchar* name); -void gl4_0core_glAttachShader(void *_glfuncs, GLuint program, GLuint shader); -void gl4_0core_glStencilMaskSeparate(void *_glfuncs, GLenum face, GLuint mask); -void gl4_0core_glStencilFuncSeparate(void *_glfuncs, GLenum face, GLenum glfunc, GLint ref, GLuint mask); -void gl4_0core_glStencilOpSeparate(void *_glfuncs, GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); -void gl4_0core_glDrawBuffers(void *_glfuncs, GLsizei n, const GLenum* bufs); -void gl4_0core_glBlendEquationSeparate(void *_glfuncs, GLenum modeRGB, GLenum modeAlpha); -void gl4_0core_glUniformMatrix4x3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_0core_glUniformMatrix3x4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_0core_glUniformMatrix4x2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_0core_glUniformMatrix2x4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_0core_glUniformMatrix3x2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_0core_glUniformMatrix2x3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -GLboolean gl4_0core_glIsVertexArray(void *_glfuncs, GLuint array); -void gl4_0core_glGenVertexArrays(void *_glfuncs, GLsizei n, GLuint* arrays); -void gl4_0core_glDeleteVertexArrays(void *_glfuncs, GLsizei n, const GLuint* arrays); -void gl4_0core_glBindVertexArray(void *_glfuncs, GLuint array); -void gl4_0core_glFlushMappedBufferRange(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr length); -void gl4_0core_glFramebufferTextureLayer(void *_glfuncs, GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); -void gl4_0core_glRenderbufferStorageMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height); -void gl4_0core_glBlitFramebuffer(void *_glfuncs, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -void gl4_0core_glGenerateMipmap(void *_glfuncs, GLenum target); -void gl4_0core_glGetFramebufferAttachmentParameteriv(void *_glfuncs, GLenum target, GLenum attachment, GLenum pname, GLint* params); -void gl4_0core_glFramebufferRenderbuffer(void *_glfuncs, GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -void gl4_0core_glFramebufferTexture3D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -void gl4_0core_glFramebufferTexture2D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -void gl4_0core_glFramebufferTexture1D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLenum gl4_0core_glCheckFramebufferStatus(void *_glfuncs, GLenum target); -void gl4_0core_glGenFramebuffers(void *_glfuncs, GLsizei n, GLuint* framebuffers); -void gl4_0core_glDeleteFramebuffers(void *_glfuncs, GLsizei n, const GLuint* framebuffers); -void gl4_0core_glBindFramebuffer(void *_glfuncs, GLenum target, GLuint framebuffer); -GLboolean gl4_0core_glIsFramebuffer(void *_glfuncs, GLuint framebuffer); -void gl4_0core_glGetRenderbufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl4_0core_glRenderbufferStorage(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height); -void gl4_0core_glGenRenderbuffers(void *_glfuncs, GLsizei n, GLuint* renderbuffers); -void gl4_0core_glDeleteRenderbuffers(void *_glfuncs, GLsizei n, const GLuint* renderbuffers); -void gl4_0core_glBindRenderbuffer(void *_glfuncs, GLenum target, GLuint renderbuffer); -GLboolean gl4_0core_glIsRenderbuffer(void *_glfuncs, GLuint renderbuffer); -void gl4_0core_glClearBufferfi(void *_glfuncs, GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); -void gl4_0core_glClearBufferfv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLfloat* value); -void gl4_0core_glClearBufferuiv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLuint* value); -void gl4_0core_glClearBufferiv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLint* value); -void gl4_0core_glGetTexParameterIuiv(void *_glfuncs, GLenum target, GLenum pname, GLuint* params); -void gl4_0core_glGetTexParameterIiv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl4_0core_glTexParameterIuiv(void *_glfuncs, GLenum target, GLenum pname, const GLuint* params); -void gl4_0core_glTexParameterIiv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl4_0core_glUniform4uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value); -void gl4_0core_glUniform3uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value); -void gl4_0core_glUniform2uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value); -void gl4_0core_glUniform1uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value); -void gl4_0core_glUniform4ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -void gl4_0core_glUniform3ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1, GLuint v2); -void gl4_0core_glUniform2ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1); -void gl4_0core_glUniform1ui(void *_glfuncs, GLint location, GLuint v0); -GLint gl4_0core_glGetFragDataLocation(void *_glfuncs, GLuint program, const GLchar* name); -void gl4_0core_glBindFragDataLocation(void *_glfuncs, GLuint program, GLuint color, const GLchar* name); -void gl4_0core_glGetUniformuiv(void *_glfuncs, GLuint program, GLint location, GLuint* params); -void gl4_0core_glGetVertexAttribIuiv(void *_glfuncs, GLuint index, GLenum pname, GLuint* params); -void gl4_0core_glGetVertexAttribIiv(void *_glfuncs, GLuint index, GLenum pname, GLint* params); -void gl4_0core_glVertexAttribIPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl4_0core_glEndConditionalRender(void *_glfuncs); -void gl4_0core_glBeginConditionalRender(void *_glfuncs, GLuint id, GLenum mode); -void gl4_0core_glClampColor(void *_glfuncs, GLenum target, GLenum clamp); -void gl4_0core_glGetTransformFeedbackVarying(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* gltype, GLchar* name); -void gl4_0core_glBindBufferBase(void *_glfuncs, GLenum target, GLuint index, GLuint buffer); -void gl4_0core_glBindBufferRange(void *_glfuncs, GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -void gl4_0core_glEndTransformFeedback(void *_glfuncs); -void gl4_0core_glBeginTransformFeedback(void *_glfuncs, GLenum primitiveMode); -GLboolean gl4_0core_glIsEnabledi(void *_glfuncs, GLenum target, GLuint index); -void gl4_0core_glDisablei(void *_glfuncs, GLenum target, GLuint index); -void gl4_0core_glEnablei(void *_glfuncs, GLenum target, GLuint index); -void gl4_0core_glGetIntegeri_v(void *_glfuncs, GLenum target, GLuint index, GLint* data); -void gl4_0core_glGetBooleani_v(void *_glfuncs, GLenum target, GLuint index, GLboolean* data); -void gl4_0core_glColorMaski(void *_glfuncs, GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); -void gl4_0core_glCopyBufferSubData(void *_glfuncs, GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); -void gl4_0core_glUniformBlockBinding(void *_glfuncs, GLuint program, GLuint v0, GLuint v1); -void gl4_0core_glGetActiveUniformBlockName(void *_glfuncs, GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformBlockName); -void gl4_0core_glGetActiveUniformBlockiv(void *_glfuncs, GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint* params); -GLuint gl4_0core_glGetUniformBlockIndex(void *_glfuncs, GLuint program, const GLchar* uniformBlockName); -void gl4_0core_glGetActiveUniformName(void *_glfuncs, GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformName); -void gl4_0core_glGetActiveUniformsiv(void *_glfuncs, GLuint program, GLsizei uniformCount, const GLuint* uniformIndices, GLenum pname, GLint* params); -void gl4_0core_glPrimitiveRestartIndex(void *_glfuncs, GLuint index); -void gl4_0core_glTexBuffer(void *_glfuncs, GLenum target, GLenum internalFormat, GLuint buffer); -void gl4_0core_glDrawElementsInstanced(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLsizei instancecount); -void gl4_0core_glDrawArraysInstanced(void *_glfuncs, GLenum mode, GLint first, GLsizei count, GLsizei instancecount); -void gl4_0core_glSampleMaski(void *_glfuncs, GLuint index, GLbitfield mask); -void gl4_0core_glGetMultisamplefv(void *_glfuncs, GLenum pname, GLuint index, GLfloat* val); -void gl4_0core_glTexImage3DMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); -void gl4_0core_glTexImage2DMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); -void gl4_0core_glGetSynciv(void *_glfuncs, GLsync sync, GLenum pname, GLsizei bufSize, GLsizei* length, GLint* values); -void gl4_0core_glGetInteger64v(void *_glfuncs, GLenum pname, GLint64* params); -void gl4_0core_glWaitSync(void *_glfuncs, GLsync sync, GLbitfield flags, GLuint64 timeout); -GLenum gl4_0core_glClientWaitSync(void *_glfuncs, GLsync sync, GLbitfield flags, GLuint64 timeout); -void gl4_0core_glDeleteSync(void *_glfuncs, GLsync sync); -GLboolean gl4_0core_glIsSync(void *_glfuncs, GLsync sync); -GLsync gl4_0core_glFenceSync(void *_glfuncs, GLenum condition, GLbitfield flags); -void gl4_0core_glProvokingVertex(void *_glfuncs, GLenum mode); -void gl4_0core_glDrawElementsInstancedBaseVertex(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLsizei instancecount, GLint basevertex); -void gl4_0core_glDrawRangeElementsBaseVertex(void *_glfuncs, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum gltype, const GLvoid* indices, GLint basevertex); -void gl4_0core_glDrawElementsBaseVertex(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLint basevertex); -void gl4_0core_glFramebufferTexture(void *_glfuncs, GLenum target, GLenum attachment, GLuint texture, GLint level); -void gl4_0core_glGetBufferParameteri64v(void *_glfuncs, GLenum target, GLenum pname, GLint64* params); -void gl4_0core_glGetInteger64i_v(void *_glfuncs, GLenum target, GLuint index, GLint64* data); -void gl4_0core_glVertexAttribP4uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value); -void gl4_0core_glVertexAttribP4ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value); -void gl4_0core_glVertexAttribP3uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value); -void gl4_0core_glVertexAttribP3ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value); -void gl4_0core_glVertexAttribP2uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value); -void gl4_0core_glVertexAttribP2ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value); -void gl4_0core_glVertexAttribP1uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value); -void gl4_0core_glVertexAttribP1ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value); -void gl4_0core_glSecondaryColorP3uiv(void *_glfuncs, GLenum gltype, const GLuint* color); -void gl4_0core_glSecondaryColorP3ui(void *_glfuncs, GLenum gltype, GLuint color); -void gl4_0core_glColorP4uiv(void *_glfuncs, GLenum gltype, const GLuint* color); -void gl4_0core_glColorP4ui(void *_glfuncs, GLenum gltype, GLuint color); -void gl4_0core_glColorP3uiv(void *_glfuncs, GLenum gltype, const GLuint* color); -void gl4_0core_glColorP3ui(void *_glfuncs, GLenum gltype, GLuint color); -void gl4_0core_glNormalP3uiv(void *_glfuncs, GLenum gltype, const GLuint* coords); -void gl4_0core_glNormalP3ui(void *_glfuncs, GLenum gltype, GLuint coords); -void gl4_0core_glMultiTexCoordP4uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords); -void gl4_0core_glMultiTexCoordP4ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords); -void gl4_0core_glMultiTexCoordP3uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords); -void gl4_0core_glMultiTexCoordP3ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords); -void gl4_0core_glMultiTexCoordP2uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords); -void gl4_0core_glMultiTexCoordP2ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords); -void gl4_0core_glMultiTexCoordP1uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords); -void gl4_0core_glMultiTexCoordP1ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords); -void gl4_0core_glTexCoordP4uiv(void *_glfuncs, GLenum gltype, const GLuint* coords); -void gl4_0core_glTexCoordP4ui(void *_glfuncs, GLenum gltype, GLuint coords); -void gl4_0core_glTexCoordP3uiv(void *_glfuncs, GLenum gltype, const GLuint* coords); -void gl4_0core_glTexCoordP3ui(void *_glfuncs, GLenum gltype, GLuint coords); -void gl4_0core_glTexCoordP2uiv(void *_glfuncs, GLenum gltype, const GLuint* coords); -void gl4_0core_glTexCoordP2ui(void *_glfuncs, GLenum gltype, GLuint coords); -void gl4_0core_glTexCoordP1uiv(void *_glfuncs, GLenum gltype, const GLuint* coords); -void gl4_0core_glTexCoordP1ui(void *_glfuncs, GLenum gltype, GLuint coords); -void gl4_0core_glVertexP4uiv(void *_glfuncs, GLenum gltype, const GLuint* value); -void gl4_0core_glVertexP4ui(void *_glfuncs, GLenum gltype, GLuint value); -void gl4_0core_glVertexP3uiv(void *_glfuncs, GLenum gltype, const GLuint* value); -void gl4_0core_glVertexP3ui(void *_glfuncs, GLenum gltype, GLuint value); -void gl4_0core_glVertexP2uiv(void *_glfuncs, GLenum gltype, const GLuint* value); -void gl4_0core_glVertexP2ui(void *_glfuncs, GLenum gltype, GLuint value); -void gl4_0core_glGetQueryObjectui64v(void *_glfuncs, GLuint id, GLenum pname, GLuint64* params); -void gl4_0core_glGetQueryObjecti64v(void *_glfuncs, GLuint id, GLenum pname, GLint64* params); -void gl4_0core_glQueryCounter(void *_glfuncs, GLuint id, GLenum target); -void gl4_0core_glGetSamplerParameterIuiv(void *_glfuncs, GLuint sampler, GLenum pname, GLuint* params); -void gl4_0core_glGetSamplerParameterfv(void *_glfuncs, GLuint sampler, GLenum pname, GLfloat* params); -void gl4_0core_glGetSamplerParameterIiv(void *_glfuncs, GLuint sampler, GLenum pname, GLint* params); -void gl4_0core_glGetSamplerParameteriv(void *_glfuncs, GLuint sampler, GLenum pname, GLint* params); -void gl4_0core_glSamplerParameterIuiv(void *_glfuncs, GLuint sampler, GLenum pname, const GLuint* param); -void gl4_0core_glSamplerParameterIiv(void *_glfuncs, GLuint sampler, GLenum pname, const GLint* param); -void gl4_0core_glSamplerParameterfv(void *_glfuncs, GLuint sampler, GLenum pname, const GLfloat* param); -void gl4_0core_glSamplerParameterf(void *_glfuncs, GLuint sampler, GLenum pname, GLfloat param); -void gl4_0core_glSamplerParameteriv(void *_glfuncs, GLuint sampler, GLenum pname, const GLint* param); -void gl4_0core_glSamplerParameteri(void *_glfuncs, GLuint sampler, GLenum pname, GLint param); -void gl4_0core_glBindSampler(void *_glfuncs, GLuint unit, GLuint sampler); -GLboolean gl4_0core_glIsSampler(void *_glfuncs, GLuint sampler); -void gl4_0core_glDeleteSamplers(void *_glfuncs, GLsizei count, const GLuint* samplers); -void gl4_0core_glGenSamplers(void *_glfuncs, GLsizei count, GLuint* samplers); -GLint gl4_0core_glGetFragDataIndex(void *_glfuncs, GLuint program, const GLchar* name); -void gl4_0core_glBindFragDataLocationIndexed(void *_glfuncs, GLuint program, GLuint colorNumber, GLuint index, const GLchar* name); -void gl4_0core_glVertexAttribDivisor(void *_glfuncs, GLuint index, GLuint divisor); -void gl4_0core_glGetQueryIndexediv(void *_glfuncs, GLenum target, GLuint index, GLenum pname, GLint* params); -void gl4_0core_glEndQueryIndexed(void *_glfuncs, GLenum target, GLuint index); -void gl4_0core_glBeginQueryIndexed(void *_glfuncs, GLenum target, GLuint index, GLuint id); -void gl4_0core_glDrawTransformFeedbackStream(void *_glfuncs, GLenum mode, GLuint id, GLuint stream); -void gl4_0core_glDrawTransformFeedback(void *_glfuncs, GLenum mode, GLuint id); -void gl4_0core_glResumeTransformFeedback(void *_glfuncs); -void gl4_0core_glPauseTransformFeedback(void *_glfuncs); -GLboolean gl4_0core_glIsTransformFeedback(void *_glfuncs, GLuint id); -void gl4_0core_glGenTransformFeedbacks(void *_glfuncs, GLsizei n, GLuint* ids); -void gl4_0core_glDeleteTransformFeedbacks(void *_glfuncs, GLsizei n, const GLuint* ids); -void gl4_0core_glBindTransformFeedback(void *_glfuncs, GLenum target, GLuint id); -void gl4_0core_glPatchParameterfv(void *_glfuncs, GLenum pname, const GLfloat* values); -void gl4_0core_glPatchParameteri(void *_glfuncs, GLenum pname, GLint value); -void gl4_0core_glGetProgramStageiv(void *_glfuncs, GLuint program, GLenum shadertype, GLenum pname, GLint* values); -void gl4_0core_glGetUniformSubroutineuiv(void *_glfuncs, GLenum shadertype, GLint location, GLuint* params); -void gl4_0core_glUniformSubroutinesuiv(void *_glfuncs, GLenum shadertype, GLsizei count, const GLuint* value); -void gl4_0core_glGetActiveSubroutineName(void *_glfuncs, GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei* length, GLchar* name); -void gl4_0core_glGetActiveSubroutineUniformName(void *_glfuncs, GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei* length, GLchar* name); -void gl4_0core_glGetActiveSubroutineUniformiv(void *_glfuncs, GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint* values); -GLuint gl4_0core_glGetSubroutineIndex(void *_glfuncs, GLuint program, GLenum shadertype, const GLchar* name); -GLint gl4_0core_glGetSubroutineUniformLocation(void *_glfuncs, GLuint program, GLenum shadertype, const GLchar* name); -void gl4_0core_glGetUniformdv(void *_glfuncs, GLuint program, GLint location, GLdouble* params); -void gl4_0core_glUniformMatrix4x3dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_0core_glUniformMatrix4x2dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_0core_glUniformMatrix3x4dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_0core_glUniformMatrix3x2dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_0core_glUniformMatrix2x4dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_0core_glUniformMatrix2x3dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_0core_glUniformMatrix4dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_0core_glUniformMatrix3dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_0core_glUniformMatrix2dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_0core_glUniform4dv(void *_glfuncs, GLint location, GLsizei count, const GLdouble* value); -void gl4_0core_glUniform3dv(void *_glfuncs, GLint location, GLsizei count, const GLdouble* value); -void gl4_0core_glUniform2dv(void *_glfuncs, GLint location, GLsizei count, const GLdouble* value); -void gl4_0core_glUniform1dv(void *_glfuncs, GLint location, GLsizei count, const GLdouble* value); -void gl4_0core_glUniform4d(void *_glfuncs, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3); -void gl4_0core_glUniform3d(void *_glfuncs, GLint location, GLdouble v0, GLdouble v1, GLdouble v2); -void gl4_0core_glUniform2d(void *_glfuncs, GLint location, GLdouble v0, GLdouble v1); -void gl4_0core_glUniform1d(void *_glfuncs, GLint location, GLdouble v0); -void gl4_0core_glDrawElementsIndirect(void *_glfuncs, GLenum mode, GLenum gltype, const GLvoid* indirect); -void gl4_0core_glDrawArraysIndirect(void *_glfuncs, GLenum mode, const GLvoid* indirect); -void gl4_0core_glBlendFuncSeparatei(void *_glfuncs, GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -void gl4_0core_glBlendFunci(void *_glfuncs, GLuint buf, GLenum src, GLenum dst); -void gl4_0core_glBlendEquationSeparatei(void *_glfuncs, GLuint buf, GLenum modeRGB, GLenum modeAlpha); -void gl4_0core_glBlendEquationi(void *_glfuncs, GLuint buf, GLenum mode); -void gl4_0core_glMinSampleShading(void *_glfuncs, GLfloat value); - - -#ifdef __cplusplus -} // extern "C" -#endif diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.0core/gl.go b/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.0core/gl.go deleted file mode 100644 index ddfef9318f..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.0core/gl.go +++ /dev/null @@ -1,5815 +0,0 @@ -// ** file automatically generated by glgen -- do not edit manually ** - -package GL - -// #cgo CXXFLAGS: -std=c++0x -pedantic-errors -Wall -fno-strict-aliasing -// #cgo LDFLAGS: -lstdc++ -// #cgo pkg-config: Qt5Core Qt5OpenGL -// -// #include "funcs.h" -// -// void free(void*); -// -import "C" - -import ( - "fmt" - "reflect" - "unsafe" - - "gopkg.in/qml.v1/gl/glbase" -) - -// API returns a value that offers methods matching the OpenGL version 4.0 API. -// -// The returned API must not be used after the provided OpenGL context becomes invalid. -func API(context glbase.Contexter) *GL { - gl := &GL{} - gl.funcs = C.gl4_0core_funcs() - if gl.funcs == nil { - panic(fmt.Errorf("OpenGL version 4.0 is not available")) - } - return gl -} - -// GL implements the OpenGL version 4.0 API. Values of this -// type must be created via the API function, and it must not be used after -// the associated OpenGL context becomes invalid. -type GL struct { - funcs unsafe.Pointer -} - -const ( - FALSE = 0 - TRUE = 1 - NONE = 0 - - BYTE = 0x1400 - UNSIGNED_BYTE = 0x1401 - SHORT = 0x1402 - UNSIGNED_SHORT = 0x1403 - INT = 0x1404 - UNSIGNED_INT = 0x1405 - FLOAT = 0x1406 - N2_BYTES = 0x1407 - N3_BYTES = 0x1408 - N4_BYTES = 0x1409 - DOUBLE = 0x140A - HALF_FLOAT = 0x140B - - ACCUM = 0x0100 - LOAD = 0x0101 - RETURN = 0x0102 - MULT = 0x0103 - ADD = 0x0104 - - ACCUM_BUFFER_BIT = 0x00000200 - ALL_ATTRIB_BITS = 0xFFFFFFFF - COLOR_BUFFER_BIT = 0x00004000 - CURRENT_BIT = 0x00000001 - DEPTH_BUFFER_BIT = 0x00000100 - ENABLE_BIT = 0x00002000 - EVAL_BIT = 0x00010000 - FOG_BIT = 0x00000080 - HINT_BIT = 0x00008000 - LIGHTING_BIT = 0x00000040 - LINE_BIT = 0x00000004 - LIST_BIT = 0x00020000 - MULTISAMPLE_BIT = 0x20000000 - PIXEL_MODE_BIT = 0x00000020 - POINT_BIT = 0x00000002 - POLYGON_BIT = 0x00000008 - POLYGON_STIPPLE_BIT = 0x00000010 - SCISSOR_BIT = 0x00080000 - STENCIL_BUFFER_BIT = 0x00000400 - TEXTURE_BIT = 0x00040000 - TRANSFORM_BIT = 0x00001000 - VIEWPORT_BIT = 0x00000800 - - ALWAYS = 0x0207 - EQUAL = 0x0202 - GEQUAL = 0x0206 - GREATER = 0x0204 - LEQUAL = 0x0203 - LESS = 0x0201 - NEVER = 0x0200 - NOTEQUAL = 0x0205 - - LOGIC_OP = 0x0BF1 - - DST_ALPHA = 0x0304 - ONE = 1 - ONE_MINUS_DST_ALPHA = 0x0305 - ONE_MINUS_SRC_ALPHA = 0x0303 - ONE_MINUS_SRC_COLOR = 0x0301 - SRC_ALPHA = 0x0302 - SRC_COLOR = 0x0300 - ZERO = 0 - - DST_COLOR = 0x0306 - ONE_MINUS_DST_COLOR = 0x0307 - SRC_ALPHA_SATURATE = 0x0308 - - CLIENT_ALL_ATTRIB_BITS = 0xFFFFFFFF - CLIENT_PIXEL_STORE_BIT = 0x00000001 - CLIENT_VERTEX_ARRAY_BIT = 0x00000002 - - CLIP_DISTANCE0 = 0x3000 - CLIP_DISTANCE1 = 0x3001 - CLIP_DISTANCE2 = 0x3002 - CLIP_DISTANCE3 = 0x3003 - CLIP_DISTANCE4 = 0x3004 - CLIP_DISTANCE5 = 0x3005 - CLIP_DISTANCE6 = 0x3006 - CLIP_DISTANCE7 = 0x3007 - CLIP_PLANE0 = 0x3000 - CLIP_PLANE1 = 0x3001 - CLIP_PLANE2 = 0x3002 - CLIP_PLANE3 = 0x3003 - CLIP_PLANE4 = 0x3004 - CLIP_PLANE5 = 0x3005 - - BACK = 0x0405 - FRONT = 0x0404 - FRONT_AND_BACK = 0x0408 - - AMBIENT = 0x1200 - AMBIENT_AND_DIFFUSE = 0x1602 - DIFFUSE = 0x1201 - EMISSION = 0x1600 - SPECULAR = 0x1202 - - CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT = 0x00000001 - - CONTEXT_COMPATIBILITY_PROFILE_BIT = 0x00000002 - CONTEXT_CORE_PROFILE_BIT = 0x00000001 - - AUX0 = 0x0409 - AUX1 = 0x040A - AUX2 = 0x040B - AUX3 = 0x040C - BACK_LEFT = 0x0402 - BACK_RIGHT = 0x0403 - FRONT_LEFT = 0x0400 - FRONT_RIGHT = 0x0401 - LEFT = 0x0406 - RIGHT = 0x0407 - - ALPHA_TEST = 0x0BC0 - AUTO_NORMAL = 0x0D80 - BLEND = 0x0BE2 - COLOR_ARRAY = 0x8076 - COLOR_LOGIC_OP = 0x0BF2 - COLOR_MATERIAL = 0x0B57 - CULL_FACE = 0x0B44 - DEPTH_TEST = 0x0B71 - DITHER = 0x0BD0 - EDGE_FLAG_ARRAY = 0x8079 - FOG = 0x0B60 - INDEX_ARRAY = 0x8077 - INDEX_LOGIC_OP = 0x0BF1 - LIGHT0 = 0x4000 - LIGHT1 = 0x4001 - LIGHT2 = 0x4002 - LIGHT3 = 0x4003 - LIGHT4 = 0x4004 - LIGHT5 = 0x4005 - LIGHT6 = 0x4006 - LIGHT7 = 0x4007 - LIGHTING = 0x0B50 - LINE_SMOOTH = 0x0B20 - LINE_STIPPLE = 0x0B24 - MAP1_COLOR_4 = 0x0D90 - MAP1_INDEX = 0x0D91 - MAP1_NORMAL = 0x0D92 - MAP1_TEXTURE_COORD_1 = 0x0D93 - MAP1_TEXTURE_COORD_2 = 0x0D94 - MAP1_TEXTURE_COORD_3 = 0x0D95 - MAP1_TEXTURE_COORD_4 = 0x0D96 - MAP1_VERTEX_3 = 0x0D97 - MAP1_VERTEX_4 = 0x0D98 - MAP2_COLOR_4 = 0x0DB0 - MAP2_INDEX = 0x0DB1 - MAP2_NORMAL = 0x0DB2 - MAP2_TEXTURE_COORD_1 = 0x0DB3 - MAP2_TEXTURE_COORD_2 = 0x0DB4 - MAP2_TEXTURE_COORD_3 = 0x0DB5 - MAP2_TEXTURE_COORD_4 = 0x0DB6 - MAP2_VERTEX_3 = 0x0DB7 - MAP2_VERTEX_4 = 0x0DB8 - NORMALIZE = 0x0BA1 - NORMAL_ARRAY = 0x8075 - POINT_SMOOTH = 0x0B10 - POLYGON_OFFSET_FILL = 0x8037 - POLYGON_OFFSET_LINE = 0x2A02 - POLYGON_OFFSET_POINT = 0x2A01 - POLYGON_SMOOTH = 0x0B41 - POLYGON_STIPPLE = 0x0B42 - SCISSOR_TEST = 0x0C11 - STENCIL_TEST = 0x0B90 - TEXTURE_1D = 0x0DE0 - TEXTURE_2D = 0x0DE1 - TEXTURE_COORD_ARRAY = 0x8078 - TEXTURE_GEN_Q = 0x0C63 - TEXTURE_GEN_R = 0x0C62 - TEXTURE_GEN_S = 0x0C60 - TEXTURE_GEN_T = 0x0C61 - VERTEX_ARRAY = 0x8074 - - INVALID_ENUM = 0x0500 - INVALID_FRAMEBUFFER_OPERATION = 0x0506 - INVALID_OPERATION = 0x0502 - INVALID_VALUE = 0x0501 - NO_ERROR = 0 - OUT_OF_MEMORY = 0x0505 - STACK_OVERFLOW = 0x0503 - STACK_UNDERFLOW = 0x0504 - - N2D = 0x0600 - N3D = 0x0601 - N3D_COLOR = 0x0602 - N3D_COLOR_TEXTURE = 0x0603 - N4D_COLOR_TEXTURE = 0x0604 - - BITMAP_TOKEN = 0x0704 - COPY_PIXEL_TOKEN = 0x0706 - DRAW_PIXEL_TOKEN = 0x0705 - LINE_RESET_TOKEN = 0x0707 - LINE_TOKEN = 0x0702 - PASS_THROUGH_TOKEN = 0x0700 - POINT_TOKEN = 0x0701 - POLYGON_TOKEN = 0x0703 - - EXP = 0x0800 - EXP2 = 0x0801 - LINEAR = 0x2601 - - FOG_COLOR = 0x0B66 - FOG_DENSITY = 0x0B62 - FOG_END = 0x0B64 - FOG_INDEX = 0x0B61 - FOG_MODE = 0x0B65 - FOG_START = 0x0B63 - - CCW = 0x0901 - CW = 0x0900 - - COEFF = 0x0A00 - DOMAIN = 0x0A02 - ORDER = 0x0A01 - - PIXEL_MAP_A_TO_A = 0x0C79 - PIXEL_MAP_B_TO_B = 0x0C78 - PIXEL_MAP_G_TO_G = 0x0C77 - PIXEL_MAP_I_TO_A = 0x0C75 - PIXEL_MAP_I_TO_B = 0x0C74 - PIXEL_MAP_I_TO_G = 0x0C73 - PIXEL_MAP_I_TO_I = 0x0C70 - PIXEL_MAP_I_TO_R = 0x0C72 - PIXEL_MAP_R_TO_R = 0x0C76 - PIXEL_MAP_S_TO_S = 0x0C71 - - ACCUM_ALPHA_BITS = 0x0D5B - ACCUM_BLUE_BITS = 0x0D5A - ACCUM_CLEAR_VALUE = 0x0B80 - ACCUM_GREEN_BITS = 0x0D59 - ACCUM_RED_BITS = 0x0D58 - ALIASED_LINE_WIDTH_RANGE = 0x846E - ALIASED_POINT_SIZE_RANGE = 0x846D - ALPHA_BIAS = 0x0D1D - ALPHA_BITS = 0x0D55 - ALPHA_SCALE = 0x0D1C - ALPHA_TEST_FUNC = 0x0BC1 - ALPHA_TEST_REF = 0x0BC2 - ATTRIB_STACK_DEPTH = 0x0BB0 - AUX_BUFFERS = 0x0C00 - BLEND_DST = 0x0BE0 - BLEND_SRC = 0x0BE1 - BLUE_BIAS = 0x0D1B - BLUE_BITS = 0x0D54 - BLUE_SCALE = 0x0D1A - CLIENT_ATTRIB_STACK_DEPTH = 0x0BB1 - COLOR_ARRAY_SIZE = 0x8081 - COLOR_ARRAY_STRIDE = 0x8083 - COLOR_ARRAY_TYPE = 0x8082 - COLOR_CLEAR_VALUE = 0x0C22 - COLOR_MATERIAL_FACE = 0x0B55 - COLOR_MATERIAL_PARAMETER = 0x0B56 - COLOR_WRITEMASK = 0x0C23 - CULL_FACE_MODE = 0x0B45 - CURRENT_COLOR = 0x0B00 - CURRENT_INDEX = 0x0B01 - CURRENT_NORMAL = 0x0B02 - CURRENT_RASTER_COLOR = 0x0B04 - CURRENT_RASTER_DISTANCE = 0x0B09 - CURRENT_RASTER_INDEX = 0x0B05 - CURRENT_RASTER_POSITION = 0x0B07 - CURRENT_RASTER_POSITION_VALID = 0x0B08 - CURRENT_RASTER_TEXTURE_COORDS = 0x0B06 - CURRENT_TEXTURE_COORDS = 0x0B03 - DEPTH_BIAS = 0x0D1F - DEPTH_BITS = 0x0D56 - DEPTH_CLEAR_VALUE = 0x0B73 - DEPTH_FUNC = 0x0B74 - DEPTH_RANGE = 0x0B70 - DEPTH_SCALE = 0x0D1E - DEPTH_WRITEMASK = 0x0B72 - DOUBLEBUFFER = 0x0C32 - DRAW_BUFFER = 0x0C01 - EDGE_FLAG = 0x0B43 - EDGE_FLAG_ARRAY_STRIDE = 0x808C - FEEDBACK_BUFFER_SIZE = 0x0DF1 - FEEDBACK_BUFFER_TYPE = 0x0DF2 - FOG_HINT = 0x0C54 - FRONT_FACE = 0x0B46 - GREEN_BIAS = 0x0D19 - GREEN_BITS = 0x0D53 - GREEN_SCALE = 0x0D18 - INDEX_ARRAY_STRIDE = 0x8086 - INDEX_ARRAY_TYPE = 0x8085 - INDEX_BITS = 0x0D51 - INDEX_CLEAR_VALUE = 0x0C20 - INDEX_MODE = 0x0C30 - INDEX_OFFSET = 0x0D13 - INDEX_SHIFT = 0x0D12 - INDEX_WRITEMASK = 0x0C21 - LIGHT_MODEL_AMBIENT = 0x0B53 - LIGHT_MODEL_COLOR_CONTROL = 0x81F8 - LIGHT_MODEL_LOCAL_VIEWER = 0x0B51 - LIGHT_MODEL_TWO_SIDE = 0x0B52 - LINE_SMOOTH_HINT = 0x0C52 - LINE_STIPPLE_PATTERN = 0x0B25 - LINE_STIPPLE_REPEAT = 0x0B26 - LINE_WIDTH = 0x0B21 - LINE_WIDTH_GRANULARITY = 0x0B23 - LINE_WIDTH_RANGE = 0x0B22 - LIST_BASE = 0x0B32 - LIST_INDEX = 0x0B33 - LIST_MODE = 0x0B30 - LOGIC_OP_MODE = 0x0BF0 - MAP1_GRID_DOMAIN = 0x0DD0 - MAP1_GRID_SEGMENTS = 0x0DD1 - MAP2_GRID_DOMAIN = 0x0DD2 - MAP2_GRID_SEGMENTS = 0x0DD3 - MAP_COLOR = 0x0D10 - MAP_STENCIL = 0x0D11 - MATRIX_MODE = 0x0BA0 - MAX_ATTRIB_STACK_DEPTH = 0x0D35 - MAX_CLIENT_ATTRIB_STACK_DEPTH = 0x0D3B - MAX_CLIP_DISTANCES = 0x0D32 - MAX_CLIP_PLANES = 0x0D32 - MAX_EVAL_ORDER = 0x0D30 - MAX_LIGHTS = 0x0D31 - MAX_LIST_NESTING = 0x0B31 - MAX_MODELVIEW_STACK_DEPTH = 0x0D36 - MAX_NAME_STACK_DEPTH = 0x0D37 - MAX_PIXEL_MAP_TABLE = 0x0D34 - MAX_PROJECTION_STACK_DEPTH = 0x0D38 - MAX_TEXTURE_SIZE = 0x0D33 - MAX_TEXTURE_STACK_DEPTH = 0x0D39 - MAX_VIEWPORT_DIMS = 0x0D3A - MODELVIEW_MATRIX = 0x0BA6 - MODELVIEW_STACK_DEPTH = 0x0BA3 - NAME_STACK_DEPTH = 0x0D70 - NORMAL_ARRAY_STRIDE = 0x807F - NORMAL_ARRAY_TYPE = 0x807E - PACK_ALIGNMENT = 0x0D05 - PACK_LSB_FIRST = 0x0D01 - PACK_ROW_LENGTH = 0x0D02 - PACK_SKIP_PIXELS = 0x0D04 - PACK_SKIP_ROWS = 0x0D03 - PACK_SWAP_BYTES = 0x0D00 - PERSPECTIVE_CORRECTION_HINT = 0x0C50 - PIXEL_MAP_A_TO_A_SIZE = 0x0CB9 - PIXEL_MAP_B_TO_B_SIZE = 0x0CB8 - PIXEL_MAP_G_TO_G_SIZE = 0x0CB7 - PIXEL_MAP_I_TO_A_SIZE = 0x0CB5 - PIXEL_MAP_I_TO_B_SIZE = 0x0CB4 - PIXEL_MAP_I_TO_G_SIZE = 0x0CB3 - PIXEL_MAP_I_TO_I_SIZE = 0x0CB0 - PIXEL_MAP_I_TO_R_SIZE = 0x0CB2 - PIXEL_MAP_R_TO_R_SIZE = 0x0CB6 - PIXEL_MAP_S_TO_S_SIZE = 0x0CB1 - POINT_SIZE = 0x0B11 - POINT_SIZE_GRANULARITY = 0x0B13 - POINT_SIZE_RANGE = 0x0B12 - POINT_SMOOTH_HINT = 0x0C51 - POLYGON_MODE = 0x0B40 - POLYGON_OFFSET_FACTOR = 0x8038 - POLYGON_OFFSET_UNITS = 0x2A00 - POLYGON_SMOOTH_HINT = 0x0C53 - PROJECTION_MATRIX = 0x0BA7 - PROJECTION_STACK_DEPTH = 0x0BA4 - READ_BUFFER = 0x0C02 - RED_BIAS = 0x0D15 - RED_BITS = 0x0D52 - RED_SCALE = 0x0D14 - RENDER_MODE = 0x0C40 - RGBA_MODE = 0x0C31 - SCISSOR_BOX = 0x0C10 - SELECTION_BUFFER_SIZE = 0x0DF4 - SHADE_MODEL = 0x0B54 - SMOOTH_LINE_WIDTH_GRANULARITY = 0x0B23 - SMOOTH_LINE_WIDTH_RANGE = 0x0B22 - SMOOTH_POINT_SIZE_GRANULARITY = 0x0B13 - SMOOTH_POINT_SIZE_RANGE = 0x0B12 - STENCIL_BITS = 0x0D57 - STENCIL_CLEAR_VALUE = 0x0B91 - STENCIL_FAIL = 0x0B94 - STENCIL_FUNC = 0x0B92 - STENCIL_PASS_DEPTH_FAIL = 0x0B95 - STENCIL_PASS_DEPTH_PASS = 0x0B96 - STENCIL_REF = 0x0B97 - STENCIL_VALUE_MASK = 0x0B93 - STENCIL_WRITEMASK = 0x0B98 - STEREO = 0x0C33 - SUBPIXEL_BITS = 0x0D50 - TEXTURE_BINDING_1D = 0x8068 - TEXTURE_BINDING_2D = 0x8069 - TEXTURE_BINDING_3D = 0x806A - TEXTURE_COORD_ARRAY_SIZE = 0x8088 - TEXTURE_COORD_ARRAY_STRIDE = 0x808A - TEXTURE_COORD_ARRAY_TYPE = 0x8089 - TEXTURE_MATRIX = 0x0BA8 - TEXTURE_STACK_DEPTH = 0x0BA5 - UNPACK_ALIGNMENT = 0x0CF5 - UNPACK_LSB_FIRST = 0x0CF1 - UNPACK_ROW_LENGTH = 0x0CF2 - UNPACK_SKIP_PIXELS = 0x0CF4 - UNPACK_SKIP_ROWS = 0x0CF3 - UNPACK_SWAP_BYTES = 0x0CF0 - VERTEX_ARRAY_SIZE = 0x807A - VERTEX_ARRAY_STRIDE = 0x807C - VERTEX_ARRAY_TYPE = 0x807B - VIEWPORT = 0x0BA2 - ZOOM_X = 0x0D16 - ZOOM_Y = 0x0D17 - - COLOR_ARRAY_POINTER = 0x8090 - EDGE_FLAG_ARRAY_POINTER = 0x8093 - FEEDBACK_BUFFER_POINTER = 0x0DF0 - INDEX_ARRAY_POINTER = 0x8091 - NORMAL_ARRAY_POINTER = 0x808F - SELECTION_BUFFER_POINTER = 0x0DF3 - TEXTURE_COORD_ARRAY_POINTER = 0x8092 - VERTEX_ARRAY_POINTER = 0x808E - - TEXTURE_ALPHA_SIZE = 0x805F - TEXTURE_BLUE_SIZE = 0x805E - TEXTURE_BORDER = 0x1005 - TEXTURE_BORDER_COLOR = 0x1004 - TEXTURE_COMPONENTS = 0x1003 - TEXTURE_GREEN_SIZE = 0x805D - TEXTURE_HEIGHT = 0x1001 - TEXTURE_INTENSITY_SIZE = 0x8061 - TEXTURE_INTERNAL_FORMAT = 0x1003 - TEXTURE_LUMINANCE_SIZE = 0x8060 - TEXTURE_MAG_FILTER = 0x2800 - TEXTURE_MIN_FILTER = 0x2801 - TEXTURE_PRIORITY = 0x8066 - TEXTURE_RED_SIZE = 0x805C - TEXTURE_RESIDENT = 0x8067 - TEXTURE_WIDTH = 0x1000 - TEXTURE_WRAP_S = 0x2802 - TEXTURE_WRAP_T = 0x2803 - - DONT_CARE = 0x1100 - FASTEST = 0x1101 - NICEST = 0x1102 - - FRAGMENT_SHADER_DERIVATIVE_HINT = 0x8B8B - GENERATE_MIPMAP_HINT = 0x8192 - TEXTURE_COMPRESSION_HINT = 0x84EF - - C3F_V3F = 0x2A24 - C4F_N3F_V3F = 0x2A26 - C4UB_V2F = 0x2A22 - C4UB_V3F = 0x2A23 - N3F_V3F = 0x2A25 - T2F_C3F_V3F = 0x2A2A - T2F_C4F_N3F_V3F = 0x2A2C - T2F_C4UB_V3F = 0x2A29 - T2F_N3F_V3F = 0x2A2B - T2F_V3F = 0x2A27 - T4F_C4F_N3F_V4F = 0x2A2D - T4F_V4F = 0x2A28 - V2F = 0x2A20 - V3F = 0x2A21 - - MODULATE = 0x2100 - REPLACE = 0x1E01 - - SEPARATE_SPECULAR_COLOR = 0x81FA - SINGLE_COLOR = 0x81F9 - - CONSTANT_ATTENUATION = 0x1207 - LINEAR_ATTENUATION = 0x1208 - POSITION = 0x1203 - QUADRATIC_ATTENUATION = 0x1209 - SPOT_CUTOFF = 0x1206 - SPOT_DIRECTION = 0x1204 - SPOT_EXPONENT = 0x1205 - - COMPILE = 0x1300 - COMPILE_AND_EXECUTE = 0x1301 - - AND = 0x1501 - AND_INVERTED = 0x1504 - AND_REVERSE = 0x1502 - CLEAR = 0x1500 - COPY = 0x1503 - COPY_INVERTED = 0x150C - EQUIV = 0x1509 - INVERT = 0x150A - NAND = 0x150E - NOOP = 0x1505 - NOR = 0x1508 - OR = 0x1507 - OR_INVERTED = 0x150D - OR_REVERSE = 0x150B - SET = 0x150F - XOR = 0x1506 - - MAP_FLUSH_EXPLICIT_BIT = 0x0010 - MAP_INVALIDATE_BUFFER_BIT = 0x0008 - MAP_INVALIDATE_RANGE_BIT = 0x0004 - MAP_READ_BIT = 0x0001 - MAP_UNSYNCHRONIZED_BIT = 0x0020 - MAP_WRITE_BIT = 0x0002 - - COLOR_INDEXES = 0x1603 - SHININESS = 0x1601 - - MODELVIEW = 0x1700 - PROJECTION = 0x1701 - TEXTURE = 0x1702 - - LINE = 0x1B01 - POINT = 0x1B00 - - FILL = 0x1B02 - - COLOR = 0x1800 - DEPTH = 0x1801 - STENCIL = 0x1802 - - ALPHA = 0x1906 - BLUE = 0x1905 - COLOR_INDEX = 0x1900 - DEPTH_COMPONENT = 0x1902 - GREEN = 0x1904 - LUMINANCE = 0x1909 - LUMINANCE_ALPHA = 0x190A - RED = 0x1903 - RGB = 0x1907 - RGBA = 0x1908 - STENCIL_INDEX = 0x1901 - - ALPHA12 = 0x803D - ALPHA16 = 0x803E - ALPHA4 = 0x803B - ALPHA8 = 0x803C - INTENSITY = 0x8049 - INTENSITY12 = 0x804C - INTENSITY16 = 0x804D - INTENSITY4 = 0x804A - INTENSITY8 = 0x804B - LUMINANCE12 = 0x8041 - LUMINANCE12_ALPHA12 = 0x8047 - LUMINANCE12_ALPHA4 = 0x8046 - LUMINANCE16 = 0x8042 - LUMINANCE16_ALPHA16 = 0x8048 - LUMINANCE4 = 0x803F - LUMINANCE4_ALPHA4 = 0x8043 - LUMINANCE6_ALPHA2 = 0x8044 - LUMINANCE8 = 0x8040 - LUMINANCE8_ALPHA8 = 0x8045 - R3_G3_B2 = 0x2A10 - RGB10 = 0x8052 - RGB10_A2 = 0x8059 - RGB12 = 0x8053 - RGB16 = 0x8054 - RGB4 = 0x804F - RGB5 = 0x8050 - RGB5_A1 = 0x8057 - RGB8 = 0x8051 - RGBA12 = 0x805A - RGBA16 = 0x805B - RGBA2 = 0x8055 - RGBA4 = 0x8056 - RGBA8 = 0x8058 - - PACK_IMAGE_HEIGHT = 0x806C - PACK_SKIP_IMAGES = 0x806B - UNPACK_IMAGE_HEIGHT = 0x806E - UNPACK_SKIP_IMAGES = 0x806D - - BITMAP = 0x1A00 - UNSIGNED_BYTE_3_3_2 = 0x8032 - UNSIGNED_INT_10_10_10_2 = 0x8036 - UNSIGNED_INT_8_8_8_8 = 0x8035 - UNSIGNED_SHORT_4_4_4_4 = 0x8033 - UNSIGNED_SHORT_5_5_5_1 = 0x8034 - - POINT_DISTANCE_ATTENUATION = 0x8129 - POINT_FADE_THRESHOLD_SIZE = 0x8128 - POINT_SIZE_MAX = 0x8127 - POINT_SIZE_MIN = 0x8126 - - LINES = 0x0001 - LINES_ADJACENCY = 0x000A - LINE_LOOP = 0x0002 - LINE_STRIP = 0x0003 - LINE_STRIP_ADJACENCY = 0x000B - PATCHES = 0x000E - POINTS = 0x0000 - POLYGON = 0x0009 - QUADS = 0x0007 - QUAD_STRIP = 0x0008 - TRIANGLES = 0x0004 - TRIANGLES_ADJACENCY = 0x000C - TRIANGLE_FAN = 0x0006 - TRIANGLE_STRIP = 0x0005 - TRIANGLE_STRIP_ADJACENCY = 0x000D - - FEEDBACK = 0x1C01 - RENDER = 0x1C00 - SELECT = 0x1C02 - - FLAT = 0x1D00 - SMOOTH = 0x1D01 - - DECR = 0x1E03 - INCR = 0x1E02 - KEEP = 0x1E00 - - EXTENSIONS = 0x1F03 - RENDERER = 0x1F01 - VENDOR = 0x1F00 - VERSION = 0x1F02 - - S = 0x2000 - T = 0x2001 - R = 0x2002 - Q = 0x2003 - - DECAL = 0x2101 - - TEXTURE_ENV_COLOR = 0x2201 - TEXTURE_ENV_MODE = 0x2200 - - TEXTURE_ENV = 0x2300 - - EYE_LINEAR = 0x2400 - OBJECT_LINEAR = 0x2401 - SPHERE_MAP = 0x2402 - - EYE_PLANE = 0x2502 - OBJECT_PLANE = 0x2501 - TEXTURE_GEN_MODE = 0x2500 - - NEAREST = 0x2600 - - LINEAR_MIPMAP_LINEAR = 0x2703 - LINEAR_MIPMAP_NEAREST = 0x2701 - NEAREST_MIPMAP_LINEAR = 0x2702 - NEAREST_MIPMAP_NEAREST = 0x2700 - - GENERATE_MIPMAP = 0x8191 - TEXTURE_WRAP_R = 0x8072 - - PROXY_TEXTURE_1D = 0x8063 - PROXY_TEXTURE_2D = 0x8064 - PROXY_TEXTURE_3D = 0x8070 - TEXTURE_3D = 0x806F - TEXTURE_BASE_LEVEL = 0x813C - TEXTURE_MAX_LEVEL = 0x813D - TEXTURE_MAX_LOD = 0x813B - TEXTURE_MIN_LOD = 0x813A - - CLAMP = 0x2900 - CLAMP_TO_BORDER = 0x812D - CLAMP_TO_EDGE = 0x812F - REPEAT = 0x2901 - - SYNC_FLUSH_COMMANDS_BIT = 0x00000001 - INVALID_INDEX = 0xFFFFFFFF - TIMEOUT_IGNORED = 0xFFFFFFFFFFFFFFFF - CONSTANT_COLOR = 0x8001 - ONE_MINUS_CONSTANT_COLOR = 0x8002 - CONSTANT_ALPHA = 0x8003 - ONE_MINUS_CONSTANT_ALPHA = 0x8004 - FUNC_ADD = 0x8006 - MIN = 0x8007 - MAX = 0x8008 - BLEND_EQUATION_RGB = 0x8009 - FUNC_SUBTRACT = 0x800A - FUNC_REVERSE_SUBTRACT = 0x800B - RESCALE_NORMAL = 0x803A - TEXTURE_DEPTH = 0x8071 - MAX_3D_TEXTURE_SIZE = 0x8073 - MULTISAMPLE = 0x809D - SAMPLE_ALPHA_TO_COVERAGE = 0x809E - SAMPLE_ALPHA_TO_ONE = 0x809F - SAMPLE_COVERAGE = 0x80A0 - SAMPLE_BUFFERS = 0x80A8 - SAMPLES = 0x80A9 - SAMPLE_COVERAGE_VALUE = 0x80AA - SAMPLE_COVERAGE_INVERT = 0x80AB - BLEND_DST_RGB = 0x80C8 - BLEND_SRC_RGB = 0x80C9 - BLEND_DST_ALPHA = 0x80CA - BLEND_SRC_ALPHA = 0x80CB - BGR = 0x80E0 - BGRA = 0x80E1 - MAX_ELEMENTS_VERTICES = 0x80E8 - MAX_ELEMENTS_INDICES = 0x80E9 - DEPTH_COMPONENT16 = 0x81A5 - DEPTH_COMPONENT24 = 0x81A6 - DEPTH_COMPONENT32 = 0x81A7 - FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING = 0x8210 - FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE = 0x8211 - FRAMEBUFFER_ATTACHMENT_RED_SIZE = 0x8212 - FRAMEBUFFER_ATTACHMENT_GREEN_SIZE = 0x8213 - FRAMEBUFFER_ATTACHMENT_BLUE_SIZE = 0x8214 - FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE = 0x8215 - FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE = 0x8216 - FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE = 0x8217 - FRAMEBUFFER_DEFAULT = 0x8218 - FRAMEBUFFER_UNDEFINED = 0x8219 - DEPTH_STENCIL_ATTACHMENT = 0x821A - MAJOR_VERSION = 0x821B - MINOR_VERSION = 0x821C - NUM_EXTENSIONS = 0x821D - CONTEXT_FLAGS = 0x821E - COMPRESSED_RED = 0x8225 - COMPRESSED_RG = 0x8226 - RG = 0x8227 - RG_INTEGER = 0x8228 - R8 = 0x8229 - R16 = 0x822A - RG8 = 0x822B - RG16 = 0x822C - R16F = 0x822D - R32F = 0x822E - RG16F = 0x822F - RG32F = 0x8230 - R8I = 0x8231 - R8UI = 0x8232 - R16I = 0x8233 - R16UI = 0x8234 - R32I = 0x8235 - R32UI = 0x8236 - RG8I = 0x8237 - RG8UI = 0x8238 - RG16I = 0x8239 - RG16UI = 0x823A - RG32I = 0x823B - RG32UI = 0x823C - UNSIGNED_BYTE_2_3_3_REV = 0x8362 - UNSIGNED_SHORT_5_6_5 = 0x8363 - UNSIGNED_SHORT_5_6_5_REV = 0x8364 - UNSIGNED_SHORT_4_4_4_4_REV = 0x8365 - UNSIGNED_SHORT_1_5_5_5_REV = 0x8366 - UNSIGNED_INT_8_8_8_8_REV = 0x8367 - UNSIGNED_INT_2_10_10_10_REV = 0x8368 - MIRRORED_REPEAT = 0x8370 - FOG_COORDINATE_SOURCE = 0x8450 - FOG_COORD_SRC = 0x8450 - FOG_COORDINATE = 0x8451 - FOG_COORD = 0x8451 - FRAGMENT_DEPTH = 0x8452 - CURRENT_FOG_COORDINATE = 0x8453 - CURRENT_FOG_COORD = 0x8453 - FOG_COORDINATE_ARRAY_TYPE = 0x8454 - FOG_COORD_ARRAY_TYPE = 0x8454 - FOG_COORDINATE_ARRAY_STRIDE = 0x8455 - FOG_COORD_ARRAY_STRIDE = 0x8455 - FOG_COORDINATE_ARRAY_POINTER = 0x8456 - FOG_COORD_ARRAY_POINTER = 0x8456 - FOG_COORDINATE_ARRAY = 0x8457 - FOG_COORD_ARRAY = 0x8457 - COLOR_SUM = 0x8458 - CURRENT_SECONDARY_COLOR = 0x8459 - SECONDARY_COLOR_ARRAY_SIZE = 0x845A - SECONDARY_COLOR_ARRAY_TYPE = 0x845B - SECONDARY_COLOR_ARRAY_STRIDE = 0x845C - SECONDARY_COLOR_ARRAY_POINTER = 0x845D - SECONDARY_COLOR_ARRAY = 0x845E - CURRENT_RASTER_SECONDARY_COLOR = 0x845F - TEXTURE0 = 0x84C0 - TEXTURE1 = 0x84C1 - TEXTURE2 = 0x84C2 - TEXTURE3 = 0x84C3 - TEXTURE4 = 0x84C4 - TEXTURE5 = 0x84C5 - TEXTURE6 = 0x84C6 - TEXTURE7 = 0x84C7 - TEXTURE8 = 0x84C8 - TEXTURE9 = 0x84C9 - TEXTURE10 = 0x84CA - TEXTURE11 = 0x84CB - TEXTURE12 = 0x84CC - TEXTURE13 = 0x84CD - TEXTURE14 = 0x84CE - TEXTURE15 = 0x84CF - TEXTURE16 = 0x84D0 - TEXTURE17 = 0x84D1 - TEXTURE18 = 0x84D2 - TEXTURE19 = 0x84D3 - TEXTURE20 = 0x84D4 - TEXTURE21 = 0x84D5 - TEXTURE22 = 0x84D6 - TEXTURE23 = 0x84D7 - TEXTURE24 = 0x84D8 - TEXTURE25 = 0x84D9 - TEXTURE26 = 0x84DA - TEXTURE27 = 0x84DB - TEXTURE28 = 0x84DC - TEXTURE29 = 0x84DD - TEXTURE30 = 0x84DE - TEXTURE31 = 0x84DF - ACTIVE_TEXTURE = 0x84E0 - CLIENT_ACTIVE_TEXTURE = 0x84E1 - MAX_TEXTURE_UNITS = 0x84E2 - TRANSPOSE_MODELVIEW_MATRIX = 0x84E3 - TRANSPOSE_PROJECTION_MATRIX = 0x84E4 - TRANSPOSE_TEXTURE_MATRIX = 0x84E5 - TRANSPOSE_COLOR_MATRIX = 0x84E6 - SUBTRACT = 0x84E7 - MAX_RENDERBUFFER_SIZE = 0x84E8 - COMPRESSED_ALPHA = 0x84E9 - COMPRESSED_LUMINANCE = 0x84EA - COMPRESSED_LUMINANCE_ALPHA = 0x84EB - COMPRESSED_INTENSITY = 0x84EC - COMPRESSED_RGB = 0x84ED - COMPRESSED_RGBA = 0x84EE - UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER = 0x84F0 - UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER = 0x84F1 - TEXTURE_RECTANGLE = 0x84F5 - TEXTURE_BINDING_RECTANGLE = 0x84F6 - PROXY_TEXTURE_RECTANGLE = 0x84F7 - MAX_RECTANGLE_TEXTURE_SIZE = 0x84F8 - DEPTH_STENCIL = 0x84F9 - UNSIGNED_INT_24_8 = 0x84FA - MAX_TEXTURE_LOD_BIAS = 0x84FD - TEXTURE_FILTER_CONTROL = 0x8500 - TEXTURE_LOD_BIAS = 0x8501 - INCR_WRAP = 0x8507 - DECR_WRAP = 0x8508 - NORMAL_MAP = 0x8511 - REFLECTION_MAP = 0x8512 - TEXTURE_CUBE_MAP = 0x8513 - TEXTURE_BINDING_CUBE_MAP = 0x8514 - TEXTURE_CUBE_MAP_POSITIVE_X = 0x8515 - TEXTURE_CUBE_MAP_NEGATIVE_X = 0x8516 - TEXTURE_CUBE_MAP_POSITIVE_Y = 0x8517 - TEXTURE_CUBE_MAP_NEGATIVE_Y = 0x8518 - TEXTURE_CUBE_MAP_POSITIVE_Z = 0x8519 - TEXTURE_CUBE_MAP_NEGATIVE_Z = 0x851A - PROXY_TEXTURE_CUBE_MAP = 0x851B - MAX_CUBE_MAP_TEXTURE_SIZE = 0x851C - COMBINE = 0x8570 - COMBINE_RGB = 0x8571 - COMBINE_ALPHA = 0x8572 - RGB_SCALE = 0x8573 - ADD_SIGNED = 0x8574 - INTERPOLATE = 0x8575 - CONSTANT = 0x8576 - PRIMARY_COLOR = 0x8577 - PREVIOUS = 0x8578 - SOURCE0_RGB = 0x8580 - SRC0_RGB = 0x8580 - SOURCE1_RGB = 0x8581 - SRC1_RGB = 0x8581 - SOURCE2_RGB = 0x8582 - SRC2_RGB = 0x8582 - SOURCE0_ALPHA = 0x8588 - SRC0_ALPHA = 0x8588 - SOURCE1_ALPHA = 0x8589 - SRC1_ALPHA = 0x8589 - SOURCE2_ALPHA = 0x858A - SRC2_ALPHA = 0x858A - OPERAND0_RGB = 0x8590 - OPERAND1_RGB = 0x8591 - OPERAND2_RGB = 0x8592 - OPERAND0_ALPHA = 0x8598 - OPERAND1_ALPHA = 0x8599 - OPERAND2_ALPHA = 0x859A - VERTEX_ARRAY_BINDING = 0x85B5 - VERTEX_ATTRIB_ARRAY_ENABLED = 0x8622 - VERTEX_ATTRIB_ARRAY_SIZE = 0x8623 - VERTEX_ATTRIB_ARRAY_STRIDE = 0x8624 - VERTEX_ATTRIB_ARRAY_TYPE = 0x8625 - CURRENT_VERTEX_ATTRIB = 0x8626 - VERTEX_PROGRAM_POINT_SIZE = 0x8642 - PROGRAM_POINT_SIZE = 0x8642 - VERTEX_PROGRAM_TWO_SIDE = 0x8643 - VERTEX_ATTRIB_ARRAY_POINTER = 0x8645 - DEPTH_CLAMP = 0x864F - TEXTURE_COMPRESSED_IMAGE_SIZE = 0x86A0 - TEXTURE_COMPRESSED = 0x86A1 - NUM_COMPRESSED_TEXTURE_FORMATS = 0x86A2 - COMPRESSED_TEXTURE_FORMATS = 0x86A3 - DOT3_RGB = 0x86AE - DOT3_RGBA = 0x86AF - BUFFER_SIZE = 0x8764 - BUFFER_USAGE = 0x8765 - STENCIL_BACK_FUNC = 0x8800 - STENCIL_BACK_FAIL = 0x8801 - STENCIL_BACK_PASS_DEPTH_FAIL = 0x8802 - STENCIL_BACK_PASS_DEPTH_PASS = 0x8803 - RGBA32F = 0x8814 - RGB32F = 0x8815 - RGBA16F = 0x881A - RGB16F = 0x881B - MAX_DRAW_BUFFERS = 0x8824 - DRAW_BUFFER0 = 0x8825 - DRAW_BUFFER1 = 0x8826 - DRAW_BUFFER2 = 0x8827 - DRAW_BUFFER3 = 0x8828 - DRAW_BUFFER4 = 0x8829 - DRAW_BUFFER5 = 0x882A - DRAW_BUFFER6 = 0x882B - DRAW_BUFFER7 = 0x882C - DRAW_BUFFER8 = 0x882D - DRAW_BUFFER9 = 0x882E - DRAW_BUFFER10 = 0x882F - DRAW_BUFFER11 = 0x8830 - DRAW_BUFFER12 = 0x8831 - DRAW_BUFFER13 = 0x8832 - DRAW_BUFFER14 = 0x8833 - DRAW_BUFFER15 = 0x8834 - BLEND_EQUATION_ALPHA = 0x883D - TEXTURE_DEPTH_SIZE = 0x884A - DEPTH_TEXTURE_MODE = 0x884B - TEXTURE_COMPARE_MODE = 0x884C - TEXTURE_COMPARE_FUNC = 0x884D - COMPARE_R_TO_TEXTURE = 0x884E - COMPARE_REF_TO_TEXTURE = 0x884E - TEXTURE_CUBE_MAP_SEAMLESS = 0x884F - POINT_SPRITE = 0x8861 - COORD_REPLACE = 0x8862 - QUERY_COUNTER_BITS = 0x8864 - CURRENT_QUERY = 0x8865 - QUERY_RESULT = 0x8866 - QUERY_RESULT_AVAILABLE = 0x8867 - MAX_VERTEX_ATTRIBS = 0x8869 - VERTEX_ATTRIB_ARRAY_NORMALIZED = 0x886A - MAX_TESS_CONTROL_INPUT_COMPONENTS = 0x886C - MAX_TESS_EVALUATION_INPUT_COMPONENTS = 0x886D - MAX_TEXTURE_COORDS = 0x8871 - MAX_TEXTURE_IMAGE_UNITS = 0x8872 - GEOMETRY_SHADER_INVOCATIONS = 0x887F - ARRAY_BUFFER = 0x8892 - ELEMENT_ARRAY_BUFFER = 0x8893 - ARRAY_BUFFER_BINDING = 0x8894 - ELEMENT_ARRAY_BUFFER_BINDING = 0x8895 - VERTEX_ARRAY_BUFFER_BINDING = 0x8896 - NORMAL_ARRAY_BUFFER_BINDING = 0x8897 - COLOR_ARRAY_BUFFER_BINDING = 0x8898 - INDEX_ARRAY_BUFFER_BINDING = 0x8899 - TEXTURE_COORD_ARRAY_BUFFER_BINDING = 0x889A - EDGE_FLAG_ARRAY_BUFFER_BINDING = 0x889B - SECONDARY_COLOR_ARRAY_BUFFER_BINDING = 0x889C - FOG_COORDINATE_ARRAY_BUFFER_BINDING = 0x889D - FOG_COORD_ARRAY_BUFFER_BINDING = 0x889D - WEIGHT_ARRAY_BUFFER_BINDING = 0x889E - VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = 0x889F - READ_ONLY = 0x88B8 - WRITE_ONLY = 0x88B9 - READ_WRITE = 0x88BA - BUFFER_ACCESS = 0x88BB - BUFFER_MAPPED = 0x88BC - BUFFER_MAP_POINTER = 0x88BD - TIME_ELAPSED = 0x88BF - STREAM_DRAW = 0x88E0 - STREAM_READ = 0x88E1 - STREAM_COPY = 0x88E2 - STATIC_DRAW = 0x88E4 - STATIC_READ = 0x88E5 - STATIC_COPY = 0x88E6 - DYNAMIC_DRAW = 0x88E8 - DYNAMIC_READ = 0x88E9 - DYNAMIC_COPY = 0x88EA - PIXEL_PACK_BUFFER = 0x88EB - PIXEL_UNPACK_BUFFER = 0x88EC - PIXEL_PACK_BUFFER_BINDING = 0x88ED - PIXEL_UNPACK_BUFFER_BINDING = 0x88EF - DEPTH24_STENCIL8 = 0x88F0 - TEXTURE_STENCIL_SIZE = 0x88F1 - SRC1_COLOR = 0x88F9 - ONE_MINUS_SRC1_COLOR = 0x88FA - ONE_MINUS_SRC1_ALPHA = 0x88FB - MAX_DUAL_SOURCE_DRAW_BUFFERS = 0x88FC - VERTEX_ATTRIB_ARRAY_INTEGER = 0x88FD - VERTEX_ATTRIB_ARRAY_DIVISOR = 0x88FE - MAX_ARRAY_TEXTURE_LAYERS = 0x88FF - MIN_PROGRAM_TEXEL_OFFSET = 0x8904 - MAX_PROGRAM_TEXEL_OFFSET = 0x8905 - SAMPLES_PASSED = 0x8914 - GEOMETRY_VERTICES_OUT = 0x8916 - GEOMETRY_INPUT_TYPE = 0x8917 - GEOMETRY_OUTPUT_TYPE = 0x8918 - SAMPLER_BINDING = 0x8919 - CLAMP_VERTEX_COLOR = 0x891A - CLAMP_FRAGMENT_COLOR = 0x891B - CLAMP_READ_COLOR = 0x891C - FIXED_ONLY = 0x891D - UNIFORM_BUFFER = 0x8A11 - UNIFORM_BUFFER_BINDING = 0x8A28 - UNIFORM_BUFFER_START = 0x8A29 - UNIFORM_BUFFER_SIZE = 0x8A2A - MAX_VERTEX_UNIFORM_BLOCKS = 0x8A2B - MAX_GEOMETRY_UNIFORM_BLOCKS = 0x8A2C - MAX_FRAGMENT_UNIFORM_BLOCKS = 0x8A2D - MAX_COMBINED_UNIFORM_BLOCKS = 0x8A2E - MAX_UNIFORM_BUFFER_BINDINGS = 0x8A2F - MAX_UNIFORM_BLOCK_SIZE = 0x8A30 - MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS = 0x8A31 - MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS = 0x8A32 - MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS = 0x8A33 - UNIFORM_BUFFER_OFFSET_ALIGNMENT = 0x8A34 - ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH = 0x8A35 - ACTIVE_UNIFORM_BLOCKS = 0x8A36 - UNIFORM_TYPE = 0x8A37 - UNIFORM_SIZE = 0x8A38 - UNIFORM_NAME_LENGTH = 0x8A39 - UNIFORM_BLOCK_INDEX = 0x8A3A - UNIFORM_OFFSET = 0x8A3B - UNIFORM_ARRAY_STRIDE = 0x8A3C - UNIFORM_MATRIX_STRIDE = 0x8A3D - UNIFORM_IS_ROW_MAJOR = 0x8A3E - UNIFORM_BLOCK_BINDING = 0x8A3F - UNIFORM_BLOCK_DATA_SIZE = 0x8A40 - UNIFORM_BLOCK_NAME_LENGTH = 0x8A41 - UNIFORM_BLOCK_ACTIVE_UNIFORMS = 0x8A42 - UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES = 0x8A43 - UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER = 0x8A44 - UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER = 0x8A45 - UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER = 0x8A46 - FRAGMENT_SHADER = 0x8B30 - VERTEX_SHADER = 0x8B31 - MAX_FRAGMENT_UNIFORM_COMPONENTS = 0x8B49 - MAX_VERTEX_UNIFORM_COMPONENTS = 0x8B4A - MAX_VARYING_FLOATS = 0x8B4B - MAX_VARYING_COMPONENTS = 0x8B4B - MAX_VERTEX_TEXTURE_IMAGE_UNITS = 0x8B4C - MAX_COMBINED_TEXTURE_IMAGE_UNITS = 0x8B4D - SHADER_TYPE = 0x8B4F - FLOAT_VEC2 = 0x8B50 - FLOAT_VEC3 = 0x8B51 - FLOAT_VEC4 = 0x8B52 - INT_VEC2 = 0x8B53 - INT_VEC3 = 0x8B54 - INT_VEC4 = 0x8B55 - BOOL = 0x8B56 - BOOL_VEC2 = 0x8B57 - BOOL_VEC3 = 0x8B58 - BOOL_VEC4 = 0x8B59 - FLOAT_MAT2 = 0x8B5A - FLOAT_MAT3 = 0x8B5B - FLOAT_MAT4 = 0x8B5C - SAMPLER_1D = 0x8B5D - SAMPLER_2D = 0x8B5E - SAMPLER_3D = 0x8B5F - SAMPLER_CUBE = 0x8B60 - SAMPLER_1D_SHADOW = 0x8B61 - SAMPLER_2D_SHADOW = 0x8B62 - SAMPLER_2D_RECT = 0x8B63 - SAMPLER_2D_RECT_SHADOW = 0x8B64 - FLOAT_MAT2x3 = 0x8B65 - FLOAT_MAT2x4 = 0x8B66 - FLOAT_MAT3x2 = 0x8B67 - FLOAT_MAT3x4 = 0x8B68 - FLOAT_MAT4x2 = 0x8B69 - FLOAT_MAT4x3 = 0x8B6A - DELETE_STATUS = 0x8B80 - COMPILE_STATUS = 0x8B81 - LINK_STATUS = 0x8B82 - VALIDATE_STATUS = 0x8B83 - INFO_LOG_LENGTH = 0x8B84 - ATTACHED_SHADERS = 0x8B85 - ACTIVE_UNIFORMS = 0x8B86 - ACTIVE_UNIFORM_MAX_LENGTH = 0x8B87 - SHADER_SOURCE_LENGTH = 0x8B88 - ACTIVE_ATTRIBUTES = 0x8B89 - ACTIVE_ATTRIBUTE_MAX_LENGTH = 0x8B8A - SHADING_LANGUAGE_VERSION = 0x8B8C - CURRENT_PROGRAM = 0x8B8D - TEXTURE_RED_TYPE = 0x8C10 - TEXTURE_GREEN_TYPE = 0x8C11 - TEXTURE_BLUE_TYPE = 0x8C12 - TEXTURE_ALPHA_TYPE = 0x8C13 - TEXTURE_DEPTH_TYPE = 0x8C16 - UNSIGNED_NORMALIZED = 0x8C17 - TEXTURE_1D_ARRAY = 0x8C18 - PROXY_TEXTURE_1D_ARRAY = 0x8C19 - TEXTURE_2D_ARRAY = 0x8C1A - PROXY_TEXTURE_2D_ARRAY = 0x8C1B - TEXTURE_BINDING_1D_ARRAY = 0x8C1C - TEXTURE_BINDING_2D_ARRAY = 0x8C1D - MAX_GEOMETRY_TEXTURE_IMAGE_UNITS = 0x8C29 - TEXTURE_BUFFER = 0x8C2A - MAX_TEXTURE_BUFFER_SIZE = 0x8C2B - TEXTURE_BINDING_BUFFER = 0x8C2C - TEXTURE_BUFFER_DATA_STORE_BINDING = 0x8C2D - ANY_SAMPLES_PASSED = 0x8C2F - SAMPLE_SHADING = 0x8C36 - MIN_SAMPLE_SHADING_VALUE = 0x8C37 - R11F_G11F_B10F = 0x8C3A - UNSIGNED_INT_10F_11F_11F_REV = 0x8C3B - RGB9_E5 = 0x8C3D - UNSIGNED_INT_5_9_9_9_REV = 0x8C3E - TEXTURE_SHARED_SIZE = 0x8C3F - SRGB = 0x8C40 - SRGB8 = 0x8C41 - SRGB_ALPHA = 0x8C42 - SRGB8_ALPHA8 = 0x8C43 - SLUMINANCE_ALPHA = 0x8C44 - SLUMINANCE8_ALPHA8 = 0x8C45 - SLUMINANCE = 0x8C46 - SLUMINANCE8 = 0x8C47 - COMPRESSED_SRGB = 0x8C48 - COMPRESSED_SRGB_ALPHA = 0x8C49 - COMPRESSED_SLUMINANCE = 0x8C4A - COMPRESSED_SLUMINANCE_ALPHA = 0x8C4B - TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH = 0x8C76 - TRANSFORM_FEEDBACK_BUFFER_MODE = 0x8C7F - MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS = 0x8C80 - TRANSFORM_FEEDBACK_VARYINGS = 0x8C83 - TRANSFORM_FEEDBACK_BUFFER_START = 0x8C84 - TRANSFORM_FEEDBACK_BUFFER_SIZE = 0x8C85 - PRIMITIVES_GENERATED = 0x8C87 - TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN = 0x8C88 - RASTERIZER_DISCARD = 0x8C89 - MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS = 0x8C8A - MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS = 0x8C8B - INTERLEAVED_ATTRIBS = 0x8C8C - SEPARATE_ATTRIBS = 0x8C8D - TRANSFORM_FEEDBACK_BUFFER = 0x8C8E - TRANSFORM_FEEDBACK_BUFFER_BINDING = 0x8C8F - POINT_SPRITE_COORD_ORIGIN = 0x8CA0 - LOWER_LEFT = 0x8CA1 - UPPER_LEFT = 0x8CA2 - STENCIL_BACK_REF = 0x8CA3 - STENCIL_BACK_VALUE_MASK = 0x8CA4 - STENCIL_BACK_WRITEMASK = 0x8CA5 - DRAW_FRAMEBUFFER_BINDING = 0x8CA6 - FRAMEBUFFER_BINDING = 0x8CA6 - RENDERBUFFER_BINDING = 0x8CA7 - READ_FRAMEBUFFER = 0x8CA8 - DRAW_FRAMEBUFFER = 0x8CA9 - READ_FRAMEBUFFER_BINDING = 0x8CAA - RENDERBUFFER_SAMPLES = 0x8CAB - DEPTH_COMPONENT32F = 0x8CAC - DEPTH32F_STENCIL8 = 0x8CAD - FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE = 0x8CD0 - FRAMEBUFFER_ATTACHMENT_OBJECT_NAME = 0x8CD1 - FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL = 0x8CD2 - FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE = 0x8CD3 - FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER = 0x8CD4 - FRAMEBUFFER_COMPLETE = 0x8CD5 - FRAMEBUFFER_INCOMPLETE_ATTACHMENT = 0x8CD6 - FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = 0x8CD7 - FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER = 0x8CDB - FRAMEBUFFER_INCOMPLETE_READ_BUFFER = 0x8CDC - FRAMEBUFFER_UNSUPPORTED = 0x8CDD - MAX_COLOR_ATTACHMENTS = 0x8CDF - COLOR_ATTACHMENT0 = 0x8CE0 - COLOR_ATTACHMENT1 = 0x8CE1 - COLOR_ATTACHMENT2 = 0x8CE2 - COLOR_ATTACHMENT3 = 0x8CE3 - COLOR_ATTACHMENT4 = 0x8CE4 - COLOR_ATTACHMENT5 = 0x8CE5 - COLOR_ATTACHMENT6 = 0x8CE6 - COLOR_ATTACHMENT7 = 0x8CE7 - COLOR_ATTACHMENT8 = 0x8CE8 - COLOR_ATTACHMENT9 = 0x8CE9 - COLOR_ATTACHMENT10 = 0x8CEA - COLOR_ATTACHMENT11 = 0x8CEB - COLOR_ATTACHMENT12 = 0x8CEC - COLOR_ATTACHMENT13 = 0x8CED - COLOR_ATTACHMENT14 = 0x8CEE - COLOR_ATTACHMENT15 = 0x8CEF - DEPTH_ATTACHMENT = 0x8D00 - STENCIL_ATTACHMENT = 0x8D20 - FRAMEBUFFER = 0x8D40 - RENDERBUFFER = 0x8D41 - RENDERBUFFER_WIDTH = 0x8D42 - RENDERBUFFER_HEIGHT = 0x8D43 - RENDERBUFFER_INTERNAL_FORMAT = 0x8D44 - STENCIL_INDEX1 = 0x8D46 - STENCIL_INDEX4 = 0x8D47 - STENCIL_INDEX8 = 0x8D48 - STENCIL_INDEX16 = 0x8D49 - RENDERBUFFER_RED_SIZE = 0x8D50 - RENDERBUFFER_GREEN_SIZE = 0x8D51 - RENDERBUFFER_BLUE_SIZE = 0x8D52 - RENDERBUFFER_ALPHA_SIZE = 0x8D53 - RENDERBUFFER_DEPTH_SIZE = 0x8D54 - RENDERBUFFER_STENCIL_SIZE = 0x8D55 - FRAMEBUFFER_INCOMPLETE_MULTISAMPLE = 0x8D56 - MAX_SAMPLES = 0x8D57 - RGBA32UI = 0x8D70 - RGB32UI = 0x8D71 - RGBA16UI = 0x8D76 - RGB16UI = 0x8D77 - RGBA8UI = 0x8D7C - RGB8UI = 0x8D7D - RGBA32I = 0x8D82 - RGB32I = 0x8D83 - RGBA16I = 0x8D88 - RGB16I = 0x8D89 - RGBA8I = 0x8D8E - RGB8I = 0x8D8F - RED_INTEGER = 0x8D94 - GREEN_INTEGER = 0x8D95 - BLUE_INTEGER = 0x8D96 - ALPHA_INTEGER = 0x8D97 - RGB_INTEGER = 0x8D98 - RGBA_INTEGER = 0x8D99 - BGR_INTEGER = 0x8D9A - BGRA_INTEGER = 0x8D9B - INT_2_10_10_10_REV = 0x8D9F - FRAMEBUFFER_ATTACHMENT_LAYERED = 0x8DA7 - FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS = 0x8DA8 - FLOAT_32_UNSIGNED_INT_24_8_REV = 0x8DAD - FRAMEBUFFER_SRGB = 0x8DB9 - COMPRESSED_RED_RGTC1 = 0x8DBB - COMPRESSED_SIGNED_RED_RGTC1 = 0x8DBC - COMPRESSED_RG_RGTC2 = 0x8DBD - COMPRESSED_SIGNED_RG_RGTC2 = 0x8DBE - SAMPLER_1D_ARRAY = 0x8DC0 - SAMPLER_2D_ARRAY = 0x8DC1 - SAMPLER_BUFFER = 0x8DC2 - SAMPLER_1D_ARRAY_SHADOW = 0x8DC3 - SAMPLER_2D_ARRAY_SHADOW = 0x8DC4 - SAMPLER_CUBE_SHADOW = 0x8DC5 - UNSIGNED_INT_VEC2 = 0x8DC6 - UNSIGNED_INT_VEC3 = 0x8DC7 - UNSIGNED_INT_VEC4 = 0x8DC8 - INT_SAMPLER_1D = 0x8DC9 - INT_SAMPLER_2D = 0x8DCA - INT_SAMPLER_3D = 0x8DCB - INT_SAMPLER_CUBE = 0x8DCC - INT_SAMPLER_2D_RECT = 0x8DCD - INT_SAMPLER_1D_ARRAY = 0x8DCE - INT_SAMPLER_2D_ARRAY = 0x8DCF - INT_SAMPLER_BUFFER = 0x8DD0 - UNSIGNED_INT_SAMPLER_1D = 0x8DD1 - UNSIGNED_INT_SAMPLER_2D = 0x8DD2 - UNSIGNED_INT_SAMPLER_3D = 0x8DD3 - UNSIGNED_INT_SAMPLER_CUBE = 0x8DD4 - UNSIGNED_INT_SAMPLER_2D_RECT = 0x8DD5 - UNSIGNED_INT_SAMPLER_1D_ARRAY = 0x8DD6 - UNSIGNED_INT_SAMPLER_2D_ARRAY = 0x8DD7 - UNSIGNED_INT_SAMPLER_BUFFER = 0x8DD8 - GEOMETRY_SHADER = 0x8DD9 - MAX_GEOMETRY_UNIFORM_COMPONENTS = 0x8DDF - MAX_GEOMETRY_OUTPUT_VERTICES = 0x8DE0 - MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS = 0x8DE1 - ACTIVE_SUBROUTINES = 0x8DE5 - ACTIVE_SUBROUTINE_UNIFORMS = 0x8DE6 - MAX_SUBROUTINES = 0x8DE7 - MAX_SUBROUTINE_UNIFORM_LOCATIONS = 0x8DE8 - QUERY_WAIT = 0x8E13 - QUERY_NO_WAIT = 0x8E14 - QUERY_BY_REGION_WAIT = 0x8E15 - QUERY_BY_REGION_NO_WAIT = 0x8E16 - MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS = 0x8E1E - MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS = 0x8E1F - TRANSFORM_FEEDBACK = 0x8E22 - TRANSFORM_FEEDBACK_BUFFER_PAUSED = 0x8E23 - TRANSFORM_FEEDBACK_BUFFER_ACTIVE = 0x8E24 - TRANSFORM_FEEDBACK_BINDING = 0x8E25 - TIMESTAMP = 0x8E28 - TEXTURE_SWIZZLE_R = 0x8E42 - TEXTURE_SWIZZLE_G = 0x8E43 - TEXTURE_SWIZZLE_B = 0x8E44 - TEXTURE_SWIZZLE_A = 0x8E45 - TEXTURE_SWIZZLE_RGBA = 0x8E46 - ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS = 0x8E47 - ACTIVE_SUBROUTINE_MAX_LENGTH = 0x8E48 - ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH = 0x8E49 - NUM_COMPATIBLE_SUBROUTINES = 0x8E4A - COMPATIBLE_SUBROUTINES = 0x8E4B - QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION = 0x8E4C - FIRST_VERTEX_CONVENTION = 0x8E4D - LAST_VERTEX_CONVENTION = 0x8E4E - PROVOKING_VERTEX = 0x8E4F - SAMPLE_POSITION = 0x8E50 - SAMPLE_MASK = 0x8E51 - SAMPLE_MASK_VALUE = 0x8E52 - MAX_SAMPLE_MASK_WORDS = 0x8E59 - MAX_GEOMETRY_SHADER_INVOCATIONS = 0x8E5A - MIN_FRAGMENT_INTERPOLATION_OFFSET = 0x8E5B - MAX_FRAGMENT_INTERPOLATION_OFFSET = 0x8E5C - FRAGMENT_INTERPOLATION_OFFSET_BITS = 0x8E5D - MIN_PROGRAM_TEXTURE_GATHER_OFFSET = 0x8E5E - MAX_PROGRAM_TEXTURE_GATHER_OFFSET = 0x8E5F - MAX_TRANSFORM_FEEDBACK_BUFFERS = 0x8E70 - MAX_VERTEX_STREAMS = 0x8E71 - PATCH_VERTICES = 0x8E72 - PATCH_DEFAULT_INNER_LEVEL = 0x8E73 - PATCH_DEFAULT_OUTER_LEVEL = 0x8E74 - TESS_CONTROL_OUTPUT_VERTICES = 0x8E75 - TESS_GEN_MODE = 0x8E76 - TESS_GEN_SPACING = 0x8E77 - TESS_GEN_VERTEX_ORDER = 0x8E78 - TESS_GEN_POINT_MODE = 0x8E79 - ISOLINES = 0x8E7A - FRACTIONAL_ODD = 0x8E7B - FRACTIONAL_EVEN = 0x8E7C - MAX_PATCH_VERTICES = 0x8E7D - MAX_TESS_GEN_LEVEL = 0x8E7E - MAX_TESS_CONTROL_UNIFORM_COMPONENTS = 0x8E7F - MAX_TESS_EVALUATION_UNIFORM_COMPONENTS = 0x8E80 - MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS = 0x8E81 - MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS = 0x8E82 - MAX_TESS_CONTROL_OUTPUT_COMPONENTS = 0x8E83 - MAX_TESS_PATCH_COMPONENTS = 0x8E84 - MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS = 0x8E85 - MAX_TESS_EVALUATION_OUTPUT_COMPONENTS = 0x8E86 - TESS_EVALUATION_SHADER = 0x8E87 - TESS_CONTROL_SHADER = 0x8E88 - MAX_TESS_CONTROL_UNIFORM_BLOCKS = 0x8E89 - MAX_TESS_EVALUATION_UNIFORM_BLOCKS = 0x8E8A - COPY_READ_BUFFER = 0x8F36 - COPY_WRITE_BUFFER = 0x8F37 - DRAW_INDIRECT_BUFFER = 0x8F3F - DRAW_INDIRECT_BUFFER_BINDING = 0x8F43 - DOUBLE_MAT2 = 0x8F46 - DOUBLE_MAT3 = 0x8F47 - DOUBLE_MAT4 = 0x8F48 - DOUBLE_MAT2x3 = 0x8F49 - DOUBLE_MAT2x4 = 0x8F4A - DOUBLE_MAT3x2 = 0x8F4B - DOUBLE_MAT3x4 = 0x8F4C - DOUBLE_MAT4x2 = 0x8F4D - DOUBLE_MAT4x3 = 0x8F4E - R8_SNORM = 0x8F94 - RG8_SNORM = 0x8F95 - RGB8_SNORM = 0x8F96 - RGBA8_SNORM = 0x8F97 - R16_SNORM = 0x8F98 - RG16_SNORM = 0x8F99 - RGB16_SNORM = 0x8F9A - RGBA16_SNORM = 0x8F9B - SIGNED_NORMALIZED = 0x8F9C - PRIMITIVE_RESTART = 0x8F9D - PRIMITIVE_RESTART_INDEX = 0x8F9E - DOUBLE_VEC2 = 0x8FFC - DOUBLE_VEC3 = 0x8FFD - DOUBLE_VEC4 = 0x8FFE - TEXTURE_CUBE_MAP_ARRAY = 0x9009 - TEXTURE_BINDING_CUBE_MAP_ARRAY = 0x900A - PROXY_TEXTURE_CUBE_MAP_ARRAY = 0x900B - SAMPLER_CUBE_MAP_ARRAY = 0x900C - SAMPLER_CUBE_MAP_ARRAY_SHADOW = 0x900D - INT_SAMPLER_CUBE_MAP_ARRAY = 0x900E - UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY = 0x900F - RGB10_A2UI = 0x906F - TEXTURE_2D_MULTISAMPLE = 0x9100 - PROXY_TEXTURE_2D_MULTISAMPLE = 0x9101 - TEXTURE_2D_MULTISAMPLE_ARRAY = 0x9102 - PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY = 0x9103 - TEXTURE_BINDING_2D_MULTISAMPLE = 0x9104 - TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY = 0x9105 - TEXTURE_SAMPLES = 0x9106 - TEXTURE_FIXED_SAMPLE_LOCATIONS = 0x9107 - SAMPLER_2D_MULTISAMPLE = 0x9108 - INT_SAMPLER_2D_MULTISAMPLE = 0x9109 - UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE = 0x910A - SAMPLER_2D_MULTISAMPLE_ARRAY = 0x910B - INT_SAMPLER_2D_MULTISAMPLE_ARRAY = 0x910C - UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY = 0x910D - MAX_COLOR_TEXTURE_SAMPLES = 0x910E - MAX_DEPTH_TEXTURE_SAMPLES = 0x910F - MAX_INTEGER_SAMPLES = 0x9110 - MAX_SERVER_WAIT_TIMEOUT = 0x9111 - OBJECT_TYPE = 0x9112 - SYNC_CONDITION = 0x9113 - SYNC_STATUS = 0x9114 - SYNC_FLAGS = 0x9115 - SYNC_FENCE = 0x9116 - SYNC_GPU_COMMANDS_COMPLETE = 0x9117 - UNSIGNALED = 0x9118 - SIGNALED = 0x9119 - ALREADY_SIGNALED = 0x911A - TIMEOUT_EXPIRED = 0x911B - CONDITION_SATISFIED = 0x911C - WAIT_FAILED = 0x911D - BUFFER_ACCESS_FLAGS = 0x911F - BUFFER_MAP_LENGTH = 0x9120 - BUFFER_MAP_OFFSET = 0x9121 - MAX_VERTEX_OUTPUT_COMPONENTS = 0x9122 - MAX_GEOMETRY_INPUT_COMPONENTS = 0x9123 - MAX_GEOMETRY_OUTPUT_COMPONENTS = 0x9124 - MAX_FRAGMENT_INPUT_COMPONENTS = 0x9125 - CONTEXT_PROFILE_MASK = 0x9126 -) - -// https://www.opengl.org/sdk/docs/man4/xhtml/glViewport.xml -func (gl *GL) Viewport(x, y, width, height int) { - C.gl4_0core_glViewport(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// DepthRange specifies the mapping of depth values from normalized device -// coordinates to window coordinates. -// -// Parameter nearVal specifies the mapping of the near clipping plane to window -// coordinates (defaults to 0), while farVal specifies the mapping of the far -// clipping plane to window coordinates (defaults to 1). -// -// After clipping and division by w, depth coordinates range from -1 to 1, -// corresponding to the near and far clipping planes. DepthRange specifies a -// linear mapping of the normalized depth coordinates in this range to window -// depth coordinates. Regardless of the actual depth buffer implementation, -// window coordinate depth values are treated as though they range from 0 through 1 -// (like color components). Thus, the values accepted by DepthRange are both -// clamped to this range before they are accepted. -// -// The default setting of (0, 1) maps the near plane to 0 and the far plane to 1. -// With this mapping, the depth buffer range is fully utilized. -// -// It is not necessary that nearVal be less than farVal. Reverse mappings such as -// nearVal 1, and farVal 0 are acceptable. -// -// GL.INVALID_OPERATION is generated if DepthRange is executed between the -// execution of Begin and the corresponding execution of End. -func (gl *GL) DepthRange(nearVal, farVal float64) { - C.gl4_0core_glDepthRange(gl.funcs, C.GLdouble(nearVal), C.GLdouble(farVal)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsEnabled.xml -func (gl *GL) IsEnabled(cap glbase.Enum) bool { - glresult := C.gl4_0core_glIsEnabled(gl.funcs, C.GLenum(cap)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexLevelParameteriv.xml -func (gl *GL) GetTexLevelParameteriv(target glbase.Enum, level int, pname glbase.Enum, params []int32) { - C.gl4_0core_glGetTexLevelParameteriv(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexLevelParameterfv.xml -func (gl *GL) GetTexLevelParameterfv(target glbase.Enum, level int, pname glbase.Enum, params []float32) { - C.gl4_0core_glGetTexLevelParameterfv(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexParameteriv.xml -func (gl *GL) GetTexParameteriv(target, pname glbase.Enum, params []int32) { - C.gl4_0core_glGetTexParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexParameterfv.xml -func (gl *GL) GetTexParameterfv(target, pname glbase.Enum, params []float32) { - C.gl4_0core_glGetTexParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexImage.xml -func (gl *GL) GetTexImage(target glbase.Enum, level int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_0core_glGetTexImage(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetIntegerv.xml -func (gl *GL) GetIntegerv(pname glbase.Enum, params []int32) { - C.gl4_0core_glGetIntegerv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetFloatv.xml -func (gl *GL) GetFloatv(pname glbase.Enum, params []float32) { - C.gl4_0core_glGetFloatv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetError.xml -func (gl *GL) GetError() glbase.Enum { - glresult := C.gl4_0core_glGetError(gl.funcs) - return glbase.Enum(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetDoublev.xml -func (gl *GL) GetDoublev(pname glbase.Enum, params []float64) { - C.gl4_0core_glGetDoublev(gl.funcs, C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetBooleanv.xml -func (gl *GL) GetBooleanv(pname glbase.Enum, params []bool) { - C.gl4_0core_glGetBooleanv(gl.funcs, C.GLenum(pname), (*C.GLboolean)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glReadPixels.xml -func (gl *GL) ReadPixels(x, y, width, height int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_0core_glReadPixels(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glReadBuffer.xml -func (gl *GL) ReadBuffer(mode glbase.Enum) { - C.gl4_0core_glReadBuffer(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPixelStorei.xml -func (gl *GL) PixelStorei(pname glbase.Enum, param int32) { - C.gl4_0core_glPixelStorei(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPixelStoref.xml -func (gl *GL) PixelStoref(pname glbase.Enum, param float32) { - C.gl4_0core_glPixelStoref(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDepthFunc.xml -func (gl *GL) DepthFunc(glfunc glbase.Enum) { - C.gl4_0core_glDepthFunc(gl.funcs, C.GLenum(glfunc)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glStencilOp.xml -func (gl *GL) StencilOp(fail, zfail, zpass glbase.Enum) { - C.gl4_0core_glStencilOp(gl.funcs, C.GLenum(fail), C.GLenum(zfail), C.GLenum(zpass)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glStencilFunc.xml -func (gl *GL) StencilFunc(glfunc glbase.Enum, ref int32, mask uint32) { - C.gl4_0core_glStencilFunc(gl.funcs, C.GLenum(glfunc), C.GLint(ref), C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLogicOp.xml -func (gl *GL) LogicOp(opcode glbase.Enum) { - C.gl4_0core_glLogicOp(gl.funcs, C.GLenum(opcode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendFunc.xml -func (gl *GL) BlendFunc(sfactor, dfactor glbase.Enum) { - C.gl4_0core_glBlendFunc(gl.funcs, C.GLenum(sfactor), C.GLenum(dfactor)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFlush.xml -func (gl *GL) Flush() { - C.gl4_0core_glFlush(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFinish.xml -func (gl *GL) Finish() { - C.gl4_0core_glFinish(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEnable.xml -func (gl *GL) Enable(cap glbase.Enum) { - C.gl4_0core_glEnable(gl.funcs, C.GLenum(cap)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDisable.xml -func (gl *GL) Disable(cap glbase.Enum) { - C.gl4_0core_glDisable(gl.funcs, C.GLenum(cap)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDepthMask.xml -func (gl *GL) DepthMask(flag bool) { - C.gl4_0core_glDepthMask(gl.funcs, *(*C.GLboolean)(unsafe.Pointer(&flag))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorMask.xml -func (gl *GL) ColorMask(red, green, blue, alpha bool) { - C.gl4_0core_glColorMask(gl.funcs, *(*C.GLboolean)(unsafe.Pointer(&red)), *(*C.GLboolean)(unsafe.Pointer(&green)), *(*C.GLboolean)(unsafe.Pointer(&blue)), *(*C.GLboolean)(unsafe.Pointer(&alpha))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glStencilMask.xml -func (gl *GL) StencilMask(mask uint32) { - C.gl4_0core_glStencilMask(gl.funcs, C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearDepth.xml -func (gl *GL) ClearDepth(depth float64) { - C.gl4_0core_glClearDepth(gl.funcs, C.GLdouble(depth)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearStencil.xml -func (gl *GL) ClearStencil(s int32) { - C.gl4_0core_glClearStencil(gl.funcs, C.GLint(s)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearColor.xml -func (gl *GL) ClearColor(red, green, blue, alpha float32) { - C.gl4_0core_glClearColor(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClear.xml -func (gl *GL) Clear(mask glbase.Bitfield) { - C.gl4_0core_glClear(gl.funcs, C.GLbitfield(mask)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawBuffer.xml -func (gl *GL) DrawBuffer(mode glbase.Enum) { - C.gl4_0core_glDrawBuffer(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexImage2D.xml -func (gl *GL) TexImage2D(target glbase.Enum, level int, internalFormat int32, width, height, border int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_0core_glTexImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLint(border), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexImage1D.xml -func (gl *GL) TexImage1D(target glbase.Enum, level int, internalFormat int32, width, border int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_0core_glTexImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(internalFormat), C.GLsizei(width), C.GLint(border), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexParameteriv.xml -func (gl *GL) TexParameteriv(target, pname glbase.Enum, params []int32) { - C.gl4_0core_glTexParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexParameteri.xml -func (gl *GL) TexParameteri(target, pname glbase.Enum, param int32) { - C.gl4_0core_glTexParameteri(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexParameterfv.xml -func (gl *GL) TexParameterfv(target, pname glbase.Enum, params []float32) { - C.gl4_0core_glTexParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexParameterf.xml -func (gl *GL) TexParameterf(target, pname glbase.Enum, param float32) { - C.gl4_0core_glTexParameterf(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glScissor.xml -func (gl *GL) Scissor(x, y, width, height int) { - C.gl4_0core_glScissor(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPolygonMode.xml -func (gl *GL) PolygonMode(face, mode glbase.Enum) { - C.gl4_0core_glPolygonMode(gl.funcs, C.GLenum(face), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPointSize.xml -func (gl *GL) PointSize(size float32) { - C.gl4_0core_glPointSize(gl.funcs, C.GLfloat(size)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLineWidth.xml -func (gl *GL) LineWidth(width float32) { - C.gl4_0core_glLineWidth(gl.funcs, C.GLfloat(width)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glHint.xml -func (gl *GL) Hint(target, mode glbase.Enum) { - C.gl4_0core_glHint(gl.funcs, C.GLenum(target), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFrontFace.xml -func (gl *GL) FrontFace(mode glbase.Enum) { - C.gl4_0core_glFrontFace(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCullFace.xml -func (gl *GL) CullFace(mode glbase.Enum) { - C.gl4_0core_glCullFace(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIndexubv.xml -func (gl *GL) Indexubv(c []uint8) { - C.gl4_0core_glIndexubv(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIndexub.xml -func (gl *GL) Indexub(c uint8) { - C.gl4_0core_glIndexub(gl.funcs, C.GLubyte(c)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsTexture.xml -func (gl *GL) IsTexture(texture glbase.Texture) bool { - glresult := C.gl4_0core_glIsTexture(gl.funcs, C.GLuint(texture)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// GenTextures returns n texture names in textures. There is no guarantee -// that the names form a contiguous set of integers; however, it is -// guaranteed that none of the returned names was in use immediately before -// the call to GenTextures. -// -// The generated textures have no dimensionality; they assume the -// dimensionality of the texture target to which they are first bound (see -// BindTexture). -// -// Texture names returned by a call to GenTextures are not returned by -// subsequent calls, unless they are first deleted with DeleteTextures. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// GenTextures is available in GL version 2.0 or greater. -func (gl *GL) GenTextures(n int) []glbase.Texture { - if n == 0 { - return nil - } - textures := make([]glbase.Texture, n) - C.gl4_0core_glGenTextures(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0]))) - return textures -} - -// DeleteTextures deletes the textures objects whose names are stored -// in the textures slice. After a texture is deleted, it has no contents or -// dimensionality, and its name is free for reuse (for example by -// GenTextures). If a texture that is currently bound is deleted, the binding -// reverts to 0 (the default texture). -// -// DeleteTextures silently ignores 0's and names that do not correspond to -// existing textures. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// DeleteTextures is available in GL version 2.0 or greater. -func (gl *GL) DeleteTextures(textures []glbase.Texture) { - n := len(textures) - if n == 0 { - return - } - C.gl4_0core_glDeleteTextures(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindTexture.xml -func (gl *GL) BindTexture(target glbase.Enum, texture glbase.Texture) { - C.gl4_0core_glBindTexture(gl.funcs, C.GLenum(target), C.GLuint(texture)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexSubImage2D.xml -func (gl *GL) TexSubImage2D(target glbase.Enum, level, xoffset, yoffset, width, height int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_0core_glTexSubImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexSubImage1D.xml -func (gl *GL) TexSubImage1D(target glbase.Enum, level, xoffset, width int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_0core_glTexSubImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLsizei(width), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyTexSubImage2D.xml -func (gl *GL) CopyTexSubImage2D(target glbase.Enum, level, xoffset, yoffset, x, y, width, height int) { - C.gl4_0core_glCopyTexSubImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyTexSubImage1D.xml -func (gl *GL) CopyTexSubImage1D(target glbase.Enum, level, xoffset, x, y, width int) { - C.gl4_0core_glCopyTexSubImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(x), C.GLint(y), C.GLsizei(width)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyTexImage2D.xml -func (gl *GL) CopyTexImage2D(target glbase.Enum, level int, internalFormat glbase.Enum, x, y, width, height, border int) { - C.gl4_0core_glCopyTexImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height), C.GLint(border)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyTexImage1D.xml -func (gl *GL) CopyTexImage1D(target glbase.Enum, level int, internalFormat glbase.Enum, x, y, width, border int) { - C.gl4_0core_glCopyTexImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLint(border)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPolygonOffset.xml -func (gl *GL) PolygonOffset(factor, units float32) { - C.gl4_0core_glPolygonOffset(gl.funcs, C.GLfloat(factor), C.GLfloat(units)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawElements.xml -func (gl *GL) DrawElements(mode glbase.Enum, count int, gltype glbase.Enum, indices interface{}) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl4_0core_glDrawElements(gl.funcs, C.GLenum(mode), C.GLsizei(count), C.GLenum(gltype), indices_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawArrays.xml -func (gl *GL) DrawArrays(mode glbase.Enum, first, count int) { - C.gl4_0core_glDrawArrays(gl.funcs, C.GLenum(mode), C.GLint(first), C.GLsizei(count)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyTexSubImage3D.xml -func (gl *GL) CopyTexSubImage3D(target glbase.Enum, level, xoffset, yoffset int, zoffset int32, x, y, width, height int) { - C.gl4_0core_glCopyTexSubImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(zoffset), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexSubImage3D.xml -func (gl *GL) TexSubImage3D(target glbase.Enum, level, xoffset, yoffset int, zoffset int32, width, height int, depth int32, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_0core_glTexSubImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(zoffset), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexImage3D.xml -func (gl *GL) TexImage3D(target glbase.Enum, level int, internalFormat int32, width, height int, depth int32, border int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_0core_glTexImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLint(border), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawRangeElements.xml -func (gl *GL) DrawRangeElements(mode glbase.Enum, start, end uint32, count int, gltype glbase.Enum, indices interface{}) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl4_0core_glDrawRangeElements(gl.funcs, C.GLenum(mode), C.GLuint(start), C.GLuint(end), C.GLsizei(count), C.GLenum(gltype), indices_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendEquation.xml -func (gl *GL) BlendEquation(mode glbase.Enum) { - C.gl4_0core_glBlendEquation(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendColor.xml -func (gl *GL) BlendColor(red, green, blue, alpha float32) { - C.gl4_0core_glBlendColor(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetCompressedTexImage.xml -func (gl *GL) GetCompressedTexImage(target glbase.Enum, level int, img interface{}) { - var img_ptr unsafe.Pointer - var img_v = reflect.ValueOf(img) - if img != nil && img_v.Kind() != reflect.Slice { - panic("parameter img must be a slice") - } - if img != nil { - img_ptr = unsafe.Pointer(img_v.Index(0).Addr().Pointer()) - } - C.gl4_0core_glGetCompressedTexImage(gl.funcs, C.GLenum(target), C.GLint(level), img_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCompressedTexSubImage1D.xml -func (gl *GL) CompressedTexSubImage1D(target glbase.Enum, level, xoffset, width int, format glbase.Enum, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_0core_glCompressedTexSubImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLsizei(width), C.GLenum(format), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCompressedTexSubImage2D.xml -func (gl *GL) CompressedTexSubImage2D(target glbase.Enum, level, xoffset, yoffset, width, height int, format glbase.Enum, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_0core_glCompressedTexSubImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCompressedTexSubImage3D.xml -func (gl *GL) CompressedTexSubImage3D(target glbase.Enum, level, xoffset, yoffset int, zoffset int32, width, height int, depth int32, format glbase.Enum, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_0core_glCompressedTexSubImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(zoffset), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLenum(format), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCompressedTexImage1D.xml -func (gl *GL) CompressedTexImage1D(target glbase.Enum, level int, internalFormat glbase.Enum, width, border, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_0core_glCompressedTexImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLsizei(width), C.GLint(border), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCompressedTexImage2D.xml -func (gl *GL) CompressedTexImage2D(target glbase.Enum, level int, internalFormat glbase.Enum, width, height, border, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_0core_glCompressedTexImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLint(border), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCompressedTexImage3D.xml -func (gl *GL) CompressedTexImage3D(target glbase.Enum, level int, internalFormat glbase.Enum, width, height int, depth int32, border, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_0core_glCompressedTexImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLint(border), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSampleCoverage.xml -func (gl *GL) SampleCoverage(value float32, invert bool) { - C.gl4_0core_glSampleCoverage(gl.funcs, C.GLfloat(value), *(*C.GLboolean)(unsafe.Pointer(&invert))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glActiveTexture.xml -func (gl *GL) ActiveTexture(texture glbase.Enum) { - C.gl4_0core_glActiveTexture(gl.funcs, C.GLenum(texture)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPointParameteriv.xml -func (gl *GL) PointParameteriv(pname glbase.Enum, params []int32) { - C.gl4_0core_glPointParameteriv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPointParameteri.xml -func (gl *GL) PointParameteri(pname glbase.Enum, param int32) { - C.gl4_0core_glPointParameteri(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPointParameterfv.xml -func (gl *GL) PointParameterfv(pname glbase.Enum, params []float32) { - C.gl4_0core_glPointParameterfv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPointParameterf.xml -func (gl *GL) PointParameterf(pname glbase.Enum, param float32) { - C.gl4_0core_glPointParameterf(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiDrawArrays.xml -func (gl *GL) MultiDrawArrays(mode glbase.Enum, first, count []int, drawcount int32) { - C.gl4_0core_glMultiDrawArrays(gl.funcs, C.GLenum(mode), (*C.GLint)(unsafe.Pointer(&first[0])), (*C.GLsizei)(unsafe.Pointer(&count[0])), C.GLsizei(drawcount)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendFuncSeparate.xml -func (gl *GL) BlendFuncSeparate(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha glbase.Enum) { - C.gl4_0core_glBlendFuncSeparate(gl.funcs, C.GLenum(sfactorRGB), C.GLenum(dfactorRGB), C.GLenum(sfactorAlpha), C.GLenum(dfactorAlpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetBufferParameteriv.xml -func (gl *GL) GetBufferParameteriv(target, pname glbase.Enum, params []int32) { - C.gl4_0core_glGetBufferParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUnmapBuffer.xml -func (gl *GL) UnmapBuffer(target glbase.Enum) bool { - glresult := C.gl4_0core_glUnmapBuffer(gl.funcs, C.GLenum(target)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetBufferSubData.xml -func (gl *GL) GetBufferSubData(target glbase.Enum, offset, size int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_0core_glGetBufferSubData(gl.funcs, C.GLenum(target), C.GLintptr(offset), C.GLsizeiptr(size), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBufferSubData.xml -func (gl *GL) BufferSubData(target glbase.Enum, offset, size int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_0core_glBufferSubData(gl.funcs, C.GLenum(target), C.GLintptr(offset), C.GLsizeiptr(size), data_ptr) -} - -// BufferData creates a new data store for the buffer object currently -// bound to target. Any pre-existing data store is deleted. The new data -// store is created with the specified size in bytes and usage. If data is -// not nil, it must be a slice that is used to initialize the data store. -// In that case the size parameter is ignored and the store size will match -// the slice data size. -// -// In its initial state, the new data store is not mapped, it has a NULL -// mapped pointer, and its mapped access is GL.READ_WRITE. -// -// The target constant must be one of GL.ARRAY_BUFFER, GL.COPY_READ_BUFFER, -// GL.COPY_WRITE_BUFFER, GL.ELEMENT_ARRAY_BUFFER, GL.PIXEL_PACK_BUFFER, -// GL.PIXEL_UNPACK_BUFFER, GL.TEXTURE_BUFFER, GL.TRANSFORM_FEEDBACK_BUFFER, -// or GL.UNIFORM_BUFFER. -// -// The usage parameter is a hint to the GL implementation as to how a buffer -// object's data store will be accessed. This enables the GL implementation -// to make more intelligent decisions that may significantly impact buffer -// object performance. It does not, however, constrain the actual usage of -// the data store. usage can be broken down into two parts: first, the -// frequency of access (modification and usage), and second, the nature of -// that access. -// -// A usage frequency of STREAM and nature of DRAW is specified via the -// constant GL.STREAM_DRAW, for example. -// -// The usage frequency of access may be one of: -// -// STREAM -// The data store contents will be modified once and used at most a few times. -// -// STATIC -// The data store contents will be modified once and used many times. -// -// DYNAMIC -// The data store contents will be modified repeatedly and used many times. -// -// The usage nature of access may be one of: -// -// DRAW -// The data store contents are modified by the application, and used as -// the source for GL drawing and image specification commands. -// -// READ -// The data store contents are modified by reading data from the GL, -// and used to return that data when queried by the application. -// -// COPY -// The data store contents are modified by reading data from the GL, -// and used as the source for GL drawing and image specification -// commands. -// -// Clients must align data elements consistent with the requirements of the -// client platform, with an additional base-level requirement that an offset -// within a buffer to a datum comprising N bytes be a multiple of N. -// -// Error GL.INVALID_ENUM is generated if target is not one of the accepted -// buffer targets. GL.INVALID_ENUM is generated if usage is not -// GL.STREAM_DRAW, GL.STREAM_READ, GL.STREAM_COPY, GL.STATIC_DRAW, -// GL.STATIC_READ, GL.STATIC_COPY, GL.DYNAMIC_DRAW, GL.DYNAMIC_READ, or -// GL.DYNAMIC_COPY. GL.INVALID_VALUE is generated if size is negative. -// GL.INVALID_OPERATION is generated if the reserved buffer object name 0 is -// bound to target. GL.OUT_OF_MEMORY is generated if the GL is unable to -// create a data store with the specified size. -func (gl *GL) BufferData(target glbase.Enum, size int, data interface{}, usage glbase.Enum) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - if data != nil { - size = int(data_v.Type().Size()) * data_v.Len() - } - C.gl4_0core_glBufferData(gl.funcs, C.GLenum(target), C.GLsizeiptr(size), data_ptr, C.GLenum(usage)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsBuffer.xml -func (gl *GL) IsBuffer(buffer glbase.Buffer) bool { - glresult := C.gl4_0core_glIsBuffer(gl.funcs, C.GLuint(buffer)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// GenBuffers returns n buffer object names. There is no guarantee that -// the names form a contiguous set of integers; however, it is guaranteed -// that none of the returned names was in use immediately before the call to -// GenBuffers. -// -// Buffer object names returned by a call to GenBuffers are not returned by -// subsequent calls, unless they are first deleted with DeleteBuffers. -// -// No buffer objects are associated with the returned buffer object names -// until they are first bound by calling BindBuffer. -// -// Error GL.INVALID_VALUE is generated if n is negative. GL.INVALID_OPERATION -// is generated if GenBuffers is executed between the execution of Begin -// and the corresponding execution of End. -// -// GenBuffers is available in GL version 1.5 or greater. -func (gl *GL) GenBuffers(n int) []glbase.Buffer { - if n == 0 { - return nil - } - buffers := make([]glbase.Buffer, n) - C.gl4_0core_glGenBuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&buffers[0]))) - return buffers -} - -// DeleteBuffers deletes the buffer objects whose names are stored in the -// buffers slice. -// -// After a buffer object is deleted, it has no contents, and its name is free -// for reuse (for example by GenBuffers). If a buffer object that is -// currently bound is deleted, the binding reverts to 0 (the absence of any -// buffer object, which reverts to client memory usage). -// -// DeleteBuffers silently ignores 0's and names that do not correspond to -// existing buffer objects. -// -// Error GL.INVALID_VALUE is generated if n is negative. GL.INVALID_OPERATION -// is generated if DeleteBuffers is executed between the execution of Begin -// and the corresponding execution of End. -// -// DeleteBuffers is available in GL version 1.5 or greater. -func (gl *GL) DeleteBuffers(buffers []glbase.Buffer) { - n := len(buffers) - if n == 0 { - return - } - C.gl4_0core_glDeleteBuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&buffers[0]))) -} - -// BindBuffer creates or puts in use a named buffer object. -// Calling BindBuffer with target set to GL.ARRAY_BUFFER, -// GL.ELEMENT_ARRAY_BUFFER, GL.PIXEL_PACK_BUFFER or GL.PIXEL_UNPACK_BUFFER -// and buffer set to the name of the new buffer object binds the buffer -// object name to the target. When a buffer object is bound to a target, the -// previous binding for that target is automatically broken. -// -// Buffer object names are unsigned integers. The value zero is reserved, but -// there is no default buffer object for each buffer object target. Instead, -// buffer set to zero effectively unbinds any buffer object previously bound, -// and restores client memory usage for that buffer object target. Buffer -// object names and the corresponding buffer object contents are local to the -// shared display-list space (see XCreateContext) of the current GL rendering -// context; two rendering contexts share buffer object names only if they -// also share display lists. -// -// GenBuffers may be called to generate a set of new buffer object names. -// -// The state of a buffer object immediately after it is first bound is an -// unmapped zero-sized memory buffer with GL.READ_WRITE access and -// GL.STATIC_DRAW usage. -// -// While a non-zero buffer object name is bound, GL operations on the target -// to which it is bound affect the bound buffer object, and queries of the -// target to which it is bound return state from the bound buffer object. -// While buffer object name zero is bound, as in the initial state, attempts -// to modify or query state on the target to which it is bound generates an -// GL.INVALID_OPERATION error. -// -// When vertex array pointer state is changed, for example by a call to -// NormalPointer, the current buffer object binding (GL.ARRAY_BUFFER_BINDING) -// is copied into the corresponding client state for the vertex array type -// being changed, for example GL.NORMAL_ARRAY_BUFFER_BINDING. While a -// non-zero buffer object is bound to the GL.ARRAY_BUFFER target, the vertex -// array pointer parameter that is traditionally interpreted as a pointer to -// client-side memory is instead interpreted as an offset within the buffer -// object measured in basic machine units. -// -// While a non-zero buffer object is bound to the GL.ELEMENT_ARRAY_BUFFER -// target, the indices parameter of DrawElements, DrawRangeElements, or -// MultiDrawElements that is traditionally interpreted as a pointer to -// client-side memory is instead interpreted as an offset within the buffer -// object measured in basic machine units. -// -// While a non-zero buffer object is bound to the GL.PIXEL_PACK_BUFFER -// target, the following commands are affected: GetCompressedTexImage, -// GetConvolutionFilter, GetHistogram, GetMinmax, GetPixelMap, -// GetPolygonStipple, GetSeparableFilter, GetTexImage, and ReadPixels. The -// pointer parameter that is traditionally interpreted as a pointer to -// client-side memory where the pixels are to be packed is instead -// interpreted as an offset within the buffer object measured in basic -// machine units. -// -// While a non-zero buffer object is bound to the GL.PIXEL_UNPACK_BUFFER -// target, the following commands are affected: Bitmap, ColorSubTable, -// ColorTable, CompressedTexImage1D, CompressedTexImage2D, -// CompressedTexImage3D, CompressedTexSubImage1D, CompressedTexSubImage2D, -// CompressedTexSubImage3D, ConvolutionFilter1D, ConvolutionFilter2D, -// DrawPixels, PixelMap, PolygonStipple, SeparableFilter2D, TexImage1D, -// TexImage2D, TexImage3D, TexSubImage1D, TexSubImage2D, and TexSubImage3D. -// The pointer parameter that is traditionally interpreted as a pointer to -// client-side memory from which the pixels are to be unpacked is instead -// interpreted as an offset within the buffer object measured in basic -// machine units. -// -// A buffer object binding created with BindBuffer remains active until a -// different buffer object name is bound to the same target, or until the -// bound buffer object is deleted with DeleteBuffers. -// -// Once created, a named buffer object may be re-bound to any target as often -// as needed. However, the GL implementation may make choices about how to -// optimize the storage of a buffer object based on its initial binding -// target. -// -// Error GL.INVALID_ENUM is generated if target is not one of the allowable -// values. GL.INVALID_OPERATION is generated if BindBuffer is executed -// between the execution of Begin and the corresponding execution of End. -// -// BindBuffer is available in GL version 1.5 or greater. -func (gl *GL) BindBuffer(target glbase.Enum, buffer glbase.Buffer) { - C.gl4_0core_glBindBuffer(gl.funcs, C.GLenum(target), C.GLuint(buffer)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetQueryObjectuiv.xml -func (gl *GL) GetQueryObjectuiv(id uint32, pname glbase.Enum, params []uint32) { - C.gl4_0core_glGetQueryObjectuiv(gl.funcs, C.GLuint(id), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetQueryObjectiv.xml -func (gl *GL) GetQueryObjectiv(id uint32, pname glbase.Enum, params []int32) { - C.gl4_0core_glGetQueryObjectiv(gl.funcs, C.GLuint(id), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetQueryiv.xml -func (gl *GL) GetQueryiv(target, pname glbase.Enum, params []int32) { - C.gl4_0core_glGetQueryiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEndQuery.xml -func (gl *GL) EndQuery(target glbase.Enum) { - C.gl4_0core_glEndQuery(gl.funcs, C.GLenum(target)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBeginQuery.xml -func (gl *GL) BeginQuery(target glbase.Enum, id uint32) { - C.gl4_0core_glBeginQuery(gl.funcs, C.GLenum(target), C.GLuint(id)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsQuery.xml -func (gl *GL) IsQuery(id uint32) bool { - glresult := C.gl4_0core_glIsQuery(gl.funcs, C.GLuint(id)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDeleteQueries.xml -func (gl *GL) DeleteQueries(n int, ids []uint32) { - C.gl4_0core_glDeleteQueries(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&ids[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGenQueries.xml -func (gl *GL) GenQueries(n int, ids []uint32) { - C.gl4_0core_glGenQueries(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&ids[0]))) -} - -// VertexAttribPointer specifies the location and data format of the array -// of generic vertex attributes at index to use when rendering. size -// specifies the number of components per attribute and must be 1, 2, 3, or -// 4. type specifies the data type of each component, and stride specifies -// the byte stride from one attribute to the next, allowing vertices and -// attributes to be packed into a single array or stored in separate arrays. -// normalized indicates whether the values stored in an integer format are -// to be mapped to the range [-1,1] (for signed values) or [0,1] -// (for unsigned values) when they are accessed and converted to floating -// point; otherwise, values will be converted to floats directly without -// normalization. offset is a byte offset into the buffer object's data -// store, which must be bound to the GL.ARRAY_BUFFER target with BindBuffer. -// -// The buffer object binding (GL.ARRAY_BUFFER_BINDING) is saved as -// generic vertex attribute array client-side state -// (GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING) for the provided index. -// -// To enable and disable a generic vertex attribute array, call -// EnableVertexAttribArray and DisableVertexAttribArray with index. If -// enabled, the generic vertex attribute array is used when DrawArrays or -// DrawElements is called. Each generic vertex attribute array is initially -// disabled. -// -// VertexAttribPointer is typically implemented on the client side. -// -// Error GL.INVALID_ENUM is generated if type is not an accepted value. -// GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. GL.INVALID_VALUE is generated if size is not 1, 2, -// 3, or 4. GL.INVALID_VALUE is generated if stride is negative. -func (gl *GL) VertexAttribPointer(index glbase.Attrib, size int, gltype glbase.Enum, normalized bool, stride int, offset uintptr) { - offset_ptr := unsafe.Pointer(offset) - C.gl4_0core_glVertexAttribPointer(gl.funcs, C.GLuint(index), C.GLint(size), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), C.GLsizei(stride), offset_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glValidateProgram.xml -func (gl *GL) ValidateProgram(program glbase.Program) { - C.gl4_0core_glValidateProgram(gl.funcs, C.GLuint(program)) -} - -// UniformMatrix4fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix4fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix4fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(4*4) != 0 { - panic("invalid value length for UniformMatrix4fv") - } - count := len(value) / (4 * 4) - C.gl4_0core_glUniformMatrix4fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix3fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix3fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix3fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(3*3) != 0 { - panic("invalid value length for UniformMatrix3fv") - } - count := len(value) / (3 * 3) - C.gl4_0core_glUniformMatrix3fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix2fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix2fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix2fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(2*2) != 0 { - panic("invalid value length for UniformMatrix2fv") - } - count := len(value) / (2 * 2) - C.gl4_0core_glUniformMatrix2fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform4iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform4iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - if len(value)%4 != 0 { - panic("invalid value length for Uniform4iv") - } - count := len(value) / 4 - C.gl4_0core_glUniform4iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// Uniform3iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform3iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - if len(value)%3 != 0 { - panic("invalid value length for Uniform3iv") - } - count := len(value) / 3 - C.gl4_0core_glUniform3iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// Uniform2iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform2iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - if len(value)%2 != 0 { - panic("invalid value length for Uniform2iv") - } - count := len(value) / 2 - C.gl4_0core_glUniform2iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// Uniform1iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform1iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - count := len(value) - C.gl4_0core_glUniform1iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// Uniform4fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform4fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - if len(value)%4 != 0 { - panic("invalid value length for Uniform4fv") - } - count := len(value) / 4 - C.gl4_0core_glUniform4fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform3fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform3fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - if len(value)%3 != 0 { - panic("invalid value length for Uniform3fv") - } - count := len(value) / 3 - C.gl4_0core_glUniform3fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform2fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform2fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - if len(value)%2 != 0 { - panic("invalid value length for Uniform2fv") - } - count := len(value) / 2 - C.gl4_0core_glUniform2fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform1fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform1fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - count := len(value) - C.gl4_0core_glUniform1fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform4i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform4i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4i(location glbase.Uniform, v0, v1, v2, v3 int32) { - C.gl4_0core_glUniform4i(gl.funcs, C.GLint(location), C.GLint(v0), C.GLint(v1), C.GLint(v2), C.GLint(v3)) -} - -// Uniform3i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform3i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3i(location glbase.Uniform, v0, v1, v2 int32) { - C.gl4_0core_glUniform3i(gl.funcs, C.GLint(location), C.GLint(v0), C.GLint(v1), C.GLint(v2)) -} - -// Uniform2i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform2i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2i(location glbase.Uniform, v0, v1 int32) { - C.gl4_0core_glUniform2i(gl.funcs, C.GLint(location), C.GLint(v0), C.GLint(v1)) -} - -// Uniform1i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform1i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1i(location glbase.Uniform, v0 int32) { - C.gl4_0core_glUniform1i(gl.funcs, C.GLint(location), C.GLint(v0)) -} - -// Uniform4f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform4f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4f(location glbase.Uniform, v0, v1, v2, v3 float32) { - C.gl4_0core_glUniform4f(gl.funcs, C.GLint(location), C.GLfloat(v0), C.GLfloat(v1), C.GLfloat(v2), C.GLfloat(v3)) -} - -// Uniform3f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform3f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3f(location glbase.Uniform, v0, v1, v2 float32) { - C.gl4_0core_glUniform3f(gl.funcs, C.GLint(location), C.GLfloat(v0), C.GLfloat(v1), C.GLfloat(v2)) -} - -// Uniform2f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform2f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2f(location glbase.Uniform, v0, v1 float32) { - C.gl4_0core_glUniform2f(gl.funcs, C.GLint(location), C.GLfloat(v0), C.GLfloat(v1)) -} - -// Uniform1f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform1f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1f(location glbase.Uniform, v0 float32) { - C.gl4_0core_glUniform1f(gl.funcs, C.GLint(location), C.GLfloat(v0)) -} - -// UseProgram installs the program object specified by program as part of -// current rendering state. One or more executables are created in a program -// object by successfully attaching shader objects to it with AttachShader, -// successfully compiling the shader objects with CompileShader, and -// successfully linking the program object with LinkProgram. -// -// A program object will contain an executable that will run on the vertex -// processor if it contains one or more shader objects of type -// GL.VERTEX_SHADER that have been successfully compiled and linked. -// Similarly, a program object will contain an executable that will run on -// the fragment processor if it contains one or more shader objects of type -// GL.FRAGMENT_SHADER that have been successfully compiled and linked. -// -// Successfully installing an executable on a programmable processor will -// cause the corresponding fixed functionality of OpenGL to be disabled. -// Specifically, if an executable is installed on the vertex processor, the -// OpenGL fixed functionality will be disabled as follows. -// -// - The modelview matrix is not applied to vertex coordinates. -// -// - The projection matrix is not applied to vertex coordinates. -// -// - The texture matrices are not applied to texture coordinates. -// -// - Normals are not transformed to eye coordinates. -// -// - Normals are not rescaled or normalized. -// -// - Normalization of GL.AUTO_NORMAL evaluated normals is not performed. -// -// - Texture coordinates are not generated automatically. -// -// - Per-vertex lighting is not performed. -// -// - Color material computations are not performed. -// -// - Color index lighting is not performed. -// -// - This list also applies when setting the current raster position. -// -// The executable that is installed on the vertex processor is expected to -// implement any or all of the desired functionality from the preceding list. -// Similarly, if an executable is installed on the fragment processor, the -// OpenGL fixed functionality will be disabled as follows. -// -// - Texture environment and texture functions are not applied. -// -// - Texture application is not applied. -// -// - Color sum is not applied. -// -// - Fog is not applied. -// -// Again, the fragment shader that is installed is expected to implement any -// or all of the desired functionality from the preceding list. -// -// While a program object is in use, applications are free to modify attached -// shader objects, compile attached shader objects, attach additional shader -// objects, and detach or delete shader objects. None of these operations -// will affect the executables that are part of the current state. However, -// relinking the program object that is currently in use will install the -// program object as part of the current rendering state if the link -// operation was successful (see LinkProgram). If the program object -// currently in use is relinked unsuccessfully, its link status will be set -// to GL.FALSE, but the executables and associated state will remain part of -// the current state until a subsequent call to UseProgram removes it from -// use. After it is removed from use, it cannot be made part of current state -// until it has been successfully relinked. -// -// If program contains shader objects of type GL.VERTEX_SHADER but it does -// not contain shader objects of type GL.FRAGMENT_SHADER, an executable will -// be installed on the vertex processor, but fixed functionality will be used -// for fragment processing. Similarly, if program contains shader objects of -// type GL.FRAGMENT_SHADER but it does not contain shader objects of type -// GL.VERTEX_SHADER, an executable will be installed on the fragment -// processor, but fixed functionality will be used for vertex processing. If -// program is 0, the programmable processors will be disabled, and fixed -// functionality will be used for both vertex and fragment processing. -// -// While a program object is in use, the state that controls the disabled -// fixed functionality may also be updated using the normal OpenGL calls. -// -// Like display lists and texture objects, the name space for program objects -// may be shared across a set of contexts, as long as the server sides of the -// contexts share the same address space. If the name space is shared across -// contexts, any attached objects and the data associated with those attached -// objects are shared as well. -// -// Applications are responsible for providing the synchronization across API -// calls when objects are accessed from different execution threads. -// -// Error GL.INVALID_VALUE is generated if program is neither 0 nor a value -// generated by OpenGL. GL.INVALID_OPERATION is generated if program is not -// a program object. GL.INVALID_OPERATION is generated if program could not -// be made part of current state. GL.INVALID_OPERATION is generated if -// UseProgram is executed between the execution of Begin and the -// corresponding execution of End. -// -// UseProgram is available in GL version 2.0 or greater. -func (gl *GL) UseProgram(program glbase.Program) { - C.gl4_0core_glUseProgram(gl.funcs, C.GLuint(program)) -} - -// ShaderSource sets the source code in shader to the provided source code. Any source -// code previously stored in the shader object is completely replaced. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader is not a shader -// object. GL.INVALID_VALUE is generated if count is less than 0. -// GL.INVALID_OPERATION is generated if ShaderSource is executed between the -// execution of Begin and the corresponding execution of End. -// -// ShaderSource is available in GL version 2.0 or greater. -func (gl *GL) ShaderSource(shader glbase.Shader, source ...string) { - count := len(source) - length := make([]int32, count) - source_c := make([]unsafe.Pointer, count) - for i, src := range source { - length[i] = int32(len(src)) - if len(src) > 0 { - source_c[i] = *(*unsafe.Pointer)(unsafe.Pointer(&src)) - } else { - source_c[i] = unsafe.Pointer(uintptr(0)) - } - } - C.gl4_0core_glShaderSource(gl.funcs, C.GLuint(shader), C.GLsizei(count), (**C.GLchar)(unsafe.Pointer(&source_c[0])), (*C.GLint)(unsafe.Pointer(&length[0]))) -} - -// LinkProgram links the program object specified by program. If any shader -// objects of type GL.VERTEX_SHADER are attached to program, they will be -// used to create an executable that will run on the programmable vertex -// processor. If any shader objects of type GL.FRAGMENT_SHADER are attached -// to program, they will be used to create an executable that will run on the -// programmable fragment processor. -// -// The status of the link operation will be stored as part of the program -// object's state. This value will be set to GL.TRUE if the program object -// was linked without errors and is ready for use, and GL.FALSE otherwise. It -// can be queried by calling GetProgramiv with arguments program and -// GL.LINK_STATUS. -// -// As a result of a successful link operation, all active user-defined -// uniform variables belonging to program will be initialized to 0, and each -// of the program object's active uniform variables will be assigned a -// location that can be queried by calling GetUniformLocation. Also, any -// active user-defined attribute variables that have not been bound to a -// generic vertex attribute index will be bound to one at this time. -// -// Linking of a program object can fail for a number of reasons as specified -// in the OpenGL Shading Language Specification. The following lists some of -// the conditions that will cause a link error. -// -// - The number of active attribute variables supported by the -// implementation has been exceeded. -// -// - The storage limit for uniform variables has been exceeded. -// -// - The number of active uniform variables supported by the implementation -// has been exceeded. -// -// - The main function is missing for the vertex shader or the fragment -// shader. -// -// - A varying variable actually used in the fragment shader is not -// declared in the same way (or is not declared at all) in the vertex -// shader. -// -// - A reference to a function or variable name is unresolved. -// -// - A shared global is declared with two different types or two different -// initial values. -// -// - One or more of the attached shader objects has not been successfully -// compiled. -// -// - Binding a generic attribute matrix caused some rows of the matrix to -// fall outside the allowed maximum of GL.MAX_VERTEX_ATTRIBS. -// -// - Not enough contiguous vertex attribute slots could be found to bind -// attribute matrices. -// -// When a program object has been successfully linked, the program object can -// be made part of current state by calling UseProgram. Whether or not the -// link operation was successful, the program object's information log will -// be overwritten. The information log can be retrieved by calling -// GetProgramInfoLog. -// -// LinkProgram will also install the generated executables as part of the -// current rendering state if the link operation was successful and the -// specified program object is already currently in use as a result of a -// previous call to UseProgram. If the program object currently in use is -// relinked unsuccessfully, its link status will be set to GL.FALSE , but the -// executables and associated state will remain part of the current state -// until a subsequent call to UseProgram removes it from use. After it is -// removed from use, it cannot be made part of current state until it has -// been successfully relinked. -// -// If program contains shader objects of type GL.VERTEX_SHADER but does not -// contain shader objects of type GL.FRAGMENT_SHADER, the vertex shader will -// be linked against the implicit interface for fixed functionality fragment -// processing. Similarly, if program contains shader objects of type -// GL.FRAGMENT_SHADER but it does not contain shader objects of type -// GL.VERTEX_SHADER, the fragment shader will be linked against the implicit -// interface for fixed functionality vertex processing. -// -// The program object's information log is updated and the program is -// generated at the time of the link operation. After the link operation, -// applications are free to modify attached shader objects, compile attached -// shader objects, detach shader objects, delete shader objects, and attach -// additional shader objects. None of these operations affects the -// information log or the program that is part of the program object. -// -// If the link operation is unsuccessful, any information about a previous -// link operation on program is lost (a failed link does not restore the -// old state of program). Certain information can still be retrieved -// from program even after an unsuccessful link operation. See for instance -// GetActiveAttrib and GetActiveUniform. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program -// object. GL.INVALID_OPERATION is generated if LinkProgram is executed -// between the execution of Begin and the corresponding execution of End. -// -// LinkProgram is available in GL version 2.0 or greater. -func (gl *GL) LinkProgram(program glbase.Program) { - C.gl4_0core_glLinkProgram(gl.funcs, C.GLuint(program)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsShader.xml -func (gl *GL) IsShader(shader glbase.Shader) bool { - glresult := C.gl4_0core_glIsShader(gl.funcs, C.GLuint(shader)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsProgram.xml -func (gl *GL) IsProgram(program glbase.Program) bool { - glresult := C.gl4_0core_glIsProgram(gl.funcs, C.GLuint(program)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// GetVertexAttribiv returns in params the value of a generic vertex attribute -// parameter. The generic vertex attribute to be queried is specified by -// index, and the parameter to be queried is specified by pname. -// -// The accepted parameter names are as follows: -// -// GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING -// params returns a single value, the name of the buffer object -// currently bound to the binding point corresponding to generic vertex -// attribute array index. If no buffer object is bound, 0 is returned. -// The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_ENABLED -// params returns a single value that is non-zero (true) if the vertex -// attribute array for index is enabled and 0 (false) if it is -// disabled. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_SIZE -// params returns a single value, the size of the vertex attribute -// array for index. The size is the number of values for each element -// of the vertex attribute array, and it will be 1, 2, 3, or 4. The -// initial value is 4. -// -// GL.VERTEX_ATTRIB_ARRAY_STRIDE -// params returns a single value, the array stride for (number of bytes -// between successive elements in) the vertex attribute array for -// index. A value of 0 indicates that the array elements are stored -// sequentially in memory. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_TYPE -// params returns a single value, a symbolic constant indicating the -// array type for the vertex attribute array for index. Possible values -// are GL.BYTE, GL.UNSIGNED_BYTE, GL.SHORT, GL.UNSIGNED_SHORT, GL.INT, -// GL.UNSIGNED_INT, GL.FLOAT, and GL.DOUBLE. The initial value is -// GL.FLOAT. -// -// GL.VERTEX_ATTRIB_ARRAY_NORMALIZED -// params returns a single value that is non-zero (true) if fixed-point -// data types for the vertex attribute array indicated by index are -// normalized when they are converted to floating point, and 0 (false) -// otherwise. The initial value is 0. -// -// GL.CURRENT_VERTEX_ATTRIB -// params returns four values that represent the current value for the -// generic vertex attribute specified by index. Generic vertex -// attribute 0 is unique in that it has no current state, so an error -// will be generated if index is 0. The initial value for all other -// generic vertex attributes is (0,0,0,1). -// -// All of the parameters except GL.CURRENT_VERTEX_ATTRIB represent -// client-side state. -// -// Error GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. GL.INVALID_ENUM is generated if pname is not an -// accepted value. GL.INVALID_OPERATION is generated if index is 0 and pname -// is GL.CURRENT_VERTEX_ATTRIB. -// -// GetVertexAttribiv is available in GL version 2.0 or greater. -func (gl *GL) GetVertexAttribiv(index glbase.Attrib, pname glbase.Enum, params []int32) { - var params_c [4]int32 - C.gl4_0core_glGetVertexAttribiv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetVertexAttribfv returns in params the value of a generic vertex attribute -// parameter. The generic vertex attribute to be queried is specified by -// index, and the parameter to be queried is specified by pname. -// -// The accepted parameter names are as follows: -// -// GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING -// params returns a single value, the name of the buffer object -// currently bound to the binding point corresponding to generic vertex -// attribute array index. If no buffer object is bound, 0 is returned. -// The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_ENABLED -// params returns a single value that is non-zero (true) if the vertex -// attribute array for index is enabled and 0 (false) if it is -// disabled. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_SIZE -// params returns a single value, the size of the vertex attribute -// array for index. The size is the number of values for each element -// of the vertex attribute array, and it will be 1, 2, 3, or 4. The -// initial value is 4. -// -// GL.VERTEX_ATTRIB_ARRAY_STRIDE -// params returns a single value, the array stride for (number of bytes -// between successive elements in) the vertex attribute array for -// index. A value of 0 indicates that the array elements are stored -// sequentially in memory. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_TYPE -// params returns a single value, a symbolic constant indicating the -// array type for the vertex attribute array for index. Possible values -// are GL.BYTE, GL.UNSIGNED_BYTE, GL.SHORT, GL.UNSIGNED_SHORT, GL.INT, -// GL.UNSIGNED_INT, GL.FLOAT, and GL.DOUBLE. The initial value is -// GL.FLOAT. -// -// GL.VERTEX_ATTRIB_ARRAY_NORMALIZED -// params returns a single value that is non-zero (true) if fixed-point -// data types for the vertex attribute array indicated by index are -// normalized when they are converted to floating point, and 0 (false) -// otherwise. The initial value is 0. -// -// GL.CURRENT_VERTEX_ATTRIB -// params returns four values that represent the current value for the -// generic vertex attribute specified by index. Generic vertex -// attribute 0 is unique in that it has no current state, so an error -// will be generated if index is 0. The initial value for all other -// generic vertex attributes is (0,0,0,1). -// -// All of the parameters except GL.CURRENT_VERTEX_ATTRIB represent -// client-side state. -// -// Error GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. GL.INVALID_ENUM is generated if pname is not an -// accepted value. GL.INVALID_OPERATION is generated if index is 0 and pname -// is GL.CURRENT_VERTEX_ATTRIB. -// -// GetVertexAttribfv is available in GL version 2.0 or greater. -func (gl *GL) GetVertexAttribfv(index glbase.Attrib, pname glbase.Enum, params []float32) { - var params_c [4]float32 - C.gl4_0core_glGetVertexAttribfv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetVertexAttribdv returns in params the value of a generic vertex attribute -// parameter. The generic vertex attribute to be queried is specified by -// index, and the parameter to be queried is specified by pname. -// -// The accepted parameter names are as follows: -// -// GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING -// params returns a single value, the name of the buffer object -// currently bound to the binding point corresponding to generic vertex -// attribute array index. If no buffer object is bound, 0 is returned. -// The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_ENABLED -// params returns a single value that is non-zero (true) if the vertex -// attribute array for index is enabled and 0 (false) if it is -// disabled. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_SIZE -// params returns a single value, the size of the vertex attribute -// array for index. The size is the number of values for each element -// of the vertex attribute array, and it will be 1, 2, 3, or 4. The -// initial value is 4. -// -// GL.VERTEX_ATTRIB_ARRAY_STRIDE -// params returns a single value, the array stride for (number of bytes -// between successive elements in) the vertex attribute array for -// index. A value of 0 indicates that the array elements are stored -// sequentially in memory. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_TYPE -// params returns a single value, a symbolic constant indicating the -// array type for the vertex attribute array for index. Possible values -// are GL.BYTE, GL.UNSIGNED_BYTE, GL.SHORT, GL.UNSIGNED_SHORT, GL.INT, -// GL.UNSIGNED_INT, GL.FLOAT, and GL.DOUBLE. The initial value is -// GL.FLOAT. -// -// GL.VERTEX_ATTRIB_ARRAY_NORMALIZED -// params returns a single value that is non-zero (true) if fixed-point -// data types for the vertex attribute array indicated by index are -// normalized when they are converted to floating point, and 0 (false) -// otherwise. The initial value is 0. -// -// GL.CURRENT_VERTEX_ATTRIB -// params returns four values that represent the current value for the -// generic vertex attribute specified by index. Generic vertex -// attribute 0 is unique in that it has no current state, so an error -// will be generated if index is 0. The initial value for all other -// generic vertex attributes is (0,0,0,1). -// -// All of the parameters except GL.CURRENT_VERTEX_ATTRIB represent -// client-side state. -// -// Error GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. GL.INVALID_ENUM is generated if pname is not an -// accepted value. GL.INVALID_OPERATION is generated if index is 0 and pname -// is GL.CURRENT_VERTEX_ATTRIB. -// -// GetVertexAttribdv is available in GL version 2.0 or greater. -func (gl *GL) GetVertexAttribdv(index glbase.Attrib, pname glbase.Enum, params []float64) { - var params_c [4]float64 - C.gl4_0core_glGetVertexAttribdv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetUniformiv returns in params the value of the specified uniform -// variable. The type of the uniform variable specified by location -// determines the number of values returned. If the uniform variable is -// defined in the shader as a boolean, int, or float, a single value will be -// returned. If it is defined as a vec2, ivec2, or bvec2, two values will be -// returned. If it is defined as a vec3, ivec3, or bvec3, three values will -// be returned, and so on. To query values stored in uniform variables -// declared as arrays, call GetUniformiv for each element of the array. To -// query values stored in uniform variables declared as structures, call -// GetUniformiv for each field in the structure. The values for uniform -// variables declared as a matrix will be returned in column major order. -// -// The locations assigned to uniform variables are not known until the -// program object is linked. After linking has occurred, the command -// GetUniformLocation can be used to obtain the location of a uniform -// variable. This location value can then be passed to GetUniformiv in order -// to query the current value of the uniform variable. After a program object -// has been linked successfully, the index values for uniform variables -// remain fixed until the next link command occurs. The uniform variable -// values can only be queried after a link if the link was successful. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program -// object. GL.INVALID_OPERATION is generated if program has not been -// successfully linked. GL.INVALID_OPERATION is generated if location does -// not correspond to a valid uniform variable location for the specified -// program object. GL.INVALID_OPERATION is generated if GetUniformiv is -// executed between the execution of Begin and the corresponding execution of -// End. -// -// GetUniformiv is available in GL version 2.0 or greater. -func (gl *GL) GetUniformiv(program glbase.Program, location glbase.Uniform, params []int32) { - var params_c [4]int32 - C.gl4_0core_glGetUniformiv(gl.funcs, C.GLuint(program), C.GLint(location), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetUniformfv returns in params the value of the specified uniform -// variable. The type of the uniform variable specified by location -// determines the number of values returned. If the uniform variable is -// defined in the shader as a boolean, int, or float, a single value will be -// returned. If it is defined as a vec2, ivec2, or bvec2, two values will be -// returned. If it is defined as a vec3, ivec3, or bvec3, three values will -// be returned, and so on. To query values stored in uniform variables -// declared as arrays, call GetUniformfv for each element of the array. To -// query values stored in uniform variables declared as structures, call -// GetUniformfv for each field in the structure. The values for uniform -// variables declared as a matrix will be returned in column major order. -// -// The locations assigned to uniform variables are not known until the -// program object is linked. After linking has occurred, the command -// GetUniformLocation can be used to obtain the location of a uniform -// variable. This location value can then be passed to GetUniformfv in order -// to query the current value of the uniform variable. After a program object -// has been linked successfully, the index values for uniform variables -// remain fixed until the next link command occurs. The uniform variable -// values can only be queried after a link if the link was successful. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program -// object. GL.INVALID_OPERATION is generated if program has not been -// successfully linked. GL.INVALID_OPERATION is generated if location does -// not correspond to a valid uniform variable location for the specified -// program object. GL.INVALID_OPERATION is generated if GetUniformfv is -// executed between the execution of Begin and the corresponding execution of -// End. -// -// GetUniformfv is available in GL version 2.0 or greater. -func (gl *GL) GetUniformfv(program glbase.Program, location glbase.Uniform, params []float32) { - var params_c [4]float32 - C.gl4_0core_glGetUniformfv(gl.funcs, C.GLuint(program), C.GLint(location), (*C.GLfloat)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetUniformLocation returns an integer that represents the location of a -// specific uniform variable within a program object. name must be an active -// uniform variable name in program that is not a structure, an array of -// structures, or a subcomponent of a vector or a matrix. This function -// returns -1 if name does not correspond to an active uniform variable in -// program or if name starts with the reserved prefix "gl_". -// -// Uniform variables that are structures or arrays of structures may be -// queried by calling GetUniformLocation for each field within the -// structure. The array element operator "[]" and the structure field -// operator "." may be used in name in order to select elements within an -// array or fields within a structure. The result of using these operators is -// not allowed to be another structure, an array of structures, or a -// subcomponent of a vector or a matrix. Except if the last part of name -// indicates a uniform variable array, the location of the first element of -// an array can be retrieved by using the name of the array, or by using the -// name appended by "[0]". -// -// The actual locations assigned to uniform variables are not known until the -// program object is linked successfully. After linking has occurred, the -// command GetUniformLocation can be used to obtain the location of a -// uniform variable. This location value can then be passed to Uniform to -// set the value of the uniform variable or to GetUniform in order to query -// the current value of the uniform variable. After a program object has been -// linked successfully, the index values for uniform variables remain fixed -// until the next link command occurs. Uniform variable locations and values -// can only be queried after a link if the link was successful. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program object. -// GL.INVALID_OPERATION is generated if program has not been successfully -// linked. GL.INVALID_OPERATION is generated if GetUniformLocation is executed -// between the execution of Begin and the corresponding execution of End. -// -// GetUniformLocation is available in GL version 2.0 or greater. -func (gl *GL) GetUniformLocation(program glbase.Program, name string) glbase.Uniform { - name_cstr := C.CString(name) - glresult := C.gl4_0core_glGetUniformLocation(gl.funcs, C.GLuint(program), (*C.GLchar)(name_cstr)) - C.free(unsafe.Pointer(name_cstr)) - return glbase.Uniform(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetShaderSource.xml -func (gl *GL) GetShaderSource(shader glbase.Shader, bufSize int32, length []int32, source []byte) { - C.gl4_0core_glGetShaderSource(gl.funcs, C.GLuint(shader), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLchar)(unsafe.Pointer(&source[0]))) -} - -// GetShaderInfoLog returns the information log for the specified shader -// object. The information log for a shader object is modified when the -// shader is compiled. -// -// The information log for a shader object is a string that may contain -// diagnostic messages, warning messages, and other information about the -// last compile operation. When a shader object is created, its information -// log will be a string of length 0, and the size of the current log can be -// obtained by calling GetShaderiv with the value GL.INFO_LOG_LENGTH. -// -// The information log for a shader object is the OpenGL implementer's -// primary mechanism for conveying information about the compilation process. -// Therefore, the information log can be helpful to application developers -// during the development process, even when compilation is successful. -// Application developers should not expect different OpenGL implementations -// to produce identical information logs. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader is not a shader -// object. GL.INVALID_VALUE is generated if maxLength is less than 0. -// GL.INVALID_OPERATION is generated if GetShaderInfoLog is executed -// between the execution of Begin and the corresponding execution of End. -// -// GetShaderInfoLog is available in GL version 2.0 or greater. -func (gl *GL) GetShaderInfoLog(shader glbase.Shader) []byte { - var params [1]int32 - var length int32 - gl.GetShaderiv(shader, INFO_LOG_LENGTH, params[:]) - bufSize := params[0] - infoLog := make([]byte, int(bufSize)) - C.gl4_0core_glGetShaderInfoLog(gl.funcs, C.GLuint(shader), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length)), (*C.GLchar)(unsafe.Pointer(&infoLog[0]))) - return infoLog -} - -// GetShaderiv GetShader returns in params the value of a parameter for a specific -// shader object. The following parameters are defined: -// -// GL.SHADER_TYPE -// params returns GL.VERTEX_SHADER if shader is a vertex shader object, -// and GL.FRAGMENT_SHADER if shader is a fragment shader object. -// -// GL.DELETE_STATUS -// params returns GL.TRUE if shader is currently flagged for deletion, -// and GL.FALSE otherwise. -// -// GL.COMPILE_STATUS -// params returns GL.TRUE if the last compile operation on shader was -// successful, and GL.FALSE otherwise. -// -// GL.INFO_LOG_LENGTH -// params returns the number of characters in the information log for -// shader including the null termination character (the size of the -// character buffer required to store the information log). If shader has -// no information log, a value of 0 is returned. -// -// GL.SHADER_SOURCE_LENGTH -// params returns the length of the concatenation of the source strings -// that make up the shader source for the shader, including the null -// termination character. (the size of the character buffer -// required to store the shader source). If no source code exists, 0 is -// returned. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader does not refer to a -// shader object. GL.INVALID_ENUM is generated if pname is not an accepted -// value. GL.INVALID_OPERATION is generated if GetShader is executed -// between the execution of Begin and the corresponding execution of End. -// -// GetShaderiv is available in GL version 2.0 or greater. -func (gl *GL) GetShaderiv(shader glbase.Shader, pname glbase.Enum, params []int32) { - var params_c [4]int32 - C.gl4_0core_glGetShaderiv(gl.funcs, C.GLuint(shader), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetProgramInfoLog returns the information log for the specified program -// object. The information log for a program object is modified when the -// program object is linked or validated. -// -// The information log for a program object is either an empty string, or a -// string containing information about the last link operation, or a string -// containing information about the last validation operation. It may contain -// diagnostic messages, warning messages, and other information. When a -// program object is created, its information log will be a string of length -// 0, and the size of the current log can be obtained by calling GetProgramiv -// with the value GL.INFO_LOG_LENGTH. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated -// by OpenGL. GL.INVALID_OPERATION is generated if program is not a -// program object. -func (gl *GL) GetProgramInfoLog(program glbase.Program) []byte { - var params [1]int32 - var length int32 - gl.GetProgramiv(program, INFO_LOG_LENGTH, params[:]) - bufSize := params[0] - infoLog := make([]byte, int(bufSize)) - C.gl4_0core_glGetProgramInfoLog(gl.funcs, C.GLuint(program), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length)), (*C.GLchar)(unsafe.Pointer(&infoLog[0]))) - return infoLog -} - -// GetProgramiv returns in params the value of a parameter for a specific -// program object. The following parameters are defined: -// -// GL.DELETE_STATUS -// params returns GL.TRUE if program is currently flagged for deletion, -// and GL.FALSE otherwise. -// -// GL.LINK_STATUS -// params returns GL.TRUE if the last link operation on program was -// successful, and GL.FALSE otherwise. -// -// GL.VALIDATE_STATUS -// params returns GL.TRUE or if the last validation operation on -// program was successful, and GL.FALSE otherwise. -// -// GL.INFO_LOG_LENGTH -// params returns the number of characters in the information log for -// program including the null termination character (the size of -// the character buffer required to store the information log). If -// program has no information log, a value of 0 is returned. -// -// GL.ATTACHED_SHADERS -// params returns the number of shader objects attached to program. -// -// GL.ACTIVE_ATTRIBUTES -// params returns the number of active attribute variables for program. -// -// GL.ACTIVE_ATTRIBUTE_MAX_LENGTH -// params returns the length of the longest active attribute name for -// program, including the null termination character (the size of -// the character buffer required to store the longest attribute name). -// If no active attributes exist, 0 is returned. -// -// GL.ACTIVE_UNIFORMS -// params returns the number of active uniform variables for program. -// -// GL.ACTIVE_UNIFORM_MAX_LENGTH -// params returns the length of the longest active uniform variable -// name for program, including the null termination character (i.e., -// the size of the character buffer required to store the longest -// uniform variable name). If no active uniform variables exist, 0 is -// returned. -// -// GL.TRANSFORM_FEEDBACK_BUFFER_MODE -// params returns a symbolic constant indicating the buffer mode used -// when transform feedback is active. This may be GL.SEPARATE_ATTRIBS -// or GL.INTERLEAVED_ATTRIBS. -// -// GL.TRANSFORM_FEEDBACK_VARYINGS -// params returns the number of varying variables to capture in transform -// feedback mode for the program. -// -// GL.TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH -// params returns the length of the longest variable name to be used for -// transform feedback, including the null-terminator. -// -// GL.GEOMETRY_VERTICES_OUT -// params returns the maximum number of vertices that the geometry shader in -// program will output. -// -// GL.GEOMETRY_INPUT_TYPE -// params returns a symbolic constant indicating the primitive type accepted -// as input to the geometry shader contained in program. -// -// GL.GEOMETRY_OUTPUT_TYPE -// params returns a symbolic constant indicating the primitive type that will -// be output by the geometry shader contained in program. -// -// GL.ACTIVE_UNIFORM_BLOCKS and GL.ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH are -// available only if the GL version 3.1 or greater. -// -// GL.GEOMETRY_VERTICES_OUT, GL.GEOMETRY_INPUT_TYPE and -// GL.GEOMETRY_OUTPUT_TYPE are accepted only if the GL version is 3.2 or -// greater. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program does not refer to a -// program object. GL.INVALID_OPERATION is generated if pname is -// GL.GEOMETRY_VERTICES_OUT, GL.GEOMETRY_INPUT_TYPE, or -// GL.GEOMETRY_OUTPUT_TYPE, and program does not contain a geometry shader. -// GL.INVALID_ENUM is generated if pname is not an accepted value. -func (gl *GL) GetProgramiv(program glbase.Program, pname glbase.Enum, params []int32) { - var params_c [4]int32 - C.gl4_0core_glGetProgramiv(gl.funcs, C.GLuint(program), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetAttribLocation queries the previously linked program object specified -// by program for the attribute variable specified by name and returns the -// index of the generic vertex attribute that is bound to that attribute -// variable. If name is a matrix attribute variable, the index of the first -// column of the matrix is returned. If the named attribute variable is not -// an active attribute in the specified program object or if name starts with -// the reserved prefix "gl_", a value of -1 is returned. -// -// The association between an attribute variable name and a generic attribute -// index can be specified at any time by calling BindAttribLocation. -// Attribute bindings do not go into effect until LinkProgram is called. -// After a program object has been linked successfully, the index values for -// attribute variables remain fixed until the next link command occurs. The -// attribute values can only be queried after a link if the link was -// successful. GetAttribLocation returns the binding that actually went -// into effect the last time LinkProgram was called for the specified -// program object. Attribute bindings that have been specified since the last -// link operation are not returned by GetAttribLocation. -// -// Error GL_INVALID_OPERATION is generated if program is not a value -// generated by OpenGL. GL_INVALID_OPERATION is generated if program is not -// a program object. GL_INVALID_OPERATION is generated if program has not -// been successfully linked. GL_INVALID_OPERATION is generated if -// GetAttribLocation is executed between the execution of Begin and the -// corresponding execution of End. -// -// GetAttribLocation is available in GL version 2.0 or greater. -func (gl *GL) GetAttribLocation(program glbase.Program, name string) glbase.Attrib { - name_cstr := C.CString(name) - glresult := C.gl4_0core_glGetAttribLocation(gl.funcs, C.GLuint(program), (*C.GLchar)(name_cstr)) - C.free(unsafe.Pointer(name_cstr)) - return glbase.Attrib(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetAttachedShaders.xml -func (gl *GL) GetAttachedShaders(program glbase.Program, maxCount int32, count []int, obj []uint32) { - C.gl4_0core_glGetAttachedShaders(gl.funcs, C.GLuint(program), C.GLsizei(maxCount), (*C.GLsizei)(unsafe.Pointer(&count[0])), (*C.GLuint)(unsafe.Pointer(&obj[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveUniform.xml -func (gl *GL) GetActiveUniform(program glbase.Program, index uint32, bufSize int32, length []int32, size []int, gltype []glbase.Enum, name []byte) { - C.gl4_0core_glGetActiveUniform(gl.funcs, C.GLuint(program), C.GLuint(index), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLint)(unsafe.Pointer(&size[0])), (*C.GLenum)(unsafe.Pointer(&gltype[0])), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveAttrib.xml -func (gl *GL) GetActiveAttrib(program glbase.Program, index glbase.Attrib, bufSize int32, length []int32, size []int, gltype []glbase.Enum, name []byte) { - C.gl4_0core_glGetActiveAttrib(gl.funcs, C.GLuint(program), C.GLuint(index), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLint)(unsafe.Pointer(&size[0])), (*C.GLenum)(unsafe.Pointer(&gltype[0])), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEnableVertexAttribArray.xml -func (gl *GL) EnableVertexAttribArray(index glbase.Attrib) { - C.gl4_0core_glEnableVertexAttribArray(gl.funcs, C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDisableVertexAttribArray.xml -func (gl *GL) DisableVertexAttribArray(index glbase.Attrib) { - C.gl4_0core_glDisableVertexAttribArray(gl.funcs, C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDetachShader.xml -func (gl *GL) DetachShader(program glbase.Program, shader glbase.Shader) { - C.gl4_0core_glDetachShader(gl.funcs, C.GLuint(program), C.GLuint(shader)) -} - -// DeleteShader frees the memory and invalidates the name associated with -// the shader object specified by shader. This command effectively undoes the -// effects of a call to CreateShader. -// -// If a shader object to be deleted is attached to a program object, it will -// be flagged for deletion, but it will not be deleted until it is no longer -// attached to any program object, for any rendering context (it must -// be detached from wherever it was attached before it will be deleted). A -// value of 0 for shader will be silently ignored. -// -// To determine whether an object has been flagged for deletion, call -// GetShader with arguments shader and GL.DELETE_STATUS. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. -// -// DeleteShader is available in GL version 2.0 or greater. -func (gl *GL) DeleteShader(shader glbase.Shader) { - C.gl4_0core_glDeleteShader(gl.funcs, C.GLuint(shader)) -} - -// DeleteProgram frees the memory and invalidates the name associated with -// the program object specified by program. This command effectively undoes -// the effects of a call to CreateProgram. -// -// If a program object is in use as part of current rendering state, it will -// be flagged for deletion, but it will not be deleted until it is no longer -// part of current state for any rendering context. If a program object to be -// deleted has shader objects attached to it, those shader objects will be -// automatically detached but not deleted unless they have already been -// flagged for deletion by a previous call to DeleteShader. A value of 0 -// for program will be silently ignored. -// -// To determine whether a program object has been flagged for deletion, call -// GetProgram with arguments program and GL.DELETE_STATUS. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. -// -// DeleteProgram is available in GL version 2.0 or greater. -func (gl *GL) DeleteProgram(program glbase.Program) { - C.gl4_0core_glDeleteProgram(gl.funcs, C.GLuint(program)) -} - -// CreateShader creates an empty shader object and returns a non-zero value -// by which it can be referenced. A shader object is used to maintain the -// source code strings that define a shader. shaderType indicates the type of -// shader to be created. -// -// Two types of shaders are supported. A shader of type GL.VERTEX_SHADER is a -// shader that is intended to run on the programmable vertex processor and -// replace the fixed functionality vertex processing in OpenGL. A shader of -// type GL.FRAGMENT_SHADER is a shader that is intended to run on the -// programmable fragment processor and replace the fixed functionality -// fragment processing in OpenGL. -// -// When created, a shader object's GL.SHADER_TYPE parameter is set to either -// GL.VERTEX_SHADER or GL.FRAGMENT_SHADER, depending on the value of -// shaderType. -// -// Like display lists and texture objects, the name space for shader objects -// may be shared across a set of contexts, as long as the server sides of the -// contexts share the same address space. If the name space is shared across -// contexts, any attached objects and the data associated with those attached -// objects are shared as well. -// -// This function returns 0 if an error occurs creating the shader object. -// -// Error GL.INVALID_ENUM is generated if shaderType is not an accepted value. -// GL.INVALID_OPERATION is generated if CreateShader is executed between the -// execution of Begin and the corresponding execution of End. -// -// CreateShader is available in GL version 2.0 or greater. -func (gl *GL) CreateShader(gltype glbase.Enum) glbase.Shader { - glresult := C.gl4_0core_glCreateShader(gl.funcs, C.GLenum(gltype)) - return glbase.Shader(glresult) -} - -// CreateProgram creates an empty program object and returns a non-zero -// value by which it can be referenced. A program object is an object to -// which shader objects can be attached. This provides a mechanism to specify -// the shader objects that will be linked to create a program. It also -// provides a means for checking the compatibility of the shaders that will -// be used to create a program (for instance, checking the compatibility -// between a vertex shader and a fragment shader). When no longer needed as -// part of a program object, shader objects can be detached. -// -// One or more executables are created in a program object by successfully -// attaching shader objects to it with AttachShader, successfully compiling -// the shader objects with CompileShader, and successfully linking the -// program object with LinkProgram. These executables are made part of -// current state when UseProgram is called. Program objects can be deleted -// by calling DeleteProgram. The memory associated with the program object -// will be deleted when it is no longer part of current rendering state for -// any context. -// -// Like display lists and texture objects, the name space for program objects -// may be shared across a set of contexts, as long as the server sides of the -// contexts share the same address space. If the name space is shared across -// contexts, any attached objects and the data associated with those attached -// objects are shared as well. -// -// Applications are responsible for providing the synchronization across API -// calls when objects are accessed from different execution threads. -// -// This function returns 0 if an error occurs creating the program object. -// -// Error GL.INVALID_OPERATION is generated if CreateProgram is executed -// between the execution of Begin and the corresponding execution of End. -// -// CreateProgram is available in GL version 2.0 or greater. -func (gl *GL) CreateProgram() glbase.Program { - glresult := C.gl4_0core_glCreateProgram(gl.funcs) - return glbase.Program(glresult) -} - -// CompileShader compiles the source code strings that have been stored in -// the shader object specified by shader. -// -// The compilation status will be stored as part of the shader object's -// state. This value will be set to GL.TRUE if the shader was compiled without -// errors and is ready for use, and GL.FALSE otherwise. It can be queried by -// calling GetShaderiv with arguments shader and GL.COMPILE_STATUS. -// -// Compilation of a shader can fail for a number of reasons as specified by -// the OpenGL Shading Language Specification. Whether or not the compilation -// was successful, information about the compilation can be obtained from the -// shader object's information log by calling GetShaderInfoLog. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader is not a shader -// object. GL.INVALID_OPERATION is generated if CompileShader is executed -// between the execution of Begin and the corresponding execution of End. -// -// CompileShader is available in GL version 2.0 or greater. -func (gl *GL) CompileShader(shader glbase.Shader) { - C.gl4_0core_glCompileShader(gl.funcs, C.GLuint(shader)) -} - -// BindAttribLocation associates a user-defined attribute variable in the program -// object specified by program with a generic vertex attribute index. The name -// parameter specifies the name of the vertex shader attribute variable to -// which index is to be bound. When program is made part of the current state, -// values provided via the generic vertex attribute index will modify the -// value of the user-defined attribute variable specified by name. -// -// If name refers to a matrix attribute variable, index refers to the first -// column of the matrix. Other matrix columns are then automatically bound to -// locations index+1 for a matrix of type mat2; index+1 and index+2 for a -// matrix of type mat3; and index+1, index+2, and index+3 for a matrix of -// type mat4. -// -// This command makes it possible for vertex shaders to use descriptive names -// for attribute variables rather than generic variables that are numbered -// from 0 to GL.MAX_VERTEX_ATTRIBS-1. The values sent to each generic -// attribute index are part of current state, just like standard vertex -// attributes such as color, normal, and vertex position. If a different -// program object is made current by calling UseProgram, the generic vertex -// attributes are tracked in such a way that the same values will be observed -// by attributes in the new program object that are also bound to index. -// -// Attribute variable name-to-generic attribute index bindings for a program -// object can be explicitly assigned at any time by calling -// BindAttribLocation. Attribute bindings do not go into effect until -// LinkProgram is called. After a program object has been linked -// successfully, the index values for generic attributes remain fixed (and -// their values can be queried) until the next link command occurs. -// -// Applications are not allowed to bind any of the standard OpenGL vertex -// attributes using this command, as they are bound automatically when -// needed. Any attribute binding that occurs after the program object has -// been linked will not take effect until the next time the program object is -// linked. -// -// If name was bound previously, that information is lost. Thus you cannot -// bind one user-defined attribute variable to multiple indices, but you can -// bind multiple user-defined attribute variables to the same index. -// -// Applications are allowed to bind more than one user-defined attribute -// variable to the same generic vertex attribute index. This is called -// aliasing, and it is allowed only if just one of the aliased attributes is -// active in the executable program, or if no path through the shader -// consumes more than one attribute of a set of attributes aliased to the -// same location. The compiler and linker are allowed to assume that no -// aliasing is done and are free to employ optimizations that work only in -// the absence of aliasing. OpenGL implementations are not required to do -// error checking to detect aliasing. Because there is no way to bind -// standard attributes, it is not possible to alias generic attributes with -// conventional ones (except for generic attribute 0). -// -// BindAttribLocation can be called before any vertex shader objects are -// bound to the specified program object. It is also permissible to bind a -// generic attribute index to an attribute variable name that is never used -// in a vertex shader. -// -// Active attributes that are not explicitly bound will be bound by the -// linker when LinkProgram is called. The locations assigned can be queried -// by calling GetAttribLocation. -// -// Error GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. -// GL.INVALID_OPERATION is generated if name starts with the reserved prefix "gl_". -// GL.INVALID_VALUE is generated if program is not a value generated by OpenGL. -// GL.INVALID_OPERATION is generated if program is not a program object. -// GL.INVALID_OPERATION is generated if BindAttribLocation is executed -// between the execution of Begin and the corresponding execution of End. -// -// BindAttribLocation is available in GL version 2.0 or greater. -func (gl *GL) BindAttribLocation(program glbase.Program, index glbase.Attrib, name string) { - name_cstr := C.CString(name) - C.gl4_0core_glBindAttribLocation(gl.funcs, C.GLuint(program), C.GLuint(index), (*C.GLchar)(name_cstr)) - C.free(unsafe.Pointer(name_cstr)) -} - -// AttachShader attaches a shader object to a program object. -// -// In order to create an executable, there must be a way to specify the list -// of things that will be linked together. Program objects provide this -// mechanism. Shaders that are to be linked together in a program object must -// first be attached to that program object. This indicates that shader will -// be included in link operations that will be performed on program. -// -// All operations that can be performed on a shader object are valid whether -// or not the shader object is attached to a program object. It is -// permissible to attach a shader object to a program object before source -// code has been loaded into the shader object or before the shader object -// has been compiled. It is permissible to attach multiple shader objects of -// the same type because each may contain a portion of the complete shader. -// It is also permissible to attach a shader object to more than one program -// object. If a shader object is deleted while it is attached to a program -// object, it will be flagged for deletion, and deletion will not occur until -// DetachShader is called to detach it from all program objects to which it -// is attached. -// -// Error GL.INVALID_VALUE is generated if either program or shader is not a -// value generated by OpenGL. GL.INVALID_OPERATION is generated if program -// is not a program object. GL.INVALID_OPERATION is generated if shader is -// not a shader object. GL.INVALID_OPERATION is generated if shader is -// already attached to program. GL.INVALID_OPERATION is generated if -// AttachShader is executed between the execution of Begin and the -// corresponding execution of End. -// -// AttachShader is available in GL version 2.0 or greater. -func (gl *GL) AttachShader(program glbase.Program, shader glbase.Shader) { - C.gl4_0core_glAttachShader(gl.funcs, C.GLuint(program), C.GLuint(shader)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glStencilMaskSeparate.xml -func (gl *GL) StencilMaskSeparate(face glbase.Enum, mask uint32) { - C.gl4_0core_glStencilMaskSeparate(gl.funcs, C.GLenum(face), C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glStencilFuncSeparate.xml -func (gl *GL) StencilFuncSeparate(face, glfunc glbase.Enum, ref int32, mask uint32) { - C.gl4_0core_glStencilFuncSeparate(gl.funcs, C.GLenum(face), C.GLenum(glfunc), C.GLint(ref), C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glStencilOpSeparate.xml -func (gl *GL) StencilOpSeparate(face, sfail, dpfail, dppass glbase.Enum) { - C.gl4_0core_glStencilOpSeparate(gl.funcs, C.GLenum(face), C.GLenum(sfail), C.GLenum(dpfail), C.GLenum(dppass)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawBuffers.xml -func (gl *GL) DrawBuffers(n int, bufs []glbase.Enum) { - C.gl4_0core_glDrawBuffers(gl.funcs, C.GLsizei(n), (*C.GLenum)(unsafe.Pointer(&bufs[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendEquationSeparate.xml -func (gl *GL) BlendEquationSeparate(modeRGB, modeAlpha glbase.Enum) { - C.gl4_0core_glBlendEquationSeparate(gl.funcs, C.GLenum(modeRGB), C.GLenum(modeAlpha)) -} - -// UniformMatrix4x3fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix4x3fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix4x3fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(4*3) != 0 { - panic("invalid value length for UniformMatrix4x3fv") - } - count := len(value) / (4 * 3) - C.gl4_0core_glUniformMatrix4x3fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix3x4fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix3x4fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix3x4fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(3*4) != 0 { - panic("invalid value length for UniformMatrix3x4fv") - } - count := len(value) / (3 * 4) - C.gl4_0core_glUniformMatrix3x4fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix4x2fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix4x2fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix4x2fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(4*2) != 0 { - panic("invalid value length for UniformMatrix4x2fv") - } - count := len(value) / (4 * 2) - C.gl4_0core_glUniformMatrix4x2fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix2x4fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix2x4fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix2x4fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(2*4) != 0 { - panic("invalid value length for UniformMatrix2x4fv") - } - count := len(value) / (2 * 4) - C.gl4_0core_glUniformMatrix2x4fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix3x2fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix3x2fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix3x2fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(3*2) != 0 { - panic("invalid value length for UniformMatrix3x2fv") - } - count := len(value) / (3 * 2) - C.gl4_0core_glUniformMatrix3x2fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix2x3fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix2x3fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix2x3fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(2*3) != 0 { - panic("invalid value length for UniformMatrix2x3fv") - } - count := len(value) / (2 * 3) - C.gl4_0core_glUniformMatrix2x3fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsVertexArray.xml -func (gl *GL) IsVertexArray(array uint32) bool { - glresult := C.gl4_0core_glIsVertexArray(gl.funcs, C.GLuint(array)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGenVertexArrays.xml -func (gl *GL) GenVertexArrays(n int, arrays []uint32) { - C.gl4_0core_glGenVertexArrays(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&arrays[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDeleteVertexArrays.xml -func (gl *GL) DeleteVertexArrays(n int, arrays []uint32) { - C.gl4_0core_glDeleteVertexArrays(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&arrays[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindVertexArray.xml -func (gl *GL) BindVertexArray(array uint32) { - C.gl4_0core_glBindVertexArray(gl.funcs, C.GLuint(array)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFlushMappedBufferRange.xml -func (gl *GL) FlushMappedBufferRange(target glbase.Enum, offset, length int) { - C.gl4_0core_glFlushMappedBufferRange(gl.funcs, C.GLenum(target), C.GLintptr(offset), C.GLsizeiptr(length)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFramebufferTextureLayer.xml -func (gl *GL) FramebufferTextureLayer(target, attachment glbase.Enum, texture glbase.Texture, level int, layer int32) { - C.gl4_0core_glFramebufferTextureLayer(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLuint(texture), C.GLint(level), C.GLint(layer)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRenderbufferStorageMultisample.xml -func (gl *GL) RenderbufferStorageMultisample(target glbase.Enum, samples int32, internalFormat glbase.Enum, width, height int) { - C.gl4_0core_glRenderbufferStorageMultisample(gl.funcs, C.GLenum(target), C.GLsizei(samples), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlitFramebuffer.xml -func (gl *GL) BlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1 int32, mask glbase.Bitfield, filter glbase.Enum) { - C.gl4_0core_glBlitFramebuffer(gl.funcs, C.GLint(srcX0), C.GLint(srcY0), C.GLint(srcX1), C.GLint(srcY1), C.GLint(dstX0), C.GLint(dstY0), C.GLint(dstX1), C.GLint(dstY1), C.GLbitfield(mask), C.GLenum(filter)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGenerateMipmap.xml -func (gl *GL) GenerateMipmap(target glbase.Enum) { - C.gl4_0core_glGenerateMipmap(gl.funcs, C.GLenum(target)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetFramebufferAttachmentParameteriv.xml -func (gl *GL) GetFramebufferAttachmentParameteriv(target, attachment, pname glbase.Enum, params []int32) { - C.gl4_0core_glGetFramebufferAttachmentParameteriv(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFramebufferRenderbuffer.xml -func (gl *GL) FramebufferRenderbuffer(target, attachment, renderbuffertarget glbase.Enum, renderbuffer glbase.Renderbuffer) { - C.gl4_0core_glFramebufferRenderbuffer(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(renderbuffertarget), C.GLuint(renderbuffer)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFramebufferTexture3D.xml -func (gl *GL) FramebufferTexture3D(target, attachment, textarget glbase.Enum, texture glbase.Texture, level int, zoffset int32) { - C.gl4_0core_glFramebufferTexture3D(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(textarget), C.GLuint(texture), C.GLint(level), C.GLint(zoffset)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFramebufferTexture2D.xml -func (gl *GL) FramebufferTexture2D(target, attachment, textarget glbase.Enum, texture glbase.Texture, level int) { - C.gl4_0core_glFramebufferTexture2D(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(textarget), C.GLuint(texture), C.GLint(level)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFramebufferTexture1D.xml -func (gl *GL) FramebufferTexture1D(target, attachment, textarget glbase.Enum, texture glbase.Texture, level int) { - C.gl4_0core_glFramebufferTexture1D(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(textarget), C.GLuint(texture), C.GLint(level)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCheckFramebufferStatus.xml -func (gl *GL) CheckFramebufferStatus(target glbase.Enum) glbase.Enum { - glresult := C.gl4_0core_glCheckFramebufferStatus(gl.funcs, C.GLenum(target)) - return glbase.Enum(glresult) -} - -// GenFramebuffers returns n framebuffer object names in ids. There is no -// guarantee that the names form a contiguous set of integers; however, it is -// guaranteed that none of the returned names was in use immediately before -// the call to GenFramebuffers. -// -// Framebuffer object names returned by a call to GenFramebuffers are not -// returned by subsequent calls, unless they are first deleted with -// DeleteFramebuffers. -// -// The names returned in ids are marked as used, for the purposes of -// GenFramebuffers only, but they acquire state and type only when they are -// first bound. -// -// Error GL.INVALID_VALUE is generated if n is negative. -func (gl *GL) GenFramebuffers(n int) []glbase.Framebuffer { - if n == 0 { - return nil - } - framebuffers := make([]glbase.Framebuffer, n) - C.gl4_0core_glGenFramebuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&framebuffers[0]))) - return framebuffers -} - -// DeleteFramebuffers deletes the framebuffer objects whose names are -// stored in the framebuffers slice. The name zero is reserved by the GL and -// is silently ignored, should it occur in framebuffers, as are other unused -// names. Once a framebuffer object is deleted, its name is again unused and -// it has no attachments. If a framebuffer that is currently bound to one or -// more of the targets GL.DRAW_FRAMEBUFFER or GL.READ_FRAMEBUFFER is deleted, -// it is as though BindFramebuffer had been executed with the corresponding -// target and framebuffer zero. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// DeleteFramebuffers is available in GL version 3.0 or greater. -func (gl *GL) DeleteFramebuffers(framebuffers []glbase.Framebuffer) { - n := len(framebuffers) - if n == 0 { - return - } - C.gl4_0core_glDeleteFramebuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&framebuffers[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindFramebuffer.xml -func (gl *GL) BindFramebuffer(target glbase.Enum, framebuffer glbase.Framebuffer) { - C.gl4_0core_glBindFramebuffer(gl.funcs, C.GLenum(target), C.GLuint(framebuffer)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsFramebuffer.xml -func (gl *GL) IsFramebuffer(framebuffer glbase.Framebuffer) bool { - glresult := C.gl4_0core_glIsFramebuffer(gl.funcs, C.GLuint(framebuffer)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetRenderbufferParameteriv.xml -func (gl *GL) GetRenderbufferParameteriv(target, pname glbase.Enum, params []int32) { - C.gl4_0core_glGetRenderbufferParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRenderbufferStorage.xml -func (gl *GL) RenderbufferStorage(target, internalFormat glbase.Enum, width, height int) { - C.gl4_0core_glRenderbufferStorage(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height)) -} - -// GenRenderbuffers returns n renderbuffer object names in renderbuffers. -// There is no guarantee that the names form a contiguous set of integers; -// however, it is guaranteed that none of the returned names was in use -// immediately before the call to GenRenderbuffers. -// -// Renderbuffer object names returned by a call to GenRenderbuffers are not -// returned by subsequent calls, unless they are first deleted with -// DeleteRenderbuffers. -// -// The names returned in renderbuffers are marked as used, for the purposes -// of GenRenderbuffers only, but they acquire state and type only when they -// are first bound. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// GenRenderbuffers is available in GL version 3.0 or greater. -func (gl *GL) GenRenderbuffers(n int) []glbase.Renderbuffer { - if n == 0 { - return nil - } - renderbuffers := make([]glbase.Renderbuffer, n) - C.gl4_0core_glGenRenderbuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&renderbuffers[0]))) - return renderbuffers -} - -// DeleteRenderbuffers deletes the renderbuffer objects whose names are stored -// in the renderbuffers slice. The name zero is reserved by the GL and -// is silently ignored, should it occur in renderbuffers, as are other unused -// names. Once a renderbuffer object is deleted, its name is again unused and -// it has no contents. If a renderbuffer that is currently bound to the -// target GL.RENDERBUFFER is deleted, it is as though BindRenderbuffer had -// been executed with a target of GL.RENDERBUFFER and a name of zero. -// -// If a renderbuffer object is attached to one or more attachment points in -// the currently bound framebuffer, then it as if FramebufferRenderbuffer -// had been called, with a renderbuffer of zero for each attachment point to -// which this image was attached in the currently bound framebuffer. In other -// words, this renderbuffer object is first detached from all attachment -// ponits in the currently bound framebuffer. Note that the renderbuffer -// image is specifically not detached from any non-bound framebuffers. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// DeleteRenderbuffers is available in GL version 3.0 or greater. -func (gl *GL) DeleteRenderbuffers(renderbuffers []glbase.Renderbuffer) { - n := len(renderbuffers) - if n == 0 { - return - } - C.gl4_0core_glDeleteRenderbuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&renderbuffers[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindRenderbuffer.xml -func (gl *GL) BindRenderbuffer(target glbase.Enum, renderbuffer glbase.Renderbuffer) { - C.gl4_0core_glBindRenderbuffer(gl.funcs, C.GLenum(target), C.GLuint(renderbuffer)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsRenderbuffer.xml -func (gl *GL) IsRenderbuffer(renderbuffer glbase.Renderbuffer) bool { - glresult := C.gl4_0core_glIsRenderbuffer(gl.funcs, C.GLuint(renderbuffer)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearBufferfi.xml -func (gl *GL) ClearBufferfi(buffer glbase.Enum, drawbuffer int32, depth float32, stencil int32) { - C.gl4_0core_glClearBufferfi(gl.funcs, C.GLenum(buffer), C.GLint(drawbuffer), C.GLfloat(depth), C.GLint(stencil)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearBufferfv.xml -func (gl *GL) ClearBufferfv(buffer glbase.Enum, drawbuffer int32, value []float32) { - C.gl4_0core_glClearBufferfv(gl.funcs, C.GLenum(buffer), C.GLint(drawbuffer), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearBufferuiv.xml -func (gl *GL) ClearBufferuiv(buffer glbase.Enum, drawbuffer int32, value []uint32) { - C.gl4_0core_glClearBufferuiv(gl.funcs, C.GLenum(buffer), C.GLint(drawbuffer), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearBufferiv.xml -func (gl *GL) ClearBufferiv(buffer glbase.Enum, drawbuffer int32, value []int32) { - C.gl4_0core_glClearBufferiv(gl.funcs, C.GLenum(buffer), C.GLint(drawbuffer), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexParameterIuiv.xml -func (gl *GL) GetTexParameterIuiv(target, pname glbase.Enum, params []uint32) { - C.gl4_0core_glGetTexParameterIuiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexParameterIiv.xml -func (gl *GL) GetTexParameterIiv(target, pname glbase.Enum, params []int32) { - C.gl4_0core_glGetTexParameterIiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexParameterIuiv.xml -func (gl *GL) TexParameterIuiv(target, pname glbase.Enum, params []uint32) { - C.gl4_0core_glTexParameterIuiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexParameterIiv.xml -func (gl *GL) TexParameterIiv(target, pname glbase.Enum, params []int32) { - C.gl4_0core_glTexParameterIiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// Uniform4uiv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform4uiv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4uiv(location glbase.Uniform, value []uint32) { - if len(value) == 0 { - return - } - if len(value)%4 != 0 { - panic("invalid value length for Uniform4uiv") - } - count := len(value) / 4 - C.gl4_0core_glUniform4uiv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// Uniform3uiv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform3uiv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3uiv(location glbase.Uniform, value []uint32) { - if len(value) == 0 { - return - } - if len(value)%3 != 0 { - panic("invalid value length for Uniform3uiv") - } - count := len(value) / 3 - C.gl4_0core_glUniform3uiv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// Uniform2uiv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform2uiv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2uiv(location glbase.Uniform, value []uint32) { - if len(value) == 0 { - return - } - if len(value)%2 != 0 { - panic("invalid value length for Uniform2uiv") - } - count := len(value) / 2 - C.gl4_0core_glUniform2uiv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// Uniform1uiv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform1uiv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1uiv(location glbase.Uniform, value []uint32) { - if len(value) == 0 { - return - } - count := len(value) - C.gl4_0core_glUniform1uiv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// Uniform4ui modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform4ui operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4ui(location glbase.Uniform, v0, v1, v2, v3 uint32) { - C.gl4_0core_glUniform4ui(gl.funcs, C.GLint(location), C.GLuint(v0), C.GLuint(v1), C.GLuint(v2), C.GLuint(v3)) -} - -// Uniform3ui modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform3ui operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3ui(location glbase.Uniform, v0, v1, v2 uint32) { - C.gl4_0core_glUniform3ui(gl.funcs, C.GLint(location), C.GLuint(v0), C.GLuint(v1), C.GLuint(v2)) -} - -// Uniform2ui modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform2ui operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2ui(location glbase.Uniform, v0, v1 uint32) { - C.gl4_0core_glUniform2ui(gl.funcs, C.GLint(location), C.GLuint(v0), C.GLuint(v1)) -} - -// Uniform1ui modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform1ui operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1ui(location glbase.Uniform, v0 uint32) { - C.gl4_0core_glUniform1ui(gl.funcs, C.GLint(location), C.GLuint(v0)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetFragDataLocation.xml -func (gl *GL) GetFragDataLocation(program glbase.Program, name []byte) int32 { - glresult := C.gl4_0core_glGetFragDataLocation(gl.funcs, C.GLuint(program), (*C.GLchar)(unsafe.Pointer(&name[0]))) - return int32(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindFragDataLocation.xml -func (gl *GL) BindFragDataLocation(program glbase.Program, color uint32, name []byte) { - C.gl4_0core_glBindFragDataLocation(gl.funcs, C.GLuint(program), C.GLuint(color), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetUniformuiv.xml -func (gl *GL) GetUniformuiv(program glbase.Program, location glbase.Uniform, params []uint32) { - C.gl4_0core_glGetUniformuiv(gl.funcs, C.GLuint(program), C.GLint(location), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetVertexAttribIuiv.xml -func (gl *GL) GetVertexAttribIuiv(index glbase.Attrib, pname glbase.Enum, params []uint32) { - C.gl4_0core_glGetVertexAttribIuiv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetVertexAttribIiv.xml -func (gl *GL) GetVertexAttribIiv(index glbase.Attrib, pname glbase.Enum, params []int32) { - C.gl4_0core_glGetVertexAttribIiv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribIPointer.xml -func (gl *GL) VertexAttribIPointer(index glbase.Attrib, size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl4_0core_glVertexAttribIPointer(gl.funcs, C.GLuint(index), C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEndConditionalRender.xml -func (gl *GL) EndConditionalRender() { - C.gl4_0core_glEndConditionalRender(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBeginConditionalRender.xml -func (gl *GL) BeginConditionalRender(id uint32, mode glbase.Enum) { - C.gl4_0core_glBeginConditionalRender(gl.funcs, C.GLuint(id), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClampColor.xml -func (gl *GL) ClampColor(target, clamp glbase.Enum) { - C.gl4_0core_glClampColor(gl.funcs, C.GLenum(target), C.GLenum(clamp)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTransformFeedbackVarying.xml -func (gl *GL) GetTransformFeedbackVarying(program glbase.Program, index uint32, bufSize int32, length []int32, size []int, gltype []glbase.Enum, name []byte) { - C.gl4_0core_glGetTransformFeedbackVarying(gl.funcs, C.GLuint(program), C.GLuint(index), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLsizei)(unsafe.Pointer(&size[0])), (*C.GLenum)(unsafe.Pointer(&gltype[0])), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindBufferBase.xml -func (gl *GL) BindBufferBase(target glbase.Enum, index uint32, buffer glbase.Buffer) { - C.gl4_0core_glBindBufferBase(gl.funcs, C.GLenum(target), C.GLuint(index), C.GLuint(buffer)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindBufferRange.xml -func (gl *GL) BindBufferRange(target glbase.Enum, index uint32, buffer glbase.Buffer, offset, size int) { - C.gl4_0core_glBindBufferRange(gl.funcs, C.GLenum(target), C.GLuint(index), C.GLuint(buffer), C.GLintptr(offset), C.GLsizeiptr(size)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEndTransformFeedback.xml -func (gl *GL) EndTransformFeedback() { - C.gl4_0core_glEndTransformFeedback(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBeginTransformFeedback.xml -func (gl *GL) BeginTransformFeedback(primitiveMode glbase.Enum) { - C.gl4_0core_glBeginTransformFeedback(gl.funcs, C.GLenum(primitiveMode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsEnabledi.xml -func (gl *GL) IsEnabledi(target glbase.Enum, index uint32) bool { - glresult := C.gl4_0core_glIsEnabledi(gl.funcs, C.GLenum(target), C.GLuint(index)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDisablei.xml -func (gl *GL) Disablei(target glbase.Enum, index uint32) { - C.gl4_0core_glDisablei(gl.funcs, C.GLenum(target), C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEnablei.xml -func (gl *GL) Enablei(target glbase.Enum, index uint32) { - C.gl4_0core_glEnablei(gl.funcs, C.GLenum(target), C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetIntegeri_v.xml -func (gl *GL) GetIntegeri_v(target glbase.Enum, index uint32, data []int32) { - C.gl4_0core_glGetIntegeri_v(gl.funcs, C.GLenum(target), C.GLuint(index), (*C.GLint)(unsafe.Pointer(&data[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetBooleani_v.xml -func (gl *GL) GetBooleani_v(target glbase.Enum, index uint32, data []bool) { - C.gl4_0core_glGetBooleani_v(gl.funcs, C.GLenum(target), C.GLuint(index), (*C.GLboolean)(unsafe.Pointer(&data[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorMaski.xml -func (gl *GL) ColorMaski(index uint32, r, g, b, a bool) { - C.gl4_0core_glColorMaski(gl.funcs, C.GLuint(index), *(*C.GLboolean)(unsafe.Pointer(&r)), *(*C.GLboolean)(unsafe.Pointer(&g)), *(*C.GLboolean)(unsafe.Pointer(&b)), *(*C.GLboolean)(unsafe.Pointer(&a))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyBufferSubData.xml -func (gl *GL) CopyBufferSubData(readTarget, writeTarget glbase.Enum, readOffset, writeOffset, size int) { - C.gl4_0core_glCopyBufferSubData(gl.funcs, C.GLenum(readTarget), C.GLenum(writeTarget), C.GLintptr(readOffset), C.GLintptr(writeOffset), C.GLsizeiptr(size)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformBlockBinding.xml -func (gl *GL) UniformBlockBinding(program glbase.Program, v0, v1 uint32) { - C.gl4_0core_glUniformBlockBinding(gl.funcs, C.GLuint(program), C.GLuint(v0), C.GLuint(v1)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveUniformBlockName.xml -func (gl *GL) GetActiveUniformBlockName(program glbase.Program, uniformBlockIndex uint32, bufSize int32, length []int32, uniformBlockName []byte) { - C.gl4_0core_glGetActiveUniformBlockName(gl.funcs, C.GLuint(program), C.GLuint(uniformBlockIndex), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLchar)(unsafe.Pointer(&uniformBlockName[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveUniformBlockiv.xml -func (gl *GL) GetActiveUniformBlockiv(program glbase.Program, uniformBlockIndex uint32, pname glbase.Enum, params []int32) { - C.gl4_0core_glGetActiveUniformBlockiv(gl.funcs, C.GLuint(program), C.GLuint(uniformBlockIndex), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetUniformBlockIndex.xml -func (gl *GL) GetUniformBlockIndex(program glbase.Program, uniformBlockName []byte) uint32 { - glresult := C.gl4_0core_glGetUniformBlockIndex(gl.funcs, C.GLuint(program), (*C.GLchar)(unsafe.Pointer(&uniformBlockName[0]))) - return uint32(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveUniformName.xml -func (gl *GL) GetActiveUniformName(program glbase.Program, uniformIndex uint32, bufSize int32, length []int32, uniformName []byte) { - C.gl4_0core_glGetActiveUniformName(gl.funcs, C.GLuint(program), C.GLuint(uniformIndex), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLchar)(unsafe.Pointer(&uniformName[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveUniformsiv.xml -func (gl *GL) GetActiveUniformsiv(program glbase.Program, uniformCount int32, uniformIndices []uint32, pname glbase.Enum, params []int32) { - C.gl4_0core_glGetActiveUniformsiv(gl.funcs, C.GLuint(program), C.GLsizei(uniformCount), (*C.GLuint)(unsafe.Pointer(&uniformIndices[0])), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPrimitiveRestartIndex.xml -func (gl *GL) PrimitiveRestartIndex(index uint32) { - C.gl4_0core_glPrimitiveRestartIndex(gl.funcs, C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexBuffer.xml -func (gl *GL) TexBuffer(target, internalFormat glbase.Enum, buffer glbase.Buffer) { - C.gl4_0core_glTexBuffer(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLuint(buffer)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawElementsInstanced.xml -func (gl *GL) DrawElementsInstanced(mode glbase.Enum, count int, gltype glbase.Enum, indices interface{}, instancecount int32) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl4_0core_glDrawElementsInstanced(gl.funcs, C.GLenum(mode), C.GLsizei(count), C.GLenum(gltype), indices_ptr, C.GLsizei(instancecount)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawArraysInstanced.xml -func (gl *GL) DrawArraysInstanced(mode glbase.Enum, first, count int, instancecount int32) { - C.gl4_0core_glDrawArraysInstanced(gl.funcs, C.GLenum(mode), C.GLint(first), C.GLsizei(count), C.GLsizei(instancecount)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSampleMaski.xml -func (gl *GL) SampleMaski(index uint32, mask glbase.Bitfield) { - C.gl4_0core_glSampleMaski(gl.funcs, C.GLuint(index), C.GLbitfield(mask)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetMultisamplefv.xml -func (gl *GL) GetMultisamplefv(pname glbase.Enum, index uint32, val []float32) { - C.gl4_0core_glGetMultisamplefv(gl.funcs, C.GLenum(pname), C.GLuint(index), (*C.GLfloat)(unsafe.Pointer(&val[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexImage3DMultisample.xml -func (gl *GL) TexImage3DMultisample(target glbase.Enum, samples, internalFormat int32, width, height int, depth int32, fixedsamplelocations bool) { - C.gl4_0core_glTexImage3DMultisample(gl.funcs, C.GLenum(target), C.GLsizei(samples), C.GLint(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), *(*C.GLboolean)(unsafe.Pointer(&fixedsamplelocations))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexImage2DMultisample.xml -func (gl *GL) TexImage2DMultisample(target glbase.Enum, samples, internalFormat int32, width, height int, fixedsamplelocations bool) { - C.gl4_0core_glTexImage2DMultisample(gl.funcs, C.GLenum(target), C.GLsizei(samples), C.GLint(internalFormat), C.GLsizei(width), C.GLsizei(height), *(*C.GLboolean)(unsafe.Pointer(&fixedsamplelocations))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetSynciv.xml -func (gl *GL) GetSynciv(sync glbase.Sync, pname glbase.Enum, bufSize int32, length, values []int32) { - C.gl4_0core_glGetSynciv(gl.funcs, C.GLsync(unsafe.Pointer(sync)), C.GLenum(pname), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLint)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetInteger64v.xml -func (gl *GL) GetInteger64v(pname glbase.Enum, params []int64) { - C.gl4_0core_glGetInteger64v(gl.funcs, C.GLenum(pname), (*C.GLint64)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWaitSync.xml -func (gl *GL) WaitSync(sync glbase.Sync, flags glbase.Bitfield, timeout uint64) { - C.gl4_0core_glWaitSync(gl.funcs, C.GLsync(unsafe.Pointer(sync)), C.GLbitfield(flags), C.GLuint64(timeout)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClientWaitSync.xml -func (gl *GL) ClientWaitSync(sync glbase.Sync, flags glbase.Bitfield, timeout uint64) glbase.Enum { - glresult := C.gl4_0core_glClientWaitSync(gl.funcs, C.GLsync(unsafe.Pointer(sync)), C.GLbitfield(flags), C.GLuint64(timeout)) - return glbase.Enum(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDeleteSync.xml -func (gl *GL) DeleteSync(sync glbase.Sync) { - C.gl4_0core_glDeleteSync(gl.funcs, C.GLsync(unsafe.Pointer(sync))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsSync.xml -func (gl *GL) IsSync(sync glbase.Sync) bool { - glresult := C.gl4_0core_glIsSync(gl.funcs, C.GLsync(unsafe.Pointer(sync))) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFenceSync.xml -func (gl *GL) FenceSync(condition glbase.Enum, flags glbase.Bitfield) glbase.Sync { - glresult := C.gl4_0core_glFenceSync(gl.funcs, C.GLenum(condition), C.GLbitfield(flags)) - return glbase.Sync(unsafe.Pointer(glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProvokingVertex.xml -func (gl *GL) ProvokingVertex(mode glbase.Enum) { - C.gl4_0core_glProvokingVertex(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawElementsInstancedBaseVertex.xml -func (gl *GL) DrawElementsInstancedBaseVertex(mode glbase.Enum, count int, gltype glbase.Enum, indices interface{}, instancecount, basevertex int32) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl4_0core_glDrawElementsInstancedBaseVertex(gl.funcs, C.GLenum(mode), C.GLsizei(count), C.GLenum(gltype), indices_ptr, C.GLsizei(instancecount), C.GLint(basevertex)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawRangeElementsBaseVertex.xml -func (gl *GL) DrawRangeElementsBaseVertex(mode glbase.Enum, start, end uint32, count int, gltype glbase.Enum, indices interface{}, basevertex int32) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl4_0core_glDrawRangeElementsBaseVertex(gl.funcs, C.GLenum(mode), C.GLuint(start), C.GLuint(end), C.GLsizei(count), C.GLenum(gltype), indices_ptr, C.GLint(basevertex)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawElementsBaseVertex.xml -func (gl *GL) DrawElementsBaseVertex(mode glbase.Enum, count int, gltype glbase.Enum, indices interface{}, basevertex int32) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl4_0core_glDrawElementsBaseVertex(gl.funcs, C.GLenum(mode), C.GLsizei(count), C.GLenum(gltype), indices_ptr, C.GLint(basevertex)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFramebufferTexture.xml -func (gl *GL) FramebufferTexture(target, attachment glbase.Enum, texture glbase.Texture, level int) { - C.gl4_0core_glFramebufferTexture(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLuint(texture), C.GLint(level)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetBufferParameteri64v.xml -func (gl *GL) GetBufferParameteri64v(target, pname glbase.Enum, params []int64) { - C.gl4_0core_glGetBufferParameteri64v(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint64)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetInteger64i_v.xml -func (gl *GL) GetInteger64i_v(target glbase.Enum, index uint32, data []int64) { - C.gl4_0core_glGetInteger64i_v(gl.funcs, C.GLenum(target), C.GLuint(index), (*C.GLint64)(unsafe.Pointer(&data[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribP4uiv.xml -func (gl *GL) VertexAttribP4uiv(index glbase.Attrib, gltype glbase.Enum, normalized bool, value []uint32) { - C.gl4_0core_glVertexAttribP4uiv(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribP4ui.xml -func (gl *GL) VertexAttribP4ui(index glbase.Attrib, gltype glbase.Enum, normalized bool, value uint32) { - C.gl4_0core_glVertexAttribP4ui(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribP3uiv.xml -func (gl *GL) VertexAttribP3uiv(index glbase.Attrib, gltype glbase.Enum, normalized bool, value []uint32) { - C.gl4_0core_glVertexAttribP3uiv(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribP3ui.xml -func (gl *GL) VertexAttribP3ui(index glbase.Attrib, gltype glbase.Enum, normalized bool, value uint32) { - C.gl4_0core_glVertexAttribP3ui(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribP2uiv.xml -func (gl *GL) VertexAttribP2uiv(index glbase.Attrib, gltype glbase.Enum, normalized bool, value []uint32) { - C.gl4_0core_glVertexAttribP2uiv(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribP2ui.xml -func (gl *GL) VertexAttribP2ui(index glbase.Attrib, gltype glbase.Enum, normalized bool, value uint32) { - C.gl4_0core_glVertexAttribP2ui(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribP1uiv.xml -func (gl *GL) VertexAttribP1uiv(index glbase.Attrib, gltype glbase.Enum, normalized bool, value []uint32) { - C.gl4_0core_glVertexAttribP1uiv(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribP1ui.xml -func (gl *GL) VertexAttribP1ui(index glbase.Attrib, gltype glbase.Enum, normalized bool, value uint32) { - C.gl4_0core_glVertexAttribP1ui(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColorP3uiv.xml -func (gl *GL) SecondaryColorP3uiv(gltype glbase.Enum, color []uint32) { - C.gl4_0core_glSecondaryColorP3uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&color[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColorP3ui.xml -func (gl *GL) SecondaryColorP3ui(gltype glbase.Enum, color uint32) { - C.gl4_0core_glSecondaryColorP3ui(gl.funcs, C.GLenum(gltype), C.GLuint(color)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorP4uiv.xml -func (gl *GL) ColorP4uiv(gltype glbase.Enum, color []uint32) { - C.gl4_0core_glColorP4uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&color[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorP4ui.xml -func (gl *GL) ColorP4ui(gltype glbase.Enum, color uint32) { - C.gl4_0core_glColorP4ui(gl.funcs, C.GLenum(gltype), C.GLuint(color)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorP3uiv.xml -func (gl *GL) ColorP3uiv(gltype glbase.Enum, color []uint32) { - C.gl4_0core_glColorP3uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&color[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorP3ui.xml -func (gl *GL) ColorP3ui(gltype glbase.Enum, color uint32) { - C.gl4_0core_glColorP3ui(gl.funcs, C.GLenum(gltype), C.GLuint(color)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glNormalP3uiv.xml -func (gl *GL) NormalP3uiv(gltype glbase.Enum, coords []uint32) { - C.gl4_0core_glNormalP3uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glNormalP3ui.xml -func (gl *GL) NormalP3ui(gltype glbase.Enum, coords uint32) { - C.gl4_0core_glNormalP3ui(gl.funcs, C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoordP4uiv.xml -func (gl *GL) MultiTexCoordP4uiv(texture, gltype glbase.Enum, coords []uint32) { - C.gl4_0core_glMultiTexCoordP4uiv(gl.funcs, C.GLenum(texture), C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoordP4ui.xml -func (gl *GL) MultiTexCoordP4ui(texture, gltype glbase.Enum, coords uint32) { - C.gl4_0core_glMultiTexCoordP4ui(gl.funcs, C.GLenum(texture), C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoordP3uiv.xml -func (gl *GL) MultiTexCoordP3uiv(texture, gltype glbase.Enum, coords []uint32) { - C.gl4_0core_glMultiTexCoordP3uiv(gl.funcs, C.GLenum(texture), C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoordP3ui.xml -func (gl *GL) MultiTexCoordP3ui(texture, gltype glbase.Enum, coords uint32) { - C.gl4_0core_glMultiTexCoordP3ui(gl.funcs, C.GLenum(texture), C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoordP2uiv.xml -func (gl *GL) MultiTexCoordP2uiv(texture, gltype glbase.Enum, coords []uint32) { - C.gl4_0core_glMultiTexCoordP2uiv(gl.funcs, C.GLenum(texture), C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoordP2ui.xml -func (gl *GL) MultiTexCoordP2ui(texture, gltype glbase.Enum, coords uint32) { - C.gl4_0core_glMultiTexCoordP2ui(gl.funcs, C.GLenum(texture), C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoordP1uiv.xml -func (gl *GL) MultiTexCoordP1uiv(texture, gltype glbase.Enum, coords []uint32) { - C.gl4_0core_glMultiTexCoordP1uiv(gl.funcs, C.GLenum(texture), C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoordP1ui.xml -func (gl *GL) MultiTexCoordP1ui(texture, gltype glbase.Enum, coords uint32) { - C.gl4_0core_glMultiTexCoordP1ui(gl.funcs, C.GLenum(texture), C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordP4uiv.xml -func (gl *GL) TexCoordP4uiv(gltype glbase.Enum, coords []uint32) { - C.gl4_0core_glTexCoordP4uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordP4ui.xml -func (gl *GL) TexCoordP4ui(gltype glbase.Enum, coords uint32) { - C.gl4_0core_glTexCoordP4ui(gl.funcs, C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordP3uiv.xml -func (gl *GL) TexCoordP3uiv(gltype glbase.Enum, coords []uint32) { - C.gl4_0core_glTexCoordP3uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordP3ui.xml -func (gl *GL) TexCoordP3ui(gltype glbase.Enum, coords uint32) { - C.gl4_0core_glTexCoordP3ui(gl.funcs, C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordP2uiv.xml -func (gl *GL) TexCoordP2uiv(gltype glbase.Enum, coords []uint32) { - C.gl4_0core_glTexCoordP2uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordP2ui.xml -func (gl *GL) TexCoordP2ui(gltype glbase.Enum, coords uint32) { - C.gl4_0core_glTexCoordP2ui(gl.funcs, C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordP1uiv.xml -func (gl *GL) TexCoordP1uiv(gltype glbase.Enum, coords []uint32) { - C.gl4_0core_glTexCoordP1uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordP1ui.xml -func (gl *GL) TexCoordP1ui(gltype glbase.Enum, coords uint32) { - C.gl4_0core_glTexCoordP1ui(gl.funcs, C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexP4uiv.xml -func (gl *GL) VertexP4uiv(gltype glbase.Enum, value []uint32) { - C.gl4_0core_glVertexP4uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexP4ui.xml -func (gl *GL) VertexP4ui(gltype glbase.Enum, value uint32) { - C.gl4_0core_glVertexP4ui(gl.funcs, C.GLenum(gltype), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexP3uiv.xml -func (gl *GL) VertexP3uiv(gltype glbase.Enum, value []uint32) { - C.gl4_0core_glVertexP3uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexP3ui.xml -func (gl *GL) VertexP3ui(gltype glbase.Enum, value uint32) { - C.gl4_0core_glVertexP3ui(gl.funcs, C.GLenum(gltype), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexP2uiv.xml -func (gl *GL) VertexP2uiv(gltype glbase.Enum, value []uint32) { - C.gl4_0core_glVertexP2uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexP2ui.xml -func (gl *GL) VertexP2ui(gltype glbase.Enum, value uint32) { - C.gl4_0core_glVertexP2ui(gl.funcs, C.GLenum(gltype), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetQueryObjectui64v.xml -func (gl *GL) GetQueryObjectui64v(id uint32, pname glbase.Enum, params []uint64) { - C.gl4_0core_glGetQueryObjectui64v(gl.funcs, C.GLuint(id), C.GLenum(pname), (*C.GLuint64)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetQueryObjecti64v.xml -func (gl *GL) GetQueryObjecti64v(id uint32, pname glbase.Enum, params []int64) { - C.gl4_0core_glGetQueryObjecti64v(gl.funcs, C.GLuint(id), C.GLenum(pname), (*C.GLint64)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glQueryCounter.xml -func (gl *GL) QueryCounter(id uint32, target glbase.Enum) { - C.gl4_0core_glQueryCounter(gl.funcs, C.GLuint(id), C.GLenum(target)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetSamplerParameterIuiv.xml -func (gl *GL) GetSamplerParameterIuiv(sampler uint32, pname glbase.Enum, params []uint32) { - C.gl4_0core_glGetSamplerParameterIuiv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetSamplerParameterfv.xml -func (gl *GL) GetSamplerParameterfv(sampler uint32, pname glbase.Enum, params []float32) { - C.gl4_0core_glGetSamplerParameterfv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetSamplerParameterIiv.xml -func (gl *GL) GetSamplerParameterIiv(sampler uint32, pname glbase.Enum, params []int32) { - C.gl4_0core_glGetSamplerParameterIiv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetSamplerParameteriv.xml -func (gl *GL) GetSamplerParameteriv(sampler uint32, pname glbase.Enum, params []int32) { - C.gl4_0core_glGetSamplerParameteriv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSamplerParameterIuiv.xml -func (gl *GL) SamplerParameterIuiv(sampler uint32, pname glbase.Enum, param []uint32) { - C.gl4_0core_glSamplerParameterIuiv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶m[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSamplerParameterIiv.xml -func (gl *GL) SamplerParameterIiv(sampler uint32, pname glbase.Enum, param []int32) { - C.gl4_0core_glSamplerParameterIiv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶m[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSamplerParameterfv.xml -func (gl *GL) SamplerParameterfv(sampler uint32, pname glbase.Enum, param []float32) { - C.gl4_0core_glSamplerParameterfv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶m[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSamplerParameterf.xml -func (gl *GL) SamplerParameterf(sampler uint32, pname glbase.Enum, param float32) { - C.gl4_0core_glSamplerParameterf(gl.funcs, C.GLuint(sampler), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSamplerParameteriv.xml -func (gl *GL) SamplerParameteriv(sampler uint32, pname glbase.Enum, param []int32) { - C.gl4_0core_glSamplerParameteriv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶m[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSamplerParameteri.xml -func (gl *GL) SamplerParameteri(sampler uint32, pname glbase.Enum, param int32) { - C.gl4_0core_glSamplerParameteri(gl.funcs, C.GLuint(sampler), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindSampler.xml -func (gl *GL) BindSampler(unit, sampler uint32) { - C.gl4_0core_glBindSampler(gl.funcs, C.GLuint(unit), C.GLuint(sampler)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsSampler.xml -func (gl *GL) IsSampler(sampler uint32) bool { - glresult := C.gl4_0core_glIsSampler(gl.funcs, C.GLuint(sampler)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDeleteSamplers.xml -func (gl *GL) DeleteSamplers(count int, samplers []uint32) { - C.gl4_0core_glDeleteSamplers(gl.funcs, C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&samplers[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGenSamplers.xml -func (gl *GL) GenSamplers(count int, samplers []uint32) { - C.gl4_0core_glGenSamplers(gl.funcs, C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&samplers[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetFragDataIndex.xml -func (gl *GL) GetFragDataIndex(program glbase.Program, name []byte) int32 { - glresult := C.gl4_0core_glGetFragDataIndex(gl.funcs, C.GLuint(program), (*C.GLchar)(unsafe.Pointer(&name[0]))) - return int32(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindFragDataLocationIndexed.xml -func (gl *GL) BindFragDataLocationIndexed(program glbase.Program, colorNumber, index uint32, name []byte) { - C.gl4_0core_glBindFragDataLocationIndexed(gl.funcs, C.GLuint(program), C.GLuint(colorNumber), C.GLuint(index), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribDivisor.xml -func (gl *GL) VertexAttribDivisor(index glbase.Attrib, divisor uint32) { - C.gl4_0core_glVertexAttribDivisor(gl.funcs, C.GLuint(index), C.GLuint(divisor)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetQueryIndexediv.xml -func (gl *GL) GetQueryIndexediv(target glbase.Enum, index uint32, pname glbase.Enum, params []int32) { - C.gl4_0core_glGetQueryIndexediv(gl.funcs, C.GLenum(target), C.GLuint(index), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEndQueryIndexed.xml -func (gl *GL) EndQueryIndexed(target glbase.Enum, index uint32) { - C.gl4_0core_glEndQueryIndexed(gl.funcs, C.GLenum(target), C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBeginQueryIndexed.xml -func (gl *GL) BeginQueryIndexed(target glbase.Enum, index, id uint32) { - C.gl4_0core_glBeginQueryIndexed(gl.funcs, C.GLenum(target), C.GLuint(index), C.GLuint(id)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawTransformFeedbackStream.xml -func (gl *GL) DrawTransformFeedbackStream(mode glbase.Enum, id, stream uint32) { - C.gl4_0core_glDrawTransformFeedbackStream(gl.funcs, C.GLenum(mode), C.GLuint(id), C.GLuint(stream)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawTransformFeedback.xml -func (gl *GL) DrawTransformFeedback(mode glbase.Enum, id uint32) { - C.gl4_0core_glDrawTransformFeedback(gl.funcs, C.GLenum(mode), C.GLuint(id)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glResumeTransformFeedback.xml -func (gl *GL) ResumeTransformFeedback() { - C.gl4_0core_glResumeTransformFeedback(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPauseTransformFeedback.xml -func (gl *GL) PauseTransformFeedback() { - C.gl4_0core_glPauseTransformFeedback(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsTransformFeedback.xml -func (gl *GL) IsTransformFeedback(id uint32) bool { - glresult := C.gl4_0core_glIsTransformFeedback(gl.funcs, C.GLuint(id)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGenTransformFeedbacks.xml -func (gl *GL) GenTransformFeedbacks(n int, ids []uint32) { - C.gl4_0core_glGenTransformFeedbacks(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&ids[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDeleteTransformFeedbacks.xml -func (gl *GL) DeleteTransformFeedbacks(n int, ids []uint32) { - C.gl4_0core_glDeleteTransformFeedbacks(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&ids[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindTransformFeedback.xml -func (gl *GL) BindTransformFeedback(target glbase.Enum, id uint32) { - C.gl4_0core_glBindTransformFeedback(gl.funcs, C.GLenum(target), C.GLuint(id)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPatchParameterfv.xml -func (gl *GL) PatchParameterfv(pname glbase.Enum, values []float32) { - C.gl4_0core_glPatchParameterfv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPatchParameteri.xml -func (gl *GL) PatchParameteri(pname glbase.Enum, value int32) { - C.gl4_0core_glPatchParameteri(gl.funcs, C.GLenum(pname), C.GLint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetProgramStageiv.xml -func (gl *GL) GetProgramStageiv(program glbase.Program, shadertype, pname glbase.Enum, values []int32) { - C.gl4_0core_glGetProgramStageiv(gl.funcs, C.GLuint(program), C.GLenum(shadertype), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetUniformSubroutineuiv.xml -func (gl *GL) GetUniformSubroutineuiv(shadertype glbase.Enum, location glbase.Uniform, params []uint32) { - C.gl4_0core_glGetUniformSubroutineuiv(gl.funcs, C.GLenum(shadertype), C.GLint(location), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformSubroutinesuiv.xml -func (gl *GL) UniformSubroutinesuiv(shadertype glbase.Enum, count int, value []uint32) { - C.gl4_0core_glUniformSubroutinesuiv(gl.funcs, C.GLenum(shadertype), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveSubroutineName.xml -func (gl *GL) GetActiveSubroutineName(program glbase.Program, shadertype glbase.Enum, index uint32, bufSize int32, length []int32, name []byte) { - C.gl4_0core_glGetActiveSubroutineName(gl.funcs, C.GLuint(program), C.GLenum(shadertype), C.GLuint(index), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveSubroutineUniformName.xml -func (gl *GL) GetActiveSubroutineUniformName(program glbase.Program, shadertype glbase.Enum, index uint32, bufSize int32, length []int32, name []byte) { - C.gl4_0core_glGetActiveSubroutineUniformName(gl.funcs, C.GLuint(program), C.GLenum(shadertype), C.GLuint(index), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveSubroutineUniformiv.xml -func (gl *GL) GetActiveSubroutineUniformiv(program glbase.Program, shadertype glbase.Enum, index uint32, pname glbase.Enum, values []int32) { - C.gl4_0core_glGetActiveSubroutineUniformiv(gl.funcs, C.GLuint(program), C.GLenum(shadertype), C.GLuint(index), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetSubroutineIndex.xml -func (gl *GL) GetSubroutineIndex(program glbase.Program, shadertype glbase.Enum, name []byte) uint32 { - glresult := C.gl4_0core_glGetSubroutineIndex(gl.funcs, C.GLuint(program), C.GLenum(shadertype), (*C.GLchar)(unsafe.Pointer(&name[0]))) - return uint32(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetSubroutineUniformLocation.xml -func (gl *GL) GetSubroutineUniformLocation(program glbase.Program, shadertype glbase.Enum, name []byte) int32 { - glresult := C.gl4_0core_glGetSubroutineUniformLocation(gl.funcs, C.GLuint(program), C.GLenum(shadertype), (*C.GLchar)(unsafe.Pointer(&name[0]))) - return int32(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetUniformdv.xml -func (gl *GL) GetUniformdv(program glbase.Program, location glbase.Uniform, params []float64) { - C.gl4_0core_glGetUniformdv(gl.funcs, C.GLuint(program), C.GLint(location), (*C.GLdouble)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix4x3dv.xml -func (gl *GL) UniformMatrix4x3dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_0core_glUniformMatrix4x3dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix4x2dv.xml -func (gl *GL) UniformMatrix4x2dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_0core_glUniformMatrix4x2dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix3x4dv.xml -func (gl *GL) UniformMatrix3x4dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_0core_glUniformMatrix3x4dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix3x2dv.xml -func (gl *GL) UniformMatrix3x2dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_0core_glUniformMatrix3x2dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix2x4dv.xml -func (gl *GL) UniformMatrix2x4dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_0core_glUniformMatrix2x4dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix2x3dv.xml -func (gl *GL) UniformMatrix2x3dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_0core_glUniformMatrix2x3dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix4dv.xml -func (gl *GL) UniformMatrix4dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_0core_glUniformMatrix4dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix3dv.xml -func (gl *GL) UniformMatrix3dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_0core_glUniformMatrix3dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix2dv.xml -func (gl *GL) UniformMatrix2dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_0core_glUniformMatrix2dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniform4dv.xml -func (gl *GL) Uniform4dv(location glbase.Uniform, count int, value []float64) { - C.gl4_0core_glUniform4dv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniform3dv.xml -func (gl *GL) Uniform3dv(location glbase.Uniform, count int, value []float64) { - C.gl4_0core_glUniform3dv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniform2dv.xml -func (gl *GL) Uniform2dv(location glbase.Uniform, count int, value []float64) { - C.gl4_0core_glUniform2dv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniform1dv.xml -func (gl *GL) Uniform1dv(location glbase.Uniform, count int, value []float64) { - C.gl4_0core_glUniform1dv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniform4d.xml -func (gl *GL) Uniform4d(location glbase.Uniform, v0, v1, v2, v3 float64) { - C.gl4_0core_glUniform4d(gl.funcs, C.GLint(location), C.GLdouble(v0), C.GLdouble(v1), C.GLdouble(v2), C.GLdouble(v3)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniform3d.xml -func (gl *GL) Uniform3d(location glbase.Uniform, v0, v1, v2 float64) { - C.gl4_0core_glUniform3d(gl.funcs, C.GLint(location), C.GLdouble(v0), C.GLdouble(v1), C.GLdouble(v2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniform2d.xml -func (gl *GL) Uniform2d(location glbase.Uniform, v0, v1 float64) { - C.gl4_0core_glUniform2d(gl.funcs, C.GLint(location), C.GLdouble(v0), C.GLdouble(v1)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniform1d.xml -func (gl *GL) Uniform1d(location glbase.Uniform, v0 float64) { - C.gl4_0core_glUniform1d(gl.funcs, C.GLint(location), C.GLdouble(v0)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawElementsIndirect.xml -func (gl *GL) DrawElementsIndirect(mode, gltype glbase.Enum, indirect interface{}) { - var indirect_ptr unsafe.Pointer - var indirect_v = reflect.ValueOf(indirect) - if indirect != nil && indirect_v.Kind() != reflect.Slice { - panic("parameter indirect must be a slice") - } - if indirect != nil { - indirect_ptr = unsafe.Pointer(indirect_v.Index(0).Addr().Pointer()) - } - C.gl4_0core_glDrawElementsIndirect(gl.funcs, C.GLenum(mode), C.GLenum(gltype), indirect_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawArraysIndirect.xml -func (gl *GL) DrawArraysIndirect(mode glbase.Enum, indirect interface{}) { - var indirect_ptr unsafe.Pointer - var indirect_v = reflect.ValueOf(indirect) - if indirect != nil && indirect_v.Kind() != reflect.Slice { - panic("parameter indirect must be a slice") - } - if indirect != nil { - indirect_ptr = unsafe.Pointer(indirect_v.Index(0).Addr().Pointer()) - } - C.gl4_0core_glDrawArraysIndirect(gl.funcs, C.GLenum(mode), indirect_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendFuncSeparatei.xml -func (gl *GL) BlendFuncSeparatei(buf uint32, srcRGB, dstRGB, srcAlpha, dstAlpha glbase.Enum) { - C.gl4_0core_glBlendFuncSeparatei(gl.funcs, C.GLuint(buf), C.GLenum(srcRGB), C.GLenum(dstRGB), C.GLenum(srcAlpha), C.GLenum(dstAlpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendFunci.xml -func (gl *GL) BlendFunci(buf uint32, src, dst glbase.Enum) { - C.gl4_0core_glBlendFunci(gl.funcs, C.GLuint(buf), C.GLenum(src), C.GLenum(dst)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendEquationSeparatei.xml -func (gl *GL) BlendEquationSeparatei(buf uint32, modeRGB, modeAlpha glbase.Enum) { - C.gl4_0core_glBlendEquationSeparatei(gl.funcs, C.GLuint(buf), C.GLenum(modeRGB), C.GLenum(modeAlpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendEquationi.xml -func (gl *GL) BlendEquationi(buf uint32, mode glbase.Enum) { - C.gl4_0core_glBlendEquationi(gl.funcs, C.GLuint(buf), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMinSampleShading.xml -func (gl *GL) MinSampleShading(value float32) { - C.gl4_0core_glMinSampleShading(gl.funcs, C.GLfloat(value)) -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.1compat/funcs.cpp b/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.1compat/funcs.cpp deleted file mode 100644 index 70ec9e7f32..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.1compat/funcs.cpp +++ /dev/null @@ -1,5286 +0,0 @@ - -// ** file automatically generated by glgen -- do not edit manually ** - -#include -#include - -#include "funcs.h" - -void *gl4_1compat_funcs() { - QOpenGLFunctions_4_1_Compatibility* funcs = QOpenGLContext::currentContext()->versionFunctions(); - if (!funcs) { - return 0; - } - funcs->initializeOpenGLFunctions(); - return funcs; -} - - -void gl4_1compat_glViewport(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glViewport(x, y, width, height); -} - -void gl4_1compat_glDepthRange(void *_glfuncs, GLdouble nearVal, GLdouble farVal) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthRange(nearVal, farVal); -} - -GLboolean gl4_1compat_glIsEnabled(void *_glfuncs, GLenum cap) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsEnabled(cap); -} - -void gl4_1compat_glGetTexLevelParameteriv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexLevelParameteriv(target, level, pname, params); -} - -void gl4_1compat_glGetTexLevelParameterfv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexLevelParameterfv(target, level, pname, params); -} - -void gl4_1compat_glGetTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameteriv(target, pname, params); -} - -void gl4_1compat_glGetTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameterfv(target, pname, params); -} - -void gl4_1compat_glGetTexImage(void *_glfuncs, GLenum target, GLint level, GLenum format, GLenum gltype, GLvoid* pixels) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexImage(target, level, format, gltype, pixels); -} - -void gl4_1compat_glGetIntegerv(void *_glfuncs, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetIntegerv(pname, params); -} - -void gl4_1compat_glGetFloatv(void *_glfuncs, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetFloatv(pname, params); -} - -GLenum gl4_1compat_glGetError(void *_glfuncs) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetError(); -} - -void gl4_1compat_glGetDoublev(void *_glfuncs, GLenum pname, GLdouble* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetDoublev(pname, params); -} - -void gl4_1compat_glGetBooleanv(void *_glfuncs, GLenum pname, GLboolean* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBooleanv(pname, params); -} - -void gl4_1compat_glReadPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum gltype, GLvoid* pixels) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glReadPixels(x, y, width, height, format, gltype, pixels); -} - -void gl4_1compat_glReadBuffer(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glReadBuffer(mode); -} - -void gl4_1compat_glPixelStorei(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelStorei(pname, param); -} - -void gl4_1compat_glPixelStoref(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelStoref(pname, param); -} - -void gl4_1compat_glDepthFunc(void *_glfuncs, GLenum glfunc) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthFunc(glfunc); -} - -void gl4_1compat_glStencilOp(void *_glfuncs, GLenum fail, GLenum zfail, GLenum zpass) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilOp(fail, zfail, zpass); -} - -void gl4_1compat_glStencilFunc(void *_glfuncs, GLenum glfunc, GLint ref, GLuint mask) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilFunc(glfunc, ref, mask); -} - -void gl4_1compat_glLogicOp(void *_glfuncs, GLenum opcode) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLogicOp(opcode); -} - -void gl4_1compat_glBlendFunc(void *_glfuncs, GLenum sfactor, GLenum dfactor) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendFunc(sfactor, dfactor); -} - -void gl4_1compat_glFlush(void *_glfuncs) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFlush(); -} - -void gl4_1compat_glFinish(void *_glfuncs) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFinish(); -} - -void gl4_1compat_glEnable(void *_glfuncs, GLenum cap) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnable(cap); -} - -void gl4_1compat_glDisable(void *_glfuncs, GLenum cap) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDisable(cap); -} - -void gl4_1compat_glDepthMask(void *_glfuncs, GLboolean flag) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthMask(flag); -} - -void gl4_1compat_glColorMask(void *_glfuncs, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorMask(red, green, blue, alpha); -} - -void gl4_1compat_glStencilMask(void *_glfuncs, GLuint mask) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilMask(mask); -} - -void gl4_1compat_glClearDepth(void *_glfuncs, GLdouble depth) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearDepth(depth); -} - -void gl4_1compat_glClearStencil(void *_glfuncs, GLint s) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearStencil(s); -} - -void gl4_1compat_glClearColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearColor(red, green, blue, alpha); -} - -void gl4_1compat_glClear(void *_glfuncs, GLbitfield mask) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClear(mask); -} - -void gl4_1compat_glDrawBuffer(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawBuffer(mode); -} - -void gl4_1compat_glTexImage2D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage2D(target, level, internalFormat, width, height, border, format, gltype, pixels); -} - -void gl4_1compat_glTexImage1D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage1D(target, level, internalFormat, width, border, format, gltype, pixels); -} - -void gl4_1compat_glTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameteriv(target, pname, params); -} - -void gl4_1compat_glTexParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint param) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameteri(target, pname, param); -} - -void gl4_1compat_glTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterfv(target, pname, params); -} - -void gl4_1compat_glTexParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterf(target, pname, param); -} - -void gl4_1compat_glScissor(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScissor(x, y, width, height); -} - -void gl4_1compat_glPolygonMode(void *_glfuncs, GLenum face, GLenum mode) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPolygonMode(face, mode); -} - -void gl4_1compat_glPointSize(void *_glfuncs, GLfloat size) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointSize(size); -} - -void gl4_1compat_glLineWidth(void *_glfuncs, GLfloat width) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLineWidth(width); -} - -void gl4_1compat_glHint(void *_glfuncs, GLenum target, GLenum mode) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glHint(target, mode); -} - -void gl4_1compat_glFrontFace(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFrontFace(mode); -} - -void gl4_1compat_glCullFace(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCullFace(mode); -} - -void gl4_1compat_glIndexubv(void *_glfuncs, const GLubyte* c) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexubv(c); -} - -void gl4_1compat_glIndexub(void *_glfuncs, GLubyte c) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexub(c); -} - -GLboolean gl4_1compat_glIsTexture(void *_glfuncs, GLuint texture) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsTexture(texture); -} - -void gl4_1compat_glGenTextures(void *_glfuncs, GLsizei n, GLuint* textures) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenTextures(n, textures); -} - -void gl4_1compat_glDeleteTextures(void *_glfuncs, GLsizei n, const GLuint* textures) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteTextures(n, textures); -} - -void gl4_1compat_glBindTexture(void *_glfuncs, GLenum target, GLuint texture) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindTexture(target, texture); -} - -void gl4_1compat_glTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, gltype, pixels); -} - -void gl4_1compat_glTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexSubImage1D(target, level, xoffset, width, format, gltype, pixels); -} - -void gl4_1compat_glCopyTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height); -} - -void gl4_1compat_glCopyTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexSubImage1D(target, level, xoffset, x, y, width); -} - -void gl4_1compat_glCopyTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexImage2D(target, level, internalFormat, x, y, width, height, border); -} - -void gl4_1compat_glCopyTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexImage1D(target, level, internalFormat, x, y, width, border); -} - -void gl4_1compat_glPolygonOffset(void *_glfuncs, GLfloat factor, GLfloat units) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPolygonOffset(factor, units); -} - -void gl4_1compat_glDrawElements(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElements(mode, count, gltype, indices); -} - -void gl4_1compat_glDrawArrays(void *_glfuncs, GLenum mode, GLint first, GLsizei count) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawArrays(mode, first, count); -} - -void gl4_1compat_glCopyTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexSubImage3D(target, level, xoffset, yoffset, zoffset, x, y, width, height); -} - -void gl4_1compat_glTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, gltype, pixels); -} - -void gl4_1compat_glTexImage3D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage3D(target, level, internalFormat, width, height, depth, border, format, gltype, pixels); -} - -void gl4_1compat_glDrawRangeElements(void *_glfuncs, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum gltype, const GLvoid* indices) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawRangeElements(mode, start, end, count, gltype, indices); -} - -void gl4_1compat_glBlendEquation(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendEquation(mode); -} - -void gl4_1compat_glBlendColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendColor(red, green, blue, alpha); -} - -void gl4_1compat_glGetCompressedTexImage(void *_glfuncs, GLenum target, GLint level, GLvoid* img) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetCompressedTexImage(target, level, img); -} - -void gl4_1compat_glCompressedTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexSubImage1D(target, level, xoffset, width, format, imageSize, data); -} - -void gl4_1compat_glCompressedTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data); -} - -void gl4_1compat_glCompressedTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data); -} - -void gl4_1compat_glCompressedTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexImage1D(target, level, internalFormat, width, border, imageSize, data); -} - -void gl4_1compat_glCompressedTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexImage2D(target, level, internalFormat, width, height, border, imageSize, data); -} - -void gl4_1compat_glCompressedTexImage3D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexImage3D(target, level, internalFormat, width, height, depth, border, imageSize, data); -} - -void gl4_1compat_glSampleCoverage(void *_glfuncs, GLfloat value, GLboolean invert) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSampleCoverage(value, invert); -} - -void gl4_1compat_glActiveTexture(void *_glfuncs, GLenum texture) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glActiveTexture(texture); -} - -void gl4_1compat_glPointParameteriv(void *_glfuncs, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameteriv(pname, params); -} - -void gl4_1compat_glPointParameteri(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameteri(pname, param); -} - -void gl4_1compat_glPointParameterfv(void *_glfuncs, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameterfv(pname, params); -} - -void gl4_1compat_glPointParameterf(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameterf(pname, param); -} - -void gl4_1compat_glMultiDrawArrays(void *_glfuncs, GLenum mode, const GLint* first, const GLsizei* count, GLsizei drawcount) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiDrawArrays(mode, first, count, drawcount); -} - -void gl4_1compat_glBlendFuncSeparate(void *_glfuncs, GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendFuncSeparate(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha); -} - -void gl4_1compat_glGetBufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBufferParameteriv(target, pname, params); -} - -GLboolean gl4_1compat_glUnmapBuffer(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glUnmapBuffer(target); -} - -void gl4_1compat_glGetBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, GLvoid* data) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBufferSubData(target, offset, size, data); -} - -void gl4_1compat_glBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBufferSubData(target, offset, size, data); -} - -void gl4_1compat_glBufferData(void *_glfuncs, GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBufferData(target, size, data, usage); -} - -GLboolean gl4_1compat_glIsBuffer(void *_glfuncs, GLuint buffer) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsBuffer(buffer); -} - -void gl4_1compat_glGenBuffers(void *_glfuncs, GLsizei n, GLuint* buffers) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenBuffers(n, buffers); -} - -void gl4_1compat_glDeleteBuffers(void *_glfuncs, GLsizei n, const GLuint* buffers) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteBuffers(n, buffers); -} - -void gl4_1compat_glBindBuffer(void *_glfuncs, GLenum target, GLuint buffer) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindBuffer(target, buffer); -} - -void gl4_1compat_glGetQueryObjectuiv(void *_glfuncs, GLuint id, GLenum pname, GLuint* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryObjectuiv(id, pname, params); -} - -void gl4_1compat_glGetQueryObjectiv(void *_glfuncs, GLuint id, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryObjectiv(id, pname, params); -} - -void gl4_1compat_glGetQueryiv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryiv(target, pname, params); -} - -void gl4_1compat_glEndQuery(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndQuery(target); -} - -void gl4_1compat_glBeginQuery(void *_glfuncs, GLenum target, GLuint id) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBeginQuery(target, id); -} - -GLboolean gl4_1compat_glIsQuery(void *_glfuncs, GLuint id) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsQuery(id); -} - -void gl4_1compat_glDeleteQueries(void *_glfuncs, GLsizei n, const GLuint* ids) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteQueries(n, ids); -} - -void gl4_1compat_glGenQueries(void *_glfuncs, GLsizei n, GLuint* ids) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenQueries(n, ids); -} - -void gl4_1compat_glVertexAttribPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLboolean normalized, GLsizei stride, const GLvoid* offset) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribPointer(index, size, gltype, normalized, stride, offset); -} - -void gl4_1compat_glValidateProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glValidateProgram(program); -} - -void gl4_1compat_glUniformMatrix4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4fv(location, count, transpose, value); -} - -void gl4_1compat_glUniformMatrix3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3fv(location, count, transpose, value); -} - -void gl4_1compat_glUniformMatrix2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2fv(location, count, transpose, value); -} - -void gl4_1compat_glUniform4iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4iv(location, count, value); -} - -void gl4_1compat_glUniform3iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3iv(location, count, value); -} - -void gl4_1compat_glUniform2iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2iv(location, count, value); -} - -void gl4_1compat_glUniform1iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1iv(location, count, value); -} - -void gl4_1compat_glUniform4fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4fv(location, count, value); -} - -void gl4_1compat_glUniform3fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3fv(location, count, value); -} - -void gl4_1compat_glUniform2fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2fv(location, count, value); -} - -void gl4_1compat_glUniform1fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1fv(location, count, value); -} - -void gl4_1compat_glUniform4i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2, GLint v3) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4i(location, v0, v1, v2, v3); -} - -void gl4_1compat_glUniform3i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3i(location, v0, v1, v2); -} - -void gl4_1compat_glUniform2i(void *_glfuncs, GLint location, GLint v0, GLint v1) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2i(location, v0, v1); -} - -void gl4_1compat_glUniform1i(void *_glfuncs, GLint location, GLint v0) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1i(location, v0); -} - -void gl4_1compat_glUniform4f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4f(location, v0, v1, v2, v3); -} - -void gl4_1compat_glUniform3f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3f(location, v0, v1, v2); -} - -void gl4_1compat_glUniform2f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2f(location, v0, v1); -} - -void gl4_1compat_glUniform1f(void *_glfuncs, GLint location, GLfloat v0) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1f(location, v0); -} - -void gl4_1compat_glUseProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUseProgram(program); -} - -void gl4_1compat_glShaderSource(void *_glfuncs, GLuint shader, GLsizei count, const GLchar** source, const GLint* length) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glShaderSource(shader, count, source, length); -} - -void gl4_1compat_glLinkProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLinkProgram(program); -} - -GLboolean gl4_1compat_glIsShader(void *_glfuncs, GLuint shader) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsShader(shader); -} - -GLboolean gl4_1compat_glIsProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsProgram(program); -} - -void gl4_1compat_glGetVertexAttribiv(void *_glfuncs, GLuint index, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribiv(index, pname, params); -} - -void gl4_1compat_glGetVertexAttribfv(void *_glfuncs, GLuint index, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribfv(index, pname, params); -} - -void gl4_1compat_glGetVertexAttribdv(void *_glfuncs, GLuint index, GLenum pname, GLdouble* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribdv(index, pname, params); -} - -void gl4_1compat_glGetUniformiv(void *_glfuncs, GLuint program, GLint location, GLint* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetUniformiv(program, location, params); -} - -void gl4_1compat_glGetUniformfv(void *_glfuncs, GLuint program, GLint location, GLfloat* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetUniformfv(program, location, params); -} - -GLint gl4_1compat_glGetUniformLocation(void *_glfuncs, GLuint program, const GLchar* name) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetUniformLocation(program, name); -} - -void gl4_1compat_glGetShaderSource(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* source) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetShaderSource(shader, bufSize, length, source); -} - -void gl4_1compat_glGetShaderInfoLog(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* infoLog) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetShaderInfoLog(shader, bufSize, length, infoLog); -} - -void gl4_1compat_glGetShaderiv(void *_glfuncs, GLuint shader, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetShaderiv(shader, pname, params); -} - -void gl4_1compat_glGetProgramInfoLog(void *_glfuncs, GLuint program, GLsizei bufSize, GLsizei* length, GLchar* infoLog) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetProgramInfoLog(program, bufSize, length, infoLog); -} - -void gl4_1compat_glGetProgramiv(void *_glfuncs, GLuint program, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetProgramiv(program, pname, params); -} - -GLint gl4_1compat_glGetAttribLocation(void *_glfuncs, GLuint program, const GLchar* name) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetAttribLocation(program, name); -} - -void gl4_1compat_glGetAttachedShaders(void *_glfuncs, GLuint program, GLsizei maxCount, GLsizei* count, GLuint* obj) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetAttachedShaders(program, maxCount, count, obj); -} - -void gl4_1compat_glGetActiveUniform(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniform(program, index, bufSize, length, size, gltype, name); -} - -void gl4_1compat_glGetActiveAttrib(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveAttrib(program, index, bufSize, length, size, gltype, name); -} - -void gl4_1compat_glEnableVertexAttribArray(void *_glfuncs, GLuint index) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnableVertexAttribArray(index); -} - -void gl4_1compat_glDisableVertexAttribArray(void *_glfuncs, GLuint index) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDisableVertexAttribArray(index); -} - -void gl4_1compat_glDetachShader(void *_glfuncs, GLuint program, GLuint shader) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDetachShader(program, shader); -} - -void gl4_1compat_glDeleteShader(void *_glfuncs, GLuint shader) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteShader(shader); -} - -void gl4_1compat_glDeleteProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteProgram(program); -} - -GLuint gl4_1compat_glCreateShader(void *_glfuncs, GLenum gltype) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glCreateShader(gltype); -} - -GLuint gl4_1compat_glCreateProgram(void *_glfuncs) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glCreateProgram(); -} - -void gl4_1compat_glCompileShader(void *_glfuncs, GLuint shader) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompileShader(shader); -} - -void gl4_1compat_glBindAttribLocation(void *_glfuncs, GLuint program, GLuint index, const GLchar* name) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindAttribLocation(program, index, name); -} - -void gl4_1compat_glAttachShader(void *_glfuncs, GLuint program, GLuint shader) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glAttachShader(program, shader); -} - -void gl4_1compat_glStencilMaskSeparate(void *_glfuncs, GLenum face, GLuint mask) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilMaskSeparate(face, mask); -} - -void gl4_1compat_glStencilFuncSeparate(void *_glfuncs, GLenum face, GLenum glfunc, GLint ref, GLuint mask) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilFuncSeparate(face, glfunc, ref, mask); -} - -void gl4_1compat_glStencilOpSeparate(void *_glfuncs, GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilOpSeparate(face, sfail, dpfail, dppass); -} - -void gl4_1compat_glDrawBuffers(void *_glfuncs, GLsizei n, const GLenum* bufs) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawBuffers(n, bufs); -} - -void gl4_1compat_glBlendEquationSeparate(void *_glfuncs, GLenum modeRGB, GLenum modeAlpha) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendEquationSeparate(modeRGB, modeAlpha); -} - -void gl4_1compat_glUniformMatrix4x3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4x3fv(location, count, transpose, value); -} - -void gl4_1compat_glUniformMatrix3x4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3x4fv(location, count, transpose, value); -} - -void gl4_1compat_glUniformMatrix4x2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4x2fv(location, count, transpose, value); -} - -void gl4_1compat_glUniformMatrix2x4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2x4fv(location, count, transpose, value); -} - -void gl4_1compat_glUniformMatrix3x2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3x2fv(location, count, transpose, value); -} - -void gl4_1compat_glUniformMatrix2x3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2x3fv(location, count, transpose, value); -} - -GLboolean gl4_1compat_glIsVertexArray(void *_glfuncs, GLuint array) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsVertexArray(array); -} - -void gl4_1compat_glGenVertexArrays(void *_glfuncs, GLsizei n, GLuint* arrays) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenVertexArrays(n, arrays); -} - -void gl4_1compat_glDeleteVertexArrays(void *_glfuncs, GLsizei n, const GLuint* arrays) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteVertexArrays(n, arrays); -} - -void gl4_1compat_glBindVertexArray(void *_glfuncs, GLuint array) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindVertexArray(array); -} - -void gl4_1compat_glFlushMappedBufferRange(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr length) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFlushMappedBufferRange(target, offset, length); -} - -void gl4_1compat_glFramebufferTextureLayer(void *_glfuncs, GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTextureLayer(target, attachment, texture, level, layer); -} - -void gl4_1compat_glRenderbufferStorageMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRenderbufferStorageMultisample(target, samples, internalFormat, width, height); -} - -void gl4_1compat_glBlitFramebuffer(void *_glfuncs, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter); -} - -void gl4_1compat_glGenerateMipmap(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenerateMipmap(target); -} - -void gl4_1compat_glGetFramebufferAttachmentParameteriv(void *_glfuncs, GLenum target, GLenum attachment, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetFramebufferAttachmentParameteriv(target, attachment, pname, params); -} - -void gl4_1compat_glFramebufferRenderbuffer(void *_glfuncs, GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer); -} - -void gl4_1compat_glFramebufferTexture3D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTexture3D(target, attachment, textarget, texture, level, zoffset); -} - -void gl4_1compat_glFramebufferTexture2D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTexture2D(target, attachment, textarget, texture, level); -} - -void gl4_1compat_glFramebufferTexture1D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTexture1D(target, attachment, textarget, texture, level); -} - -GLenum gl4_1compat_glCheckFramebufferStatus(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glCheckFramebufferStatus(target); -} - -void gl4_1compat_glGenFramebuffers(void *_glfuncs, GLsizei n, GLuint* framebuffers) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenFramebuffers(n, framebuffers); -} - -void gl4_1compat_glDeleteFramebuffers(void *_glfuncs, GLsizei n, const GLuint* framebuffers) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteFramebuffers(n, framebuffers); -} - -void gl4_1compat_glBindFramebuffer(void *_glfuncs, GLenum target, GLuint framebuffer) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindFramebuffer(target, framebuffer); -} - -GLboolean gl4_1compat_glIsFramebuffer(void *_glfuncs, GLuint framebuffer) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsFramebuffer(framebuffer); -} - -void gl4_1compat_glGetRenderbufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetRenderbufferParameteriv(target, pname, params); -} - -void gl4_1compat_glRenderbufferStorage(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRenderbufferStorage(target, internalFormat, width, height); -} - -void gl4_1compat_glGenRenderbuffers(void *_glfuncs, GLsizei n, GLuint* renderbuffers) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenRenderbuffers(n, renderbuffers); -} - -void gl4_1compat_glDeleteRenderbuffers(void *_glfuncs, GLsizei n, const GLuint* renderbuffers) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteRenderbuffers(n, renderbuffers); -} - -void gl4_1compat_glBindRenderbuffer(void *_glfuncs, GLenum target, GLuint renderbuffer) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindRenderbuffer(target, renderbuffer); -} - -GLboolean gl4_1compat_glIsRenderbuffer(void *_glfuncs, GLuint renderbuffer) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsRenderbuffer(renderbuffer); -} - -void gl4_1compat_glClearBufferfi(void *_glfuncs, GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearBufferfi(buffer, drawbuffer, depth, stencil); -} - -void gl4_1compat_glClearBufferfv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLfloat* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearBufferfv(buffer, drawbuffer, value); -} - -void gl4_1compat_glClearBufferuiv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLuint* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearBufferuiv(buffer, drawbuffer, value); -} - -void gl4_1compat_glClearBufferiv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLint* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearBufferiv(buffer, drawbuffer, value); -} - -void gl4_1compat_glGetTexParameterIuiv(void *_glfuncs, GLenum target, GLenum pname, GLuint* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameterIuiv(target, pname, params); -} - -void gl4_1compat_glGetTexParameterIiv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameterIiv(target, pname, params); -} - -void gl4_1compat_glTexParameterIuiv(void *_glfuncs, GLenum target, GLenum pname, const GLuint* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterIuiv(target, pname, params); -} - -void gl4_1compat_glTexParameterIiv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterIiv(target, pname, params); -} - -void gl4_1compat_glUniform4uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4uiv(location, count, value); -} - -void gl4_1compat_glUniform3uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3uiv(location, count, value); -} - -void gl4_1compat_glUniform2uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2uiv(location, count, value); -} - -void gl4_1compat_glUniform1uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1uiv(location, count, value); -} - -void gl4_1compat_glUniform4ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4ui(location, v0, v1, v2, v3); -} - -void gl4_1compat_glUniform3ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1, GLuint v2) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3ui(location, v0, v1, v2); -} - -void gl4_1compat_glUniform2ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2ui(location, v0, v1); -} - -void gl4_1compat_glUniform1ui(void *_glfuncs, GLint location, GLuint v0) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1ui(location, v0); -} - -GLint gl4_1compat_glGetFragDataLocation(void *_glfuncs, GLuint program, const GLchar* name) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetFragDataLocation(program, name); -} - -void gl4_1compat_glBindFragDataLocation(void *_glfuncs, GLuint program, GLuint color, const GLchar* name) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindFragDataLocation(program, color, name); -} - -void gl4_1compat_glGetUniformuiv(void *_glfuncs, GLuint program, GLint location, GLuint* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetUniformuiv(program, location, params); -} - -void gl4_1compat_glGetVertexAttribIuiv(void *_glfuncs, GLuint index, GLenum pname, GLuint* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribIuiv(index, pname, params); -} - -void gl4_1compat_glGetVertexAttribIiv(void *_glfuncs, GLuint index, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribIiv(index, pname, params); -} - -void gl4_1compat_glVertexAttribIPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribIPointer(index, size, gltype, stride, pointer); -} - -void gl4_1compat_glEndConditionalRender(void *_glfuncs) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndConditionalRender(); -} - -void gl4_1compat_glBeginConditionalRender(void *_glfuncs, GLuint id, GLenum mode) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBeginConditionalRender(id, mode); -} - -void gl4_1compat_glClampColor(void *_glfuncs, GLenum target, GLenum clamp) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClampColor(target, clamp); -} - -void gl4_1compat_glGetTransformFeedbackVarying(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* gltype, GLchar* name) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTransformFeedbackVarying(program, index, bufSize, length, size, gltype, name); -} - -void gl4_1compat_glBindBufferBase(void *_glfuncs, GLenum target, GLuint index, GLuint buffer) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindBufferBase(target, index, buffer); -} - -void gl4_1compat_glBindBufferRange(void *_glfuncs, GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindBufferRange(target, index, buffer, offset, size); -} - -void gl4_1compat_glEndTransformFeedback(void *_glfuncs) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndTransformFeedback(); -} - -void gl4_1compat_glBeginTransformFeedback(void *_glfuncs, GLenum primitiveMode) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBeginTransformFeedback(primitiveMode); -} - -GLboolean gl4_1compat_glIsEnabledi(void *_glfuncs, GLenum target, GLuint index) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsEnabledi(target, index); -} - -void gl4_1compat_glDisablei(void *_glfuncs, GLenum target, GLuint index) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDisablei(target, index); -} - -void gl4_1compat_glEnablei(void *_glfuncs, GLenum target, GLuint index) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnablei(target, index); -} - -void gl4_1compat_glGetIntegeri_v(void *_glfuncs, GLenum target, GLuint index, GLint* data) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetIntegeri_v(target, index, data); -} - -void gl4_1compat_glGetBooleani_v(void *_glfuncs, GLenum target, GLuint index, GLboolean* data) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBooleani_v(target, index, data); -} - -void gl4_1compat_glColorMaski(void *_glfuncs, GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorMaski(index, r, g, b, a); -} - -void gl4_1compat_glCopyBufferSubData(void *_glfuncs, GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyBufferSubData(readTarget, writeTarget, readOffset, writeOffset, size); -} - -void gl4_1compat_glUniformBlockBinding(void *_glfuncs, GLuint program, GLuint v0, GLuint v1) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformBlockBinding(program, v0, v1); -} - -void gl4_1compat_glGetActiveUniformBlockName(void *_glfuncs, GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformBlockName) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniformBlockName(program, uniformBlockIndex, bufSize, length, uniformBlockName); -} - -void gl4_1compat_glGetActiveUniformBlockiv(void *_glfuncs, GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniformBlockiv(program, uniformBlockIndex, pname, params); -} - -GLuint gl4_1compat_glGetUniformBlockIndex(void *_glfuncs, GLuint program, const GLchar* uniformBlockName) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetUniformBlockIndex(program, uniformBlockName); -} - -void gl4_1compat_glGetActiveUniformName(void *_glfuncs, GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformName) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniformName(program, uniformIndex, bufSize, length, uniformName); -} - -void gl4_1compat_glGetActiveUniformsiv(void *_glfuncs, GLuint program, GLsizei uniformCount, const GLuint* uniformIndices, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniformsiv(program, uniformCount, uniformIndices, pname, params); -} - -void gl4_1compat_glPrimitiveRestartIndex(void *_glfuncs, GLuint index) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPrimitiveRestartIndex(index); -} - -void gl4_1compat_glTexBuffer(void *_glfuncs, GLenum target, GLenum internalFormat, GLuint buffer) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexBuffer(target, internalFormat, buffer); -} - -void gl4_1compat_glDrawElementsInstanced(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLsizei instancecount) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElementsInstanced(mode, count, gltype, indices, instancecount); -} - -void gl4_1compat_glDrawArraysInstanced(void *_glfuncs, GLenum mode, GLint first, GLsizei count, GLsizei instancecount) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawArraysInstanced(mode, first, count, instancecount); -} - -void gl4_1compat_glSampleMaski(void *_glfuncs, GLuint index, GLbitfield mask) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSampleMaski(index, mask); -} - -void gl4_1compat_glGetMultisamplefv(void *_glfuncs, GLenum pname, GLuint index, GLfloat* val) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMultisamplefv(pname, index, val); -} - -void gl4_1compat_glTexImage3DMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage3DMultisample(target, samples, internalFormat, width, height, depth, fixedsamplelocations); -} - -void gl4_1compat_glTexImage2DMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage2DMultisample(target, samples, internalFormat, width, height, fixedsamplelocations); -} - -void gl4_1compat_glGetSynciv(void *_glfuncs, GLsync sync, GLenum pname, GLsizei bufSize, GLsizei* length, GLint* values) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetSynciv(sync, pname, bufSize, length, values); -} - -void gl4_1compat_glGetInteger64v(void *_glfuncs, GLenum pname, GLint64* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetInteger64v(pname, params); -} - -void gl4_1compat_glWaitSync(void *_glfuncs, GLsync sync, GLbitfield flags, GLuint64 timeout) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWaitSync(sync, flags, timeout); -} - -GLenum gl4_1compat_glClientWaitSync(void *_glfuncs, GLsync sync, GLbitfield flags, GLuint64 timeout) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glClientWaitSync(sync, flags, timeout); -} - -void gl4_1compat_glDeleteSync(void *_glfuncs, GLsync sync) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteSync(sync); -} - -GLboolean gl4_1compat_glIsSync(void *_glfuncs, GLsync sync) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsSync(sync); -} - -GLsync gl4_1compat_glFenceSync(void *_glfuncs, GLenum condition, GLbitfield flags) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glFenceSync(condition, flags); -} - -void gl4_1compat_glProvokingVertex(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProvokingVertex(mode); -} - -void gl4_1compat_glDrawElementsInstancedBaseVertex(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLsizei instancecount, GLint basevertex) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElementsInstancedBaseVertex(mode, count, gltype, indices, instancecount, basevertex); -} - -void gl4_1compat_glDrawRangeElementsBaseVertex(void *_glfuncs, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum gltype, const GLvoid* indices, GLint basevertex) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawRangeElementsBaseVertex(mode, start, end, count, gltype, indices, basevertex); -} - -void gl4_1compat_glDrawElementsBaseVertex(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLint basevertex) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElementsBaseVertex(mode, count, gltype, indices, basevertex); -} - -void gl4_1compat_glFramebufferTexture(void *_glfuncs, GLenum target, GLenum attachment, GLuint texture, GLint level) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTexture(target, attachment, texture, level); -} - -void gl4_1compat_glGetBufferParameteri64v(void *_glfuncs, GLenum target, GLenum pname, GLint64* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBufferParameteri64v(target, pname, params); -} - -void gl4_1compat_glGetInteger64i_v(void *_glfuncs, GLenum target, GLuint index, GLint64* data) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetInteger64i_v(target, index, data); -} - -void gl4_1compat_glVertexAttribP4uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP4uiv(index, gltype, normalized, value); -} - -void gl4_1compat_glVertexAttribP4ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP4ui(index, gltype, normalized, value); -} - -void gl4_1compat_glVertexAttribP3uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP3uiv(index, gltype, normalized, value); -} - -void gl4_1compat_glVertexAttribP3ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP3ui(index, gltype, normalized, value); -} - -void gl4_1compat_glVertexAttribP2uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP2uiv(index, gltype, normalized, value); -} - -void gl4_1compat_glVertexAttribP2ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP2ui(index, gltype, normalized, value); -} - -void gl4_1compat_glVertexAttribP1uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP1uiv(index, gltype, normalized, value); -} - -void gl4_1compat_glVertexAttribP1ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP1ui(index, gltype, normalized, value); -} - -void gl4_1compat_glSecondaryColorP3uiv(void *_glfuncs, GLenum gltype, const GLuint* color) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColorP3uiv(gltype, color); -} - -void gl4_1compat_glSecondaryColorP3ui(void *_glfuncs, GLenum gltype, GLuint color) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColorP3ui(gltype, color); -} - -void gl4_1compat_glColorP4uiv(void *_glfuncs, GLenum gltype, const GLuint* color) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorP4uiv(gltype, color); -} - -void gl4_1compat_glColorP4ui(void *_glfuncs, GLenum gltype, GLuint color) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorP4ui(gltype, color); -} - -void gl4_1compat_glColorP3uiv(void *_glfuncs, GLenum gltype, const GLuint* color) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorP3uiv(gltype, color); -} - -void gl4_1compat_glColorP3ui(void *_glfuncs, GLenum gltype, GLuint color) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorP3ui(gltype, color); -} - -void gl4_1compat_glNormalP3uiv(void *_glfuncs, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormalP3uiv(gltype, coords); -} - -void gl4_1compat_glNormalP3ui(void *_glfuncs, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormalP3ui(gltype, coords); -} - -void gl4_1compat_glMultiTexCoordP4uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP4uiv(texture, gltype, coords); -} - -void gl4_1compat_glMultiTexCoordP4ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP4ui(texture, gltype, coords); -} - -void gl4_1compat_glMultiTexCoordP3uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP3uiv(texture, gltype, coords); -} - -void gl4_1compat_glMultiTexCoordP3ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP3ui(texture, gltype, coords); -} - -void gl4_1compat_glMultiTexCoordP2uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP2uiv(texture, gltype, coords); -} - -void gl4_1compat_glMultiTexCoordP2ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP2ui(texture, gltype, coords); -} - -void gl4_1compat_glMultiTexCoordP1uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP1uiv(texture, gltype, coords); -} - -void gl4_1compat_glMultiTexCoordP1ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP1ui(texture, gltype, coords); -} - -void gl4_1compat_glTexCoordP4uiv(void *_glfuncs, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP4uiv(gltype, coords); -} - -void gl4_1compat_glTexCoordP4ui(void *_glfuncs, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP4ui(gltype, coords); -} - -void gl4_1compat_glTexCoordP3uiv(void *_glfuncs, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP3uiv(gltype, coords); -} - -void gl4_1compat_glTexCoordP3ui(void *_glfuncs, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP3ui(gltype, coords); -} - -void gl4_1compat_glTexCoordP2uiv(void *_glfuncs, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP2uiv(gltype, coords); -} - -void gl4_1compat_glTexCoordP2ui(void *_glfuncs, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP2ui(gltype, coords); -} - -void gl4_1compat_glTexCoordP1uiv(void *_glfuncs, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP1uiv(gltype, coords); -} - -void gl4_1compat_glTexCoordP1ui(void *_glfuncs, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP1ui(gltype, coords); -} - -void gl4_1compat_glVertexP4uiv(void *_glfuncs, GLenum gltype, const GLuint* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexP4uiv(gltype, value); -} - -void gl4_1compat_glVertexP4ui(void *_glfuncs, GLenum gltype, GLuint value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexP4ui(gltype, value); -} - -void gl4_1compat_glVertexP3uiv(void *_glfuncs, GLenum gltype, const GLuint* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexP3uiv(gltype, value); -} - -void gl4_1compat_glVertexP3ui(void *_glfuncs, GLenum gltype, GLuint value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexP3ui(gltype, value); -} - -void gl4_1compat_glVertexP2uiv(void *_glfuncs, GLenum gltype, const GLuint* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexP2uiv(gltype, value); -} - -void gl4_1compat_glVertexP2ui(void *_glfuncs, GLenum gltype, GLuint value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexP2ui(gltype, value); -} - -void gl4_1compat_glGetQueryObjectui64v(void *_glfuncs, GLuint id, GLenum pname, GLuint64* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryObjectui64v(id, pname, params); -} - -void gl4_1compat_glGetQueryObjecti64v(void *_glfuncs, GLuint id, GLenum pname, GLint64* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryObjecti64v(id, pname, params); -} - -void gl4_1compat_glQueryCounter(void *_glfuncs, GLuint id, GLenum target) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glQueryCounter(id, target); -} - -void gl4_1compat_glGetSamplerParameterIuiv(void *_glfuncs, GLuint sampler, GLenum pname, GLuint* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetSamplerParameterIuiv(sampler, pname, params); -} - -void gl4_1compat_glGetSamplerParameterfv(void *_glfuncs, GLuint sampler, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetSamplerParameterfv(sampler, pname, params); -} - -void gl4_1compat_glGetSamplerParameterIiv(void *_glfuncs, GLuint sampler, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetSamplerParameterIiv(sampler, pname, params); -} - -void gl4_1compat_glGetSamplerParameteriv(void *_glfuncs, GLuint sampler, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetSamplerParameteriv(sampler, pname, params); -} - -void gl4_1compat_glSamplerParameterIuiv(void *_glfuncs, GLuint sampler, GLenum pname, const GLuint* param) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSamplerParameterIuiv(sampler, pname, param); -} - -void gl4_1compat_glSamplerParameterIiv(void *_glfuncs, GLuint sampler, GLenum pname, const GLint* param) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSamplerParameterIiv(sampler, pname, param); -} - -void gl4_1compat_glSamplerParameterfv(void *_glfuncs, GLuint sampler, GLenum pname, const GLfloat* param) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSamplerParameterfv(sampler, pname, param); -} - -void gl4_1compat_glSamplerParameterf(void *_glfuncs, GLuint sampler, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSamplerParameterf(sampler, pname, param); -} - -void gl4_1compat_glSamplerParameteriv(void *_glfuncs, GLuint sampler, GLenum pname, const GLint* param) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSamplerParameteriv(sampler, pname, param); -} - -void gl4_1compat_glSamplerParameteri(void *_glfuncs, GLuint sampler, GLenum pname, GLint param) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSamplerParameteri(sampler, pname, param); -} - -void gl4_1compat_glBindSampler(void *_glfuncs, GLuint unit, GLuint sampler) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindSampler(unit, sampler); -} - -GLboolean gl4_1compat_glIsSampler(void *_glfuncs, GLuint sampler) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsSampler(sampler); -} - -void gl4_1compat_glDeleteSamplers(void *_glfuncs, GLsizei count, const GLuint* samplers) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteSamplers(count, samplers); -} - -void gl4_1compat_glGenSamplers(void *_glfuncs, GLsizei count, GLuint* samplers) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenSamplers(count, samplers); -} - -GLint gl4_1compat_glGetFragDataIndex(void *_glfuncs, GLuint program, const GLchar* name) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetFragDataIndex(program, name); -} - -void gl4_1compat_glBindFragDataLocationIndexed(void *_glfuncs, GLuint program, GLuint colorNumber, GLuint index, const GLchar* name) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindFragDataLocationIndexed(program, colorNumber, index, name); -} - -void gl4_1compat_glVertexAttribDivisor(void *_glfuncs, GLuint index, GLuint divisor) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribDivisor(index, divisor); -} - -void gl4_1compat_glGetQueryIndexediv(void *_glfuncs, GLenum target, GLuint index, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryIndexediv(target, index, pname, params); -} - -void gl4_1compat_glEndQueryIndexed(void *_glfuncs, GLenum target, GLuint index) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndQueryIndexed(target, index); -} - -void gl4_1compat_glBeginQueryIndexed(void *_glfuncs, GLenum target, GLuint index, GLuint id) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBeginQueryIndexed(target, index, id); -} - -void gl4_1compat_glDrawTransformFeedbackStream(void *_glfuncs, GLenum mode, GLuint id, GLuint stream) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawTransformFeedbackStream(mode, id, stream); -} - -void gl4_1compat_glDrawTransformFeedback(void *_glfuncs, GLenum mode, GLuint id) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawTransformFeedback(mode, id); -} - -void gl4_1compat_glResumeTransformFeedback(void *_glfuncs) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glResumeTransformFeedback(); -} - -void gl4_1compat_glPauseTransformFeedback(void *_glfuncs) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPauseTransformFeedback(); -} - -GLboolean gl4_1compat_glIsTransformFeedback(void *_glfuncs, GLuint id) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsTransformFeedback(id); -} - -void gl4_1compat_glGenTransformFeedbacks(void *_glfuncs, GLsizei n, GLuint* ids) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenTransformFeedbacks(n, ids); -} - -void gl4_1compat_glDeleteTransformFeedbacks(void *_glfuncs, GLsizei n, const GLuint* ids) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteTransformFeedbacks(n, ids); -} - -void gl4_1compat_glBindTransformFeedback(void *_glfuncs, GLenum target, GLuint id) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindTransformFeedback(target, id); -} - -void gl4_1compat_glPatchParameterfv(void *_glfuncs, GLenum pname, const GLfloat* values) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPatchParameterfv(pname, values); -} - -void gl4_1compat_glPatchParameteri(void *_glfuncs, GLenum pname, GLint value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPatchParameteri(pname, value); -} - -void gl4_1compat_glGetProgramStageiv(void *_glfuncs, GLuint program, GLenum shadertype, GLenum pname, GLint* values) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetProgramStageiv(program, shadertype, pname, values); -} - -void gl4_1compat_glGetUniformSubroutineuiv(void *_glfuncs, GLenum shadertype, GLint location, GLuint* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetUniformSubroutineuiv(shadertype, location, params); -} - -void gl4_1compat_glUniformSubroutinesuiv(void *_glfuncs, GLenum shadertype, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformSubroutinesuiv(shadertype, count, value); -} - -void gl4_1compat_glGetActiveSubroutineName(void *_glfuncs, GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei* length, GLchar* name) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveSubroutineName(program, shadertype, index, bufSize, length, name); -} - -void gl4_1compat_glGetActiveSubroutineUniformName(void *_glfuncs, GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei* length, GLchar* name) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveSubroutineUniformName(program, shadertype, index, bufSize, length, name); -} - -void gl4_1compat_glGetActiveSubroutineUniformiv(void *_glfuncs, GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint* values) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveSubroutineUniformiv(program, shadertype, index, pname, values); -} - -GLuint gl4_1compat_glGetSubroutineIndex(void *_glfuncs, GLuint program, GLenum shadertype, const GLchar* name) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetSubroutineIndex(program, shadertype, name); -} - -GLint gl4_1compat_glGetSubroutineUniformLocation(void *_glfuncs, GLuint program, GLenum shadertype, const GLchar* name) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetSubroutineUniformLocation(program, shadertype, name); -} - -void gl4_1compat_glGetUniformdv(void *_glfuncs, GLuint program, GLint location, GLdouble* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetUniformdv(program, location, params); -} - -void gl4_1compat_glUniformMatrix4x3dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4x3dv(location, count, transpose, value); -} - -void gl4_1compat_glUniformMatrix4x2dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4x2dv(location, count, transpose, value); -} - -void gl4_1compat_glUniformMatrix3x4dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3x4dv(location, count, transpose, value); -} - -void gl4_1compat_glUniformMatrix3x2dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3x2dv(location, count, transpose, value); -} - -void gl4_1compat_glUniformMatrix2x4dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2x4dv(location, count, transpose, value); -} - -void gl4_1compat_glUniformMatrix2x3dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2x3dv(location, count, transpose, value); -} - -void gl4_1compat_glUniformMatrix4dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4dv(location, count, transpose, value); -} - -void gl4_1compat_glUniformMatrix3dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3dv(location, count, transpose, value); -} - -void gl4_1compat_glUniformMatrix2dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2dv(location, count, transpose, value); -} - -void gl4_1compat_glUniform4dv(void *_glfuncs, GLint location, GLsizei count, const GLdouble* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4dv(location, count, value); -} - -void gl4_1compat_glUniform3dv(void *_glfuncs, GLint location, GLsizei count, const GLdouble* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3dv(location, count, value); -} - -void gl4_1compat_glUniform2dv(void *_glfuncs, GLint location, GLsizei count, const GLdouble* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2dv(location, count, value); -} - -void gl4_1compat_glUniform1dv(void *_glfuncs, GLint location, GLsizei count, const GLdouble* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1dv(location, count, value); -} - -void gl4_1compat_glUniform4d(void *_glfuncs, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4d(location, v0, v1, v2, v3); -} - -void gl4_1compat_glUniform3d(void *_glfuncs, GLint location, GLdouble v0, GLdouble v1, GLdouble v2) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3d(location, v0, v1, v2); -} - -void gl4_1compat_glUniform2d(void *_glfuncs, GLint location, GLdouble v0, GLdouble v1) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2d(location, v0, v1); -} - -void gl4_1compat_glUniform1d(void *_glfuncs, GLint location, GLdouble v0) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1d(location, v0); -} - -void gl4_1compat_glDrawElementsIndirect(void *_glfuncs, GLenum mode, GLenum gltype, const GLvoid* indirect) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElementsIndirect(mode, gltype, indirect); -} - -void gl4_1compat_glDrawArraysIndirect(void *_glfuncs, GLenum mode, const GLvoid* indirect) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawArraysIndirect(mode, indirect); -} - -void gl4_1compat_glBlendFuncSeparatei(void *_glfuncs, GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendFuncSeparatei(buf, srcRGB, dstRGB, srcAlpha, dstAlpha); -} - -void gl4_1compat_glBlendFunci(void *_glfuncs, GLuint buf, GLenum src, GLenum dst) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendFunci(buf, src, dst); -} - -void gl4_1compat_glBlendEquationSeparatei(void *_glfuncs, GLuint buf, GLenum modeRGB, GLenum modeAlpha) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendEquationSeparatei(buf, modeRGB, modeAlpha); -} - -void gl4_1compat_glBlendEquationi(void *_glfuncs, GLuint buf, GLenum mode) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendEquationi(buf, mode); -} - -void gl4_1compat_glMinSampleShading(void *_glfuncs, GLfloat value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMinSampleShading(value); -} - -void gl4_1compat_glGetDoublei_v(void *_glfuncs, GLenum target, GLuint index, GLdouble* data) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetDoublei_v(target, index, data); -} - -void gl4_1compat_glGetFloati_v(void *_glfuncs, GLenum target, GLuint index, GLfloat* data) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetFloati_v(target, index, data); -} - -void gl4_1compat_glDepthRangeIndexed(void *_glfuncs, GLuint index, GLdouble n, GLdouble f) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthRangeIndexed(index, n, f); -} - -void gl4_1compat_glDepthRangeArrayv(void *_glfuncs, GLuint first, GLsizei count, const GLdouble* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthRangeArrayv(first, count, v); -} - -void gl4_1compat_glScissorIndexedv(void *_glfuncs, GLuint index, const GLint* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScissorIndexedv(index, v); -} - -void gl4_1compat_glScissorIndexed(void *_glfuncs, GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScissorIndexed(index, left, bottom, width, height); -} - -void gl4_1compat_glScissorArrayv(void *_glfuncs, GLuint first, GLsizei count, const GLint* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScissorArrayv(first, count, v); -} - -void gl4_1compat_glViewportIndexedfv(void *_glfuncs, GLuint index, const GLfloat* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glViewportIndexedfv(index, v); -} - -void gl4_1compat_glViewportIndexedf(void *_glfuncs, GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glViewportIndexedf(index, x, y, w, h); -} - -void gl4_1compat_glViewportArrayv(void *_glfuncs, GLuint first, GLsizei count, const GLfloat* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glViewportArrayv(first, count, v); -} - -void gl4_1compat_glGetVertexAttribLdv(void *_glfuncs, GLuint index, GLenum pname, GLdouble* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribLdv(index, pname, params); -} - -void gl4_1compat_glVertexAttribLPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribLPointer(index, size, gltype, stride, pointer); -} - -void gl4_1compat_glVertexAttribL4dv(void *_glfuncs, GLuint index, const GLdouble* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribL4dv(index, v); -} - -void gl4_1compat_glVertexAttribL3dv(void *_glfuncs, GLuint index, const GLdouble* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribL3dv(index, v); -} - -void gl4_1compat_glVertexAttribL2dv(void *_glfuncs, GLuint index, const GLdouble* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribL2dv(index, v); -} - -void gl4_1compat_glVertexAttribL1dv(void *_glfuncs, GLuint index, const GLdouble* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribL1dv(index, v); -} - -void gl4_1compat_glVertexAttribL4d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribL4d(index, x, y, z, w); -} - -void gl4_1compat_glVertexAttribL3d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribL3d(index, x, y, z); -} - -void gl4_1compat_glVertexAttribL2d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribL2d(index, x, y); -} - -void gl4_1compat_glVertexAttribL1d(void *_glfuncs, GLuint index, GLdouble x) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribL1d(index, x); -} - -void gl4_1compat_glGetProgramPipelineInfoLog(void *_glfuncs, GLuint pipeline, GLsizei bufSize, GLsizei* length, GLchar* infoLog) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetProgramPipelineInfoLog(pipeline, bufSize, length, infoLog); -} - -void gl4_1compat_glValidateProgramPipeline(void *_glfuncs, GLuint pipeline) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glValidateProgramPipeline(pipeline); -} - -void gl4_1compat_glProgramUniformMatrix4x3dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix4x3dv(program, location, count, transpose, value); -} - -void gl4_1compat_glProgramUniformMatrix3x4dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix3x4dv(program, location, count, transpose, value); -} - -void gl4_1compat_glProgramUniformMatrix4x2dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix4x2dv(program, location, count, transpose, value); -} - -void gl4_1compat_glProgramUniformMatrix2x4dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix2x4dv(program, location, count, transpose, value); -} - -void gl4_1compat_glProgramUniformMatrix3x2dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix3x2dv(program, location, count, transpose, value); -} - -void gl4_1compat_glProgramUniformMatrix2x3dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix2x3dv(program, location, count, transpose, value); -} - -void gl4_1compat_glProgramUniformMatrix4x3fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix4x3fv(program, location, count, transpose, value); -} - -void gl4_1compat_glProgramUniformMatrix3x4fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix3x4fv(program, location, count, transpose, value); -} - -void gl4_1compat_glProgramUniformMatrix4x2fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix4x2fv(program, location, count, transpose, value); -} - -void gl4_1compat_glProgramUniformMatrix2x4fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix2x4fv(program, location, count, transpose, value); -} - -void gl4_1compat_glProgramUniformMatrix3x2fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix3x2fv(program, location, count, transpose, value); -} - -void gl4_1compat_glProgramUniformMatrix2x3fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix2x3fv(program, location, count, transpose, value); -} - -void gl4_1compat_glProgramUniformMatrix4dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix4dv(program, location, count, transpose, value); -} - -void gl4_1compat_glProgramUniformMatrix3dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix3dv(program, location, count, transpose, value); -} - -void gl4_1compat_glProgramUniformMatrix2dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix2dv(program, location, count, transpose, value); -} - -void gl4_1compat_glProgramUniformMatrix4fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix4fv(program, location, count, transpose, value); -} - -void gl4_1compat_glProgramUniformMatrix3fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix3fv(program, location, count, transpose, value); -} - -void gl4_1compat_glProgramUniformMatrix2fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix2fv(program, location, count, transpose, value); -} - -void gl4_1compat_glProgramUniform4uiv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform4uiv(program, location, count, value); -} - -void gl4_1compat_glProgramUniform4ui(void *_glfuncs, GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform4ui(program, location, v0, v1, v2, v3); -} - -void gl4_1compat_glProgramUniform4dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLdouble* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform4dv(program, location, count, value); -} - -void gl4_1compat_glProgramUniform4d(void *_glfuncs, GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform4d(program, location, v0, v1, v2, v3); -} - -void gl4_1compat_glProgramUniform4fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform4fv(program, location, count, value); -} - -void gl4_1compat_glProgramUniform4f(void *_glfuncs, GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform4f(program, location, v0, v1, v2, v3); -} - -void gl4_1compat_glProgramUniform4iv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform4iv(program, location, count, value); -} - -void gl4_1compat_glProgramUniform4i(void *_glfuncs, GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform4i(program, location, v0, v1, v2, v3); -} - -void gl4_1compat_glProgramUniform3uiv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform3uiv(program, location, count, value); -} - -void gl4_1compat_glProgramUniform3ui(void *_glfuncs, GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform3ui(program, location, v0, v1, v2); -} - -void gl4_1compat_glProgramUniform3dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLdouble* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform3dv(program, location, count, value); -} - -void gl4_1compat_glProgramUniform3d(void *_glfuncs, GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform3d(program, location, v0, v1, v2); -} - -void gl4_1compat_glProgramUniform3fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform3fv(program, location, count, value); -} - -void gl4_1compat_glProgramUniform3f(void *_glfuncs, GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform3f(program, location, v0, v1, v2); -} - -void gl4_1compat_glProgramUniform3iv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform3iv(program, location, count, value); -} - -void gl4_1compat_glProgramUniform3i(void *_glfuncs, GLuint program, GLint location, GLint v0, GLint v1, GLint v2) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform3i(program, location, v0, v1, v2); -} - -void gl4_1compat_glProgramUniform2uiv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform2uiv(program, location, count, value); -} - -void gl4_1compat_glProgramUniform2ui(void *_glfuncs, GLuint program, GLint location, GLuint v0, GLuint v1) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform2ui(program, location, v0, v1); -} - -void gl4_1compat_glProgramUniform2dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLdouble* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform2dv(program, location, count, value); -} - -void gl4_1compat_glProgramUniform2d(void *_glfuncs, GLuint program, GLint location, GLdouble v0, GLdouble v1) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform2d(program, location, v0, v1); -} - -void gl4_1compat_glProgramUniform2fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform2fv(program, location, count, value); -} - -void gl4_1compat_glProgramUniform2f(void *_glfuncs, GLuint program, GLint location, GLfloat v0, GLfloat v1) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform2f(program, location, v0, v1); -} - -void gl4_1compat_glProgramUniform2iv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform2iv(program, location, count, value); -} - -void gl4_1compat_glProgramUniform2i(void *_glfuncs, GLuint program, GLint location, GLint v0, GLint v1) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform2i(program, location, v0, v1); -} - -void gl4_1compat_glProgramUniform1uiv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform1uiv(program, location, count, value); -} - -void gl4_1compat_glProgramUniform1ui(void *_glfuncs, GLuint program, GLint location, GLuint v0) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform1ui(program, location, v0); -} - -void gl4_1compat_glProgramUniform1dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLdouble* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform1dv(program, location, count, value); -} - -void gl4_1compat_glProgramUniform1d(void *_glfuncs, GLuint program, GLint location, GLdouble v0) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform1d(program, location, v0); -} - -void gl4_1compat_glProgramUniform1fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform1fv(program, location, count, value); -} - -void gl4_1compat_glProgramUniform1f(void *_glfuncs, GLuint program, GLint location, GLfloat v0) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform1f(program, location, v0); -} - -void gl4_1compat_glProgramUniform1iv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform1iv(program, location, count, value); -} - -void gl4_1compat_glProgramUniform1i(void *_glfuncs, GLuint program, GLint location, GLint v0) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform1i(program, location, v0); -} - -void gl4_1compat_glGetProgramPipelineiv(void *_glfuncs, GLuint pipeline, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetProgramPipelineiv(pipeline, pname, params); -} - -GLboolean gl4_1compat_glIsProgramPipeline(void *_glfuncs, GLuint pipeline) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsProgramPipeline(pipeline); -} - -void gl4_1compat_glGenProgramPipelines(void *_glfuncs, GLsizei n, GLuint* pipelines) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenProgramPipelines(n, pipelines); -} - -void gl4_1compat_glDeleteProgramPipelines(void *_glfuncs, GLsizei n, const GLuint* pipelines) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteProgramPipelines(n, pipelines); -} - -void gl4_1compat_glBindProgramPipeline(void *_glfuncs, GLuint pipeline) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindProgramPipeline(pipeline); -} - -void gl4_1compat_glActiveShaderProgram(void *_glfuncs, GLuint pipeline, GLuint program) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glActiveShaderProgram(pipeline, program); -} - -void gl4_1compat_glUseProgramStages(void *_glfuncs, GLuint pipeline, GLbitfield stages, GLuint program) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUseProgramStages(pipeline, stages, program); -} - -void gl4_1compat_glProgramParameteri(void *_glfuncs, GLuint program, GLenum pname, GLint value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramParameteri(program, pname, value); -} - -void gl4_1compat_glProgramBinary(void *_glfuncs, GLuint program, GLenum binaryFormat, const GLvoid* binary, GLsizei length) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramBinary(program, binaryFormat, binary, length); -} - -void gl4_1compat_glGetProgramBinary(void *_glfuncs, GLuint program, GLsizei bufSize, GLsizei* length, GLenum* binaryFormat, GLvoid* binary) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetProgramBinary(program, bufSize, length, binaryFormat, binary); -} - -void gl4_1compat_glClearDepthf(void *_glfuncs, GLfloat dd) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearDepthf(dd); -} - -void gl4_1compat_glDepthRangef(void *_glfuncs, GLfloat n, GLfloat f) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthRangef(n, f); -} - -void gl4_1compat_glGetShaderPrecisionFormat(void *_glfuncs, GLenum shadertype, GLenum precisionType, GLint* range_, GLint* precision) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetShaderPrecisionFormat(shadertype, precisionType, range_, precision); -} - -void gl4_1compat_glShaderBinary(void *_glfuncs, GLsizei count, const GLuint* shaders, GLenum binaryFormat, const GLvoid* binary, GLsizei length) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glShaderBinary(count, shaders, binaryFormat, binary, length); -} - -void gl4_1compat_glReleaseShaderCompiler(void *_glfuncs) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glReleaseShaderCompiler(); -} - -void gl4_1compat_glTranslatef(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTranslatef(x, y, z); -} - -void gl4_1compat_glTranslated(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTranslated(x, y, z); -} - -void gl4_1compat_glScalef(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScalef(x, y, z); -} - -void gl4_1compat_glScaled(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScaled(x, y, z); -} - -void gl4_1compat_glRotatef(void *_glfuncs, GLfloat angle, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRotatef(angle, x, y, z); -} - -void gl4_1compat_glRotated(void *_glfuncs, GLdouble angle, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRotated(angle, x, y, z); -} - -void gl4_1compat_glPushMatrix(void *_glfuncs) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPushMatrix(); -} - -void gl4_1compat_glPopMatrix(void *_glfuncs) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPopMatrix(); -} - -void gl4_1compat_glOrtho(void *_glfuncs, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glOrtho(left, right, bottom, top, zNear, zFar); -} - -void gl4_1compat_glMultMatrixd(void *_glfuncs, const GLdouble* m) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultMatrixd(m); -} - -void gl4_1compat_glMultMatrixf(void *_glfuncs, const GLfloat* m) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultMatrixf(m); -} - -void gl4_1compat_glMatrixMode(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMatrixMode(mode); -} - -void gl4_1compat_glLoadMatrixd(void *_glfuncs, const GLdouble* m) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadMatrixd(m); -} - -void gl4_1compat_glLoadMatrixf(void *_glfuncs, const GLfloat* m) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadMatrixf(m); -} - -void gl4_1compat_glLoadIdentity(void *_glfuncs) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadIdentity(); -} - -void gl4_1compat_glFrustum(void *_glfuncs, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFrustum(left, right, bottom, top, zNear, zFar); -} - -GLboolean gl4_1compat_glIsList(void *_glfuncs, GLuint list) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsList(list); -} - -void gl4_1compat_glGetTexGeniv(void *_glfuncs, GLenum coord, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexGeniv(coord, pname, params); -} - -void gl4_1compat_glGetTexGenfv(void *_glfuncs, GLenum coord, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexGenfv(coord, pname, params); -} - -void gl4_1compat_glGetTexGendv(void *_glfuncs, GLenum coord, GLenum pname, GLdouble* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexGendv(coord, pname, params); -} - -void gl4_1compat_glGetTexEnviv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexEnviv(target, pname, params); -} - -void gl4_1compat_glGetTexEnvfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexEnvfv(target, pname, params); -} - -void gl4_1compat_glGetPolygonStipple(void *_glfuncs, GLubyte* mask) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetPolygonStipple(mask); -} - -void gl4_1compat_glGetPixelMapusv(void *_glfuncs, GLenum glmap, GLushort* values) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetPixelMapusv(glmap, values); -} - -void gl4_1compat_glGetPixelMapuiv(void *_glfuncs, GLenum glmap, GLuint* values) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetPixelMapuiv(glmap, values); -} - -void gl4_1compat_glGetPixelMapfv(void *_glfuncs, GLenum glmap, GLfloat* values) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetPixelMapfv(glmap, values); -} - -void gl4_1compat_glGetMaterialiv(void *_glfuncs, GLenum face, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMaterialiv(face, pname, params); -} - -void gl4_1compat_glGetMaterialfv(void *_glfuncs, GLenum face, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMaterialfv(face, pname, params); -} - -void gl4_1compat_glGetMapiv(void *_glfuncs, GLenum target, GLenum query, GLint* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMapiv(target, query, v); -} - -void gl4_1compat_glGetMapfv(void *_glfuncs, GLenum target, GLenum query, GLfloat* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMapfv(target, query, v); -} - -void gl4_1compat_glGetMapdv(void *_glfuncs, GLenum target, GLenum query, GLdouble* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMapdv(target, query, v); -} - -void gl4_1compat_glGetLightiv(void *_glfuncs, GLenum light, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetLightiv(light, pname, params); -} - -void gl4_1compat_glGetLightfv(void *_glfuncs, GLenum light, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetLightfv(light, pname, params); -} - -void gl4_1compat_glGetClipPlane(void *_glfuncs, GLenum plane, GLdouble* equation) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetClipPlane(plane, equation); -} - -void gl4_1compat_glDrawPixels(void *_glfuncs, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawPixels(width, height, format, gltype, pixels); -} - -void gl4_1compat_glCopyPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum gltype) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyPixels(x, y, width, height, gltype); -} - -void gl4_1compat_glPixelMapusv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLushort* values) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelMapusv(glmap, mapsize, values); -} - -void gl4_1compat_glPixelMapuiv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLuint* values) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelMapuiv(glmap, mapsize, values); -} - -void gl4_1compat_glPixelMapfv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLfloat* values) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelMapfv(glmap, mapsize, values); -} - -void gl4_1compat_glPixelTransferi(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelTransferi(pname, param); -} - -void gl4_1compat_glPixelTransferf(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelTransferf(pname, param); -} - -void gl4_1compat_glPixelZoom(void *_glfuncs, GLfloat xfactor, GLfloat yfactor) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelZoom(xfactor, yfactor); -} - -void gl4_1compat_glAlphaFunc(void *_glfuncs, GLenum glfunc, GLfloat ref) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glAlphaFunc(glfunc, ref); -} - -void gl4_1compat_glEvalPoint2(void *_glfuncs, GLint i, GLint j) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalPoint2(i, j); -} - -void gl4_1compat_glEvalMesh2(void *_glfuncs, GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalMesh2(mode, i1, i2, j1, j2); -} - -void gl4_1compat_glEvalPoint1(void *_glfuncs, GLint i) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalPoint1(i); -} - -void gl4_1compat_glEvalMesh1(void *_glfuncs, GLenum mode, GLint i1, GLint i2) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalMesh1(mode, i1, i2); -} - -void gl4_1compat_glEvalCoord2fv(void *_glfuncs, const GLfloat* u) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord2fv(u); -} - -void gl4_1compat_glEvalCoord2f(void *_glfuncs, GLfloat u, GLfloat v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord2f(u, v); -} - -void gl4_1compat_glEvalCoord2dv(void *_glfuncs, const GLdouble* u) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord2dv(u); -} - -void gl4_1compat_glEvalCoord2d(void *_glfuncs, GLdouble u, GLdouble v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord2d(u, v); -} - -void gl4_1compat_glEvalCoord1fv(void *_glfuncs, const GLfloat* u) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord1fv(u); -} - -void gl4_1compat_glEvalCoord1f(void *_glfuncs, GLfloat u) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord1f(u); -} - -void gl4_1compat_glEvalCoord1dv(void *_glfuncs, const GLdouble* u) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord1dv(u); -} - -void gl4_1compat_glEvalCoord1d(void *_glfuncs, GLdouble u) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord1d(u); -} - -void gl4_1compat_glMapGrid2f(void *_glfuncs, GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMapGrid2f(un, u1, u2, vn, v1, v2); -} - -void gl4_1compat_glMapGrid2d(void *_glfuncs, GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMapGrid2d(un, u1, u2, vn, v1, v2); -} - -void gl4_1compat_glMapGrid1f(void *_glfuncs, GLint un, GLfloat u1, GLfloat u2) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMapGrid1f(un, u1, u2); -} - -void gl4_1compat_glMapGrid1d(void *_glfuncs, GLint un, GLdouble u1, GLdouble u2) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMapGrid1d(un, u1, u2); -} - -void gl4_1compat_glMap2f(void *_glfuncs, GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat* points) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMap2f(target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points); -} - -void gl4_1compat_glMap2d(void *_glfuncs, GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble* points) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMap2d(target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points); -} - -void gl4_1compat_glMap1f(void *_glfuncs, GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat* points) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMap1f(target, u1, u2, stride, order, points); -} - -void gl4_1compat_glMap1d(void *_glfuncs, GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble* points) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMap1d(target, u1, u2, stride, order, points); -} - -void gl4_1compat_glPushAttrib(void *_glfuncs, GLbitfield mask) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPushAttrib(mask); -} - -void gl4_1compat_glPopAttrib(void *_glfuncs) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPopAttrib(); -} - -void gl4_1compat_glAccum(void *_glfuncs, GLenum op, GLfloat value) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glAccum(op, value); -} - -void gl4_1compat_glIndexMask(void *_glfuncs, GLuint mask) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexMask(mask); -} - -void gl4_1compat_glClearIndex(void *_glfuncs, GLfloat c) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearIndex(c); -} - -void gl4_1compat_glClearAccum(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearAccum(red, green, blue, alpha); -} - -void gl4_1compat_glPushName(void *_glfuncs, GLuint name) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPushName(name); -} - -void gl4_1compat_glPopName(void *_glfuncs) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPopName(); -} - -void gl4_1compat_glPassThrough(void *_glfuncs, GLfloat token) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPassThrough(token); -} - -void gl4_1compat_glLoadName(void *_glfuncs, GLuint name) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadName(name); -} - -void gl4_1compat_glInitNames(void *_glfuncs) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glInitNames(); -} - -GLint gl4_1compat_glRenderMode(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glRenderMode(mode); -} - -void gl4_1compat_glSelectBuffer(void *_glfuncs, GLsizei size, GLuint* buffer) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSelectBuffer(size, buffer); -} - -void gl4_1compat_glFeedbackBuffer(void *_glfuncs, GLsizei size, GLenum gltype, GLfloat* buffer) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFeedbackBuffer(size, gltype, buffer); -} - -void gl4_1compat_glTexGeniv(void *_glfuncs, GLenum coord, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGeniv(coord, pname, params); -} - -void gl4_1compat_glTexGeni(void *_glfuncs, GLenum coord, GLenum pname, GLint param) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGeni(coord, pname, param); -} - -void gl4_1compat_glTexGenfv(void *_glfuncs, GLenum coord, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGenfv(coord, pname, params); -} - -void gl4_1compat_glTexGenf(void *_glfuncs, GLenum coord, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGenf(coord, pname, param); -} - -void gl4_1compat_glTexGendv(void *_glfuncs, GLenum coord, GLenum pname, const GLdouble* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGendv(coord, pname, params); -} - -void gl4_1compat_glTexGend(void *_glfuncs, GLenum coord, GLenum pname, GLdouble param) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGend(coord, pname, param); -} - -void gl4_1compat_glTexEnviv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexEnviv(target, pname, params); -} - -void gl4_1compat_glTexEnvi(void *_glfuncs, GLenum target, GLenum pname, GLint param) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexEnvi(target, pname, param); -} - -void gl4_1compat_glTexEnvfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexEnvfv(target, pname, params); -} - -void gl4_1compat_glTexEnvf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexEnvf(target, pname, param); -} - -void gl4_1compat_glShadeModel(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glShadeModel(mode); -} - -void gl4_1compat_glPolygonStipple(void *_glfuncs, const GLubyte* mask) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPolygonStipple(mask); -} - -void gl4_1compat_glMaterialiv(void *_glfuncs, GLenum face, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMaterialiv(face, pname, params); -} - -void gl4_1compat_glMateriali(void *_glfuncs, GLenum face, GLenum pname, GLint param) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMateriali(face, pname, param); -} - -void gl4_1compat_glMaterialfv(void *_glfuncs, GLenum face, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMaterialfv(face, pname, params); -} - -void gl4_1compat_glMaterialf(void *_glfuncs, GLenum face, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMaterialf(face, pname, param); -} - -void gl4_1compat_glLineStipple(void *_glfuncs, GLint factor, GLushort pattern) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLineStipple(factor, pattern); -} - -void gl4_1compat_glLightModeliv(void *_glfuncs, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightModeliv(pname, params); -} - -void gl4_1compat_glLightModeli(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightModeli(pname, param); -} - -void gl4_1compat_glLightModelfv(void *_glfuncs, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightModelfv(pname, params); -} - -void gl4_1compat_glLightModelf(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightModelf(pname, param); -} - -void gl4_1compat_glLightiv(void *_glfuncs, GLenum light, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightiv(light, pname, params); -} - -void gl4_1compat_glLighti(void *_glfuncs, GLenum light, GLenum pname, GLint param) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLighti(light, pname, param); -} - -void gl4_1compat_glLightfv(void *_glfuncs, GLenum light, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightfv(light, pname, params); -} - -void gl4_1compat_glLightf(void *_glfuncs, GLenum light, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightf(light, pname, param); -} - -void gl4_1compat_glFogiv(void *_glfuncs, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogiv(pname, params); -} - -void gl4_1compat_glFogi(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogi(pname, param); -} - -void gl4_1compat_glFogfv(void *_glfuncs, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogfv(pname, params); -} - -void gl4_1compat_glFogf(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogf(pname, param); -} - -void gl4_1compat_glColorMaterial(void *_glfuncs, GLenum face, GLenum mode) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorMaterial(face, mode); -} - -void gl4_1compat_glClipPlane(void *_glfuncs, GLenum plane, const GLdouble* equation) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClipPlane(plane, equation); -} - -void gl4_1compat_glVertex4sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4sv(v); -} - -void gl4_1compat_glVertex4s(void *_glfuncs, GLshort x, GLshort y, GLshort z, GLshort w) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4s(x, y, z, w); -} - -void gl4_1compat_glVertex4iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4iv(v); -} - -void gl4_1compat_glVertex4i(void *_glfuncs, GLint x, GLint y, GLint z, GLint w) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4i(x, y, z, w); -} - -void gl4_1compat_glVertex4fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4fv(v); -} - -void gl4_1compat_glVertex4f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z, GLfloat w) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4f(x, y, z, w); -} - -void gl4_1compat_glVertex4dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4dv(v); -} - -void gl4_1compat_glVertex4d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z, GLdouble w) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4d(x, y, z, w); -} - -void gl4_1compat_glVertex3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3sv(v); -} - -void gl4_1compat_glVertex3s(void *_glfuncs, GLshort x, GLshort y, GLshort z) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3s(x, y, z); -} - -void gl4_1compat_glVertex3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3iv(v); -} - -void gl4_1compat_glVertex3i(void *_glfuncs, GLint x, GLint y, GLint z) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3i(x, y, z); -} - -void gl4_1compat_glVertex3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3fv(v); -} - -void gl4_1compat_glVertex3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3f(x, y, z); -} - -void gl4_1compat_glVertex3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3dv(v); -} - -void gl4_1compat_glVertex3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3d(x, y, z); -} - -void gl4_1compat_glVertex2sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2sv(v); -} - -void gl4_1compat_glVertex2s(void *_glfuncs, GLshort x, GLshort y) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2s(x, y); -} - -void gl4_1compat_glVertex2iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2iv(v); -} - -void gl4_1compat_glVertex2i(void *_glfuncs, GLint x, GLint y) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2i(x, y); -} - -void gl4_1compat_glVertex2fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2fv(v); -} - -void gl4_1compat_glVertex2f(void *_glfuncs, GLfloat x, GLfloat y) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2f(x, y); -} - -void gl4_1compat_glVertex2dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2dv(v); -} - -void gl4_1compat_glVertex2d(void *_glfuncs, GLdouble x, GLdouble y) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2d(x, y); -} - -void gl4_1compat_glTexCoord4sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4sv(v); -} - -void gl4_1compat_glTexCoord4s(void *_glfuncs, GLshort s, GLshort t, GLshort r, GLshort q) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4s(s, t, r, q); -} - -void gl4_1compat_glTexCoord4iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4iv(v); -} - -void gl4_1compat_glTexCoord4i(void *_glfuncs, GLint s, GLint t, GLint r, GLint q) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4i(s, t, r, q); -} - -void gl4_1compat_glTexCoord4fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4fv(v); -} - -void gl4_1compat_glTexCoord4f(void *_glfuncs, GLfloat s, GLfloat t, GLfloat r, GLfloat q) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4f(s, t, r, q); -} - -void gl4_1compat_glTexCoord4dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4dv(v); -} - -void gl4_1compat_glTexCoord4d(void *_glfuncs, GLdouble s, GLdouble t, GLdouble r, GLdouble q) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4d(s, t, r, q); -} - -void gl4_1compat_glTexCoord3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3sv(v); -} - -void gl4_1compat_glTexCoord3s(void *_glfuncs, GLshort s, GLshort t, GLshort r) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3s(s, t, r); -} - -void gl4_1compat_glTexCoord3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3iv(v); -} - -void gl4_1compat_glTexCoord3i(void *_glfuncs, GLint s, GLint t, GLint r) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3i(s, t, r); -} - -void gl4_1compat_glTexCoord3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3fv(v); -} - -void gl4_1compat_glTexCoord3f(void *_glfuncs, GLfloat s, GLfloat t, GLfloat r) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3f(s, t, r); -} - -void gl4_1compat_glTexCoord3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3dv(v); -} - -void gl4_1compat_glTexCoord3d(void *_glfuncs, GLdouble s, GLdouble t, GLdouble r) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3d(s, t, r); -} - -void gl4_1compat_glTexCoord2sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2sv(v); -} - -void gl4_1compat_glTexCoord2s(void *_glfuncs, GLshort s, GLshort t) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2s(s, t); -} - -void gl4_1compat_glTexCoord2iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2iv(v); -} - -void gl4_1compat_glTexCoord2i(void *_glfuncs, GLint s, GLint t) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2i(s, t); -} - -void gl4_1compat_glTexCoord2fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2fv(v); -} - -void gl4_1compat_glTexCoord2f(void *_glfuncs, GLfloat s, GLfloat t) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2f(s, t); -} - -void gl4_1compat_glTexCoord2dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2dv(v); -} - -void gl4_1compat_glTexCoord2d(void *_glfuncs, GLdouble s, GLdouble t) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2d(s, t); -} - -void gl4_1compat_glTexCoord1sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1sv(v); -} - -void gl4_1compat_glTexCoord1s(void *_glfuncs, GLshort s) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1s(s); -} - -void gl4_1compat_glTexCoord1iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1iv(v); -} - -void gl4_1compat_glTexCoord1i(void *_glfuncs, GLint s) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1i(s); -} - -void gl4_1compat_glTexCoord1fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1fv(v); -} - -void gl4_1compat_glTexCoord1f(void *_glfuncs, GLfloat s) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1f(s); -} - -void gl4_1compat_glTexCoord1dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1dv(v); -} - -void gl4_1compat_glTexCoord1d(void *_glfuncs, GLdouble s) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1d(s); -} - -void gl4_1compat_glRectsv(void *_glfuncs, const GLshort* v1, const GLshort* v2) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectsv(v1, v2); -} - -void gl4_1compat_glRects(void *_glfuncs, GLshort x1, GLshort y1, GLshort x2, GLshort y2) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRects(x1, y1, x2, y2); -} - -void gl4_1compat_glRectiv(void *_glfuncs, const GLint* v1, const GLint* v2) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectiv(v1, v2); -} - -void gl4_1compat_glRecti(void *_glfuncs, GLint x1, GLint y1, GLint x2, GLint y2) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRecti(x1, y1, x2, y2); -} - -void gl4_1compat_glRectfv(void *_glfuncs, const GLfloat* v1, const GLfloat* v2) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectfv(v1, v2); -} - -void gl4_1compat_glRectf(void *_glfuncs, GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectf(x1, y1, x2, y2); -} - -void gl4_1compat_glRectdv(void *_glfuncs, const GLdouble* v1, const GLdouble* v2) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectdv(v1, v2); -} - -void gl4_1compat_glRectd(void *_glfuncs, GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectd(x1, y1, x2, y2); -} - -void gl4_1compat_glRasterPos4sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4sv(v); -} - -void gl4_1compat_glRasterPos4s(void *_glfuncs, GLshort x, GLshort y, GLshort z, GLshort w) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4s(x, y, z, w); -} - -void gl4_1compat_glRasterPos4iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4iv(v); -} - -void gl4_1compat_glRasterPos4i(void *_glfuncs, GLint x, GLint y, GLint z, GLint w) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4i(x, y, z, w); -} - -void gl4_1compat_glRasterPos4fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4fv(v); -} - -void gl4_1compat_glRasterPos4f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z, GLfloat w) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4f(x, y, z, w); -} - -void gl4_1compat_glRasterPos4dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4dv(v); -} - -void gl4_1compat_glRasterPos4d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z, GLdouble w) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4d(x, y, z, w); -} - -void gl4_1compat_glRasterPos3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3sv(v); -} - -void gl4_1compat_glRasterPos3s(void *_glfuncs, GLshort x, GLshort y, GLshort z) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3s(x, y, z); -} - -void gl4_1compat_glRasterPos3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3iv(v); -} - -void gl4_1compat_glRasterPos3i(void *_glfuncs, GLint x, GLint y, GLint z) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3i(x, y, z); -} - -void gl4_1compat_glRasterPos3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3fv(v); -} - -void gl4_1compat_glRasterPos3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3f(x, y, z); -} - -void gl4_1compat_glRasterPos3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3dv(v); -} - -void gl4_1compat_glRasterPos3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3d(x, y, z); -} - -void gl4_1compat_glRasterPos2sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2sv(v); -} - -void gl4_1compat_glRasterPos2s(void *_glfuncs, GLshort x, GLshort y) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2s(x, y); -} - -void gl4_1compat_glRasterPos2iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2iv(v); -} - -void gl4_1compat_glRasterPos2i(void *_glfuncs, GLint x, GLint y) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2i(x, y); -} - -void gl4_1compat_glRasterPos2fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2fv(v); -} - -void gl4_1compat_glRasterPos2f(void *_glfuncs, GLfloat x, GLfloat y) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2f(x, y); -} - -void gl4_1compat_glRasterPos2dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2dv(v); -} - -void gl4_1compat_glRasterPos2d(void *_glfuncs, GLdouble x, GLdouble y) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2d(x, y); -} - -void gl4_1compat_glNormal3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3sv(v); -} - -void gl4_1compat_glNormal3s(void *_glfuncs, GLshort nx, GLshort ny, GLshort nz) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3s(nx, ny, nz); -} - -void gl4_1compat_glNormal3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3iv(v); -} - -void gl4_1compat_glNormal3i(void *_glfuncs, GLint nx, GLint ny, GLint nz) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3i(nx, ny, nz); -} - -void gl4_1compat_glNormal3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3fv(v); -} - -void gl4_1compat_glNormal3f(void *_glfuncs, GLfloat nx, GLfloat ny, GLfloat nz) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3f(nx, ny, nz); -} - -void gl4_1compat_glNormal3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3dv(v); -} - -void gl4_1compat_glNormal3d(void *_glfuncs, GLdouble nx, GLdouble ny, GLdouble nz) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3d(nx, ny, nz); -} - -void gl4_1compat_glNormal3bv(void *_glfuncs, const GLbyte* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3bv(v); -} - -void gl4_1compat_glNormal3b(void *_glfuncs, GLbyte nx, GLbyte ny, GLbyte nz) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3b(nx, ny, nz); -} - -void gl4_1compat_glIndexsv(void *_glfuncs, const GLshort* c) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexsv(c); -} - -void gl4_1compat_glIndexs(void *_glfuncs, GLshort c) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexs(c); -} - -void gl4_1compat_glIndexiv(void *_glfuncs, const GLint* c) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexiv(c); -} - -void gl4_1compat_glIndexi(void *_glfuncs, GLint c) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexi(c); -} - -void gl4_1compat_glIndexfv(void *_glfuncs, const GLfloat* c) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexfv(c); -} - -void gl4_1compat_glIndexf(void *_glfuncs, GLfloat c) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexf(c); -} - -void gl4_1compat_glIndexdv(void *_glfuncs, const GLdouble* c) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexdv(c); -} - -void gl4_1compat_glIndexd(void *_glfuncs, GLdouble c) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexd(c); -} - -void gl4_1compat_glEnd(void *_glfuncs) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnd(); -} - -void gl4_1compat_glEdgeFlagv(void *_glfuncs, const GLboolean* flag) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEdgeFlagv(flag); -} - -void gl4_1compat_glEdgeFlag(void *_glfuncs, GLboolean flag) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEdgeFlag(flag); -} - -void gl4_1compat_glColor4usv(void *_glfuncs, const GLushort* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4usv(v); -} - -void gl4_1compat_glColor4us(void *_glfuncs, GLushort red, GLushort green, GLushort blue, GLushort alpha) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4us(red, green, blue, alpha); -} - -void gl4_1compat_glColor4uiv(void *_glfuncs, const GLuint* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4uiv(v); -} - -void gl4_1compat_glColor4ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue, GLuint alpha) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4ui(red, green, blue, alpha); -} - -void gl4_1compat_glColor4ubv(void *_glfuncs, const GLubyte* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4ubv(v); -} - -void gl4_1compat_glColor4ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4ub(red, green, blue, alpha); -} - -void gl4_1compat_glColor4sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4sv(v); -} - -void gl4_1compat_glColor4s(void *_glfuncs, GLshort red, GLshort green, GLshort blue, GLshort alpha) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4s(red, green, blue, alpha); -} - -void gl4_1compat_glColor4iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4iv(v); -} - -void gl4_1compat_glColor4i(void *_glfuncs, GLint red, GLint green, GLint blue, GLint alpha) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4i(red, green, blue, alpha); -} - -void gl4_1compat_glColor4fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4fv(v); -} - -void gl4_1compat_glColor4f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4f(red, green, blue, alpha); -} - -void gl4_1compat_glColor4dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4dv(v); -} - -void gl4_1compat_glColor4d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4d(red, green, blue, alpha); -} - -void gl4_1compat_glColor4bv(void *_glfuncs, const GLbyte* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4bv(v); -} - -void gl4_1compat_glColor4b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4b(red, green, blue, alpha); -} - -void gl4_1compat_glColor3usv(void *_glfuncs, const GLushort* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3usv(v); -} - -void gl4_1compat_glColor3us(void *_glfuncs, GLushort red, GLushort green, GLushort blue) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3us(red, green, blue); -} - -void gl4_1compat_glColor3uiv(void *_glfuncs, const GLuint* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3uiv(v); -} - -void gl4_1compat_glColor3ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3ui(red, green, blue); -} - -void gl4_1compat_glColor3ubv(void *_glfuncs, const GLubyte* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3ubv(v); -} - -void gl4_1compat_glColor3ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3ub(red, green, blue); -} - -void gl4_1compat_glColor3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3sv(v); -} - -void gl4_1compat_glColor3s(void *_glfuncs, GLshort red, GLshort green, GLshort blue) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3s(red, green, blue); -} - -void gl4_1compat_glColor3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3iv(v); -} - -void gl4_1compat_glColor3i(void *_glfuncs, GLint red, GLint green, GLint blue) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3i(red, green, blue); -} - -void gl4_1compat_glColor3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3fv(v); -} - -void gl4_1compat_glColor3f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3f(red, green, blue); -} - -void gl4_1compat_glColor3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3dv(v); -} - -void gl4_1compat_glColor3d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3d(red, green, blue); -} - -void gl4_1compat_glColor3bv(void *_glfuncs, const GLbyte* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3bv(v); -} - -void gl4_1compat_glColor3b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3b(red, green, blue); -} - -void gl4_1compat_glBitmap(void *_glfuncs, GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte* bitmap) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBitmap(width, height, xorig, yorig, xmove, ymove, bitmap); -} - -void gl4_1compat_glBegin(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBegin(mode); -} - -void gl4_1compat_glListBase(void *_glfuncs, GLuint base) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glListBase(base); -} - -GLuint gl4_1compat_glGenLists(void *_glfuncs, GLsizei range_) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGenLists(range_); -} - -void gl4_1compat_glDeleteLists(void *_glfuncs, GLuint list, GLsizei range_) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteLists(list, range_); -} - -void gl4_1compat_glCallLists(void *_glfuncs, GLsizei n, GLenum gltype, const GLvoid* lists) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCallLists(n, gltype, lists); -} - -void gl4_1compat_glCallList(void *_glfuncs, GLuint list) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCallList(list); -} - -void gl4_1compat_glEndList(void *_glfuncs) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndList(); -} - -void gl4_1compat_glNewList(void *_glfuncs, GLuint list, GLenum mode) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNewList(list, mode); -} - -void gl4_1compat_glPushClientAttrib(void *_glfuncs, GLbitfield mask) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPushClientAttrib(mask); -} - -void gl4_1compat_glPopClientAttrib(void *_glfuncs) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPopClientAttrib(); -} - -void gl4_1compat_glPrioritizeTextures(void *_glfuncs, GLsizei n, const GLuint* textures, const GLfloat* priorities) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPrioritizeTextures(n, textures, priorities); -} - -GLboolean gl4_1compat_glAreTexturesResident(void *_glfuncs, GLsizei n, const GLuint* textures, GLboolean* residences) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glAreTexturesResident(n, textures, residences); -} - -void gl4_1compat_glVertexPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexPointer(size, gltype, stride, pointer); -} - -void gl4_1compat_glTexCoordPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordPointer(size, gltype, stride, pointer); -} - -void gl4_1compat_glNormalPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormalPointer(gltype, stride, pointer); -} - -void gl4_1compat_glInterleavedArrays(void *_glfuncs, GLenum format, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glInterleavedArrays(format, stride, pointer); -} - -void gl4_1compat_glIndexPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexPointer(gltype, stride, pointer); -} - -void gl4_1compat_glEnableClientState(void *_glfuncs, GLenum array) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnableClientState(array); -} - -void gl4_1compat_glEdgeFlagPointer(void *_glfuncs, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEdgeFlagPointer(stride, pointer); -} - -void gl4_1compat_glDisableClientState(void *_glfuncs, GLenum array) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDisableClientState(array); -} - -void gl4_1compat_glColorPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorPointer(size, gltype, stride, pointer); -} - -void gl4_1compat_glArrayElement(void *_glfuncs, GLint i) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glArrayElement(i); -} - -void gl4_1compat_glResetMinmax(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glResetMinmax(target); -} - -void gl4_1compat_glResetHistogram(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glResetHistogram(target); -} - -void gl4_1compat_glMinmax(void *_glfuncs, GLenum target, GLenum internalFormat, GLboolean sink) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMinmax(target, internalFormat, sink); -} - -void gl4_1compat_glHistogram(void *_glfuncs, GLenum target, GLsizei width, GLenum internalFormat, GLboolean sink) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glHistogram(target, width, internalFormat, sink); -} - -void gl4_1compat_glGetMinmaxParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMinmaxParameteriv(target, pname, params); -} - -void gl4_1compat_glGetMinmaxParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMinmaxParameterfv(target, pname, params); -} - -void gl4_1compat_glGetMinmax(void *_glfuncs, GLenum target, GLboolean reset, GLenum format, GLenum gltype, GLvoid* values) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMinmax(target, reset, format, gltype, values); -} - -void gl4_1compat_glGetHistogramParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetHistogramParameteriv(target, pname, params); -} - -void gl4_1compat_glGetHistogramParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetHistogramParameterfv(target, pname, params); -} - -void gl4_1compat_glGetHistogram(void *_glfuncs, GLenum target, GLboolean reset, GLenum format, GLenum gltype, GLvoid* values) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetHistogram(target, reset, format, gltype, values); -} - -void gl4_1compat_glSeparableFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* row, const GLvoid* column) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSeparableFilter2D(target, internalFormat, width, height, format, gltype, row, column); -} - -void gl4_1compat_glGetSeparableFilter(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* row, GLvoid* column, GLvoid* span) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetSeparableFilter(target, format, gltype, row, column, span); -} - -void gl4_1compat_glGetConvolutionParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetConvolutionParameteriv(target, pname, params); -} - -void gl4_1compat_glGetConvolutionParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetConvolutionParameterfv(target, pname, params); -} - -void gl4_1compat_glGetConvolutionFilter(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* image) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetConvolutionFilter(target, format, gltype, image); -} - -void gl4_1compat_glCopyConvolutionFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyConvolutionFilter2D(target, internalFormat, x, y, width, height); -} - -void gl4_1compat_glCopyConvolutionFilter1D(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyConvolutionFilter1D(target, internalFormat, x, y, width); -} - -void gl4_1compat_glConvolutionParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionParameteriv(target, pname, params); -} - -void gl4_1compat_glConvolutionParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionParameteri(target, pname, params); -} - -void gl4_1compat_glConvolutionParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionParameterfv(target, pname, params); -} - -void gl4_1compat_glConvolutionParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionParameterf(target, pname, params); -} - -void gl4_1compat_glConvolutionFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* image) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionFilter2D(target, internalFormat, width, height, format, gltype, image); -} - -void gl4_1compat_glConvolutionFilter1D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum gltype, const GLvoid* image) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionFilter1D(target, internalFormat, width, format, gltype, image); -} - -void gl4_1compat_glCopyColorSubTable(void *_glfuncs, GLenum target, GLsizei start, GLint x, GLint y, GLsizei width) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyColorSubTable(target, start, x, y, width); -} - -void gl4_1compat_glColorSubTable(void *_glfuncs, GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum gltype, const GLvoid* data) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorSubTable(target, start, count, format, gltype, data); -} - -void gl4_1compat_glGetColorTableParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetColorTableParameteriv(target, pname, params); -} - -void gl4_1compat_glGetColorTableParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetColorTableParameterfv(target, pname, params); -} - -void gl4_1compat_glGetColorTable(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* table) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetColorTable(target, format, gltype, table); -} - -void gl4_1compat_glCopyColorTable(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyColorTable(target, internalFormat, x, y, width); -} - -void gl4_1compat_glColorTableParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorTableParameteriv(target, pname, params); -} - -void gl4_1compat_glColorTableParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorTableParameterfv(target, pname, params); -} - -void gl4_1compat_glColorTable(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum gltype, const GLvoid* table) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorTable(target, internalFormat, width, format, gltype, table); -} - -void gl4_1compat_glMultTransposeMatrixd(void *_glfuncs, const GLdouble* m) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultTransposeMatrixd(m); -} - -void gl4_1compat_glMultTransposeMatrixf(void *_glfuncs, const GLfloat* m) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultTransposeMatrixf(m); -} - -void gl4_1compat_glLoadTransposeMatrixd(void *_glfuncs, const GLdouble* m) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadTransposeMatrixd(m); -} - -void gl4_1compat_glLoadTransposeMatrixf(void *_glfuncs, const GLfloat* m) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadTransposeMatrixf(m); -} - -void gl4_1compat_glMultiTexCoord4sv(void *_glfuncs, GLenum target, const GLshort* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4sv(target, v); -} - -void gl4_1compat_glMultiTexCoord4s(void *_glfuncs, GLenum target, GLshort s, GLshort t, GLshort r, GLshort q) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4s(target, s, t, r, q); -} - -void gl4_1compat_glMultiTexCoord4iv(void *_glfuncs, GLenum target, const GLint* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4iv(target, v); -} - -void gl4_1compat_glMultiTexCoord4i(void *_glfuncs, GLenum target, GLint s, GLint t, GLint r, GLint q) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4i(target, s, t, r, q); -} - -void gl4_1compat_glMultiTexCoord4fv(void *_glfuncs, GLenum target, const GLfloat* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4fv(target, v); -} - -void gl4_1compat_glMultiTexCoord4f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4f(target, s, t, r, q); -} - -void gl4_1compat_glMultiTexCoord4dv(void *_glfuncs, GLenum target, const GLdouble* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4dv(target, v); -} - -void gl4_1compat_glMultiTexCoord4d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4d(target, s, t, r, q); -} - -void gl4_1compat_glMultiTexCoord3sv(void *_glfuncs, GLenum target, const GLshort* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3sv(target, v); -} - -void gl4_1compat_glMultiTexCoord3s(void *_glfuncs, GLenum target, GLshort s, GLshort t, GLshort r) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3s(target, s, t, r); -} - -void gl4_1compat_glMultiTexCoord3iv(void *_glfuncs, GLenum target, const GLint* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3iv(target, v); -} - -void gl4_1compat_glMultiTexCoord3i(void *_glfuncs, GLenum target, GLint s, GLint t, GLint r) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3i(target, s, t, r); -} - -void gl4_1compat_glMultiTexCoord3fv(void *_glfuncs, GLenum target, const GLfloat* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3fv(target, v); -} - -void gl4_1compat_glMultiTexCoord3f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t, GLfloat r) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3f(target, s, t, r); -} - -void gl4_1compat_glMultiTexCoord3dv(void *_glfuncs, GLenum target, const GLdouble* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3dv(target, v); -} - -void gl4_1compat_glMultiTexCoord3d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t, GLdouble r) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3d(target, s, t, r); -} - -void gl4_1compat_glMultiTexCoord2sv(void *_glfuncs, GLenum target, const GLshort* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2sv(target, v); -} - -void gl4_1compat_glMultiTexCoord2s(void *_glfuncs, GLenum target, GLshort s, GLshort t) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2s(target, s, t); -} - -void gl4_1compat_glMultiTexCoord2iv(void *_glfuncs, GLenum target, const GLint* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2iv(target, v); -} - -void gl4_1compat_glMultiTexCoord2i(void *_glfuncs, GLenum target, GLint s, GLint t) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2i(target, s, t); -} - -void gl4_1compat_glMultiTexCoord2fv(void *_glfuncs, GLenum target, const GLfloat* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2fv(target, v); -} - -void gl4_1compat_glMultiTexCoord2f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2f(target, s, t); -} - -void gl4_1compat_glMultiTexCoord2dv(void *_glfuncs, GLenum target, const GLdouble* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2dv(target, v); -} - -void gl4_1compat_glMultiTexCoord2d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2d(target, s, t); -} - -void gl4_1compat_glMultiTexCoord1sv(void *_glfuncs, GLenum target, const GLshort* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1sv(target, v); -} - -void gl4_1compat_glMultiTexCoord1s(void *_glfuncs, GLenum target, GLshort s) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1s(target, s); -} - -void gl4_1compat_glMultiTexCoord1iv(void *_glfuncs, GLenum target, const GLint* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1iv(target, v); -} - -void gl4_1compat_glMultiTexCoord1i(void *_glfuncs, GLenum target, GLint s) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1i(target, s); -} - -void gl4_1compat_glMultiTexCoord1fv(void *_glfuncs, GLenum target, const GLfloat* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1fv(target, v); -} - -void gl4_1compat_glMultiTexCoord1f(void *_glfuncs, GLenum target, GLfloat s) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1f(target, s); -} - -void gl4_1compat_glMultiTexCoord1dv(void *_glfuncs, GLenum target, const GLdouble* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1dv(target, v); -} - -void gl4_1compat_glMultiTexCoord1d(void *_glfuncs, GLenum target, GLdouble s) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1d(target, s); -} - -void gl4_1compat_glClientActiveTexture(void *_glfuncs, GLenum texture) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClientActiveTexture(texture); -} - -void gl4_1compat_glWindowPos3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3sv(v); -} - -void gl4_1compat_glWindowPos3s(void *_glfuncs, GLshort x, GLshort y, GLshort z) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3s(x, y, z); -} - -void gl4_1compat_glWindowPos3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3iv(v); -} - -void gl4_1compat_glWindowPos3i(void *_glfuncs, GLint x, GLint y, GLint z) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3i(x, y, z); -} - -void gl4_1compat_glWindowPos3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3fv(v); -} - -void gl4_1compat_glWindowPos3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3f(x, y, z); -} - -void gl4_1compat_glWindowPos3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3dv(v); -} - -void gl4_1compat_glWindowPos3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3d(x, y, z); -} - -void gl4_1compat_glWindowPos2sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2sv(v); -} - -void gl4_1compat_glWindowPos2s(void *_glfuncs, GLshort x, GLshort y) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2s(x, y); -} - -void gl4_1compat_glWindowPos2iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2iv(v); -} - -void gl4_1compat_glWindowPos2i(void *_glfuncs, GLint x, GLint y) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2i(x, y); -} - -void gl4_1compat_glWindowPos2fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2fv(v); -} - -void gl4_1compat_glWindowPos2f(void *_glfuncs, GLfloat x, GLfloat y) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2f(x, y); -} - -void gl4_1compat_glWindowPos2dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2dv(v); -} - -void gl4_1compat_glWindowPos2d(void *_glfuncs, GLdouble x, GLdouble y) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2d(x, y); -} - -void gl4_1compat_glSecondaryColorPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColorPointer(size, gltype, stride, pointer); -} - -void gl4_1compat_glSecondaryColor3usv(void *_glfuncs, const GLushort* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3usv(v); -} - -void gl4_1compat_glSecondaryColor3us(void *_glfuncs, GLushort red, GLushort green, GLushort blue) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3us(red, green, blue); -} - -void gl4_1compat_glSecondaryColor3uiv(void *_glfuncs, const GLuint* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3uiv(v); -} - -void gl4_1compat_glSecondaryColor3ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3ui(red, green, blue); -} - -void gl4_1compat_glSecondaryColor3ubv(void *_glfuncs, const GLubyte* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3ubv(v); -} - -void gl4_1compat_glSecondaryColor3ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3ub(red, green, blue); -} - -void gl4_1compat_glSecondaryColor3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3sv(v); -} - -void gl4_1compat_glSecondaryColor3s(void *_glfuncs, GLshort red, GLshort green, GLshort blue) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3s(red, green, blue); -} - -void gl4_1compat_glSecondaryColor3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3iv(v); -} - -void gl4_1compat_glSecondaryColor3i(void *_glfuncs, GLint red, GLint green, GLint blue) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3i(red, green, blue); -} - -void gl4_1compat_glSecondaryColor3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3fv(v); -} - -void gl4_1compat_glSecondaryColor3f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3f(red, green, blue); -} - -void gl4_1compat_glSecondaryColor3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3dv(v); -} - -void gl4_1compat_glSecondaryColor3d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3d(red, green, blue); -} - -void gl4_1compat_glSecondaryColor3bv(void *_glfuncs, const GLbyte* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3bv(v); -} - -void gl4_1compat_glSecondaryColor3b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3b(red, green, blue); -} - -void gl4_1compat_glFogCoordPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogCoordPointer(gltype, stride, pointer); -} - -void gl4_1compat_glFogCoorddv(void *_glfuncs, const GLdouble* coord) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogCoorddv(coord); -} - -void gl4_1compat_glFogCoordd(void *_glfuncs, GLdouble coord) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogCoordd(coord); -} - -void gl4_1compat_glFogCoordfv(void *_glfuncs, const GLfloat* coord) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogCoordfv(coord); -} - -void gl4_1compat_glFogCoordf(void *_glfuncs, GLfloat coord) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogCoordf(coord); -} - -void gl4_1compat_glVertexAttrib4usv(void *_glfuncs, GLuint index, const GLushort* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4usv(index, v); -} - -void gl4_1compat_glVertexAttrib4uiv(void *_glfuncs, GLuint index, const GLuint* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4uiv(index, v); -} - -void gl4_1compat_glVertexAttrib4ubv(void *_glfuncs, GLuint index, const GLubyte* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4ubv(index, v); -} - -void gl4_1compat_glVertexAttrib4sv(void *_glfuncs, GLuint index, const GLshort* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4sv(index, v); -} - -void gl4_1compat_glVertexAttrib4s(void *_glfuncs, GLuint index, GLshort x, GLshort y, GLshort z, GLshort w) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4s(index, x, y, z, w); -} - -void gl4_1compat_glVertexAttrib4iv(void *_glfuncs, GLuint index, const GLint* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4iv(index, v); -} - -void gl4_1compat_glVertexAttrib4fv(void *_glfuncs, GLuint index, const GLfloat* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4fv(index, v); -} - -void gl4_1compat_glVertexAttrib4f(void *_glfuncs, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4f(index, x, y, z, w); -} - -void gl4_1compat_glVertexAttrib4dv(void *_glfuncs, GLuint index, const GLdouble* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4dv(index, v); -} - -void gl4_1compat_glVertexAttrib4d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4d(index, x, y, z, w); -} - -void gl4_1compat_glVertexAttrib4bv(void *_glfuncs, GLuint index, const GLbyte* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4bv(index, v); -} - -void gl4_1compat_glVertexAttrib4Nusv(void *_glfuncs, GLuint index, const GLushort* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4Nusv(index, v); -} - -void gl4_1compat_glVertexAttrib4Nuiv(void *_glfuncs, GLuint index, const GLuint* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4Nuiv(index, v); -} - -void gl4_1compat_glVertexAttrib4Nubv(void *_glfuncs, GLuint index, const GLubyte* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4Nubv(index, v); -} - -void gl4_1compat_glVertexAttrib4Nub(void *_glfuncs, GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4Nub(index, x, y, z, w); -} - -void gl4_1compat_glVertexAttrib4Nsv(void *_glfuncs, GLuint index, const GLshort* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4Nsv(index, v); -} - -void gl4_1compat_glVertexAttrib4Niv(void *_glfuncs, GLuint index, const GLint* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4Niv(index, v); -} - -void gl4_1compat_glVertexAttrib4Nbv(void *_glfuncs, GLuint index, const GLbyte* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4Nbv(index, v); -} - -void gl4_1compat_glVertexAttrib3sv(void *_glfuncs, GLuint index, const GLshort* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib3sv(index, v); -} - -void gl4_1compat_glVertexAttrib3s(void *_glfuncs, GLuint index, GLshort x, GLshort y, GLshort z) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib3s(index, x, y, z); -} - -void gl4_1compat_glVertexAttrib3fv(void *_glfuncs, GLuint index, const GLfloat* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib3fv(index, v); -} - -void gl4_1compat_glVertexAttrib3f(void *_glfuncs, GLuint index, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib3f(index, x, y, z); -} - -void gl4_1compat_glVertexAttrib3dv(void *_glfuncs, GLuint index, const GLdouble* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib3dv(index, v); -} - -void gl4_1compat_glVertexAttrib3d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib3d(index, x, y, z); -} - -void gl4_1compat_glVertexAttrib2sv(void *_glfuncs, GLuint index, const GLshort* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib2sv(index, v); -} - -void gl4_1compat_glVertexAttrib2s(void *_glfuncs, GLuint index, GLshort x, GLshort y) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib2s(index, x, y); -} - -void gl4_1compat_glVertexAttrib2fv(void *_glfuncs, GLuint index, const GLfloat* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib2fv(index, v); -} - -void gl4_1compat_glVertexAttrib2f(void *_glfuncs, GLuint index, GLfloat x, GLfloat y) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib2f(index, x, y); -} - -void gl4_1compat_glVertexAttrib2dv(void *_glfuncs, GLuint index, const GLdouble* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib2dv(index, v); -} - -void gl4_1compat_glVertexAttrib2d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib2d(index, x, y); -} - -void gl4_1compat_glVertexAttrib1sv(void *_glfuncs, GLuint index, const GLshort* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib1sv(index, v); -} - -void gl4_1compat_glVertexAttrib1s(void *_glfuncs, GLuint index, GLshort x) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib1s(index, x); -} - -void gl4_1compat_glVertexAttrib1fv(void *_glfuncs, GLuint index, const GLfloat* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib1fv(index, v); -} - -void gl4_1compat_glVertexAttrib1f(void *_glfuncs, GLuint index, GLfloat x) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib1f(index, x); -} - -void gl4_1compat_glVertexAttrib1dv(void *_glfuncs, GLuint index, const GLdouble* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib1dv(index, v); -} - -void gl4_1compat_glVertexAttrib1d(void *_glfuncs, GLuint index, GLdouble x) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib1d(index, x); -} - -void gl4_1compat_glVertexAttribI4usv(void *_glfuncs, GLuint index, const GLushort* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI4usv(index, v); -} - -void gl4_1compat_glVertexAttribI4ubv(void *_glfuncs, GLuint index, const GLubyte* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI4ubv(index, v); -} - -void gl4_1compat_glVertexAttribI4sv(void *_glfuncs, GLuint index, const GLshort* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI4sv(index, v); -} - -void gl4_1compat_glVertexAttribI4bv(void *_glfuncs, GLuint index, const GLbyte* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI4bv(index, v); -} - -void gl4_1compat_glVertexAttribI4uiv(void *_glfuncs, GLuint index, const GLuint* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI4uiv(index, v); -} - -void gl4_1compat_glVertexAttribI3uiv(void *_glfuncs, GLuint index, const GLuint* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI3uiv(index, v); -} - -void gl4_1compat_glVertexAttribI2uiv(void *_glfuncs, GLuint index, const GLuint* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI2uiv(index, v); -} - -void gl4_1compat_glVertexAttribI1uiv(void *_glfuncs, GLuint index, const GLuint* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI1uiv(index, v); -} - -void gl4_1compat_glVertexAttribI4iv(void *_glfuncs, GLuint index, const GLint* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI4iv(index, v); -} - -void gl4_1compat_glVertexAttribI3iv(void *_glfuncs, GLuint index, const GLint* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI3iv(index, v); -} - -void gl4_1compat_glVertexAttribI2iv(void *_glfuncs, GLuint index, const GLint* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI2iv(index, v); -} - -void gl4_1compat_glVertexAttribI1iv(void *_glfuncs, GLuint index, const GLint* v) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI1iv(index, v); -} - -void gl4_1compat_glVertexAttribI4ui(void *_glfuncs, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI4ui(index, x, y, z, w); -} - -void gl4_1compat_glVertexAttribI3ui(void *_glfuncs, GLuint index, GLuint x, GLuint y, GLuint z) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI3ui(index, x, y, z); -} - -void gl4_1compat_glVertexAttribI2ui(void *_glfuncs, GLuint index, GLuint x, GLuint y) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI2ui(index, x, y); -} - -void gl4_1compat_glVertexAttribI1ui(void *_glfuncs, GLuint index, GLuint x) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI1ui(index, x); -} - -void gl4_1compat_glVertexAttribI4i(void *_glfuncs, GLuint index, GLint x, GLint y, GLint z, GLint w) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI4i(index, x, y, z, w); -} - -void gl4_1compat_glVertexAttribI3i(void *_glfuncs, GLuint index, GLint x, GLint y, GLint z) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI3i(index, x, y, z); -} - -void gl4_1compat_glVertexAttribI2i(void *_glfuncs, GLuint index, GLint x, GLint y) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI2i(index, x, y); -} - -void gl4_1compat_glVertexAttribI1i(void *_glfuncs, GLuint index, GLint x) -{ - QOpenGLFunctions_4_1_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI1i(index, x); -} - diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.1compat/funcs.h b/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.1compat/funcs.h deleted file mode 100644 index 3e583ce97e..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.1compat/funcs.h +++ /dev/null @@ -1,920 +0,0 @@ - -// ** file automatically generated by glgen -- do not edit manually ** - -#ifndef __cplusplus -#include -#include -typedef unsigned int GLenum; -typedef unsigned char GLboolean; -typedef unsigned int GLbitfield; -typedef void GLvoid; -typedef char GLchar; -typedef signed char GLbyte; /* 1-byte signed */ -typedef short GLshort; /* 2-byte signed */ -typedef int GLint; /* 4-byte signed */ -typedef unsigned char GLubyte; /* 1-byte unsigned */ -typedef unsigned short GLushort; /* 2-byte unsigned */ -typedef unsigned int GLuint; /* 4-byte unsigned */ -typedef int GLsizei; /* 4-byte signed */ -typedef float GLfloat; /* single precision float */ -typedef float GLclampf; /* single precision float in [0,1] */ -typedef double GLdouble; /* double precision float */ -typedef double GLclampd; /* double precision float in [0,1] */ -typedef int64_t GLint64; -typedef uint64_t GLuint64; -typedef ptrdiff_t GLintptr; -typedef ptrdiff_t GLsizeiptr; -typedef ptrdiff_t GLintptrARB; -typedef ptrdiff_t GLsizeiptrARB; -typedef struct __GLsync *GLsync; -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -void *gl4_1compat_funcs(); - -void gl4_1compat_glViewport(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height); -void gl4_1compat_glDepthRange(void *_glfuncs, GLdouble nearVal, GLdouble farVal); -GLboolean gl4_1compat_glIsEnabled(void *_glfuncs, GLenum cap); -void gl4_1compat_glGetTexLevelParameteriv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLint* params); -void gl4_1compat_glGetTexLevelParameterfv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLfloat* params); -void gl4_1compat_glGetTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl4_1compat_glGetTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl4_1compat_glGetTexImage(void *_glfuncs, GLenum target, GLint level, GLenum format, GLenum gltype, GLvoid* pixels); -void gl4_1compat_glGetIntegerv(void *_glfuncs, GLenum pname, GLint* params); -void gl4_1compat_glGetFloatv(void *_glfuncs, GLenum pname, GLfloat* params); -GLenum gl4_1compat_glGetError(void *_glfuncs); -void gl4_1compat_glGetDoublev(void *_glfuncs, GLenum pname, GLdouble* params); -void gl4_1compat_glGetBooleanv(void *_glfuncs, GLenum pname, GLboolean* params); -void gl4_1compat_glReadPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum gltype, GLvoid* pixels); -void gl4_1compat_glReadBuffer(void *_glfuncs, GLenum mode); -void gl4_1compat_glPixelStorei(void *_glfuncs, GLenum pname, GLint param); -void gl4_1compat_glPixelStoref(void *_glfuncs, GLenum pname, GLfloat param); -void gl4_1compat_glDepthFunc(void *_glfuncs, GLenum glfunc); -void gl4_1compat_glStencilOp(void *_glfuncs, GLenum fail, GLenum zfail, GLenum zpass); -void gl4_1compat_glStencilFunc(void *_glfuncs, GLenum glfunc, GLint ref, GLuint mask); -void gl4_1compat_glLogicOp(void *_glfuncs, GLenum opcode); -void gl4_1compat_glBlendFunc(void *_glfuncs, GLenum sfactor, GLenum dfactor); -void gl4_1compat_glFlush(void *_glfuncs); -void gl4_1compat_glFinish(void *_glfuncs); -void gl4_1compat_glEnable(void *_glfuncs, GLenum cap); -void gl4_1compat_glDisable(void *_glfuncs, GLenum cap); -void gl4_1compat_glDepthMask(void *_glfuncs, GLboolean flag); -void gl4_1compat_glColorMask(void *_glfuncs, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); -void gl4_1compat_glStencilMask(void *_glfuncs, GLuint mask); -void gl4_1compat_glClearDepth(void *_glfuncs, GLdouble depth); -void gl4_1compat_glClearStencil(void *_glfuncs, GLint s); -void gl4_1compat_glClearColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl4_1compat_glClear(void *_glfuncs, GLbitfield mask); -void gl4_1compat_glDrawBuffer(void *_glfuncs, GLenum mode); -void gl4_1compat_glTexImage2D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl4_1compat_glTexImage1D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl4_1compat_glTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl4_1compat_glTexParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint param); -void gl4_1compat_glTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params); -void gl4_1compat_glTexParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param); -void gl4_1compat_glScissor(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height); -void gl4_1compat_glPolygonMode(void *_glfuncs, GLenum face, GLenum mode); -void gl4_1compat_glPointSize(void *_glfuncs, GLfloat size); -void gl4_1compat_glLineWidth(void *_glfuncs, GLfloat width); -void gl4_1compat_glHint(void *_glfuncs, GLenum target, GLenum mode); -void gl4_1compat_glFrontFace(void *_glfuncs, GLenum mode); -void gl4_1compat_glCullFace(void *_glfuncs, GLenum mode); -void gl4_1compat_glIndexubv(void *_glfuncs, const GLubyte* c); -void gl4_1compat_glIndexub(void *_glfuncs, GLubyte c); -GLboolean gl4_1compat_glIsTexture(void *_glfuncs, GLuint texture); -void gl4_1compat_glGenTextures(void *_glfuncs, GLsizei n, GLuint* textures); -void gl4_1compat_glDeleteTextures(void *_glfuncs, GLsizei n, const GLuint* textures); -void gl4_1compat_glBindTexture(void *_glfuncs, GLenum target, GLuint texture); -void gl4_1compat_glTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl4_1compat_glTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl4_1compat_glCopyTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -void gl4_1compat_glCopyTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -void gl4_1compat_glCopyTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -void gl4_1compat_glCopyTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border); -void gl4_1compat_glPolygonOffset(void *_glfuncs, GLfloat factor, GLfloat units); -void gl4_1compat_glDrawElements(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices); -void gl4_1compat_glDrawArrays(void *_glfuncs, GLenum mode, GLint first, GLsizei count); -void gl4_1compat_glCopyTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -void gl4_1compat_glTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl4_1compat_glTexImage3D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl4_1compat_glDrawRangeElements(void *_glfuncs, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum gltype, const GLvoid* indices); -void gl4_1compat_glBlendEquation(void *_glfuncs, GLenum mode); -void gl4_1compat_glBlendColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl4_1compat_glGetCompressedTexImage(void *_glfuncs, GLenum target, GLint level, GLvoid* img); -void gl4_1compat_glCompressedTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid* data); -void gl4_1compat_glCompressedTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data); -void gl4_1compat_glCompressedTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data); -void gl4_1compat_glCompressedTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid* data); -void gl4_1compat_glCompressedTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data); -void gl4_1compat_glCompressedTexImage3D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data); -void gl4_1compat_glSampleCoverage(void *_glfuncs, GLfloat value, GLboolean invert); -void gl4_1compat_glActiveTexture(void *_glfuncs, GLenum texture); -void gl4_1compat_glPointParameteriv(void *_glfuncs, GLenum pname, const GLint* params); -void gl4_1compat_glPointParameteri(void *_glfuncs, GLenum pname, GLint param); -void gl4_1compat_glPointParameterfv(void *_glfuncs, GLenum pname, const GLfloat* params); -void gl4_1compat_glPointParameterf(void *_glfuncs, GLenum pname, GLfloat param); -void gl4_1compat_glMultiDrawArrays(void *_glfuncs, GLenum mode, const GLint* first, const GLsizei* count, GLsizei drawcount); -void gl4_1compat_glBlendFuncSeparate(void *_glfuncs, GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -void gl4_1compat_glGetBufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -GLboolean gl4_1compat_glUnmapBuffer(void *_glfuncs, GLenum target); -void gl4_1compat_glGetBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, GLvoid* data); -void gl4_1compat_glBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data); -void gl4_1compat_glBufferData(void *_glfuncs, GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage); -GLboolean gl4_1compat_glIsBuffer(void *_glfuncs, GLuint buffer); -void gl4_1compat_glGenBuffers(void *_glfuncs, GLsizei n, GLuint* buffers); -void gl4_1compat_glDeleteBuffers(void *_glfuncs, GLsizei n, const GLuint* buffers); -void gl4_1compat_glBindBuffer(void *_glfuncs, GLenum target, GLuint buffer); -void gl4_1compat_glGetQueryObjectuiv(void *_glfuncs, GLuint id, GLenum pname, GLuint* params); -void gl4_1compat_glGetQueryObjectiv(void *_glfuncs, GLuint id, GLenum pname, GLint* params); -void gl4_1compat_glGetQueryiv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl4_1compat_glEndQuery(void *_glfuncs, GLenum target); -void gl4_1compat_glBeginQuery(void *_glfuncs, GLenum target, GLuint id); -GLboolean gl4_1compat_glIsQuery(void *_glfuncs, GLuint id); -void gl4_1compat_glDeleteQueries(void *_glfuncs, GLsizei n, const GLuint* ids); -void gl4_1compat_glGenQueries(void *_glfuncs, GLsizei n, GLuint* ids); -void gl4_1compat_glVertexAttribPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLboolean normalized, GLsizei stride, const GLvoid* offset); -void gl4_1compat_glValidateProgram(void *_glfuncs, GLuint program); -void gl4_1compat_glUniformMatrix4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_1compat_glUniformMatrix3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_1compat_glUniformMatrix2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_1compat_glUniform4iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gl4_1compat_glUniform3iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gl4_1compat_glUniform2iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gl4_1compat_glUniform1iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gl4_1compat_glUniform4fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gl4_1compat_glUniform3fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gl4_1compat_glUniform2fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gl4_1compat_glUniform1fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gl4_1compat_glUniform4i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -void gl4_1compat_glUniform3i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2); -void gl4_1compat_glUniform2i(void *_glfuncs, GLint location, GLint v0, GLint v1); -void gl4_1compat_glUniform1i(void *_glfuncs, GLint location, GLint v0); -void gl4_1compat_glUniform4f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -void gl4_1compat_glUniform3f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -void gl4_1compat_glUniform2f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1); -void gl4_1compat_glUniform1f(void *_glfuncs, GLint location, GLfloat v0); -void gl4_1compat_glUseProgram(void *_glfuncs, GLuint program); -void gl4_1compat_glShaderSource(void *_glfuncs, GLuint shader, GLsizei count, const GLchar** source, const GLint* length); -void gl4_1compat_glLinkProgram(void *_glfuncs, GLuint program); -GLboolean gl4_1compat_glIsShader(void *_glfuncs, GLuint shader); -GLboolean gl4_1compat_glIsProgram(void *_glfuncs, GLuint program); -void gl4_1compat_glGetVertexAttribiv(void *_glfuncs, GLuint index, GLenum pname, GLint* params); -void gl4_1compat_glGetVertexAttribfv(void *_glfuncs, GLuint index, GLenum pname, GLfloat* params); -void gl4_1compat_glGetVertexAttribdv(void *_glfuncs, GLuint index, GLenum pname, GLdouble* params); -void gl4_1compat_glGetUniformiv(void *_glfuncs, GLuint program, GLint location, GLint* params); -void gl4_1compat_glGetUniformfv(void *_glfuncs, GLuint program, GLint location, GLfloat* params); -GLint gl4_1compat_glGetUniformLocation(void *_glfuncs, GLuint program, const GLchar* name); -void gl4_1compat_glGetShaderSource(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* source); -void gl4_1compat_glGetShaderInfoLog(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* infoLog); -void gl4_1compat_glGetShaderiv(void *_glfuncs, GLuint shader, GLenum pname, GLint* params); -void gl4_1compat_glGetProgramInfoLog(void *_glfuncs, GLuint program, GLsizei bufSize, GLsizei* length, GLchar* infoLog); -void gl4_1compat_glGetProgramiv(void *_glfuncs, GLuint program, GLenum pname, GLint* params); -GLint gl4_1compat_glGetAttribLocation(void *_glfuncs, GLuint program, const GLchar* name); -void gl4_1compat_glGetAttachedShaders(void *_glfuncs, GLuint program, GLsizei maxCount, GLsizei* count, GLuint* obj); -void gl4_1compat_glGetActiveUniform(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name); -void gl4_1compat_glGetActiveAttrib(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name); -void gl4_1compat_glEnableVertexAttribArray(void *_glfuncs, GLuint index); -void gl4_1compat_glDisableVertexAttribArray(void *_glfuncs, GLuint index); -void gl4_1compat_glDetachShader(void *_glfuncs, GLuint program, GLuint shader); -void gl4_1compat_glDeleteShader(void *_glfuncs, GLuint shader); -void gl4_1compat_glDeleteProgram(void *_glfuncs, GLuint program); -GLuint gl4_1compat_glCreateShader(void *_glfuncs, GLenum gltype); -GLuint gl4_1compat_glCreateProgram(void *_glfuncs); -void gl4_1compat_glCompileShader(void *_glfuncs, GLuint shader); -void gl4_1compat_glBindAttribLocation(void *_glfuncs, GLuint program, GLuint index, const GLchar* name); -void gl4_1compat_glAttachShader(void *_glfuncs, GLuint program, GLuint shader); -void gl4_1compat_glStencilMaskSeparate(void *_glfuncs, GLenum face, GLuint mask); -void gl4_1compat_glStencilFuncSeparate(void *_glfuncs, GLenum face, GLenum glfunc, GLint ref, GLuint mask); -void gl4_1compat_glStencilOpSeparate(void *_glfuncs, GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); -void gl4_1compat_glDrawBuffers(void *_glfuncs, GLsizei n, const GLenum* bufs); -void gl4_1compat_glBlendEquationSeparate(void *_glfuncs, GLenum modeRGB, GLenum modeAlpha); -void gl4_1compat_glUniformMatrix4x3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_1compat_glUniformMatrix3x4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_1compat_glUniformMatrix4x2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_1compat_glUniformMatrix2x4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_1compat_glUniformMatrix3x2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_1compat_glUniformMatrix2x3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -GLboolean gl4_1compat_glIsVertexArray(void *_glfuncs, GLuint array); -void gl4_1compat_glGenVertexArrays(void *_glfuncs, GLsizei n, GLuint* arrays); -void gl4_1compat_glDeleteVertexArrays(void *_glfuncs, GLsizei n, const GLuint* arrays); -void gl4_1compat_glBindVertexArray(void *_glfuncs, GLuint array); -void gl4_1compat_glFlushMappedBufferRange(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr length); -void gl4_1compat_glFramebufferTextureLayer(void *_glfuncs, GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); -void gl4_1compat_glRenderbufferStorageMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height); -void gl4_1compat_glBlitFramebuffer(void *_glfuncs, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -void gl4_1compat_glGenerateMipmap(void *_glfuncs, GLenum target); -void gl4_1compat_glGetFramebufferAttachmentParameteriv(void *_glfuncs, GLenum target, GLenum attachment, GLenum pname, GLint* params); -void gl4_1compat_glFramebufferRenderbuffer(void *_glfuncs, GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -void gl4_1compat_glFramebufferTexture3D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -void gl4_1compat_glFramebufferTexture2D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -void gl4_1compat_glFramebufferTexture1D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLenum gl4_1compat_glCheckFramebufferStatus(void *_glfuncs, GLenum target); -void gl4_1compat_glGenFramebuffers(void *_glfuncs, GLsizei n, GLuint* framebuffers); -void gl4_1compat_glDeleteFramebuffers(void *_glfuncs, GLsizei n, const GLuint* framebuffers); -void gl4_1compat_glBindFramebuffer(void *_glfuncs, GLenum target, GLuint framebuffer); -GLboolean gl4_1compat_glIsFramebuffer(void *_glfuncs, GLuint framebuffer); -void gl4_1compat_glGetRenderbufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl4_1compat_glRenderbufferStorage(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height); -void gl4_1compat_glGenRenderbuffers(void *_glfuncs, GLsizei n, GLuint* renderbuffers); -void gl4_1compat_glDeleteRenderbuffers(void *_glfuncs, GLsizei n, const GLuint* renderbuffers); -void gl4_1compat_glBindRenderbuffer(void *_glfuncs, GLenum target, GLuint renderbuffer); -GLboolean gl4_1compat_glIsRenderbuffer(void *_glfuncs, GLuint renderbuffer); -void gl4_1compat_glClearBufferfi(void *_glfuncs, GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); -void gl4_1compat_glClearBufferfv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLfloat* value); -void gl4_1compat_glClearBufferuiv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLuint* value); -void gl4_1compat_glClearBufferiv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLint* value); -void gl4_1compat_glGetTexParameterIuiv(void *_glfuncs, GLenum target, GLenum pname, GLuint* params); -void gl4_1compat_glGetTexParameterIiv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl4_1compat_glTexParameterIuiv(void *_glfuncs, GLenum target, GLenum pname, const GLuint* params); -void gl4_1compat_glTexParameterIiv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl4_1compat_glUniform4uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value); -void gl4_1compat_glUniform3uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value); -void gl4_1compat_glUniform2uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value); -void gl4_1compat_glUniform1uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value); -void gl4_1compat_glUniform4ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -void gl4_1compat_glUniform3ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1, GLuint v2); -void gl4_1compat_glUniform2ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1); -void gl4_1compat_glUniform1ui(void *_glfuncs, GLint location, GLuint v0); -GLint gl4_1compat_glGetFragDataLocation(void *_glfuncs, GLuint program, const GLchar* name); -void gl4_1compat_glBindFragDataLocation(void *_glfuncs, GLuint program, GLuint color, const GLchar* name); -void gl4_1compat_glGetUniformuiv(void *_glfuncs, GLuint program, GLint location, GLuint* params); -void gl4_1compat_glGetVertexAttribIuiv(void *_glfuncs, GLuint index, GLenum pname, GLuint* params); -void gl4_1compat_glGetVertexAttribIiv(void *_glfuncs, GLuint index, GLenum pname, GLint* params); -void gl4_1compat_glVertexAttribIPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl4_1compat_glEndConditionalRender(void *_glfuncs); -void gl4_1compat_glBeginConditionalRender(void *_glfuncs, GLuint id, GLenum mode); -void gl4_1compat_glClampColor(void *_glfuncs, GLenum target, GLenum clamp); -void gl4_1compat_glGetTransformFeedbackVarying(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* gltype, GLchar* name); -void gl4_1compat_glBindBufferBase(void *_glfuncs, GLenum target, GLuint index, GLuint buffer); -void gl4_1compat_glBindBufferRange(void *_glfuncs, GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -void gl4_1compat_glEndTransformFeedback(void *_glfuncs); -void gl4_1compat_glBeginTransformFeedback(void *_glfuncs, GLenum primitiveMode); -GLboolean gl4_1compat_glIsEnabledi(void *_glfuncs, GLenum target, GLuint index); -void gl4_1compat_glDisablei(void *_glfuncs, GLenum target, GLuint index); -void gl4_1compat_glEnablei(void *_glfuncs, GLenum target, GLuint index); -void gl4_1compat_glGetIntegeri_v(void *_glfuncs, GLenum target, GLuint index, GLint* data); -void gl4_1compat_glGetBooleani_v(void *_glfuncs, GLenum target, GLuint index, GLboolean* data); -void gl4_1compat_glColorMaski(void *_glfuncs, GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); -void gl4_1compat_glCopyBufferSubData(void *_glfuncs, GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); -void gl4_1compat_glUniformBlockBinding(void *_glfuncs, GLuint program, GLuint v0, GLuint v1); -void gl4_1compat_glGetActiveUniformBlockName(void *_glfuncs, GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformBlockName); -void gl4_1compat_glGetActiveUniformBlockiv(void *_glfuncs, GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint* params); -GLuint gl4_1compat_glGetUniformBlockIndex(void *_glfuncs, GLuint program, const GLchar* uniformBlockName); -void gl4_1compat_glGetActiveUniformName(void *_glfuncs, GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformName); -void gl4_1compat_glGetActiveUniformsiv(void *_glfuncs, GLuint program, GLsizei uniformCount, const GLuint* uniformIndices, GLenum pname, GLint* params); -void gl4_1compat_glPrimitiveRestartIndex(void *_glfuncs, GLuint index); -void gl4_1compat_glTexBuffer(void *_glfuncs, GLenum target, GLenum internalFormat, GLuint buffer); -void gl4_1compat_glDrawElementsInstanced(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLsizei instancecount); -void gl4_1compat_glDrawArraysInstanced(void *_glfuncs, GLenum mode, GLint first, GLsizei count, GLsizei instancecount); -void gl4_1compat_glSampleMaski(void *_glfuncs, GLuint index, GLbitfield mask); -void gl4_1compat_glGetMultisamplefv(void *_glfuncs, GLenum pname, GLuint index, GLfloat* val); -void gl4_1compat_glTexImage3DMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); -void gl4_1compat_glTexImage2DMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); -void gl4_1compat_glGetSynciv(void *_glfuncs, GLsync sync, GLenum pname, GLsizei bufSize, GLsizei* length, GLint* values); -void gl4_1compat_glGetInteger64v(void *_glfuncs, GLenum pname, GLint64* params); -void gl4_1compat_glWaitSync(void *_glfuncs, GLsync sync, GLbitfield flags, GLuint64 timeout); -GLenum gl4_1compat_glClientWaitSync(void *_glfuncs, GLsync sync, GLbitfield flags, GLuint64 timeout); -void gl4_1compat_glDeleteSync(void *_glfuncs, GLsync sync); -GLboolean gl4_1compat_glIsSync(void *_glfuncs, GLsync sync); -GLsync gl4_1compat_glFenceSync(void *_glfuncs, GLenum condition, GLbitfield flags); -void gl4_1compat_glProvokingVertex(void *_glfuncs, GLenum mode); -void gl4_1compat_glDrawElementsInstancedBaseVertex(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLsizei instancecount, GLint basevertex); -void gl4_1compat_glDrawRangeElementsBaseVertex(void *_glfuncs, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum gltype, const GLvoid* indices, GLint basevertex); -void gl4_1compat_glDrawElementsBaseVertex(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLint basevertex); -void gl4_1compat_glFramebufferTexture(void *_glfuncs, GLenum target, GLenum attachment, GLuint texture, GLint level); -void gl4_1compat_glGetBufferParameteri64v(void *_glfuncs, GLenum target, GLenum pname, GLint64* params); -void gl4_1compat_glGetInteger64i_v(void *_glfuncs, GLenum target, GLuint index, GLint64* data); -void gl4_1compat_glVertexAttribP4uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value); -void gl4_1compat_glVertexAttribP4ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value); -void gl4_1compat_glVertexAttribP3uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value); -void gl4_1compat_glVertexAttribP3ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value); -void gl4_1compat_glVertexAttribP2uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value); -void gl4_1compat_glVertexAttribP2ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value); -void gl4_1compat_glVertexAttribP1uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value); -void gl4_1compat_glVertexAttribP1ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value); -void gl4_1compat_glSecondaryColorP3uiv(void *_glfuncs, GLenum gltype, const GLuint* color); -void gl4_1compat_glSecondaryColorP3ui(void *_glfuncs, GLenum gltype, GLuint color); -void gl4_1compat_glColorP4uiv(void *_glfuncs, GLenum gltype, const GLuint* color); -void gl4_1compat_glColorP4ui(void *_glfuncs, GLenum gltype, GLuint color); -void gl4_1compat_glColorP3uiv(void *_glfuncs, GLenum gltype, const GLuint* color); -void gl4_1compat_glColorP3ui(void *_glfuncs, GLenum gltype, GLuint color); -void gl4_1compat_glNormalP3uiv(void *_glfuncs, GLenum gltype, const GLuint* coords); -void gl4_1compat_glNormalP3ui(void *_glfuncs, GLenum gltype, GLuint coords); -void gl4_1compat_glMultiTexCoordP4uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords); -void gl4_1compat_glMultiTexCoordP4ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords); -void gl4_1compat_glMultiTexCoordP3uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords); -void gl4_1compat_glMultiTexCoordP3ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords); -void gl4_1compat_glMultiTexCoordP2uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords); -void gl4_1compat_glMultiTexCoordP2ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords); -void gl4_1compat_glMultiTexCoordP1uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords); -void gl4_1compat_glMultiTexCoordP1ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords); -void gl4_1compat_glTexCoordP4uiv(void *_glfuncs, GLenum gltype, const GLuint* coords); -void gl4_1compat_glTexCoordP4ui(void *_glfuncs, GLenum gltype, GLuint coords); -void gl4_1compat_glTexCoordP3uiv(void *_glfuncs, GLenum gltype, const GLuint* coords); -void gl4_1compat_glTexCoordP3ui(void *_glfuncs, GLenum gltype, GLuint coords); -void gl4_1compat_glTexCoordP2uiv(void *_glfuncs, GLenum gltype, const GLuint* coords); -void gl4_1compat_glTexCoordP2ui(void *_glfuncs, GLenum gltype, GLuint coords); -void gl4_1compat_glTexCoordP1uiv(void *_glfuncs, GLenum gltype, const GLuint* coords); -void gl4_1compat_glTexCoordP1ui(void *_glfuncs, GLenum gltype, GLuint coords); -void gl4_1compat_glVertexP4uiv(void *_glfuncs, GLenum gltype, const GLuint* value); -void gl4_1compat_glVertexP4ui(void *_glfuncs, GLenum gltype, GLuint value); -void gl4_1compat_glVertexP3uiv(void *_glfuncs, GLenum gltype, const GLuint* value); -void gl4_1compat_glVertexP3ui(void *_glfuncs, GLenum gltype, GLuint value); -void gl4_1compat_glVertexP2uiv(void *_glfuncs, GLenum gltype, const GLuint* value); -void gl4_1compat_glVertexP2ui(void *_glfuncs, GLenum gltype, GLuint value); -void gl4_1compat_glGetQueryObjectui64v(void *_glfuncs, GLuint id, GLenum pname, GLuint64* params); -void gl4_1compat_glGetQueryObjecti64v(void *_glfuncs, GLuint id, GLenum pname, GLint64* params); -void gl4_1compat_glQueryCounter(void *_glfuncs, GLuint id, GLenum target); -void gl4_1compat_glGetSamplerParameterIuiv(void *_glfuncs, GLuint sampler, GLenum pname, GLuint* params); -void gl4_1compat_glGetSamplerParameterfv(void *_glfuncs, GLuint sampler, GLenum pname, GLfloat* params); -void gl4_1compat_glGetSamplerParameterIiv(void *_glfuncs, GLuint sampler, GLenum pname, GLint* params); -void gl4_1compat_glGetSamplerParameteriv(void *_glfuncs, GLuint sampler, GLenum pname, GLint* params); -void gl4_1compat_glSamplerParameterIuiv(void *_glfuncs, GLuint sampler, GLenum pname, const GLuint* param); -void gl4_1compat_glSamplerParameterIiv(void *_glfuncs, GLuint sampler, GLenum pname, const GLint* param); -void gl4_1compat_glSamplerParameterfv(void *_glfuncs, GLuint sampler, GLenum pname, const GLfloat* param); -void gl4_1compat_glSamplerParameterf(void *_glfuncs, GLuint sampler, GLenum pname, GLfloat param); -void gl4_1compat_glSamplerParameteriv(void *_glfuncs, GLuint sampler, GLenum pname, const GLint* param); -void gl4_1compat_glSamplerParameteri(void *_glfuncs, GLuint sampler, GLenum pname, GLint param); -void gl4_1compat_glBindSampler(void *_glfuncs, GLuint unit, GLuint sampler); -GLboolean gl4_1compat_glIsSampler(void *_glfuncs, GLuint sampler); -void gl4_1compat_glDeleteSamplers(void *_glfuncs, GLsizei count, const GLuint* samplers); -void gl4_1compat_glGenSamplers(void *_glfuncs, GLsizei count, GLuint* samplers); -GLint gl4_1compat_glGetFragDataIndex(void *_glfuncs, GLuint program, const GLchar* name); -void gl4_1compat_glBindFragDataLocationIndexed(void *_glfuncs, GLuint program, GLuint colorNumber, GLuint index, const GLchar* name); -void gl4_1compat_glVertexAttribDivisor(void *_glfuncs, GLuint index, GLuint divisor); -void gl4_1compat_glGetQueryIndexediv(void *_glfuncs, GLenum target, GLuint index, GLenum pname, GLint* params); -void gl4_1compat_glEndQueryIndexed(void *_glfuncs, GLenum target, GLuint index); -void gl4_1compat_glBeginQueryIndexed(void *_glfuncs, GLenum target, GLuint index, GLuint id); -void gl4_1compat_glDrawTransformFeedbackStream(void *_glfuncs, GLenum mode, GLuint id, GLuint stream); -void gl4_1compat_glDrawTransformFeedback(void *_glfuncs, GLenum mode, GLuint id); -void gl4_1compat_glResumeTransformFeedback(void *_glfuncs); -void gl4_1compat_glPauseTransformFeedback(void *_glfuncs); -GLboolean gl4_1compat_glIsTransformFeedback(void *_glfuncs, GLuint id); -void gl4_1compat_glGenTransformFeedbacks(void *_glfuncs, GLsizei n, GLuint* ids); -void gl4_1compat_glDeleteTransformFeedbacks(void *_glfuncs, GLsizei n, const GLuint* ids); -void gl4_1compat_glBindTransformFeedback(void *_glfuncs, GLenum target, GLuint id); -void gl4_1compat_glPatchParameterfv(void *_glfuncs, GLenum pname, const GLfloat* values); -void gl4_1compat_glPatchParameteri(void *_glfuncs, GLenum pname, GLint value); -void gl4_1compat_glGetProgramStageiv(void *_glfuncs, GLuint program, GLenum shadertype, GLenum pname, GLint* values); -void gl4_1compat_glGetUniformSubroutineuiv(void *_glfuncs, GLenum shadertype, GLint location, GLuint* params); -void gl4_1compat_glUniformSubroutinesuiv(void *_glfuncs, GLenum shadertype, GLsizei count, const GLuint* value); -void gl4_1compat_glGetActiveSubroutineName(void *_glfuncs, GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei* length, GLchar* name); -void gl4_1compat_glGetActiveSubroutineUniformName(void *_glfuncs, GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei* length, GLchar* name); -void gl4_1compat_glGetActiveSubroutineUniformiv(void *_glfuncs, GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint* values); -GLuint gl4_1compat_glGetSubroutineIndex(void *_glfuncs, GLuint program, GLenum shadertype, const GLchar* name); -GLint gl4_1compat_glGetSubroutineUniformLocation(void *_glfuncs, GLuint program, GLenum shadertype, const GLchar* name); -void gl4_1compat_glGetUniformdv(void *_glfuncs, GLuint program, GLint location, GLdouble* params); -void gl4_1compat_glUniformMatrix4x3dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_1compat_glUniformMatrix4x2dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_1compat_glUniformMatrix3x4dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_1compat_glUniformMatrix3x2dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_1compat_glUniformMatrix2x4dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_1compat_glUniformMatrix2x3dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_1compat_glUniformMatrix4dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_1compat_glUniformMatrix3dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_1compat_glUniformMatrix2dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_1compat_glUniform4dv(void *_glfuncs, GLint location, GLsizei count, const GLdouble* value); -void gl4_1compat_glUniform3dv(void *_glfuncs, GLint location, GLsizei count, const GLdouble* value); -void gl4_1compat_glUniform2dv(void *_glfuncs, GLint location, GLsizei count, const GLdouble* value); -void gl4_1compat_glUniform1dv(void *_glfuncs, GLint location, GLsizei count, const GLdouble* value); -void gl4_1compat_glUniform4d(void *_glfuncs, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3); -void gl4_1compat_glUniform3d(void *_glfuncs, GLint location, GLdouble v0, GLdouble v1, GLdouble v2); -void gl4_1compat_glUniform2d(void *_glfuncs, GLint location, GLdouble v0, GLdouble v1); -void gl4_1compat_glUniform1d(void *_glfuncs, GLint location, GLdouble v0); -void gl4_1compat_glDrawElementsIndirect(void *_glfuncs, GLenum mode, GLenum gltype, const GLvoid* indirect); -void gl4_1compat_glDrawArraysIndirect(void *_glfuncs, GLenum mode, const GLvoid* indirect); -void gl4_1compat_glBlendFuncSeparatei(void *_glfuncs, GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -void gl4_1compat_glBlendFunci(void *_glfuncs, GLuint buf, GLenum src, GLenum dst); -void gl4_1compat_glBlendEquationSeparatei(void *_glfuncs, GLuint buf, GLenum modeRGB, GLenum modeAlpha); -void gl4_1compat_glBlendEquationi(void *_glfuncs, GLuint buf, GLenum mode); -void gl4_1compat_glMinSampleShading(void *_glfuncs, GLfloat value); -void gl4_1compat_glGetDoublei_v(void *_glfuncs, GLenum target, GLuint index, GLdouble* data); -void gl4_1compat_glGetFloati_v(void *_glfuncs, GLenum target, GLuint index, GLfloat* data); -void gl4_1compat_glDepthRangeIndexed(void *_glfuncs, GLuint index, GLdouble n, GLdouble f); -void gl4_1compat_glDepthRangeArrayv(void *_glfuncs, GLuint first, GLsizei count, const GLdouble* v); -void gl4_1compat_glScissorIndexedv(void *_glfuncs, GLuint index, const GLint* v); -void gl4_1compat_glScissorIndexed(void *_glfuncs, GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); -void gl4_1compat_glScissorArrayv(void *_glfuncs, GLuint first, GLsizei count, const GLint* v); -void gl4_1compat_glViewportIndexedfv(void *_glfuncs, GLuint index, const GLfloat* v); -void gl4_1compat_glViewportIndexedf(void *_glfuncs, GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); -void gl4_1compat_glViewportArrayv(void *_glfuncs, GLuint first, GLsizei count, const GLfloat* v); -void gl4_1compat_glGetVertexAttribLdv(void *_glfuncs, GLuint index, GLenum pname, GLdouble* params); -void gl4_1compat_glVertexAttribLPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl4_1compat_glVertexAttribL4dv(void *_glfuncs, GLuint index, const GLdouble* v); -void gl4_1compat_glVertexAttribL3dv(void *_glfuncs, GLuint index, const GLdouble* v); -void gl4_1compat_glVertexAttribL2dv(void *_glfuncs, GLuint index, const GLdouble* v); -void gl4_1compat_glVertexAttribL1dv(void *_glfuncs, GLuint index, const GLdouble* v); -void gl4_1compat_glVertexAttribL4d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -void gl4_1compat_glVertexAttribL3d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y, GLdouble z); -void gl4_1compat_glVertexAttribL2d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y); -void gl4_1compat_glVertexAttribL1d(void *_glfuncs, GLuint index, GLdouble x); -void gl4_1compat_glGetProgramPipelineInfoLog(void *_glfuncs, GLuint pipeline, GLsizei bufSize, GLsizei* length, GLchar* infoLog); -void gl4_1compat_glValidateProgramPipeline(void *_glfuncs, GLuint pipeline); -void gl4_1compat_glProgramUniformMatrix4x3dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_1compat_glProgramUniformMatrix3x4dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_1compat_glProgramUniformMatrix4x2dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_1compat_glProgramUniformMatrix2x4dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_1compat_glProgramUniformMatrix3x2dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_1compat_glProgramUniformMatrix2x3dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_1compat_glProgramUniformMatrix4x3fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_1compat_glProgramUniformMatrix3x4fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_1compat_glProgramUniformMatrix4x2fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_1compat_glProgramUniformMatrix2x4fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_1compat_glProgramUniformMatrix3x2fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_1compat_glProgramUniformMatrix2x3fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_1compat_glProgramUniformMatrix4dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_1compat_glProgramUniformMatrix3dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_1compat_glProgramUniformMatrix2dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_1compat_glProgramUniformMatrix4fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_1compat_glProgramUniformMatrix3fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_1compat_glProgramUniformMatrix2fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_1compat_glProgramUniform4uiv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLuint* value); -void gl4_1compat_glProgramUniform4ui(void *_glfuncs, GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -void gl4_1compat_glProgramUniform4dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLdouble* value); -void gl4_1compat_glProgramUniform4d(void *_glfuncs, GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3); -void gl4_1compat_glProgramUniform4fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLfloat* value); -void gl4_1compat_glProgramUniform4f(void *_glfuncs, GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -void gl4_1compat_glProgramUniform4iv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLint* value); -void gl4_1compat_glProgramUniform4i(void *_glfuncs, GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -void gl4_1compat_glProgramUniform3uiv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLuint* value); -void gl4_1compat_glProgramUniform3ui(void *_glfuncs, GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); -void gl4_1compat_glProgramUniform3dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLdouble* value); -void gl4_1compat_glProgramUniform3d(void *_glfuncs, GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2); -void gl4_1compat_glProgramUniform3fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLfloat* value); -void gl4_1compat_glProgramUniform3f(void *_glfuncs, GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -void gl4_1compat_glProgramUniform3iv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLint* value); -void gl4_1compat_glProgramUniform3i(void *_glfuncs, GLuint program, GLint location, GLint v0, GLint v1, GLint v2); -void gl4_1compat_glProgramUniform2uiv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLuint* value); -void gl4_1compat_glProgramUniform2ui(void *_glfuncs, GLuint program, GLint location, GLuint v0, GLuint v1); -void gl4_1compat_glProgramUniform2dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLdouble* value); -void gl4_1compat_glProgramUniform2d(void *_glfuncs, GLuint program, GLint location, GLdouble v0, GLdouble v1); -void gl4_1compat_glProgramUniform2fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLfloat* value); -void gl4_1compat_glProgramUniform2f(void *_glfuncs, GLuint program, GLint location, GLfloat v0, GLfloat v1); -void gl4_1compat_glProgramUniform2iv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLint* value); -void gl4_1compat_glProgramUniform2i(void *_glfuncs, GLuint program, GLint location, GLint v0, GLint v1); -void gl4_1compat_glProgramUniform1uiv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLuint* value); -void gl4_1compat_glProgramUniform1ui(void *_glfuncs, GLuint program, GLint location, GLuint v0); -void gl4_1compat_glProgramUniform1dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLdouble* value); -void gl4_1compat_glProgramUniform1d(void *_glfuncs, GLuint program, GLint location, GLdouble v0); -void gl4_1compat_glProgramUniform1fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLfloat* value); -void gl4_1compat_glProgramUniform1f(void *_glfuncs, GLuint program, GLint location, GLfloat v0); -void gl4_1compat_glProgramUniform1iv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLint* value); -void gl4_1compat_glProgramUniform1i(void *_glfuncs, GLuint program, GLint location, GLint v0); -void gl4_1compat_glGetProgramPipelineiv(void *_glfuncs, GLuint pipeline, GLenum pname, GLint* params); -GLboolean gl4_1compat_glIsProgramPipeline(void *_glfuncs, GLuint pipeline); -void gl4_1compat_glGenProgramPipelines(void *_glfuncs, GLsizei n, GLuint* pipelines); -void gl4_1compat_glDeleteProgramPipelines(void *_glfuncs, GLsizei n, const GLuint* pipelines); -void gl4_1compat_glBindProgramPipeline(void *_glfuncs, GLuint pipeline); -void gl4_1compat_glActiveShaderProgram(void *_glfuncs, GLuint pipeline, GLuint program); -void gl4_1compat_glUseProgramStages(void *_glfuncs, GLuint pipeline, GLbitfield stages, GLuint program); -void gl4_1compat_glProgramParameteri(void *_glfuncs, GLuint program, GLenum pname, GLint value); -void gl4_1compat_glProgramBinary(void *_glfuncs, GLuint program, GLenum binaryFormat, const GLvoid* binary, GLsizei length); -void gl4_1compat_glGetProgramBinary(void *_glfuncs, GLuint program, GLsizei bufSize, GLsizei* length, GLenum* binaryFormat, GLvoid* binary); -void gl4_1compat_glClearDepthf(void *_glfuncs, GLfloat dd); -void gl4_1compat_glDepthRangef(void *_glfuncs, GLfloat n, GLfloat f); -void gl4_1compat_glGetShaderPrecisionFormat(void *_glfuncs, GLenum shadertype, GLenum precisionType, GLint* range_, GLint* precision); -void gl4_1compat_glShaderBinary(void *_glfuncs, GLsizei count, const GLuint* shaders, GLenum binaryFormat, const GLvoid* binary, GLsizei length); -void gl4_1compat_glReleaseShaderCompiler(void *_glfuncs); -void gl4_1compat_glTranslatef(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl4_1compat_glTranslated(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl4_1compat_glScalef(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl4_1compat_glScaled(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl4_1compat_glRotatef(void *_glfuncs, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); -void gl4_1compat_glRotated(void *_glfuncs, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); -void gl4_1compat_glPushMatrix(void *_glfuncs); -void gl4_1compat_glPopMatrix(void *_glfuncs); -void gl4_1compat_glOrtho(void *_glfuncs, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -void gl4_1compat_glMultMatrixd(void *_glfuncs, const GLdouble* m); -void gl4_1compat_glMultMatrixf(void *_glfuncs, const GLfloat* m); -void gl4_1compat_glMatrixMode(void *_glfuncs, GLenum mode); -void gl4_1compat_glLoadMatrixd(void *_glfuncs, const GLdouble* m); -void gl4_1compat_glLoadMatrixf(void *_glfuncs, const GLfloat* m); -void gl4_1compat_glLoadIdentity(void *_glfuncs); -void gl4_1compat_glFrustum(void *_glfuncs, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -GLboolean gl4_1compat_glIsList(void *_glfuncs, GLuint list); -void gl4_1compat_glGetTexGeniv(void *_glfuncs, GLenum coord, GLenum pname, GLint* params); -void gl4_1compat_glGetTexGenfv(void *_glfuncs, GLenum coord, GLenum pname, GLfloat* params); -void gl4_1compat_glGetTexGendv(void *_glfuncs, GLenum coord, GLenum pname, GLdouble* params); -void gl4_1compat_glGetTexEnviv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl4_1compat_glGetTexEnvfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl4_1compat_glGetPolygonStipple(void *_glfuncs, GLubyte* mask); -void gl4_1compat_glGetPixelMapusv(void *_glfuncs, GLenum glmap, GLushort* values); -void gl4_1compat_glGetPixelMapuiv(void *_glfuncs, GLenum glmap, GLuint* values); -void gl4_1compat_glGetPixelMapfv(void *_glfuncs, GLenum glmap, GLfloat* values); -void gl4_1compat_glGetMaterialiv(void *_glfuncs, GLenum face, GLenum pname, GLint* params); -void gl4_1compat_glGetMaterialfv(void *_glfuncs, GLenum face, GLenum pname, GLfloat* params); -void gl4_1compat_glGetMapiv(void *_glfuncs, GLenum target, GLenum query, GLint* v); -void gl4_1compat_glGetMapfv(void *_glfuncs, GLenum target, GLenum query, GLfloat* v); -void gl4_1compat_glGetMapdv(void *_glfuncs, GLenum target, GLenum query, GLdouble* v); -void gl4_1compat_glGetLightiv(void *_glfuncs, GLenum light, GLenum pname, GLint* params); -void gl4_1compat_glGetLightfv(void *_glfuncs, GLenum light, GLenum pname, GLfloat* params); -void gl4_1compat_glGetClipPlane(void *_glfuncs, GLenum plane, GLdouble* equation); -void gl4_1compat_glDrawPixels(void *_glfuncs, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl4_1compat_glCopyPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum gltype); -void gl4_1compat_glPixelMapusv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLushort* values); -void gl4_1compat_glPixelMapuiv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLuint* values); -void gl4_1compat_glPixelMapfv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLfloat* values); -void gl4_1compat_glPixelTransferi(void *_glfuncs, GLenum pname, GLint param); -void gl4_1compat_glPixelTransferf(void *_glfuncs, GLenum pname, GLfloat param); -void gl4_1compat_glPixelZoom(void *_glfuncs, GLfloat xfactor, GLfloat yfactor); -void gl4_1compat_glAlphaFunc(void *_glfuncs, GLenum glfunc, GLfloat ref); -void gl4_1compat_glEvalPoint2(void *_glfuncs, GLint i, GLint j); -void gl4_1compat_glEvalMesh2(void *_glfuncs, GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2); -void gl4_1compat_glEvalPoint1(void *_glfuncs, GLint i); -void gl4_1compat_glEvalMesh1(void *_glfuncs, GLenum mode, GLint i1, GLint i2); -void gl4_1compat_glEvalCoord2fv(void *_glfuncs, const GLfloat* u); -void gl4_1compat_glEvalCoord2f(void *_glfuncs, GLfloat u, GLfloat v); -void gl4_1compat_glEvalCoord2dv(void *_glfuncs, const GLdouble* u); -void gl4_1compat_glEvalCoord2d(void *_glfuncs, GLdouble u, GLdouble v); -void gl4_1compat_glEvalCoord1fv(void *_glfuncs, const GLfloat* u); -void gl4_1compat_glEvalCoord1f(void *_glfuncs, GLfloat u); -void gl4_1compat_glEvalCoord1dv(void *_glfuncs, const GLdouble* u); -void gl4_1compat_glEvalCoord1d(void *_glfuncs, GLdouble u); -void gl4_1compat_glMapGrid2f(void *_glfuncs, GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2); -void gl4_1compat_glMapGrid2d(void *_glfuncs, GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2); -void gl4_1compat_glMapGrid1f(void *_glfuncs, GLint un, GLfloat u1, GLfloat u2); -void gl4_1compat_glMapGrid1d(void *_glfuncs, GLint un, GLdouble u1, GLdouble u2); -void gl4_1compat_glMap2f(void *_glfuncs, GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat* points); -void gl4_1compat_glMap2d(void *_glfuncs, GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble* points); -void gl4_1compat_glMap1f(void *_glfuncs, GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat* points); -void gl4_1compat_glMap1d(void *_glfuncs, GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble* points); -void gl4_1compat_glPushAttrib(void *_glfuncs, GLbitfield mask); -void gl4_1compat_glPopAttrib(void *_glfuncs); -void gl4_1compat_glAccum(void *_glfuncs, GLenum op, GLfloat value); -void gl4_1compat_glIndexMask(void *_glfuncs, GLuint mask); -void gl4_1compat_glClearIndex(void *_glfuncs, GLfloat c); -void gl4_1compat_glClearAccum(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl4_1compat_glPushName(void *_glfuncs, GLuint name); -void gl4_1compat_glPopName(void *_glfuncs); -void gl4_1compat_glPassThrough(void *_glfuncs, GLfloat token); -void gl4_1compat_glLoadName(void *_glfuncs, GLuint name); -void gl4_1compat_glInitNames(void *_glfuncs); -GLint gl4_1compat_glRenderMode(void *_glfuncs, GLenum mode); -void gl4_1compat_glSelectBuffer(void *_glfuncs, GLsizei size, GLuint* buffer); -void gl4_1compat_glFeedbackBuffer(void *_glfuncs, GLsizei size, GLenum gltype, GLfloat* buffer); -void gl4_1compat_glTexGeniv(void *_glfuncs, GLenum coord, GLenum pname, const GLint* params); -void gl4_1compat_glTexGeni(void *_glfuncs, GLenum coord, GLenum pname, GLint param); -void gl4_1compat_glTexGenfv(void *_glfuncs, GLenum coord, GLenum pname, const GLfloat* params); -void gl4_1compat_glTexGenf(void *_glfuncs, GLenum coord, GLenum pname, GLfloat param); -void gl4_1compat_glTexGendv(void *_glfuncs, GLenum coord, GLenum pname, const GLdouble* params); -void gl4_1compat_glTexGend(void *_glfuncs, GLenum coord, GLenum pname, GLdouble param); -void gl4_1compat_glTexEnviv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl4_1compat_glTexEnvi(void *_glfuncs, GLenum target, GLenum pname, GLint param); -void gl4_1compat_glTexEnvfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params); -void gl4_1compat_glTexEnvf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param); -void gl4_1compat_glShadeModel(void *_glfuncs, GLenum mode); -void gl4_1compat_glPolygonStipple(void *_glfuncs, const GLubyte* mask); -void gl4_1compat_glMaterialiv(void *_glfuncs, GLenum face, GLenum pname, const GLint* params); -void gl4_1compat_glMateriali(void *_glfuncs, GLenum face, GLenum pname, GLint param); -void gl4_1compat_glMaterialfv(void *_glfuncs, GLenum face, GLenum pname, const GLfloat* params); -void gl4_1compat_glMaterialf(void *_glfuncs, GLenum face, GLenum pname, GLfloat param); -void gl4_1compat_glLineStipple(void *_glfuncs, GLint factor, GLushort pattern); -void gl4_1compat_glLightModeliv(void *_glfuncs, GLenum pname, const GLint* params); -void gl4_1compat_glLightModeli(void *_glfuncs, GLenum pname, GLint param); -void gl4_1compat_glLightModelfv(void *_glfuncs, GLenum pname, const GLfloat* params); -void gl4_1compat_glLightModelf(void *_glfuncs, GLenum pname, GLfloat param); -void gl4_1compat_glLightiv(void *_glfuncs, GLenum light, GLenum pname, const GLint* params); -void gl4_1compat_glLighti(void *_glfuncs, GLenum light, GLenum pname, GLint param); -void gl4_1compat_glLightfv(void *_glfuncs, GLenum light, GLenum pname, const GLfloat* params); -void gl4_1compat_glLightf(void *_glfuncs, GLenum light, GLenum pname, GLfloat param); -void gl4_1compat_glFogiv(void *_glfuncs, GLenum pname, const GLint* params); -void gl4_1compat_glFogi(void *_glfuncs, GLenum pname, GLint param); -void gl4_1compat_glFogfv(void *_glfuncs, GLenum pname, const GLfloat* params); -void gl4_1compat_glFogf(void *_glfuncs, GLenum pname, GLfloat param); -void gl4_1compat_glColorMaterial(void *_glfuncs, GLenum face, GLenum mode); -void gl4_1compat_glClipPlane(void *_glfuncs, GLenum plane, const GLdouble* equation); -void gl4_1compat_glVertex4sv(void *_glfuncs, const GLshort* v); -void gl4_1compat_glVertex4s(void *_glfuncs, GLshort x, GLshort y, GLshort z, GLshort w); -void gl4_1compat_glVertex4iv(void *_glfuncs, const GLint* v); -void gl4_1compat_glVertex4i(void *_glfuncs, GLint x, GLint y, GLint z, GLint w); -void gl4_1compat_glVertex4fv(void *_glfuncs, const GLfloat* v); -void gl4_1compat_glVertex4f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -void gl4_1compat_glVertex4dv(void *_glfuncs, const GLdouble* v); -void gl4_1compat_glVertex4d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -void gl4_1compat_glVertex3sv(void *_glfuncs, const GLshort* v); -void gl4_1compat_glVertex3s(void *_glfuncs, GLshort x, GLshort y, GLshort z); -void gl4_1compat_glVertex3iv(void *_glfuncs, const GLint* v); -void gl4_1compat_glVertex3i(void *_glfuncs, GLint x, GLint y, GLint z); -void gl4_1compat_glVertex3fv(void *_glfuncs, const GLfloat* v); -void gl4_1compat_glVertex3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl4_1compat_glVertex3dv(void *_glfuncs, const GLdouble* v); -void gl4_1compat_glVertex3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl4_1compat_glVertex2sv(void *_glfuncs, const GLshort* v); -void gl4_1compat_glVertex2s(void *_glfuncs, GLshort x, GLshort y); -void gl4_1compat_glVertex2iv(void *_glfuncs, const GLint* v); -void gl4_1compat_glVertex2i(void *_glfuncs, GLint x, GLint y); -void gl4_1compat_glVertex2fv(void *_glfuncs, const GLfloat* v); -void gl4_1compat_glVertex2f(void *_glfuncs, GLfloat x, GLfloat y); -void gl4_1compat_glVertex2dv(void *_glfuncs, const GLdouble* v); -void gl4_1compat_glVertex2d(void *_glfuncs, GLdouble x, GLdouble y); -void gl4_1compat_glTexCoord4sv(void *_glfuncs, const GLshort* v); -void gl4_1compat_glTexCoord4s(void *_glfuncs, GLshort s, GLshort t, GLshort r, GLshort q); -void gl4_1compat_glTexCoord4iv(void *_glfuncs, const GLint* v); -void gl4_1compat_glTexCoord4i(void *_glfuncs, GLint s, GLint t, GLint r, GLint q); -void gl4_1compat_glTexCoord4fv(void *_glfuncs, const GLfloat* v); -void gl4_1compat_glTexCoord4f(void *_glfuncs, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -void gl4_1compat_glTexCoord4dv(void *_glfuncs, const GLdouble* v); -void gl4_1compat_glTexCoord4d(void *_glfuncs, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -void gl4_1compat_glTexCoord3sv(void *_glfuncs, const GLshort* v); -void gl4_1compat_glTexCoord3s(void *_glfuncs, GLshort s, GLshort t, GLshort r); -void gl4_1compat_glTexCoord3iv(void *_glfuncs, const GLint* v); -void gl4_1compat_glTexCoord3i(void *_glfuncs, GLint s, GLint t, GLint r); -void gl4_1compat_glTexCoord3fv(void *_glfuncs, const GLfloat* v); -void gl4_1compat_glTexCoord3f(void *_glfuncs, GLfloat s, GLfloat t, GLfloat r); -void gl4_1compat_glTexCoord3dv(void *_glfuncs, const GLdouble* v); -void gl4_1compat_glTexCoord3d(void *_glfuncs, GLdouble s, GLdouble t, GLdouble r); -void gl4_1compat_glTexCoord2sv(void *_glfuncs, const GLshort* v); -void gl4_1compat_glTexCoord2s(void *_glfuncs, GLshort s, GLshort t); -void gl4_1compat_glTexCoord2iv(void *_glfuncs, const GLint* v); -void gl4_1compat_glTexCoord2i(void *_glfuncs, GLint s, GLint t); -void gl4_1compat_glTexCoord2fv(void *_glfuncs, const GLfloat* v); -void gl4_1compat_glTexCoord2f(void *_glfuncs, GLfloat s, GLfloat t); -void gl4_1compat_glTexCoord2dv(void *_glfuncs, const GLdouble* v); -void gl4_1compat_glTexCoord2d(void *_glfuncs, GLdouble s, GLdouble t); -void gl4_1compat_glTexCoord1sv(void *_glfuncs, const GLshort* v); -void gl4_1compat_glTexCoord1s(void *_glfuncs, GLshort s); -void gl4_1compat_glTexCoord1iv(void *_glfuncs, const GLint* v); -void gl4_1compat_glTexCoord1i(void *_glfuncs, GLint s); -void gl4_1compat_glTexCoord1fv(void *_glfuncs, const GLfloat* v); -void gl4_1compat_glTexCoord1f(void *_glfuncs, GLfloat s); -void gl4_1compat_glTexCoord1dv(void *_glfuncs, const GLdouble* v); -void gl4_1compat_glTexCoord1d(void *_glfuncs, GLdouble s); -void gl4_1compat_glRectsv(void *_glfuncs, const GLshort* v1, const GLshort* v2); -void gl4_1compat_glRects(void *_glfuncs, GLshort x1, GLshort y1, GLshort x2, GLshort y2); -void gl4_1compat_glRectiv(void *_glfuncs, const GLint* v1, const GLint* v2); -void gl4_1compat_glRecti(void *_glfuncs, GLint x1, GLint y1, GLint x2, GLint y2); -void gl4_1compat_glRectfv(void *_glfuncs, const GLfloat* v1, const GLfloat* v2); -void gl4_1compat_glRectf(void *_glfuncs, GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2); -void gl4_1compat_glRectdv(void *_glfuncs, const GLdouble* v1, const GLdouble* v2); -void gl4_1compat_glRectd(void *_glfuncs, GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2); -void gl4_1compat_glRasterPos4sv(void *_glfuncs, const GLshort* v); -void gl4_1compat_glRasterPos4s(void *_glfuncs, GLshort x, GLshort y, GLshort z, GLshort w); -void gl4_1compat_glRasterPos4iv(void *_glfuncs, const GLint* v); -void gl4_1compat_glRasterPos4i(void *_glfuncs, GLint x, GLint y, GLint z, GLint w); -void gl4_1compat_glRasterPos4fv(void *_glfuncs, const GLfloat* v); -void gl4_1compat_glRasterPos4f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -void gl4_1compat_glRasterPos4dv(void *_glfuncs, const GLdouble* v); -void gl4_1compat_glRasterPos4d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -void gl4_1compat_glRasterPos3sv(void *_glfuncs, const GLshort* v); -void gl4_1compat_glRasterPos3s(void *_glfuncs, GLshort x, GLshort y, GLshort z); -void gl4_1compat_glRasterPos3iv(void *_glfuncs, const GLint* v); -void gl4_1compat_glRasterPos3i(void *_glfuncs, GLint x, GLint y, GLint z); -void gl4_1compat_glRasterPos3fv(void *_glfuncs, const GLfloat* v); -void gl4_1compat_glRasterPos3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl4_1compat_glRasterPos3dv(void *_glfuncs, const GLdouble* v); -void gl4_1compat_glRasterPos3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl4_1compat_glRasterPos2sv(void *_glfuncs, const GLshort* v); -void gl4_1compat_glRasterPos2s(void *_glfuncs, GLshort x, GLshort y); -void gl4_1compat_glRasterPos2iv(void *_glfuncs, const GLint* v); -void gl4_1compat_glRasterPos2i(void *_glfuncs, GLint x, GLint y); -void gl4_1compat_glRasterPos2fv(void *_glfuncs, const GLfloat* v); -void gl4_1compat_glRasterPos2f(void *_glfuncs, GLfloat x, GLfloat y); -void gl4_1compat_glRasterPos2dv(void *_glfuncs, const GLdouble* v); -void gl4_1compat_glRasterPos2d(void *_glfuncs, GLdouble x, GLdouble y); -void gl4_1compat_glNormal3sv(void *_glfuncs, const GLshort* v); -void gl4_1compat_glNormal3s(void *_glfuncs, GLshort nx, GLshort ny, GLshort nz); -void gl4_1compat_glNormal3iv(void *_glfuncs, const GLint* v); -void gl4_1compat_glNormal3i(void *_glfuncs, GLint nx, GLint ny, GLint nz); -void gl4_1compat_glNormal3fv(void *_glfuncs, const GLfloat* v); -void gl4_1compat_glNormal3f(void *_glfuncs, GLfloat nx, GLfloat ny, GLfloat nz); -void gl4_1compat_glNormal3dv(void *_glfuncs, const GLdouble* v); -void gl4_1compat_glNormal3d(void *_glfuncs, GLdouble nx, GLdouble ny, GLdouble nz); -void gl4_1compat_glNormal3bv(void *_glfuncs, const GLbyte* v); -void gl4_1compat_glNormal3b(void *_glfuncs, GLbyte nx, GLbyte ny, GLbyte nz); -void gl4_1compat_glIndexsv(void *_glfuncs, const GLshort* c); -void gl4_1compat_glIndexs(void *_glfuncs, GLshort c); -void gl4_1compat_glIndexiv(void *_glfuncs, const GLint* c); -void gl4_1compat_glIndexi(void *_glfuncs, GLint c); -void gl4_1compat_glIndexfv(void *_glfuncs, const GLfloat* c); -void gl4_1compat_glIndexf(void *_glfuncs, GLfloat c); -void gl4_1compat_glIndexdv(void *_glfuncs, const GLdouble* c); -void gl4_1compat_glIndexd(void *_glfuncs, GLdouble c); -void gl4_1compat_glEnd(void *_glfuncs); -void gl4_1compat_glEdgeFlagv(void *_glfuncs, const GLboolean* flag); -void gl4_1compat_glEdgeFlag(void *_glfuncs, GLboolean flag); -void gl4_1compat_glColor4usv(void *_glfuncs, const GLushort* v); -void gl4_1compat_glColor4us(void *_glfuncs, GLushort red, GLushort green, GLushort blue, GLushort alpha); -void gl4_1compat_glColor4uiv(void *_glfuncs, const GLuint* v); -void gl4_1compat_glColor4ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue, GLuint alpha); -void gl4_1compat_glColor4ubv(void *_glfuncs, const GLubyte* v); -void gl4_1compat_glColor4ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha); -void gl4_1compat_glColor4sv(void *_glfuncs, const GLshort* v); -void gl4_1compat_glColor4s(void *_glfuncs, GLshort red, GLshort green, GLshort blue, GLshort alpha); -void gl4_1compat_glColor4iv(void *_glfuncs, const GLint* v); -void gl4_1compat_glColor4i(void *_glfuncs, GLint red, GLint green, GLint blue, GLint alpha); -void gl4_1compat_glColor4fv(void *_glfuncs, const GLfloat* v); -void gl4_1compat_glColor4f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl4_1compat_glColor4dv(void *_glfuncs, const GLdouble* v); -void gl4_1compat_glColor4d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha); -void gl4_1compat_glColor4bv(void *_glfuncs, const GLbyte* v); -void gl4_1compat_glColor4b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha); -void gl4_1compat_glColor3usv(void *_glfuncs, const GLushort* v); -void gl4_1compat_glColor3us(void *_glfuncs, GLushort red, GLushort green, GLushort blue); -void gl4_1compat_glColor3uiv(void *_glfuncs, const GLuint* v); -void gl4_1compat_glColor3ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue); -void gl4_1compat_glColor3ubv(void *_glfuncs, const GLubyte* v); -void gl4_1compat_glColor3ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue); -void gl4_1compat_glColor3sv(void *_glfuncs, const GLshort* v); -void gl4_1compat_glColor3s(void *_glfuncs, GLshort red, GLshort green, GLshort blue); -void gl4_1compat_glColor3iv(void *_glfuncs, const GLint* v); -void gl4_1compat_glColor3i(void *_glfuncs, GLint red, GLint green, GLint blue); -void gl4_1compat_glColor3fv(void *_glfuncs, const GLfloat* v); -void gl4_1compat_glColor3f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue); -void gl4_1compat_glColor3dv(void *_glfuncs, const GLdouble* v); -void gl4_1compat_glColor3d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue); -void gl4_1compat_glColor3bv(void *_glfuncs, const GLbyte* v); -void gl4_1compat_glColor3b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue); -void gl4_1compat_glBitmap(void *_glfuncs, GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte* bitmap); -void gl4_1compat_glBegin(void *_glfuncs, GLenum mode); -void gl4_1compat_glListBase(void *_glfuncs, GLuint base); -GLuint gl4_1compat_glGenLists(void *_glfuncs, GLsizei range_); -void gl4_1compat_glDeleteLists(void *_glfuncs, GLuint list, GLsizei range_); -void gl4_1compat_glCallLists(void *_glfuncs, GLsizei n, GLenum gltype, const GLvoid* lists); -void gl4_1compat_glCallList(void *_glfuncs, GLuint list); -void gl4_1compat_glEndList(void *_glfuncs); -void gl4_1compat_glNewList(void *_glfuncs, GLuint list, GLenum mode); -void gl4_1compat_glPushClientAttrib(void *_glfuncs, GLbitfield mask); -void gl4_1compat_glPopClientAttrib(void *_glfuncs); -void gl4_1compat_glPrioritizeTextures(void *_glfuncs, GLsizei n, const GLuint* textures, const GLfloat* priorities); -GLboolean gl4_1compat_glAreTexturesResident(void *_glfuncs, GLsizei n, const GLuint* textures, GLboolean* residences); -void gl4_1compat_glVertexPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl4_1compat_glTexCoordPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl4_1compat_glNormalPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl4_1compat_glInterleavedArrays(void *_glfuncs, GLenum format, GLsizei stride, const GLvoid* pointer); -void gl4_1compat_glIndexPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl4_1compat_glEnableClientState(void *_glfuncs, GLenum array); -void gl4_1compat_glEdgeFlagPointer(void *_glfuncs, GLsizei stride, const GLvoid* pointer); -void gl4_1compat_glDisableClientState(void *_glfuncs, GLenum array); -void gl4_1compat_glColorPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl4_1compat_glArrayElement(void *_glfuncs, GLint i); -void gl4_1compat_glResetMinmax(void *_glfuncs, GLenum target); -void gl4_1compat_glResetHistogram(void *_glfuncs, GLenum target); -void gl4_1compat_glMinmax(void *_glfuncs, GLenum target, GLenum internalFormat, GLboolean sink); -void gl4_1compat_glHistogram(void *_glfuncs, GLenum target, GLsizei width, GLenum internalFormat, GLboolean sink); -void gl4_1compat_glGetMinmaxParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl4_1compat_glGetMinmaxParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl4_1compat_glGetMinmax(void *_glfuncs, GLenum target, GLboolean reset, GLenum format, GLenum gltype, GLvoid* values); -void gl4_1compat_glGetHistogramParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl4_1compat_glGetHistogramParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl4_1compat_glGetHistogram(void *_glfuncs, GLenum target, GLboolean reset, GLenum format, GLenum gltype, GLvoid* values); -void gl4_1compat_glSeparableFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* row, const GLvoid* column); -void gl4_1compat_glGetSeparableFilter(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* row, GLvoid* column, GLvoid* span); -void gl4_1compat_glGetConvolutionParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl4_1compat_glGetConvolutionParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl4_1compat_glGetConvolutionFilter(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* image); -void gl4_1compat_glCopyConvolutionFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height); -void gl4_1compat_glCopyConvolutionFilter1D(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width); -void gl4_1compat_glConvolutionParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl4_1compat_glConvolutionParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint params); -void gl4_1compat_glConvolutionParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params); -void gl4_1compat_glConvolutionParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat params); -void gl4_1compat_glConvolutionFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* image); -void gl4_1compat_glConvolutionFilter1D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum gltype, const GLvoid* image); -void gl4_1compat_glCopyColorSubTable(void *_glfuncs, GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); -void gl4_1compat_glColorSubTable(void *_glfuncs, GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum gltype, const GLvoid* data); -void gl4_1compat_glGetColorTableParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl4_1compat_glGetColorTableParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl4_1compat_glGetColorTable(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* table); -void gl4_1compat_glCopyColorTable(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width); -void gl4_1compat_glColorTableParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl4_1compat_glColorTableParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params); -void gl4_1compat_glColorTable(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum gltype, const GLvoid* table); -void gl4_1compat_glMultTransposeMatrixd(void *_glfuncs, const GLdouble* m); -void gl4_1compat_glMultTransposeMatrixf(void *_glfuncs, const GLfloat* m); -void gl4_1compat_glLoadTransposeMatrixd(void *_glfuncs, const GLdouble* m); -void gl4_1compat_glLoadTransposeMatrixf(void *_glfuncs, const GLfloat* m); -void gl4_1compat_glMultiTexCoord4sv(void *_glfuncs, GLenum target, const GLshort* v); -void gl4_1compat_glMultiTexCoord4s(void *_glfuncs, GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); -void gl4_1compat_glMultiTexCoord4iv(void *_glfuncs, GLenum target, const GLint* v); -void gl4_1compat_glMultiTexCoord4i(void *_glfuncs, GLenum target, GLint s, GLint t, GLint r, GLint q); -void gl4_1compat_glMultiTexCoord4fv(void *_glfuncs, GLenum target, const GLfloat* v); -void gl4_1compat_glMultiTexCoord4f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -void gl4_1compat_glMultiTexCoord4dv(void *_glfuncs, GLenum target, const GLdouble* v); -void gl4_1compat_glMultiTexCoord4d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -void gl4_1compat_glMultiTexCoord3sv(void *_glfuncs, GLenum target, const GLshort* v); -void gl4_1compat_glMultiTexCoord3s(void *_glfuncs, GLenum target, GLshort s, GLshort t, GLshort r); -void gl4_1compat_glMultiTexCoord3iv(void *_glfuncs, GLenum target, const GLint* v); -void gl4_1compat_glMultiTexCoord3i(void *_glfuncs, GLenum target, GLint s, GLint t, GLint r); -void gl4_1compat_glMultiTexCoord3fv(void *_glfuncs, GLenum target, const GLfloat* v); -void gl4_1compat_glMultiTexCoord3f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t, GLfloat r); -void gl4_1compat_glMultiTexCoord3dv(void *_glfuncs, GLenum target, const GLdouble* v); -void gl4_1compat_glMultiTexCoord3d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t, GLdouble r); -void gl4_1compat_glMultiTexCoord2sv(void *_glfuncs, GLenum target, const GLshort* v); -void gl4_1compat_glMultiTexCoord2s(void *_glfuncs, GLenum target, GLshort s, GLshort t); -void gl4_1compat_glMultiTexCoord2iv(void *_glfuncs, GLenum target, const GLint* v); -void gl4_1compat_glMultiTexCoord2i(void *_glfuncs, GLenum target, GLint s, GLint t); -void gl4_1compat_glMultiTexCoord2fv(void *_glfuncs, GLenum target, const GLfloat* v); -void gl4_1compat_glMultiTexCoord2f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t); -void gl4_1compat_glMultiTexCoord2dv(void *_glfuncs, GLenum target, const GLdouble* v); -void gl4_1compat_glMultiTexCoord2d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t); -void gl4_1compat_glMultiTexCoord1sv(void *_glfuncs, GLenum target, const GLshort* v); -void gl4_1compat_glMultiTexCoord1s(void *_glfuncs, GLenum target, GLshort s); -void gl4_1compat_glMultiTexCoord1iv(void *_glfuncs, GLenum target, const GLint* v); -void gl4_1compat_glMultiTexCoord1i(void *_glfuncs, GLenum target, GLint s); -void gl4_1compat_glMultiTexCoord1fv(void *_glfuncs, GLenum target, const GLfloat* v); -void gl4_1compat_glMultiTexCoord1f(void *_glfuncs, GLenum target, GLfloat s); -void gl4_1compat_glMultiTexCoord1dv(void *_glfuncs, GLenum target, const GLdouble* v); -void gl4_1compat_glMultiTexCoord1d(void *_glfuncs, GLenum target, GLdouble s); -void gl4_1compat_glClientActiveTexture(void *_glfuncs, GLenum texture); -void gl4_1compat_glWindowPos3sv(void *_glfuncs, const GLshort* v); -void gl4_1compat_glWindowPos3s(void *_glfuncs, GLshort x, GLshort y, GLshort z); -void gl4_1compat_glWindowPos3iv(void *_glfuncs, const GLint* v); -void gl4_1compat_glWindowPos3i(void *_glfuncs, GLint x, GLint y, GLint z); -void gl4_1compat_glWindowPos3fv(void *_glfuncs, const GLfloat* v); -void gl4_1compat_glWindowPos3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl4_1compat_glWindowPos3dv(void *_glfuncs, const GLdouble* v); -void gl4_1compat_glWindowPos3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl4_1compat_glWindowPos2sv(void *_glfuncs, const GLshort* v); -void gl4_1compat_glWindowPos2s(void *_glfuncs, GLshort x, GLshort y); -void gl4_1compat_glWindowPos2iv(void *_glfuncs, const GLint* v); -void gl4_1compat_glWindowPos2i(void *_glfuncs, GLint x, GLint y); -void gl4_1compat_glWindowPos2fv(void *_glfuncs, const GLfloat* v); -void gl4_1compat_glWindowPos2f(void *_glfuncs, GLfloat x, GLfloat y); -void gl4_1compat_glWindowPos2dv(void *_glfuncs, const GLdouble* v); -void gl4_1compat_glWindowPos2d(void *_glfuncs, GLdouble x, GLdouble y); -void gl4_1compat_glSecondaryColorPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl4_1compat_glSecondaryColor3usv(void *_glfuncs, const GLushort* v); -void gl4_1compat_glSecondaryColor3us(void *_glfuncs, GLushort red, GLushort green, GLushort blue); -void gl4_1compat_glSecondaryColor3uiv(void *_glfuncs, const GLuint* v); -void gl4_1compat_glSecondaryColor3ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue); -void gl4_1compat_glSecondaryColor3ubv(void *_glfuncs, const GLubyte* v); -void gl4_1compat_glSecondaryColor3ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue); -void gl4_1compat_glSecondaryColor3sv(void *_glfuncs, const GLshort* v); -void gl4_1compat_glSecondaryColor3s(void *_glfuncs, GLshort red, GLshort green, GLshort blue); -void gl4_1compat_glSecondaryColor3iv(void *_glfuncs, const GLint* v); -void gl4_1compat_glSecondaryColor3i(void *_glfuncs, GLint red, GLint green, GLint blue); -void gl4_1compat_glSecondaryColor3fv(void *_glfuncs, const GLfloat* v); -void gl4_1compat_glSecondaryColor3f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue); -void gl4_1compat_glSecondaryColor3dv(void *_glfuncs, const GLdouble* v); -void gl4_1compat_glSecondaryColor3d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue); -void gl4_1compat_glSecondaryColor3bv(void *_glfuncs, const GLbyte* v); -void gl4_1compat_glSecondaryColor3b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue); -void gl4_1compat_glFogCoordPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl4_1compat_glFogCoorddv(void *_glfuncs, const GLdouble* coord); -void gl4_1compat_glFogCoordd(void *_glfuncs, GLdouble coord); -void gl4_1compat_glFogCoordfv(void *_glfuncs, const GLfloat* coord); -void gl4_1compat_glFogCoordf(void *_glfuncs, GLfloat coord); -void gl4_1compat_glVertexAttrib4usv(void *_glfuncs, GLuint index, const GLushort* v); -void gl4_1compat_glVertexAttrib4uiv(void *_glfuncs, GLuint index, const GLuint* v); -void gl4_1compat_glVertexAttrib4ubv(void *_glfuncs, GLuint index, const GLubyte* v); -void gl4_1compat_glVertexAttrib4sv(void *_glfuncs, GLuint index, const GLshort* v); -void gl4_1compat_glVertexAttrib4s(void *_glfuncs, GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -void gl4_1compat_glVertexAttrib4iv(void *_glfuncs, GLuint index, const GLint* v); -void gl4_1compat_glVertexAttrib4fv(void *_glfuncs, GLuint index, const GLfloat* v); -void gl4_1compat_glVertexAttrib4f(void *_glfuncs, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -void gl4_1compat_glVertexAttrib4dv(void *_glfuncs, GLuint index, const GLdouble* v); -void gl4_1compat_glVertexAttrib4d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -void gl4_1compat_glVertexAttrib4bv(void *_glfuncs, GLuint index, const GLbyte* v); -void gl4_1compat_glVertexAttrib4Nusv(void *_glfuncs, GLuint index, const GLushort* v); -void gl4_1compat_glVertexAttrib4Nuiv(void *_glfuncs, GLuint index, const GLuint* v); -void gl4_1compat_glVertexAttrib4Nubv(void *_glfuncs, GLuint index, const GLubyte* v); -void gl4_1compat_glVertexAttrib4Nub(void *_glfuncs, GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -void gl4_1compat_glVertexAttrib4Nsv(void *_glfuncs, GLuint index, const GLshort* v); -void gl4_1compat_glVertexAttrib4Niv(void *_glfuncs, GLuint index, const GLint* v); -void gl4_1compat_glVertexAttrib4Nbv(void *_glfuncs, GLuint index, const GLbyte* v); -void gl4_1compat_glVertexAttrib3sv(void *_glfuncs, GLuint index, const GLshort* v); -void gl4_1compat_glVertexAttrib3s(void *_glfuncs, GLuint index, GLshort x, GLshort y, GLshort z); -void gl4_1compat_glVertexAttrib3fv(void *_glfuncs, GLuint index, const GLfloat* v); -void gl4_1compat_glVertexAttrib3f(void *_glfuncs, GLuint index, GLfloat x, GLfloat y, GLfloat z); -void gl4_1compat_glVertexAttrib3dv(void *_glfuncs, GLuint index, const GLdouble* v); -void gl4_1compat_glVertexAttrib3d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y, GLdouble z); -void gl4_1compat_glVertexAttrib2sv(void *_glfuncs, GLuint index, const GLshort* v); -void gl4_1compat_glVertexAttrib2s(void *_glfuncs, GLuint index, GLshort x, GLshort y); -void gl4_1compat_glVertexAttrib2fv(void *_glfuncs, GLuint index, const GLfloat* v); -void gl4_1compat_glVertexAttrib2f(void *_glfuncs, GLuint index, GLfloat x, GLfloat y); -void gl4_1compat_glVertexAttrib2dv(void *_glfuncs, GLuint index, const GLdouble* v); -void gl4_1compat_glVertexAttrib2d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y); -void gl4_1compat_glVertexAttrib1sv(void *_glfuncs, GLuint index, const GLshort* v); -void gl4_1compat_glVertexAttrib1s(void *_glfuncs, GLuint index, GLshort x); -void gl4_1compat_glVertexAttrib1fv(void *_glfuncs, GLuint index, const GLfloat* v); -void gl4_1compat_glVertexAttrib1f(void *_glfuncs, GLuint index, GLfloat x); -void gl4_1compat_glVertexAttrib1dv(void *_glfuncs, GLuint index, const GLdouble* v); -void gl4_1compat_glVertexAttrib1d(void *_glfuncs, GLuint index, GLdouble x); -void gl4_1compat_glVertexAttribI4usv(void *_glfuncs, GLuint index, const GLushort* v); -void gl4_1compat_glVertexAttribI4ubv(void *_glfuncs, GLuint index, const GLubyte* v); -void gl4_1compat_glVertexAttribI4sv(void *_glfuncs, GLuint index, const GLshort* v); -void gl4_1compat_glVertexAttribI4bv(void *_glfuncs, GLuint index, const GLbyte* v); -void gl4_1compat_glVertexAttribI4uiv(void *_glfuncs, GLuint index, const GLuint* v); -void gl4_1compat_glVertexAttribI3uiv(void *_glfuncs, GLuint index, const GLuint* v); -void gl4_1compat_glVertexAttribI2uiv(void *_glfuncs, GLuint index, const GLuint* v); -void gl4_1compat_glVertexAttribI1uiv(void *_glfuncs, GLuint index, const GLuint* v); -void gl4_1compat_glVertexAttribI4iv(void *_glfuncs, GLuint index, const GLint* v); -void gl4_1compat_glVertexAttribI3iv(void *_glfuncs, GLuint index, const GLint* v); -void gl4_1compat_glVertexAttribI2iv(void *_glfuncs, GLuint index, const GLint* v); -void gl4_1compat_glVertexAttribI1iv(void *_glfuncs, GLuint index, const GLint* v); -void gl4_1compat_glVertexAttribI4ui(void *_glfuncs, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -void gl4_1compat_glVertexAttribI3ui(void *_glfuncs, GLuint index, GLuint x, GLuint y, GLuint z); -void gl4_1compat_glVertexAttribI2ui(void *_glfuncs, GLuint index, GLuint x, GLuint y); -void gl4_1compat_glVertexAttribI1ui(void *_glfuncs, GLuint index, GLuint x); -void gl4_1compat_glVertexAttribI4i(void *_glfuncs, GLuint index, GLint x, GLint y, GLint z, GLint w); -void gl4_1compat_glVertexAttribI3i(void *_glfuncs, GLuint index, GLint x, GLint y, GLint z); -void gl4_1compat_glVertexAttribI2i(void *_glfuncs, GLuint index, GLint x, GLint y); -void gl4_1compat_glVertexAttribI1i(void *_glfuncs, GLuint index, GLint x); - - -#ifdef __cplusplus -} // extern "C" -#endif diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.1compat/gl.go b/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.1compat/gl.go deleted file mode 100644 index 3d43702055..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.1compat/gl.go +++ /dev/null @@ -1,9201 +0,0 @@ -// ** file automatically generated by glgen -- do not edit manually ** - -package GL - -// #cgo CXXFLAGS: -std=c++0x -pedantic-errors -Wall -fno-strict-aliasing -// #cgo LDFLAGS: -lstdc++ -// #cgo pkg-config: Qt5Core Qt5OpenGL -// -// #include "funcs.h" -// -// void free(void*); -// -import "C" - -import ( - "fmt" - "reflect" - "unsafe" - - "gopkg.in/qml.v1/gl/glbase" -) - -// API returns a value that offers methods matching the OpenGL version 4.1 API. -// -// The returned API must not be used after the provided OpenGL context becomes invalid. -func API(context glbase.Contexter) *GL { - gl := &GL{} - gl.funcs = C.gl4_1compat_funcs() - if gl.funcs == nil { - panic(fmt.Errorf("OpenGL version 4.1 is not available")) - } - return gl -} - -// GL implements the OpenGL version 4.1 API. Values of this -// type must be created via the API function, and it must not be used after -// the associated OpenGL context becomes invalid. -type GL struct { - funcs unsafe.Pointer -} - -const ( - FALSE = 0 - TRUE = 1 - NONE = 0 - - BYTE = 0x1400 - UNSIGNED_BYTE = 0x1401 - SHORT = 0x1402 - UNSIGNED_SHORT = 0x1403 - INT = 0x1404 - UNSIGNED_INT = 0x1405 - FLOAT = 0x1406 - N2_BYTES = 0x1407 - N3_BYTES = 0x1408 - N4_BYTES = 0x1409 - DOUBLE = 0x140A - HALF_FLOAT = 0x140B - FIXED = 0x140C - - ACCUM = 0x0100 - LOAD = 0x0101 - RETURN = 0x0102 - MULT = 0x0103 - ADD = 0x0104 - - ACCUM_BUFFER_BIT = 0x00000200 - ALL_ATTRIB_BITS = 0xFFFFFFFF - COLOR_BUFFER_BIT = 0x00004000 - CURRENT_BIT = 0x00000001 - DEPTH_BUFFER_BIT = 0x00000100 - ENABLE_BIT = 0x00002000 - EVAL_BIT = 0x00010000 - FOG_BIT = 0x00000080 - HINT_BIT = 0x00008000 - LIGHTING_BIT = 0x00000040 - LINE_BIT = 0x00000004 - LIST_BIT = 0x00020000 - MULTISAMPLE_BIT = 0x20000000 - PIXEL_MODE_BIT = 0x00000020 - POINT_BIT = 0x00000002 - POLYGON_BIT = 0x00000008 - POLYGON_STIPPLE_BIT = 0x00000010 - SCISSOR_BIT = 0x00080000 - STENCIL_BUFFER_BIT = 0x00000400 - TEXTURE_BIT = 0x00040000 - TRANSFORM_BIT = 0x00001000 - VIEWPORT_BIT = 0x00000800 - - ALWAYS = 0x0207 - EQUAL = 0x0202 - GEQUAL = 0x0206 - GREATER = 0x0204 - LEQUAL = 0x0203 - LESS = 0x0201 - NEVER = 0x0200 - NOTEQUAL = 0x0205 - - LOGIC_OP = 0x0BF1 - - DST_ALPHA = 0x0304 - ONE = 1 - ONE_MINUS_DST_ALPHA = 0x0305 - ONE_MINUS_SRC_ALPHA = 0x0303 - ONE_MINUS_SRC_COLOR = 0x0301 - SRC_ALPHA = 0x0302 - SRC_COLOR = 0x0300 - ZERO = 0 - - DST_COLOR = 0x0306 - ONE_MINUS_DST_COLOR = 0x0307 - SRC_ALPHA_SATURATE = 0x0308 - - CLIENT_ALL_ATTRIB_BITS = 0xFFFFFFFF - CLIENT_PIXEL_STORE_BIT = 0x00000001 - CLIENT_VERTEX_ARRAY_BIT = 0x00000002 - - CLIP_DISTANCE0 = 0x3000 - CLIP_DISTANCE1 = 0x3001 - CLIP_DISTANCE2 = 0x3002 - CLIP_DISTANCE3 = 0x3003 - CLIP_DISTANCE4 = 0x3004 - CLIP_DISTANCE5 = 0x3005 - CLIP_DISTANCE6 = 0x3006 - CLIP_DISTANCE7 = 0x3007 - CLIP_PLANE0 = 0x3000 - CLIP_PLANE1 = 0x3001 - CLIP_PLANE2 = 0x3002 - CLIP_PLANE3 = 0x3003 - CLIP_PLANE4 = 0x3004 - CLIP_PLANE5 = 0x3005 - - BACK = 0x0405 - FRONT = 0x0404 - FRONT_AND_BACK = 0x0408 - - AMBIENT = 0x1200 - AMBIENT_AND_DIFFUSE = 0x1602 - DIFFUSE = 0x1201 - EMISSION = 0x1600 - SPECULAR = 0x1202 - - CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT = 0x00000001 - - CONTEXT_COMPATIBILITY_PROFILE_BIT = 0x00000002 - CONTEXT_CORE_PROFILE_BIT = 0x00000001 - - AUX0 = 0x0409 - AUX1 = 0x040A - AUX2 = 0x040B - AUX3 = 0x040C - BACK_LEFT = 0x0402 - BACK_RIGHT = 0x0403 - FRONT_LEFT = 0x0400 - FRONT_RIGHT = 0x0401 - LEFT = 0x0406 - RIGHT = 0x0407 - - ALPHA_TEST = 0x0BC0 - AUTO_NORMAL = 0x0D80 - BLEND = 0x0BE2 - COLOR_ARRAY = 0x8076 - COLOR_LOGIC_OP = 0x0BF2 - COLOR_MATERIAL = 0x0B57 - CULL_FACE = 0x0B44 - DEPTH_TEST = 0x0B71 - DITHER = 0x0BD0 - EDGE_FLAG_ARRAY = 0x8079 - FOG = 0x0B60 - INDEX_ARRAY = 0x8077 - INDEX_LOGIC_OP = 0x0BF1 - LIGHT0 = 0x4000 - LIGHT1 = 0x4001 - LIGHT2 = 0x4002 - LIGHT3 = 0x4003 - LIGHT4 = 0x4004 - LIGHT5 = 0x4005 - LIGHT6 = 0x4006 - LIGHT7 = 0x4007 - LIGHTING = 0x0B50 - LINE_SMOOTH = 0x0B20 - LINE_STIPPLE = 0x0B24 - MAP1_COLOR_4 = 0x0D90 - MAP1_INDEX = 0x0D91 - MAP1_NORMAL = 0x0D92 - MAP1_TEXTURE_COORD_1 = 0x0D93 - MAP1_TEXTURE_COORD_2 = 0x0D94 - MAP1_TEXTURE_COORD_3 = 0x0D95 - MAP1_TEXTURE_COORD_4 = 0x0D96 - MAP1_VERTEX_3 = 0x0D97 - MAP1_VERTEX_4 = 0x0D98 - MAP2_COLOR_4 = 0x0DB0 - MAP2_INDEX = 0x0DB1 - MAP2_NORMAL = 0x0DB2 - MAP2_TEXTURE_COORD_1 = 0x0DB3 - MAP2_TEXTURE_COORD_2 = 0x0DB4 - MAP2_TEXTURE_COORD_3 = 0x0DB5 - MAP2_TEXTURE_COORD_4 = 0x0DB6 - MAP2_VERTEX_3 = 0x0DB7 - MAP2_VERTEX_4 = 0x0DB8 - NORMALIZE = 0x0BA1 - NORMAL_ARRAY = 0x8075 - POINT_SMOOTH = 0x0B10 - POLYGON_OFFSET_FILL = 0x8037 - POLYGON_OFFSET_LINE = 0x2A02 - POLYGON_OFFSET_POINT = 0x2A01 - POLYGON_SMOOTH = 0x0B41 - POLYGON_STIPPLE = 0x0B42 - SCISSOR_TEST = 0x0C11 - STENCIL_TEST = 0x0B90 - TEXTURE_1D = 0x0DE0 - TEXTURE_2D = 0x0DE1 - TEXTURE_COORD_ARRAY = 0x8078 - TEXTURE_GEN_Q = 0x0C63 - TEXTURE_GEN_R = 0x0C62 - TEXTURE_GEN_S = 0x0C60 - TEXTURE_GEN_T = 0x0C61 - VERTEX_ARRAY = 0x8074 - - INVALID_ENUM = 0x0500 - INVALID_FRAMEBUFFER_OPERATION = 0x0506 - INVALID_OPERATION = 0x0502 - INVALID_VALUE = 0x0501 - NO_ERROR = 0 - OUT_OF_MEMORY = 0x0505 - STACK_OVERFLOW = 0x0503 - STACK_UNDERFLOW = 0x0504 - - N2D = 0x0600 - N3D = 0x0601 - N3D_COLOR = 0x0602 - N3D_COLOR_TEXTURE = 0x0603 - N4D_COLOR_TEXTURE = 0x0604 - - BITMAP_TOKEN = 0x0704 - COPY_PIXEL_TOKEN = 0x0706 - DRAW_PIXEL_TOKEN = 0x0705 - LINE_RESET_TOKEN = 0x0707 - LINE_TOKEN = 0x0702 - PASS_THROUGH_TOKEN = 0x0700 - POINT_TOKEN = 0x0701 - POLYGON_TOKEN = 0x0703 - - EXP = 0x0800 - EXP2 = 0x0801 - LINEAR = 0x2601 - - FOG_COLOR = 0x0B66 - FOG_DENSITY = 0x0B62 - FOG_END = 0x0B64 - FOG_INDEX = 0x0B61 - FOG_MODE = 0x0B65 - FOG_START = 0x0B63 - - CCW = 0x0901 - CW = 0x0900 - - COEFF = 0x0A00 - DOMAIN = 0x0A02 - ORDER = 0x0A01 - - PIXEL_MAP_A_TO_A = 0x0C79 - PIXEL_MAP_B_TO_B = 0x0C78 - PIXEL_MAP_G_TO_G = 0x0C77 - PIXEL_MAP_I_TO_A = 0x0C75 - PIXEL_MAP_I_TO_B = 0x0C74 - PIXEL_MAP_I_TO_G = 0x0C73 - PIXEL_MAP_I_TO_I = 0x0C70 - PIXEL_MAP_I_TO_R = 0x0C72 - PIXEL_MAP_R_TO_R = 0x0C76 - PIXEL_MAP_S_TO_S = 0x0C71 - - ACCUM_ALPHA_BITS = 0x0D5B - ACCUM_BLUE_BITS = 0x0D5A - ACCUM_CLEAR_VALUE = 0x0B80 - ACCUM_GREEN_BITS = 0x0D59 - ACCUM_RED_BITS = 0x0D58 - ALIASED_LINE_WIDTH_RANGE = 0x846E - ALIASED_POINT_SIZE_RANGE = 0x846D - ALPHA_BIAS = 0x0D1D - ALPHA_BITS = 0x0D55 - ALPHA_SCALE = 0x0D1C - ALPHA_TEST_FUNC = 0x0BC1 - ALPHA_TEST_REF = 0x0BC2 - ATTRIB_STACK_DEPTH = 0x0BB0 - AUX_BUFFERS = 0x0C00 - BLEND_DST = 0x0BE0 - BLEND_SRC = 0x0BE1 - BLUE_BIAS = 0x0D1B - BLUE_BITS = 0x0D54 - BLUE_SCALE = 0x0D1A - CLIENT_ATTRIB_STACK_DEPTH = 0x0BB1 - COLOR_ARRAY_SIZE = 0x8081 - COLOR_ARRAY_STRIDE = 0x8083 - COLOR_ARRAY_TYPE = 0x8082 - COLOR_CLEAR_VALUE = 0x0C22 - COLOR_MATERIAL_FACE = 0x0B55 - COLOR_MATERIAL_PARAMETER = 0x0B56 - COLOR_WRITEMASK = 0x0C23 - CULL_FACE_MODE = 0x0B45 - CURRENT_COLOR = 0x0B00 - CURRENT_INDEX = 0x0B01 - CURRENT_NORMAL = 0x0B02 - CURRENT_RASTER_COLOR = 0x0B04 - CURRENT_RASTER_DISTANCE = 0x0B09 - CURRENT_RASTER_INDEX = 0x0B05 - CURRENT_RASTER_POSITION = 0x0B07 - CURRENT_RASTER_POSITION_VALID = 0x0B08 - CURRENT_RASTER_TEXTURE_COORDS = 0x0B06 - CURRENT_TEXTURE_COORDS = 0x0B03 - DEPTH_BIAS = 0x0D1F - DEPTH_BITS = 0x0D56 - DEPTH_CLEAR_VALUE = 0x0B73 - DEPTH_FUNC = 0x0B74 - DEPTH_RANGE = 0x0B70 - DEPTH_SCALE = 0x0D1E - DEPTH_WRITEMASK = 0x0B72 - DOUBLEBUFFER = 0x0C32 - DRAW_BUFFER = 0x0C01 - EDGE_FLAG = 0x0B43 - EDGE_FLAG_ARRAY_STRIDE = 0x808C - FEEDBACK_BUFFER_SIZE = 0x0DF1 - FEEDBACK_BUFFER_TYPE = 0x0DF2 - FOG_HINT = 0x0C54 - FRONT_FACE = 0x0B46 - GREEN_BIAS = 0x0D19 - GREEN_BITS = 0x0D53 - GREEN_SCALE = 0x0D18 - INDEX_ARRAY_STRIDE = 0x8086 - INDEX_ARRAY_TYPE = 0x8085 - INDEX_BITS = 0x0D51 - INDEX_CLEAR_VALUE = 0x0C20 - INDEX_MODE = 0x0C30 - INDEX_OFFSET = 0x0D13 - INDEX_SHIFT = 0x0D12 - INDEX_WRITEMASK = 0x0C21 - LIGHT_MODEL_AMBIENT = 0x0B53 - LIGHT_MODEL_COLOR_CONTROL = 0x81F8 - LIGHT_MODEL_LOCAL_VIEWER = 0x0B51 - LIGHT_MODEL_TWO_SIDE = 0x0B52 - LINE_SMOOTH_HINT = 0x0C52 - LINE_STIPPLE_PATTERN = 0x0B25 - LINE_STIPPLE_REPEAT = 0x0B26 - LINE_WIDTH = 0x0B21 - LINE_WIDTH_GRANULARITY = 0x0B23 - LINE_WIDTH_RANGE = 0x0B22 - LIST_BASE = 0x0B32 - LIST_INDEX = 0x0B33 - LIST_MODE = 0x0B30 - LOGIC_OP_MODE = 0x0BF0 - MAP1_GRID_DOMAIN = 0x0DD0 - MAP1_GRID_SEGMENTS = 0x0DD1 - MAP2_GRID_DOMAIN = 0x0DD2 - MAP2_GRID_SEGMENTS = 0x0DD3 - MAP_COLOR = 0x0D10 - MAP_STENCIL = 0x0D11 - MATRIX_MODE = 0x0BA0 - MAX_ATTRIB_STACK_DEPTH = 0x0D35 - MAX_CLIENT_ATTRIB_STACK_DEPTH = 0x0D3B - MAX_CLIP_DISTANCES = 0x0D32 - MAX_CLIP_PLANES = 0x0D32 - MAX_EVAL_ORDER = 0x0D30 - MAX_LIGHTS = 0x0D31 - MAX_LIST_NESTING = 0x0B31 - MAX_MODELVIEW_STACK_DEPTH = 0x0D36 - MAX_NAME_STACK_DEPTH = 0x0D37 - MAX_PIXEL_MAP_TABLE = 0x0D34 - MAX_PROJECTION_STACK_DEPTH = 0x0D38 - MAX_TEXTURE_SIZE = 0x0D33 - MAX_TEXTURE_STACK_DEPTH = 0x0D39 - MAX_VIEWPORT_DIMS = 0x0D3A - MODELVIEW_MATRIX = 0x0BA6 - MODELVIEW_STACK_DEPTH = 0x0BA3 - NAME_STACK_DEPTH = 0x0D70 - NORMAL_ARRAY_STRIDE = 0x807F - NORMAL_ARRAY_TYPE = 0x807E - PACK_ALIGNMENT = 0x0D05 - PACK_LSB_FIRST = 0x0D01 - PACK_ROW_LENGTH = 0x0D02 - PACK_SKIP_PIXELS = 0x0D04 - PACK_SKIP_ROWS = 0x0D03 - PACK_SWAP_BYTES = 0x0D00 - PERSPECTIVE_CORRECTION_HINT = 0x0C50 - PIXEL_MAP_A_TO_A_SIZE = 0x0CB9 - PIXEL_MAP_B_TO_B_SIZE = 0x0CB8 - PIXEL_MAP_G_TO_G_SIZE = 0x0CB7 - PIXEL_MAP_I_TO_A_SIZE = 0x0CB5 - PIXEL_MAP_I_TO_B_SIZE = 0x0CB4 - PIXEL_MAP_I_TO_G_SIZE = 0x0CB3 - PIXEL_MAP_I_TO_I_SIZE = 0x0CB0 - PIXEL_MAP_I_TO_R_SIZE = 0x0CB2 - PIXEL_MAP_R_TO_R_SIZE = 0x0CB6 - PIXEL_MAP_S_TO_S_SIZE = 0x0CB1 - POINT_SIZE = 0x0B11 - POINT_SIZE_GRANULARITY = 0x0B13 - POINT_SIZE_RANGE = 0x0B12 - POINT_SMOOTH_HINT = 0x0C51 - POLYGON_MODE = 0x0B40 - POLYGON_OFFSET_FACTOR = 0x8038 - POLYGON_OFFSET_UNITS = 0x2A00 - POLYGON_SMOOTH_HINT = 0x0C53 - PROJECTION_MATRIX = 0x0BA7 - PROJECTION_STACK_DEPTH = 0x0BA4 - READ_BUFFER = 0x0C02 - RED_BIAS = 0x0D15 - RED_BITS = 0x0D52 - RED_SCALE = 0x0D14 - RENDER_MODE = 0x0C40 - RGBA_MODE = 0x0C31 - SCISSOR_BOX = 0x0C10 - SELECTION_BUFFER_SIZE = 0x0DF4 - SHADE_MODEL = 0x0B54 - SMOOTH_LINE_WIDTH_GRANULARITY = 0x0B23 - SMOOTH_LINE_WIDTH_RANGE = 0x0B22 - SMOOTH_POINT_SIZE_GRANULARITY = 0x0B13 - SMOOTH_POINT_SIZE_RANGE = 0x0B12 - STENCIL_BITS = 0x0D57 - STENCIL_CLEAR_VALUE = 0x0B91 - STENCIL_FAIL = 0x0B94 - STENCIL_FUNC = 0x0B92 - STENCIL_PASS_DEPTH_FAIL = 0x0B95 - STENCIL_PASS_DEPTH_PASS = 0x0B96 - STENCIL_REF = 0x0B97 - STENCIL_VALUE_MASK = 0x0B93 - STENCIL_WRITEMASK = 0x0B98 - STEREO = 0x0C33 - SUBPIXEL_BITS = 0x0D50 - TEXTURE_BINDING_1D = 0x8068 - TEXTURE_BINDING_2D = 0x8069 - TEXTURE_BINDING_3D = 0x806A - TEXTURE_COORD_ARRAY_SIZE = 0x8088 - TEXTURE_COORD_ARRAY_STRIDE = 0x808A - TEXTURE_COORD_ARRAY_TYPE = 0x8089 - TEXTURE_MATRIX = 0x0BA8 - TEXTURE_STACK_DEPTH = 0x0BA5 - UNPACK_ALIGNMENT = 0x0CF5 - UNPACK_LSB_FIRST = 0x0CF1 - UNPACK_ROW_LENGTH = 0x0CF2 - UNPACK_SKIP_PIXELS = 0x0CF4 - UNPACK_SKIP_ROWS = 0x0CF3 - UNPACK_SWAP_BYTES = 0x0CF0 - VERTEX_ARRAY_SIZE = 0x807A - VERTEX_ARRAY_STRIDE = 0x807C - VERTEX_ARRAY_TYPE = 0x807B - VIEWPORT = 0x0BA2 - ZOOM_X = 0x0D16 - ZOOM_Y = 0x0D17 - - COLOR_ARRAY_POINTER = 0x8090 - EDGE_FLAG_ARRAY_POINTER = 0x8093 - FEEDBACK_BUFFER_POINTER = 0x0DF0 - INDEX_ARRAY_POINTER = 0x8091 - NORMAL_ARRAY_POINTER = 0x808F - SELECTION_BUFFER_POINTER = 0x0DF3 - TEXTURE_COORD_ARRAY_POINTER = 0x8092 - VERTEX_ARRAY_POINTER = 0x808E - - TEXTURE_ALPHA_SIZE = 0x805F - TEXTURE_BLUE_SIZE = 0x805E - TEXTURE_BORDER = 0x1005 - TEXTURE_BORDER_COLOR = 0x1004 - TEXTURE_COMPONENTS = 0x1003 - TEXTURE_GREEN_SIZE = 0x805D - TEXTURE_HEIGHT = 0x1001 - TEXTURE_INTENSITY_SIZE = 0x8061 - TEXTURE_INTERNAL_FORMAT = 0x1003 - TEXTURE_LUMINANCE_SIZE = 0x8060 - TEXTURE_MAG_FILTER = 0x2800 - TEXTURE_MIN_FILTER = 0x2801 - TEXTURE_PRIORITY = 0x8066 - TEXTURE_RED_SIZE = 0x805C - TEXTURE_RESIDENT = 0x8067 - TEXTURE_WIDTH = 0x1000 - TEXTURE_WRAP_S = 0x2802 - TEXTURE_WRAP_T = 0x2803 - - DONT_CARE = 0x1100 - FASTEST = 0x1101 - NICEST = 0x1102 - - FRAGMENT_SHADER_DERIVATIVE_HINT = 0x8B8B - GENERATE_MIPMAP_HINT = 0x8192 - PROGRAM_BINARY_RETRIEVABLE_HINT = 0x8257 - TEXTURE_COMPRESSION_HINT = 0x84EF - - C3F_V3F = 0x2A24 - C4F_N3F_V3F = 0x2A26 - C4UB_V2F = 0x2A22 - C4UB_V3F = 0x2A23 - N3F_V3F = 0x2A25 - T2F_C3F_V3F = 0x2A2A - T2F_C4F_N3F_V3F = 0x2A2C - T2F_C4UB_V3F = 0x2A29 - T2F_N3F_V3F = 0x2A2B - T2F_V3F = 0x2A27 - T4F_C4F_N3F_V4F = 0x2A2D - T4F_V4F = 0x2A28 - V2F = 0x2A20 - V3F = 0x2A21 - - MODULATE = 0x2100 - REPLACE = 0x1E01 - - SEPARATE_SPECULAR_COLOR = 0x81FA - SINGLE_COLOR = 0x81F9 - - CONSTANT_ATTENUATION = 0x1207 - LINEAR_ATTENUATION = 0x1208 - POSITION = 0x1203 - QUADRATIC_ATTENUATION = 0x1209 - SPOT_CUTOFF = 0x1206 - SPOT_DIRECTION = 0x1204 - SPOT_EXPONENT = 0x1205 - - COMPILE = 0x1300 - COMPILE_AND_EXECUTE = 0x1301 - - AND = 0x1501 - AND_INVERTED = 0x1504 - AND_REVERSE = 0x1502 - CLEAR = 0x1500 - COPY = 0x1503 - COPY_INVERTED = 0x150C - EQUIV = 0x1509 - INVERT = 0x150A - NAND = 0x150E - NOOP = 0x1505 - NOR = 0x1508 - OR = 0x1507 - OR_INVERTED = 0x150D - OR_REVERSE = 0x150B - SET = 0x150F - XOR = 0x1506 - - MAP_FLUSH_EXPLICIT_BIT = 0x0010 - MAP_INVALIDATE_BUFFER_BIT = 0x0008 - MAP_INVALIDATE_RANGE_BIT = 0x0004 - MAP_READ_BIT = 0x0001 - MAP_UNSYNCHRONIZED_BIT = 0x0020 - MAP_WRITE_BIT = 0x0002 - - COLOR_INDEXES = 0x1603 - SHININESS = 0x1601 - - MODELVIEW = 0x1700 - PROJECTION = 0x1701 - TEXTURE = 0x1702 - - LINE = 0x1B01 - POINT = 0x1B00 - - FILL = 0x1B02 - - COLOR = 0x1800 - DEPTH = 0x1801 - STENCIL = 0x1802 - - ALPHA = 0x1906 - BLUE = 0x1905 - COLOR_INDEX = 0x1900 - DEPTH_COMPONENT = 0x1902 - GREEN = 0x1904 - LUMINANCE = 0x1909 - LUMINANCE_ALPHA = 0x190A - RED = 0x1903 - RGB = 0x1907 - RGBA = 0x1908 - STENCIL_INDEX = 0x1901 - - ALPHA12 = 0x803D - ALPHA16 = 0x803E - ALPHA4 = 0x803B - ALPHA8 = 0x803C - INTENSITY = 0x8049 - INTENSITY12 = 0x804C - INTENSITY16 = 0x804D - INTENSITY4 = 0x804A - INTENSITY8 = 0x804B - LUMINANCE12 = 0x8041 - LUMINANCE12_ALPHA12 = 0x8047 - LUMINANCE12_ALPHA4 = 0x8046 - LUMINANCE16 = 0x8042 - LUMINANCE16_ALPHA16 = 0x8048 - LUMINANCE4 = 0x803F - LUMINANCE4_ALPHA4 = 0x8043 - LUMINANCE6_ALPHA2 = 0x8044 - LUMINANCE8 = 0x8040 - LUMINANCE8_ALPHA8 = 0x8045 - R3_G3_B2 = 0x2A10 - RGB10 = 0x8052 - RGB10_A2 = 0x8059 - RGB12 = 0x8053 - RGB16 = 0x8054 - RGB4 = 0x804F - RGB5 = 0x8050 - RGB5_A1 = 0x8057 - RGB8 = 0x8051 - RGBA12 = 0x805A - RGBA16 = 0x805B - RGBA2 = 0x8055 - RGBA4 = 0x8056 - RGBA8 = 0x8058 - - PACK_IMAGE_HEIGHT = 0x806C - PACK_SKIP_IMAGES = 0x806B - UNPACK_IMAGE_HEIGHT = 0x806E - UNPACK_SKIP_IMAGES = 0x806D - - BITMAP = 0x1A00 - UNSIGNED_BYTE_3_3_2 = 0x8032 - UNSIGNED_INT_10_10_10_2 = 0x8036 - UNSIGNED_INT_8_8_8_8 = 0x8035 - UNSIGNED_SHORT_4_4_4_4 = 0x8033 - UNSIGNED_SHORT_5_5_5_1 = 0x8034 - - POINT_DISTANCE_ATTENUATION = 0x8129 - POINT_FADE_THRESHOLD_SIZE = 0x8128 - POINT_SIZE_MAX = 0x8127 - POINT_SIZE_MIN = 0x8126 - - LINES = 0x0001 - LINES_ADJACENCY = 0x000A - LINE_LOOP = 0x0002 - LINE_STRIP = 0x0003 - LINE_STRIP_ADJACENCY = 0x000B - PATCHES = 0x000E - POINTS = 0x0000 - POLYGON = 0x0009 - QUADS = 0x0007 - QUAD_STRIP = 0x0008 - TRIANGLES = 0x0004 - TRIANGLES_ADJACENCY = 0x000C - TRIANGLE_FAN = 0x0006 - TRIANGLE_STRIP = 0x0005 - TRIANGLE_STRIP_ADJACENCY = 0x000D - - FEEDBACK = 0x1C01 - RENDER = 0x1C00 - SELECT = 0x1C02 - - FLAT = 0x1D00 - SMOOTH = 0x1D01 - - DECR = 0x1E03 - INCR = 0x1E02 - KEEP = 0x1E00 - - EXTENSIONS = 0x1F03 - RENDERER = 0x1F01 - VENDOR = 0x1F00 - VERSION = 0x1F02 - - S = 0x2000 - T = 0x2001 - R = 0x2002 - Q = 0x2003 - - DECAL = 0x2101 - - TEXTURE_ENV_COLOR = 0x2201 - TEXTURE_ENV_MODE = 0x2200 - - TEXTURE_ENV = 0x2300 - - EYE_LINEAR = 0x2400 - OBJECT_LINEAR = 0x2401 - SPHERE_MAP = 0x2402 - - EYE_PLANE = 0x2502 - OBJECT_PLANE = 0x2501 - TEXTURE_GEN_MODE = 0x2500 - - NEAREST = 0x2600 - - LINEAR_MIPMAP_LINEAR = 0x2703 - LINEAR_MIPMAP_NEAREST = 0x2701 - NEAREST_MIPMAP_LINEAR = 0x2702 - NEAREST_MIPMAP_NEAREST = 0x2700 - - GENERATE_MIPMAP = 0x8191 - TEXTURE_WRAP_R = 0x8072 - - PROXY_TEXTURE_1D = 0x8063 - PROXY_TEXTURE_2D = 0x8064 - PROXY_TEXTURE_3D = 0x8070 - TEXTURE_3D = 0x806F - TEXTURE_BASE_LEVEL = 0x813C - TEXTURE_MAX_LEVEL = 0x813D - TEXTURE_MAX_LOD = 0x813B - TEXTURE_MIN_LOD = 0x813A - - CLAMP = 0x2900 - CLAMP_TO_BORDER = 0x812D - CLAMP_TO_EDGE = 0x812F - REPEAT = 0x2901 - - VERTEX_SHADER_BIT = 0x00000001 - FRAGMENT_SHADER_BIT = 0x00000002 - GEOMETRY_SHADER_BIT = 0x00000004 - TESS_CONTROL_SHADER_BIT = 0x00000008 - TESS_EVALUATION_SHADER_BIT = 0x00000010 - ALL_SHADER_BITS = 0xFFFFFFFF - - SYNC_FLUSH_COMMANDS_BIT = 0x00000001 - INVALID_INDEX = 0xFFFFFFFF - TIMEOUT_IGNORED = 0xFFFFFFFFFFFFFFFF - CONSTANT_COLOR = 0x8001 - ONE_MINUS_CONSTANT_COLOR = 0x8002 - CONSTANT_ALPHA = 0x8003 - ONE_MINUS_CONSTANT_ALPHA = 0x8004 - FUNC_ADD = 0x8006 - MIN = 0x8007 - MAX = 0x8008 - BLEND_EQUATION_RGB = 0x8009 - FUNC_SUBTRACT = 0x800A - FUNC_REVERSE_SUBTRACT = 0x800B - RESCALE_NORMAL = 0x803A - TEXTURE_DEPTH = 0x8071 - MAX_3D_TEXTURE_SIZE = 0x8073 - MULTISAMPLE = 0x809D - SAMPLE_ALPHA_TO_COVERAGE = 0x809E - SAMPLE_ALPHA_TO_ONE = 0x809F - SAMPLE_COVERAGE = 0x80A0 - SAMPLE_BUFFERS = 0x80A8 - SAMPLES = 0x80A9 - SAMPLE_COVERAGE_VALUE = 0x80AA - SAMPLE_COVERAGE_INVERT = 0x80AB - BLEND_DST_RGB = 0x80C8 - BLEND_SRC_RGB = 0x80C9 - BLEND_DST_ALPHA = 0x80CA - BLEND_SRC_ALPHA = 0x80CB - BGR = 0x80E0 - BGRA = 0x80E1 - MAX_ELEMENTS_VERTICES = 0x80E8 - MAX_ELEMENTS_INDICES = 0x80E9 - DEPTH_COMPONENT16 = 0x81A5 - DEPTH_COMPONENT24 = 0x81A6 - DEPTH_COMPONENT32 = 0x81A7 - FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING = 0x8210 - FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE = 0x8211 - FRAMEBUFFER_ATTACHMENT_RED_SIZE = 0x8212 - FRAMEBUFFER_ATTACHMENT_GREEN_SIZE = 0x8213 - FRAMEBUFFER_ATTACHMENT_BLUE_SIZE = 0x8214 - FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE = 0x8215 - FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE = 0x8216 - FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE = 0x8217 - FRAMEBUFFER_DEFAULT = 0x8218 - FRAMEBUFFER_UNDEFINED = 0x8219 - DEPTH_STENCIL_ATTACHMENT = 0x821A - MAJOR_VERSION = 0x821B - MINOR_VERSION = 0x821C - NUM_EXTENSIONS = 0x821D - CONTEXT_FLAGS = 0x821E - INDEX = 0x8222 - COMPRESSED_RED = 0x8225 - COMPRESSED_RG = 0x8226 - RG = 0x8227 - RG_INTEGER = 0x8228 - R8 = 0x8229 - R16 = 0x822A - RG8 = 0x822B - RG16 = 0x822C - R16F = 0x822D - R32F = 0x822E - RG16F = 0x822F - RG32F = 0x8230 - R8I = 0x8231 - R8UI = 0x8232 - R16I = 0x8233 - R16UI = 0x8234 - R32I = 0x8235 - R32UI = 0x8236 - RG8I = 0x8237 - RG8UI = 0x8238 - RG16I = 0x8239 - RG16UI = 0x823A - RG32I = 0x823B - RG32UI = 0x823C - PROGRAM_SEPARABLE = 0x8258 - ACTIVE_PROGRAM = 0x8259 - PROGRAM_PIPELINE_BINDING = 0x825A - MAX_VIEWPORTS = 0x825B - VIEWPORT_SUBPIXEL_BITS = 0x825C - VIEWPORT_BOUNDS_RANGE = 0x825D - LAYER_PROVOKING_VERTEX = 0x825E - VIEWPORT_INDEX_PROVOKING_VERTEX = 0x825F - UNDEFINED_VERTEX = 0x8260 - UNSIGNED_BYTE_2_3_3_REV = 0x8362 - UNSIGNED_SHORT_5_6_5 = 0x8363 - UNSIGNED_SHORT_5_6_5_REV = 0x8364 - UNSIGNED_SHORT_4_4_4_4_REV = 0x8365 - UNSIGNED_SHORT_1_5_5_5_REV = 0x8366 - UNSIGNED_INT_8_8_8_8_REV = 0x8367 - UNSIGNED_INT_2_10_10_10_REV = 0x8368 - MIRRORED_REPEAT = 0x8370 - FOG_COORDINATE_SOURCE = 0x8450 - FOG_COORD_SRC = 0x8450 - FOG_COORDINATE = 0x8451 - FOG_COORD = 0x8451 - FRAGMENT_DEPTH = 0x8452 - CURRENT_FOG_COORDINATE = 0x8453 - CURRENT_FOG_COORD = 0x8453 - FOG_COORDINATE_ARRAY_TYPE = 0x8454 - FOG_COORD_ARRAY_TYPE = 0x8454 - FOG_COORDINATE_ARRAY_STRIDE = 0x8455 - FOG_COORD_ARRAY_STRIDE = 0x8455 - FOG_COORDINATE_ARRAY_POINTER = 0x8456 - FOG_COORD_ARRAY_POINTER = 0x8456 - FOG_COORDINATE_ARRAY = 0x8457 - FOG_COORD_ARRAY = 0x8457 - COLOR_SUM = 0x8458 - CURRENT_SECONDARY_COLOR = 0x8459 - SECONDARY_COLOR_ARRAY_SIZE = 0x845A - SECONDARY_COLOR_ARRAY_TYPE = 0x845B - SECONDARY_COLOR_ARRAY_STRIDE = 0x845C - SECONDARY_COLOR_ARRAY_POINTER = 0x845D - SECONDARY_COLOR_ARRAY = 0x845E - CURRENT_RASTER_SECONDARY_COLOR = 0x845F - TEXTURE0 = 0x84C0 - TEXTURE1 = 0x84C1 - TEXTURE2 = 0x84C2 - TEXTURE3 = 0x84C3 - TEXTURE4 = 0x84C4 - TEXTURE5 = 0x84C5 - TEXTURE6 = 0x84C6 - TEXTURE7 = 0x84C7 - TEXTURE8 = 0x84C8 - TEXTURE9 = 0x84C9 - TEXTURE10 = 0x84CA - TEXTURE11 = 0x84CB - TEXTURE12 = 0x84CC - TEXTURE13 = 0x84CD - TEXTURE14 = 0x84CE - TEXTURE15 = 0x84CF - TEXTURE16 = 0x84D0 - TEXTURE17 = 0x84D1 - TEXTURE18 = 0x84D2 - TEXTURE19 = 0x84D3 - TEXTURE20 = 0x84D4 - TEXTURE21 = 0x84D5 - TEXTURE22 = 0x84D6 - TEXTURE23 = 0x84D7 - TEXTURE24 = 0x84D8 - TEXTURE25 = 0x84D9 - TEXTURE26 = 0x84DA - TEXTURE27 = 0x84DB - TEXTURE28 = 0x84DC - TEXTURE29 = 0x84DD - TEXTURE30 = 0x84DE - TEXTURE31 = 0x84DF - ACTIVE_TEXTURE = 0x84E0 - CLIENT_ACTIVE_TEXTURE = 0x84E1 - MAX_TEXTURE_UNITS = 0x84E2 - TRANSPOSE_MODELVIEW_MATRIX = 0x84E3 - TRANSPOSE_PROJECTION_MATRIX = 0x84E4 - TRANSPOSE_TEXTURE_MATRIX = 0x84E5 - TRANSPOSE_COLOR_MATRIX = 0x84E6 - SUBTRACT = 0x84E7 - MAX_RENDERBUFFER_SIZE = 0x84E8 - COMPRESSED_ALPHA = 0x84E9 - COMPRESSED_LUMINANCE = 0x84EA - COMPRESSED_LUMINANCE_ALPHA = 0x84EB - COMPRESSED_INTENSITY = 0x84EC - COMPRESSED_RGB = 0x84ED - COMPRESSED_RGBA = 0x84EE - UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER = 0x84F0 - UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER = 0x84F1 - TEXTURE_RECTANGLE = 0x84F5 - TEXTURE_BINDING_RECTANGLE = 0x84F6 - PROXY_TEXTURE_RECTANGLE = 0x84F7 - MAX_RECTANGLE_TEXTURE_SIZE = 0x84F8 - DEPTH_STENCIL = 0x84F9 - UNSIGNED_INT_24_8 = 0x84FA - MAX_TEXTURE_LOD_BIAS = 0x84FD - TEXTURE_FILTER_CONTROL = 0x8500 - TEXTURE_LOD_BIAS = 0x8501 - INCR_WRAP = 0x8507 - DECR_WRAP = 0x8508 - NORMAL_MAP = 0x8511 - REFLECTION_MAP = 0x8512 - TEXTURE_CUBE_MAP = 0x8513 - TEXTURE_BINDING_CUBE_MAP = 0x8514 - TEXTURE_CUBE_MAP_POSITIVE_X = 0x8515 - TEXTURE_CUBE_MAP_NEGATIVE_X = 0x8516 - TEXTURE_CUBE_MAP_POSITIVE_Y = 0x8517 - TEXTURE_CUBE_MAP_NEGATIVE_Y = 0x8518 - TEXTURE_CUBE_MAP_POSITIVE_Z = 0x8519 - TEXTURE_CUBE_MAP_NEGATIVE_Z = 0x851A - PROXY_TEXTURE_CUBE_MAP = 0x851B - MAX_CUBE_MAP_TEXTURE_SIZE = 0x851C - COMBINE = 0x8570 - COMBINE_RGB = 0x8571 - COMBINE_ALPHA = 0x8572 - RGB_SCALE = 0x8573 - ADD_SIGNED = 0x8574 - INTERPOLATE = 0x8575 - CONSTANT = 0x8576 - PRIMARY_COLOR = 0x8577 - PREVIOUS = 0x8578 - SOURCE0_RGB = 0x8580 - SRC0_RGB = 0x8580 - SOURCE1_RGB = 0x8581 - SRC1_RGB = 0x8581 - SOURCE2_RGB = 0x8582 - SRC2_RGB = 0x8582 - SOURCE0_ALPHA = 0x8588 - SRC0_ALPHA = 0x8588 - SOURCE1_ALPHA = 0x8589 - SRC1_ALPHA = 0x8589 - SOURCE2_ALPHA = 0x858A - SRC2_ALPHA = 0x858A - OPERAND0_RGB = 0x8590 - OPERAND1_RGB = 0x8591 - OPERAND2_RGB = 0x8592 - OPERAND0_ALPHA = 0x8598 - OPERAND1_ALPHA = 0x8599 - OPERAND2_ALPHA = 0x859A - VERTEX_ARRAY_BINDING = 0x85B5 - VERTEX_ATTRIB_ARRAY_ENABLED = 0x8622 - VERTEX_ATTRIB_ARRAY_SIZE = 0x8623 - VERTEX_ATTRIB_ARRAY_STRIDE = 0x8624 - VERTEX_ATTRIB_ARRAY_TYPE = 0x8625 - CURRENT_VERTEX_ATTRIB = 0x8626 - VERTEX_PROGRAM_POINT_SIZE = 0x8642 - PROGRAM_POINT_SIZE = 0x8642 - VERTEX_PROGRAM_TWO_SIDE = 0x8643 - VERTEX_ATTRIB_ARRAY_POINTER = 0x8645 - DEPTH_CLAMP = 0x864F - TEXTURE_COMPRESSED_IMAGE_SIZE = 0x86A0 - TEXTURE_COMPRESSED = 0x86A1 - NUM_COMPRESSED_TEXTURE_FORMATS = 0x86A2 - COMPRESSED_TEXTURE_FORMATS = 0x86A3 - DOT3_RGB = 0x86AE - DOT3_RGBA = 0x86AF - PROGRAM_BINARY_LENGTH = 0x8741 - BUFFER_SIZE = 0x8764 - BUFFER_USAGE = 0x8765 - NUM_PROGRAM_BINARY_FORMATS = 0x87FE - PROGRAM_BINARY_FORMATS = 0x87FF - STENCIL_BACK_FUNC = 0x8800 - STENCIL_BACK_FAIL = 0x8801 - STENCIL_BACK_PASS_DEPTH_FAIL = 0x8802 - STENCIL_BACK_PASS_DEPTH_PASS = 0x8803 - RGBA32F = 0x8814 - RGB32F = 0x8815 - RGBA16F = 0x881A - RGB16F = 0x881B - MAX_DRAW_BUFFERS = 0x8824 - DRAW_BUFFER0 = 0x8825 - DRAW_BUFFER1 = 0x8826 - DRAW_BUFFER2 = 0x8827 - DRAW_BUFFER3 = 0x8828 - DRAW_BUFFER4 = 0x8829 - DRAW_BUFFER5 = 0x882A - DRAW_BUFFER6 = 0x882B - DRAW_BUFFER7 = 0x882C - DRAW_BUFFER8 = 0x882D - DRAW_BUFFER9 = 0x882E - DRAW_BUFFER10 = 0x882F - DRAW_BUFFER11 = 0x8830 - DRAW_BUFFER12 = 0x8831 - DRAW_BUFFER13 = 0x8832 - DRAW_BUFFER14 = 0x8833 - DRAW_BUFFER15 = 0x8834 - BLEND_EQUATION_ALPHA = 0x883D - TEXTURE_DEPTH_SIZE = 0x884A - DEPTH_TEXTURE_MODE = 0x884B - TEXTURE_COMPARE_MODE = 0x884C - TEXTURE_COMPARE_FUNC = 0x884D - COMPARE_R_TO_TEXTURE = 0x884E - COMPARE_REF_TO_TEXTURE = 0x884E - TEXTURE_CUBE_MAP_SEAMLESS = 0x884F - POINT_SPRITE = 0x8861 - COORD_REPLACE = 0x8862 - QUERY_COUNTER_BITS = 0x8864 - CURRENT_QUERY = 0x8865 - QUERY_RESULT = 0x8866 - QUERY_RESULT_AVAILABLE = 0x8867 - MAX_VERTEX_ATTRIBS = 0x8869 - VERTEX_ATTRIB_ARRAY_NORMALIZED = 0x886A - MAX_TESS_CONTROL_INPUT_COMPONENTS = 0x886C - MAX_TESS_EVALUATION_INPUT_COMPONENTS = 0x886D - MAX_TEXTURE_COORDS = 0x8871 - MAX_TEXTURE_IMAGE_UNITS = 0x8872 - GEOMETRY_SHADER_INVOCATIONS = 0x887F - ARRAY_BUFFER = 0x8892 - ELEMENT_ARRAY_BUFFER = 0x8893 - ARRAY_BUFFER_BINDING = 0x8894 - ELEMENT_ARRAY_BUFFER_BINDING = 0x8895 - VERTEX_ARRAY_BUFFER_BINDING = 0x8896 - NORMAL_ARRAY_BUFFER_BINDING = 0x8897 - COLOR_ARRAY_BUFFER_BINDING = 0x8898 - INDEX_ARRAY_BUFFER_BINDING = 0x8899 - TEXTURE_COORD_ARRAY_BUFFER_BINDING = 0x889A - EDGE_FLAG_ARRAY_BUFFER_BINDING = 0x889B - SECONDARY_COLOR_ARRAY_BUFFER_BINDING = 0x889C - FOG_COORDINATE_ARRAY_BUFFER_BINDING = 0x889D - FOG_COORD_ARRAY_BUFFER_BINDING = 0x889D - WEIGHT_ARRAY_BUFFER_BINDING = 0x889E - VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = 0x889F - READ_ONLY = 0x88B8 - WRITE_ONLY = 0x88B9 - READ_WRITE = 0x88BA - BUFFER_ACCESS = 0x88BB - BUFFER_MAPPED = 0x88BC - BUFFER_MAP_POINTER = 0x88BD - TIME_ELAPSED = 0x88BF - STREAM_DRAW = 0x88E0 - STREAM_READ = 0x88E1 - STREAM_COPY = 0x88E2 - STATIC_DRAW = 0x88E4 - STATIC_READ = 0x88E5 - STATIC_COPY = 0x88E6 - DYNAMIC_DRAW = 0x88E8 - DYNAMIC_READ = 0x88E9 - DYNAMIC_COPY = 0x88EA - PIXEL_PACK_BUFFER = 0x88EB - PIXEL_UNPACK_BUFFER = 0x88EC - PIXEL_PACK_BUFFER_BINDING = 0x88ED - PIXEL_UNPACK_BUFFER_BINDING = 0x88EF - DEPTH24_STENCIL8 = 0x88F0 - TEXTURE_STENCIL_SIZE = 0x88F1 - SRC1_COLOR = 0x88F9 - ONE_MINUS_SRC1_COLOR = 0x88FA - ONE_MINUS_SRC1_ALPHA = 0x88FB - MAX_DUAL_SOURCE_DRAW_BUFFERS = 0x88FC - VERTEX_ATTRIB_ARRAY_INTEGER = 0x88FD - VERTEX_ATTRIB_ARRAY_DIVISOR = 0x88FE - MAX_ARRAY_TEXTURE_LAYERS = 0x88FF - MIN_PROGRAM_TEXEL_OFFSET = 0x8904 - MAX_PROGRAM_TEXEL_OFFSET = 0x8905 - SAMPLES_PASSED = 0x8914 - GEOMETRY_VERTICES_OUT = 0x8916 - GEOMETRY_INPUT_TYPE = 0x8917 - GEOMETRY_OUTPUT_TYPE = 0x8918 - SAMPLER_BINDING = 0x8919 - CLAMP_VERTEX_COLOR = 0x891A - CLAMP_FRAGMENT_COLOR = 0x891B - CLAMP_READ_COLOR = 0x891C - FIXED_ONLY = 0x891D - UNIFORM_BUFFER = 0x8A11 - UNIFORM_BUFFER_BINDING = 0x8A28 - UNIFORM_BUFFER_START = 0x8A29 - UNIFORM_BUFFER_SIZE = 0x8A2A - MAX_VERTEX_UNIFORM_BLOCKS = 0x8A2B - MAX_GEOMETRY_UNIFORM_BLOCKS = 0x8A2C - MAX_FRAGMENT_UNIFORM_BLOCKS = 0x8A2D - MAX_COMBINED_UNIFORM_BLOCKS = 0x8A2E - MAX_UNIFORM_BUFFER_BINDINGS = 0x8A2F - MAX_UNIFORM_BLOCK_SIZE = 0x8A30 - MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS = 0x8A31 - MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS = 0x8A32 - MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS = 0x8A33 - UNIFORM_BUFFER_OFFSET_ALIGNMENT = 0x8A34 - ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH = 0x8A35 - ACTIVE_UNIFORM_BLOCKS = 0x8A36 - UNIFORM_TYPE = 0x8A37 - UNIFORM_SIZE = 0x8A38 - UNIFORM_NAME_LENGTH = 0x8A39 - UNIFORM_BLOCK_INDEX = 0x8A3A - UNIFORM_OFFSET = 0x8A3B - UNIFORM_ARRAY_STRIDE = 0x8A3C - UNIFORM_MATRIX_STRIDE = 0x8A3D - UNIFORM_IS_ROW_MAJOR = 0x8A3E - UNIFORM_BLOCK_BINDING = 0x8A3F - UNIFORM_BLOCK_DATA_SIZE = 0x8A40 - UNIFORM_BLOCK_NAME_LENGTH = 0x8A41 - UNIFORM_BLOCK_ACTIVE_UNIFORMS = 0x8A42 - UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES = 0x8A43 - UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER = 0x8A44 - UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER = 0x8A45 - UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER = 0x8A46 - FRAGMENT_SHADER = 0x8B30 - VERTEX_SHADER = 0x8B31 - MAX_FRAGMENT_UNIFORM_COMPONENTS = 0x8B49 - MAX_VERTEX_UNIFORM_COMPONENTS = 0x8B4A - MAX_VARYING_FLOATS = 0x8B4B - MAX_VARYING_COMPONENTS = 0x8B4B - MAX_VERTEX_TEXTURE_IMAGE_UNITS = 0x8B4C - MAX_COMBINED_TEXTURE_IMAGE_UNITS = 0x8B4D - SHADER_TYPE = 0x8B4F - FLOAT_VEC2 = 0x8B50 - FLOAT_VEC3 = 0x8B51 - FLOAT_VEC4 = 0x8B52 - INT_VEC2 = 0x8B53 - INT_VEC3 = 0x8B54 - INT_VEC4 = 0x8B55 - BOOL = 0x8B56 - BOOL_VEC2 = 0x8B57 - BOOL_VEC3 = 0x8B58 - BOOL_VEC4 = 0x8B59 - FLOAT_MAT2 = 0x8B5A - FLOAT_MAT3 = 0x8B5B - FLOAT_MAT4 = 0x8B5C - SAMPLER_1D = 0x8B5D - SAMPLER_2D = 0x8B5E - SAMPLER_3D = 0x8B5F - SAMPLER_CUBE = 0x8B60 - SAMPLER_1D_SHADOW = 0x8B61 - SAMPLER_2D_SHADOW = 0x8B62 - SAMPLER_2D_RECT = 0x8B63 - SAMPLER_2D_RECT_SHADOW = 0x8B64 - FLOAT_MAT2x3 = 0x8B65 - FLOAT_MAT2x4 = 0x8B66 - FLOAT_MAT3x2 = 0x8B67 - FLOAT_MAT3x4 = 0x8B68 - FLOAT_MAT4x2 = 0x8B69 - FLOAT_MAT4x3 = 0x8B6A - DELETE_STATUS = 0x8B80 - COMPILE_STATUS = 0x8B81 - LINK_STATUS = 0x8B82 - VALIDATE_STATUS = 0x8B83 - INFO_LOG_LENGTH = 0x8B84 - ATTACHED_SHADERS = 0x8B85 - ACTIVE_UNIFORMS = 0x8B86 - ACTIVE_UNIFORM_MAX_LENGTH = 0x8B87 - SHADER_SOURCE_LENGTH = 0x8B88 - ACTIVE_ATTRIBUTES = 0x8B89 - ACTIVE_ATTRIBUTE_MAX_LENGTH = 0x8B8A - SHADING_LANGUAGE_VERSION = 0x8B8C - CURRENT_PROGRAM = 0x8B8D - IMPLEMENTATION_COLOR_READ_TYPE = 0x8B9A - IMPLEMENTATION_COLOR_READ_FORMAT = 0x8B9B - TEXTURE_RED_TYPE = 0x8C10 - TEXTURE_GREEN_TYPE = 0x8C11 - TEXTURE_BLUE_TYPE = 0x8C12 - TEXTURE_ALPHA_TYPE = 0x8C13 - TEXTURE_LUMINANCE_TYPE = 0x8C14 - TEXTURE_INTENSITY_TYPE = 0x8C15 - TEXTURE_DEPTH_TYPE = 0x8C16 - UNSIGNED_NORMALIZED = 0x8C17 - TEXTURE_1D_ARRAY = 0x8C18 - PROXY_TEXTURE_1D_ARRAY = 0x8C19 - TEXTURE_2D_ARRAY = 0x8C1A - PROXY_TEXTURE_2D_ARRAY = 0x8C1B - TEXTURE_BINDING_1D_ARRAY = 0x8C1C - TEXTURE_BINDING_2D_ARRAY = 0x8C1D - MAX_GEOMETRY_TEXTURE_IMAGE_UNITS = 0x8C29 - TEXTURE_BUFFER = 0x8C2A - MAX_TEXTURE_BUFFER_SIZE = 0x8C2B - TEXTURE_BINDING_BUFFER = 0x8C2C - TEXTURE_BUFFER_DATA_STORE_BINDING = 0x8C2D - ANY_SAMPLES_PASSED = 0x8C2F - SAMPLE_SHADING = 0x8C36 - MIN_SAMPLE_SHADING_VALUE = 0x8C37 - R11F_G11F_B10F = 0x8C3A - UNSIGNED_INT_10F_11F_11F_REV = 0x8C3B - RGB9_E5 = 0x8C3D - UNSIGNED_INT_5_9_9_9_REV = 0x8C3E - TEXTURE_SHARED_SIZE = 0x8C3F - SRGB = 0x8C40 - SRGB8 = 0x8C41 - SRGB_ALPHA = 0x8C42 - SRGB8_ALPHA8 = 0x8C43 - SLUMINANCE_ALPHA = 0x8C44 - SLUMINANCE8_ALPHA8 = 0x8C45 - SLUMINANCE = 0x8C46 - SLUMINANCE8 = 0x8C47 - COMPRESSED_SRGB = 0x8C48 - COMPRESSED_SRGB_ALPHA = 0x8C49 - COMPRESSED_SLUMINANCE = 0x8C4A - COMPRESSED_SLUMINANCE_ALPHA = 0x8C4B - TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH = 0x8C76 - TRANSFORM_FEEDBACK_BUFFER_MODE = 0x8C7F - MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS = 0x8C80 - TRANSFORM_FEEDBACK_VARYINGS = 0x8C83 - TRANSFORM_FEEDBACK_BUFFER_START = 0x8C84 - TRANSFORM_FEEDBACK_BUFFER_SIZE = 0x8C85 - PRIMITIVES_GENERATED = 0x8C87 - TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN = 0x8C88 - RASTERIZER_DISCARD = 0x8C89 - MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS = 0x8C8A - MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS = 0x8C8B - INTERLEAVED_ATTRIBS = 0x8C8C - SEPARATE_ATTRIBS = 0x8C8D - TRANSFORM_FEEDBACK_BUFFER = 0x8C8E - TRANSFORM_FEEDBACK_BUFFER_BINDING = 0x8C8F - POINT_SPRITE_COORD_ORIGIN = 0x8CA0 - LOWER_LEFT = 0x8CA1 - UPPER_LEFT = 0x8CA2 - STENCIL_BACK_REF = 0x8CA3 - STENCIL_BACK_VALUE_MASK = 0x8CA4 - STENCIL_BACK_WRITEMASK = 0x8CA5 - DRAW_FRAMEBUFFER_BINDING = 0x8CA6 - FRAMEBUFFER_BINDING = 0x8CA6 - RENDERBUFFER_BINDING = 0x8CA7 - READ_FRAMEBUFFER = 0x8CA8 - DRAW_FRAMEBUFFER = 0x8CA9 - READ_FRAMEBUFFER_BINDING = 0x8CAA - RENDERBUFFER_SAMPLES = 0x8CAB - DEPTH_COMPONENT32F = 0x8CAC - DEPTH32F_STENCIL8 = 0x8CAD - FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE = 0x8CD0 - FRAMEBUFFER_ATTACHMENT_OBJECT_NAME = 0x8CD1 - FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL = 0x8CD2 - FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE = 0x8CD3 - FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER = 0x8CD4 - FRAMEBUFFER_COMPLETE = 0x8CD5 - FRAMEBUFFER_INCOMPLETE_ATTACHMENT = 0x8CD6 - FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = 0x8CD7 - FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER = 0x8CDB - FRAMEBUFFER_INCOMPLETE_READ_BUFFER = 0x8CDC - FRAMEBUFFER_UNSUPPORTED = 0x8CDD - MAX_COLOR_ATTACHMENTS = 0x8CDF - COLOR_ATTACHMENT0 = 0x8CE0 - COLOR_ATTACHMENT1 = 0x8CE1 - COLOR_ATTACHMENT2 = 0x8CE2 - COLOR_ATTACHMENT3 = 0x8CE3 - COLOR_ATTACHMENT4 = 0x8CE4 - COLOR_ATTACHMENT5 = 0x8CE5 - COLOR_ATTACHMENT6 = 0x8CE6 - COLOR_ATTACHMENT7 = 0x8CE7 - COLOR_ATTACHMENT8 = 0x8CE8 - COLOR_ATTACHMENT9 = 0x8CE9 - COLOR_ATTACHMENT10 = 0x8CEA - COLOR_ATTACHMENT11 = 0x8CEB - COLOR_ATTACHMENT12 = 0x8CEC - COLOR_ATTACHMENT13 = 0x8CED - COLOR_ATTACHMENT14 = 0x8CEE - COLOR_ATTACHMENT15 = 0x8CEF - DEPTH_ATTACHMENT = 0x8D00 - STENCIL_ATTACHMENT = 0x8D20 - FRAMEBUFFER = 0x8D40 - RENDERBUFFER = 0x8D41 - RENDERBUFFER_WIDTH = 0x8D42 - RENDERBUFFER_HEIGHT = 0x8D43 - RENDERBUFFER_INTERNAL_FORMAT = 0x8D44 - STENCIL_INDEX1 = 0x8D46 - STENCIL_INDEX4 = 0x8D47 - STENCIL_INDEX8 = 0x8D48 - STENCIL_INDEX16 = 0x8D49 - RENDERBUFFER_RED_SIZE = 0x8D50 - RENDERBUFFER_GREEN_SIZE = 0x8D51 - RENDERBUFFER_BLUE_SIZE = 0x8D52 - RENDERBUFFER_ALPHA_SIZE = 0x8D53 - RENDERBUFFER_DEPTH_SIZE = 0x8D54 - RENDERBUFFER_STENCIL_SIZE = 0x8D55 - FRAMEBUFFER_INCOMPLETE_MULTISAMPLE = 0x8D56 - MAX_SAMPLES = 0x8D57 - RGB565 = 0x8D62 - RGBA32UI = 0x8D70 - RGB32UI = 0x8D71 - RGBA16UI = 0x8D76 - RGB16UI = 0x8D77 - RGBA8UI = 0x8D7C - RGB8UI = 0x8D7D - RGBA32I = 0x8D82 - RGB32I = 0x8D83 - RGBA16I = 0x8D88 - RGB16I = 0x8D89 - RGBA8I = 0x8D8E - RGB8I = 0x8D8F - RED_INTEGER = 0x8D94 - GREEN_INTEGER = 0x8D95 - BLUE_INTEGER = 0x8D96 - ALPHA_INTEGER = 0x8D97 - RGB_INTEGER = 0x8D98 - RGBA_INTEGER = 0x8D99 - BGR_INTEGER = 0x8D9A - BGRA_INTEGER = 0x8D9B - INT_2_10_10_10_REV = 0x8D9F - FRAMEBUFFER_ATTACHMENT_LAYERED = 0x8DA7 - FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS = 0x8DA8 - FLOAT_32_UNSIGNED_INT_24_8_REV = 0x8DAD - FRAMEBUFFER_SRGB = 0x8DB9 - COMPRESSED_RED_RGTC1 = 0x8DBB - COMPRESSED_SIGNED_RED_RGTC1 = 0x8DBC - COMPRESSED_RG_RGTC2 = 0x8DBD - COMPRESSED_SIGNED_RG_RGTC2 = 0x8DBE - SAMPLER_1D_ARRAY = 0x8DC0 - SAMPLER_2D_ARRAY = 0x8DC1 - SAMPLER_BUFFER = 0x8DC2 - SAMPLER_1D_ARRAY_SHADOW = 0x8DC3 - SAMPLER_2D_ARRAY_SHADOW = 0x8DC4 - SAMPLER_CUBE_SHADOW = 0x8DC5 - UNSIGNED_INT_VEC2 = 0x8DC6 - UNSIGNED_INT_VEC3 = 0x8DC7 - UNSIGNED_INT_VEC4 = 0x8DC8 - INT_SAMPLER_1D = 0x8DC9 - INT_SAMPLER_2D = 0x8DCA - INT_SAMPLER_3D = 0x8DCB - INT_SAMPLER_CUBE = 0x8DCC - INT_SAMPLER_2D_RECT = 0x8DCD - INT_SAMPLER_1D_ARRAY = 0x8DCE - INT_SAMPLER_2D_ARRAY = 0x8DCF - INT_SAMPLER_BUFFER = 0x8DD0 - UNSIGNED_INT_SAMPLER_1D = 0x8DD1 - UNSIGNED_INT_SAMPLER_2D = 0x8DD2 - UNSIGNED_INT_SAMPLER_3D = 0x8DD3 - UNSIGNED_INT_SAMPLER_CUBE = 0x8DD4 - UNSIGNED_INT_SAMPLER_2D_RECT = 0x8DD5 - UNSIGNED_INT_SAMPLER_1D_ARRAY = 0x8DD6 - UNSIGNED_INT_SAMPLER_2D_ARRAY = 0x8DD7 - UNSIGNED_INT_SAMPLER_BUFFER = 0x8DD8 - GEOMETRY_SHADER = 0x8DD9 - MAX_GEOMETRY_UNIFORM_COMPONENTS = 0x8DDF - MAX_GEOMETRY_OUTPUT_VERTICES = 0x8DE0 - MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS = 0x8DE1 - ACTIVE_SUBROUTINES = 0x8DE5 - ACTIVE_SUBROUTINE_UNIFORMS = 0x8DE6 - MAX_SUBROUTINES = 0x8DE7 - MAX_SUBROUTINE_UNIFORM_LOCATIONS = 0x8DE8 - LOW_FLOAT = 0x8DF0 - MEDIUM_FLOAT = 0x8DF1 - HIGH_FLOAT = 0x8DF2 - LOW_INT = 0x8DF3 - MEDIUM_INT = 0x8DF4 - HIGH_INT = 0x8DF5 - SHADER_BINARY_FORMATS = 0x8DF8 - NUM_SHADER_BINARY_FORMATS = 0x8DF9 - SHADER_COMPILER = 0x8DFA - MAX_VERTEX_UNIFORM_VECTORS = 0x8DFB - MAX_VARYING_VECTORS = 0x8DFC - MAX_FRAGMENT_UNIFORM_VECTORS = 0x8DFD - QUERY_WAIT = 0x8E13 - QUERY_NO_WAIT = 0x8E14 - QUERY_BY_REGION_WAIT = 0x8E15 - QUERY_BY_REGION_NO_WAIT = 0x8E16 - MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS = 0x8E1E - MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS = 0x8E1F - TRANSFORM_FEEDBACK = 0x8E22 - TRANSFORM_FEEDBACK_BUFFER_PAUSED = 0x8E23 - TRANSFORM_FEEDBACK_BUFFER_ACTIVE = 0x8E24 - TRANSFORM_FEEDBACK_BINDING = 0x8E25 - TIMESTAMP = 0x8E28 - TEXTURE_SWIZZLE_R = 0x8E42 - TEXTURE_SWIZZLE_G = 0x8E43 - TEXTURE_SWIZZLE_B = 0x8E44 - TEXTURE_SWIZZLE_A = 0x8E45 - TEXTURE_SWIZZLE_RGBA = 0x8E46 - ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS = 0x8E47 - ACTIVE_SUBROUTINE_MAX_LENGTH = 0x8E48 - ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH = 0x8E49 - NUM_COMPATIBLE_SUBROUTINES = 0x8E4A - COMPATIBLE_SUBROUTINES = 0x8E4B - QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION = 0x8E4C - FIRST_VERTEX_CONVENTION = 0x8E4D - LAST_VERTEX_CONVENTION = 0x8E4E - PROVOKING_VERTEX = 0x8E4F - SAMPLE_POSITION = 0x8E50 - SAMPLE_MASK = 0x8E51 - SAMPLE_MASK_VALUE = 0x8E52 - MAX_SAMPLE_MASK_WORDS = 0x8E59 - MAX_GEOMETRY_SHADER_INVOCATIONS = 0x8E5A - MIN_FRAGMENT_INTERPOLATION_OFFSET = 0x8E5B - MAX_FRAGMENT_INTERPOLATION_OFFSET = 0x8E5C - FRAGMENT_INTERPOLATION_OFFSET_BITS = 0x8E5D - MIN_PROGRAM_TEXTURE_GATHER_OFFSET = 0x8E5E - MAX_PROGRAM_TEXTURE_GATHER_OFFSET = 0x8E5F - MAX_TRANSFORM_FEEDBACK_BUFFERS = 0x8E70 - MAX_VERTEX_STREAMS = 0x8E71 - PATCH_VERTICES = 0x8E72 - PATCH_DEFAULT_INNER_LEVEL = 0x8E73 - PATCH_DEFAULT_OUTER_LEVEL = 0x8E74 - TESS_CONTROL_OUTPUT_VERTICES = 0x8E75 - TESS_GEN_MODE = 0x8E76 - TESS_GEN_SPACING = 0x8E77 - TESS_GEN_VERTEX_ORDER = 0x8E78 - TESS_GEN_POINT_MODE = 0x8E79 - ISOLINES = 0x8E7A - FRACTIONAL_ODD = 0x8E7B - FRACTIONAL_EVEN = 0x8E7C - MAX_PATCH_VERTICES = 0x8E7D - MAX_TESS_GEN_LEVEL = 0x8E7E - MAX_TESS_CONTROL_UNIFORM_COMPONENTS = 0x8E7F - MAX_TESS_EVALUATION_UNIFORM_COMPONENTS = 0x8E80 - MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS = 0x8E81 - MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS = 0x8E82 - MAX_TESS_CONTROL_OUTPUT_COMPONENTS = 0x8E83 - MAX_TESS_PATCH_COMPONENTS = 0x8E84 - MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS = 0x8E85 - MAX_TESS_EVALUATION_OUTPUT_COMPONENTS = 0x8E86 - TESS_EVALUATION_SHADER = 0x8E87 - TESS_CONTROL_SHADER = 0x8E88 - MAX_TESS_CONTROL_UNIFORM_BLOCKS = 0x8E89 - MAX_TESS_EVALUATION_UNIFORM_BLOCKS = 0x8E8A - COPY_READ_BUFFER = 0x8F36 - COPY_WRITE_BUFFER = 0x8F37 - DRAW_INDIRECT_BUFFER = 0x8F3F - DRAW_INDIRECT_BUFFER_BINDING = 0x8F43 - DOUBLE_MAT2 = 0x8F46 - DOUBLE_MAT3 = 0x8F47 - DOUBLE_MAT4 = 0x8F48 - DOUBLE_MAT2x3 = 0x8F49 - DOUBLE_MAT2x4 = 0x8F4A - DOUBLE_MAT3x2 = 0x8F4B - DOUBLE_MAT3x4 = 0x8F4C - DOUBLE_MAT4x2 = 0x8F4D - DOUBLE_MAT4x3 = 0x8F4E - R8_SNORM = 0x8F94 - RG8_SNORM = 0x8F95 - RGB8_SNORM = 0x8F96 - RGBA8_SNORM = 0x8F97 - R16_SNORM = 0x8F98 - RG16_SNORM = 0x8F99 - RGB16_SNORM = 0x8F9A - RGBA16_SNORM = 0x8F9B - SIGNED_NORMALIZED = 0x8F9C - PRIMITIVE_RESTART = 0x8F9D - PRIMITIVE_RESTART_INDEX = 0x8F9E - DOUBLE_VEC2 = 0x8FFC - DOUBLE_VEC3 = 0x8FFD - DOUBLE_VEC4 = 0x8FFE - TEXTURE_CUBE_MAP_ARRAY = 0x9009 - TEXTURE_BINDING_CUBE_MAP_ARRAY = 0x900A - PROXY_TEXTURE_CUBE_MAP_ARRAY = 0x900B - SAMPLER_CUBE_MAP_ARRAY = 0x900C - SAMPLER_CUBE_MAP_ARRAY_SHADOW = 0x900D - INT_SAMPLER_CUBE_MAP_ARRAY = 0x900E - UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY = 0x900F - RGB10_A2UI = 0x906F - TEXTURE_2D_MULTISAMPLE = 0x9100 - PROXY_TEXTURE_2D_MULTISAMPLE = 0x9101 - TEXTURE_2D_MULTISAMPLE_ARRAY = 0x9102 - PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY = 0x9103 - TEXTURE_BINDING_2D_MULTISAMPLE = 0x9104 - TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY = 0x9105 - TEXTURE_SAMPLES = 0x9106 - TEXTURE_FIXED_SAMPLE_LOCATIONS = 0x9107 - SAMPLER_2D_MULTISAMPLE = 0x9108 - INT_SAMPLER_2D_MULTISAMPLE = 0x9109 - UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE = 0x910A - SAMPLER_2D_MULTISAMPLE_ARRAY = 0x910B - INT_SAMPLER_2D_MULTISAMPLE_ARRAY = 0x910C - UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY = 0x910D - MAX_COLOR_TEXTURE_SAMPLES = 0x910E - MAX_DEPTH_TEXTURE_SAMPLES = 0x910F - MAX_INTEGER_SAMPLES = 0x9110 - MAX_SERVER_WAIT_TIMEOUT = 0x9111 - OBJECT_TYPE = 0x9112 - SYNC_CONDITION = 0x9113 - SYNC_STATUS = 0x9114 - SYNC_FLAGS = 0x9115 - SYNC_FENCE = 0x9116 - SYNC_GPU_COMMANDS_COMPLETE = 0x9117 - UNSIGNALED = 0x9118 - SIGNALED = 0x9119 - ALREADY_SIGNALED = 0x911A - TIMEOUT_EXPIRED = 0x911B - CONDITION_SATISFIED = 0x911C - WAIT_FAILED = 0x911D - BUFFER_ACCESS_FLAGS = 0x911F - BUFFER_MAP_LENGTH = 0x9120 - BUFFER_MAP_OFFSET = 0x9121 - MAX_VERTEX_OUTPUT_COMPONENTS = 0x9122 - MAX_GEOMETRY_INPUT_COMPONENTS = 0x9123 - MAX_GEOMETRY_OUTPUT_COMPONENTS = 0x9124 - MAX_FRAGMENT_INPUT_COMPONENTS = 0x9125 - CONTEXT_PROFILE_MASK = 0x9126 -) - -// https://www.opengl.org/sdk/docs/man4/xhtml/glViewport.xml -func (gl *GL) Viewport(x, y, width, height int) { - C.gl4_1compat_glViewport(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// DepthRange specifies the mapping of depth values from normalized device -// coordinates to window coordinates. -// -// Parameter nearVal specifies the mapping of the near clipping plane to window -// coordinates (defaults to 0), while farVal specifies the mapping of the far -// clipping plane to window coordinates (defaults to 1). -// -// After clipping and division by w, depth coordinates range from -1 to 1, -// corresponding to the near and far clipping planes. DepthRange specifies a -// linear mapping of the normalized depth coordinates in this range to window -// depth coordinates. Regardless of the actual depth buffer implementation, -// window coordinate depth values are treated as though they range from 0 through 1 -// (like color components). Thus, the values accepted by DepthRange are both -// clamped to this range before they are accepted. -// -// The default setting of (0, 1) maps the near plane to 0 and the far plane to 1. -// With this mapping, the depth buffer range is fully utilized. -// -// It is not necessary that nearVal be less than farVal. Reverse mappings such as -// nearVal 1, and farVal 0 are acceptable. -// -// GL.INVALID_OPERATION is generated if DepthRange is executed between the -// execution of Begin and the corresponding execution of End. -func (gl *GL) DepthRange(nearVal, farVal float64) { - C.gl4_1compat_glDepthRange(gl.funcs, C.GLdouble(nearVal), C.GLdouble(farVal)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsEnabled.xml -func (gl *GL) IsEnabled(cap glbase.Enum) bool { - glresult := C.gl4_1compat_glIsEnabled(gl.funcs, C.GLenum(cap)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexLevelParameteriv.xml -func (gl *GL) GetTexLevelParameteriv(target glbase.Enum, level int, pname glbase.Enum, params []int32) { - C.gl4_1compat_glGetTexLevelParameteriv(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexLevelParameterfv.xml -func (gl *GL) GetTexLevelParameterfv(target glbase.Enum, level int, pname glbase.Enum, params []float32) { - C.gl4_1compat_glGetTexLevelParameterfv(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexParameteriv.xml -func (gl *GL) GetTexParameteriv(target, pname glbase.Enum, params []int32) { - C.gl4_1compat_glGetTexParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexParameterfv.xml -func (gl *GL) GetTexParameterfv(target, pname glbase.Enum, params []float32) { - C.gl4_1compat_glGetTexParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexImage.xml -func (gl *GL) GetTexImage(target glbase.Enum, level int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_1compat_glGetTexImage(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetIntegerv.xml -func (gl *GL) GetIntegerv(pname glbase.Enum, params []int32) { - C.gl4_1compat_glGetIntegerv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetFloatv.xml -func (gl *GL) GetFloatv(pname glbase.Enum, params []float32) { - C.gl4_1compat_glGetFloatv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetError.xml -func (gl *GL) GetError() glbase.Enum { - glresult := C.gl4_1compat_glGetError(gl.funcs) - return glbase.Enum(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetDoublev.xml -func (gl *GL) GetDoublev(pname glbase.Enum, params []float64) { - C.gl4_1compat_glGetDoublev(gl.funcs, C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetBooleanv.xml -func (gl *GL) GetBooleanv(pname glbase.Enum, params []bool) { - C.gl4_1compat_glGetBooleanv(gl.funcs, C.GLenum(pname), (*C.GLboolean)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glReadPixels.xml -func (gl *GL) ReadPixels(x, y, width, height int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_1compat_glReadPixels(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glReadBuffer.xml -func (gl *GL) ReadBuffer(mode glbase.Enum) { - C.gl4_1compat_glReadBuffer(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPixelStorei.xml -func (gl *GL) PixelStorei(pname glbase.Enum, param int32) { - C.gl4_1compat_glPixelStorei(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPixelStoref.xml -func (gl *GL) PixelStoref(pname glbase.Enum, param float32) { - C.gl4_1compat_glPixelStoref(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDepthFunc.xml -func (gl *GL) DepthFunc(glfunc glbase.Enum) { - C.gl4_1compat_glDepthFunc(gl.funcs, C.GLenum(glfunc)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glStencilOp.xml -func (gl *GL) StencilOp(fail, zfail, zpass glbase.Enum) { - C.gl4_1compat_glStencilOp(gl.funcs, C.GLenum(fail), C.GLenum(zfail), C.GLenum(zpass)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glStencilFunc.xml -func (gl *GL) StencilFunc(glfunc glbase.Enum, ref int32, mask uint32) { - C.gl4_1compat_glStencilFunc(gl.funcs, C.GLenum(glfunc), C.GLint(ref), C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLogicOp.xml -func (gl *GL) LogicOp(opcode glbase.Enum) { - C.gl4_1compat_glLogicOp(gl.funcs, C.GLenum(opcode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendFunc.xml -func (gl *GL) BlendFunc(sfactor, dfactor glbase.Enum) { - C.gl4_1compat_glBlendFunc(gl.funcs, C.GLenum(sfactor), C.GLenum(dfactor)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFlush.xml -func (gl *GL) Flush() { - C.gl4_1compat_glFlush(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFinish.xml -func (gl *GL) Finish() { - C.gl4_1compat_glFinish(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEnable.xml -func (gl *GL) Enable(cap glbase.Enum) { - C.gl4_1compat_glEnable(gl.funcs, C.GLenum(cap)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDisable.xml -func (gl *GL) Disable(cap glbase.Enum) { - C.gl4_1compat_glDisable(gl.funcs, C.GLenum(cap)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDepthMask.xml -func (gl *GL) DepthMask(flag bool) { - C.gl4_1compat_glDepthMask(gl.funcs, *(*C.GLboolean)(unsafe.Pointer(&flag))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorMask.xml -func (gl *GL) ColorMask(red, green, blue, alpha bool) { - C.gl4_1compat_glColorMask(gl.funcs, *(*C.GLboolean)(unsafe.Pointer(&red)), *(*C.GLboolean)(unsafe.Pointer(&green)), *(*C.GLboolean)(unsafe.Pointer(&blue)), *(*C.GLboolean)(unsafe.Pointer(&alpha))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glStencilMask.xml -func (gl *GL) StencilMask(mask uint32) { - C.gl4_1compat_glStencilMask(gl.funcs, C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearDepth.xml -func (gl *GL) ClearDepth(depth float64) { - C.gl4_1compat_glClearDepth(gl.funcs, C.GLdouble(depth)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearStencil.xml -func (gl *GL) ClearStencil(s int32) { - C.gl4_1compat_glClearStencil(gl.funcs, C.GLint(s)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearColor.xml -func (gl *GL) ClearColor(red, green, blue, alpha float32) { - C.gl4_1compat_glClearColor(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClear.xml -func (gl *GL) Clear(mask glbase.Bitfield) { - C.gl4_1compat_glClear(gl.funcs, C.GLbitfield(mask)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawBuffer.xml -func (gl *GL) DrawBuffer(mode glbase.Enum) { - C.gl4_1compat_glDrawBuffer(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexImage2D.xml -func (gl *GL) TexImage2D(target glbase.Enum, level int, internalFormat int32, width, height, border int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_1compat_glTexImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLint(border), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexImage1D.xml -func (gl *GL) TexImage1D(target glbase.Enum, level int, internalFormat int32, width, border int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_1compat_glTexImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(internalFormat), C.GLsizei(width), C.GLint(border), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexParameteriv.xml -func (gl *GL) TexParameteriv(target, pname glbase.Enum, params []int32) { - C.gl4_1compat_glTexParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexParameteri.xml -func (gl *GL) TexParameteri(target, pname glbase.Enum, param int32) { - C.gl4_1compat_glTexParameteri(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexParameterfv.xml -func (gl *GL) TexParameterfv(target, pname glbase.Enum, params []float32) { - C.gl4_1compat_glTexParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexParameterf.xml -func (gl *GL) TexParameterf(target, pname glbase.Enum, param float32) { - C.gl4_1compat_glTexParameterf(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glScissor.xml -func (gl *GL) Scissor(x, y, width, height int) { - C.gl4_1compat_glScissor(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPolygonMode.xml -func (gl *GL) PolygonMode(face, mode glbase.Enum) { - C.gl4_1compat_glPolygonMode(gl.funcs, C.GLenum(face), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPointSize.xml -func (gl *GL) PointSize(size float32) { - C.gl4_1compat_glPointSize(gl.funcs, C.GLfloat(size)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLineWidth.xml -func (gl *GL) LineWidth(width float32) { - C.gl4_1compat_glLineWidth(gl.funcs, C.GLfloat(width)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glHint.xml -func (gl *GL) Hint(target, mode glbase.Enum) { - C.gl4_1compat_glHint(gl.funcs, C.GLenum(target), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFrontFace.xml -func (gl *GL) FrontFace(mode glbase.Enum) { - C.gl4_1compat_glFrontFace(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCullFace.xml -func (gl *GL) CullFace(mode glbase.Enum) { - C.gl4_1compat_glCullFace(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIndexubv.xml -func (gl *GL) Indexubv(c []uint8) { - C.gl4_1compat_glIndexubv(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIndexub.xml -func (gl *GL) Indexub(c uint8) { - C.gl4_1compat_glIndexub(gl.funcs, C.GLubyte(c)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsTexture.xml -func (gl *GL) IsTexture(texture glbase.Texture) bool { - glresult := C.gl4_1compat_glIsTexture(gl.funcs, C.GLuint(texture)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// GenTextures returns n texture names in textures. There is no guarantee -// that the names form a contiguous set of integers; however, it is -// guaranteed that none of the returned names was in use immediately before -// the call to GenTextures. -// -// The generated textures have no dimensionality; they assume the -// dimensionality of the texture target to which they are first bound (see -// BindTexture). -// -// Texture names returned by a call to GenTextures are not returned by -// subsequent calls, unless they are first deleted with DeleteTextures. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// GenTextures is available in GL version 2.0 or greater. -func (gl *GL) GenTextures(n int) []glbase.Texture { - if n == 0 { - return nil - } - textures := make([]glbase.Texture, n) - C.gl4_1compat_glGenTextures(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0]))) - return textures -} - -// DeleteTextures deletes the textures objects whose names are stored -// in the textures slice. After a texture is deleted, it has no contents or -// dimensionality, and its name is free for reuse (for example by -// GenTextures). If a texture that is currently bound is deleted, the binding -// reverts to 0 (the default texture). -// -// DeleteTextures silently ignores 0's and names that do not correspond to -// existing textures. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// DeleteTextures is available in GL version 2.0 or greater. -func (gl *GL) DeleteTextures(textures []glbase.Texture) { - n := len(textures) - if n == 0 { - return - } - C.gl4_1compat_glDeleteTextures(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindTexture.xml -func (gl *GL) BindTexture(target glbase.Enum, texture glbase.Texture) { - C.gl4_1compat_glBindTexture(gl.funcs, C.GLenum(target), C.GLuint(texture)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexSubImage2D.xml -func (gl *GL) TexSubImage2D(target glbase.Enum, level, xoffset, yoffset, width, height int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_1compat_glTexSubImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexSubImage1D.xml -func (gl *GL) TexSubImage1D(target glbase.Enum, level, xoffset, width int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_1compat_glTexSubImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLsizei(width), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyTexSubImage2D.xml -func (gl *GL) CopyTexSubImage2D(target glbase.Enum, level, xoffset, yoffset, x, y, width, height int) { - C.gl4_1compat_glCopyTexSubImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyTexSubImage1D.xml -func (gl *GL) CopyTexSubImage1D(target glbase.Enum, level, xoffset, x, y, width int) { - C.gl4_1compat_glCopyTexSubImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(x), C.GLint(y), C.GLsizei(width)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyTexImage2D.xml -func (gl *GL) CopyTexImage2D(target glbase.Enum, level int, internalFormat glbase.Enum, x, y, width, height, border int) { - C.gl4_1compat_glCopyTexImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height), C.GLint(border)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyTexImage1D.xml -func (gl *GL) CopyTexImage1D(target glbase.Enum, level int, internalFormat glbase.Enum, x, y, width, border int) { - C.gl4_1compat_glCopyTexImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLint(border)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPolygonOffset.xml -func (gl *GL) PolygonOffset(factor, units float32) { - C.gl4_1compat_glPolygonOffset(gl.funcs, C.GLfloat(factor), C.GLfloat(units)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawElements.xml -func (gl *GL) DrawElements(mode glbase.Enum, count int, gltype glbase.Enum, indices interface{}) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl4_1compat_glDrawElements(gl.funcs, C.GLenum(mode), C.GLsizei(count), C.GLenum(gltype), indices_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawArrays.xml -func (gl *GL) DrawArrays(mode glbase.Enum, first, count int) { - C.gl4_1compat_glDrawArrays(gl.funcs, C.GLenum(mode), C.GLint(first), C.GLsizei(count)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyTexSubImage3D.xml -func (gl *GL) CopyTexSubImage3D(target glbase.Enum, level, xoffset, yoffset int, zoffset int32, x, y, width, height int) { - C.gl4_1compat_glCopyTexSubImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(zoffset), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexSubImage3D.xml -func (gl *GL) TexSubImage3D(target glbase.Enum, level, xoffset, yoffset int, zoffset int32, width, height int, depth int32, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_1compat_glTexSubImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(zoffset), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexImage3D.xml -func (gl *GL) TexImage3D(target glbase.Enum, level int, internalFormat int32, width, height int, depth int32, border int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_1compat_glTexImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLint(border), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawRangeElements.xml -func (gl *GL) DrawRangeElements(mode glbase.Enum, start, end uint32, count int, gltype glbase.Enum, indices interface{}) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl4_1compat_glDrawRangeElements(gl.funcs, C.GLenum(mode), C.GLuint(start), C.GLuint(end), C.GLsizei(count), C.GLenum(gltype), indices_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendEquation.xml -func (gl *GL) BlendEquation(mode glbase.Enum) { - C.gl4_1compat_glBlendEquation(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendColor.xml -func (gl *GL) BlendColor(red, green, blue, alpha float32) { - C.gl4_1compat_glBlendColor(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetCompressedTexImage.xml -func (gl *GL) GetCompressedTexImage(target glbase.Enum, level int, img interface{}) { - var img_ptr unsafe.Pointer - var img_v = reflect.ValueOf(img) - if img != nil && img_v.Kind() != reflect.Slice { - panic("parameter img must be a slice") - } - if img != nil { - img_ptr = unsafe.Pointer(img_v.Index(0).Addr().Pointer()) - } - C.gl4_1compat_glGetCompressedTexImage(gl.funcs, C.GLenum(target), C.GLint(level), img_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCompressedTexSubImage1D.xml -func (gl *GL) CompressedTexSubImage1D(target glbase.Enum, level, xoffset, width int, format glbase.Enum, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_1compat_glCompressedTexSubImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLsizei(width), C.GLenum(format), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCompressedTexSubImage2D.xml -func (gl *GL) CompressedTexSubImage2D(target glbase.Enum, level, xoffset, yoffset, width, height int, format glbase.Enum, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_1compat_glCompressedTexSubImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCompressedTexSubImage3D.xml -func (gl *GL) CompressedTexSubImage3D(target glbase.Enum, level, xoffset, yoffset int, zoffset int32, width, height int, depth int32, format glbase.Enum, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_1compat_glCompressedTexSubImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(zoffset), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLenum(format), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCompressedTexImage1D.xml -func (gl *GL) CompressedTexImage1D(target glbase.Enum, level int, internalFormat glbase.Enum, width, border, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_1compat_glCompressedTexImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLsizei(width), C.GLint(border), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCompressedTexImage2D.xml -func (gl *GL) CompressedTexImage2D(target glbase.Enum, level int, internalFormat glbase.Enum, width, height, border, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_1compat_glCompressedTexImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLint(border), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCompressedTexImage3D.xml -func (gl *GL) CompressedTexImage3D(target glbase.Enum, level int, internalFormat glbase.Enum, width, height int, depth int32, border, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_1compat_glCompressedTexImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLint(border), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSampleCoverage.xml -func (gl *GL) SampleCoverage(value float32, invert bool) { - C.gl4_1compat_glSampleCoverage(gl.funcs, C.GLfloat(value), *(*C.GLboolean)(unsafe.Pointer(&invert))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glActiveTexture.xml -func (gl *GL) ActiveTexture(texture glbase.Enum) { - C.gl4_1compat_glActiveTexture(gl.funcs, C.GLenum(texture)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPointParameteriv.xml -func (gl *GL) PointParameteriv(pname glbase.Enum, params []int32) { - C.gl4_1compat_glPointParameteriv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPointParameteri.xml -func (gl *GL) PointParameteri(pname glbase.Enum, param int32) { - C.gl4_1compat_glPointParameteri(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPointParameterfv.xml -func (gl *GL) PointParameterfv(pname glbase.Enum, params []float32) { - C.gl4_1compat_glPointParameterfv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPointParameterf.xml -func (gl *GL) PointParameterf(pname glbase.Enum, param float32) { - C.gl4_1compat_glPointParameterf(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiDrawArrays.xml -func (gl *GL) MultiDrawArrays(mode glbase.Enum, first, count []int, drawcount int32) { - C.gl4_1compat_glMultiDrawArrays(gl.funcs, C.GLenum(mode), (*C.GLint)(unsafe.Pointer(&first[0])), (*C.GLsizei)(unsafe.Pointer(&count[0])), C.GLsizei(drawcount)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendFuncSeparate.xml -func (gl *GL) BlendFuncSeparate(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha glbase.Enum) { - C.gl4_1compat_glBlendFuncSeparate(gl.funcs, C.GLenum(sfactorRGB), C.GLenum(dfactorRGB), C.GLenum(sfactorAlpha), C.GLenum(dfactorAlpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetBufferParameteriv.xml -func (gl *GL) GetBufferParameteriv(target, pname glbase.Enum, params []int32) { - C.gl4_1compat_glGetBufferParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUnmapBuffer.xml -func (gl *GL) UnmapBuffer(target glbase.Enum) bool { - glresult := C.gl4_1compat_glUnmapBuffer(gl.funcs, C.GLenum(target)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetBufferSubData.xml -func (gl *GL) GetBufferSubData(target glbase.Enum, offset, size int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_1compat_glGetBufferSubData(gl.funcs, C.GLenum(target), C.GLintptr(offset), C.GLsizeiptr(size), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBufferSubData.xml -func (gl *GL) BufferSubData(target glbase.Enum, offset, size int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_1compat_glBufferSubData(gl.funcs, C.GLenum(target), C.GLintptr(offset), C.GLsizeiptr(size), data_ptr) -} - -// BufferData creates a new data store for the buffer object currently -// bound to target. Any pre-existing data store is deleted. The new data -// store is created with the specified size in bytes and usage. If data is -// not nil, it must be a slice that is used to initialize the data store. -// In that case the size parameter is ignored and the store size will match -// the slice data size. -// -// In its initial state, the new data store is not mapped, it has a NULL -// mapped pointer, and its mapped access is GL.READ_WRITE. -// -// The target constant must be one of GL.ARRAY_BUFFER, GL.COPY_READ_BUFFER, -// GL.COPY_WRITE_BUFFER, GL.ELEMENT_ARRAY_BUFFER, GL.PIXEL_PACK_BUFFER, -// GL.PIXEL_UNPACK_BUFFER, GL.TEXTURE_BUFFER, GL.TRANSFORM_FEEDBACK_BUFFER, -// or GL.UNIFORM_BUFFER. -// -// The usage parameter is a hint to the GL implementation as to how a buffer -// object's data store will be accessed. This enables the GL implementation -// to make more intelligent decisions that may significantly impact buffer -// object performance. It does not, however, constrain the actual usage of -// the data store. usage can be broken down into two parts: first, the -// frequency of access (modification and usage), and second, the nature of -// that access. -// -// A usage frequency of STREAM and nature of DRAW is specified via the -// constant GL.STREAM_DRAW, for example. -// -// The usage frequency of access may be one of: -// -// STREAM -// The data store contents will be modified once and used at most a few times. -// -// STATIC -// The data store contents will be modified once and used many times. -// -// DYNAMIC -// The data store contents will be modified repeatedly and used many times. -// -// The usage nature of access may be one of: -// -// DRAW -// The data store contents are modified by the application, and used as -// the source for GL drawing and image specification commands. -// -// READ -// The data store contents are modified by reading data from the GL, -// and used to return that data when queried by the application. -// -// COPY -// The data store contents are modified by reading data from the GL, -// and used as the source for GL drawing and image specification -// commands. -// -// Clients must align data elements consistent with the requirements of the -// client platform, with an additional base-level requirement that an offset -// within a buffer to a datum comprising N bytes be a multiple of N. -// -// Error GL.INVALID_ENUM is generated if target is not one of the accepted -// buffer targets. GL.INVALID_ENUM is generated if usage is not -// GL.STREAM_DRAW, GL.STREAM_READ, GL.STREAM_COPY, GL.STATIC_DRAW, -// GL.STATIC_READ, GL.STATIC_COPY, GL.DYNAMIC_DRAW, GL.DYNAMIC_READ, or -// GL.DYNAMIC_COPY. GL.INVALID_VALUE is generated if size is negative. -// GL.INVALID_OPERATION is generated if the reserved buffer object name 0 is -// bound to target. GL.OUT_OF_MEMORY is generated if the GL is unable to -// create a data store with the specified size. -func (gl *GL) BufferData(target glbase.Enum, size int, data interface{}, usage glbase.Enum) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - if data != nil { - size = int(data_v.Type().Size()) * data_v.Len() - } - C.gl4_1compat_glBufferData(gl.funcs, C.GLenum(target), C.GLsizeiptr(size), data_ptr, C.GLenum(usage)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsBuffer.xml -func (gl *GL) IsBuffer(buffer glbase.Buffer) bool { - glresult := C.gl4_1compat_glIsBuffer(gl.funcs, C.GLuint(buffer)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// GenBuffers returns n buffer object names. There is no guarantee that -// the names form a contiguous set of integers; however, it is guaranteed -// that none of the returned names was in use immediately before the call to -// GenBuffers. -// -// Buffer object names returned by a call to GenBuffers are not returned by -// subsequent calls, unless they are first deleted with DeleteBuffers. -// -// No buffer objects are associated with the returned buffer object names -// until they are first bound by calling BindBuffer. -// -// Error GL.INVALID_VALUE is generated if n is negative. GL.INVALID_OPERATION -// is generated if GenBuffers is executed between the execution of Begin -// and the corresponding execution of End. -// -// GenBuffers is available in GL version 1.5 or greater. -func (gl *GL) GenBuffers(n int) []glbase.Buffer { - if n == 0 { - return nil - } - buffers := make([]glbase.Buffer, n) - C.gl4_1compat_glGenBuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&buffers[0]))) - return buffers -} - -// DeleteBuffers deletes the buffer objects whose names are stored in the -// buffers slice. -// -// After a buffer object is deleted, it has no contents, and its name is free -// for reuse (for example by GenBuffers). If a buffer object that is -// currently bound is deleted, the binding reverts to 0 (the absence of any -// buffer object, which reverts to client memory usage). -// -// DeleteBuffers silently ignores 0's and names that do not correspond to -// existing buffer objects. -// -// Error GL.INVALID_VALUE is generated if n is negative. GL.INVALID_OPERATION -// is generated if DeleteBuffers is executed between the execution of Begin -// and the corresponding execution of End. -// -// DeleteBuffers is available in GL version 1.5 or greater. -func (gl *GL) DeleteBuffers(buffers []glbase.Buffer) { - n := len(buffers) - if n == 0 { - return - } - C.gl4_1compat_glDeleteBuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&buffers[0]))) -} - -// BindBuffer creates or puts in use a named buffer object. -// Calling BindBuffer with target set to GL.ARRAY_BUFFER, -// GL.ELEMENT_ARRAY_BUFFER, GL.PIXEL_PACK_BUFFER or GL.PIXEL_UNPACK_BUFFER -// and buffer set to the name of the new buffer object binds the buffer -// object name to the target. When a buffer object is bound to a target, the -// previous binding for that target is automatically broken. -// -// Buffer object names are unsigned integers. The value zero is reserved, but -// there is no default buffer object for each buffer object target. Instead, -// buffer set to zero effectively unbinds any buffer object previously bound, -// and restores client memory usage for that buffer object target. Buffer -// object names and the corresponding buffer object contents are local to the -// shared display-list space (see XCreateContext) of the current GL rendering -// context; two rendering contexts share buffer object names only if they -// also share display lists. -// -// GenBuffers may be called to generate a set of new buffer object names. -// -// The state of a buffer object immediately after it is first bound is an -// unmapped zero-sized memory buffer with GL.READ_WRITE access and -// GL.STATIC_DRAW usage. -// -// While a non-zero buffer object name is bound, GL operations on the target -// to which it is bound affect the bound buffer object, and queries of the -// target to which it is bound return state from the bound buffer object. -// While buffer object name zero is bound, as in the initial state, attempts -// to modify or query state on the target to which it is bound generates an -// GL.INVALID_OPERATION error. -// -// When vertex array pointer state is changed, for example by a call to -// NormalPointer, the current buffer object binding (GL.ARRAY_BUFFER_BINDING) -// is copied into the corresponding client state for the vertex array type -// being changed, for example GL.NORMAL_ARRAY_BUFFER_BINDING. While a -// non-zero buffer object is bound to the GL.ARRAY_BUFFER target, the vertex -// array pointer parameter that is traditionally interpreted as a pointer to -// client-side memory is instead interpreted as an offset within the buffer -// object measured in basic machine units. -// -// While a non-zero buffer object is bound to the GL.ELEMENT_ARRAY_BUFFER -// target, the indices parameter of DrawElements, DrawRangeElements, or -// MultiDrawElements that is traditionally interpreted as a pointer to -// client-side memory is instead interpreted as an offset within the buffer -// object measured in basic machine units. -// -// While a non-zero buffer object is bound to the GL.PIXEL_PACK_BUFFER -// target, the following commands are affected: GetCompressedTexImage, -// GetConvolutionFilter, GetHistogram, GetMinmax, GetPixelMap, -// GetPolygonStipple, GetSeparableFilter, GetTexImage, and ReadPixels. The -// pointer parameter that is traditionally interpreted as a pointer to -// client-side memory where the pixels are to be packed is instead -// interpreted as an offset within the buffer object measured in basic -// machine units. -// -// While a non-zero buffer object is bound to the GL.PIXEL_UNPACK_BUFFER -// target, the following commands are affected: Bitmap, ColorSubTable, -// ColorTable, CompressedTexImage1D, CompressedTexImage2D, -// CompressedTexImage3D, CompressedTexSubImage1D, CompressedTexSubImage2D, -// CompressedTexSubImage3D, ConvolutionFilter1D, ConvolutionFilter2D, -// DrawPixels, PixelMap, PolygonStipple, SeparableFilter2D, TexImage1D, -// TexImage2D, TexImage3D, TexSubImage1D, TexSubImage2D, and TexSubImage3D. -// The pointer parameter that is traditionally interpreted as a pointer to -// client-side memory from which the pixels are to be unpacked is instead -// interpreted as an offset within the buffer object measured in basic -// machine units. -// -// A buffer object binding created with BindBuffer remains active until a -// different buffer object name is bound to the same target, or until the -// bound buffer object is deleted with DeleteBuffers. -// -// Once created, a named buffer object may be re-bound to any target as often -// as needed. However, the GL implementation may make choices about how to -// optimize the storage of a buffer object based on its initial binding -// target. -// -// Error GL.INVALID_ENUM is generated if target is not one of the allowable -// values. GL.INVALID_OPERATION is generated if BindBuffer is executed -// between the execution of Begin and the corresponding execution of End. -// -// BindBuffer is available in GL version 1.5 or greater. -func (gl *GL) BindBuffer(target glbase.Enum, buffer glbase.Buffer) { - C.gl4_1compat_glBindBuffer(gl.funcs, C.GLenum(target), C.GLuint(buffer)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetQueryObjectuiv.xml -func (gl *GL) GetQueryObjectuiv(id uint32, pname glbase.Enum, params []uint32) { - C.gl4_1compat_glGetQueryObjectuiv(gl.funcs, C.GLuint(id), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetQueryObjectiv.xml -func (gl *GL) GetQueryObjectiv(id uint32, pname glbase.Enum, params []int32) { - C.gl4_1compat_glGetQueryObjectiv(gl.funcs, C.GLuint(id), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetQueryiv.xml -func (gl *GL) GetQueryiv(target, pname glbase.Enum, params []int32) { - C.gl4_1compat_glGetQueryiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEndQuery.xml -func (gl *GL) EndQuery(target glbase.Enum) { - C.gl4_1compat_glEndQuery(gl.funcs, C.GLenum(target)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBeginQuery.xml -func (gl *GL) BeginQuery(target glbase.Enum, id uint32) { - C.gl4_1compat_glBeginQuery(gl.funcs, C.GLenum(target), C.GLuint(id)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsQuery.xml -func (gl *GL) IsQuery(id uint32) bool { - glresult := C.gl4_1compat_glIsQuery(gl.funcs, C.GLuint(id)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDeleteQueries.xml -func (gl *GL) DeleteQueries(n int, ids []uint32) { - C.gl4_1compat_glDeleteQueries(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&ids[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGenQueries.xml -func (gl *GL) GenQueries(n int, ids []uint32) { - C.gl4_1compat_glGenQueries(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&ids[0]))) -} - -// VertexAttribPointer specifies the location and data format of the array -// of generic vertex attributes at index to use when rendering. size -// specifies the number of components per attribute and must be 1, 2, 3, or -// 4. type specifies the data type of each component, and stride specifies -// the byte stride from one attribute to the next, allowing vertices and -// attributes to be packed into a single array or stored in separate arrays. -// normalized indicates whether the values stored in an integer format are -// to be mapped to the range [-1,1] (for signed values) or [0,1] -// (for unsigned values) when they are accessed and converted to floating -// point; otherwise, values will be converted to floats directly without -// normalization. offset is a byte offset into the buffer object's data -// store, which must be bound to the GL.ARRAY_BUFFER target with BindBuffer. -// -// The buffer object binding (GL.ARRAY_BUFFER_BINDING) is saved as -// generic vertex attribute array client-side state -// (GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING) for the provided index. -// -// To enable and disable a generic vertex attribute array, call -// EnableVertexAttribArray and DisableVertexAttribArray with index. If -// enabled, the generic vertex attribute array is used when DrawArrays or -// DrawElements is called. Each generic vertex attribute array is initially -// disabled. -// -// VertexAttribPointer is typically implemented on the client side. -// -// Error GL.INVALID_ENUM is generated if type is not an accepted value. -// GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. GL.INVALID_VALUE is generated if size is not 1, 2, -// 3, or 4. GL.INVALID_VALUE is generated if stride is negative. -func (gl *GL) VertexAttribPointer(index glbase.Attrib, size int, gltype glbase.Enum, normalized bool, stride int, offset uintptr) { - offset_ptr := unsafe.Pointer(offset) - C.gl4_1compat_glVertexAttribPointer(gl.funcs, C.GLuint(index), C.GLint(size), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), C.GLsizei(stride), offset_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glValidateProgram.xml -func (gl *GL) ValidateProgram(program glbase.Program) { - C.gl4_1compat_glValidateProgram(gl.funcs, C.GLuint(program)) -} - -// UniformMatrix4fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix4fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix4fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(4*4) != 0 { - panic("invalid value length for UniformMatrix4fv") - } - count := len(value) / (4 * 4) - C.gl4_1compat_glUniformMatrix4fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix3fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix3fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix3fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(3*3) != 0 { - panic("invalid value length for UniformMatrix3fv") - } - count := len(value) / (3 * 3) - C.gl4_1compat_glUniformMatrix3fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix2fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix2fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix2fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(2*2) != 0 { - panic("invalid value length for UniformMatrix2fv") - } - count := len(value) / (2 * 2) - C.gl4_1compat_glUniformMatrix2fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform4iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform4iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - if len(value)%4 != 0 { - panic("invalid value length for Uniform4iv") - } - count := len(value) / 4 - C.gl4_1compat_glUniform4iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// Uniform3iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform3iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - if len(value)%3 != 0 { - panic("invalid value length for Uniform3iv") - } - count := len(value) / 3 - C.gl4_1compat_glUniform3iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// Uniform2iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform2iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - if len(value)%2 != 0 { - panic("invalid value length for Uniform2iv") - } - count := len(value) / 2 - C.gl4_1compat_glUniform2iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// Uniform1iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform1iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - count := len(value) - C.gl4_1compat_glUniform1iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// Uniform4fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform4fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - if len(value)%4 != 0 { - panic("invalid value length for Uniform4fv") - } - count := len(value) / 4 - C.gl4_1compat_glUniform4fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform3fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform3fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - if len(value)%3 != 0 { - panic("invalid value length for Uniform3fv") - } - count := len(value) / 3 - C.gl4_1compat_glUniform3fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform2fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform2fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - if len(value)%2 != 0 { - panic("invalid value length for Uniform2fv") - } - count := len(value) / 2 - C.gl4_1compat_glUniform2fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform1fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform1fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - count := len(value) - C.gl4_1compat_glUniform1fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform4i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform4i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4i(location glbase.Uniform, v0, v1, v2, v3 int32) { - C.gl4_1compat_glUniform4i(gl.funcs, C.GLint(location), C.GLint(v0), C.GLint(v1), C.GLint(v2), C.GLint(v3)) -} - -// Uniform3i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform3i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3i(location glbase.Uniform, v0, v1, v2 int32) { - C.gl4_1compat_glUniform3i(gl.funcs, C.GLint(location), C.GLint(v0), C.GLint(v1), C.GLint(v2)) -} - -// Uniform2i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform2i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2i(location glbase.Uniform, v0, v1 int32) { - C.gl4_1compat_glUniform2i(gl.funcs, C.GLint(location), C.GLint(v0), C.GLint(v1)) -} - -// Uniform1i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform1i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1i(location glbase.Uniform, v0 int32) { - C.gl4_1compat_glUniform1i(gl.funcs, C.GLint(location), C.GLint(v0)) -} - -// Uniform4f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform4f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4f(location glbase.Uniform, v0, v1, v2, v3 float32) { - C.gl4_1compat_glUniform4f(gl.funcs, C.GLint(location), C.GLfloat(v0), C.GLfloat(v1), C.GLfloat(v2), C.GLfloat(v3)) -} - -// Uniform3f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform3f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3f(location glbase.Uniform, v0, v1, v2 float32) { - C.gl4_1compat_glUniform3f(gl.funcs, C.GLint(location), C.GLfloat(v0), C.GLfloat(v1), C.GLfloat(v2)) -} - -// Uniform2f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform2f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2f(location glbase.Uniform, v0, v1 float32) { - C.gl4_1compat_glUniform2f(gl.funcs, C.GLint(location), C.GLfloat(v0), C.GLfloat(v1)) -} - -// Uniform1f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform1f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1f(location glbase.Uniform, v0 float32) { - C.gl4_1compat_glUniform1f(gl.funcs, C.GLint(location), C.GLfloat(v0)) -} - -// UseProgram installs the program object specified by program as part of -// current rendering state. One or more executables are created in a program -// object by successfully attaching shader objects to it with AttachShader, -// successfully compiling the shader objects with CompileShader, and -// successfully linking the program object with LinkProgram. -// -// A program object will contain an executable that will run on the vertex -// processor if it contains one or more shader objects of type -// GL.VERTEX_SHADER that have been successfully compiled and linked. -// Similarly, a program object will contain an executable that will run on -// the fragment processor if it contains one or more shader objects of type -// GL.FRAGMENT_SHADER that have been successfully compiled and linked. -// -// Successfully installing an executable on a programmable processor will -// cause the corresponding fixed functionality of OpenGL to be disabled. -// Specifically, if an executable is installed on the vertex processor, the -// OpenGL fixed functionality will be disabled as follows. -// -// - The modelview matrix is not applied to vertex coordinates. -// -// - The projection matrix is not applied to vertex coordinates. -// -// - The texture matrices are not applied to texture coordinates. -// -// - Normals are not transformed to eye coordinates. -// -// - Normals are not rescaled or normalized. -// -// - Normalization of GL.AUTO_NORMAL evaluated normals is not performed. -// -// - Texture coordinates are not generated automatically. -// -// - Per-vertex lighting is not performed. -// -// - Color material computations are not performed. -// -// - Color index lighting is not performed. -// -// - This list also applies when setting the current raster position. -// -// The executable that is installed on the vertex processor is expected to -// implement any or all of the desired functionality from the preceding list. -// Similarly, if an executable is installed on the fragment processor, the -// OpenGL fixed functionality will be disabled as follows. -// -// - Texture environment and texture functions are not applied. -// -// - Texture application is not applied. -// -// - Color sum is not applied. -// -// - Fog is not applied. -// -// Again, the fragment shader that is installed is expected to implement any -// or all of the desired functionality from the preceding list. -// -// While a program object is in use, applications are free to modify attached -// shader objects, compile attached shader objects, attach additional shader -// objects, and detach or delete shader objects. None of these operations -// will affect the executables that are part of the current state. However, -// relinking the program object that is currently in use will install the -// program object as part of the current rendering state if the link -// operation was successful (see LinkProgram). If the program object -// currently in use is relinked unsuccessfully, its link status will be set -// to GL.FALSE, but the executables and associated state will remain part of -// the current state until a subsequent call to UseProgram removes it from -// use. After it is removed from use, it cannot be made part of current state -// until it has been successfully relinked. -// -// If program contains shader objects of type GL.VERTEX_SHADER but it does -// not contain shader objects of type GL.FRAGMENT_SHADER, an executable will -// be installed on the vertex processor, but fixed functionality will be used -// for fragment processing. Similarly, if program contains shader objects of -// type GL.FRAGMENT_SHADER but it does not contain shader objects of type -// GL.VERTEX_SHADER, an executable will be installed on the fragment -// processor, but fixed functionality will be used for vertex processing. If -// program is 0, the programmable processors will be disabled, and fixed -// functionality will be used for both vertex and fragment processing. -// -// While a program object is in use, the state that controls the disabled -// fixed functionality may also be updated using the normal OpenGL calls. -// -// Like display lists and texture objects, the name space for program objects -// may be shared across a set of contexts, as long as the server sides of the -// contexts share the same address space. If the name space is shared across -// contexts, any attached objects and the data associated with those attached -// objects are shared as well. -// -// Applications are responsible for providing the synchronization across API -// calls when objects are accessed from different execution threads. -// -// Error GL.INVALID_VALUE is generated if program is neither 0 nor a value -// generated by OpenGL. GL.INVALID_OPERATION is generated if program is not -// a program object. GL.INVALID_OPERATION is generated if program could not -// be made part of current state. GL.INVALID_OPERATION is generated if -// UseProgram is executed between the execution of Begin and the -// corresponding execution of End. -// -// UseProgram is available in GL version 2.0 or greater. -func (gl *GL) UseProgram(program glbase.Program) { - C.gl4_1compat_glUseProgram(gl.funcs, C.GLuint(program)) -} - -// ShaderSource sets the source code in shader to the provided source code. Any source -// code previously stored in the shader object is completely replaced. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader is not a shader -// object. GL.INVALID_VALUE is generated if count is less than 0. -// GL.INVALID_OPERATION is generated if ShaderSource is executed between the -// execution of Begin and the corresponding execution of End. -// -// ShaderSource is available in GL version 2.0 or greater. -func (gl *GL) ShaderSource(shader glbase.Shader, source ...string) { - count := len(source) - length := make([]int32, count) - source_c := make([]unsafe.Pointer, count) - for i, src := range source { - length[i] = int32(len(src)) - if len(src) > 0 { - source_c[i] = *(*unsafe.Pointer)(unsafe.Pointer(&src)) - } else { - source_c[i] = unsafe.Pointer(uintptr(0)) - } - } - C.gl4_1compat_glShaderSource(gl.funcs, C.GLuint(shader), C.GLsizei(count), (**C.GLchar)(unsafe.Pointer(&source_c[0])), (*C.GLint)(unsafe.Pointer(&length[0]))) -} - -// LinkProgram links the program object specified by program. If any shader -// objects of type GL.VERTEX_SHADER are attached to program, they will be -// used to create an executable that will run on the programmable vertex -// processor. If any shader objects of type GL.FRAGMENT_SHADER are attached -// to program, they will be used to create an executable that will run on the -// programmable fragment processor. -// -// The status of the link operation will be stored as part of the program -// object's state. This value will be set to GL.TRUE if the program object -// was linked without errors and is ready for use, and GL.FALSE otherwise. It -// can be queried by calling GetProgramiv with arguments program and -// GL.LINK_STATUS. -// -// As a result of a successful link operation, all active user-defined -// uniform variables belonging to program will be initialized to 0, and each -// of the program object's active uniform variables will be assigned a -// location that can be queried by calling GetUniformLocation. Also, any -// active user-defined attribute variables that have not been bound to a -// generic vertex attribute index will be bound to one at this time. -// -// Linking of a program object can fail for a number of reasons as specified -// in the OpenGL Shading Language Specification. The following lists some of -// the conditions that will cause a link error. -// -// - The number of active attribute variables supported by the -// implementation has been exceeded. -// -// - The storage limit for uniform variables has been exceeded. -// -// - The number of active uniform variables supported by the implementation -// has been exceeded. -// -// - The main function is missing for the vertex shader or the fragment -// shader. -// -// - A varying variable actually used in the fragment shader is not -// declared in the same way (or is not declared at all) in the vertex -// shader. -// -// - A reference to a function or variable name is unresolved. -// -// - A shared global is declared with two different types or two different -// initial values. -// -// - One or more of the attached shader objects has not been successfully -// compiled. -// -// - Binding a generic attribute matrix caused some rows of the matrix to -// fall outside the allowed maximum of GL.MAX_VERTEX_ATTRIBS. -// -// - Not enough contiguous vertex attribute slots could be found to bind -// attribute matrices. -// -// When a program object has been successfully linked, the program object can -// be made part of current state by calling UseProgram. Whether or not the -// link operation was successful, the program object's information log will -// be overwritten. The information log can be retrieved by calling -// GetProgramInfoLog. -// -// LinkProgram will also install the generated executables as part of the -// current rendering state if the link operation was successful and the -// specified program object is already currently in use as a result of a -// previous call to UseProgram. If the program object currently in use is -// relinked unsuccessfully, its link status will be set to GL.FALSE , but the -// executables and associated state will remain part of the current state -// until a subsequent call to UseProgram removes it from use. After it is -// removed from use, it cannot be made part of current state until it has -// been successfully relinked. -// -// If program contains shader objects of type GL.VERTEX_SHADER but does not -// contain shader objects of type GL.FRAGMENT_SHADER, the vertex shader will -// be linked against the implicit interface for fixed functionality fragment -// processing. Similarly, if program contains shader objects of type -// GL.FRAGMENT_SHADER but it does not contain shader objects of type -// GL.VERTEX_SHADER, the fragment shader will be linked against the implicit -// interface for fixed functionality vertex processing. -// -// The program object's information log is updated and the program is -// generated at the time of the link operation. After the link operation, -// applications are free to modify attached shader objects, compile attached -// shader objects, detach shader objects, delete shader objects, and attach -// additional shader objects. None of these operations affects the -// information log or the program that is part of the program object. -// -// If the link operation is unsuccessful, any information about a previous -// link operation on program is lost (a failed link does not restore the -// old state of program). Certain information can still be retrieved -// from program even after an unsuccessful link operation. See for instance -// GetActiveAttrib and GetActiveUniform. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program -// object. GL.INVALID_OPERATION is generated if LinkProgram is executed -// between the execution of Begin and the corresponding execution of End. -// -// LinkProgram is available in GL version 2.0 or greater. -func (gl *GL) LinkProgram(program glbase.Program) { - C.gl4_1compat_glLinkProgram(gl.funcs, C.GLuint(program)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsShader.xml -func (gl *GL) IsShader(shader glbase.Shader) bool { - glresult := C.gl4_1compat_glIsShader(gl.funcs, C.GLuint(shader)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsProgram.xml -func (gl *GL) IsProgram(program glbase.Program) bool { - glresult := C.gl4_1compat_glIsProgram(gl.funcs, C.GLuint(program)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// GetVertexAttribiv returns in params the value of a generic vertex attribute -// parameter. The generic vertex attribute to be queried is specified by -// index, and the parameter to be queried is specified by pname. -// -// The accepted parameter names are as follows: -// -// GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING -// params returns a single value, the name of the buffer object -// currently bound to the binding point corresponding to generic vertex -// attribute array index. If no buffer object is bound, 0 is returned. -// The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_ENABLED -// params returns a single value that is non-zero (true) if the vertex -// attribute array for index is enabled and 0 (false) if it is -// disabled. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_SIZE -// params returns a single value, the size of the vertex attribute -// array for index. The size is the number of values for each element -// of the vertex attribute array, and it will be 1, 2, 3, or 4. The -// initial value is 4. -// -// GL.VERTEX_ATTRIB_ARRAY_STRIDE -// params returns a single value, the array stride for (number of bytes -// between successive elements in) the vertex attribute array for -// index. A value of 0 indicates that the array elements are stored -// sequentially in memory. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_TYPE -// params returns a single value, a symbolic constant indicating the -// array type for the vertex attribute array for index. Possible values -// are GL.BYTE, GL.UNSIGNED_BYTE, GL.SHORT, GL.UNSIGNED_SHORT, GL.INT, -// GL.UNSIGNED_INT, GL.FLOAT, and GL.DOUBLE. The initial value is -// GL.FLOAT. -// -// GL.VERTEX_ATTRIB_ARRAY_NORMALIZED -// params returns a single value that is non-zero (true) if fixed-point -// data types for the vertex attribute array indicated by index are -// normalized when they are converted to floating point, and 0 (false) -// otherwise. The initial value is 0. -// -// GL.CURRENT_VERTEX_ATTRIB -// params returns four values that represent the current value for the -// generic vertex attribute specified by index. Generic vertex -// attribute 0 is unique in that it has no current state, so an error -// will be generated if index is 0. The initial value for all other -// generic vertex attributes is (0,0,0,1). -// -// All of the parameters except GL.CURRENT_VERTEX_ATTRIB represent -// client-side state. -// -// Error GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. GL.INVALID_ENUM is generated if pname is not an -// accepted value. GL.INVALID_OPERATION is generated if index is 0 and pname -// is GL.CURRENT_VERTEX_ATTRIB. -// -// GetVertexAttribiv is available in GL version 2.0 or greater. -func (gl *GL) GetVertexAttribiv(index glbase.Attrib, pname glbase.Enum, params []int32) { - var params_c [4]int32 - C.gl4_1compat_glGetVertexAttribiv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetVertexAttribfv returns in params the value of a generic vertex attribute -// parameter. The generic vertex attribute to be queried is specified by -// index, and the parameter to be queried is specified by pname. -// -// The accepted parameter names are as follows: -// -// GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING -// params returns a single value, the name of the buffer object -// currently bound to the binding point corresponding to generic vertex -// attribute array index. If no buffer object is bound, 0 is returned. -// The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_ENABLED -// params returns a single value that is non-zero (true) if the vertex -// attribute array for index is enabled and 0 (false) if it is -// disabled. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_SIZE -// params returns a single value, the size of the vertex attribute -// array for index. The size is the number of values for each element -// of the vertex attribute array, and it will be 1, 2, 3, or 4. The -// initial value is 4. -// -// GL.VERTEX_ATTRIB_ARRAY_STRIDE -// params returns a single value, the array stride for (number of bytes -// between successive elements in) the vertex attribute array for -// index. A value of 0 indicates that the array elements are stored -// sequentially in memory. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_TYPE -// params returns a single value, a symbolic constant indicating the -// array type for the vertex attribute array for index. Possible values -// are GL.BYTE, GL.UNSIGNED_BYTE, GL.SHORT, GL.UNSIGNED_SHORT, GL.INT, -// GL.UNSIGNED_INT, GL.FLOAT, and GL.DOUBLE. The initial value is -// GL.FLOAT. -// -// GL.VERTEX_ATTRIB_ARRAY_NORMALIZED -// params returns a single value that is non-zero (true) if fixed-point -// data types for the vertex attribute array indicated by index are -// normalized when they are converted to floating point, and 0 (false) -// otherwise. The initial value is 0. -// -// GL.CURRENT_VERTEX_ATTRIB -// params returns four values that represent the current value for the -// generic vertex attribute specified by index. Generic vertex -// attribute 0 is unique in that it has no current state, so an error -// will be generated if index is 0. The initial value for all other -// generic vertex attributes is (0,0,0,1). -// -// All of the parameters except GL.CURRENT_VERTEX_ATTRIB represent -// client-side state. -// -// Error GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. GL.INVALID_ENUM is generated if pname is not an -// accepted value. GL.INVALID_OPERATION is generated if index is 0 and pname -// is GL.CURRENT_VERTEX_ATTRIB. -// -// GetVertexAttribfv is available in GL version 2.0 or greater. -func (gl *GL) GetVertexAttribfv(index glbase.Attrib, pname glbase.Enum, params []float32) { - var params_c [4]float32 - C.gl4_1compat_glGetVertexAttribfv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetVertexAttribdv returns in params the value of a generic vertex attribute -// parameter. The generic vertex attribute to be queried is specified by -// index, and the parameter to be queried is specified by pname. -// -// The accepted parameter names are as follows: -// -// GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING -// params returns a single value, the name of the buffer object -// currently bound to the binding point corresponding to generic vertex -// attribute array index. If no buffer object is bound, 0 is returned. -// The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_ENABLED -// params returns a single value that is non-zero (true) if the vertex -// attribute array for index is enabled and 0 (false) if it is -// disabled. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_SIZE -// params returns a single value, the size of the vertex attribute -// array for index. The size is the number of values for each element -// of the vertex attribute array, and it will be 1, 2, 3, or 4. The -// initial value is 4. -// -// GL.VERTEX_ATTRIB_ARRAY_STRIDE -// params returns a single value, the array stride for (number of bytes -// between successive elements in) the vertex attribute array for -// index. A value of 0 indicates that the array elements are stored -// sequentially in memory. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_TYPE -// params returns a single value, a symbolic constant indicating the -// array type for the vertex attribute array for index. Possible values -// are GL.BYTE, GL.UNSIGNED_BYTE, GL.SHORT, GL.UNSIGNED_SHORT, GL.INT, -// GL.UNSIGNED_INT, GL.FLOAT, and GL.DOUBLE. The initial value is -// GL.FLOAT. -// -// GL.VERTEX_ATTRIB_ARRAY_NORMALIZED -// params returns a single value that is non-zero (true) if fixed-point -// data types for the vertex attribute array indicated by index are -// normalized when they are converted to floating point, and 0 (false) -// otherwise. The initial value is 0. -// -// GL.CURRENT_VERTEX_ATTRIB -// params returns four values that represent the current value for the -// generic vertex attribute specified by index. Generic vertex -// attribute 0 is unique in that it has no current state, so an error -// will be generated if index is 0. The initial value for all other -// generic vertex attributes is (0,0,0,1). -// -// All of the parameters except GL.CURRENT_VERTEX_ATTRIB represent -// client-side state. -// -// Error GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. GL.INVALID_ENUM is generated if pname is not an -// accepted value. GL.INVALID_OPERATION is generated if index is 0 and pname -// is GL.CURRENT_VERTEX_ATTRIB. -// -// GetVertexAttribdv is available in GL version 2.0 or greater. -func (gl *GL) GetVertexAttribdv(index glbase.Attrib, pname glbase.Enum, params []float64) { - var params_c [4]float64 - C.gl4_1compat_glGetVertexAttribdv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetUniformiv returns in params the value of the specified uniform -// variable. The type of the uniform variable specified by location -// determines the number of values returned. If the uniform variable is -// defined in the shader as a boolean, int, or float, a single value will be -// returned. If it is defined as a vec2, ivec2, or bvec2, two values will be -// returned. If it is defined as a vec3, ivec3, or bvec3, three values will -// be returned, and so on. To query values stored in uniform variables -// declared as arrays, call GetUniformiv for each element of the array. To -// query values stored in uniform variables declared as structures, call -// GetUniformiv for each field in the structure. The values for uniform -// variables declared as a matrix will be returned in column major order. -// -// The locations assigned to uniform variables are not known until the -// program object is linked. After linking has occurred, the command -// GetUniformLocation can be used to obtain the location of a uniform -// variable. This location value can then be passed to GetUniformiv in order -// to query the current value of the uniform variable. After a program object -// has been linked successfully, the index values for uniform variables -// remain fixed until the next link command occurs. The uniform variable -// values can only be queried after a link if the link was successful. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program -// object. GL.INVALID_OPERATION is generated if program has not been -// successfully linked. GL.INVALID_OPERATION is generated if location does -// not correspond to a valid uniform variable location for the specified -// program object. GL.INVALID_OPERATION is generated if GetUniformiv is -// executed between the execution of Begin and the corresponding execution of -// End. -// -// GetUniformiv is available in GL version 2.0 or greater. -func (gl *GL) GetUniformiv(program glbase.Program, location glbase.Uniform, params []int32) { - var params_c [4]int32 - C.gl4_1compat_glGetUniformiv(gl.funcs, C.GLuint(program), C.GLint(location), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetUniformfv returns in params the value of the specified uniform -// variable. The type of the uniform variable specified by location -// determines the number of values returned. If the uniform variable is -// defined in the shader as a boolean, int, or float, a single value will be -// returned. If it is defined as a vec2, ivec2, or bvec2, two values will be -// returned. If it is defined as a vec3, ivec3, or bvec3, three values will -// be returned, and so on. To query values stored in uniform variables -// declared as arrays, call GetUniformfv for each element of the array. To -// query values stored in uniform variables declared as structures, call -// GetUniformfv for each field in the structure. The values for uniform -// variables declared as a matrix will be returned in column major order. -// -// The locations assigned to uniform variables are not known until the -// program object is linked. After linking has occurred, the command -// GetUniformLocation can be used to obtain the location of a uniform -// variable. This location value can then be passed to GetUniformfv in order -// to query the current value of the uniform variable. After a program object -// has been linked successfully, the index values for uniform variables -// remain fixed until the next link command occurs. The uniform variable -// values can only be queried after a link if the link was successful. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program -// object. GL.INVALID_OPERATION is generated if program has not been -// successfully linked. GL.INVALID_OPERATION is generated if location does -// not correspond to a valid uniform variable location for the specified -// program object. GL.INVALID_OPERATION is generated if GetUniformfv is -// executed between the execution of Begin and the corresponding execution of -// End. -// -// GetUniformfv is available in GL version 2.0 or greater. -func (gl *GL) GetUniformfv(program glbase.Program, location glbase.Uniform, params []float32) { - var params_c [4]float32 - C.gl4_1compat_glGetUniformfv(gl.funcs, C.GLuint(program), C.GLint(location), (*C.GLfloat)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetUniformLocation returns an integer that represents the location of a -// specific uniform variable within a program object. name must be an active -// uniform variable name in program that is not a structure, an array of -// structures, or a subcomponent of a vector or a matrix. This function -// returns -1 if name does not correspond to an active uniform variable in -// program or if name starts with the reserved prefix "gl_". -// -// Uniform variables that are structures or arrays of structures may be -// queried by calling GetUniformLocation for each field within the -// structure. The array element operator "[]" and the structure field -// operator "." may be used in name in order to select elements within an -// array or fields within a structure. The result of using these operators is -// not allowed to be another structure, an array of structures, or a -// subcomponent of a vector or a matrix. Except if the last part of name -// indicates a uniform variable array, the location of the first element of -// an array can be retrieved by using the name of the array, or by using the -// name appended by "[0]". -// -// The actual locations assigned to uniform variables are not known until the -// program object is linked successfully. After linking has occurred, the -// command GetUniformLocation can be used to obtain the location of a -// uniform variable. This location value can then be passed to Uniform to -// set the value of the uniform variable or to GetUniform in order to query -// the current value of the uniform variable. After a program object has been -// linked successfully, the index values for uniform variables remain fixed -// until the next link command occurs. Uniform variable locations and values -// can only be queried after a link if the link was successful. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program object. -// GL.INVALID_OPERATION is generated if program has not been successfully -// linked. GL.INVALID_OPERATION is generated if GetUniformLocation is executed -// between the execution of Begin and the corresponding execution of End. -// -// GetUniformLocation is available in GL version 2.0 or greater. -func (gl *GL) GetUniformLocation(program glbase.Program, name string) glbase.Uniform { - name_cstr := C.CString(name) - glresult := C.gl4_1compat_glGetUniformLocation(gl.funcs, C.GLuint(program), (*C.GLchar)(name_cstr)) - C.free(unsafe.Pointer(name_cstr)) - return glbase.Uniform(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetShaderSource.xml -func (gl *GL) GetShaderSource(shader glbase.Shader, bufSize int32, length []int32, source []byte) { - C.gl4_1compat_glGetShaderSource(gl.funcs, C.GLuint(shader), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLchar)(unsafe.Pointer(&source[0]))) -} - -// GetShaderInfoLog returns the information log for the specified shader -// object. The information log for a shader object is modified when the -// shader is compiled. -// -// The information log for a shader object is a string that may contain -// diagnostic messages, warning messages, and other information about the -// last compile operation. When a shader object is created, its information -// log will be a string of length 0, and the size of the current log can be -// obtained by calling GetShaderiv with the value GL.INFO_LOG_LENGTH. -// -// The information log for a shader object is the OpenGL implementer's -// primary mechanism for conveying information about the compilation process. -// Therefore, the information log can be helpful to application developers -// during the development process, even when compilation is successful. -// Application developers should not expect different OpenGL implementations -// to produce identical information logs. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader is not a shader -// object. GL.INVALID_VALUE is generated if maxLength is less than 0. -// GL.INVALID_OPERATION is generated if GetShaderInfoLog is executed -// between the execution of Begin and the corresponding execution of End. -// -// GetShaderInfoLog is available in GL version 2.0 or greater. -func (gl *GL) GetShaderInfoLog(shader glbase.Shader) []byte { - var params [1]int32 - var length int32 - gl.GetShaderiv(shader, INFO_LOG_LENGTH, params[:]) - bufSize := params[0] - infoLog := make([]byte, int(bufSize)) - C.gl4_1compat_glGetShaderInfoLog(gl.funcs, C.GLuint(shader), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length)), (*C.GLchar)(unsafe.Pointer(&infoLog[0]))) - return infoLog -} - -// GetShaderiv GetShader returns in params the value of a parameter for a specific -// shader object. The following parameters are defined: -// -// GL.SHADER_TYPE -// params returns GL.VERTEX_SHADER if shader is a vertex shader object, -// and GL.FRAGMENT_SHADER if shader is a fragment shader object. -// -// GL.DELETE_STATUS -// params returns GL.TRUE if shader is currently flagged for deletion, -// and GL.FALSE otherwise. -// -// GL.COMPILE_STATUS -// params returns GL.TRUE if the last compile operation on shader was -// successful, and GL.FALSE otherwise. -// -// GL.INFO_LOG_LENGTH -// params returns the number of characters in the information log for -// shader including the null termination character (the size of the -// character buffer required to store the information log). If shader has -// no information log, a value of 0 is returned. -// -// GL.SHADER_SOURCE_LENGTH -// params returns the length of the concatenation of the source strings -// that make up the shader source for the shader, including the null -// termination character. (the size of the character buffer -// required to store the shader source). If no source code exists, 0 is -// returned. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader does not refer to a -// shader object. GL.INVALID_ENUM is generated if pname is not an accepted -// value. GL.INVALID_OPERATION is generated if GetShader is executed -// between the execution of Begin and the corresponding execution of End. -// -// GetShaderiv is available in GL version 2.0 or greater. -func (gl *GL) GetShaderiv(shader glbase.Shader, pname glbase.Enum, params []int32) { - var params_c [4]int32 - C.gl4_1compat_glGetShaderiv(gl.funcs, C.GLuint(shader), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetProgramInfoLog returns the information log for the specified program -// object. The information log for a program object is modified when the -// program object is linked or validated. -// -// The information log for a program object is either an empty string, or a -// string containing information about the last link operation, or a string -// containing information about the last validation operation. It may contain -// diagnostic messages, warning messages, and other information. When a -// program object is created, its information log will be a string of length -// 0, and the size of the current log can be obtained by calling GetProgramiv -// with the value GL.INFO_LOG_LENGTH. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated -// by OpenGL. GL.INVALID_OPERATION is generated if program is not a -// program object. -func (gl *GL) GetProgramInfoLog(program glbase.Program) []byte { - var params [1]int32 - var length int32 - gl.GetProgramiv(program, INFO_LOG_LENGTH, params[:]) - bufSize := params[0] - infoLog := make([]byte, int(bufSize)) - C.gl4_1compat_glGetProgramInfoLog(gl.funcs, C.GLuint(program), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length)), (*C.GLchar)(unsafe.Pointer(&infoLog[0]))) - return infoLog -} - -// GetProgramiv returns in params the value of a parameter for a specific -// program object. The following parameters are defined: -// -// GL.DELETE_STATUS -// params returns GL.TRUE if program is currently flagged for deletion, -// and GL.FALSE otherwise. -// -// GL.LINK_STATUS -// params returns GL.TRUE if the last link operation on program was -// successful, and GL.FALSE otherwise. -// -// GL.VALIDATE_STATUS -// params returns GL.TRUE or if the last validation operation on -// program was successful, and GL.FALSE otherwise. -// -// GL.INFO_LOG_LENGTH -// params returns the number of characters in the information log for -// program including the null termination character (the size of -// the character buffer required to store the information log). If -// program has no information log, a value of 0 is returned. -// -// GL.ATTACHED_SHADERS -// params returns the number of shader objects attached to program. -// -// GL.ACTIVE_ATTRIBUTES -// params returns the number of active attribute variables for program. -// -// GL.ACTIVE_ATTRIBUTE_MAX_LENGTH -// params returns the length of the longest active attribute name for -// program, including the null termination character (the size of -// the character buffer required to store the longest attribute name). -// If no active attributes exist, 0 is returned. -// -// GL.ACTIVE_UNIFORMS -// params returns the number of active uniform variables for program. -// -// GL.ACTIVE_UNIFORM_MAX_LENGTH -// params returns the length of the longest active uniform variable -// name for program, including the null termination character (i.e., -// the size of the character buffer required to store the longest -// uniform variable name). If no active uniform variables exist, 0 is -// returned. -// -// GL.TRANSFORM_FEEDBACK_BUFFER_MODE -// params returns a symbolic constant indicating the buffer mode used -// when transform feedback is active. This may be GL.SEPARATE_ATTRIBS -// or GL.INTERLEAVED_ATTRIBS. -// -// GL.TRANSFORM_FEEDBACK_VARYINGS -// params returns the number of varying variables to capture in transform -// feedback mode for the program. -// -// GL.TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH -// params returns the length of the longest variable name to be used for -// transform feedback, including the null-terminator. -// -// GL.GEOMETRY_VERTICES_OUT -// params returns the maximum number of vertices that the geometry shader in -// program will output. -// -// GL.GEOMETRY_INPUT_TYPE -// params returns a symbolic constant indicating the primitive type accepted -// as input to the geometry shader contained in program. -// -// GL.GEOMETRY_OUTPUT_TYPE -// params returns a symbolic constant indicating the primitive type that will -// be output by the geometry shader contained in program. -// -// GL.ACTIVE_UNIFORM_BLOCKS and GL.ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH are -// available only if the GL version 3.1 or greater. -// -// GL.GEOMETRY_VERTICES_OUT, GL.GEOMETRY_INPUT_TYPE and -// GL.GEOMETRY_OUTPUT_TYPE are accepted only if the GL version is 3.2 or -// greater. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program does not refer to a -// program object. GL.INVALID_OPERATION is generated if pname is -// GL.GEOMETRY_VERTICES_OUT, GL.GEOMETRY_INPUT_TYPE, or -// GL.GEOMETRY_OUTPUT_TYPE, and program does not contain a geometry shader. -// GL.INVALID_ENUM is generated if pname is not an accepted value. -func (gl *GL) GetProgramiv(program glbase.Program, pname glbase.Enum, params []int32) { - var params_c [4]int32 - C.gl4_1compat_glGetProgramiv(gl.funcs, C.GLuint(program), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetAttribLocation queries the previously linked program object specified -// by program for the attribute variable specified by name and returns the -// index of the generic vertex attribute that is bound to that attribute -// variable. If name is a matrix attribute variable, the index of the first -// column of the matrix is returned. If the named attribute variable is not -// an active attribute in the specified program object or if name starts with -// the reserved prefix "gl_", a value of -1 is returned. -// -// The association between an attribute variable name and a generic attribute -// index can be specified at any time by calling BindAttribLocation. -// Attribute bindings do not go into effect until LinkProgram is called. -// After a program object has been linked successfully, the index values for -// attribute variables remain fixed until the next link command occurs. The -// attribute values can only be queried after a link if the link was -// successful. GetAttribLocation returns the binding that actually went -// into effect the last time LinkProgram was called for the specified -// program object. Attribute bindings that have been specified since the last -// link operation are not returned by GetAttribLocation. -// -// Error GL_INVALID_OPERATION is generated if program is not a value -// generated by OpenGL. GL_INVALID_OPERATION is generated if program is not -// a program object. GL_INVALID_OPERATION is generated if program has not -// been successfully linked. GL_INVALID_OPERATION is generated if -// GetAttribLocation is executed between the execution of Begin and the -// corresponding execution of End. -// -// GetAttribLocation is available in GL version 2.0 or greater. -func (gl *GL) GetAttribLocation(program glbase.Program, name string) glbase.Attrib { - name_cstr := C.CString(name) - glresult := C.gl4_1compat_glGetAttribLocation(gl.funcs, C.GLuint(program), (*C.GLchar)(name_cstr)) - C.free(unsafe.Pointer(name_cstr)) - return glbase.Attrib(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetAttachedShaders.xml -func (gl *GL) GetAttachedShaders(program glbase.Program, maxCount int32, count []int, obj []uint32) { - C.gl4_1compat_glGetAttachedShaders(gl.funcs, C.GLuint(program), C.GLsizei(maxCount), (*C.GLsizei)(unsafe.Pointer(&count[0])), (*C.GLuint)(unsafe.Pointer(&obj[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveUniform.xml -func (gl *GL) GetActiveUniform(program glbase.Program, index uint32, bufSize int32, length []int32, size []int, gltype []glbase.Enum, name []byte) { - C.gl4_1compat_glGetActiveUniform(gl.funcs, C.GLuint(program), C.GLuint(index), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLint)(unsafe.Pointer(&size[0])), (*C.GLenum)(unsafe.Pointer(&gltype[0])), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveAttrib.xml -func (gl *GL) GetActiveAttrib(program glbase.Program, index glbase.Attrib, bufSize int32, length []int32, size []int, gltype []glbase.Enum, name []byte) { - C.gl4_1compat_glGetActiveAttrib(gl.funcs, C.GLuint(program), C.GLuint(index), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLint)(unsafe.Pointer(&size[0])), (*C.GLenum)(unsafe.Pointer(&gltype[0])), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEnableVertexAttribArray.xml -func (gl *GL) EnableVertexAttribArray(index glbase.Attrib) { - C.gl4_1compat_glEnableVertexAttribArray(gl.funcs, C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDisableVertexAttribArray.xml -func (gl *GL) DisableVertexAttribArray(index glbase.Attrib) { - C.gl4_1compat_glDisableVertexAttribArray(gl.funcs, C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDetachShader.xml -func (gl *GL) DetachShader(program glbase.Program, shader glbase.Shader) { - C.gl4_1compat_glDetachShader(gl.funcs, C.GLuint(program), C.GLuint(shader)) -} - -// DeleteShader frees the memory and invalidates the name associated with -// the shader object specified by shader. This command effectively undoes the -// effects of a call to CreateShader. -// -// If a shader object to be deleted is attached to a program object, it will -// be flagged for deletion, but it will not be deleted until it is no longer -// attached to any program object, for any rendering context (it must -// be detached from wherever it was attached before it will be deleted). A -// value of 0 for shader will be silently ignored. -// -// To determine whether an object has been flagged for deletion, call -// GetShader with arguments shader and GL.DELETE_STATUS. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. -// -// DeleteShader is available in GL version 2.0 or greater. -func (gl *GL) DeleteShader(shader glbase.Shader) { - C.gl4_1compat_glDeleteShader(gl.funcs, C.GLuint(shader)) -} - -// DeleteProgram frees the memory and invalidates the name associated with -// the program object specified by program. This command effectively undoes -// the effects of a call to CreateProgram. -// -// If a program object is in use as part of current rendering state, it will -// be flagged for deletion, but it will not be deleted until it is no longer -// part of current state for any rendering context. If a program object to be -// deleted has shader objects attached to it, those shader objects will be -// automatically detached but not deleted unless they have already been -// flagged for deletion by a previous call to DeleteShader. A value of 0 -// for program will be silently ignored. -// -// To determine whether a program object has been flagged for deletion, call -// GetProgram with arguments program and GL.DELETE_STATUS. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. -// -// DeleteProgram is available in GL version 2.0 or greater. -func (gl *GL) DeleteProgram(program glbase.Program) { - C.gl4_1compat_glDeleteProgram(gl.funcs, C.GLuint(program)) -} - -// CreateShader creates an empty shader object and returns a non-zero value -// by which it can be referenced. A shader object is used to maintain the -// source code strings that define a shader. shaderType indicates the type of -// shader to be created. -// -// Two types of shaders are supported. A shader of type GL.VERTEX_SHADER is a -// shader that is intended to run on the programmable vertex processor and -// replace the fixed functionality vertex processing in OpenGL. A shader of -// type GL.FRAGMENT_SHADER is a shader that is intended to run on the -// programmable fragment processor and replace the fixed functionality -// fragment processing in OpenGL. -// -// When created, a shader object's GL.SHADER_TYPE parameter is set to either -// GL.VERTEX_SHADER or GL.FRAGMENT_SHADER, depending on the value of -// shaderType. -// -// Like display lists and texture objects, the name space for shader objects -// may be shared across a set of contexts, as long as the server sides of the -// contexts share the same address space. If the name space is shared across -// contexts, any attached objects and the data associated with those attached -// objects are shared as well. -// -// This function returns 0 if an error occurs creating the shader object. -// -// Error GL.INVALID_ENUM is generated if shaderType is not an accepted value. -// GL.INVALID_OPERATION is generated if CreateShader is executed between the -// execution of Begin and the corresponding execution of End. -// -// CreateShader is available in GL version 2.0 or greater. -func (gl *GL) CreateShader(gltype glbase.Enum) glbase.Shader { - glresult := C.gl4_1compat_glCreateShader(gl.funcs, C.GLenum(gltype)) - return glbase.Shader(glresult) -} - -// CreateProgram creates an empty program object and returns a non-zero -// value by which it can be referenced. A program object is an object to -// which shader objects can be attached. This provides a mechanism to specify -// the shader objects that will be linked to create a program. It also -// provides a means for checking the compatibility of the shaders that will -// be used to create a program (for instance, checking the compatibility -// between a vertex shader and a fragment shader). When no longer needed as -// part of a program object, shader objects can be detached. -// -// One or more executables are created in a program object by successfully -// attaching shader objects to it with AttachShader, successfully compiling -// the shader objects with CompileShader, and successfully linking the -// program object with LinkProgram. These executables are made part of -// current state when UseProgram is called. Program objects can be deleted -// by calling DeleteProgram. The memory associated with the program object -// will be deleted when it is no longer part of current rendering state for -// any context. -// -// Like display lists and texture objects, the name space for program objects -// may be shared across a set of contexts, as long as the server sides of the -// contexts share the same address space. If the name space is shared across -// contexts, any attached objects and the data associated with those attached -// objects are shared as well. -// -// Applications are responsible for providing the synchronization across API -// calls when objects are accessed from different execution threads. -// -// This function returns 0 if an error occurs creating the program object. -// -// Error GL.INVALID_OPERATION is generated if CreateProgram is executed -// between the execution of Begin and the corresponding execution of End. -// -// CreateProgram is available in GL version 2.0 or greater. -func (gl *GL) CreateProgram() glbase.Program { - glresult := C.gl4_1compat_glCreateProgram(gl.funcs) - return glbase.Program(glresult) -} - -// CompileShader compiles the source code strings that have been stored in -// the shader object specified by shader. -// -// The compilation status will be stored as part of the shader object's -// state. This value will be set to GL.TRUE if the shader was compiled without -// errors and is ready for use, and GL.FALSE otherwise. It can be queried by -// calling GetShaderiv with arguments shader and GL.COMPILE_STATUS. -// -// Compilation of a shader can fail for a number of reasons as specified by -// the OpenGL Shading Language Specification. Whether or not the compilation -// was successful, information about the compilation can be obtained from the -// shader object's information log by calling GetShaderInfoLog. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader is not a shader -// object. GL.INVALID_OPERATION is generated if CompileShader is executed -// between the execution of Begin and the corresponding execution of End. -// -// CompileShader is available in GL version 2.0 or greater. -func (gl *GL) CompileShader(shader glbase.Shader) { - C.gl4_1compat_glCompileShader(gl.funcs, C.GLuint(shader)) -} - -// BindAttribLocation associates a user-defined attribute variable in the program -// object specified by program with a generic vertex attribute index. The name -// parameter specifies the name of the vertex shader attribute variable to -// which index is to be bound. When program is made part of the current state, -// values provided via the generic vertex attribute index will modify the -// value of the user-defined attribute variable specified by name. -// -// If name refers to a matrix attribute variable, index refers to the first -// column of the matrix. Other matrix columns are then automatically bound to -// locations index+1 for a matrix of type mat2; index+1 and index+2 for a -// matrix of type mat3; and index+1, index+2, and index+3 for a matrix of -// type mat4. -// -// This command makes it possible for vertex shaders to use descriptive names -// for attribute variables rather than generic variables that are numbered -// from 0 to GL.MAX_VERTEX_ATTRIBS-1. The values sent to each generic -// attribute index are part of current state, just like standard vertex -// attributes such as color, normal, and vertex position. If a different -// program object is made current by calling UseProgram, the generic vertex -// attributes are tracked in such a way that the same values will be observed -// by attributes in the new program object that are also bound to index. -// -// Attribute variable name-to-generic attribute index bindings for a program -// object can be explicitly assigned at any time by calling -// BindAttribLocation. Attribute bindings do not go into effect until -// LinkProgram is called. After a program object has been linked -// successfully, the index values for generic attributes remain fixed (and -// their values can be queried) until the next link command occurs. -// -// Applications are not allowed to bind any of the standard OpenGL vertex -// attributes using this command, as they are bound automatically when -// needed. Any attribute binding that occurs after the program object has -// been linked will not take effect until the next time the program object is -// linked. -// -// If name was bound previously, that information is lost. Thus you cannot -// bind one user-defined attribute variable to multiple indices, but you can -// bind multiple user-defined attribute variables to the same index. -// -// Applications are allowed to bind more than one user-defined attribute -// variable to the same generic vertex attribute index. This is called -// aliasing, and it is allowed only if just one of the aliased attributes is -// active in the executable program, or if no path through the shader -// consumes more than one attribute of a set of attributes aliased to the -// same location. The compiler and linker are allowed to assume that no -// aliasing is done and are free to employ optimizations that work only in -// the absence of aliasing. OpenGL implementations are not required to do -// error checking to detect aliasing. Because there is no way to bind -// standard attributes, it is not possible to alias generic attributes with -// conventional ones (except for generic attribute 0). -// -// BindAttribLocation can be called before any vertex shader objects are -// bound to the specified program object. It is also permissible to bind a -// generic attribute index to an attribute variable name that is never used -// in a vertex shader. -// -// Active attributes that are not explicitly bound will be bound by the -// linker when LinkProgram is called. The locations assigned can be queried -// by calling GetAttribLocation. -// -// Error GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. -// GL.INVALID_OPERATION is generated if name starts with the reserved prefix "gl_". -// GL.INVALID_VALUE is generated if program is not a value generated by OpenGL. -// GL.INVALID_OPERATION is generated if program is not a program object. -// GL.INVALID_OPERATION is generated if BindAttribLocation is executed -// between the execution of Begin and the corresponding execution of End. -// -// BindAttribLocation is available in GL version 2.0 or greater. -func (gl *GL) BindAttribLocation(program glbase.Program, index glbase.Attrib, name string) { - name_cstr := C.CString(name) - C.gl4_1compat_glBindAttribLocation(gl.funcs, C.GLuint(program), C.GLuint(index), (*C.GLchar)(name_cstr)) - C.free(unsafe.Pointer(name_cstr)) -} - -// AttachShader attaches a shader object to a program object. -// -// In order to create an executable, there must be a way to specify the list -// of things that will be linked together. Program objects provide this -// mechanism. Shaders that are to be linked together in a program object must -// first be attached to that program object. This indicates that shader will -// be included in link operations that will be performed on program. -// -// All operations that can be performed on a shader object are valid whether -// or not the shader object is attached to a program object. It is -// permissible to attach a shader object to a program object before source -// code has been loaded into the shader object or before the shader object -// has been compiled. It is permissible to attach multiple shader objects of -// the same type because each may contain a portion of the complete shader. -// It is also permissible to attach a shader object to more than one program -// object. If a shader object is deleted while it is attached to a program -// object, it will be flagged for deletion, and deletion will not occur until -// DetachShader is called to detach it from all program objects to which it -// is attached. -// -// Error GL.INVALID_VALUE is generated if either program or shader is not a -// value generated by OpenGL. GL.INVALID_OPERATION is generated if program -// is not a program object. GL.INVALID_OPERATION is generated if shader is -// not a shader object. GL.INVALID_OPERATION is generated if shader is -// already attached to program. GL.INVALID_OPERATION is generated if -// AttachShader is executed between the execution of Begin and the -// corresponding execution of End. -// -// AttachShader is available in GL version 2.0 or greater. -func (gl *GL) AttachShader(program glbase.Program, shader glbase.Shader) { - C.gl4_1compat_glAttachShader(gl.funcs, C.GLuint(program), C.GLuint(shader)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glStencilMaskSeparate.xml -func (gl *GL) StencilMaskSeparate(face glbase.Enum, mask uint32) { - C.gl4_1compat_glStencilMaskSeparate(gl.funcs, C.GLenum(face), C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glStencilFuncSeparate.xml -func (gl *GL) StencilFuncSeparate(face, glfunc glbase.Enum, ref int32, mask uint32) { - C.gl4_1compat_glStencilFuncSeparate(gl.funcs, C.GLenum(face), C.GLenum(glfunc), C.GLint(ref), C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glStencilOpSeparate.xml -func (gl *GL) StencilOpSeparate(face, sfail, dpfail, dppass glbase.Enum) { - C.gl4_1compat_glStencilOpSeparate(gl.funcs, C.GLenum(face), C.GLenum(sfail), C.GLenum(dpfail), C.GLenum(dppass)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawBuffers.xml -func (gl *GL) DrawBuffers(n int, bufs []glbase.Enum) { - C.gl4_1compat_glDrawBuffers(gl.funcs, C.GLsizei(n), (*C.GLenum)(unsafe.Pointer(&bufs[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendEquationSeparate.xml -func (gl *GL) BlendEquationSeparate(modeRGB, modeAlpha glbase.Enum) { - C.gl4_1compat_glBlendEquationSeparate(gl.funcs, C.GLenum(modeRGB), C.GLenum(modeAlpha)) -} - -// UniformMatrix4x3fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix4x3fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix4x3fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(4*3) != 0 { - panic("invalid value length for UniformMatrix4x3fv") - } - count := len(value) / (4 * 3) - C.gl4_1compat_glUniformMatrix4x3fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix3x4fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix3x4fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix3x4fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(3*4) != 0 { - panic("invalid value length for UniformMatrix3x4fv") - } - count := len(value) / (3 * 4) - C.gl4_1compat_glUniformMatrix3x4fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix4x2fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix4x2fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix4x2fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(4*2) != 0 { - panic("invalid value length for UniformMatrix4x2fv") - } - count := len(value) / (4 * 2) - C.gl4_1compat_glUniformMatrix4x2fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix2x4fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix2x4fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix2x4fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(2*4) != 0 { - panic("invalid value length for UniformMatrix2x4fv") - } - count := len(value) / (2 * 4) - C.gl4_1compat_glUniformMatrix2x4fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix3x2fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix3x2fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix3x2fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(3*2) != 0 { - panic("invalid value length for UniformMatrix3x2fv") - } - count := len(value) / (3 * 2) - C.gl4_1compat_glUniformMatrix3x2fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix2x3fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix2x3fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix2x3fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(2*3) != 0 { - panic("invalid value length for UniformMatrix2x3fv") - } - count := len(value) / (2 * 3) - C.gl4_1compat_glUniformMatrix2x3fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsVertexArray.xml -func (gl *GL) IsVertexArray(array uint32) bool { - glresult := C.gl4_1compat_glIsVertexArray(gl.funcs, C.GLuint(array)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGenVertexArrays.xml -func (gl *GL) GenVertexArrays(n int, arrays []uint32) { - C.gl4_1compat_glGenVertexArrays(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&arrays[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDeleteVertexArrays.xml -func (gl *GL) DeleteVertexArrays(n int, arrays []uint32) { - C.gl4_1compat_glDeleteVertexArrays(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&arrays[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindVertexArray.xml -func (gl *GL) BindVertexArray(array uint32) { - C.gl4_1compat_glBindVertexArray(gl.funcs, C.GLuint(array)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFlushMappedBufferRange.xml -func (gl *GL) FlushMappedBufferRange(target glbase.Enum, offset, length int) { - C.gl4_1compat_glFlushMappedBufferRange(gl.funcs, C.GLenum(target), C.GLintptr(offset), C.GLsizeiptr(length)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFramebufferTextureLayer.xml -func (gl *GL) FramebufferTextureLayer(target, attachment glbase.Enum, texture glbase.Texture, level int, layer int32) { - C.gl4_1compat_glFramebufferTextureLayer(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLuint(texture), C.GLint(level), C.GLint(layer)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRenderbufferStorageMultisample.xml -func (gl *GL) RenderbufferStorageMultisample(target glbase.Enum, samples int32, internalFormat glbase.Enum, width, height int) { - C.gl4_1compat_glRenderbufferStorageMultisample(gl.funcs, C.GLenum(target), C.GLsizei(samples), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlitFramebuffer.xml -func (gl *GL) BlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1 int32, mask glbase.Bitfield, filter glbase.Enum) { - C.gl4_1compat_glBlitFramebuffer(gl.funcs, C.GLint(srcX0), C.GLint(srcY0), C.GLint(srcX1), C.GLint(srcY1), C.GLint(dstX0), C.GLint(dstY0), C.GLint(dstX1), C.GLint(dstY1), C.GLbitfield(mask), C.GLenum(filter)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGenerateMipmap.xml -func (gl *GL) GenerateMipmap(target glbase.Enum) { - C.gl4_1compat_glGenerateMipmap(gl.funcs, C.GLenum(target)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetFramebufferAttachmentParameteriv.xml -func (gl *GL) GetFramebufferAttachmentParameteriv(target, attachment, pname glbase.Enum, params []int32) { - C.gl4_1compat_glGetFramebufferAttachmentParameteriv(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFramebufferRenderbuffer.xml -func (gl *GL) FramebufferRenderbuffer(target, attachment, renderbuffertarget glbase.Enum, renderbuffer glbase.Renderbuffer) { - C.gl4_1compat_glFramebufferRenderbuffer(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(renderbuffertarget), C.GLuint(renderbuffer)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFramebufferTexture3D.xml -func (gl *GL) FramebufferTexture3D(target, attachment, textarget glbase.Enum, texture glbase.Texture, level int, zoffset int32) { - C.gl4_1compat_glFramebufferTexture3D(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(textarget), C.GLuint(texture), C.GLint(level), C.GLint(zoffset)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFramebufferTexture2D.xml -func (gl *GL) FramebufferTexture2D(target, attachment, textarget glbase.Enum, texture glbase.Texture, level int) { - C.gl4_1compat_glFramebufferTexture2D(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(textarget), C.GLuint(texture), C.GLint(level)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFramebufferTexture1D.xml -func (gl *GL) FramebufferTexture1D(target, attachment, textarget glbase.Enum, texture glbase.Texture, level int) { - C.gl4_1compat_glFramebufferTexture1D(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(textarget), C.GLuint(texture), C.GLint(level)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCheckFramebufferStatus.xml -func (gl *GL) CheckFramebufferStatus(target glbase.Enum) glbase.Enum { - glresult := C.gl4_1compat_glCheckFramebufferStatus(gl.funcs, C.GLenum(target)) - return glbase.Enum(glresult) -} - -// GenFramebuffers returns n framebuffer object names in ids. There is no -// guarantee that the names form a contiguous set of integers; however, it is -// guaranteed that none of the returned names was in use immediately before -// the call to GenFramebuffers. -// -// Framebuffer object names returned by a call to GenFramebuffers are not -// returned by subsequent calls, unless they are first deleted with -// DeleteFramebuffers. -// -// The names returned in ids are marked as used, for the purposes of -// GenFramebuffers only, but they acquire state and type only when they are -// first bound. -// -// Error GL.INVALID_VALUE is generated if n is negative. -func (gl *GL) GenFramebuffers(n int) []glbase.Framebuffer { - if n == 0 { - return nil - } - framebuffers := make([]glbase.Framebuffer, n) - C.gl4_1compat_glGenFramebuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&framebuffers[0]))) - return framebuffers -} - -// DeleteFramebuffers deletes the framebuffer objects whose names are -// stored in the framebuffers slice. The name zero is reserved by the GL and -// is silently ignored, should it occur in framebuffers, as are other unused -// names. Once a framebuffer object is deleted, its name is again unused and -// it has no attachments. If a framebuffer that is currently bound to one or -// more of the targets GL.DRAW_FRAMEBUFFER or GL.READ_FRAMEBUFFER is deleted, -// it is as though BindFramebuffer had been executed with the corresponding -// target and framebuffer zero. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// DeleteFramebuffers is available in GL version 3.0 or greater. -func (gl *GL) DeleteFramebuffers(framebuffers []glbase.Framebuffer) { - n := len(framebuffers) - if n == 0 { - return - } - C.gl4_1compat_glDeleteFramebuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&framebuffers[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindFramebuffer.xml -func (gl *GL) BindFramebuffer(target glbase.Enum, framebuffer glbase.Framebuffer) { - C.gl4_1compat_glBindFramebuffer(gl.funcs, C.GLenum(target), C.GLuint(framebuffer)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsFramebuffer.xml -func (gl *GL) IsFramebuffer(framebuffer glbase.Framebuffer) bool { - glresult := C.gl4_1compat_glIsFramebuffer(gl.funcs, C.GLuint(framebuffer)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetRenderbufferParameteriv.xml -func (gl *GL) GetRenderbufferParameteriv(target, pname glbase.Enum, params []int32) { - C.gl4_1compat_glGetRenderbufferParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRenderbufferStorage.xml -func (gl *GL) RenderbufferStorage(target, internalFormat glbase.Enum, width, height int) { - C.gl4_1compat_glRenderbufferStorage(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height)) -} - -// GenRenderbuffers returns n renderbuffer object names in renderbuffers. -// There is no guarantee that the names form a contiguous set of integers; -// however, it is guaranteed that none of the returned names was in use -// immediately before the call to GenRenderbuffers. -// -// Renderbuffer object names returned by a call to GenRenderbuffers are not -// returned by subsequent calls, unless they are first deleted with -// DeleteRenderbuffers. -// -// The names returned in renderbuffers are marked as used, for the purposes -// of GenRenderbuffers only, but they acquire state and type only when they -// are first bound. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// GenRenderbuffers is available in GL version 3.0 or greater. -func (gl *GL) GenRenderbuffers(n int) []glbase.Renderbuffer { - if n == 0 { - return nil - } - renderbuffers := make([]glbase.Renderbuffer, n) - C.gl4_1compat_glGenRenderbuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&renderbuffers[0]))) - return renderbuffers -} - -// DeleteRenderbuffers deletes the renderbuffer objects whose names are stored -// in the renderbuffers slice. The name zero is reserved by the GL and -// is silently ignored, should it occur in renderbuffers, as are other unused -// names. Once a renderbuffer object is deleted, its name is again unused and -// it has no contents. If a renderbuffer that is currently bound to the -// target GL.RENDERBUFFER is deleted, it is as though BindRenderbuffer had -// been executed with a target of GL.RENDERBUFFER and a name of zero. -// -// If a renderbuffer object is attached to one or more attachment points in -// the currently bound framebuffer, then it as if FramebufferRenderbuffer -// had been called, with a renderbuffer of zero for each attachment point to -// which this image was attached in the currently bound framebuffer. In other -// words, this renderbuffer object is first detached from all attachment -// ponits in the currently bound framebuffer. Note that the renderbuffer -// image is specifically not detached from any non-bound framebuffers. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// DeleteRenderbuffers is available in GL version 3.0 or greater. -func (gl *GL) DeleteRenderbuffers(renderbuffers []glbase.Renderbuffer) { - n := len(renderbuffers) - if n == 0 { - return - } - C.gl4_1compat_glDeleteRenderbuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&renderbuffers[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindRenderbuffer.xml -func (gl *GL) BindRenderbuffer(target glbase.Enum, renderbuffer glbase.Renderbuffer) { - C.gl4_1compat_glBindRenderbuffer(gl.funcs, C.GLenum(target), C.GLuint(renderbuffer)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsRenderbuffer.xml -func (gl *GL) IsRenderbuffer(renderbuffer glbase.Renderbuffer) bool { - glresult := C.gl4_1compat_glIsRenderbuffer(gl.funcs, C.GLuint(renderbuffer)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearBufferfi.xml -func (gl *GL) ClearBufferfi(buffer glbase.Enum, drawbuffer int32, depth float32, stencil int32) { - C.gl4_1compat_glClearBufferfi(gl.funcs, C.GLenum(buffer), C.GLint(drawbuffer), C.GLfloat(depth), C.GLint(stencil)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearBufferfv.xml -func (gl *GL) ClearBufferfv(buffer glbase.Enum, drawbuffer int32, value []float32) { - C.gl4_1compat_glClearBufferfv(gl.funcs, C.GLenum(buffer), C.GLint(drawbuffer), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearBufferuiv.xml -func (gl *GL) ClearBufferuiv(buffer glbase.Enum, drawbuffer int32, value []uint32) { - C.gl4_1compat_glClearBufferuiv(gl.funcs, C.GLenum(buffer), C.GLint(drawbuffer), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearBufferiv.xml -func (gl *GL) ClearBufferiv(buffer glbase.Enum, drawbuffer int32, value []int32) { - C.gl4_1compat_glClearBufferiv(gl.funcs, C.GLenum(buffer), C.GLint(drawbuffer), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexParameterIuiv.xml -func (gl *GL) GetTexParameterIuiv(target, pname glbase.Enum, params []uint32) { - C.gl4_1compat_glGetTexParameterIuiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexParameterIiv.xml -func (gl *GL) GetTexParameterIiv(target, pname glbase.Enum, params []int32) { - C.gl4_1compat_glGetTexParameterIiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexParameterIuiv.xml -func (gl *GL) TexParameterIuiv(target, pname glbase.Enum, params []uint32) { - C.gl4_1compat_glTexParameterIuiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexParameterIiv.xml -func (gl *GL) TexParameterIiv(target, pname glbase.Enum, params []int32) { - C.gl4_1compat_glTexParameterIiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// Uniform4uiv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform4uiv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4uiv(location glbase.Uniform, value []uint32) { - if len(value) == 0 { - return - } - if len(value)%4 != 0 { - panic("invalid value length for Uniform4uiv") - } - count := len(value) / 4 - C.gl4_1compat_glUniform4uiv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// Uniform3uiv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform3uiv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3uiv(location glbase.Uniform, value []uint32) { - if len(value) == 0 { - return - } - if len(value)%3 != 0 { - panic("invalid value length for Uniform3uiv") - } - count := len(value) / 3 - C.gl4_1compat_glUniform3uiv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// Uniform2uiv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform2uiv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2uiv(location glbase.Uniform, value []uint32) { - if len(value) == 0 { - return - } - if len(value)%2 != 0 { - panic("invalid value length for Uniform2uiv") - } - count := len(value) / 2 - C.gl4_1compat_glUniform2uiv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// Uniform1uiv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform1uiv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1uiv(location glbase.Uniform, value []uint32) { - if len(value) == 0 { - return - } - count := len(value) - C.gl4_1compat_glUniform1uiv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// Uniform4ui modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform4ui operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4ui(location glbase.Uniform, v0, v1, v2, v3 uint32) { - C.gl4_1compat_glUniform4ui(gl.funcs, C.GLint(location), C.GLuint(v0), C.GLuint(v1), C.GLuint(v2), C.GLuint(v3)) -} - -// Uniform3ui modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform3ui operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3ui(location glbase.Uniform, v0, v1, v2 uint32) { - C.gl4_1compat_glUniform3ui(gl.funcs, C.GLint(location), C.GLuint(v0), C.GLuint(v1), C.GLuint(v2)) -} - -// Uniform2ui modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform2ui operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2ui(location glbase.Uniform, v0, v1 uint32) { - C.gl4_1compat_glUniform2ui(gl.funcs, C.GLint(location), C.GLuint(v0), C.GLuint(v1)) -} - -// Uniform1ui modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform1ui operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1ui(location glbase.Uniform, v0 uint32) { - C.gl4_1compat_glUniform1ui(gl.funcs, C.GLint(location), C.GLuint(v0)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetFragDataLocation.xml -func (gl *GL) GetFragDataLocation(program glbase.Program, name []byte) int32 { - glresult := C.gl4_1compat_glGetFragDataLocation(gl.funcs, C.GLuint(program), (*C.GLchar)(unsafe.Pointer(&name[0]))) - return int32(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindFragDataLocation.xml -func (gl *GL) BindFragDataLocation(program glbase.Program, color uint32, name []byte) { - C.gl4_1compat_glBindFragDataLocation(gl.funcs, C.GLuint(program), C.GLuint(color), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetUniformuiv.xml -func (gl *GL) GetUniformuiv(program glbase.Program, location glbase.Uniform, params []uint32) { - C.gl4_1compat_glGetUniformuiv(gl.funcs, C.GLuint(program), C.GLint(location), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetVertexAttribIuiv.xml -func (gl *GL) GetVertexAttribIuiv(index glbase.Attrib, pname glbase.Enum, params []uint32) { - C.gl4_1compat_glGetVertexAttribIuiv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetVertexAttribIiv.xml -func (gl *GL) GetVertexAttribIiv(index glbase.Attrib, pname glbase.Enum, params []int32) { - C.gl4_1compat_glGetVertexAttribIiv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribIPointer.xml -func (gl *GL) VertexAttribIPointer(index glbase.Attrib, size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl4_1compat_glVertexAttribIPointer(gl.funcs, C.GLuint(index), C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEndConditionalRender.xml -func (gl *GL) EndConditionalRender() { - C.gl4_1compat_glEndConditionalRender(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBeginConditionalRender.xml -func (gl *GL) BeginConditionalRender(id uint32, mode glbase.Enum) { - C.gl4_1compat_glBeginConditionalRender(gl.funcs, C.GLuint(id), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClampColor.xml -func (gl *GL) ClampColor(target, clamp glbase.Enum) { - C.gl4_1compat_glClampColor(gl.funcs, C.GLenum(target), C.GLenum(clamp)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTransformFeedbackVarying.xml -func (gl *GL) GetTransformFeedbackVarying(program glbase.Program, index uint32, bufSize int32, length []int32, size []int, gltype []glbase.Enum, name []byte) { - C.gl4_1compat_glGetTransformFeedbackVarying(gl.funcs, C.GLuint(program), C.GLuint(index), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLsizei)(unsafe.Pointer(&size[0])), (*C.GLenum)(unsafe.Pointer(&gltype[0])), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindBufferBase.xml -func (gl *GL) BindBufferBase(target glbase.Enum, index uint32, buffer glbase.Buffer) { - C.gl4_1compat_glBindBufferBase(gl.funcs, C.GLenum(target), C.GLuint(index), C.GLuint(buffer)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindBufferRange.xml -func (gl *GL) BindBufferRange(target glbase.Enum, index uint32, buffer glbase.Buffer, offset, size int) { - C.gl4_1compat_glBindBufferRange(gl.funcs, C.GLenum(target), C.GLuint(index), C.GLuint(buffer), C.GLintptr(offset), C.GLsizeiptr(size)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEndTransformFeedback.xml -func (gl *GL) EndTransformFeedback() { - C.gl4_1compat_glEndTransformFeedback(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBeginTransformFeedback.xml -func (gl *GL) BeginTransformFeedback(primitiveMode glbase.Enum) { - C.gl4_1compat_glBeginTransformFeedback(gl.funcs, C.GLenum(primitiveMode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsEnabledi.xml -func (gl *GL) IsEnabledi(target glbase.Enum, index uint32) bool { - glresult := C.gl4_1compat_glIsEnabledi(gl.funcs, C.GLenum(target), C.GLuint(index)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDisablei.xml -func (gl *GL) Disablei(target glbase.Enum, index uint32) { - C.gl4_1compat_glDisablei(gl.funcs, C.GLenum(target), C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEnablei.xml -func (gl *GL) Enablei(target glbase.Enum, index uint32) { - C.gl4_1compat_glEnablei(gl.funcs, C.GLenum(target), C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetIntegeri_v.xml -func (gl *GL) GetIntegeri_v(target glbase.Enum, index uint32, data []int32) { - C.gl4_1compat_glGetIntegeri_v(gl.funcs, C.GLenum(target), C.GLuint(index), (*C.GLint)(unsafe.Pointer(&data[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetBooleani_v.xml -func (gl *GL) GetBooleani_v(target glbase.Enum, index uint32, data []bool) { - C.gl4_1compat_glGetBooleani_v(gl.funcs, C.GLenum(target), C.GLuint(index), (*C.GLboolean)(unsafe.Pointer(&data[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorMaski.xml -func (gl *GL) ColorMaski(index uint32, r, g, b, a bool) { - C.gl4_1compat_glColorMaski(gl.funcs, C.GLuint(index), *(*C.GLboolean)(unsafe.Pointer(&r)), *(*C.GLboolean)(unsafe.Pointer(&g)), *(*C.GLboolean)(unsafe.Pointer(&b)), *(*C.GLboolean)(unsafe.Pointer(&a))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyBufferSubData.xml -func (gl *GL) CopyBufferSubData(readTarget, writeTarget glbase.Enum, readOffset, writeOffset, size int) { - C.gl4_1compat_glCopyBufferSubData(gl.funcs, C.GLenum(readTarget), C.GLenum(writeTarget), C.GLintptr(readOffset), C.GLintptr(writeOffset), C.GLsizeiptr(size)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformBlockBinding.xml -func (gl *GL) UniformBlockBinding(program glbase.Program, v0, v1 uint32) { - C.gl4_1compat_glUniformBlockBinding(gl.funcs, C.GLuint(program), C.GLuint(v0), C.GLuint(v1)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveUniformBlockName.xml -func (gl *GL) GetActiveUniformBlockName(program glbase.Program, uniformBlockIndex uint32, bufSize int32, length []int32, uniformBlockName []byte) { - C.gl4_1compat_glGetActiveUniformBlockName(gl.funcs, C.GLuint(program), C.GLuint(uniformBlockIndex), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLchar)(unsafe.Pointer(&uniformBlockName[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveUniformBlockiv.xml -func (gl *GL) GetActiveUniformBlockiv(program glbase.Program, uniformBlockIndex uint32, pname glbase.Enum, params []int32) { - C.gl4_1compat_glGetActiveUniformBlockiv(gl.funcs, C.GLuint(program), C.GLuint(uniformBlockIndex), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetUniformBlockIndex.xml -func (gl *GL) GetUniformBlockIndex(program glbase.Program, uniformBlockName []byte) uint32 { - glresult := C.gl4_1compat_glGetUniformBlockIndex(gl.funcs, C.GLuint(program), (*C.GLchar)(unsafe.Pointer(&uniformBlockName[0]))) - return uint32(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveUniformName.xml -func (gl *GL) GetActiveUniformName(program glbase.Program, uniformIndex uint32, bufSize int32, length []int32, uniformName []byte) { - C.gl4_1compat_glGetActiveUniformName(gl.funcs, C.GLuint(program), C.GLuint(uniformIndex), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLchar)(unsafe.Pointer(&uniformName[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveUniformsiv.xml -func (gl *GL) GetActiveUniformsiv(program glbase.Program, uniformCount int32, uniformIndices []uint32, pname glbase.Enum, params []int32) { - C.gl4_1compat_glGetActiveUniformsiv(gl.funcs, C.GLuint(program), C.GLsizei(uniformCount), (*C.GLuint)(unsafe.Pointer(&uniformIndices[0])), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPrimitiveRestartIndex.xml -func (gl *GL) PrimitiveRestartIndex(index uint32) { - C.gl4_1compat_glPrimitiveRestartIndex(gl.funcs, C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexBuffer.xml -func (gl *GL) TexBuffer(target, internalFormat glbase.Enum, buffer glbase.Buffer) { - C.gl4_1compat_glTexBuffer(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLuint(buffer)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawElementsInstanced.xml -func (gl *GL) DrawElementsInstanced(mode glbase.Enum, count int, gltype glbase.Enum, indices interface{}, instancecount int32) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl4_1compat_glDrawElementsInstanced(gl.funcs, C.GLenum(mode), C.GLsizei(count), C.GLenum(gltype), indices_ptr, C.GLsizei(instancecount)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawArraysInstanced.xml -func (gl *GL) DrawArraysInstanced(mode glbase.Enum, first, count int, instancecount int32) { - C.gl4_1compat_glDrawArraysInstanced(gl.funcs, C.GLenum(mode), C.GLint(first), C.GLsizei(count), C.GLsizei(instancecount)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSampleMaski.xml -func (gl *GL) SampleMaski(index uint32, mask glbase.Bitfield) { - C.gl4_1compat_glSampleMaski(gl.funcs, C.GLuint(index), C.GLbitfield(mask)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetMultisamplefv.xml -func (gl *GL) GetMultisamplefv(pname glbase.Enum, index uint32, val []float32) { - C.gl4_1compat_glGetMultisamplefv(gl.funcs, C.GLenum(pname), C.GLuint(index), (*C.GLfloat)(unsafe.Pointer(&val[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexImage3DMultisample.xml -func (gl *GL) TexImage3DMultisample(target glbase.Enum, samples, internalFormat int32, width, height int, depth int32, fixedsamplelocations bool) { - C.gl4_1compat_glTexImage3DMultisample(gl.funcs, C.GLenum(target), C.GLsizei(samples), C.GLint(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), *(*C.GLboolean)(unsafe.Pointer(&fixedsamplelocations))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexImage2DMultisample.xml -func (gl *GL) TexImage2DMultisample(target glbase.Enum, samples, internalFormat int32, width, height int, fixedsamplelocations bool) { - C.gl4_1compat_glTexImage2DMultisample(gl.funcs, C.GLenum(target), C.GLsizei(samples), C.GLint(internalFormat), C.GLsizei(width), C.GLsizei(height), *(*C.GLboolean)(unsafe.Pointer(&fixedsamplelocations))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetSynciv.xml -func (gl *GL) GetSynciv(sync glbase.Sync, pname glbase.Enum, bufSize int32, length, values []int32) { - C.gl4_1compat_glGetSynciv(gl.funcs, C.GLsync(unsafe.Pointer(sync)), C.GLenum(pname), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLint)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetInteger64v.xml -func (gl *GL) GetInteger64v(pname glbase.Enum, params []int64) { - C.gl4_1compat_glGetInteger64v(gl.funcs, C.GLenum(pname), (*C.GLint64)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWaitSync.xml -func (gl *GL) WaitSync(sync glbase.Sync, flags glbase.Bitfield, timeout uint64) { - C.gl4_1compat_glWaitSync(gl.funcs, C.GLsync(unsafe.Pointer(sync)), C.GLbitfield(flags), C.GLuint64(timeout)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClientWaitSync.xml -func (gl *GL) ClientWaitSync(sync glbase.Sync, flags glbase.Bitfield, timeout uint64) glbase.Enum { - glresult := C.gl4_1compat_glClientWaitSync(gl.funcs, C.GLsync(unsafe.Pointer(sync)), C.GLbitfield(flags), C.GLuint64(timeout)) - return glbase.Enum(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDeleteSync.xml -func (gl *GL) DeleteSync(sync glbase.Sync) { - C.gl4_1compat_glDeleteSync(gl.funcs, C.GLsync(unsafe.Pointer(sync))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsSync.xml -func (gl *GL) IsSync(sync glbase.Sync) bool { - glresult := C.gl4_1compat_glIsSync(gl.funcs, C.GLsync(unsafe.Pointer(sync))) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFenceSync.xml -func (gl *GL) FenceSync(condition glbase.Enum, flags glbase.Bitfield) glbase.Sync { - glresult := C.gl4_1compat_glFenceSync(gl.funcs, C.GLenum(condition), C.GLbitfield(flags)) - return glbase.Sync(unsafe.Pointer(glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProvokingVertex.xml -func (gl *GL) ProvokingVertex(mode glbase.Enum) { - C.gl4_1compat_glProvokingVertex(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawElementsInstancedBaseVertex.xml -func (gl *GL) DrawElementsInstancedBaseVertex(mode glbase.Enum, count int, gltype glbase.Enum, indices interface{}, instancecount, basevertex int32) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl4_1compat_glDrawElementsInstancedBaseVertex(gl.funcs, C.GLenum(mode), C.GLsizei(count), C.GLenum(gltype), indices_ptr, C.GLsizei(instancecount), C.GLint(basevertex)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawRangeElementsBaseVertex.xml -func (gl *GL) DrawRangeElementsBaseVertex(mode glbase.Enum, start, end uint32, count int, gltype glbase.Enum, indices interface{}, basevertex int32) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl4_1compat_glDrawRangeElementsBaseVertex(gl.funcs, C.GLenum(mode), C.GLuint(start), C.GLuint(end), C.GLsizei(count), C.GLenum(gltype), indices_ptr, C.GLint(basevertex)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawElementsBaseVertex.xml -func (gl *GL) DrawElementsBaseVertex(mode glbase.Enum, count int, gltype glbase.Enum, indices interface{}, basevertex int32) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl4_1compat_glDrawElementsBaseVertex(gl.funcs, C.GLenum(mode), C.GLsizei(count), C.GLenum(gltype), indices_ptr, C.GLint(basevertex)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFramebufferTexture.xml -func (gl *GL) FramebufferTexture(target, attachment glbase.Enum, texture glbase.Texture, level int) { - C.gl4_1compat_glFramebufferTexture(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLuint(texture), C.GLint(level)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetBufferParameteri64v.xml -func (gl *GL) GetBufferParameteri64v(target, pname glbase.Enum, params []int64) { - C.gl4_1compat_glGetBufferParameteri64v(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint64)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetInteger64i_v.xml -func (gl *GL) GetInteger64i_v(target glbase.Enum, index uint32, data []int64) { - C.gl4_1compat_glGetInteger64i_v(gl.funcs, C.GLenum(target), C.GLuint(index), (*C.GLint64)(unsafe.Pointer(&data[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribP4uiv.xml -func (gl *GL) VertexAttribP4uiv(index glbase.Attrib, gltype glbase.Enum, normalized bool, value []uint32) { - C.gl4_1compat_glVertexAttribP4uiv(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribP4ui.xml -func (gl *GL) VertexAttribP4ui(index glbase.Attrib, gltype glbase.Enum, normalized bool, value uint32) { - C.gl4_1compat_glVertexAttribP4ui(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribP3uiv.xml -func (gl *GL) VertexAttribP3uiv(index glbase.Attrib, gltype glbase.Enum, normalized bool, value []uint32) { - C.gl4_1compat_glVertexAttribP3uiv(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribP3ui.xml -func (gl *GL) VertexAttribP3ui(index glbase.Attrib, gltype glbase.Enum, normalized bool, value uint32) { - C.gl4_1compat_glVertexAttribP3ui(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribP2uiv.xml -func (gl *GL) VertexAttribP2uiv(index glbase.Attrib, gltype glbase.Enum, normalized bool, value []uint32) { - C.gl4_1compat_glVertexAttribP2uiv(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribP2ui.xml -func (gl *GL) VertexAttribP2ui(index glbase.Attrib, gltype glbase.Enum, normalized bool, value uint32) { - C.gl4_1compat_glVertexAttribP2ui(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribP1uiv.xml -func (gl *GL) VertexAttribP1uiv(index glbase.Attrib, gltype glbase.Enum, normalized bool, value []uint32) { - C.gl4_1compat_glVertexAttribP1uiv(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribP1ui.xml -func (gl *GL) VertexAttribP1ui(index glbase.Attrib, gltype glbase.Enum, normalized bool, value uint32) { - C.gl4_1compat_glVertexAttribP1ui(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColorP3uiv.xml -func (gl *GL) SecondaryColorP3uiv(gltype glbase.Enum, color []uint32) { - C.gl4_1compat_glSecondaryColorP3uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&color[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColorP3ui.xml -func (gl *GL) SecondaryColorP3ui(gltype glbase.Enum, color uint32) { - C.gl4_1compat_glSecondaryColorP3ui(gl.funcs, C.GLenum(gltype), C.GLuint(color)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorP4uiv.xml -func (gl *GL) ColorP4uiv(gltype glbase.Enum, color []uint32) { - C.gl4_1compat_glColorP4uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&color[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorP4ui.xml -func (gl *GL) ColorP4ui(gltype glbase.Enum, color uint32) { - C.gl4_1compat_glColorP4ui(gl.funcs, C.GLenum(gltype), C.GLuint(color)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorP3uiv.xml -func (gl *GL) ColorP3uiv(gltype glbase.Enum, color []uint32) { - C.gl4_1compat_glColorP3uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&color[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorP3ui.xml -func (gl *GL) ColorP3ui(gltype glbase.Enum, color uint32) { - C.gl4_1compat_glColorP3ui(gl.funcs, C.GLenum(gltype), C.GLuint(color)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glNormalP3uiv.xml -func (gl *GL) NormalP3uiv(gltype glbase.Enum, coords []uint32) { - C.gl4_1compat_glNormalP3uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glNormalP3ui.xml -func (gl *GL) NormalP3ui(gltype glbase.Enum, coords uint32) { - C.gl4_1compat_glNormalP3ui(gl.funcs, C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoordP4uiv.xml -func (gl *GL) MultiTexCoordP4uiv(texture, gltype glbase.Enum, coords []uint32) { - C.gl4_1compat_glMultiTexCoordP4uiv(gl.funcs, C.GLenum(texture), C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoordP4ui.xml -func (gl *GL) MultiTexCoordP4ui(texture, gltype glbase.Enum, coords uint32) { - C.gl4_1compat_glMultiTexCoordP4ui(gl.funcs, C.GLenum(texture), C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoordP3uiv.xml -func (gl *GL) MultiTexCoordP3uiv(texture, gltype glbase.Enum, coords []uint32) { - C.gl4_1compat_glMultiTexCoordP3uiv(gl.funcs, C.GLenum(texture), C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoordP3ui.xml -func (gl *GL) MultiTexCoordP3ui(texture, gltype glbase.Enum, coords uint32) { - C.gl4_1compat_glMultiTexCoordP3ui(gl.funcs, C.GLenum(texture), C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoordP2uiv.xml -func (gl *GL) MultiTexCoordP2uiv(texture, gltype glbase.Enum, coords []uint32) { - C.gl4_1compat_glMultiTexCoordP2uiv(gl.funcs, C.GLenum(texture), C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoordP2ui.xml -func (gl *GL) MultiTexCoordP2ui(texture, gltype glbase.Enum, coords uint32) { - C.gl4_1compat_glMultiTexCoordP2ui(gl.funcs, C.GLenum(texture), C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoordP1uiv.xml -func (gl *GL) MultiTexCoordP1uiv(texture, gltype glbase.Enum, coords []uint32) { - C.gl4_1compat_glMultiTexCoordP1uiv(gl.funcs, C.GLenum(texture), C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoordP1ui.xml -func (gl *GL) MultiTexCoordP1ui(texture, gltype glbase.Enum, coords uint32) { - C.gl4_1compat_glMultiTexCoordP1ui(gl.funcs, C.GLenum(texture), C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordP4uiv.xml -func (gl *GL) TexCoordP4uiv(gltype glbase.Enum, coords []uint32) { - C.gl4_1compat_glTexCoordP4uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordP4ui.xml -func (gl *GL) TexCoordP4ui(gltype glbase.Enum, coords uint32) { - C.gl4_1compat_glTexCoordP4ui(gl.funcs, C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordP3uiv.xml -func (gl *GL) TexCoordP3uiv(gltype glbase.Enum, coords []uint32) { - C.gl4_1compat_glTexCoordP3uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordP3ui.xml -func (gl *GL) TexCoordP3ui(gltype glbase.Enum, coords uint32) { - C.gl4_1compat_glTexCoordP3ui(gl.funcs, C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordP2uiv.xml -func (gl *GL) TexCoordP2uiv(gltype glbase.Enum, coords []uint32) { - C.gl4_1compat_glTexCoordP2uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordP2ui.xml -func (gl *GL) TexCoordP2ui(gltype glbase.Enum, coords uint32) { - C.gl4_1compat_glTexCoordP2ui(gl.funcs, C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordP1uiv.xml -func (gl *GL) TexCoordP1uiv(gltype glbase.Enum, coords []uint32) { - C.gl4_1compat_glTexCoordP1uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordP1ui.xml -func (gl *GL) TexCoordP1ui(gltype glbase.Enum, coords uint32) { - C.gl4_1compat_glTexCoordP1ui(gl.funcs, C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexP4uiv.xml -func (gl *GL) VertexP4uiv(gltype glbase.Enum, value []uint32) { - C.gl4_1compat_glVertexP4uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexP4ui.xml -func (gl *GL) VertexP4ui(gltype glbase.Enum, value uint32) { - C.gl4_1compat_glVertexP4ui(gl.funcs, C.GLenum(gltype), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexP3uiv.xml -func (gl *GL) VertexP3uiv(gltype glbase.Enum, value []uint32) { - C.gl4_1compat_glVertexP3uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexP3ui.xml -func (gl *GL) VertexP3ui(gltype glbase.Enum, value uint32) { - C.gl4_1compat_glVertexP3ui(gl.funcs, C.GLenum(gltype), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexP2uiv.xml -func (gl *GL) VertexP2uiv(gltype glbase.Enum, value []uint32) { - C.gl4_1compat_glVertexP2uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexP2ui.xml -func (gl *GL) VertexP2ui(gltype glbase.Enum, value uint32) { - C.gl4_1compat_glVertexP2ui(gl.funcs, C.GLenum(gltype), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetQueryObjectui64v.xml -func (gl *GL) GetQueryObjectui64v(id uint32, pname glbase.Enum, params []uint64) { - C.gl4_1compat_glGetQueryObjectui64v(gl.funcs, C.GLuint(id), C.GLenum(pname), (*C.GLuint64)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetQueryObjecti64v.xml -func (gl *GL) GetQueryObjecti64v(id uint32, pname glbase.Enum, params []int64) { - C.gl4_1compat_glGetQueryObjecti64v(gl.funcs, C.GLuint(id), C.GLenum(pname), (*C.GLint64)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glQueryCounter.xml -func (gl *GL) QueryCounter(id uint32, target glbase.Enum) { - C.gl4_1compat_glQueryCounter(gl.funcs, C.GLuint(id), C.GLenum(target)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetSamplerParameterIuiv.xml -func (gl *GL) GetSamplerParameterIuiv(sampler uint32, pname glbase.Enum, params []uint32) { - C.gl4_1compat_glGetSamplerParameterIuiv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetSamplerParameterfv.xml -func (gl *GL) GetSamplerParameterfv(sampler uint32, pname glbase.Enum, params []float32) { - C.gl4_1compat_glGetSamplerParameterfv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetSamplerParameterIiv.xml -func (gl *GL) GetSamplerParameterIiv(sampler uint32, pname glbase.Enum, params []int32) { - C.gl4_1compat_glGetSamplerParameterIiv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetSamplerParameteriv.xml -func (gl *GL) GetSamplerParameteriv(sampler uint32, pname glbase.Enum, params []int32) { - C.gl4_1compat_glGetSamplerParameteriv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSamplerParameterIuiv.xml -func (gl *GL) SamplerParameterIuiv(sampler uint32, pname glbase.Enum, param []uint32) { - C.gl4_1compat_glSamplerParameterIuiv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶m[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSamplerParameterIiv.xml -func (gl *GL) SamplerParameterIiv(sampler uint32, pname glbase.Enum, param []int32) { - C.gl4_1compat_glSamplerParameterIiv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶m[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSamplerParameterfv.xml -func (gl *GL) SamplerParameterfv(sampler uint32, pname glbase.Enum, param []float32) { - C.gl4_1compat_glSamplerParameterfv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶m[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSamplerParameterf.xml -func (gl *GL) SamplerParameterf(sampler uint32, pname glbase.Enum, param float32) { - C.gl4_1compat_glSamplerParameterf(gl.funcs, C.GLuint(sampler), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSamplerParameteriv.xml -func (gl *GL) SamplerParameteriv(sampler uint32, pname glbase.Enum, param []int32) { - C.gl4_1compat_glSamplerParameteriv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶m[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSamplerParameteri.xml -func (gl *GL) SamplerParameteri(sampler uint32, pname glbase.Enum, param int32) { - C.gl4_1compat_glSamplerParameteri(gl.funcs, C.GLuint(sampler), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindSampler.xml -func (gl *GL) BindSampler(unit, sampler uint32) { - C.gl4_1compat_glBindSampler(gl.funcs, C.GLuint(unit), C.GLuint(sampler)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsSampler.xml -func (gl *GL) IsSampler(sampler uint32) bool { - glresult := C.gl4_1compat_glIsSampler(gl.funcs, C.GLuint(sampler)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDeleteSamplers.xml -func (gl *GL) DeleteSamplers(count int, samplers []uint32) { - C.gl4_1compat_glDeleteSamplers(gl.funcs, C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&samplers[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGenSamplers.xml -func (gl *GL) GenSamplers(count int, samplers []uint32) { - C.gl4_1compat_glGenSamplers(gl.funcs, C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&samplers[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetFragDataIndex.xml -func (gl *GL) GetFragDataIndex(program glbase.Program, name []byte) int32 { - glresult := C.gl4_1compat_glGetFragDataIndex(gl.funcs, C.GLuint(program), (*C.GLchar)(unsafe.Pointer(&name[0]))) - return int32(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindFragDataLocationIndexed.xml -func (gl *GL) BindFragDataLocationIndexed(program glbase.Program, colorNumber, index uint32, name []byte) { - C.gl4_1compat_glBindFragDataLocationIndexed(gl.funcs, C.GLuint(program), C.GLuint(colorNumber), C.GLuint(index), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribDivisor.xml -func (gl *GL) VertexAttribDivisor(index glbase.Attrib, divisor uint32) { - C.gl4_1compat_glVertexAttribDivisor(gl.funcs, C.GLuint(index), C.GLuint(divisor)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetQueryIndexediv.xml -func (gl *GL) GetQueryIndexediv(target glbase.Enum, index uint32, pname glbase.Enum, params []int32) { - C.gl4_1compat_glGetQueryIndexediv(gl.funcs, C.GLenum(target), C.GLuint(index), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEndQueryIndexed.xml -func (gl *GL) EndQueryIndexed(target glbase.Enum, index uint32) { - C.gl4_1compat_glEndQueryIndexed(gl.funcs, C.GLenum(target), C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBeginQueryIndexed.xml -func (gl *GL) BeginQueryIndexed(target glbase.Enum, index, id uint32) { - C.gl4_1compat_glBeginQueryIndexed(gl.funcs, C.GLenum(target), C.GLuint(index), C.GLuint(id)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawTransformFeedbackStream.xml -func (gl *GL) DrawTransformFeedbackStream(mode glbase.Enum, id, stream uint32) { - C.gl4_1compat_glDrawTransformFeedbackStream(gl.funcs, C.GLenum(mode), C.GLuint(id), C.GLuint(stream)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawTransformFeedback.xml -func (gl *GL) DrawTransformFeedback(mode glbase.Enum, id uint32) { - C.gl4_1compat_glDrawTransformFeedback(gl.funcs, C.GLenum(mode), C.GLuint(id)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glResumeTransformFeedback.xml -func (gl *GL) ResumeTransformFeedback() { - C.gl4_1compat_glResumeTransformFeedback(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPauseTransformFeedback.xml -func (gl *GL) PauseTransformFeedback() { - C.gl4_1compat_glPauseTransformFeedback(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsTransformFeedback.xml -func (gl *GL) IsTransformFeedback(id uint32) bool { - glresult := C.gl4_1compat_glIsTransformFeedback(gl.funcs, C.GLuint(id)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGenTransformFeedbacks.xml -func (gl *GL) GenTransformFeedbacks(n int, ids []uint32) { - C.gl4_1compat_glGenTransformFeedbacks(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&ids[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDeleteTransformFeedbacks.xml -func (gl *GL) DeleteTransformFeedbacks(n int, ids []uint32) { - C.gl4_1compat_glDeleteTransformFeedbacks(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&ids[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindTransformFeedback.xml -func (gl *GL) BindTransformFeedback(target glbase.Enum, id uint32) { - C.gl4_1compat_glBindTransformFeedback(gl.funcs, C.GLenum(target), C.GLuint(id)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPatchParameterfv.xml -func (gl *GL) PatchParameterfv(pname glbase.Enum, values []float32) { - C.gl4_1compat_glPatchParameterfv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPatchParameteri.xml -func (gl *GL) PatchParameteri(pname glbase.Enum, value int32) { - C.gl4_1compat_glPatchParameteri(gl.funcs, C.GLenum(pname), C.GLint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetProgramStageiv.xml -func (gl *GL) GetProgramStageiv(program glbase.Program, shadertype, pname glbase.Enum, values []int32) { - C.gl4_1compat_glGetProgramStageiv(gl.funcs, C.GLuint(program), C.GLenum(shadertype), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetUniformSubroutineuiv.xml -func (gl *GL) GetUniformSubroutineuiv(shadertype glbase.Enum, location glbase.Uniform, params []uint32) { - C.gl4_1compat_glGetUniformSubroutineuiv(gl.funcs, C.GLenum(shadertype), C.GLint(location), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformSubroutinesuiv.xml -func (gl *GL) UniformSubroutinesuiv(shadertype glbase.Enum, count int, value []uint32) { - C.gl4_1compat_glUniformSubroutinesuiv(gl.funcs, C.GLenum(shadertype), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveSubroutineName.xml -func (gl *GL) GetActiveSubroutineName(program glbase.Program, shadertype glbase.Enum, index uint32, bufSize int32, length []int32, name []byte) { - C.gl4_1compat_glGetActiveSubroutineName(gl.funcs, C.GLuint(program), C.GLenum(shadertype), C.GLuint(index), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveSubroutineUniformName.xml -func (gl *GL) GetActiveSubroutineUniformName(program glbase.Program, shadertype glbase.Enum, index uint32, bufSize int32, length []int32, name []byte) { - C.gl4_1compat_glGetActiveSubroutineUniformName(gl.funcs, C.GLuint(program), C.GLenum(shadertype), C.GLuint(index), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveSubroutineUniformiv.xml -func (gl *GL) GetActiveSubroutineUniformiv(program glbase.Program, shadertype glbase.Enum, index uint32, pname glbase.Enum, values []int32) { - C.gl4_1compat_glGetActiveSubroutineUniformiv(gl.funcs, C.GLuint(program), C.GLenum(shadertype), C.GLuint(index), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetSubroutineIndex.xml -func (gl *GL) GetSubroutineIndex(program glbase.Program, shadertype glbase.Enum, name []byte) uint32 { - glresult := C.gl4_1compat_glGetSubroutineIndex(gl.funcs, C.GLuint(program), C.GLenum(shadertype), (*C.GLchar)(unsafe.Pointer(&name[0]))) - return uint32(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetSubroutineUniformLocation.xml -func (gl *GL) GetSubroutineUniformLocation(program glbase.Program, shadertype glbase.Enum, name []byte) int32 { - glresult := C.gl4_1compat_glGetSubroutineUniformLocation(gl.funcs, C.GLuint(program), C.GLenum(shadertype), (*C.GLchar)(unsafe.Pointer(&name[0]))) - return int32(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetUniformdv.xml -func (gl *GL) GetUniformdv(program glbase.Program, location glbase.Uniform, params []float64) { - C.gl4_1compat_glGetUniformdv(gl.funcs, C.GLuint(program), C.GLint(location), (*C.GLdouble)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix4x3dv.xml -func (gl *GL) UniformMatrix4x3dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_1compat_glUniformMatrix4x3dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix4x2dv.xml -func (gl *GL) UniformMatrix4x2dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_1compat_glUniformMatrix4x2dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix3x4dv.xml -func (gl *GL) UniformMatrix3x4dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_1compat_glUniformMatrix3x4dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix3x2dv.xml -func (gl *GL) UniformMatrix3x2dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_1compat_glUniformMatrix3x2dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix2x4dv.xml -func (gl *GL) UniformMatrix2x4dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_1compat_glUniformMatrix2x4dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix2x3dv.xml -func (gl *GL) UniformMatrix2x3dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_1compat_glUniformMatrix2x3dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix4dv.xml -func (gl *GL) UniformMatrix4dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_1compat_glUniformMatrix4dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix3dv.xml -func (gl *GL) UniformMatrix3dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_1compat_glUniformMatrix3dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix2dv.xml -func (gl *GL) UniformMatrix2dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_1compat_glUniformMatrix2dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniform4dv.xml -func (gl *GL) Uniform4dv(location glbase.Uniform, count int, value []float64) { - C.gl4_1compat_glUniform4dv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniform3dv.xml -func (gl *GL) Uniform3dv(location glbase.Uniform, count int, value []float64) { - C.gl4_1compat_glUniform3dv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniform2dv.xml -func (gl *GL) Uniform2dv(location glbase.Uniform, count int, value []float64) { - C.gl4_1compat_glUniform2dv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniform1dv.xml -func (gl *GL) Uniform1dv(location glbase.Uniform, count int, value []float64) { - C.gl4_1compat_glUniform1dv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniform4d.xml -func (gl *GL) Uniform4d(location glbase.Uniform, v0, v1, v2, v3 float64) { - C.gl4_1compat_glUniform4d(gl.funcs, C.GLint(location), C.GLdouble(v0), C.GLdouble(v1), C.GLdouble(v2), C.GLdouble(v3)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniform3d.xml -func (gl *GL) Uniform3d(location glbase.Uniform, v0, v1, v2 float64) { - C.gl4_1compat_glUniform3d(gl.funcs, C.GLint(location), C.GLdouble(v0), C.GLdouble(v1), C.GLdouble(v2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniform2d.xml -func (gl *GL) Uniform2d(location glbase.Uniform, v0, v1 float64) { - C.gl4_1compat_glUniform2d(gl.funcs, C.GLint(location), C.GLdouble(v0), C.GLdouble(v1)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniform1d.xml -func (gl *GL) Uniform1d(location glbase.Uniform, v0 float64) { - C.gl4_1compat_glUniform1d(gl.funcs, C.GLint(location), C.GLdouble(v0)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawElementsIndirect.xml -func (gl *GL) DrawElementsIndirect(mode, gltype glbase.Enum, indirect interface{}) { - var indirect_ptr unsafe.Pointer - var indirect_v = reflect.ValueOf(indirect) - if indirect != nil && indirect_v.Kind() != reflect.Slice { - panic("parameter indirect must be a slice") - } - if indirect != nil { - indirect_ptr = unsafe.Pointer(indirect_v.Index(0).Addr().Pointer()) - } - C.gl4_1compat_glDrawElementsIndirect(gl.funcs, C.GLenum(mode), C.GLenum(gltype), indirect_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawArraysIndirect.xml -func (gl *GL) DrawArraysIndirect(mode glbase.Enum, indirect interface{}) { - var indirect_ptr unsafe.Pointer - var indirect_v = reflect.ValueOf(indirect) - if indirect != nil && indirect_v.Kind() != reflect.Slice { - panic("parameter indirect must be a slice") - } - if indirect != nil { - indirect_ptr = unsafe.Pointer(indirect_v.Index(0).Addr().Pointer()) - } - C.gl4_1compat_glDrawArraysIndirect(gl.funcs, C.GLenum(mode), indirect_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendFuncSeparatei.xml -func (gl *GL) BlendFuncSeparatei(buf uint32, srcRGB, dstRGB, srcAlpha, dstAlpha glbase.Enum) { - C.gl4_1compat_glBlendFuncSeparatei(gl.funcs, C.GLuint(buf), C.GLenum(srcRGB), C.GLenum(dstRGB), C.GLenum(srcAlpha), C.GLenum(dstAlpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendFunci.xml -func (gl *GL) BlendFunci(buf uint32, src, dst glbase.Enum) { - C.gl4_1compat_glBlendFunci(gl.funcs, C.GLuint(buf), C.GLenum(src), C.GLenum(dst)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendEquationSeparatei.xml -func (gl *GL) BlendEquationSeparatei(buf uint32, modeRGB, modeAlpha glbase.Enum) { - C.gl4_1compat_glBlendEquationSeparatei(gl.funcs, C.GLuint(buf), C.GLenum(modeRGB), C.GLenum(modeAlpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendEquationi.xml -func (gl *GL) BlendEquationi(buf uint32, mode glbase.Enum) { - C.gl4_1compat_glBlendEquationi(gl.funcs, C.GLuint(buf), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMinSampleShading.xml -func (gl *GL) MinSampleShading(value float32) { - C.gl4_1compat_glMinSampleShading(gl.funcs, C.GLfloat(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetDoublei_v.xml -func (gl *GL) GetDoublei_v(target glbase.Enum, index uint32, data []float64) { - C.gl4_1compat_glGetDoublei_v(gl.funcs, C.GLenum(target), C.GLuint(index), (*C.GLdouble)(unsafe.Pointer(&data[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetFloati_v.xml -func (gl *GL) GetFloati_v(target glbase.Enum, index uint32, data []float32) { - C.gl4_1compat_glGetFloati_v(gl.funcs, C.GLenum(target), C.GLuint(index), (*C.GLfloat)(unsafe.Pointer(&data[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDepthRangeIndexed.xml -func (gl *GL) DepthRangeIndexed(index uint32, n, f float64) { - C.gl4_1compat_glDepthRangeIndexed(gl.funcs, C.GLuint(index), C.GLdouble(n), C.GLdouble(f)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDepthRangeArrayv.xml -func (gl *GL) DepthRangeArrayv(first uint32, count int, v []float64) { - C.gl4_1compat_glDepthRangeArrayv(gl.funcs, C.GLuint(first), C.GLsizei(count), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glScissorIndexedv.xml -func (gl *GL) ScissorIndexedv(index uint32, v []int32) { - C.gl4_1compat_glScissorIndexedv(gl.funcs, C.GLuint(index), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glScissorIndexed.xml -func (gl *GL) ScissorIndexed(index uint32, left, bottom int32, width, height int) { - C.gl4_1compat_glScissorIndexed(gl.funcs, C.GLuint(index), C.GLint(left), C.GLint(bottom), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glScissorArrayv.xml -func (gl *GL) ScissorArrayv(first uint32, count int, v []int32) { - C.gl4_1compat_glScissorArrayv(gl.funcs, C.GLuint(first), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glViewportIndexedfv.xml -func (gl *GL) ViewportIndexedfv(index uint32, v []float32) { - C.gl4_1compat_glViewportIndexedfv(gl.funcs, C.GLuint(index), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glViewportIndexedf.xml -func (gl *GL) ViewportIndexedf(index uint32, x, y, w, h float32) { - C.gl4_1compat_glViewportIndexedf(gl.funcs, C.GLuint(index), C.GLfloat(x), C.GLfloat(y), C.GLfloat(w), C.GLfloat(h)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glViewportArrayv.xml -func (gl *GL) ViewportArrayv(first uint32, count int, v []float32) { - C.gl4_1compat_glViewportArrayv(gl.funcs, C.GLuint(first), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetVertexAttribLdv.xml -func (gl *GL) GetVertexAttribLdv(index glbase.Attrib, pname glbase.Enum, params []float64) { - C.gl4_1compat_glGetVertexAttribLdv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribLPointer.xml -func (gl *GL) VertexAttribLPointer(index glbase.Attrib, size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl4_1compat_glVertexAttribLPointer(gl.funcs, C.GLuint(index), C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribL4dv.xml -func (gl *GL) VertexAttribL4dv(index glbase.Attrib, v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glVertexAttribL4dv(gl.funcs, C.GLuint(index), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribL3dv.xml -func (gl *GL) VertexAttribL3dv(index glbase.Attrib, v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glVertexAttribL3dv(gl.funcs, C.GLuint(index), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribL2dv.xml -func (gl *GL) VertexAttribL2dv(index glbase.Attrib, v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glVertexAttribL2dv(gl.funcs, C.GLuint(index), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribL1dv.xml -func (gl *GL) VertexAttribL1dv(index glbase.Attrib, v []float64) { - C.gl4_1compat_glVertexAttribL1dv(gl.funcs, C.GLuint(index), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribL4d.xml -func (gl *GL) VertexAttribL4d(index glbase.Attrib, x, y, z, w float64) { - C.gl4_1compat_glVertexAttribL4d(gl.funcs, C.GLuint(index), C.GLdouble(x), C.GLdouble(y), C.GLdouble(z), C.GLdouble(w)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribL3d.xml -func (gl *GL) VertexAttribL3d(index glbase.Attrib, x, y, z float64) { - C.gl4_1compat_glVertexAttribL3d(gl.funcs, C.GLuint(index), C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribL2d.xml -func (gl *GL) VertexAttribL2d(index glbase.Attrib, x, y float64) { - C.gl4_1compat_glVertexAttribL2d(gl.funcs, C.GLuint(index), C.GLdouble(x), C.GLdouble(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribL1d.xml -func (gl *GL) VertexAttribL1d(index glbase.Attrib, x float64) { - C.gl4_1compat_glVertexAttribL1d(gl.funcs, C.GLuint(index), C.GLdouble(x)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetProgramPipelineInfoLog.xml -func (gl *GL) GetProgramPipelineInfoLog(pipeline uint32, bufSize int32, length []int32, infoLog []byte) { - C.gl4_1compat_glGetProgramPipelineInfoLog(gl.funcs, C.GLuint(pipeline), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLchar)(unsafe.Pointer(&infoLog[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glValidateProgramPipeline.xml -func (gl *GL) ValidateProgramPipeline(pipeline uint32) { - C.gl4_1compat_glValidateProgramPipeline(gl.funcs, C.GLuint(pipeline)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix4x3dv.xml -func (gl *GL) ProgramUniformMatrix4x3dv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float64) { - if len(value) != 3 { - panic("parameter value has incorrect length") - } - C.gl4_1compat_glProgramUniformMatrix4x3dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix3x4dv.xml -func (gl *GL) ProgramUniformMatrix3x4dv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float64) { - if len(value) != 4 { - panic("parameter value has incorrect length") - } - C.gl4_1compat_glProgramUniformMatrix3x4dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix4x2dv.xml -func (gl *GL) ProgramUniformMatrix4x2dv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float64) { - if len(value) != 2 { - panic("parameter value has incorrect length") - } - C.gl4_1compat_glProgramUniformMatrix4x2dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix2x4dv.xml -func (gl *GL) ProgramUniformMatrix2x4dv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float64) { - if len(value) != 4 { - panic("parameter value has incorrect length") - } - C.gl4_1compat_glProgramUniformMatrix2x4dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix3x2dv.xml -func (gl *GL) ProgramUniformMatrix3x2dv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float64) { - if len(value) != 2 { - panic("parameter value has incorrect length") - } - C.gl4_1compat_glProgramUniformMatrix3x2dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix2x3dv.xml -func (gl *GL) ProgramUniformMatrix2x3dv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float64) { - if len(value) != 3 { - panic("parameter value has incorrect length") - } - C.gl4_1compat_glProgramUniformMatrix2x3dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix4x3fv.xml -func (gl *GL) ProgramUniformMatrix4x3fv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float32) { - if len(value) != 3 { - panic("parameter value has incorrect length") - } - C.gl4_1compat_glProgramUniformMatrix4x3fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix3x4fv.xml -func (gl *GL) ProgramUniformMatrix3x4fv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float32) { - if len(value) != 4 { - panic("parameter value has incorrect length") - } - C.gl4_1compat_glProgramUniformMatrix3x4fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix4x2fv.xml -func (gl *GL) ProgramUniformMatrix4x2fv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float32) { - if len(value) != 2 { - panic("parameter value has incorrect length") - } - C.gl4_1compat_glProgramUniformMatrix4x2fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix2x4fv.xml -func (gl *GL) ProgramUniformMatrix2x4fv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float32) { - if len(value) != 4 { - panic("parameter value has incorrect length") - } - C.gl4_1compat_glProgramUniformMatrix2x4fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix3x2fv.xml -func (gl *GL) ProgramUniformMatrix3x2fv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float32) { - if len(value) != 2 { - panic("parameter value has incorrect length") - } - C.gl4_1compat_glProgramUniformMatrix3x2fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix2x3fv.xml -func (gl *GL) ProgramUniformMatrix2x3fv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float32) { - if len(value) != 3 { - panic("parameter value has incorrect length") - } - C.gl4_1compat_glProgramUniformMatrix2x3fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix4dv.xml -func (gl *GL) ProgramUniformMatrix4dv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float64) { - if len(value) != 4 { - panic("parameter value has incorrect length") - } - C.gl4_1compat_glProgramUniformMatrix4dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix3dv.xml -func (gl *GL) ProgramUniformMatrix3dv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float64) { - if len(value) != 3 { - panic("parameter value has incorrect length") - } - C.gl4_1compat_glProgramUniformMatrix3dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix2dv.xml -func (gl *GL) ProgramUniformMatrix2dv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float64) { - if len(value) != 2 { - panic("parameter value has incorrect length") - } - C.gl4_1compat_glProgramUniformMatrix2dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix4fv.xml -func (gl *GL) ProgramUniformMatrix4fv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float32) { - if len(value) != 4 { - panic("parameter value has incorrect length") - } - C.gl4_1compat_glProgramUniformMatrix4fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix3fv.xml -func (gl *GL) ProgramUniformMatrix3fv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float32) { - if len(value) != 3 { - panic("parameter value has incorrect length") - } - C.gl4_1compat_glProgramUniformMatrix3fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix2fv.xml -func (gl *GL) ProgramUniformMatrix2fv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float32) { - if len(value) != 2 { - panic("parameter value has incorrect length") - } - C.gl4_1compat_glProgramUniformMatrix2fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform4uiv.xml -func (gl *GL) ProgramUniform4uiv(program glbase.Program, location glbase.Uniform, count int, value []uint32) { - C.gl4_1compat_glProgramUniform4uiv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform4ui.xml -func (gl *GL) ProgramUniform4ui(program glbase.Program, location glbase.Uniform, v0, v1, v2, v3 uint32) { - C.gl4_1compat_glProgramUniform4ui(gl.funcs, C.GLuint(program), C.GLint(location), C.GLuint(v0), C.GLuint(v1), C.GLuint(v2), C.GLuint(v3)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform4dv.xml -func (gl *GL) ProgramUniform4dv(program glbase.Program, location glbase.Uniform, count int, value []float64) { - if len(value) != 4 { - panic("parameter value has incorrect length") - } - C.gl4_1compat_glProgramUniform4dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform4d.xml -func (gl *GL) ProgramUniform4d(program glbase.Program, location glbase.Uniform, v0, v1, v2, v3 float64) { - C.gl4_1compat_glProgramUniform4d(gl.funcs, C.GLuint(program), C.GLint(location), C.GLdouble(v0), C.GLdouble(v1), C.GLdouble(v2), C.GLdouble(v3)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform4fv.xml -func (gl *GL) ProgramUniform4fv(program glbase.Program, location glbase.Uniform, count int, value []float32) { - if len(value) != 4 { - panic("parameter value has incorrect length") - } - C.gl4_1compat_glProgramUniform4fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform4f.xml -func (gl *GL) ProgramUniform4f(program glbase.Program, location glbase.Uniform, v0, v1, v2, v3 float32) { - C.gl4_1compat_glProgramUniform4f(gl.funcs, C.GLuint(program), C.GLint(location), C.GLfloat(v0), C.GLfloat(v1), C.GLfloat(v2), C.GLfloat(v3)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform4iv.xml -func (gl *GL) ProgramUniform4iv(program glbase.Program, location glbase.Uniform, count int, value []int32) { - if len(value) != 4 { - panic("parameter value has incorrect length") - } - C.gl4_1compat_glProgramUniform4iv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform4i.xml -func (gl *GL) ProgramUniform4i(program glbase.Program, location glbase.Uniform, v0, v1, v2, v3 int32) { - C.gl4_1compat_glProgramUniform4i(gl.funcs, C.GLuint(program), C.GLint(location), C.GLint(v0), C.GLint(v1), C.GLint(v2), C.GLint(v3)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform3uiv.xml -func (gl *GL) ProgramUniform3uiv(program glbase.Program, location glbase.Uniform, count int, value []uint32) { - C.gl4_1compat_glProgramUniform3uiv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform3ui.xml -func (gl *GL) ProgramUniform3ui(program glbase.Program, location glbase.Uniform, v0, v1, v2 uint32) { - C.gl4_1compat_glProgramUniform3ui(gl.funcs, C.GLuint(program), C.GLint(location), C.GLuint(v0), C.GLuint(v1), C.GLuint(v2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform3dv.xml -func (gl *GL) ProgramUniform3dv(program glbase.Program, location glbase.Uniform, count int, value []float64) { - if len(value) != 3 { - panic("parameter value has incorrect length") - } - C.gl4_1compat_glProgramUniform3dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform3d.xml -func (gl *GL) ProgramUniform3d(program glbase.Program, location glbase.Uniform, v0, v1, v2 float64) { - C.gl4_1compat_glProgramUniform3d(gl.funcs, C.GLuint(program), C.GLint(location), C.GLdouble(v0), C.GLdouble(v1), C.GLdouble(v2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform3fv.xml -func (gl *GL) ProgramUniform3fv(program glbase.Program, location glbase.Uniform, count int, value []float32) { - if len(value) != 3 { - panic("parameter value has incorrect length") - } - C.gl4_1compat_glProgramUniform3fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform3f.xml -func (gl *GL) ProgramUniform3f(program glbase.Program, location glbase.Uniform, v0, v1, v2 float32) { - C.gl4_1compat_glProgramUniform3f(gl.funcs, C.GLuint(program), C.GLint(location), C.GLfloat(v0), C.GLfloat(v1), C.GLfloat(v2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform3iv.xml -func (gl *GL) ProgramUniform3iv(program glbase.Program, location glbase.Uniform, count int, value []int32) { - if len(value) != 3 { - panic("parameter value has incorrect length") - } - C.gl4_1compat_glProgramUniform3iv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform3i.xml -func (gl *GL) ProgramUniform3i(program glbase.Program, location glbase.Uniform, v0, v1, v2 int32) { - C.gl4_1compat_glProgramUniform3i(gl.funcs, C.GLuint(program), C.GLint(location), C.GLint(v0), C.GLint(v1), C.GLint(v2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform2uiv.xml -func (gl *GL) ProgramUniform2uiv(program glbase.Program, location glbase.Uniform, count int, value []uint32) { - C.gl4_1compat_glProgramUniform2uiv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform2ui.xml -func (gl *GL) ProgramUniform2ui(program glbase.Program, location glbase.Uniform, v0, v1 uint32) { - C.gl4_1compat_glProgramUniform2ui(gl.funcs, C.GLuint(program), C.GLint(location), C.GLuint(v0), C.GLuint(v1)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform2dv.xml -func (gl *GL) ProgramUniform2dv(program glbase.Program, location glbase.Uniform, count int, value []float64) { - if len(value) != 2 { - panic("parameter value has incorrect length") - } - C.gl4_1compat_glProgramUniform2dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform2d.xml -func (gl *GL) ProgramUniform2d(program glbase.Program, location glbase.Uniform, v0, v1 float64) { - C.gl4_1compat_glProgramUniform2d(gl.funcs, C.GLuint(program), C.GLint(location), C.GLdouble(v0), C.GLdouble(v1)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform2fv.xml -func (gl *GL) ProgramUniform2fv(program glbase.Program, location glbase.Uniform, count int, value []float32) { - if len(value) != 2 { - panic("parameter value has incorrect length") - } - C.gl4_1compat_glProgramUniform2fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform2f.xml -func (gl *GL) ProgramUniform2f(program glbase.Program, location glbase.Uniform, v0, v1 float32) { - C.gl4_1compat_glProgramUniform2f(gl.funcs, C.GLuint(program), C.GLint(location), C.GLfloat(v0), C.GLfloat(v1)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform2iv.xml -func (gl *GL) ProgramUniform2iv(program glbase.Program, location glbase.Uniform, count int, value []int32) { - if len(value) != 2 { - panic("parameter value has incorrect length") - } - C.gl4_1compat_glProgramUniform2iv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform2i.xml -func (gl *GL) ProgramUniform2i(program glbase.Program, location glbase.Uniform, v0, v1 int32) { - C.gl4_1compat_glProgramUniform2i(gl.funcs, C.GLuint(program), C.GLint(location), C.GLint(v0), C.GLint(v1)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform1uiv.xml -func (gl *GL) ProgramUniform1uiv(program glbase.Program, location glbase.Uniform, count int, value []uint32) { - C.gl4_1compat_glProgramUniform1uiv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform1ui.xml -func (gl *GL) ProgramUniform1ui(program glbase.Program, location glbase.Uniform, v0 uint32) { - C.gl4_1compat_glProgramUniform1ui(gl.funcs, C.GLuint(program), C.GLint(location), C.GLuint(v0)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform1dv.xml -func (gl *GL) ProgramUniform1dv(program glbase.Program, location glbase.Uniform, count int, value []float64) { - C.gl4_1compat_glProgramUniform1dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform1d.xml -func (gl *GL) ProgramUniform1d(program glbase.Program, location glbase.Uniform, v0 float64) { - C.gl4_1compat_glProgramUniform1d(gl.funcs, C.GLuint(program), C.GLint(location), C.GLdouble(v0)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform1fv.xml -func (gl *GL) ProgramUniform1fv(program glbase.Program, location glbase.Uniform, count int, value []float32) { - C.gl4_1compat_glProgramUniform1fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform1f.xml -func (gl *GL) ProgramUniform1f(program glbase.Program, location glbase.Uniform, v0 float32) { - C.gl4_1compat_glProgramUniform1f(gl.funcs, C.GLuint(program), C.GLint(location), C.GLfloat(v0)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform1iv.xml -func (gl *GL) ProgramUniform1iv(program glbase.Program, location glbase.Uniform, count int, value []int32) { - C.gl4_1compat_glProgramUniform1iv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform1i.xml -func (gl *GL) ProgramUniform1i(program glbase.Program, location glbase.Uniform, v0 int32) { - C.gl4_1compat_glProgramUniform1i(gl.funcs, C.GLuint(program), C.GLint(location), C.GLint(v0)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetProgramPipelineiv.xml -func (gl *GL) GetProgramPipelineiv(pipeline uint32, pname glbase.Enum, params []int32) { - C.gl4_1compat_glGetProgramPipelineiv(gl.funcs, C.GLuint(pipeline), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsProgramPipeline.xml -func (gl *GL) IsProgramPipeline(pipeline uint32) bool { - glresult := C.gl4_1compat_glIsProgramPipeline(gl.funcs, C.GLuint(pipeline)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGenProgramPipelines.xml -func (gl *GL) GenProgramPipelines(n int, pipelines []uint32) { - C.gl4_1compat_glGenProgramPipelines(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&pipelines[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDeleteProgramPipelines.xml -func (gl *GL) DeleteProgramPipelines(n int, pipelines []uint32) { - C.gl4_1compat_glDeleteProgramPipelines(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&pipelines[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindProgramPipeline.xml -func (gl *GL) BindProgramPipeline(pipeline uint32) { - C.gl4_1compat_glBindProgramPipeline(gl.funcs, C.GLuint(pipeline)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glActiveShaderProgram.xml -func (gl *GL) ActiveShaderProgram(pipeline uint32, program glbase.Program) { - C.gl4_1compat_glActiveShaderProgram(gl.funcs, C.GLuint(pipeline), C.GLuint(program)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUseProgramStages.xml -func (gl *GL) UseProgramStages(pipeline uint32, stages glbase.Bitfield, program glbase.Program) { - C.gl4_1compat_glUseProgramStages(gl.funcs, C.GLuint(pipeline), C.GLbitfield(stages), C.GLuint(program)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramParameteri.xml -func (gl *GL) ProgramParameteri(program glbase.Program, pname glbase.Enum, value int32) { - C.gl4_1compat_glProgramParameteri(gl.funcs, C.GLuint(program), C.GLenum(pname), C.GLint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramBinary.xml -func (gl *GL) ProgramBinary(program glbase.Program, binaryFormat glbase.Enum, binary interface{}, length int32) { - var binary_ptr unsafe.Pointer - var binary_v = reflect.ValueOf(binary) - if binary != nil && binary_v.Kind() != reflect.Slice { - panic("parameter binary must be a slice") - } - if binary != nil { - binary_ptr = unsafe.Pointer(binary_v.Index(0).Addr().Pointer()) - } - C.gl4_1compat_glProgramBinary(gl.funcs, C.GLuint(program), C.GLenum(binaryFormat), binary_ptr, C.GLsizei(length)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetProgramBinary.xml -func (gl *GL) GetProgramBinary(program glbase.Program, bufSize int32, length []int32, binaryFormat []glbase.Enum, binary interface{}) { - var binary_ptr unsafe.Pointer - var binary_v = reflect.ValueOf(binary) - if binary != nil && binary_v.Kind() != reflect.Slice { - panic("parameter binary must be a slice") - } - if binary != nil { - binary_ptr = unsafe.Pointer(binary_v.Index(0).Addr().Pointer()) - } - C.gl4_1compat_glGetProgramBinary(gl.funcs, C.GLuint(program), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLenum)(unsafe.Pointer(&binaryFormat[0])), binary_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearDepthf.xml -func (gl *GL) ClearDepthf(dd float32) { - C.gl4_1compat_glClearDepthf(gl.funcs, C.GLfloat(dd)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDepthRangef.xml -func (gl *GL) DepthRangef(n, f float32) { - C.gl4_1compat_glDepthRangef(gl.funcs, C.GLfloat(n), C.GLfloat(f)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetShaderPrecisionFormat.xml -func (gl *GL) GetShaderPrecisionFormat(shadertype, precisionType glbase.Enum, range_, precision []int32) { - C.gl4_1compat_glGetShaderPrecisionFormat(gl.funcs, C.GLenum(shadertype), C.GLenum(precisionType), (*C.GLint)(unsafe.Pointer(&range_[0])), (*C.GLint)(unsafe.Pointer(&precision[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glShaderBinary.xml -func (gl *GL) ShaderBinary(count int, shaders []glbase.Shader, binaryFormat glbase.Enum, binary interface{}, length int32) { - var binary_ptr unsafe.Pointer - var binary_v = reflect.ValueOf(binary) - if binary != nil && binary_v.Kind() != reflect.Slice { - panic("parameter binary must be a slice") - } - if binary != nil { - binary_ptr = unsafe.Pointer(binary_v.Index(0).Addr().Pointer()) - } - C.gl4_1compat_glShaderBinary(gl.funcs, C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&shaders[0])), C.GLenum(binaryFormat), binary_ptr, C.GLsizei(length)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glReleaseShaderCompiler.xml -func (gl *GL) ReleaseShaderCompiler() { - C.gl4_1compat_glReleaseShaderCompiler(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTranslatef.xml -func (gl *GL) Translatef(x, y, z float32) { - C.gl4_1compat_glTranslatef(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTranslated.xml -func (gl *GL) Translated(x, y, z float64) { - C.gl4_1compat_glTranslated(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glScalef.xml -func (gl *GL) Scalef(x, y, z float32) { - C.gl4_1compat_glScalef(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glScaled.xml -func (gl *GL) Scaled(x, y, z float64) { - C.gl4_1compat_glScaled(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRotatef.xml -func (gl *GL) Rotatef(angle, x, y, z float32) { - C.gl4_1compat_glRotatef(gl.funcs, C.GLfloat(angle), C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRotated.xml -func (gl *GL) Rotated(angle, x, y, z float64) { - C.gl4_1compat_glRotated(gl.funcs, C.GLdouble(angle), C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPushMatrix.xml -func (gl *GL) PushMatrix() { - C.gl4_1compat_glPushMatrix(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPopMatrix.xml -func (gl *GL) PopMatrix() { - C.gl4_1compat_glPopMatrix(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glOrtho.xml -func (gl *GL) Ortho(left, right, bottom, top, zNear, zFar float64) { - C.gl4_1compat_glOrtho(gl.funcs, C.GLdouble(left), C.GLdouble(right), C.GLdouble(bottom), C.GLdouble(top), C.GLdouble(zNear), C.GLdouble(zFar)) -} - -// MultMatrixd multiplies the current matrix with the provided matrix. -// -// The m parameter must hold 16 consecutive elements of a 4x4 column-major matrix. -// -// The current matrix is determined by the current matrix mode (see -// MatrixMode). It is either the projection matrix, modelview matrix, or the -// texture matrix. -// -// For example, if the current matrix is C and the coordinates to be transformed -// are v = (v[0], v[1], v[2], v[3]), then the current transformation is C × v, or -// -// c[0] c[4] c[8] c[12] v[0] -// c[1] c[5] c[9] c[13] v[1] -// c[2] c[6] c[10] c[14] X v[2] -// c[3] c[7] c[11] c[15] v[3] -// -// Calling MultMatrix with an argument of m = m[0], m[1], ..., m[15] -// replaces the current transformation with (C X M) x v, or -// -// c[0] c[4] c[8] c[12] m[0] m[4] m[8] m[12] v[0] -// c[1] c[5] c[9] c[13] m[1] m[5] m[9] m[13] v[1] -// c[2] c[6] c[10] c[14] X m[2] m[6] m[10] m[14] X v[2] -// c[3] c[7] c[11] c[15] m[3] m[7] m[11] m[15] v[3] -// -// Where 'X' denotes matrix multiplication, and v is represented as a 4x1 matrix. -// -// While the elements of the matrix may be specified with single or double -// precision, the GL may store or operate on these values in less-than-single -// precision. -// -// In many computer languages, 4×4 arrays are represented in row-major -// order. The transformations just described represent these matrices in -// column-major order. The order of the multiplication is important. For -// example, if the current transformation is a rotation, and MultMatrix is -// called with a translation matrix, the translation is done directly on the -// coordinates to be transformed, while the rotation is done on the results -// of that translation. -// -// GL.INVALID_OPERATION is generated if MultMatrix is executed between the -// execution of Begin and the corresponding execution of End. -func (gl *GL) MultMatrixd(m []float64) { - if len(m) != 16 { - panic("parameter m must have length 16 for the 4x4 matrix") - } - C.gl4_1compat_glMultMatrixd(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&m[0]))) -} - -// MultMatrixf multiplies the current matrix with the provided matrix. -// -// The m parameter must hold 16 consecutive elements of a 4x4 column-major matrix. -// -// The current matrix is determined by the current matrix mode (see -// MatrixMode). It is either the projection matrix, modelview matrix, or the -// texture matrix. -// -// For example, if the current matrix is C and the coordinates to be transformed -// are v = (v[0], v[1], v[2], v[3]), then the current transformation is C × v, or -// -// c[0] c[4] c[8] c[12] v[0] -// c[1] c[5] c[9] c[13] v[1] -// c[2] c[6] c[10] c[14] X v[2] -// c[3] c[7] c[11] c[15] v[3] -// -// Calling MultMatrix with an argument of m = m[0], m[1], ..., m[15] -// replaces the current transformation with (C X M) x v, or -// -// c[0] c[4] c[8] c[12] m[0] m[4] m[8] m[12] v[0] -// c[1] c[5] c[9] c[13] m[1] m[5] m[9] m[13] v[1] -// c[2] c[6] c[10] c[14] X m[2] m[6] m[10] m[14] X v[2] -// c[3] c[7] c[11] c[15] m[3] m[7] m[11] m[15] v[3] -// -// Where 'X' denotes matrix multiplication, and v is represented as a 4x1 matrix. -// -// While the elements of the matrix may be specified with single or double -// precision, the GL may store or operate on these values in less-than-single -// precision. -// -// In many computer languages, 4×4 arrays are represented in row-major -// order. The transformations just described represent these matrices in -// column-major order. The order of the multiplication is important. For -// example, if the current transformation is a rotation, and MultMatrix is -// called with a translation matrix, the translation is done directly on the -// coordinates to be transformed, while the rotation is done on the results -// of that translation. -// -// GL.INVALID_OPERATION is generated if MultMatrix is executed between the -// execution of Begin and the corresponding execution of End. -func (gl *GL) MultMatrixf(m []float32) { - if len(m) != 16 { - panic("parameter m must have length 16 for the 4x4 matrix") - } - C.gl4_1compat_glMultMatrixf(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMatrixMode.xml -func (gl *GL) MatrixMode(mode glbase.Enum) { - C.gl4_1compat_glMatrixMode(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLoadMatrixd.xml -func (gl *GL) LoadMatrixd(m []float64) { - C.gl4_1compat_glLoadMatrixd(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLoadMatrixf.xml -func (gl *GL) LoadMatrixf(m []float32) { - C.gl4_1compat_glLoadMatrixf(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLoadIdentity.xml -func (gl *GL) LoadIdentity() { - C.gl4_1compat_glLoadIdentity(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFrustum.xml -func (gl *GL) Frustum(left, right, bottom, top, zNear, zFar float64) { - C.gl4_1compat_glFrustum(gl.funcs, C.GLdouble(left), C.GLdouble(right), C.GLdouble(bottom), C.GLdouble(top), C.GLdouble(zNear), C.GLdouble(zFar)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsList.xml -func (gl *GL) IsList(list uint32) bool { - glresult := C.gl4_1compat_glIsList(gl.funcs, C.GLuint(list)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexGeniv.xml -func (gl *GL) GetTexGeniv(coord, pname glbase.Enum, params []int32) { - C.gl4_1compat_glGetTexGeniv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexGenfv.xml -func (gl *GL) GetTexGenfv(coord, pname glbase.Enum, params []float32) { - C.gl4_1compat_glGetTexGenfv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexGendv.xml -func (gl *GL) GetTexGendv(coord, pname glbase.Enum, params []float64) { - C.gl4_1compat_glGetTexGendv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexEnviv.xml -func (gl *GL) GetTexEnviv(target, pname glbase.Enum, params []int32) { - C.gl4_1compat_glGetTexEnviv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexEnvfv.xml -func (gl *GL) GetTexEnvfv(target, pname glbase.Enum, params []float32) { - C.gl4_1compat_glGetTexEnvfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetPolygonStipple.xml -func (gl *GL) GetPolygonStipple(mask []uint8) { - C.gl4_1compat_glGetPolygonStipple(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&mask[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetPixelMapusv.xml -func (gl *GL) GetPixelMapusv(glmap glbase.Enum, values []uint16) { - C.gl4_1compat_glGetPixelMapusv(gl.funcs, C.GLenum(glmap), (*C.GLushort)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetPixelMapuiv.xml -func (gl *GL) GetPixelMapuiv(glmap glbase.Enum, values []uint32) { - C.gl4_1compat_glGetPixelMapuiv(gl.funcs, C.GLenum(glmap), (*C.GLuint)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetPixelMapfv.xml -func (gl *GL) GetPixelMapfv(glmap glbase.Enum, values []float32) { - C.gl4_1compat_glGetPixelMapfv(gl.funcs, C.GLenum(glmap), (*C.GLfloat)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetMaterialiv.xml -func (gl *GL) GetMaterialiv(face, pname glbase.Enum, params []int32) { - C.gl4_1compat_glGetMaterialiv(gl.funcs, C.GLenum(face), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetMaterialfv.xml -func (gl *GL) GetMaterialfv(face, pname glbase.Enum, params []float32) { - C.gl4_1compat_glGetMaterialfv(gl.funcs, C.GLenum(face), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetMapiv.xml -func (gl *GL) GetMapiv(target, query glbase.Enum, v []int32) { - C.gl4_1compat_glGetMapiv(gl.funcs, C.GLenum(target), C.GLenum(query), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetMapfv.xml -func (gl *GL) GetMapfv(target, query glbase.Enum, v []float32) { - C.gl4_1compat_glGetMapfv(gl.funcs, C.GLenum(target), C.GLenum(query), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetMapdv.xml -func (gl *GL) GetMapdv(target, query glbase.Enum, v []float64) { - C.gl4_1compat_glGetMapdv(gl.funcs, C.GLenum(target), C.GLenum(query), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetLightiv.xml -func (gl *GL) GetLightiv(light, pname glbase.Enum, params []int32) { - C.gl4_1compat_glGetLightiv(gl.funcs, C.GLenum(light), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetLightfv.xml -func (gl *GL) GetLightfv(light, pname glbase.Enum, params []float32) { - C.gl4_1compat_glGetLightfv(gl.funcs, C.GLenum(light), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetClipPlane.xml -func (gl *GL) GetClipPlane(plane glbase.Enum, equation []float64) { - C.gl4_1compat_glGetClipPlane(gl.funcs, C.GLenum(plane), (*C.GLdouble)(unsafe.Pointer(&equation[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawPixels.xml -func (gl *GL) DrawPixels(width, height int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_1compat_glDrawPixels(gl.funcs, C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyPixels.xml -func (gl *GL) CopyPixels(x, y, width, height int, gltype glbase.Enum) { - C.gl4_1compat_glCopyPixels(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height), C.GLenum(gltype)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPixelMapusv.xml -func (gl *GL) PixelMapusv(glmap glbase.Enum, mapsize int32, values []uint16) { - C.gl4_1compat_glPixelMapusv(gl.funcs, C.GLenum(glmap), C.GLint(mapsize), (*C.GLushort)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPixelMapuiv.xml -func (gl *GL) PixelMapuiv(glmap glbase.Enum, mapsize int32, values []uint32) { - C.gl4_1compat_glPixelMapuiv(gl.funcs, C.GLenum(glmap), C.GLint(mapsize), (*C.GLuint)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPixelMapfv.xml -func (gl *GL) PixelMapfv(glmap glbase.Enum, mapsize int32, values []float32) { - C.gl4_1compat_glPixelMapfv(gl.funcs, C.GLenum(glmap), C.GLint(mapsize), (*C.GLfloat)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPixelTransferi.xml -func (gl *GL) PixelTransferi(pname glbase.Enum, param int32) { - C.gl4_1compat_glPixelTransferi(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPixelTransferf.xml -func (gl *GL) PixelTransferf(pname glbase.Enum, param float32) { - C.gl4_1compat_glPixelTransferf(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPixelZoom.xml -func (gl *GL) PixelZoom(xfactor, yfactor float32) { - C.gl4_1compat_glPixelZoom(gl.funcs, C.GLfloat(xfactor), C.GLfloat(yfactor)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glAlphaFunc.xml -func (gl *GL) AlphaFunc(glfunc glbase.Enum, ref float32) { - C.gl4_1compat_glAlphaFunc(gl.funcs, C.GLenum(glfunc), C.GLfloat(ref)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEvalPoint2.xml -func (gl *GL) EvalPoint2(i, j int32) { - C.gl4_1compat_glEvalPoint2(gl.funcs, C.GLint(i), C.GLint(j)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEvalMesh2.xml -func (gl *GL) EvalMesh2(mode glbase.Enum, i1, i2, j1, j2 int32) { - C.gl4_1compat_glEvalMesh2(gl.funcs, C.GLenum(mode), C.GLint(i1), C.GLint(i2), C.GLint(j1), C.GLint(j2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEvalPoint1.xml -func (gl *GL) EvalPoint1(i int32) { - C.gl4_1compat_glEvalPoint1(gl.funcs, C.GLint(i)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEvalMesh1.xml -func (gl *GL) EvalMesh1(mode glbase.Enum, i1, i2 int32) { - C.gl4_1compat_glEvalMesh1(gl.funcs, C.GLenum(mode), C.GLint(i1), C.GLint(i2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEvalCoord2fv.xml -func (gl *GL) EvalCoord2fv(u []float32) { - if len(u) != 2 { - panic("parameter u has incorrect length") - } - C.gl4_1compat_glEvalCoord2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&u[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEvalCoord2f.xml -func (gl *GL) EvalCoord2f(u, v float32) { - C.gl4_1compat_glEvalCoord2f(gl.funcs, C.GLfloat(u), C.GLfloat(v)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEvalCoord2dv.xml -func (gl *GL) EvalCoord2dv(u []float64) { - if len(u) != 2 { - panic("parameter u has incorrect length") - } - C.gl4_1compat_glEvalCoord2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&u[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEvalCoord2d.xml -func (gl *GL) EvalCoord2d(u, v float64) { - C.gl4_1compat_glEvalCoord2d(gl.funcs, C.GLdouble(u), C.GLdouble(v)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEvalCoord1fv.xml -func (gl *GL) EvalCoord1fv(u []float32) { - C.gl4_1compat_glEvalCoord1fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&u[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEvalCoord1f.xml -func (gl *GL) EvalCoord1f(u float32) { - C.gl4_1compat_glEvalCoord1f(gl.funcs, C.GLfloat(u)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEvalCoord1dv.xml -func (gl *GL) EvalCoord1dv(u []float64) { - C.gl4_1compat_glEvalCoord1dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&u[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEvalCoord1d.xml -func (gl *GL) EvalCoord1d(u float64) { - C.gl4_1compat_glEvalCoord1d(gl.funcs, C.GLdouble(u)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMapGrid2f.xml -func (gl *GL) MapGrid2f(un int32, u1, u2 float32, vn int32, v1, v2 float32) { - C.gl4_1compat_glMapGrid2f(gl.funcs, C.GLint(un), C.GLfloat(u1), C.GLfloat(u2), C.GLint(vn), C.GLfloat(v1), C.GLfloat(v2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMapGrid2d.xml -func (gl *GL) MapGrid2d(un int32, u1, u2 float64, vn int32, v1, v2 float64) { - C.gl4_1compat_glMapGrid2d(gl.funcs, C.GLint(un), C.GLdouble(u1), C.GLdouble(u2), C.GLint(vn), C.GLdouble(v1), C.GLdouble(v2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMapGrid1f.xml -func (gl *GL) MapGrid1f(un int32, u1, u2 float32) { - C.gl4_1compat_glMapGrid1f(gl.funcs, C.GLint(un), C.GLfloat(u1), C.GLfloat(u2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMapGrid1d.xml -func (gl *GL) MapGrid1d(un int32, u1, u2 float64) { - C.gl4_1compat_glMapGrid1d(gl.funcs, C.GLint(un), C.GLdouble(u1), C.GLdouble(u2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMap2f.xml -func (gl *GL) Map2f(target glbase.Enum, u1, u2 float32, ustride, uorder int32, v1, v2 float32, vstride, vorder int32, points []float32) { - C.gl4_1compat_glMap2f(gl.funcs, C.GLenum(target), C.GLfloat(u1), C.GLfloat(u2), C.GLint(ustride), C.GLint(uorder), C.GLfloat(v1), C.GLfloat(v2), C.GLint(vstride), C.GLint(vorder), (*C.GLfloat)(unsafe.Pointer(&points[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMap2d.xml -func (gl *GL) Map2d(target glbase.Enum, u1, u2 float64, ustride, uorder int32, v1, v2 float64, vstride, vorder int32, points []float64) { - C.gl4_1compat_glMap2d(gl.funcs, C.GLenum(target), C.GLdouble(u1), C.GLdouble(u2), C.GLint(ustride), C.GLint(uorder), C.GLdouble(v1), C.GLdouble(v2), C.GLint(vstride), C.GLint(vorder), (*C.GLdouble)(unsafe.Pointer(&points[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMap1f.xml -func (gl *GL) Map1f(target glbase.Enum, u1, u2 float32, stride, order int, points []float32) { - C.gl4_1compat_glMap1f(gl.funcs, C.GLenum(target), C.GLfloat(u1), C.GLfloat(u2), C.GLint(stride), C.GLint(order), (*C.GLfloat)(unsafe.Pointer(&points[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMap1d.xml -func (gl *GL) Map1d(target glbase.Enum, u1, u2 float64, stride, order int, points []float64) { - C.gl4_1compat_glMap1d(gl.funcs, C.GLenum(target), C.GLdouble(u1), C.GLdouble(u2), C.GLint(stride), C.GLint(order), (*C.GLdouble)(unsafe.Pointer(&points[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPushAttrib.xml -func (gl *GL) PushAttrib(mask glbase.Bitfield) { - C.gl4_1compat_glPushAttrib(gl.funcs, C.GLbitfield(mask)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPopAttrib.xml -func (gl *GL) PopAttrib() { - C.gl4_1compat_glPopAttrib(gl.funcs) -} - -// Accum executes an operation on the accumulation buffer. -// -// Parameter op defines the accumulation buffer operation (GL.ACCUM, GL.LOAD, -// GL.ADD, GL.MULT, or GL.RETURN) and specifies how the value parameter is -// used. -// -// The accumulation buffer is an extended-range color buffer. Images are not -// rendered into it. Rather, images rendered into one of the color buffers -// are added to the contents of the accumulation buffer after rendering. -// Effects such as antialiasing (of points, lines, and polygons), motion -// blur, and depth of field can be created by accumulating images generated -// with different transformation matrices. -// -// Each pixel in the accumulation buffer consists of red, green, blue, and -// alpha values. The number of bits per component in the accumulation buffer -// depends on the implementation. You can examine this number by calling -// GetIntegerv four times, with arguments GL.ACCUM_RED_BITS, -// GL.ACCUM_GREEN_BITS, GL.ACCUM_BLUE_BITS, and GL.ACCUM_ALPHA_BITS. -// Regardless of the number of bits per component, the range of values stored -// by each component is (-1, 1). The accumulation buffer pixels are mapped -// one-to-one with frame buffer pixels. -// -// All accumulation buffer operations are limited to the area of the current -// scissor box and applied identically to the red, green, blue, and alpha -// components of each pixel. If a Accum operation results in a value outside -// the range (-1, 1), the contents of an accumulation buffer pixel component -// are undefined. -// -// The operations are as follows: -// -// GL.ACCUM -// Obtains R, G, B, and A values from the buffer currently selected for -// reading (see ReadBuffer). Each component value is divided by 2 n - -// 1 , where n is the number of bits allocated to each color component -// in the currently selected buffer. The result is a floating-point -// value in the range 0 1 , which is multiplied by value and added to -// the corresponding pixel component in the accumulation buffer, -// thereby updating the accumulation buffer. -// -// GL.LOAD -// Similar to GL.ACCUM, except that the current value in the -// accumulation buffer is not used in the calculation of the new value. -// That is, the R, G, B, and A values from the currently selected -// buffer are divided by 2 n - 1 , multiplied by value, and then stored -// in the corresponding accumulation buffer cell, overwriting the -// current value. -// -// GL.ADD -// Adds value to each R, G, B, and A in the accumulation buffer. -// -// GL.MULT -// Multiplies each R, G, B, and A in the accumulation buffer by value -// and returns the scaled component to its corresponding accumulation -// buffer location. -// -// GL.RETURN -// Transfers accumulation buffer values to the color buffer or buffers -// currently selected for writing. Each R, G, B, and A component is -// multiplied by value, then multiplied by 2 n - 1 , clamped to the -// range 0 2 n - 1 , and stored in the corresponding display buffer -// cell. The only fragment operations that are applied to this transfer -// are pixel ownership, scissor, dithering, and color writemasks. -// -// To clear the accumulation buffer, call ClearAccum with R, G, B, and A -// values to set it to, then call Clear with the accumulation buffer -// enabled. -// -// Error GL.INVALID_ENUM is generated if op is not an accepted value. -// GL.INVALID_OPERATION is generated if there is no accumulation buffer. -// GL.INVALID_OPERATION is generated if Accum is executed between the -// execution of Begin and the corresponding execution of End. -func (gl *GL) Accum(op glbase.Enum, value float32) { - C.gl4_1compat_glAccum(gl.funcs, C.GLenum(op), C.GLfloat(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIndexMask.xml -func (gl *GL) IndexMask(mask uint32) { - C.gl4_1compat_glIndexMask(gl.funcs, C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearIndex.xml -func (gl *GL) ClearIndex(c float32) { - C.gl4_1compat_glClearIndex(gl.funcs, C.GLfloat(c)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearAccum.xml -func (gl *GL) ClearAccum(red, green, blue, alpha float32) { - C.gl4_1compat_glClearAccum(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPushName.xml -func (gl *GL) PushName(name uint32) { - C.gl4_1compat_glPushName(gl.funcs, C.GLuint(name)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPopName.xml -func (gl *GL) PopName() { - C.gl4_1compat_glPopName(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPassThrough.xml -func (gl *GL) PassThrough(token float32) { - C.gl4_1compat_glPassThrough(gl.funcs, C.GLfloat(token)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLoadName.xml -func (gl *GL) LoadName(name uint32) { - C.gl4_1compat_glLoadName(gl.funcs, C.GLuint(name)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glInitNames.xml -func (gl *GL) InitNames() { - C.gl4_1compat_glInitNames(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRenderMode.xml -func (gl *GL) RenderMode(mode glbase.Enum) int32 { - glresult := C.gl4_1compat_glRenderMode(gl.funcs, C.GLenum(mode)) - return int32(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSelectBuffer.xml -func (gl *GL) SelectBuffer(size int, buffer []glbase.Buffer) { - C.gl4_1compat_glSelectBuffer(gl.funcs, C.GLsizei(size), (*C.GLuint)(unsafe.Pointer(&buffer[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFeedbackBuffer.xml -func (gl *GL) FeedbackBuffer(size int, gltype glbase.Enum, buffer []float32) { - C.gl4_1compat_glFeedbackBuffer(gl.funcs, C.GLsizei(size), C.GLenum(gltype), (*C.GLfloat)(unsafe.Pointer(&buffer[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexGeniv.xml -func (gl *GL) TexGeniv(coord, pname glbase.Enum, params []int32) { - C.gl4_1compat_glTexGeniv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexGeni.xml -func (gl *GL) TexGeni(coord, pname glbase.Enum, param int32) { - C.gl4_1compat_glTexGeni(gl.funcs, C.GLenum(coord), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexGenfv.xml -func (gl *GL) TexGenfv(coord, pname glbase.Enum, params []float32) { - C.gl4_1compat_glTexGenfv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexGenf.xml -func (gl *GL) TexGenf(coord, pname glbase.Enum, param float32) { - C.gl4_1compat_glTexGenf(gl.funcs, C.GLenum(coord), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexGendv.xml -func (gl *GL) TexGendv(coord, pname glbase.Enum, params []float64) { - C.gl4_1compat_glTexGendv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexGend.xml -func (gl *GL) TexGend(coord, pname glbase.Enum, param float64) { - C.gl4_1compat_glTexGend(gl.funcs, C.GLenum(coord), C.GLenum(pname), C.GLdouble(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexEnviv.xml -func (gl *GL) TexEnviv(target, pname glbase.Enum, params []int32) { - C.gl4_1compat_glTexEnviv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexEnvi.xml -func (gl *GL) TexEnvi(target, pname glbase.Enum, param int32) { - C.gl4_1compat_glTexEnvi(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexEnvfv.xml -func (gl *GL) TexEnvfv(target, pname glbase.Enum, params []float32) { - C.gl4_1compat_glTexEnvfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexEnvf.xml -func (gl *GL) TexEnvf(target, pname glbase.Enum, param float32) { - C.gl4_1compat_glTexEnvf(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glShadeModel.xml -func (gl *GL) ShadeModel(mode glbase.Enum) { - C.gl4_1compat_glShadeModel(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPolygonStipple.xml -func (gl *GL) PolygonStipple(mask []uint8) { - C.gl4_1compat_glPolygonStipple(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&mask[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMaterialiv.xml -func (gl *GL) Materialiv(face, pname glbase.Enum, params []int32) { - C.gl4_1compat_glMaterialiv(gl.funcs, C.GLenum(face), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMateriali.xml -func (gl *GL) Materiali(face, pname glbase.Enum, param int32) { - C.gl4_1compat_glMateriali(gl.funcs, C.GLenum(face), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMaterialfv.xml -func (gl *GL) Materialfv(face, pname glbase.Enum, params []float32) { - C.gl4_1compat_glMaterialfv(gl.funcs, C.GLenum(face), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMaterialf.xml -func (gl *GL) Materialf(face, pname glbase.Enum, param float32) { - C.gl4_1compat_glMaterialf(gl.funcs, C.GLenum(face), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLineStipple.xml -func (gl *GL) LineStipple(factor int32, pattern uint16) { - C.gl4_1compat_glLineStipple(gl.funcs, C.GLint(factor), C.GLushort(pattern)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLightModeliv.xml -func (gl *GL) LightModeliv(pname glbase.Enum, params []int32) { - C.gl4_1compat_glLightModeliv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLightModeli.xml -func (gl *GL) LightModeli(pname glbase.Enum, param int32) { - C.gl4_1compat_glLightModeli(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLightModelfv.xml -func (gl *GL) LightModelfv(pname glbase.Enum, params []float32) { - C.gl4_1compat_glLightModelfv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLightModelf.xml -func (gl *GL) LightModelf(pname glbase.Enum, param float32) { - C.gl4_1compat_glLightModelf(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLightiv.xml -func (gl *GL) Lightiv(light, pname glbase.Enum, params []int32) { - C.gl4_1compat_glLightiv(gl.funcs, C.GLenum(light), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLighti.xml -func (gl *GL) Lighti(light, pname glbase.Enum, param int32) { - C.gl4_1compat_glLighti(gl.funcs, C.GLenum(light), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLightfv.xml -func (gl *GL) Lightfv(light, pname glbase.Enum, params []float32) { - C.gl4_1compat_glLightfv(gl.funcs, C.GLenum(light), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLightf.xml -func (gl *GL) Lightf(light, pname glbase.Enum, param float32) { - C.gl4_1compat_glLightf(gl.funcs, C.GLenum(light), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFogiv.xml -func (gl *GL) Fogiv(pname glbase.Enum, params []int32) { - C.gl4_1compat_glFogiv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFogi.xml -func (gl *GL) Fogi(pname glbase.Enum, param int32) { - C.gl4_1compat_glFogi(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFogfv.xml -func (gl *GL) Fogfv(pname glbase.Enum, params []float32) { - C.gl4_1compat_glFogfv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFogf.xml -func (gl *GL) Fogf(pname glbase.Enum, param float32) { - C.gl4_1compat_glFogf(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorMaterial.xml -func (gl *GL) ColorMaterial(face, mode glbase.Enum) { - C.gl4_1compat_glColorMaterial(gl.funcs, C.GLenum(face), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClipPlane.xml -func (gl *GL) ClipPlane(plane glbase.Enum, equation []float64) { - C.gl4_1compat_glClipPlane(gl.funcs, C.GLenum(plane), (*C.GLdouble)(unsafe.Pointer(&equation[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex4sv.xml -func (gl *GL) Vertex4sv(v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glVertex4sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex4s.xml -func (gl *GL) Vertex4s(x, y, z, w int16) { - C.gl4_1compat_glVertex4s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z), C.GLshort(w)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex4iv.xml -func (gl *GL) Vertex4iv(v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glVertex4iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex4i.xml -func (gl *GL) Vertex4i(x, y, z, w int) { - C.gl4_1compat_glVertex4i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z), C.GLint(w)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex4fv.xml -func (gl *GL) Vertex4fv(v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glVertex4fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex4f.xml -func (gl *GL) Vertex4f(x, y, z, w float32) { - C.gl4_1compat_glVertex4f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z), C.GLfloat(w)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex4dv.xml -func (gl *GL) Vertex4dv(v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glVertex4dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex4d.xml -func (gl *GL) Vertex4d(x, y, z, w float64) { - C.gl4_1compat_glVertex4d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z), C.GLdouble(w)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex3sv.xml -func (gl *GL) Vertex3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glVertex3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex3s.xml -func (gl *GL) Vertex3s(x, y, z int16) { - C.gl4_1compat_glVertex3s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex3iv.xml -func (gl *GL) Vertex3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glVertex3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex3i.xml -func (gl *GL) Vertex3i(x, y, z int) { - C.gl4_1compat_glVertex3i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex3fv.xml -func (gl *GL) Vertex3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glVertex3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex3f.xml -func (gl *GL) Vertex3f(x, y, z float32) { - C.gl4_1compat_glVertex3f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex3dv.xml -func (gl *GL) Vertex3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glVertex3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex3d.xml -func (gl *GL) Vertex3d(x, y, z float64) { - C.gl4_1compat_glVertex3d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex2sv.xml -func (gl *GL) Vertex2sv(v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glVertex2sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex2s.xml -func (gl *GL) Vertex2s(x, y int16) { - C.gl4_1compat_glVertex2s(gl.funcs, C.GLshort(x), C.GLshort(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex2iv.xml -func (gl *GL) Vertex2iv(v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glVertex2iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex2i.xml -func (gl *GL) Vertex2i(x, y int) { - C.gl4_1compat_glVertex2i(gl.funcs, C.GLint(x), C.GLint(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex2fv.xml -func (gl *GL) Vertex2fv(v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glVertex2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex2f.xml -func (gl *GL) Vertex2f(x, y float32) { - C.gl4_1compat_glVertex2f(gl.funcs, C.GLfloat(x), C.GLfloat(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex2dv.xml -func (gl *GL) Vertex2dv(v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glVertex2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex2d.xml -func (gl *GL) Vertex2d(x, y float64) { - C.gl4_1compat_glVertex2d(gl.funcs, C.GLdouble(x), C.GLdouble(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord4sv.xml -func (gl *GL) TexCoord4sv(v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glTexCoord4sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord4s.xml -func (gl *GL) TexCoord4s(s, t, r, q int16) { - C.gl4_1compat_glTexCoord4s(gl.funcs, C.GLshort(s), C.GLshort(t), C.GLshort(r), C.GLshort(q)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord4iv.xml -func (gl *GL) TexCoord4iv(v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glTexCoord4iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord4i.xml -func (gl *GL) TexCoord4i(s, t, r, q int32) { - C.gl4_1compat_glTexCoord4i(gl.funcs, C.GLint(s), C.GLint(t), C.GLint(r), C.GLint(q)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord4fv.xml -func (gl *GL) TexCoord4fv(v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glTexCoord4fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord4f.xml -func (gl *GL) TexCoord4f(s, t, r, q float32) { - C.gl4_1compat_glTexCoord4f(gl.funcs, C.GLfloat(s), C.GLfloat(t), C.GLfloat(r), C.GLfloat(q)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord4dv.xml -func (gl *GL) TexCoord4dv(v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glTexCoord4dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord4d.xml -func (gl *GL) TexCoord4d(s, t, r, q float64) { - C.gl4_1compat_glTexCoord4d(gl.funcs, C.GLdouble(s), C.GLdouble(t), C.GLdouble(r), C.GLdouble(q)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord3sv.xml -func (gl *GL) TexCoord3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glTexCoord3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord3s.xml -func (gl *GL) TexCoord3s(s, t, r int16) { - C.gl4_1compat_glTexCoord3s(gl.funcs, C.GLshort(s), C.GLshort(t), C.GLshort(r)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord3iv.xml -func (gl *GL) TexCoord3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glTexCoord3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord3i.xml -func (gl *GL) TexCoord3i(s, t, r int32) { - C.gl4_1compat_glTexCoord3i(gl.funcs, C.GLint(s), C.GLint(t), C.GLint(r)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord3fv.xml -func (gl *GL) TexCoord3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glTexCoord3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord3f.xml -func (gl *GL) TexCoord3f(s, t, r float32) { - C.gl4_1compat_glTexCoord3f(gl.funcs, C.GLfloat(s), C.GLfloat(t), C.GLfloat(r)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord3dv.xml -func (gl *GL) TexCoord3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glTexCoord3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord3d.xml -func (gl *GL) TexCoord3d(s, t, r float64) { - C.gl4_1compat_glTexCoord3d(gl.funcs, C.GLdouble(s), C.GLdouble(t), C.GLdouble(r)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord2sv.xml -func (gl *GL) TexCoord2sv(v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glTexCoord2sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord2s.xml -func (gl *GL) TexCoord2s(s, t int16) { - C.gl4_1compat_glTexCoord2s(gl.funcs, C.GLshort(s), C.GLshort(t)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord2iv.xml -func (gl *GL) TexCoord2iv(v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glTexCoord2iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord2i.xml -func (gl *GL) TexCoord2i(s, t int32) { - C.gl4_1compat_glTexCoord2i(gl.funcs, C.GLint(s), C.GLint(t)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord2fv.xml -func (gl *GL) TexCoord2fv(v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glTexCoord2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord2f.xml -func (gl *GL) TexCoord2f(s, t float32) { - C.gl4_1compat_glTexCoord2f(gl.funcs, C.GLfloat(s), C.GLfloat(t)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord2dv.xml -func (gl *GL) TexCoord2dv(v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glTexCoord2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord2d.xml -func (gl *GL) TexCoord2d(s, t float64) { - C.gl4_1compat_glTexCoord2d(gl.funcs, C.GLdouble(s), C.GLdouble(t)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord1sv.xml -func (gl *GL) TexCoord1sv(v []int16) { - C.gl4_1compat_glTexCoord1sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord1s.xml -func (gl *GL) TexCoord1s(s int16) { - C.gl4_1compat_glTexCoord1s(gl.funcs, C.GLshort(s)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord1iv.xml -func (gl *GL) TexCoord1iv(v []int32) { - C.gl4_1compat_glTexCoord1iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord1i.xml -func (gl *GL) TexCoord1i(s int32) { - C.gl4_1compat_glTexCoord1i(gl.funcs, C.GLint(s)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord1fv.xml -func (gl *GL) TexCoord1fv(v []float32) { - C.gl4_1compat_glTexCoord1fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord1f.xml -func (gl *GL) TexCoord1f(s float32) { - C.gl4_1compat_glTexCoord1f(gl.funcs, C.GLfloat(s)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord1dv.xml -func (gl *GL) TexCoord1dv(v []float64) { - C.gl4_1compat_glTexCoord1dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord1d.xml -func (gl *GL) TexCoord1d(s float64) { - C.gl4_1compat_glTexCoord1d(gl.funcs, C.GLdouble(s)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRectsv.xml -func (gl *GL) Rectsv(v1, v2 []int16) { - C.gl4_1compat_glRectsv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v1[0])), (*C.GLshort)(unsafe.Pointer(&v2[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRects.xml -func (gl *GL) Rects(x1, y1, x2, y2 int16) { - C.gl4_1compat_glRects(gl.funcs, C.GLshort(x1), C.GLshort(y1), C.GLshort(x2), C.GLshort(y2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRectiv.xml -func (gl *GL) Rectiv(v1, v2 []int32) { - C.gl4_1compat_glRectiv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v1[0])), (*C.GLint)(unsafe.Pointer(&v2[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRecti.xml -func (gl *GL) Recti(x1, y1, x2, y2 int32) { - C.gl4_1compat_glRecti(gl.funcs, C.GLint(x1), C.GLint(y1), C.GLint(x2), C.GLint(y2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRectfv.xml -func (gl *GL) Rectfv(v1, v2 []float32) { - C.gl4_1compat_glRectfv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v1[0])), (*C.GLfloat)(unsafe.Pointer(&v2[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRectf.xml -func (gl *GL) Rectf(x1, y1, x2, y2 float32) { - C.gl4_1compat_glRectf(gl.funcs, C.GLfloat(x1), C.GLfloat(y1), C.GLfloat(x2), C.GLfloat(y2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRectdv.xml -func (gl *GL) Rectdv(v1, v2 []float64) { - C.gl4_1compat_glRectdv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v1[0])), (*C.GLdouble)(unsafe.Pointer(&v2[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRectd.xml -func (gl *GL) Rectd(x1, y1, x2, y2 float64) { - C.gl4_1compat_glRectd(gl.funcs, C.GLdouble(x1), C.GLdouble(y1), C.GLdouble(x2), C.GLdouble(y2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos4sv.xml -func (gl *GL) RasterPos4sv(v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glRasterPos4sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos4s.xml -func (gl *GL) RasterPos4s(x, y, z, w int16) { - C.gl4_1compat_glRasterPos4s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z), C.GLshort(w)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos4iv.xml -func (gl *GL) RasterPos4iv(v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glRasterPos4iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos4i.xml -func (gl *GL) RasterPos4i(x, y, z, w int) { - C.gl4_1compat_glRasterPos4i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z), C.GLint(w)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos4fv.xml -func (gl *GL) RasterPos4fv(v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glRasterPos4fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos4f.xml -func (gl *GL) RasterPos4f(x, y, z, w float32) { - C.gl4_1compat_glRasterPos4f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z), C.GLfloat(w)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos4dv.xml -func (gl *GL) RasterPos4dv(v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glRasterPos4dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos4d.xml -func (gl *GL) RasterPos4d(x, y, z, w float64) { - C.gl4_1compat_glRasterPos4d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z), C.GLdouble(w)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos3sv.xml -func (gl *GL) RasterPos3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glRasterPos3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos3s.xml -func (gl *GL) RasterPos3s(x, y, z int16) { - C.gl4_1compat_glRasterPos3s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos3iv.xml -func (gl *GL) RasterPos3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glRasterPos3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos3i.xml -func (gl *GL) RasterPos3i(x, y, z int) { - C.gl4_1compat_glRasterPos3i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos3fv.xml -func (gl *GL) RasterPos3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glRasterPos3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos3f.xml -func (gl *GL) RasterPos3f(x, y, z float32) { - C.gl4_1compat_glRasterPos3f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos3dv.xml -func (gl *GL) RasterPos3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glRasterPos3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos3d.xml -func (gl *GL) RasterPos3d(x, y, z float64) { - C.gl4_1compat_glRasterPos3d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos2sv.xml -func (gl *GL) RasterPos2sv(v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glRasterPos2sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos2s.xml -func (gl *GL) RasterPos2s(x, y int16) { - C.gl4_1compat_glRasterPos2s(gl.funcs, C.GLshort(x), C.GLshort(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos2iv.xml -func (gl *GL) RasterPos2iv(v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glRasterPos2iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos2i.xml -func (gl *GL) RasterPos2i(x, y int) { - C.gl4_1compat_glRasterPos2i(gl.funcs, C.GLint(x), C.GLint(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos2fv.xml -func (gl *GL) RasterPos2fv(v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glRasterPos2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos2f.xml -func (gl *GL) RasterPos2f(x, y float32) { - C.gl4_1compat_glRasterPos2f(gl.funcs, C.GLfloat(x), C.GLfloat(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos2dv.xml -func (gl *GL) RasterPos2dv(v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glRasterPos2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos2d.xml -func (gl *GL) RasterPos2d(x, y float64) { - C.gl4_1compat_glRasterPos2d(gl.funcs, C.GLdouble(x), C.GLdouble(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glNormal3sv.xml -func (gl *GL) Normal3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glNormal3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glNormal3s.xml -func (gl *GL) Normal3s(nx, ny, nz int16) { - C.gl4_1compat_glNormal3s(gl.funcs, C.GLshort(nx), C.GLshort(ny), C.GLshort(nz)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glNormal3iv.xml -func (gl *GL) Normal3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glNormal3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glNormal3i.xml -func (gl *GL) Normal3i(nx, ny, nz int32) { - C.gl4_1compat_glNormal3i(gl.funcs, C.GLint(nx), C.GLint(ny), C.GLint(nz)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glNormal3fv.xml -func (gl *GL) Normal3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glNormal3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glNormal3f.xml -func (gl *GL) Normal3f(nx, ny, nz float32) { - C.gl4_1compat_glNormal3f(gl.funcs, C.GLfloat(nx), C.GLfloat(ny), C.GLfloat(nz)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glNormal3dv.xml -func (gl *GL) Normal3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glNormal3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glNormal3d.xml -func (gl *GL) Normal3d(nx, ny, nz float64) { - C.gl4_1compat_glNormal3d(gl.funcs, C.GLdouble(nx), C.GLdouble(ny), C.GLdouble(nz)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glNormal3bv.xml -func (gl *GL) Normal3bv(v []byte) { - C.gl4_1compat_glNormal3bv(gl.funcs, (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glNormal3b.xml -func (gl *GL) Normal3b(nx, ny, nz byte) { - C.gl4_1compat_glNormal3b(gl.funcs, C.GLbyte(nx), C.GLbyte(ny), C.GLbyte(nz)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIndexsv.xml -func (gl *GL) Indexsv(c []int16) { - C.gl4_1compat_glIndexsv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIndexs.xml -func (gl *GL) Indexs(c int16) { - C.gl4_1compat_glIndexs(gl.funcs, C.GLshort(c)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIndexiv.xml -func (gl *GL) Indexiv(c []int32) { - C.gl4_1compat_glIndexiv(gl.funcs, (*C.GLint)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIndexi.xml -func (gl *GL) Indexi(c int32) { - C.gl4_1compat_glIndexi(gl.funcs, C.GLint(c)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIndexfv.xml -func (gl *GL) Indexfv(c []float32) { - C.gl4_1compat_glIndexfv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIndexf.xml -func (gl *GL) Indexf(c float32) { - C.gl4_1compat_glIndexf(gl.funcs, C.GLfloat(c)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIndexdv.xml -func (gl *GL) Indexdv(c []float64) { - C.gl4_1compat_glIndexdv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIndexd.xml -func (gl *GL) Indexd(c float64) { - C.gl4_1compat_glIndexd(gl.funcs, C.GLdouble(c)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEnd.xml -func (gl *GL) End() { - C.gl4_1compat_glEnd(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEdgeFlagv.xml -func (gl *GL) EdgeFlagv(flag []bool) { - C.gl4_1compat_glEdgeFlagv(gl.funcs, (*C.GLboolean)(unsafe.Pointer(&flag[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEdgeFlag.xml -func (gl *GL) EdgeFlag(flag bool) { - C.gl4_1compat_glEdgeFlag(gl.funcs, *(*C.GLboolean)(unsafe.Pointer(&flag))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor4usv.xml -func (gl *GL) Color4usv(v []uint16) { - C.gl4_1compat_glColor4usv(gl.funcs, (*C.GLushort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor4us.xml -func (gl *GL) Color4us(red, green, blue, alpha uint16) { - C.gl4_1compat_glColor4us(gl.funcs, C.GLushort(red), C.GLushort(green), C.GLushort(blue), C.GLushort(alpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor4uiv.xml -func (gl *GL) Color4uiv(v []uint32) { - C.gl4_1compat_glColor4uiv(gl.funcs, (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor4ui.xml -func (gl *GL) Color4ui(red, green, blue, alpha uint32) { - C.gl4_1compat_glColor4ui(gl.funcs, C.GLuint(red), C.GLuint(green), C.GLuint(blue), C.GLuint(alpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor4ubv.xml -func (gl *GL) Color4ubv(v []uint8) { - C.gl4_1compat_glColor4ubv(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor4ub.xml -func (gl *GL) Color4ub(red, green, blue, alpha uint8) { - C.gl4_1compat_glColor4ub(gl.funcs, C.GLubyte(red), C.GLubyte(green), C.GLubyte(blue), C.GLubyte(alpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor4sv.xml -func (gl *GL) Color4sv(v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glColor4sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor4s.xml -func (gl *GL) Color4s(red, green, blue, alpha int16) { - C.gl4_1compat_glColor4s(gl.funcs, C.GLshort(red), C.GLshort(green), C.GLshort(blue), C.GLshort(alpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor4iv.xml -func (gl *GL) Color4iv(v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glColor4iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor4i.xml -func (gl *GL) Color4i(red, green, blue, alpha int32) { - C.gl4_1compat_glColor4i(gl.funcs, C.GLint(red), C.GLint(green), C.GLint(blue), C.GLint(alpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor4fv.xml -func (gl *GL) Color4fv(v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glColor4fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor4f.xml -func (gl *GL) Color4f(red, green, blue, alpha float32) { - C.gl4_1compat_glColor4f(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor4dv.xml -func (gl *GL) Color4dv(v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glColor4dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor4d.xml -func (gl *GL) Color4d(red, green, blue, alpha float64) { - C.gl4_1compat_glColor4d(gl.funcs, C.GLdouble(red), C.GLdouble(green), C.GLdouble(blue), C.GLdouble(alpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor4bv.xml -func (gl *GL) Color4bv(v []byte) { - C.gl4_1compat_glColor4bv(gl.funcs, (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor4b.xml -func (gl *GL) Color4b(red, green, blue, alpha byte) { - C.gl4_1compat_glColor4b(gl.funcs, C.GLbyte(red), C.GLbyte(green), C.GLbyte(blue), C.GLbyte(alpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor3usv.xml -func (gl *GL) Color3usv(v []uint16) { - C.gl4_1compat_glColor3usv(gl.funcs, (*C.GLushort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor3us.xml -func (gl *GL) Color3us(red, green, blue uint16) { - C.gl4_1compat_glColor3us(gl.funcs, C.GLushort(red), C.GLushort(green), C.GLushort(blue)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor3uiv.xml -func (gl *GL) Color3uiv(v []uint32) { - C.gl4_1compat_glColor3uiv(gl.funcs, (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor3ui.xml -func (gl *GL) Color3ui(red, green, blue uint32) { - C.gl4_1compat_glColor3ui(gl.funcs, C.GLuint(red), C.GLuint(green), C.GLuint(blue)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor3ubv.xml -func (gl *GL) Color3ubv(v []uint8) { - C.gl4_1compat_glColor3ubv(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor3ub.xml -func (gl *GL) Color3ub(red, green, blue uint8) { - C.gl4_1compat_glColor3ub(gl.funcs, C.GLubyte(red), C.GLubyte(green), C.GLubyte(blue)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor3sv.xml -func (gl *GL) Color3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glColor3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor3s.xml -func (gl *GL) Color3s(red, green, blue int16) { - C.gl4_1compat_glColor3s(gl.funcs, C.GLshort(red), C.GLshort(green), C.GLshort(blue)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor3iv.xml -func (gl *GL) Color3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glColor3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor3i.xml -func (gl *GL) Color3i(red, green, blue int32) { - C.gl4_1compat_glColor3i(gl.funcs, C.GLint(red), C.GLint(green), C.GLint(blue)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor3fv.xml -func (gl *GL) Color3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glColor3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor3f.xml -func (gl *GL) Color3f(red, green, blue float32) { - C.gl4_1compat_glColor3f(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor3dv.xml -func (gl *GL) Color3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glColor3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor3d.xml -func (gl *GL) Color3d(red, green, blue float64) { - C.gl4_1compat_glColor3d(gl.funcs, C.GLdouble(red), C.GLdouble(green), C.GLdouble(blue)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor3bv.xml -func (gl *GL) Color3bv(v []byte) { - C.gl4_1compat_glColor3bv(gl.funcs, (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor3b.xml -func (gl *GL) Color3b(red, green, blue byte) { - C.gl4_1compat_glColor3b(gl.funcs, C.GLbyte(red), C.GLbyte(green), C.GLbyte(blue)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBitmap.xml -func (gl *GL) Bitmap(width, height int, xorig, yorig, xmove, ymove float32, bitmap []uint8) { - C.gl4_1compat_glBitmap(gl.funcs, C.GLsizei(width), C.GLsizei(height), C.GLfloat(xorig), C.GLfloat(yorig), C.GLfloat(xmove), C.GLfloat(ymove), (*C.GLubyte)(unsafe.Pointer(&bitmap[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBegin.xml -func (gl *GL) Begin(mode glbase.Enum) { - C.gl4_1compat_glBegin(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glListBase.xml -func (gl *GL) ListBase(base uint32) { - C.gl4_1compat_glListBase(gl.funcs, C.GLuint(base)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGenLists.xml -func (gl *GL) GenLists(range_ int32) uint32 { - glresult := C.gl4_1compat_glGenLists(gl.funcs, C.GLsizei(range_)) - return uint32(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDeleteLists.xml -func (gl *GL) DeleteLists(list uint32, range_ int32) { - C.gl4_1compat_glDeleteLists(gl.funcs, C.GLuint(list), C.GLsizei(range_)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCallLists.xml -func (gl *GL) CallLists(n int, gltype glbase.Enum, lists interface{}) { - var lists_ptr unsafe.Pointer - var lists_v = reflect.ValueOf(lists) - if lists != nil && lists_v.Kind() != reflect.Slice { - panic("parameter lists must be a slice") - } - if lists != nil { - lists_ptr = unsafe.Pointer(lists_v.Index(0).Addr().Pointer()) - } - C.gl4_1compat_glCallLists(gl.funcs, C.GLsizei(n), C.GLenum(gltype), lists_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCallList.xml -func (gl *GL) CallList(list uint32) { - C.gl4_1compat_glCallList(gl.funcs, C.GLuint(list)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEndList.xml -func (gl *GL) EndList() { - C.gl4_1compat_glEndList(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glNewList.xml -func (gl *GL) NewList(list uint32, mode glbase.Enum) { - C.gl4_1compat_glNewList(gl.funcs, C.GLuint(list), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPushClientAttrib.xml -func (gl *GL) PushClientAttrib(mask glbase.Bitfield) { - C.gl4_1compat_glPushClientAttrib(gl.funcs, C.GLbitfield(mask)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPopClientAttrib.xml -func (gl *GL) PopClientAttrib() { - C.gl4_1compat_glPopClientAttrib(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPrioritizeTextures.xml -func (gl *GL) PrioritizeTextures(n int, textures []glbase.Texture, priorities []float32) { - C.gl4_1compat_glPrioritizeTextures(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0])), (*C.GLfloat)(unsafe.Pointer(&priorities[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glAreTexturesResident.xml -func (gl *GL) AreTexturesResident(n int, textures []glbase.Texture, residences []bool) bool { - glresult := C.gl4_1compat_glAreTexturesResident(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0])), (*C.GLboolean)(unsafe.Pointer(&residences[0]))) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexPointer.xml -func (gl *GL) VertexPointer(size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl4_1compat_glVertexPointer(gl.funcs, C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordPointer.xml -func (gl *GL) TexCoordPointer(size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl4_1compat_glTexCoordPointer(gl.funcs, C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glNormalPointer.xml -func (gl *GL) NormalPointer(gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl4_1compat_glNormalPointer(gl.funcs, C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glInterleavedArrays.xml -func (gl *GL) InterleavedArrays(format glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl4_1compat_glInterleavedArrays(gl.funcs, C.GLenum(format), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIndexPointer.xml -func (gl *GL) IndexPointer(gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl4_1compat_glIndexPointer(gl.funcs, C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEnableClientState.xml -func (gl *GL) EnableClientState(array glbase.Enum) { - C.gl4_1compat_glEnableClientState(gl.funcs, C.GLenum(array)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEdgeFlagPointer.xml -func (gl *GL) EdgeFlagPointer(stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl4_1compat_glEdgeFlagPointer(gl.funcs, C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDisableClientState.xml -func (gl *GL) DisableClientState(array glbase.Enum) { - C.gl4_1compat_glDisableClientState(gl.funcs, C.GLenum(array)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorPointer.xml -func (gl *GL) ColorPointer(size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl4_1compat_glColorPointer(gl.funcs, C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glArrayElement.xml -func (gl *GL) ArrayElement(i int32) { - C.gl4_1compat_glArrayElement(gl.funcs, C.GLint(i)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glResetMinmax.xml -func (gl *GL) ResetMinmax(target glbase.Enum) { - C.gl4_1compat_glResetMinmax(gl.funcs, C.GLenum(target)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glResetHistogram.xml -func (gl *GL) ResetHistogram(target glbase.Enum) { - C.gl4_1compat_glResetHistogram(gl.funcs, C.GLenum(target)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMinmax.xml -func (gl *GL) Minmax(target, internalFormat glbase.Enum, sink bool) { - C.gl4_1compat_glMinmax(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), *(*C.GLboolean)(unsafe.Pointer(&sink))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glHistogram.xml -func (gl *GL) Histogram(target glbase.Enum, width int, internalFormat glbase.Enum, sink bool) { - C.gl4_1compat_glHistogram(gl.funcs, C.GLenum(target), C.GLsizei(width), C.GLenum(internalFormat), *(*C.GLboolean)(unsafe.Pointer(&sink))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetMinmaxParameteriv.xml -func (gl *GL) GetMinmaxParameteriv(target, pname glbase.Enum, params []int32) { - C.gl4_1compat_glGetMinmaxParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetMinmaxParameterfv.xml -func (gl *GL) GetMinmaxParameterfv(target, pname glbase.Enum, params []float32) { - C.gl4_1compat_glGetMinmaxParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetMinmax.xml -func (gl *GL) GetMinmax(target glbase.Enum, reset bool, format, gltype glbase.Enum, values interface{}) { - var values_ptr unsafe.Pointer - var values_v = reflect.ValueOf(values) - if values != nil && values_v.Kind() != reflect.Slice { - panic("parameter values must be a slice") - } - if values != nil { - values_ptr = unsafe.Pointer(values_v.Index(0).Addr().Pointer()) - } - C.gl4_1compat_glGetMinmax(gl.funcs, C.GLenum(target), *(*C.GLboolean)(unsafe.Pointer(&reset)), C.GLenum(format), C.GLenum(gltype), values_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetHistogramParameteriv.xml -func (gl *GL) GetHistogramParameteriv(target, pname glbase.Enum, params []int32) { - C.gl4_1compat_glGetHistogramParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetHistogramParameterfv.xml -func (gl *GL) GetHistogramParameterfv(target, pname glbase.Enum, params []float32) { - C.gl4_1compat_glGetHistogramParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetHistogram.xml -func (gl *GL) GetHistogram(target glbase.Enum, reset bool, format, gltype glbase.Enum, values interface{}) { - var values_ptr unsafe.Pointer - var values_v = reflect.ValueOf(values) - if values != nil && values_v.Kind() != reflect.Slice { - panic("parameter values must be a slice") - } - if values != nil { - values_ptr = unsafe.Pointer(values_v.Index(0).Addr().Pointer()) - } - C.gl4_1compat_glGetHistogram(gl.funcs, C.GLenum(target), *(*C.GLboolean)(unsafe.Pointer(&reset)), C.GLenum(format), C.GLenum(gltype), values_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSeparableFilter2D.xml -func (gl *GL) SeparableFilter2D(target, internalFormat glbase.Enum, width, height int, format, gltype glbase.Enum, row, column interface{}) { - var row_ptr unsafe.Pointer - var row_v = reflect.ValueOf(row) - if row != nil && row_v.Kind() != reflect.Slice { - panic("parameter row must be a slice") - } - if row != nil { - row_ptr = unsafe.Pointer(row_v.Index(0).Addr().Pointer()) - } - var column_ptr unsafe.Pointer - var column_v = reflect.ValueOf(column) - if column != nil && column_v.Kind() != reflect.Slice { - panic("parameter column must be a slice") - } - if column != nil { - column_ptr = unsafe.Pointer(column_v.Index(0).Addr().Pointer()) - } - C.gl4_1compat_glSeparableFilter2D(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), row_ptr, column_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetSeparableFilter.xml -func (gl *GL) GetSeparableFilter(target, format, gltype glbase.Enum, row, column, span interface{}) { - var row_ptr unsafe.Pointer - var row_v = reflect.ValueOf(row) - if row != nil && row_v.Kind() != reflect.Slice { - panic("parameter row must be a slice") - } - if row != nil { - row_ptr = unsafe.Pointer(row_v.Index(0).Addr().Pointer()) - } - var column_ptr unsafe.Pointer - var column_v = reflect.ValueOf(column) - if column != nil && column_v.Kind() != reflect.Slice { - panic("parameter column must be a slice") - } - if column != nil { - column_ptr = unsafe.Pointer(column_v.Index(0).Addr().Pointer()) - } - var span_ptr unsafe.Pointer - var span_v = reflect.ValueOf(span) - if span != nil && span_v.Kind() != reflect.Slice { - panic("parameter span must be a slice") - } - if span != nil { - span_ptr = unsafe.Pointer(span_v.Index(0).Addr().Pointer()) - } - C.gl4_1compat_glGetSeparableFilter(gl.funcs, C.GLenum(target), C.GLenum(format), C.GLenum(gltype), row_ptr, column_ptr, span_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetConvolutionParameteriv.xml -func (gl *GL) GetConvolutionParameteriv(target, pname glbase.Enum, params []int32) { - C.gl4_1compat_glGetConvolutionParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetConvolutionParameterfv.xml -func (gl *GL) GetConvolutionParameterfv(target, pname glbase.Enum, params []float32) { - C.gl4_1compat_glGetConvolutionParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetConvolutionFilter.xml -func (gl *GL) GetConvolutionFilter(target, format, gltype glbase.Enum, image interface{}) { - var image_ptr unsafe.Pointer - var image_v = reflect.ValueOf(image) - if image != nil && image_v.Kind() != reflect.Slice { - panic("parameter image must be a slice") - } - if image != nil { - image_ptr = unsafe.Pointer(image_v.Index(0).Addr().Pointer()) - } - C.gl4_1compat_glGetConvolutionFilter(gl.funcs, C.GLenum(target), C.GLenum(format), C.GLenum(gltype), image_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyConvolutionFilter2D.xml -func (gl *GL) CopyConvolutionFilter2D(target, internalFormat glbase.Enum, x, y, width, height int) { - C.gl4_1compat_glCopyConvolutionFilter2D(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyConvolutionFilter1D.xml -func (gl *GL) CopyConvolutionFilter1D(target, internalFormat glbase.Enum, x, y, width int) { - C.gl4_1compat_glCopyConvolutionFilter1D(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glConvolutionParameteriv.xml -func (gl *GL) ConvolutionParameteriv(target, pname glbase.Enum, params []int32) { - C.gl4_1compat_glConvolutionParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glConvolutionParameteri.xml -func (gl *GL) ConvolutionParameteri(target, pname glbase.Enum, params int32) { - C.gl4_1compat_glConvolutionParameteri(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLint(params)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glConvolutionParameterfv.xml -func (gl *GL) ConvolutionParameterfv(target, pname glbase.Enum, params []float32) { - C.gl4_1compat_glConvolutionParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glConvolutionParameterf.xml -func (gl *GL) ConvolutionParameterf(target, pname glbase.Enum, params float32) { - C.gl4_1compat_glConvolutionParameterf(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLfloat(params)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glConvolutionFilter2D.xml -func (gl *GL) ConvolutionFilter2D(target, internalFormat glbase.Enum, width, height int, format, gltype glbase.Enum, image interface{}) { - var image_ptr unsafe.Pointer - var image_v = reflect.ValueOf(image) - if image != nil && image_v.Kind() != reflect.Slice { - panic("parameter image must be a slice") - } - if image != nil { - image_ptr = unsafe.Pointer(image_v.Index(0).Addr().Pointer()) - } - C.gl4_1compat_glConvolutionFilter2D(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), image_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glConvolutionFilter1D.xml -func (gl *GL) ConvolutionFilter1D(target, internalFormat glbase.Enum, width int, format, gltype glbase.Enum, image interface{}) { - var image_ptr unsafe.Pointer - var image_v = reflect.ValueOf(image) - if image != nil && image_v.Kind() != reflect.Slice { - panic("parameter image must be a slice") - } - if image != nil { - image_ptr = unsafe.Pointer(image_v.Index(0).Addr().Pointer()) - } - C.gl4_1compat_glConvolutionFilter1D(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLsizei(width), C.GLenum(format), C.GLenum(gltype), image_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyColorSubTable.xml -func (gl *GL) CopyColorSubTable(target glbase.Enum, start int32, x, y, width int) { - C.gl4_1compat_glCopyColorSubTable(gl.funcs, C.GLenum(target), C.GLsizei(start), C.GLint(x), C.GLint(y), C.GLsizei(width)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorSubTable.xml -func (gl *GL) ColorSubTable(target glbase.Enum, start int32, count int, format, gltype glbase.Enum, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_1compat_glColorSubTable(gl.funcs, C.GLenum(target), C.GLsizei(start), C.GLsizei(count), C.GLenum(format), C.GLenum(gltype), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetColorTableParameteriv.xml -func (gl *GL) GetColorTableParameteriv(target, pname glbase.Enum, params []int32) { - C.gl4_1compat_glGetColorTableParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetColorTableParameterfv.xml -func (gl *GL) GetColorTableParameterfv(target, pname glbase.Enum, params []float32) { - C.gl4_1compat_glGetColorTableParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetColorTable.xml -func (gl *GL) GetColorTable(target, format, gltype glbase.Enum, table interface{}) { - var table_ptr unsafe.Pointer - var table_v = reflect.ValueOf(table) - if table != nil && table_v.Kind() != reflect.Slice { - panic("parameter table must be a slice") - } - if table != nil { - table_ptr = unsafe.Pointer(table_v.Index(0).Addr().Pointer()) - } - C.gl4_1compat_glGetColorTable(gl.funcs, C.GLenum(target), C.GLenum(format), C.GLenum(gltype), table_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyColorTable.xml -func (gl *GL) CopyColorTable(target, internalFormat glbase.Enum, x, y, width int) { - C.gl4_1compat_glCopyColorTable(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorTableParameteriv.xml -func (gl *GL) ColorTableParameteriv(target, pname glbase.Enum, params []int32) { - C.gl4_1compat_glColorTableParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorTableParameterfv.xml -func (gl *GL) ColorTableParameterfv(target, pname glbase.Enum, params []float32) { - C.gl4_1compat_glColorTableParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorTable.xml -func (gl *GL) ColorTable(target, internalFormat glbase.Enum, width int, format, gltype glbase.Enum, table interface{}) { - var table_ptr unsafe.Pointer - var table_v = reflect.ValueOf(table) - if table != nil && table_v.Kind() != reflect.Slice { - panic("parameter table must be a slice") - } - if table != nil { - table_ptr = unsafe.Pointer(table_v.Index(0).Addr().Pointer()) - } - C.gl4_1compat_glColorTable(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLsizei(width), C.GLenum(format), C.GLenum(gltype), table_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultTransposeMatrixd.xml -func (gl *GL) MultTransposeMatrixd(m []float64) { - C.gl4_1compat_glMultTransposeMatrixd(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultTransposeMatrixf.xml -func (gl *GL) MultTransposeMatrixf(m []float32) { - C.gl4_1compat_glMultTransposeMatrixf(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLoadTransposeMatrixd.xml -func (gl *GL) LoadTransposeMatrixd(m []float64) { - C.gl4_1compat_glLoadTransposeMatrixd(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLoadTransposeMatrixf.xml -func (gl *GL) LoadTransposeMatrixf(m []float32) { - C.gl4_1compat_glLoadTransposeMatrixf(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord4sv.xml -func (gl *GL) MultiTexCoord4sv(target glbase.Enum, v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glMultiTexCoord4sv(gl.funcs, C.GLenum(target), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord4s.xml -func (gl *GL) MultiTexCoord4s(target glbase.Enum, s, t, r, q int16) { - C.gl4_1compat_glMultiTexCoord4s(gl.funcs, C.GLenum(target), C.GLshort(s), C.GLshort(t), C.GLshort(r), C.GLshort(q)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord4iv.xml -func (gl *GL) MultiTexCoord4iv(target glbase.Enum, v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glMultiTexCoord4iv(gl.funcs, C.GLenum(target), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord4i.xml -func (gl *GL) MultiTexCoord4i(target glbase.Enum, s, t, r, q int32) { - C.gl4_1compat_glMultiTexCoord4i(gl.funcs, C.GLenum(target), C.GLint(s), C.GLint(t), C.GLint(r), C.GLint(q)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord4fv.xml -func (gl *GL) MultiTexCoord4fv(target glbase.Enum, v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glMultiTexCoord4fv(gl.funcs, C.GLenum(target), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord4f.xml -func (gl *GL) MultiTexCoord4f(target glbase.Enum, s, t, r, q float32) { - C.gl4_1compat_glMultiTexCoord4f(gl.funcs, C.GLenum(target), C.GLfloat(s), C.GLfloat(t), C.GLfloat(r), C.GLfloat(q)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord4dv.xml -func (gl *GL) MultiTexCoord4dv(target glbase.Enum, v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glMultiTexCoord4dv(gl.funcs, C.GLenum(target), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord4d.xml -func (gl *GL) MultiTexCoord4d(target glbase.Enum, s, t, r, q float64) { - C.gl4_1compat_glMultiTexCoord4d(gl.funcs, C.GLenum(target), C.GLdouble(s), C.GLdouble(t), C.GLdouble(r), C.GLdouble(q)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord3sv.xml -func (gl *GL) MultiTexCoord3sv(target glbase.Enum, v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glMultiTexCoord3sv(gl.funcs, C.GLenum(target), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord3s.xml -func (gl *GL) MultiTexCoord3s(target glbase.Enum, s, t, r int16) { - C.gl4_1compat_glMultiTexCoord3s(gl.funcs, C.GLenum(target), C.GLshort(s), C.GLshort(t), C.GLshort(r)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord3iv.xml -func (gl *GL) MultiTexCoord3iv(target glbase.Enum, v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glMultiTexCoord3iv(gl.funcs, C.GLenum(target), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord3i.xml -func (gl *GL) MultiTexCoord3i(target glbase.Enum, s, t, r int32) { - C.gl4_1compat_glMultiTexCoord3i(gl.funcs, C.GLenum(target), C.GLint(s), C.GLint(t), C.GLint(r)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord3fv.xml -func (gl *GL) MultiTexCoord3fv(target glbase.Enum, v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glMultiTexCoord3fv(gl.funcs, C.GLenum(target), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord3f.xml -func (gl *GL) MultiTexCoord3f(target glbase.Enum, s, t, r float32) { - C.gl4_1compat_glMultiTexCoord3f(gl.funcs, C.GLenum(target), C.GLfloat(s), C.GLfloat(t), C.GLfloat(r)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord3dv.xml -func (gl *GL) MultiTexCoord3dv(target glbase.Enum, v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glMultiTexCoord3dv(gl.funcs, C.GLenum(target), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord3d.xml -func (gl *GL) MultiTexCoord3d(target glbase.Enum, s, t, r float64) { - C.gl4_1compat_glMultiTexCoord3d(gl.funcs, C.GLenum(target), C.GLdouble(s), C.GLdouble(t), C.GLdouble(r)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord2sv.xml -func (gl *GL) MultiTexCoord2sv(target glbase.Enum, v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glMultiTexCoord2sv(gl.funcs, C.GLenum(target), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord2s.xml -func (gl *GL) MultiTexCoord2s(target glbase.Enum, s, t int16) { - C.gl4_1compat_glMultiTexCoord2s(gl.funcs, C.GLenum(target), C.GLshort(s), C.GLshort(t)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord2iv.xml -func (gl *GL) MultiTexCoord2iv(target glbase.Enum, v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glMultiTexCoord2iv(gl.funcs, C.GLenum(target), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord2i.xml -func (gl *GL) MultiTexCoord2i(target glbase.Enum, s, t int32) { - C.gl4_1compat_glMultiTexCoord2i(gl.funcs, C.GLenum(target), C.GLint(s), C.GLint(t)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord2fv.xml -func (gl *GL) MultiTexCoord2fv(target glbase.Enum, v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glMultiTexCoord2fv(gl.funcs, C.GLenum(target), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord2f.xml -func (gl *GL) MultiTexCoord2f(target glbase.Enum, s, t float32) { - C.gl4_1compat_glMultiTexCoord2f(gl.funcs, C.GLenum(target), C.GLfloat(s), C.GLfloat(t)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord2dv.xml -func (gl *GL) MultiTexCoord2dv(target glbase.Enum, v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glMultiTexCoord2dv(gl.funcs, C.GLenum(target), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord2d.xml -func (gl *GL) MultiTexCoord2d(target glbase.Enum, s, t float64) { - C.gl4_1compat_glMultiTexCoord2d(gl.funcs, C.GLenum(target), C.GLdouble(s), C.GLdouble(t)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord1sv.xml -func (gl *GL) MultiTexCoord1sv(target glbase.Enum, v []int16) { - C.gl4_1compat_glMultiTexCoord1sv(gl.funcs, C.GLenum(target), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord1s.xml -func (gl *GL) MultiTexCoord1s(target glbase.Enum, s int16) { - C.gl4_1compat_glMultiTexCoord1s(gl.funcs, C.GLenum(target), C.GLshort(s)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord1iv.xml -func (gl *GL) MultiTexCoord1iv(target glbase.Enum, v []int32) { - C.gl4_1compat_glMultiTexCoord1iv(gl.funcs, C.GLenum(target), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord1i.xml -func (gl *GL) MultiTexCoord1i(target glbase.Enum, s int32) { - C.gl4_1compat_glMultiTexCoord1i(gl.funcs, C.GLenum(target), C.GLint(s)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord1fv.xml -func (gl *GL) MultiTexCoord1fv(target glbase.Enum, v []float32) { - C.gl4_1compat_glMultiTexCoord1fv(gl.funcs, C.GLenum(target), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord1f.xml -func (gl *GL) MultiTexCoord1f(target glbase.Enum, s float32) { - C.gl4_1compat_glMultiTexCoord1f(gl.funcs, C.GLenum(target), C.GLfloat(s)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord1dv.xml -func (gl *GL) MultiTexCoord1dv(target glbase.Enum, v []float64) { - C.gl4_1compat_glMultiTexCoord1dv(gl.funcs, C.GLenum(target), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord1d.xml -func (gl *GL) MultiTexCoord1d(target glbase.Enum, s float64) { - C.gl4_1compat_glMultiTexCoord1d(gl.funcs, C.GLenum(target), C.GLdouble(s)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClientActiveTexture.xml -func (gl *GL) ClientActiveTexture(texture glbase.Enum) { - C.gl4_1compat_glClientActiveTexture(gl.funcs, C.GLenum(texture)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWindowPos3sv.xml -func (gl *GL) WindowPos3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glWindowPos3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWindowPos3s.xml -func (gl *GL) WindowPos3s(x, y, z int16) { - C.gl4_1compat_glWindowPos3s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWindowPos3iv.xml -func (gl *GL) WindowPos3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glWindowPos3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWindowPos3i.xml -func (gl *GL) WindowPos3i(x, y, z int) { - C.gl4_1compat_glWindowPos3i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWindowPos3fv.xml -func (gl *GL) WindowPos3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glWindowPos3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWindowPos3f.xml -func (gl *GL) WindowPos3f(x, y, z float32) { - C.gl4_1compat_glWindowPos3f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWindowPos3dv.xml -func (gl *GL) WindowPos3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glWindowPos3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWindowPos3d.xml -func (gl *GL) WindowPos3d(x, y, z float64) { - C.gl4_1compat_glWindowPos3d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWindowPos2sv.xml -func (gl *GL) WindowPos2sv(v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glWindowPos2sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWindowPos2s.xml -func (gl *GL) WindowPos2s(x, y int16) { - C.gl4_1compat_glWindowPos2s(gl.funcs, C.GLshort(x), C.GLshort(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWindowPos2iv.xml -func (gl *GL) WindowPos2iv(v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glWindowPos2iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWindowPos2i.xml -func (gl *GL) WindowPos2i(x, y int) { - C.gl4_1compat_glWindowPos2i(gl.funcs, C.GLint(x), C.GLint(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWindowPos2fv.xml -func (gl *GL) WindowPos2fv(v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glWindowPos2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWindowPos2f.xml -func (gl *GL) WindowPos2f(x, y float32) { - C.gl4_1compat_glWindowPos2f(gl.funcs, C.GLfloat(x), C.GLfloat(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWindowPos2dv.xml -func (gl *GL) WindowPos2dv(v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glWindowPos2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWindowPos2d.xml -func (gl *GL) WindowPos2d(x, y float64) { - C.gl4_1compat_glWindowPos2d(gl.funcs, C.GLdouble(x), C.GLdouble(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColorPointer.xml -func (gl *GL) SecondaryColorPointer(size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl4_1compat_glSecondaryColorPointer(gl.funcs, C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColor3usv.xml -func (gl *GL) SecondaryColor3usv(v []uint16) { - C.gl4_1compat_glSecondaryColor3usv(gl.funcs, (*C.GLushort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColor3us.xml -func (gl *GL) SecondaryColor3us(red, green, blue uint16) { - C.gl4_1compat_glSecondaryColor3us(gl.funcs, C.GLushort(red), C.GLushort(green), C.GLushort(blue)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColor3uiv.xml -func (gl *GL) SecondaryColor3uiv(v []uint32) { - C.gl4_1compat_glSecondaryColor3uiv(gl.funcs, (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColor3ui.xml -func (gl *GL) SecondaryColor3ui(red, green, blue uint32) { - C.gl4_1compat_glSecondaryColor3ui(gl.funcs, C.GLuint(red), C.GLuint(green), C.GLuint(blue)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColor3ubv.xml -func (gl *GL) SecondaryColor3ubv(v []uint8) { - C.gl4_1compat_glSecondaryColor3ubv(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColor3ub.xml -func (gl *GL) SecondaryColor3ub(red, green, blue uint8) { - C.gl4_1compat_glSecondaryColor3ub(gl.funcs, C.GLubyte(red), C.GLubyte(green), C.GLubyte(blue)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColor3sv.xml -func (gl *GL) SecondaryColor3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glSecondaryColor3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColor3s.xml -func (gl *GL) SecondaryColor3s(red, green, blue int16) { - C.gl4_1compat_glSecondaryColor3s(gl.funcs, C.GLshort(red), C.GLshort(green), C.GLshort(blue)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColor3iv.xml -func (gl *GL) SecondaryColor3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glSecondaryColor3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColor3i.xml -func (gl *GL) SecondaryColor3i(red, green, blue int32) { - C.gl4_1compat_glSecondaryColor3i(gl.funcs, C.GLint(red), C.GLint(green), C.GLint(blue)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColor3fv.xml -func (gl *GL) SecondaryColor3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glSecondaryColor3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColor3f.xml -func (gl *GL) SecondaryColor3f(red, green, blue float32) { - C.gl4_1compat_glSecondaryColor3f(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColor3dv.xml -func (gl *GL) SecondaryColor3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glSecondaryColor3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColor3d.xml -func (gl *GL) SecondaryColor3d(red, green, blue float64) { - C.gl4_1compat_glSecondaryColor3d(gl.funcs, C.GLdouble(red), C.GLdouble(green), C.GLdouble(blue)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColor3bv.xml -func (gl *GL) SecondaryColor3bv(v []byte) { - C.gl4_1compat_glSecondaryColor3bv(gl.funcs, (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColor3b.xml -func (gl *GL) SecondaryColor3b(red, green, blue byte) { - C.gl4_1compat_glSecondaryColor3b(gl.funcs, C.GLbyte(red), C.GLbyte(green), C.GLbyte(blue)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFogCoordPointer.xml -func (gl *GL) FogCoordPointer(gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl4_1compat_glFogCoordPointer(gl.funcs, C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFogCoorddv.xml -func (gl *GL) FogCoorddv(coord []float64) { - C.gl4_1compat_glFogCoorddv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&coord[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFogCoordd.xml -func (gl *GL) FogCoordd(coord float64) { - C.gl4_1compat_glFogCoordd(gl.funcs, C.GLdouble(coord)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFogCoordfv.xml -func (gl *GL) FogCoordfv(coord []float32) { - C.gl4_1compat_glFogCoordfv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&coord[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFogCoordf.xml -func (gl *GL) FogCoordf(coord float32) { - C.gl4_1compat_glFogCoordf(gl.funcs, C.GLfloat(coord)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4usv.xml -func (gl *GL) VertexAttrib4usv(index glbase.Attrib, v []uint16) { - C.gl4_1compat_glVertexAttrib4usv(gl.funcs, C.GLuint(index), (*C.GLushort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4uiv.xml -func (gl *GL) VertexAttrib4uiv(index glbase.Attrib, v []uint32) { - C.gl4_1compat_glVertexAttrib4uiv(gl.funcs, C.GLuint(index), (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4ubv.xml -func (gl *GL) VertexAttrib4ubv(index glbase.Attrib, v []uint8) { - C.gl4_1compat_glVertexAttrib4ubv(gl.funcs, C.GLuint(index), (*C.GLubyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4sv.xml -func (gl *GL) VertexAttrib4sv(index glbase.Attrib, v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glVertexAttrib4sv(gl.funcs, C.GLuint(index), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4s.xml -func (gl *GL) VertexAttrib4s(index glbase.Attrib, x, y, z, w int16) { - C.gl4_1compat_glVertexAttrib4s(gl.funcs, C.GLuint(index), C.GLshort(x), C.GLshort(y), C.GLshort(z), C.GLshort(w)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4iv.xml -func (gl *GL) VertexAttrib4iv(index glbase.Attrib, v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glVertexAttrib4iv(gl.funcs, C.GLuint(index), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4fv.xml -func (gl *GL) VertexAttrib4fv(index glbase.Attrib, v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glVertexAttrib4fv(gl.funcs, C.GLuint(index), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4f.xml -func (gl *GL) VertexAttrib4f(index glbase.Attrib, x, y, z, w float32) { - C.gl4_1compat_glVertexAttrib4f(gl.funcs, C.GLuint(index), C.GLfloat(x), C.GLfloat(y), C.GLfloat(z), C.GLfloat(w)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4dv.xml -func (gl *GL) VertexAttrib4dv(index glbase.Attrib, v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glVertexAttrib4dv(gl.funcs, C.GLuint(index), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4d.xml -func (gl *GL) VertexAttrib4d(index glbase.Attrib, x, y, z, w float64) { - C.gl4_1compat_glVertexAttrib4d(gl.funcs, C.GLuint(index), C.GLdouble(x), C.GLdouble(y), C.GLdouble(z), C.GLdouble(w)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4bv.xml -func (gl *GL) VertexAttrib4bv(index glbase.Attrib, v []byte) { - C.gl4_1compat_glVertexAttrib4bv(gl.funcs, C.GLuint(index), (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4Nusv.xml -func (gl *GL) VertexAttrib4Nusv(index glbase.Attrib, v []uint16) { - C.gl4_1compat_glVertexAttrib4Nusv(gl.funcs, C.GLuint(index), (*C.GLushort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4Nuiv.xml -func (gl *GL) VertexAttrib4Nuiv(index glbase.Attrib, v []uint32) { - C.gl4_1compat_glVertexAttrib4Nuiv(gl.funcs, C.GLuint(index), (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4Nubv.xml -func (gl *GL) VertexAttrib4Nubv(index glbase.Attrib, v []uint8) { - C.gl4_1compat_glVertexAttrib4Nubv(gl.funcs, C.GLuint(index), (*C.GLubyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4Nub.xml -func (gl *GL) VertexAttrib4Nub(index glbase.Attrib, x, y, z, w uint8) { - C.gl4_1compat_glVertexAttrib4Nub(gl.funcs, C.GLuint(index), C.GLubyte(x), C.GLubyte(y), C.GLubyte(z), C.GLubyte(w)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4Nsv.xml -func (gl *GL) VertexAttrib4Nsv(index glbase.Attrib, v []int16) { - C.gl4_1compat_glVertexAttrib4Nsv(gl.funcs, C.GLuint(index), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4Niv.xml -func (gl *GL) VertexAttrib4Niv(index glbase.Attrib, v []int32) { - C.gl4_1compat_glVertexAttrib4Niv(gl.funcs, C.GLuint(index), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4Nbv.xml -func (gl *GL) VertexAttrib4Nbv(index glbase.Attrib, v []byte) { - C.gl4_1compat_glVertexAttrib4Nbv(gl.funcs, C.GLuint(index), (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib3sv.xml -func (gl *GL) VertexAttrib3sv(index glbase.Attrib, v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glVertexAttrib3sv(gl.funcs, C.GLuint(index), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib3s.xml -func (gl *GL) VertexAttrib3s(index glbase.Attrib, x, y, z int16) { - C.gl4_1compat_glVertexAttrib3s(gl.funcs, C.GLuint(index), C.GLshort(x), C.GLshort(y), C.GLshort(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib3fv.xml -func (gl *GL) VertexAttrib3fv(index glbase.Attrib, v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glVertexAttrib3fv(gl.funcs, C.GLuint(index), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib3f.xml -func (gl *GL) VertexAttrib3f(index glbase.Attrib, x, y, z float32) { - C.gl4_1compat_glVertexAttrib3f(gl.funcs, C.GLuint(index), C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib3dv.xml -func (gl *GL) VertexAttrib3dv(index glbase.Attrib, v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glVertexAttrib3dv(gl.funcs, C.GLuint(index), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib3d.xml -func (gl *GL) VertexAttrib3d(index glbase.Attrib, x, y, z float64) { - C.gl4_1compat_glVertexAttrib3d(gl.funcs, C.GLuint(index), C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib2sv.xml -func (gl *GL) VertexAttrib2sv(index glbase.Attrib, v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glVertexAttrib2sv(gl.funcs, C.GLuint(index), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib2s.xml -func (gl *GL) VertexAttrib2s(index glbase.Attrib, x, y int16) { - C.gl4_1compat_glVertexAttrib2s(gl.funcs, C.GLuint(index), C.GLshort(x), C.GLshort(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib2fv.xml -func (gl *GL) VertexAttrib2fv(index glbase.Attrib, v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glVertexAttrib2fv(gl.funcs, C.GLuint(index), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib2f.xml -func (gl *GL) VertexAttrib2f(index glbase.Attrib, x, y float32) { - C.gl4_1compat_glVertexAttrib2f(gl.funcs, C.GLuint(index), C.GLfloat(x), C.GLfloat(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib2dv.xml -func (gl *GL) VertexAttrib2dv(index glbase.Attrib, v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glVertexAttrib2dv(gl.funcs, C.GLuint(index), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib2d.xml -func (gl *GL) VertexAttrib2d(index glbase.Attrib, x, y float64) { - C.gl4_1compat_glVertexAttrib2d(gl.funcs, C.GLuint(index), C.GLdouble(x), C.GLdouble(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib1sv.xml -func (gl *GL) VertexAttrib1sv(index glbase.Attrib, v []int16) { - C.gl4_1compat_glVertexAttrib1sv(gl.funcs, C.GLuint(index), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib1s.xml -func (gl *GL) VertexAttrib1s(index glbase.Attrib, x int16) { - C.gl4_1compat_glVertexAttrib1s(gl.funcs, C.GLuint(index), C.GLshort(x)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib1fv.xml -func (gl *GL) VertexAttrib1fv(index glbase.Attrib, v []float32) { - C.gl4_1compat_glVertexAttrib1fv(gl.funcs, C.GLuint(index), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib1f.xml -func (gl *GL) VertexAttrib1f(index glbase.Attrib, x float32) { - C.gl4_1compat_glVertexAttrib1f(gl.funcs, C.GLuint(index), C.GLfloat(x)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib1dv.xml -func (gl *GL) VertexAttrib1dv(index glbase.Attrib, v []float64) { - C.gl4_1compat_glVertexAttrib1dv(gl.funcs, C.GLuint(index), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib1d.xml -func (gl *GL) VertexAttrib1d(index glbase.Attrib, x float64) { - C.gl4_1compat_glVertexAttrib1d(gl.funcs, C.GLuint(index), C.GLdouble(x)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI4usv.xml -func (gl *GL) VertexAttribI4usv(index glbase.Attrib, v []uint16) { - C.gl4_1compat_glVertexAttribI4usv(gl.funcs, C.GLuint(index), (*C.GLushort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI4ubv.xml -func (gl *GL) VertexAttribI4ubv(index glbase.Attrib, v []uint8) { - C.gl4_1compat_glVertexAttribI4ubv(gl.funcs, C.GLuint(index), (*C.GLubyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI4sv.xml -func (gl *GL) VertexAttribI4sv(index glbase.Attrib, v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glVertexAttribI4sv(gl.funcs, C.GLuint(index), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI4bv.xml -func (gl *GL) VertexAttribI4bv(index glbase.Attrib, v []byte) { - C.gl4_1compat_glVertexAttribI4bv(gl.funcs, C.GLuint(index), (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI4uiv.xml -func (gl *GL) VertexAttribI4uiv(index glbase.Attrib, v []uint32) { - C.gl4_1compat_glVertexAttribI4uiv(gl.funcs, C.GLuint(index), (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI3uiv.xml -func (gl *GL) VertexAttribI3uiv(index glbase.Attrib, v []uint32) { - C.gl4_1compat_glVertexAttribI3uiv(gl.funcs, C.GLuint(index), (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI2uiv.xml -func (gl *GL) VertexAttribI2uiv(index glbase.Attrib, v []uint32) { - C.gl4_1compat_glVertexAttribI2uiv(gl.funcs, C.GLuint(index), (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI1uiv.xml -func (gl *GL) VertexAttribI1uiv(index glbase.Attrib, v []uint32) { - C.gl4_1compat_glVertexAttribI1uiv(gl.funcs, C.GLuint(index), (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI4iv.xml -func (gl *GL) VertexAttribI4iv(index glbase.Attrib, v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glVertexAttribI4iv(gl.funcs, C.GLuint(index), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI3iv.xml -func (gl *GL) VertexAttribI3iv(index glbase.Attrib, v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glVertexAttribI3iv(gl.funcs, C.GLuint(index), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI2iv.xml -func (gl *GL) VertexAttribI2iv(index glbase.Attrib, v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_1compat_glVertexAttribI2iv(gl.funcs, C.GLuint(index), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI1iv.xml -func (gl *GL) VertexAttribI1iv(index glbase.Attrib, v []int32) { - C.gl4_1compat_glVertexAttribI1iv(gl.funcs, C.GLuint(index), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI4ui.xml -func (gl *GL) VertexAttribI4ui(index glbase.Attrib, x, y, z, w uint32) { - C.gl4_1compat_glVertexAttribI4ui(gl.funcs, C.GLuint(index), C.GLuint(x), C.GLuint(y), C.GLuint(z), C.GLuint(w)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI3ui.xml -func (gl *GL) VertexAttribI3ui(index glbase.Attrib, x, y, z uint32) { - C.gl4_1compat_glVertexAttribI3ui(gl.funcs, C.GLuint(index), C.GLuint(x), C.GLuint(y), C.GLuint(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI2ui.xml -func (gl *GL) VertexAttribI2ui(index glbase.Attrib, x, y uint32) { - C.gl4_1compat_glVertexAttribI2ui(gl.funcs, C.GLuint(index), C.GLuint(x), C.GLuint(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI1ui.xml -func (gl *GL) VertexAttribI1ui(index glbase.Attrib, x uint32) { - C.gl4_1compat_glVertexAttribI1ui(gl.funcs, C.GLuint(index), C.GLuint(x)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI4i.xml -func (gl *GL) VertexAttribI4i(index glbase.Attrib, x, y, z, w int) { - C.gl4_1compat_glVertexAttribI4i(gl.funcs, C.GLuint(index), C.GLint(x), C.GLint(y), C.GLint(z), C.GLint(w)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI3i.xml -func (gl *GL) VertexAttribI3i(index glbase.Attrib, x, y, z int) { - C.gl4_1compat_glVertexAttribI3i(gl.funcs, C.GLuint(index), C.GLint(x), C.GLint(y), C.GLint(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI2i.xml -func (gl *GL) VertexAttribI2i(index glbase.Attrib, x, y int) { - C.gl4_1compat_glVertexAttribI2i(gl.funcs, C.GLuint(index), C.GLint(x), C.GLint(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI1i.xml -func (gl *GL) VertexAttribI1i(index glbase.Attrib, x int) { - C.gl4_1compat_glVertexAttribI1i(gl.funcs, C.GLuint(index), C.GLint(x)) -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.1core/funcs.cpp b/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.1core/funcs.cpp deleted file mode 100644 index 9ae51693cd..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.1core/funcs.cpp +++ /dev/null @@ -1,2676 +0,0 @@ - -// ** file automatically generated by glgen -- do not edit manually ** - -#include -#include - -#include "funcs.h" - -void *gl4_1core_funcs() { - QOpenGLFunctions_4_1_Core* funcs = QOpenGLContext::currentContext()->versionFunctions(); - if (!funcs) { - return 0; - } - funcs->initializeOpenGLFunctions(); - return funcs; -} - - -void gl4_1core_glViewport(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glViewport(x, y, width, height); -} - -void gl4_1core_glDepthRange(void *_glfuncs, GLdouble nearVal, GLdouble farVal) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthRange(nearVal, farVal); -} - -GLboolean gl4_1core_glIsEnabled(void *_glfuncs, GLenum cap) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsEnabled(cap); -} - -void gl4_1core_glGetTexLevelParameteriv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexLevelParameteriv(target, level, pname, params); -} - -void gl4_1core_glGetTexLevelParameterfv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexLevelParameterfv(target, level, pname, params); -} - -void gl4_1core_glGetTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameteriv(target, pname, params); -} - -void gl4_1core_glGetTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameterfv(target, pname, params); -} - -void gl4_1core_glGetTexImage(void *_glfuncs, GLenum target, GLint level, GLenum format, GLenum gltype, GLvoid* pixels) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexImage(target, level, format, gltype, pixels); -} - -void gl4_1core_glGetIntegerv(void *_glfuncs, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetIntegerv(pname, params); -} - -void gl4_1core_glGetFloatv(void *_glfuncs, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetFloatv(pname, params); -} - -GLenum gl4_1core_glGetError(void *_glfuncs) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetError(); -} - -void gl4_1core_glGetDoublev(void *_glfuncs, GLenum pname, GLdouble* params) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetDoublev(pname, params); -} - -void gl4_1core_glGetBooleanv(void *_glfuncs, GLenum pname, GLboolean* params) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBooleanv(pname, params); -} - -void gl4_1core_glReadPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum gltype, GLvoid* pixels) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glReadPixels(x, y, width, height, format, gltype, pixels); -} - -void gl4_1core_glReadBuffer(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glReadBuffer(mode); -} - -void gl4_1core_glPixelStorei(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelStorei(pname, param); -} - -void gl4_1core_glPixelStoref(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelStoref(pname, param); -} - -void gl4_1core_glDepthFunc(void *_glfuncs, GLenum glfunc) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthFunc(glfunc); -} - -void gl4_1core_glStencilOp(void *_glfuncs, GLenum fail, GLenum zfail, GLenum zpass) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilOp(fail, zfail, zpass); -} - -void gl4_1core_glStencilFunc(void *_glfuncs, GLenum glfunc, GLint ref, GLuint mask) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilFunc(glfunc, ref, mask); -} - -void gl4_1core_glLogicOp(void *_glfuncs, GLenum opcode) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLogicOp(opcode); -} - -void gl4_1core_glBlendFunc(void *_glfuncs, GLenum sfactor, GLenum dfactor) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendFunc(sfactor, dfactor); -} - -void gl4_1core_glFlush(void *_glfuncs) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFlush(); -} - -void gl4_1core_glFinish(void *_glfuncs) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFinish(); -} - -void gl4_1core_glEnable(void *_glfuncs, GLenum cap) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnable(cap); -} - -void gl4_1core_glDisable(void *_glfuncs, GLenum cap) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDisable(cap); -} - -void gl4_1core_glDepthMask(void *_glfuncs, GLboolean flag) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthMask(flag); -} - -void gl4_1core_glColorMask(void *_glfuncs, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorMask(red, green, blue, alpha); -} - -void gl4_1core_glStencilMask(void *_glfuncs, GLuint mask) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilMask(mask); -} - -void gl4_1core_glClearDepth(void *_glfuncs, GLdouble depth) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearDepth(depth); -} - -void gl4_1core_glClearStencil(void *_glfuncs, GLint s) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearStencil(s); -} - -void gl4_1core_glClearColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearColor(red, green, blue, alpha); -} - -void gl4_1core_glClear(void *_glfuncs, GLbitfield mask) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClear(mask); -} - -void gl4_1core_glDrawBuffer(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawBuffer(mode); -} - -void gl4_1core_glTexImage2D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage2D(target, level, internalFormat, width, height, border, format, gltype, pixels); -} - -void gl4_1core_glTexImage1D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage1D(target, level, internalFormat, width, border, format, gltype, pixels); -} - -void gl4_1core_glTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameteriv(target, pname, params); -} - -void gl4_1core_glTexParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint param) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameteri(target, pname, param); -} - -void gl4_1core_glTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterfv(target, pname, params); -} - -void gl4_1core_glTexParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterf(target, pname, param); -} - -void gl4_1core_glScissor(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScissor(x, y, width, height); -} - -void gl4_1core_glPolygonMode(void *_glfuncs, GLenum face, GLenum mode) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPolygonMode(face, mode); -} - -void gl4_1core_glPointSize(void *_glfuncs, GLfloat size) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointSize(size); -} - -void gl4_1core_glLineWidth(void *_glfuncs, GLfloat width) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLineWidth(width); -} - -void gl4_1core_glHint(void *_glfuncs, GLenum target, GLenum mode) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glHint(target, mode); -} - -void gl4_1core_glFrontFace(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFrontFace(mode); -} - -void gl4_1core_glCullFace(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCullFace(mode); -} - -void gl4_1core_glIndexubv(void *_glfuncs, const GLubyte* c) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexubv(c); -} - -void gl4_1core_glIndexub(void *_glfuncs, GLubyte c) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexub(c); -} - -GLboolean gl4_1core_glIsTexture(void *_glfuncs, GLuint texture) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsTexture(texture); -} - -void gl4_1core_glGenTextures(void *_glfuncs, GLsizei n, GLuint* textures) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenTextures(n, textures); -} - -void gl4_1core_glDeleteTextures(void *_glfuncs, GLsizei n, const GLuint* textures) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteTextures(n, textures); -} - -void gl4_1core_glBindTexture(void *_glfuncs, GLenum target, GLuint texture) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindTexture(target, texture); -} - -void gl4_1core_glTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, gltype, pixels); -} - -void gl4_1core_glTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexSubImage1D(target, level, xoffset, width, format, gltype, pixels); -} - -void gl4_1core_glCopyTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height); -} - -void gl4_1core_glCopyTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexSubImage1D(target, level, xoffset, x, y, width); -} - -void gl4_1core_glCopyTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexImage2D(target, level, internalFormat, x, y, width, height, border); -} - -void gl4_1core_glCopyTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexImage1D(target, level, internalFormat, x, y, width, border); -} - -void gl4_1core_glPolygonOffset(void *_glfuncs, GLfloat factor, GLfloat units) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPolygonOffset(factor, units); -} - -void gl4_1core_glDrawElements(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElements(mode, count, gltype, indices); -} - -void gl4_1core_glDrawArrays(void *_glfuncs, GLenum mode, GLint first, GLsizei count) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawArrays(mode, first, count); -} - -void gl4_1core_glCopyTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexSubImage3D(target, level, xoffset, yoffset, zoffset, x, y, width, height); -} - -void gl4_1core_glTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, gltype, pixels); -} - -void gl4_1core_glTexImage3D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage3D(target, level, internalFormat, width, height, depth, border, format, gltype, pixels); -} - -void gl4_1core_glDrawRangeElements(void *_glfuncs, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum gltype, const GLvoid* indices) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawRangeElements(mode, start, end, count, gltype, indices); -} - -void gl4_1core_glBlendEquation(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendEquation(mode); -} - -void gl4_1core_glBlendColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendColor(red, green, blue, alpha); -} - -void gl4_1core_glGetCompressedTexImage(void *_glfuncs, GLenum target, GLint level, GLvoid* img) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetCompressedTexImage(target, level, img); -} - -void gl4_1core_glCompressedTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexSubImage1D(target, level, xoffset, width, format, imageSize, data); -} - -void gl4_1core_glCompressedTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data); -} - -void gl4_1core_glCompressedTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data); -} - -void gl4_1core_glCompressedTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexImage1D(target, level, internalFormat, width, border, imageSize, data); -} - -void gl4_1core_glCompressedTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexImage2D(target, level, internalFormat, width, height, border, imageSize, data); -} - -void gl4_1core_glCompressedTexImage3D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexImage3D(target, level, internalFormat, width, height, depth, border, imageSize, data); -} - -void gl4_1core_glSampleCoverage(void *_glfuncs, GLfloat value, GLboolean invert) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSampleCoverage(value, invert); -} - -void gl4_1core_glActiveTexture(void *_glfuncs, GLenum texture) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glActiveTexture(texture); -} - -void gl4_1core_glPointParameteriv(void *_glfuncs, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameteriv(pname, params); -} - -void gl4_1core_glPointParameteri(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameteri(pname, param); -} - -void gl4_1core_glPointParameterfv(void *_glfuncs, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameterfv(pname, params); -} - -void gl4_1core_glPointParameterf(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameterf(pname, param); -} - -void gl4_1core_glMultiDrawArrays(void *_glfuncs, GLenum mode, const GLint* first, const GLsizei* count, GLsizei drawcount) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiDrawArrays(mode, first, count, drawcount); -} - -void gl4_1core_glBlendFuncSeparate(void *_glfuncs, GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendFuncSeparate(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha); -} - -void gl4_1core_glGetBufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBufferParameteriv(target, pname, params); -} - -GLboolean gl4_1core_glUnmapBuffer(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glUnmapBuffer(target); -} - -void gl4_1core_glGetBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, GLvoid* data) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBufferSubData(target, offset, size, data); -} - -void gl4_1core_glBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBufferSubData(target, offset, size, data); -} - -void gl4_1core_glBufferData(void *_glfuncs, GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBufferData(target, size, data, usage); -} - -GLboolean gl4_1core_glIsBuffer(void *_glfuncs, GLuint buffer) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsBuffer(buffer); -} - -void gl4_1core_glGenBuffers(void *_glfuncs, GLsizei n, GLuint* buffers) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenBuffers(n, buffers); -} - -void gl4_1core_glDeleteBuffers(void *_glfuncs, GLsizei n, const GLuint* buffers) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteBuffers(n, buffers); -} - -void gl4_1core_glBindBuffer(void *_glfuncs, GLenum target, GLuint buffer) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindBuffer(target, buffer); -} - -void gl4_1core_glGetQueryObjectuiv(void *_glfuncs, GLuint id, GLenum pname, GLuint* params) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryObjectuiv(id, pname, params); -} - -void gl4_1core_glGetQueryObjectiv(void *_glfuncs, GLuint id, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryObjectiv(id, pname, params); -} - -void gl4_1core_glGetQueryiv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryiv(target, pname, params); -} - -void gl4_1core_glEndQuery(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndQuery(target); -} - -void gl4_1core_glBeginQuery(void *_glfuncs, GLenum target, GLuint id) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBeginQuery(target, id); -} - -GLboolean gl4_1core_glIsQuery(void *_glfuncs, GLuint id) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsQuery(id); -} - -void gl4_1core_glDeleteQueries(void *_glfuncs, GLsizei n, const GLuint* ids) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteQueries(n, ids); -} - -void gl4_1core_glGenQueries(void *_glfuncs, GLsizei n, GLuint* ids) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenQueries(n, ids); -} - -void gl4_1core_glVertexAttribPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLboolean normalized, GLsizei stride, const GLvoid* offset) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribPointer(index, size, gltype, normalized, stride, offset); -} - -void gl4_1core_glValidateProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glValidateProgram(program); -} - -void gl4_1core_glUniformMatrix4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4fv(location, count, transpose, value); -} - -void gl4_1core_glUniformMatrix3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3fv(location, count, transpose, value); -} - -void gl4_1core_glUniformMatrix2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2fv(location, count, transpose, value); -} - -void gl4_1core_glUniform4iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4iv(location, count, value); -} - -void gl4_1core_glUniform3iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3iv(location, count, value); -} - -void gl4_1core_glUniform2iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2iv(location, count, value); -} - -void gl4_1core_glUniform1iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1iv(location, count, value); -} - -void gl4_1core_glUniform4fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4fv(location, count, value); -} - -void gl4_1core_glUniform3fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3fv(location, count, value); -} - -void gl4_1core_glUniform2fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2fv(location, count, value); -} - -void gl4_1core_glUniform1fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1fv(location, count, value); -} - -void gl4_1core_glUniform4i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2, GLint v3) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4i(location, v0, v1, v2, v3); -} - -void gl4_1core_glUniform3i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3i(location, v0, v1, v2); -} - -void gl4_1core_glUniform2i(void *_glfuncs, GLint location, GLint v0, GLint v1) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2i(location, v0, v1); -} - -void gl4_1core_glUniform1i(void *_glfuncs, GLint location, GLint v0) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1i(location, v0); -} - -void gl4_1core_glUniform4f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4f(location, v0, v1, v2, v3); -} - -void gl4_1core_glUniform3f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3f(location, v0, v1, v2); -} - -void gl4_1core_glUniform2f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2f(location, v0, v1); -} - -void gl4_1core_glUniform1f(void *_glfuncs, GLint location, GLfloat v0) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1f(location, v0); -} - -void gl4_1core_glUseProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUseProgram(program); -} - -void gl4_1core_glShaderSource(void *_glfuncs, GLuint shader, GLsizei count, const GLchar** source, const GLint* length) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glShaderSource(shader, count, source, length); -} - -void gl4_1core_glLinkProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLinkProgram(program); -} - -GLboolean gl4_1core_glIsShader(void *_glfuncs, GLuint shader) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsShader(shader); -} - -GLboolean gl4_1core_glIsProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsProgram(program); -} - -void gl4_1core_glGetVertexAttribiv(void *_glfuncs, GLuint index, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribiv(index, pname, params); -} - -void gl4_1core_glGetVertexAttribfv(void *_glfuncs, GLuint index, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribfv(index, pname, params); -} - -void gl4_1core_glGetVertexAttribdv(void *_glfuncs, GLuint index, GLenum pname, GLdouble* params) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribdv(index, pname, params); -} - -void gl4_1core_glGetUniformiv(void *_glfuncs, GLuint program, GLint location, GLint* params) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetUniformiv(program, location, params); -} - -void gl4_1core_glGetUniformfv(void *_glfuncs, GLuint program, GLint location, GLfloat* params) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetUniformfv(program, location, params); -} - -GLint gl4_1core_glGetUniformLocation(void *_glfuncs, GLuint program, const GLchar* name) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetUniformLocation(program, name); -} - -void gl4_1core_glGetShaderSource(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* source) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetShaderSource(shader, bufSize, length, source); -} - -void gl4_1core_glGetShaderInfoLog(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* infoLog) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetShaderInfoLog(shader, bufSize, length, infoLog); -} - -void gl4_1core_glGetShaderiv(void *_glfuncs, GLuint shader, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetShaderiv(shader, pname, params); -} - -void gl4_1core_glGetProgramInfoLog(void *_glfuncs, GLuint program, GLsizei bufSize, GLsizei* length, GLchar* infoLog) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetProgramInfoLog(program, bufSize, length, infoLog); -} - -void gl4_1core_glGetProgramiv(void *_glfuncs, GLuint program, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetProgramiv(program, pname, params); -} - -GLint gl4_1core_glGetAttribLocation(void *_glfuncs, GLuint program, const GLchar* name) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetAttribLocation(program, name); -} - -void gl4_1core_glGetAttachedShaders(void *_glfuncs, GLuint program, GLsizei maxCount, GLsizei* count, GLuint* obj) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetAttachedShaders(program, maxCount, count, obj); -} - -void gl4_1core_glGetActiveUniform(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniform(program, index, bufSize, length, size, gltype, name); -} - -void gl4_1core_glGetActiveAttrib(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveAttrib(program, index, bufSize, length, size, gltype, name); -} - -void gl4_1core_glEnableVertexAttribArray(void *_glfuncs, GLuint index) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnableVertexAttribArray(index); -} - -void gl4_1core_glDisableVertexAttribArray(void *_glfuncs, GLuint index) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDisableVertexAttribArray(index); -} - -void gl4_1core_glDetachShader(void *_glfuncs, GLuint program, GLuint shader) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDetachShader(program, shader); -} - -void gl4_1core_glDeleteShader(void *_glfuncs, GLuint shader) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteShader(shader); -} - -void gl4_1core_glDeleteProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteProgram(program); -} - -GLuint gl4_1core_glCreateShader(void *_glfuncs, GLenum gltype) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glCreateShader(gltype); -} - -GLuint gl4_1core_glCreateProgram(void *_glfuncs) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glCreateProgram(); -} - -void gl4_1core_glCompileShader(void *_glfuncs, GLuint shader) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompileShader(shader); -} - -void gl4_1core_glBindAttribLocation(void *_glfuncs, GLuint program, GLuint index, const GLchar* name) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindAttribLocation(program, index, name); -} - -void gl4_1core_glAttachShader(void *_glfuncs, GLuint program, GLuint shader) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glAttachShader(program, shader); -} - -void gl4_1core_glStencilMaskSeparate(void *_glfuncs, GLenum face, GLuint mask) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilMaskSeparate(face, mask); -} - -void gl4_1core_glStencilFuncSeparate(void *_glfuncs, GLenum face, GLenum glfunc, GLint ref, GLuint mask) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilFuncSeparate(face, glfunc, ref, mask); -} - -void gl4_1core_glStencilOpSeparate(void *_glfuncs, GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilOpSeparate(face, sfail, dpfail, dppass); -} - -void gl4_1core_glDrawBuffers(void *_glfuncs, GLsizei n, const GLenum* bufs) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawBuffers(n, bufs); -} - -void gl4_1core_glBlendEquationSeparate(void *_glfuncs, GLenum modeRGB, GLenum modeAlpha) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendEquationSeparate(modeRGB, modeAlpha); -} - -void gl4_1core_glUniformMatrix4x3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4x3fv(location, count, transpose, value); -} - -void gl4_1core_glUniformMatrix3x4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3x4fv(location, count, transpose, value); -} - -void gl4_1core_glUniformMatrix4x2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4x2fv(location, count, transpose, value); -} - -void gl4_1core_glUniformMatrix2x4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2x4fv(location, count, transpose, value); -} - -void gl4_1core_glUniformMatrix3x2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3x2fv(location, count, transpose, value); -} - -void gl4_1core_glUniformMatrix2x3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2x3fv(location, count, transpose, value); -} - -GLboolean gl4_1core_glIsVertexArray(void *_glfuncs, GLuint array) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsVertexArray(array); -} - -void gl4_1core_glGenVertexArrays(void *_glfuncs, GLsizei n, GLuint* arrays) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenVertexArrays(n, arrays); -} - -void gl4_1core_glDeleteVertexArrays(void *_glfuncs, GLsizei n, const GLuint* arrays) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteVertexArrays(n, arrays); -} - -void gl4_1core_glBindVertexArray(void *_glfuncs, GLuint array) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindVertexArray(array); -} - -void gl4_1core_glFlushMappedBufferRange(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr length) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFlushMappedBufferRange(target, offset, length); -} - -void gl4_1core_glFramebufferTextureLayer(void *_glfuncs, GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTextureLayer(target, attachment, texture, level, layer); -} - -void gl4_1core_glRenderbufferStorageMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRenderbufferStorageMultisample(target, samples, internalFormat, width, height); -} - -void gl4_1core_glBlitFramebuffer(void *_glfuncs, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter); -} - -void gl4_1core_glGenerateMipmap(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenerateMipmap(target); -} - -void gl4_1core_glGetFramebufferAttachmentParameteriv(void *_glfuncs, GLenum target, GLenum attachment, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetFramebufferAttachmentParameteriv(target, attachment, pname, params); -} - -void gl4_1core_glFramebufferRenderbuffer(void *_glfuncs, GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer); -} - -void gl4_1core_glFramebufferTexture3D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTexture3D(target, attachment, textarget, texture, level, zoffset); -} - -void gl4_1core_glFramebufferTexture2D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTexture2D(target, attachment, textarget, texture, level); -} - -void gl4_1core_glFramebufferTexture1D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTexture1D(target, attachment, textarget, texture, level); -} - -GLenum gl4_1core_glCheckFramebufferStatus(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glCheckFramebufferStatus(target); -} - -void gl4_1core_glGenFramebuffers(void *_glfuncs, GLsizei n, GLuint* framebuffers) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenFramebuffers(n, framebuffers); -} - -void gl4_1core_glDeleteFramebuffers(void *_glfuncs, GLsizei n, const GLuint* framebuffers) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteFramebuffers(n, framebuffers); -} - -void gl4_1core_glBindFramebuffer(void *_glfuncs, GLenum target, GLuint framebuffer) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindFramebuffer(target, framebuffer); -} - -GLboolean gl4_1core_glIsFramebuffer(void *_glfuncs, GLuint framebuffer) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsFramebuffer(framebuffer); -} - -void gl4_1core_glGetRenderbufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetRenderbufferParameteriv(target, pname, params); -} - -void gl4_1core_glRenderbufferStorage(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRenderbufferStorage(target, internalFormat, width, height); -} - -void gl4_1core_glGenRenderbuffers(void *_glfuncs, GLsizei n, GLuint* renderbuffers) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenRenderbuffers(n, renderbuffers); -} - -void gl4_1core_glDeleteRenderbuffers(void *_glfuncs, GLsizei n, const GLuint* renderbuffers) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteRenderbuffers(n, renderbuffers); -} - -void gl4_1core_glBindRenderbuffer(void *_glfuncs, GLenum target, GLuint renderbuffer) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindRenderbuffer(target, renderbuffer); -} - -GLboolean gl4_1core_glIsRenderbuffer(void *_glfuncs, GLuint renderbuffer) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsRenderbuffer(renderbuffer); -} - -void gl4_1core_glClearBufferfi(void *_glfuncs, GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearBufferfi(buffer, drawbuffer, depth, stencil); -} - -void gl4_1core_glClearBufferfv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLfloat* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearBufferfv(buffer, drawbuffer, value); -} - -void gl4_1core_glClearBufferuiv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLuint* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearBufferuiv(buffer, drawbuffer, value); -} - -void gl4_1core_glClearBufferiv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLint* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearBufferiv(buffer, drawbuffer, value); -} - -void gl4_1core_glGetTexParameterIuiv(void *_glfuncs, GLenum target, GLenum pname, GLuint* params) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameterIuiv(target, pname, params); -} - -void gl4_1core_glGetTexParameterIiv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameterIiv(target, pname, params); -} - -void gl4_1core_glTexParameterIuiv(void *_glfuncs, GLenum target, GLenum pname, const GLuint* params) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterIuiv(target, pname, params); -} - -void gl4_1core_glTexParameterIiv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterIiv(target, pname, params); -} - -void gl4_1core_glUniform4uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4uiv(location, count, value); -} - -void gl4_1core_glUniform3uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3uiv(location, count, value); -} - -void gl4_1core_glUniform2uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2uiv(location, count, value); -} - -void gl4_1core_glUniform1uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1uiv(location, count, value); -} - -void gl4_1core_glUniform4ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4ui(location, v0, v1, v2, v3); -} - -void gl4_1core_glUniform3ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1, GLuint v2) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3ui(location, v0, v1, v2); -} - -void gl4_1core_glUniform2ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2ui(location, v0, v1); -} - -void gl4_1core_glUniform1ui(void *_glfuncs, GLint location, GLuint v0) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1ui(location, v0); -} - -GLint gl4_1core_glGetFragDataLocation(void *_glfuncs, GLuint program, const GLchar* name) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetFragDataLocation(program, name); -} - -void gl4_1core_glBindFragDataLocation(void *_glfuncs, GLuint program, GLuint color, const GLchar* name) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindFragDataLocation(program, color, name); -} - -void gl4_1core_glGetUniformuiv(void *_glfuncs, GLuint program, GLint location, GLuint* params) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetUniformuiv(program, location, params); -} - -void gl4_1core_glGetVertexAttribIuiv(void *_glfuncs, GLuint index, GLenum pname, GLuint* params) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribIuiv(index, pname, params); -} - -void gl4_1core_glGetVertexAttribIiv(void *_glfuncs, GLuint index, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribIiv(index, pname, params); -} - -void gl4_1core_glVertexAttribIPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribIPointer(index, size, gltype, stride, pointer); -} - -void gl4_1core_glEndConditionalRender(void *_glfuncs) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndConditionalRender(); -} - -void gl4_1core_glBeginConditionalRender(void *_glfuncs, GLuint id, GLenum mode) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBeginConditionalRender(id, mode); -} - -void gl4_1core_glClampColor(void *_glfuncs, GLenum target, GLenum clamp) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClampColor(target, clamp); -} - -void gl4_1core_glGetTransformFeedbackVarying(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* gltype, GLchar* name) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTransformFeedbackVarying(program, index, bufSize, length, size, gltype, name); -} - -void gl4_1core_glBindBufferBase(void *_glfuncs, GLenum target, GLuint index, GLuint buffer) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindBufferBase(target, index, buffer); -} - -void gl4_1core_glBindBufferRange(void *_glfuncs, GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindBufferRange(target, index, buffer, offset, size); -} - -void gl4_1core_glEndTransformFeedback(void *_glfuncs) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndTransformFeedback(); -} - -void gl4_1core_glBeginTransformFeedback(void *_glfuncs, GLenum primitiveMode) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBeginTransformFeedback(primitiveMode); -} - -GLboolean gl4_1core_glIsEnabledi(void *_glfuncs, GLenum target, GLuint index) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsEnabledi(target, index); -} - -void gl4_1core_glDisablei(void *_glfuncs, GLenum target, GLuint index) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDisablei(target, index); -} - -void gl4_1core_glEnablei(void *_glfuncs, GLenum target, GLuint index) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnablei(target, index); -} - -void gl4_1core_glGetIntegeri_v(void *_glfuncs, GLenum target, GLuint index, GLint* data) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetIntegeri_v(target, index, data); -} - -void gl4_1core_glGetBooleani_v(void *_glfuncs, GLenum target, GLuint index, GLboolean* data) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBooleani_v(target, index, data); -} - -void gl4_1core_glColorMaski(void *_glfuncs, GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorMaski(index, r, g, b, a); -} - -void gl4_1core_glCopyBufferSubData(void *_glfuncs, GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyBufferSubData(readTarget, writeTarget, readOffset, writeOffset, size); -} - -void gl4_1core_glUniformBlockBinding(void *_glfuncs, GLuint program, GLuint v0, GLuint v1) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformBlockBinding(program, v0, v1); -} - -void gl4_1core_glGetActiveUniformBlockName(void *_glfuncs, GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformBlockName) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniformBlockName(program, uniformBlockIndex, bufSize, length, uniformBlockName); -} - -void gl4_1core_glGetActiveUniformBlockiv(void *_glfuncs, GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniformBlockiv(program, uniformBlockIndex, pname, params); -} - -GLuint gl4_1core_glGetUniformBlockIndex(void *_glfuncs, GLuint program, const GLchar* uniformBlockName) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetUniformBlockIndex(program, uniformBlockName); -} - -void gl4_1core_glGetActiveUniformName(void *_glfuncs, GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformName) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniformName(program, uniformIndex, bufSize, length, uniformName); -} - -void gl4_1core_glGetActiveUniformsiv(void *_glfuncs, GLuint program, GLsizei uniformCount, const GLuint* uniformIndices, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniformsiv(program, uniformCount, uniformIndices, pname, params); -} - -void gl4_1core_glPrimitiveRestartIndex(void *_glfuncs, GLuint index) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPrimitiveRestartIndex(index); -} - -void gl4_1core_glTexBuffer(void *_glfuncs, GLenum target, GLenum internalFormat, GLuint buffer) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexBuffer(target, internalFormat, buffer); -} - -void gl4_1core_glDrawElementsInstanced(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLsizei instancecount) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElementsInstanced(mode, count, gltype, indices, instancecount); -} - -void gl4_1core_glDrawArraysInstanced(void *_glfuncs, GLenum mode, GLint first, GLsizei count, GLsizei instancecount) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawArraysInstanced(mode, first, count, instancecount); -} - -void gl4_1core_glSampleMaski(void *_glfuncs, GLuint index, GLbitfield mask) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSampleMaski(index, mask); -} - -void gl4_1core_glGetMultisamplefv(void *_glfuncs, GLenum pname, GLuint index, GLfloat* val) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMultisamplefv(pname, index, val); -} - -void gl4_1core_glTexImage3DMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage3DMultisample(target, samples, internalFormat, width, height, depth, fixedsamplelocations); -} - -void gl4_1core_glTexImage2DMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage2DMultisample(target, samples, internalFormat, width, height, fixedsamplelocations); -} - -void gl4_1core_glGetSynciv(void *_glfuncs, GLsync sync, GLenum pname, GLsizei bufSize, GLsizei* length, GLint* values) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetSynciv(sync, pname, bufSize, length, values); -} - -void gl4_1core_glGetInteger64v(void *_glfuncs, GLenum pname, GLint64* params) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetInteger64v(pname, params); -} - -void gl4_1core_glWaitSync(void *_glfuncs, GLsync sync, GLbitfield flags, GLuint64 timeout) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWaitSync(sync, flags, timeout); -} - -GLenum gl4_1core_glClientWaitSync(void *_glfuncs, GLsync sync, GLbitfield flags, GLuint64 timeout) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glClientWaitSync(sync, flags, timeout); -} - -void gl4_1core_glDeleteSync(void *_glfuncs, GLsync sync) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteSync(sync); -} - -GLboolean gl4_1core_glIsSync(void *_glfuncs, GLsync sync) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsSync(sync); -} - -GLsync gl4_1core_glFenceSync(void *_glfuncs, GLenum condition, GLbitfield flags) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glFenceSync(condition, flags); -} - -void gl4_1core_glProvokingVertex(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProvokingVertex(mode); -} - -void gl4_1core_glDrawElementsInstancedBaseVertex(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLsizei instancecount, GLint basevertex) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElementsInstancedBaseVertex(mode, count, gltype, indices, instancecount, basevertex); -} - -void gl4_1core_glDrawRangeElementsBaseVertex(void *_glfuncs, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum gltype, const GLvoid* indices, GLint basevertex) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawRangeElementsBaseVertex(mode, start, end, count, gltype, indices, basevertex); -} - -void gl4_1core_glDrawElementsBaseVertex(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLint basevertex) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElementsBaseVertex(mode, count, gltype, indices, basevertex); -} - -void gl4_1core_glFramebufferTexture(void *_glfuncs, GLenum target, GLenum attachment, GLuint texture, GLint level) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTexture(target, attachment, texture, level); -} - -void gl4_1core_glGetBufferParameteri64v(void *_glfuncs, GLenum target, GLenum pname, GLint64* params) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBufferParameteri64v(target, pname, params); -} - -void gl4_1core_glGetInteger64i_v(void *_glfuncs, GLenum target, GLuint index, GLint64* data) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetInteger64i_v(target, index, data); -} - -void gl4_1core_glVertexAttribP4uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP4uiv(index, gltype, normalized, value); -} - -void gl4_1core_glVertexAttribP4ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP4ui(index, gltype, normalized, value); -} - -void gl4_1core_glVertexAttribP3uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP3uiv(index, gltype, normalized, value); -} - -void gl4_1core_glVertexAttribP3ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP3ui(index, gltype, normalized, value); -} - -void gl4_1core_glVertexAttribP2uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP2uiv(index, gltype, normalized, value); -} - -void gl4_1core_glVertexAttribP2ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP2ui(index, gltype, normalized, value); -} - -void gl4_1core_glVertexAttribP1uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP1uiv(index, gltype, normalized, value); -} - -void gl4_1core_glVertexAttribP1ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP1ui(index, gltype, normalized, value); -} - -void gl4_1core_glSecondaryColorP3uiv(void *_glfuncs, GLenum gltype, const GLuint* color) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColorP3uiv(gltype, color); -} - -void gl4_1core_glSecondaryColorP3ui(void *_glfuncs, GLenum gltype, GLuint color) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColorP3ui(gltype, color); -} - -void gl4_1core_glColorP4uiv(void *_glfuncs, GLenum gltype, const GLuint* color) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorP4uiv(gltype, color); -} - -void gl4_1core_glColorP4ui(void *_glfuncs, GLenum gltype, GLuint color) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorP4ui(gltype, color); -} - -void gl4_1core_glColorP3uiv(void *_glfuncs, GLenum gltype, const GLuint* color) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorP3uiv(gltype, color); -} - -void gl4_1core_glColorP3ui(void *_glfuncs, GLenum gltype, GLuint color) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorP3ui(gltype, color); -} - -void gl4_1core_glNormalP3uiv(void *_glfuncs, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormalP3uiv(gltype, coords); -} - -void gl4_1core_glNormalP3ui(void *_glfuncs, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormalP3ui(gltype, coords); -} - -void gl4_1core_glMultiTexCoordP4uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP4uiv(texture, gltype, coords); -} - -void gl4_1core_glMultiTexCoordP4ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP4ui(texture, gltype, coords); -} - -void gl4_1core_glMultiTexCoordP3uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP3uiv(texture, gltype, coords); -} - -void gl4_1core_glMultiTexCoordP3ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP3ui(texture, gltype, coords); -} - -void gl4_1core_glMultiTexCoordP2uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP2uiv(texture, gltype, coords); -} - -void gl4_1core_glMultiTexCoordP2ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP2ui(texture, gltype, coords); -} - -void gl4_1core_glMultiTexCoordP1uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP1uiv(texture, gltype, coords); -} - -void gl4_1core_glMultiTexCoordP1ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP1ui(texture, gltype, coords); -} - -void gl4_1core_glTexCoordP4uiv(void *_glfuncs, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP4uiv(gltype, coords); -} - -void gl4_1core_glTexCoordP4ui(void *_glfuncs, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP4ui(gltype, coords); -} - -void gl4_1core_glTexCoordP3uiv(void *_glfuncs, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP3uiv(gltype, coords); -} - -void gl4_1core_glTexCoordP3ui(void *_glfuncs, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP3ui(gltype, coords); -} - -void gl4_1core_glTexCoordP2uiv(void *_glfuncs, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP2uiv(gltype, coords); -} - -void gl4_1core_glTexCoordP2ui(void *_glfuncs, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP2ui(gltype, coords); -} - -void gl4_1core_glTexCoordP1uiv(void *_glfuncs, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP1uiv(gltype, coords); -} - -void gl4_1core_glTexCoordP1ui(void *_glfuncs, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP1ui(gltype, coords); -} - -void gl4_1core_glVertexP4uiv(void *_glfuncs, GLenum gltype, const GLuint* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexP4uiv(gltype, value); -} - -void gl4_1core_glVertexP4ui(void *_glfuncs, GLenum gltype, GLuint value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexP4ui(gltype, value); -} - -void gl4_1core_glVertexP3uiv(void *_glfuncs, GLenum gltype, const GLuint* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexP3uiv(gltype, value); -} - -void gl4_1core_glVertexP3ui(void *_glfuncs, GLenum gltype, GLuint value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexP3ui(gltype, value); -} - -void gl4_1core_glVertexP2uiv(void *_glfuncs, GLenum gltype, const GLuint* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexP2uiv(gltype, value); -} - -void gl4_1core_glVertexP2ui(void *_glfuncs, GLenum gltype, GLuint value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexP2ui(gltype, value); -} - -void gl4_1core_glGetQueryObjectui64v(void *_glfuncs, GLuint id, GLenum pname, GLuint64* params) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryObjectui64v(id, pname, params); -} - -void gl4_1core_glGetQueryObjecti64v(void *_glfuncs, GLuint id, GLenum pname, GLint64* params) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryObjecti64v(id, pname, params); -} - -void gl4_1core_glQueryCounter(void *_glfuncs, GLuint id, GLenum target) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glQueryCounter(id, target); -} - -void gl4_1core_glGetSamplerParameterIuiv(void *_glfuncs, GLuint sampler, GLenum pname, GLuint* params) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetSamplerParameterIuiv(sampler, pname, params); -} - -void gl4_1core_glGetSamplerParameterfv(void *_glfuncs, GLuint sampler, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetSamplerParameterfv(sampler, pname, params); -} - -void gl4_1core_glGetSamplerParameterIiv(void *_glfuncs, GLuint sampler, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetSamplerParameterIiv(sampler, pname, params); -} - -void gl4_1core_glGetSamplerParameteriv(void *_glfuncs, GLuint sampler, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetSamplerParameteriv(sampler, pname, params); -} - -void gl4_1core_glSamplerParameterIuiv(void *_glfuncs, GLuint sampler, GLenum pname, const GLuint* param) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSamplerParameterIuiv(sampler, pname, param); -} - -void gl4_1core_glSamplerParameterIiv(void *_glfuncs, GLuint sampler, GLenum pname, const GLint* param) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSamplerParameterIiv(sampler, pname, param); -} - -void gl4_1core_glSamplerParameterfv(void *_glfuncs, GLuint sampler, GLenum pname, const GLfloat* param) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSamplerParameterfv(sampler, pname, param); -} - -void gl4_1core_glSamplerParameterf(void *_glfuncs, GLuint sampler, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSamplerParameterf(sampler, pname, param); -} - -void gl4_1core_glSamplerParameteriv(void *_glfuncs, GLuint sampler, GLenum pname, const GLint* param) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSamplerParameteriv(sampler, pname, param); -} - -void gl4_1core_glSamplerParameteri(void *_glfuncs, GLuint sampler, GLenum pname, GLint param) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSamplerParameteri(sampler, pname, param); -} - -void gl4_1core_glBindSampler(void *_glfuncs, GLuint unit, GLuint sampler) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindSampler(unit, sampler); -} - -GLboolean gl4_1core_glIsSampler(void *_glfuncs, GLuint sampler) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsSampler(sampler); -} - -void gl4_1core_glDeleteSamplers(void *_glfuncs, GLsizei count, const GLuint* samplers) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteSamplers(count, samplers); -} - -void gl4_1core_glGenSamplers(void *_glfuncs, GLsizei count, GLuint* samplers) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenSamplers(count, samplers); -} - -GLint gl4_1core_glGetFragDataIndex(void *_glfuncs, GLuint program, const GLchar* name) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetFragDataIndex(program, name); -} - -void gl4_1core_glBindFragDataLocationIndexed(void *_glfuncs, GLuint program, GLuint colorNumber, GLuint index, const GLchar* name) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindFragDataLocationIndexed(program, colorNumber, index, name); -} - -void gl4_1core_glVertexAttribDivisor(void *_glfuncs, GLuint index, GLuint divisor) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribDivisor(index, divisor); -} - -void gl4_1core_glGetQueryIndexediv(void *_glfuncs, GLenum target, GLuint index, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryIndexediv(target, index, pname, params); -} - -void gl4_1core_glEndQueryIndexed(void *_glfuncs, GLenum target, GLuint index) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndQueryIndexed(target, index); -} - -void gl4_1core_glBeginQueryIndexed(void *_glfuncs, GLenum target, GLuint index, GLuint id) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBeginQueryIndexed(target, index, id); -} - -void gl4_1core_glDrawTransformFeedbackStream(void *_glfuncs, GLenum mode, GLuint id, GLuint stream) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawTransformFeedbackStream(mode, id, stream); -} - -void gl4_1core_glDrawTransformFeedback(void *_glfuncs, GLenum mode, GLuint id) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawTransformFeedback(mode, id); -} - -void gl4_1core_glResumeTransformFeedback(void *_glfuncs) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glResumeTransformFeedback(); -} - -void gl4_1core_glPauseTransformFeedback(void *_glfuncs) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPauseTransformFeedback(); -} - -GLboolean gl4_1core_glIsTransformFeedback(void *_glfuncs, GLuint id) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsTransformFeedback(id); -} - -void gl4_1core_glGenTransformFeedbacks(void *_glfuncs, GLsizei n, GLuint* ids) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenTransformFeedbacks(n, ids); -} - -void gl4_1core_glDeleteTransformFeedbacks(void *_glfuncs, GLsizei n, const GLuint* ids) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteTransformFeedbacks(n, ids); -} - -void gl4_1core_glBindTransformFeedback(void *_glfuncs, GLenum target, GLuint id) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindTransformFeedback(target, id); -} - -void gl4_1core_glPatchParameterfv(void *_glfuncs, GLenum pname, const GLfloat* values) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPatchParameterfv(pname, values); -} - -void gl4_1core_glPatchParameteri(void *_glfuncs, GLenum pname, GLint value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPatchParameteri(pname, value); -} - -void gl4_1core_glGetProgramStageiv(void *_glfuncs, GLuint program, GLenum shadertype, GLenum pname, GLint* values) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetProgramStageiv(program, shadertype, pname, values); -} - -void gl4_1core_glGetUniformSubroutineuiv(void *_glfuncs, GLenum shadertype, GLint location, GLuint* params) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetUniformSubroutineuiv(shadertype, location, params); -} - -void gl4_1core_glUniformSubroutinesuiv(void *_glfuncs, GLenum shadertype, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformSubroutinesuiv(shadertype, count, value); -} - -void gl4_1core_glGetActiveSubroutineName(void *_glfuncs, GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei* length, GLchar* name) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveSubroutineName(program, shadertype, index, bufSize, length, name); -} - -void gl4_1core_glGetActiveSubroutineUniformName(void *_glfuncs, GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei* length, GLchar* name) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveSubroutineUniformName(program, shadertype, index, bufSize, length, name); -} - -void gl4_1core_glGetActiveSubroutineUniformiv(void *_glfuncs, GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint* values) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveSubroutineUniformiv(program, shadertype, index, pname, values); -} - -GLuint gl4_1core_glGetSubroutineIndex(void *_glfuncs, GLuint program, GLenum shadertype, const GLchar* name) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetSubroutineIndex(program, shadertype, name); -} - -GLint gl4_1core_glGetSubroutineUniformLocation(void *_glfuncs, GLuint program, GLenum shadertype, const GLchar* name) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetSubroutineUniformLocation(program, shadertype, name); -} - -void gl4_1core_glGetUniformdv(void *_glfuncs, GLuint program, GLint location, GLdouble* params) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetUniformdv(program, location, params); -} - -void gl4_1core_glUniformMatrix4x3dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4x3dv(location, count, transpose, value); -} - -void gl4_1core_glUniformMatrix4x2dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4x2dv(location, count, transpose, value); -} - -void gl4_1core_glUniformMatrix3x4dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3x4dv(location, count, transpose, value); -} - -void gl4_1core_glUniformMatrix3x2dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3x2dv(location, count, transpose, value); -} - -void gl4_1core_glUniformMatrix2x4dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2x4dv(location, count, transpose, value); -} - -void gl4_1core_glUniformMatrix2x3dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2x3dv(location, count, transpose, value); -} - -void gl4_1core_glUniformMatrix4dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4dv(location, count, transpose, value); -} - -void gl4_1core_glUniformMatrix3dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3dv(location, count, transpose, value); -} - -void gl4_1core_glUniformMatrix2dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2dv(location, count, transpose, value); -} - -void gl4_1core_glUniform4dv(void *_glfuncs, GLint location, GLsizei count, const GLdouble* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4dv(location, count, value); -} - -void gl4_1core_glUniform3dv(void *_glfuncs, GLint location, GLsizei count, const GLdouble* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3dv(location, count, value); -} - -void gl4_1core_glUniform2dv(void *_glfuncs, GLint location, GLsizei count, const GLdouble* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2dv(location, count, value); -} - -void gl4_1core_glUniform1dv(void *_glfuncs, GLint location, GLsizei count, const GLdouble* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1dv(location, count, value); -} - -void gl4_1core_glUniform4d(void *_glfuncs, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4d(location, v0, v1, v2, v3); -} - -void gl4_1core_glUniform3d(void *_glfuncs, GLint location, GLdouble v0, GLdouble v1, GLdouble v2) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3d(location, v0, v1, v2); -} - -void gl4_1core_glUniform2d(void *_glfuncs, GLint location, GLdouble v0, GLdouble v1) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2d(location, v0, v1); -} - -void gl4_1core_glUniform1d(void *_glfuncs, GLint location, GLdouble v0) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1d(location, v0); -} - -void gl4_1core_glDrawElementsIndirect(void *_glfuncs, GLenum mode, GLenum gltype, const GLvoid* indirect) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElementsIndirect(mode, gltype, indirect); -} - -void gl4_1core_glDrawArraysIndirect(void *_glfuncs, GLenum mode, const GLvoid* indirect) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawArraysIndirect(mode, indirect); -} - -void gl4_1core_glBlendFuncSeparatei(void *_glfuncs, GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendFuncSeparatei(buf, srcRGB, dstRGB, srcAlpha, dstAlpha); -} - -void gl4_1core_glBlendFunci(void *_glfuncs, GLuint buf, GLenum src, GLenum dst) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendFunci(buf, src, dst); -} - -void gl4_1core_glBlendEquationSeparatei(void *_glfuncs, GLuint buf, GLenum modeRGB, GLenum modeAlpha) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendEquationSeparatei(buf, modeRGB, modeAlpha); -} - -void gl4_1core_glBlendEquationi(void *_glfuncs, GLuint buf, GLenum mode) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendEquationi(buf, mode); -} - -void gl4_1core_glMinSampleShading(void *_glfuncs, GLfloat value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMinSampleShading(value); -} - -void gl4_1core_glGetDoublei_v(void *_glfuncs, GLenum target, GLuint index, GLdouble* data) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetDoublei_v(target, index, data); -} - -void gl4_1core_glGetFloati_v(void *_glfuncs, GLenum target, GLuint index, GLfloat* data) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetFloati_v(target, index, data); -} - -void gl4_1core_glDepthRangeIndexed(void *_glfuncs, GLuint index, GLdouble n, GLdouble f) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthRangeIndexed(index, n, f); -} - -void gl4_1core_glDepthRangeArrayv(void *_glfuncs, GLuint first, GLsizei count, const GLdouble* v) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthRangeArrayv(first, count, v); -} - -void gl4_1core_glScissorIndexedv(void *_glfuncs, GLuint index, const GLint* v) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScissorIndexedv(index, v); -} - -void gl4_1core_glScissorIndexed(void *_glfuncs, GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScissorIndexed(index, left, bottom, width, height); -} - -void gl4_1core_glScissorArrayv(void *_glfuncs, GLuint first, GLsizei count, const GLint* v) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScissorArrayv(first, count, v); -} - -void gl4_1core_glViewportIndexedfv(void *_glfuncs, GLuint index, const GLfloat* v) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glViewportIndexedfv(index, v); -} - -void gl4_1core_glViewportIndexedf(void *_glfuncs, GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glViewportIndexedf(index, x, y, w, h); -} - -void gl4_1core_glViewportArrayv(void *_glfuncs, GLuint first, GLsizei count, const GLfloat* v) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glViewportArrayv(first, count, v); -} - -void gl4_1core_glGetVertexAttribLdv(void *_glfuncs, GLuint index, GLenum pname, GLdouble* params) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribLdv(index, pname, params); -} - -void gl4_1core_glVertexAttribLPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribLPointer(index, size, gltype, stride, pointer); -} - -void gl4_1core_glVertexAttribL4dv(void *_glfuncs, GLuint index, const GLdouble* v) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribL4dv(index, v); -} - -void gl4_1core_glVertexAttribL3dv(void *_glfuncs, GLuint index, const GLdouble* v) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribL3dv(index, v); -} - -void gl4_1core_glVertexAttribL2dv(void *_glfuncs, GLuint index, const GLdouble* v) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribL2dv(index, v); -} - -void gl4_1core_glVertexAttribL1dv(void *_glfuncs, GLuint index, const GLdouble* v) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribL1dv(index, v); -} - -void gl4_1core_glVertexAttribL4d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribL4d(index, x, y, z, w); -} - -void gl4_1core_glVertexAttribL3d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribL3d(index, x, y, z); -} - -void gl4_1core_glVertexAttribL2d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribL2d(index, x, y); -} - -void gl4_1core_glVertexAttribL1d(void *_glfuncs, GLuint index, GLdouble x) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribL1d(index, x); -} - -void gl4_1core_glGetProgramPipelineInfoLog(void *_glfuncs, GLuint pipeline, GLsizei bufSize, GLsizei* length, GLchar* infoLog) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetProgramPipelineInfoLog(pipeline, bufSize, length, infoLog); -} - -void gl4_1core_glValidateProgramPipeline(void *_glfuncs, GLuint pipeline) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glValidateProgramPipeline(pipeline); -} - -void gl4_1core_glProgramUniformMatrix4x3dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix4x3dv(program, location, count, transpose, value); -} - -void gl4_1core_glProgramUniformMatrix3x4dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix3x4dv(program, location, count, transpose, value); -} - -void gl4_1core_glProgramUniformMatrix4x2dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix4x2dv(program, location, count, transpose, value); -} - -void gl4_1core_glProgramUniformMatrix2x4dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix2x4dv(program, location, count, transpose, value); -} - -void gl4_1core_glProgramUniformMatrix3x2dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix3x2dv(program, location, count, transpose, value); -} - -void gl4_1core_glProgramUniformMatrix2x3dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix2x3dv(program, location, count, transpose, value); -} - -void gl4_1core_glProgramUniformMatrix4x3fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix4x3fv(program, location, count, transpose, value); -} - -void gl4_1core_glProgramUniformMatrix3x4fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix3x4fv(program, location, count, transpose, value); -} - -void gl4_1core_glProgramUniformMatrix4x2fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix4x2fv(program, location, count, transpose, value); -} - -void gl4_1core_glProgramUniformMatrix2x4fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix2x4fv(program, location, count, transpose, value); -} - -void gl4_1core_glProgramUniformMatrix3x2fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix3x2fv(program, location, count, transpose, value); -} - -void gl4_1core_glProgramUniformMatrix2x3fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix2x3fv(program, location, count, transpose, value); -} - -void gl4_1core_glProgramUniformMatrix4dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix4dv(program, location, count, transpose, value); -} - -void gl4_1core_glProgramUniformMatrix3dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix3dv(program, location, count, transpose, value); -} - -void gl4_1core_glProgramUniformMatrix2dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix2dv(program, location, count, transpose, value); -} - -void gl4_1core_glProgramUniformMatrix4fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix4fv(program, location, count, transpose, value); -} - -void gl4_1core_glProgramUniformMatrix3fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix3fv(program, location, count, transpose, value); -} - -void gl4_1core_glProgramUniformMatrix2fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix2fv(program, location, count, transpose, value); -} - -void gl4_1core_glProgramUniform4uiv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform4uiv(program, location, count, value); -} - -void gl4_1core_glProgramUniform4ui(void *_glfuncs, GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform4ui(program, location, v0, v1, v2, v3); -} - -void gl4_1core_glProgramUniform4dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLdouble* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform4dv(program, location, count, value); -} - -void gl4_1core_glProgramUniform4d(void *_glfuncs, GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform4d(program, location, v0, v1, v2, v3); -} - -void gl4_1core_glProgramUniform4fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform4fv(program, location, count, value); -} - -void gl4_1core_glProgramUniform4f(void *_glfuncs, GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform4f(program, location, v0, v1, v2, v3); -} - -void gl4_1core_glProgramUniform4iv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform4iv(program, location, count, value); -} - -void gl4_1core_glProgramUniform4i(void *_glfuncs, GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform4i(program, location, v0, v1, v2, v3); -} - -void gl4_1core_glProgramUniform3uiv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform3uiv(program, location, count, value); -} - -void gl4_1core_glProgramUniform3ui(void *_glfuncs, GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform3ui(program, location, v0, v1, v2); -} - -void gl4_1core_glProgramUniform3dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLdouble* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform3dv(program, location, count, value); -} - -void gl4_1core_glProgramUniform3d(void *_glfuncs, GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform3d(program, location, v0, v1, v2); -} - -void gl4_1core_glProgramUniform3fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform3fv(program, location, count, value); -} - -void gl4_1core_glProgramUniform3f(void *_glfuncs, GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform3f(program, location, v0, v1, v2); -} - -void gl4_1core_glProgramUniform3iv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform3iv(program, location, count, value); -} - -void gl4_1core_glProgramUniform3i(void *_glfuncs, GLuint program, GLint location, GLint v0, GLint v1, GLint v2) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform3i(program, location, v0, v1, v2); -} - -void gl4_1core_glProgramUniform2uiv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform2uiv(program, location, count, value); -} - -void gl4_1core_glProgramUniform2ui(void *_glfuncs, GLuint program, GLint location, GLuint v0, GLuint v1) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform2ui(program, location, v0, v1); -} - -void gl4_1core_glProgramUniform2dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLdouble* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform2dv(program, location, count, value); -} - -void gl4_1core_glProgramUniform2d(void *_glfuncs, GLuint program, GLint location, GLdouble v0, GLdouble v1) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform2d(program, location, v0, v1); -} - -void gl4_1core_glProgramUniform2fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform2fv(program, location, count, value); -} - -void gl4_1core_glProgramUniform2f(void *_glfuncs, GLuint program, GLint location, GLfloat v0, GLfloat v1) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform2f(program, location, v0, v1); -} - -void gl4_1core_glProgramUniform2iv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform2iv(program, location, count, value); -} - -void gl4_1core_glProgramUniform2i(void *_glfuncs, GLuint program, GLint location, GLint v0, GLint v1) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform2i(program, location, v0, v1); -} - -void gl4_1core_glProgramUniform1uiv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform1uiv(program, location, count, value); -} - -void gl4_1core_glProgramUniform1ui(void *_glfuncs, GLuint program, GLint location, GLuint v0) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform1ui(program, location, v0); -} - -void gl4_1core_glProgramUniform1dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLdouble* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform1dv(program, location, count, value); -} - -void gl4_1core_glProgramUniform1d(void *_glfuncs, GLuint program, GLint location, GLdouble v0) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform1d(program, location, v0); -} - -void gl4_1core_glProgramUniform1fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform1fv(program, location, count, value); -} - -void gl4_1core_glProgramUniform1f(void *_glfuncs, GLuint program, GLint location, GLfloat v0) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform1f(program, location, v0); -} - -void gl4_1core_glProgramUniform1iv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform1iv(program, location, count, value); -} - -void gl4_1core_glProgramUniform1i(void *_glfuncs, GLuint program, GLint location, GLint v0) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform1i(program, location, v0); -} - -void gl4_1core_glGetProgramPipelineiv(void *_glfuncs, GLuint pipeline, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetProgramPipelineiv(pipeline, pname, params); -} - -GLboolean gl4_1core_glIsProgramPipeline(void *_glfuncs, GLuint pipeline) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsProgramPipeline(pipeline); -} - -void gl4_1core_glGenProgramPipelines(void *_glfuncs, GLsizei n, GLuint* pipelines) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenProgramPipelines(n, pipelines); -} - -void gl4_1core_glDeleteProgramPipelines(void *_glfuncs, GLsizei n, const GLuint* pipelines) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteProgramPipelines(n, pipelines); -} - -void gl4_1core_glBindProgramPipeline(void *_glfuncs, GLuint pipeline) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindProgramPipeline(pipeline); -} - -void gl4_1core_glActiveShaderProgram(void *_glfuncs, GLuint pipeline, GLuint program) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glActiveShaderProgram(pipeline, program); -} - -void gl4_1core_glUseProgramStages(void *_glfuncs, GLuint pipeline, GLbitfield stages, GLuint program) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUseProgramStages(pipeline, stages, program); -} - -void gl4_1core_glProgramParameteri(void *_glfuncs, GLuint program, GLenum pname, GLint value) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramParameteri(program, pname, value); -} - -void gl4_1core_glProgramBinary(void *_glfuncs, GLuint program, GLenum binaryFormat, const GLvoid* binary, GLsizei length) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramBinary(program, binaryFormat, binary, length); -} - -void gl4_1core_glGetProgramBinary(void *_glfuncs, GLuint program, GLsizei bufSize, GLsizei* length, GLenum* binaryFormat, GLvoid* binary) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetProgramBinary(program, bufSize, length, binaryFormat, binary); -} - -void gl4_1core_glClearDepthf(void *_glfuncs, GLfloat dd) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearDepthf(dd); -} - -void gl4_1core_glDepthRangef(void *_glfuncs, GLfloat n, GLfloat f) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthRangef(n, f); -} - -void gl4_1core_glGetShaderPrecisionFormat(void *_glfuncs, GLenum shadertype, GLenum precisionType, GLint* range_, GLint* precision) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetShaderPrecisionFormat(shadertype, precisionType, range_, precision); -} - -void gl4_1core_glShaderBinary(void *_glfuncs, GLsizei count, const GLuint* shaders, GLenum binaryFormat, const GLvoid* binary, GLsizei length) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glShaderBinary(count, shaders, binaryFormat, binary, length); -} - -void gl4_1core_glReleaseShaderCompiler(void *_glfuncs) -{ - QOpenGLFunctions_4_1_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glReleaseShaderCompiler(); -} - diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.1core/funcs.h b/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.1core/funcs.h deleted file mode 100644 index e582a112c7..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.1core/funcs.h +++ /dev/null @@ -1,485 +0,0 @@ - -// ** file automatically generated by glgen -- do not edit manually ** - -#ifndef __cplusplus -#include -#include -typedef unsigned int GLenum; -typedef unsigned char GLboolean; -typedef unsigned int GLbitfield; -typedef void GLvoid; -typedef char GLchar; -typedef signed char GLbyte; /* 1-byte signed */ -typedef short GLshort; /* 2-byte signed */ -typedef int GLint; /* 4-byte signed */ -typedef unsigned char GLubyte; /* 1-byte unsigned */ -typedef unsigned short GLushort; /* 2-byte unsigned */ -typedef unsigned int GLuint; /* 4-byte unsigned */ -typedef int GLsizei; /* 4-byte signed */ -typedef float GLfloat; /* single precision float */ -typedef float GLclampf; /* single precision float in [0,1] */ -typedef double GLdouble; /* double precision float */ -typedef double GLclampd; /* double precision float in [0,1] */ -typedef int64_t GLint64; -typedef uint64_t GLuint64; -typedef ptrdiff_t GLintptr; -typedef ptrdiff_t GLsizeiptr; -typedef ptrdiff_t GLintptrARB; -typedef ptrdiff_t GLsizeiptrARB; -typedef struct __GLsync *GLsync; -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -void *gl4_1core_funcs(); - -void gl4_1core_glViewport(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height); -void gl4_1core_glDepthRange(void *_glfuncs, GLdouble nearVal, GLdouble farVal); -GLboolean gl4_1core_glIsEnabled(void *_glfuncs, GLenum cap); -void gl4_1core_glGetTexLevelParameteriv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLint* params); -void gl4_1core_glGetTexLevelParameterfv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLfloat* params); -void gl4_1core_glGetTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl4_1core_glGetTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl4_1core_glGetTexImage(void *_glfuncs, GLenum target, GLint level, GLenum format, GLenum gltype, GLvoid* pixels); -void gl4_1core_glGetIntegerv(void *_glfuncs, GLenum pname, GLint* params); -void gl4_1core_glGetFloatv(void *_glfuncs, GLenum pname, GLfloat* params); -GLenum gl4_1core_glGetError(void *_glfuncs); -void gl4_1core_glGetDoublev(void *_glfuncs, GLenum pname, GLdouble* params); -void gl4_1core_glGetBooleanv(void *_glfuncs, GLenum pname, GLboolean* params); -void gl4_1core_glReadPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum gltype, GLvoid* pixels); -void gl4_1core_glReadBuffer(void *_glfuncs, GLenum mode); -void gl4_1core_glPixelStorei(void *_glfuncs, GLenum pname, GLint param); -void gl4_1core_glPixelStoref(void *_glfuncs, GLenum pname, GLfloat param); -void gl4_1core_glDepthFunc(void *_glfuncs, GLenum glfunc); -void gl4_1core_glStencilOp(void *_glfuncs, GLenum fail, GLenum zfail, GLenum zpass); -void gl4_1core_glStencilFunc(void *_glfuncs, GLenum glfunc, GLint ref, GLuint mask); -void gl4_1core_glLogicOp(void *_glfuncs, GLenum opcode); -void gl4_1core_glBlendFunc(void *_glfuncs, GLenum sfactor, GLenum dfactor); -void gl4_1core_glFlush(void *_glfuncs); -void gl4_1core_glFinish(void *_glfuncs); -void gl4_1core_glEnable(void *_glfuncs, GLenum cap); -void gl4_1core_glDisable(void *_glfuncs, GLenum cap); -void gl4_1core_glDepthMask(void *_glfuncs, GLboolean flag); -void gl4_1core_glColorMask(void *_glfuncs, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); -void gl4_1core_glStencilMask(void *_glfuncs, GLuint mask); -void gl4_1core_glClearDepth(void *_glfuncs, GLdouble depth); -void gl4_1core_glClearStencil(void *_glfuncs, GLint s); -void gl4_1core_glClearColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl4_1core_glClear(void *_glfuncs, GLbitfield mask); -void gl4_1core_glDrawBuffer(void *_glfuncs, GLenum mode); -void gl4_1core_glTexImage2D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl4_1core_glTexImage1D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl4_1core_glTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl4_1core_glTexParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint param); -void gl4_1core_glTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params); -void gl4_1core_glTexParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param); -void gl4_1core_glScissor(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height); -void gl4_1core_glPolygonMode(void *_glfuncs, GLenum face, GLenum mode); -void gl4_1core_glPointSize(void *_glfuncs, GLfloat size); -void gl4_1core_glLineWidth(void *_glfuncs, GLfloat width); -void gl4_1core_glHint(void *_glfuncs, GLenum target, GLenum mode); -void gl4_1core_glFrontFace(void *_glfuncs, GLenum mode); -void gl4_1core_glCullFace(void *_glfuncs, GLenum mode); -void gl4_1core_glIndexubv(void *_glfuncs, const GLubyte* c); -void gl4_1core_glIndexub(void *_glfuncs, GLubyte c); -GLboolean gl4_1core_glIsTexture(void *_glfuncs, GLuint texture); -void gl4_1core_glGenTextures(void *_glfuncs, GLsizei n, GLuint* textures); -void gl4_1core_glDeleteTextures(void *_glfuncs, GLsizei n, const GLuint* textures); -void gl4_1core_glBindTexture(void *_glfuncs, GLenum target, GLuint texture); -void gl4_1core_glTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl4_1core_glTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl4_1core_glCopyTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -void gl4_1core_glCopyTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -void gl4_1core_glCopyTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -void gl4_1core_glCopyTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border); -void gl4_1core_glPolygonOffset(void *_glfuncs, GLfloat factor, GLfloat units); -void gl4_1core_glDrawElements(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices); -void gl4_1core_glDrawArrays(void *_glfuncs, GLenum mode, GLint first, GLsizei count); -void gl4_1core_glCopyTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -void gl4_1core_glTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl4_1core_glTexImage3D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl4_1core_glDrawRangeElements(void *_glfuncs, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum gltype, const GLvoid* indices); -void gl4_1core_glBlendEquation(void *_glfuncs, GLenum mode); -void gl4_1core_glBlendColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl4_1core_glGetCompressedTexImage(void *_glfuncs, GLenum target, GLint level, GLvoid* img); -void gl4_1core_glCompressedTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid* data); -void gl4_1core_glCompressedTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data); -void gl4_1core_glCompressedTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data); -void gl4_1core_glCompressedTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid* data); -void gl4_1core_glCompressedTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data); -void gl4_1core_glCompressedTexImage3D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data); -void gl4_1core_glSampleCoverage(void *_glfuncs, GLfloat value, GLboolean invert); -void gl4_1core_glActiveTexture(void *_glfuncs, GLenum texture); -void gl4_1core_glPointParameteriv(void *_glfuncs, GLenum pname, const GLint* params); -void gl4_1core_glPointParameteri(void *_glfuncs, GLenum pname, GLint param); -void gl4_1core_glPointParameterfv(void *_glfuncs, GLenum pname, const GLfloat* params); -void gl4_1core_glPointParameterf(void *_glfuncs, GLenum pname, GLfloat param); -void gl4_1core_glMultiDrawArrays(void *_glfuncs, GLenum mode, const GLint* first, const GLsizei* count, GLsizei drawcount); -void gl4_1core_glBlendFuncSeparate(void *_glfuncs, GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -void gl4_1core_glGetBufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -GLboolean gl4_1core_glUnmapBuffer(void *_glfuncs, GLenum target); -void gl4_1core_glGetBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, GLvoid* data); -void gl4_1core_glBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data); -void gl4_1core_glBufferData(void *_glfuncs, GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage); -GLboolean gl4_1core_glIsBuffer(void *_glfuncs, GLuint buffer); -void gl4_1core_glGenBuffers(void *_glfuncs, GLsizei n, GLuint* buffers); -void gl4_1core_glDeleteBuffers(void *_glfuncs, GLsizei n, const GLuint* buffers); -void gl4_1core_glBindBuffer(void *_glfuncs, GLenum target, GLuint buffer); -void gl4_1core_glGetQueryObjectuiv(void *_glfuncs, GLuint id, GLenum pname, GLuint* params); -void gl4_1core_glGetQueryObjectiv(void *_glfuncs, GLuint id, GLenum pname, GLint* params); -void gl4_1core_glGetQueryiv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl4_1core_glEndQuery(void *_glfuncs, GLenum target); -void gl4_1core_glBeginQuery(void *_glfuncs, GLenum target, GLuint id); -GLboolean gl4_1core_glIsQuery(void *_glfuncs, GLuint id); -void gl4_1core_glDeleteQueries(void *_glfuncs, GLsizei n, const GLuint* ids); -void gl4_1core_glGenQueries(void *_glfuncs, GLsizei n, GLuint* ids); -void gl4_1core_glVertexAttribPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLboolean normalized, GLsizei stride, const GLvoid* offset); -void gl4_1core_glValidateProgram(void *_glfuncs, GLuint program); -void gl4_1core_glUniformMatrix4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_1core_glUniformMatrix3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_1core_glUniformMatrix2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_1core_glUniform4iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gl4_1core_glUniform3iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gl4_1core_glUniform2iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gl4_1core_glUniform1iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gl4_1core_glUniform4fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gl4_1core_glUniform3fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gl4_1core_glUniform2fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gl4_1core_glUniform1fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gl4_1core_glUniform4i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -void gl4_1core_glUniform3i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2); -void gl4_1core_glUniform2i(void *_glfuncs, GLint location, GLint v0, GLint v1); -void gl4_1core_glUniform1i(void *_glfuncs, GLint location, GLint v0); -void gl4_1core_glUniform4f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -void gl4_1core_glUniform3f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -void gl4_1core_glUniform2f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1); -void gl4_1core_glUniform1f(void *_glfuncs, GLint location, GLfloat v0); -void gl4_1core_glUseProgram(void *_glfuncs, GLuint program); -void gl4_1core_glShaderSource(void *_glfuncs, GLuint shader, GLsizei count, const GLchar** source, const GLint* length); -void gl4_1core_glLinkProgram(void *_glfuncs, GLuint program); -GLboolean gl4_1core_glIsShader(void *_glfuncs, GLuint shader); -GLboolean gl4_1core_glIsProgram(void *_glfuncs, GLuint program); -void gl4_1core_glGetVertexAttribiv(void *_glfuncs, GLuint index, GLenum pname, GLint* params); -void gl4_1core_glGetVertexAttribfv(void *_glfuncs, GLuint index, GLenum pname, GLfloat* params); -void gl4_1core_glGetVertexAttribdv(void *_glfuncs, GLuint index, GLenum pname, GLdouble* params); -void gl4_1core_glGetUniformiv(void *_glfuncs, GLuint program, GLint location, GLint* params); -void gl4_1core_glGetUniformfv(void *_glfuncs, GLuint program, GLint location, GLfloat* params); -GLint gl4_1core_glGetUniformLocation(void *_glfuncs, GLuint program, const GLchar* name); -void gl4_1core_glGetShaderSource(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* source); -void gl4_1core_glGetShaderInfoLog(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* infoLog); -void gl4_1core_glGetShaderiv(void *_glfuncs, GLuint shader, GLenum pname, GLint* params); -void gl4_1core_glGetProgramInfoLog(void *_glfuncs, GLuint program, GLsizei bufSize, GLsizei* length, GLchar* infoLog); -void gl4_1core_glGetProgramiv(void *_glfuncs, GLuint program, GLenum pname, GLint* params); -GLint gl4_1core_glGetAttribLocation(void *_glfuncs, GLuint program, const GLchar* name); -void gl4_1core_glGetAttachedShaders(void *_glfuncs, GLuint program, GLsizei maxCount, GLsizei* count, GLuint* obj); -void gl4_1core_glGetActiveUniform(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name); -void gl4_1core_glGetActiveAttrib(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name); -void gl4_1core_glEnableVertexAttribArray(void *_glfuncs, GLuint index); -void gl4_1core_glDisableVertexAttribArray(void *_glfuncs, GLuint index); -void gl4_1core_glDetachShader(void *_glfuncs, GLuint program, GLuint shader); -void gl4_1core_glDeleteShader(void *_glfuncs, GLuint shader); -void gl4_1core_glDeleteProgram(void *_glfuncs, GLuint program); -GLuint gl4_1core_glCreateShader(void *_glfuncs, GLenum gltype); -GLuint gl4_1core_glCreateProgram(void *_glfuncs); -void gl4_1core_glCompileShader(void *_glfuncs, GLuint shader); -void gl4_1core_glBindAttribLocation(void *_glfuncs, GLuint program, GLuint index, const GLchar* name); -void gl4_1core_glAttachShader(void *_glfuncs, GLuint program, GLuint shader); -void gl4_1core_glStencilMaskSeparate(void *_glfuncs, GLenum face, GLuint mask); -void gl4_1core_glStencilFuncSeparate(void *_glfuncs, GLenum face, GLenum glfunc, GLint ref, GLuint mask); -void gl4_1core_glStencilOpSeparate(void *_glfuncs, GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); -void gl4_1core_glDrawBuffers(void *_glfuncs, GLsizei n, const GLenum* bufs); -void gl4_1core_glBlendEquationSeparate(void *_glfuncs, GLenum modeRGB, GLenum modeAlpha); -void gl4_1core_glUniformMatrix4x3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_1core_glUniformMatrix3x4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_1core_glUniformMatrix4x2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_1core_glUniformMatrix2x4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_1core_glUniformMatrix3x2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_1core_glUniformMatrix2x3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -GLboolean gl4_1core_glIsVertexArray(void *_glfuncs, GLuint array); -void gl4_1core_glGenVertexArrays(void *_glfuncs, GLsizei n, GLuint* arrays); -void gl4_1core_glDeleteVertexArrays(void *_glfuncs, GLsizei n, const GLuint* arrays); -void gl4_1core_glBindVertexArray(void *_glfuncs, GLuint array); -void gl4_1core_glFlushMappedBufferRange(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr length); -void gl4_1core_glFramebufferTextureLayer(void *_glfuncs, GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); -void gl4_1core_glRenderbufferStorageMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height); -void gl4_1core_glBlitFramebuffer(void *_glfuncs, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -void gl4_1core_glGenerateMipmap(void *_glfuncs, GLenum target); -void gl4_1core_glGetFramebufferAttachmentParameteriv(void *_glfuncs, GLenum target, GLenum attachment, GLenum pname, GLint* params); -void gl4_1core_glFramebufferRenderbuffer(void *_glfuncs, GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -void gl4_1core_glFramebufferTexture3D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -void gl4_1core_glFramebufferTexture2D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -void gl4_1core_glFramebufferTexture1D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLenum gl4_1core_glCheckFramebufferStatus(void *_glfuncs, GLenum target); -void gl4_1core_glGenFramebuffers(void *_glfuncs, GLsizei n, GLuint* framebuffers); -void gl4_1core_glDeleteFramebuffers(void *_glfuncs, GLsizei n, const GLuint* framebuffers); -void gl4_1core_glBindFramebuffer(void *_glfuncs, GLenum target, GLuint framebuffer); -GLboolean gl4_1core_glIsFramebuffer(void *_glfuncs, GLuint framebuffer); -void gl4_1core_glGetRenderbufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl4_1core_glRenderbufferStorage(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height); -void gl4_1core_glGenRenderbuffers(void *_glfuncs, GLsizei n, GLuint* renderbuffers); -void gl4_1core_glDeleteRenderbuffers(void *_glfuncs, GLsizei n, const GLuint* renderbuffers); -void gl4_1core_glBindRenderbuffer(void *_glfuncs, GLenum target, GLuint renderbuffer); -GLboolean gl4_1core_glIsRenderbuffer(void *_glfuncs, GLuint renderbuffer); -void gl4_1core_glClearBufferfi(void *_glfuncs, GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); -void gl4_1core_glClearBufferfv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLfloat* value); -void gl4_1core_glClearBufferuiv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLuint* value); -void gl4_1core_glClearBufferiv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLint* value); -void gl4_1core_glGetTexParameterIuiv(void *_glfuncs, GLenum target, GLenum pname, GLuint* params); -void gl4_1core_glGetTexParameterIiv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl4_1core_glTexParameterIuiv(void *_glfuncs, GLenum target, GLenum pname, const GLuint* params); -void gl4_1core_glTexParameterIiv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl4_1core_glUniform4uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value); -void gl4_1core_glUniform3uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value); -void gl4_1core_glUniform2uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value); -void gl4_1core_glUniform1uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value); -void gl4_1core_glUniform4ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -void gl4_1core_glUniform3ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1, GLuint v2); -void gl4_1core_glUniform2ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1); -void gl4_1core_glUniform1ui(void *_glfuncs, GLint location, GLuint v0); -GLint gl4_1core_glGetFragDataLocation(void *_glfuncs, GLuint program, const GLchar* name); -void gl4_1core_glBindFragDataLocation(void *_glfuncs, GLuint program, GLuint color, const GLchar* name); -void gl4_1core_glGetUniformuiv(void *_glfuncs, GLuint program, GLint location, GLuint* params); -void gl4_1core_glGetVertexAttribIuiv(void *_glfuncs, GLuint index, GLenum pname, GLuint* params); -void gl4_1core_glGetVertexAttribIiv(void *_glfuncs, GLuint index, GLenum pname, GLint* params); -void gl4_1core_glVertexAttribIPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl4_1core_glEndConditionalRender(void *_glfuncs); -void gl4_1core_glBeginConditionalRender(void *_glfuncs, GLuint id, GLenum mode); -void gl4_1core_glClampColor(void *_glfuncs, GLenum target, GLenum clamp); -void gl4_1core_glGetTransformFeedbackVarying(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* gltype, GLchar* name); -void gl4_1core_glBindBufferBase(void *_glfuncs, GLenum target, GLuint index, GLuint buffer); -void gl4_1core_glBindBufferRange(void *_glfuncs, GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -void gl4_1core_glEndTransformFeedback(void *_glfuncs); -void gl4_1core_glBeginTransformFeedback(void *_glfuncs, GLenum primitiveMode); -GLboolean gl4_1core_glIsEnabledi(void *_glfuncs, GLenum target, GLuint index); -void gl4_1core_glDisablei(void *_glfuncs, GLenum target, GLuint index); -void gl4_1core_glEnablei(void *_glfuncs, GLenum target, GLuint index); -void gl4_1core_glGetIntegeri_v(void *_glfuncs, GLenum target, GLuint index, GLint* data); -void gl4_1core_glGetBooleani_v(void *_glfuncs, GLenum target, GLuint index, GLboolean* data); -void gl4_1core_glColorMaski(void *_glfuncs, GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); -void gl4_1core_glCopyBufferSubData(void *_glfuncs, GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); -void gl4_1core_glUniformBlockBinding(void *_glfuncs, GLuint program, GLuint v0, GLuint v1); -void gl4_1core_glGetActiveUniformBlockName(void *_glfuncs, GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformBlockName); -void gl4_1core_glGetActiveUniformBlockiv(void *_glfuncs, GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint* params); -GLuint gl4_1core_glGetUniformBlockIndex(void *_glfuncs, GLuint program, const GLchar* uniformBlockName); -void gl4_1core_glGetActiveUniformName(void *_glfuncs, GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformName); -void gl4_1core_glGetActiveUniformsiv(void *_glfuncs, GLuint program, GLsizei uniformCount, const GLuint* uniformIndices, GLenum pname, GLint* params); -void gl4_1core_glPrimitiveRestartIndex(void *_glfuncs, GLuint index); -void gl4_1core_glTexBuffer(void *_glfuncs, GLenum target, GLenum internalFormat, GLuint buffer); -void gl4_1core_glDrawElementsInstanced(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLsizei instancecount); -void gl4_1core_glDrawArraysInstanced(void *_glfuncs, GLenum mode, GLint first, GLsizei count, GLsizei instancecount); -void gl4_1core_glSampleMaski(void *_glfuncs, GLuint index, GLbitfield mask); -void gl4_1core_glGetMultisamplefv(void *_glfuncs, GLenum pname, GLuint index, GLfloat* val); -void gl4_1core_glTexImage3DMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); -void gl4_1core_glTexImage2DMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); -void gl4_1core_glGetSynciv(void *_glfuncs, GLsync sync, GLenum pname, GLsizei bufSize, GLsizei* length, GLint* values); -void gl4_1core_glGetInteger64v(void *_glfuncs, GLenum pname, GLint64* params); -void gl4_1core_glWaitSync(void *_glfuncs, GLsync sync, GLbitfield flags, GLuint64 timeout); -GLenum gl4_1core_glClientWaitSync(void *_glfuncs, GLsync sync, GLbitfield flags, GLuint64 timeout); -void gl4_1core_glDeleteSync(void *_glfuncs, GLsync sync); -GLboolean gl4_1core_glIsSync(void *_glfuncs, GLsync sync); -GLsync gl4_1core_glFenceSync(void *_glfuncs, GLenum condition, GLbitfield flags); -void gl4_1core_glProvokingVertex(void *_glfuncs, GLenum mode); -void gl4_1core_glDrawElementsInstancedBaseVertex(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLsizei instancecount, GLint basevertex); -void gl4_1core_glDrawRangeElementsBaseVertex(void *_glfuncs, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum gltype, const GLvoid* indices, GLint basevertex); -void gl4_1core_glDrawElementsBaseVertex(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLint basevertex); -void gl4_1core_glFramebufferTexture(void *_glfuncs, GLenum target, GLenum attachment, GLuint texture, GLint level); -void gl4_1core_glGetBufferParameteri64v(void *_glfuncs, GLenum target, GLenum pname, GLint64* params); -void gl4_1core_glGetInteger64i_v(void *_glfuncs, GLenum target, GLuint index, GLint64* data); -void gl4_1core_glVertexAttribP4uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value); -void gl4_1core_glVertexAttribP4ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value); -void gl4_1core_glVertexAttribP3uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value); -void gl4_1core_glVertexAttribP3ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value); -void gl4_1core_glVertexAttribP2uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value); -void gl4_1core_glVertexAttribP2ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value); -void gl4_1core_glVertexAttribP1uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value); -void gl4_1core_glVertexAttribP1ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value); -void gl4_1core_glSecondaryColorP3uiv(void *_glfuncs, GLenum gltype, const GLuint* color); -void gl4_1core_glSecondaryColorP3ui(void *_glfuncs, GLenum gltype, GLuint color); -void gl4_1core_glColorP4uiv(void *_glfuncs, GLenum gltype, const GLuint* color); -void gl4_1core_glColorP4ui(void *_glfuncs, GLenum gltype, GLuint color); -void gl4_1core_glColorP3uiv(void *_glfuncs, GLenum gltype, const GLuint* color); -void gl4_1core_glColorP3ui(void *_glfuncs, GLenum gltype, GLuint color); -void gl4_1core_glNormalP3uiv(void *_glfuncs, GLenum gltype, const GLuint* coords); -void gl4_1core_glNormalP3ui(void *_glfuncs, GLenum gltype, GLuint coords); -void gl4_1core_glMultiTexCoordP4uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords); -void gl4_1core_glMultiTexCoordP4ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords); -void gl4_1core_glMultiTexCoordP3uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords); -void gl4_1core_glMultiTexCoordP3ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords); -void gl4_1core_glMultiTexCoordP2uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords); -void gl4_1core_glMultiTexCoordP2ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords); -void gl4_1core_glMultiTexCoordP1uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords); -void gl4_1core_glMultiTexCoordP1ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords); -void gl4_1core_glTexCoordP4uiv(void *_glfuncs, GLenum gltype, const GLuint* coords); -void gl4_1core_glTexCoordP4ui(void *_glfuncs, GLenum gltype, GLuint coords); -void gl4_1core_glTexCoordP3uiv(void *_glfuncs, GLenum gltype, const GLuint* coords); -void gl4_1core_glTexCoordP3ui(void *_glfuncs, GLenum gltype, GLuint coords); -void gl4_1core_glTexCoordP2uiv(void *_glfuncs, GLenum gltype, const GLuint* coords); -void gl4_1core_glTexCoordP2ui(void *_glfuncs, GLenum gltype, GLuint coords); -void gl4_1core_glTexCoordP1uiv(void *_glfuncs, GLenum gltype, const GLuint* coords); -void gl4_1core_glTexCoordP1ui(void *_glfuncs, GLenum gltype, GLuint coords); -void gl4_1core_glVertexP4uiv(void *_glfuncs, GLenum gltype, const GLuint* value); -void gl4_1core_glVertexP4ui(void *_glfuncs, GLenum gltype, GLuint value); -void gl4_1core_glVertexP3uiv(void *_glfuncs, GLenum gltype, const GLuint* value); -void gl4_1core_glVertexP3ui(void *_glfuncs, GLenum gltype, GLuint value); -void gl4_1core_glVertexP2uiv(void *_glfuncs, GLenum gltype, const GLuint* value); -void gl4_1core_glVertexP2ui(void *_glfuncs, GLenum gltype, GLuint value); -void gl4_1core_glGetQueryObjectui64v(void *_glfuncs, GLuint id, GLenum pname, GLuint64* params); -void gl4_1core_glGetQueryObjecti64v(void *_glfuncs, GLuint id, GLenum pname, GLint64* params); -void gl4_1core_glQueryCounter(void *_glfuncs, GLuint id, GLenum target); -void gl4_1core_glGetSamplerParameterIuiv(void *_glfuncs, GLuint sampler, GLenum pname, GLuint* params); -void gl4_1core_glGetSamplerParameterfv(void *_glfuncs, GLuint sampler, GLenum pname, GLfloat* params); -void gl4_1core_glGetSamplerParameterIiv(void *_glfuncs, GLuint sampler, GLenum pname, GLint* params); -void gl4_1core_glGetSamplerParameteriv(void *_glfuncs, GLuint sampler, GLenum pname, GLint* params); -void gl4_1core_glSamplerParameterIuiv(void *_glfuncs, GLuint sampler, GLenum pname, const GLuint* param); -void gl4_1core_glSamplerParameterIiv(void *_glfuncs, GLuint sampler, GLenum pname, const GLint* param); -void gl4_1core_glSamplerParameterfv(void *_glfuncs, GLuint sampler, GLenum pname, const GLfloat* param); -void gl4_1core_glSamplerParameterf(void *_glfuncs, GLuint sampler, GLenum pname, GLfloat param); -void gl4_1core_glSamplerParameteriv(void *_glfuncs, GLuint sampler, GLenum pname, const GLint* param); -void gl4_1core_glSamplerParameteri(void *_glfuncs, GLuint sampler, GLenum pname, GLint param); -void gl4_1core_glBindSampler(void *_glfuncs, GLuint unit, GLuint sampler); -GLboolean gl4_1core_glIsSampler(void *_glfuncs, GLuint sampler); -void gl4_1core_glDeleteSamplers(void *_glfuncs, GLsizei count, const GLuint* samplers); -void gl4_1core_glGenSamplers(void *_glfuncs, GLsizei count, GLuint* samplers); -GLint gl4_1core_glGetFragDataIndex(void *_glfuncs, GLuint program, const GLchar* name); -void gl4_1core_glBindFragDataLocationIndexed(void *_glfuncs, GLuint program, GLuint colorNumber, GLuint index, const GLchar* name); -void gl4_1core_glVertexAttribDivisor(void *_glfuncs, GLuint index, GLuint divisor); -void gl4_1core_glGetQueryIndexediv(void *_glfuncs, GLenum target, GLuint index, GLenum pname, GLint* params); -void gl4_1core_glEndQueryIndexed(void *_glfuncs, GLenum target, GLuint index); -void gl4_1core_glBeginQueryIndexed(void *_glfuncs, GLenum target, GLuint index, GLuint id); -void gl4_1core_glDrawTransformFeedbackStream(void *_glfuncs, GLenum mode, GLuint id, GLuint stream); -void gl4_1core_glDrawTransformFeedback(void *_glfuncs, GLenum mode, GLuint id); -void gl4_1core_glResumeTransformFeedback(void *_glfuncs); -void gl4_1core_glPauseTransformFeedback(void *_glfuncs); -GLboolean gl4_1core_glIsTransformFeedback(void *_glfuncs, GLuint id); -void gl4_1core_glGenTransformFeedbacks(void *_glfuncs, GLsizei n, GLuint* ids); -void gl4_1core_glDeleteTransformFeedbacks(void *_glfuncs, GLsizei n, const GLuint* ids); -void gl4_1core_glBindTransformFeedback(void *_glfuncs, GLenum target, GLuint id); -void gl4_1core_glPatchParameterfv(void *_glfuncs, GLenum pname, const GLfloat* values); -void gl4_1core_glPatchParameteri(void *_glfuncs, GLenum pname, GLint value); -void gl4_1core_glGetProgramStageiv(void *_glfuncs, GLuint program, GLenum shadertype, GLenum pname, GLint* values); -void gl4_1core_glGetUniformSubroutineuiv(void *_glfuncs, GLenum shadertype, GLint location, GLuint* params); -void gl4_1core_glUniformSubroutinesuiv(void *_glfuncs, GLenum shadertype, GLsizei count, const GLuint* value); -void gl4_1core_glGetActiveSubroutineName(void *_glfuncs, GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei* length, GLchar* name); -void gl4_1core_glGetActiveSubroutineUniformName(void *_glfuncs, GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei* length, GLchar* name); -void gl4_1core_glGetActiveSubroutineUniformiv(void *_glfuncs, GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint* values); -GLuint gl4_1core_glGetSubroutineIndex(void *_glfuncs, GLuint program, GLenum shadertype, const GLchar* name); -GLint gl4_1core_glGetSubroutineUniformLocation(void *_glfuncs, GLuint program, GLenum shadertype, const GLchar* name); -void gl4_1core_glGetUniformdv(void *_glfuncs, GLuint program, GLint location, GLdouble* params); -void gl4_1core_glUniformMatrix4x3dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_1core_glUniformMatrix4x2dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_1core_glUniformMatrix3x4dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_1core_glUniformMatrix3x2dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_1core_glUniformMatrix2x4dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_1core_glUniformMatrix2x3dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_1core_glUniformMatrix4dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_1core_glUniformMatrix3dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_1core_glUniformMatrix2dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_1core_glUniform4dv(void *_glfuncs, GLint location, GLsizei count, const GLdouble* value); -void gl4_1core_glUniform3dv(void *_glfuncs, GLint location, GLsizei count, const GLdouble* value); -void gl4_1core_glUniform2dv(void *_glfuncs, GLint location, GLsizei count, const GLdouble* value); -void gl4_1core_glUniform1dv(void *_glfuncs, GLint location, GLsizei count, const GLdouble* value); -void gl4_1core_glUniform4d(void *_glfuncs, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3); -void gl4_1core_glUniform3d(void *_glfuncs, GLint location, GLdouble v0, GLdouble v1, GLdouble v2); -void gl4_1core_glUniform2d(void *_glfuncs, GLint location, GLdouble v0, GLdouble v1); -void gl4_1core_glUniform1d(void *_glfuncs, GLint location, GLdouble v0); -void gl4_1core_glDrawElementsIndirect(void *_glfuncs, GLenum mode, GLenum gltype, const GLvoid* indirect); -void gl4_1core_glDrawArraysIndirect(void *_glfuncs, GLenum mode, const GLvoid* indirect); -void gl4_1core_glBlendFuncSeparatei(void *_glfuncs, GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -void gl4_1core_glBlendFunci(void *_glfuncs, GLuint buf, GLenum src, GLenum dst); -void gl4_1core_glBlendEquationSeparatei(void *_glfuncs, GLuint buf, GLenum modeRGB, GLenum modeAlpha); -void gl4_1core_glBlendEquationi(void *_glfuncs, GLuint buf, GLenum mode); -void gl4_1core_glMinSampleShading(void *_glfuncs, GLfloat value); -void gl4_1core_glGetDoublei_v(void *_glfuncs, GLenum target, GLuint index, GLdouble* data); -void gl4_1core_glGetFloati_v(void *_glfuncs, GLenum target, GLuint index, GLfloat* data); -void gl4_1core_glDepthRangeIndexed(void *_glfuncs, GLuint index, GLdouble n, GLdouble f); -void gl4_1core_glDepthRangeArrayv(void *_glfuncs, GLuint first, GLsizei count, const GLdouble* v); -void gl4_1core_glScissorIndexedv(void *_glfuncs, GLuint index, const GLint* v); -void gl4_1core_glScissorIndexed(void *_glfuncs, GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); -void gl4_1core_glScissorArrayv(void *_glfuncs, GLuint first, GLsizei count, const GLint* v); -void gl4_1core_glViewportIndexedfv(void *_glfuncs, GLuint index, const GLfloat* v); -void gl4_1core_glViewportIndexedf(void *_glfuncs, GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); -void gl4_1core_glViewportArrayv(void *_glfuncs, GLuint first, GLsizei count, const GLfloat* v); -void gl4_1core_glGetVertexAttribLdv(void *_glfuncs, GLuint index, GLenum pname, GLdouble* params); -void gl4_1core_glVertexAttribLPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl4_1core_glVertexAttribL4dv(void *_glfuncs, GLuint index, const GLdouble* v); -void gl4_1core_glVertexAttribL3dv(void *_glfuncs, GLuint index, const GLdouble* v); -void gl4_1core_glVertexAttribL2dv(void *_glfuncs, GLuint index, const GLdouble* v); -void gl4_1core_glVertexAttribL1dv(void *_glfuncs, GLuint index, const GLdouble* v); -void gl4_1core_glVertexAttribL4d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -void gl4_1core_glVertexAttribL3d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y, GLdouble z); -void gl4_1core_glVertexAttribL2d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y); -void gl4_1core_glVertexAttribL1d(void *_glfuncs, GLuint index, GLdouble x); -void gl4_1core_glGetProgramPipelineInfoLog(void *_glfuncs, GLuint pipeline, GLsizei bufSize, GLsizei* length, GLchar* infoLog); -void gl4_1core_glValidateProgramPipeline(void *_glfuncs, GLuint pipeline); -void gl4_1core_glProgramUniformMatrix4x3dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_1core_glProgramUniformMatrix3x4dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_1core_glProgramUniformMatrix4x2dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_1core_glProgramUniformMatrix2x4dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_1core_glProgramUniformMatrix3x2dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_1core_glProgramUniformMatrix2x3dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_1core_glProgramUniformMatrix4x3fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_1core_glProgramUniformMatrix3x4fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_1core_glProgramUniformMatrix4x2fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_1core_glProgramUniformMatrix2x4fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_1core_glProgramUniformMatrix3x2fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_1core_glProgramUniformMatrix2x3fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_1core_glProgramUniformMatrix4dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_1core_glProgramUniformMatrix3dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_1core_glProgramUniformMatrix2dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_1core_glProgramUniformMatrix4fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_1core_glProgramUniformMatrix3fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_1core_glProgramUniformMatrix2fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_1core_glProgramUniform4uiv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLuint* value); -void gl4_1core_glProgramUniform4ui(void *_glfuncs, GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -void gl4_1core_glProgramUniform4dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLdouble* value); -void gl4_1core_glProgramUniform4d(void *_glfuncs, GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3); -void gl4_1core_glProgramUniform4fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLfloat* value); -void gl4_1core_glProgramUniform4f(void *_glfuncs, GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -void gl4_1core_glProgramUniform4iv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLint* value); -void gl4_1core_glProgramUniform4i(void *_glfuncs, GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -void gl4_1core_glProgramUniform3uiv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLuint* value); -void gl4_1core_glProgramUniform3ui(void *_glfuncs, GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); -void gl4_1core_glProgramUniform3dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLdouble* value); -void gl4_1core_glProgramUniform3d(void *_glfuncs, GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2); -void gl4_1core_glProgramUniform3fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLfloat* value); -void gl4_1core_glProgramUniform3f(void *_glfuncs, GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -void gl4_1core_glProgramUniform3iv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLint* value); -void gl4_1core_glProgramUniform3i(void *_glfuncs, GLuint program, GLint location, GLint v0, GLint v1, GLint v2); -void gl4_1core_glProgramUniform2uiv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLuint* value); -void gl4_1core_glProgramUniform2ui(void *_glfuncs, GLuint program, GLint location, GLuint v0, GLuint v1); -void gl4_1core_glProgramUniform2dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLdouble* value); -void gl4_1core_glProgramUniform2d(void *_glfuncs, GLuint program, GLint location, GLdouble v0, GLdouble v1); -void gl4_1core_glProgramUniform2fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLfloat* value); -void gl4_1core_glProgramUniform2f(void *_glfuncs, GLuint program, GLint location, GLfloat v0, GLfloat v1); -void gl4_1core_glProgramUniform2iv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLint* value); -void gl4_1core_glProgramUniform2i(void *_glfuncs, GLuint program, GLint location, GLint v0, GLint v1); -void gl4_1core_glProgramUniform1uiv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLuint* value); -void gl4_1core_glProgramUniform1ui(void *_glfuncs, GLuint program, GLint location, GLuint v0); -void gl4_1core_glProgramUniform1dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLdouble* value); -void gl4_1core_glProgramUniform1d(void *_glfuncs, GLuint program, GLint location, GLdouble v0); -void gl4_1core_glProgramUniform1fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLfloat* value); -void gl4_1core_glProgramUniform1f(void *_glfuncs, GLuint program, GLint location, GLfloat v0); -void gl4_1core_glProgramUniform1iv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLint* value); -void gl4_1core_glProgramUniform1i(void *_glfuncs, GLuint program, GLint location, GLint v0); -void gl4_1core_glGetProgramPipelineiv(void *_glfuncs, GLuint pipeline, GLenum pname, GLint* params); -GLboolean gl4_1core_glIsProgramPipeline(void *_glfuncs, GLuint pipeline); -void gl4_1core_glGenProgramPipelines(void *_glfuncs, GLsizei n, GLuint* pipelines); -void gl4_1core_glDeleteProgramPipelines(void *_glfuncs, GLsizei n, const GLuint* pipelines); -void gl4_1core_glBindProgramPipeline(void *_glfuncs, GLuint pipeline); -void gl4_1core_glActiveShaderProgram(void *_glfuncs, GLuint pipeline, GLuint program); -void gl4_1core_glUseProgramStages(void *_glfuncs, GLuint pipeline, GLbitfield stages, GLuint program); -void gl4_1core_glProgramParameteri(void *_glfuncs, GLuint program, GLenum pname, GLint value); -void gl4_1core_glProgramBinary(void *_glfuncs, GLuint program, GLenum binaryFormat, const GLvoid* binary, GLsizei length); -void gl4_1core_glGetProgramBinary(void *_glfuncs, GLuint program, GLsizei bufSize, GLsizei* length, GLenum* binaryFormat, GLvoid* binary); -void gl4_1core_glClearDepthf(void *_glfuncs, GLfloat dd); -void gl4_1core_glDepthRangef(void *_glfuncs, GLfloat n, GLfloat f); -void gl4_1core_glGetShaderPrecisionFormat(void *_glfuncs, GLenum shadertype, GLenum precisionType, GLint* range_, GLint* precision); -void gl4_1core_glShaderBinary(void *_glfuncs, GLsizei count, const GLuint* shaders, GLenum binaryFormat, const GLvoid* binary, GLsizei length); -void gl4_1core_glReleaseShaderCompiler(void *_glfuncs); - - -#ifdef __cplusplus -} // extern "C" -#endif diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.1core/gl.go b/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.1core/gl.go deleted file mode 100644 index e5579001a1..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.1core/gl.go +++ /dev/null @@ -1,6409 +0,0 @@ -// ** file automatically generated by glgen -- do not edit manually ** - -package GL - -// #cgo CXXFLAGS: -std=c++0x -pedantic-errors -Wall -fno-strict-aliasing -// #cgo LDFLAGS: -lstdc++ -// #cgo pkg-config: Qt5Core Qt5OpenGL -// -// #include "funcs.h" -// -// void free(void*); -// -import "C" - -import ( - "fmt" - "reflect" - "unsafe" - - "gopkg.in/qml.v1/gl/glbase" -) - -// API returns a value that offers methods matching the OpenGL version 4.1 API. -// -// The returned API must not be used after the provided OpenGL context becomes invalid. -func API(context glbase.Contexter) *GL { - gl := &GL{} - gl.funcs = C.gl4_1core_funcs() - if gl.funcs == nil { - panic(fmt.Errorf("OpenGL version 4.1 is not available")) - } - return gl -} - -// GL implements the OpenGL version 4.1 API. Values of this -// type must be created via the API function, and it must not be used after -// the associated OpenGL context becomes invalid. -type GL struct { - funcs unsafe.Pointer -} - -const ( - FALSE = 0 - TRUE = 1 - NONE = 0 - - BYTE = 0x1400 - UNSIGNED_BYTE = 0x1401 - SHORT = 0x1402 - UNSIGNED_SHORT = 0x1403 - INT = 0x1404 - UNSIGNED_INT = 0x1405 - FLOAT = 0x1406 - N2_BYTES = 0x1407 - N3_BYTES = 0x1408 - N4_BYTES = 0x1409 - DOUBLE = 0x140A - HALF_FLOAT = 0x140B - FIXED = 0x140C - - ACCUM = 0x0100 - LOAD = 0x0101 - RETURN = 0x0102 - MULT = 0x0103 - ADD = 0x0104 - - ACCUM_BUFFER_BIT = 0x00000200 - ALL_ATTRIB_BITS = 0xFFFFFFFF - COLOR_BUFFER_BIT = 0x00004000 - CURRENT_BIT = 0x00000001 - DEPTH_BUFFER_BIT = 0x00000100 - ENABLE_BIT = 0x00002000 - EVAL_BIT = 0x00010000 - FOG_BIT = 0x00000080 - HINT_BIT = 0x00008000 - LIGHTING_BIT = 0x00000040 - LINE_BIT = 0x00000004 - LIST_BIT = 0x00020000 - MULTISAMPLE_BIT = 0x20000000 - PIXEL_MODE_BIT = 0x00000020 - POINT_BIT = 0x00000002 - POLYGON_BIT = 0x00000008 - POLYGON_STIPPLE_BIT = 0x00000010 - SCISSOR_BIT = 0x00080000 - STENCIL_BUFFER_BIT = 0x00000400 - TEXTURE_BIT = 0x00040000 - TRANSFORM_BIT = 0x00001000 - VIEWPORT_BIT = 0x00000800 - - ALWAYS = 0x0207 - EQUAL = 0x0202 - GEQUAL = 0x0206 - GREATER = 0x0204 - LEQUAL = 0x0203 - LESS = 0x0201 - NEVER = 0x0200 - NOTEQUAL = 0x0205 - - LOGIC_OP = 0x0BF1 - - DST_ALPHA = 0x0304 - ONE = 1 - ONE_MINUS_DST_ALPHA = 0x0305 - ONE_MINUS_SRC_ALPHA = 0x0303 - ONE_MINUS_SRC_COLOR = 0x0301 - SRC_ALPHA = 0x0302 - SRC_COLOR = 0x0300 - ZERO = 0 - - DST_COLOR = 0x0306 - ONE_MINUS_DST_COLOR = 0x0307 - SRC_ALPHA_SATURATE = 0x0308 - - CLIENT_ALL_ATTRIB_BITS = 0xFFFFFFFF - CLIENT_PIXEL_STORE_BIT = 0x00000001 - CLIENT_VERTEX_ARRAY_BIT = 0x00000002 - - CLIP_DISTANCE0 = 0x3000 - CLIP_DISTANCE1 = 0x3001 - CLIP_DISTANCE2 = 0x3002 - CLIP_DISTANCE3 = 0x3003 - CLIP_DISTANCE4 = 0x3004 - CLIP_DISTANCE5 = 0x3005 - CLIP_DISTANCE6 = 0x3006 - CLIP_DISTANCE7 = 0x3007 - CLIP_PLANE0 = 0x3000 - CLIP_PLANE1 = 0x3001 - CLIP_PLANE2 = 0x3002 - CLIP_PLANE3 = 0x3003 - CLIP_PLANE4 = 0x3004 - CLIP_PLANE5 = 0x3005 - - BACK = 0x0405 - FRONT = 0x0404 - FRONT_AND_BACK = 0x0408 - - AMBIENT = 0x1200 - AMBIENT_AND_DIFFUSE = 0x1602 - DIFFUSE = 0x1201 - EMISSION = 0x1600 - SPECULAR = 0x1202 - - CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT = 0x00000001 - - CONTEXT_COMPATIBILITY_PROFILE_BIT = 0x00000002 - CONTEXT_CORE_PROFILE_BIT = 0x00000001 - - AUX0 = 0x0409 - AUX1 = 0x040A - AUX2 = 0x040B - AUX3 = 0x040C - BACK_LEFT = 0x0402 - BACK_RIGHT = 0x0403 - FRONT_LEFT = 0x0400 - FRONT_RIGHT = 0x0401 - LEFT = 0x0406 - RIGHT = 0x0407 - - ALPHA_TEST = 0x0BC0 - AUTO_NORMAL = 0x0D80 - BLEND = 0x0BE2 - COLOR_ARRAY = 0x8076 - COLOR_LOGIC_OP = 0x0BF2 - COLOR_MATERIAL = 0x0B57 - CULL_FACE = 0x0B44 - DEPTH_TEST = 0x0B71 - DITHER = 0x0BD0 - EDGE_FLAG_ARRAY = 0x8079 - FOG = 0x0B60 - INDEX_ARRAY = 0x8077 - INDEX_LOGIC_OP = 0x0BF1 - LIGHT0 = 0x4000 - LIGHT1 = 0x4001 - LIGHT2 = 0x4002 - LIGHT3 = 0x4003 - LIGHT4 = 0x4004 - LIGHT5 = 0x4005 - LIGHT6 = 0x4006 - LIGHT7 = 0x4007 - LIGHTING = 0x0B50 - LINE_SMOOTH = 0x0B20 - LINE_STIPPLE = 0x0B24 - MAP1_COLOR_4 = 0x0D90 - MAP1_INDEX = 0x0D91 - MAP1_NORMAL = 0x0D92 - MAP1_TEXTURE_COORD_1 = 0x0D93 - MAP1_TEXTURE_COORD_2 = 0x0D94 - MAP1_TEXTURE_COORD_3 = 0x0D95 - MAP1_TEXTURE_COORD_4 = 0x0D96 - MAP1_VERTEX_3 = 0x0D97 - MAP1_VERTEX_4 = 0x0D98 - MAP2_COLOR_4 = 0x0DB0 - MAP2_INDEX = 0x0DB1 - MAP2_NORMAL = 0x0DB2 - MAP2_TEXTURE_COORD_1 = 0x0DB3 - MAP2_TEXTURE_COORD_2 = 0x0DB4 - MAP2_TEXTURE_COORD_3 = 0x0DB5 - MAP2_TEXTURE_COORD_4 = 0x0DB6 - MAP2_VERTEX_3 = 0x0DB7 - MAP2_VERTEX_4 = 0x0DB8 - NORMALIZE = 0x0BA1 - NORMAL_ARRAY = 0x8075 - POINT_SMOOTH = 0x0B10 - POLYGON_OFFSET_FILL = 0x8037 - POLYGON_OFFSET_LINE = 0x2A02 - POLYGON_OFFSET_POINT = 0x2A01 - POLYGON_SMOOTH = 0x0B41 - POLYGON_STIPPLE = 0x0B42 - SCISSOR_TEST = 0x0C11 - STENCIL_TEST = 0x0B90 - TEXTURE_1D = 0x0DE0 - TEXTURE_2D = 0x0DE1 - TEXTURE_COORD_ARRAY = 0x8078 - TEXTURE_GEN_Q = 0x0C63 - TEXTURE_GEN_R = 0x0C62 - TEXTURE_GEN_S = 0x0C60 - TEXTURE_GEN_T = 0x0C61 - VERTEX_ARRAY = 0x8074 - - INVALID_ENUM = 0x0500 - INVALID_FRAMEBUFFER_OPERATION = 0x0506 - INVALID_OPERATION = 0x0502 - INVALID_VALUE = 0x0501 - NO_ERROR = 0 - OUT_OF_MEMORY = 0x0505 - STACK_OVERFLOW = 0x0503 - STACK_UNDERFLOW = 0x0504 - - N2D = 0x0600 - N3D = 0x0601 - N3D_COLOR = 0x0602 - N3D_COLOR_TEXTURE = 0x0603 - N4D_COLOR_TEXTURE = 0x0604 - - BITMAP_TOKEN = 0x0704 - COPY_PIXEL_TOKEN = 0x0706 - DRAW_PIXEL_TOKEN = 0x0705 - LINE_RESET_TOKEN = 0x0707 - LINE_TOKEN = 0x0702 - PASS_THROUGH_TOKEN = 0x0700 - POINT_TOKEN = 0x0701 - POLYGON_TOKEN = 0x0703 - - EXP = 0x0800 - EXP2 = 0x0801 - LINEAR = 0x2601 - - FOG_COLOR = 0x0B66 - FOG_DENSITY = 0x0B62 - FOG_END = 0x0B64 - FOG_INDEX = 0x0B61 - FOG_MODE = 0x0B65 - FOG_START = 0x0B63 - - CCW = 0x0901 - CW = 0x0900 - - COEFF = 0x0A00 - DOMAIN = 0x0A02 - ORDER = 0x0A01 - - PIXEL_MAP_A_TO_A = 0x0C79 - PIXEL_MAP_B_TO_B = 0x0C78 - PIXEL_MAP_G_TO_G = 0x0C77 - PIXEL_MAP_I_TO_A = 0x0C75 - PIXEL_MAP_I_TO_B = 0x0C74 - PIXEL_MAP_I_TO_G = 0x0C73 - PIXEL_MAP_I_TO_I = 0x0C70 - PIXEL_MAP_I_TO_R = 0x0C72 - PIXEL_MAP_R_TO_R = 0x0C76 - PIXEL_MAP_S_TO_S = 0x0C71 - - ACCUM_ALPHA_BITS = 0x0D5B - ACCUM_BLUE_BITS = 0x0D5A - ACCUM_CLEAR_VALUE = 0x0B80 - ACCUM_GREEN_BITS = 0x0D59 - ACCUM_RED_BITS = 0x0D58 - ALIASED_LINE_WIDTH_RANGE = 0x846E - ALIASED_POINT_SIZE_RANGE = 0x846D - ALPHA_BIAS = 0x0D1D - ALPHA_BITS = 0x0D55 - ALPHA_SCALE = 0x0D1C - ALPHA_TEST_FUNC = 0x0BC1 - ALPHA_TEST_REF = 0x0BC2 - ATTRIB_STACK_DEPTH = 0x0BB0 - AUX_BUFFERS = 0x0C00 - BLEND_DST = 0x0BE0 - BLEND_SRC = 0x0BE1 - BLUE_BIAS = 0x0D1B - BLUE_BITS = 0x0D54 - BLUE_SCALE = 0x0D1A - CLIENT_ATTRIB_STACK_DEPTH = 0x0BB1 - COLOR_ARRAY_SIZE = 0x8081 - COLOR_ARRAY_STRIDE = 0x8083 - COLOR_ARRAY_TYPE = 0x8082 - COLOR_CLEAR_VALUE = 0x0C22 - COLOR_MATERIAL_FACE = 0x0B55 - COLOR_MATERIAL_PARAMETER = 0x0B56 - COLOR_WRITEMASK = 0x0C23 - CULL_FACE_MODE = 0x0B45 - CURRENT_COLOR = 0x0B00 - CURRENT_INDEX = 0x0B01 - CURRENT_NORMAL = 0x0B02 - CURRENT_RASTER_COLOR = 0x0B04 - CURRENT_RASTER_DISTANCE = 0x0B09 - CURRENT_RASTER_INDEX = 0x0B05 - CURRENT_RASTER_POSITION = 0x0B07 - CURRENT_RASTER_POSITION_VALID = 0x0B08 - CURRENT_RASTER_TEXTURE_COORDS = 0x0B06 - CURRENT_TEXTURE_COORDS = 0x0B03 - DEPTH_BIAS = 0x0D1F - DEPTH_BITS = 0x0D56 - DEPTH_CLEAR_VALUE = 0x0B73 - DEPTH_FUNC = 0x0B74 - DEPTH_RANGE = 0x0B70 - DEPTH_SCALE = 0x0D1E - DEPTH_WRITEMASK = 0x0B72 - DOUBLEBUFFER = 0x0C32 - DRAW_BUFFER = 0x0C01 - EDGE_FLAG = 0x0B43 - EDGE_FLAG_ARRAY_STRIDE = 0x808C - FEEDBACK_BUFFER_SIZE = 0x0DF1 - FEEDBACK_BUFFER_TYPE = 0x0DF2 - FOG_HINT = 0x0C54 - FRONT_FACE = 0x0B46 - GREEN_BIAS = 0x0D19 - GREEN_BITS = 0x0D53 - GREEN_SCALE = 0x0D18 - INDEX_ARRAY_STRIDE = 0x8086 - INDEX_ARRAY_TYPE = 0x8085 - INDEX_BITS = 0x0D51 - INDEX_CLEAR_VALUE = 0x0C20 - INDEX_MODE = 0x0C30 - INDEX_OFFSET = 0x0D13 - INDEX_SHIFT = 0x0D12 - INDEX_WRITEMASK = 0x0C21 - LIGHT_MODEL_AMBIENT = 0x0B53 - LIGHT_MODEL_COLOR_CONTROL = 0x81F8 - LIGHT_MODEL_LOCAL_VIEWER = 0x0B51 - LIGHT_MODEL_TWO_SIDE = 0x0B52 - LINE_SMOOTH_HINT = 0x0C52 - LINE_STIPPLE_PATTERN = 0x0B25 - LINE_STIPPLE_REPEAT = 0x0B26 - LINE_WIDTH = 0x0B21 - LINE_WIDTH_GRANULARITY = 0x0B23 - LINE_WIDTH_RANGE = 0x0B22 - LIST_BASE = 0x0B32 - LIST_INDEX = 0x0B33 - LIST_MODE = 0x0B30 - LOGIC_OP_MODE = 0x0BF0 - MAP1_GRID_DOMAIN = 0x0DD0 - MAP1_GRID_SEGMENTS = 0x0DD1 - MAP2_GRID_DOMAIN = 0x0DD2 - MAP2_GRID_SEGMENTS = 0x0DD3 - MAP_COLOR = 0x0D10 - MAP_STENCIL = 0x0D11 - MATRIX_MODE = 0x0BA0 - MAX_ATTRIB_STACK_DEPTH = 0x0D35 - MAX_CLIENT_ATTRIB_STACK_DEPTH = 0x0D3B - MAX_CLIP_DISTANCES = 0x0D32 - MAX_CLIP_PLANES = 0x0D32 - MAX_EVAL_ORDER = 0x0D30 - MAX_LIGHTS = 0x0D31 - MAX_LIST_NESTING = 0x0B31 - MAX_MODELVIEW_STACK_DEPTH = 0x0D36 - MAX_NAME_STACK_DEPTH = 0x0D37 - MAX_PIXEL_MAP_TABLE = 0x0D34 - MAX_PROJECTION_STACK_DEPTH = 0x0D38 - MAX_TEXTURE_SIZE = 0x0D33 - MAX_TEXTURE_STACK_DEPTH = 0x0D39 - MAX_VIEWPORT_DIMS = 0x0D3A - MODELVIEW_MATRIX = 0x0BA6 - MODELVIEW_STACK_DEPTH = 0x0BA3 - NAME_STACK_DEPTH = 0x0D70 - NORMAL_ARRAY_STRIDE = 0x807F - NORMAL_ARRAY_TYPE = 0x807E - PACK_ALIGNMENT = 0x0D05 - PACK_LSB_FIRST = 0x0D01 - PACK_ROW_LENGTH = 0x0D02 - PACK_SKIP_PIXELS = 0x0D04 - PACK_SKIP_ROWS = 0x0D03 - PACK_SWAP_BYTES = 0x0D00 - PERSPECTIVE_CORRECTION_HINT = 0x0C50 - PIXEL_MAP_A_TO_A_SIZE = 0x0CB9 - PIXEL_MAP_B_TO_B_SIZE = 0x0CB8 - PIXEL_MAP_G_TO_G_SIZE = 0x0CB7 - PIXEL_MAP_I_TO_A_SIZE = 0x0CB5 - PIXEL_MAP_I_TO_B_SIZE = 0x0CB4 - PIXEL_MAP_I_TO_G_SIZE = 0x0CB3 - PIXEL_MAP_I_TO_I_SIZE = 0x0CB0 - PIXEL_MAP_I_TO_R_SIZE = 0x0CB2 - PIXEL_MAP_R_TO_R_SIZE = 0x0CB6 - PIXEL_MAP_S_TO_S_SIZE = 0x0CB1 - POINT_SIZE = 0x0B11 - POINT_SIZE_GRANULARITY = 0x0B13 - POINT_SIZE_RANGE = 0x0B12 - POINT_SMOOTH_HINT = 0x0C51 - POLYGON_MODE = 0x0B40 - POLYGON_OFFSET_FACTOR = 0x8038 - POLYGON_OFFSET_UNITS = 0x2A00 - POLYGON_SMOOTH_HINT = 0x0C53 - PROJECTION_MATRIX = 0x0BA7 - PROJECTION_STACK_DEPTH = 0x0BA4 - READ_BUFFER = 0x0C02 - RED_BIAS = 0x0D15 - RED_BITS = 0x0D52 - RED_SCALE = 0x0D14 - RENDER_MODE = 0x0C40 - RGBA_MODE = 0x0C31 - SCISSOR_BOX = 0x0C10 - SELECTION_BUFFER_SIZE = 0x0DF4 - SHADE_MODEL = 0x0B54 - SMOOTH_LINE_WIDTH_GRANULARITY = 0x0B23 - SMOOTH_LINE_WIDTH_RANGE = 0x0B22 - SMOOTH_POINT_SIZE_GRANULARITY = 0x0B13 - SMOOTH_POINT_SIZE_RANGE = 0x0B12 - STENCIL_BITS = 0x0D57 - STENCIL_CLEAR_VALUE = 0x0B91 - STENCIL_FAIL = 0x0B94 - STENCIL_FUNC = 0x0B92 - STENCIL_PASS_DEPTH_FAIL = 0x0B95 - STENCIL_PASS_DEPTH_PASS = 0x0B96 - STENCIL_REF = 0x0B97 - STENCIL_VALUE_MASK = 0x0B93 - STENCIL_WRITEMASK = 0x0B98 - STEREO = 0x0C33 - SUBPIXEL_BITS = 0x0D50 - TEXTURE_BINDING_1D = 0x8068 - TEXTURE_BINDING_2D = 0x8069 - TEXTURE_BINDING_3D = 0x806A - TEXTURE_COORD_ARRAY_SIZE = 0x8088 - TEXTURE_COORD_ARRAY_STRIDE = 0x808A - TEXTURE_COORD_ARRAY_TYPE = 0x8089 - TEXTURE_MATRIX = 0x0BA8 - TEXTURE_STACK_DEPTH = 0x0BA5 - UNPACK_ALIGNMENT = 0x0CF5 - UNPACK_LSB_FIRST = 0x0CF1 - UNPACK_ROW_LENGTH = 0x0CF2 - UNPACK_SKIP_PIXELS = 0x0CF4 - UNPACK_SKIP_ROWS = 0x0CF3 - UNPACK_SWAP_BYTES = 0x0CF0 - VERTEX_ARRAY_SIZE = 0x807A - VERTEX_ARRAY_STRIDE = 0x807C - VERTEX_ARRAY_TYPE = 0x807B - VIEWPORT = 0x0BA2 - ZOOM_X = 0x0D16 - ZOOM_Y = 0x0D17 - - COLOR_ARRAY_POINTER = 0x8090 - EDGE_FLAG_ARRAY_POINTER = 0x8093 - FEEDBACK_BUFFER_POINTER = 0x0DF0 - INDEX_ARRAY_POINTER = 0x8091 - NORMAL_ARRAY_POINTER = 0x808F - SELECTION_BUFFER_POINTER = 0x0DF3 - TEXTURE_COORD_ARRAY_POINTER = 0x8092 - VERTEX_ARRAY_POINTER = 0x808E - - TEXTURE_ALPHA_SIZE = 0x805F - TEXTURE_BLUE_SIZE = 0x805E - TEXTURE_BORDER = 0x1005 - TEXTURE_BORDER_COLOR = 0x1004 - TEXTURE_COMPONENTS = 0x1003 - TEXTURE_GREEN_SIZE = 0x805D - TEXTURE_HEIGHT = 0x1001 - TEXTURE_INTENSITY_SIZE = 0x8061 - TEXTURE_INTERNAL_FORMAT = 0x1003 - TEXTURE_LUMINANCE_SIZE = 0x8060 - TEXTURE_MAG_FILTER = 0x2800 - TEXTURE_MIN_FILTER = 0x2801 - TEXTURE_PRIORITY = 0x8066 - TEXTURE_RED_SIZE = 0x805C - TEXTURE_RESIDENT = 0x8067 - TEXTURE_WIDTH = 0x1000 - TEXTURE_WRAP_S = 0x2802 - TEXTURE_WRAP_T = 0x2803 - - DONT_CARE = 0x1100 - FASTEST = 0x1101 - NICEST = 0x1102 - - FRAGMENT_SHADER_DERIVATIVE_HINT = 0x8B8B - GENERATE_MIPMAP_HINT = 0x8192 - PROGRAM_BINARY_RETRIEVABLE_HINT = 0x8257 - TEXTURE_COMPRESSION_HINT = 0x84EF - - C3F_V3F = 0x2A24 - C4F_N3F_V3F = 0x2A26 - C4UB_V2F = 0x2A22 - C4UB_V3F = 0x2A23 - N3F_V3F = 0x2A25 - T2F_C3F_V3F = 0x2A2A - T2F_C4F_N3F_V3F = 0x2A2C - T2F_C4UB_V3F = 0x2A29 - T2F_N3F_V3F = 0x2A2B - T2F_V3F = 0x2A27 - T4F_C4F_N3F_V4F = 0x2A2D - T4F_V4F = 0x2A28 - V2F = 0x2A20 - V3F = 0x2A21 - - MODULATE = 0x2100 - REPLACE = 0x1E01 - - SEPARATE_SPECULAR_COLOR = 0x81FA - SINGLE_COLOR = 0x81F9 - - CONSTANT_ATTENUATION = 0x1207 - LINEAR_ATTENUATION = 0x1208 - POSITION = 0x1203 - QUADRATIC_ATTENUATION = 0x1209 - SPOT_CUTOFF = 0x1206 - SPOT_DIRECTION = 0x1204 - SPOT_EXPONENT = 0x1205 - - COMPILE = 0x1300 - COMPILE_AND_EXECUTE = 0x1301 - - AND = 0x1501 - AND_INVERTED = 0x1504 - AND_REVERSE = 0x1502 - CLEAR = 0x1500 - COPY = 0x1503 - COPY_INVERTED = 0x150C - EQUIV = 0x1509 - INVERT = 0x150A - NAND = 0x150E - NOOP = 0x1505 - NOR = 0x1508 - OR = 0x1507 - OR_INVERTED = 0x150D - OR_REVERSE = 0x150B - SET = 0x150F - XOR = 0x1506 - - MAP_FLUSH_EXPLICIT_BIT = 0x0010 - MAP_INVALIDATE_BUFFER_BIT = 0x0008 - MAP_INVALIDATE_RANGE_BIT = 0x0004 - MAP_READ_BIT = 0x0001 - MAP_UNSYNCHRONIZED_BIT = 0x0020 - MAP_WRITE_BIT = 0x0002 - - COLOR_INDEXES = 0x1603 - SHININESS = 0x1601 - - MODELVIEW = 0x1700 - PROJECTION = 0x1701 - TEXTURE = 0x1702 - - LINE = 0x1B01 - POINT = 0x1B00 - - FILL = 0x1B02 - - COLOR = 0x1800 - DEPTH = 0x1801 - STENCIL = 0x1802 - - ALPHA = 0x1906 - BLUE = 0x1905 - COLOR_INDEX = 0x1900 - DEPTH_COMPONENT = 0x1902 - GREEN = 0x1904 - LUMINANCE = 0x1909 - LUMINANCE_ALPHA = 0x190A - RED = 0x1903 - RGB = 0x1907 - RGBA = 0x1908 - STENCIL_INDEX = 0x1901 - - ALPHA12 = 0x803D - ALPHA16 = 0x803E - ALPHA4 = 0x803B - ALPHA8 = 0x803C - INTENSITY = 0x8049 - INTENSITY12 = 0x804C - INTENSITY16 = 0x804D - INTENSITY4 = 0x804A - INTENSITY8 = 0x804B - LUMINANCE12 = 0x8041 - LUMINANCE12_ALPHA12 = 0x8047 - LUMINANCE12_ALPHA4 = 0x8046 - LUMINANCE16 = 0x8042 - LUMINANCE16_ALPHA16 = 0x8048 - LUMINANCE4 = 0x803F - LUMINANCE4_ALPHA4 = 0x8043 - LUMINANCE6_ALPHA2 = 0x8044 - LUMINANCE8 = 0x8040 - LUMINANCE8_ALPHA8 = 0x8045 - R3_G3_B2 = 0x2A10 - RGB10 = 0x8052 - RGB10_A2 = 0x8059 - RGB12 = 0x8053 - RGB16 = 0x8054 - RGB4 = 0x804F - RGB5 = 0x8050 - RGB5_A1 = 0x8057 - RGB8 = 0x8051 - RGBA12 = 0x805A - RGBA16 = 0x805B - RGBA2 = 0x8055 - RGBA4 = 0x8056 - RGBA8 = 0x8058 - - PACK_IMAGE_HEIGHT = 0x806C - PACK_SKIP_IMAGES = 0x806B - UNPACK_IMAGE_HEIGHT = 0x806E - UNPACK_SKIP_IMAGES = 0x806D - - BITMAP = 0x1A00 - UNSIGNED_BYTE_3_3_2 = 0x8032 - UNSIGNED_INT_10_10_10_2 = 0x8036 - UNSIGNED_INT_8_8_8_8 = 0x8035 - UNSIGNED_SHORT_4_4_4_4 = 0x8033 - UNSIGNED_SHORT_5_5_5_1 = 0x8034 - - POINT_DISTANCE_ATTENUATION = 0x8129 - POINT_FADE_THRESHOLD_SIZE = 0x8128 - POINT_SIZE_MAX = 0x8127 - POINT_SIZE_MIN = 0x8126 - - LINES = 0x0001 - LINES_ADJACENCY = 0x000A - LINE_LOOP = 0x0002 - LINE_STRIP = 0x0003 - LINE_STRIP_ADJACENCY = 0x000B - PATCHES = 0x000E - POINTS = 0x0000 - POLYGON = 0x0009 - QUADS = 0x0007 - QUAD_STRIP = 0x0008 - TRIANGLES = 0x0004 - TRIANGLES_ADJACENCY = 0x000C - TRIANGLE_FAN = 0x0006 - TRIANGLE_STRIP = 0x0005 - TRIANGLE_STRIP_ADJACENCY = 0x000D - - FEEDBACK = 0x1C01 - RENDER = 0x1C00 - SELECT = 0x1C02 - - FLAT = 0x1D00 - SMOOTH = 0x1D01 - - DECR = 0x1E03 - INCR = 0x1E02 - KEEP = 0x1E00 - - EXTENSIONS = 0x1F03 - RENDERER = 0x1F01 - VENDOR = 0x1F00 - VERSION = 0x1F02 - - S = 0x2000 - T = 0x2001 - R = 0x2002 - Q = 0x2003 - - DECAL = 0x2101 - - TEXTURE_ENV_COLOR = 0x2201 - TEXTURE_ENV_MODE = 0x2200 - - TEXTURE_ENV = 0x2300 - - EYE_LINEAR = 0x2400 - OBJECT_LINEAR = 0x2401 - SPHERE_MAP = 0x2402 - - EYE_PLANE = 0x2502 - OBJECT_PLANE = 0x2501 - TEXTURE_GEN_MODE = 0x2500 - - NEAREST = 0x2600 - - LINEAR_MIPMAP_LINEAR = 0x2703 - LINEAR_MIPMAP_NEAREST = 0x2701 - NEAREST_MIPMAP_LINEAR = 0x2702 - NEAREST_MIPMAP_NEAREST = 0x2700 - - GENERATE_MIPMAP = 0x8191 - TEXTURE_WRAP_R = 0x8072 - - PROXY_TEXTURE_1D = 0x8063 - PROXY_TEXTURE_2D = 0x8064 - PROXY_TEXTURE_3D = 0x8070 - TEXTURE_3D = 0x806F - TEXTURE_BASE_LEVEL = 0x813C - TEXTURE_MAX_LEVEL = 0x813D - TEXTURE_MAX_LOD = 0x813B - TEXTURE_MIN_LOD = 0x813A - - CLAMP = 0x2900 - CLAMP_TO_BORDER = 0x812D - CLAMP_TO_EDGE = 0x812F - REPEAT = 0x2901 - - VERTEX_SHADER_BIT = 0x00000001 - FRAGMENT_SHADER_BIT = 0x00000002 - GEOMETRY_SHADER_BIT = 0x00000004 - TESS_CONTROL_SHADER_BIT = 0x00000008 - TESS_EVALUATION_SHADER_BIT = 0x00000010 - ALL_SHADER_BITS = 0xFFFFFFFF - - SYNC_FLUSH_COMMANDS_BIT = 0x00000001 - INVALID_INDEX = 0xFFFFFFFF - TIMEOUT_IGNORED = 0xFFFFFFFFFFFFFFFF - CONSTANT_COLOR = 0x8001 - ONE_MINUS_CONSTANT_COLOR = 0x8002 - CONSTANT_ALPHA = 0x8003 - ONE_MINUS_CONSTANT_ALPHA = 0x8004 - FUNC_ADD = 0x8006 - MIN = 0x8007 - MAX = 0x8008 - BLEND_EQUATION_RGB = 0x8009 - FUNC_SUBTRACT = 0x800A - FUNC_REVERSE_SUBTRACT = 0x800B - RESCALE_NORMAL = 0x803A - TEXTURE_DEPTH = 0x8071 - MAX_3D_TEXTURE_SIZE = 0x8073 - MULTISAMPLE = 0x809D - SAMPLE_ALPHA_TO_COVERAGE = 0x809E - SAMPLE_ALPHA_TO_ONE = 0x809F - SAMPLE_COVERAGE = 0x80A0 - SAMPLE_BUFFERS = 0x80A8 - SAMPLES = 0x80A9 - SAMPLE_COVERAGE_VALUE = 0x80AA - SAMPLE_COVERAGE_INVERT = 0x80AB - BLEND_DST_RGB = 0x80C8 - BLEND_SRC_RGB = 0x80C9 - BLEND_DST_ALPHA = 0x80CA - BLEND_SRC_ALPHA = 0x80CB - BGR = 0x80E0 - BGRA = 0x80E1 - MAX_ELEMENTS_VERTICES = 0x80E8 - MAX_ELEMENTS_INDICES = 0x80E9 - DEPTH_COMPONENT16 = 0x81A5 - DEPTH_COMPONENT24 = 0x81A6 - DEPTH_COMPONENT32 = 0x81A7 - FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING = 0x8210 - FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE = 0x8211 - FRAMEBUFFER_ATTACHMENT_RED_SIZE = 0x8212 - FRAMEBUFFER_ATTACHMENT_GREEN_SIZE = 0x8213 - FRAMEBUFFER_ATTACHMENT_BLUE_SIZE = 0x8214 - FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE = 0x8215 - FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE = 0x8216 - FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE = 0x8217 - FRAMEBUFFER_DEFAULT = 0x8218 - FRAMEBUFFER_UNDEFINED = 0x8219 - DEPTH_STENCIL_ATTACHMENT = 0x821A - MAJOR_VERSION = 0x821B - MINOR_VERSION = 0x821C - NUM_EXTENSIONS = 0x821D - CONTEXT_FLAGS = 0x821E - COMPRESSED_RED = 0x8225 - COMPRESSED_RG = 0x8226 - RG = 0x8227 - RG_INTEGER = 0x8228 - R8 = 0x8229 - R16 = 0x822A - RG8 = 0x822B - RG16 = 0x822C - R16F = 0x822D - R32F = 0x822E - RG16F = 0x822F - RG32F = 0x8230 - R8I = 0x8231 - R8UI = 0x8232 - R16I = 0x8233 - R16UI = 0x8234 - R32I = 0x8235 - R32UI = 0x8236 - RG8I = 0x8237 - RG8UI = 0x8238 - RG16I = 0x8239 - RG16UI = 0x823A - RG32I = 0x823B - RG32UI = 0x823C - PROGRAM_SEPARABLE = 0x8258 - ACTIVE_PROGRAM = 0x8259 - PROGRAM_PIPELINE_BINDING = 0x825A - MAX_VIEWPORTS = 0x825B - VIEWPORT_SUBPIXEL_BITS = 0x825C - VIEWPORT_BOUNDS_RANGE = 0x825D - LAYER_PROVOKING_VERTEX = 0x825E - VIEWPORT_INDEX_PROVOKING_VERTEX = 0x825F - UNDEFINED_VERTEX = 0x8260 - UNSIGNED_BYTE_2_3_3_REV = 0x8362 - UNSIGNED_SHORT_5_6_5 = 0x8363 - UNSIGNED_SHORT_5_6_5_REV = 0x8364 - UNSIGNED_SHORT_4_4_4_4_REV = 0x8365 - UNSIGNED_SHORT_1_5_5_5_REV = 0x8366 - UNSIGNED_INT_8_8_8_8_REV = 0x8367 - UNSIGNED_INT_2_10_10_10_REV = 0x8368 - MIRRORED_REPEAT = 0x8370 - FOG_COORDINATE_SOURCE = 0x8450 - FOG_COORD_SRC = 0x8450 - FOG_COORDINATE = 0x8451 - FOG_COORD = 0x8451 - FRAGMENT_DEPTH = 0x8452 - CURRENT_FOG_COORDINATE = 0x8453 - CURRENT_FOG_COORD = 0x8453 - FOG_COORDINATE_ARRAY_TYPE = 0x8454 - FOG_COORD_ARRAY_TYPE = 0x8454 - FOG_COORDINATE_ARRAY_STRIDE = 0x8455 - FOG_COORD_ARRAY_STRIDE = 0x8455 - FOG_COORDINATE_ARRAY_POINTER = 0x8456 - FOG_COORD_ARRAY_POINTER = 0x8456 - FOG_COORDINATE_ARRAY = 0x8457 - FOG_COORD_ARRAY = 0x8457 - COLOR_SUM = 0x8458 - CURRENT_SECONDARY_COLOR = 0x8459 - SECONDARY_COLOR_ARRAY_SIZE = 0x845A - SECONDARY_COLOR_ARRAY_TYPE = 0x845B - SECONDARY_COLOR_ARRAY_STRIDE = 0x845C - SECONDARY_COLOR_ARRAY_POINTER = 0x845D - SECONDARY_COLOR_ARRAY = 0x845E - CURRENT_RASTER_SECONDARY_COLOR = 0x845F - TEXTURE0 = 0x84C0 - TEXTURE1 = 0x84C1 - TEXTURE2 = 0x84C2 - TEXTURE3 = 0x84C3 - TEXTURE4 = 0x84C4 - TEXTURE5 = 0x84C5 - TEXTURE6 = 0x84C6 - TEXTURE7 = 0x84C7 - TEXTURE8 = 0x84C8 - TEXTURE9 = 0x84C9 - TEXTURE10 = 0x84CA - TEXTURE11 = 0x84CB - TEXTURE12 = 0x84CC - TEXTURE13 = 0x84CD - TEXTURE14 = 0x84CE - TEXTURE15 = 0x84CF - TEXTURE16 = 0x84D0 - TEXTURE17 = 0x84D1 - TEXTURE18 = 0x84D2 - TEXTURE19 = 0x84D3 - TEXTURE20 = 0x84D4 - TEXTURE21 = 0x84D5 - TEXTURE22 = 0x84D6 - TEXTURE23 = 0x84D7 - TEXTURE24 = 0x84D8 - TEXTURE25 = 0x84D9 - TEXTURE26 = 0x84DA - TEXTURE27 = 0x84DB - TEXTURE28 = 0x84DC - TEXTURE29 = 0x84DD - TEXTURE30 = 0x84DE - TEXTURE31 = 0x84DF - ACTIVE_TEXTURE = 0x84E0 - CLIENT_ACTIVE_TEXTURE = 0x84E1 - MAX_TEXTURE_UNITS = 0x84E2 - TRANSPOSE_MODELVIEW_MATRIX = 0x84E3 - TRANSPOSE_PROJECTION_MATRIX = 0x84E4 - TRANSPOSE_TEXTURE_MATRIX = 0x84E5 - TRANSPOSE_COLOR_MATRIX = 0x84E6 - SUBTRACT = 0x84E7 - MAX_RENDERBUFFER_SIZE = 0x84E8 - COMPRESSED_ALPHA = 0x84E9 - COMPRESSED_LUMINANCE = 0x84EA - COMPRESSED_LUMINANCE_ALPHA = 0x84EB - COMPRESSED_INTENSITY = 0x84EC - COMPRESSED_RGB = 0x84ED - COMPRESSED_RGBA = 0x84EE - UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER = 0x84F0 - UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER = 0x84F1 - TEXTURE_RECTANGLE = 0x84F5 - TEXTURE_BINDING_RECTANGLE = 0x84F6 - PROXY_TEXTURE_RECTANGLE = 0x84F7 - MAX_RECTANGLE_TEXTURE_SIZE = 0x84F8 - DEPTH_STENCIL = 0x84F9 - UNSIGNED_INT_24_8 = 0x84FA - MAX_TEXTURE_LOD_BIAS = 0x84FD - TEXTURE_FILTER_CONTROL = 0x8500 - TEXTURE_LOD_BIAS = 0x8501 - INCR_WRAP = 0x8507 - DECR_WRAP = 0x8508 - NORMAL_MAP = 0x8511 - REFLECTION_MAP = 0x8512 - TEXTURE_CUBE_MAP = 0x8513 - TEXTURE_BINDING_CUBE_MAP = 0x8514 - TEXTURE_CUBE_MAP_POSITIVE_X = 0x8515 - TEXTURE_CUBE_MAP_NEGATIVE_X = 0x8516 - TEXTURE_CUBE_MAP_POSITIVE_Y = 0x8517 - TEXTURE_CUBE_MAP_NEGATIVE_Y = 0x8518 - TEXTURE_CUBE_MAP_POSITIVE_Z = 0x8519 - TEXTURE_CUBE_MAP_NEGATIVE_Z = 0x851A - PROXY_TEXTURE_CUBE_MAP = 0x851B - MAX_CUBE_MAP_TEXTURE_SIZE = 0x851C - COMBINE = 0x8570 - COMBINE_RGB = 0x8571 - COMBINE_ALPHA = 0x8572 - RGB_SCALE = 0x8573 - ADD_SIGNED = 0x8574 - INTERPOLATE = 0x8575 - CONSTANT = 0x8576 - PRIMARY_COLOR = 0x8577 - PREVIOUS = 0x8578 - SOURCE0_RGB = 0x8580 - SRC0_RGB = 0x8580 - SOURCE1_RGB = 0x8581 - SRC1_RGB = 0x8581 - SOURCE2_RGB = 0x8582 - SRC2_RGB = 0x8582 - SOURCE0_ALPHA = 0x8588 - SRC0_ALPHA = 0x8588 - SOURCE1_ALPHA = 0x8589 - SRC1_ALPHA = 0x8589 - SOURCE2_ALPHA = 0x858A - SRC2_ALPHA = 0x858A - OPERAND0_RGB = 0x8590 - OPERAND1_RGB = 0x8591 - OPERAND2_RGB = 0x8592 - OPERAND0_ALPHA = 0x8598 - OPERAND1_ALPHA = 0x8599 - OPERAND2_ALPHA = 0x859A - VERTEX_ARRAY_BINDING = 0x85B5 - VERTEX_ATTRIB_ARRAY_ENABLED = 0x8622 - VERTEX_ATTRIB_ARRAY_SIZE = 0x8623 - VERTEX_ATTRIB_ARRAY_STRIDE = 0x8624 - VERTEX_ATTRIB_ARRAY_TYPE = 0x8625 - CURRENT_VERTEX_ATTRIB = 0x8626 - VERTEX_PROGRAM_POINT_SIZE = 0x8642 - PROGRAM_POINT_SIZE = 0x8642 - VERTEX_PROGRAM_TWO_SIDE = 0x8643 - VERTEX_ATTRIB_ARRAY_POINTER = 0x8645 - DEPTH_CLAMP = 0x864F - TEXTURE_COMPRESSED_IMAGE_SIZE = 0x86A0 - TEXTURE_COMPRESSED = 0x86A1 - NUM_COMPRESSED_TEXTURE_FORMATS = 0x86A2 - COMPRESSED_TEXTURE_FORMATS = 0x86A3 - DOT3_RGB = 0x86AE - DOT3_RGBA = 0x86AF - PROGRAM_BINARY_LENGTH = 0x8741 - BUFFER_SIZE = 0x8764 - BUFFER_USAGE = 0x8765 - NUM_PROGRAM_BINARY_FORMATS = 0x87FE - PROGRAM_BINARY_FORMATS = 0x87FF - STENCIL_BACK_FUNC = 0x8800 - STENCIL_BACK_FAIL = 0x8801 - STENCIL_BACK_PASS_DEPTH_FAIL = 0x8802 - STENCIL_BACK_PASS_DEPTH_PASS = 0x8803 - RGBA32F = 0x8814 - RGB32F = 0x8815 - RGBA16F = 0x881A - RGB16F = 0x881B - MAX_DRAW_BUFFERS = 0x8824 - DRAW_BUFFER0 = 0x8825 - DRAW_BUFFER1 = 0x8826 - DRAW_BUFFER2 = 0x8827 - DRAW_BUFFER3 = 0x8828 - DRAW_BUFFER4 = 0x8829 - DRAW_BUFFER5 = 0x882A - DRAW_BUFFER6 = 0x882B - DRAW_BUFFER7 = 0x882C - DRAW_BUFFER8 = 0x882D - DRAW_BUFFER9 = 0x882E - DRAW_BUFFER10 = 0x882F - DRAW_BUFFER11 = 0x8830 - DRAW_BUFFER12 = 0x8831 - DRAW_BUFFER13 = 0x8832 - DRAW_BUFFER14 = 0x8833 - DRAW_BUFFER15 = 0x8834 - BLEND_EQUATION_ALPHA = 0x883D - TEXTURE_DEPTH_SIZE = 0x884A - DEPTH_TEXTURE_MODE = 0x884B - TEXTURE_COMPARE_MODE = 0x884C - TEXTURE_COMPARE_FUNC = 0x884D - COMPARE_R_TO_TEXTURE = 0x884E - COMPARE_REF_TO_TEXTURE = 0x884E - TEXTURE_CUBE_MAP_SEAMLESS = 0x884F - POINT_SPRITE = 0x8861 - COORD_REPLACE = 0x8862 - QUERY_COUNTER_BITS = 0x8864 - CURRENT_QUERY = 0x8865 - QUERY_RESULT = 0x8866 - QUERY_RESULT_AVAILABLE = 0x8867 - MAX_VERTEX_ATTRIBS = 0x8869 - VERTEX_ATTRIB_ARRAY_NORMALIZED = 0x886A - MAX_TESS_CONTROL_INPUT_COMPONENTS = 0x886C - MAX_TESS_EVALUATION_INPUT_COMPONENTS = 0x886D - MAX_TEXTURE_COORDS = 0x8871 - MAX_TEXTURE_IMAGE_UNITS = 0x8872 - GEOMETRY_SHADER_INVOCATIONS = 0x887F - ARRAY_BUFFER = 0x8892 - ELEMENT_ARRAY_BUFFER = 0x8893 - ARRAY_BUFFER_BINDING = 0x8894 - ELEMENT_ARRAY_BUFFER_BINDING = 0x8895 - VERTEX_ARRAY_BUFFER_BINDING = 0x8896 - NORMAL_ARRAY_BUFFER_BINDING = 0x8897 - COLOR_ARRAY_BUFFER_BINDING = 0x8898 - INDEX_ARRAY_BUFFER_BINDING = 0x8899 - TEXTURE_COORD_ARRAY_BUFFER_BINDING = 0x889A - EDGE_FLAG_ARRAY_BUFFER_BINDING = 0x889B - SECONDARY_COLOR_ARRAY_BUFFER_BINDING = 0x889C - FOG_COORDINATE_ARRAY_BUFFER_BINDING = 0x889D - FOG_COORD_ARRAY_BUFFER_BINDING = 0x889D - WEIGHT_ARRAY_BUFFER_BINDING = 0x889E - VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = 0x889F - READ_ONLY = 0x88B8 - WRITE_ONLY = 0x88B9 - READ_WRITE = 0x88BA - BUFFER_ACCESS = 0x88BB - BUFFER_MAPPED = 0x88BC - BUFFER_MAP_POINTER = 0x88BD - TIME_ELAPSED = 0x88BF - STREAM_DRAW = 0x88E0 - STREAM_READ = 0x88E1 - STREAM_COPY = 0x88E2 - STATIC_DRAW = 0x88E4 - STATIC_READ = 0x88E5 - STATIC_COPY = 0x88E6 - DYNAMIC_DRAW = 0x88E8 - DYNAMIC_READ = 0x88E9 - DYNAMIC_COPY = 0x88EA - PIXEL_PACK_BUFFER = 0x88EB - PIXEL_UNPACK_BUFFER = 0x88EC - PIXEL_PACK_BUFFER_BINDING = 0x88ED - PIXEL_UNPACK_BUFFER_BINDING = 0x88EF - DEPTH24_STENCIL8 = 0x88F0 - TEXTURE_STENCIL_SIZE = 0x88F1 - SRC1_COLOR = 0x88F9 - ONE_MINUS_SRC1_COLOR = 0x88FA - ONE_MINUS_SRC1_ALPHA = 0x88FB - MAX_DUAL_SOURCE_DRAW_BUFFERS = 0x88FC - VERTEX_ATTRIB_ARRAY_INTEGER = 0x88FD - VERTEX_ATTRIB_ARRAY_DIVISOR = 0x88FE - MAX_ARRAY_TEXTURE_LAYERS = 0x88FF - MIN_PROGRAM_TEXEL_OFFSET = 0x8904 - MAX_PROGRAM_TEXEL_OFFSET = 0x8905 - SAMPLES_PASSED = 0x8914 - GEOMETRY_VERTICES_OUT = 0x8916 - GEOMETRY_INPUT_TYPE = 0x8917 - GEOMETRY_OUTPUT_TYPE = 0x8918 - SAMPLER_BINDING = 0x8919 - CLAMP_VERTEX_COLOR = 0x891A - CLAMP_FRAGMENT_COLOR = 0x891B - CLAMP_READ_COLOR = 0x891C - FIXED_ONLY = 0x891D - UNIFORM_BUFFER = 0x8A11 - UNIFORM_BUFFER_BINDING = 0x8A28 - UNIFORM_BUFFER_START = 0x8A29 - UNIFORM_BUFFER_SIZE = 0x8A2A - MAX_VERTEX_UNIFORM_BLOCKS = 0x8A2B - MAX_GEOMETRY_UNIFORM_BLOCKS = 0x8A2C - MAX_FRAGMENT_UNIFORM_BLOCKS = 0x8A2D - MAX_COMBINED_UNIFORM_BLOCKS = 0x8A2E - MAX_UNIFORM_BUFFER_BINDINGS = 0x8A2F - MAX_UNIFORM_BLOCK_SIZE = 0x8A30 - MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS = 0x8A31 - MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS = 0x8A32 - MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS = 0x8A33 - UNIFORM_BUFFER_OFFSET_ALIGNMENT = 0x8A34 - ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH = 0x8A35 - ACTIVE_UNIFORM_BLOCKS = 0x8A36 - UNIFORM_TYPE = 0x8A37 - UNIFORM_SIZE = 0x8A38 - UNIFORM_NAME_LENGTH = 0x8A39 - UNIFORM_BLOCK_INDEX = 0x8A3A - UNIFORM_OFFSET = 0x8A3B - UNIFORM_ARRAY_STRIDE = 0x8A3C - UNIFORM_MATRIX_STRIDE = 0x8A3D - UNIFORM_IS_ROW_MAJOR = 0x8A3E - UNIFORM_BLOCK_BINDING = 0x8A3F - UNIFORM_BLOCK_DATA_SIZE = 0x8A40 - UNIFORM_BLOCK_NAME_LENGTH = 0x8A41 - UNIFORM_BLOCK_ACTIVE_UNIFORMS = 0x8A42 - UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES = 0x8A43 - UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER = 0x8A44 - UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER = 0x8A45 - UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER = 0x8A46 - FRAGMENT_SHADER = 0x8B30 - VERTEX_SHADER = 0x8B31 - MAX_FRAGMENT_UNIFORM_COMPONENTS = 0x8B49 - MAX_VERTEX_UNIFORM_COMPONENTS = 0x8B4A - MAX_VARYING_FLOATS = 0x8B4B - MAX_VARYING_COMPONENTS = 0x8B4B - MAX_VERTEX_TEXTURE_IMAGE_UNITS = 0x8B4C - MAX_COMBINED_TEXTURE_IMAGE_UNITS = 0x8B4D - SHADER_TYPE = 0x8B4F - FLOAT_VEC2 = 0x8B50 - FLOAT_VEC3 = 0x8B51 - FLOAT_VEC4 = 0x8B52 - INT_VEC2 = 0x8B53 - INT_VEC3 = 0x8B54 - INT_VEC4 = 0x8B55 - BOOL = 0x8B56 - BOOL_VEC2 = 0x8B57 - BOOL_VEC3 = 0x8B58 - BOOL_VEC4 = 0x8B59 - FLOAT_MAT2 = 0x8B5A - FLOAT_MAT3 = 0x8B5B - FLOAT_MAT4 = 0x8B5C - SAMPLER_1D = 0x8B5D - SAMPLER_2D = 0x8B5E - SAMPLER_3D = 0x8B5F - SAMPLER_CUBE = 0x8B60 - SAMPLER_1D_SHADOW = 0x8B61 - SAMPLER_2D_SHADOW = 0x8B62 - SAMPLER_2D_RECT = 0x8B63 - SAMPLER_2D_RECT_SHADOW = 0x8B64 - FLOAT_MAT2x3 = 0x8B65 - FLOAT_MAT2x4 = 0x8B66 - FLOAT_MAT3x2 = 0x8B67 - FLOAT_MAT3x4 = 0x8B68 - FLOAT_MAT4x2 = 0x8B69 - FLOAT_MAT4x3 = 0x8B6A - DELETE_STATUS = 0x8B80 - COMPILE_STATUS = 0x8B81 - LINK_STATUS = 0x8B82 - VALIDATE_STATUS = 0x8B83 - INFO_LOG_LENGTH = 0x8B84 - ATTACHED_SHADERS = 0x8B85 - ACTIVE_UNIFORMS = 0x8B86 - ACTIVE_UNIFORM_MAX_LENGTH = 0x8B87 - SHADER_SOURCE_LENGTH = 0x8B88 - ACTIVE_ATTRIBUTES = 0x8B89 - ACTIVE_ATTRIBUTE_MAX_LENGTH = 0x8B8A - SHADING_LANGUAGE_VERSION = 0x8B8C - CURRENT_PROGRAM = 0x8B8D - IMPLEMENTATION_COLOR_READ_TYPE = 0x8B9A - IMPLEMENTATION_COLOR_READ_FORMAT = 0x8B9B - TEXTURE_RED_TYPE = 0x8C10 - TEXTURE_GREEN_TYPE = 0x8C11 - TEXTURE_BLUE_TYPE = 0x8C12 - TEXTURE_ALPHA_TYPE = 0x8C13 - TEXTURE_DEPTH_TYPE = 0x8C16 - UNSIGNED_NORMALIZED = 0x8C17 - TEXTURE_1D_ARRAY = 0x8C18 - PROXY_TEXTURE_1D_ARRAY = 0x8C19 - TEXTURE_2D_ARRAY = 0x8C1A - PROXY_TEXTURE_2D_ARRAY = 0x8C1B - TEXTURE_BINDING_1D_ARRAY = 0x8C1C - TEXTURE_BINDING_2D_ARRAY = 0x8C1D - MAX_GEOMETRY_TEXTURE_IMAGE_UNITS = 0x8C29 - TEXTURE_BUFFER = 0x8C2A - MAX_TEXTURE_BUFFER_SIZE = 0x8C2B - TEXTURE_BINDING_BUFFER = 0x8C2C - TEXTURE_BUFFER_DATA_STORE_BINDING = 0x8C2D - ANY_SAMPLES_PASSED = 0x8C2F - SAMPLE_SHADING = 0x8C36 - MIN_SAMPLE_SHADING_VALUE = 0x8C37 - R11F_G11F_B10F = 0x8C3A - UNSIGNED_INT_10F_11F_11F_REV = 0x8C3B - RGB9_E5 = 0x8C3D - UNSIGNED_INT_5_9_9_9_REV = 0x8C3E - TEXTURE_SHARED_SIZE = 0x8C3F - SRGB = 0x8C40 - SRGB8 = 0x8C41 - SRGB_ALPHA = 0x8C42 - SRGB8_ALPHA8 = 0x8C43 - SLUMINANCE_ALPHA = 0x8C44 - SLUMINANCE8_ALPHA8 = 0x8C45 - SLUMINANCE = 0x8C46 - SLUMINANCE8 = 0x8C47 - COMPRESSED_SRGB = 0x8C48 - COMPRESSED_SRGB_ALPHA = 0x8C49 - COMPRESSED_SLUMINANCE = 0x8C4A - COMPRESSED_SLUMINANCE_ALPHA = 0x8C4B - TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH = 0x8C76 - TRANSFORM_FEEDBACK_BUFFER_MODE = 0x8C7F - MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS = 0x8C80 - TRANSFORM_FEEDBACK_VARYINGS = 0x8C83 - TRANSFORM_FEEDBACK_BUFFER_START = 0x8C84 - TRANSFORM_FEEDBACK_BUFFER_SIZE = 0x8C85 - PRIMITIVES_GENERATED = 0x8C87 - TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN = 0x8C88 - RASTERIZER_DISCARD = 0x8C89 - MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS = 0x8C8A - MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS = 0x8C8B - INTERLEAVED_ATTRIBS = 0x8C8C - SEPARATE_ATTRIBS = 0x8C8D - TRANSFORM_FEEDBACK_BUFFER = 0x8C8E - TRANSFORM_FEEDBACK_BUFFER_BINDING = 0x8C8F - POINT_SPRITE_COORD_ORIGIN = 0x8CA0 - LOWER_LEFT = 0x8CA1 - UPPER_LEFT = 0x8CA2 - STENCIL_BACK_REF = 0x8CA3 - STENCIL_BACK_VALUE_MASK = 0x8CA4 - STENCIL_BACK_WRITEMASK = 0x8CA5 - DRAW_FRAMEBUFFER_BINDING = 0x8CA6 - FRAMEBUFFER_BINDING = 0x8CA6 - RENDERBUFFER_BINDING = 0x8CA7 - READ_FRAMEBUFFER = 0x8CA8 - DRAW_FRAMEBUFFER = 0x8CA9 - READ_FRAMEBUFFER_BINDING = 0x8CAA - RENDERBUFFER_SAMPLES = 0x8CAB - DEPTH_COMPONENT32F = 0x8CAC - DEPTH32F_STENCIL8 = 0x8CAD - FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE = 0x8CD0 - FRAMEBUFFER_ATTACHMENT_OBJECT_NAME = 0x8CD1 - FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL = 0x8CD2 - FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE = 0x8CD3 - FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER = 0x8CD4 - FRAMEBUFFER_COMPLETE = 0x8CD5 - FRAMEBUFFER_INCOMPLETE_ATTACHMENT = 0x8CD6 - FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = 0x8CD7 - FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER = 0x8CDB - FRAMEBUFFER_INCOMPLETE_READ_BUFFER = 0x8CDC - FRAMEBUFFER_UNSUPPORTED = 0x8CDD - MAX_COLOR_ATTACHMENTS = 0x8CDF - COLOR_ATTACHMENT0 = 0x8CE0 - COLOR_ATTACHMENT1 = 0x8CE1 - COLOR_ATTACHMENT2 = 0x8CE2 - COLOR_ATTACHMENT3 = 0x8CE3 - COLOR_ATTACHMENT4 = 0x8CE4 - COLOR_ATTACHMENT5 = 0x8CE5 - COLOR_ATTACHMENT6 = 0x8CE6 - COLOR_ATTACHMENT7 = 0x8CE7 - COLOR_ATTACHMENT8 = 0x8CE8 - COLOR_ATTACHMENT9 = 0x8CE9 - COLOR_ATTACHMENT10 = 0x8CEA - COLOR_ATTACHMENT11 = 0x8CEB - COLOR_ATTACHMENT12 = 0x8CEC - COLOR_ATTACHMENT13 = 0x8CED - COLOR_ATTACHMENT14 = 0x8CEE - COLOR_ATTACHMENT15 = 0x8CEF - DEPTH_ATTACHMENT = 0x8D00 - STENCIL_ATTACHMENT = 0x8D20 - FRAMEBUFFER = 0x8D40 - RENDERBUFFER = 0x8D41 - RENDERBUFFER_WIDTH = 0x8D42 - RENDERBUFFER_HEIGHT = 0x8D43 - RENDERBUFFER_INTERNAL_FORMAT = 0x8D44 - STENCIL_INDEX1 = 0x8D46 - STENCIL_INDEX4 = 0x8D47 - STENCIL_INDEX8 = 0x8D48 - STENCIL_INDEX16 = 0x8D49 - RENDERBUFFER_RED_SIZE = 0x8D50 - RENDERBUFFER_GREEN_SIZE = 0x8D51 - RENDERBUFFER_BLUE_SIZE = 0x8D52 - RENDERBUFFER_ALPHA_SIZE = 0x8D53 - RENDERBUFFER_DEPTH_SIZE = 0x8D54 - RENDERBUFFER_STENCIL_SIZE = 0x8D55 - FRAMEBUFFER_INCOMPLETE_MULTISAMPLE = 0x8D56 - MAX_SAMPLES = 0x8D57 - RGB565 = 0x8D62 - RGBA32UI = 0x8D70 - RGB32UI = 0x8D71 - RGBA16UI = 0x8D76 - RGB16UI = 0x8D77 - RGBA8UI = 0x8D7C - RGB8UI = 0x8D7D - RGBA32I = 0x8D82 - RGB32I = 0x8D83 - RGBA16I = 0x8D88 - RGB16I = 0x8D89 - RGBA8I = 0x8D8E - RGB8I = 0x8D8F - RED_INTEGER = 0x8D94 - GREEN_INTEGER = 0x8D95 - BLUE_INTEGER = 0x8D96 - ALPHA_INTEGER = 0x8D97 - RGB_INTEGER = 0x8D98 - RGBA_INTEGER = 0x8D99 - BGR_INTEGER = 0x8D9A - BGRA_INTEGER = 0x8D9B - INT_2_10_10_10_REV = 0x8D9F - FRAMEBUFFER_ATTACHMENT_LAYERED = 0x8DA7 - FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS = 0x8DA8 - FLOAT_32_UNSIGNED_INT_24_8_REV = 0x8DAD - FRAMEBUFFER_SRGB = 0x8DB9 - COMPRESSED_RED_RGTC1 = 0x8DBB - COMPRESSED_SIGNED_RED_RGTC1 = 0x8DBC - COMPRESSED_RG_RGTC2 = 0x8DBD - COMPRESSED_SIGNED_RG_RGTC2 = 0x8DBE - SAMPLER_1D_ARRAY = 0x8DC0 - SAMPLER_2D_ARRAY = 0x8DC1 - SAMPLER_BUFFER = 0x8DC2 - SAMPLER_1D_ARRAY_SHADOW = 0x8DC3 - SAMPLER_2D_ARRAY_SHADOW = 0x8DC4 - SAMPLER_CUBE_SHADOW = 0x8DC5 - UNSIGNED_INT_VEC2 = 0x8DC6 - UNSIGNED_INT_VEC3 = 0x8DC7 - UNSIGNED_INT_VEC4 = 0x8DC8 - INT_SAMPLER_1D = 0x8DC9 - INT_SAMPLER_2D = 0x8DCA - INT_SAMPLER_3D = 0x8DCB - INT_SAMPLER_CUBE = 0x8DCC - INT_SAMPLER_2D_RECT = 0x8DCD - INT_SAMPLER_1D_ARRAY = 0x8DCE - INT_SAMPLER_2D_ARRAY = 0x8DCF - INT_SAMPLER_BUFFER = 0x8DD0 - UNSIGNED_INT_SAMPLER_1D = 0x8DD1 - UNSIGNED_INT_SAMPLER_2D = 0x8DD2 - UNSIGNED_INT_SAMPLER_3D = 0x8DD3 - UNSIGNED_INT_SAMPLER_CUBE = 0x8DD4 - UNSIGNED_INT_SAMPLER_2D_RECT = 0x8DD5 - UNSIGNED_INT_SAMPLER_1D_ARRAY = 0x8DD6 - UNSIGNED_INT_SAMPLER_2D_ARRAY = 0x8DD7 - UNSIGNED_INT_SAMPLER_BUFFER = 0x8DD8 - GEOMETRY_SHADER = 0x8DD9 - MAX_GEOMETRY_UNIFORM_COMPONENTS = 0x8DDF - MAX_GEOMETRY_OUTPUT_VERTICES = 0x8DE0 - MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS = 0x8DE1 - ACTIVE_SUBROUTINES = 0x8DE5 - ACTIVE_SUBROUTINE_UNIFORMS = 0x8DE6 - MAX_SUBROUTINES = 0x8DE7 - MAX_SUBROUTINE_UNIFORM_LOCATIONS = 0x8DE8 - LOW_FLOAT = 0x8DF0 - MEDIUM_FLOAT = 0x8DF1 - HIGH_FLOAT = 0x8DF2 - LOW_INT = 0x8DF3 - MEDIUM_INT = 0x8DF4 - HIGH_INT = 0x8DF5 - SHADER_BINARY_FORMATS = 0x8DF8 - NUM_SHADER_BINARY_FORMATS = 0x8DF9 - SHADER_COMPILER = 0x8DFA - MAX_VERTEX_UNIFORM_VECTORS = 0x8DFB - MAX_VARYING_VECTORS = 0x8DFC - MAX_FRAGMENT_UNIFORM_VECTORS = 0x8DFD - QUERY_WAIT = 0x8E13 - QUERY_NO_WAIT = 0x8E14 - QUERY_BY_REGION_WAIT = 0x8E15 - QUERY_BY_REGION_NO_WAIT = 0x8E16 - MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS = 0x8E1E - MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS = 0x8E1F - TRANSFORM_FEEDBACK = 0x8E22 - TRANSFORM_FEEDBACK_BUFFER_PAUSED = 0x8E23 - TRANSFORM_FEEDBACK_BUFFER_ACTIVE = 0x8E24 - TRANSFORM_FEEDBACK_BINDING = 0x8E25 - TIMESTAMP = 0x8E28 - TEXTURE_SWIZZLE_R = 0x8E42 - TEXTURE_SWIZZLE_G = 0x8E43 - TEXTURE_SWIZZLE_B = 0x8E44 - TEXTURE_SWIZZLE_A = 0x8E45 - TEXTURE_SWIZZLE_RGBA = 0x8E46 - ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS = 0x8E47 - ACTIVE_SUBROUTINE_MAX_LENGTH = 0x8E48 - ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH = 0x8E49 - NUM_COMPATIBLE_SUBROUTINES = 0x8E4A - COMPATIBLE_SUBROUTINES = 0x8E4B - QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION = 0x8E4C - FIRST_VERTEX_CONVENTION = 0x8E4D - LAST_VERTEX_CONVENTION = 0x8E4E - PROVOKING_VERTEX = 0x8E4F - SAMPLE_POSITION = 0x8E50 - SAMPLE_MASK = 0x8E51 - SAMPLE_MASK_VALUE = 0x8E52 - MAX_SAMPLE_MASK_WORDS = 0x8E59 - MAX_GEOMETRY_SHADER_INVOCATIONS = 0x8E5A - MIN_FRAGMENT_INTERPOLATION_OFFSET = 0x8E5B - MAX_FRAGMENT_INTERPOLATION_OFFSET = 0x8E5C - FRAGMENT_INTERPOLATION_OFFSET_BITS = 0x8E5D - MIN_PROGRAM_TEXTURE_GATHER_OFFSET = 0x8E5E - MAX_PROGRAM_TEXTURE_GATHER_OFFSET = 0x8E5F - MAX_TRANSFORM_FEEDBACK_BUFFERS = 0x8E70 - MAX_VERTEX_STREAMS = 0x8E71 - PATCH_VERTICES = 0x8E72 - PATCH_DEFAULT_INNER_LEVEL = 0x8E73 - PATCH_DEFAULT_OUTER_LEVEL = 0x8E74 - TESS_CONTROL_OUTPUT_VERTICES = 0x8E75 - TESS_GEN_MODE = 0x8E76 - TESS_GEN_SPACING = 0x8E77 - TESS_GEN_VERTEX_ORDER = 0x8E78 - TESS_GEN_POINT_MODE = 0x8E79 - ISOLINES = 0x8E7A - FRACTIONAL_ODD = 0x8E7B - FRACTIONAL_EVEN = 0x8E7C - MAX_PATCH_VERTICES = 0x8E7D - MAX_TESS_GEN_LEVEL = 0x8E7E - MAX_TESS_CONTROL_UNIFORM_COMPONENTS = 0x8E7F - MAX_TESS_EVALUATION_UNIFORM_COMPONENTS = 0x8E80 - MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS = 0x8E81 - MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS = 0x8E82 - MAX_TESS_CONTROL_OUTPUT_COMPONENTS = 0x8E83 - MAX_TESS_PATCH_COMPONENTS = 0x8E84 - MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS = 0x8E85 - MAX_TESS_EVALUATION_OUTPUT_COMPONENTS = 0x8E86 - TESS_EVALUATION_SHADER = 0x8E87 - TESS_CONTROL_SHADER = 0x8E88 - MAX_TESS_CONTROL_UNIFORM_BLOCKS = 0x8E89 - MAX_TESS_EVALUATION_UNIFORM_BLOCKS = 0x8E8A - COPY_READ_BUFFER = 0x8F36 - COPY_WRITE_BUFFER = 0x8F37 - DRAW_INDIRECT_BUFFER = 0x8F3F - DRAW_INDIRECT_BUFFER_BINDING = 0x8F43 - DOUBLE_MAT2 = 0x8F46 - DOUBLE_MAT3 = 0x8F47 - DOUBLE_MAT4 = 0x8F48 - DOUBLE_MAT2x3 = 0x8F49 - DOUBLE_MAT2x4 = 0x8F4A - DOUBLE_MAT3x2 = 0x8F4B - DOUBLE_MAT3x4 = 0x8F4C - DOUBLE_MAT4x2 = 0x8F4D - DOUBLE_MAT4x3 = 0x8F4E - R8_SNORM = 0x8F94 - RG8_SNORM = 0x8F95 - RGB8_SNORM = 0x8F96 - RGBA8_SNORM = 0x8F97 - R16_SNORM = 0x8F98 - RG16_SNORM = 0x8F99 - RGB16_SNORM = 0x8F9A - RGBA16_SNORM = 0x8F9B - SIGNED_NORMALIZED = 0x8F9C - PRIMITIVE_RESTART = 0x8F9D - PRIMITIVE_RESTART_INDEX = 0x8F9E - DOUBLE_VEC2 = 0x8FFC - DOUBLE_VEC3 = 0x8FFD - DOUBLE_VEC4 = 0x8FFE - TEXTURE_CUBE_MAP_ARRAY = 0x9009 - TEXTURE_BINDING_CUBE_MAP_ARRAY = 0x900A - PROXY_TEXTURE_CUBE_MAP_ARRAY = 0x900B - SAMPLER_CUBE_MAP_ARRAY = 0x900C - SAMPLER_CUBE_MAP_ARRAY_SHADOW = 0x900D - INT_SAMPLER_CUBE_MAP_ARRAY = 0x900E - UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY = 0x900F - RGB10_A2UI = 0x906F - TEXTURE_2D_MULTISAMPLE = 0x9100 - PROXY_TEXTURE_2D_MULTISAMPLE = 0x9101 - TEXTURE_2D_MULTISAMPLE_ARRAY = 0x9102 - PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY = 0x9103 - TEXTURE_BINDING_2D_MULTISAMPLE = 0x9104 - TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY = 0x9105 - TEXTURE_SAMPLES = 0x9106 - TEXTURE_FIXED_SAMPLE_LOCATIONS = 0x9107 - SAMPLER_2D_MULTISAMPLE = 0x9108 - INT_SAMPLER_2D_MULTISAMPLE = 0x9109 - UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE = 0x910A - SAMPLER_2D_MULTISAMPLE_ARRAY = 0x910B - INT_SAMPLER_2D_MULTISAMPLE_ARRAY = 0x910C - UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY = 0x910D - MAX_COLOR_TEXTURE_SAMPLES = 0x910E - MAX_DEPTH_TEXTURE_SAMPLES = 0x910F - MAX_INTEGER_SAMPLES = 0x9110 - MAX_SERVER_WAIT_TIMEOUT = 0x9111 - OBJECT_TYPE = 0x9112 - SYNC_CONDITION = 0x9113 - SYNC_STATUS = 0x9114 - SYNC_FLAGS = 0x9115 - SYNC_FENCE = 0x9116 - SYNC_GPU_COMMANDS_COMPLETE = 0x9117 - UNSIGNALED = 0x9118 - SIGNALED = 0x9119 - ALREADY_SIGNALED = 0x911A - TIMEOUT_EXPIRED = 0x911B - CONDITION_SATISFIED = 0x911C - WAIT_FAILED = 0x911D - BUFFER_ACCESS_FLAGS = 0x911F - BUFFER_MAP_LENGTH = 0x9120 - BUFFER_MAP_OFFSET = 0x9121 - MAX_VERTEX_OUTPUT_COMPONENTS = 0x9122 - MAX_GEOMETRY_INPUT_COMPONENTS = 0x9123 - MAX_GEOMETRY_OUTPUT_COMPONENTS = 0x9124 - MAX_FRAGMENT_INPUT_COMPONENTS = 0x9125 - CONTEXT_PROFILE_MASK = 0x9126 -) - -// https://www.opengl.org/sdk/docs/man4/xhtml/glViewport.xml -func (gl *GL) Viewport(x, y, width, height int) { - C.gl4_1core_glViewport(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// DepthRange specifies the mapping of depth values from normalized device -// coordinates to window coordinates. -// -// Parameter nearVal specifies the mapping of the near clipping plane to window -// coordinates (defaults to 0), while farVal specifies the mapping of the far -// clipping plane to window coordinates (defaults to 1). -// -// After clipping and division by w, depth coordinates range from -1 to 1, -// corresponding to the near and far clipping planes. DepthRange specifies a -// linear mapping of the normalized depth coordinates in this range to window -// depth coordinates. Regardless of the actual depth buffer implementation, -// window coordinate depth values are treated as though they range from 0 through 1 -// (like color components). Thus, the values accepted by DepthRange are both -// clamped to this range before they are accepted. -// -// The default setting of (0, 1) maps the near plane to 0 and the far plane to 1. -// With this mapping, the depth buffer range is fully utilized. -// -// It is not necessary that nearVal be less than farVal. Reverse mappings such as -// nearVal 1, and farVal 0 are acceptable. -// -// GL.INVALID_OPERATION is generated if DepthRange is executed between the -// execution of Begin and the corresponding execution of End. -func (gl *GL) DepthRange(nearVal, farVal float64) { - C.gl4_1core_glDepthRange(gl.funcs, C.GLdouble(nearVal), C.GLdouble(farVal)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsEnabled.xml -func (gl *GL) IsEnabled(cap glbase.Enum) bool { - glresult := C.gl4_1core_glIsEnabled(gl.funcs, C.GLenum(cap)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexLevelParameteriv.xml -func (gl *GL) GetTexLevelParameteriv(target glbase.Enum, level int, pname glbase.Enum, params []int32) { - C.gl4_1core_glGetTexLevelParameteriv(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexLevelParameterfv.xml -func (gl *GL) GetTexLevelParameterfv(target glbase.Enum, level int, pname glbase.Enum, params []float32) { - C.gl4_1core_glGetTexLevelParameterfv(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexParameteriv.xml -func (gl *GL) GetTexParameteriv(target, pname glbase.Enum, params []int32) { - C.gl4_1core_glGetTexParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexParameterfv.xml -func (gl *GL) GetTexParameterfv(target, pname glbase.Enum, params []float32) { - C.gl4_1core_glGetTexParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexImage.xml -func (gl *GL) GetTexImage(target glbase.Enum, level int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_1core_glGetTexImage(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetIntegerv.xml -func (gl *GL) GetIntegerv(pname glbase.Enum, params []int32) { - C.gl4_1core_glGetIntegerv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetFloatv.xml -func (gl *GL) GetFloatv(pname glbase.Enum, params []float32) { - C.gl4_1core_glGetFloatv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetError.xml -func (gl *GL) GetError() glbase.Enum { - glresult := C.gl4_1core_glGetError(gl.funcs) - return glbase.Enum(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetDoublev.xml -func (gl *GL) GetDoublev(pname glbase.Enum, params []float64) { - C.gl4_1core_glGetDoublev(gl.funcs, C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetBooleanv.xml -func (gl *GL) GetBooleanv(pname glbase.Enum, params []bool) { - C.gl4_1core_glGetBooleanv(gl.funcs, C.GLenum(pname), (*C.GLboolean)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glReadPixels.xml -func (gl *GL) ReadPixels(x, y, width, height int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_1core_glReadPixels(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glReadBuffer.xml -func (gl *GL) ReadBuffer(mode glbase.Enum) { - C.gl4_1core_glReadBuffer(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPixelStorei.xml -func (gl *GL) PixelStorei(pname glbase.Enum, param int32) { - C.gl4_1core_glPixelStorei(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPixelStoref.xml -func (gl *GL) PixelStoref(pname glbase.Enum, param float32) { - C.gl4_1core_glPixelStoref(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDepthFunc.xml -func (gl *GL) DepthFunc(glfunc glbase.Enum) { - C.gl4_1core_glDepthFunc(gl.funcs, C.GLenum(glfunc)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glStencilOp.xml -func (gl *GL) StencilOp(fail, zfail, zpass glbase.Enum) { - C.gl4_1core_glStencilOp(gl.funcs, C.GLenum(fail), C.GLenum(zfail), C.GLenum(zpass)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glStencilFunc.xml -func (gl *GL) StencilFunc(glfunc glbase.Enum, ref int32, mask uint32) { - C.gl4_1core_glStencilFunc(gl.funcs, C.GLenum(glfunc), C.GLint(ref), C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLogicOp.xml -func (gl *GL) LogicOp(opcode glbase.Enum) { - C.gl4_1core_glLogicOp(gl.funcs, C.GLenum(opcode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendFunc.xml -func (gl *GL) BlendFunc(sfactor, dfactor glbase.Enum) { - C.gl4_1core_glBlendFunc(gl.funcs, C.GLenum(sfactor), C.GLenum(dfactor)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFlush.xml -func (gl *GL) Flush() { - C.gl4_1core_glFlush(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFinish.xml -func (gl *GL) Finish() { - C.gl4_1core_glFinish(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEnable.xml -func (gl *GL) Enable(cap glbase.Enum) { - C.gl4_1core_glEnable(gl.funcs, C.GLenum(cap)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDisable.xml -func (gl *GL) Disable(cap glbase.Enum) { - C.gl4_1core_glDisable(gl.funcs, C.GLenum(cap)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDepthMask.xml -func (gl *GL) DepthMask(flag bool) { - C.gl4_1core_glDepthMask(gl.funcs, *(*C.GLboolean)(unsafe.Pointer(&flag))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorMask.xml -func (gl *GL) ColorMask(red, green, blue, alpha bool) { - C.gl4_1core_glColorMask(gl.funcs, *(*C.GLboolean)(unsafe.Pointer(&red)), *(*C.GLboolean)(unsafe.Pointer(&green)), *(*C.GLboolean)(unsafe.Pointer(&blue)), *(*C.GLboolean)(unsafe.Pointer(&alpha))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glStencilMask.xml -func (gl *GL) StencilMask(mask uint32) { - C.gl4_1core_glStencilMask(gl.funcs, C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearDepth.xml -func (gl *GL) ClearDepth(depth float64) { - C.gl4_1core_glClearDepth(gl.funcs, C.GLdouble(depth)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearStencil.xml -func (gl *GL) ClearStencil(s int32) { - C.gl4_1core_glClearStencil(gl.funcs, C.GLint(s)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearColor.xml -func (gl *GL) ClearColor(red, green, blue, alpha float32) { - C.gl4_1core_glClearColor(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClear.xml -func (gl *GL) Clear(mask glbase.Bitfield) { - C.gl4_1core_glClear(gl.funcs, C.GLbitfield(mask)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawBuffer.xml -func (gl *GL) DrawBuffer(mode glbase.Enum) { - C.gl4_1core_glDrawBuffer(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexImage2D.xml -func (gl *GL) TexImage2D(target glbase.Enum, level int, internalFormat int32, width, height, border int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_1core_glTexImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLint(border), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexImage1D.xml -func (gl *GL) TexImage1D(target glbase.Enum, level int, internalFormat int32, width, border int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_1core_glTexImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(internalFormat), C.GLsizei(width), C.GLint(border), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexParameteriv.xml -func (gl *GL) TexParameteriv(target, pname glbase.Enum, params []int32) { - C.gl4_1core_glTexParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexParameteri.xml -func (gl *GL) TexParameteri(target, pname glbase.Enum, param int32) { - C.gl4_1core_glTexParameteri(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexParameterfv.xml -func (gl *GL) TexParameterfv(target, pname glbase.Enum, params []float32) { - C.gl4_1core_glTexParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexParameterf.xml -func (gl *GL) TexParameterf(target, pname glbase.Enum, param float32) { - C.gl4_1core_glTexParameterf(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glScissor.xml -func (gl *GL) Scissor(x, y, width, height int) { - C.gl4_1core_glScissor(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPolygonMode.xml -func (gl *GL) PolygonMode(face, mode glbase.Enum) { - C.gl4_1core_glPolygonMode(gl.funcs, C.GLenum(face), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPointSize.xml -func (gl *GL) PointSize(size float32) { - C.gl4_1core_glPointSize(gl.funcs, C.GLfloat(size)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLineWidth.xml -func (gl *GL) LineWidth(width float32) { - C.gl4_1core_glLineWidth(gl.funcs, C.GLfloat(width)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glHint.xml -func (gl *GL) Hint(target, mode glbase.Enum) { - C.gl4_1core_glHint(gl.funcs, C.GLenum(target), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFrontFace.xml -func (gl *GL) FrontFace(mode glbase.Enum) { - C.gl4_1core_glFrontFace(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCullFace.xml -func (gl *GL) CullFace(mode glbase.Enum) { - C.gl4_1core_glCullFace(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIndexubv.xml -func (gl *GL) Indexubv(c []uint8) { - C.gl4_1core_glIndexubv(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIndexub.xml -func (gl *GL) Indexub(c uint8) { - C.gl4_1core_glIndexub(gl.funcs, C.GLubyte(c)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsTexture.xml -func (gl *GL) IsTexture(texture glbase.Texture) bool { - glresult := C.gl4_1core_glIsTexture(gl.funcs, C.GLuint(texture)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// GenTextures returns n texture names in textures. There is no guarantee -// that the names form a contiguous set of integers; however, it is -// guaranteed that none of the returned names was in use immediately before -// the call to GenTextures. -// -// The generated textures have no dimensionality; they assume the -// dimensionality of the texture target to which they are first bound (see -// BindTexture). -// -// Texture names returned by a call to GenTextures are not returned by -// subsequent calls, unless they are first deleted with DeleteTextures. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// GenTextures is available in GL version 2.0 or greater. -func (gl *GL) GenTextures(n int) []glbase.Texture { - if n == 0 { - return nil - } - textures := make([]glbase.Texture, n) - C.gl4_1core_glGenTextures(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0]))) - return textures -} - -// DeleteTextures deletes the textures objects whose names are stored -// in the textures slice. After a texture is deleted, it has no contents or -// dimensionality, and its name is free for reuse (for example by -// GenTextures). If a texture that is currently bound is deleted, the binding -// reverts to 0 (the default texture). -// -// DeleteTextures silently ignores 0's and names that do not correspond to -// existing textures. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// DeleteTextures is available in GL version 2.0 or greater. -func (gl *GL) DeleteTextures(textures []glbase.Texture) { - n := len(textures) - if n == 0 { - return - } - C.gl4_1core_glDeleteTextures(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindTexture.xml -func (gl *GL) BindTexture(target glbase.Enum, texture glbase.Texture) { - C.gl4_1core_glBindTexture(gl.funcs, C.GLenum(target), C.GLuint(texture)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexSubImage2D.xml -func (gl *GL) TexSubImage2D(target glbase.Enum, level, xoffset, yoffset, width, height int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_1core_glTexSubImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexSubImage1D.xml -func (gl *GL) TexSubImage1D(target glbase.Enum, level, xoffset, width int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_1core_glTexSubImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLsizei(width), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyTexSubImage2D.xml -func (gl *GL) CopyTexSubImage2D(target glbase.Enum, level, xoffset, yoffset, x, y, width, height int) { - C.gl4_1core_glCopyTexSubImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyTexSubImage1D.xml -func (gl *GL) CopyTexSubImage1D(target glbase.Enum, level, xoffset, x, y, width int) { - C.gl4_1core_glCopyTexSubImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(x), C.GLint(y), C.GLsizei(width)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyTexImage2D.xml -func (gl *GL) CopyTexImage2D(target glbase.Enum, level int, internalFormat glbase.Enum, x, y, width, height, border int) { - C.gl4_1core_glCopyTexImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height), C.GLint(border)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyTexImage1D.xml -func (gl *GL) CopyTexImage1D(target glbase.Enum, level int, internalFormat glbase.Enum, x, y, width, border int) { - C.gl4_1core_glCopyTexImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLint(border)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPolygonOffset.xml -func (gl *GL) PolygonOffset(factor, units float32) { - C.gl4_1core_glPolygonOffset(gl.funcs, C.GLfloat(factor), C.GLfloat(units)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawElements.xml -func (gl *GL) DrawElements(mode glbase.Enum, count int, gltype glbase.Enum, indices interface{}) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl4_1core_glDrawElements(gl.funcs, C.GLenum(mode), C.GLsizei(count), C.GLenum(gltype), indices_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawArrays.xml -func (gl *GL) DrawArrays(mode glbase.Enum, first, count int) { - C.gl4_1core_glDrawArrays(gl.funcs, C.GLenum(mode), C.GLint(first), C.GLsizei(count)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyTexSubImage3D.xml -func (gl *GL) CopyTexSubImage3D(target glbase.Enum, level, xoffset, yoffset int, zoffset int32, x, y, width, height int) { - C.gl4_1core_glCopyTexSubImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(zoffset), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexSubImage3D.xml -func (gl *GL) TexSubImage3D(target glbase.Enum, level, xoffset, yoffset int, zoffset int32, width, height int, depth int32, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_1core_glTexSubImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(zoffset), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexImage3D.xml -func (gl *GL) TexImage3D(target glbase.Enum, level int, internalFormat int32, width, height int, depth int32, border int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_1core_glTexImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLint(border), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawRangeElements.xml -func (gl *GL) DrawRangeElements(mode glbase.Enum, start, end uint32, count int, gltype glbase.Enum, indices interface{}) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl4_1core_glDrawRangeElements(gl.funcs, C.GLenum(mode), C.GLuint(start), C.GLuint(end), C.GLsizei(count), C.GLenum(gltype), indices_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendEquation.xml -func (gl *GL) BlendEquation(mode glbase.Enum) { - C.gl4_1core_glBlendEquation(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendColor.xml -func (gl *GL) BlendColor(red, green, blue, alpha float32) { - C.gl4_1core_glBlendColor(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetCompressedTexImage.xml -func (gl *GL) GetCompressedTexImage(target glbase.Enum, level int, img interface{}) { - var img_ptr unsafe.Pointer - var img_v = reflect.ValueOf(img) - if img != nil && img_v.Kind() != reflect.Slice { - panic("parameter img must be a slice") - } - if img != nil { - img_ptr = unsafe.Pointer(img_v.Index(0).Addr().Pointer()) - } - C.gl4_1core_glGetCompressedTexImage(gl.funcs, C.GLenum(target), C.GLint(level), img_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCompressedTexSubImage1D.xml -func (gl *GL) CompressedTexSubImage1D(target glbase.Enum, level, xoffset, width int, format glbase.Enum, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_1core_glCompressedTexSubImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLsizei(width), C.GLenum(format), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCompressedTexSubImage2D.xml -func (gl *GL) CompressedTexSubImage2D(target glbase.Enum, level, xoffset, yoffset, width, height int, format glbase.Enum, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_1core_glCompressedTexSubImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCompressedTexSubImage3D.xml -func (gl *GL) CompressedTexSubImage3D(target glbase.Enum, level, xoffset, yoffset int, zoffset int32, width, height int, depth int32, format glbase.Enum, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_1core_glCompressedTexSubImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(zoffset), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLenum(format), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCompressedTexImage1D.xml -func (gl *GL) CompressedTexImage1D(target glbase.Enum, level int, internalFormat glbase.Enum, width, border, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_1core_glCompressedTexImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLsizei(width), C.GLint(border), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCompressedTexImage2D.xml -func (gl *GL) CompressedTexImage2D(target glbase.Enum, level int, internalFormat glbase.Enum, width, height, border, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_1core_glCompressedTexImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLint(border), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCompressedTexImage3D.xml -func (gl *GL) CompressedTexImage3D(target glbase.Enum, level int, internalFormat glbase.Enum, width, height int, depth int32, border, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_1core_glCompressedTexImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLint(border), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSampleCoverage.xml -func (gl *GL) SampleCoverage(value float32, invert bool) { - C.gl4_1core_glSampleCoverage(gl.funcs, C.GLfloat(value), *(*C.GLboolean)(unsafe.Pointer(&invert))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glActiveTexture.xml -func (gl *GL) ActiveTexture(texture glbase.Enum) { - C.gl4_1core_glActiveTexture(gl.funcs, C.GLenum(texture)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPointParameteriv.xml -func (gl *GL) PointParameteriv(pname glbase.Enum, params []int32) { - C.gl4_1core_glPointParameteriv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPointParameteri.xml -func (gl *GL) PointParameteri(pname glbase.Enum, param int32) { - C.gl4_1core_glPointParameteri(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPointParameterfv.xml -func (gl *GL) PointParameterfv(pname glbase.Enum, params []float32) { - C.gl4_1core_glPointParameterfv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPointParameterf.xml -func (gl *GL) PointParameterf(pname glbase.Enum, param float32) { - C.gl4_1core_glPointParameterf(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiDrawArrays.xml -func (gl *GL) MultiDrawArrays(mode glbase.Enum, first, count []int, drawcount int32) { - C.gl4_1core_glMultiDrawArrays(gl.funcs, C.GLenum(mode), (*C.GLint)(unsafe.Pointer(&first[0])), (*C.GLsizei)(unsafe.Pointer(&count[0])), C.GLsizei(drawcount)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendFuncSeparate.xml -func (gl *GL) BlendFuncSeparate(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha glbase.Enum) { - C.gl4_1core_glBlendFuncSeparate(gl.funcs, C.GLenum(sfactorRGB), C.GLenum(dfactorRGB), C.GLenum(sfactorAlpha), C.GLenum(dfactorAlpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetBufferParameteriv.xml -func (gl *GL) GetBufferParameteriv(target, pname glbase.Enum, params []int32) { - C.gl4_1core_glGetBufferParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUnmapBuffer.xml -func (gl *GL) UnmapBuffer(target glbase.Enum) bool { - glresult := C.gl4_1core_glUnmapBuffer(gl.funcs, C.GLenum(target)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetBufferSubData.xml -func (gl *GL) GetBufferSubData(target glbase.Enum, offset, size int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_1core_glGetBufferSubData(gl.funcs, C.GLenum(target), C.GLintptr(offset), C.GLsizeiptr(size), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBufferSubData.xml -func (gl *GL) BufferSubData(target glbase.Enum, offset, size int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_1core_glBufferSubData(gl.funcs, C.GLenum(target), C.GLintptr(offset), C.GLsizeiptr(size), data_ptr) -} - -// BufferData creates a new data store for the buffer object currently -// bound to target. Any pre-existing data store is deleted. The new data -// store is created with the specified size in bytes and usage. If data is -// not nil, it must be a slice that is used to initialize the data store. -// In that case the size parameter is ignored and the store size will match -// the slice data size. -// -// In its initial state, the new data store is not mapped, it has a NULL -// mapped pointer, and its mapped access is GL.READ_WRITE. -// -// The target constant must be one of GL.ARRAY_BUFFER, GL.COPY_READ_BUFFER, -// GL.COPY_WRITE_BUFFER, GL.ELEMENT_ARRAY_BUFFER, GL.PIXEL_PACK_BUFFER, -// GL.PIXEL_UNPACK_BUFFER, GL.TEXTURE_BUFFER, GL.TRANSFORM_FEEDBACK_BUFFER, -// or GL.UNIFORM_BUFFER. -// -// The usage parameter is a hint to the GL implementation as to how a buffer -// object's data store will be accessed. This enables the GL implementation -// to make more intelligent decisions that may significantly impact buffer -// object performance. It does not, however, constrain the actual usage of -// the data store. usage can be broken down into two parts: first, the -// frequency of access (modification and usage), and second, the nature of -// that access. -// -// A usage frequency of STREAM and nature of DRAW is specified via the -// constant GL.STREAM_DRAW, for example. -// -// The usage frequency of access may be one of: -// -// STREAM -// The data store contents will be modified once and used at most a few times. -// -// STATIC -// The data store contents will be modified once and used many times. -// -// DYNAMIC -// The data store contents will be modified repeatedly and used many times. -// -// The usage nature of access may be one of: -// -// DRAW -// The data store contents are modified by the application, and used as -// the source for GL drawing and image specification commands. -// -// READ -// The data store contents are modified by reading data from the GL, -// and used to return that data when queried by the application. -// -// COPY -// The data store contents are modified by reading data from the GL, -// and used as the source for GL drawing and image specification -// commands. -// -// Clients must align data elements consistent with the requirements of the -// client platform, with an additional base-level requirement that an offset -// within a buffer to a datum comprising N bytes be a multiple of N. -// -// Error GL.INVALID_ENUM is generated if target is not one of the accepted -// buffer targets. GL.INVALID_ENUM is generated if usage is not -// GL.STREAM_DRAW, GL.STREAM_READ, GL.STREAM_COPY, GL.STATIC_DRAW, -// GL.STATIC_READ, GL.STATIC_COPY, GL.DYNAMIC_DRAW, GL.DYNAMIC_READ, or -// GL.DYNAMIC_COPY. GL.INVALID_VALUE is generated if size is negative. -// GL.INVALID_OPERATION is generated if the reserved buffer object name 0 is -// bound to target. GL.OUT_OF_MEMORY is generated if the GL is unable to -// create a data store with the specified size. -func (gl *GL) BufferData(target glbase.Enum, size int, data interface{}, usage glbase.Enum) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - if data != nil { - size = int(data_v.Type().Size()) * data_v.Len() - } - C.gl4_1core_glBufferData(gl.funcs, C.GLenum(target), C.GLsizeiptr(size), data_ptr, C.GLenum(usage)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsBuffer.xml -func (gl *GL) IsBuffer(buffer glbase.Buffer) bool { - glresult := C.gl4_1core_glIsBuffer(gl.funcs, C.GLuint(buffer)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// GenBuffers returns n buffer object names. There is no guarantee that -// the names form a contiguous set of integers; however, it is guaranteed -// that none of the returned names was in use immediately before the call to -// GenBuffers. -// -// Buffer object names returned by a call to GenBuffers are not returned by -// subsequent calls, unless they are first deleted with DeleteBuffers. -// -// No buffer objects are associated with the returned buffer object names -// until they are first bound by calling BindBuffer. -// -// Error GL.INVALID_VALUE is generated if n is negative. GL.INVALID_OPERATION -// is generated if GenBuffers is executed between the execution of Begin -// and the corresponding execution of End. -// -// GenBuffers is available in GL version 1.5 or greater. -func (gl *GL) GenBuffers(n int) []glbase.Buffer { - if n == 0 { - return nil - } - buffers := make([]glbase.Buffer, n) - C.gl4_1core_glGenBuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&buffers[0]))) - return buffers -} - -// DeleteBuffers deletes the buffer objects whose names are stored in the -// buffers slice. -// -// After a buffer object is deleted, it has no contents, and its name is free -// for reuse (for example by GenBuffers). If a buffer object that is -// currently bound is deleted, the binding reverts to 0 (the absence of any -// buffer object, which reverts to client memory usage). -// -// DeleteBuffers silently ignores 0's and names that do not correspond to -// existing buffer objects. -// -// Error GL.INVALID_VALUE is generated if n is negative. GL.INVALID_OPERATION -// is generated if DeleteBuffers is executed between the execution of Begin -// and the corresponding execution of End. -// -// DeleteBuffers is available in GL version 1.5 or greater. -func (gl *GL) DeleteBuffers(buffers []glbase.Buffer) { - n := len(buffers) - if n == 0 { - return - } - C.gl4_1core_glDeleteBuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&buffers[0]))) -} - -// BindBuffer creates or puts in use a named buffer object. -// Calling BindBuffer with target set to GL.ARRAY_BUFFER, -// GL.ELEMENT_ARRAY_BUFFER, GL.PIXEL_PACK_BUFFER or GL.PIXEL_UNPACK_BUFFER -// and buffer set to the name of the new buffer object binds the buffer -// object name to the target. When a buffer object is bound to a target, the -// previous binding for that target is automatically broken. -// -// Buffer object names are unsigned integers. The value zero is reserved, but -// there is no default buffer object for each buffer object target. Instead, -// buffer set to zero effectively unbinds any buffer object previously bound, -// and restores client memory usage for that buffer object target. Buffer -// object names and the corresponding buffer object contents are local to the -// shared display-list space (see XCreateContext) of the current GL rendering -// context; two rendering contexts share buffer object names only if they -// also share display lists. -// -// GenBuffers may be called to generate a set of new buffer object names. -// -// The state of a buffer object immediately after it is first bound is an -// unmapped zero-sized memory buffer with GL.READ_WRITE access and -// GL.STATIC_DRAW usage. -// -// While a non-zero buffer object name is bound, GL operations on the target -// to which it is bound affect the bound buffer object, and queries of the -// target to which it is bound return state from the bound buffer object. -// While buffer object name zero is bound, as in the initial state, attempts -// to modify or query state on the target to which it is bound generates an -// GL.INVALID_OPERATION error. -// -// When vertex array pointer state is changed, for example by a call to -// NormalPointer, the current buffer object binding (GL.ARRAY_BUFFER_BINDING) -// is copied into the corresponding client state for the vertex array type -// being changed, for example GL.NORMAL_ARRAY_BUFFER_BINDING. While a -// non-zero buffer object is bound to the GL.ARRAY_BUFFER target, the vertex -// array pointer parameter that is traditionally interpreted as a pointer to -// client-side memory is instead interpreted as an offset within the buffer -// object measured in basic machine units. -// -// While a non-zero buffer object is bound to the GL.ELEMENT_ARRAY_BUFFER -// target, the indices parameter of DrawElements, DrawRangeElements, or -// MultiDrawElements that is traditionally interpreted as a pointer to -// client-side memory is instead interpreted as an offset within the buffer -// object measured in basic machine units. -// -// While a non-zero buffer object is bound to the GL.PIXEL_PACK_BUFFER -// target, the following commands are affected: GetCompressedTexImage, -// GetConvolutionFilter, GetHistogram, GetMinmax, GetPixelMap, -// GetPolygonStipple, GetSeparableFilter, GetTexImage, and ReadPixels. The -// pointer parameter that is traditionally interpreted as a pointer to -// client-side memory where the pixels are to be packed is instead -// interpreted as an offset within the buffer object measured in basic -// machine units. -// -// While a non-zero buffer object is bound to the GL.PIXEL_UNPACK_BUFFER -// target, the following commands are affected: Bitmap, ColorSubTable, -// ColorTable, CompressedTexImage1D, CompressedTexImage2D, -// CompressedTexImage3D, CompressedTexSubImage1D, CompressedTexSubImage2D, -// CompressedTexSubImage3D, ConvolutionFilter1D, ConvolutionFilter2D, -// DrawPixels, PixelMap, PolygonStipple, SeparableFilter2D, TexImage1D, -// TexImage2D, TexImage3D, TexSubImage1D, TexSubImage2D, and TexSubImage3D. -// The pointer parameter that is traditionally interpreted as a pointer to -// client-side memory from which the pixels are to be unpacked is instead -// interpreted as an offset within the buffer object measured in basic -// machine units. -// -// A buffer object binding created with BindBuffer remains active until a -// different buffer object name is bound to the same target, or until the -// bound buffer object is deleted with DeleteBuffers. -// -// Once created, a named buffer object may be re-bound to any target as often -// as needed. However, the GL implementation may make choices about how to -// optimize the storage of a buffer object based on its initial binding -// target. -// -// Error GL.INVALID_ENUM is generated if target is not one of the allowable -// values. GL.INVALID_OPERATION is generated if BindBuffer is executed -// between the execution of Begin and the corresponding execution of End. -// -// BindBuffer is available in GL version 1.5 or greater. -func (gl *GL) BindBuffer(target glbase.Enum, buffer glbase.Buffer) { - C.gl4_1core_glBindBuffer(gl.funcs, C.GLenum(target), C.GLuint(buffer)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetQueryObjectuiv.xml -func (gl *GL) GetQueryObjectuiv(id uint32, pname glbase.Enum, params []uint32) { - C.gl4_1core_glGetQueryObjectuiv(gl.funcs, C.GLuint(id), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetQueryObjectiv.xml -func (gl *GL) GetQueryObjectiv(id uint32, pname glbase.Enum, params []int32) { - C.gl4_1core_glGetQueryObjectiv(gl.funcs, C.GLuint(id), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetQueryiv.xml -func (gl *GL) GetQueryiv(target, pname glbase.Enum, params []int32) { - C.gl4_1core_glGetQueryiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEndQuery.xml -func (gl *GL) EndQuery(target glbase.Enum) { - C.gl4_1core_glEndQuery(gl.funcs, C.GLenum(target)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBeginQuery.xml -func (gl *GL) BeginQuery(target glbase.Enum, id uint32) { - C.gl4_1core_glBeginQuery(gl.funcs, C.GLenum(target), C.GLuint(id)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsQuery.xml -func (gl *GL) IsQuery(id uint32) bool { - glresult := C.gl4_1core_glIsQuery(gl.funcs, C.GLuint(id)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDeleteQueries.xml -func (gl *GL) DeleteQueries(n int, ids []uint32) { - C.gl4_1core_glDeleteQueries(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&ids[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGenQueries.xml -func (gl *GL) GenQueries(n int, ids []uint32) { - C.gl4_1core_glGenQueries(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&ids[0]))) -} - -// VertexAttribPointer specifies the location and data format of the array -// of generic vertex attributes at index to use when rendering. size -// specifies the number of components per attribute and must be 1, 2, 3, or -// 4. type specifies the data type of each component, and stride specifies -// the byte stride from one attribute to the next, allowing vertices and -// attributes to be packed into a single array or stored in separate arrays. -// normalized indicates whether the values stored in an integer format are -// to be mapped to the range [-1,1] (for signed values) or [0,1] -// (for unsigned values) when they are accessed and converted to floating -// point; otherwise, values will be converted to floats directly without -// normalization. offset is a byte offset into the buffer object's data -// store, which must be bound to the GL.ARRAY_BUFFER target with BindBuffer. -// -// The buffer object binding (GL.ARRAY_BUFFER_BINDING) is saved as -// generic vertex attribute array client-side state -// (GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING) for the provided index. -// -// To enable and disable a generic vertex attribute array, call -// EnableVertexAttribArray and DisableVertexAttribArray with index. If -// enabled, the generic vertex attribute array is used when DrawArrays or -// DrawElements is called. Each generic vertex attribute array is initially -// disabled. -// -// VertexAttribPointer is typically implemented on the client side. -// -// Error GL.INVALID_ENUM is generated if type is not an accepted value. -// GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. GL.INVALID_VALUE is generated if size is not 1, 2, -// 3, or 4. GL.INVALID_VALUE is generated if stride is negative. -func (gl *GL) VertexAttribPointer(index glbase.Attrib, size int, gltype glbase.Enum, normalized bool, stride int, offset uintptr) { - offset_ptr := unsafe.Pointer(offset) - C.gl4_1core_glVertexAttribPointer(gl.funcs, C.GLuint(index), C.GLint(size), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), C.GLsizei(stride), offset_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glValidateProgram.xml -func (gl *GL) ValidateProgram(program glbase.Program) { - C.gl4_1core_glValidateProgram(gl.funcs, C.GLuint(program)) -} - -// UniformMatrix4fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix4fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix4fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(4*4) != 0 { - panic("invalid value length for UniformMatrix4fv") - } - count := len(value) / (4 * 4) - C.gl4_1core_glUniformMatrix4fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix3fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix3fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix3fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(3*3) != 0 { - panic("invalid value length for UniformMatrix3fv") - } - count := len(value) / (3 * 3) - C.gl4_1core_glUniformMatrix3fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix2fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix2fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix2fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(2*2) != 0 { - panic("invalid value length for UniformMatrix2fv") - } - count := len(value) / (2 * 2) - C.gl4_1core_glUniformMatrix2fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform4iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform4iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - if len(value)%4 != 0 { - panic("invalid value length for Uniform4iv") - } - count := len(value) / 4 - C.gl4_1core_glUniform4iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// Uniform3iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform3iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - if len(value)%3 != 0 { - panic("invalid value length for Uniform3iv") - } - count := len(value) / 3 - C.gl4_1core_glUniform3iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// Uniform2iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform2iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - if len(value)%2 != 0 { - panic("invalid value length for Uniform2iv") - } - count := len(value) / 2 - C.gl4_1core_glUniform2iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// Uniform1iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform1iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - count := len(value) - C.gl4_1core_glUniform1iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// Uniform4fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform4fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - if len(value)%4 != 0 { - panic("invalid value length for Uniform4fv") - } - count := len(value) / 4 - C.gl4_1core_glUniform4fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform3fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform3fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - if len(value)%3 != 0 { - panic("invalid value length for Uniform3fv") - } - count := len(value) / 3 - C.gl4_1core_glUniform3fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform2fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform2fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - if len(value)%2 != 0 { - panic("invalid value length for Uniform2fv") - } - count := len(value) / 2 - C.gl4_1core_glUniform2fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform1fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform1fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - count := len(value) - C.gl4_1core_glUniform1fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform4i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform4i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4i(location glbase.Uniform, v0, v1, v2, v3 int32) { - C.gl4_1core_glUniform4i(gl.funcs, C.GLint(location), C.GLint(v0), C.GLint(v1), C.GLint(v2), C.GLint(v3)) -} - -// Uniform3i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform3i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3i(location glbase.Uniform, v0, v1, v2 int32) { - C.gl4_1core_glUniform3i(gl.funcs, C.GLint(location), C.GLint(v0), C.GLint(v1), C.GLint(v2)) -} - -// Uniform2i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform2i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2i(location glbase.Uniform, v0, v1 int32) { - C.gl4_1core_glUniform2i(gl.funcs, C.GLint(location), C.GLint(v0), C.GLint(v1)) -} - -// Uniform1i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform1i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1i(location glbase.Uniform, v0 int32) { - C.gl4_1core_glUniform1i(gl.funcs, C.GLint(location), C.GLint(v0)) -} - -// Uniform4f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform4f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4f(location glbase.Uniform, v0, v1, v2, v3 float32) { - C.gl4_1core_glUniform4f(gl.funcs, C.GLint(location), C.GLfloat(v0), C.GLfloat(v1), C.GLfloat(v2), C.GLfloat(v3)) -} - -// Uniform3f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform3f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3f(location glbase.Uniform, v0, v1, v2 float32) { - C.gl4_1core_glUniform3f(gl.funcs, C.GLint(location), C.GLfloat(v0), C.GLfloat(v1), C.GLfloat(v2)) -} - -// Uniform2f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform2f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2f(location glbase.Uniform, v0, v1 float32) { - C.gl4_1core_glUniform2f(gl.funcs, C.GLint(location), C.GLfloat(v0), C.GLfloat(v1)) -} - -// Uniform1f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform1f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1f(location glbase.Uniform, v0 float32) { - C.gl4_1core_glUniform1f(gl.funcs, C.GLint(location), C.GLfloat(v0)) -} - -// UseProgram installs the program object specified by program as part of -// current rendering state. One or more executables are created in a program -// object by successfully attaching shader objects to it with AttachShader, -// successfully compiling the shader objects with CompileShader, and -// successfully linking the program object with LinkProgram. -// -// A program object will contain an executable that will run on the vertex -// processor if it contains one or more shader objects of type -// GL.VERTEX_SHADER that have been successfully compiled and linked. -// Similarly, a program object will contain an executable that will run on -// the fragment processor if it contains one or more shader objects of type -// GL.FRAGMENT_SHADER that have been successfully compiled and linked. -// -// Successfully installing an executable on a programmable processor will -// cause the corresponding fixed functionality of OpenGL to be disabled. -// Specifically, if an executable is installed on the vertex processor, the -// OpenGL fixed functionality will be disabled as follows. -// -// - The modelview matrix is not applied to vertex coordinates. -// -// - The projection matrix is not applied to vertex coordinates. -// -// - The texture matrices are not applied to texture coordinates. -// -// - Normals are not transformed to eye coordinates. -// -// - Normals are not rescaled or normalized. -// -// - Normalization of GL.AUTO_NORMAL evaluated normals is not performed. -// -// - Texture coordinates are not generated automatically. -// -// - Per-vertex lighting is not performed. -// -// - Color material computations are not performed. -// -// - Color index lighting is not performed. -// -// - This list also applies when setting the current raster position. -// -// The executable that is installed on the vertex processor is expected to -// implement any or all of the desired functionality from the preceding list. -// Similarly, if an executable is installed on the fragment processor, the -// OpenGL fixed functionality will be disabled as follows. -// -// - Texture environment and texture functions are not applied. -// -// - Texture application is not applied. -// -// - Color sum is not applied. -// -// - Fog is not applied. -// -// Again, the fragment shader that is installed is expected to implement any -// or all of the desired functionality from the preceding list. -// -// While a program object is in use, applications are free to modify attached -// shader objects, compile attached shader objects, attach additional shader -// objects, and detach or delete shader objects. None of these operations -// will affect the executables that are part of the current state. However, -// relinking the program object that is currently in use will install the -// program object as part of the current rendering state if the link -// operation was successful (see LinkProgram). If the program object -// currently in use is relinked unsuccessfully, its link status will be set -// to GL.FALSE, but the executables and associated state will remain part of -// the current state until a subsequent call to UseProgram removes it from -// use. After it is removed from use, it cannot be made part of current state -// until it has been successfully relinked. -// -// If program contains shader objects of type GL.VERTEX_SHADER but it does -// not contain shader objects of type GL.FRAGMENT_SHADER, an executable will -// be installed on the vertex processor, but fixed functionality will be used -// for fragment processing. Similarly, if program contains shader objects of -// type GL.FRAGMENT_SHADER but it does not contain shader objects of type -// GL.VERTEX_SHADER, an executable will be installed on the fragment -// processor, but fixed functionality will be used for vertex processing. If -// program is 0, the programmable processors will be disabled, and fixed -// functionality will be used for both vertex and fragment processing. -// -// While a program object is in use, the state that controls the disabled -// fixed functionality may also be updated using the normal OpenGL calls. -// -// Like display lists and texture objects, the name space for program objects -// may be shared across a set of contexts, as long as the server sides of the -// contexts share the same address space. If the name space is shared across -// contexts, any attached objects and the data associated with those attached -// objects are shared as well. -// -// Applications are responsible for providing the synchronization across API -// calls when objects are accessed from different execution threads. -// -// Error GL.INVALID_VALUE is generated if program is neither 0 nor a value -// generated by OpenGL. GL.INVALID_OPERATION is generated if program is not -// a program object. GL.INVALID_OPERATION is generated if program could not -// be made part of current state. GL.INVALID_OPERATION is generated if -// UseProgram is executed between the execution of Begin and the -// corresponding execution of End. -// -// UseProgram is available in GL version 2.0 or greater. -func (gl *GL) UseProgram(program glbase.Program) { - C.gl4_1core_glUseProgram(gl.funcs, C.GLuint(program)) -} - -// ShaderSource sets the source code in shader to the provided source code. Any source -// code previously stored in the shader object is completely replaced. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader is not a shader -// object. GL.INVALID_VALUE is generated if count is less than 0. -// GL.INVALID_OPERATION is generated if ShaderSource is executed between the -// execution of Begin and the corresponding execution of End. -// -// ShaderSource is available in GL version 2.0 or greater. -func (gl *GL) ShaderSource(shader glbase.Shader, source ...string) { - count := len(source) - length := make([]int32, count) - source_c := make([]unsafe.Pointer, count) - for i, src := range source { - length[i] = int32(len(src)) - if len(src) > 0 { - source_c[i] = *(*unsafe.Pointer)(unsafe.Pointer(&src)) - } else { - source_c[i] = unsafe.Pointer(uintptr(0)) - } - } - C.gl4_1core_glShaderSource(gl.funcs, C.GLuint(shader), C.GLsizei(count), (**C.GLchar)(unsafe.Pointer(&source_c[0])), (*C.GLint)(unsafe.Pointer(&length[0]))) -} - -// LinkProgram links the program object specified by program. If any shader -// objects of type GL.VERTEX_SHADER are attached to program, they will be -// used to create an executable that will run on the programmable vertex -// processor. If any shader objects of type GL.FRAGMENT_SHADER are attached -// to program, they will be used to create an executable that will run on the -// programmable fragment processor. -// -// The status of the link operation will be stored as part of the program -// object's state. This value will be set to GL.TRUE if the program object -// was linked without errors and is ready for use, and GL.FALSE otherwise. It -// can be queried by calling GetProgramiv with arguments program and -// GL.LINK_STATUS. -// -// As a result of a successful link operation, all active user-defined -// uniform variables belonging to program will be initialized to 0, and each -// of the program object's active uniform variables will be assigned a -// location that can be queried by calling GetUniformLocation. Also, any -// active user-defined attribute variables that have not been bound to a -// generic vertex attribute index will be bound to one at this time. -// -// Linking of a program object can fail for a number of reasons as specified -// in the OpenGL Shading Language Specification. The following lists some of -// the conditions that will cause a link error. -// -// - The number of active attribute variables supported by the -// implementation has been exceeded. -// -// - The storage limit for uniform variables has been exceeded. -// -// - The number of active uniform variables supported by the implementation -// has been exceeded. -// -// - The main function is missing for the vertex shader or the fragment -// shader. -// -// - A varying variable actually used in the fragment shader is not -// declared in the same way (or is not declared at all) in the vertex -// shader. -// -// - A reference to a function or variable name is unresolved. -// -// - A shared global is declared with two different types or two different -// initial values. -// -// - One or more of the attached shader objects has not been successfully -// compiled. -// -// - Binding a generic attribute matrix caused some rows of the matrix to -// fall outside the allowed maximum of GL.MAX_VERTEX_ATTRIBS. -// -// - Not enough contiguous vertex attribute slots could be found to bind -// attribute matrices. -// -// When a program object has been successfully linked, the program object can -// be made part of current state by calling UseProgram. Whether or not the -// link operation was successful, the program object's information log will -// be overwritten. The information log can be retrieved by calling -// GetProgramInfoLog. -// -// LinkProgram will also install the generated executables as part of the -// current rendering state if the link operation was successful and the -// specified program object is already currently in use as a result of a -// previous call to UseProgram. If the program object currently in use is -// relinked unsuccessfully, its link status will be set to GL.FALSE , but the -// executables and associated state will remain part of the current state -// until a subsequent call to UseProgram removes it from use. After it is -// removed from use, it cannot be made part of current state until it has -// been successfully relinked. -// -// If program contains shader objects of type GL.VERTEX_SHADER but does not -// contain shader objects of type GL.FRAGMENT_SHADER, the vertex shader will -// be linked against the implicit interface for fixed functionality fragment -// processing. Similarly, if program contains shader objects of type -// GL.FRAGMENT_SHADER but it does not contain shader objects of type -// GL.VERTEX_SHADER, the fragment shader will be linked against the implicit -// interface for fixed functionality vertex processing. -// -// The program object's information log is updated and the program is -// generated at the time of the link operation. After the link operation, -// applications are free to modify attached shader objects, compile attached -// shader objects, detach shader objects, delete shader objects, and attach -// additional shader objects. None of these operations affects the -// information log or the program that is part of the program object. -// -// If the link operation is unsuccessful, any information about a previous -// link operation on program is lost (a failed link does not restore the -// old state of program). Certain information can still be retrieved -// from program even after an unsuccessful link operation. See for instance -// GetActiveAttrib and GetActiveUniform. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program -// object. GL.INVALID_OPERATION is generated if LinkProgram is executed -// between the execution of Begin and the corresponding execution of End. -// -// LinkProgram is available in GL version 2.0 or greater. -func (gl *GL) LinkProgram(program glbase.Program) { - C.gl4_1core_glLinkProgram(gl.funcs, C.GLuint(program)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsShader.xml -func (gl *GL) IsShader(shader glbase.Shader) bool { - glresult := C.gl4_1core_glIsShader(gl.funcs, C.GLuint(shader)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsProgram.xml -func (gl *GL) IsProgram(program glbase.Program) bool { - glresult := C.gl4_1core_glIsProgram(gl.funcs, C.GLuint(program)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// GetVertexAttribiv returns in params the value of a generic vertex attribute -// parameter. The generic vertex attribute to be queried is specified by -// index, and the parameter to be queried is specified by pname. -// -// The accepted parameter names are as follows: -// -// GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING -// params returns a single value, the name of the buffer object -// currently bound to the binding point corresponding to generic vertex -// attribute array index. If no buffer object is bound, 0 is returned. -// The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_ENABLED -// params returns a single value that is non-zero (true) if the vertex -// attribute array for index is enabled and 0 (false) if it is -// disabled. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_SIZE -// params returns a single value, the size of the vertex attribute -// array for index. The size is the number of values for each element -// of the vertex attribute array, and it will be 1, 2, 3, or 4. The -// initial value is 4. -// -// GL.VERTEX_ATTRIB_ARRAY_STRIDE -// params returns a single value, the array stride for (number of bytes -// between successive elements in) the vertex attribute array for -// index. A value of 0 indicates that the array elements are stored -// sequentially in memory. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_TYPE -// params returns a single value, a symbolic constant indicating the -// array type for the vertex attribute array for index. Possible values -// are GL.BYTE, GL.UNSIGNED_BYTE, GL.SHORT, GL.UNSIGNED_SHORT, GL.INT, -// GL.UNSIGNED_INT, GL.FLOAT, and GL.DOUBLE. The initial value is -// GL.FLOAT. -// -// GL.VERTEX_ATTRIB_ARRAY_NORMALIZED -// params returns a single value that is non-zero (true) if fixed-point -// data types for the vertex attribute array indicated by index are -// normalized when they are converted to floating point, and 0 (false) -// otherwise. The initial value is 0. -// -// GL.CURRENT_VERTEX_ATTRIB -// params returns four values that represent the current value for the -// generic vertex attribute specified by index. Generic vertex -// attribute 0 is unique in that it has no current state, so an error -// will be generated if index is 0. The initial value for all other -// generic vertex attributes is (0,0,0,1). -// -// All of the parameters except GL.CURRENT_VERTEX_ATTRIB represent -// client-side state. -// -// Error GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. GL.INVALID_ENUM is generated if pname is not an -// accepted value. GL.INVALID_OPERATION is generated if index is 0 and pname -// is GL.CURRENT_VERTEX_ATTRIB. -// -// GetVertexAttribiv is available in GL version 2.0 or greater. -func (gl *GL) GetVertexAttribiv(index glbase.Attrib, pname glbase.Enum, params []int32) { - var params_c [4]int32 - C.gl4_1core_glGetVertexAttribiv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetVertexAttribfv returns in params the value of a generic vertex attribute -// parameter. The generic vertex attribute to be queried is specified by -// index, and the parameter to be queried is specified by pname. -// -// The accepted parameter names are as follows: -// -// GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING -// params returns a single value, the name of the buffer object -// currently bound to the binding point corresponding to generic vertex -// attribute array index. If no buffer object is bound, 0 is returned. -// The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_ENABLED -// params returns a single value that is non-zero (true) if the vertex -// attribute array for index is enabled and 0 (false) if it is -// disabled. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_SIZE -// params returns a single value, the size of the vertex attribute -// array for index. The size is the number of values for each element -// of the vertex attribute array, and it will be 1, 2, 3, or 4. The -// initial value is 4. -// -// GL.VERTEX_ATTRIB_ARRAY_STRIDE -// params returns a single value, the array stride for (number of bytes -// between successive elements in) the vertex attribute array for -// index. A value of 0 indicates that the array elements are stored -// sequentially in memory. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_TYPE -// params returns a single value, a symbolic constant indicating the -// array type for the vertex attribute array for index. Possible values -// are GL.BYTE, GL.UNSIGNED_BYTE, GL.SHORT, GL.UNSIGNED_SHORT, GL.INT, -// GL.UNSIGNED_INT, GL.FLOAT, and GL.DOUBLE. The initial value is -// GL.FLOAT. -// -// GL.VERTEX_ATTRIB_ARRAY_NORMALIZED -// params returns a single value that is non-zero (true) if fixed-point -// data types for the vertex attribute array indicated by index are -// normalized when they are converted to floating point, and 0 (false) -// otherwise. The initial value is 0. -// -// GL.CURRENT_VERTEX_ATTRIB -// params returns four values that represent the current value for the -// generic vertex attribute specified by index. Generic vertex -// attribute 0 is unique in that it has no current state, so an error -// will be generated if index is 0. The initial value for all other -// generic vertex attributes is (0,0,0,1). -// -// All of the parameters except GL.CURRENT_VERTEX_ATTRIB represent -// client-side state. -// -// Error GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. GL.INVALID_ENUM is generated if pname is not an -// accepted value. GL.INVALID_OPERATION is generated if index is 0 and pname -// is GL.CURRENT_VERTEX_ATTRIB. -// -// GetVertexAttribfv is available in GL version 2.0 or greater. -func (gl *GL) GetVertexAttribfv(index glbase.Attrib, pname glbase.Enum, params []float32) { - var params_c [4]float32 - C.gl4_1core_glGetVertexAttribfv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetVertexAttribdv returns in params the value of a generic vertex attribute -// parameter. The generic vertex attribute to be queried is specified by -// index, and the parameter to be queried is specified by pname. -// -// The accepted parameter names are as follows: -// -// GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING -// params returns a single value, the name of the buffer object -// currently bound to the binding point corresponding to generic vertex -// attribute array index. If no buffer object is bound, 0 is returned. -// The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_ENABLED -// params returns a single value that is non-zero (true) if the vertex -// attribute array for index is enabled and 0 (false) if it is -// disabled. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_SIZE -// params returns a single value, the size of the vertex attribute -// array for index. The size is the number of values for each element -// of the vertex attribute array, and it will be 1, 2, 3, or 4. The -// initial value is 4. -// -// GL.VERTEX_ATTRIB_ARRAY_STRIDE -// params returns a single value, the array stride for (number of bytes -// between successive elements in) the vertex attribute array for -// index. A value of 0 indicates that the array elements are stored -// sequentially in memory. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_TYPE -// params returns a single value, a symbolic constant indicating the -// array type for the vertex attribute array for index. Possible values -// are GL.BYTE, GL.UNSIGNED_BYTE, GL.SHORT, GL.UNSIGNED_SHORT, GL.INT, -// GL.UNSIGNED_INT, GL.FLOAT, and GL.DOUBLE. The initial value is -// GL.FLOAT. -// -// GL.VERTEX_ATTRIB_ARRAY_NORMALIZED -// params returns a single value that is non-zero (true) if fixed-point -// data types for the vertex attribute array indicated by index are -// normalized when they are converted to floating point, and 0 (false) -// otherwise. The initial value is 0. -// -// GL.CURRENT_VERTEX_ATTRIB -// params returns four values that represent the current value for the -// generic vertex attribute specified by index. Generic vertex -// attribute 0 is unique in that it has no current state, so an error -// will be generated if index is 0. The initial value for all other -// generic vertex attributes is (0,0,0,1). -// -// All of the parameters except GL.CURRENT_VERTEX_ATTRIB represent -// client-side state. -// -// Error GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. GL.INVALID_ENUM is generated if pname is not an -// accepted value. GL.INVALID_OPERATION is generated if index is 0 and pname -// is GL.CURRENT_VERTEX_ATTRIB. -// -// GetVertexAttribdv is available in GL version 2.0 or greater. -func (gl *GL) GetVertexAttribdv(index glbase.Attrib, pname glbase.Enum, params []float64) { - var params_c [4]float64 - C.gl4_1core_glGetVertexAttribdv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetUniformiv returns in params the value of the specified uniform -// variable. The type of the uniform variable specified by location -// determines the number of values returned. If the uniform variable is -// defined in the shader as a boolean, int, or float, a single value will be -// returned. If it is defined as a vec2, ivec2, or bvec2, two values will be -// returned. If it is defined as a vec3, ivec3, or bvec3, three values will -// be returned, and so on. To query values stored in uniform variables -// declared as arrays, call GetUniformiv for each element of the array. To -// query values stored in uniform variables declared as structures, call -// GetUniformiv for each field in the structure. The values for uniform -// variables declared as a matrix will be returned in column major order. -// -// The locations assigned to uniform variables are not known until the -// program object is linked. After linking has occurred, the command -// GetUniformLocation can be used to obtain the location of a uniform -// variable. This location value can then be passed to GetUniformiv in order -// to query the current value of the uniform variable. After a program object -// has been linked successfully, the index values for uniform variables -// remain fixed until the next link command occurs. The uniform variable -// values can only be queried after a link if the link was successful. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program -// object. GL.INVALID_OPERATION is generated if program has not been -// successfully linked. GL.INVALID_OPERATION is generated if location does -// not correspond to a valid uniform variable location for the specified -// program object. GL.INVALID_OPERATION is generated if GetUniformiv is -// executed between the execution of Begin and the corresponding execution of -// End. -// -// GetUniformiv is available in GL version 2.0 or greater. -func (gl *GL) GetUniformiv(program glbase.Program, location glbase.Uniform, params []int32) { - var params_c [4]int32 - C.gl4_1core_glGetUniformiv(gl.funcs, C.GLuint(program), C.GLint(location), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetUniformfv returns in params the value of the specified uniform -// variable. The type of the uniform variable specified by location -// determines the number of values returned. If the uniform variable is -// defined in the shader as a boolean, int, or float, a single value will be -// returned. If it is defined as a vec2, ivec2, or bvec2, two values will be -// returned. If it is defined as a vec3, ivec3, or bvec3, three values will -// be returned, and so on. To query values stored in uniform variables -// declared as arrays, call GetUniformfv for each element of the array. To -// query values stored in uniform variables declared as structures, call -// GetUniformfv for each field in the structure. The values for uniform -// variables declared as a matrix will be returned in column major order. -// -// The locations assigned to uniform variables are not known until the -// program object is linked. After linking has occurred, the command -// GetUniformLocation can be used to obtain the location of a uniform -// variable. This location value can then be passed to GetUniformfv in order -// to query the current value of the uniform variable. After a program object -// has been linked successfully, the index values for uniform variables -// remain fixed until the next link command occurs. The uniform variable -// values can only be queried after a link if the link was successful. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program -// object. GL.INVALID_OPERATION is generated if program has not been -// successfully linked. GL.INVALID_OPERATION is generated if location does -// not correspond to a valid uniform variable location for the specified -// program object. GL.INVALID_OPERATION is generated if GetUniformfv is -// executed between the execution of Begin and the corresponding execution of -// End. -// -// GetUniformfv is available in GL version 2.0 or greater. -func (gl *GL) GetUniformfv(program glbase.Program, location glbase.Uniform, params []float32) { - var params_c [4]float32 - C.gl4_1core_glGetUniformfv(gl.funcs, C.GLuint(program), C.GLint(location), (*C.GLfloat)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetUniformLocation returns an integer that represents the location of a -// specific uniform variable within a program object. name must be an active -// uniform variable name in program that is not a structure, an array of -// structures, or a subcomponent of a vector or a matrix. This function -// returns -1 if name does not correspond to an active uniform variable in -// program or if name starts with the reserved prefix "gl_". -// -// Uniform variables that are structures or arrays of structures may be -// queried by calling GetUniformLocation for each field within the -// structure. The array element operator "[]" and the structure field -// operator "." may be used in name in order to select elements within an -// array or fields within a structure. The result of using these operators is -// not allowed to be another structure, an array of structures, or a -// subcomponent of a vector or a matrix. Except if the last part of name -// indicates a uniform variable array, the location of the first element of -// an array can be retrieved by using the name of the array, or by using the -// name appended by "[0]". -// -// The actual locations assigned to uniform variables are not known until the -// program object is linked successfully. After linking has occurred, the -// command GetUniformLocation can be used to obtain the location of a -// uniform variable. This location value can then be passed to Uniform to -// set the value of the uniform variable or to GetUniform in order to query -// the current value of the uniform variable. After a program object has been -// linked successfully, the index values for uniform variables remain fixed -// until the next link command occurs. Uniform variable locations and values -// can only be queried after a link if the link was successful. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program object. -// GL.INVALID_OPERATION is generated if program has not been successfully -// linked. GL.INVALID_OPERATION is generated if GetUniformLocation is executed -// between the execution of Begin and the corresponding execution of End. -// -// GetUniformLocation is available in GL version 2.0 or greater. -func (gl *GL) GetUniformLocation(program glbase.Program, name string) glbase.Uniform { - name_cstr := C.CString(name) - glresult := C.gl4_1core_glGetUniformLocation(gl.funcs, C.GLuint(program), (*C.GLchar)(name_cstr)) - C.free(unsafe.Pointer(name_cstr)) - return glbase.Uniform(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetShaderSource.xml -func (gl *GL) GetShaderSource(shader glbase.Shader, bufSize int32, length []int32, source []byte) { - C.gl4_1core_glGetShaderSource(gl.funcs, C.GLuint(shader), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLchar)(unsafe.Pointer(&source[0]))) -} - -// GetShaderInfoLog returns the information log for the specified shader -// object. The information log for a shader object is modified when the -// shader is compiled. -// -// The information log for a shader object is a string that may contain -// diagnostic messages, warning messages, and other information about the -// last compile operation. When a shader object is created, its information -// log will be a string of length 0, and the size of the current log can be -// obtained by calling GetShaderiv with the value GL.INFO_LOG_LENGTH. -// -// The information log for a shader object is the OpenGL implementer's -// primary mechanism for conveying information about the compilation process. -// Therefore, the information log can be helpful to application developers -// during the development process, even when compilation is successful. -// Application developers should not expect different OpenGL implementations -// to produce identical information logs. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader is not a shader -// object. GL.INVALID_VALUE is generated if maxLength is less than 0. -// GL.INVALID_OPERATION is generated if GetShaderInfoLog is executed -// between the execution of Begin and the corresponding execution of End. -// -// GetShaderInfoLog is available in GL version 2.0 or greater. -func (gl *GL) GetShaderInfoLog(shader glbase.Shader) []byte { - var params [1]int32 - var length int32 - gl.GetShaderiv(shader, INFO_LOG_LENGTH, params[:]) - bufSize := params[0] - infoLog := make([]byte, int(bufSize)) - C.gl4_1core_glGetShaderInfoLog(gl.funcs, C.GLuint(shader), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length)), (*C.GLchar)(unsafe.Pointer(&infoLog[0]))) - return infoLog -} - -// GetShaderiv GetShader returns in params the value of a parameter for a specific -// shader object. The following parameters are defined: -// -// GL.SHADER_TYPE -// params returns GL.VERTEX_SHADER if shader is a vertex shader object, -// and GL.FRAGMENT_SHADER if shader is a fragment shader object. -// -// GL.DELETE_STATUS -// params returns GL.TRUE if shader is currently flagged for deletion, -// and GL.FALSE otherwise. -// -// GL.COMPILE_STATUS -// params returns GL.TRUE if the last compile operation on shader was -// successful, and GL.FALSE otherwise. -// -// GL.INFO_LOG_LENGTH -// params returns the number of characters in the information log for -// shader including the null termination character (the size of the -// character buffer required to store the information log). If shader has -// no information log, a value of 0 is returned. -// -// GL.SHADER_SOURCE_LENGTH -// params returns the length of the concatenation of the source strings -// that make up the shader source for the shader, including the null -// termination character. (the size of the character buffer -// required to store the shader source). If no source code exists, 0 is -// returned. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader does not refer to a -// shader object. GL.INVALID_ENUM is generated if pname is not an accepted -// value. GL.INVALID_OPERATION is generated if GetShader is executed -// between the execution of Begin and the corresponding execution of End. -// -// GetShaderiv is available in GL version 2.0 or greater. -func (gl *GL) GetShaderiv(shader glbase.Shader, pname glbase.Enum, params []int32) { - var params_c [4]int32 - C.gl4_1core_glGetShaderiv(gl.funcs, C.GLuint(shader), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetProgramInfoLog returns the information log for the specified program -// object. The information log for a program object is modified when the -// program object is linked or validated. -// -// The information log for a program object is either an empty string, or a -// string containing information about the last link operation, or a string -// containing information about the last validation operation. It may contain -// diagnostic messages, warning messages, and other information. When a -// program object is created, its information log will be a string of length -// 0, and the size of the current log can be obtained by calling GetProgramiv -// with the value GL.INFO_LOG_LENGTH. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated -// by OpenGL. GL.INVALID_OPERATION is generated if program is not a -// program object. -func (gl *GL) GetProgramInfoLog(program glbase.Program) []byte { - var params [1]int32 - var length int32 - gl.GetProgramiv(program, INFO_LOG_LENGTH, params[:]) - bufSize := params[0] - infoLog := make([]byte, int(bufSize)) - C.gl4_1core_glGetProgramInfoLog(gl.funcs, C.GLuint(program), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length)), (*C.GLchar)(unsafe.Pointer(&infoLog[0]))) - return infoLog -} - -// GetProgramiv returns in params the value of a parameter for a specific -// program object. The following parameters are defined: -// -// GL.DELETE_STATUS -// params returns GL.TRUE if program is currently flagged for deletion, -// and GL.FALSE otherwise. -// -// GL.LINK_STATUS -// params returns GL.TRUE if the last link operation on program was -// successful, and GL.FALSE otherwise. -// -// GL.VALIDATE_STATUS -// params returns GL.TRUE or if the last validation operation on -// program was successful, and GL.FALSE otherwise. -// -// GL.INFO_LOG_LENGTH -// params returns the number of characters in the information log for -// program including the null termination character (the size of -// the character buffer required to store the information log). If -// program has no information log, a value of 0 is returned. -// -// GL.ATTACHED_SHADERS -// params returns the number of shader objects attached to program. -// -// GL.ACTIVE_ATTRIBUTES -// params returns the number of active attribute variables for program. -// -// GL.ACTIVE_ATTRIBUTE_MAX_LENGTH -// params returns the length of the longest active attribute name for -// program, including the null termination character (the size of -// the character buffer required to store the longest attribute name). -// If no active attributes exist, 0 is returned. -// -// GL.ACTIVE_UNIFORMS -// params returns the number of active uniform variables for program. -// -// GL.ACTIVE_UNIFORM_MAX_LENGTH -// params returns the length of the longest active uniform variable -// name for program, including the null termination character (i.e., -// the size of the character buffer required to store the longest -// uniform variable name). If no active uniform variables exist, 0 is -// returned. -// -// GL.TRANSFORM_FEEDBACK_BUFFER_MODE -// params returns a symbolic constant indicating the buffer mode used -// when transform feedback is active. This may be GL.SEPARATE_ATTRIBS -// or GL.INTERLEAVED_ATTRIBS. -// -// GL.TRANSFORM_FEEDBACK_VARYINGS -// params returns the number of varying variables to capture in transform -// feedback mode for the program. -// -// GL.TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH -// params returns the length of the longest variable name to be used for -// transform feedback, including the null-terminator. -// -// GL.GEOMETRY_VERTICES_OUT -// params returns the maximum number of vertices that the geometry shader in -// program will output. -// -// GL.GEOMETRY_INPUT_TYPE -// params returns a symbolic constant indicating the primitive type accepted -// as input to the geometry shader contained in program. -// -// GL.GEOMETRY_OUTPUT_TYPE -// params returns a symbolic constant indicating the primitive type that will -// be output by the geometry shader contained in program. -// -// GL.ACTIVE_UNIFORM_BLOCKS and GL.ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH are -// available only if the GL version 3.1 or greater. -// -// GL.GEOMETRY_VERTICES_OUT, GL.GEOMETRY_INPUT_TYPE and -// GL.GEOMETRY_OUTPUT_TYPE are accepted only if the GL version is 3.2 or -// greater. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program does not refer to a -// program object. GL.INVALID_OPERATION is generated if pname is -// GL.GEOMETRY_VERTICES_OUT, GL.GEOMETRY_INPUT_TYPE, or -// GL.GEOMETRY_OUTPUT_TYPE, and program does not contain a geometry shader. -// GL.INVALID_ENUM is generated if pname is not an accepted value. -func (gl *GL) GetProgramiv(program glbase.Program, pname glbase.Enum, params []int32) { - var params_c [4]int32 - C.gl4_1core_glGetProgramiv(gl.funcs, C.GLuint(program), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetAttribLocation queries the previously linked program object specified -// by program for the attribute variable specified by name and returns the -// index of the generic vertex attribute that is bound to that attribute -// variable. If name is a matrix attribute variable, the index of the first -// column of the matrix is returned. If the named attribute variable is not -// an active attribute in the specified program object or if name starts with -// the reserved prefix "gl_", a value of -1 is returned. -// -// The association between an attribute variable name and a generic attribute -// index can be specified at any time by calling BindAttribLocation. -// Attribute bindings do not go into effect until LinkProgram is called. -// After a program object has been linked successfully, the index values for -// attribute variables remain fixed until the next link command occurs. The -// attribute values can only be queried after a link if the link was -// successful. GetAttribLocation returns the binding that actually went -// into effect the last time LinkProgram was called for the specified -// program object. Attribute bindings that have been specified since the last -// link operation are not returned by GetAttribLocation. -// -// Error GL_INVALID_OPERATION is generated if program is not a value -// generated by OpenGL. GL_INVALID_OPERATION is generated if program is not -// a program object. GL_INVALID_OPERATION is generated if program has not -// been successfully linked. GL_INVALID_OPERATION is generated if -// GetAttribLocation is executed between the execution of Begin and the -// corresponding execution of End. -// -// GetAttribLocation is available in GL version 2.0 or greater. -func (gl *GL) GetAttribLocation(program glbase.Program, name string) glbase.Attrib { - name_cstr := C.CString(name) - glresult := C.gl4_1core_glGetAttribLocation(gl.funcs, C.GLuint(program), (*C.GLchar)(name_cstr)) - C.free(unsafe.Pointer(name_cstr)) - return glbase.Attrib(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetAttachedShaders.xml -func (gl *GL) GetAttachedShaders(program glbase.Program, maxCount int32, count []int, obj []uint32) { - C.gl4_1core_glGetAttachedShaders(gl.funcs, C.GLuint(program), C.GLsizei(maxCount), (*C.GLsizei)(unsafe.Pointer(&count[0])), (*C.GLuint)(unsafe.Pointer(&obj[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveUniform.xml -func (gl *GL) GetActiveUniform(program glbase.Program, index uint32, bufSize int32, length []int32, size []int, gltype []glbase.Enum, name []byte) { - C.gl4_1core_glGetActiveUniform(gl.funcs, C.GLuint(program), C.GLuint(index), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLint)(unsafe.Pointer(&size[0])), (*C.GLenum)(unsafe.Pointer(&gltype[0])), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveAttrib.xml -func (gl *GL) GetActiveAttrib(program glbase.Program, index glbase.Attrib, bufSize int32, length []int32, size []int, gltype []glbase.Enum, name []byte) { - C.gl4_1core_glGetActiveAttrib(gl.funcs, C.GLuint(program), C.GLuint(index), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLint)(unsafe.Pointer(&size[0])), (*C.GLenum)(unsafe.Pointer(&gltype[0])), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEnableVertexAttribArray.xml -func (gl *GL) EnableVertexAttribArray(index glbase.Attrib) { - C.gl4_1core_glEnableVertexAttribArray(gl.funcs, C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDisableVertexAttribArray.xml -func (gl *GL) DisableVertexAttribArray(index glbase.Attrib) { - C.gl4_1core_glDisableVertexAttribArray(gl.funcs, C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDetachShader.xml -func (gl *GL) DetachShader(program glbase.Program, shader glbase.Shader) { - C.gl4_1core_glDetachShader(gl.funcs, C.GLuint(program), C.GLuint(shader)) -} - -// DeleteShader frees the memory and invalidates the name associated with -// the shader object specified by shader. This command effectively undoes the -// effects of a call to CreateShader. -// -// If a shader object to be deleted is attached to a program object, it will -// be flagged for deletion, but it will not be deleted until it is no longer -// attached to any program object, for any rendering context (it must -// be detached from wherever it was attached before it will be deleted). A -// value of 0 for shader will be silently ignored. -// -// To determine whether an object has been flagged for deletion, call -// GetShader with arguments shader and GL.DELETE_STATUS. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. -// -// DeleteShader is available in GL version 2.0 or greater. -func (gl *GL) DeleteShader(shader glbase.Shader) { - C.gl4_1core_glDeleteShader(gl.funcs, C.GLuint(shader)) -} - -// DeleteProgram frees the memory and invalidates the name associated with -// the program object specified by program. This command effectively undoes -// the effects of a call to CreateProgram. -// -// If a program object is in use as part of current rendering state, it will -// be flagged for deletion, but it will not be deleted until it is no longer -// part of current state for any rendering context. If a program object to be -// deleted has shader objects attached to it, those shader objects will be -// automatically detached but not deleted unless they have already been -// flagged for deletion by a previous call to DeleteShader. A value of 0 -// for program will be silently ignored. -// -// To determine whether a program object has been flagged for deletion, call -// GetProgram with arguments program and GL.DELETE_STATUS. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. -// -// DeleteProgram is available in GL version 2.0 or greater. -func (gl *GL) DeleteProgram(program glbase.Program) { - C.gl4_1core_glDeleteProgram(gl.funcs, C.GLuint(program)) -} - -// CreateShader creates an empty shader object and returns a non-zero value -// by which it can be referenced. A shader object is used to maintain the -// source code strings that define a shader. shaderType indicates the type of -// shader to be created. -// -// Two types of shaders are supported. A shader of type GL.VERTEX_SHADER is a -// shader that is intended to run on the programmable vertex processor and -// replace the fixed functionality vertex processing in OpenGL. A shader of -// type GL.FRAGMENT_SHADER is a shader that is intended to run on the -// programmable fragment processor and replace the fixed functionality -// fragment processing in OpenGL. -// -// When created, a shader object's GL.SHADER_TYPE parameter is set to either -// GL.VERTEX_SHADER or GL.FRAGMENT_SHADER, depending on the value of -// shaderType. -// -// Like display lists and texture objects, the name space for shader objects -// may be shared across a set of contexts, as long as the server sides of the -// contexts share the same address space. If the name space is shared across -// contexts, any attached objects and the data associated with those attached -// objects are shared as well. -// -// This function returns 0 if an error occurs creating the shader object. -// -// Error GL.INVALID_ENUM is generated if shaderType is not an accepted value. -// GL.INVALID_OPERATION is generated if CreateShader is executed between the -// execution of Begin and the corresponding execution of End. -// -// CreateShader is available in GL version 2.0 or greater. -func (gl *GL) CreateShader(gltype glbase.Enum) glbase.Shader { - glresult := C.gl4_1core_glCreateShader(gl.funcs, C.GLenum(gltype)) - return glbase.Shader(glresult) -} - -// CreateProgram creates an empty program object and returns a non-zero -// value by which it can be referenced. A program object is an object to -// which shader objects can be attached. This provides a mechanism to specify -// the shader objects that will be linked to create a program. It also -// provides a means for checking the compatibility of the shaders that will -// be used to create a program (for instance, checking the compatibility -// between a vertex shader and a fragment shader). When no longer needed as -// part of a program object, shader objects can be detached. -// -// One or more executables are created in a program object by successfully -// attaching shader objects to it with AttachShader, successfully compiling -// the shader objects with CompileShader, and successfully linking the -// program object with LinkProgram. These executables are made part of -// current state when UseProgram is called. Program objects can be deleted -// by calling DeleteProgram. The memory associated with the program object -// will be deleted when it is no longer part of current rendering state for -// any context. -// -// Like display lists and texture objects, the name space for program objects -// may be shared across a set of contexts, as long as the server sides of the -// contexts share the same address space. If the name space is shared across -// contexts, any attached objects and the data associated with those attached -// objects are shared as well. -// -// Applications are responsible for providing the synchronization across API -// calls when objects are accessed from different execution threads. -// -// This function returns 0 if an error occurs creating the program object. -// -// Error GL.INVALID_OPERATION is generated if CreateProgram is executed -// between the execution of Begin and the corresponding execution of End. -// -// CreateProgram is available in GL version 2.0 or greater. -func (gl *GL) CreateProgram() glbase.Program { - glresult := C.gl4_1core_glCreateProgram(gl.funcs) - return glbase.Program(glresult) -} - -// CompileShader compiles the source code strings that have been stored in -// the shader object specified by shader. -// -// The compilation status will be stored as part of the shader object's -// state. This value will be set to GL.TRUE if the shader was compiled without -// errors and is ready for use, and GL.FALSE otherwise. It can be queried by -// calling GetShaderiv with arguments shader and GL.COMPILE_STATUS. -// -// Compilation of a shader can fail for a number of reasons as specified by -// the OpenGL Shading Language Specification. Whether or not the compilation -// was successful, information about the compilation can be obtained from the -// shader object's information log by calling GetShaderInfoLog. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader is not a shader -// object. GL.INVALID_OPERATION is generated if CompileShader is executed -// between the execution of Begin and the corresponding execution of End. -// -// CompileShader is available in GL version 2.0 or greater. -func (gl *GL) CompileShader(shader glbase.Shader) { - C.gl4_1core_glCompileShader(gl.funcs, C.GLuint(shader)) -} - -// BindAttribLocation associates a user-defined attribute variable in the program -// object specified by program with a generic vertex attribute index. The name -// parameter specifies the name of the vertex shader attribute variable to -// which index is to be bound. When program is made part of the current state, -// values provided via the generic vertex attribute index will modify the -// value of the user-defined attribute variable specified by name. -// -// If name refers to a matrix attribute variable, index refers to the first -// column of the matrix. Other matrix columns are then automatically bound to -// locations index+1 for a matrix of type mat2; index+1 and index+2 for a -// matrix of type mat3; and index+1, index+2, and index+3 for a matrix of -// type mat4. -// -// This command makes it possible for vertex shaders to use descriptive names -// for attribute variables rather than generic variables that are numbered -// from 0 to GL.MAX_VERTEX_ATTRIBS-1. The values sent to each generic -// attribute index are part of current state, just like standard vertex -// attributes such as color, normal, and vertex position. If a different -// program object is made current by calling UseProgram, the generic vertex -// attributes are tracked in such a way that the same values will be observed -// by attributes in the new program object that are also bound to index. -// -// Attribute variable name-to-generic attribute index bindings for a program -// object can be explicitly assigned at any time by calling -// BindAttribLocation. Attribute bindings do not go into effect until -// LinkProgram is called. After a program object has been linked -// successfully, the index values for generic attributes remain fixed (and -// their values can be queried) until the next link command occurs. -// -// Applications are not allowed to bind any of the standard OpenGL vertex -// attributes using this command, as they are bound automatically when -// needed. Any attribute binding that occurs after the program object has -// been linked will not take effect until the next time the program object is -// linked. -// -// If name was bound previously, that information is lost. Thus you cannot -// bind one user-defined attribute variable to multiple indices, but you can -// bind multiple user-defined attribute variables to the same index. -// -// Applications are allowed to bind more than one user-defined attribute -// variable to the same generic vertex attribute index. This is called -// aliasing, and it is allowed only if just one of the aliased attributes is -// active in the executable program, or if no path through the shader -// consumes more than one attribute of a set of attributes aliased to the -// same location. The compiler and linker are allowed to assume that no -// aliasing is done and are free to employ optimizations that work only in -// the absence of aliasing. OpenGL implementations are not required to do -// error checking to detect aliasing. Because there is no way to bind -// standard attributes, it is not possible to alias generic attributes with -// conventional ones (except for generic attribute 0). -// -// BindAttribLocation can be called before any vertex shader objects are -// bound to the specified program object. It is also permissible to bind a -// generic attribute index to an attribute variable name that is never used -// in a vertex shader. -// -// Active attributes that are not explicitly bound will be bound by the -// linker when LinkProgram is called. The locations assigned can be queried -// by calling GetAttribLocation. -// -// Error GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. -// GL.INVALID_OPERATION is generated if name starts with the reserved prefix "gl_". -// GL.INVALID_VALUE is generated if program is not a value generated by OpenGL. -// GL.INVALID_OPERATION is generated if program is not a program object. -// GL.INVALID_OPERATION is generated if BindAttribLocation is executed -// between the execution of Begin and the corresponding execution of End. -// -// BindAttribLocation is available in GL version 2.0 or greater. -func (gl *GL) BindAttribLocation(program glbase.Program, index glbase.Attrib, name string) { - name_cstr := C.CString(name) - C.gl4_1core_glBindAttribLocation(gl.funcs, C.GLuint(program), C.GLuint(index), (*C.GLchar)(name_cstr)) - C.free(unsafe.Pointer(name_cstr)) -} - -// AttachShader attaches a shader object to a program object. -// -// In order to create an executable, there must be a way to specify the list -// of things that will be linked together. Program objects provide this -// mechanism. Shaders that are to be linked together in a program object must -// first be attached to that program object. This indicates that shader will -// be included in link operations that will be performed on program. -// -// All operations that can be performed on a shader object are valid whether -// or not the shader object is attached to a program object. It is -// permissible to attach a shader object to a program object before source -// code has been loaded into the shader object or before the shader object -// has been compiled. It is permissible to attach multiple shader objects of -// the same type because each may contain a portion of the complete shader. -// It is also permissible to attach a shader object to more than one program -// object. If a shader object is deleted while it is attached to a program -// object, it will be flagged for deletion, and deletion will not occur until -// DetachShader is called to detach it from all program objects to which it -// is attached. -// -// Error GL.INVALID_VALUE is generated if either program or shader is not a -// value generated by OpenGL. GL.INVALID_OPERATION is generated if program -// is not a program object. GL.INVALID_OPERATION is generated if shader is -// not a shader object. GL.INVALID_OPERATION is generated if shader is -// already attached to program. GL.INVALID_OPERATION is generated if -// AttachShader is executed between the execution of Begin and the -// corresponding execution of End. -// -// AttachShader is available in GL version 2.0 or greater. -func (gl *GL) AttachShader(program glbase.Program, shader glbase.Shader) { - C.gl4_1core_glAttachShader(gl.funcs, C.GLuint(program), C.GLuint(shader)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glStencilMaskSeparate.xml -func (gl *GL) StencilMaskSeparate(face glbase.Enum, mask uint32) { - C.gl4_1core_glStencilMaskSeparate(gl.funcs, C.GLenum(face), C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glStencilFuncSeparate.xml -func (gl *GL) StencilFuncSeparate(face, glfunc glbase.Enum, ref int32, mask uint32) { - C.gl4_1core_glStencilFuncSeparate(gl.funcs, C.GLenum(face), C.GLenum(glfunc), C.GLint(ref), C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glStencilOpSeparate.xml -func (gl *GL) StencilOpSeparate(face, sfail, dpfail, dppass glbase.Enum) { - C.gl4_1core_glStencilOpSeparate(gl.funcs, C.GLenum(face), C.GLenum(sfail), C.GLenum(dpfail), C.GLenum(dppass)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawBuffers.xml -func (gl *GL) DrawBuffers(n int, bufs []glbase.Enum) { - C.gl4_1core_glDrawBuffers(gl.funcs, C.GLsizei(n), (*C.GLenum)(unsafe.Pointer(&bufs[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendEquationSeparate.xml -func (gl *GL) BlendEquationSeparate(modeRGB, modeAlpha glbase.Enum) { - C.gl4_1core_glBlendEquationSeparate(gl.funcs, C.GLenum(modeRGB), C.GLenum(modeAlpha)) -} - -// UniformMatrix4x3fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix4x3fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix4x3fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(4*3) != 0 { - panic("invalid value length for UniformMatrix4x3fv") - } - count := len(value) / (4 * 3) - C.gl4_1core_glUniformMatrix4x3fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix3x4fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix3x4fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix3x4fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(3*4) != 0 { - panic("invalid value length for UniformMatrix3x4fv") - } - count := len(value) / (3 * 4) - C.gl4_1core_glUniformMatrix3x4fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix4x2fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix4x2fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix4x2fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(4*2) != 0 { - panic("invalid value length for UniformMatrix4x2fv") - } - count := len(value) / (4 * 2) - C.gl4_1core_glUniformMatrix4x2fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix2x4fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix2x4fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix2x4fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(2*4) != 0 { - panic("invalid value length for UniformMatrix2x4fv") - } - count := len(value) / (2 * 4) - C.gl4_1core_glUniformMatrix2x4fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix3x2fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix3x2fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix3x2fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(3*2) != 0 { - panic("invalid value length for UniformMatrix3x2fv") - } - count := len(value) / (3 * 2) - C.gl4_1core_glUniformMatrix3x2fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix2x3fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix2x3fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix2x3fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(2*3) != 0 { - panic("invalid value length for UniformMatrix2x3fv") - } - count := len(value) / (2 * 3) - C.gl4_1core_glUniformMatrix2x3fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsVertexArray.xml -func (gl *GL) IsVertexArray(array uint32) bool { - glresult := C.gl4_1core_glIsVertexArray(gl.funcs, C.GLuint(array)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGenVertexArrays.xml -func (gl *GL) GenVertexArrays(n int, arrays []uint32) { - C.gl4_1core_glGenVertexArrays(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&arrays[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDeleteVertexArrays.xml -func (gl *GL) DeleteVertexArrays(n int, arrays []uint32) { - C.gl4_1core_glDeleteVertexArrays(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&arrays[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindVertexArray.xml -func (gl *GL) BindVertexArray(array uint32) { - C.gl4_1core_glBindVertexArray(gl.funcs, C.GLuint(array)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFlushMappedBufferRange.xml -func (gl *GL) FlushMappedBufferRange(target glbase.Enum, offset, length int) { - C.gl4_1core_glFlushMappedBufferRange(gl.funcs, C.GLenum(target), C.GLintptr(offset), C.GLsizeiptr(length)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFramebufferTextureLayer.xml -func (gl *GL) FramebufferTextureLayer(target, attachment glbase.Enum, texture glbase.Texture, level int, layer int32) { - C.gl4_1core_glFramebufferTextureLayer(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLuint(texture), C.GLint(level), C.GLint(layer)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRenderbufferStorageMultisample.xml -func (gl *GL) RenderbufferStorageMultisample(target glbase.Enum, samples int32, internalFormat glbase.Enum, width, height int) { - C.gl4_1core_glRenderbufferStorageMultisample(gl.funcs, C.GLenum(target), C.GLsizei(samples), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlitFramebuffer.xml -func (gl *GL) BlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1 int32, mask glbase.Bitfield, filter glbase.Enum) { - C.gl4_1core_glBlitFramebuffer(gl.funcs, C.GLint(srcX0), C.GLint(srcY0), C.GLint(srcX1), C.GLint(srcY1), C.GLint(dstX0), C.GLint(dstY0), C.GLint(dstX1), C.GLint(dstY1), C.GLbitfield(mask), C.GLenum(filter)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGenerateMipmap.xml -func (gl *GL) GenerateMipmap(target glbase.Enum) { - C.gl4_1core_glGenerateMipmap(gl.funcs, C.GLenum(target)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetFramebufferAttachmentParameteriv.xml -func (gl *GL) GetFramebufferAttachmentParameteriv(target, attachment, pname glbase.Enum, params []int32) { - C.gl4_1core_glGetFramebufferAttachmentParameteriv(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFramebufferRenderbuffer.xml -func (gl *GL) FramebufferRenderbuffer(target, attachment, renderbuffertarget glbase.Enum, renderbuffer glbase.Renderbuffer) { - C.gl4_1core_glFramebufferRenderbuffer(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(renderbuffertarget), C.GLuint(renderbuffer)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFramebufferTexture3D.xml -func (gl *GL) FramebufferTexture3D(target, attachment, textarget glbase.Enum, texture glbase.Texture, level int, zoffset int32) { - C.gl4_1core_glFramebufferTexture3D(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(textarget), C.GLuint(texture), C.GLint(level), C.GLint(zoffset)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFramebufferTexture2D.xml -func (gl *GL) FramebufferTexture2D(target, attachment, textarget glbase.Enum, texture glbase.Texture, level int) { - C.gl4_1core_glFramebufferTexture2D(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(textarget), C.GLuint(texture), C.GLint(level)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFramebufferTexture1D.xml -func (gl *GL) FramebufferTexture1D(target, attachment, textarget glbase.Enum, texture glbase.Texture, level int) { - C.gl4_1core_glFramebufferTexture1D(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(textarget), C.GLuint(texture), C.GLint(level)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCheckFramebufferStatus.xml -func (gl *GL) CheckFramebufferStatus(target glbase.Enum) glbase.Enum { - glresult := C.gl4_1core_glCheckFramebufferStatus(gl.funcs, C.GLenum(target)) - return glbase.Enum(glresult) -} - -// GenFramebuffers returns n framebuffer object names in ids. There is no -// guarantee that the names form a contiguous set of integers; however, it is -// guaranteed that none of the returned names was in use immediately before -// the call to GenFramebuffers. -// -// Framebuffer object names returned by a call to GenFramebuffers are not -// returned by subsequent calls, unless they are first deleted with -// DeleteFramebuffers. -// -// The names returned in ids are marked as used, for the purposes of -// GenFramebuffers only, but they acquire state and type only when they are -// first bound. -// -// Error GL.INVALID_VALUE is generated if n is negative. -func (gl *GL) GenFramebuffers(n int) []glbase.Framebuffer { - if n == 0 { - return nil - } - framebuffers := make([]glbase.Framebuffer, n) - C.gl4_1core_glGenFramebuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&framebuffers[0]))) - return framebuffers -} - -// DeleteFramebuffers deletes the framebuffer objects whose names are -// stored in the framebuffers slice. The name zero is reserved by the GL and -// is silently ignored, should it occur in framebuffers, as are other unused -// names. Once a framebuffer object is deleted, its name is again unused and -// it has no attachments. If a framebuffer that is currently bound to one or -// more of the targets GL.DRAW_FRAMEBUFFER or GL.READ_FRAMEBUFFER is deleted, -// it is as though BindFramebuffer had been executed with the corresponding -// target and framebuffer zero. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// DeleteFramebuffers is available in GL version 3.0 or greater. -func (gl *GL) DeleteFramebuffers(framebuffers []glbase.Framebuffer) { - n := len(framebuffers) - if n == 0 { - return - } - C.gl4_1core_glDeleteFramebuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&framebuffers[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindFramebuffer.xml -func (gl *GL) BindFramebuffer(target glbase.Enum, framebuffer glbase.Framebuffer) { - C.gl4_1core_glBindFramebuffer(gl.funcs, C.GLenum(target), C.GLuint(framebuffer)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsFramebuffer.xml -func (gl *GL) IsFramebuffer(framebuffer glbase.Framebuffer) bool { - glresult := C.gl4_1core_glIsFramebuffer(gl.funcs, C.GLuint(framebuffer)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetRenderbufferParameteriv.xml -func (gl *GL) GetRenderbufferParameteriv(target, pname glbase.Enum, params []int32) { - C.gl4_1core_glGetRenderbufferParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRenderbufferStorage.xml -func (gl *GL) RenderbufferStorage(target, internalFormat glbase.Enum, width, height int) { - C.gl4_1core_glRenderbufferStorage(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height)) -} - -// GenRenderbuffers returns n renderbuffer object names in renderbuffers. -// There is no guarantee that the names form a contiguous set of integers; -// however, it is guaranteed that none of the returned names was in use -// immediately before the call to GenRenderbuffers. -// -// Renderbuffer object names returned by a call to GenRenderbuffers are not -// returned by subsequent calls, unless they are first deleted with -// DeleteRenderbuffers. -// -// The names returned in renderbuffers are marked as used, for the purposes -// of GenRenderbuffers only, but they acquire state and type only when they -// are first bound. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// GenRenderbuffers is available in GL version 3.0 or greater. -func (gl *GL) GenRenderbuffers(n int) []glbase.Renderbuffer { - if n == 0 { - return nil - } - renderbuffers := make([]glbase.Renderbuffer, n) - C.gl4_1core_glGenRenderbuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&renderbuffers[0]))) - return renderbuffers -} - -// DeleteRenderbuffers deletes the renderbuffer objects whose names are stored -// in the renderbuffers slice. The name zero is reserved by the GL and -// is silently ignored, should it occur in renderbuffers, as are other unused -// names. Once a renderbuffer object is deleted, its name is again unused and -// it has no contents. If a renderbuffer that is currently bound to the -// target GL.RENDERBUFFER is deleted, it is as though BindRenderbuffer had -// been executed with a target of GL.RENDERBUFFER and a name of zero. -// -// If a renderbuffer object is attached to one or more attachment points in -// the currently bound framebuffer, then it as if FramebufferRenderbuffer -// had been called, with a renderbuffer of zero for each attachment point to -// which this image was attached in the currently bound framebuffer. In other -// words, this renderbuffer object is first detached from all attachment -// ponits in the currently bound framebuffer. Note that the renderbuffer -// image is specifically not detached from any non-bound framebuffers. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// DeleteRenderbuffers is available in GL version 3.0 or greater. -func (gl *GL) DeleteRenderbuffers(renderbuffers []glbase.Renderbuffer) { - n := len(renderbuffers) - if n == 0 { - return - } - C.gl4_1core_glDeleteRenderbuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&renderbuffers[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindRenderbuffer.xml -func (gl *GL) BindRenderbuffer(target glbase.Enum, renderbuffer glbase.Renderbuffer) { - C.gl4_1core_glBindRenderbuffer(gl.funcs, C.GLenum(target), C.GLuint(renderbuffer)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsRenderbuffer.xml -func (gl *GL) IsRenderbuffer(renderbuffer glbase.Renderbuffer) bool { - glresult := C.gl4_1core_glIsRenderbuffer(gl.funcs, C.GLuint(renderbuffer)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearBufferfi.xml -func (gl *GL) ClearBufferfi(buffer glbase.Enum, drawbuffer int32, depth float32, stencil int32) { - C.gl4_1core_glClearBufferfi(gl.funcs, C.GLenum(buffer), C.GLint(drawbuffer), C.GLfloat(depth), C.GLint(stencil)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearBufferfv.xml -func (gl *GL) ClearBufferfv(buffer glbase.Enum, drawbuffer int32, value []float32) { - C.gl4_1core_glClearBufferfv(gl.funcs, C.GLenum(buffer), C.GLint(drawbuffer), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearBufferuiv.xml -func (gl *GL) ClearBufferuiv(buffer glbase.Enum, drawbuffer int32, value []uint32) { - C.gl4_1core_glClearBufferuiv(gl.funcs, C.GLenum(buffer), C.GLint(drawbuffer), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearBufferiv.xml -func (gl *GL) ClearBufferiv(buffer glbase.Enum, drawbuffer int32, value []int32) { - C.gl4_1core_glClearBufferiv(gl.funcs, C.GLenum(buffer), C.GLint(drawbuffer), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexParameterIuiv.xml -func (gl *GL) GetTexParameterIuiv(target, pname glbase.Enum, params []uint32) { - C.gl4_1core_glGetTexParameterIuiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexParameterIiv.xml -func (gl *GL) GetTexParameterIiv(target, pname glbase.Enum, params []int32) { - C.gl4_1core_glGetTexParameterIiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexParameterIuiv.xml -func (gl *GL) TexParameterIuiv(target, pname glbase.Enum, params []uint32) { - C.gl4_1core_glTexParameterIuiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexParameterIiv.xml -func (gl *GL) TexParameterIiv(target, pname glbase.Enum, params []int32) { - C.gl4_1core_glTexParameterIiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// Uniform4uiv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform4uiv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4uiv(location glbase.Uniform, value []uint32) { - if len(value) == 0 { - return - } - if len(value)%4 != 0 { - panic("invalid value length for Uniform4uiv") - } - count := len(value) / 4 - C.gl4_1core_glUniform4uiv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// Uniform3uiv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform3uiv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3uiv(location glbase.Uniform, value []uint32) { - if len(value) == 0 { - return - } - if len(value)%3 != 0 { - panic("invalid value length for Uniform3uiv") - } - count := len(value) / 3 - C.gl4_1core_glUniform3uiv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// Uniform2uiv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform2uiv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2uiv(location glbase.Uniform, value []uint32) { - if len(value) == 0 { - return - } - if len(value)%2 != 0 { - panic("invalid value length for Uniform2uiv") - } - count := len(value) / 2 - C.gl4_1core_glUniform2uiv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// Uniform1uiv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform1uiv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1uiv(location glbase.Uniform, value []uint32) { - if len(value) == 0 { - return - } - count := len(value) - C.gl4_1core_glUniform1uiv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// Uniform4ui modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform4ui operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4ui(location glbase.Uniform, v0, v1, v2, v3 uint32) { - C.gl4_1core_glUniform4ui(gl.funcs, C.GLint(location), C.GLuint(v0), C.GLuint(v1), C.GLuint(v2), C.GLuint(v3)) -} - -// Uniform3ui modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform3ui operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3ui(location glbase.Uniform, v0, v1, v2 uint32) { - C.gl4_1core_glUniform3ui(gl.funcs, C.GLint(location), C.GLuint(v0), C.GLuint(v1), C.GLuint(v2)) -} - -// Uniform2ui modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform2ui operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2ui(location glbase.Uniform, v0, v1 uint32) { - C.gl4_1core_glUniform2ui(gl.funcs, C.GLint(location), C.GLuint(v0), C.GLuint(v1)) -} - -// Uniform1ui modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform1ui operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1ui(location glbase.Uniform, v0 uint32) { - C.gl4_1core_glUniform1ui(gl.funcs, C.GLint(location), C.GLuint(v0)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetFragDataLocation.xml -func (gl *GL) GetFragDataLocation(program glbase.Program, name []byte) int32 { - glresult := C.gl4_1core_glGetFragDataLocation(gl.funcs, C.GLuint(program), (*C.GLchar)(unsafe.Pointer(&name[0]))) - return int32(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindFragDataLocation.xml -func (gl *GL) BindFragDataLocation(program glbase.Program, color uint32, name []byte) { - C.gl4_1core_glBindFragDataLocation(gl.funcs, C.GLuint(program), C.GLuint(color), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetUniformuiv.xml -func (gl *GL) GetUniformuiv(program glbase.Program, location glbase.Uniform, params []uint32) { - C.gl4_1core_glGetUniformuiv(gl.funcs, C.GLuint(program), C.GLint(location), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetVertexAttribIuiv.xml -func (gl *GL) GetVertexAttribIuiv(index glbase.Attrib, pname glbase.Enum, params []uint32) { - C.gl4_1core_glGetVertexAttribIuiv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetVertexAttribIiv.xml -func (gl *GL) GetVertexAttribIiv(index glbase.Attrib, pname glbase.Enum, params []int32) { - C.gl4_1core_glGetVertexAttribIiv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribIPointer.xml -func (gl *GL) VertexAttribIPointer(index glbase.Attrib, size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl4_1core_glVertexAttribIPointer(gl.funcs, C.GLuint(index), C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEndConditionalRender.xml -func (gl *GL) EndConditionalRender() { - C.gl4_1core_glEndConditionalRender(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBeginConditionalRender.xml -func (gl *GL) BeginConditionalRender(id uint32, mode glbase.Enum) { - C.gl4_1core_glBeginConditionalRender(gl.funcs, C.GLuint(id), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClampColor.xml -func (gl *GL) ClampColor(target, clamp glbase.Enum) { - C.gl4_1core_glClampColor(gl.funcs, C.GLenum(target), C.GLenum(clamp)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTransformFeedbackVarying.xml -func (gl *GL) GetTransformFeedbackVarying(program glbase.Program, index uint32, bufSize int32, length []int32, size []int, gltype []glbase.Enum, name []byte) { - C.gl4_1core_glGetTransformFeedbackVarying(gl.funcs, C.GLuint(program), C.GLuint(index), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLsizei)(unsafe.Pointer(&size[0])), (*C.GLenum)(unsafe.Pointer(&gltype[0])), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindBufferBase.xml -func (gl *GL) BindBufferBase(target glbase.Enum, index uint32, buffer glbase.Buffer) { - C.gl4_1core_glBindBufferBase(gl.funcs, C.GLenum(target), C.GLuint(index), C.GLuint(buffer)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindBufferRange.xml -func (gl *GL) BindBufferRange(target glbase.Enum, index uint32, buffer glbase.Buffer, offset, size int) { - C.gl4_1core_glBindBufferRange(gl.funcs, C.GLenum(target), C.GLuint(index), C.GLuint(buffer), C.GLintptr(offset), C.GLsizeiptr(size)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEndTransformFeedback.xml -func (gl *GL) EndTransformFeedback() { - C.gl4_1core_glEndTransformFeedback(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBeginTransformFeedback.xml -func (gl *GL) BeginTransformFeedback(primitiveMode glbase.Enum) { - C.gl4_1core_glBeginTransformFeedback(gl.funcs, C.GLenum(primitiveMode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsEnabledi.xml -func (gl *GL) IsEnabledi(target glbase.Enum, index uint32) bool { - glresult := C.gl4_1core_glIsEnabledi(gl.funcs, C.GLenum(target), C.GLuint(index)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDisablei.xml -func (gl *GL) Disablei(target glbase.Enum, index uint32) { - C.gl4_1core_glDisablei(gl.funcs, C.GLenum(target), C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEnablei.xml -func (gl *GL) Enablei(target glbase.Enum, index uint32) { - C.gl4_1core_glEnablei(gl.funcs, C.GLenum(target), C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetIntegeri_v.xml -func (gl *GL) GetIntegeri_v(target glbase.Enum, index uint32, data []int32) { - C.gl4_1core_glGetIntegeri_v(gl.funcs, C.GLenum(target), C.GLuint(index), (*C.GLint)(unsafe.Pointer(&data[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetBooleani_v.xml -func (gl *GL) GetBooleani_v(target glbase.Enum, index uint32, data []bool) { - C.gl4_1core_glGetBooleani_v(gl.funcs, C.GLenum(target), C.GLuint(index), (*C.GLboolean)(unsafe.Pointer(&data[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorMaski.xml -func (gl *GL) ColorMaski(index uint32, r, g, b, a bool) { - C.gl4_1core_glColorMaski(gl.funcs, C.GLuint(index), *(*C.GLboolean)(unsafe.Pointer(&r)), *(*C.GLboolean)(unsafe.Pointer(&g)), *(*C.GLboolean)(unsafe.Pointer(&b)), *(*C.GLboolean)(unsafe.Pointer(&a))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyBufferSubData.xml -func (gl *GL) CopyBufferSubData(readTarget, writeTarget glbase.Enum, readOffset, writeOffset, size int) { - C.gl4_1core_glCopyBufferSubData(gl.funcs, C.GLenum(readTarget), C.GLenum(writeTarget), C.GLintptr(readOffset), C.GLintptr(writeOffset), C.GLsizeiptr(size)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformBlockBinding.xml -func (gl *GL) UniformBlockBinding(program glbase.Program, v0, v1 uint32) { - C.gl4_1core_glUniformBlockBinding(gl.funcs, C.GLuint(program), C.GLuint(v0), C.GLuint(v1)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveUniformBlockName.xml -func (gl *GL) GetActiveUniformBlockName(program glbase.Program, uniformBlockIndex uint32, bufSize int32, length []int32, uniformBlockName []byte) { - C.gl4_1core_glGetActiveUniformBlockName(gl.funcs, C.GLuint(program), C.GLuint(uniformBlockIndex), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLchar)(unsafe.Pointer(&uniformBlockName[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveUniformBlockiv.xml -func (gl *GL) GetActiveUniformBlockiv(program glbase.Program, uniformBlockIndex uint32, pname glbase.Enum, params []int32) { - C.gl4_1core_glGetActiveUniformBlockiv(gl.funcs, C.GLuint(program), C.GLuint(uniformBlockIndex), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetUniformBlockIndex.xml -func (gl *GL) GetUniformBlockIndex(program glbase.Program, uniformBlockName []byte) uint32 { - glresult := C.gl4_1core_glGetUniformBlockIndex(gl.funcs, C.GLuint(program), (*C.GLchar)(unsafe.Pointer(&uniformBlockName[0]))) - return uint32(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveUniformName.xml -func (gl *GL) GetActiveUniformName(program glbase.Program, uniformIndex uint32, bufSize int32, length []int32, uniformName []byte) { - C.gl4_1core_glGetActiveUniformName(gl.funcs, C.GLuint(program), C.GLuint(uniformIndex), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLchar)(unsafe.Pointer(&uniformName[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveUniformsiv.xml -func (gl *GL) GetActiveUniformsiv(program glbase.Program, uniformCount int32, uniformIndices []uint32, pname glbase.Enum, params []int32) { - C.gl4_1core_glGetActiveUniformsiv(gl.funcs, C.GLuint(program), C.GLsizei(uniformCount), (*C.GLuint)(unsafe.Pointer(&uniformIndices[0])), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPrimitiveRestartIndex.xml -func (gl *GL) PrimitiveRestartIndex(index uint32) { - C.gl4_1core_glPrimitiveRestartIndex(gl.funcs, C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexBuffer.xml -func (gl *GL) TexBuffer(target, internalFormat glbase.Enum, buffer glbase.Buffer) { - C.gl4_1core_glTexBuffer(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLuint(buffer)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawElementsInstanced.xml -func (gl *GL) DrawElementsInstanced(mode glbase.Enum, count int, gltype glbase.Enum, indices interface{}, instancecount int32) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl4_1core_glDrawElementsInstanced(gl.funcs, C.GLenum(mode), C.GLsizei(count), C.GLenum(gltype), indices_ptr, C.GLsizei(instancecount)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawArraysInstanced.xml -func (gl *GL) DrawArraysInstanced(mode glbase.Enum, first, count int, instancecount int32) { - C.gl4_1core_glDrawArraysInstanced(gl.funcs, C.GLenum(mode), C.GLint(first), C.GLsizei(count), C.GLsizei(instancecount)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSampleMaski.xml -func (gl *GL) SampleMaski(index uint32, mask glbase.Bitfield) { - C.gl4_1core_glSampleMaski(gl.funcs, C.GLuint(index), C.GLbitfield(mask)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetMultisamplefv.xml -func (gl *GL) GetMultisamplefv(pname glbase.Enum, index uint32, val []float32) { - C.gl4_1core_glGetMultisamplefv(gl.funcs, C.GLenum(pname), C.GLuint(index), (*C.GLfloat)(unsafe.Pointer(&val[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexImage3DMultisample.xml -func (gl *GL) TexImage3DMultisample(target glbase.Enum, samples, internalFormat int32, width, height int, depth int32, fixedsamplelocations bool) { - C.gl4_1core_glTexImage3DMultisample(gl.funcs, C.GLenum(target), C.GLsizei(samples), C.GLint(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), *(*C.GLboolean)(unsafe.Pointer(&fixedsamplelocations))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexImage2DMultisample.xml -func (gl *GL) TexImage2DMultisample(target glbase.Enum, samples, internalFormat int32, width, height int, fixedsamplelocations bool) { - C.gl4_1core_glTexImage2DMultisample(gl.funcs, C.GLenum(target), C.GLsizei(samples), C.GLint(internalFormat), C.GLsizei(width), C.GLsizei(height), *(*C.GLboolean)(unsafe.Pointer(&fixedsamplelocations))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetSynciv.xml -func (gl *GL) GetSynciv(sync glbase.Sync, pname glbase.Enum, bufSize int32, length, values []int32) { - C.gl4_1core_glGetSynciv(gl.funcs, C.GLsync(unsafe.Pointer(sync)), C.GLenum(pname), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLint)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetInteger64v.xml -func (gl *GL) GetInteger64v(pname glbase.Enum, params []int64) { - C.gl4_1core_glGetInteger64v(gl.funcs, C.GLenum(pname), (*C.GLint64)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWaitSync.xml -func (gl *GL) WaitSync(sync glbase.Sync, flags glbase.Bitfield, timeout uint64) { - C.gl4_1core_glWaitSync(gl.funcs, C.GLsync(unsafe.Pointer(sync)), C.GLbitfield(flags), C.GLuint64(timeout)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClientWaitSync.xml -func (gl *GL) ClientWaitSync(sync glbase.Sync, flags glbase.Bitfield, timeout uint64) glbase.Enum { - glresult := C.gl4_1core_glClientWaitSync(gl.funcs, C.GLsync(unsafe.Pointer(sync)), C.GLbitfield(flags), C.GLuint64(timeout)) - return glbase.Enum(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDeleteSync.xml -func (gl *GL) DeleteSync(sync glbase.Sync) { - C.gl4_1core_glDeleteSync(gl.funcs, C.GLsync(unsafe.Pointer(sync))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsSync.xml -func (gl *GL) IsSync(sync glbase.Sync) bool { - glresult := C.gl4_1core_glIsSync(gl.funcs, C.GLsync(unsafe.Pointer(sync))) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFenceSync.xml -func (gl *GL) FenceSync(condition glbase.Enum, flags glbase.Bitfield) glbase.Sync { - glresult := C.gl4_1core_glFenceSync(gl.funcs, C.GLenum(condition), C.GLbitfield(flags)) - return glbase.Sync(unsafe.Pointer(glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProvokingVertex.xml -func (gl *GL) ProvokingVertex(mode glbase.Enum) { - C.gl4_1core_glProvokingVertex(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawElementsInstancedBaseVertex.xml -func (gl *GL) DrawElementsInstancedBaseVertex(mode glbase.Enum, count int, gltype glbase.Enum, indices interface{}, instancecount, basevertex int32) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl4_1core_glDrawElementsInstancedBaseVertex(gl.funcs, C.GLenum(mode), C.GLsizei(count), C.GLenum(gltype), indices_ptr, C.GLsizei(instancecount), C.GLint(basevertex)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawRangeElementsBaseVertex.xml -func (gl *GL) DrawRangeElementsBaseVertex(mode glbase.Enum, start, end uint32, count int, gltype glbase.Enum, indices interface{}, basevertex int32) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl4_1core_glDrawRangeElementsBaseVertex(gl.funcs, C.GLenum(mode), C.GLuint(start), C.GLuint(end), C.GLsizei(count), C.GLenum(gltype), indices_ptr, C.GLint(basevertex)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawElementsBaseVertex.xml -func (gl *GL) DrawElementsBaseVertex(mode glbase.Enum, count int, gltype glbase.Enum, indices interface{}, basevertex int32) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl4_1core_glDrawElementsBaseVertex(gl.funcs, C.GLenum(mode), C.GLsizei(count), C.GLenum(gltype), indices_ptr, C.GLint(basevertex)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFramebufferTexture.xml -func (gl *GL) FramebufferTexture(target, attachment glbase.Enum, texture glbase.Texture, level int) { - C.gl4_1core_glFramebufferTexture(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLuint(texture), C.GLint(level)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetBufferParameteri64v.xml -func (gl *GL) GetBufferParameteri64v(target, pname glbase.Enum, params []int64) { - C.gl4_1core_glGetBufferParameteri64v(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint64)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetInteger64i_v.xml -func (gl *GL) GetInteger64i_v(target glbase.Enum, index uint32, data []int64) { - C.gl4_1core_glGetInteger64i_v(gl.funcs, C.GLenum(target), C.GLuint(index), (*C.GLint64)(unsafe.Pointer(&data[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribP4uiv.xml -func (gl *GL) VertexAttribP4uiv(index glbase.Attrib, gltype glbase.Enum, normalized bool, value []uint32) { - C.gl4_1core_glVertexAttribP4uiv(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribP4ui.xml -func (gl *GL) VertexAttribP4ui(index glbase.Attrib, gltype glbase.Enum, normalized bool, value uint32) { - C.gl4_1core_glVertexAttribP4ui(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribP3uiv.xml -func (gl *GL) VertexAttribP3uiv(index glbase.Attrib, gltype glbase.Enum, normalized bool, value []uint32) { - C.gl4_1core_glVertexAttribP3uiv(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribP3ui.xml -func (gl *GL) VertexAttribP3ui(index glbase.Attrib, gltype glbase.Enum, normalized bool, value uint32) { - C.gl4_1core_glVertexAttribP3ui(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribP2uiv.xml -func (gl *GL) VertexAttribP2uiv(index glbase.Attrib, gltype glbase.Enum, normalized bool, value []uint32) { - C.gl4_1core_glVertexAttribP2uiv(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribP2ui.xml -func (gl *GL) VertexAttribP2ui(index glbase.Attrib, gltype glbase.Enum, normalized bool, value uint32) { - C.gl4_1core_glVertexAttribP2ui(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribP1uiv.xml -func (gl *GL) VertexAttribP1uiv(index glbase.Attrib, gltype glbase.Enum, normalized bool, value []uint32) { - C.gl4_1core_glVertexAttribP1uiv(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribP1ui.xml -func (gl *GL) VertexAttribP1ui(index glbase.Attrib, gltype glbase.Enum, normalized bool, value uint32) { - C.gl4_1core_glVertexAttribP1ui(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColorP3uiv.xml -func (gl *GL) SecondaryColorP3uiv(gltype glbase.Enum, color []uint32) { - C.gl4_1core_glSecondaryColorP3uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&color[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColorP3ui.xml -func (gl *GL) SecondaryColorP3ui(gltype glbase.Enum, color uint32) { - C.gl4_1core_glSecondaryColorP3ui(gl.funcs, C.GLenum(gltype), C.GLuint(color)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorP4uiv.xml -func (gl *GL) ColorP4uiv(gltype glbase.Enum, color []uint32) { - C.gl4_1core_glColorP4uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&color[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorP4ui.xml -func (gl *GL) ColorP4ui(gltype glbase.Enum, color uint32) { - C.gl4_1core_glColorP4ui(gl.funcs, C.GLenum(gltype), C.GLuint(color)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorP3uiv.xml -func (gl *GL) ColorP3uiv(gltype glbase.Enum, color []uint32) { - C.gl4_1core_glColorP3uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&color[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorP3ui.xml -func (gl *GL) ColorP3ui(gltype glbase.Enum, color uint32) { - C.gl4_1core_glColorP3ui(gl.funcs, C.GLenum(gltype), C.GLuint(color)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glNormalP3uiv.xml -func (gl *GL) NormalP3uiv(gltype glbase.Enum, coords []uint32) { - C.gl4_1core_glNormalP3uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glNormalP3ui.xml -func (gl *GL) NormalP3ui(gltype glbase.Enum, coords uint32) { - C.gl4_1core_glNormalP3ui(gl.funcs, C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoordP4uiv.xml -func (gl *GL) MultiTexCoordP4uiv(texture, gltype glbase.Enum, coords []uint32) { - C.gl4_1core_glMultiTexCoordP4uiv(gl.funcs, C.GLenum(texture), C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoordP4ui.xml -func (gl *GL) MultiTexCoordP4ui(texture, gltype glbase.Enum, coords uint32) { - C.gl4_1core_glMultiTexCoordP4ui(gl.funcs, C.GLenum(texture), C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoordP3uiv.xml -func (gl *GL) MultiTexCoordP3uiv(texture, gltype glbase.Enum, coords []uint32) { - C.gl4_1core_glMultiTexCoordP3uiv(gl.funcs, C.GLenum(texture), C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoordP3ui.xml -func (gl *GL) MultiTexCoordP3ui(texture, gltype glbase.Enum, coords uint32) { - C.gl4_1core_glMultiTexCoordP3ui(gl.funcs, C.GLenum(texture), C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoordP2uiv.xml -func (gl *GL) MultiTexCoordP2uiv(texture, gltype glbase.Enum, coords []uint32) { - C.gl4_1core_glMultiTexCoordP2uiv(gl.funcs, C.GLenum(texture), C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoordP2ui.xml -func (gl *GL) MultiTexCoordP2ui(texture, gltype glbase.Enum, coords uint32) { - C.gl4_1core_glMultiTexCoordP2ui(gl.funcs, C.GLenum(texture), C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoordP1uiv.xml -func (gl *GL) MultiTexCoordP1uiv(texture, gltype glbase.Enum, coords []uint32) { - C.gl4_1core_glMultiTexCoordP1uiv(gl.funcs, C.GLenum(texture), C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoordP1ui.xml -func (gl *GL) MultiTexCoordP1ui(texture, gltype glbase.Enum, coords uint32) { - C.gl4_1core_glMultiTexCoordP1ui(gl.funcs, C.GLenum(texture), C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordP4uiv.xml -func (gl *GL) TexCoordP4uiv(gltype glbase.Enum, coords []uint32) { - C.gl4_1core_glTexCoordP4uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordP4ui.xml -func (gl *GL) TexCoordP4ui(gltype glbase.Enum, coords uint32) { - C.gl4_1core_glTexCoordP4ui(gl.funcs, C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordP3uiv.xml -func (gl *GL) TexCoordP3uiv(gltype glbase.Enum, coords []uint32) { - C.gl4_1core_glTexCoordP3uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordP3ui.xml -func (gl *GL) TexCoordP3ui(gltype glbase.Enum, coords uint32) { - C.gl4_1core_glTexCoordP3ui(gl.funcs, C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordP2uiv.xml -func (gl *GL) TexCoordP2uiv(gltype glbase.Enum, coords []uint32) { - C.gl4_1core_glTexCoordP2uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordP2ui.xml -func (gl *GL) TexCoordP2ui(gltype glbase.Enum, coords uint32) { - C.gl4_1core_glTexCoordP2ui(gl.funcs, C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordP1uiv.xml -func (gl *GL) TexCoordP1uiv(gltype glbase.Enum, coords []uint32) { - C.gl4_1core_glTexCoordP1uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordP1ui.xml -func (gl *GL) TexCoordP1ui(gltype glbase.Enum, coords uint32) { - C.gl4_1core_glTexCoordP1ui(gl.funcs, C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexP4uiv.xml -func (gl *GL) VertexP4uiv(gltype glbase.Enum, value []uint32) { - C.gl4_1core_glVertexP4uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexP4ui.xml -func (gl *GL) VertexP4ui(gltype glbase.Enum, value uint32) { - C.gl4_1core_glVertexP4ui(gl.funcs, C.GLenum(gltype), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexP3uiv.xml -func (gl *GL) VertexP3uiv(gltype glbase.Enum, value []uint32) { - C.gl4_1core_glVertexP3uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexP3ui.xml -func (gl *GL) VertexP3ui(gltype glbase.Enum, value uint32) { - C.gl4_1core_glVertexP3ui(gl.funcs, C.GLenum(gltype), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexP2uiv.xml -func (gl *GL) VertexP2uiv(gltype glbase.Enum, value []uint32) { - C.gl4_1core_glVertexP2uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexP2ui.xml -func (gl *GL) VertexP2ui(gltype glbase.Enum, value uint32) { - C.gl4_1core_glVertexP2ui(gl.funcs, C.GLenum(gltype), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetQueryObjectui64v.xml -func (gl *GL) GetQueryObjectui64v(id uint32, pname glbase.Enum, params []uint64) { - C.gl4_1core_glGetQueryObjectui64v(gl.funcs, C.GLuint(id), C.GLenum(pname), (*C.GLuint64)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetQueryObjecti64v.xml -func (gl *GL) GetQueryObjecti64v(id uint32, pname glbase.Enum, params []int64) { - C.gl4_1core_glGetQueryObjecti64v(gl.funcs, C.GLuint(id), C.GLenum(pname), (*C.GLint64)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glQueryCounter.xml -func (gl *GL) QueryCounter(id uint32, target glbase.Enum) { - C.gl4_1core_glQueryCounter(gl.funcs, C.GLuint(id), C.GLenum(target)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetSamplerParameterIuiv.xml -func (gl *GL) GetSamplerParameterIuiv(sampler uint32, pname glbase.Enum, params []uint32) { - C.gl4_1core_glGetSamplerParameterIuiv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetSamplerParameterfv.xml -func (gl *GL) GetSamplerParameterfv(sampler uint32, pname glbase.Enum, params []float32) { - C.gl4_1core_glGetSamplerParameterfv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetSamplerParameterIiv.xml -func (gl *GL) GetSamplerParameterIiv(sampler uint32, pname glbase.Enum, params []int32) { - C.gl4_1core_glGetSamplerParameterIiv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetSamplerParameteriv.xml -func (gl *GL) GetSamplerParameteriv(sampler uint32, pname glbase.Enum, params []int32) { - C.gl4_1core_glGetSamplerParameteriv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSamplerParameterIuiv.xml -func (gl *GL) SamplerParameterIuiv(sampler uint32, pname glbase.Enum, param []uint32) { - C.gl4_1core_glSamplerParameterIuiv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶m[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSamplerParameterIiv.xml -func (gl *GL) SamplerParameterIiv(sampler uint32, pname glbase.Enum, param []int32) { - C.gl4_1core_glSamplerParameterIiv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶m[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSamplerParameterfv.xml -func (gl *GL) SamplerParameterfv(sampler uint32, pname glbase.Enum, param []float32) { - C.gl4_1core_glSamplerParameterfv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶m[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSamplerParameterf.xml -func (gl *GL) SamplerParameterf(sampler uint32, pname glbase.Enum, param float32) { - C.gl4_1core_glSamplerParameterf(gl.funcs, C.GLuint(sampler), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSamplerParameteriv.xml -func (gl *GL) SamplerParameteriv(sampler uint32, pname glbase.Enum, param []int32) { - C.gl4_1core_glSamplerParameteriv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶m[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSamplerParameteri.xml -func (gl *GL) SamplerParameteri(sampler uint32, pname glbase.Enum, param int32) { - C.gl4_1core_glSamplerParameteri(gl.funcs, C.GLuint(sampler), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindSampler.xml -func (gl *GL) BindSampler(unit, sampler uint32) { - C.gl4_1core_glBindSampler(gl.funcs, C.GLuint(unit), C.GLuint(sampler)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsSampler.xml -func (gl *GL) IsSampler(sampler uint32) bool { - glresult := C.gl4_1core_glIsSampler(gl.funcs, C.GLuint(sampler)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDeleteSamplers.xml -func (gl *GL) DeleteSamplers(count int, samplers []uint32) { - C.gl4_1core_glDeleteSamplers(gl.funcs, C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&samplers[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGenSamplers.xml -func (gl *GL) GenSamplers(count int, samplers []uint32) { - C.gl4_1core_glGenSamplers(gl.funcs, C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&samplers[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetFragDataIndex.xml -func (gl *GL) GetFragDataIndex(program glbase.Program, name []byte) int32 { - glresult := C.gl4_1core_glGetFragDataIndex(gl.funcs, C.GLuint(program), (*C.GLchar)(unsafe.Pointer(&name[0]))) - return int32(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindFragDataLocationIndexed.xml -func (gl *GL) BindFragDataLocationIndexed(program glbase.Program, colorNumber, index uint32, name []byte) { - C.gl4_1core_glBindFragDataLocationIndexed(gl.funcs, C.GLuint(program), C.GLuint(colorNumber), C.GLuint(index), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribDivisor.xml -func (gl *GL) VertexAttribDivisor(index glbase.Attrib, divisor uint32) { - C.gl4_1core_glVertexAttribDivisor(gl.funcs, C.GLuint(index), C.GLuint(divisor)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetQueryIndexediv.xml -func (gl *GL) GetQueryIndexediv(target glbase.Enum, index uint32, pname glbase.Enum, params []int32) { - C.gl4_1core_glGetQueryIndexediv(gl.funcs, C.GLenum(target), C.GLuint(index), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEndQueryIndexed.xml -func (gl *GL) EndQueryIndexed(target glbase.Enum, index uint32) { - C.gl4_1core_glEndQueryIndexed(gl.funcs, C.GLenum(target), C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBeginQueryIndexed.xml -func (gl *GL) BeginQueryIndexed(target glbase.Enum, index, id uint32) { - C.gl4_1core_glBeginQueryIndexed(gl.funcs, C.GLenum(target), C.GLuint(index), C.GLuint(id)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawTransformFeedbackStream.xml -func (gl *GL) DrawTransformFeedbackStream(mode glbase.Enum, id, stream uint32) { - C.gl4_1core_glDrawTransformFeedbackStream(gl.funcs, C.GLenum(mode), C.GLuint(id), C.GLuint(stream)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawTransformFeedback.xml -func (gl *GL) DrawTransformFeedback(mode glbase.Enum, id uint32) { - C.gl4_1core_glDrawTransformFeedback(gl.funcs, C.GLenum(mode), C.GLuint(id)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glResumeTransformFeedback.xml -func (gl *GL) ResumeTransformFeedback() { - C.gl4_1core_glResumeTransformFeedback(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPauseTransformFeedback.xml -func (gl *GL) PauseTransformFeedback() { - C.gl4_1core_glPauseTransformFeedback(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsTransformFeedback.xml -func (gl *GL) IsTransformFeedback(id uint32) bool { - glresult := C.gl4_1core_glIsTransformFeedback(gl.funcs, C.GLuint(id)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGenTransformFeedbacks.xml -func (gl *GL) GenTransformFeedbacks(n int, ids []uint32) { - C.gl4_1core_glGenTransformFeedbacks(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&ids[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDeleteTransformFeedbacks.xml -func (gl *GL) DeleteTransformFeedbacks(n int, ids []uint32) { - C.gl4_1core_glDeleteTransformFeedbacks(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&ids[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindTransformFeedback.xml -func (gl *GL) BindTransformFeedback(target glbase.Enum, id uint32) { - C.gl4_1core_glBindTransformFeedback(gl.funcs, C.GLenum(target), C.GLuint(id)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPatchParameterfv.xml -func (gl *GL) PatchParameterfv(pname glbase.Enum, values []float32) { - C.gl4_1core_glPatchParameterfv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPatchParameteri.xml -func (gl *GL) PatchParameteri(pname glbase.Enum, value int32) { - C.gl4_1core_glPatchParameteri(gl.funcs, C.GLenum(pname), C.GLint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetProgramStageiv.xml -func (gl *GL) GetProgramStageiv(program glbase.Program, shadertype, pname glbase.Enum, values []int32) { - C.gl4_1core_glGetProgramStageiv(gl.funcs, C.GLuint(program), C.GLenum(shadertype), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetUniformSubroutineuiv.xml -func (gl *GL) GetUniformSubroutineuiv(shadertype glbase.Enum, location glbase.Uniform, params []uint32) { - C.gl4_1core_glGetUniformSubroutineuiv(gl.funcs, C.GLenum(shadertype), C.GLint(location), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformSubroutinesuiv.xml -func (gl *GL) UniformSubroutinesuiv(shadertype glbase.Enum, count int, value []uint32) { - C.gl4_1core_glUniformSubroutinesuiv(gl.funcs, C.GLenum(shadertype), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveSubroutineName.xml -func (gl *GL) GetActiveSubroutineName(program glbase.Program, shadertype glbase.Enum, index uint32, bufSize int32, length []int32, name []byte) { - C.gl4_1core_glGetActiveSubroutineName(gl.funcs, C.GLuint(program), C.GLenum(shadertype), C.GLuint(index), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveSubroutineUniformName.xml -func (gl *GL) GetActiveSubroutineUniformName(program glbase.Program, shadertype glbase.Enum, index uint32, bufSize int32, length []int32, name []byte) { - C.gl4_1core_glGetActiveSubroutineUniformName(gl.funcs, C.GLuint(program), C.GLenum(shadertype), C.GLuint(index), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveSubroutineUniformiv.xml -func (gl *GL) GetActiveSubroutineUniformiv(program glbase.Program, shadertype glbase.Enum, index uint32, pname glbase.Enum, values []int32) { - C.gl4_1core_glGetActiveSubroutineUniformiv(gl.funcs, C.GLuint(program), C.GLenum(shadertype), C.GLuint(index), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetSubroutineIndex.xml -func (gl *GL) GetSubroutineIndex(program glbase.Program, shadertype glbase.Enum, name []byte) uint32 { - glresult := C.gl4_1core_glGetSubroutineIndex(gl.funcs, C.GLuint(program), C.GLenum(shadertype), (*C.GLchar)(unsafe.Pointer(&name[0]))) - return uint32(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetSubroutineUniformLocation.xml -func (gl *GL) GetSubroutineUniformLocation(program glbase.Program, shadertype glbase.Enum, name []byte) int32 { - glresult := C.gl4_1core_glGetSubroutineUniformLocation(gl.funcs, C.GLuint(program), C.GLenum(shadertype), (*C.GLchar)(unsafe.Pointer(&name[0]))) - return int32(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetUniformdv.xml -func (gl *GL) GetUniformdv(program glbase.Program, location glbase.Uniform, params []float64) { - C.gl4_1core_glGetUniformdv(gl.funcs, C.GLuint(program), C.GLint(location), (*C.GLdouble)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix4x3dv.xml -func (gl *GL) UniformMatrix4x3dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_1core_glUniformMatrix4x3dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix4x2dv.xml -func (gl *GL) UniformMatrix4x2dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_1core_glUniformMatrix4x2dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix3x4dv.xml -func (gl *GL) UniformMatrix3x4dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_1core_glUniformMatrix3x4dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix3x2dv.xml -func (gl *GL) UniformMatrix3x2dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_1core_glUniformMatrix3x2dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix2x4dv.xml -func (gl *GL) UniformMatrix2x4dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_1core_glUniformMatrix2x4dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix2x3dv.xml -func (gl *GL) UniformMatrix2x3dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_1core_glUniformMatrix2x3dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix4dv.xml -func (gl *GL) UniformMatrix4dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_1core_glUniformMatrix4dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix3dv.xml -func (gl *GL) UniformMatrix3dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_1core_glUniformMatrix3dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix2dv.xml -func (gl *GL) UniformMatrix2dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_1core_glUniformMatrix2dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniform4dv.xml -func (gl *GL) Uniform4dv(location glbase.Uniform, count int, value []float64) { - C.gl4_1core_glUniform4dv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniform3dv.xml -func (gl *GL) Uniform3dv(location glbase.Uniform, count int, value []float64) { - C.gl4_1core_glUniform3dv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniform2dv.xml -func (gl *GL) Uniform2dv(location glbase.Uniform, count int, value []float64) { - C.gl4_1core_glUniform2dv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniform1dv.xml -func (gl *GL) Uniform1dv(location glbase.Uniform, count int, value []float64) { - C.gl4_1core_glUniform1dv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniform4d.xml -func (gl *GL) Uniform4d(location glbase.Uniform, v0, v1, v2, v3 float64) { - C.gl4_1core_glUniform4d(gl.funcs, C.GLint(location), C.GLdouble(v0), C.GLdouble(v1), C.GLdouble(v2), C.GLdouble(v3)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniform3d.xml -func (gl *GL) Uniform3d(location glbase.Uniform, v0, v1, v2 float64) { - C.gl4_1core_glUniform3d(gl.funcs, C.GLint(location), C.GLdouble(v0), C.GLdouble(v1), C.GLdouble(v2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniform2d.xml -func (gl *GL) Uniform2d(location glbase.Uniform, v0, v1 float64) { - C.gl4_1core_glUniform2d(gl.funcs, C.GLint(location), C.GLdouble(v0), C.GLdouble(v1)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniform1d.xml -func (gl *GL) Uniform1d(location glbase.Uniform, v0 float64) { - C.gl4_1core_glUniform1d(gl.funcs, C.GLint(location), C.GLdouble(v0)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawElementsIndirect.xml -func (gl *GL) DrawElementsIndirect(mode, gltype glbase.Enum, indirect interface{}) { - var indirect_ptr unsafe.Pointer - var indirect_v = reflect.ValueOf(indirect) - if indirect != nil && indirect_v.Kind() != reflect.Slice { - panic("parameter indirect must be a slice") - } - if indirect != nil { - indirect_ptr = unsafe.Pointer(indirect_v.Index(0).Addr().Pointer()) - } - C.gl4_1core_glDrawElementsIndirect(gl.funcs, C.GLenum(mode), C.GLenum(gltype), indirect_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawArraysIndirect.xml -func (gl *GL) DrawArraysIndirect(mode glbase.Enum, indirect interface{}) { - var indirect_ptr unsafe.Pointer - var indirect_v = reflect.ValueOf(indirect) - if indirect != nil && indirect_v.Kind() != reflect.Slice { - panic("parameter indirect must be a slice") - } - if indirect != nil { - indirect_ptr = unsafe.Pointer(indirect_v.Index(0).Addr().Pointer()) - } - C.gl4_1core_glDrawArraysIndirect(gl.funcs, C.GLenum(mode), indirect_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendFuncSeparatei.xml -func (gl *GL) BlendFuncSeparatei(buf uint32, srcRGB, dstRGB, srcAlpha, dstAlpha glbase.Enum) { - C.gl4_1core_glBlendFuncSeparatei(gl.funcs, C.GLuint(buf), C.GLenum(srcRGB), C.GLenum(dstRGB), C.GLenum(srcAlpha), C.GLenum(dstAlpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendFunci.xml -func (gl *GL) BlendFunci(buf uint32, src, dst glbase.Enum) { - C.gl4_1core_glBlendFunci(gl.funcs, C.GLuint(buf), C.GLenum(src), C.GLenum(dst)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendEquationSeparatei.xml -func (gl *GL) BlendEquationSeparatei(buf uint32, modeRGB, modeAlpha glbase.Enum) { - C.gl4_1core_glBlendEquationSeparatei(gl.funcs, C.GLuint(buf), C.GLenum(modeRGB), C.GLenum(modeAlpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendEquationi.xml -func (gl *GL) BlendEquationi(buf uint32, mode glbase.Enum) { - C.gl4_1core_glBlendEquationi(gl.funcs, C.GLuint(buf), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMinSampleShading.xml -func (gl *GL) MinSampleShading(value float32) { - C.gl4_1core_glMinSampleShading(gl.funcs, C.GLfloat(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetDoublei_v.xml -func (gl *GL) GetDoublei_v(target glbase.Enum, index uint32, data []float64) { - C.gl4_1core_glGetDoublei_v(gl.funcs, C.GLenum(target), C.GLuint(index), (*C.GLdouble)(unsafe.Pointer(&data[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetFloati_v.xml -func (gl *GL) GetFloati_v(target glbase.Enum, index uint32, data []float32) { - C.gl4_1core_glGetFloati_v(gl.funcs, C.GLenum(target), C.GLuint(index), (*C.GLfloat)(unsafe.Pointer(&data[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDepthRangeIndexed.xml -func (gl *GL) DepthRangeIndexed(index uint32, n, f float64) { - C.gl4_1core_glDepthRangeIndexed(gl.funcs, C.GLuint(index), C.GLdouble(n), C.GLdouble(f)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDepthRangeArrayv.xml -func (gl *GL) DepthRangeArrayv(first uint32, count int, v []float64) { - C.gl4_1core_glDepthRangeArrayv(gl.funcs, C.GLuint(first), C.GLsizei(count), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glScissorIndexedv.xml -func (gl *GL) ScissorIndexedv(index uint32, v []int32) { - C.gl4_1core_glScissorIndexedv(gl.funcs, C.GLuint(index), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glScissorIndexed.xml -func (gl *GL) ScissorIndexed(index uint32, left, bottom int32, width, height int) { - C.gl4_1core_glScissorIndexed(gl.funcs, C.GLuint(index), C.GLint(left), C.GLint(bottom), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glScissorArrayv.xml -func (gl *GL) ScissorArrayv(first uint32, count int, v []int32) { - C.gl4_1core_glScissorArrayv(gl.funcs, C.GLuint(first), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glViewportIndexedfv.xml -func (gl *GL) ViewportIndexedfv(index uint32, v []float32) { - C.gl4_1core_glViewportIndexedfv(gl.funcs, C.GLuint(index), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glViewportIndexedf.xml -func (gl *GL) ViewportIndexedf(index uint32, x, y, w, h float32) { - C.gl4_1core_glViewportIndexedf(gl.funcs, C.GLuint(index), C.GLfloat(x), C.GLfloat(y), C.GLfloat(w), C.GLfloat(h)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glViewportArrayv.xml -func (gl *GL) ViewportArrayv(first uint32, count int, v []float32) { - C.gl4_1core_glViewportArrayv(gl.funcs, C.GLuint(first), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetVertexAttribLdv.xml -func (gl *GL) GetVertexAttribLdv(index glbase.Attrib, pname glbase.Enum, params []float64) { - C.gl4_1core_glGetVertexAttribLdv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribLPointer.xml -func (gl *GL) VertexAttribLPointer(index glbase.Attrib, size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl4_1core_glVertexAttribLPointer(gl.funcs, C.GLuint(index), C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribL4dv.xml -func (gl *GL) VertexAttribL4dv(index glbase.Attrib, v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_1core_glVertexAttribL4dv(gl.funcs, C.GLuint(index), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribL3dv.xml -func (gl *GL) VertexAttribL3dv(index glbase.Attrib, v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_1core_glVertexAttribL3dv(gl.funcs, C.GLuint(index), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribL2dv.xml -func (gl *GL) VertexAttribL2dv(index glbase.Attrib, v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_1core_glVertexAttribL2dv(gl.funcs, C.GLuint(index), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribL1dv.xml -func (gl *GL) VertexAttribL1dv(index glbase.Attrib, v []float64) { - C.gl4_1core_glVertexAttribL1dv(gl.funcs, C.GLuint(index), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribL4d.xml -func (gl *GL) VertexAttribL4d(index glbase.Attrib, x, y, z, w float64) { - C.gl4_1core_glVertexAttribL4d(gl.funcs, C.GLuint(index), C.GLdouble(x), C.GLdouble(y), C.GLdouble(z), C.GLdouble(w)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribL3d.xml -func (gl *GL) VertexAttribL3d(index glbase.Attrib, x, y, z float64) { - C.gl4_1core_glVertexAttribL3d(gl.funcs, C.GLuint(index), C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribL2d.xml -func (gl *GL) VertexAttribL2d(index glbase.Attrib, x, y float64) { - C.gl4_1core_glVertexAttribL2d(gl.funcs, C.GLuint(index), C.GLdouble(x), C.GLdouble(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribL1d.xml -func (gl *GL) VertexAttribL1d(index glbase.Attrib, x float64) { - C.gl4_1core_glVertexAttribL1d(gl.funcs, C.GLuint(index), C.GLdouble(x)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetProgramPipelineInfoLog.xml -func (gl *GL) GetProgramPipelineInfoLog(pipeline uint32, bufSize int32, length []int32, infoLog []byte) { - C.gl4_1core_glGetProgramPipelineInfoLog(gl.funcs, C.GLuint(pipeline), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLchar)(unsafe.Pointer(&infoLog[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glValidateProgramPipeline.xml -func (gl *GL) ValidateProgramPipeline(pipeline uint32) { - C.gl4_1core_glValidateProgramPipeline(gl.funcs, C.GLuint(pipeline)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix4x3dv.xml -func (gl *GL) ProgramUniformMatrix4x3dv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float64) { - if len(value) != 3 { - panic("parameter value has incorrect length") - } - C.gl4_1core_glProgramUniformMatrix4x3dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix3x4dv.xml -func (gl *GL) ProgramUniformMatrix3x4dv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float64) { - if len(value) != 4 { - panic("parameter value has incorrect length") - } - C.gl4_1core_glProgramUniformMatrix3x4dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix4x2dv.xml -func (gl *GL) ProgramUniformMatrix4x2dv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float64) { - if len(value) != 2 { - panic("parameter value has incorrect length") - } - C.gl4_1core_glProgramUniformMatrix4x2dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix2x4dv.xml -func (gl *GL) ProgramUniformMatrix2x4dv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float64) { - if len(value) != 4 { - panic("parameter value has incorrect length") - } - C.gl4_1core_glProgramUniformMatrix2x4dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix3x2dv.xml -func (gl *GL) ProgramUniformMatrix3x2dv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float64) { - if len(value) != 2 { - panic("parameter value has incorrect length") - } - C.gl4_1core_glProgramUniformMatrix3x2dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix2x3dv.xml -func (gl *GL) ProgramUniformMatrix2x3dv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float64) { - if len(value) != 3 { - panic("parameter value has incorrect length") - } - C.gl4_1core_glProgramUniformMatrix2x3dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix4x3fv.xml -func (gl *GL) ProgramUniformMatrix4x3fv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float32) { - if len(value) != 3 { - panic("parameter value has incorrect length") - } - C.gl4_1core_glProgramUniformMatrix4x3fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix3x4fv.xml -func (gl *GL) ProgramUniformMatrix3x4fv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float32) { - if len(value) != 4 { - panic("parameter value has incorrect length") - } - C.gl4_1core_glProgramUniformMatrix3x4fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix4x2fv.xml -func (gl *GL) ProgramUniformMatrix4x2fv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float32) { - if len(value) != 2 { - panic("parameter value has incorrect length") - } - C.gl4_1core_glProgramUniformMatrix4x2fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix2x4fv.xml -func (gl *GL) ProgramUniformMatrix2x4fv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float32) { - if len(value) != 4 { - panic("parameter value has incorrect length") - } - C.gl4_1core_glProgramUniformMatrix2x4fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix3x2fv.xml -func (gl *GL) ProgramUniformMatrix3x2fv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float32) { - if len(value) != 2 { - panic("parameter value has incorrect length") - } - C.gl4_1core_glProgramUniformMatrix3x2fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix2x3fv.xml -func (gl *GL) ProgramUniformMatrix2x3fv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float32) { - if len(value) != 3 { - panic("parameter value has incorrect length") - } - C.gl4_1core_glProgramUniformMatrix2x3fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix4dv.xml -func (gl *GL) ProgramUniformMatrix4dv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float64) { - if len(value) != 4 { - panic("parameter value has incorrect length") - } - C.gl4_1core_glProgramUniformMatrix4dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix3dv.xml -func (gl *GL) ProgramUniformMatrix3dv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float64) { - if len(value) != 3 { - panic("parameter value has incorrect length") - } - C.gl4_1core_glProgramUniformMatrix3dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix2dv.xml -func (gl *GL) ProgramUniformMatrix2dv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float64) { - if len(value) != 2 { - panic("parameter value has incorrect length") - } - C.gl4_1core_glProgramUniformMatrix2dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix4fv.xml -func (gl *GL) ProgramUniformMatrix4fv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float32) { - if len(value) != 4 { - panic("parameter value has incorrect length") - } - C.gl4_1core_glProgramUniformMatrix4fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix3fv.xml -func (gl *GL) ProgramUniformMatrix3fv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float32) { - if len(value) != 3 { - panic("parameter value has incorrect length") - } - C.gl4_1core_glProgramUniformMatrix3fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix2fv.xml -func (gl *GL) ProgramUniformMatrix2fv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float32) { - if len(value) != 2 { - panic("parameter value has incorrect length") - } - C.gl4_1core_glProgramUniformMatrix2fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform4uiv.xml -func (gl *GL) ProgramUniform4uiv(program glbase.Program, location glbase.Uniform, count int, value []uint32) { - C.gl4_1core_glProgramUniform4uiv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform4ui.xml -func (gl *GL) ProgramUniform4ui(program glbase.Program, location glbase.Uniform, v0, v1, v2, v3 uint32) { - C.gl4_1core_glProgramUniform4ui(gl.funcs, C.GLuint(program), C.GLint(location), C.GLuint(v0), C.GLuint(v1), C.GLuint(v2), C.GLuint(v3)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform4dv.xml -func (gl *GL) ProgramUniform4dv(program glbase.Program, location glbase.Uniform, count int, value []float64) { - if len(value) != 4 { - panic("parameter value has incorrect length") - } - C.gl4_1core_glProgramUniform4dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform4d.xml -func (gl *GL) ProgramUniform4d(program glbase.Program, location glbase.Uniform, v0, v1, v2, v3 float64) { - C.gl4_1core_glProgramUniform4d(gl.funcs, C.GLuint(program), C.GLint(location), C.GLdouble(v0), C.GLdouble(v1), C.GLdouble(v2), C.GLdouble(v3)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform4fv.xml -func (gl *GL) ProgramUniform4fv(program glbase.Program, location glbase.Uniform, count int, value []float32) { - if len(value) != 4 { - panic("parameter value has incorrect length") - } - C.gl4_1core_glProgramUniform4fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform4f.xml -func (gl *GL) ProgramUniform4f(program glbase.Program, location glbase.Uniform, v0, v1, v2, v3 float32) { - C.gl4_1core_glProgramUniform4f(gl.funcs, C.GLuint(program), C.GLint(location), C.GLfloat(v0), C.GLfloat(v1), C.GLfloat(v2), C.GLfloat(v3)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform4iv.xml -func (gl *GL) ProgramUniform4iv(program glbase.Program, location glbase.Uniform, count int, value []int32) { - if len(value) != 4 { - panic("parameter value has incorrect length") - } - C.gl4_1core_glProgramUniform4iv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform4i.xml -func (gl *GL) ProgramUniform4i(program glbase.Program, location glbase.Uniform, v0, v1, v2, v3 int32) { - C.gl4_1core_glProgramUniform4i(gl.funcs, C.GLuint(program), C.GLint(location), C.GLint(v0), C.GLint(v1), C.GLint(v2), C.GLint(v3)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform3uiv.xml -func (gl *GL) ProgramUniform3uiv(program glbase.Program, location glbase.Uniform, count int, value []uint32) { - C.gl4_1core_glProgramUniform3uiv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform3ui.xml -func (gl *GL) ProgramUniform3ui(program glbase.Program, location glbase.Uniform, v0, v1, v2 uint32) { - C.gl4_1core_glProgramUniform3ui(gl.funcs, C.GLuint(program), C.GLint(location), C.GLuint(v0), C.GLuint(v1), C.GLuint(v2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform3dv.xml -func (gl *GL) ProgramUniform3dv(program glbase.Program, location glbase.Uniform, count int, value []float64) { - if len(value) != 3 { - panic("parameter value has incorrect length") - } - C.gl4_1core_glProgramUniform3dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform3d.xml -func (gl *GL) ProgramUniform3d(program glbase.Program, location glbase.Uniform, v0, v1, v2 float64) { - C.gl4_1core_glProgramUniform3d(gl.funcs, C.GLuint(program), C.GLint(location), C.GLdouble(v0), C.GLdouble(v1), C.GLdouble(v2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform3fv.xml -func (gl *GL) ProgramUniform3fv(program glbase.Program, location glbase.Uniform, count int, value []float32) { - if len(value) != 3 { - panic("parameter value has incorrect length") - } - C.gl4_1core_glProgramUniform3fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform3f.xml -func (gl *GL) ProgramUniform3f(program glbase.Program, location glbase.Uniform, v0, v1, v2 float32) { - C.gl4_1core_glProgramUniform3f(gl.funcs, C.GLuint(program), C.GLint(location), C.GLfloat(v0), C.GLfloat(v1), C.GLfloat(v2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform3iv.xml -func (gl *GL) ProgramUniform3iv(program glbase.Program, location glbase.Uniform, count int, value []int32) { - if len(value) != 3 { - panic("parameter value has incorrect length") - } - C.gl4_1core_glProgramUniform3iv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform3i.xml -func (gl *GL) ProgramUniform3i(program glbase.Program, location glbase.Uniform, v0, v1, v2 int32) { - C.gl4_1core_glProgramUniform3i(gl.funcs, C.GLuint(program), C.GLint(location), C.GLint(v0), C.GLint(v1), C.GLint(v2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform2uiv.xml -func (gl *GL) ProgramUniform2uiv(program glbase.Program, location glbase.Uniform, count int, value []uint32) { - C.gl4_1core_glProgramUniform2uiv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform2ui.xml -func (gl *GL) ProgramUniform2ui(program glbase.Program, location glbase.Uniform, v0, v1 uint32) { - C.gl4_1core_glProgramUniform2ui(gl.funcs, C.GLuint(program), C.GLint(location), C.GLuint(v0), C.GLuint(v1)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform2dv.xml -func (gl *GL) ProgramUniform2dv(program glbase.Program, location glbase.Uniform, count int, value []float64) { - if len(value) != 2 { - panic("parameter value has incorrect length") - } - C.gl4_1core_glProgramUniform2dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform2d.xml -func (gl *GL) ProgramUniform2d(program glbase.Program, location glbase.Uniform, v0, v1 float64) { - C.gl4_1core_glProgramUniform2d(gl.funcs, C.GLuint(program), C.GLint(location), C.GLdouble(v0), C.GLdouble(v1)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform2fv.xml -func (gl *GL) ProgramUniform2fv(program glbase.Program, location glbase.Uniform, count int, value []float32) { - if len(value) != 2 { - panic("parameter value has incorrect length") - } - C.gl4_1core_glProgramUniform2fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform2f.xml -func (gl *GL) ProgramUniform2f(program glbase.Program, location glbase.Uniform, v0, v1 float32) { - C.gl4_1core_glProgramUniform2f(gl.funcs, C.GLuint(program), C.GLint(location), C.GLfloat(v0), C.GLfloat(v1)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform2iv.xml -func (gl *GL) ProgramUniform2iv(program glbase.Program, location glbase.Uniform, count int, value []int32) { - if len(value) != 2 { - panic("parameter value has incorrect length") - } - C.gl4_1core_glProgramUniform2iv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform2i.xml -func (gl *GL) ProgramUniform2i(program glbase.Program, location glbase.Uniform, v0, v1 int32) { - C.gl4_1core_glProgramUniform2i(gl.funcs, C.GLuint(program), C.GLint(location), C.GLint(v0), C.GLint(v1)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform1uiv.xml -func (gl *GL) ProgramUniform1uiv(program glbase.Program, location glbase.Uniform, count int, value []uint32) { - C.gl4_1core_glProgramUniform1uiv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform1ui.xml -func (gl *GL) ProgramUniform1ui(program glbase.Program, location glbase.Uniform, v0 uint32) { - C.gl4_1core_glProgramUniform1ui(gl.funcs, C.GLuint(program), C.GLint(location), C.GLuint(v0)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform1dv.xml -func (gl *GL) ProgramUniform1dv(program glbase.Program, location glbase.Uniform, count int, value []float64) { - C.gl4_1core_glProgramUniform1dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform1d.xml -func (gl *GL) ProgramUniform1d(program glbase.Program, location glbase.Uniform, v0 float64) { - C.gl4_1core_glProgramUniform1d(gl.funcs, C.GLuint(program), C.GLint(location), C.GLdouble(v0)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform1fv.xml -func (gl *GL) ProgramUniform1fv(program glbase.Program, location glbase.Uniform, count int, value []float32) { - C.gl4_1core_glProgramUniform1fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform1f.xml -func (gl *GL) ProgramUniform1f(program glbase.Program, location glbase.Uniform, v0 float32) { - C.gl4_1core_glProgramUniform1f(gl.funcs, C.GLuint(program), C.GLint(location), C.GLfloat(v0)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform1iv.xml -func (gl *GL) ProgramUniform1iv(program glbase.Program, location glbase.Uniform, count int, value []int32) { - C.gl4_1core_glProgramUniform1iv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform1i.xml -func (gl *GL) ProgramUniform1i(program glbase.Program, location glbase.Uniform, v0 int32) { - C.gl4_1core_glProgramUniform1i(gl.funcs, C.GLuint(program), C.GLint(location), C.GLint(v0)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetProgramPipelineiv.xml -func (gl *GL) GetProgramPipelineiv(pipeline uint32, pname glbase.Enum, params []int32) { - C.gl4_1core_glGetProgramPipelineiv(gl.funcs, C.GLuint(pipeline), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsProgramPipeline.xml -func (gl *GL) IsProgramPipeline(pipeline uint32) bool { - glresult := C.gl4_1core_glIsProgramPipeline(gl.funcs, C.GLuint(pipeline)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGenProgramPipelines.xml -func (gl *GL) GenProgramPipelines(n int, pipelines []uint32) { - C.gl4_1core_glGenProgramPipelines(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&pipelines[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDeleteProgramPipelines.xml -func (gl *GL) DeleteProgramPipelines(n int, pipelines []uint32) { - C.gl4_1core_glDeleteProgramPipelines(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&pipelines[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindProgramPipeline.xml -func (gl *GL) BindProgramPipeline(pipeline uint32) { - C.gl4_1core_glBindProgramPipeline(gl.funcs, C.GLuint(pipeline)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glActiveShaderProgram.xml -func (gl *GL) ActiveShaderProgram(pipeline uint32, program glbase.Program) { - C.gl4_1core_glActiveShaderProgram(gl.funcs, C.GLuint(pipeline), C.GLuint(program)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUseProgramStages.xml -func (gl *GL) UseProgramStages(pipeline uint32, stages glbase.Bitfield, program glbase.Program) { - C.gl4_1core_glUseProgramStages(gl.funcs, C.GLuint(pipeline), C.GLbitfield(stages), C.GLuint(program)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramParameteri.xml -func (gl *GL) ProgramParameteri(program glbase.Program, pname glbase.Enum, value int32) { - C.gl4_1core_glProgramParameteri(gl.funcs, C.GLuint(program), C.GLenum(pname), C.GLint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramBinary.xml -func (gl *GL) ProgramBinary(program glbase.Program, binaryFormat glbase.Enum, binary interface{}, length int32) { - var binary_ptr unsafe.Pointer - var binary_v = reflect.ValueOf(binary) - if binary != nil && binary_v.Kind() != reflect.Slice { - panic("parameter binary must be a slice") - } - if binary != nil { - binary_ptr = unsafe.Pointer(binary_v.Index(0).Addr().Pointer()) - } - C.gl4_1core_glProgramBinary(gl.funcs, C.GLuint(program), C.GLenum(binaryFormat), binary_ptr, C.GLsizei(length)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetProgramBinary.xml -func (gl *GL) GetProgramBinary(program glbase.Program, bufSize int32, length []int32, binaryFormat []glbase.Enum, binary interface{}) { - var binary_ptr unsafe.Pointer - var binary_v = reflect.ValueOf(binary) - if binary != nil && binary_v.Kind() != reflect.Slice { - panic("parameter binary must be a slice") - } - if binary != nil { - binary_ptr = unsafe.Pointer(binary_v.Index(0).Addr().Pointer()) - } - C.gl4_1core_glGetProgramBinary(gl.funcs, C.GLuint(program), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLenum)(unsafe.Pointer(&binaryFormat[0])), binary_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearDepthf.xml -func (gl *GL) ClearDepthf(dd float32) { - C.gl4_1core_glClearDepthf(gl.funcs, C.GLfloat(dd)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDepthRangef.xml -func (gl *GL) DepthRangef(n, f float32) { - C.gl4_1core_glDepthRangef(gl.funcs, C.GLfloat(n), C.GLfloat(f)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetShaderPrecisionFormat.xml -func (gl *GL) GetShaderPrecisionFormat(shadertype, precisionType glbase.Enum, range_, precision []int32) { - C.gl4_1core_glGetShaderPrecisionFormat(gl.funcs, C.GLenum(shadertype), C.GLenum(precisionType), (*C.GLint)(unsafe.Pointer(&range_[0])), (*C.GLint)(unsafe.Pointer(&precision[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glShaderBinary.xml -func (gl *GL) ShaderBinary(count int, shaders []glbase.Shader, binaryFormat glbase.Enum, binary interface{}, length int32) { - var binary_ptr unsafe.Pointer - var binary_v = reflect.ValueOf(binary) - if binary != nil && binary_v.Kind() != reflect.Slice { - panic("parameter binary must be a slice") - } - if binary != nil { - binary_ptr = unsafe.Pointer(binary_v.Index(0).Addr().Pointer()) - } - C.gl4_1core_glShaderBinary(gl.funcs, C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&shaders[0])), C.GLenum(binaryFormat), binary_ptr, C.GLsizei(length)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glReleaseShaderCompiler.xml -func (gl *GL) ReleaseShaderCompiler() { - C.gl4_1core_glReleaseShaderCompiler(gl.funcs) -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.2compat/funcs.cpp b/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.2compat/funcs.cpp deleted file mode 100644 index 6101e99def..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.2compat/funcs.cpp +++ /dev/null @@ -1,5358 +0,0 @@ - -// ** file automatically generated by glgen -- do not edit manually ** - -#include -#include - -#include "funcs.h" - -void *gl4_2compat_funcs() { - QOpenGLFunctions_4_2_Compatibility* funcs = QOpenGLContext::currentContext()->versionFunctions(); - if (!funcs) { - return 0; - } - funcs->initializeOpenGLFunctions(); - return funcs; -} - - -void gl4_2compat_glViewport(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glViewport(x, y, width, height); -} - -void gl4_2compat_glDepthRange(void *_glfuncs, GLdouble nearVal, GLdouble farVal) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthRange(nearVal, farVal); -} - -GLboolean gl4_2compat_glIsEnabled(void *_glfuncs, GLenum cap) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsEnabled(cap); -} - -void gl4_2compat_glGetTexLevelParameteriv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexLevelParameteriv(target, level, pname, params); -} - -void gl4_2compat_glGetTexLevelParameterfv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexLevelParameterfv(target, level, pname, params); -} - -void gl4_2compat_glGetTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameteriv(target, pname, params); -} - -void gl4_2compat_glGetTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameterfv(target, pname, params); -} - -void gl4_2compat_glGetTexImage(void *_glfuncs, GLenum target, GLint level, GLenum format, GLenum gltype, GLvoid* pixels) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexImage(target, level, format, gltype, pixels); -} - -void gl4_2compat_glGetIntegerv(void *_glfuncs, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetIntegerv(pname, params); -} - -void gl4_2compat_glGetFloatv(void *_glfuncs, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetFloatv(pname, params); -} - -GLenum gl4_2compat_glGetError(void *_glfuncs) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetError(); -} - -void gl4_2compat_glGetDoublev(void *_glfuncs, GLenum pname, GLdouble* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetDoublev(pname, params); -} - -void gl4_2compat_glGetBooleanv(void *_glfuncs, GLenum pname, GLboolean* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBooleanv(pname, params); -} - -void gl4_2compat_glReadPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum gltype, GLvoid* pixels) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glReadPixels(x, y, width, height, format, gltype, pixels); -} - -void gl4_2compat_glReadBuffer(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glReadBuffer(mode); -} - -void gl4_2compat_glPixelStorei(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelStorei(pname, param); -} - -void gl4_2compat_glPixelStoref(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelStoref(pname, param); -} - -void gl4_2compat_glDepthFunc(void *_glfuncs, GLenum glfunc) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthFunc(glfunc); -} - -void gl4_2compat_glStencilOp(void *_glfuncs, GLenum fail, GLenum zfail, GLenum zpass) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilOp(fail, zfail, zpass); -} - -void gl4_2compat_glStencilFunc(void *_glfuncs, GLenum glfunc, GLint ref, GLuint mask) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilFunc(glfunc, ref, mask); -} - -void gl4_2compat_glLogicOp(void *_glfuncs, GLenum opcode) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLogicOp(opcode); -} - -void gl4_2compat_glBlendFunc(void *_glfuncs, GLenum sfactor, GLenum dfactor) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendFunc(sfactor, dfactor); -} - -void gl4_2compat_glFlush(void *_glfuncs) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFlush(); -} - -void gl4_2compat_glFinish(void *_glfuncs) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFinish(); -} - -void gl4_2compat_glEnable(void *_glfuncs, GLenum cap) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnable(cap); -} - -void gl4_2compat_glDisable(void *_glfuncs, GLenum cap) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDisable(cap); -} - -void gl4_2compat_glDepthMask(void *_glfuncs, GLboolean flag) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthMask(flag); -} - -void gl4_2compat_glColorMask(void *_glfuncs, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorMask(red, green, blue, alpha); -} - -void gl4_2compat_glStencilMask(void *_glfuncs, GLuint mask) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilMask(mask); -} - -void gl4_2compat_glClearDepth(void *_glfuncs, GLdouble depth) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearDepth(depth); -} - -void gl4_2compat_glClearStencil(void *_glfuncs, GLint s) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearStencil(s); -} - -void gl4_2compat_glClearColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearColor(red, green, blue, alpha); -} - -void gl4_2compat_glClear(void *_glfuncs, GLbitfield mask) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClear(mask); -} - -void gl4_2compat_glDrawBuffer(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawBuffer(mode); -} - -void gl4_2compat_glTexImage2D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage2D(target, level, internalFormat, width, height, border, format, gltype, pixels); -} - -void gl4_2compat_glTexImage1D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage1D(target, level, internalFormat, width, border, format, gltype, pixels); -} - -void gl4_2compat_glTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameteriv(target, pname, params); -} - -void gl4_2compat_glTexParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint param) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameteri(target, pname, param); -} - -void gl4_2compat_glTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterfv(target, pname, params); -} - -void gl4_2compat_glTexParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterf(target, pname, param); -} - -void gl4_2compat_glScissor(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScissor(x, y, width, height); -} - -void gl4_2compat_glPolygonMode(void *_glfuncs, GLenum face, GLenum mode) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPolygonMode(face, mode); -} - -void gl4_2compat_glPointSize(void *_glfuncs, GLfloat size) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointSize(size); -} - -void gl4_2compat_glLineWidth(void *_glfuncs, GLfloat width) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLineWidth(width); -} - -void gl4_2compat_glHint(void *_glfuncs, GLenum target, GLenum mode) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glHint(target, mode); -} - -void gl4_2compat_glFrontFace(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFrontFace(mode); -} - -void gl4_2compat_glCullFace(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCullFace(mode); -} - -void gl4_2compat_glIndexubv(void *_glfuncs, const GLubyte* c) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexubv(c); -} - -void gl4_2compat_glIndexub(void *_glfuncs, GLubyte c) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexub(c); -} - -GLboolean gl4_2compat_glIsTexture(void *_glfuncs, GLuint texture) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsTexture(texture); -} - -void gl4_2compat_glGenTextures(void *_glfuncs, GLsizei n, GLuint* textures) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenTextures(n, textures); -} - -void gl4_2compat_glDeleteTextures(void *_glfuncs, GLsizei n, const GLuint* textures) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteTextures(n, textures); -} - -void gl4_2compat_glBindTexture(void *_glfuncs, GLenum target, GLuint texture) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindTexture(target, texture); -} - -void gl4_2compat_glTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, gltype, pixels); -} - -void gl4_2compat_glTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexSubImage1D(target, level, xoffset, width, format, gltype, pixels); -} - -void gl4_2compat_glCopyTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height); -} - -void gl4_2compat_glCopyTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexSubImage1D(target, level, xoffset, x, y, width); -} - -void gl4_2compat_glCopyTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexImage2D(target, level, internalFormat, x, y, width, height, border); -} - -void gl4_2compat_glCopyTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexImage1D(target, level, internalFormat, x, y, width, border); -} - -void gl4_2compat_glPolygonOffset(void *_glfuncs, GLfloat factor, GLfloat units) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPolygonOffset(factor, units); -} - -void gl4_2compat_glDrawElements(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElements(mode, count, gltype, indices); -} - -void gl4_2compat_glDrawArrays(void *_glfuncs, GLenum mode, GLint first, GLsizei count) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawArrays(mode, first, count); -} - -void gl4_2compat_glCopyTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexSubImage3D(target, level, xoffset, yoffset, zoffset, x, y, width, height); -} - -void gl4_2compat_glTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, gltype, pixels); -} - -void gl4_2compat_glTexImage3D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage3D(target, level, internalFormat, width, height, depth, border, format, gltype, pixels); -} - -void gl4_2compat_glDrawRangeElements(void *_glfuncs, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum gltype, const GLvoid* indices) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawRangeElements(mode, start, end, count, gltype, indices); -} - -void gl4_2compat_glBlendEquation(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendEquation(mode); -} - -void gl4_2compat_glBlendColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendColor(red, green, blue, alpha); -} - -void gl4_2compat_glGetCompressedTexImage(void *_glfuncs, GLenum target, GLint level, GLvoid* img) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetCompressedTexImage(target, level, img); -} - -void gl4_2compat_glCompressedTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexSubImage1D(target, level, xoffset, width, format, imageSize, data); -} - -void gl4_2compat_glCompressedTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data); -} - -void gl4_2compat_glCompressedTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data); -} - -void gl4_2compat_glCompressedTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexImage1D(target, level, internalFormat, width, border, imageSize, data); -} - -void gl4_2compat_glCompressedTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexImage2D(target, level, internalFormat, width, height, border, imageSize, data); -} - -void gl4_2compat_glCompressedTexImage3D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexImage3D(target, level, internalFormat, width, height, depth, border, imageSize, data); -} - -void gl4_2compat_glSampleCoverage(void *_glfuncs, GLfloat value, GLboolean invert) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSampleCoverage(value, invert); -} - -void gl4_2compat_glActiveTexture(void *_glfuncs, GLenum texture) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glActiveTexture(texture); -} - -void gl4_2compat_glPointParameteriv(void *_glfuncs, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameteriv(pname, params); -} - -void gl4_2compat_glPointParameteri(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameteri(pname, param); -} - -void gl4_2compat_glPointParameterfv(void *_glfuncs, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameterfv(pname, params); -} - -void gl4_2compat_glPointParameterf(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameterf(pname, param); -} - -void gl4_2compat_glMultiDrawArrays(void *_glfuncs, GLenum mode, const GLint* first, const GLsizei* count, GLsizei drawcount) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiDrawArrays(mode, first, count, drawcount); -} - -void gl4_2compat_glBlendFuncSeparate(void *_glfuncs, GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendFuncSeparate(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha); -} - -void gl4_2compat_glGetBufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBufferParameteriv(target, pname, params); -} - -GLboolean gl4_2compat_glUnmapBuffer(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glUnmapBuffer(target); -} - -void gl4_2compat_glGetBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, GLvoid* data) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBufferSubData(target, offset, size, data); -} - -void gl4_2compat_glBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBufferSubData(target, offset, size, data); -} - -void gl4_2compat_glBufferData(void *_glfuncs, GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBufferData(target, size, data, usage); -} - -GLboolean gl4_2compat_glIsBuffer(void *_glfuncs, GLuint buffer) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsBuffer(buffer); -} - -void gl4_2compat_glGenBuffers(void *_glfuncs, GLsizei n, GLuint* buffers) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenBuffers(n, buffers); -} - -void gl4_2compat_glDeleteBuffers(void *_glfuncs, GLsizei n, const GLuint* buffers) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteBuffers(n, buffers); -} - -void gl4_2compat_glBindBuffer(void *_glfuncs, GLenum target, GLuint buffer) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindBuffer(target, buffer); -} - -void gl4_2compat_glGetQueryObjectuiv(void *_glfuncs, GLuint id, GLenum pname, GLuint* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryObjectuiv(id, pname, params); -} - -void gl4_2compat_glGetQueryObjectiv(void *_glfuncs, GLuint id, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryObjectiv(id, pname, params); -} - -void gl4_2compat_glGetQueryiv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryiv(target, pname, params); -} - -void gl4_2compat_glEndQuery(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndQuery(target); -} - -void gl4_2compat_glBeginQuery(void *_glfuncs, GLenum target, GLuint id) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBeginQuery(target, id); -} - -GLboolean gl4_2compat_glIsQuery(void *_glfuncs, GLuint id) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsQuery(id); -} - -void gl4_2compat_glDeleteQueries(void *_glfuncs, GLsizei n, const GLuint* ids) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteQueries(n, ids); -} - -void gl4_2compat_glGenQueries(void *_glfuncs, GLsizei n, GLuint* ids) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenQueries(n, ids); -} - -void gl4_2compat_glVertexAttribPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLboolean normalized, GLsizei stride, const GLvoid* offset) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribPointer(index, size, gltype, normalized, stride, offset); -} - -void gl4_2compat_glValidateProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glValidateProgram(program); -} - -void gl4_2compat_glUniformMatrix4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4fv(location, count, transpose, value); -} - -void gl4_2compat_glUniformMatrix3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3fv(location, count, transpose, value); -} - -void gl4_2compat_glUniformMatrix2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2fv(location, count, transpose, value); -} - -void gl4_2compat_glUniform4iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4iv(location, count, value); -} - -void gl4_2compat_glUniform3iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3iv(location, count, value); -} - -void gl4_2compat_glUniform2iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2iv(location, count, value); -} - -void gl4_2compat_glUniform1iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1iv(location, count, value); -} - -void gl4_2compat_glUniform4fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4fv(location, count, value); -} - -void gl4_2compat_glUniform3fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3fv(location, count, value); -} - -void gl4_2compat_glUniform2fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2fv(location, count, value); -} - -void gl4_2compat_glUniform1fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1fv(location, count, value); -} - -void gl4_2compat_glUniform4i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2, GLint v3) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4i(location, v0, v1, v2, v3); -} - -void gl4_2compat_glUniform3i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3i(location, v0, v1, v2); -} - -void gl4_2compat_glUniform2i(void *_glfuncs, GLint location, GLint v0, GLint v1) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2i(location, v0, v1); -} - -void gl4_2compat_glUniform1i(void *_glfuncs, GLint location, GLint v0) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1i(location, v0); -} - -void gl4_2compat_glUniform4f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4f(location, v0, v1, v2, v3); -} - -void gl4_2compat_glUniform3f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3f(location, v0, v1, v2); -} - -void gl4_2compat_glUniform2f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2f(location, v0, v1); -} - -void gl4_2compat_glUniform1f(void *_glfuncs, GLint location, GLfloat v0) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1f(location, v0); -} - -void gl4_2compat_glUseProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUseProgram(program); -} - -void gl4_2compat_glShaderSource(void *_glfuncs, GLuint shader, GLsizei count, const GLchar** source, const GLint* length) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glShaderSource(shader, count, source, length); -} - -void gl4_2compat_glLinkProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLinkProgram(program); -} - -GLboolean gl4_2compat_glIsShader(void *_glfuncs, GLuint shader) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsShader(shader); -} - -GLboolean gl4_2compat_glIsProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsProgram(program); -} - -void gl4_2compat_glGetVertexAttribiv(void *_glfuncs, GLuint index, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribiv(index, pname, params); -} - -void gl4_2compat_glGetVertexAttribfv(void *_glfuncs, GLuint index, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribfv(index, pname, params); -} - -void gl4_2compat_glGetVertexAttribdv(void *_glfuncs, GLuint index, GLenum pname, GLdouble* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribdv(index, pname, params); -} - -void gl4_2compat_glGetUniformiv(void *_glfuncs, GLuint program, GLint location, GLint* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetUniformiv(program, location, params); -} - -void gl4_2compat_glGetUniformfv(void *_glfuncs, GLuint program, GLint location, GLfloat* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetUniformfv(program, location, params); -} - -GLint gl4_2compat_glGetUniformLocation(void *_glfuncs, GLuint program, const GLchar* name) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetUniformLocation(program, name); -} - -void gl4_2compat_glGetShaderSource(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* source) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetShaderSource(shader, bufSize, length, source); -} - -void gl4_2compat_glGetShaderInfoLog(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* infoLog) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetShaderInfoLog(shader, bufSize, length, infoLog); -} - -void gl4_2compat_glGetShaderiv(void *_glfuncs, GLuint shader, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetShaderiv(shader, pname, params); -} - -void gl4_2compat_glGetProgramInfoLog(void *_glfuncs, GLuint program, GLsizei bufSize, GLsizei* length, GLchar* infoLog) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetProgramInfoLog(program, bufSize, length, infoLog); -} - -void gl4_2compat_glGetProgramiv(void *_glfuncs, GLuint program, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetProgramiv(program, pname, params); -} - -GLint gl4_2compat_glGetAttribLocation(void *_glfuncs, GLuint program, const GLchar* name) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetAttribLocation(program, name); -} - -void gl4_2compat_glGetAttachedShaders(void *_glfuncs, GLuint program, GLsizei maxCount, GLsizei* count, GLuint* obj) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetAttachedShaders(program, maxCount, count, obj); -} - -void gl4_2compat_glGetActiveUniform(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniform(program, index, bufSize, length, size, gltype, name); -} - -void gl4_2compat_glGetActiveAttrib(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveAttrib(program, index, bufSize, length, size, gltype, name); -} - -void gl4_2compat_glEnableVertexAttribArray(void *_glfuncs, GLuint index) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnableVertexAttribArray(index); -} - -void gl4_2compat_glDisableVertexAttribArray(void *_glfuncs, GLuint index) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDisableVertexAttribArray(index); -} - -void gl4_2compat_glDetachShader(void *_glfuncs, GLuint program, GLuint shader) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDetachShader(program, shader); -} - -void gl4_2compat_glDeleteShader(void *_glfuncs, GLuint shader) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteShader(shader); -} - -void gl4_2compat_glDeleteProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteProgram(program); -} - -GLuint gl4_2compat_glCreateShader(void *_glfuncs, GLenum gltype) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glCreateShader(gltype); -} - -GLuint gl4_2compat_glCreateProgram(void *_glfuncs) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glCreateProgram(); -} - -void gl4_2compat_glCompileShader(void *_glfuncs, GLuint shader) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompileShader(shader); -} - -void gl4_2compat_glBindAttribLocation(void *_glfuncs, GLuint program, GLuint index, const GLchar* name) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindAttribLocation(program, index, name); -} - -void gl4_2compat_glAttachShader(void *_glfuncs, GLuint program, GLuint shader) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glAttachShader(program, shader); -} - -void gl4_2compat_glStencilMaskSeparate(void *_glfuncs, GLenum face, GLuint mask) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilMaskSeparate(face, mask); -} - -void gl4_2compat_glStencilFuncSeparate(void *_glfuncs, GLenum face, GLenum glfunc, GLint ref, GLuint mask) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilFuncSeparate(face, glfunc, ref, mask); -} - -void gl4_2compat_glStencilOpSeparate(void *_glfuncs, GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilOpSeparate(face, sfail, dpfail, dppass); -} - -void gl4_2compat_glDrawBuffers(void *_glfuncs, GLsizei n, const GLenum* bufs) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawBuffers(n, bufs); -} - -void gl4_2compat_glBlendEquationSeparate(void *_glfuncs, GLenum modeRGB, GLenum modeAlpha) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendEquationSeparate(modeRGB, modeAlpha); -} - -void gl4_2compat_glUniformMatrix4x3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4x3fv(location, count, transpose, value); -} - -void gl4_2compat_glUniformMatrix3x4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3x4fv(location, count, transpose, value); -} - -void gl4_2compat_glUniformMatrix4x2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4x2fv(location, count, transpose, value); -} - -void gl4_2compat_glUniformMatrix2x4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2x4fv(location, count, transpose, value); -} - -void gl4_2compat_glUniformMatrix3x2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3x2fv(location, count, transpose, value); -} - -void gl4_2compat_glUniformMatrix2x3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2x3fv(location, count, transpose, value); -} - -GLboolean gl4_2compat_glIsVertexArray(void *_glfuncs, GLuint array) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsVertexArray(array); -} - -void gl4_2compat_glGenVertexArrays(void *_glfuncs, GLsizei n, GLuint* arrays) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenVertexArrays(n, arrays); -} - -void gl4_2compat_glDeleteVertexArrays(void *_glfuncs, GLsizei n, const GLuint* arrays) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteVertexArrays(n, arrays); -} - -void gl4_2compat_glBindVertexArray(void *_glfuncs, GLuint array) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindVertexArray(array); -} - -void gl4_2compat_glFlushMappedBufferRange(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr length) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFlushMappedBufferRange(target, offset, length); -} - -void gl4_2compat_glFramebufferTextureLayer(void *_glfuncs, GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTextureLayer(target, attachment, texture, level, layer); -} - -void gl4_2compat_glRenderbufferStorageMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRenderbufferStorageMultisample(target, samples, internalFormat, width, height); -} - -void gl4_2compat_glBlitFramebuffer(void *_glfuncs, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter); -} - -void gl4_2compat_glGenerateMipmap(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenerateMipmap(target); -} - -void gl4_2compat_glGetFramebufferAttachmentParameteriv(void *_glfuncs, GLenum target, GLenum attachment, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetFramebufferAttachmentParameteriv(target, attachment, pname, params); -} - -void gl4_2compat_glFramebufferRenderbuffer(void *_glfuncs, GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer); -} - -void gl4_2compat_glFramebufferTexture3D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTexture3D(target, attachment, textarget, texture, level, zoffset); -} - -void gl4_2compat_glFramebufferTexture2D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTexture2D(target, attachment, textarget, texture, level); -} - -void gl4_2compat_glFramebufferTexture1D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTexture1D(target, attachment, textarget, texture, level); -} - -GLenum gl4_2compat_glCheckFramebufferStatus(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glCheckFramebufferStatus(target); -} - -void gl4_2compat_glGenFramebuffers(void *_glfuncs, GLsizei n, GLuint* framebuffers) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenFramebuffers(n, framebuffers); -} - -void gl4_2compat_glDeleteFramebuffers(void *_glfuncs, GLsizei n, const GLuint* framebuffers) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteFramebuffers(n, framebuffers); -} - -void gl4_2compat_glBindFramebuffer(void *_glfuncs, GLenum target, GLuint framebuffer) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindFramebuffer(target, framebuffer); -} - -GLboolean gl4_2compat_glIsFramebuffer(void *_glfuncs, GLuint framebuffer) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsFramebuffer(framebuffer); -} - -void gl4_2compat_glGetRenderbufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetRenderbufferParameteriv(target, pname, params); -} - -void gl4_2compat_glRenderbufferStorage(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRenderbufferStorage(target, internalFormat, width, height); -} - -void gl4_2compat_glGenRenderbuffers(void *_glfuncs, GLsizei n, GLuint* renderbuffers) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenRenderbuffers(n, renderbuffers); -} - -void gl4_2compat_glDeleteRenderbuffers(void *_glfuncs, GLsizei n, const GLuint* renderbuffers) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteRenderbuffers(n, renderbuffers); -} - -void gl4_2compat_glBindRenderbuffer(void *_glfuncs, GLenum target, GLuint renderbuffer) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindRenderbuffer(target, renderbuffer); -} - -GLboolean gl4_2compat_glIsRenderbuffer(void *_glfuncs, GLuint renderbuffer) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsRenderbuffer(renderbuffer); -} - -void gl4_2compat_glClearBufferfi(void *_glfuncs, GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearBufferfi(buffer, drawbuffer, depth, stencil); -} - -void gl4_2compat_glClearBufferfv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLfloat* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearBufferfv(buffer, drawbuffer, value); -} - -void gl4_2compat_glClearBufferuiv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLuint* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearBufferuiv(buffer, drawbuffer, value); -} - -void gl4_2compat_glClearBufferiv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLint* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearBufferiv(buffer, drawbuffer, value); -} - -void gl4_2compat_glGetTexParameterIuiv(void *_glfuncs, GLenum target, GLenum pname, GLuint* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameterIuiv(target, pname, params); -} - -void gl4_2compat_glGetTexParameterIiv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameterIiv(target, pname, params); -} - -void gl4_2compat_glTexParameterIuiv(void *_glfuncs, GLenum target, GLenum pname, const GLuint* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterIuiv(target, pname, params); -} - -void gl4_2compat_glTexParameterIiv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterIiv(target, pname, params); -} - -void gl4_2compat_glUniform4uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4uiv(location, count, value); -} - -void gl4_2compat_glUniform3uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3uiv(location, count, value); -} - -void gl4_2compat_glUniform2uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2uiv(location, count, value); -} - -void gl4_2compat_glUniform1uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1uiv(location, count, value); -} - -void gl4_2compat_glUniform4ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4ui(location, v0, v1, v2, v3); -} - -void gl4_2compat_glUniform3ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1, GLuint v2) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3ui(location, v0, v1, v2); -} - -void gl4_2compat_glUniform2ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2ui(location, v0, v1); -} - -void gl4_2compat_glUniform1ui(void *_glfuncs, GLint location, GLuint v0) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1ui(location, v0); -} - -GLint gl4_2compat_glGetFragDataLocation(void *_glfuncs, GLuint program, const GLchar* name) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetFragDataLocation(program, name); -} - -void gl4_2compat_glBindFragDataLocation(void *_glfuncs, GLuint program, GLuint color, const GLchar* name) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindFragDataLocation(program, color, name); -} - -void gl4_2compat_glGetUniformuiv(void *_glfuncs, GLuint program, GLint location, GLuint* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetUniformuiv(program, location, params); -} - -void gl4_2compat_glGetVertexAttribIuiv(void *_glfuncs, GLuint index, GLenum pname, GLuint* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribIuiv(index, pname, params); -} - -void gl4_2compat_glGetVertexAttribIiv(void *_glfuncs, GLuint index, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribIiv(index, pname, params); -} - -void gl4_2compat_glVertexAttribIPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribIPointer(index, size, gltype, stride, pointer); -} - -void gl4_2compat_glEndConditionalRender(void *_glfuncs) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndConditionalRender(); -} - -void gl4_2compat_glBeginConditionalRender(void *_glfuncs, GLuint id, GLenum mode) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBeginConditionalRender(id, mode); -} - -void gl4_2compat_glClampColor(void *_glfuncs, GLenum target, GLenum clamp) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClampColor(target, clamp); -} - -void gl4_2compat_glGetTransformFeedbackVarying(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* gltype, GLchar* name) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTransformFeedbackVarying(program, index, bufSize, length, size, gltype, name); -} - -void gl4_2compat_glBindBufferBase(void *_glfuncs, GLenum target, GLuint index, GLuint buffer) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindBufferBase(target, index, buffer); -} - -void gl4_2compat_glBindBufferRange(void *_glfuncs, GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindBufferRange(target, index, buffer, offset, size); -} - -void gl4_2compat_glEndTransformFeedback(void *_glfuncs) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndTransformFeedback(); -} - -void gl4_2compat_glBeginTransformFeedback(void *_glfuncs, GLenum primitiveMode) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBeginTransformFeedback(primitiveMode); -} - -GLboolean gl4_2compat_glIsEnabledi(void *_glfuncs, GLenum target, GLuint index) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsEnabledi(target, index); -} - -void gl4_2compat_glDisablei(void *_glfuncs, GLenum target, GLuint index) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDisablei(target, index); -} - -void gl4_2compat_glEnablei(void *_glfuncs, GLenum target, GLuint index) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnablei(target, index); -} - -void gl4_2compat_glGetIntegeri_v(void *_glfuncs, GLenum target, GLuint index, GLint* data) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetIntegeri_v(target, index, data); -} - -void gl4_2compat_glGetBooleani_v(void *_glfuncs, GLenum target, GLuint index, GLboolean* data) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBooleani_v(target, index, data); -} - -void gl4_2compat_glColorMaski(void *_glfuncs, GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorMaski(index, r, g, b, a); -} - -void gl4_2compat_glCopyBufferSubData(void *_glfuncs, GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyBufferSubData(readTarget, writeTarget, readOffset, writeOffset, size); -} - -void gl4_2compat_glUniformBlockBinding(void *_glfuncs, GLuint program, GLuint v0, GLuint v1) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformBlockBinding(program, v0, v1); -} - -void gl4_2compat_glGetActiveUniformBlockName(void *_glfuncs, GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformBlockName) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniformBlockName(program, uniformBlockIndex, bufSize, length, uniformBlockName); -} - -void gl4_2compat_glGetActiveUniformBlockiv(void *_glfuncs, GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniformBlockiv(program, uniformBlockIndex, pname, params); -} - -GLuint gl4_2compat_glGetUniformBlockIndex(void *_glfuncs, GLuint program, const GLchar* uniformBlockName) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetUniformBlockIndex(program, uniformBlockName); -} - -void gl4_2compat_glGetActiveUniformName(void *_glfuncs, GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformName) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniformName(program, uniformIndex, bufSize, length, uniformName); -} - -void gl4_2compat_glGetActiveUniformsiv(void *_glfuncs, GLuint program, GLsizei uniformCount, const GLuint* uniformIndices, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniformsiv(program, uniformCount, uniformIndices, pname, params); -} - -void gl4_2compat_glPrimitiveRestartIndex(void *_glfuncs, GLuint index) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPrimitiveRestartIndex(index); -} - -void gl4_2compat_glTexBuffer(void *_glfuncs, GLenum target, GLenum internalFormat, GLuint buffer) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexBuffer(target, internalFormat, buffer); -} - -void gl4_2compat_glDrawElementsInstanced(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLsizei instancecount) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElementsInstanced(mode, count, gltype, indices, instancecount); -} - -void gl4_2compat_glDrawArraysInstanced(void *_glfuncs, GLenum mode, GLint first, GLsizei count, GLsizei instancecount) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawArraysInstanced(mode, first, count, instancecount); -} - -void gl4_2compat_glSampleMaski(void *_glfuncs, GLuint index, GLbitfield mask) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSampleMaski(index, mask); -} - -void gl4_2compat_glGetMultisamplefv(void *_glfuncs, GLenum pname, GLuint index, GLfloat* val) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMultisamplefv(pname, index, val); -} - -void gl4_2compat_glTexImage3DMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage3DMultisample(target, samples, internalFormat, width, height, depth, fixedsamplelocations); -} - -void gl4_2compat_glTexImage2DMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage2DMultisample(target, samples, internalFormat, width, height, fixedsamplelocations); -} - -void gl4_2compat_glGetSynciv(void *_glfuncs, GLsync sync, GLenum pname, GLsizei bufSize, GLsizei* length, GLint* values) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetSynciv(sync, pname, bufSize, length, values); -} - -void gl4_2compat_glGetInteger64v(void *_glfuncs, GLenum pname, GLint64* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetInteger64v(pname, params); -} - -void gl4_2compat_glWaitSync(void *_glfuncs, GLsync sync, GLbitfield flags, GLuint64 timeout) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWaitSync(sync, flags, timeout); -} - -GLenum gl4_2compat_glClientWaitSync(void *_glfuncs, GLsync sync, GLbitfield flags, GLuint64 timeout) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glClientWaitSync(sync, flags, timeout); -} - -void gl4_2compat_glDeleteSync(void *_glfuncs, GLsync sync) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteSync(sync); -} - -GLboolean gl4_2compat_glIsSync(void *_glfuncs, GLsync sync) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsSync(sync); -} - -GLsync gl4_2compat_glFenceSync(void *_glfuncs, GLenum condition, GLbitfield flags) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glFenceSync(condition, flags); -} - -void gl4_2compat_glProvokingVertex(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProvokingVertex(mode); -} - -void gl4_2compat_glDrawElementsInstancedBaseVertex(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLsizei instancecount, GLint basevertex) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElementsInstancedBaseVertex(mode, count, gltype, indices, instancecount, basevertex); -} - -void gl4_2compat_glDrawRangeElementsBaseVertex(void *_glfuncs, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum gltype, const GLvoid* indices, GLint basevertex) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawRangeElementsBaseVertex(mode, start, end, count, gltype, indices, basevertex); -} - -void gl4_2compat_glDrawElementsBaseVertex(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLint basevertex) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElementsBaseVertex(mode, count, gltype, indices, basevertex); -} - -void gl4_2compat_glFramebufferTexture(void *_glfuncs, GLenum target, GLenum attachment, GLuint texture, GLint level) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTexture(target, attachment, texture, level); -} - -void gl4_2compat_glGetBufferParameteri64v(void *_glfuncs, GLenum target, GLenum pname, GLint64* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBufferParameteri64v(target, pname, params); -} - -void gl4_2compat_glGetInteger64i_v(void *_glfuncs, GLenum target, GLuint index, GLint64* data) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetInteger64i_v(target, index, data); -} - -void gl4_2compat_glVertexAttribP4uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP4uiv(index, gltype, normalized, value); -} - -void gl4_2compat_glVertexAttribP4ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP4ui(index, gltype, normalized, value); -} - -void gl4_2compat_glVertexAttribP3uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP3uiv(index, gltype, normalized, value); -} - -void gl4_2compat_glVertexAttribP3ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP3ui(index, gltype, normalized, value); -} - -void gl4_2compat_glVertexAttribP2uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP2uiv(index, gltype, normalized, value); -} - -void gl4_2compat_glVertexAttribP2ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP2ui(index, gltype, normalized, value); -} - -void gl4_2compat_glVertexAttribP1uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP1uiv(index, gltype, normalized, value); -} - -void gl4_2compat_glVertexAttribP1ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP1ui(index, gltype, normalized, value); -} - -void gl4_2compat_glSecondaryColorP3uiv(void *_glfuncs, GLenum gltype, const GLuint* color) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColorP3uiv(gltype, color); -} - -void gl4_2compat_glSecondaryColorP3ui(void *_glfuncs, GLenum gltype, GLuint color) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColorP3ui(gltype, color); -} - -void gl4_2compat_glColorP4uiv(void *_glfuncs, GLenum gltype, const GLuint* color) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorP4uiv(gltype, color); -} - -void gl4_2compat_glColorP4ui(void *_glfuncs, GLenum gltype, GLuint color) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorP4ui(gltype, color); -} - -void gl4_2compat_glColorP3uiv(void *_glfuncs, GLenum gltype, const GLuint* color) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorP3uiv(gltype, color); -} - -void gl4_2compat_glColorP3ui(void *_glfuncs, GLenum gltype, GLuint color) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorP3ui(gltype, color); -} - -void gl4_2compat_glNormalP3uiv(void *_glfuncs, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormalP3uiv(gltype, coords); -} - -void gl4_2compat_glNormalP3ui(void *_glfuncs, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormalP3ui(gltype, coords); -} - -void gl4_2compat_glMultiTexCoordP4uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP4uiv(texture, gltype, coords); -} - -void gl4_2compat_glMultiTexCoordP4ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP4ui(texture, gltype, coords); -} - -void gl4_2compat_glMultiTexCoordP3uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP3uiv(texture, gltype, coords); -} - -void gl4_2compat_glMultiTexCoordP3ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP3ui(texture, gltype, coords); -} - -void gl4_2compat_glMultiTexCoordP2uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP2uiv(texture, gltype, coords); -} - -void gl4_2compat_glMultiTexCoordP2ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP2ui(texture, gltype, coords); -} - -void gl4_2compat_glMultiTexCoordP1uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP1uiv(texture, gltype, coords); -} - -void gl4_2compat_glMultiTexCoordP1ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP1ui(texture, gltype, coords); -} - -void gl4_2compat_glTexCoordP4uiv(void *_glfuncs, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP4uiv(gltype, coords); -} - -void gl4_2compat_glTexCoordP4ui(void *_glfuncs, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP4ui(gltype, coords); -} - -void gl4_2compat_glTexCoordP3uiv(void *_glfuncs, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP3uiv(gltype, coords); -} - -void gl4_2compat_glTexCoordP3ui(void *_glfuncs, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP3ui(gltype, coords); -} - -void gl4_2compat_glTexCoordP2uiv(void *_glfuncs, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP2uiv(gltype, coords); -} - -void gl4_2compat_glTexCoordP2ui(void *_glfuncs, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP2ui(gltype, coords); -} - -void gl4_2compat_glTexCoordP1uiv(void *_glfuncs, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP1uiv(gltype, coords); -} - -void gl4_2compat_glTexCoordP1ui(void *_glfuncs, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP1ui(gltype, coords); -} - -void gl4_2compat_glVertexP4uiv(void *_glfuncs, GLenum gltype, const GLuint* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexP4uiv(gltype, value); -} - -void gl4_2compat_glVertexP4ui(void *_glfuncs, GLenum gltype, GLuint value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexP4ui(gltype, value); -} - -void gl4_2compat_glVertexP3uiv(void *_glfuncs, GLenum gltype, const GLuint* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexP3uiv(gltype, value); -} - -void gl4_2compat_glVertexP3ui(void *_glfuncs, GLenum gltype, GLuint value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexP3ui(gltype, value); -} - -void gl4_2compat_glVertexP2uiv(void *_glfuncs, GLenum gltype, const GLuint* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexP2uiv(gltype, value); -} - -void gl4_2compat_glVertexP2ui(void *_glfuncs, GLenum gltype, GLuint value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexP2ui(gltype, value); -} - -void gl4_2compat_glGetQueryObjectui64v(void *_glfuncs, GLuint id, GLenum pname, GLuint64* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryObjectui64v(id, pname, params); -} - -void gl4_2compat_glGetQueryObjecti64v(void *_glfuncs, GLuint id, GLenum pname, GLint64* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryObjecti64v(id, pname, params); -} - -void gl4_2compat_glQueryCounter(void *_glfuncs, GLuint id, GLenum target) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glQueryCounter(id, target); -} - -void gl4_2compat_glGetSamplerParameterIuiv(void *_glfuncs, GLuint sampler, GLenum pname, GLuint* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetSamplerParameterIuiv(sampler, pname, params); -} - -void gl4_2compat_glGetSamplerParameterfv(void *_glfuncs, GLuint sampler, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetSamplerParameterfv(sampler, pname, params); -} - -void gl4_2compat_glGetSamplerParameterIiv(void *_glfuncs, GLuint sampler, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetSamplerParameterIiv(sampler, pname, params); -} - -void gl4_2compat_glGetSamplerParameteriv(void *_glfuncs, GLuint sampler, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetSamplerParameteriv(sampler, pname, params); -} - -void gl4_2compat_glSamplerParameterIuiv(void *_glfuncs, GLuint sampler, GLenum pname, const GLuint* param) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSamplerParameterIuiv(sampler, pname, param); -} - -void gl4_2compat_glSamplerParameterIiv(void *_glfuncs, GLuint sampler, GLenum pname, const GLint* param) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSamplerParameterIiv(sampler, pname, param); -} - -void gl4_2compat_glSamplerParameterfv(void *_glfuncs, GLuint sampler, GLenum pname, const GLfloat* param) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSamplerParameterfv(sampler, pname, param); -} - -void gl4_2compat_glSamplerParameterf(void *_glfuncs, GLuint sampler, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSamplerParameterf(sampler, pname, param); -} - -void gl4_2compat_glSamplerParameteriv(void *_glfuncs, GLuint sampler, GLenum pname, const GLint* param) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSamplerParameteriv(sampler, pname, param); -} - -void gl4_2compat_glSamplerParameteri(void *_glfuncs, GLuint sampler, GLenum pname, GLint param) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSamplerParameteri(sampler, pname, param); -} - -void gl4_2compat_glBindSampler(void *_glfuncs, GLuint unit, GLuint sampler) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindSampler(unit, sampler); -} - -GLboolean gl4_2compat_glIsSampler(void *_glfuncs, GLuint sampler) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsSampler(sampler); -} - -void gl4_2compat_glDeleteSamplers(void *_glfuncs, GLsizei count, const GLuint* samplers) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteSamplers(count, samplers); -} - -void gl4_2compat_glGenSamplers(void *_glfuncs, GLsizei count, GLuint* samplers) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenSamplers(count, samplers); -} - -GLint gl4_2compat_glGetFragDataIndex(void *_glfuncs, GLuint program, const GLchar* name) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetFragDataIndex(program, name); -} - -void gl4_2compat_glBindFragDataLocationIndexed(void *_glfuncs, GLuint program, GLuint colorNumber, GLuint index, const GLchar* name) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindFragDataLocationIndexed(program, colorNumber, index, name); -} - -void gl4_2compat_glVertexAttribDivisor(void *_glfuncs, GLuint index, GLuint divisor) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribDivisor(index, divisor); -} - -void gl4_2compat_glGetQueryIndexediv(void *_glfuncs, GLenum target, GLuint index, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryIndexediv(target, index, pname, params); -} - -void gl4_2compat_glEndQueryIndexed(void *_glfuncs, GLenum target, GLuint index) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndQueryIndexed(target, index); -} - -void gl4_2compat_glBeginQueryIndexed(void *_glfuncs, GLenum target, GLuint index, GLuint id) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBeginQueryIndexed(target, index, id); -} - -void gl4_2compat_glDrawTransformFeedbackStream(void *_glfuncs, GLenum mode, GLuint id, GLuint stream) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawTransformFeedbackStream(mode, id, stream); -} - -void gl4_2compat_glDrawTransformFeedback(void *_glfuncs, GLenum mode, GLuint id) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawTransformFeedback(mode, id); -} - -void gl4_2compat_glResumeTransformFeedback(void *_glfuncs) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glResumeTransformFeedback(); -} - -void gl4_2compat_glPauseTransformFeedback(void *_glfuncs) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPauseTransformFeedback(); -} - -GLboolean gl4_2compat_glIsTransformFeedback(void *_glfuncs, GLuint id) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsTransformFeedback(id); -} - -void gl4_2compat_glGenTransformFeedbacks(void *_glfuncs, GLsizei n, GLuint* ids) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenTransformFeedbacks(n, ids); -} - -void gl4_2compat_glDeleteTransformFeedbacks(void *_glfuncs, GLsizei n, const GLuint* ids) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteTransformFeedbacks(n, ids); -} - -void gl4_2compat_glBindTransformFeedback(void *_glfuncs, GLenum target, GLuint id) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindTransformFeedback(target, id); -} - -void gl4_2compat_glPatchParameterfv(void *_glfuncs, GLenum pname, const GLfloat* values) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPatchParameterfv(pname, values); -} - -void gl4_2compat_glPatchParameteri(void *_glfuncs, GLenum pname, GLint value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPatchParameteri(pname, value); -} - -void gl4_2compat_glGetProgramStageiv(void *_glfuncs, GLuint program, GLenum shadertype, GLenum pname, GLint* values) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetProgramStageiv(program, shadertype, pname, values); -} - -void gl4_2compat_glGetUniformSubroutineuiv(void *_glfuncs, GLenum shadertype, GLint location, GLuint* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetUniformSubroutineuiv(shadertype, location, params); -} - -void gl4_2compat_glUniformSubroutinesuiv(void *_glfuncs, GLenum shadertype, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformSubroutinesuiv(shadertype, count, value); -} - -void gl4_2compat_glGetActiveSubroutineName(void *_glfuncs, GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei* length, GLchar* name) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveSubroutineName(program, shadertype, index, bufSize, length, name); -} - -void gl4_2compat_glGetActiveSubroutineUniformName(void *_glfuncs, GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei* length, GLchar* name) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveSubroutineUniformName(program, shadertype, index, bufSize, length, name); -} - -void gl4_2compat_glGetActiveSubroutineUniformiv(void *_glfuncs, GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint* values) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveSubroutineUniformiv(program, shadertype, index, pname, values); -} - -GLuint gl4_2compat_glGetSubroutineIndex(void *_glfuncs, GLuint program, GLenum shadertype, const GLchar* name) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetSubroutineIndex(program, shadertype, name); -} - -GLint gl4_2compat_glGetSubroutineUniformLocation(void *_glfuncs, GLuint program, GLenum shadertype, const GLchar* name) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetSubroutineUniformLocation(program, shadertype, name); -} - -void gl4_2compat_glGetUniformdv(void *_glfuncs, GLuint program, GLint location, GLdouble* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetUniformdv(program, location, params); -} - -void gl4_2compat_glUniformMatrix4x3dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4x3dv(location, count, transpose, value); -} - -void gl4_2compat_glUniformMatrix4x2dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4x2dv(location, count, transpose, value); -} - -void gl4_2compat_glUniformMatrix3x4dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3x4dv(location, count, transpose, value); -} - -void gl4_2compat_glUniformMatrix3x2dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3x2dv(location, count, transpose, value); -} - -void gl4_2compat_glUniformMatrix2x4dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2x4dv(location, count, transpose, value); -} - -void gl4_2compat_glUniformMatrix2x3dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2x3dv(location, count, transpose, value); -} - -void gl4_2compat_glUniformMatrix4dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4dv(location, count, transpose, value); -} - -void gl4_2compat_glUniformMatrix3dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3dv(location, count, transpose, value); -} - -void gl4_2compat_glUniformMatrix2dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2dv(location, count, transpose, value); -} - -void gl4_2compat_glUniform4dv(void *_glfuncs, GLint location, GLsizei count, const GLdouble* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4dv(location, count, value); -} - -void gl4_2compat_glUniform3dv(void *_glfuncs, GLint location, GLsizei count, const GLdouble* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3dv(location, count, value); -} - -void gl4_2compat_glUniform2dv(void *_glfuncs, GLint location, GLsizei count, const GLdouble* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2dv(location, count, value); -} - -void gl4_2compat_glUniform1dv(void *_glfuncs, GLint location, GLsizei count, const GLdouble* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1dv(location, count, value); -} - -void gl4_2compat_glUniform4d(void *_glfuncs, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4d(location, v0, v1, v2, v3); -} - -void gl4_2compat_glUniform3d(void *_glfuncs, GLint location, GLdouble v0, GLdouble v1, GLdouble v2) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3d(location, v0, v1, v2); -} - -void gl4_2compat_glUniform2d(void *_glfuncs, GLint location, GLdouble v0, GLdouble v1) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2d(location, v0, v1); -} - -void gl4_2compat_glUniform1d(void *_glfuncs, GLint location, GLdouble v0) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1d(location, v0); -} - -void gl4_2compat_glDrawElementsIndirect(void *_glfuncs, GLenum mode, GLenum gltype, const GLvoid* indirect) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElementsIndirect(mode, gltype, indirect); -} - -void gl4_2compat_glDrawArraysIndirect(void *_glfuncs, GLenum mode, const GLvoid* indirect) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawArraysIndirect(mode, indirect); -} - -void gl4_2compat_glBlendFuncSeparatei(void *_glfuncs, GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendFuncSeparatei(buf, srcRGB, dstRGB, srcAlpha, dstAlpha); -} - -void gl4_2compat_glBlendFunci(void *_glfuncs, GLuint buf, GLenum src, GLenum dst) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendFunci(buf, src, dst); -} - -void gl4_2compat_glBlendEquationSeparatei(void *_glfuncs, GLuint buf, GLenum modeRGB, GLenum modeAlpha) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendEquationSeparatei(buf, modeRGB, modeAlpha); -} - -void gl4_2compat_glBlendEquationi(void *_glfuncs, GLuint buf, GLenum mode) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendEquationi(buf, mode); -} - -void gl4_2compat_glMinSampleShading(void *_glfuncs, GLfloat value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMinSampleShading(value); -} - -void gl4_2compat_glGetDoublei_v(void *_glfuncs, GLenum target, GLuint index, GLdouble* data) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetDoublei_v(target, index, data); -} - -void gl4_2compat_glGetFloati_v(void *_glfuncs, GLenum target, GLuint index, GLfloat* data) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetFloati_v(target, index, data); -} - -void gl4_2compat_glDepthRangeIndexed(void *_glfuncs, GLuint index, GLdouble n, GLdouble f) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthRangeIndexed(index, n, f); -} - -void gl4_2compat_glDepthRangeArrayv(void *_glfuncs, GLuint first, GLsizei count, const GLdouble* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthRangeArrayv(first, count, v); -} - -void gl4_2compat_glScissorIndexedv(void *_glfuncs, GLuint index, const GLint* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScissorIndexedv(index, v); -} - -void gl4_2compat_glScissorIndexed(void *_glfuncs, GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScissorIndexed(index, left, bottom, width, height); -} - -void gl4_2compat_glScissorArrayv(void *_glfuncs, GLuint first, GLsizei count, const GLint* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScissorArrayv(first, count, v); -} - -void gl4_2compat_glViewportIndexedfv(void *_glfuncs, GLuint index, const GLfloat* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glViewportIndexedfv(index, v); -} - -void gl4_2compat_glViewportIndexedf(void *_glfuncs, GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glViewportIndexedf(index, x, y, w, h); -} - -void gl4_2compat_glViewportArrayv(void *_glfuncs, GLuint first, GLsizei count, const GLfloat* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glViewportArrayv(first, count, v); -} - -void gl4_2compat_glGetVertexAttribLdv(void *_glfuncs, GLuint index, GLenum pname, GLdouble* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribLdv(index, pname, params); -} - -void gl4_2compat_glVertexAttribLPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribLPointer(index, size, gltype, stride, pointer); -} - -void gl4_2compat_glVertexAttribL4dv(void *_glfuncs, GLuint index, const GLdouble* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribL4dv(index, v); -} - -void gl4_2compat_glVertexAttribL3dv(void *_glfuncs, GLuint index, const GLdouble* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribL3dv(index, v); -} - -void gl4_2compat_glVertexAttribL2dv(void *_glfuncs, GLuint index, const GLdouble* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribL2dv(index, v); -} - -void gl4_2compat_glVertexAttribL1dv(void *_glfuncs, GLuint index, const GLdouble* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribL1dv(index, v); -} - -void gl4_2compat_glVertexAttribL4d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribL4d(index, x, y, z, w); -} - -void gl4_2compat_glVertexAttribL3d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribL3d(index, x, y, z); -} - -void gl4_2compat_glVertexAttribL2d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribL2d(index, x, y); -} - -void gl4_2compat_glVertexAttribL1d(void *_glfuncs, GLuint index, GLdouble x) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribL1d(index, x); -} - -void gl4_2compat_glGetProgramPipelineInfoLog(void *_glfuncs, GLuint pipeline, GLsizei bufSize, GLsizei* length, GLchar* infoLog) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetProgramPipelineInfoLog(pipeline, bufSize, length, infoLog); -} - -void gl4_2compat_glValidateProgramPipeline(void *_glfuncs, GLuint pipeline) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glValidateProgramPipeline(pipeline); -} - -void gl4_2compat_glProgramUniformMatrix4x3dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix4x3dv(program, location, count, transpose, value); -} - -void gl4_2compat_glProgramUniformMatrix3x4dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix3x4dv(program, location, count, transpose, value); -} - -void gl4_2compat_glProgramUniformMatrix4x2dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix4x2dv(program, location, count, transpose, value); -} - -void gl4_2compat_glProgramUniformMatrix2x4dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix2x4dv(program, location, count, transpose, value); -} - -void gl4_2compat_glProgramUniformMatrix3x2dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix3x2dv(program, location, count, transpose, value); -} - -void gl4_2compat_glProgramUniformMatrix2x3dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix2x3dv(program, location, count, transpose, value); -} - -void gl4_2compat_glProgramUniformMatrix4x3fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix4x3fv(program, location, count, transpose, value); -} - -void gl4_2compat_glProgramUniformMatrix3x4fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix3x4fv(program, location, count, transpose, value); -} - -void gl4_2compat_glProgramUniformMatrix4x2fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix4x2fv(program, location, count, transpose, value); -} - -void gl4_2compat_glProgramUniformMatrix2x4fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix2x4fv(program, location, count, transpose, value); -} - -void gl4_2compat_glProgramUniformMatrix3x2fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix3x2fv(program, location, count, transpose, value); -} - -void gl4_2compat_glProgramUniformMatrix2x3fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix2x3fv(program, location, count, transpose, value); -} - -void gl4_2compat_glProgramUniformMatrix4dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix4dv(program, location, count, transpose, value); -} - -void gl4_2compat_glProgramUniformMatrix3dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix3dv(program, location, count, transpose, value); -} - -void gl4_2compat_glProgramUniformMatrix2dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix2dv(program, location, count, transpose, value); -} - -void gl4_2compat_glProgramUniformMatrix4fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix4fv(program, location, count, transpose, value); -} - -void gl4_2compat_glProgramUniformMatrix3fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix3fv(program, location, count, transpose, value); -} - -void gl4_2compat_glProgramUniformMatrix2fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix2fv(program, location, count, transpose, value); -} - -void gl4_2compat_glProgramUniform4uiv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform4uiv(program, location, count, value); -} - -void gl4_2compat_glProgramUniform4ui(void *_glfuncs, GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform4ui(program, location, v0, v1, v2, v3); -} - -void gl4_2compat_glProgramUniform4dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLdouble* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform4dv(program, location, count, value); -} - -void gl4_2compat_glProgramUniform4d(void *_glfuncs, GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform4d(program, location, v0, v1, v2, v3); -} - -void gl4_2compat_glProgramUniform4fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform4fv(program, location, count, value); -} - -void gl4_2compat_glProgramUniform4f(void *_glfuncs, GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform4f(program, location, v0, v1, v2, v3); -} - -void gl4_2compat_glProgramUniform4iv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform4iv(program, location, count, value); -} - -void gl4_2compat_glProgramUniform4i(void *_glfuncs, GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform4i(program, location, v0, v1, v2, v3); -} - -void gl4_2compat_glProgramUniform3uiv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform3uiv(program, location, count, value); -} - -void gl4_2compat_glProgramUniform3ui(void *_glfuncs, GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform3ui(program, location, v0, v1, v2); -} - -void gl4_2compat_glProgramUniform3dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLdouble* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform3dv(program, location, count, value); -} - -void gl4_2compat_glProgramUniform3d(void *_glfuncs, GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform3d(program, location, v0, v1, v2); -} - -void gl4_2compat_glProgramUniform3fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform3fv(program, location, count, value); -} - -void gl4_2compat_glProgramUniform3f(void *_glfuncs, GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform3f(program, location, v0, v1, v2); -} - -void gl4_2compat_glProgramUniform3iv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform3iv(program, location, count, value); -} - -void gl4_2compat_glProgramUniform3i(void *_glfuncs, GLuint program, GLint location, GLint v0, GLint v1, GLint v2) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform3i(program, location, v0, v1, v2); -} - -void gl4_2compat_glProgramUniform2uiv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform2uiv(program, location, count, value); -} - -void gl4_2compat_glProgramUniform2ui(void *_glfuncs, GLuint program, GLint location, GLuint v0, GLuint v1) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform2ui(program, location, v0, v1); -} - -void gl4_2compat_glProgramUniform2dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLdouble* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform2dv(program, location, count, value); -} - -void gl4_2compat_glProgramUniform2d(void *_glfuncs, GLuint program, GLint location, GLdouble v0, GLdouble v1) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform2d(program, location, v0, v1); -} - -void gl4_2compat_glProgramUniform2fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform2fv(program, location, count, value); -} - -void gl4_2compat_glProgramUniform2f(void *_glfuncs, GLuint program, GLint location, GLfloat v0, GLfloat v1) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform2f(program, location, v0, v1); -} - -void gl4_2compat_glProgramUniform2iv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform2iv(program, location, count, value); -} - -void gl4_2compat_glProgramUniform2i(void *_glfuncs, GLuint program, GLint location, GLint v0, GLint v1) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform2i(program, location, v0, v1); -} - -void gl4_2compat_glProgramUniform1uiv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform1uiv(program, location, count, value); -} - -void gl4_2compat_glProgramUniform1ui(void *_glfuncs, GLuint program, GLint location, GLuint v0) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform1ui(program, location, v0); -} - -void gl4_2compat_glProgramUniform1dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLdouble* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform1dv(program, location, count, value); -} - -void gl4_2compat_glProgramUniform1d(void *_glfuncs, GLuint program, GLint location, GLdouble v0) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform1d(program, location, v0); -} - -void gl4_2compat_glProgramUniform1fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform1fv(program, location, count, value); -} - -void gl4_2compat_glProgramUniform1f(void *_glfuncs, GLuint program, GLint location, GLfloat v0) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform1f(program, location, v0); -} - -void gl4_2compat_glProgramUniform1iv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform1iv(program, location, count, value); -} - -void gl4_2compat_glProgramUniform1i(void *_glfuncs, GLuint program, GLint location, GLint v0) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform1i(program, location, v0); -} - -void gl4_2compat_glGetProgramPipelineiv(void *_glfuncs, GLuint pipeline, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetProgramPipelineiv(pipeline, pname, params); -} - -GLboolean gl4_2compat_glIsProgramPipeline(void *_glfuncs, GLuint pipeline) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsProgramPipeline(pipeline); -} - -void gl4_2compat_glGenProgramPipelines(void *_glfuncs, GLsizei n, GLuint* pipelines) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenProgramPipelines(n, pipelines); -} - -void gl4_2compat_glDeleteProgramPipelines(void *_glfuncs, GLsizei n, const GLuint* pipelines) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteProgramPipelines(n, pipelines); -} - -void gl4_2compat_glBindProgramPipeline(void *_glfuncs, GLuint pipeline) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindProgramPipeline(pipeline); -} - -void gl4_2compat_glActiveShaderProgram(void *_glfuncs, GLuint pipeline, GLuint program) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glActiveShaderProgram(pipeline, program); -} - -void gl4_2compat_glUseProgramStages(void *_glfuncs, GLuint pipeline, GLbitfield stages, GLuint program) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUseProgramStages(pipeline, stages, program); -} - -void gl4_2compat_glProgramParameteri(void *_glfuncs, GLuint program, GLenum pname, GLint value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramParameteri(program, pname, value); -} - -void gl4_2compat_glProgramBinary(void *_glfuncs, GLuint program, GLenum binaryFormat, const GLvoid* binary, GLsizei length) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramBinary(program, binaryFormat, binary, length); -} - -void gl4_2compat_glGetProgramBinary(void *_glfuncs, GLuint program, GLsizei bufSize, GLsizei* length, GLenum* binaryFormat, GLvoid* binary) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetProgramBinary(program, bufSize, length, binaryFormat, binary); -} - -void gl4_2compat_glClearDepthf(void *_glfuncs, GLfloat dd) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearDepthf(dd); -} - -void gl4_2compat_glDepthRangef(void *_glfuncs, GLfloat n, GLfloat f) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthRangef(n, f); -} - -void gl4_2compat_glGetShaderPrecisionFormat(void *_glfuncs, GLenum shadertype, GLenum precisionType, GLint* range_, GLint* precision) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetShaderPrecisionFormat(shadertype, precisionType, range_, precision); -} - -void gl4_2compat_glShaderBinary(void *_glfuncs, GLsizei count, const GLuint* shaders, GLenum binaryFormat, const GLvoid* binary, GLsizei length) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glShaderBinary(count, shaders, binaryFormat, binary, length); -} - -void gl4_2compat_glReleaseShaderCompiler(void *_glfuncs) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glReleaseShaderCompiler(); -} - -void gl4_2compat_glTexStorage3D(void *_glfuncs, GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexStorage3D(target, levels, internalFormat, width, height, depth); -} - -void gl4_2compat_glTexStorage2D(void *_glfuncs, GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexStorage2D(target, levels, internalFormat, width, height); -} - -void gl4_2compat_glTexStorage1D(void *_glfuncs, GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexStorage1D(target, levels, internalFormat, width); -} - -void gl4_2compat_glMemoryBarrier(void *_glfuncs, GLbitfield barriers) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMemoryBarrier(barriers); -} - -void gl4_2compat_glBindImageTexture(void *_glfuncs, GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindImageTexture(unit, texture, level, layered, layer, access, format); -} - -void gl4_2compat_glGetActiveAtomicCounterBufferiv(void *_glfuncs, GLuint program, GLuint bufferIndex, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveAtomicCounterBufferiv(program, bufferIndex, pname, params); -} - -void gl4_2compat_glGetInternalformativ(void *_glfuncs, GLenum target, GLenum internalFormat, GLenum pname, GLsizei bufSize, GLint* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetInternalformativ(target, internalFormat, pname, bufSize, params); -} - -void gl4_2compat_glDrawTransformFeedbackStreamInstanced(void *_glfuncs, GLenum mode, GLuint id, GLuint stream, GLsizei instancecount) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawTransformFeedbackStreamInstanced(mode, id, stream, instancecount); -} - -void gl4_2compat_glDrawTransformFeedbackInstanced(void *_glfuncs, GLenum mode, GLuint id, GLsizei instancecount) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawTransformFeedbackInstanced(mode, id, instancecount); -} - -void gl4_2compat_glDrawElementsInstancedBaseVertexBaseInstance(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElementsInstancedBaseVertexBaseInstance(mode, count, gltype, indices, instancecount, basevertex, baseinstance); -} - -void gl4_2compat_glDrawElementsInstancedBaseInstance(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLsizei instancecount, GLuint baseinstance) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElementsInstancedBaseInstance(mode, count, gltype, indices, instancecount, baseinstance); -} - -void gl4_2compat_glDrawArraysInstancedBaseInstance(void *_glfuncs, GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawArraysInstancedBaseInstance(mode, first, count, instancecount, baseinstance); -} - -void gl4_2compat_glTranslatef(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTranslatef(x, y, z); -} - -void gl4_2compat_glTranslated(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTranslated(x, y, z); -} - -void gl4_2compat_glScalef(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScalef(x, y, z); -} - -void gl4_2compat_glScaled(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScaled(x, y, z); -} - -void gl4_2compat_glRotatef(void *_glfuncs, GLfloat angle, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRotatef(angle, x, y, z); -} - -void gl4_2compat_glRotated(void *_glfuncs, GLdouble angle, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRotated(angle, x, y, z); -} - -void gl4_2compat_glPushMatrix(void *_glfuncs) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPushMatrix(); -} - -void gl4_2compat_glPopMatrix(void *_glfuncs) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPopMatrix(); -} - -void gl4_2compat_glOrtho(void *_glfuncs, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glOrtho(left, right, bottom, top, zNear, zFar); -} - -void gl4_2compat_glMultMatrixd(void *_glfuncs, const GLdouble* m) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultMatrixd(m); -} - -void gl4_2compat_glMultMatrixf(void *_glfuncs, const GLfloat* m) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultMatrixf(m); -} - -void gl4_2compat_glMatrixMode(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMatrixMode(mode); -} - -void gl4_2compat_glLoadMatrixd(void *_glfuncs, const GLdouble* m) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadMatrixd(m); -} - -void gl4_2compat_glLoadMatrixf(void *_glfuncs, const GLfloat* m) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadMatrixf(m); -} - -void gl4_2compat_glLoadIdentity(void *_glfuncs) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadIdentity(); -} - -void gl4_2compat_glFrustum(void *_glfuncs, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFrustum(left, right, bottom, top, zNear, zFar); -} - -GLboolean gl4_2compat_glIsList(void *_glfuncs, GLuint list) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsList(list); -} - -void gl4_2compat_glGetTexGeniv(void *_glfuncs, GLenum coord, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexGeniv(coord, pname, params); -} - -void gl4_2compat_glGetTexGenfv(void *_glfuncs, GLenum coord, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexGenfv(coord, pname, params); -} - -void gl4_2compat_glGetTexGendv(void *_glfuncs, GLenum coord, GLenum pname, GLdouble* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexGendv(coord, pname, params); -} - -void gl4_2compat_glGetTexEnviv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexEnviv(target, pname, params); -} - -void gl4_2compat_glGetTexEnvfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexEnvfv(target, pname, params); -} - -void gl4_2compat_glGetPolygonStipple(void *_glfuncs, GLubyte* mask) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetPolygonStipple(mask); -} - -void gl4_2compat_glGetPixelMapusv(void *_glfuncs, GLenum glmap, GLushort* values) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetPixelMapusv(glmap, values); -} - -void gl4_2compat_glGetPixelMapuiv(void *_glfuncs, GLenum glmap, GLuint* values) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetPixelMapuiv(glmap, values); -} - -void gl4_2compat_glGetPixelMapfv(void *_glfuncs, GLenum glmap, GLfloat* values) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetPixelMapfv(glmap, values); -} - -void gl4_2compat_glGetMaterialiv(void *_glfuncs, GLenum face, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMaterialiv(face, pname, params); -} - -void gl4_2compat_glGetMaterialfv(void *_glfuncs, GLenum face, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMaterialfv(face, pname, params); -} - -void gl4_2compat_glGetMapiv(void *_glfuncs, GLenum target, GLenum query, GLint* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMapiv(target, query, v); -} - -void gl4_2compat_glGetMapfv(void *_glfuncs, GLenum target, GLenum query, GLfloat* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMapfv(target, query, v); -} - -void gl4_2compat_glGetMapdv(void *_glfuncs, GLenum target, GLenum query, GLdouble* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMapdv(target, query, v); -} - -void gl4_2compat_glGetLightiv(void *_glfuncs, GLenum light, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetLightiv(light, pname, params); -} - -void gl4_2compat_glGetLightfv(void *_glfuncs, GLenum light, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetLightfv(light, pname, params); -} - -void gl4_2compat_glGetClipPlane(void *_glfuncs, GLenum plane, GLdouble* equation) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetClipPlane(plane, equation); -} - -void gl4_2compat_glDrawPixels(void *_glfuncs, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawPixels(width, height, format, gltype, pixels); -} - -void gl4_2compat_glCopyPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum gltype) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyPixels(x, y, width, height, gltype); -} - -void gl4_2compat_glPixelMapusv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLushort* values) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelMapusv(glmap, mapsize, values); -} - -void gl4_2compat_glPixelMapuiv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLuint* values) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelMapuiv(glmap, mapsize, values); -} - -void gl4_2compat_glPixelMapfv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLfloat* values) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelMapfv(glmap, mapsize, values); -} - -void gl4_2compat_glPixelTransferi(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelTransferi(pname, param); -} - -void gl4_2compat_glPixelTransferf(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelTransferf(pname, param); -} - -void gl4_2compat_glPixelZoom(void *_glfuncs, GLfloat xfactor, GLfloat yfactor) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelZoom(xfactor, yfactor); -} - -void gl4_2compat_glAlphaFunc(void *_glfuncs, GLenum glfunc, GLfloat ref) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glAlphaFunc(glfunc, ref); -} - -void gl4_2compat_glEvalPoint2(void *_glfuncs, GLint i, GLint j) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalPoint2(i, j); -} - -void gl4_2compat_glEvalMesh2(void *_glfuncs, GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalMesh2(mode, i1, i2, j1, j2); -} - -void gl4_2compat_glEvalPoint1(void *_glfuncs, GLint i) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalPoint1(i); -} - -void gl4_2compat_glEvalMesh1(void *_glfuncs, GLenum mode, GLint i1, GLint i2) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalMesh1(mode, i1, i2); -} - -void gl4_2compat_glEvalCoord2fv(void *_glfuncs, const GLfloat* u) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord2fv(u); -} - -void gl4_2compat_glEvalCoord2f(void *_glfuncs, GLfloat u, GLfloat v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord2f(u, v); -} - -void gl4_2compat_glEvalCoord2dv(void *_glfuncs, const GLdouble* u) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord2dv(u); -} - -void gl4_2compat_glEvalCoord2d(void *_glfuncs, GLdouble u, GLdouble v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord2d(u, v); -} - -void gl4_2compat_glEvalCoord1fv(void *_glfuncs, const GLfloat* u) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord1fv(u); -} - -void gl4_2compat_glEvalCoord1f(void *_glfuncs, GLfloat u) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord1f(u); -} - -void gl4_2compat_glEvalCoord1dv(void *_glfuncs, const GLdouble* u) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord1dv(u); -} - -void gl4_2compat_glEvalCoord1d(void *_glfuncs, GLdouble u) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord1d(u); -} - -void gl4_2compat_glMapGrid2f(void *_glfuncs, GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMapGrid2f(un, u1, u2, vn, v1, v2); -} - -void gl4_2compat_glMapGrid2d(void *_glfuncs, GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMapGrid2d(un, u1, u2, vn, v1, v2); -} - -void gl4_2compat_glMapGrid1f(void *_glfuncs, GLint un, GLfloat u1, GLfloat u2) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMapGrid1f(un, u1, u2); -} - -void gl4_2compat_glMapGrid1d(void *_glfuncs, GLint un, GLdouble u1, GLdouble u2) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMapGrid1d(un, u1, u2); -} - -void gl4_2compat_glMap2f(void *_glfuncs, GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat* points) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMap2f(target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points); -} - -void gl4_2compat_glMap2d(void *_glfuncs, GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble* points) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMap2d(target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points); -} - -void gl4_2compat_glMap1f(void *_glfuncs, GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat* points) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMap1f(target, u1, u2, stride, order, points); -} - -void gl4_2compat_glMap1d(void *_glfuncs, GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble* points) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMap1d(target, u1, u2, stride, order, points); -} - -void gl4_2compat_glPushAttrib(void *_glfuncs, GLbitfield mask) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPushAttrib(mask); -} - -void gl4_2compat_glPopAttrib(void *_glfuncs) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPopAttrib(); -} - -void gl4_2compat_glAccum(void *_glfuncs, GLenum op, GLfloat value) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glAccum(op, value); -} - -void gl4_2compat_glIndexMask(void *_glfuncs, GLuint mask) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexMask(mask); -} - -void gl4_2compat_glClearIndex(void *_glfuncs, GLfloat c) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearIndex(c); -} - -void gl4_2compat_glClearAccum(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearAccum(red, green, blue, alpha); -} - -void gl4_2compat_glPushName(void *_glfuncs, GLuint name) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPushName(name); -} - -void gl4_2compat_glPopName(void *_glfuncs) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPopName(); -} - -void gl4_2compat_glPassThrough(void *_glfuncs, GLfloat token) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPassThrough(token); -} - -void gl4_2compat_glLoadName(void *_glfuncs, GLuint name) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadName(name); -} - -void gl4_2compat_glInitNames(void *_glfuncs) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glInitNames(); -} - -GLint gl4_2compat_glRenderMode(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glRenderMode(mode); -} - -void gl4_2compat_glSelectBuffer(void *_glfuncs, GLsizei size, GLuint* buffer) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSelectBuffer(size, buffer); -} - -void gl4_2compat_glFeedbackBuffer(void *_glfuncs, GLsizei size, GLenum gltype, GLfloat* buffer) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFeedbackBuffer(size, gltype, buffer); -} - -void gl4_2compat_glTexGeniv(void *_glfuncs, GLenum coord, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGeniv(coord, pname, params); -} - -void gl4_2compat_glTexGeni(void *_glfuncs, GLenum coord, GLenum pname, GLint param) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGeni(coord, pname, param); -} - -void gl4_2compat_glTexGenfv(void *_glfuncs, GLenum coord, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGenfv(coord, pname, params); -} - -void gl4_2compat_glTexGenf(void *_glfuncs, GLenum coord, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGenf(coord, pname, param); -} - -void gl4_2compat_glTexGendv(void *_glfuncs, GLenum coord, GLenum pname, const GLdouble* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGendv(coord, pname, params); -} - -void gl4_2compat_glTexGend(void *_glfuncs, GLenum coord, GLenum pname, GLdouble param) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGend(coord, pname, param); -} - -void gl4_2compat_glTexEnviv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexEnviv(target, pname, params); -} - -void gl4_2compat_glTexEnvi(void *_glfuncs, GLenum target, GLenum pname, GLint param) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexEnvi(target, pname, param); -} - -void gl4_2compat_glTexEnvfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexEnvfv(target, pname, params); -} - -void gl4_2compat_glTexEnvf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexEnvf(target, pname, param); -} - -void gl4_2compat_glShadeModel(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glShadeModel(mode); -} - -void gl4_2compat_glPolygonStipple(void *_glfuncs, const GLubyte* mask) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPolygonStipple(mask); -} - -void gl4_2compat_glMaterialiv(void *_glfuncs, GLenum face, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMaterialiv(face, pname, params); -} - -void gl4_2compat_glMateriali(void *_glfuncs, GLenum face, GLenum pname, GLint param) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMateriali(face, pname, param); -} - -void gl4_2compat_glMaterialfv(void *_glfuncs, GLenum face, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMaterialfv(face, pname, params); -} - -void gl4_2compat_glMaterialf(void *_glfuncs, GLenum face, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMaterialf(face, pname, param); -} - -void gl4_2compat_glLineStipple(void *_glfuncs, GLint factor, GLushort pattern) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLineStipple(factor, pattern); -} - -void gl4_2compat_glLightModeliv(void *_glfuncs, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightModeliv(pname, params); -} - -void gl4_2compat_glLightModeli(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightModeli(pname, param); -} - -void gl4_2compat_glLightModelfv(void *_glfuncs, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightModelfv(pname, params); -} - -void gl4_2compat_glLightModelf(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightModelf(pname, param); -} - -void gl4_2compat_glLightiv(void *_glfuncs, GLenum light, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightiv(light, pname, params); -} - -void gl4_2compat_glLighti(void *_glfuncs, GLenum light, GLenum pname, GLint param) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLighti(light, pname, param); -} - -void gl4_2compat_glLightfv(void *_glfuncs, GLenum light, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightfv(light, pname, params); -} - -void gl4_2compat_glLightf(void *_glfuncs, GLenum light, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightf(light, pname, param); -} - -void gl4_2compat_glFogiv(void *_glfuncs, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogiv(pname, params); -} - -void gl4_2compat_glFogi(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogi(pname, param); -} - -void gl4_2compat_glFogfv(void *_glfuncs, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogfv(pname, params); -} - -void gl4_2compat_glFogf(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogf(pname, param); -} - -void gl4_2compat_glColorMaterial(void *_glfuncs, GLenum face, GLenum mode) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorMaterial(face, mode); -} - -void gl4_2compat_glClipPlane(void *_glfuncs, GLenum plane, const GLdouble* equation) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClipPlane(plane, equation); -} - -void gl4_2compat_glVertex4sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4sv(v); -} - -void gl4_2compat_glVertex4s(void *_glfuncs, GLshort x, GLshort y, GLshort z, GLshort w) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4s(x, y, z, w); -} - -void gl4_2compat_glVertex4iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4iv(v); -} - -void gl4_2compat_glVertex4i(void *_glfuncs, GLint x, GLint y, GLint z, GLint w) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4i(x, y, z, w); -} - -void gl4_2compat_glVertex4fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4fv(v); -} - -void gl4_2compat_glVertex4f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z, GLfloat w) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4f(x, y, z, w); -} - -void gl4_2compat_glVertex4dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4dv(v); -} - -void gl4_2compat_glVertex4d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z, GLdouble w) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4d(x, y, z, w); -} - -void gl4_2compat_glVertex3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3sv(v); -} - -void gl4_2compat_glVertex3s(void *_glfuncs, GLshort x, GLshort y, GLshort z) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3s(x, y, z); -} - -void gl4_2compat_glVertex3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3iv(v); -} - -void gl4_2compat_glVertex3i(void *_glfuncs, GLint x, GLint y, GLint z) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3i(x, y, z); -} - -void gl4_2compat_glVertex3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3fv(v); -} - -void gl4_2compat_glVertex3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3f(x, y, z); -} - -void gl4_2compat_glVertex3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3dv(v); -} - -void gl4_2compat_glVertex3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3d(x, y, z); -} - -void gl4_2compat_glVertex2sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2sv(v); -} - -void gl4_2compat_glVertex2s(void *_glfuncs, GLshort x, GLshort y) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2s(x, y); -} - -void gl4_2compat_glVertex2iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2iv(v); -} - -void gl4_2compat_glVertex2i(void *_glfuncs, GLint x, GLint y) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2i(x, y); -} - -void gl4_2compat_glVertex2fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2fv(v); -} - -void gl4_2compat_glVertex2f(void *_glfuncs, GLfloat x, GLfloat y) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2f(x, y); -} - -void gl4_2compat_glVertex2dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2dv(v); -} - -void gl4_2compat_glVertex2d(void *_glfuncs, GLdouble x, GLdouble y) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2d(x, y); -} - -void gl4_2compat_glTexCoord4sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4sv(v); -} - -void gl4_2compat_glTexCoord4s(void *_glfuncs, GLshort s, GLshort t, GLshort r, GLshort q) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4s(s, t, r, q); -} - -void gl4_2compat_glTexCoord4iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4iv(v); -} - -void gl4_2compat_glTexCoord4i(void *_glfuncs, GLint s, GLint t, GLint r, GLint q) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4i(s, t, r, q); -} - -void gl4_2compat_glTexCoord4fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4fv(v); -} - -void gl4_2compat_glTexCoord4f(void *_glfuncs, GLfloat s, GLfloat t, GLfloat r, GLfloat q) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4f(s, t, r, q); -} - -void gl4_2compat_glTexCoord4dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4dv(v); -} - -void gl4_2compat_glTexCoord4d(void *_glfuncs, GLdouble s, GLdouble t, GLdouble r, GLdouble q) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4d(s, t, r, q); -} - -void gl4_2compat_glTexCoord3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3sv(v); -} - -void gl4_2compat_glTexCoord3s(void *_glfuncs, GLshort s, GLshort t, GLshort r) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3s(s, t, r); -} - -void gl4_2compat_glTexCoord3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3iv(v); -} - -void gl4_2compat_glTexCoord3i(void *_glfuncs, GLint s, GLint t, GLint r) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3i(s, t, r); -} - -void gl4_2compat_glTexCoord3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3fv(v); -} - -void gl4_2compat_glTexCoord3f(void *_glfuncs, GLfloat s, GLfloat t, GLfloat r) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3f(s, t, r); -} - -void gl4_2compat_glTexCoord3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3dv(v); -} - -void gl4_2compat_glTexCoord3d(void *_glfuncs, GLdouble s, GLdouble t, GLdouble r) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3d(s, t, r); -} - -void gl4_2compat_glTexCoord2sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2sv(v); -} - -void gl4_2compat_glTexCoord2s(void *_glfuncs, GLshort s, GLshort t) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2s(s, t); -} - -void gl4_2compat_glTexCoord2iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2iv(v); -} - -void gl4_2compat_glTexCoord2i(void *_glfuncs, GLint s, GLint t) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2i(s, t); -} - -void gl4_2compat_glTexCoord2fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2fv(v); -} - -void gl4_2compat_glTexCoord2f(void *_glfuncs, GLfloat s, GLfloat t) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2f(s, t); -} - -void gl4_2compat_glTexCoord2dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2dv(v); -} - -void gl4_2compat_glTexCoord2d(void *_glfuncs, GLdouble s, GLdouble t) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2d(s, t); -} - -void gl4_2compat_glTexCoord1sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1sv(v); -} - -void gl4_2compat_glTexCoord1s(void *_glfuncs, GLshort s) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1s(s); -} - -void gl4_2compat_glTexCoord1iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1iv(v); -} - -void gl4_2compat_glTexCoord1i(void *_glfuncs, GLint s) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1i(s); -} - -void gl4_2compat_glTexCoord1fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1fv(v); -} - -void gl4_2compat_glTexCoord1f(void *_glfuncs, GLfloat s) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1f(s); -} - -void gl4_2compat_glTexCoord1dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1dv(v); -} - -void gl4_2compat_glTexCoord1d(void *_glfuncs, GLdouble s) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1d(s); -} - -void gl4_2compat_glRectsv(void *_glfuncs, const GLshort* v1, const GLshort* v2) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectsv(v1, v2); -} - -void gl4_2compat_glRects(void *_glfuncs, GLshort x1, GLshort y1, GLshort x2, GLshort y2) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRects(x1, y1, x2, y2); -} - -void gl4_2compat_glRectiv(void *_glfuncs, const GLint* v1, const GLint* v2) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectiv(v1, v2); -} - -void gl4_2compat_glRecti(void *_glfuncs, GLint x1, GLint y1, GLint x2, GLint y2) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRecti(x1, y1, x2, y2); -} - -void gl4_2compat_glRectfv(void *_glfuncs, const GLfloat* v1, const GLfloat* v2) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectfv(v1, v2); -} - -void gl4_2compat_glRectf(void *_glfuncs, GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectf(x1, y1, x2, y2); -} - -void gl4_2compat_glRectdv(void *_glfuncs, const GLdouble* v1, const GLdouble* v2) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectdv(v1, v2); -} - -void gl4_2compat_glRectd(void *_glfuncs, GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectd(x1, y1, x2, y2); -} - -void gl4_2compat_glRasterPos4sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4sv(v); -} - -void gl4_2compat_glRasterPos4s(void *_glfuncs, GLshort x, GLshort y, GLshort z, GLshort w) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4s(x, y, z, w); -} - -void gl4_2compat_glRasterPos4iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4iv(v); -} - -void gl4_2compat_glRasterPos4i(void *_glfuncs, GLint x, GLint y, GLint z, GLint w) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4i(x, y, z, w); -} - -void gl4_2compat_glRasterPos4fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4fv(v); -} - -void gl4_2compat_glRasterPos4f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z, GLfloat w) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4f(x, y, z, w); -} - -void gl4_2compat_glRasterPos4dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4dv(v); -} - -void gl4_2compat_glRasterPos4d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z, GLdouble w) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4d(x, y, z, w); -} - -void gl4_2compat_glRasterPos3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3sv(v); -} - -void gl4_2compat_glRasterPos3s(void *_glfuncs, GLshort x, GLshort y, GLshort z) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3s(x, y, z); -} - -void gl4_2compat_glRasterPos3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3iv(v); -} - -void gl4_2compat_glRasterPos3i(void *_glfuncs, GLint x, GLint y, GLint z) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3i(x, y, z); -} - -void gl4_2compat_glRasterPos3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3fv(v); -} - -void gl4_2compat_glRasterPos3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3f(x, y, z); -} - -void gl4_2compat_glRasterPos3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3dv(v); -} - -void gl4_2compat_glRasterPos3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3d(x, y, z); -} - -void gl4_2compat_glRasterPos2sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2sv(v); -} - -void gl4_2compat_glRasterPos2s(void *_glfuncs, GLshort x, GLshort y) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2s(x, y); -} - -void gl4_2compat_glRasterPos2iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2iv(v); -} - -void gl4_2compat_glRasterPos2i(void *_glfuncs, GLint x, GLint y) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2i(x, y); -} - -void gl4_2compat_glRasterPos2fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2fv(v); -} - -void gl4_2compat_glRasterPos2f(void *_glfuncs, GLfloat x, GLfloat y) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2f(x, y); -} - -void gl4_2compat_glRasterPos2dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2dv(v); -} - -void gl4_2compat_glRasterPos2d(void *_glfuncs, GLdouble x, GLdouble y) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2d(x, y); -} - -void gl4_2compat_glNormal3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3sv(v); -} - -void gl4_2compat_glNormal3s(void *_glfuncs, GLshort nx, GLshort ny, GLshort nz) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3s(nx, ny, nz); -} - -void gl4_2compat_glNormal3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3iv(v); -} - -void gl4_2compat_glNormal3i(void *_glfuncs, GLint nx, GLint ny, GLint nz) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3i(nx, ny, nz); -} - -void gl4_2compat_glNormal3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3fv(v); -} - -void gl4_2compat_glNormal3f(void *_glfuncs, GLfloat nx, GLfloat ny, GLfloat nz) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3f(nx, ny, nz); -} - -void gl4_2compat_glNormal3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3dv(v); -} - -void gl4_2compat_glNormal3d(void *_glfuncs, GLdouble nx, GLdouble ny, GLdouble nz) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3d(nx, ny, nz); -} - -void gl4_2compat_glNormal3bv(void *_glfuncs, const GLbyte* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3bv(v); -} - -void gl4_2compat_glNormal3b(void *_glfuncs, GLbyte nx, GLbyte ny, GLbyte nz) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3b(nx, ny, nz); -} - -void gl4_2compat_glIndexsv(void *_glfuncs, const GLshort* c) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexsv(c); -} - -void gl4_2compat_glIndexs(void *_glfuncs, GLshort c) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexs(c); -} - -void gl4_2compat_glIndexiv(void *_glfuncs, const GLint* c) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexiv(c); -} - -void gl4_2compat_glIndexi(void *_glfuncs, GLint c) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexi(c); -} - -void gl4_2compat_glIndexfv(void *_glfuncs, const GLfloat* c) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexfv(c); -} - -void gl4_2compat_glIndexf(void *_glfuncs, GLfloat c) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexf(c); -} - -void gl4_2compat_glIndexdv(void *_glfuncs, const GLdouble* c) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexdv(c); -} - -void gl4_2compat_glIndexd(void *_glfuncs, GLdouble c) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexd(c); -} - -void gl4_2compat_glEnd(void *_glfuncs) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnd(); -} - -void gl4_2compat_glEdgeFlagv(void *_glfuncs, const GLboolean* flag) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEdgeFlagv(flag); -} - -void gl4_2compat_glEdgeFlag(void *_glfuncs, GLboolean flag) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEdgeFlag(flag); -} - -void gl4_2compat_glColor4usv(void *_glfuncs, const GLushort* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4usv(v); -} - -void gl4_2compat_glColor4us(void *_glfuncs, GLushort red, GLushort green, GLushort blue, GLushort alpha) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4us(red, green, blue, alpha); -} - -void gl4_2compat_glColor4uiv(void *_glfuncs, const GLuint* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4uiv(v); -} - -void gl4_2compat_glColor4ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue, GLuint alpha) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4ui(red, green, blue, alpha); -} - -void gl4_2compat_glColor4ubv(void *_glfuncs, const GLubyte* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4ubv(v); -} - -void gl4_2compat_glColor4ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4ub(red, green, blue, alpha); -} - -void gl4_2compat_glColor4sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4sv(v); -} - -void gl4_2compat_glColor4s(void *_glfuncs, GLshort red, GLshort green, GLshort blue, GLshort alpha) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4s(red, green, blue, alpha); -} - -void gl4_2compat_glColor4iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4iv(v); -} - -void gl4_2compat_glColor4i(void *_glfuncs, GLint red, GLint green, GLint blue, GLint alpha) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4i(red, green, blue, alpha); -} - -void gl4_2compat_glColor4fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4fv(v); -} - -void gl4_2compat_glColor4f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4f(red, green, blue, alpha); -} - -void gl4_2compat_glColor4dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4dv(v); -} - -void gl4_2compat_glColor4d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4d(red, green, blue, alpha); -} - -void gl4_2compat_glColor4bv(void *_glfuncs, const GLbyte* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4bv(v); -} - -void gl4_2compat_glColor4b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4b(red, green, blue, alpha); -} - -void gl4_2compat_glColor3usv(void *_glfuncs, const GLushort* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3usv(v); -} - -void gl4_2compat_glColor3us(void *_glfuncs, GLushort red, GLushort green, GLushort blue) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3us(red, green, blue); -} - -void gl4_2compat_glColor3uiv(void *_glfuncs, const GLuint* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3uiv(v); -} - -void gl4_2compat_glColor3ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3ui(red, green, blue); -} - -void gl4_2compat_glColor3ubv(void *_glfuncs, const GLubyte* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3ubv(v); -} - -void gl4_2compat_glColor3ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3ub(red, green, blue); -} - -void gl4_2compat_glColor3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3sv(v); -} - -void gl4_2compat_glColor3s(void *_glfuncs, GLshort red, GLshort green, GLshort blue) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3s(red, green, blue); -} - -void gl4_2compat_glColor3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3iv(v); -} - -void gl4_2compat_glColor3i(void *_glfuncs, GLint red, GLint green, GLint blue) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3i(red, green, blue); -} - -void gl4_2compat_glColor3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3fv(v); -} - -void gl4_2compat_glColor3f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3f(red, green, blue); -} - -void gl4_2compat_glColor3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3dv(v); -} - -void gl4_2compat_glColor3d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3d(red, green, blue); -} - -void gl4_2compat_glColor3bv(void *_glfuncs, const GLbyte* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3bv(v); -} - -void gl4_2compat_glColor3b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3b(red, green, blue); -} - -void gl4_2compat_glBitmap(void *_glfuncs, GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte* bitmap) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBitmap(width, height, xorig, yorig, xmove, ymove, bitmap); -} - -void gl4_2compat_glBegin(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBegin(mode); -} - -void gl4_2compat_glListBase(void *_glfuncs, GLuint base) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glListBase(base); -} - -GLuint gl4_2compat_glGenLists(void *_glfuncs, GLsizei range_) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGenLists(range_); -} - -void gl4_2compat_glDeleteLists(void *_glfuncs, GLuint list, GLsizei range_) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteLists(list, range_); -} - -void gl4_2compat_glCallLists(void *_glfuncs, GLsizei n, GLenum gltype, const GLvoid* lists) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCallLists(n, gltype, lists); -} - -void gl4_2compat_glCallList(void *_glfuncs, GLuint list) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCallList(list); -} - -void gl4_2compat_glEndList(void *_glfuncs) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndList(); -} - -void gl4_2compat_glNewList(void *_glfuncs, GLuint list, GLenum mode) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNewList(list, mode); -} - -void gl4_2compat_glPushClientAttrib(void *_glfuncs, GLbitfield mask) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPushClientAttrib(mask); -} - -void gl4_2compat_glPopClientAttrib(void *_glfuncs) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPopClientAttrib(); -} - -void gl4_2compat_glPrioritizeTextures(void *_glfuncs, GLsizei n, const GLuint* textures, const GLfloat* priorities) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPrioritizeTextures(n, textures, priorities); -} - -GLboolean gl4_2compat_glAreTexturesResident(void *_glfuncs, GLsizei n, const GLuint* textures, GLboolean* residences) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glAreTexturesResident(n, textures, residences); -} - -void gl4_2compat_glVertexPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexPointer(size, gltype, stride, pointer); -} - -void gl4_2compat_glTexCoordPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordPointer(size, gltype, stride, pointer); -} - -void gl4_2compat_glNormalPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormalPointer(gltype, stride, pointer); -} - -void gl4_2compat_glInterleavedArrays(void *_glfuncs, GLenum format, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glInterleavedArrays(format, stride, pointer); -} - -void gl4_2compat_glIndexPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexPointer(gltype, stride, pointer); -} - -void gl4_2compat_glEnableClientState(void *_glfuncs, GLenum array) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnableClientState(array); -} - -void gl4_2compat_glEdgeFlagPointer(void *_glfuncs, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEdgeFlagPointer(stride, pointer); -} - -void gl4_2compat_glDisableClientState(void *_glfuncs, GLenum array) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDisableClientState(array); -} - -void gl4_2compat_glColorPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorPointer(size, gltype, stride, pointer); -} - -void gl4_2compat_glArrayElement(void *_glfuncs, GLint i) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glArrayElement(i); -} - -void gl4_2compat_glResetMinmax(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glResetMinmax(target); -} - -void gl4_2compat_glResetHistogram(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glResetHistogram(target); -} - -void gl4_2compat_glMinmax(void *_glfuncs, GLenum target, GLenum internalFormat, GLboolean sink) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMinmax(target, internalFormat, sink); -} - -void gl4_2compat_glHistogram(void *_glfuncs, GLenum target, GLsizei width, GLenum internalFormat, GLboolean sink) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glHistogram(target, width, internalFormat, sink); -} - -void gl4_2compat_glGetMinmaxParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMinmaxParameteriv(target, pname, params); -} - -void gl4_2compat_glGetMinmaxParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMinmaxParameterfv(target, pname, params); -} - -void gl4_2compat_glGetMinmax(void *_glfuncs, GLenum target, GLboolean reset, GLenum format, GLenum gltype, GLvoid* values) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMinmax(target, reset, format, gltype, values); -} - -void gl4_2compat_glGetHistogramParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetHistogramParameteriv(target, pname, params); -} - -void gl4_2compat_glGetHistogramParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetHistogramParameterfv(target, pname, params); -} - -void gl4_2compat_glGetHistogram(void *_glfuncs, GLenum target, GLboolean reset, GLenum format, GLenum gltype, GLvoid* values) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetHistogram(target, reset, format, gltype, values); -} - -void gl4_2compat_glSeparableFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* row, const GLvoid* column) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSeparableFilter2D(target, internalFormat, width, height, format, gltype, row, column); -} - -void gl4_2compat_glGetSeparableFilter(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* row, GLvoid* column, GLvoid* span) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetSeparableFilter(target, format, gltype, row, column, span); -} - -void gl4_2compat_glGetConvolutionParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetConvolutionParameteriv(target, pname, params); -} - -void gl4_2compat_glGetConvolutionParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetConvolutionParameterfv(target, pname, params); -} - -void gl4_2compat_glGetConvolutionFilter(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* image) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetConvolutionFilter(target, format, gltype, image); -} - -void gl4_2compat_glCopyConvolutionFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyConvolutionFilter2D(target, internalFormat, x, y, width, height); -} - -void gl4_2compat_glCopyConvolutionFilter1D(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyConvolutionFilter1D(target, internalFormat, x, y, width); -} - -void gl4_2compat_glConvolutionParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionParameteriv(target, pname, params); -} - -void gl4_2compat_glConvolutionParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionParameteri(target, pname, params); -} - -void gl4_2compat_glConvolutionParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionParameterfv(target, pname, params); -} - -void gl4_2compat_glConvolutionParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionParameterf(target, pname, params); -} - -void gl4_2compat_glConvolutionFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* image) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionFilter2D(target, internalFormat, width, height, format, gltype, image); -} - -void gl4_2compat_glConvolutionFilter1D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum gltype, const GLvoid* image) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionFilter1D(target, internalFormat, width, format, gltype, image); -} - -void gl4_2compat_glCopyColorSubTable(void *_glfuncs, GLenum target, GLsizei start, GLint x, GLint y, GLsizei width) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyColorSubTable(target, start, x, y, width); -} - -void gl4_2compat_glColorSubTable(void *_glfuncs, GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum gltype, const GLvoid* data) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorSubTable(target, start, count, format, gltype, data); -} - -void gl4_2compat_glGetColorTableParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetColorTableParameteriv(target, pname, params); -} - -void gl4_2compat_glGetColorTableParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetColorTableParameterfv(target, pname, params); -} - -void gl4_2compat_glGetColorTable(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* table) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetColorTable(target, format, gltype, table); -} - -void gl4_2compat_glCopyColorTable(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyColorTable(target, internalFormat, x, y, width); -} - -void gl4_2compat_glColorTableParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorTableParameteriv(target, pname, params); -} - -void gl4_2compat_glColorTableParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorTableParameterfv(target, pname, params); -} - -void gl4_2compat_glColorTable(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum gltype, const GLvoid* table) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorTable(target, internalFormat, width, format, gltype, table); -} - -void gl4_2compat_glMultTransposeMatrixd(void *_glfuncs, const GLdouble* m) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultTransposeMatrixd(m); -} - -void gl4_2compat_glMultTransposeMatrixf(void *_glfuncs, const GLfloat* m) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultTransposeMatrixf(m); -} - -void gl4_2compat_glLoadTransposeMatrixd(void *_glfuncs, const GLdouble* m) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadTransposeMatrixd(m); -} - -void gl4_2compat_glLoadTransposeMatrixf(void *_glfuncs, const GLfloat* m) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadTransposeMatrixf(m); -} - -void gl4_2compat_glMultiTexCoord4sv(void *_glfuncs, GLenum target, const GLshort* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4sv(target, v); -} - -void gl4_2compat_glMultiTexCoord4s(void *_glfuncs, GLenum target, GLshort s, GLshort t, GLshort r, GLshort q) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4s(target, s, t, r, q); -} - -void gl4_2compat_glMultiTexCoord4iv(void *_glfuncs, GLenum target, const GLint* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4iv(target, v); -} - -void gl4_2compat_glMultiTexCoord4i(void *_glfuncs, GLenum target, GLint s, GLint t, GLint r, GLint q) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4i(target, s, t, r, q); -} - -void gl4_2compat_glMultiTexCoord4fv(void *_glfuncs, GLenum target, const GLfloat* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4fv(target, v); -} - -void gl4_2compat_glMultiTexCoord4f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4f(target, s, t, r, q); -} - -void gl4_2compat_glMultiTexCoord4dv(void *_glfuncs, GLenum target, const GLdouble* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4dv(target, v); -} - -void gl4_2compat_glMultiTexCoord4d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4d(target, s, t, r, q); -} - -void gl4_2compat_glMultiTexCoord3sv(void *_glfuncs, GLenum target, const GLshort* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3sv(target, v); -} - -void gl4_2compat_glMultiTexCoord3s(void *_glfuncs, GLenum target, GLshort s, GLshort t, GLshort r) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3s(target, s, t, r); -} - -void gl4_2compat_glMultiTexCoord3iv(void *_glfuncs, GLenum target, const GLint* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3iv(target, v); -} - -void gl4_2compat_glMultiTexCoord3i(void *_glfuncs, GLenum target, GLint s, GLint t, GLint r) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3i(target, s, t, r); -} - -void gl4_2compat_glMultiTexCoord3fv(void *_glfuncs, GLenum target, const GLfloat* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3fv(target, v); -} - -void gl4_2compat_glMultiTexCoord3f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t, GLfloat r) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3f(target, s, t, r); -} - -void gl4_2compat_glMultiTexCoord3dv(void *_glfuncs, GLenum target, const GLdouble* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3dv(target, v); -} - -void gl4_2compat_glMultiTexCoord3d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t, GLdouble r) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3d(target, s, t, r); -} - -void gl4_2compat_glMultiTexCoord2sv(void *_glfuncs, GLenum target, const GLshort* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2sv(target, v); -} - -void gl4_2compat_glMultiTexCoord2s(void *_glfuncs, GLenum target, GLshort s, GLshort t) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2s(target, s, t); -} - -void gl4_2compat_glMultiTexCoord2iv(void *_glfuncs, GLenum target, const GLint* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2iv(target, v); -} - -void gl4_2compat_glMultiTexCoord2i(void *_glfuncs, GLenum target, GLint s, GLint t) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2i(target, s, t); -} - -void gl4_2compat_glMultiTexCoord2fv(void *_glfuncs, GLenum target, const GLfloat* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2fv(target, v); -} - -void gl4_2compat_glMultiTexCoord2f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2f(target, s, t); -} - -void gl4_2compat_glMultiTexCoord2dv(void *_glfuncs, GLenum target, const GLdouble* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2dv(target, v); -} - -void gl4_2compat_glMultiTexCoord2d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2d(target, s, t); -} - -void gl4_2compat_glMultiTexCoord1sv(void *_glfuncs, GLenum target, const GLshort* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1sv(target, v); -} - -void gl4_2compat_glMultiTexCoord1s(void *_glfuncs, GLenum target, GLshort s) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1s(target, s); -} - -void gl4_2compat_glMultiTexCoord1iv(void *_glfuncs, GLenum target, const GLint* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1iv(target, v); -} - -void gl4_2compat_glMultiTexCoord1i(void *_glfuncs, GLenum target, GLint s) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1i(target, s); -} - -void gl4_2compat_glMultiTexCoord1fv(void *_glfuncs, GLenum target, const GLfloat* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1fv(target, v); -} - -void gl4_2compat_glMultiTexCoord1f(void *_glfuncs, GLenum target, GLfloat s) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1f(target, s); -} - -void gl4_2compat_glMultiTexCoord1dv(void *_glfuncs, GLenum target, const GLdouble* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1dv(target, v); -} - -void gl4_2compat_glMultiTexCoord1d(void *_glfuncs, GLenum target, GLdouble s) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1d(target, s); -} - -void gl4_2compat_glClientActiveTexture(void *_glfuncs, GLenum texture) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClientActiveTexture(texture); -} - -void gl4_2compat_glWindowPos3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3sv(v); -} - -void gl4_2compat_glWindowPos3s(void *_glfuncs, GLshort x, GLshort y, GLshort z) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3s(x, y, z); -} - -void gl4_2compat_glWindowPos3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3iv(v); -} - -void gl4_2compat_glWindowPos3i(void *_glfuncs, GLint x, GLint y, GLint z) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3i(x, y, z); -} - -void gl4_2compat_glWindowPos3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3fv(v); -} - -void gl4_2compat_glWindowPos3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3f(x, y, z); -} - -void gl4_2compat_glWindowPos3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3dv(v); -} - -void gl4_2compat_glWindowPos3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3d(x, y, z); -} - -void gl4_2compat_glWindowPos2sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2sv(v); -} - -void gl4_2compat_glWindowPos2s(void *_glfuncs, GLshort x, GLshort y) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2s(x, y); -} - -void gl4_2compat_glWindowPos2iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2iv(v); -} - -void gl4_2compat_glWindowPos2i(void *_glfuncs, GLint x, GLint y) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2i(x, y); -} - -void gl4_2compat_glWindowPos2fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2fv(v); -} - -void gl4_2compat_glWindowPos2f(void *_glfuncs, GLfloat x, GLfloat y) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2f(x, y); -} - -void gl4_2compat_glWindowPos2dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2dv(v); -} - -void gl4_2compat_glWindowPos2d(void *_glfuncs, GLdouble x, GLdouble y) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2d(x, y); -} - -void gl4_2compat_glSecondaryColorPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColorPointer(size, gltype, stride, pointer); -} - -void gl4_2compat_glSecondaryColor3usv(void *_glfuncs, const GLushort* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3usv(v); -} - -void gl4_2compat_glSecondaryColor3us(void *_glfuncs, GLushort red, GLushort green, GLushort blue) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3us(red, green, blue); -} - -void gl4_2compat_glSecondaryColor3uiv(void *_glfuncs, const GLuint* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3uiv(v); -} - -void gl4_2compat_glSecondaryColor3ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3ui(red, green, blue); -} - -void gl4_2compat_glSecondaryColor3ubv(void *_glfuncs, const GLubyte* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3ubv(v); -} - -void gl4_2compat_glSecondaryColor3ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3ub(red, green, blue); -} - -void gl4_2compat_glSecondaryColor3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3sv(v); -} - -void gl4_2compat_glSecondaryColor3s(void *_glfuncs, GLshort red, GLshort green, GLshort blue) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3s(red, green, blue); -} - -void gl4_2compat_glSecondaryColor3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3iv(v); -} - -void gl4_2compat_glSecondaryColor3i(void *_glfuncs, GLint red, GLint green, GLint blue) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3i(red, green, blue); -} - -void gl4_2compat_glSecondaryColor3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3fv(v); -} - -void gl4_2compat_glSecondaryColor3f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3f(red, green, blue); -} - -void gl4_2compat_glSecondaryColor3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3dv(v); -} - -void gl4_2compat_glSecondaryColor3d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3d(red, green, blue); -} - -void gl4_2compat_glSecondaryColor3bv(void *_glfuncs, const GLbyte* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3bv(v); -} - -void gl4_2compat_glSecondaryColor3b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3b(red, green, blue); -} - -void gl4_2compat_glFogCoordPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogCoordPointer(gltype, stride, pointer); -} - -void gl4_2compat_glFogCoorddv(void *_glfuncs, const GLdouble* coord) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogCoorddv(coord); -} - -void gl4_2compat_glFogCoordd(void *_glfuncs, GLdouble coord) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogCoordd(coord); -} - -void gl4_2compat_glFogCoordfv(void *_glfuncs, const GLfloat* coord) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogCoordfv(coord); -} - -void gl4_2compat_glFogCoordf(void *_glfuncs, GLfloat coord) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogCoordf(coord); -} - -void gl4_2compat_glVertexAttrib4usv(void *_glfuncs, GLuint index, const GLushort* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4usv(index, v); -} - -void gl4_2compat_glVertexAttrib4uiv(void *_glfuncs, GLuint index, const GLuint* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4uiv(index, v); -} - -void gl4_2compat_glVertexAttrib4ubv(void *_glfuncs, GLuint index, const GLubyte* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4ubv(index, v); -} - -void gl4_2compat_glVertexAttrib4sv(void *_glfuncs, GLuint index, const GLshort* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4sv(index, v); -} - -void gl4_2compat_glVertexAttrib4s(void *_glfuncs, GLuint index, GLshort x, GLshort y, GLshort z, GLshort w) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4s(index, x, y, z, w); -} - -void gl4_2compat_glVertexAttrib4iv(void *_glfuncs, GLuint index, const GLint* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4iv(index, v); -} - -void gl4_2compat_glVertexAttrib4fv(void *_glfuncs, GLuint index, const GLfloat* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4fv(index, v); -} - -void gl4_2compat_glVertexAttrib4f(void *_glfuncs, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4f(index, x, y, z, w); -} - -void gl4_2compat_glVertexAttrib4dv(void *_glfuncs, GLuint index, const GLdouble* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4dv(index, v); -} - -void gl4_2compat_glVertexAttrib4d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4d(index, x, y, z, w); -} - -void gl4_2compat_glVertexAttrib4bv(void *_glfuncs, GLuint index, const GLbyte* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4bv(index, v); -} - -void gl4_2compat_glVertexAttrib4Nusv(void *_glfuncs, GLuint index, const GLushort* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4Nusv(index, v); -} - -void gl4_2compat_glVertexAttrib4Nuiv(void *_glfuncs, GLuint index, const GLuint* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4Nuiv(index, v); -} - -void gl4_2compat_glVertexAttrib4Nubv(void *_glfuncs, GLuint index, const GLubyte* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4Nubv(index, v); -} - -void gl4_2compat_glVertexAttrib4Nub(void *_glfuncs, GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4Nub(index, x, y, z, w); -} - -void gl4_2compat_glVertexAttrib4Nsv(void *_glfuncs, GLuint index, const GLshort* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4Nsv(index, v); -} - -void gl4_2compat_glVertexAttrib4Niv(void *_glfuncs, GLuint index, const GLint* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4Niv(index, v); -} - -void gl4_2compat_glVertexAttrib4Nbv(void *_glfuncs, GLuint index, const GLbyte* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4Nbv(index, v); -} - -void gl4_2compat_glVertexAttrib3sv(void *_glfuncs, GLuint index, const GLshort* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib3sv(index, v); -} - -void gl4_2compat_glVertexAttrib3s(void *_glfuncs, GLuint index, GLshort x, GLshort y, GLshort z) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib3s(index, x, y, z); -} - -void gl4_2compat_glVertexAttrib3fv(void *_glfuncs, GLuint index, const GLfloat* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib3fv(index, v); -} - -void gl4_2compat_glVertexAttrib3f(void *_glfuncs, GLuint index, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib3f(index, x, y, z); -} - -void gl4_2compat_glVertexAttrib3dv(void *_glfuncs, GLuint index, const GLdouble* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib3dv(index, v); -} - -void gl4_2compat_glVertexAttrib3d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib3d(index, x, y, z); -} - -void gl4_2compat_glVertexAttrib2sv(void *_glfuncs, GLuint index, const GLshort* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib2sv(index, v); -} - -void gl4_2compat_glVertexAttrib2s(void *_glfuncs, GLuint index, GLshort x, GLshort y) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib2s(index, x, y); -} - -void gl4_2compat_glVertexAttrib2fv(void *_glfuncs, GLuint index, const GLfloat* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib2fv(index, v); -} - -void gl4_2compat_glVertexAttrib2f(void *_glfuncs, GLuint index, GLfloat x, GLfloat y) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib2f(index, x, y); -} - -void gl4_2compat_glVertexAttrib2dv(void *_glfuncs, GLuint index, const GLdouble* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib2dv(index, v); -} - -void gl4_2compat_glVertexAttrib2d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib2d(index, x, y); -} - -void gl4_2compat_glVertexAttrib1sv(void *_glfuncs, GLuint index, const GLshort* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib1sv(index, v); -} - -void gl4_2compat_glVertexAttrib1s(void *_glfuncs, GLuint index, GLshort x) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib1s(index, x); -} - -void gl4_2compat_glVertexAttrib1fv(void *_glfuncs, GLuint index, const GLfloat* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib1fv(index, v); -} - -void gl4_2compat_glVertexAttrib1f(void *_glfuncs, GLuint index, GLfloat x) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib1f(index, x); -} - -void gl4_2compat_glVertexAttrib1dv(void *_glfuncs, GLuint index, const GLdouble* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib1dv(index, v); -} - -void gl4_2compat_glVertexAttrib1d(void *_glfuncs, GLuint index, GLdouble x) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib1d(index, x); -} - -void gl4_2compat_glVertexAttribI4usv(void *_glfuncs, GLuint index, const GLushort* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI4usv(index, v); -} - -void gl4_2compat_glVertexAttribI4ubv(void *_glfuncs, GLuint index, const GLubyte* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI4ubv(index, v); -} - -void gl4_2compat_glVertexAttribI4sv(void *_glfuncs, GLuint index, const GLshort* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI4sv(index, v); -} - -void gl4_2compat_glVertexAttribI4bv(void *_glfuncs, GLuint index, const GLbyte* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI4bv(index, v); -} - -void gl4_2compat_glVertexAttribI4uiv(void *_glfuncs, GLuint index, const GLuint* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI4uiv(index, v); -} - -void gl4_2compat_glVertexAttribI3uiv(void *_glfuncs, GLuint index, const GLuint* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI3uiv(index, v); -} - -void gl4_2compat_glVertexAttribI2uiv(void *_glfuncs, GLuint index, const GLuint* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI2uiv(index, v); -} - -void gl4_2compat_glVertexAttribI1uiv(void *_glfuncs, GLuint index, const GLuint* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI1uiv(index, v); -} - -void gl4_2compat_glVertexAttribI4iv(void *_glfuncs, GLuint index, const GLint* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI4iv(index, v); -} - -void gl4_2compat_glVertexAttribI3iv(void *_glfuncs, GLuint index, const GLint* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI3iv(index, v); -} - -void gl4_2compat_glVertexAttribI2iv(void *_glfuncs, GLuint index, const GLint* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI2iv(index, v); -} - -void gl4_2compat_glVertexAttribI1iv(void *_glfuncs, GLuint index, const GLint* v) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI1iv(index, v); -} - -void gl4_2compat_glVertexAttribI4ui(void *_glfuncs, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI4ui(index, x, y, z, w); -} - -void gl4_2compat_glVertexAttribI3ui(void *_glfuncs, GLuint index, GLuint x, GLuint y, GLuint z) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI3ui(index, x, y, z); -} - -void gl4_2compat_glVertexAttribI2ui(void *_glfuncs, GLuint index, GLuint x, GLuint y) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI2ui(index, x, y); -} - -void gl4_2compat_glVertexAttribI1ui(void *_glfuncs, GLuint index, GLuint x) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI1ui(index, x); -} - -void gl4_2compat_glVertexAttribI4i(void *_glfuncs, GLuint index, GLint x, GLint y, GLint z, GLint w) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI4i(index, x, y, z, w); -} - -void gl4_2compat_glVertexAttribI3i(void *_glfuncs, GLuint index, GLint x, GLint y, GLint z) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI3i(index, x, y, z); -} - -void gl4_2compat_glVertexAttribI2i(void *_glfuncs, GLuint index, GLint x, GLint y) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI2i(index, x, y); -} - -void gl4_2compat_glVertexAttribI1i(void *_glfuncs, GLuint index, GLint x) -{ - QOpenGLFunctions_4_2_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI1i(index, x); -} - diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.2compat/funcs.h b/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.2compat/funcs.h deleted file mode 100644 index 964194dccb..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.2compat/funcs.h +++ /dev/null @@ -1,932 +0,0 @@ - -// ** file automatically generated by glgen -- do not edit manually ** - -#ifndef __cplusplus -#include -#include -typedef unsigned int GLenum; -typedef unsigned char GLboolean; -typedef unsigned int GLbitfield; -typedef void GLvoid; -typedef char GLchar; -typedef signed char GLbyte; /* 1-byte signed */ -typedef short GLshort; /* 2-byte signed */ -typedef int GLint; /* 4-byte signed */ -typedef unsigned char GLubyte; /* 1-byte unsigned */ -typedef unsigned short GLushort; /* 2-byte unsigned */ -typedef unsigned int GLuint; /* 4-byte unsigned */ -typedef int GLsizei; /* 4-byte signed */ -typedef float GLfloat; /* single precision float */ -typedef float GLclampf; /* single precision float in [0,1] */ -typedef double GLdouble; /* double precision float */ -typedef double GLclampd; /* double precision float in [0,1] */ -typedef int64_t GLint64; -typedef uint64_t GLuint64; -typedef ptrdiff_t GLintptr; -typedef ptrdiff_t GLsizeiptr; -typedef ptrdiff_t GLintptrARB; -typedef ptrdiff_t GLsizeiptrARB; -typedef struct __GLsync *GLsync; -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -void *gl4_2compat_funcs(); - -void gl4_2compat_glViewport(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height); -void gl4_2compat_glDepthRange(void *_glfuncs, GLdouble nearVal, GLdouble farVal); -GLboolean gl4_2compat_glIsEnabled(void *_glfuncs, GLenum cap); -void gl4_2compat_glGetTexLevelParameteriv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLint* params); -void gl4_2compat_glGetTexLevelParameterfv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLfloat* params); -void gl4_2compat_glGetTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl4_2compat_glGetTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl4_2compat_glGetTexImage(void *_glfuncs, GLenum target, GLint level, GLenum format, GLenum gltype, GLvoid* pixels); -void gl4_2compat_glGetIntegerv(void *_glfuncs, GLenum pname, GLint* params); -void gl4_2compat_glGetFloatv(void *_glfuncs, GLenum pname, GLfloat* params); -GLenum gl4_2compat_glGetError(void *_glfuncs); -void gl4_2compat_glGetDoublev(void *_glfuncs, GLenum pname, GLdouble* params); -void gl4_2compat_glGetBooleanv(void *_glfuncs, GLenum pname, GLboolean* params); -void gl4_2compat_glReadPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum gltype, GLvoid* pixels); -void gl4_2compat_glReadBuffer(void *_glfuncs, GLenum mode); -void gl4_2compat_glPixelStorei(void *_glfuncs, GLenum pname, GLint param); -void gl4_2compat_glPixelStoref(void *_glfuncs, GLenum pname, GLfloat param); -void gl4_2compat_glDepthFunc(void *_glfuncs, GLenum glfunc); -void gl4_2compat_glStencilOp(void *_glfuncs, GLenum fail, GLenum zfail, GLenum zpass); -void gl4_2compat_glStencilFunc(void *_glfuncs, GLenum glfunc, GLint ref, GLuint mask); -void gl4_2compat_glLogicOp(void *_glfuncs, GLenum opcode); -void gl4_2compat_glBlendFunc(void *_glfuncs, GLenum sfactor, GLenum dfactor); -void gl4_2compat_glFlush(void *_glfuncs); -void gl4_2compat_glFinish(void *_glfuncs); -void gl4_2compat_glEnable(void *_glfuncs, GLenum cap); -void gl4_2compat_glDisable(void *_glfuncs, GLenum cap); -void gl4_2compat_glDepthMask(void *_glfuncs, GLboolean flag); -void gl4_2compat_glColorMask(void *_glfuncs, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); -void gl4_2compat_glStencilMask(void *_glfuncs, GLuint mask); -void gl4_2compat_glClearDepth(void *_glfuncs, GLdouble depth); -void gl4_2compat_glClearStencil(void *_glfuncs, GLint s); -void gl4_2compat_glClearColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl4_2compat_glClear(void *_glfuncs, GLbitfield mask); -void gl4_2compat_glDrawBuffer(void *_glfuncs, GLenum mode); -void gl4_2compat_glTexImage2D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl4_2compat_glTexImage1D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl4_2compat_glTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl4_2compat_glTexParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint param); -void gl4_2compat_glTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params); -void gl4_2compat_glTexParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param); -void gl4_2compat_glScissor(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height); -void gl4_2compat_glPolygonMode(void *_glfuncs, GLenum face, GLenum mode); -void gl4_2compat_glPointSize(void *_glfuncs, GLfloat size); -void gl4_2compat_glLineWidth(void *_glfuncs, GLfloat width); -void gl4_2compat_glHint(void *_glfuncs, GLenum target, GLenum mode); -void gl4_2compat_glFrontFace(void *_glfuncs, GLenum mode); -void gl4_2compat_glCullFace(void *_glfuncs, GLenum mode); -void gl4_2compat_glIndexubv(void *_glfuncs, const GLubyte* c); -void gl4_2compat_glIndexub(void *_glfuncs, GLubyte c); -GLboolean gl4_2compat_glIsTexture(void *_glfuncs, GLuint texture); -void gl4_2compat_glGenTextures(void *_glfuncs, GLsizei n, GLuint* textures); -void gl4_2compat_glDeleteTextures(void *_glfuncs, GLsizei n, const GLuint* textures); -void gl4_2compat_glBindTexture(void *_glfuncs, GLenum target, GLuint texture); -void gl4_2compat_glTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl4_2compat_glTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl4_2compat_glCopyTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -void gl4_2compat_glCopyTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -void gl4_2compat_glCopyTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -void gl4_2compat_glCopyTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border); -void gl4_2compat_glPolygonOffset(void *_glfuncs, GLfloat factor, GLfloat units); -void gl4_2compat_glDrawElements(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices); -void gl4_2compat_glDrawArrays(void *_glfuncs, GLenum mode, GLint first, GLsizei count); -void gl4_2compat_glCopyTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -void gl4_2compat_glTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl4_2compat_glTexImage3D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl4_2compat_glDrawRangeElements(void *_glfuncs, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum gltype, const GLvoid* indices); -void gl4_2compat_glBlendEquation(void *_glfuncs, GLenum mode); -void gl4_2compat_glBlendColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl4_2compat_glGetCompressedTexImage(void *_glfuncs, GLenum target, GLint level, GLvoid* img); -void gl4_2compat_glCompressedTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid* data); -void gl4_2compat_glCompressedTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data); -void gl4_2compat_glCompressedTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data); -void gl4_2compat_glCompressedTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid* data); -void gl4_2compat_glCompressedTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data); -void gl4_2compat_glCompressedTexImage3D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data); -void gl4_2compat_glSampleCoverage(void *_glfuncs, GLfloat value, GLboolean invert); -void gl4_2compat_glActiveTexture(void *_glfuncs, GLenum texture); -void gl4_2compat_glPointParameteriv(void *_glfuncs, GLenum pname, const GLint* params); -void gl4_2compat_glPointParameteri(void *_glfuncs, GLenum pname, GLint param); -void gl4_2compat_glPointParameterfv(void *_glfuncs, GLenum pname, const GLfloat* params); -void gl4_2compat_glPointParameterf(void *_glfuncs, GLenum pname, GLfloat param); -void gl4_2compat_glMultiDrawArrays(void *_glfuncs, GLenum mode, const GLint* first, const GLsizei* count, GLsizei drawcount); -void gl4_2compat_glBlendFuncSeparate(void *_glfuncs, GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -void gl4_2compat_glGetBufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -GLboolean gl4_2compat_glUnmapBuffer(void *_glfuncs, GLenum target); -void gl4_2compat_glGetBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, GLvoid* data); -void gl4_2compat_glBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data); -void gl4_2compat_glBufferData(void *_glfuncs, GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage); -GLboolean gl4_2compat_glIsBuffer(void *_glfuncs, GLuint buffer); -void gl4_2compat_glGenBuffers(void *_glfuncs, GLsizei n, GLuint* buffers); -void gl4_2compat_glDeleteBuffers(void *_glfuncs, GLsizei n, const GLuint* buffers); -void gl4_2compat_glBindBuffer(void *_glfuncs, GLenum target, GLuint buffer); -void gl4_2compat_glGetQueryObjectuiv(void *_glfuncs, GLuint id, GLenum pname, GLuint* params); -void gl4_2compat_glGetQueryObjectiv(void *_glfuncs, GLuint id, GLenum pname, GLint* params); -void gl4_2compat_glGetQueryiv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl4_2compat_glEndQuery(void *_glfuncs, GLenum target); -void gl4_2compat_glBeginQuery(void *_glfuncs, GLenum target, GLuint id); -GLboolean gl4_2compat_glIsQuery(void *_glfuncs, GLuint id); -void gl4_2compat_glDeleteQueries(void *_glfuncs, GLsizei n, const GLuint* ids); -void gl4_2compat_glGenQueries(void *_glfuncs, GLsizei n, GLuint* ids); -void gl4_2compat_glVertexAttribPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLboolean normalized, GLsizei stride, const GLvoid* offset); -void gl4_2compat_glValidateProgram(void *_glfuncs, GLuint program); -void gl4_2compat_glUniformMatrix4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_2compat_glUniformMatrix3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_2compat_glUniformMatrix2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_2compat_glUniform4iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gl4_2compat_glUniform3iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gl4_2compat_glUniform2iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gl4_2compat_glUniform1iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gl4_2compat_glUniform4fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gl4_2compat_glUniform3fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gl4_2compat_glUniform2fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gl4_2compat_glUniform1fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gl4_2compat_glUniform4i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -void gl4_2compat_glUniform3i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2); -void gl4_2compat_glUniform2i(void *_glfuncs, GLint location, GLint v0, GLint v1); -void gl4_2compat_glUniform1i(void *_glfuncs, GLint location, GLint v0); -void gl4_2compat_glUniform4f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -void gl4_2compat_glUniform3f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -void gl4_2compat_glUniform2f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1); -void gl4_2compat_glUniform1f(void *_glfuncs, GLint location, GLfloat v0); -void gl4_2compat_glUseProgram(void *_glfuncs, GLuint program); -void gl4_2compat_glShaderSource(void *_glfuncs, GLuint shader, GLsizei count, const GLchar** source, const GLint* length); -void gl4_2compat_glLinkProgram(void *_glfuncs, GLuint program); -GLboolean gl4_2compat_glIsShader(void *_glfuncs, GLuint shader); -GLboolean gl4_2compat_glIsProgram(void *_glfuncs, GLuint program); -void gl4_2compat_glGetVertexAttribiv(void *_glfuncs, GLuint index, GLenum pname, GLint* params); -void gl4_2compat_glGetVertexAttribfv(void *_glfuncs, GLuint index, GLenum pname, GLfloat* params); -void gl4_2compat_glGetVertexAttribdv(void *_glfuncs, GLuint index, GLenum pname, GLdouble* params); -void gl4_2compat_glGetUniformiv(void *_glfuncs, GLuint program, GLint location, GLint* params); -void gl4_2compat_glGetUniformfv(void *_glfuncs, GLuint program, GLint location, GLfloat* params); -GLint gl4_2compat_glGetUniformLocation(void *_glfuncs, GLuint program, const GLchar* name); -void gl4_2compat_glGetShaderSource(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* source); -void gl4_2compat_glGetShaderInfoLog(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* infoLog); -void gl4_2compat_glGetShaderiv(void *_glfuncs, GLuint shader, GLenum pname, GLint* params); -void gl4_2compat_glGetProgramInfoLog(void *_glfuncs, GLuint program, GLsizei bufSize, GLsizei* length, GLchar* infoLog); -void gl4_2compat_glGetProgramiv(void *_glfuncs, GLuint program, GLenum pname, GLint* params); -GLint gl4_2compat_glGetAttribLocation(void *_glfuncs, GLuint program, const GLchar* name); -void gl4_2compat_glGetAttachedShaders(void *_glfuncs, GLuint program, GLsizei maxCount, GLsizei* count, GLuint* obj); -void gl4_2compat_glGetActiveUniform(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name); -void gl4_2compat_glGetActiveAttrib(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name); -void gl4_2compat_glEnableVertexAttribArray(void *_glfuncs, GLuint index); -void gl4_2compat_glDisableVertexAttribArray(void *_glfuncs, GLuint index); -void gl4_2compat_glDetachShader(void *_glfuncs, GLuint program, GLuint shader); -void gl4_2compat_glDeleteShader(void *_glfuncs, GLuint shader); -void gl4_2compat_glDeleteProgram(void *_glfuncs, GLuint program); -GLuint gl4_2compat_glCreateShader(void *_glfuncs, GLenum gltype); -GLuint gl4_2compat_glCreateProgram(void *_glfuncs); -void gl4_2compat_glCompileShader(void *_glfuncs, GLuint shader); -void gl4_2compat_glBindAttribLocation(void *_glfuncs, GLuint program, GLuint index, const GLchar* name); -void gl4_2compat_glAttachShader(void *_glfuncs, GLuint program, GLuint shader); -void gl4_2compat_glStencilMaskSeparate(void *_glfuncs, GLenum face, GLuint mask); -void gl4_2compat_glStencilFuncSeparate(void *_glfuncs, GLenum face, GLenum glfunc, GLint ref, GLuint mask); -void gl4_2compat_glStencilOpSeparate(void *_glfuncs, GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); -void gl4_2compat_glDrawBuffers(void *_glfuncs, GLsizei n, const GLenum* bufs); -void gl4_2compat_glBlendEquationSeparate(void *_glfuncs, GLenum modeRGB, GLenum modeAlpha); -void gl4_2compat_glUniformMatrix4x3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_2compat_glUniformMatrix3x4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_2compat_glUniformMatrix4x2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_2compat_glUniformMatrix2x4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_2compat_glUniformMatrix3x2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_2compat_glUniformMatrix2x3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -GLboolean gl4_2compat_glIsVertexArray(void *_glfuncs, GLuint array); -void gl4_2compat_glGenVertexArrays(void *_glfuncs, GLsizei n, GLuint* arrays); -void gl4_2compat_glDeleteVertexArrays(void *_glfuncs, GLsizei n, const GLuint* arrays); -void gl4_2compat_glBindVertexArray(void *_glfuncs, GLuint array); -void gl4_2compat_glFlushMappedBufferRange(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr length); -void gl4_2compat_glFramebufferTextureLayer(void *_glfuncs, GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); -void gl4_2compat_glRenderbufferStorageMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height); -void gl4_2compat_glBlitFramebuffer(void *_glfuncs, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -void gl4_2compat_glGenerateMipmap(void *_glfuncs, GLenum target); -void gl4_2compat_glGetFramebufferAttachmentParameteriv(void *_glfuncs, GLenum target, GLenum attachment, GLenum pname, GLint* params); -void gl4_2compat_glFramebufferRenderbuffer(void *_glfuncs, GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -void gl4_2compat_glFramebufferTexture3D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -void gl4_2compat_glFramebufferTexture2D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -void gl4_2compat_glFramebufferTexture1D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLenum gl4_2compat_glCheckFramebufferStatus(void *_glfuncs, GLenum target); -void gl4_2compat_glGenFramebuffers(void *_glfuncs, GLsizei n, GLuint* framebuffers); -void gl4_2compat_glDeleteFramebuffers(void *_glfuncs, GLsizei n, const GLuint* framebuffers); -void gl4_2compat_glBindFramebuffer(void *_glfuncs, GLenum target, GLuint framebuffer); -GLboolean gl4_2compat_glIsFramebuffer(void *_glfuncs, GLuint framebuffer); -void gl4_2compat_glGetRenderbufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl4_2compat_glRenderbufferStorage(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height); -void gl4_2compat_glGenRenderbuffers(void *_glfuncs, GLsizei n, GLuint* renderbuffers); -void gl4_2compat_glDeleteRenderbuffers(void *_glfuncs, GLsizei n, const GLuint* renderbuffers); -void gl4_2compat_glBindRenderbuffer(void *_glfuncs, GLenum target, GLuint renderbuffer); -GLboolean gl4_2compat_glIsRenderbuffer(void *_glfuncs, GLuint renderbuffer); -void gl4_2compat_glClearBufferfi(void *_glfuncs, GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); -void gl4_2compat_glClearBufferfv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLfloat* value); -void gl4_2compat_glClearBufferuiv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLuint* value); -void gl4_2compat_glClearBufferiv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLint* value); -void gl4_2compat_glGetTexParameterIuiv(void *_glfuncs, GLenum target, GLenum pname, GLuint* params); -void gl4_2compat_glGetTexParameterIiv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl4_2compat_glTexParameterIuiv(void *_glfuncs, GLenum target, GLenum pname, const GLuint* params); -void gl4_2compat_glTexParameterIiv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl4_2compat_glUniform4uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value); -void gl4_2compat_glUniform3uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value); -void gl4_2compat_glUniform2uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value); -void gl4_2compat_glUniform1uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value); -void gl4_2compat_glUniform4ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -void gl4_2compat_glUniform3ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1, GLuint v2); -void gl4_2compat_glUniform2ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1); -void gl4_2compat_glUniform1ui(void *_glfuncs, GLint location, GLuint v0); -GLint gl4_2compat_glGetFragDataLocation(void *_glfuncs, GLuint program, const GLchar* name); -void gl4_2compat_glBindFragDataLocation(void *_glfuncs, GLuint program, GLuint color, const GLchar* name); -void gl4_2compat_glGetUniformuiv(void *_glfuncs, GLuint program, GLint location, GLuint* params); -void gl4_2compat_glGetVertexAttribIuiv(void *_glfuncs, GLuint index, GLenum pname, GLuint* params); -void gl4_2compat_glGetVertexAttribIiv(void *_glfuncs, GLuint index, GLenum pname, GLint* params); -void gl4_2compat_glVertexAttribIPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl4_2compat_glEndConditionalRender(void *_glfuncs); -void gl4_2compat_glBeginConditionalRender(void *_glfuncs, GLuint id, GLenum mode); -void gl4_2compat_glClampColor(void *_glfuncs, GLenum target, GLenum clamp); -void gl4_2compat_glGetTransformFeedbackVarying(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* gltype, GLchar* name); -void gl4_2compat_glBindBufferBase(void *_glfuncs, GLenum target, GLuint index, GLuint buffer); -void gl4_2compat_glBindBufferRange(void *_glfuncs, GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -void gl4_2compat_glEndTransformFeedback(void *_glfuncs); -void gl4_2compat_glBeginTransformFeedback(void *_glfuncs, GLenum primitiveMode); -GLboolean gl4_2compat_glIsEnabledi(void *_glfuncs, GLenum target, GLuint index); -void gl4_2compat_glDisablei(void *_glfuncs, GLenum target, GLuint index); -void gl4_2compat_glEnablei(void *_glfuncs, GLenum target, GLuint index); -void gl4_2compat_glGetIntegeri_v(void *_glfuncs, GLenum target, GLuint index, GLint* data); -void gl4_2compat_glGetBooleani_v(void *_glfuncs, GLenum target, GLuint index, GLboolean* data); -void gl4_2compat_glColorMaski(void *_glfuncs, GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); -void gl4_2compat_glCopyBufferSubData(void *_glfuncs, GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); -void gl4_2compat_glUniformBlockBinding(void *_glfuncs, GLuint program, GLuint v0, GLuint v1); -void gl4_2compat_glGetActiveUniformBlockName(void *_glfuncs, GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformBlockName); -void gl4_2compat_glGetActiveUniformBlockiv(void *_glfuncs, GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint* params); -GLuint gl4_2compat_glGetUniformBlockIndex(void *_glfuncs, GLuint program, const GLchar* uniformBlockName); -void gl4_2compat_glGetActiveUniformName(void *_glfuncs, GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformName); -void gl4_2compat_glGetActiveUniformsiv(void *_glfuncs, GLuint program, GLsizei uniformCount, const GLuint* uniformIndices, GLenum pname, GLint* params); -void gl4_2compat_glPrimitiveRestartIndex(void *_glfuncs, GLuint index); -void gl4_2compat_glTexBuffer(void *_glfuncs, GLenum target, GLenum internalFormat, GLuint buffer); -void gl4_2compat_glDrawElementsInstanced(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLsizei instancecount); -void gl4_2compat_glDrawArraysInstanced(void *_glfuncs, GLenum mode, GLint first, GLsizei count, GLsizei instancecount); -void gl4_2compat_glSampleMaski(void *_glfuncs, GLuint index, GLbitfield mask); -void gl4_2compat_glGetMultisamplefv(void *_glfuncs, GLenum pname, GLuint index, GLfloat* val); -void gl4_2compat_glTexImage3DMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); -void gl4_2compat_glTexImage2DMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); -void gl4_2compat_glGetSynciv(void *_glfuncs, GLsync sync, GLenum pname, GLsizei bufSize, GLsizei* length, GLint* values); -void gl4_2compat_glGetInteger64v(void *_glfuncs, GLenum pname, GLint64* params); -void gl4_2compat_glWaitSync(void *_glfuncs, GLsync sync, GLbitfield flags, GLuint64 timeout); -GLenum gl4_2compat_glClientWaitSync(void *_glfuncs, GLsync sync, GLbitfield flags, GLuint64 timeout); -void gl4_2compat_glDeleteSync(void *_glfuncs, GLsync sync); -GLboolean gl4_2compat_glIsSync(void *_glfuncs, GLsync sync); -GLsync gl4_2compat_glFenceSync(void *_glfuncs, GLenum condition, GLbitfield flags); -void gl4_2compat_glProvokingVertex(void *_glfuncs, GLenum mode); -void gl4_2compat_glDrawElementsInstancedBaseVertex(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLsizei instancecount, GLint basevertex); -void gl4_2compat_glDrawRangeElementsBaseVertex(void *_glfuncs, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum gltype, const GLvoid* indices, GLint basevertex); -void gl4_2compat_glDrawElementsBaseVertex(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLint basevertex); -void gl4_2compat_glFramebufferTexture(void *_glfuncs, GLenum target, GLenum attachment, GLuint texture, GLint level); -void gl4_2compat_glGetBufferParameteri64v(void *_glfuncs, GLenum target, GLenum pname, GLint64* params); -void gl4_2compat_glGetInteger64i_v(void *_glfuncs, GLenum target, GLuint index, GLint64* data); -void gl4_2compat_glVertexAttribP4uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value); -void gl4_2compat_glVertexAttribP4ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value); -void gl4_2compat_glVertexAttribP3uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value); -void gl4_2compat_glVertexAttribP3ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value); -void gl4_2compat_glVertexAttribP2uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value); -void gl4_2compat_glVertexAttribP2ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value); -void gl4_2compat_glVertexAttribP1uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value); -void gl4_2compat_glVertexAttribP1ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value); -void gl4_2compat_glSecondaryColorP3uiv(void *_glfuncs, GLenum gltype, const GLuint* color); -void gl4_2compat_glSecondaryColorP3ui(void *_glfuncs, GLenum gltype, GLuint color); -void gl4_2compat_glColorP4uiv(void *_glfuncs, GLenum gltype, const GLuint* color); -void gl4_2compat_glColorP4ui(void *_glfuncs, GLenum gltype, GLuint color); -void gl4_2compat_glColorP3uiv(void *_glfuncs, GLenum gltype, const GLuint* color); -void gl4_2compat_glColorP3ui(void *_glfuncs, GLenum gltype, GLuint color); -void gl4_2compat_glNormalP3uiv(void *_glfuncs, GLenum gltype, const GLuint* coords); -void gl4_2compat_glNormalP3ui(void *_glfuncs, GLenum gltype, GLuint coords); -void gl4_2compat_glMultiTexCoordP4uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords); -void gl4_2compat_glMultiTexCoordP4ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords); -void gl4_2compat_glMultiTexCoordP3uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords); -void gl4_2compat_glMultiTexCoordP3ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords); -void gl4_2compat_glMultiTexCoordP2uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords); -void gl4_2compat_glMultiTexCoordP2ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords); -void gl4_2compat_glMultiTexCoordP1uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords); -void gl4_2compat_glMultiTexCoordP1ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords); -void gl4_2compat_glTexCoordP4uiv(void *_glfuncs, GLenum gltype, const GLuint* coords); -void gl4_2compat_glTexCoordP4ui(void *_glfuncs, GLenum gltype, GLuint coords); -void gl4_2compat_glTexCoordP3uiv(void *_glfuncs, GLenum gltype, const GLuint* coords); -void gl4_2compat_glTexCoordP3ui(void *_glfuncs, GLenum gltype, GLuint coords); -void gl4_2compat_glTexCoordP2uiv(void *_glfuncs, GLenum gltype, const GLuint* coords); -void gl4_2compat_glTexCoordP2ui(void *_glfuncs, GLenum gltype, GLuint coords); -void gl4_2compat_glTexCoordP1uiv(void *_glfuncs, GLenum gltype, const GLuint* coords); -void gl4_2compat_glTexCoordP1ui(void *_glfuncs, GLenum gltype, GLuint coords); -void gl4_2compat_glVertexP4uiv(void *_glfuncs, GLenum gltype, const GLuint* value); -void gl4_2compat_glVertexP4ui(void *_glfuncs, GLenum gltype, GLuint value); -void gl4_2compat_glVertexP3uiv(void *_glfuncs, GLenum gltype, const GLuint* value); -void gl4_2compat_glVertexP3ui(void *_glfuncs, GLenum gltype, GLuint value); -void gl4_2compat_glVertexP2uiv(void *_glfuncs, GLenum gltype, const GLuint* value); -void gl4_2compat_glVertexP2ui(void *_glfuncs, GLenum gltype, GLuint value); -void gl4_2compat_glGetQueryObjectui64v(void *_glfuncs, GLuint id, GLenum pname, GLuint64* params); -void gl4_2compat_glGetQueryObjecti64v(void *_glfuncs, GLuint id, GLenum pname, GLint64* params); -void gl4_2compat_glQueryCounter(void *_glfuncs, GLuint id, GLenum target); -void gl4_2compat_glGetSamplerParameterIuiv(void *_glfuncs, GLuint sampler, GLenum pname, GLuint* params); -void gl4_2compat_glGetSamplerParameterfv(void *_glfuncs, GLuint sampler, GLenum pname, GLfloat* params); -void gl4_2compat_glGetSamplerParameterIiv(void *_glfuncs, GLuint sampler, GLenum pname, GLint* params); -void gl4_2compat_glGetSamplerParameteriv(void *_glfuncs, GLuint sampler, GLenum pname, GLint* params); -void gl4_2compat_glSamplerParameterIuiv(void *_glfuncs, GLuint sampler, GLenum pname, const GLuint* param); -void gl4_2compat_glSamplerParameterIiv(void *_glfuncs, GLuint sampler, GLenum pname, const GLint* param); -void gl4_2compat_glSamplerParameterfv(void *_glfuncs, GLuint sampler, GLenum pname, const GLfloat* param); -void gl4_2compat_glSamplerParameterf(void *_glfuncs, GLuint sampler, GLenum pname, GLfloat param); -void gl4_2compat_glSamplerParameteriv(void *_glfuncs, GLuint sampler, GLenum pname, const GLint* param); -void gl4_2compat_glSamplerParameteri(void *_glfuncs, GLuint sampler, GLenum pname, GLint param); -void gl4_2compat_glBindSampler(void *_glfuncs, GLuint unit, GLuint sampler); -GLboolean gl4_2compat_glIsSampler(void *_glfuncs, GLuint sampler); -void gl4_2compat_glDeleteSamplers(void *_glfuncs, GLsizei count, const GLuint* samplers); -void gl4_2compat_glGenSamplers(void *_glfuncs, GLsizei count, GLuint* samplers); -GLint gl4_2compat_glGetFragDataIndex(void *_glfuncs, GLuint program, const GLchar* name); -void gl4_2compat_glBindFragDataLocationIndexed(void *_glfuncs, GLuint program, GLuint colorNumber, GLuint index, const GLchar* name); -void gl4_2compat_glVertexAttribDivisor(void *_glfuncs, GLuint index, GLuint divisor); -void gl4_2compat_glGetQueryIndexediv(void *_glfuncs, GLenum target, GLuint index, GLenum pname, GLint* params); -void gl4_2compat_glEndQueryIndexed(void *_glfuncs, GLenum target, GLuint index); -void gl4_2compat_glBeginQueryIndexed(void *_glfuncs, GLenum target, GLuint index, GLuint id); -void gl4_2compat_glDrawTransformFeedbackStream(void *_glfuncs, GLenum mode, GLuint id, GLuint stream); -void gl4_2compat_glDrawTransformFeedback(void *_glfuncs, GLenum mode, GLuint id); -void gl4_2compat_glResumeTransformFeedback(void *_glfuncs); -void gl4_2compat_glPauseTransformFeedback(void *_glfuncs); -GLboolean gl4_2compat_glIsTransformFeedback(void *_glfuncs, GLuint id); -void gl4_2compat_glGenTransformFeedbacks(void *_glfuncs, GLsizei n, GLuint* ids); -void gl4_2compat_glDeleteTransformFeedbacks(void *_glfuncs, GLsizei n, const GLuint* ids); -void gl4_2compat_glBindTransformFeedback(void *_glfuncs, GLenum target, GLuint id); -void gl4_2compat_glPatchParameterfv(void *_glfuncs, GLenum pname, const GLfloat* values); -void gl4_2compat_glPatchParameteri(void *_glfuncs, GLenum pname, GLint value); -void gl4_2compat_glGetProgramStageiv(void *_glfuncs, GLuint program, GLenum shadertype, GLenum pname, GLint* values); -void gl4_2compat_glGetUniformSubroutineuiv(void *_glfuncs, GLenum shadertype, GLint location, GLuint* params); -void gl4_2compat_glUniformSubroutinesuiv(void *_glfuncs, GLenum shadertype, GLsizei count, const GLuint* value); -void gl4_2compat_glGetActiveSubroutineName(void *_glfuncs, GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei* length, GLchar* name); -void gl4_2compat_glGetActiveSubroutineUniformName(void *_glfuncs, GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei* length, GLchar* name); -void gl4_2compat_glGetActiveSubroutineUniformiv(void *_glfuncs, GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint* values); -GLuint gl4_2compat_glGetSubroutineIndex(void *_glfuncs, GLuint program, GLenum shadertype, const GLchar* name); -GLint gl4_2compat_glGetSubroutineUniformLocation(void *_glfuncs, GLuint program, GLenum shadertype, const GLchar* name); -void gl4_2compat_glGetUniformdv(void *_glfuncs, GLuint program, GLint location, GLdouble* params); -void gl4_2compat_glUniformMatrix4x3dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_2compat_glUniformMatrix4x2dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_2compat_glUniformMatrix3x4dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_2compat_glUniformMatrix3x2dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_2compat_glUniformMatrix2x4dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_2compat_glUniformMatrix2x3dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_2compat_glUniformMatrix4dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_2compat_glUniformMatrix3dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_2compat_glUniformMatrix2dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_2compat_glUniform4dv(void *_glfuncs, GLint location, GLsizei count, const GLdouble* value); -void gl4_2compat_glUniform3dv(void *_glfuncs, GLint location, GLsizei count, const GLdouble* value); -void gl4_2compat_glUniform2dv(void *_glfuncs, GLint location, GLsizei count, const GLdouble* value); -void gl4_2compat_glUniform1dv(void *_glfuncs, GLint location, GLsizei count, const GLdouble* value); -void gl4_2compat_glUniform4d(void *_glfuncs, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3); -void gl4_2compat_glUniform3d(void *_glfuncs, GLint location, GLdouble v0, GLdouble v1, GLdouble v2); -void gl4_2compat_glUniform2d(void *_glfuncs, GLint location, GLdouble v0, GLdouble v1); -void gl4_2compat_glUniform1d(void *_glfuncs, GLint location, GLdouble v0); -void gl4_2compat_glDrawElementsIndirect(void *_glfuncs, GLenum mode, GLenum gltype, const GLvoid* indirect); -void gl4_2compat_glDrawArraysIndirect(void *_glfuncs, GLenum mode, const GLvoid* indirect); -void gl4_2compat_glBlendFuncSeparatei(void *_glfuncs, GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -void gl4_2compat_glBlendFunci(void *_glfuncs, GLuint buf, GLenum src, GLenum dst); -void gl4_2compat_glBlendEquationSeparatei(void *_glfuncs, GLuint buf, GLenum modeRGB, GLenum modeAlpha); -void gl4_2compat_glBlendEquationi(void *_glfuncs, GLuint buf, GLenum mode); -void gl4_2compat_glMinSampleShading(void *_glfuncs, GLfloat value); -void gl4_2compat_glGetDoublei_v(void *_glfuncs, GLenum target, GLuint index, GLdouble* data); -void gl4_2compat_glGetFloati_v(void *_glfuncs, GLenum target, GLuint index, GLfloat* data); -void gl4_2compat_glDepthRangeIndexed(void *_glfuncs, GLuint index, GLdouble n, GLdouble f); -void gl4_2compat_glDepthRangeArrayv(void *_glfuncs, GLuint first, GLsizei count, const GLdouble* v); -void gl4_2compat_glScissorIndexedv(void *_glfuncs, GLuint index, const GLint* v); -void gl4_2compat_glScissorIndexed(void *_glfuncs, GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); -void gl4_2compat_glScissorArrayv(void *_glfuncs, GLuint first, GLsizei count, const GLint* v); -void gl4_2compat_glViewportIndexedfv(void *_glfuncs, GLuint index, const GLfloat* v); -void gl4_2compat_glViewportIndexedf(void *_glfuncs, GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); -void gl4_2compat_glViewportArrayv(void *_glfuncs, GLuint first, GLsizei count, const GLfloat* v); -void gl4_2compat_glGetVertexAttribLdv(void *_glfuncs, GLuint index, GLenum pname, GLdouble* params); -void gl4_2compat_glVertexAttribLPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl4_2compat_glVertexAttribL4dv(void *_glfuncs, GLuint index, const GLdouble* v); -void gl4_2compat_glVertexAttribL3dv(void *_glfuncs, GLuint index, const GLdouble* v); -void gl4_2compat_glVertexAttribL2dv(void *_glfuncs, GLuint index, const GLdouble* v); -void gl4_2compat_glVertexAttribL1dv(void *_glfuncs, GLuint index, const GLdouble* v); -void gl4_2compat_glVertexAttribL4d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -void gl4_2compat_glVertexAttribL3d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y, GLdouble z); -void gl4_2compat_glVertexAttribL2d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y); -void gl4_2compat_glVertexAttribL1d(void *_glfuncs, GLuint index, GLdouble x); -void gl4_2compat_glGetProgramPipelineInfoLog(void *_glfuncs, GLuint pipeline, GLsizei bufSize, GLsizei* length, GLchar* infoLog); -void gl4_2compat_glValidateProgramPipeline(void *_glfuncs, GLuint pipeline); -void gl4_2compat_glProgramUniformMatrix4x3dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_2compat_glProgramUniformMatrix3x4dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_2compat_glProgramUniformMatrix4x2dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_2compat_glProgramUniformMatrix2x4dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_2compat_glProgramUniformMatrix3x2dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_2compat_glProgramUniformMatrix2x3dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_2compat_glProgramUniformMatrix4x3fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_2compat_glProgramUniformMatrix3x4fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_2compat_glProgramUniformMatrix4x2fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_2compat_glProgramUniformMatrix2x4fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_2compat_glProgramUniformMatrix3x2fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_2compat_glProgramUniformMatrix2x3fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_2compat_glProgramUniformMatrix4dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_2compat_glProgramUniformMatrix3dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_2compat_glProgramUniformMatrix2dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_2compat_glProgramUniformMatrix4fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_2compat_glProgramUniformMatrix3fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_2compat_glProgramUniformMatrix2fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_2compat_glProgramUniform4uiv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLuint* value); -void gl4_2compat_glProgramUniform4ui(void *_glfuncs, GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -void gl4_2compat_glProgramUniform4dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLdouble* value); -void gl4_2compat_glProgramUniform4d(void *_glfuncs, GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3); -void gl4_2compat_glProgramUniform4fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLfloat* value); -void gl4_2compat_glProgramUniform4f(void *_glfuncs, GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -void gl4_2compat_glProgramUniform4iv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLint* value); -void gl4_2compat_glProgramUniform4i(void *_glfuncs, GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -void gl4_2compat_glProgramUniform3uiv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLuint* value); -void gl4_2compat_glProgramUniform3ui(void *_glfuncs, GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); -void gl4_2compat_glProgramUniform3dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLdouble* value); -void gl4_2compat_glProgramUniform3d(void *_glfuncs, GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2); -void gl4_2compat_glProgramUniform3fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLfloat* value); -void gl4_2compat_glProgramUniform3f(void *_glfuncs, GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -void gl4_2compat_glProgramUniform3iv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLint* value); -void gl4_2compat_glProgramUniform3i(void *_glfuncs, GLuint program, GLint location, GLint v0, GLint v1, GLint v2); -void gl4_2compat_glProgramUniform2uiv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLuint* value); -void gl4_2compat_glProgramUniform2ui(void *_glfuncs, GLuint program, GLint location, GLuint v0, GLuint v1); -void gl4_2compat_glProgramUniform2dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLdouble* value); -void gl4_2compat_glProgramUniform2d(void *_glfuncs, GLuint program, GLint location, GLdouble v0, GLdouble v1); -void gl4_2compat_glProgramUniform2fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLfloat* value); -void gl4_2compat_glProgramUniform2f(void *_glfuncs, GLuint program, GLint location, GLfloat v0, GLfloat v1); -void gl4_2compat_glProgramUniform2iv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLint* value); -void gl4_2compat_glProgramUniform2i(void *_glfuncs, GLuint program, GLint location, GLint v0, GLint v1); -void gl4_2compat_glProgramUniform1uiv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLuint* value); -void gl4_2compat_glProgramUniform1ui(void *_glfuncs, GLuint program, GLint location, GLuint v0); -void gl4_2compat_glProgramUniform1dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLdouble* value); -void gl4_2compat_glProgramUniform1d(void *_glfuncs, GLuint program, GLint location, GLdouble v0); -void gl4_2compat_glProgramUniform1fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLfloat* value); -void gl4_2compat_glProgramUniform1f(void *_glfuncs, GLuint program, GLint location, GLfloat v0); -void gl4_2compat_glProgramUniform1iv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLint* value); -void gl4_2compat_glProgramUniform1i(void *_glfuncs, GLuint program, GLint location, GLint v0); -void gl4_2compat_glGetProgramPipelineiv(void *_glfuncs, GLuint pipeline, GLenum pname, GLint* params); -GLboolean gl4_2compat_glIsProgramPipeline(void *_glfuncs, GLuint pipeline); -void gl4_2compat_glGenProgramPipelines(void *_glfuncs, GLsizei n, GLuint* pipelines); -void gl4_2compat_glDeleteProgramPipelines(void *_glfuncs, GLsizei n, const GLuint* pipelines); -void gl4_2compat_glBindProgramPipeline(void *_glfuncs, GLuint pipeline); -void gl4_2compat_glActiveShaderProgram(void *_glfuncs, GLuint pipeline, GLuint program); -void gl4_2compat_glUseProgramStages(void *_glfuncs, GLuint pipeline, GLbitfield stages, GLuint program); -void gl4_2compat_glProgramParameteri(void *_glfuncs, GLuint program, GLenum pname, GLint value); -void gl4_2compat_glProgramBinary(void *_glfuncs, GLuint program, GLenum binaryFormat, const GLvoid* binary, GLsizei length); -void gl4_2compat_glGetProgramBinary(void *_glfuncs, GLuint program, GLsizei bufSize, GLsizei* length, GLenum* binaryFormat, GLvoid* binary); -void gl4_2compat_glClearDepthf(void *_glfuncs, GLfloat dd); -void gl4_2compat_glDepthRangef(void *_glfuncs, GLfloat n, GLfloat f); -void gl4_2compat_glGetShaderPrecisionFormat(void *_glfuncs, GLenum shadertype, GLenum precisionType, GLint* range_, GLint* precision); -void gl4_2compat_glShaderBinary(void *_glfuncs, GLsizei count, const GLuint* shaders, GLenum binaryFormat, const GLvoid* binary, GLsizei length); -void gl4_2compat_glReleaseShaderCompiler(void *_glfuncs); -void gl4_2compat_glTexStorage3D(void *_glfuncs, GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth); -void gl4_2compat_glTexStorage2D(void *_glfuncs, GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height); -void gl4_2compat_glTexStorage1D(void *_glfuncs, GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width); -void gl4_2compat_glMemoryBarrier(void *_glfuncs, GLbitfield barriers); -void gl4_2compat_glBindImageTexture(void *_glfuncs, GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format); -void gl4_2compat_glGetActiveAtomicCounterBufferiv(void *_glfuncs, GLuint program, GLuint bufferIndex, GLenum pname, GLint* params); -void gl4_2compat_glGetInternalformativ(void *_glfuncs, GLenum target, GLenum internalFormat, GLenum pname, GLsizei bufSize, GLint* params); -void gl4_2compat_glDrawTransformFeedbackStreamInstanced(void *_glfuncs, GLenum mode, GLuint id, GLuint stream, GLsizei instancecount); -void gl4_2compat_glDrawTransformFeedbackInstanced(void *_glfuncs, GLenum mode, GLuint id, GLsizei instancecount); -void gl4_2compat_glDrawElementsInstancedBaseVertexBaseInstance(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance); -void gl4_2compat_glDrawElementsInstancedBaseInstance(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLsizei instancecount, GLuint baseinstance); -void gl4_2compat_glDrawArraysInstancedBaseInstance(void *_glfuncs, GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance); -void gl4_2compat_glTranslatef(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl4_2compat_glTranslated(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl4_2compat_glScalef(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl4_2compat_glScaled(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl4_2compat_glRotatef(void *_glfuncs, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); -void gl4_2compat_glRotated(void *_glfuncs, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); -void gl4_2compat_glPushMatrix(void *_glfuncs); -void gl4_2compat_glPopMatrix(void *_glfuncs); -void gl4_2compat_glOrtho(void *_glfuncs, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -void gl4_2compat_glMultMatrixd(void *_glfuncs, const GLdouble* m); -void gl4_2compat_glMultMatrixf(void *_glfuncs, const GLfloat* m); -void gl4_2compat_glMatrixMode(void *_glfuncs, GLenum mode); -void gl4_2compat_glLoadMatrixd(void *_glfuncs, const GLdouble* m); -void gl4_2compat_glLoadMatrixf(void *_glfuncs, const GLfloat* m); -void gl4_2compat_glLoadIdentity(void *_glfuncs); -void gl4_2compat_glFrustum(void *_glfuncs, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -GLboolean gl4_2compat_glIsList(void *_glfuncs, GLuint list); -void gl4_2compat_glGetTexGeniv(void *_glfuncs, GLenum coord, GLenum pname, GLint* params); -void gl4_2compat_glGetTexGenfv(void *_glfuncs, GLenum coord, GLenum pname, GLfloat* params); -void gl4_2compat_glGetTexGendv(void *_glfuncs, GLenum coord, GLenum pname, GLdouble* params); -void gl4_2compat_glGetTexEnviv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl4_2compat_glGetTexEnvfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl4_2compat_glGetPolygonStipple(void *_glfuncs, GLubyte* mask); -void gl4_2compat_glGetPixelMapusv(void *_glfuncs, GLenum glmap, GLushort* values); -void gl4_2compat_glGetPixelMapuiv(void *_glfuncs, GLenum glmap, GLuint* values); -void gl4_2compat_glGetPixelMapfv(void *_glfuncs, GLenum glmap, GLfloat* values); -void gl4_2compat_glGetMaterialiv(void *_glfuncs, GLenum face, GLenum pname, GLint* params); -void gl4_2compat_glGetMaterialfv(void *_glfuncs, GLenum face, GLenum pname, GLfloat* params); -void gl4_2compat_glGetMapiv(void *_glfuncs, GLenum target, GLenum query, GLint* v); -void gl4_2compat_glGetMapfv(void *_glfuncs, GLenum target, GLenum query, GLfloat* v); -void gl4_2compat_glGetMapdv(void *_glfuncs, GLenum target, GLenum query, GLdouble* v); -void gl4_2compat_glGetLightiv(void *_glfuncs, GLenum light, GLenum pname, GLint* params); -void gl4_2compat_glGetLightfv(void *_glfuncs, GLenum light, GLenum pname, GLfloat* params); -void gl4_2compat_glGetClipPlane(void *_glfuncs, GLenum plane, GLdouble* equation); -void gl4_2compat_glDrawPixels(void *_glfuncs, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl4_2compat_glCopyPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum gltype); -void gl4_2compat_glPixelMapusv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLushort* values); -void gl4_2compat_glPixelMapuiv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLuint* values); -void gl4_2compat_glPixelMapfv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLfloat* values); -void gl4_2compat_glPixelTransferi(void *_glfuncs, GLenum pname, GLint param); -void gl4_2compat_glPixelTransferf(void *_glfuncs, GLenum pname, GLfloat param); -void gl4_2compat_glPixelZoom(void *_glfuncs, GLfloat xfactor, GLfloat yfactor); -void gl4_2compat_glAlphaFunc(void *_glfuncs, GLenum glfunc, GLfloat ref); -void gl4_2compat_glEvalPoint2(void *_glfuncs, GLint i, GLint j); -void gl4_2compat_glEvalMesh2(void *_glfuncs, GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2); -void gl4_2compat_glEvalPoint1(void *_glfuncs, GLint i); -void gl4_2compat_glEvalMesh1(void *_glfuncs, GLenum mode, GLint i1, GLint i2); -void gl4_2compat_glEvalCoord2fv(void *_glfuncs, const GLfloat* u); -void gl4_2compat_glEvalCoord2f(void *_glfuncs, GLfloat u, GLfloat v); -void gl4_2compat_glEvalCoord2dv(void *_glfuncs, const GLdouble* u); -void gl4_2compat_glEvalCoord2d(void *_glfuncs, GLdouble u, GLdouble v); -void gl4_2compat_glEvalCoord1fv(void *_glfuncs, const GLfloat* u); -void gl4_2compat_glEvalCoord1f(void *_glfuncs, GLfloat u); -void gl4_2compat_glEvalCoord1dv(void *_glfuncs, const GLdouble* u); -void gl4_2compat_glEvalCoord1d(void *_glfuncs, GLdouble u); -void gl4_2compat_glMapGrid2f(void *_glfuncs, GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2); -void gl4_2compat_glMapGrid2d(void *_glfuncs, GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2); -void gl4_2compat_glMapGrid1f(void *_glfuncs, GLint un, GLfloat u1, GLfloat u2); -void gl4_2compat_glMapGrid1d(void *_glfuncs, GLint un, GLdouble u1, GLdouble u2); -void gl4_2compat_glMap2f(void *_glfuncs, GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat* points); -void gl4_2compat_glMap2d(void *_glfuncs, GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble* points); -void gl4_2compat_glMap1f(void *_glfuncs, GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat* points); -void gl4_2compat_glMap1d(void *_glfuncs, GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble* points); -void gl4_2compat_glPushAttrib(void *_glfuncs, GLbitfield mask); -void gl4_2compat_glPopAttrib(void *_glfuncs); -void gl4_2compat_glAccum(void *_glfuncs, GLenum op, GLfloat value); -void gl4_2compat_glIndexMask(void *_glfuncs, GLuint mask); -void gl4_2compat_glClearIndex(void *_glfuncs, GLfloat c); -void gl4_2compat_glClearAccum(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl4_2compat_glPushName(void *_glfuncs, GLuint name); -void gl4_2compat_glPopName(void *_glfuncs); -void gl4_2compat_glPassThrough(void *_glfuncs, GLfloat token); -void gl4_2compat_glLoadName(void *_glfuncs, GLuint name); -void gl4_2compat_glInitNames(void *_glfuncs); -GLint gl4_2compat_glRenderMode(void *_glfuncs, GLenum mode); -void gl4_2compat_glSelectBuffer(void *_glfuncs, GLsizei size, GLuint* buffer); -void gl4_2compat_glFeedbackBuffer(void *_glfuncs, GLsizei size, GLenum gltype, GLfloat* buffer); -void gl4_2compat_glTexGeniv(void *_glfuncs, GLenum coord, GLenum pname, const GLint* params); -void gl4_2compat_glTexGeni(void *_glfuncs, GLenum coord, GLenum pname, GLint param); -void gl4_2compat_glTexGenfv(void *_glfuncs, GLenum coord, GLenum pname, const GLfloat* params); -void gl4_2compat_glTexGenf(void *_glfuncs, GLenum coord, GLenum pname, GLfloat param); -void gl4_2compat_glTexGendv(void *_glfuncs, GLenum coord, GLenum pname, const GLdouble* params); -void gl4_2compat_glTexGend(void *_glfuncs, GLenum coord, GLenum pname, GLdouble param); -void gl4_2compat_glTexEnviv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl4_2compat_glTexEnvi(void *_glfuncs, GLenum target, GLenum pname, GLint param); -void gl4_2compat_glTexEnvfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params); -void gl4_2compat_glTexEnvf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param); -void gl4_2compat_glShadeModel(void *_glfuncs, GLenum mode); -void gl4_2compat_glPolygonStipple(void *_glfuncs, const GLubyte* mask); -void gl4_2compat_glMaterialiv(void *_glfuncs, GLenum face, GLenum pname, const GLint* params); -void gl4_2compat_glMateriali(void *_glfuncs, GLenum face, GLenum pname, GLint param); -void gl4_2compat_glMaterialfv(void *_glfuncs, GLenum face, GLenum pname, const GLfloat* params); -void gl4_2compat_glMaterialf(void *_glfuncs, GLenum face, GLenum pname, GLfloat param); -void gl4_2compat_glLineStipple(void *_glfuncs, GLint factor, GLushort pattern); -void gl4_2compat_glLightModeliv(void *_glfuncs, GLenum pname, const GLint* params); -void gl4_2compat_glLightModeli(void *_glfuncs, GLenum pname, GLint param); -void gl4_2compat_glLightModelfv(void *_glfuncs, GLenum pname, const GLfloat* params); -void gl4_2compat_glLightModelf(void *_glfuncs, GLenum pname, GLfloat param); -void gl4_2compat_glLightiv(void *_glfuncs, GLenum light, GLenum pname, const GLint* params); -void gl4_2compat_glLighti(void *_glfuncs, GLenum light, GLenum pname, GLint param); -void gl4_2compat_glLightfv(void *_glfuncs, GLenum light, GLenum pname, const GLfloat* params); -void gl4_2compat_glLightf(void *_glfuncs, GLenum light, GLenum pname, GLfloat param); -void gl4_2compat_glFogiv(void *_glfuncs, GLenum pname, const GLint* params); -void gl4_2compat_glFogi(void *_glfuncs, GLenum pname, GLint param); -void gl4_2compat_glFogfv(void *_glfuncs, GLenum pname, const GLfloat* params); -void gl4_2compat_glFogf(void *_glfuncs, GLenum pname, GLfloat param); -void gl4_2compat_glColorMaterial(void *_glfuncs, GLenum face, GLenum mode); -void gl4_2compat_glClipPlane(void *_glfuncs, GLenum plane, const GLdouble* equation); -void gl4_2compat_glVertex4sv(void *_glfuncs, const GLshort* v); -void gl4_2compat_glVertex4s(void *_glfuncs, GLshort x, GLshort y, GLshort z, GLshort w); -void gl4_2compat_glVertex4iv(void *_glfuncs, const GLint* v); -void gl4_2compat_glVertex4i(void *_glfuncs, GLint x, GLint y, GLint z, GLint w); -void gl4_2compat_glVertex4fv(void *_glfuncs, const GLfloat* v); -void gl4_2compat_glVertex4f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -void gl4_2compat_glVertex4dv(void *_glfuncs, const GLdouble* v); -void gl4_2compat_glVertex4d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -void gl4_2compat_glVertex3sv(void *_glfuncs, const GLshort* v); -void gl4_2compat_glVertex3s(void *_glfuncs, GLshort x, GLshort y, GLshort z); -void gl4_2compat_glVertex3iv(void *_glfuncs, const GLint* v); -void gl4_2compat_glVertex3i(void *_glfuncs, GLint x, GLint y, GLint z); -void gl4_2compat_glVertex3fv(void *_glfuncs, const GLfloat* v); -void gl4_2compat_glVertex3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl4_2compat_glVertex3dv(void *_glfuncs, const GLdouble* v); -void gl4_2compat_glVertex3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl4_2compat_glVertex2sv(void *_glfuncs, const GLshort* v); -void gl4_2compat_glVertex2s(void *_glfuncs, GLshort x, GLshort y); -void gl4_2compat_glVertex2iv(void *_glfuncs, const GLint* v); -void gl4_2compat_glVertex2i(void *_glfuncs, GLint x, GLint y); -void gl4_2compat_glVertex2fv(void *_glfuncs, const GLfloat* v); -void gl4_2compat_glVertex2f(void *_glfuncs, GLfloat x, GLfloat y); -void gl4_2compat_glVertex2dv(void *_glfuncs, const GLdouble* v); -void gl4_2compat_glVertex2d(void *_glfuncs, GLdouble x, GLdouble y); -void gl4_2compat_glTexCoord4sv(void *_glfuncs, const GLshort* v); -void gl4_2compat_glTexCoord4s(void *_glfuncs, GLshort s, GLshort t, GLshort r, GLshort q); -void gl4_2compat_glTexCoord4iv(void *_glfuncs, const GLint* v); -void gl4_2compat_glTexCoord4i(void *_glfuncs, GLint s, GLint t, GLint r, GLint q); -void gl4_2compat_glTexCoord4fv(void *_glfuncs, const GLfloat* v); -void gl4_2compat_glTexCoord4f(void *_glfuncs, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -void gl4_2compat_glTexCoord4dv(void *_glfuncs, const GLdouble* v); -void gl4_2compat_glTexCoord4d(void *_glfuncs, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -void gl4_2compat_glTexCoord3sv(void *_glfuncs, const GLshort* v); -void gl4_2compat_glTexCoord3s(void *_glfuncs, GLshort s, GLshort t, GLshort r); -void gl4_2compat_glTexCoord3iv(void *_glfuncs, const GLint* v); -void gl4_2compat_glTexCoord3i(void *_glfuncs, GLint s, GLint t, GLint r); -void gl4_2compat_glTexCoord3fv(void *_glfuncs, const GLfloat* v); -void gl4_2compat_glTexCoord3f(void *_glfuncs, GLfloat s, GLfloat t, GLfloat r); -void gl4_2compat_glTexCoord3dv(void *_glfuncs, const GLdouble* v); -void gl4_2compat_glTexCoord3d(void *_glfuncs, GLdouble s, GLdouble t, GLdouble r); -void gl4_2compat_glTexCoord2sv(void *_glfuncs, const GLshort* v); -void gl4_2compat_glTexCoord2s(void *_glfuncs, GLshort s, GLshort t); -void gl4_2compat_glTexCoord2iv(void *_glfuncs, const GLint* v); -void gl4_2compat_glTexCoord2i(void *_glfuncs, GLint s, GLint t); -void gl4_2compat_glTexCoord2fv(void *_glfuncs, const GLfloat* v); -void gl4_2compat_glTexCoord2f(void *_glfuncs, GLfloat s, GLfloat t); -void gl4_2compat_glTexCoord2dv(void *_glfuncs, const GLdouble* v); -void gl4_2compat_glTexCoord2d(void *_glfuncs, GLdouble s, GLdouble t); -void gl4_2compat_glTexCoord1sv(void *_glfuncs, const GLshort* v); -void gl4_2compat_glTexCoord1s(void *_glfuncs, GLshort s); -void gl4_2compat_glTexCoord1iv(void *_glfuncs, const GLint* v); -void gl4_2compat_glTexCoord1i(void *_glfuncs, GLint s); -void gl4_2compat_glTexCoord1fv(void *_glfuncs, const GLfloat* v); -void gl4_2compat_glTexCoord1f(void *_glfuncs, GLfloat s); -void gl4_2compat_glTexCoord1dv(void *_glfuncs, const GLdouble* v); -void gl4_2compat_glTexCoord1d(void *_glfuncs, GLdouble s); -void gl4_2compat_glRectsv(void *_glfuncs, const GLshort* v1, const GLshort* v2); -void gl4_2compat_glRects(void *_glfuncs, GLshort x1, GLshort y1, GLshort x2, GLshort y2); -void gl4_2compat_glRectiv(void *_glfuncs, const GLint* v1, const GLint* v2); -void gl4_2compat_glRecti(void *_glfuncs, GLint x1, GLint y1, GLint x2, GLint y2); -void gl4_2compat_glRectfv(void *_glfuncs, const GLfloat* v1, const GLfloat* v2); -void gl4_2compat_glRectf(void *_glfuncs, GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2); -void gl4_2compat_glRectdv(void *_glfuncs, const GLdouble* v1, const GLdouble* v2); -void gl4_2compat_glRectd(void *_glfuncs, GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2); -void gl4_2compat_glRasterPos4sv(void *_glfuncs, const GLshort* v); -void gl4_2compat_glRasterPos4s(void *_glfuncs, GLshort x, GLshort y, GLshort z, GLshort w); -void gl4_2compat_glRasterPos4iv(void *_glfuncs, const GLint* v); -void gl4_2compat_glRasterPos4i(void *_glfuncs, GLint x, GLint y, GLint z, GLint w); -void gl4_2compat_glRasterPos4fv(void *_glfuncs, const GLfloat* v); -void gl4_2compat_glRasterPos4f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -void gl4_2compat_glRasterPos4dv(void *_glfuncs, const GLdouble* v); -void gl4_2compat_glRasterPos4d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -void gl4_2compat_glRasterPos3sv(void *_glfuncs, const GLshort* v); -void gl4_2compat_glRasterPos3s(void *_glfuncs, GLshort x, GLshort y, GLshort z); -void gl4_2compat_glRasterPos3iv(void *_glfuncs, const GLint* v); -void gl4_2compat_glRasterPos3i(void *_glfuncs, GLint x, GLint y, GLint z); -void gl4_2compat_glRasterPos3fv(void *_glfuncs, const GLfloat* v); -void gl4_2compat_glRasterPos3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl4_2compat_glRasterPos3dv(void *_glfuncs, const GLdouble* v); -void gl4_2compat_glRasterPos3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl4_2compat_glRasterPos2sv(void *_glfuncs, const GLshort* v); -void gl4_2compat_glRasterPos2s(void *_glfuncs, GLshort x, GLshort y); -void gl4_2compat_glRasterPos2iv(void *_glfuncs, const GLint* v); -void gl4_2compat_glRasterPos2i(void *_glfuncs, GLint x, GLint y); -void gl4_2compat_glRasterPos2fv(void *_glfuncs, const GLfloat* v); -void gl4_2compat_glRasterPos2f(void *_glfuncs, GLfloat x, GLfloat y); -void gl4_2compat_glRasterPos2dv(void *_glfuncs, const GLdouble* v); -void gl4_2compat_glRasterPos2d(void *_glfuncs, GLdouble x, GLdouble y); -void gl4_2compat_glNormal3sv(void *_glfuncs, const GLshort* v); -void gl4_2compat_glNormal3s(void *_glfuncs, GLshort nx, GLshort ny, GLshort nz); -void gl4_2compat_glNormal3iv(void *_glfuncs, const GLint* v); -void gl4_2compat_glNormal3i(void *_glfuncs, GLint nx, GLint ny, GLint nz); -void gl4_2compat_glNormal3fv(void *_glfuncs, const GLfloat* v); -void gl4_2compat_glNormal3f(void *_glfuncs, GLfloat nx, GLfloat ny, GLfloat nz); -void gl4_2compat_glNormal3dv(void *_glfuncs, const GLdouble* v); -void gl4_2compat_glNormal3d(void *_glfuncs, GLdouble nx, GLdouble ny, GLdouble nz); -void gl4_2compat_glNormal3bv(void *_glfuncs, const GLbyte* v); -void gl4_2compat_glNormal3b(void *_glfuncs, GLbyte nx, GLbyte ny, GLbyte nz); -void gl4_2compat_glIndexsv(void *_glfuncs, const GLshort* c); -void gl4_2compat_glIndexs(void *_glfuncs, GLshort c); -void gl4_2compat_glIndexiv(void *_glfuncs, const GLint* c); -void gl4_2compat_glIndexi(void *_glfuncs, GLint c); -void gl4_2compat_glIndexfv(void *_glfuncs, const GLfloat* c); -void gl4_2compat_glIndexf(void *_glfuncs, GLfloat c); -void gl4_2compat_glIndexdv(void *_glfuncs, const GLdouble* c); -void gl4_2compat_glIndexd(void *_glfuncs, GLdouble c); -void gl4_2compat_glEnd(void *_glfuncs); -void gl4_2compat_glEdgeFlagv(void *_glfuncs, const GLboolean* flag); -void gl4_2compat_glEdgeFlag(void *_glfuncs, GLboolean flag); -void gl4_2compat_glColor4usv(void *_glfuncs, const GLushort* v); -void gl4_2compat_glColor4us(void *_glfuncs, GLushort red, GLushort green, GLushort blue, GLushort alpha); -void gl4_2compat_glColor4uiv(void *_glfuncs, const GLuint* v); -void gl4_2compat_glColor4ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue, GLuint alpha); -void gl4_2compat_glColor4ubv(void *_glfuncs, const GLubyte* v); -void gl4_2compat_glColor4ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha); -void gl4_2compat_glColor4sv(void *_glfuncs, const GLshort* v); -void gl4_2compat_glColor4s(void *_glfuncs, GLshort red, GLshort green, GLshort blue, GLshort alpha); -void gl4_2compat_glColor4iv(void *_glfuncs, const GLint* v); -void gl4_2compat_glColor4i(void *_glfuncs, GLint red, GLint green, GLint blue, GLint alpha); -void gl4_2compat_glColor4fv(void *_glfuncs, const GLfloat* v); -void gl4_2compat_glColor4f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl4_2compat_glColor4dv(void *_glfuncs, const GLdouble* v); -void gl4_2compat_glColor4d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha); -void gl4_2compat_glColor4bv(void *_glfuncs, const GLbyte* v); -void gl4_2compat_glColor4b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha); -void gl4_2compat_glColor3usv(void *_glfuncs, const GLushort* v); -void gl4_2compat_glColor3us(void *_glfuncs, GLushort red, GLushort green, GLushort blue); -void gl4_2compat_glColor3uiv(void *_glfuncs, const GLuint* v); -void gl4_2compat_glColor3ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue); -void gl4_2compat_glColor3ubv(void *_glfuncs, const GLubyte* v); -void gl4_2compat_glColor3ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue); -void gl4_2compat_glColor3sv(void *_glfuncs, const GLshort* v); -void gl4_2compat_glColor3s(void *_glfuncs, GLshort red, GLshort green, GLshort blue); -void gl4_2compat_glColor3iv(void *_glfuncs, const GLint* v); -void gl4_2compat_glColor3i(void *_glfuncs, GLint red, GLint green, GLint blue); -void gl4_2compat_glColor3fv(void *_glfuncs, const GLfloat* v); -void gl4_2compat_glColor3f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue); -void gl4_2compat_glColor3dv(void *_glfuncs, const GLdouble* v); -void gl4_2compat_glColor3d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue); -void gl4_2compat_glColor3bv(void *_glfuncs, const GLbyte* v); -void gl4_2compat_glColor3b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue); -void gl4_2compat_glBitmap(void *_glfuncs, GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte* bitmap); -void gl4_2compat_glBegin(void *_glfuncs, GLenum mode); -void gl4_2compat_glListBase(void *_glfuncs, GLuint base); -GLuint gl4_2compat_glGenLists(void *_glfuncs, GLsizei range_); -void gl4_2compat_glDeleteLists(void *_glfuncs, GLuint list, GLsizei range_); -void gl4_2compat_glCallLists(void *_glfuncs, GLsizei n, GLenum gltype, const GLvoid* lists); -void gl4_2compat_glCallList(void *_glfuncs, GLuint list); -void gl4_2compat_glEndList(void *_glfuncs); -void gl4_2compat_glNewList(void *_glfuncs, GLuint list, GLenum mode); -void gl4_2compat_glPushClientAttrib(void *_glfuncs, GLbitfield mask); -void gl4_2compat_glPopClientAttrib(void *_glfuncs); -void gl4_2compat_glPrioritizeTextures(void *_glfuncs, GLsizei n, const GLuint* textures, const GLfloat* priorities); -GLboolean gl4_2compat_glAreTexturesResident(void *_glfuncs, GLsizei n, const GLuint* textures, GLboolean* residences); -void gl4_2compat_glVertexPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl4_2compat_glTexCoordPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl4_2compat_glNormalPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl4_2compat_glInterleavedArrays(void *_glfuncs, GLenum format, GLsizei stride, const GLvoid* pointer); -void gl4_2compat_glIndexPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl4_2compat_glEnableClientState(void *_glfuncs, GLenum array); -void gl4_2compat_glEdgeFlagPointer(void *_glfuncs, GLsizei stride, const GLvoid* pointer); -void gl4_2compat_glDisableClientState(void *_glfuncs, GLenum array); -void gl4_2compat_glColorPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl4_2compat_glArrayElement(void *_glfuncs, GLint i); -void gl4_2compat_glResetMinmax(void *_glfuncs, GLenum target); -void gl4_2compat_glResetHistogram(void *_glfuncs, GLenum target); -void gl4_2compat_glMinmax(void *_glfuncs, GLenum target, GLenum internalFormat, GLboolean sink); -void gl4_2compat_glHistogram(void *_glfuncs, GLenum target, GLsizei width, GLenum internalFormat, GLboolean sink); -void gl4_2compat_glGetMinmaxParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl4_2compat_glGetMinmaxParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl4_2compat_glGetMinmax(void *_glfuncs, GLenum target, GLboolean reset, GLenum format, GLenum gltype, GLvoid* values); -void gl4_2compat_glGetHistogramParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl4_2compat_glGetHistogramParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl4_2compat_glGetHistogram(void *_glfuncs, GLenum target, GLboolean reset, GLenum format, GLenum gltype, GLvoid* values); -void gl4_2compat_glSeparableFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* row, const GLvoid* column); -void gl4_2compat_glGetSeparableFilter(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* row, GLvoid* column, GLvoid* span); -void gl4_2compat_glGetConvolutionParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl4_2compat_glGetConvolutionParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl4_2compat_glGetConvolutionFilter(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* image); -void gl4_2compat_glCopyConvolutionFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height); -void gl4_2compat_glCopyConvolutionFilter1D(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width); -void gl4_2compat_glConvolutionParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl4_2compat_glConvolutionParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint params); -void gl4_2compat_glConvolutionParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params); -void gl4_2compat_glConvolutionParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat params); -void gl4_2compat_glConvolutionFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* image); -void gl4_2compat_glConvolutionFilter1D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum gltype, const GLvoid* image); -void gl4_2compat_glCopyColorSubTable(void *_glfuncs, GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); -void gl4_2compat_glColorSubTable(void *_glfuncs, GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum gltype, const GLvoid* data); -void gl4_2compat_glGetColorTableParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl4_2compat_glGetColorTableParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl4_2compat_glGetColorTable(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* table); -void gl4_2compat_glCopyColorTable(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width); -void gl4_2compat_glColorTableParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl4_2compat_glColorTableParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params); -void gl4_2compat_glColorTable(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum gltype, const GLvoid* table); -void gl4_2compat_glMultTransposeMatrixd(void *_glfuncs, const GLdouble* m); -void gl4_2compat_glMultTransposeMatrixf(void *_glfuncs, const GLfloat* m); -void gl4_2compat_glLoadTransposeMatrixd(void *_glfuncs, const GLdouble* m); -void gl4_2compat_glLoadTransposeMatrixf(void *_glfuncs, const GLfloat* m); -void gl4_2compat_glMultiTexCoord4sv(void *_glfuncs, GLenum target, const GLshort* v); -void gl4_2compat_glMultiTexCoord4s(void *_glfuncs, GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); -void gl4_2compat_glMultiTexCoord4iv(void *_glfuncs, GLenum target, const GLint* v); -void gl4_2compat_glMultiTexCoord4i(void *_glfuncs, GLenum target, GLint s, GLint t, GLint r, GLint q); -void gl4_2compat_glMultiTexCoord4fv(void *_glfuncs, GLenum target, const GLfloat* v); -void gl4_2compat_glMultiTexCoord4f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -void gl4_2compat_glMultiTexCoord4dv(void *_glfuncs, GLenum target, const GLdouble* v); -void gl4_2compat_glMultiTexCoord4d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -void gl4_2compat_glMultiTexCoord3sv(void *_glfuncs, GLenum target, const GLshort* v); -void gl4_2compat_glMultiTexCoord3s(void *_glfuncs, GLenum target, GLshort s, GLshort t, GLshort r); -void gl4_2compat_glMultiTexCoord3iv(void *_glfuncs, GLenum target, const GLint* v); -void gl4_2compat_glMultiTexCoord3i(void *_glfuncs, GLenum target, GLint s, GLint t, GLint r); -void gl4_2compat_glMultiTexCoord3fv(void *_glfuncs, GLenum target, const GLfloat* v); -void gl4_2compat_glMultiTexCoord3f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t, GLfloat r); -void gl4_2compat_glMultiTexCoord3dv(void *_glfuncs, GLenum target, const GLdouble* v); -void gl4_2compat_glMultiTexCoord3d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t, GLdouble r); -void gl4_2compat_glMultiTexCoord2sv(void *_glfuncs, GLenum target, const GLshort* v); -void gl4_2compat_glMultiTexCoord2s(void *_glfuncs, GLenum target, GLshort s, GLshort t); -void gl4_2compat_glMultiTexCoord2iv(void *_glfuncs, GLenum target, const GLint* v); -void gl4_2compat_glMultiTexCoord2i(void *_glfuncs, GLenum target, GLint s, GLint t); -void gl4_2compat_glMultiTexCoord2fv(void *_glfuncs, GLenum target, const GLfloat* v); -void gl4_2compat_glMultiTexCoord2f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t); -void gl4_2compat_glMultiTexCoord2dv(void *_glfuncs, GLenum target, const GLdouble* v); -void gl4_2compat_glMultiTexCoord2d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t); -void gl4_2compat_glMultiTexCoord1sv(void *_glfuncs, GLenum target, const GLshort* v); -void gl4_2compat_glMultiTexCoord1s(void *_glfuncs, GLenum target, GLshort s); -void gl4_2compat_glMultiTexCoord1iv(void *_glfuncs, GLenum target, const GLint* v); -void gl4_2compat_glMultiTexCoord1i(void *_glfuncs, GLenum target, GLint s); -void gl4_2compat_glMultiTexCoord1fv(void *_glfuncs, GLenum target, const GLfloat* v); -void gl4_2compat_glMultiTexCoord1f(void *_glfuncs, GLenum target, GLfloat s); -void gl4_2compat_glMultiTexCoord1dv(void *_glfuncs, GLenum target, const GLdouble* v); -void gl4_2compat_glMultiTexCoord1d(void *_glfuncs, GLenum target, GLdouble s); -void gl4_2compat_glClientActiveTexture(void *_glfuncs, GLenum texture); -void gl4_2compat_glWindowPos3sv(void *_glfuncs, const GLshort* v); -void gl4_2compat_glWindowPos3s(void *_glfuncs, GLshort x, GLshort y, GLshort z); -void gl4_2compat_glWindowPos3iv(void *_glfuncs, const GLint* v); -void gl4_2compat_glWindowPos3i(void *_glfuncs, GLint x, GLint y, GLint z); -void gl4_2compat_glWindowPos3fv(void *_glfuncs, const GLfloat* v); -void gl4_2compat_glWindowPos3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl4_2compat_glWindowPos3dv(void *_glfuncs, const GLdouble* v); -void gl4_2compat_glWindowPos3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl4_2compat_glWindowPos2sv(void *_glfuncs, const GLshort* v); -void gl4_2compat_glWindowPos2s(void *_glfuncs, GLshort x, GLshort y); -void gl4_2compat_glWindowPos2iv(void *_glfuncs, const GLint* v); -void gl4_2compat_glWindowPos2i(void *_glfuncs, GLint x, GLint y); -void gl4_2compat_glWindowPos2fv(void *_glfuncs, const GLfloat* v); -void gl4_2compat_glWindowPos2f(void *_glfuncs, GLfloat x, GLfloat y); -void gl4_2compat_glWindowPos2dv(void *_glfuncs, const GLdouble* v); -void gl4_2compat_glWindowPos2d(void *_glfuncs, GLdouble x, GLdouble y); -void gl4_2compat_glSecondaryColorPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl4_2compat_glSecondaryColor3usv(void *_glfuncs, const GLushort* v); -void gl4_2compat_glSecondaryColor3us(void *_glfuncs, GLushort red, GLushort green, GLushort blue); -void gl4_2compat_glSecondaryColor3uiv(void *_glfuncs, const GLuint* v); -void gl4_2compat_glSecondaryColor3ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue); -void gl4_2compat_glSecondaryColor3ubv(void *_glfuncs, const GLubyte* v); -void gl4_2compat_glSecondaryColor3ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue); -void gl4_2compat_glSecondaryColor3sv(void *_glfuncs, const GLshort* v); -void gl4_2compat_glSecondaryColor3s(void *_glfuncs, GLshort red, GLshort green, GLshort blue); -void gl4_2compat_glSecondaryColor3iv(void *_glfuncs, const GLint* v); -void gl4_2compat_glSecondaryColor3i(void *_glfuncs, GLint red, GLint green, GLint blue); -void gl4_2compat_glSecondaryColor3fv(void *_glfuncs, const GLfloat* v); -void gl4_2compat_glSecondaryColor3f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue); -void gl4_2compat_glSecondaryColor3dv(void *_glfuncs, const GLdouble* v); -void gl4_2compat_glSecondaryColor3d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue); -void gl4_2compat_glSecondaryColor3bv(void *_glfuncs, const GLbyte* v); -void gl4_2compat_glSecondaryColor3b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue); -void gl4_2compat_glFogCoordPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl4_2compat_glFogCoorddv(void *_glfuncs, const GLdouble* coord); -void gl4_2compat_glFogCoordd(void *_glfuncs, GLdouble coord); -void gl4_2compat_glFogCoordfv(void *_glfuncs, const GLfloat* coord); -void gl4_2compat_glFogCoordf(void *_glfuncs, GLfloat coord); -void gl4_2compat_glVertexAttrib4usv(void *_glfuncs, GLuint index, const GLushort* v); -void gl4_2compat_glVertexAttrib4uiv(void *_glfuncs, GLuint index, const GLuint* v); -void gl4_2compat_glVertexAttrib4ubv(void *_glfuncs, GLuint index, const GLubyte* v); -void gl4_2compat_glVertexAttrib4sv(void *_glfuncs, GLuint index, const GLshort* v); -void gl4_2compat_glVertexAttrib4s(void *_glfuncs, GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -void gl4_2compat_glVertexAttrib4iv(void *_glfuncs, GLuint index, const GLint* v); -void gl4_2compat_glVertexAttrib4fv(void *_glfuncs, GLuint index, const GLfloat* v); -void gl4_2compat_glVertexAttrib4f(void *_glfuncs, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -void gl4_2compat_glVertexAttrib4dv(void *_glfuncs, GLuint index, const GLdouble* v); -void gl4_2compat_glVertexAttrib4d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -void gl4_2compat_glVertexAttrib4bv(void *_glfuncs, GLuint index, const GLbyte* v); -void gl4_2compat_glVertexAttrib4Nusv(void *_glfuncs, GLuint index, const GLushort* v); -void gl4_2compat_glVertexAttrib4Nuiv(void *_glfuncs, GLuint index, const GLuint* v); -void gl4_2compat_glVertexAttrib4Nubv(void *_glfuncs, GLuint index, const GLubyte* v); -void gl4_2compat_glVertexAttrib4Nub(void *_glfuncs, GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -void gl4_2compat_glVertexAttrib4Nsv(void *_glfuncs, GLuint index, const GLshort* v); -void gl4_2compat_glVertexAttrib4Niv(void *_glfuncs, GLuint index, const GLint* v); -void gl4_2compat_glVertexAttrib4Nbv(void *_glfuncs, GLuint index, const GLbyte* v); -void gl4_2compat_glVertexAttrib3sv(void *_glfuncs, GLuint index, const GLshort* v); -void gl4_2compat_glVertexAttrib3s(void *_glfuncs, GLuint index, GLshort x, GLshort y, GLshort z); -void gl4_2compat_glVertexAttrib3fv(void *_glfuncs, GLuint index, const GLfloat* v); -void gl4_2compat_glVertexAttrib3f(void *_glfuncs, GLuint index, GLfloat x, GLfloat y, GLfloat z); -void gl4_2compat_glVertexAttrib3dv(void *_glfuncs, GLuint index, const GLdouble* v); -void gl4_2compat_glVertexAttrib3d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y, GLdouble z); -void gl4_2compat_glVertexAttrib2sv(void *_glfuncs, GLuint index, const GLshort* v); -void gl4_2compat_glVertexAttrib2s(void *_glfuncs, GLuint index, GLshort x, GLshort y); -void gl4_2compat_glVertexAttrib2fv(void *_glfuncs, GLuint index, const GLfloat* v); -void gl4_2compat_glVertexAttrib2f(void *_glfuncs, GLuint index, GLfloat x, GLfloat y); -void gl4_2compat_glVertexAttrib2dv(void *_glfuncs, GLuint index, const GLdouble* v); -void gl4_2compat_glVertexAttrib2d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y); -void gl4_2compat_glVertexAttrib1sv(void *_glfuncs, GLuint index, const GLshort* v); -void gl4_2compat_glVertexAttrib1s(void *_glfuncs, GLuint index, GLshort x); -void gl4_2compat_glVertexAttrib1fv(void *_glfuncs, GLuint index, const GLfloat* v); -void gl4_2compat_glVertexAttrib1f(void *_glfuncs, GLuint index, GLfloat x); -void gl4_2compat_glVertexAttrib1dv(void *_glfuncs, GLuint index, const GLdouble* v); -void gl4_2compat_glVertexAttrib1d(void *_glfuncs, GLuint index, GLdouble x); -void gl4_2compat_glVertexAttribI4usv(void *_glfuncs, GLuint index, const GLushort* v); -void gl4_2compat_glVertexAttribI4ubv(void *_glfuncs, GLuint index, const GLubyte* v); -void gl4_2compat_glVertexAttribI4sv(void *_glfuncs, GLuint index, const GLshort* v); -void gl4_2compat_glVertexAttribI4bv(void *_glfuncs, GLuint index, const GLbyte* v); -void gl4_2compat_glVertexAttribI4uiv(void *_glfuncs, GLuint index, const GLuint* v); -void gl4_2compat_glVertexAttribI3uiv(void *_glfuncs, GLuint index, const GLuint* v); -void gl4_2compat_glVertexAttribI2uiv(void *_glfuncs, GLuint index, const GLuint* v); -void gl4_2compat_glVertexAttribI1uiv(void *_glfuncs, GLuint index, const GLuint* v); -void gl4_2compat_glVertexAttribI4iv(void *_glfuncs, GLuint index, const GLint* v); -void gl4_2compat_glVertexAttribI3iv(void *_glfuncs, GLuint index, const GLint* v); -void gl4_2compat_glVertexAttribI2iv(void *_glfuncs, GLuint index, const GLint* v); -void gl4_2compat_glVertexAttribI1iv(void *_glfuncs, GLuint index, const GLint* v); -void gl4_2compat_glVertexAttribI4ui(void *_glfuncs, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -void gl4_2compat_glVertexAttribI3ui(void *_glfuncs, GLuint index, GLuint x, GLuint y, GLuint z); -void gl4_2compat_glVertexAttribI2ui(void *_glfuncs, GLuint index, GLuint x, GLuint y); -void gl4_2compat_glVertexAttribI1ui(void *_glfuncs, GLuint index, GLuint x); -void gl4_2compat_glVertexAttribI4i(void *_glfuncs, GLuint index, GLint x, GLint y, GLint z, GLint w); -void gl4_2compat_glVertexAttribI3i(void *_glfuncs, GLuint index, GLint x, GLint y, GLint z); -void gl4_2compat_glVertexAttribI2i(void *_glfuncs, GLuint index, GLint x, GLint y); -void gl4_2compat_glVertexAttribI1i(void *_glfuncs, GLuint index, GLint x); - - -#ifdef __cplusplus -} // extern "C" -#endif diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.2compat/gl.go b/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.2compat/gl.go deleted file mode 100644 index c91fbef659..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.2compat/gl.go +++ /dev/null @@ -1,9386 +0,0 @@ -// ** file automatically generated by glgen -- do not edit manually ** - -package GL - -// #cgo CXXFLAGS: -std=c++0x -pedantic-errors -Wall -fno-strict-aliasing -// #cgo LDFLAGS: -lstdc++ -// #cgo pkg-config: Qt5Core Qt5OpenGL -// -// #include "funcs.h" -// -// void free(void*); -// -import "C" - -import ( - "fmt" - "reflect" - "unsafe" - - "gopkg.in/qml.v1/gl/glbase" -) - -// API returns a value that offers methods matching the OpenGL version 4.2 API. -// -// The returned API must not be used after the provided OpenGL context becomes invalid. -func API(context glbase.Contexter) *GL { - gl := &GL{} - gl.funcs = C.gl4_2compat_funcs() - if gl.funcs == nil { - panic(fmt.Errorf("OpenGL version 4.2 is not available")) - } - return gl -} - -// GL implements the OpenGL version 4.2 API. Values of this -// type must be created via the API function, and it must not be used after -// the associated OpenGL context becomes invalid. -type GL struct { - funcs unsafe.Pointer -} - -const ( - FALSE = 0 - TRUE = 1 - NONE = 0 - - BYTE = 0x1400 - UNSIGNED_BYTE = 0x1401 - SHORT = 0x1402 - UNSIGNED_SHORT = 0x1403 - INT = 0x1404 - UNSIGNED_INT = 0x1405 - FLOAT = 0x1406 - N2_BYTES = 0x1407 - N3_BYTES = 0x1408 - N4_BYTES = 0x1409 - DOUBLE = 0x140A - HALF_FLOAT = 0x140B - FIXED = 0x140C - - ACCUM = 0x0100 - LOAD = 0x0101 - RETURN = 0x0102 - MULT = 0x0103 - ADD = 0x0104 - - ACCUM_BUFFER_BIT = 0x00000200 - ALL_ATTRIB_BITS = 0xFFFFFFFF - COLOR_BUFFER_BIT = 0x00004000 - CURRENT_BIT = 0x00000001 - DEPTH_BUFFER_BIT = 0x00000100 - ENABLE_BIT = 0x00002000 - EVAL_BIT = 0x00010000 - FOG_BIT = 0x00000080 - HINT_BIT = 0x00008000 - LIGHTING_BIT = 0x00000040 - LINE_BIT = 0x00000004 - LIST_BIT = 0x00020000 - MULTISAMPLE_BIT = 0x20000000 - PIXEL_MODE_BIT = 0x00000020 - POINT_BIT = 0x00000002 - POLYGON_BIT = 0x00000008 - POLYGON_STIPPLE_BIT = 0x00000010 - SCISSOR_BIT = 0x00080000 - STENCIL_BUFFER_BIT = 0x00000400 - TEXTURE_BIT = 0x00040000 - TRANSFORM_BIT = 0x00001000 - VIEWPORT_BIT = 0x00000800 - - ALWAYS = 0x0207 - EQUAL = 0x0202 - GEQUAL = 0x0206 - GREATER = 0x0204 - LEQUAL = 0x0203 - LESS = 0x0201 - NEVER = 0x0200 - NOTEQUAL = 0x0205 - - LOGIC_OP = 0x0BF1 - - DST_ALPHA = 0x0304 - ONE = 1 - ONE_MINUS_DST_ALPHA = 0x0305 - ONE_MINUS_SRC_ALPHA = 0x0303 - ONE_MINUS_SRC_COLOR = 0x0301 - SRC_ALPHA = 0x0302 - SRC_COLOR = 0x0300 - ZERO = 0 - - DST_COLOR = 0x0306 - ONE_MINUS_DST_COLOR = 0x0307 - SRC_ALPHA_SATURATE = 0x0308 - - CLIENT_ALL_ATTRIB_BITS = 0xFFFFFFFF - CLIENT_PIXEL_STORE_BIT = 0x00000001 - CLIENT_VERTEX_ARRAY_BIT = 0x00000002 - - CLIP_DISTANCE0 = 0x3000 - CLIP_DISTANCE1 = 0x3001 - CLIP_DISTANCE2 = 0x3002 - CLIP_DISTANCE3 = 0x3003 - CLIP_DISTANCE4 = 0x3004 - CLIP_DISTANCE5 = 0x3005 - CLIP_DISTANCE6 = 0x3006 - CLIP_DISTANCE7 = 0x3007 - CLIP_PLANE0 = 0x3000 - CLIP_PLANE1 = 0x3001 - CLIP_PLANE2 = 0x3002 - CLIP_PLANE3 = 0x3003 - CLIP_PLANE4 = 0x3004 - CLIP_PLANE5 = 0x3005 - - BACK = 0x0405 - FRONT = 0x0404 - FRONT_AND_BACK = 0x0408 - - AMBIENT = 0x1200 - AMBIENT_AND_DIFFUSE = 0x1602 - DIFFUSE = 0x1201 - EMISSION = 0x1600 - SPECULAR = 0x1202 - - CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT = 0x00000001 - - CONTEXT_COMPATIBILITY_PROFILE_BIT = 0x00000002 - CONTEXT_CORE_PROFILE_BIT = 0x00000001 - - AUX0 = 0x0409 - AUX1 = 0x040A - AUX2 = 0x040B - AUX3 = 0x040C - BACK_LEFT = 0x0402 - BACK_RIGHT = 0x0403 - FRONT_LEFT = 0x0400 - FRONT_RIGHT = 0x0401 - LEFT = 0x0406 - RIGHT = 0x0407 - - ALPHA_TEST = 0x0BC0 - AUTO_NORMAL = 0x0D80 - BLEND = 0x0BE2 - COLOR_ARRAY = 0x8076 - COLOR_LOGIC_OP = 0x0BF2 - COLOR_MATERIAL = 0x0B57 - CULL_FACE = 0x0B44 - DEPTH_TEST = 0x0B71 - DITHER = 0x0BD0 - EDGE_FLAG_ARRAY = 0x8079 - FOG = 0x0B60 - INDEX_ARRAY = 0x8077 - INDEX_LOGIC_OP = 0x0BF1 - LIGHT0 = 0x4000 - LIGHT1 = 0x4001 - LIGHT2 = 0x4002 - LIGHT3 = 0x4003 - LIGHT4 = 0x4004 - LIGHT5 = 0x4005 - LIGHT6 = 0x4006 - LIGHT7 = 0x4007 - LIGHTING = 0x0B50 - LINE_SMOOTH = 0x0B20 - LINE_STIPPLE = 0x0B24 - MAP1_COLOR_4 = 0x0D90 - MAP1_INDEX = 0x0D91 - MAP1_NORMAL = 0x0D92 - MAP1_TEXTURE_COORD_1 = 0x0D93 - MAP1_TEXTURE_COORD_2 = 0x0D94 - MAP1_TEXTURE_COORD_3 = 0x0D95 - MAP1_TEXTURE_COORD_4 = 0x0D96 - MAP1_VERTEX_3 = 0x0D97 - MAP1_VERTEX_4 = 0x0D98 - MAP2_COLOR_4 = 0x0DB0 - MAP2_INDEX = 0x0DB1 - MAP2_NORMAL = 0x0DB2 - MAP2_TEXTURE_COORD_1 = 0x0DB3 - MAP2_TEXTURE_COORD_2 = 0x0DB4 - MAP2_TEXTURE_COORD_3 = 0x0DB5 - MAP2_TEXTURE_COORD_4 = 0x0DB6 - MAP2_VERTEX_3 = 0x0DB7 - MAP2_VERTEX_4 = 0x0DB8 - NORMALIZE = 0x0BA1 - NORMAL_ARRAY = 0x8075 - POINT_SMOOTH = 0x0B10 - POLYGON_OFFSET_FILL = 0x8037 - POLYGON_OFFSET_LINE = 0x2A02 - POLYGON_OFFSET_POINT = 0x2A01 - POLYGON_SMOOTH = 0x0B41 - POLYGON_STIPPLE = 0x0B42 - SCISSOR_TEST = 0x0C11 - STENCIL_TEST = 0x0B90 - TEXTURE_1D = 0x0DE0 - TEXTURE_2D = 0x0DE1 - TEXTURE_COORD_ARRAY = 0x8078 - TEXTURE_GEN_Q = 0x0C63 - TEXTURE_GEN_R = 0x0C62 - TEXTURE_GEN_S = 0x0C60 - TEXTURE_GEN_T = 0x0C61 - VERTEX_ARRAY = 0x8074 - - INVALID_ENUM = 0x0500 - INVALID_FRAMEBUFFER_OPERATION = 0x0506 - INVALID_OPERATION = 0x0502 - INVALID_VALUE = 0x0501 - NO_ERROR = 0 - OUT_OF_MEMORY = 0x0505 - STACK_OVERFLOW = 0x0503 - STACK_UNDERFLOW = 0x0504 - - N2D = 0x0600 - N3D = 0x0601 - N3D_COLOR = 0x0602 - N3D_COLOR_TEXTURE = 0x0603 - N4D_COLOR_TEXTURE = 0x0604 - - BITMAP_TOKEN = 0x0704 - COPY_PIXEL_TOKEN = 0x0706 - DRAW_PIXEL_TOKEN = 0x0705 - LINE_RESET_TOKEN = 0x0707 - LINE_TOKEN = 0x0702 - PASS_THROUGH_TOKEN = 0x0700 - POINT_TOKEN = 0x0701 - POLYGON_TOKEN = 0x0703 - - EXP = 0x0800 - EXP2 = 0x0801 - LINEAR = 0x2601 - - FOG_COLOR = 0x0B66 - FOG_DENSITY = 0x0B62 - FOG_END = 0x0B64 - FOG_INDEX = 0x0B61 - FOG_MODE = 0x0B65 - FOG_START = 0x0B63 - - CCW = 0x0901 - CW = 0x0900 - - COEFF = 0x0A00 - DOMAIN = 0x0A02 - ORDER = 0x0A01 - - PIXEL_MAP_A_TO_A = 0x0C79 - PIXEL_MAP_B_TO_B = 0x0C78 - PIXEL_MAP_G_TO_G = 0x0C77 - PIXEL_MAP_I_TO_A = 0x0C75 - PIXEL_MAP_I_TO_B = 0x0C74 - PIXEL_MAP_I_TO_G = 0x0C73 - PIXEL_MAP_I_TO_I = 0x0C70 - PIXEL_MAP_I_TO_R = 0x0C72 - PIXEL_MAP_R_TO_R = 0x0C76 - PIXEL_MAP_S_TO_S = 0x0C71 - - ACCUM_ALPHA_BITS = 0x0D5B - ACCUM_BLUE_BITS = 0x0D5A - ACCUM_CLEAR_VALUE = 0x0B80 - ACCUM_GREEN_BITS = 0x0D59 - ACCUM_RED_BITS = 0x0D58 - ALIASED_LINE_WIDTH_RANGE = 0x846E - ALIASED_POINT_SIZE_RANGE = 0x846D - ALPHA_BIAS = 0x0D1D - ALPHA_BITS = 0x0D55 - ALPHA_SCALE = 0x0D1C - ALPHA_TEST_FUNC = 0x0BC1 - ALPHA_TEST_REF = 0x0BC2 - ATTRIB_STACK_DEPTH = 0x0BB0 - AUX_BUFFERS = 0x0C00 - BLEND_DST = 0x0BE0 - BLEND_SRC = 0x0BE1 - BLUE_BIAS = 0x0D1B - BLUE_BITS = 0x0D54 - BLUE_SCALE = 0x0D1A - CLIENT_ATTRIB_STACK_DEPTH = 0x0BB1 - COLOR_ARRAY_SIZE = 0x8081 - COLOR_ARRAY_STRIDE = 0x8083 - COLOR_ARRAY_TYPE = 0x8082 - COLOR_CLEAR_VALUE = 0x0C22 - COLOR_MATERIAL_FACE = 0x0B55 - COLOR_MATERIAL_PARAMETER = 0x0B56 - COLOR_WRITEMASK = 0x0C23 - CULL_FACE_MODE = 0x0B45 - CURRENT_COLOR = 0x0B00 - CURRENT_INDEX = 0x0B01 - CURRENT_NORMAL = 0x0B02 - CURRENT_RASTER_COLOR = 0x0B04 - CURRENT_RASTER_DISTANCE = 0x0B09 - CURRENT_RASTER_INDEX = 0x0B05 - CURRENT_RASTER_POSITION = 0x0B07 - CURRENT_RASTER_POSITION_VALID = 0x0B08 - CURRENT_RASTER_TEXTURE_COORDS = 0x0B06 - CURRENT_TEXTURE_COORDS = 0x0B03 - DEPTH_BIAS = 0x0D1F - DEPTH_BITS = 0x0D56 - DEPTH_CLEAR_VALUE = 0x0B73 - DEPTH_FUNC = 0x0B74 - DEPTH_RANGE = 0x0B70 - DEPTH_SCALE = 0x0D1E - DEPTH_WRITEMASK = 0x0B72 - DOUBLEBUFFER = 0x0C32 - DRAW_BUFFER = 0x0C01 - EDGE_FLAG = 0x0B43 - EDGE_FLAG_ARRAY_STRIDE = 0x808C - FEEDBACK_BUFFER_SIZE = 0x0DF1 - FEEDBACK_BUFFER_TYPE = 0x0DF2 - FOG_HINT = 0x0C54 - FRONT_FACE = 0x0B46 - GREEN_BIAS = 0x0D19 - GREEN_BITS = 0x0D53 - GREEN_SCALE = 0x0D18 - INDEX_ARRAY_STRIDE = 0x8086 - INDEX_ARRAY_TYPE = 0x8085 - INDEX_BITS = 0x0D51 - INDEX_CLEAR_VALUE = 0x0C20 - INDEX_MODE = 0x0C30 - INDEX_OFFSET = 0x0D13 - INDEX_SHIFT = 0x0D12 - INDEX_WRITEMASK = 0x0C21 - LIGHT_MODEL_AMBIENT = 0x0B53 - LIGHT_MODEL_COLOR_CONTROL = 0x81F8 - LIGHT_MODEL_LOCAL_VIEWER = 0x0B51 - LIGHT_MODEL_TWO_SIDE = 0x0B52 - LINE_SMOOTH_HINT = 0x0C52 - LINE_STIPPLE_PATTERN = 0x0B25 - LINE_STIPPLE_REPEAT = 0x0B26 - LINE_WIDTH = 0x0B21 - LINE_WIDTH_GRANULARITY = 0x0B23 - LINE_WIDTH_RANGE = 0x0B22 - LIST_BASE = 0x0B32 - LIST_INDEX = 0x0B33 - LIST_MODE = 0x0B30 - LOGIC_OP_MODE = 0x0BF0 - MAP1_GRID_DOMAIN = 0x0DD0 - MAP1_GRID_SEGMENTS = 0x0DD1 - MAP2_GRID_DOMAIN = 0x0DD2 - MAP2_GRID_SEGMENTS = 0x0DD3 - MAP_COLOR = 0x0D10 - MAP_STENCIL = 0x0D11 - MATRIX_MODE = 0x0BA0 - MAX_ATTRIB_STACK_DEPTH = 0x0D35 - MAX_CLIENT_ATTRIB_STACK_DEPTH = 0x0D3B - MAX_CLIP_DISTANCES = 0x0D32 - MAX_CLIP_PLANES = 0x0D32 - MAX_EVAL_ORDER = 0x0D30 - MAX_LIGHTS = 0x0D31 - MAX_LIST_NESTING = 0x0B31 - MAX_MODELVIEW_STACK_DEPTH = 0x0D36 - MAX_NAME_STACK_DEPTH = 0x0D37 - MAX_PIXEL_MAP_TABLE = 0x0D34 - MAX_PROJECTION_STACK_DEPTH = 0x0D38 - MAX_TEXTURE_SIZE = 0x0D33 - MAX_TEXTURE_STACK_DEPTH = 0x0D39 - MAX_VIEWPORT_DIMS = 0x0D3A - MODELVIEW_MATRIX = 0x0BA6 - MODELVIEW_STACK_DEPTH = 0x0BA3 - NAME_STACK_DEPTH = 0x0D70 - NORMAL_ARRAY_STRIDE = 0x807F - NORMAL_ARRAY_TYPE = 0x807E - PACK_ALIGNMENT = 0x0D05 - PACK_LSB_FIRST = 0x0D01 - PACK_ROW_LENGTH = 0x0D02 - PACK_SKIP_PIXELS = 0x0D04 - PACK_SKIP_ROWS = 0x0D03 - PACK_SWAP_BYTES = 0x0D00 - PERSPECTIVE_CORRECTION_HINT = 0x0C50 - PIXEL_MAP_A_TO_A_SIZE = 0x0CB9 - PIXEL_MAP_B_TO_B_SIZE = 0x0CB8 - PIXEL_MAP_G_TO_G_SIZE = 0x0CB7 - PIXEL_MAP_I_TO_A_SIZE = 0x0CB5 - PIXEL_MAP_I_TO_B_SIZE = 0x0CB4 - PIXEL_MAP_I_TO_G_SIZE = 0x0CB3 - PIXEL_MAP_I_TO_I_SIZE = 0x0CB0 - PIXEL_MAP_I_TO_R_SIZE = 0x0CB2 - PIXEL_MAP_R_TO_R_SIZE = 0x0CB6 - PIXEL_MAP_S_TO_S_SIZE = 0x0CB1 - POINT_SIZE = 0x0B11 - POINT_SIZE_GRANULARITY = 0x0B13 - POINT_SIZE_RANGE = 0x0B12 - POINT_SMOOTH_HINT = 0x0C51 - POLYGON_MODE = 0x0B40 - POLYGON_OFFSET_FACTOR = 0x8038 - POLYGON_OFFSET_UNITS = 0x2A00 - POLYGON_SMOOTH_HINT = 0x0C53 - PROJECTION_MATRIX = 0x0BA7 - PROJECTION_STACK_DEPTH = 0x0BA4 - READ_BUFFER = 0x0C02 - RED_BIAS = 0x0D15 - RED_BITS = 0x0D52 - RED_SCALE = 0x0D14 - RENDER_MODE = 0x0C40 - RGBA_MODE = 0x0C31 - SCISSOR_BOX = 0x0C10 - SELECTION_BUFFER_SIZE = 0x0DF4 - SHADE_MODEL = 0x0B54 - SMOOTH_LINE_WIDTH_GRANULARITY = 0x0B23 - SMOOTH_LINE_WIDTH_RANGE = 0x0B22 - SMOOTH_POINT_SIZE_GRANULARITY = 0x0B13 - SMOOTH_POINT_SIZE_RANGE = 0x0B12 - STENCIL_BITS = 0x0D57 - STENCIL_CLEAR_VALUE = 0x0B91 - STENCIL_FAIL = 0x0B94 - STENCIL_FUNC = 0x0B92 - STENCIL_PASS_DEPTH_FAIL = 0x0B95 - STENCIL_PASS_DEPTH_PASS = 0x0B96 - STENCIL_REF = 0x0B97 - STENCIL_VALUE_MASK = 0x0B93 - STENCIL_WRITEMASK = 0x0B98 - STEREO = 0x0C33 - SUBPIXEL_BITS = 0x0D50 - TEXTURE_BINDING_1D = 0x8068 - TEXTURE_BINDING_2D = 0x8069 - TEXTURE_BINDING_3D = 0x806A - TEXTURE_COORD_ARRAY_SIZE = 0x8088 - TEXTURE_COORD_ARRAY_STRIDE = 0x808A - TEXTURE_COORD_ARRAY_TYPE = 0x8089 - TEXTURE_MATRIX = 0x0BA8 - TEXTURE_STACK_DEPTH = 0x0BA5 - UNPACK_ALIGNMENT = 0x0CF5 - UNPACK_LSB_FIRST = 0x0CF1 - UNPACK_ROW_LENGTH = 0x0CF2 - UNPACK_SKIP_PIXELS = 0x0CF4 - UNPACK_SKIP_ROWS = 0x0CF3 - UNPACK_SWAP_BYTES = 0x0CF0 - VERTEX_ARRAY_SIZE = 0x807A - VERTEX_ARRAY_STRIDE = 0x807C - VERTEX_ARRAY_TYPE = 0x807B - VIEWPORT = 0x0BA2 - ZOOM_X = 0x0D16 - ZOOM_Y = 0x0D17 - - COLOR_ARRAY_POINTER = 0x8090 - EDGE_FLAG_ARRAY_POINTER = 0x8093 - FEEDBACK_BUFFER_POINTER = 0x0DF0 - INDEX_ARRAY_POINTER = 0x8091 - NORMAL_ARRAY_POINTER = 0x808F - SELECTION_BUFFER_POINTER = 0x0DF3 - TEXTURE_COORD_ARRAY_POINTER = 0x8092 - VERTEX_ARRAY_POINTER = 0x808E - - TEXTURE_ALPHA_SIZE = 0x805F - TEXTURE_BLUE_SIZE = 0x805E - TEXTURE_BORDER = 0x1005 - TEXTURE_BORDER_COLOR = 0x1004 - TEXTURE_COMPONENTS = 0x1003 - TEXTURE_GREEN_SIZE = 0x805D - TEXTURE_HEIGHT = 0x1001 - TEXTURE_INTENSITY_SIZE = 0x8061 - TEXTURE_INTERNAL_FORMAT = 0x1003 - TEXTURE_LUMINANCE_SIZE = 0x8060 - TEXTURE_MAG_FILTER = 0x2800 - TEXTURE_MIN_FILTER = 0x2801 - TEXTURE_PRIORITY = 0x8066 - TEXTURE_RED_SIZE = 0x805C - TEXTURE_RESIDENT = 0x8067 - TEXTURE_WIDTH = 0x1000 - TEXTURE_WRAP_S = 0x2802 - TEXTURE_WRAP_T = 0x2803 - - DONT_CARE = 0x1100 - FASTEST = 0x1101 - NICEST = 0x1102 - - FRAGMENT_SHADER_DERIVATIVE_HINT = 0x8B8B - GENERATE_MIPMAP_HINT = 0x8192 - PROGRAM_BINARY_RETRIEVABLE_HINT = 0x8257 - TEXTURE_COMPRESSION_HINT = 0x84EF - - C3F_V3F = 0x2A24 - C4F_N3F_V3F = 0x2A26 - C4UB_V2F = 0x2A22 - C4UB_V3F = 0x2A23 - N3F_V3F = 0x2A25 - T2F_C3F_V3F = 0x2A2A - T2F_C4F_N3F_V3F = 0x2A2C - T2F_C4UB_V3F = 0x2A29 - T2F_N3F_V3F = 0x2A2B - T2F_V3F = 0x2A27 - T4F_C4F_N3F_V4F = 0x2A2D - T4F_V4F = 0x2A28 - V2F = 0x2A20 - V3F = 0x2A21 - - MODULATE = 0x2100 - REPLACE = 0x1E01 - - SEPARATE_SPECULAR_COLOR = 0x81FA - SINGLE_COLOR = 0x81F9 - - CONSTANT_ATTENUATION = 0x1207 - LINEAR_ATTENUATION = 0x1208 - POSITION = 0x1203 - QUADRATIC_ATTENUATION = 0x1209 - SPOT_CUTOFF = 0x1206 - SPOT_DIRECTION = 0x1204 - SPOT_EXPONENT = 0x1205 - - COMPILE = 0x1300 - COMPILE_AND_EXECUTE = 0x1301 - - AND = 0x1501 - AND_INVERTED = 0x1504 - AND_REVERSE = 0x1502 - CLEAR = 0x1500 - COPY = 0x1503 - COPY_INVERTED = 0x150C - EQUIV = 0x1509 - INVERT = 0x150A - NAND = 0x150E - NOOP = 0x1505 - NOR = 0x1508 - OR = 0x1507 - OR_INVERTED = 0x150D - OR_REVERSE = 0x150B - SET = 0x150F - XOR = 0x1506 - - MAP_FLUSH_EXPLICIT_BIT = 0x0010 - MAP_INVALIDATE_BUFFER_BIT = 0x0008 - MAP_INVALIDATE_RANGE_BIT = 0x0004 - MAP_READ_BIT = 0x0001 - MAP_UNSYNCHRONIZED_BIT = 0x0020 - MAP_WRITE_BIT = 0x0002 - - COLOR_INDEXES = 0x1603 - SHININESS = 0x1601 - - MODELVIEW = 0x1700 - PROJECTION = 0x1701 - TEXTURE = 0x1702 - - ALL_BARRIER_BITS = 0xFFFFFFFF - ATOMIC_COUNTER_BARRIER_BIT = 0x00001000 - BUFFER_UPDATE_BARRIER_BIT = 0x00000200 - COMMAND_BARRIER_BIT = 0x00000040 - ELEMENT_ARRAY_BARRIER_BIT = 0x00000002 - FRAMEBUFFER_BARRIER_BIT = 0x00000400 - PIXEL_BUFFER_BARRIER_BIT = 0x00000080 - SHADER_IMAGE_ACCESS_BARRIER_BIT = 0x00000020 - TEXTURE_FETCH_BARRIER_BIT = 0x00000008 - TEXTURE_UPDATE_BARRIER_BIT = 0x00000100 - TRANSFORM_FEEDBACK_BARRIER_BIT = 0x00000800 - UNIFORM_BARRIER_BIT = 0x00000004 - VERTEX_ATTRIB_ARRAY_BARRIER_BIT = 0x00000001 - - LINE = 0x1B01 - POINT = 0x1B00 - - FILL = 0x1B02 - - COLOR = 0x1800 - DEPTH = 0x1801 - STENCIL = 0x1802 - - ALPHA = 0x1906 - BLUE = 0x1905 - COLOR_INDEX = 0x1900 - DEPTH_COMPONENT = 0x1902 - GREEN = 0x1904 - LUMINANCE = 0x1909 - LUMINANCE_ALPHA = 0x190A - RED = 0x1903 - RGB = 0x1907 - RGBA = 0x1908 - STENCIL_INDEX = 0x1901 - - ALPHA12 = 0x803D - ALPHA16 = 0x803E - ALPHA4 = 0x803B - ALPHA8 = 0x803C - INTENSITY = 0x8049 - INTENSITY12 = 0x804C - INTENSITY16 = 0x804D - INTENSITY4 = 0x804A - INTENSITY8 = 0x804B - LUMINANCE12 = 0x8041 - LUMINANCE12_ALPHA12 = 0x8047 - LUMINANCE12_ALPHA4 = 0x8046 - LUMINANCE16 = 0x8042 - LUMINANCE16_ALPHA16 = 0x8048 - LUMINANCE4 = 0x803F - LUMINANCE4_ALPHA4 = 0x8043 - LUMINANCE6_ALPHA2 = 0x8044 - LUMINANCE8 = 0x8040 - LUMINANCE8_ALPHA8 = 0x8045 - R3_G3_B2 = 0x2A10 - RGB10 = 0x8052 - RGB10_A2 = 0x8059 - RGB12 = 0x8053 - RGB16 = 0x8054 - RGB4 = 0x804F - RGB5 = 0x8050 - RGB5_A1 = 0x8057 - RGB8 = 0x8051 - RGBA12 = 0x805A - RGBA16 = 0x805B - RGBA2 = 0x8055 - RGBA4 = 0x8056 - RGBA8 = 0x8058 - - PACK_IMAGE_HEIGHT = 0x806C - PACK_SKIP_IMAGES = 0x806B - UNPACK_IMAGE_HEIGHT = 0x806E - UNPACK_SKIP_IMAGES = 0x806D - - BITMAP = 0x1A00 - UNSIGNED_BYTE_3_3_2 = 0x8032 - UNSIGNED_INT_10_10_10_2 = 0x8036 - UNSIGNED_INT_8_8_8_8 = 0x8035 - UNSIGNED_SHORT_4_4_4_4 = 0x8033 - UNSIGNED_SHORT_5_5_5_1 = 0x8034 - - POINT_DISTANCE_ATTENUATION = 0x8129 - POINT_FADE_THRESHOLD_SIZE = 0x8128 - POINT_SIZE_MAX = 0x8127 - POINT_SIZE_MIN = 0x8126 - - LINES = 0x0001 - LINES_ADJACENCY = 0x000A - LINE_LOOP = 0x0002 - LINE_STRIP = 0x0003 - LINE_STRIP_ADJACENCY = 0x000B - PATCHES = 0x000E - POINTS = 0x0000 - POLYGON = 0x0009 - QUADS = 0x0007 - QUAD_STRIP = 0x0008 - TRIANGLES = 0x0004 - TRIANGLES_ADJACENCY = 0x000C - TRIANGLE_FAN = 0x0006 - TRIANGLE_STRIP = 0x0005 - TRIANGLE_STRIP_ADJACENCY = 0x000D - - FEEDBACK = 0x1C01 - RENDER = 0x1C00 - SELECT = 0x1C02 - - FLAT = 0x1D00 - SMOOTH = 0x1D01 - - DECR = 0x1E03 - INCR = 0x1E02 - KEEP = 0x1E00 - - EXTENSIONS = 0x1F03 - RENDERER = 0x1F01 - VENDOR = 0x1F00 - VERSION = 0x1F02 - - S = 0x2000 - T = 0x2001 - R = 0x2002 - Q = 0x2003 - - DECAL = 0x2101 - - TEXTURE_ENV_COLOR = 0x2201 - TEXTURE_ENV_MODE = 0x2200 - - TEXTURE_ENV = 0x2300 - - EYE_LINEAR = 0x2400 - OBJECT_LINEAR = 0x2401 - SPHERE_MAP = 0x2402 - - EYE_PLANE = 0x2502 - OBJECT_PLANE = 0x2501 - TEXTURE_GEN_MODE = 0x2500 - - NEAREST = 0x2600 - - LINEAR_MIPMAP_LINEAR = 0x2703 - LINEAR_MIPMAP_NEAREST = 0x2701 - NEAREST_MIPMAP_LINEAR = 0x2702 - NEAREST_MIPMAP_NEAREST = 0x2700 - - GENERATE_MIPMAP = 0x8191 - TEXTURE_WRAP_R = 0x8072 - - PROXY_TEXTURE_1D = 0x8063 - PROXY_TEXTURE_2D = 0x8064 - PROXY_TEXTURE_3D = 0x8070 - TEXTURE_3D = 0x806F - TEXTURE_BASE_LEVEL = 0x813C - TEXTURE_MAX_LEVEL = 0x813D - TEXTURE_MAX_LOD = 0x813B - TEXTURE_MIN_LOD = 0x813A - - CLAMP = 0x2900 - CLAMP_TO_BORDER = 0x812D - CLAMP_TO_EDGE = 0x812F - REPEAT = 0x2901 - - VERTEX_SHADER_BIT = 0x00000001 - FRAGMENT_SHADER_BIT = 0x00000002 - GEOMETRY_SHADER_BIT = 0x00000004 - TESS_CONTROL_SHADER_BIT = 0x00000008 - TESS_EVALUATION_SHADER_BIT = 0x00000010 - ALL_SHADER_BITS = 0xFFFFFFFF - - SYNC_FLUSH_COMMANDS_BIT = 0x00000001 - INVALID_INDEX = 0xFFFFFFFF - TIMEOUT_IGNORED = 0xFFFFFFFFFFFFFFFF - CONSTANT_COLOR = 0x8001 - ONE_MINUS_CONSTANT_COLOR = 0x8002 - CONSTANT_ALPHA = 0x8003 - ONE_MINUS_CONSTANT_ALPHA = 0x8004 - FUNC_ADD = 0x8006 - MIN = 0x8007 - MAX = 0x8008 - BLEND_EQUATION_RGB = 0x8009 - FUNC_SUBTRACT = 0x800A - FUNC_REVERSE_SUBTRACT = 0x800B - RESCALE_NORMAL = 0x803A - TEXTURE_DEPTH = 0x8071 - MAX_3D_TEXTURE_SIZE = 0x8073 - MULTISAMPLE = 0x809D - SAMPLE_ALPHA_TO_COVERAGE = 0x809E - SAMPLE_ALPHA_TO_ONE = 0x809F - SAMPLE_COVERAGE = 0x80A0 - SAMPLE_BUFFERS = 0x80A8 - SAMPLES = 0x80A9 - SAMPLE_COVERAGE_VALUE = 0x80AA - SAMPLE_COVERAGE_INVERT = 0x80AB - BLEND_DST_RGB = 0x80C8 - BLEND_SRC_RGB = 0x80C9 - BLEND_DST_ALPHA = 0x80CA - BLEND_SRC_ALPHA = 0x80CB - BGR = 0x80E0 - BGRA = 0x80E1 - MAX_ELEMENTS_VERTICES = 0x80E8 - MAX_ELEMENTS_INDICES = 0x80E9 - DEPTH_COMPONENT16 = 0x81A5 - DEPTH_COMPONENT24 = 0x81A6 - DEPTH_COMPONENT32 = 0x81A7 - FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING = 0x8210 - FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE = 0x8211 - FRAMEBUFFER_ATTACHMENT_RED_SIZE = 0x8212 - FRAMEBUFFER_ATTACHMENT_GREEN_SIZE = 0x8213 - FRAMEBUFFER_ATTACHMENT_BLUE_SIZE = 0x8214 - FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE = 0x8215 - FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE = 0x8216 - FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE = 0x8217 - FRAMEBUFFER_DEFAULT = 0x8218 - FRAMEBUFFER_UNDEFINED = 0x8219 - DEPTH_STENCIL_ATTACHMENT = 0x821A - MAJOR_VERSION = 0x821B - MINOR_VERSION = 0x821C - NUM_EXTENSIONS = 0x821D - CONTEXT_FLAGS = 0x821E - INDEX = 0x8222 - COMPRESSED_RED = 0x8225 - COMPRESSED_RG = 0x8226 - RG = 0x8227 - RG_INTEGER = 0x8228 - R8 = 0x8229 - R16 = 0x822A - RG8 = 0x822B - RG16 = 0x822C - R16F = 0x822D - R32F = 0x822E - RG16F = 0x822F - RG32F = 0x8230 - R8I = 0x8231 - R8UI = 0x8232 - R16I = 0x8233 - R16UI = 0x8234 - R32I = 0x8235 - R32UI = 0x8236 - RG8I = 0x8237 - RG8UI = 0x8238 - RG16I = 0x8239 - RG16UI = 0x823A - RG32I = 0x823B - RG32UI = 0x823C - PROGRAM_SEPARABLE = 0x8258 - ACTIVE_PROGRAM = 0x8259 - PROGRAM_PIPELINE_BINDING = 0x825A - MAX_VIEWPORTS = 0x825B - VIEWPORT_SUBPIXEL_BITS = 0x825C - VIEWPORT_BOUNDS_RANGE = 0x825D - LAYER_PROVOKING_VERTEX = 0x825E - VIEWPORT_INDEX_PROVOKING_VERTEX = 0x825F - UNDEFINED_VERTEX = 0x8260 - UNSIGNED_BYTE_2_3_3_REV = 0x8362 - UNSIGNED_SHORT_5_6_5 = 0x8363 - UNSIGNED_SHORT_5_6_5_REV = 0x8364 - UNSIGNED_SHORT_4_4_4_4_REV = 0x8365 - UNSIGNED_SHORT_1_5_5_5_REV = 0x8366 - UNSIGNED_INT_8_8_8_8_REV = 0x8367 - UNSIGNED_INT_2_10_10_10_REV = 0x8368 - MIRRORED_REPEAT = 0x8370 - FOG_COORDINATE_SOURCE = 0x8450 - FOG_COORD_SRC = 0x8450 - FOG_COORDINATE = 0x8451 - FOG_COORD = 0x8451 - FRAGMENT_DEPTH = 0x8452 - CURRENT_FOG_COORDINATE = 0x8453 - CURRENT_FOG_COORD = 0x8453 - FOG_COORDINATE_ARRAY_TYPE = 0x8454 - FOG_COORD_ARRAY_TYPE = 0x8454 - FOG_COORDINATE_ARRAY_STRIDE = 0x8455 - FOG_COORD_ARRAY_STRIDE = 0x8455 - FOG_COORDINATE_ARRAY_POINTER = 0x8456 - FOG_COORD_ARRAY_POINTER = 0x8456 - FOG_COORDINATE_ARRAY = 0x8457 - FOG_COORD_ARRAY = 0x8457 - COLOR_SUM = 0x8458 - CURRENT_SECONDARY_COLOR = 0x8459 - SECONDARY_COLOR_ARRAY_SIZE = 0x845A - SECONDARY_COLOR_ARRAY_TYPE = 0x845B - SECONDARY_COLOR_ARRAY_STRIDE = 0x845C - SECONDARY_COLOR_ARRAY_POINTER = 0x845D - SECONDARY_COLOR_ARRAY = 0x845E - CURRENT_RASTER_SECONDARY_COLOR = 0x845F - TEXTURE0 = 0x84C0 - TEXTURE1 = 0x84C1 - TEXTURE2 = 0x84C2 - TEXTURE3 = 0x84C3 - TEXTURE4 = 0x84C4 - TEXTURE5 = 0x84C5 - TEXTURE6 = 0x84C6 - TEXTURE7 = 0x84C7 - TEXTURE8 = 0x84C8 - TEXTURE9 = 0x84C9 - TEXTURE10 = 0x84CA - TEXTURE11 = 0x84CB - TEXTURE12 = 0x84CC - TEXTURE13 = 0x84CD - TEXTURE14 = 0x84CE - TEXTURE15 = 0x84CF - TEXTURE16 = 0x84D0 - TEXTURE17 = 0x84D1 - TEXTURE18 = 0x84D2 - TEXTURE19 = 0x84D3 - TEXTURE20 = 0x84D4 - TEXTURE21 = 0x84D5 - TEXTURE22 = 0x84D6 - TEXTURE23 = 0x84D7 - TEXTURE24 = 0x84D8 - TEXTURE25 = 0x84D9 - TEXTURE26 = 0x84DA - TEXTURE27 = 0x84DB - TEXTURE28 = 0x84DC - TEXTURE29 = 0x84DD - TEXTURE30 = 0x84DE - TEXTURE31 = 0x84DF - ACTIVE_TEXTURE = 0x84E0 - CLIENT_ACTIVE_TEXTURE = 0x84E1 - MAX_TEXTURE_UNITS = 0x84E2 - TRANSPOSE_MODELVIEW_MATRIX = 0x84E3 - TRANSPOSE_PROJECTION_MATRIX = 0x84E4 - TRANSPOSE_TEXTURE_MATRIX = 0x84E5 - TRANSPOSE_COLOR_MATRIX = 0x84E6 - SUBTRACT = 0x84E7 - MAX_RENDERBUFFER_SIZE = 0x84E8 - COMPRESSED_ALPHA = 0x84E9 - COMPRESSED_LUMINANCE = 0x84EA - COMPRESSED_LUMINANCE_ALPHA = 0x84EB - COMPRESSED_INTENSITY = 0x84EC - COMPRESSED_RGB = 0x84ED - COMPRESSED_RGBA = 0x84EE - UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER = 0x84F0 - UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER = 0x84F1 - TEXTURE_RECTANGLE = 0x84F5 - TEXTURE_BINDING_RECTANGLE = 0x84F6 - PROXY_TEXTURE_RECTANGLE = 0x84F7 - MAX_RECTANGLE_TEXTURE_SIZE = 0x84F8 - DEPTH_STENCIL = 0x84F9 - UNSIGNED_INT_24_8 = 0x84FA - MAX_TEXTURE_LOD_BIAS = 0x84FD - TEXTURE_FILTER_CONTROL = 0x8500 - TEXTURE_LOD_BIAS = 0x8501 - INCR_WRAP = 0x8507 - DECR_WRAP = 0x8508 - NORMAL_MAP = 0x8511 - REFLECTION_MAP = 0x8512 - TEXTURE_CUBE_MAP = 0x8513 - TEXTURE_BINDING_CUBE_MAP = 0x8514 - TEXTURE_CUBE_MAP_POSITIVE_X = 0x8515 - TEXTURE_CUBE_MAP_NEGATIVE_X = 0x8516 - TEXTURE_CUBE_MAP_POSITIVE_Y = 0x8517 - TEXTURE_CUBE_MAP_NEGATIVE_Y = 0x8518 - TEXTURE_CUBE_MAP_POSITIVE_Z = 0x8519 - TEXTURE_CUBE_MAP_NEGATIVE_Z = 0x851A - PROXY_TEXTURE_CUBE_MAP = 0x851B - MAX_CUBE_MAP_TEXTURE_SIZE = 0x851C - COMBINE = 0x8570 - COMBINE_RGB = 0x8571 - COMBINE_ALPHA = 0x8572 - RGB_SCALE = 0x8573 - ADD_SIGNED = 0x8574 - INTERPOLATE = 0x8575 - CONSTANT = 0x8576 - PRIMARY_COLOR = 0x8577 - PREVIOUS = 0x8578 - SOURCE0_RGB = 0x8580 - SRC0_RGB = 0x8580 - SOURCE1_RGB = 0x8581 - SRC1_RGB = 0x8581 - SOURCE2_RGB = 0x8582 - SRC2_RGB = 0x8582 - SOURCE0_ALPHA = 0x8588 - SRC0_ALPHA = 0x8588 - SOURCE1_ALPHA = 0x8589 - SRC1_ALPHA = 0x8589 - SOURCE2_ALPHA = 0x858A - SRC2_ALPHA = 0x858A - OPERAND0_RGB = 0x8590 - OPERAND1_RGB = 0x8591 - OPERAND2_RGB = 0x8592 - OPERAND0_ALPHA = 0x8598 - OPERAND1_ALPHA = 0x8599 - OPERAND2_ALPHA = 0x859A - VERTEX_ARRAY_BINDING = 0x85B5 - VERTEX_ATTRIB_ARRAY_ENABLED = 0x8622 - VERTEX_ATTRIB_ARRAY_SIZE = 0x8623 - VERTEX_ATTRIB_ARRAY_STRIDE = 0x8624 - VERTEX_ATTRIB_ARRAY_TYPE = 0x8625 - CURRENT_VERTEX_ATTRIB = 0x8626 - VERTEX_PROGRAM_POINT_SIZE = 0x8642 - PROGRAM_POINT_SIZE = 0x8642 - VERTEX_PROGRAM_TWO_SIDE = 0x8643 - VERTEX_ATTRIB_ARRAY_POINTER = 0x8645 - DEPTH_CLAMP = 0x864F - TEXTURE_COMPRESSED_IMAGE_SIZE = 0x86A0 - TEXTURE_COMPRESSED = 0x86A1 - NUM_COMPRESSED_TEXTURE_FORMATS = 0x86A2 - COMPRESSED_TEXTURE_FORMATS = 0x86A3 - DOT3_RGB = 0x86AE - DOT3_RGBA = 0x86AF - PROGRAM_BINARY_LENGTH = 0x8741 - BUFFER_SIZE = 0x8764 - BUFFER_USAGE = 0x8765 - NUM_PROGRAM_BINARY_FORMATS = 0x87FE - PROGRAM_BINARY_FORMATS = 0x87FF - STENCIL_BACK_FUNC = 0x8800 - STENCIL_BACK_FAIL = 0x8801 - STENCIL_BACK_PASS_DEPTH_FAIL = 0x8802 - STENCIL_BACK_PASS_DEPTH_PASS = 0x8803 - RGBA32F = 0x8814 - RGB32F = 0x8815 - RGBA16F = 0x881A - RGB16F = 0x881B - MAX_DRAW_BUFFERS = 0x8824 - DRAW_BUFFER0 = 0x8825 - DRAW_BUFFER1 = 0x8826 - DRAW_BUFFER2 = 0x8827 - DRAW_BUFFER3 = 0x8828 - DRAW_BUFFER4 = 0x8829 - DRAW_BUFFER5 = 0x882A - DRAW_BUFFER6 = 0x882B - DRAW_BUFFER7 = 0x882C - DRAW_BUFFER8 = 0x882D - DRAW_BUFFER9 = 0x882E - DRAW_BUFFER10 = 0x882F - DRAW_BUFFER11 = 0x8830 - DRAW_BUFFER12 = 0x8831 - DRAW_BUFFER13 = 0x8832 - DRAW_BUFFER14 = 0x8833 - DRAW_BUFFER15 = 0x8834 - BLEND_EQUATION_ALPHA = 0x883D - TEXTURE_DEPTH_SIZE = 0x884A - DEPTH_TEXTURE_MODE = 0x884B - TEXTURE_COMPARE_MODE = 0x884C - TEXTURE_COMPARE_FUNC = 0x884D - COMPARE_R_TO_TEXTURE = 0x884E - COMPARE_REF_TO_TEXTURE = 0x884E - TEXTURE_CUBE_MAP_SEAMLESS = 0x884F - POINT_SPRITE = 0x8861 - COORD_REPLACE = 0x8862 - QUERY_COUNTER_BITS = 0x8864 - CURRENT_QUERY = 0x8865 - QUERY_RESULT = 0x8866 - QUERY_RESULT_AVAILABLE = 0x8867 - MAX_VERTEX_ATTRIBS = 0x8869 - VERTEX_ATTRIB_ARRAY_NORMALIZED = 0x886A - MAX_TESS_CONTROL_INPUT_COMPONENTS = 0x886C - MAX_TESS_EVALUATION_INPUT_COMPONENTS = 0x886D - MAX_TEXTURE_COORDS = 0x8871 - MAX_TEXTURE_IMAGE_UNITS = 0x8872 - GEOMETRY_SHADER_INVOCATIONS = 0x887F - ARRAY_BUFFER = 0x8892 - ELEMENT_ARRAY_BUFFER = 0x8893 - ARRAY_BUFFER_BINDING = 0x8894 - ELEMENT_ARRAY_BUFFER_BINDING = 0x8895 - VERTEX_ARRAY_BUFFER_BINDING = 0x8896 - NORMAL_ARRAY_BUFFER_BINDING = 0x8897 - COLOR_ARRAY_BUFFER_BINDING = 0x8898 - INDEX_ARRAY_BUFFER_BINDING = 0x8899 - TEXTURE_COORD_ARRAY_BUFFER_BINDING = 0x889A - EDGE_FLAG_ARRAY_BUFFER_BINDING = 0x889B - SECONDARY_COLOR_ARRAY_BUFFER_BINDING = 0x889C - FOG_COORDINATE_ARRAY_BUFFER_BINDING = 0x889D - FOG_COORD_ARRAY_BUFFER_BINDING = 0x889D - WEIGHT_ARRAY_BUFFER_BINDING = 0x889E - VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = 0x889F - READ_ONLY = 0x88B8 - WRITE_ONLY = 0x88B9 - READ_WRITE = 0x88BA - BUFFER_ACCESS = 0x88BB - BUFFER_MAPPED = 0x88BC - BUFFER_MAP_POINTER = 0x88BD - TIME_ELAPSED = 0x88BF - STREAM_DRAW = 0x88E0 - STREAM_READ = 0x88E1 - STREAM_COPY = 0x88E2 - STATIC_DRAW = 0x88E4 - STATIC_READ = 0x88E5 - STATIC_COPY = 0x88E6 - DYNAMIC_DRAW = 0x88E8 - DYNAMIC_READ = 0x88E9 - DYNAMIC_COPY = 0x88EA - PIXEL_PACK_BUFFER = 0x88EB - PIXEL_UNPACK_BUFFER = 0x88EC - PIXEL_PACK_BUFFER_BINDING = 0x88ED - PIXEL_UNPACK_BUFFER_BINDING = 0x88EF - DEPTH24_STENCIL8 = 0x88F0 - TEXTURE_STENCIL_SIZE = 0x88F1 - SRC1_COLOR = 0x88F9 - ONE_MINUS_SRC1_COLOR = 0x88FA - ONE_MINUS_SRC1_ALPHA = 0x88FB - MAX_DUAL_SOURCE_DRAW_BUFFERS = 0x88FC - VERTEX_ATTRIB_ARRAY_INTEGER = 0x88FD - VERTEX_ATTRIB_ARRAY_DIVISOR = 0x88FE - MAX_ARRAY_TEXTURE_LAYERS = 0x88FF - MIN_PROGRAM_TEXEL_OFFSET = 0x8904 - MAX_PROGRAM_TEXEL_OFFSET = 0x8905 - SAMPLES_PASSED = 0x8914 - GEOMETRY_VERTICES_OUT = 0x8916 - GEOMETRY_INPUT_TYPE = 0x8917 - GEOMETRY_OUTPUT_TYPE = 0x8918 - SAMPLER_BINDING = 0x8919 - CLAMP_VERTEX_COLOR = 0x891A - CLAMP_FRAGMENT_COLOR = 0x891B - CLAMP_READ_COLOR = 0x891C - FIXED_ONLY = 0x891D - UNIFORM_BUFFER = 0x8A11 - UNIFORM_BUFFER_BINDING = 0x8A28 - UNIFORM_BUFFER_START = 0x8A29 - UNIFORM_BUFFER_SIZE = 0x8A2A - MAX_VERTEX_UNIFORM_BLOCKS = 0x8A2B - MAX_GEOMETRY_UNIFORM_BLOCKS = 0x8A2C - MAX_FRAGMENT_UNIFORM_BLOCKS = 0x8A2D - MAX_COMBINED_UNIFORM_BLOCKS = 0x8A2E - MAX_UNIFORM_BUFFER_BINDINGS = 0x8A2F - MAX_UNIFORM_BLOCK_SIZE = 0x8A30 - MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS = 0x8A31 - MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS = 0x8A32 - MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS = 0x8A33 - UNIFORM_BUFFER_OFFSET_ALIGNMENT = 0x8A34 - ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH = 0x8A35 - ACTIVE_UNIFORM_BLOCKS = 0x8A36 - UNIFORM_TYPE = 0x8A37 - UNIFORM_SIZE = 0x8A38 - UNIFORM_NAME_LENGTH = 0x8A39 - UNIFORM_BLOCK_INDEX = 0x8A3A - UNIFORM_OFFSET = 0x8A3B - UNIFORM_ARRAY_STRIDE = 0x8A3C - UNIFORM_MATRIX_STRIDE = 0x8A3D - UNIFORM_IS_ROW_MAJOR = 0x8A3E - UNIFORM_BLOCK_BINDING = 0x8A3F - UNIFORM_BLOCK_DATA_SIZE = 0x8A40 - UNIFORM_BLOCK_NAME_LENGTH = 0x8A41 - UNIFORM_BLOCK_ACTIVE_UNIFORMS = 0x8A42 - UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES = 0x8A43 - UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER = 0x8A44 - UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER = 0x8A45 - UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER = 0x8A46 - FRAGMENT_SHADER = 0x8B30 - VERTEX_SHADER = 0x8B31 - MAX_FRAGMENT_UNIFORM_COMPONENTS = 0x8B49 - MAX_VERTEX_UNIFORM_COMPONENTS = 0x8B4A - MAX_VARYING_FLOATS = 0x8B4B - MAX_VARYING_COMPONENTS = 0x8B4B - MAX_VERTEX_TEXTURE_IMAGE_UNITS = 0x8B4C - MAX_COMBINED_TEXTURE_IMAGE_UNITS = 0x8B4D - SHADER_TYPE = 0x8B4F - FLOAT_VEC2 = 0x8B50 - FLOAT_VEC3 = 0x8B51 - FLOAT_VEC4 = 0x8B52 - INT_VEC2 = 0x8B53 - INT_VEC3 = 0x8B54 - INT_VEC4 = 0x8B55 - BOOL = 0x8B56 - BOOL_VEC2 = 0x8B57 - BOOL_VEC3 = 0x8B58 - BOOL_VEC4 = 0x8B59 - FLOAT_MAT2 = 0x8B5A - FLOAT_MAT3 = 0x8B5B - FLOAT_MAT4 = 0x8B5C - SAMPLER_1D = 0x8B5D - SAMPLER_2D = 0x8B5E - SAMPLER_3D = 0x8B5F - SAMPLER_CUBE = 0x8B60 - SAMPLER_1D_SHADOW = 0x8B61 - SAMPLER_2D_SHADOW = 0x8B62 - SAMPLER_2D_RECT = 0x8B63 - SAMPLER_2D_RECT_SHADOW = 0x8B64 - FLOAT_MAT2x3 = 0x8B65 - FLOAT_MAT2x4 = 0x8B66 - FLOAT_MAT3x2 = 0x8B67 - FLOAT_MAT3x4 = 0x8B68 - FLOAT_MAT4x2 = 0x8B69 - FLOAT_MAT4x3 = 0x8B6A - DELETE_STATUS = 0x8B80 - COMPILE_STATUS = 0x8B81 - LINK_STATUS = 0x8B82 - VALIDATE_STATUS = 0x8B83 - INFO_LOG_LENGTH = 0x8B84 - ATTACHED_SHADERS = 0x8B85 - ACTIVE_UNIFORMS = 0x8B86 - ACTIVE_UNIFORM_MAX_LENGTH = 0x8B87 - SHADER_SOURCE_LENGTH = 0x8B88 - ACTIVE_ATTRIBUTES = 0x8B89 - ACTIVE_ATTRIBUTE_MAX_LENGTH = 0x8B8A - SHADING_LANGUAGE_VERSION = 0x8B8C - CURRENT_PROGRAM = 0x8B8D - IMPLEMENTATION_COLOR_READ_TYPE = 0x8B9A - IMPLEMENTATION_COLOR_READ_FORMAT = 0x8B9B - TEXTURE_RED_TYPE = 0x8C10 - TEXTURE_GREEN_TYPE = 0x8C11 - TEXTURE_BLUE_TYPE = 0x8C12 - TEXTURE_ALPHA_TYPE = 0x8C13 - TEXTURE_LUMINANCE_TYPE = 0x8C14 - TEXTURE_INTENSITY_TYPE = 0x8C15 - TEXTURE_DEPTH_TYPE = 0x8C16 - UNSIGNED_NORMALIZED = 0x8C17 - TEXTURE_1D_ARRAY = 0x8C18 - PROXY_TEXTURE_1D_ARRAY = 0x8C19 - TEXTURE_2D_ARRAY = 0x8C1A - PROXY_TEXTURE_2D_ARRAY = 0x8C1B - TEXTURE_BINDING_1D_ARRAY = 0x8C1C - TEXTURE_BINDING_2D_ARRAY = 0x8C1D - MAX_GEOMETRY_TEXTURE_IMAGE_UNITS = 0x8C29 - TEXTURE_BUFFER = 0x8C2A - MAX_TEXTURE_BUFFER_SIZE = 0x8C2B - TEXTURE_BINDING_BUFFER = 0x8C2C - TEXTURE_BUFFER_DATA_STORE_BINDING = 0x8C2D - ANY_SAMPLES_PASSED = 0x8C2F - SAMPLE_SHADING = 0x8C36 - MIN_SAMPLE_SHADING_VALUE = 0x8C37 - R11F_G11F_B10F = 0x8C3A - UNSIGNED_INT_10F_11F_11F_REV = 0x8C3B - RGB9_E5 = 0x8C3D - UNSIGNED_INT_5_9_9_9_REV = 0x8C3E - TEXTURE_SHARED_SIZE = 0x8C3F - SRGB = 0x8C40 - SRGB8 = 0x8C41 - SRGB_ALPHA = 0x8C42 - SRGB8_ALPHA8 = 0x8C43 - SLUMINANCE_ALPHA = 0x8C44 - SLUMINANCE8_ALPHA8 = 0x8C45 - SLUMINANCE = 0x8C46 - SLUMINANCE8 = 0x8C47 - COMPRESSED_SRGB = 0x8C48 - COMPRESSED_SRGB_ALPHA = 0x8C49 - COMPRESSED_SLUMINANCE = 0x8C4A - COMPRESSED_SLUMINANCE_ALPHA = 0x8C4B - TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH = 0x8C76 - TRANSFORM_FEEDBACK_BUFFER_MODE = 0x8C7F - MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS = 0x8C80 - TRANSFORM_FEEDBACK_VARYINGS = 0x8C83 - TRANSFORM_FEEDBACK_BUFFER_START = 0x8C84 - TRANSFORM_FEEDBACK_BUFFER_SIZE = 0x8C85 - PRIMITIVES_GENERATED = 0x8C87 - TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN = 0x8C88 - RASTERIZER_DISCARD = 0x8C89 - MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS = 0x8C8A - MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS = 0x8C8B - INTERLEAVED_ATTRIBS = 0x8C8C - SEPARATE_ATTRIBS = 0x8C8D - TRANSFORM_FEEDBACK_BUFFER = 0x8C8E - TRANSFORM_FEEDBACK_BUFFER_BINDING = 0x8C8F - POINT_SPRITE_COORD_ORIGIN = 0x8CA0 - LOWER_LEFT = 0x8CA1 - UPPER_LEFT = 0x8CA2 - STENCIL_BACK_REF = 0x8CA3 - STENCIL_BACK_VALUE_MASK = 0x8CA4 - STENCIL_BACK_WRITEMASK = 0x8CA5 - DRAW_FRAMEBUFFER_BINDING = 0x8CA6 - FRAMEBUFFER_BINDING = 0x8CA6 - RENDERBUFFER_BINDING = 0x8CA7 - READ_FRAMEBUFFER = 0x8CA8 - DRAW_FRAMEBUFFER = 0x8CA9 - READ_FRAMEBUFFER_BINDING = 0x8CAA - RENDERBUFFER_SAMPLES = 0x8CAB - DEPTH_COMPONENT32F = 0x8CAC - DEPTH32F_STENCIL8 = 0x8CAD - FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE = 0x8CD0 - FRAMEBUFFER_ATTACHMENT_OBJECT_NAME = 0x8CD1 - FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL = 0x8CD2 - FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE = 0x8CD3 - FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER = 0x8CD4 - FRAMEBUFFER_COMPLETE = 0x8CD5 - FRAMEBUFFER_INCOMPLETE_ATTACHMENT = 0x8CD6 - FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = 0x8CD7 - FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER = 0x8CDB - FRAMEBUFFER_INCOMPLETE_READ_BUFFER = 0x8CDC - FRAMEBUFFER_UNSUPPORTED = 0x8CDD - MAX_COLOR_ATTACHMENTS = 0x8CDF - COLOR_ATTACHMENT0 = 0x8CE0 - COLOR_ATTACHMENT1 = 0x8CE1 - COLOR_ATTACHMENT2 = 0x8CE2 - COLOR_ATTACHMENT3 = 0x8CE3 - COLOR_ATTACHMENT4 = 0x8CE4 - COLOR_ATTACHMENT5 = 0x8CE5 - COLOR_ATTACHMENT6 = 0x8CE6 - COLOR_ATTACHMENT7 = 0x8CE7 - COLOR_ATTACHMENT8 = 0x8CE8 - COLOR_ATTACHMENT9 = 0x8CE9 - COLOR_ATTACHMENT10 = 0x8CEA - COLOR_ATTACHMENT11 = 0x8CEB - COLOR_ATTACHMENT12 = 0x8CEC - COLOR_ATTACHMENT13 = 0x8CED - COLOR_ATTACHMENT14 = 0x8CEE - COLOR_ATTACHMENT15 = 0x8CEF - DEPTH_ATTACHMENT = 0x8D00 - STENCIL_ATTACHMENT = 0x8D20 - FRAMEBUFFER = 0x8D40 - RENDERBUFFER = 0x8D41 - RENDERBUFFER_WIDTH = 0x8D42 - RENDERBUFFER_HEIGHT = 0x8D43 - RENDERBUFFER_INTERNAL_FORMAT = 0x8D44 - STENCIL_INDEX1 = 0x8D46 - STENCIL_INDEX4 = 0x8D47 - STENCIL_INDEX8 = 0x8D48 - STENCIL_INDEX16 = 0x8D49 - RENDERBUFFER_RED_SIZE = 0x8D50 - RENDERBUFFER_GREEN_SIZE = 0x8D51 - RENDERBUFFER_BLUE_SIZE = 0x8D52 - RENDERBUFFER_ALPHA_SIZE = 0x8D53 - RENDERBUFFER_DEPTH_SIZE = 0x8D54 - RENDERBUFFER_STENCIL_SIZE = 0x8D55 - FRAMEBUFFER_INCOMPLETE_MULTISAMPLE = 0x8D56 - MAX_SAMPLES = 0x8D57 - RGB565 = 0x8D62 - RGBA32UI = 0x8D70 - RGB32UI = 0x8D71 - RGBA16UI = 0x8D76 - RGB16UI = 0x8D77 - RGBA8UI = 0x8D7C - RGB8UI = 0x8D7D - RGBA32I = 0x8D82 - RGB32I = 0x8D83 - RGBA16I = 0x8D88 - RGB16I = 0x8D89 - RGBA8I = 0x8D8E - RGB8I = 0x8D8F - RED_INTEGER = 0x8D94 - GREEN_INTEGER = 0x8D95 - BLUE_INTEGER = 0x8D96 - ALPHA_INTEGER = 0x8D97 - RGB_INTEGER = 0x8D98 - RGBA_INTEGER = 0x8D99 - BGR_INTEGER = 0x8D9A - BGRA_INTEGER = 0x8D9B - INT_2_10_10_10_REV = 0x8D9F - FRAMEBUFFER_ATTACHMENT_LAYERED = 0x8DA7 - FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS = 0x8DA8 - FLOAT_32_UNSIGNED_INT_24_8_REV = 0x8DAD - FRAMEBUFFER_SRGB = 0x8DB9 - COMPRESSED_RED_RGTC1 = 0x8DBB - COMPRESSED_SIGNED_RED_RGTC1 = 0x8DBC - COMPRESSED_RG_RGTC2 = 0x8DBD - COMPRESSED_SIGNED_RG_RGTC2 = 0x8DBE - SAMPLER_1D_ARRAY = 0x8DC0 - SAMPLER_2D_ARRAY = 0x8DC1 - SAMPLER_BUFFER = 0x8DC2 - SAMPLER_1D_ARRAY_SHADOW = 0x8DC3 - SAMPLER_2D_ARRAY_SHADOW = 0x8DC4 - SAMPLER_CUBE_SHADOW = 0x8DC5 - UNSIGNED_INT_VEC2 = 0x8DC6 - UNSIGNED_INT_VEC3 = 0x8DC7 - UNSIGNED_INT_VEC4 = 0x8DC8 - INT_SAMPLER_1D = 0x8DC9 - INT_SAMPLER_2D = 0x8DCA - INT_SAMPLER_3D = 0x8DCB - INT_SAMPLER_CUBE = 0x8DCC - INT_SAMPLER_2D_RECT = 0x8DCD - INT_SAMPLER_1D_ARRAY = 0x8DCE - INT_SAMPLER_2D_ARRAY = 0x8DCF - INT_SAMPLER_BUFFER = 0x8DD0 - UNSIGNED_INT_SAMPLER_1D = 0x8DD1 - UNSIGNED_INT_SAMPLER_2D = 0x8DD2 - UNSIGNED_INT_SAMPLER_3D = 0x8DD3 - UNSIGNED_INT_SAMPLER_CUBE = 0x8DD4 - UNSIGNED_INT_SAMPLER_2D_RECT = 0x8DD5 - UNSIGNED_INT_SAMPLER_1D_ARRAY = 0x8DD6 - UNSIGNED_INT_SAMPLER_2D_ARRAY = 0x8DD7 - UNSIGNED_INT_SAMPLER_BUFFER = 0x8DD8 - GEOMETRY_SHADER = 0x8DD9 - MAX_GEOMETRY_UNIFORM_COMPONENTS = 0x8DDF - MAX_GEOMETRY_OUTPUT_VERTICES = 0x8DE0 - MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS = 0x8DE1 - ACTIVE_SUBROUTINES = 0x8DE5 - ACTIVE_SUBROUTINE_UNIFORMS = 0x8DE6 - MAX_SUBROUTINES = 0x8DE7 - MAX_SUBROUTINE_UNIFORM_LOCATIONS = 0x8DE8 - LOW_FLOAT = 0x8DF0 - MEDIUM_FLOAT = 0x8DF1 - HIGH_FLOAT = 0x8DF2 - LOW_INT = 0x8DF3 - MEDIUM_INT = 0x8DF4 - HIGH_INT = 0x8DF5 - SHADER_BINARY_FORMATS = 0x8DF8 - NUM_SHADER_BINARY_FORMATS = 0x8DF9 - SHADER_COMPILER = 0x8DFA - MAX_VERTEX_UNIFORM_VECTORS = 0x8DFB - MAX_VARYING_VECTORS = 0x8DFC - MAX_FRAGMENT_UNIFORM_VECTORS = 0x8DFD - QUERY_WAIT = 0x8E13 - QUERY_NO_WAIT = 0x8E14 - QUERY_BY_REGION_WAIT = 0x8E15 - QUERY_BY_REGION_NO_WAIT = 0x8E16 - MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS = 0x8E1E - MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS = 0x8E1F - TRANSFORM_FEEDBACK = 0x8E22 - TRANSFORM_FEEDBACK_BUFFER_PAUSED = 0x8E23 - TRANSFORM_FEEDBACK_BUFFER_ACTIVE = 0x8E24 - TRANSFORM_FEEDBACK_BINDING = 0x8E25 - TIMESTAMP = 0x8E28 - TEXTURE_SWIZZLE_R = 0x8E42 - TEXTURE_SWIZZLE_G = 0x8E43 - TEXTURE_SWIZZLE_B = 0x8E44 - TEXTURE_SWIZZLE_A = 0x8E45 - TEXTURE_SWIZZLE_RGBA = 0x8E46 - ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS = 0x8E47 - ACTIVE_SUBROUTINE_MAX_LENGTH = 0x8E48 - ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH = 0x8E49 - NUM_COMPATIBLE_SUBROUTINES = 0x8E4A - COMPATIBLE_SUBROUTINES = 0x8E4B - QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION = 0x8E4C - FIRST_VERTEX_CONVENTION = 0x8E4D - LAST_VERTEX_CONVENTION = 0x8E4E - PROVOKING_VERTEX = 0x8E4F - SAMPLE_POSITION = 0x8E50 - SAMPLE_MASK = 0x8E51 - SAMPLE_MASK_VALUE = 0x8E52 - MAX_SAMPLE_MASK_WORDS = 0x8E59 - MAX_GEOMETRY_SHADER_INVOCATIONS = 0x8E5A - MIN_FRAGMENT_INTERPOLATION_OFFSET = 0x8E5B - MAX_FRAGMENT_INTERPOLATION_OFFSET = 0x8E5C - FRAGMENT_INTERPOLATION_OFFSET_BITS = 0x8E5D - MIN_PROGRAM_TEXTURE_GATHER_OFFSET = 0x8E5E - MAX_PROGRAM_TEXTURE_GATHER_OFFSET = 0x8E5F - MAX_TRANSFORM_FEEDBACK_BUFFERS = 0x8E70 - MAX_VERTEX_STREAMS = 0x8E71 - PATCH_VERTICES = 0x8E72 - PATCH_DEFAULT_INNER_LEVEL = 0x8E73 - PATCH_DEFAULT_OUTER_LEVEL = 0x8E74 - TESS_CONTROL_OUTPUT_VERTICES = 0x8E75 - TESS_GEN_MODE = 0x8E76 - TESS_GEN_SPACING = 0x8E77 - TESS_GEN_VERTEX_ORDER = 0x8E78 - TESS_GEN_POINT_MODE = 0x8E79 - ISOLINES = 0x8E7A - FRACTIONAL_ODD = 0x8E7B - FRACTIONAL_EVEN = 0x8E7C - MAX_PATCH_VERTICES = 0x8E7D - MAX_TESS_GEN_LEVEL = 0x8E7E - MAX_TESS_CONTROL_UNIFORM_COMPONENTS = 0x8E7F - MAX_TESS_EVALUATION_UNIFORM_COMPONENTS = 0x8E80 - MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS = 0x8E81 - MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS = 0x8E82 - MAX_TESS_CONTROL_OUTPUT_COMPONENTS = 0x8E83 - MAX_TESS_PATCH_COMPONENTS = 0x8E84 - MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS = 0x8E85 - MAX_TESS_EVALUATION_OUTPUT_COMPONENTS = 0x8E86 - TESS_EVALUATION_SHADER = 0x8E87 - TESS_CONTROL_SHADER = 0x8E88 - MAX_TESS_CONTROL_UNIFORM_BLOCKS = 0x8E89 - MAX_TESS_EVALUATION_UNIFORM_BLOCKS = 0x8E8A - COMPRESSED_RGBA_BPTC_UNORM = 0x8E8C - COMPRESSED_SRGB_ALPHA_BPTC_UNORM = 0x8E8D - COMPRESSED_RGB_BPTC_SIGNED_FLOAT = 0x8E8E - COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT = 0x8E8F - COPY_READ_BUFFER = 0x8F36 - COPY_WRITE_BUFFER = 0x8F37 - MAX_IMAGE_UNITS = 0x8F38 - MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS = 0x8F39 - IMAGE_BINDING_NAME = 0x8F3A - IMAGE_BINDING_LEVEL = 0x8F3B - IMAGE_BINDING_LAYERED = 0x8F3C - IMAGE_BINDING_LAYER = 0x8F3D - IMAGE_BINDING_ACCESS = 0x8F3E - DRAW_INDIRECT_BUFFER = 0x8F3F - DRAW_INDIRECT_BUFFER_BINDING = 0x8F43 - DOUBLE_MAT2 = 0x8F46 - DOUBLE_MAT3 = 0x8F47 - DOUBLE_MAT4 = 0x8F48 - DOUBLE_MAT2x3 = 0x8F49 - DOUBLE_MAT2x4 = 0x8F4A - DOUBLE_MAT3x2 = 0x8F4B - DOUBLE_MAT3x4 = 0x8F4C - DOUBLE_MAT4x2 = 0x8F4D - DOUBLE_MAT4x3 = 0x8F4E - R8_SNORM = 0x8F94 - RG8_SNORM = 0x8F95 - RGB8_SNORM = 0x8F96 - RGBA8_SNORM = 0x8F97 - R16_SNORM = 0x8F98 - RG16_SNORM = 0x8F99 - RGB16_SNORM = 0x8F9A - RGBA16_SNORM = 0x8F9B - SIGNED_NORMALIZED = 0x8F9C - PRIMITIVE_RESTART = 0x8F9D - PRIMITIVE_RESTART_INDEX = 0x8F9E - DOUBLE_VEC2 = 0x8FFC - DOUBLE_VEC3 = 0x8FFD - DOUBLE_VEC4 = 0x8FFE - TEXTURE_CUBE_MAP_ARRAY = 0x9009 - TEXTURE_BINDING_CUBE_MAP_ARRAY = 0x900A - PROXY_TEXTURE_CUBE_MAP_ARRAY = 0x900B - SAMPLER_CUBE_MAP_ARRAY = 0x900C - SAMPLER_CUBE_MAP_ARRAY_SHADOW = 0x900D - INT_SAMPLER_CUBE_MAP_ARRAY = 0x900E - UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY = 0x900F - IMAGE_1D = 0x904C - IMAGE_2D = 0x904D - IMAGE_3D = 0x904E - IMAGE_2D_RECT = 0x904F - IMAGE_CUBE = 0x9050 - IMAGE_BUFFER = 0x9051 - IMAGE_1D_ARRAY = 0x9052 - IMAGE_2D_ARRAY = 0x9053 - IMAGE_CUBE_MAP_ARRAY = 0x9054 - IMAGE_2D_MULTISAMPLE = 0x9055 - IMAGE_2D_MULTISAMPLE_ARRAY = 0x9056 - INT_IMAGE_1D = 0x9057 - INT_IMAGE_2D = 0x9058 - INT_IMAGE_3D = 0x9059 - INT_IMAGE_2D_RECT = 0x905A - INT_IMAGE_CUBE = 0x905B - INT_IMAGE_BUFFER = 0x905C - INT_IMAGE_1D_ARRAY = 0x905D - INT_IMAGE_2D_ARRAY = 0x905E - INT_IMAGE_CUBE_MAP_ARRAY = 0x905F - INT_IMAGE_2D_MULTISAMPLE = 0x9060 - INT_IMAGE_2D_MULTISAMPLE_ARRAY = 0x9061 - UNSIGNED_INT_IMAGE_1D = 0x9062 - UNSIGNED_INT_IMAGE_2D = 0x9063 - UNSIGNED_INT_IMAGE_3D = 0x9064 - UNSIGNED_INT_IMAGE_2D_RECT = 0x9065 - UNSIGNED_INT_IMAGE_CUBE = 0x9066 - UNSIGNED_INT_IMAGE_BUFFER = 0x9067 - UNSIGNED_INT_IMAGE_1D_ARRAY = 0x9068 - UNSIGNED_INT_IMAGE_2D_ARRAY = 0x9069 - UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY = 0x906A - UNSIGNED_INT_IMAGE_2D_MULTISAMPLE = 0x906B - UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY = 0x906C - MAX_IMAGE_SAMPLES = 0x906D - IMAGE_BINDING_FORMAT = 0x906E - RGB10_A2UI = 0x906F - MIN_MAP_BUFFER_ALIGNMENT = 0x90BC - IMAGE_FORMAT_COMPATIBILITY_TYPE = 0x90C7 - IMAGE_FORMAT_COMPATIBILITY_BY_SIZE = 0x90C8 - IMAGE_FORMAT_COMPATIBILITY_BY_CLASS = 0x90C9 - MAX_VERTEX_IMAGE_UNIFORMS = 0x90CA - MAX_TESS_CONTROL_IMAGE_UNIFORMS = 0x90CB - MAX_TESS_EVALUATION_IMAGE_UNIFORMS = 0x90CC - MAX_GEOMETRY_IMAGE_UNIFORMS = 0x90CD - MAX_FRAGMENT_IMAGE_UNIFORMS = 0x90CE - MAX_COMBINED_IMAGE_UNIFORMS = 0x90CF - TEXTURE_2D_MULTISAMPLE = 0x9100 - PROXY_TEXTURE_2D_MULTISAMPLE = 0x9101 - TEXTURE_2D_MULTISAMPLE_ARRAY = 0x9102 - PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY = 0x9103 - TEXTURE_BINDING_2D_MULTISAMPLE = 0x9104 - TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY = 0x9105 - TEXTURE_SAMPLES = 0x9106 - TEXTURE_FIXED_SAMPLE_LOCATIONS = 0x9107 - SAMPLER_2D_MULTISAMPLE = 0x9108 - INT_SAMPLER_2D_MULTISAMPLE = 0x9109 - UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE = 0x910A - SAMPLER_2D_MULTISAMPLE_ARRAY = 0x910B - INT_SAMPLER_2D_MULTISAMPLE_ARRAY = 0x910C - UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY = 0x910D - MAX_COLOR_TEXTURE_SAMPLES = 0x910E - MAX_DEPTH_TEXTURE_SAMPLES = 0x910F - MAX_INTEGER_SAMPLES = 0x9110 - MAX_SERVER_WAIT_TIMEOUT = 0x9111 - OBJECT_TYPE = 0x9112 - SYNC_CONDITION = 0x9113 - SYNC_STATUS = 0x9114 - SYNC_FLAGS = 0x9115 - SYNC_FENCE = 0x9116 - SYNC_GPU_COMMANDS_COMPLETE = 0x9117 - UNSIGNALED = 0x9118 - SIGNALED = 0x9119 - ALREADY_SIGNALED = 0x911A - TIMEOUT_EXPIRED = 0x911B - CONDITION_SATISFIED = 0x911C - WAIT_FAILED = 0x911D - BUFFER_ACCESS_FLAGS = 0x911F - BUFFER_MAP_LENGTH = 0x9120 - BUFFER_MAP_OFFSET = 0x9121 - MAX_VERTEX_OUTPUT_COMPONENTS = 0x9122 - MAX_GEOMETRY_INPUT_COMPONENTS = 0x9123 - MAX_GEOMETRY_OUTPUT_COMPONENTS = 0x9124 - MAX_FRAGMENT_INPUT_COMPONENTS = 0x9125 - CONTEXT_PROFILE_MASK = 0x9126 - UNPACK_COMPRESSED_BLOCK_WIDTH = 0x9127 - UNPACK_COMPRESSED_BLOCK_HEIGHT = 0x9128 - UNPACK_COMPRESSED_BLOCK_DEPTH = 0x9129 - UNPACK_COMPRESSED_BLOCK_SIZE = 0x912A - PACK_COMPRESSED_BLOCK_WIDTH = 0x912B - PACK_COMPRESSED_BLOCK_HEIGHT = 0x912C - PACK_COMPRESSED_BLOCK_DEPTH = 0x912D - PACK_COMPRESSED_BLOCK_SIZE = 0x912E - TEXTURE_IMMUTABLE_FORMAT = 0x912F - ATOMIC_COUNTER_BUFFER = 0x92C0 - ATOMIC_COUNTER_BUFFER_BINDING = 0x92C1 - ATOMIC_COUNTER_BUFFER_START = 0x92C2 - ATOMIC_COUNTER_BUFFER_SIZE = 0x92C3 - ATOMIC_COUNTER_BUFFER_DATA_SIZE = 0x92C4 - ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS = 0x92C5 - ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES = 0x92C6 - ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER = 0x92C7 - ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER = 0x92C8 - ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER = 0x92C9 - ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER = 0x92CA - ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER = 0x92CB - MAX_VERTEX_ATOMIC_COUNTER_BUFFERS = 0x92CC - MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS = 0x92CD - MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS = 0x92CE - MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS = 0x92CF - MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS = 0x92D0 - MAX_COMBINED_ATOMIC_COUNTER_BUFFERS = 0x92D1 - MAX_VERTEX_ATOMIC_COUNTERS = 0x92D2 - MAX_TESS_CONTROL_ATOMIC_COUNTERS = 0x92D3 - MAX_TESS_EVALUATION_ATOMIC_COUNTERS = 0x92D4 - MAX_GEOMETRY_ATOMIC_COUNTERS = 0x92D5 - MAX_FRAGMENT_ATOMIC_COUNTERS = 0x92D6 - MAX_COMBINED_ATOMIC_COUNTERS = 0x92D7 - MAX_ATOMIC_COUNTER_BUFFER_SIZE = 0x92D8 - ACTIVE_ATOMIC_COUNTER_BUFFERS = 0x92D9 - UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX = 0x92DA - UNSIGNED_INT_ATOMIC_COUNTER = 0x92DB - MAX_ATOMIC_COUNTER_BUFFER_BINDINGS = 0x92DC - NUM_SAMPLE_COUNTS = 0x9380 -) - -// https://www.opengl.org/sdk/docs/man4/xhtml/glViewport.xml -func (gl *GL) Viewport(x, y, width, height int) { - C.gl4_2compat_glViewport(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// DepthRange specifies the mapping of depth values from normalized device -// coordinates to window coordinates. -// -// Parameter nearVal specifies the mapping of the near clipping plane to window -// coordinates (defaults to 0), while farVal specifies the mapping of the far -// clipping plane to window coordinates (defaults to 1). -// -// After clipping and division by w, depth coordinates range from -1 to 1, -// corresponding to the near and far clipping planes. DepthRange specifies a -// linear mapping of the normalized depth coordinates in this range to window -// depth coordinates. Regardless of the actual depth buffer implementation, -// window coordinate depth values are treated as though they range from 0 through 1 -// (like color components). Thus, the values accepted by DepthRange are both -// clamped to this range before they are accepted. -// -// The default setting of (0, 1) maps the near plane to 0 and the far plane to 1. -// With this mapping, the depth buffer range is fully utilized. -// -// It is not necessary that nearVal be less than farVal. Reverse mappings such as -// nearVal 1, and farVal 0 are acceptable. -// -// GL.INVALID_OPERATION is generated if DepthRange is executed between the -// execution of Begin and the corresponding execution of End. -func (gl *GL) DepthRange(nearVal, farVal float64) { - C.gl4_2compat_glDepthRange(gl.funcs, C.GLdouble(nearVal), C.GLdouble(farVal)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsEnabled.xml -func (gl *GL) IsEnabled(cap glbase.Enum) bool { - glresult := C.gl4_2compat_glIsEnabled(gl.funcs, C.GLenum(cap)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexLevelParameteriv.xml -func (gl *GL) GetTexLevelParameteriv(target glbase.Enum, level int, pname glbase.Enum, params []int32) { - C.gl4_2compat_glGetTexLevelParameteriv(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexLevelParameterfv.xml -func (gl *GL) GetTexLevelParameterfv(target glbase.Enum, level int, pname glbase.Enum, params []float32) { - C.gl4_2compat_glGetTexLevelParameterfv(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexParameteriv.xml -func (gl *GL) GetTexParameteriv(target, pname glbase.Enum, params []int32) { - C.gl4_2compat_glGetTexParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexParameterfv.xml -func (gl *GL) GetTexParameterfv(target, pname glbase.Enum, params []float32) { - C.gl4_2compat_glGetTexParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexImage.xml -func (gl *GL) GetTexImage(target glbase.Enum, level int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_2compat_glGetTexImage(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetIntegerv.xml -func (gl *GL) GetIntegerv(pname glbase.Enum, params []int32) { - C.gl4_2compat_glGetIntegerv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetFloatv.xml -func (gl *GL) GetFloatv(pname glbase.Enum, params []float32) { - C.gl4_2compat_glGetFloatv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetError.xml -func (gl *GL) GetError() glbase.Enum { - glresult := C.gl4_2compat_glGetError(gl.funcs) - return glbase.Enum(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetDoublev.xml -func (gl *GL) GetDoublev(pname glbase.Enum, params []float64) { - C.gl4_2compat_glGetDoublev(gl.funcs, C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetBooleanv.xml -func (gl *GL) GetBooleanv(pname glbase.Enum, params []bool) { - C.gl4_2compat_glGetBooleanv(gl.funcs, C.GLenum(pname), (*C.GLboolean)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glReadPixels.xml -func (gl *GL) ReadPixels(x, y, width, height int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_2compat_glReadPixels(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glReadBuffer.xml -func (gl *GL) ReadBuffer(mode glbase.Enum) { - C.gl4_2compat_glReadBuffer(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPixelStorei.xml -func (gl *GL) PixelStorei(pname glbase.Enum, param int32) { - C.gl4_2compat_glPixelStorei(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPixelStoref.xml -func (gl *GL) PixelStoref(pname glbase.Enum, param float32) { - C.gl4_2compat_glPixelStoref(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDepthFunc.xml -func (gl *GL) DepthFunc(glfunc glbase.Enum) { - C.gl4_2compat_glDepthFunc(gl.funcs, C.GLenum(glfunc)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glStencilOp.xml -func (gl *GL) StencilOp(fail, zfail, zpass glbase.Enum) { - C.gl4_2compat_glStencilOp(gl.funcs, C.GLenum(fail), C.GLenum(zfail), C.GLenum(zpass)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glStencilFunc.xml -func (gl *GL) StencilFunc(glfunc glbase.Enum, ref int32, mask uint32) { - C.gl4_2compat_glStencilFunc(gl.funcs, C.GLenum(glfunc), C.GLint(ref), C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLogicOp.xml -func (gl *GL) LogicOp(opcode glbase.Enum) { - C.gl4_2compat_glLogicOp(gl.funcs, C.GLenum(opcode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendFunc.xml -func (gl *GL) BlendFunc(sfactor, dfactor glbase.Enum) { - C.gl4_2compat_glBlendFunc(gl.funcs, C.GLenum(sfactor), C.GLenum(dfactor)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFlush.xml -func (gl *GL) Flush() { - C.gl4_2compat_glFlush(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFinish.xml -func (gl *GL) Finish() { - C.gl4_2compat_glFinish(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEnable.xml -func (gl *GL) Enable(cap glbase.Enum) { - C.gl4_2compat_glEnable(gl.funcs, C.GLenum(cap)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDisable.xml -func (gl *GL) Disable(cap glbase.Enum) { - C.gl4_2compat_glDisable(gl.funcs, C.GLenum(cap)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDepthMask.xml -func (gl *GL) DepthMask(flag bool) { - C.gl4_2compat_glDepthMask(gl.funcs, *(*C.GLboolean)(unsafe.Pointer(&flag))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorMask.xml -func (gl *GL) ColorMask(red, green, blue, alpha bool) { - C.gl4_2compat_glColorMask(gl.funcs, *(*C.GLboolean)(unsafe.Pointer(&red)), *(*C.GLboolean)(unsafe.Pointer(&green)), *(*C.GLboolean)(unsafe.Pointer(&blue)), *(*C.GLboolean)(unsafe.Pointer(&alpha))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glStencilMask.xml -func (gl *GL) StencilMask(mask uint32) { - C.gl4_2compat_glStencilMask(gl.funcs, C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearDepth.xml -func (gl *GL) ClearDepth(depth float64) { - C.gl4_2compat_glClearDepth(gl.funcs, C.GLdouble(depth)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearStencil.xml -func (gl *GL) ClearStencil(s int32) { - C.gl4_2compat_glClearStencil(gl.funcs, C.GLint(s)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearColor.xml -func (gl *GL) ClearColor(red, green, blue, alpha float32) { - C.gl4_2compat_glClearColor(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClear.xml -func (gl *GL) Clear(mask glbase.Bitfield) { - C.gl4_2compat_glClear(gl.funcs, C.GLbitfield(mask)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawBuffer.xml -func (gl *GL) DrawBuffer(mode glbase.Enum) { - C.gl4_2compat_glDrawBuffer(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexImage2D.xml -func (gl *GL) TexImage2D(target glbase.Enum, level int, internalFormat int32, width, height, border int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_2compat_glTexImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLint(border), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexImage1D.xml -func (gl *GL) TexImage1D(target glbase.Enum, level int, internalFormat int32, width, border int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_2compat_glTexImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(internalFormat), C.GLsizei(width), C.GLint(border), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexParameteriv.xml -func (gl *GL) TexParameteriv(target, pname glbase.Enum, params []int32) { - C.gl4_2compat_glTexParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexParameteri.xml -func (gl *GL) TexParameteri(target, pname glbase.Enum, param int32) { - C.gl4_2compat_glTexParameteri(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexParameterfv.xml -func (gl *GL) TexParameterfv(target, pname glbase.Enum, params []float32) { - C.gl4_2compat_glTexParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexParameterf.xml -func (gl *GL) TexParameterf(target, pname glbase.Enum, param float32) { - C.gl4_2compat_glTexParameterf(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glScissor.xml -func (gl *GL) Scissor(x, y, width, height int) { - C.gl4_2compat_glScissor(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPolygonMode.xml -func (gl *GL) PolygonMode(face, mode glbase.Enum) { - C.gl4_2compat_glPolygonMode(gl.funcs, C.GLenum(face), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPointSize.xml -func (gl *GL) PointSize(size float32) { - C.gl4_2compat_glPointSize(gl.funcs, C.GLfloat(size)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLineWidth.xml -func (gl *GL) LineWidth(width float32) { - C.gl4_2compat_glLineWidth(gl.funcs, C.GLfloat(width)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glHint.xml -func (gl *GL) Hint(target, mode glbase.Enum) { - C.gl4_2compat_glHint(gl.funcs, C.GLenum(target), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFrontFace.xml -func (gl *GL) FrontFace(mode glbase.Enum) { - C.gl4_2compat_glFrontFace(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCullFace.xml -func (gl *GL) CullFace(mode glbase.Enum) { - C.gl4_2compat_glCullFace(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIndexubv.xml -func (gl *GL) Indexubv(c []uint8) { - C.gl4_2compat_glIndexubv(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIndexub.xml -func (gl *GL) Indexub(c uint8) { - C.gl4_2compat_glIndexub(gl.funcs, C.GLubyte(c)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsTexture.xml -func (gl *GL) IsTexture(texture glbase.Texture) bool { - glresult := C.gl4_2compat_glIsTexture(gl.funcs, C.GLuint(texture)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// GenTextures returns n texture names in textures. There is no guarantee -// that the names form a contiguous set of integers; however, it is -// guaranteed that none of the returned names was in use immediately before -// the call to GenTextures. -// -// The generated textures have no dimensionality; they assume the -// dimensionality of the texture target to which they are first bound (see -// BindTexture). -// -// Texture names returned by a call to GenTextures are not returned by -// subsequent calls, unless they are first deleted with DeleteTextures. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// GenTextures is available in GL version 2.0 or greater. -func (gl *GL) GenTextures(n int) []glbase.Texture { - if n == 0 { - return nil - } - textures := make([]glbase.Texture, n) - C.gl4_2compat_glGenTextures(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0]))) - return textures -} - -// DeleteTextures deletes the textures objects whose names are stored -// in the textures slice. After a texture is deleted, it has no contents or -// dimensionality, and its name is free for reuse (for example by -// GenTextures). If a texture that is currently bound is deleted, the binding -// reverts to 0 (the default texture). -// -// DeleteTextures silently ignores 0's and names that do not correspond to -// existing textures. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// DeleteTextures is available in GL version 2.0 or greater. -func (gl *GL) DeleteTextures(textures []glbase.Texture) { - n := len(textures) - if n == 0 { - return - } - C.gl4_2compat_glDeleteTextures(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindTexture.xml -func (gl *GL) BindTexture(target glbase.Enum, texture glbase.Texture) { - C.gl4_2compat_glBindTexture(gl.funcs, C.GLenum(target), C.GLuint(texture)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexSubImage2D.xml -func (gl *GL) TexSubImage2D(target glbase.Enum, level, xoffset, yoffset, width, height int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_2compat_glTexSubImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexSubImage1D.xml -func (gl *GL) TexSubImage1D(target glbase.Enum, level, xoffset, width int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_2compat_glTexSubImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLsizei(width), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyTexSubImage2D.xml -func (gl *GL) CopyTexSubImage2D(target glbase.Enum, level, xoffset, yoffset, x, y, width, height int) { - C.gl4_2compat_glCopyTexSubImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyTexSubImage1D.xml -func (gl *GL) CopyTexSubImage1D(target glbase.Enum, level, xoffset, x, y, width int) { - C.gl4_2compat_glCopyTexSubImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(x), C.GLint(y), C.GLsizei(width)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyTexImage2D.xml -func (gl *GL) CopyTexImage2D(target glbase.Enum, level int, internalFormat glbase.Enum, x, y, width, height, border int) { - C.gl4_2compat_glCopyTexImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height), C.GLint(border)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyTexImage1D.xml -func (gl *GL) CopyTexImage1D(target glbase.Enum, level int, internalFormat glbase.Enum, x, y, width, border int) { - C.gl4_2compat_glCopyTexImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLint(border)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPolygonOffset.xml -func (gl *GL) PolygonOffset(factor, units float32) { - C.gl4_2compat_glPolygonOffset(gl.funcs, C.GLfloat(factor), C.GLfloat(units)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawElements.xml -func (gl *GL) DrawElements(mode glbase.Enum, count int, gltype glbase.Enum, indices interface{}) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl4_2compat_glDrawElements(gl.funcs, C.GLenum(mode), C.GLsizei(count), C.GLenum(gltype), indices_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawArrays.xml -func (gl *GL) DrawArrays(mode glbase.Enum, first, count int) { - C.gl4_2compat_glDrawArrays(gl.funcs, C.GLenum(mode), C.GLint(first), C.GLsizei(count)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyTexSubImage3D.xml -func (gl *GL) CopyTexSubImage3D(target glbase.Enum, level, xoffset, yoffset int, zoffset int32, x, y, width, height int) { - C.gl4_2compat_glCopyTexSubImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(zoffset), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexSubImage3D.xml -func (gl *GL) TexSubImage3D(target glbase.Enum, level, xoffset, yoffset int, zoffset int32, width, height int, depth int32, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_2compat_glTexSubImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(zoffset), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexImage3D.xml -func (gl *GL) TexImage3D(target glbase.Enum, level int, internalFormat int32, width, height int, depth int32, border int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_2compat_glTexImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLint(border), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawRangeElements.xml -func (gl *GL) DrawRangeElements(mode glbase.Enum, start, end uint32, count int, gltype glbase.Enum, indices interface{}) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl4_2compat_glDrawRangeElements(gl.funcs, C.GLenum(mode), C.GLuint(start), C.GLuint(end), C.GLsizei(count), C.GLenum(gltype), indices_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendEquation.xml -func (gl *GL) BlendEquation(mode glbase.Enum) { - C.gl4_2compat_glBlendEquation(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendColor.xml -func (gl *GL) BlendColor(red, green, blue, alpha float32) { - C.gl4_2compat_glBlendColor(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetCompressedTexImage.xml -func (gl *GL) GetCompressedTexImage(target glbase.Enum, level int, img interface{}) { - var img_ptr unsafe.Pointer - var img_v = reflect.ValueOf(img) - if img != nil && img_v.Kind() != reflect.Slice { - panic("parameter img must be a slice") - } - if img != nil { - img_ptr = unsafe.Pointer(img_v.Index(0).Addr().Pointer()) - } - C.gl4_2compat_glGetCompressedTexImage(gl.funcs, C.GLenum(target), C.GLint(level), img_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCompressedTexSubImage1D.xml -func (gl *GL) CompressedTexSubImage1D(target glbase.Enum, level, xoffset, width int, format glbase.Enum, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_2compat_glCompressedTexSubImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLsizei(width), C.GLenum(format), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCompressedTexSubImage2D.xml -func (gl *GL) CompressedTexSubImage2D(target glbase.Enum, level, xoffset, yoffset, width, height int, format glbase.Enum, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_2compat_glCompressedTexSubImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCompressedTexSubImage3D.xml -func (gl *GL) CompressedTexSubImage3D(target glbase.Enum, level, xoffset, yoffset int, zoffset int32, width, height int, depth int32, format glbase.Enum, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_2compat_glCompressedTexSubImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(zoffset), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLenum(format), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCompressedTexImage1D.xml -func (gl *GL) CompressedTexImage1D(target glbase.Enum, level int, internalFormat glbase.Enum, width, border, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_2compat_glCompressedTexImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLsizei(width), C.GLint(border), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCompressedTexImage2D.xml -func (gl *GL) CompressedTexImage2D(target glbase.Enum, level int, internalFormat glbase.Enum, width, height, border, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_2compat_glCompressedTexImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLint(border), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCompressedTexImage3D.xml -func (gl *GL) CompressedTexImage3D(target glbase.Enum, level int, internalFormat glbase.Enum, width, height int, depth int32, border, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_2compat_glCompressedTexImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLint(border), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSampleCoverage.xml -func (gl *GL) SampleCoverage(value float32, invert bool) { - C.gl4_2compat_glSampleCoverage(gl.funcs, C.GLfloat(value), *(*C.GLboolean)(unsafe.Pointer(&invert))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glActiveTexture.xml -func (gl *GL) ActiveTexture(texture glbase.Enum) { - C.gl4_2compat_glActiveTexture(gl.funcs, C.GLenum(texture)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPointParameteriv.xml -func (gl *GL) PointParameteriv(pname glbase.Enum, params []int32) { - C.gl4_2compat_glPointParameteriv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPointParameteri.xml -func (gl *GL) PointParameteri(pname glbase.Enum, param int32) { - C.gl4_2compat_glPointParameteri(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPointParameterfv.xml -func (gl *GL) PointParameterfv(pname glbase.Enum, params []float32) { - C.gl4_2compat_glPointParameterfv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPointParameterf.xml -func (gl *GL) PointParameterf(pname glbase.Enum, param float32) { - C.gl4_2compat_glPointParameterf(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiDrawArrays.xml -func (gl *GL) MultiDrawArrays(mode glbase.Enum, first, count []int, drawcount int32) { - C.gl4_2compat_glMultiDrawArrays(gl.funcs, C.GLenum(mode), (*C.GLint)(unsafe.Pointer(&first[0])), (*C.GLsizei)(unsafe.Pointer(&count[0])), C.GLsizei(drawcount)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendFuncSeparate.xml -func (gl *GL) BlendFuncSeparate(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha glbase.Enum) { - C.gl4_2compat_glBlendFuncSeparate(gl.funcs, C.GLenum(sfactorRGB), C.GLenum(dfactorRGB), C.GLenum(sfactorAlpha), C.GLenum(dfactorAlpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetBufferParameteriv.xml -func (gl *GL) GetBufferParameteriv(target, pname glbase.Enum, params []int32) { - C.gl4_2compat_glGetBufferParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUnmapBuffer.xml -func (gl *GL) UnmapBuffer(target glbase.Enum) bool { - glresult := C.gl4_2compat_glUnmapBuffer(gl.funcs, C.GLenum(target)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetBufferSubData.xml -func (gl *GL) GetBufferSubData(target glbase.Enum, offset, size int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_2compat_glGetBufferSubData(gl.funcs, C.GLenum(target), C.GLintptr(offset), C.GLsizeiptr(size), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBufferSubData.xml -func (gl *GL) BufferSubData(target glbase.Enum, offset, size int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_2compat_glBufferSubData(gl.funcs, C.GLenum(target), C.GLintptr(offset), C.GLsizeiptr(size), data_ptr) -} - -// BufferData creates a new data store for the buffer object currently -// bound to target. Any pre-existing data store is deleted. The new data -// store is created with the specified size in bytes and usage. If data is -// not nil, it must be a slice that is used to initialize the data store. -// In that case the size parameter is ignored and the store size will match -// the slice data size. -// -// In its initial state, the new data store is not mapped, it has a NULL -// mapped pointer, and its mapped access is GL.READ_WRITE. -// -// The target constant must be one of GL.ARRAY_BUFFER, GL.COPY_READ_BUFFER, -// GL.COPY_WRITE_BUFFER, GL.ELEMENT_ARRAY_BUFFER, GL.PIXEL_PACK_BUFFER, -// GL.PIXEL_UNPACK_BUFFER, GL.TEXTURE_BUFFER, GL.TRANSFORM_FEEDBACK_BUFFER, -// or GL.UNIFORM_BUFFER. -// -// The usage parameter is a hint to the GL implementation as to how a buffer -// object's data store will be accessed. This enables the GL implementation -// to make more intelligent decisions that may significantly impact buffer -// object performance. It does not, however, constrain the actual usage of -// the data store. usage can be broken down into two parts: first, the -// frequency of access (modification and usage), and second, the nature of -// that access. -// -// A usage frequency of STREAM and nature of DRAW is specified via the -// constant GL.STREAM_DRAW, for example. -// -// The usage frequency of access may be one of: -// -// STREAM -// The data store contents will be modified once and used at most a few times. -// -// STATIC -// The data store contents will be modified once and used many times. -// -// DYNAMIC -// The data store contents will be modified repeatedly and used many times. -// -// The usage nature of access may be one of: -// -// DRAW -// The data store contents are modified by the application, and used as -// the source for GL drawing and image specification commands. -// -// READ -// The data store contents are modified by reading data from the GL, -// and used to return that data when queried by the application. -// -// COPY -// The data store contents are modified by reading data from the GL, -// and used as the source for GL drawing and image specification -// commands. -// -// Clients must align data elements consistent with the requirements of the -// client platform, with an additional base-level requirement that an offset -// within a buffer to a datum comprising N bytes be a multiple of N. -// -// Error GL.INVALID_ENUM is generated if target is not one of the accepted -// buffer targets. GL.INVALID_ENUM is generated if usage is not -// GL.STREAM_DRAW, GL.STREAM_READ, GL.STREAM_COPY, GL.STATIC_DRAW, -// GL.STATIC_READ, GL.STATIC_COPY, GL.DYNAMIC_DRAW, GL.DYNAMIC_READ, or -// GL.DYNAMIC_COPY. GL.INVALID_VALUE is generated if size is negative. -// GL.INVALID_OPERATION is generated if the reserved buffer object name 0 is -// bound to target. GL.OUT_OF_MEMORY is generated if the GL is unable to -// create a data store with the specified size. -func (gl *GL) BufferData(target glbase.Enum, size int, data interface{}, usage glbase.Enum) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - if data != nil { - size = int(data_v.Type().Size()) * data_v.Len() - } - C.gl4_2compat_glBufferData(gl.funcs, C.GLenum(target), C.GLsizeiptr(size), data_ptr, C.GLenum(usage)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsBuffer.xml -func (gl *GL) IsBuffer(buffer glbase.Buffer) bool { - glresult := C.gl4_2compat_glIsBuffer(gl.funcs, C.GLuint(buffer)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// GenBuffers returns n buffer object names. There is no guarantee that -// the names form a contiguous set of integers; however, it is guaranteed -// that none of the returned names was in use immediately before the call to -// GenBuffers. -// -// Buffer object names returned by a call to GenBuffers are not returned by -// subsequent calls, unless they are first deleted with DeleteBuffers. -// -// No buffer objects are associated with the returned buffer object names -// until they are first bound by calling BindBuffer. -// -// Error GL.INVALID_VALUE is generated if n is negative. GL.INVALID_OPERATION -// is generated if GenBuffers is executed between the execution of Begin -// and the corresponding execution of End. -// -// GenBuffers is available in GL version 1.5 or greater. -func (gl *GL) GenBuffers(n int) []glbase.Buffer { - if n == 0 { - return nil - } - buffers := make([]glbase.Buffer, n) - C.gl4_2compat_glGenBuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&buffers[0]))) - return buffers -} - -// DeleteBuffers deletes the buffer objects whose names are stored in the -// buffers slice. -// -// After a buffer object is deleted, it has no contents, and its name is free -// for reuse (for example by GenBuffers). If a buffer object that is -// currently bound is deleted, the binding reverts to 0 (the absence of any -// buffer object, which reverts to client memory usage). -// -// DeleteBuffers silently ignores 0's and names that do not correspond to -// existing buffer objects. -// -// Error GL.INVALID_VALUE is generated if n is negative. GL.INVALID_OPERATION -// is generated if DeleteBuffers is executed between the execution of Begin -// and the corresponding execution of End. -// -// DeleteBuffers is available in GL version 1.5 or greater. -func (gl *GL) DeleteBuffers(buffers []glbase.Buffer) { - n := len(buffers) - if n == 0 { - return - } - C.gl4_2compat_glDeleteBuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&buffers[0]))) -} - -// BindBuffer creates or puts in use a named buffer object. -// Calling BindBuffer with target set to GL.ARRAY_BUFFER, -// GL.ELEMENT_ARRAY_BUFFER, GL.PIXEL_PACK_BUFFER or GL.PIXEL_UNPACK_BUFFER -// and buffer set to the name of the new buffer object binds the buffer -// object name to the target. When a buffer object is bound to a target, the -// previous binding for that target is automatically broken. -// -// Buffer object names are unsigned integers. The value zero is reserved, but -// there is no default buffer object for each buffer object target. Instead, -// buffer set to zero effectively unbinds any buffer object previously bound, -// and restores client memory usage for that buffer object target. Buffer -// object names and the corresponding buffer object contents are local to the -// shared display-list space (see XCreateContext) of the current GL rendering -// context; two rendering contexts share buffer object names only if they -// also share display lists. -// -// GenBuffers may be called to generate a set of new buffer object names. -// -// The state of a buffer object immediately after it is first bound is an -// unmapped zero-sized memory buffer with GL.READ_WRITE access and -// GL.STATIC_DRAW usage. -// -// While a non-zero buffer object name is bound, GL operations on the target -// to which it is bound affect the bound buffer object, and queries of the -// target to which it is bound return state from the bound buffer object. -// While buffer object name zero is bound, as in the initial state, attempts -// to modify or query state on the target to which it is bound generates an -// GL.INVALID_OPERATION error. -// -// When vertex array pointer state is changed, for example by a call to -// NormalPointer, the current buffer object binding (GL.ARRAY_BUFFER_BINDING) -// is copied into the corresponding client state for the vertex array type -// being changed, for example GL.NORMAL_ARRAY_BUFFER_BINDING. While a -// non-zero buffer object is bound to the GL.ARRAY_BUFFER target, the vertex -// array pointer parameter that is traditionally interpreted as a pointer to -// client-side memory is instead interpreted as an offset within the buffer -// object measured in basic machine units. -// -// While a non-zero buffer object is bound to the GL.ELEMENT_ARRAY_BUFFER -// target, the indices parameter of DrawElements, DrawRangeElements, or -// MultiDrawElements that is traditionally interpreted as a pointer to -// client-side memory is instead interpreted as an offset within the buffer -// object measured in basic machine units. -// -// While a non-zero buffer object is bound to the GL.PIXEL_PACK_BUFFER -// target, the following commands are affected: GetCompressedTexImage, -// GetConvolutionFilter, GetHistogram, GetMinmax, GetPixelMap, -// GetPolygonStipple, GetSeparableFilter, GetTexImage, and ReadPixels. The -// pointer parameter that is traditionally interpreted as a pointer to -// client-side memory where the pixels are to be packed is instead -// interpreted as an offset within the buffer object measured in basic -// machine units. -// -// While a non-zero buffer object is bound to the GL.PIXEL_UNPACK_BUFFER -// target, the following commands are affected: Bitmap, ColorSubTable, -// ColorTable, CompressedTexImage1D, CompressedTexImage2D, -// CompressedTexImage3D, CompressedTexSubImage1D, CompressedTexSubImage2D, -// CompressedTexSubImage3D, ConvolutionFilter1D, ConvolutionFilter2D, -// DrawPixels, PixelMap, PolygonStipple, SeparableFilter2D, TexImage1D, -// TexImage2D, TexImage3D, TexSubImage1D, TexSubImage2D, and TexSubImage3D. -// The pointer parameter that is traditionally interpreted as a pointer to -// client-side memory from which the pixels are to be unpacked is instead -// interpreted as an offset within the buffer object measured in basic -// machine units. -// -// A buffer object binding created with BindBuffer remains active until a -// different buffer object name is bound to the same target, or until the -// bound buffer object is deleted with DeleteBuffers. -// -// Once created, a named buffer object may be re-bound to any target as often -// as needed. However, the GL implementation may make choices about how to -// optimize the storage of a buffer object based on its initial binding -// target. -// -// Error GL.INVALID_ENUM is generated if target is not one of the allowable -// values. GL.INVALID_OPERATION is generated if BindBuffer is executed -// between the execution of Begin and the corresponding execution of End. -// -// BindBuffer is available in GL version 1.5 or greater. -func (gl *GL) BindBuffer(target glbase.Enum, buffer glbase.Buffer) { - C.gl4_2compat_glBindBuffer(gl.funcs, C.GLenum(target), C.GLuint(buffer)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetQueryObjectuiv.xml -func (gl *GL) GetQueryObjectuiv(id uint32, pname glbase.Enum, params []uint32) { - C.gl4_2compat_glGetQueryObjectuiv(gl.funcs, C.GLuint(id), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetQueryObjectiv.xml -func (gl *GL) GetQueryObjectiv(id uint32, pname glbase.Enum, params []int32) { - C.gl4_2compat_glGetQueryObjectiv(gl.funcs, C.GLuint(id), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetQueryiv.xml -func (gl *GL) GetQueryiv(target, pname glbase.Enum, params []int32) { - C.gl4_2compat_glGetQueryiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEndQuery.xml -func (gl *GL) EndQuery(target glbase.Enum) { - C.gl4_2compat_glEndQuery(gl.funcs, C.GLenum(target)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBeginQuery.xml -func (gl *GL) BeginQuery(target glbase.Enum, id uint32) { - C.gl4_2compat_glBeginQuery(gl.funcs, C.GLenum(target), C.GLuint(id)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsQuery.xml -func (gl *GL) IsQuery(id uint32) bool { - glresult := C.gl4_2compat_glIsQuery(gl.funcs, C.GLuint(id)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDeleteQueries.xml -func (gl *GL) DeleteQueries(n int, ids []uint32) { - C.gl4_2compat_glDeleteQueries(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&ids[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGenQueries.xml -func (gl *GL) GenQueries(n int, ids []uint32) { - C.gl4_2compat_glGenQueries(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&ids[0]))) -} - -// VertexAttribPointer specifies the location and data format of the array -// of generic vertex attributes at index to use when rendering. size -// specifies the number of components per attribute and must be 1, 2, 3, or -// 4. type specifies the data type of each component, and stride specifies -// the byte stride from one attribute to the next, allowing vertices and -// attributes to be packed into a single array or stored in separate arrays. -// normalized indicates whether the values stored in an integer format are -// to be mapped to the range [-1,1] (for signed values) or [0,1] -// (for unsigned values) when they are accessed and converted to floating -// point; otherwise, values will be converted to floats directly without -// normalization. offset is a byte offset into the buffer object's data -// store, which must be bound to the GL.ARRAY_BUFFER target with BindBuffer. -// -// The buffer object binding (GL.ARRAY_BUFFER_BINDING) is saved as -// generic vertex attribute array client-side state -// (GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING) for the provided index. -// -// To enable and disable a generic vertex attribute array, call -// EnableVertexAttribArray and DisableVertexAttribArray with index. If -// enabled, the generic vertex attribute array is used when DrawArrays or -// DrawElements is called. Each generic vertex attribute array is initially -// disabled. -// -// VertexAttribPointer is typically implemented on the client side. -// -// Error GL.INVALID_ENUM is generated if type is not an accepted value. -// GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. GL.INVALID_VALUE is generated if size is not 1, 2, -// 3, or 4. GL.INVALID_VALUE is generated if stride is negative. -func (gl *GL) VertexAttribPointer(index glbase.Attrib, size int, gltype glbase.Enum, normalized bool, stride int, offset uintptr) { - offset_ptr := unsafe.Pointer(offset) - C.gl4_2compat_glVertexAttribPointer(gl.funcs, C.GLuint(index), C.GLint(size), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), C.GLsizei(stride), offset_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glValidateProgram.xml -func (gl *GL) ValidateProgram(program glbase.Program) { - C.gl4_2compat_glValidateProgram(gl.funcs, C.GLuint(program)) -} - -// UniformMatrix4fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix4fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix4fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(4*4) != 0 { - panic("invalid value length for UniformMatrix4fv") - } - count := len(value) / (4 * 4) - C.gl4_2compat_glUniformMatrix4fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix3fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix3fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix3fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(3*3) != 0 { - panic("invalid value length for UniformMatrix3fv") - } - count := len(value) / (3 * 3) - C.gl4_2compat_glUniformMatrix3fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix2fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix2fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix2fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(2*2) != 0 { - panic("invalid value length for UniformMatrix2fv") - } - count := len(value) / (2 * 2) - C.gl4_2compat_glUniformMatrix2fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform4iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform4iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - if len(value)%4 != 0 { - panic("invalid value length for Uniform4iv") - } - count := len(value) / 4 - C.gl4_2compat_glUniform4iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// Uniform3iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform3iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - if len(value)%3 != 0 { - panic("invalid value length for Uniform3iv") - } - count := len(value) / 3 - C.gl4_2compat_glUniform3iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// Uniform2iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform2iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - if len(value)%2 != 0 { - panic("invalid value length for Uniform2iv") - } - count := len(value) / 2 - C.gl4_2compat_glUniform2iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// Uniform1iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform1iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - count := len(value) - C.gl4_2compat_glUniform1iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// Uniform4fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform4fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - if len(value)%4 != 0 { - panic("invalid value length for Uniform4fv") - } - count := len(value) / 4 - C.gl4_2compat_glUniform4fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform3fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform3fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - if len(value)%3 != 0 { - panic("invalid value length for Uniform3fv") - } - count := len(value) / 3 - C.gl4_2compat_glUniform3fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform2fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform2fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - if len(value)%2 != 0 { - panic("invalid value length for Uniform2fv") - } - count := len(value) / 2 - C.gl4_2compat_glUniform2fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform1fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform1fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - count := len(value) - C.gl4_2compat_glUniform1fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform4i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform4i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4i(location glbase.Uniform, v0, v1, v2, v3 int32) { - C.gl4_2compat_glUniform4i(gl.funcs, C.GLint(location), C.GLint(v0), C.GLint(v1), C.GLint(v2), C.GLint(v3)) -} - -// Uniform3i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform3i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3i(location glbase.Uniform, v0, v1, v2 int32) { - C.gl4_2compat_glUniform3i(gl.funcs, C.GLint(location), C.GLint(v0), C.GLint(v1), C.GLint(v2)) -} - -// Uniform2i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform2i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2i(location glbase.Uniform, v0, v1 int32) { - C.gl4_2compat_glUniform2i(gl.funcs, C.GLint(location), C.GLint(v0), C.GLint(v1)) -} - -// Uniform1i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform1i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1i(location glbase.Uniform, v0 int32) { - C.gl4_2compat_glUniform1i(gl.funcs, C.GLint(location), C.GLint(v0)) -} - -// Uniform4f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform4f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4f(location glbase.Uniform, v0, v1, v2, v3 float32) { - C.gl4_2compat_glUniform4f(gl.funcs, C.GLint(location), C.GLfloat(v0), C.GLfloat(v1), C.GLfloat(v2), C.GLfloat(v3)) -} - -// Uniform3f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform3f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3f(location glbase.Uniform, v0, v1, v2 float32) { - C.gl4_2compat_glUniform3f(gl.funcs, C.GLint(location), C.GLfloat(v0), C.GLfloat(v1), C.GLfloat(v2)) -} - -// Uniform2f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform2f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2f(location glbase.Uniform, v0, v1 float32) { - C.gl4_2compat_glUniform2f(gl.funcs, C.GLint(location), C.GLfloat(v0), C.GLfloat(v1)) -} - -// Uniform1f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform1f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1f(location glbase.Uniform, v0 float32) { - C.gl4_2compat_glUniform1f(gl.funcs, C.GLint(location), C.GLfloat(v0)) -} - -// UseProgram installs the program object specified by program as part of -// current rendering state. One or more executables are created in a program -// object by successfully attaching shader objects to it with AttachShader, -// successfully compiling the shader objects with CompileShader, and -// successfully linking the program object with LinkProgram. -// -// A program object will contain an executable that will run on the vertex -// processor if it contains one or more shader objects of type -// GL.VERTEX_SHADER that have been successfully compiled and linked. -// Similarly, a program object will contain an executable that will run on -// the fragment processor if it contains one or more shader objects of type -// GL.FRAGMENT_SHADER that have been successfully compiled and linked. -// -// Successfully installing an executable on a programmable processor will -// cause the corresponding fixed functionality of OpenGL to be disabled. -// Specifically, if an executable is installed on the vertex processor, the -// OpenGL fixed functionality will be disabled as follows. -// -// - The modelview matrix is not applied to vertex coordinates. -// -// - The projection matrix is not applied to vertex coordinates. -// -// - The texture matrices are not applied to texture coordinates. -// -// - Normals are not transformed to eye coordinates. -// -// - Normals are not rescaled or normalized. -// -// - Normalization of GL.AUTO_NORMAL evaluated normals is not performed. -// -// - Texture coordinates are not generated automatically. -// -// - Per-vertex lighting is not performed. -// -// - Color material computations are not performed. -// -// - Color index lighting is not performed. -// -// - This list also applies when setting the current raster position. -// -// The executable that is installed on the vertex processor is expected to -// implement any or all of the desired functionality from the preceding list. -// Similarly, if an executable is installed on the fragment processor, the -// OpenGL fixed functionality will be disabled as follows. -// -// - Texture environment and texture functions are not applied. -// -// - Texture application is not applied. -// -// - Color sum is not applied. -// -// - Fog is not applied. -// -// Again, the fragment shader that is installed is expected to implement any -// or all of the desired functionality from the preceding list. -// -// While a program object is in use, applications are free to modify attached -// shader objects, compile attached shader objects, attach additional shader -// objects, and detach or delete shader objects. None of these operations -// will affect the executables that are part of the current state. However, -// relinking the program object that is currently in use will install the -// program object as part of the current rendering state if the link -// operation was successful (see LinkProgram). If the program object -// currently in use is relinked unsuccessfully, its link status will be set -// to GL.FALSE, but the executables and associated state will remain part of -// the current state until a subsequent call to UseProgram removes it from -// use. After it is removed from use, it cannot be made part of current state -// until it has been successfully relinked. -// -// If program contains shader objects of type GL.VERTEX_SHADER but it does -// not contain shader objects of type GL.FRAGMENT_SHADER, an executable will -// be installed on the vertex processor, but fixed functionality will be used -// for fragment processing. Similarly, if program contains shader objects of -// type GL.FRAGMENT_SHADER but it does not contain shader objects of type -// GL.VERTEX_SHADER, an executable will be installed on the fragment -// processor, but fixed functionality will be used for vertex processing. If -// program is 0, the programmable processors will be disabled, and fixed -// functionality will be used for both vertex and fragment processing. -// -// While a program object is in use, the state that controls the disabled -// fixed functionality may also be updated using the normal OpenGL calls. -// -// Like display lists and texture objects, the name space for program objects -// may be shared across a set of contexts, as long as the server sides of the -// contexts share the same address space. If the name space is shared across -// contexts, any attached objects and the data associated with those attached -// objects are shared as well. -// -// Applications are responsible for providing the synchronization across API -// calls when objects are accessed from different execution threads. -// -// Error GL.INVALID_VALUE is generated if program is neither 0 nor a value -// generated by OpenGL. GL.INVALID_OPERATION is generated if program is not -// a program object. GL.INVALID_OPERATION is generated if program could not -// be made part of current state. GL.INVALID_OPERATION is generated if -// UseProgram is executed between the execution of Begin and the -// corresponding execution of End. -// -// UseProgram is available in GL version 2.0 or greater. -func (gl *GL) UseProgram(program glbase.Program) { - C.gl4_2compat_glUseProgram(gl.funcs, C.GLuint(program)) -} - -// ShaderSource sets the source code in shader to the provided source code. Any source -// code previously stored in the shader object is completely replaced. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader is not a shader -// object. GL.INVALID_VALUE is generated if count is less than 0. -// GL.INVALID_OPERATION is generated if ShaderSource is executed between the -// execution of Begin and the corresponding execution of End. -// -// ShaderSource is available in GL version 2.0 or greater. -func (gl *GL) ShaderSource(shader glbase.Shader, source ...string) { - count := len(source) - length := make([]int32, count) - source_c := make([]unsafe.Pointer, count) - for i, src := range source { - length[i] = int32(len(src)) - if len(src) > 0 { - source_c[i] = *(*unsafe.Pointer)(unsafe.Pointer(&src)) - } else { - source_c[i] = unsafe.Pointer(uintptr(0)) - } - } - C.gl4_2compat_glShaderSource(gl.funcs, C.GLuint(shader), C.GLsizei(count), (**C.GLchar)(unsafe.Pointer(&source_c[0])), (*C.GLint)(unsafe.Pointer(&length[0]))) -} - -// LinkProgram links the program object specified by program. If any shader -// objects of type GL.VERTEX_SHADER are attached to program, they will be -// used to create an executable that will run on the programmable vertex -// processor. If any shader objects of type GL.FRAGMENT_SHADER are attached -// to program, they will be used to create an executable that will run on the -// programmable fragment processor. -// -// The status of the link operation will be stored as part of the program -// object's state. This value will be set to GL.TRUE if the program object -// was linked without errors and is ready for use, and GL.FALSE otherwise. It -// can be queried by calling GetProgramiv with arguments program and -// GL.LINK_STATUS. -// -// As a result of a successful link operation, all active user-defined -// uniform variables belonging to program will be initialized to 0, and each -// of the program object's active uniform variables will be assigned a -// location that can be queried by calling GetUniformLocation. Also, any -// active user-defined attribute variables that have not been bound to a -// generic vertex attribute index will be bound to one at this time. -// -// Linking of a program object can fail for a number of reasons as specified -// in the OpenGL Shading Language Specification. The following lists some of -// the conditions that will cause a link error. -// -// - The number of active attribute variables supported by the -// implementation has been exceeded. -// -// - The storage limit for uniform variables has been exceeded. -// -// - The number of active uniform variables supported by the implementation -// has been exceeded. -// -// - The main function is missing for the vertex shader or the fragment -// shader. -// -// - A varying variable actually used in the fragment shader is not -// declared in the same way (or is not declared at all) in the vertex -// shader. -// -// - A reference to a function or variable name is unresolved. -// -// - A shared global is declared with two different types or two different -// initial values. -// -// - One or more of the attached shader objects has not been successfully -// compiled. -// -// - Binding a generic attribute matrix caused some rows of the matrix to -// fall outside the allowed maximum of GL.MAX_VERTEX_ATTRIBS. -// -// - Not enough contiguous vertex attribute slots could be found to bind -// attribute matrices. -// -// When a program object has been successfully linked, the program object can -// be made part of current state by calling UseProgram. Whether or not the -// link operation was successful, the program object's information log will -// be overwritten. The information log can be retrieved by calling -// GetProgramInfoLog. -// -// LinkProgram will also install the generated executables as part of the -// current rendering state if the link operation was successful and the -// specified program object is already currently in use as a result of a -// previous call to UseProgram. If the program object currently in use is -// relinked unsuccessfully, its link status will be set to GL.FALSE , but the -// executables and associated state will remain part of the current state -// until a subsequent call to UseProgram removes it from use. After it is -// removed from use, it cannot be made part of current state until it has -// been successfully relinked. -// -// If program contains shader objects of type GL.VERTEX_SHADER but does not -// contain shader objects of type GL.FRAGMENT_SHADER, the vertex shader will -// be linked against the implicit interface for fixed functionality fragment -// processing. Similarly, if program contains shader objects of type -// GL.FRAGMENT_SHADER but it does not contain shader objects of type -// GL.VERTEX_SHADER, the fragment shader will be linked against the implicit -// interface for fixed functionality vertex processing. -// -// The program object's information log is updated and the program is -// generated at the time of the link operation. After the link operation, -// applications are free to modify attached shader objects, compile attached -// shader objects, detach shader objects, delete shader objects, and attach -// additional shader objects. None of these operations affects the -// information log or the program that is part of the program object. -// -// If the link operation is unsuccessful, any information about a previous -// link operation on program is lost (a failed link does not restore the -// old state of program). Certain information can still be retrieved -// from program even after an unsuccessful link operation. See for instance -// GetActiveAttrib and GetActiveUniform. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program -// object. GL.INVALID_OPERATION is generated if LinkProgram is executed -// between the execution of Begin and the corresponding execution of End. -// -// LinkProgram is available in GL version 2.0 or greater. -func (gl *GL) LinkProgram(program glbase.Program) { - C.gl4_2compat_glLinkProgram(gl.funcs, C.GLuint(program)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsShader.xml -func (gl *GL) IsShader(shader glbase.Shader) bool { - glresult := C.gl4_2compat_glIsShader(gl.funcs, C.GLuint(shader)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsProgram.xml -func (gl *GL) IsProgram(program glbase.Program) bool { - glresult := C.gl4_2compat_glIsProgram(gl.funcs, C.GLuint(program)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// GetVertexAttribiv returns in params the value of a generic vertex attribute -// parameter. The generic vertex attribute to be queried is specified by -// index, and the parameter to be queried is specified by pname. -// -// The accepted parameter names are as follows: -// -// GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING -// params returns a single value, the name of the buffer object -// currently bound to the binding point corresponding to generic vertex -// attribute array index. If no buffer object is bound, 0 is returned. -// The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_ENABLED -// params returns a single value that is non-zero (true) if the vertex -// attribute array for index is enabled and 0 (false) if it is -// disabled. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_SIZE -// params returns a single value, the size of the vertex attribute -// array for index. The size is the number of values for each element -// of the vertex attribute array, and it will be 1, 2, 3, or 4. The -// initial value is 4. -// -// GL.VERTEX_ATTRIB_ARRAY_STRIDE -// params returns a single value, the array stride for (number of bytes -// between successive elements in) the vertex attribute array for -// index. A value of 0 indicates that the array elements are stored -// sequentially in memory. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_TYPE -// params returns a single value, a symbolic constant indicating the -// array type for the vertex attribute array for index. Possible values -// are GL.BYTE, GL.UNSIGNED_BYTE, GL.SHORT, GL.UNSIGNED_SHORT, GL.INT, -// GL.UNSIGNED_INT, GL.FLOAT, and GL.DOUBLE. The initial value is -// GL.FLOAT. -// -// GL.VERTEX_ATTRIB_ARRAY_NORMALIZED -// params returns a single value that is non-zero (true) if fixed-point -// data types for the vertex attribute array indicated by index are -// normalized when they are converted to floating point, and 0 (false) -// otherwise. The initial value is 0. -// -// GL.CURRENT_VERTEX_ATTRIB -// params returns four values that represent the current value for the -// generic vertex attribute specified by index. Generic vertex -// attribute 0 is unique in that it has no current state, so an error -// will be generated if index is 0. The initial value for all other -// generic vertex attributes is (0,0,0,1). -// -// All of the parameters except GL.CURRENT_VERTEX_ATTRIB represent -// client-side state. -// -// Error GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. GL.INVALID_ENUM is generated if pname is not an -// accepted value. GL.INVALID_OPERATION is generated if index is 0 and pname -// is GL.CURRENT_VERTEX_ATTRIB. -// -// GetVertexAttribiv is available in GL version 2.0 or greater. -func (gl *GL) GetVertexAttribiv(index glbase.Attrib, pname glbase.Enum, params []int32) { - var params_c [4]int32 - C.gl4_2compat_glGetVertexAttribiv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetVertexAttribfv returns in params the value of a generic vertex attribute -// parameter. The generic vertex attribute to be queried is specified by -// index, and the parameter to be queried is specified by pname. -// -// The accepted parameter names are as follows: -// -// GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING -// params returns a single value, the name of the buffer object -// currently bound to the binding point corresponding to generic vertex -// attribute array index. If no buffer object is bound, 0 is returned. -// The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_ENABLED -// params returns a single value that is non-zero (true) if the vertex -// attribute array for index is enabled and 0 (false) if it is -// disabled. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_SIZE -// params returns a single value, the size of the vertex attribute -// array for index. The size is the number of values for each element -// of the vertex attribute array, and it will be 1, 2, 3, or 4. The -// initial value is 4. -// -// GL.VERTEX_ATTRIB_ARRAY_STRIDE -// params returns a single value, the array stride for (number of bytes -// between successive elements in) the vertex attribute array for -// index. A value of 0 indicates that the array elements are stored -// sequentially in memory. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_TYPE -// params returns a single value, a symbolic constant indicating the -// array type for the vertex attribute array for index. Possible values -// are GL.BYTE, GL.UNSIGNED_BYTE, GL.SHORT, GL.UNSIGNED_SHORT, GL.INT, -// GL.UNSIGNED_INT, GL.FLOAT, and GL.DOUBLE. The initial value is -// GL.FLOAT. -// -// GL.VERTEX_ATTRIB_ARRAY_NORMALIZED -// params returns a single value that is non-zero (true) if fixed-point -// data types for the vertex attribute array indicated by index are -// normalized when they are converted to floating point, and 0 (false) -// otherwise. The initial value is 0. -// -// GL.CURRENT_VERTEX_ATTRIB -// params returns four values that represent the current value for the -// generic vertex attribute specified by index. Generic vertex -// attribute 0 is unique in that it has no current state, so an error -// will be generated if index is 0. The initial value for all other -// generic vertex attributes is (0,0,0,1). -// -// All of the parameters except GL.CURRENT_VERTEX_ATTRIB represent -// client-side state. -// -// Error GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. GL.INVALID_ENUM is generated if pname is not an -// accepted value. GL.INVALID_OPERATION is generated if index is 0 and pname -// is GL.CURRENT_VERTEX_ATTRIB. -// -// GetVertexAttribfv is available in GL version 2.0 or greater. -func (gl *GL) GetVertexAttribfv(index glbase.Attrib, pname glbase.Enum, params []float32) { - var params_c [4]float32 - C.gl4_2compat_glGetVertexAttribfv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetVertexAttribdv returns in params the value of a generic vertex attribute -// parameter. The generic vertex attribute to be queried is specified by -// index, and the parameter to be queried is specified by pname. -// -// The accepted parameter names are as follows: -// -// GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING -// params returns a single value, the name of the buffer object -// currently bound to the binding point corresponding to generic vertex -// attribute array index. If no buffer object is bound, 0 is returned. -// The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_ENABLED -// params returns a single value that is non-zero (true) if the vertex -// attribute array for index is enabled and 0 (false) if it is -// disabled. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_SIZE -// params returns a single value, the size of the vertex attribute -// array for index. The size is the number of values for each element -// of the vertex attribute array, and it will be 1, 2, 3, or 4. The -// initial value is 4. -// -// GL.VERTEX_ATTRIB_ARRAY_STRIDE -// params returns a single value, the array stride for (number of bytes -// between successive elements in) the vertex attribute array for -// index. A value of 0 indicates that the array elements are stored -// sequentially in memory. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_TYPE -// params returns a single value, a symbolic constant indicating the -// array type for the vertex attribute array for index. Possible values -// are GL.BYTE, GL.UNSIGNED_BYTE, GL.SHORT, GL.UNSIGNED_SHORT, GL.INT, -// GL.UNSIGNED_INT, GL.FLOAT, and GL.DOUBLE. The initial value is -// GL.FLOAT. -// -// GL.VERTEX_ATTRIB_ARRAY_NORMALIZED -// params returns a single value that is non-zero (true) if fixed-point -// data types for the vertex attribute array indicated by index are -// normalized when they are converted to floating point, and 0 (false) -// otherwise. The initial value is 0. -// -// GL.CURRENT_VERTEX_ATTRIB -// params returns four values that represent the current value for the -// generic vertex attribute specified by index. Generic vertex -// attribute 0 is unique in that it has no current state, so an error -// will be generated if index is 0. The initial value for all other -// generic vertex attributes is (0,0,0,1). -// -// All of the parameters except GL.CURRENT_VERTEX_ATTRIB represent -// client-side state. -// -// Error GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. GL.INVALID_ENUM is generated if pname is not an -// accepted value. GL.INVALID_OPERATION is generated if index is 0 and pname -// is GL.CURRENT_VERTEX_ATTRIB. -// -// GetVertexAttribdv is available in GL version 2.0 or greater. -func (gl *GL) GetVertexAttribdv(index glbase.Attrib, pname glbase.Enum, params []float64) { - var params_c [4]float64 - C.gl4_2compat_glGetVertexAttribdv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetUniformiv returns in params the value of the specified uniform -// variable. The type of the uniform variable specified by location -// determines the number of values returned. If the uniform variable is -// defined in the shader as a boolean, int, or float, a single value will be -// returned. If it is defined as a vec2, ivec2, or bvec2, two values will be -// returned. If it is defined as a vec3, ivec3, or bvec3, three values will -// be returned, and so on. To query values stored in uniform variables -// declared as arrays, call GetUniformiv for each element of the array. To -// query values stored in uniform variables declared as structures, call -// GetUniformiv for each field in the structure. The values for uniform -// variables declared as a matrix will be returned in column major order. -// -// The locations assigned to uniform variables are not known until the -// program object is linked. After linking has occurred, the command -// GetUniformLocation can be used to obtain the location of a uniform -// variable. This location value can then be passed to GetUniformiv in order -// to query the current value of the uniform variable. After a program object -// has been linked successfully, the index values for uniform variables -// remain fixed until the next link command occurs. The uniform variable -// values can only be queried after a link if the link was successful. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program -// object. GL.INVALID_OPERATION is generated if program has not been -// successfully linked. GL.INVALID_OPERATION is generated if location does -// not correspond to a valid uniform variable location for the specified -// program object. GL.INVALID_OPERATION is generated if GetUniformiv is -// executed between the execution of Begin and the corresponding execution of -// End. -// -// GetUniformiv is available in GL version 2.0 or greater. -func (gl *GL) GetUniformiv(program glbase.Program, location glbase.Uniform, params []int32) { - var params_c [4]int32 - C.gl4_2compat_glGetUniformiv(gl.funcs, C.GLuint(program), C.GLint(location), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetUniformfv returns in params the value of the specified uniform -// variable. The type of the uniform variable specified by location -// determines the number of values returned. If the uniform variable is -// defined in the shader as a boolean, int, or float, a single value will be -// returned. If it is defined as a vec2, ivec2, or bvec2, two values will be -// returned. If it is defined as a vec3, ivec3, or bvec3, three values will -// be returned, and so on. To query values stored in uniform variables -// declared as arrays, call GetUniformfv for each element of the array. To -// query values stored in uniform variables declared as structures, call -// GetUniformfv for each field in the structure. The values for uniform -// variables declared as a matrix will be returned in column major order. -// -// The locations assigned to uniform variables are not known until the -// program object is linked. After linking has occurred, the command -// GetUniformLocation can be used to obtain the location of a uniform -// variable. This location value can then be passed to GetUniformfv in order -// to query the current value of the uniform variable. After a program object -// has been linked successfully, the index values for uniform variables -// remain fixed until the next link command occurs. The uniform variable -// values can only be queried after a link if the link was successful. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program -// object. GL.INVALID_OPERATION is generated if program has not been -// successfully linked. GL.INVALID_OPERATION is generated if location does -// not correspond to a valid uniform variable location for the specified -// program object. GL.INVALID_OPERATION is generated if GetUniformfv is -// executed between the execution of Begin and the corresponding execution of -// End. -// -// GetUniformfv is available in GL version 2.0 or greater. -func (gl *GL) GetUniformfv(program glbase.Program, location glbase.Uniform, params []float32) { - var params_c [4]float32 - C.gl4_2compat_glGetUniformfv(gl.funcs, C.GLuint(program), C.GLint(location), (*C.GLfloat)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetUniformLocation returns an integer that represents the location of a -// specific uniform variable within a program object. name must be an active -// uniform variable name in program that is not a structure, an array of -// structures, or a subcomponent of a vector or a matrix. This function -// returns -1 if name does not correspond to an active uniform variable in -// program or if name starts with the reserved prefix "gl_". -// -// Uniform variables that are structures or arrays of structures may be -// queried by calling GetUniformLocation for each field within the -// structure. The array element operator "[]" and the structure field -// operator "." may be used in name in order to select elements within an -// array or fields within a structure. The result of using these operators is -// not allowed to be another structure, an array of structures, or a -// subcomponent of a vector or a matrix. Except if the last part of name -// indicates a uniform variable array, the location of the first element of -// an array can be retrieved by using the name of the array, or by using the -// name appended by "[0]". -// -// The actual locations assigned to uniform variables are not known until the -// program object is linked successfully. After linking has occurred, the -// command GetUniformLocation can be used to obtain the location of a -// uniform variable. This location value can then be passed to Uniform to -// set the value of the uniform variable or to GetUniform in order to query -// the current value of the uniform variable. After a program object has been -// linked successfully, the index values for uniform variables remain fixed -// until the next link command occurs. Uniform variable locations and values -// can only be queried after a link if the link was successful. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program object. -// GL.INVALID_OPERATION is generated if program has not been successfully -// linked. GL.INVALID_OPERATION is generated if GetUniformLocation is executed -// between the execution of Begin and the corresponding execution of End. -// -// GetUniformLocation is available in GL version 2.0 or greater. -func (gl *GL) GetUniformLocation(program glbase.Program, name string) glbase.Uniform { - name_cstr := C.CString(name) - glresult := C.gl4_2compat_glGetUniformLocation(gl.funcs, C.GLuint(program), (*C.GLchar)(name_cstr)) - C.free(unsafe.Pointer(name_cstr)) - return glbase.Uniform(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetShaderSource.xml -func (gl *GL) GetShaderSource(shader glbase.Shader, bufSize int32, length []int32, source []byte) { - C.gl4_2compat_glGetShaderSource(gl.funcs, C.GLuint(shader), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLchar)(unsafe.Pointer(&source[0]))) -} - -// GetShaderInfoLog returns the information log for the specified shader -// object. The information log for a shader object is modified when the -// shader is compiled. -// -// The information log for a shader object is a string that may contain -// diagnostic messages, warning messages, and other information about the -// last compile operation. When a shader object is created, its information -// log will be a string of length 0, and the size of the current log can be -// obtained by calling GetShaderiv with the value GL.INFO_LOG_LENGTH. -// -// The information log for a shader object is the OpenGL implementer's -// primary mechanism for conveying information about the compilation process. -// Therefore, the information log can be helpful to application developers -// during the development process, even when compilation is successful. -// Application developers should not expect different OpenGL implementations -// to produce identical information logs. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader is not a shader -// object. GL.INVALID_VALUE is generated if maxLength is less than 0. -// GL.INVALID_OPERATION is generated if GetShaderInfoLog is executed -// between the execution of Begin and the corresponding execution of End. -// -// GetShaderInfoLog is available in GL version 2.0 or greater. -func (gl *GL) GetShaderInfoLog(shader glbase.Shader) []byte { - var params [1]int32 - var length int32 - gl.GetShaderiv(shader, INFO_LOG_LENGTH, params[:]) - bufSize := params[0] - infoLog := make([]byte, int(bufSize)) - C.gl4_2compat_glGetShaderInfoLog(gl.funcs, C.GLuint(shader), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length)), (*C.GLchar)(unsafe.Pointer(&infoLog[0]))) - return infoLog -} - -// GetShaderiv GetShader returns in params the value of a parameter for a specific -// shader object. The following parameters are defined: -// -// GL.SHADER_TYPE -// params returns GL.VERTEX_SHADER if shader is a vertex shader object, -// and GL.FRAGMENT_SHADER if shader is a fragment shader object. -// -// GL.DELETE_STATUS -// params returns GL.TRUE if shader is currently flagged for deletion, -// and GL.FALSE otherwise. -// -// GL.COMPILE_STATUS -// params returns GL.TRUE if the last compile operation on shader was -// successful, and GL.FALSE otherwise. -// -// GL.INFO_LOG_LENGTH -// params returns the number of characters in the information log for -// shader including the null termination character (the size of the -// character buffer required to store the information log). If shader has -// no information log, a value of 0 is returned. -// -// GL.SHADER_SOURCE_LENGTH -// params returns the length of the concatenation of the source strings -// that make up the shader source for the shader, including the null -// termination character. (the size of the character buffer -// required to store the shader source). If no source code exists, 0 is -// returned. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader does not refer to a -// shader object. GL.INVALID_ENUM is generated if pname is not an accepted -// value. GL.INVALID_OPERATION is generated if GetShader is executed -// between the execution of Begin and the corresponding execution of End. -// -// GetShaderiv is available in GL version 2.0 or greater. -func (gl *GL) GetShaderiv(shader glbase.Shader, pname glbase.Enum, params []int32) { - var params_c [4]int32 - C.gl4_2compat_glGetShaderiv(gl.funcs, C.GLuint(shader), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetProgramInfoLog returns the information log for the specified program -// object. The information log for a program object is modified when the -// program object is linked or validated. -// -// The information log for a program object is either an empty string, or a -// string containing information about the last link operation, or a string -// containing information about the last validation operation. It may contain -// diagnostic messages, warning messages, and other information. When a -// program object is created, its information log will be a string of length -// 0, and the size of the current log can be obtained by calling GetProgramiv -// with the value GL.INFO_LOG_LENGTH. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated -// by OpenGL. GL.INVALID_OPERATION is generated if program is not a -// program object. -func (gl *GL) GetProgramInfoLog(program glbase.Program) []byte { - var params [1]int32 - var length int32 - gl.GetProgramiv(program, INFO_LOG_LENGTH, params[:]) - bufSize := params[0] - infoLog := make([]byte, int(bufSize)) - C.gl4_2compat_glGetProgramInfoLog(gl.funcs, C.GLuint(program), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length)), (*C.GLchar)(unsafe.Pointer(&infoLog[0]))) - return infoLog -} - -// GetProgramiv returns in params the value of a parameter for a specific -// program object. The following parameters are defined: -// -// GL.DELETE_STATUS -// params returns GL.TRUE if program is currently flagged for deletion, -// and GL.FALSE otherwise. -// -// GL.LINK_STATUS -// params returns GL.TRUE if the last link operation on program was -// successful, and GL.FALSE otherwise. -// -// GL.VALIDATE_STATUS -// params returns GL.TRUE or if the last validation operation on -// program was successful, and GL.FALSE otherwise. -// -// GL.INFO_LOG_LENGTH -// params returns the number of characters in the information log for -// program including the null termination character (the size of -// the character buffer required to store the information log). If -// program has no information log, a value of 0 is returned. -// -// GL.ATTACHED_SHADERS -// params returns the number of shader objects attached to program. -// -// GL.ACTIVE_ATTRIBUTES -// params returns the number of active attribute variables for program. -// -// GL.ACTIVE_ATTRIBUTE_MAX_LENGTH -// params returns the length of the longest active attribute name for -// program, including the null termination character (the size of -// the character buffer required to store the longest attribute name). -// If no active attributes exist, 0 is returned. -// -// GL.ACTIVE_UNIFORMS -// params returns the number of active uniform variables for program. -// -// GL.ACTIVE_UNIFORM_MAX_LENGTH -// params returns the length of the longest active uniform variable -// name for program, including the null termination character (i.e., -// the size of the character buffer required to store the longest -// uniform variable name). If no active uniform variables exist, 0 is -// returned. -// -// GL.TRANSFORM_FEEDBACK_BUFFER_MODE -// params returns a symbolic constant indicating the buffer mode used -// when transform feedback is active. This may be GL.SEPARATE_ATTRIBS -// or GL.INTERLEAVED_ATTRIBS. -// -// GL.TRANSFORM_FEEDBACK_VARYINGS -// params returns the number of varying variables to capture in transform -// feedback mode for the program. -// -// GL.TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH -// params returns the length of the longest variable name to be used for -// transform feedback, including the null-terminator. -// -// GL.GEOMETRY_VERTICES_OUT -// params returns the maximum number of vertices that the geometry shader in -// program will output. -// -// GL.GEOMETRY_INPUT_TYPE -// params returns a symbolic constant indicating the primitive type accepted -// as input to the geometry shader contained in program. -// -// GL.GEOMETRY_OUTPUT_TYPE -// params returns a symbolic constant indicating the primitive type that will -// be output by the geometry shader contained in program. -// -// GL.ACTIVE_UNIFORM_BLOCKS and GL.ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH are -// available only if the GL version 3.1 or greater. -// -// GL.GEOMETRY_VERTICES_OUT, GL.GEOMETRY_INPUT_TYPE and -// GL.GEOMETRY_OUTPUT_TYPE are accepted only if the GL version is 3.2 or -// greater. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program does not refer to a -// program object. GL.INVALID_OPERATION is generated if pname is -// GL.GEOMETRY_VERTICES_OUT, GL.GEOMETRY_INPUT_TYPE, or -// GL.GEOMETRY_OUTPUT_TYPE, and program does not contain a geometry shader. -// GL.INVALID_ENUM is generated if pname is not an accepted value. -func (gl *GL) GetProgramiv(program glbase.Program, pname glbase.Enum, params []int32) { - var params_c [4]int32 - C.gl4_2compat_glGetProgramiv(gl.funcs, C.GLuint(program), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetAttribLocation queries the previously linked program object specified -// by program for the attribute variable specified by name and returns the -// index of the generic vertex attribute that is bound to that attribute -// variable. If name is a matrix attribute variable, the index of the first -// column of the matrix is returned. If the named attribute variable is not -// an active attribute in the specified program object or if name starts with -// the reserved prefix "gl_", a value of -1 is returned. -// -// The association between an attribute variable name and a generic attribute -// index can be specified at any time by calling BindAttribLocation. -// Attribute bindings do not go into effect until LinkProgram is called. -// After a program object has been linked successfully, the index values for -// attribute variables remain fixed until the next link command occurs. The -// attribute values can only be queried after a link if the link was -// successful. GetAttribLocation returns the binding that actually went -// into effect the last time LinkProgram was called for the specified -// program object. Attribute bindings that have been specified since the last -// link operation are not returned by GetAttribLocation. -// -// Error GL_INVALID_OPERATION is generated if program is not a value -// generated by OpenGL. GL_INVALID_OPERATION is generated if program is not -// a program object. GL_INVALID_OPERATION is generated if program has not -// been successfully linked. GL_INVALID_OPERATION is generated if -// GetAttribLocation is executed between the execution of Begin and the -// corresponding execution of End. -// -// GetAttribLocation is available in GL version 2.0 or greater. -func (gl *GL) GetAttribLocation(program glbase.Program, name string) glbase.Attrib { - name_cstr := C.CString(name) - glresult := C.gl4_2compat_glGetAttribLocation(gl.funcs, C.GLuint(program), (*C.GLchar)(name_cstr)) - C.free(unsafe.Pointer(name_cstr)) - return glbase.Attrib(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetAttachedShaders.xml -func (gl *GL) GetAttachedShaders(program glbase.Program, maxCount int32, count []int, obj []uint32) { - C.gl4_2compat_glGetAttachedShaders(gl.funcs, C.GLuint(program), C.GLsizei(maxCount), (*C.GLsizei)(unsafe.Pointer(&count[0])), (*C.GLuint)(unsafe.Pointer(&obj[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveUniform.xml -func (gl *GL) GetActiveUniform(program glbase.Program, index uint32, bufSize int32, length []int32, size []int, gltype []glbase.Enum, name []byte) { - C.gl4_2compat_glGetActiveUniform(gl.funcs, C.GLuint(program), C.GLuint(index), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLint)(unsafe.Pointer(&size[0])), (*C.GLenum)(unsafe.Pointer(&gltype[0])), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveAttrib.xml -func (gl *GL) GetActiveAttrib(program glbase.Program, index glbase.Attrib, bufSize int32, length []int32, size []int, gltype []glbase.Enum, name []byte) { - C.gl4_2compat_glGetActiveAttrib(gl.funcs, C.GLuint(program), C.GLuint(index), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLint)(unsafe.Pointer(&size[0])), (*C.GLenum)(unsafe.Pointer(&gltype[0])), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEnableVertexAttribArray.xml -func (gl *GL) EnableVertexAttribArray(index glbase.Attrib) { - C.gl4_2compat_glEnableVertexAttribArray(gl.funcs, C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDisableVertexAttribArray.xml -func (gl *GL) DisableVertexAttribArray(index glbase.Attrib) { - C.gl4_2compat_glDisableVertexAttribArray(gl.funcs, C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDetachShader.xml -func (gl *GL) DetachShader(program glbase.Program, shader glbase.Shader) { - C.gl4_2compat_glDetachShader(gl.funcs, C.GLuint(program), C.GLuint(shader)) -} - -// DeleteShader frees the memory and invalidates the name associated with -// the shader object specified by shader. This command effectively undoes the -// effects of a call to CreateShader. -// -// If a shader object to be deleted is attached to a program object, it will -// be flagged for deletion, but it will not be deleted until it is no longer -// attached to any program object, for any rendering context (it must -// be detached from wherever it was attached before it will be deleted). A -// value of 0 for shader will be silently ignored. -// -// To determine whether an object has been flagged for deletion, call -// GetShader with arguments shader and GL.DELETE_STATUS. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. -// -// DeleteShader is available in GL version 2.0 or greater. -func (gl *GL) DeleteShader(shader glbase.Shader) { - C.gl4_2compat_glDeleteShader(gl.funcs, C.GLuint(shader)) -} - -// DeleteProgram frees the memory and invalidates the name associated with -// the program object specified by program. This command effectively undoes -// the effects of a call to CreateProgram. -// -// If a program object is in use as part of current rendering state, it will -// be flagged for deletion, but it will not be deleted until it is no longer -// part of current state for any rendering context. If a program object to be -// deleted has shader objects attached to it, those shader objects will be -// automatically detached but not deleted unless they have already been -// flagged for deletion by a previous call to DeleteShader. A value of 0 -// for program will be silently ignored. -// -// To determine whether a program object has been flagged for deletion, call -// GetProgram with arguments program and GL.DELETE_STATUS. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. -// -// DeleteProgram is available in GL version 2.0 or greater. -func (gl *GL) DeleteProgram(program glbase.Program) { - C.gl4_2compat_glDeleteProgram(gl.funcs, C.GLuint(program)) -} - -// CreateShader creates an empty shader object and returns a non-zero value -// by which it can be referenced. A shader object is used to maintain the -// source code strings that define a shader. shaderType indicates the type of -// shader to be created. -// -// Two types of shaders are supported. A shader of type GL.VERTEX_SHADER is a -// shader that is intended to run on the programmable vertex processor and -// replace the fixed functionality vertex processing in OpenGL. A shader of -// type GL.FRAGMENT_SHADER is a shader that is intended to run on the -// programmable fragment processor and replace the fixed functionality -// fragment processing in OpenGL. -// -// When created, a shader object's GL.SHADER_TYPE parameter is set to either -// GL.VERTEX_SHADER or GL.FRAGMENT_SHADER, depending on the value of -// shaderType. -// -// Like display lists and texture objects, the name space for shader objects -// may be shared across a set of contexts, as long as the server sides of the -// contexts share the same address space. If the name space is shared across -// contexts, any attached objects and the data associated with those attached -// objects are shared as well. -// -// This function returns 0 if an error occurs creating the shader object. -// -// Error GL.INVALID_ENUM is generated if shaderType is not an accepted value. -// GL.INVALID_OPERATION is generated if CreateShader is executed between the -// execution of Begin and the corresponding execution of End. -// -// CreateShader is available in GL version 2.0 or greater. -func (gl *GL) CreateShader(gltype glbase.Enum) glbase.Shader { - glresult := C.gl4_2compat_glCreateShader(gl.funcs, C.GLenum(gltype)) - return glbase.Shader(glresult) -} - -// CreateProgram creates an empty program object and returns a non-zero -// value by which it can be referenced. A program object is an object to -// which shader objects can be attached. This provides a mechanism to specify -// the shader objects that will be linked to create a program. It also -// provides a means for checking the compatibility of the shaders that will -// be used to create a program (for instance, checking the compatibility -// between a vertex shader and a fragment shader). When no longer needed as -// part of a program object, shader objects can be detached. -// -// One or more executables are created in a program object by successfully -// attaching shader objects to it with AttachShader, successfully compiling -// the shader objects with CompileShader, and successfully linking the -// program object with LinkProgram. These executables are made part of -// current state when UseProgram is called. Program objects can be deleted -// by calling DeleteProgram. The memory associated with the program object -// will be deleted when it is no longer part of current rendering state for -// any context. -// -// Like display lists and texture objects, the name space for program objects -// may be shared across a set of contexts, as long as the server sides of the -// contexts share the same address space. If the name space is shared across -// contexts, any attached objects and the data associated with those attached -// objects are shared as well. -// -// Applications are responsible for providing the synchronization across API -// calls when objects are accessed from different execution threads. -// -// This function returns 0 if an error occurs creating the program object. -// -// Error GL.INVALID_OPERATION is generated if CreateProgram is executed -// between the execution of Begin and the corresponding execution of End. -// -// CreateProgram is available in GL version 2.0 or greater. -func (gl *GL) CreateProgram() glbase.Program { - glresult := C.gl4_2compat_glCreateProgram(gl.funcs) - return glbase.Program(glresult) -} - -// CompileShader compiles the source code strings that have been stored in -// the shader object specified by shader. -// -// The compilation status will be stored as part of the shader object's -// state. This value will be set to GL.TRUE if the shader was compiled without -// errors and is ready for use, and GL.FALSE otherwise. It can be queried by -// calling GetShaderiv with arguments shader and GL.COMPILE_STATUS. -// -// Compilation of a shader can fail for a number of reasons as specified by -// the OpenGL Shading Language Specification. Whether or not the compilation -// was successful, information about the compilation can be obtained from the -// shader object's information log by calling GetShaderInfoLog. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader is not a shader -// object. GL.INVALID_OPERATION is generated if CompileShader is executed -// between the execution of Begin and the corresponding execution of End. -// -// CompileShader is available in GL version 2.0 or greater. -func (gl *GL) CompileShader(shader glbase.Shader) { - C.gl4_2compat_glCompileShader(gl.funcs, C.GLuint(shader)) -} - -// BindAttribLocation associates a user-defined attribute variable in the program -// object specified by program with a generic vertex attribute index. The name -// parameter specifies the name of the vertex shader attribute variable to -// which index is to be bound. When program is made part of the current state, -// values provided via the generic vertex attribute index will modify the -// value of the user-defined attribute variable specified by name. -// -// If name refers to a matrix attribute variable, index refers to the first -// column of the matrix. Other matrix columns are then automatically bound to -// locations index+1 for a matrix of type mat2; index+1 and index+2 for a -// matrix of type mat3; and index+1, index+2, and index+3 for a matrix of -// type mat4. -// -// This command makes it possible for vertex shaders to use descriptive names -// for attribute variables rather than generic variables that are numbered -// from 0 to GL.MAX_VERTEX_ATTRIBS-1. The values sent to each generic -// attribute index are part of current state, just like standard vertex -// attributes such as color, normal, and vertex position. If a different -// program object is made current by calling UseProgram, the generic vertex -// attributes are tracked in such a way that the same values will be observed -// by attributes in the new program object that are also bound to index. -// -// Attribute variable name-to-generic attribute index bindings for a program -// object can be explicitly assigned at any time by calling -// BindAttribLocation. Attribute bindings do not go into effect until -// LinkProgram is called. After a program object has been linked -// successfully, the index values for generic attributes remain fixed (and -// their values can be queried) until the next link command occurs. -// -// Applications are not allowed to bind any of the standard OpenGL vertex -// attributes using this command, as they are bound automatically when -// needed. Any attribute binding that occurs after the program object has -// been linked will not take effect until the next time the program object is -// linked. -// -// If name was bound previously, that information is lost. Thus you cannot -// bind one user-defined attribute variable to multiple indices, but you can -// bind multiple user-defined attribute variables to the same index. -// -// Applications are allowed to bind more than one user-defined attribute -// variable to the same generic vertex attribute index. This is called -// aliasing, and it is allowed only if just one of the aliased attributes is -// active in the executable program, or if no path through the shader -// consumes more than one attribute of a set of attributes aliased to the -// same location. The compiler and linker are allowed to assume that no -// aliasing is done and are free to employ optimizations that work only in -// the absence of aliasing. OpenGL implementations are not required to do -// error checking to detect aliasing. Because there is no way to bind -// standard attributes, it is not possible to alias generic attributes with -// conventional ones (except for generic attribute 0). -// -// BindAttribLocation can be called before any vertex shader objects are -// bound to the specified program object. It is also permissible to bind a -// generic attribute index to an attribute variable name that is never used -// in a vertex shader. -// -// Active attributes that are not explicitly bound will be bound by the -// linker when LinkProgram is called. The locations assigned can be queried -// by calling GetAttribLocation. -// -// Error GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. -// GL.INVALID_OPERATION is generated if name starts with the reserved prefix "gl_". -// GL.INVALID_VALUE is generated if program is not a value generated by OpenGL. -// GL.INVALID_OPERATION is generated if program is not a program object. -// GL.INVALID_OPERATION is generated if BindAttribLocation is executed -// between the execution of Begin and the corresponding execution of End. -// -// BindAttribLocation is available in GL version 2.0 or greater. -func (gl *GL) BindAttribLocation(program glbase.Program, index glbase.Attrib, name string) { - name_cstr := C.CString(name) - C.gl4_2compat_glBindAttribLocation(gl.funcs, C.GLuint(program), C.GLuint(index), (*C.GLchar)(name_cstr)) - C.free(unsafe.Pointer(name_cstr)) -} - -// AttachShader attaches a shader object to a program object. -// -// In order to create an executable, there must be a way to specify the list -// of things that will be linked together. Program objects provide this -// mechanism. Shaders that are to be linked together in a program object must -// first be attached to that program object. This indicates that shader will -// be included in link operations that will be performed on program. -// -// All operations that can be performed on a shader object are valid whether -// or not the shader object is attached to a program object. It is -// permissible to attach a shader object to a program object before source -// code has been loaded into the shader object or before the shader object -// has been compiled. It is permissible to attach multiple shader objects of -// the same type because each may contain a portion of the complete shader. -// It is also permissible to attach a shader object to more than one program -// object. If a shader object is deleted while it is attached to a program -// object, it will be flagged for deletion, and deletion will not occur until -// DetachShader is called to detach it from all program objects to which it -// is attached. -// -// Error GL.INVALID_VALUE is generated if either program or shader is not a -// value generated by OpenGL. GL.INVALID_OPERATION is generated if program -// is not a program object. GL.INVALID_OPERATION is generated if shader is -// not a shader object. GL.INVALID_OPERATION is generated if shader is -// already attached to program. GL.INVALID_OPERATION is generated if -// AttachShader is executed between the execution of Begin and the -// corresponding execution of End. -// -// AttachShader is available in GL version 2.0 or greater. -func (gl *GL) AttachShader(program glbase.Program, shader glbase.Shader) { - C.gl4_2compat_glAttachShader(gl.funcs, C.GLuint(program), C.GLuint(shader)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glStencilMaskSeparate.xml -func (gl *GL) StencilMaskSeparate(face glbase.Enum, mask uint32) { - C.gl4_2compat_glStencilMaskSeparate(gl.funcs, C.GLenum(face), C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glStencilFuncSeparate.xml -func (gl *GL) StencilFuncSeparate(face, glfunc glbase.Enum, ref int32, mask uint32) { - C.gl4_2compat_glStencilFuncSeparate(gl.funcs, C.GLenum(face), C.GLenum(glfunc), C.GLint(ref), C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glStencilOpSeparate.xml -func (gl *GL) StencilOpSeparate(face, sfail, dpfail, dppass glbase.Enum) { - C.gl4_2compat_glStencilOpSeparate(gl.funcs, C.GLenum(face), C.GLenum(sfail), C.GLenum(dpfail), C.GLenum(dppass)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawBuffers.xml -func (gl *GL) DrawBuffers(n int, bufs []glbase.Enum) { - C.gl4_2compat_glDrawBuffers(gl.funcs, C.GLsizei(n), (*C.GLenum)(unsafe.Pointer(&bufs[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendEquationSeparate.xml -func (gl *GL) BlendEquationSeparate(modeRGB, modeAlpha glbase.Enum) { - C.gl4_2compat_glBlendEquationSeparate(gl.funcs, C.GLenum(modeRGB), C.GLenum(modeAlpha)) -} - -// UniformMatrix4x3fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix4x3fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix4x3fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(4*3) != 0 { - panic("invalid value length for UniformMatrix4x3fv") - } - count := len(value) / (4 * 3) - C.gl4_2compat_glUniformMatrix4x3fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix3x4fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix3x4fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix3x4fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(3*4) != 0 { - panic("invalid value length for UniformMatrix3x4fv") - } - count := len(value) / (3 * 4) - C.gl4_2compat_glUniformMatrix3x4fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix4x2fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix4x2fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix4x2fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(4*2) != 0 { - panic("invalid value length for UniformMatrix4x2fv") - } - count := len(value) / (4 * 2) - C.gl4_2compat_glUniformMatrix4x2fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix2x4fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix2x4fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix2x4fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(2*4) != 0 { - panic("invalid value length for UniformMatrix2x4fv") - } - count := len(value) / (2 * 4) - C.gl4_2compat_glUniformMatrix2x4fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix3x2fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix3x2fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix3x2fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(3*2) != 0 { - panic("invalid value length for UniformMatrix3x2fv") - } - count := len(value) / (3 * 2) - C.gl4_2compat_glUniformMatrix3x2fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix2x3fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix2x3fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix2x3fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(2*3) != 0 { - panic("invalid value length for UniformMatrix2x3fv") - } - count := len(value) / (2 * 3) - C.gl4_2compat_glUniformMatrix2x3fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsVertexArray.xml -func (gl *GL) IsVertexArray(array uint32) bool { - glresult := C.gl4_2compat_glIsVertexArray(gl.funcs, C.GLuint(array)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGenVertexArrays.xml -func (gl *GL) GenVertexArrays(n int, arrays []uint32) { - C.gl4_2compat_glGenVertexArrays(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&arrays[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDeleteVertexArrays.xml -func (gl *GL) DeleteVertexArrays(n int, arrays []uint32) { - C.gl4_2compat_glDeleteVertexArrays(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&arrays[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindVertexArray.xml -func (gl *GL) BindVertexArray(array uint32) { - C.gl4_2compat_glBindVertexArray(gl.funcs, C.GLuint(array)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFlushMappedBufferRange.xml -func (gl *GL) FlushMappedBufferRange(target glbase.Enum, offset, length int) { - C.gl4_2compat_glFlushMappedBufferRange(gl.funcs, C.GLenum(target), C.GLintptr(offset), C.GLsizeiptr(length)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFramebufferTextureLayer.xml -func (gl *GL) FramebufferTextureLayer(target, attachment glbase.Enum, texture glbase.Texture, level int, layer int32) { - C.gl4_2compat_glFramebufferTextureLayer(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLuint(texture), C.GLint(level), C.GLint(layer)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRenderbufferStorageMultisample.xml -func (gl *GL) RenderbufferStorageMultisample(target glbase.Enum, samples int32, internalFormat glbase.Enum, width, height int) { - C.gl4_2compat_glRenderbufferStorageMultisample(gl.funcs, C.GLenum(target), C.GLsizei(samples), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlitFramebuffer.xml -func (gl *GL) BlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1 int32, mask glbase.Bitfield, filter glbase.Enum) { - C.gl4_2compat_glBlitFramebuffer(gl.funcs, C.GLint(srcX0), C.GLint(srcY0), C.GLint(srcX1), C.GLint(srcY1), C.GLint(dstX0), C.GLint(dstY0), C.GLint(dstX1), C.GLint(dstY1), C.GLbitfield(mask), C.GLenum(filter)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGenerateMipmap.xml -func (gl *GL) GenerateMipmap(target glbase.Enum) { - C.gl4_2compat_glGenerateMipmap(gl.funcs, C.GLenum(target)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetFramebufferAttachmentParameteriv.xml -func (gl *GL) GetFramebufferAttachmentParameteriv(target, attachment, pname glbase.Enum, params []int32) { - C.gl4_2compat_glGetFramebufferAttachmentParameteriv(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFramebufferRenderbuffer.xml -func (gl *GL) FramebufferRenderbuffer(target, attachment, renderbuffertarget glbase.Enum, renderbuffer glbase.Renderbuffer) { - C.gl4_2compat_glFramebufferRenderbuffer(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(renderbuffertarget), C.GLuint(renderbuffer)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFramebufferTexture3D.xml -func (gl *GL) FramebufferTexture3D(target, attachment, textarget glbase.Enum, texture glbase.Texture, level int, zoffset int32) { - C.gl4_2compat_glFramebufferTexture3D(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(textarget), C.GLuint(texture), C.GLint(level), C.GLint(zoffset)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFramebufferTexture2D.xml -func (gl *GL) FramebufferTexture2D(target, attachment, textarget glbase.Enum, texture glbase.Texture, level int) { - C.gl4_2compat_glFramebufferTexture2D(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(textarget), C.GLuint(texture), C.GLint(level)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFramebufferTexture1D.xml -func (gl *GL) FramebufferTexture1D(target, attachment, textarget glbase.Enum, texture glbase.Texture, level int) { - C.gl4_2compat_glFramebufferTexture1D(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(textarget), C.GLuint(texture), C.GLint(level)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCheckFramebufferStatus.xml -func (gl *GL) CheckFramebufferStatus(target glbase.Enum) glbase.Enum { - glresult := C.gl4_2compat_glCheckFramebufferStatus(gl.funcs, C.GLenum(target)) - return glbase.Enum(glresult) -} - -// GenFramebuffers returns n framebuffer object names in ids. There is no -// guarantee that the names form a contiguous set of integers; however, it is -// guaranteed that none of the returned names was in use immediately before -// the call to GenFramebuffers. -// -// Framebuffer object names returned by a call to GenFramebuffers are not -// returned by subsequent calls, unless they are first deleted with -// DeleteFramebuffers. -// -// The names returned in ids are marked as used, for the purposes of -// GenFramebuffers only, but they acquire state and type only when they are -// first bound. -// -// Error GL.INVALID_VALUE is generated if n is negative. -func (gl *GL) GenFramebuffers(n int) []glbase.Framebuffer { - if n == 0 { - return nil - } - framebuffers := make([]glbase.Framebuffer, n) - C.gl4_2compat_glGenFramebuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&framebuffers[0]))) - return framebuffers -} - -// DeleteFramebuffers deletes the framebuffer objects whose names are -// stored in the framebuffers slice. The name zero is reserved by the GL and -// is silently ignored, should it occur in framebuffers, as are other unused -// names. Once a framebuffer object is deleted, its name is again unused and -// it has no attachments. If a framebuffer that is currently bound to one or -// more of the targets GL.DRAW_FRAMEBUFFER or GL.READ_FRAMEBUFFER is deleted, -// it is as though BindFramebuffer had been executed with the corresponding -// target and framebuffer zero. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// DeleteFramebuffers is available in GL version 3.0 or greater. -func (gl *GL) DeleteFramebuffers(framebuffers []glbase.Framebuffer) { - n := len(framebuffers) - if n == 0 { - return - } - C.gl4_2compat_glDeleteFramebuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&framebuffers[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindFramebuffer.xml -func (gl *GL) BindFramebuffer(target glbase.Enum, framebuffer glbase.Framebuffer) { - C.gl4_2compat_glBindFramebuffer(gl.funcs, C.GLenum(target), C.GLuint(framebuffer)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsFramebuffer.xml -func (gl *GL) IsFramebuffer(framebuffer glbase.Framebuffer) bool { - glresult := C.gl4_2compat_glIsFramebuffer(gl.funcs, C.GLuint(framebuffer)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetRenderbufferParameteriv.xml -func (gl *GL) GetRenderbufferParameteriv(target, pname glbase.Enum, params []int32) { - C.gl4_2compat_glGetRenderbufferParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRenderbufferStorage.xml -func (gl *GL) RenderbufferStorage(target, internalFormat glbase.Enum, width, height int) { - C.gl4_2compat_glRenderbufferStorage(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height)) -} - -// GenRenderbuffers returns n renderbuffer object names in renderbuffers. -// There is no guarantee that the names form a contiguous set of integers; -// however, it is guaranteed that none of the returned names was in use -// immediately before the call to GenRenderbuffers. -// -// Renderbuffer object names returned by a call to GenRenderbuffers are not -// returned by subsequent calls, unless they are first deleted with -// DeleteRenderbuffers. -// -// The names returned in renderbuffers are marked as used, for the purposes -// of GenRenderbuffers only, but they acquire state and type only when they -// are first bound. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// GenRenderbuffers is available in GL version 3.0 or greater. -func (gl *GL) GenRenderbuffers(n int) []glbase.Renderbuffer { - if n == 0 { - return nil - } - renderbuffers := make([]glbase.Renderbuffer, n) - C.gl4_2compat_glGenRenderbuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&renderbuffers[0]))) - return renderbuffers -} - -// DeleteRenderbuffers deletes the renderbuffer objects whose names are stored -// in the renderbuffers slice. The name zero is reserved by the GL and -// is silently ignored, should it occur in renderbuffers, as are other unused -// names. Once a renderbuffer object is deleted, its name is again unused and -// it has no contents. If a renderbuffer that is currently bound to the -// target GL.RENDERBUFFER is deleted, it is as though BindRenderbuffer had -// been executed with a target of GL.RENDERBUFFER and a name of zero. -// -// If a renderbuffer object is attached to one or more attachment points in -// the currently bound framebuffer, then it as if FramebufferRenderbuffer -// had been called, with a renderbuffer of zero for each attachment point to -// which this image was attached in the currently bound framebuffer. In other -// words, this renderbuffer object is first detached from all attachment -// ponits in the currently bound framebuffer. Note that the renderbuffer -// image is specifically not detached from any non-bound framebuffers. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// DeleteRenderbuffers is available in GL version 3.0 or greater. -func (gl *GL) DeleteRenderbuffers(renderbuffers []glbase.Renderbuffer) { - n := len(renderbuffers) - if n == 0 { - return - } - C.gl4_2compat_glDeleteRenderbuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&renderbuffers[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindRenderbuffer.xml -func (gl *GL) BindRenderbuffer(target glbase.Enum, renderbuffer glbase.Renderbuffer) { - C.gl4_2compat_glBindRenderbuffer(gl.funcs, C.GLenum(target), C.GLuint(renderbuffer)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsRenderbuffer.xml -func (gl *GL) IsRenderbuffer(renderbuffer glbase.Renderbuffer) bool { - glresult := C.gl4_2compat_glIsRenderbuffer(gl.funcs, C.GLuint(renderbuffer)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearBufferfi.xml -func (gl *GL) ClearBufferfi(buffer glbase.Enum, drawbuffer int32, depth float32, stencil int32) { - C.gl4_2compat_glClearBufferfi(gl.funcs, C.GLenum(buffer), C.GLint(drawbuffer), C.GLfloat(depth), C.GLint(stencil)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearBufferfv.xml -func (gl *GL) ClearBufferfv(buffer glbase.Enum, drawbuffer int32, value []float32) { - C.gl4_2compat_glClearBufferfv(gl.funcs, C.GLenum(buffer), C.GLint(drawbuffer), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearBufferuiv.xml -func (gl *GL) ClearBufferuiv(buffer glbase.Enum, drawbuffer int32, value []uint32) { - C.gl4_2compat_glClearBufferuiv(gl.funcs, C.GLenum(buffer), C.GLint(drawbuffer), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearBufferiv.xml -func (gl *GL) ClearBufferiv(buffer glbase.Enum, drawbuffer int32, value []int32) { - C.gl4_2compat_glClearBufferiv(gl.funcs, C.GLenum(buffer), C.GLint(drawbuffer), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexParameterIuiv.xml -func (gl *GL) GetTexParameterIuiv(target, pname glbase.Enum, params []uint32) { - C.gl4_2compat_glGetTexParameterIuiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexParameterIiv.xml -func (gl *GL) GetTexParameterIiv(target, pname glbase.Enum, params []int32) { - C.gl4_2compat_glGetTexParameterIiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexParameterIuiv.xml -func (gl *GL) TexParameterIuiv(target, pname glbase.Enum, params []uint32) { - C.gl4_2compat_glTexParameterIuiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexParameterIiv.xml -func (gl *GL) TexParameterIiv(target, pname glbase.Enum, params []int32) { - C.gl4_2compat_glTexParameterIiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// Uniform4uiv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform4uiv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4uiv(location glbase.Uniform, value []uint32) { - if len(value) == 0 { - return - } - if len(value)%4 != 0 { - panic("invalid value length for Uniform4uiv") - } - count := len(value) / 4 - C.gl4_2compat_glUniform4uiv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// Uniform3uiv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform3uiv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3uiv(location glbase.Uniform, value []uint32) { - if len(value) == 0 { - return - } - if len(value)%3 != 0 { - panic("invalid value length for Uniform3uiv") - } - count := len(value) / 3 - C.gl4_2compat_glUniform3uiv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// Uniform2uiv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform2uiv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2uiv(location glbase.Uniform, value []uint32) { - if len(value) == 0 { - return - } - if len(value)%2 != 0 { - panic("invalid value length for Uniform2uiv") - } - count := len(value) / 2 - C.gl4_2compat_glUniform2uiv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// Uniform1uiv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform1uiv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1uiv(location glbase.Uniform, value []uint32) { - if len(value) == 0 { - return - } - count := len(value) - C.gl4_2compat_glUniform1uiv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// Uniform4ui modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform4ui operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4ui(location glbase.Uniform, v0, v1, v2, v3 uint32) { - C.gl4_2compat_glUniform4ui(gl.funcs, C.GLint(location), C.GLuint(v0), C.GLuint(v1), C.GLuint(v2), C.GLuint(v3)) -} - -// Uniform3ui modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform3ui operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3ui(location glbase.Uniform, v0, v1, v2 uint32) { - C.gl4_2compat_glUniform3ui(gl.funcs, C.GLint(location), C.GLuint(v0), C.GLuint(v1), C.GLuint(v2)) -} - -// Uniform2ui modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform2ui operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2ui(location glbase.Uniform, v0, v1 uint32) { - C.gl4_2compat_glUniform2ui(gl.funcs, C.GLint(location), C.GLuint(v0), C.GLuint(v1)) -} - -// Uniform1ui modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform1ui operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1ui(location glbase.Uniform, v0 uint32) { - C.gl4_2compat_glUniform1ui(gl.funcs, C.GLint(location), C.GLuint(v0)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetFragDataLocation.xml -func (gl *GL) GetFragDataLocation(program glbase.Program, name []byte) int32 { - glresult := C.gl4_2compat_glGetFragDataLocation(gl.funcs, C.GLuint(program), (*C.GLchar)(unsafe.Pointer(&name[0]))) - return int32(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindFragDataLocation.xml -func (gl *GL) BindFragDataLocation(program glbase.Program, color uint32, name []byte) { - C.gl4_2compat_glBindFragDataLocation(gl.funcs, C.GLuint(program), C.GLuint(color), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetUniformuiv.xml -func (gl *GL) GetUniformuiv(program glbase.Program, location glbase.Uniform, params []uint32) { - C.gl4_2compat_glGetUniformuiv(gl.funcs, C.GLuint(program), C.GLint(location), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetVertexAttribIuiv.xml -func (gl *GL) GetVertexAttribIuiv(index glbase.Attrib, pname glbase.Enum, params []uint32) { - C.gl4_2compat_glGetVertexAttribIuiv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetVertexAttribIiv.xml -func (gl *GL) GetVertexAttribIiv(index glbase.Attrib, pname glbase.Enum, params []int32) { - C.gl4_2compat_glGetVertexAttribIiv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribIPointer.xml -func (gl *GL) VertexAttribIPointer(index glbase.Attrib, size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl4_2compat_glVertexAttribIPointer(gl.funcs, C.GLuint(index), C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEndConditionalRender.xml -func (gl *GL) EndConditionalRender() { - C.gl4_2compat_glEndConditionalRender(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBeginConditionalRender.xml -func (gl *GL) BeginConditionalRender(id uint32, mode glbase.Enum) { - C.gl4_2compat_glBeginConditionalRender(gl.funcs, C.GLuint(id), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClampColor.xml -func (gl *GL) ClampColor(target, clamp glbase.Enum) { - C.gl4_2compat_glClampColor(gl.funcs, C.GLenum(target), C.GLenum(clamp)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTransformFeedbackVarying.xml -func (gl *GL) GetTransformFeedbackVarying(program glbase.Program, index uint32, bufSize int32, length []int32, size []int, gltype []glbase.Enum, name []byte) { - C.gl4_2compat_glGetTransformFeedbackVarying(gl.funcs, C.GLuint(program), C.GLuint(index), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLsizei)(unsafe.Pointer(&size[0])), (*C.GLenum)(unsafe.Pointer(&gltype[0])), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindBufferBase.xml -func (gl *GL) BindBufferBase(target glbase.Enum, index uint32, buffer glbase.Buffer) { - C.gl4_2compat_glBindBufferBase(gl.funcs, C.GLenum(target), C.GLuint(index), C.GLuint(buffer)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindBufferRange.xml -func (gl *GL) BindBufferRange(target glbase.Enum, index uint32, buffer glbase.Buffer, offset, size int) { - C.gl4_2compat_glBindBufferRange(gl.funcs, C.GLenum(target), C.GLuint(index), C.GLuint(buffer), C.GLintptr(offset), C.GLsizeiptr(size)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEndTransformFeedback.xml -func (gl *GL) EndTransformFeedback() { - C.gl4_2compat_glEndTransformFeedback(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBeginTransformFeedback.xml -func (gl *GL) BeginTransformFeedback(primitiveMode glbase.Enum) { - C.gl4_2compat_glBeginTransformFeedback(gl.funcs, C.GLenum(primitiveMode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsEnabledi.xml -func (gl *GL) IsEnabledi(target glbase.Enum, index uint32) bool { - glresult := C.gl4_2compat_glIsEnabledi(gl.funcs, C.GLenum(target), C.GLuint(index)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDisablei.xml -func (gl *GL) Disablei(target glbase.Enum, index uint32) { - C.gl4_2compat_glDisablei(gl.funcs, C.GLenum(target), C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEnablei.xml -func (gl *GL) Enablei(target glbase.Enum, index uint32) { - C.gl4_2compat_glEnablei(gl.funcs, C.GLenum(target), C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetIntegeri_v.xml -func (gl *GL) GetIntegeri_v(target glbase.Enum, index uint32, data []int32) { - C.gl4_2compat_glGetIntegeri_v(gl.funcs, C.GLenum(target), C.GLuint(index), (*C.GLint)(unsafe.Pointer(&data[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetBooleani_v.xml -func (gl *GL) GetBooleani_v(target glbase.Enum, index uint32, data []bool) { - C.gl4_2compat_glGetBooleani_v(gl.funcs, C.GLenum(target), C.GLuint(index), (*C.GLboolean)(unsafe.Pointer(&data[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorMaski.xml -func (gl *GL) ColorMaski(index uint32, r, g, b, a bool) { - C.gl4_2compat_glColorMaski(gl.funcs, C.GLuint(index), *(*C.GLboolean)(unsafe.Pointer(&r)), *(*C.GLboolean)(unsafe.Pointer(&g)), *(*C.GLboolean)(unsafe.Pointer(&b)), *(*C.GLboolean)(unsafe.Pointer(&a))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyBufferSubData.xml -func (gl *GL) CopyBufferSubData(readTarget, writeTarget glbase.Enum, readOffset, writeOffset, size int) { - C.gl4_2compat_glCopyBufferSubData(gl.funcs, C.GLenum(readTarget), C.GLenum(writeTarget), C.GLintptr(readOffset), C.GLintptr(writeOffset), C.GLsizeiptr(size)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformBlockBinding.xml -func (gl *GL) UniformBlockBinding(program glbase.Program, v0, v1 uint32) { - C.gl4_2compat_glUniformBlockBinding(gl.funcs, C.GLuint(program), C.GLuint(v0), C.GLuint(v1)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveUniformBlockName.xml -func (gl *GL) GetActiveUniformBlockName(program glbase.Program, uniformBlockIndex uint32, bufSize int32, length []int32, uniformBlockName []byte) { - C.gl4_2compat_glGetActiveUniformBlockName(gl.funcs, C.GLuint(program), C.GLuint(uniformBlockIndex), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLchar)(unsafe.Pointer(&uniformBlockName[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveUniformBlockiv.xml -func (gl *GL) GetActiveUniformBlockiv(program glbase.Program, uniformBlockIndex uint32, pname glbase.Enum, params []int32) { - C.gl4_2compat_glGetActiveUniformBlockiv(gl.funcs, C.GLuint(program), C.GLuint(uniformBlockIndex), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetUniformBlockIndex.xml -func (gl *GL) GetUniformBlockIndex(program glbase.Program, uniformBlockName []byte) uint32 { - glresult := C.gl4_2compat_glGetUniformBlockIndex(gl.funcs, C.GLuint(program), (*C.GLchar)(unsafe.Pointer(&uniformBlockName[0]))) - return uint32(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveUniformName.xml -func (gl *GL) GetActiveUniformName(program glbase.Program, uniformIndex uint32, bufSize int32, length []int32, uniformName []byte) { - C.gl4_2compat_glGetActiveUniformName(gl.funcs, C.GLuint(program), C.GLuint(uniformIndex), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLchar)(unsafe.Pointer(&uniformName[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveUniformsiv.xml -func (gl *GL) GetActiveUniformsiv(program glbase.Program, uniformCount int32, uniformIndices []uint32, pname glbase.Enum, params []int32) { - C.gl4_2compat_glGetActiveUniformsiv(gl.funcs, C.GLuint(program), C.GLsizei(uniformCount), (*C.GLuint)(unsafe.Pointer(&uniformIndices[0])), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPrimitiveRestartIndex.xml -func (gl *GL) PrimitiveRestartIndex(index uint32) { - C.gl4_2compat_glPrimitiveRestartIndex(gl.funcs, C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexBuffer.xml -func (gl *GL) TexBuffer(target, internalFormat glbase.Enum, buffer glbase.Buffer) { - C.gl4_2compat_glTexBuffer(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLuint(buffer)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawElementsInstanced.xml -func (gl *GL) DrawElementsInstanced(mode glbase.Enum, count int, gltype glbase.Enum, indices interface{}, instancecount int32) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl4_2compat_glDrawElementsInstanced(gl.funcs, C.GLenum(mode), C.GLsizei(count), C.GLenum(gltype), indices_ptr, C.GLsizei(instancecount)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawArraysInstanced.xml -func (gl *GL) DrawArraysInstanced(mode glbase.Enum, first, count int, instancecount int32) { - C.gl4_2compat_glDrawArraysInstanced(gl.funcs, C.GLenum(mode), C.GLint(first), C.GLsizei(count), C.GLsizei(instancecount)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSampleMaski.xml -func (gl *GL) SampleMaski(index uint32, mask glbase.Bitfield) { - C.gl4_2compat_glSampleMaski(gl.funcs, C.GLuint(index), C.GLbitfield(mask)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetMultisamplefv.xml -func (gl *GL) GetMultisamplefv(pname glbase.Enum, index uint32, val []float32) { - C.gl4_2compat_glGetMultisamplefv(gl.funcs, C.GLenum(pname), C.GLuint(index), (*C.GLfloat)(unsafe.Pointer(&val[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexImage3DMultisample.xml -func (gl *GL) TexImage3DMultisample(target glbase.Enum, samples, internalFormat int32, width, height int, depth int32, fixedsamplelocations bool) { - C.gl4_2compat_glTexImage3DMultisample(gl.funcs, C.GLenum(target), C.GLsizei(samples), C.GLint(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), *(*C.GLboolean)(unsafe.Pointer(&fixedsamplelocations))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexImage2DMultisample.xml -func (gl *GL) TexImage2DMultisample(target glbase.Enum, samples, internalFormat int32, width, height int, fixedsamplelocations bool) { - C.gl4_2compat_glTexImage2DMultisample(gl.funcs, C.GLenum(target), C.GLsizei(samples), C.GLint(internalFormat), C.GLsizei(width), C.GLsizei(height), *(*C.GLboolean)(unsafe.Pointer(&fixedsamplelocations))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetSynciv.xml -func (gl *GL) GetSynciv(sync glbase.Sync, pname glbase.Enum, bufSize int32, length, values []int32) { - C.gl4_2compat_glGetSynciv(gl.funcs, C.GLsync(unsafe.Pointer(sync)), C.GLenum(pname), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLint)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetInteger64v.xml -func (gl *GL) GetInteger64v(pname glbase.Enum, params []int64) { - C.gl4_2compat_glGetInteger64v(gl.funcs, C.GLenum(pname), (*C.GLint64)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWaitSync.xml -func (gl *GL) WaitSync(sync glbase.Sync, flags glbase.Bitfield, timeout uint64) { - C.gl4_2compat_glWaitSync(gl.funcs, C.GLsync(unsafe.Pointer(sync)), C.GLbitfield(flags), C.GLuint64(timeout)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClientWaitSync.xml -func (gl *GL) ClientWaitSync(sync glbase.Sync, flags glbase.Bitfield, timeout uint64) glbase.Enum { - glresult := C.gl4_2compat_glClientWaitSync(gl.funcs, C.GLsync(unsafe.Pointer(sync)), C.GLbitfield(flags), C.GLuint64(timeout)) - return glbase.Enum(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDeleteSync.xml -func (gl *GL) DeleteSync(sync glbase.Sync) { - C.gl4_2compat_glDeleteSync(gl.funcs, C.GLsync(unsafe.Pointer(sync))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsSync.xml -func (gl *GL) IsSync(sync glbase.Sync) bool { - glresult := C.gl4_2compat_glIsSync(gl.funcs, C.GLsync(unsafe.Pointer(sync))) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFenceSync.xml -func (gl *GL) FenceSync(condition glbase.Enum, flags glbase.Bitfield) glbase.Sync { - glresult := C.gl4_2compat_glFenceSync(gl.funcs, C.GLenum(condition), C.GLbitfield(flags)) - return glbase.Sync(unsafe.Pointer(glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProvokingVertex.xml -func (gl *GL) ProvokingVertex(mode glbase.Enum) { - C.gl4_2compat_glProvokingVertex(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawElementsInstancedBaseVertex.xml -func (gl *GL) DrawElementsInstancedBaseVertex(mode glbase.Enum, count int, gltype glbase.Enum, indices interface{}, instancecount, basevertex int32) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl4_2compat_glDrawElementsInstancedBaseVertex(gl.funcs, C.GLenum(mode), C.GLsizei(count), C.GLenum(gltype), indices_ptr, C.GLsizei(instancecount), C.GLint(basevertex)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawRangeElementsBaseVertex.xml -func (gl *GL) DrawRangeElementsBaseVertex(mode glbase.Enum, start, end uint32, count int, gltype glbase.Enum, indices interface{}, basevertex int32) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl4_2compat_glDrawRangeElementsBaseVertex(gl.funcs, C.GLenum(mode), C.GLuint(start), C.GLuint(end), C.GLsizei(count), C.GLenum(gltype), indices_ptr, C.GLint(basevertex)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawElementsBaseVertex.xml -func (gl *GL) DrawElementsBaseVertex(mode glbase.Enum, count int, gltype glbase.Enum, indices interface{}, basevertex int32) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl4_2compat_glDrawElementsBaseVertex(gl.funcs, C.GLenum(mode), C.GLsizei(count), C.GLenum(gltype), indices_ptr, C.GLint(basevertex)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFramebufferTexture.xml -func (gl *GL) FramebufferTexture(target, attachment glbase.Enum, texture glbase.Texture, level int) { - C.gl4_2compat_glFramebufferTexture(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLuint(texture), C.GLint(level)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetBufferParameteri64v.xml -func (gl *GL) GetBufferParameteri64v(target, pname glbase.Enum, params []int64) { - C.gl4_2compat_glGetBufferParameteri64v(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint64)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetInteger64i_v.xml -func (gl *GL) GetInteger64i_v(target glbase.Enum, index uint32, data []int64) { - C.gl4_2compat_glGetInteger64i_v(gl.funcs, C.GLenum(target), C.GLuint(index), (*C.GLint64)(unsafe.Pointer(&data[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribP4uiv.xml -func (gl *GL) VertexAttribP4uiv(index glbase.Attrib, gltype glbase.Enum, normalized bool, value []uint32) { - C.gl4_2compat_glVertexAttribP4uiv(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribP4ui.xml -func (gl *GL) VertexAttribP4ui(index glbase.Attrib, gltype glbase.Enum, normalized bool, value uint32) { - C.gl4_2compat_glVertexAttribP4ui(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribP3uiv.xml -func (gl *GL) VertexAttribP3uiv(index glbase.Attrib, gltype glbase.Enum, normalized bool, value []uint32) { - C.gl4_2compat_glVertexAttribP3uiv(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribP3ui.xml -func (gl *GL) VertexAttribP3ui(index glbase.Attrib, gltype glbase.Enum, normalized bool, value uint32) { - C.gl4_2compat_glVertexAttribP3ui(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribP2uiv.xml -func (gl *GL) VertexAttribP2uiv(index glbase.Attrib, gltype glbase.Enum, normalized bool, value []uint32) { - C.gl4_2compat_glVertexAttribP2uiv(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribP2ui.xml -func (gl *GL) VertexAttribP2ui(index glbase.Attrib, gltype glbase.Enum, normalized bool, value uint32) { - C.gl4_2compat_glVertexAttribP2ui(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribP1uiv.xml -func (gl *GL) VertexAttribP1uiv(index glbase.Attrib, gltype glbase.Enum, normalized bool, value []uint32) { - C.gl4_2compat_glVertexAttribP1uiv(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribP1ui.xml -func (gl *GL) VertexAttribP1ui(index glbase.Attrib, gltype glbase.Enum, normalized bool, value uint32) { - C.gl4_2compat_glVertexAttribP1ui(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColorP3uiv.xml -func (gl *GL) SecondaryColorP3uiv(gltype glbase.Enum, color []uint32) { - C.gl4_2compat_glSecondaryColorP3uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&color[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColorP3ui.xml -func (gl *GL) SecondaryColorP3ui(gltype glbase.Enum, color uint32) { - C.gl4_2compat_glSecondaryColorP3ui(gl.funcs, C.GLenum(gltype), C.GLuint(color)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorP4uiv.xml -func (gl *GL) ColorP4uiv(gltype glbase.Enum, color []uint32) { - C.gl4_2compat_glColorP4uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&color[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorP4ui.xml -func (gl *GL) ColorP4ui(gltype glbase.Enum, color uint32) { - C.gl4_2compat_glColorP4ui(gl.funcs, C.GLenum(gltype), C.GLuint(color)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorP3uiv.xml -func (gl *GL) ColorP3uiv(gltype glbase.Enum, color []uint32) { - C.gl4_2compat_glColorP3uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&color[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorP3ui.xml -func (gl *GL) ColorP3ui(gltype glbase.Enum, color uint32) { - C.gl4_2compat_glColorP3ui(gl.funcs, C.GLenum(gltype), C.GLuint(color)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glNormalP3uiv.xml -func (gl *GL) NormalP3uiv(gltype glbase.Enum, coords []uint32) { - C.gl4_2compat_glNormalP3uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glNormalP3ui.xml -func (gl *GL) NormalP3ui(gltype glbase.Enum, coords uint32) { - C.gl4_2compat_glNormalP3ui(gl.funcs, C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoordP4uiv.xml -func (gl *GL) MultiTexCoordP4uiv(texture, gltype glbase.Enum, coords []uint32) { - C.gl4_2compat_glMultiTexCoordP4uiv(gl.funcs, C.GLenum(texture), C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoordP4ui.xml -func (gl *GL) MultiTexCoordP4ui(texture, gltype glbase.Enum, coords uint32) { - C.gl4_2compat_glMultiTexCoordP4ui(gl.funcs, C.GLenum(texture), C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoordP3uiv.xml -func (gl *GL) MultiTexCoordP3uiv(texture, gltype glbase.Enum, coords []uint32) { - C.gl4_2compat_glMultiTexCoordP3uiv(gl.funcs, C.GLenum(texture), C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoordP3ui.xml -func (gl *GL) MultiTexCoordP3ui(texture, gltype glbase.Enum, coords uint32) { - C.gl4_2compat_glMultiTexCoordP3ui(gl.funcs, C.GLenum(texture), C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoordP2uiv.xml -func (gl *GL) MultiTexCoordP2uiv(texture, gltype glbase.Enum, coords []uint32) { - C.gl4_2compat_glMultiTexCoordP2uiv(gl.funcs, C.GLenum(texture), C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoordP2ui.xml -func (gl *GL) MultiTexCoordP2ui(texture, gltype glbase.Enum, coords uint32) { - C.gl4_2compat_glMultiTexCoordP2ui(gl.funcs, C.GLenum(texture), C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoordP1uiv.xml -func (gl *GL) MultiTexCoordP1uiv(texture, gltype glbase.Enum, coords []uint32) { - C.gl4_2compat_glMultiTexCoordP1uiv(gl.funcs, C.GLenum(texture), C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoordP1ui.xml -func (gl *GL) MultiTexCoordP1ui(texture, gltype glbase.Enum, coords uint32) { - C.gl4_2compat_glMultiTexCoordP1ui(gl.funcs, C.GLenum(texture), C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordP4uiv.xml -func (gl *GL) TexCoordP4uiv(gltype glbase.Enum, coords []uint32) { - C.gl4_2compat_glTexCoordP4uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordP4ui.xml -func (gl *GL) TexCoordP4ui(gltype glbase.Enum, coords uint32) { - C.gl4_2compat_glTexCoordP4ui(gl.funcs, C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordP3uiv.xml -func (gl *GL) TexCoordP3uiv(gltype glbase.Enum, coords []uint32) { - C.gl4_2compat_glTexCoordP3uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordP3ui.xml -func (gl *GL) TexCoordP3ui(gltype glbase.Enum, coords uint32) { - C.gl4_2compat_glTexCoordP3ui(gl.funcs, C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordP2uiv.xml -func (gl *GL) TexCoordP2uiv(gltype glbase.Enum, coords []uint32) { - C.gl4_2compat_glTexCoordP2uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordP2ui.xml -func (gl *GL) TexCoordP2ui(gltype glbase.Enum, coords uint32) { - C.gl4_2compat_glTexCoordP2ui(gl.funcs, C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordP1uiv.xml -func (gl *GL) TexCoordP1uiv(gltype glbase.Enum, coords []uint32) { - C.gl4_2compat_glTexCoordP1uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordP1ui.xml -func (gl *GL) TexCoordP1ui(gltype glbase.Enum, coords uint32) { - C.gl4_2compat_glTexCoordP1ui(gl.funcs, C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexP4uiv.xml -func (gl *GL) VertexP4uiv(gltype glbase.Enum, value []uint32) { - C.gl4_2compat_glVertexP4uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexP4ui.xml -func (gl *GL) VertexP4ui(gltype glbase.Enum, value uint32) { - C.gl4_2compat_glVertexP4ui(gl.funcs, C.GLenum(gltype), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexP3uiv.xml -func (gl *GL) VertexP3uiv(gltype glbase.Enum, value []uint32) { - C.gl4_2compat_glVertexP3uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexP3ui.xml -func (gl *GL) VertexP3ui(gltype glbase.Enum, value uint32) { - C.gl4_2compat_glVertexP3ui(gl.funcs, C.GLenum(gltype), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexP2uiv.xml -func (gl *GL) VertexP2uiv(gltype glbase.Enum, value []uint32) { - C.gl4_2compat_glVertexP2uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexP2ui.xml -func (gl *GL) VertexP2ui(gltype glbase.Enum, value uint32) { - C.gl4_2compat_glVertexP2ui(gl.funcs, C.GLenum(gltype), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetQueryObjectui64v.xml -func (gl *GL) GetQueryObjectui64v(id uint32, pname glbase.Enum, params []uint64) { - C.gl4_2compat_glGetQueryObjectui64v(gl.funcs, C.GLuint(id), C.GLenum(pname), (*C.GLuint64)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetQueryObjecti64v.xml -func (gl *GL) GetQueryObjecti64v(id uint32, pname glbase.Enum, params []int64) { - C.gl4_2compat_glGetQueryObjecti64v(gl.funcs, C.GLuint(id), C.GLenum(pname), (*C.GLint64)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glQueryCounter.xml -func (gl *GL) QueryCounter(id uint32, target glbase.Enum) { - C.gl4_2compat_glQueryCounter(gl.funcs, C.GLuint(id), C.GLenum(target)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetSamplerParameterIuiv.xml -func (gl *GL) GetSamplerParameterIuiv(sampler uint32, pname glbase.Enum, params []uint32) { - C.gl4_2compat_glGetSamplerParameterIuiv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetSamplerParameterfv.xml -func (gl *GL) GetSamplerParameterfv(sampler uint32, pname glbase.Enum, params []float32) { - C.gl4_2compat_glGetSamplerParameterfv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetSamplerParameterIiv.xml -func (gl *GL) GetSamplerParameterIiv(sampler uint32, pname glbase.Enum, params []int32) { - C.gl4_2compat_glGetSamplerParameterIiv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetSamplerParameteriv.xml -func (gl *GL) GetSamplerParameteriv(sampler uint32, pname glbase.Enum, params []int32) { - C.gl4_2compat_glGetSamplerParameteriv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSamplerParameterIuiv.xml -func (gl *GL) SamplerParameterIuiv(sampler uint32, pname glbase.Enum, param []uint32) { - C.gl4_2compat_glSamplerParameterIuiv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶m[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSamplerParameterIiv.xml -func (gl *GL) SamplerParameterIiv(sampler uint32, pname glbase.Enum, param []int32) { - C.gl4_2compat_glSamplerParameterIiv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶m[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSamplerParameterfv.xml -func (gl *GL) SamplerParameterfv(sampler uint32, pname glbase.Enum, param []float32) { - C.gl4_2compat_glSamplerParameterfv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶m[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSamplerParameterf.xml -func (gl *GL) SamplerParameterf(sampler uint32, pname glbase.Enum, param float32) { - C.gl4_2compat_glSamplerParameterf(gl.funcs, C.GLuint(sampler), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSamplerParameteriv.xml -func (gl *GL) SamplerParameteriv(sampler uint32, pname glbase.Enum, param []int32) { - C.gl4_2compat_glSamplerParameteriv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶m[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSamplerParameteri.xml -func (gl *GL) SamplerParameteri(sampler uint32, pname glbase.Enum, param int32) { - C.gl4_2compat_glSamplerParameteri(gl.funcs, C.GLuint(sampler), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindSampler.xml -func (gl *GL) BindSampler(unit, sampler uint32) { - C.gl4_2compat_glBindSampler(gl.funcs, C.GLuint(unit), C.GLuint(sampler)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsSampler.xml -func (gl *GL) IsSampler(sampler uint32) bool { - glresult := C.gl4_2compat_glIsSampler(gl.funcs, C.GLuint(sampler)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDeleteSamplers.xml -func (gl *GL) DeleteSamplers(count int, samplers []uint32) { - C.gl4_2compat_glDeleteSamplers(gl.funcs, C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&samplers[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGenSamplers.xml -func (gl *GL) GenSamplers(count int, samplers []uint32) { - C.gl4_2compat_glGenSamplers(gl.funcs, C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&samplers[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetFragDataIndex.xml -func (gl *GL) GetFragDataIndex(program glbase.Program, name []byte) int32 { - glresult := C.gl4_2compat_glGetFragDataIndex(gl.funcs, C.GLuint(program), (*C.GLchar)(unsafe.Pointer(&name[0]))) - return int32(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindFragDataLocationIndexed.xml -func (gl *GL) BindFragDataLocationIndexed(program glbase.Program, colorNumber, index uint32, name []byte) { - C.gl4_2compat_glBindFragDataLocationIndexed(gl.funcs, C.GLuint(program), C.GLuint(colorNumber), C.GLuint(index), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribDivisor.xml -func (gl *GL) VertexAttribDivisor(index glbase.Attrib, divisor uint32) { - C.gl4_2compat_glVertexAttribDivisor(gl.funcs, C.GLuint(index), C.GLuint(divisor)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetQueryIndexediv.xml -func (gl *GL) GetQueryIndexediv(target glbase.Enum, index uint32, pname glbase.Enum, params []int32) { - C.gl4_2compat_glGetQueryIndexediv(gl.funcs, C.GLenum(target), C.GLuint(index), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEndQueryIndexed.xml -func (gl *GL) EndQueryIndexed(target glbase.Enum, index uint32) { - C.gl4_2compat_glEndQueryIndexed(gl.funcs, C.GLenum(target), C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBeginQueryIndexed.xml -func (gl *GL) BeginQueryIndexed(target glbase.Enum, index, id uint32) { - C.gl4_2compat_glBeginQueryIndexed(gl.funcs, C.GLenum(target), C.GLuint(index), C.GLuint(id)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawTransformFeedbackStream.xml -func (gl *GL) DrawTransformFeedbackStream(mode glbase.Enum, id, stream uint32) { - C.gl4_2compat_glDrawTransformFeedbackStream(gl.funcs, C.GLenum(mode), C.GLuint(id), C.GLuint(stream)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawTransformFeedback.xml -func (gl *GL) DrawTransformFeedback(mode glbase.Enum, id uint32) { - C.gl4_2compat_glDrawTransformFeedback(gl.funcs, C.GLenum(mode), C.GLuint(id)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glResumeTransformFeedback.xml -func (gl *GL) ResumeTransformFeedback() { - C.gl4_2compat_glResumeTransformFeedback(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPauseTransformFeedback.xml -func (gl *GL) PauseTransformFeedback() { - C.gl4_2compat_glPauseTransformFeedback(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsTransformFeedback.xml -func (gl *GL) IsTransformFeedback(id uint32) bool { - glresult := C.gl4_2compat_glIsTransformFeedback(gl.funcs, C.GLuint(id)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGenTransformFeedbacks.xml -func (gl *GL) GenTransformFeedbacks(n int, ids []uint32) { - C.gl4_2compat_glGenTransformFeedbacks(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&ids[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDeleteTransformFeedbacks.xml -func (gl *GL) DeleteTransformFeedbacks(n int, ids []uint32) { - C.gl4_2compat_glDeleteTransformFeedbacks(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&ids[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindTransformFeedback.xml -func (gl *GL) BindTransformFeedback(target glbase.Enum, id uint32) { - C.gl4_2compat_glBindTransformFeedback(gl.funcs, C.GLenum(target), C.GLuint(id)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPatchParameterfv.xml -func (gl *GL) PatchParameterfv(pname glbase.Enum, values []float32) { - C.gl4_2compat_glPatchParameterfv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPatchParameteri.xml -func (gl *GL) PatchParameteri(pname glbase.Enum, value int32) { - C.gl4_2compat_glPatchParameteri(gl.funcs, C.GLenum(pname), C.GLint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetProgramStageiv.xml -func (gl *GL) GetProgramStageiv(program glbase.Program, shadertype, pname glbase.Enum, values []int32) { - C.gl4_2compat_glGetProgramStageiv(gl.funcs, C.GLuint(program), C.GLenum(shadertype), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetUniformSubroutineuiv.xml -func (gl *GL) GetUniformSubroutineuiv(shadertype glbase.Enum, location glbase.Uniform, params []uint32) { - C.gl4_2compat_glGetUniformSubroutineuiv(gl.funcs, C.GLenum(shadertype), C.GLint(location), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformSubroutinesuiv.xml -func (gl *GL) UniformSubroutinesuiv(shadertype glbase.Enum, count int, value []uint32) { - C.gl4_2compat_glUniformSubroutinesuiv(gl.funcs, C.GLenum(shadertype), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveSubroutineName.xml -func (gl *GL) GetActiveSubroutineName(program glbase.Program, shadertype glbase.Enum, index uint32, bufSize int32, length []int32, name []byte) { - C.gl4_2compat_glGetActiveSubroutineName(gl.funcs, C.GLuint(program), C.GLenum(shadertype), C.GLuint(index), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveSubroutineUniformName.xml -func (gl *GL) GetActiveSubroutineUniformName(program glbase.Program, shadertype glbase.Enum, index uint32, bufSize int32, length []int32, name []byte) { - C.gl4_2compat_glGetActiveSubroutineUniformName(gl.funcs, C.GLuint(program), C.GLenum(shadertype), C.GLuint(index), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveSubroutineUniformiv.xml -func (gl *GL) GetActiveSubroutineUniformiv(program glbase.Program, shadertype glbase.Enum, index uint32, pname glbase.Enum, values []int32) { - C.gl4_2compat_glGetActiveSubroutineUniformiv(gl.funcs, C.GLuint(program), C.GLenum(shadertype), C.GLuint(index), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetSubroutineIndex.xml -func (gl *GL) GetSubroutineIndex(program glbase.Program, shadertype glbase.Enum, name []byte) uint32 { - glresult := C.gl4_2compat_glGetSubroutineIndex(gl.funcs, C.GLuint(program), C.GLenum(shadertype), (*C.GLchar)(unsafe.Pointer(&name[0]))) - return uint32(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetSubroutineUniformLocation.xml -func (gl *GL) GetSubroutineUniformLocation(program glbase.Program, shadertype glbase.Enum, name []byte) int32 { - glresult := C.gl4_2compat_glGetSubroutineUniformLocation(gl.funcs, C.GLuint(program), C.GLenum(shadertype), (*C.GLchar)(unsafe.Pointer(&name[0]))) - return int32(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetUniformdv.xml -func (gl *GL) GetUniformdv(program glbase.Program, location glbase.Uniform, params []float64) { - C.gl4_2compat_glGetUniformdv(gl.funcs, C.GLuint(program), C.GLint(location), (*C.GLdouble)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix4x3dv.xml -func (gl *GL) UniformMatrix4x3dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_2compat_glUniformMatrix4x3dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix4x2dv.xml -func (gl *GL) UniformMatrix4x2dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_2compat_glUniformMatrix4x2dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix3x4dv.xml -func (gl *GL) UniformMatrix3x4dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_2compat_glUniformMatrix3x4dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix3x2dv.xml -func (gl *GL) UniformMatrix3x2dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_2compat_glUniformMatrix3x2dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix2x4dv.xml -func (gl *GL) UniformMatrix2x4dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_2compat_glUniformMatrix2x4dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix2x3dv.xml -func (gl *GL) UniformMatrix2x3dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_2compat_glUniformMatrix2x3dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix4dv.xml -func (gl *GL) UniformMatrix4dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_2compat_glUniformMatrix4dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix3dv.xml -func (gl *GL) UniformMatrix3dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_2compat_glUniformMatrix3dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix2dv.xml -func (gl *GL) UniformMatrix2dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_2compat_glUniformMatrix2dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniform4dv.xml -func (gl *GL) Uniform4dv(location glbase.Uniform, count int, value []float64) { - C.gl4_2compat_glUniform4dv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniform3dv.xml -func (gl *GL) Uniform3dv(location glbase.Uniform, count int, value []float64) { - C.gl4_2compat_glUniform3dv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniform2dv.xml -func (gl *GL) Uniform2dv(location glbase.Uniform, count int, value []float64) { - C.gl4_2compat_glUniform2dv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniform1dv.xml -func (gl *GL) Uniform1dv(location glbase.Uniform, count int, value []float64) { - C.gl4_2compat_glUniform1dv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniform4d.xml -func (gl *GL) Uniform4d(location glbase.Uniform, v0, v1, v2, v3 float64) { - C.gl4_2compat_glUniform4d(gl.funcs, C.GLint(location), C.GLdouble(v0), C.GLdouble(v1), C.GLdouble(v2), C.GLdouble(v3)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniform3d.xml -func (gl *GL) Uniform3d(location glbase.Uniform, v0, v1, v2 float64) { - C.gl4_2compat_glUniform3d(gl.funcs, C.GLint(location), C.GLdouble(v0), C.GLdouble(v1), C.GLdouble(v2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniform2d.xml -func (gl *GL) Uniform2d(location glbase.Uniform, v0, v1 float64) { - C.gl4_2compat_glUniform2d(gl.funcs, C.GLint(location), C.GLdouble(v0), C.GLdouble(v1)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniform1d.xml -func (gl *GL) Uniform1d(location glbase.Uniform, v0 float64) { - C.gl4_2compat_glUniform1d(gl.funcs, C.GLint(location), C.GLdouble(v0)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawElementsIndirect.xml -func (gl *GL) DrawElementsIndirect(mode, gltype glbase.Enum, indirect interface{}) { - var indirect_ptr unsafe.Pointer - var indirect_v = reflect.ValueOf(indirect) - if indirect != nil && indirect_v.Kind() != reflect.Slice { - panic("parameter indirect must be a slice") - } - if indirect != nil { - indirect_ptr = unsafe.Pointer(indirect_v.Index(0).Addr().Pointer()) - } - C.gl4_2compat_glDrawElementsIndirect(gl.funcs, C.GLenum(mode), C.GLenum(gltype), indirect_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawArraysIndirect.xml -func (gl *GL) DrawArraysIndirect(mode glbase.Enum, indirect interface{}) { - var indirect_ptr unsafe.Pointer - var indirect_v = reflect.ValueOf(indirect) - if indirect != nil && indirect_v.Kind() != reflect.Slice { - panic("parameter indirect must be a slice") - } - if indirect != nil { - indirect_ptr = unsafe.Pointer(indirect_v.Index(0).Addr().Pointer()) - } - C.gl4_2compat_glDrawArraysIndirect(gl.funcs, C.GLenum(mode), indirect_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendFuncSeparatei.xml -func (gl *GL) BlendFuncSeparatei(buf uint32, srcRGB, dstRGB, srcAlpha, dstAlpha glbase.Enum) { - C.gl4_2compat_glBlendFuncSeparatei(gl.funcs, C.GLuint(buf), C.GLenum(srcRGB), C.GLenum(dstRGB), C.GLenum(srcAlpha), C.GLenum(dstAlpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendFunci.xml -func (gl *GL) BlendFunci(buf uint32, src, dst glbase.Enum) { - C.gl4_2compat_glBlendFunci(gl.funcs, C.GLuint(buf), C.GLenum(src), C.GLenum(dst)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendEquationSeparatei.xml -func (gl *GL) BlendEquationSeparatei(buf uint32, modeRGB, modeAlpha glbase.Enum) { - C.gl4_2compat_glBlendEquationSeparatei(gl.funcs, C.GLuint(buf), C.GLenum(modeRGB), C.GLenum(modeAlpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendEquationi.xml -func (gl *GL) BlendEquationi(buf uint32, mode glbase.Enum) { - C.gl4_2compat_glBlendEquationi(gl.funcs, C.GLuint(buf), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMinSampleShading.xml -func (gl *GL) MinSampleShading(value float32) { - C.gl4_2compat_glMinSampleShading(gl.funcs, C.GLfloat(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetDoublei_v.xml -func (gl *GL) GetDoublei_v(target glbase.Enum, index uint32, data []float64) { - C.gl4_2compat_glGetDoublei_v(gl.funcs, C.GLenum(target), C.GLuint(index), (*C.GLdouble)(unsafe.Pointer(&data[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetFloati_v.xml -func (gl *GL) GetFloati_v(target glbase.Enum, index uint32, data []float32) { - C.gl4_2compat_glGetFloati_v(gl.funcs, C.GLenum(target), C.GLuint(index), (*C.GLfloat)(unsafe.Pointer(&data[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDepthRangeIndexed.xml -func (gl *GL) DepthRangeIndexed(index uint32, n, f float64) { - C.gl4_2compat_glDepthRangeIndexed(gl.funcs, C.GLuint(index), C.GLdouble(n), C.GLdouble(f)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDepthRangeArrayv.xml -func (gl *GL) DepthRangeArrayv(first uint32, count int, v []float64) { - C.gl4_2compat_glDepthRangeArrayv(gl.funcs, C.GLuint(first), C.GLsizei(count), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glScissorIndexedv.xml -func (gl *GL) ScissorIndexedv(index uint32, v []int32) { - C.gl4_2compat_glScissorIndexedv(gl.funcs, C.GLuint(index), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glScissorIndexed.xml -func (gl *GL) ScissorIndexed(index uint32, left, bottom int32, width, height int) { - C.gl4_2compat_glScissorIndexed(gl.funcs, C.GLuint(index), C.GLint(left), C.GLint(bottom), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glScissorArrayv.xml -func (gl *GL) ScissorArrayv(first uint32, count int, v []int32) { - C.gl4_2compat_glScissorArrayv(gl.funcs, C.GLuint(first), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glViewportIndexedfv.xml -func (gl *GL) ViewportIndexedfv(index uint32, v []float32) { - C.gl4_2compat_glViewportIndexedfv(gl.funcs, C.GLuint(index), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glViewportIndexedf.xml -func (gl *GL) ViewportIndexedf(index uint32, x, y, w, h float32) { - C.gl4_2compat_glViewportIndexedf(gl.funcs, C.GLuint(index), C.GLfloat(x), C.GLfloat(y), C.GLfloat(w), C.GLfloat(h)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glViewportArrayv.xml -func (gl *GL) ViewportArrayv(first uint32, count int, v []float32) { - C.gl4_2compat_glViewportArrayv(gl.funcs, C.GLuint(first), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetVertexAttribLdv.xml -func (gl *GL) GetVertexAttribLdv(index glbase.Attrib, pname glbase.Enum, params []float64) { - C.gl4_2compat_glGetVertexAttribLdv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribLPointer.xml -func (gl *GL) VertexAttribLPointer(index glbase.Attrib, size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl4_2compat_glVertexAttribLPointer(gl.funcs, C.GLuint(index), C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribL4dv.xml -func (gl *GL) VertexAttribL4dv(index glbase.Attrib, v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glVertexAttribL4dv(gl.funcs, C.GLuint(index), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribL3dv.xml -func (gl *GL) VertexAttribL3dv(index glbase.Attrib, v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glVertexAttribL3dv(gl.funcs, C.GLuint(index), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribL2dv.xml -func (gl *GL) VertexAttribL2dv(index glbase.Attrib, v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glVertexAttribL2dv(gl.funcs, C.GLuint(index), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribL1dv.xml -func (gl *GL) VertexAttribL1dv(index glbase.Attrib, v []float64) { - C.gl4_2compat_glVertexAttribL1dv(gl.funcs, C.GLuint(index), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribL4d.xml -func (gl *GL) VertexAttribL4d(index glbase.Attrib, x, y, z, w float64) { - C.gl4_2compat_glVertexAttribL4d(gl.funcs, C.GLuint(index), C.GLdouble(x), C.GLdouble(y), C.GLdouble(z), C.GLdouble(w)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribL3d.xml -func (gl *GL) VertexAttribL3d(index glbase.Attrib, x, y, z float64) { - C.gl4_2compat_glVertexAttribL3d(gl.funcs, C.GLuint(index), C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribL2d.xml -func (gl *GL) VertexAttribL2d(index glbase.Attrib, x, y float64) { - C.gl4_2compat_glVertexAttribL2d(gl.funcs, C.GLuint(index), C.GLdouble(x), C.GLdouble(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribL1d.xml -func (gl *GL) VertexAttribL1d(index glbase.Attrib, x float64) { - C.gl4_2compat_glVertexAttribL1d(gl.funcs, C.GLuint(index), C.GLdouble(x)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetProgramPipelineInfoLog.xml -func (gl *GL) GetProgramPipelineInfoLog(pipeline uint32, bufSize int32, length []int32, infoLog []byte) { - C.gl4_2compat_glGetProgramPipelineInfoLog(gl.funcs, C.GLuint(pipeline), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLchar)(unsafe.Pointer(&infoLog[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glValidateProgramPipeline.xml -func (gl *GL) ValidateProgramPipeline(pipeline uint32) { - C.gl4_2compat_glValidateProgramPipeline(gl.funcs, C.GLuint(pipeline)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix4x3dv.xml -func (gl *GL) ProgramUniformMatrix4x3dv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float64) { - if len(value) != 3 { - panic("parameter value has incorrect length") - } - C.gl4_2compat_glProgramUniformMatrix4x3dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix3x4dv.xml -func (gl *GL) ProgramUniformMatrix3x4dv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float64) { - if len(value) != 4 { - panic("parameter value has incorrect length") - } - C.gl4_2compat_glProgramUniformMatrix3x4dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix4x2dv.xml -func (gl *GL) ProgramUniformMatrix4x2dv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float64) { - if len(value) != 2 { - panic("parameter value has incorrect length") - } - C.gl4_2compat_glProgramUniformMatrix4x2dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix2x4dv.xml -func (gl *GL) ProgramUniformMatrix2x4dv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float64) { - if len(value) != 4 { - panic("parameter value has incorrect length") - } - C.gl4_2compat_glProgramUniformMatrix2x4dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix3x2dv.xml -func (gl *GL) ProgramUniformMatrix3x2dv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float64) { - if len(value) != 2 { - panic("parameter value has incorrect length") - } - C.gl4_2compat_glProgramUniformMatrix3x2dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix2x3dv.xml -func (gl *GL) ProgramUniformMatrix2x3dv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float64) { - if len(value) != 3 { - panic("parameter value has incorrect length") - } - C.gl4_2compat_glProgramUniformMatrix2x3dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix4x3fv.xml -func (gl *GL) ProgramUniformMatrix4x3fv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float32) { - if len(value) != 3 { - panic("parameter value has incorrect length") - } - C.gl4_2compat_glProgramUniformMatrix4x3fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix3x4fv.xml -func (gl *GL) ProgramUniformMatrix3x4fv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float32) { - if len(value) != 4 { - panic("parameter value has incorrect length") - } - C.gl4_2compat_glProgramUniformMatrix3x4fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix4x2fv.xml -func (gl *GL) ProgramUniformMatrix4x2fv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float32) { - if len(value) != 2 { - panic("parameter value has incorrect length") - } - C.gl4_2compat_glProgramUniformMatrix4x2fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix2x4fv.xml -func (gl *GL) ProgramUniformMatrix2x4fv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float32) { - if len(value) != 4 { - panic("parameter value has incorrect length") - } - C.gl4_2compat_glProgramUniformMatrix2x4fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix3x2fv.xml -func (gl *GL) ProgramUniformMatrix3x2fv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float32) { - if len(value) != 2 { - panic("parameter value has incorrect length") - } - C.gl4_2compat_glProgramUniformMatrix3x2fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix2x3fv.xml -func (gl *GL) ProgramUniformMatrix2x3fv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float32) { - if len(value) != 3 { - panic("parameter value has incorrect length") - } - C.gl4_2compat_glProgramUniformMatrix2x3fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix4dv.xml -func (gl *GL) ProgramUniformMatrix4dv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float64) { - if len(value) != 4 { - panic("parameter value has incorrect length") - } - C.gl4_2compat_glProgramUniformMatrix4dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix3dv.xml -func (gl *GL) ProgramUniformMatrix3dv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float64) { - if len(value) != 3 { - panic("parameter value has incorrect length") - } - C.gl4_2compat_glProgramUniformMatrix3dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix2dv.xml -func (gl *GL) ProgramUniformMatrix2dv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float64) { - if len(value) != 2 { - panic("parameter value has incorrect length") - } - C.gl4_2compat_glProgramUniformMatrix2dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix4fv.xml -func (gl *GL) ProgramUniformMatrix4fv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float32) { - if len(value) != 4 { - panic("parameter value has incorrect length") - } - C.gl4_2compat_glProgramUniformMatrix4fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix3fv.xml -func (gl *GL) ProgramUniformMatrix3fv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float32) { - if len(value) != 3 { - panic("parameter value has incorrect length") - } - C.gl4_2compat_glProgramUniformMatrix3fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix2fv.xml -func (gl *GL) ProgramUniformMatrix2fv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float32) { - if len(value) != 2 { - panic("parameter value has incorrect length") - } - C.gl4_2compat_glProgramUniformMatrix2fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform4uiv.xml -func (gl *GL) ProgramUniform4uiv(program glbase.Program, location glbase.Uniform, count int, value []uint32) { - C.gl4_2compat_glProgramUniform4uiv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform4ui.xml -func (gl *GL) ProgramUniform4ui(program glbase.Program, location glbase.Uniform, v0, v1, v2, v3 uint32) { - C.gl4_2compat_glProgramUniform4ui(gl.funcs, C.GLuint(program), C.GLint(location), C.GLuint(v0), C.GLuint(v1), C.GLuint(v2), C.GLuint(v3)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform4dv.xml -func (gl *GL) ProgramUniform4dv(program glbase.Program, location glbase.Uniform, count int, value []float64) { - if len(value) != 4 { - panic("parameter value has incorrect length") - } - C.gl4_2compat_glProgramUniform4dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform4d.xml -func (gl *GL) ProgramUniform4d(program glbase.Program, location glbase.Uniform, v0, v1, v2, v3 float64) { - C.gl4_2compat_glProgramUniform4d(gl.funcs, C.GLuint(program), C.GLint(location), C.GLdouble(v0), C.GLdouble(v1), C.GLdouble(v2), C.GLdouble(v3)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform4fv.xml -func (gl *GL) ProgramUniform4fv(program glbase.Program, location glbase.Uniform, count int, value []float32) { - if len(value) != 4 { - panic("parameter value has incorrect length") - } - C.gl4_2compat_glProgramUniform4fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform4f.xml -func (gl *GL) ProgramUniform4f(program glbase.Program, location glbase.Uniform, v0, v1, v2, v3 float32) { - C.gl4_2compat_glProgramUniform4f(gl.funcs, C.GLuint(program), C.GLint(location), C.GLfloat(v0), C.GLfloat(v1), C.GLfloat(v2), C.GLfloat(v3)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform4iv.xml -func (gl *GL) ProgramUniform4iv(program glbase.Program, location glbase.Uniform, count int, value []int32) { - if len(value) != 4 { - panic("parameter value has incorrect length") - } - C.gl4_2compat_glProgramUniform4iv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform4i.xml -func (gl *GL) ProgramUniform4i(program glbase.Program, location glbase.Uniform, v0, v1, v2, v3 int32) { - C.gl4_2compat_glProgramUniform4i(gl.funcs, C.GLuint(program), C.GLint(location), C.GLint(v0), C.GLint(v1), C.GLint(v2), C.GLint(v3)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform3uiv.xml -func (gl *GL) ProgramUniform3uiv(program glbase.Program, location glbase.Uniform, count int, value []uint32) { - C.gl4_2compat_glProgramUniform3uiv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform3ui.xml -func (gl *GL) ProgramUniform3ui(program glbase.Program, location glbase.Uniform, v0, v1, v2 uint32) { - C.gl4_2compat_glProgramUniform3ui(gl.funcs, C.GLuint(program), C.GLint(location), C.GLuint(v0), C.GLuint(v1), C.GLuint(v2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform3dv.xml -func (gl *GL) ProgramUniform3dv(program glbase.Program, location glbase.Uniform, count int, value []float64) { - if len(value) != 3 { - panic("parameter value has incorrect length") - } - C.gl4_2compat_glProgramUniform3dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform3d.xml -func (gl *GL) ProgramUniform3d(program glbase.Program, location glbase.Uniform, v0, v1, v2 float64) { - C.gl4_2compat_glProgramUniform3d(gl.funcs, C.GLuint(program), C.GLint(location), C.GLdouble(v0), C.GLdouble(v1), C.GLdouble(v2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform3fv.xml -func (gl *GL) ProgramUniform3fv(program glbase.Program, location glbase.Uniform, count int, value []float32) { - if len(value) != 3 { - panic("parameter value has incorrect length") - } - C.gl4_2compat_glProgramUniform3fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform3f.xml -func (gl *GL) ProgramUniform3f(program glbase.Program, location glbase.Uniform, v0, v1, v2 float32) { - C.gl4_2compat_glProgramUniform3f(gl.funcs, C.GLuint(program), C.GLint(location), C.GLfloat(v0), C.GLfloat(v1), C.GLfloat(v2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform3iv.xml -func (gl *GL) ProgramUniform3iv(program glbase.Program, location glbase.Uniform, count int, value []int32) { - if len(value) != 3 { - panic("parameter value has incorrect length") - } - C.gl4_2compat_glProgramUniform3iv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform3i.xml -func (gl *GL) ProgramUniform3i(program glbase.Program, location glbase.Uniform, v0, v1, v2 int32) { - C.gl4_2compat_glProgramUniform3i(gl.funcs, C.GLuint(program), C.GLint(location), C.GLint(v0), C.GLint(v1), C.GLint(v2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform2uiv.xml -func (gl *GL) ProgramUniform2uiv(program glbase.Program, location glbase.Uniform, count int, value []uint32) { - C.gl4_2compat_glProgramUniform2uiv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform2ui.xml -func (gl *GL) ProgramUniform2ui(program glbase.Program, location glbase.Uniform, v0, v1 uint32) { - C.gl4_2compat_glProgramUniform2ui(gl.funcs, C.GLuint(program), C.GLint(location), C.GLuint(v0), C.GLuint(v1)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform2dv.xml -func (gl *GL) ProgramUniform2dv(program glbase.Program, location glbase.Uniform, count int, value []float64) { - if len(value) != 2 { - panic("parameter value has incorrect length") - } - C.gl4_2compat_glProgramUniform2dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform2d.xml -func (gl *GL) ProgramUniform2d(program glbase.Program, location glbase.Uniform, v0, v1 float64) { - C.gl4_2compat_glProgramUniform2d(gl.funcs, C.GLuint(program), C.GLint(location), C.GLdouble(v0), C.GLdouble(v1)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform2fv.xml -func (gl *GL) ProgramUniform2fv(program glbase.Program, location glbase.Uniform, count int, value []float32) { - if len(value) != 2 { - panic("parameter value has incorrect length") - } - C.gl4_2compat_glProgramUniform2fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform2f.xml -func (gl *GL) ProgramUniform2f(program glbase.Program, location glbase.Uniform, v0, v1 float32) { - C.gl4_2compat_glProgramUniform2f(gl.funcs, C.GLuint(program), C.GLint(location), C.GLfloat(v0), C.GLfloat(v1)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform2iv.xml -func (gl *GL) ProgramUniform2iv(program glbase.Program, location glbase.Uniform, count int, value []int32) { - if len(value) != 2 { - panic("parameter value has incorrect length") - } - C.gl4_2compat_glProgramUniform2iv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform2i.xml -func (gl *GL) ProgramUniform2i(program glbase.Program, location glbase.Uniform, v0, v1 int32) { - C.gl4_2compat_glProgramUniform2i(gl.funcs, C.GLuint(program), C.GLint(location), C.GLint(v0), C.GLint(v1)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform1uiv.xml -func (gl *GL) ProgramUniform1uiv(program glbase.Program, location glbase.Uniform, count int, value []uint32) { - C.gl4_2compat_glProgramUniform1uiv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform1ui.xml -func (gl *GL) ProgramUniform1ui(program glbase.Program, location glbase.Uniform, v0 uint32) { - C.gl4_2compat_glProgramUniform1ui(gl.funcs, C.GLuint(program), C.GLint(location), C.GLuint(v0)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform1dv.xml -func (gl *GL) ProgramUniform1dv(program glbase.Program, location glbase.Uniform, count int, value []float64) { - C.gl4_2compat_glProgramUniform1dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform1d.xml -func (gl *GL) ProgramUniform1d(program glbase.Program, location glbase.Uniform, v0 float64) { - C.gl4_2compat_glProgramUniform1d(gl.funcs, C.GLuint(program), C.GLint(location), C.GLdouble(v0)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform1fv.xml -func (gl *GL) ProgramUniform1fv(program glbase.Program, location glbase.Uniform, count int, value []float32) { - C.gl4_2compat_glProgramUniform1fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform1f.xml -func (gl *GL) ProgramUniform1f(program glbase.Program, location glbase.Uniform, v0 float32) { - C.gl4_2compat_glProgramUniform1f(gl.funcs, C.GLuint(program), C.GLint(location), C.GLfloat(v0)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform1iv.xml -func (gl *GL) ProgramUniform1iv(program glbase.Program, location glbase.Uniform, count int, value []int32) { - C.gl4_2compat_glProgramUniform1iv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform1i.xml -func (gl *GL) ProgramUniform1i(program glbase.Program, location glbase.Uniform, v0 int32) { - C.gl4_2compat_glProgramUniform1i(gl.funcs, C.GLuint(program), C.GLint(location), C.GLint(v0)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetProgramPipelineiv.xml -func (gl *GL) GetProgramPipelineiv(pipeline uint32, pname glbase.Enum, params []int32) { - C.gl4_2compat_glGetProgramPipelineiv(gl.funcs, C.GLuint(pipeline), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsProgramPipeline.xml -func (gl *GL) IsProgramPipeline(pipeline uint32) bool { - glresult := C.gl4_2compat_glIsProgramPipeline(gl.funcs, C.GLuint(pipeline)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGenProgramPipelines.xml -func (gl *GL) GenProgramPipelines(n int, pipelines []uint32) { - C.gl4_2compat_glGenProgramPipelines(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&pipelines[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDeleteProgramPipelines.xml -func (gl *GL) DeleteProgramPipelines(n int, pipelines []uint32) { - C.gl4_2compat_glDeleteProgramPipelines(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&pipelines[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindProgramPipeline.xml -func (gl *GL) BindProgramPipeline(pipeline uint32) { - C.gl4_2compat_glBindProgramPipeline(gl.funcs, C.GLuint(pipeline)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glActiveShaderProgram.xml -func (gl *GL) ActiveShaderProgram(pipeline uint32, program glbase.Program) { - C.gl4_2compat_glActiveShaderProgram(gl.funcs, C.GLuint(pipeline), C.GLuint(program)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUseProgramStages.xml -func (gl *GL) UseProgramStages(pipeline uint32, stages glbase.Bitfield, program glbase.Program) { - C.gl4_2compat_glUseProgramStages(gl.funcs, C.GLuint(pipeline), C.GLbitfield(stages), C.GLuint(program)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramParameteri.xml -func (gl *GL) ProgramParameteri(program glbase.Program, pname glbase.Enum, value int32) { - C.gl4_2compat_glProgramParameteri(gl.funcs, C.GLuint(program), C.GLenum(pname), C.GLint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramBinary.xml -func (gl *GL) ProgramBinary(program glbase.Program, binaryFormat glbase.Enum, binary interface{}, length int32) { - var binary_ptr unsafe.Pointer - var binary_v = reflect.ValueOf(binary) - if binary != nil && binary_v.Kind() != reflect.Slice { - panic("parameter binary must be a slice") - } - if binary != nil { - binary_ptr = unsafe.Pointer(binary_v.Index(0).Addr().Pointer()) - } - C.gl4_2compat_glProgramBinary(gl.funcs, C.GLuint(program), C.GLenum(binaryFormat), binary_ptr, C.GLsizei(length)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetProgramBinary.xml -func (gl *GL) GetProgramBinary(program glbase.Program, bufSize int32, length []int32, binaryFormat []glbase.Enum, binary interface{}) { - var binary_ptr unsafe.Pointer - var binary_v = reflect.ValueOf(binary) - if binary != nil && binary_v.Kind() != reflect.Slice { - panic("parameter binary must be a slice") - } - if binary != nil { - binary_ptr = unsafe.Pointer(binary_v.Index(0).Addr().Pointer()) - } - C.gl4_2compat_glGetProgramBinary(gl.funcs, C.GLuint(program), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLenum)(unsafe.Pointer(&binaryFormat[0])), binary_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearDepthf.xml -func (gl *GL) ClearDepthf(dd float32) { - C.gl4_2compat_glClearDepthf(gl.funcs, C.GLfloat(dd)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDepthRangef.xml -func (gl *GL) DepthRangef(n, f float32) { - C.gl4_2compat_glDepthRangef(gl.funcs, C.GLfloat(n), C.GLfloat(f)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetShaderPrecisionFormat.xml -func (gl *GL) GetShaderPrecisionFormat(shadertype, precisionType glbase.Enum, range_, precision []int32) { - C.gl4_2compat_glGetShaderPrecisionFormat(gl.funcs, C.GLenum(shadertype), C.GLenum(precisionType), (*C.GLint)(unsafe.Pointer(&range_[0])), (*C.GLint)(unsafe.Pointer(&precision[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glShaderBinary.xml -func (gl *GL) ShaderBinary(count int, shaders []glbase.Shader, binaryFormat glbase.Enum, binary interface{}, length int32) { - var binary_ptr unsafe.Pointer - var binary_v = reflect.ValueOf(binary) - if binary != nil && binary_v.Kind() != reflect.Slice { - panic("parameter binary must be a slice") - } - if binary != nil { - binary_ptr = unsafe.Pointer(binary_v.Index(0).Addr().Pointer()) - } - C.gl4_2compat_glShaderBinary(gl.funcs, C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&shaders[0])), C.GLenum(binaryFormat), binary_ptr, C.GLsizei(length)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glReleaseShaderCompiler.xml -func (gl *GL) ReleaseShaderCompiler() { - C.gl4_2compat_glReleaseShaderCompiler(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexStorage3D.xml -func (gl *GL) TexStorage3D(target glbase.Enum, levels int32, internalFormat glbase.Enum, width, height int, depth int32) { - C.gl4_2compat_glTexStorage3D(gl.funcs, C.GLenum(target), C.GLsizei(levels), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexStorage2D.xml -func (gl *GL) TexStorage2D(target glbase.Enum, levels int32, internalFormat glbase.Enum, width, height int) { - C.gl4_2compat_glTexStorage2D(gl.funcs, C.GLenum(target), C.GLsizei(levels), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexStorage1D.xml -func (gl *GL) TexStorage1D(target glbase.Enum, levels int32, internalFormat glbase.Enum, width int) { - C.gl4_2compat_glTexStorage1D(gl.funcs, C.GLenum(target), C.GLsizei(levels), C.GLenum(internalFormat), C.GLsizei(width)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMemoryBarrier.xml -func (gl *GL) MemoryBarrier(barriers glbase.Bitfield) { - C.gl4_2compat_glMemoryBarrier(gl.funcs, C.GLbitfield(barriers)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindImageTexture.xml -func (gl *GL) BindImageTexture(unit uint32, texture glbase.Texture, level int, layered bool, layer int32, access, format glbase.Enum) { - C.gl4_2compat_glBindImageTexture(gl.funcs, C.GLuint(unit), C.GLuint(texture), C.GLint(level), *(*C.GLboolean)(unsafe.Pointer(&layered)), C.GLint(layer), C.GLenum(access), C.GLenum(format)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveAtomicCounterBufferiv.xml -func (gl *GL) GetActiveAtomicCounterBufferiv(program glbase.Program, bufferIndex uint32, pname glbase.Enum, params []int32) { - C.gl4_2compat_glGetActiveAtomicCounterBufferiv(gl.funcs, C.GLuint(program), C.GLuint(bufferIndex), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetInternalformativ.xml -func (gl *GL) GetInternalformativ(target, internalFormat, pname glbase.Enum, bufSize int32, params []int32) { - C.gl4_2compat_glGetInternalformativ(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLenum(pname), C.GLsizei(bufSize), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawTransformFeedbackStreamInstanced.xml -func (gl *GL) DrawTransformFeedbackStreamInstanced(mode glbase.Enum, id, stream uint32, instancecount int32) { - C.gl4_2compat_glDrawTransformFeedbackStreamInstanced(gl.funcs, C.GLenum(mode), C.GLuint(id), C.GLuint(stream), C.GLsizei(instancecount)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawTransformFeedbackInstanced.xml -func (gl *GL) DrawTransformFeedbackInstanced(mode glbase.Enum, id uint32, instancecount int32) { - C.gl4_2compat_glDrawTransformFeedbackInstanced(gl.funcs, C.GLenum(mode), C.GLuint(id), C.GLsizei(instancecount)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawElementsInstancedBaseVertexBaseInstance.xml -func (gl *GL) DrawElementsInstancedBaseVertexBaseInstance(mode glbase.Enum, count int, gltype glbase.Enum, indices interface{}, instancecount, basevertex int32, baseinstance uint32) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl4_2compat_glDrawElementsInstancedBaseVertexBaseInstance(gl.funcs, C.GLenum(mode), C.GLsizei(count), C.GLenum(gltype), indices_ptr, C.GLsizei(instancecount), C.GLint(basevertex), C.GLuint(baseinstance)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawElementsInstancedBaseInstance.xml -func (gl *GL) DrawElementsInstancedBaseInstance(mode glbase.Enum, count int, gltype glbase.Enum, indices interface{}, instancecount int32, baseinstance uint32) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl4_2compat_glDrawElementsInstancedBaseInstance(gl.funcs, C.GLenum(mode), C.GLsizei(count), C.GLenum(gltype), indices_ptr, C.GLsizei(instancecount), C.GLuint(baseinstance)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawArraysInstancedBaseInstance.xml -func (gl *GL) DrawArraysInstancedBaseInstance(mode glbase.Enum, first, count int, instancecount int32, baseinstance uint32) { - C.gl4_2compat_glDrawArraysInstancedBaseInstance(gl.funcs, C.GLenum(mode), C.GLint(first), C.GLsizei(count), C.GLsizei(instancecount), C.GLuint(baseinstance)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTranslatef.xml -func (gl *GL) Translatef(x, y, z float32) { - C.gl4_2compat_glTranslatef(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTranslated.xml -func (gl *GL) Translated(x, y, z float64) { - C.gl4_2compat_glTranslated(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glScalef.xml -func (gl *GL) Scalef(x, y, z float32) { - C.gl4_2compat_glScalef(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glScaled.xml -func (gl *GL) Scaled(x, y, z float64) { - C.gl4_2compat_glScaled(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRotatef.xml -func (gl *GL) Rotatef(angle, x, y, z float32) { - C.gl4_2compat_glRotatef(gl.funcs, C.GLfloat(angle), C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRotated.xml -func (gl *GL) Rotated(angle, x, y, z float64) { - C.gl4_2compat_glRotated(gl.funcs, C.GLdouble(angle), C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPushMatrix.xml -func (gl *GL) PushMatrix() { - C.gl4_2compat_glPushMatrix(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPopMatrix.xml -func (gl *GL) PopMatrix() { - C.gl4_2compat_glPopMatrix(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glOrtho.xml -func (gl *GL) Ortho(left, right, bottom, top, zNear, zFar float64) { - C.gl4_2compat_glOrtho(gl.funcs, C.GLdouble(left), C.GLdouble(right), C.GLdouble(bottom), C.GLdouble(top), C.GLdouble(zNear), C.GLdouble(zFar)) -} - -// MultMatrixd multiplies the current matrix with the provided matrix. -// -// The m parameter must hold 16 consecutive elements of a 4x4 column-major matrix. -// -// The current matrix is determined by the current matrix mode (see -// MatrixMode). It is either the projection matrix, modelview matrix, or the -// texture matrix. -// -// For example, if the current matrix is C and the coordinates to be transformed -// are v = (v[0], v[1], v[2], v[3]), then the current transformation is C × v, or -// -// c[0] c[4] c[8] c[12] v[0] -// c[1] c[5] c[9] c[13] v[1] -// c[2] c[6] c[10] c[14] X v[2] -// c[3] c[7] c[11] c[15] v[3] -// -// Calling MultMatrix with an argument of m = m[0], m[1], ..., m[15] -// replaces the current transformation with (C X M) x v, or -// -// c[0] c[4] c[8] c[12] m[0] m[4] m[8] m[12] v[0] -// c[1] c[5] c[9] c[13] m[1] m[5] m[9] m[13] v[1] -// c[2] c[6] c[10] c[14] X m[2] m[6] m[10] m[14] X v[2] -// c[3] c[7] c[11] c[15] m[3] m[7] m[11] m[15] v[3] -// -// Where 'X' denotes matrix multiplication, and v is represented as a 4x1 matrix. -// -// While the elements of the matrix may be specified with single or double -// precision, the GL may store or operate on these values in less-than-single -// precision. -// -// In many computer languages, 4×4 arrays are represented in row-major -// order. The transformations just described represent these matrices in -// column-major order. The order of the multiplication is important. For -// example, if the current transformation is a rotation, and MultMatrix is -// called with a translation matrix, the translation is done directly on the -// coordinates to be transformed, while the rotation is done on the results -// of that translation. -// -// GL.INVALID_OPERATION is generated if MultMatrix is executed between the -// execution of Begin and the corresponding execution of End. -func (gl *GL) MultMatrixd(m []float64) { - if len(m) != 16 { - panic("parameter m must have length 16 for the 4x4 matrix") - } - C.gl4_2compat_glMultMatrixd(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&m[0]))) -} - -// MultMatrixf multiplies the current matrix with the provided matrix. -// -// The m parameter must hold 16 consecutive elements of a 4x4 column-major matrix. -// -// The current matrix is determined by the current matrix mode (see -// MatrixMode). It is either the projection matrix, modelview matrix, or the -// texture matrix. -// -// For example, if the current matrix is C and the coordinates to be transformed -// are v = (v[0], v[1], v[2], v[3]), then the current transformation is C × v, or -// -// c[0] c[4] c[8] c[12] v[0] -// c[1] c[5] c[9] c[13] v[1] -// c[2] c[6] c[10] c[14] X v[2] -// c[3] c[7] c[11] c[15] v[3] -// -// Calling MultMatrix with an argument of m = m[0], m[1], ..., m[15] -// replaces the current transformation with (C X M) x v, or -// -// c[0] c[4] c[8] c[12] m[0] m[4] m[8] m[12] v[0] -// c[1] c[5] c[9] c[13] m[1] m[5] m[9] m[13] v[1] -// c[2] c[6] c[10] c[14] X m[2] m[6] m[10] m[14] X v[2] -// c[3] c[7] c[11] c[15] m[3] m[7] m[11] m[15] v[3] -// -// Where 'X' denotes matrix multiplication, and v is represented as a 4x1 matrix. -// -// While the elements of the matrix may be specified with single or double -// precision, the GL may store or operate on these values in less-than-single -// precision. -// -// In many computer languages, 4×4 arrays are represented in row-major -// order. The transformations just described represent these matrices in -// column-major order. The order of the multiplication is important. For -// example, if the current transformation is a rotation, and MultMatrix is -// called with a translation matrix, the translation is done directly on the -// coordinates to be transformed, while the rotation is done on the results -// of that translation. -// -// GL.INVALID_OPERATION is generated if MultMatrix is executed between the -// execution of Begin and the corresponding execution of End. -func (gl *GL) MultMatrixf(m []float32) { - if len(m) != 16 { - panic("parameter m must have length 16 for the 4x4 matrix") - } - C.gl4_2compat_glMultMatrixf(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMatrixMode.xml -func (gl *GL) MatrixMode(mode glbase.Enum) { - C.gl4_2compat_glMatrixMode(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLoadMatrixd.xml -func (gl *GL) LoadMatrixd(m []float64) { - C.gl4_2compat_glLoadMatrixd(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLoadMatrixf.xml -func (gl *GL) LoadMatrixf(m []float32) { - C.gl4_2compat_glLoadMatrixf(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLoadIdentity.xml -func (gl *GL) LoadIdentity() { - C.gl4_2compat_glLoadIdentity(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFrustum.xml -func (gl *GL) Frustum(left, right, bottom, top, zNear, zFar float64) { - C.gl4_2compat_glFrustum(gl.funcs, C.GLdouble(left), C.GLdouble(right), C.GLdouble(bottom), C.GLdouble(top), C.GLdouble(zNear), C.GLdouble(zFar)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsList.xml -func (gl *GL) IsList(list uint32) bool { - glresult := C.gl4_2compat_glIsList(gl.funcs, C.GLuint(list)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexGeniv.xml -func (gl *GL) GetTexGeniv(coord, pname glbase.Enum, params []int32) { - C.gl4_2compat_glGetTexGeniv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexGenfv.xml -func (gl *GL) GetTexGenfv(coord, pname glbase.Enum, params []float32) { - C.gl4_2compat_glGetTexGenfv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexGendv.xml -func (gl *GL) GetTexGendv(coord, pname glbase.Enum, params []float64) { - C.gl4_2compat_glGetTexGendv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexEnviv.xml -func (gl *GL) GetTexEnviv(target, pname glbase.Enum, params []int32) { - C.gl4_2compat_glGetTexEnviv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexEnvfv.xml -func (gl *GL) GetTexEnvfv(target, pname glbase.Enum, params []float32) { - C.gl4_2compat_glGetTexEnvfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetPolygonStipple.xml -func (gl *GL) GetPolygonStipple(mask []uint8) { - C.gl4_2compat_glGetPolygonStipple(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&mask[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetPixelMapusv.xml -func (gl *GL) GetPixelMapusv(glmap glbase.Enum, values []uint16) { - C.gl4_2compat_glGetPixelMapusv(gl.funcs, C.GLenum(glmap), (*C.GLushort)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetPixelMapuiv.xml -func (gl *GL) GetPixelMapuiv(glmap glbase.Enum, values []uint32) { - C.gl4_2compat_glGetPixelMapuiv(gl.funcs, C.GLenum(glmap), (*C.GLuint)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetPixelMapfv.xml -func (gl *GL) GetPixelMapfv(glmap glbase.Enum, values []float32) { - C.gl4_2compat_glGetPixelMapfv(gl.funcs, C.GLenum(glmap), (*C.GLfloat)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetMaterialiv.xml -func (gl *GL) GetMaterialiv(face, pname glbase.Enum, params []int32) { - C.gl4_2compat_glGetMaterialiv(gl.funcs, C.GLenum(face), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetMaterialfv.xml -func (gl *GL) GetMaterialfv(face, pname glbase.Enum, params []float32) { - C.gl4_2compat_glGetMaterialfv(gl.funcs, C.GLenum(face), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetMapiv.xml -func (gl *GL) GetMapiv(target, query glbase.Enum, v []int32) { - C.gl4_2compat_glGetMapiv(gl.funcs, C.GLenum(target), C.GLenum(query), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetMapfv.xml -func (gl *GL) GetMapfv(target, query glbase.Enum, v []float32) { - C.gl4_2compat_glGetMapfv(gl.funcs, C.GLenum(target), C.GLenum(query), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetMapdv.xml -func (gl *GL) GetMapdv(target, query glbase.Enum, v []float64) { - C.gl4_2compat_glGetMapdv(gl.funcs, C.GLenum(target), C.GLenum(query), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetLightiv.xml -func (gl *GL) GetLightiv(light, pname glbase.Enum, params []int32) { - C.gl4_2compat_glGetLightiv(gl.funcs, C.GLenum(light), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetLightfv.xml -func (gl *GL) GetLightfv(light, pname glbase.Enum, params []float32) { - C.gl4_2compat_glGetLightfv(gl.funcs, C.GLenum(light), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetClipPlane.xml -func (gl *GL) GetClipPlane(plane glbase.Enum, equation []float64) { - C.gl4_2compat_glGetClipPlane(gl.funcs, C.GLenum(plane), (*C.GLdouble)(unsafe.Pointer(&equation[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawPixels.xml -func (gl *GL) DrawPixels(width, height int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_2compat_glDrawPixels(gl.funcs, C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyPixels.xml -func (gl *GL) CopyPixels(x, y, width, height int, gltype glbase.Enum) { - C.gl4_2compat_glCopyPixels(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height), C.GLenum(gltype)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPixelMapusv.xml -func (gl *GL) PixelMapusv(glmap glbase.Enum, mapsize int32, values []uint16) { - C.gl4_2compat_glPixelMapusv(gl.funcs, C.GLenum(glmap), C.GLint(mapsize), (*C.GLushort)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPixelMapuiv.xml -func (gl *GL) PixelMapuiv(glmap glbase.Enum, mapsize int32, values []uint32) { - C.gl4_2compat_glPixelMapuiv(gl.funcs, C.GLenum(glmap), C.GLint(mapsize), (*C.GLuint)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPixelMapfv.xml -func (gl *GL) PixelMapfv(glmap glbase.Enum, mapsize int32, values []float32) { - C.gl4_2compat_glPixelMapfv(gl.funcs, C.GLenum(glmap), C.GLint(mapsize), (*C.GLfloat)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPixelTransferi.xml -func (gl *GL) PixelTransferi(pname glbase.Enum, param int32) { - C.gl4_2compat_glPixelTransferi(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPixelTransferf.xml -func (gl *GL) PixelTransferf(pname glbase.Enum, param float32) { - C.gl4_2compat_glPixelTransferf(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPixelZoom.xml -func (gl *GL) PixelZoom(xfactor, yfactor float32) { - C.gl4_2compat_glPixelZoom(gl.funcs, C.GLfloat(xfactor), C.GLfloat(yfactor)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glAlphaFunc.xml -func (gl *GL) AlphaFunc(glfunc glbase.Enum, ref float32) { - C.gl4_2compat_glAlphaFunc(gl.funcs, C.GLenum(glfunc), C.GLfloat(ref)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEvalPoint2.xml -func (gl *GL) EvalPoint2(i, j int32) { - C.gl4_2compat_glEvalPoint2(gl.funcs, C.GLint(i), C.GLint(j)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEvalMesh2.xml -func (gl *GL) EvalMesh2(mode glbase.Enum, i1, i2, j1, j2 int32) { - C.gl4_2compat_glEvalMesh2(gl.funcs, C.GLenum(mode), C.GLint(i1), C.GLint(i2), C.GLint(j1), C.GLint(j2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEvalPoint1.xml -func (gl *GL) EvalPoint1(i int32) { - C.gl4_2compat_glEvalPoint1(gl.funcs, C.GLint(i)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEvalMesh1.xml -func (gl *GL) EvalMesh1(mode glbase.Enum, i1, i2 int32) { - C.gl4_2compat_glEvalMesh1(gl.funcs, C.GLenum(mode), C.GLint(i1), C.GLint(i2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEvalCoord2fv.xml -func (gl *GL) EvalCoord2fv(u []float32) { - if len(u) != 2 { - panic("parameter u has incorrect length") - } - C.gl4_2compat_glEvalCoord2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&u[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEvalCoord2f.xml -func (gl *GL) EvalCoord2f(u, v float32) { - C.gl4_2compat_glEvalCoord2f(gl.funcs, C.GLfloat(u), C.GLfloat(v)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEvalCoord2dv.xml -func (gl *GL) EvalCoord2dv(u []float64) { - if len(u) != 2 { - panic("parameter u has incorrect length") - } - C.gl4_2compat_glEvalCoord2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&u[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEvalCoord2d.xml -func (gl *GL) EvalCoord2d(u, v float64) { - C.gl4_2compat_glEvalCoord2d(gl.funcs, C.GLdouble(u), C.GLdouble(v)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEvalCoord1fv.xml -func (gl *GL) EvalCoord1fv(u []float32) { - C.gl4_2compat_glEvalCoord1fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&u[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEvalCoord1f.xml -func (gl *GL) EvalCoord1f(u float32) { - C.gl4_2compat_glEvalCoord1f(gl.funcs, C.GLfloat(u)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEvalCoord1dv.xml -func (gl *GL) EvalCoord1dv(u []float64) { - C.gl4_2compat_glEvalCoord1dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&u[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEvalCoord1d.xml -func (gl *GL) EvalCoord1d(u float64) { - C.gl4_2compat_glEvalCoord1d(gl.funcs, C.GLdouble(u)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMapGrid2f.xml -func (gl *GL) MapGrid2f(un int32, u1, u2 float32, vn int32, v1, v2 float32) { - C.gl4_2compat_glMapGrid2f(gl.funcs, C.GLint(un), C.GLfloat(u1), C.GLfloat(u2), C.GLint(vn), C.GLfloat(v1), C.GLfloat(v2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMapGrid2d.xml -func (gl *GL) MapGrid2d(un int32, u1, u2 float64, vn int32, v1, v2 float64) { - C.gl4_2compat_glMapGrid2d(gl.funcs, C.GLint(un), C.GLdouble(u1), C.GLdouble(u2), C.GLint(vn), C.GLdouble(v1), C.GLdouble(v2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMapGrid1f.xml -func (gl *GL) MapGrid1f(un int32, u1, u2 float32) { - C.gl4_2compat_glMapGrid1f(gl.funcs, C.GLint(un), C.GLfloat(u1), C.GLfloat(u2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMapGrid1d.xml -func (gl *GL) MapGrid1d(un int32, u1, u2 float64) { - C.gl4_2compat_glMapGrid1d(gl.funcs, C.GLint(un), C.GLdouble(u1), C.GLdouble(u2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMap2f.xml -func (gl *GL) Map2f(target glbase.Enum, u1, u2 float32, ustride, uorder int32, v1, v2 float32, vstride, vorder int32, points []float32) { - C.gl4_2compat_glMap2f(gl.funcs, C.GLenum(target), C.GLfloat(u1), C.GLfloat(u2), C.GLint(ustride), C.GLint(uorder), C.GLfloat(v1), C.GLfloat(v2), C.GLint(vstride), C.GLint(vorder), (*C.GLfloat)(unsafe.Pointer(&points[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMap2d.xml -func (gl *GL) Map2d(target glbase.Enum, u1, u2 float64, ustride, uorder int32, v1, v2 float64, vstride, vorder int32, points []float64) { - C.gl4_2compat_glMap2d(gl.funcs, C.GLenum(target), C.GLdouble(u1), C.GLdouble(u2), C.GLint(ustride), C.GLint(uorder), C.GLdouble(v1), C.GLdouble(v2), C.GLint(vstride), C.GLint(vorder), (*C.GLdouble)(unsafe.Pointer(&points[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMap1f.xml -func (gl *GL) Map1f(target glbase.Enum, u1, u2 float32, stride, order int, points []float32) { - C.gl4_2compat_glMap1f(gl.funcs, C.GLenum(target), C.GLfloat(u1), C.GLfloat(u2), C.GLint(stride), C.GLint(order), (*C.GLfloat)(unsafe.Pointer(&points[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMap1d.xml -func (gl *GL) Map1d(target glbase.Enum, u1, u2 float64, stride, order int, points []float64) { - C.gl4_2compat_glMap1d(gl.funcs, C.GLenum(target), C.GLdouble(u1), C.GLdouble(u2), C.GLint(stride), C.GLint(order), (*C.GLdouble)(unsafe.Pointer(&points[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPushAttrib.xml -func (gl *GL) PushAttrib(mask glbase.Bitfield) { - C.gl4_2compat_glPushAttrib(gl.funcs, C.GLbitfield(mask)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPopAttrib.xml -func (gl *GL) PopAttrib() { - C.gl4_2compat_glPopAttrib(gl.funcs) -} - -// Accum executes an operation on the accumulation buffer. -// -// Parameter op defines the accumulation buffer operation (GL.ACCUM, GL.LOAD, -// GL.ADD, GL.MULT, or GL.RETURN) and specifies how the value parameter is -// used. -// -// The accumulation buffer is an extended-range color buffer. Images are not -// rendered into it. Rather, images rendered into one of the color buffers -// are added to the contents of the accumulation buffer after rendering. -// Effects such as antialiasing (of points, lines, and polygons), motion -// blur, and depth of field can be created by accumulating images generated -// with different transformation matrices. -// -// Each pixel in the accumulation buffer consists of red, green, blue, and -// alpha values. The number of bits per component in the accumulation buffer -// depends on the implementation. You can examine this number by calling -// GetIntegerv four times, with arguments GL.ACCUM_RED_BITS, -// GL.ACCUM_GREEN_BITS, GL.ACCUM_BLUE_BITS, and GL.ACCUM_ALPHA_BITS. -// Regardless of the number of bits per component, the range of values stored -// by each component is (-1, 1). The accumulation buffer pixels are mapped -// one-to-one with frame buffer pixels. -// -// All accumulation buffer operations are limited to the area of the current -// scissor box and applied identically to the red, green, blue, and alpha -// components of each pixel. If a Accum operation results in a value outside -// the range (-1, 1), the contents of an accumulation buffer pixel component -// are undefined. -// -// The operations are as follows: -// -// GL.ACCUM -// Obtains R, G, B, and A values from the buffer currently selected for -// reading (see ReadBuffer). Each component value is divided by 2 n - -// 1 , where n is the number of bits allocated to each color component -// in the currently selected buffer. The result is a floating-point -// value in the range 0 1 , which is multiplied by value and added to -// the corresponding pixel component in the accumulation buffer, -// thereby updating the accumulation buffer. -// -// GL.LOAD -// Similar to GL.ACCUM, except that the current value in the -// accumulation buffer is not used in the calculation of the new value. -// That is, the R, G, B, and A values from the currently selected -// buffer are divided by 2 n - 1 , multiplied by value, and then stored -// in the corresponding accumulation buffer cell, overwriting the -// current value. -// -// GL.ADD -// Adds value to each R, G, B, and A in the accumulation buffer. -// -// GL.MULT -// Multiplies each R, G, B, and A in the accumulation buffer by value -// and returns the scaled component to its corresponding accumulation -// buffer location. -// -// GL.RETURN -// Transfers accumulation buffer values to the color buffer or buffers -// currently selected for writing. Each R, G, B, and A component is -// multiplied by value, then multiplied by 2 n - 1 , clamped to the -// range 0 2 n - 1 , and stored in the corresponding display buffer -// cell. The only fragment operations that are applied to this transfer -// are pixel ownership, scissor, dithering, and color writemasks. -// -// To clear the accumulation buffer, call ClearAccum with R, G, B, and A -// values to set it to, then call Clear with the accumulation buffer -// enabled. -// -// Error GL.INVALID_ENUM is generated if op is not an accepted value. -// GL.INVALID_OPERATION is generated if there is no accumulation buffer. -// GL.INVALID_OPERATION is generated if Accum is executed between the -// execution of Begin and the corresponding execution of End. -func (gl *GL) Accum(op glbase.Enum, value float32) { - C.gl4_2compat_glAccum(gl.funcs, C.GLenum(op), C.GLfloat(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIndexMask.xml -func (gl *GL) IndexMask(mask uint32) { - C.gl4_2compat_glIndexMask(gl.funcs, C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearIndex.xml -func (gl *GL) ClearIndex(c float32) { - C.gl4_2compat_glClearIndex(gl.funcs, C.GLfloat(c)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearAccum.xml -func (gl *GL) ClearAccum(red, green, blue, alpha float32) { - C.gl4_2compat_glClearAccum(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPushName.xml -func (gl *GL) PushName(name uint32) { - C.gl4_2compat_glPushName(gl.funcs, C.GLuint(name)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPopName.xml -func (gl *GL) PopName() { - C.gl4_2compat_glPopName(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPassThrough.xml -func (gl *GL) PassThrough(token float32) { - C.gl4_2compat_glPassThrough(gl.funcs, C.GLfloat(token)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLoadName.xml -func (gl *GL) LoadName(name uint32) { - C.gl4_2compat_glLoadName(gl.funcs, C.GLuint(name)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glInitNames.xml -func (gl *GL) InitNames() { - C.gl4_2compat_glInitNames(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRenderMode.xml -func (gl *GL) RenderMode(mode glbase.Enum) int32 { - glresult := C.gl4_2compat_glRenderMode(gl.funcs, C.GLenum(mode)) - return int32(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSelectBuffer.xml -func (gl *GL) SelectBuffer(size int, buffer []glbase.Buffer) { - C.gl4_2compat_glSelectBuffer(gl.funcs, C.GLsizei(size), (*C.GLuint)(unsafe.Pointer(&buffer[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFeedbackBuffer.xml -func (gl *GL) FeedbackBuffer(size int, gltype glbase.Enum, buffer []float32) { - C.gl4_2compat_glFeedbackBuffer(gl.funcs, C.GLsizei(size), C.GLenum(gltype), (*C.GLfloat)(unsafe.Pointer(&buffer[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexGeniv.xml -func (gl *GL) TexGeniv(coord, pname glbase.Enum, params []int32) { - C.gl4_2compat_glTexGeniv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexGeni.xml -func (gl *GL) TexGeni(coord, pname glbase.Enum, param int32) { - C.gl4_2compat_glTexGeni(gl.funcs, C.GLenum(coord), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexGenfv.xml -func (gl *GL) TexGenfv(coord, pname glbase.Enum, params []float32) { - C.gl4_2compat_glTexGenfv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexGenf.xml -func (gl *GL) TexGenf(coord, pname glbase.Enum, param float32) { - C.gl4_2compat_glTexGenf(gl.funcs, C.GLenum(coord), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexGendv.xml -func (gl *GL) TexGendv(coord, pname glbase.Enum, params []float64) { - C.gl4_2compat_glTexGendv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexGend.xml -func (gl *GL) TexGend(coord, pname glbase.Enum, param float64) { - C.gl4_2compat_glTexGend(gl.funcs, C.GLenum(coord), C.GLenum(pname), C.GLdouble(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexEnviv.xml -func (gl *GL) TexEnviv(target, pname glbase.Enum, params []int32) { - C.gl4_2compat_glTexEnviv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexEnvi.xml -func (gl *GL) TexEnvi(target, pname glbase.Enum, param int32) { - C.gl4_2compat_glTexEnvi(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexEnvfv.xml -func (gl *GL) TexEnvfv(target, pname glbase.Enum, params []float32) { - C.gl4_2compat_glTexEnvfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexEnvf.xml -func (gl *GL) TexEnvf(target, pname glbase.Enum, param float32) { - C.gl4_2compat_glTexEnvf(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glShadeModel.xml -func (gl *GL) ShadeModel(mode glbase.Enum) { - C.gl4_2compat_glShadeModel(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPolygonStipple.xml -func (gl *GL) PolygonStipple(mask []uint8) { - C.gl4_2compat_glPolygonStipple(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&mask[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMaterialiv.xml -func (gl *GL) Materialiv(face, pname glbase.Enum, params []int32) { - C.gl4_2compat_glMaterialiv(gl.funcs, C.GLenum(face), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMateriali.xml -func (gl *GL) Materiali(face, pname glbase.Enum, param int32) { - C.gl4_2compat_glMateriali(gl.funcs, C.GLenum(face), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMaterialfv.xml -func (gl *GL) Materialfv(face, pname glbase.Enum, params []float32) { - C.gl4_2compat_glMaterialfv(gl.funcs, C.GLenum(face), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMaterialf.xml -func (gl *GL) Materialf(face, pname glbase.Enum, param float32) { - C.gl4_2compat_glMaterialf(gl.funcs, C.GLenum(face), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLineStipple.xml -func (gl *GL) LineStipple(factor int32, pattern uint16) { - C.gl4_2compat_glLineStipple(gl.funcs, C.GLint(factor), C.GLushort(pattern)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLightModeliv.xml -func (gl *GL) LightModeliv(pname glbase.Enum, params []int32) { - C.gl4_2compat_glLightModeliv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLightModeli.xml -func (gl *GL) LightModeli(pname glbase.Enum, param int32) { - C.gl4_2compat_glLightModeli(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLightModelfv.xml -func (gl *GL) LightModelfv(pname glbase.Enum, params []float32) { - C.gl4_2compat_glLightModelfv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLightModelf.xml -func (gl *GL) LightModelf(pname glbase.Enum, param float32) { - C.gl4_2compat_glLightModelf(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLightiv.xml -func (gl *GL) Lightiv(light, pname glbase.Enum, params []int32) { - C.gl4_2compat_glLightiv(gl.funcs, C.GLenum(light), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLighti.xml -func (gl *GL) Lighti(light, pname glbase.Enum, param int32) { - C.gl4_2compat_glLighti(gl.funcs, C.GLenum(light), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLightfv.xml -func (gl *GL) Lightfv(light, pname glbase.Enum, params []float32) { - C.gl4_2compat_glLightfv(gl.funcs, C.GLenum(light), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLightf.xml -func (gl *GL) Lightf(light, pname glbase.Enum, param float32) { - C.gl4_2compat_glLightf(gl.funcs, C.GLenum(light), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFogiv.xml -func (gl *GL) Fogiv(pname glbase.Enum, params []int32) { - C.gl4_2compat_glFogiv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFogi.xml -func (gl *GL) Fogi(pname glbase.Enum, param int32) { - C.gl4_2compat_glFogi(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFogfv.xml -func (gl *GL) Fogfv(pname glbase.Enum, params []float32) { - C.gl4_2compat_glFogfv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFogf.xml -func (gl *GL) Fogf(pname glbase.Enum, param float32) { - C.gl4_2compat_glFogf(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorMaterial.xml -func (gl *GL) ColorMaterial(face, mode glbase.Enum) { - C.gl4_2compat_glColorMaterial(gl.funcs, C.GLenum(face), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClipPlane.xml -func (gl *GL) ClipPlane(plane glbase.Enum, equation []float64) { - C.gl4_2compat_glClipPlane(gl.funcs, C.GLenum(plane), (*C.GLdouble)(unsafe.Pointer(&equation[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex4sv.xml -func (gl *GL) Vertex4sv(v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glVertex4sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex4s.xml -func (gl *GL) Vertex4s(x, y, z, w int16) { - C.gl4_2compat_glVertex4s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z), C.GLshort(w)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex4iv.xml -func (gl *GL) Vertex4iv(v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glVertex4iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex4i.xml -func (gl *GL) Vertex4i(x, y, z, w int) { - C.gl4_2compat_glVertex4i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z), C.GLint(w)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex4fv.xml -func (gl *GL) Vertex4fv(v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glVertex4fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex4f.xml -func (gl *GL) Vertex4f(x, y, z, w float32) { - C.gl4_2compat_glVertex4f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z), C.GLfloat(w)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex4dv.xml -func (gl *GL) Vertex4dv(v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glVertex4dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex4d.xml -func (gl *GL) Vertex4d(x, y, z, w float64) { - C.gl4_2compat_glVertex4d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z), C.GLdouble(w)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex3sv.xml -func (gl *GL) Vertex3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glVertex3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex3s.xml -func (gl *GL) Vertex3s(x, y, z int16) { - C.gl4_2compat_glVertex3s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex3iv.xml -func (gl *GL) Vertex3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glVertex3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex3i.xml -func (gl *GL) Vertex3i(x, y, z int) { - C.gl4_2compat_glVertex3i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex3fv.xml -func (gl *GL) Vertex3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glVertex3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex3f.xml -func (gl *GL) Vertex3f(x, y, z float32) { - C.gl4_2compat_glVertex3f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex3dv.xml -func (gl *GL) Vertex3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glVertex3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex3d.xml -func (gl *GL) Vertex3d(x, y, z float64) { - C.gl4_2compat_glVertex3d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex2sv.xml -func (gl *GL) Vertex2sv(v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glVertex2sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex2s.xml -func (gl *GL) Vertex2s(x, y int16) { - C.gl4_2compat_glVertex2s(gl.funcs, C.GLshort(x), C.GLshort(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex2iv.xml -func (gl *GL) Vertex2iv(v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glVertex2iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex2i.xml -func (gl *GL) Vertex2i(x, y int) { - C.gl4_2compat_glVertex2i(gl.funcs, C.GLint(x), C.GLint(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex2fv.xml -func (gl *GL) Vertex2fv(v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glVertex2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex2f.xml -func (gl *GL) Vertex2f(x, y float32) { - C.gl4_2compat_glVertex2f(gl.funcs, C.GLfloat(x), C.GLfloat(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex2dv.xml -func (gl *GL) Vertex2dv(v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glVertex2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex2d.xml -func (gl *GL) Vertex2d(x, y float64) { - C.gl4_2compat_glVertex2d(gl.funcs, C.GLdouble(x), C.GLdouble(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord4sv.xml -func (gl *GL) TexCoord4sv(v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glTexCoord4sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord4s.xml -func (gl *GL) TexCoord4s(s, t, r, q int16) { - C.gl4_2compat_glTexCoord4s(gl.funcs, C.GLshort(s), C.GLshort(t), C.GLshort(r), C.GLshort(q)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord4iv.xml -func (gl *GL) TexCoord4iv(v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glTexCoord4iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord4i.xml -func (gl *GL) TexCoord4i(s, t, r, q int32) { - C.gl4_2compat_glTexCoord4i(gl.funcs, C.GLint(s), C.GLint(t), C.GLint(r), C.GLint(q)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord4fv.xml -func (gl *GL) TexCoord4fv(v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glTexCoord4fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord4f.xml -func (gl *GL) TexCoord4f(s, t, r, q float32) { - C.gl4_2compat_glTexCoord4f(gl.funcs, C.GLfloat(s), C.GLfloat(t), C.GLfloat(r), C.GLfloat(q)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord4dv.xml -func (gl *GL) TexCoord4dv(v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glTexCoord4dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord4d.xml -func (gl *GL) TexCoord4d(s, t, r, q float64) { - C.gl4_2compat_glTexCoord4d(gl.funcs, C.GLdouble(s), C.GLdouble(t), C.GLdouble(r), C.GLdouble(q)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord3sv.xml -func (gl *GL) TexCoord3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glTexCoord3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord3s.xml -func (gl *GL) TexCoord3s(s, t, r int16) { - C.gl4_2compat_glTexCoord3s(gl.funcs, C.GLshort(s), C.GLshort(t), C.GLshort(r)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord3iv.xml -func (gl *GL) TexCoord3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glTexCoord3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord3i.xml -func (gl *GL) TexCoord3i(s, t, r int32) { - C.gl4_2compat_glTexCoord3i(gl.funcs, C.GLint(s), C.GLint(t), C.GLint(r)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord3fv.xml -func (gl *GL) TexCoord3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glTexCoord3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord3f.xml -func (gl *GL) TexCoord3f(s, t, r float32) { - C.gl4_2compat_glTexCoord3f(gl.funcs, C.GLfloat(s), C.GLfloat(t), C.GLfloat(r)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord3dv.xml -func (gl *GL) TexCoord3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glTexCoord3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord3d.xml -func (gl *GL) TexCoord3d(s, t, r float64) { - C.gl4_2compat_glTexCoord3d(gl.funcs, C.GLdouble(s), C.GLdouble(t), C.GLdouble(r)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord2sv.xml -func (gl *GL) TexCoord2sv(v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glTexCoord2sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord2s.xml -func (gl *GL) TexCoord2s(s, t int16) { - C.gl4_2compat_glTexCoord2s(gl.funcs, C.GLshort(s), C.GLshort(t)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord2iv.xml -func (gl *GL) TexCoord2iv(v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glTexCoord2iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord2i.xml -func (gl *GL) TexCoord2i(s, t int32) { - C.gl4_2compat_glTexCoord2i(gl.funcs, C.GLint(s), C.GLint(t)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord2fv.xml -func (gl *GL) TexCoord2fv(v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glTexCoord2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord2f.xml -func (gl *GL) TexCoord2f(s, t float32) { - C.gl4_2compat_glTexCoord2f(gl.funcs, C.GLfloat(s), C.GLfloat(t)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord2dv.xml -func (gl *GL) TexCoord2dv(v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glTexCoord2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord2d.xml -func (gl *GL) TexCoord2d(s, t float64) { - C.gl4_2compat_glTexCoord2d(gl.funcs, C.GLdouble(s), C.GLdouble(t)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord1sv.xml -func (gl *GL) TexCoord1sv(v []int16) { - C.gl4_2compat_glTexCoord1sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord1s.xml -func (gl *GL) TexCoord1s(s int16) { - C.gl4_2compat_glTexCoord1s(gl.funcs, C.GLshort(s)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord1iv.xml -func (gl *GL) TexCoord1iv(v []int32) { - C.gl4_2compat_glTexCoord1iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord1i.xml -func (gl *GL) TexCoord1i(s int32) { - C.gl4_2compat_glTexCoord1i(gl.funcs, C.GLint(s)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord1fv.xml -func (gl *GL) TexCoord1fv(v []float32) { - C.gl4_2compat_glTexCoord1fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord1f.xml -func (gl *GL) TexCoord1f(s float32) { - C.gl4_2compat_glTexCoord1f(gl.funcs, C.GLfloat(s)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord1dv.xml -func (gl *GL) TexCoord1dv(v []float64) { - C.gl4_2compat_glTexCoord1dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord1d.xml -func (gl *GL) TexCoord1d(s float64) { - C.gl4_2compat_glTexCoord1d(gl.funcs, C.GLdouble(s)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRectsv.xml -func (gl *GL) Rectsv(v1, v2 []int16) { - C.gl4_2compat_glRectsv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v1[0])), (*C.GLshort)(unsafe.Pointer(&v2[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRects.xml -func (gl *GL) Rects(x1, y1, x2, y2 int16) { - C.gl4_2compat_glRects(gl.funcs, C.GLshort(x1), C.GLshort(y1), C.GLshort(x2), C.GLshort(y2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRectiv.xml -func (gl *GL) Rectiv(v1, v2 []int32) { - C.gl4_2compat_glRectiv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v1[0])), (*C.GLint)(unsafe.Pointer(&v2[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRecti.xml -func (gl *GL) Recti(x1, y1, x2, y2 int32) { - C.gl4_2compat_glRecti(gl.funcs, C.GLint(x1), C.GLint(y1), C.GLint(x2), C.GLint(y2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRectfv.xml -func (gl *GL) Rectfv(v1, v2 []float32) { - C.gl4_2compat_glRectfv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v1[0])), (*C.GLfloat)(unsafe.Pointer(&v2[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRectf.xml -func (gl *GL) Rectf(x1, y1, x2, y2 float32) { - C.gl4_2compat_glRectf(gl.funcs, C.GLfloat(x1), C.GLfloat(y1), C.GLfloat(x2), C.GLfloat(y2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRectdv.xml -func (gl *GL) Rectdv(v1, v2 []float64) { - C.gl4_2compat_glRectdv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v1[0])), (*C.GLdouble)(unsafe.Pointer(&v2[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRectd.xml -func (gl *GL) Rectd(x1, y1, x2, y2 float64) { - C.gl4_2compat_glRectd(gl.funcs, C.GLdouble(x1), C.GLdouble(y1), C.GLdouble(x2), C.GLdouble(y2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos4sv.xml -func (gl *GL) RasterPos4sv(v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glRasterPos4sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos4s.xml -func (gl *GL) RasterPos4s(x, y, z, w int16) { - C.gl4_2compat_glRasterPos4s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z), C.GLshort(w)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos4iv.xml -func (gl *GL) RasterPos4iv(v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glRasterPos4iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos4i.xml -func (gl *GL) RasterPos4i(x, y, z, w int) { - C.gl4_2compat_glRasterPos4i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z), C.GLint(w)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos4fv.xml -func (gl *GL) RasterPos4fv(v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glRasterPos4fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos4f.xml -func (gl *GL) RasterPos4f(x, y, z, w float32) { - C.gl4_2compat_glRasterPos4f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z), C.GLfloat(w)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos4dv.xml -func (gl *GL) RasterPos4dv(v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glRasterPos4dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos4d.xml -func (gl *GL) RasterPos4d(x, y, z, w float64) { - C.gl4_2compat_glRasterPos4d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z), C.GLdouble(w)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos3sv.xml -func (gl *GL) RasterPos3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glRasterPos3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos3s.xml -func (gl *GL) RasterPos3s(x, y, z int16) { - C.gl4_2compat_glRasterPos3s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos3iv.xml -func (gl *GL) RasterPos3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glRasterPos3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos3i.xml -func (gl *GL) RasterPos3i(x, y, z int) { - C.gl4_2compat_glRasterPos3i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos3fv.xml -func (gl *GL) RasterPos3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glRasterPos3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos3f.xml -func (gl *GL) RasterPos3f(x, y, z float32) { - C.gl4_2compat_glRasterPos3f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos3dv.xml -func (gl *GL) RasterPos3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glRasterPos3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos3d.xml -func (gl *GL) RasterPos3d(x, y, z float64) { - C.gl4_2compat_glRasterPos3d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos2sv.xml -func (gl *GL) RasterPos2sv(v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glRasterPos2sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos2s.xml -func (gl *GL) RasterPos2s(x, y int16) { - C.gl4_2compat_glRasterPos2s(gl.funcs, C.GLshort(x), C.GLshort(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos2iv.xml -func (gl *GL) RasterPos2iv(v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glRasterPos2iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos2i.xml -func (gl *GL) RasterPos2i(x, y int) { - C.gl4_2compat_glRasterPos2i(gl.funcs, C.GLint(x), C.GLint(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos2fv.xml -func (gl *GL) RasterPos2fv(v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glRasterPos2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos2f.xml -func (gl *GL) RasterPos2f(x, y float32) { - C.gl4_2compat_glRasterPos2f(gl.funcs, C.GLfloat(x), C.GLfloat(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos2dv.xml -func (gl *GL) RasterPos2dv(v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glRasterPos2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos2d.xml -func (gl *GL) RasterPos2d(x, y float64) { - C.gl4_2compat_glRasterPos2d(gl.funcs, C.GLdouble(x), C.GLdouble(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glNormal3sv.xml -func (gl *GL) Normal3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glNormal3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glNormal3s.xml -func (gl *GL) Normal3s(nx, ny, nz int16) { - C.gl4_2compat_glNormal3s(gl.funcs, C.GLshort(nx), C.GLshort(ny), C.GLshort(nz)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glNormal3iv.xml -func (gl *GL) Normal3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glNormal3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glNormal3i.xml -func (gl *GL) Normal3i(nx, ny, nz int32) { - C.gl4_2compat_glNormal3i(gl.funcs, C.GLint(nx), C.GLint(ny), C.GLint(nz)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glNormal3fv.xml -func (gl *GL) Normal3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glNormal3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glNormal3f.xml -func (gl *GL) Normal3f(nx, ny, nz float32) { - C.gl4_2compat_glNormal3f(gl.funcs, C.GLfloat(nx), C.GLfloat(ny), C.GLfloat(nz)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glNormal3dv.xml -func (gl *GL) Normal3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glNormal3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glNormal3d.xml -func (gl *GL) Normal3d(nx, ny, nz float64) { - C.gl4_2compat_glNormal3d(gl.funcs, C.GLdouble(nx), C.GLdouble(ny), C.GLdouble(nz)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glNormal3bv.xml -func (gl *GL) Normal3bv(v []byte) { - C.gl4_2compat_glNormal3bv(gl.funcs, (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glNormal3b.xml -func (gl *GL) Normal3b(nx, ny, nz byte) { - C.gl4_2compat_glNormal3b(gl.funcs, C.GLbyte(nx), C.GLbyte(ny), C.GLbyte(nz)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIndexsv.xml -func (gl *GL) Indexsv(c []int16) { - C.gl4_2compat_glIndexsv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIndexs.xml -func (gl *GL) Indexs(c int16) { - C.gl4_2compat_glIndexs(gl.funcs, C.GLshort(c)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIndexiv.xml -func (gl *GL) Indexiv(c []int32) { - C.gl4_2compat_glIndexiv(gl.funcs, (*C.GLint)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIndexi.xml -func (gl *GL) Indexi(c int32) { - C.gl4_2compat_glIndexi(gl.funcs, C.GLint(c)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIndexfv.xml -func (gl *GL) Indexfv(c []float32) { - C.gl4_2compat_glIndexfv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIndexf.xml -func (gl *GL) Indexf(c float32) { - C.gl4_2compat_glIndexf(gl.funcs, C.GLfloat(c)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIndexdv.xml -func (gl *GL) Indexdv(c []float64) { - C.gl4_2compat_glIndexdv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIndexd.xml -func (gl *GL) Indexd(c float64) { - C.gl4_2compat_glIndexd(gl.funcs, C.GLdouble(c)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEnd.xml -func (gl *GL) End() { - C.gl4_2compat_glEnd(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEdgeFlagv.xml -func (gl *GL) EdgeFlagv(flag []bool) { - C.gl4_2compat_glEdgeFlagv(gl.funcs, (*C.GLboolean)(unsafe.Pointer(&flag[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEdgeFlag.xml -func (gl *GL) EdgeFlag(flag bool) { - C.gl4_2compat_glEdgeFlag(gl.funcs, *(*C.GLboolean)(unsafe.Pointer(&flag))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor4usv.xml -func (gl *GL) Color4usv(v []uint16) { - C.gl4_2compat_glColor4usv(gl.funcs, (*C.GLushort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor4us.xml -func (gl *GL) Color4us(red, green, blue, alpha uint16) { - C.gl4_2compat_glColor4us(gl.funcs, C.GLushort(red), C.GLushort(green), C.GLushort(blue), C.GLushort(alpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor4uiv.xml -func (gl *GL) Color4uiv(v []uint32) { - C.gl4_2compat_glColor4uiv(gl.funcs, (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor4ui.xml -func (gl *GL) Color4ui(red, green, blue, alpha uint32) { - C.gl4_2compat_glColor4ui(gl.funcs, C.GLuint(red), C.GLuint(green), C.GLuint(blue), C.GLuint(alpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor4ubv.xml -func (gl *GL) Color4ubv(v []uint8) { - C.gl4_2compat_glColor4ubv(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor4ub.xml -func (gl *GL) Color4ub(red, green, blue, alpha uint8) { - C.gl4_2compat_glColor4ub(gl.funcs, C.GLubyte(red), C.GLubyte(green), C.GLubyte(blue), C.GLubyte(alpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor4sv.xml -func (gl *GL) Color4sv(v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glColor4sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor4s.xml -func (gl *GL) Color4s(red, green, blue, alpha int16) { - C.gl4_2compat_glColor4s(gl.funcs, C.GLshort(red), C.GLshort(green), C.GLshort(blue), C.GLshort(alpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor4iv.xml -func (gl *GL) Color4iv(v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glColor4iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor4i.xml -func (gl *GL) Color4i(red, green, blue, alpha int32) { - C.gl4_2compat_glColor4i(gl.funcs, C.GLint(red), C.GLint(green), C.GLint(blue), C.GLint(alpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor4fv.xml -func (gl *GL) Color4fv(v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glColor4fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor4f.xml -func (gl *GL) Color4f(red, green, blue, alpha float32) { - C.gl4_2compat_glColor4f(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor4dv.xml -func (gl *GL) Color4dv(v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glColor4dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor4d.xml -func (gl *GL) Color4d(red, green, blue, alpha float64) { - C.gl4_2compat_glColor4d(gl.funcs, C.GLdouble(red), C.GLdouble(green), C.GLdouble(blue), C.GLdouble(alpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor4bv.xml -func (gl *GL) Color4bv(v []byte) { - C.gl4_2compat_glColor4bv(gl.funcs, (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor4b.xml -func (gl *GL) Color4b(red, green, blue, alpha byte) { - C.gl4_2compat_glColor4b(gl.funcs, C.GLbyte(red), C.GLbyte(green), C.GLbyte(blue), C.GLbyte(alpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor3usv.xml -func (gl *GL) Color3usv(v []uint16) { - C.gl4_2compat_glColor3usv(gl.funcs, (*C.GLushort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor3us.xml -func (gl *GL) Color3us(red, green, blue uint16) { - C.gl4_2compat_glColor3us(gl.funcs, C.GLushort(red), C.GLushort(green), C.GLushort(blue)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor3uiv.xml -func (gl *GL) Color3uiv(v []uint32) { - C.gl4_2compat_glColor3uiv(gl.funcs, (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor3ui.xml -func (gl *GL) Color3ui(red, green, blue uint32) { - C.gl4_2compat_glColor3ui(gl.funcs, C.GLuint(red), C.GLuint(green), C.GLuint(blue)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor3ubv.xml -func (gl *GL) Color3ubv(v []uint8) { - C.gl4_2compat_glColor3ubv(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor3ub.xml -func (gl *GL) Color3ub(red, green, blue uint8) { - C.gl4_2compat_glColor3ub(gl.funcs, C.GLubyte(red), C.GLubyte(green), C.GLubyte(blue)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor3sv.xml -func (gl *GL) Color3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glColor3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor3s.xml -func (gl *GL) Color3s(red, green, blue int16) { - C.gl4_2compat_glColor3s(gl.funcs, C.GLshort(red), C.GLshort(green), C.GLshort(blue)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor3iv.xml -func (gl *GL) Color3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glColor3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor3i.xml -func (gl *GL) Color3i(red, green, blue int32) { - C.gl4_2compat_glColor3i(gl.funcs, C.GLint(red), C.GLint(green), C.GLint(blue)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor3fv.xml -func (gl *GL) Color3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glColor3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor3f.xml -func (gl *GL) Color3f(red, green, blue float32) { - C.gl4_2compat_glColor3f(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor3dv.xml -func (gl *GL) Color3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glColor3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor3d.xml -func (gl *GL) Color3d(red, green, blue float64) { - C.gl4_2compat_glColor3d(gl.funcs, C.GLdouble(red), C.GLdouble(green), C.GLdouble(blue)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor3bv.xml -func (gl *GL) Color3bv(v []byte) { - C.gl4_2compat_glColor3bv(gl.funcs, (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor3b.xml -func (gl *GL) Color3b(red, green, blue byte) { - C.gl4_2compat_glColor3b(gl.funcs, C.GLbyte(red), C.GLbyte(green), C.GLbyte(blue)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBitmap.xml -func (gl *GL) Bitmap(width, height int, xorig, yorig, xmove, ymove float32, bitmap []uint8) { - C.gl4_2compat_glBitmap(gl.funcs, C.GLsizei(width), C.GLsizei(height), C.GLfloat(xorig), C.GLfloat(yorig), C.GLfloat(xmove), C.GLfloat(ymove), (*C.GLubyte)(unsafe.Pointer(&bitmap[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBegin.xml -func (gl *GL) Begin(mode glbase.Enum) { - C.gl4_2compat_glBegin(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glListBase.xml -func (gl *GL) ListBase(base uint32) { - C.gl4_2compat_glListBase(gl.funcs, C.GLuint(base)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGenLists.xml -func (gl *GL) GenLists(range_ int32) uint32 { - glresult := C.gl4_2compat_glGenLists(gl.funcs, C.GLsizei(range_)) - return uint32(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDeleteLists.xml -func (gl *GL) DeleteLists(list uint32, range_ int32) { - C.gl4_2compat_glDeleteLists(gl.funcs, C.GLuint(list), C.GLsizei(range_)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCallLists.xml -func (gl *GL) CallLists(n int, gltype glbase.Enum, lists interface{}) { - var lists_ptr unsafe.Pointer - var lists_v = reflect.ValueOf(lists) - if lists != nil && lists_v.Kind() != reflect.Slice { - panic("parameter lists must be a slice") - } - if lists != nil { - lists_ptr = unsafe.Pointer(lists_v.Index(0).Addr().Pointer()) - } - C.gl4_2compat_glCallLists(gl.funcs, C.GLsizei(n), C.GLenum(gltype), lists_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCallList.xml -func (gl *GL) CallList(list uint32) { - C.gl4_2compat_glCallList(gl.funcs, C.GLuint(list)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEndList.xml -func (gl *GL) EndList() { - C.gl4_2compat_glEndList(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glNewList.xml -func (gl *GL) NewList(list uint32, mode glbase.Enum) { - C.gl4_2compat_glNewList(gl.funcs, C.GLuint(list), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPushClientAttrib.xml -func (gl *GL) PushClientAttrib(mask glbase.Bitfield) { - C.gl4_2compat_glPushClientAttrib(gl.funcs, C.GLbitfield(mask)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPopClientAttrib.xml -func (gl *GL) PopClientAttrib() { - C.gl4_2compat_glPopClientAttrib(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPrioritizeTextures.xml -func (gl *GL) PrioritizeTextures(n int, textures []glbase.Texture, priorities []float32) { - C.gl4_2compat_glPrioritizeTextures(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0])), (*C.GLfloat)(unsafe.Pointer(&priorities[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glAreTexturesResident.xml -func (gl *GL) AreTexturesResident(n int, textures []glbase.Texture, residences []bool) bool { - glresult := C.gl4_2compat_glAreTexturesResident(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0])), (*C.GLboolean)(unsafe.Pointer(&residences[0]))) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexPointer.xml -func (gl *GL) VertexPointer(size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl4_2compat_glVertexPointer(gl.funcs, C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordPointer.xml -func (gl *GL) TexCoordPointer(size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl4_2compat_glTexCoordPointer(gl.funcs, C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glNormalPointer.xml -func (gl *GL) NormalPointer(gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl4_2compat_glNormalPointer(gl.funcs, C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glInterleavedArrays.xml -func (gl *GL) InterleavedArrays(format glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl4_2compat_glInterleavedArrays(gl.funcs, C.GLenum(format), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIndexPointer.xml -func (gl *GL) IndexPointer(gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl4_2compat_glIndexPointer(gl.funcs, C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEnableClientState.xml -func (gl *GL) EnableClientState(array glbase.Enum) { - C.gl4_2compat_glEnableClientState(gl.funcs, C.GLenum(array)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEdgeFlagPointer.xml -func (gl *GL) EdgeFlagPointer(stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl4_2compat_glEdgeFlagPointer(gl.funcs, C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDisableClientState.xml -func (gl *GL) DisableClientState(array glbase.Enum) { - C.gl4_2compat_glDisableClientState(gl.funcs, C.GLenum(array)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorPointer.xml -func (gl *GL) ColorPointer(size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl4_2compat_glColorPointer(gl.funcs, C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glArrayElement.xml -func (gl *GL) ArrayElement(i int32) { - C.gl4_2compat_glArrayElement(gl.funcs, C.GLint(i)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glResetMinmax.xml -func (gl *GL) ResetMinmax(target glbase.Enum) { - C.gl4_2compat_glResetMinmax(gl.funcs, C.GLenum(target)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glResetHistogram.xml -func (gl *GL) ResetHistogram(target glbase.Enum) { - C.gl4_2compat_glResetHistogram(gl.funcs, C.GLenum(target)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMinmax.xml -func (gl *GL) Minmax(target, internalFormat glbase.Enum, sink bool) { - C.gl4_2compat_glMinmax(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), *(*C.GLboolean)(unsafe.Pointer(&sink))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glHistogram.xml -func (gl *GL) Histogram(target glbase.Enum, width int, internalFormat glbase.Enum, sink bool) { - C.gl4_2compat_glHistogram(gl.funcs, C.GLenum(target), C.GLsizei(width), C.GLenum(internalFormat), *(*C.GLboolean)(unsafe.Pointer(&sink))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetMinmaxParameteriv.xml -func (gl *GL) GetMinmaxParameteriv(target, pname glbase.Enum, params []int32) { - C.gl4_2compat_glGetMinmaxParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetMinmaxParameterfv.xml -func (gl *GL) GetMinmaxParameterfv(target, pname glbase.Enum, params []float32) { - C.gl4_2compat_glGetMinmaxParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetMinmax.xml -func (gl *GL) GetMinmax(target glbase.Enum, reset bool, format, gltype glbase.Enum, values interface{}) { - var values_ptr unsafe.Pointer - var values_v = reflect.ValueOf(values) - if values != nil && values_v.Kind() != reflect.Slice { - panic("parameter values must be a slice") - } - if values != nil { - values_ptr = unsafe.Pointer(values_v.Index(0).Addr().Pointer()) - } - C.gl4_2compat_glGetMinmax(gl.funcs, C.GLenum(target), *(*C.GLboolean)(unsafe.Pointer(&reset)), C.GLenum(format), C.GLenum(gltype), values_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetHistogramParameteriv.xml -func (gl *GL) GetHistogramParameteriv(target, pname glbase.Enum, params []int32) { - C.gl4_2compat_glGetHistogramParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetHistogramParameterfv.xml -func (gl *GL) GetHistogramParameterfv(target, pname glbase.Enum, params []float32) { - C.gl4_2compat_glGetHistogramParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetHistogram.xml -func (gl *GL) GetHistogram(target glbase.Enum, reset bool, format, gltype glbase.Enum, values interface{}) { - var values_ptr unsafe.Pointer - var values_v = reflect.ValueOf(values) - if values != nil && values_v.Kind() != reflect.Slice { - panic("parameter values must be a slice") - } - if values != nil { - values_ptr = unsafe.Pointer(values_v.Index(0).Addr().Pointer()) - } - C.gl4_2compat_glGetHistogram(gl.funcs, C.GLenum(target), *(*C.GLboolean)(unsafe.Pointer(&reset)), C.GLenum(format), C.GLenum(gltype), values_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSeparableFilter2D.xml -func (gl *GL) SeparableFilter2D(target, internalFormat glbase.Enum, width, height int, format, gltype glbase.Enum, row, column interface{}) { - var row_ptr unsafe.Pointer - var row_v = reflect.ValueOf(row) - if row != nil && row_v.Kind() != reflect.Slice { - panic("parameter row must be a slice") - } - if row != nil { - row_ptr = unsafe.Pointer(row_v.Index(0).Addr().Pointer()) - } - var column_ptr unsafe.Pointer - var column_v = reflect.ValueOf(column) - if column != nil && column_v.Kind() != reflect.Slice { - panic("parameter column must be a slice") - } - if column != nil { - column_ptr = unsafe.Pointer(column_v.Index(0).Addr().Pointer()) - } - C.gl4_2compat_glSeparableFilter2D(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), row_ptr, column_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetSeparableFilter.xml -func (gl *GL) GetSeparableFilter(target, format, gltype glbase.Enum, row, column, span interface{}) { - var row_ptr unsafe.Pointer - var row_v = reflect.ValueOf(row) - if row != nil && row_v.Kind() != reflect.Slice { - panic("parameter row must be a slice") - } - if row != nil { - row_ptr = unsafe.Pointer(row_v.Index(0).Addr().Pointer()) - } - var column_ptr unsafe.Pointer - var column_v = reflect.ValueOf(column) - if column != nil && column_v.Kind() != reflect.Slice { - panic("parameter column must be a slice") - } - if column != nil { - column_ptr = unsafe.Pointer(column_v.Index(0).Addr().Pointer()) - } - var span_ptr unsafe.Pointer - var span_v = reflect.ValueOf(span) - if span != nil && span_v.Kind() != reflect.Slice { - panic("parameter span must be a slice") - } - if span != nil { - span_ptr = unsafe.Pointer(span_v.Index(0).Addr().Pointer()) - } - C.gl4_2compat_glGetSeparableFilter(gl.funcs, C.GLenum(target), C.GLenum(format), C.GLenum(gltype), row_ptr, column_ptr, span_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetConvolutionParameteriv.xml -func (gl *GL) GetConvolutionParameteriv(target, pname glbase.Enum, params []int32) { - C.gl4_2compat_glGetConvolutionParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetConvolutionParameterfv.xml -func (gl *GL) GetConvolutionParameterfv(target, pname glbase.Enum, params []float32) { - C.gl4_2compat_glGetConvolutionParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetConvolutionFilter.xml -func (gl *GL) GetConvolutionFilter(target, format, gltype glbase.Enum, image interface{}) { - var image_ptr unsafe.Pointer - var image_v = reflect.ValueOf(image) - if image != nil && image_v.Kind() != reflect.Slice { - panic("parameter image must be a slice") - } - if image != nil { - image_ptr = unsafe.Pointer(image_v.Index(0).Addr().Pointer()) - } - C.gl4_2compat_glGetConvolutionFilter(gl.funcs, C.GLenum(target), C.GLenum(format), C.GLenum(gltype), image_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyConvolutionFilter2D.xml -func (gl *GL) CopyConvolutionFilter2D(target, internalFormat glbase.Enum, x, y, width, height int) { - C.gl4_2compat_glCopyConvolutionFilter2D(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyConvolutionFilter1D.xml -func (gl *GL) CopyConvolutionFilter1D(target, internalFormat glbase.Enum, x, y, width int) { - C.gl4_2compat_glCopyConvolutionFilter1D(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glConvolutionParameteriv.xml -func (gl *GL) ConvolutionParameteriv(target, pname glbase.Enum, params []int32) { - C.gl4_2compat_glConvolutionParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glConvolutionParameteri.xml -func (gl *GL) ConvolutionParameteri(target, pname glbase.Enum, params int32) { - C.gl4_2compat_glConvolutionParameteri(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLint(params)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glConvolutionParameterfv.xml -func (gl *GL) ConvolutionParameterfv(target, pname glbase.Enum, params []float32) { - C.gl4_2compat_glConvolutionParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glConvolutionParameterf.xml -func (gl *GL) ConvolutionParameterf(target, pname glbase.Enum, params float32) { - C.gl4_2compat_glConvolutionParameterf(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLfloat(params)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glConvolutionFilter2D.xml -func (gl *GL) ConvolutionFilter2D(target, internalFormat glbase.Enum, width, height int, format, gltype glbase.Enum, image interface{}) { - var image_ptr unsafe.Pointer - var image_v = reflect.ValueOf(image) - if image != nil && image_v.Kind() != reflect.Slice { - panic("parameter image must be a slice") - } - if image != nil { - image_ptr = unsafe.Pointer(image_v.Index(0).Addr().Pointer()) - } - C.gl4_2compat_glConvolutionFilter2D(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), image_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glConvolutionFilter1D.xml -func (gl *GL) ConvolutionFilter1D(target, internalFormat glbase.Enum, width int, format, gltype glbase.Enum, image interface{}) { - var image_ptr unsafe.Pointer - var image_v = reflect.ValueOf(image) - if image != nil && image_v.Kind() != reflect.Slice { - panic("parameter image must be a slice") - } - if image != nil { - image_ptr = unsafe.Pointer(image_v.Index(0).Addr().Pointer()) - } - C.gl4_2compat_glConvolutionFilter1D(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLsizei(width), C.GLenum(format), C.GLenum(gltype), image_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyColorSubTable.xml -func (gl *GL) CopyColorSubTable(target glbase.Enum, start int32, x, y, width int) { - C.gl4_2compat_glCopyColorSubTable(gl.funcs, C.GLenum(target), C.GLsizei(start), C.GLint(x), C.GLint(y), C.GLsizei(width)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorSubTable.xml -func (gl *GL) ColorSubTable(target glbase.Enum, start int32, count int, format, gltype glbase.Enum, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_2compat_glColorSubTable(gl.funcs, C.GLenum(target), C.GLsizei(start), C.GLsizei(count), C.GLenum(format), C.GLenum(gltype), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetColorTableParameteriv.xml -func (gl *GL) GetColorTableParameteriv(target, pname glbase.Enum, params []int32) { - C.gl4_2compat_glGetColorTableParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetColorTableParameterfv.xml -func (gl *GL) GetColorTableParameterfv(target, pname glbase.Enum, params []float32) { - C.gl4_2compat_glGetColorTableParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetColorTable.xml -func (gl *GL) GetColorTable(target, format, gltype glbase.Enum, table interface{}) { - var table_ptr unsafe.Pointer - var table_v = reflect.ValueOf(table) - if table != nil && table_v.Kind() != reflect.Slice { - panic("parameter table must be a slice") - } - if table != nil { - table_ptr = unsafe.Pointer(table_v.Index(0).Addr().Pointer()) - } - C.gl4_2compat_glGetColorTable(gl.funcs, C.GLenum(target), C.GLenum(format), C.GLenum(gltype), table_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyColorTable.xml -func (gl *GL) CopyColorTable(target, internalFormat glbase.Enum, x, y, width int) { - C.gl4_2compat_glCopyColorTable(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorTableParameteriv.xml -func (gl *GL) ColorTableParameteriv(target, pname glbase.Enum, params []int32) { - C.gl4_2compat_glColorTableParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorTableParameterfv.xml -func (gl *GL) ColorTableParameterfv(target, pname glbase.Enum, params []float32) { - C.gl4_2compat_glColorTableParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorTable.xml -func (gl *GL) ColorTable(target, internalFormat glbase.Enum, width int, format, gltype glbase.Enum, table interface{}) { - var table_ptr unsafe.Pointer - var table_v = reflect.ValueOf(table) - if table != nil && table_v.Kind() != reflect.Slice { - panic("parameter table must be a slice") - } - if table != nil { - table_ptr = unsafe.Pointer(table_v.Index(0).Addr().Pointer()) - } - C.gl4_2compat_glColorTable(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLsizei(width), C.GLenum(format), C.GLenum(gltype), table_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultTransposeMatrixd.xml -func (gl *GL) MultTransposeMatrixd(m []float64) { - C.gl4_2compat_glMultTransposeMatrixd(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultTransposeMatrixf.xml -func (gl *GL) MultTransposeMatrixf(m []float32) { - C.gl4_2compat_glMultTransposeMatrixf(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLoadTransposeMatrixd.xml -func (gl *GL) LoadTransposeMatrixd(m []float64) { - C.gl4_2compat_glLoadTransposeMatrixd(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLoadTransposeMatrixf.xml -func (gl *GL) LoadTransposeMatrixf(m []float32) { - C.gl4_2compat_glLoadTransposeMatrixf(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord4sv.xml -func (gl *GL) MultiTexCoord4sv(target glbase.Enum, v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glMultiTexCoord4sv(gl.funcs, C.GLenum(target), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord4s.xml -func (gl *GL) MultiTexCoord4s(target glbase.Enum, s, t, r, q int16) { - C.gl4_2compat_glMultiTexCoord4s(gl.funcs, C.GLenum(target), C.GLshort(s), C.GLshort(t), C.GLshort(r), C.GLshort(q)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord4iv.xml -func (gl *GL) MultiTexCoord4iv(target glbase.Enum, v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glMultiTexCoord4iv(gl.funcs, C.GLenum(target), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord4i.xml -func (gl *GL) MultiTexCoord4i(target glbase.Enum, s, t, r, q int32) { - C.gl4_2compat_glMultiTexCoord4i(gl.funcs, C.GLenum(target), C.GLint(s), C.GLint(t), C.GLint(r), C.GLint(q)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord4fv.xml -func (gl *GL) MultiTexCoord4fv(target glbase.Enum, v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glMultiTexCoord4fv(gl.funcs, C.GLenum(target), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord4f.xml -func (gl *GL) MultiTexCoord4f(target glbase.Enum, s, t, r, q float32) { - C.gl4_2compat_glMultiTexCoord4f(gl.funcs, C.GLenum(target), C.GLfloat(s), C.GLfloat(t), C.GLfloat(r), C.GLfloat(q)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord4dv.xml -func (gl *GL) MultiTexCoord4dv(target glbase.Enum, v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glMultiTexCoord4dv(gl.funcs, C.GLenum(target), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord4d.xml -func (gl *GL) MultiTexCoord4d(target glbase.Enum, s, t, r, q float64) { - C.gl4_2compat_glMultiTexCoord4d(gl.funcs, C.GLenum(target), C.GLdouble(s), C.GLdouble(t), C.GLdouble(r), C.GLdouble(q)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord3sv.xml -func (gl *GL) MultiTexCoord3sv(target glbase.Enum, v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glMultiTexCoord3sv(gl.funcs, C.GLenum(target), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord3s.xml -func (gl *GL) MultiTexCoord3s(target glbase.Enum, s, t, r int16) { - C.gl4_2compat_glMultiTexCoord3s(gl.funcs, C.GLenum(target), C.GLshort(s), C.GLshort(t), C.GLshort(r)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord3iv.xml -func (gl *GL) MultiTexCoord3iv(target glbase.Enum, v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glMultiTexCoord3iv(gl.funcs, C.GLenum(target), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord3i.xml -func (gl *GL) MultiTexCoord3i(target glbase.Enum, s, t, r int32) { - C.gl4_2compat_glMultiTexCoord3i(gl.funcs, C.GLenum(target), C.GLint(s), C.GLint(t), C.GLint(r)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord3fv.xml -func (gl *GL) MultiTexCoord3fv(target glbase.Enum, v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glMultiTexCoord3fv(gl.funcs, C.GLenum(target), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord3f.xml -func (gl *GL) MultiTexCoord3f(target glbase.Enum, s, t, r float32) { - C.gl4_2compat_glMultiTexCoord3f(gl.funcs, C.GLenum(target), C.GLfloat(s), C.GLfloat(t), C.GLfloat(r)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord3dv.xml -func (gl *GL) MultiTexCoord3dv(target glbase.Enum, v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glMultiTexCoord3dv(gl.funcs, C.GLenum(target), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord3d.xml -func (gl *GL) MultiTexCoord3d(target glbase.Enum, s, t, r float64) { - C.gl4_2compat_glMultiTexCoord3d(gl.funcs, C.GLenum(target), C.GLdouble(s), C.GLdouble(t), C.GLdouble(r)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord2sv.xml -func (gl *GL) MultiTexCoord2sv(target glbase.Enum, v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glMultiTexCoord2sv(gl.funcs, C.GLenum(target), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord2s.xml -func (gl *GL) MultiTexCoord2s(target glbase.Enum, s, t int16) { - C.gl4_2compat_glMultiTexCoord2s(gl.funcs, C.GLenum(target), C.GLshort(s), C.GLshort(t)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord2iv.xml -func (gl *GL) MultiTexCoord2iv(target glbase.Enum, v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glMultiTexCoord2iv(gl.funcs, C.GLenum(target), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord2i.xml -func (gl *GL) MultiTexCoord2i(target glbase.Enum, s, t int32) { - C.gl4_2compat_glMultiTexCoord2i(gl.funcs, C.GLenum(target), C.GLint(s), C.GLint(t)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord2fv.xml -func (gl *GL) MultiTexCoord2fv(target glbase.Enum, v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glMultiTexCoord2fv(gl.funcs, C.GLenum(target), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord2f.xml -func (gl *GL) MultiTexCoord2f(target glbase.Enum, s, t float32) { - C.gl4_2compat_glMultiTexCoord2f(gl.funcs, C.GLenum(target), C.GLfloat(s), C.GLfloat(t)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord2dv.xml -func (gl *GL) MultiTexCoord2dv(target glbase.Enum, v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glMultiTexCoord2dv(gl.funcs, C.GLenum(target), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord2d.xml -func (gl *GL) MultiTexCoord2d(target glbase.Enum, s, t float64) { - C.gl4_2compat_glMultiTexCoord2d(gl.funcs, C.GLenum(target), C.GLdouble(s), C.GLdouble(t)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord1sv.xml -func (gl *GL) MultiTexCoord1sv(target glbase.Enum, v []int16) { - C.gl4_2compat_glMultiTexCoord1sv(gl.funcs, C.GLenum(target), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord1s.xml -func (gl *GL) MultiTexCoord1s(target glbase.Enum, s int16) { - C.gl4_2compat_glMultiTexCoord1s(gl.funcs, C.GLenum(target), C.GLshort(s)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord1iv.xml -func (gl *GL) MultiTexCoord1iv(target glbase.Enum, v []int32) { - C.gl4_2compat_glMultiTexCoord1iv(gl.funcs, C.GLenum(target), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord1i.xml -func (gl *GL) MultiTexCoord1i(target glbase.Enum, s int32) { - C.gl4_2compat_glMultiTexCoord1i(gl.funcs, C.GLenum(target), C.GLint(s)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord1fv.xml -func (gl *GL) MultiTexCoord1fv(target glbase.Enum, v []float32) { - C.gl4_2compat_glMultiTexCoord1fv(gl.funcs, C.GLenum(target), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord1f.xml -func (gl *GL) MultiTexCoord1f(target glbase.Enum, s float32) { - C.gl4_2compat_glMultiTexCoord1f(gl.funcs, C.GLenum(target), C.GLfloat(s)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord1dv.xml -func (gl *GL) MultiTexCoord1dv(target glbase.Enum, v []float64) { - C.gl4_2compat_glMultiTexCoord1dv(gl.funcs, C.GLenum(target), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord1d.xml -func (gl *GL) MultiTexCoord1d(target glbase.Enum, s float64) { - C.gl4_2compat_glMultiTexCoord1d(gl.funcs, C.GLenum(target), C.GLdouble(s)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClientActiveTexture.xml -func (gl *GL) ClientActiveTexture(texture glbase.Enum) { - C.gl4_2compat_glClientActiveTexture(gl.funcs, C.GLenum(texture)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWindowPos3sv.xml -func (gl *GL) WindowPos3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glWindowPos3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWindowPos3s.xml -func (gl *GL) WindowPos3s(x, y, z int16) { - C.gl4_2compat_glWindowPos3s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWindowPos3iv.xml -func (gl *GL) WindowPos3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glWindowPos3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWindowPos3i.xml -func (gl *GL) WindowPos3i(x, y, z int) { - C.gl4_2compat_glWindowPos3i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWindowPos3fv.xml -func (gl *GL) WindowPos3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glWindowPos3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWindowPos3f.xml -func (gl *GL) WindowPos3f(x, y, z float32) { - C.gl4_2compat_glWindowPos3f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWindowPos3dv.xml -func (gl *GL) WindowPos3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glWindowPos3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWindowPos3d.xml -func (gl *GL) WindowPos3d(x, y, z float64) { - C.gl4_2compat_glWindowPos3d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWindowPos2sv.xml -func (gl *GL) WindowPos2sv(v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glWindowPos2sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWindowPos2s.xml -func (gl *GL) WindowPos2s(x, y int16) { - C.gl4_2compat_glWindowPos2s(gl.funcs, C.GLshort(x), C.GLshort(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWindowPos2iv.xml -func (gl *GL) WindowPos2iv(v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glWindowPos2iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWindowPos2i.xml -func (gl *GL) WindowPos2i(x, y int) { - C.gl4_2compat_glWindowPos2i(gl.funcs, C.GLint(x), C.GLint(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWindowPos2fv.xml -func (gl *GL) WindowPos2fv(v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glWindowPos2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWindowPos2f.xml -func (gl *GL) WindowPos2f(x, y float32) { - C.gl4_2compat_glWindowPos2f(gl.funcs, C.GLfloat(x), C.GLfloat(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWindowPos2dv.xml -func (gl *GL) WindowPos2dv(v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glWindowPos2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWindowPos2d.xml -func (gl *GL) WindowPos2d(x, y float64) { - C.gl4_2compat_glWindowPos2d(gl.funcs, C.GLdouble(x), C.GLdouble(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColorPointer.xml -func (gl *GL) SecondaryColorPointer(size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl4_2compat_glSecondaryColorPointer(gl.funcs, C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColor3usv.xml -func (gl *GL) SecondaryColor3usv(v []uint16) { - C.gl4_2compat_glSecondaryColor3usv(gl.funcs, (*C.GLushort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColor3us.xml -func (gl *GL) SecondaryColor3us(red, green, blue uint16) { - C.gl4_2compat_glSecondaryColor3us(gl.funcs, C.GLushort(red), C.GLushort(green), C.GLushort(blue)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColor3uiv.xml -func (gl *GL) SecondaryColor3uiv(v []uint32) { - C.gl4_2compat_glSecondaryColor3uiv(gl.funcs, (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColor3ui.xml -func (gl *GL) SecondaryColor3ui(red, green, blue uint32) { - C.gl4_2compat_glSecondaryColor3ui(gl.funcs, C.GLuint(red), C.GLuint(green), C.GLuint(blue)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColor3ubv.xml -func (gl *GL) SecondaryColor3ubv(v []uint8) { - C.gl4_2compat_glSecondaryColor3ubv(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColor3ub.xml -func (gl *GL) SecondaryColor3ub(red, green, blue uint8) { - C.gl4_2compat_glSecondaryColor3ub(gl.funcs, C.GLubyte(red), C.GLubyte(green), C.GLubyte(blue)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColor3sv.xml -func (gl *GL) SecondaryColor3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glSecondaryColor3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColor3s.xml -func (gl *GL) SecondaryColor3s(red, green, blue int16) { - C.gl4_2compat_glSecondaryColor3s(gl.funcs, C.GLshort(red), C.GLshort(green), C.GLshort(blue)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColor3iv.xml -func (gl *GL) SecondaryColor3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glSecondaryColor3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColor3i.xml -func (gl *GL) SecondaryColor3i(red, green, blue int32) { - C.gl4_2compat_glSecondaryColor3i(gl.funcs, C.GLint(red), C.GLint(green), C.GLint(blue)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColor3fv.xml -func (gl *GL) SecondaryColor3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glSecondaryColor3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColor3f.xml -func (gl *GL) SecondaryColor3f(red, green, blue float32) { - C.gl4_2compat_glSecondaryColor3f(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColor3dv.xml -func (gl *GL) SecondaryColor3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glSecondaryColor3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColor3d.xml -func (gl *GL) SecondaryColor3d(red, green, blue float64) { - C.gl4_2compat_glSecondaryColor3d(gl.funcs, C.GLdouble(red), C.GLdouble(green), C.GLdouble(blue)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColor3bv.xml -func (gl *GL) SecondaryColor3bv(v []byte) { - C.gl4_2compat_glSecondaryColor3bv(gl.funcs, (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColor3b.xml -func (gl *GL) SecondaryColor3b(red, green, blue byte) { - C.gl4_2compat_glSecondaryColor3b(gl.funcs, C.GLbyte(red), C.GLbyte(green), C.GLbyte(blue)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFogCoordPointer.xml -func (gl *GL) FogCoordPointer(gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl4_2compat_glFogCoordPointer(gl.funcs, C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFogCoorddv.xml -func (gl *GL) FogCoorddv(coord []float64) { - C.gl4_2compat_glFogCoorddv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&coord[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFogCoordd.xml -func (gl *GL) FogCoordd(coord float64) { - C.gl4_2compat_glFogCoordd(gl.funcs, C.GLdouble(coord)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFogCoordfv.xml -func (gl *GL) FogCoordfv(coord []float32) { - C.gl4_2compat_glFogCoordfv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&coord[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFogCoordf.xml -func (gl *GL) FogCoordf(coord float32) { - C.gl4_2compat_glFogCoordf(gl.funcs, C.GLfloat(coord)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4usv.xml -func (gl *GL) VertexAttrib4usv(index glbase.Attrib, v []uint16) { - C.gl4_2compat_glVertexAttrib4usv(gl.funcs, C.GLuint(index), (*C.GLushort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4uiv.xml -func (gl *GL) VertexAttrib4uiv(index glbase.Attrib, v []uint32) { - C.gl4_2compat_glVertexAttrib4uiv(gl.funcs, C.GLuint(index), (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4ubv.xml -func (gl *GL) VertexAttrib4ubv(index glbase.Attrib, v []uint8) { - C.gl4_2compat_glVertexAttrib4ubv(gl.funcs, C.GLuint(index), (*C.GLubyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4sv.xml -func (gl *GL) VertexAttrib4sv(index glbase.Attrib, v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glVertexAttrib4sv(gl.funcs, C.GLuint(index), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4s.xml -func (gl *GL) VertexAttrib4s(index glbase.Attrib, x, y, z, w int16) { - C.gl4_2compat_glVertexAttrib4s(gl.funcs, C.GLuint(index), C.GLshort(x), C.GLshort(y), C.GLshort(z), C.GLshort(w)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4iv.xml -func (gl *GL) VertexAttrib4iv(index glbase.Attrib, v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glVertexAttrib4iv(gl.funcs, C.GLuint(index), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4fv.xml -func (gl *GL) VertexAttrib4fv(index glbase.Attrib, v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glVertexAttrib4fv(gl.funcs, C.GLuint(index), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4f.xml -func (gl *GL) VertexAttrib4f(index glbase.Attrib, x, y, z, w float32) { - C.gl4_2compat_glVertexAttrib4f(gl.funcs, C.GLuint(index), C.GLfloat(x), C.GLfloat(y), C.GLfloat(z), C.GLfloat(w)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4dv.xml -func (gl *GL) VertexAttrib4dv(index glbase.Attrib, v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glVertexAttrib4dv(gl.funcs, C.GLuint(index), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4d.xml -func (gl *GL) VertexAttrib4d(index glbase.Attrib, x, y, z, w float64) { - C.gl4_2compat_glVertexAttrib4d(gl.funcs, C.GLuint(index), C.GLdouble(x), C.GLdouble(y), C.GLdouble(z), C.GLdouble(w)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4bv.xml -func (gl *GL) VertexAttrib4bv(index glbase.Attrib, v []byte) { - C.gl4_2compat_glVertexAttrib4bv(gl.funcs, C.GLuint(index), (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4Nusv.xml -func (gl *GL) VertexAttrib4Nusv(index glbase.Attrib, v []uint16) { - C.gl4_2compat_glVertexAttrib4Nusv(gl.funcs, C.GLuint(index), (*C.GLushort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4Nuiv.xml -func (gl *GL) VertexAttrib4Nuiv(index glbase.Attrib, v []uint32) { - C.gl4_2compat_glVertexAttrib4Nuiv(gl.funcs, C.GLuint(index), (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4Nubv.xml -func (gl *GL) VertexAttrib4Nubv(index glbase.Attrib, v []uint8) { - C.gl4_2compat_glVertexAttrib4Nubv(gl.funcs, C.GLuint(index), (*C.GLubyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4Nub.xml -func (gl *GL) VertexAttrib4Nub(index glbase.Attrib, x, y, z, w uint8) { - C.gl4_2compat_glVertexAttrib4Nub(gl.funcs, C.GLuint(index), C.GLubyte(x), C.GLubyte(y), C.GLubyte(z), C.GLubyte(w)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4Nsv.xml -func (gl *GL) VertexAttrib4Nsv(index glbase.Attrib, v []int16) { - C.gl4_2compat_glVertexAttrib4Nsv(gl.funcs, C.GLuint(index), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4Niv.xml -func (gl *GL) VertexAttrib4Niv(index glbase.Attrib, v []int32) { - C.gl4_2compat_glVertexAttrib4Niv(gl.funcs, C.GLuint(index), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4Nbv.xml -func (gl *GL) VertexAttrib4Nbv(index glbase.Attrib, v []byte) { - C.gl4_2compat_glVertexAttrib4Nbv(gl.funcs, C.GLuint(index), (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib3sv.xml -func (gl *GL) VertexAttrib3sv(index glbase.Attrib, v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glVertexAttrib3sv(gl.funcs, C.GLuint(index), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib3s.xml -func (gl *GL) VertexAttrib3s(index glbase.Attrib, x, y, z int16) { - C.gl4_2compat_glVertexAttrib3s(gl.funcs, C.GLuint(index), C.GLshort(x), C.GLshort(y), C.GLshort(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib3fv.xml -func (gl *GL) VertexAttrib3fv(index glbase.Attrib, v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glVertexAttrib3fv(gl.funcs, C.GLuint(index), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib3f.xml -func (gl *GL) VertexAttrib3f(index glbase.Attrib, x, y, z float32) { - C.gl4_2compat_glVertexAttrib3f(gl.funcs, C.GLuint(index), C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib3dv.xml -func (gl *GL) VertexAttrib3dv(index glbase.Attrib, v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glVertexAttrib3dv(gl.funcs, C.GLuint(index), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib3d.xml -func (gl *GL) VertexAttrib3d(index glbase.Attrib, x, y, z float64) { - C.gl4_2compat_glVertexAttrib3d(gl.funcs, C.GLuint(index), C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib2sv.xml -func (gl *GL) VertexAttrib2sv(index glbase.Attrib, v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glVertexAttrib2sv(gl.funcs, C.GLuint(index), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib2s.xml -func (gl *GL) VertexAttrib2s(index glbase.Attrib, x, y int16) { - C.gl4_2compat_glVertexAttrib2s(gl.funcs, C.GLuint(index), C.GLshort(x), C.GLshort(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib2fv.xml -func (gl *GL) VertexAttrib2fv(index glbase.Attrib, v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glVertexAttrib2fv(gl.funcs, C.GLuint(index), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib2f.xml -func (gl *GL) VertexAttrib2f(index glbase.Attrib, x, y float32) { - C.gl4_2compat_glVertexAttrib2f(gl.funcs, C.GLuint(index), C.GLfloat(x), C.GLfloat(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib2dv.xml -func (gl *GL) VertexAttrib2dv(index glbase.Attrib, v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glVertexAttrib2dv(gl.funcs, C.GLuint(index), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib2d.xml -func (gl *GL) VertexAttrib2d(index glbase.Attrib, x, y float64) { - C.gl4_2compat_glVertexAttrib2d(gl.funcs, C.GLuint(index), C.GLdouble(x), C.GLdouble(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib1sv.xml -func (gl *GL) VertexAttrib1sv(index glbase.Attrib, v []int16) { - C.gl4_2compat_glVertexAttrib1sv(gl.funcs, C.GLuint(index), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib1s.xml -func (gl *GL) VertexAttrib1s(index glbase.Attrib, x int16) { - C.gl4_2compat_glVertexAttrib1s(gl.funcs, C.GLuint(index), C.GLshort(x)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib1fv.xml -func (gl *GL) VertexAttrib1fv(index glbase.Attrib, v []float32) { - C.gl4_2compat_glVertexAttrib1fv(gl.funcs, C.GLuint(index), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib1f.xml -func (gl *GL) VertexAttrib1f(index glbase.Attrib, x float32) { - C.gl4_2compat_glVertexAttrib1f(gl.funcs, C.GLuint(index), C.GLfloat(x)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib1dv.xml -func (gl *GL) VertexAttrib1dv(index glbase.Attrib, v []float64) { - C.gl4_2compat_glVertexAttrib1dv(gl.funcs, C.GLuint(index), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib1d.xml -func (gl *GL) VertexAttrib1d(index glbase.Attrib, x float64) { - C.gl4_2compat_glVertexAttrib1d(gl.funcs, C.GLuint(index), C.GLdouble(x)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI4usv.xml -func (gl *GL) VertexAttribI4usv(index glbase.Attrib, v []uint16) { - C.gl4_2compat_glVertexAttribI4usv(gl.funcs, C.GLuint(index), (*C.GLushort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI4ubv.xml -func (gl *GL) VertexAttribI4ubv(index glbase.Attrib, v []uint8) { - C.gl4_2compat_glVertexAttribI4ubv(gl.funcs, C.GLuint(index), (*C.GLubyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI4sv.xml -func (gl *GL) VertexAttribI4sv(index glbase.Attrib, v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glVertexAttribI4sv(gl.funcs, C.GLuint(index), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI4bv.xml -func (gl *GL) VertexAttribI4bv(index glbase.Attrib, v []byte) { - C.gl4_2compat_glVertexAttribI4bv(gl.funcs, C.GLuint(index), (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI4uiv.xml -func (gl *GL) VertexAttribI4uiv(index glbase.Attrib, v []uint32) { - C.gl4_2compat_glVertexAttribI4uiv(gl.funcs, C.GLuint(index), (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI3uiv.xml -func (gl *GL) VertexAttribI3uiv(index glbase.Attrib, v []uint32) { - C.gl4_2compat_glVertexAttribI3uiv(gl.funcs, C.GLuint(index), (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI2uiv.xml -func (gl *GL) VertexAttribI2uiv(index glbase.Attrib, v []uint32) { - C.gl4_2compat_glVertexAttribI2uiv(gl.funcs, C.GLuint(index), (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI1uiv.xml -func (gl *GL) VertexAttribI1uiv(index glbase.Attrib, v []uint32) { - C.gl4_2compat_glVertexAttribI1uiv(gl.funcs, C.GLuint(index), (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI4iv.xml -func (gl *GL) VertexAttribI4iv(index glbase.Attrib, v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glVertexAttribI4iv(gl.funcs, C.GLuint(index), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI3iv.xml -func (gl *GL) VertexAttribI3iv(index glbase.Attrib, v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glVertexAttribI3iv(gl.funcs, C.GLuint(index), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI2iv.xml -func (gl *GL) VertexAttribI2iv(index glbase.Attrib, v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_2compat_glVertexAttribI2iv(gl.funcs, C.GLuint(index), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI1iv.xml -func (gl *GL) VertexAttribI1iv(index glbase.Attrib, v []int32) { - C.gl4_2compat_glVertexAttribI1iv(gl.funcs, C.GLuint(index), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI4ui.xml -func (gl *GL) VertexAttribI4ui(index glbase.Attrib, x, y, z, w uint32) { - C.gl4_2compat_glVertexAttribI4ui(gl.funcs, C.GLuint(index), C.GLuint(x), C.GLuint(y), C.GLuint(z), C.GLuint(w)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI3ui.xml -func (gl *GL) VertexAttribI3ui(index glbase.Attrib, x, y, z uint32) { - C.gl4_2compat_glVertexAttribI3ui(gl.funcs, C.GLuint(index), C.GLuint(x), C.GLuint(y), C.GLuint(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI2ui.xml -func (gl *GL) VertexAttribI2ui(index glbase.Attrib, x, y uint32) { - C.gl4_2compat_glVertexAttribI2ui(gl.funcs, C.GLuint(index), C.GLuint(x), C.GLuint(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI1ui.xml -func (gl *GL) VertexAttribI1ui(index glbase.Attrib, x uint32) { - C.gl4_2compat_glVertexAttribI1ui(gl.funcs, C.GLuint(index), C.GLuint(x)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI4i.xml -func (gl *GL) VertexAttribI4i(index glbase.Attrib, x, y, z, w int) { - C.gl4_2compat_glVertexAttribI4i(gl.funcs, C.GLuint(index), C.GLint(x), C.GLint(y), C.GLint(z), C.GLint(w)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI3i.xml -func (gl *GL) VertexAttribI3i(index glbase.Attrib, x, y, z int) { - C.gl4_2compat_glVertexAttribI3i(gl.funcs, C.GLuint(index), C.GLint(x), C.GLint(y), C.GLint(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI2i.xml -func (gl *GL) VertexAttribI2i(index glbase.Attrib, x, y int) { - C.gl4_2compat_glVertexAttribI2i(gl.funcs, C.GLuint(index), C.GLint(x), C.GLint(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI1i.xml -func (gl *GL) VertexAttribI1i(index glbase.Attrib, x int) { - C.gl4_2compat_glVertexAttribI1i(gl.funcs, C.GLuint(index), C.GLint(x)) -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.2core/funcs.cpp b/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.2core/funcs.cpp deleted file mode 100644 index 567e39b308..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.2core/funcs.cpp +++ /dev/null @@ -1,2748 +0,0 @@ - -// ** file automatically generated by glgen -- do not edit manually ** - -#include -#include - -#include "funcs.h" - -void *gl4_2core_funcs() { - QOpenGLFunctions_4_2_Core* funcs = QOpenGLContext::currentContext()->versionFunctions(); - if (!funcs) { - return 0; - } - funcs->initializeOpenGLFunctions(); - return funcs; -} - - -void gl4_2core_glViewport(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glViewport(x, y, width, height); -} - -void gl4_2core_glDepthRange(void *_glfuncs, GLdouble nearVal, GLdouble farVal) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthRange(nearVal, farVal); -} - -GLboolean gl4_2core_glIsEnabled(void *_glfuncs, GLenum cap) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsEnabled(cap); -} - -void gl4_2core_glGetTexLevelParameteriv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexLevelParameteriv(target, level, pname, params); -} - -void gl4_2core_glGetTexLevelParameterfv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexLevelParameterfv(target, level, pname, params); -} - -void gl4_2core_glGetTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameteriv(target, pname, params); -} - -void gl4_2core_glGetTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameterfv(target, pname, params); -} - -void gl4_2core_glGetTexImage(void *_glfuncs, GLenum target, GLint level, GLenum format, GLenum gltype, GLvoid* pixels) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexImage(target, level, format, gltype, pixels); -} - -void gl4_2core_glGetIntegerv(void *_glfuncs, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetIntegerv(pname, params); -} - -void gl4_2core_glGetFloatv(void *_glfuncs, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetFloatv(pname, params); -} - -GLenum gl4_2core_glGetError(void *_glfuncs) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetError(); -} - -void gl4_2core_glGetDoublev(void *_glfuncs, GLenum pname, GLdouble* params) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetDoublev(pname, params); -} - -void gl4_2core_glGetBooleanv(void *_glfuncs, GLenum pname, GLboolean* params) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBooleanv(pname, params); -} - -void gl4_2core_glReadPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum gltype, GLvoid* pixels) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glReadPixels(x, y, width, height, format, gltype, pixels); -} - -void gl4_2core_glReadBuffer(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glReadBuffer(mode); -} - -void gl4_2core_glPixelStorei(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelStorei(pname, param); -} - -void gl4_2core_glPixelStoref(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelStoref(pname, param); -} - -void gl4_2core_glDepthFunc(void *_glfuncs, GLenum glfunc) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthFunc(glfunc); -} - -void gl4_2core_glStencilOp(void *_glfuncs, GLenum fail, GLenum zfail, GLenum zpass) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilOp(fail, zfail, zpass); -} - -void gl4_2core_glStencilFunc(void *_glfuncs, GLenum glfunc, GLint ref, GLuint mask) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilFunc(glfunc, ref, mask); -} - -void gl4_2core_glLogicOp(void *_glfuncs, GLenum opcode) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLogicOp(opcode); -} - -void gl4_2core_glBlendFunc(void *_glfuncs, GLenum sfactor, GLenum dfactor) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendFunc(sfactor, dfactor); -} - -void gl4_2core_glFlush(void *_glfuncs) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFlush(); -} - -void gl4_2core_glFinish(void *_glfuncs) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFinish(); -} - -void gl4_2core_glEnable(void *_glfuncs, GLenum cap) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnable(cap); -} - -void gl4_2core_glDisable(void *_glfuncs, GLenum cap) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDisable(cap); -} - -void gl4_2core_glDepthMask(void *_glfuncs, GLboolean flag) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthMask(flag); -} - -void gl4_2core_glColorMask(void *_glfuncs, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorMask(red, green, blue, alpha); -} - -void gl4_2core_glStencilMask(void *_glfuncs, GLuint mask) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilMask(mask); -} - -void gl4_2core_glClearDepth(void *_glfuncs, GLdouble depth) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearDepth(depth); -} - -void gl4_2core_glClearStencil(void *_glfuncs, GLint s) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearStencil(s); -} - -void gl4_2core_glClearColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearColor(red, green, blue, alpha); -} - -void gl4_2core_glClear(void *_glfuncs, GLbitfield mask) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClear(mask); -} - -void gl4_2core_glDrawBuffer(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawBuffer(mode); -} - -void gl4_2core_glTexImage2D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage2D(target, level, internalFormat, width, height, border, format, gltype, pixels); -} - -void gl4_2core_glTexImage1D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage1D(target, level, internalFormat, width, border, format, gltype, pixels); -} - -void gl4_2core_glTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameteriv(target, pname, params); -} - -void gl4_2core_glTexParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint param) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameteri(target, pname, param); -} - -void gl4_2core_glTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterfv(target, pname, params); -} - -void gl4_2core_glTexParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterf(target, pname, param); -} - -void gl4_2core_glScissor(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScissor(x, y, width, height); -} - -void gl4_2core_glPolygonMode(void *_glfuncs, GLenum face, GLenum mode) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPolygonMode(face, mode); -} - -void gl4_2core_glPointSize(void *_glfuncs, GLfloat size) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointSize(size); -} - -void gl4_2core_glLineWidth(void *_glfuncs, GLfloat width) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLineWidth(width); -} - -void gl4_2core_glHint(void *_glfuncs, GLenum target, GLenum mode) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glHint(target, mode); -} - -void gl4_2core_glFrontFace(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFrontFace(mode); -} - -void gl4_2core_glCullFace(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCullFace(mode); -} - -void gl4_2core_glIndexubv(void *_glfuncs, const GLubyte* c) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexubv(c); -} - -void gl4_2core_glIndexub(void *_glfuncs, GLubyte c) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexub(c); -} - -GLboolean gl4_2core_glIsTexture(void *_glfuncs, GLuint texture) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsTexture(texture); -} - -void gl4_2core_glGenTextures(void *_glfuncs, GLsizei n, GLuint* textures) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenTextures(n, textures); -} - -void gl4_2core_glDeleteTextures(void *_glfuncs, GLsizei n, const GLuint* textures) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteTextures(n, textures); -} - -void gl4_2core_glBindTexture(void *_glfuncs, GLenum target, GLuint texture) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindTexture(target, texture); -} - -void gl4_2core_glTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, gltype, pixels); -} - -void gl4_2core_glTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexSubImage1D(target, level, xoffset, width, format, gltype, pixels); -} - -void gl4_2core_glCopyTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height); -} - -void gl4_2core_glCopyTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexSubImage1D(target, level, xoffset, x, y, width); -} - -void gl4_2core_glCopyTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexImage2D(target, level, internalFormat, x, y, width, height, border); -} - -void gl4_2core_glCopyTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexImage1D(target, level, internalFormat, x, y, width, border); -} - -void gl4_2core_glPolygonOffset(void *_glfuncs, GLfloat factor, GLfloat units) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPolygonOffset(factor, units); -} - -void gl4_2core_glDrawElements(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElements(mode, count, gltype, indices); -} - -void gl4_2core_glDrawArrays(void *_glfuncs, GLenum mode, GLint first, GLsizei count) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawArrays(mode, first, count); -} - -void gl4_2core_glCopyTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexSubImage3D(target, level, xoffset, yoffset, zoffset, x, y, width, height); -} - -void gl4_2core_glTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, gltype, pixels); -} - -void gl4_2core_glTexImage3D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage3D(target, level, internalFormat, width, height, depth, border, format, gltype, pixels); -} - -void gl4_2core_glDrawRangeElements(void *_glfuncs, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum gltype, const GLvoid* indices) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawRangeElements(mode, start, end, count, gltype, indices); -} - -void gl4_2core_glBlendEquation(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendEquation(mode); -} - -void gl4_2core_glBlendColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendColor(red, green, blue, alpha); -} - -void gl4_2core_glGetCompressedTexImage(void *_glfuncs, GLenum target, GLint level, GLvoid* img) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetCompressedTexImage(target, level, img); -} - -void gl4_2core_glCompressedTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexSubImage1D(target, level, xoffset, width, format, imageSize, data); -} - -void gl4_2core_glCompressedTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data); -} - -void gl4_2core_glCompressedTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data); -} - -void gl4_2core_glCompressedTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexImage1D(target, level, internalFormat, width, border, imageSize, data); -} - -void gl4_2core_glCompressedTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexImage2D(target, level, internalFormat, width, height, border, imageSize, data); -} - -void gl4_2core_glCompressedTexImage3D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexImage3D(target, level, internalFormat, width, height, depth, border, imageSize, data); -} - -void gl4_2core_glSampleCoverage(void *_glfuncs, GLfloat value, GLboolean invert) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSampleCoverage(value, invert); -} - -void gl4_2core_glActiveTexture(void *_glfuncs, GLenum texture) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glActiveTexture(texture); -} - -void gl4_2core_glPointParameteriv(void *_glfuncs, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameteriv(pname, params); -} - -void gl4_2core_glPointParameteri(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameteri(pname, param); -} - -void gl4_2core_glPointParameterfv(void *_glfuncs, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameterfv(pname, params); -} - -void gl4_2core_glPointParameterf(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameterf(pname, param); -} - -void gl4_2core_glMultiDrawArrays(void *_glfuncs, GLenum mode, const GLint* first, const GLsizei* count, GLsizei drawcount) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiDrawArrays(mode, first, count, drawcount); -} - -void gl4_2core_glBlendFuncSeparate(void *_glfuncs, GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendFuncSeparate(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha); -} - -void gl4_2core_glGetBufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBufferParameteriv(target, pname, params); -} - -GLboolean gl4_2core_glUnmapBuffer(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glUnmapBuffer(target); -} - -void gl4_2core_glGetBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, GLvoid* data) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBufferSubData(target, offset, size, data); -} - -void gl4_2core_glBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBufferSubData(target, offset, size, data); -} - -void gl4_2core_glBufferData(void *_glfuncs, GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBufferData(target, size, data, usage); -} - -GLboolean gl4_2core_glIsBuffer(void *_glfuncs, GLuint buffer) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsBuffer(buffer); -} - -void gl4_2core_glGenBuffers(void *_glfuncs, GLsizei n, GLuint* buffers) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenBuffers(n, buffers); -} - -void gl4_2core_glDeleteBuffers(void *_glfuncs, GLsizei n, const GLuint* buffers) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteBuffers(n, buffers); -} - -void gl4_2core_glBindBuffer(void *_glfuncs, GLenum target, GLuint buffer) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindBuffer(target, buffer); -} - -void gl4_2core_glGetQueryObjectuiv(void *_glfuncs, GLuint id, GLenum pname, GLuint* params) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryObjectuiv(id, pname, params); -} - -void gl4_2core_glGetQueryObjectiv(void *_glfuncs, GLuint id, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryObjectiv(id, pname, params); -} - -void gl4_2core_glGetQueryiv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryiv(target, pname, params); -} - -void gl4_2core_glEndQuery(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndQuery(target); -} - -void gl4_2core_glBeginQuery(void *_glfuncs, GLenum target, GLuint id) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBeginQuery(target, id); -} - -GLboolean gl4_2core_glIsQuery(void *_glfuncs, GLuint id) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsQuery(id); -} - -void gl4_2core_glDeleteQueries(void *_glfuncs, GLsizei n, const GLuint* ids) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteQueries(n, ids); -} - -void gl4_2core_glGenQueries(void *_glfuncs, GLsizei n, GLuint* ids) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenQueries(n, ids); -} - -void gl4_2core_glVertexAttribPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLboolean normalized, GLsizei stride, const GLvoid* offset) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribPointer(index, size, gltype, normalized, stride, offset); -} - -void gl4_2core_glValidateProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glValidateProgram(program); -} - -void gl4_2core_glUniformMatrix4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4fv(location, count, transpose, value); -} - -void gl4_2core_glUniformMatrix3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3fv(location, count, transpose, value); -} - -void gl4_2core_glUniformMatrix2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2fv(location, count, transpose, value); -} - -void gl4_2core_glUniform4iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4iv(location, count, value); -} - -void gl4_2core_glUniform3iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3iv(location, count, value); -} - -void gl4_2core_glUniform2iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2iv(location, count, value); -} - -void gl4_2core_glUniform1iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1iv(location, count, value); -} - -void gl4_2core_glUniform4fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4fv(location, count, value); -} - -void gl4_2core_glUniform3fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3fv(location, count, value); -} - -void gl4_2core_glUniform2fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2fv(location, count, value); -} - -void gl4_2core_glUniform1fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1fv(location, count, value); -} - -void gl4_2core_glUniform4i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2, GLint v3) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4i(location, v0, v1, v2, v3); -} - -void gl4_2core_glUniform3i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3i(location, v0, v1, v2); -} - -void gl4_2core_glUniform2i(void *_glfuncs, GLint location, GLint v0, GLint v1) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2i(location, v0, v1); -} - -void gl4_2core_glUniform1i(void *_glfuncs, GLint location, GLint v0) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1i(location, v0); -} - -void gl4_2core_glUniform4f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4f(location, v0, v1, v2, v3); -} - -void gl4_2core_glUniform3f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3f(location, v0, v1, v2); -} - -void gl4_2core_glUniform2f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2f(location, v0, v1); -} - -void gl4_2core_glUniform1f(void *_glfuncs, GLint location, GLfloat v0) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1f(location, v0); -} - -void gl4_2core_glUseProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUseProgram(program); -} - -void gl4_2core_glShaderSource(void *_glfuncs, GLuint shader, GLsizei count, const GLchar** source, const GLint* length) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glShaderSource(shader, count, source, length); -} - -void gl4_2core_glLinkProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLinkProgram(program); -} - -GLboolean gl4_2core_glIsShader(void *_glfuncs, GLuint shader) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsShader(shader); -} - -GLboolean gl4_2core_glIsProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsProgram(program); -} - -void gl4_2core_glGetVertexAttribiv(void *_glfuncs, GLuint index, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribiv(index, pname, params); -} - -void gl4_2core_glGetVertexAttribfv(void *_glfuncs, GLuint index, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribfv(index, pname, params); -} - -void gl4_2core_glGetVertexAttribdv(void *_glfuncs, GLuint index, GLenum pname, GLdouble* params) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribdv(index, pname, params); -} - -void gl4_2core_glGetUniformiv(void *_glfuncs, GLuint program, GLint location, GLint* params) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetUniformiv(program, location, params); -} - -void gl4_2core_glGetUniformfv(void *_glfuncs, GLuint program, GLint location, GLfloat* params) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetUniformfv(program, location, params); -} - -GLint gl4_2core_glGetUniformLocation(void *_glfuncs, GLuint program, const GLchar* name) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetUniformLocation(program, name); -} - -void gl4_2core_glGetShaderSource(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* source) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetShaderSource(shader, bufSize, length, source); -} - -void gl4_2core_glGetShaderInfoLog(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* infoLog) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetShaderInfoLog(shader, bufSize, length, infoLog); -} - -void gl4_2core_glGetShaderiv(void *_glfuncs, GLuint shader, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetShaderiv(shader, pname, params); -} - -void gl4_2core_glGetProgramInfoLog(void *_glfuncs, GLuint program, GLsizei bufSize, GLsizei* length, GLchar* infoLog) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetProgramInfoLog(program, bufSize, length, infoLog); -} - -void gl4_2core_glGetProgramiv(void *_glfuncs, GLuint program, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetProgramiv(program, pname, params); -} - -GLint gl4_2core_glGetAttribLocation(void *_glfuncs, GLuint program, const GLchar* name) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetAttribLocation(program, name); -} - -void gl4_2core_glGetAttachedShaders(void *_glfuncs, GLuint program, GLsizei maxCount, GLsizei* count, GLuint* obj) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetAttachedShaders(program, maxCount, count, obj); -} - -void gl4_2core_glGetActiveUniform(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniform(program, index, bufSize, length, size, gltype, name); -} - -void gl4_2core_glGetActiveAttrib(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveAttrib(program, index, bufSize, length, size, gltype, name); -} - -void gl4_2core_glEnableVertexAttribArray(void *_glfuncs, GLuint index) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnableVertexAttribArray(index); -} - -void gl4_2core_glDisableVertexAttribArray(void *_glfuncs, GLuint index) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDisableVertexAttribArray(index); -} - -void gl4_2core_glDetachShader(void *_glfuncs, GLuint program, GLuint shader) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDetachShader(program, shader); -} - -void gl4_2core_glDeleteShader(void *_glfuncs, GLuint shader) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteShader(shader); -} - -void gl4_2core_glDeleteProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteProgram(program); -} - -GLuint gl4_2core_glCreateShader(void *_glfuncs, GLenum gltype) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glCreateShader(gltype); -} - -GLuint gl4_2core_glCreateProgram(void *_glfuncs) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glCreateProgram(); -} - -void gl4_2core_glCompileShader(void *_glfuncs, GLuint shader) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompileShader(shader); -} - -void gl4_2core_glBindAttribLocation(void *_glfuncs, GLuint program, GLuint index, const GLchar* name) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindAttribLocation(program, index, name); -} - -void gl4_2core_glAttachShader(void *_glfuncs, GLuint program, GLuint shader) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glAttachShader(program, shader); -} - -void gl4_2core_glStencilMaskSeparate(void *_glfuncs, GLenum face, GLuint mask) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilMaskSeparate(face, mask); -} - -void gl4_2core_glStencilFuncSeparate(void *_glfuncs, GLenum face, GLenum glfunc, GLint ref, GLuint mask) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilFuncSeparate(face, glfunc, ref, mask); -} - -void gl4_2core_glStencilOpSeparate(void *_glfuncs, GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilOpSeparate(face, sfail, dpfail, dppass); -} - -void gl4_2core_glDrawBuffers(void *_glfuncs, GLsizei n, const GLenum* bufs) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawBuffers(n, bufs); -} - -void gl4_2core_glBlendEquationSeparate(void *_glfuncs, GLenum modeRGB, GLenum modeAlpha) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendEquationSeparate(modeRGB, modeAlpha); -} - -void gl4_2core_glUniformMatrix4x3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4x3fv(location, count, transpose, value); -} - -void gl4_2core_glUniformMatrix3x4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3x4fv(location, count, transpose, value); -} - -void gl4_2core_glUniformMatrix4x2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4x2fv(location, count, transpose, value); -} - -void gl4_2core_glUniformMatrix2x4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2x4fv(location, count, transpose, value); -} - -void gl4_2core_glUniformMatrix3x2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3x2fv(location, count, transpose, value); -} - -void gl4_2core_glUniformMatrix2x3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2x3fv(location, count, transpose, value); -} - -GLboolean gl4_2core_glIsVertexArray(void *_glfuncs, GLuint array) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsVertexArray(array); -} - -void gl4_2core_glGenVertexArrays(void *_glfuncs, GLsizei n, GLuint* arrays) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenVertexArrays(n, arrays); -} - -void gl4_2core_glDeleteVertexArrays(void *_glfuncs, GLsizei n, const GLuint* arrays) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteVertexArrays(n, arrays); -} - -void gl4_2core_glBindVertexArray(void *_glfuncs, GLuint array) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindVertexArray(array); -} - -void gl4_2core_glFlushMappedBufferRange(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr length) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFlushMappedBufferRange(target, offset, length); -} - -void gl4_2core_glFramebufferTextureLayer(void *_glfuncs, GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTextureLayer(target, attachment, texture, level, layer); -} - -void gl4_2core_glRenderbufferStorageMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRenderbufferStorageMultisample(target, samples, internalFormat, width, height); -} - -void gl4_2core_glBlitFramebuffer(void *_glfuncs, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter); -} - -void gl4_2core_glGenerateMipmap(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenerateMipmap(target); -} - -void gl4_2core_glGetFramebufferAttachmentParameteriv(void *_glfuncs, GLenum target, GLenum attachment, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetFramebufferAttachmentParameteriv(target, attachment, pname, params); -} - -void gl4_2core_glFramebufferRenderbuffer(void *_glfuncs, GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer); -} - -void gl4_2core_glFramebufferTexture3D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTexture3D(target, attachment, textarget, texture, level, zoffset); -} - -void gl4_2core_glFramebufferTexture2D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTexture2D(target, attachment, textarget, texture, level); -} - -void gl4_2core_glFramebufferTexture1D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTexture1D(target, attachment, textarget, texture, level); -} - -GLenum gl4_2core_glCheckFramebufferStatus(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glCheckFramebufferStatus(target); -} - -void gl4_2core_glGenFramebuffers(void *_glfuncs, GLsizei n, GLuint* framebuffers) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenFramebuffers(n, framebuffers); -} - -void gl4_2core_glDeleteFramebuffers(void *_glfuncs, GLsizei n, const GLuint* framebuffers) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteFramebuffers(n, framebuffers); -} - -void gl4_2core_glBindFramebuffer(void *_glfuncs, GLenum target, GLuint framebuffer) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindFramebuffer(target, framebuffer); -} - -GLboolean gl4_2core_glIsFramebuffer(void *_glfuncs, GLuint framebuffer) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsFramebuffer(framebuffer); -} - -void gl4_2core_glGetRenderbufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetRenderbufferParameteriv(target, pname, params); -} - -void gl4_2core_glRenderbufferStorage(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRenderbufferStorage(target, internalFormat, width, height); -} - -void gl4_2core_glGenRenderbuffers(void *_glfuncs, GLsizei n, GLuint* renderbuffers) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenRenderbuffers(n, renderbuffers); -} - -void gl4_2core_glDeleteRenderbuffers(void *_glfuncs, GLsizei n, const GLuint* renderbuffers) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteRenderbuffers(n, renderbuffers); -} - -void gl4_2core_glBindRenderbuffer(void *_glfuncs, GLenum target, GLuint renderbuffer) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindRenderbuffer(target, renderbuffer); -} - -GLboolean gl4_2core_glIsRenderbuffer(void *_glfuncs, GLuint renderbuffer) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsRenderbuffer(renderbuffer); -} - -void gl4_2core_glClearBufferfi(void *_glfuncs, GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearBufferfi(buffer, drawbuffer, depth, stencil); -} - -void gl4_2core_glClearBufferfv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLfloat* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearBufferfv(buffer, drawbuffer, value); -} - -void gl4_2core_glClearBufferuiv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLuint* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearBufferuiv(buffer, drawbuffer, value); -} - -void gl4_2core_glClearBufferiv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLint* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearBufferiv(buffer, drawbuffer, value); -} - -void gl4_2core_glGetTexParameterIuiv(void *_glfuncs, GLenum target, GLenum pname, GLuint* params) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameterIuiv(target, pname, params); -} - -void gl4_2core_glGetTexParameterIiv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameterIiv(target, pname, params); -} - -void gl4_2core_glTexParameterIuiv(void *_glfuncs, GLenum target, GLenum pname, const GLuint* params) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterIuiv(target, pname, params); -} - -void gl4_2core_glTexParameterIiv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterIiv(target, pname, params); -} - -void gl4_2core_glUniform4uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4uiv(location, count, value); -} - -void gl4_2core_glUniform3uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3uiv(location, count, value); -} - -void gl4_2core_glUniform2uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2uiv(location, count, value); -} - -void gl4_2core_glUniform1uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1uiv(location, count, value); -} - -void gl4_2core_glUniform4ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4ui(location, v0, v1, v2, v3); -} - -void gl4_2core_glUniform3ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1, GLuint v2) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3ui(location, v0, v1, v2); -} - -void gl4_2core_glUniform2ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2ui(location, v0, v1); -} - -void gl4_2core_glUniform1ui(void *_glfuncs, GLint location, GLuint v0) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1ui(location, v0); -} - -GLint gl4_2core_glGetFragDataLocation(void *_glfuncs, GLuint program, const GLchar* name) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetFragDataLocation(program, name); -} - -void gl4_2core_glBindFragDataLocation(void *_glfuncs, GLuint program, GLuint color, const GLchar* name) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindFragDataLocation(program, color, name); -} - -void gl4_2core_glGetUniformuiv(void *_glfuncs, GLuint program, GLint location, GLuint* params) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetUniformuiv(program, location, params); -} - -void gl4_2core_glGetVertexAttribIuiv(void *_glfuncs, GLuint index, GLenum pname, GLuint* params) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribIuiv(index, pname, params); -} - -void gl4_2core_glGetVertexAttribIiv(void *_glfuncs, GLuint index, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribIiv(index, pname, params); -} - -void gl4_2core_glVertexAttribIPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribIPointer(index, size, gltype, stride, pointer); -} - -void gl4_2core_glEndConditionalRender(void *_glfuncs) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndConditionalRender(); -} - -void gl4_2core_glBeginConditionalRender(void *_glfuncs, GLuint id, GLenum mode) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBeginConditionalRender(id, mode); -} - -void gl4_2core_glClampColor(void *_glfuncs, GLenum target, GLenum clamp) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClampColor(target, clamp); -} - -void gl4_2core_glGetTransformFeedbackVarying(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* gltype, GLchar* name) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTransformFeedbackVarying(program, index, bufSize, length, size, gltype, name); -} - -void gl4_2core_glBindBufferBase(void *_glfuncs, GLenum target, GLuint index, GLuint buffer) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindBufferBase(target, index, buffer); -} - -void gl4_2core_glBindBufferRange(void *_glfuncs, GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindBufferRange(target, index, buffer, offset, size); -} - -void gl4_2core_glEndTransformFeedback(void *_glfuncs) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndTransformFeedback(); -} - -void gl4_2core_glBeginTransformFeedback(void *_glfuncs, GLenum primitiveMode) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBeginTransformFeedback(primitiveMode); -} - -GLboolean gl4_2core_glIsEnabledi(void *_glfuncs, GLenum target, GLuint index) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsEnabledi(target, index); -} - -void gl4_2core_glDisablei(void *_glfuncs, GLenum target, GLuint index) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDisablei(target, index); -} - -void gl4_2core_glEnablei(void *_glfuncs, GLenum target, GLuint index) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnablei(target, index); -} - -void gl4_2core_glGetIntegeri_v(void *_glfuncs, GLenum target, GLuint index, GLint* data) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetIntegeri_v(target, index, data); -} - -void gl4_2core_glGetBooleani_v(void *_glfuncs, GLenum target, GLuint index, GLboolean* data) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBooleani_v(target, index, data); -} - -void gl4_2core_glColorMaski(void *_glfuncs, GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorMaski(index, r, g, b, a); -} - -void gl4_2core_glCopyBufferSubData(void *_glfuncs, GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyBufferSubData(readTarget, writeTarget, readOffset, writeOffset, size); -} - -void gl4_2core_glUniformBlockBinding(void *_glfuncs, GLuint program, GLuint v0, GLuint v1) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformBlockBinding(program, v0, v1); -} - -void gl4_2core_glGetActiveUniformBlockName(void *_glfuncs, GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformBlockName) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniformBlockName(program, uniformBlockIndex, bufSize, length, uniformBlockName); -} - -void gl4_2core_glGetActiveUniformBlockiv(void *_glfuncs, GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniformBlockiv(program, uniformBlockIndex, pname, params); -} - -GLuint gl4_2core_glGetUniformBlockIndex(void *_glfuncs, GLuint program, const GLchar* uniformBlockName) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetUniformBlockIndex(program, uniformBlockName); -} - -void gl4_2core_glGetActiveUniformName(void *_glfuncs, GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformName) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniformName(program, uniformIndex, bufSize, length, uniformName); -} - -void gl4_2core_glGetActiveUniformsiv(void *_glfuncs, GLuint program, GLsizei uniformCount, const GLuint* uniformIndices, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniformsiv(program, uniformCount, uniformIndices, pname, params); -} - -void gl4_2core_glPrimitiveRestartIndex(void *_glfuncs, GLuint index) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPrimitiveRestartIndex(index); -} - -void gl4_2core_glTexBuffer(void *_glfuncs, GLenum target, GLenum internalFormat, GLuint buffer) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexBuffer(target, internalFormat, buffer); -} - -void gl4_2core_glDrawElementsInstanced(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLsizei instancecount) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElementsInstanced(mode, count, gltype, indices, instancecount); -} - -void gl4_2core_glDrawArraysInstanced(void *_glfuncs, GLenum mode, GLint first, GLsizei count, GLsizei instancecount) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawArraysInstanced(mode, first, count, instancecount); -} - -void gl4_2core_glSampleMaski(void *_glfuncs, GLuint index, GLbitfield mask) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSampleMaski(index, mask); -} - -void gl4_2core_glGetMultisamplefv(void *_glfuncs, GLenum pname, GLuint index, GLfloat* val) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMultisamplefv(pname, index, val); -} - -void gl4_2core_glTexImage3DMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage3DMultisample(target, samples, internalFormat, width, height, depth, fixedsamplelocations); -} - -void gl4_2core_glTexImage2DMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage2DMultisample(target, samples, internalFormat, width, height, fixedsamplelocations); -} - -void gl4_2core_glGetSynciv(void *_glfuncs, GLsync sync, GLenum pname, GLsizei bufSize, GLsizei* length, GLint* values) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetSynciv(sync, pname, bufSize, length, values); -} - -void gl4_2core_glGetInteger64v(void *_glfuncs, GLenum pname, GLint64* params) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetInteger64v(pname, params); -} - -void gl4_2core_glWaitSync(void *_glfuncs, GLsync sync, GLbitfield flags, GLuint64 timeout) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWaitSync(sync, flags, timeout); -} - -GLenum gl4_2core_glClientWaitSync(void *_glfuncs, GLsync sync, GLbitfield flags, GLuint64 timeout) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glClientWaitSync(sync, flags, timeout); -} - -void gl4_2core_glDeleteSync(void *_glfuncs, GLsync sync) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteSync(sync); -} - -GLboolean gl4_2core_glIsSync(void *_glfuncs, GLsync sync) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsSync(sync); -} - -GLsync gl4_2core_glFenceSync(void *_glfuncs, GLenum condition, GLbitfield flags) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glFenceSync(condition, flags); -} - -void gl4_2core_glProvokingVertex(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProvokingVertex(mode); -} - -void gl4_2core_glDrawElementsInstancedBaseVertex(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLsizei instancecount, GLint basevertex) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElementsInstancedBaseVertex(mode, count, gltype, indices, instancecount, basevertex); -} - -void gl4_2core_glDrawRangeElementsBaseVertex(void *_glfuncs, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum gltype, const GLvoid* indices, GLint basevertex) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawRangeElementsBaseVertex(mode, start, end, count, gltype, indices, basevertex); -} - -void gl4_2core_glDrawElementsBaseVertex(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLint basevertex) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElementsBaseVertex(mode, count, gltype, indices, basevertex); -} - -void gl4_2core_glFramebufferTexture(void *_glfuncs, GLenum target, GLenum attachment, GLuint texture, GLint level) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTexture(target, attachment, texture, level); -} - -void gl4_2core_glGetBufferParameteri64v(void *_glfuncs, GLenum target, GLenum pname, GLint64* params) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBufferParameteri64v(target, pname, params); -} - -void gl4_2core_glGetInteger64i_v(void *_glfuncs, GLenum target, GLuint index, GLint64* data) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetInteger64i_v(target, index, data); -} - -void gl4_2core_glVertexAttribP4uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP4uiv(index, gltype, normalized, value); -} - -void gl4_2core_glVertexAttribP4ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP4ui(index, gltype, normalized, value); -} - -void gl4_2core_glVertexAttribP3uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP3uiv(index, gltype, normalized, value); -} - -void gl4_2core_glVertexAttribP3ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP3ui(index, gltype, normalized, value); -} - -void gl4_2core_glVertexAttribP2uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP2uiv(index, gltype, normalized, value); -} - -void gl4_2core_glVertexAttribP2ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP2ui(index, gltype, normalized, value); -} - -void gl4_2core_glVertexAttribP1uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP1uiv(index, gltype, normalized, value); -} - -void gl4_2core_glVertexAttribP1ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP1ui(index, gltype, normalized, value); -} - -void gl4_2core_glSecondaryColorP3uiv(void *_glfuncs, GLenum gltype, const GLuint* color) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColorP3uiv(gltype, color); -} - -void gl4_2core_glSecondaryColorP3ui(void *_glfuncs, GLenum gltype, GLuint color) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColorP3ui(gltype, color); -} - -void gl4_2core_glColorP4uiv(void *_glfuncs, GLenum gltype, const GLuint* color) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorP4uiv(gltype, color); -} - -void gl4_2core_glColorP4ui(void *_glfuncs, GLenum gltype, GLuint color) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorP4ui(gltype, color); -} - -void gl4_2core_glColorP3uiv(void *_glfuncs, GLenum gltype, const GLuint* color) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorP3uiv(gltype, color); -} - -void gl4_2core_glColorP3ui(void *_glfuncs, GLenum gltype, GLuint color) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorP3ui(gltype, color); -} - -void gl4_2core_glNormalP3uiv(void *_glfuncs, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormalP3uiv(gltype, coords); -} - -void gl4_2core_glNormalP3ui(void *_glfuncs, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormalP3ui(gltype, coords); -} - -void gl4_2core_glMultiTexCoordP4uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP4uiv(texture, gltype, coords); -} - -void gl4_2core_glMultiTexCoordP4ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP4ui(texture, gltype, coords); -} - -void gl4_2core_glMultiTexCoordP3uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP3uiv(texture, gltype, coords); -} - -void gl4_2core_glMultiTexCoordP3ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP3ui(texture, gltype, coords); -} - -void gl4_2core_glMultiTexCoordP2uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP2uiv(texture, gltype, coords); -} - -void gl4_2core_glMultiTexCoordP2ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP2ui(texture, gltype, coords); -} - -void gl4_2core_glMultiTexCoordP1uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP1uiv(texture, gltype, coords); -} - -void gl4_2core_glMultiTexCoordP1ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP1ui(texture, gltype, coords); -} - -void gl4_2core_glTexCoordP4uiv(void *_glfuncs, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP4uiv(gltype, coords); -} - -void gl4_2core_glTexCoordP4ui(void *_glfuncs, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP4ui(gltype, coords); -} - -void gl4_2core_glTexCoordP3uiv(void *_glfuncs, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP3uiv(gltype, coords); -} - -void gl4_2core_glTexCoordP3ui(void *_glfuncs, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP3ui(gltype, coords); -} - -void gl4_2core_glTexCoordP2uiv(void *_glfuncs, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP2uiv(gltype, coords); -} - -void gl4_2core_glTexCoordP2ui(void *_glfuncs, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP2ui(gltype, coords); -} - -void gl4_2core_glTexCoordP1uiv(void *_glfuncs, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP1uiv(gltype, coords); -} - -void gl4_2core_glTexCoordP1ui(void *_glfuncs, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP1ui(gltype, coords); -} - -void gl4_2core_glVertexP4uiv(void *_glfuncs, GLenum gltype, const GLuint* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexP4uiv(gltype, value); -} - -void gl4_2core_glVertexP4ui(void *_glfuncs, GLenum gltype, GLuint value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexP4ui(gltype, value); -} - -void gl4_2core_glVertexP3uiv(void *_glfuncs, GLenum gltype, const GLuint* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexP3uiv(gltype, value); -} - -void gl4_2core_glVertexP3ui(void *_glfuncs, GLenum gltype, GLuint value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexP3ui(gltype, value); -} - -void gl4_2core_glVertexP2uiv(void *_glfuncs, GLenum gltype, const GLuint* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexP2uiv(gltype, value); -} - -void gl4_2core_glVertexP2ui(void *_glfuncs, GLenum gltype, GLuint value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexP2ui(gltype, value); -} - -void gl4_2core_glGetQueryObjectui64v(void *_glfuncs, GLuint id, GLenum pname, GLuint64* params) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryObjectui64v(id, pname, params); -} - -void gl4_2core_glGetQueryObjecti64v(void *_glfuncs, GLuint id, GLenum pname, GLint64* params) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryObjecti64v(id, pname, params); -} - -void gl4_2core_glQueryCounter(void *_glfuncs, GLuint id, GLenum target) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glQueryCounter(id, target); -} - -void gl4_2core_glGetSamplerParameterIuiv(void *_glfuncs, GLuint sampler, GLenum pname, GLuint* params) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetSamplerParameterIuiv(sampler, pname, params); -} - -void gl4_2core_glGetSamplerParameterfv(void *_glfuncs, GLuint sampler, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetSamplerParameterfv(sampler, pname, params); -} - -void gl4_2core_glGetSamplerParameterIiv(void *_glfuncs, GLuint sampler, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetSamplerParameterIiv(sampler, pname, params); -} - -void gl4_2core_glGetSamplerParameteriv(void *_glfuncs, GLuint sampler, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetSamplerParameteriv(sampler, pname, params); -} - -void gl4_2core_glSamplerParameterIuiv(void *_glfuncs, GLuint sampler, GLenum pname, const GLuint* param) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSamplerParameterIuiv(sampler, pname, param); -} - -void gl4_2core_glSamplerParameterIiv(void *_glfuncs, GLuint sampler, GLenum pname, const GLint* param) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSamplerParameterIiv(sampler, pname, param); -} - -void gl4_2core_glSamplerParameterfv(void *_glfuncs, GLuint sampler, GLenum pname, const GLfloat* param) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSamplerParameterfv(sampler, pname, param); -} - -void gl4_2core_glSamplerParameterf(void *_glfuncs, GLuint sampler, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSamplerParameterf(sampler, pname, param); -} - -void gl4_2core_glSamplerParameteriv(void *_glfuncs, GLuint sampler, GLenum pname, const GLint* param) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSamplerParameteriv(sampler, pname, param); -} - -void gl4_2core_glSamplerParameteri(void *_glfuncs, GLuint sampler, GLenum pname, GLint param) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSamplerParameteri(sampler, pname, param); -} - -void gl4_2core_glBindSampler(void *_glfuncs, GLuint unit, GLuint sampler) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindSampler(unit, sampler); -} - -GLboolean gl4_2core_glIsSampler(void *_glfuncs, GLuint sampler) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsSampler(sampler); -} - -void gl4_2core_glDeleteSamplers(void *_glfuncs, GLsizei count, const GLuint* samplers) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteSamplers(count, samplers); -} - -void gl4_2core_glGenSamplers(void *_glfuncs, GLsizei count, GLuint* samplers) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenSamplers(count, samplers); -} - -GLint gl4_2core_glGetFragDataIndex(void *_glfuncs, GLuint program, const GLchar* name) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetFragDataIndex(program, name); -} - -void gl4_2core_glBindFragDataLocationIndexed(void *_glfuncs, GLuint program, GLuint colorNumber, GLuint index, const GLchar* name) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindFragDataLocationIndexed(program, colorNumber, index, name); -} - -void gl4_2core_glVertexAttribDivisor(void *_glfuncs, GLuint index, GLuint divisor) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribDivisor(index, divisor); -} - -void gl4_2core_glGetQueryIndexediv(void *_glfuncs, GLenum target, GLuint index, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryIndexediv(target, index, pname, params); -} - -void gl4_2core_glEndQueryIndexed(void *_glfuncs, GLenum target, GLuint index) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndQueryIndexed(target, index); -} - -void gl4_2core_glBeginQueryIndexed(void *_glfuncs, GLenum target, GLuint index, GLuint id) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBeginQueryIndexed(target, index, id); -} - -void gl4_2core_glDrawTransformFeedbackStream(void *_glfuncs, GLenum mode, GLuint id, GLuint stream) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawTransformFeedbackStream(mode, id, stream); -} - -void gl4_2core_glDrawTransformFeedback(void *_glfuncs, GLenum mode, GLuint id) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawTransformFeedback(mode, id); -} - -void gl4_2core_glResumeTransformFeedback(void *_glfuncs) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glResumeTransformFeedback(); -} - -void gl4_2core_glPauseTransformFeedback(void *_glfuncs) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPauseTransformFeedback(); -} - -GLboolean gl4_2core_glIsTransformFeedback(void *_glfuncs, GLuint id) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsTransformFeedback(id); -} - -void gl4_2core_glGenTransformFeedbacks(void *_glfuncs, GLsizei n, GLuint* ids) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenTransformFeedbacks(n, ids); -} - -void gl4_2core_glDeleteTransformFeedbacks(void *_glfuncs, GLsizei n, const GLuint* ids) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteTransformFeedbacks(n, ids); -} - -void gl4_2core_glBindTransformFeedback(void *_glfuncs, GLenum target, GLuint id) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindTransformFeedback(target, id); -} - -void gl4_2core_glPatchParameterfv(void *_glfuncs, GLenum pname, const GLfloat* values) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPatchParameterfv(pname, values); -} - -void gl4_2core_glPatchParameteri(void *_glfuncs, GLenum pname, GLint value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPatchParameteri(pname, value); -} - -void gl4_2core_glGetProgramStageiv(void *_glfuncs, GLuint program, GLenum shadertype, GLenum pname, GLint* values) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetProgramStageiv(program, shadertype, pname, values); -} - -void gl4_2core_glGetUniformSubroutineuiv(void *_glfuncs, GLenum shadertype, GLint location, GLuint* params) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetUniformSubroutineuiv(shadertype, location, params); -} - -void gl4_2core_glUniformSubroutinesuiv(void *_glfuncs, GLenum shadertype, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformSubroutinesuiv(shadertype, count, value); -} - -void gl4_2core_glGetActiveSubroutineName(void *_glfuncs, GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei* length, GLchar* name) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveSubroutineName(program, shadertype, index, bufSize, length, name); -} - -void gl4_2core_glGetActiveSubroutineUniformName(void *_glfuncs, GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei* length, GLchar* name) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveSubroutineUniformName(program, shadertype, index, bufSize, length, name); -} - -void gl4_2core_glGetActiveSubroutineUniformiv(void *_glfuncs, GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint* values) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveSubroutineUniformiv(program, shadertype, index, pname, values); -} - -GLuint gl4_2core_glGetSubroutineIndex(void *_glfuncs, GLuint program, GLenum shadertype, const GLchar* name) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetSubroutineIndex(program, shadertype, name); -} - -GLint gl4_2core_glGetSubroutineUniformLocation(void *_glfuncs, GLuint program, GLenum shadertype, const GLchar* name) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetSubroutineUniformLocation(program, shadertype, name); -} - -void gl4_2core_glGetUniformdv(void *_glfuncs, GLuint program, GLint location, GLdouble* params) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetUniformdv(program, location, params); -} - -void gl4_2core_glUniformMatrix4x3dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4x3dv(location, count, transpose, value); -} - -void gl4_2core_glUniformMatrix4x2dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4x2dv(location, count, transpose, value); -} - -void gl4_2core_glUniformMatrix3x4dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3x4dv(location, count, transpose, value); -} - -void gl4_2core_glUniformMatrix3x2dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3x2dv(location, count, transpose, value); -} - -void gl4_2core_glUniformMatrix2x4dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2x4dv(location, count, transpose, value); -} - -void gl4_2core_glUniformMatrix2x3dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2x3dv(location, count, transpose, value); -} - -void gl4_2core_glUniformMatrix4dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4dv(location, count, transpose, value); -} - -void gl4_2core_glUniformMatrix3dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3dv(location, count, transpose, value); -} - -void gl4_2core_glUniformMatrix2dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2dv(location, count, transpose, value); -} - -void gl4_2core_glUniform4dv(void *_glfuncs, GLint location, GLsizei count, const GLdouble* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4dv(location, count, value); -} - -void gl4_2core_glUniform3dv(void *_glfuncs, GLint location, GLsizei count, const GLdouble* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3dv(location, count, value); -} - -void gl4_2core_glUniform2dv(void *_glfuncs, GLint location, GLsizei count, const GLdouble* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2dv(location, count, value); -} - -void gl4_2core_glUniform1dv(void *_glfuncs, GLint location, GLsizei count, const GLdouble* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1dv(location, count, value); -} - -void gl4_2core_glUniform4d(void *_glfuncs, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4d(location, v0, v1, v2, v3); -} - -void gl4_2core_glUniform3d(void *_glfuncs, GLint location, GLdouble v0, GLdouble v1, GLdouble v2) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3d(location, v0, v1, v2); -} - -void gl4_2core_glUniform2d(void *_glfuncs, GLint location, GLdouble v0, GLdouble v1) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2d(location, v0, v1); -} - -void gl4_2core_glUniform1d(void *_glfuncs, GLint location, GLdouble v0) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1d(location, v0); -} - -void gl4_2core_glDrawElementsIndirect(void *_glfuncs, GLenum mode, GLenum gltype, const GLvoid* indirect) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElementsIndirect(mode, gltype, indirect); -} - -void gl4_2core_glDrawArraysIndirect(void *_glfuncs, GLenum mode, const GLvoid* indirect) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawArraysIndirect(mode, indirect); -} - -void gl4_2core_glBlendFuncSeparatei(void *_glfuncs, GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendFuncSeparatei(buf, srcRGB, dstRGB, srcAlpha, dstAlpha); -} - -void gl4_2core_glBlendFunci(void *_glfuncs, GLuint buf, GLenum src, GLenum dst) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendFunci(buf, src, dst); -} - -void gl4_2core_glBlendEquationSeparatei(void *_glfuncs, GLuint buf, GLenum modeRGB, GLenum modeAlpha) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendEquationSeparatei(buf, modeRGB, modeAlpha); -} - -void gl4_2core_glBlendEquationi(void *_glfuncs, GLuint buf, GLenum mode) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendEquationi(buf, mode); -} - -void gl4_2core_glMinSampleShading(void *_glfuncs, GLfloat value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMinSampleShading(value); -} - -void gl4_2core_glGetDoublei_v(void *_glfuncs, GLenum target, GLuint index, GLdouble* data) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetDoublei_v(target, index, data); -} - -void gl4_2core_glGetFloati_v(void *_glfuncs, GLenum target, GLuint index, GLfloat* data) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetFloati_v(target, index, data); -} - -void gl4_2core_glDepthRangeIndexed(void *_glfuncs, GLuint index, GLdouble n, GLdouble f) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthRangeIndexed(index, n, f); -} - -void gl4_2core_glDepthRangeArrayv(void *_glfuncs, GLuint first, GLsizei count, const GLdouble* v) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthRangeArrayv(first, count, v); -} - -void gl4_2core_glScissorIndexedv(void *_glfuncs, GLuint index, const GLint* v) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScissorIndexedv(index, v); -} - -void gl4_2core_glScissorIndexed(void *_glfuncs, GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScissorIndexed(index, left, bottom, width, height); -} - -void gl4_2core_glScissorArrayv(void *_glfuncs, GLuint first, GLsizei count, const GLint* v) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScissorArrayv(first, count, v); -} - -void gl4_2core_glViewportIndexedfv(void *_glfuncs, GLuint index, const GLfloat* v) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glViewportIndexedfv(index, v); -} - -void gl4_2core_glViewportIndexedf(void *_glfuncs, GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glViewportIndexedf(index, x, y, w, h); -} - -void gl4_2core_glViewportArrayv(void *_glfuncs, GLuint first, GLsizei count, const GLfloat* v) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glViewportArrayv(first, count, v); -} - -void gl4_2core_glGetVertexAttribLdv(void *_glfuncs, GLuint index, GLenum pname, GLdouble* params) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribLdv(index, pname, params); -} - -void gl4_2core_glVertexAttribLPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribLPointer(index, size, gltype, stride, pointer); -} - -void gl4_2core_glVertexAttribL4dv(void *_glfuncs, GLuint index, const GLdouble* v) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribL4dv(index, v); -} - -void gl4_2core_glVertexAttribL3dv(void *_glfuncs, GLuint index, const GLdouble* v) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribL3dv(index, v); -} - -void gl4_2core_glVertexAttribL2dv(void *_glfuncs, GLuint index, const GLdouble* v) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribL2dv(index, v); -} - -void gl4_2core_glVertexAttribL1dv(void *_glfuncs, GLuint index, const GLdouble* v) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribL1dv(index, v); -} - -void gl4_2core_glVertexAttribL4d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribL4d(index, x, y, z, w); -} - -void gl4_2core_glVertexAttribL3d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribL3d(index, x, y, z); -} - -void gl4_2core_glVertexAttribL2d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribL2d(index, x, y); -} - -void gl4_2core_glVertexAttribL1d(void *_glfuncs, GLuint index, GLdouble x) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribL1d(index, x); -} - -void gl4_2core_glGetProgramPipelineInfoLog(void *_glfuncs, GLuint pipeline, GLsizei bufSize, GLsizei* length, GLchar* infoLog) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetProgramPipelineInfoLog(pipeline, bufSize, length, infoLog); -} - -void gl4_2core_glValidateProgramPipeline(void *_glfuncs, GLuint pipeline) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glValidateProgramPipeline(pipeline); -} - -void gl4_2core_glProgramUniformMatrix4x3dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix4x3dv(program, location, count, transpose, value); -} - -void gl4_2core_glProgramUniformMatrix3x4dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix3x4dv(program, location, count, transpose, value); -} - -void gl4_2core_glProgramUniformMatrix4x2dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix4x2dv(program, location, count, transpose, value); -} - -void gl4_2core_glProgramUniformMatrix2x4dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix2x4dv(program, location, count, transpose, value); -} - -void gl4_2core_glProgramUniformMatrix3x2dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix3x2dv(program, location, count, transpose, value); -} - -void gl4_2core_glProgramUniformMatrix2x3dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix2x3dv(program, location, count, transpose, value); -} - -void gl4_2core_glProgramUniformMatrix4x3fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix4x3fv(program, location, count, transpose, value); -} - -void gl4_2core_glProgramUniformMatrix3x4fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix3x4fv(program, location, count, transpose, value); -} - -void gl4_2core_glProgramUniformMatrix4x2fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix4x2fv(program, location, count, transpose, value); -} - -void gl4_2core_glProgramUniformMatrix2x4fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix2x4fv(program, location, count, transpose, value); -} - -void gl4_2core_glProgramUniformMatrix3x2fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix3x2fv(program, location, count, transpose, value); -} - -void gl4_2core_glProgramUniformMatrix2x3fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix2x3fv(program, location, count, transpose, value); -} - -void gl4_2core_glProgramUniformMatrix4dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix4dv(program, location, count, transpose, value); -} - -void gl4_2core_glProgramUniformMatrix3dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix3dv(program, location, count, transpose, value); -} - -void gl4_2core_glProgramUniformMatrix2dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix2dv(program, location, count, transpose, value); -} - -void gl4_2core_glProgramUniformMatrix4fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix4fv(program, location, count, transpose, value); -} - -void gl4_2core_glProgramUniformMatrix3fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix3fv(program, location, count, transpose, value); -} - -void gl4_2core_glProgramUniformMatrix2fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix2fv(program, location, count, transpose, value); -} - -void gl4_2core_glProgramUniform4uiv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform4uiv(program, location, count, value); -} - -void gl4_2core_glProgramUniform4ui(void *_glfuncs, GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform4ui(program, location, v0, v1, v2, v3); -} - -void gl4_2core_glProgramUniform4dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLdouble* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform4dv(program, location, count, value); -} - -void gl4_2core_glProgramUniform4d(void *_glfuncs, GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform4d(program, location, v0, v1, v2, v3); -} - -void gl4_2core_glProgramUniform4fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform4fv(program, location, count, value); -} - -void gl4_2core_glProgramUniform4f(void *_glfuncs, GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform4f(program, location, v0, v1, v2, v3); -} - -void gl4_2core_glProgramUniform4iv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform4iv(program, location, count, value); -} - -void gl4_2core_glProgramUniform4i(void *_glfuncs, GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform4i(program, location, v0, v1, v2, v3); -} - -void gl4_2core_glProgramUniform3uiv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform3uiv(program, location, count, value); -} - -void gl4_2core_glProgramUniform3ui(void *_glfuncs, GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform3ui(program, location, v0, v1, v2); -} - -void gl4_2core_glProgramUniform3dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLdouble* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform3dv(program, location, count, value); -} - -void gl4_2core_glProgramUniform3d(void *_glfuncs, GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform3d(program, location, v0, v1, v2); -} - -void gl4_2core_glProgramUniform3fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform3fv(program, location, count, value); -} - -void gl4_2core_glProgramUniform3f(void *_glfuncs, GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform3f(program, location, v0, v1, v2); -} - -void gl4_2core_glProgramUniform3iv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform3iv(program, location, count, value); -} - -void gl4_2core_glProgramUniform3i(void *_glfuncs, GLuint program, GLint location, GLint v0, GLint v1, GLint v2) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform3i(program, location, v0, v1, v2); -} - -void gl4_2core_glProgramUniform2uiv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform2uiv(program, location, count, value); -} - -void gl4_2core_glProgramUniform2ui(void *_glfuncs, GLuint program, GLint location, GLuint v0, GLuint v1) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform2ui(program, location, v0, v1); -} - -void gl4_2core_glProgramUniform2dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLdouble* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform2dv(program, location, count, value); -} - -void gl4_2core_glProgramUniform2d(void *_glfuncs, GLuint program, GLint location, GLdouble v0, GLdouble v1) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform2d(program, location, v0, v1); -} - -void gl4_2core_glProgramUniform2fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform2fv(program, location, count, value); -} - -void gl4_2core_glProgramUniform2f(void *_glfuncs, GLuint program, GLint location, GLfloat v0, GLfloat v1) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform2f(program, location, v0, v1); -} - -void gl4_2core_glProgramUniform2iv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform2iv(program, location, count, value); -} - -void gl4_2core_glProgramUniform2i(void *_glfuncs, GLuint program, GLint location, GLint v0, GLint v1) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform2i(program, location, v0, v1); -} - -void gl4_2core_glProgramUniform1uiv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform1uiv(program, location, count, value); -} - -void gl4_2core_glProgramUniform1ui(void *_glfuncs, GLuint program, GLint location, GLuint v0) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform1ui(program, location, v0); -} - -void gl4_2core_glProgramUniform1dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLdouble* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform1dv(program, location, count, value); -} - -void gl4_2core_glProgramUniform1d(void *_glfuncs, GLuint program, GLint location, GLdouble v0) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform1d(program, location, v0); -} - -void gl4_2core_glProgramUniform1fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform1fv(program, location, count, value); -} - -void gl4_2core_glProgramUniform1f(void *_glfuncs, GLuint program, GLint location, GLfloat v0) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform1f(program, location, v0); -} - -void gl4_2core_glProgramUniform1iv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform1iv(program, location, count, value); -} - -void gl4_2core_glProgramUniform1i(void *_glfuncs, GLuint program, GLint location, GLint v0) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform1i(program, location, v0); -} - -void gl4_2core_glGetProgramPipelineiv(void *_glfuncs, GLuint pipeline, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetProgramPipelineiv(pipeline, pname, params); -} - -GLboolean gl4_2core_glIsProgramPipeline(void *_glfuncs, GLuint pipeline) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsProgramPipeline(pipeline); -} - -void gl4_2core_glGenProgramPipelines(void *_glfuncs, GLsizei n, GLuint* pipelines) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenProgramPipelines(n, pipelines); -} - -void gl4_2core_glDeleteProgramPipelines(void *_glfuncs, GLsizei n, const GLuint* pipelines) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteProgramPipelines(n, pipelines); -} - -void gl4_2core_glBindProgramPipeline(void *_glfuncs, GLuint pipeline) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindProgramPipeline(pipeline); -} - -void gl4_2core_glActiveShaderProgram(void *_glfuncs, GLuint pipeline, GLuint program) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glActiveShaderProgram(pipeline, program); -} - -void gl4_2core_glUseProgramStages(void *_glfuncs, GLuint pipeline, GLbitfield stages, GLuint program) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUseProgramStages(pipeline, stages, program); -} - -void gl4_2core_glProgramParameteri(void *_glfuncs, GLuint program, GLenum pname, GLint value) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramParameteri(program, pname, value); -} - -void gl4_2core_glProgramBinary(void *_glfuncs, GLuint program, GLenum binaryFormat, const GLvoid* binary, GLsizei length) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramBinary(program, binaryFormat, binary, length); -} - -void gl4_2core_glGetProgramBinary(void *_glfuncs, GLuint program, GLsizei bufSize, GLsizei* length, GLenum* binaryFormat, GLvoid* binary) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetProgramBinary(program, bufSize, length, binaryFormat, binary); -} - -void gl4_2core_glClearDepthf(void *_glfuncs, GLfloat dd) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearDepthf(dd); -} - -void gl4_2core_glDepthRangef(void *_glfuncs, GLfloat n, GLfloat f) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthRangef(n, f); -} - -void gl4_2core_glGetShaderPrecisionFormat(void *_glfuncs, GLenum shadertype, GLenum precisionType, GLint* range_, GLint* precision) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetShaderPrecisionFormat(shadertype, precisionType, range_, precision); -} - -void gl4_2core_glShaderBinary(void *_glfuncs, GLsizei count, const GLuint* shaders, GLenum binaryFormat, const GLvoid* binary, GLsizei length) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glShaderBinary(count, shaders, binaryFormat, binary, length); -} - -void gl4_2core_glReleaseShaderCompiler(void *_glfuncs) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glReleaseShaderCompiler(); -} - -void gl4_2core_glTexStorage3D(void *_glfuncs, GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexStorage3D(target, levels, internalFormat, width, height, depth); -} - -void gl4_2core_glTexStorage2D(void *_glfuncs, GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexStorage2D(target, levels, internalFormat, width, height); -} - -void gl4_2core_glTexStorage1D(void *_glfuncs, GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexStorage1D(target, levels, internalFormat, width); -} - -void gl4_2core_glMemoryBarrier(void *_glfuncs, GLbitfield barriers) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMemoryBarrier(barriers); -} - -void gl4_2core_glBindImageTexture(void *_glfuncs, GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindImageTexture(unit, texture, level, layered, layer, access, format); -} - -void gl4_2core_glGetActiveAtomicCounterBufferiv(void *_glfuncs, GLuint program, GLuint bufferIndex, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveAtomicCounterBufferiv(program, bufferIndex, pname, params); -} - -void gl4_2core_glGetInternalformativ(void *_glfuncs, GLenum target, GLenum internalFormat, GLenum pname, GLsizei bufSize, GLint* params) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetInternalformativ(target, internalFormat, pname, bufSize, params); -} - -void gl4_2core_glDrawTransformFeedbackStreamInstanced(void *_glfuncs, GLenum mode, GLuint id, GLuint stream, GLsizei instancecount) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawTransformFeedbackStreamInstanced(mode, id, stream, instancecount); -} - -void gl4_2core_glDrawTransformFeedbackInstanced(void *_glfuncs, GLenum mode, GLuint id, GLsizei instancecount) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawTransformFeedbackInstanced(mode, id, instancecount); -} - -void gl4_2core_glDrawElementsInstancedBaseVertexBaseInstance(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElementsInstancedBaseVertexBaseInstance(mode, count, gltype, indices, instancecount, basevertex, baseinstance); -} - -void gl4_2core_glDrawElementsInstancedBaseInstance(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLsizei instancecount, GLuint baseinstance) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElementsInstancedBaseInstance(mode, count, gltype, indices, instancecount, baseinstance); -} - -void gl4_2core_glDrawArraysInstancedBaseInstance(void *_glfuncs, GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance) -{ - QOpenGLFunctions_4_2_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawArraysInstancedBaseInstance(mode, first, count, instancecount, baseinstance); -} - diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.2core/funcs.h b/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.2core/funcs.h deleted file mode 100644 index 969f03fddd..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.2core/funcs.h +++ /dev/null @@ -1,497 +0,0 @@ - -// ** file automatically generated by glgen -- do not edit manually ** - -#ifndef __cplusplus -#include -#include -typedef unsigned int GLenum; -typedef unsigned char GLboolean; -typedef unsigned int GLbitfield; -typedef void GLvoid; -typedef char GLchar; -typedef signed char GLbyte; /* 1-byte signed */ -typedef short GLshort; /* 2-byte signed */ -typedef int GLint; /* 4-byte signed */ -typedef unsigned char GLubyte; /* 1-byte unsigned */ -typedef unsigned short GLushort; /* 2-byte unsigned */ -typedef unsigned int GLuint; /* 4-byte unsigned */ -typedef int GLsizei; /* 4-byte signed */ -typedef float GLfloat; /* single precision float */ -typedef float GLclampf; /* single precision float in [0,1] */ -typedef double GLdouble; /* double precision float */ -typedef double GLclampd; /* double precision float in [0,1] */ -typedef int64_t GLint64; -typedef uint64_t GLuint64; -typedef ptrdiff_t GLintptr; -typedef ptrdiff_t GLsizeiptr; -typedef ptrdiff_t GLintptrARB; -typedef ptrdiff_t GLsizeiptrARB; -typedef struct __GLsync *GLsync; -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -void *gl4_2core_funcs(); - -void gl4_2core_glViewport(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height); -void gl4_2core_glDepthRange(void *_glfuncs, GLdouble nearVal, GLdouble farVal); -GLboolean gl4_2core_glIsEnabled(void *_glfuncs, GLenum cap); -void gl4_2core_glGetTexLevelParameteriv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLint* params); -void gl4_2core_glGetTexLevelParameterfv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLfloat* params); -void gl4_2core_glGetTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl4_2core_glGetTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl4_2core_glGetTexImage(void *_glfuncs, GLenum target, GLint level, GLenum format, GLenum gltype, GLvoid* pixels); -void gl4_2core_glGetIntegerv(void *_glfuncs, GLenum pname, GLint* params); -void gl4_2core_glGetFloatv(void *_glfuncs, GLenum pname, GLfloat* params); -GLenum gl4_2core_glGetError(void *_glfuncs); -void gl4_2core_glGetDoublev(void *_glfuncs, GLenum pname, GLdouble* params); -void gl4_2core_glGetBooleanv(void *_glfuncs, GLenum pname, GLboolean* params); -void gl4_2core_glReadPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum gltype, GLvoid* pixels); -void gl4_2core_glReadBuffer(void *_glfuncs, GLenum mode); -void gl4_2core_glPixelStorei(void *_glfuncs, GLenum pname, GLint param); -void gl4_2core_glPixelStoref(void *_glfuncs, GLenum pname, GLfloat param); -void gl4_2core_glDepthFunc(void *_glfuncs, GLenum glfunc); -void gl4_2core_glStencilOp(void *_glfuncs, GLenum fail, GLenum zfail, GLenum zpass); -void gl4_2core_glStencilFunc(void *_glfuncs, GLenum glfunc, GLint ref, GLuint mask); -void gl4_2core_glLogicOp(void *_glfuncs, GLenum opcode); -void gl4_2core_glBlendFunc(void *_glfuncs, GLenum sfactor, GLenum dfactor); -void gl4_2core_glFlush(void *_glfuncs); -void gl4_2core_glFinish(void *_glfuncs); -void gl4_2core_glEnable(void *_glfuncs, GLenum cap); -void gl4_2core_glDisable(void *_glfuncs, GLenum cap); -void gl4_2core_glDepthMask(void *_glfuncs, GLboolean flag); -void gl4_2core_glColorMask(void *_glfuncs, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); -void gl4_2core_glStencilMask(void *_glfuncs, GLuint mask); -void gl4_2core_glClearDepth(void *_glfuncs, GLdouble depth); -void gl4_2core_glClearStencil(void *_glfuncs, GLint s); -void gl4_2core_glClearColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl4_2core_glClear(void *_glfuncs, GLbitfield mask); -void gl4_2core_glDrawBuffer(void *_glfuncs, GLenum mode); -void gl4_2core_glTexImage2D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl4_2core_glTexImage1D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl4_2core_glTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl4_2core_glTexParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint param); -void gl4_2core_glTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params); -void gl4_2core_glTexParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param); -void gl4_2core_glScissor(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height); -void gl4_2core_glPolygonMode(void *_glfuncs, GLenum face, GLenum mode); -void gl4_2core_glPointSize(void *_glfuncs, GLfloat size); -void gl4_2core_glLineWidth(void *_glfuncs, GLfloat width); -void gl4_2core_glHint(void *_glfuncs, GLenum target, GLenum mode); -void gl4_2core_glFrontFace(void *_glfuncs, GLenum mode); -void gl4_2core_glCullFace(void *_glfuncs, GLenum mode); -void gl4_2core_glIndexubv(void *_glfuncs, const GLubyte* c); -void gl4_2core_glIndexub(void *_glfuncs, GLubyte c); -GLboolean gl4_2core_glIsTexture(void *_glfuncs, GLuint texture); -void gl4_2core_glGenTextures(void *_glfuncs, GLsizei n, GLuint* textures); -void gl4_2core_glDeleteTextures(void *_glfuncs, GLsizei n, const GLuint* textures); -void gl4_2core_glBindTexture(void *_glfuncs, GLenum target, GLuint texture); -void gl4_2core_glTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl4_2core_glTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl4_2core_glCopyTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -void gl4_2core_glCopyTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -void gl4_2core_glCopyTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -void gl4_2core_glCopyTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border); -void gl4_2core_glPolygonOffset(void *_glfuncs, GLfloat factor, GLfloat units); -void gl4_2core_glDrawElements(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices); -void gl4_2core_glDrawArrays(void *_glfuncs, GLenum mode, GLint first, GLsizei count); -void gl4_2core_glCopyTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -void gl4_2core_glTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl4_2core_glTexImage3D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl4_2core_glDrawRangeElements(void *_glfuncs, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum gltype, const GLvoid* indices); -void gl4_2core_glBlendEquation(void *_glfuncs, GLenum mode); -void gl4_2core_glBlendColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl4_2core_glGetCompressedTexImage(void *_glfuncs, GLenum target, GLint level, GLvoid* img); -void gl4_2core_glCompressedTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid* data); -void gl4_2core_glCompressedTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data); -void gl4_2core_glCompressedTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data); -void gl4_2core_glCompressedTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid* data); -void gl4_2core_glCompressedTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data); -void gl4_2core_glCompressedTexImage3D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data); -void gl4_2core_glSampleCoverage(void *_glfuncs, GLfloat value, GLboolean invert); -void gl4_2core_glActiveTexture(void *_glfuncs, GLenum texture); -void gl4_2core_glPointParameteriv(void *_glfuncs, GLenum pname, const GLint* params); -void gl4_2core_glPointParameteri(void *_glfuncs, GLenum pname, GLint param); -void gl4_2core_glPointParameterfv(void *_glfuncs, GLenum pname, const GLfloat* params); -void gl4_2core_glPointParameterf(void *_glfuncs, GLenum pname, GLfloat param); -void gl4_2core_glMultiDrawArrays(void *_glfuncs, GLenum mode, const GLint* first, const GLsizei* count, GLsizei drawcount); -void gl4_2core_glBlendFuncSeparate(void *_glfuncs, GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -void gl4_2core_glGetBufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -GLboolean gl4_2core_glUnmapBuffer(void *_glfuncs, GLenum target); -void gl4_2core_glGetBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, GLvoid* data); -void gl4_2core_glBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data); -void gl4_2core_glBufferData(void *_glfuncs, GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage); -GLboolean gl4_2core_glIsBuffer(void *_glfuncs, GLuint buffer); -void gl4_2core_glGenBuffers(void *_glfuncs, GLsizei n, GLuint* buffers); -void gl4_2core_glDeleteBuffers(void *_glfuncs, GLsizei n, const GLuint* buffers); -void gl4_2core_glBindBuffer(void *_glfuncs, GLenum target, GLuint buffer); -void gl4_2core_glGetQueryObjectuiv(void *_glfuncs, GLuint id, GLenum pname, GLuint* params); -void gl4_2core_glGetQueryObjectiv(void *_glfuncs, GLuint id, GLenum pname, GLint* params); -void gl4_2core_glGetQueryiv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl4_2core_glEndQuery(void *_glfuncs, GLenum target); -void gl4_2core_glBeginQuery(void *_glfuncs, GLenum target, GLuint id); -GLboolean gl4_2core_glIsQuery(void *_glfuncs, GLuint id); -void gl4_2core_glDeleteQueries(void *_glfuncs, GLsizei n, const GLuint* ids); -void gl4_2core_glGenQueries(void *_glfuncs, GLsizei n, GLuint* ids); -void gl4_2core_glVertexAttribPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLboolean normalized, GLsizei stride, const GLvoid* offset); -void gl4_2core_glValidateProgram(void *_glfuncs, GLuint program); -void gl4_2core_glUniformMatrix4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_2core_glUniformMatrix3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_2core_glUniformMatrix2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_2core_glUniform4iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gl4_2core_glUniform3iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gl4_2core_glUniform2iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gl4_2core_glUniform1iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gl4_2core_glUniform4fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gl4_2core_glUniform3fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gl4_2core_glUniform2fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gl4_2core_glUniform1fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gl4_2core_glUniform4i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -void gl4_2core_glUniform3i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2); -void gl4_2core_glUniform2i(void *_glfuncs, GLint location, GLint v0, GLint v1); -void gl4_2core_glUniform1i(void *_glfuncs, GLint location, GLint v0); -void gl4_2core_glUniform4f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -void gl4_2core_glUniform3f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -void gl4_2core_glUniform2f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1); -void gl4_2core_glUniform1f(void *_glfuncs, GLint location, GLfloat v0); -void gl4_2core_glUseProgram(void *_glfuncs, GLuint program); -void gl4_2core_glShaderSource(void *_glfuncs, GLuint shader, GLsizei count, const GLchar** source, const GLint* length); -void gl4_2core_glLinkProgram(void *_glfuncs, GLuint program); -GLboolean gl4_2core_glIsShader(void *_glfuncs, GLuint shader); -GLboolean gl4_2core_glIsProgram(void *_glfuncs, GLuint program); -void gl4_2core_glGetVertexAttribiv(void *_glfuncs, GLuint index, GLenum pname, GLint* params); -void gl4_2core_glGetVertexAttribfv(void *_glfuncs, GLuint index, GLenum pname, GLfloat* params); -void gl4_2core_glGetVertexAttribdv(void *_glfuncs, GLuint index, GLenum pname, GLdouble* params); -void gl4_2core_glGetUniformiv(void *_glfuncs, GLuint program, GLint location, GLint* params); -void gl4_2core_glGetUniformfv(void *_glfuncs, GLuint program, GLint location, GLfloat* params); -GLint gl4_2core_glGetUniformLocation(void *_glfuncs, GLuint program, const GLchar* name); -void gl4_2core_glGetShaderSource(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* source); -void gl4_2core_glGetShaderInfoLog(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* infoLog); -void gl4_2core_glGetShaderiv(void *_glfuncs, GLuint shader, GLenum pname, GLint* params); -void gl4_2core_glGetProgramInfoLog(void *_glfuncs, GLuint program, GLsizei bufSize, GLsizei* length, GLchar* infoLog); -void gl4_2core_glGetProgramiv(void *_glfuncs, GLuint program, GLenum pname, GLint* params); -GLint gl4_2core_glGetAttribLocation(void *_glfuncs, GLuint program, const GLchar* name); -void gl4_2core_glGetAttachedShaders(void *_glfuncs, GLuint program, GLsizei maxCount, GLsizei* count, GLuint* obj); -void gl4_2core_glGetActiveUniform(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name); -void gl4_2core_glGetActiveAttrib(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name); -void gl4_2core_glEnableVertexAttribArray(void *_glfuncs, GLuint index); -void gl4_2core_glDisableVertexAttribArray(void *_glfuncs, GLuint index); -void gl4_2core_glDetachShader(void *_glfuncs, GLuint program, GLuint shader); -void gl4_2core_glDeleteShader(void *_glfuncs, GLuint shader); -void gl4_2core_glDeleteProgram(void *_glfuncs, GLuint program); -GLuint gl4_2core_glCreateShader(void *_glfuncs, GLenum gltype); -GLuint gl4_2core_glCreateProgram(void *_glfuncs); -void gl4_2core_glCompileShader(void *_glfuncs, GLuint shader); -void gl4_2core_glBindAttribLocation(void *_glfuncs, GLuint program, GLuint index, const GLchar* name); -void gl4_2core_glAttachShader(void *_glfuncs, GLuint program, GLuint shader); -void gl4_2core_glStencilMaskSeparate(void *_glfuncs, GLenum face, GLuint mask); -void gl4_2core_glStencilFuncSeparate(void *_glfuncs, GLenum face, GLenum glfunc, GLint ref, GLuint mask); -void gl4_2core_glStencilOpSeparate(void *_glfuncs, GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); -void gl4_2core_glDrawBuffers(void *_glfuncs, GLsizei n, const GLenum* bufs); -void gl4_2core_glBlendEquationSeparate(void *_glfuncs, GLenum modeRGB, GLenum modeAlpha); -void gl4_2core_glUniformMatrix4x3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_2core_glUniformMatrix3x4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_2core_glUniformMatrix4x2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_2core_glUniformMatrix2x4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_2core_glUniformMatrix3x2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_2core_glUniformMatrix2x3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -GLboolean gl4_2core_glIsVertexArray(void *_glfuncs, GLuint array); -void gl4_2core_glGenVertexArrays(void *_glfuncs, GLsizei n, GLuint* arrays); -void gl4_2core_glDeleteVertexArrays(void *_glfuncs, GLsizei n, const GLuint* arrays); -void gl4_2core_glBindVertexArray(void *_glfuncs, GLuint array); -void gl4_2core_glFlushMappedBufferRange(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr length); -void gl4_2core_glFramebufferTextureLayer(void *_glfuncs, GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); -void gl4_2core_glRenderbufferStorageMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height); -void gl4_2core_glBlitFramebuffer(void *_glfuncs, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -void gl4_2core_glGenerateMipmap(void *_glfuncs, GLenum target); -void gl4_2core_glGetFramebufferAttachmentParameteriv(void *_glfuncs, GLenum target, GLenum attachment, GLenum pname, GLint* params); -void gl4_2core_glFramebufferRenderbuffer(void *_glfuncs, GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -void gl4_2core_glFramebufferTexture3D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -void gl4_2core_glFramebufferTexture2D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -void gl4_2core_glFramebufferTexture1D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLenum gl4_2core_glCheckFramebufferStatus(void *_glfuncs, GLenum target); -void gl4_2core_glGenFramebuffers(void *_glfuncs, GLsizei n, GLuint* framebuffers); -void gl4_2core_glDeleteFramebuffers(void *_glfuncs, GLsizei n, const GLuint* framebuffers); -void gl4_2core_glBindFramebuffer(void *_glfuncs, GLenum target, GLuint framebuffer); -GLboolean gl4_2core_glIsFramebuffer(void *_glfuncs, GLuint framebuffer); -void gl4_2core_glGetRenderbufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl4_2core_glRenderbufferStorage(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height); -void gl4_2core_glGenRenderbuffers(void *_glfuncs, GLsizei n, GLuint* renderbuffers); -void gl4_2core_glDeleteRenderbuffers(void *_glfuncs, GLsizei n, const GLuint* renderbuffers); -void gl4_2core_glBindRenderbuffer(void *_glfuncs, GLenum target, GLuint renderbuffer); -GLboolean gl4_2core_glIsRenderbuffer(void *_glfuncs, GLuint renderbuffer); -void gl4_2core_glClearBufferfi(void *_glfuncs, GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); -void gl4_2core_glClearBufferfv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLfloat* value); -void gl4_2core_glClearBufferuiv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLuint* value); -void gl4_2core_glClearBufferiv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLint* value); -void gl4_2core_glGetTexParameterIuiv(void *_glfuncs, GLenum target, GLenum pname, GLuint* params); -void gl4_2core_glGetTexParameterIiv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl4_2core_glTexParameterIuiv(void *_glfuncs, GLenum target, GLenum pname, const GLuint* params); -void gl4_2core_glTexParameterIiv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl4_2core_glUniform4uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value); -void gl4_2core_glUniform3uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value); -void gl4_2core_glUniform2uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value); -void gl4_2core_glUniform1uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value); -void gl4_2core_glUniform4ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -void gl4_2core_glUniform3ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1, GLuint v2); -void gl4_2core_glUniform2ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1); -void gl4_2core_glUniform1ui(void *_glfuncs, GLint location, GLuint v0); -GLint gl4_2core_glGetFragDataLocation(void *_glfuncs, GLuint program, const GLchar* name); -void gl4_2core_glBindFragDataLocation(void *_glfuncs, GLuint program, GLuint color, const GLchar* name); -void gl4_2core_glGetUniformuiv(void *_glfuncs, GLuint program, GLint location, GLuint* params); -void gl4_2core_glGetVertexAttribIuiv(void *_glfuncs, GLuint index, GLenum pname, GLuint* params); -void gl4_2core_glGetVertexAttribIiv(void *_glfuncs, GLuint index, GLenum pname, GLint* params); -void gl4_2core_glVertexAttribIPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl4_2core_glEndConditionalRender(void *_glfuncs); -void gl4_2core_glBeginConditionalRender(void *_glfuncs, GLuint id, GLenum mode); -void gl4_2core_glClampColor(void *_glfuncs, GLenum target, GLenum clamp); -void gl4_2core_glGetTransformFeedbackVarying(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* gltype, GLchar* name); -void gl4_2core_glBindBufferBase(void *_glfuncs, GLenum target, GLuint index, GLuint buffer); -void gl4_2core_glBindBufferRange(void *_glfuncs, GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -void gl4_2core_glEndTransformFeedback(void *_glfuncs); -void gl4_2core_glBeginTransformFeedback(void *_glfuncs, GLenum primitiveMode); -GLboolean gl4_2core_glIsEnabledi(void *_glfuncs, GLenum target, GLuint index); -void gl4_2core_glDisablei(void *_glfuncs, GLenum target, GLuint index); -void gl4_2core_glEnablei(void *_glfuncs, GLenum target, GLuint index); -void gl4_2core_glGetIntegeri_v(void *_glfuncs, GLenum target, GLuint index, GLint* data); -void gl4_2core_glGetBooleani_v(void *_glfuncs, GLenum target, GLuint index, GLboolean* data); -void gl4_2core_glColorMaski(void *_glfuncs, GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); -void gl4_2core_glCopyBufferSubData(void *_glfuncs, GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); -void gl4_2core_glUniformBlockBinding(void *_glfuncs, GLuint program, GLuint v0, GLuint v1); -void gl4_2core_glGetActiveUniformBlockName(void *_glfuncs, GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformBlockName); -void gl4_2core_glGetActiveUniformBlockiv(void *_glfuncs, GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint* params); -GLuint gl4_2core_glGetUniformBlockIndex(void *_glfuncs, GLuint program, const GLchar* uniformBlockName); -void gl4_2core_glGetActiveUniformName(void *_glfuncs, GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformName); -void gl4_2core_glGetActiveUniformsiv(void *_glfuncs, GLuint program, GLsizei uniformCount, const GLuint* uniformIndices, GLenum pname, GLint* params); -void gl4_2core_glPrimitiveRestartIndex(void *_glfuncs, GLuint index); -void gl4_2core_glTexBuffer(void *_glfuncs, GLenum target, GLenum internalFormat, GLuint buffer); -void gl4_2core_glDrawElementsInstanced(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLsizei instancecount); -void gl4_2core_glDrawArraysInstanced(void *_glfuncs, GLenum mode, GLint first, GLsizei count, GLsizei instancecount); -void gl4_2core_glSampleMaski(void *_glfuncs, GLuint index, GLbitfield mask); -void gl4_2core_glGetMultisamplefv(void *_glfuncs, GLenum pname, GLuint index, GLfloat* val); -void gl4_2core_glTexImage3DMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); -void gl4_2core_glTexImage2DMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); -void gl4_2core_glGetSynciv(void *_glfuncs, GLsync sync, GLenum pname, GLsizei bufSize, GLsizei* length, GLint* values); -void gl4_2core_glGetInteger64v(void *_glfuncs, GLenum pname, GLint64* params); -void gl4_2core_glWaitSync(void *_glfuncs, GLsync sync, GLbitfield flags, GLuint64 timeout); -GLenum gl4_2core_glClientWaitSync(void *_glfuncs, GLsync sync, GLbitfield flags, GLuint64 timeout); -void gl4_2core_glDeleteSync(void *_glfuncs, GLsync sync); -GLboolean gl4_2core_glIsSync(void *_glfuncs, GLsync sync); -GLsync gl4_2core_glFenceSync(void *_glfuncs, GLenum condition, GLbitfield flags); -void gl4_2core_glProvokingVertex(void *_glfuncs, GLenum mode); -void gl4_2core_glDrawElementsInstancedBaseVertex(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLsizei instancecount, GLint basevertex); -void gl4_2core_glDrawRangeElementsBaseVertex(void *_glfuncs, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum gltype, const GLvoid* indices, GLint basevertex); -void gl4_2core_glDrawElementsBaseVertex(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLint basevertex); -void gl4_2core_glFramebufferTexture(void *_glfuncs, GLenum target, GLenum attachment, GLuint texture, GLint level); -void gl4_2core_glGetBufferParameteri64v(void *_glfuncs, GLenum target, GLenum pname, GLint64* params); -void gl4_2core_glGetInteger64i_v(void *_glfuncs, GLenum target, GLuint index, GLint64* data); -void gl4_2core_glVertexAttribP4uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value); -void gl4_2core_glVertexAttribP4ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value); -void gl4_2core_glVertexAttribP3uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value); -void gl4_2core_glVertexAttribP3ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value); -void gl4_2core_glVertexAttribP2uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value); -void gl4_2core_glVertexAttribP2ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value); -void gl4_2core_glVertexAttribP1uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value); -void gl4_2core_glVertexAttribP1ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value); -void gl4_2core_glSecondaryColorP3uiv(void *_glfuncs, GLenum gltype, const GLuint* color); -void gl4_2core_glSecondaryColorP3ui(void *_glfuncs, GLenum gltype, GLuint color); -void gl4_2core_glColorP4uiv(void *_glfuncs, GLenum gltype, const GLuint* color); -void gl4_2core_glColorP4ui(void *_glfuncs, GLenum gltype, GLuint color); -void gl4_2core_glColorP3uiv(void *_glfuncs, GLenum gltype, const GLuint* color); -void gl4_2core_glColorP3ui(void *_glfuncs, GLenum gltype, GLuint color); -void gl4_2core_glNormalP3uiv(void *_glfuncs, GLenum gltype, const GLuint* coords); -void gl4_2core_glNormalP3ui(void *_glfuncs, GLenum gltype, GLuint coords); -void gl4_2core_glMultiTexCoordP4uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords); -void gl4_2core_glMultiTexCoordP4ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords); -void gl4_2core_glMultiTexCoordP3uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords); -void gl4_2core_glMultiTexCoordP3ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords); -void gl4_2core_glMultiTexCoordP2uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords); -void gl4_2core_glMultiTexCoordP2ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords); -void gl4_2core_glMultiTexCoordP1uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords); -void gl4_2core_glMultiTexCoordP1ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords); -void gl4_2core_glTexCoordP4uiv(void *_glfuncs, GLenum gltype, const GLuint* coords); -void gl4_2core_glTexCoordP4ui(void *_glfuncs, GLenum gltype, GLuint coords); -void gl4_2core_glTexCoordP3uiv(void *_glfuncs, GLenum gltype, const GLuint* coords); -void gl4_2core_glTexCoordP3ui(void *_glfuncs, GLenum gltype, GLuint coords); -void gl4_2core_glTexCoordP2uiv(void *_glfuncs, GLenum gltype, const GLuint* coords); -void gl4_2core_glTexCoordP2ui(void *_glfuncs, GLenum gltype, GLuint coords); -void gl4_2core_glTexCoordP1uiv(void *_glfuncs, GLenum gltype, const GLuint* coords); -void gl4_2core_glTexCoordP1ui(void *_glfuncs, GLenum gltype, GLuint coords); -void gl4_2core_glVertexP4uiv(void *_glfuncs, GLenum gltype, const GLuint* value); -void gl4_2core_glVertexP4ui(void *_glfuncs, GLenum gltype, GLuint value); -void gl4_2core_glVertexP3uiv(void *_glfuncs, GLenum gltype, const GLuint* value); -void gl4_2core_glVertexP3ui(void *_glfuncs, GLenum gltype, GLuint value); -void gl4_2core_glVertexP2uiv(void *_glfuncs, GLenum gltype, const GLuint* value); -void gl4_2core_glVertexP2ui(void *_glfuncs, GLenum gltype, GLuint value); -void gl4_2core_glGetQueryObjectui64v(void *_glfuncs, GLuint id, GLenum pname, GLuint64* params); -void gl4_2core_glGetQueryObjecti64v(void *_glfuncs, GLuint id, GLenum pname, GLint64* params); -void gl4_2core_glQueryCounter(void *_glfuncs, GLuint id, GLenum target); -void gl4_2core_glGetSamplerParameterIuiv(void *_glfuncs, GLuint sampler, GLenum pname, GLuint* params); -void gl4_2core_glGetSamplerParameterfv(void *_glfuncs, GLuint sampler, GLenum pname, GLfloat* params); -void gl4_2core_glGetSamplerParameterIiv(void *_glfuncs, GLuint sampler, GLenum pname, GLint* params); -void gl4_2core_glGetSamplerParameteriv(void *_glfuncs, GLuint sampler, GLenum pname, GLint* params); -void gl4_2core_glSamplerParameterIuiv(void *_glfuncs, GLuint sampler, GLenum pname, const GLuint* param); -void gl4_2core_glSamplerParameterIiv(void *_glfuncs, GLuint sampler, GLenum pname, const GLint* param); -void gl4_2core_glSamplerParameterfv(void *_glfuncs, GLuint sampler, GLenum pname, const GLfloat* param); -void gl4_2core_glSamplerParameterf(void *_glfuncs, GLuint sampler, GLenum pname, GLfloat param); -void gl4_2core_glSamplerParameteriv(void *_glfuncs, GLuint sampler, GLenum pname, const GLint* param); -void gl4_2core_glSamplerParameteri(void *_glfuncs, GLuint sampler, GLenum pname, GLint param); -void gl4_2core_glBindSampler(void *_glfuncs, GLuint unit, GLuint sampler); -GLboolean gl4_2core_glIsSampler(void *_glfuncs, GLuint sampler); -void gl4_2core_glDeleteSamplers(void *_glfuncs, GLsizei count, const GLuint* samplers); -void gl4_2core_glGenSamplers(void *_glfuncs, GLsizei count, GLuint* samplers); -GLint gl4_2core_glGetFragDataIndex(void *_glfuncs, GLuint program, const GLchar* name); -void gl4_2core_glBindFragDataLocationIndexed(void *_glfuncs, GLuint program, GLuint colorNumber, GLuint index, const GLchar* name); -void gl4_2core_glVertexAttribDivisor(void *_glfuncs, GLuint index, GLuint divisor); -void gl4_2core_glGetQueryIndexediv(void *_glfuncs, GLenum target, GLuint index, GLenum pname, GLint* params); -void gl4_2core_glEndQueryIndexed(void *_glfuncs, GLenum target, GLuint index); -void gl4_2core_glBeginQueryIndexed(void *_glfuncs, GLenum target, GLuint index, GLuint id); -void gl4_2core_glDrawTransformFeedbackStream(void *_glfuncs, GLenum mode, GLuint id, GLuint stream); -void gl4_2core_glDrawTransformFeedback(void *_glfuncs, GLenum mode, GLuint id); -void gl4_2core_glResumeTransformFeedback(void *_glfuncs); -void gl4_2core_glPauseTransformFeedback(void *_glfuncs); -GLboolean gl4_2core_glIsTransformFeedback(void *_glfuncs, GLuint id); -void gl4_2core_glGenTransformFeedbacks(void *_glfuncs, GLsizei n, GLuint* ids); -void gl4_2core_glDeleteTransformFeedbacks(void *_glfuncs, GLsizei n, const GLuint* ids); -void gl4_2core_glBindTransformFeedback(void *_glfuncs, GLenum target, GLuint id); -void gl4_2core_glPatchParameterfv(void *_glfuncs, GLenum pname, const GLfloat* values); -void gl4_2core_glPatchParameteri(void *_glfuncs, GLenum pname, GLint value); -void gl4_2core_glGetProgramStageiv(void *_glfuncs, GLuint program, GLenum shadertype, GLenum pname, GLint* values); -void gl4_2core_glGetUniformSubroutineuiv(void *_glfuncs, GLenum shadertype, GLint location, GLuint* params); -void gl4_2core_glUniformSubroutinesuiv(void *_glfuncs, GLenum shadertype, GLsizei count, const GLuint* value); -void gl4_2core_glGetActiveSubroutineName(void *_glfuncs, GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei* length, GLchar* name); -void gl4_2core_glGetActiveSubroutineUniformName(void *_glfuncs, GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei* length, GLchar* name); -void gl4_2core_glGetActiveSubroutineUniformiv(void *_glfuncs, GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint* values); -GLuint gl4_2core_glGetSubroutineIndex(void *_glfuncs, GLuint program, GLenum shadertype, const GLchar* name); -GLint gl4_2core_glGetSubroutineUniformLocation(void *_glfuncs, GLuint program, GLenum shadertype, const GLchar* name); -void gl4_2core_glGetUniformdv(void *_glfuncs, GLuint program, GLint location, GLdouble* params); -void gl4_2core_glUniformMatrix4x3dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_2core_glUniformMatrix4x2dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_2core_glUniformMatrix3x4dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_2core_glUniformMatrix3x2dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_2core_glUniformMatrix2x4dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_2core_glUniformMatrix2x3dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_2core_glUniformMatrix4dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_2core_glUniformMatrix3dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_2core_glUniformMatrix2dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_2core_glUniform4dv(void *_glfuncs, GLint location, GLsizei count, const GLdouble* value); -void gl4_2core_glUniform3dv(void *_glfuncs, GLint location, GLsizei count, const GLdouble* value); -void gl4_2core_glUniform2dv(void *_glfuncs, GLint location, GLsizei count, const GLdouble* value); -void gl4_2core_glUniform1dv(void *_glfuncs, GLint location, GLsizei count, const GLdouble* value); -void gl4_2core_glUniform4d(void *_glfuncs, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3); -void gl4_2core_glUniform3d(void *_glfuncs, GLint location, GLdouble v0, GLdouble v1, GLdouble v2); -void gl4_2core_glUniform2d(void *_glfuncs, GLint location, GLdouble v0, GLdouble v1); -void gl4_2core_glUniform1d(void *_glfuncs, GLint location, GLdouble v0); -void gl4_2core_glDrawElementsIndirect(void *_glfuncs, GLenum mode, GLenum gltype, const GLvoid* indirect); -void gl4_2core_glDrawArraysIndirect(void *_glfuncs, GLenum mode, const GLvoid* indirect); -void gl4_2core_glBlendFuncSeparatei(void *_glfuncs, GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -void gl4_2core_glBlendFunci(void *_glfuncs, GLuint buf, GLenum src, GLenum dst); -void gl4_2core_glBlendEquationSeparatei(void *_glfuncs, GLuint buf, GLenum modeRGB, GLenum modeAlpha); -void gl4_2core_glBlendEquationi(void *_glfuncs, GLuint buf, GLenum mode); -void gl4_2core_glMinSampleShading(void *_glfuncs, GLfloat value); -void gl4_2core_glGetDoublei_v(void *_glfuncs, GLenum target, GLuint index, GLdouble* data); -void gl4_2core_glGetFloati_v(void *_glfuncs, GLenum target, GLuint index, GLfloat* data); -void gl4_2core_glDepthRangeIndexed(void *_glfuncs, GLuint index, GLdouble n, GLdouble f); -void gl4_2core_glDepthRangeArrayv(void *_glfuncs, GLuint first, GLsizei count, const GLdouble* v); -void gl4_2core_glScissorIndexedv(void *_glfuncs, GLuint index, const GLint* v); -void gl4_2core_glScissorIndexed(void *_glfuncs, GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); -void gl4_2core_glScissorArrayv(void *_glfuncs, GLuint first, GLsizei count, const GLint* v); -void gl4_2core_glViewportIndexedfv(void *_glfuncs, GLuint index, const GLfloat* v); -void gl4_2core_glViewportIndexedf(void *_glfuncs, GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); -void gl4_2core_glViewportArrayv(void *_glfuncs, GLuint first, GLsizei count, const GLfloat* v); -void gl4_2core_glGetVertexAttribLdv(void *_glfuncs, GLuint index, GLenum pname, GLdouble* params); -void gl4_2core_glVertexAttribLPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl4_2core_glVertexAttribL4dv(void *_glfuncs, GLuint index, const GLdouble* v); -void gl4_2core_glVertexAttribL3dv(void *_glfuncs, GLuint index, const GLdouble* v); -void gl4_2core_glVertexAttribL2dv(void *_glfuncs, GLuint index, const GLdouble* v); -void gl4_2core_glVertexAttribL1dv(void *_glfuncs, GLuint index, const GLdouble* v); -void gl4_2core_glVertexAttribL4d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -void gl4_2core_glVertexAttribL3d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y, GLdouble z); -void gl4_2core_glVertexAttribL2d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y); -void gl4_2core_glVertexAttribL1d(void *_glfuncs, GLuint index, GLdouble x); -void gl4_2core_glGetProgramPipelineInfoLog(void *_glfuncs, GLuint pipeline, GLsizei bufSize, GLsizei* length, GLchar* infoLog); -void gl4_2core_glValidateProgramPipeline(void *_glfuncs, GLuint pipeline); -void gl4_2core_glProgramUniformMatrix4x3dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_2core_glProgramUniformMatrix3x4dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_2core_glProgramUniformMatrix4x2dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_2core_glProgramUniformMatrix2x4dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_2core_glProgramUniformMatrix3x2dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_2core_glProgramUniformMatrix2x3dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_2core_glProgramUniformMatrix4x3fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_2core_glProgramUniformMatrix3x4fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_2core_glProgramUniformMatrix4x2fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_2core_glProgramUniformMatrix2x4fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_2core_glProgramUniformMatrix3x2fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_2core_glProgramUniformMatrix2x3fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_2core_glProgramUniformMatrix4dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_2core_glProgramUniformMatrix3dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_2core_glProgramUniformMatrix2dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_2core_glProgramUniformMatrix4fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_2core_glProgramUniformMatrix3fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_2core_glProgramUniformMatrix2fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_2core_glProgramUniform4uiv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLuint* value); -void gl4_2core_glProgramUniform4ui(void *_glfuncs, GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -void gl4_2core_glProgramUniform4dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLdouble* value); -void gl4_2core_glProgramUniform4d(void *_glfuncs, GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3); -void gl4_2core_glProgramUniform4fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLfloat* value); -void gl4_2core_glProgramUniform4f(void *_glfuncs, GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -void gl4_2core_glProgramUniform4iv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLint* value); -void gl4_2core_glProgramUniform4i(void *_glfuncs, GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -void gl4_2core_glProgramUniform3uiv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLuint* value); -void gl4_2core_glProgramUniform3ui(void *_glfuncs, GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); -void gl4_2core_glProgramUniform3dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLdouble* value); -void gl4_2core_glProgramUniform3d(void *_glfuncs, GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2); -void gl4_2core_glProgramUniform3fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLfloat* value); -void gl4_2core_glProgramUniform3f(void *_glfuncs, GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -void gl4_2core_glProgramUniform3iv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLint* value); -void gl4_2core_glProgramUniform3i(void *_glfuncs, GLuint program, GLint location, GLint v0, GLint v1, GLint v2); -void gl4_2core_glProgramUniform2uiv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLuint* value); -void gl4_2core_glProgramUniform2ui(void *_glfuncs, GLuint program, GLint location, GLuint v0, GLuint v1); -void gl4_2core_glProgramUniform2dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLdouble* value); -void gl4_2core_glProgramUniform2d(void *_glfuncs, GLuint program, GLint location, GLdouble v0, GLdouble v1); -void gl4_2core_glProgramUniform2fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLfloat* value); -void gl4_2core_glProgramUniform2f(void *_glfuncs, GLuint program, GLint location, GLfloat v0, GLfloat v1); -void gl4_2core_glProgramUniform2iv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLint* value); -void gl4_2core_glProgramUniform2i(void *_glfuncs, GLuint program, GLint location, GLint v0, GLint v1); -void gl4_2core_glProgramUniform1uiv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLuint* value); -void gl4_2core_glProgramUniform1ui(void *_glfuncs, GLuint program, GLint location, GLuint v0); -void gl4_2core_glProgramUniform1dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLdouble* value); -void gl4_2core_glProgramUniform1d(void *_glfuncs, GLuint program, GLint location, GLdouble v0); -void gl4_2core_glProgramUniform1fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLfloat* value); -void gl4_2core_glProgramUniform1f(void *_glfuncs, GLuint program, GLint location, GLfloat v0); -void gl4_2core_glProgramUniform1iv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLint* value); -void gl4_2core_glProgramUniform1i(void *_glfuncs, GLuint program, GLint location, GLint v0); -void gl4_2core_glGetProgramPipelineiv(void *_glfuncs, GLuint pipeline, GLenum pname, GLint* params); -GLboolean gl4_2core_glIsProgramPipeline(void *_glfuncs, GLuint pipeline); -void gl4_2core_glGenProgramPipelines(void *_glfuncs, GLsizei n, GLuint* pipelines); -void gl4_2core_glDeleteProgramPipelines(void *_glfuncs, GLsizei n, const GLuint* pipelines); -void gl4_2core_glBindProgramPipeline(void *_glfuncs, GLuint pipeline); -void gl4_2core_glActiveShaderProgram(void *_glfuncs, GLuint pipeline, GLuint program); -void gl4_2core_glUseProgramStages(void *_glfuncs, GLuint pipeline, GLbitfield stages, GLuint program); -void gl4_2core_glProgramParameteri(void *_glfuncs, GLuint program, GLenum pname, GLint value); -void gl4_2core_glProgramBinary(void *_glfuncs, GLuint program, GLenum binaryFormat, const GLvoid* binary, GLsizei length); -void gl4_2core_glGetProgramBinary(void *_glfuncs, GLuint program, GLsizei bufSize, GLsizei* length, GLenum* binaryFormat, GLvoid* binary); -void gl4_2core_glClearDepthf(void *_glfuncs, GLfloat dd); -void gl4_2core_glDepthRangef(void *_glfuncs, GLfloat n, GLfloat f); -void gl4_2core_glGetShaderPrecisionFormat(void *_glfuncs, GLenum shadertype, GLenum precisionType, GLint* range_, GLint* precision); -void gl4_2core_glShaderBinary(void *_glfuncs, GLsizei count, const GLuint* shaders, GLenum binaryFormat, const GLvoid* binary, GLsizei length); -void gl4_2core_glReleaseShaderCompiler(void *_glfuncs); -void gl4_2core_glTexStorage3D(void *_glfuncs, GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth); -void gl4_2core_glTexStorage2D(void *_glfuncs, GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height); -void gl4_2core_glTexStorage1D(void *_glfuncs, GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width); -void gl4_2core_glMemoryBarrier(void *_glfuncs, GLbitfield barriers); -void gl4_2core_glBindImageTexture(void *_glfuncs, GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format); -void gl4_2core_glGetActiveAtomicCounterBufferiv(void *_glfuncs, GLuint program, GLuint bufferIndex, GLenum pname, GLint* params); -void gl4_2core_glGetInternalformativ(void *_glfuncs, GLenum target, GLenum internalFormat, GLenum pname, GLsizei bufSize, GLint* params); -void gl4_2core_glDrawTransformFeedbackStreamInstanced(void *_glfuncs, GLenum mode, GLuint id, GLuint stream, GLsizei instancecount); -void gl4_2core_glDrawTransformFeedbackInstanced(void *_glfuncs, GLenum mode, GLuint id, GLsizei instancecount); -void gl4_2core_glDrawElementsInstancedBaseVertexBaseInstance(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance); -void gl4_2core_glDrawElementsInstancedBaseInstance(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLsizei instancecount, GLuint baseinstance); -void gl4_2core_glDrawArraysInstancedBaseInstance(void *_glfuncs, GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance); - - -#ifdef __cplusplus -} // extern "C" -#endif diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.2core/gl.go b/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.2core/gl.go deleted file mode 100644 index a452b72965..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.2core/gl.go +++ /dev/null @@ -1,6594 +0,0 @@ -// ** file automatically generated by glgen -- do not edit manually ** - -package GL - -// #cgo CXXFLAGS: -std=c++0x -pedantic-errors -Wall -fno-strict-aliasing -// #cgo LDFLAGS: -lstdc++ -// #cgo pkg-config: Qt5Core Qt5OpenGL -// -// #include "funcs.h" -// -// void free(void*); -// -import "C" - -import ( - "fmt" - "reflect" - "unsafe" - - "gopkg.in/qml.v1/gl/glbase" -) - -// API returns a value that offers methods matching the OpenGL version 4.2 API. -// -// The returned API must not be used after the provided OpenGL context becomes invalid. -func API(context glbase.Contexter) *GL { - gl := &GL{} - gl.funcs = C.gl4_2core_funcs() - if gl.funcs == nil { - panic(fmt.Errorf("OpenGL version 4.2 is not available")) - } - return gl -} - -// GL implements the OpenGL version 4.2 API. Values of this -// type must be created via the API function, and it must not be used after -// the associated OpenGL context becomes invalid. -type GL struct { - funcs unsafe.Pointer -} - -const ( - FALSE = 0 - TRUE = 1 - NONE = 0 - - BYTE = 0x1400 - UNSIGNED_BYTE = 0x1401 - SHORT = 0x1402 - UNSIGNED_SHORT = 0x1403 - INT = 0x1404 - UNSIGNED_INT = 0x1405 - FLOAT = 0x1406 - N2_BYTES = 0x1407 - N3_BYTES = 0x1408 - N4_BYTES = 0x1409 - DOUBLE = 0x140A - HALF_FLOAT = 0x140B - FIXED = 0x140C - - ACCUM = 0x0100 - LOAD = 0x0101 - RETURN = 0x0102 - MULT = 0x0103 - ADD = 0x0104 - - ACCUM_BUFFER_BIT = 0x00000200 - ALL_ATTRIB_BITS = 0xFFFFFFFF - COLOR_BUFFER_BIT = 0x00004000 - CURRENT_BIT = 0x00000001 - DEPTH_BUFFER_BIT = 0x00000100 - ENABLE_BIT = 0x00002000 - EVAL_BIT = 0x00010000 - FOG_BIT = 0x00000080 - HINT_BIT = 0x00008000 - LIGHTING_BIT = 0x00000040 - LINE_BIT = 0x00000004 - LIST_BIT = 0x00020000 - MULTISAMPLE_BIT = 0x20000000 - PIXEL_MODE_BIT = 0x00000020 - POINT_BIT = 0x00000002 - POLYGON_BIT = 0x00000008 - POLYGON_STIPPLE_BIT = 0x00000010 - SCISSOR_BIT = 0x00080000 - STENCIL_BUFFER_BIT = 0x00000400 - TEXTURE_BIT = 0x00040000 - TRANSFORM_BIT = 0x00001000 - VIEWPORT_BIT = 0x00000800 - - ALWAYS = 0x0207 - EQUAL = 0x0202 - GEQUAL = 0x0206 - GREATER = 0x0204 - LEQUAL = 0x0203 - LESS = 0x0201 - NEVER = 0x0200 - NOTEQUAL = 0x0205 - - LOGIC_OP = 0x0BF1 - - DST_ALPHA = 0x0304 - ONE = 1 - ONE_MINUS_DST_ALPHA = 0x0305 - ONE_MINUS_SRC_ALPHA = 0x0303 - ONE_MINUS_SRC_COLOR = 0x0301 - SRC_ALPHA = 0x0302 - SRC_COLOR = 0x0300 - ZERO = 0 - - DST_COLOR = 0x0306 - ONE_MINUS_DST_COLOR = 0x0307 - SRC_ALPHA_SATURATE = 0x0308 - - CLIENT_ALL_ATTRIB_BITS = 0xFFFFFFFF - CLIENT_PIXEL_STORE_BIT = 0x00000001 - CLIENT_VERTEX_ARRAY_BIT = 0x00000002 - - CLIP_DISTANCE0 = 0x3000 - CLIP_DISTANCE1 = 0x3001 - CLIP_DISTANCE2 = 0x3002 - CLIP_DISTANCE3 = 0x3003 - CLIP_DISTANCE4 = 0x3004 - CLIP_DISTANCE5 = 0x3005 - CLIP_DISTANCE6 = 0x3006 - CLIP_DISTANCE7 = 0x3007 - CLIP_PLANE0 = 0x3000 - CLIP_PLANE1 = 0x3001 - CLIP_PLANE2 = 0x3002 - CLIP_PLANE3 = 0x3003 - CLIP_PLANE4 = 0x3004 - CLIP_PLANE5 = 0x3005 - - BACK = 0x0405 - FRONT = 0x0404 - FRONT_AND_BACK = 0x0408 - - AMBIENT = 0x1200 - AMBIENT_AND_DIFFUSE = 0x1602 - DIFFUSE = 0x1201 - EMISSION = 0x1600 - SPECULAR = 0x1202 - - CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT = 0x00000001 - - CONTEXT_COMPATIBILITY_PROFILE_BIT = 0x00000002 - CONTEXT_CORE_PROFILE_BIT = 0x00000001 - - AUX0 = 0x0409 - AUX1 = 0x040A - AUX2 = 0x040B - AUX3 = 0x040C - BACK_LEFT = 0x0402 - BACK_RIGHT = 0x0403 - FRONT_LEFT = 0x0400 - FRONT_RIGHT = 0x0401 - LEFT = 0x0406 - RIGHT = 0x0407 - - ALPHA_TEST = 0x0BC0 - AUTO_NORMAL = 0x0D80 - BLEND = 0x0BE2 - COLOR_ARRAY = 0x8076 - COLOR_LOGIC_OP = 0x0BF2 - COLOR_MATERIAL = 0x0B57 - CULL_FACE = 0x0B44 - DEPTH_TEST = 0x0B71 - DITHER = 0x0BD0 - EDGE_FLAG_ARRAY = 0x8079 - FOG = 0x0B60 - INDEX_ARRAY = 0x8077 - INDEX_LOGIC_OP = 0x0BF1 - LIGHT0 = 0x4000 - LIGHT1 = 0x4001 - LIGHT2 = 0x4002 - LIGHT3 = 0x4003 - LIGHT4 = 0x4004 - LIGHT5 = 0x4005 - LIGHT6 = 0x4006 - LIGHT7 = 0x4007 - LIGHTING = 0x0B50 - LINE_SMOOTH = 0x0B20 - LINE_STIPPLE = 0x0B24 - MAP1_COLOR_4 = 0x0D90 - MAP1_INDEX = 0x0D91 - MAP1_NORMAL = 0x0D92 - MAP1_TEXTURE_COORD_1 = 0x0D93 - MAP1_TEXTURE_COORD_2 = 0x0D94 - MAP1_TEXTURE_COORD_3 = 0x0D95 - MAP1_TEXTURE_COORD_4 = 0x0D96 - MAP1_VERTEX_3 = 0x0D97 - MAP1_VERTEX_4 = 0x0D98 - MAP2_COLOR_4 = 0x0DB0 - MAP2_INDEX = 0x0DB1 - MAP2_NORMAL = 0x0DB2 - MAP2_TEXTURE_COORD_1 = 0x0DB3 - MAP2_TEXTURE_COORD_2 = 0x0DB4 - MAP2_TEXTURE_COORD_3 = 0x0DB5 - MAP2_TEXTURE_COORD_4 = 0x0DB6 - MAP2_VERTEX_3 = 0x0DB7 - MAP2_VERTEX_4 = 0x0DB8 - NORMALIZE = 0x0BA1 - NORMAL_ARRAY = 0x8075 - POINT_SMOOTH = 0x0B10 - POLYGON_OFFSET_FILL = 0x8037 - POLYGON_OFFSET_LINE = 0x2A02 - POLYGON_OFFSET_POINT = 0x2A01 - POLYGON_SMOOTH = 0x0B41 - POLYGON_STIPPLE = 0x0B42 - SCISSOR_TEST = 0x0C11 - STENCIL_TEST = 0x0B90 - TEXTURE_1D = 0x0DE0 - TEXTURE_2D = 0x0DE1 - TEXTURE_COORD_ARRAY = 0x8078 - TEXTURE_GEN_Q = 0x0C63 - TEXTURE_GEN_R = 0x0C62 - TEXTURE_GEN_S = 0x0C60 - TEXTURE_GEN_T = 0x0C61 - VERTEX_ARRAY = 0x8074 - - INVALID_ENUM = 0x0500 - INVALID_FRAMEBUFFER_OPERATION = 0x0506 - INVALID_OPERATION = 0x0502 - INVALID_VALUE = 0x0501 - NO_ERROR = 0 - OUT_OF_MEMORY = 0x0505 - STACK_OVERFLOW = 0x0503 - STACK_UNDERFLOW = 0x0504 - - N2D = 0x0600 - N3D = 0x0601 - N3D_COLOR = 0x0602 - N3D_COLOR_TEXTURE = 0x0603 - N4D_COLOR_TEXTURE = 0x0604 - - BITMAP_TOKEN = 0x0704 - COPY_PIXEL_TOKEN = 0x0706 - DRAW_PIXEL_TOKEN = 0x0705 - LINE_RESET_TOKEN = 0x0707 - LINE_TOKEN = 0x0702 - PASS_THROUGH_TOKEN = 0x0700 - POINT_TOKEN = 0x0701 - POLYGON_TOKEN = 0x0703 - - EXP = 0x0800 - EXP2 = 0x0801 - LINEAR = 0x2601 - - FOG_COLOR = 0x0B66 - FOG_DENSITY = 0x0B62 - FOG_END = 0x0B64 - FOG_INDEX = 0x0B61 - FOG_MODE = 0x0B65 - FOG_START = 0x0B63 - - CCW = 0x0901 - CW = 0x0900 - - COEFF = 0x0A00 - DOMAIN = 0x0A02 - ORDER = 0x0A01 - - PIXEL_MAP_A_TO_A = 0x0C79 - PIXEL_MAP_B_TO_B = 0x0C78 - PIXEL_MAP_G_TO_G = 0x0C77 - PIXEL_MAP_I_TO_A = 0x0C75 - PIXEL_MAP_I_TO_B = 0x0C74 - PIXEL_MAP_I_TO_G = 0x0C73 - PIXEL_MAP_I_TO_I = 0x0C70 - PIXEL_MAP_I_TO_R = 0x0C72 - PIXEL_MAP_R_TO_R = 0x0C76 - PIXEL_MAP_S_TO_S = 0x0C71 - - ACCUM_ALPHA_BITS = 0x0D5B - ACCUM_BLUE_BITS = 0x0D5A - ACCUM_CLEAR_VALUE = 0x0B80 - ACCUM_GREEN_BITS = 0x0D59 - ACCUM_RED_BITS = 0x0D58 - ALIASED_LINE_WIDTH_RANGE = 0x846E - ALIASED_POINT_SIZE_RANGE = 0x846D - ALPHA_BIAS = 0x0D1D - ALPHA_BITS = 0x0D55 - ALPHA_SCALE = 0x0D1C - ALPHA_TEST_FUNC = 0x0BC1 - ALPHA_TEST_REF = 0x0BC2 - ATTRIB_STACK_DEPTH = 0x0BB0 - AUX_BUFFERS = 0x0C00 - BLEND_DST = 0x0BE0 - BLEND_SRC = 0x0BE1 - BLUE_BIAS = 0x0D1B - BLUE_BITS = 0x0D54 - BLUE_SCALE = 0x0D1A - CLIENT_ATTRIB_STACK_DEPTH = 0x0BB1 - COLOR_ARRAY_SIZE = 0x8081 - COLOR_ARRAY_STRIDE = 0x8083 - COLOR_ARRAY_TYPE = 0x8082 - COLOR_CLEAR_VALUE = 0x0C22 - COLOR_MATERIAL_FACE = 0x0B55 - COLOR_MATERIAL_PARAMETER = 0x0B56 - COLOR_WRITEMASK = 0x0C23 - CULL_FACE_MODE = 0x0B45 - CURRENT_COLOR = 0x0B00 - CURRENT_INDEX = 0x0B01 - CURRENT_NORMAL = 0x0B02 - CURRENT_RASTER_COLOR = 0x0B04 - CURRENT_RASTER_DISTANCE = 0x0B09 - CURRENT_RASTER_INDEX = 0x0B05 - CURRENT_RASTER_POSITION = 0x0B07 - CURRENT_RASTER_POSITION_VALID = 0x0B08 - CURRENT_RASTER_TEXTURE_COORDS = 0x0B06 - CURRENT_TEXTURE_COORDS = 0x0B03 - DEPTH_BIAS = 0x0D1F - DEPTH_BITS = 0x0D56 - DEPTH_CLEAR_VALUE = 0x0B73 - DEPTH_FUNC = 0x0B74 - DEPTH_RANGE = 0x0B70 - DEPTH_SCALE = 0x0D1E - DEPTH_WRITEMASK = 0x0B72 - DOUBLEBUFFER = 0x0C32 - DRAW_BUFFER = 0x0C01 - EDGE_FLAG = 0x0B43 - EDGE_FLAG_ARRAY_STRIDE = 0x808C - FEEDBACK_BUFFER_SIZE = 0x0DF1 - FEEDBACK_BUFFER_TYPE = 0x0DF2 - FOG_HINT = 0x0C54 - FRONT_FACE = 0x0B46 - GREEN_BIAS = 0x0D19 - GREEN_BITS = 0x0D53 - GREEN_SCALE = 0x0D18 - INDEX_ARRAY_STRIDE = 0x8086 - INDEX_ARRAY_TYPE = 0x8085 - INDEX_BITS = 0x0D51 - INDEX_CLEAR_VALUE = 0x0C20 - INDEX_MODE = 0x0C30 - INDEX_OFFSET = 0x0D13 - INDEX_SHIFT = 0x0D12 - INDEX_WRITEMASK = 0x0C21 - LIGHT_MODEL_AMBIENT = 0x0B53 - LIGHT_MODEL_COLOR_CONTROL = 0x81F8 - LIGHT_MODEL_LOCAL_VIEWER = 0x0B51 - LIGHT_MODEL_TWO_SIDE = 0x0B52 - LINE_SMOOTH_HINT = 0x0C52 - LINE_STIPPLE_PATTERN = 0x0B25 - LINE_STIPPLE_REPEAT = 0x0B26 - LINE_WIDTH = 0x0B21 - LINE_WIDTH_GRANULARITY = 0x0B23 - LINE_WIDTH_RANGE = 0x0B22 - LIST_BASE = 0x0B32 - LIST_INDEX = 0x0B33 - LIST_MODE = 0x0B30 - LOGIC_OP_MODE = 0x0BF0 - MAP1_GRID_DOMAIN = 0x0DD0 - MAP1_GRID_SEGMENTS = 0x0DD1 - MAP2_GRID_DOMAIN = 0x0DD2 - MAP2_GRID_SEGMENTS = 0x0DD3 - MAP_COLOR = 0x0D10 - MAP_STENCIL = 0x0D11 - MATRIX_MODE = 0x0BA0 - MAX_ATTRIB_STACK_DEPTH = 0x0D35 - MAX_CLIENT_ATTRIB_STACK_DEPTH = 0x0D3B - MAX_CLIP_DISTANCES = 0x0D32 - MAX_CLIP_PLANES = 0x0D32 - MAX_EVAL_ORDER = 0x0D30 - MAX_LIGHTS = 0x0D31 - MAX_LIST_NESTING = 0x0B31 - MAX_MODELVIEW_STACK_DEPTH = 0x0D36 - MAX_NAME_STACK_DEPTH = 0x0D37 - MAX_PIXEL_MAP_TABLE = 0x0D34 - MAX_PROJECTION_STACK_DEPTH = 0x0D38 - MAX_TEXTURE_SIZE = 0x0D33 - MAX_TEXTURE_STACK_DEPTH = 0x0D39 - MAX_VIEWPORT_DIMS = 0x0D3A - MODELVIEW_MATRIX = 0x0BA6 - MODELVIEW_STACK_DEPTH = 0x0BA3 - NAME_STACK_DEPTH = 0x0D70 - NORMAL_ARRAY_STRIDE = 0x807F - NORMAL_ARRAY_TYPE = 0x807E - PACK_ALIGNMENT = 0x0D05 - PACK_LSB_FIRST = 0x0D01 - PACK_ROW_LENGTH = 0x0D02 - PACK_SKIP_PIXELS = 0x0D04 - PACK_SKIP_ROWS = 0x0D03 - PACK_SWAP_BYTES = 0x0D00 - PERSPECTIVE_CORRECTION_HINT = 0x0C50 - PIXEL_MAP_A_TO_A_SIZE = 0x0CB9 - PIXEL_MAP_B_TO_B_SIZE = 0x0CB8 - PIXEL_MAP_G_TO_G_SIZE = 0x0CB7 - PIXEL_MAP_I_TO_A_SIZE = 0x0CB5 - PIXEL_MAP_I_TO_B_SIZE = 0x0CB4 - PIXEL_MAP_I_TO_G_SIZE = 0x0CB3 - PIXEL_MAP_I_TO_I_SIZE = 0x0CB0 - PIXEL_MAP_I_TO_R_SIZE = 0x0CB2 - PIXEL_MAP_R_TO_R_SIZE = 0x0CB6 - PIXEL_MAP_S_TO_S_SIZE = 0x0CB1 - POINT_SIZE = 0x0B11 - POINT_SIZE_GRANULARITY = 0x0B13 - POINT_SIZE_RANGE = 0x0B12 - POINT_SMOOTH_HINT = 0x0C51 - POLYGON_MODE = 0x0B40 - POLYGON_OFFSET_FACTOR = 0x8038 - POLYGON_OFFSET_UNITS = 0x2A00 - POLYGON_SMOOTH_HINT = 0x0C53 - PROJECTION_MATRIX = 0x0BA7 - PROJECTION_STACK_DEPTH = 0x0BA4 - READ_BUFFER = 0x0C02 - RED_BIAS = 0x0D15 - RED_BITS = 0x0D52 - RED_SCALE = 0x0D14 - RENDER_MODE = 0x0C40 - RGBA_MODE = 0x0C31 - SCISSOR_BOX = 0x0C10 - SELECTION_BUFFER_SIZE = 0x0DF4 - SHADE_MODEL = 0x0B54 - SMOOTH_LINE_WIDTH_GRANULARITY = 0x0B23 - SMOOTH_LINE_WIDTH_RANGE = 0x0B22 - SMOOTH_POINT_SIZE_GRANULARITY = 0x0B13 - SMOOTH_POINT_SIZE_RANGE = 0x0B12 - STENCIL_BITS = 0x0D57 - STENCIL_CLEAR_VALUE = 0x0B91 - STENCIL_FAIL = 0x0B94 - STENCIL_FUNC = 0x0B92 - STENCIL_PASS_DEPTH_FAIL = 0x0B95 - STENCIL_PASS_DEPTH_PASS = 0x0B96 - STENCIL_REF = 0x0B97 - STENCIL_VALUE_MASK = 0x0B93 - STENCIL_WRITEMASK = 0x0B98 - STEREO = 0x0C33 - SUBPIXEL_BITS = 0x0D50 - TEXTURE_BINDING_1D = 0x8068 - TEXTURE_BINDING_2D = 0x8069 - TEXTURE_BINDING_3D = 0x806A - TEXTURE_COORD_ARRAY_SIZE = 0x8088 - TEXTURE_COORD_ARRAY_STRIDE = 0x808A - TEXTURE_COORD_ARRAY_TYPE = 0x8089 - TEXTURE_MATRIX = 0x0BA8 - TEXTURE_STACK_DEPTH = 0x0BA5 - UNPACK_ALIGNMENT = 0x0CF5 - UNPACK_LSB_FIRST = 0x0CF1 - UNPACK_ROW_LENGTH = 0x0CF2 - UNPACK_SKIP_PIXELS = 0x0CF4 - UNPACK_SKIP_ROWS = 0x0CF3 - UNPACK_SWAP_BYTES = 0x0CF0 - VERTEX_ARRAY_SIZE = 0x807A - VERTEX_ARRAY_STRIDE = 0x807C - VERTEX_ARRAY_TYPE = 0x807B - VIEWPORT = 0x0BA2 - ZOOM_X = 0x0D16 - ZOOM_Y = 0x0D17 - - COLOR_ARRAY_POINTER = 0x8090 - EDGE_FLAG_ARRAY_POINTER = 0x8093 - FEEDBACK_BUFFER_POINTER = 0x0DF0 - INDEX_ARRAY_POINTER = 0x8091 - NORMAL_ARRAY_POINTER = 0x808F - SELECTION_BUFFER_POINTER = 0x0DF3 - TEXTURE_COORD_ARRAY_POINTER = 0x8092 - VERTEX_ARRAY_POINTER = 0x808E - - TEXTURE_ALPHA_SIZE = 0x805F - TEXTURE_BLUE_SIZE = 0x805E - TEXTURE_BORDER = 0x1005 - TEXTURE_BORDER_COLOR = 0x1004 - TEXTURE_COMPONENTS = 0x1003 - TEXTURE_GREEN_SIZE = 0x805D - TEXTURE_HEIGHT = 0x1001 - TEXTURE_INTENSITY_SIZE = 0x8061 - TEXTURE_INTERNAL_FORMAT = 0x1003 - TEXTURE_LUMINANCE_SIZE = 0x8060 - TEXTURE_MAG_FILTER = 0x2800 - TEXTURE_MIN_FILTER = 0x2801 - TEXTURE_PRIORITY = 0x8066 - TEXTURE_RED_SIZE = 0x805C - TEXTURE_RESIDENT = 0x8067 - TEXTURE_WIDTH = 0x1000 - TEXTURE_WRAP_S = 0x2802 - TEXTURE_WRAP_T = 0x2803 - - DONT_CARE = 0x1100 - FASTEST = 0x1101 - NICEST = 0x1102 - - FRAGMENT_SHADER_DERIVATIVE_HINT = 0x8B8B - GENERATE_MIPMAP_HINT = 0x8192 - PROGRAM_BINARY_RETRIEVABLE_HINT = 0x8257 - TEXTURE_COMPRESSION_HINT = 0x84EF - - C3F_V3F = 0x2A24 - C4F_N3F_V3F = 0x2A26 - C4UB_V2F = 0x2A22 - C4UB_V3F = 0x2A23 - N3F_V3F = 0x2A25 - T2F_C3F_V3F = 0x2A2A - T2F_C4F_N3F_V3F = 0x2A2C - T2F_C4UB_V3F = 0x2A29 - T2F_N3F_V3F = 0x2A2B - T2F_V3F = 0x2A27 - T4F_C4F_N3F_V4F = 0x2A2D - T4F_V4F = 0x2A28 - V2F = 0x2A20 - V3F = 0x2A21 - - MODULATE = 0x2100 - REPLACE = 0x1E01 - - SEPARATE_SPECULAR_COLOR = 0x81FA - SINGLE_COLOR = 0x81F9 - - CONSTANT_ATTENUATION = 0x1207 - LINEAR_ATTENUATION = 0x1208 - POSITION = 0x1203 - QUADRATIC_ATTENUATION = 0x1209 - SPOT_CUTOFF = 0x1206 - SPOT_DIRECTION = 0x1204 - SPOT_EXPONENT = 0x1205 - - COMPILE = 0x1300 - COMPILE_AND_EXECUTE = 0x1301 - - AND = 0x1501 - AND_INVERTED = 0x1504 - AND_REVERSE = 0x1502 - CLEAR = 0x1500 - COPY = 0x1503 - COPY_INVERTED = 0x150C - EQUIV = 0x1509 - INVERT = 0x150A - NAND = 0x150E - NOOP = 0x1505 - NOR = 0x1508 - OR = 0x1507 - OR_INVERTED = 0x150D - OR_REVERSE = 0x150B - SET = 0x150F - XOR = 0x1506 - - MAP_FLUSH_EXPLICIT_BIT = 0x0010 - MAP_INVALIDATE_BUFFER_BIT = 0x0008 - MAP_INVALIDATE_RANGE_BIT = 0x0004 - MAP_READ_BIT = 0x0001 - MAP_UNSYNCHRONIZED_BIT = 0x0020 - MAP_WRITE_BIT = 0x0002 - - COLOR_INDEXES = 0x1603 - SHININESS = 0x1601 - - MODELVIEW = 0x1700 - PROJECTION = 0x1701 - TEXTURE = 0x1702 - - ALL_BARRIER_BITS = 0xFFFFFFFF - ATOMIC_COUNTER_BARRIER_BIT = 0x00001000 - BUFFER_UPDATE_BARRIER_BIT = 0x00000200 - COMMAND_BARRIER_BIT = 0x00000040 - ELEMENT_ARRAY_BARRIER_BIT = 0x00000002 - FRAMEBUFFER_BARRIER_BIT = 0x00000400 - PIXEL_BUFFER_BARRIER_BIT = 0x00000080 - SHADER_IMAGE_ACCESS_BARRIER_BIT = 0x00000020 - TEXTURE_FETCH_BARRIER_BIT = 0x00000008 - TEXTURE_UPDATE_BARRIER_BIT = 0x00000100 - TRANSFORM_FEEDBACK_BARRIER_BIT = 0x00000800 - UNIFORM_BARRIER_BIT = 0x00000004 - VERTEX_ATTRIB_ARRAY_BARRIER_BIT = 0x00000001 - - LINE = 0x1B01 - POINT = 0x1B00 - - FILL = 0x1B02 - - COLOR = 0x1800 - DEPTH = 0x1801 - STENCIL = 0x1802 - - ALPHA = 0x1906 - BLUE = 0x1905 - COLOR_INDEX = 0x1900 - DEPTH_COMPONENT = 0x1902 - GREEN = 0x1904 - LUMINANCE = 0x1909 - LUMINANCE_ALPHA = 0x190A - RED = 0x1903 - RGB = 0x1907 - RGBA = 0x1908 - STENCIL_INDEX = 0x1901 - - ALPHA12 = 0x803D - ALPHA16 = 0x803E - ALPHA4 = 0x803B - ALPHA8 = 0x803C - INTENSITY = 0x8049 - INTENSITY12 = 0x804C - INTENSITY16 = 0x804D - INTENSITY4 = 0x804A - INTENSITY8 = 0x804B - LUMINANCE12 = 0x8041 - LUMINANCE12_ALPHA12 = 0x8047 - LUMINANCE12_ALPHA4 = 0x8046 - LUMINANCE16 = 0x8042 - LUMINANCE16_ALPHA16 = 0x8048 - LUMINANCE4 = 0x803F - LUMINANCE4_ALPHA4 = 0x8043 - LUMINANCE6_ALPHA2 = 0x8044 - LUMINANCE8 = 0x8040 - LUMINANCE8_ALPHA8 = 0x8045 - R3_G3_B2 = 0x2A10 - RGB10 = 0x8052 - RGB10_A2 = 0x8059 - RGB12 = 0x8053 - RGB16 = 0x8054 - RGB4 = 0x804F - RGB5 = 0x8050 - RGB5_A1 = 0x8057 - RGB8 = 0x8051 - RGBA12 = 0x805A - RGBA16 = 0x805B - RGBA2 = 0x8055 - RGBA4 = 0x8056 - RGBA8 = 0x8058 - - PACK_IMAGE_HEIGHT = 0x806C - PACK_SKIP_IMAGES = 0x806B - UNPACK_IMAGE_HEIGHT = 0x806E - UNPACK_SKIP_IMAGES = 0x806D - - BITMAP = 0x1A00 - UNSIGNED_BYTE_3_3_2 = 0x8032 - UNSIGNED_INT_10_10_10_2 = 0x8036 - UNSIGNED_INT_8_8_8_8 = 0x8035 - UNSIGNED_SHORT_4_4_4_4 = 0x8033 - UNSIGNED_SHORT_5_5_5_1 = 0x8034 - - POINT_DISTANCE_ATTENUATION = 0x8129 - POINT_FADE_THRESHOLD_SIZE = 0x8128 - POINT_SIZE_MAX = 0x8127 - POINT_SIZE_MIN = 0x8126 - - LINES = 0x0001 - LINES_ADJACENCY = 0x000A - LINE_LOOP = 0x0002 - LINE_STRIP = 0x0003 - LINE_STRIP_ADJACENCY = 0x000B - PATCHES = 0x000E - POINTS = 0x0000 - POLYGON = 0x0009 - QUADS = 0x0007 - QUAD_STRIP = 0x0008 - TRIANGLES = 0x0004 - TRIANGLES_ADJACENCY = 0x000C - TRIANGLE_FAN = 0x0006 - TRIANGLE_STRIP = 0x0005 - TRIANGLE_STRIP_ADJACENCY = 0x000D - - FEEDBACK = 0x1C01 - RENDER = 0x1C00 - SELECT = 0x1C02 - - FLAT = 0x1D00 - SMOOTH = 0x1D01 - - DECR = 0x1E03 - INCR = 0x1E02 - KEEP = 0x1E00 - - EXTENSIONS = 0x1F03 - RENDERER = 0x1F01 - VENDOR = 0x1F00 - VERSION = 0x1F02 - - S = 0x2000 - T = 0x2001 - R = 0x2002 - Q = 0x2003 - - DECAL = 0x2101 - - TEXTURE_ENV_COLOR = 0x2201 - TEXTURE_ENV_MODE = 0x2200 - - TEXTURE_ENV = 0x2300 - - EYE_LINEAR = 0x2400 - OBJECT_LINEAR = 0x2401 - SPHERE_MAP = 0x2402 - - EYE_PLANE = 0x2502 - OBJECT_PLANE = 0x2501 - TEXTURE_GEN_MODE = 0x2500 - - NEAREST = 0x2600 - - LINEAR_MIPMAP_LINEAR = 0x2703 - LINEAR_MIPMAP_NEAREST = 0x2701 - NEAREST_MIPMAP_LINEAR = 0x2702 - NEAREST_MIPMAP_NEAREST = 0x2700 - - GENERATE_MIPMAP = 0x8191 - TEXTURE_WRAP_R = 0x8072 - - PROXY_TEXTURE_1D = 0x8063 - PROXY_TEXTURE_2D = 0x8064 - PROXY_TEXTURE_3D = 0x8070 - TEXTURE_3D = 0x806F - TEXTURE_BASE_LEVEL = 0x813C - TEXTURE_MAX_LEVEL = 0x813D - TEXTURE_MAX_LOD = 0x813B - TEXTURE_MIN_LOD = 0x813A - - CLAMP = 0x2900 - CLAMP_TO_BORDER = 0x812D - CLAMP_TO_EDGE = 0x812F - REPEAT = 0x2901 - - VERTEX_SHADER_BIT = 0x00000001 - FRAGMENT_SHADER_BIT = 0x00000002 - GEOMETRY_SHADER_BIT = 0x00000004 - TESS_CONTROL_SHADER_BIT = 0x00000008 - TESS_EVALUATION_SHADER_BIT = 0x00000010 - ALL_SHADER_BITS = 0xFFFFFFFF - - SYNC_FLUSH_COMMANDS_BIT = 0x00000001 - INVALID_INDEX = 0xFFFFFFFF - TIMEOUT_IGNORED = 0xFFFFFFFFFFFFFFFF - CONSTANT_COLOR = 0x8001 - ONE_MINUS_CONSTANT_COLOR = 0x8002 - CONSTANT_ALPHA = 0x8003 - ONE_MINUS_CONSTANT_ALPHA = 0x8004 - FUNC_ADD = 0x8006 - MIN = 0x8007 - MAX = 0x8008 - BLEND_EQUATION_RGB = 0x8009 - FUNC_SUBTRACT = 0x800A - FUNC_REVERSE_SUBTRACT = 0x800B - RESCALE_NORMAL = 0x803A - TEXTURE_DEPTH = 0x8071 - MAX_3D_TEXTURE_SIZE = 0x8073 - MULTISAMPLE = 0x809D - SAMPLE_ALPHA_TO_COVERAGE = 0x809E - SAMPLE_ALPHA_TO_ONE = 0x809F - SAMPLE_COVERAGE = 0x80A0 - SAMPLE_BUFFERS = 0x80A8 - SAMPLES = 0x80A9 - SAMPLE_COVERAGE_VALUE = 0x80AA - SAMPLE_COVERAGE_INVERT = 0x80AB - BLEND_DST_RGB = 0x80C8 - BLEND_SRC_RGB = 0x80C9 - BLEND_DST_ALPHA = 0x80CA - BLEND_SRC_ALPHA = 0x80CB - BGR = 0x80E0 - BGRA = 0x80E1 - MAX_ELEMENTS_VERTICES = 0x80E8 - MAX_ELEMENTS_INDICES = 0x80E9 - DEPTH_COMPONENT16 = 0x81A5 - DEPTH_COMPONENT24 = 0x81A6 - DEPTH_COMPONENT32 = 0x81A7 - FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING = 0x8210 - FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE = 0x8211 - FRAMEBUFFER_ATTACHMENT_RED_SIZE = 0x8212 - FRAMEBUFFER_ATTACHMENT_GREEN_SIZE = 0x8213 - FRAMEBUFFER_ATTACHMENT_BLUE_SIZE = 0x8214 - FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE = 0x8215 - FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE = 0x8216 - FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE = 0x8217 - FRAMEBUFFER_DEFAULT = 0x8218 - FRAMEBUFFER_UNDEFINED = 0x8219 - DEPTH_STENCIL_ATTACHMENT = 0x821A - MAJOR_VERSION = 0x821B - MINOR_VERSION = 0x821C - NUM_EXTENSIONS = 0x821D - CONTEXT_FLAGS = 0x821E - COMPRESSED_RED = 0x8225 - COMPRESSED_RG = 0x8226 - RG = 0x8227 - RG_INTEGER = 0x8228 - R8 = 0x8229 - R16 = 0x822A - RG8 = 0x822B - RG16 = 0x822C - R16F = 0x822D - R32F = 0x822E - RG16F = 0x822F - RG32F = 0x8230 - R8I = 0x8231 - R8UI = 0x8232 - R16I = 0x8233 - R16UI = 0x8234 - R32I = 0x8235 - R32UI = 0x8236 - RG8I = 0x8237 - RG8UI = 0x8238 - RG16I = 0x8239 - RG16UI = 0x823A - RG32I = 0x823B - RG32UI = 0x823C - PROGRAM_SEPARABLE = 0x8258 - ACTIVE_PROGRAM = 0x8259 - PROGRAM_PIPELINE_BINDING = 0x825A - MAX_VIEWPORTS = 0x825B - VIEWPORT_SUBPIXEL_BITS = 0x825C - VIEWPORT_BOUNDS_RANGE = 0x825D - LAYER_PROVOKING_VERTEX = 0x825E - VIEWPORT_INDEX_PROVOKING_VERTEX = 0x825F - UNDEFINED_VERTEX = 0x8260 - UNSIGNED_BYTE_2_3_3_REV = 0x8362 - UNSIGNED_SHORT_5_6_5 = 0x8363 - UNSIGNED_SHORT_5_6_5_REV = 0x8364 - UNSIGNED_SHORT_4_4_4_4_REV = 0x8365 - UNSIGNED_SHORT_1_5_5_5_REV = 0x8366 - UNSIGNED_INT_8_8_8_8_REV = 0x8367 - UNSIGNED_INT_2_10_10_10_REV = 0x8368 - MIRRORED_REPEAT = 0x8370 - FOG_COORDINATE_SOURCE = 0x8450 - FOG_COORD_SRC = 0x8450 - FOG_COORDINATE = 0x8451 - FOG_COORD = 0x8451 - FRAGMENT_DEPTH = 0x8452 - CURRENT_FOG_COORDINATE = 0x8453 - CURRENT_FOG_COORD = 0x8453 - FOG_COORDINATE_ARRAY_TYPE = 0x8454 - FOG_COORD_ARRAY_TYPE = 0x8454 - FOG_COORDINATE_ARRAY_STRIDE = 0x8455 - FOG_COORD_ARRAY_STRIDE = 0x8455 - FOG_COORDINATE_ARRAY_POINTER = 0x8456 - FOG_COORD_ARRAY_POINTER = 0x8456 - FOG_COORDINATE_ARRAY = 0x8457 - FOG_COORD_ARRAY = 0x8457 - COLOR_SUM = 0x8458 - CURRENT_SECONDARY_COLOR = 0x8459 - SECONDARY_COLOR_ARRAY_SIZE = 0x845A - SECONDARY_COLOR_ARRAY_TYPE = 0x845B - SECONDARY_COLOR_ARRAY_STRIDE = 0x845C - SECONDARY_COLOR_ARRAY_POINTER = 0x845D - SECONDARY_COLOR_ARRAY = 0x845E - CURRENT_RASTER_SECONDARY_COLOR = 0x845F - TEXTURE0 = 0x84C0 - TEXTURE1 = 0x84C1 - TEXTURE2 = 0x84C2 - TEXTURE3 = 0x84C3 - TEXTURE4 = 0x84C4 - TEXTURE5 = 0x84C5 - TEXTURE6 = 0x84C6 - TEXTURE7 = 0x84C7 - TEXTURE8 = 0x84C8 - TEXTURE9 = 0x84C9 - TEXTURE10 = 0x84CA - TEXTURE11 = 0x84CB - TEXTURE12 = 0x84CC - TEXTURE13 = 0x84CD - TEXTURE14 = 0x84CE - TEXTURE15 = 0x84CF - TEXTURE16 = 0x84D0 - TEXTURE17 = 0x84D1 - TEXTURE18 = 0x84D2 - TEXTURE19 = 0x84D3 - TEXTURE20 = 0x84D4 - TEXTURE21 = 0x84D5 - TEXTURE22 = 0x84D6 - TEXTURE23 = 0x84D7 - TEXTURE24 = 0x84D8 - TEXTURE25 = 0x84D9 - TEXTURE26 = 0x84DA - TEXTURE27 = 0x84DB - TEXTURE28 = 0x84DC - TEXTURE29 = 0x84DD - TEXTURE30 = 0x84DE - TEXTURE31 = 0x84DF - ACTIVE_TEXTURE = 0x84E0 - CLIENT_ACTIVE_TEXTURE = 0x84E1 - MAX_TEXTURE_UNITS = 0x84E2 - TRANSPOSE_MODELVIEW_MATRIX = 0x84E3 - TRANSPOSE_PROJECTION_MATRIX = 0x84E4 - TRANSPOSE_TEXTURE_MATRIX = 0x84E5 - TRANSPOSE_COLOR_MATRIX = 0x84E6 - SUBTRACT = 0x84E7 - MAX_RENDERBUFFER_SIZE = 0x84E8 - COMPRESSED_ALPHA = 0x84E9 - COMPRESSED_LUMINANCE = 0x84EA - COMPRESSED_LUMINANCE_ALPHA = 0x84EB - COMPRESSED_INTENSITY = 0x84EC - COMPRESSED_RGB = 0x84ED - COMPRESSED_RGBA = 0x84EE - UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER = 0x84F0 - UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER = 0x84F1 - TEXTURE_RECTANGLE = 0x84F5 - TEXTURE_BINDING_RECTANGLE = 0x84F6 - PROXY_TEXTURE_RECTANGLE = 0x84F7 - MAX_RECTANGLE_TEXTURE_SIZE = 0x84F8 - DEPTH_STENCIL = 0x84F9 - UNSIGNED_INT_24_8 = 0x84FA - MAX_TEXTURE_LOD_BIAS = 0x84FD - TEXTURE_FILTER_CONTROL = 0x8500 - TEXTURE_LOD_BIAS = 0x8501 - INCR_WRAP = 0x8507 - DECR_WRAP = 0x8508 - NORMAL_MAP = 0x8511 - REFLECTION_MAP = 0x8512 - TEXTURE_CUBE_MAP = 0x8513 - TEXTURE_BINDING_CUBE_MAP = 0x8514 - TEXTURE_CUBE_MAP_POSITIVE_X = 0x8515 - TEXTURE_CUBE_MAP_NEGATIVE_X = 0x8516 - TEXTURE_CUBE_MAP_POSITIVE_Y = 0x8517 - TEXTURE_CUBE_MAP_NEGATIVE_Y = 0x8518 - TEXTURE_CUBE_MAP_POSITIVE_Z = 0x8519 - TEXTURE_CUBE_MAP_NEGATIVE_Z = 0x851A - PROXY_TEXTURE_CUBE_MAP = 0x851B - MAX_CUBE_MAP_TEXTURE_SIZE = 0x851C - COMBINE = 0x8570 - COMBINE_RGB = 0x8571 - COMBINE_ALPHA = 0x8572 - RGB_SCALE = 0x8573 - ADD_SIGNED = 0x8574 - INTERPOLATE = 0x8575 - CONSTANT = 0x8576 - PRIMARY_COLOR = 0x8577 - PREVIOUS = 0x8578 - SOURCE0_RGB = 0x8580 - SRC0_RGB = 0x8580 - SOURCE1_RGB = 0x8581 - SRC1_RGB = 0x8581 - SOURCE2_RGB = 0x8582 - SRC2_RGB = 0x8582 - SOURCE0_ALPHA = 0x8588 - SRC0_ALPHA = 0x8588 - SOURCE1_ALPHA = 0x8589 - SRC1_ALPHA = 0x8589 - SOURCE2_ALPHA = 0x858A - SRC2_ALPHA = 0x858A - OPERAND0_RGB = 0x8590 - OPERAND1_RGB = 0x8591 - OPERAND2_RGB = 0x8592 - OPERAND0_ALPHA = 0x8598 - OPERAND1_ALPHA = 0x8599 - OPERAND2_ALPHA = 0x859A - VERTEX_ARRAY_BINDING = 0x85B5 - VERTEX_ATTRIB_ARRAY_ENABLED = 0x8622 - VERTEX_ATTRIB_ARRAY_SIZE = 0x8623 - VERTEX_ATTRIB_ARRAY_STRIDE = 0x8624 - VERTEX_ATTRIB_ARRAY_TYPE = 0x8625 - CURRENT_VERTEX_ATTRIB = 0x8626 - VERTEX_PROGRAM_POINT_SIZE = 0x8642 - PROGRAM_POINT_SIZE = 0x8642 - VERTEX_PROGRAM_TWO_SIDE = 0x8643 - VERTEX_ATTRIB_ARRAY_POINTER = 0x8645 - DEPTH_CLAMP = 0x864F - TEXTURE_COMPRESSED_IMAGE_SIZE = 0x86A0 - TEXTURE_COMPRESSED = 0x86A1 - NUM_COMPRESSED_TEXTURE_FORMATS = 0x86A2 - COMPRESSED_TEXTURE_FORMATS = 0x86A3 - DOT3_RGB = 0x86AE - DOT3_RGBA = 0x86AF - PROGRAM_BINARY_LENGTH = 0x8741 - BUFFER_SIZE = 0x8764 - BUFFER_USAGE = 0x8765 - NUM_PROGRAM_BINARY_FORMATS = 0x87FE - PROGRAM_BINARY_FORMATS = 0x87FF - STENCIL_BACK_FUNC = 0x8800 - STENCIL_BACK_FAIL = 0x8801 - STENCIL_BACK_PASS_DEPTH_FAIL = 0x8802 - STENCIL_BACK_PASS_DEPTH_PASS = 0x8803 - RGBA32F = 0x8814 - RGB32F = 0x8815 - RGBA16F = 0x881A - RGB16F = 0x881B - MAX_DRAW_BUFFERS = 0x8824 - DRAW_BUFFER0 = 0x8825 - DRAW_BUFFER1 = 0x8826 - DRAW_BUFFER2 = 0x8827 - DRAW_BUFFER3 = 0x8828 - DRAW_BUFFER4 = 0x8829 - DRAW_BUFFER5 = 0x882A - DRAW_BUFFER6 = 0x882B - DRAW_BUFFER7 = 0x882C - DRAW_BUFFER8 = 0x882D - DRAW_BUFFER9 = 0x882E - DRAW_BUFFER10 = 0x882F - DRAW_BUFFER11 = 0x8830 - DRAW_BUFFER12 = 0x8831 - DRAW_BUFFER13 = 0x8832 - DRAW_BUFFER14 = 0x8833 - DRAW_BUFFER15 = 0x8834 - BLEND_EQUATION_ALPHA = 0x883D - TEXTURE_DEPTH_SIZE = 0x884A - DEPTH_TEXTURE_MODE = 0x884B - TEXTURE_COMPARE_MODE = 0x884C - TEXTURE_COMPARE_FUNC = 0x884D - COMPARE_R_TO_TEXTURE = 0x884E - COMPARE_REF_TO_TEXTURE = 0x884E - TEXTURE_CUBE_MAP_SEAMLESS = 0x884F - POINT_SPRITE = 0x8861 - COORD_REPLACE = 0x8862 - QUERY_COUNTER_BITS = 0x8864 - CURRENT_QUERY = 0x8865 - QUERY_RESULT = 0x8866 - QUERY_RESULT_AVAILABLE = 0x8867 - MAX_VERTEX_ATTRIBS = 0x8869 - VERTEX_ATTRIB_ARRAY_NORMALIZED = 0x886A - MAX_TESS_CONTROL_INPUT_COMPONENTS = 0x886C - MAX_TESS_EVALUATION_INPUT_COMPONENTS = 0x886D - MAX_TEXTURE_COORDS = 0x8871 - MAX_TEXTURE_IMAGE_UNITS = 0x8872 - GEOMETRY_SHADER_INVOCATIONS = 0x887F - ARRAY_BUFFER = 0x8892 - ELEMENT_ARRAY_BUFFER = 0x8893 - ARRAY_BUFFER_BINDING = 0x8894 - ELEMENT_ARRAY_BUFFER_BINDING = 0x8895 - VERTEX_ARRAY_BUFFER_BINDING = 0x8896 - NORMAL_ARRAY_BUFFER_BINDING = 0x8897 - COLOR_ARRAY_BUFFER_BINDING = 0x8898 - INDEX_ARRAY_BUFFER_BINDING = 0x8899 - TEXTURE_COORD_ARRAY_BUFFER_BINDING = 0x889A - EDGE_FLAG_ARRAY_BUFFER_BINDING = 0x889B - SECONDARY_COLOR_ARRAY_BUFFER_BINDING = 0x889C - FOG_COORDINATE_ARRAY_BUFFER_BINDING = 0x889D - FOG_COORD_ARRAY_BUFFER_BINDING = 0x889D - WEIGHT_ARRAY_BUFFER_BINDING = 0x889E - VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = 0x889F - READ_ONLY = 0x88B8 - WRITE_ONLY = 0x88B9 - READ_WRITE = 0x88BA - BUFFER_ACCESS = 0x88BB - BUFFER_MAPPED = 0x88BC - BUFFER_MAP_POINTER = 0x88BD - TIME_ELAPSED = 0x88BF - STREAM_DRAW = 0x88E0 - STREAM_READ = 0x88E1 - STREAM_COPY = 0x88E2 - STATIC_DRAW = 0x88E4 - STATIC_READ = 0x88E5 - STATIC_COPY = 0x88E6 - DYNAMIC_DRAW = 0x88E8 - DYNAMIC_READ = 0x88E9 - DYNAMIC_COPY = 0x88EA - PIXEL_PACK_BUFFER = 0x88EB - PIXEL_UNPACK_BUFFER = 0x88EC - PIXEL_PACK_BUFFER_BINDING = 0x88ED - PIXEL_UNPACK_BUFFER_BINDING = 0x88EF - DEPTH24_STENCIL8 = 0x88F0 - TEXTURE_STENCIL_SIZE = 0x88F1 - SRC1_COLOR = 0x88F9 - ONE_MINUS_SRC1_COLOR = 0x88FA - ONE_MINUS_SRC1_ALPHA = 0x88FB - MAX_DUAL_SOURCE_DRAW_BUFFERS = 0x88FC - VERTEX_ATTRIB_ARRAY_INTEGER = 0x88FD - VERTEX_ATTRIB_ARRAY_DIVISOR = 0x88FE - MAX_ARRAY_TEXTURE_LAYERS = 0x88FF - MIN_PROGRAM_TEXEL_OFFSET = 0x8904 - MAX_PROGRAM_TEXEL_OFFSET = 0x8905 - SAMPLES_PASSED = 0x8914 - GEOMETRY_VERTICES_OUT = 0x8916 - GEOMETRY_INPUT_TYPE = 0x8917 - GEOMETRY_OUTPUT_TYPE = 0x8918 - SAMPLER_BINDING = 0x8919 - CLAMP_VERTEX_COLOR = 0x891A - CLAMP_FRAGMENT_COLOR = 0x891B - CLAMP_READ_COLOR = 0x891C - FIXED_ONLY = 0x891D - UNIFORM_BUFFER = 0x8A11 - UNIFORM_BUFFER_BINDING = 0x8A28 - UNIFORM_BUFFER_START = 0x8A29 - UNIFORM_BUFFER_SIZE = 0x8A2A - MAX_VERTEX_UNIFORM_BLOCKS = 0x8A2B - MAX_GEOMETRY_UNIFORM_BLOCKS = 0x8A2C - MAX_FRAGMENT_UNIFORM_BLOCKS = 0x8A2D - MAX_COMBINED_UNIFORM_BLOCKS = 0x8A2E - MAX_UNIFORM_BUFFER_BINDINGS = 0x8A2F - MAX_UNIFORM_BLOCK_SIZE = 0x8A30 - MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS = 0x8A31 - MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS = 0x8A32 - MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS = 0x8A33 - UNIFORM_BUFFER_OFFSET_ALIGNMENT = 0x8A34 - ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH = 0x8A35 - ACTIVE_UNIFORM_BLOCKS = 0x8A36 - UNIFORM_TYPE = 0x8A37 - UNIFORM_SIZE = 0x8A38 - UNIFORM_NAME_LENGTH = 0x8A39 - UNIFORM_BLOCK_INDEX = 0x8A3A - UNIFORM_OFFSET = 0x8A3B - UNIFORM_ARRAY_STRIDE = 0x8A3C - UNIFORM_MATRIX_STRIDE = 0x8A3D - UNIFORM_IS_ROW_MAJOR = 0x8A3E - UNIFORM_BLOCK_BINDING = 0x8A3F - UNIFORM_BLOCK_DATA_SIZE = 0x8A40 - UNIFORM_BLOCK_NAME_LENGTH = 0x8A41 - UNIFORM_BLOCK_ACTIVE_UNIFORMS = 0x8A42 - UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES = 0x8A43 - UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER = 0x8A44 - UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER = 0x8A45 - UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER = 0x8A46 - FRAGMENT_SHADER = 0x8B30 - VERTEX_SHADER = 0x8B31 - MAX_FRAGMENT_UNIFORM_COMPONENTS = 0x8B49 - MAX_VERTEX_UNIFORM_COMPONENTS = 0x8B4A - MAX_VARYING_FLOATS = 0x8B4B - MAX_VARYING_COMPONENTS = 0x8B4B - MAX_VERTEX_TEXTURE_IMAGE_UNITS = 0x8B4C - MAX_COMBINED_TEXTURE_IMAGE_UNITS = 0x8B4D - SHADER_TYPE = 0x8B4F - FLOAT_VEC2 = 0x8B50 - FLOAT_VEC3 = 0x8B51 - FLOAT_VEC4 = 0x8B52 - INT_VEC2 = 0x8B53 - INT_VEC3 = 0x8B54 - INT_VEC4 = 0x8B55 - BOOL = 0x8B56 - BOOL_VEC2 = 0x8B57 - BOOL_VEC3 = 0x8B58 - BOOL_VEC4 = 0x8B59 - FLOAT_MAT2 = 0x8B5A - FLOAT_MAT3 = 0x8B5B - FLOAT_MAT4 = 0x8B5C - SAMPLER_1D = 0x8B5D - SAMPLER_2D = 0x8B5E - SAMPLER_3D = 0x8B5F - SAMPLER_CUBE = 0x8B60 - SAMPLER_1D_SHADOW = 0x8B61 - SAMPLER_2D_SHADOW = 0x8B62 - SAMPLER_2D_RECT = 0x8B63 - SAMPLER_2D_RECT_SHADOW = 0x8B64 - FLOAT_MAT2x3 = 0x8B65 - FLOAT_MAT2x4 = 0x8B66 - FLOAT_MAT3x2 = 0x8B67 - FLOAT_MAT3x4 = 0x8B68 - FLOAT_MAT4x2 = 0x8B69 - FLOAT_MAT4x3 = 0x8B6A - DELETE_STATUS = 0x8B80 - COMPILE_STATUS = 0x8B81 - LINK_STATUS = 0x8B82 - VALIDATE_STATUS = 0x8B83 - INFO_LOG_LENGTH = 0x8B84 - ATTACHED_SHADERS = 0x8B85 - ACTIVE_UNIFORMS = 0x8B86 - ACTIVE_UNIFORM_MAX_LENGTH = 0x8B87 - SHADER_SOURCE_LENGTH = 0x8B88 - ACTIVE_ATTRIBUTES = 0x8B89 - ACTIVE_ATTRIBUTE_MAX_LENGTH = 0x8B8A - SHADING_LANGUAGE_VERSION = 0x8B8C - CURRENT_PROGRAM = 0x8B8D - IMPLEMENTATION_COLOR_READ_TYPE = 0x8B9A - IMPLEMENTATION_COLOR_READ_FORMAT = 0x8B9B - TEXTURE_RED_TYPE = 0x8C10 - TEXTURE_GREEN_TYPE = 0x8C11 - TEXTURE_BLUE_TYPE = 0x8C12 - TEXTURE_ALPHA_TYPE = 0x8C13 - TEXTURE_DEPTH_TYPE = 0x8C16 - UNSIGNED_NORMALIZED = 0x8C17 - TEXTURE_1D_ARRAY = 0x8C18 - PROXY_TEXTURE_1D_ARRAY = 0x8C19 - TEXTURE_2D_ARRAY = 0x8C1A - PROXY_TEXTURE_2D_ARRAY = 0x8C1B - TEXTURE_BINDING_1D_ARRAY = 0x8C1C - TEXTURE_BINDING_2D_ARRAY = 0x8C1D - MAX_GEOMETRY_TEXTURE_IMAGE_UNITS = 0x8C29 - TEXTURE_BUFFER = 0x8C2A - MAX_TEXTURE_BUFFER_SIZE = 0x8C2B - TEXTURE_BINDING_BUFFER = 0x8C2C - TEXTURE_BUFFER_DATA_STORE_BINDING = 0x8C2D - ANY_SAMPLES_PASSED = 0x8C2F - SAMPLE_SHADING = 0x8C36 - MIN_SAMPLE_SHADING_VALUE = 0x8C37 - R11F_G11F_B10F = 0x8C3A - UNSIGNED_INT_10F_11F_11F_REV = 0x8C3B - RGB9_E5 = 0x8C3D - UNSIGNED_INT_5_9_9_9_REV = 0x8C3E - TEXTURE_SHARED_SIZE = 0x8C3F - SRGB = 0x8C40 - SRGB8 = 0x8C41 - SRGB_ALPHA = 0x8C42 - SRGB8_ALPHA8 = 0x8C43 - SLUMINANCE_ALPHA = 0x8C44 - SLUMINANCE8_ALPHA8 = 0x8C45 - SLUMINANCE = 0x8C46 - SLUMINANCE8 = 0x8C47 - COMPRESSED_SRGB = 0x8C48 - COMPRESSED_SRGB_ALPHA = 0x8C49 - COMPRESSED_SLUMINANCE = 0x8C4A - COMPRESSED_SLUMINANCE_ALPHA = 0x8C4B - TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH = 0x8C76 - TRANSFORM_FEEDBACK_BUFFER_MODE = 0x8C7F - MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS = 0x8C80 - TRANSFORM_FEEDBACK_VARYINGS = 0x8C83 - TRANSFORM_FEEDBACK_BUFFER_START = 0x8C84 - TRANSFORM_FEEDBACK_BUFFER_SIZE = 0x8C85 - PRIMITIVES_GENERATED = 0x8C87 - TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN = 0x8C88 - RASTERIZER_DISCARD = 0x8C89 - MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS = 0x8C8A - MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS = 0x8C8B - INTERLEAVED_ATTRIBS = 0x8C8C - SEPARATE_ATTRIBS = 0x8C8D - TRANSFORM_FEEDBACK_BUFFER = 0x8C8E - TRANSFORM_FEEDBACK_BUFFER_BINDING = 0x8C8F - POINT_SPRITE_COORD_ORIGIN = 0x8CA0 - LOWER_LEFT = 0x8CA1 - UPPER_LEFT = 0x8CA2 - STENCIL_BACK_REF = 0x8CA3 - STENCIL_BACK_VALUE_MASK = 0x8CA4 - STENCIL_BACK_WRITEMASK = 0x8CA5 - DRAW_FRAMEBUFFER_BINDING = 0x8CA6 - FRAMEBUFFER_BINDING = 0x8CA6 - RENDERBUFFER_BINDING = 0x8CA7 - READ_FRAMEBUFFER = 0x8CA8 - DRAW_FRAMEBUFFER = 0x8CA9 - READ_FRAMEBUFFER_BINDING = 0x8CAA - RENDERBUFFER_SAMPLES = 0x8CAB - DEPTH_COMPONENT32F = 0x8CAC - DEPTH32F_STENCIL8 = 0x8CAD - FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE = 0x8CD0 - FRAMEBUFFER_ATTACHMENT_OBJECT_NAME = 0x8CD1 - FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL = 0x8CD2 - FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE = 0x8CD3 - FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER = 0x8CD4 - FRAMEBUFFER_COMPLETE = 0x8CD5 - FRAMEBUFFER_INCOMPLETE_ATTACHMENT = 0x8CD6 - FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = 0x8CD7 - FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER = 0x8CDB - FRAMEBUFFER_INCOMPLETE_READ_BUFFER = 0x8CDC - FRAMEBUFFER_UNSUPPORTED = 0x8CDD - MAX_COLOR_ATTACHMENTS = 0x8CDF - COLOR_ATTACHMENT0 = 0x8CE0 - COLOR_ATTACHMENT1 = 0x8CE1 - COLOR_ATTACHMENT2 = 0x8CE2 - COLOR_ATTACHMENT3 = 0x8CE3 - COLOR_ATTACHMENT4 = 0x8CE4 - COLOR_ATTACHMENT5 = 0x8CE5 - COLOR_ATTACHMENT6 = 0x8CE6 - COLOR_ATTACHMENT7 = 0x8CE7 - COLOR_ATTACHMENT8 = 0x8CE8 - COLOR_ATTACHMENT9 = 0x8CE9 - COLOR_ATTACHMENT10 = 0x8CEA - COLOR_ATTACHMENT11 = 0x8CEB - COLOR_ATTACHMENT12 = 0x8CEC - COLOR_ATTACHMENT13 = 0x8CED - COLOR_ATTACHMENT14 = 0x8CEE - COLOR_ATTACHMENT15 = 0x8CEF - DEPTH_ATTACHMENT = 0x8D00 - STENCIL_ATTACHMENT = 0x8D20 - FRAMEBUFFER = 0x8D40 - RENDERBUFFER = 0x8D41 - RENDERBUFFER_WIDTH = 0x8D42 - RENDERBUFFER_HEIGHT = 0x8D43 - RENDERBUFFER_INTERNAL_FORMAT = 0x8D44 - STENCIL_INDEX1 = 0x8D46 - STENCIL_INDEX4 = 0x8D47 - STENCIL_INDEX8 = 0x8D48 - STENCIL_INDEX16 = 0x8D49 - RENDERBUFFER_RED_SIZE = 0x8D50 - RENDERBUFFER_GREEN_SIZE = 0x8D51 - RENDERBUFFER_BLUE_SIZE = 0x8D52 - RENDERBUFFER_ALPHA_SIZE = 0x8D53 - RENDERBUFFER_DEPTH_SIZE = 0x8D54 - RENDERBUFFER_STENCIL_SIZE = 0x8D55 - FRAMEBUFFER_INCOMPLETE_MULTISAMPLE = 0x8D56 - MAX_SAMPLES = 0x8D57 - RGB565 = 0x8D62 - RGBA32UI = 0x8D70 - RGB32UI = 0x8D71 - RGBA16UI = 0x8D76 - RGB16UI = 0x8D77 - RGBA8UI = 0x8D7C - RGB8UI = 0x8D7D - RGBA32I = 0x8D82 - RGB32I = 0x8D83 - RGBA16I = 0x8D88 - RGB16I = 0x8D89 - RGBA8I = 0x8D8E - RGB8I = 0x8D8F - RED_INTEGER = 0x8D94 - GREEN_INTEGER = 0x8D95 - BLUE_INTEGER = 0x8D96 - ALPHA_INTEGER = 0x8D97 - RGB_INTEGER = 0x8D98 - RGBA_INTEGER = 0x8D99 - BGR_INTEGER = 0x8D9A - BGRA_INTEGER = 0x8D9B - INT_2_10_10_10_REV = 0x8D9F - FRAMEBUFFER_ATTACHMENT_LAYERED = 0x8DA7 - FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS = 0x8DA8 - FLOAT_32_UNSIGNED_INT_24_8_REV = 0x8DAD - FRAMEBUFFER_SRGB = 0x8DB9 - COMPRESSED_RED_RGTC1 = 0x8DBB - COMPRESSED_SIGNED_RED_RGTC1 = 0x8DBC - COMPRESSED_RG_RGTC2 = 0x8DBD - COMPRESSED_SIGNED_RG_RGTC2 = 0x8DBE - SAMPLER_1D_ARRAY = 0x8DC0 - SAMPLER_2D_ARRAY = 0x8DC1 - SAMPLER_BUFFER = 0x8DC2 - SAMPLER_1D_ARRAY_SHADOW = 0x8DC3 - SAMPLER_2D_ARRAY_SHADOW = 0x8DC4 - SAMPLER_CUBE_SHADOW = 0x8DC5 - UNSIGNED_INT_VEC2 = 0x8DC6 - UNSIGNED_INT_VEC3 = 0x8DC7 - UNSIGNED_INT_VEC4 = 0x8DC8 - INT_SAMPLER_1D = 0x8DC9 - INT_SAMPLER_2D = 0x8DCA - INT_SAMPLER_3D = 0x8DCB - INT_SAMPLER_CUBE = 0x8DCC - INT_SAMPLER_2D_RECT = 0x8DCD - INT_SAMPLER_1D_ARRAY = 0x8DCE - INT_SAMPLER_2D_ARRAY = 0x8DCF - INT_SAMPLER_BUFFER = 0x8DD0 - UNSIGNED_INT_SAMPLER_1D = 0x8DD1 - UNSIGNED_INT_SAMPLER_2D = 0x8DD2 - UNSIGNED_INT_SAMPLER_3D = 0x8DD3 - UNSIGNED_INT_SAMPLER_CUBE = 0x8DD4 - UNSIGNED_INT_SAMPLER_2D_RECT = 0x8DD5 - UNSIGNED_INT_SAMPLER_1D_ARRAY = 0x8DD6 - UNSIGNED_INT_SAMPLER_2D_ARRAY = 0x8DD7 - UNSIGNED_INT_SAMPLER_BUFFER = 0x8DD8 - GEOMETRY_SHADER = 0x8DD9 - MAX_GEOMETRY_UNIFORM_COMPONENTS = 0x8DDF - MAX_GEOMETRY_OUTPUT_VERTICES = 0x8DE0 - MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS = 0x8DE1 - ACTIVE_SUBROUTINES = 0x8DE5 - ACTIVE_SUBROUTINE_UNIFORMS = 0x8DE6 - MAX_SUBROUTINES = 0x8DE7 - MAX_SUBROUTINE_UNIFORM_LOCATIONS = 0x8DE8 - LOW_FLOAT = 0x8DF0 - MEDIUM_FLOAT = 0x8DF1 - HIGH_FLOAT = 0x8DF2 - LOW_INT = 0x8DF3 - MEDIUM_INT = 0x8DF4 - HIGH_INT = 0x8DF5 - SHADER_BINARY_FORMATS = 0x8DF8 - NUM_SHADER_BINARY_FORMATS = 0x8DF9 - SHADER_COMPILER = 0x8DFA - MAX_VERTEX_UNIFORM_VECTORS = 0x8DFB - MAX_VARYING_VECTORS = 0x8DFC - MAX_FRAGMENT_UNIFORM_VECTORS = 0x8DFD - QUERY_WAIT = 0x8E13 - QUERY_NO_WAIT = 0x8E14 - QUERY_BY_REGION_WAIT = 0x8E15 - QUERY_BY_REGION_NO_WAIT = 0x8E16 - MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS = 0x8E1E - MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS = 0x8E1F - TRANSFORM_FEEDBACK = 0x8E22 - TRANSFORM_FEEDBACK_BUFFER_PAUSED = 0x8E23 - TRANSFORM_FEEDBACK_BUFFER_ACTIVE = 0x8E24 - TRANSFORM_FEEDBACK_BINDING = 0x8E25 - TIMESTAMP = 0x8E28 - TEXTURE_SWIZZLE_R = 0x8E42 - TEXTURE_SWIZZLE_G = 0x8E43 - TEXTURE_SWIZZLE_B = 0x8E44 - TEXTURE_SWIZZLE_A = 0x8E45 - TEXTURE_SWIZZLE_RGBA = 0x8E46 - ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS = 0x8E47 - ACTIVE_SUBROUTINE_MAX_LENGTH = 0x8E48 - ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH = 0x8E49 - NUM_COMPATIBLE_SUBROUTINES = 0x8E4A - COMPATIBLE_SUBROUTINES = 0x8E4B - QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION = 0x8E4C - FIRST_VERTEX_CONVENTION = 0x8E4D - LAST_VERTEX_CONVENTION = 0x8E4E - PROVOKING_VERTEX = 0x8E4F - SAMPLE_POSITION = 0x8E50 - SAMPLE_MASK = 0x8E51 - SAMPLE_MASK_VALUE = 0x8E52 - MAX_SAMPLE_MASK_WORDS = 0x8E59 - MAX_GEOMETRY_SHADER_INVOCATIONS = 0x8E5A - MIN_FRAGMENT_INTERPOLATION_OFFSET = 0x8E5B - MAX_FRAGMENT_INTERPOLATION_OFFSET = 0x8E5C - FRAGMENT_INTERPOLATION_OFFSET_BITS = 0x8E5D - MIN_PROGRAM_TEXTURE_GATHER_OFFSET = 0x8E5E - MAX_PROGRAM_TEXTURE_GATHER_OFFSET = 0x8E5F - MAX_TRANSFORM_FEEDBACK_BUFFERS = 0x8E70 - MAX_VERTEX_STREAMS = 0x8E71 - PATCH_VERTICES = 0x8E72 - PATCH_DEFAULT_INNER_LEVEL = 0x8E73 - PATCH_DEFAULT_OUTER_LEVEL = 0x8E74 - TESS_CONTROL_OUTPUT_VERTICES = 0x8E75 - TESS_GEN_MODE = 0x8E76 - TESS_GEN_SPACING = 0x8E77 - TESS_GEN_VERTEX_ORDER = 0x8E78 - TESS_GEN_POINT_MODE = 0x8E79 - ISOLINES = 0x8E7A - FRACTIONAL_ODD = 0x8E7B - FRACTIONAL_EVEN = 0x8E7C - MAX_PATCH_VERTICES = 0x8E7D - MAX_TESS_GEN_LEVEL = 0x8E7E - MAX_TESS_CONTROL_UNIFORM_COMPONENTS = 0x8E7F - MAX_TESS_EVALUATION_UNIFORM_COMPONENTS = 0x8E80 - MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS = 0x8E81 - MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS = 0x8E82 - MAX_TESS_CONTROL_OUTPUT_COMPONENTS = 0x8E83 - MAX_TESS_PATCH_COMPONENTS = 0x8E84 - MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS = 0x8E85 - MAX_TESS_EVALUATION_OUTPUT_COMPONENTS = 0x8E86 - TESS_EVALUATION_SHADER = 0x8E87 - TESS_CONTROL_SHADER = 0x8E88 - MAX_TESS_CONTROL_UNIFORM_BLOCKS = 0x8E89 - MAX_TESS_EVALUATION_UNIFORM_BLOCKS = 0x8E8A - COMPRESSED_RGBA_BPTC_UNORM = 0x8E8C - COMPRESSED_SRGB_ALPHA_BPTC_UNORM = 0x8E8D - COMPRESSED_RGB_BPTC_SIGNED_FLOAT = 0x8E8E - COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT = 0x8E8F - COPY_READ_BUFFER = 0x8F36 - COPY_WRITE_BUFFER = 0x8F37 - MAX_IMAGE_UNITS = 0x8F38 - MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS = 0x8F39 - IMAGE_BINDING_NAME = 0x8F3A - IMAGE_BINDING_LEVEL = 0x8F3B - IMAGE_BINDING_LAYERED = 0x8F3C - IMAGE_BINDING_LAYER = 0x8F3D - IMAGE_BINDING_ACCESS = 0x8F3E - DRAW_INDIRECT_BUFFER = 0x8F3F - DRAW_INDIRECT_BUFFER_BINDING = 0x8F43 - DOUBLE_MAT2 = 0x8F46 - DOUBLE_MAT3 = 0x8F47 - DOUBLE_MAT4 = 0x8F48 - DOUBLE_MAT2x3 = 0x8F49 - DOUBLE_MAT2x4 = 0x8F4A - DOUBLE_MAT3x2 = 0x8F4B - DOUBLE_MAT3x4 = 0x8F4C - DOUBLE_MAT4x2 = 0x8F4D - DOUBLE_MAT4x3 = 0x8F4E - R8_SNORM = 0x8F94 - RG8_SNORM = 0x8F95 - RGB8_SNORM = 0x8F96 - RGBA8_SNORM = 0x8F97 - R16_SNORM = 0x8F98 - RG16_SNORM = 0x8F99 - RGB16_SNORM = 0x8F9A - RGBA16_SNORM = 0x8F9B - SIGNED_NORMALIZED = 0x8F9C - PRIMITIVE_RESTART = 0x8F9D - PRIMITIVE_RESTART_INDEX = 0x8F9E - DOUBLE_VEC2 = 0x8FFC - DOUBLE_VEC3 = 0x8FFD - DOUBLE_VEC4 = 0x8FFE - TEXTURE_CUBE_MAP_ARRAY = 0x9009 - TEXTURE_BINDING_CUBE_MAP_ARRAY = 0x900A - PROXY_TEXTURE_CUBE_MAP_ARRAY = 0x900B - SAMPLER_CUBE_MAP_ARRAY = 0x900C - SAMPLER_CUBE_MAP_ARRAY_SHADOW = 0x900D - INT_SAMPLER_CUBE_MAP_ARRAY = 0x900E - UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY = 0x900F - IMAGE_1D = 0x904C - IMAGE_2D = 0x904D - IMAGE_3D = 0x904E - IMAGE_2D_RECT = 0x904F - IMAGE_CUBE = 0x9050 - IMAGE_BUFFER = 0x9051 - IMAGE_1D_ARRAY = 0x9052 - IMAGE_2D_ARRAY = 0x9053 - IMAGE_CUBE_MAP_ARRAY = 0x9054 - IMAGE_2D_MULTISAMPLE = 0x9055 - IMAGE_2D_MULTISAMPLE_ARRAY = 0x9056 - INT_IMAGE_1D = 0x9057 - INT_IMAGE_2D = 0x9058 - INT_IMAGE_3D = 0x9059 - INT_IMAGE_2D_RECT = 0x905A - INT_IMAGE_CUBE = 0x905B - INT_IMAGE_BUFFER = 0x905C - INT_IMAGE_1D_ARRAY = 0x905D - INT_IMAGE_2D_ARRAY = 0x905E - INT_IMAGE_CUBE_MAP_ARRAY = 0x905F - INT_IMAGE_2D_MULTISAMPLE = 0x9060 - INT_IMAGE_2D_MULTISAMPLE_ARRAY = 0x9061 - UNSIGNED_INT_IMAGE_1D = 0x9062 - UNSIGNED_INT_IMAGE_2D = 0x9063 - UNSIGNED_INT_IMAGE_3D = 0x9064 - UNSIGNED_INT_IMAGE_2D_RECT = 0x9065 - UNSIGNED_INT_IMAGE_CUBE = 0x9066 - UNSIGNED_INT_IMAGE_BUFFER = 0x9067 - UNSIGNED_INT_IMAGE_1D_ARRAY = 0x9068 - UNSIGNED_INT_IMAGE_2D_ARRAY = 0x9069 - UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY = 0x906A - UNSIGNED_INT_IMAGE_2D_MULTISAMPLE = 0x906B - UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY = 0x906C - MAX_IMAGE_SAMPLES = 0x906D - IMAGE_BINDING_FORMAT = 0x906E - RGB10_A2UI = 0x906F - MIN_MAP_BUFFER_ALIGNMENT = 0x90BC - IMAGE_FORMAT_COMPATIBILITY_TYPE = 0x90C7 - IMAGE_FORMAT_COMPATIBILITY_BY_SIZE = 0x90C8 - IMAGE_FORMAT_COMPATIBILITY_BY_CLASS = 0x90C9 - MAX_VERTEX_IMAGE_UNIFORMS = 0x90CA - MAX_TESS_CONTROL_IMAGE_UNIFORMS = 0x90CB - MAX_TESS_EVALUATION_IMAGE_UNIFORMS = 0x90CC - MAX_GEOMETRY_IMAGE_UNIFORMS = 0x90CD - MAX_FRAGMENT_IMAGE_UNIFORMS = 0x90CE - MAX_COMBINED_IMAGE_UNIFORMS = 0x90CF - TEXTURE_2D_MULTISAMPLE = 0x9100 - PROXY_TEXTURE_2D_MULTISAMPLE = 0x9101 - TEXTURE_2D_MULTISAMPLE_ARRAY = 0x9102 - PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY = 0x9103 - TEXTURE_BINDING_2D_MULTISAMPLE = 0x9104 - TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY = 0x9105 - TEXTURE_SAMPLES = 0x9106 - TEXTURE_FIXED_SAMPLE_LOCATIONS = 0x9107 - SAMPLER_2D_MULTISAMPLE = 0x9108 - INT_SAMPLER_2D_MULTISAMPLE = 0x9109 - UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE = 0x910A - SAMPLER_2D_MULTISAMPLE_ARRAY = 0x910B - INT_SAMPLER_2D_MULTISAMPLE_ARRAY = 0x910C - UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY = 0x910D - MAX_COLOR_TEXTURE_SAMPLES = 0x910E - MAX_DEPTH_TEXTURE_SAMPLES = 0x910F - MAX_INTEGER_SAMPLES = 0x9110 - MAX_SERVER_WAIT_TIMEOUT = 0x9111 - OBJECT_TYPE = 0x9112 - SYNC_CONDITION = 0x9113 - SYNC_STATUS = 0x9114 - SYNC_FLAGS = 0x9115 - SYNC_FENCE = 0x9116 - SYNC_GPU_COMMANDS_COMPLETE = 0x9117 - UNSIGNALED = 0x9118 - SIGNALED = 0x9119 - ALREADY_SIGNALED = 0x911A - TIMEOUT_EXPIRED = 0x911B - CONDITION_SATISFIED = 0x911C - WAIT_FAILED = 0x911D - BUFFER_ACCESS_FLAGS = 0x911F - BUFFER_MAP_LENGTH = 0x9120 - BUFFER_MAP_OFFSET = 0x9121 - MAX_VERTEX_OUTPUT_COMPONENTS = 0x9122 - MAX_GEOMETRY_INPUT_COMPONENTS = 0x9123 - MAX_GEOMETRY_OUTPUT_COMPONENTS = 0x9124 - MAX_FRAGMENT_INPUT_COMPONENTS = 0x9125 - CONTEXT_PROFILE_MASK = 0x9126 - UNPACK_COMPRESSED_BLOCK_WIDTH = 0x9127 - UNPACK_COMPRESSED_BLOCK_HEIGHT = 0x9128 - UNPACK_COMPRESSED_BLOCK_DEPTH = 0x9129 - UNPACK_COMPRESSED_BLOCK_SIZE = 0x912A - PACK_COMPRESSED_BLOCK_WIDTH = 0x912B - PACK_COMPRESSED_BLOCK_HEIGHT = 0x912C - PACK_COMPRESSED_BLOCK_DEPTH = 0x912D - PACK_COMPRESSED_BLOCK_SIZE = 0x912E - TEXTURE_IMMUTABLE_FORMAT = 0x912F - ATOMIC_COUNTER_BUFFER = 0x92C0 - ATOMIC_COUNTER_BUFFER_BINDING = 0x92C1 - ATOMIC_COUNTER_BUFFER_START = 0x92C2 - ATOMIC_COUNTER_BUFFER_SIZE = 0x92C3 - ATOMIC_COUNTER_BUFFER_DATA_SIZE = 0x92C4 - ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS = 0x92C5 - ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES = 0x92C6 - ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER = 0x92C7 - ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER = 0x92C8 - ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER = 0x92C9 - ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER = 0x92CA - ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER = 0x92CB - MAX_VERTEX_ATOMIC_COUNTER_BUFFERS = 0x92CC - MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS = 0x92CD - MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS = 0x92CE - MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS = 0x92CF - MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS = 0x92D0 - MAX_COMBINED_ATOMIC_COUNTER_BUFFERS = 0x92D1 - MAX_VERTEX_ATOMIC_COUNTERS = 0x92D2 - MAX_TESS_CONTROL_ATOMIC_COUNTERS = 0x92D3 - MAX_TESS_EVALUATION_ATOMIC_COUNTERS = 0x92D4 - MAX_GEOMETRY_ATOMIC_COUNTERS = 0x92D5 - MAX_FRAGMENT_ATOMIC_COUNTERS = 0x92D6 - MAX_COMBINED_ATOMIC_COUNTERS = 0x92D7 - MAX_ATOMIC_COUNTER_BUFFER_SIZE = 0x92D8 - ACTIVE_ATOMIC_COUNTER_BUFFERS = 0x92D9 - UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX = 0x92DA - UNSIGNED_INT_ATOMIC_COUNTER = 0x92DB - MAX_ATOMIC_COUNTER_BUFFER_BINDINGS = 0x92DC - NUM_SAMPLE_COUNTS = 0x9380 -) - -// https://www.opengl.org/sdk/docs/man4/xhtml/glViewport.xml -func (gl *GL) Viewport(x, y, width, height int) { - C.gl4_2core_glViewport(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// DepthRange specifies the mapping of depth values from normalized device -// coordinates to window coordinates. -// -// Parameter nearVal specifies the mapping of the near clipping plane to window -// coordinates (defaults to 0), while farVal specifies the mapping of the far -// clipping plane to window coordinates (defaults to 1). -// -// After clipping and division by w, depth coordinates range from -1 to 1, -// corresponding to the near and far clipping planes. DepthRange specifies a -// linear mapping of the normalized depth coordinates in this range to window -// depth coordinates. Regardless of the actual depth buffer implementation, -// window coordinate depth values are treated as though they range from 0 through 1 -// (like color components). Thus, the values accepted by DepthRange are both -// clamped to this range before they are accepted. -// -// The default setting of (0, 1) maps the near plane to 0 and the far plane to 1. -// With this mapping, the depth buffer range is fully utilized. -// -// It is not necessary that nearVal be less than farVal. Reverse mappings such as -// nearVal 1, and farVal 0 are acceptable. -// -// GL.INVALID_OPERATION is generated if DepthRange is executed between the -// execution of Begin and the corresponding execution of End. -func (gl *GL) DepthRange(nearVal, farVal float64) { - C.gl4_2core_glDepthRange(gl.funcs, C.GLdouble(nearVal), C.GLdouble(farVal)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsEnabled.xml -func (gl *GL) IsEnabled(cap glbase.Enum) bool { - glresult := C.gl4_2core_glIsEnabled(gl.funcs, C.GLenum(cap)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexLevelParameteriv.xml -func (gl *GL) GetTexLevelParameteriv(target glbase.Enum, level int, pname glbase.Enum, params []int32) { - C.gl4_2core_glGetTexLevelParameteriv(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexLevelParameterfv.xml -func (gl *GL) GetTexLevelParameterfv(target glbase.Enum, level int, pname glbase.Enum, params []float32) { - C.gl4_2core_glGetTexLevelParameterfv(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexParameteriv.xml -func (gl *GL) GetTexParameteriv(target, pname glbase.Enum, params []int32) { - C.gl4_2core_glGetTexParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexParameterfv.xml -func (gl *GL) GetTexParameterfv(target, pname glbase.Enum, params []float32) { - C.gl4_2core_glGetTexParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexImage.xml -func (gl *GL) GetTexImage(target glbase.Enum, level int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_2core_glGetTexImage(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetIntegerv.xml -func (gl *GL) GetIntegerv(pname glbase.Enum, params []int32) { - C.gl4_2core_glGetIntegerv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetFloatv.xml -func (gl *GL) GetFloatv(pname glbase.Enum, params []float32) { - C.gl4_2core_glGetFloatv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetError.xml -func (gl *GL) GetError() glbase.Enum { - glresult := C.gl4_2core_glGetError(gl.funcs) - return glbase.Enum(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetDoublev.xml -func (gl *GL) GetDoublev(pname glbase.Enum, params []float64) { - C.gl4_2core_glGetDoublev(gl.funcs, C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetBooleanv.xml -func (gl *GL) GetBooleanv(pname glbase.Enum, params []bool) { - C.gl4_2core_glGetBooleanv(gl.funcs, C.GLenum(pname), (*C.GLboolean)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glReadPixels.xml -func (gl *GL) ReadPixels(x, y, width, height int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_2core_glReadPixels(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glReadBuffer.xml -func (gl *GL) ReadBuffer(mode glbase.Enum) { - C.gl4_2core_glReadBuffer(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPixelStorei.xml -func (gl *GL) PixelStorei(pname glbase.Enum, param int32) { - C.gl4_2core_glPixelStorei(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPixelStoref.xml -func (gl *GL) PixelStoref(pname glbase.Enum, param float32) { - C.gl4_2core_glPixelStoref(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDepthFunc.xml -func (gl *GL) DepthFunc(glfunc glbase.Enum) { - C.gl4_2core_glDepthFunc(gl.funcs, C.GLenum(glfunc)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glStencilOp.xml -func (gl *GL) StencilOp(fail, zfail, zpass glbase.Enum) { - C.gl4_2core_glStencilOp(gl.funcs, C.GLenum(fail), C.GLenum(zfail), C.GLenum(zpass)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glStencilFunc.xml -func (gl *GL) StencilFunc(glfunc glbase.Enum, ref int32, mask uint32) { - C.gl4_2core_glStencilFunc(gl.funcs, C.GLenum(glfunc), C.GLint(ref), C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLogicOp.xml -func (gl *GL) LogicOp(opcode glbase.Enum) { - C.gl4_2core_glLogicOp(gl.funcs, C.GLenum(opcode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendFunc.xml -func (gl *GL) BlendFunc(sfactor, dfactor glbase.Enum) { - C.gl4_2core_glBlendFunc(gl.funcs, C.GLenum(sfactor), C.GLenum(dfactor)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFlush.xml -func (gl *GL) Flush() { - C.gl4_2core_glFlush(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFinish.xml -func (gl *GL) Finish() { - C.gl4_2core_glFinish(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEnable.xml -func (gl *GL) Enable(cap glbase.Enum) { - C.gl4_2core_glEnable(gl.funcs, C.GLenum(cap)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDisable.xml -func (gl *GL) Disable(cap glbase.Enum) { - C.gl4_2core_glDisable(gl.funcs, C.GLenum(cap)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDepthMask.xml -func (gl *GL) DepthMask(flag bool) { - C.gl4_2core_glDepthMask(gl.funcs, *(*C.GLboolean)(unsafe.Pointer(&flag))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorMask.xml -func (gl *GL) ColorMask(red, green, blue, alpha bool) { - C.gl4_2core_glColorMask(gl.funcs, *(*C.GLboolean)(unsafe.Pointer(&red)), *(*C.GLboolean)(unsafe.Pointer(&green)), *(*C.GLboolean)(unsafe.Pointer(&blue)), *(*C.GLboolean)(unsafe.Pointer(&alpha))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glStencilMask.xml -func (gl *GL) StencilMask(mask uint32) { - C.gl4_2core_glStencilMask(gl.funcs, C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearDepth.xml -func (gl *GL) ClearDepth(depth float64) { - C.gl4_2core_glClearDepth(gl.funcs, C.GLdouble(depth)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearStencil.xml -func (gl *GL) ClearStencil(s int32) { - C.gl4_2core_glClearStencil(gl.funcs, C.GLint(s)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearColor.xml -func (gl *GL) ClearColor(red, green, blue, alpha float32) { - C.gl4_2core_glClearColor(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClear.xml -func (gl *GL) Clear(mask glbase.Bitfield) { - C.gl4_2core_glClear(gl.funcs, C.GLbitfield(mask)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawBuffer.xml -func (gl *GL) DrawBuffer(mode glbase.Enum) { - C.gl4_2core_glDrawBuffer(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexImage2D.xml -func (gl *GL) TexImage2D(target glbase.Enum, level int, internalFormat int32, width, height, border int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_2core_glTexImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLint(border), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexImage1D.xml -func (gl *GL) TexImage1D(target glbase.Enum, level int, internalFormat int32, width, border int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_2core_glTexImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(internalFormat), C.GLsizei(width), C.GLint(border), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexParameteriv.xml -func (gl *GL) TexParameteriv(target, pname glbase.Enum, params []int32) { - C.gl4_2core_glTexParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexParameteri.xml -func (gl *GL) TexParameteri(target, pname glbase.Enum, param int32) { - C.gl4_2core_glTexParameteri(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexParameterfv.xml -func (gl *GL) TexParameterfv(target, pname glbase.Enum, params []float32) { - C.gl4_2core_glTexParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexParameterf.xml -func (gl *GL) TexParameterf(target, pname glbase.Enum, param float32) { - C.gl4_2core_glTexParameterf(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glScissor.xml -func (gl *GL) Scissor(x, y, width, height int) { - C.gl4_2core_glScissor(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPolygonMode.xml -func (gl *GL) PolygonMode(face, mode glbase.Enum) { - C.gl4_2core_glPolygonMode(gl.funcs, C.GLenum(face), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPointSize.xml -func (gl *GL) PointSize(size float32) { - C.gl4_2core_glPointSize(gl.funcs, C.GLfloat(size)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLineWidth.xml -func (gl *GL) LineWidth(width float32) { - C.gl4_2core_glLineWidth(gl.funcs, C.GLfloat(width)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glHint.xml -func (gl *GL) Hint(target, mode glbase.Enum) { - C.gl4_2core_glHint(gl.funcs, C.GLenum(target), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFrontFace.xml -func (gl *GL) FrontFace(mode glbase.Enum) { - C.gl4_2core_glFrontFace(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCullFace.xml -func (gl *GL) CullFace(mode glbase.Enum) { - C.gl4_2core_glCullFace(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIndexubv.xml -func (gl *GL) Indexubv(c []uint8) { - C.gl4_2core_glIndexubv(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIndexub.xml -func (gl *GL) Indexub(c uint8) { - C.gl4_2core_glIndexub(gl.funcs, C.GLubyte(c)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsTexture.xml -func (gl *GL) IsTexture(texture glbase.Texture) bool { - glresult := C.gl4_2core_glIsTexture(gl.funcs, C.GLuint(texture)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// GenTextures returns n texture names in textures. There is no guarantee -// that the names form a contiguous set of integers; however, it is -// guaranteed that none of the returned names was in use immediately before -// the call to GenTextures. -// -// The generated textures have no dimensionality; they assume the -// dimensionality of the texture target to which they are first bound (see -// BindTexture). -// -// Texture names returned by a call to GenTextures are not returned by -// subsequent calls, unless they are first deleted with DeleteTextures. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// GenTextures is available in GL version 2.0 or greater. -func (gl *GL) GenTextures(n int) []glbase.Texture { - if n == 0 { - return nil - } - textures := make([]glbase.Texture, n) - C.gl4_2core_glGenTextures(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0]))) - return textures -} - -// DeleteTextures deletes the textures objects whose names are stored -// in the textures slice. After a texture is deleted, it has no contents or -// dimensionality, and its name is free for reuse (for example by -// GenTextures). If a texture that is currently bound is deleted, the binding -// reverts to 0 (the default texture). -// -// DeleteTextures silently ignores 0's and names that do not correspond to -// existing textures. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// DeleteTextures is available in GL version 2.0 or greater. -func (gl *GL) DeleteTextures(textures []glbase.Texture) { - n := len(textures) - if n == 0 { - return - } - C.gl4_2core_glDeleteTextures(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindTexture.xml -func (gl *GL) BindTexture(target glbase.Enum, texture glbase.Texture) { - C.gl4_2core_glBindTexture(gl.funcs, C.GLenum(target), C.GLuint(texture)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexSubImage2D.xml -func (gl *GL) TexSubImage2D(target glbase.Enum, level, xoffset, yoffset, width, height int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_2core_glTexSubImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexSubImage1D.xml -func (gl *GL) TexSubImage1D(target glbase.Enum, level, xoffset, width int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_2core_glTexSubImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLsizei(width), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyTexSubImage2D.xml -func (gl *GL) CopyTexSubImage2D(target glbase.Enum, level, xoffset, yoffset, x, y, width, height int) { - C.gl4_2core_glCopyTexSubImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyTexSubImage1D.xml -func (gl *GL) CopyTexSubImage1D(target glbase.Enum, level, xoffset, x, y, width int) { - C.gl4_2core_glCopyTexSubImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(x), C.GLint(y), C.GLsizei(width)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyTexImage2D.xml -func (gl *GL) CopyTexImage2D(target glbase.Enum, level int, internalFormat glbase.Enum, x, y, width, height, border int) { - C.gl4_2core_glCopyTexImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height), C.GLint(border)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyTexImage1D.xml -func (gl *GL) CopyTexImage1D(target glbase.Enum, level int, internalFormat glbase.Enum, x, y, width, border int) { - C.gl4_2core_glCopyTexImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLint(border)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPolygonOffset.xml -func (gl *GL) PolygonOffset(factor, units float32) { - C.gl4_2core_glPolygonOffset(gl.funcs, C.GLfloat(factor), C.GLfloat(units)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawElements.xml -func (gl *GL) DrawElements(mode glbase.Enum, count int, gltype glbase.Enum, indices interface{}) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl4_2core_glDrawElements(gl.funcs, C.GLenum(mode), C.GLsizei(count), C.GLenum(gltype), indices_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawArrays.xml -func (gl *GL) DrawArrays(mode glbase.Enum, first, count int) { - C.gl4_2core_glDrawArrays(gl.funcs, C.GLenum(mode), C.GLint(first), C.GLsizei(count)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyTexSubImage3D.xml -func (gl *GL) CopyTexSubImage3D(target glbase.Enum, level, xoffset, yoffset int, zoffset int32, x, y, width, height int) { - C.gl4_2core_glCopyTexSubImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(zoffset), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexSubImage3D.xml -func (gl *GL) TexSubImage3D(target glbase.Enum, level, xoffset, yoffset int, zoffset int32, width, height int, depth int32, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_2core_glTexSubImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(zoffset), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexImage3D.xml -func (gl *GL) TexImage3D(target glbase.Enum, level int, internalFormat int32, width, height int, depth int32, border int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_2core_glTexImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLint(border), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawRangeElements.xml -func (gl *GL) DrawRangeElements(mode glbase.Enum, start, end uint32, count int, gltype glbase.Enum, indices interface{}) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl4_2core_glDrawRangeElements(gl.funcs, C.GLenum(mode), C.GLuint(start), C.GLuint(end), C.GLsizei(count), C.GLenum(gltype), indices_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendEquation.xml -func (gl *GL) BlendEquation(mode glbase.Enum) { - C.gl4_2core_glBlendEquation(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendColor.xml -func (gl *GL) BlendColor(red, green, blue, alpha float32) { - C.gl4_2core_glBlendColor(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetCompressedTexImage.xml -func (gl *GL) GetCompressedTexImage(target glbase.Enum, level int, img interface{}) { - var img_ptr unsafe.Pointer - var img_v = reflect.ValueOf(img) - if img != nil && img_v.Kind() != reflect.Slice { - panic("parameter img must be a slice") - } - if img != nil { - img_ptr = unsafe.Pointer(img_v.Index(0).Addr().Pointer()) - } - C.gl4_2core_glGetCompressedTexImage(gl.funcs, C.GLenum(target), C.GLint(level), img_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCompressedTexSubImage1D.xml -func (gl *GL) CompressedTexSubImage1D(target glbase.Enum, level, xoffset, width int, format glbase.Enum, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_2core_glCompressedTexSubImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLsizei(width), C.GLenum(format), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCompressedTexSubImage2D.xml -func (gl *GL) CompressedTexSubImage2D(target glbase.Enum, level, xoffset, yoffset, width, height int, format glbase.Enum, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_2core_glCompressedTexSubImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCompressedTexSubImage3D.xml -func (gl *GL) CompressedTexSubImage3D(target glbase.Enum, level, xoffset, yoffset int, zoffset int32, width, height int, depth int32, format glbase.Enum, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_2core_glCompressedTexSubImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(zoffset), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLenum(format), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCompressedTexImage1D.xml -func (gl *GL) CompressedTexImage1D(target glbase.Enum, level int, internalFormat glbase.Enum, width, border, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_2core_glCompressedTexImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLsizei(width), C.GLint(border), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCompressedTexImage2D.xml -func (gl *GL) CompressedTexImage2D(target glbase.Enum, level int, internalFormat glbase.Enum, width, height, border, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_2core_glCompressedTexImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLint(border), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCompressedTexImage3D.xml -func (gl *GL) CompressedTexImage3D(target glbase.Enum, level int, internalFormat glbase.Enum, width, height int, depth int32, border, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_2core_glCompressedTexImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLint(border), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSampleCoverage.xml -func (gl *GL) SampleCoverage(value float32, invert bool) { - C.gl4_2core_glSampleCoverage(gl.funcs, C.GLfloat(value), *(*C.GLboolean)(unsafe.Pointer(&invert))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glActiveTexture.xml -func (gl *GL) ActiveTexture(texture glbase.Enum) { - C.gl4_2core_glActiveTexture(gl.funcs, C.GLenum(texture)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPointParameteriv.xml -func (gl *GL) PointParameteriv(pname glbase.Enum, params []int32) { - C.gl4_2core_glPointParameteriv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPointParameteri.xml -func (gl *GL) PointParameteri(pname glbase.Enum, param int32) { - C.gl4_2core_glPointParameteri(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPointParameterfv.xml -func (gl *GL) PointParameterfv(pname glbase.Enum, params []float32) { - C.gl4_2core_glPointParameterfv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPointParameterf.xml -func (gl *GL) PointParameterf(pname glbase.Enum, param float32) { - C.gl4_2core_glPointParameterf(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiDrawArrays.xml -func (gl *GL) MultiDrawArrays(mode glbase.Enum, first, count []int, drawcount int32) { - C.gl4_2core_glMultiDrawArrays(gl.funcs, C.GLenum(mode), (*C.GLint)(unsafe.Pointer(&first[0])), (*C.GLsizei)(unsafe.Pointer(&count[0])), C.GLsizei(drawcount)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendFuncSeparate.xml -func (gl *GL) BlendFuncSeparate(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha glbase.Enum) { - C.gl4_2core_glBlendFuncSeparate(gl.funcs, C.GLenum(sfactorRGB), C.GLenum(dfactorRGB), C.GLenum(sfactorAlpha), C.GLenum(dfactorAlpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetBufferParameteriv.xml -func (gl *GL) GetBufferParameteriv(target, pname glbase.Enum, params []int32) { - C.gl4_2core_glGetBufferParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUnmapBuffer.xml -func (gl *GL) UnmapBuffer(target glbase.Enum) bool { - glresult := C.gl4_2core_glUnmapBuffer(gl.funcs, C.GLenum(target)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetBufferSubData.xml -func (gl *GL) GetBufferSubData(target glbase.Enum, offset, size int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_2core_glGetBufferSubData(gl.funcs, C.GLenum(target), C.GLintptr(offset), C.GLsizeiptr(size), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBufferSubData.xml -func (gl *GL) BufferSubData(target glbase.Enum, offset, size int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_2core_glBufferSubData(gl.funcs, C.GLenum(target), C.GLintptr(offset), C.GLsizeiptr(size), data_ptr) -} - -// BufferData creates a new data store for the buffer object currently -// bound to target. Any pre-existing data store is deleted. The new data -// store is created with the specified size in bytes and usage. If data is -// not nil, it must be a slice that is used to initialize the data store. -// In that case the size parameter is ignored and the store size will match -// the slice data size. -// -// In its initial state, the new data store is not mapped, it has a NULL -// mapped pointer, and its mapped access is GL.READ_WRITE. -// -// The target constant must be one of GL.ARRAY_BUFFER, GL.COPY_READ_BUFFER, -// GL.COPY_WRITE_BUFFER, GL.ELEMENT_ARRAY_BUFFER, GL.PIXEL_PACK_BUFFER, -// GL.PIXEL_UNPACK_BUFFER, GL.TEXTURE_BUFFER, GL.TRANSFORM_FEEDBACK_BUFFER, -// or GL.UNIFORM_BUFFER. -// -// The usage parameter is a hint to the GL implementation as to how a buffer -// object's data store will be accessed. This enables the GL implementation -// to make more intelligent decisions that may significantly impact buffer -// object performance. It does not, however, constrain the actual usage of -// the data store. usage can be broken down into two parts: first, the -// frequency of access (modification and usage), and second, the nature of -// that access. -// -// A usage frequency of STREAM and nature of DRAW is specified via the -// constant GL.STREAM_DRAW, for example. -// -// The usage frequency of access may be one of: -// -// STREAM -// The data store contents will be modified once and used at most a few times. -// -// STATIC -// The data store contents will be modified once and used many times. -// -// DYNAMIC -// The data store contents will be modified repeatedly and used many times. -// -// The usage nature of access may be one of: -// -// DRAW -// The data store contents are modified by the application, and used as -// the source for GL drawing and image specification commands. -// -// READ -// The data store contents are modified by reading data from the GL, -// and used to return that data when queried by the application. -// -// COPY -// The data store contents are modified by reading data from the GL, -// and used as the source for GL drawing and image specification -// commands. -// -// Clients must align data elements consistent with the requirements of the -// client platform, with an additional base-level requirement that an offset -// within a buffer to a datum comprising N bytes be a multiple of N. -// -// Error GL.INVALID_ENUM is generated if target is not one of the accepted -// buffer targets. GL.INVALID_ENUM is generated if usage is not -// GL.STREAM_DRAW, GL.STREAM_READ, GL.STREAM_COPY, GL.STATIC_DRAW, -// GL.STATIC_READ, GL.STATIC_COPY, GL.DYNAMIC_DRAW, GL.DYNAMIC_READ, or -// GL.DYNAMIC_COPY. GL.INVALID_VALUE is generated if size is negative. -// GL.INVALID_OPERATION is generated if the reserved buffer object name 0 is -// bound to target. GL.OUT_OF_MEMORY is generated if the GL is unable to -// create a data store with the specified size. -func (gl *GL) BufferData(target glbase.Enum, size int, data interface{}, usage glbase.Enum) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - if data != nil { - size = int(data_v.Type().Size()) * data_v.Len() - } - C.gl4_2core_glBufferData(gl.funcs, C.GLenum(target), C.GLsizeiptr(size), data_ptr, C.GLenum(usage)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsBuffer.xml -func (gl *GL) IsBuffer(buffer glbase.Buffer) bool { - glresult := C.gl4_2core_glIsBuffer(gl.funcs, C.GLuint(buffer)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// GenBuffers returns n buffer object names. There is no guarantee that -// the names form a contiguous set of integers; however, it is guaranteed -// that none of the returned names was in use immediately before the call to -// GenBuffers. -// -// Buffer object names returned by a call to GenBuffers are not returned by -// subsequent calls, unless they are first deleted with DeleteBuffers. -// -// No buffer objects are associated with the returned buffer object names -// until they are first bound by calling BindBuffer. -// -// Error GL.INVALID_VALUE is generated if n is negative. GL.INVALID_OPERATION -// is generated if GenBuffers is executed between the execution of Begin -// and the corresponding execution of End. -// -// GenBuffers is available in GL version 1.5 or greater. -func (gl *GL) GenBuffers(n int) []glbase.Buffer { - if n == 0 { - return nil - } - buffers := make([]glbase.Buffer, n) - C.gl4_2core_glGenBuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&buffers[0]))) - return buffers -} - -// DeleteBuffers deletes the buffer objects whose names are stored in the -// buffers slice. -// -// After a buffer object is deleted, it has no contents, and its name is free -// for reuse (for example by GenBuffers). If a buffer object that is -// currently bound is deleted, the binding reverts to 0 (the absence of any -// buffer object, which reverts to client memory usage). -// -// DeleteBuffers silently ignores 0's and names that do not correspond to -// existing buffer objects. -// -// Error GL.INVALID_VALUE is generated if n is negative. GL.INVALID_OPERATION -// is generated if DeleteBuffers is executed between the execution of Begin -// and the corresponding execution of End. -// -// DeleteBuffers is available in GL version 1.5 or greater. -func (gl *GL) DeleteBuffers(buffers []glbase.Buffer) { - n := len(buffers) - if n == 0 { - return - } - C.gl4_2core_glDeleteBuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&buffers[0]))) -} - -// BindBuffer creates or puts in use a named buffer object. -// Calling BindBuffer with target set to GL.ARRAY_BUFFER, -// GL.ELEMENT_ARRAY_BUFFER, GL.PIXEL_PACK_BUFFER or GL.PIXEL_UNPACK_BUFFER -// and buffer set to the name of the new buffer object binds the buffer -// object name to the target. When a buffer object is bound to a target, the -// previous binding for that target is automatically broken. -// -// Buffer object names are unsigned integers. The value zero is reserved, but -// there is no default buffer object for each buffer object target. Instead, -// buffer set to zero effectively unbinds any buffer object previously bound, -// and restores client memory usage for that buffer object target. Buffer -// object names and the corresponding buffer object contents are local to the -// shared display-list space (see XCreateContext) of the current GL rendering -// context; two rendering contexts share buffer object names only if they -// also share display lists. -// -// GenBuffers may be called to generate a set of new buffer object names. -// -// The state of a buffer object immediately after it is first bound is an -// unmapped zero-sized memory buffer with GL.READ_WRITE access and -// GL.STATIC_DRAW usage. -// -// While a non-zero buffer object name is bound, GL operations on the target -// to which it is bound affect the bound buffer object, and queries of the -// target to which it is bound return state from the bound buffer object. -// While buffer object name zero is bound, as in the initial state, attempts -// to modify or query state on the target to which it is bound generates an -// GL.INVALID_OPERATION error. -// -// When vertex array pointer state is changed, for example by a call to -// NormalPointer, the current buffer object binding (GL.ARRAY_BUFFER_BINDING) -// is copied into the corresponding client state for the vertex array type -// being changed, for example GL.NORMAL_ARRAY_BUFFER_BINDING. While a -// non-zero buffer object is bound to the GL.ARRAY_BUFFER target, the vertex -// array pointer parameter that is traditionally interpreted as a pointer to -// client-side memory is instead interpreted as an offset within the buffer -// object measured in basic machine units. -// -// While a non-zero buffer object is bound to the GL.ELEMENT_ARRAY_BUFFER -// target, the indices parameter of DrawElements, DrawRangeElements, or -// MultiDrawElements that is traditionally interpreted as a pointer to -// client-side memory is instead interpreted as an offset within the buffer -// object measured in basic machine units. -// -// While a non-zero buffer object is bound to the GL.PIXEL_PACK_BUFFER -// target, the following commands are affected: GetCompressedTexImage, -// GetConvolutionFilter, GetHistogram, GetMinmax, GetPixelMap, -// GetPolygonStipple, GetSeparableFilter, GetTexImage, and ReadPixels. The -// pointer parameter that is traditionally interpreted as a pointer to -// client-side memory where the pixels are to be packed is instead -// interpreted as an offset within the buffer object measured in basic -// machine units. -// -// While a non-zero buffer object is bound to the GL.PIXEL_UNPACK_BUFFER -// target, the following commands are affected: Bitmap, ColorSubTable, -// ColorTable, CompressedTexImage1D, CompressedTexImage2D, -// CompressedTexImage3D, CompressedTexSubImage1D, CompressedTexSubImage2D, -// CompressedTexSubImage3D, ConvolutionFilter1D, ConvolutionFilter2D, -// DrawPixels, PixelMap, PolygonStipple, SeparableFilter2D, TexImage1D, -// TexImage2D, TexImage3D, TexSubImage1D, TexSubImage2D, and TexSubImage3D. -// The pointer parameter that is traditionally interpreted as a pointer to -// client-side memory from which the pixels are to be unpacked is instead -// interpreted as an offset within the buffer object measured in basic -// machine units. -// -// A buffer object binding created with BindBuffer remains active until a -// different buffer object name is bound to the same target, or until the -// bound buffer object is deleted with DeleteBuffers. -// -// Once created, a named buffer object may be re-bound to any target as often -// as needed. However, the GL implementation may make choices about how to -// optimize the storage of a buffer object based on its initial binding -// target. -// -// Error GL.INVALID_ENUM is generated if target is not one of the allowable -// values. GL.INVALID_OPERATION is generated if BindBuffer is executed -// between the execution of Begin and the corresponding execution of End. -// -// BindBuffer is available in GL version 1.5 or greater. -func (gl *GL) BindBuffer(target glbase.Enum, buffer glbase.Buffer) { - C.gl4_2core_glBindBuffer(gl.funcs, C.GLenum(target), C.GLuint(buffer)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetQueryObjectuiv.xml -func (gl *GL) GetQueryObjectuiv(id uint32, pname glbase.Enum, params []uint32) { - C.gl4_2core_glGetQueryObjectuiv(gl.funcs, C.GLuint(id), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetQueryObjectiv.xml -func (gl *GL) GetQueryObjectiv(id uint32, pname glbase.Enum, params []int32) { - C.gl4_2core_glGetQueryObjectiv(gl.funcs, C.GLuint(id), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetQueryiv.xml -func (gl *GL) GetQueryiv(target, pname glbase.Enum, params []int32) { - C.gl4_2core_glGetQueryiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEndQuery.xml -func (gl *GL) EndQuery(target glbase.Enum) { - C.gl4_2core_glEndQuery(gl.funcs, C.GLenum(target)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBeginQuery.xml -func (gl *GL) BeginQuery(target glbase.Enum, id uint32) { - C.gl4_2core_glBeginQuery(gl.funcs, C.GLenum(target), C.GLuint(id)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsQuery.xml -func (gl *GL) IsQuery(id uint32) bool { - glresult := C.gl4_2core_glIsQuery(gl.funcs, C.GLuint(id)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDeleteQueries.xml -func (gl *GL) DeleteQueries(n int, ids []uint32) { - C.gl4_2core_glDeleteQueries(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&ids[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGenQueries.xml -func (gl *GL) GenQueries(n int, ids []uint32) { - C.gl4_2core_glGenQueries(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&ids[0]))) -} - -// VertexAttribPointer specifies the location and data format of the array -// of generic vertex attributes at index to use when rendering. size -// specifies the number of components per attribute and must be 1, 2, 3, or -// 4. type specifies the data type of each component, and stride specifies -// the byte stride from one attribute to the next, allowing vertices and -// attributes to be packed into a single array or stored in separate arrays. -// normalized indicates whether the values stored in an integer format are -// to be mapped to the range [-1,1] (for signed values) or [0,1] -// (for unsigned values) when they are accessed and converted to floating -// point; otherwise, values will be converted to floats directly without -// normalization. offset is a byte offset into the buffer object's data -// store, which must be bound to the GL.ARRAY_BUFFER target with BindBuffer. -// -// The buffer object binding (GL.ARRAY_BUFFER_BINDING) is saved as -// generic vertex attribute array client-side state -// (GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING) for the provided index. -// -// To enable and disable a generic vertex attribute array, call -// EnableVertexAttribArray and DisableVertexAttribArray with index. If -// enabled, the generic vertex attribute array is used when DrawArrays or -// DrawElements is called. Each generic vertex attribute array is initially -// disabled. -// -// VertexAttribPointer is typically implemented on the client side. -// -// Error GL.INVALID_ENUM is generated if type is not an accepted value. -// GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. GL.INVALID_VALUE is generated if size is not 1, 2, -// 3, or 4. GL.INVALID_VALUE is generated if stride is negative. -func (gl *GL) VertexAttribPointer(index glbase.Attrib, size int, gltype glbase.Enum, normalized bool, stride int, offset uintptr) { - offset_ptr := unsafe.Pointer(offset) - C.gl4_2core_glVertexAttribPointer(gl.funcs, C.GLuint(index), C.GLint(size), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), C.GLsizei(stride), offset_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glValidateProgram.xml -func (gl *GL) ValidateProgram(program glbase.Program) { - C.gl4_2core_glValidateProgram(gl.funcs, C.GLuint(program)) -} - -// UniformMatrix4fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix4fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix4fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(4*4) != 0 { - panic("invalid value length for UniformMatrix4fv") - } - count := len(value) / (4 * 4) - C.gl4_2core_glUniformMatrix4fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix3fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix3fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix3fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(3*3) != 0 { - panic("invalid value length for UniformMatrix3fv") - } - count := len(value) / (3 * 3) - C.gl4_2core_glUniformMatrix3fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix2fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix2fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix2fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(2*2) != 0 { - panic("invalid value length for UniformMatrix2fv") - } - count := len(value) / (2 * 2) - C.gl4_2core_glUniformMatrix2fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform4iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform4iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - if len(value)%4 != 0 { - panic("invalid value length for Uniform4iv") - } - count := len(value) / 4 - C.gl4_2core_glUniform4iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// Uniform3iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform3iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - if len(value)%3 != 0 { - panic("invalid value length for Uniform3iv") - } - count := len(value) / 3 - C.gl4_2core_glUniform3iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// Uniform2iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform2iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - if len(value)%2 != 0 { - panic("invalid value length for Uniform2iv") - } - count := len(value) / 2 - C.gl4_2core_glUniform2iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// Uniform1iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform1iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - count := len(value) - C.gl4_2core_glUniform1iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// Uniform4fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform4fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - if len(value)%4 != 0 { - panic("invalid value length for Uniform4fv") - } - count := len(value) / 4 - C.gl4_2core_glUniform4fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform3fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform3fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - if len(value)%3 != 0 { - panic("invalid value length for Uniform3fv") - } - count := len(value) / 3 - C.gl4_2core_glUniform3fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform2fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform2fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - if len(value)%2 != 0 { - panic("invalid value length for Uniform2fv") - } - count := len(value) / 2 - C.gl4_2core_glUniform2fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform1fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform1fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - count := len(value) - C.gl4_2core_glUniform1fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform4i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform4i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4i(location glbase.Uniform, v0, v1, v2, v3 int32) { - C.gl4_2core_glUniform4i(gl.funcs, C.GLint(location), C.GLint(v0), C.GLint(v1), C.GLint(v2), C.GLint(v3)) -} - -// Uniform3i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform3i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3i(location glbase.Uniform, v0, v1, v2 int32) { - C.gl4_2core_glUniform3i(gl.funcs, C.GLint(location), C.GLint(v0), C.GLint(v1), C.GLint(v2)) -} - -// Uniform2i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform2i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2i(location glbase.Uniform, v0, v1 int32) { - C.gl4_2core_glUniform2i(gl.funcs, C.GLint(location), C.GLint(v0), C.GLint(v1)) -} - -// Uniform1i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform1i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1i(location glbase.Uniform, v0 int32) { - C.gl4_2core_glUniform1i(gl.funcs, C.GLint(location), C.GLint(v0)) -} - -// Uniform4f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform4f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4f(location glbase.Uniform, v0, v1, v2, v3 float32) { - C.gl4_2core_glUniform4f(gl.funcs, C.GLint(location), C.GLfloat(v0), C.GLfloat(v1), C.GLfloat(v2), C.GLfloat(v3)) -} - -// Uniform3f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform3f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3f(location glbase.Uniform, v0, v1, v2 float32) { - C.gl4_2core_glUniform3f(gl.funcs, C.GLint(location), C.GLfloat(v0), C.GLfloat(v1), C.GLfloat(v2)) -} - -// Uniform2f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform2f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2f(location glbase.Uniform, v0, v1 float32) { - C.gl4_2core_glUniform2f(gl.funcs, C.GLint(location), C.GLfloat(v0), C.GLfloat(v1)) -} - -// Uniform1f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform1f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1f(location glbase.Uniform, v0 float32) { - C.gl4_2core_glUniform1f(gl.funcs, C.GLint(location), C.GLfloat(v0)) -} - -// UseProgram installs the program object specified by program as part of -// current rendering state. One or more executables are created in a program -// object by successfully attaching shader objects to it with AttachShader, -// successfully compiling the shader objects with CompileShader, and -// successfully linking the program object with LinkProgram. -// -// A program object will contain an executable that will run on the vertex -// processor if it contains one or more shader objects of type -// GL.VERTEX_SHADER that have been successfully compiled and linked. -// Similarly, a program object will contain an executable that will run on -// the fragment processor if it contains one or more shader objects of type -// GL.FRAGMENT_SHADER that have been successfully compiled and linked. -// -// Successfully installing an executable on a programmable processor will -// cause the corresponding fixed functionality of OpenGL to be disabled. -// Specifically, if an executable is installed on the vertex processor, the -// OpenGL fixed functionality will be disabled as follows. -// -// - The modelview matrix is not applied to vertex coordinates. -// -// - The projection matrix is not applied to vertex coordinates. -// -// - The texture matrices are not applied to texture coordinates. -// -// - Normals are not transformed to eye coordinates. -// -// - Normals are not rescaled or normalized. -// -// - Normalization of GL.AUTO_NORMAL evaluated normals is not performed. -// -// - Texture coordinates are not generated automatically. -// -// - Per-vertex lighting is not performed. -// -// - Color material computations are not performed. -// -// - Color index lighting is not performed. -// -// - This list also applies when setting the current raster position. -// -// The executable that is installed on the vertex processor is expected to -// implement any or all of the desired functionality from the preceding list. -// Similarly, if an executable is installed on the fragment processor, the -// OpenGL fixed functionality will be disabled as follows. -// -// - Texture environment and texture functions are not applied. -// -// - Texture application is not applied. -// -// - Color sum is not applied. -// -// - Fog is not applied. -// -// Again, the fragment shader that is installed is expected to implement any -// or all of the desired functionality from the preceding list. -// -// While a program object is in use, applications are free to modify attached -// shader objects, compile attached shader objects, attach additional shader -// objects, and detach or delete shader objects. None of these operations -// will affect the executables that are part of the current state. However, -// relinking the program object that is currently in use will install the -// program object as part of the current rendering state if the link -// operation was successful (see LinkProgram). If the program object -// currently in use is relinked unsuccessfully, its link status will be set -// to GL.FALSE, but the executables and associated state will remain part of -// the current state until a subsequent call to UseProgram removes it from -// use. After it is removed from use, it cannot be made part of current state -// until it has been successfully relinked. -// -// If program contains shader objects of type GL.VERTEX_SHADER but it does -// not contain shader objects of type GL.FRAGMENT_SHADER, an executable will -// be installed on the vertex processor, but fixed functionality will be used -// for fragment processing. Similarly, if program contains shader objects of -// type GL.FRAGMENT_SHADER but it does not contain shader objects of type -// GL.VERTEX_SHADER, an executable will be installed on the fragment -// processor, but fixed functionality will be used for vertex processing. If -// program is 0, the programmable processors will be disabled, and fixed -// functionality will be used for both vertex and fragment processing. -// -// While a program object is in use, the state that controls the disabled -// fixed functionality may also be updated using the normal OpenGL calls. -// -// Like display lists and texture objects, the name space for program objects -// may be shared across a set of contexts, as long as the server sides of the -// contexts share the same address space. If the name space is shared across -// contexts, any attached objects and the data associated with those attached -// objects are shared as well. -// -// Applications are responsible for providing the synchronization across API -// calls when objects are accessed from different execution threads. -// -// Error GL.INVALID_VALUE is generated if program is neither 0 nor a value -// generated by OpenGL. GL.INVALID_OPERATION is generated if program is not -// a program object. GL.INVALID_OPERATION is generated if program could not -// be made part of current state. GL.INVALID_OPERATION is generated if -// UseProgram is executed between the execution of Begin and the -// corresponding execution of End. -// -// UseProgram is available in GL version 2.0 or greater. -func (gl *GL) UseProgram(program glbase.Program) { - C.gl4_2core_glUseProgram(gl.funcs, C.GLuint(program)) -} - -// ShaderSource sets the source code in shader to the provided source code. Any source -// code previously stored in the shader object is completely replaced. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader is not a shader -// object. GL.INVALID_VALUE is generated if count is less than 0. -// GL.INVALID_OPERATION is generated if ShaderSource is executed between the -// execution of Begin and the corresponding execution of End. -// -// ShaderSource is available in GL version 2.0 or greater. -func (gl *GL) ShaderSource(shader glbase.Shader, source ...string) { - count := len(source) - length := make([]int32, count) - source_c := make([]unsafe.Pointer, count) - for i, src := range source { - length[i] = int32(len(src)) - if len(src) > 0 { - source_c[i] = *(*unsafe.Pointer)(unsafe.Pointer(&src)) - } else { - source_c[i] = unsafe.Pointer(uintptr(0)) - } - } - C.gl4_2core_glShaderSource(gl.funcs, C.GLuint(shader), C.GLsizei(count), (**C.GLchar)(unsafe.Pointer(&source_c[0])), (*C.GLint)(unsafe.Pointer(&length[0]))) -} - -// LinkProgram links the program object specified by program. If any shader -// objects of type GL.VERTEX_SHADER are attached to program, they will be -// used to create an executable that will run on the programmable vertex -// processor. If any shader objects of type GL.FRAGMENT_SHADER are attached -// to program, they will be used to create an executable that will run on the -// programmable fragment processor. -// -// The status of the link operation will be stored as part of the program -// object's state. This value will be set to GL.TRUE if the program object -// was linked without errors and is ready for use, and GL.FALSE otherwise. It -// can be queried by calling GetProgramiv with arguments program and -// GL.LINK_STATUS. -// -// As a result of a successful link operation, all active user-defined -// uniform variables belonging to program will be initialized to 0, and each -// of the program object's active uniform variables will be assigned a -// location that can be queried by calling GetUniformLocation. Also, any -// active user-defined attribute variables that have not been bound to a -// generic vertex attribute index will be bound to one at this time. -// -// Linking of a program object can fail for a number of reasons as specified -// in the OpenGL Shading Language Specification. The following lists some of -// the conditions that will cause a link error. -// -// - The number of active attribute variables supported by the -// implementation has been exceeded. -// -// - The storage limit for uniform variables has been exceeded. -// -// - The number of active uniform variables supported by the implementation -// has been exceeded. -// -// - The main function is missing for the vertex shader or the fragment -// shader. -// -// - A varying variable actually used in the fragment shader is not -// declared in the same way (or is not declared at all) in the vertex -// shader. -// -// - A reference to a function or variable name is unresolved. -// -// - A shared global is declared with two different types or two different -// initial values. -// -// - One or more of the attached shader objects has not been successfully -// compiled. -// -// - Binding a generic attribute matrix caused some rows of the matrix to -// fall outside the allowed maximum of GL.MAX_VERTEX_ATTRIBS. -// -// - Not enough contiguous vertex attribute slots could be found to bind -// attribute matrices. -// -// When a program object has been successfully linked, the program object can -// be made part of current state by calling UseProgram. Whether or not the -// link operation was successful, the program object's information log will -// be overwritten. The information log can be retrieved by calling -// GetProgramInfoLog. -// -// LinkProgram will also install the generated executables as part of the -// current rendering state if the link operation was successful and the -// specified program object is already currently in use as a result of a -// previous call to UseProgram. If the program object currently in use is -// relinked unsuccessfully, its link status will be set to GL.FALSE , but the -// executables and associated state will remain part of the current state -// until a subsequent call to UseProgram removes it from use. After it is -// removed from use, it cannot be made part of current state until it has -// been successfully relinked. -// -// If program contains shader objects of type GL.VERTEX_SHADER but does not -// contain shader objects of type GL.FRAGMENT_SHADER, the vertex shader will -// be linked against the implicit interface for fixed functionality fragment -// processing. Similarly, if program contains shader objects of type -// GL.FRAGMENT_SHADER but it does not contain shader objects of type -// GL.VERTEX_SHADER, the fragment shader will be linked against the implicit -// interface for fixed functionality vertex processing. -// -// The program object's information log is updated and the program is -// generated at the time of the link operation. After the link operation, -// applications are free to modify attached shader objects, compile attached -// shader objects, detach shader objects, delete shader objects, and attach -// additional shader objects. None of these operations affects the -// information log or the program that is part of the program object. -// -// If the link operation is unsuccessful, any information about a previous -// link operation on program is lost (a failed link does not restore the -// old state of program). Certain information can still be retrieved -// from program even after an unsuccessful link operation. See for instance -// GetActiveAttrib and GetActiveUniform. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program -// object. GL.INVALID_OPERATION is generated if LinkProgram is executed -// between the execution of Begin and the corresponding execution of End. -// -// LinkProgram is available in GL version 2.0 or greater. -func (gl *GL) LinkProgram(program glbase.Program) { - C.gl4_2core_glLinkProgram(gl.funcs, C.GLuint(program)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsShader.xml -func (gl *GL) IsShader(shader glbase.Shader) bool { - glresult := C.gl4_2core_glIsShader(gl.funcs, C.GLuint(shader)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsProgram.xml -func (gl *GL) IsProgram(program glbase.Program) bool { - glresult := C.gl4_2core_glIsProgram(gl.funcs, C.GLuint(program)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// GetVertexAttribiv returns in params the value of a generic vertex attribute -// parameter. The generic vertex attribute to be queried is specified by -// index, and the parameter to be queried is specified by pname. -// -// The accepted parameter names are as follows: -// -// GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING -// params returns a single value, the name of the buffer object -// currently bound to the binding point corresponding to generic vertex -// attribute array index. If no buffer object is bound, 0 is returned. -// The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_ENABLED -// params returns a single value that is non-zero (true) if the vertex -// attribute array for index is enabled and 0 (false) if it is -// disabled. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_SIZE -// params returns a single value, the size of the vertex attribute -// array for index. The size is the number of values for each element -// of the vertex attribute array, and it will be 1, 2, 3, or 4. The -// initial value is 4. -// -// GL.VERTEX_ATTRIB_ARRAY_STRIDE -// params returns a single value, the array stride for (number of bytes -// between successive elements in) the vertex attribute array for -// index. A value of 0 indicates that the array elements are stored -// sequentially in memory. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_TYPE -// params returns a single value, a symbolic constant indicating the -// array type for the vertex attribute array for index. Possible values -// are GL.BYTE, GL.UNSIGNED_BYTE, GL.SHORT, GL.UNSIGNED_SHORT, GL.INT, -// GL.UNSIGNED_INT, GL.FLOAT, and GL.DOUBLE. The initial value is -// GL.FLOAT. -// -// GL.VERTEX_ATTRIB_ARRAY_NORMALIZED -// params returns a single value that is non-zero (true) if fixed-point -// data types for the vertex attribute array indicated by index are -// normalized when they are converted to floating point, and 0 (false) -// otherwise. The initial value is 0. -// -// GL.CURRENT_VERTEX_ATTRIB -// params returns four values that represent the current value for the -// generic vertex attribute specified by index. Generic vertex -// attribute 0 is unique in that it has no current state, so an error -// will be generated if index is 0. The initial value for all other -// generic vertex attributes is (0,0,0,1). -// -// All of the parameters except GL.CURRENT_VERTEX_ATTRIB represent -// client-side state. -// -// Error GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. GL.INVALID_ENUM is generated if pname is not an -// accepted value. GL.INVALID_OPERATION is generated if index is 0 and pname -// is GL.CURRENT_VERTEX_ATTRIB. -// -// GetVertexAttribiv is available in GL version 2.0 or greater. -func (gl *GL) GetVertexAttribiv(index glbase.Attrib, pname glbase.Enum, params []int32) { - var params_c [4]int32 - C.gl4_2core_glGetVertexAttribiv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetVertexAttribfv returns in params the value of a generic vertex attribute -// parameter. The generic vertex attribute to be queried is specified by -// index, and the parameter to be queried is specified by pname. -// -// The accepted parameter names are as follows: -// -// GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING -// params returns a single value, the name of the buffer object -// currently bound to the binding point corresponding to generic vertex -// attribute array index. If no buffer object is bound, 0 is returned. -// The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_ENABLED -// params returns a single value that is non-zero (true) if the vertex -// attribute array for index is enabled and 0 (false) if it is -// disabled. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_SIZE -// params returns a single value, the size of the vertex attribute -// array for index. The size is the number of values for each element -// of the vertex attribute array, and it will be 1, 2, 3, or 4. The -// initial value is 4. -// -// GL.VERTEX_ATTRIB_ARRAY_STRIDE -// params returns a single value, the array stride for (number of bytes -// between successive elements in) the vertex attribute array for -// index. A value of 0 indicates that the array elements are stored -// sequentially in memory. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_TYPE -// params returns a single value, a symbolic constant indicating the -// array type for the vertex attribute array for index. Possible values -// are GL.BYTE, GL.UNSIGNED_BYTE, GL.SHORT, GL.UNSIGNED_SHORT, GL.INT, -// GL.UNSIGNED_INT, GL.FLOAT, and GL.DOUBLE. The initial value is -// GL.FLOAT. -// -// GL.VERTEX_ATTRIB_ARRAY_NORMALIZED -// params returns a single value that is non-zero (true) if fixed-point -// data types for the vertex attribute array indicated by index are -// normalized when they are converted to floating point, and 0 (false) -// otherwise. The initial value is 0. -// -// GL.CURRENT_VERTEX_ATTRIB -// params returns four values that represent the current value for the -// generic vertex attribute specified by index. Generic vertex -// attribute 0 is unique in that it has no current state, so an error -// will be generated if index is 0. The initial value for all other -// generic vertex attributes is (0,0,0,1). -// -// All of the parameters except GL.CURRENT_VERTEX_ATTRIB represent -// client-side state. -// -// Error GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. GL.INVALID_ENUM is generated if pname is not an -// accepted value. GL.INVALID_OPERATION is generated if index is 0 and pname -// is GL.CURRENT_VERTEX_ATTRIB. -// -// GetVertexAttribfv is available in GL version 2.0 or greater. -func (gl *GL) GetVertexAttribfv(index glbase.Attrib, pname glbase.Enum, params []float32) { - var params_c [4]float32 - C.gl4_2core_glGetVertexAttribfv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetVertexAttribdv returns in params the value of a generic vertex attribute -// parameter. The generic vertex attribute to be queried is specified by -// index, and the parameter to be queried is specified by pname. -// -// The accepted parameter names are as follows: -// -// GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING -// params returns a single value, the name of the buffer object -// currently bound to the binding point corresponding to generic vertex -// attribute array index. If no buffer object is bound, 0 is returned. -// The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_ENABLED -// params returns a single value that is non-zero (true) if the vertex -// attribute array for index is enabled and 0 (false) if it is -// disabled. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_SIZE -// params returns a single value, the size of the vertex attribute -// array for index. The size is the number of values for each element -// of the vertex attribute array, and it will be 1, 2, 3, or 4. The -// initial value is 4. -// -// GL.VERTEX_ATTRIB_ARRAY_STRIDE -// params returns a single value, the array stride for (number of bytes -// between successive elements in) the vertex attribute array for -// index. A value of 0 indicates that the array elements are stored -// sequentially in memory. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_TYPE -// params returns a single value, a symbolic constant indicating the -// array type for the vertex attribute array for index. Possible values -// are GL.BYTE, GL.UNSIGNED_BYTE, GL.SHORT, GL.UNSIGNED_SHORT, GL.INT, -// GL.UNSIGNED_INT, GL.FLOAT, and GL.DOUBLE. The initial value is -// GL.FLOAT. -// -// GL.VERTEX_ATTRIB_ARRAY_NORMALIZED -// params returns a single value that is non-zero (true) if fixed-point -// data types for the vertex attribute array indicated by index are -// normalized when they are converted to floating point, and 0 (false) -// otherwise. The initial value is 0. -// -// GL.CURRENT_VERTEX_ATTRIB -// params returns four values that represent the current value for the -// generic vertex attribute specified by index. Generic vertex -// attribute 0 is unique in that it has no current state, so an error -// will be generated if index is 0. The initial value for all other -// generic vertex attributes is (0,0,0,1). -// -// All of the parameters except GL.CURRENT_VERTEX_ATTRIB represent -// client-side state. -// -// Error GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. GL.INVALID_ENUM is generated if pname is not an -// accepted value. GL.INVALID_OPERATION is generated if index is 0 and pname -// is GL.CURRENT_VERTEX_ATTRIB. -// -// GetVertexAttribdv is available in GL version 2.0 or greater. -func (gl *GL) GetVertexAttribdv(index glbase.Attrib, pname glbase.Enum, params []float64) { - var params_c [4]float64 - C.gl4_2core_glGetVertexAttribdv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetUniformiv returns in params the value of the specified uniform -// variable. The type of the uniform variable specified by location -// determines the number of values returned. If the uniform variable is -// defined in the shader as a boolean, int, or float, a single value will be -// returned. If it is defined as a vec2, ivec2, or bvec2, two values will be -// returned. If it is defined as a vec3, ivec3, or bvec3, three values will -// be returned, and so on. To query values stored in uniform variables -// declared as arrays, call GetUniformiv for each element of the array. To -// query values stored in uniform variables declared as structures, call -// GetUniformiv for each field in the structure. The values for uniform -// variables declared as a matrix will be returned in column major order. -// -// The locations assigned to uniform variables are not known until the -// program object is linked. After linking has occurred, the command -// GetUniformLocation can be used to obtain the location of a uniform -// variable. This location value can then be passed to GetUniformiv in order -// to query the current value of the uniform variable. After a program object -// has been linked successfully, the index values for uniform variables -// remain fixed until the next link command occurs. The uniform variable -// values can only be queried after a link if the link was successful. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program -// object. GL.INVALID_OPERATION is generated if program has not been -// successfully linked. GL.INVALID_OPERATION is generated if location does -// not correspond to a valid uniform variable location for the specified -// program object. GL.INVALID_OPERATION is generated if GetUniformiv is -// executed between the execution of Begin and the corresponding execution of -// End. -// -// GetUniformiv is available in GL version 2.0 or greater. -func (gl *GL) GetUniformiv(program glbase.Program, location glbase.Uniform, params []int32) { - var params_c [4]int32 - C.gl4_2core_glGetUniformiv(gl.funcs, C.GLuint(program), C.GLint(location), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetUniformfv returns in params the value of the specified uniform -// variable. The type of the uniform variable specified by location -// determines the number of values returned. If the uniform variable is -// defined in the shader as a boolean, int, or float, a single value will be -// returned. If it is defined as a vec2, ivec2, or bvec2, two values will be -// returned. If it is defined as a vec3, ivec3, or bvec3, three values will -// be returned, and so on. To query values stored in uniform variables -// declared as arrays, call GetUniformfv for each element of the array. To -// query values stored in uniform variables declared as structures, call -// GetUniformfv for each field in the structure. The values for uniform -// variables declared as a matrix will be returned in column major order. -// -// The locations assigned to uniform variables are not known until the -// program object is linked. After linking has occurred, the command -// GetUniformLocation can be used to obtain the location of a uniform -// variable. This location value can then be passed to GetUniformfv in order -// to query the current value of the uniform variable. After a program object -// has been linked successfully, the index values for uniform variables -// remain fixed until the next link command occurs. The uniform variable -// values can only be queried after a link if the link was successful. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program -// object. GL.INVALID_OPERATION is generated if program has not been -// successfully linked. GL.INVALID_OPERATION is generated if location does -// not correspond to a valid uniform variable location for the specified -// program object. GL.INVALID_OPERATION is generated if GetUniformfv is -// executed between the execution of Begin and the corresponding execution of -// End. -// -// GetUniformfv is available in GL version 2.0 or greater. -func (gl *GL) GetUniformfv(program glbase.Program, location glbase.Uniform, params []float32) { - var params_c [4]float32 - C.gl4_2core_glGetUniformfv(gl.funcs, C.GLuint(program), C.GLint(location), (*C.GLfloat)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetUniformLocation returns an integer that represents the location of a -// specific uniform variable within a program object. name must be an active -// uniform variable name in program that is not a structure, an array of -// structures, or a subcomponent of a vector or a matrix. This function -// returns -1 if name does not correspond to an active uniform variable in -// program or if name starts with the reserved prefix "gl_". -// -// Uniform variables that are structures or arrays of structures may be -// queried by calling GetUniformLocation for each field within the -// structure. The array element operator "[]" and the structure field -// operator "." may be used in name in order to select elements within an -// array or fields within a structure. The result of using these operators is -// not allowed to be another structure, an array of structures, or a -// subcomponent of a vector or a matrix. Except if the last part of name -// indicates a uniform variable array, the location of the first element of -// an array can be retrieved by using the name of the array, or by using the -// name appended by "[0]". -// -// The actual locations assigned to uniform variables are not known until the -// program object is linked successfully. After linking has occurred, the -// command GetUniformLocation can be used to obtain the location of a -// uniform variable. This location value can then be passed to Uniform to -// set the value of the uniform variable or to GetUniform in order to query -// the current value of the uniform variable. After a program object has been -// linked successfully, the index values for uniform variables remain fixed -// until the next link command occurs. Uniform variable locations and values -// can only be queried after a link if the link was successful. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program object. -// GL.INVALID_OPERATION is generated if program has not been successfully -// linked. GL.INVALID_OPERATION is generated if GetUniformLocation is executed -// between the execution of Begin and the corresponding execution of End. -// -// GetUniformLocation is available in GL version 2.0 or greater. -func (gl *GL) GetUniformLocation(program glbase.Program, name string) glbase.Uniform { - name_cstr := C.CString(name) - glresult := C.gl4_2core_glGetUniformLocation(gl.funcs, C.GLuint(program), (*C.GLchar)(name_cstr)) - C.free(unsafe.Pointer(name_cstr)) - return glbase.Uniform(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetShaderSource.xml -func (gl *GL) GetShaderSource(shader glbase.Shader, bufSize int32, length []int32, source []byte) { - C.gl4_2core_glGetShaderSource(gl.funcs, C.GLuint(shader), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLchar)(unsafe.Pointer(&source[0]))) -} - -// GetShaderInfoLog returns the information log for the specified shader -// object. The information log for a shader object is modified when the -// shader is compiled. -// -// The information log for a shader object is a string that may contain -// diagnostic messages, warning messages, and other information about the -// last compile operation. When a shader object is created, its information -// log will be a string of length 0, and the size of the current log can be -// obtained by calling GetShaderiv with the value GL.INFO_LOG_LENGTH. -// -// The information log for a shader object is the OpenGL implementer's -// primary mechanism for conveying information about the compilation process. -// Therefore, the information log can be helpful to application developers -// during the development process, even when compilation is successful. -// Application developers should not expect different OpenGL implementations -// to produce identical information logs. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader is not a shader -// object. GL.INVALID_VALUE is generated if maxLength is less than 0. -// GL.INVALID_OPERATION is generated if GetShaderInfoLog is executed -// between the execution of Begin and the corresponding execution of End. -// -// GetShaderInfoLog is available in GL version 2.0 or greater. -func (gl *GL) GetShaderInfoLog(shader glbase.Shader) []byte { - var params [1]int32 - var length int32 - gl.GetShaderiv(shader, INFO_LOG_LENGTH, params[:]) - bufSize := params[0] - infoLog := make([]byte, int(bufSize)) - C.gl4_2core_glGetShaderInfoLog(gl.funcs, C.GLuint(shader), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length)), (*C.GLchar)(unsafe.Pointer(&infoLog[0]))) - return infoLog -} - -// GetShaderiv GetShader returns in params the value of a parameter for a specific -// shader object. The following parameters are defined: -// -// GL.SHADER_TYPE -// params returns GL.VERTEX_SHADER if shader is a vertex shader object, -// and GL.FRAGMENT_SHADER if shader is a fragment shader object. -// -// GL.DELETE_STATUS -// params returns GL.TRUE if shader is currently flagged for deletion, -// and GL.FALSE otherwise. -// -// GL.COMPILE_STATUS -// params returns GL.TRUE if the last compile operation on shader was -// successful, and GL.FALSE otherwise. -// -// GL.INFO_LOG_LENGTH -// params returns the number of characters in the information log for -// shader including the null termination character (the size of the -// character buffer required to store the information log). If shader has -// no information log, a value of 0 is returned. -// -// GL.SHADER_SOURCE_LENGTH -// params returns the length of the concatenation of the source strings -// that make up the shader source for the shader, including the null -// termination character. (the size of the character buffer -// required to store the shader source). If no source code exists, 0 is -// returned. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader does not refer to a -// shader object. GL.INVALID_ENUM is generated if pname is not an accepted -// value. GL.INVALID_OPERATION is generated if GetShader is executed -// between the execution of Begin and the corresponding execution of End. -// -// GetShaderiv is available in GL version 2.0 or greater. -func (gl *GL) GetShaderiv(shader glbase.Shader, pname glbase.Enum, params []int32) { - var params_c [4]int32 - C.gl4_2core_glGetShaderiv(gl.funcs, C.GLuint(shader), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetProgramInfoLog returns the information log for the specified program -// object. The information log for a program object is modified when the -// program object is linked or validated. -// -// The information log for a program object is either an empty string, or a -// string containing information about the last link operation, or a string -// containing information about the last validation operation. It may contain -// diagnostic messages, warning messages, and other information. When a -// program object is created, its information log will be a string of length -// 0, and the size of the current log can be obtained by calling GetProgramiv -// with the value GL.INFO_LOG_LENGTH. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated -// by OpenGL. GL.INVALID_OPERATION is generated if program is not a -// program object. -func (gl *GL) GetProgramInfoLog(program glbase.Program) []byte { - var params [1]int32 - var length int32 - gl.GetProgramiv(program, INFO_LOG_LENGTH, params[:]) - bufSize := params[0] - infoLog := make([]byte, int(bufSize)) - C.gl4_2core_glGetProgramInfoLog(gl.funcs, C.GLuint(program), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length)), (*C.GLchar)(unsafe.Pointer(&infoLog[0]))) - return infoLog -} - -// GetProgramiv returns in params the value of a parameter for a specific -// program object. The following parameters are defined: -// -// GL.DELETE_STATUS -// params returns GL.TRUE if program is currently flagged for deletion, -// and GL.FALSE otherwise. -// -// GL.LINK_STATUS -// params returns GL.TRUE if the last link operation on program was -// successful, and GL.FALSE otherwise. -// -// GL.VALIDATE_STATUS -// params returns GL.TRUE or if the last validation operation on -// program was successful, and GL.FALSE otherwise. -// -// GL.INFO_LOG_LENGTH -// params returns the number of characters in the information log for -// program including the null termination character (the size of -// the character buffer required to store the information log). If -// program has no information log, a value of 0 is returned. -// -// GL.ATTACHED_SHADERS -// params returns the number of shader objects attached to program. -// -// GL.ACTIVE_ATTRIBUTES -// params returns the number of active attribute variables for program. -// -// GL.ACTIVE_ATTRIBUTE_MAX_LENGTH -// params returns the length of the longest active attribute name for -// program, including the null termination character (the size of -// the character buffer required to store the longest attribute name). -// If no active attributes exist, 0 is returned. -// -// GL.ACTIVE_UNIFORMS -// params returns the number of active uniform variables for program. -// -// GL.ACTIVE_UNIFORM_MAX_LENGTH -// params returns the length of the longest active uniform variable -// name for program, including the null termination character (i.e., -// the size of the character buffer required to store the longest -// uniform variable name). If no active uniform variables exist, 0 is -// returned. -// -// GL.TRANSFORM_FEEDBACK_BUFFER_MODE -// params returns a symbolic constant indicating the buffer mode used -// when transform feedback is active. This may be GL.SEPARATE_ATTRIBS -// or GL.INTERLEAVED_ATTRIBS. -// -// GL.TRANSFORM_FEEDBACK_VARYINGS -// params returns the number of varying variables to capture in transform -// feedback mode for the program. -// -// GL.TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH -// params returns the length of the longest variable name to be used for -// transform feedback, including the null-terminator. -// -// GL.GEOMETRY_VERTICES_OUT -// params returns the maximum number of vertices that the geometry shader in -// program will output. -// -// GL.GEOMETRY_INPUT_TYPE -// params returns a symbolic constant indicating the primitive type accepted -// as input to the geometry shader contained in program. -// -// GL.GEOMETRY_OUTPUT_TYPE -// params returns a symbolic constant indicating the primitive type that will -// be output by the geometry shader contained in program. -// -// GL.ACTIVE_UNIFORM_BLOCKS and GL.ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH are -// available only if the GL version 3.1 or greater. -// -// GL.GEOMETRY_VERTICES_OUT, GL.GEOMETRY_INPUT_TYPE and -// GL.GEOMETRY_OUTPUT_TYPE are accepted only if the GL version is 3.2 or -// greater. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program does not refer to a -// program object. GL.INVALID_OPERATION is generated if pname is -// GL.GEOMETRY_VERTICES_OUT, GL.GEOMETRY_INPUT_TYPE, or -// GL.GEOMETRY_OUTPUT_TYPE, and program does not contain a geometry shader. -// GL.INVALID_ENUM is generated if pname is not an accepted value. -func (gl *GL) GetProgramiv(program glbase.Program, pname glbase.Enum, params []int32) { - var params_c [4]int32 - C.gl4_2core_glGetProgramiv(gl.funcs, C.GLuint(program), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetAttribLocation queries the previously linked program object specified -// by program for the attribute variable specified by name and returns the -// index of the generic vertex attribute that is bound to that attribute -// variable. If name is a matrix attribute variable, the index of the first -// column of the matrix is returned. If the named attribute variable is not -// an active attribute in the specified program object or if name starts with -// the reserved prefix "gl_", a value of -1 is returned. -// -// The association between an attribute variable name and a generic attribute -// index can be specified at any time by calling BindAttribLocation. -// Attribute bindings do not go into effect until LinkProgram is called. -// After a program object has been linked successfully, the index values for -// attribute variables remain fixed until the next link command occurs. The -// attribute values can only be queried after a link if the link was -// successful. GetAttribLocation returns the binding that actually went -// into effect the last time LinkProgram was called for the specified -// program object. Attribute bindings that have been specified since the last -// link operation are not returned by GetAttribLocation. -// -// Error GL_INVALID_OPERATION is generated if program is not a value -// generated by OpenGL. GL_INVALID_OPERATION is generated if program is not -// a program object. GL_INVALID_OPERATION is generated if program has not -// been successfully linked. GL_INVALID_OPERATION is generated if -// GetAttribLocation is executed between the execution of Begin and the -// corresponding execution of End. -// -// GetAttribLocation is available in GL version 2.0 or greater. -func (gl *GL) GetAttribLocation(program glbase.Program, name string) glbase.Attrib { - name_cstr := C.CString(name) - glresult := C.gl4_2core_glGetAttribLocation(gl.funcs, C.GLuint(program), (*C.GLchar)(name_cstr)) - C.free(unsafe.Pointer(name_cstr)) - return glbase.Attrib(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetAttachedShaders.xml -func (gl *GL) GetAttachedShaders(program glbase.Program, maxCount int32, count []int, obj []uint32) { - C.gl4_2core_glGetAttachedShaders(gl.funcs, C.GLuint(program), C.GLsizei(maxCount), (*C.GLsizei)(unsafe.Pointer(&count[0])), (*C.GLuint)(unsafe.Pointer(&obj[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveUniform.xml -func (gl *GL) GetActiveUniform(program glbase.Program, index uint32, bufSize int32, length []int32, size []int, gltype []glbase.Enum, name []byte) { - C.gl4_2core_glGetActiveUniform(gl.funcs, C.GLuint(program), C.GLuint(index), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLint)(unsafe.Pointer(&size[0])), (*C.GLenum)(unsafe.Pointer(&gltype[0])), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveAttrib.xml -func (gl *GL) GetActiveAttrib(program glbase.Program, index glbase.Attrib, bufSize int32, length []int32, size []int, gltype []glbase.Enum, name []byte) { - C.gl4_2core_glGetActiveAttrib(gl.funcs, C.GLuint(program), C.GLuint(index), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLint)(unsafe.Pointer(&size[0])), (*C.GLenum)(unsafe.Pointer(&gltype[0])), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEnableVertexAttribArray.xml -func (gl *GL) EnableVertexAttribArray(index glbase.Attrib) { - C.gl4_2core_glEnableVertexAttribArray(gl.funcs, C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDisableVertexAttribArray.xml -func (gl *GL) DisableVertexAttribArray(index glbase.Attrib) { - C.gl4_2core_glDisableVertexAttribArray(gl.funcs, C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDetachShader.xml -func (gl *GL) DetachShader(program glbase.Program, shader glbase.Shader) { - C.gl4_2core_glDetachShader(gl.funcs, C.GLuint(program), C.GLuint(shader)) -} - -// DeleteShader frees the memory and invalidates the name associated with -// the shader object specified by shader. This command effectively undoes the -// effects of a call to CreateShader. -// -// If a shader object to be deleted is attached to a program object, it will -// be flagged for deletion, but it will not be deleted until it is no longer -// attached to any program object, for any rendering context (it must -// be detached from wherever it was attached before it will be deleted). A -// value of 0 for shader will be silently ignored. -// -// To determine whether an object has been flagged for deletion, call -// GetShader with arguments shader and GL.DELETE_STATUS. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. -// -// DeleteShader is available in GL version 2.0 or greater. -func (gl *GL) DeleteShader(shader glbase.Shader) { - C.gl4_2core_glDeleteShader(gl.funcs, C.GLuint(shader)) -} - -// DeleteProgram frees the memory and invalidates the name associated with -// the program object specified by program. This command effectively undoes -// the effects of a call to CreateProgram. -// -// If a program object is in use as part of current rendering state, it will -// be flagged for deletion, but it will not be deleted until it is no longer -// part of current state for any rendering context. If a program object to be -// deleted has shader objects attached to it, those shader objects will be -// automatically detached but not deleted unless they have already been -// flagged for deletion by a previous call to DeleteShader. A value of 0 -// for program will be silently ignored. -// -// To determine whether a program object has been flagged for deletion, call -// GetProgram with arguments program and GL.DELETE_STATUS. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. -// -// DeleteProgram is available in GL version 2.0 or greater. -func (gl *GL) DeleteProgram(program glbase.Program) { - C.gl4_2core_glDeleteProgram(gl.funcs, C.GLuint(program)) -} - -// CreateShader creates an empty shader object and returns a non-zero value -// by which it can be referenced. A shader object is used to maintain the -// source code strings that define a shader. shaderType indicates the type of -// shader to be created. -// -// Two types of shaders are supported. A shader of type GL.VERTEX_SHADER is a -// shader that is intended to run on the programmable vertex processor and -// replace the fixed functionality vertex processing in OpenGL. A shader of -// type GL.FRAGMENT_SHADER is a shader that is intended to run on the -// programmable fragment processor and replace the fixed functionality -// fragment processing in OpenGL. -// -// When created, a shader object's GL.SHADER_TYPE parameter is set to either -// GL.VERTEX_SHADER or GL.FRAGMENT_SHADER, depending on the value of -// shaderType. -// -// Like display lists and texture objects, the name space for shader objects -// may be shared across a set of contexts, as long as the server sides of the -// contexts share the same address space. If the name space is shared across -// contexts, any attached objects and the data associated with those attached -// objects are shared as well. -// -// This function returns 0 if an error occurs creating the shader object. -// -// Error GL.INVALID_ENUM is generated if shaderType is not an accepted value. -// GL.INVALID_OPERATION is generated if CreateShader is executed between the -// execution of Begin and the corresponding execution of End. -// -// CreateShader is available in GL version 2.0 or greater. -func (gl *GL) CreateShader(gltype glbase.Enum) glbase.Shader { - glresult := C.gl4_2core_glCreateShader(gl.funcs, C.GLenum(gltype)) - return glbase.Shader(glresult) -} - -// CreateProgram creates an empty program object and returns a non-zero -// value by which it can be referenced. A program object is an object to -// which shader objects can be attached. This provides a mechanism to specify -// the shader objects that will be linked to create a program. It also -// provides a means for checking the compatibility of the shaders that will -// be used to create a program (for instance, checking the compatibility -// between a vertex shader and a fragment shader). When no longer needed as -// part of a program object, shader objects can be detached. -// -// One or more executables are created in a program object by successfully -// attaching shader objects to it with AttachShader, successfully compiling -// the shader objects with CompileShader, and successfully linking the -// program object with LinkProgram. These executables are made part of -// current state when UseProgram is called. Program objects can be deleted -// by calling DeleteProgram. The memory associated with the program object -// will be deleted when it is no longer part of current rendering state for -// any context. -// -// Like display lists and texture objects, the name space for program objects -// may be shared across a set of contexts, as long as the server sides of the -// contexts share the same address space. If the name space is shared across -// contexts, any attached objects and the data associated with those attached -// objects are shared as well. -// -// Applications are responsible for providing the synchronization across API -// calls when objects are accessed from different execution threads. -// -// This function returns 0 if an error occurs creating the program object. -// -// Error GL.INVALID_OPERATION is generated if CreateProgram is executed -// between the execution of Begin and the corresponding execution of End. -// -// CreateProgram is available in GL version 2.0 or greater. -func (gl *GL) CreateProgram() glbase.Program { - glresult := C.gl4_2core_glCreateProgram(gl.funcs) - return glbase.Program(glresult) -} - -// CompileShader compiles the source code strings that have been stored in -// the shader object specified by shader. -// -// The compilation status will be stored as part of the shader object's -// state. This value will be set to GL.TRUE if the shader was compiled without -// errors and is ready for use, and GL.FALSE otherwise. It can be queried by -// calling GetShaderiv with arguments shader and GL.COMPILE_STATUS. -// -// Compilation of a shader can fail for a number of reasons as specified by -// the OpenGL Shading Language Specification. Whether or not the compilation -// was successful, information about the compilation can be obtained from the -// shader object's information log by calling GetShaderInfoLog. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader is not a shader -// object. GL.INVALID_OPERATION is generated if CompileShader is executed -// between the execution of Begin and the corresponding execution of End. -// -// CompileShader is available in GL version 2.0 or greater. -func (gl *GL) CompileShader(shader glbase.Shader) { - C.gl4_2core_glCompileShader(gl.funcs, C.GLuint(shader)) -} - -// BindAttribLocation associates a user-defined attribute variable in the program -// object specified by program with a generic vertex attribute index. The name -// parameter specifies the name of the vertex shader attribute variable to -// which index is to be bound. When program is made part of the current state, -// values provided via the generic vertex attribute index will modify the -// value of the user-defined attribute variable specified by name. -// -// If name refers to a matrix attribute variable, index refers to the first -// column of the matrix. Other matrix columns are then automatically bound to -// locations index+1 for a matrix of type mat2; index+1 and index+2 for a -// matrix of type mat3; and index+1, index+2, and index+3 for a matrix of -// type mat4. -// -// This command makes it possible for vertex shaders to use descriptive names -// for attribute variables rather than generic variables that are numbered -// from 0 to GL.MAX_VERTEX_ATTRIBS-1. The values sent to each generic -// attribute index are part of current state, just like standard vertex -// attributes such as color, normal, and vertex position. If a different -// program object is made current by calling UseProgram, the generic vertex -// attributes are tracked in such a way that the same values will be observed -// by attributes in the new program object that are also bound to index. -// -// Attribute variable name-to-generic attribute index bindings for a program -// object can be explicitly assigned at any time by calling -// BindAttribLocation. Attribute bindings do not go into effect until -// LinkProgram is called. After a program object has been linked -// successfully, the index values for generic attributes remain fixed (and -// their values can be queried) until the next link command occurs. -// -// Applications are not allowed to bind any of the standard OpenGL vertex -// attributes using this command, as they are bound automatically when -// needed. Any attribute binding that occurs after the program object has -// been linked will not take effect until the next time the program object is -// linked. -// -// If name was bound previously, that information is lost. Thus you cannot -// bind one user-defined attribute variable to multiple indices, but you can -// bind multiple user-defined attribute variables to the same index. -// -// Applications are allowed to bind more than one user-defined attribute -// variable to the same generic vertex attribute index. This is called -// aliasing, and it is allowed only if just one of the aliased attributes is -// active in the executable program, or if no path through the shader -// consumes more than one attribute of a set of attributes aliased to the -// same location. The compiler and linker are allowed to assume that no -// aliasing is done and are free to employ optimizations that work only in -// the absence of aliasing. OpenGL implementations are not required to do -// error checking to detect aliasing. Because there is no way to bind -// standard attributes, it is not possible to alias generic attributes with -// conventional ones (except for generic attribute 0). -// -// BindAttribLocation can be called before any vertex shader objects are -// bound to the specified program object. It is also permissible to bind a -// generic attribute index to an attribute variable name that is never used -// in a vertex shader. -// -// Active attributes that are not explicitly bound will be bound by the -// linker when LinkProgram is called. The locations assigned can be queried -// by calling GetAttribLocation. -// -// Error GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. -// GL.INVALID_OPERATION is generated if name starts with the reserved prefix "gl_". -// GL.INVALID_VALUE is generated if program is not a value generated by OpenGL. -// GL.INVALID_OPERATION is generated if program is not a program object. -// GL.INVALID_OPERATION is generated if BindAttribLocation is executed -// between the execution of Begin and the corresponding execution of End. -// -// BindAttribLocation is available in GL version 2.0 or greater. -func (gl *GL) BindAttribLocation(program glbase.Program, index glbase.Attrib, name string) { - name_cstr := C.CString(name) - C.gl4_2core_glBindAttribLocation(gl.funcs, C.GLuint(program), C.GLuint(index), (*C.GLchar)(name_cstr)) - C.free(unsafe.Pointer(name_cstr)) -} - -// AttachShader attaches a shader object to a program object. -// -// In order to create an executable, there must be a way to specify the list -// of things that will be linked together. Program objects provide this -// mechanism. Shaders that are to be linked together in a program object must -// first be attached to that program object. This indicates that shader will -// be included in link operations that will be performed on program. -// -// All operations that can be performed on a shader object are valid whether -// or not the shader object is attached to a program object. It is -// permissible to attach a shader object to a program object before source -// code has been loaded into the shader object or before the shader object -// has been compiled. It is permissible to attach multiple shader objects of -// the same type because each may contain a portion of the complete shader. -// It is also permissible to attach a shader object to more than one program -// object. If a shader object is deleted while it is attached to a program -// object, it will be flagged for deletion, and deletion will not occur until -// DetachShader is called to detach it from all program objects to which it -// is attached. -// -// Error GL.INVALID_VALUE is generated if either program or shader is not a -// value generated by OpenGL. GL.INVALID_OPERATION is generated if program -// is not a program object. GL.INVALID_OPERATION is generated if shader is -// not a shader object. GL.INVALID_OPERATION is generated if shader is -// already attached to program. GL.INVALID_OPERATION is generated if -// AttachShader is executed between the execution of Begin and the -// corresponding execution of End. -// -// AttachShader is available in GL version 2.0 or greater. -func (gl *GL) AttachShader(program glbase.Program, shader glbase.Shader) { - C.gl4_2core_glAttachShader(gl.funcs, C.GLuint(program), C.GLuint(shader)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glStencilMaskSeparate.xml -func (gl *GL) StencilMaskSeparate(face glbase.Enum, mask uint32) { - C.gl4_2core_glStencilMaskSeparate(gl.funcs, C.GLenum(face), C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glStencilFuncSeparate.xml -func (gl *GL) StencilFuncSeparate(face, glfunc glbase.Enum, ref int32, mask uint32) { - C.gl4_2core_glStencilFuncSeparate(gl.funcs, C.GLenum(face), C.GLenum(glfunc), C.GLint(ref), C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glStencilOpSeparate.xml -func (gl *GL) StencilOpSeparate(face, sfail, dpfail, dppass glbase.Enum) { - C.gl4_2core_glStencilOpSeparate(gl.funcs, C.GLenum(face), C.GLenum(sfail), C.GLenum(dpfail), C.GLenum(dppass)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawBuffers.xml -func (gl *GL) DrawBuffers(n int, bufs []glbase.Enum) { - C.gl4_2core_glDrawBuffers(gl.funcs, C.GLsizei(n), (*C.GLenum)(unsafe.Pointer(&bufs[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendEquationSeparate.xml -func (gl *GL) BlendEquationSeparate(modeRGB, modeAlpha glbase.Enum) { - C.gl4_2core_glBlendEquationSeparate(gl.funcs, C.GLenum(modeRGB), C.GLenum(modeAlpha)) -} - -// UniformMatrix4x3fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix4x3fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix4x3fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(4*3) != 0 { - panic("invalid value length for UniformMatrix4x3fv") - } - count := len(value) / (4 * 3) - C.gl4_2core_glUniformMatrix4x3fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix3x4fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix3x4fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix3x4fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(3*4) != 0 { - panic("invalid value length for UniformMatrix3x4fv") - } - count := len(value) / (3 * 4) - C.gl4_2core_glUniformMatrix3x4fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix4x2fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix4x2fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix4x2fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(4*2) != 0 { - panic("invalid value length for UniformMatrix4x2fv") - } - count := len(value) / (4 * 2) - C.gl4_2core_glUniformMatrix4x2fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix2x4fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix2x4fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix2x4fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(2*4) != 0 { - panic("invalid value length for UniformMatrix2x4fv") - } - count := len(value) / (2 * 4) - C.gl4_2core_glUniformMatrix2x4fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix3x2fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix3x2fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix3x2fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(3*2) != 0 { - panic("invalid value length for UniformMatrix3x2fv") - } - count := len(value) / (3 * 2) - C.gl4_2core_glUniformMatrix3x2fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix2x3fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix2x3fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix2x3fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(2*3) != 0 { - panic("invalid value length for UniformMatrix2x3fv") - } - count := len(value) / (2 * 3) - C.gl4_2core_glUniformMatrix2x3fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsVertexArray.xml -func (gl *GL) IsVertexArray(array uint32) bool { - glresult := C.gl4_2core_glIsVertexArray(gl.funcs, C.GLuint(array)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGenVertexArrays.xml -func (gl *GL) GenVertexArrays(n int, arrays []uint32) { - C.gl4_2core_glGenVertexArrays(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&arrays[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDeleteVertexArrays.xml -func (gl *GL) DeleteVertexArrays(n int, arrays []uint32) { - C.gl4_2core_glDeleteVertexArrays(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&arrays[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindVertexArray.xml -func (gl *GL) BindVertexArray(array uint32) { - C.gl4_2core_glBindVertexArray(gl.funcs, C.GLuint(array)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFlushMappedBufferRange.xml -func (gl *GL) FlushMappedBufferRange(target glbase.Enum, offset, length int) { - C.gl4_2core_glFlushMappedBufferRange(gl.funcs, C.GLenum(target), C.GLintptr(offset), C.GLsizeiptr(length)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFramebufferTextureLayer.xml -func (gl *GL) FramebufferTextureLayer(target, attachment glbase.Enum, texture glbase.Texture, level int, layer int32) { - C.gl4_2core_glFramebufferTextureLayer(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLuint(texture), C.GLint(level), C.GLint(layer)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRenderbufferStorageMultisample.xml -func (gl *GL) RenderbufferStorageMultisample(target glbase.Enum, samples int32, internalFormat glbase.Enum, width, height int) { - C.gl4_2core_glRenderbufferStorageMultisample(gl.funcs, C.GLenum(target), C.GLsizei(samples), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlitFramebuffer.xml -func (gl *GL) BlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1 int32, mask glbase.Bitfield, filter glbase.Enum) { - C.gl4_2core_glBlitFramebuffer(gl.funcs, C.GLint(srcX0), C.GLint(srcY0), C.GLint(srcX1), C.GLint(srcY1), C.GLint(dstX0), C.GLint(dstY0), C.GLint(dstX1), C.GLint(dstY1), C.GLbitfield(mask), C.GLenum(filter)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGenerateMipmap.xml -func (gl *GL) GenerateMipmap(target glbase.Enum) { - C.gl4_2core_glGenerateMipmap(gl.funcs, C.GLenum(target)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetFramebufferAttachmentParameteriv.xml -func (gl *GL) GetFramebufferAttachmentParameteriv(target, attachment, pname glbase.Enum, params []int32) { - C.gl4_2core_glGetFramebufferAttachmentParameteriv(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFramebufferRenderbuffer.xml -func (gl *GL) FramebufferRenderbuffer(target, attachment, renderbuffertarget glbase.Enum, renderbuffer glbase.Renderbuffer) { - C.gl4_2core_glFramebufferRenderbuffer(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(renderbuffertarget), C.GLuint(renderbuffer)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFramebufferTexture3D.xml -func (gl *GL) FramebufferTexture3D(target, attachment, textarget glbase.Enum, texture glbase.Texture, level int, zoffset int32) { - C.gl4_2core_glFramebufferTexture3D(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(textarget), C.GLuint(texture), C.GLint(level), C.GLint(zoffset)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFramebufferTexture2D.xml -func (gl *GL) FramebufferTexture2D(target, attachment, textarget glbase.Enum, texture glbase.Texture, level int) { - C.gl4_2core_glFramebufferTexture2D(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(textarget), C.GLuint(texture), C.GLint(level)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFramebufferTexture1D.xml -func (gl *GL) FramebufferTexture1D(target, attachment, textarget glbase.Enum, texture glbase.Texture, level int) { - C.gl4_2core_glFramebufferTexture1D(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(textarget), C.GLuint(texture), C.GLint(level)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCheckFramebufferStatus.xml -func (gl *GL) CheckFramebufferStatus(target glbase.Enum) glbase.Enum { - glresult := C.gl4_2core_glCheckFramebufferStatus(gl.funcs, C.GLenum(target)) - return glbase.Enum(glresult) -} - -// GenFramebuffers returns n framebuffer object names in ids. There is no -// guarantee that the names form a contiguous set of integers; however, it is -// guaranteed that none of the returned names was in use immediately before -// the call to GenFramebuffers. -// -// Framebuffer object names returned by a call to GenFramebuffers are not -// returned by subsequent calls, unless they are first deleted with -// DeleteFramebuffers. -// -// The names returned in ids are marked as used, for the purposes of -// GenFramebuffers only, but they acquire state and type only when they are -// first bound. -// -// Error GL.INVALID_VALUE is generated if n is negative. -func (gl *GL) GenFramebuffers(n int) []glbase.Framebuffer { - if n == 0 { - return nil - } - framebuffers := make([]glbase.Framebuffer, n) - C.gl4_2core_glGenFramebuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&framebuffers[0]))) - return framebuffers -} - -// DeleteFramebuffers deletes the framebuffer objects whose names are -// stored in the framebuffers slice. The name zero is reserved by the GL and -// is silently ignored, should it occur in framebuffers, as are other unused -// names. Once a framebuffer object is deleted, its name is again unused and -// it has no attachments. If a framebuffer that is currently bound to one or -// more of the targets GL.DRAW_FRAMEBUFFER or GL.READ_FRAMEBUFFER is deleted, -// it is as though BindFramebuffer had been executed with the corresponding -// target and framebuffer zero. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// DeleteFramebuffers is available in GL version 3.0 or greater. -func (gl *GL) DeleteFramebuffers(framebuffers []glbase.Framebuffer) { - n := len(framebuffers) - if n == 0 { - return - } - C.gl4_2core_glDeleteFramebuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&framebuffers[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindFramebuffer.xml -func (gl *GL) BindFramebuffer(target glbase.Enum, framebuffer glbase.Framebuffer) { - C.gl4_2core_glBindFramebuffer(gl.funcs, C.GLenum(target), C.GLuint(framebuffer)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsFramebuffer.xml -func (gl *GL) IsFramebuffer(framebuffer glbase.Framebuffer) bool { - glresult := C.gl4_2core_glIsFramebuffer(gl.funcs, C.GLuint(framebuffer)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetRenderbufferParameteriv.xml -func (gl *GL) GetRenderbufferParameteriv(target, pname glbase.Enum, params []int32) { - C.gl4_2core_glGetRenderbufferParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRenderbufferStorage.xml -func (gl *GL) RenderbufferStorage(target, internalFormat glbase.Enum, width, height int) { - C.gl4_2core_glRenderbufferStorage(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height)) -} - -// GenRenderbuffers returns n renderbuffer object names in renderbuffers. -// There is no guarantee that the names form a contiguous set of integers; -// however, it is guaranteed that none of the returned names was in use -// immediately before the call to GenRenderbuffers. -// -// Renderbuffer object names returned by a call to GenRenderbuffers are not -// returned by subsequent calls, unless they are first deleted with -// DeleteRenderbuffers. -// -// The names returned in renderbuffers are marked as used, for the purposes -// of GenRenderbuffers only, but they acquire state and type only when they -// are first bound. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// GenRenderbuffers is available in GL version 3.0 or greater. -func (gl *GL) GenRenderbuffers(n int) []glbase.Renderbuffer { - if n == 0 { - return nil - } - renderbuffers := make([]glbase.Renderbuffer, n) - C.gl4_2core_glGenRenderbuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&renderbuffers[0]))) - return renderbuffers -} - -// DeleteRenderbuffers deletes the renderbuffer objects whose names are stored -// in the renderbuffers slice. The name zero is reserved by the GL and -// is silently ignored, should it occur in renderbuffers, as are other unused -// names. Once a renderbuffer object is deleted, its name is again unused and -// it has no contents. If a renderbuffer that is currently bound to the -// target GL.RENDERBUFFER is deleted, it is as though BindRenderbuffer had -// been executed with a target of GL.RENDERBUFFER and a name of zero. -// -// If a renderbuffer object is attached to one or more attachment points in -// the currently bound framebuffer, then it as if FramebufferRenderbuffer -// had been called, with a renderbuffer of zero for each attachment point to -// which this image was attached in the currently bound framebuffer. In other -// words, this renderbuffer object is first detached from all attachment -// ponits in the currently bound framebuffer. Note that the renderbuffer -// image is specifically not detached from any non-bound framebuffers. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// DeleteRenderbuffers is available in GL version 3.0 or greater. -func (gl *GL) DeleteRenderbuffers(renderbuffers []glbase.Renderbuffer) { - n := len(renderbuffers) - if n == 0 { - return - } - C.gl4_2core_glDeleteRenderbuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&renderbuffers[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindRenderbuffer.xml -func (gl *GL) BindRenderbuffer(target glbase.Enum, renderbuffer glbase.Renderbuffer) { - C.gl4_2core_glBindRenderbuffer(gl.funcs, C.GLenum(target), C.GLuint(renderbuffer)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsRenderbuffer.xml -func (gl *GL) IsRenderbuffer(renderbuffer glbase.Renderbuffer) bool { - glresult := C.gl4_2core_glIsRenderbuffer(gl.funcs, C.GLuint(renderbuffer)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearBufferfi.xml -func (gl *GL) ClearBufferfi(buffer glbase.Enum, drawbuffer int32, depth float32, stencil int32) { - C.gl4_2core_glClearBufferfi(gl.funcs, C.GLenum(buffer), C.GLint(drawbuffer), C.GLfloat(depth), C.GLint(stencil)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearBufferfv.xml -func (gl *GL) ClearBufferfv(buffer glbase.Enum, drawbuffer int32, value []float32) { - C.gl4_2core_glClearBufferfv(gl.funcs, C.GLenum(buffer), C.GLint(drawbuffer), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearBufferuiv.xml -func (gl *GL) ClearBufferuiv(buffer glbase.Enum, drawbuffer int32, value []uint32) { - C.gl4_2core_glClearBufferuiv(gl.funcs, C.GLenum(buffer), C.GLint(drawbuffer), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearBufferiv.xml -func (gl *GL) ClearBufferiv(buffer glbase.Enum, drawbuffer int32, value []int32) { - C.gl4_2core_glClearBufferiv(gl.funcs, C.GLenum(buffer), C.GLint(drawbuffer), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexParameterIuiv.xml -func (gl *GL) GetTexParameterIuiv(target, pname glbase.Enum, params []uint32) { - C.gl4_2core_glGetTexParameterIuiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexParameterIiv.xml -func (gl *GL) GetTexParameterIiv(target, pname glbase.Enum, params []int32) { - C.gl4_2core_glGetTexParameterIiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexParameterIuiv.xml -func (gl *GL) TexParameterIuiv(target, pname glbase.Enum, params []uint32) { - C.gl4_2core_glTexParameterIuiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexParameterIiv.xml -func (gl *GL) TexParameterIiv(target, pname glbase.Enum, params []int32) { - C.gl4_2core_glTexParameterIiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// Uniform4uiv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform4uiv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4uiv(location glbase.Uniform, value []uint32) { - if len(value) == 0 { - return - } - if len(value)%4 != 0 { - panic("invalid value length for Uniform4uiv") - } - count := len(value) / 4 - C.gl4_2core_glUniform4uiv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// Uniform3uiv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform3uiv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3uiv(location glbase.Uniform, value []uint32) { - if len(value) == 0 { - return - } - if len(value)%3 != 0 { - panic("invalid value length for Uniform3uiv") - } - count := len(value) / 3 - C.gl4_2core_glUniform3uiv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// Uniform2uiv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform2uiv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2uiv(location glbase.Uniform, value []uint32) { - if len(value) == 0 { - return - } - if len(value)%2 != 0 { - panic("invalid value length for Uniform2uiv") - } - count := len(value) / 2 - C.gl4_2core_glUniform2uiv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// Uniform1uiv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform1uiv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1uiv(location glbase.Uniform, value []uint32) { - if len(value) == 0 { - return - } - count := len(value) - C.gl4_2core_glUniform1uiv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// Uniform4ui modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform4ui operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4ui(location glbase.Uniform, v0, v1, v2, v3 uint32) { - C.gl4_2core_glUniform4ui(gl.funcs, C.GLint(location), C.GLuint(v0), C.GLuint(v1), C.GLuint(v2), C.GLuint(v3)) -} - -// Uniform3ui modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform3ui operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3ui(location glbase.Uniform, v0, v1, v2 uint32) { - C.gl4_2core_glUniform3ui(gl.funcs, C.GLint(location), C.GLuint(v0), C.GLuint(v1), C.GLuint(v2)) -} - -// Uniform2ui modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform2ui operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2ui(location glbase.Uniform, v0, v1 uint32) { - C.gl4_2core_glUniform2ui(gl.funcs, C.GLint(location), C.GLuint(v0), C.GLuint(v1)) -} - -// Uniform1ui modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform1ui operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1ui(location glbase.Uniform, v0 uint32) { - C.gl4_2core_glUniform1ui(gl.funcs, C.GLint(location), C.GLuint(v0)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetFragDataLocation.xml -func (gl *GL) GetFragDataLocation(program glbase.Program, name []byte) int32 { - glresult := C.gl4_2core_glGetFragDataLocation(gl.funcs, C.GLuint(program), (*C.GLchar)(unsafe.Pointer(&name[0]))) - return int32(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindFragDataLocation.xml -func (gl *GL) BindFragDataLocation(program glbase.Program, color uint32, name []byte) { - C.gl4_2core_glBindFragDataLocation(gl.funcs, C.GLuint(program), C.GLuint(color), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetUniformuiv.xml -func (gl *GL) GetUniformuiv(program glbase.Program, location glbase.Uniform, params []uint32) { - C.gl4_2core_glGetUniformuiv(gl.funcs, C.GLuint(program), C.GLint(location), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetVertexAttribIuiv.xml -func (gl *GL) GetVertexAttribIuiv(index glbase.Attrib, pname glbase.Enum, params []uint32) { - C.gl4_2core_glGetVertexAttribIuiv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetVertexAttribIiv.xml -func (gl *GL) GetVertexAttribIiv(index glbase.Attrib, pname glbase.Enum, params []int32) { - C.gl4_2core_glGetVertexAttribIiv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribIPointer.xml -func (gl *GL) VertexAttribIPointer(index glbase.Attrib, size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl4_2core_glVertexAttribIPointer(gl.funcs, C.GLuint(index), C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEndConditionalRender.xml -func (gl *GL) EndConditionalRender() { - C.gl4_2core_glEndConditionalRender(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBeginConditionalRender.xml -func (gl *GL) BeginConditionalRender(id uint32, mode glbase.Enum) { - C.gl4_2core_glBeginConditionalRender(gl.funcs, C.GLuint(id), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClampColor.xml -func (gl *GL) ClampColor(target, clamp glbase.Enum) { - C.gl4_2core_glClampColor(gl.funcs, C.GLenum(target), C.GLenum(clamp)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTransformFeedbackVarying.xml -func (gl *GL) GetTransformFeedbackVarying(program glbase.Program, index uint32, bufSize int32, length []int32, size []int, gltype []glbase.Enum, name []byte) { - C.gl4_2core_glGetTransformFeedbackVarying(gl.funcs, C.GLuint(program), C.GLuint(index), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLsizei)(unsafe.Pointer(&size[0])), (*C.GLenum)(unsafe.Pointer(&gltype[0])), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindBufferBase.xml -func (gl *GL) BindBufferBase(target glbase.Enum, index uint32, buffer glbase.Buffer) { - C.gl4_2core_glBindBufferBase(gl.funcs, C.GLenum(target), C.GLuint(index), C.GLuint(buffer)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindBufferRange.xml -func (gl *GL) BindBufferRange(target glbase.Enum, index uint32, buffer glbase.Buffer, offset, size int) { - C.gl4_2core_glBindBufferRange(gl.funcs, C.GLenum(target), C.GLuint(index), C.GLuint(buffer), C.GLintptr(offset), C.GLsizeiptr(size)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEndTransformFeedback.xml -func (gl *GL) EndTransformFeedback() { - C.gl4_2core_glEndTransformFeedback(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBeginTransformFeedback.xml -func (gl *GL) BeginTransformFeedback(primitiveMode glbase.Enum) { - C.gl4_2core_glBeginTransformFeedback(gl.funcs, C.GLenum(primitiveMode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsEnabledi.xml -func (gl *GL) IsEnabledi(target glbase.Enum, index uint32) bool { - glresult := C.gl4_2core_glIsEnabledi(gl.funcs, C.GLenum(target), C.GLuint(index)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDisablei.xml -func (gl *GL) Disablei(target glbase.Enum, index uint32) { - C.gl4_2core_glDisablei(gl.funcs, C.GLenum(target), C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEnablei.xml -func (gl *GL) Enablei(target glbase.Enum, index uint32) { - C.gl4_2core_glEnablei(gl.funcs, C.GLenum(target), C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetIntegeri_v.xml -func (gl *GL) GetIntegeri_v(target glbase.Enum, index uint32, data []int32) { - C.gl4_2core_glGetIntegeri_v(gl.funcs, C.GLenum(target), C.GLuint(index), (*C.GLint)(unsafe.Pointer(&data[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetBooleani_v.xml -func (gl *GL) GetBooleani_v(target glbase.Enum, index uint32, data []bool) { - C.gl4_2core_glGetBooleani_v(gl.funcs, C.GLenum(target), C.GLuint(index), (*C.GLboolean)(unsafe.Pointer(&data[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorMaski.xml -func (gl *GL) ColorMaski(index uint32, r, g, b, a bool) { - C.gl4_2core_glColorMaski(gl.funcs, C.GLuint(index), *(*C.GLboolean)(unsafe.Pointer(&r)), *(*C.GLboolean)(unsafe.Pointer(&g)), *(*C.GLboolean)(unsafe.Pointer(&b)), *(*C.GLboolean)(unsafe.Pointer(&a))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyBufferSubData.xml -func (gl *GL) CopyBufferSubData(readTarget, writeTarget glbase.Enum, readOffset, writeOffset, size int) { - C.gl4_2core_glCopyBufferSubData(gl.funcs, C.GLenum(readTarget), C.GLenum(writeTarget), C.GLintptr(readOffset), C.GLintptr(writeOffset), C.GLsizeiptr(size)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformBlockBinding.xml -func (gl *GL) UniformBlockBinding(program glbase.Program, v0, v1 uint32) { - C.gl4_2core_glUniformBlockBinding(gl.funcs, C.GLuint(program), C.GLuint(v0), C.GLuint(v1)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveUniformBlockName.xml -func (gl *GL) GetActiveUniformBlockName(program glbase.Program, uniformBlockIndex uint32, bufSize int32, length []int32, uniformBlockName []byte) { - C.gl4_2core_glGetActiveUniformBlockName(gl.funcs, C.GLuint(program), C.GLuint(uniformBlockIndex), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLchar)(unsafe.Pointer(&uniformBlockName[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveUniformBlockiv.xml -func (gl *GL) GetActiveUniformBlockiv(program glbase.Program, uniformBlockIndex uint32, pname glbase.Enum, params []int32) { - C.gl4_2core_glGetActiveUniformBlockiv(gl.funcs, C.GLuint(program), C.GLuint(uniformBlockIndex), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetUniformBlockIndex.xml -func (gl *GL) GetUniformBlockIndex(program glbase.Program, uniformBlockName []byte) uint32 { - glresult := C.gl4_2core_glGetUniformBlockIndex(gl.funcs, C.GLuint(program), (*C.GLchar)(unsafe.Pointer(&uniformBlockName[0]))) - return uint32(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveUniformName.xml -func (gl *GL) GetActiveUniformName(program glbase.Program, uniformIndex uint32, bufSize int32, length []int32, uniformName []byte) { - C.gl4_2core_glGetActiveUniformName(gl.funcs, C.GLuint(program), C.GLuint(uniformIndex), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLchar)(unsafe.Pointer(&uniformName[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveUniformsiv.xml -func (gl *GL) GetActiveUniformsiv(program glbase.Program, uniformCount int32, uniformIndices []uint32, pname glbase.Enum, params []int32) { - C.gl4_2core_glGetActiveUniformsiv(gl.funcs, C.GLuint(program), C.GLsizei(uniformCount), (*C.GLuint)(unsafe.Pointer(&uniformIndices[0])), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPrimitiveRestartIndex.xml -func (gl *GL) PrimitiveRestartIndex(index uint32) { - C.gl4_2core_glPrimitiveRestartIndex(gl.funcs, C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexBuffer.xml -func (gl *GL) TexBuffer(target, internalFormat glbase.Enum, buffer glbase.Buffer) { - C.gl4_2core_glTexBuffer(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLuint(buffer)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawElementsInstanced.xml -func (gl *GL) DrawElementsInstanced(mode glbase.Enum, count int, gltype glbase.Enum, indices interface{}, instancecount int32) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl4_2core_glDrawElementsInstanced(gl.funcs, C.GLenum(mode), C.GLsizei(count), C.GLenum(gltype), indices_ptr, C.GLsizei(instancecount)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawArraysInstanced.xml -func (gl *GL) DrawArraysInstanced(mode glbase.Enum, first, count int, instancecount int32) { - C.gl4_2core_glDrawArraysInstanced(gl.funcs, C.GLenum(mode), C.GLint(first), C.GLsizei(count), C.GLsizei(instancecount)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSampleMaski.xml -func (gl *GL) SampleMaski(index uint32, mask glbase.Bitfield) { - C.gl4_2core_glSampleMaski(gl.funcs, C.GLuint(index), C.GLbitfield(mask)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetMultisamplefv.xml -func (gl *GL) GetMultisamplefv(pname glbase.Enum, index uint32, val []float32) { - C.gl4_2core_glGetMultisamplefv(gl.funcs, C.GLenum(pname), C.GLuint(index), (*C.GLfloat)(unsafe.Pointer(&val[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexImage3DMultisample.xml -func (gl *GL) TexImage3DMultisample(target glbase.Enum, samples, internalFormat int32, width, height int, depth int32, fixedsamplelocations bool) { - C.gl4_2core_glTexImage3DMultisample(gl.funcs, C.GLenum(target), C.GLsizei(samples), C.GLint(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), *(*C.GLboolean)(unsafe.Pointer(&fixedsamplelocations))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexImage2DMultisample.xml -func (gl *GL) TexImage2DMultisample(target glbase.Enum, samples, internalFormat int32, width, height int, fixedsamplelocations bool) { - C.gl4_2core_glTexImage2DMultisample(gl.funcs, C.GLenum(target), C.GLsizei(samples), C.GLint(internalFormat), C.GLsizei(width), C.GLsizei(height), *(*C.GLboolean)(unsafe.Pointer(&fixedsamplelocations))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetSynciv.xml -func (gl *GL) GetSynciv(sync glbase.Sync, pname glbase.Enum, bufSize int32, length, values []int32) { - C.gl4_2core_glGetSynciv(gl.funcs, C.GLsync(unsafe.Pointer(sync)), C.GLenum(pname), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLint)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetInteger64v.xml -func (gl *GL) GetInteger64v(pname glbase.Enum, params []int64) { - C.gl4_2core_glGetInteger64v(gl.funcs, C.GLenum(pname), (*C.GLint64)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWaitSync.xml -func (gl *GL) WaitSync(sync glbase.Sync, flags glbase.Bitfield, timeout uint64) { - C.gl4_2core_glWaitSync(gl.funcs, C.GLsync(unsafe.Pointer(sync)), C.GLbitfield(flags), C.GLuint64(timeout)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClientWaitSync.xml -func (gl *GL) ClientWaitSync(sync glbase.Sync, flags glbase.Bitfield, timeout uint64) glbase.Enum { - glresult := C.gl4_2core_glClientWaitSync(gl.funcs, C.GLsync(unsafe.Pointer(sync)), C.GLbitfield(flags), C.GLuint64(timeout)) - return glbase.Enum(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDeleteSync.xml -func (gl *GL) DeleteSync(sync glbase.Sync) { - C.gl4_2core_glDeleteSync(gl.funcs, C.GLsync(unsafe.Pointer(sync))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsSync.xml -func (gl *GL) IsSync(sync glbase.Sync) bool { - glresult := C.gl4_2core_glIsSync(gl.funcs, C.GLsync(unsafe.Pointer(sync))) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFenceSync.xml -func (gl *GL) FenceSync(condition glbase.Enum, flags glbase.Bitfield) glbase.Sync { - glresult := C.gl4_2core_glFenceSync(gl.funcs, C.GLenum(condition), C.GLbitfield(flags)) - return glbase.Sync(unsafe.Pointer(glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProvokingVertex.xml -func (gl *GL) ProvokingVertex(mode glbase.Enum) { - C.gl4_2core_glProvokingVertex(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawElementsInstancedBaseVertex.xml -func (gl *GL) DrawElementsInstancedBaseVertex(mode glbase.Enum, count int, gltype glbase.Enum, indices interface{}, instancecount, basevertex int32) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl4_2core_glDrawElementsInstancedBaseVertex(gl.funcs, C.GLenum(mode), C.GLsizei(count), C.GLenum(gltype), indices_ptr, C.GLsizei(instancecount), C.GLint(basevertex)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawRangeElementsBaseVertex.xml -func (gl *GL) DrawRangeElementsBaseVertex(mode glbase.Enum, start, end uint32, count int, gltype glbase.Enum, indices interface{}, basevertex int32) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl4_2core_glDrawRangeElementsBaseVertex(gl.funcs, C.GLenum(mode), C.GLuint(start), C.GLuint(end), C.GLsizei(count), C.GLenum(gltype), indices_ptr, C.GLint(basevertex)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawElementsBaseVertex.xml -func (gl *GL) DrawElementsBaseVertex(mode glbase.Enum, count int, gltype glbase.Enum, indices interface{}, basevertex int32) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl4_2core_glDrawElementsBaseVertex(gl.funcs, C.GLenum(mode), C.GLsizei(count), C.GLenum(gltype), indices_ptr, C.GLint(basevertex)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFramebufferTexture.xml -func (gl *GL) FramebufferTexture(target, attachment glbase.Enum, texture glbase.Texture, level int) { - C.gl4_2core_glFramebufferTexture(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLuint(texture), C.GLint(level)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetBufferParameteri64v.xml -func (gl *GL) GetBufferParameteri64v(target, pname glbase.Enum, params []int64) { - C.gl4_2core_glGetBufferParameteri64v(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint64)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetInteger64i_v.xml -func (gl *GL) GetInteger64i_v(target glbase.Enum, index uint32, data []int64) { - C.gl4_2core_glGetInteger64i_v(gl.funcs, C.GLenum(target), C.GLuint(index), (*C.GLint64)(unsafe.Pointer(&data[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribP4uiv.xml -func (gl *GL) VertexAttribP4uiv(index glbase.Attrib, gltype glbase.Enum, normalized bool, value []uint32) { - C.gl4_2core_glVertexAttribP4uiv(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribP4ui.xml -func (gl *GL) VertexAttribP4ui(index glbase.Attrib, gltype glbase.Enum, normalized bool, value uint32) { - C.gl4_2core_glVertexAttribP4ui(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribP3uiv.xml -func (gl *GL) VertexAttribP3uiv(index glbase.Attrib, gltype glbase.Enum, normalized bool, value []uint32) { - C.gl4_2core_glVertexAttribP3uiv(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribP3ui.xml -func (gl *GL) VertexAttribP3ui(index glbase.Attrib, gltype glbase.Enum, normalized bool, value uint32) { - C.gl4_2core_glVertexAttribP3ui(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribP2uiv.xml -func (gl *GL) VertexAttribP2uiv(index glbase.Attrib, gltype glbase.Enum, normalized bool, value []uint32) { - C.gl4_2core_glVertexAttribP2uiv(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribP2ui.xml -func (gl *GL) VertexAttribP2ui(index glbase.Attrib, gltype glbase.Enum, normalized bool, value uint32) { - C.gl4_2core_glVertexAttribP2ui(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribP1uiv.xml -func (gl *GL) VertexAttribP1uiv(index glbase.Attrib, gltype glbase.Enum, normalized bool, value []uint32) { - C.gl4_2core_glVertexAttribP1uiv(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribP1ui.xml -func (gl *GL) VertexAttribP1ui(index glbase.Attrib, gltype glbase.Enum, normalized bool, value uint32) { - C.gl4_2core_glVertexAttribP1ui(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColorP3uiv.xml -func (gl *GL) SecondaryColorP3uiv(gltype glbase.Enum, color []uint32) { - C.gl4_2core_glSecondaryColorP3uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&color[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColorP3ui.xml -func (gl *GL) SecondaryColorP3ui(gltype glbase.Enum, color uint32) { - C.gl4_2core_glSecondaryColorP3ui(gl.funcs, C.GLenum(gltype), C.GLuint(color)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorP4uiv.xml -func (gl *GL) ColorP4uiv(gltype glbase.Enum, color []uint32) { - C.gl4_2core_glColorP4uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&color[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorP4ui.xml -func (gl *GL) ColorP4ui(gltype glbase.Enum, color uint32) { - C.gl4_2core_glColorP4ui(gl.funcs, C.GLenum(gltype), C.GLuint(color)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorP3uiv.xml -func (gl *GL) ColorP3uiv(gltype glbase.Enum, color []uint32) { - C.gl4_2core_glColorP3uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&color[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorP3ui.xml -func (gl *GL) ColorP3ui(gltype glbase.Enum, color uint32) { - C.gl4_2core_glColorP3ui(gl.funcs, C.GLenum(gltype), C.GLuint(color)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glNormalP3uiv.xml -func (gl *GL) NormalP3uiv(gltype glbase.Enum, coords []uint32) { - C.gl4_2core_glNormalP3uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glNormalP3ui.xml -func (gl *GL) NormalP3ui(gltype glbase.Enum, coords uint32) { - C.gl4_2core_glNormalP3ui(gl.funcs, C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoordP4uiv.xml -func (gl *GL) MultiTexCoordP4uiv(texture, gltype glbase.Enum, coords []uint32) { - C.gl4_2core_glMultiTexCoordP4uiv(gl.funcs, C.GLenum(texture), C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoordP4ui.xml -func (gl *GL) MultiTexCoordP4ui(texture, gltype glbase.Enum, coords uint32) { - C.gl4_2core_glMultiTexCoordP4ui(gl.funcs, C.GLenum(texture), C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoordP3uiv.xml -func (gl *GL) MultiTexCoordP3uiv(texture, gltype glbase.Enum, coords []uint32) { - C.gl4_2core_glMultiTexCoordP3uiv(gl.funcs, C.GLenum(texture), C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoordP3ui.xml -func (gl *GL) MultiTexCoordP3ui(texture, gltype glbase.Enum, coords uint32) { - C.gl4_2core_glMultiTexCoordP3ui(gl.funcs, C.GLenum(texture), C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoordP2uiv.xml -func (gl *GL) MultiTexCoordP2uiv(texture, gltype glbase.Enum, coords []uint32) { - C.gl4_2core_glMultiTexCoordP2uiv(gl.funcs, C.GLenum(texture), C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoordP2ui.xml -func (gl *GL) MultiTexCoordP2ui(texture, gltype glbase.Enum, coords uint32) { - C.gl4_2core_glMultiTexCoordP2ui(gl.funcs, C.GLenum(texture), C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoordP1uiv.xml -func (gl *GL) MultiTexCoordP1uiv(texture, gltype glbase.Enum, coords []uint32) { - C.gl4_2core_glMultiTexCoordP1uiv(gl.funcs, C.GLenum(texture), C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoordP1ui.xml -func (gl *GL) MultiTexCoordP1ui(texture, gltype glbase.Enum, coords uint32) { - C.gl4_2core_glMultiTexCoordP1ui(gl.funcs, C.GLenum(texture), C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordP4uiv.xml -func (gl *GL) TexCoordP4uiv(gltype glbase.Enum, coords []uint32) { - C.gl4_2core_glTexCoordP4uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordP4ui.xml -func (gl *GL) TexCoordP4ui(gltype glbase.Enum, coords uint32) { - C.gl4_2core_glTexCoordP4ui(gl.funcs, C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordP3uiv.xml -func (gl *GL) TexCoordP3uiv(gltype glbase.Enum, coords []uint32) { - C.gl4_2core_glTexCoordP3uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordP3ui.xml -func (gl *GL) TexCoordP3ui(gltype glbase.Enum, coords uint32) { - C.gl4_2core_glTexCoordP3ui(gl.funcs, C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordP2uiv.xml -func (gl *GL) TexCoordP2uiv(gltype glbase.Enum, coords []uint32) { - C.gl4_2core_glTexCoordP2uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordP2ui.xml -func (gl *GL) TexCoordP2ui(gltype glbase.Enum, coords uint32) { - C.gl4_2core_glTexCoordP2ui(gl.funcs, C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordP1uiv.xml -func (gl *GL) TexCoordP1uiv(gltype glbase.Enum, coords []uint32) { - C.gl4_2core_glTexCoordP1uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordP1ui.xml -func (gl *GL) TexCoordP1ui(gltype glbase.Enum, coords uint32) { - C.gl4_2core_glTexCoordP1ui(gl.funcs, C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexP4uiv.xml -func (gl *GL) VertexP4uiv(gltype glbase.Enum, value []uint32) { - C.gl4_2core_glVertexP4uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexP4ui.xml -func (gl *GL) VertexP4ui(gltype glbase.Enum, value uint32) { - C.gl4_2core_glVertexP4ui(gl.funcs, C.GLenum(gltype), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexP3uiv.xml -func (gl *GL) VertexP3uiv(gltype glbase.Enum, value []uint32) { - C.gl4_2core_glVertexP3uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexP3ui.xml -func (gl *GL) VertexP3ui(gltype glbase.Enum, value uint32) { - C.gl4_2core_glVertexP3ui(gl.funcs, C.GLenum(gltype), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexP2uiv.xml -func (gl *GL) VertexP2uiv(gltype glbase.Enum, value []uint32) { - C.gl4_2core_glVertexP2uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexP2ui.xml -func (gl *GL) VertexP2ui(gltype glbase.Enum, value uint32) { - C.gl4_2core_glVertexP2ui(gl.funcs, C.GLenum(gltype), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetQueryObjectui64v.xml -func (gl *GL) GetQueryObjectui64v(id uint32, pname glbase.Enum, params []uint64) { - C.gl4_2core_glGetQueryObjectui64v(gl.funcs, C.GLuint(id), C.GLenum(pname), (*C.GLuint64)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetQueryObjecti64v.xml -func (gl *GL) GetQueryObjecti64v(id uint32, pname glbase.Enum, params []int64) { - C.gl4_2core_glGetQueryObjecti64v(gl.funcs, C.GLuint(id), C.GLenum(pname), (*C.GLint64)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glQueryCounter.xml -func (gl *GL) QueryCounter(id uint32, target glbase.Enum) { - C.gl4_2core_glQueryCounter(gl.funcs, C.GLuint(id), C.GLenum(target)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetSamplerParameterIuiv.xml -func (gl *GL) GetSamplerParameterIuiv(sampler uint32, pname glbase.Enum, params []uint32) { - C.gl4_2core_glGetSamplerParameterIuiv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetSamplerParameterfv.xml -func (gl *GL) GetSamplerParameterfv(sampler uint32, pname glbase.Enum, params []float32) { - C.gl4_2core_glGetSamplerParameterfv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetSamplerParameterIiv.xml -func (gl *GL) GetSamplerParameterIiv(sampler uint32, pname glbase.Enum, params []int32) { - C.gl4_2core_glGetSamplerParameterIiv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetSamplerParameteriv.xml -func (gl *GL) GetSamplerParameteriv(sampler uint32, pname glbase.Enum, params []int32) { - C.gl4_2core_glGetSamplerParameteriv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSamplerParameterIuiv.xml -func (gl *GL) SamplerParameterIuiv(sampler uint32, pname glbase.Enum, param []uint32) { - C.gl4_2core_glSamplerParameterIuiv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶m[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSamplerParameterIiv.xml -func (gl *GL) SamplerParameterIiv(sampler uint32, pname glbase.Enum, param []int32) { - C.gl4_2core_glSamplerParameterIiv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶m[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSamplerParameterfv.xml -func (gl *GL) SamplerParameterfv(sampler uint32, pname glbase.Enum, param []float32) { - C.gl4_2core_glSamplerParameterfv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶m[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSamplerParameterf.xml -func (gl *GL) SamplerParameterf(sampler uint32, pname glbase.Enum, param float32) { - C.gl4_2core_glSamplerParameterf(gl.funcs, C.GLuint(sampler), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSamplerParameteriv.xml -func (gl *GL) SamplerParameteriv(sampler uint32, pname glbase.Enum, param []int32) { - C.gl4_2core_glSamplerParameteriv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶m[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSamplerParameteri.xml -func (gl *GL) SamplerParameteri(sampler uint32, pname glbase.Enum, param int32) { - C.gl4_2core_glSamplerParameteri(gl.funcs, C.GLuint(sampler), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindSampler.xml -func (gl *GL) BindSampler(unit, sampler uint32) { - C.gl4_2core_glBindSampler(gl.funcs, C.GLuint(unit), C.GLuint(sampler)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsSampler.xml -func (gl *GL) IsSampler(sampler uint32) bool { - glresult := C.gl4_2core_glIsSampler(gl.funcs, C.GLuint(sampler)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDeleteSamplers.xml -func (gl *GL) DeleteSamplers(count int, samplers []uint32) { - C.gl4_2core_glDeleteSamplers(gl.funcs, C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&samplers[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGenSamplers.xml -func (gl *GL) GenSamplers(count int, samplers []uint32) { - C.gl4_2core_glGenSamplers(gl.funcs, C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&samplers[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetFragDataIndex.xml -func (gl *GL) GetFragDataIndex(program glbase.Program, name []byte) int32 { - glresult := C.gl4_2core_glGetFragDataIndex(gl.funcs, C.GLuint(program), (*C.GLchar)(unsafe.Pointer(&name[0]))) - return int32(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindFragDataLocationIndexed.xml -func (gl *GL) BindFragDataLocationIndexed(program glbase.Program, colorNumber, index uint32, name []byte) { - C.gl4_2core_glBindFragDataLocationIndexed(gl.funcs, C.GLuint(program), C.GLuint(colorNumber), C.GLuint(index), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribDivisor.xml -func (gl *GL) VertexAttribDivisor(index glbase.Attrib, divisor uint32) { - C.gl4_2core_glVertexAttribDivisor(gl.funcs, C.GLuint(index), C.GLuint(divisor)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetQueryIndexediv.xml -func (gl *GL) GetQueryIndexediv(target glbase.Enum, index uint32, pname glbase.Enum, params []int32) { - C.gl4_2core_glGetQueryIndexediv(gl.funcs, C.GLenum(target), C.GLuint(index), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEndQueryIndexed.xml -func (gl *GL) EndQueryIndexed(target glbase.Enum, index uint32) { - C.gl4_2core_glEndQueryIndexed(gl.funcs, C.GLenum(target), C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBeginQueryIndexed.xml -func (gl *GL) BeginQueryIndexed(target glbase.Enum, index, id uint32) { - C.gl4_2core_glBeginQueryIndexed(gl.funcs, C.GLenum(target), C.GLuint(index), C.GLuint(id)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawTransformFeedbackStream.xml -func (gl *GL) DrawTransformFeedbackStream(mode glbase.Enum, id, stream uint32) { - C.gl4_2core_glDrawTransformFeedbackStream(gl.funcs, C.GLenum(mode), C.GLuint(id), C.GLuint(stream)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawTransformFeedback.xml -func (gl *GL) DrawTransformFeedback(mode glbase.Enum, id uint32) { - C.gl4_2core_glDrawTransformFeedback(gl.funcs, C.GLenum(mode), C.GLuint(id)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glResumeTransformFeedback.xml -func (gl *GL) ResumeTransformFeedback() { - C.gl4_2core_glResumeTransformFeedback(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPauseTransformFeedback.xml -func (gl *GL) PauseTransformFeedback() { - C.gl4_2core_glPauseTransformFeedback(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsTransformFeedback.xml -func (gl *GL) IsTransformFeedback(id uint32) bool { - glresult := C.gl4_2core_glIsTransformFeedback(gl.funcs, C.GLuint(id)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGenTransformFeedbacks.xml -func (gl *GL) GenTransformFeedbacks(n int, ids []uint32) { - C.gl4_2core_glGenTransformFeedbacks(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&ids[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDeleteTransformFeedbacks.xml -func (gl *GL) DeleteTransformFeedbacks(n int, ids []uint32) { - C.gl4_2core_glDeleteTransformFeedbacks(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&ids[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindTransformFeedback.xml -func (gl *GL) BindTransformFeedback(target glbase.Enum, id uint32) { - C.gl4_2core_glBindTransformFeedback(gl.funcs, C.GLenum(target), C.GLuint(id)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPatchParameterfv.xml -func (gl *GL) PatchParameterfv(pname glbase.Enum, values []float32) { - C.gl4_2core_glPatchParameterfv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPatchParameteri.xml -func (gl *GL) PatchParameteri(pname glbase.Enum, value int32) { - C.gl4_2core_glPatchParameteri(gl.funcs, C.GLenum(pname), C.GLint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetProgramStageiv.xml -func (gl *GL) GetProgramStageiv(program glbase.Program, shadertype, pname glbase.Enum, values []int32) { - C.gl4_2core_glGetProgramStageiv(gl.funcs, C.GLuint(program), C.GLenum(shadertype), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetUniformSubroutineuiv.xml -func (gl *GL) GetUniformSubroutineuiv(shadertype glbase.Enum, location glbase.Uniform, params []uint32) { - C.gl4_2core_glGetUniformSubroutineuiv(gl.funcs, C.GLenum(shadertype), C.GLint(location), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformSubroutinesuiv.xml -func (gl *GL) UniformSubroutinesuiv(shadertype glbase.Enum, count int, value []uint32) { - C.gl4_2core_glUniformSubroutinesuiv(gl.funcs, C.GLenum(shadertype), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveSubroutineName.xml -func (gl *GL) GetActiveSubroutineName(program glbase.Program, shadertype glbase.Enum, index uint32, bufSize int32, length []int32, name []byte) { - C.gl4_2core_glGetActiveSubroutineName(gl.funcs, C.GLuint(program), C.GLenum(shadertype), C.GLuint(index), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveSubroutineUniformName.xml -func (gl *GL) GetActiveSubroutineUniformName(program glbase.Program, shadertype glbase.Enum, index uint32, bufSize int32, length []int32, name []byte) { - C.gl4_2core_glGetActiveSubroutineUniformName(gl.funcs, C.GLuint(program), C.GLenum(shadertype), C.GLuint(index), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveSubroutineUniformiv.xml -func (gl *GL) GetActiveSubroutineUniformiv(program glbase.Program, shadertype glbase.Enum, index uint32, pname glbase.Enum, values []int32) { - C.gl4_2core_glGetActiveSubroutineUniformiv(gl.funcs, C.GLuint(program), C.GLenum(shadertype), C.GLuint(index), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetSubroutineIndex.xml -func (gl *GL) GetSubroutineIndex(program glbase.Program, shadertype glbase.Enum, name []byte) uint32 { - glresult := C.gl4_2core_glGetSubroutineIndex(gl.funcs, C.GLuint(program), C.GLenum(shadertype), (*C.GLchar)(unsafe.Pointer(&name[0]))) - return uint32(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetSubroutineUniformLocation.xml -func (gl *GL) GetSubroutineUniformLocation(program glbase.Program, shadertype glbase.Enum, name []byte) int32 { - glresult := C.gl4_2core_glGetSubroutineUniformLocation(gl.funcs, C.GLuint(program), C.GLenum(shadertype), (*C.GLchar)(unsafe.Pointer(&name[0]))) - return int32(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetUniformdv.xml -func (gl *GL) GetUniformdv(program glbase.Program, location glbase.Uniform, params []float64) { - C.gl4_2core_glGetUniformdv(gl.funcs, C.GLuint(program), C.GLint(location), (*C.GLdouble)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix4x3dv.xml -func (gl *GL) UniformMatrix4x3dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_2core_glUniformMatrix4x3dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix4x2dv.xml -func (gl *GL) UniformMatrix4x2dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_2core_glUniformMatrix4x2dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix3x4dv.xml -func (gl *GL) UniformMatrix3x4dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_2core_glUniformMatrix3x4dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix3x2dv.xml -func (gl *GL) UniformMatrix3x2dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_2core_glUniformMatrix3x2dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix2x4dv.xml -func (gl *GL) UniformMatrix2x4dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_2core_glUniformMatrix2x4dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix2x3dv.xml -func (gl *GL) UniformMatrix2x3dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_2core_glUniformMatrix2x3dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix4dv.xml -func (gl *GL) UniformMatrix4dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_2core_glUniformMatrix4dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix3dv.xml -func (gl *GL) UniformMatrix3dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_2core_glUniformMatrix3dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix2dv.xml -func (gl *GL) UniformMatrix2dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_2core_glUniformMatrix2dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniform4dv.xml -func (gl *GL) Uniform4dv(location glbase.Uniform, count int, value []float64) { - C.gl4_2core_glUniform4dv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniform3dv.xml -func (gl *GL) Uniform3dv(location glbase.Uniform, count int, value []float64) { - C.gl4_2core_glUniform3dv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniform2dv.xml -func (gl *GL) Uniform2dv(location glbase.Uniform, count int, value []float64) { - C.gl4_2core_glUniform2dv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniform1dv.xml -func (gl *GL) Uniform1dv(location glbase.Uniform, count int, value []float64) { - C.gl4_2core_glUniform1dv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniform4d.xml -func (gl *GL) Uniform4d(location glbase.Uniform, v0, v1, v2, v3 float64) { - C.gl4_2core_glUniform4d(gl.funcs, C.GLint(location), C.GLdouble(v0), C.GLdouble(v1), C.GLdouble(v2), C.GLdouble(v3)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniform3d.xml -func (gl *GL) Uniform3d(location glbase.Uniform, v0, v1, v2 float64) { - C.gl4_2core_glUniform3d(gl.funcs, C.GLint(location), C.GLdouble(v0), C.GLdouble(v1), C.GLdouble(v2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniform2d.xml -func (gl *GL) Uniform2d(location glbase.Uniform, v0, v1 float64) { - C.gl4_2core_glUniform2d(gl.funcs, C.GLint(location), C.GLdouble(v0), C.GLdouble(v1)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniform1d.xml -func (gl *GL) Uniform1d(location glbase.Uniform, v0 float64) { - C.gl4_2core_glUniform1d(gl.funcs, C.GLint(location), C.GLdouble(v0)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawElementsIndirect.xml -func (gl *GL) DrawElementsIndirect(mode, gltype glbase.Enum, indirect interface{}) { - var indirect_ptr unsafe.Pointer - var indirect_v = reflect.ValueOf(indirect) - if indirect != nil && indirect_v.Kind() != reflect.Slice { - panic("parameter indirect must be a slice") - } - if indirect != nil { - indirect_ptr = unsafe.Pointer(indirect_v.Index(0).Addr().Pointer()) - } - C.gl4_2core_glDrawElementsIndirect(gl.funcs, C.GLenum(mode), C.GLenum(gltype), indirect_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawArraysIndirect.xml -func (gl *GL) DrawArraysIndirect(mode glbase.Enum, indirect interface{}) { - var indirect_ptr unsafe.Pointer - var indirect_v = reflect.ValueOf(indirect) - if indirect != nil && indirect_v.Kind() != reflect.Slice { - panic("parameter indirect must be a slice") - } - if indirect != nil { - indirect_ptr = unsafe.Pointer(indirect_v.Index(0).Addr().Pointer()) - } - C.gl4_2core_glDrawArraysIndirect(gl.funcs, C.GLenum(mode), indirect_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendFuncSeparatei.xml -func (gl *GL) BlendFuncSeparatei(buf uint32, srcRGB, dstRGB, srcAlpha, dstAlpha glbase.Enum) { - C.gl4_2core_glBlendFuncSeparatei(gl.funcs, C.GLuint(buf), C.GLenum(srcRGB), C.GLenum(dstRGB), C.GLenum(srcAlpha), C.GLenum(dstAlpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendFunci.xml -func (gl *GL) BlendFunci(buf uint32, src, dst glbase.Enum) { - C.gl4_2core_glBlendFunci(gl.funcs, C.GLuint(buf), C.GLenum(src), C.GLenum(dst)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendEquationSeparatei.xml -func (gl *GL) BlendEquationSeparatei(buf uint32, modeRGB, modeAlpha glbase.Enum) { - C.gl4_2core_glBlendEquationSeparatei(gl.funcs, C.GLuint(buf), C.GLenum(modeRGB), C.GLenum(modeAlpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendEquationi.xml -func (gl *GL) BlendEquationi(buf uint32, mode glbase.Enum) { - C.gl4_2core_glBlendEquationi(gl.funcs, C.GLuint(buf), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMinSampleShading.xml -func (gl *GL) MinSampleShading(value float32) { - C.gl4_2core_glMinSampleShading(gl.funcs, C.GLfloat(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetDoublei_v.xml -func (gl *GL) GetDoublei_v(target glbase.Enum, index uint32, data []float64) { - C.gl4_2core_glGetDoublei_v(gl.funcs, C.GLenum(target), C.GLuint(index), (*C.GLdouble)(unsafe.Pointer(&data[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetFloati_v.xml -func (gl *GL) GetFloati_v(target glbase.Enum, index uint32, data []float32) { - C.gl4_2core_glGetFloati_v(gl.funcs, C.GLenum(target), C.GLuint(index), (*C.GLfloat)(unsafe.Pointer(&data[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDepthRangeIndexed.xml -func (gl *GL) DepthRangeIndexed(index uint32, n, f float64) { - C.gl4_2core_glDepthRangeIndexed(gl.funcs, C.GLuint(index), C.GLdouble(n), C.GLdouble(f)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDepthRangeArrayv.xml -func (gl *GL) DepthRangeArrayv(first uint32, count int, v []float64) { - C.gl4_2core_glDepthRangeArrayv(gl.funcs, C.GLuint(first), C.GLsizei(count), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glScissorIndexedv.xml -func (gl *GL) ScissorIndexedv(index uint32, v []int32) { - C.gl4_2core_glScissorIndexedv(gl.funcs, C.GLuint(index), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glScissorIndexed.xml -func (gl *GL) ScissorIndexed(index uint32, left, bottom int32, width, height int) { - C.gl4_2core_glScissorIndexed(gl.funcs, C.GLuint(index), C.GLint(left), C.GLint(bottom), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glScissorArrayv.xml -func (gl *GL) ScissorArrayv(first uint32, count int, v []int32) { - C.gl4_2core_glScissorArrayv(gl.funcs, C.GLuint(first), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glViewportIndexedfv.xml -func (gl *GL) ViewportIndexedfv(index uint32, v []float32) { - C.gl4_2core_glViewportIndexedfv(gl.funcs, C.GLuint(index), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glViewportIndexedf.xml -func (gl *GL) ViewportIndexedf(index uint32, x, y, w, h float32) { - C.gl4_2core_glViewportIndexedf(gl.funcs, C.GLuint(index), C.GLfloat(x), C.GLfloat(y), C.GLfloat(w), C.GLfloat(h)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glViewportArrayv.xml -func (gl *GL) ViewportArrayv(first uint32, count int, v []float32) { - C.gl4_2core_glViewportArrayv(gl.funcs, C.GLuint(first), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetVertexAttribLdv.xml -func (gl *GL) GetVertexAttribLdv(index glbase.Attrib, pname glbase.Enum, params []float64) { - C.gl4_2core_glGetVertexAttribLdv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribLPointer.xml -func (gl *GL) VertexAttribLPointer(index glbase.Attrib, size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl4_2core_glVertexAttribLPointer(gl.funcs, C.GLuint(index), C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribL4dv.xml -func (gl *GL) VertexAttribL4dv(index glbase.Attrib, v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_2core_glVertexAttribL4dv(gl.funcs, C.GLuint(index), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribL3dv.xml -func (gl *GL) VertexAttribL3dv(index glbase.Attrib, v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_2core_glVertexAttribL3dv(gl.funcs, C.GLuint(index), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribL2dv.xml -func (gl *GL) VertexAttribL2dv(index glbase.Attrib, v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_2core_glVertexAttribL2dv(gl.funcs, C.GLuint(index), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribL1dv.xml -func (gl *GL) VertexAttribL1dv(index glbase.Attrib, v []float64) { - C.gl4_2core_glVertexAttribL1dv(gl.funcs, C.GLuint(index), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribL4d.xml -func (gl *GL) VertexAttribL4d(index glbase.Attrib, x, y, z, w float64) { - C.gl4_2core_glVertexAttribL4d(gl.funcs, C.GLuint(index), C.GLdouble(x), C.GLdouble(y), C.GLdouble(z), C.GLdouble(w)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribL3d.xml -func (gl *GL) VertexAttribL3d(index glbase.Attrib, x, y, z float64) { - C.gl4_2core_glVertexAttribL3d(gl.funcs, C.GLuint(index), C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribL2d.xml -func (gl *GL) VertexAttribL2d(index glbase.Attrib, x, y float64) { - C.gl4_2core_glVertexAttribL2d(gl.funcs, C.GLuint(index), C.GLdouble(x), C.GLdouble(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribL1d.xml -func (gl *GL) VertexAttribL1d(index glbase.Attrib, x float64) { - C.gl4_2core_glVertexAttribL1d(gl.funcs, C.GLuint(index), C.GLdouble(x)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetProgramPipelineInfoLog.xml -func (gl *GL) GetProgramPipelineInfoLog(pipeline uint32, bufSize int32, length []int32, infoLog []byte) { - C.gl4_2core_glGetProgramPipelineInfoLog(gl.funcs, C.GLuint(pipeline), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLchar)(unsafe.Pointer(&infoLog[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glValidateProgramPipeline.xml -func (gl *GL) ValidateProgramPipeline(pipeline uint32) { - C.gl4_2core_glValidateProgramPipeline(gl.funcs, C.GLuint(pipeline)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix4x3dv.xml -func (gl *GL) ProgramUniformMatrix4x3dv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float64) { - if len(value) != 3 { - panic("parameter value has incorrect length") - } - C.gl4_2core_glProgramUniformMatrix4x3dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix3x4dv.xml -func (gl *GL) ProgramUniformMatrix3x4dv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float64) { - if len(value) != 4 { - panic("parameter value has incorrect length") - } - C.gl4_2core_glProgramUniformMatrix3x4dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix4x2dv.xml -func (gl *GL) ProgramUniformMatrix4x2dv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float64) { - if len(value) != 2 { - panic("parameter value has incorrect length") - } - C.gl4_2core_glProgramUniformMatrix4x2dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix2x4dv.xml -func (gl *GL) ProgramUniformMatrix2x4dv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float64) { - if len(value) != 4 { - panic("parameter value has incorrect length") - } - C.gl4_2core_glProgramUniformMatrix2x4dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix3x2dv.xml -func (gl *GL) ProgramUniformMatrix3x2dv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float64) { - if len(value) != 2 { - panic("parameter value has incorrect length") - } - C.gl4_2core_glProgramUniformMatrix3x2dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix2x3dv.xml -func (gl *GL) ProgramUniformMatrix2x3dv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float64) { - if len(value) != 3 { - panic("parameter value has incorrect length") - } - C.gl4_2core_glProgramUniformMatrix2x3dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix4x3fv.xml -func (gl *GL) ProgramUniformMatrix4x3fv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float32) { - if len(value) != 3 { - panic("parameter value has incorrect length") - } - C.gl4_2core_glProgramUniformMatrix4x3fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix3x4fv.xml -func (gl *GL) ProgramUniformMatrix3x4fv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float32) { - if len(value) != 4 { - panic("parameter value has incorrect length") - } - C.gl4_2core_glProgramUniformMatrix3x4fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix4x2fv.xml -func (gl *GL) ProgramUniformMatrix4x2fv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float32) { - if len(value) != 2 { - panic("parameter value has incorrect length") - } - C.gl4_2core_glProgramUniformMatrix4x2fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix2x4fv.xml -func (gl *GL) ProgramUniformMatrix2x4fv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float32) { - if len(value) != 4 { - panic("parameter value has incorrect length") - } - C.gl4_2core_glProgramUniformMatrix2x4fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix3x2fv.xml -func (gl *GL) ProgramUniformMatrix3x2fv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float32) { - if len(value) != 2 { - panic("parameter value has incorrect length") - } - C.gl4_2core_glProgramUniformMatrix3x2fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix2x3fv.xml -func (gl *GL) ProgramUniformMatrix2x3fv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float32) { - if len(value) != 3 { - panic("parameter value has incorrect length") - } - C.gl4_2core_glProgramUniformMatrix2x3fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix4dv.xml -func (gl *GL) ProgramUniformMatrix4dv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float64) { - if len(value) != 4 { - panic("parameter value has incorrect length") - } - C.gl4_2core_glProgramUniformMatrix4dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix3dv.xml -func (gl *GL) ProgramUniformMatrix3dv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float64) { - if len(value) != 3 { - panic("parameter value has incorrect length") - } - C.gl4_2core_glProgramUniformMatrix3dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix2dv.xml -func (gl *GL) ProgramUniformMatrix2dv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float64) { - if len(value) != 2 { - panic("parameter value has incorrect length") - } - C.gl4_2core_glProgramUniformMatrix2dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix4fv.xml -func (gl *GL) ProgramUniformMatrix4fv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float32) { - if len(value) != 4 { - panic("parameter value has incorrect length") - } - C.gl4_2core_glProgramUniformMatrix4fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix3fv.xml -func (gl *GL) ProgramUniformMatrix3fv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float32) { - if len(value) != 3 { - panic("parameter value has incorrect length") - } - C.gl4_2core_glProgramUniformMatrix3fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix2fv.xml -func (gl *GL) ProgramUniformMatrix2fv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float32) { - if len(value) != 2 { - panic("parameter value has incorrect length") - } - C.gl4_2core_glProgramUniformMatrix2fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform4uiv.xml -func (gl *GL) ProgramUniform4uiv(program glbase.Program, location glbase.Uniform, count int, value []uint32) { - C.gl4_2core_glProgramUniform4uiv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform4ui.xml -func (gl *GL) ProgramUniform4ui(program glbase.Program, location glbase.Uniform, v0, v1, v2, v3 uint32) { - C.gl4_2core_glProgramUniform4ui(gl.funcs, C.GLuint(program), C.GLint(location), C.GLuint(v0), C.GLuint(v1), C.GLuint(v2), C.GLuint(v3)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform4dv.xml -func (gl *GL) ProgramUniform4dv(program glbase.Program, location glbase.Uniform, count int, value []float64) { - if len(value) != 4 { - panic("parameter value has incorrect length") - } - C.gl4_2core_glProgramUniform4dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform4d.xml -func (gl *GL) ProgramUniform4d(program glbase.Program, location glbase.Uniform, v0, v1, v2, v3 float64) { - C.gl4_2core_glProgramUniform4d(gl.funcs, C.GLuint(program), C.GLint(location), C.GLdouble(v0), C.GLdouble(v1), C.GLdouble(v2), C.GLdouble(v3)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform4fv.xml -func (gl *GL) ProgramUniform4fv(program glbase.Program, location glbase.Uniform, count int, value []float32) { - if len(value) != 4 { - panic("parameter value has incorrect length") - } - C.gl4_2core_glProgramUniform4fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform4f.xml -func (gl *GL) ProgramUniform4f(program glbase.Program, location glbase.Uniform, v0, v1, v2, v3 float32) { - C.gl4_2core_glProgramUniform4f(gl.funcs, C.GLuint(program), C.GLint(location), C.GLfloat(v0), C.GLfloat(v1), C.GLfloat(v2), C.GLfloat(v3)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform4iv.xml -func (gl *GL) ProgramUniform4iv(program glbase.Program, location glbase.Uniform, count int, value []int32) { - if len(value) != 4 { - panic("parameter value has incorrect length") - } - C.gl4_2core_glProgramUniform4iv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform4i.xml -func (gl *GL) ProgramUniform4i(program glbase.Program, location glbase.Uniform, v0, v1, v2, v3 int32) { - C.gl4_2core_glProgramUniform4i(gl.funcs, C.GLuint(program), C.GLint(location), C.GLint(v0), C.GLint(v1), C.GLint(v2), C.GLint(v3)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform3uiv.xml -func (gl *GL) ProgramUniform3uiv(program glbase.Program, location glbase.Uniform, count int, value []uint32) { - C.gl4_2core_glProgramUniform3uiv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform3ui.xml -func (gl *GL) ProgramUniform3ui(program glbase.Program, location glbase.Uniform, v0, v1, v2 uint32) { - C.gl4_2core_glProgramUniform3ui(gl.funcs, C.GLuint(program), C.GLint(location), C.GLuint(v0), C.GLuint(v1), C.GLuint(v2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform3dv.xml -func (gl *GL) ProgramUniform3dv(program glbase.Program, location glbase.Uniform, count int, value []float64) { - if len(value) != 3 { - panic("parameter value has incorrect length") - } - C.gl4_2core_glProgramUniform3dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform3d.xml -func (gl *GL) ProgramUniform3d(program glbase.Program, location glbase.Uniform, v0, v1, v2 float64) { - C.gl4_2core_glProgramUniform3d(gl.funcs, C.GLuint(program), C.GLint(location), C.GLdouble(v0), C.GLdouble(v1), C.GLdouble(v2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform3fv.xml -func (gl *GL) ProgramUniform3fv(program glbase.Program, location glbase.Uniform, count int, value []float32) { - if len(value) != 3 { - panic("parameter value has incorrect length") - } - C.gl4_2core_glProgramUniform3fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform3f.xml -func (gl *GL) ProgramUniform3f(program glbase.Program, location glbase.Uniform, v0, v1, v2 float32) { - C.gl4_2core_glProgramUniform3f(gl.funcs, C.GLuint(program), C.GLint(location), C.GLfloat(v0), C.GLfloat(v1), C.GLfloat(v2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform3iv.xml -func (gl *GL) ProgramUniform3iv(program glbase.Program, location glbase.Uniform, count int, value []int32) { - if len(value) != 3 { - panic("parameter value has incorrect length") - } - C.gl4_2core_glProgramUniform3iv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform3i.xml -func (gl *GL) ProgramUniform3i(program glbase.Program, location glbase.Uniform, v0, v1, v2 int32) { - C.gl4_2core_glProgramUniform3i(gl.funcs, C.GLuint(program), C.GLint(location), C.GLint(v0), C.GLint(v1), C.GLint(v2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform2uiv.xml -func (gl *GL) ProgramUniform2uiv(program glbase.Program, location glbase.Uniform, count int, value []uint32) { - C.gl4_2core_glProgramUniform2uiv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform2ui.xml -func (gl *GL) ProgramUniform2ui(program glbase.Program, location glbase.Uniform, v0, v1 uint32) { - C.gl4_2core_glProgramUniform2ui(gl.funcs, C.GLuint(program), C.GLint(location), C.GLuint(v0), C.GLuint(v1)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform2dv.xml -func (gl *GL) ProgramUniform2dv(program glbase.Program, location glbase.Uniform, count int, value []float64) { - if len(value) != 2 { - panic("parameter value has incorrect length") - } - C.gl4_2core_glProgramUniform2dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform2d.xml -func (gl *GL) ProgramUniform2d(program glbase.Program, location glbase.Uniform, v0, v1 float64) { - C.gl4_2core_glProgramUniform2d(gl.funcs, C.GLuint(program), C.GLint(location), C.GLdouble(v0), C.GLdouble(v1)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform2fv.xml -func (gl *GL) ProgramUniform2fv(program glbase.Program, location glbase.Uniform, count int, value []float32) { - if len(value) != 2 { - panic("parameter value has incorrect length") - } - C.gl4_2core_glProgramUniform2fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform2f.xml -func (gl *GL) ProgramUniform2f(program glbase.Program, location glbase.Uniform, v0, v1 float32) { - C.gl4_2core_glProgramUniform2f(gl.funcs, C.GLuint(program), C.GLint(location), C.GLfloat(v0), C.GLfloat(v1)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform2iv.xml -func (gl *GL) ProgramUniform2iv(program glbase.Program, location glbase.Uniform, count int, value []int32) { - if len(value) != 2 { - panic("parameter value has incorrect length") - } - C.gl4_2core_glProgramUniform2iv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform2i.xml -func (gl *GL) ProgramUniform2i(program glbase.Program, location glbase.Uniform, v0, v1 int32) { - C.gl4_2core_glProgramUniform2i(gl.funcs, C.GLuint(program), C.GLint(location), C.GLint(v0), C.GLint(v1)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform1uiv.xml -func (gl *GL) ProgramUniform1uiv(program glbase.Program, location glbase.Uniform, count int, value []uint32) { - C.gl4_2core_glProgramUniform1uiv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform1ui.xml -func (gl *GL) ProgramUniform1ui(program glbase.Program, location glbase.Uniform, v0 uint32) { - C.gl4_2core_glProgramUniform1ui(gl.funcs, C.GLuint(program), C.GLint(location), C.GLuint(v0)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform1dv.xml -func (gl *GL) ProgramUniform1dv(program glbase.Program, location glbase.Uniform, count int, value []float64) { - C.gl4_2core_glProgramUniform1dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform1d.xml -func (gl *GL) ProgramUniform1d(program glbase.Program, location glbase.Uniform, v0 float64) { - C.gl4_2core_glProgramUniform1d(gl.funcs, C.GLuint(program), C.GLint(location), C.GLdouble(v0)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform1fv.xml -func (gl *GL) ProgramUniform1fv(program glbase.Program, location glbase.Uniform, count int, value []float32) { - C.gl4_2core_glProgramUniform1fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform1f.xml -func (gl *GL) ProgramUniform1f(program glbase.Program, location glbase.Uniform, v0 float32) { - C.gl4_2core_glProgramUniform1f(gl.funcs, C.GLuint(program), C.GLint(location), C.GLfloat(v0)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform1iv.xml -func (gl *GL) ProgramUniform1iv(program glbase.Program, location glbase.Uniform, count int, value []int32) { - C.gl4_2core_glProgramUniform1iv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform1i.xml -func (gl *GL) ProgramUniform1i(program glbase.Program, location glbase.Uniform, v0 int32) { - C.gl4_2core_glProgramUniform1i(gl.funcs, C.GLuint(program), C.GLint(location), C.GLint(v0)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetProgramPipelineiv.xml -func (gl *GL) GetProgramPipelineiv(pipeline uint32, pname glbase.Enum, params []int32) { - C.gl4_2core_glGetProgramPipelineiv(gl.funcs, C.GLuint(pipeline), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsProgramPipeline.xml -func (gl *GL) IsProgramPipeline(pipeline uint32) bool { - glresult := C.gl4_2core_glIsProgramPipeline(gl.funcs, C.GLuint(pipeline)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGenProgramPipelines.xml -func (gl *GL) GenProgramPipelines(n int, pipelines []uint32) { - C.gl4_2core_glGenProgramPipelines(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&pipelines[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDeleteProgramPipelines.xml -func (gl *GL) DeleteProgramPipelines(n int, pipelines []uint32) { - C.gl4_2core_glDeleteProgramPipelines(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&pipelines[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindProgramPipeline.xml -func (gl *GL) BindProgramPipeline(pipeline uint32) { - C.gl4_2core_glBindProgramPipeline(gl.funcs, C.GLuint(pipeline)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glActiveShaderProgram.xml -func (gl *GL) ActiveShaderProgram(pipeline uint32, program glbase.Program) { - C.gl4_2core_glActiveShaderProgram(gl.funcs, C.GLuint(pipeline), C.GLuint(program)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUseProgramStages.xml -func (gl *GL) UseProgramStages(pipeline uint32, stages glbase.Bitfield, program glbase.Program) { - C.gl4_2core_glUseProgramStages(gl.funcs, C.GLuint(pipeline), C.GLbitfield(stages), C.GLuint(program)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramParameteri.xml -func (gl *GL) ProgramParameteri(program glbase.Program, pname glbase.Enum, value int32) { - C.gl4_2core_glProgramParameteri(gl.funcs, C.GLuint(program), C.GLenum(pname), C.GLint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramBinary.xml -func (gl *GL) ProgramBinary(program glbase.Program, binaryFormat glbase.Enum, binary interface{}, length int32) { - var binary_ptr unsafe.Pointer - var binary_v = reflect.ValueOf(binary) - if binary != nil && binary_v.Kind() != reflect.Slice { - panic("parameter binary must be a slice") - } - if binary != nil { - binary_ptr = unsafe.Pointer(binary_v.Index(0).Addr().Pointer()) - } - C.gl4_2core_glProgramBinary(gl.funcs, C.GLuint(program), C.GLenum(binaryFormat), binary_ptr, C.GLsizei(length)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetProgramBinary.xml -func (gl *GL) GetProgramBinary(program glbase.Program, bufSize int32, length []int32, binaryFormat []glbase.Enum, binary interface{}) { - var binary_ptr unsafe.Pointer - var binary_v = reflect.ValueOf(binary) - if binary != nil && binary_v.Kind() != reflect.Slice { - panic("parameter binary must be a slice") - } - if binary != nil { - binary_ptr = unsafe.Pointer(binary_v.Index(0).Addr().Pointer()) - } - C.gl4_2core_glGetProgramBinary(gl.funcs, C.GLuint(program), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLenum)(unsafe.Pointer(&binaryFormat[0])), binary_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearDepthf.xml -func (gl *GL) ClearDepthf(dd float32) { - C.gl4_2core_glClearDepthf(gl.funcs, C.GLfloat(dd)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDepthRangef.xml -func (gl *GL) DepthRangef(n, f float32) { - C.gl4_2core_glDepthRangef(gl.funcs, C.GLfloat(n), C.GLfloat(f)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetShaderPrecisionFormat.xml -func (gl *GL) GetShaderPrecisionFormat(shadertype, precisionType glbase.Enum, range_, precision []int32) { - C.gl4_2core_glGetShaderPrecisionFormat(gl.funcs, C.GLenum(shadertype), C.GLenum(precisionType), (*C.GLint)(unsafe.Pointer(&range_[0])), (*C.GLint)(unsafe.Pointer(&precision[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glShaderBinary.xml -func (gl *GL) ShaderBinary(count int, shaders []glbase.Shader, binaryFormat glbase.Enum, binary interface{}, length int32) { - var binary_ptr unsafe.Pointer - var binary_v = reflect.ValueOf(binary) - if binary != nil && binary_v.Kind() != reflect.Slice { - panic("parameter binary must be a slice") - } - if binary != nil { - binary_ptr = unsafe.Pointer(binary_v.Index(0).Addr().Pointer()) - } - C.gl4_2core_glShaderBinary(gl.funcs, C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&shaders[0])), C.GLenum(binaryFormat), binary_ptr, C.GLsizei(length)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glReleaseShaderCompiler.xml -func (gl *GL) ReleaseShaderCompiler() { - C.gl4_2core_glReleaseShaderCompiler(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexStorage3D.xml -func (gl *GL) TexStorage3D(target glbase.Enum, levels int32, internalFormat glbase.Enum, width, height int, depth int32) { - C.gl4_2core_glTexStorage3D(gl.funcs, C.GLenum(target), C.GLsizei(levels), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexStorage2D.xml -func (gl *GL) TexStorage2D(target glbase.Enum, levels int32, internalFormat glbase.Enum, width, height int) { - C.gl4_2core_glTexStorage2D(gl.funcs, C.GLenum(target), C.GLsizei(levels), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexStorage1D.xml -func (gl *GL) TexStorage1D(target glbase.Enum, levels int32, internalFormat glbase.Enum, width int) { - C.gl4_2core_glTexStorage1D(gl.funcs, C.GLenum(target), C.GLsizei(levels), C.GLenum(internalFormat), C.GLsizei(width)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMemoryBarrier.xml -func (gl *GL) MemoryBarrier(barriers glbase.Bitfield) { - C.gl4_2core_glMemoryBarrier(gl.funcs, C.GLbitfield(barriers)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindImageTexture.xml -func (gl *GL) BindImageTexture(unit uint32, texture glbase.Texture, level int, layered bool, layer int32, access, format glbase.Enum) { - C.gl4_2core_glBindImageTexture(gl.funcs, C.GLuint(unit), C.GLuint(texture), C.GLint(level), *(*C.GLboolean)(unsafe.Pointer(&layered)), C.GLint(layer), C.GLenum(access), C.GLenum(format)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveAtomicCounterBufferiv.xml -func (gl *GL) GetActiveAtomicCounterBufferiv(program glbase.Program, bufferIndex uint32, pname glbase.Enum, params []int32) { - C.gl4_2core_glGetActiveAtomicCounterBufferiv(gl.funcs, C.GLuint(program), C.GLuint(bufferIndex), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetInternalformativ.xml -func (gl *GL) GetInternalformativ(target, internalFormat, pname glbase.Enum, bufSize int32, params []int32) { - C.gl4_2core_glGetInternalformativ(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLenum(pname), C.GLsizei(bufSize), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawTransformFeedbackStreamInstanced.xml -func (gl *GL) DrawTransformFeedbackStreamInstanced(mode glbase.Enum, id, stream uint32, instancecount int32) { - C.gl4_2core_glDrawTransformFeedbackStreamInstanced(gl.funcs, C.GLenum(mode), C.GLuint(id), C.GLuint(stream), C.GLsizei(instancecount)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawTransformFeedbackInstanced.xml -func (gl *GL) DrawTransformFeedbackInstanced(mode glbase.Enum, id uint32, instancecount int32) { - C.gl4_2core_glDrawTransformFeedbackInstanced(gl.funcs, C.GLenum(mode), C.GLuint(id), C.GLsizei(instancecount)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawElementsInstancedBaseVertexBaseInstance.xml -func (gl *GL) DrawElementsInstancedBaseVertexBaseInstance(mode glbase.Enum, count int, gltype glbase.Enum, indices interface{}, instancecount, basevertex int32, baseinstance uint32) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl4_2core_glDrawElementsInstancedBaseVertexBaseInstance(gl.funcs, C.GLenum(mode), C.GLsizei(count), C.GLenum(gltype), indices_ptr, C.GLsizei(instancecount), C.GLint(basevertex), C.GLuint(baseinstance)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawElementsInstancedBaseInstance.xml -func (gl *GL) DrawElementsInstancedBaseInstance(mode glbase.Enum, count int, gltype glbase.Enum, indices interface{}, instancecount int32, baseinstance uint32) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl4_2core_glDrawElementsInstancedBaseInstance(gl.funcs, C.GLenum(mode), C.GLsizei(count), C.GLenum(gltype), indices_ptr, C.GLsizei(instancecount), C.GLuint(baseinstance)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawArraysInstancedBaseInstance.xml -func (gl *GL) DrawArraysInstancedBaseInstance(mode glbase.Enum, first, count int, instancecount int32, baseinstance uint32) { - C.gl4_2core_glDrawArraysInstancedBaseInstance(gl.funcs, C.GLenum(mode), C.GLint(first), C.GLsizei(count), C.GLsizei(instancecount), C.GLuint(baseinstance)) -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.3compat/funcs.cpp b/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.3compat/funcs.cpp deleted file mode 100644 index 04ab8fadd7..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.3compat/funcs.cpp +++ /dev/null @@ -1,5556 +0,0 @@ - -// ** file automatically generated by glgen -- do not edit manually ** - -#include -#include - -#include "funcs.h" - -void *gl4_3compat_funcs() { - QOpenGLFunctions_4_3_Compatibility* funcs = QOpenGLContext::currentContext()->versionFunctions(); - if (!funcs) { - return 0; - } - funcs->initializeOpenGLFunctions(); - return funcs; -} - - -void gl4_3compat_glViewport(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glViewport(x, y, width, height); -} - -void gl4_3compat_glDepthRange(void *_glfuncs, GLdouble nearVal, GLdouble farVal) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthRange(nearVal, farVal); -} - -GLboolean gl4_3compat_glIsEnabled(void *_glfuncs, GLenum cap) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsEnabled(cap); -} - -void gl4_3compat_glGetTexLevelParameteriv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexLevelParameteriv(target, level, pname, params); -} - -void gl4_3compat_glGetTexLevelParameterfv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexLevelParameterfv(target, level, pname, params); -} - -void gl4_3compat_glGetTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameteriv(target, pname, params); -} - -void gl4_3compat_glGetTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameterfv(target, pname, params); -} - -void gl4_3compat_glGetTexImage(void *_glfuncs, GLenum target, GLint level, GLenum format, GLenum gltype, GLvoid* pixels) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexImage(target, level, format, gltype, pixels); -} - -void gl4_3compat_glGetIntegerv(void *_glfuncs, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetIntegerv(pname, params); -} - -void gl4_3compat_glGetFloatv(void *_glfuncs, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetFloatv(pname, params); -} - -GLenum gl4_3compat_glGetError(void *_glfuncs) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetError(); -} - -void gl4_3compat_glGetDoublev(void *_glfuncs, GLenum pname, GLdouble* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetDoublev(pname, params); -} - -void gl4_3compat_glGetBooleanv(void *_glfuncs, GLenum pname, GLboolean* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBooleanv(pname, params); -} - -void gl4_3compat_glReadPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum gltype, GLvoid* pixels) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glReadPixels(x, y, width, height, format, gltype, pixels); -} - -void gl4_3compat_glReadBuffer(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glReadBuffer(mode); -} - -void gl4_3compat_glPixelStorei(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelStorei(pname, param); -} - -void gl4_3compat_glPixelStoref(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelStoref(pname, param); -} - -void gl4_3compat_glDepthFunc(void *_glfuncs, GLenum glfunc) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthFunc(glfunc); -} - -void gl4_3compat_glStencilOp(void *_glfuncs, GLenum fail, GLenum zfail, GLenum zpass) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilOp(fail, zfail, zpass); -} - -void gl4_3compat_glStencilFunc(void *_glfuncs, GLenum glfunc, GLint ref, GLuint mask) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilFunc(glfunc, ref, mask); -} - -void gl4_3compat_glLogicOp(void *_glfuncs, GLenum opcode) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLogicOp(opcode); -} - -void gl4_3compat_glBlendFunc(void *_glfuncs, GLenum sfactor, GLenum dfactor) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendFunc(sfactor, dfactor); -} - -void gl4_3compat_glFlush(void *_glfuncs) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFlush(); -} - -void gl4_3compat_glFinish(void *_glfuncs) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFinish(); -} - -void gl4_3compat_glEnable(void *_glfuncs, GLenum cap) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnable(cap); -} - -void gl4_3compat_glDisable(void *_glfuncs, GLenum cap) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDisable(cap); -} - -void gl4_3compat_glDepthMask(void *_glfuncs, GLboolean flag) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthMask(flag); -} - -void gl4_3compat_glColorMask(void *_glfuncs, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorMask(red, green, blue, alpha); -} - -void gl4_3compat_glStencilMask(void *_glfuncs, GLuint mask) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilMask(mask); -} - -void gl4_3compat_glClearDepth(void *_glfuncs, GLdouble depth) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearDepth(depth); -} - -void gl4_3compat_glClearStencil(void *_glfuncs, GLint s) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearStencil(s); -} - -void gl4_3compat_glClearColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearColor(red, green, blue, alpha); -} - -void gl4_3compat_glClear(void *_glfuncs, GLbitfield mask) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClear(mask); -} - -void gl4_3compat_glDrawBuffer(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawBuffer(mode); -} - -void gl4_3compat_glTexImage2D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage2D(target, level, internalFormat, width, height, border, format, gltype, pixels); -} - -void gl4_3compat_glTexImage1D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage1D(target, level, internalFormat, width, border, format, gltype, pixels); -} - -void gl4_3compat_glTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameteriv(target, pname, params); -} - -void gl4_3compat_glTexParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint param) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameteri(target, pname, param); -} - -void gl4_3compat_glTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterfv(target, pname, params); -} - -void gl4_3compat_glTexParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterf(target, pname, param); -} - -void gl4_3compat_glScissor(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScissor(x, y, width, height); -} - -void gl4_3compat_glPolygonMode(void *_glfuncs, GLenum face, GLenum mode) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPolygonMode(face, mode); -} - -void gl4_3compat_glPointSize(void *_glfuncs, GLfloat size) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointSize(size); -} - -void gl4_3compat_glLineWidth(void *_glfuncs, GLfloat width) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLineWidth(width); -} - -void gl4_3compat_glHint(void *_glfuncs, GLenum target, GLenum mode) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glHint(target, mode); -} - -void gl4_3compat_glFrontFace(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFrontFace(mode); -} - -void gl4_3compat_glCullFace(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCullFace(mode); -} - -void gl4_3compat_glIndexubv(void *_glfuncs, const GLubyte* c) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexubv(c); -} - -void gl4_3compat_glIndexub(void *_glfuncs, GLubyte c) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexub(c); -} - -GLboolean gl4_3compat_glIsTexture(void *_glfuncs, GLuint texture) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsTexture(texture); -} - -void gl4_3compat_glGenTextures(void *_glfuncs, GLsizei n, GLuint* textures) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenTextures(n, textures); -} - -void gl4_3compat_glDeleteTextures(void *_glfuncs, GLsizei n, const GLuint* textures) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteTextures(n, textures); -} - -void gl4_3compat_glBindTexture(void *_glfuncs, GLenum target, GLuint texture) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindTexture(target, texture); -} - -void gl4_3compat_glTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, gltype, pixels); -} - -void gl4_3compat_glTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexSubImage1D(target, level, xoffset, width, format, gltype, pixels); -} - -void gl4_3compat_glCopyTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height); -} - -void gl4_3compat_glCopyTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexSubImage1D(target, level, xoffset, x, y, width); -} - -void gl4_3compat_glCopyTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexImage2D(target, level, internalFormat, x, y, width, height, border); -} - -void gl4_3compat_glCopyTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexImage1D(target, level, internalFormat, x, y, width, border); -} - -void gl4_3compat_glPolygonOffset(void *_glfuncs, GLfloat factor, GLfloat units) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPolygonOffset(factor, units); -} - -void gl4_3compat_glDrawElements(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElements(mode, count, gltype, indices); -} - -void gl4_3compat_glDrawArrays(void *_glfuncs, GLenum mode, GLint first, GLsizei count) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawArrays(mode, first, count); -} - -void gl4_3compat_glCopyTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexSubImage3D(target, level, xoffset, yoffset, zoffset, x, y, width, height); -} - -void gl4_3compat_glTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, gltype, pixels); -} - -void gl4_3compat_glTexImage3D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage3D(target, level, internalFormat, width, height, depth, border, format, gltype, pixels); -} - -void gl4_3compat_glDrawRangeElements(void *_glfuncs, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum gltype, const GLvoid* indices) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawRangeElements(mode, start, end, count, gltype, indices); -} - -void gl4_3compat_glBlendEquation(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendEquation(mode); -} - -void gl4_3compat_glBlendColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendColor(red, green, blue, alpha); -} - -void gl4_3compat_glGetCompressedTexImage(void *_glfuncs, GLenum target, GLint level, GLvoid* img) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetCompressedTexImage(target, level, img); -} - -void gl4_3compat_glCompressedTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexSubImage1D(target, level, xoffset, width, format, imageSize, data); -} - -void gl4_3compat_glCompressedTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data); -} - -void gl4_3compat_glCompressedTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data); -} - -void gl4_3compat_glCompressedTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexImage1D(target, level, internalFormat, width, border, imageSize, data); -} - -void gl4_3compat_glCompressedTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexImage2D(target, level, internalFormat, width, height, border, imageSize, data); -} - -void gl4_3compat_glCompressedTexImage3D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexImage3D(target, level, internalFormat, width, height, depth, border, imageSize, data); -} - -void gl4_3compat_glSampleCoverage(void *_glfuncs, GLfloat value, GLboolean invert) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSampleCoverage(value, invert); -} - -void gl4_3compat_glActiveTexture(void *_glfuncs, GLenum texture) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glActiveTexture(texture); -} - -void gl4_3compat_glPointParameteriv(void *_glfuncs, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameteriv(pname, params); -} - -void gl4_3compat_glPointParameteri(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameteri(pname, param); -} - -void gl4_3compat_glPointParameterfv(void *_glfuncs, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameterfv(pname, params); -} - -void gl4_3compat_glPointParameterf(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameterf(pname, param); -} - -void gl4_3compat_glMultiDrawArrays(void *_glfuncs, GLenum mode, const GLint* first, const GLsizei* count, GLsizei drawcount) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiDrawArrays(mode, first, count, drawcount); -} - -void gl4_3compat_glBlendFuncSeparate(void *_glfuncs, GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendFuncSeparate(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha); -} - -void gl4_3compat_glGetBufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBufferParameteriv(target, pname, params); -} - -GLboolean gl4_3compat_glUnmapBuffer(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glUnmapBuffer(target); -} - -void gl4_3compat_glGetBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, GLvoid* data) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBufferSubData(target, offset, size, data); -} - -void gl4_3compat_glBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBufferSubData(target, offset, size, data); -} - -void gl4_3compat_glBufferData(void *_glfuncs, GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBufferData(target, size, data, usage); -} - -GLboolean gl4_3compat_glIsBuffer(void *_glfuncs, GLuint buffer) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsBuffer(buffer); -} - -void gl4_3compat_glGenBuffers(void *_glfuncs, GLsizei n, GLuint* buffers) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenBuffers(n, buffers); -} - -void gl4_3compat_glDeleteBuffers(void *_glfuncs, GLsizei n, const GLuint* buffers) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteBuffers(n, buffers); -} - -void gl4_3compat_glBindBuffer(void *_glfuncs, GLenum target, GLuint buffer) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindBuffer(target, buffer); -} - -void gl4_3compat_glGetQueryObjectuiv(void *_glfuncs, GLuint id, GLenum pname, GLuint* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryObjectuiv(id, pname, params); -} - -void gl4_3compat_glGetQueryObjectiv(void *_glfuncs, GLuint id, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryObjectiv(id, pname, params); -} - -void gl4_3compat_glGetQueryiv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryiv(target, pname, params); -} - -void gl4_3compat_glEndQuery(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndQuery(target); -} - -void gl4_3compat_glBeginQuery(void *_glfuncs, GLenum target, GLuint id) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBeginQuery(target, id); -} - -GLboolean gl4_3compat_glIsQuery(void *_glfuncs, GLuint id) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsQuery(id); -} - -void gl4_3compat_glDeleteQueries(void *_glfuncs, GLsizei n, const GLuint* ids) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteQueries(n, ids); -} - -void gl4_3compat_glGenQueries(void *_glfuncs, GLsizei n, GLuint* ids) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenQueries(n, ids); -} - -void gl4_3compat_glVertexAttribPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLboolean normalized, GLsizei stride, const GLvoid* offset) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribPointer(index, size, gltype, normalized, stride, offset); -} - -void gl4_3compat_glValidateProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glValidateProgram(program); -} - -void gl4_3compat_glUniformMatrix4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4fv(location, count, transpose, value); -} - -void gl4_3compat_glUniformMatrix3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3fv(location, count, transpose, value); -} - -void gl4_3compat_glUniformMatrix2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2fv(location, count, transpose, value); -} - -void gl4_3compat_glUniform4iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4iv(location, count, value); -} - -void gl4_3compat_glUniform3iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3iv(location, count, value); -} - -void gl4_3compat_glUniform2iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2iv(location, count, value); -} - -void gl4_3compat_glUniform1iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1iv(location, count, value); -} - -void gl4_3compat_glUniform4fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4fv(location, count, value); -} - -void gl4_3compat_glUniform3fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3fv(location, count, value); -} - -void gl4_3compat_glUniform2fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2fv(location, count, value); -} - -void gl4_3compat_glUniform1fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1fv(location, count, value); -} - -void gl4_3compat_glUniform4i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2, GLint v3) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4i(location, v0, v1, v2, v3); -} - -void gl4_3compat_glUniform3i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3i(location, v0, v1, v2); -} - -void gl4_3compat_glUniform2i(void *_glfuncs, GLint location, GLint v0, GLint v1) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2i(location, v0, v1); -} - -void gl4_3compat_glUniform1i(void *_glfuncs, GLint location, GLint v0) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1i(location, v0); -} - -void gl4_3compat_glUniform4f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4f(location, v0, v1, v2, v3); -} - -void gl4_3compat_glUniform3f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3f(location, v0, v1, v2); -} - -void gl4_3compat_glUniform2f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2f(location, v0, v1); -} - -void gl4_3compat_glUniform1f(void *_glfuncs, GLint location, GLfloat v0) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1f(location, v0); -} - -void gl4_3compat_glUseProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUseProgram(program); -} - -void gl4_3compat_glShaderSource(void *_glfuncs, GLuint shader, GLsizei count, const GLchar** source, const GLint* length) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glShaderSource(shader, count, source, length); -} - -void gl4_3compat_glLinkProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLinkProgram(program); -} - -GLboolean gl4_3compat_glIsShader(void *_glfuncs, GLuint shader) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsShader(shader); -} - -GLboolean gl4_3compat_glIsProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsProgram(program); -} - -void gl4_3compat_glGetVertexAttribiv(void *_glfuncs, GLuint index, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribiv(index, pname, params); -} - -void gl4_3compat_glGetVertexAttribfv(void *_glfuncs, GLuint index, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribfv(index, pname, params); -} - -void gl4_3compat_glGetVertexAttribdv(void *_glfuncs, GLuint index, GLenum pname, GLdouble* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribdv(index, pname, params); -} - -void gl4_3compat_glGetUniformiv(void *_glfuncs, GLuint program, GLint location, GLint* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetUniformiv(program, location, params); -} - -void gl4_3compat_glGetUniformfv(void *_glfuncs, GLuint program, GLint location, GLfloat* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetUniformfv(program, location, params); -} - -GLint gl4_3compat_glGetUniformLocation(void *_glfuncs, GLuint program, const GLchar* name) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetUniformLocation(program, name); -} - -void gl4_3compat_glGetShaderSource(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* source) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetShaderSource(shader, bufSize, length, source); -} - -void gl4_3compat_glGetShaderInfoLog(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* infoLog) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetShaderInfoLog(shader, bufSize, length, infoLog); -} - -void gl4_3compat_glGetShaderiv(void *_glfuncs, GLuint shader, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetShaderiv(shader, pname, params); -} - -void gl4_3compat_glGetProgramInfoLog(void *_glfuncs, GLuint program, GLsizei bufSize, GLsizei* length, GLchar* infoLog) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetProgramInfoLog(program, bufSize, length, infoLog); -} - -void gl4_3compat_glGetProgramiv(void *_glfuncs, GLuint program, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetProgramiv(program, pname, params); -} - -GLint gl4_3compat_glGetAttribLocation(void *_glfuncs, GLuint program, const GLchar* name) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetAttribLocation(program, name); -} - -void gl4_3compat_glGetAttachedShaders(void *_glfuncs, GLuint program, GLsizei maxCount, GLsizei* count, GLuint* obj) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetAttachedShaders(program, maxCount, count, obj); -} - -void gl4_3compat_glGetActiveUniform(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniform(program, index, bufSize, length, size, gltype, name); -} - -void gl4_3compat_glGetActiveAttrib(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveAttrib(program, index, bufSize, length, size, gltype, name); -} - -void gl4_3compat_glEnableVertexAttribArray(void *_glfuncs, GLuint index) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnableVertexAttribArray(index); -} - -void gl4_3compat_glDisableVertexAttribArray(void *_glfuncs, GLuint index) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDisableVertexAttribArray(index); -} - -void gl4_3compat_glDetachShader(void *_glfuncs, GLuint program, GLuint shader) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDetachShader(program, shader); -} - -void gl4_3compat_glDeleteShader(void *_glfuncs, GLuint shader) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteShader(shader); -} - -void gl4_3compat_glDeleteProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteProgram(program); -} - -GLuint gl4_3compat_glCreateShader(void *_glfuncs, GLenum gltype) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glCreateShader(gltype); -} - -GLuint gl4_3compat_glCreateProgram(void *_glfuncs) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glCreateProgram(); -} - -void gl4_3compat_glCompileShader(void *_glfuncs, GLuint shader) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompileShader(shader); -} - -void gl4_3compat_glBindAttribLocation(void *_glfuncs, GLuint program, GLuint index, const GLchar* name) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindAttribLocation(program, index, name); -} - -void gl4_3compat_glAttachShader(void *_glfuncs, GLuint program, GLuint shader) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glAttachShader(program, shader); -} - -void gl4_3compat_glStencilMaskSeparate(void *_glfuncs, GLenum face, GLuint mask) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilMaskSeparate(face, mask); -} - -void gl4_3compat_glStencilFuncSeparate(void *_glfuncs, GLenum face, GLenum glfunc, GLint ref, GLuint mask) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilFuncSeparate(face, glfunc, ref, mask); -} - -void gl4_3compat_glStencilOpSeparate(void *_glfuncs, GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilOpSeparate(face, sfail, dpfail, dppass); -} - -void gl4_3compat_glDrawBuffers(void *_glfuncs, GLsizei n, const GLenum* bufs) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawBuffers(n, bufs); -} - -void gl4_3compat_glBlendEquationSeparate(void *_glfuncs, GLenum modeRGB, GLenum modeAlpha) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendEquationSeparate(modeRGB, modeAlpha); -} - -void gl4_3compat_glUniformMatrix4x3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4x3fv(location, count, transpose, value); -} - -void gl4_3compat_glUniformMatrix3x4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3x4fv(location, count, transpose, value); -} - -void gl4_3compat_glUniformMatrix4x2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4x2fv(location, count, transpose, value); -} - -void gl4_3compat_glUniformMatrix2x4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2x4fv(location, count, transpose, value); -} - -void gl4_3compat_glUniformMatrix3x2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3x2fv(location, count, transpose, value); -} - -void gl4_3compat_glUniformMatrix2x3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2x3fv(location, count, transpose, value); -} - -GLboolean gl4_3compat_glIsVertexArray(void *_glfuncs, GLuint array) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsVertexArray(array); -} - -void gl4_3compat_glGenVertexArrays(void *_glfuncs, GLsizei n, GLuint* arrays) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenVertexArrays(n, arrays); -} - -void gl4_3compat_glDeleteVertexArrays(void *_glfuncs, GLsizei n, const GLuint* arrays) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteVertexArrays(n, arrays); -} - -void gl4_3compat_glBindVertexArray(void *_glfuncs, GLuint array) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindVertexArray(array); -} - -void gl4_3compat_glFlushMappedBufferRange(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr length) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFlushMappedBufferRange(target, offset, length); -} - -void gl4_3compat_glFramebufferTextureLayer(void *_glfuncs, GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTextureLayer(target, attachment, texture, level, layer); -} - -void gl4_3compat_glRenderbufferStorageMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRenderbufferStorageMultisample(target, samples, internalFormat, width, height); -} - -void gl4_3compat_glBlitFramebuffer(void *_glfuncs, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter); -} - -void gl4_3compat_glGenerateMipmap(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenerateMipmap(target); -} - -void gl4_3compat_glGetFramebufferAttachmentParameteriv(void *_glfuncs, GLenum target, GLenum attachment, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetFramebufferAttachmentParameteriv(target, attachment, pname, params); -} - -void gl4_3compat_glFramebufferRenderbuffer(void *_glfuncs, GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer); -} - -void gl4_3compat_glFramebufferTexture3D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTexture3D(target, attachment, textarget, texture, level, zoffset); -} - -void gl4_3compat_glFramebufferTexture2D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTexture2D(target, attachment, textarget, texture, level); -} - -void gl4_3compat_glFramebufferTexture1D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTexture1D(target, attachment, textarget, texture, level); -} - -GLenum gl4_3compat_glCheckFramebufferStatus(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glCheckFramebufferStatus(target); -} - -void gl4_3compat_glGenFramebuffers(void *_glfuncs, GLsizei n, GLuint* framebuffers) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenFramebuffers(n, framebuffers); -} - -void gl4_3compat_glDeleteFramebuffers(void *_glfuncs, GLsizei n, const GLuint* framebuffers) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteFramebuffers(n, framebuffers); -} - -void gl4_3compat_glBindFramebuffer(void *_glfuncs, GLenum target, GLuint framebuffer) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindFramebuffer(target, framebuffer); -} - -GLboolean gl4_3compat_glIsFramebuffer(void *_glfuncs, GLuint framebuffer) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsFramebuffer(framebuffer); -} - -void gl4_3compat_glGetRenderbufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetRenderbufferParameteriv(target, pname, params); -} - -void gl4_3compat_glRenderbufferStorage(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRenderbufferStorage(target, internalFormat, width, height); -} - -void gl4_3compat_glGenRenderbuffers(void *_glfuncs, GLsizei n, GLuint* renderbuffers) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenRenderbuffers(n, renderbuffers); -} - -void gl4_3compat_glDeleteRenderbuffers(void *_glfuncs, GLsizei n, const GLuint* renderbuffers) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteRenderbuffers(n, renderbuffers); -} - -void gl4_3compat_glBindRenderbuffer(void *_glfuncs, GLenum target, GLuint renderbuffer) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindRenderbuffer(target, renderbuffer); -} - -GLboolean gl4_3compat_glIsRenderbuffer(void *_glfuncs, GLuint renderbuffer) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsRenderbuffer(renderbuffer); -} - -void gl4_3compat_glClearBufferfi(void *_glfuncs, GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearBufferfi(buffer, drawbuffer, depth, stencil); -} - -void gl4_3compat_glClearBufferfv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLfloat* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearBufferfv(buffer, drawbuffer, value); -} - -void gl4_3compat_glClearBufferuiv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLuint* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearBufferuiv(buffer, drawbuffer, value); -} - -void gl4_3compat_glClearBufferiv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLint* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearBufferiv(buffer, drawbuffer, value); -} - -void gl4_3compat_glGetTexParameterIuiv(void *_glfuncs, GLenum target, GLenum pname, GLuint* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameterIuiv(target, pname, params); -} - -void gl4_3compat_glGetTexParameterIiv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameterIiv(target, pname, params); -} - -void gl4_3compat_glTexParameterIuiv(void *_glfuncs, GLenum target, GLenum pname, const GLuint* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterIuiv(target, pname, params); -} - -void gl4_3compat_glTexParameterIiv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterIiv(target, pname, params); -} - -void gl4_3compat_glUniform4uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4uiv(location, count, value); -} - -void gl4_3compat_glUniform3uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3uiv(location, count, value); -} - -void gl4_3compat_glUniform2uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2uiv(location, count, value); -} - -void gl4_3compat_glUniform1uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1uiv(location, count, value); -} - -void gl4_3compat_glUniform4ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4ui(location, v0, v1, v2, v3); -} - -void gl4_3compat_glUniform3ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1, GLuint v2) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3ui(location, v0, v1, v2); -} - -void gl4_3compat_glUniform2ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2ui(location, v0, v1); -} - -void gl4_3compat_glUniform1ui(void *_glfuncs, GLint location, GLuint v0) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1ui(location, v0); -} - -GLint gl4_3compat_glGetFragDataLocation(void *_glfuncs, GLuint program, const GLchar* name) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetFragDataLocation(program, name); -} - -void gl4_3compat_glBindFragDataLocation(void *_glfuncs, GLuint program, GLuint color, const GLchar* name) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindFragDataLocation(program, color, name); -} - -void gl4_3compat_glGetUniformuiv(void *_glfuncs, GLuint program, GLint location, GLuint* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetUniformuiv(program, location, params); -} - -void gl4_3compat_glGetVertexAttribIuiv(void *_glfuncs, GLuint index, GLenum pname, GLuint* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribIuiv(index, pname, params); -} - -void gl4_3compat_glGetVertexAttribIiv(void *_glfuncs, GLuint index, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribIiv(index, pname, params); -} - -void gl4_3compat_glVertexAttribIPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribIPointer(index, size, gltype, stride, pointer); -} - -void gl4_3compat_glEndConditionalRender(void *_glfuncs) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndConditionalRender(); -} - -void gl4_3compat_glBeginConditionalRender(void *_glfuncs, GLuint id, GLenum mode) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBeginConditionalRender(id, mode); -} - -void gl4_3compat_glClampColor(void *_glfuncs, GLenum target, GLenum clamp) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClampColor(target, clamp); -} - -void gl4_3compat_glGetTransformFeedbackVarying(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* gltype, GLchar* name) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTransformFeedbackVarying(program, index, bufSize, length, size, gltype, name); -} - -void gl4_3compat_glBindBufferBase(void *_glfuncs, GLenum target, GLuint index, GLuint buffer) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindBufferBase(target, index, buffer); -} - -void gl4_3compat_glBindBufferRange(void *_glfuncs, GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindBufferRange(target, index, buffer, offset, size); -} - -void gl4_3compat_glEndTransformFeedback(void *_glfuncs) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndTransformFeedback(); -} - -void gl4_3compat_glBeginTransformFeedback(void *_glfuncs, GLenum primitiveMode) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBeginTransformFeedback(primitiveMode); -} - -GLboolean gl4_3compat_glIsEnabledi(void *_glfuncs, GLenum target, GLuint index) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsEnabledi(target, index); -} - -void gl4_3compat_glDisablei(void *_glfuncs, GLenum target, GLuint index) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDisablei(target, index); -} - -void gl4_3compat_glEnablei(void *_glfuncs, GLenum target, GLuint index) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnablei(target, index); -} - -void gl4_3compat_glGetIntegeri_v(void *_glfuncs, GLenum target, GLuint index, GLint* data) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetIntegeri_v(target, index, data); -} - -void gl4_3compat_glGetBooleani_v(void *_glfuncs, GLenum target, GLuint index, GLboolean* data) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBooleani_v(target, index, data); -} - -void gl4_3compat_glColorMaski(void *_glfuncs, GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorMaski(index, r, g, b, a); -} - -void gl4_3compat_glCopyBufferSubData(void *_glfuncs, GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyBufferSubData(readTarget, writeTarget, readOffset, writeOffset, size); -} - -void gl4_3compat_glUniformBlockBinding(void *_glfuncs, GLuint program, GLuint v0, GLuint v1) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformBlockBinding(program, v0, v1); -} - -void gl4_3compat_glGetActiveUniformBlockName(void *_glfuncs, GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformBlockName) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniformBlockName(program, uniformBlockIndex, bufSize, length, uniformBlockName); -} - -void gl4_3compat_glGetActiveUniformBlockiv(void *_glfuncs, GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniformBlockiv(program, uniformBlockIndex, pname, params); -} - -GLuint gl4_3compat_glGetUniformBlockIndex(void *_glfuncs, GLuint program, const GLchar* uniformBlockName) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetUniformBlockIndex(program, uniformBlockName); -} - -void gl4_3compat_glGetActiveUniformName(void *_glfuncs, GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformName) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniformName(program, uniformIndex, bufSize, length, uniformName); -} - -void gl4_3compat_glGetActiveUniformsiv(void *_glfuncs, GLuint program, GLsizei uniformCount, const GLuint* uniformIndices, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniformsiv(program, uniformCount, uniformIndices, pname, params); -} - -void gl4_3compat_glPrimitiveRestartIndex(void *_glfuncs, GLuint index) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPrimitiveRestartIndex(index); -} - -void gl4_3compat_glTexBuffer(void *_glfuncs, GLenum target, GLenum internalFormat, GLuint buffer) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexBuffer(target, internalFormat, buffer); -} - -void gl4_3compat_glDrawElementsInstanced(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLsizei instancecount) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElementsInstanced(mode, count, gltype, indices, instancecount); -} - -void gl4_3compat_glDrawArraysInstanced(void *_glfuncs, GLenum mode, GLint first, GLsizei count, GLsizei instancecount) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawArraysInstanced(mode, first, count, instancecount); -} - -void gl4_3compat_glSampleMaski(void *_glfuncs, GLuint index, GLbitfield mask) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSampleMaski(index, mask); -} - -void gl4_3compat_glGetMultisamplefv(void *_glfuncs, GLenum pname, GLuint index, GLfloat* val) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMultisamplefv(pname, index, val); -} - -void gl4_3compat_glTexImage3DMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage3DMultisample(target, samples, internalFormat, width, height, depth, fixedsamplelocations); -} - -void gl4_3compat_glTexImage2DMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage2DMultisample(target, samples, internalFormat, width, height, fixedsamplelocations); -} - -void gl4_3compat_glGetSynciv(void *_glfuncs, GLsync sync, GLenum pname, GLsizei bufSize, GLsizei* length, GLint* values) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetSynciv(sync, pname, bufSize, length, values); -} - -void gl4_3compat_glGetInteger64v(void *_glfuncs, GLenum pname, GLint64* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetInteger64v(pname, params); -} - -void gl4_3compat_glWaitSync(void *_glfuncs, GLsync sync, GLbitfield flags, GLuint64 timeout) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWaitSync(sync, flags, timeout); -} - -GLenum gl4_3compat_glClientWaitSync(void *_glfuncs, GLsync sync, GLbitfield flags, GLuint64 timeout) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glClientWaitSync(sync, flags, timeout); -} - -void gl4_3compat_glDeleteSync(void *_glfuncs, GLsync sync) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteSync(sync); -} - -GLboolean gl4_3compat_glIsSync(void *_glfuncs, GLsync sync) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsSync(sync); -} - -GLsync gl4_3compat_glFenceSync(void *_glfuncs, GLenum condition, GLbitfield flags) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glFenceSync(condition, flags); -} - -void gl4_3compat_glProvokingVertex(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProvokingVertex(mode); -} - -void gl4_3compat_glDrawElementsInstancedBaseVertex(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLsizei instancecount, GLint basevertex) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElementsInstancedBaseVertex(mode, count, gltype, indices, instancecount, basevertex); -} - -void gl4_3compat_glDrawRangeElementsBaseVertex(void *_glfuncs, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum gltype, const GLvoid* indices, GLint basevertex) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawRangeElementsBaseVertex(mode, start, end, count, gltype, indices, basevertex); -} - -void gl4_3compat_glDrawElementsBaseVertex(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLint basevertex) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElementsBaseVertex(mode, count, gltype, indices, basevertex); -} - -void gl4_3compat_glFramebufferTexture(void *_glfuncs, GLenum target, GLenum attachment, GLuint texture, GLint level) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTexture(target, attachment, texture, level); -} - -void gl4_3compat_glGetBufferParameteri64v(void *_glfuncs, GLenum target, GLenum pname, GLint64* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBufferParameteri64v(target, pname, params); -} - -void gl4_3compat_glGetInteger64i_v(void *_glfuncs, GLenum target, GLuint index, GLint64* data) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetInteger64i_v(target, index, data); -} - -void gl4_3compat_glVertexAttribP4uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP4uiv(index, gltype, normalized, value); -} - -void gl4_3compat_glVertexAttribP4ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP4ui(index, gltype, normalized, value); -} - -void gl4_3compat_glVertexAttribP3uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP3uiv(index, gltype, normalized, value); -} - -void gl4_3compat_glVertexAttribP3ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP3ui(index, gltype, normalized, value); -} - -void gl4_3compat_glVertexAttribP2uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP2uiv(index, gltype, normalized, value); -} - -void gl4_3compat_glVertexAttribP2ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP2ui(index, gltype, normalized, value); -} - -void gl4_3compat_glVertexAttribP1uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP1uiv(index, gltype, normalized, value); -} - -void gl4_3compat_glVertexAttribP1ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP1ui(index, gltype, normalized, value); -} - -void gl4_3compat_glSecondaryColorP3uiv(void *_glfuncs, GLenum gltype, const GLuint* color) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColorP3uiv(gltype, color); -} - -void gl4_3compat_glSecondaryColorP3ui(void *_glfuncs, GLenum gltype, GLuint color) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColorP3ui(gltype, color); -} - -void gl4_3compat_glColorP4uiv(void *_glfuncs, GLenum gltype, const GLuint* color) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorP4uiv(gltype, color); -} - -void gl4_3compat_glColorP4ui(void *_glfuncs, GLenum gltype, GLuint color) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorP4ui(gltype, color); -} - -void gl4_3compat_glColorP3uiv(void *_glfuncs, GLenum gltype, const GLuint* color) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorP3uiv(gltype, color); -} - -void gl4_3compat_glColorP3ui(void *_glfuncs, GLenum gltype, GLuint color) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorP3ui(gltype, color); -} - -void gl4_3compat_glNormalP3uiv(void *_glfuncs, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormalP3uiv(gltype, coords); -} - -void gl4_3compat_glNormalP3ui(void *_glfuncs, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormalP3ui(gltype, coords); -} - -void gl4_3compat_glMultiTexCoordP4uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP4uiv(texture, gltype, coords); -} - -void gl4_3compat_glMultiTexCoordP4ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP4ui(texture, gltype, coords); -} - -void gl4_3compat_glMultiTexCoordP3uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP3uiv(texture, gltype, coords); -} - -void gl4_3compat_glMultiTexCoordP3ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP3ui(texture, gltype, coords); -} - -void gl4_3compat_glMultiTexCoordP2uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP2uiv(texture, gltype, coords); -} - -void gl4_3compat_glMultiTexCoordP2ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP2ui(texture, gltype, coords); -} - -void gl4_3compat_glMultiTexCoordP1uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP1uiv(texture, gltype, coords); -} - -void gl4_3compat_glMultiTexCoordP1ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP1ui(texture, gltype, coords); -} - -void gl4_3compat_glTexCoordP4uiv(void *_glfuncs, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP4uiv(gltype, coords); -} - -void gl4_3compat_glTexCoordP4ui(void *_glfuncs, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP4ui(gltype, coords); -} - -void gl4_3compat_glTexCoordP3uiv(void *_glfuncs, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP3uiv(gltype, coords); -} - -void gl4_3compat_glTexCoordP3ui(void *_glfuncs, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP3ui(gltype, coords); -} - -void gl4_3compat_glTexCoordP2uiv(void *_glfuncs, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP2uiv(gltype, coords); -} - -void gl4_3compat_glTexCoordP2ui(void *_glfuncs, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP2ui(gltype, coords); -} - -void gl4_3compat_glTexCoordP1uiv(void *_glfuncs, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP1uiv(gltype, coords); -} - -void gl4_3compat_glTexCoordP1ui(void *_glfuncs, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP1ui(gltype, coords); -} - -void gl4_3compat_glVertexP4uiv(void *_glfuncs, GLenum gltype, const GLuint* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexP4uiv(gltype, value); -} - -void gl4_3compat_glVertexP4ui(void *_glfuncs, GLenum gltype, GLuint value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexP4ui(gltype, value); -} - -void gl4_3compat_glVertexP3uiv(void *_glfuncs, GLenum gltype, const GLuint* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexP3uiv(gltype, value); -} - -void gl4_3compat_glVertexP3ui(void *_glfuncs, GLenum gltype, GLuint value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexP3ui(gltype, value); -} - -void gl4_3compat_glVertexP2uiv(void *_glfuncs, GLenum gltype, const GLuint* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexP2uiv(gltype, value); -} - -void gl4_3compat_glVertexP2ui(void *_glfuncs, GLenum gltype, GLuint value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexP2ui(gltype, value); -} - -void gl4_3compat_glGetQueryObjectui64v(void *_glfuncs, GLuint id, GLenum pname, GLuint64* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryObjectui64v(id, pname, params); -} - -void gl4_3compat_glGetQueryObjecti64v(void *_glfuncs, GLuint id, GLenum pname, GLint64* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryObjecti64v(id, pname, params); -} - -void gl4_3compat_glQueryCounter(void *_glfuncs, GLuint id, GLenum target) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glQueryCounter(id, target); -} - -void gl4_3compat_glGetSamplerParameterIuiv(void *_glfuncs, GLuint sampler, GLenum pname, GLuint* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetSamplerParameterIuiv(sampler, pname, params); -} - -void gl4_3compat_glGetSamplerParameterfv(void *_glfuncs, GLuint sampler, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetSamplerParameterfv(sampler, pname, params); -} - -void gl4_3compat_glGetSamplerParameterIiv(void *_glfuncs, GLuint sampler, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetSamplerParameterIiv(sampler, pname, params); -} - -void gl4_3compat_glGetSamplerParameteriv(void *_glfuncs, GLuint sampler, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetSamplerParameteriv(sampler, pname, params); -} - -void gl4_3compat_glSamplerParameterIuiv(void *_glfuncs, GLuint sampler, GLenum pname, const GLuint* param) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSamplerParameterIuiv(sampler, pname, param); -} - -void gl4_3compat_glSamplerParameterIiv(void *_glfuncs, GLuint sampler, GLenum pname, const GLint* param) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSamplerParameterIiv(sampler, pname, param); -} - -void gl4_3compat_glSamplerParameterfv(void *_glfuncs, GLuint sampler, GLenum pname, const GLfloat* param) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSamplerParameterfv(sampler, pname, param); -} - -void gl4_3compat_glSamplerParameterf(void *_glfuncs, GLuint sampler, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSamplerParameterf(sampler, pname, param); -} - -void gl4_3compat_glSamplerParameteriv(void *_glfuncs, GLuint sampler, GLenum pname, const GLint* param) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSamplerParameteriv(sampler, pname, param); -} - -void gl4_3compat_glSamplerParameteri(void *_glfuncs, GLuint sampler, GLenum pname, GLint param) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSamplerParameteri(sampler, pname, param); -} - -void gl4_3compat_glBindSampler(void *_glfuncs, GLuint unit, GLuint sampler) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindSampler(unit, sampler); -} - -GLboolean gl4_3compat_glIsSampler(void *_glfuncs, GLuint sampler) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsSampler(sampler); -} - -void gl4_3compat_glDeleteSamplers(void *_glfuncs, GLsizei count, const GLuint* samplers) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteSamplers(count, samplers); -} - -void gl4_3compat_glGenSamplers(void *_glfuncs, GLsizei count, GLuint* samplers) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenSamplers(count, samplers); -} - -GLint gl4_3compat_glGetFragDataIndex(void *_glfuncs, GLuint program, const GLchar* name) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetFragDataIndex(program, name); -} - -void gl4_3compat_glBindFragDataLocationIndexed(void *_glfuncs, GLuint program, GLuint colorNumber, GLuint index, const GLchar* name) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindFragDataLocationIndexed(program, colorNumber, index, name); -} - -void gl4_3compat_glVertexAttribDivisor(void *_glfuncs, GLuint index, GLuint divisor) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribDivisor(index, divisor); -} - -void gl4_3compat_glGetQueryIndexediv(void *_glfuncs, GLenum target, GLuint index, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryIndexediv(target, index, pname, params); -} - -void gl4_3compat_glEndQueryIndexed(void *_glfuncs, GLenum target, GLuint index) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndQueryIndexed(target, index); -} - -void gl4_3compat_glBeginQueryIndexed(void *_glfuncs, GLenum target, GLuint index, GLuint id) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBeginQueryIndexed(target, index, id); -} - -void gl4_3compat_glDrawTransformFeedbackStream(void *_glfuncs, GLenum mode, GLuint id, GLuint stream) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawTransformFeedbackStream(mode, id, stream); -} - -void gl4_3compat_glDrawTransformFeedback(void *_glfuncs, GLenum mode, GLuint id) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawTransformFeedback(mode, id); -} - -void gl4_3compat_glResumeTransformFeedback(void *_glfuncs) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glResumeTransformFeedback(); -} - -void gl4_3compat_glPauseTransformFeedback(void *_glfuncs) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPauseTransformFeedback(); -} - -GLboolean gl4_3compat_glIsTransformFeedback(void *_glfuncs, GLuint id) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsTransformFeedback(id); -} - -void gl4_3compat_glGenTransformFeedbacks(void *_glfuncs, GLsizei n, GLuint* ids) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenTransformFeedbacks(n, ids); -} - -void gl4_3compat_glDeleteTransformFeedbacks(void *_glfuncs, GLsizei n, const GLuint* ids) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteTransformFeedbacks(n, ids); -} - -void gl4_3compat_glBindTransformFeedback(void *_glfuncs, GLenum target, GLuint id) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindTransformFeedback(target, id); -} - -void gl4_3compat_glPatchParameterfv(void *_glfuncs, GLenum pname, const GLfloat* values) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPatchParameterfv(pname, values); -} - -void gl4_3compat_glPatchParameteri(void *_glfuncs, GLenum pname, GLint value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPatchParameteri(pname, value); -} - -void gl4_3compat_glGetProgramStageiv(void *_glfuncs, GLuint program, GLenum shadertype, GLenum pname, GLint* values) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetProgramStageiv(program, shadertype, pname, values); -} - -void gl4_3compat_glGetUniformSubroutineuiv(void *_glfuncs, GLenum shadertype, GLint location, GLuint* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetUniformSubroutineuiv(shadertype, location, params); -} - -void gl4_3compat_glUniformSubroutinesuiv(void *_glfuncs, GLenum shadertype, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformSubroutinesuiv(shadertype, count, value); -} - -void gl4_3compat_glGetActiveSubroutineName(void *_glfuncs, GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei* length, GLchar* name) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveSubroutineName(program, shadertype, index, bufSize, length, name); -} - -void gl4_3compat_glGetActiveSubroutineUniformName(void *_glfuncs, GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei* length, GLchar* name) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveSubroutineUniformName(program, shadertype, index, bufSize, length, name); -} - -void gl4_3compat_glGetActiveSubroutineUniformiv(void *_glfuncs, GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint* values) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveSubroutineUniformiv(program, shadertype, index, pname, values); -} - -GLuint gl4_3compat_glGetSubroutineIndex(void *_glfuncs, GLuint program, GLenum shadertype, const GLchar* name) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetSubroutineIndex(program, shadertype, name); -} - -GLint gl4_3compat_glGetSubroutineUniformLocation(void *_glfuncs, GLuint program, GLenum shadertype, const GLchar* name) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetSubroutineUniformLocation(program, shadertype, name); -} - -void gl4_3compat_glGetUniformdv(void *_glfuncs, GLuint program, GLint location, GLdouble* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetUniformdv(program, location, params); -} - -void gl4_3compat_glUniformMatrix4x3dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4x3dv(location, count, transpose, value); -} - -void gl4_3compat_glUniformMatrix4x2dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4x2dv(location, count, transpose, value); -} - -void gl4_3compat_glUniformMatrix3x4dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3x4dv(location, count, transpose, value); -} - -void gl4_3compat_glUniformMatrix3x2dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3x2dv(location, count, transpose, value); -} - -void gl4_3compat_glUniformMatrix2x4dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2x4dv(location, count, transpose, value); -} - -void gl4_3compat_glUniformMatrix2x3dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2x3dv(location, count, transpose, value); -} - -void gl4_3compat_glUniformMatrix4dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4dv(location, count, transpose, value); -} - -void gl4_3compat_glUniformMatrix3dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3dv(location, count, transpose, value); -} - -void gl4_3compat_glUniformMatrix2dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2dv(location, count, transpose, value); -} - -void gl4_3compat_glUniform4dv(void *_glfuncs, GLint location, GLsizei count, const GLdouble* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4dv(location, count, value); -} - -void gl4_3compat_glUniform3dv(void *_glfuncs, GLint location, GLsizei count, const GLdouble* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3dv(location, count, value); -} - -void gl4_3compat_glUniform2dv(void *_glfuncs, GLint location, GLsizei count, const GLdouble* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2dv(location, count, value); -} - -void gl4_3compat_glUniform1dv(void *_glfuncs, GLint location, GLsizei count, const GLdouble* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1dv(location, count, value); -} - -void gl4_3compat_glUniform4d(void *_glfuncs, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4d(location, v0, v1, v2, v3); -} - -void gl4_3compat_glUniform3d(void *_glfuncs, GLint location, GLdouble v0, GLdouble v1, GLdouble v2) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3d(location, v0, v1, v2); -} - -void gl4_3compat_glUniform2d(void *_glfuncs, GLint location, GLdouble v0, GLdouble v1) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2d(location, v0, v1); -} - -void gl4_3compat_glUniform1d(void *_glfuncs, GLint location, GLdouble v0) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1d(location, v0); -} - -void gl4_3compat_glDrawElementsIndirect(void *_glfuncs, GLenum mode, GLenum gltype, const GLvoid* indirect) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElementsIndirect(mode, gltype, indirect); -} - -void gl4_3compat_glDrawArraysIndirect(void *_glfuncs, GLenum mode, const GLvoid* indirect) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawArraysIndirect(mode, indirect); -} - -void gl4_3compat_glBlendFuncSeparatei(void *_glfuncs, GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendFuncSeparatei(buf, srcRGB, dstRGB, srcAlpha, dstAlpha); -} - -void gl4_3compat_glBlendFunci(void *_glfuncs, GLuint buf, GLenum src, GLenum dst) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendFunci(buf, src, dst); -} - -void gl4_3compat_glBlendEquationSeparatei(void *_glfuncs, GLuint buf, GLenum modeRGB, GLenum modeAlpha) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendEquationSeparatei(buf, modeRGB, modeAlpha); -} - -void gl4_3compat_glBlendEquationi(void *_glfuncs, GLuint buf, GLenum mode) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendEquationi(buf, mode); -} - -void gl4_3compat_glMinSampleShading(void *_glfuncs, GLfloat value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMinSampleShading(value); -} - -void gl4_3compat_glGetDoublei_v(void *_glfuncs, GLenum target, GLuint index, GLdouble* data) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetDoublei_v(target, index, data); -} - -void gl4_3compat_glGetFloati_v(void *_glfuncs, GLenum target, GLuint index, GLfloat* data) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetFloati_v(target, index, data); -} - -void gl4_3compat_glDepthRangeIndexed(void *_glfuncs, GLuint index, GLdouble n, GLdouble f) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthRangeIndexed(index, n, f); -} - -void gl4_3compat_glDepthRangeArrayv(void *_glfuncs, GLuint first, GLsizei count, const GLdouble* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthRangeArrayv(first, count, v); -} - -void gl4_3compat_glScissorIndexedv(void *_glfuncs, GLuint index, const GLint* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScissorIndexedv(index, v); -} - -void gl4_3compat_glScissorIndexed(void *_glfuncs, GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScissorIndexed(index, left, bottom, width, height); -} - -void gl4_3compat_glScissorArrayv(void *_glfuncs, GLuint first, GLsizei count, const GLint* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScissorArrayv(first, count, v); -} - -void gl4_3compat_glViewportIndexedfv(void *_glfuncs, GLuint index, const GLfloat* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glViewportIndexedfv(index, v); -} - -void gl4_3compat_glViewportIndexedf(void *_glfuncs, GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glViewportIndexedf(index, x, y, w, h); -} - -void gl4_3compat_glViewportArrayv(void *_glfuncs, GLuint first, GLsizei count, const GLfloat* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glViewportArrayv(first, count, v); -} - -void gl4_3compat_glGetVertexAttribLdv(void *_glfuncs, GLuint index, GLenum pname, GLdouble* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribLdv(index, pname, params); -} - -void gl4_3compat_glVertexAttribLPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribLPointer(index, size, gltype, stride, pointer); -} - -void gl4_3compat_glVertexAttribL4dv(void *_glfuncs, GLuint index, const GLdouble* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribL4dv(index, v); -} - -void gl4_3compat_glVertexAttribL3dv(void *_glfuncs, GLuint index, const GLdouble* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribL3dv(index, v); -} - -void gl4_3compat_glVertexAttribL2dv(void *_glfuncs, GLuint index, const GLdouble* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribL2dv(index, v); -} - -void gl4_3compat_glVertexAttribL1dv(void *_glfuncs, GLuint index, const GLdouble* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribL1dv(index, v); -} - -void gl4_3compat_glVertexAttribL4d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribL4d(index, x, y, z, w); -} - -void gl4_3compat_glVertexAttribL3d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribL3d(index, x, y, z); -} - -void gl4_3compat_glVertexAttribL2d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribL2d(index, x, y); -} - -void gl4_3compat_glVertexAttribL1d(void *_glfuncs, GLuint index, GLdouble x) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribL1d(index, x); -} - -void gl4_3compat_glGetProgramPipelineInfoLog(void *_glfuncs, GLuint pipeline, GLsizei bufSize, GLsizei* length, GLchar* infoLog) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetProgramPipelineInfoLog(pipeline, bufSize, length, infoLog); -} - -void gl4_3compat_glValidateProgramPipeline(void *_glfuncs, GLuint pipeline) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glValidateProgramPipeline(pipeline); -} - -void gl4_3compat_glProgramUniformMatrix4x3dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix4x3dv(program, location, count, transpose, value); -} - -void gl4_3compat_glProgramUniformMatrix3x4dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix3x4dv(program, location, count, transpose, value); -} - -void gl4_3compat_glProgramUniformMatrix4x2dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix4x2dv(program, location, count, transpose, value); -} - -void gl4_3compat_glProgramUniformMatrix2x4dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix2x4dv(program, location, count, transpose, value); -} - -void gl4_3compat_glProgramUniformMatrix3x2dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix3x2dv(program, location, count, transpose, value); -} - -void gl4_3compat_glProgramUniformMatrix2x3dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix2x3dv(program, location, count, transpose, value); -} - -void gl4_3compat_glProgramUniformMatrix4x3fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix4x3fv(program, location, count, transpose, value); -} - -void gl4_3compat_glProgramUniformMatrix3x4fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix3x4fv(program, location, count, transpose, value); -} - -void gl4_3compat_glProgramUniformMatrix4x2fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix4x2fv(program, location, count, transpose, value); -} - -void gl4_3compat_glProgramUniformMatrix2x4fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix2x4fv(program, location, count, transpose, value); -} - -void gl4_3compat_glProgramUniformMatrix3x2fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix3x2fv(program, location, count, transpose, value); -} - -void gl4_3compat_glProgramUniformMatrix2x3fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix2x3fv(program, location, count, transpose, value); -} - -void gl4_3compat_glProgramUniformMatrix4dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix4dv(program, location, count, transpose, value); -} - -void gl4_3compat_glProgramUniformMatrix3dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix3dv(program, location, count, transpose, value); -} - -void gl4_3compat_glProgramUniformMatrix2dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix2dv(program, location, count, transpose, value); -} - -void gl4_3compat_glProgramUniformMatrix4fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix4fv(program, location, count, transpose, value); -} - -void gl4_3compat_glProgramUniformMatrix3fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix3fv(program, location, count, transpose, value); -} - -void gl4_3compat_glProgramUniformMatrix2fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix2fv(program, location, count, transpose, value); -} - -void gl4_3compat_glProgramUniform4uiv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform4uiv(program, location, count, value); -} - -void gl4_3compat_glProgramUniform4ui(void *_glfuncs, GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform4ui(program, location, v0, v1, v2, v3); -} - -void gl4_3compat_glProgramUniform4dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLdouble* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform4dv(program, location, count, value); -} - -void gl4_3compat_glProgramUniform4d(void *_glfuncs, GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform4d(program, location, v0, v1, v2, v3); -} - -void gl4_3compat_glProgramUniform4fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform4fv(program, location, count, value); -} - -void gl4_3compat_glProgramUniform4f(void *_glfuncs, GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform4f(program, location, v0, v1, v2, v3); -} - -void gl4_3compat_glProgramUniform4iv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform4iv(program, location, count, value); -} - -void gl4_3compat_glProgramUniform4i(void *_glfuncs, GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform4i(program, location, v0, v1, v2, v3); -} - -void gl4_3compat_glProgramUniform3uiv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform3uiv(program, location, count, value); -} - -void gl4_3compat_glProgramUniform3ui(void *_glfuncs, GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform3ui(program, location, v0, v1, v2); -} - -void gl4_3compat_glProgramUniform3dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLdouble* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform3dv(program, location, count, value); -} - -void gl4_3compat_glProgramUniform3d(void *_glfuncs, GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform3d(program, location, v0, v1, v2); -} - -void gl4_3compat_glProgramUniform3fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform3fv(program, location, count, value); -} - -void gl4_3compat_glProgramUniform3f(void *_glfuncs, GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform3f(program, location, v0, v1, v2); -} - -void gl4_3compat_glProgramUniform3iv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform3iv(program, location, count, value); -} - -void gl4_3compat_glProgramUniform3i(void *_glfuncs, GLuint program, GLint location, GLint v0, GLint v1, GLint v2) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform3i(program, location, v0, v1, v2); -} - -void gl4_3compat_glProgramUniform2uiv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform2uiv(program, location, count, value); -} - -void gl4_3compat_glProgramUniform2ui(void *_glfuncs, GLuint program, GLint location, GLuint v0, GLuint v1) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform2ui(program, location, v0, v1); -} - -void gl4_3compat_glProgramUniform2dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLdouble* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform2dv(program, location, count, value); -} - -void gl4_3compat_glProgramUniform2d(void *_glfuncs, GLuint program, GLint location, GLdouble v0, GLdouble v1) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform2d(program, location, v0, v1); -} - -void gl4_3compat_glProgramUniform2fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform2fv(program, location, count, value); -} - -void gl4_3compat_glProgramUniform2f(void *_glfuncs, GLuint program, GLint location, GLfloat v0, GLfloat v1) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform2f(program, location, v0, v1); -} - -void gl4_3compat_glProgramUniform2iv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform2iv(program, location, count, value); -} - -void gl4_3compat_glProgramUniform2i(void *_glfuncs, GLuint program, GLint location, GLint v0, GLint v1) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform2i(program, location, v0, v1); -} - -void gl4_3compat_glProgramUniform1uiv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform1uiv(program, location, count, value); -} - -void gl4_3compat_glProgramUniform1ui(void *_glfuncs, GLuint program, GLint location, GLuint v0) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform1ui(program, location, v0); -} - -void gl4_3compat_glProgramUniform1dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLdouble* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform1dv(program, location, count, value); -} - -void gl4_3compat_glProgramUniform1d(void *_glfuncs, GLuint program, GLint location, GLdouble v0) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform1d(program, location, v0); -} - -void gl4_3compat_glProgramUniform1fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform1fv(program, location, count, value); -} - -void gl4_3compat_glProgramUniform1f(void *_glfuncs, GLuint program, GLint location, GLfloat v0) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform1f(program, location, v0); -} - -void gl4_3compat_glProgramUniform1iv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform1iv(program, location, count, value); -} - -void gl4_3compat_glProgramUniform1i(void *_glfuncs, GLuint program, GLint location, GLint v0) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform1i(program, location, v0); -} - -void gl4_3compat_glGetProgramPipelineiv(void *_glfuncs, GLuint pipeline, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetProgramPipelineiv(pipeline, pname, params); -} - -GLboolean gl4_3compat_glIsProgramPipeline(void *_glfuncs, GLuint pipeline) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsProgramPipeline(pipeline); -} - -void gl4_3compat_glGenProgramPipelines(void *_glfuncs, GLsizei n, GLuint* pipelines) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenProgramPipelines(n, pipelines); -} - -void gl4_3compat_glDeleteProgramPipelines(void *_glfuncs, GLsizei n, const GLuint* pipelines) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteProgramPipelines(n, pipelines); -} - -void gl4_3compat_glBindProgramPipeline(void *_glfuncs, GLuint pipeline) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindProgramPipeline(pipeline); -} - -void gl4_3compat_glActiveShaderProgram(void *_glfuncs, GLuint pipeline, GLuint program) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glActiveShaderProgram(pipeline, program); -} - -void gl4_3compat_glUseProgramStages(void *_glfuncs, GLuint pipeline, GLbitfield stages, GLuint program) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUseProgramStages(pipeline, stages, program); -} - -void gl4_3compat_glProgramParameteri(void *_glfuncs, GLuint program, GLenum pname, GLint value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramParameteri(program, pname, value); -} - -void gl4_3compat_glProgramBinary(void *_glfuncs, GLuint program, GLenum binaryFormat, const GLvoid* binary, GLsizei length) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramBinary(program, binaryFormat, binary, length); -} - -void gl4_3compat_glGetProgramBinary(void *_glfuncs, GLuint program, GLsizei bufSize, GLsizei* length, GLenum* binaryFormat, GLvoid* binary) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetProgramBinary(program, bufSize, length, binaryFormat, binary); -} - -void gl4_3compat_glClearDepthf(void *_glfuncs, GLfloat dd) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearDepthf(dd); -} - -void gl4_3compat_glDepthRangef(void *_glfuncs, GLfloat n, GLfloat f) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthRangef(n, f); -} - -void gl4_3compat_glGetShaderPrecisionFormat(void *_glfuncs, GLenum shadertype, GLenum precisionType, GLint* range_, GLint* precision) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetShaderPrecisionFormat(shadertype, precisionType, range_, precision); -} - -void gl4_3compat_glShaderBinary(void *_glfuncs, GLsizei count, const GLuint* shaders, GLenum binaryFormat, const GLvoid* binary, GLsizei length) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glShaderBinary(count, shaders, binaryFormat, binary, length); -} - -void gl4_3compat_glReleaseShaderCompiler(void *_glfuncs) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glReleaseShaderCompiler(); -} - -void gl4_3compat_glTexStorage3D(void *_glfuncs, GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexStorage3D(target, levels, internalFormat, width, height, depth); -} - -void gl4_3compat_glTexStorage2D(void *_glfuncs, GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexStorage2D(target, levels, internalFormat, width, height); -} - -void gl4_3compat_glTexStorage1D(void *_glfuncs, GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexStorage1D(target, levels, internalFormat, width); -} - -void gl4_3compat_glMemoryBarrier(void *_glfuncs, GLbitfield barriers) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMemoryBarrier(barriers); -} - -void gl4_3compat_glBindImageTexture(void *_glfuncs, GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindImageTexture(unit, texture, level, layered, layer, access, format); -} - -void gl4_3compat_glGetActiveAtomicCounterBufferiv(void *_glfuncs, GLuint program, GLuint bufferIndex, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveAtomicCounterBufferiv(program, bufferIndex, pname, params); -} - -void gl4_3compat_glGetInternalformativ(void *_glfuncs, GLenum target, GLenum internalFormat, GLenum pname, GLsizei bufSize, GLint* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetInternalformativ(target, internalFormat, pname, bufSize, params); -} - -void gl4_3compat_glDrawTransformFeedbackStreamInstanced(void *_glfuncs, GLenum mode, GLuint id, GLuint stream, GLsizei instancecount) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawTransformFeedbackStreamInstanced(mode, id, stream, instancecount); -} - -void gl4_3compat_glDrawTransformFeedbackInstanced(void *_glfuncs, GLenum mode, GLuint id, GLsizei instancecount) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawTransformFeedbackInstanced(mode, id, instancecount); -} - -void gl4_3compat_glDrawElementsInstancedBaseVertexBaseInstance(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElementsInstancedBaseVertexBaseInstance(mode, count, gltype, indices, instancecount, basevertex, baseinstance); -} - -void gl4_3compat_glDrawElementsInstancedBaseInstance(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLsizei instancecount, GLuint baseinstance) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElementsInstancedBaseInstance(mode, count, gltype, indices, instancecount, baseinstance); -} - -void gl4_3compat_glDrawArraysInstancedBaseInstance(void *_glfuncs, GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawArraysInstancedBaseInstance(mode, first, count, instancecount, baseinstance); -} - -void gl4_3compat_glTexStorage3DMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexStorage3DMultisample(target, samples, internalFormat, width, height, depth, fixedsamplelocations); -} - -void gl4_3compat_glTexStorage2DMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexStorage2DMultisample(target, samples, internalFormat, width, height, fixedsamplelocations); -} - -void gl4_3compat_glTexBufferRange(void *_glfuncs, GLenum target, GLenum internalFormat, GLuint buffer, GLintptr offset, GLsizeiptr size) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexBufferRange(target, internalFormat, buffer, offset, size); -} - -void gl4_3compat_glShaderStorageBlockBinding(void *_glfuncs, GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glShaderStorageBlockBinding(program, storageBlockIndex, storageBlockBinding); -} - -GLint gl4_3compat_glGetProgramResourceLocationIndex(void *_glfuncs, GLuint program, GLenum programInterface, const GLchar* name) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetProgramResourceLocationIndex(program, programInterface, name); -} - -GLint gl4_3compat_glGetProgramResourceLocation(void *_glfuncs, GLuint program, GLenum programInterface, const GLchar* name) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetProgramResourceLocation(program, programInterface, name); -} - -void gl4_3compat_glGetProgramResourceiv(void *_glfuncs, GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum* props, GLsizei bufSize, GLsizei* length, GLint* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetProgramResourceiv(program, programInterface, index, propCount, props, bufSize, length, params); -} - -void gl4_3compat_glGetProgramResourceName(void *_glfuncs, GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei* length, GLchar* name) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetProgramResourceName(program, programInterface, index, bufSize, length, name); -} - -GLuint gl4_3compat_glGetProgramResourceIndex(void *_glfuncs, GLuint program, GLenum programInterface, const GLchar* name) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetProgramResourceIndex(program, programInterface, name); -} - -void gl4_3compat_glGetProgramInterfaceiv(void *_glfuncs, GLuint program, GLenum programInterface, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetProgramInterfaceiv(program, programInterface, pname, params); -} - -void gl4_3compat_glMultiDrawElementsIndirect(void *_glfuncs, GLenum mode, GLenum gltype, const GLvoid* indirect, GLsizei drawcount, GLsizei stride) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiDrawElementsIndirect(mode, gltype, indirect, drawcount, stride); -} - -void gl4_3compat_glMultiDrawArraysIndirect(void *_glfuncs, GLenum mode, const GLvoid* indirect, GLsizei drawcount, GLsizei stride) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiDrawArraysIndirect(mode, indirect, drawcount, stride); -} - -void gl4_3compat_glInvalidateSubFramebuffer(void *_glfuncs, GLenum target, GLsizei numAttachments, const GLenum* attachments, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glInvalidateSubFramebuffer(target, numAttachments, attachments, x, y, width, height); -} - -void gl4_3compat_glInvalidateFramebuffer(void *_glfuncs, GLenum target, GLsizei numAttachments, const GLenum* attachments) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glInvalidateFramebuffer(target, numAttachments, attachments); -} - -void gl4_3compat_glInvalidateBufferData(void *_glfuncs, GLuint buffer) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glInvalidateBufferData(buffer); -} - -void gl4_3compat_glInvalidateBufferSubData(void *_glfuncs, GLuint buffer, GLintptr offset, GLsizeiptr length) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glInvalidateBufferSubData(buffer, offset, length); -} - -void gl4_3compat_glInvalidateTexImage(void *_glfuncs, GLuint texture, GLint level) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glInvalidateTexImage(texture, level); -} - -void gl4_3compat_glInvalidateTexSubImage(void *_glfuncs, GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glInvalidateTexSubImage(texture, level, xoffset, yoffset, zoffset, width, height, depth); -} - -void gl4_3compat_glGetInternalformati64v(void *_glfuncs, GLenum target, GLenum internalFormat, GLenum pname, GLsizei bufSize, GLint64* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetInternalformati64v(target, internalFormat, pname, bufSize, params); -} - -void gl4_3compat_glGetFramebufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetFramebufferParameteriv(target, pname, params); -} - -void gl4_3compat_glFramebufferParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint param) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferParameteri(target, pname, param); -} - -void gl4_3compat_glVertexBindingDivisor(void *_glfuncs, GLuint bindingindex, GLuint divisor) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexBindingDivisor(bindingindex, divisor); -} - -void gl4_3compat_glVertexAttribBinding(void *_glfuncs, GLuint attribindex, GLuint bindingindex) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribBinding(attribindex, bindingindex); -} - -void gl4_3compat_glVertexAttribLFormat(void *_glfuncs, GLuint attribindex, GLint size, GLenum gltype, GLuint relativeoffset) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribLFormat(attribindex, size, gltype, relativeoffset); -} - -void gl4_3compat_glVertexAttribIFormat(void *_glfuncs, GLuint attribindex, GLint size, GLenum gltype, GLuint relativeoffset) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribIFormat(attribindex, size, gltype, relativeoffset); -} - -void gl4_3compat_glVertexAttribFormat(void *_glfuncs, GLuint attribindex, GLint size, GLenum gltype, GLboolean normalized, GLuint relativeoffset) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribFormat(attribindex, size, gltype, normalized, relativeoffset); -} - -void gl4_3compat_glBindVertexBuffer(void *_glfuncs, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindVertexBuffer(bindingindex, buffer, offset, stride); -} - -void gl4_3compat_glTextureView(void *_glfuncs, GLuint texture, GLenum target, GLuint origtexture, GLenum internalFormat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTextureView(texture, target, origtexture, internalFormat, minlevel, numlevels, minlayer, numlayers); -} - -void gl4_3compat_glCopyImageSubData(void *_glfuncs, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyImageSubData(srcName, srcTarget, srcLevel, srcX, srcY, srcZ, dstName, dstTarget, dstLevel, dstX, dstY, dstZ, srcWidth, srcHeight, srcDepth); -} - -void gl4_3compat_glDispatchComputeIndirect(void *_glfuncs, GLintptr indirect) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDispatchComputeIndirect(indirect); -} - -void gl4_3compat_glDispatchCompute(void *_glfuncs, GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDispatchCompute(num_groups_x, num_groups_y, num_groups_z); -} - -void gl4_3compat_glClearBufferSubData(void *_glfuncs, GLenum target, GLenum internalFormat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum gltype, const GLvoid* data) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearBufferSubData(target, internalFormat, offset, size, format, gltype, data); -} - -void gl4_3compat_glClearBufferData(void *_glfuncs, GLenum target, GLenum internalFormat, GLenum format, GLenum gltype, const GLvoid* data) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearBufferData(target, internalFormat, format, gltype, data); -} - -void gl4_3compat_glTranslatef(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTranslatef(x, y, z); -} - -void gl4_3compat_glTranslated(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTranslated(x, y, z); -} - -void gl4_3compat_glScalef(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScalef(x, y, z); -} - -void gl4_3compat_glScaled(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScaled(x, y, z); -} - -void gl4_3compat_glRotatef(void *_glfuncs, GLfloat angle, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRotatef(angle, x, y, z); -} - -void gl4_3compat_glRotated(void *_glfuncs, GLdouble angle, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRotated(angle, x, y, z); -} - -void gl4_3compat_glPushMatrix(void *_glfuncs) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPushMatrix(); -} - -void gl4_3compat_glPopMatrix(void *_glfuncs) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPopMatrix(); -} - -void gl4_3compat_glOrtho(void *_glfuncs, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glOrtho(left, right, bottom, top, zNear, zFar); -} - -void gl4_3compat_glMultMatrixd(void *_glfuncs, const GLdouble* m) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultMatrixd(m); -} - -void gl4_3compat_glMultMatrixf(void *_glfuncs, const GLfloat* m) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultMatrixf(m); -} - -void gl4_3compat_glMatrixMode(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMatrixMode(mode); -} - -void gl4_3compat_glLoadMatrixd(void *_glfuncs, const GLdouble* m) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadMatrixd(m); -} - -void gl4_3compat_glLoadMatrixf(void *_glfuncs, const GLfloat* m) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadMatrixf(m); -} - -void gl4_3compat_glLoadIdentity(void *_glfuncs) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadIdentity(); -} - -void gl4_3compat_glFrustum(void *_glfuncs, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFrustum(left, right, bottom, top, zNear, zFar); -} - -GLboolean gl4_3compat_glIsList(void *_glfuncs, GLuint list) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsList(list); -} - -void gl4_3compat_glGetTexGeniv(void *_glfuncs, GLenum coord, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexGeniv(coord, pname, params); -} - -void gl4_3compat_glGetTexGenfv(void *_glfuncs, GLenum coord, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexGenfv(coord, pname, params); -} - -void gl4_3compat_glGetTexGendv(void *_glfuncs, GLenum coord, GLenum pname, GLdouble* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexGendv(coord, pname, params); -} - -void gl4_3compat_glGetTexEnviv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexEnviv(target, pname, params); -} - -void gl4_3compat_glGetTexEnvfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexEnvfv(target, pname, params); -} - -void gl4_3compat_glGetPolygonStipple(void *_glfuncs, GLubyte* mask) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetPolygonStipple(mask); -} - -void gl4_3compat_glGetPixelMapusv(void *_glfuncs, GLenum glmap, GLushort* values) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetPixelMapusv(glmap, values); -} - -void gl4_3compat_glGetPixelMapuiv(void *_glfuncs, GLenum glmap, GLuint* values) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetPixelMapuiv(glmap, values); -} - -void gl4_3compat_glGetPixelMapfv(void *_glfuncs, GLenum glmap, GLfloat* values) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetPixelMapfv(glmap, values); -} - -void gl4_3compat_glGetMaterialiv(void *_glfuncs, GLenum face, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMaterialiv(face, pname, params); -} - -void gl4_3compat_glGetMaterialfv(void *_glfuncs, GLenum face, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMaterialfv(face, pname, params); -} - -void gl4_3compat_glGetMapiv(void *_glfuncs, GLenum target, GLenum query, GLint* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMapiv(target, query, v); -} - -void gl4_3compat_glGetMapfv(void *_glfuncs, GLenum target, GLenum query, GLfloat* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMapfv(target, query, v); -} - -void gl4_3compat_glGetMapdv(void *_glfuncs, GLenum target, GLenum query, GLdouble* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMapdv(target, query, v); -} - -void gl4_3compat_glGetLightiv(void *_glfuncs, GLenum light, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetLightiv(light, pname, params); -} - -void gl4_3compat_glGetLightfv(void *_glfuncs, GLenum light, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetLightfv(light, pname, params); -} - -void gl4_3compat_glGetClipPlane(void *_glfuncs, GLenum plane, GLdouble* equation) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetClipPlane(plane, equation); -} - -void gl4_3compat_glDrawPixels(void *_glfuncs, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawPixels(width, height, format, gltype, pixels); -} - -void gl4_3compat_glCopyPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum gltype) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyPixels(x, y, width, height, gltype); -} - -void gl4_3compat_glPixelMapusv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLushort* values) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelMapusv(glmap, mapsize, values); -} - -void gl4_3compat_glPixelMapuiv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLuint* values) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelMapuiv(glmap, mapsize, values); -} - -void gl4_3compat_glPixelMapfv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLfloat* values) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelMapfv(glmap, mapsize, values); -} - -void gl4_3compat_glPixelTransferi(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelTransferi(pname, param); -} - -void gl4_3compat_glPixelTransferf(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelTransferf(pname, param); -} - -void gl4_3compat_glPixelZoom(void *_glfuncs, GLfloat xfactor, GLfloat yfactor) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelZoom(xfactor, yfactor); -} - -void gl4_3compat_glAlphaFunc(void *_glfuncs, GLenum glfunc, GLfloat ref) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glAlphaFunc(glfunc, ref); -} - -void gl4_3compat_glEvalPoint2(void *_glfuncs, GLint i, GLint j) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalPoint2(i, j); -} - -void gl4_3compat_glEvalMesh2(void *_glfuncs, GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalMesh2(mode, i1, i2, j1, j2); -} - -void gl4_3compat_glEvalPoint1(void *_glfuncs, GLint i) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalPoint1(i); -} - -void gl4_3compat_glEvalMesh1(void *_glfuncs, GLenum mode, GLint i1, GLint i2) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalMesh1(mode, i1, i2); -} - -void gl4_3compat_glEvalCoord2fv(void *_glfuncs, const GLfloat* u) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord2fv(u); -} - -void gl4_3compat_glEvalCoord2f(void *_glfuncs, GLfloat u, GLfloat v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord2f(u, v); -} - -void gl4_3compat_glEvalCoord2dv(void *_glfuncs, const GLdouble* u) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord2dv(u); -} - -void gl4_3compat_glEvalCoord2d(void *_glfuncs, GLdouble u, GLdouble v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord2d(u, v); -} - -void gl4_3compat_glEvalCoord1fv(void *_glfuncs, const GLfloat* u) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord1fv(u); -} - -void gl4_3compat_glEvalCoord1f(void *_glfuncs, GLfloat u) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord1f(u); -} - -void gl4_3compat_glEvalCoord1dv(void *_glfuncs, const GLdouble* u) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord1dv(u); -} - -void gl4_3compat_glEvalCoord1d(void *_glfuncs, GLdouble u) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEvalCoord1d(u); -} - -void gl4_3compat_glMapGrid2f(void *_glfuncs, GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMapGrid2f(un, u1, u2, vn, v1, v2); -} - -void gl4_3compat_glMapGrid2d(void *_glfuncs, GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMapGrid2d(un, u1, u2, vn, v1, v2); -} - -void gl4_3compat_glMapGrid1f(void *_glfuncs, GLint un, GLfloat u1, GLfloat u2) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMapGrid1f(un, u1, u2); -} - -void gl4_3compat_glMapGrid1d(void *_glfuncs, GLint un, GLdouble u1, GLdouble u2) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMapGrid1d(un, u1, u2); -} - -void gl4_3compat_glMap2f(void *_glfuncs, GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat* points) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMap2f(target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points); -} - -void gl4_3compat_glMap2d(void *_glfuncs, GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble* points) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMap2d(target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points); -} - -void gl4_3compat_glMap1f(void *_glfuncs, GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat* points) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMap1f(target, u1, u2, stride, order, points); -} - -void gl4_3compat_glMap1d(void *_glfuncs, GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble* points) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMap1d(target, u1, u2, stride, order, points); -} - -void gl4_3compat_glPushAttrib(void *_glfuncs, GLbitfield mask) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPushAttrib(mask); -} - -void gl4_3compat_glPopAttrib(void *_glfuncs) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPopAttrib(); -} - -void gl4_3compat_glAccum(void *_glfuncs, GLenum op, GLfloat value) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glAccum(op, value); -} - -void gl4_3compat_glIndexMask(void *_glfuncs, GLuint mask) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexMask(mask); -} - -void gl4_3compat_glClearIndex(void *_glfuncs, GLfloat c) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearIndex(c); -} - -void gl4_3compat_glClearAccum(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearAccum(red, green, blue, alpha); -} - -void gl4_3compat_glPushName(void *_glfuncs, GLuint name) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPushName(name); -} - -void gl4_3compat_glPopName(void *_glfuncs) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPopName(); -} - -void gl4_3compat_glPassThrough(void *_glfuncs, GLfloat token) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPassThrough(token); -} - -void gl4_3compat_glLoadName(void *_glfuncs, GLuint name) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadName(name); -} - -void gl4_3compat_glInitNames(void *_glfuncs) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glInitNames(); -} - -GLint gl4_3compat_glRenderMode(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glRenderMode(mode); -} - -void gl4_3compat_glSelectBuffer(void *_glfuncs, GLsizei size, GLuint* buffer) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSelectBuffer(size, buffer); -} - -void gl4_3compat_glFeedbackBuffer(void *_glfuncs, GLsizei size, GLenum gltype, GLfloat* buffer) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFeedbackBuffer(size, gltype, buffer); -} - -void gl4_3compat_glTexGeniv(void *_glfuncs, GLenum coord, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGeniv(coord, pname, params); -} - -void gl4_3compat_glTexGeni(void *_glfuncs, GLenum coord, GLenum pname, GLint param) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGeni(coord, pname, param); -} - -void gl4_3compat_glTexGenfv(void *_glfuncs, GLenum coord, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGenfv(coord, pname, params); -} - -void gl4_3compat_glTexGenf(void *_glfuncs, GLenum coord, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGenf(coord, pname, param); -} - -void gl4_3compat_glTexGendv(void *_glfuncs, GLenum coord, GLenum pname, const GLdouble* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGendv(coord, pname, params); -} - -void gl4_3compat_glTexGend(void *_glfuncs, GLenum coord, GLenum pname, GLdouble param) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexGend(coord, pname, param); -} - -void gl4_3compat_glTexEnviv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexEnviv(target, pname, params); -} - -void gl4_3compat_glTexEnvi(void *_glfuncs, GLenum target, GLenum pname, GLint param) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexEnvi(target, pname, param); -} - -void gl4_3compat_glTexEnvfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexEnvfv(target, pname, params); -} - -void gl4_3compat_glTexEnvf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexEnvf(target, pname, param); -} - -void gl4_3compat_glShadeModel(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glShadeModel(mode); -} - -void gl4_3compat_glPolygonStipple(void *_glfuncs, const GLubyte* mask) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPolygonStipple(mask); -} - -void gl4_3compat_glMaterialiv(void *_glfuncs, GLenum face, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMaterialiv(face, pname, params); -} - -void gl4_3compat_glMateriali(void *_glfuncs, GLenum face, GLenum pname, GLint param) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMateriali(face, pname, param); -} - -void gl4_3compat_glMaterialfv(void *_glfuncs, GLenum face, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMaterialfv(face, pname, params); -} - -void gl4_3compat_glMaterialf(void *_glfuncs, GLenum face, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMaterialf(face, pname, param); -} - -void gl4_3compat_glLineStipple(void *_glfuncs, GLint factor, GLushort pattern) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLineStipple(factor, pattern); -} - -void gl4_3compat_glLightModeliv(void *_glfuncs, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightModeliv(pname, params); -} - -void gl4_3compat_glLightModeli(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightModeli(pname, param); -} - -void gl4_3compat_glLightModelfv(void *_glfuncs, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightModelfv(pname, params); -} - -void gl4_3compat_glLightModelf(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightModelf(pname, param); -} - -void gl4_3compat_glLightiv(void *_glfuncs, GLenum light, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightiv(light, pname, params); -} - -void gl4_3compat_glLighti(void *_glfuncs, GLenum light, GLenum pname, GLint param) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLighti(light, pname, param); -} - -void gl4_3compat_glLightfv(void *_glfuncs, GLenum light, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightfv(light, pname, params); -} - -void gl4_3compat_glLightf(void *_glfuncs, GLenum light, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLightf(light, pname, param); -} - -void gl4_3compat_glFogiv(void *_glfuncs, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogiv(pname, params); -} - -void gl4_3compat_glFogi(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogi(pname, param); -} - -void gl4_3compat_glFogfv(void *_glfuncs, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogfv(pname, params); -} - -void gl4_3compat_glFogf(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogf(pname, param); -} - -void gl4_3compat_glColorMaterial(void *_glfuncs, GLenum face, GLenum mode) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorMaterial(face, mode); -} - -void gl4_3compat_glClipPlane(void *_glfuncs, GLenum plane, const GLdouble* equation) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClipPlane(plane, equation); -} - -void gl4_3compat_glVertex4sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4sv(v); -} - -void gl4_3compat_glVertex4s(void *_glfuncs, GLshort x, GLshort y, GLshort z, GLshort w) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4s(x, y, z, w); -} - -void gl4_3compat_glVertex4iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4iv(v); -} - -void gl4_3compat_glVertex4i(void *_glfuncs, GLint x, GLint y, GLint z, GLint w) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4i(x, y, z, w); -} - -void gl4_3compat_glVertex4fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4fv(v); -} - -void gl4_3compat_glVertex4f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z, GLfloat w) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4f(x, y, z, w); -} - -void gl4_3compat_glVertex4dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4dv(v); -} - -void gl4_3compat_glVertex4d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z, GLdouble w) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex4d(x, y, z, w); -} - -void gl4_3compat_glVertex3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3sv(v); -} - -void gl4_3compat_glVertex3s(void *_glfuncs, GLshort x, GLshort y, GLshort z) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3s(x, y, z); -} - -void gl4_3compat_glVertex3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3iv(v); -} - -void gl4_3compat_glVertex3i(void *_glfuncs, GLint x, GLint y, GLint z) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3i(x, y, z); -} - -void gl4_3compat_glVertex3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3fv(v); -} - -void gl4_3compat_glVertex3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3f(x, y, z); -} - -void gl4_3compat_glVertex3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3dv(v); -} - -void gl4_3compat_glVertex3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex3d(x, y, z); -} - -void gl4_3compat_glVertex2sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2sv(v); -} - -void gl4_3compat_glVertex2s(void *_glfuncs, GLshort x, GLshort y) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2s(x, y); -} - -void gl4_3compat_glVertex2iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2iv(v); -} - -void gl4_3compat_glVertex2i(void *_glfuncs, GLint x, GLint y) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2i(x, y); -} - -void gl4_3compat_glVertex2fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2fv(v); -} - -void gl4_3compat_glVertex2f(void *_glfuncs, GLfloat x, GLfloat y) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2f(x, y); -} - -void gl4_3compat_glVertex2dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2dv(v); -} - -void gl4_3compat_glVertex2d(void *_glfuncs, GLdouble x, GLdouble y) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertex2d(x, y); -} - -void gl4_3compat_glTexCoord4sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4sv(v); -} - -void gl4_3compat_glTexCoord4s(void *_glfuncs, GLshort s, GLshort t, GLshort r, GLshort q) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4s(s, t, r, q); -} - -void gl4_3compat_glTexCoord4iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4iv(v); -} - -void gl4_3compat_glTexCoord4i(void *_glfuncs, GLint s, GLint t, GLint r, GLint q) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4i(s, t, r, q); -} - -void gl4_3compat_glTexCoord4fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4fv(v); -} - -void gl4_3compat_glTexCoord4f(void *_glfuncs, GLfloat s, GLfloat t, GLfloat r, GLfloat q) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4f(s, t, r, q); -} - -void gl4_3compat_glTexCoord4dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4dv(v); -} - -void gl4_3compat_glTexCoord4d(void *_glfuncs, GLdouble s, GLdouble t, GLdouble r, GLdouble q) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord4d(s, t, r, q); -} - -void gl4_3compat_glTexCoord3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3sv(v); -} - -void gl4_3compat_glTexCoord3s(void *_glfuncs, GLshort s, GLshort t, GLshort r) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3s(s, t, r); -} - -void gl4_3compat_glTexCoord3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3iv(v); -} - -void gl4_3compat_glTexCoord3i(void *_glfuncs, GLint s, GLint t, GLint r) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3i(s, t, r); -} - -void gl4_3compat_glTexCoord3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3fv(v); -} - -void gl4_3compat_glTexCoord3f(void *_glfuncs, GLfloat s, GLfloat t, GLfloat r) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3f(s, t, r); -} - -void gl4_3compat_glTexCoord3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3dv(v); -} - -void gl4_3compat_glTexCoord3d(void *_glfuncs, GLdouble s, GLdouble t, GLdouble r) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord3d(s, t, r); -} - -void gl4_3compat_glTexCoord2sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2sv(v); -} - -void gl4_3compat_glTexCoord2s(void *_glfuncs, GLshort s, GLshort t) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2s(s, t); -} - -void gl4_3compat_glTexCoord2iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2iv(v); -} - -void gl4_3compat_glTexCoord2i(void *_glfuncs, GLint s, GLint t) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2i(s, t); -} - -void gl4_3compat_glTexCoord2fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2fv(v); -} - -void gl4_3compat_glTexCoord2f(void *_glfuncs, GLfloat s, GLfloat t) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2f(s, t); -} - -void gl4_3compat_glTexCoord2dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2dv(v); -} - -void gl4_3compat_glTexCoord2d(void *_glfuncs, GLdouble s, GLdouble t) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord2d(s, t); -} - -void gl4_3compat_glTexCoord1sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1sv(v); -} - -void gl4_3compat_glTexCoord1s(void *_glfuncs, GLshort s) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1s(s); -} - -void gl4_3compat_glTexCoord1iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1iv(v); -} - -void gl4_3compat_glTexCoord1i(void *_glfuncs, GLint s) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1i(s); -} - -void gl4_3compat_glTexCoord1fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1fv(v); -} - -void gl4_3compat_glTexCoord1f(void *_glfuncs, GLfloat s) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1f(s); -} - -void gl4_3compat_glTexCoord1dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1dv(v); -} - -void gl4_3compat_glTexCoord1d(void *_glfuncs, GLdouble s) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoord1d(s); -} - -void gl4_3compat_glRectsv(void *_glfuncs, const GLshort* v1, const GLshort* v2) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectsv(v1, v2); -} - -void gl4_3compat_glRects(void *_glfuncs, GLshort x1, GLshort y1, GLshort x2, GLshort y2) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRects(x1, y1, x2, y2); -} - -void gl4_3compat_glRectiv(void *_glfuncs, const GLint* v1, const GLint* v2) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectiv(v1, v2); -} - -void gl4_3compat_glRecti(void *_glfuncs, GLint x1, GLint y1, GLint x2, GLint y2) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRecti(x1, y1, x2, y2); -} - -void gl4_3compat_glRectfv(void *_glfuncs, const GLfloat* v1, const GLfloat* v2) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectfv(v1, v2); -} - -void gl4_3compat_glRectf(void *_glfuncs, GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectf(x1, y1, x2, y2); -} - -void gl4_3compat_glRectdv(void *_glfuncs, const GLdouble* v1, const GLdouble* v2) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectdv(v1, v2); -} - -void gl4_3compat_glRectd(void *_glfuncs, GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRectd(x1, y1, x2, y2); -} - -void gl4_3compat_glRasterPos4sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4sv(v); -} - -void gl4_3compat_glRasterPos4s(void *_glfuncs, GLshort x, GLshort y, GLshort z, GLshort w) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4s(x, y, z, w); -} - -void gl4_3compat_glRasterPos4iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4iv(v); -} - -void gl4_3compat_glRasterPos4i(void *_glfuncs, GLint x, GLint y, GLint z, GLint w) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4i(x, y, z, w); -} - -void gl4_3compat_glRasterPos4fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4fv(v); -} - -void gl4_3compat_glRasterPos4f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z, GLfloat w) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4f(x, y, z, w); -} - -void gl4_3compat_glRasterPos4dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4dv(v); -} - -void gl4_3compat_glRasterPos4d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z, GLdouble w) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos4d(x, y, z, w); -} - -void gl4_3compat_glRasterPos3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3sv(v); -} - -void gl4_3compat_glRasterPos3s(void *_glfuncs, GLshort x, GLshort y, GLshort z) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3s(x, y, z); -} - -void gl4_3compat_glRasterPos3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3iv(v); -} - -void gl4_3compat_glRasterPos3i(void *_glfuncs, GLint x, GLint y, GLint z) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3i(x, y, z); -} - -void gl4_3compat_glRasterPos3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3fv(v); -} - -void gl4_3compat_glRasterPos3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3f(x, y, z); -} - -void gl4_3compat_glRasterPos3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3dv(v); -} - -void gl4_3compat_glRasterPos3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos3d(x, y, z); -} - -void gl4_3compat_glRasterPos2sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2sv(v); -} - -void gl4_3compat_glRasterPos2s(void *_glfuncs, GLshort x, GLshort y) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2s(x, y); -} - -void gl4_3compat_glRasterPos2iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2iv(v); -} - -void gl4_3compat_glRasterPos2i(void *_glfuncs, GLint x, GLint y) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2i(x, y); -} - -void gl4_3compat_glRasterPos2fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2fv(v); -} - -void gl4_3compat_glRasterPos2f(void *_glfuncs, GLfloat x, GLfloat y) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2f(x, y); -} - -void gl4_3compat_glRasterPos2dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2dv(v); -} - -void gl4_3compat_glRasterPos2d(void *_glfuncs, GLdouble x, GLdouble y) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRasterPos2d(x, y); -} - -void gl4_3compat_glNormal3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3sv(v); -} - -void gl4_3compat_glNormal3s(void *_glfuncs, GLshort nx, GLshort ny, GLshort nz) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3s(nx, ny, nz); -} - -void gl4_3compat_glNormal3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3iv(v); -} - -void gl4_3compat_glNormal3i(void *_glfuncs, GLint nx, GLint ny, GLint nz) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3i(nx, ny, nz); -} - -void gl4_3compat_glNormal3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3fv(v); -} - -void gl4_3compat_glNormal3f(void *_glfuncs, GLfloat nx, GLfloat ny, GLfloat nz) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3f(nx, ny, nz); -} - -void gl4_3compat_glNormal3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3dv(v); -} - -void gl4_3compat_glNormal3d(void *_glfuncs, GLdouble nx, GLdouble ny, GLdouble nz) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3d(nx, ny, nz); -} - -void gl4_3compat_glNormal3bv(void *_glfuncs, const GLbyte* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3bv(v); -} - -void gl4_3compat_glNormal3b(void *_glfuncs, GLbyte nx, GLbyte ny, GLbyte nz) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormal3b(nx, ny, nz); -} - -void gl4_3compat_glIndexsv(void *_glfuncs, const GLshort* c) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexsv(c); -} - -void gl4_3compat_glIndexs(void *_glfuncs, GLshort c) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexs(c); -} - -void gl4_3compat_glIndexiv(void *_glfuncs, const GLint* c) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexiv(c); -} - -void gl4_3compat_glIndexi(void *_glfuncs, GLint c) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexi(c); -} - -void gl4_3compat_glIndexfv(void *_glfuncs, const GLfloat* c) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexfv(c); -} - -void gl4_3compat_glIndexf(void *_glfuncs, GLfloat c) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexf(c); -} - -void gl4_3compat_glIndexdv(void *_glfuncs, const GLdouble* c) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexdv(c); -} - -void gl4_3compat_glIndexd(void *_glfuncs, GLdouble c) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexd(c); -} - -void gl4_3compat_glEnd(void *_glfuncs) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnd(); -} - -void gl4_3compat_glEdgeFlagv(void *_glfuncs, const GLboolean* flag) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEdgeFlagv(flag); -} - -void gl4_3compat_glEdgeFlag(void *_glfuncs, GLboolean flag) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEdgeFlag(flag); -} - -void gl4_3compat_glColor4usv(void *_glfuncs, const GLushort* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4usv(v); -} - -void gl4_3compat_glColor4us(void *_glfuncs, GLushort red, GLushort green, GLushort blue, GLushort alpha) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4us(red, green, blue, alpha); -} - -void gl4_3compat_glColor4uiv(void *_glfuncs, const GLuint* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4uiv(v); -} - -void gl4_3compat_glColor4ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue, GLuint alpha) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4ui(red, green, blue, alpha); -} - -void gl4_3compat_glColor4ubv(void *_glfuncs, const GLubyte* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4ubv(v); -} - -void gl4_3compat_glColor4ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4ub(red, green, blue, alpha); -} - -void gl4_3compat_glColor4sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4sv(v); -} - -void gl4_3compat_glColor4s(void *_glfuncs, GLshort red, GLshort green, GLshort blue, GLshort alpha) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4s(red, green, blue, alpha); -} - -void gl4_3compat_glColor4iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4iv(v); -} - -void gl4_3compat_glColor4i(void *_glfuncs, GLint red, GLint green, GLint blue, GLint alpha) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4i(red, green, blue, alpha); -} - -void gl4_3compat_glColor4fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4fv(v); -} - -void gl4_3compat_glColor4f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4f(red, green, blue, alpha); -} - -void gl4_3compat_glColor4dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4dv(v); -} - -void gl4_3compat_glColor4d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4d(red, green, blue, alpha); -} - -void gl4_3compat_glColor4bv(void *_glfuncs, const GLbyte* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4bv(v); -} - -void gl4_3compat_glColor4b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor4b(red, green, blue, alpha); -} - -void gl4_3compat_glColor3usv(void *_glfuncs, const GLushort* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3usv(v); -} - -void gl4_3compat_glColor3us(void *_glfuncs, GLushort red, GLushort green, GLushort blue) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3us(red, green, blue); -} - -void gl4_3compat_glColor3uiv(void *_glfuncs, const GLuint* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3uiv(v); -} - -void gl4_3compat_glColor3ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3ui(red, green, blue); -} - -void gl4_3compat_glColor3ubv(void *_glfuncs, const GLubyte* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3ubv(v); -} - -void gl4_3compat_glColor3ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3ub(red, green, blue); -} - -void gl4_3compat_glColor3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3sv(v); -} - -void gl4_3compat_glColor3s(void *_glfuncs, GLshort red, GLshort green, GLshort blue) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3s(red, green, blue); -} - -void gl4_3compat_glColor3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3iv(v); -} - -void gl4_3compat_glColor3i(void *_glfuncs, GLint red, GLint green, GLint blue) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3i(red, green, blue); -} - -void gl4_3compat_glColor3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3fv(v); -} - -void gl4_3compat_glColor3f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3f(red, green, blue); -} - -void gl4_3compat_glColor3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3dv(v); -} - -void gl4_3compat_glColor3d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3d(red, green, blue); -} - -void gl4_3compat_glColor3bv(void *_glfuncs, const GLbyte* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3bv(v); -} - -void gl4_3compat_glColor3b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColor3b(red, green, blue); -} - -void gl4_3compat_glBitmap(void *_glfuncs, GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte* bitmap) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBitmap(width, height, xorig, yorig, xmove, ymove, bitmap); -} - -void gl4_3compat_glBegin(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBegin(mode); -} - -void gl4_3compat_glListBase(void *_glfuncs, GLuint base) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glListBase(base); -} - -GLuint gl4_3compat_glGenLists(void *_glfuncs, GLsizei range_) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGenLists(range_); -} - -void gl4_3compat_glDeleteLists(void *_glfuncs, GLuint list, GLsizei range_) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteLists(list, range_); -} - -void gl4_3compat_glCallLists(void *_glfuncs, GLsizei n, GLenum gltype, const GLvoid* lists) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCallLists(n, gltype, lists); -} - -void gl4_3compat_glCallList(void *_glfuncs, GLuint list) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCallList(list); -} - -void gl4_3compat_glEndList(void *_glfuncs) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndList(); -} - -void gl4_3compat_glNewList(void *_glfuncs, GLuint list, GLenum mode) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNewList(list, mode); -} - -void gl4_3compat_glPushClientAttrib(void *_glfuncs, GLbitfield mask) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPushClientAttrib(mask); -} - -void gl4_3compat_glPopClientAttrib(void *_glfuncs) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPopClientAttrib(); -} - -void gl4_3compat_glPrioritizeTextures(void *_glfuncs, GLsizei n, const GLuint* textures, const GLfloat* priorities) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPrioritizeTextures(n, textures, priorities); -} - -GLboolean gl4_3compat_glAreTexturesResident(void *_glfuncs, GLsizei n, const GLuint* textures, GLboolean* residences) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glAreTexturesResident(n, textures, residences); -} - -void gl4_3compat_glVertexPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexPointer(size, gltype, stride, pointer); -} - -void gl4_3compat_glTexCoordPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordPointer(size, gltype, stride, pointer); -} - -void gl4_3compat_glNormalPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormalPointer(gltype, stride, pointer); -} - -void gl4_3compat_glInterleavedArrays(void *_glfuncs, GLenum format, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glInterleavedArrays(format, stride, pointer); -} - -void gl4_3compat_glIndexPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexPointer(gltype, stride, pointer); -} - -void gl4_3compat_glEnableClientState(void *_glfuncs, GLenum array) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnableClientState(array); -} - -void gl4_3compat_glEdgeFlagPointer(void *_glfuncs, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEdgeFlagPointer(stride, pointer); -} - -void gl4_3compat_glDisableClientState(void *_glfuncs, GLenum array) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDisableClientState(array); -} - -void gl4_3compat_glColorPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorPointer(size, gltype, stride, pointer); -} - -void gl4_3compat_glArrayElement(void *_glfuncs, GLint i) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glArrayElement(i); -} - -void gl4_3compat_glResetMinmax(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glResetMinmax(target); -} - -void gl4_3compat_glResetHistogram(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glResetHistogram(target); -} - -void gl4_3compat_glMinmax(void *_glfuncs, GLenum target, GLenum internalFormat, GLboolean sink) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMinmax(target, internalFormat, sink); -} - -void gl4_3compat_glHistogram(void *_glfuncs, GLenum target, GLsizei width, GLenum internalFormat, GLboolean sink) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glHistogram(target, width, internalFormat, sink); -} - -void gl4_3compat_glGetMinmaxParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMinmaxParameteriv(target, pname, params); -} - -void gl4_3compat_glGetMinmaxParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMinmaxParameterfv(target, pname, params); -} - -void gl4_3compat_glGetMinmax(void *_glfuncs, GLenum target, GLboolean reset, GLenum format, GLenum gltype, GLvoid* values) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMinmax(target, reset, format, gltype, values); -} - -void gl4_3compat_glGetHistogramParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetHistogramParameteriv(target, pname, params); -} - -void gl4_3compat_glGetHistogramParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetHistogramParameterfv(target, pname, params); -} - -void gl4_3compat_glGetHistogram(void *_glfuncs, GLenum target, GLboolean reset, GLenum format, GLenum gltype, GLvoid* values) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetHistogram(target, reset, format, gltype, values); -} - -void gl4_3compat_glSeparableFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* row, const GLvoid* column) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSeparableFilter2D(target, internalFormat, width, height, format, gltype, row, column); -} - -void gl4_3compat_glGetSeparableFilter(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* row, GLvoid* column, GLvoid* span) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetSeparableFilter(target, format, gltype, row, column, span); -} - -void gl4_3compat_glGetConvolutionParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetConvolutionParameteriv(target, pname, params); -} - -void gl4_3compat_glGetConvolutionParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetConvolutionParameterfv(target, pname, params); -} - -void gl4_3compat_glGetConvolutionFilter(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* image) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetConvolutionFilter(target, format, gltype, image); -} - -void gl4_3compat_glCopyConvolutionFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyConvolutionFilter2D(target, internalFormat, x, y, width, height); -} - -void gl4_3compat_glCopyConvolutionFilter1D(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyConvolutionFilter1D(target, internalFormat, x, y, width); -} - -void gl4_3compat_glConvolutionParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionParameteriv(target, pname, params); -} - -void gl4_3compat_glConvolutionParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionParameteri(target, pname, params); -} - -void gl4_3compat_glConvolutionParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionParameterfv(target, pname, params); -} - -void gl4_3compat_glConvolutionParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionParameterf(target, pname, params); -} - -void gl4_3compat_glConvolutionFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* image) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionFilter2D(target, internalFormat, width, height, format, gltype, image); -} - -void gl4_3compat_glConvolutionFilter1D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum gltype, const GLvoid* image) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glConvolutionFilter1D(target, internalFormat, width, format, gltype, image); -} - -void gl4_3compat_glCopyColorSubTable(void *_glfuncs, GLenum target, GLsizei start, GLint x, GLint y, GLsizei width) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyColorSubTable(target, start, x, y, width); -} - -void gl4_3compat_glColorSubTable(void *_glfuncs, GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum gltype, const GLvoid* data) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorSubTable(target, start, count, format, gltype, data); -} - -void gl4_3compat_glGetColorTableParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetColorTableParameteriv(target, pname, params); -} - -void gl4_3compat_glGetColorTableParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetColorTableParameterfv(target, pname, params); -} - -void gl4_3compat_glGetColorTable(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* table) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetColorTable(target, format, gltype, table); -} - -void gl4_3compat_glCopyColorTable(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyColorTable(target, internalFormat, x, y, width); -} - -void gl4_3compat_glColorTableParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorTableParameteriv(target, pname, params); -} - -void gl4_3compat_glColorTableParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorTableParameterfv(target, pname, params); -} - -void gl4_3compat_glColorTable(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum gltype, const GLvoid* table) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorTable(target, internalFormat, width, format, gltype, table); -} - -void gl4_3compat_glMultTransposeMatrixd(void *_glfuncs, const GLdouble* m) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultTransposeMatrixd(m); -} - -void gl4_3compat_glMultTransposeMatrixf(void *_glfuncs, const GLfloat* m) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultTransposeMatrixf(m); -} - -void gl4_3compat_glLoadTransposeMatrixd(void *_glfuncs, const GLdouble* m) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadTransposeMatrixd(m); -} - -void gl4_3compat_glLoadTransposeMatrixf(void *_glfuncs, const GLfloat* m) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLoadTransposeMatrixf(m); -} - -void gl4_3compat_glMultiTexCoord4sv(void *_glfuncs, GLenum target, const GLshort* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4sv(target, v); -} - -void gl4_3compat_glMultiTexCoord4s(void *_glfuncs, GLenum target, GLshort s, GLshort t, GLshort r, GLshort q) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4s(target, s, t, r, q); -} - -void gl4_3compat_glMultiTexCoord4iv(void *_glfuncs, GLenum target, const GLint* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4iv(target, v); -} - -void gl4_3compat_glMultiTexCoord4i(void *_glfuncs, GLenum target, GLint s, GLint t, GLint r, GLint q) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4i(target, s, t, r, q); -} - -void gl4_3compat_glMultiTexCoord4fv(void *_glfuncs, GLenum target, const GLfloat* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4fv(target, v); -} - -void gl4_3compat_glMultiTexCoord4f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4f(target, s, t, r, q); -} - -void gl4_3compat_glMultiTexCoord4dv(void *_glfuncs, GLenum target, const GLdouble* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4dv(target, v); -} - -void gl4_3compat_glMultiTexCoord4d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord4d(target, s, t, r, q); -} - -void gl4_3compat_glMultiTexCoord3sv(void *_glfuncs, GLenum target, const GLshort* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3sv(target, v); -} - -void gl4_3compat_glMultiTexCoord3s(void *_glfuncs, GLenum target, GLshort s, GLshort t, GLshort r) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3s(target, s, t, r); -} - -void gl4_3compat_glMultiTexCoord3iv(void *_glfuncs, GLenum target, const GLint* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3iv(target, v); -} - -void gl4_3compat_glMultiTexCoord3i(void *_glfuncs, GLenum target, GLint s, GLint t, GLint r) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3i(target, s, t, r); -} - -void gl4_3compat_glMultiTexCoord3fv(void *_glfuncs, GLenum target, const GLfloat* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3fv(target, v); -} - -void gl4_3compat_glMultiTexCoord3f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t, GLfloat r) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3f(target, s, t, r); -} - -void gl4_3compat_glMultiTexCoord3dv(void *_glfuncs, GLenum target, const GLdouble* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3dv(target, v); -} - -void gl4_3compat_glMultiTexCoord3d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t, GLdouble r) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord3d(target, s, t, r); -} - -void gl4_3compat_glMultiTexCoord2sv(void *_glfuncs, GLenum target, const GLshort* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2sv(target, v); -} - -void gl4_3compat_glMultiTexCoord2s(void *_glfuncs, GLenum target, GLshort s, GLshort t) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2s(target, s, t); -} - -void gl4_3compat_glMultiTexCoord2iv(void *_glfuncs, GLenum target, const GLint* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2iv(target, v); -} - -void gl4_3compat_glMultiTexCoord2i(void *_glfuncs, GLenum target, GLint s, GLint t) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2i(target, s, t); -} - -void gl4_3compat_glMultiTexCoord2fv(void *_glfuncs, GLenum target, const GLfloat* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2fv(target, v); -} - -void gl4_3compat_glMultiTexCoord2f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2f(target, s, t); -} - -void gl4_3compat_glMultiTexCoord2dv(void *_glfuncs, GLenum target, const GLdouble* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2dv(target, v); -} - -void gl4_3compat_glMultiTexCoord2d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord2d(target, s, t); -} - -void gl4_3compat_glMultiTexCoord1sv(void *_glfuncs, GLenum target, const GLshort* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1sv(target, v); -} - -void gl4_3compat_glMultiTexCoord1s(void *_glfuncs, GLenum target, GLshort s) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1s(target, s); -} - -void gl4_3compat_glMultiTexCoord1iv(void *_glfuncs, GLenum target, const GLint* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1iv(target, v); -} - -void gl4_3compat_glMultiTexCoord1i(void *_glfuncs, GLenum target, GLint s) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1i(target, s); -} - -void gl4_3compat_glMultiTexCoord1fv(void *_glfuncs, GLenum target, const GLfloat* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1fv(target, v); -} - -void gl4_3compat_glMultiTexCoord1f(void *_glfuncs, GLenum target, GLfloat s) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1f(target, s); -} - -void gl4_3compat_glMultiTexCoord1dv(void *_glfuncs, GLenum target, const GLdouble* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1dv(target, v); -} - -void gl4_3compat_glMultiTexCoord1d(void *_glfuncs, GLenum target, GLdouble s) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoord1d(target, s); -} - -void gl4_3compat_glClientActiveTexture(void *_glfuncs, GLenum texture) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClientActiveTexture(texture); -} - -void gl4_3compat_glWindowPos3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3sv(v); -} - -void gl4_3compat_glWindowPos3s(void *_glfuncs, GLshort x, GLshort y, GLshort z) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3s(x, y, z); -} - -void gl4_3compat_glWindowPos3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3iv(v); -} - -void gl4_3compat_glWindowPos3i(void *_glfuncs, GLint x, GLint y, GLint z) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3i(x, y, z); -} - -void gl4_3compat_glWindowPos3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3fv(v); -} - -void gl4_3compat_glWindowPos3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3f(x, y, z); -} - -void gl4_3compat_glWindowPos3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3dv(v); -} - -void gl4_3compat_glWindowPos3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos3d(x, y, z); -} - -void gl4_3compat_glWindowPos2sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2sv(v); -} - -void gl4_3compat_glWindowPos2s(void *_glfuncs, GLshort x, GLshort y) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2s(x, y); -} - -void gl4_3compat_glWindowPos2iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2iv(v); -} - -void gl4_3compat_glWindowPos2i(void *_glfuncs, GLint x, GLint y) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2i(x, y); -} - -void gl4_3compat_glWindowPos2fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2fv(v); -} - -void gl4_3compat_glWindowPos2f(void *_glfuncs, GLfloat x, GLfloat y) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2f(x, y); -} - -void gl4_3compat_glWindowPos2dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2dv(v); -} - -void gl4_3compat_glWindowPos2d(void *_glfuncs, GLdouble x, GLdouble y) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWindowPos2d(x, y); -} - -void gl4_3compat_glSecondaryColorPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColorPointer(size, gltype, stride, pointer); -} - -void gl4_3compat_glSecondaryColor3usv(void *_glfuncs, const GLushort* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3usv(v); -} - -void gl4_3compat_glSecondaryColor3us(void *_glfuncs, GLushort red, GLushort green, GLushort blue) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3us(red, green, blue); -} - -void gl4_3compat_glSecondaryColor3uiv(void *_glfuncs, const GLuint* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3uiv(v); -} - -void gl4_3compat_glSecondaryColor3ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3ui(red, green, blue); -} - -void gl4_3compat_glSecondaryColor3ubv(void *_glfuncs, const GLubyte* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3ubv(v); -} - -void gl4_3compat_glSecondaryColor3ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3ub(red, green, blue); -} - -void gl4_3compat_glSecondaryColor3sv(void *_glfuncs, const GLshort* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3sv(v); -} - -void gl4_3compat_glSecondaryColor3s(void *_glfuncs, GLshort red, GLshort green, GLshort blue) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3s(red, green, blue); -} - -void gl4_3compat_glSecondaryColor3iv(void *_glfuncs, const GLint* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3iv(v); -} - -void gl4_3compat_glSecondaryColor3i(void *_glfuncs, GLint red, GLint green, GLint blue) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3i(red, green, blue); -} - -void gl4_3compat_glSecondaryColor3fv(void *_glfuncs, const GLfloat* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3fv(v); -} - -void gl4_3compat_glSecondaryColor3f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3f(red, green, blue); -} - -void gl4_3compat_glSecondaryColor3dv(void *_glfuncs, const GLdouble* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3dv(v); -} - -void gl4_3compat_glSecondaryColor3d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3d(red, green, blue); -} - -void gl4_3compat_glSecondaryColor3bv(void *_glfuncs, const GLbyte* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3bv(v); -} - -void gl4_3compat_glSecondaryColor3b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColor3b(red, green, blue); -} - -void gl4_3compat_glFogCoordPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogCoordPointer(gltype, stride, pointer); -} - -void gl4_3compat_glFogCoorddv(void *_glfuncs, const GLdouble* coord) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogCoorddv(coord); -} - -void gl4_3compat_glFogCoordd(void *_glfuncs, GLdouble coord) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogCoordd(coord); -} - -void gl4_3compat_glFogCoordfv(void *_glfuncs, const GLfloat* coord) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogCoordfv(coord); -} - -void gl4_3compat_glFogCoordf(void *_glfuncs, GLfloat coord) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFogCoordf(coord); -} - -void gl4_3compat_glVertexAttrib4usv(void *_glfuncs, GLuint index, const GLushort* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4usv(index, v); -} - -void gl4_3compat_glVertexAttrib4uiv(void *_glfuncs, GLuint index, const GLuint* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4uiv(index, v); -} - -void gl4_3compat_glVertexAttrib4ubv(void *_glfuncs, GLuint index, const GLubyte* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4ubv(index, v); -} - -void gl4_3compat_glVertexAttrib4sv(void *_glfuncs, GLuint index, const GLshort* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4sv(index, v); -} - -void gl4_3compat_glVertexAttrib4s(void *_glfuncs, GLuint index, GLshort x, GLshort y, GLshort z, GLshort w) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4s(index, x, y, z, w); -} - -void gl4_3compat_glVertexAttrib4iv(void *_glfuncs, GLuint index, const GLint* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4iv(index, v); -} - -void gl4_3compat_glVertexAttrib4fv(void *_glfuncs, GLuint index, const GLfloat* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4fv(index, v); -} - -void gl4_3compat_glVertexAttrib4f(void *_glfuncs, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4f(index, x, y, z, w); -} - -void gl4_3compat_glVertexAttrib4dv(void *_glfuncs, GLuint index, const GLdouble* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4dv(index, v); -} - -void gl4_3compat_glVertexAttrib4d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4d(index, x, y, z, w); -} - -void gl4_3compat_glVertexAttrib4bv(void *_glfuncs, GLuint index, const GLbyte* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4bv(index, v); -} - -void gl4_3compat_glVertexAttrib4Nusv(void *_glfuncs, GLuint index, const GLushort* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4Nusv(index, v); -} - -void gl4_3compat_glVertexAttrib4Nuiv(void *_glfuncs, GLuint index, const GLuint* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4Nuiv(index, v); -} - -void gl4_3compat_glVertexAttrib4Nubv(void *_glfuncs, GLuint index, const GLubyte* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4Nubv(index, v); -} - -void gl4_3compat_glVertexAttrib4Nub(void *_glfuncs, GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4Nub(index, x, y, z, w); -} - -void gl4_3compat_glVertexAttrib4Nsv(void *_glfuncs, GLuint index, const GLshort* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4Nsv(index, v); -} - -void gl4_3compat_glVertexAttrib4Niv(void *_glfuncs, GLuint index, const GLint* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4Niv(index, v); -} - -void gl4_3compat_glVertexAttrib4Nbv(void *_glfuncs, GLuint index, const GLbyte* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4Nbv(index, v); -} - -void gl4_3compat_glVertexAttrib3sv(void *_glfuncs, GLuint index, const GLshort* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib3sv(index, v); -} - -void gl4_3compat_glVertexAttrib3s(void *_glfuncs, GLuint index, GLshort x, GLshort y, GLshort z) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib3s(index, x, y, z); -} - -void gl4_3compat_glVertexAttrib3fv(void *_glfuncs, GLuint index, const GLfloat* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib3fv(index, v); -} - -void gl4_3compat_glVertexAttrib3f(void *_glfuncs, GLuint index, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib3f(index, x, y, z); -} - -void gl4_3compat_glVertexAttrib3dv(void *_glfuncs, GLuint index, const GLdouble* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib3dv(index, v); -} - -void gl4_3compat_glVertexAttrib3d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib3d(index, x, y, z); -} - -void gl4_3compat_glVertexAttrib2sv(void *_glfuncs, GLuint index, const GLshort* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib2sv(index, v); -} - -void gl4_3compat_glVertexAttrib2s(void *_glfuncs, GLuint index, GLshort x, GLshort y) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib2s(index, x, y); -} - -void gl4_3compat_glVertexAttrib2fv(void *_glfuncs, GLuint index, const GLfloat* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib2fv(index, v); -} - -void gl4_3compat_glVertexAttrib2f(void *_glfuncs, GLuint index, GLfloat x, GLfloat y) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib2f(index, x, y); -} - -void gl4_3compat_glVertexAttrib2dv(void *_glfuncs, GLuint index, const GLdouble* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib2dv(index, v); -} - -void gl4_3compat_glVertexAttrib2d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib2d(index, x, y); -} - -void gl4_3compat_glVertexAttrib1sv(void *_glfuncs, GLuint index, const GLshort* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib1sv(index, v); -} - -void gl4_3compat_glVertexAttrib1s(void *_glfuncs, GLuint index, GLshort x) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib1s(index, x); -} - -void gl4_3compat_glVertexAttrib1fv(void *_glfuncs, GLuint index, const GLfloat* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib1fv(index, v); -} - -void gl4_3compat_glVertexAttrib1f(void *_glfuncs, GLuint index, GLfloat x) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib1f(index, x); -} - -void gl4_3compat_glVertexAttrib1dv(void *_glfuncs, GLuint index, const GLdouble* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib1dv(index, v); -} - -void gl4_3compat_glVertexAttrib1d(void *_glfuncs, GLuint index, GLdouble x) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib1d(index, x); -} - -void gl4_3compat_glVertexAttribI4usv(void *_glfuncs, GLuint index, const GLushort* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI4usv(index, v); -} - -void gl4_3compat_glVertexAttribI4ubv(void *_glfuncs, GLuint index, const GLubyte* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI4ubv(index, v); -} - -void gl4_3compat_glVertexAttribI4sv(void *_glfuncs, GLuint index, const GLshort* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI4sv(index, v); -} - -void gl4_3compat_glVertexAttribI4bv(void *_glfuncs, GLuint index, const GLbyte* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI4bv(index, v); -} - -void gl4_3compat_glVertexAttribI4uiv(void *_glfuncs, GLuint index, const GLuint* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI4uiv(index, v); -} - -void gl4_3compat_glVertexAttribI3uiv(void *_glfuncs, GLuint index, const GLuint* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI3uiv(index, v); -} - -void gl4_3compat_glVertexAttribI2uiv(void *_glfuncs, GLuint index, const GLuint* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI2uiv(index, v); -} - -void gl4_3compat_glVertexAttribI1uiv(void *_glfuncs, GLuint index, const GLuint* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI1uiv(index, v); -} - -void gl4_3compat_glVertexAttribI4iv(void *_glfuncs, GLuint index, const GLint* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI4iv(index, v); -} - -void gl4_3compat_glVertexAttribI3iv(void *_glfuncs, GLuint index, const GLint* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI3iv(index, v); -} - -void gl4_3compat_glVertexAttribI2iv(void *_glfuncs, GLuint index, const GLint* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI2iv(index, v); -} - -void gl4_3compat_glVertexAttribI1iv(void *_glfuncs, GLuint index, const GLint* v) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI1iv(index, v); -} - -void gl4_3compat_glVertexAttribI4ui(void *_glfuncs, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI4ui(index, x, y, z, w); -} - -void gl4_3compat_glVertexAttribI3ui(void *_glfuncs, GLuint index, GLuint x, GLuint y, GLuint z) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI3ui(index, x, y, z); -} - -void gl4_3compat_glVertexAttribI2ui(void *_glfuncs, GLuint index, GLuint x, GLuint y) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI2ui(index, x, y); -} - -void gl4_3compat_glVertexAttribI1ui(void *_glfuncs, GLuint index, GLuint x) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI1ui(index, x); -} - -void gl4_3compat_glVertexAttribI4i(void *_glfuncs, GLuint index, GLint x, GLint y, GLint z, GLint w) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI4i(index, x, y, z, w); -} - -void gl4_3compat_glVertexAttribI3i(void *_glfuncs, GLuint index, GLint x, GLint y, GLint z) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI3i(index, x, y, z); -} - -void gl4_3compat_glVertexAttribI2i(void *_glfuncs, GLuint index, GLint x, GLint y) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI2i(index, x, y); -} - -void gl4_3compat_glVertexAttribI1i(void *_glfuncs, GLuint index, GLint x) -{ - QOpenGLFunctions_4_3_Compatibility* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribI1i(index, x); -} - diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.3compat/funcs.h b/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.3compat/funcs.h deleted file mode 100644 index ef3dac794d..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.3compat/funcs.h +++ /dev/null @@ -1,965 +0,0 @@ - -// ** file automatically generated by glgen -- do not edit manually ** - -#ifndef __cplusplus -#include -#include -typedef unsigned int GLenum; -typedef unsigned char GLboolean; -typedef unsigned int GLbitfield; -typedef void GLvoid; -typedef char GLchar; -typedef signed char GLbyte; /* 1-byte signed */ -typedef short GLshort; /* 2-byte signed */ -typedef int GLint; /* 4-byte signed */ -typedef unsigned char GLubyte; /* 1-byte unsigned */ -typedef unsigned short GLushort; /* 2-byte unsigned */ -typedef unsigned int GLuint; /* 4-byte unsigned */ -typedef int GLsizei; /* 4-byte signed */ -typedef float GLfloat; /* single precision float */ -typedef float GLclampf; /* single precision float in [0,1] */ -typedef double GLdouble; /* double precision float */ -typedef double GLclampd; /* double precision float in [0,1] */ -typedef int64_t GLint64; -typedef uint64_t GLuint64; -typedef ptrdiff_t GLintptr; -typedef ptrdiff_t GLsizeiptr; -typedef ptrdiff_t GLintptrARB; -typedef ptrdiff_t GLsizeiptrARB; -typedef struct __GLsync *GLsync; -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -void *gl4_3compat_funcs(); - -void gl4_3compat_glViewport(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height); -void gl4_3compat_glDepthRange(void *_glfuncs, GLdouble nearVal, GLdouble farVal); -GLboolean gl4_3compat_glIsEnabled(void *_glfuncs, GLenum cap); -void gl4_3compat_glGetTexLevelParameteriv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLint* params); -void gl4_3compat_glGetTexLevelParameterfv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLfloat* params); -void gl4_3compat_glGetTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl4_3compat_glGetTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl4_3compat_glGetTexImage(void *_glfuncs, GLenum target, GLint level, GLenum format, GLenum gltype, GLvoid* pixels); -void gl4_3compat_glGetIntegerv(void *_glfuncs, GLenum pname, GLint* params); -void gl4_3compat_glGetFloatv(void *_glfuncs, GLenum pname, GLfloat* params); -GLenum gl4_3compat_glGetError(void *_glfuncs); -void gl4_3compat_glGetDoublev(void *_glfuncs, GLenum pname, GLdouble* params); -void gl4_3compat_glGetBooleanv(void *_glfuncs, GLenum pname, GLboolean* params); -void gl4_3compat_glReadPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum gltype, GLvoid* pixels); -void gl4_3compat_glReadBuffer(void *_glfuncs, GLenum mode); -void gl4_3compat_glPixelStorei(void *_glfuncs, GLenum pname, GLint param); -void gl4_3compat_glPixelStoref(void *_glfuncs, GLenum pname, GLfloat param); -void gl4_3compat_glDepthFunc(void *_glfuncs, GLenum glfunc); -void gl4_3compat_glStencilOp(void *_glfuncs, GLenum fail, GLenum zfail, GLenum zpass); -void gl4_3compat_glStencilFunc(void *_glfuncs, GLenum glfunc, GLint ref, GLuint mask); -void gl4_3compat_glLogicOp(void *_glfuncs, GLenum opcode); -void gl4_3compat_glBlendFunc(void *_glfuncs, GLenum sfactor, GLenum dfactor); -void gl4_3compat_glFlush(void *_glfuncs); -void gl4_3compat_glFinish(void *_glfuncs); -void gl4_3compat_glEnable(void *_glfuncs, GLenum cap); -void gl4_3compat_glDisable(void *_glfuncs, GLenum cap); -void gl4_3compat_glDepthMask(void *_glfuncs, GLboolean flag); -void gl4_3compat_glColorMask(void *_glfuncs, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); -void gl4_3compat_glStencilMask(void *_glfuncs, GLuint mask); -void gl4_3compat_glClearDepth(void *_glfuncs, GLdouble depth); -void gl4_3compat_glClearStencil(void *_glfuncs, GLint s); -void gl4_3compat_glClearColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl4_3compat_glClear(void *_glfuncs, GLbitfield mask); -void gl4_3compat_glDrawBuffer(void *_glfuncs, GLenum mode); -void gl4_3compat_glTexImage2D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl4_3compat_glTexImage1D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl4_3compat_glTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl4_3compat_glTexParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint param); -void gl4_3compat_glTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params); -void gl4_3compat_glTexParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param); -void gl4_3compat_glScissor(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height); -void gl4_3compat_glPolygonMode(void *_glfuncs, GLenum face, GLenum mode); -void gl4_3compat_glPointSize(void *_glfuncs, GLfloat size); -void gl4_3compat_glLineWidth(void *_glfuncs, GLfloat width); -void gl4_3compat_glHint(void *_glfuncs, GLenum target, GLenum mode); -void gl4_3compat_glFrontFace(void *_glfuncs, GLenum mode); -void gl4_3compat_glCullFace(void *_glfuncs, GLenum mode); -void gl4_3compat_glIndexubv(void *_glfuncs, const GLubyte* c); -void gl4_3compat_glIndexub(void *_glfuncs, GLubyte c); -GLboolean gl4_3compat_glIsTexture(void *_glfuncs, GLuint texture); -void gl4_3compat_glGenTextures(void *_glfuncs, GLsizei n, GLuint* textures); -void gl4_3compat_glDeleteTextures(void *_glfuncs, GLsizei n, const GLuint* textures); -void gl4_3compat_glBindTexture(void *_glfuncs, GLenum target, GLuint texture); -void gl4_3compat_glTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl4_3compat_glTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl4_3compat_glCopyTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -void gl4_3compat_glCopyTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -void gl4_3compat_glCopyTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -void gl4_3compat_glCopyTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border); -void gl4_3compat_glPolygonOffset(void *_glfuncs, GLfloat factor, GLfloat units); -void gl4_3compat_glDrawElements(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices); -void gl4_3compat_glDrawArrays(void *_glfuncs, GLenum mode, GLint first, GLsizei count); -void gl4_3compat_glCopyTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -void gl4_3compat_glTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl4_3compat_glTexImage3D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl4_3compat_glDrawRangeElements(void *_glfuncs, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum gltype, const GLvoid* indices); -void gl4_3compat_glBlendEquation(void *_glfuncs, GLenum mode); -void gl4_3compat_glBlendColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl4_3compat_glGetCompressedTexImage(void *_glfuncs, GLenum target, GLint level, GLvoid* img); -void gl4_3compat_glCompressedTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid* data); -void gl4_3compat_glCompressedTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data); -void gl4_3compat_glCompressedTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data); -void gl4_3compat_glCompressedTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid* data); -void gl4_3compat_glCompressedTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data); -void gl4_3compat_glCompressedTexImage3D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data); -void gl4_3compat_glSampleCoverage(void *_glfuncs, GLfloat value, GLboolean invert); -void gl4_3compat_glActiveTexture(void *_glfuncs, GLenum texture); -void gl4_3compat_glPointParameteriv(void *_glfuncs, GLenum pname, const GLint* params); -void gl4_3compat_glPointParameteri(void *_glfuncs, GLenum pname, GLint param); -void gl4_3compat_glPointParameterfv(void *_glfuncs, GLenum pname, const GLfloat* params); -void gl4_3compat_glPointParameterf(void *_glfuncs, GLenum pname, GLfloat param); -void gl4_3compat_glMultiDrawArrays(void *_glfuncs, GLenum mode, const GLint* first, const GLsizei* count, GLsizei drawcount); -void gl4_3compat_glBlendFuncSeparate(void *_glfuncs, GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -void gl4_3compat_glGetBufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -GLboolean gl4_3compat_glUnmapBuffer(void *_glfuncs, GLenum target); -void gl4_3compat_glGetBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, GLvoid* data); -void gl4_3compat_glBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data); -void gl4_3compat_glBufferData(void *_glfuncs, GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage); -GLboolean gl4_3compat_glIsBuffer(void *_glfuncs, GLuint buffer); -void gl4_3compat_glGenBuffers(void *_glfuncs, GLsizei n, GLuint* buffers); -void gl4_3compat_glDeleteBuffers(void *_glfuncs, GLsizei n, const GLuint* buffers); -void gl4_3compat_glBindBuffer(void *_glfuncs, GLenum target, GLuint buffer); -void gl4_3compat_glGetQueryObjectuiv(void *_glfuncs, GLuint id, GLenum pname, GLuint* params); -void gl4_3compat_glGetQueryObjectiv(void *_glfuncs, GLuint id, GLenum pname, GLint* params); -void gl4_3compat_glGetQueryiv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl4_3compat_glEndQuery(void *_glfuncs, GLenum target); -void gl4_3compat_glBeginQuery(void *_glfuncs, GLenum target, GLuint id); -GLboolean gl4_3compat_glIsQuery(void *_glfuncs, GLuint id); -void gl4_3compat_glDeleteQueries(void *_glfuncs, GLsizei n, const GLuint* ids); -void gl4_3compat_glGenQueries(void *_glfuncs, GLsizei n, GLuint* ids); -void gl4_3compat_glVertexAttribPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLboolean normalized, GLsizei stride, const GLvoid* offset); -void gl4_3compat_glValidateProgram(void *_glfuncs, GLuint program); -void gl4_3compat_glUniformMatrix4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_3compat_glUniformMatrix3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_3compat_glUniformMatrix2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_3compat_glUniform4iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gl4_3compat_glUniform3iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gl4_3compat_glUniform2iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gl4_3compat_glUniform1iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gl4_3compat_glUniform4fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gl4_3compat_glUniform3fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gl4_3compat_glUniform2fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gl4_3compat_glUniform1fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gl4_3compat_glUniform4i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -void gl4_3compat_glUniform3i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2); -void gl4_3compat_glUniform2i(void *_glfuncs, GLint location, GLint v0, GLint v1); -void gl4_3compat_glUniform1i(void *_glfuncs, GLint location, GLint v0); -void gl4_3compat_glUniform4f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -void gl4_3compat_glUniform3f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -void gl4_3compat_glUniform2f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1); -void gl4_3compat_glUniform1f(void *_glfuncs, GLint location, GLfloat v0); -void gl4_3compat_glUseProgram(void *_glfuncs, GLuint program); -void gl4_3compat_glShaderSource(void *_glfuncs, GLuint shader, GLsizei count, const GLchar** source, const GLint* length); -void gl4_3compat_glLinkProgram(void *_glfuncs, GLuint program); -GLboolean gl4_3compat_glIsShader(void *_glfuncs, GLuint shader); -GLboolean gl4_3compat_glIsProgram(void *_glfuncs, GLuint program); -void gl4_3compat_glGetVertexAttribiv(void *_glfuncs, GLuint index, GLenum pname, GLint* params); -void gl4_3compat_glGetVertexAttribfv(void *_glfuncs, GLuint index, GLenum pname, GLfloat* params); -void gl4_3compat_glGetVertexAttribdv(void *_glfuncs, GLuint index, GLenum pname, GLdouble* params); -void gl4_3compat_glGetUniformiv(void *_glfuncs, GLuint program, GLint location, GLint* params); -void gl4_3compat_glGetUniformfv(void *_glfuncs, GLuint program, GLint location, GLfloat* params); -GLint gl4_3compat_glGetUniformLocation(void *_glfuncs, GLuint program, const GLchar* name); -void gl4_3compat_glGetShaderSource(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* source); -void gl4_3compat_glGetShaderInfoLog(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* infoLog); -void gl4_3compat_glGetShaderiv(void *_glfuncs, GLuint shader, GLenum pname, GLint* params); -void gl4_3compat_glGetProgramInfoLog(void *_glfuncs, GLuint program, GLsizei bufSize, GLsizei* length, GLchar* infoLog); -void gl4_3compat_glGetProgramiv(void *_glfuncs, GLuint program, GLenum pname, GLint* params); -GLint gl4_3compat_glGetAttribLocation(void *_glfuncs, GLuint program, const GLchar* name); -void gl4_3compat_glGetAttachedShaders(void *_glfuncs, GLuint program, GLsizei maxCount, GLsizei* count, GLuint* obj); -void gl4_3compat_glGetActiveUniform(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name); -void gl4_3compat_glGetActiveAttrib(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name); -void gl4_3compat_glEnableVertexAttribArray(void *_glfuncs, GLuint index); -void gl4_3compat_glDisableVertexAttribArray(void *_glfuncs, GLuint index); -void gl4_3compat_glDetachShader(void *_glfuncs, GLuint program, GLuint shader); -void gl4_3compat_glDeleteShader(void *_glfuncs, GLuint shader); -void gl4_3compat_glDeleteProgram(void *_glfuncs, GLuint program); -GLuint gl4_3compat_glCreateShader(void *_glfuncs, GLenum gltype); -GLuint gl4_3compat_glCreateProgram(void *_glfuncs); -void gl4_3compat_glCompileShader(void *_glfuncs, GLuint shader); -void gl4_3compat_glBindAttribLocation(void *_glfuncs, GLuint program, GLuint index, const GLchar* name); -void gl4_3compat_glAttachShader(void *_glfuncs, GLuint program, GLuint shader); -void gl4_3compat_glStencilMaskSeparate(void *_glfuncs, GLenum face, GLuint mask); -void gl4_3compat_glStencilFuncSeparate(void *_glfuncs, GLenum face, GLenum glfunc, GLint ref, GLuint mask); -void gl4_3compat_glStencilOpSeparate(void *_glfuncs, GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); -void gl4_3compat_glDrawBuffers(void *_glfuncs, GLsizei n, const GLenum* bufs); -void gl4_3compat_glBlendEquationSeparate(void *_glfuncs, GLenum modeRGB, GLenum modeAlpha); -void gl4_3compat_glUniformMatrix4x3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_3compat_glUniformMatrix3x4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_3compat_glUniformMatrix4x2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_3compat_glUniformMatrix2x4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_3compat_glUniformMatrix3x2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_3compat_glUniformMatrix2x3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -GLboolean gl4_3compat_glIsVertexArray(void *_glfuncs, GLuint array); -void gl4_3compat_glGenVertexArrays(void *_glfuncs, GLsizei n, GLuint* arrays); -void gl4_3compat_glDeleteVertexArrays(void *_glfuncs, GLsizei n, const GLuint* arrays); -void gl4_3compat_glBindVertexArray(void *_glfuncs, GLuint array); -void gl4_3compat_glFlushMappedBufferRange(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr length); -void gl4_3compat_glFramebufferTextureLayer(void *_glfuncs, GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); -void gl4_3compat_glRenderbufferStorageMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height); -void gl4_3compat_glBlitFramebuffer(void *_glfuncs, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -void gl4_3compat_glGenerateMipmap(void *_glfuncs, GLenum target); -void gl4_3compat_glGetFramebufferAttachmentParameteriv(void *_glfuncs, GLenum target, GLenum attachment, GLenum pname, GLint* params); -void gl4_3compat_glFramebufferRenderbuffer(void *_glfuncs, GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -void gl4_3compat_glFramebufferTexture3D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -void gl4_3compat_glFramebufferTexture2D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -void gl4_3compat_glFramebufferTexture1D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLenum gl4_3compat_glCheckFramebufferStatus(void *_glfuncs, GLenum target); -void gl4_3compat_glGenFramebuffers(void *_glfuncs, GLsizei n, GLuint* framebuffers); -void gl4_3compat_glDeleteFramebuffers(void *_glfuncs, GLsizei n, const GLuint* framebuffers); -void gl4_3compat_glBindFramebuffer(void *_glfuncs, GLenum target, GLuint framebuffer); -GLboolean gl4_3compat_glIsFramebuffer(void *_glfuncs, GLuint framebuffer); -void gl4_3compat_glGetRenderbufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl4_3compat_glRenderbufferStorage(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height); -void gl4_3compat_glGenRenderbuffers(void *_glfuncs, GLsizei n, GLuint* renderbuffers); -void gl4_3compat_glDeleteRenderbuffers(void *_glfuncs, GLsizei n, const GLuint* renderbuffers); -void gl4_3compat_glBindRenderbuffer(void *_glfuncs, GLenum target, GLuint renderbuffer); -GLboolean gl4_3compat_glIsRenderbuffer(void *_glfuncs, GLuint renderbuffer); -void gl4_3compat_glClearBufferfi(void *_glfuncs, GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); -void gl4_3compat_glClearBufferfv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLfloat* value); -void gl4_3compat_glClearBufferuiv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLuint* value); -void gl4_3compat_glClearBufferiv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLint* value); -void gl4_3compat_glGetTexParameterIuiv(void *_glfuncs, GLenum target, GLenum pname, GLuint* params); -void gl4_3compat_glGetTexParameterIiv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl4_3compat_glTexParameterIuiv(void *_glfuncs, GLenum target, GLenum pname, const GLuint* params); -void gl4_3compat_glTexParameterIiv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl4_3compat_glUniform4uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value); -void gl4_3compat_glUniform3uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value); -void gl4_3compat_glUniform2uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value); -void gl4_3compat_glUniform1uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value); -void gl4_3compat_glUniform4ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -void gl4_3compat_glUniform3ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1, GLuint v2); -void gl4_3compat_glUniform2ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1); -void gl4_3compat_glUniform1ui(void *_glfuncs, GLint location, GLuint v0); -GLint gl4_3compat_glGetFragDataLocation(void *_glfuncs, GLuint program, const GLchar* name); -void gl4_3compat_glBindFragDataLocation(void *_glfuncs, GLuint program, GLuint color, const GLchar* name); -void gl4_3compat_glGetUniformuiv(void *_glfuncs, GLuint program, GLint location, GLuint* params); -void gl4_3compat_glGetVertexAttribIuiv(void *_glfuncs, GLuint index, GLenum pname, GLuint* params); -void gl4_3compat_glGetVertexAttribIiv(void *_glfuncs, GLuint index, GLenum pname, GLint* params); -void gl4_3compat_glVertexAttribIPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl4_3compat_glEndConditionalRender(void *_glfuncs); -void gl4_3compat_glBeginConditionalRender(void *_glfuncs, GLuint id, GLenum mode); -void gl4_3compat_glClampColor(void *_glfuncs, GLenum target, GLenum clamp); -void gl4_3compat_glGetTransformFeedbackVarying(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* gltype, GLchar* name); -void gl4_3compat_glBindBufferBase(void *_glfuncs, GLenum target, GLuint index, GLuint buffer); -void gl4_3compat_glBindBufferRange(void *_glfuncs, GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -void gl4_3compat_glEndTransformFeedback(void *_glfuncs); -void gl4_3compat_glBeginTransformFeedback(void *_glfuncs, GLenum primitiveMode); -GLboolean gl4_3compat_glIsEnabledi(void *_glfuncs, GLenum target, GLuint index); -void gl4_3compat_glDisablei(void *_glfuncs, GLenum target, GLuint index); -void gl4_3compat_glEnablei(void *_glfuncs, GLenum target, GLuint index); -void gl4_3compat_glGetIntegeri_v(void *_glfuncs, GLenum target, GLuint index, GLint* data); -void gl4_3compat_glGetBooleani_v(void *_glfuncs, GLenum target, GLuint index, GLboolean* data); -void gl4_3compat_glColorMaski(void *_glfuncs, GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); -void gl4_3compat_glCopyBufferSubData(void *_glfuncs, GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); -void gl4_3compat_glUniformBlockBinding(void *_glfuncs, GLuint program, GLuint v0, GLuint v1); -void gl4_3compat_glGetActiveUniformBlockName(void *_glfuncs, GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformBlockName); -void gl4_3compat_glGetActiveUniformBlockiv(void *_glfuncs, GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint* params); -GLuint gl4_3compat_glGetUniformBlockIndex(void *_glfuncs, GLuint program, const GLchar* uniformBlockName); -void gl4_3compat_glGetActiveUniformName(void *_glfuncs, GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformName); -void gl4_3compat_glGetActiveUniformsiv(void *_glfuncs, GLuint program, GLsizei uniformCount, const GLuint* uniformIndices, GLenum pname, GLint* params); -void gl4_3compat_glPrimitiveRestartIndex(void *_glfuncs, GLuint index); -void gl4_3compat_glTexBuffer(void *_glfuncs, GLenum target, GLenum internalFormat, GLuint buffer); -void gl4_3compat_glDrawElementsInstanced(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLsizei instancecount); -void gl4_3compat_glDrawArraysInstanced(void *_glfuncs, GLenum mode, GLint first, GLsizei count, GLsizei instancecount); -void gl4_3compat_glSampleMaski(void *_glfuncs, GLuint index, GLbitfield mask); -void gl4_3compat_glGetMultisamplefv(void *_glfuncs, GLenum pname, GLuint index, GLfloat* val); -void gl4_3compat_glTexImage3DMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); -void gl4_3compat_glTexImage2DMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); -void gl4_3compat_glGetSynciv(void *_glfuncs, GLsync sync, GLenum pname, GLsizei bufSize, GLsizei* length, GLint* values); -void gl4_3compat_glGetInteger64v(void *_glfuncs, GLenum pname, GLint64* params); -void gl4_3compat_glWaitSync(void *_glfuncs, GLsync sync, GLbitfield flags, GLuint64 timeout); -GLenum gl4_3compat_glClientWaitSync(void *_glfuncs, GLsync sync, GLbitfield flags, GLuint64 timeout); -void gl4_3compat_glDeleteSync(void *_glfuncs, GLsync sync); -GLboolean gl4_3compat_glIsSync(void *_glfuncs, GLsync sync); -GLsync gl4_3compat_glFenceSync(void *_glfuncs, GLenum condition, GLbitfield flags); -void gl4_3compat_glProvokingVertex(void *_glfuncs, GLenum mode); -void gl4_3compat_glDrawElementsInstancedBaseVertex(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLsizei instancecount, GLint basevertex); -void gl4_3compat_glDrawRangeElementsBaseVertex(void *_glfuncs, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum gltype, const GLvoid* indices, GLint basevertex); -void gl4_3compat_glDrawElementsBaseVertex(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLint basevertex); -void gl4_3compat_glFramebufferTexture(void *_glfuncs, GLenum target, GLenum attachment, GLuint texture, GLint level); -void gl4_3compat_glGetBufferParameteri64v(void *_glfuncs, GLenum target, GLenum pname, GLint64* params); -void gl4_3compat_glGetInteger64i_v(void *_glfuncs, GLenum target, GLuint index, GLint64* data); -void gl4_3compat_glVertexAttribP4uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value); -void gl4_3compat_glVertexAttribP4ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value); -void gl4_3compat_glVertexAttribP3uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value); -void gl4_3compat_glVertexAttribP3ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value); -void gl4_3compat_glVertexAttribP2uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value); -void gl4_3compat_glVertexAttribP2ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value); -void gl4_3compat_glVertexAttribP1uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value); -void gl4_3compat_glVertexAttribP1ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value); -void gl4_3compat_glSecondaryColorP3uiv(void *_glfuncs, GLenum gltype, const GLuint* color); -void gl4_3compat_glSecondaryColorP3ui(void *_glfuncs, GLenum gltype, GLuint color); -void gl4_3compat_glColorP4uiv(void *_glfuncs, GLenum gltype, const GLuint* color); -void gl4_3compat_glColorP4ui(void *_glfuncs, GLenum gltype, GLuint color); -void gl4_3compat_glColorP3uiv(void *_glfuncs, GLenum gltype, const GLuint* color); -void gl4_3compat_glColorP3ui(void *_glfuncs, GLenum gltype, GLuint color); -void gl4_3compat_glNormalP3uiv(void *_glfuncs, GLenum gltype, const GLuint* coords); -void gl4_3compat_glNormalP3ui(void *_glfuncs, GLenum gltype, GLuint coords); -void gl4_3compat_glMultiTexCoordP4uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords); -void gl4_3compat_glMultiTexCoordP4ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords); -void gl4_3compat_glMultiTexCoordP3uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords); -void gl4_3compat_glMultiTexCoordP3ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords); -void gl4_3compat_glMultiTexCoordP2uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords); -void gl4_3compat_glMultiTexCoordP2ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords); -void gl4_3compat_glMultiTexCoordP1uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords); -void gl4_3compat_glMultiTexCoordP1ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords); -void gl4_3compat_glTexCoordP4uiv(void *_glfuncs, GLenum gltype, const GLuint* coords); -void gl4_3compat_glTexCoordP4ui(void *_glfuncs, GLenum gltype, GLuint coords); -void gl4_3compat_glTexCoordP3uiv(void *_glfuncs, GLenum gltype, const GLuint* coords); -void gl4_3compat_glTexCoordP3ui(void *_glfuncs, GLenum gltype, GLuint coords); -void gl4_3compat_glTexCoordP2uiv(void *_glfuncs, GLenum gltype, const GLuint* coords); -void gl4_3compat_glTexCoordP2ui(void *_glfuncs, GLenum gltype, GLuint coords); -void gl4_3compat_glTexCoordP1uiv(void *_glfuncs, GLenum gltype, const GLuint* coords); -void gl4_3compat_glTexCoordP1ui(void *_glfuncs, GLenum gltype, GLuint coords); -void gl4_3compat_glVertexP4uiv(void *_glfuncs, GLenum gltype, const GLuint* value); -void gl4_3compat_glVertexP4ui(void *_glfuncs, GLenum gltype, GLuint value); -void gl4_3compat_glVertexP3uiv(void *_glfuncs, GLenum gltype, const GLuint* value); -void gl4_3compat_glVertexP3ui(void *_glfuncs, GLenum gltype, GLuint value); -void gl4_3compat_glVertexP2uiv(void *_glfuncs, GLenum gltype, const GLuint* value); -void gl4_3compat_glVertexP2ui(void *_glfuncs, GLenum gltype, GLuint value); -void gl4_3compat_glGetQueryObjectui64v(void *_glfuncs, GLuint id, GLenum pname, GLuint64* params); -void gl4_3compat_glGetQueryObjecti64v(void *_glfuncs, GLuint id, GLenum pname, GLint64* params); -void gl4_3compat_glQueryCounter(void *_glfuncs, GLuint id, GLenum target); -void gl4_3compat_glGetSamplerParameterIuiv(void *_glfuncs, GLuint sampler, GLenum pname, GLuint* params); -void gl4_3compat_glGetSamplerParameterfv(void *_glfuncs, GLuint sampler, GLenum pname, GLfloat* params); -void gl4_3compat_glGetSamplerParameterIiv(void *_glfuncs, GLuint sampler, GLenum pname, GLint* params); -void gl4_3compat_glGetSamplerParameteriv(void *_glfuncs, GLuint sampler, GLenum pname, GLint* params); -void gl4_3compat_glSamplerParameterIuiv(void *_glfuncs, GLuint sampler, GLenum pname, const GLuint* param); -void gl4_3compat_glSamplerParameterIiv(void *_glfuncs, GLuint sampler, GLenum pname, const GLint* param); -void gl4_3compat_glSamplerParameterfv(void *_glfuncs, GLuint sampler, GLenum pname, const GLfloat* param); -void gl4_3compat_glSamplerParameterf(void *_glfuncs, GLuint sampler, GLenum pname, GLfloat param); -void gl4_3compat_glSamplerParameteriv(void *_glfuncs, GLuint sampler, GLenum pname, const GLint* param); -void gl4_3compat_glSamplerParameteri(void *_glfuncs, GLuint sampler, GLenum pname, GLint param); -void gl4_3compat_glBindSampler(void *_glfuncs, GLuint unit, GLuint sampler); -GLboolean gl4_3compat_glIsSampler(void *_glfuncs, GLuint sampler); -void gl4_3compat_glDeleteSamplers(void *_glfuncs, GLsizei count, const GLuint* samplers); -void gl4_3compat_glGenSamplers(void *_glfuncs, GLsizei count, GLuint* samplers); -GLint gl4_3compat_glGetFragDataIndex(void *_glfuncs, GLuint program, const GLchar* name); -void gl4_3compat_glBindFragDataLocationIndexed(void *_glfuncs, GLuint program, GLuint colorNumber, GLuint index, const GLchar* name); -void gl4_3compat_glVertexAttribDivisor(void *_glfuncs, GLuint index, GLuint divisor); -void gl4_3compat_glGetQueryIndexediv(void *_glfuncs, GLenum target, GLuint index, GLenum pname, GLint* params); -void gl4_3compat_glEndQueryIndexed(void *_glfuncs, GLenum target, GLuint index); -void gl4_3compat_glBeginQueryIndexed(void *_glfuncs, GLenum target, GLuint index, GLuint id); -void gl4_3compat_glDrawTransformFeedbackStream(void *_glfuncs, GLenum mode, GLuint id, GLuint stream); -void gl4_3compat_glDrawTransformFeedback(void *_glfuncs, GLenum mode, GLuint id); -void gl4_3compat_glResumeTransformFeedback(void *_glfuncs); -void gl4_3compat_glPauseTransformFeedback(void *_glfuncs); -GLboolean gl4_3compat_glIsTransformFeedback(void *_glfuncs, GLuint id); -void gl4_3compat_glGenTransformFeedbacks(void *_glfuncs, GLsizei n, GLuint* ids); -void gl4_3compat_glDeleteTransformFeedbacks(void *_glfuncs, GLsizei n, const GLuint* ids); -void gl4_3compat_glBindTransformFeedback(void *_glfuncs, GLenum target, GLuint id); -void gl4_3compat_glPatchParameterfv(void *_glfuncs, GLenum pname, const GLfloat* values); -void gl4_3compat_glPatchParameteri(void *_glfuncs, GLenum pname, GLint value); -void gl4_3compat_glGetProgramStageiv(void *_glfuncs, GLuint program, GLenum shadertype, GLenum pname, GLint* values); -void gl4_3compat_glGetUniformSubroutineuiv(void *_glfuncs, GLenum shadertype, GLint location, GLuint* params); -void gl4_3compat_glUniformSubroutinesuiv(void *_glfuncs, GLenum shadertype, GLsizei count, const GLuint* value); -void gl4_3compat_glGetActiveSubroutineName(void *_glfuncs, GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei* length, GLchar* name); -void gl4_3compat_glGetActiveSubroutineUniformName(void *_glfuncs, GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei* length, GLchar* name); -void gl4_3compat_glGetActiveSubroutineUniformiv(void *_glfuncs, GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint* values); -GLuint gl4_3compat_glGetSubroutineIndex(void *_glfuncs, GLuint program, GLenum shadertype, const GLchar* name); -GLint gl4_3compat_glGetSubroutineUniformLocation(void *_glfuncs, GLuint program, GLenum shadertype, const GLchar* name); -void gl4_3compat_glGetUniformdv(void *_glfuncs, GLuint program, GLint location, GLdouble* params); -void gl4_3compat_glUniformMatrix4x3dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_3compat_glUniformMatrix4x2dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_3compat_glUniformMatrix3x4dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_3compat_glUniformMatrix3x2dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_3compat_glUniformMatrix2x4dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_3compat_glUniformMatrix2x3dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_3compat_glUniformMatrix4dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_3compat_glUniformMatrix3dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_3compat_glUniformMatrix2dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_3compat_glUniform4dv(void *_glfuncs, GLint location, GLsizei count, const GLdouble* value); -void gl4_3compat_glUniform3dv(void *_glfuncs, GLint location, GLsizei count, const GLdouble* value); -void gl4_3compat_glUniform2dv(void *_glfuncs, GLint location, GLsizei count, const GLdouble* value); -void gl4_3compat_glUniform1dv(void *_glfuncs, GLint location, GLsizei count, const GLdouble* value); -void gl4_3compat_glUniform4d(void *_glfuncs, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3); -void gl4_3compat_glUniform3d(void *_glfuncs, GLint location, GLdouble v0, GLdouble v1, GLdouble v2); -void gl4_3compat_glUniform2d(void *_glfuncs, GLint location, GLdouble v0, GLdouble v1); -void gl4_3compat_glUniform1d(void *_glfuncs, GLint location, GLdouble v0); -void gl4_3compat_glDrawElementsIndirect(void *_glfuncs, GLenum mode, GLenum gltype, const GLvoid* indirect); -void gl4_3compat_glDrawArraysIndirect(void *_glfuncs, GLenum mode, const GLvoid* indirect); -void gl4_3compat_glBlendFuncSeparatei(void *_glfuncs, GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -void gl4_3compat_glBlendFunci(void *_glfuncs, GLuint buf, GLenum src, GLenum dst); -void gl4_3compat_glBlendEquationSeparatei(void *_glfuncs, GLuint buf, GLenum modeRGB, GLenum modeAlpha); -void gl4_3compat_glBlendEquationi(void *_glfuncs, GLuint buf, GLenum mode); -void gl4_3compat_glMinSampleShading(void *_glfuncs, GLfloat value); -void gl4_3compat_glGetDoublei_v(void *_glfuncs, GLenum target, GLuint index, GLdouble* data); -void gl4_3compat_glGetFloati_v(void *_glfuncs, GLenum target, GLuint index, GLfloat* data); -void gl4_3compat_glDepthRangeIndexed(void *_glfuncs, GLuint index, GLdouble n, GLdouble f); -void gl4_3compat_glDepthRangeArrayv(void *_glfuncs, GLuint first, GLsizei count, const GLdouble* v); -void gl4_3compat_glScissorIndexedv(void *_glfuncs, GLuint index, const GLint* v); -void gl4_3compat_glScissorIndexed(void *_glfuncs, GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); -void gl4_3compat_glScissorArrayv(void *_glfuncs, GLuint first, GLsizei count, const GLint* v); -void gl4_3compat_glViewportIndexedfv(void *_glfuncs, GLuint index, const GLfloat* v); -void gl4_3compat_glViewportIndexedf(void *_glfuncs, GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); -void gl4_3compat_glViewportArrayv(void *_glfuncs, GLuint first, GLsizei count, const GLfloat* v); -void gl4_3compat_glGetVertexAttribLdv(void *_glfuncs, GLuint index, GLenum pname, GLdouble* params); -void gl4_3compat_glVertexAttribLPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl4_3compat_glVertexAttribL4dv(void *_glfuncs, GLuint index, const GLdouble* v); -void gl4_3compat_glVertexAttribL3dv(void *_glfuncs, GLuint index, const GLdouble* v); -void gl4_3compat_glVertexAttribL2dv(void *_glfuncs, GLuint index, const GLdouble* v); -void gl4_3compat_glVertexAttribL1dv(void *_glfuncs, GLuint index, const GLdouble* v); -void gl4_3compat_glVertexAttribL4d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -void gl4_3compat_glVertexAttribL3d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y, GLdouble z); -void gl4_3compat_glVertexAttribL2d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y); -void gl4_3compat_glVertexAttribL1d(void *_glfuncs, GLuint index, GLdouble x); -void gl4_3compat_glGetProgramPipelineInfoLog(void *_glfuncs, GLuint pipeline, GLsizei bufSize, GLsizei* length, GLchar* infoLog); -void gl4_3compat_glValidateProgramPipeline(void *_glfuncs, GLuint pipeline); -void gl4_3compat_glProgramUniformMatrix4x3dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_3compat_glProgramUniformMatrix3x4dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_3compat_glProgramUniformMatrix4x2dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_3compat_glProgramUniformMatrix2x4dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_3compat_glProgramUniformMatrix3x2dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_3compat_glProgramUniformMatrix2x3dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_3compat_glProgramUniformMatrix4x3fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_3compat_glProgramUniformMatrix3x4fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_3compat_glProgramUniformMatrix4x2fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_3compat_glProgramUniformMatrix2x4fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_3compat_glProgramUniformMatrix3x2fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_3compat_glProgramUniformMatrix2x3fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_3compat_glProgramUniformMatrix4dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_3compat_glProgramUniformMatrix3dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_3compat_glProgramUniformMatrix2dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_3compat_glProgramUniformMatrix4fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_3compat_glProgramUniformMatrix3fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_3compat_glProgramUniformMatrix2fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_3compat_glProgramUniform4uiv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLuint* value); -void gl4_3compat_glProgramUniform4ui(void *_glfuncs, GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -void gl4_3compat_glProgramUniform4dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLdouble* value); -void gl4_3compat_glProgramUniform4d(void *_glfuncs, GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3); -void gl4_3compat_glProgramUniform4fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLfloat* value); -void gl4_3compat_glProgramUniform4f(void *_glfuncs, GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -void gl4_3compat_glProgramUniform4iv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLint* value); -void gl4_3compat_glProgramUniform4i(void *_glfuncs, GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -void gl4_3compat_glProgramUniform3uiv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLuint* value); -void gl4_3compat_glProgramUniform3ui(void *_glfuncs, GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); -void gl4_3compat_glProgramUniform3dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLdouble* value); -void gl4_3compat_glProgramUniform3d(void *_glfuncs, GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2); -void gl4_3compat_glProgramUniform3fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLfloat* value); -void gl4_3compat_glProgramUniform3f(void *_glfuncs, GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -void gl4_3compat_glProgramUniform3iv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLint* value); -void gl4_3compat_glProgramUniform3i(void *_glfuncs, GLuint program, GLint location, GLint v0, GLint v1, GLint v2); -void gl4_3compat_glProgramUniform2uiv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLuint* value); -void gl4_3compat_glProgramUniform2ui(void *_glfuncs, GLuint program, GLint location, GLuint v0, GLuint v1); -void gl4_3compat_glProgramUniform2dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLdouble* value); -void gl4_3compat_glProgramUniform2d(void *_glfuncs, GLuint program, GLint location, GLdouble v0, GLdouble v1); -void gl4_3compat_glProgramUniform2fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLfloat* value); -void gl4_3compat_glProgramUniform2f(void *_glfuncs, GLuint program, GLint location, GLfloat v0, GLfloat v1); -void gl4_3compat_glProgramUniform2iv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLint* value); -void gl4_3compat_glProgramUniform2i(void *_glfuncs, GLuint program, GLint location, GLint v0, GLint v1); -void gl4_3compat_glProgramUniform1uiv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLuint* value); -void gl4_3compat_glProgramUniform1ui(void *_glfuncs, GLuint program, GLint location, GLuint v0); -void gl4_3compat_glProgramUniform1dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLdouble* value); -void gl4_3compat_glProgramUniform1d(void *_glfuncs, GLuint program, GLint location, GLdouble v0); -void gl4_3compat_glProgramUniform1fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLfloat* value); -void gl4_3compat_glProgramUniform1f(void *_glfuncs, GLuint program, GLint location, GLfloat v0); -void gl4_3compat_glProgramUniform1iv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLint* value); -void gl4_3compat_glProgramUniform1i(void *_glfuncs, GLuint program, GLint location, GLint v0); -void gl4_3compat_glGetProgramPipelineiv(void *_glfuncs, GLuint pipeline, GLenum pname, GLint* params); -GLboolean gl4_3compat_glIsProgramPipeline(void *_glfuncs, GLuint pipeline); -void gl4_3compat_glGenProgramPipelines(void *_glfuncs, GLsizei n, GLuint* pipelines); -void gl4_3compat_glDeleteProgramPipelines(void *_glfuncs, GLsizei n, const GLuint* pipelines); -void gl4_3compat_glBindProgramPipeline(void *_glfuncs, GLuint pipeline); -void gl4_3compat_glActiveShaderProgram(void *_glfuncs, GLuint pipeline, GLuint program); -void gl4_3compat_glUseProgramStages(void *_glfuncs, GLuint pipeline, GLbitfield stages, GLuint program); -void gl4_3compat_glProgramParameteri(void *_glfuncs, GLuint program, GLenum pname, GLint value); -void gl4_3compat_glProgramBinary(void *_glfuncs, GLuint program, GLenum binaryFormat, const GLvoid* binary, GLsizei length); -void gl4_3compat_glGetProgramBinary(void *_glfuncs, GLuint program, GLsizei bufSize, GLsizei* length, GLenum* binaryFormat, GLvoid* binary); -void gl4_3compat_glClearDepthf(void *_glfuncs, GLfloat dd); -void gl4_3compat_glDepthRangef(void *_glfuncs, GLfloat n, GLfloat f); -void gl4_3compat_glGetShaderPrecisionFormat(void *_glfuncs, GLenum shadertype, GLenum precisionType, GLint* range_, GLint* precision); -void gl4_3compat_glShaderBinary(void *_glfuncs, GLsizei count, const GLuint* shaders, GLenum binaryFormat, const GLvoid* binary, GLsizei length); -void gl4_3compat_glReleaseShaderCompiler(void *_glfuncs); -void gl4_3compat_glTexStorage3D(void *_glfuncs, GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth); -void gl4_3compat_glTexStorage2D(void *_glfuncs, GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height); -void gl4_3compat_glTexStorage1D(void *_glfuncs, GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width); -void gl4_3compat_glMemoryBarrier(void *_glfuncs, GLbitfield barriers); -void gl4_3compat_glBindImageTexture(void *_glfuncs, GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format); -void gl4_3compat_glGetActiveAtomicCounterBufferiv(void *_glfuncs, GLuint program, GLuint bufferIndex, GLenum pname, GLint* params); -void gl4_3compat_glGetInternalformativ(void *_glfuncs, GLenum target, GLenum internalFormat, GLenum pname, GLsizei bufSize, GLint* params); -void gl4_3compat_glDrawTransformFeedbackStreamInstanced(void *_glfuncs, GLenum mode, GLuint id, GLuint stream, GLsizei instancecount); -void gl4_3compat_glDrawTransformFeedbackInstanced(void *_glfuncs, GLenum mode, GLuint id, GLsizei instancecount); -void gl4_3compat_glDrawElementsInstancedBaseVertexBaseInstance(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance); -void gl4_3compat_glDrawElementsInstancedBaseInstance(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLsizei instancecount, GLuint baseinstance); -void gl4_3compat_glDrawArraysInstancedBaseInstance(void *_glfuncs, GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance); -void gl4_3compat_glTexStorage3DMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); -void gl4_3compat_glTexStorage2DMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); -void gl4_3compat_glTexBufferRange(void *_glfuncs, GLenum target, GLenum internalFormat, GLuint buffer, GLintptr offset, GLsizeiptr size); -void gl4_3compat_glShaderStorageBlockBinding(void *_glfuncs, GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding); -GLint gl4_3compat_glGetProgramResourceLocationIndex(void *_glfuncs, GLuint program, GLenum programInterface, const GLchar* name); -GLint gl4_3compat_glGetProgramResourceLocation(void *_glfuncs, GLuint program, GLenum programInterface, const GLchar* name); -void gl4_3compat_glGetProgramResourceiv(void *_glfuncs, GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum* props, GLsizei bufSize, GLsizei* length, GLint* params); -void gl4_3compat_glGetProgramResourceName(void *_glfuncs, GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei* length, GLchar* name); -GLuint gl4_3compat_glGetProgramResourceIndex(void *_glfuncs, GLuint program, GLenum programInterface, const GLchar* name); -void gl4_3compat_glGetProgramInterfaceiv(void *_glfuncs, GLuint program, GLenum programInterface, GLenum pname, GLint* params); -void gl4_3compat_glMultiDrawElementsIndirect(void *_glfuncs, GLenum mode, GLenum gltype, const GLvoid* indirect, GLsizei drawcount, GLsizei stride); -void gl4_3compat_glMultiDrawArraysIndirect(void *_glfuncs, GLenum mode, const GLvoid* indirect, GLsizei drawcount, GLsizei stride); -void gl4_3compat_glInvalidateSubFramebuffer(void *_glfuncs, GLenum target, GLsizei numAttachments, const GLenum* attachments, GLint x, GLint y, GLsizei width, GLsizei height); -void gl4_3compat_glInvalidateFramebuffer(void *_glfuncs, GLenum target, GLsizei numAttachments, const GLenum* attachments); -void gl4_3compat_glInvalidateBufferData(void *_glfuncs, GLuint buffer); -void gl4_3compat_glInvalidateBufferSubData(void *_glfuncs, GLuint buffer, GLintptr offset, GLsizeiptr length); -void gl4_3compat_glInvalidateTexImage(void *_glfuncs, GLuint texture, GLint level); -void gl4_3compat_glInvalidateTexSubImage(void *_glfuncs, GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth); -void gl4_3compat_glGetInternalformati64v(void *_glfuncs, GLenum target, GLenum internalFormat, GLenum pname, GLsizei bufSize, GLint64* params); -void gl4_3compat_glGetFramebufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl4_3compat_glFramebufferParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint param); -void gl4_3compat_glVertexBindingDivisor(void *_glfuncs, GLuint bindingindex, GLuint divisor); -void gl4_3compat_glVertexAttribBinding(void *_glfuncs, GLuint attribindex, GLuint bindingindex); -void gl4_3compat_glVertexAttribLFormat(void *_glfuncs, GLuint attribindex, GLint size, GLenum gltype, GLuint relativeoffset); -void gl4_3compat_glVertexAttribIFormat(void *_glfuncs, GLuint attribindex, GLint size, GLenum gltype, GLuint relativeoffset); -void gl4_3compat_glVertexAttribFormat(void *_glfuncs, GLuint attribindex, GLint size, GLenum gltype, GLboolean normalized, GLuint relativeoffset); -void gl4_3compat_glBindVertexBuffer(void *_glfuncs, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); -void gl4_3compat_glTextureView(void *_glfuncs, GLuint texture, GLenum target, GLuint origtexture, GLenum internalFormat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); -void gl4_3compat_glCopyImageSubData(void *_glfuncs, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); -void gl4_3compat_glDispatchComputeIndirect(void *_glfuncs, GLintptr indirect); -void gl4_3compat_glDispatchCompute(void *_glfuncs, GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z); -void gl4_3compat_glClearBufferSubData(void *_glfuncs, GLenum target, GLenum internalFormat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum gltype, const GLvoid* data); -void gl4_3compat_glClearBufferData(void *_glfuncs, GLenum target, GLenum internalFormat, GLenum format, GLenum gltype, const GLvoid* data); -void gl4_3compat_glTranslatef(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl4_3compat_glTranslated(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl4_3compat_glScalef(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl4_3compat_glScaled(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl4_3compat_glRotatef(void *_glfuncs, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); -void gl4_3compat_glRotated(void *_glfuncs, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); -void gl4_3compat_glPushMatrix(void *_glfuncs); -void gl4_3compat_glPopMatrix(void *_glfuncs); -void gl4_3compat_glOrtho(void *_glfuncs, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -void gl4_3compat_glMultMatrixd(void *_glfuncs, const GLdouble* m); -void gl4_3compat_glMultMatrixf(void *_glfuncs, const GLfloat* m); -void gl4_3compat_glMatrixMode(void *_glfuncs, GLenum mode); -void gl4_3compat_glLoadMatrixd(void *_glfuncs, const GLdouble* m); -void gl4_3compat_glLoadMatrixf(void *_glfuncs, const GLfloat* m); -void gl4_3compat_glLoadIdentity(void *_glfuncs); -void gl4_3compat_glFrustum(void *_glfuncs, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -GLboolean gl4_3compat_glIsList(void *_glfuncs, GLuint list); -void gl4_3compat_glGetTexGeniv(void *_glfuncs, GLenum coord, GLenum pname, GLint* params); -void gl4_3compat_glGetTexGenfv(void *_glfuncs, GLenum coord, GLenum pname, GLfloat* params); -void gl4_3compat_glGetTexGendv(void *_glfuncs, GLenum coord, GLenum pname, GLdouble* params); -void gl4_3compat_glGetTexEnviv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl4_3compat_glGetTexEnvfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl4_3compat_glGetPolygonStipple(void *_glfuncs, GLubyte* mask); -void gl4_3compat_glGetPixelMapusv(void *_glfuncs, GLenum glmap, GLushort* values); -void gl4_3compat_glGetPixelMapuiv(void *_glfuncs, GLenum glmap, GLuint* values); -void gl4_3compat_glGetPixelMapfv(void *_glfuncs, GLenum glmap, GLfloat* values); -void gl4_3compat_glGetMaterialiv(void *_glfuncs, GLenum face, GLenum pname, GLint* params); -void gl4_3compat_glGetMaterialfv(void *_glfuncs, GLenum face, GLenum pname, GLfloat* params); -void gl4_3compat_glGetMapiv(void *_glfuncs, GLenum target, GLenum query, GLint* v); -void gl4_3compat_glGetMapfv(void *_glfuncs, GLenum target, GLenum query, GLfloat* v); -void gl4_3compat_glGetMapdv(void *_glfuncs, GLenum target, GLenum query, GLdouble* v); -void gl4_3compat_glGetLightiv(void *_glfuncs, GLenum light, GLenum pname, GLint* params); -void gl4_3compat_glGetLightfv(void *_glfuncs, GLenum light, GLenum pname, GLfloat* params); -void gl4_3compat_glGetClipPlane(void *_glfuncs, GLenum plane, GLdouble* equation); -void gl4_3compat_glDrawPixels(void *_glfuncs, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl4_3compat_glCopyPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum gltype); -void gl4_3compat_glPixelMapusv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLushort* values); -void gl4_3compat_glPixelMapuiv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLuint* values); -void gl4_3compat_glPixelMapfv(void *_glfuncs, GLenum glmap, GLint mapsize, const GLfloat* values); -void gl4_3compat_glPixelTransferi(void *_glfuncs, GLenum pname, GLint param); -void gl4_3compat_glPixelTransferf(void *_glfuncs, GLenum pname, GLfloat param); -void gl4_3compat_glPixelZoom(void *_glfuncs, GLfloat xfactor, GLfloat yfactor); -void gl4_3compat_glAlphaFunc(void *_glfuncs, GLenum glfunc, GLfloat ref); -void gl4_3compat_glEvalPoint2(void *_glfuncs, GLint i, GLint j); -void gl4_3compat_glEvalMesh2(void *_glfuncs, GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2); -void gl4_3compat_glEvalPoint1(void *_glfuncs, GLint i); -void gl4_3compat_glEvalMesh1(void *_glfuncs, GLenum mode, GLint i1, GLint i2); -void gl4_3compat_glEvalCoord2fv(void *_glfuncs, const GLfloat* u); -void gl4_3compat_glEvalCoord2f(void *_glfuncs, GLfloat u, GLfloat v); -void gl4_3compat_glEvalCoord2dv(void *_glfuncs, const GLdouble* u); -void gl4_3compat_glEvalCoord2d(void *_glfuncs, GLdouble u, GLdouble v); -void gl4_3compat_glEvalCoord1fv(void *_glfuncs, const GLfloat* u); -void gl4_3compat_glEvalCoord1f(void *_glfuncs, GLfloat u); -void gl4_3compat_glEvalCoord1dv(void *_glfuncs, const GLdouble* u); -void gl4_3compat_glEvalCoord1d(void *_glfuncs, GLdouble u); -void gl4_3compat_glMapGrid2f(void *_glfuncs, GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2); -void gl4_3compat_glMapGrid2d(void *_glfuncs, GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2); -void gl4_3compat_glMapGrid1f(void *_glfuncs, GLint un, GLfloat u1, GLfloat u2); -void gl4_3compat_glMapGrid1d(void *_glfuncs, GLint un, GLdouble u1, GLdouble u2); -void gl4_3compat_glMap2f(void *_glfuncs, GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat* points); -void gl4_3compat_glMap2d(void *_glfuncs, GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble* points); -void gl4_3compat_glMap1f(void *_glfuncs, GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat* points); -void gl4_3compat_glMap1d(void *_glfuncs, GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble* points); -void gl4_3compat_glPushAttrib(void *_glfuncs, GLbitfield mask); -void gl4_3compat_glPopAttrib(void *_glfuncs); -void gl4_3compat_glAccum(void *_glfuncs, GLenum op, GLfloat value); -void gl4_3compat_glIndexMask(void *_glfuncs, GLuint mask); -void gl4_3compat_glClearIndex(void *_glfuncs, GLfloat c); -void gl4_3compat_glClearAccum(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl4_3compat_glPushName(void *_glfuncs, GLuint name); -void gl4_3compat_glPopName(void *_glfuncs); -void gl4_3compat_glPassThrough(void *_glfuncs, GLfloat token); -void gl4_3compat_glLoadName(void *_glfuncs, GLuint name); -void gl4_3compat_glInitNames(void *_glfuncs); -GLint gl4_3compat_glRenderMode(void *_glfuncs, GLenum mode); -void gl4_3compat_glSelectBuffer(void *_glfuncs, GLsizei size, GLuint* buffer); -void gl4_3compat_glFeedbackBuffer(void *_glfuncs, GLsizei size, GLenum gltype, GLfloat* buffer); -void gl4_3compat_glTexGeniv(void *_glfuncs, GLenum coord, GLenum pname, const GLint* params); -void gl4_3compat_glTexGeni(void *_glfuncs, GLenum coord, GLenum pname, GLint param); -void gl4_3compat_glTexGenfv(void *_glfuncs, GLenum coord, GLenum pname, const GLfloat* params); -void gl4_3compat_glTexGenf(void *_glfuncs, GLenum coord, GLenum pname, GLfloat param); -void gl4_3compat_glTexGendv(void *_glfuncs, GLenum coord, GLenum pname, const GLdouble* params); -void gl4_3compat_glTexGend(void *_glfuncs, GLenum coord, GLenum pname, GLdouble param); -void gl4_3compat_glTexEnviv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl4_3compat_glTexEnvi(void *_glfuncs, GLenum target, GLenum pname, GLint param); -void gl4_3compat_glTexEnvfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params); -void gl4_3compat_glTexEnvf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param); -void gl4_3compat_glShadeModel(void *_glfuncs, GLenum mode); -void gl4_3compat_glPolygonStipple(void *_glfuncs, const GLubyte* mask); -void gl4_3compat_glMaterialiv(void *_glfuncs, GLenum face, GLenum pname, const GLint* params); -void gl4_3compat_glMateriali(void *_glfuncs, GLenum face, GLenum pname, GLint param); -void gl4_3compat_glMaterialfv(void *_glfuncs, GLenum face, GLenum pname, const GLfloat* params); -void gl4_3compat_glMaterialf(void *_glfuncs, GLenum face, GLenum pname, GLfloat param); -void gl4_3compat_glLineStipple(void *_glfuncs, GLint factor, GLushort pattern); -void gl4_3compat_glLightModeliv(void *_glfuncs, GLenum pname, const GLint* params); -void gl4_3compat_glLightModeli(void *_glfuncs, GLenum pname, GLint param); -void gl4_3compat_glLightModelfv(void *_glfuncs, GLenum pname, const GLfloat* params); -void gl4_3compat_glLightModelf(void *_glfuncs, GLenum pname, GLfloat param); -void gl4_3compat_glLightiv(void *_glfuncs, GLenum light, GLenum pname, const GLint* params); -void gl4_3compat_glLighti(void *_glfuncs, GLenum light, GLenum pname, GLint param); -void gl4_3compat_glLightfv(void *_glfuncs, GLenum light, GLenum pname, const GLfloat* params); -void gl4_3compat_glLightf(void *_glfuncs, GLenum light, GLenum pname, GLfloat param); -void gl4_3compat_glFogiv(void *_glfuncs, GLenum pname, const GLint* params); -void gl4_3compat_glFogi(void *_glfuncs, GLenum pname, GLint param); -void gl4_3compat_glFogfv(void *_glfuncs, GLenum pname, const GLfloat* params); -void gl4_3compat_glFogf(void *_glfuncs, GLenum pname, GLfloat param); -void gl4_3compat_glColorMaterial(void *_glfuncs, GLenum face, GLenum mode); -void gl4_3compat_glClipPlane(void *_glfuncs, GLenum plane, const GLdouble* equation); -void gl4_3compat_glVertex4sv(void *_glfuncs, const GLshort* v); -void gl4_3compat_glVertex4s(void *_glfuncs, GLshort x, GLshort y, GLshort z, GLshort w); -void gl4_3compat_glVertex4iv(void *_glfuncs, const GLint* v); -void gl4_3compat_glVertex4i(void *_glfuncs, GLint x, GLint y, GLint z, GLint w); -void gl4_3compat_glVertex4fv(void *_glfuncs, const GLfloat* v); -void gl4_3compat_glVertex4f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -void gl4_3compat_glVertex4dv(void *_glfuncs, const GLdouble* v); -void gl4_3compat_glVertex4d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -void gl4_3compat_glVertex3sv(void *_glfuncs, const GLshort* v); -void gl4_3compat_glVertex3s(void *_glfuncs, GLshort x, GLshort y, GLshort z); -void gl4_3compat_glVertex3iv(void *_glfuncs, const GLint* v); -void gl4_3compat_glVertex3i(void *_glfuncs, GLint x, GLint y, GLint z); -void gl4_3compat_glVertex3fv(void *_glfuncs, const GLfloat* v); -void gl4_3compat_glVertex3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl4_3compat_glVertex3dv(void *_glfuncs, const GLdouble* v); -void gl4_3compat_glVertex3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl4_3compat_glVertex2sv(void *_glfuncs, const GLshort* v); -void gl4_3compat_glVertex2s(void *_glfuncs, GLshort x, GLshort y); -void gl4_3compat_glVertex2iv(void *_glfuncs, const GLint* v); -void gl4_3compat_glVertex2i(void *_glfuncs, GLint x, GLint y); -void gl4_3compat_glVertex2fv(void *_glfuncs, const GLfloat* v); -void gl4_3compat_glVertex2f(void *_glfuncs, GLfloat x, GLfloat y); -void gl4_3compat_glVertex2dv(void *_glfuncs, const GLdouble* v); -void gl4_3compat_glVertex2d(void *_glfuncs, GLdouble x, GLdouble y); -void gl4_3compat_glTexCoord4sv(void *_glfuncs, const GLshort* v); -void gl4_3compat_glTexCoord4s(void *_glfuncs, GLshort s, GLshort t, GLshort r, GLshort q); -void gl4_3compat_glTexCoord4iv(void *_glfuncs, const GLint* v); -void gl4_3compat_glTexCoord4i(void *_glfuncs, GLint s, GLint t, GLint r, GLint q); -void gl4_3compat_glTexCoord4fv(void *_glfuncs, const GLfloat* v); -void gl4_3compat_glTexCoord4f(void *_glfuncs, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -void gl4_3compat_glTexCoord4dv(void *_glfuncs, const GLdouble* v); -void gl4_3compat_glTexCoord4d(void *_glfuncs, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -void gl4_3compat_glTexCoord3sv(void *_glfuncs, const GLshort* v); -void gl4_3compat_glTexCoord3s(void *_glfuncs, GLshort s, GLshort t, GLshort r); -void gl4_3compat_glTexCoord3iv(void *_glfuncs, const GLint* v); -void gl4_3compat_glTexCoord3i(void *_glfuncs, GLint s, GLint t, GLint r); -void gl4_3compat_glTexCoord3fv(void *_glfuncs, const GLfloat* v); -void gl4_3compat_glTexCoord3f(void *_glfuncs, GLfloat s, GLfloat t, GLfloat r); -void gl4_3compat_glTexCoord3dv(void *_glfuncs, const GLdouble* v); -void gl4_3compat_glTexCoord3d(void *_glfuncs, GLdouble s, GLdouble t, GLdouble r); -void gl4_3compat_glTexCoord2sv(void *_glfuncs, const GLshort* v); -void gl4_3compat_glTexCoord2s(void *_glfuncs, GLshort s, GLshort t); -void gl4_3compat_glTexCoord2iv(void *_glfuncs, const GLint* v); -void gl4_3compat_glTexCoord2i(void *_glfuncs, GLint s, GLint t); -void gl4_3compat_glTexCoord2fv(void *_glfuncs, const GLfloat* v); -void gl4_3compat_glTexCoord2f(void *_glfuncs, GLfloat s, GLfloat t); -void gl4_3compat_glTexCoord2dv(void *_glfuncs, const GLdouble* v); -void gl4_3compat_glTexCoord2d(void *_glfuncs, GLdouble s, GLdouble t); -void gl4_3compat_glTexCoord1sv(void *_glfuncs, const GLshort* v); -void gl4_3compat_glTexCoord1s(void *_glfuncs, GLshort s); -void gl4_3compat_glTexCoord1iv(void *_glfuncs, const GLint* v); -void gl4_3compat_glTexCoord1i(void *_glfuncs, GLint s); -void gl4_3compat_glTexCoord1fv(void *_glfuncs, const GLfloat* v); -void gl4_3compat_glTexCoord1f(void *_glfuncs, GLfloat s); -void gl4_3compat_glTexCoord1dv(void *_glfuncs, const GLdouble* v); -void gl4_3compat_glTexCoord1d(void *_glfuncs, GLdouble s); -void gl4_3compat_glRectsv(void *_glfuncs, const GLshort* v1, const GLshort* v2); -void gl4_3compat_glRects(void *_glfuncs, GLshort x1, GLshort y1, GLshort x2, GLshort y2); -void gl4_3compat_glRectiv(void *_glfuncs, const GLint* v1, const GLint* v2); -void gl4_3compat_glRecti(void *_glfuncs, GLint x1, GLint y1, GLint x2, GLint y2); -void gl4_3compat_glRectfv(void *_glfuncs, const GLfloat* v1, const GLfloat* v2); -void gl4_3compat_glRectf(void *_glfuncs, GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2); -void gl4_3compat_glRectdv(void *_glfuncs, const GLdouble* v1, const GLdouble* v2); -void gl4_3compat_glRectd(void *_glfuncs, GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2); -void gl4_3compat_glRasterPos4sv(void *_glfuncs, const GLshort* v); -void gl4_3compat_glRasterPos4s(void *_glfuncs, GLshort x, GLshort y, GLshort z, GLshort w); -void gl4_3compat_glRasterPos4iv(void *_glfuncs, const GLint* v); -void gl4_3compat_glRasterPos4i(void *_glfuncs, GLint x, GLint y, GLint z, GLint w); -void gl4_3compat_glRasterPos4fv(void *_glfuncs, const GLfloat* v); -void gl4_3compat_glRasterPos4f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -void gl4_3compat_glRasterPos4dv(void *_glfuncs, const GLdouble* v); -void gl4_3compat_glRasterPos4d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -void gl4_3compat_glRasterPos3sv(void *_glfuncs, const GLshort* v); -void gl4_3compat_glRasterPos3s(void *_glfuncs, GLshort x, GLshort y, GLshort z); -void gl4_3compat_glRasterPos3iv(void *_glfuncs, const GLint* v); -void gl4_3compat_glRasterPos3i(void *_glfuncs, GLint x, GLint y, GLint z); -void gl4_3compat_glRasterPos3fv(void *_glfuncs, const GLfloat* v); -void gl4_3compat_glRasterPos3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl4_3compat_glRasterPos3dv(void *_glfuncs, const GLdouble* v); -void gl4_3compat_glRasterPos3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl4_3compat_glRasterPos2sv(void *_glfuncs, const GLshort* v); -void gl4_3compat_glRasterPos2s(void *_glfuncs, GLshort x, GLshort y); -void gl4_3compat_glRasterPos2iv(void *_glfuncs, const GLint* v); -void gl4_3compat_glRasterPos2i(void *_glfuncs, GLint x, GLint y); -void gl4_3compat_glRasterPos2fv(void *_glfuncs, const GLfloat* v); -void gl4_3compat_glRasterPos2f(void *_glfuncs, GLfloat x, GLfloat y); -void gl4_3compat_glRasterPos2dv(void *_glfuncs, const GLdouble* v); -void gl4_3compat_glRasterPos2d(void *_glfuncs, GLdouble x, GLdouble y); -void gl4_3compat_glNormal3sv(void *_glfuncs, const GLshort* v); -void gl4_3compat_glNormal3s(void *_glfuncs, GLshort nx, GLshort ny, GLshort nz); -void gl4_3compat_glNormal3iv(void *_glfuncs, const GLint* v); -void gl4_3compat_glNormal3i(void *_glfuncs, GLint nx, GLint ny, GLint nz); -void gl4_3compat_glNormal3fv(void *_glfuncs, const GLfloat* v); -void gl4_3compat_glNormal3f(void *_glfuncs, GLfloat nx, GLfloat ny, GLfloat nz); -void gl4_3compat_glNormal3dv(void *_glfuncs, const GLdouble* v); -void gl4_3compat_glNormal3d(void *_glfuncs, GLdouble nx, GLdouble ny, GLdouble nz); -void gl4_3compat_glNormal3bv(void *_glfuncs, const GLbyte* v); -void gl4_3compat_glNormal3b(void *_glfuncs, GLbyte nx, GLbyte ny, GLbyte nz); -void gl4_3compat_glIndexsv(void *_glfuncs, const GLshort* c); -void gl4_3compat_glIndexs(void *_glfuncs, GLshort c); -void gl4_3compat_glIndexiv(void *_glfuncs, const GLint* c); -void gl4_3compat_glIndexi(void *_glfuncs, GLint c); -void gl4_3compat_glIndexfv(void *_glfuncs, const GLfloat* c); -void gl4_3compat_glIndexf(void *_glfuncs, GLfloat c); -void gl4_3compat_glIndexdv(void *_glfuncs, const GLdouble* c); -void gl4_3compat_glIndexd(void *_glfuncs, GLdouble c); -void gl4_3compat_glEnd(void *_glfuncs); -void gl4_3compat_glEdgeFlagv(void *_glfuncs, const GLboolean* flag); -void gl4_3compat_glEdgeFlag(void *_glfuncs, GLboolean flag); -void gl4_3compat_glColor4usv(void *_glfuncs, const GLushort* v); -void gl4_3compat_glColor4us(void *_glfuncs, GLushort red, GLushort green, GLushort blue, GLushort alpha); -void gl4_3compat_glColor4uiv(void *_glfuncs, const GLuint* v); -void gl4_3compat_glColor4ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue, GLuint alpha); -void gl4_3compat_glColor4ubv(void *_glfuncs, const GLubyte* v); -void gl4_3compat_glColor4ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha); -void gl4_3compat_glColor4sv(void *_glfuncs, const GLshort* v); -void gl4_3compat_glColor4s(void *_glfuncs, GLshort red, GLshort green, GLshort blue, GLshort alpha); -void gl4_3compat_glColor4iv(void *_glfuncs, const GLint* v); -void gl4_3compat_glColor4i(void *_glfuncs, GLint red, GLint green, GLint blue, GLint alpha); -void gl4_3compat_glColor4fv(void *_glfuncs, const GLfloat* v); -void gl4_3compat_glColor4f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl4_3compat_glColor4dv(void *_glfuncs, const GLdouble* v); -void gl4_3compat_glColor4d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha); -void gl4_3compat_glColor4bv(void *_glfuncs, const GLbyte* v); -void gl4_3compat_glColor4b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha); -void gl4_3compat_glColor3usv(void *_glfuncs, const GLushort* v); -void gl4_3compat_glColor3us(void *_glfuncs, GLushort red, GLushort green, GLushort blue); -void gl4_3compat_glColor3uiv(void *_glfuncs, const GLuint* v); -void gl4_3compat_glColor3ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue); -void gl4_3compat_glColor3ubv(void *_glfuncs, const GLubyte* v); -void gl4_3compat_glColor3ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue); -void gl4_3compat_glColor3sv(void *_glfuncs, const GLshort* v); -void gl4_3compat_glColor3s(void *_glfuncs, GLshort red, GLshort green, GLshort blue); -void gl4_3compat_glColor3iv(void *_glfuncs, const GLint* v); -void gl4_3compat_glColor3i(void *_glfuncs, GLint red, GLint green, GLint blue); -void gl4_3compat_glColor3fv(void *_glfuncs, const GLfloat* v); -void gl4_3compat_glColor3f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue); -void gl4_3compat_glColor3dv(void *_glfuncs, const GLdouble* v); -void gl4_3compat_glColor3d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue); -void gl4_3compat_glColor3bv(void *_glfuncs, const GLbyte* v); -void gl4_3compat_glColor3b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue); -void gl4_3compat_glBitmap(void *_glfuncs, GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte* bitmap); -void gl4_3compat_glBegin(void *_glfuncs, GLenum mode); -void gl4_3compat_glListBase(void *_glfuncs, GLuint base); -GLuint gl4_3compat_glGenLists(void *_glfuncs, GLsizei range_); -void gl4_3compat_glDeleteLists(void *_glfuncs, GLuint list, GLsizei range_); -void gl4_3compat_glCallLists(void *_glfuncs, GLsizei n, GLenum gltype, const GLvoid* lists); -void gl4_3compat_glCallList(void *_glfuncs, GLuint list); -void gl4_3compat_glEndList(void *_glfuncs); -void gl4_3compat_glNewList(void *_glfuncs, GLuint list, GLenum mode); -void gl4_3compat_glPushClientAttrib(void *_glfuncs, GLbitfield mask); -void gl4_3compat_glPopClientAttrib(void *_glfuncs); -void gl4_3compat_glPrioritizeTextures(void *_glfuncs, GLsizei n, const GLuint* textures, const GLfloat* priorities); -GLboolean gl4_3compat_glAreTexturesResident(void *_glfuncs, GLsizei n, const GLuint* textures, GLboolean* residences); -void gl4_3compat_glVertexPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl4_3compat_glTexCoordPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl4_3compat_glNormalPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl4_3compat_glInterleavedArrays(void *_glfuncs, GLenum format, GLsizei stride, const GLvoid* pointer); -void gl4_3compat_glIndexPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl4_3compat_glEnableClientState(void *_glfuncs, GLenum array); -void gl4_3compat_glEdgeFlagPointer(void *_glfuncs, GLsizei stride, const GLvoid* pointer); -void gl4_3compat_glDisableClientState(void *_glfuncs, GLenum array); -void gl4_3compat_glColorPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl4_3compat_glArrayElement(void *_glfuncs, GLint i); -void gl4_3compat_glResetMinmax(void *_glfuncs, GLenum target); -void gl4_3compat_glResetHistogram(void *_glfuncs, GLenum target); -void gl4_3compat_glMinmax(void *_glfuncs, GLenum target, GLenum internalFormat, GLboolean sink); -void gl4_3compat_glHistogram(void *_glfuncs, GLenum target, GLsizei width, GLenum internalFormat, GLboolean sink); -void gl4_3compat_glGetMinmaxParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl4_3compat_glGetMinmaxParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl4_3compat_glGetMinmax(void *_glfuncs, GLenum target, GLboolean reset, GLenum format, GLenum gltype, GLvoid* values); -void gl4_3compat_glGetHistogramParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl4_3compat_glGetHistogramParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl4_3compat_glGetHistogram(void *_glfuncs, GLenum target, GLboolean reset, GLenum format, GLenum gltype, GLvoid* values); -void gl4_3compat_glSeparableFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* row, const GLvoid* column); -void gl4_3compat_glGetSeparableFilter(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* row, GLvoid* column, GLvoid* span); -void gl4_3compat_glGetConvolutionParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl4_3compat_glGetConvolutionParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl4_3compat_glGetConvolutionFilter(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* image); -void gl4_3compat_glCopyConvolutionFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height); -void gl4_3compat_glCopyConvolutionFilter1D(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width); -void gl4_3compat_glConvolutionParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl4_3compat_glConvolutionParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint params); -void gl4_3compat_glConvolutionParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params); -void gl4_3compat_glConvolutionParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat params); -void gl4_3compat_glConvolutionFilter2D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* image); -void gl4_3compat_glConvolutionFilter1D(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum gltype, const GLvoid* image); -void gl4_3compat_glCopyColorSubTable(void *_glfuncs, GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); -void gl4_3compat_glColorSubTable(void *_glfuncs, GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum gltype, const GLvoid* data); -void gl4_3compat_glGetColorTableParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl4_3compat_glGetColorTableParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl4_3compat_glGetColorTable(void *_glfuncs, GLenum target, GLenum format, GLenum gltype, GLvoid* table); -void gl4_3compat_glCopyColorTable(void *_glfuncs, GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width); -void gl4_3compat_glColorTableParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl4_3compat_glColorTableParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params); -void gl4_3compat_glColorTable(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum gltype, const GLvoid* table); -void gl4_3compat_glMultTransposeMatrixd(void *_glfuncs, const GLdouble* m); -void gl4_3compat_glMultTransposeMatrixf(void *_glfuncs, const GLfloat* m); -void gl4_3compat_glLoadTransposeMatrixd(void *_glfuncs, const GLdouble* m); -void gl4_3compat_glLoadTransposeMatrixf(void *_glfuncs, const GLfloat* m); -void gl4_3compat_glMultiTexCoord4sv(void *_glfuncs, GLenum target, const GLshort* v); -void gl4_3compat_glMultiTexCoord4s(void *_glfuncs, GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); -void gl4_3compat_glMultiTexCoord4iv(void *_glfuncs, GLenum target, const GLint* v); -void gl4_3compat_glMultiTexCoord4i(void *_glfuncs, GLenum target, GLint s, GLint t, GLint r, GLint q); -void gl4_3compat_glMultiTexCoord4fv(void *_glfuncs, GLenum target, const GLfloat* v); -void gl4_3compat_glMultiTexCoord4f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -void gl4_3compat_glMultiTexCoord4dv(void *_glfuncs, GLenum target, const GLdouble* v); -void gl4_3compat_glMultiTexCoord4d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -void gl4_3compat_glMultiTexCoord3sv(void *_glfuncs, GLenum target, const GLshort* v); -void gl4_3compat_glMultiTexCoord3s(void *_glfuncs, GLenum target, GLshort s, GLshort t, GLshort r); -void gl4_3compat_glMultiTexCoord3iv(void *_glfuncs, GLenum target, const GLint* v); -void gl4_3compat_glMultiTexCoord3i(void *_glfuncs, GLenum target, GLint s, GLint t, GLint r); -void gl4_3compat_glMultiTexCoord3fv(void *_glfuncs, GLenum target, const GLfloat* v); -void gl4_3compat_glMultiTexCoord3f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t, GLfloat r); -void gl4_3compat_glMultiTexCoord3dv(void *_glfuncs, GLenum target, const GLdouble* v); -void gl4_3compat_glMultiTexCoord3d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t, GLdouble r); -void gl4_3compat_glMultiTexCoord2sv(void *_glfuncs, GLenum target, const GLshort* v); -void gl4_3compat_glMultiTexCoord2s(void *_glfuncs, GLenum target, GLshort s, GLshort t); -void gl4_3compat_glMultiTexCoord2iv(void *_glfuncs, GLenum target, const GLint* v); -void gl4_3compat_glMultiTexCoord2i(void *_glfuncs, GLenum target, GLint s, GLint t); -void gl4_3compat_glMultiTexCoord2fv(void *_glfuncs, GLenum target, const GLfloat* v); -void gl4_3compat_glMultiTexCoord2f(void *_glfuncs, GLenum target, GLfloat s, GLfloat t); -void gl4_3compat_glMultiTexCoord2dv(void *_glfuncs, GLenum target, const GLdouble* v); -void gl4_3compat_glMultiTexCoord2d(void *_glfuncs, GLenum target, GLdouble s, GLdouble t); -void gl4_3compat_glMultiTexCoord1sv(void *_glfuncs, GLenum target, const GLshort* v); -void gl4_3compat_glMultiTexCoord1s(void *_glfuncs, GLenum target, GLshort s); -void gl4_3compat_glMultiTexCoord1iv(void *_glfuncs, GLenum target, const GLint* v); -void gl4_3compat_glMultiTexCoord1i(void *_glfuncs, GLenum target, GLint s); -void gl4_3compat_glMultiTexCoord1fv(void *_glfuncs, GLenum target, const GLfloat* v); -void gl4_3compat_glMultiTexCoord1f(void *_glfuncs, GLenum target, GLfloat s); -void gl4_3compat_glMultiTexCoord1dv(void *_glfuncs, GLenum target, const GLdouble* v); -void gl4_3compat_glMultiTexCoord1d(void *_glfuncs, GLenum target, GLdouble s); -void gl4_3compat_glClientActiveTexture(void *_glfuncs, GLenum texture); -void gl4_3compat_glWindowPos3sv(void *_glfuncs, const GLshort* v); -void gl4_3compat_glWindowPos3s(void *_glfuncs, GLshort x, GLshort y, GLshort z); -void gl4_3compat_glWindowPos3iv(void *_glfuncs, const GLint* v); -void gl4_3compat_glWindowPos3i(void *_glfuncs, GLint x, GLint y, GLint z); -void gl4_3compat_glWindowPos3fv(void *_glfuncs, const GLfloat* v); -void gl4_3compat_glWindowPos3f(void *_glfuncs, GLfloat x, GLfloat y, GLfloat z); -void gl4_3compat_glWindowPos3dv(void *_glfuncs, const GLdouble* v); -void gl4_3compat_glWindowPos3d(void *_glfuncs, GLdouble x, GLdouble y, GLdouble z); -void gl4_3compat_glWindowPos2sv(void *_glfuncs, const GLshort* v); -void gl4_3compat_glWindowPos2s(void *_glfuncs, GLshort x, GLshort y); -void gl4_3compat_glWindowPos2iv(void *_glfuncs, const GLint* v); -void gl4_3compat_glWindowPos2i(void *_glfuncs, GLint x, GLint y); -void gl4_3compat_glWindowPos2fv(void *_glfuncs, const GLfloat* v); -void gl4_3compat_glWindowPos2f(void *_glfuncs, GLfloat x, GLfloat y); -void gl4_3compat_glWindowPos2dv(void *_glfuncs, const GLdouble* v); -void gl4_3compat_glWindowPos2d(void *_glfuncs, GLdouble x, GLdouble y); -void gl4_3compat_glSecondaryColorPointer(void *_glfuncs, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl4_3compat_glSecondaryColor3usv(void *_glfuncs, const GLushort* v); -void gl4_3compat_glSecondaryColor3us(void *_glfuncs, GLushort red, GLushort green, GLushort blue); -void gl4_3compat_glSecondaryColor3uiv(void *_glfuncs, const GLuint* v); -void gl4_3compat_glSecondaryColor3ui(void *_glfuncs, GLuint red, GLuint green, GLuint blue); -void gl4_3compat_glSecondaryColor3ubv(void *_glfuncs, const GLubyte* v); -void gl4_3compat_glSecondaryColor3ub(void *_glfuncs, GLubyte red, GLubyte green, GLubyte blue); -void gl4_3compat_glSecondaryColor3sv(void *_glfuncs, const GLshort* v); -void gl4_3compat_glSecondaryColor3s(void *_glfuncs, GLshort red, GLshort green, GLshort blue); -void gl4_3compat_glSecondaryColor3iv(void *_glfuncs, const GLint* v); -void gl4_3compat_glSecondaryColor3i(void *_glfuncs, GLint red, GLint green, GLint blue); -void gl4_3compat_glSecondaryColor3fv(void *_glfuncs, const GLfloat* v); -void gl4_3compat_glSecondaryColor3f(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue); -void gl4_3compat_glSecondaryColor3dv(void *_glfuncs, const GLdouble* v); -void gl4_3compat_glSecondaryColor3d(void *_glfuncs, GLdouble red, GLdouble green, GLdouble blue); -void gl4_3compat_glSecondaryColor3bv(void *_glfuncs, const GLbyte* v); -void gl4_3compat_glSecondaryColor3b(void *_glfuncs, GLbyte red, GLbyte green, GLbyte blue); -void gl4_3compat_glFogCoordPointer(void *_glfuncs, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl4_3compat_glFogCoorddv(void *_glfuncs, const GLdouble* coord); -void gl4_3compat_glFogCoordd(void *_glfuncs, GLdouble coord); -void gl4_3compat_glFogCoordfv(void *_glfuncs, const GLfloat* coord); -void gl4_3compat_glFogCoordf(void *_glfuncs, GLfloat coord); -void gl4_3compat_glVertexAttrib4usv(void *_glfuncs, GLuint index, const GLushort* v); -void gl4_3compat_glVertexAttrib4uiv(void *_glfuncs, GLuint index, const GLuint* v); -void gl4_3compat_glVertexAttrib4ubv(void *_glfuncs, GLuint index, const GLubyte* v); -void gl4_3compat_glVertexAttrib4sv(void *_glfuncs, GLuint index, const GLshort* v); -void gl4_3compat_glVertexAttrib4s(void *_glfuncs, GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -void gl4_3compat_glVertexAttrib4iv(void *_glfuncs, GLuint index, const GLint* v); -void gl4_3compat_glVertexAttrib4fv(void *_glfuncs, GLuint index, const GLfloat* v); -void gl4_3compat_glVertexAttrib4f(void *_glfuncs, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -void gl4_3compat_glVertexAttrib4dv(void *_glfuncs, GLuint index, const GLdouble* v); -void gl4_3compat_glVertexAttrib4d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -void gl4_3compat_glVertexAttrib4bv(void *_glfuncs, GLuint index, const GLbyte* v); -void gl4_3compat_glVertexAttrib4Nusv(void *_glfuncs, GLuint index, const GLushort* v); -void gl4_3compat_glVertexAttrib4Nuiv(void *_glfuncs, GLuint index, const GLuint* v); -void gl4_3compat_glVertexAttrib4Nubv(void *_glfuncs, GLuint index, const GLubyte* v); -void gl4_3compat_glVertexAttrib4Nub(void *_glfuncs, GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -void gl4_3compat_glVertexAttrib4Nsv(void *_glfuncs, GLuint index, const GLshort* v); -void gl4_3compat_glVertexAttrib4Niv(void *_glfuncs, GLuint index, const GLint* v); -void gl4_3compat_glVertexAttrib4Nbv(void *_glfuncs, GLuint index, const GLbyte* v); -void gl4_3compat_glVertexAttrib3sv(void *_glfuncs, GLuint index, const GLshort* v); -void gl4_3compat_glVertexAttrib3s(void *_glfuncs, GLuint index, GLshort x, GLshort y, GLshort z); -void gl4_3compat_glVertexAttrib3fv(void *_glfuncs, GLuint index, const GLfloat* v); -void gl4_3compat_glVertexAttrib3f(void *_glfuncs, GLuint index, GLfloat x, GLfloat y, GLfloat z); -void gl4_3compat_glVertexAttrib3dv(void *_glfuncs, GLuint index, const GLdouble* v); -void gl4_3compat_glVertexAttrib3d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y, GLdouble z); -void gl4_3compat_glVertexAttrib2sv(void *_glfuncs, GLuint index, const GLshort* v); -void gl4_3compat_glVertexAttrib2s(void *_glfuncs, GLuint index, GLshort x, GLshort y); -void gl4_3compat_glVertexAttrib2fv(void *_glfuncs, GLuint index, const GLfloat* v); -void gl4_3compat_glVertexAttrib2f(void *_glfuncs, GLuint index, GLfloat x, GLfloat y); -void gl4_3compat_glVertexAttrib2dv(void *_glfuncs, GLuint index, const GLdouble* v); -void gl4_3compat_glVertexAttrib2d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y); -void gl4_3compat_glVertexAttrib1sv(void *_glfuncs, GLuint index, const GLshort* v); -void gl4_3compat_glVertexAttrib1s(void *_glfuncs, GLuint index, GLshort x); -void gl4_3compat_glVertexAttrib1fv(void *_glfuncs, GLuint index, const GLfloat* v); -void gl4_3compat_glVertexAttrib1f(void *_glfuncs, GLuint index, GLfloat x); -void gl4_3compat_glVertexAttrib1dv(void *_glfuncs, GLuint index, const GLdouble* v); -void gl4_3compat_glVertexAttrib1d(void *_glfuncs, GLuint index, GLdouble x); -void gl4_3compat_glVertexAttribI4usv(void *_glfuncs, GLuint index, const GLushort* v); -void gl4_3compat_glVertexAttribI4ubv(void *_glfuncs, GLuint index, const GLubyte* v); -void gl4_3compat_glVertexAttribI4sv(void *_glfuncs, GLuint index, const GLshort* v); -void gl4_3compat_glVertexAttribI4bv(void *_glfuncs, GLuint index, const GLbyte* v); -void gl4_3compat_glVertexAttribI4uiv(void *_glfuncs, GLuint index, const GLuint* v); -void gl4_3compat_glVertexAttribI3uiv(void *_glfuncs, GLuint index, const GLuint* v); -void gl4_3compat_glVertexAttribI2uiv(void *_glfuncs, GLuint index, const GLuint* v); -void gl4_3compat_glVertexAttribI1uiv(void *_glfuncs, GLuint index, const GLuint* v); -void gl4_3compat_glVertexAttribI4iv(void *_glfuncs, GLuint index, const GLint* v); -void gl4_3compat_glVertexAttribI3iv(void *_glfuncs, GLuint index, const GLint* v); -void gl4_3compat_glVertexAttribI2iv(void *_glfuncs, GLuint index, const GLint* v); -void gl4_3compat_glVertexAttribI1iv(void *_glfuncs, GLuint index, const GLint* v); -void gl4_3compat_glVertexAttribI4ui(void *_glfuncs, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -void gl4_3compat_glVertexAttribI3ui(void *_glfuncs, GLuint index, GLuint x, GLuint y, GLuint z); -void gl4_3compat_glVertexAttribI2ui(void *_glfuncs, GLuint index, GLuint x, GLuint y); -void gl4_3compat_glVertexAttribI1ui(void *_glfuncs, GLuint index, GLuint x); -void gl4_3compat_glVertexAttribI4i(void *_glfuncs, GLuint index, GLint x, GLint y, GLint z, GLint w); -void gl4_3compat_glVertexAttribI3i(void *_glfuncs, GLuint index, GLint x, GLint y, GLint z); -void gl4_3compat_glVertexAttribI2i(void *_glfuncs, GLuint index, GLint x, GLint y); -void gl4_3compat_glVertexAttribI1i(void *_glfuncs, GLuint index, GLint x); - - -#ifdef __cplusplus -} // extern "C" -#endif diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.3compat/gl.go b/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.3compat/gl.go deleted file mode 100644 index 4ee8a9ef6c..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.3compat/gl.go +++ /dev/null @@ -1,9845 +0,0 @@ -// ** file automatically generated by glgen -- do not edit manually ** - -package GL - -// #cgo CXXFLAGS: -std=c++0x -pedantic-errors -Wall -fno-strict-aliasing -// #cgo LDFLAGS: -lstdc++ -// #cgo pkg-config: Qt5Core Qt5OpenGL -// -// #include "funcs.h" -// -// void free(void*); -// -import "C" - -import ( - "fmt" - "reflect" - "unsafe" - - "gopkg.in/qml.v1/gl/glbase" -) - -// API returns a value that offers methods matching the OpenGL version 4.3 API. -// -// The returned API must not be used after the provided OpenGL context becomes invalid. -func API(context glbase.Contexter) *GL { - gl := &GL{} - gl.funcs = C.gl4_3compat_funcs() - if gl.funcs == nil { - panic(fmt.Errorf("OpenGL version 4.3 is not available")) - } - return gl -} - -// GL implements the OpenGL version 4.3 API. Values of this -// type must be created via the API function, and it must not be used after -// the associated OpenGL context becomes invalid. -type GL struct { - funcs unsafe.Pointer -} - -const ( - FALSE = 0 - TRUE = 1 - NONE = 0 - - BYTE = 0x1400 - UNSIGNED_BYTE = 0x1401 - SHORT = 0x1402 - UNSIGNED_SHORT = 0x1403 - INT = 0x1404 - UNSIGNED_INT = 0x1405 - FLOAT = 0x1406 - N2_BYTES = 0x1407 - N3_BYTES = 0x1408 - N4_BYTES = 0x1409 - DOUBLE = 0x140A - HALF_FLOAT = 0x140B - FIXED = 0x140C - - ACCUM = 0x0100 - LOAD = 0x0101 - RETURN = 0x0102 - MULT = 0x0103 - ADD = 0x0104 - - ACCUM_BUFFER_BIT = 0x00000200 - ALL_ATTRIB_BITS = 0xFFFFFFFF - COLOR_BUFFER_BIT = 0x00004000 - CURRENT_BIT = 0x00000001 - DEPTH_BUFFER_BIT = 0x00000100 - ENABLE_BIT = 0x00002000 - EVAL_BIT = 0x00010000 - FOG_BIT = 0x00000080 - HINT_BIT = 0x00008000 - LIGHTING_BIT = 0x00000040 - LINE_BIT = 0x00000004 - LIST_BIT = 0x00020000 - MULTISAMPLE_BIT = 0x20000000 - PIXEL_MODE_BIT = 0x00000020 - POINT_BIT = 0x00000002 - POLYGON_BIT = 0x00000008 - POLYGON_STIPPLE_BIT = 0x00000010 - SCISSOR_BIT = 0x00080000 - STENCIL_BUFFER_BIT = 0x00000400 - TEXTURE_BIT = 0x00040000 - TRANSFORM_BIT = 0x00001000 - VIEWPORT_BIT = 0x00000800 - - ALWAYS = 0x0207 - EQUAL = 0x0202 - GEQUAL = 0x0206 - GREATER = 0x0204 - LEQUAL = 0x0203 - LESS = 0x0201 - NEVER = 0x0200 - NOTEQUAL = 0x0205 - - LOGIC_OP = 0x0BF1 - - DST_ALPHA = 0x0304 - ONE = 1 - ONE_MINUS_DST_ALPHA = 0x0305 - ONE_MINUS_SRC_ALPHA = 0x0303 - ONE_MINUS_SRC_COLOR = 0x0301 - SRC_ALPHA = 0x0302 - SRC_COLOR = 0x0300 - ZERO = 0 - - DST_COLOR = 0x0306 - ONE_MINUS_DST_COLOR = 0x0307 - SRC_ALPHA_SATURATE = 0x0308 - - CLIENT_ALL_ATTRIB_BITS = 0xFFFFFFFF - CLIENT_PIXEL_STORE_BIT = 0x00000001 - CLIENT_VERTEX_ARRAY_BIT = 0x00000002 - - CLIP_DISTANCE0 = 0x3000 - CLIP_DISTANCE1 = 0x3001 - CLIP_DISTANCE2 = 0x3002 - CLIP_DISTANCE3 = 0x3003 - CLIP_DISTANCE4 = 0x3004 - CLIP_DISTANCE5 = 0x3005 - CLIP_DISTANCE6 = 0x3006 - CLIP_DISTANCE7 = 0x3007 - CLIP_PLANE0 = 0x3000 - CLIP_PLANE1 = 0x3001 - CLIP_PLANE2 = 0x3002 - CLIP_PLANE3 = 0x3003 - CLIP_PLANE4 = 0x3004 - CLIP_PLANE5 = 0x3005 - - BACK = 0x0405 - FRONT = 0x0404 - FRONT_AND_BACK = 0x0408 - - AMBIENT = 0x1200 - AMBIENT_AND_DIFFUSE = 0x1602 - DIFFUSE = 0x1201 - EMISSION = 0x1600 - SPECULAR = 0x1202 - - CONTEXT_FLAG_DEBUG_BIT = 0x00000002 - CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT = 0x00000001 - - CONTEXT_COMPATIBILITY_PROFILE_BIT = 0x00000002 - CONTEXT_CORE_PROFILE_BIT = 0x00000001 - - AUX0 = 0x0409 - AUX1 = 0x040A - AUX2 = 0x040B - AUX3 = 0x040C - BACK_LEFT = 0x0402 - BACK_RIGHT = 0x0403 - FRONT_LEFT = 0x0400 - FRONT_RIGHT = 0x0401 - LEFT = 0x0406 - RIGHT = 0x0407 - - ALPHA_TEST = 0x0BC0 - AUTO_NORMAL = 0x0D80 - BLEND = 0x0BE2 - COLOR_ARRAY = 0x8076 - COLOR_LOGIC_OP = 0x0BF2 - COLOR_MATERIAL = 0x0B57 - CULL_FACE = 0x0B44 - DEPTH_TEST = 0x0B71 - DITHER = 0x0BD0 - EDGE_FLAG_ARRAY = 0x8079 - FOG = 0x0B60 - INDEX_ARRAY = 0x8077 - INDEX_LOGIC_OP = 0x0BF1 - LIGHT0 = 0x4000 - LIGHT1 = 0x4001 - LIGHT2 = 0x4002 - LIGHT3 = 0x4003 - LIGHT4 = 0x4004 - LIGHT5 = 0x4005 - LIGHT6 = 0x4006 - LIGHT7 = 0x4007 - LIGHTING = 0x0B50 - LINE_SMOOTH = 0x0B20 - LINE_STIPPLE = 0x0B24 - MAP1_COLOR_4 = 0x0D90 - MAP1_INDEX = 0x0D91 - MAP1_NORMAL = 0x0D92 - MAP1_TEXTURE_COORD_1 = 0x0D93 - MAP1_TEXTURE_COORD_2 = 0x0D94 - MAP1_TEXTURE_COORD_3 = 0x0D95 - MAP1_TEXTURE_COORD_4 = 0x0D96 - MAP1_VERTEX_3 = 0x0D97 - MAP1_VERTEX_4 = 0x0D98 - MAP2_COLOR_4 = 0x0DB0 - MAP2_INDEX = 0x0DB1 - MAP2_NORMAL = 0x0DB2 - MAP2_TEXTURE_COORD_1 = 0x0DB3 - MAP2_TEXTURE_COORD_2 = 0x0DB4 - MAP2_TEXTURE_COORD_3 = 0x0DB5 - MAP2_TEXTURE_COORD_4 = 0x0DB6 - MAP2_VERTEX_3 = 0x0DB7 - MAP2_VERTEX_4 = 0x0DB8 - NORMALIZE = 0x0BA1 - NORMAL_ARRAY = 0x8075 - POINT_SMOOTH = 0x0B10 - POLYGON_OFFSET_FILL = 0x8037 - POLYGON_OFFSET_LINE = 0x2A02 - POLYGON_OFFSET_POINT = 0x2A01 - POLYGON_SMOOTH = 0x0B41 - POLYGON_STIPPLE = 0x0B42 - SCISSOR_TEST = 0x0C11 - STENCIL_TEST = 0x0B90 - TEXTURE_1D = 0x0DE0 - TEXTURE_2D = 0x0DE1 - TEXTURE_COORD_ARRAY = 0x8078 - TEXTURE_GEN_Q = 0x0C63 - TEXTURE_GEN_R = 0x0C62 - TEXTURE_GEN_S = 0x0C60 - TEXTURE_GEN_T = 0x0C61 - VERTEX_ARRAY = 0x8074 - - INVALID_ENUM = 0x0500 - INVALID_FRAMEBUFFER_OPERATION = 0x0506 - INVALID_OPERATION = 0x0502 - INVALID_VALUE = 0x0501 - NO_ERROR = 0 - OUT_OF_MEMORY = 0x0505 - STACK_OVERFLOW = 0x0503 - STACK_UNDERFLOW = 0x0504 - - N2D = 0x0600 - N3D = 0x0601 - N3D_COLOR = 0x0602 - N3D_COLOR_TEXTURE = 0x0603 - N4D_COLOR_TEXTURE = 0x0604 - - BITMAP_TOKEN = 0x0704 - COPY_PIXEL_TOKEN = 0x0706 - DRAW_PIXEL_TOKEN = 0x0705 - LINE_RESET_TOKEN = 0x0707 - LINE_TOKEN = 0x0702 - PASS_THROUGH_TOKEN = 0x0700 - POINT_TOKEN = 0x0701 - POLYGON_TOKEN = 0x0703 - - EXP = 0x0800 - EXP2 = 0x0801 - LINEAR = 0x2601 - - FOG_COLOR = 0x0B66 - FOG_DENSITY = 0x0B62 - FOG_END = 0x0B64 - FOG_INDEX = 0x0B61 - FOG_MODE = 0x0B65 - FOG_START = 0x0B63 - - CCW = 0x0901 - CW = 0x0900 - - COEFF = 0x0A00 - DOMAIN = 0x0A02 - ORDER = 0x0A01 - - PIXEL_MAP_A_TO_A = 0x0C79 - PIXEL_MAP_B_TO_B = 0x0C78 - PIXEL_MAP_G_TO_G = 0x0C77 - PIXEL_MAP_I_TO_A = 0x0C75 - PIXEL_MAP_I_TO_B = 0x0C74 - PIXEL_MAP_I_TO_G = 0x0C73 - PIXEL_MAP_I_TO_I = 0x0C70 - PIXEL_MAP_I_TO_R = 0x0C72 - PIXEL_MAP_R_TO_R = 0x0C76 - PIXEL_MAP_S_TO_S = 0x0C71 - - ACCUM_ALPHA_BITS = 0x0D5B - ACCUM_BLUE_BITS = 0x0D5A - ACCUM_CLEAR_VALUE = 0x0B80 - ACCUM_GREEN_BITS = 0x0D59 - ACCUM_RED_BITS = 0x0D58 - ALIASED_LINE_WIDTH_RANGE = 0x846E - ALIASED_POINT_SIZE_RANGE = 0x846D - ALPHA_BIAS = 0x0D1D - ALPHA_BITS = 0x0D55 - ALPHA_SCALE = 0x0D1C - ALPHA_TEST_FUNC = 0x0BC1 - ALPHA_TEST_REF = 0x0BC2 - ATTRIB_STACK_DEPTH = 0x0BB0 - AUX_BUFFERS = 0x0C00 - BLEND_DST = 0x0BE0 - BLEND_SRC = 0x0BE1 - BLUE_BIAS = 0x0D1B - BLUE_BITS = 0x0D54 - BLUE_SCALE = 0x0D1A - CLIENT_ATTRIB_STACK_DEPTH = 0x0BB1 - COLOR_ARRAY_SIZE = 0x8081 - COLOR_ARRAY_STRIDE = 0x8083 - COLOR_ARRAY_TYPE = 0x8082 - COLOR_CLEAR_VALUE = 0x0C22 - COLOR_MATERIAL_FACE = 0x0B55 - COLOR_MATERIAL_PARAMETER = 0x0B56 - COLOR_WRITEMASK = 0x0C23 - CULL_FACE_MODE = 0x0B45 - CURRENT_COLOR = 0x0B00 - CURRENT_INDEX = 0x0B01 - CURRENT_NORMAL = 0x0B02 - CURRENT_RASTER_COLOR = 0x0B04 - CURRENT_RASTER_DISTANCE = 0x0B09 - CURRENT_RASTER_INDEX = 0x0B05 - CURRENT_RASTER_POSITION = 0x0B07 - CURRENT_RASTER_POSITION_VALID = 0x0B08 - CURRENT_RASTER_TEXTURE_COORDS = 0x0B06 - CURRENT_TEXTURE_COORDS = 0x0B03 - DEPTH_BIAS = 0x0D1F - DEPTH_BITS = 0x0D56 - DEPTH_CLEAR_VALUE = 0x0B73 - DEPTH_FUNC = 0x0B74 - DEPTH_RANGE = 0x0B70 - DEPTH_SCALE = 0x0D1E - DEPTH_WRITEMASK = 0x0B72 - DOUBLEBUFFER = 0x0C32 - DRAW_BUFFER = 0x0C01 - EDGE_FLAG = 0x0B43 - EDGE_FLAG_ARRAY_STRIDE = 0x808C - FEEDBACK_BUFFER_SIZE = 0x0DF1 - FEEDBACK_BUFFER_TYPE = 0x0DF2 - FOG_HINT = 0x0C54 - FRONT_FACE = 0x0B46 - GREEN_BIAS = 0x0D19 - GREEN_BITS = 0x0D53 - GREEN_SCALE = 0x0D18 - INDEX_ARRAY_STRIDE = 0x8086 - INDEX_ARRAY_TYPE = 0x8085 - INDEX_BITS = 0x0D51 - INDEX_CLEAR_VALUE = 0x0C20 - INDEX_MODE = 0x0C30 - INDEX_OFFSET = 0x0D13 - INDEX_SHIFT = 0x0D12 - INDEX_WRITEMASK = 0x0C21 - LIGHT_MODEL_AMBIENT = 0x0B53 - LIGHT_MODEL_COLOR_CONTROL = 0x81F8 - LIGHT_MODEL_LOCAL_VIEWER = 0x0B51 - LIGHT_MODEL_TWO_SIDE = 0x0B52 - LINE_SMOOTH_HINT = 0x0C52 - LINE_STIPPLE_PATTERN = 0x0B25 - LINE_STIPPLE_REPEAT = 0x0B26 - LINE_WIDTH = 0x0B21 - LINE_WIDTH_GRANULARITY = 0x0B23 - LINE_WIDTH_RANGE = 0x0B22 - LIST_BASE = 0x0B32 - LIST_INDEX = 0x0B33 - LIST_MODE = 0x0B30 - LOGIC_OP_MODE = 0x0BF0 - MAP1_GRID_DOMAIN = 0x0DD0 - MAP1_GRID_SEGMENTS = 0x0DD1 - MAP2_GRID_DOMAIN = 0x0DD2 - MAP2_GRID_SEGMENTS = 0x0DD3 - MAP_COLOR = 0x0D10 - MAP_STENCIL = 0x0D11 - MATRIX_MODE = 0x0BA0 - MAX_ATTRIB_STACK_DEPTH = 0x0D35 - MAX_CLIENT_ATTRIB_STACK_DEPTH = 0x0D3B - MAX_CLIP_DISTANCES = 0x0D32 - MAX_CLIP_PLANES = 0x0D32 - MAX_EVAL_ORDER = 0x0D30 - MAX_LIGHTS = 0x0D31 - MAX_LIST_NESTING = 0x0B31 - MAX_MODELVIEW_STACK_DEPTH = 0x0D36 - MAX_NAME_STACK_DEPTH = 0x0D37 - MAX_PIXEL_MAP_TABLE = 0x0D34 - MAX_PROJECTION_STACK_DEPTH = 0x0D38 - MAX_TEXTURE_SIZE = 0x0D33 - MAX_TEXTURE_STACK_DEPTH = 0x0D39 - MAX_VIEWPORT_DIMS = 0x0D3A - MODELVIEW_MATRIX = 0x0BA6 - MODELVIEW_STACK_DEPTH = 0x0BA3 - NAME_STACK_DEPTH = 0x0D70 - NORMAL_ARRAY_STRIDE = 0x807F - NORMAL_ARRAY_TYPE = 0x807E - PACK_ALIGNMENT = 0x0D05 - PACK_LSB_FIRST = 0x0D01 - PACK_ROW_LENGTH = 0x0D02 - PACK_SKIP_PIXELS = 0x0D04 - PACK_SKIP_ROWS = 0x0D03 - PACK_SWAP_BYTES = 0x0D00 - PERSPECTIVE_CORRECTION_HINT = 0x0C50 - PIXEL_MAP_A_TO_A_SIZE = 0x0CB9 - PIXEL_MAP_B_TO_B_SIZE = 0x0CB8 - PIXEL_MAP_G_TO_G_SIZE = 0x0CB7 - PIXEL_MAP_I_TO_A_SIZE = 0x0CB5 - PIXEL_MAP_I_TO_B_SIZE = 0x0CB4 - PIXEL_MAP_I_TO_G_SIZE = 0x0CB3 - PIXEL_MAP_I_TO_I_SIZE = 0x0CB0 - PIXEL_MAP_I_TO_R_SIZE = 0x0CB2 - PIXEL_MAP_R_TO_R_SIZE = 0x0CB6 - PIXEL_MAP_S_TO_S_SIZE = 0x0CB1 - POINT_SIZE = 0x0B11 - POINT_SIZE_GRANULARITY = 0x0B13 - POINT_SIZE_RANGE = 0x0B12 - POINT_SMOOTH_HINT = 0x0C51 - POLYGON_MODE = 0x0B40 - POLYGON_OFFSET_FACTOR = 0x8038 - POLYGON_OFFSET_UNITS = 0x2A00 - POLYGON_SMOOTH_HINT = 0x0C53 - PROJECTION_MATRIX = 0x0BA7 - PROJECTION_STACK_DEPTH = 0x0BA4 - READ_BUFFER = 0x0C02 - RED_BIAS = 0x0D15 - RED_BITS = 0x0D52 - RED_SCALE = 0x0D14 - RENDER_MODE = 0x0C40 - RGBA_MODE = 0x0C31 - SCISSOR_BOX = 0x0C10 - SELECTION_BUFFER_SIZE = 0x0DF4 - SHADE_MODEL = 0x0B54 - SMOOTH_LINE_WIDTH_GRANULARITY = 0x0B23 - SMOOTH_LINE_WIDTH_RANGE = 0x0B22 - SMOOTH_POINT_SIZE_GRANULARITY = 0x0B13 - SMOOTH_POINT_SIZE_RANGE = 0x0B12 - STENCIL_BITS = 0x0D57 - STENCIL_CLEAR_VALUE = 0x0B91 - STENCIL_FAIL = 0x0B94 - STENCIL_FUNC = 0x0B92 - STENCIL_PASS_DEPTH_FAIL = 0x0B95 - STENCIL_PASS_DEPTH_PASS = 0x0B96 - STENCIL_REF = 0x0B97 - STENCIL_VALUE_MASK = 0x0B93 - STENCIL_WRITEMASK = 0x0B98 - STEREO = 0x0C33 - SUBPIXEL_BITS = 0x0D50 - TEXTURE_BINDING_1D = 0x8068 - TEXTURE_BINDING_2D = 0x8069 - TEXTURE_BINDING_3D = 0x806A - TEXTURE_COORD_ARRAY_SIZE = 0x8088 - TEXTURE_COORD_ARRAY_STRIDE = 0x808A - TEXTURE_COORD_ARRAY_TYPE = 0x8089 - TEXTURE_MATRIX = 0x0BA8 - TEXTURE_STACK_DEPTH = 0x0BA5 - UNPACK_ALIGNMENT = 0x0CF5 - UNPACK_LSB_FIRST = 0x0CF1 - UNPACK_ROW_LENGTH = 0x0CF2 - UNPACK_SKIP_PIXELS = 0x0CF4 - UNPACK_SKIP_ROWS = 0x0CF3 - UNPACK_SWAP_BYTES = 0x0CF0 - VERTEX_ARRAY_SIZE = 0x807A - VERTEX_ARRAY_STRIDE = 0x807C - VERTEX_ARRAY_TYPE = 0x807B - VIEWPORT = 0x0BA2 - ZOOM_X = 0x0D16 - ZOOM_Y = 0x0D17 - - COLOR_ARRAY_POINTER = 0x8090 - EDGE_FLAG_ARRAY_POINTER = 0x8093 - FEEDBACK_BUFFER_POINTER = 0x0DF0 - INDEX_ARRAY_POINTER = 0x8091 - NORMAL_ARRAY_POINTER = 0x808F - SELECTION_BUFFER_POINTER = 0x0DF3 - TEXTURE_COORD_ARRAY_POINTER = 0x8092 - VERTEX_ARRAY_POINTER = 0x808E - - TEXTURE_ALPHA_SIZE = 0x805F - TEXTURE_BLUE_SIZE = 0x805E - TEXTURE_BORDER = 0x1005 - TEXTURE_BORDER_COLOR = 0x1004 - TEXTURE_COMPONENTS = 0x1003 - TEXTURE_GREEN_SIZE = 0x805D - TEXTURE_HEIGHT = 0x1001 - TEXTURE_INTENSITY_SIZE = 0x8061 - TEXTURE_INTERNAL_FORMAT = 0x1003 - TEXTURE_LUMINANCE_SIZE = 0x8060 - TEXTURE_MAG_FILTER = 0x2800 - TEXTURE_MIN_FILTER = 0x2801 - TEXTURE_PRIORITY = 0x8066 - TEXTURE_RED_SIZE = 0x805C - TEXTURE_RESIDENT = 0x8067 - TEXTURE_WIDTH = 0x1000 - TEXTURE_WRAP_S = 0x2802 - TEXTURE_WRAP_T = 0x2803 - - DONT_CARE = 0x1100 - FASTEST = 0x1101 - NICEST = 0x1102 - - FRAGMENT_SHADER_DERIVATIVE_HINT = 0x8B8B - GENERATE_MIPMAP_HINT = 0x8192 - PROGRAM_BINARY_RETRIEVABLE_HINT = 0x8257 - TEXTURE_COMPRESSION_HINT = 0x84EF - - C3F_V3F = 0x2A24 - C4F_N3F_V3F = 0x2A26 - C4UB_V2F = 0x2A22 - C4UB_V3F = 0x2A23 - N3F_V3F = 0x2A25 - T2F_C3F_V3F = 0x2A2A - T2F_C4F_N3F_V3F = 0x2A2C - T2F_C4UB_V3F = 0x2A29 - T2F_N3F_V3F = 0x2A2B - T2F_V3F = 0x2A27 - T4F_C4F_N3F_V4F = 0x2A2D - T4F_V4F = 0x2A28 - V2F = 0x2A20 - V3F = 0x2A21 - - MODULATE = 0x2100 - REPLACE = 0x1E01 - - SEPARATE_SPECULAR_COLOR = 0x81FA - SINGLE_COLOR = 0x81F9 - - CONSTANT_ATTENUATION = 0x1207 - LINEAR_ATTENUATION = 0x1208 - POSITION = 0x1203 - QUADRATIC_ATTENUATION = 0x1209 - SPOT_CUTOFF = 0x1206 - SPOT_DIRECTION = 0x1204 - SPOT_EXPONENT = 0x1205 - - COMPILE = 0x1300 - COMPILE_AND_EXECUTE = 0x1301 - - AND = 0x1501 - AND_INVERTED = 0x1504 - AND_REVERSE = 0x1502 - CLEAR = 0x1500 - COPY = 0x1503 - COPY_INVERTED = 0x150C - EQUIV = 0x1509 - INVERT = 0x150A - NAND = 0x150E - NOOP = 0x1505 - NOR = 0x1508 - OR = 0x1507 - OR_INVERTED = 0x150D - OR_REVERSE = 0x150B - SET = 0x150F - XOR = 0x1506 - - MAP_FLUSH_EXPLICIT_BIT = 0x0010 - MAP_INVALIDATE_BUFFER_BIT = 0x0008 - MAP_INVALIDATE_RANGE_BIT = 0x0004 - MAP_READ_BIT = 0x0001 - MAP_UNSYNCHRONIZED_BIT = 0x0020 - MAP_WRITE_BIT = 0x0002 - - COLOR_INDEXES = 0x1603 - SHININESS = 0x1601 - - MODELVIEW = 0x1700 - PROJECTION = 0x1701 - TEXTURE = 0x1702 - - ALL_BARRIER_BITS = 0xFFFFFFFF - ATOMIC_COUNTER_BARRIER_BIT = 0x00001000 - BUFFER_UPDATE_BARRIER_BIT = 0x00000200 - COMMAND_BARRIER_BIT = 0x00000040 - ELEMENT_ARRAY_BARRIER_BIT = 0x00000002 - FRAMEBUFFER_BARRIER_BIT = 0x00000400 - PIXEL_BUFFER_BARRIER_BIT = 0x00000080 - SHADER_IMAGE_ACCESS_BARRIER_BIT = 0x00000020 - SHADER_STORAGE_BARRIER_BIT = 0x00002000 - TEXTURE_FETCH_BARRIER_BIT = 0x00000008 - TEXTURE_UPDATE_BARRIER_BIT = 0x00000100 - TRANSFORM_FEEDBACK_BARRIER_BIT = 0x00000800 - UNIFORM_BARRIER_BIT = 0x00000004 - VERTEX_ATTRIB_ARRAY_BARRIER_BIT = 0x00000001 - - LINE = 0x1B01 - POINT = 0x1B00 - - FILL = 0x1B02 - - COLOR = 0x1800 - DEPTH = 0x1801 - STENCIL = 0x1802 - - ALPHA = 0x1906 - BLUE = 0x1905 - COLOR_INDEX = 0x1900 - DEPTH_COMPONENT = 0x1902 - GREEN = 0x1904 - LUMINANCE = 0x1909 - LUMINANCE_ALPHA = 0x190A - RED = 0x1903 - RGB = 0x1907 - RGBA = 0x1908 - STENCIL_INDEX = 0x1901 - - ALPHA12 = 0x803D - ALPHA16 = 0x803E - ALPHA4 = 0x803B - ALPHA8 = 0x803C - INTENSITY = 0x8049 - INTENSITY12 = 0x804C - INTENSITY16 = 0x804D - INTENSITY4 = 0x804A - INTENSITY8 = 0x804B - LUMINANCE12 = 0x8041 - LUMINANCE12_ALPHA12 = 0x8047 - LUMINANCE12_ALPHA4 = 0x8046 - LUMINANCE16 = 0x8042 - LUMINANCE16_ALPHA16 = 0x8048 - LUMINANCE4 = 0x803F - LUMINANCE4_ALPHA4 = 0x8043 - LUMINANCE6_ALPHA2 = 0x8044 - LUMINANCE8 = 0x8040 - LUMINANCE8_ALPHA8 = 0x8045 - R3_G3_B2 = 0x2A10 - RGB10 = 0x8052 - RGB10_A2 = 0x8059 - RGB12 = 0x8053 - RGB16 = 0x8054 - RGB4 = 0x804F - RGB5 = 0x8050 - RGB5_A1 = 0x8057 - RGB8 = 0x8051 - RGBA12 = 0x805A - RGBA16 = 0x805B - RGBA2 = 0x8055 - RGBA4 = 0x8056 - RGBA8 = 0x8058 - - PACK_IMAGE_HEIGHT = 0x806C - PACK_SKIP_IMAGES = 0x806B - UNPACK_IMAGE_HEIGHT = 0x806E - UNPACK_SKIP_IMAGES = 0x806D - - BITMAP = 0x1A00 - UNSIGNED_BYTE_3_3_2 = 0x8032 - UNSIGNED_INT_10_10_10_2 = 0x8036 - UNSIGNED_INT_8_8_8_8 = 0x8035 - UNSIGNED_SHORT_4_4_4_4 = 0x8033 - UNSIGNED_SHORT_5_5_5_1 = 0x8034 - - POINT_DISTANCE_ATTENUATION = 0x8129 - POINT_FADE_THRESHOLD_SIZE = 0x8128 - POINT_SIZE_MAX = 0x8127 - POINT_SIZE_MIN = 0x8126 - - LINES = 0x0001 - LINES_ADJACENCY = 0x000A - LINE_LOOP = 0x0002 - LINE_STRIP = 0x0003 - LINE_STRIP_ADJACENCY = 0x000B - PATCHES = 0x000E - POINTS = 0x0000 - POLYGON = 0x0009 - QUADS = 0x0007 - QUAD_STRIP = 0x0008 - TRIANGLES = 0x0004 - TRIANGLES_ADJACENCY = 0x000C - TRIANGLE_FAN = 0x0006 - TRIANGLE_STRIP = 0x0005 - TRIANGLE_STRIP_ADJACENCY = 0x000D - - FEEDBACK = 0x1C01 - RENDER = 0x1C00 - SELECT = 0x1C02 - - FLAT = 0x1D00 - SMOOTH = 0x1D01 - - DECR = 0x1E03 - INCR = 0x1E02 - KEEP = 0x1E00 - - EXTENSIONS = 0x1F03 - RENDERER = 0x1F01 - VENDOR = 0x1F00 - VERSION = 0x1F02 - - S = 0x2000 - T = 0x2001 - R = 0x2002 - Q = 0x2003 - - DECAL = 0x2101 - - TEXTURE_ENV_COLOR = 0x2201 - TEXTURE_ENV_MODE = 0x2200 - - TEXTURE_ENV = 0x2300 - - EYE_LINEAR = 0x2400 - OBJECT_LINEAR = 0x2401 - SPHERE_MAP = 0x2402 - - EYE_PLANE = 0x2502 - OBJECT_PLANE = 0x2501 - TEXTURE_GEN_MODE = 0x2500 - - NEAREST = 0x2600 - - LINEAR_MIPMAP_LINEAR = 0x2703 - LINEAR_MIPMAP_NEAREST = 0x2701 - NEAREST_MIPMAP_LINEAR = 0x2702 - NEAREST_MIPMAP_NEAREST = 0x2700 - - GENERATE_MIPMAP = 0x8191 - TEXTURE_WRAP_R = 0x8072 - - PROXY_TEXTURE_1D = 0x8063 - PROXY_TEXTURE_2D = 0x8064 - PROXY_TEXTURE_3D = 0x8070 - TEXTURE_3D = 0x806F - TEXTURE_BASE_LEVEL = 0x813C - TEXTURE_MAX_LEVEL = 0x813D - TEXTURE_MAX_LOD = 0x813B - TEXTURE_MIN_LOD = 0x813A - - CLAMP = 0x2900 - CLAMP_TO_BORDER = 0x812D - CLAMP_TO_EDGE = 0x812F - REPEAT = 0x2901 - - VERTEX_SHADER_BIT = 0x00000001 - FRAGMENT_SHADER_BIT = 0x00000002 - GEOMETRY_SHADER_BIT = 0x00000004 - TESS_CONTROL_SHADER_BIT = 0x00000008 - TESS_EVALUATION_SHADER_BIT = 0x00000010 - COMPUTE_SHADER_BIT = 0x00000020 - ALL_SHADER_BITS = 0xFFFFFFFF - - SYNC_FLUSH_COMMANDS_BIT = 0x00000001 - INVALID_INDEX = 0xFFFFFFFF - TIMEOUT_IGNORED = 0xFFFFFFFFFFFFFFFF - CONSTANT_COLOR = 0x8001 - ONE_MINUS_CONSTANT_COLOR = 0x8002 - CONSTANT_ALPHA = 0x8003 - ONE_MINUS_CONSTANT_ALPHA = 0x8004 - FUNC_ADD = 0x8006 - MIN = 0x8007 - MAX = 0x8008 - BLEND_EQUATION_RGB = 0x8009 - FUNC_SUBTRACT = 0x800A - FUNC_REVERSE_SUBTRACT = 0x800B - RESCALE_NORMAL = 0x803A - TEXTURE_DEPTH = 0x8071 - MAX_3D_TEXTURE_SIZE = 0x8073 - MULTISAMPLE = 0x809D - SAMPLE_ALPHA_TO_COVERAGE = 0x809E - SAMPLE_ALPHA_TO_ONE = 0x809F - SAMPLE_COVERAGE = 0x80A0 - SAMPLE_BUFFERS = 0x80A8 - SAMPLES = 0x80A9 - SAMPLE_COVERAGE_VALUE = 0x80AA - SAMPLE_COVERAGE_INVERT = 0x80AB - BLEND_DST_RGB = 0x80C8 - BLEND_SRC_RGB = 0x80C9 - BLEND_DST_ALPHA = 0x80CA - BLEND_SRC_ALPHA = 0x80CB - BGR = 0x80E0 - BGRA = 0x80E1 - MAX_ELEMENTS_VERTICES = 0x80E8 - MAX_ELEMENTS_INDICES = 0x80E9 - DEPTH_COMPONENT16 = 0x81A5 - DEPTH_COMPONENT24 = 0x81A6 - DEPTH_COMPONENT32 = 0x81A7 - FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING = 0x8210 - FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE = 0x8211 - FRAMEBUFFER_ATTACHMENT_RED_SIZE = 0x8212 - FRAMEBUFFER_ATTACHMENT_GREEN_SIZE = 0x8213 - FRAMEBUFFER_ATTACHMENT_BLUE_SIZE = 0x8214 - FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE = 0x8215 - FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE = 0x8216 - FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE = 0x8217 - FRAMEBUFFER_DEFAULT = 0x8218 - FRAMEBUFFER_UNDEFINED = 0x8219 - DEPTH_STENCIL_ATTACHMENT = 0x821A - MAJOR_VERSION = 0x821B - MINOR_VERSION = 0x821C - NUM_EXTENSIONS = 0x821D - CONTEXT_FLAGS = 0x821E - INDEX = 0x8222 - COMPRESSED_RED = 0x8225 - COMPRESSED_RG = 0x8226 - RG = 0x8227 - RG_INTEGER = 0x8228 - R8 = 0x8229 - R16 = 0x822A - RG8 = 0x822B - RG16 = 0x822C - R16F = 0x822D - R32F = 0x822E - RG16F = 0x822F - RG32F = 0x8230 - R8I = 0x8231 - R8UI = 0x8232 - R16I = 0x8233 - R16UI = 0x8234 - R32I = 0x8235 - R32UI = 0x8236 - RG8I = 0x8237 - RG8UI = 0x8238 - RG16I = 0x8239 - RG16UI = 0x823A - RG32I = 0x823B - RG32UI = 0x823C - DEBUG_OUTPUT_SYNCHRONOUS = 0x8242 - DEBUG_NEXT_LOGGED_MESSAGE_LENGTH = 0x8243 - DEBUG_CALLBACK_FUNCTION = 0x8244 - DEBUG_CALLBACK_USER_PARAM = 0x8245 - DEBUG_SOURCE_API = 0x8246 - DEBUG_SOURCE_WINDOW_SYSTEM = 0x8247 - DEBUG_SOURCE_SHADER_COMPILER = 0x8248 - DEBUG_SOURCE_THIRD_PARTY = 0x8249 - DEBUG_SOURCE_APPLICATION = 0x824A - DEBUG_SOURCE_OTHER = 0x824B - DEBUG_TYPE_ERROR = 0x824C - DEBUG_TYPE_DEPRECATED_BEHAVIOR = 0x824D - DEBUG_TYPE_UNDEFINED_BEHAVIOR = 0x824E - DEBUG_TYPE_PORTABILITY = 0x824F - DEBUG_TYPE_PERFORMANCE = 0x8250 - DEBUG_TYPE_OTHER = 0x8251 - PROGRAM_SEPARABLE = 0x8258 - ACTIVE_PROGRAM = 0x8259 - PROGRAM_PIPELINE_BINDING = 0x825A - MAX_VIEWPORTS = 0x825B - VIEWPORT_SUBPIXEL_BITS = 0x825C - VIEWPORT_BOUNDS_RANGE = 0x825D - LAYER_PROVOKING_VERTEX = 0x825E - VIEWPORT_INDEX_PROVOKING_VERTEX = 0x825F - UNDEFINED_VERTEX = 0x8260 - MAX_COMPUTE_SHARED_MEMORY_SIZE = 0x8262 - MAX_COMPUTE_UNIFORM_COMPONENTS = 0x8263 - MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS = 0x8264 - MAX_COMPUTE_ATOMIC_COUNTERS = 0x8265 - MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS = 0x8266 - COMPUTE_WORK_GROUP_SIZE = 0x8267 - DEBUG_TYPE_MARKER = 0x8268 - DEBUG_TYPE_PUSH_GROUP = 0x8269 - DEBUG_TYPE_POP_GROUP = 0x826A - DEBUG_SEVERITY_NOTIFICATION = 0x826B - MAX_DEBUG_GROUP_STACK_DEPTH = 0x826C - DEBUG_GROUP_STACK_DEPTH = 0x826D - MAX_UNIFORM_LOCATIONS = 0x826E - INTERNALFORMAT_SUPPORTED = 0x826F - INTERNALFORMAT_PREFERRED = 0x8270 - INTERNALFORMAT_RED_SIZE = 0x8271 - INTERNALFORMAT_GREEN_SIZE = 0x8272 - INTERNALFORMAT_BLUE_SIZE = 0x8273 - INTERNALFORMAT_ALPHA_SIZE = 0x8274 - INTERNALFORMAT_DEPTH_SIZE = 0x8275 - INTERNALFORMAT_STENCIL_SIZE = 0x8276 - INTERNALFORMAT_SHARED_SIZE = 0x8277 - INTERNALFORMAT_RED_TYPE = 0x8278 - INTERNALFORMAT_GREEN_TYPE = 0x8279 - INTERNALFORMAT_BLUE_TYPE = 0x827A - INTERNALFORMAT_ALPHA_TYPE = 0x827B - INTERNALFORMAT_DEPTH_TYPE = 0x827C - INTERNALFORMAT_STENCIL_TYPE = 0x827D - MAX_WIDTH = 0x827E - MAX_HEIGHT = 0x827F - MAX_DEPTH = 0x8280 - MAX_LAYERS = 0x8281 - MAX_COMBINED_DIMENSIONS = 0x8282 - COLOR_COMPONENTS = 0x8283 - DEPTH_COMPONENTS = 0x8284 - STENCIL_COMPONENTS = 0x8285 - COLOR_RENDERABLE = 0x8286 - DEPTH_RENDERABLE = 0x8287 - STENCIL_RENDERABLE = 0x8288 - FRAMEBUFFER_RENDERABLE = 0x8289 - FRAMEBUFFER_RENDERABLE_LAYERED = 0x828A - FRAMEBUFFER_BLEND = 0x828B - READ_PIXELS = 0x828C - READ_PIXELS_FORMAT = 0x828D - READ_PIXELS_TYPE = 0x828E - TEXTURE_IMAGE_FORMAT = 0x828F - TEXTURE_IMAGE_TYPE = 0x8290 - GET_TEXTURE_IMAGE_FORMAT = 0x8291 - GET_TEXTURE_IMAGE_TYPE = 0x8292 - MIPMAP = 0x8293 - MANUAL_GENERATE_MIPMAP = 0x8294 - AUTO_GENERATE_MIPMAP = 0x8295 - COLOR_ENCODING = 0x8296 - SRGB_READ = 0x8297 - SRGB_WRITE = 0x8298 - FILTER = 0x829A - VERTEX_TEXTURE = 0x829B - TESS_CONTROL_TEXTURE = 0x829C - TESS_EVALUATION_TEXTURE = 0x829D - GEOMETRY_TEXTURE = 0x829E - FRAGMENT_TEXTURE = 0x829F - COMPUTE_TEXTURE = 0x82A0 - TEXTURE_SHADOW = 0x82A1 - TEXTURE_GATHER = 0x82A2 - TEXTURE_GATHER_SHADOW = 0x82A3 - SHADER_IMAGE_LOAD = 0x82A4 - SHADER_IMAGE_STORE = 0x82A5 - SHADER_IMAGE_ATOMIC = 0x82A6 - IMAGE_TEXEL_SIZE = 0x82A7 - IMAGE_COMPATIBILITY_CLASS = 0x82A8 - IMAGE_PIXEL_FORMAT = 0x82A9 - IMAGE_PIXEL_TYPE = 0x82AA - SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST = 0x82AC - SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST = 0x82AD - SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE = 0x82AE - SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE = 0x82AF - TEXTURE_COMPRESSED_BLOCK_WIDTH = 0x82B1 - TEXTURE_COMPRESSED_BLOCK_HEIGHT = 0x82B2 - TEXTURE_COMPRESSED_BLOCK_SIZE = 0x82B3 - CLEAR_BUFFER = 0x82B4 - TEXTURE_VIEW = 0x82B5 - VIEW_COMPATIBILITY_CLASS = 0x82B6 - FULL_SUPPORT = 0x82B7 - CAVEAT_SUPPORT = 0x82B8 - IMAGE_CLASS_4_X_32 = 0x82B9 - IMAGE_CLASS_2_X_32 = 0x82BA - IMAGE_CLASS_1_X_32 = 0x82BB - IMAGE_CLASS_4_X_16 = 0x82BC - IMAGE_CLASS_2_X_16 = 0x82BD - IMAGE_CLASS_1_X_16 = 0x82BE - IMAGE_CLASS_4_X_8 = 0x82BF - IMAGE_CLASS_2_X_8 = 0x82C0 - IMAGE_CLASS_1_X_8 = 0x82C1 - IMAGE_CLASS_11_11_10 = 0x82C2 - IMAGE_CLASS_10_10_10_2 = 0x82C3 - VIEW_CLASS_128_BITS = 0x82C4 - VIEW_CLASS_96_BITS = 0x82C5 - VIEW_CLASS_64_BITS = 0x82C6 - VIEW_CLASS_48_BITS = 0x82C7 - VIEW_CLASS_32_BITS = 0x82C8 - VIEW_CLASS_24_BITS = 0x82C9 - VIEW_CLASS_16_BITS = 0x82CA - VIEW_CLASS_8_BITS = 0x82CB - VIEW_CLASS_S3TC_DXT1_RGB = 0x82CC - VIEW_CLASS_S3TC_DXT1_RGBA = 0x82CD - VIEW_CLASS_S3TC_DXT3_RGBA = 0x82CE - VIEW_CLASS_S3TC_DXT5_RGBA = 0x82CF - VIEW_CLASS_RGTC1_RED = 0x82D0 - VIEW_CLASS_RGTC2_RG = 0x82D1 - VIEW_CLASS_BPTC_UNORM = 0x82D2 - VIEW_CLASS_BPTC_FLOAT = 0x82D3 - VERTEX_ATTRIB_BINDING = 0x82D4 - VERTEX_ATTRIB_RELATIVE_OFFSET = 0x82D5 - VERTEX_BINDING_DIVISOR = 0x82D6 - VERTEX_BINDING_OFFSET = 0x82D7 - VERTEX_BINDING_STRIDE = 0x82D8 - MAX_VERTEX_ATTRIB_RELATIVE_OFFSET = 0x82D9 - MAX_VERTEX_ATTRIB_BINDINGS = 0x82DA - TEXTURE_VIEW_MIN_LEVEL = 0x82DB - TEXTURE_VIEW_NUM_LEVELS = 0x82DC - TEXTURE_VIEW_MIN_LAYER = 0x82DD - TEXTURE_VIEW_NUM_LAYERS = 0x82DE - TEXTURE_IMMUTABLE_LEVELS = 0x82DF - BUFFER = 0x82E0 - SHADER = 0x82E1 - PROGRAM = 0x82E2 - QUERY = 0x82E3 - PROGRAM_PIPELINE = 0x82E4 - SAMPLER = 0x82E6 - DISPLAY_LIST = 0x82E7 - MAX_LABEL_LENGTH = 0x82E8 - NUM_SHADING_LANGUAGE_VERSIONS = 0x82E9 - UNSIGNED_BYTE_2_3_3_REV = 0x8362 - UNSIGNED_SHORT_5_6_5 = 0x8363 - UNSIGNED_SHORT_5_6_5_REV = 0x8364 - UNSIGNED_SHORT_4_4_4_4_REV = 0x8365 - UNSIGNED_SHORT_1_5_5_5_REV = 0x8366 - UNSIGNED_INT_8_8_8_8_REV = 0x8367 - UNSIGNED_INT_2_10_10_10_REV = 0x8368 - MIRRORED_REPEAT = 0x8370 - FOG_COORDINATE_SOURCE = 0x8450 - FOG_COORD_SRC = 0x8450 - FOG_COORDINATE = 0x8451 - FOG_COORD = 0x8451 - FRAGMENT_DEPTH = 0x8452 - CURRENT_FOG_COORDINATE = 0x8453 - CURRENT_FOG_COORD = 0x8453 - FOG_COORDINATE_ARRAY_TYPE = 0x8454 - FOG_COORD_ARRAY_TYPE = 0x8454 - FOG_COORDINATE_ARRAY_STRIDE = 0x8455 - FOG_COORD_ARRAY_STRIDE = 0x8455 - FOG_COORDINATE_ARRAY_POINTER = 0x8456 - FOG_COORD_ARRAY_POINTER = 0x8456 - FOG_COORDINATE_ARRAY = 0x8457 - FOG_COORD_ARRAY = 0x8457 - COLOR_SUM = 0x8458 - CURRENT_SECONDARY_COLOR = 0x8459 - SECONDARY_COLOR_ARRAY_SIZE = 0x845A - SECONDARY_COLOR_ARRAY_TYPE = 0x845B - SECONDARY_COLOR_ARRAY_STRIDE = 0x845C - SECONDARY_COLOR_ARRAY_POINTER = 0x845D - SECONDARY_COLOR_ARRAY = 0x845E - CURRENT_RASTER_SECONDARY_COLOR = 0x845F - TEXTURE0 = 0x84C0 - TEXTURE1 = 0x84C1 - TEXTURE2 = 0x84C2 - TEXTURE3 = 0x84C3 - TEXTURE4 = 0x84C4 - TEXTURE5 = 0x84C5 - TEXTURE6 = 0x84C6 - TEXTURE7 = 0x84C7 - TEXTURE8 = 0x84C8 - TEXTURE9 = 0x84C9 - TEXTURE10 = 0x84CA - TEXTURE11 = 0x84CB - TEXTURE12 = 0x84CC - TEXTURE13 = 0x84CD - TEXTURE14 = 0x84CE - TEXTURE15 = 0x84CF - TEXTURE16 = 0x84D0 - TEXTURE17 = 0x84D1 - TEXTURE18 = 0x84D2 - TEXTURE19 = 0x84D3 - TEXTURE20 = 0x84D4 - TEXTURE21 = 0x84D5 - TEXTURE22 = 0x84D6 - TEXTURE23 = 0x84D7 - TEXTURE24 = 0x84D8 - TEXTURE25 = 0x84D9 - TEXTURE26 = 0x84DA - TEXTURE27 = 0x84DB - TEXTURE28 = 0x84DC - TEXTURE29 = 0x84DD - TEXTURE30 = 0x84DE - TEXTURE31 = 0x84DF - ACTIVE_TEXTURE = 0x84E0 - CLIENT_ACTIVE_TEXTURE = 0x84E1 - MAX_TEXTURE_UNITS = 0x84E2 - TRANSPOSE_MODELVIEW_MATRIX = 0x84E3 - TRANSPOSE_PROJECTION_MATRIX = 0x84E4 - TRANSPOSE_TEXTURE_MATRIX = 0x84E5 - TRANSPOSE_COLOR_MATRIX = 0x84E6 - SUBTRACT = 0x84E7 - MAX_RENDERBUFFER_SIZE = 0x84E8 - COMPRESSED_ALPHA = 0x84E9 - COMPRESSED_LUMINANCE = 0x84EA - COMPRESSED_LUMINANCE_ALPHA = 0x84EB - COMPRESSED_INTENSITY = 0x84EC - COMPRESSED_RGB = 0x84ED - COMPRESSED_RGBA = 0x84EE - UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER = 0x84F0 - UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER = 0x84F1 - TEXTURE_RECTANGLE = 0x84F5 - TEXTURE_BINDING_RECTANGLE = 0x84F6 - PROXY_TEXTURE_RECTANGLE = 0x84F7 - MAX_RECTANGLE_TEXTURE_SIZE = 0x84F8 - DEPTH_STENCIL = 0x84F9 - UNSIGNED_INT_24_8 = 0x84FA - MAX_TEXTURE_LOD_BIAS = 0x84FD - TEXTURE_FILTER_CONTROL = 0x8500 - TEXTURE_LOD_BIAS = 0x8501 - INCR_WRAP = 0x8507 - DECR_WRAP = 0x8508 - NORMAL_MAP = 0x8511 - REFLECTION_MAP = 0x8512 - TEXTURE_CUBE_MAP = 0x8513 - TEXTURE_BINDING_CUBE_MAP = 0x8514 - TEXTURE_CUBE_MAP_POSITIVE_X = 0x8515 - TEXTURE_CUBE_MAP_NEGATIVE_X = 0x8516 - TEXTURE_CUBE_MAP_POSITIVE_Y = 0x8517 - TEXTURE_CUBE_MAP_NEGATIVE_Y = 0x8518 - TEXTURE_CUBE_MAP_POSITIVE_Z = 0x8519 - TEXTURE_CUBE_MAP_NEGATIVE_Z = 0x851A - PROXY_TEXTURE_CUBE_MAP = 0x851B - MAX_CUBE_MAP_TEXTURE_SIZE = 0x851C - COMBINE = 0x8570 - COMBINE_RGB = 0x8571 - COMBINE_ALPHA = 0x8572 - RGB_SCALE = 0x8573 - ADD_SIGNED = 0x8574 - INTERPOLATE = 0x8575 - CONSTANT = 0x8576 - PRIMARY_COLOR = 0x8577 - PREVIOUS = 0x8578 - SOURCE0_RGB = 0x8580 - SRC0_RGB = 0x8580 - SOURCE1_RGB = 0x8581 - SRC1_RGB = 0x8581 - SOURCE2_RGB = 0x8582 - SRC2_RGB = 0x8582 - SOURCE0_ALPHA = 0x8588 - SRC0_ALPHA = 0x8588 - SOURCE1_ALPHA = 0x8589 - SRC1_ALPHA = 0x8589 - SOURCE2_ALPHA = 0x858A - SRC2_ALPHA = 0x858A - OPERAND0_RGB = 0x8590 - OPERAND1_RGB = 0x8591 - OPERAND2_RGB = 0x8592 - OPERAND0_ALPHA = 0x8598 - OPERAND1_ALPHA = 0x8599 - OPERAND2_ALPHA = 0x859A - VERTEX_ARRAY_BINDING = 0x85B5 - VERTEX_ATTRIB_ARRAY_ENABLED = 0x8622 - VERTEX_ATTRIB_ARRAY_SIZE = 0x8623 - VERTEX_ATTRIB_ARRAY_STRIDE = 0x8624 - VERTEX_ATTRIB_ARRAY_TYPE = 0x8625 - CURRENT_VERTEX_ATTRIB = 0x8626 - VERTEX_PROGRAM_POINT_SIZE = 0x8642 - PROGRAM_POINT_SIZE = 0x8642 - VERTEX_PROGRAM_TWO_SIDE = 0x8643 - VERTEX_ATTRIB_ARRAY_POINTER = 0x8645 - DEPTH_CLAMP = 0x864F - TEXTURE_COMPRESSED_IMAGE_SIZE = 0x86A0 - TEXTURE_COMPRESSED = 0x86A1 - NUM_COMPRESSED_TEXTURE_FORMATS = 0x86A2 - COMPRESSED_TEXTURE_FORMATS = 0x86A3 - DOT3_RGB = 0x86AE - DOT3_RGBA = 0x86AF - PROGRAM_BINARY_LENGTH = 0x8741 - VERTEX_ATTRIB_ARRAY_LONG = 0x874E - BUFFER_SIZE = 0x8764 - BUFFER_USAGE = 0x8765 - NUM_PROGRAM_BINARY_FORMATS = 0x87FE - PROGRAM_BINARY_FORMATS = 0x87FF - STENCIL_BACK_FUNC = 0x8800 - STENCIL_BACK_FAIL = 0x8801 - STENCIL_BACK_PASS_DEPTH_FAIL = 0x8802 - STENCIL_BACK_PASS_DEPTH_PASS = 0x8803 - RGBA32F = 0x8814 - RGB32F = 0x8815 - RGBA16F = 0x881A - RGB16F = 0x881B - MAX_DRAW_BUFFERS = 0x8824 - DRAW_BUFFER0 = 0x8825 - DRAW_BUFFER1 = 0x8826 - DRAW_BUFFER2 = 0x8827 - DRAW_BUFFER3 = 0x8828 - DRAW_BUFFER4 = 0x8829 - DRAW_BUFFER5 = 0x882A - DRAW_BUFFER6 = 0x882B - DRAW_BUFFER7 = 0x882C - DRAW_BUFFER8 = 0x882D - DRAW_BUFFER9 = 0x882E - DRAW_BUFFER10 = 0x882F - DRAW_BUFFER11 = 0x8830 - DRAW_BUFFER12 = 0x8831 - DRAW_BUFFER13 = 0x8832 - DRAW_BUFFER14 = 0x8833 - DRAW_BUFFER15 = 0x8834 - BLEND_EQUATION_ALPHA = 0x883D - TEXTURE_DEPTH_SIZE = 0x884A - DEPTH_TEXTURE_MODE = 0x884B - TEXTURE_COMPARE_MODE = 0x884C - TEXTURE_COMPARE_FUNC = 0x884D - COMPARE_R_TO_TEXTURE = 0x884E - COMPARE_REF_TO_TEXTURE = 0x884E - TEXTURE_CUBE_MAP_SEAMLESS = 0x884F - POINT_SPRITE = 0x8861 - COORD_REPLACE = 0x8862 - QUERY_COUNTER_BITS = 0x8864 - CURRENT_QUERY = 0x8865 - QUERY_RESULT = 0x8866 - QUERY_RESULT_AVAILABLE = 0x8867 - MAX_VERTEX_ATTRIBS = 0x8869 - VERTEX_ATTRIB_ARRAY_NORMALIZED = 0x886A - MAX_TESS_CONTROL_INPUT_COMPONENTS = 0x886C - MAX_TESS_EVALUATION_INPUT_COMPONENTS = 0x886D - MAX_TEXTURE_COORDS = 0x8871 - MAX_TEXTURE_IMAGE_UNITS = 0x8872 - GEOMETRY_SHADER_INVOCATIONS = 0x887F - ARRAY_BUFFER = 0x8892 - ELEMENT_ARRAY_BUFFER = 0x8893 - ARRAY_BUFFER_BINDING = 0x8894 - ELEMENT_ARRAY_BUFFER_BINDING = 0x8895 - VERTEX_ARRAY_BUFFER_BINDING = 0x8896 - NORMAL_ARRAY_BUFFER_BINDING = 0x8897 - COLOR_ARRAY_BUFFER_BINDING = 0x8898 - INDEX_ARRAY_BUFFER_BINDING = 0x8899 - TEXTURE_COORD_ARRAY_BUFFER_BINDING = 0x889A - EDGE_FLAG_ARRAY_BUFFER_BINDING = 0x889B - SECONDARY_COLOR_ARRAY_BUFFER_BINDING = 0x889C - FOG_COORDINATE_ARRAY_BUFFER_BINDING = 0x889D - FOG_COORD_ARRAY_BUFFER_BINDING = 0x889D - WEIGHT_ARRAY_BUFFER_BINDING = 0x889E - VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = 0x889F - READ_ONLY = 0x88B8 - WRITE_ONLY = 0x88B9 - READ_WRITE = 0x88BA - BUFFER_ACCESS = 0x88BB - BUFFER_MAPPED = 0x88BC - BUFFER_MAP_POINTER = 0x88BD - TIME_ELAPSED = 0x88BF - STREAM_DRAW = 0x88E0 - STREAM_READ = 0x88E1 - STREAM_COPY = 0x88E2 - STATIC_DRAW = 0x88E4 - STATIC_READ = 0x88E5 - STATIC_COPY = 0x88E6 - DYNAMIC_DRAW = 0x88E8 - DYNAMIC_READ = 0x88E9 - DYNAMIC_COPY = 0x88EA - PIXEL_PACK_BUFFER = 0x88EB - PIXEL_UNPACK_BUFFER = 0x88EC - PIXEL_PACK_BUFFER_BINDING = 0x88ED - PIXEL_UNPACK_BUFFER_BINDING = 0x88EF - DEPTH24_STENCIL8 = 0x88F0 - TEXTURE_STENCIL_SIZE = 0x88F1 - SRC1_COLOR = 0x88F9 - ONE_MINUS_SRC1_COLOR = 0x88FA - ONE_MINUS_SRC1_ALPHA = 0x88FB - MAX_DUAL_SOURCE_DRAW_BUFFERS = 0x88FC - VERTEX_ATTRIB_ARRAY_INTEGER = 0x88FD - VERTEX_ATTRIB_ARRAY_DIVISOR = 0x88FE - MAX_ARRAY_TEXTURE_LAYERS = 0x88FF - MIN_PROGRAM_TEXEL_OFFSET = 0x8904 - MAX_PROGRAM_TEXEL_OFFSET = 0x8905 - SAMPLES_PASSED = 0x8914 - GEOMETRY_VERTICES_OUT = 0x8916 - GEOMETRY_INPUT_TYPE = 0x8917 - GEOMETRY_OUTPUT_TYPE = 0x8918 - SAMPLER_BINDING = 0x8919 - CLAMP_VERTEX_COLOR = 0x891A - CLAMP_FRAGMENT_COLOR = 0x891B - CLAMP_READ_COLOR = 0x891C - FIXED_ONLY = 0x891D - UNIFORM_BUFFER = 0x8A11 - UNIFORM_BUFFER_BINDING = 0x8A28 - UNIFORM_BUFFER_START = 0x8A29 - UNIFORM_BUFFER_SIZE = 0x8A2A - MAX_VERTEX_UNIFORM_BLOCKS = 0x8A2B - MAX_GEOMETRY_UNIFORM_BLOCKS = 0x8A2C - MAX_FRAGMENT_UNIFORM_BLOCKS = 0x8A2D - MAX_COMBINED_UNIFORM_BLOCKS = 0x8A2E - MAX_UNIFORM_BUFFER_BINDINGS = 0x8A2F - MAX_UNIFORM_BLOCK_SIZE = 0x8A30 - MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS = 0x8A31 - MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS = 0x8A32 - MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS = 0x8A33 - UNIFORM_BUFFER_OFFSET_ALIGNMENT = 0x8A34 - ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH = 0x8A35 - ACTIVE_UNIFORM_BLOCKS = 0x8A36 - UNIFORM_TYPE = 0x8A37 - UNIFORM_SIZE = 0x8A38 - UNIFORM_NAME_LENGTH = 0x8A39 - UNIFORM_BLOCK_INDEX = 0x8A3A - UNIFORM_OFFSET = 0x8A3B - UNIFORM_ARRAY_STRIDE = 0x8A3C - UNIFORM_MATRIX_STRIDE = 0x8A3D - UNIFORM_IS_ROW_MAJOR = 0x8A3E - UNIFORM_BLOCK_BINDING = 0x8A3F - UNIFORM_BLOCK_DATA_SIZE = 0x8A40 - UNIFORM_BLOCK_NAME_LENGTH = 0x8A41 - UNIFORM_BLOCK_ACTIVE_UNIFORMS = 0x8A42 - UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES = 0x8A43 - UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER = 0x8A44 - UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER = 0x8A45 - UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER = 0x8A46 - FRAGMENT_SHADER = 0x8B30 - VERTEX_SHADER = 0x8B31 - MAX_FRAGMENT_UNIFORM_COMPONENTS = 0x8B49 - MAX_VERTEX_UNIFORM_COMPONENTS = 0x8B4A - MAX_VARYING_FLOATS = 0x8B4B - MAX_VARYING_COMPONENTS = 0x8B4B - MAX_VERTEX_TEXTURE_IMAGE_UNITS = 0x8B4C - MAX_COMBINED_TEXTURE_IMAGE_UNITS = 0x8B4D - SHADER_TYPE = 0x8B4F - FLOAT_VEC2 = 0x8B50 - FLOAT_VEC3 = 0x8B51 - FLOAT_VEC4 = 0x8B52 - INT_VEC2 = 0x8B53 - INT_VEC3 = 0x8B54 - INT_VEC4 = 0x8B55 - BOOL = 0x8B56 - BOOL_VEC2 = 0x8B57 - BOOL_VEC3 = 0x8B58 - BOOL_VEC4 = 0x8B59 - FLOAT_MAT2 = 0x8B5A - FLOAT_MAT3 = 0x8B5B - FLOAT_MAT4 = 0x8B5C - SAMPLER_1D = 0x8B5D - SAMPLER_2D = 0x8B5E - SAMPLER_3D = 0x8B5F - SAMPLER_CUBE = 0x8B60 - SAMPLER_1D_SHADOW = 0x8B61 - SAMPLER_2D_SHADOW = 0x8B62 - SAMPLER_2D_RECT = 0x8B63 - SAMPLER_2D_RECT_SHADOW = 0x8B64 - FLOAT_MAT2x3 = 0x8B65 - FLOAT_MAT2x4 = 0x8B66 - FLOAT_MAT3x2 = 0x8B67 - FLOAT_MAT3x4 = 0x8B68 - FLOAT_MAT4x2 = 0x8B69 - FLOAT_MAT4x3 = 0x8B6A - DELETE_STATUS = 0x8B80 - COMPILE_STATUS = 0x8B81 - LINK_STATUS = 0x8B82 - VALIDATE_STATUS = 0x8B83 - INFO_LOG_LENGTH = 0x8B84 - ATTACHED_SHADERS = 0x8B85 - ACTIVE_UNIFORMS = 0x8B86 - ACTIVE_UNIFORM_MAX_LENGTH = 0x8B87 - SHADER_SOURCE_LENGTH = 0x8B88 - ACTIVE_ATTRIBUTES = 0x8B89 - ACTIVE_ATTRIBUTE_MAX_LENGTH = 0x8B8A - SHADING_LANGUAGE_VERSION = 0x8B8C - CURRENT_PROGRAM = 0x8B8D - IMPLEMENTATION_COLOR_READ_TYPE = 0x8B9A - IMPLEMENTATION_COLOR_READ_FORMAT = 0x8B9B - TEXTURE_RED_TYPE = 0x8C10 - TEXTURE_GREEN_TYPE = 0x8C11 - TEXTURE_BLUE_TYPE = 0x8C12 - TEXTURE_ALPHA_TYPE = 0x8C13 - TEXTURE_LUMINANCE_TYPE = 0x8C14 - TEXTURE_INTENSITY_TYPE = 0x8C15 - TEXTURE_DEPTH_TYPE = 0x8C16 - UNSIGNED_NORMALIZED = 0x8C17 - TEXTURE_1D_ARRAY = 0x8C18 - PROXY_TEXTURE_1D_ARRAY = 0x8C19 - TEXTURE_2D_ARRAY = 0x8C1A - PROXY_TEXTURE_2D_ARRAY = 0x8C1B - TEXTURE_BINDING_1D_ARRAY = 0x8C1C - TEXTURE_BINDING_2D_ARRAY = 0x8C1D - MAX_GEOMETRY_TEXTURE_IMAGE_UNITS = 0x8C29 - TEXTURE_BUFFER = 0x8C2A - MAX_TEXTURE_BUFFER_SIZE = 0x8C2B - TEXTURE_BINDING_BUFFER = 0x8C2C - TEXTURE_BUFFER_DATA_STORE_BINDING = 0x8C2D - ANY_SAMPLES_PASSED = 0x8C2F - SAMPLE_SHADING = 0x8C36 - MIN_SAMPLE_SHADING_VALUE = 0x8C37 - R11F_G11F_B10F = 0x8C3A - UNSIGNED_INT_10F_11F_11F_REV = 0x8C3B - RGB9_E5 = 0x8C3D - UNSIGNED_INT_5_9_9_9_REV = 0x8C3E - TEXTURE_SHARED_SIZE = 0x8C3F - SRGB = 0x8C40 - SRGB8 = 0x8C41 - SRGB_ALPHA = 0x8C42 - SRGB8_ALPHA8 = 0x8C43 - SLUMINANCE_ALPHA = 0x8C44 - SLUMINANCE8_ALPHA8 = 0x8C45 - SLUMINANCE = 0x8C46 - SLUMINANCE8 = 0x8C47 - COMPRESSED_SRGB = 0x8C48 - COMPRESSED_SRGB_ALPHA = 0x8C49 - COMPRESSED_SLUMINANCE = 0x8C4A - COMPRESSED_SLUMINANCE_ALPHA = 0x8C4B - TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH = 0x8C76 - TRANSFORM_FEEDBACK_BUFFER_MODE = 0x8C7F - MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS = 0x8C80 - TRANSFORM_FEEDBACK_VARYINGS = 0x8C83 - TRANSFORM_FEEDBACK_BUFFER_START = 0x8C84 - TRANSFORM_FEEDBACK_BUFFER_SIZE = 0x8C85 - PRIMITIVES_GENERATED = 0x8C87 - TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN = 0x8C88 - RASTERIZER_DISCARD = 0x8C89 - MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS = 0x8C8A - MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS = 0x8C8B - INTERLEAVED_ATTRIBS = 0x8C8C - SEPARATE_ATTRIBS = 0x8C8D - TRANSFORM_FEEDBACK_BUFFER = 0x8C8E - TRANSFORM_FEEDBACK_BUFFER_BINDING = 0x8C8F - POINT_SPRITE_COORD_ORIGIN = 0x8CA0 - LOWER_LEFT = 0x8CA1 - UPPER_LEFT = 0x8CA2 - STENCIL_BACK_REF = 0x8CA3 - STENCIL_BACK_VALUE_MASK = 0x8CA4 - STENCIL_BACK_WRITEMASK = 0x8CA5 - DRAW_FRAMEBUFFER_BINDING = 0x8CA6 - FRAMEBUFFER_BINDING = 0x8CA6 - RENDERBUFFER_BINDING = 0x8CA7 - READ_FRAMEBUFFER = 0x8CA8 - DRAW_FRAMEBUFFER = 0x8CA9 - READ_FRAMEBUFFER_BINDING = 0x8CAA - RENDERBUFFER_SAMPLES = 0x8CAB - DEPTH_COMPONENT32F = 0x8CAC - DEPTH32F_STENCIL8 = 0x8CAD - FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE = 0x8CD0 - FRAMEBUFFER_ATTACHMENT_OBJECT_NAME = 0x8CD1 - FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL = 0x8CD2 - FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE = 0x8CD3 - FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER = 0x8CD4 - FRAMEBUFFER_COMPLETE = 0x8CD5 - FRAMEBUFFER_INCOMPLETE_ATTACHMENT = 0x8CD6 - FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = 0x8CD7 - FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER = 0x8CDB - FRAMEBUFFER_INCOMPLETE_READ_BUFFER = 0x8CDC - FRAMEBUFFER_UNSUPPORTED = 0x8CDD - MAX_COLOR_ATTACHMENTS = 0x8CDF - COLOR_ATTACHMENT0 = 0x8CE0 - COLOR_ATTACHMENT1 = 0x8CE1 - COLOR_ATTACHMENT2 = 0x8CE2 - COLOR_ATTACHMENT3 = 0x8CE3 - COLOR_ATTACHMENT4 = 0x8CE4 - COLOR_ATTACHMENT5 = 0x8CE5 - COLOR_ATTACHMENT6 = 0x8CE6 - COLOR_ATTACHMENT7 = 0x8CE7 - COLOR_ATTACHMENT8 = 0x8CE8 - COLOR_ATTACHMENT9 = 0x8CE9 - COLOR_ATTACHMENT10 = 0x8CEA - COLOR_ATTACHMENT11 = 0x8CEB - COLOR_ATTACHMENT12 = 0x8CEC - COLOR_ATTACHMENT13 = 0x8CED - COLOR_ATTACHMENT14 = 0x8CEE - COLOR_ATTACHMENT15 = 0x8CEF - DEPTH_ATTACHMENT = 0x8D00 - STENCIL_ATTACHMENT = 0x8D20 - FRAMEBUFFER = 0x8D40 - RENDERBUFFER = 0x8D41 - RENDERBUFFER_WIDTH = 0x8D42 - RENDERBUFFER_HEIGHT = 0x8D43 - RENDERBUFFER_INTERNAL_FORMAT = 0x8D44 - STENCIL_INDEX1 = 0x8D46 - STENCIL_INDEX4 = 0x8D47 - STENCIL_INDEX8 = 0x8D48 - STENCIL_INDEX16 = 0x8D49 - RENDERBUFFER_RED_SIZE = 0x8D50 - RENDERBUFFER_GREEN_SIZE = 0x8D51 - RENDERBUFFER_BLUE_SIZE = 0x8D52 - RENDERBUFFER_ALPHA_SIZE = 0x8D53 - RENDERBUFFER_DEPTH_SIZE = 0x8D54 - RENDERBUFFER_STENCIL_SIZE = 0x8D55 - FRAMEBUFFER_INCOMPLETE_MULTISAMPLE = 0x8D56 - MAX_SAMPLES = 0x8D57 - RGB565 = 0x8D62 - PRIMITIVE_RESTART_FIXED_INDEX = 0x8D69 - ANY_SAMPLES_PASSED_CONSERVATIVE = 0x8D6A - MAX_ELEMENT_INDEX = 0x8D6B - RGBA32UI = 0x8D70 - RGB32UI = 0x8D71 - RGBA16UI = 0x8D76 - RGB16UI = 0x8D77 - RGBA8UI = 0x8D7C - RGB8UI = 0x8D7D - RGBA32I = 0x8D82 - RGB32I = 0x8D83 - RGBA16I = 0x8D88 - RGB16I = 0x8D89 - RGBA8I = 0x8D8E - RGB8I = 0x8D8F - RED_INTEGER = 0x8D94 - GREEN_INTEGER = 0x8D95 - BLUE_INTEGER = 0x8D96 - ALPHA_INTEGER = 0x8D97 - RGB_INTEGER = 0x8D98 - RGBA_INTEGER = 0x8D99 - BGR_INTEGER = 0x8D9A - BGRA_INTEGER = 0x8D9B - INT_2_10_10_10_REV = 0x8D9F - FRAMEBUFFER_ATTACHMENT_LAYERED = 0x8DA7 - FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS = 0x8DA8 - FLOAT_32_UNSIGNED_INT_24_8_REV = 0x8DAD - FRAMEBUFFER_SRGB = 0x8DB9 - COMPRESSED_RED_RGTC1 = 0x8DBB - COMPRESSED_SIGNED_RED_RGTC1 = 0x8DBC - COMPRESSED_RG_RGTC2 = 0x8DBD - COMPRESSED_SIGNED_RG_RGTC2 = 0x8DBE - SAMPLER_1D_ARRAY = 0x8DC0 - SAMPLER_2D_ARRAY = 0x8DC1 - SAMPLER_BUFFER = 0x8DC2 - SAMPLER_1D_ARRAY_SHADOW = 0x8DC3 - SAMPLER_2D_ARRAY_SHADOW = 0x8DC4 - SAMPLER_CUBE_SHADOW = 0x8DC5 - UNSIGNED_INT_VEC2 = 0x8DC6 - UNSIGNED_INT_VEC3 = 0x8DC7 - UNSIGNED_INT_VEC4 = 0x8DC8 - INT_SAMPLER_1D = 0x8DC9 - INT_SAMPLER_2D = 0x8DCA - INT_SAMPLER_3D = 0x8DCB - INT_SAMPLER_CUBE = 0x8DCC - INT_SAMPLER_2D_RECT = 0x8DCD - INT_SAMPLER_1D_ARRAY = 0x8DCE - INT_SAMPLER_2D_ARRAY = 0x8DCF - INT_SAMPLER_BUFFER = 0x8DD0 - UNSIGNED_INT_SAMPLER_1D = 0x8DD1 - UNSIGNED_INT_SAMPLER_2D = 0x8DD2 - UNSIGNED_INT_SAMPLER_3D = 0x8DD3 - UNSIGNED_INT_SAMPLER_CUBE = 0x8DD4 - UNSIGNED_INT_SAMPLER_2D_RECT = 0x8DD5 - UNSIGNED_INT_SAMPLER_1D_ARRAY = 0x8DD6 - UNSIGNED_INT_SAMPLER_2D_ARRAY = 0x8DD7 - UNSIGNED_INT_SAMPLER_BUFFER = 0x8DD8 - GEOMETRY_SHADER = 0x8DD9 - MAX_GEOMETRY_UNIFORM_COMPONENTS = 0x8DDF - MAX_GEOMETRY_OUTPUT_VERTICES = 0x8DE0 - MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS = 0x8DE1 - ACTIVE_SUBROUTINES = 0x8DE5 - ACTIVE_SUBROUTINE_UNIFORMS = 0x8DE6 - MAX_SUBROUTINES = 0x8DE7 - MAX_SUBROUTINE_UNIFORM_LOCATIONS = 0x8DE8 - LOW_FLOAT = 0x8DF0 - MEDIUM_FLOAT = 0x8DF1 - HIGH_FLOAT = 0x8DF2 - LOW_INT = 0x8DF3 - MEDIUM_INT = 0x8DF4 - HIGH_INT = 0x8DF5 - SHADER_BINARY_FORMATS = 0x8DF8 - NUM_SHADER_BINARY_FORMATS = 0x8DF9 - SHADER_COMPILER = 0x8DFA - MAX_VERTEX_UNIFORM_VECTORS = 0x8DFB - MAX_VARYING_VECTORS = 0x8DFC - MAX_FRAGMENT_UNIFORM_VECTORS = 0x8DFD - QUERY_WAIT = 0x8E13 - QUERY_NO_WAIT = 0x8E14 - QUERY_BY_REGION_WAIT = 0x8E15 - QUERY_BY_REGION_NO_WAIT = 0x8E16 - MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS = 0x8E1E - MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS = 0x8E1F - TRANSFORM_FEEDBACK = 0x8E22 - TRANSFORM_FEEDBACK_BUFFER_PAUSED = 0x8E23 - TRANSFORM_FEEDBACK_BUFFER_ACTIVE = 0x8E24 - TRANSFORM_FEEDBACK_BINDING = 0x8E25 - TIMESTAMP = 0x8E28 - TEXTURE_SWIZZLE_R = 0x8E42 - TEXTURE_SWIZZLE_G = 0x8E43 - TEXTURE_SWIZZLE_B = 0x8E44 - TEXTURE_SWIZZLE_A = 0x8E45 - TEXTURE_SWIZZLE_RGBA = 0x8E46 - ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS = 0x8E47 - ACTIVE_SUBROUTINE_MAX_LENGTH = 0x8E48 - ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH = 0x8E49 - NUM_COMPATIBLE_SUBROUTINES = 0x8E4A - COMPATIBLE_SUBROUTINES = 0x8E4B - QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION = 0x8E4C - FIRST_VERTEX_CONVENTION = 0x8E4D - LAST_VERTEX_CONVENTION = 0x8E4E - PROVOKING_VERTEX = 0x8E4F - SAMPLE_POSITION = 0x8E50 - SAMPLE_MASK = 0x8E51 - SAMPLE_MASK_VALUE = 0x8E52 - MAX_SAMPLE_MASK_WORDS = 0x8E59 - MAX_GEOMETRY_SHADER_INVOCATIONS = 0x8E5A - MIN_FRAGMENT_INTERPOLATION_OFFSET = 0x8E5B - MAX_FRAGMENT_INTERPOLATION_OFFSET = 0x8E5C - FRAGMENT_INTERPOLATION_OFFSET_BITS = 0x8E5D - MIN_PROGRAM_TEXTURE_GATHER_OFFSET = 0x8E5E - MAX_PROGRAM_TEXTURE_GATHER_OFFSET = 0x8E5F - MAX_TRANSFORM_FEEDBACK_BUFFERS = 0x8E70 - MAX_VERTEX_STREAMS = 0x8E71 - PATCH_VERTICES = 0x8E72 - PATCH_DEFAULT_INNER_LEVEL = 0x8E73 - PATCH_DEFAULT_OUTER_LEVEL = 0x8E74 - TESS_CONTROL_OUTPUT_VERTICES = 0x8E75 - TESS_GEN_MODE = 0x8E76 - TESS_GEN_SPACING = 0x8E77 - TESS_GEN_VERTEX_ORDER = 0x8E78 - TESS_GEN_POINT_MODE = 0x8E79 - ISOLINES = 0x8E7A - FRACTIONAL_ODD = 0x8E7B - FRACTIONAL_EVEN = 0x8E7C - MAX_PATCH_VERTICES = 0x8E7D - MAX_TESS_GEN_LEVEL = 0x8E7E - MAX_TESS_CONTROL_UNIFORM_COMPONENTS = 0x8E7F - MAX_TESS_EVALUATION_UNIFORM_COMPONENTS = 0x8E80 - MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS = 0x8E81 - MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS = 0x8E82 - MAX_TESS_CONTROL_OUTPUT_COMPONENTS = 0x8E83 - MAX_TESS_PATCH_COMPONENTS = 0x8E84 - MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS = 0x8E85 - MAX_TESS_EVALUATION_OUTPUT_COMPONENTS = 0x8E86 - TESS_EVALUATION_SHADER = 0x8E87 - TESS_CONTROL_SHADER = 0x8E88 - MAX_TESS_CONTROL_UNIFORM_BLOCKS = 0x8E89 - MAX_TESS_EVALUATION_UNIFORM_BLOCKS = 0x8E8A - COMPRESSED_RGBA_BPTC_UNORM = 0x8E8C - COMPRESSED_SRGB_ALPHA_BPTC_UNORM = 0x8E8D - COMPRESSED_RGB_BPTC_SIGNED_FLOAT = 0x8E8E - COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT = 0x8E8F - COPY_READ_BUFFER = 0x8F36 - COPY_WRITE_BUFFER = 0x8F37 - MAX_IMAGE_UNITS = 0x8F38 - MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS = 0x8F39 - MAX_COMBINED_SHADER_OUTPUT_RESOURCES = 0x8F39 - IMAGE_BINDING_NAME = 0x8F3A - IMAGE_BINDING_LEVEL = 0x8F3B - IMAGE_BINDING_LAYERED = 0x8F3C - IMAGE_BINDING_LAYER = 0x8F3D - IMAGE_BINDING_ACCESS = 0x8F3E - DRAW_INDIRECT_BUFFER = 0x8F3F - DRAW_INDIRECT_BUFFER_BINDING = 0x8F43 - DOUBLE_MAT2 = 0x8F46 - DOUBLE_MAT3 = 0x8F47 - DOUBLE_MAT4 = 0x8F48 - DOUBLE_MAT2x3 = 0x8F49 - DOUBLE_MAT2x4 = 0x8F4A - DOUBLE_MAT3x2 = 0x8F4B - DOUBLE_MAT3x4 = 0x8F4C - DOUBLE_MAT4x2 = 0x8F4D - DOUBLE_MAT4x3 = 0x8F4E - VERTEX_BINDING_BUFFER = 0x8F4F - R8_SNORM = 0x8F94 - RG8_SNORM = 0x8F95 - RGB8_SNORM = 0x8F96 - RGBA8_SNORM = 0x8F97 - R16_SNORM = 0x8F98 - RG16_SNORM = 0x8F99 - RGB16_SNORM = 0x8F9A - RGBA16_SNORM = 0x8F9B - SIGNED_NORMALIZED = 0x8F9C - PRIMITIVE_RESTART = 0x8F9D - PRIMITIVE_RESTART_INDEX = 0x8F9E - DOUBLE_VEC2 = 0x8FFC - DOUBLE_VEC3 = 0x8FFD - DOUBLE_VEC4 = 0x8FFE - TEXTURE_CUBE_MAP_ARRAY = 0x9009 - TEXTURE_BINDING_CUBE_MAP_ARRAY = 0x900A - PROXY_TEXTURE_CUBE_MAP_ARRAY = 0x900B - SAMPLER_CUBE_MAP_ARRAY = 0x900C - SAMPLER_CUBE_MAP_ARRAY_SHADOW = 0x900D - INT_SAMPLER_CUBE_MAP_ARRAY = 0x900E - UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY = 0x900F - IMAGE_1D = 0x904C - IMAGE_2D = 0x904D - IMAGE_3D = 0x904E - IMAGE_2D_RECT = 0x904F - IMAGE_CUBE = 0x9050 - IMAGE_BUFFER = 0x9051 - IMAGE_1D_ARRAY = 0x9052 - IMAGE_2D_ARRAY = 0x9053 - IMAGE_CUBE_MAP_ARRAY = 0x9054 - IMAGE_2D_MULTISAMPLE = 0x9055 - IMAGE_2D_MULTISAMPLE_ARRAY = 0x9056 - INT_IMAGE_1D = 0x9057 - INT_IMAGE_2D = 0x9058 - INT_IMAGE_3D = 0x9059 - INT_IMAGE_2D_RECT = 0x905A - INT_IMAGE_CUBE = 0x905B - INT_IMAGE_BUFFER = 0x905C - INT_IMAGE_1D_ARRAY = 0x905D - INT_IMAGE_2D_ARRAY = 0x905E - INT_IMAGE_CUBE_MAP_ARRAY = 0x905F - INT_IMAGE_2D_MULTISAMPLE = 0x9060 - INT_IMAGE_2D_MULTISAMPLE_ARRAY = 0x9061 - UNSIGNED_INT_IMAGE_1D = 0x9062 - UNSIGNED_INT_IMAGE_2D = 0x9063 - UNSIGNED_INT_IMAGE_3D = 0x9064 - UNSIGNED_INT_IMAGE_2D_RECT = 0x9065 - UNSIGNED_INT_IMAGE_CUBE = 0x9066 - UNSIGNED_INT_IMAGE_BUFFER = 0x9067 - UNSIGNED_INT_IMAGE_1D_ARRAY = 0x9068 - UNSIGNED_INT_IMAGE_2D_ARRAY = 0x9069 - UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY = 0x906A - UNSIGNED_INT_IMAGE_2D_MULTISAMPLE = 0x906B - UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY = 0x906C - MAX_IMAGE_SAMPLES = 0x906D - IMAGE_BINDING_FORMAT = 0x906E - RGB10_A2UI = 0x906F - MIN_MAP_BUFFER_ALIGNMENT = 0x90BC - IMAGE_FORMAT_COMPATIBILITY_TYPE = 0x90C7 - IMAGE_FORMAT_COMPATIBILITY_BY_SIZE = 0x90C8 - IMAGE_FORMAT_COMPATIBILITY_BY_CLASS = 0x90C9 - MAX_VERTEX_IMAGE_UNIFORMS = 0x90CA - MAX_TESS_CONTROL_IMAGE_UNIFORMS = 0x90CB - MAX_TESS_EVALUATION_IMAGE_UNIFORMS = 0x90CC - MAX_GEOMETRY_IMAGE_UNIFORMS = 0x90CD - MAX_FRAGMENT_IMAGE_UNIFORMS = 0x90CE - MAX_COMBINED_IMAGE_UNIFORMS = 0x90CF - SHADER_STORAGE_BUFFER = 0x90D2 - SHADER_STORAGE_BUFFER_BINDING = 0x90D3 - SHADER_STORAGE_BUFFER_START = 0x90D4 - SHADER_STORAGE_BUFFER_SIZE = 0x90D5 - MAX_VERTEX_SHADER_STORAGE_BLOCKS = 0x90D6 - MAX_GEOMETRY_SHADER_STORAGE_BLOCKS = 0x90D7 - MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS = 0x90D8 - MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS = 0x90D9 - MAX_FRAGMENT_SHADER_STORAGE_BLOCKS = 0x90DA - MAX_COMPUTE_SHADER_STORAGE_BLOCKS = 0x90DB - MAX_COMBINED_SHADER_STORAGE_BLOCKS = 0x90DC - MAX_SHADER_STORAGE_BUFFER_BINDINGS = 0x90DD - MAX_SHADER_STORAGE_BLOCK_SIZE = 0x90DE - SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT = 0x90DF - DEPTH_STENCIL_TEXTURE_MODE = 0x90EA - MAX_COMPUTE_WORK_GROUP_INVOCATIONS = 0x90EB - UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER = 0x90EC - ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER = 0x90ED - DISPATCH_INDIRECT_BUFFER = 0x90EE - DISPATCH_INDIRECT_BUFFER_BINDING = 0x90EF - TEXTURE_2D_MULTISAMPLE = 0x9100 - PROXY_TEXTURE_2D_MULTISAMPLE = 0x9101 - TEXTURE_2D_MULTISAMPLE_ARRAY = 0x9102 - PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY = 0x9103 - TEXTURE_BINDING_2D_MULTISAMPLE = 0x9104 - TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY = 0x9105 - TEXTURE_SAMPLES = 0x9106 - TEXTURE_FIXED_SAMPLE_LOCATIONS = 0x9107 - SAMPLER_2D_MULTISAMPLE = 0x9108 - INT_SAMPLER_2D_MULTISAMPLE = 0x9109 - UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE = 0x910A - SAMPLER_2D_MULTISAMPLE_ARRAY = 0x910B - INT_SAMPLER_2D_MULTISAMPLE_ARRAY = 0x910C - UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY = 0x910D - MAX_COLOR_TEXTURE_SAMPLES = 0x910E - MAX_DEPTH_TEXTURE_SAMPLES = 0x910F - MAX_INTEGER_SAMPLES = 0x9110 - MAX_SERVER_WAIT_TIMEOUT = 0x9111 - OBJECT_TYPE = 0x9112 - SYNC_CONDITION = 0x9113 - SYNC_STATUS = 0x9114 - SYNC_FLAGS = 0x9115 - SYNC_FENCE = 0x9116 - SYNC_GPU_COMMANDS_COMPLETE = 0x9117 - UNSIGNALED = 0x9118 - SIGNALED = 0x9119 - ALREADY_SIGNALED = 0x911A - TIMEOUT_EXPIRED = 0x911B - CONDITION_SATISFIED = 0x911C - WAIT_FAILED = 0x911D - BUFFER_ACCESS_FLAGS = 0x911F - BUFFER_MAP_LENGTH = 0x9120 - BUFFER_MAP_OFFSET = 0x9121 - MAX_VERTEX_OUTPUT_COMPONENTS = 0x9122 - MAX_GEOMETRY_INPUT_COMPONENTS = 0x9123 - MAX_GEOMETRY_OUTPUT_COMPONENTS = 0x9124 - MAX_FRAGMENT_INPUT_COMPONENTS = 0x9125 - CONTEXT_PROFILE_MASK = 0x9126 - UNPACK_COMPRESSED_BLOCK_WIDTH = 0x9127 - UNPACK_COMPRESSED_BLOCK_HEIGHT = 0x9128 - UNPACK_COMPRESSED_BLOCK_DEPTH = 0x9129 - UNPACK_COMPRESSED_BLOCK_SIZE = 0x912A - PACK_COMPRESSED_BLOCK_WIDTH = 0x912B - PACK_COMPRESSED_BLOCK_HEIGHT = 0x912C - PACK_COMPRESSED_BLOCK_DEPTH = 0x912D - PACK_COMPRESSED_BLOCK_SIZE = 0x912E - TEXTURE_IMMUTABLE_FORMAT = 0x912F - MAX_DEBUG_MESSAGE_LENGTH = 0x9143 - MAX_DEBUG_LOGGED_MESSAGES = 0x9144 - DEBUG_LOGGED_MESSAGES = 0x9145 - DEBUG_SEVERITY_HIGH = 0x9146 - DEBUG_SEVERITY_MEDIUM = 0x9147 - DEBUG_SEVERITY_LOW = 0x9148 - TEXTURE_BUFFER_OFFSET = 0x919D - TEXTURE_BUFFER_SIZE = 0x919E - TEXTURE_BUFFER_OFFSET_ALIGNMENT = 0x919F - COMPUTE_SHADER = 0x91B9 - MAX_COMPUTE_UNIFORM_BLOCKS = 0x91BB - MAX_COMPUTE_TEXTURE_IMAGE_UNITS = 0x91BC - MAX_COMPUTE_IMAGE_UNIFORMS = 0x91BD - MAX_COMPUTE_WORK_GROUP_COUNT = 0x91BE - MAX_COMPUTE_WORK_GROUP_SIZE = 0x91BF - COMPRESSED_R11_EAC = 0x9270 - COMPRESSED_SIGNED_R11_EAC = 0x9271 - COMPRESSED_RG11_EAC = 0x9272 - COMPRESSED_SIGNED_RG11_EAC = 0x9273 - COMPRESSED_RGB8_ETC2 = 0x9274 - COMPRESSED_SRGB8_ETC2 = 0x9275 - COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 = 0x9276 - COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 = 0x9277 - COMPRESSED_RGBA8_ETC2_EAC = 0x9278 - COMPRESSED_SRGB8_ALPHA8_ETC2_EAC = 0x9279 - ATOMIC_COUNTER_BUFFER = 0x92C0 - ATOMIC_COUNTER_BUFFER_BINDING = 0x92C1 - ATOMIC_COUNTER_BUFFER_START = 0x92C2 - ATOMIC_COUNTER_BUFFER_SIZE = 0x92C3 - ATOMIC_COUNTER_BUFFER_DATA_SIZE = 0x92C4 - ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS = 0x92C5 - ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES = 0x92C6 - ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER = 0x92C7 - ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER = 0x92C8 - ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER = 0x92C9 - ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER = 0x92CA - ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER = 0x92CB - MAX_VERTEX_ATOMIC_COUNTER_BUFFERS = 0x92CC - MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS = 0x92CD - MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS = 0x92CE - MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS = 0x92CF - MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS = 0x92D0 - MAX_COMBINED_ATOMIC_COUNTER_BUFFERS = 0x92D1 - MAX_VERTEX_ATOMIC_COUNTERS = 0x92D2 - MAX_TESS_CONTROL_ATOMIC_COUNTERS = 0x92D3 - MAX_TESS_EVALUATION_ATOMIC_COUNTERS = 0x92D4 - MAX_GEOMETRY_ATOMIC_COUNTERS = 0x92D5 - MAX_FRAGMENT_ATOMIC_COUNTERS = 0x92D6 - MAX_COMBINED_ATOMIC_COUNTERS = 0x92D7 - MAX_ATOMIC_COUNTER_BUFFER_SIZE = 0x92D8 - ACTIVE_ATOMIC_COUNTER_BUFFERS = 0x92D9 - UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX = 0x92DA - UNSIGNED_INT_ATOMIC_COUNTER = 0x92DB - MAX_ATOMIC_COUNTER_BUFFER_BINDINGS = 0x92DC - DEBUG_OUTPUT = 0x92E0 - UNIFORM = 0x92E1 - UNIFORM_BLOCK = 0x92E2 - PROGRAM_INPUT = 0x92E3 - PROGRAM_OUTPUT = 0x92E4 - BUFFER_VARIABLE = 0x92E5 - SHADER_STORAGE_BLOCK = 0x92E6 - IS_PER_PATCH = 0x92E7 - VERTEX_SUBROUTINE = 0x92E8 - TESS_CONTROL_SUBROUTINE = 0x92E9 - TESS_EVALUATION_SUBROUTINE = 0x92EA - GEOMETRY_SUBROUTINE = 0x92EB - FRAGMENT_SUBROUTINE = 0x92EC - COMPUTE_SUBROUTINE = 0x92ED - VERTEX_SUBROUTINE_UNIFORM = 0x92EE - TESS_CONTROL_SUBROUTINE_UNIFORM = 0x92EF - TESS_EVALUATION_SUBROUTINE_UNIFORM = 0x92F0 - GEOMETRY_SUBROUTINE_UNIFORM = 0x92F1 - FRAGMENT_SUBROUTINE_UNIFORM = 0x92F2 - COMPUTE_SUBROUTINE_UNIFORM = 0x92F3 - TRANSFORM_FEEDBACK_VARYING = 0x92F4 - ACTIVE_RESOURCES = 0x92F5 - MAX_NAME_LENGTH = 0x92F6 - MAX_NUM_ACTIVE_VARIABLES = 0x92F7 - MAX_NUM_COMPATIBLE_SUBROUTINES = 0x92F8 - NAME_LENGTH = 0x92F9 - TYPE = 0x92FA - ARRAY_SIZE = 0x92FB - OFFSET = 0x92FC - BLOCK_INDEX = 0x92FD - ARRAY_STRIDE = 0x92FE - MATRIX_STRIDE = 0x92FF - IS_ROW_MAJOR = 0x9300 - ATOMIC_COUNTER_BUFFER_INDEX = 0x9301 - BUFFER_BINDING = 0x9302 - BUFFER_DATA_SIZE = 0x9303 - NUM_ACTIVE_VARIABLES = 0x9304 - ACTIVE_VARIABLES = 0x9305 - REFERENCED_BY_VERTEX_SHADER = 0x9306 - REFERENCED_BY_TESS_CONTROL_SHADER = 0x9307 - REFERENCED_BY_TESS_EVALUATION_SHADER = 0x9308 - REFERENCED_BY_GEOMETRY_SHADER = 0x9309 - REFERENCED_BY_FRAGMENT_SHADER = 0x930A - REFERENCED_BY_COMPUTE_SHADER = 0x930B - TOP_LEVEL_ARRAY_SIZE = 0x930C - TOP_LEVEL_ARRAY_STRIDE = 0x930D - LOCATION = 0x930E - LOCATION_INDEX = 0x930F - FRAMEBUFFER_DEFAULT_WIDTH = 0x9310 - FRAMEBUFFER_DEFAULT_HEIGHT = 0x9311 - FRAMEBUFFER_DEFAULT_LAYERS = 0x9312 - FRAMEBUFFER_DEFAULT_SAMPLES = 0x9313 - FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS = 0x9314 - MAX_FRAMEBUFFER_WIDTH = 0x9315 - MAX_FRAMEBUFFER_HEIGHT = 0x9316 - MAX_FRAMEBUFFER_LAYERS = 0x9317 - MAX_FRAMEBUFFER_SAMPLES = 0x9318 - NUM_SAMPLE_COUNTS = 0x9380 -) - -// https://www.opengl.org/sdk/docs/man4/xhtml/glViewport.xml -func (gl *GL) Viewport(x, y, width, height int) { - C.gl4_3compat_glViewport(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// DepthRange specifies the mapping of depth values from normalized device -// coordinates to window coordinates. -// -// Parameter nearVal specifies the mapping of the near clipping plane to window -// coordinates (defaults to 0), while farVal specifies the mapping of the far -// clipping plane to window coordinates (defaults to 1). -// -// After clipping and division by w, depth coordinates range from -1 to 1, -// corresponding to the near and far clipping planes. DepthRange specifies a -// linear mapping of the normalized depth coordinates in this range to window -// depth coordinates. Regardless of the actual depth buffer implementation, -// window coordinate depth values are treated as though they range from 0 through 1 -// (like color components). Thus, the values accepted by DepthRange are both -// clamped to this range before they are accepted. -// -// The default setting of (0, 1) maps the near plane to 0 and the far plane to 1. -// With this mapping, the depth buffer range is fully utilized. -// -// It is not necessary that nearVal be less than farVal. Reverse mappings such as -// nearVal 1, and farVal 0 are acceptable. -// -// GL.INVALID_OPERATION is generated if DepthRange is executed between the -// execution of Begin and the corresponding execution of End. -func (gl *GL) DepthRange(nearVal, farVal float64) { - C.gl4_3compat_glDepthRange(gl.funcs, C.GLdouble(nearVal), C.GLdouble(farVal)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsEnabled.xml -func (gl *GL) IsEnabled(cap glbase.Enum) bool { - glresult := C.gl4_3compat_glIsEnabled(gl.funcs, C.GLenum(cap)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexLevelParameteriv.xml -func (gl *GL) GetTexLevelParameteriv(target glbase.Enum, level int, pname glbase.Enum, params []int32) { - C.gl4_3compat_glGetTexLevelParameteriv(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexLevelParameterfv.xml -func (gl *GL) GetTexLevelParameterfv(target glbase.Enum, level int, pname glbase.Enum, params []float32) { - C.gl4_3compat_glGetTexLevelParameterfv(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexParameteriv.xml -func (gl *GL) GetTexParameteriv(target, pname glbase.Enum, params []int32) { - C.gl4_3compat_glGetTexParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexParameterfv.xml -func (gl *GL) GetTexParameterfv(target, pname glbase.Enum, params []float32) { - C.gl4_3compat_glGetTexParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexImage.xml -func (gl *GL) GetTexImage(target glbase.Enum, level int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_3compat_glGetTexImage(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetIntegerv.xml -func (gl *GL) GetIntegerv(pname glbase.Enum, params []int32) { - C.gl4_3compat_glGetIntegerv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetFloatv.xml -func (gl *GL) GetFloatv(pname glbase.Enum, params []float32) { - C.gl4_3compat_glGetFloatv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetError.xml -func (gl *GL) GetError() glbase.Enum { - glresult := C.gl4_3compat_glGetError(gl.funcs) - return glbase.Enum(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetDoublev.xml -func (gl *GL) GetDoublev(pname glbase.Enum, params []float64) { - C.gl4_3compat_glGetDoublev(gl.funcs, C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetBooleanv.xml -func (gl *GL) GetBooleanv(pname glbase.Enum, params []bool) { - C.gl4_3compat_glGetBooleanv(gl.funcs, C.GLenum(pname), (*C.GLboolean)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glReadPixels.xml -func (gl *GL) ReadPixels(x, y, width, height int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_3compat_glReadPixels(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glReadBuffer.xml -func (gl *GL) ReadBuffer(mode glbase.Enum) { - C.gl4_3compat_glReadBuffer(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPixelStorei.xml -func (gl *GL) PixelStorei(pname glbase.Enum, param int32) { - C.gl4_3compat_glPixelStorei(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPixelStoref.xml -func (gl *GL) PixelStoref(pname glbase.Enum, param float32) { - C.gl4_3compat_glPixelStoref(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDepthFunc.xml -func (gl *GL) DepthFunc(glfunc glbase.Enum) { - C.gl4_3compat_glDepthFunc(gl.funcs, C.GLenum(glfunc)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glStencilOp.xml -func (gl *GL) StencilOp(fail, zfail, zpass glbase.Enum) { - C.gl4_3compat_glStencilOp(gl.funcs, C.GLenum(fail), C.GLenum(zfail), C.GLenum(zpass)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glStencilFunc.xml -func (gl *GL) StencilFunc(glfunc glbase.Enum, ref int32, mask uint32) { - C.gl4_3compat_glStencilFunc(gl.funcs, C.GLenum(glfunc), C.GLint(ref), C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLogicOp.xml -func (gl *GL) LogicOp(opcode glbase.Enum) { - C.gl4_3compat_glLogicOp(gl.funcs, C.GLenum(opcode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendFunc.xml -func (gl *GL) BlendFunc(sfactor, dfactor glbase.Enum) { - C.gl4_3compat_glBlendFunc(gl.funcs, C.GLenum(sfactor), C.GLenum(dfactor)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFlush.xml -func (gl *GL) Flush() { - C.gl4_3compat_glFlush(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFinish.xml -func (gl *GL) Finish() { - C.gl4_3compat_glFinish(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEnable.xml -func (gl *GL) Enable(cap glbase.Enum) { - C.gl4_3compat_glEnable(gl.funcs, C.GLenum(cap)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDisable.xml -func (gl *GL) Disable(cap glbase.Enum) { - C.gl4_3compat_glDisable(gl.funcs, C.GLenum(cap)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDepthMask.xml -func (gl *GL) DepthMask(flag bool) { - C.gl4_3compat_glDepthMask(gl.funcs, *(*C.GLboolean)(unsafe.Pointer(&flag))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorMask.xml -func (gl *GL) ColorMask(red, green, blue, alpha bool) { - C.gl4_3compat_glColorMask(gl.funcs, *(*C.GLboolean)(unsafe.Pointer(&red)), *(*C.GLboolean)(unsafe.Pointer(&green)), *(*C.GLboolean)(unsafe.Pointer(&blue)), *(*C.GLboolean)(unsafe.Pointer(&alpha))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glStencilMask.xml -func (gl *GL) StencilMask(mask uint32) { - C.gl4_3compat_glStencilMask(gl.funcs, C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearDepth.xml -func (gl *GL) ClearDepth(depth float64) { - C.gl4_3compat_glClearDepth(gl.funcs, C.GLdouble(depth)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearStencil.xml -func (gl *GL) ClearStencil(s int32) { - C.gl4_3compat_glClearStencil(gl.funcs, C.GLint(s)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearColor.xml -func (gl *GL) ClearColor(red, green, blue, alpha float32) { - C.gl4_3compat_glClearColor(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClear.xml -func (gl *GL) Clear(mask glbase.Bitfield) { - C.gl4_3compat_glClear(gl.funcs, C.GLbitfield(mask)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawBuffer.xml -func (gl *GL) DrawBuffer(mode glbase.Enum) { - C.gl4_3compat_glDrawBuffer(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexImage2D.xml -func (gl *GL) TexImage2D(target glbase.Enum, level int, internalFormat int32, width, height, border int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_3compat_glTexImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLint(border), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexImage1D.xml -func (gl *GL) TexImage1D(target glbase.Enum, level int, internalFormat int32, width, border int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_3compat_glTexImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(internalFormat), C.GLsizei(width), C.GLint(border), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexParameteriv.xml -func (gl *GL) TexParameteriv(target, pname glbase.Enum, params []int32) { - C.gl4_3compat_glTexParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexParameteri.xml -func (gl *GL) TexParameteri(target, pname glbase.Enum, param int32) { - C.gl4_3compat_glTexParameteri(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexParameterfv.xml -func (gl *GL) TexParameterfv(target, pname glbase.Enum, params []float32) { - C.gl4_3compat_glTexParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexParameterf.xml -func (gl *GL) TexParameterf(target, pname glbase.Enum, param float32) { - C.gl4_3compat_glTexParameterf(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glScissor.xml -func (gl *GL) Scissor(x, y, width, height int) { - C.gl4_3compat_glScissor(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPolygonMode.xml -func (gl *GL) PolygonMode(face, mode glbase.Enum) { - C.gl4_3compat_glPolygonMode(gl.funcs, C.GLenum(face), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPointSize.xml -func (gl *GL) PointSize(size float32) { - C.gl4_3compat_glPointSize(gl.funcs, C.GLfloat(size)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLineWidth.xml -func (gl *GL) LineWidth(width float32) { - C.gl4_3compat_glLineWidth(gl.funcs, C.GLfloat(width)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glHint.xml -func (gl *GL) Hint(target, mode glbase.Enum) { - C.gl4_3compat_glHint(gl.funcs, C.GLenum(target), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFrontFace.xml -func (gl *GL) FrontFace(mode glbase.Enum) { - C.gl4_3compat_glFrontFace(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCullFace.xml -func (gl *GL) CullFace(mode glbase.Enum) { - C.gl4_3compat_glCullFace(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIndexubv.xml -func (gl *GL) Indexubv(c []uint8) { - C.gl4_3compat_glIndexubv(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIndexub.xml -func (gl *GL) Indexub(c uint8) { - C.gl4_3compat_glIndexub(gl.funcs, C.GLubyte(c)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsTexture.xml -func (gl *GL) IsTexture(texture glbase.Texture) bool { - glresult := C.gl4_3compat_glIsTexture(gl.funcs, C.GLuint(texture)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// GenTextures returns n texture names in textures. There is no guarantee -// that the names form a contiguous set of integers; however, it is -// guaranteed that none of the returned names was in use immediately before -// the call to GenTextures. -// -// The generated textures have no dimensionality; they assume the -// dimensionality of the texture target to which they are first bound (see -// BindTexture). -// -// Texture names returned by a call to GenTextures are not returned by -// subsequent calls, unless they are first deleted with DeleteTextures. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// GenTextures is available in GL version 2.0 or greater. -func (gl *GL) GenTextures(n int) []glbase.Texture { - if n == 0 { - return nil - } - textures := make([]glbase.Texture, n) - C.gl4_3compat_glGenTextures(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0]))) - return textures -} - -// DeleteTextures deletes the textures objects whose names are stored -// in the textures slice. After a texture is deleted, it has no contents or -// dimensionality, and its name is free for reuse (for example by -// GenTextures). If a texture that is currently bound is deleted, the binding -// reverts to 0 (the default texture). -// -// DeleteTextures silently ignores 0's and names that do not correspond to -// existing textures. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// DeleteTextures is available in GL version 2.0 or greater. -func (gl *GL) DeleteTextures(textures []glbase.Texture) { - n := len(textures) - if n == 0 { - return - } - C.gl4_3compat_glDeleteTextures(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindTexture.xml -func (gl *GL) BindTexture(target glbase.Enum, texture glbase.Texture) { - C.gl4_3compat_glBindTexture(gl.funcs, C.GLenum(target), C.GLuint(texture)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexSubImage2D.xml -func (gl *GL) TexSubImage2D(target glbase.Enum, level, xoffset, yoffset, width, height int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_3compat_glTexSubImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexSubImage1D.xml -func (gl *GL) TexSubImage1D(target glbase.Enum, level, xoffset, width int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_3compat_glTexSubImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLsizei(width), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyTexSubImage2D.xml -func (gl *GL) CopyTexSubImage2D(target glbase.Enum, level, xoffset, yoffset, x, y, width, height int) { - C.gl4_3compat_glCopyTexSubImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyTexSubImage1D.xml -func (gl *GL) CopyTexSubImage1D(target glbase.Enum, level, xoffset, x, y, width int) { - C.gl4_3compat_glCopyTexSubImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(x), C.GLint(y), C.GLsizei(width)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyTexImage2D.xml -func (gl *GL) CopyTexImage2D(target glbase.Enum, level int, internalFormat glbase.Enum, x, y, width, height, border int) { - C.gl4_3compat_glCopyTexImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height), C.GLint(border)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyTexImage1D.xml -func (gl *GL) CopyTexImage1D(target glbase.Enum, level int, internalFormat glbase.Enum, x, y, width, border int) { - C.gl4_3compat_glCopyTexImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLint(border)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPolygonOffset.xml -func (gl *GL) PolygonOffset(factor, units float32) { - C.gl4_3compat_glPolygonOffset(gl.funcs, C.GLfloat(factor), C.GLfloat(units)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawElements.xml -func (gl *GL) DrawElements(mode glbase.Enum, count int, gltype glbase.Enum, indices interface{}) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl4_3compat_glDrawElements(gl.funcs, C.GLenum(mode), C.GLsizei(count), C.GLenum(gltype), indices_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawArrays.xml -func (gl *GL) DrawArrays(mode glbase.Enum, first, count int) { - C.gl4_3compat_glDrawArrays(gl.funcs, C.GLenum(mode), C.GLint(first), C.GLsizei(count)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyTexSubImage3D.xml -func (gl *GL) CopyTexSubImage3D(target glbase.Enum, level, xoffset, yoffset int, zoffset int32, x, y, width, height int) { - C.gl4_3compat_glCopyTexSubImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(zoffset), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexSubImage3D.xml -func (gl *GL) TexSubImage3D(target glbase.Enum, level, xoffset, yoffset int, zoffset int32, width, height int, depth int32, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_3compat_glTexSubImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(zoffset), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexImage3D.xml -func (gl *GL) TexImage3D(target glbase.Enum, level int, internalFormat int32, width, height int, depth int32, border int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_3compat_glTexImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLint(border), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawRangeElements.xml -func (gl *GL) DrawRangeElements(mode glbase.Enum, start, end uint32, count int, gltype glbase.Enum, indices interface{}) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl4_3compat_glDrawRangeElements(gl.funcs, C.GLenum(mode), C.GLuint(start), C.GLuint(end), C.GLsizei(count), C.GLenum(gltype), indices_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendEquation.xml -func (gl *GL) BlendEquation(mode glbase.Enum) { - C.gl4_3compat_glBlendEquation(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendColor.xml -func (gl *GL) BlendColor(red, green, blue, alpha float32) { - C.gl4_3compat_glBlendColor(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetCompressedTexImage.xml -func (gl *GL) GetCompressedTexImage(target glbase.Enum, level int, img interface{}) { - var img_ptr unsafe.Pointer - var img_v = reflect.ValueOf(img) - if img != nil && img_v.Kind() != reflect.Slice { - panic("parameter img must be a slice") - } - if img != nil { - img_ptr = unsafe.Pointer(img_v.Index(0).Addr().Pointer()) - } - C.gl4_3compat_glGetCompressedTexImage(gl.funcs, C.GLenum(target), C.GLint(level), img_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCompressedTexSubImage1D.xml -func (gl *GL) CompressedTexSubImage1D(target glbase.Enum, level, xoffset, width int, format glbase.Enum, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_3compat_glCompressedTexSubImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLsizei(width), C.GLenum(format), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCompressedTexSubImage2D.xml -func (gl *GL) CompressedTexSubImage2D(target glbase.Enum, level, xoffset, yoffset, width, height int, format glbase.Enum, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_3compat_glCompressedTexSubImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCompressedTexSubImage3D.xml -func (gl *GL) CompressedTexSubImage3D(target glbase.Enum, level, xoffset, yoffset int, zoffset int32, width, height int, depth int32, format glbase.Enum, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_3compat_glCompressedTexSubImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(zoffset), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLenum(format), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCompressedTexImage1D.xml -func (gl *GL) CompressedTexImage1D(target glbase.Enum, level int, internalFormat glbase.Enum, width, border, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_3compat_glCompressedTexImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLsizei(width), C.GLint(border), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCompressedTexImage2D.xml -func (gl *GL) CompressedTexImage2D(target glbase.Enum, level int, internalFormat glbase.Enum, width, height, border, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_3compat_glCompressedTexImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLint(border), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCompressedTexImage3D.xml -func (gl *GL) CompressedTexImage3D(target glbase.Enum, level int, internalFormat glbase.Enum, width, height int, depth int32, border, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_3compat_glCompressedTexImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLint(border), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSampleCoverage.xml -func (gl *GL) SampleCoverage(value float32, invert bool) { - C.gl4_3compat_glSampleCoverage(gl.funcs, C.GLfloat(value), *(*C.GLboolean)(unsafe.Pointer(&invert))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glActiveTexture.xml -func (gl *GL) ActiveTexture(texture glbase.Enum) { - C.gl4_3compat_glActiveTexture(gl.funcs, C.GLenum(texture)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPointParameteriv.xml -func (gl *GL) PointParameteriv(pname glbase.Enum, params []int32) { - C.gl4_3compat_glPointParameteriv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPointParameteri.xml -func (gl *GL) PointParameteri(pname glbase.Enum, param int32) { - C.gl4_3compat_glPointParameteri(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPointParameterfv.xml -func (gl *GL) PointParameterfv(pname glbase.Enum, params []float32) { - C.gl4_3compat_glPointParameterfv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPointParameterf.xml -func (gl *GL) PointParameterf(pname glbase.Enum, param float32) { - C.gl4_3compat_glPointParameterf(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiDrawArrays.xml -func (gl *GL) MultiDrawArrays(mode glbase.Enum, first, count []int, drawcount int32) { - C.gl4_3compat_glMultiDrawArrays(gl.funcs, C.GLenum(mode), (*C.GLint)(unsafe.Pointer(&first[0])), (*C.GLsizei)(unsafe.Pointer(&count[0])), C.GLsizei(drawcount)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendFuncSeparate.xml -func (gl *GL) BlendFuncSeparate(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha glbase.Enum) { - C.gl4_3compat_glBlendFuncSeparate(gl.funcs, C.GLenum(sfactorRGB), C.GLenum(dfactorRGB), C.GLenum(sfactorAlpha), C.GLenum(dfactorAlpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetBufferParameteriv.xml -func (gl *GL) GetBufferParameteriv(target, pname glbase.Enum, params []int32) { - C.gl4_3compat_glGetBufferParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUnmapBuffer.xml -func (gl *GL) UnmapBuffer(target glbase.Enum) bool { - glresult := C.gl4_3compat_glUnmapBuffer(gl.funcs, C.GLenum(target)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetBufferSubData.xml -func (gl *GL) GetBufferSubData(target glbase.Enum, offset, size int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_3compat_glGetBufferSubData(gl.funcs, C.GLenum(target), C.GLintptr(offset), C.GLsizeiptr(size), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBufferSubData.xml -func (gl *GL) BufferSubData(target glbase.Enum, offset, size int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_3compat_glBufferSubData(gl.funcs, C.GLenum(target), C.GLintptr(offset), C.GLsizeiptr(size), data_ptr) -} - -// BufferData creates a new data store for the buffer object currently -// bound to target. Any pre-existing data store is deleted. The new data -// store is created with the specified size in bytes and usage. If data is -// not nil, it must be a slice that is used to initialize the data store. -// In that case the size parameter is ignored and the store size will match -// the slice data size. -// -// In its initial state, the new data store is not mapped, it has a NULL -// mapped pointer, and its mapped access is GL.READ_WRITE. -// -// The target constant must be one of GL.ARRAY_BUFFER, GL.COPY_READ_BUFFER, -// GL.COPY_WRITE_BUFFER, GL.ELEMENT_ARRAY_BUFFER, GL.PIXEL_PACK_BUFFER, -// GL.PIXEL_UNPACK_BUFFER, GL.TEXTURE_BUFFER, GL.TRANSFORM_FEEDBACK_BUFFER, -// or GL.UNIFORM_BUFFER. -// -// The usage parameter is a hint to the GL implementation as to how a buffer -// object's data store will be accessed. This enables the GL implementation -// to make more intelligent decisions that may significantly impact buffer -// object performance. It does not, however, constrain the actual usage of -// the data store. usage can be broken down into two parts: first, the -// frequency of access (modification and usage), and second, the nature of -// that access. -// -// A usage frequency of STREAM and nature of DRAW is specified via the -// constant GL.STREAM_DRAW, for example. -// -// The usage frequency of access may be one of: -// -// STREAM -// The data store contents will be modified once and used at most a few times. -// -// STATIC -// The data store contents will be modified once and used many times. -// -// DYNAMIC -// The data store contents will be modified repeatedly and used many times. -// -// The usage nature of access may be one of: -// -// DRAW -// The data store contents are modified by the application, and used as -// the source for GL drawing and image specification commands. -// -// READ -// The data store contents are modified by reading data from the GL, -// and used to return that data when queried by the application. -// -// COPY -// The data store contents are modified by reading data from the GL, -// and used as the source for GL drawing and image specification -// commands. -// -// Clients must align data elements consistent with the requirements of the -// client platform, with an additional base-level requirement that an offset -// within a buffer to a datum comprising N bytes be a multiple of N. -// -// Error GL.INVALID_ENUM is generated if target is not one of the accepted -// buffer targets. GL.INVALID_ENUM is generated if usage is not -// GL.STREAM_DRAW, GL.STREAM_READ, GL.STREAM_COPY, GL.STATIC_DRAW, -// GL.STATIC_READ, GL.STATIC_COPY, GL.DYNAMIC_DRAW, GL.DYNAMIC_READ, or -// GL.DYNAMIC_COPY. GL.INVALID_VALUE is generated if size is negative. -// GL.INVALID_OPERATION is generated if the reserved buffer object name 0 is -// bound to target. GL.OUT_OF_MEMORY is generated if the GL is unable to -// create a data store with the specified size. -func (gl *GL) BufferData(target glbase.Enum, size int, data interface{}, usage glbase.Enum) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - if data != nil { - size = int(data_v.Type().Size()) * data_v.Len() - } - C.gl4_3compat_glBufferData(gl.funcs, C.GLenum(target), C.GLsizeiptr(size), data_ptr, C.GLenum(usage)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsBuffer.xml -func (gl *GL) IsBuffer(buffer glbase.Buffer) bool { - glresult := C.gl4_3compat_glIsBuffer(gl.funcs, C.GLuint(buffer)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// GenBuffers returns n buffer object names. There is no guarantee that -// the names form a contiguous set of integers; however, it is guaranteed -// that none of the returned names was in use immediately before the call to -// GenBuffers. -// -// Buffer object names returned by a call to GenBuffers are not returned by -// subsequent calls, unless they are first deleted with DeleteBuffers. -// -// No buffer objects are associated with the returned buffer object names -// until they are first bound by calling BindBuffer. -// -// Error GL.INVALID_VALUE is generated if n is negative. GL.INVALID_OPERATION -// is generated if GenBuffers is executed between the execution of Begin -// and the corresponding execution of End. -// -// GenBuffers is available in GL version 1.5 or greater. -func (gl *GL) GenBuffers(n int) []glbase.Buffer { - if n == 0 { - return nil - } - buffers := make([]glbase.Buffer, n) - C.gl4_3compat_glGenBuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&buffers[0]))) - return buffers -} - -// DeleteBuffers deletes the buffer objects whose names are stored in the -// buffers slice. -// -// After a buffer object is deleted, it has no contents, and its name is free -// for reuse (for example by GenBuffers). If a buffer object that is -// currently bound is deleted, the binding reverts to 0 (the absence of any -// buffer object, which reverts to client memory usage). -// -// DeleteBuffers silently ignores 0's and names that do not correspond to -// existing buffer objects. -// -// Error GL.INVALID_VALUE is generated if n is negative. GL.INVALID_OPERATION -// is generated if DeleteBuffers is executed between the execution of Begin -// and the corresponding execution of End. -// -// DeleteBuffers is available in GL version 1.5 or greater. -func (gl *GL) DeleteBuffers(buffers []glbase.Buffer) { - n := len(buffers) - if n == 0 { - return - } - C.gl4_3compat_glDeleteBuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&buffers[0]))) -} - -// BindBuffer creates or puts in use a named buffer object. -// Calling BindBuffer with target set to GL.ARRAY_BUFFER, -// GL.ELEMENT_ARRAY_BUFFER, GL.PIXEL_PACK_BUFFER or GL.PIXEL_UNPACK_BUFFER -// and buffer set to the name of the new buffer object binds the buffer -// object name to the target. When a buffer object is bound to a target, the -// previous binding for that target is automatically broken. -// -// Buffer object names are unsigned integers. The value zero is reserved, but -// there is no default buffer object for each buffer object target. Instead, -// buffer set to zero effectively unbinds any buffer object previously bound, -// and restores client memory usage for that buffer object target. Buffer -// object names and the corresponding buffer object contents are local to the -// shared display-list space (see XCreateContext) of the current GL rendering -// context; two rendering contexts share buffer object names only if they -// also share display lists. -// -// GenBuffers may be called to generate a set of new buffer object names. -// -// The state of a buffer object immediately after it is first bound is an -// unmapped zero-sized memory buffer with GL.READ_WRITE access and -// GL.STATIC_DRAW usage. -// -// While a non-zero buffer object name is bound, GL operations on the target -// to which it is bound affect the bound buffer object, and queries of the -// target to which it is bound return state from the bound buffer object. -// While buffer object name zero is bound, as in the initial state, attempts -// to modify or query state on the target to which it is bound generates an -// GL.INVALID_OPERATION error. -// -// When vertex array pointer state is changed, for example by a call to -// NormalPointer, the current buffer object binding (GL.ARRAY_BUFFER_BINDING) -// is copied into the corresponding client state for the vertex array type -// being changed, for example GL.NORMAL_ARRAY_BUFFER_BINDING. While a -// non-zero buffer object is bound to the GL.ARRAY_BUFFER target, the vertex -// array pointer parameter that is traditionally interpreted as a pointer to -// client-side memory is instead interpreted as an offset within the buffer -// object measured in basic machine units. -// -// While a non-zero buffer object is bound to the GL.ELEMENT_ARRAY_BUFFER -// target, the indices parameter of DrawElements, DrawRangeElements, or -// MultiDrawElements that is traditionally interpreted as a pointer to -// client-side memory is instead interpreted as an offset within the buffer -// object measured in basic machine units. -// -// While a non-zero buffer object is bound to the GL.PIXEL_PACK_BUFFER -// target, the following commands are affected: GetCompressedTexImage, -// GetConvolutionFilter, GetHistogram, GetMinmax, GetPixelMap, -// GetPolygonStipple, GetSeparableFilter, GetTexImage, and ReadPixels. The -// pointer parameter that is traditionally interpreted as a pointer to -// client-side memory where the pixels are to be packed is instead -// interpreted as an offset within the buffer object measured in basic -// machine units. -// -// While a non-zero buffer object is bound to the GL.PIXEL_UNPACK_BUFFER -// target, the following commands are affected: Bitmap, ColorSubTable, -// ColorTable, CompressedTexImage1D, CompressedTexImage2D, -// CompressedTexImage3D, CompressedTexSubImage1D, CompressedTexSubImage2D, -// CompressedTexSubImage3D, ConvolutionFilter1D, ConvolutionFilter2D, -// DrawPixels, PixelMap, PolygonStipple, SeparableFilter2D, TexImage1D, -// TexImage2D, TexImage3D, TexSubImage1D, TexSubImage2D, and TexSubImage3D. -// The pointer parameter that is traditionally interpreted as a pointer to -// client-side memory from which the pixels are to be unpacked is instead -// interpreted as an offset within the buffer object measured in basic -// machine units. -// -// A buffer object binding created with BindBuffer remains active until a -// different buffer object name is bound to the same target, or until the -// bound buffer object is deleted with DeleteBuffers. -// -// Once created, a named buffer object may be re-bound to any target as often -// as needed. However, the GL implementation may make choices about how to -// optimize the storage of a buffer object based on its initial binding -// target. -// -// Error GL.INVALID_ENUM is generated if target is not one of the allowable -// values. GL.INVALID_OPERATION is generated if BindBuffer is executed -// between the execution of Begin and the corresponding execution of End. -// -// BindBuffer is available in GL version 1.5 or greater. -func (gl *GL) BindBuffer(target glbase.Enum, buffer glbase.Buffer) { - C.gl4_3compat_glBindBuffer(gl.funcs, C.GLenum(target), C.GLuint(buffer)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetQueryObjectuiv.xml -func (gl *GL) GetQueryObjectuiv(id uint32, pname glbase.Enum, params []uint32) { - C.gl4_3compat_glGetQueryObjectuiv(gl.funcs, C.GLuint(id), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetQueryObjectiv.xml -func (gl *GL) GetQueryObjectiv(id uint32, pname glbase.Enum, params []int32) { - C.gl4_3compat_glGetQueryObjectiv(gl.funcs, C.GLuint(id), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetQueryiv.xml -func (gl *GL) GetQueryiv(target, pname glbase.Enum, params []int32) { - C.gl4_3compat_glGetQueryiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEndQuery.xml -func (gl *GL) EndQuery(target glbase.Enum) { - C.gl4_3compat_glEndQuery(gl.funcs, C.GLenum(target)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBeginQuery.xml -func (gl *GL) BeginQuery(target glbase.Enum, id uint32) { - C.gl4_3compat_glBeginQuery(gl.funcs, C.GLenum(target), C.GLuint(id)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsQuery.xml -func (gl *GL) IsQuery(id uint32) bool { - glresult := C.gl4_3compat_glIsQuery(gl.funcs, C.GLuint(id)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDeleteQueries.xml -func (gl *GL) DeleteQueries(n int, ids []uint32) { - C.gl4_3compat_glDeleteQueries(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&ids[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGenQueries.xml -func (gl *GL) GenQueries(n int, ids []uint32) { - C.gl4_3compat_glGenQueries(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&ids[0]))) -} - -// VertexAttribPointer specifies the location and data format of the array -// of generic vertex attributes at index to use when rendering. size -// specifies the number of components per attribute and must be 1, 2, 3, or -// 4. type specifies the data type of each component, and stride specifies -// the byte stride from one attribute to the next, allowing vertices and -// attributes to be packed into a single array or stored in separate arrays. -// normalized indicates whether the values stored in an integer format are -// to be mapped to the range [-1,1] (for signed values) or [0,1] -// (for unsigned values) when they are accessed and converted to floating -// point; otherwise, values will be converted to floats directly without -// normalization. offset is a byte offset into the buffer object's data -// store, which must be bound to the GL.ARRAY_BUFFER target with BindBuffer. -// -// The buffer object binding (GL.ARRAY_BUFFER_BINDING) is saved as -// generic vertex attribute array client-side state -// (GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING) for the provided index. -// -// To enable and disable a generic vertex attribute array, call -// EnableVertexAttribArray and DisableVertexAttribArray with index. If -// enabled, the generic vertex attribute array is used when DrawArrays or -// DrawElements is called. Each generic vertex attribute array is initially -// disabled. -// -// VertexAttribPointer is typically implemented on the client side. -// -// Error GL.INVALID_ENUM is generated if type is not an accepted value. -// GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. GL.INVALID_VALUE is generated if size is not 1, 2, -// 3, or 4. GL.INVALID_VALUE is generated if stride is negative. -func (gl *GL) VertexAttribPointer(index glbase.Attrib, size int, gltype glbase.Enum, normalized bool, stride int, offset uintptr) { - offset_ptr := unsafe.Pointer(offset) - C.gl4_3compat_glVertexAttribPointer(gl.funcs, C.GLuint(index), C.GLint(size), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), C.GLsizei(stride), offset_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glValidateProgram.xml -func (gl *GL) ValidateProgram(program glbase.Program) { - C.gl4_3compat_glValidateProgram(gl.funcs, C.GLuint(program)) -} - -// UniformMatrix4fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix4fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix4fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(4*4) != 0 { - panic("invalid value length for UniformMatrix4fv") - } - count := len(value) / (4 * 4) - C.gl4_3compat_glUniformMatrix4fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix3fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix3fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix3fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(3*3) != 0 { - panic("invalid value length for UniformMatrix3fv") - } - count := len(value) / (3 * 3) - C.gl4_3compat_glUniformMatrix3fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix2fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix2fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix2fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(2*2) != 0 { - panic("invalid value length for UniformMatrix2fv") - } - count := len(value) / (2 * 2) - C.gl4_3compat_glUniformMatrix2fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform4iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform4iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - if len(value)%4 != 0 { - panic("invalid value length for Uniform4iv") - } - count := len(value) / 4 - C.gl4_3compat_glUniform4iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// Uniform3iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform3iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - if len(value)%3 != 0 { - panic("invalid value length for Uniform3iv") - } - count := len(value) / 3 - C.gl4_3compat_glUniform3iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// Uniform2iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform2iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - if len(value)%2 != 0 { - panic("invalid value length for Uniform2iv") - } - count := len(value) / 2 - C.gl4_3compat_glUniform2iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// Uniform1iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform1iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - count := len(value) - C.gl4_3compat_glUniform1iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// Uniform4fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform4fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - if len(value)%4 != 0 { - panic("invalid value length for Uniform4fv") - } - count := len(value) / 4 - C.gl4_3compat_glUniform4fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform3fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform3fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - if len(value)%3 != 0 { - panic("invalid value length for Uniform3fv") - } - count := len(value) / 3 - C.gl4_3compat_glUniform3fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform2fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform2fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - if len(value)%2 != 0 { - panic("invalid value length for Uniform2fv") - } - count := len(value) / 2 - C.gl4_3compat_glUniform2fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform1fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform1fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - count := len(value) - C.gl4_3compat_glUniform1fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform4i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform4i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4i(location glbase.Uniform, v0, v1, v2, v3 int32) { - C.gl4_3compat_glUniform4i(gl.funcs, C.GLint(location), C.GLint(v0), C.GLint(v1), C.GLint(v2), C.GLint(v3)) -} - -// Uniform3i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform3i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3i(location glbase.Uniform, v0, v1, v2 int32) { - C.gl4_3compat_glUniform3i(gl.funcs, C.GLint(location), C.GLint(v0), C.GLint(v1), C.GLint(v2)) -} - -// Uniform2i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform2i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2i(location glbase.Uniform, v0, v1 int32) { - C.gl4_3compat_glUniform2i(gl.funcs, C.GLint(location), C.GLint(v0), C.GLint(v1)) -} - -// Uniform1i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform1i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1i(location glbase.Uniform, v0 int32) { - C.gl4_3compat_glUniform1i(gl.funcs, C.GLint(location), C.GLint(v0)) -} - -// Uniform4f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform4f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4f(location glbase.Uniform, v0, v1, v2, v3 float32) { - C.gl4_3compat_glUniform4f(gl.funcs, C.GLint(location), C.GLfloat(v0), C.GLfloat(v1), C.GLfloat(v2), C.GLfloat(v3)) -} - -// Uniform3f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform3f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3f(location glbase.Uniform, v0, v1, v2 float32) { - C.gl4_3compat_glUniform3f(gl.funcs, C.GLint(location), C.GLfloat(v0), C.GLfloat(v1), C.GLfloat(v2)) -} - -// Uniform2f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform2f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2f(location glbase.Uniform, v0, v1 float32) { - C.gl4_3compat_glUniform2f(gl.funcs, C.GLint(location), C.GLfloat(v0), C.GLfloat(v1)) -} - -// Uniform1f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform1f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1f(location glbase.Uniform, v0 float32) { - C.gl4_3compat_glUniform1f(gl.funcs, C.GLint(location), C.GLfloat(v0)) -} - -// UseProgram installs the program object specified by program as part of -// current rendering state. One or more executables are created in a program -// object by successfully attaching shader objects to it with AttachShader, -// successfully compiling the shader objects with CompileShader, and -// successfully linking the program object with LinkProgram. -// -// A program object will contain an executable that will run on the vertex -// processor if it contains one or more shader objects of type -// GL.VERTEX_SHADER that have been successfully compiled and linked. -// Similarly, a program object will contain an executable that will run on -// the fragment processor if it contains one or more shader objects of type -// GL.FRAGMENT_SHADER that have been successfully compiled and linked. -// -// Successfully installing an executable on a programmable processor will -// cause the corresponding fixed functionality of OpenGL to be disabled. -// Specifically, if an executable is installed on the vertex processor, the -// OpenGL fixed functionality will be disabled as follows. -// -// - The modelview matrix is not applied to vertex coordinates. -// -// - The projection matrix is not applied to vertex coordinates. -// -// - The texture matrices are not applied to texture coordinates. -// -// - Normals are not transformed to eye coordinates. -// -// - Normals are not rescaled or normalized. -// -// - Normalization of GL.AUTO_NORMAL evaluated normals is not performed. -// -// - Texture coordinates are not generated automatically. -// -// - Per-vertex lighting is not performed. -// -// - Color material computations are not performed. -// -// - Color index lighting is not performed. -// -// - This list also applies when setting the current raster position. -// -// The executable that is installed on the vertex processor is expected to -// implement any or all of the desired functionality from the preceding list. -// Similarly, if an executable is installed on the fragment processor, the -// OpenGL fixed functionality will be disabled as follows. -// -// - Texture environment and texture functions are not applied. -// -// - Texture application is not applied. -// -// - Color sum is not applied. -// -// - Fog is not applied. -// -// Again, the fragment shader that is installed is expected to implement any -// or all of the desired functionality from the preceding list. -// -// While a program object is in use, applications are free to modify attached -// shader objects, compile attached shader objects, attach additional shader -// objects, and detach or delete shader objects. None of these operations -// will affect the executables that are part of the current state. However, -// relinking the program object that is currently in use will install the -// program object as part of the current rendering state if the link -// operation was successful (see LinkProgram). If the program object -// currently in use is relinked unsuccessfully, its link status will be set -// to GL.FALSE, but the executables and associated state will remain part of -// the current state until a subsequent call to UseProgram removes it from -// use. After it is removed from use, it cannot be made part of current state -// until it has been successfully relinked. -// -// If program contains shader objects of type GL.VERTEX_SHADER but it does -// not contain shader objects of type GL.FRAGMENT_SHADER, an executable will -// be installed on the vertex processor, but fixed functionality will be used -// for fragment processing. Similarly, if program contains shader objects of -// type GL.FRAGMENT_SHADER but it does not contain shader objects of type -// GL.VERTEX_SHADER, an executable will be installed on the fragment -// processor, but fixed functionality will be used for vertex processing. If -// program is 0, the programmable processors will be disabled, and fixed -// functionality will be used for both vertex and fragment processing. -// -// While a program object is in use, the state that controls the disabled -// fixed functionality may also be updated using the normal OpenGL calls. -// -// Like display lists and texture objects, the name space for program objects -// may be shared across a set of contexts, as long as the server sides of the -// contexts share the same address space. If the name space is shared across -// contexts, any attached objects and the data associated with those attached -// objects are shared as well. -// -// Applications are responsible for providing the synchronization across API -// calls when objects are accessed from different execution threads. -// -// Error GL.INVALID_VALUE is generated if program is neither 0 nor a value -// generated by OpenGL. GL.INVALID_OPERATION is generated if program is not -// a program object. GL.INVALID_OPERATION is generated if program could not -// be made part of current state. GL.INVALID_OPERATION is generated if -// UseProgram is executed between the execution of Begin and the -// corresponding execution of End. -// -// UseProgram is available in GL version 2.0 or greater. -func (gl *GL) UseProgram(program glbase.Program) { - C.gl4_3compat_glUseProgram(gl.funcs, C.GLuint(program)) -} - -// ShaderSource sets the source code in shader to the provided source code. Any source -// code previously stored in the shader object is completely replaced. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader is not a shader -// object. GL.INVALID_VALUE is generated if count is less than 0. -// GL.INVALID_OPERATION is generated if ShaderSource is executed between the -// execution of Begin and the corresponding execution of End. -// -// ShaderSource is available in GL version 2.0 or greater. -func (gl *GL) ShaderSource(shader glbase.Shader, source ...string) { - count := len(source) - length := make([]int32, count) - source_c := make([]unsafe.Pointer, count) - for i, src := range source { - length[i] = int32(len(src)) - if len(src) > 0 { - source_c[i] = *(*unsafe.Pointer)(unsafe.Pointer(&src)) - } else { - source_c[i] = unsafe.Pointer(uintptr(0)) - } - } - C.gl4_3compat_glShaderSource(gl.funcs, C.GLuint(shader), C.GLsizei(count), (**C.GLchar)(unsafe.Pointer(&source_c[0])), (*C.GLint)(unsafe.Pointer(&length[0]))) -} - -// LinkProgram links the program object specified by program. If any shader -// objects of type GL.VERTEX_SHADER are attached to program, they will be -// used to create an executable that will run on the programmable vertex -// processor. If any shader objects of type GL.FRAGMENT_SHADER are attached -// to program, they will be used to create an executable that will run on the -// programmable fragment processor. -// -// The status of the link operation will be stored as part of the program -// object's state. This value will be set to GL.TRUE if the program object -// was linked without errors and is ready for use, and GL.FALSE otherwise. It -// can be queried by calling GetProgramiv with arguments program and -// GL.LINK_STATUS. -// -// As a result of a successful link operation, all active user-defined -// uniform variables belonging to program will be initialized to 0, and each -// of the program object's active uniform variables will be assigned a -// location that can be queried by calling GetUniformLocation. Also, any -// active user-defined attribute variables that have not been bound to a -// generic vertex attribute index will be bound to one at this time. -// -// Linking of a program object can fail for a number of reasons as specified -// in the OpenGL Shading Language Specification. The following lists some of -// the conditions that will cause a link error. -// -// - The number of active attribute variables supported by the -// implementation has been exceeded. -// -// - The storage limit for uniform variables has been exceeded. -// -// - The number of active uniform variables supported by the implementation -// has been exceeded. -// -// - The main function is missing for the vertex shader or the fragment -// shader. -// -// - A varying variable actually used in the fragment shader is not -// declared in the same way (or is not declared at all) in the vertex -// shader. -// -// - A reference to a function or variable name is unresolved. -// -// - A shared global is declared with two different types or two different -// initial values. -// -// - One or more of the attached shader objects has not been successfully -// compiled. -// -// - Binding a generic attribute matrix caused some rows of the matrix to -// fall outside the allowed maximum of GL.MAX_VERTEX_ATTRIBS. -// -// - Not enough contiguous vertex attribute slots could be found to bind -// attribute matrices. -// -// When a program object has been successfully linked, the program object can -// be made part of current state by calling UseProgram. Whether or not the -// link operation was successful, the program object's information log will -// be overwritten. The information log can be retrieved by calling -// GetProgramInfoLog. -// -// LinkProgram will also install the generated executables as part of the -// current rendering state if the link operation was successful and the -// specified program object is already currently in use as a result of a -// previous call to UseProgram. If the program object currently in use is -// relinked unsuccessfully, its link status will be set to GL.FALSE , but the -// executables and associated state will remain part of the current state -// until a subsequent call to UseProgram removes it from use. After it is -// removed from use, it cannot be made part of current state until it has -// been successfully relinked. -// -// If program contains shader objects of type GL.VERTEX_SHADER but does not -// contain shader objects of type GL.FRAGMENT_SHADER, the vertex shader will -// be linked against the implicit interface for fixed functionality fragment -// processing. Similarly, if program contains shader objects of type -// GL.FRAGMENT_SHADER but it does not contain shader objects of type -// GL.VERTEX_SHADER, the fragment shader will be linked against the implicit -// interface for fixed functionality vertex processing. -// -// The program object's information log is updated and the program is -// generated at the time of the link operation. After the link operation, -// applications are free to modify attached shader objects, compile attached -// shader objects, detach shader objects, delete shader objects, and attach -// additional shader objects. None of these operations affects the -// information log or the program that is part of the program object. -// -// If the link operation is unsuccessful, any information about a previous -// link operation on program is lost (a failed link does not restore the -// old state of program). Certain information can still be retrieved -// from program even after an unsuccessful link operation. See for instance -// GetActiveAttrib and GetActiveUniform. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program -// object. GL.INVALID_OPERATION is generated if LinkProgram is executed -// between the execution of Begin and the corresponding execution of End. -// -// LinkProgram is available in GL version 2.0 or greater. -func (gl *GL) LinkProgram(program glbase.Program) { - C.gl4_3compat_glLinkProgram(gl.funcs, C.GLuint(program)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsShader.xml -func (gl *GL) IsShader(shader glbase.Shader) bool { - glresult := C.gl4_3compat_glIsShader(gl.funcs, C.GLuint(shader)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsProgram.xml -func (gl *GL) IsProgram(program glbase.Program) bool { - glresult := C.gl4_3compat_glIsProgram(gl.funcs, C.GLuint(program)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// GetVertexAttribiv returns in params the value of a generic vertex attribute -// parameter. The generic vertex attribute to be queried is specified by -// index, and the parameter to be queried is specified by pname. -// -// The accepted parameter names are as follows: -// -// GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING -// params returns a single value, the name of the buffer object -// currently bound to the binding point corresponding to generic vertex -// attribute array index. If no buffer object is bound, 0 is returned. -// The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_ENABLED -// params returns a single value that is non-zero (true) if the vertex -// attribute array for index is enabled and 0 (false) if it is -// disabled. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_SIZE -// params returns a single value, the size of the vertex attribute -// array for index. The size is the number of values for each element -// of the vertex attribute array, and it will be 1, 2, 3, or 4. The -// initial value is 4. -// -// GL.VERTEX_ATTRIB_ARRAY_STRIDE -// params returns a single value, the array stride for (number of bytes -// between successive elements in) the vertex attribute array for -// index. A value of 0 indicates that the array elements are stored -// sequentially in memory. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_TYPE -// params returns a single value, a symbolic constant indicating the -// array type for the vertex attribute array for index. Possible values -// are GL.BYTE, GL.UNSIGNED_BYTE, GL.SHORT, GL.UNSIGNED_SHORT, GL.INT, -// GL.UNSIGNED_INT, GL.FLOAT, and GL.DOUBLE. The initial value is -// GL.FLOAT. -// -// GL.VERTEX_ATTRIB_ARRAY_NORMALIZED -// params returns a single value that is non-zero (true) if fixed-point -// data types for the vertex attribute array indicated by index are -// normalized when they are converted to floating point, and 0 (false) -// otherwise. The initial value is 0. -// -// GL.CURRENT_VERTEX_ATTRIB -// params returns four values that represent the current value for the -// generic vertex attribute specified by index. Generic vertex -// attribute 0 is unique in that it has no current state, so an error -// will be generated if index is 0. The initial value for all other -// generic vertex attributes is (0,0,0,1). -// -// All of the parameters except GL.CURRENT_VERTEX_ATTRIB represent -// client-side state. -// -// Error GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. GL.INVALID_ENUM is generated if pname is not an -// accepted value. GL.INVALID_OPERATION is generated if index is 0 and pname -// is GL.CURRENT_VERTEX_ATTRIB. -// -// GetVertexAttribiv is available in GL version 2.0 or greater. -func (gl *GL) GetVertexAttribiv(index glbase.Attrib, pname glbase.Enum, params []int32) { - var params_c [4]int32 - C.gl4_3compat_glGetVertexAttribiv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetVertexAttribfv returns in params the value of a generic vertex attribute -// parameter. The generic vertex attribute to be queried is specified by -// index, and the parameter to be queried is specified by pname. -// -// The accepted parameter names are as follows: -// -// GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING -// params returns a single value, the name of the buffer object -// currently bound to the binding point corresponding to generic vertex -// attribute array index. If no buffer object is bound, 0 is returned. -// The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_ENABLED -// params returns a single value that is non-zero (true) if the vertex -// attribute array for index is enabled and 0 (false) if it is -// disabled. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_SIZE -// params returns a single value, the size of the vertex attribute -// array for index. The size is the number of values for each element -// of the vertex attribute array, and it will be 1, 2, 3, or 4. The -// initial value is 4. -// -// GL.VERTEX_ATTRIB_ARRAY_STRIDE -// params returns a single value, the array stride for (number of bytes -// between successive elements in) the vertex attribute array for -// index. A value of 0 indicates that the array elements are stored -// sequentially in memory. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_TYPE -// params returns a single value, a symbolic constant indicating the -// array type for the vertex attribute array for index. Possible values -// are GL.BYTE, GL.UNSIGNED_BYTE, GL.SHORT, GL.UNSIGNED_SHORT, GL.INT, -// GL.UNSIGNED_INT, GL.FLOAT, and GL.DOUBLE. The initial value is -// GL.FLOAT. -// -// GL.VERTEX_ATTRIB_ARRAY_NORMALIZED -// params returns a single value that is non-zero (true) if fixed-point -// data types for the vertex attribute array indicated by index are -// normalized when they are converted to floating point, and 0 (false) -// otherwise. The initial value is 0. -// -// GL.CURRENT_VERTEX_ATTRIB -// params returns four values that represent the current value for the -// generic vertex attribute specified by index. Generic vertex -// attribute 0 is unique in that it has no current state, so an error -// will be generated if index is 0. The initial value for all other -// generic vertex attributes is (0,0,0,1). -// -// All of the parameters except GL.CURRENT_VERTEX_ATTRIB represent -// client-side state. -// -// Error GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. GL.INVALID_ENUM is generated if pname is not an -// accepted value. GL.INVALID_OPERATION is generated if index is 0 and pname -// is GL.CURRENT_VERTEX_ATTRIB. -// -// GetVertexAttribfv is available in GL version 2.0 or greater. -func (gl *GL) GetVertexAttribfv(index glbase.Attrib, pname glbase.Enum, params []float32) { - var params_c [4]float32 - C.gl4_3compat_glGetVertexAttribfv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetVertexAttribdv returns in params the value of a generic vertex attribute -// parameter. The generic vertex attribute to be queried is specified by -// index, and the parameter to be queried is specified by pname. -// -// The accepted parameter names are as follows: -// -// GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING -// params returns a single value, the name of the buffer object -// currently bound to the binding point corresponding to generic vertex -// attribute array index. If no buffer object is bound, 0 is returned. -// The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_ENABLED -// params returns a single value that is non-zero (true) if the vertex -// attribute array for index is enabled and 0 (false) if it is -// disabled. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_SIZE -// params returns a single value, the size of the vertex attribute -// array for index. The size is the number of values for each element -// of the vertex attribute array, and it will be 1, 2, 3, or 4. The -// initial value is 4. -// -// GL.VERTEX_ATTRIB_ARRAY_STRIDE -// params returns a single value, the array stride for (number of bytes -// between successive elements in) the vertex attribute array for -// index. A value of 0 indicates that the array elements are stored -// sequentially in memory. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_TYPE -// params returns a single value, a symbolic constant indicating the -// array type for the vertex attribute array for index. Possible values -// are GL.BYTE, GL.UNSIGNED_BYTE, GL.SHORT, GL.UNSIGNED_SHORT, GL.INT, -// GL.UNSIGNED_INT, GL.FLOAT, and GL.DOUBLE. The initial value is -// GL.FLOAT. -// -// GL.VERTEX_ATTRIB_ARRAY_NORMALIZED -// params returns a single value that is non-zero (true) if fixed-point -// data types for the vertex attribute array indicated by index are -// normalized when they are converted to floating point, and 0 (false) -// otherwise. The initial value is 0. -// -// GL.CURRENT_VERTEX_ATTRIB -// params returns four values that represent the current value for the -// generic vertex attribute specified by index. Generic vertex -// attribute 0 is unique in that it has no current state, so an error -// will be generated if index is 0. The initial value for all other -// generic vertex attributes is (0,0,0,1). -// -// All of the parameters except GL.CURRENT_VERTEX_ATTRIB represent -// client-side state. -// -// Error GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. GL.INVALID_ENUM is generated if pname is not an -// accepted value. GL.INVALID_OPERATION is generated if index is 0 and pname -// is GL.CURRENT_VERTEX_ATTRIB. -// -// GetVertexAttribdv is available in GL version 2.0 or greater. -func (gl *GL) GetVertexAttribdv(index glbase.Attrib, pname glbase.Enum, params []float64) { - var params_c [4]float64 - C.gl4_3compat_glGetVertexAttribdv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetUniformiv returns in params the value of the specified uniform -// variable. The type of the uniform variable specified by location -// determines the number of values returned. If the uniform variable is -// defined in the shader as a boolean, int, or float, a single value will be -// returned. If it is defined as a vec2, ivec2, or bvec2, two values will be -// returned. If it is defined as a vec3, ivec3, or bvec3, three values will -// be returned, and so on. To query values stored in uniform variables -// declared as arrays, call GetUniformiv for each element of the array. To -// query values stored in uniform variables declared as structures, call -// GetUniformiv for each field in the structure. The values for uniform -// variables declared as a matrix will be returned in column major order. -// -// The locations assigned to uniform variables are not known until the -// program object is linked. After linking has occurred, the command -// GetUniformLocation can be used to obtain the location of a uniform -// variable. This location value can then be passed to GetUniformiv in order -// to query the current value of the uniform variable. After a program object -// has been linked successfully, the index values for uniform variables -// remain fixed until the next link command occurs. The uniform variable -// values can only be queried after a link if the link was successful. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program -// object. GL.INVALID_OPERATION is generated if program has not been -// successfully linked. GL.INVALID_OPERATION is generated if location does -// not correspond to a valid uniform variable location for the specified -// program object. GL.INVALID_OPERATION is generated if GetUniformiv is -// executed between the execution of Begin and the corresponding execution of -// End. -// -// GetUniformiv is available in GL version 2.0 or greater. -func (gl *GL) GetUniformiv(program glbase.Program, location glbase.Uniform, params []int32) { - var params_c [4]int32 - C.gl4_3compat_glGetUniformiv(gl.funcs, C.GLuint(program), C.GLint(location), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetUniformfv returns in params the value of the specified uniform -// variable. The type of the uniform variable specified by location -// determines the number of values returned. If the uniform variable is -// defined in the shader as a boolean, int, or float, a single value will be -// returned. If it is defined as a vec2, ivec2, or bvec2, two values will be -// returned. If it is defined as a vec3, ivec3, or bvec3, three values will -// be returned, and so on. To query values stored in uniform variables -// declared as arrays, call GetUniformfv for each element of the array. To -// query values stored in uniform variables declared as structures, call -// GetUniformfv for each field in the structure. The values for uniform -// variables declared as a matrix will be returned in column major order. -// -// The locations assigned to uniform variables are not known until the -// program object is linked. After linking has occurred, the command -// GetUniformLocation can be used to obtain the location of a uniform -// variable. This location value can then be passed to GetUniformfv in order -// to query the current value of the uniform variable. After a program object -// has been linked successfully, the index values for uniform variables -// remain fixed until the next link command occurs. The uniform variable -// values can only be queried after a link if the link was successful. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program -// object. GL.INVALID_OPERATION is generated if program has not been -// successfully linked. GL.INVALID_OPERATION is generated if location does -// not correspond to a valid uniform variable location for the specified -// program object. GL.INVALID_OPERATION is generated if GetUniformfv is -// executed between the execution of Begin and the corresponding execution of -// End. -// -// GetUniformfv is available in GL version 2.0 or greater. -func (gl *GL) GetUniformfv(program glbase.Program, location glbase.Uniform, params []float32) { - var params_c [4]float32 - C.gl4_3compat_glGetUniformfv(gl.funcs, C.GLuint(program), C.GLint(location), (*C.GLfloat)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetUniformLocation returns an integer that represents the location of a -// specific uniform variable within a program object. name must be an active -// uniform variable name in program that is not a structure, an array of -// structures, or a subcomponent of a vector or a matrix. This function -// returns -1 if name does not correspond to an active uniform variable in -// program or if name starts with the reserved prefix "gl_". -// -// Uniform variables that are structures or arrays of structures may be -// queried by calling GetUniformLocation for each field within the -// structure. The array element operator "[]" and the structure field -// operator "." may be used in name in order to select elements within an -// array or fields within a structure. The result of using these operators is -// not allowed to be another structure, an array of structures, or a -// subcomponent of a vector or a matrix. Except if the last part of name -// indicates a uniform variable array, the location of the first element of -// an array can be retrieved by using the name of the array, or by using the -// name appended by "[0]". -// -// The actual locations assigned to uniform variables are not known until the -// program object is linked successfully. After linking has occurred, the -// command GetUniformLocation can be used to obtain the location of a -// uniform variable. This location value can then be passed to Uniform to -// set the value of the uniform variable or to GetUniform in order to query -// the current value of the uniform variable. After a program object has been -// linked successfully, the index values for uniform variables remain fixed -// until the next link command occurs. Uniform variable locations and values -// can only be queried after a link if the link was successful. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program object. -// GL.INVALID_OPERATION is generated if program has not been successfully -// linked. GL.INVALID_OPERATION is generated if GetUniformLocation is executed -// between the execution of Begin and the corresponding execution of End. -// -// GetUniformLocation is available in GL version 2.0 or greater. -func (gl *GL) GetUniformLocation(program glbase.Program, name string) glbase.Uniform { - name_cstr := C.CString(name) - glresult := C.gl4_3compat_glGetUniformLocation(gl.funcs, C.GLuint(program), (*C.GLchar)(name_cstr)) - C.free(unsafe.Pointer(name_cstr)) - return glbase.Uniform(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetShaderSource.xml -func (gl *GL) GetShaderSource(shader glbase.Shader, bufSize int32, length []int32, source []byte) { - C.gl4_3compat_glGetShaderSource(gl.funcs, C.GLuint(shader), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLchar)(unsafe.Pointer(&source[0]))) -} - -// GetShaderInfoLog returns the information log for the specified shader -// object. The information log for a shader object is modified when the -// shader is compiled. -// -// The information log for a shader object is a string that may contain -// diagnostic messages, warning messages, and other information about the -// last compile operation. When a shader object is created, its information -// log will be a string of length 0, and the size of the current log can be -// obtained by calling GetShaderiv with the value GL.INFO_LOG_LENGTH. -// -// The information log for a shader object is the OpenGL implementer's -// primary mechanism for conveying information about the compilation process. -// Therefore, the information log can be helpful to application developers -// during the development process, even when compilation is successful. -// Application developers should not expect different OpenGL implementations -// to produce identical information logs. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader is not a shader -// object. GL.INVALID_VALUE is generated if maxLength is less than 0. -// GL.INVALID_OPERATION is generated if GetShaderInfoLog is executed -// between the execution of Begin and the corresponding execution of End. -// -// GetShaderInfoLog is available in GL version 2.0 or greater. -func (gl *GL) GetShaderInfoLog(shader glbase.Shader) []byte { - var params [1]int32 - var length int32 - gl.GetShaderiv(shader, INFO_LOG_LENGTH, params[:]) - bufSize := params[0] - infoLog := make([]byte, int(bufSize)) - C.gl4_3compat_glGetShaderInfoLog(gl.funcs, C.GLuint(shader), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length)), (*C.GLchar)(unsafe.Pointer(&infoLog[0]))) - return infoLog -} - -// GetShaderiv GetShader returns in params the value of a parameter for a specific -// shader object. The following parameters are defined: -// -// GL.SHADER_TYPE -// params returns GL.VERTEX_SHADER if shader is a vertex shader object, -// and GL.FRAGMENT_SHADER if shader is a fragment shader object. -// -// GL.DELETE_STATUS -// params returns GL.TRUE if shader is currently flagged for deletion, -// and GL.FALSE otherwise. -// -// GL.COMPILE_STATUS -// params returns GL.TRUE if the last compile operation on shader was -// successful, and GL.FALSE otherwise. -// -// GL.INFO_LOG_LENGTH -// params returns the number of characters in the information log for -// shader including the null termination character (the size of the -// character buffer required to store the information log). If shader has -// no information log, a value of 0 is returned. -// -// GL.SHADER_SOURCE_LENGTH -// params returns the length of the concatenation of the source strings -// that make up the shader source for the shader, including the null -// termination character. (the size of the character buffer -// required to store the shader source). If no source code exists, 0 is -// returned. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader does not refer to a -// shader object. GL.INVALID_ENUM is generated if pname is not an accepted -// value. GL.INVALID_OPERATION is generated if GetShader is executed -// between the execution of Begin and the corresponding execution of End. -// -// GetShaderiv is available in GL version 2.0 or greater. -func (gl *GL) GetShaderiv(shader glbase.Shader, pname glbase.Enum, params []int32) { - var params_c [4]int32 - C.gl4_3compat_glGetShaderiv(gl.funcs, C.GLuint(shader), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetProgramInfoLog returns the information log for the specified program -// object. The information log for a program object is modified when the -// program object is linked or validated. -// -// The information log for a program object is either an empty string, or a -// string containing information about the last link operation, or a string -// containing information about the last validation operation. It may contain -// diagnostic messages, warning messages, and other information. When a -// program object is created, its information log will be a string of length -// 0, and the size of the current log can be obtained by calling GetProgramiv -// with the value GL.INFO_LOG_LENGTH. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated -// by OpenGL. GL.INVALID_OPERATION is generated if program is not a -// program object. -func (gl *GL) GetProgramInfoLog(program glbase.Program) []byte { - var params [1]int32 - var length int32 - gl.GetProgramiv(program, INFO_LOG_LENGTH, params[:]) - bufSize := params[0] - infoLog := make([]byte, int(bufSize)) - C.gl4_3compat_glGetProgramInfoLog(gl.funcs, C.GLuint(program), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length)), (*C.GLchar)(unsafe.Pointer(&infoLog[0]))) - return infoLog -} - -// GetProgramiv returns in params the value of a parameter for a specific -// program object. The following parameters are defined: -// -// GL.DELETE_STATUS -// params returns GL.TRUE if program is currently flagged for deletion, -// and GL.FALSE otherwise. -// -// GL.LINK_STATUS -// params returns GL.TRUE if the last link operation on program was -// successful, and GL.FALSE otherwise. -// -// GL.VALIDATE_STATUS -// params returns GL.TRUE or if the last validation operation on -// program was successful, and GL.FALSE otherwise. -// -// GL.INFO_LOG_LENGTH -// params returns the number of characters in the information log for -// program including the null termination character (the size of -// the character buffer required to store the information log). If -// program has no information log, a value of 0 is returned. -// -// GL.ATTACHED_SHADERS -// params returns the number of shader objects attached to program. -// -// GL.ACTIVE_ATTRIBUTES -// params returns the number of active attribute variables for program. -// -// GL.ACTIVE_ATTRIBUTE_MAX_LENGTH -// params returns the length of the longest active attribute name for -// program, including the null termination character (the size of -// the character buffer required to store the longest attribute name). -// If no active attributes exist, 0 is returned. -// -// GL.ACTIVE_UNIFORMS -// params returns the number of active uniform variables for program. -// -// GL.ACTIVE_UNIFORM_MAX_LENGTH -// params returns the length of the longest active uniform variable -// name for program, including the null termination character (i.e., -// the size of the character buffer required to store the longest -// uniform variable name). If no active uniform variables exist, 0 is -// returned. -// -// GL.TRANSFORM_FEEDBACK_BUFFER_MODE -// params returns a symbolic constant indicating the buffer mode used -// when transform feedback is active. This may be GL.SEPARATE_ATTRIBS -// or GL.INTERLEAVED_ATTRIBS. -// -// GL.TRANSFORM_FEEDBACK_VARYINGS -// params returns the number of varying variables to capture in transform -// feedback mode for the program. -// -// GL.TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH -// params returns the length of the longest variable name to be used for -// transform feedback, including the null-terminator. -// -// GL.GEOMETRY_VERTICES_OUT -// params returns the maximum number of vertices that the geometry shader in -// program will output. -// -// GL.GEOMETRY_INPUT_TYPE -// params returns a symbolic constant indicating the primitive type accepted -// as input to the geometry shader contained in program. -// -// GL.GEOMETRY_OUTPUT_TYPE -// params returns a symbolic constant indicating the primitive type that will -// be output by the geometry shader contained in program. -// -// GL.ACTIVE_UNIFORM_BLOCKS and GL.ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH are -// available only if the GL version 3.1 or greater. -// -// GL.GEOMETRY_VERTICES_OUT, GL.GEOMETRY_INPUT_TYPE and -// GL.GEOMETRY_OUTPUT_TYPE are accepted only if the GL version is 3.2 or -// greater. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program does not refer to a -// program object. GL.INVALID_OPERATION is generated if pname is -// GL.GEOMETRY_VERTICES_OUT, GL.GEOMETRY_INPUT_TYPE, or -// GL.GEOMETRY_OUTPUT_TYPE, and program does not contain a geometry shader. -// GL.INVALID_ENUM is generated if pname is not an accepted value. -func (gl *GL) GetProgramiv(program glbase.Program, pname glbase.Enum, params []int32) { - var params_c [4]int32 - C.gl4_3compat_glGetProgramiv(gl.funcs, C.GLuint(program), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetAttribLocation queries the previously linked program object specified -// by program for the attribute variable specified by name and returns the -// index of the generic vertex attribute that is bound to that attribute -// variable. If name is a matrix attribute variable, the index of the first -// column of the matrix is returned. If the named attribute variable is not -// an active attribute in the specified program object or if name starts with -// the reserved prefix "gl_", a value of -1 is returned. -// -// The association between an attribute variable name and a generic attribute -// index can be specified at any time by calling BindAttribLocation. -// Attribute bindings do not go into effect until LinkProgram is called. -// After a program object has been linked successfully, the index values for -// attribute variables remain fixed until the next link command occurs. The -// attribute values can only be queried after a link if the link was -// successful. GetAttribLocation returns the binding that actually went -// into effect the last time LinkProgram was called for the specified -// program object. Attribute bindings that have been specified since the last -// link operation are not returned by GetAttribLocation. -// -// Error GL_INVALID_OPERATION is generated if program is not a value -// generated by OpenGL. GL_INVALID_OPERATION is generated if program is not -// a program object. GL_INVALID_OPERATION is generated if program has not -// been successfully linked. GL_INVALID_OPERATION is generated if -// GetAttribLocation is executed between the execution of Begin and the -// corresponding execution of End. -// -// GetAttribLocation is available in GL version 2.0 or greater. -func (gl *GL) GetAttribLocation(program glbase.Program, name string) glbase.Attrib { - name_cstr := C.CString(name) - glresult := C.gl4_3compat_glGetAttribLocation(gl.funcs, C.GLuint(program), (*C.GLchar)(name_cstr)) - C.free(unsafe.Pointer(name_cstr)) - return glbase.Attrib(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetAttachedShaders.xml -func (gl *GL) GetAttachedShaders(program glbase.Program, maxCount int32, count []int, obj []uint32) { - C.gl4_3compat_glGetAttachedShaders(gl.funcs, C.GLuint(program), C.GLsizei(maxCount), (*C.GLsizei)(unsafe.Pointer(&count[0])), (*C.GLuint)(unsafe.Pointer(&obj[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveUniform.xml -func (gl *GL) GetActiveUniform(program glbase.Program, index uint32, bufSize int32, length []int32, size []int, gltype []glbase.Enum, name []byte) { - C.gl4_3compat_glGetActiveUniform(gl.funcs, C.GLuint(program), C.GLuint(index), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLint)(unsafe.Pointer(&size[0])), (*C.GLenum)(unsafe.Pointer(&gltype[0])), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveAttrib.xml -func (gl *GL) GetActiveAttrib(program glbase.Program, index glbase.Attrib, bufSize int32, length []int32, size []int, gltype []glbase.Enum, name []byte) { - C.gl4_3compat_glGetActiveAttrib(gl.funcs, C.GLuint(program), C.GLuint(index), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLint)(unsafe.Pointer(&size[0])), (*C.GLenum)(unsafe.Pointer(&gltype[0])), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEnableVertexAttribArray.xml -func (gl *GL) EnableVertexAttribArray(index glbase.Attrib) { - C.gl4_3compat_glEnableVertexAttribArray(gl.funcs, C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDisableVertexAttribArray.xml -func (gl *GL) DisableVertexAttribArray(index glbase.Attrib) { - C.gl4_3compat_glDisableVertexAttribArray(gl.funcs, C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDetachShader.xml -func (gl *GL) DetachShader(program glbase.Program, shader glbase.Shader) { - C.gl4_3compat_glDetachShader(gl.funcs, C.GLuint(program), C.GLuint(shader)) -} - -// DeleteShader frees the memory and invalidates the name associated with -// the shader object specified by shader. This command effectively undoes the -// effects of a call to CreateShader. -// -// If a shader object to be deleted is attached to a program object, it will -// be flagged for deletion, but it will not be deleted until it is no longer -// attached to any program object, for any rendering context (it must -// be detached from wherever it was attached before it will be deleted). A -// value of 0 for shader will be silently ignored. -// -// To determine whether an object has been flagged for deletion, call -// GetShader with arguments shader and GL.DELETE_STATUS. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. -// -// DeleteShader is available in GL version 2.0 or greater. -func (gl *GL) DeleteShader(shader glbase.Shader) { - C.gl4_3compat_glDeleteShader(gl.funcs, C.GLuint(shader)) -} - -// DeleteProgram frees the memory and invalidates the name associated with -// the program object specified by program. This command effectively undoes -// the effects of a call to CreateProgram. -// -// If a program object is in use as part of current rendering state, it will -// be flagged for deletion, but it will not be deleted until it is no longer -// part of current state for any rendering context. If a program object to be -// deleted has shader objects attached to it, those shader objects will be -// automatically detached but not deleted unless they have already been -// flagged for deletion by a previous call to DeleteShader. A value of 0 -// for program will be silently ignored. -// -// To determine whether a program object has been flagged for deletion, call -// GetProgram with arguments program and GL.DELETE_STATUS. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. -// -// DeleteProgram is available in GL version 2.0 or greater. -func (gl *GL) DeleteProgram(program glbase.Program) { - C.gl4_3compat_glDeleteProgram(gl.funcs, C.GLuint(program)) -} - -// CreateShader creates an empty shader object and returns a non-zero value -// by which it can be referenced. A shader object is used to maintain the -// source code strings that define a shader. shaderType indicates the type of -// shader to be created. -// -// Two types of shaders are supported. A shader of type GL.VERTEX_SHADER is a -// shader that is intended to run on the programmable vertex processor and -// replace the fixed functionality vertex processing in OpenGL. A shader of -// type GL.FRAGMENT_SHADER is a shader that is intended to run on the -// programmable fragment processor and replace the fixed functionality -// fragment processing in OpenGL. -// -// When created, a shader object's GL.SHADER_TYPE parameter is set to either -// GL.VERTEX_SHADER or GL.FRAGMENT_SHADER, depending on the value of -// shaderType. -// -// Like display lists and texture objects, the name space for shader objects -// may be shared across a set of contexts, as long as the server sides of the -// contexts share the same address space. If the name space is shared across -// contexts, any attached objects and the data associated with those attached -// objects are shared as well. -// -// This function returns 0 if an error occurs creating the shader object. -// -// Error GL.INVALID_ENUM is generated if shaderType is not an accepted value. -// GL.INVALID_OPERATION is generated if CreateShader is executed between the -// execution of Begin and the corresponding execution of End. -// -// CreateShader is available in GL version 2.0 or greater. -func (gl *GL) CreateShader(gltype glbase.Enum) glbase.Shader { - glresult := C.gl4_3compat_glCreateShader(gl.funcs, C.GLenum(gltype)) - return glbase.Shader(glresult) -} - -// CreateProgram creates an empty program object and returns a non-zero -// value by which it can be referenced. A program object is an object to -// which shader objects can be attached. This provides a mechanism to specify -// the shader objects that will be linked to create a program. It also -// provides a means for checking the compatibility of the shaders that will -// be used to create a program (for instance, checking the compatibility -// between a vertex shader and a fragment shader). When no longer needed as -// part of a program object, shader objects can be detached. -// -// One or more executables are created in a program object by successfully -// attaching shader objects to it with AttachShader, successfully compiling -// the shader objects with CompileShader, and successfully linking the -// program object with LinkProgram. These executables are made part of -// current state when UseProgram is called. Program objects can be deleted -// by calling DeleteProgram. The memory associated with the program object -// will be deleted when it is no longer part of current rendering state for -// any context. -// -// Like display lists and texture objects, the name space for program objects -// may be shared across a set of contexts, as long as the server sides of the -// contexts share the same address space. If the name space is shared across -// contexts, any attached objects and the data associated with those attached -// objects are shared as well. -// -// Applications are responsible for providing the synchronization across API -// calls when objects are accessed from different execution threads. -// -// This function returns 0 if an error occurs creating the program object. -// -// Error GL.INVALID_OPERATION is generated if CreateProgram is executed -// between the execution of Begin and the corresponding execution of End. -// -// CreateProgram is available in GL version 2.0 or greater. -func (gl *GL) CreateProgram() glbase.Program { - glresult := C.gl4_3compat_glCreateProgram(gl.funcs) - return glbase.Program(glresult) -} - -// CompileShader compiles the source code strings that have been stored in -// the shader object specified by shader. -// -// The compilation status will be stored as part of the shader object's -// state. This value will be set to GL.TRUE if the shader was compiled without -// errors and is ready for use, and GL.FALSE otherwise. It can be queried by -// calling GetShaderiv with arguments shader and GL.COMPILE_STATUS. -// -// Compilation of a shader can fail for a number of reasons as specified by -// the OpenGL Shading Language Specification. Whether or not the compilation -// was successful, information about the compilation can be obtained from the -// shader object's information log by calling GetShaderInfoLog. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader is not a shader -// object. GL.INVALID_OPERATION is generated if CompileShader is executed -// between the execution of Begin and the corresponding execution of End. -// -// CompileShader is available in GL version 2.0 or greater. -func (gl *GL) CompileShader(shader glbase.Shader) { - C.gl4_3compat_glCompileShader(gl.funcs, C.GLuint(shader)) -} - -// BindAttribLocation associates a user-defined attribute variable in the program -// object specified by program with a generic vertex attribute index. The name -// parameter specifies the name of the vertex shader attribute variable to -// which index is to be bound. When program is made part of the current state, -// values provided via the generic vertex attribute index will modify the -// value of the user-defined attribute variable specified by name. -// -// If name refers to a matrix attribute variable, index refers to the first -// column of the matrix. Other matrix columns are then automatically bound to -// locations index+1 for a matrix of type mat2; index+1 and index+2 for a -// matrix of type mat3; and index+1, index+2, and index+3 for a matrix of -// type mat4. -// -// This command makes it possible for vertex shaders to use descriptive names -// for attribute variables rather than generic variables that are numbered -// from 0 to GL.MAX_VERTEX_ATTRIBS-1. The values sent to each generic -// attribute index are part of current state, just like standard vertex -// attributes such as color, normal, and vertex position. If a different -// program object is made current by calling UseProgram, the generic vertex -// attributes are tracked in such a way that the same values will be observed -// by attributes in the new program object that are also bound to index. -// -// Attribute variable name-to-generic attribute index bindings for a program -// object can be explicitly assigned at any time by calling -// BindAttribLocation. Attribute bindings do not go into effect until -// LinkProgram is called. After a program object has been linked -// successfully, the index values for generic attributes remain fixed (and -// their values can be queried) until the next link command occurs. -// -// Applications are not allowed to bind any of the standard OpenGL vertex -// attributes using this command, as they are bound automatically when -// needed. Any attribute binding that occurs after the program object has -// been linked will not take effect until the next time the program object is -// linked. -// -// If name was bound previously, that information is lost. Thus you cannot -// bind one user-defined attribute variable to multiple indices, but you can -// bind multiple user-defined attribute variables to the same index. -// -// Applications are allowed to bind more than one user-defined attribute -// variable to the same generic vertex attribute index. This is called -// aliasing, and it is allowed only if just one of the aliased attributes is -// active in the executable program, or if no path through the shader -// consumes more than one attribute of a set of attributes aliased to the -// same location. The compiler and linker are allowed to assume that no -// aliasing is done and are free to employ optimizations that work only in -// the absence of aliasing. OpenGL implementations are not required to do -// error checking to detect aliasing. Because there is no way to bind -// standard attributes, it is not possible to alias generic attributes with -// conventional ones (except for generic attribute 0). -// -// BindAttribLocation can be called before any vertex shader objects are -// bound to the specified program object. It is also permissible to bind a -// generic attribute index to an attribute variable name that is never used -// in a vertex shader. -// -// Active attributes that are not explicitly bound will be bound by the -// linker when LinkProgram is called. The locations assigned can be queried -// by calling GetAttribLocation. -// -// Error GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. -// GL.INVALID_OPERATION is generated if name starts with the reserved prefix "gl_". -// GL.INVALID_VALUE is generated if program is not a value generated by OpenGL. -// GL.INVALID_OPERATION is generated if program is not a program object. -// GL.INVALID_OPERATION is generated if BindAttribLocation is executed -// between the execution of Begin and the corresponding execution of End. -// -// BindAttribLocation is available in GL version 2.0 or greater. -func (gl *GL) BindAttribLocation(program glbase.Program, index glbase.Attrib, name string) { - name_cstr := C.CString(name) - C.gl4_3compat_glBindAttribLocation(gl.funcs, C.GLuint(program), C.GLuint(index), (*C.GLchar)(name_cstr)) - C.free(unsafe.Pointer(name_cstr)) -} - -// AttachShader attaches a shader object to a program object. -// -// In order to create an executable, there must be a way to specify the list -// of things that will be linked together. Program objects provide this -// mechanism. Shaders that are to be linked together in a program object must -// first be attached to that program object. This indicates that shader will -// be included in link operations that will be performed on program. -// -// All operations that can be performed on a shader object are valid whether -// or not the shader object is attached to a program object. It is -// permissible to attach a shader object to a program object before source -// code has been loaded into the shader object or before the shader object -// has been compiled. It is permissible to attach multiple shader objects of -// the same type because each may contain a portion of the complete shader. -// It is also permissible to attach a shader object to more than one program -// object. If a shader object is deleted while it is attached to a program -// object, it will be flagged for deletion, and deletion will not occur until -// DetachShader is called to detach it from all program objects to which it -// is attached. -// -// Error GL.INVALID_VALUE is generated if either program or shader is not a -// value generated by OpenGL. GL.INVALID_OPERATION is generated if program -// is not a program object. GL.INVALID_OPERATION is generated if shader is -// not a shader object. GL.INVALID_OPERATION is generated if shader is -// already attached to program. GL.INVALID_OPERATION is generated if -// AttachShader is executed between the execution of Begin and the -// corresponding execution of End. -// -// AttachShader is available in GL version 2.0 or greater. -func (gl *GL) AttachShader(program glbase.Program, shader glbase.Shader) { - C.gl4_3compat_glAttachShader(gl.funcs, C.GLuint(program), C.GLuint(shader)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glStencilMaskSeparate.xml -func (gl *GL) StencilMaskSeparate(face glbase.Enum, mask uint32) { - C.gl4_3compat_glStencilMaskSeparate(gl.funcs, C.GLenum(face), C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glStencilFuncSeparate.xml -func (gl *GL) StencilFuncSeparate(face, glfunc glbase.Enum, ref int32, mask uint32) { - C.gl4_3compat_glStencilFuncSeparate(gl.funcs, C.GLenum(face), C.GLenum(glfunc), C.GLint(ref), C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glStencilOpSeparate.xml -func (gl *GL) StencilOpSeparate(face, sfail, dpfail, dppass glbase.Enum) { - C.gl4_3compat_glStencilOpSeparate(gl.funcs, C.GLenum(face), C.GLenum(sfail), C.GLenum(dpfail), C.GLenum(dppass)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawBuffers.xml -func (gl *GL) DrawBuffers(n int, bufs []glbase.Enum) { - C.gl4_3compat_glDrawBuffers(gl.funcs, C.GLsizei(n), (*C.GLenum)(unsafe.Pointer(&bufs[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendEquationSeparate.xml -func (gl *GL) BlendEquationSeparate(modeRGB, modeAlpha glbase.Enum) { - C.gl4_3compat_glBlendEquationSeparate(gl.funcs, C.GLenum(modeRGB), C.GLenum(modeAlpha)) -} - -// UniformMatrix4x3fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix4x3fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix4x3fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(4*3) != 0 { - panic("invalid value length for UniformMatrix4x3fv") - } - count := len(value) / (4 * 3) - C.gl4_3compat_glUniformMatrix4x3fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix3x4fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix3x4fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix3x4fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(3*4) != 0 { - panic("invalid value length for UniformMatrix3x4fv") - } - count := len(value) / (3 * 4) - C.gl4_3compat_glUniformMatrix3x4fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix4x2fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix4x2fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix4x2fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(4*2) != 0 { - panic("invalid value length for UniformMatrix4x2fv") - } - count := len(value) / (4 * 2) - C.gl4_3compat_glUniformMatrix4x2fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix2x4fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix2x4fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix2x4fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(2*4) != 0 { - panic("invalid value length for UniformMatrix2x4fv") - } - count := len(value) / (2 * 4) - C.gl4_3compat_glUniformMatrix2x4fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix3x2fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix3x2fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix3x2fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(3*2) != 0 { - panic("invalid value length for UniformMatrix3x2fv") - } - count := len(value) / (3 * 2) - C.gl4_3compat_glUniformMatrix3x2fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix2x3fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix2x3fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix2x3fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(2*3) != 0 { - panic("invalid value length for UniformMatrix2x3fv") - } - count := len(value) / (2 * 3) - C.gl4_3compat_glUniformMatrix2x3fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsVertexArray.xml -func (gl *GL) IsVertexArray(array uint32) bool { - glresult := C.gl4_3compat_glIsVertexArray(gl.funcs, C.GLuint(array)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGenVertexArrays.xml -func (gl *GL) GenVertexArrays(n int, arrays []uint32) { - C.gl4_3compat_glGenVertexArrays(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&arrays[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDeleteVertexArrays.xml -func (gl *GL) DeleteVertexArrays(n int, arrays []uint32) { - C.gl4_3compat_glDeleteVertexArrays(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&arrays[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindVertexArray.xml -func (gl *GL) BindVertexArray(array uint32) { - C.gl4_3compat_glBindVertexArray(gl.funcs, C.GLuint(array)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFlushMappedBufferRange.xml -func (gl *GL) FlushMappedBufferRange(target glbase.Enum, offset, length int) { - C.gl4_3compat_glFlushMappedBufferRange(gl.funcs, C.GLenum(target), C.GLintptr(offset), C.GLsizeiptr(length)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFramebufferTextureLayer.xml -func (gl *GL) FramebufferTextureLayer(target, attachment glbase.Enum, texture glbase.Texture, level int, layer int32) { - C.gl4_3compat_glFramebufferTextureLayer(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLuint(texture), C.GLint(level), C.GLint(layer)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRenderbufferStorageMultisample.xml -func (gl *GL) RenderbufferStorageMultisample(target glbase.Enum, samples int32, internalFormat glbase.Enum, width, height int) { - C.gl4_3compat_glRenderbufferStorageMultisample(gl.funcs, C.GLenum(target), C.GLsizei(samples), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlitFramebuffer.xml -func (gl *GL) BlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1 int32, mask glbase.Bitfield, filter glbase.Enum) { - C.gl4_3compat_glBlitFramebuffer(gl.funcs, C.GLint(srcX0), C.GLint(srcY0), C.GLint(srcX1), C.GLint(srcY1), C.GLint(dstX0), C.GLint(dstY0), C.GLint(dstX1), C.GLint(dstY1), C.GLbitfield(mask), C.GLenum(filter)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGenerateMipmap.xml -func (gl *GL) GenerateMipmap(target glbase.Enum) { - C.gl4_3compat_glGenerateMipmap(gl.funcs, C.GLenum(target)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetFramebufferAttachmentParameteriv.xml -func (gl *GL) GetFramebufferAttachmentParameteriv(target, attachment, pname glbase.Enum, params []int32) { - C.gl4_3compat_glGetFramebufferAttachmentParameteriv(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFramebufferRenderbuffer.xml -func (gl *GL) FramebufferRenderbuffer(target, attachment, renderbuffertarget glbase.Enum, renderbuffer glbase.Renderbuffer) { - C.gl4_3compat_glFramebufferRenderbuffer(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(renderbuffertarget), C.GLuint(renderbuffer)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFramebufferTexture3D.xml -func (gl *GL) FramebufferTexture3D(target, attachment, textarget glbase.Enum, texture glbase.Texture, level int, zoffset int32) { - C.gl4_3compat_glFramebufferTexture3D(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(textarget), C.GLuint(texture), C.GLint(level), C.GLint(zoffset)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFramebufferTexture2D.xml -func (gl *GL) FramebufferTexture2D(target, attachment, textarget glbase.Enum, texture glbase.Texture, level int) { - C.gl4_3compat_glFramebufferTexture2D(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(textarget), C.GLuint(texture), C.GLint(level)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFramebufferTexture1D.xml -func (gl *GL) FramebufferTexture1D(target, attachment, textarget glbase.Enum, texture glbase.Texture, level int) { - C.gl4_3compat_glFramebufferTexture1D(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(textarget), C.GLuint(texture), C.GLint(level)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCheckFramebufferStatus.xml -func (gl *GL) CheckFramebufferStatus(target glbase.Enum) glbase.Enum { - glresult := C.gl4_3compat_glCheckFramebufferStatus(gl.funcs, C.GLenum(target)) - return glbase.Enum(glresult) -} - -// GenFramebuffers returns n framebuffer object names in ids. There is no -// guarantee that the names form a contiguous set of integers; however, it is -// guaranteed that none of the returned names was in use immediately before -// the call to GenFramebuffers. -// -// Framebuffer object names returned by a call to GenFramebuffers are not -// returned by subsequent calls, unless they are first deleted with -// DeleteFramebuffers. -// -// The names returned in ids are marked as used, for the purposes of -// GenFramebuffers only, but they acquire state and type only when they are -// first bound. -// -// Error GL.INVALID_VALUE is generated if n is negative. -func (gl *GL) GenFramebuffers(n int) []glbase.Framebuffer { - if n == 0 { - return nil - } - framebuffers := make([]glbase.Framebuffer, n) - C.gl4_3compat_glGenFramebuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&framebuffers[0]))) - return framebuffers -} - -// DeleteFramebuffers deletes the framebuffer objects whose names are -// stored in the framebuffers slice. The name zero is reserved by the GL and -// is silently ignored, should it occur in framebuffers, as are other unused -// names. Once a framebuffer object is deleted, its name is again unused and -// it has no attachments. If a framebuffer that is currently bound to one or -// more of the targets GL.DRAW_FRAMEBUFFER or GL.READ_FRAMEBUFFER is deleted, -// it is as though BindFramebuffer had been executed with the corresponding -// target and framebuffer zero. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// DeleteFramebuffers is available in GL version 3.0 or greater. -func (gl *GL) DeleteFramebuffers(framebuffers []glbase.Framebuffer) { - n := len(framebuffers) - if n == 0 { - return - } - C.gl4_3compat_glDeleteFramebuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&framebuffers[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindFramebuffer.xml -func (gl *GL) BindFramebuffer(target glbase.Enum, framebuffer glbase.Framebuffer) { - C.gl4_3compat_glBindFramebuffer(gl.funcs, C.GLenum(target), C.GLuint(framebuffer)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsFramebuffer.xml -func (gl *GL) IsFramebuffer(framebuffer glbase.Framebuffer) bool { - glresult := C.gl4_3compat_glIsFramebuffer(gl.funcs, C.GLuint(framebuffer)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetRenderbufferParameteriv.xml -func (gl *GL) GetRenderbufferParameteriv(target, pname glbase.Enum, params []int32) { - C.gl4_3compat_glGetRenderbufferParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRenderbufferStorage.xml -func (gl *GL) RenderbufferStorage(target, internalFormat glbase.Enum, width, height int) { - C.gl4_3compat_glRenderbufferStorage(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height)) -} - -// GenRenderbuffers returns n renderbuffer object names in renderbuffers. -// There is no guarantee that the names form a contiguous set of integers; -// however, it is guaranteed that none of the returned names was in use -// immediately before the call to GenRenderbuffers. -// -// Renderbuffer object names returned by a call to GenRenderbuffers are not -// returned by subsequent calls, unless they are first deleted with -// DeleteRenderbuffers. -// -// The names returned in renderbuffers are marked as used, for the purposes -// of GenRenderbuffers only, but they acquire state and type only when they -// are first bound. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// GenRenderbuffers is available in GL version 3.0 or greater. -func (gl *GL) GenRenderbuffers(n int) []glbase.Renderbuffer { - if n == 0 { - return nil - } - renderbuffers := make([]glbase.Renderbuffer, n) - C.gl4_3compat_glGenRenderbuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&renderbuffers[0]))) - return renderbuffers -} - -// DeleteRenderbuffers deletes the renderbuffer objects whose names are stored -// in the renderbuffers slice. The name zero is reserved by the GL and -// is silently ignored, should it occur in renderbuffers, as are other unused -// names. Once a renderbuffer object is deleted, its name is again unused and -// it has no contents. If a renderbuffer that is currently bound to the -// target GL.RENDERBUFFER is deleted, it is as though BindRenderbuffer had -// been executed with a target of GL.RENDERBUFFER and a name of zero. -// -// If a renderbuffer object is attached to one or more attachment points in -// the currently bound framebuffer, then it as if FramebufferRenderbuffer -// had been called, with a renderbuffer of zero for each attachment point to -// which this image was attached in the currently bound framebuffer. In other -// words, this renderbuffer object is first detached from all attachment -// ponits in the currently bound framebuffer. Note that the renderbuffer -// image is specifically not detached from any non-bound framebuffers. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// DeleteRenderbuffers is available in GL version 3.0 or greater. -func (gl *GL) DeleteRenderbuffers(renderbuffers []glbase.Renderbuffer) { - n := len(renderbuffers) - if n == 0 { - return - } - C.gl4_3compat_glDeleteRenderbuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&renderbuffers[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindRenderbuffer.xml -func (gl *GL) BindRenderbuffer(target glbase.Enum, renderbuffer glbase.Renderbuffer) { - C.gl4_3compat_glBindRenderbuffer(gl.funcs, C.GLenum(target), C.GLuint(renderbuffer)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsRenderbuffer.xml -func (gl *GL) IsRenderbuffer(renderbuffer glbase.Renderbuffer) bool { - glresult := C.gl4_3compat_glIsRenderbuffer(gl.funcs, C.GLuint(renderbuffer)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearBufferfi.xml -func (gl *GL) ClearBufferfi(buffer glbase.Enum, drawbuffer int32, depth float32, stencil int32) { - C.gl4_3compat_glClearBufferfi(gl.funcs, C.GLenum(buffer), C.GLint(drawbuffer), C.GLfloat(depth), C.GLint(stencil)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearBufferfv.xml -func (gl *GL) ClearBufferfv(buffer glbase.Enum, drawbuffer int32, value []float32) { - C.gl4_3compat_glClearBufferfv(gl.funcs, C.GLenum(buffer), C.GLint(drawbuffer), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearBufferuiv.xml -func (gl *GL) ClearBufferuiv(buffer glbase.Enum, drawbuffer int32, value []uint32) { - C.gl4_3compat_glClearBufferuiv(gl.funcs, C.GLenum(buffer), C.GLint(drawbuffer), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearBufferiv.xml -func (gl *GL) ClearBufferiv(buffer glbase.Enum, drawbuffer int32, value []int32) { - C.gl4_3compat_glClearBufferiv(gl.funcs, C.GLenum(buffer), C.GLint(drawbuffer), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexParameterIuiv.xml -func (gl *GL) GetTexParameterIuiv(target, pname glbase.Enum, params []uint32) { - C.gl4_3compat_glGetTexParameterIuiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexParameterIiv.xml -func (gl *GL) GetTexParameterIiv(target, pname glbase.Enum, params []int32) { - C.gl4_3compat_glGetTexParameterIiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexParameterIuiv.xml -func (gl *GL) TexParameterIuiv(target, pname glbase.Enum, params []uint32) { - C.gl4_3compat_glTexParameterIuiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexParameterIiv.xml -func (gl *GL) TexParameterIiv(target, pname glbase.Enum, params []int32) { - C.gl4_3compat_glTexParameterIiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// Uniform4uiv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform4uiv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4uiv(location glbase.Uniform, value []uint32) { - if len(value) == 0 { - return - } - if len(value)%4 != 0 { - panic("invalid value length for Uniform4uiv") - } - count := len(value) / 4 - C.gl4_3compat_glUniform4uiv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// Uniform3uiv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform3uiv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3uiv(location glbase.Uniform, value []uint32) { - if len(value) == 0 { - return - } - if len(value)%3 != 0 { - panic("invalid value length for Uniform3uiv") - } - count := len(value) / 3 - C.gl4_3compat_glUniform3uiv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// Uniform2uiv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform2uiv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2uiv(location glbase.Uniform, value []uint32) { - if len(value) == 0 { - return - } - if len(value)%2 != 0 { - panic("invalid value length for Uniform2uiv") - } - count := len(value) / 2 - C.gl4_3compat_glUniform2uiv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// Uniform1uiv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform1uiv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1uiv(location glbase.Uniform, value []uint32) { - if len(value) == 0 { - return - } - count := len(value) - C.gl4_3compat_glUniform1uiv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// Uniform4ui modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform4ui operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4ui(location glbase.Uniform, v0, v1, v2, v3 uint32) { - C.gl4_3compat_glUniform4ui(gl.funcs, C.GLint(location), C.GLuint(v0), C.GLuint(v1), C.GLuint(v2), C.GLuint(v3)) -} - -// Uniform3ui modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform3ui operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3ui(location glbase.Uniform, v0, v1, v2 uint32) { - C.gl4_3compat_glUniform3ui(gl.funcs, C.GLint(location), C.GLuint(v0), C.GLuint(v1), C.GLuint(v2)) -} - -// Uniform2ui modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform2ui operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2ui(location glbase.Uniform, v0, v1 uint32) { - C.gl4_3compat_glUniform2ui(gl.funcs, C.GLint(location), C.GLuint(v0), C.GLuint(v1)) -} - -// Uniform1ui modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform1ui operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1ui(location glbase.Uniform, v0 uint32) { - C.gl4_3compat_glUniform1ui(gl.funcs, C.GLint(location), C.GLuint(v0)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetFragDataLocation.xml -func (gl *GL) GetFragDataLocation(program glbase.Program, name []byte) int32 { - glresult := C.gl4_3compat_glGetFragDataLocation(gl.funcs, C.GLuint(program), (*C.GLchar)(unsafe.Pointer(&name[0]))) - return int32(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindFragDataLocation.xml -func (gl *GL) BindFragDataLocation(program glbase.Program, color uint32, name []byte) { - C.gl4_3compat_glBindFragDataLocation(gl.funcs, C.GLuint(program), C.GLuint(color), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetUniformuiv.xml -func (gl *GL) GetUniformuiv(program glbase.Program, location glbase.Uniform, params []uint32) { - C.gl4_3compat_glGetUniformuiv(gl.funcs, C.GLuint(program), C.GLint(location), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetVertexAttribIuiv.xml -func (gl *GL) GetVertexAttribIuiv(index glbase.Attrib, pname glbase.Enum, params []uint32) { - C.gl4_3compat_glGetVertexAttribIuiv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetVertexAttribIiv.xml -func (gl *GL) GetVertexAttribIiv(index glbase.Attrib, pname glbase.Enum, params []int32) { - C.gl4_3compat_glGetVertexAttribIiv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribIPointer.xml -func (gl *GL) VertexAttribIPointer(index glbase.Attrib, size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl4_3compat_glVertexAttribIPointer(gl.funcs, C.GLuint(index), C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEndConditionalRender.xml -func (gl *GL) EndConditionalRender() { - C.gl4_3compat_glEndConditionalRender(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBeginConditionalRender.xml -func (gl *GL) BeginConditionalRender(id uint32, mode glbase.Enum) { - C.gl4_3compat_glBeginConditionalRender(gl.funcs, C.GLuint(id), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClampColor.xml -func (gl *GL) ClampColor(target, clamp glbase.Enum) { - C.gl4_3compat_glClampColor(gl.funcs, C.GLenum(target), C.GLenum(clamp)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTransformFeedbackVarying.xml -func (gl *GL) GetTransformFeedbackVarying(program glbase.Program, index uint32, bufSize int32, length []int32, size []int, gltype []glbase.Enum, name []byte) { - C.gl4_3compat_glGetTransformFeedbackVarying(gl.funcs, C.GLuint(program), C.GLuint(index), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLsizei)(unsafe.Pointer(&size[0])), (*C.GLenum)(unsafe.Pointer(&gltype[0])), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindBufferBase.xml -func (gl *GL) BindBufferBase(target glbase.Enum, index uint32, buffer glbase.Buffer) { - C.gl4_3compat_glBindBufferBase(gl.funcs, C.GLenum(target), C.GLuint(index), C.GLuint(buffer)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindBufferRange.xml -func (gl *GL) BindBufferRange(target glbase.Enum, index uint32, buffer glbase.Buffer, offset, size int) { - C.gl4_3compat_glBindBufferRange(gl.funcs, C.GLenum(target), C.GLuint(index), C.GLuint(buffer), C.GLintptr(offset), C.GLsizeiptr(size)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEndTransformFeedback.xml -func (gl *GL) EndTransformFeedback() { - C.gl4_3compat_glEndTransformFeedback(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBeginTransformFeedback.xml -func (gl *GL) BeginTransformFeedback(primitiveMode glbase.Enum) { - C.gl4_3compat_glBeginTransformFeedback(gl.funcs, C.GLenum(primitiveMode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsEnabledi.xml -func (gl *GL) IsEnabledi(target glbase.Enum, index uint32) bool { - glresult := C.gl4_3compat_glIsEnabledi(gl.funcs, C.GLenum(target), C.GLuint(index)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDisablei.xml -func (gl *GL) Disablei(target glbase.Enum, index uint32) { - C.gl4_3compat_glDisablei(gl.funcs, C.GLenum(target), C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEnablei.xml -func (gl *GL) Enablei(target glbase.Enum, index uint32) { - C.gl4_3compat_glEnablei(gl.funcs, C.GLenum(target), C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetIntegeri_v.xml -func (gl *GL) GetIntegeri_v(target glbase.Enum, index uint32, data []int32) { - C.gl4_3compat_glGetIntegeri_v(gl.funcs, C.GLenum(target), C.GLuint(index), (*C.GLint)(unsafe.Pointer(&data[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetBooleani_v.xml -func (gl *GL) GetBooleani_v(target glbase.Enum, index uint32, data []bool) { - C.gl4_3compat_glGetBooleani_v(gl.funcs, C.GLenum(target), C.GLuint(index), (*C.GLboolean)(unsafe.Pointer(&data[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorMaski.xml -func (gl *GL) ColorMaski(index uint32, r, g, b, a bool) { - C.gl4_3compat_glColorMaski(gl.funcs, C.GLuint(index), *(*C.GLboolean)(unsafe.Pointer(&r)), *(*C.GLboolean)(unsafe.Pointer(&g)), *(*C.GLboolean)(unsafe.Pointer(&b)), *(*C.GLboolean)(unsafe.Pointer(&a))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyBufferSubData.xml -func (gl *GL) CopyBufferSubData(readTarget, writeTarget glbase.Enum, readOffset, writeOffset, size int) { - C.gl4_3compat_glCopyBufferSubData(gl.funcs, C.GLenum(readTarget), C.GLenum(writeTarget), C.GLintptr(readOffset), C.GLintptr(writeOffset), C.GLsizeiptr(size)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformBlockBinding.xml -func (gl *GL) UniformBlockBinding(program glbase.Program, v0, v1 uint32) { - C.gl4_3compat_glUniformBlockBinding(gl.funcs, C.GLuint(program), C.GLuint(v0), C.GLuint(v1)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveUniformBlockName.xml -func (gl *GL) GetActiveUniformBlockName(program glbase.Program, uniformBlockIndex uint32, bufSize int32, length []int32, uniformBlockName []byte) { - C.gl4_3compat_glGetActiveUniformBlockName(gl.funcs, C.GLuint(program), C.GLuint(uniformBlockIndex), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLchar)(unsafe.Pointer(&uniformBlockName[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveUniformBlockiv.xml -func (gl *GL) GetActiveUniformBlockiv(program glbase.Program, uniformBlockIndex uint32, pname glbase.Enum, params []int32) { - C.gl4_3compat_glGetActiveUniformBlockiv(gl.funcs, C.GLuint(program), C.GLuint(uniformBlockIndex), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetUniformBlockIndex.xml -func (gl *GL) GetUniformBlockIndex(program glbase.Program, uniformBlockName []byte) uint32 { - glresult := C.gl4_3compat_glGetUniformBlockIndex(gl.funcs, C.GLuint(program), (*C.GLchar)(unsafe.Pointer(&uniformBlockName[0]))) - return uint32(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveUniformName.xml -func (gl *GL) GetActiveUniformName(program glbase.Program, uniformIndex uint32, bufSize int32, length []int32, uniformName []byte) { - C.gl4_3compat_glGetActiveUniformName(gl.funcs, C.GLuint(program), C.GLuint(uniformIndex), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLchar)(unsafe.Pointer(&uniformName[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveUniformsiv.xml -func (gl *GL) GetActiveUniformsiv(program glbase.Program, uniformCount int32, uniformIndices []uint32, pname glbase.Enum, params []int32) { - C.gl4_3compat_glGetActiveUniformsiv(gl.funcs, C.GLuint(program), C.GLsizei(uniformCount), (*C.GLuint)(unsafe.Pointer(&uniformIndices[0])), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPrimitiveRestartIndex.xml -func (gl *GL) PrimitiveRestartIndex(index uint32) { - C.gl4_3compat_glPrimitiveRestartIndex(gl.funcs, C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexBuffer.xml -func (gl *GL) TexBuffer(target, internalFormat glbase.Enum, buffer glbase.Buffer) { - C.gl4_3compat_glTexBuffer(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLuint(buffer)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawElementsInstanced.xml -func (gl *GL) DrawElementsInstanced(mode glbase.Enum, count int, gltype glbase.Enum, indices interface{}, instancecount int32) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl4_3compat_glDrawElementsInstanced(gl.funcs, C.GLenum(mode), C.GLsizei(count), C.GLenum(gltype), indices_ptr, C.GLsizei(instancecount)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawArraysInstanced.xml -func (gl *GL) DrawArraysInstanced(mode glbase.Enum, first, count int, instancecount int32) { - C.gl4_3compat_glDrawArraysInstanced(gl.funcs, C.GLenum(mode), C.GLint(first), C.GLsizei(count), C.GLsizei(instancecount)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSampleMaski.xml -func (gl *GL) SampleMaski(index uint32, mask glbase.Bitfield) { - C.gl4_3compat_glSampleMaski(gl.funcs, C.GLuint(index), C.GLbitfield(mask)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetMultisamplefv.xml -func (gl *GL) GetMultisamplefv(pname glbase.Enum, index uint32, val []float32) { - C.gl4_3compat_glGetMultisamplefv(gl.funcs, C.GLenum(pname), C.GLuint(index), (*C.GLfloat)(unsafe.Pointer(&val[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexImage3DMultisample.xml -func (gl *GL) TexImage3DMultisample(target glbase.Enum, samples, internalFormat int32, width, height int, depth int32, fixedsamplelocations bool) { - C.gl4_3compat_glTexImage3DMultisample(gl.funcs, C.GLenum(target), C.GLsizei(samples), C.GLint(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), *(*C.GLboolean)(unsafe.Pointer(&fixedsamplelocations))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexImage2DMultisample.xml -func (gl *GL) TexImage2DMultisample(target glbase.Enum, samples, internalFormat int32, width, height int, fixedsamplelocations bool) { - C.gl4_3compat_glTexImage2DMultisample(gl.funcs, C.GLenum(target), C.GLsizei(samples), C.GLint(internalFormat), C.GLsizei(width), C.GLsizei(height), *(*C.GLboolean)(unsafe.Pointer(&fixedsamplelocations))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetSynciv.xml -func (gl *GL) GetSynciv(sync glbase.Sync, pname glbase.Enum, bufSize int32, length, values []int32) { - C.gl4_3compat_glGetSynciv(gl.funcs, C.GLsync(unsafe.Pointer(sync)), C.GLenum(pname), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLint)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetInteger64v.xml -func (gl *GL) GetInteger64v(pname glbase.Enum, params []int64) { - C.gl4_3compat_glGetInteger64v(gl.funcs, C.GLenum(pname), (*C.GLint64)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWaitSync.xml -func (gl *GL) WaitSync(sync glbase.Sync, flags glbase.Bitfield, timeout uint64) { - C.gl4_3compat_glWaitSync(gl.funcs, C.GLsync(unsafe.Pointer(sync)), C.GLbitfield(flags), C.GLuint64(timeout)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClientWaitSync.xml -func (gl *GL) ClientWaitSync(sync glbase.Sync, flags glbase.Bitfield, timeout uint64) glbase.Enum { - glresult := C.gl4_3compat_glClientWaitSync(gl.funcs, C.GLsync(unsafe.Pointer(sync)), C.GLbitfield(flags), C.GLuint64(timeout)) - return glbase.Enum(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDeleteSync.xml -func (gl *GL) DeleteSync(sync glbase.Sync) { - C.gl4_3compat_glDeleteSync(gl.funcs, C.GLsync(unsafe.Pointer(sync))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsSync.xml -func (gl *GL) IsSync(sync glbase.Sync) bool { - glresult := C.gl4_3compat_glIsSync(gl.funcs, C.GLsync(unsafe.Pointer(sync))) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFenceSync.xml -func (gl *GL) FenceSync(condition glbase.Enum, flags glbase.Bitfield) glbase.Sync { - glresult := C.gl4_3compat_glFenceSync(gl.funcs, C.GLenum(condition), C.GLbitfield(flags)) - return glbase.Sync(unsafe.Pointer(glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProvokingVertex.xml -func (gl *GL) ProvokingVertex(mode glbase.Enum) { - C.gl4_3compat_glProvokingVertex(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawElementsInstancedBaseVertex.xml -func (gl *GL) DrawElementsInstancedBaseVertex(mode glbase.Enum, count int, gltype glbase.Enum, indices interface{}, instancecount, basevertex int32) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl4_3compat_glDrawElementsInstancedBaseVertex(gl.funcs, C.GLenum(mode), C.GLsizei(count), C.GLenum(gltype), indices_ptr, C.GLsizei(instancecount), C.GLint(basevertex)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawRangeElementsBaseVertex.xml -func (gl *GL) DrawRangeElementsBaseVertex(mode glbase.Enum, start, end uint32, count int, gltype glbase.Enum, indices interface{}, basevertex int32) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl4_3compat_glDrawRangeElementsBaseVertex(gl.funcs, C.GLenum(mode), C.GLuint(start), C.GLuint(end), C.GLsizei(count), C.GLenum(gltype), indices_ptr, C.GLint(basevertex)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawElementsBaseVertex.xml -func (gl *GL) DrawElementsBaseVertex(mode glbase.Enum, count int, gltype glbase.Enum, indices interface{}, basevertex int32) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl4_3compat_glDrawElementsBaseVertex(gl.funcs, C.GLenum(mode), C.GLsizei(count), C.GLenum(gltype), indices_ptr, C.GLint(basevertex)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFramebufferTexture.xml -func (gl *GL) FramebufferTexture(target, attachment glbase.Enum, texture glbase.Texture, level int) { - C.gl4_3compat_glFramebufferTexture(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLuint(texture), C.GLint(level)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetBufferParameteri64v.xml -func (gl *GL) GetBufferParameteri64v(target, pname glbase.Enum, params []int64) { - C.gl4_3compat_glGetBufferParameteri64v(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint64)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetInteger64i_v.xml -func (gl *GL) GetInteger64i_v(target glbase.Enum, index uint32, data []int64) { - C.gl4_3compat_glGetInteger64i_v(gl.funcs, C.GLenum(target), C.GLuint(index), (*C.GLint64)(unsafe.Pointer(&data[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribP4uiv.xml -func (gl *GL) VertexAttribP4uiv(index glbase.Attrib, gltype glbase.Enum, normalized bool, value []uint32) { - C.gl4_3compat_glVertexAttribP4uiv(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribP4ui.xml -func (gl *GL) VertexAttribP4ui(index glbase.Attrib, gltype glbase.Enum, normalized bool, value uint32) { - C.gl4_3compat_glVertexAttribP4ui(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribP3uiv.xml -func (gl *GL) VertexAttribP3uiv(index glbase.Attrib, gltype glbase.Enum, normalized bool, value []uint32) { - C.gl4_3compat_glVertexAttribP3uiv(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribP3ui.xml -func (gl *GL) VertexAttribP3ui(index glbase.Attrib, gltype glbase.Enum, normalized bool, value uint32) { - C.gl4_3compat_glVertexAttribP3ui(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribP2uiv.xml -func (gl *GL) VertexAttribP2uiv(index glbase.Attrib, gltype glbase.Enum, normalized bool, value []uint32) { - C.gl4_3compat_glVertexAttribP2uiv(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribP2ui.xml -func (gl *GL) VertexAttribP2ui(index glbase.Attrib, gltype glbase.Enum, normalized bool, value uint32) { - C.gl4_3compat_glVertexAttribP2ui(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribP1uiv.xml -func (gl *GL) VertexAttribP1uiv(index glbase.Attrib, gltype glbase.Enum, normalized bool, value []uint32) { - C.gl4_3compat_glVertexAttribP1uiv(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribP1ui.xml -func (gl *GL) VertexAttribP1ui(index glbase.Attrib, gltype glbase.Enum, normalized bool, value uint32) { - C.gl4_3compat_glVertexAttribP1ui(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColorP3uiv.xml -func (gl *GL) SecondaryColorP3uiv(gltype glbase.Enum, color []uint32) { - C.gl4_3compat_glSecondaryColorP3uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&color[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColorP3ui.xml -func (gl *GL) SecondaryColorP3ui(gltype glbase.Enum, color uint32) { - C.gl4_3compat_glSecondaryColorP3ui(gl.funcs, C.GLenum(gltype), C.GLuint(color)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorP4uiv.xml -func (gl *GL) ColorP4uiv(gltype glbase.Enum, color []uint32) { - C.gl4_3compat_glColorP4uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&color[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorP4ui.xml -func (gl *GL) ColorP4ui(gltype glbase.Enum, color uint32) { - C.gl4_3compat_glColorP4ui(gl.funcs, C.GLenum(gltype), C.GLuint(color)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorP3uiv.xml -func (gl *GL) ColorP3uiv(gltype glbase.Enum, color []uint32) { - C.gl4_3compat_glColorP3uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&color[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorP3ui.xml -func (gl *GL) ColorP3ui(gltype glbase.Enum, color uint32) { - C.gl4_3compat_glColorP3ui(gl.funcs, C.GLenum(gltype), C.GLuint(color)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glNormalP3uiv.xml -func (gl *GL) NormalP3uiv(gltype glbase.Enum, coords []uint32) { - C.gl4_3compat_glNormalP3uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glNormalP3ui.xml -func (gl *GL) NormalP3ui(gltype glbase.Enum, coords uint32) { - C.gl4_3compat_glNormalP3ui(gl.funcs, C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoordP4uiv.xml -func (gl *GL) MultiTexCoordP4uiv(texture, gltype glbase.Enum, coords []uint32) { - C.gl4_3compat_glMultiTexCoordP4uiv(gl.funcs, C.GLenum(texture), C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoordP4ui.xml -func (gl *GL) MultiTexCoordP4ui(texture, gltype glbase.Enum, coords uint32) { - C.gl4_3compat_glMultiTexCoordP4ui(gl.funcs, C.GLenum(texture), C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoordP3uiv.xml -func (gl *GL) MultiTexCoordP3uiv(texture, gltype glbase.Enum, coords []uint32) { - C.gl4_3compat_glMultiTexCoordP3uiv(gl.funcs, C.GLenum(texture), C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoordP3ui.xml -func (gl *GL) MultiTexCoordP3ui(texture, gltype glbase.Enum, coords uint32) { - C.gl4_3compat_glMultiTexCoordP3ui(gl.funcs, C.GLenum(texture), C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoordP2uiv.xml -func (gl *GL) MultiTexCoordP2uiv(texture, gltype glbase.Enum, coords []uint32) { - C.gl4_3compat_glMultiTexCoordP2uiv(gl.funcs, C.GLenum(texture), C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoordP2ui.xml -func (gl *GL) MultiTexCoordP2ui(texture, gltype glbase.Enum, coords uint32) { - C.gl4_3compat_glMultiTexCoordP2ui(gl.funcs, C.GLenum(texture), C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoordP1uiv.xml -func (gl *GL) MultiTexCoordP1uiv(texture, gltype glbase.Enum, coords []uint32) { - C.gl4_3compat_glMultiTexCoordP1uiv(gl.funcs, C.GLenum(texture), C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoordP1ui.xml -func (gl *GL) MultiTexCoordP1ui(texture, gltype glbase.Enum, coords uint32) { - C.gl4_3compat_glMultiTexCoordP1ui(gl.funcs, C.GLenum(texture), C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordP4uiv.xml -func (gl *GL) TexCoordP4uiv(gltype glbase.Enum, coords []uint32) { - C.gl4_3compat_glTexCoordP4uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordP4ui.xml -func (gl *GL) TexCoordP4ui(gltype glbase.Enum, coords uint32) { - C.gl4_3compat_glTexCoordP4ui(gl.funcs, C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordP3uiv.xml -func (gl *GL) TexCoordP3uiv(gltype glbase.Enum, coords []uint32) { - C.gl4_3compat_glTexCoordP3uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordP3ui.xml -func (gl *GL) TexCoordP3ui(gltype glbase.Enum, coords uint32) { - C.gl4_3compat_glTexCoordP3ui(gl.funcs, C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordP2uiv.xml -func (gl *GL) TexCoordP2uiv(gltype glbase.Enum, coords []uint32) { - C.gl4_3compat_glTexCoordP2uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordP2ui.xml -func (gl *GL) TexCoordP2ui(gltype glbase.Enum, coords uint32) { - C.gl4_3compat_glTexCoordP2ui(gl.funcs, C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordP1uiv.xml -func (gl *GL) TexCoordP1uiv(gltype glbase.Enum, coords []uint32) { - C.gl4_3compat_glTexCoordP1uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordP1ui.xml -func (gl *GL) TexCoordP1ui(gltype glbase.Enum, coords uint32) { - C.gl4_3compat_glTexCoordP1ui(gl.funcs, C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexP4uiv.xml -func (gl *GL) VertexP4uiv(gltype glbase.Enum, value []uint32) { - C.gl4_3compat_glVertexP4uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexP4ui.xml -func (gl *GL) VertexP4ui(gltype glbase.Enum, value uint32) { - C.gl4_3compat_glVertexP4ui(gl.funcs, C.GLenum(gltype), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexP3uiv.xml -func (gl *GL) VertexP3uiv(gltype glbase.Enum, value []uint32) { - C.gl4_3compat_glVertexP3uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexP3ui.xml -func (gl *GL) VertexP3ui(gltype glbase.Enum, value uint32) { - C.gl4_3compat_glVertexP3ui(gl.funcs, C.GLenum(gltype), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexP2uiv.xml -func (gl *GL) VertexP2uiv(gltype glbase.Enum, value []uint32) { - C.gl4_3compat_glVertexP2uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexP2ui.xml -func (gl *GL) VertexP2ui(gltype glbase.Enum, value uint32) { - C.gl4_3compat_glVertexP2ui(gl.funcs, C.GLenum(gltype), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetQueryObjectui64v.xml -func (gl *GL) GetQueryObjectui64v(id uint32, pname glbase.Enum, params []uint64) { - C.gl4_3compat_glGetQueryObjectui64v(gl.funcs, C.GLuint(id), C.GLenum(pname), (*C.GLuint64)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetQueryObjecti64v.xml -func (gl *GL) GetQueryObjecti64v(id uint32, pname glbase.Enum, params []int64) { - C.gl4_3compat_glGetQueryObjecti64v(gl.funcs, C.GLuint(id), C.GLenum(pname), (*C.GLint64)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glQueryCounter.xml -func (gl *GL) QueryCounter(id uint32, target glbase.Enum) { - C.gl4_3compat_glQueryCounter(gl.funcs, C.GLuint(id), C.GLenum(target)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetSamplerParameterIuiv.xml -func (gl *GL) GetSamplerParameterIuiv(sampler uint32, pname glbase.Enum, params []uint32) { - C.gl4_3compat_glGetSamplerParameterIuiv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetSamplerParameterfv.xml -func (gl *GL) GetSamplerParameterfv(sampler uint32, pname glbase.Enum, params []float32) { - C.gl4_3compat_glGetSamplerParameterfv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetSamplerParameterIiv.xml -func (gl *GL) GetSamplerParameterIiv(sampler uint32, pname glbase.Enum, params []int32) { - C.gl4_3compat_glGetSamplerParameterIiv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetSamplerParameteriv.xml -func (gl *GL) GetSamplerParameteriv(sampler uint32, pname glbase.Enum, params []int32) { - C.gl4_3compat_glGetSamplerParameteriv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSamplerParameterIuiv.xml -func (gl *GL) SamplerParameterIuiv(sampler uint32, pname glbase.Enum, param []uint32) { - C.gl4_3compat_glSamplerParameterIuiv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶m[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSamplerParameterIiv.xml -func (gl *GL) SamplerParameterIiv(sampler uint32, pname glbase.Enum, param []int32) { - C.gl4_3compat_glSamplerParameterIiv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶m[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSamplerParameterfv.xml -func (gl *GL) SamplerParameterfv(sampler uint32, pname glbase.Enum, param []float32) { - C.gl4_3compat_glSamplerParameterfv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶m[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSamplerParameterf.xml -func (gl *GL) SamplerParameterf(sampler uint32, pname glbase.Enum, param float32) { - C.gl4_3compat_glSamplerParameterf(gl.funcs, C.GLuint(sampler), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSamplerParameteriv.xml -func (gl *GL) SamplerParameteriv(sampler uint32, pname glbase.Enum, param []int32) { - C.gl4_3compat_glSamplerParameteriv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶m[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSamplerParameteri.xml -func (gl *GL) SamplerParameteri(sampler uint32, pname glbase.Enum, param int32) { - C.gl4_3compat_glSamplerParameteri(gl.funcs, C.GLuint(sampler), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindSampler.xml -func (gl *GL) BindSampler(unit, sampler uint32) { - C.gl4_3compat_glBindSampler(gl.funcs, C.GLuint(unit), C.GLuint(sampler)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsSampler.xml -func (gl *GL) IsSampler(sampler uint32) bool { - glresult := C.gl4_3compat_glIsSampler(gl.funcs, C.GLuint(sampler)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDeleteSamplers.xml -func (gl *GL) DeleteSamplers(count int, samplers []uint32) { - C.gl4_3compat_glDeleteSamplers(gl.funcs, C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&samplers[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGenSamplers.xml -func (gl *GL) GenSamplers(count int, samplers []uint32) { - C.gl4_3compat_glGenSamplers(gl.funcs, C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&samplers[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetFragDataIndex.xml -func (gl *GL) GetFragDataIndex(program glbase.Program, name []byte) int32 { - glresult := C.gl4_3compat_glGetFragDataIndex(gl.funcs, C.GLuint(program), (*C.GLchar)(unsafe.Pointer(&name[0]))) - return int32(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindFragDataLocationIndexed.xml -func (gl *GL) BindFragDataLocationIndexed(program glbase.Program, colorNumber, index uint32, name []byte) { - C.gl4_3compat_glBindFragDataLocationIndexed(gl.funcs, C.GLuint(program), C.GLuint(colorNumber), C.GLuint(index), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribDivisor.xml -func (gl *GL) VertexAttribDivisor(index glbase.Attrib, divisor uint32) { - C.gl4_3compat_glVertexAttribDivisor(gl.funcs, C.GLuint(index), C.GLuint(divisor)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetQueryIndexediv.xml -func (gl *GL) GetQueryIndexediv(target glbase.Enum, index uint32, pname glbase.Enum, params []int32) { - C.gl4_3compat_glGetQueryIndexediv(gl.funcs, C.GLenum(target), C.GLuint(index), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEndQueryIndexed.xml -func (gl *GL) EndQueryIndexed(target glbase.Enum, index uint32) { - C.gl4_3compat_glEndQueryIndexed(gl.funcs, C.GLenum(target), C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBeginQueryIndexed.xml -func (gl *GL) BeginQueryIndexed(target glbase.Enum, index, id uint32) { - C.gl4_3compat_glBeginQueryIndexed(gl.funcs, C.GLenum(target), C.GLuint(index), C.GLuint(id)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawTransformFeedbackStream.xml -func (gl *GL) DrawTransformFeedbackStream(mode glbase.Enum, id, stream uint32) { - C.gl4_3compat_glDrawTransformFeedbackStream(gl.funcs, C.GLenum(mode), C.GLuint(id), C.GLuint(stream)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawTransformFeedback.xml -func (gl *GL) DrawTransformFeedback(mode glbase.Enum, id uint32) { - C.gl4_3compat_glDrawTransformFeedback(gl.funcs, C.GLenum(mode), C.GLuint(id)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glResumeTransformFeedback.xml -func (gl *GL) ResumeTransformFeedback() { - C.gl4_3compat_glResumeTransformFeedback(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPauseTransformFeedback.xml -func (gl *GL) PauseTransformFeedback() { - C.gl4_3compat_glPauseTransformFeedback(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsTransformFeedback.xml -func (gl *GL) IsTransformFeedback(id uint32) bool { - glresult := C.gl4_3compat_glIsTransformFeedback(gl.funcs, C.GLuint(id)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGenTransformFeedbacks.xml -func (gl *GL) GenTransformFeedbacks(n int, ids []uint32) { - C.gl4_3compat_glGenTransformFeedbacks(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&ids[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDeleteTransformFeedbacks.xml -func (gl *GL) DeleteTransformFeedbacks(n int, ids []uint32) { - C.gl4_3compat_glDeleteTransformFeedbacks(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&ids[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindTransformFeedback.xml -func (gl *GL) BindTransformFeedback(target glbase.Enum, id uint32) { - C.gl4_3compat_glBindTransformFeedback(gl.funcs, C.GLenum(target), C.GLuint(id)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPatchParameterfv.xml -func (gl *GL) PatchParameterfv(pname glbase.Enum, values []float32) { - C.gl4_3compat_glPatchParameterfv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPatchParameteri.xml -func (gl *GL) PatchParameteri(pname glbase.Enum, value int32) { - C.gl4_3compat_glPatchParameteri(gl.funcs, C.GLenum(pname), C.GLint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetProgramStageiv.xml -func (gl *GL) GetProgramStageiv(program glbase.Program, shadertype, pname glbase.Enum, values []int32) { - C.gl4_3compat_glGetProgramStageiv(gl.funcs, C.GLuint(program), C.GLenum(shadertype), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetUniformSubroutineuiv.xml -func (gl *GL) GetUniformSubroutineuiv(shadertype glbase.Enum, location glbase.Uniform, params []uint32) { - C.gl4_3compat_glGetUniformSubroutineuiv(gl.funcs, C.GLenum(shadertype), C.GLint(location), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformSubroutinesuiv.xml -func (gl *GL) UniformSubroutinesuiv(shadertype glbase.Enum, count int, value []uint32) { - C.gl4_3compat_glUniformSubroutinesuiv(gl.funcs, C.GLenum(shadertype), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveSubroutineName.xml -func (gl *GL) GetActiveSubroutineName(program glbase.Program, shadertype glbase.Enum, index uint32, bufSize int32, length []int32, name []byte) { - C.gl4_3compat_glGetActiveSubroutineName(gl.funcs, C.GLuint(program), C.GLenum(shadertype), C.GLuint(index), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveSubroutineUniformName.xml -func (gl *GL) GetActiveSubroutineUniformName(program glbase.Program, shadertype glbase.Enum, index uint32, bufSize int32, length []int32, name []byte) { - C.gl4_3compat_glGetActiveSubroutineUniformName(gl.funcs, C.GLuint(program), C.GLenum(shadertype), C.GLuint(index), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveSubroutineUniformiv.xml -func (gl *GL) GetActiveSubroutineUniformiv(program glbase.Program, shadertype glbase.Enum, index uint32, pname glbase.Enum, values []int32) { - C.gl4_3compat_glGetActiveSubroutineUniformiv(gl.funcs, C.GLuint(program), C.GLenum(shadertype), C.GLuint(index), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetSubroutineIndex.xml -func (gl *GL) GetSubroutineIndex(program glbase.Program, shadertype glbase.Enum, name []byte) uint32 { - glresult := C.gl4_3compat_glGetSubroutineIndex(gl.funcs, C.GLuint(program), C.GLenum(shadertype), (*C.GLchar)(unsafe.Pointer(&name[0]))) - return uint32(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetSubroutineUniformLocation.xml -func (gl *GL) GetSubroutineUniformLocation(program glbase.Program, shadertype glbase.Enum, name []byte) int32 { - glresult := C.gl4_3compat_glGetSubroutineUniformLocation(gl.funcs, C.GLuint(program), C.GLenum(shadertype), (*C.GLchar)(unsafe.Pointer(&name[0]))) - return int32(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetUniformdv.xml -func (gl *GL) GetUniformdv(program glbase.Program, location glbase.Uniform, params []float64) { - C.gl4_3compat_glGetUniformdv(gl.funcs, C.GLuint(program), C.GLint(location), (*C.GLdouble)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix4x3dv.xml -func (gl *GL) UniformMatrix4x3dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_3compat_glUniformMatrix4x3dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix4x2dv.xml -func (gl *GL) UniformMatrix4x2dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_3compat_glUniformMatrix4x2dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix3x4dv.xml -func (gl *GL) UniformMatrix3x4dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_3compat_glUniformMatrix3x4dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix3x2dv.xml -func (gl *GL) UniformMatrix3x2dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_3compat_glUniformMatrix3x2dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix2x4dv.xml -func (gl *GL) UniformMatrix2x4dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_3compat_glUniformMatrix2x4dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix2x3dv.xml -func (gl *GL) UniformMatrix2x3dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_3compat_glUniformMatrix2x3dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix4dv.xml -func (gl *GL) UniformMatrix4dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_3compat_glUniformMatrix4dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix3dv.xml -func (gl *GL) UniformMatrix3dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_3compat_glUniformMatrix3dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix2dv.xml -func (gl *GL) UniformMatrix2dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_3compat_glUniformMatrix2dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniform4dv.xml -func (gl *GL) Uniform4dv(location glbase.Uniform, count int, value []float64) { - C.gl4_3compat_glUniform4dv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniform3dv.xml -func (gl *GL) Uniform3dv(location glbase.Uniform, count int, value []float64) { - C.gl4_3compat_glUniform3dv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniform2dv.xml -func (gl *GL) Uniform2dv(location glbase.Uniform, count int, value []float64) { - C.gl4_3compat_glUniform2dv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniform1dv.xml -func (gl *GL) Uniform1dv(location glbase.Uniform, count int, value []float64) { - C.gl4_3compat_glUniform1dv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniform4d.xml -func (gl *GL) Uniform4d(location glbase.Uniform, v0, v1, v2, v3 float64) { - C.gl4_3compat_glUniform4d(gl.funcs, C.GLint(location), C.GLdouble(v0), C.GLdouble(v1), C.GLdouble(v2), C.GLdouble(v3)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniform3d.xml -func (gl *GL) Uniform3d(location glbase.Uniform, v0, v1, v2 float64) { - C.gl4_3compat_glUniform3d(gl.funcs, C.GLint(location), C.GLdouble(v0), C.GLdouble(v1), C.GLdouble(v2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniform2d.xml -func (gl *GL) Uniform2d(location glbase.Uniform, v0, v1 float64) { - C.gl4_3compat_glUniform2d(gl.funcs, C.GLint(location), C.GLdouble(v0), C.GLdouble(v1)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniform1d.xml -func (gl *GL) Uniform1d(location glbase.Uniform, v0 float64) { - C.gl4_3compat_glUniform1d(gl.funcs, C.GLint(location), C.GLdouble(v0)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawElementsIndirect.xml -func (gl *GL) DrawElementsIndirect(mode, gltype glbase.Enum, indirect interface{}) { - var indirect_ptr unsafe.Pointer - var indirect_v = reflect.ValueOf(indirect) - if indirect != nil && indirect_v.Kind() != reflect.Slice { - panic("parameter indirect must be a slice") - } - if indirect != nil { - indirect_ptr = unsafe.Pointer(indirect_v.Index(0).Addr().Pointer()) - } - C.gl4_3compat_glDrawElementsIndirect(gl.funcs, C.GLenum(mode), C.GLenum(gltype), indirect_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawArraysIndirect.xml -func (gl *GL) DrawArraysIndirect(mode glbase.Enum, indirect interface{}) { - var indirect_ptr unsafe.Pointer - var indirect_v = reflect.ValueOf(indirect) - if indirect != nil && indirect_v.Kind() != reflect.Slice { - panic("parameter indirect must be a slice") - } - if indirect != nil { - indirect_ptr = unsafe.Pointer(indirect_v.Index(0).Addr().Pointer()) - } - C.gl4_3compat_glDrawArraysIndirect(gl.funcs, C.GLenum(mode), indirect_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendFuncSeparatei.xml -func (gl *GL) BlendFuncSeparatei(buf uint32, srcRGB, dstRGB, srcAlpha, dstAlpha glbase.Enum) { - C.gl4_3compat_glBlendFuncSeparatei(gl.funcs, C.GLuint(buf), C.GLenum(srcRGB), C.GLenum(dstRGB), C.GLenum(srcAlpha), C.GLenum(dstAlpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendFunci.xml -func (gl *GL) BlendFunci(buf uint32, src, dst glbase.Enum) { - C.gl4_3compat_glBlendFunci(gl.funcs, C.GLuint(buf), C.GLenum(src), C.GLenum(dst)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendEquationSeparatei.xml -func (gl *GL) BlendEquationSeparatei(buf uint32, modeRGB, modeAlpha glbase.Enum) { - C.gl4_3compat_glBlendEquationSeparatei(gl.funcs, C.GLuint(buf), C.GLenum(modeRGB), C.GLenum(modeAlpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendEquationi.xml -func (gl *GL) BlendEquationi(buf uint32, mode glbase.Enum) { - C.gl4_3compat_glBlendEquationi(gl.funcs, C.GLuint(buf), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMinSampleShading.xml -func (gl *GL) MinSampleShading(value float32) { - C.gl4_3compat_glMinSampleShading(gl.funcs, C.GLfloat(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetDoublei_v.xml -func (gl *GL) GetDoublei_v(target glbase.Enum, index uint32, data []float64) { - C.gl4_3compat_glGetDoublei_v(gl.funcs, C.GLenum(target), C.GLuint(index), (*C.GLdouble)(unsafe.Pointer(&data[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetFloati_v.xml -func (gl *GL) GetFloati_v(target glbase.Enum, index uint32, data []float32) { - C.gl4_3compat_glGetFloati_v(gl.funcs, C.GLenum(target), C.GLuint(index), (*C.GLfloat)(unsafe.Pointer(&data[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDepthRangeIndexed.xml -func (gl *GL) DepthRangeIndexed(index uint32, n, f float64) { - C.gl4_3compat_glDepthRangeIndexed(gl.funcs, C.GLuint(index), C.GLdouble(n), C.GLdouble(f)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDepthRangeArrayv.xml -func (gl *GL) DepthRangeArrayv(first uint32, count int, v []float64) { - C.gl4_3compat_glDepthRangeArrayv(gl.funcs, C.GLuint(first), C.GLsizei(count), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glScissorIndexedv.xml -func (gl *GL) ScissorIndexedv(index uint32, v []int32) { - C.gl4_3compat_glScissorIndexedv(gl.funcs, C.GLuint(index), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glScissorIndexed.xml -func (gl *GL) ScissorIndexed(index uint32, left, bottom int32, width, height int) { - C.gl4_3compat_glScissorIndexed(gl.funcs, C.GLuint(index), C.GLint(left), C.GLint(bottom), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glScissorArrayv.xml -func (gl *GL) ScissorArrayv(first uint32, count int, v []int32) { - C.gl4_3compat_glScissorArrayv(gl.funcs, C.GLuint(first), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glViewportIndexedfv.xml -func (gl *GL) ViewportIndexedfv(index uint32, v []float32) { - C.gl4_3compat_glViewportIndexedfv(gl.funcs, C.GLuint(index), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glViewportIndexedf.xml -func (gl *GL) ViewportIndexedf(index uint32, x, y, w, h float32) { - C.gl4_3compat_glViewportIndexedf(gl.funcs, C.GLuint(index), C.GLfloat(x), C.GLfloat(y), C.GLfloat(w), C.GLfloat(h)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glViewportArrayv.xml -func (gl *GL) ViewportArrayv(first uint32, count int, v []float32) { - C.gl4_3compat_glViewportArrayv(gl.funcs, C.GLuint(first), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetVertexAttribLdv.xml -func (gl *GL) GetVertexAttribLdv(index glbase.Attrib, pname glbase.Enum, params []float64) { - C.gl4_3compat_glGetVertexAttribLdv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribLPointer.xml -func (gl *GL) VertexAttribLPointer(index glbase.Attrib, size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl4_3compat_glVertexAttribLPointer(gl.funcs, C.GLuint(index), C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribL4dv.xml -func (gl *GL) VertexAttribL4dv(index glbase.Attrib, v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glVertexAttribL4dv(gl.funcs, C.GLuint(index), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribL3dv.xml -func (gl *GL) VertexAttribL3dv(index glbase.Attrib, v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glVertexAttribL3dv(gl.funcs, C.GLuint(index), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribL2dv.xml -func (gl *GL) VertexAttribL2dv(index glbase.Attrib, v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glVertexAttribL2dv(gl.funcs, C.GLuint(index), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribL1dv.xml -func (gl *GL) VertexAttribL1dv(index glbase.Attrib, v []float64) { - C.gl4_3compat_glVertexAttribL1dv(gl.funcs, C.GLuint(index), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribL4d.xml -func (gl *GL) VertexAttribL4d(index glbase.Attrib, x, y, z, w float64) { - C.gl4_3compat_glVertexAttribL4d(gl.funcs, C.GLuint(index), C.GLdouble(x), C.GLdouble(y), C.GLdouble(z), C.GLdouble(w)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribL3d.xml -func (gl *GL) VertexAttribL3d(index glbase.Attrib, x, y, z float64) { - C.gl4_3compat_glVertexAttribL3d(gl.funcs, C.GLuint(index), C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribL2d.xml -func (gl *GL) VertexAttribL2d(index glbase.Attrib, x, y float64) { - C.gl4_3compat_glVertexAttribL2d(gl.funcs, C.GLuint(index), C.GLdouble(x), C.GLdouble(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribL1d.xml -func (gl *GL) VertexAttribL1d(index glbase.Attrib, x float64) { - C.gl4_3compat_glVertexAttribL1d(gl.funcs, C.GLuint(index), C.GLdouble(x)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetProgramPipelineInfoLog.xml -func (gl *GL) GetProgramPipelineInfoLog(pipeline uint32, bufSize int32, length []int32, infoLog []byte) { - C.gl4_3compat_glGetProgramPipelineInfoLog(gl.funcs, C.GLuint(pipeline), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLchar)(unsafe.Pointer(&infoLog[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glValidateProgramPipeline.xml -func (gl *GL) ValidateProgramPipeline(pipeline uint32) { - C.gl4_3compat_glValidateProgramPipeline(gl.funcs, C.GLuint(pipeline)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix4x3dv.xml -func (gl *GL) ProgramUniformMatrix4x3dv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float64) { - if len(value) != 3 { - panic("parameter value has incorrect length") - } - C.gl4_3compat_glProgramUniformMatrix4x3dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix3x4dv.xml -func (gl *GL) ProgramUniformMatrix3x4dv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float64) { - if len(value) != 4 { - panic("parameter value has incorrect length") - } - C.gl4_3compat_glProgramUniformMatrix3x4dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix4x2dv.xml -func (gl *GL) ProgramUniformMatrix4x2dv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float64) { - if len(value) != 2 { - panic("parameter value has incorrect length") - } - C.gl4_3compat_glProgramUniformMatrix4x2dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix2x4dv.xml -func (gl *GL) ProgramUniformMatrix2x4dv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float64) { - if len(value) != 4 { - panic("parameter value has incorrect length") - } - C.gl4_3compat_glProgramUniformMatrix2x4dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix3x2dv.xml -func (gl *GL) ProgramUniformMatrix3x2dv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float64) { - if len(value) != 2 { - panic("parameter value has incorrect length") - } - C.gl4_3compat_glProgramUniformMatrix3x2dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix2x3dv.xml -func (gl *GL) ProgramUniformMatrix2x3dv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float64) { - if len(value) != 3 { - panic("parameter value has incorrect length") - } - C.gl4_3compat_glProgramUniformMatrix2x3dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix4x3fv.xml -func (gl *GL) ProgramUniformMatrix4x3fv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float32) { - if len(value) != 3 { - panic("parameter value has incorrect length") - } - C.gl4_3compat_glProgramUniformMatrix4x3fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix3x4fv.xml -func (gl *GL) ProgramUniformMatrix3x4fv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float32) { - if len(value) != 4 { - panic("parameter value has incorrect length") - } - C.gl4_3compat_glProgramUniformMatrix3x4fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix4x2fv.xml -func (gl *GL) ProgramUniformMatrix4x2fv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float32) { - if len(value) != 2 { - panic("parameter value has incorrect length") - } - C.gl4_3compat_glProgramUniformMatrix4x2fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix2x4fv.xml -func (gl *GL) ProgramUniformMatrix2x4fv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float32) { - if len(value) != 4 { - panic("parameter value has incorrect length") - } - C.gl4_3compat_glProgramUniformMatrix2x4fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix3x2fv.xml -func (gl *GL) ProgramUniformMatrix3x2fv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float32) { - if len(value) != 2 { - panic("parameter value has incorrect length") - } - C.gl4_3compat_glProgramUniformMatrix3x2fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix2x3fv.xml -func (gl *GL) ProgramUniformMatrix2x3fv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float32) { - if len(value) != 3 { - panic("parameter value has incorrect length") - } - C.gl4_3compat_glProgramUniformMatrix2x3fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix4dv.xml -func (gl *GL) ProgramUniformMatrix4dv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float64) { - if len(value) != 4 { - panic("parameter value has incorrect length") - } - C.gl4_3compat_glProgramUniformMatrix4dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix3dv.xml -func (gl *GL) ProgramUniformMatrix3dv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float64) { - if len(value) != 3 { - panic("parameter value has incorrect length") - } - C.gl4_3compat_glProgramUniformMatrix3dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix2dv.xml -func (gl *GL) ProgramUniformMatrix2dv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float64) { - if len(value) != 2 { - panic("parameter value has incorrect length") - } - C.gl4_3compat_glProgramUniformMatrix2dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix4fv.xml -func (gl *GL) ProgramUniformMatrix4fv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float32) { - if len(value) != 4 { - panic("parameter value has incorrect length") - } - C.gl4_3compat_glProgramUniformMatrix4fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix3fv.xml -func (gl *GL) ProgramUniformMatrix3fv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float32) { - if len(value) != 3 { - panic("parameter value has incorrect length") - } - C.gl4_3compat_glProgramUniformMatrix3fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix2fv.xml -func (gl *GL) ProgramUniformMatrix2fv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float32) { - if len(value) != 2 { - panic("parameter value has incorrect length") - } - C.gl4_3compat_glProgramUniformMatrix2fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform4uiv.xml -func (gl *GL) ProgramUniform4uiv(program glbase.Program, location glbase.Uniform, count int, value []uint32) { - C.gl4_3compat_glProgramUniform4uiv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform4ui.xml -func (gl *GL) ProgramUniform4ui(program glbase.Program, location glbase.Uniform, v0, v1, v2, v3 uint32) { - C.gl4_3compat_glProgramUniform4ui(gl.funcs, C.GLuint(program), C.GLint(location), C.GLuint(v0), C.GLuint(v1), C.GLuint(v2), C.GLuint(v3)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform4dv.xml -func (gl *GL) ProgramUniform4dv(program glbase.Program, location glbase.Uniform, count int, value []float64) { - if len(value) != 4 { - panic("parameter value has incorrect length") - } - C.gl4_3compat_glProgramUniform4dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform4d.xml -func (gl *GL) ProgramUniform4d(program glbase.Program, location glbase.Uniform, v0, v1, v2, v3 float64) { - C.gl4_3compat_glProgramUniform4d(gl.funcs, C.GLuint(program), C.GLint(location), C.GLdouble(v0), C.GLdouble(v1), C.GLdouble(v2), C.GLdouble(v3)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform4fv.xml -func (gl *GL) ProgramUniform4fv(program glbase.Program, location glbase.Uniform, count int, value []float32) { - if len(value) != 4 { - panic("parameter value has incorrect length") - } - C.gl4_3compat_glProgramUniform4fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform4f.xml -func (gl *GL) ProgramUniform4f(program glbase.Program, location glbase.Uniform, v0, v1, v2, v3 float32) { - C.gl4_3compat_glProgramUniform4f(gl.funcs, C.GLuint(program), C.GLint(location), C.GLfloat(v0), C.GLfloat(v1), C.GLfloat(v2), C.GLfloat(v3)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform4iv.xml -func (gl *GL) ProgramUniform4iv(program glbase.Program, location glbase.Uniform, count int, value []int32) { - if len(value) != 4 { - panic("parameter value has incorrect length") - } - C.gl4_3compat_glProgramUniform4iv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform4i.xml -func (gl *GL) ProgramUniform4i(program glbase.Program, location glbase.Uniform, v0, v1, v2, v3 int32) { - C.gl4_3compat_glProgramUniform4i(gl.funcs, C.GLuint(program), C.GLint(location), C.GLint(v0), C.GLint(v1), C.GLint(v2), C.GLint(v3)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform3uiv.xml -func (gl *GL) ProgramUniform3uiv(program glbase.Program, location glbase.Uniform, count int, value []uint32) { - C.gl4_3compat_glProgramUniform3uiv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform3ui.xml -func (gl *GL) ProgramUniform3ui(program glbase.Program, location glbase.Uniform, v0, v1, v2 uint32) { - C.gl4_3compat_glProgramUniform3ui(gl.funcs, C.GLuint(program), C.GLint(location), C.GLuint(v0), C.GLuint(v1), C.GLuint(v2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform3dv.xml -func (gl *GL) ProgramUniform3dv(program glbase.Program, location glbase.Uniform, count int, value []float64) { - if len(value) != 3 { - panic("parameter value has incorrect length") - } - C.gl4_3compat_glProgramUniform3dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform3d.xml -func (gl *GL) ProgramUniform3d(program glbase.Program, location glbase.Uniform, v0, v1, v2 float64) { - C.gl4_3compat_glProgramUniform3d(gl.funcs, C.GLuint(program), C.GLint(location), C.GLdouble(v0), C.GLdouble(v1), C.GLdouble(v2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform3fv.xml -func (gl *GL) ProgramUniform3fv(program glbase.Program, location glbase.Uniform, count int, value []float32) { - if len(value) != 3 { - panic("parameter value has incorrect length") - } - C.gl4_3compat_glProgramUniform3fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform3f.xml -func (gl *GL) ProgramUniform3f(program glbase.Program, location glbase.Uniform, v0, v1, v2 float32) { - C.gl4_3compat_glProgramUniform3f(gl.funcs, C.GLuint(program), C.GLint(location), C.GLfloat(v0), C.GLfloat(v1), C.GLfloat(v2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform3iv.xml -func (gl *GL) ProgramUniform3iv(program glbase.Program, location glbase.Uniform, count int, value []int32) { - if len(value) != 3 { - panic("parameter value has incorrect length") - } - C.gl4_3compat_glProgramUniform3iv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform3i.xml -func (gl *GL) ProgramUniform3i(program glbase.Program, location glbase.Uniform, v0, v1, v2 int32) { - C.gl4_3compat_glProgramUniform3i(gl.funcs, C.GLuint(program), C.GLint(location), C.GLint(v0), C.GLint(v1), C.GLint(v2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform2uiv.xml -func (gl *GL) ProgramUniform2uiv(program glbase.Program, location glbase.Uniform, count int, value []uint32) { - C.gl4_3compat_glProgramUniform2uiv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform2ui.xml -func (gl *GL) ProgramUniform2ui(program glbase.Program, location glbase.Uniform, v0, v1 uint32) { - C.gl4_3compat_glProgramUniform2ui(gl.funcs, C.GLuint(program), C.GLint(location), C.GLuint(v0), C.GLuint(v1)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform2dv.xml -func (gl *GL) ProgramUniform2dv(program glbase.Program, location glbase.Uniform, count int, value []float64) { - if len(value) != 2 { - panic("parameter value has incorrect length") - } - C.gl4_3compat_glProgramUniform2dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform2d.xml -func (gl *GL) ProgramUniform2d(program glbase.Program, location glbase.Uniform, v0, v1 float64) { - C.gl4_3compat_glProgramUniform2d(gl.funcs, C.GLuint(program), C.GLint(location), C.GLdouble(v0), C.GLdouble(v1)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform2fv.xml -func (gl *GL) ProgramUniform2fv(program glbase.Program, location glbase.Uniform, count int, value []float32) { - if len(value) != 2 { - panic("parameter value has incorrect length") - } - C.gl4_3compat_glProgramUniform2fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform2f.xml -func (gl *GL) ProgramUniform2f(program glbase.Program, location glbase.Uniform, v0, v1 float32) { - C.gl4_3compat_glProgramUniform2f(gl.funcs, C.GLuint(program), C.GLint(location), C.GLfloat(v0), C.GLfloat(v1)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform2iv.xml -func (gl *GL) ProgramUniform2iv(program glbase.Program, location glbase.Uniform, count int, value []int32) { - if len(value) != 2 { - panic("parameter value has incorrect length") - } - C.gl4_3compat_glProgramUniform2iv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform2i.xml -func (gl *GL) ProgramUniform2i(program glbase.Program, location glbase.Uniform, v0, v1 int32) { - C.gl4_3compat_glProgramUniform2i(gl.funcs, C.GLuint(program), C.GLint(location), C.GLint(v0), C.GLint(v1)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform1uiv.xml -func (gl *GL) ProgramUniform1uiv(program glbase.Program, location glbase.Uniform, count int, value []uint32) { - C.gl4_3compat_glProgramUniform1uiv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform1ui.xml -func (gl *GL) ProgramUniform1ui(program glbase.Program, location glbase.Uniform, v0 uint32) { - C.gl4_3compat_glProgramUniform1ui(gl.funcs, C.GLuint(program), C.GLint(location), C.GLuint(v0)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform1dv.xml -func (gl *GL) ProgramUniform1dv(program glbase.Program, location glbase.Uniform, count int, value []float64) { - C.gl4_3compat_glProgramUniform1dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform1d.xml -func (gl *GL) ProgramUniform1d(program glbase.Program, location glbase.Uniform, v0 float64) { - C.gl4_3compat_glProgramUniform1d(gl.funcs, C.GLuint(program), C.GLint(location), C.GLdouble(v0)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform1fv.xml -func (gl *GL) ProgramUniform1fv(program glbase.Program, location glbase.Uniform, count int, value []float32) { - C.gl4_3compat_glProgramUniform1fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform1f.xml -func (gl *GL) ProgramUniform1f(program glbase.Program, location glbase.Uniform, v0 float32) { - C.gl4_3compat_glProgramUniform1f(gl.funcs, C.GLuint(program), C.GLint(location), C.GLfloat(v0)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform1iv.xml -func (gl *GL) ProgramUniform1iv(program glbase.Program, location glbase.Uniform, count int, value []int32) { - C.gl4_3compat_glProgramUniform1iv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform1i.xml -func (gl *GL) ProgramUniform1i(program glbase.Program, location glbase.Uniform, v0 int32) { - C.gl4_3compat_glProgramUniform1i(gl.funcs, C.GLuint(program), C.GLint(location), C.GLint(v0)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetProgramPipelineiv.xml -func (gl *GL) GetProgramPipelineiv(pipeline uint32, pname glbase.Enum, params []int32) { - C.gl4_3compat_glGetProgramPipelineiv(gl.funcs, C.GLuint(pipeline), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsProgramPipeline.xml -func (gl *GL) IsProgramPipeline(pipeline uint32) bool { - glresult := C.gl4_3compat_glIsProgramPipeline(gl.funcs, C.GLuint(pipeline)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGenProgramPipelines.xml -func (gl *GL) GenProgramPipelines(n int, pipelines []uint32) { - C.gl4_3compat_glGenProgramPipelines(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&pipelines[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDeleteProgramPipelines.xml -func (gl *GL) DeleteProgramPipelines(n int, pipelines []uint32) { - C.gl4_3compat_glDeleteProgramPipelines(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&pipelines[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindProgramPipeline.xml -func (gl *GL) BindProgramPipeline(pipeline uint32) { - C.gl4_3compat_glBindProgramPipeline(gl.funcs, C.GLuint(pipeline)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glActiveShaderProgram.xml -func (gl *GL) ActiveShaderProgram(pipeline uint32, program glbase.Program) { - C.gl4_3compat_glActiveShaderProgram(gl.funcs, C.GLuint(pipeline), C.GLuint(program)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUseProgramStages.xml -func (gl *GL) UseProgramStages(pipeline uint32, stages glbase.Bitfield, program glbase.Program) { - C.gl4_3compat_glUseProgramStages(gl.funcs, C.GLuint(pipeline), C.GLbitfield(stages), C.GLuint(program)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramParameteri.xml -func (gl *GL) ProgramParameteri(program glbase.Program, pname glbase.Enum, value int32) { - C.gl4_3compat_glProgramParameteri(gl.funcs, C.GLuint(program), C.GLenum(pname), C.GLint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramBinary.xml -func (gl *GL) ProgramBinary(program glbase.Program, binaryFormat glbase.Enum, binary interface{}, length int32) { - var binary_ptr unsafe.Pointer - var binary_v = reflect.ValueOf(binary) - if binary != nil && binary_v.Kind() != reflect.Slice { - panic("parameter binary must be a slice") - } - if binary != nil { - binary_ptr = unsafe.Pointer(binary_v.Index(0).Addr().Pointer()) - } - C.gl4_3compat_glProgramBinary(gl.funcs, C.GLuint(program), C.GLenum(binaryFormat), binary_ptr, C.GLsizei(length)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetProgramBinary.xml -func (gl *GL) GetProgramBinary(program glbase.Program, bufSize int32, length []int32, binaryFormat []glbase.Enum, binary interface{}) { - var binary_ptr unsafe.Pointer - var binary_v = reflect.ValueOf(binary) - if binary != nil && binary_v.Kind() != reflect.Slice { - panic("parameter binary must be a slice") - } - if binary != nil { - binary_ptr = unsafe.Pointer(binary_v.Index(0).Addr().Pointer()) - } - C.gl4_3compat_glGetProgramBinary(gl.funcs, C.GLuint(program), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLenum)(unsafe.Pointer(&binaryFormat[0])), binary_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearDepthf.xml -func (gl *GL) ClearDepthf(dd float32) { - C.gl4_3compat_glClearDepthf(gl.funcs, C.GLfloat(dd)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDepthRangef.xml -func (gl *GL) DepthRangef(n, f float32) { - C.gl4_3compat_glDepthRangef(gl.funcs, C.GLfloat(n), C.GLfloat(f)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetShaderPrecisionFormat.xml -func (gl *GL) GetShaderPrecisionFormat(shadertype, precisionType glbase.Enum, range_, precision []int32) { - C.gl4_3compat_glGetShaderPrecisionFormat(gl.funcs, C.GLenum(shadertype), C.GLenum(precisionType), (*C.GLint)(unsafe.Pointer(&range_[0])), (*C.GLint)(unsafe.Pointer(&precision[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glShaderBinary.xml -func (gl *GL) ShaderBinary(count int, shaders []glbase.Shader, binaryFormat glbase.Enum, binary interface{}, length int32) { - var binary_ptr unsafe.Pointer - var binary_v = reflect.ValueOf(binary) - if binary != nil && binary_v.Kind() != reflect.Slice { - panic("parameter binary must be a slice") - } - if binary != nil { - binary_ptr = unsafe.Pointer(binary_v.Index(0).Addr().Pointer()) - } - C.gl4_3compat_glShaderBinary(gl.funcs, C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&shaders[0])), C.GLenum(binaryFormat), binary_ptr, C.GLsizei(length)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glReleaseShaderCompiler.xml -func (gl *GL) ReleaseShaderCompiler() { - C.gl4_3compat_glReleaseShaderCompiler(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexStorage3D.xml -func (gl *GL) TexStorage3D(target glbase.Enum, levels int32, internalFormat glbase.Enum, width, height int, depth int32) { - C.gl4_3compat_glTexStorage3D(gl.funcs, C.GLenum(target), C.GLsizei(levels), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexStorage2D.xml -func (gl *GL) TexStorage2D(target glbase.Enum, levels int32, internalFormat glbase.Enum, width, height int) { - C.gl4_3compat_glTexStorage2D(gl.funcs, C.GLenum(target), C.GLsizei(levels), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexStorage1D.xml -func (gl *GL) TexStorage1D(target glbase.Enum, levels int32, internalFormat glbase.Enum, width int) { - C.gl4_3compat_glTexStorage1D(gl.funcs, C.GLenum(target), C.GLsizei(levels), C.GLenum(internalFormat), C.GLsizei(width)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMemoryBarrier.xml -func (gl *GL) MemoryBarrier(barriers glbase.Bitfield) { - C.gl4_3compat_glMemoryBarrier(gl.funcs, C.GLbitfield(barriers)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindImageTexture.xml -func (gl *GL) BindImageTexture(unit uint32, texture glbase.Texture, level int, layered bool, layer int32, access, format glbase.Enum) { - C.gl4_3compat_glBindImageTexture(gl.funcs, C.GLuint(unit), C.GLuint(texture), C.GLint(level), *(*C.GLboolean)(unsafe.Pointer(&layered)), C.GLint(layer), C.GLenum(access), C.GLenum(format)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveAtomicCounterBufferiv.xml -func (gl *GL) GetActiveAtomicCounterBufferiv(program glbase.Program, bufferIndex uint32, pname glbase.Enum, params []int32) { - C.gl4_3compat_glGetActiveAtomicCounterBufferiv(gl.funcs, C.GLuint(program), C.GLuint(bufferIndex), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetInternalformativ.xml -func (gl *GL) GetInternalformativ(target, internalFormat, pname glbase.Enum, bufSize int32, params []int32) { - C.gl4_3compat_glGetInternalformativ(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLenum(pname), C.GLsizei(bufSize), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawTransformFeedbackStreamInstanced.xml -func (gl *GL) DrawTransformFeedbackStreamInstanced(mode glbase.Enum, id, stream uint32, instancecount int32) { - C.gl4_3compat_glDrawTransformFeedbackStreamInstanced(gl.funcs, C.GLenum(mode), C.GLuint(id), C.GLuint(stream), C.GLsizei(instancecount)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawTransformFeedbackInstanced.xml -func (gl *GL) DrawTransformFeedbackInstanced(mode glbase.Enum, id uint32, instancecount int32) { - C.gl4_3compat_glDrawTransformFeedbackInstanced(gl.funcs, C.GLenum(mode), C.GLuint(id), C.GLsizei(instancecount)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawElementsInstancedBaseVertexBaseInstance.xml -func (gl *GL) DrawElementsInstancedBaseVertexBaseInstance(mode glbase.Enum, count int, gltype glbase.Enum, indices interface{}, instancecount, basevertex int32, baseinstance uint32) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl4_3compat_glDrawElementsInstancedBaseVertexBaseInstance(gl.funcs, C.GLenum(mode), C.GLsizei(count), C.GLenum(gltype), indices_ptr, C.GLsizei(instancecount), C.GLint(basevertex), C.GLuint(baseinstance)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawElementsInstancedBaseInstance.xml -func (gl *GL) DrawElementsInstancedBaseInstance(mode glbase.Enum, count int, gltype glbase.Enum, indices interface{}, instancecount int32, baseinstance uint32) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl4_3compat_glDrawElementsInstancedBaseInstance(gl.funcs, C.GLenum(mode), C.GLsizei(count), C.GLenum(gltype), indices_ptr, C.GLsizei(instancecount), C.GLuint(baseinstance)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawArraysInstancedBaseInstance.xml -func (gl *GL) DrawArraysInstancedBaseInstance(mode glbase.Enum, first, count int, instancecount int32, baseinstance uint32) { - C.gl4_3compat_glDrawArraysInstancedBaseInstance(gl.funcs, C.GLenum(mode), C.GLint(first), C.GLsizei(count), C.GLsizei(instancecount), C.GLuint(baseinstance)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexStorage3DMultisample.xml -func (gl *GL) TexStorage3DMultisample(target glbase.Enum, samples int32, internalFormat glbase.Enum, width, height int, depth int32, fixedsamplelocations bool) { - C.gl4_3compat_glTexStorage3DMultisample(gl.funcs, C.GLenum(target), C.GLsizei(samples), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), *(*C.GLboolean)(unsafe.Pointer(&fixedsamplelocations))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexStorage2DMultisample.xml -func (gl *GL) TexStorage2DMultisample(target glbase.Enum, samples int32, internalFormat glbase.Enum, width, height int, fixedsamplelocations bool) { - C.gl4_3compat_glTexStorage2DMultisample(gl.funcs, C.GLenum(target), C.GLsizei(samples), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), *(*C.GLboolean)(unsafe.Pointer(&fixedsamplelocations))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexBufferRange.xml -func (gl *GL) TexBufferRange(target, internalFormat glbase.Enum, buffer glbase.Buffer, offset, size int) { - C.gl4_3compat_glTexBufferRange(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLuint(buffer), C.GLintptr(offset), C.GLsizeiptr(size)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glShaderStorageBlockBinding.xml -func (gl *GL) ShaderStorageBlockBinding(program glbase.Program, storageBlockIndex, storageBlockBinding uint32) { - C.gl4_3compat_glShaderStorageBlockBinding(gl.funcs, C.GLuint(program), C.GLuint(storageBlockIndex), C.GLuint(storageBlockBinding)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetProgramResourceLocationIndex.xml -func (gl *GL) GetProgramResourceLocationIndex(program glbase.Program, programInterface glbase.Enum, name []byte) int32 { - glresult := C.gl4_3compat_glGetProgramResourceLocationIndex(gl.funcs, C.GLuint(program), C.GLenum(programInterface), (*C.GLchar)(unsafe.Pointer(&name[0]))) - return int32(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetProgramResourceLocation.xml -func (gl *GL) GetProgramResourceLocation(program glbase.Program, programInterface glbase.Enum, name []byte) int32 { - glresult := C.gl4_3compat_glGetProgramResourceLocation(gl.funcs, C.GLuint(program), C.GLenum(programInterface), (*C.GLchar)(unsafe.Pointer(&name[0]))) - return int32(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetProgramResourceiv.xml -func (gl *GL) GetProgramResourceiv(program glbase.Program, programInterface glbase.Enum, index uint32, propCount int32, props []glbase.Enum, bufSize int32, length, params []int32) { - C.gl4_3compat_glGetProgramResourceiv(gl.funcs, C.GLuint(program), C.GLenum(programInterface), C.GLuint(index), C.GLsizei(propCount), (*C.GLenum)(unsafe.Pointer(&props[0])), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetProgramResourceName.xml -func (gl *GL) GetProgramResourceName(program glbase.Program, programInterface glbase.Enum, index uint32, bufSize int32, length []int32, name []byte) { - C.gl4_3compat_glGetProgramResourceName(gl.funcs, C.GLuint(program), C.GLenum(programInterface), C.GLuint(index), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetProgramResourceIndex.xml -func (gl *GL) GetProgramResourceIndex(program glbase.Program, programInterface glbase.Enum, name []byte) uint32 { - glresult := C.gl4_3compat_glGetProgramResourceIndex(gl.funcs, C.GLuint(program), C.GLenum(programInterface), (*C.GLchar)(unsafe.Pointer(&name[0]))) - return uint32(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetProgramInterfaceiv.xml -func (gl *GL) GetProgramInterfaceiv(program glbase.Program, programInterface, pname glbase.Enum, params []int32) { - C.gl4_3compat_glGetProgramInterfaceiv(gl.funcs, C.GLuint(program), C.GLenum(programInterface), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiDrawElementsIndirect.xml -func (gl *GL) MultiDrawElementsIndirect(mode, gltype glbase.Enum, indirect interface{}, drawcount int32, stride int) { - var indirect_ptr unsafe.Pointer - var indirect_v = reflect.ValueOf(indirect) - if indirect != nil && indirect_v.Kind() != reflect.Slice { - panic("parameter indirect must be a slice") - } - if indirect != nil { - indirect_ptr = unsafe.Pointer(indirect_v.Index(0).Addr().Pointer()) - } - C.gl4_3compat_glMultiDrawElementsIndirect(gl.funcs, C.GLenum(mode), C.GLenum(gltype), indirect_ptr, C.GLsizei(drawcount), C.GLsizei(stride)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiDrawArraysIndirect.xml -func (gl *GL) MultiDrawArraysIndirect(mode glbase.Enum, indirect interface{}, drawcount int32, stride int) { - var indirect_ptr unsafe.Pointer - var indirect_v = reflect.ValueOf(indirect) - if indirect != nil && indirect_v.Kind() != reflect.Slice { - panic("parameter indirect must be a slice") - } - if indirect != nil { - indirect_ptr = unsafe.Pointer(indirect_v.Index(0).Addr().Pointer()) - } - C.gl4_3compat_glMultiDrawArraysIndirect(gl.funcs, C.GLenum(mode), indirect_ptr, C.GLsizei(drawcount), C.GLsizei(stride)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glInvalidateSubFramebuffer.xml -func (gl *GL) InvalidateSubFramebuffer(target glbase.Enum, numAttachments int32, attachments []glbase.Enum, x, y, width, height int) { - C.gl4_3compat_glInvalidateSubFramebuffer(gl.funcs, C.GLenum(target), C.GLsizei(numAttachments), (*C.GLenum)(unsafe.Pointer(&attachments[0])), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glInvalidateFramebuffer.xml -func (gl *GL) InvalidateFramebuffer(target glbase.Enum, numAttachments int32, attachments []glbase.Enum) { - C.gl4_3compat_glInvalidateFramebuffer(gl.funcs, C.GLenum(target), C.GLsizei(numAttachments), (*C.GLenum)(unsafe.Pointer(&attachments[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glInvalidateBufferData.xml -func (gl *GL) InvalidateBufferData(buffer glbase.Buffer) { - C.gl4_3compat_glInvalidateBufferData(gl.funcs, C.GLuint(buffer)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glInvalidateBufferSubData.xml -func (gl *GL) InvalidateBufferSubData(buffer glbase.Buffer, offset, length int) { - C.gl4_3compat_glInvalidateBufferSubData(gl.funcs, C.GLuint(buffer), C.GLintptr(offset), C.GLsizeiptr(length)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glInvalidateTexImage.xml -func (gl *GL) InvalidateTexImage(texture glbase.Texture, level int) { - C.gl4_3compat_glInvalidateTexImage(gl.funcs, C.GLuint(texture), C.GLint(level)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glInvalidateTexSubImage.xml -func (gl *GL) InvalidateTexSubImage(texture glbase.Texture, level, xoffset, yoffset int, zoffset int32, width, height int, depth int32) { - C.gl4_3compat_glInvalidateTexSubImage(gl.funcs, C.GLuint(texture), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(zoffset), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetInternalformati64v.xml -func (gl *GL) GetInternalformati64v(target, internalFormat, pname glbase.Enum, bufSize int32, params []int64) { - C.gl4_3compat_glGetInternalformati64v(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLenum(pname), C.GLsizei(bufSize), (*C.GLint64)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetFramebufferParameteriv.xml -func (gl *GL) GetFramebufferParameteriv(target, pname glbase.Enum, params []int32) { - C.gl4_3compat_glGetFramebufferParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFramebufferParameteri.xml -func (gl *GL) FramebufferParameteri(target, pname glbase.Enum, param int32) { - C.gl4_3compat_glFramebufferParameteri(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexBindingDivisor.xml -func (gl *GL) VertexBindingDivisor(bindingindex, divisor uint32) { - C.gl4_3compat_glVertexBindingDivisor(gl.funcs, C.GLuint(bindingindex), C.GLuint(divisor)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribBinding.xml -func (gl *GL) VertexAttribBinding(attribindex, bindingindex uint32) { - C.gl4_3compat_glVertexAttribBinding(gl.funcs, C.GLuint(attribindex), C.GLuint(bindingindex)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribLFormat.xml -func (gl *GL) VertexAttribLFormat(attribindex uint32, size int, gltype glbase.Enum, relativeoffset uint32) { - C.gl4_3compat_glVertexAttribLFormat(gl.funcs, C.GLuint(attribindex), C.GLint(size), C.GLenum(gltype), C.GLuint(relativeoffset)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribIFormat.xml -func (gl *GL) VertexAttribIFormat(attribindex uint32, size int, gltype glbase.Enum, relativeoffset uint32) { - C.gl4_3compat_glVertexAttribIFormat(gl.funcs, C.GLuint(attribindex), C.GLint(size), C.GLenum(gltype), C.GLuint(relativeoffset)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribFormat.xml -func (gl *GL) VertexAttribFormat(attribindex uint32, size int, gltype glbase.Enum, normalized bool, relativeoffset uint32) { - C.gl4_3compat_glVertexAttribFormat(gl.funcs, C.GLuint(attribindex), C.GLint(size), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), C.GLuint(relativeoffset)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindVertexBuffer.xml -func (gl *GL) BindVertexBuffer(bindingindex uint32, buffer glbase.Buffer, offset, stride int) { - C.gl4_3compat_glBindVertexBuffer(gl.funcs, C.GLuint(bindingindex), C.GLuint(buffer), C.GLintptr(offset), C.GLsizei(stride)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTextureView.xml -func (gl *GL) TextureView(texture glbase.Texture, target glbase.Enum, origtexture uint32, internalFormat glbase.Enum, minlevel, numlevels, minlayer, numlayers uint32) { - C.gl4_3compat_glTextureView(gl.funcs, C.GLuint(texture), C.GLenum(target), C.GLuint(origtexture), C.GLenum(internalFormat), C.GLuint(minlevel), C.GLuint(numlevels), C.GLuint(minlayer), C.GLuint(numlayers)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyImageSubData.xml -func (gl *GL) CopyImageSubData(srcName uint32, srcTarget glbase.Enum, srcLevel, srcX, srcY, srcZ int32, dstName uint32, dstTarget glbase.Enum, dstLevel, dstX, dstY, dstZ, srcWidth, srcHeight, srcDepth int32) { - C.gl4_3compat_glCopyImageSubData(gl.funcs, C.GLuint(srcName), C.GLenum(srcTarget), C.GLint(srcLevel), C.GLint(srcX), C.GLint(srcY), C.GLint(srcZ), C.GLuint(dstName), C.GLenum(dstTarget), C.GLint(dstLevel), C.GLint(dstX), C.GLint(dstY), C.GLint(dstZ), C.GLsizei(srcWidth), C.GLsizei(srcHeight), C.GLsizei(srcDepth)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDispatchComputeIndirect.xml -func (gl *GL) DispatchComputeIndirect(indirect int) { - C.gl4_3compat_glDispatchComputeIndirect(gl.funcs, C.GLintptr(indirect)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDispatchCompute.xml -func (gl *GL) DispatchCompute(num_groups_x, num_groups_y, num_groups_z uint32) { - C.gl4_3compat_glDispatchCompute(gl.funcs, C.GLuint(num_groups_x), C.GLuint(num_groups_y), C.GLuint(num_groups_z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearBufferSubData.xml -func (gl *GL) ClearBufferSubData(target, internalFormat glbase.Enum, offset, size int, format, gltype glbase.Enum, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_3compat_glClearBufferSubData(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLintptr(offset), C.GLsizeiptr(size), C.GLenum(format), C.GLenum(gltype), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearBufferData.xml -func (gl *GL) ClearBufferData(target, internalFormat, format, gltype glbase.Enum, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_3compat_glClearBufferData(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLenum(format), C.GLenum(gltype), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTranslatef.xml -func (gl *GL) Translatef(x, y, z float32) { - C.gl4_3compat_glTranslatef(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTranslated.xml -func (gl *GL) Translated(x, y, z float64) { - C.gl4_3compat_glTranslated(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glScalef.xml -func (gl *GL) Scalef(x, y, z float32) { - C.gl4_3compat_glScalef(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glScaled.xml -func (gl *GL) Scaled(x, y, z float64) { - C.gl4_3compat_glScaled(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRotatef.xml -func (gl *GL) Rotatef(angle, x, y, z float32) { - C.gl4_3compat_glRotatef(gl.funcs, C.GLfloat(angle), C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRotated.xml -func (gl *GL) Rotated(angle, x, y, z float64) { - C.gl4_3compat_glRotated(gl.funcs, C.GLdouble(angle), C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPushMatrix.xml -func (gl *GL) PushMatrix() { - C.gl4_3compat_glPushMatrix(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPopMatrix.xml -func (gl *GL) PopMatrix() { - C.gl4_3compat_glPopMatrix(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glOrtho.xml -func (gl *GL) Ortho(left, right, bottom, top, zNear, zFar float64) { - C.gl4_3compat_glOrtho(gl.funcs, C.GLdouble(left), C.GLdouble(right), C.GLdouble(bottom), C.GLdouble(top), C.GLdouble(zNear), C.GLdouble(zFar)) -} - -// MultMatrixd multiplies the current matrix with the provided matrix. -// -// The m parameter must hold 16 consecutive elements of a 4x4 column-major matrix. -// -// The current matrix is determined by the current matrix mode (see -// MatrixMode). It is either the projection matrix, modelview matrix, or the -// texture matrix. -// -// For example, if the current matrix is C and the coordinates to be transformed -// are v = (v[0], v[1], v[2], v[3]), then the current transformation is C × v, or -// -// c[0] c[4] c[8] c[12] v[0] -// c[1] c[5] c[9] c[13] v[1] -// c[2] c[6] c[10] c[14] X v[2] -// c[3] c[7] c[11] c[15] v[3] -// -// Calling MultMatrix with an argument of m = m[0], m[1], ..., m[15] -// replaces the current transformation with (C X M) x v, or -// -// c[0] c[4] c[8] c[12] m[0] m[4] m[8] m[12] v[0] -// c[1] c[5] c[9] c[13] m[1] m[5] m[9] m[13] v[1] -// c[2] c[6] c[10] c[14] X m[2] m[6] m[10] m[14] X v[2] -// c[3] c[7] c[11] c[15] m[3] m[7] m[11] m[15] v[3] -// -// Where 'X' denotes matrix multiplication, and v is represented as a 4x1 matrix. -// -// While the elements of the matrix may be specified with single or double -// precision, the GL may store or operate on these values in less-than-single -// precision. -// -// In many computer languages, 4×4 arrays are represented in row-major -// order. The transformations just described represent these matrices in -// column-major order. The order of the multiplication is important. For -// example, if the current transformation is a rotation, and MultMatrix is -// called with a translation matrix, the translation is done directly on the -// coordinates to be transformed, while the rotation is done on the results -// of that translation. -// -// GL.INVALID_OPERATION is generated if MultMatrix is executed between the -// execution of Begin and the corresponding execution of End. -func (gl *GL) MultMatrixd(m []float64) { - if len(m) != 16 { - panic("parameter m must have length 16 for the 4x4 matrix") - } - C.gl4_3compat_glMultMatrixd(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&m[0]))) -} - -// MultMatrixf multiplies the current matrix with the provided matrix. -// -// The m parameter must hold 16 consecutive elements of a 4x4 column-major matrix. -// -// The current matrix is determined by the current matrix mode (see -// MatrixMode). It is either the projection matrix, modelview matrix, or the -// texture matrix. -// -// For example, if the current matrix is C and the coordinates to be transformed -// are v = (v[0], v[1], v[2], v[3]), then the current transformation is C × v, or -// -// c[0] c[4] c[8] c[12] v[0] -// c[1] c[5] c[9] c[13] v[1] -// c[2] c[6] c[10] c[14] X v[2] -// c[3] c[7] c[11] c[15] v[3] -// -// Calling MultMatrix with an argument of m = m[0], m[1], ..., m[15] -// replaces the current transformation with (C X M) x v, or -// -// c[0] c[4] c[8] c[12] m[0] m[4] m[8] m[12] v[0] -// c[1] c[5] c[9] c[13] m[1] m[5] m[9] m[13] v[1] -// c[2] c[6] c[10] c[14] X m[2] m[6] m[10] m[14] X v[2] -// c[3] c[7] c[11] c[15] m[3] m[7] m[11] m[15] v[3] -// -// Where 'X' denotes matrix multiplication, and v is represented as a 4x1 matrix. -// -// While the elements of the matrix may be specified with single or double -// precision, the GL may store or operate on these values in less-than-single -// precision. -// -// In many computer languages, 4×4 arrays are represented in row-major -// order. The transformations just described represent these matrices in -// column-major order. The order of the multiplication is important. For -// example, if the current transformation is a rotation, and MultMatrix is -// called with a translation matrix, the translation is done directly on the -// coordinates to be transformed, while the rotation is done on the results -// of that translation. -// -// GL.INVALID_OPERATION is generated if MultMatrix is executed between the -// execution of Begin and the corresponding execution of End. -func (gl *GL) MultMatrixf(m []float32) { - if len(m) != 16 { - panic("parameter m must have length 16 for the 4x4 matrix") - } - C.gl4_3compat_glMultMatrixf(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMatrixMode.xml -func (gl *GL) MatrixMode(mode glbase.Enum) { - C.gl4_3compat_glMatrixMode(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLoadMatrixd.xml -func (gl *GL) LoadMatrixd(m []float64) { - C.gl4_3compat_glLoadMatrixd(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLoadMatrixf.xml -func (gl *GL) LoadMatrixf(m []float32) { - C.gl4_3compat_glLoadMatrixf(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLoadIdentity.xml -func (gl *GL) LoadIdentity() { - C.gl4_3compat_glLoadIdentity(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFrustum.xml -func (gl *GL) Frustum(left, right, bottom, top, zNear, zFar float64) { - C.gl4_3compat_glFrustum(gl.funcs, C.GLdouble(left), C.GLdouble(right), C.GLdouble(bottom), C.GLdouble(top), C.GLdouble(zNear), C.GLdouble(zFar)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsList.xml -func (gl *GL) IsList(list uint32) bool { - glresult := C.gl4_3compat_glIsList(gl.funcs, C.GLuint(list)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexGeniv.xml -func (gl *GL) GetTexGeniv(coord, pname glbase.Enum, params []int32) { - C.gl4_3compat_glGetTexGeniv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexGenfv.xml -func (gl *GL) GetTexGenfv(coord, pname glbase.Enum, params []float32) { - C.gl4_3compat_glGetTexGenfv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexGendv.xml -func (gl *GL) GetTexGendv(coord, pname glbase.Enum, params []float64) { - C.gl4_3compat_glGetTexGendv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexEnviv.xml -func (gl *GL) GetTexEnviv(target, pname glbase.Enum, params []int32) { - C.gl4_3compat_glGetTexEnviv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexEnvfv.xml -func (gl *GL) GetTexEnvfv(target, pname glbase.Enum, params []float32) { - C.gl4_3compat_glGetTexEnvfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetPolygonStipple.xml -func (gl *GL) GetPolygonStipple(mask []uint8) { - C.gl4_3compat_glGetPolygonStipple(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&mask[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetPixelMapusv.xml -func (gl *GL) GetPixelMapusv(glmap glbase.Enum, values []uint16) { - C.gl4_3compat_glGetPixelMapusv(gl.funcs, C.GLenum(glmap), (*C.GLushort)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetPixelMapuiv.xml -func (gl *GL) GetPixelMapuiv(glmap glbase.Enum, values []uint32) { - C.gl4_3compat_glGetPixelMapuiv(gl.funcs, C.GLenum(glmap), (*C.GLuint)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetPixelMapfv.xml -func (gl *GL) GetPixelMapfv(glmap glbase.Enum, values []float32) { - C.gl4_3compat_glGetPixelMapfv(gl.funcs, C.GLenum(glmap), (*C.GLfloat)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetMaterialiv.xml -func (gl *GL) GetMaterialiv(face, pname glbase.Enum, params []int32) { - C.gl4_3compat_glGetMaterialiv(gl.funcs, C.GLenum(face), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetMaterialfv.xml -func (gl *GL) GetMaterialfv(face, pname glbase.Enum, params []float32) { - C.gl4_3compat_glGetMaterialfv(gl.funcs, C.GLenum(face), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetMapiv.xml -func (gl *GL) GetMapiv(target, query glbase.Enum, v []int32) { - C.gl4_3compat_glGetMapiv(gl.funcs, C.GLenum(target), C.GLenum(query), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetMapfv.xml -func (gl *GL) GetMapfv(target, query glbase.Enum, v []float32) { - C.gl4_3compat_glGetMapfv(gl.funcs, C.GLenum(target), C.GLenum(query), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetMapdv.xml -func (gl *GL) GetMapdv(target, query glbase.Enum, v []float64) { - C.gl4_3compat_glGetMapdv(gl.funcs, C.GLenum(target), C.GLenum(query), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetLightiv.xml -func (gl *GL) GetLightiv(light, pname glbase.Enum, params []int32) { - C.gl4_3compat_glGetLightiv(gl.funcs, C.GLenum(light), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetLightfv.xml -func (gl *GL) GetLightfv(light, pname glbase.Enum, params []float32) { - C.gl4_3compat_glGetLightfv(gl.funcs, C.GLenum(light), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetClipPlane.xml -func (gl *GL) GetClipPlane(plane glbase.Enum, equation []float64) { - C.gl4_3compat_glGetClipPlane(gl.funcs, C.GLenum(plane), (*C.GLdouble)(unsafe.Pointer(&equation[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawPixels.xml -func (gl *GL) DrawPixels(width, height int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_3compat_glDrawPixels(gl.funcs, C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyPixels.xml -func (gl *GL) CopyPixels(x, y, width, height int, gltype glbase.Enum) { - C.gl4_3compat_glCopyPixels(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height), C.GLenum(gltype)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPixelMapusv.xml -func (gl *GL) PixelMapusv(glmap glbase.Enum, mapsize int32, values []uint16) { - C.gl4_3compat_glPixelMapusv(gl.funcs, C.GLenum(glmap), C.GLint(mapsize), (*C.GLushort)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPixelMapuiv.xml -func (gl *GL) PixelMapuiv(glmap glbase.Enum, mapsize int32, values []uint32) { - C.gl4_3compat_glPixelMapuiv(gl.funcs, C.GLenum(glmap), C.GLint(mapsize), (*C.GLuint)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPixelMapfv.xml -func (gl *GL) PixelMapfv(glmap glbase.Enum, mapsize int32, values []float32) { - C.gl4_3compat_glPixelMapfv(gl.funcs, C.GLenum(glmap), C.GLint(mapsize), (*C.GLfloat)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPixelTransferi.xml -func (gl *GL) PixelTransferi(pname glbase.Enum, param int32) { - C.gl4_3compat_glPixelTransferi(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPixelTransferf.xml -func (gl *GL) PixelTransferf(pname glbase.Enum, param float32) { - C.gl4_3compat_glPixelTransferf(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPixelZoom.xml -func (gl *GL) PixelZoom(xfactor, yfactor float32) { - C.gl4_3compat_glPixelZoom(gl.funcs, C.GLfloat(xfactor), C.GLfloat(yfactor)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glAlphaFunc.xml -func (gl *GL) AlphaFunc(glfunc glbase.Enum, ref float32) { - C.gl4_3compat_glAlphaFunc(gl.funcs, C.GLenum(glfunc), C.GLfloat(ref)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEvalPoint2.xml -func (gl *GL) EvalPoint2(i, j int32) { - C.gl4_3compat_glEvalPoint2(gl.funcs, C.GLint(i), C.GLint(j)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEvalMesh2.xml -func (gl *GL) EvalMesh2(mode glbase.Enum, i1, i2, j1, j2 int32) { - C.gl4_3compat_glEvalMesh2(gl.funcs, C.GLenum(mode), C.GLint(i1), C.GLint(i2), C.GLint(j1), C.GLint(j2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEvalPoint1.xml -func (gl *GL) EvalPoint1(i int32) { - C.gl4_3compat_glEvalPoint1(gl.funcs, C.GLint(i)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEvalMesh1.xml -func (gl *GL) EvalMesh1(mode glbase.Enum, i1, i2 int32) { - C.gl4_3compat_glEvalMesh1(gl.funcs, C.GLenum(mode), C.GLint(i1), C.GLint(i2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEvalCoord2fv.xml -func (gl *GL) EvalCoord2fv(u []float32) { - if len(u) != 2 { - panic("parameter u has incorrect length") - } - C.gl4_3compat_glEvalCoord2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&u[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEvalCoord2f.xml -func (gl *GL) EvalCoord2f(u, v float32) { - C.gl4_3compat_glEvalCoord2f(gl.funcs, C.GLfloat(u), C.GLfloat(v)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEvalCoord2dv.xml -func (gl *GL) EvalCoord2dv(u []float64) { - if len(u) != 2 { - panic("parameter u has incorrect length") - } - C.gl4_3compat_glEvalCoord2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&u[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEvalCoord2d.xml -func (gl *GL) EvalCoord2d(u, v float64) { - C.gl4_3compat_glEvalCoord2d(gl.funcs, C.GLdouble(u), C.GLdouble(v)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEvalCoord1fv.xml -func (gl *GL) EvalCoord1fv(u []float32) { - C.gl4_3compat_glEvalCoord1fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&u[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEvalCoord1f.xml -func (gl *GL) EvalCoord1f(u float32) { - C.gl4_3compat_glEvalCoord1f(gl.funcs, C.GLfloat(u)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEvalCoord1dv.xml -func (gl *GL) EvalCoord1dv(u []float64) { - C.gl4_3compat_glEvalCoord1dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&u[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEvalCoord1d.xml -func (gl *GL) EvalCoord1d(u float64) { - C.gl4_3compat_glEvalCoord1d(gl.funcs, C.GLdouble(u)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMapGrid2f.xml -func (gl *GL) MapGrid2f(un int32, u1, u2 float32, vn int32, v1, v2 float32) { - C.gl4_3compat_glMapGrid2f(gl.funcs, C.GLint(un), C.GLfloat(u1), C.GLfloat(u2), C.GLint(vn), C.GLfloat(v1), C.GLfloat(v2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMapGrid2d.xml -func (gl *GL) MapGrid2d(un int32, u1, u2 float64, vn int32, v1, v2 float64) { - C.gl4_3compat_glMapGrid2d(gl.funcs, C.GLint(un), C.GLdouble(u1), C.GLdouble(u2), C.GLint(vn), C.GLdouble(v1), C.GLdouble(v2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMapGrid1f.xml -func (gl *GL) MapGrid1f(un int32, u1, u2 float32) { - C.gl4_3compat_glMapGrid1f(gl.funcs, C.GLint(un), C.GLfloat(u1), C.GLfloat(u2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMapGrid1d.xml -func (gl *GL) MapGrid1d(un int32, u1, u2 float64) { - C.gl4_3compat_glMapGrid1d(gl.funcs, C.GLint(un), C.GLdouble(u1), C.GLdouble(u2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMap2f.xml -func (gl *GL) Map2f(target glbase.Enum, u1, u2 float32, ustride, uorder int32, v1, v2 float32, vstride, vorder int32, points []float32) { - C.gl4_3compat_glMap2f(gl.funcs, C.GLenum(target), C.GLfloat(u1), C.GLfloat(u2), C.GLint(ustride), C.GLint(uorder), C.GLfloat(v1), C.GLfloat(v2), C.GLint(vstride), C.GLint(vorder), (*C.GLfloat)(unsafe.Pointer(&points[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMap2d.xml -func (gl *GL) Map2d(target glbase.Enum, u1, u2 float64, ustride, uorder int32, v1, v2 float64, vstride, vorder int32, points []float64) { - C.gl4_3compat_glMap2d(gl.funcs, C.GLenum(target), C.GLdouble(u1), C.GLdouble(u2), C.GLint(ustride), C.GLint(uorder), C.GLdouble(v1), C.GLdouble(v2), C.GLint(vstride), C.GLint(vorder), (*C.GLdouble)(unsafe.Pointer(&points[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMap1f.xml -func (gl *GL) Map1f(target glbase.Enum, u1, u2 float32, stride, order int, points []float32) { - C.gl4_3compat_glMap1f(gl.funcs, C.GLenum(target), C.GLfloat(u1), C.GLfloat(u2), C.GLint(stride), C.GLint(order), (*C.GLfloat)(unsafe.Pointer(&points[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMap1d.xml -func (gl *GL) Map1d(target glbase.Enum, u1, u2 float64, stride, order int, points []float64) { - C.gl4_3compat_glMap1d(gl.funcs, C.GLenum(target), C.GLdouble(u1), C.GLdouble(u2), C.GLint(stride), C.GLint(order), (*C.GLdouble)(unsafe.Pointer(&points[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPushAttrib.xml -func (gl *GL) PushAttrib(mask glbase.Bitfield) { - C.gl4_3compat_glPushAttrib(gl.funcs, C.GLbitfield(mask)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPopAttrib.xml -func (gl *GL) PopAttrib() { - C.gl4_3compat_glPopAttrib(gl.funcs) -} - -// Accum executes an operation on the accumulation buffer. -// -// Parameter op defines the accumulation buffer operation (GL.ACCUM, GL.LOAD, -// GL.ADD, GL.MULT, or GL.RETURN) and specifies how the value parameter is -// used. -// -// The accumulation buffer is an extended-range color buffer. Images are not -// rendered into it. Rather, images rendered into one of the color buffers -// are added to the contents of the accumulation buffer after rendering. -// Effects such as antialiasing (of points, lines, and polygons), motion -// blur, and depth of field can be created by accumulating images generated -// with different transformation matrices. -// -// Each pixel in the accumulation buffer consists of red, green, blue, and -// alpha values. The number of bits per component in the accumulation buffer -// depends on the implementation. You can examine this number by calling -// GetIntegerv four times, with arguments GL.ACCUM_RED_BITS, -// GL.ACCUM_GREEN_BITS, GL.ACCUM_BLUE_BITS, and GL.ACCUM_ALPHA_BITS. -// Regardless of the number of bits per component, the range of values stored -// by each component is (-1, 1). The accumulation buffer pixels are mapped -// one-to-one with frame buffer pixels. -// -// All accumulation buffer operations are limited to the area of the current -// scissor box and applied identically to the red, green, blue, and alpha -// components of each pixel. If a Accum operation results in a value outside -// the range (-1, 1), the contents of an accumulation buffer pixel component -// are undefined. -// -// The operations are as follows: -// -// GL.ACCUM -// Obtains R, G, B, and A values from the buffer currently selected for -// reading (see ReadBuffer). Each component value is divided by 2 n - -// 1 , where n is the number of bits allocated to each color component -// in the currently selected buffer. The result is a floating-point -// value in the range 0 1 , which is multiplied by value and added to -// the corresponding pixel component in the accumulation buffer, -// thereby updating the accumulation buffer. -// -// GL.LOAD -// Similar to GL.ACCUM, except that the current value in the -// accumulation buffer is not used in the calculation of the new value. -// That is, the R, G, B, and A values from the currently selected -// buffer are divided by 2 n - 1 , multiplied by value, and then stored -// in the corresponding accumulation buffer cell, overwriting the -// current value. -// -// GL.ADD -// Adds value to each R, G, B, and A in the accumulation buffer. -// -// GL.MULT -// Multiplies each R, G, B, and A in the accumulation buffer by value -// and returns the scaled component to its corresponding accumulation -// buffer location. -// -// GL.RETURN -// Transfers accumulation buffer values to the color buffer or buffers -// currently selected for writing. Each R, G, B, and A component is -// multiplied by value, then multiplied by 2 n - 1 , clamped to the -// range 0 2 n - 1 , and stored in the corresponding display buffer -// cell. The only fragment operations that are applied to this transfer -// are pixel ownership, scissor, dithering, and color writemasks. -// -// To clear the accumulation buffer, call ClearAccum with R, G, B, and A -// values to set it to, then call Clear with the accumulation buffer -// enabled. -// -// Error GL.INVALID_ENUM is generated if op is not an accepted value. -// GL.INVALID_OPERATION is generated if there is no accumulation buffer. -// GL.INVALID_OPERATION is generated if Accum is executed between the -// execution of Begin and the corresponding execution of End. -func (gl *GL) Accum(op glbase.Enum, value float32) { - C.gl4_3compat_glAccum(gl.funcs, C.GLenum(op), C.GLfloat(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIndexMask.xml -func (gl *GL) IndexMask(mask uint32) { - C.gl4_3compat_glIndexMask(gl.funcs, C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearIndex.xml -func (gl *GL) ClearIndex(c float32) { - C.gl4_3compat_glClearIndex(gl.funcs, C.GLfloat(c)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearAccum.xml -func (gl *GL) ClearAccum(red, green, blue, alpha float32) { - C.gl4_3compat_glClearAccum(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPushName.xml -func (gl *GL) PushName(name uint32) { - C.gl4_3compat_glPushName(gl.funcs, C.GLuint(name)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPopName.xml -func (gl *GL) PopName() { - C.gl4_3compat_glPopName(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPassThrough.xml -func (gl *GL) PassThrough(token float32) { - C.gl4_3compat_glPassThrough(gl.funcs, C.GLfloat(token)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLoadName.xml -func (gl *GL) LoadName(name uint32) { - C.gl4_3compat_glLoadName(gl.funcs, C.GLuint(name)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glInitNames.xml -func (gl *GL) InitNames() { - C.gl4_3compat_glInitNames(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRenderMode.xml -func (gl *GL) RenderMode(mode glbase.Enum) int32 { - glresult := C.gl4_3compat_glRenderMode(gl.funcs, C.GLenum(mode)) - return int32(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSelectBuffer.xml -func (gl *GL) SelectBuffer(size int, buffer []glbase.Buffer) { - C.gl4_3compat_glSelectBuffer(gl.funcs, C.GLsizei(size), (*C.GLuint)(unsafe.Pointer(&buffer[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFeedbackBuffer.xml -func (gl *GL) FeedbackBuffer(size int, gltype glbase.Enum, buffer []float32) { - C.gl4_3compat_glFeedbackBuffer(gl.funcs, C.GLsizei(size), C.GLenum(gltype), (*C.GLfloat)(unsafe.Pointer(&buffer[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexGeniv.xml -func (gl *GL) TexGeniv(coord, pname glbase.Enum, params []int32) { - C.gl4_3compat_glTexGeniv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexGeni.xml -func (gl *GL) TexGeni(coord, pname glbase.Enum, param int32) { - C.gl4_3compat_glTexGeni(gl.funcs, C.GLenum(coord), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexGenfv.xml -func (gl *GL) TexGenfv(coord, pname glbase.Enum, params []float32) { - C.gl4_3compat_glTexGenfv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexGenf.xml -func (gl *GL) TexGenf(coord, pname glbase.Enum, param float32) { - C.gl4_3compat_glTexGenf(gl.funcs, C.GLenum(coord), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexGendv.xml -func (gl *GL) TexGendv(coord, pname glbase.Enum, params []float64) { - C.gl4_3compat_glTexGendv(gl.funcs, C.GLenum(coord), C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexGend.xml -func (gl *GL) TexGend(coord, pname glbase.Enum, param float64) { - C.gl4_3compat_glTexGend(gl.funcs, C.GLenum(coord), C.GLenum(pname), C.GLdouble(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexEnviv.xml -func (gl *GL) TexEnviv(target, pname glbase.Enum, params []int32) { - C.gl4_3compat_glTexEnviv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexEnvi.xml -func (gl *GL) TexEnvi(target, pname glbase.Enum, param int32) { - C.gl4_3compat_glTexEnvi(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexEnvfv.xml -func (gl *GL) TexEnvfv(target, pname glbase.Enum, params []float32) { - C.gl4_3compat_glTexEnvfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexEnvf.xml -func (gl *GL) TexEnvf(target, pname glbase.Enum, param float32) { - C.gl4_3compat_glTexEnvf(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glShadeModel.xml -func (gl *GL) ShadeModel(mode glbase.Enum) { - C.gl4_3compat_glShadeModel(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPolygonStipple.xml -func (gl *GL) PolygonStipple(mask []uint8) { - C.gl4_3compat_glPolygonStipple(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&mask[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMaterialiv.xml -func (gl *GL) Materialiv(face, pname glbase.Enum, params []int32) { - C.gl4_3compat_glMaterialiv(gl.funcs, C.GLenum(face), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMateriali.xml -func (gl *GL) Materiali(face, pname glbase.Enum, param int32) { - C.gl4_3compat_glMateriali(gl.funcs, C.GLenum(face), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMaterialfv.xml -func (gl *GL) Materialfv(face, pname glbase.Enum, params []float32) { - C.gl4_3compat_glMaterialfv(gl.funcs, C.GLenum(face), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMaterialf.xml -func (gl *GL) Materialf(face, pname glbase.Enum, param float32) { - C.gl4_3compat_glMaterialf(gl.funcs, C.GLenum(face), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLineStipple.xml -func (gl *GL) LineStipple(factor int32, pattern uint16) { - C.gl4_3compat_glLineStipple(gl.funcs, C.GLint(factor), C.GLushort(pattern)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLightModeliv.xml -func (gl *GL) LightModeliv(pname glbase.Enum, params []int32) { - C.gl4_3compat_glLightModeliv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLightModeli.xml -func (gl *GL) LightModeli(pname glbase.Enum, param int32) { - C.gl4_3compat_glLightModeli(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLightModelfv.xml -func (gl *GL) LightModelfv(pname glbase.Enum, params []float32) { - C.gl4_3compat_glLightModelfv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLightModelf.xml -func (gl *GL) LightModelf(pname glbase.Enum, param float32) { - C.gl4_3compat_glLightModelf(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLightiv.xml -func (gl *GL) Lightiv(light, pname glbase.Enum, params []int32) { - C.gl4_3compat_glLightiv(gl.funcs, C.GLenum(light), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLighti.xml -func (gl *GL) Lighti(light, pname glbase.Enum, param int32) { - C.gl4_3compat_glLighti(gl.funcs, C.GLenum(light), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLightfv.xml -func (gl *GL) Lightfv(light, pname glbase.Enum, params []float32) { - C.gl4_3compat_glLightfv(gl.funcs, C.GLenum(light), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLightf.xml -func (gl *GL) Lightf(light, pname glbase.Enum, param float32) { - C.gl4_3compat_glLightf(gl.funcs, C.GLenum(light), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFogiv.xml -func (gl *GL) Fogiv(pname glbase.Enum, params []int32) { - C.gl4_3compat_glFogiv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFogi.xml -func (gl *GL) Fogi(pname glbase.Enum, param int32) { - C.gl4_3compat_glFogi(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFogfv.xml -func (gl *GL) Fogfv(pname glbase.Enum, params []float32) { - C.gl4_3compat_glFogfv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFogf.xml -func (gl *GL) Fogf(pname glbase.Enum, param float32) { - C.gl4_3compat_glFogf(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorMaterial.xml -func (gl *GL) ColorMaterial(face, mode glbase.Enum) { - C.gl4_3compat_glColorMaterial(gl.funcs, C.GLenum(face), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClipPlane.xml -func (gl *GL) ClipPlane(plane glbase.Enum, equation []float64) { - C.gl4_3compat_glClipPlane(gl.funcs, C.GLenum(plane), (*C.GLdouble)(unsafe.Pointer(&equation[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex4sv.xml -func (gl *GL) Vertex4sv(v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glVertex4sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex4s.xml -func (gl *GL) Vertex4s(x, y, z, w int16) { - C.gl4_3compat_glVertex4s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z), C.GLshort(w)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex4iv.xml -func (gl *GL) Vertex4iv(v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glVertex4iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex4i.xml -func (gl *GL) Vertex4i(x, y, z, w int) { - C.gl4_3compat_glVertex4i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z), C.GLint(w)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex4fv.xml -func (gl *GL) Vertex4fv(v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glVertex4fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex4f.xml -func (gl *GL) Vertex4f(x, y, z, w float32) { - C.gl4_3compat_glVertex4f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z), C.GLfloat(w)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex4dv.xml -func (gl *GL) Vertex4dv(v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glVertex4dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex4d.xml -func (gl *GL) Vertex4d(x, y, z, w float64) { - C.gl4_3compat_glVertex4d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z), C.GLdouble(w)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex3sv.xml -func (gl *GL) Vertex3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glVertex3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex3s.xml -func (gl *GL) Vertex3s(x, y, z int16) { - C.gl4_3compat_glVertex3s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex3iv.xml -func (gl *GL) Vertex3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glVertex3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex3i.xml -func (gl *GL) Vertex3i(x, y, z int) { - C.gl4_3compat_glVertex3i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex3fv.xml -func (gl *GL) Vertex3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glVertex3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex3f.xml -func (gl *GL) Vertex3f(x, y, z float32) { - C.gl4_3compat_glVertex3f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex3dv.xml -func (gl *GL) Vertex3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glVertex3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex3d.xml -func (gl *GL) Vertex3d(x, y, z float64) { - C.gl4_3compat_glVertex3d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex2sv.xml -func (gl *GL) Vertex2sv(v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glVertex2sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex2s.xml -func (gl *GL) Vertex2s(x, y int16) { - C.gl4_3compat_glVertex2s(gl.funcs, C.GLshort(x), C.GLshort(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex2iv.xml -func (gl *GL) Vertex2iv(v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glVertex2iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex2i.xml -func (gl *GL) Vertex2i(x, y int) { - C.gl4_3compat_glVertex2i(gl.funcs, C.GLint(x), C.GLint(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex2fv.xml -func (gl *GL) Vertex2fv(v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glVertex2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex2f.xml -func (gl *GL) Vertex2f(x, y float32) { - C.gl4_3compat_glVertex2f(gl.funcs, C.GLfloat(x), C.GLfloat(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex2dv.xml -func (gl *GL) Vertex2dv(v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glVertex2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertex2d.xml -func (gl *GL) Vertex2d(x, y float64) { - C.gl4_3compat_glVertex2d(gl.funcs, C.GLdouble(x), C.GLdouble(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord4sv.xml -func (gl *GL) TexCoord4sv(v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glTexCoord4sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord4s.xml -func (gl *GL) TexCoord4s(s, t, r, q int16) { - C.gl4_3compat_glTexCoord4s(gl.funcs, C.GLshort(s), C.GLshort(t), C.GLshort(r), C.GLshort(q)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord4iv.xml -func (gl *GL) TexCoord4iv(v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glTexCoord4iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord4i.xml -func (gl *GL) TexCoord4i(s, t, r, q int32) { - C.gl4_3compat_glTexCoord4i(gl.funcs, C.GLint(s), C.GLint(t), C.GLint(r), C.GLint(q)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord4fv.xml -func (gl *GL) TexCoord4fv(v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glTexCoord4fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord4f.xml -func (gl *GL) TexCoord4f(s, t, r, q float32) { - C.gl4_3compat_glTexCoord4f(gl.funcs, C.GLfloat(s), C.GLfloat(t), C.GLfloat(r), C.GLfloat(q)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord4dv.xml -func (gl *GL) TexCoord4dv(v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glTexCoord4dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord4d.xml -func (gl *GL) TexCoord4d(s, t, r, q float64) { - C.gl4_3compat_glTexCoord4d(gl.funcs, C.GLdouble(s), C.GLdouble(t), C.GLdouble(r), C.GLdouble(q)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord3sv.xml -func (gl *GL) TexCoord3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glTexCoord3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord3s.xml -func (gl *GL) TexCoord3s(s, t, r int16) { - C.gl4_3compat_glTexCoord3s(gl.funcs, C.GLshort(s), C.GLshort(t), C.GLshort(r)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord3iv.xml -func (gl *GL) TexCoord3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glTexCoord3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord3i.xml -func (gl *GL) TexCoord3i(s, t, r int32) { - C.gl4_3compat_glTexCoord3i(gl.funcs, C.GLint(s), C.GLint(t), C.GLint(r)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord3fv.xml -func (gl *GL) TexCoord3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glTexCoord3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord3f.xml -func (gl *GL) TexCoord3f(s, t, r float32) { - C.gl4_3compat_glTexCoord3f(gl.funcs, C.GLfloat(s), C.GLfloat(t), C.GLfloat(r)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord3dv.xml -func (gl *GL) TexCoord3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glTexCoord3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord3d.xml -func (gl *GL) TexCoord3d(s, t, r float64) { - C.gl4_3compat_glTexCoord3d(gl.funcs, C.GLdouble(s), C.GLdouble(t), C.GLdouble(r)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord2sv.xml -func (gl *GL) TexCoord2sv(v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glTexCoord2sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord2s.xml -func (gl *GL) TexCoord2s(s, t int16) { - C.gl4_3compat_glTexCoord2s(gl.funcs, C.GLshort(s), C.GLshort(t)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord2iv.xml -func (gl *GL) TexCoord2iv(v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glTexCoord2iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord2i.xml -func (gl *GL) TexCoord2i(s, t int32) { - C.gl4_3compat_glTexCoord2i(gl.funcs, C.GLint(s), C.GLint(t)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord2fv.xml -func (gl *GL) TexCoord2fv(v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glTexCoord2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord2f.xml -func (gl *GL) TexCoord2f(s, t float32) { - C.gl4_3compat_glTexCoord2f(gl.funcs, C.GLfloat(s), C.GLfloat(t)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord2dv.xml -func (gl *GL) TexCoord2dv(v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glTexCoord2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord2d.xml -func (gl *GL) TexCoord2d(s, t float64) { - C.gl4_3compat_glTexCoord2d(gl.funcs, C.GLdouble(s), C.GLdouble(t)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord1sv.xml -func (gl *GL) TexCoord1sv(v []int16) { - C.gl4_3compat_glTexCoord1sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord1s.xml -func (gl *GL) TexCoord1s(s int16) { - C.gl4_3compat_glTexCoord1s(gl.funcs, C.GLshort(s)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord1iv.xml -func (gl *GL) TexCoord1iv(v []int32) { - C.gl4_3compat_glTexCoord1iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord1i.xml -func (gl *GL) TexCoord1i(s int32) { - C.gl4_3compat_glTexCoord1i(gl.funcs, C.GLint(s)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord1fv.xml -func (gl *GL) TexCoord1fv(v []float32) { - C.gl4_3compat_glTexCoord1fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord1f.xml -func (gl *GL) TexCoord1f(s float32) { - C.gl4_3compat_glTexCoord1f(gl.funcs, C.GLfloat(s)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord1dv.xml -func (gl *GL) TexCoord1dv(v []float64) { - C.gl4_3compat_glTexCoord1dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoord1d.xml -func (gl *GL) TexCoord1d(s float64) { - C.gl4_3compat_glTexCoord1d(gl.funcs, C.GLdouble(s)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRectsv.xml -func (gl *GL) Rectsv(v1, v2 []int16) { - C.gl4_3compat_glRectsv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v1[0])), (*C.GLshort)(unsafe.Pointer(&v2[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRects.xml -func (gl *GL) Rects(x1, y1, x2, y2 int16) { - C.gl4_3compat_glRects(gl.funcs, C.GLshort(x1), C.GLshort(y1), C.GLshort(x2), C.GLshort(y2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRectiv.xml -func (gl *GL) Rectiv(v1, v2 []int32) { - C.gl4_3compat_glRectiv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v1[0])), (*C.GLint)(unsafe.Pointer(&v2[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRecti.xml -func (gl *GL) Recti(x1, y1, x2, y2 int32) { - C.gl4_3compat_glRecti(gl.funcs, C.GLint(x1), C.GLint(y1), C.GLint(x2), C.GLint(y2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRectfv.xml -func (gl *GL) Rectfv(v1, v2 []float32) { - C.gl4_3compat_glRectfv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v1[0])), (*C.GLfloat)(unsafe.Pointer(&v2[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRectf.xml -func (gl *GL) Rectf(x1, y1, x2, y2 float32) { - C.gl4_3compat_glRectf(gl.funcs, C.GLfloat(x1), C.GLfloat(y1), C.GLfloat(x2), C.GLfloat(y2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRectdv.xml -func (gl *GL) Rectdv(v1, v2 []float64) { - C.gl4_3compat_glRectdv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v1[0])), (*C.GLdouble)(unsafe.Pointer(&v2[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRectd.xml -func (gl *GL) Rectd(x1, y1, x2, y2 float64) { - C.gl4_3compat_glRectd(gl.funcs, C.GLdouble(x1), C.GLdouble(y1), C.GLdouble(x2), C.GLdouble(y2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos4sv.xml -func (gl *GL) RasterPos4sv(v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glRasterPos4sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos4s.xml -func (gl *GL) RasterPos4s(x, y, z, w int16) { - C.gl4_3compat_glRasterPos4s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z), C.GLshort(w)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos4iv.xml -func (gl *GL) RasterPos4iv(v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glRasterPos4iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos4i.xml -func (gl *GL) RasterPos4i(x, y, z, w int) { - C.gl4_3compat_glRasterPos4i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z), C.GLint(w)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos4fv.xml -func (gl *GL) RasterPos4fv(v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glRasterPos4fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos4f.xml -func (gl *GL) RasterPos4f(x, y, z, w float32) { - C.gl4_3compat_glRasterPos4f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z), C.GLfloat(w)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos4dv.xml -func (gl *GL) RasterPos4dv(v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glRasterPos4dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos4d.xml -func (gl *GL) RasterPos4d(x, y, z, w float64) { - C.gl4_3compat_glRasterPos4d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z), C.GLdouble(w)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos3sv.xml -func (gl *GL) RasterPos3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glRasterPos3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos3s.xml -func (gl *GL) RasterPos3s(x, y, z int16) { - C.gl4_3compat_glRasterPos3s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos3iv.xml -func (gl *GL) RasterPos3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glRasterPos3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos3i.xml -func (gl *GL) RasterPos3i(x, y, z int) { - C.gl4_3compat_glRasterPos3i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos3fv.xml -func (gl *GL) RasterPos3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glRasterPos3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos3f.xml -func (gl *GL) RasterPos3f(x, y, z float32) { - C.gl4_3compat_glRasterPos3f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos3dv.xml -func (gl *GL) RasterPos3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glRasterPos3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos3d.xml -func (gl *GL) RasterPos3d(x, y, z float64) { - C.gl4_3compat_glRasterPos3d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos2sv.xml -func (gl *GL) RasterPos2sv(v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glRasterPos2sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos2s.xml -func (gl *GL) RasterPos2s(x, y int16) { - C.gl4_3compat_glRasterPos2s(gl.funcs, C.GLshort(x), C.GLshort(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos2iv.xml -func (gl *GL) RasterPos2iv(v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glRasterPos2iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos2i.xml -func (gl *GL) RasterPos2i(x, y int) { - C.gl4_3compat_glRasterPos2i(gl.funcs, C.GLint(x), C.GLint(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos2fv.xml -func (gl *GL) RasterPos2fv(v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glRasterPos2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos2f.xml -func (gl *GL) RasterPos2f(x, y float32) { - C.gl4_3compat_glRasterPos2f(gl.funcs, C.GLfloat(x), C.GLfloat(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos2dv.xml -func (gl *GL) RasterPos2dv(v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glRasterPos2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRasterPos2d.xml -func (gl *GL) RasterPos2d(x, y float64) { - C.gl4_3compat_glRasterPos2d(gl.funcs, C.GLdouble(x), C.GLdouble(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glNormal3sv.xml -func (gl *GL) Normal3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glNormal3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glNormal3s.xml -func (gl *GL) Normal3s(nx, ny, nz int16) { - C.gl4_3compat_glNormal3s(gl.funcs, C.GLshort(nx), C.GLshort(ny), C.GLshort(nz)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glNormal3iv.xml -func (gl *GL) Normal3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glNormal3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glNormal3i.xml -func (gl *GL) Normal3i(nx, ny, nz int32) { - C.gl4_3compat_glNormal3i(gl.funcs, C.GLint(nx), C.GLint(ny), C.GLint(nz)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glNormal3fv.xml -func (gl *GL) Normal3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glNormal3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glNormal3f.xml -func (gl *GL) Normal3f(nx, ny, nz float32) { - C.gl4_3compat_glNormal3f(gl.funcs, C.GLfloat(nx), C.GLfloat(ny), C.GLfloat(nz)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glNormal3dv.xml -func (gl *GL) Normal3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glNormal3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glNormal3d.xml -func (gl *GL) Normal3d(nx, ny, nz float64) { - C.gl4_3compat_glNormal3d(gl.funcs, C.GLdouble(nx), C.GLdouble(ny), C.GLdouble(nz)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glNormal3bv.xml -func (gl *GL) Normal3bv(v []byte) { - C.gl4_3compat_glNormal3bv(gl.funcs, (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glNormal3b.xml -func (gl *GL) Normal3b(nx, ny, nz byte) { - C.gl4_3compat_glNormal3b(gl.funcs, C.GLbyte(nx), C.GLbyte(ny), C.GLbyte(nz)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIndexsv.xml -func (gl *GL) Indexsv(c []int16) { - C.gl4_3compat_glIndexsv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIndexs.xml -func (gl *GL) Indexs(c int16) { - C.gl4_3compat_glIndexs(gl.funcs, C.GLshort(c)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIndexiv.xml -func (gl *GL) Indexiv(c []int32) { - C.gl4_3compat_glIndexiv(gl.funcs, (*C.GLint)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIndexi.xml -func (gl *GL) Indexi(c int32) { - C.gl4_3compat_glIndexi(gl.funcs, C.GLint(c)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIndexfv.xml -func (gl *GL) Indexfv(c []float32) { - C.gl4_3compat_glIndexfv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIndexf.xml -func (gl *GL) Indexf(c float32) { - C.gl4_3compat_glIndexf(gl.funcs, C.GLfloat(c)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIndexdv.xml -func (gl *GL) Indexdv(c []float64) { - C.gl4_3compat_glIndexdv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIndexd.xml -func (gl *GL) Indexd(c float64) { - C.gl4_3compat_glIndexd(gl.funcs, C.GLdouble(c)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEnd.xml -func (gl *GL) End() { - C.gl4_3compat_glEnd(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEdgeFlagv.xml -func (gl *GL) EdgeFlagv(flag []bool) { - C.gl4_3compat_glEdgeFlagv(gl.funcs, (*C.GLboolean)(unsafe.Pointer(&flag[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEdgeFlag.xml -func (gl *GL) EdgeFlag(flag bool) { - C.gl4_3compat_glEdgeFlag(gl.funcs, *(*C.GLboolean)(unsafe.Pointer(&flag))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor4usv.xml -func (gl *GL) Color4usv(v []uint16) { - C.gl4_3compat_glColor4usv(gl.funcs, (*C.GLushort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor4us.xml -func (gl *GL) Color4us(red, green, blue, alpha uint16) { - C.gl4_3compat_glColor4us(gl.funcs, C.GLushort(red), C.GLushort(green), C.GLushort(blue), C.GLushort(alpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor4uiv.xml -func (gl *GL) Color4uiv(v []uint32) { - C.gl4_3compat_glColor4uiv(gl.funcs, (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor4ui.xml -func (gl *GL) Color4ui(red, green, blue, alpha uint32) { - C.gl4_3compat_glColor4ui(gl.funcs, C.GLuint(red), C.GLuint(green), C.GLuint(blue), C.GLuint(alpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor4ubv.xml -func (gl *GL) Color4ubv(v []uint8) { - C.gl4_3compat_glColor4ubv(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor4ub.xml -func (gl *GL) Color4ub(red, green, blue, alpha uint8) { - C.gl4_3compat_glColor4ub(gl.funcs, C.GLubyte(red), C.GLubyte(green), C.GLubyte(blue), C.GLubyte(alpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor4sv.xml -func (gl *GL) Color4sv(v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glColor4sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor4s.xml -func (gl *GL) Color4s(red, green, blue, alpha int16) { - C.gl4_3compat_glColor4s(gl.funcs, C.GLshort(red), C.GLshort(green), C.GLshort(blue), C.GLshort(alpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor4iv.xml -func (gl *GL) Color4iv(v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glColor4iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor4i.xml -func (gl *GL) Color4i(red, green, blue, alpha int32) { - C.gl4_3compat_glColor4i(gl.funcs, C.GLint(red), C.GLint(green), C.GLint(blue), C.GLint(alpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor4fv.xml -func (gl *GL) Color4fv(v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glColor4fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor4f.xml -func (gl *GL) Color4f(red, green, blue, alpha float32) { - C.gl4_3compat_glColor4f(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor4dv.xml -func (gl *GL) Color4dv(v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glColor4dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor4d.xml -func (gl *GL) Color4d(red, green, blue, alpha float64) { - C.gl4_3compat_glColor4d(gl.funcs, C.GLdouble(red), C.GLdouble(green), C.GLdouble(blue), C.GLdouble(alpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor4bv.xml -func (gl *GL) Color4bv(v []byte) { - C.gl4_3compat_glColor4bv(gl.funcs, (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor4b.xml -func (gl *GL) Color4b(red, green, blue, alpha byte) { - C.gl4_3compat_glColor4b(gl.funcs, C.GLbyte(red), C.GLbyte(green), C.GLbyte(blue), C.GLbyte(alpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor3usv.xml -func (gl *GL) Color3usv(v []uint16) { - C.gl4_3compat_glColor3usv(gl.funcs, (*C.GLushort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor3us.xml -func (gl *GL) Color3us(red, green, blue uint16) { - C.gl4_3compat_glColor3us(gl.funcs, C.GLushort(red), C.GLushort(green), C.GLushort(blue)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor3uiv.xml -func (gl *GL) Color3uiv(v []uint32) { - C.gl4_3compat_glColor3uiv(gl.funcs, (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor3ui.xml -func (gl *GL) Color3ui(red, green, blue uint32) { - C.gl4_3compat_glColor3ui(gl.funcs, C.GLuint(red), C.GLuint(green), C.GLuint(blue)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor3ubv.xml -func (gl *GL) Color3ubv(v []uint8) { - C.gl4_3compat_glColor3ubv(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor3ub.xml -func (gl *GL) Color3ub(red, green, blue uint8) { - C.gl4_3compat_glColor3ub(gl.funcs, C.GLubyte(red), C.GLubyte(green), C.GLubyte(blue)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor3sv.xml -func (gl *GL) Color3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glColor3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor3s.xml -func (gl *GL) Color3s(red, green, blue int16) { - C.gl4_3compat_glColor3s(gl.funcs, C.GLshort(red), C.GLshort(green), C.GLshort(blue)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor3iv.xml -func (gl *GL) Color3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glColor3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor3i.xml -func (gl *GL) Color3i(red, green, blue int32) { - C.gl4_3compat_glColor3i(gl.funcs, C.GLint(red), C.GLint(green), C.GLint(blue)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor3fv.xml -func (gl *GL) Color3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glColor3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor3f.xml -func (gl *GL) Color3f(red, green, blue float32) { - C.gl4_3compat_glColor3f(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor3dv.xml -func (gl *GL) Color3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glColor3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor3d.xml -func (gl *GL) Color3d(red, green, blue float64) { - C.gl4_3compat_glColor3d(gl.funcs, C.GLdouble(red), C.GLdouble(green), C.GLdouble(blue)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor3bv.xml -func (gl *GL) Color3bv(v []byte) { - C.gl4_3compat_glColor3bv(gl.funcs, (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColor3b.xml -func (gl *GL) Color3b(red, green, blue byte) { - C.gl4_3compat_glColor3b(gl.funcs, C.GLbyte(red), C.GLbyte(green), C.GLbyte(blue)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBitmap.xml -func (gl *GL) Bitmap(width, height int, xorig, yorig, xmove, ymove float32, bitmap []uint8) { - C.gl4_3compat_glBitmap(gl.funcs, C.GLsizei(width), C.GLsizei(height), C.GLfloat(xorig), C.GLfloat(yorig), C.GLfloat(xmove), C.GLfloat(ymove), (*C.GLubyte)(unsafe.Pointer(&bitmap[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBegin.xml -func (gl *GL) Begin(mode glbase.Enum) { - C.gl4_3compat_glBegin(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glListBase.xml -func (gl *GL) ListBase(base uint32) { - C.gl4_3compat_glListBase(gl.funcs, C.GLuint(base)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGenLists.xml -func (gl *GL) GenLists(range_ int32) uint32 { - glresult := C.gl4_3compat_glGenLists(gl.funcs, C.GLsizei(range_)) - return uint32(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDeleteLists.xml -func (gl *GL) DeleteLists(list uint32, range_ int32) { - C.gl4_3compat_glDeleteLists(gl.funcs, C.GLuint(list), C.GLsizei(range_)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCallLists.xml -func (gl *GL) CallLists(n int, gltype glbase.Enum, lists interface{}) { - var lists_ptr unsafe.Pointer - var lists_v = reflect.ValueOf(lists) - if lists != nil && lists_v.Kind() != reflect.Slice { - panic("parameter lists must be a slice") - } - if lists != nil { - lists_ptr = unsafe.Pointer(lists_v.Index(0).Addr().Pointer()) - } - C.gl4_3compat_glCallLists(gl.funcs, C.GLsizei(n), C.GLenum(gltype), lists_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCallList.xml -func (gl *GL) CallList(list uint32) { - C.gl4_3compat_glCallList(gl.funcs, C.GLuint(list)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEndList.xml -func (gl *GL) EndList() { - C.gl4_3compat_glEndList(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glNewList.xml -func (gl *GL) NewList(list uint32, mode glbase.Enum) { - C.gl4_3compat_glNewList(gl.funcs, C.GLuint(list), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPushClientAttrib.xml -func (gl *GL) PushClientAttrib(mask glbase.Bitfield) { - C.gl4_3compat_glPushClientAttrib(gl.funcs, C.GLbitfield(mask)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPopClientAttrib.xml -func (gl *GL) PopClientAttrib() { - C.gl4_3compat_glPopClientAttrib(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPrioritizeTextures.xml -func (gl *GL) PrioritizeTextures(n int, textures []glbase.Texture, priorities []float32) { - C.gl4_3compat_glPrioritizeTextures(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0])), (*C.GLfloat)(unsafe.Pointer(&priorities[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glAreTexturesResident.xml -func (gl *GL) AreTexturesResident(n int, textures []glbase.Texture, residences []bool) bool { - glresult := C.gl4_3compat_glAreTexturesResident(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0])), (*C.GLboolean)(unsafe.Pointer(&residences[0]))) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexPointer.xml -func (gl *GL) VertexPointer(size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl4_3compat_glVertexPointer(gl.funcs, C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordPointer.xml -func (gl *GL) TexCoordPointer(size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl4_3compat_glTexCoordPointer(gl.funcs, C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glNormalPointer.xml -func (gl *GL) NormalPointer(gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl4_3compat_glNormalPointer(gl.funcs, C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glInterleavedArrays.xml -func (gl *GL) InterleavedArrays(format glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl4_3compat_glInterleavedArrays(gl.funcs, C.GLenum(format), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIndexPointer.xml -func (gl *GL) IndexPointer(gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl4_3compat_glIndexPointer(gl.funcs, C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEnableClientState.xml -func (gl *GL) EnableClientState(array glbase.Enum) { - C.gl4_3compat_glEnableClientState(gl.funcs, C.GLenum(array)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEdgeFlagPointer.xml -func (gl *GL) EdgeFlagPointer(stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl4_3compat_glEdgeFlagPointer(gl.funcs, C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDisableClientState.xml -func (gl *GL) DisableClientState(array glbase.Enum) { - C.gl4_3compat_glDisableClientState(gl.funcs, C.GLenum(array)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorPointer.xml -func (gl *GL) ColorPointer(size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl4_3compat_glColorPointer(gl.funcs, C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glArrayElement.xml -func (gl *GL) ArrayElement(i int32) { - C.gl4_3compat_glArrayElement(gl.funcs, C.GLint(i)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glResetMinmax.xml -func (gl *GL) ResetMinmax(target glbase.Enum) { - C.gl4_3compat_glResetMinmax(gl.funcs, C.GLenum(target)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glResetHistogram.xml -func (gl *GL) ResetHistogram(target glbase.Enum) { - C.gl4_3compat_glResetHistogram(gl.funcs, C.GLenum(target)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMinmax.xml -func (gl *GL) Minmax(target, internalFormat glbase.Enum, sink bool) { - C.gl4_3compat_glMinmax(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), *(*C.GLboolean)(unsafe.Pointer(&sink))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glHistogram.xml -func (gl *GL) Histogram(target glbase.Enum, width int, internalFormat glbase.Enum, sink bool) { - C.gl4_3compat_glHistogram(gl.funcs, C.GLenum(target), C.GLsizei(width), C.GLenum(internalFormat), *(*C.GLboolean)(unsafe.Pointer(&sink))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetMinmaxParameteriv.xml -func (gl *GL) GetMinmaxParameteriv(target, pname glbase.Enum, params []int32) { - C.gl4_3compat_glGetMinmaxParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetMinmaxParameterfv.xml -func (gl *GL) GetMinmaxParameterfv(target, pname glbase.Enum, params []float32) { - C.gl4_3compat_glGetMinmaxParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetMinmax.xml -func (gl *GL) GetMinmax(target glbase.Enum, reset bool, format, gltype glbase.Enum, values interface{}) { - var values_ptr unsafe.Pointer - var values_v = reflect.ValueOf(values) - if values != nil && values_v.Kind() != reflect.Slice { - panic("parameter values must be a slice") - } - if values != nil { - values_ptr = unsafe.Pointer(values_v.Index(0).Addr().Pointer()) - } - C.gl4_3compat_glGetMinmax(gl.funcs, C.GLenum(target), *(*C.GLboolean)(unsafe.Pointer(&reset)), C.GLenum(format), C.GLenum(gltype), values_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetHistogramParameteriv.xml -func (gl *GL) GetHistogramParameteriv(target, pname glbase.Enum, params []int32) { - C.gl4_3compat_glGetHistogramParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetHistogramParameterfv.xml -func (gl *GL) GetHistogramParameterfv(target, pname glbase.Enum, params []float32) { - C.gl4_3compat_glGetHistogramParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetHistogram.xml -func (gl *GL) GetHistogram(target glbase.Enum, reset bool, format, gltype glbase.Enum, values interface{}) { - var values_ptr unsafe.Pointer - var values_v = reflect.ValueOf(values) - if values != nil && values_v.Kind() != reflect.Slice { - panic("parameter values must be a slice") - } - if values != nil { - values_ptr = unsafe.Pointer(values_v.Index(0).Addr().Pointer()) - } - C.gl4_3compat_glGetHistogram(gl.funcs, C.GLenum(target), *(*C.GLboolean)(unsafe.Pointer(&reset)), C.GLenum(format), C.GLenum(gltype), values_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSeparableFilter2D.xml -func (gl *GL) SeparableFilter2D(target, internalFormat glbase.Enum, width, height int, format, gltype glbase.Enum, row, column interface{}) { - var row_ptr unsafe.Pointer - var row_v = reflect.ValueOf(row) - if row != nil && row_v.Kind() != reflect.Slice { - panic("parameter row must be a slice") - } - if row != nil { - row_ptr = unsafe.Pointer(row_v.Index(0).Addr().Pointer()) - } - var column_ptr unsafe.Pointer - var column_v = reflect.ValueOf(column) - if column != nil && column_v.Kind() != reflect.Slice { - panic("parameter column must be a slice") - } - if column != nil { - column_ptr = unsafe.Pointer(column_v.Index(0).Addr().Pointer()) - } - C.gl4_3compat_glSeparableFilter2D(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), row_ptr, column_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetSeparableFilter.xml -func (gl *GL) GetSeparableFilter(target, format, gltype glbase.Enum, row, column, span interface{}) { - var row_ptr unsafe.Pointer - var row_v = reflect.ValueOf(row) - if row != nil && row_v.Kind() != reflect.Slice { - panic("parameter row must be a slice") - } - if row != nil { - row_ptr = unsafe.Pointer(row_v.Index(0).Addr().Pointer()) - } - var column_ptr unsafe.Pointer - var column_v = reflect.ValueOf(column) - if column != nil && column_v.Kind() != reflect.Slice { - panic("parameter column must be a slice") - } - if column != nil { - column_ptr = unsafe.Pointer(column_v.Index(0).Addr().Pointer()) - } - var span_ptr unsafe.Pointer - var span_v = reflect.ValueOf(span) - if span != nil && span_v.Kind() != reflect.Slice { - panic("parameter span must be a slice") - } - if span != nil { - span_ptr = unsafe.Pointer(span_v.Index(0).Addr().Pointer()) - } - C.gl4_3compat_glGetSeparableFilter(gl.funcs, C.GLenum(target), C.GLenum(format), C.GLenum(gltype), row_ptr, column_ptr, span_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetConvolutionParameteriv.xml -func (gl *GL) GetConvolutionParameteriv(target, pname glbase.Enum, params []int32) { - C.gl4_3compat_glGetConvolutionParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetConvolutionParameterfv.xml -func (gl *GL) GetConvolutionParameterfv(target, pname glbase.Enum, params []float32) { - C.gl4_3compat_glGetConvolutionParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetConvolutionFilter.xml -func (gl *GL) GetConvolutionFilter(target, format, gltype glbase.Enum, image interface{}) { - var image_ptr unsafe.Pointer - var image_v = reflect.ValueOf(image) - if image != nil && image_v.Kind() != reflect.Slice { - panic("parameter image must be a slice") - } - if image != nil { - image_ptr = unsafe.Pointer(image_v.Index(0).Addr().Pointer()) - } - C.gl4_3compat_glGetConvolutionFilter(gl.funcs, C.GLenum(target), C.GLenum(format), C.GLenum(gltype), image_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyConvolutionFilter2D.xml -func (gl *GL) CopyConvolutionFilter2D(target, internalFormat glbase.Enum, x, y, width, height int) { - C.gl4_3compat_glCopyConvolutionFilter2D(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyConvolutionFilter1D.xml -func (gl *GL) CopyConvolutionFilter1D(target, internalFormat glbase.Enum, x, y, width int) { - C.gl4_3compat_glCopyConvolutionFilter1D(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glConvolutionParameteriv.xml -func (gl *GL) ConvolutionParameteriv(target, pname glbase.Enum, params []int32) { - C.gl4_3compat_glConvolutionParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glConvolutionParameteri.xml -func (gl *GL) ConvolutionParameteri(target, pname glbase.Enum, params int32) { - C.gl4_3compat_glConvolutionParameteri(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLint(params)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glConvolutionParameterfv.xml -func (gl *GL) ConvolutionParameterfv(target, pname glbase.Enum, params []float32) { - C.gl4_3compat_glConvolutionParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glConvolutionParameterf.xml -func (gl *GL) ConvolutionParameterf(target, pname glbase.Enum, params float32) { - C.gl4_3compat_glConvolutionParameterf(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLfloat(params)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glConvolutionFilter2D.xml -func (gl *GL) ConvolutionFilter2D(target, internalFormat glbase.Enum, width, height int, format, gltype glbase.Enum, image interface{}) { - var image_ptr unsafe.Pointer - var image_v = reflect.ValueOf(image) - if image != nil && image_v.Kind() != reflect.Slice { - panic("parameter image must be a slice") - } - if image != nil { - image_ptr = unsafe.Pointer(image_v.Index(0).Addr().Pointer()) - } - C.gl4_3compat_glConvolutionFilter2D(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), image_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glConvolutionFilter1D.xml -func (gl *GL) ConvolutionFilter1D(target, internalFormat glbase.Enum, width int, format, gltype glbase.Enum, image interface{}) { - var image_ptr unsafe.Pointer - var image_v = reflect.ValueOf(image) - if image != nil && image_v.Kind() != reflect.Slice { - panic("parameter image must be a slice") - } - if image != nil { - image_ptr = unsafe.Pointer(image_v.Index(0).Addr().Pointer()) - } - C.gl4_3compat_glConvolutionFilter1D(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLsizei(width), C.GLenum(format), C.GLenum(gltype), image_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyColorSubTable.xml -func (gl *GL) CopyColorSubTable(target glbase.Enum, start int32, x, y, width int) { - C.gl4_3compat_glCopyColorSubTable(gl.funcs, C.GLenum(target), C.GLsizei(start), C.GLint(x), C.GLint(y), C.GLsizei(width)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorSubTable.xml -func (gl *GL) ColorSubTable(target glbase.Enum, start int32, count int, format, gltype glbase.Enum, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_3compat_glColorSubTable(gl.funcs, C.GLenum(target), C.GLsizei(start), C.GLsizei(count), C.GLenum(format), C.GLenum(gltype), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetColorTableParameteriv.xml -func (gl *GL) GetColorTableParameteriv(target, pname glbase.Enum, params []int32) { - C.gl4_3compat_glGetColorTableParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetColorTableParameterfv.xml -func (gl *GL) GetColorTableParameterfv(target, pname glbase.Enum, params []float32) { - C.gl4_3compat_glGetColorTableParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetColorTable.xml -func (gl *GL) GetColorTable(target, format, gltype glbase.Enum, table interface{}) { - var table_ptr unsafe.Pointer - var table_v = reflect.ValueOf(table) - if table != nil && table_v.Kind() != reflect.Slice { - panic("parameter table must be a slice") - } - if table != nil { - table_ptr = unsafe.Pointer(table_v.Index(0).Addr().Pointer()) - } - C.gl4_3compat_glGetColorTable(gl.funcs, C.GLenum(target), C.GLenum(format), C.GLenum(gltype), table_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyColorTable.xml -func (gl *GL) CopyColorTable(target, internalFormat glbase.Enum, x, y, width int) { - C.gl4_3compat_glCopyColorTable(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorTableParameteriv.xml -func (gl *GL) ColorTableParameteriv(target, pname glbase.Enum, params []int32) { - C.gl4_3compat_glColorTableParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorTableParameterfv.xml -func (gl *GL) ColorTableParameterfv(target, pname glbase.Enum, params []float32) { - C.gl4_3compat_glColorTableParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorTable.xml -func (gl *GL) ColorTable(target, internalFormat glbase.Enum, width int, format, gltype glbase.Enum, table interface{}) { - var table_ptr unsafe.Pointer - var table_v = reflect.ValueOf(table) - if table != nil && table_v.Kind() != reflect.Slice { - panic("parameter table must be a slice") - } - if table != nil { - table_ptr = unsafe.Pointer(table_v.Index(0).Addr().Pointer()) - } - C.gl4_3compat_glColorTable(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLsizei(width), C.GLenum(format), C.GLenum(gltype), table_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultTransposeMatrixd.xml -func (gl *GL) MultTransposeMatrixd(m []float64) { - C.gl4_3compat_glMultTransposeMatrixd(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultTransposeMatrixf.xml -func (gl *GL) MultTransposeMatrixf(m []float32) { - C.gl4_3compat_glMultTransposeMatrixf(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLoadTransposeMatrixd.xml -func (gl *GL) LoadTransposeMatrixd(m []float64) { - C.gl4_3compat_glLoadTransposeMatrixd(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLoadTransposeMatrixf.xml -func (gl *GL) LoadTransposeMatrixf(m []float32) { - C.gl4_3compat_glLoadTransposeMatrixf(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&m[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord4sv.xml -func (gl *GL) MultiTexCoord4sv(target glbase.Enum, v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glMultiTexCoord4sv(gl.funcs, C.GLenum(target), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord4s.xml -func (gl *GL) MultiTexCoord4s(target glbase.Enum, s, t, r, q int16) { - C.gl4_3compat_glMultiTexCoord4s(gl.funcs, C.GLenum(target), C.GLshort(s), C.GLshort(t), C.GLshort(r), C.GLshort(q)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord4iv.xml -func (gl *GL) MultiTexCoord4iv(target glbase.Enum, v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glMultiTexCoord4iv(gl.funcs, C.GLenum(target), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord4i.xml -func (gl *GL) MultiTexCoord4i(target glbase.Enum, s, t, r, q int32) { - C.gl4_3compat_glMultiTexCoord4i(gl.funcs, C.GLenum(target), C.GLint(s), C.GLint(t), C.GLint(r), C.GLint(q)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord4fv.xml -func (gl *GL) MultiTexCoord4fv(target glbase.Enum, v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glMultiTexCoord4fv(gl.funcs, C.GLenum(target), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord4f.xml -func (gl *GL) MultiTexCoord4f(target glbase.Enum, s, t, r, q float32) { - C.gl4_3compat_glMultiTexCoord4f(gl.funcs, C.GLenum(target), C.GLfloat(s), C.GLfloat(t), C.GLfloat(r), C.GLfloat(q)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord4dv.xml -func (gl *GL) MultiTexCoord4dv(target glbase.Enum, v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glMultiTexCoord4dv(gl.funcs, C.GLenum(target), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord4d.xml -func (gl *GL) MultiTexCoord4d(target glbase.Enum, s, t, r, q float64) { - C.gl4_3compat_glMultiTexCoord4d(gl.funcs, C.GLenum(target), C.GLdouble(s), C.GLdouble(t), C.GLdouble(r), C.GLdouble(q)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord3sv.xml -func (gl *GL) MultiTexCoord3sv(target glbase.Enum, v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glMultiTexCoord3sv(gl.funcs, C.GLenum(target), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord3s.xml -func (gl *GL) MultiTexCoord3s(target glbase.Enum, s, t, r int16) { - C.gl4_3compat_glMultiTexCoord3s(gl.funcs, C.GLenum(target), C.GLshort(s), C.GLshort(t), C.GLshort(r)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord3iv.xml -func (gl *GL) MultiTexCoord3iv(target glbase.Enum, v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glMultiTexCoord3iv(gl.funcs, C.GLenum(target), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord3i.xml -func (gl *GL) MultiTexCoord3i(target glbase.Enum, s, t, r int32) { - C.gl4_3compat_glMultiTexCoord3i(gl.funcs, C.GLenum(target), C.GLint(s), C.GLint(t), C.GLint(r)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord3fv.xml -func (gl *GL) MultiTexCoord3fv(target glbase.Enum, v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glMultiTexCoord3fv(gl.funcs, C.GLenum(target), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord3f.xml -func (gl *GL) MultiTexCoord3f(target glbase.Enum, s, t, r float32) { - C.gl4_3compat_glMultiTexCoord3f(gl.funcs, C.GLenum(target), C.GLfloat(s), C.GLfloat(t), C.GLfloat(r)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord3dv.xml -func (gl *GL) MultiTexCoord3dv(target glbase.Enum, v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glMultiTexCoord3dv(gl.funcs, C.GLenum(target), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord3d.xml -func (gl *GL) MultiTexCoord3d(target glbase.Enum, s, t, r float64) { - C.gl4_3compat_glMultiTexCoord3d(gl.funcs, C.GLenum(target), C.GLdouble(s), C.GLdouble(t), C.GLdouble(r)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord2sv.xml -func (gl *GL) MultiTexCoord2sv(target glbase.Enum, v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glMultiTexCoord2sv(gl.funcs, C.GLenum(target), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord2s.xml -func (gl *GL) MultiTexCoord2s(target glbase.Enum, s, t int16) { - C.gl4_3compat_glMultiTexCoord2s(gl.funcs, C.GLenum(target), C.GLshort(s), C.GLshort(t)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord2iv.xml -func (gl *GL) MultiTexCoord2iv(target glbase.Enum, v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glMultiTexCoord2iv(gl.funcs, C.GLenum(target), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord2i.xml -func (gl *GL) MultiTexCoord2i(target glbase.Enum, s, t int32) { - C.gl4_3compat_glMultiTexCoord2i(gl.funcs, C.GLenum(target), C.GLint(s), C.GLint(t)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord2fv.xml -func (gl *GL) MultiTexCoord2fv(target glbase.Enum, v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glMultiTexCoord2fv(gl.funcs, C.GLenum(target), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord2f.xml -func (gl *GL) MultiTexCoord2f(target glbase.Enum, s, t float32) { - C.gl4_3compat_glMultiTexCoord2f(gl.funcs, C.GLenum(target), C.GLfloat(s), C.GLfloat(t)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord2dv.xml -func (gl *GL) MultiTexCoord2dv(target glbase.Enum, v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glMultiTexCoord2dv(gl.funcs, C.GLenum(target), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord2d.xml -func (gl *GL) MultiTexCoord2d(target glbase.Enum, s, t float64) { - C.gl4_3compat_glMultiTexCoord2d(gl.funcs, C.GLenum(target), C.GLdouble(s), C.GLdouble(t)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord1sv.xml -func (gl *GL) MultiTexCoord1sv(target glbase.Enum, v []int16) { - C.gl4_3compat_glMultiTexCoord1sv(gl.funcs, C.GLenum(target), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord1s.xml -func (gl *GL) MultiTexCoord1s(target glbase.Enum, s int16) { - C.gl4_3compat_glMultiTexCoord1s(gl.funcs, C.GLenum(target), C.GLshort(s)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord1iv.xml -func (gl *GL) MultiTexCoord1iv(target glbase.Enum, v []int32) { - C.gl4_3compat_glMultiTexCoord1iv(gl.funcs, C.GLenum(target), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord1i.xml -func (gl *GL) MultiTexCoord1i(target glbase.Enum, s int32) { - C.gl4_3compat_glMultiTexCoord1i(gl.funcs, C.GLenum(target), C.GLint(s)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord1fv.xml -func (gl *GL) MultiTexCoord1fv(target glbase.Enum, v []float32) { - C.gl4_3compat_glMultiTexCoord1fv(gl.funcs, C.GLenum(target), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord1f.xml -func (gl *GL) MultiTexCoord1f(target glbase.Enum, s float32) { - C.gl4_3compat_glMultiTexCoord1f(gl.funcs, C.GLenum(target), C.GLfloat(s)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord1dv.xml -func (gl *GL) MultiTexCoord1dv(target glbase.Enum, v []float64) { - C.gl4_3compat_glMultiTexCoord1dv(gl.funcs, C.GLenum(target), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoord1d.xml -func (gl *GL) MultiTexCoord1d(target glbase.Enum, s float64) { - C.gl4_3compat_glMultiTexCoord1d(gl.funcs, C.GLenum(target), C.GLdouble(s)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClientActiveTexture.xml -func (gl *GL) ClientActiveTexture(texture glbase.Enum) { - C.gl4_3compat_glClientActiveTexture(gl.funcs, C.GLenum(texture)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWindowPos3sv.xml -func (gl *GL) WindowPos3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glWindowPos3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWindowPos3s.xml -func (gl *GL) WindowPos3s(x, y, z int16) { - C.gl4_3compat_glWindowPos3s(gl.funcs, C.GLshort(x), C.GLshort(y), C.GLshort(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWindowPos3iv.xml -func (gl *GL) WindowPos3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glWindowPos3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWindowPos3i.xml -func (gl *GL) WindowPos3i(x, y, z int) { - C.gl4_3compat_glWindowPos3i(gl.funcs, C.GLint(x), C.GLint(y), C.GLint(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWindowPos3fv.xml -func (gl *GL) WindowPos3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glWindowPos3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWindowPos3f.xml -func (gl *GL) WindowPos3f(x, y, z float32) { - C.gl4_3compat_glWindowPos3f(gl.funcs, C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWindowPos3dv.xml -func (gl *GL) WindowPos3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glWindowPos3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWindowPos3d.xml -func (gl *GL) WindowPos3d(x, y, z float64) { - C.gl4_3compat_glWindowPos3d(gl.funcs, C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWindowPos2sv.xml -func (gl *GL) WindowPos2sv(v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glWindowPos2sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWindowPos2s.xml -func (gl *GL) WindowPos2s(x, y int16) { - C.gl4_3compat_glWindowPos2s(gl.funcs, C.GLshort(x), C.GLshort(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWindowPos2iv.xml -func (gl *GL) WindowPos2iv(v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glWindowPos2iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWindowPos2i.xml -func (gl *GL) WindowPos2i(x, y int) { - C.gl4_3compat_glWindowPos2i(gl.funcs, C.GLint(x), C.GLint(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWindowPos2fv.xml -func (gl *GL) WindowPos2fv(v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glWindowPos2fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWindowPos2f.xml -func (gl *GL) WindowPos2f(x, y float32) { - C.gl4_3compat_glWindowPos2f(gl.funcs, C.GLfloat(x), C.GLfloat(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWindowPos2dv.xml -func (gl *GL) WindowPos2dv(v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glWindowPos2dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWindowPos2d.xml -func (gl *GL) WindowPos2d(x, y float64) { - C.gl4_3compat_glWindowPos2d(gl.funcs, C.GLdouble(x), C.GLdouble(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColorPointer.xml -func (gl *GL) SecondaryColorPointer(size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl4_3compat_glSecondaryColorPointer(gl.funcs, C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColor3usv.xml -func (gl *GL) SecondaryColor3usv(v []uint16) { - C.gl4_3compat_glSecondaryColor3usv(gl.funcs, (*C.GLushort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColor3us.xml -func (gl *GL) SecondaryColor3us(red, green, blue uint16) { - C.gl4_3compat_glSecondaryColor3us(gl.funcs, C.GLushort(red), C.GLushort(green), C.GLushort(blue)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColor3uiv.xml -func (gl *GL) SecondaryColor3uiv(v []uint32) { - C.gl4_3compat_glSecondaryColor3uiv(gl.funcs, (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColor3ui.xml -func (gl *GL) SecondaryColor3ui(red, green, blue uint32) { - C.gl4_3compat_glSecondaryColor3ui(gl.funcs, C.GLuint(red), C.GLuint(green), C.GLuint(blue)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColor3ubv.xml -func (gl *GL) SecondaryColor3ubv(v []uint8) { - C.gl4_3compat_glSecondaryColor3ubv(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColor3ub.xml -func (gl *GL) SecondaryColor3ub(red, green, blue uint8) { - C.gl4_3compat_glSecondaryColor3ub(gl.funcs, C.GLubyte(red), C.GLubyte(green), C.GLubyte(blue)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColor3sv.xml -func (gl *GL) SecondaryColor3sv(v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glSecondaryColor3sv(gl.funcs, (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColor3s.xml -func (gl *GL) SecondaryColor3s(red, green, blue int16) { - C.gl4_3compat_glSecondaryColor3s(gl.funcs, C.GLshort(red), C.GLshort(green), C.GLshort(blue)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColor3iv.xml -func (gl *GL) SecondaryColor3iv(v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glSecondaryColor3iv(gl.funcs, (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColor3i.xml -func (gl *GL) SecondaryColor3i(red, green, blue int32) { - C.gl4_3compat_glSecondaryColor3i(gl.funcs, C.GLint(red), C.GLint(green), C.GLint(blue)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColor3fv.xml -func (gl *GL) SecondaryColor3fv(v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glSecondaryColor3fv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColor3f.xml -func (gl *GL) SecondaryColor3f(red, green, blue float32) { - C.gl4_3compat_glSecondaryColor3f(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColor3dv.xml -func (gl *GL) SecondaryColor3dv(v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glSecondaryColor3dv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColor3d.xml -func (gl *GL) SecondaryColor3d(red, green, blue float64) { - C.gl4_3compat_glSecondaryColor3d(gl.funcs, C.GLdouble(red), C.GLdouble(green), C.GLdouble(blue)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColor3bv.xml -func (gl *GL) SecondaryColor3bv(v []byte) { - C.gl4_3compat_glSecondaryColor3bv(gl.funcs, (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColor3b.xml -func (gl *GL) SecondaryColor3b(red, green, blue byte) { - C.gl4_3compat_glSecondaryColor3b(gl.funcs, C.GLbyte(red), C.GLbyte(green), C.GLbyte(blue)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFogCoordPointer.xml -func (gl *GL) FogCoordPointer(gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl4_3compat_glFogCoordPointer(gl.funcs, C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFogCoorddv.xml -func (gl *GL) FogCoorddv(coord []float64) { - C.gl4_3compat_glFogCoorddv(gl.funcs, (*C.GLdouble)(unsafe.Pointer(&coord[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFogCoordd.xml -func (gl *GL) FogCoordd(coord float64) { - C.gl4_3compat_glFogCoordd(gl.funcs, C.GLdouble(coord)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFogCoordfv.xml -func (gl *GL) FogCoordfv(coord []float32) { - C.gl4_3compat_glFogCoordfv(gl.funcs, (*C.GLfloat)(unsafe.Pointer(&coord[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFogCoordf.xml -func (gl *GL) FogCoordf(coord float32) { - C.gl4_3compat_glFogCoordf(gl.funcs, C.GLfloat(coord)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4usv.xml -func (gl *GL) VertexAttrib4usv(index glbase.Attrib, v []uint16) { - C.gl4_3compat_glVertexAttrib4usv(gl.funcs, C.GLuint(index), (*C.GLushort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4uiv.xml -func (gl *GL) VertexAttrib4uiv(index glbase.Attrib, v []uint32) { - C.gl4_3compat_glVertexAttrib4uiv(gl.funcs, C.GLuint(index), (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4ubv.xml -func (gl *GL) VertexAttrib4ubv(index glbase.Attrib, v []uint8) { - C.gl4_3compat_glVertexAttrib4ubv(gl.funcs, C.GLuint(index), (*C.GLubyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4sv.xml -func (gl *GL) VertexAttrib4sv(index glbase.Attrib, v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glVertexAttrib4sv(gl.funcs, C.GLuint(index), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4s.xml -func (gl *GL) VertexAttrib4s(index glbase.Attrib, x, y, z, w int16) { - C.gl4_3compat_glVertexAttrib4s(gl.funcs, C.GLuint(index), C.GLshort(x), C.GLshort(y), C.GLshort(z), C.GLshort(w)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4iv.xml -func (gl *GL) VertexAttrib4iv(index glbase.Attrib, v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glVertexAttrib4iv(gl.funcs, C.GLuint(index), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4fv.xml -func (gl *GL) VertexAttrib4fv(index glbase.Attrib, v []float32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glVertexAttrib4fv(gl.funcs, C.GLuint(index), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4f.xml -func (gl *GL) VertexAttrib4f(index glbase.Attrib, x, y, z, w float32) { - C.gl4_3compat_glVertexAttrib4f(gl.funcs, C.GLuint(index), C.GLfloat(x), C.GLfloat(y), C.GLfloat(z), C.GLfloat(w)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4dv.xml -func (gl *GL) VertexAttrib4dv(index glbase.Attrib, v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glVertexAttrib4dv(gl.funcs, C.GLuint(index), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4d.xml -func (gl *GL) VertexAttrib4d(index glbase.Attrib, x, y, z, w float64) { - C.gl4_3compat_glVertexAttrib4d(gl.funcs, C.GLuint(index), C.GLdouble(x), C.GLdouble(y), C.GLdouble(z), C.GLdouble(w)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4bv.xml -func (gl *GL) VertexAttrib4bv(index glbase.Attrib, v []byte) { - C.gl4_3compat_glVertexAttrib4bv(gl.funcs, C.GLuint(index), (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4Nusv.xml -func (gl *GL) VertexAttrib4Nusv(index glbase.Attrib, v []uint16) { - C.gl4_3compat_glVertexAttrib4Nusv(gl.funcs, C.GLuint(index), (*C.GLushort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4Nuiv.xml -func (gl *GL) VertexAttrib4Nuiv(index glbase.Attrib, v []uint32) { - C.gl4_3compat_glVertexAttrib4Nuiv(gl.funcs, C.GLuint(index), (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4Nubv.xml -func (gl *GL) VertexAttrib4Nubv(index glbase.Attrib, v []uint8) { - C.gl4_3compat_glVertexAttrib4Nubv(gl.funcs, C.GLuint(index), (*C.GLubyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4Nub.xml -func (gl *GL) VertexAttrib4Nub(index glbase.Attrib, x, y, z, w uint8) { - C.gl4_3compat_glVertexAttrib4Nub(gl.funcs, C.GLuint(index), C.GLubyte(x), C.GLubyte(y), C.GLubyte(z), C.GLubyte(w)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4Nsv.xml -func (gl *GL) VertexAttrib4Nsv(index glbase.Attrib, v []int16) { - C.gl4_3compat_glVertexAttrib4Nsv(gl.funcs, C.GLuint(index), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4Niv.xml -func (gl *GL) VertexAttrib4Niv(index glbase.Attrib, v []int32) { - C.gl4_3compat_glVertexAttrib4Niv(gl.funcs, C.GLuint(index), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib4Nbv.xml -func (gl *GL) VertexAttrib4Nbv(index glbase.Attrib, v []byte) { - C.gl4_3compat_glVertexAttrib4Nbv(gl.funcs, C.GLuint(index), (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib3sv.xml -func (gl *GL) VertexAttrib3sv(index glbase.Attrib, v []int16) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glVertexAttrib3sv(gl.funcs, C.GLuint(index), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib3s.xml -func (gl *GL) VertexAttrib3s(index glbase.Attrib, x, y, z int16) { - C.gl4_3compat_glVertexAttrib3s(gl.funcs, C.GLuint(index), C.GLshort(x), C.GLshort(y), C.GLshort(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib3fv.xml -func (gl *GL) VertexAttrib3fv(index glbase.Attrib, v []float32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glVertexAttrib3fv(gl.funcs, C.GLuint(index), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib3f.xml -func (gl *GL) VertexAttrib3f(index glbase.Attrib, x, y, z float32) { - C.gl4_3compat_glVertexAttrib3f(gl.funcs, C.GLuint(index), C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib3dv.xml -func (gl *GL) VertexAttrib3dv(index glbase.Attrib, v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glVertexAttrib3dv(gl.funcs, C.GLuint(index), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib3d.xml -func (gl *GL) VertexAttrib3d(index glbase.Attrib, x, y, z float64) { - C.gl4_3compat_glVertexAttrib3d(gl.funcs, C.GLuint(index), C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib2sv.xml -func (gl *GL) VertexAttrib2sv(index glbase.Attrib, v []int16) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glVertexAttrib2sv(gl.funcs, C.GLuint(index), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib2s.xml -func (gl *GL) VertexAttrib2s(index glbase.Attrib, x, y int16) { - C.gl4_3compat_glVertexAttrib2s(gl.funcs, C.GLuint(index), C.GLshort(x), C.GLshort(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib2fv.xml -func (gl *GL) VertexAttrib2fv(index glbase.Attrib, v []float32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glVertexAttrib2fv(gl.funcs, C.GLuint(index), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib2f.xml -func (gl *GL) VertexAttrib2f(index glbase.Attrib, x, y float32) { - C.gl4_3compat_glVertexAttrib2f(gl.funcs, C.GLuint(index), C.GLfloat(x), C.GLfloat(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib2dv.xml -func (gl *GL) VertexAttrib2dv(index glbase.Attrib, v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glVertexAttrib2dv(gl.funcs, C.GLuint(index), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib2d.xml -func (gl *GL) VertexAttrib2d(index glbase.Attrib, x, y float64) { - C.gl4_3compat_glVertexAttrib2d(gl.funcs, C.GLuint(index), C.GLdouble(x), C.GLdouble(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib1sv.xml -func (gl *GL) VertexAttrib1sv(index glbase.Attrib, v []int16) { - C.gl4_3compat_glVertexAttrib1sv(gl.funcs, C.GLuint(index), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib1s.xml -func (gl *GL) VertexAttrib1s(index glbase.Attrib, x int16) { - C.gl4_3compat_glVertexAttrib1s(gl.funcs, C.GLuint(index), C.GLshort(x)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib1fv.xml -func (gl *GL) VertexAttrib1fv(index glbase.Attrib, v []float32) { - C.gl4_3compat_glVertexAttrib1fv(gl.funcs, C.GLuint(index), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib1f.xml -func (gl *GL) VertexAttrib1f(index glbase.Attrib, x float32) { - C.gl4_3compat_glVertexAttrib1f(gl.funcs, C.GLuint(index), C.GLfloat(x)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib1dv.xml -func (gl *GL) VertexAttrib1dv(index glbase.Attrib, v []float64) { - C.gl4_3compat_glVertexAttrib1dv(gl.funcs, C.GLuint(index), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttrib1d.xml -func (gl *GL) VertexAttrib1d(index glbase.Attrib, x float64) { - C.gl4_3compat_glVertexAttrib1d(gl.funcs, C.GLuint(index), C.GLdouble(x)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI4usv.xml -func (gl *GL) VertexAttribI4usv(index glbase.Attrib, v []uint16) { - C.gl4_3compat_glVertexAttribI4usv(gl.funcs, C.GLuint(index), (*C.GLushort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI4ubv.xml -func (gl *GL) VertexAttribI4ubv(index glbase.Attrib, v []uint8) { - C.gl4_3compat_glVertexAttribI4ubv(gl.funcs, C.GLuint(index), (*C.GLubyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI4sv.xml -func (gl *GL) VertexAttribI4sv(index glbase.Attrib, v []int16) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glVertexAttribI4sv(gl.funcs, C.GLuint(index), (*C.GLshort)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI4bv.xml -func (gl *GL) VertexAttribI4bv(index glbase.Attrib, v []byte) { - C.gl4_3compat_glVertexAttribI4bv(gl.funcs, C.GLuint(index), (*C.GLbyte)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI4uiv.xml -func (gl *GL) VertexAttribI4uiv(index glbase.Attrib, v []uint32) { - C.gl4_3compat_glVertexAttribI4uiv(gl.funcs, C.GLuint(index), (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI3uiv.xml -func (gl *GL) VertexAttribI3uiv(index glbase.Attrib, v []uint32) { - C.gl4_3compat_glVertexAttribI3uiv(gl.funcs, C.GLuint(index), (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI2uiv.xml -func (gl *GL) VertexAttribI2uiv(index glbase.Attrib, v []uint32) { - C.gl4_3compat_glVertexAttribI2uiv(gl.funcs, C.GLuint(index), (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI1uiv.xml -func (gl *GL) VertexAttribI1uiv(index glbase.Attrib, v []uint32) { - C.gl4_3compat_glVertexAttribI1uiv(gl.funcs, C.GLuint(index), (*C.GLuint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI4iv.xml -func (gl *GL) VertexAttribI4iv(index glbase.Attrib, v []int32) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glVertexAttribI4iv(gl.funcs, C.GLuint(index), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI3iv.xml -func (gl *GL) VertexAttribI3iv(index glbase.Attrib, v []int32) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glVertexAttribI3iv(gl.funcs, C.GLuint(index), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI2iv.xml -func (gl *GL) VertexAttribI2iv(index glbase.Attrib, v []int32) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_3compat_glVertexAttribI2iv(gl.funcs, C.GLuint(index), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI1iv.xml -func (gl *GL) VertexAttribI1iv(index glbase.Attrib, v []int32) { - C.gl4_3compat_glVertexAttribI1iv(gl.funcs, C.GLuint(index), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI4ui.xml -func (gl *GL) VertexAttribI4ui(index glbase.Attrib, x, y, z, w uint32) { - C.gl4_3compat_glVertexAttribI4ui(gl.funcs, C.GLuint(index), C.GLuint(x), C.GLuint(y), C.GLuint(z), C.GLuint(w)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI3ui.xml -func (gl *GL) VertexAttribI3ui(index glbase.Attrib, x, y, z uint32) { - C.gl4_3compat_glVertexAttribI3ui(gl.funcs, C.GLuint(index), C.GLuint(x), C.GLuint(y), C.GLuint(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI2ui.xml -func (gl *GL) VertexAttribI2ui(index glbase.Attrib, x, y uint32) { - C.gl4_3compat_glVertexAttribI2ui(gl.funcs, C.GLuint(index), C.GLuint(x), C.GLuint(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI1ui.xml -func (gl *GL) VertexAttribI1ui(index glbase.Attrib, x uint32) { - C.gl4_3compat_glVertexAttribI1ui(gl.funcs, C.GLuint(index), C.GLuint(x)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI4i.xml -func (gl *GL) VertexAttribI4i(index glbase.Attrib, x, y, z, w int) { - C.gl4_3compat_glVertexAttribI4i(gl.funcs, C.GLuint(index), C.GLint(x), C.GLint(y), C.GLint(z), C.GLint(w)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI3i.xml -func (gl *GL) VertexAttribI3i(index glbase.Attrib, x, y, z int) { - C.gl4_3compat_glVertexAttribI3i(gl.funcs, C.GLuint(index), C.GLint(x), C.GLint(y), C.GLint(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI2i.xml -func (gl *GL) VertexAttribI2i(index glbase.Attrib, x, y int) { - C.gl4_3compat_glVertexAttribI2i(gl.funcs, C.GLuint(index), C.GLint(x), C.GLint(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribI1i.xml -func (gl *GL) VertexAttribI1i(index glbase.Attrib, x int) { - C.gl4_3compat_glVertexAttribI1i(gl.funcs, C.GLuint(index), C.GLint(x)) -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.3core/funcs.cpp b/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.3core/funcs.cpp deleted file mode 100644 index fec3ebd31b..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.3core/funcs.cpp +++ /dev/null @@ -1,2946 +0,0 @@ - -// ** file automatically generated by glgen -- do not edit manually ** - -#include -#include - -#include "funcs.h" - -void *gl4_3core_funcs() { - QOpenGLFunctions_4_3_Core* funcs = QOpenGLContext::currentContext()->versionFunctions(); - if (!funcs) { - return 0; - } - funcs->initializeOpenGLFunctions(); - return funcs; -} - - -void gl4_3core_glViewport(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glViewport(x, y, width, height); -} - -void gl4_3core_glDepthRange(void *_glfuncs, GLdouble nearVal, GLdouble farVal) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthRange(nearVal, farVal); -} - -GLboolean gl4_3core_glIsEnabled(void *_glfuncs, GLenum cap) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsEnabled(cap); -} - -void gl4_3core_glGetTexLevelParameteriv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexLevelParameteriv(target, level, pname, params); -} - -void gl4_3core_glGetTexLevelParameterfv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexLevelParameterfv(target, level, pname, params); -} - -void gl4_3core_glGetTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameteriv(target, pname, params); -} - -void gl4_3core_glGetTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameterfv(target, pname, params); -} - -void gl4_3core_glGetTexImage(void *_glfuncs, GLenum target, GLint level, GLenum format, GLenum gltype, GLvoid* pixels) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexImage(target, level, format, gltype, pixels); -} - -void gl4_3core_glGetIntegerv(void *_glfuncs, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetIntegerv(pname, params); -} - -void gl4_3core_glGetFloatv(void *_glfuncs, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetFloatv(pname, params); -} - -GLenum gl4_3core_glGetError(void *_glfuncs) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetError(); -} - -void gl4_3core_glGetDoublev(void *_glfuncs, GLenum pname, GLdouble* params) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetDoublev(pname, params); -} - -void gl4_3core_glGetBooleanv(void *_glfuncs, GLenum pname, GLboolean* params) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBooleanv(pname, params); -} - -void gl4_3core_glReadPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum gltype, GLvoid* pixels) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glReadPixels(x, y, width, height, format, gltype, pixels); -} - -void gl4_3core_glReadBuffer(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glReadBuffer(mode); -} - -void gl4_3core_glPixelStorei(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelStorei(pname, param); -} - -void gl4_3core_glPixelStoref(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPixelStoref(pname, param); -} - -void gl4_3core_glDepthFunc(void *_glfuncs, GLenum glfunc) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthFunc(glfunc); -} - -void gl4_3core_glStencilOp(void *_glfuncs, GLenum fail, GLenum zfail, GLenum zpass) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilOp(fail, zfail, zpass); -} - -void gl4_3core_glStencilFunc(void *_glfuncs, GLenum glfunc, GLint ref, GLuint mask) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilFunc(glfunc, ref, mask); -} - -void gl4_3core_glLogicOp(void *_glfuncs, GLenum opcode) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLogicOp(opcode); -} - -void gl4_3core_glBlendFunc(void *_glfuncs, GLenum sfactor, GLenum dfactor) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendFunc(sfactor, dfactor); -} - -void gl4_3core_glFlush(void *_glfuncs) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFlush(); -} - -void gl4_3core_glFinish(void *_glfuncs) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFinish(); -} - -void gl4_3core_glEnable(void *_glfuncs, GLenum cap) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnable(cap); -} - -void gl4_3core_glDisable(void *_glfuncs, GLenum cap) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDisable(cap); -} - -void gl4_3core_glDepthMask(void *_glfuncs, GLboolean flag) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthMask(flag); -} - -void gl4_3core_glColorMask(void *_glfuncs, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorMask(red, green, blue, alpha); -} - -void gl4_3core_glStencilMask(void *_glfuncs, GLuint mask) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilMask(mask); -} - -void gl4_3core_glClearDepth(void *_glfuncs, GLdouble depth) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearDepth(depth); -} - -void gl4_3core_glClearStencil(void *_glfuncs, GLint s) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearStencil(s); -} - -void gl4_3core_glClearColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearColor(red, green, blue, alpha); -} - -void gl4_3core_glClear(void *_glfuncs, GLbitfield mask) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClear(mask); -} - -void gl4_3core_glDrawBuffer(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawBuffer(mode); -} - -void gl4_3core_glTexImage2D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage2D(target, level, internalFormat, width, height, border, format, gltype, pixels); -} - -void gl4_3core_glTexImage1D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage1D(target, level, internalFormat, width, border, format, gltype, pixels); -} - -void gl4_3core_glTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameteriv(target, pname, params); -} - -void gl4_3core_glTexParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint param) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameteri(target, pname, param); -} - -void gl4_3core_glTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterfv(target, pname, params); -} - -void gl4_3core_glTexParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterf(target, pname, param); -} - -void gl4_3core_glScissor(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScissor(x, y, width, height); -} - -void gl4_3core_glPolygonMode(void *_glfuncs, GLenum face, GLenum mode) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPolygonMode(face, mode); -} - -void gl4_3core_glPointSize(void *_glfuncs, GLfloat size) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointSize(size); -} - -void gl4_3core_glLineWidth(void *_glfuncs, GLfloat width) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLineWidth(width); -} - -void gl4_3core_glHint(void *_glfuncs, GLenum target, GLenum mode) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glHint(target, mode); -} - -void gl4_3core_glFrontFace(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFrontFace(mode); -} - -void gl4_3core_glCullFace(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCullFace(mode); -} - -void gl4_3core_glIndexubv(void *_glfuncs, const GLubyte* c) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexubv(c); -} - -void gl4_3core_glIndexub(void *_glfuncs, GLubyte c) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glIndexub(c); -} - -GLboolean gl4_3core_glIsTexture(void *_glfuncs, GLuint texture) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsTexture(texture); -} - -void gl4_3core_glGenTextures(void *_glfuncs, GLsizei n, GLuint* textures) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenTextures(n, textures); -} - -void gl4_3core_glDeleteTextures(void *_glfuncs, GLsizei n, const GLuint* textures) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteTextures(n, textures); -} - -void gl4_3core_glBindTexture(void *_glfuncs, GLenum target, GLuint texture) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindTexture(target, texture); -} - -void gl4_3core_glTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, gltype, pixels); -} - -void gl4_3core_glTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexSubImage1D(target, level, xoffset, width, format, gltype, pixels); -} - -void gl4_3core_glCopyTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height); -} - -void gl4_3core_glCopyTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexSubImage1D(target, level, xoffset, x, y, width); -} - -void gl4_3core_glCopyTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexImage2D(target, level, internalFormat, x, y, width, height, border); -} - -void gl4_3core_glCopyTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexImage1D(target, level, internalFormat, x, y, width, border); -} - -void gl4_3core_glPolygonOffset(void *_glfuncs, GLfloat factor, GLfloat units) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPolygonOffset(factor, units); -} - -void gl4_3core_glDrawElements(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElements(mode, count, gltype, indices); -} - -void gl4_3core_glDrawArrays(void *_glfuncs, GLenum mode, GLint first, GLsizei count) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawArrays(mode, first, count); -} - -void gl4_3core_glCopyTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyTexSubImage3D(target, level, xoffset, yoffset, zoffset, x, y, width, height); -} - -void gl4_3core_glTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, gltype, pixels); -} - -void gl4_3core_glTexImage3D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage3D(target, level, internalFormat, width, height, depth, border, format, gltype, pixels); -} - -void gl4_3core_glDrawRangeElements(void *_glfuncs, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum gltype, const GLvoid* indices) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawRangeElements(mode, start, end, count, gltype, indices); -} - -void gl4_3core_glBlendEquation(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendEquation(mode); -} - -void gl4_3core_glBlendColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendColor(red, green, blue, alpha); -} - -void gl4_3core_glGetCompressedTexImage(void *_glfuncs, GLenum target, GLint level, GLvoid* img) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetCompressedTexImage(target, level, img); -} - -void gl4_3core_glCompressedTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexSubImage1D(target, level, xoffset, width, format, imageSize, data); -} - -void gl4_3core_glCompressedTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data); -} - -void gl4_3core_glCompressedTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data); -} - -void gl4_3core_glCompressedTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexImage1D(target, level, internalFormat, width, border, imageSize, data); -} - -void gl4_3core_glCompressedTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexImage2D(target, level, internalFormat, width, height, border, imageSize, data); -} - -void gl4_3core_glCompressedTexImage3D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexImage3D(target, level, internalFormat, width, height, depth, border, imageSize, data); -} - -void gl4_3core_glSampleCoverage(void *_glfuncs, GLfloat value, GLboolean invert) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSampleCoverage(value, invert); -} - -void gl4_3core_glActiveTexture(void *_glfuncs, GLenum texture) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glActiveTexture(texture); -} - -void gl4_3core_glPointParameteriv(void *_glfuncs, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameteriv(pname, params); -} - -void gl4_3core_glPointParameteri(void *_glfuncs, GLenum pname, GLint param) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameteri(pname, param); -} - -void gl4_3core_glPointParameterfv(void *_glfuncs, GLenum pname, const GLfloat* params) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameterfv(pname, params); -} - -void gl4_3core_glPointParameterf(void *_glfuncs, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPointParameterf(pname, param); -} - -void gl4_3core_glMultiDrawArrays(void *_glfuncs, GLenum mode, const GLint* first, const GLsizei* count, GLsizei drawcount) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiDrawArrays(mode, first, count, drawcount); -} - -void gl4_3core_glBlendFuncSeparate(void *_glfuncs, GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendFuncSeparate(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha); -} - -void gl4_3core_glGetBufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBufferParameteriv(target, pname, params); -} - -GLboolean gl4_3core_glUnmapBuffer(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glUnmapBuffer(target); -} - -void gl4_3core_glGetBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, GLvoid* data) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBufferSubData(target, offset, size, data); -} - -void gl4_3core_glBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBufferSubData(target, offset, size, data); -} - -void gl4_3core_glBufferData(void *_glfuncs, GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBufferData(target, size, data, usage); -} - -GLboolean gl4_3core_glIsBuffer(void *_glfuncs, GLuint buffer) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsBuffer(buffer); -} - -void gl4_3core_glGenBuffers(void *_glfuncs, GLsizei n, GLuint* buffers) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenBuffers(n, buffers); -} - -void gl4_3core_glDeleteBuffers(void *_glfuncs, GLsizei n, const GLuint* buffers) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteBuffers(n, buffers); -} - -void gl4_3core_glBindBuffer(void *_glfuncs, GLenum target, GLuint buffer) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindBuffer(target, buffer); -} - -void gl4_3core_glGetQueryObjectuiv(void *_glfuncs, GLuint id, GLenum pname, GLuint* params) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryObjectuiv(id, pname, params); -} - -void gl4_3core_glGetQueryObjectiv(void *_glfuncs, GLuint id, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryObjectiv(id, pname, params); -} - -void gl4_3core_glGetQueryiv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryiv(target, pname, params); -} - -void gl4_3core_glEndQuery(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndQuery(target); -} - -void gl4_3core_glBeginQuery(void *_glfuncs, GLenum target, GLuint id) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBeginQuery(target, id); -} - -GLboolean gl4_3core_glIsQuery(void *_glfuncs, GLuint id) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsQuery(id); -} - -void gl4_3core_glDeleteQueries(void *_glfuncs, GLsizei n, const GLuint* ids) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteQueries(n, ids); -} - -void gl4_3core_glGenQueries(void *_glfuncs, GLsizei n, GLuint* ids) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenQueries(n, ids); -} - -void gl4_3core_glVertexAttribPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLboolean normalized, GLsizei stride, const GLvoid* offset) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribPointer(index, size, gltype, normalized, stride, offset); -} - -void gl4_3core_glValidateProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glValidateProgram(program); -} - -void gl4_3core_glUniformMatrix4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4fv(location, count, transpose, value); -} - -void gl4_3core_glUniformMatrix3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3fv(location, count, transpose, value); -} - -void gl4_3core_glUniformMatrix2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2fv(location, count, transpose, value); -} - -void gl4_3core_glUniform4iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4iv(location, count, value); -} - -void gl4_3core_glUniform3iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3iv(location, count, value); -} - -void gl4_3core_glUniform2iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2iv(location, count, value); -} - -void gl4_3core_glUniform1iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1iv(location, count, value); -} - -void gl4_3core_glUniform4fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4fv(location, count, value); -} - -void gl4_3core_glUniform3fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3fv(location, count, value); -} - -void gl4_3core_glUniform2fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2fv(location, count, value); -} - -void gl4_3core_glUniform1fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1fv(location, count, value); -} - -void gl4_3core_glUniform4i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2, GLint v3) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4i(location, v0, v1, v2, v3); -} - -void gl4_3core_glUniform3i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3i(location, v0, v1, v2); -} - -void gl4_3core_glUniform2i(void *_glfuncs, GLint location, GLint v0, GLint v1) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2i(location, v0, v1); -} - -void gl4_3core_glUniform1i(void *_glfuncs, GLint location, GLint v0) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1i(location, v0); -} - -void gl4_3core_glUniform4f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4f(location, v0, v1, v2, v3); -} - -void gl4_3core_glUniform3f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3f(location, v0, v1, v2); -} - -void gl4_3core_glUniform2f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2f(location, v0, v1); -} - -void gl4_3core_glUniform1f(void *_glfuncs, GLint location, GLfloat v0) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1f(location, v0); -} - -void gl4_3core_glUseProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUseProgram(program); -} - -void gl4_3core_glShaderSource(void *_glfuncs, GLuint shader, GLsizei count, const GLchar** source, const GLint* length) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glShaderSource(shader, count, source, length); -} - -void gl4_3core_glLinkProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLinkProgram(program); -} - -GLboolean gl4_3core_glIsShader(void *_glfuncs, GLuint shader) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsShader(shader); -} - -GLboolean gl4_3core_glIsProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsProgram(program); -} - -void gl4_3core_glGetVertexAttribiv(void *_glfuncs, GLuint index, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribiv(index, pname, params); -} - -void gl4_3core_glGetVertexAttribfv(void *_glfuncs, GLuint index, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribfv(index, pname, params); -} - -void gl4_3core_glGetVertexAttribdv(void *_glfuncs, GLuint index, GLenum pname, GLdouble* params) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribdv(index, pname, params); -} - -void gl4_3core_glGetUniformiv(void *_glfuncs, GLuint program, GLint location, GLint* params) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetUniformiv(program, location, params); -} - -void gl4_3core_glGetUniformfv(void *_glfuncs, GLuint program, GLint location, GLfloat* params) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetUniformfv(program, location, params); -} - -GLint gl4_3core_glGetUniformLocation(void *_glfuncs, GLuint program, const GLchar* name) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetUniformLocation(program, name); -} - -void gl4_3core_glGetShaderSource(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* source) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetShaderSource(shader, bufSize, length, source); -} - -void gl4_3core_glGetShaderInfoLog(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* infoLog) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetShaderInfoLog(shader, bufSize, length, infoLog); -} - -void gl4_3core_glGetShaderiv(void *_glfuncs, GLuint shader, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetShaderiv(shader, pname, params); -} - -void gl4_3core_glGetProgramInfoLog(void *_glfuncs, GLuint program, GLsizei bufSize, GLsizei* length, GLchar* infoLog) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetProgramInfoLog(program, bufSize, length, infoLog); -} - -void gl4_3core_glGetProgramiv(void *_glfuncs, GLuint program, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetProgramiv(program, pname, params); -} - -GLint gl4_3core_glGetAttribLocation(void *_glfuncs, GLuint program, const GLchar* name) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetAttribLocation(program, name); -} - -void gl4_3core_glGetAttachedShaders(void *_glfuncs, GLuint program, GLsizei maxCount, GLsizei* count, GLuint* obj) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetAttachedShaders(program, maxCount, count, obj); -} - -void gl4_3core_glGetActiveUniform(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniform(program, index, bufSize, length, size, gltype, name); -} - -void gl4_3core_glGetActiveAttrib(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveAttrib(program, index, bufSize, length, size, gltype, name); -} - -void gl4_3core_glEnableVertexAttribArray(void *_glfuncs, GLuint index) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnableVertexAttribArray(index); -} - -void gl4_3core_glDisableVertexAttribArray(void *_glfuncs, GLuint index) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDisableVertexAttribArray(index); -} - -void gl4_3core_glDetachShader(void *_glfuncs, GLuint program, GLuint shader) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDetachShader(program, shader); -} - -void gl4_3core_glDeleteShader(void *_glfuncs, GLuint shader) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteShader(shader); -} - -void gl4_3core_glDeleteProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteProgram(program); -} - -GLuint gl4_3core_glCreateShader(void *_glfuncs, GLenum gltype) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glCreateShader(gltype); -} - -GLuint gl4_3core_glCreateProgram(void *_glfuncs) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glCreateProgram(); -} - -void gl4_3core_glCompileShader(void *_glfuncs, GLuint shader) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompileShader(shader); -} - -void gl4_3core_glBindAttribLocation(void *_glfuncs, GLuint program, GLuint index, const GLchar* name) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindAttribLocation(program, index, name); -} - -void gl4_3core_glAttachShader(void *_glfuncs, GLuint program, GLuint shader) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glAttachShader(program, shader); -} - -void gl4_3core_glStencilMaskSeparate(void *_glfuncs, GLenum face, GLuint mask) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilMaskSeparate(face, mask); -} - -void gl4_3core_glStencilFuncSeparate(void *_glfuncs, GLenum face, GLenum glfunc, GLint ref, GLuint mask) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilFuncSeparate(face, glfunc, ref, mask); -} - -void gl4_3core_glStencilOpSeparate(void *_glfuncs, GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilOpSeparate(face, sfail, dpfail, dppass); -} - -void gl4_3core_glDrawBuffers(void *_glfuncs, GLsizei n, const GLenum* bufs) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawBuffers(n, bufs); -} - -void gl4_3core_glBlendEquationSeparate(void *_glfuncs, GLenum modeRGB, GLenum modeAlpha) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendEquationSeparate(modeRGB, modeAlpha); -} - -void gl4_3core_glUniformMatrix4x3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4x3fv(location, count, transpose, value); -} - -void gl4_3core_glUniformMatrix3x4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3x4fv(location, count, transpose, value); -} - -void gl4_3core_glUniformMatrix4x2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4x2fv(location, count, transpose, value); -} - -void gl4_3core_glUniformMatrix2x4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2x4fv(location, count, transpose, value); -} - -void gl4_3core_glUniformMatrix3x2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3x2fv(location, count, transpose, value); -} - -void gl4_3core_glUniformMatrix2x3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2x3fv(location, count, transpose, value); -} - -GLboolean gl4_3core_glIsVertexArray(void *_glfuncs, GLuint array) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsVertexArray(array); -} - -void gl4_3core_glGenVertexArrays(void *_glfuncs, GLsizei n, GLuint* arrays) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenVertexArrays(n, arrays); -} - -void gl4_3core_glDeleteVertexArrays(void *_glfuncs, GLsizei n, const GLuint* arrays) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteVertexArrays(n, arrays); -} - -void gl4_3core_glBindVertexArray(void *_glfuncs, GLuint array) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindVertexArray(array); -} - -void gl4_3core_glFlushMappedBufferRange(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr length) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFlushMappedBufferRange(target, offset, length); -} - -void gl4_3core_glFramebufferTextureLayer(void *_glfuncs, GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTextureLayer(target, attachment, texture, level, layer); -} - -void gl4_3core_glRenderbufferStorageMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRenderbufferStorageMultisample(target, samples, internalFormat, width, height); -} - -void gl4_3core_glBlitFramebuffer(void *_glfuncs, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter); -} - -void gl4_3core_glGenerateMipmap(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenerateMipmap(target); -} - -void gl4_3core_glGetFramebufferAttachmentParameteriv(void *_glfuncs, GLenum target, GLenum attachment, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetFramebufferAttachmentParameteriv(target, attachment, pname, params); -} - -void gl4_3core_glFramebufferRenderbuffer(void *_glfuncs, GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer); -} - -void gl4_3core_glFramebufferTexture3D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTexture3D(target, attachment, textarget, texture, level, zoffset); -} - -void gl4_3core_glFramebufferTexture2D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTexture2D(target, attachment, textarget, texture, level); -} - -void gl4_3core_glFramebufferTexture1D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTexture1D(target, attachment, textarget, texture, level); -} - -GLenum gl4_3core_glCheckFramebufferStatus(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glCheckFramebufferStatus(target); -} - -void gl4_3core_glGenFramebuffers(void *_glfuncs, GLsizei n, GLuint* framebuffers) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenFramebuffers(n, framebuffers); -} - -void gl4_3core_glDeleteFramebuffers(void *_glfuncs, GLsizei n, const GLuint* framebuffers) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteFramebuffers(n, framebuffers); -} - -void gl4_3core_glBindFramebuffer(void *_glfuncs, GLenum target, GLuint framebuffer) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindFramebuffer(target, framebuffer); -} - -GLboolean gl4_3core_glIsFramebuffer(void *_glfuncs, GLuint framebuffer) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsFramebuffer(framebuffer); -} - -void gl4_3core_glGetRenderbufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetRenderbufferParameteriv(target, pname, params); -} - -void gl4_3core_glRenderbufferStorage(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRenderbufferStorage(target, internalFormat, width, height); -} - -void gl4_3core_glGenRenderbuffers(void *_glfuncs, GLsizei n, GLuint* renderbuffers) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenRenderbuffers(n, renderbuffers); -} - -void gl4_3core_glDeleteRenderbuffers(void *_glfuncs, GLsizei n, const GLuint* renderbuffers) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteRenderbuffers(n, renderbuffers); -} - -void gl4_3core_glBindRenderbuffer(void *_glfuncs, GLenum target, GLuint renderbuffer) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindRenderbuffer(target, renderbuffer); -} - -GLboolean gl4_3core_glIsRenderbuffer(void *_glfuncs, GLuint renderbuffer) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsRenderbuffer(renderbuffer); -} - -void gl4_3core_glClearBufferfi(void *_glfuncs, GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearBufferfi(buffer, drawbuffer, depth, stencil); -} - -void gl4_3core_glClearBufferfv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLfloat* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearBufferfv(buffer, drawbuffer, value); -} - -void gl4_3core_glClearBufferuiv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLuint* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearBufferuiv(buffer, drawbuffer, value); -} - -void gl4_3core_glClearBufferiv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLint* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearBufferiv(buffer, drawbuffer, value); -} - -void gl4_3core_glGetTexParameterIuiv(void *_glfuncs, GLenum target, GLenum pname, GLuint* params) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameterIuiv(target, pname, params); -} - -void gl4_3core_glGetTexParameterIiv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTexParameterIiv(target, pname, params); -} - -void gl4_3core_glTexParameterIuiv(void *_glfuncs, GLenum target, GLenum pname, const GLuint* params) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterIuiv(target, pname, params); -} - -void gl4_3core_glTexParameterIiv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexParameterIiv(target, pname, params); -} - -void gl4_3core_glUniform4uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4uiv(location, count, value); -} - -void gl4_3core_glUniform3uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3uiv(location, count, value); -} - -void gl4_3core_glUniform2uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2uiv(location, count, value); -} - -void gl4_3core_glUniform1uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1uiv(location, count, value); -} - -void gl4_3core_glUniform4ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4ui(location, v0, v1, v2, v3); -} - -void gl4_3core_glUniform3ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1, GLuint v2) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3ui(location, v0, v1, v2); -} - -void gl4_3core_glUniform2ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2ui(location, v0, v1); -} - -void gl4_3core_glUniform1ui(void *_glfuncs, GLint location, GLuint v0) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1ui(location, v0); -} - -GLint gl4_3core_glGetFragDataLocation(void *_glfuncs, GLuint program, const GLchar* name) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetFragDataLocation(program, name); -} - -void gl4_3core_glBindFragDataLocation(void *_glfuncs, GLuint program, GLuint color, const GLchar* name) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindFragDataLocation(program, color, name); -} - -void gl4_3core_glGetUniformuiv(void *_glfuncs, GLuint program, GLint location, GLuint* params) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetUniformuiv(program, location, params); -} - -void gl4_3core_glGetVertexAttribIuiv(void *_glfuncs, GLuint index, GLenum pname, GLuint* params) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribIuiv(index, pname, params); -} - -void gl4_3core_glGetVertexAttribIiv(void *_glfuncs, GLuint index, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribIiv(index, pname, params); -} - -void gl4_3core_glVertexAttribIPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribIPointer(index, size, gltype, stride, pointer); -} - -void gl4_3core_glEndConditionalRender(void *_glfuncs) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndConditionalRender(); -} - -void gl4_3core_glBeginConditionalRender(void *_glfuncs, GLuint id, GLenum mode) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBeginConditionalRender(id, mode); -} - -void gl4_3core_glClampColor(void *_glfuncs, GLenum target, GLenum clamp) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClampColor(target, clamp); -} - -void gl4_3core_glGetTransformFeedbackVarying(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* gltype, GLchar* name) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetTransformFeedbackVarying(program, index, bufSize, length, size, gltype, name); -} - -void gl4_3core_glBindBufferBase(void *_glfuncs, GLenum target, GLuint index, GLuint buffer) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindBufferBase(target, index, buffer); -} - -void gl4_3core_glBindBufferRange(void *_glfuncs, GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindBufferRange(target, index, buffer, offset, size); -} - -void gl4_3core_glEndTransformFeedback(void *_glfuncs) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndTransformFeedback(); -} - -void gl4_3core_glBeginTransformFeedback(void *_glfuncs, GLenum primitiveMode) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBeginTransformFeedback(primitiveMode); -} - -GLboolean gl4_3core_glIsEnabledi(void *_glfuncs, GLenum target, GLuint index) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsEnabledi(target, index); -} - -void gl4_3core_glDisablei(void *_glfuncs, GLenum target, GLuint index) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDisablei(target, index); -} - -void gl4_3core_glEnablei(void *_glfuncs, GLenum target, GLuint index) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnablei(target, index); -} - -void gl4_3core_glGetIntegeri_v(void *_glfuncs, GLenum target, GLuint index, GLint* data) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetIntegeri_v(target, index, data); -} - -void gl4_3core_glGetBooleani_v(void *_glfuncs, GLenum target, GLuint index, GLboolean* data) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBooleani_v(target, index, data); -} - -void gl4_3core_glColorMaski(void *_glfuncs, GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorMaski(index, r, g, b, a); -} - -void gl4_3core_glCopyBufferSubData(void *_glfuncs, GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyBufferSubData(readTarget, writeTarget, readOffset, writeOffset, size); -} - -void gl4_3core_glUniformBlockBinding(void *_glfuncs, GLuint program, GLuint v0, GLuint v1) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformBlockBinding(program, v0, v1); -} - -void gl4_3core_glGetActiveUniformBlockName(void *_glfuncs, GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformBlockName) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniformBlockName(program, uniformBlockIndex, bufSize, length, uniformBlockName); -} - -void gl4_3core_glGetActiveUniformBlockiv(void *_glfuncs, GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniformBlockiv(program, uniformBlockIndex, pname, params); -} - -GLuint gl4_3core_glGetUniformBlockIndex(void *_glfuncs, GLuint program, const GLchar* uniformBlockName) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetUniformBlockIndex(program, uniformBlockName); -} - -void gl4_3core_glGetActiveUniformName(void *_glfuncs, GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformName) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniformName(program, uniformIndex, bufSize, length, uniformName); -} - -void gl4_3core_glGetActiveUniformsiv(void *_glfuncs, GLuint program, GLsizei uniformCount, const GLuint* uniformIndices, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniformsiv(program, uniformCount, uniformIndices, pname, params); -} - -void gl4_3core_glPrimitiveRestartIndex(void *_glfuncs, GLuint index) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPrimitiveRestartIndex(index); -} - -void gl4_3core_glTexBuffer(void *_glfuncs, GLenum target, GLenum internalFormat, GLuint buffer) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexBuffer(target, internalFormat, buffer); -} - -void gl4_3core_glDrawElementsInstanced(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLsizei instancecount) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElementsInstanced(mode, count, gltype, indices, instancecount); -} - -void gl4_3core_glDrawArraysInstanced(void *_glfuncs, GLenum mode, GLint first, GLsizei count, GLsizei instancecount) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawArraysInstanced(mode, first, count, instancecount); -} - -void gl4_3core_glSampleMaski(void *_glfuncs, GLuint index, GLbitfield mask) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSampleMaski(index, mask); -} - -void gl4_3core_glGetMultisamplefv(void *_glfuncs, GLenum pname, GLuint index, GLfloat* val) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetMultisamplefv(pname, index, val); -} - -void gl4_3core_glTexImage3DMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage3DMultisample(target, samples, internalFormat, width, height, depth, fixedsamplelocations); -} - -void gl4_3core_glTexImage2DMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexImage2DMultisample(target, samples, internalFormat, width, height, fixedsamplelocations); -} - -void gl4_3core_glGetSynciv(void *_glfuncs, GLsync sync, GLenum pname, GLsizei bufSize, GLsizei* length, GLint* values) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetSynciv(sync, pname, bufSize, length, values); -} - -void gl4_3core_glGetInteger64v(void *_glfuncs, GLenum pname, GLint64* params) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetInteger64v(pname, params); -} - -void gl4_3core_glWaitSync(void *_glfuncs, GLsync sync, GLbitfield flags, GLuint64 timeout) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glWaitSync(sync, flags, timeout); -} - -GLenum gl4_3core_glClientWaitSync(void *_glfuncs, GLsync sync, GLbitfield flags, GLuint64 timeout) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glClientWaitSync(sync, flags, timeout); -} - -void gl4_3core_glDeleteSync(void *_glfuncs, GLsync sync) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteSync(sync); -} - -GLboolean gl4_3core_glIsSync(void *_glfuncs, GLsync sync) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsSync(sync); -} - -GLsync gl4_3core_glFenceSync(void *_glfuncs, GLenum condition, GLbitfield flags) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glFenceSync(condition, flags); -} - -void gl4_3core_glProvokingVertex(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProvokingVertex(mode); -} - -void gl4_3core_glDrawElementsInstancedBaseVertex(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLsizei instancecount, GLint basevertex) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElementsInstancedBaseVertex(mode, count, gltype, indices, instancecount, basevertex); -} - -void gl4_3core_glDrawRangeElementsBaseVertex(void *_glfuncs, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum gltype, const GLvoid* indices, GLint basevertex) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawRangeElementsBaseVertex(mode, start, end, count, gltype, indices, basevertex); -} - -void gl4_3core_glDrawElementsBaseVertex(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLint basevertex) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElementsBaseVertex(mode, count, gltype, indices, basevertex); -} - -void gl4_3core_glFramebufferTexture(void *_glfuncs, GLenum target, GLenum attachment, GLuint texture, GLint level) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTexture(target, attachment, texture, level); -} - -void gl4_3core_glGetBufferParameteri64v(void *_glfuncs, GLenum target, GLenum pname, GLint64* params) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBufferParameteri64v(target, pname, params); -} - -void gl4_3core_glGetInteger64i_v(void *_glfuncs, GLenum target, GLuint index, GLint64* data) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetInteger64i_v(target, index, data); -} - -void gl4_3core_glVertexAttribP4uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP4uiv(index, gltype, normalized, value); -} - -void gl4_3core_glVertexAttribP4ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP4ui(index, gltype, normalized, value); -} - -void gl4_3core_glVertexAttribP3uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP3uiv(index, gltype, normalized, value); -} - -void gl4_3core_glVertexAttribP3ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP3ui(index, gltype, normalized, value); -} - -void gl4_3core_glVertexAttribP2uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP2uiv(index, gltype, normalized, value); -} - -void gl4_3core_glVertexAttribP2ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP2ui(index, gltype, normalized, value); -} - -void gl4_3core_glVertexAttribP1uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP1uiv(index, gltype, normalized, value); -} - -void gl4_3core_glVertexAttribP1ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribP1ui(index, gltype, normalized, value); -} - -void gl4_3core_glSecondaryColorP3uiv(void *_glfuncs, GLenum gltype, const GLuint* color) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColorP3uiv(gltype, color); -} - -void gl4_3core_glSecondaryColorP3ui(void *_glfuncs, GLenum gltype, GLuint color) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSecondaryColorP3ui(gltype, color); -} - -void gl4_3core_glColorP4uiv(void *_glfuncs, GLenum gltype, const GLuint* color) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorP4uiv(gltype, color); -} - -void gl4_3core_glColorP4ui(void *_glfuncs, GLenum gltype, GLuint color) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorP4ui(gltype, color); -} - -void gl4_3core_glColorP3uiv(void *_glfuncs, GLenum gltype, const GLuint* color) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorP3uiv(gltype, color); -} - -void gl4_3core_glColorP3ui(void *_glfuncs, GLenum gltype, GLuint color) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glColorP3ui(gltype, color); -} - -void gl4_3core_glNormalP3uiv(void *_glfuncs, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormalP3uiv(gltype, coords); -} - -void gl4_3core_glNormalP3ui(void *_glfuncs, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glNormalP3ui(gltype, coords); -} - -void gl4_3core_glMultiTexCoordP4uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP4uiv(texture, gltype, coords); -} - -void gl4_3core_glMultiTexCoordP4ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP4ui(texture, gltype, coords); -} - -void gl4_3core_glMultiTexCoordP3uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP3uiv(texture, gltype, coords); -} - -void gl4_3core_glMultiTexCoordP3ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP3ui(texture, gltype, coords); -} - -void gl4_3core_glMultiTexCoordP2uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP2uiv(texture, gltype, coords); -} - -void gl4_3core_glMultiTexCoordP2ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP2ui(texture, gltype, coords); -} - -void gl4_3core_glMultiTexCoordP1uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP1uiv(texture, gltype, coords); -} - -void gl4_3core_glMultiTexCoordP1ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiTexCoordP1ui(texture, gltype, coords); -} - -void gl4_3core_glTexCoordP4uiv(void *_glfuncs, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP4uiv(gltype, coords); -} - -void gl4_3core_glTexCoordP4ui(void *_glfuncs, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP4ui(gltype, coords); -} - -void gl4_3core_glTexCoordP3uiv(void *_glfuncs, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP3uiv(gltype, coords); -} - -void gl4_3core_glTexCoordP3ui(void *_glfuncs, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP3ui(gltype, coords); -} - -void gl4_3core_glTexCoordP2uiv(void *_glfuncs, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP2uiv(gltype, coords); -} - -void gl4_3core_glTexCoordP2ui(void *_glfuncs, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP2ui(gltype, coords); -} - -void gl4_3core_glTexCoordP1uiv(void *_glfuncs, GLenum gltype, const GLuint* coords) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP1uiv(gltype, coords); -} - -void gl4_3core_glTexCoordP1ui(void *_glfuncs, GLenum gltype, GLuint coords) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexCoordP1ui(gltype, coords); -} - -void gl4_3core_glVertexP4uiv(void *_glfuncs, GLenum gltype, const GLuint* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexP4uiv(gltype, value); -} - -void gl4_3core_glVertexP4ui(void *_glfuncs, GLenum gltype, GLuint value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexP4ui(gltype, value); -} - -void gl4_3core_glVertexP3uiv(void *_glfuncs, GLenum gltype, const GLuint* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexP3uiv(gltype, value); -} - -void gl4_3core_glVertexP3ui(void *_glfuncs, GLenum gltype, GLuint value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexP3ui(gltype, value); -} - -void gl4_3core_glVertexP2uiv(void *_glfuncs, GLenum gltype, const GLuint* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexP2uiv(gltype, value); -} - -void gl4_3core_glVertexP2ui(void *_glfuncs, GLenum gltype, GLuint value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexP2ui(gltype, value); -} - -void gl4_3core_glGetQueryObjectui64v(void *_glfuncs, GLuint id, GLenum pname, GLuint64* params) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryObjectui64v(id, pname, params); -} - -void gl4_3core_glGetQueryObjecti64v(void *_glfuncs, GLuint id, GLenum pname, GLint64* params) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryObjecti64v(id, pname, params); -} - -void gl4_3core_glQueryCounter(void *_glfuncs, GLuint id, GLenum target) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glQueryCounter(id, target); -} - -void gl4_3core_glGetSamplerParameterIuiv(void *_glfuncs, GLuint sampler, GLenum pname, GLuint* params) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetSamplerParameterIuiv(sampler, pname, params); -} - -void gl4_3core_glGetSamplerParameterfv(void *_glfuncs, GLuint sampler, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetSamplerParameterfv(sampler, pname, params); -} - -void gl4_3core_glGetSamplerParameterIiv(void *_glfuncs, GLuint sampler, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetSamplerParameterIiv(sampler, pname, params); -} - -void gl4_3core_glGetSamplerParameteriv(void *_glfuncs, GLuint sampler, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetSamplerParameteriv(sampler, pname, params); -} - -void gl4_3core_glSamplerParameterIuiv(void *_glfuncs, GLuint sampler, GLenum pname, const GLuint* param) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSamplerParameterIuiv(sampler, pname, param); -} - -void gl4_3core_glSamplerParameterIiv(void *_glfuncs, GLuint sampler, GLenum pname, const GLint* param) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSamplerParameterIiv(sampler, pname, param); -} - -void gl4_3core_glSamplerParameterfv(void *_glfuncs, GLuint sampler, GLenum pname, const GLfloat* param) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSamplerParameterfv(sampler, pname, param); -} - -void gl4_3core_glSamplerParameterf(void *_glfuncs, GLuint sampler, GLenum pname, GLfloat param) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSamplerParameterf(sampler, pname, param); -} - -void gl4_3core_glSamplerParameteriv(void *_glfuncs, GLuint sampler, GLenum pname, const GLint* param) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSamplerParameteriv(sampler, pname, param); -} - -void gl4_3core_glSamplerParameteri(void *_glfuncs, GLuint sampler, GLenum pname, GLint param) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSamplerParameteri(sampler, pname, param); -} - -void gl4_3core_glBindSampler(void *_glfuncs, GLuint unit, GLuint sampler) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindSampler(unit, sampler); -} - -GLboolean gl4_3core_glIsSampler(void *_glfuncs, GLuint sampler) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsSampler(sampler); -} - -void gl4_3core_glDeleteSamplers(void *_glfuncs, GLsizei count, const GLuint* samplers) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteSamplers(count, samplers); -} - -void gl4_3core_glGenSamplers(void *_glfuncs, GLsizei count, GLuint* samplers) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenSamplers(count, samplers); -} - -GLint gl4_3core_glGetFragDataIndex(void *_glfuncs, GLuint program, const GLchar* name) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetFragDataIndex(program, name); -} - -void gl4_3core_glBindFragDataLocationIndexed(void *_glfuncs, GLuint program, GLuint colorNumber, GLuint index, const GLchar* name) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindFragDataLocationIndexed(program, colorNumber, index, name); -} - -void gl4_3core_glVertexAttribDivisor(void *_glfuncs, GLuint index, GLuint divisor) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribDivisor(index, divisor); -} - -void gl4_3core_glGetQueryIndexediv(void *_glfuncs, GLenum target, GLuint index, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetQueryIndexediv(target, index, pname, params); -} - -void gl4_3core_glEndQueryIndexed(void *_glfuncs, GLenum target, GLuint index) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEndQueryIndexed(target, index); -} - -void gl4_3core_glBeginQueryIndexed(void *_glfuncs, GLenum target, GLuint index, GLuint id) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBeginQueryIndexed(target, index, id); -} - -void gl4_3core_glDrawTransformFeedbackStream(void *_glfuncs, GLenum mode, GLuint id, GLuint stream) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawTransformFeedbackStream(mode, id, stream); -} - -void gl4_3core_glDrawTransformFeedback(void *_glfuncs, GLenum mode, GLuint id) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawTransformFeedback(mode, id); -} - -void gl4_3core_glResumeTransformFeedback(void *_glfuncs) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glResumeTransformFeedback(); -} - -void gl4_3core_glPauseTransformFeedback(void *_glfuncs) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPauseTransformFeedback(); -} - -GLboolean gl4_3core_glIsTransformFeedback(void *_glfuncs, GLuint id) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsTransformFeedback(id); -} - -void gl4_3core_glGenTransformFeedbacks(void *_glfuncs, GLsizei n, GLuint* ids) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenTransformFeedbacks(n, ids); -} - -void gl4_3core_glDeleteTransformFeedbacks(void *_glfuncs, GLsizei n, const GLuint* ids) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteTransformFeedbacks(n, ids); -} - -void gl4_3core_glBindTransformFeedback(void *_glfuncs, GLenum target, GLuint id) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindTransformFeedback(target, id); -} - -void gl4_3core_glPatchParameterfv(void *_glfuncs, GLenum pname, const GLfloat* values) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPatchParameterfv(pname, values); -} - -void gl4_3core_glPatchParameteri(void *_glfuncs, GLenum pname, GLint value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glPatchParameteri(pname, value); -} - -void gl4_3core_glGetProgramStageiv(void *_glfuncs, GLuint program, GLenum shadertype, GLenum pname, GLint* values) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetProgramStageiv(program, shadertype, pname, values); -} - -void gl4_3core_glGetUniformSubroutineuiv(void *_glfuncs, GLenum shadertype, GLint location, GLuint* params) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetUniformSubroutineuiv(shadertype, location, params); -} - -void gl4_3core_glUniformSubroutinesuiv(void *_glfuncs, GLenum shadertype, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformSubroutinesuiv(shadertype, count, value); -} - -void gl4_3core_glGetActiveSubroutineName(void *_glfuncs, GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei* length, GLchar* name) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveSubroutineName(program, shadertype, index, bufSize, length, name); -} - -void gl4_3core_glGetActiveSubroutineUniformName(void *_glfuncs, GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei* length, GLchar* name) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveSubroutineUniformName(program, shadertype, index, bufSize, length, name); -} - -void gl4_3core_glGetActiveSubroutineUniformiv(void *_glfuncs, GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint* values) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveSubroutineUniformiv(program, shadertype, index, pname, values); -} - -GLuint gl4_3core_glGetSubroutineIndex(void *_glfuncs, GLuint program, GLenum shadertype, const GLchar* name) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetSubroutineIndex(program, shadertype, name); -} - -GLint gl4_3core_glGetSubroutineUniformLocation(void *_glfuncs, GLuint program, GLenum shadertype, const GLchar* name) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetSubroutineUniformLocation(program, shadertype, name); -} - -void gl4_3core_glGetUniformdv(void *_glfuncs, GLuint program, GLint location, GLdouble* params) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetUniformdv(program, location, params); -} - -void gl4_3core_glUniformMatrix4x3dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4x3dv(location, count, transpose, value); -} - -void gl4_3core_glUniformMatrix4x2dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4x2dv(location, count, transpose, value); -} - -void gl4_3core_glUniformMatrix3x4dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3x4dv(location, count, transpose, value); -} - -void gl4_3core_glUniformMatrix3x2dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3x2dv(location, count, transpose, value); -} - -void gl4_3core_glUniformMatrix2x4dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2x4dv(location, count, transpose, value); -} - -void gl4_3core_glUniformMatrix2x3dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2x3dv(location, count, transpose, value); -} - -void gl4_3core_glUniformMatrix4dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4dv(location, count, transpose, value); -} - -void gl4_3core_glUniformMatrix3dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3dv(location, count, transpose, value); -} - -void gl4_3core_glUniformMatrix2dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2dv(location, count, transpose, value); -} - -void gl4_3core_glUniform4dv(void *_glfuncs, GLint location, GLsizei count, const GLdouble* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4dv(location, count, value); -} - -void gl4_3core_glUniform3dv(void *_glfuncs, GLint location, GLsizei count, const GLdouble* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3dv(location, count, value); -} - -void gl4_3core_glUniform2dv(void *_glfuncs, GLint location, GLsizei count, const GLdouble* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2dv(location, count, value); -} - -void gl4_3core_glUniform1dv(void *_glfuncs, GLint location, GLsizei count, const GLdouble* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1dv(location, count, value); -} - -void gl4_3core_glUniform4d(void *_glfuncs, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4d(location, v0, v1, v2, v3); -} - -void gl4_3core_glUniform3d(void *_glfuncs, GLint location, GLdouble v0, GLdouble v1, GLdouble v2) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3d(location, v0, v1, v2); -} - -void gl4_3core_glUniform2d(void *_glfuncs, GLint location, GLdouble v0, GLdouble v1) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2d(location, v0, v1); -} - -void gl4_3core_glUniform1d(void *_glfuncs, GLint location, GLdouble v0) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1d(location, v0); -} - -void gl4_3core_glDrawElementsIndirect(void *_glfuncs, GLenum mode, GLenum gltype, const GLvoid* indirect) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElementsIndirect(mode, gltype, indirect); -} - -void gl4_3core_glDrawArraysIndirect(void *_glfuncs, GLenum mode, const GLvoid* indirect) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawArraysIndirect(mode, indirect); -} - -void gl4_3core_glBlendFuncSeparatei(void *_glfuncs, GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendFuncSeparatei(buf, srcRGB, dstRGB, srcAlpha, dstAlpha); -} - -void gl4_3core_glBlendFunci(void *_glfuncs, GLuint buf, GLenum src, GLenum dst) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendFunci(buf, src, dst); -} - -void gl4_3core_glBlendEquationSeparatei(void *_glfuncs, GLuint buf, GLenum modeRGB, GLenum modeAlpha) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendEquationSeparatei(buf, modeRGB, modeAlpha); -} - -void gl4_3core_glBlendEquationi(void *_glfuncs, GLuint buf, GLenum mode) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendEquationi(buf, mode); -} - -void gl4_3core_glMinSampleShading(void *_glfuncs, GLfloat value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMinSampleShading(value); -} - -void gl4_3core_glGetDoublei_v(void *_glfuncs, GLenum target, GLuint index, GLdouble* data) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetDoublei_v(target, index, data); -} - -void gl4_3core_glGetFloati_v(void *_glfuncs, GLenum target, GLuint index, GLfloat* data) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetFloati_v(target, index, data); -} - -void gl4_3core_glDepthRangeIndexed(void *_glfuncs, GLuint index, GLdouble n, GLdouble f) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthRangeIndexed(index, n, f); -} - -void gl4_3core_glDepthRangeArrayv(void *_glfuncs, GLuint first, GLsizei count, const GLdouble* v) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthRangeArrayv(first, count, v); -} - -void gl4_3core_glScissorIndexedv(void *_glfuncs, GLuint index, const GLint* v) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScissorIndexedv(index, v); -} - -void gl4_3core_glScissorIndexed(void *_glfuncs, GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScissorIndexed(index, left, bottom, width, height); -} - -void gl4_3core_glScissorArrayv(void *_glfuncs, GLuint first, GLsizei count, const GLint* v) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glScissorArrayv(first, count, v); -} - -void gl4_3core_glViewportIndexedfv(void *_glfuncs, GLuint index, const GLfloat* v) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glViewportIndexedfv(index, v); -} - -void gl4_3core_glViewportIndexedf(void *_glfuncs, GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glViewportIndexedf(index, x, y, w, h); -} - -void gl4_3core_glViewportArrayv(void *_glfuncs, GLuint first, GLsizei count, const GLfloat* v) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glViewportArrayv(first, count, v); -} - -void gl4_3core_glGetVertexAttribLdv(void *_glfuncs, GLuint index, GLenum pname, GLdouble* params) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribLdv(index, pname, params); -} - -void gl4_3core_glVertexAttribLPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribLPointer(index, size, gltype, stride, pointer); -} - -void gl4_3core_glVertexAttribL4dv(void *_glfuncs, GLuint index, const GLdouble* v) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribL4dv(index, v); -} - -void gl4_3core_glVertexAttribL3dv(void *_glfuncs, GLuint index, const GLdouble* v) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribL3dv(index, v); -} - -void gl4_3core_glVertexAttribL2dv(void *_glfuncs, GLuint index, const GLdouble* v) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribL2dv(index, v); -} - -void gl4_3core_glVertexAttribL1dv(void *_glfuncs, GLuint index, const GLdouble* v) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribL1dv(index, v); -} - -void gl4_3core_glVertexAttribL4d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribL4d(index, x, y, z, w); -} - -void gl4_3core_glVertexAttribL3d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y, GLdouble z) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribL3d(index, x, y, z); -} - -void gl4_3core_glVertexAttribL2d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribL2d(index, x, y); -} - -void gl4_3core_glVertexAttribL1d(void *_glfuncs, GLuint index, GLdouble x) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribL1d(index, x); -} - -void gl4_3core_glGetProgramPipelineInfoLog(void *_glfuncs, GLuint pipeline, GLsizei bufSize, GLsizei* length, GLchar* infoLog) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetProgramPipelineInfoLog(pipeline, bufSize, length, infoLog); -} - -void gl4_3core_glValidateProgramPipeline(void *_glfuncs, GLuint pipeline) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glValidateProgramPipeline(pipeline); -} - -void gl4_3core_glProgramUniformMatrix4x3dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix4x3dv(program, location, count, transpose, value); -} - -void gl4_3core_glProgramUniformMatrix3x4dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix3x4dv(program, location, count, transpose, value); -} - -void gl4_3core_glProgramUniformMatrix4x2dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix4x2dv(program, location, count, transpose, value); -} - -void gl4_3core_glProgramUniformMatrix2x4dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix2x4dv(program, location, count, transpose, value); -} - -void gl4_3core_glProgramUniformMatrix3x2dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix3x2dv(program, location, count, transpose, value); -} - -void gl4_3core_glProgramUniformMatrix2x3dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix2x3dv(program, location, count, transpose, value); -} - -void gl4_3core_glProgramUniformMatrix4x3fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix4x3fv(program, location, count, transpose, value); -} - -void gl4_3core_glProgramUniformMatrix3x4fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix3x4fv(program, location, count, transpose, value); -} - -void gl4_3core_glProgramUniformMatrix4x2fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix4x2fv(program, location, count, transpose, value); -} - -void gl4_3core_glProgramUniformMatrix2x4fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix2x4fv(program, location, count, transpose, value); -} - -void gl4_3core_glProgramUniformMatrix3x2fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix3x2fv(program, location, count, transpose, value); -} - -void gl4_3core_glProgramUniformMatrix2x3fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix2x3fv(program, location, count, transpose, value); -} - -void gl4_3core_glProgramUniformMatrix4dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix4dv(program, location, count, transpose, value); -} - -void gl4_3core_glProgramUniformMatrix3dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix3dv(program, location, count, transpose, value); -} - -void gl4_3core_glProgramUniformMatrix2dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix2dv(program, location, count, transpose, value); -} - -void gl4_3core_glProgramUniformMatrix4fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix4fv(program, location, count, transpose, value); -} - -void gl4_3core_glProgramUniformMatrix3fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix3fv(program, location, count, transpose, value); -} - -void gl4_3core_glProgramUniformMatrix2fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniformMatrix2fv(program, location, count, transpose, value); -} - -void gl4_3core_glProgramUniform4uiv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform4uiv(program, location, count, value); -} - -void gl4_3core_glProgramUniform4ui(void *_glfuncs, GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform4ui(program, location, v0, v1, v2, v3); -} - -void gl4_3core_glProgramUniform4dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLdouble* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform4dv(program, location, count, value); -} - -void gl4_3core_glProgramUniform4d(void *_glfuncs, GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform4d(program, location, v0, v1, v2, v3); -} - -void gl4_3core_glProgramUniform4fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform4fv(program, location, count, value); -} - -void gl4_3core_glProgramUniform4f(void *_glfuncs, GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform4f(program, location, v0, v1, v2, v3); -} - -void gl4_3core_glProgramUniform4iv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform4iv(program, location, count, value); -} - -void gl4_3core_glProgramUniform4i(void *_glfuncs, GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform4i(program, location, v0, v1, v2, v3); -} - -void gl4_3core_glProgramUniform3uiv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform3uiv(program, location, count, value); -} - -void gl4_3core_glProgramUniform3ui(void *_glfuncs, GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform3ui(program, location, v0, v1, v2); -} - -void gl4_3core_glProgramUniform3dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLdouble* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform3dv(program, location, count, value); -} - -void gl4_3core_glProgramUniform3d(void *_glfuncs, GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform3d(program, location, v0, v1, v2); -} - -void gl4_3core_glProgramUniform3fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform3fv(program, location, count, value); -} - -void gl4_3core_glProgramUniform3f(void *_glfuncs, GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform3f(program, location, v0, v1, v2); -} - -void gl4_3core_glProgramUniform3iv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform3iv(program, location, count, value); -} - -void gl4_3core_glProgramUniform3i(void *_glfuncs, GLuint program, GLint location, GLint v0, GLint v1, GLint v2) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform3i(program, location, v0, v1, v2); -} - -void gl4_3core_glProgramUniform2uiv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform2uiv(program, location, count, value); -} - -void gl4_3core_glProgramUniform2ui(void *_glfuncs, GLuint program, GLint location, GLuint v0, GLuint v1) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform2ui(program, location, v0, v1); -} - -void gl4_3core_glProgramUniform2dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLdouble* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform2dv(program, location, count, value); -} - -void gl4_3core_glProgramUniform2d(void *_glfuncs, GLuint program, GLint location, GLdouble v0, GLdouble v1) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform2d(program, location, v0, v1); -} - -void gl4_3core_glProgramUniform2fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform2fv(program, location, count, value); -} - -void gl4_3core_glProgramUniform2f(void *_glfuncs, GLuint program, GLint location, GLfloat v0, GLfloat v1) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform2f(program, location, v0, v1); -} - -void gl4_3core_glProgramUniform2iv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform2iv(program, location, count, value); -} - -void gl4_3core_glProgramUniform2i(void *_glfuncs, GLuint program, GLint location, GLint v0, GLint v1) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform2i(program, location, v0, v1); -} - -void gl4_3core_glProgramUniform1uiv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLuint* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform1uiv(program, location, count, value); -} - -void gl4_3core_glProgramUniform1ui(void *_glfuncs, GLuint program, GLint location, GLuint v0) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform1ui(program, location, v0); -} - -void gl4_3core_glProgramUniform1dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLdouble* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform1dv(program, location, count, value); -} - -void gl4_3core_glProgramUniform1d(void *_glfuncs, GLuint program, GLint location, GLdouble v0) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform1d(program, location, v0); -} - -void gl4_3core_glProgramUniform1fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform1fv(program, location, count, value); -} - -void gl4_3core_glProgramUniform1f(void *_glfuncs, GLuint program, GLint location, GLfloat v0) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform1f(program, location, v0); -} - -void gl4_3core_glProgramUniform1iv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform1iv(program, location, count, value); -} - -void gl4_3core_glProgramUniform1i(void *_glfuncs, GLuint program, GLint location, GLint v0) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramUniform1i(program, location, v0); -} - -void gl4_3core_glGetProgramPipelineiv(void *_glfuncs, GLuint pipeline, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetProgramPipelineiv(pipeline, pname, params); -} - -GLboolean gl4_3core_glIsProgramPipeline(void *_glfuncs, GLuint pipeline) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsProgramPipeline(pipeline); -} - -void gl4_3core_glGenProgramPipelines(void *_glfuncs, GLsizei n, GLuint* pipelines) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenProgramPipelines(n, pipelines); -} - -void gl4_3core_glDeleteProgramPipelines(void *_glfuncs, GLsizei n, const GLuint* pipelines) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteProgramPipelines(n, pipelines); -} - -void gl4_3core_glBindProgramPipeline(void *_glfuncs, GLuint pipeline) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindProgramPipeline(pipeline); -} - -void gl4_3core_glActiveShaderProgram(void *_glfuncs, GLuint pipeline, GLuint program) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glActiveShaderProgram(pipeline, program); -} - -void gl4_3core_glUseProgramStages(void *_glfuncs, GLuint pipeline, GLbitfield stages, GLuint program) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUseProgramStages(pipeline, stages, program); -} - -void gl4_3core_glProgramParameteri(void *_glfuncs, GLuint program, GLenum pname, GLint value) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramParameteri(program, pname, value); -} - -void gl4_3core_glProgramBinary(void *_glfuncs, GLuint program, GLenum binaryFormat, const GLvoid* binary, GLsizei length) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glProgramBinary(program, binaryFormat, binary, length); -} - -void gl4_3core_glGetProgramBinary(void *_glfuncs, GLuint program, GLsizei bufSize, GLsizei* length, GLenum* binaryFormat, GLvoid* binary) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetProgramBinary(program, bufSize, length, binaryFormat, binary); -} - -void gl4_3core_glClearDepthf(void *_glfuncs, GLfloat dd) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearDepthf(dd); -} - -void gl4_3core_glDepthRangef(void *_glfuncs, GLfloat n, GLfloat f) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthRangef(n, f); -} - -void gl4_3core_glGetShaderPrecisionFormat(void *_glfuncs, GLenum shadertype, GLenum precisionType, GLint* range_, GLint* precision) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetShaderPrecisionFormat(shadertype, precisionType, range_, precision); -} - -void gl4_3core_glShaderBinary(void *_glfuncs, GLsizei count, const GLuint* shaders, GLenum binaryFormat, const GLvoid* binary, GLsizei length) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glShaderBinary(count, shaders, binaryFormat, binary, length); -} - -void gl4_3core_glReleaseShaderCompiler(void *_glfuncs) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glReleaseShaderCompiler(); -} - -void gl4_3core_glTexStorage3D(void *_glfuncs, GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexStorage3D(target, levels, internalFormat, width, height, depth); -} - -void gl4_3core_glTexStorage2D(void *_glfuncs, GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexStorage2D(target, levels, internalFormat, width, height); -} - -void gl4_3core_glTexStorage1D(void *_glfuncs, GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexStorage1D(target, levels, internalFormat, width); -} - -void gl4_3core_glMemoryBarrier(void *_glfuncs, GLbitfield barriers) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMemoryBarrier(barriers); -} - -void gl4_3core_glBindImageTexture(void *_glfuncs, GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindImageTexture(unit, texture, level, layered, layer, access, format); -} - -void gl4_3core_glGetActiveAtomicCounterBufferiv(void *_glfuncs, GLuint program, GLuint bufferIndex, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveAtomicCounterBufferiv(program, bufferIndex, pname, params); -} - -void gl4_3core_glGetInternalformativ(void *_glfuncs, GLenum target, GLenum internalFormat, GLenum pname, GLsizei bufSize, GLint* params) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetInternalformativ(target, internalFormat, pname, bufSize, params); -} - -void gl4_3core_glDrawTransformFeedbackStreamInstanced(void *_glfuncs, GLenum mode, GLuint id, GLuint stream, GLsizei instancecount) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawTransformFeedbackStreamInstanced(mode, id, stream, instancecount); -} - -void gl4_3core_glDrawTransformFeedbackInstanced(void *_glfuncs, GLenum mode, GLuint id, GLsizei instancecount) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawTransformFeedbackInstanced(mode, id, instancecount); -} - -void gl4_3core_glDrawElementsInstancedBaseVertexBaseInstance(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElementsInstancedBaseVertexBaseInstance(mode, count, gltype, indices, instancecount, basevertex, baseinstance); -} - -void gl4_3core_glDrawElementsInstancedBaseInstance(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLsizei instancecount, GLuint baseinstance) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawElementsInstancedBaseInstance(mode, count, gltype, indices, instancecount, baseinstance); -} - -void gl4_3core_glDrawArraysInstancedBaseInstance(void *_glfuncs, GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDrawArraysInstancedBaseInstance(mode, first, count, instancecount, baseinstance); -} - -void gl4_3core_glTexStorage3DMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexStorage3DMultisample(target, samples, internalFormat, width, height, depth, fixedsamplelocations); -} - -void gl4_3core_glTexStorage2DMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexStorage2DMultisample(target, samples, internalFormat, width, height, fixedsamplelocations); -} - -void gl4_3core_glTexBufferRange(void *_glfuncs, GLenum target, GLenum internalFormat, GLuint buffer, GLintptr offset, GLsizeiptr size) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTexBufferRange(target, internalFormat, buffer, offset, size); -} - -void gl4_3core_glShaderStorageBlockBinding(void *_glfuncs, GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glShaderStorageBlockBinding(program, storageBlockIndex, storageBlockBinding); -} - -GLint gl4_3core_glGetProgramResourceLocationIndex(void *_glfuncs, GLuint program, GLenum programInterface, const GLchar* name) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetProgramResourceLocationIndex(program, programInterface, name); -} - -GLint gl4_3core_glGetProgramResourceLocation(void *_glfuncs, GLuint program, GLenum programInterface, const GLchar* name) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetProgramResourceLocation(program, programInterface, name); -} - -void gl4_3core_glGetProgramResourceiv(void *_glfuncs, GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum* props, GLsizei bufSize, GLsizei* length, GLint* params) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetProgramResourceiv(program, programInterface, index, propCount, props, bufSize, length, params); -} - -void gl4_3core_glGetProgramResourceName(void *_glfuncs, GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei* length, GLchar* name) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetProgramResourceName(program, programInterface, index, bufSize, length, name); -} - -GLuint gl4_3core_glGetProgramResourceIndex(void *_glfuncs, GLuint program, GLenum programInterface, const GLchar* name) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetProgramResourceIndex(program, programInterface, name); -} - -void gl4_3core_glGetProgramInterfaceiv(void *_glfuncs, GLuint program, GLenum programInterface, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetProgramInterfaceiv(program, programInterface, pname, params); -} - -void gl4_3core_glMultiDrawElementsIndirect(void *_glfuncs, GLenum mode, GLenum gltype, const GLvoid* indirect, GLsizei drawcount, GLsizei stride) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiDrawElementsIndirect(mode, gltype, indirect, drawcount, stride); -} - -void gl4_3core_glMultiDrawArraysIndirect(void *_glfuncs, GLenum mode, const GLvoid* indirect, GLsizei drawcount, GLsizei stride) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glMultiDrawArraysIndirect(mode, indirect, drawcount, stride); -} - -void gl4_3core_glInvalidateSubFramebuffer(void *_glfuncs, GLenum target, GLsizei numAttachments, const GLenum* attachments, GLint x, GLint y, GLsizei width, GLsizei height) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glInvalidateSubFramebuffer(target, numAttachments, attachments, x, y, width, height); -} - -void gl4_3core_glInvalidateFramebuffer(void *_glfuncs, GLenum target, GLsizei numAttachments, const GLenum* attachments) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glInvalidateFramebuffer(target, numAttachments, attachments); -} - -void gl4_3core_glInvalidateBufferData(void *_glfuncs, GLuint buffer) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glInvalidateBufferData(buffer); -} - -void gl4_3core_glInvalidateBufferSubData(void *_glfuncs, GLuint buffer, GLintptr offset, GLsizeiptr length) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glInvalidateBufferSubData(buffer, offset, length); -} - -void gl4_3core_glInvalidateTexImage(void *_glfuncs, GLuint texture, GLint level) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glInvalidateTexImage(texture, level); -} - -void gl4_3core_glInvalidateTexSubImage(void *_glfuncs, GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glInvalidateTexSubImage(texture, level, xoffset, yoffset, zoffset, width, height, depth); -} - -void gl4_3core_glGetInternalformati64v(void *_glfuncs, GLenum target, GLenum internalFormat, GLenum pname, GLsizei bufSize, GLint64* params) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetInternalformati64v(target, internalFormat, pname, bufSize, params); -} - -void gl4_3core_glGetFramebufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetFramebufferParameteriv(target, pname, params); -} - -void gl4_3core_glFramebufferParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint param) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferParameteri(target, pname, param); -} - -void gl4_3core_glVertexBindingDivisor(void *_glfuncs, GLuint bindingindex, GLuint divisor) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexBindingDivisor(bindingindex, divisor); -} - -void gl4_3core_glVertexAttribBinding(void *_glfuncs, GLuint attribindex, GLuint bindingindex) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribBinding(attribindex, bindingindex); -} - -void gl4_3core_glVertexAttribLFormat(void *_glfuncs, GLuint attribindex, GLint size, GLenum gltype, GLuint relativeoffset) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribLFormat(attribindex, size, gltype, relativeoffset); -} - -void gl4_3core_glVertexAttribIFormat(void *_glfuncs, GLuint attribindex, GLint size, GLenum gltype, GLuint relativeoffset) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribIFormat(attribindex, size, gltype, relativeoffset); -} - -void gl4_3core_glVertexAttribFormat(void *_glfuncs, GLuint attribindex, GLint size, GLenum gltype, GLboolean normalized, GLuint relativeoffset) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribFormat(attribindex, size, gltype, normalized, relativeoffset); -} - -void gl4_3core_glBindVertexBuffer(void *_glfuncs, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindVertexBuffer(bindingindex, buffer, offset, stride); -} - -void gl4_3core_glTextureView(void *_glfuncs, GLuint texture, GLenum target, GLuint origtexture, GLenum internalFormat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glTextureView(texture, target, origtexture, internalFormat, minlevel, numlevels, minlayer, numlayers); -} - -void gl4_3core_glCopyImageSubData(void *_glfuncs, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCopyImageSubData(srcName, srcTarget, srcLevel, srcX, srcY, srcZ, dstName, dstTarget, dstLevel, dstX, dstY, dstZ, srcWidth, srcHeight, srcDepth); -} - -void gl4_3core_glDispatchComputeIndirect(void *_glfuncs, GLintptr indirect) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDispatchComputeIndirect(indirect); -} - -void gl4_3core_glDispatchCompute(void *_glfuncs, GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDispatchCompute(num_groups_x, num_groups_y, num_groups_z); -} - -void gl4_3core_glClearBufferSubData(void *_glfuncs, GLenum target, GLenum internalFormat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum gltype, const GLvoid* data) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearBufferSubData(target, internalFormat, offset, size, format, gltype, data); -} - -void gl4_3core_glClearBufferData(void *_glfuncs, GLenum target, GLenum internalFormat, GLenum format, GLenum gltype, const GLvoid* data) -{ - QOpenGLFunctions_4_3_Core* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearBufferData(target, internalFormat, format, gltype, data); -} - diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.3core/funcs.h b/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.3core/funcs.h deleted file mode 100644 index b65f69bc4c..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.3core/funcs.h +++ /dev/null @@ -1,530 +0,0 @@ - -// ** file automatically generated by glgen -- do not edit manually ** - -#ifndef __cplusplus -#include -#include -typedef unsigned int GLenum; -typedef unsigned char GLboolean; -typedef unsigned int GLbitfield; -typedef void GLvoid; -typedef char GLchar; -typedef signed char GLbyte; /* 1-byte signed */ -typedef short GLshort; /* 2-byte signed */ -typedef int GLint; /* 4-byte signed */ -typedef unsigned char GLubyte; /* 1-byte unsigned */ -typedef unsigned short GLushort; /* 2-byte unsigned */ -typedef unsigned int GLuint; /* 4-byte unsigned */ -typedef int GLsizei; /* 4-byte signed */ -typedef float GLfloat; /* single precision float */ -typedef float GLclampf; /* single precision float in [0,1] */ -typedef double GLdouble; /* double precision float */ -typedef double GLclampd; /* double precision float in [0,1] */ -typedef int64_t GLint64; -typedef uint64_t GLuint64; -typedef ptrdiff_t GLintptr; -typedef ptrdiff_t GLsizeiptr; -typedef ptrdiff_t GLintptrARB; -typedef ptrdiff_t GLsizeiptrARB; -typedef struct __GLsync *GLsync; -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -void *gl4_3core_funcs(); - -void gl4_3core_glViewport(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height); -void gl4_3core_glDepthRange(void *_glfuncs, GLdouble nearVal, GLdouble farVal); -GLboolean gl4_3core_glIsEnabled(void *_glfuncs, GLenum cap); -void gl4_3core_glGetTexLevelParameteriv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLint* params); -void gl4_3core_glGetTexLevelParameterfv(void *_glfuncs, GLenum target, GLint level, GLenum pname, GLfloat* params); -void gl4_3core_glGetTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl4_3core_glGetTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gl4_3core_glGetTexImage(void *_glfuncs, GLenum target, GLint level, GLenum format, GLenum gltype, GLvoid* pixels); -void gl4_3core_glGetIntegerv(void *_glfuncs, GLenum pname, GLint* params); -void gl4_3core_glGetFloatv(void *_glfuncs, GLenum pname, GLfloat* params); -GLenum gl4_3core_glGetError(void *_glfuncs); -void gl4_3core_glGetDoublev(void *_glfuncs, GLenum pname, GLdouble* params); -void gl4_3core_glGetBooleanv(void *_glfuncs, GLenum pname, GLboolean* params); -void gl4_3core_glReadPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum gltype, GLvoid* pixels); -void gl4_3core_glReadBuffer(void *_glfuncs, GLenum mode); -void gl4_3core_glPixelStorei(void *_glfuncs, GLenum pname, GLint param); -void gl4_3core_glPixelStoref(void *_glfuncs, GLenum pname, GLfloat param); -void gl4_3core_glDepthFunc(void *_glfuncs, GLenum glfunc); -void gl4_3core_glStencilOp(void *_glfuncs, GLenum fail, GLenum zfail, GLenum zpass); -void gl4_3core_glStencilFunc(void *_glfuncs, GLenum glfunc, GLint ref, GLuint mask); -void gl4_3core_glLogicOp(void *_glfuncs, GLenum opcode); -void gl4_3core_glBlendFunc(void *_glfuncs, GLenum sfactor, GLenum dfactor); -void gl4_3core_glFlush(void *_glfuncs); -void gl4_3core_glFinish(void *_glfuncs); -void gl4_3core_glEnable(void *_glfuncs, GLenum cap); -void gl4_3core_glDisable(void *_glfuncs, GLenum cap); -void gl4_3core_glDepthMask(void *_glfuncs, GLboolean flag); -void gl4_3core_glColorMask(void *_glfuncs, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); -void gl4_3core_glStencilMask(void *_glfuncs, GLuint mask); -void gl4_3core_glClearDepth(void *_glfuncs, GLdouble depth); -void gl4_3core_glClearStencil(void *_glfuncs, GLint s); -void gl4_3core_glClearColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl4_3core_glClear(void *_glfuncs, GLbitfield mask); -void gl4_3core_glDrawBuffer(void *_glfuncs, GLenum mode); -void gl4_3core_glTexImage2D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl4_3core_glTexImage1D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl4_3core_glTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl4_3core_glTexParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint param); -void gl4_3core_glTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params); -void gl4_3core_glTexParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param); -void gl4_3core_glScissor(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height); -void gl4_3core_glPolygonMode(void *_glfuncs, GLenum face, GLenum mode); -void gl4_3core_glPointSize(void *_glfuncs, GLfloat size); -void gl4_3core_glLineWidth(void *_glfuncs, GLfloat width); -void gl4_3core_glHint(void *_glfuncs, GLenum target, GLenum mode); -void gl4_3core_glFrontFace(void *_glfuncs, GLenum mode); -void gl4_3core_glCullFace(void *_glfuncs, GLenum mode); -void gl4_3core_glIndexubv(void *_glfuncs, const GLubyte* c); -void gl4_3core_glIndexub(void *_glfuncs, GLubyte c); -GLboolean gl4_3core_glIsTexture(void *_glfuncs, GLuint texture); -void gl4_3core_glGenTextures(void *_glfuncs, GLsizei n, GLuint* textures); -void gl4_3core_glDeleteTextures(void *_glfuncs, GLsizei n, const GLuint* textures); -void gl4_3core_glBindTexture(void *_glfuncs, GLenum target, GLuint texture); -void gl4_3core_glTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl4_3core_glTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl4_3core_glCopyTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -void gl4_3core_glCopyTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -void gl4_3core_glCopyTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -void gl4_3core_glCopyTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border); -void gl4_3core_glPolygonOffset(void *_glfuncs, GLfloat factor, GLfloat units); -void gl4_3core_glDrawElements(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices); -void gl4_3core_glDrawArrays(void *_glfuncs, GLenum mode, GLint first, GLsizei count); -void gl4_3core_glCopyTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -void gl4_3core_glTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl4_3core_glTexImage3D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels); -void gl4_3core_glDrawRangeElements(void *_glfuncs, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum gltype, const GLvoid* indices); -void gl4_3core_glBlendEquation(void *_glfuncs, GLenum mode); -void gl4_3core_glBlendColor(void *_glfuncs, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void gl4_3core_glGetCompressedTexImage(void *_glfuncs, GLenum target, GLint level, GLvoid* img); -void gl4_3core_glCompressedTexSubImage1D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid* data); -void gl4_3core_glCompressedTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data); -void gl4_3core_glCompressedTexSubImage3D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data); -void gl4_3core_glCompressedTexImage1D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid* data); -void gl4_3core_glCompressedTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data); -void gl4_3core_glCompressedTexImage3D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data); -void gl4_3core_glSampleCoverage(void *_glfuncs, GLfloat value, GLboolean invert); -void gl4_3core_glActiveTexture(void *_glfuncs, GLenum texture); -void gl4_3core_glPointParameteriv(void *_glfuncs, GLenum pname, const GLint* params); -void gl4_3core_glPointParameteri(void *_glfuncs, GLenum pname, GLint param); -void gl4_3core_glPointParameterfv(void *_glfuncs, GLenum pname, const GLfloat* params); -void gl4_3core_glPointParameterf(void *_glfuncs, GLenum pname, GLfloat param); -void gl4_3core_glMultiDrawArrays(void *_glfuncs, GLenum mode, const GLint* first, const GLsizei* count, GLsizei drawcount); -void gl4_3core_glBlendFuncSeparate(void *_glfuncs, GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -void gl4_3core_glGetBufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -GLboolean gl4_3core_glUnmapBuffer(void *_glfuncs, GLenum target); -void gl4_3core_glGetBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, GLvoid* data); -void gl4_3core_glBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data); -void gl4_3core_glBufferData(void *_glfuncs, GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage); -GLboolean gl4_3core_glIsBuffer(void *_glfuncs, GLuint buffer); -void gl4_3core_glGenBuffers(void *_glfuncs, GLsizei n, GLuint* buffers); -void gl4_3core_glDeleteBuffers(void *_glfuncs, GLsizei n, const GLuint* buffers); -void gl4_3core_glBindBuffer(void *_glfuncs, GLenum target, GLuint buffer); -void gl4_3core_glGetQueryObjectuiv(void *_glfuncs, GLuint id, GLenum pname, GLuint* params); -void gl4_3core_glGetQueryObjectiv(void *_glfuncs, GLuint id, GLenum pname, GLint* params); -void gl4_3core_glGetQueryiv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl4_3core_glEndQuery(void *_glfuncs, GLenum target); -void gl4_3core_glBeginQuery(void *_glfuncs, GLenum target, GLuint id); -GLboolean gl4_3core_glIsQuery(void *_glfuncs, GLuint id); -void gl4_3core_glDeleteQueries(void *_glfuncs, GLsizei n, const GLuint* ids); -void gl4_3core_glGenQueries(void *_glfuncs, GLsizei n, GLuint* ids); -void gl4_3core_glVertexAttribPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLboolean normalized, GLsizei stride, const GLvoid* offset); -void gl4_3core_glValidateProgram(void *_glfuncs, GLuint program); -void gl4_3core_glUniformMatrix4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_3core_glUniformMatrix3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_3core_glUniformMatrix2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_3core_glUniform4iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gl4_3core_glUniform3iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gl4_3core_glUniform2iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gl4_3core_glUniform1iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gl4_3core_glUniform4fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gl4_3core_glUniform3fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gl4_3core_glUniform2fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gl4_3core_glUniform1fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gl4_3core_glUniform4i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -void gl4_3core_glUniform3i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2); -void gl4_3core_glUniform2i(void *_glfuncs, GLint location, GLint v0, GLint v1); -void gl4_3core_glUniform1i(void *_glfuncs, GLint location, GLint v0); -void gl4_3core_glUniform4f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -void gl4_3core_glUniform3f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -void gl4_3core_glUniform2f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1); -void gl4_3core_glUniform1f(void *_glfuncs, GLint location, GLfloat v0); -void gl4_3core_glUseProgram(void *_glfuncs, GLuint program); -void gl4_3core_glShaderSource(void *_glfuncs, GLuint shader, GLsizei count, const GLchar** source, const GLint* length); -void gl4_3core_glLinkProgram(void *_glfuncs, GLuint program); -GLboolean gl4_3core_glIsShader(void *_glfuncs, GLuint shader); -GLboolean gl4_3core_glIsProgram(void *_glfuncs, GLuint program); -void gl4_3core_glGetVertexAttribiv(void *_glfuncs, GLuint index, GLenum pname, GLint* params); -void gl4_3core_glGetVertexAttribfv(void *_glfuncs, GLuint index, GLenum pname, GLfloat* params); -void gl4_3core_glGetVertexAttribdv(void *_glfuncs, GLuint index, GLenum pname, GLdouble* params); -void gl4_3core_glGetUniformiv(void *_glfuncs, GLuint program, GLint location, GLint* params); -void gl4_3core_glGetUniformfv(void *_glfuncs, GLuint program, GLint location, GLfloat* params); -GLint gl4_3core_glGetUniformLocation(void *_glfuncs, GLuint program, const GLchar* name); -void gl4_3core_glGetShaderSource(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* source); -void gl4_3core_glGetShaderInfoLog(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* infoLog); -void gl4_3core_glGetShaderiv(void *_glfuncs, GLuint shader, GLenum pname, GLint* params); -void gl4_3core_glGetProgramInfoLog(void *_glfuncs, GLuint program, GLsizei bufSize, GLsizei* length, GLchar* infoLog); -void gl4_3core_glGetProgramiv(void *_glfuncs, GLuint program, GLenum pname, GLint* params); -GLint gl4_3core_glGetAttribLocation(void *_glfuncs, GLuint program, const GLchar* name); -void gl4_3core_glGetAttachedShaders(void *_glfuncs, GLuint program, GLsizei maxCount, GLsizei* count, GLuint* obj); -void gl4_3core_glGetActiveUniform(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name); -void gl4_3core_glGetActiveAttrib(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name); -void gl4_3core_glEnableVertexAttribArray(void *_glfuncs, GLuint index); -void gl4_3core_glDisableVertexAttribArray(void *_glfuncs, GLuint index); -void gl4_3core_glDetachShader(void *_glfuncs, GLuint program, GLuint shader); -void gl4_3core_glDeleteShader(void *_glfuncs, GLuint shader); -void gl4_3core_glDeleteProgram(void *_glfuncs, GLuint program); -GLuint gl4_3core_glCreateShader(void *_glfuncs, GLenum gltype); -GLuint gl4_3core_glCreateProgram(void *_glfuncs); -void gl4_3core_glCompileShader(void *_glfuncs, GLuint shader); -void gl4_3core_glBindAttribLocation(void *_glfuncs, GLuint program, GLuint index, const GLchar* name); -void gl4_3core_glAttachShader(void *_glfuncs, GLuint program, GLuint shader); -void gl4_3core_glStencilMaskSeparate(void *_glfuncs, GLenum face, GLuint mask); -void gl4_3core_glStencilFuncSeparate(void *_glfuncs, GLenum face, GLenum glfunc, GLint ref, GLuint mask); -void gl4_3core_glStencilOpSeparate(void *_glfuncs, GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); -void gl4_3core_glDrawBuffers(void *_glfuncs, GLsizei n, const GLenum* bufs); -void gl4_3core_glBlendEquationSeparate(void *_glfuncs, GLenum modeRGB, GLenum modeAlpha); -void gl4_3core_glUniformMatrix4x3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_3core_glUniformMatrix3x4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_3core_glUniformMatrix4x2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_3core_glUniformMatrix2x4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_3core_glUniformMatrix3x2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_3core_glUniformMatrix2x3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -GLboolean gl4_3core_glIsVertexArray(void *_glfuncs, GLuint array); -void gl4_3core_glGenVertexArrays(void *_glfuncs, GLsizei n, GLuint* arrays); -void gl4_3core_glDeleteVertexArrays(void *_glfuncs, GLsizei n, const GLuint* arrays); -void gl4_3core_glBindVertexArray(void *_glfuncs, GLuint array); -void gl4_3core_glFlushMappedBufferRange(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr length); -void gl4_3core_glFramebufferTextureLayer(void *_glfuncs, GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); -void gl4_3core_glRenderbufferStorageMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height); -void gl4_3core_glBlitFramebuffer(void *_glfuncs, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -void gl4_3core_glGenerateMipmap(void *_glfuncs, GLenum target); -void gl4_3core_glGetFramebufferAttachmentParameteriv(void *_glfuncs, GLenum target, GLenum attachment, GLenum pname, GLint* params); -void gl4_3core_glFramebufferRenderbuffer(void *_glfuncs, GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -void gl4_3core_glFramebufferTexture3D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -void gl4_3core_glFramebufferTexture2D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -void gl4_3core_glFramebufferTexture1D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLenum gl4_3core_glCheckFramebufferStatus(void *_glfuncs, GLenum target); -void gl4_3core_glGenFramebuffers(void *_glfuncs, GLsizei n, GLuint* framebuffers); -void gl4_3core_glDeleteFramebuffers(void *_glfuncs, GLsizei n, const GLuint* framebuffers); -void gl4_3core_glBindFramebuffer(void *_glfuncs, GLenum target, GLuint framebuffer); -GLboolean gl4_3core_glIsFramebuffer(void *_glfuncs, GLuint framebuffer); -void gl4_3core_glGetRenderbufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl4_3core_glRenderbufferStorage(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height); -void gl4_3core_glGenRenderbuffers(void *_glfuncs, GLsizei n, GLuint* renderbuffers); -void gl4_3core_glDeleteRenderbuffers(void *_glfuncs, GLsizei n, const GLuint* renderbuffers); -void gl4_3core_glBindRenderbuffer(void *_glfuncs, GLenum target, GLuint renderbuffer); -GLboolean gl4_3core_glIsRenderbuffer(void *_glfuncs, GLuint renderbuffer); -void gl4_3core_glClearBufferfi(void *_glfuncs, GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); -void gl4_3core_glClearBufferfv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLfloat* value); -void gl4_3core_glClearBufferuiv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLuint* value); -void gl4_3core_glClearBufferiv(void *_glfuncs, GLenum buffer, GLint drawbuffer, const GLint* value); -void gl4_3core_glGetTexParameterIuiv(void *_glfuncs, GLenum target, GLenum pname, GLuint* params); -void gl4_3core_glGetTexParameterIiv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl4_3core_glTexParameterIuiv(void *_glfuncs, GLenum target, GLenum pname, const GLuint* params); -void gl4_3core_glTexParameterIiv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gl4_3core_glUniform4uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value); -void gl4_3core_glUniform3uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value); -void gl4_3core_glUniform2uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value); -void gl4_3core_glUniform1uiv(void *_glfuncs, GLint location, GLsizei count, const GLuint* value); -void gl4_3core_glUniform4ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -void gl4_3core_glUniform3ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1, GLuint v2); -void gl4_3core_glUniform2ui(void *_glfuncs, GLint location, GLuint v0, GLuint v1); -void gl4_3core_glUniform1ui(void *_glfuncs, GLint location, GLuint v0); -GLint gl4_3core_glGetFragDataLocation(void *_glfuncs, GLuint program, const GLchar* name); -void gl4_3core_glBindFragDataLocation(void *_glfuncs, GLuint program, GLuint color, const GLchar* name); -void gl4_3core_glGetUniformuiv(void *_glfuncs, GLuint program, GLint location, GLuint* params); -void gl4_3core_glGetVertexAttribIuiv(void *_glfuncs, GLuint index, GLenum pname, GLuint* params); -void gl4_3core_glGetVertexAttribIiv(void *_glfuncs, GLuint index, GLenum pname, GLint* params); -void gl4_3core_glVertexAttribIPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl4_3core_glEndConditionalRender(void *_glfuncs); -void gl4_3core_glBeginConditionalRender(void *_glfuncs, GLuint id, GLenum mode); -void gl4_3core_glClampColor(void *_glfuncs, GLenum target, GLenum clamp); -void gl4_3core_glGetTransformFeedbackVarying(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* gltype, GLchar* name); -void gl4_3core_glBindBufferBase(void *_glfuncs, GLenum target, GLuint index, GLuint buffer); -void gl4_3core_glBindBufferRange(void *_glfuncs, GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -void gl4_3core_glEndTransformFeedback(void *_glfuncs); -void gl4_3core_glBeginTransformFeedback(void *_glfuncs, GLenum primitiveMode); -GLboolean gl4_3core_glIsEnabledi(void *_glfuncs, GLenum target, GLuint index); -void gl4_3core_glDisablei(void *_glfuncs, GLenum target, GLuint index); -void gl4_3core_glEnablei(void *_glfuncs, GLenum target, GLuint index); -void gl4_3core_glGetIntegeri_v(void *_glfuncs, GLenum target, GLuint index, GLint* data); -void gl4_3core_glGetBooleani_v(void *_glfuncs, GLenum target, GLuint index, GLboolean* data); -void gl4_3core_glColorMaski(void *_glfuncs, GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); -void gl4_3core_glCopyBufferSubData(void *_glfuncs, GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); -void gl4_3core_glUniformBlockBinding(void *_glfuncs, GLuint program, GLuint v0, GLuint v1); -void gl4_3core_glGetActiveUniformBlockName(void *_glfuncs, GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformBlockName); -void gl4_3core_glGetActiveUniformBlockiv(void *_glfuncs, GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint* params); -GLuint gl4_3core_glGetUniformBlockIndex(void *_glfuncs, GLuint program, const GLchar* uniformBlockName); -void gl4_3core_glGetActiveUniformName(void *_glfuncs, GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformName); -void gl4_3core_glGetActiveUniformsiv(void *_glfuncs, GLuint program, GLsizei uniformCount, const GLuint* uniformIndices, GLenum pname, GLint* params); -void gl4_3core_glPrimitiveRestartIndex(void *_glfuncs, GLuint index); -void gl4_3core_glTexBuffer(void *_glfuncs, GLenum target, GLenum internalFormat, GLuint buffer); -void gl4_3core_glDrawElementsInstanced(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLsizei instancecount); -void gl4_3core_glDrawArraysInstanced(void *_glfuncs, GLenum mode, GLint first, GLsizei count, GLsizei instancecount); -void gl4_3core_glSampleMaski(void *_glfuncs, GLuint index, GLbitfield mask); -void gl4_3core_glGetMultisamplefv(void *_glfuncs, GLenum pname, GLuint index, GLfloat* val); -void gl4_3core_glTexImage3DMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); -void gl4_3core_glTexImage2DMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); -void gl4_3core_glGetSynciv(void *_glfuncs, GLsync sync, GLenum pname, GLsizei bufSize, GLsizei* length, GLint* values); -void gl4_3core_glGetInteger64v(void *_glfuncs, GLenum pname, GLint64* params); -void gl4_3core_glWaitSync(void *_glfuncs, GLsync sync, GLbitfield flags, GLuint64 timeout); -GLenum gl4_3core_glClientWaitSync(void *_glfuncs, GLsync sync, GLbitfield flags, GLuint64 timeout); -void gl4_3core_glDeleteSync(void *_glfuncs, GLsync sync); -GLboolean gl4_3core_glIsSync(void *_glfuncs, GLsync sync); -GLsync gl4_3core_glFenceSync(void *_glfuncs, GLenum condition, GLbitfield flags); -void gl4_3core_glProvokingVertex(void *_glfuncs, GLenum mode); -void gl4_3core_glDrawElementsInstancedBaseVertex(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLsizei instancecount, GLint basevertex); -void gl4_3core_glDrawRangeElementsBaseVertex(void *_glfuncs, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum gltype, const GLvoid* indices, GLint basevertex); -void gl4_3core_glDrawElementsBaseVertex(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLint basevertex); -void gl4_3core_glFramebufferTexture(void *_glfuncs, GLenum target, GLenum attachment, GLuint texture, GLint level); -void gl4_3core_glGetBufferParameteri64v(void *_glfuncs, GLenum target, GLenum pname, GLint64* params); -void gl4_3core_glGetInteger64i_v(void *_glfuncs, GLenum target, GLuint index, GLint64* data); -void gl4_3core_glVertexAttribP4uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value); -void gl4_3core_glVertexAttribP4ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value); -void gl4_3core_glVertexAttribP3uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value); -void gl4_3core_glVertexAttribP3ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value); -void gl4_3core_glVertexAttribP2uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value); -void gl4_3core_glVertexAttribP2ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value); -void gl4_3core_glVertexAttribP1uiv(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, const GLuint* value); -void gl4_3core_glVertexAttribP1ui(void *_glfuncs, GLuint index, GLenum gltype, GLboolean normalized, GLuint value); -void gl4_3core_glSecondaryColorP3uiv(void *_glfuncs, GLenum gltype, const GLuint* color); -void gl4_3core_glSecondaryColorP3ui(void *_glfuncs, GLenum gltype, GLuint color); -void gl4_3core_glColorP4uiv(void *_glfuncs, GLenum gltype, const GLuint* color); -void gl4_3core_glColorP4ui(void *_glfuncs, GLenum gltype, GLuint color); -void gl4_3core_glColorP3uiv(void *_glfuncs, GLenum gltype, const GLuint* color); -void gl4_3core_glColorP3ui(void *_glfuncs, GLenum gltype, GLuint color); -void gl4_3core_glNormalP3uiv(void *_glfuncs, GLenum gltype, const GLuint* coords); -void gl4_3core_glNormalP3ui(void *_glfuncs, GLenum gltype, GLuint coords); -void gl4_3core_glMultiTexCoordP4uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords); -void gl4_3core_glMultiTexCoordP4ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords); -void gl4_3core_glMultiTexCoordP3uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords); -void gl4_3core_glMultiTexCoordP3ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords); -void gl4_3core_glMultiTexCoordP2uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords); -void gl4_3core_glMultiTexCoordP2ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords); -void gl4_3core_glMultiTexCoordP1uiv(void *_glfuncs, GLenum texture, GLenum gltype, const GLuint* coords); -void gl4_3core_glMultiTexCoordP1ui(void *_glfuncs, GLenum texture, GLenum gltype, GLuint coords); -void gl4_3core_glTexCoordP4uiv(void *_glfuncs, GLenum gltype, const GLuint* coords); -void gl4_3core_glTexCoordP4ui(void *_glfuncs, GLenum gltype, GLuint coords); -void gl4_3core_glTexCoordP3uiv(void *_glfuncs, GLenum gltype, const GLuint* coords); -void gl4_3core_glTexCoordP3ui(void *_glfuncs, GLenum gltype, GLuint coords); -void gl4_3core_glTexCoordP2uiv(void *_glfuncs, GLenum gltype, const GLuint* coords); -void gl4_3core_glTexCoordP2ui(void *_glfuncs, GLenum gltype, GLuint coords); -void gl4_3core_glTexCoordP1uiv(void *_glfuncs, GLenum gltype, const GLuint* coords); -void gl4_3core_glTexCoordP1ui(void *_glfuncs, GLenum gltype, GLuint coords); -void gl4_3core_glVertexP4uiv(void *_glfuncs, GLenum gltype, const GLuint* value); -void gl4_3core_glVertexP4ui(void *_glfuncs, GLenum gltype, GLuint value); -void gl4_3core_glVertexP3uiv(void *_glfuncs, GLenum gltype, const GLuint* value); -void gl4_3core_glVertexP3ui(void *_glfuncs, GLenum gltype, GLuint value); -void gl4_3core_glVertexP2uiv(void *_glfuncs, GLenum gltype, const GLuint* value); -void gl4_3core_glVertexP2ui(void *_glfuncs, GLenum gltype, GLuint value); -void gl4_3core_glGetQueryObjectui64v(void *_glfuncs, GLuint id, GLenum pname, GLuint64* params); -void gl4_3core_glGetQueryObjecti64v(void *_glfuncs, GLuint id, GLenum pname, GLint64* params); -void gl4_3core_glQueryCounter(void *_glfuncs, GLuint id, GLenum target); -void gl4_3core_glGetSamplerParameterIuiv(void *_glfuncs, GLuint sampler, GLenum pname, GLuint* params); -void gl4_3core_glGetSamplerParameterfv(void *_glfuncs, GLuint sampler, GLenum pname, GLfloat* params); -void gl4_3core_glGetSamplerParameterIiv(void *_glfuncs, GLuint sampler, GLenum pname, GLint* params); -void gl4_3core_glGetSamplerParameteriv(void *_glfuncs, GLuint sampler, GLenum pname, GLint* params); -void gl4_3core_glSamplerParameterIuiv(void *_glfuncs, GLuint sampler, GLenum pname, const GLuint* param); -void gl4_3core_glSamplerParameterIiv(void *_glfuncs, GLuint sampler, GLenum pname, const GLint* param); -void gl4_3core_glSamplerParameterfv(void *_glfuncs, GLuint sampler, GLenum pname, const GLfloat* param); -void gl4_3core_glSamplerParameterf(void *_glfuncs, GLuint sampler, GLenum pname, GLfloat param); -void gl4_3core_glSamplerParameteriv(void *_glfuncs, GLuint sampler, GLenum pname, const GLint* param); -void gl4_3core_glSamplerParameteri(void *_glfuncs, GLuint sampler, GLenum pname, GLint param); -void gl4_3core_glBindSampler(void *_glfuncs, GLuint unit, GLuint sampler); -GLboolean gl4_3core_glIsSampler(void *_glfuncs, GLuint sampler); -void gl4_3core_glDeleteSamplers(void *_glfuncs, GLsizei count, const GLuint* samplers); -void gl4_3core_glGenSamplers(void *_glfuncs, GLsizei count, GLuint* samplers); -GLint gl4_3core_glGetFragDataIndex(void *_glfuncs, GLuint program, const GLchar* name); -void gl4_3core_glBindFragDataLocationIndexed(void *_glfuncs, GLuint program, GLuint colorNumber, GLuint index, const GLchar* name); -void gl4_3core_glVertexAttribDivisor(void *_glfuncs, GLuint index, GLuint divisor); -void gl4_3core_glGetQueryIndexediv(void *_glfuncs, GLenum target, GLuint index, GLenum pname, GLint* params); -void gl4_3core_glEndQueryIndexed(void *_glfuncs, GLenum target, GLuint index); -void gl4_3core_glBeginQueryIndexed(void *_glfuncs, GLenum target, GLuint index, GLuint id); -void gl4_3core_glDrawTransformFeedbackStream(void *_glfuncs, GLenum mode, GLuint id, GLuint stream); -void gl4_3core_glDrawTransformFeedback(void *_glfuncs, GLenum mode, GLuint id); -void gl4_3core_glResumeTransformFeedback(void *_glfuncs); -void gl4_3core_glPauseTransformFeedback(void *_glfuncs); -GLboolean gl4_3core_glIsTransformFeedback(void *_glfuncs, GLuint id); -void gl4_3core_glGenTransformFeedbacks(void *_glfuncs, GLsizei n, GLuint* ids); -void gl4_3core_glDeleteTransformFeedbacks(void *_glfuncs, GLsizei n, const GLuint* ids); -void gl4_3core_glBindTransformFeedback(void *_glfuncs, GLenum target, GLuint id); -void gl4_3core_glPatchParameterfv(void *_glfuncs, GLenum pname, const GLfloat* values); -void gl4_3core_glPatchParameteri(void *_glfuncs, GLenum pname, GLint value); -void gl4_3core_glGetProgramStageiv(void *_glfuncs, GLuint program, GLenum shadertype, GLenum pname, GLint* values); -void gl4_3core_glGetUniformSubroutineuiv(void *_glfuncs, GLenum shadertype, GLint location, GLuint* params); -void gl4_3core_glUniformSubroutinesuiv(void *_glfuncs, GLenum shadertype, GLsizei count, const GLuint* value); -void gl4_3core_glGetActiveSubroutineName(void *_glfuncs, GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei* length, GLchar* name); -void gl4_3core_glGetActiveSubroutineUniformName(void *_glfuncs, GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei* length, GLchar* name); -void gl4_3core_glGetActiveSubroutineUniformiv(void *_glfuncs, GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint* values); -GLuint gl4_3core_glGetSubroutineIndex(void *_glfuncs, GLuint program, GLenum shadertype, const GLchar* name); -GLint gl4_3core_glGetSubroutineUniformLocation(void *_glfuncs, GLuint program, GLenum shadertype, const GLchar* name); -void gl4_3core_glGetUniformdv(void *_glfuncs, GLuint program, GLint location, GLdouble* params); -void gl4_3core_glUniformMatrix4x3dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_3core_glUniformMatrix4x2dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_3core_glUniformMatrix3x4dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_3core_glUniformMatrix3x2dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_3core_glUniformMatrix2x4dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_3core_glUniformMatrix2x3dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_3core_glUniformMatrix4dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_3core_glUniformMatrix3dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_3core_glUniformMatrix2dv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_3core_glUniform4dv(void *_glfuncs, GLint location, GLsizei count, const GLdouble* value); -void gl4_3core_glUniform3dv(void *_glfuncs, GLint location, GLsizei count, const GLdouble* value); -void gl4_3core_glUniform2dv(void *_glfuncs, GLint location, GLsizei count, const GLdouble* value); -void gl4_3core_glUniform1dv(void *_glfuncs, GLint location, GLsizei count, const GLdouble* value); -void gl4_3core_glUniform4d(void *_glfuncs, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3); -void gl4_3core_glUniform3d(void *_glfuncs, GLint location, GLdouble v0, GLdouble v1, GLdouble v2); -void gl4_3core_glUniform2d(void *_glfuncs, GLint location, GLdouble v0, GLdouble v1); -void gl4_3core_glUniform1d(void *_glfuncs, GLint location, GLdouble v0); -void gl4_3core_glDrawElementsIndirect(void *_glfuncs, GLenum mode, GLenum gltype, const GLvoid* indirect); -void gl4_3core_glDrawArraysIndirect(void *_glfuncs, GLenum mode, const GLvoid* indirect); -void gl4_3core_glBlendFuncSeparatei(void *_glfuncs, GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -void gl4_3core_glBlendFunci(void *_glfuncs, GLuint buf, GLenum src, GLenum dst); -void gl4_3core_glBlendEquationSeparatei(void *_glfuncs, GLuint buf, GLenum modeRGB, GLenum modeAlpha); -void gl4_3core_glBlendEquationi(void *_glfuncs, GLuint buf, GLenum mode); -void gl4_3core_glMinSampleShading(void *_glfuncs, GLfloat value); -void gl4_3core_glGetDoublei_v(void *_glfuncs, GLenum target, GLuint index, GLdouble* data); -void gl4_3core_glGetFloati_v(void *_glfuncs, GLenum target, GLuint index, GLfloat* data); -void gl4_3core_glDepthRangeIndexed(void *_glfuncs, GLuint index, GLdouble n, GLdouble f); -void gl4_3core_glDepthRangeArrayv(void *_glfuncs, GLuint first, GLsizei count, const GLdouble* v); -void gl4_3core_glScissorIndexedv(void *_glfuncs, GLuint index, const GLint* v); -void gl4_3core_glScissorIndexed(void *_glfuncs, GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); -void gl4_3core_glScissorArrayv(void *_glfuncs, GLuint first, GLsizei count, const GLint* v); -void gl4_3core_glViewportIndexedfv(void *_glfuncs, GLuint index, const GLfloat* v); -void gl4_3core_glViewportIndexedf(void *_glfuncs, GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); -void gl4_3core_glViewportArrayv(void *_glfuncs, GLuint first, GLsizei count, const GLfloat* v); -void gl4_3core_glGetVertexAttribLdv(void *_glfuncs, GLuint index, GLenum pname, GLdouble* params); -void gl4_3core_glVertexAttribLPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLsizei stride, const GLvoid* pointer); -void gl4_3core_glVertexAttribL4dv(void *_glfuncs, GLuint index, const GLdouble* v); -void gl4_3core_glVertexAttribL3dv(void *_glfuncs, GLuint index, const GLdouble* v); -void gl4_3core_glVertexAttribL2dv(void *_glfuncs, GLuint index, const GLdouble* v); -void gl4_3core_glVertexAttribL1dv(void *_glfuncs, GLuint index, const GLdouble* v); -void gl4_3core_glVertexAttribL4d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -void gl4_3core_glVertexAttribL3d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y, GLdouble z); -void gl4_3core_glVertexAttribL2d(void *_glfuncs, GLuint index, GLdouble x, GLdouble y); -void gl4_3core_glVertexAttribL1d(void *_glfuncs, GLuint index, GLdouble x); -void gl4_3core_glGetProgramPipelineInfoLog(void *_glfuncs, GLuint pipeline, GLsizei bufSize, GLsizei* length, GLchar* infoLog); -void gl4_3core_glValidateProgramPipeline(void *_glfuncs, GLuint pipeline); -void gl4_3core_glProgramUniformMatrix4x3dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_3core_glProgramUniformMatrix3x4dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_3core_glProgramUniformMatrix4x2dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_3core_glProgramUniformMatrix2x4dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_3core_glProgramUniformMatrix3x2dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_3core_glProgramUniformMatrix2x3dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_3core_glProgramUniformMatrix4x3fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_3core_glProgramUniformMatrix3x4fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_3core_glProgramUniformMatrix4x2fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_3core_glProgramUniformMatrix2x4fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_3core_glProgramUniformMatrix3x2fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_3core_glProgramUniformMatrix2x3fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_3core_glProgramUniformMatrix4dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_3core_glProgramUniformMatrix3dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_3core_glProgramUniformMatrix2dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -void gl4_3core_glProgramUniformMatrix4fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_3core_glProgramUniformMatrix3fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_3core_glProgramUniformMatrix2fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gl4_3core_glProgramUniform4uiv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLuint* value); -void gl4_3core_glProgramUniform4ui(void *_glfuncs, GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -void gl4_3core_glProgramUniform4dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLdouble* value); -void gl4_3core_glProgramUniform4d(void *_glfuncs, GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3); -void gl4_3core_glProgramUniform4fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLfloat* value); -void gl4_3core_glProgramUniform4f(void *_glfuncs, GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -void gl4_3core_glProgramUniform4iv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLint* value); -void gl4_3core_glProgramUniform4i(void *_glfuncs, GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -void gl4_3core_glProgramUniform3uiv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLuint* value); -void gl4_3core_glProgramUniform3ui(void *_glfuncs, GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); -void gl4_3core_glProgramUniform3dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLdouble* value); -void gl4_3core_glProgramUniform3d(void *_glfuncs, GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2); -void gl4_3core_glProgramUniform3fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLfloat* value); -void gl4_3core_glProgramUniform3f(void *_glfuncs, GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -void gl4_3core_glProgramUniform3iv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLint* value); -void gl4_3core_glProgramUniform3i(void *_glfuncs, GLuint program, GLint location, GLint v0, GLint v1, GLint v2); -void gl4_3core_glProgramUniform2uiv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLuint* value); -void gl4_3core_glProgramUniform2ui(void *_glfuncs, GLuint program, GLint location, GLuint v0, GLuint v1); -void gl4_3core_glProgramUniform2dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLdouble* value); -void gl4_3core_glProgramUniform2d(void *_glfuncs, GLuint program, GLint location, GLdouble v0, GLdouble v1); -void gl4_3core_glProgramUniform2fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLfloat* value); -void gl4_3core_glProgramUniform2f(void *_glfuncs, GLuint program, GLint location, GLfloat v0, GLfloat v1); -void gl4_3core_glProgramUniform2iv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLint* value); -void gl4_3core_glProgramUniform2i(void *_glfuncs, GLuint program, GLint location, GLint v0, GLint v1); -void gl4_3core_glProgramUniform1uiv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLuint* value); -void gl4_3core_glProgramUniform1ui(void *_glfuncs, GLuint program, GLint location, GLuint v0); -void gl4_3core_glProgramUniform1dv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLdouble* value); -void gl4_3core_glProgramUniform1d(void *_glfuncs, GLuint program, GLint location, GLdouble v0); -void gl4_3core_glProgramUniform1fv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLfloat* value); -void gl4_3core_glProgramUniform1f(void *_glfuncs, GLuint program, GLint location, GLfloat v0); -void gl4_3core_glProgramUniform1iv(void *_glfuncs, GLuint program, GLint location, GLsizei count, const GLint* value); -void gl4_3core_glProgramUniform1i(void *_glfuncs, GLuint program, GLint location, GLint v0); -void gl4_3core_glGetProgramPipelineiv(void *_glfuncs, GLuint pipeline, GLenum pname, GLint* params); -GLboolean gl4_3core_glIsProgramPipeline(void *_glfuncs, GLuint pipeline); -void gl4_3core_glGenProgramPipelines(void *_glfuncs, GLsizei n, GLuint* pipelines); -void gl4_3core_glDeleteProgramPipelines(void *_glfuncs, GLsizei n, const GLuint* pipelines); -void gl4_3core_glBindProgramPipeline(void *_glfuncs, GLuint pipeline); -void gl4_3core_glActiveShaderProgram(void *_glfuncs, GLuint pipeline, GLuint program); -void gl4_3core_glUseProgramStages(void *_glfuncs, GLuint pipeline, GLbitfield stages, GLuint program); -void gl4_3core_glProgramParameteri(void *_glfuncs, GLuint program, GLenum pname, GLint value); -void gl4_3core_glProgramBinary(void *_glfuncs, GLuint program, GLenum binaryFormat, const GLvoid* binary, GLsizei length); -void gl4_3core_glGetProgramBinary(void *_glfuncs, GLuint program, GLsizei bufSize, GLsizei* length, GLenum* binaryFormat, GLvoid* binary); -void gl4_3core_glClearDepthf(void *_glfuncs, GLfloat dd); -void gl4_3core_glDepthRangef(void *_glfuncs, GLfloat n, GLfloat f); -void gl4_3core_glGetShaderPrecisionFormat(void *_glfuncs, GLenum shadertype, GLenum precisionType, GLint* range_, GLint* precision); -void gl4_3core_glShaderBinary(void *_glfuncs, GLsizei count, const GLuint* shaders, GLenum binaryFormat, const GLvoid* binary, GLsizei length); -void gl4_3core_glReleaseShaderCompiler(void *_glfuncs); -void gl4_3core_glTexStorage3D(void *_glfuncs, GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth); -void gl4_3core_glTexStorage2D(void *_glfuncs, GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height); -void gl4_3core_glTexStorage1D(void *_glfuncs, GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width); -void gl4_3core_glMemoryBarrier(void *_glfuncs, GLbitfield barriers); -void gl4_3core_glBindImageTexture(void *_glfuncs, GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format); -void gl4_3core_glGetActiveAtomicCounterBufferiv(void *_glfuncs, GLuint program, GLuint bufferIndex, GLenum pname, GLint* params); -void gl4_3core_glGetInternalformativ(void *_glfuncs, GLenum target, GLenum internalFormat, GLenum pname, GLsizei bufSize, GLint* params); -void gl4_3core_glDrawTransformFeedbackStreamInstanced(void *_glfuncs, GLenum mode, GLuint id, GLuint stream, GLsizei instancecount); -void gl4_3core_glDrawTransformFeedbackInstanced(void *_glfuncs, GLenum mode, GLuint id, GLsizei instancecount); -void gl4_3core_glDrawElementsInstancedBaseVertexBaseInstance(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance); -void gl4_3core_glDrawElementsInstancedBaseInstance(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices, GLsizei instancecount, GLuint baseinstance); -void gl4_3core_glDrawArraysInstancedBaseInstance(void *_glfuncs, GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance); -void gl4_3core_glTexStorage3DMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); -void gl4_3core_glTexStorage2DMultisample(void *_glfuncs, GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); -void gl4_3core_glTexBufferRange(void *_glfuncs, GLenum target, GLenum internalFormat, GLuint buffer, GLintptr offset, GLsizeiptr size); -void gl4_3core_glShaderStorageBlockBinding(void *_glfuncs, GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding); -GLint gl4_3core_glGetProgramResourceLocationIndex(void *_glfuncs, GLuint program, GLenum programInterface, const GLchar* name); -GLint gl4_3core_glGetProgramResourceLocation(void *_glfuncs, GLuint program, GLenum programInterface, const GLchar* name); -void gl4_3core_glGetProgramResourceiv(void *_glfuncs, GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum* props, GLsizei bufSize, GLsizei* length, GLint* params); -void gl4_3core_glGetProgramResourceName(void *_glfuncs, GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei* length, GLchar* name); -GLuint gl4_3core_glGetProgramResourceIndex(void *_glfuncs, GLuint program, GLenum programInterface, const GLchar* name); -void gl4_3core_glGetProgramInterfaceiv(void *_glfuncs, GLuint program, GLenum programInterface, GLenum pname, GLint* params); -void gl4_3core_glMultiDrawElementsIndirect(void *_glfuncs, GLenum mode, GLenum gltype, const GLvoid* indirect, GLsizei drawcount, GLsizei stride); -void gl4_3core_glMultiDrawArraysIndirect(void *_glfuncs, GLenum mode, const GLvoid* indirect, GLsizei drawcount, GLsizei stride); -void gl4_3core_glInvalidateSubFramebuffer(void *_glfuncs, GLenum target, GLsizei numAttachments, const GLenum* attachments, GLint x, GLint y, GLsizei width, GLsizei height); -void gl4_3core_glInvalidateFramebuffer(void *_glfuncs, GLenum target, GLsizei numAttachments, const GLenum* attachments); -void gl4_3core_glInvalidateBufferData(void *_glfuncs, GLuint buffer); -void gl4_3core_glInvalidateBufferSubData(void *_glfuncs, GLuint buffer, GLintptr offset, GLsizeiptr length); -void gl4_3core_glInvalidateTexImage(void *_glfuncs, GLuint texture, GLint level); -void gl4_3core_glInvalidateTexSubImage(void *_glfuncs, GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth); -void gl4_3core_glGetInternalformati64v(void *_glfuncs, GLenum target, GLenum internalFormat, GLenum pname, GLsizei bufSize, GLint64* params); -void gl4_3core_glGetFramebufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gl4_3core_glFramebufferParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint param); -void gl4_3core_glVertexBindingDivisor(void *_glfuncs, GLuint bindingindex, GLuint divisor); -void gl4_3core_glVertexAttribBinding(void *_glfuncs, GLuint attribindex, GLuint bindingindex); -void gl4_3core_glVertexAttribLFormat(void *_glfuncs, GLuint attribindex, GLint size, GLenum gltype, GLuint relativeoffset); -void gl4_3core_glVertexAttribIFormat(void *_glfuncs, GLuint attribindex, GLint size, GLenum gltype, GLuint relativeoffset); -void gl4_3core_glVertexAttribFormat(void *_glfuncs, GLuint attribindex, GLint size, GLenum gltype, GLboolean normalized, GLuint relativeoffset); -void gl4_3core_glBindVertexBuffer(void *_glfuncs, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); -void gl4_3core_glTextureView(void *_glfuncs, GLuint texture, GLenum target, GLuint origtexture, GLenum internalFormat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); -void gl4_3core_glCopyImageSubData(void *_glfuncs, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); -void gl4_3core_glDispatchComputeIndirect(void *_glfuncs, GLintptr indirect); -void gl4_3core_glDispatchCompute(void *_glfuncs, GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z); -void gl4_3core_glClearBufferSubData(void *_glfuncs, GLenum target, GLenum internalFormat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum gltype, const GLvoid* data); -void gl4_3core_glClearBufferData(void *_glfuncs, GLenum target, GLenum internalFormat, GLenum format, GLenum gltype, const GLvoid* data); - - -#ifdef __cplusplus -} // extern "C" -#endif diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.3core/gl.go b/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.3core/gl.go deleted file mode 100644 index 76df4604f8..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/4.3core/gl.go +++ /dev/null @@ -1,7052 +0,0 @@ -// ** file automatically generated by glgen -- do not edit manually ** - -package GL - -// #cgo CXXFLAGS: -std=c++0x -pedantic-errors -Wall -fno-strict-aliasing -// #cgo LDFLAGS: -lstdc++ -// #cgo pkg-config: Qt5Core Qt5OpenGL -// -// #include "funcs.h" -// -// void free(void*); -// -import "C" - -import ( - "fmt" - "reflect" - "unsafe" - - "gopkg.in/qml.v1/gl/glbase" -) - -// API returns a value that offers methods matching the OpenGL version 4.3 API. -// -// The returned API must not be used after the provided OpenGL context becomes invalid. -func API(context glbase.Contexter) *GL { - gl := &GL{} - gl.funcs = C.gl4_3core_funcs() - if gl.funcs == nil { - panic(fmt.Errorf("OpenGL version 4.3 is not available")) - } - return gl -} - -// GL implements the OpenGL version 4.3 API. Values of this -// type must be created via the API function, and it must not be used after -// the associated OpenGL context becomes invalid. -type GL struct { - funcs unsafe.Pointer -} - -const ( - FALSE = 0 - TRUE = 1 - NONE = 0 - - BYTE = 0x1400 - UNSIGNED_BYTE = 0x1401 - SHORT = 0x1402 - UNSIGNED_SHORT = 0x1403 - INT = 0x1404 - UNSIGNED_INT = 0x1405 - FLOAT = 0x1406 - N2_BYTES = 0x1407 - N3_BYTES = 0x1408 - N4_BYTES = 0x1409 - DOUBLE = 0x140A - HALF_FLOAT = 0x140B - FIXED = 0x140C - - ACCUM = 0x0100 - LOAD = 0x0101 - RETURN = 0x0102 - MULT = 0x0103 - ADD = 0x0104 - - ACCUM_BUFFER_BIT = 0x00000200 - ALL_ATTRIB_BITS = 0xFFFFFFFF - COLOR_BUFFER_BIT = 0x00004000 - CURRENT_BIT = 0x00000001 - DEPTH_BUFFER_BIT = 0x00000100 - ENABLE_BIT = 0x00002000 - EVAL_BIT = 0x00010000 - FOG_BIT = 0x00000080 - HINT_BIT = 0x00008000 - LIGHTING_BIT = 0x00000040 - LINE_BIT = 0x00000004 - LIST_BIT = 0x00020000 - MULTISAMPLE_BIT = 0x20000000 - PIXEL_MODE_BIT = 0x00000020 - POINT_BIT = 0x00000002 - POLYGON_BIT = 0x00000008 - POLYGON_STIPPLE_BIT = 0x00000010 - SCISSOR_BIT = 0x00080000 - STENCIL_BUFFER_BIT = 0x00000400 - TEXTURE_BIT = 0x00040000 - TRANSFORM_BIT = 0x00001000 - VIEWPORT_BIT = 0x00000800 - - ALWAYS = 0x0207 - EQUAL = 0x0202 - GEQUAL = 0x0206 - GREATER = 0x0204 - LEQUAL = 0x0203 - LESS = 0x0201 - NEVER = 0x0200 - NOTEQUAL = 0x0205 - - LOGIC_OP = 0x0BF1 - - DST_ALPHA = 0x0304 - ONE = 1 - ONE_MINUS_DST_ALPHA = 0x0305 - ONE_MINUS_SRC_ALPHA = 0x0303 - ONE_MINUS_SRC_COLOR = 0x0301 - SRC_ALPHA = 0x0302 - SRC_COLOR = 0x0300 - ZERO = 0 - - DST_COLOR = 0x0306 - ONE_MINUS_DST_COLOR = 0x0307 - SRC_ALPHA_SATURATE = 0x0308 - - CLIENT_ALL_ATTRIB_BITS = 0xFFFFFFFF - CLIENT_PIXEL_STORE_BIT = 0x00000001 - CLIENT_VERTEX_ARRAY_BIT = 0x00000002 - - CLIP_DISTANCE0 = 0x3000 - CLIP_DISTANCE1 = 0x3001 - CLIP_DISTANCE2 = 0x3002 - CLIP_DISTANCE3 = 0x3003 - CLIP_DISTANCE4 = 0x3004 - CLIP_DISTANCE5 = 0x3005 - CLIP_DISTANCE6 = 0x3006 - CLIP_DISTANCE7 = 0x3007 - CLIP_PLANE0 = 0x3000 - CLIP_PLANE1 = 0x3001 - CLIP_PLANE2 = 0x3002 - CLIP_PLANE3 = 0x3003 - CLIP_PLANE4 = 0x3004 - CLIP_PLANE5 = 0x3005 - - BACK = 0x0405 - FRONT = 0x0404 - FRONT_AND_BACK = 0x0408 - - AMBIENT = 0x1200 - AMBIENT_AND_DIFFUSE = 0x1602 - DIFFUSE = 0x1201 - EMISSION = 0x1600 - SPECULAR = 0x1202 - - CONTEXT_FLAG_DEBUG_BIT = 0x00000002 - CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT = 0x00000001 - - CONTEXT_COMPATIBILITY_PROFILE_BIT = 0x00000002 - CONTEXT_CORE_PROFILE_BIT = 0x00000001 - - AUX0 = 0x0409 - AUX1 = 0x040A - AUX2 = 0x040B - AUX3 = 0x040C - BACK_LEFT = 0x0402 - BACK_RIGHT = 0x0403 - FRONT_LEFT = 0x0400 - FRONT_RIGHT = 0x0401 - LEFT = 0x0406 - RIGHT = 0x0407 - - ALPHA_TEST = 0x0BC0 - AUTO_NORMAL = 0x0D80 - BLEND = 0x0BE2 - COLOR_ARRAY = 0x8076 - COLOR_LOGIC_OP = 0x0BF2 - COLOR_MATERIAL = 0x0B57 - CULL_FACE = 0x0B44 - DEPTH_TEST = 0x0B71 - DITHER = 0x0BD0 - EDGE_FLAG_ARRAY = 0x8079 - FOG = 0x0B60 - INDEX_ARRAY = 0x8077 - INDEX_LOGIC_OP = 0x0BF1 - LIGHT0 = 0x4000 - LIGHT1 = 0x4001 - LIGHT2 = 0x4002 - LIGHT3 = 0x4003 - LIGHT4 = 0x4004 - LIGHT5 = 0x4005 - LIGHT6 = 0x4006 - LIGHT7 = 0x4007 - LIGHTING = 0x0B50 - LINE_SMOOTH = 0x0B20 - LINE_STIPPLE = 0x0B24 - MAP1_COLOR_4 = 0x0D90 - MAP1_INDEX = 0x0D91 - MAP1_NORMAL = 0x0D92 - MAP1_TEXTURE_COORD_1 = 0x0D93 - MAP1_TEXTURE_COORD_2 = 0x0D94 - MAP1_TEXTURE_COORD_3 = 0x0D95 - MAP1_TEXTURE_COORD_4 = 0x0D96 - MAP1_VERTEX_3 = 0x0D97 - MAP1_VERTEX_4 = 0x0D98 - MAP2_COLOR_4 = 0x0DB0 - MAP2_INDEX = 0x0DB1 - MAP2_NORMAL = 0x0DB2 - MAP2_TEXTURE_COORD_1 = 0x0DB3 - MAP2_TEXTURE_COORD_2 = 0x0DB4 - MAP2_TEXTURE_COORD_3 = 0x0DB5 - MAP2_TEXTURE_COORD_4 = 0x0DB6 - MAP2_VERTEX_3 = 0x0DB7 - MAP2_VERTEX_4 = 0x0DB8 - NORMALIZE = 0x0BA1 - NORMAL_ARRAY = 0x8075 - POINT_SMOOTH = 0x0B10 - POLYGON_OFFSET_FILL = 0x8037 - POLYGON_OFFSET_LINE = 0x2A02 - POLYGON_OFFSET_POINT = 0x2A01 - POLYGON_SMOOTH = 0x0B41 - POLYGON_STIPPLE = 0x0B42 - SCISSOR_TEST = 0x0C11 - STENCIL_TEST = 0x0B90 - TEXTURE_1D = 0x0DE0 - TEXTURE_2D = 0x0DE1 - TEXTURE_COORD_ARRAY = 0x8078 - TEXTURE_GEN_Q = 0x0C63 - TEXTURE_GEN_R = 0x0C62 - TEXTURE_GEN_S = 0x0C60 - TEXTURE_GEN_T = 0x0C61 - VERTEX_ARRAY = 0x8074 - - INVALID_ENUM = 0x0500 - INVALID_FRAMEBUFFER_OPERATION = 0x0506 - INVALID_OPERATION = 0x0502 - INVALID_VALUE = 0x0501 - NO_ERROR = 0 - OUT_OF_MEMORY = 0x0505 - STACK_OVERFLOW = 0x0503 - STACK_UNDERFLOW = 0x0504 - - N2D = 0x0600 - N3D = 0x0601 - N3D_COLOR = 0x0602 - N3D_COLOR_TEXTURE = 0x0603 - N4D_COLOR_TEXTURE = 0x0604 - - BITMAP_TOKEN = 0x0704 - COPY_PIXEL_TOKEN = 0x0706 - DRAW_PIXEL_TOKEN = 0x0705 - LINE_RESET_TOKEN = 0x0707 - LINE_TOKEN = 0x0702 - PASS_THROUGH_TOKEN = 0x0700 - POINT_TOKEN = 0x0701 - POLYGON_TOKEN = 0x0703 - - EXP = 0x0800 - EXP2 = 0x0801 - LINEAR = 0x2601 - - FOG_COLOR = 0x0B66 - FOG_DENSITY = 0x0B62 - FOG_END = 0x0B64 - FOG_INDEX = 0x0B61 - FOG_MODE = 0x0B65 - FOG_START = 0x0B63 - - CCW = 0x0901 - CW = 0x0900 - - COEFF = 0x0A00 - DOMAIN = 0x0A02 - ORDER = 0x0A01 - - PIXEL_MAP_A_TO_A = 0x0C79 - PIXEL_MAP_B_TO_B = 0x0C78 - PIXEL_MAP_G_TO_G = 0x0C77 - PIXEL_MAP_I_TO_A = 0x0C75 - PIXEL_MAP_I_TO_B = 0x0C74 - PIXEL_MAP_I_TO_G = 0x0C73 - PIXEL_MAP_I_TO_I = 0x0C70 - PIXEL_MAP_I_TO_R = 0x0C72 - PIXEL_MAP_R_TO_R = 0x0C76 - PIXEL_MAP_S_TO_S = 0x0C71 - - ACCUM_ALPHA_BITS = 0x0D5B - ACCUM_BLUE_BITS = 0x0D5A - ACCUM_CLEAR_VALUE = 0x0B80 - ACCUM_GREEN_BITS = 0x0D59 - ACCUM_RED_BITS = 0x0D58 - ALIASED_LINE_WIDTH_RANGE = 0x846E - ALIASED_POINT_SIZE_RANGE = 0x846D - ALPHA_BIAS = 0x0D1D - ALPHA_BITS = 0x0D55 - ALPHA_SCALE = 0x0D1C - ALPHA_TEST_FUNC = 0x0BC1 - ALPHA_TEST_REF = 0x0BC2 - ATTRIB_STACK_DEPTH = 0x0BB0 - AUX_BUFFERS = 0x0C00 - BLEND_DST = 0x0BE0 - BLEND_SRC = 0x0BE1 - BLUE_BIAS = 0x0D1B - BLUE_BITS = 0x0D54 - BLUE_SCALE = 0x0D1A - CLIENT_ATTRIB_STACK_DEPTH = 0x0BB1 - COLOR_ARRAY_SIZE = 0x8081 - COLOR_ARRAY_STRIDE = 0x8083 - COLOR_ARRAY_TYPE = 0x8082 - COLOR_CLEAR_VALUE = 0x0C22 - COLOR_MATERIAL_FACE = 0x0B55 - COLOR_MATERIAL_PARAMETER = 0x0B56 - COLOR_WRITEMASK = 0x0C23 - CULL_FACE_MODE = 0x0B45 - CURRENT_COLOR = 0x0B00 - CURRENT_INDEX = 0x0B01 - CURRENT_NORMAL = 0x0B02 - CURRENT_RASTER_COLOR = 0x0B04 - CURRENT_RASTER_DISTANCE = 0x0B09 - CURRENT_RASTER_INDEX = 0x0B05 - CURRENT_RASTER_POSITION = 0x0B07 - CURRENT_RASTER_POSITION_VALID = 0x0B08 - CURRENT_RASTER_TEXTURE_COORDS = 0x0B06 - CURRENT_TEXTURE_COORDS = 0x0B03 - DEPTH_BIAS = 0x0D1F - DEPTH_BITS = 0x0D56 - DEPTH_CLEAR_VALUE = 0x0B73 - DEPTH_FUNC = 0x0B74 - DEPTH_RANGE = 0x0B70 - DEPTH_SCALE = 0x0D1E - DEPTH_WRITEMASK = 0x0B72 - DOUBLEBUFFER = 0x0C32 - DRAW_BUFFER = 0x0C01 - EDGE_FLAG = 0x0B43 - EDGE_FLAG_ARRAY_STRIDE = 0x808C - FEEDBACK_BUFFER_SIZE = 0x0DF1 - FEEDBACK_BUFFER_TYPE = 0x0DF2 - FOG_HINT = 0x0C54 - FRONT_FACE = 0x0B46 - GREEN_BIAS = 0x0D19 - GREEN_BITS = 0x0D53 - GREEN_SCALE = 0x0D18 - INDEX_ARRAY_STRIDE = 0x8086 - INDEX_ARRAY_TYPE = 0x8085 - INDEX_BITS = 0x0D51 - INDEX_CLEAR_VALUE = 0x0C20 - INDEX_MODE = 0x0C30 - INDEX_OFFSET = 0x0D13 - INDEX_SHIFT = 0x0D12 - INDEX_WRITEMASK = 0x0C21 - LIGHT_MODEL_AMBIENT = 0x0B53 - LIGHT_MODEL_COLOR_CONTROL = 0x81F8 - LIGHT_MODEL_LOCAL_VIEWER = 0x0B51 - LIGHT_MODEL_TWO_SIDE = 0x0B52 - LINE_SMOOTH_HINT = 0x0C52 - LINE_STIPPLE_PATTERN = 0x0B25 - LINE_STIPPLE_REPEAT = 0x0B26 - LINE_WIDTH = 0x0B21 - LINE_WIDTH_GRANULARITY = 0x0B23 - LINE_WIDTH_RANGE = 0x0B22 - LIST_BASE = 0x0B32 - LIST_INDEX = 0x0B33 - LIST_MODE = 0x0B30 - LOGIC_OP_MODE = 0x0BF0 - MAP1_GRID_DOMAIN = 0x0DD0 - MAP1_GRID_SEGMENTS = 0x0DD1 - MAP2_GRID_DOMAIN = 0x0DD2 - MAP2_GRID_SEGMENTS = 0x0DD3 - MAP_COLOR = 0x0D10 - MAP_STENCIL = 0x0D11 - MATRIX_MODE = 0x0BA0 - MAX_ATTRIB_STACK_DEPTH = 0x0D35 - MAX_CLIENT_ATTRIB_STACK_DEPTH = 0x0D3B - MAX_CLIP_DISTANCES = 0x0D32 - MAX_CLIP_PLANES = 0x0D32 - MAX_EVAL_ORDER = 0x0D30 - MAX_LIGHTS = 0x0D31 - MAX_LIST_NESTING = 0x0B31 - MAX_MODELVIEW_STACK_DEPTH = 0x0D36 - MAX_NAME_STACK_DEPTH = 0x0D37 - MAX_PIXEL_MAP_TABLE = 0x0D34 - MAX_PROJECTION_STACK_DEPTH = 0x0D38 - MAX_TEXTURE_SIZE = 0x0D33 - MAX_TEXTURE_STACK_DEPTH = 0x0D39 - MAX_VIEWPORT_DIMS = 0x0D3A - MODELVIEW_MATRIX = 0x0BA6 - MODELVIEW_STACK_DEPTH = 0x0BA3 - NAME_STACK_DEPTH = 0x0D70 - NORMAL_ARRAY_STRIDE = 0x807F - NORMAL_ARRAY_TYPE = 0x807E - PACK_ALIGNMENT = 0x0D05 - PACK_LSB_FIRST = 0x0D01 - PACK_ROW_LENGTH = 0x0D02 - PACK_SKIP_PIXELS = 0x0D04 - PACK_SKIP_ROWS = 0x0D03 - PACK_SWAP_BYTES = 0x0D00 - PERSPECTIVE_CORRECTION_HINT = 0x0C50 - PIXEL_MAP_A_TO_A_SIZE = 0x0CB9 - PIXEL_MAP_B_TO_B_SIZE = 0x0CB8 - PIXEL_MAP_G_TO_G_SIZE = 0x0CB7 - PIXEL_MAP_I_TO_A_SIZE = 0x0CB5 - PIXEL_MAP_I_TO_B_SIZE = 0x0CB4 - PIXEL_MAP_I_TO_G_SIZE = 0x0CB3 - PIXEL_MAP_I_TO_I_SIZE = 0x0CB0 - PIXEL_MAP_I_TO_R_SIZE = 0x0CB2 - PIXEL_MAP_R_TO_R_SIZE = 0x0CB6 - PIXEL_MAP_S_TO_S_SIZE = 0x0CB1 - POINT_SIZE = 0x0B11 - POINT_SIZE_GRANULARITY = 0x0B13 - POINT_SIZE_RANGE = 0x0B12 - POINT_SMOOTH_HINT = 0x0C51 - POLYGON_MODE = 0x0B40 - POLYGON_OFFSET_FACTOR = 0x8038 - POLYGON_OFFSET_UNITS = 0x2A00 - POLYGON_SMOOTH_HINT = 0x0C53 - PROJECTION_MATRIX = 0x0BA7 - PROJECTION_STACK_DEPTH = 0x0BA4 - READ_BUFFER = 0x0C02 - RED_BIAS = 0x0D15 - RED_BITS = 0x0D52 - RED_SCALE = 0x0D14 - RENDER_MODE = 0x0C40 - RGBA_MODE = 0x0C31 - SCISSOR_BOX = 0x0C10 - SELECTION_BUFFER_SIZE = 0x0DF4 - SHADE_MODEL = 0x0B54 - SMOOTH_LINE_WIDTH_GRANULARITY = 0x0B23 - SMOOTH_LINE_WIDTH_RANGE = 0x0B22 - SMOOTH_POINT_SIZE_GRANULARITY = 0x0B13 - SMOOTH_POINT_SIZE_RANGE = 0x0B12 - STENCIL_BITS = 0x0D57 - STENCIL_CLEAR_VALUE = 0x0B91 - STENCIL_FAIL = 0x0B94 - STENCIL_FUNC = 0x0B92 - STENCIL_PASS_DEPTH_FAIL = 0x0B95 - STENCIL_PASS_DEPTH_PASS = 0x0B96 - STENCIL_REF = 0x0B97 - STENCIL_VALUE_MASK = 0x0B93 - STENCIL_WRITEMASK = 0x0B98 - STEREO = 0x0C33 - SUBPIXEL_BITS = 0x0D50 - TEXTURE_BINDING_1D = 0x8068 - TEXTURE_BINDING_2D = 0x8069 - TEXTURE_BINDING_3D = 0x806A - TEXTURE_COORD_ARRAY_SIZE = 0x8088 - TEXTURE_COORD_ARRAY_STRIDE = 0x808A - TEXTURE_COORD_ARRAY_TYPE = 0x8089 - TEXTURE_MATRIX = 0x0BA8 - TEXTURE_STACK_DEPTH = 0x0BA5 - UNPACK_ALIGNMENT = 0x0CF5 - UNPACK_LSB_FIRST = 0x0CF1 - UNPACK_ROW_LENGTH = 0x0CF2 - UNPACK_SKIP_PIXELS = 0x0CF4 - UNPACK_SKIP_ROWS = 0x0CF3 - UNPACK_SWAP_BYTES = 0x0CF0 - VERTEX_ARRAY_SIZE = 0x807A - VERTEX_ARRAY_STRIDE = 0x807C - VERTEX_ARRAY_TYPE = 0x807B - VIEWPORT = 0x0BA2 - ZOOM_X = 0x0D16 - ZOOM_Y = 0x0D17 - - COLOR_ARRAY_POINTER = 0x8090 - EDGE_FLAG_ARRAY_POINTER = 0x8093 - FEEDBACK_BUFFER_POINTER = 0x0DF0 - INDEX_ARRAY_POINTER = 0x8091 - NORMAL_ARRAY_POINTER = 0x808F - SELECTION_BUFFER_POINTER = 0x0DF3 - TEXTURE_COORD_ARRAY_POINTER = 0x8092 - VERTEX_ARRAY_POINTER = 0x808E - - TEXTURE_ALPHA_SIZE = 0x805F - TEXTURE_BLUE_SIZE = 0x805E - TEXTURE_BORDER = 0x1005 - TEXTURE_BORDER_COLOR = 0x1004 - TEXTURE_COMPONENTS = 0x1003 - TEXTURE_GREEN_SIZE = 0x805D - TEXTURE_HEIGHT = 0x1001 - TEXTURE_INTENSITY_SIZE = 0x8061 - TEXTURE_INTERNAL_FORMAT = 0x1003 - TEXTURE_LUMINANCE_SIZE = 0x8060 - TEXTURE_MAG_FILTER = 0x2800 - TEXTURE_MIN_FILTER = 0x2801 - TEXTURE_PRIORITY = 0x8066 - TEXTURE_RED_SIZE = 0x805C - TEXTURE_RESIDENT = 0x8067 - TEXTURE_WIDTH = 0x1000 - TEXTURE_WRAP_S = 0x2802 - TEXTURE_WRAP_T = 0x2803 - - DONT_CARE = 0x1100 - FASTEST = 0x1101 - NICEST = 0x1102 - - FRAGMENT_SHADER_DERIVATIVE_HINT = 0x8B8B - GENERATE_MIPMAP_HINT = 0x8192 - PROGRAM_BINARY_RETRIEVABLE_HINT = 0x8257 - TEXTURE_COMPRESSION_HINT = 0x84EF - - C3F_V3F = 0x2A24 - C4F_N3F_V3F = 0x2A26 - C4UB_V2F = 0x2A22 - C4UB_V3F = 0x2A23 - N3F_V3F = 0x2A25 - T2F_C3F_V3F = 0x2A2A - T2F_C4F_N3F_V3F = 0x2A2C - T2F_C4UB_V3F = 0x2A29 - T2F_N3F_V3F = 0x2A2B - T2F_V3F = 0x2A27 - T4F_C4F_N3F_V4F = 0x2A2D - T4F_V4F = 0x2A28 - V2F = 0x2A20 - V3F = 0x2A21 - - MODULATE = 0x2100 - REPLACE = 0x1E01 - - SEPARATE_SPECULAR_COLOR = 0x81FA - SINGLE_COLOR = 0x81F9 - - CONSTANT_ATTENUATION = 0x1207 - LINEAR_ATTENUATION = 0x1208 - POSITION = 0x1203 - QUADRATIC_ATTENUATION = 0x1209 - SPOT_CUTOFF = 0x1206 - SPOT_DIRECTION = 0x1204 - SPOT_EXPONENT = 0x1205 - - COMPILE = 0x1300 - COMPILE_AND_EXECUTE = 0x1301 - - AND = 0x1501 - AND_INVERTED = 0x1504 - AND_REVERSE = 0x1502 - CLEAR = 0x1500 - COPY = 0x1503 - COPY_INVERTED = 0x150C - EQUIV = 0x1509 - INVERT = 0x150A - NAND = 0x150E - NOOP = 0x1505 - NOR = 0x1508 - OR = 0x1507 - OR_INVERTED = 0x150D - OR_REVERSE = 0x150B - SET = 0x150F - XOR = 0x1506 - - MAP_FLUSH_EXPLICIT_BIT = 0x0010 - MAP_INVALIDATE_BUFFER_BIT = 0x0008 - MAP_INVALIDATE_RANGE_BIT = 0x0004 - MAP_READ_BIT = 0x0001 - MAP_UNSYNCHRONIZED_BIT = 0x0020 - MAP_WRITE_BIT = 0x0002 - - COLOR_INDEXES = 0x1603 - SHININESS = 0x1601 - - MODELVIEW = 0x1700 - PROJECTION = 0x1701 - TEXTURE = 0x1702 - - ALL_BARRIER_BITS = 0xFFFFFFFF - ATOMIC_COUNTER_BARRIER_BIT = 0x00001000 - BUFFER_UPDATE_BARRIER_BIT = 0x00000200 - COMMAND_BARRIER_BIT = 0x00000040 - ELEMENT_ARRAY_BARRIER_BIT = 0x00000002 - FRAMEBUFFER_BARRIER_BIT = 0x00000400 - PIXEL_BUFFER_BARRIER_BIT = 0x00000080 - SHADER_IMAGE_ACCESS_BARRIER_BIT = 0x00000020 - SHADER_STORAGE_BARRIER_BIT = 0x00002000 - TEXTURE_FETCH_BARRIER_BIT = 0x00000008 - TEXTURE_UPDATE_BARRIER_BIT = 0x00000100 - TRANSFORM_FEEDBACK_BARRIER_BIT = 0x00000800 - UNIFORM_BARRIER_BIT = 0x00000004 - VERTEX_ATTRIB_ARRAY_BARRIER_BIT = 0x00000001 - - LINE = 0x1B01 - POINT = 0x1B00 - - FILL = 0x1B02 - - COLOR = 0x1800 - DEPTH = 0x1801 - STENCIL = 0x1802 - - ALPHA = 0x1906 - BLUE = 0x1905 - COLOR_INDEX = 0x1900 - DEPTH_COMPONENT = 0x1902 - GREEN = 0x1904 - LUMINANCE = 0x1909 - LUMINANCE_ALPHA = 0x190A - RED = 0x1903 - RGB = 0x1907 - RGBA = 0x1908 - STENCIL_INDEX = 0x1901 - - ALPHA12 = 0x803D - ALPHA16 = 0x803E - ALPHA4 = 0x803B - ALPHA8 = 0x803C - INTENSITY = 0x8049 - INTENSITY12 = 0x804C - INTENSITY16 = 0x804D - INTENSITY4 = 0x804A - INTENSITY8 = 0x804B - LUMINANCE12 = 0x8041 - LUMINANCE12_ALPHA12 = 0x8047 - LUMINANCE12_ALPHA4 = 0x8046 - LUMINANCE16 = 0x8042 - LUMINANCE16_ALPHA16 = 0x8048 - LUMINANCE4 = 0x803F - LUMINANCE4_ALPHA4 = 0x8043 - LUMINANCE6_ALPHA2 = 0x8044 - LUMINANCE8 = 0x8040 - LUMINANCE8_ALPHA8 = 0x8045 - R3_G3_B2 = 0x2A10 - RGB10 = 0x8052 - RGB10_A2 = 0x8059 - RGB12 = 0x8053 - RGB16 = 0x8054 - RGB4 = 0x804F - RGB5 = 0x8050 - RGB5_A1 = 0x8057 - RGB8 = 0x8051 - RGBA12 = 0x805A - RGBA16 = 0x805B - RGBA2 = 0x8055 - RGBA4 = 0x8056 - RGBA8 = 0x8058 - - PACK_IMAGE_HEIGHT = 0x806C - PACK_SKIP_IMAGES = 0x806B - UNPACK_IMAGE_HEIGHT = 0x806E - UNPACK_SKIP_IMAGES = 0x806D - - BITMAP = 0x1A00 - UNSIGNED_BYTE_3_3_2 = 0x8032 - UNSIGNED_INT_10_10_10_2 = 0x8036 - UNSIGNED_INT_8_8_8_8 = 0x8035 - UNSIGNED_SHORT_4_4_4_4 = 0x8033 - UNSIGNED_SHORT_5_5_5_1 = 0x8034 - - POINT_DISTANCE_ATTENUATION = 0x8129 - POINT_FADE_THRESHOLD_SIZE = 0x8128 - POINT_SIZE_MAX = 0x8127 - POINT_SIZE_MIN = 0x8126 - - LINES = 0x0001 - LINES_ADJACENCY = 0x000A - LINE_LOOP = 0x0002 - LINE_STRIP = 0x0003 - LINE_STRIP_ADJACENCY = 0x000B - PATCHES = 0x000E - POINTS = 0x0000 - POLYGON = 0x0009 - QUADS = 0x0007 - QUAD_STRIP = 0x0008 - TRIANGLES = 0x0004 - TRIANGLES_ADJACENCY = 0x000C - TRIANGLE_FAN = 0x0006 - TRIANGLE_STRIP = 0x0005 - TRIANGLE_STRIP_ADJACENCY = 0x000D - - FEEDBACK = 0x1C01 - RENDER = 0x1C00 - SELECT = 0x1C02 - - FLAT = 0x1D00 - SMOOTH = 0x1D01 - - DECR = 0x1E03 - INCR = 0x1E02 - KEEP = 0x1E00 - - EXTENSIONS = 0x1F03 - RENDERER = 0x1F01 - VENDOR = 0x1F00 - VERSION = 0x1F02 - - S = 0x2000 - T = 0x2001 - R = 0x2002 - Q = 0x2003 - - DECAL = 0x2101 - - TEXTURE_ENV_COLOR = 0x2201 - TEXTURE_ENV_MODE = 0x2200 - - TEXTURE_ENV = 0x2300 - - EYE_LINEAR = 0x2400 - OBJECT_LINEAR = 0x2401 - SPHERE_MAP = 0x2402 - - EYE_PLANE = 0x2502 - OBJECT_PLANE = 0x2501 - TEXTURE_GEN_MODE = 0x2500 - - NEAREST = 0x2600 - - LINEAR_MIPMAP_LINEAR = 0x2703 - LINEAR_MIPMAP_NEAREST = 0x2701 - NEAREST_MIPMAP_LINEAR = 0x2702 - NEAREST_MIPMAP_NEAREST = 0x2700 - - GENERATE_MIPMAP = 0x8191 - TEXTURE_WRAP_R = 0x8072 - - PROXY_TEXTURE_1D = 0x8063 - PROXY_TEXTURE_2D = 0x8064 - PROXY_TEXTURE_3D = 0x8070 - TEXTURE_3D = 0x806F - TEXTURE_BASE_LEVEL = 0x813C - TEXTURE_MAX_LEVEL = 0x813D - TEXTURE_MAX_LOD = 0x813B - TEXTURE_MIN_LOD = 0x813A - - CLAMP = 0x2900 - CLAMP_TO_BORDER = 0x812D - CLAMP_TO_EDGE = 0x812F - REPEAT = 0x2901 - - VERTEX_SHADER_BIT = 0x00000001 - FRAGMENT_SHADER_BIT = 0x00000002 - GEOMETRY_SHADER_BIT = 0x00000004 - TESS_CONTROL_SHADER_BIT = 0x00000008 - TESS_EVALUATION_SHADER_BIT = 0x00000010 - COMPUTE_SHADER_BIT = 0x00000020 - ALL_SHADER_BITS = 0xFFFFFFFF - - SYNC_FLUSH_COMMANDS_BIT = 0x00000001 - INVALID_INDEX = 0xFFFFFFFF - TIMEOUT_IGNORED = 0xFFFFFFFFFFFFFFFF - CONSTANT_COLOR = 0x8001 - ONE_MINUS_CONSTANT_COLOR = 0x8002 - CONSTANT_ALPHA = 0x8003 - ONE_MINUS_CONSTANT_ALPHA = 0x8004 - FUNC_ADD = 0x8006 - MIN = 0x8007 - MAX = 0x8008 - BLEND_EQUATION_RGB = 0x8009 - FUNC_SUBTRACT = 0x800A - FUNC_REVERSE_SUBTRACT = 0x800B - RESCALE_NORMAL = 0x803A - TEXTURE_DEPTH = 0x8071 - MAX_3D_TEXTURE_SIZE = 0x8073 - MULTISAMPLE = 0x809D - SAMPLE_ALPHA_TO_COVERAGE = 0x809E - SAMPLE_ALPHA_TO_ONE = 0x809F - SAMPLE_COVERAGE = 0x80A0 - SAMPLE_BUFFERS = 0x80A8 - SAMPLES = 0x80A9 - SAMPLE_COVERAGE_VALUE = 0x80AA - SAMPLE_COVERAGE_INVERT = 0x80AB - BLEND_DST_RGB = 0x80C8 - BLEND_SRC_RGB = 0x80C9 - BLEND_DST_ALPHA = 0x80CA - BLEND_SRC_ALPHA = 0x80CB - BGR = 0x80E0 - BGRA = 0x80E1 - MAX_ELEMENTS_VERTICES = 0x80E8 - MAX_ELEMENTS_INDICES = 0x80E9 - DEPTH_COMPONENT16 = 0x81A5 - DEPTH_COMPONENT24 = 0x81A6 - DEPTH_COMPONENT32 = 0x81A7 - FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING = 0x8210 - FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE = 0x8211 - FRAMEBUFFER_ATTACHMENT_RED_SIZE = 0x8212 - FRAMEBUFFER_ATTACHMENT_GREEN_SIZE = 0x8213 - FRAMEBUFFER_ATTACHMENT_BLUE_SIZE = 0x8214 - FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE = 0x8215 - FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE = 0x8216 - FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE = 0x8217 - FRAMEBUFFER_DEFAULT = 0x8218 - FRAMEBUFFER_UNDEFINED = 0x8219 - DEPTH_STENCIL_ATTACHMENT = 0x821A - MAJOR_VERSION = 0x821B - MINOR_VERSION = 0x821C - NUM_EXTENSIONS = 0x821D - CONTEXT_FLAGS = 0x821E - COMPRESSED_RED = 0x8225 - COMPRESSED_RG = 0x8226 - RG = 0x8227 - RG_INTEGER = 0x8228 - R8 = 0x8229 - R16 = 0x822A - RG8 = 0x822B - RG16 = 0x822C - R16F = 0x822D - R32F = 0x822E - RG16F = 0x822F - RG32F = 0x8230 - R8I = 0x8231 - R8UI = 0x8232 - R16I = 0x8233 - R16UI = 0x8234 - R32I = 0x8235 - R32UI = 0x8236 - RG8I = 0x8237 - RG8UI = 0x8238 - RG16I = 0x8239 - RG16UI = 0x823A - RG32I = 0x823B - RG32UI = 0x823C - DEBUG_OUTPUT_SYNCHRONOUS = 0x8242 - DEBUG_NEXT_LOGGED_MESSAGE_LENGTH = 0x8243 - DEBUG_CALLBACK_FUNCTION = 0x8244 - DEBUG_CALLBACK_USER_PARAM = 0x8245 - DEBUG_SOURCE_API = 0x8246 - DEBUG_SOURCE_WINDOW_SYSTEM = 0x8247 - DEBUG_SOURCE_SHADER_COMPILER = 0x8248 - DEBUG_SOURCE_THIRD_PARTY = 0x8249 - DEBUG_SOURCE_APPLICATION = 0x824A - DEBUG_SOURCE_OTHER = 0x824B - DEBUG_TYPE_ERROR = 0x824C - DEBUG_TYPE_DEPRECATED_BEHAVIOR = 0x824D - DEBUG_TYPE_UNDEFINED_BEHAVIOR = 0x824E - DEBUG_TYPE_PORTABILITY = 0x824F - DEBUG_TYPE_PERFORMANCE = 0x8250 - DEBUG_TYPE_OTHER = 0x8251 - PROGRAM_SEPARABLE = 0x8258 - ACTIVE_PROGRAM = 0x8259 - PROGRAM_PIPELINE_BINDING = 0x825A - MAX_VIEWPORTS = 0x825B - VIEWPORT_SUBPIXEL_BITS = 0x825C - VIEWPORT_BOUNDS_RANGE = 0x825D - LAYER_PROVOKING_VERTEX = 0x825E - VIEWPORT_INDEX_PROVOKING_VERTEX = 0x825F - UNDEFINED_VERTEX = 0x8260 - MAX_COMPUTE_SHARED_MEMORY_SIZE = 0x8262 - MAX_COMPUTE_UNIFORM_COMPONENTS = 0x8263 - MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS = 0x8264 - MAX_COMPUTE_ATOMIC_COUNTERS = 0x8265 - MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS = 0x8266 - COMPUTE_WORK_GROUP_SIZE = 0x8267 - DEBUG_TYPE_MARKER = 0x8268 - DEBUG_TYPE_PUSH_GROUP = 0x8269 - DEBUG_TYPE_POP_GROUP = 0x826A - DEBUG_SEVERITY_NOTIFICATION = 0x826B - MAX_DEBUG_GROUP_STACK_DEPTH = 0x826C - DEBUG_GROUP_STACK_DEPTH = 0x826D - MAX_UNIFORM_LOCATIONS = 0x826E - INTERNALFORMAT_SUPPORTED = 0x826F - INTERNALFORMAT_PREFERRED = 0x8270 - INTERNALFORMAT_RED_SIZE = 0x8271 - INTERNALFORMAT_GREEN_SIZE = 0x8272 - INTERNALFORMAT_BLUE_SIZE = 0x8273 - INTERNALFORMAT_ALPHA_SIZE = 0x8274 - INTERNALFORMAT_DEPTH_SIZE = 0x8275 - INTERNALFORMAT_STENCIL_SIZE = 0x8276 - INTERNALFORMAT_SHARED_SIZE = 0x8277 - INTERNALFORMAT_RED_TYPE = 0x8278 - INTERNALFORMAT_GREEN_TYPE = 0x8279 - INTERNALFORMAT_BLUE_TYPE = 0x827A - INTERNALFORMAT_ALPHA_TYPE = 0x827B - INTERNALFORMAT_DEPTH_TYPE = 0x827C - INTERNALFORMAT_STENCIL_TYPE = 0x827D - MAX_WIDTH = 0x827E - MAX_HEIGHT = 0x827F - MAX_DEPTH = 0x8280 - MAX_LAYERS = 0x8281 - MAX_COMBINED_DIMENSIONS = 0x8282 - COLOR_COMPONENTS = 0x8283 - DEPTH_COMPONENTS = 0x8284 - STENCIL_COMPONENTS = 0x8285 - COLOR_RENDERABLE = 0x8286 - DEPTH_RENDERABLE = 0x8287 - STENCIL_RENDERABLE = 0x8288 - FRAMEBUFFER_RENDERABLE = 0x8289 - FRAMEBUFFER_RENDERABLE_LAYERED = 0x828A - FRAMEBUFFER_BLEND = 0x828B - READ_PIXELS = 0x828C - READ_PIXELS_FORMAT = 0x828D - READ_PIXELS_TYPE = 0x828E - TEXTURE_IMAGE_FORMAT = 0x828F - TEXTURE_IMAGE_TYPE = 0x8290 - GET_TEXTURE_IMAGE_FORMAT = 0x8291 - GET_TEXTURE_IMAGE_TYPE = 0x8292 - MIPMAP = 0x8293 - MANUAL_GENERATE_MIPMAP = 0x8294 - AUTO_GENERATE_MIPMAP = 0x8295 - COLOR_ENCODING = 0x8296 - SRGB_READ = 0x8297 - SRGB_WRITE = 0x8298 - FILTER = 0x829A - VERTEX_TEXTURE = 0x829B - TESS_CONTROL_TEXTURE = 0x829C - TESS_EVALUATION_TEXTURE = 0x829D - GEOMETRY_TEXTURE = 0x829E - FRAGMENT_TEXTURE = 0x829F - COMPUTE_TEXTURE = 0x82A0 - TEXTURE_SHADOW = 0x82A1 - TEXTURE_GATHER = 0x82A2 - TEXTURE_GATHER_SHADOW = 0x82A3 - SHADER_IMAGE_LOAD = 0x82A4 - SHADER_IMAGE_STORE = 0x82A5 - SHADER_IMAGE_ATOMIC = 0x82A6 - IMAGE_TEXEL_SIZE = 0x82A7 - IMAGE_COMPATIBILITY_CLASS = 0x82A8 - IMAGE_PIXEL_FORMAT = 0x82A9 - IMAGE_PIXEL_TYPE = 0x82AA - SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST = 0x82AC - SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST = 0x82AD - SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE = 0x82AE - SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE = 0x82AF - TEXTURE_COMPRESSED_BLOCK_WIDTH = 0x82B1 - TEXTURE_COMPRESSED_BLOCK_HEIGHT = 0x82B2 - TEXTURE_COMPRESSED_BLOCK_SIZE = 0x82B3 - CLEAR_BUFFER = 0x82B4 - TEXTURE_VIEW = 0x82B5 - VIEW_COMPATIBILITY_CLASS = 0x82B6 - FULL_SUPPORT = 0x82B7 - CAVEAT_SUPPORT = 0x82B8 - IMAGE_CLASS_4_X_32 = 0x82B9 - IMAGE_CLASS_2_X_32 = 0x82BA - IMAGE_CLASS_1_X_32 = 0x82BB - IMAGE_CLASS_4_X_16 = 0x82BC - IMAGE_CLASS_2_X_16 = 0x82BD - IMAGE_CLASS_1_X_16 = 0x82BE - IMAGE_CLASS_4_X_8 = 0x82BF - IMAGE_CLASS_2_X_8 = 0x82C0 - IMAGE_CLASS_1_X_8 = 0x82C1 - IMAGE_CLASS_11_11_10 = 0x82C2 - IMAGE_CLASS_10_10_10_2 = 0x82C3 - VIEW_CLASS_128_BITS = 0x82C4 - VIEW_CLASS_96_BITS = 0x82C5 - VIEW_CLASS_64_BITS = 0x82C6 - VIEW_CLASS_48_BITS = 0x82C7 - VIEW_CLASS_32_BITS = 0x82C8 - VIEW_CLASS_24_BITS = 0x82C9 - VIEW_CLASS_16_BITS = 0x82CA - VIEW_CLASS_8_BITS = 0x82CB - VIEW_CLASS_S3TC_DXT1_RGB = 0x82CC - VIEW_CLASS_S3TC_DXT1_RGBA = 0x82CD - VIEW_CLASS_S3TC_DXT3_RGBA = 0x82CE - VIEW_CLASS_S3TC_DXT5_RGBA = 0x82CF - VIEW_CLASS_RGTC1_RED = 0x82D0 - VIEW_CLASS_RGTC2_RG = 0x82D1 - VIEW_CLASS_BPTC_UNORM = 0x82D2 - VIEW_CLASS_BPTC_FLOAT = 0x82D3 - VERTEX_ATTRIB_BINDING = 0x82D4 - VERTEX_ATTRIB_RELATIVE_OFFSET = 0x82D5 - VERTEX_BINDING_DIVISOR = 0x82D6 - VERTEX_BINDING_OFFSET = 0x82D7 - VERTEX_BINDING_STRIDE = 0x82D8 - MAX_VERTEX_ATTRIB_RELATIVE_OFFSET = 0x82D9 - MAX_VERTEX_ATTRIB_BINDINGS = 0x82DA - TEXTURE_VIEW_MIN_LEVEL = 0x82DB - TEXTURE_VIEW_NUM_LEVELS = 0x82DC - TEXTURE_VIEW_MIN_LAYER = 0x82DD - TEXTURE_VIEW_NUM_LAYERS = 0x82DE - TEXTURE_IMMUTABLE_LEVELS = 0x82DF - BUFFER = 0x82E0 - SHADER = 0x82E1 - PROGRAM = 0x82E2 - QUERY = 0x82E3 - PROGRAM_PIPELINE = 0x82E4 - SAMPLER = 0x82E6 - MAX_LABEL_LENGTH = 0x82E8 - NUM_SHADING_LANGUAGE_VERSIONS = 0x82E9 - UNSIGNED_BYTE_2_3_3_REV = 0x8362 - UNSIGNED_SHORT_5_6_5 = 0x8363 - UNSIGNED_SHORT_5_6_5_REV = 0x8364 - UNSIGNED_SHORT_4_4_4_4_REV = 0x8365 - UNSIGNED_SHORT_1_5_5_5_REV = 0x8366 - UNSIGNED_INT_8_8_8_8_REV = 0x8367 - UNSIGNED_INT_2_10_10_10_REV = 0x8368 - MIRRORED_REPEAT = 0x8370 - FOG_COORDINATE_SOURCE = 0x8450 - FOG_COORD_SRC = 0x8450 - FOG_COORDINATE = 0x8451 - FOG_COORD = 0x8451 - FRAGMENT_DEPTH = 0x8452 - CURRENT_FOG_COORDINATE = 0x8453 - CURRENT_FOG_COORD = 0x8453 - FOG_COORDINATE_ARRAY_TYPE = 0x8454 - FOG_COORD_ARRAY_TYPE = 0x8454 - FOG_COORDINATE_ARRAY_STRIDE = 0x8455 - FOG_COORD_ARRAY_STRIDE = 0x8455 - FOG_COORDINATE_ARRAY_POINTER = 0x8456 - FOG_COORD_ARRAY_POINTER = 0x8456 - FOG_COORDINATE_ARRAY = 0x8457 - FOG_COORD_ARRAY = 0x8457 - COLOR_SUM = 0x8458 - CURRENT_SECONDARY_COLOR = 0x8459 - SECONDARY_COLOR_ARRAY_SIZE = 0x845A - SECONDARY_COLOR_ARRAY_TYPE = 0x845B - SECONDARY_COLOR_ARRAY_STRIDE = 0x845C - SECONDARY_COLOR_ARRAY_POINTER = 0x845D - SECONDARY_COLOR_ARRAY = 0x845E - CURRENT_RASTER_SECONDARY_COLOR = 0x845F - TEXTURE0 = 0x84C0 - TEXTURE1 = 0x84C1 - TEXTURE2 = 0x84C2 - TEXTURE3 = 0x84C3 - TEXTURE4 = 0x84C4 - TEXTURE5 = 0x84C5 - TEXTURE6 = 0x84C6 - TEXTURE7 = 0x84C7 - TEXTURE8 = 0x84C8 - TEXTURE9 = 0x84C9 - TEXTURE10 = 0x84CA - TEXTURE11 = 0x84CB - TEXTURE12 = 0x84CC - TEXTURE13 = 0x84CD - TEXTURE14 = 0x84CE - TEXTURE15 = 0x84CF - TEXTURE16 = 0x84D0 - TEXTURE17 = 0x84D1 - TEXTURE18 = 0x84D2 - TEXTURE19 = 0x84D3 - TEXTURE20 = 0x84D4 - TEXTURE21 = 0x84D5 - TEXTURE22 = 0x84D6 - TEXTURE23 = 0x84D7 - TEXTURE24 = 0x84D8 - TEXTURE25 = 0x84D9 - TEXTURE26 = 0x84DA - TEXTURE27 = 0x84DB - TEXTURE28 = 0x84DC - TEXTURE29 = 0x84DD - TEXTURE30 = 0x84DE - TEXTURE31 = 0x84DF - ACTIVE_TEXTURE = 0x84E0 - CLIENT_ACTIVE_TEXTURE = 0x84E1 - MAX_TEXTURE_UNITS = 0x84E2 - TRANSPOSE_MODELVIEW_MATRIX = 0x84E3 - TRANSPOSE_PROJECTION_MATRIX = 0x84E4 - TRANSPOSE_TEXTURE_MATRIX = 0x84E5 - TRANSPOSE_COLOR_MATRIX = 0x84E6 - SUBTRACT = 0x84E7 - MAX_RENDERBUFFER_SIZE = 0x84E8 - COMPRESSED_ALPHA = 0x84E9 - COMPRESSED_LUMINANCE = 0x84EA - COMPRESSED_LUMINANCE_ALPHA = 0x84EB - COMPRESSED_INTENSITY = 0x84EC - COMPRESSED_RGB = 0x84ED - COMPRESSED_RGBA = 0x84EE - UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER = 0x84F0 - UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER = 0x84F1 - TEXTURE_RECTANGLE = 0x84F5 - TEXTURE_BINDING_RECTANGLE = 0x84F6 - PROXY_TEXTURE_RECTANGLE = 0x84F7 - MAX_RECTANGLE_TEXTURE_SIZE = 0x84F8 - DEPTH_STENCIL = 0x84F9 - UNSIGNED_INT_24_8 = 0x84FA - MAX_TEXTURE_LOD_BIAS = 0x84FD - TEXTURE_FILTER_CONTROL = 0x8500 - TEXTURE_LOD_BIAS = 0x8501 - INCR_WRAP = 0x8507 - DECR_WRAP = 0x8508 - NORMAL_MAP = 0x8511 - REFLECTION_MAP = 0x8512 - TEXTURE_CUBE_MAP = 0x8513 - TEXTURE_BINDING_CUBE_MAP = 0x8514 - TEXTURE_CUBE_MAP_POSITIVE_X = 0x8515 - TEXTURE_CUBE_MAP_NEGATIVE_X = 0x8516 - TEXTURE_CUBE_MAP_POSITIVE_Y = 0x8517 - TEXTURE_CUBE_MAP_NEGATIVE_Y = 0x8518 - TEXTURE_CUBE_MAP_POSITIVE_Z = 0x8519 - TEXTURE_CUBE_MAP_NEGATIVE_Z = 0x851A - PROXY_TEXTURE_CUBE_MAP = 0x851B - MAX_CUBE_MAP_TEXTURE_SIZE = 0x851C - COMBINE = 0x8570 - COMBINE_RGB = 0x8571 - COMBINE_ALPHA = 0x8572 - RGB_SCALE = 0x8573 - ADD_SIGNED = 0x8574 - INTERPOLATE = 0x8575 - CONSTANT = 0x8576 - PRIMARY_COLOR = 0x8577 - PREVIOUS = 0x8578 - SOURCE0_RGB = 0x8580 - SRC0_RGB = 0x8580 - SOURCE1_RGB = 0x8581 - SRC1_RGB = 0x8581 - SOURCE2_RGB = 0x8582 - SRC2_RGB = 0x8582 - SOURCE0_ALPHA = 0x8588 - SRC0_ALPHA = 0x8588 - SOURCE1_ALPHA = 0x8589 - SRC1_ALPHA = 0x8589 - SOURCE2_ALPHA = 0x858A - SRC2_ALPHA = 0x858A - OPERAND0_RGB = 0x8590 - OPERAND1_RGB = 0x8591 - OPERAND2_RGB = 0x8592 - OPERAND0_ALPHA = 0x8598 - OPERAND1_ALPHA = 0x8599 - OPERAND2_ALPHA = 0x859A - VERTEX_ARRAY_BINDING = 0x85B5 - VERTEX_ATTRIB_ARRAY_ENABLED = 0x8622 - VERTEX_ATTRIB_ARRAY_SIZE = 0x8623 - VERTEX_ATTRIB_ARRAY_STRIDE = 0x8624 - VERTEX_ATTRIB_ARRAY_TYPE = 0x8625 - CURRENT_VERTEX_ATTRIB = 0x8626 - VERTEX_PROGRAM_POINT_SIZE = 0x8642 - PROGRAM_POINT_SIZE = 0x8642 - VERTEX_PROGRAM_TWO_SIDE = 0x8643 - VERTEX_ATTRIB_ARRAY_POINTER = 0x8645 - DEPTH_CLAMP = 0x864F - TEXTURE_COMPRESSED_IMAGE_SIZE = 0x86A0 - TEXTURE_COMPRESSED = 0x86A1 - NUM_COMPRESSED_TEXTURE_FORMATS = 0x86A2 - COMPRESSED_TEXTURE_FORMATS = 0x86A3 - DOT3_RGB = 0x86AE - DOT3_RGBA = 0x86AF - PROGRAM_BINARY_LENGTH = 0x8741 - VERTEX_ATTRIB_ARRAY_LONG = 0x874E - BUFFER_SIZE = 0x8764 - BUFFER_USAGE = 0x8765 - NUM_PROGRAM_BINARY_FORMATS = 0x87FE - PROGRAM_BINARY_FORMATS = 0x87FF - STENCIL_BACK_FUNC = 0x8800 - STENCIL_BACK_FAIL = 0x8801 - STENCIL_BACK_PASS_DEPTH_FAIL = 0x8802 - STENCIL_BACK_PASS_DEPTH_PASS = 0x8803 - RGBA32F = 0x8814 - RGB32F = 0x8815 - RGBA16F = 0x881A - RGB16F = 0x881B - MAX_DRAW_BUFFERS = 0x8824 - DRAW_BUFFER0 = 0x8825 - DRAW_BUFFER1 = 0x8826 - DRAW_BUFFER2 = 0x8827 - DRAW_BUFFER3 = 0x8828 - DRAW_BUFFER4 = 0x8829 - DRAW_BUFFER5 = 0x882A - DRAW_BUFFER6 = 0x882B - DRAW_BUFFER7 = 0x882C - DRAW_BUFFER8 = 0x882D - DRAW_BUFFER9 = 0x882E - DRAW_BUFFER10 = 0x882F - DRAW_BUFFER11 = 0x8830 - DRAW_BUFFER12 = 0x8831 - DRAW_BUFFER13 = 0x8832 - DRAW_BUFFER14 = 0x8833 - DRAW_BUFFER15 = 0x8834 - BLEND_EQUATION_ALPHA = 0x883D - TEXTURE_DEPTH_SIZE = 0x884A - DEPTH_TEXTURE_MODE = 0x884B - TEXTURE_COMPARE_MODE = 0x884C - TEXTURE_COMPARE_FUNC = 0x884D - COMPARE_R_TO_TEXTURE = 0x884E - COMPARE_REF_TO_TEXTURE = 0x884E - TEXTURE_CUBE_MAP_SEAMLESS = 0x884F - POINT_SPRITE = 0x8861 - COORD_REPLACE = 0x8862 - QUERY_COUNTER_BITS = 0x8864 - CURRENT_QUERY = 0x8865 - QUERY_RESULT = 0x8866 - QUERY_RESULT_AVAILABLE = 0x8867 - MAX_VERTEX_ATTRIBS = 0x8869 - VERTEX_ATTRIB_ARRAY_NORMALIZED = 0x886A - MAX_TESS_CONTROL_INPUT_COMPONENTS = 0x886C - MAX_TESS_EVALUATION_INPUT_COMPONENTS = 0x886D - MAX_TEXTURE_COORDS = 0x8871 - MAX_TEXTURE_IMAGE_UNITS = 0x8872 - GEOMETRY_SHADER_INVOCATIONS = 0x887F - ARRAY_BUFFER = 0x8892 - ELEMENT_ARRAY_BUFFER = 0x8893 - ARRAY_BUFFER_BINDING = 0x8894 - ELEMENT_ARRAY_BUFFER_BINDING = 0x8895 - VERTEX_ARRAY_BUFFER_BINDING = 0x8896 - NORMAL_ARRAY_BUFFER_BINDING = 0x8897 - COLOR_ARRAY_BUFFER_BINDING = 0x8898 - INDEX_ARRAY_BUFFER_BINDING = 0x8899 - TEXTURE_COORD_ARRAY_BUFFER_BINDING = 0x889A - EDGE_FLAG_ARRAY_BUFFER_BINDING = 0x889B - SECONDARY_COLOR_ARRAY_BUFFER_BINDING = 0x889C - FOG_COORDINATE_ARRAY_BUFFER_BINDING = 0x889D - FOG_COORD_ARRAY_BUFFER_BINDING = 0x889D - WEIGHT_ARRAY_BUFFER_BINDING = 0x889E - VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = 0x889F - READ_ONLY = 0x88B8 - WRITE_ONLY = 0x88B9 - READ_WRITE = 0x88BA - BUFFER_ACCESS = 0x88BB - BUFFER_MAPPED = 0x88BC - BUFFER_MAP_POINTER = 0x88BD - TIME_ELAPSED = 0x88BF - STREAM_DRAW = 0x88E0 - STREAM_READ = 0x88E1 - STREAM_COPY = 0x88E2 - STATIC_DRAW = 0x88E4 - STATIC_READ = 0x88E5 - STATIC_COPY = 0x88E6 - DYNAMIC_DRAW = 0x88E8 - DYNAMIC_READ = 0x88E9 - DYNAMIC_COPY = 0x88EA - PIXEL_PACK_BUFFER = 0x88EB - PIXEL_UNPACK_BUFFER = 0x88EC - PIXEL_PACK_BUFFER_BINDING = 0x88ED - PIXEL_UNPACK_BUFFER_BINDING = 0x88EF - DEPTH24_STENCIL8 = 0x88F0 - TEXTURE_STENCIL_SIZE = 0x88F1 - SRC1_COLOR = 0x88F9 - ONE_MINUS_SRC1_COLOR = 0x88FA - ONE_MINUS_SRC1_ALPHA = 0x88FB - MAX_DUAL_SOURCE_DRAW_BUFFERS = 0x88FC - VERTEX_ATTRIB_ARRAY_INTEGER = 0x88FD - VERTEX_ATTRIB_ARRAY_DIVISOR = 0x88FE - MAX_ARRAY_TEXTURE_LAYERS = 0x88FF - MIN_PROGRAM_TEXEL_OFFSET = 0x8904 - MAX_PROGRAM_TEXEL_OFFSET = 0x8905 - SAMPLES_PASSED = 0x8914 - GEOMETRY_VERTICES_OUT = 0x8916 - GEOMETRY_INPUT_TYPE = 0x8917 - GEOMETRY_OUTPUT_TYPE = 0x8918 - SAMPLER_BINDING = 0x8919 - CLAMP_VERTEX_COLOR = 0x891A - CLAMP_FRAGMENT_COLOR = 0x891B - CLAMP_READ_COLOR = 0x891C - FIXED_ONLY = 0x891D - UNIFORM_BUFFER = 0x8A11 - UNIFORM_BUFFER_BINDING = 0x8A28 - UNIFORM_BUFFER_START = 0x8A29 - UNIFORM_BUFFER_SIZE = 0x8A2A - MAX_VERTEX_UNIFORM_BLOCKS = 0x8A2B - MAX_GEOMETRY_UNIFORM_BLOCKS = 0x8A2C - MAX_FRAGMENT_UNIFORM_BLOCKS = 0x8A2D - MAX_COMBINED_UNIFORM_BLOCKS = 0x8A2E - MAX_UNIFORM_BUFFER_BINDINGS = 0x8A2F - MAX_UNIFORM_BLOCK_SIZE = 0x8A30 - MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS = 0x8A31 - MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS = 0x8A32 - MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS = 0x8A33 - UNIFORM_BUFFER_OFFSET_ALIGNMENT = 0x8A34 - ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH = 0x8A35 - ACTIVE_UNIFORM_BLOCKS = 0x8A36 - UNIFORM_TYPE = 0x8A37 - UNIFORM_SIZE = 0x8A38 - UNIFORM_NAME_LENGTH = 0x8A39 - UNIFORM_BLOCK_INDEX = 0x8A3A - UNIFORM_OFFSET = 0x8A3B - UNIFORM_ARRAY_STRIDE = 0x8A3C - UNIFORM_MATRIX_STRIDE = 0x8A3D - UNIFORM_IS_ROW_MAJOR = 0x8A3E - UNIFORM_BLOCK_BINDING = 0x8A3F - UNIFORM_BLOCK_DATA_SIZE = 0x8A40 - UNIFORM_BLOCK_NAME_LENGTH = 0x8A41 - UNIFORM_BLOCK_ACTIVE_UNIFORMS = 0x8A42 - UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES = 0x8A43 - UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER = 0x8A44 - UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER = 0x8A45 - UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER = 0x8A46 - FRAGMENT_SHADER = 0x8B30 - VERTEX_SHADER = 0x8B31 - MAX_FRAGMENT_UNIFORM_COMPONENTS = 0x8B49 - MAX_VERTEX_UNIFORM_COMPONENTS = 0x8B4A - MAX_VARYING_FLOATS = 0x8B4B - MAX_VARYING_COMPONENTS = 0x8B4B - MAX_VERTEX_TEXTURE_IMAGE_UNITS = 0x8B4C - MAX_COMBINED_TEXTURE_IMAGE_UNITS = 0x8B4D - SHADER_TYPE = 0x8B4F - FLOAT_VEC2 = 0x8B50 - FLOAT_VEC3 = 0x8B51 - FLOAT_VEC4 = 0x8B52 - INT_VEC2 = 0x8B53 - INT_VEC3 = 0x8B54 - INT_VEC4 = 0x8B55 - BOOL = 0x8B56 - BOOL_VEC2 = 0x8B57 - BOOL_VEC3 = 0x8B58 - BOOL_VEC4 = 0x8B59 - FLOAT_MAT2 = 0x8B5A - FLOAT_MAT3 = 0x8B5B - FLOAT_MAT4 = 0x8B5C - SAMPLER_1D = 0x8B5D - SAMPLER_2D = 0x8B5E - SAMPLER_3D = 0x8B5F - SAMPLER_CUBE = 0x8B60 - SAMPLER_1D_SHADOW = 0x8B61 - SAMPLER_2D_SHADOW = 0x8B62 - SAMPLER_2D_RECT = 0x8B63 - SAMPLER_2D_RECT_SHADOW = 0x8B64 - FLOAT_MAT2x3 = 0x8B65 - FLOAT_MAT2x4 = 0x8B66 - FLOAT_MAT3x2 = 0x8B67 - FLOAT_MAT3x4 = 0x8B68 - FLOAT_MAT4x2 = 0x8B69 - FLOAT_MAT4x3 = 0x8B6A - DELETE_STATUS = 0x8B80 - COMPILE_STATUS = 0x8B81 - LINK_STATUS = 0x8B82 - VALIDATE_STATUS = 0x8B83 - INFO_LOG_LENGTH = 0x8B84 - ATTACHED_SHADERS = 0x8B85 - ACTIVE_UNIFORMS = 0x8B86 - ACTIVE_UNIFORM_MAX_LENGTH = 0x8B87 - SHADER_SOURCE_LENGTH = 0x8B88 - ACTIVE_ATTRIBUTES = 0x8B89 - ACTIVE_ATTRIBUTE_MAX_LENGTH = 0x8B8A - SHADING_LANGUAGE_VERSION = 0x8B8C - CURRENT_PROGRAM = 0x8B8D - IMPLEMENTATION_COLOR_READ_TYPE = 0x8B9A - IMPLEMENTATION_COLOR_READ_FORMAT = 0x8B9B - TEXTURE_RED_TYPE = 0x8C10 - TEXTURE_GREEN_TYPE = 0x8C11 - TEXTURE_BLUE_TYPE = 0x8C12 - TEXTURE_ALPHA_TYPE = 0x8C13 - TEXTURE_DEPTH_TYPE = 0x8C16 - UNSIGNED_NORMALIZED = 0x8C17 - TEXTURE_1D_ARRAY = 0x8C18 - PROXY_TEXTURE_1D_ARRAY = 0x8C19 - TEXTURE_2D_ARRAY = 0x8C1A - PROXY_TEXTURE_2D_ARRAY = 0x8C1B - TEXTURE_BINDING_1D_ARRAY = 0x8C1C - TEXTURE_BINDING_2D_ARRAY = 0x8C1D - MAX_GEOMETRY_TEXTURE_IMAGE_UNITS = 0x8C29 - TEXTURE_BUFFER = 0x8C2A - MAX_TEXTURE_BUFFER_SIZE = 0x8C2B - TEXTURE_BINDING_BUFFER = 0x8C2C - TEXTURE_BUFFER_DATA_STORE_BINDING = 0x8C2D - ANY_SAMPLES_PASSED = 0x8C2F - SAMPLE_SHADING = 0x8C36 - MIN_SAMPLE_SHADING_VALUE = 0x8C37 - R11F_G11F_B10F = 0x8C3A - UNSIGNED_INT_10F_11F_11F_REV = 0x8C3B - RGB9_E5 = 0x8C3D - UNSIGNED_INT_5_9_9_9_REV = 0x8C3E - TEXTURE_SHARED_SIZE = 0x8C3F - SRGB = 0x8C40 - SRGB8 = 0x8C41 - SRGB_ALPHA = 0x8C42 - SRGB8_ALPHA8 = 0x8C43 - SLUMINANCE_ALPHA = 0x8C44 - SLUMINANCE8_ALPHA8 = 0x8C45 - SLUMINANCE = 0x8C46 - SLUMINANCE8 = 0x8C47 - COMPRESSED_SRGB = 0x8C48 - COMPRESSED_SRGB_ALPHA = 0x8C49 - COMPRESSED_SLUMINANCE = 0x8C4A - COMPRESSED_SLUMINANCE_ALPHA = 0x8C4B - TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH = 0x8C76 - TRANSFORM_FEEDBACK_BUFFER_MODE = 0x8C7F - MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS = 0x8C80 - TRANSFORM_FEEDBACK_VARYINGS = 0x8C83 - TRANSFORM_FEEDBACK_BUFFER_START = 0x8C84 - TRANSFORM_FEEDBACK_BUFFER_SIZE = 0x8C85 - PRIMITIVES_GENERATED = 0x8C87 - TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN = 0x8C88 - RASTERIZER_DISCARD = 0x8C89 - MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS = 0x8C8A - MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS = 0x8C8B - INTERLEAVED_ATTRIBS = 0x8C8C - SEPARATE_ATTRIBS = 0x8C8D - TRANSFORM_FEEDBACK_BUFFER = 0x8C8E - TRANSFORM_FEEDBACK_BUFFER_BINDING = 0x8C8F - POINT_SPRITE_COORD_ORIGIN = 0x8CA0 - LOWER_LEFT = 0x8CA1 - UPPER_LEFT = 0x8CA2 - STENCIL_BACK_REF = 0x8CA3 - STENCIL_BACK_VALUE_MASK = 0x8CA4 - STENCIL_BACK_WRITEMASK = 0x8CA5 - DRAW_FRAMEBUFFER_BINDING = 0x8CA6 - FRAMEBUFFER_BINDING = 0x8CA6 - RENDERBUFFER_BINDING = 0x8CA7 - READ_FRAMEBUFFER = 0x8CA8 - DRAW_FRAMEBUFFER = 0x8CA9 - READ_FRAMEBUFFER_BINDING = 0x8CAA - RENDERBUFFER_SAMPLES = 0x8CAB - DEPTH_COMPONENT32F = 0x8CAC - DEPTH32F_STENCIL8 = 0x8CAD - FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE = 0x8CD0 - FRAMEBUFFER_ATTACHMENT_OBJECT_NAME = 0x8CD1 - FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL = 0x8CD2 - FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE = 0x8CD3 - FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER = 0x8CD4 - FRAMEBUFFER_COMPLETE = 0x8CD5 - FRAMEBUFFER_INCOMPLETE_ATTACHMENT = 0x8CD6 - FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = 0x8CD7 - FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER = 0x8CDB - FRAMEBUFFER_INCOMPLETE_READ_BUFFER = 0x8CDC - FRAMEBUFFER_UNSUPPORTED = 0x8CDD - MAX_COLOR_ATTACHMENTS = 0x8CDF - COLOR_ATTACHMENT0 = 0x8CE0 - COLOR_ATTACHMENT1 = 0x8CE1 - COLOR_ATTACHMENT2 = 0x8CE2 - COLOR_ATTACHMENT3 = 0x8CE3 - COLOR_ATTACHMENT4 = 0x8CE4 - COLOR_ATTACHMENT5 = 0x8CE5 - COLOR_ATTACHMENT6 = 0x8CE6 - COLOR_ATTACHMENT7 = 0x8CE7 - COLOR_ATTACHMENT8 = 0x8CE8 - COLOR_ATTACHMENT9 = 0x8CE9 - COLOR_ATTACHMENT10 = 0x8CEA - COLOR_ATTACHMENT11 = 0x8CEB - COLOR_ATTACHMENT12 = 0x8CEC - COLOR_ATTACHMENT13 = 0x8CED - COLOR_ATTACHMENT14 = 0x8CEE - COLOR_ATTACHMENT15 = 0x8CEF - DEPTH_ATTACHMENT = 0x8D00 - STENCIL_ATTACHMENT = 0x8D20 - FRAMEBUFFER = 0x8D40 - RENDERBUFFER = 0x8D41 - RENDERBUFFER_WIDTH = 0x8D42 - RENDERBUFFER_HEIGHT = 0x8D43 - RENDERBUFFER_INTERNAL_FORMAT = 0x8D44 - STENCIL_INDEX1 = 0x8D46 - STENCIL_INDEX4 = 0x8D47 - STENCIL_INDEX8 = 0x8D48 - STENCIL_INDEX16 = 0x8D49 - RENDERBUFFER_RED_SIZE = 0x8D50 - RENDERBUFFER_GREEN_SIZE = 0x8D51 - RENDERBUFFER_BLUE_SIZE = 0x8D52 - RENDERBUFFER_ALPHA_SIZE = 0x8D53 - RENDERBUFFER_DEPTH_SIZE = 0x8D54 - RENDERBUFFER_STENCIL_SIZE = 0x8D55 - FRAMEBUFFER_INCOMPLETE_MULTISAMPLE = 0x8D56 - MAX_SAMPLES = 0x8D57 - RGB565 = 0x8D62 - PRIMITIVE_RESTART_FIXED_INDEX = 0x8D69 - ANY_SAMPLES_PASSED_CONSERVATIVE = 0x8D6A - MAX_ELEMENT_INDEX = 0x8D6B - RGBA32UI = 0x8D70 - RGB32UI = 0x8D71 - RGBA16UI = 0x8D76 - RGB16UI = 0x8D77 - RGBA8UI = 0x8D7C - RGB8UI = 0x8D7D - RGBA32I = 0x8D82 - RGB32I = 0x8D83 - RGBA16I = 0x8D88 - RGB16I = 0x8D89 - RGBA8I = 0x8D8E - RGB8I = 0x8D8F - RED_INTEGER = 0x8D94 - GREEN_INTEGER = 0x8D95 - BLUE_INTEGER = 0x8D96 - ALPHA_INTEGER = 0x8D97 - RGB_INTEGER = 0x8D98 - RGBA_INTEGER = 0x8D99 - BGR_INTEGER = 0x8D9A - BGRA_INTEGER = 0x8D9B - INT_2_10_10_10_REV = 0x8D9F - FRAMEBUFFER_ATTACHMENT_LAYERED = 0x8DA7 - FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS = 0x8DA8 - FLOAT_32_UNSIGNED_INT_24_8_REV = 0x8DAD - FRAMEBUFFER_SRGB = 0x8DB9 - COMPRESSED_RED_RGTC1 = 0x8DBB - COMPRESSED_SIGNED_RED_RGTC1 = 0x8DBC - COMPRESSED_RG_RGTC2 = 0x8DBD - COMPRESSED_SIGNED_RG_RGTC2 = 0x8DBE - SAMPLER_1D_ARRAY = 0x8DC0 - SAMPLER_2D_ARRAY = 0x8DC1 - SAMPLER_BUFFER = 0x8DC2 - SAMPLER_1D_ARRAY_SHADOW = 0x8DC3 - SAMPLER_2D_ARRAY_SHADOW = 0x8DC4 - SAMPLER_CUBE_SHADOW = 0x8DC5 - UNSIGNED_INT_VEC2 = 0x8DC6 - UNSIGNED_INT_VEC3 = 0x8DC7 - UNSIGNED_INT_VEC4 = 0x8DC8 - INT_SAMPLER_1D = 0x8DC9 - INT_SAMPLER_2D = 0x8DCA - INT_SAMPLER_3D = 0x8DCB - INT_SAMPLER_CUBE = 0x8DCC - INT_SAMPLER_2D_RECT = 0x8DCD - INT_SAMPLER_1D_ARRAY = 0x8DCE - INT_SAMPLER_2D_ARRAY = 0x8DCF - INT_SAMPLER_BUFFER = 0x8DD0 - UNSIGNED_INT_SAMPLER_1D = 0x8DD1 - UNSIGNED_INT_SAMPLER_2D = 0x8DD2 - UNSIGNED_INT_SAMPLER_3D = 0x8DD3 - UNSIGNED_INT_SAMPLER_CUBE = 0x8DD4 - UNSIGNED_INT_SAMPLER_2D_RECT = 0x8DD5 - UNSIGNED_INT_SAMPLER_1D_ARRAY = 0x8DD6 - UNSIGNED_INT_SAMPLER_2D_ARRAY = 0x8DD7 - UNSIGNED_INT_SAMPLER_BUFFER = 0x8DD8 - GEOMETRY_SHADER = 0x8DD9 - MAX_GEOMETRY_UNIFORM_COMPONENTS = 0x8DDF - MAX_GEOMETRY_OUTPUT_VERTICES = 0x8DE0 - MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS = 0x8DE1 - ACTIVE_SUBROUTINES = 0x8DE5 - ACTIVE_SUBROUTINE_UNIFORMS = 0x8DE6 - MAX_SUBROUTINES = 0x8DE7 - MAX_SUBROUTINE_UNIFORM_LOCATIONS = 0x8DE8 - LOW_FLOAT = 0x8DF0 - MEDIUM_FLOAT = 0x8DF1 - HIGH_FLOAT = 0x8DF2 - LOW_INT = 0x8DF3 - MEDIUM_INT = 0x8DF4 - HIGH_INT = 0x8DF5 - SHADER_BINARY_FORMATS = 0x8DF8 - NUM_SHADER_BINARY_FORMATS = 0x8DF9 - SHADER_COMPILER = 0x8DFA - MAX_VERTEX_UNIFORM_VECTORS = 0x8DFB - MAX_VARYING_VECTORS = 0x8DFC - MAX_FRAGMENT_UNIFORM_VECTORS = 0x8DFD - QUERY_WAIT = 0x8E13 - QUERY_NO_WAIT = 0x8E14 - QUERY_BY_REGION_WAIT = 0x8E15 - QUERY_BY_REGION_NO_WAIT = 0x8E16 - MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS = 0x8E1E - MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS = 0x8E1F - TRANSFORM_FEEDBACK = 0x8E22 - TRANSFORM_FEEDBACK_BUFFER_PAUSED = 0x8E23 - TRANSFORM_FEEDBACK_BUFFER_ACTIVE = 0x8E24 - TRANSFORM_FEEDBACK_BINDING = 0x8E25 - TIMESTAMP = 0x8E28 - TEXTURE_SWIZZLE_R = 0x8E42 - TEXTURE_SWIZZLE_G = 0x8E43 - TEXTURE_SWIZZLE_B = 0x8E44 - TEXTURE_SWIZZLE_A = 0x8E45 - TEXTURE_SWIZZLE_RGBA = 0x8E46 - ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS = 0x8E47 - ACTIVE_SUBROUTINE_MAX_LENGTH = 0x8E48 - ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH = 0x8E49 - NUM_COMPATIBLE_SUBROUTINES = 0x8E4A - COMPATIBLE_SUBROUTINES = 0x8E4B - QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION = 0x8E4C - FIRST_VERTEX_CONVENTION = 0x8E4D - LAST_VERTEX_CONVENTION = 0x8E4E - PROVOKING_VERTEX = 0x8E4F - SAMPLE_POSITION = 0x8E50 - SAMPLE_MASK = 0x8E51 - SAMPLE_MASK_VALUE = 0x8E52 - MAX_SAMPLE_MASK_WORDS = 0x8E59 - MAX_GEOMETRY_SHADER_INVOCATIONS = 0x8E5A - MIN_FRAGMENT_INTERPOLATION_OFFSET = 0x8E5B - MAX_FRAGMENT_INTERPOLATION_OFFSET = 0x8E5C - FRAGMENT_INTERPOLATION_OFFSET_BITS = 0x8E5D - MIN_PROGRAM_TEXTURE_GATHER_OFFSET = 0x8E5E - MAX_PROGRAM_TEXTURE_GATHER_OFFSET = 0x8E5F - MAX_TRANSFORM_FEEDBACK_BUFFERS = 0x8E70 - MAX_VERTEX_STREAMS = 0x8E71 - PATCH_VERTICES = 0x8E72 - PATCH_DEFAULT_INNER_LEVEL = 0x8E73 - PATCH_DEFAULT_OUTER_LEVEL = 0x8E74 - TESS_CONTROL_OUTPUT_VERTICES = 0x8E75 - TESS_GEN_MODE = 0x8E76 - TESS_GEN_SPACING = 0x8E77 - TESS_GEN_VERTEX_ORDER = 0x8E78 - TESS_GEN_POINT_MODE = 0x8E79 - ISOLINES = 0x8E7A - FRACTIONAL_ODD = 0x8E7B - FRACTIONAL_EVEN = 0x8E7C - MAX_PATCH_VERTICES = 0x8E7D - MAX_TESS_GEN_LEVEL = 0x8E7E - MAX_TESS_CONTROL_UNIFORM_COMPONENTS = 0x8E7F - MAX_TESS_EVALUATION_UNIFORM_COMPONENTS = 0x8E80 - MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS = 0x8E81 - MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS = 0x8E82 - MAX_TESS_CONTROL_OUTPUT_COMPONENTS = 0x8E83 - MAX_TESS_PATCH_COMPONENTS = 0x8E84 - MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS = 0x8E85 - MAX_TESS_EVALUATION_OUTPUT_COMPONENTS = 0x8E86 - TESS_EVALUATION_SHADER = 0x8E87 - TESS_CONTROL_SHADER = 0x8E88 - MAX_TESS_CONTROL_UNIFORM_BLOCKS = 0x8E89 - MAX_TESS_EVALUATION_UNIFORM_BLOCKS = 0x8E8A - COMPRESSED_RGBA_BPTC_UNORM = 0x8E8C - COMPRESSED_SRGB_ALPHA_BPTC_UNORM = 0x8E8D - COMPRESSED_RGB_BPTC_SIGNED_FLOAT = 0x8E8E - COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT = 0x8E8F - COPY_READ_BUFFER = 0x8F36 - COPY_WRITE_BUFFER = 0x8F37 - MAX_IMAGE_UNITS = 0x8F38 - MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS = 0x8F39 - MAX_COMBINED_SHADER_OUTPUT_RESOURCES = 0x8F39 - IMAGE_BINDING_NAME = 0x8F3A - IMAGE_BINDING_LEVEL = 0x8F3B - IMAGE_BINDING_LAYERED = 0x8F3C - IMAGE_BINDING_LAYER = 0x8F3D - IMAGE_BINDING_ACCESS = 0x8F3E - DRAW_INDIRECT_BUFFER = 0x8F3F - DRAW_INDIRECT_BUFFER_BINDING = 0x8F43 - DOUBLE_MAT2 = 0x8F46 - DOUBLE_MAT3 = 0x8F47 - DOUBLE_MAT4 = 0x8F48 - DOUBLE_MAT2x3 = 0x8F49 - DOUBLE_MAT2x4 = 0x8F4A - DOUBLE_MAT3x2 = 0x8F4B - DOUBLE_MAT3x4 = 0x8F4C - DOUBLE_MAT4x2 = 0x8F4D - DOUBLE_MAT4x3 = 0x8F4E - VERTEX_BINDING_BUFFER = 0x8F4F - R8_SNORM = 0x8F94 - RG8_SNORM = 0x8F95 - RGB8_SNORM = 0x8F96 - RGBA8_SNORM = 0x8F97 - R16_SNORM = 0x8F98 - RG16_SNORM = 0x8F99 - RGB16_SNORM = 0x8F9A - RGBA16_SNORM = 0x8F9B - SIGNED_NORMALIZED = 0x8F9C - PRIMITIVE_RESTART = 0x8F9D - PRIMITIVE_RESTART_INDEX = 0x8F9E - DOUBLE_VEC2 = 0x8FFC - DOUBLE_VEC3 = 0x8FFD - DOUBLE_VEC4 = 0x8FFE - TEXTURE_CUBE_MAP_ARRAY = 0x9009 - TEXTURE_BINDING_CUBE_MAP_ARRAY = 0x900A - PROXY_TEXTURE_CUBE_MAP_ARRAY = 0x900B - SAMPLER_CUBE_MAP_ARRAY = 0x900C - SAMPLER_CUBE_MAP_ARRAY_SHADOW = 0x900D - INT_SAMPLER_CUBE_MAP_ARRAY = 0x900E - UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY = 0x900F - IMAGE_1D = 0x904C - IMAGE_2D = 0x904D - IMAGE_3D = 0x904E - IMAGE_2D_RECT = 0x904F - IMAGE_CUBE = 0x9050 - IMAGE_BUFFER = 0x9051 - IMAGE_1D_ARRAY = 0x9052 - IMAGE_2D_ARRAY = 0x9053 - IMAGE_CUBE_MAP_ARRAY = 0x9054 - IMAGE_2D_MULTISAMPLE = 0x9055 - IMAGE_2D_MULTISAMPLE_ARRAY = 0x9056 - INT_IMAGE_1D = 0x9057 - INT_IMAGE_2D = 0x9058 - INT_IMAGE_3D = 0x9059 - INT_IMAGE_2D_RECT = 0x905A - INT_IMAGE_CUBE = 0x905B - INT_IMAGE_BUFFER = 0x905C - INT_IMAGE_1D_ARRAY = 0x905D - INT_IMAGE_2D_ARRAY = 0x905E - INT_IMAGE_CUBE_MAP_ARRAY = 0x905F - INT_IMAGE_2D_MULTISAMPLE = 0x9060 - INT_IMAGE_2D_MULTISAMPLE_ARRAY = 0x9061 - UNSIGNED_INT_IMAGE_1D = 0x9062 - UNSIGNED_INT_IMAGE_2D = 0x9063 - UNSIGNED_INT_IMAGE_3D = 0x9064 - UNSIGNED_INT_IMAGE_2D_RECT = 0x9065 - UNSIGNED_INT_IMAGE_CUBE = 0x9066 - UNSIGNED_INT_IMAGE_BUFFER = 0x9067 - UNSIGNED_INT_IMAGE_1D_ARRAY = 0x9068 - UNSIGNED_INT_IMAGE_2D_ARRAY = 0x9069 - UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY = 0x906A - UNSIGNED_INT_IMAGE_2D_MULTISAMPLE = 0x906B - UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY = 0x906C - MAX_IMAGE_SAMPLES = 0x906D - IMAGE_BINDING_FORMAT = 0x906E - RGB10_A2UI = 0x906F - MIN_MAP_BUFFER_ALIGNMENT = 0x90BC - IMAGE_FORMAT_COMPATIBILITY_TYPE = 0x90C7 - IMAGE_FORMAT_COMPATIBILITY_BY_SIZE = 0x90C8 - IMAGE_FORMAT_COMPATIBILITY_BY_CLASS = 0x90C9 - MAX_VERTEX_IMAGE_UNIFORMS = 0x90CA - MAX_TESS_CONTROL_IMAGE_UNIFORMS = 0x90CB - MAX_TESS_EVALUATION_IMAGE_UNIFORMS = 0x90CC - MAX_GEOMETRY_IMAGE_UNIFORMS = 0x90CD - MAX_FRAGMENT_IMAGE_UNIFORMS = 0x90CE - MAX_COMBINED_IMAGE_UNIFORMS = 0x90CF - SHADER_STORAGE_BUFFER = 0x90D2 - SHADER_STORAGE_BUFFER_BINDING = 0x90D3 - SHADER_STORAGE_BUFFER_START = 0x90D4 - SHADER_STORAGE_BUFFER_SIZE = 0x90D5 - MAX_VERTEX_SHADER_STORAGE_BLOCKS = 0x90D6 - MAX_GEOMETRY_SHADER_STORAGE_BLOCKS = 0x90D7 - MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS = 0x90D8 - MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS = 0x90D9 - MAX_FRAGMENT_SHADER_STORAGE_BLOCKS = 0x90DA - MAX_COMPUTE_SHADER_STORAGE_BLOCKS = 0x90DB - MAX_COMBINED_SHADER_STORAGE_BLOCKS = 0x90DC - MAX_SHADER_STORAGE_BUFFER_BINDINGS = 0x90DD - MAX_SHADER_STORAGE_BLOCK_SIZE = 0x90DE - SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT = 0x90DF - DEPTH_STENCIL_TEXTURE_MODE = 0x90EA - MAX_COMPUTE_WORK_GROUP_INVOCATIONS = 0x90EB - UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER = 0x90EC - ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER = 0x90ED - DISPATCH_INDIRECT_BUFFER = 0x90EE - DISPATCH_INDIRECT_BUFFER_BINDING = 0x90EF - TEXTURE_2D_MULTISAMPLE = 0x9100 - PROXY_TEXTURE_2D_MULTISAMPLE = 0x9101 - TEXTURE_2D_MULTISAMPLE_ARRAY = 0x9102 - PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY = 0x9103 - TEXTURE_BINDING_2D_MULTISAMPLE = 0x9104 - TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY = 0x9105 - TEXTURE_SAMPLES = 0x9106 - TEXTURE_FIXED_SAMPLE_LOCATIONS = 0x9107 - SAMPLER_2D_MULTISAMPLE = 0x9108 - INT_SAMPLER_2D_MULTISAMPLE = 0x9109 - UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE = 0x910A - SAMPLER_2D_MULTISAMPLE_ARRAY = 0x910B - INT_SAMPLER_2D_MULTISAMPLE_ARRAY = 0x910C - UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY = 0x910D - MAX_COLOR_TEXTURE_SAMPLES = 0x910E - MAX_DEPTH_TEXTURE_SAMPLES = 0x910F - MAX_INTEGER_SAMPLES = 0x9110 - MAX_SERVER_WAIT_TIMEOUT = 0x9111 - OBJECT_TYPE = 0x9112 - SYNC_CONDITION = 0x9113 - SYNC_STATUS = 0x9114 - SYNC_FLAGS = 0x9115 - SYNC_FENCE = 0x9116 - SYNC_GPU_COMMANDS_COMPLETE = 0x9117 - UNSIGNALED = 0x9118 - SIGNALED = 0x9119 - ALREADY_SIGNALED = 0x911A - TIMEOUT_EXPIRED = 0x911B - CONDITION_SATISFIED = 0x911C - WAIT_FAILED = 0x911D - BUFFER_ACCESS_FLAGS = 0x911F - BUFFER_MAP_LENGTH = 0x9120 - BUFFER_MAP_OFFSET = 0x9121 - MAX_VERTEX_OUTPUT_COMPONENTS = 0x9122 - MAX_GEOMETRY_INPUT_COMPONENTS = 0x9123 - MAX_GEOMETRY_OUTPUT_COMPONENTS = 0x9124 - MAX_FRAGMENT_INPUT_COMPONENTS = 0x9125 - CONTEXT_PROFILE_MASK = 0x9126 - UNPACK_COMPRESSED_BLOCK_WIDTH = 0x9127 - UNPACK_COMPRESSED_BLOCK_HEIGHT = 0x9128 - UNPACK_COMPRESSED_BLOCK_DEPTH = 0x9129 - UNPACK_COMPRESSED_BLOCK_SIZE = 0x912A - PACK_COMPRESSED_BLOCK_WIDTH = 0x912B - PACK_COMPRESSED_BLOCK_HEIGHT = 0x912C - PACK_COMPRESSED_BLOCK_DEPTH = 0x912D - PACK_COMPRESSED_BLOCK_SIZE = 0x912E - TEXTURE_IMMUTABLE_FORMAT = 0x912F - MAX_DEBUG_MESSAGE_LENGTH = 0x9143 - MAX_DEBUG_LOGGED_MESSAGES = 0x9144 - DEBUG_LOGGED_MESSAGES = 0x9145 - DEBUG_SEVERITY_HIGH = 0x9146 - DEBUG_SEVERITY_MEDIUM = 0x9147 - DEBUG_SEVERITY_LOW = 0x9148 - TEXTURE_BUFFER_OFFSET = 0x919D - TEXTURE_BUFFER_SIZE = 0x919E - TEXTURE_BUFFER_OFFSET_ALIGNMENT = 0x919F - COMPUTE_SHADER = 0x91B9 - MAX_COMPUTE_UNIFORM_BLOCKS = 0x91BB - MAX_COMPUTE_TEXTURE_IMAGE_UNITS = 0x91BC - MAX_COMPUTE_IMAGE_UNIFORMS = 0x91BD - MAX_COMPUTE_WORK_GROUP_COUNT = 0x91BE - MAX_COMPUTE_WORK_GROUP_SIZE = 0x91BF - COMPRESSED_R11_EAC = 0x9270 - COMPRESSED_SIGNED_R11_EAC = 0x9271 - COMPRESSED_RG11_EAC = 0x9272 - COMPRESSED_SIGNED_RG11_EAC = 0x9273 - COMPRESSED_RGB8_ETC2 = 0x9274 - COMPRESSED_SRGB8_ETC2 = 0x9275 - COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 = 0x9276 - COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 = 0x9277 - COMPRESSED_RGBA8_ETC2_EAC = 0x9278 - COMPRESSED_SRGB8_ALPHA8_ETC2_EAC = 0x9279 - ATOMIC_COUNTER_BUFFER = 0x92C0 - ATOMIC_COUNTER_BUFFER_BINDING = 0x92C1 - ATOMIC_COUNTER_BUFFER_START = 0x92C2 - ATOMIC_COUNTER_BUFFER_SIZE = 0x92C3 - ATOMIC_COUNTER_BUFFER_DATA_SIZE = 0x92C4 - ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS = 0x92C5 - ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES = 0x92C6 - ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER = 0x92C7 - ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER = 0x92C8 - ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER = 0x92C9 - ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER = 0x92CA - ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER = 0x92CB - MAX_VERTEX_ATOMIC_COUNTER_BUFFERS = 0x92CC - MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS = 0x92CD - MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS = 0x92CE - MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS = 0x92CF - MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS = 0x92D0 - MAX_COMBINED_ATOMIC_COUNTER_BUFFERS = 0x92D1 - MAX_VERTEX_ATOMIC_COUNTERS = 0x92D2 - MAX_TESS_CONTROL_ATOMIC_COUNTERS = 0x92D3 - MAX_TESS_EVALUATION_ATOMIC_COUNTERS = 0x92D4 - MAX_GEOMETRY_ATOMIC_COUNTERS = 0x92D5 - MAX_FRAGMENT_ATOMIC_COUNTERS = 0x92D6 - MAX_COMBINED_ATOMIC_COUNTERS = 0x92D7 - MAX_ATOMIC_COUNTER_BUFFER_SIZE = 0x92D8 - ACTIVE_ATOMIC_COUNTER_BUFFERS = 0x92D9 - UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX = 0x92DA - UNSIGNED_INT_ATOMIC_COUNTER = 0x92DB - MAX_ATOMIC_COUNTER_BUFFER_BINDINGS = 0x92DC - DEBUG_OUTPUT = 0x92E0 - UNIFORM = 0x92E1 - UNIFORM_BLOCK = 0x92E2 - PROGRAM_INPUT = 0x92E3 - PROGRAM_OUTPUT = 0x92E4 - BUFFER_VARIABLE = 0x92E5 - SHADER_STORAGE_BLOCK = 0x92E6 - IS_PER_PATCH = 0x92E7 - VERTEX_SUBROUTINE = 0x92E8 - TESS_CONTROL_SUBROUTINE = 0x92E9 - TESS_EVALUATION_SUBROUTINE = 0x92EA - GEOMETRY_SUBROUTINE = 0x92EB - FRAGMENT_SUBROUTINE = 0x92EC - COMPUTE_SUBROUTINE = 0x92ED - VERTEX_SUBROUTINE_UNIFORM = 0x92EE - TESS_CONTROL_SUBROUTINE_UNIFORM = 0x92EF - TESS_EVALUATION_SUBROUTINE_UNIFORM = 0x92F0 - GEOMETRY_SUBROUTINE_UNIFORM = 0x92F1 - FRAGMENT_SUBROUTINE_UNIFORM = 0x92F2 - COMPUTE_SUBROUTINE_UNIFORM = 0x92F3 - TRANSFORM_FEEDBACK_VARYING = 0x92F4 - ACTIVE_RESOURCES = 0x92F5 - MAX_NAME_LENGTH = 0x92F6 - MAX_NUM_ACTIVE_VARIABLES = 0x92F7 - MAX_NUM_COMPATIBLE_SUBROUTINES = 0x92F8 - NAME_LENGTH = 0x92F9 - TYPE = 0x92FA - ARRAY_SIZE = 0x92FB - OFFSET = 0x92FC - BLOCK_INDEX = 0x92FD - ARRAY_STRIDE = 0x92FE - MATRIX_STRIDE = 0x92FF - IS_ROW_MAJOR = 0x9300 - ATOMIC_COUNTER_BUFFER_INDEX = 0x9301 - BUFFER_BINDING = 0x9302 - BUFFER_DATA_SIZE = 0x9303 - NUM_ACTIVE_VARIABLES = 0x9304 - ACTIVE_VARIABLES = 0x9305 - REFERENCED_BY_VERTEX_SHADER = 0x9306 - REFERENCED_BY_TESS_CONTROL_SHADER = 0x9307 - REFERENCED_BY_TESS_EVALUATION_SHADER = 0x9308 - REFERENCED_BY_GEOMETRY_SHADER = 0x9309 - REFERENCED_BY_FRAGMENT_SHADER = 0x930A - REFERENCED_BY_COMPUTE_SHADER = 0x930B - TOP_LEVEL_ARRAY_SIZE = 0x930C - TOP_LEVEL_ARRAY_STRIDE = 0x930D - LOCATION = 0x930E - LOCATION_INDEX = 0x930F - FRAMEBUFFER_DEFAULT_WIDTH = 0x9310 - FRAMEBUFFER_DEFAULT_HEIGHT = 0x9311 - FRAMEBUFFER_DEFAULT_LAYERS = 0x9312 - FRAMEBUFFER_DEFAULT_SAMPLES = 0x9313 - FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS = 0x9314 - MAX_FRAMEBUFFER_WIDTH = 0x9315 - MAX_FRAMEBUFFER_HEIGHT = 0x9316 - MAX_FRAMEBUFFER_LAYERS = 0x9317 - MAX_FRAMEBUFFER_SAMPLES = 0x9318 - NUM_SAMPLE_COUNTS = 0x9380 -) - -// https://www.opengl.org/sdk/docs/man4/xhtml/glViewport.xml -func (gl *GL) Viewport(x, y, width, height int) { - C.gl4_3core_glViewport(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// DepthRange specifies the mapping of depth values from normalized device -// coordinates to window coordinates. -// -// Parameter nearVal specifies the mapping of the near clipping plane to window -// coordinates (defaults to 0), while farVal specifies the mapping of the far -// clipping plane to window coordinates (defaults to 1). -// -// After clipping and division by w, depth coordinates range from -1 to 1, -// corresponding to the near and far clipping planes. DepthRange specifies a -// linear mapping of the normalized depth coordinates in this range to window -// depth coordinates. Regardless of the actual depth buffer implementation, -// window coordinate depth values are treated as though they range from 0 through 1 -// (like color components). Thus, the values accepted by DepthRange are both -// clamped to this range before they are accepted. -// -// The default setting of (0, 1) maps the near plane to 0 and the far plane to 1. -// With this mapping, the depth buffer range is fully utilized. -// -// It is not necessary that nearVal be less than farVal. Reverse mappings such as -// nearVal 1, and farVal 0 are acceptable. -// -// GL.INVALID_OPERATION is generated if DepthRange is executed between the -// execution of Begin and the corresponding execution of End. -func (gl *GL) DepthRange(nearVal, farVal float64) { - C.gl4_3core_glDepthRange(gl.funcs, C.GLdouble(nearVal), C.GLdouble(farVal)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsEnabled.xml -func (gl *GL) IsEnabled(cap glbase.Enum) bool { - glresult := C.gl4_3core_glIsEnabled(gl.funcs, C.GLenum(cap)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexLevelParameteriv.xml -func (gl *GL) GetTexLevelParameteriv(target glbase.Enum, level int, pname glbase.Enum, params []int32) { - C.gl4_3core_glGetTexLevelParameteriv(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexLevelParameterfv.xml -func (gl *GL) GetTexLevelParameterfv(target glbase.Enum, level int, pname glbase.Enum, params []float32) { - C.gl4_3core_glGetTexLevelParameterfv(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexParameteriv.xml -func (gl *GL) GetTexParameteriv(target, pname glbase.Enum, params []int32) { - C.gl4_3core_glGetTexParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexParameterfv.xml -func (gl *GL) GetTexParameterfv(target, pname glbase.Enum, params []float32) { - C.gl4_3core_glGetTexParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexImage.xml -func (gl *GL) GetTexImage(target glbase.Enum, level int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_3core_glGetTexImage(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetIntegerv.xml -func (gl *GL) GetIntegerv(pname glbase.Enum, params []int32) { - C.gl4_3core_glGetIntegerv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetFloatv.xml -func (gl *GL) GetFloatv(pname glbase.Enum, params []float32) { - C.gl4_3core_glGetFloatv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetError.xml -func (gl *GL) GetError() glbase.Enum { - glresult := C.gl4_3core_glGetError(gl.funcs) - return glbase.Enum(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetDoublev.xml -func (gl *GL) GetDoublev(pname glbase.Enum, params []float64) { - C.gl4_3core_glGetDoublev(gl.funcs, C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetBooleanv.xml -func (gl *GL) GetBooleanv(pname glbase.Enum, params []bool) { - C.gl4_3core_glGetBooleanv(gl.funcs, C.GLenum(pname), (*C.GLboolean)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glReadPixels.xml -func (gl *GL) ReadPixels(x, y, width, height int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_3core_glReadPixels(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glReadBuffer.xml -func (gl *GL) ReadBuffer(mode glbase.Enum) { - C.gl4_3core_glReadBuffer(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPixelStorei.xml -func (gl *GL) PixelStorei(pname glbase.Enum, param int32) { - C.gl4_3core_glPixelStorei(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPixelStoref.xml -func (gl *GL) PixelStoref(pname glbase.Enum, param float32) { - C.gl4_3core_glPixelStoref(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDepthFunc.xml -func (gl *GL) DepthFunc(glfunc glbase.Enum) { - C.gl4_3core_glDepthFunc(gl.funcs, C.GLenum(glfunc)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glStencilOp.xml -func (gl *GL) StencilOp(fail, zfail, zpass glbase.Enum) { - C.gl4_3core_glStencilOp(gl.funcs, C.GLenum(fail), C.GLenum(zfail), C.GLenum(zpass)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glStencilFunc.xml -func (gl *GL) StencilFunc(glfunc glbase.Enum, ref int32, mask uint32) { - C.gl4_3core_glStencilFunc(gl.funcs, C.GLenum(glfunc), C.GLint(ref), C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLogicOp.xml -func (gl *GL) LogicOp(opcode glbase.Enum) { - C.gl4_3core_glLogicOp(gl.funcs, C.GLenum(opcode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendFunc.xml -func (gl *GL) BlendFunc(sfactor, dfactor glbase.Enum) { - C.gl4_3core_glBlendFunc(gl.funcs, C.GLenum(sfactor), C.GLenum(dfactor)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFlush.xml -func (gl *GL) Flush() { - C.gl4_3core_glFlush(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFinish.xml -func (gl *GL) Finish() { - C.gl4_3core_glFinish(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEnable.xml -func (gl *GL) Enable(cap glbase.Enum) { - C.gl4_3core_glEnable(gl.funcs, C.GLenum(cap)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDisable.xml -func (gl *GL) Disable(cap glbase.Enum) { - C.gl4_3core_glDisable(gl.funcs, C.GLenum(cap)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDepthMask.xml -func (gl *GL) DepthMask(flag bool) { - C.gl4_3core_glDepthMask(gl.funcs, *(*C.GLboolean)(unsafe.Pointer(&flag))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorMask.xml -func (gl *GL) ColorMask(red, green, blue, alpha bool) { - C.gl4_3core_glColorMask(gl.funcs, *(*C.GLboolean)(unsafe.Pointer(&red)), *(*C.GLboolean)(unsafe.Pointer(&green)), *(*C.GLboolean)(unsafe.Pointer(&blue)), *(*C.GLboolean)(unsafe.Pointer(&alpha))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glStencilMask.xml -func (gl *GL) StencilMask(mask uint32) { - C.gl4_3core_glStencilMask(gl.funcs, C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearDepth.xml -func (gl *GL) ClearDepth(depth float64) { - C.gl4_3core_glClearDepth(gl.funcs, C.GLdouble(depth)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearStencil.xml -func (gl *GL) ClearStencil(s int32) { - C.gl4_3core_glClearStencil(gl.funcs, C.GLint(s)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearColor.xml -func (gl *GL) ClearColor(red, green, blue, alpha float32) { - C.gl4_3core_glClearColor(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClear.xml -func (gl *GL) Clear(mask glbase.Bitfield) { - C.gl4_3core_glClear(gl.funcs, C.GLbitfield(mask)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawBuffer.xml -func (gl *GL) DrawBuffer(mode glbase.Enum) { - C.gl4_3core_glDrawBuffer(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexImage2D.xml -func (gl *GL) TexImage2D(target glbase.Enum, level int, internalFormat int32, width, height, border int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_3core_glTexImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLint(border), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexImage1D.xml -func (gl *GL) TexImage1D(target glbase.Enum, level int, internalFormat int32, width, border int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_3core_glTexImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(internalFormat), C.GLsizei(width), C.GLint(border), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexParameteriv.xml -func (gl *GL) TexParameteriv(target, pname glbase.Enum, params []int32) { - C.gl4_3core_glTexParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexParameteri.xml -func (gl *GL) TexParameteri(target, pname glbase.Enum, param int32) { - C.gl4_3core_glTexParameteri(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexParameterfv.xml -func (gl *GL) TexParameterfv(target, pname glbase.Enum, params []float32) { - C.gl4_3core_glTexParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexParameterf.xml -func (gl *GL) TexParameterf(target, pname glbase.Enum, param float32) { - C.gl4_3core_glTexParameterf(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glScissor.xml -func (gl *GL) Scissor(x, y, width, height int) { - C.gl4_3core_glScissor(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPolygonMode.xml -func (gl *GL) PolygonMode(face, mode glbase.Enum) { - C.gl4_3core_glPolygonMode(gl.funcs, C.GLenum(face), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPointSize.xml -func (gl *GL) PointSize(size float32) { - C.gl4_3core_glPointSize(gl.funcs, C.GLfloat(size)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glLineWidth.xml -func (gl *GL) LineWidth(width float32) { - C.gl4_3core_glLineWidth(gl.funcs, C.GLfloat(width)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glHint.xml -func (gl *GL) Hint(target, mode glbase.Enum) { - C.gl4_3core_glHint(gl.funcs, C.GLenum(target), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFrontFace.xml -func (gl *GL) FrontFace(mode glbase.Enum) { - C.gl4_3core_glFrontFace(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCullFace.xml -func (gl *GL) CullFace(mode glbase.Enum) { - C.gl4_3core_glCullFace(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIndexubv.xml -func (gl *GL) Indexubv(c []uint8) { - C.gl4_3core_glIndexubv(gl.funcs, (*C.GLubyte)(unsafe.Pointer(&c[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIndexub.xml -func (gl *GL) Indexub(c uint8) { - C.gl4_3core_glIndexub(gl.funcs, C.GLubyte(c)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsTexture.xml -func (gl *GL) IsTexture(texture glbase.Texture) bool { - glresult := C.gl4_3core_glIsTexture(gl.funcs, C.GLuint(texture)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// GenTextures returns n texture names in textures. There is no guarantee -// that the names form a contiguous set of integers; however, it is -// guaranteed that none of the returned names was in use immediately before -// the call to GenTextures. -// -// The generated textures have no dimensionality; they assume the -// dimensionality of the texture target to which they are first bound (see -// BindTexture). -// -// Texture names returned by a call to GenTextures are not returned by -// subsequent calls, unless they are first deleted with DeleteTextures. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// GenTextures is available in GL version 2.0 or greater. -func (gl *GL) GenTextures(n int) []glbase.Texture { - if n == 0 { - return nil - } - textures := make([]glbase.Texture, n) - C.gl4_3core_glGenTextures(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0]))) - return textures -} - -// DeleteTextures deletes the textures objects whose names are stored -// in the textures slice. After a texture is deleted, it has no contents or -// dimensionality, and its name is free for reuse (for example by -// GenTextures). If a texture that is currently bound is deleted, the binding -// reverts to 0 (the default texture). -// -// DeleteTextures silently ignores 0's and names that do not correspond to -// existing textures. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// DeleteTextures is available in GL version 2.0 or greater. -func (gl *GL) DeleteTextures(textures []glbase.Texture) { - n := len(textures) - if n == 0 { - return - } - C.gl4_3core_glDeleteTextures(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindTexture.xml -func (gl *GL) BindTexture(target glbase.Enum, texture glbase.Texture) { - C.gl4_3core_glBindTexture(gl.funcs, C.GLenum(target), C.GLuint(texture)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexSubImage2D.xml -func (gl *GL) TexSubImage2D(target glbase.Enum, level, xoffset, yoffset, width, height int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_3core_glTexSubImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexSubImage1D.xml -func (gl *GL) TexSubImage1D(target glbase.Enum, level, xoffset, width int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_3core_glTexSubImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLsizei(width), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyTexSubImage2D.xml -func (gl *GL) CopyTexSubImage2D(target glbase.Enum, level, xoffset, yoffset, x, y, width, height int) { - C.gl4_3core_glCopyTexSubImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyTexSubImage1D.xml -func (gl *GL) CopyTexSubImage1D(target glbase.Enum, level, xoffset, x, y, width int) { - C.gl4_3core_glCopyTexSubImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(x), C.GLint(y), C.GLsizei(width)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyTexImage2D.xml -func (gl *GL) CopyTexImage2D(target glbase.Enum, level int, internalFormat glbase.Enum, x, y, width, height, border int) { - C.gl4_3core_glCopyTexImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height), C.GLint(border)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyTexImage1D.xml -func (gl *GL) CopyTexImage1D(target glbase.Enum, level int, internalFormat glbase.Enum, x, y, width, border int) { - C.gl4_3core_glCopyTexImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLint(border)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPolygonOffset.xml -func (gl *GL) PolygonOffset(factor, units float32) { - C.gl4_3core_glPolygonOffset(gl.funcs, C.GLfloat(factor), C.GLfloat(units)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawElements.xml -func (gl *GL) DrawElements(mode glbase.Enum, count int, gltype glbase.Enum, indices interface{}) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl4_3core_glDrawElements(gl.funcs, C.GLenum(mode), C.GLsizei(count), C.GLenum(gltype), indices_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawArrays.xml -func (gl *GL) DrawArrays(mode glbase.Enum, first, count int) { - C.gl4_3core_glDrawArrays(gl.funcs, C.GLenum(mode), C.GLint(first), C.GLsizei(count)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyTexSubImage3D.xml -func (gl *GL) CopyTexSubImage3D(target glbase.Enum, level, xoffset, yoffset int, zoffset int32, x, y, width, height int) { - C.gl4_3core_glCopyTexSubImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(zoffset), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexSubImage3D.xml -func (gl *GL) TexSubImage3D(target glbase.Enum, level, xoffset, yoffset int, zoffset int32, width, height int, depth int32, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_3core_glTexSubImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(zoffset), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexImage3D.xml -func (gl *GL) TexImage3D(target glbase.Enum, level int, internalFormat int32, width, height int, depth int32, border int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gl4_3core_glTexImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLint(border), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawRangeElements.xml -func (gl *GL) DrawRangeElements(mode glbase.Enum, start, end uint32, count int, gltype glbase.Enum, indices interface{}) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl4_3core_glDrawRangeElements(gl.funcs, C.GLenum(mode), C.GLuint(start), C.GLuint(end), C.GLsizei(count), C.GLenum(gltype), indices_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendEquation.xml -func (gl *GL) BlendEquation(mode glbase.Enum) { - C.gl4_3core_glBlendEquation(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendColor.xml -func (gl *GL) BlendColor(red, green, blue, alpha float32) { - C.gl4_3core_glBlendColor(gl.funcs, C.GLfloat(red), C.GLfloat(green), C.GLfloat(blue), C.GLfloat(alpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetCompressedTexImage.xml -func (gl *GL) GetCompressedTexImage(target glbase.Enum, level int, img interface{}) { - var img_ptr unsafe.Pointer - var img_v = reflect.ValueOf(img) - if img != nil && img_v.Kind() != reflect.Slice { - panic("parameter img must be a slice") - } - if img != nil { - img_ptr = unsafe.Pointer(img_v.Index(0).Addr().Pointer()) - } - C.gl4_3core_glGetCompressedTexImage(gl.funcs, C.GLenum(target), C.GLint(level), img_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCompressedTexSubImage1D.xml -func (gl *GL) CompressedTexSubImage1D(target glbase.Enum, level, xoffset, width int, format glbase.Enum, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_3core_glCompressedTexSubImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLsizei(width), C.GLenum(format), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCompressedTexSubImage2D.xml -func (gl *GL) CompressedTexSubImage2D(target glbase.Enum, level, xoffset, yoffset, width, height int, format glbase.Enum, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_3core_glCompressedTexSubImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCompressedTexSubImage3D.xml -func (gl *GL) CompressedTexSubImage3D(target glbase.Enum, level, xoffset, yoffset int, zoffset int32, width, height int, depth int32, format glbase.Enum, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_3core_glCompressedTexSubImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(zoffset), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLenum(format), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCompressedTexImage1D.xml -func (gl *GL) CompressedTexImage1D(target glbase.Enum, level int, internalFormat glbase.Enum, width, border, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_3core_glCompressedTexImage1D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLsizei(width), C.GLint(border), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCompressedTexImage2D.xml -func (gl *GL) CompressedTexImage2D(target glbase.Enum, level int, internalFormat glbase.Enum, width, height, border, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_3core_glCompressedTexImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLint(border), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCompressedTexImage3D.xml -func (gl *GL) CompressedTexImage3D(target glbase.Enum, level int, internalFormat glbase.Enum, width, height int, depth int32, border, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_3core_glCompressedTexImage3D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), C.GLint(border), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSampleCoverage.xml -func (gl *GL) SampleCoverage(value float32, invert bool) { - C.gl4_3core_glSampleCoverage(gl.funcs, C.GLfloat(value), *(*C.GLboolean)(unsafe.Pointer(&invert))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glActiveTexture.xml -func (gl *GL) ActiveTexture(texture glbase.Enum) { - C.gl4_3core_glActiveTexture(gl.funcs, C.GLenum(texture)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPointParameteriv.xml -func (gl *GL) PointParameteriv(pname glbase.Enum, params []int32) { - C.gl4_3core_glPointParameteriv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPointParameteri.xml -func (gl *GL) PointParameteri(pname glbase.Enum, param int32) { - C.gl4_3core_glPointParameteri(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPointParameterfv.xml -func (gl *GL) PointParameterfv(pname glbase.Enum, params []float32) { - C.gl4_3core_glPointParameterfv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPointParameterf.xml -func (gl *GL) PointParameterf(pname glbase.Enum, param float32) { - C.gl4_3core_glPointParameterf(gl.funcs, C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiDrawArrays.xml -func (gl *GL) MultiDrawArrays(mode glbase.Enum, first, count []int, drawcount int32) { - C.gl4_3core_glMultiDrawArrays(gl.funcs, C.GLenum(mode), (*C.GLint)(unsafe.Pointer(&first[0])), (*C.GLsizei)(unsafe.Pointer(&count[0])), C.GLsizei(drawcount)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendFuncSeparate.xml -func (gl *GL) BlendFuncSeparate(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha glbase.Enum) { - C.gl4_3core_glBlendFuncSeparate(gl.funcs, C.GLenum(sfactorRGB), C.GLenum(dfactorRGB), C.GLenum(sfactorAlpha), C.GLenum(dfactorAlpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetBufferParameteriv.xml -func (gl *GL) GetBufferParameteriv(target, pname glbase.Enum, params []int32) { - C.gl4_3core_glGetBufferParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUnmapBuffer.xml -func (gl *GL) UnmapBuffer(target glbase.Enum) bool { - glresult := C.gl4_3core_glUnmapBuffer(gl.funcs, C.GLenum(target)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetBufferSubData.xml -func (gl *GL) GetBufferSubData(target glbase.Enum, offset, size int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_3core_glGetBufferSubData(gl.funcs, C.GLenum(target), C.GLintptr(offset), C.GLsizeiptr(size), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBufferSubData.xml -func (gl *GL) BufferSubData(target glbase.Enum, offset, size int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_3core_glBufferSubData(gl.funcs, C.GLenum(target), C.GLintptr(offset), C.GLsizeiptr(size), data_ptr) -} - -// BufferData creates a new data store for the buffer object currently -// bound to target. Any pre-existing data store is deleted. The new data -// store is created with the specified size in bytes and usage. If data is -// not nil, it must be a slice that is used to initialize the data store. -// In that case the size parameter is ignored and the store size will match -// the slice data size. -// -// In its initial state, the new data store is not mapped, it has a NULL -// mapped pointer, and its mapped access is GL.READ_WRITE. -// -// The target constant must be one of GL.ARRAY_BUFFER, GL.COPY_READ_BUFFER, -// GL.COPY_WRITE_BUFFER, GL.ELEMENT_ARRAY_BUFFER, GL.PIXEL_PACK_BUFFER, -// GL.PIXEL_UNPACK_BUFFER, GL.TEXTURE_BUFFER, GL.TRANSFORM_FEEDBACK_BUFFER, -// or GL.UNIFORM_BUFFER. -// -// The usage parameter is a hint to the GL implementation as to how a buffer -// object's data store will be accessed. This enables the GL implementation -// to make more intelligent decisions that may significantly impact buffer -// object performance. It does not, however, constrain the actual usage of -// the data store. usage can be broken down into two parts: first, the -// frequency of access (modification and usage), and second, the nature of -// that access. -// -// A usage frequency of STREAM and nature of DRAW is specified via the -// constant GL.STREAM_DRAW, for example. -// -// The usage frequency of access may be one of: -// -// STREAM -// The data store contents will be modified once and used at most a few times. -// -// STATIC -// The data store contents will be modified once and used many times. -// -// DYNAMIC -// The data store contents will be modified repeatedly and used many times. -// -// The usage nature of access may be one of: -// -// DRAW -// The data store contents are modified by the application, and used as -// the source for GL drawing and image specification commands. -// -// READ -// The data store contents are modified by reading data from the GL, -// and used to return that data when queried by the application. -// -// COPY -// The data store contents are modified by reading data from the GL, -// and used as the source for GL drawing and image specification -// commands. -// -// Clients must align data elements consistent with the requirements of the -// client platform, with an additional base-level requirement that an offset -// within a buffer to a datum comprising N bytes be a multiple of N. -// -// Error GL.INVALID_ENUM is generated if target is not one of the accepted -// buffer targets. GL.INVALID_ENUM is generated if usage is not -// GL.STREAM_DRAW, GL.STREAM_READ, GL.STREAM_COPY, GL.STATIC_DRAW, -// GL.STATIC_READ, GL.STATIC_COPY, GL.DYNAMIC_DRAW, GL.DYNAMIC_READ, or -// GL.DYNAMIC_COPY. GL.INVALID_VALUE is generated if size is negative. -// GL.INVALID_OPERATION is generated if the reserved buffer object name 0 is -// bound to target. GL.OUT_OF_MEMORY is generated if the GL is unable to -// create a data store with the specified size. -func (gl *GL) BufferData(target glbase.Enum, size int, data interface{}, usage glbase.Enum) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - if data != nil { - size = int(data_v.Type().Size()) * data_v.Len() - } - C.gl4_3core_glBufferData(gl.funcs, C.GLenum(target), C.GLsizeiptr(size), data_ptr, C.GLenum(usage)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsBuffer.xml -func (gl *GL) IsBuffer(buffer glbase.Buffer) bool { - glresult := C.gl4_3core_glIsBuffer(gl.funcs, C.GLuint(buffer)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// GenBuffers returns n buffer object names. There is no guarantee that -// the names form a contiguous set of integers; however, it is guaranteed -// that none of the returned names was in use immediately before the call to -// GenBuffers. -// -// Buffer object names returned by a call to GenBuffers are not returned by -// subsequent calls, unless they are first deleted with DeleteBuffers. -// -// No buffer objects are associated with the returned buffer object names -// until they are first bound by calling BindBuffer. -// -// Error GL.INVALID_VALUE is generated if n is negative. GL.INVALID_OPERATION -// is generated if GenBuffers is executed between the execution of Begin -// and the corresponding execution of End. -// -// GenBuffers is available in GL version 1.5 or greater. -func (gl *GL) GenBuffers(n int) []glbase.Buffer { - if n == 0 { - return nil - } - buffers := make([]glbase.Buffer, n) - C.gl4_3core_glGenBuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&buffers[0]))) - return buffers -} - -// DeleteBuffers deletes the buffer objects whose names are stored in the -// buffers slice. -// -// After a buffer object is deleted, it has no contents, and its name is free -// for reuse (for example by GenBuffers). If a buffer object that is -// currently bound is deleted, the binding reverts to 0 (the absence of any -// buffer object, which reverts to client memory usage). -// -// DeleteBuffers silently ignores 0's and names that do not correspond to -// existing buffer objects. -// -// Error GL.INVALID_VALUE is generated if n is negative. GL.INVALID_OPERATION -// is generated if DeleteBuffers is executed between the execution of Begin -// and the corresponding execution of End. -// -// DeleteBuffers is available in GL version 1.5 or greater. -func (gl *GL) DeleteBuffers(buffers []glbase.Buffer) { - n := len(buffers) - if n == 0 { - return - } - C.gl4_3core_glDeleteBuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&buffers[0]))) -} - -// BindBuffer creates or puts in use a named buffer object. -// Calling BindBuffer with target set to GL.ARRAY_BUFFER, -// GL.ELEMENT_ARRAY_BUFFER, GL.PIXEL_PACK_BUFFER or GL.PIXEL_UNPACK_BUFFER -// and buffer set to the name of the new buffer object binds the buffer -// object name to the target. When a buffer object is bound to a target, the -// previous binding for that target is automatically broken. -// -// Buffer object names are unsigned integers. The value zero is reserved, but -// there is no default buffer object for each buffer object target. Instead, -// buffer set to zero effectively unbinds any buffer object previously bound, -// and restores client memory usage for that buffer object target. Buffer -// object names and the corresponding buffer object contents are local to the -// shared display-list space (see XCreateContext) of the current GL rendering -// context; two rendering contexts share buffer object names only if they -// also share display lists. -// -// GenBuffers may be called to generate a set of new buffer object names. -// -// The state of a buffer object immediately after it is first bound is an -// unmapped zero-sized memory buffer with GL.READ_WRITE access and -// GL.STATIC_DRAW usage. -// -// While a non-zero buffer object name is bound, GL operations on the target -// to which it is bound affect the bound buffer object, and queries of the -// target to which it is bound return state from the bound buffer object. -// While buffer object name zero is bound, as in the initial state, attempts -// to modify or query state on the target to which it is bound generates an -// GL.INVALID_OPERATION error. -// -// When vertex array pointer state is changed, for example by a call to -// NormalPointer, the current buffer object binding (GL.ARRAY_BUFFER_BINDING) -// is copied into the corresponding client state for the vertex array type -// being changed, for example GL.NORMAL_ARRAY_BUFFER_BINDING. While a -// non-zero buffer object is bound to the GL.ARRAY_BUFFER target, the vertex -// array pointer parameter that is traditionally interpreted as a pointer to -// client-side memory is instead interpreted as an offset within the buffer -// object measured in basic machine units. -// -// While a non-zero buffer object is bound to the GL.ELEMENT_ARRAY_BUFFER -// target, the indices parameter of DrawElements, DrawRangeElements, or -// MultiDrawElements that is traditionally interpreted as a pointer to -// client-side memory is instead interpreted as an offset within the buffer -// object measured in basic machine units. -// -// While a non-zero buffer object is bound to the GL.PIXEL_PACK_BUFFER -// target, the following commands are affected: GetCompressedTexImage, -// GetConvolutionFilter, GetHistogram, GetMinmax, GetPixelMap, -// GetPolygonStipple, GetSeparableFilter, GetTexImage, and ReadPixels. The -// pointer parameter that is traditionally interpreted as a pointer to -// client-side memory where the pixels are to be packed is instead -// interpreted as an offset within the buffer object measured in basic -// machine units. -// -// While a non-zero buffer object is bound to the GL.PIXEL_UNPACK_BUFFER -// target, the following commands are affected: Bitmap, ColorSubTable, -// ColorTable, CompressedTexImage1D, CompressedTexImage2D, -// CompressedTexImage3D, CompressedTexSubImage1D, CompressedTexSubImage2D, -// CompressedTexSubImage3D, ConvolutionFilter1D, ConvolutionFilter2D, -// DrawPixels, PixelMap, PolygonStipple, SeparableFilter2D, TexImage1D, -// TexImage2D, TexImage3D, TexSubImage1D, TexSubImage2D, and TexSubImage3D. -// The pointer parameter that is traditionally interpreted as a pointer to -// client-side memory from which the pixels are to be unpacked is instead -// interpreted as an offset within the buffer object measured in basic -// machine units. -// -// A buffer object binding created with BindBuffer remains active until a -// different buffer object name is bound to the same target, or until the -// bound buffer object is deleted with DeleteBuffers. -// -// Once created, a named buffer object may be re-bound to any target as often -// as needed. However, the GL implementation may make choices about how to -// optimize the storage of a buffer object based on its initial binding -// target. -// -// Error GL.INVALID_ENUM is generated if target is not one of the allowable -// values. GL.INVALID_OPERATION is generated if BindBuffer is executed -// between the execution of Begin and the corresponding execution of End. -// -// BindBuffer is available in GL version 1.5 or greater. -func (gl *GL) BindBuffer(target glbase.Enum, buffer glbase.Buffer) { - C.gl4_3core_glBindBuffer(gl.funcs, C.GLenum(target), C.GLuint(buffer)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetQueryObjectuiv.xml -func (gl *GL) GetQueryObjectuiv(id uint32, pname glbase.Enum, params []uint32) { - C.gl4_3core_glGetQueryObjectuiv(gl.funcs, C.GLuint(id), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetQueryObjectiv.xml -func (gl *GL) GetQueryObjectiv(id uint32, pname glbase.Enum, params []int32) { - C.gl4_3core_glGetQueryObjectiv(gl.funcs, C.GLuint(id), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetQueryiv.xml -func (gl *GL) GetQueryiv(target, pname glbase.Enum, params []int32) { - C.gl4_3core_glGetQueryiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEndQuery.xml -func (gl *GL) EndQuery(target glbase.Enum) { - C.gl4_3core_glEndQuery(gl.funcs, C.GLenum(target)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBeginQuery.xml -func (gl *GL) BeginQuery(target glbase.Enum, id uint32) { - C.gl4_3core_glBeginQuery(gl.funcs, C.GLenum(target), C.GLuint(id)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsQuery.xml -func (gl *GL) IsQuery(id uint32) bool { - glresult := C.gl4_3core_glIsQuery(gl.funcs, C.GLuint(id)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDeleteQueries.xml -func (gl *GL) DeleteQueries(n int, ids []uint32) { - C.gl4_3core_glDeleteQueries(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&ids[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGenQueries.xml -func (gl *GL) GenQueries(n int, ids []uint32) { - C.gl4_3core_glGenQueries(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&ids[0]))) -} - -// VertexAttribPointer specifies the location and data format of the array -// of generic vertex attributes at index to use when rendering. size -// specifies the number of components per attribute and must be 1, 2, 3, or -// 4. type specifies the data type of each component, and stride specifies -// the byte stride from one attribute to the next, allowing vertices and -// attributes to be packed into a single array or stored in separate arrays. -// normalized indicates whether the values stored in an integer format are -// to be mapped to the range [-1,1] (for signed values) or [0,1] -// (for unsigned values) when they are accessed and converted to floating -// point; otherwise, values will be converted to floats directly without -// normalization. offset is a byte offset into the buffer object's data -// store, which must be bound to the GL.ARRAY_BUFFER target with BindBuffer. -// -// The buffer object binding (GL.ARRAY_BUFFER_BINDING) is saved as -// generic vertex attribute array client-side state -// (GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING) for the provided index. -// -// To enable and disable a generic vertex attribute array, call -// EnableVertexAttribArray and DisableVertexAttribArray with index. If -// enabled, the generic vertex attribute array is used when DrawArrays or -// DrawElements is called. Each generic vertex attribute array is initially -// disabled. -// -// VertexAttribPointer is typically implemented on the client side. -// -// Error GL.INVALID_ENUM is generated if type is not an accepted value. -// GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. GL.INVALID_VALUE is generated if size is not 1, 2, -// 3, or 4. GL.INVALID_VALUE is generated if stride is negative. -func (gl *GL) VertexAttribPointer(index glbase.Attrib, size int, gltype glbase.Enum, normalized bool, stride int, offset uintptr) { - offset_ptr := unsafe.Pointer(offset) - C.gl4_3core_glVertexAttribPointer(gl.funcs, C.GLuint(index), C.GLint(size), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), C.GLsizei(stride), offset_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glValidateProgram.xml -func (gl *GL) ValidateProgram(program glbase.Program) { - C.gl4_3core_glValidateProgram(gl.funcs, C.GLuint(program)) -} - -// UniformMatrix4fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix4fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix4fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(4*4) != 0 { - panic("invalid value length for UniformMatrix4fv") - } - count := len(value) / (4 * 4) - C.gl4_3core_glUniformMatrix4fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix3fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix3fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix3fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(3*3) != 0 { - panic("invalid value length for UniformMatrix3fv") - } - count := len(value) / (3 * 3) - C.gl4_3core_glUniformMatrix3fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix2fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix2fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix2fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(2*2) != 0 { - panic("invalid value length for UniformMatrix2fv") - } - count := len(value) / (2 * 2) - C.gl4_3core_glUniformMatrix2fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform4iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform4iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - if len(value)%4 != 0 { - panic("invalid value length for Uniform4iv") - } - count := len(value) / 4 - C.gl4_3core_glUniform4iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// Uniform3iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform3iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - if len(value)%3 != 0 { - panic("invalid value length for Uniform3iv") - } - count := len(value) / 3 - C.gl4_3core_glUniform3iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// Uniform2iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform2iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - if len(value)%2 != 0 { - panic("invalid value length for Uniform2iv") - } - count := len(value) / 2 - C.gl4_3core_glUniform2iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// Uniform1iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform1iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - count := len(value) - C.gl4_3core_glUniform1iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// Uniform4fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform4fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - if len(value)%4 != 0 { - panic("invalid value length for Uniform4fv") - } - count := len(value) / 4 - C.gl4_3core_glUniform4fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform3fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform3fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - if len(value)%3 != 0 { - panic("invalid value length for Uniform3fv") - } - count := len(value) / 3 - C.gl4_3core_glUniform3fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform2fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform2fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - if len(value)%2 != 0 { - panic("invalid value length for Uniform2fv") - } - count := len(value) / 2 - C.gl4_3core_glUniform2fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform1fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform1fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - count := len(value) - C.gl4_3core_glUniform1fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform4i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform4i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4i(location glbase.Uniform, v0, v1, v2, v3 int32) { - C.gl4_3core_glUniform4i(gl.funcs, C.GLint(location), C.GLint(v0), C.GLint(v1), C.GLint(v2), C.GLint(v3)) -} - -// Uniform3i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform3i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3i(location glbase.Uniform, v0, v1, v2 int32) { - C.gl4_3core_glUniform3i(gl.funcs, C.GLint(location), C.GLint(v0), C.GLint(v1), C.GLint(v2)) -} - -// Uniform2i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform2i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2i(location glbase.Uniform, v0, v1 int32) { - C.gl4_3core_glUniform2i(gl.funcs, C.GLint(location), C.GLint(v0), C.GLint(v1)) -} - -// Uniform1i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform1i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1i(location glbase.Uniform, v0 int32) { - C.gl4_3core_glUniform1i(gl.funcs, C.GLint(location), C.GLint(v0)) -} - -// Uniform4f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform4f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4f(location glbase.Uniform, v0, v1, v2, v3 float32) { - C.gl4_3core_glUniform4f(gl.funcs, C.GLint(location), C.GLfloat(v0), C.GLfloat(v1), C.GLfloat(v2), C.GLfloat(v3)) -} - -// Uniform3f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform3f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3f(location glbase.Uniform, v0, v1, v2 float32) { - C.gl4_3core_glUniform3f(gl.funcs, C.GLint(location), C.GLfloat(v0), C.GLfloat(v1), C.GLfloat(v2)) -} - -// Uniform2f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform2f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2f(location glbase.Uniform, v0, v1 float32) { - C.gl4_3core_glUniform2f(gl.funcs, C.GLint(location), C.GLfloat(v0), C.GLfloat(v1)) -} - -// Uniform1f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform1f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1f(location glbase.Uniform, v0 float32) { - C.gl4_3core_glUniform1f(gl.funcs, C.GLint(location), C.GLfloat(v0)) -} - -// UseProgram installs the program object specified by program as part of -// current rendering state. One or more executables are created in a program -// object by successfully attaching shader objects to it with AttachShader, -// successfully compiling the shader objects with CompileShader, and -// successfully linking the program object with LinkProgram. -// -// A program object will contain an executable that will run on the vertex -// processor if it contains one or more shader objects of type -// GL.VERTEX_SHADER that have been successfully compiled and linked. -// Similarly, a program object will contain an executable that will run on -// the fragment processor if it contains one or more shader objects of type -// GL.FRAGMENT_SHADER that have been successfully compiled and linked. -// -// Successfully installing an executable on a programmable processor will -// cause the corresponding fixed functionality of OpenGL to be disabled. -// Specifically, if an executable is installed on the vertex processor, the -// OpenGL fixed functionality will be disabled as follows. -// -// - The modelview matrix is not applied to vertex coordinates. -// -// - The projection matrix is not applied to vertex coordinates. -// -// - The texture matrices are not applied to texture coordinates. -// -// - Normals are not transformed to eye coordinates. -// -// - Normals are not rescaled or normalized. -// -// - Normalization of GL.AUTO_NORMAL evaluated normals is not performed. -// -// - Texture coordinates are not generated automatically. -// -// - Per-vertex lighting is not performed. -// -// - Color material computations are not performed. -// -// - Color index lighting is not performed. -// -// - This list also applies when setting the current raster position. -// -// The executable that is installed on the vertex processor is expected to -// implement any or all of the desired functionality from the preceding list. -// Similarly, if an executable is installed on the fragment processor, the -// OpenGL fixed functionality will be disabled as follows. -// -// - Texture environment and texture functions are not applied. -// -// - Texture application is not applied. -// -// - Color sum is not applied. -// -// - Fog is not applied. -// -// Again, the fragment shader that is installed is expected to implement any -// or all of the desired functionality from the preceding list. -// -// While a program object is in use, applications are free to modify attached -// shader objects, compile attached shader objects, attach additional shader -// objects, and detach or delete shader objects. None of these operations -// will affect the executables that are part of the current state. However, -// relinking the program object that is currently in use will install the -// program object as part of the current rendering state if the link -// operation was successful (see LinkProgram). If the program object -// currently in use is relinked unsuccessfully, its link status will be set -// to GL.FALSE, but the executables and associated state will remain part of -// the current state until a subsequent call to UseProgram removes it from -// use. After it is removed from use, it cannot be made part of current state -// until it has been successfully relinked. -// -// If program contains shader objects of type GL.VERTEX_SHADER but it does -// not contain shader objects of type GL.FRAGMENT_SHADER, an executable will -// be installed on the vertex processor, but fixed functionality will be used -// for fragment processing. Similarly, if program contains shader objects of -// type GL.FRAGMENT_SHADER but it does not contain shader objects of type -// GL.VERTEX_SHADER, an executable will be installed on the fragment -// processor, but fixed functionality will be used for vertex processing. If -// program is 0, the programmable processors will be disabled, and fixed -// functionality will be used for both vertex and fragment processing. -// -// While a program object is in use, the state that controls the disabled -// fixed functionality may also be updated using the normal OpenGL calls. -// -// Like display lists and texture objects, the name space for program objects -// may be shared across a set of contexts, as long as the server sides of the -// contexts share the same address space. If the name space is shared across -// contexts, any attached objects and the data associated with those attached -// objects are shared as well. -// -// Applications are responsible for providing the synchronization across API -// calls when objects are accessed from different execution threads. -// -// Error GL.INVALID_VALUE is generated if program is neither 0 nor a value -// generated by OpenGL. GL.INVALID_OPERATION is generated if program is not -// a program object. GL.INVALID_OPERATION is generated if program could not -// be made part of current state. GL.INVALID_OPERATION is generated if -// UseProgram is executed between the execution of Begin and the -// corresponding execution of End. -// -// UseProgram is available in GL version 2.0 or greater. -func (gl *GL) UseProgram(program glbase.Program) { - C.gl4_3core_glUseProgram(gl.funcs, C.GLuint(program)) -} - -// ShaderSource sets the source code in shader to the provided source code. Any source -// code previously stored in the shader object is completely replaced. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader is not a shader -// object. GL.INVALID_VALUE is generated if count is less than 0. -// GL.INVALID_OPERATION is generated if ShaderSource is executed between the -// execution of Begin and the corresponding execution of End. -// -// ShaderSource is available in GL version 2.0 or greater. -func (gl *GL) ShaderSource(shader glbase.Shader, source ...string) { - count := len(source) - length := make([]int32, count) - source_c := make([]unsafe.Pointer, count) - for i, src := range source { - length[i] = int32(len(src)) - if len(src) > 0 { - source_c[i] = *(*unsafe.Pointer)(unsafe.Pointer(&src)) - } else { - source_c[i] = unsafe.Pointer(uintptr(0)) - } - } - C.gl4_3core_glShaderSource(gl.funcs, C.GLuint(shader), C.GLsizei(count), (**C.GLchar)(unsafe.Pointer(&source_c[0])), (*C.GLint)(unsafe.Pointer(&length[0]))) -} - -// LinkProgram links the program object specified by program. If any shader -// objects of type GL.VERTEX_SHADER are attached to program, they will be -// used to create an executable that will run on the programmable vertex -// processor. If any shader objects of type GL.FRAGMENT_SHADER are attached -// to program, they will be used to create an executable that will run on the -// programmable fragment processor. -// -// The status of the link operation will be stored as part of the program -// object's state. This value will be set to GL.TRUE if the program object -// was linked without errors and is ready for use, and GL.FALSE otherwise. It -// can be queried by calling GetProgramiv with arguments program and -// GL.LINK_STATUS. -// -// As a result of a successful link operation, all active user-defined -// uniform variables belonging to program will be initialized to 0, and each -// of the program object's active uniform variables will be assigned a -// location that can be queried by calling GetUniformLocation. Also, any -// active user-defined attribute variables that have not been bound to a -// generic vertex attribute index will be bound to one at this time. -// -// Linking of a program object can fail for a number of reasons as specified -// in the OpenGL Shading Language Specification. The following lists some of -// the conditions that will cause a link error. -// -// - The number of active attribute variables supported by the -// implementation has been exceeded. -// -// - The storage limit for uniform variables has been exceeded. -// -// - The number of active uniform variables supported by the implementation -// has been exceeded. -// -// - The main function is missing for the vertex shader or the fragment -// shader. -// -// - A varying variable actually used in the fragment shader is not -// declared in the same way (or is not declared at all) in the vertex -// shader. -// -// - A reference to a function or variable name is unresolved. -// -// - A shared global is declared with two different types or two different -// initial values. -// -// - One or more of the attached shader objects has not been successfully -// compiled. -// -// - Binding a generic attribute matrix caused some rows of the matrix to -// fall outside the allowed maximum of GL.MAX_VERTEX_ATTRIBS. -// -// - Not enough contiguous vertex attribute slots could be found to bind -// attribute matrices. -// -// When a program object has been successfully linked, the program object can -// be made part of current state by calling UseProgram. Whether or not the -// link operation was successful, the program object's information log will -// be overwritten. The information log can be retrieved by calling -// GetProgramInfoLog. -// -// LinkProgram will also install the generated executables as part of the -// current rendering state if the link operation was successful and the -// specified program object is already currently in use as a result of a -// previous call to UseProgram. If the program object currently in use is -// relinked unsuccessfully, its link status will be set to GL.FALSE , but the -// executables and associated state will remain part of the current state -// until a subsequent call to UseProgram removes it from use. After it is -// removed from use, it cannot be made part of current state until it has -// been successfully relinked. -// -// If program contains shader objects of type GL.VERTEX_SHADER but does not -// contain shader objects of type GL.FRAGMENT_SHADER, the vertex shader will -// be linked against the implicit interface for fixed functionality fragment -// processing. Similarly, if program contains shader objects of type -// GL.FRAGMENT_SHADER but it does not contain shader objects of type -// GL.VERTEX_SHADER, the fragment shader will be linked against the implicit -// interface for fixed functionality vertex processing. -// -// The program object's information log is updated and the program is -// generated at the time of the link operation. After the link operation, -// applications are free to modify attached shader objects, compile attached -// shader objects, detach shader objects, delete shader objects, and attach -// additional shader objects. None of these operations affects the -// information log or the program that is part of the program object. -// -// If the link operation is unsuccessful, any information about a previous -// link operation on program is lost (a failed link does not restore the -// old state of program). Certain information can still be retrieved -// from program even after an unsuccessful link operation. See for instance -// GetActiveAttrib and GetActiveUniform. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program -// object. GL.INVALID_OPERATION is generated if LinkProgram is executed -// between the execution of Begin and the corresponding execution of End. -// -// LinkProgram is available in GL version 2.0 or greater. -func (gl *GL) LinkProgram(program glbase.Program) { - C.gl4_3core_glLinkProgram(gl.funcs, C.GLuint(program)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsShader.xml -func (gl *GL) IsShader(shader glbase.Shader) bool { - glresult := C.gl4_3core_glIsShader(gl.funcs, C.GLuint(shader)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsProgram.xml -func (gl *GL) IsProgram(program glbase.Program) bool { - glresult := C.gl4_3core_glIsProgram(gl.funcs, C.GLuint(program)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// GetVertexAttribiv returns in params the value of a generic vertex attribute -// parameter. The generic vertex attribute to be queried is specified by -// index, and the parameter to be queried is specified by pname. -// -// The accepted parameter names are as follows: -// -// GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING -// params returns a single value, the name of the buffer object -// currently bound to the binding point corresponding to generic vertex -// attribute array index. If no buffer object is bound, 0 is returned. -// The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_ENABLED -// params returns a single value that is non-zero (true) if the vertex -// attribute array for index is enabled and 0 (false) if it is -// disabled. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_SIZE -// params returns a single value, the size of the vertex attribute -// array for index. The size is the number of values for each element -// of the vertex attribute array, and it will be 1, 2, 3, or 4. The -// initial value is 4. -// -// GL.VERTEX_ATTRIB_ARRAY_STRIDE -// params returns a single value, the array stride for (number of bytes -// between successive elements in) the vertex attribute array for -// index. A value of 0 indicates that the array elements are stored -// sequentially in memory. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_TYPE -// params returns a single value, a symbolic constant indicating the -// array type for the vertex attribute array for index. Possible values -// are GL.BYTE, GL.UNSIGNED_BYTE, GL.SHORT, GL.UNSIGNED_SHORT, GL.INT, -// GL.UNSIGNED_INT, GL.FLOAT, and GL.DOUBLE. The initial value is -// GL.FLOAT. -// -// GL.VERTEX_ATTRIB_ARRAY_NORMALIZED -// params returns a single value that is non-zero (true) if fixed-point -// data types for the vertex attribute array indicated by index are -// normalized when they are converted to floating point, and 0 (false) -// otherwise. The initial value is 0. -// -// GL.CURRENT_VERTEX_ATTRIB -// params returns four values that represent the current value for the -// generic vertex attribute specified by index. Generic vertex -// attribute 0 is unique in that it has no current state, so an error -// will be generated if index is 0. The initial value for all other -// generic vertex attributes is (0,0,0,1). -// -// All of the parameters except GL.CURRENT_VERTEX_ATTRIB represent -// client-side state. -// -// Error GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. GL.INVALID_ENUM is generated if pname is not an -// accepted value. GL.INVALID_OPERATION is generated if index is 0 and pname -// is GL.CURRENT_VERTEX_ATTRIB. -// -// GetVertexAttribiv is available in GL version 2.0 or greater. -func (gl *GL) GetVertexAttribiv(index glbase.Attrib, pname glbase.Enum, params []int32) { - var params_c [4]int32 - C.gl4_3core_glGetVertexAttribiv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetVertexAttribfv returns in params the value of a generic vertex attribute -// parameter. The generic vertex attribute to be queried is specified by -// index, and the parameter to be queried is specified by pname. -// -// The accepted parameter names are as follows: -// -// GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING -// params returns a single value, the name of the buffer object -// currently bound to the binding point corresponding to generic vertex -// attribute array index. If no buffer object is bound, 0 is returned. -// The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_ENABLED -// params returns a single value that is non-zero (true) if the vertex -// attribute array for index is enabled and 0 (false) if it is -// disabled. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_SIZE -// params returns a single value, the size of the vertex attribute -// array for index. The size is the number of values for each element -// of the vertex attribute array, and it will be 1, 2, 3, or 4. The -// initial value is 4. -// -// GL.VERTEX_ATTRIB_ARRAY_STRIDE -// params returns a single value, the array stride for (number of bytes -// between successive elements in) the vertex attribute array for -// index. A value of 0 indicates that the array elements are stored -// sequentially in memory. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_TYPE -// params returns a single value, a symbolic constant indicating the -// array type for the vertex attribute array for index. Possible values -// are GL.BYTE, GL.UNSIGNED_BYTE, GL.SHORT, GL.UNSIGNED_SHORT, GL.INT, -// GL.UNSIGNED_INT, GL.FLOAT, and GL.DOUBLE. The initial value is -// GL.FLOAT. -// -// GL.VERTEX_ATTRIB_ARRAY_NORMALIZED -// params returns a single value that is non-zero (true) if fixed-point -// data types for the vertex attribute array indicated by index are -// normalized when they are converted to floating point, and 0 (false) -// otherwise. The initial value is 0. -// -// GL.CURRENT_VERTEX_ATTRIB -// params returns four values that represent the current value for the -// generic vertex attribute specified by index. Generic vertex -// attribute 0 is unique in that it has no current state, so an error -// will be generated if index is 0. The initial value for all other -// generic vertex attributes is (0,0,0,1). -// -// All of the parameters except GL.CURRENT_VERTEX_ATTRIB represent -// client-side state. -// -// Error GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. GL.INVALID_ENUM is generated if pname is not an -// accepted value. GL.INVALID_OPERATION is generated if index is 0 and pname -// is GL.CURRENT_VERTEX_ATTRIB. -// -// GetVertexAttribfv is available in GL version 2.0 or greater. -func (gl *GL) GetVertexAttribfv(index glbase.Attrib, pname glbase.Enum, params []float32) { - var params_c [4]float32 - C.gl4_3core_glGetVertexAttribfv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetVertexAttribdv returns in params the value of a generic vertex attribute -// parameter. The generic vertex attribute to be queried is specified by -// index, and the parameter to be queried is specified by pname. -// -// The accepted parameter names are as follows: -// -// GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING -// params returns a single value, the name of the buffer object -// currently bound to the binding point corresponding to generic vertex -// attribute array index. If no buffer object is bound, 0 is returned. -// The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_ENABLED -// params returns a single value that is non-zero (true) if the vertex -// attribute array for index is enabled and 0 (false) if it is -// disabled. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_SIZE -// params returns a single value, the size of the vertex attribute -// array for index. The size is the number of values for each element -// of the vertex attribute array, and it will be 1, 2, 3, or 4. The -// initial value is 4. -// -// GL.VERTEX_ATTRIB_ARRAY_STRIDE -// params returns a single value, the array stride for (number of bytes -// between successive elements in) the vertex attribute array for -// index. A value of 0 indicates that the array elements are stored -// sequentially in memory. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_TYPE -// params returns a single value, a symbolic constant indicating the -// array type for the vertex attribute array for index. Possible values -// are GL.BYTE, GL.UNSIGNED_BYTE, GL.SHORT, GL.UNSIGNED_SHORT, GL.INT, -// GL.UNSIGNED_INT, GL.FLOAT, and GL.DOUBLE. The initial value is -// GL.FLOAT. -// -// GL.VERTEX_ATTRIB_ARRAY_NORMALIZED -// params returns a single value that is non-zero (true) if fixed-point -// data types for the vertex attribute array indicated by index are -// normalized when they are converted to floating point, and 0 (false) -// otherwise. The initial value is 0. -// -// GL.CURRENT_VERTEX_ATTRIB -// params returns four values that represent the current value for the -// generic vertex attribute specified by index. Generic vertex -// attribute 0 is unique in that it has no current state, so an error -// will be generated if index is 0. The initial value for all other -// generic vertex attributes is (0,0,0,1). -// -// All of the parameters except GL.CURRENT_VERTEX_ATTRIB represent -// client-side state. -// -// Error GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. GL.INVALID_ENUM is generated if pname is not an -// accepted value. GL.INVALID_OPERATION is generated if index is 0 and pname -// is GL.CURRENT_VERTEX_ATTRIB. -// -// GetVertexAttribdv is available in GL version 2.0 or greater. -func (gl *GL) GetVertexAttribdv(index glbase.Attrib, pname glbase.Enum, params []float64) { - var params_c [4]float64 - C.gl4_3core_glGetVertexAttribdv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetUniformiv returns in params the value of the specified uniform -// variable. The type of the uniform variable specified by location -// determines the number of values returned. If the uniform variable is -// defined in the shader as a boolean, int, or float, a single value will be -// returned. If it is defined as a vec2, ivec2, or bvec2, two values will be -// returned. If it is defined as a vec3, ivec3, or bvec3, three values will -// be returned, and so on. To query values stored in uniform variables -// declared as arrays, call GetUniformiv for each element of the array. To -// query values stored in uniform variables declared as structures, call -// GetUniformiv for each field in the structure. The values for uniform -// variables declared as a matrix will be returned in column major order. -// -// The locations assigned to uniform variables are not known until the -// program object is linked. After linking has occurred, the command -// GetUniformLocation can be used to obtain the location of a uniform -// variable. This location value can then be passed to GetUniformiv in order -// to query the current value of the uniform variable. After a program object -// has been linked successfully, the index values for uniform variables -// remain fixed until the next link command occurs. The uniform variable -// values can only be queried after a link if the link was successful. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program -// object. GL.INVALID_OPERATION is generated if program has not been -// successfully linked. GL.INVALID_OPERATION is generated if location does -// not correspond to a valid uniform variable location for the specified -// program object. GL.INVALID_OPERATION is generated if GetUniformiv is -// executed between the execution of Begin and the corresponding execution of -// End. -// -// GetUniformiv is available in GL version 2.0 or greater. -func (gl *GL) GetUniformiv(program glbase.Program, location glbase.Uniform, params []int32) { - var params_c [4]int32 - C.gl4_3core_glGetUniformiv(gl.funcs, C.GLuint(program), C.GLint(location), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetUniformfv returns in params the value of the specified uniform -// variable. The type of the uniform variable specified by location -// determines the number of values returned. If the uniform variable is -// defined in the shader as a boolean, int, or float, a single value will be -// returned. If it is defined as a vec2, ivec2, or bvec2, two values will be -// returned. If it is defined as a vec3, ivec3, or bvec3, three values will -// be returned, and so on. To query values stored in uniform variables -// declared as arrays, call GetUniformfv for each element of the array. To -// query values stored in uniform variables declared as structures, call -// GetUniformfv for each field in the structure. The values for uniform -// variables declared as a matrix will be returned in column major order. -// -// The locations assigned to uniform variables are not known until the -// program object is linked. After linking has occurred, the command -// GetUniformLocation can be used to obtain the location of a uniform -// variable. This location value can then be passed to GetUniformfv in order -// to query the current value of the uniform variable. After a program object -// has been linked successfully, the index values for uniform variables -// remain fixed until the next link command occurs. The uniform variable -// values can only be queried after a link if the link was successful. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program -// object. GL.INVALID_OPERATION is generated if program has not been -// successfully linked. GL.INVALID_OPERATION is generated if location does -// not correspond to a valid uniform variable location for the specified -// program object. GL.INVALID_OPERATION is generated if GetUniformfv is -// executed between the execution of Begin and the corresponding execution of -// End. -// -// GetUniformfv is available in GL version 2.0 or greater. -func (gl *GL) GetUniformfv(program glbase.Program, location glbase.Uniform, params []float32) { - var params_c [4]float32 - C.gl4_3core_glGetUniformfv(gl.funcs, C.GLuint(program), C.GLint(location), (*C.GLfloat)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetUniformLocation returns an integer that represents the location of a -// specific uniform variable within a program object. name must be an active -// uniform variable name in program that is not a structure, an array of -// structures, or a subcomponent of a vector or a matrix. This function -// returns -1 if name does not correspond to an active uniform variable in -// program or if name starts with the reserved prefix "gl_". -// -// Uniform variables that are structures or arrays of structures may be -// queried by calling GetUniformLocation for each field within the -// structure. The array element operator "[]" and the structure field -// operator "." may be used in name in order to select elements within an -// array or fields within a structure. The result of using these operators is -// not allowed to be another structure, an array of structures, or a -// subcomponent of a vector or a matrix. Except if the last part of name -// indicates a uniform variable array, the location of the first element of -// an array can be retrieved by using the name of the array, or by using the -// name appended by "[0]". -// -// The actual locations assigned to uniform variables are not known until the -// program object is linked successfully. After linking has occurred, the -// command GetUniformLocation can be used to obtain the location of a -// uniform variable. This location value can then be passed to Uniform to -// set the value of the uniform variable or to GetUniform in order to query -// the current value of the uniform variable. After a program object has been -// linked successfully, the index values for uniform variables remain fixed -// until the next link command occurs. Uniform variable locations and values -// can only be queried after a link if the link was successful. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program object. -// GL.INVALID_OPERATION is generated if program has not been successfully -// linked. GL.INVALID_OPERATION is generated if GetUniformLocation is executed -// between the execution of Begin and the corresponding execution of End. -// -// GetUniformLocation is available in GL version 2.0 or greater. -func (gl *GL) GetUniformLocation(program glbase.Program, name string) glbase.Uniform { - name_cstr := C.CString(name) - glresult := C.gl4_3core_glGetUniformLocation(gl.funcs, C.GLuint(program), (*C.GLchar)(name_cstr)) - C.free(unsafe.Pointer(name_cstr)) - return glbase.Uniform(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetShaderSource.xml -func (gl *GL) GetShaderSource(shader glbase.Shader, bufSize int32, length []int32, source []byte) { - C.gl4_3core_glGetShaderSource(gl.funcs, C.GLuint(shader), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLchar)(unsafe.Pointer(&source[0]))) -} - -// GetShaderInfoLog returns the information log for the specified shader -// object. The information log for a shader object is modified when the -// shader is compiled. -// -// The information log for a shader object is a string that may contain -// diagnostic messages, warning messages, and other information about the -// last compile operation. When a shader object is created, its information -// log will be a string of length 0, and the size of the current log can be -// obtained by calling GetShaderiv with the value GL.INFO_LOG_LENGTH. -// -// The information log for a shader object is the OpenGL implementer's -// primary mechanism for conveying information about the compilation process. -// Therefore, the information log can be helpful to application developers -// during the development process, even when compilation is successful. -// Application developers should not expect different OpenGL implementations -// to produce identical information logs. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader is not a shader -// object. GL.INVALID_VALUE is generated if maxLength is less than 0. -// GL.INVALID_OPERATION is generated if GetShaderInfoLog is executed -// between the execution of Begin and the corresponding execution of End. -// -// GetShaderInfoLog is available in GL version 2.0 or greater. -func (gl *GL) GetShaderInfoLog(shader glbase.Shader) []byte { - var params [1]int32 - var length int32 - gl.GetShaderiv(shader, INFO_LOG_LENGTH, params[:]) - bufSize := params[0] - infoLog := make([]byte, int(bufSize)) - C.gl4_3core_glGetShaderInfoLog(gl.funcs, C.GLuint(shader), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length)), (*C.GLchar)(unsafe.Pointer(&infoLog[0]))) - return infoLog -} - -// GetShaderiv GetShader returns in params the value of a parameter for a specific -// shader object. The following parameters are defined: -// -// GL.SHADER_TYPE -// params returns GL.VERTEX_SHADER if shader is a vertex shader object, -// and GL.FRAGMENT_SHADER if shader is a fragment shader object. -// -// GL.DELETE_STATUS -// params returns GL.TRUE if shader is currently flagged for deletion, -// and GL.FALSE otherwise. -// -// GL.COMPILE_STATUS -// params returns GL.TRUE if the last compile operation on shader was -// successful, and GL.FALSE otherwise. -// -// GL.INFO_LOG_LENGTH -// params returns the number of characters in the information log for -// shader including the null termination character (the size of the -// character buffer required to store the information log). If shader has -// no information log, a value of 0 is returned. -// -// GL.SHADER_SOURCE_LENGTH -// params returns the length of the concatenation of the source strings -// that make up the shader source for the shader, including the null -// termination character. (the size of the character buffer -// required to store the shader source). If no source code exists, 0 is -// returned. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader does not refer to a -// shader object. GL.INVALID_ENUM is generated if pname is not an accepted -// value. GL.INVALID_OPERATION is generated if GetShader is executed -// between the execution of Begin and the corresponding execution of End. -// -// GetShaderiv is available in GL version 2.0 or greater. -func (gl *GL) GetShaderiv(shader glbase.Shader, pname glbase.Enum, params []int32) { - var params_c [4]int32 - C.gl4_3core_glGetShaderiv(gl.funcs, C.GLuint(shader), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetProgramInfoLog returns the information log for the specified program -// object. The information log for a program object is modified when the -// program object is linked or validated. -// -// The information log for a program object is either an empty string, or a -// string containing information about the last link operation, or a string -// containing information about the last validation operation. It may contain -// diagnostic messages, warning messages, and other information. When a -// program object is created, its information log will be a string of length -// 0, and the size of the current log can be obtained by calling GetProgramiv -// with the value GL.INFO_LOG_LENGTH. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated -// by OpenGL. GL.INVALID_OPERATION is generated if program is not a -// program object. -func (gl *GL) GetProgramInfoLog(program glbase.Program) []byte { - var params [1]int32 - var length int32 - gl.GetProgramiv(program, INFO_LOG_LENGTH, params[:]) - bufSize := params[0] - infoLog := make([]byte, int(bufSize)) - C.gl4_3core_glGetProgramInfoLog(gl.funcs, C.GLuint(program), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length)), (*C.GLchar)(unsafe.Pointer(&infoLog[0]))) - return infoLog -} - -// GetProgramiv returns in params the value of a parameter for a specific -// program object. The following parameters are defined: -// -// GL.DELETE_STATUS -// params returns GL.TRUE if program is currently flagged for deletion, -// and GL.FALSE otherwise. -// -// GL.LINK_STATUS -// params returns GL.TRUE if the last link operation on program was -// successful, and GL.FALSE otherwise. -// -// GL.VALIDATE_STATUS -// params returns GL.TRUE or if the last validation operation on -// program was successful, and GL.FALSE otherwise. -// -// GL.INFO_LOG_LENGTH -// params returns the number of characters in the information log for -// program including the null termination character (the size of -// the character buffer required to store the information log). If -// program has no information log, a value of 0 is returned. -// -// GL.ATTACHED_SHADERS -// params returns the number of shader objects attached to program. -// -// GL.ACTIVE_ATTRIBUTES -// params returns the number of active attribute variables for program. -// -// GL.ACTIVE_ATTRIBUTE_MAX_LENGTH -// params returns the length of the longest active attribute name for -// program, including the null termination character (the size of -// the character buffer required to store the longest attribute name). -// If no active attributes exist, 0 is returned. -// -// GL.ACTIVE_UNIFORMS -// params returns the number of active uniform variables for program. -// -// GL.ACTIVE_UNIFORM_MAX_LENGTH -// params returns the length of the longest active uniform variable -// name for program, including the null termination character (i.e., -// the size of the character buffer required to store the longest -// uniform variable name). If no active uniform variables exist, 0 is -// returned. -// -// GL.TRANSFORM_FEEDBACK_BUFFER_MODE -// params returns a symbolic constant indicating the buffer mode used -// when transform feedback is active. This may be GL.SEPARATE_ATTRIBS -// or GL.INTERLEAVED_ATTRIBS. -// -// GL.TRANSFORM_FEEDBACK_VARYINGS -// params returns the number of varying variables to capture in transform -// feedback mode for the program. -// -// GL.TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH -// params returns the length of the longest variable name to be used for -// transform feedback, including the null-terminator. -// -// GL.GEOMETRY_VERTICES_OUT -// params returns the maximum number of vertices that the geometry shader in -// program will output. -// -// GL.GEOMETRY_INPUT_TYPE -// params returns a symbolic constant indicating the primitive type accepted -// as input to the geometry shader contained in program. -// -// GL.GEOMETRY_OUTPUT_TYPE -// params returns a symbolic constant indicating the primitive type that will -// be output by the geometry shader contained in program. -// -// GL.ACTIVE_UNIFORM_BLOCKS and GL.ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH are -// available only if the GL version 3.1 or greater. -// -// GL.GEOMETRY_VERTICES_OUT, GL.GEOMETRY_INPUT_TYPE and -// GL.GEOMETRY_OUTPUT_TYPE are accepted only if the GL version is 3.2 or -// greater. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program does not refer to a -// program object. GL.INVALID_OPERATION is generated if pname is -// GL.GEOMETRY_VERTICES_OUT, GL.GEOMETRY_INPUT_TYPE, or -// GL.GEOMETRY_OUTPUT_TYPE, and program does not contain a geometry shader. -// GL.INVALID_ENUM is generated if pname is not an accepted value. -func (gl *GL) GetProgramiv(program glbase.Program, pname glbase.Enum, params []int32) { - var params_c [4]int32 - C.gl4_3core_glGetProgramiv(gl.funcs, C.GLuint(program), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetAttribLocation queries the previously linked program object specified -// by program for the attribute variable specified by name and returns the -// index of the generic vertex attribute that is bound to that attribute -// variable. If name is a matrix attribute variable, the index of the first -// column of the matrix is returned. If the named attribute variable is not -// an active attribute in the specified program object or if name starts with -// the reserved prefix "gl_", a value of -1 is returned. -// -// The association between an attribute variable name and a generic attribute -// index can be specified at any time by calling BindAttribLocation. -// Attribute bindings do not go into effect until LinkProgram is called. -// After a program object has been linked successfully, the index values for -// attribute variables remain fixed until the next link command occurs. The -// attribute values can only be queried after a link if the link was -// successful. GetAttribLocation returns the binding that actually went -// into effect the last time LinkProgram was called for the specified -// program object. Attribute bindings that have been specified since the last -// link operation are not returned by GetAttribLocation. -// -// Error GL_INVALID_OPERATION is generated if program is not a value -// generated by OpenGL. GL_INVALID_OPERATION is generated if program is not -// a program object. GL_INVALID_OPERATION is generated if program has not -// been successfully linked. GL_INVALID_OPERATION is generated if -// GetAttribLocation is executed between the execution of Begin and the -// corresponding execution of End. -// -// GetAttribLocation is available in GL version 2.0 or greater. -func (gl *GL) GetAttribLocation(program glbase.Program, name string) glbase.Attrib { - name_cstr := C.CString(name) - glresult := C.gl4_3core_glGetAttribLocation(gl.funcs, C.GLuint(program), (*C.GLchar)(name_cstr)) - C.free(unsafe.Pointer(name_cstr)) - return glbase.Attrib(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetAttachedShaders.xml -func (gl *GL) GetAttachedShaders(program glbase.Program, maxCount int32, count []int, obj []uint32) { - C.gl4_3core_glGetAttachedShaders(gl.funcs, C.GLuint(program), C.GLsizei(maxCount), (*C.GLsizei)(unsafe.Pointer(&count[0])), (*C.GLuint)(unsafe.Pointer(&obj[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveUniform.xml -func (gl *GL) GetActiveUniform(program glbase.Program, index uint32, bufSize int32, length []int32, size []int, gltype []glbase.Enum, name []byte) { - C.gl4_3core_glGetActiveUniform(gl.funcs, C.GLuint(program), C.GLuint(index), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLint)(unsafe.Pointer(&size[0])), (*C.GLenum)(unsafe.Pointer(&gltype[0])), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveAttrib.xml -func (gl *GL) GetActiveAttrib(program glbase.Program, index glbase.Attrib, bufSize int32, length []int32, size []int, gltype []glbase.Enum, name []byte) { - C.gl4_3core_glGetActiveAttrib(gl.funcs, C.GLuint(program), C.GLuint(index), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLint)(unsafe.Pointer(&size[0])), (*C.GLenum)(unsafe.Pointer(&gltype[0])), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEnableVertexAttribArray.xml -func (gl *GL) EnableVertexAttribArray(index glbase.Attrib) { - C.gl4_3core_glEnableVertexAttribArray(gl.funcs, C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDisableVertexAttribArray.xml -func (gl *GL) DisableVertexAttribArray(index glbase.Attrib) { - C.gl4_3core_glDisableVertexAttribArray(gl.funcs, C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDetachShader.xml -func (gl *GL) DetachShader(program glbase.Program, shader glbase.Shader) { - C.gl4_3core_glDetachShader(gl.funcs, C.GLuint(program), C.GLuint(shader)) -} - -// DeleteShader frees the memory and invalidates the name associated with -// the shader object specified by shader. This command effectively undoes the -// effects of a call to CreateShader. -// -// If a shader object to be deleted is attached to a program object, it will -// be flagged for deletion, but it will not be deleted until it is no longer -// attached to any program object, for any rendering context (it must -// be detached from wherever it was attached before it will be deleted). A -// value of 0 for shader will be silently ignored. -// -// To determine whether an object has been flagged for deletion, call -// GetShader with arguments shader and GL.DELETE_STATUS. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. -// -// DeleteShader is available in GL version 2.0 or greater. -func (gl *GL) DeleteShader(shader glbase.Shader) { - C.gl4_3core_glDeleteShader(gl.funcs, C.GLuint(shader)) -} - -// DeleteProgram frees the memory and invalidates the name associated with -// the program object specified by program. This command effectively undoes -// the effects of a call to CreateProgram. -// -// If a program object is in use as part of current rendering state, it will -// be flagged for deletion, but it will not be deleted until it is no longer -// part of current state for any rendering context. If a program object to be -// deleted has shader objects attached to it, those shader objects will be -// automatically detached but not deleted unless they have already been -// flagged for deletion by a previous call to DeleteShader. A value of 0 -// for program will be silently ignored. -// -// To determine whether a program object has been flagged for deletion, call -// GetProgram with arguments program and GL.DELETE_STATUS. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. -// -// DeleteProgram is available in GL version 2.0 or greater. -func (gl *GL) DeleteProgram(program glbase.Program) { - C.gl4_3core_glDeleteProgram(gl.funcs, C.GLuint(program)) -} - -// CreateShader creates an empty shader object and returns a non-zero value -// by which it can be referenced. A shader object is used to maintain the -// source code strings that define a shader. shaderType indicates the type of -// shader to be created. -// -// Two types of shaders are supported. A shader of type GL.VERTEX_SHADER is a -// shader that is intended to run on the programmable vertex processor and -// replace the fixed functionality vertex processing in OpenGL. A shader of -// type GL.FRAGMENT_SHADER is a shader that is intended to run on the -// programmable fragment processor and replace the fixed functionality -// fragment processing in OpenGL. -// -// When created, a shader object's GL.SHADER_TYPE parameter is set to either -// GL.VERTEX_SHADER or GL.FRAGMENT_SHADER, depending on the value of -// shaderType. -// -// Like display lists and texture objects, the name space for shader objects -// may be shared across a set of contexts, as long as the server sides of the -// contexts share the same address space. If the name space is shared across -// contexts, any attached objects and the data associated with those attached -// objects are shared as well. -// -// This function returns 0 if an error occurs creating the shader object. -// -// Error GL.INVALID_ENUM is generated if shaderType is not an accepted value. -// GL.INVALID_OPERATION is generated if CreateShader is executed between the -// execution of Begin and the corresponding execution of End. -// -// CreateShader is available in GL version 2.0 or greater. -func (gl *GL) CreateShader(gltype glbase.Enum) glbase.Shader { - glresult := C.gl4_3core_glCreateShader(gl.funcs, C.GLenum(gltype)) - return glbase.Shader(glresult) -} - -// CreateProgram creates an empty program object and returns a non-zero -// value by which it can be referenced. A program object is an object to -// which shader objects can be attached. This provides a mechanism to specify -// the shader objects that will be linked to create a program. It also -// provides a means for checking the compatibility of the shaders that will -// be used to create a program (for instance, checking the compatibility -// between a vertex shader and a fragment shader). When no longer needed as -// part of a program object, shader objects can be detached. -// -// One or more executables are created in a program object by successfully -// attaching shader objects to it with AttachShader, successfully compiling -// the shader objects with CompileShader, and successfully linking the -// program object with LinkProgram. These executables are made part of -// current state when UseProgram is called. Program objects can be deleted -// by calling DeleteProgram. The memory associated with the program object -// will be deleted when it is no longer part of current rendering state for -// any context. -// -// Like display lists and texture objects, the name space for program objects -// may be shared across a set of contexts, as long as the server sides of the -// contexts share the same address space. If the name space is shared across -// contexts, any attached objects and the data associated with those attached -// objects are shared as well. -// -// Applications are responsible for providing the synchronization across API -// calls when objects are accessed from different execution threads. -// -// This function returns 0 if an error occurs creating the program object. -// -// Error GL.INVALID_OPERATION is generated if CreateProgram is executed -// between the execution of Begin and the corresponding execution of End. -// -// CreateProgram is available in GL version 2.0 or greater. -func (gl *GL) CreateProgram() glbase.Program { - glresult := C.gl4_3core_glCreateProgram(gl.funcs) - return glbase.Program(glresult) -} - -// CompileShader compiles the source code strings that have been stored in -// the shader object specified by shader. -// -// The compilation status will be stored as part of the shader object's -// state. This value will be set to GL.TRUE if the shader was compiled without -// errors and is ready for use, and GL.FALSE otherwise. It can be queried by -// calling GetShaderiv with arguments shader and GL.COMPILE_STATUS. -// -// Compilation of a shader can fail for a number of reasons as specified by -// the OpenGL Shading Language Specification. Whether or not the compilation -// was successful, information about the compilation can be obtained from the -// shader object's information log by calling GetShaderInfoLog. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader is not a shader -// object. GL.INVALID_OPERATION is generated if CompileShader is executed -// between the execution of Begin and the corresponding execution of End. -// -// CompileShader is available in GL version 2.0 or greater. -func (gl *GL) CompileShader(shader glbase.Shader) { - C.gl4_3core_glCompileShader(gl.funcs, C.GLuint(shader)) -} - -// BindAttribLocation associates a user-defined attribute variable in the program -// object specified by program with a generic vertex attribute index. The name -// parameter specifies the name of the vertex shader attribute variable to -// which index is to be bound. When program is made part of the current state, -// values provided via the generic vertex attribute index will modify the -// value of the user-defined attribute variable specified by name. -// -// If name refers to a matrix attribute variable, index refers to the first -// column of the matrix. Other matrix columns are then automatically bound to -// locations index+1 for a matrix of type mat2; index+1 and index+2 for a -// matrix of type mat3; and index+1, index+2, and index+3 for a matrix of -// type mat4. -// -// This command makes it possible for vertex shaders to use descriptive names -// for attribute variables rather than generic variables that are numbered -// from 0 to GL.MAX_VERTEX_ATTRIBS-1. The values sent to each generic -// attribute index are part of current state, just like standard vertex -// attributes such as color, normal, and vertex position. If a different -// program object is made current by calling UseProgram, the generic vertex -// attributes are tracked in such a way that the same values will be observed -// by attributes in the new program object that are also bound to index. -// -// Attribute variable name-to-generic attribute index bindings for a program -// object can be explicitly assigned at any time by calling -// BindAttribLocation. Attribute bindings do not go into effect until -// LinkProgram is called. After a program object has been linked -// successfully, the index values for generic attributes remain fixed (and -// their values can be queried) until the next link command occurs. -// -// Applications are not allowed to bind any of the standard OpenGL vertex -// attributes using this command, as they are bound automatically when -// needed. Any attribute binding that occurs after the program object has -// been linked will not take effect until the next time the program object is -// linked. -// -// If name was bound previously, that information is lost. Thus you cannot -// bind one user-defined attribute variable to multiple indices, but you can -// bind multiple user-defined attribute variables to the same index. -// -// Applications are allowed to bind more than one user-defined attribute -// variable to the same generic vertex attribute index. This is called -// aliasing, and it is allowed only if just one of the aliased attributes is -// active in the executable program, or if no path through the shader -// consumes more than one attribute of a set of attributes aliased to the -// same location. The compiler and linker are allowed to assume that no -// aliasing is done and are free to employ optimizations that work only in -// the absence of aliasing. OpenGL implementations are not required to do -// error checking to detect aliasing. Because there is no way to bind -// standard attributes, it is not possible to alias generic attributes with -// conventional ones (except for generic attribute 0). -// -// BindAttribLocation can be called before any vertex shader objects are -// bound to the specified program object. It is also permissible to bind a -// generic attribute index to an attribute variable name that is never used -// in a vertex shader. -// -// Active attributes that are not explicitly bound will be bound by the -// linker when LinkProgram is called. The locations assigned can be queried -// by calling GetAttribLocation. -// -// Error GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. -// GL.INVALID_OPERATION is generated if name starts with the reserved prefix "gl_". -// GL.INVALID_VALUE is generated if program is not a value generated by OpenGL. -// GL.INVALID_OPERATION is generated if program is not a program object. -// GL.INVALID_OPERATION is generated if BindAttribLocation is executed -// between the execution of Begin and the corresponding execution of End. -// -// BindAttribLocation is available in GL version 2.0 or greater. -func (gl *GL) BindAttribLocation(program glbase.Program, index glbase.Attrib, name string) { - name_cstr := C.CString(name) - C.gl4_3core_glBindAttribLocation(gl.funcs, C.GLuint(program), C.GLuint(index), (*C.GLchar)(name_cstr)) - C.free(unsafe.Pointer(name_cstr)) -} - -// AttachShader attaches a shader object to a program object. -// -// In order to create an executable, there must be a way to specify the list -// of things that will be linked together. Program objects provide this -// mechanism. Shaders that are to be linked together in a program object must -// first be attached to that program object. This indicates that shader will -// be included in link operations that will be performed on program. -// -// All operations that can be performed on a shader object are valid whether -// or not the shader object is attached to a program object. It is -// permissible to attach a shader object to a program object before source -// code has been loaded into the shader object or before the shader object -// has been compiled. It is permissible to attach multiple shader objects of -// the same type because each may contain a portion of the complete shader. -// It is also permissible to attach a shader object to more than one program -// object. If a shader object is deleted while it is attached to a program -// object, it will be flagged for deletion, and deletion will not occur until -// DetachShader is called to detach it from all program objects to which it -// is attached. -// -// Error GL.INVALID_VALUE is generated if either program or shader is not a -// value generated by OpenGL. GL.INVALID_OPERATION is generated if program -// is not a program object. GL.INVALID_OPERATION is generated if shader is -// not a shader object. GL.INVALID_OPERATION is generated if shader is -// already attached to program. GL.INVALID_OPERATION is generated if -// AttachShader is executed between the execution of Begin and the -// corresponding execution of End. -// -// AttachShader is available in GL version 2.0 or greater. -func (gl *GL) AttachShader(program glbase.Program, shader glbase.Shader) { - C.gl4_3core_glAttachShader(gl.funcs, C.GLuint(program), C.GLuint(shader)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glStencilMaskSeparate.xml -func (gl *GL) StencilMaskSeparate(face glbase.Enum, mask uint32) { - C.gl4_3core_glStencilMaskSeparate(gl.funcs, C.GLenum(face), C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glStencilFuncSeparate.xml -func (gl *GL) StencilFuncSeparate(face, glfunc glbase.Enum, ref int32, mask uint32) { - C.gl4_3core_glStencilFuncSeparate(gl.funcs, C.GLenum(face), C.GLenum(glfunc), C.GLint(ref), C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glStencilOpSeparate.xml -func (gl *GL) StencilOpSeparate(face, sfail, dpfail, dppass glbase.Enum) { - C.gl4_3core_glStencilOpSeparate(gl.funcs, C.GLenum(face), C.GLenum(sfail), C.GLenum(dpfail), C.GLenum(dppass)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawBuffers.xml -func (gl *GL) DrawBuffers(n int, bufs []glbase.Enum) { - C.gl4_3core_glDrawBuffers(gl.funcs, C.GLsizei(n), (*C.GLenum)(unsafe.Pointer(&bufs[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendEquationSeparate.xml -func (gl *GL) BlendEquationSeparate(modeRGB, modeAlpha glbase.Enum) { - C.gl4_3core_glBlendEquationSeparate(gl.funcs, C.GLenum(modeRGB), C.GLenum(modeAlpha)) -} - -// UniformMatrix4x3fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix4x3fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix4x3fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(4*3) != 0 { - panic("invalid value length for UniformMatrix4x3fv") - } - count := len(value) / (4 * 3) - C.gl4_3core_glUniformMatrix4x3fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix3x4fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix3x4fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix3x4fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(3*4) != 0 { - panic("invalid value length for UniformMatrix3x4fv") - } - count := len(value) / (3 * 4) - C.gl4_3core_glUniformMatrix3x4fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix4x2fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix4x2fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix4x2fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(4*2) != 0 { - panic("invalid value length for UniformMatrix4x2fv") - } - count := len(value) / (4 * 2) - C.gl4_3core_glUniformMatrix4x2fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix2x4fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix2x4fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix2x4fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(2*4) != 0 { - panic("invalid value length for UniformMatrix2x4fv") - } - count := len(value) / (2 * 4) - C.gl4_3core_glUniformMatrix2x4fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix3x2fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix3x2fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix3x2fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(3*2) != 0 { - panic("invalid value length for UniformMatrix3x2fv") - } - count := len(value) / (3 * 2) - C.gl4_3core_glUniformMatrix3x2fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix2x3fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix2x3fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix2x3fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(2*3) != 0 { - panic("invalid value length for UniformMatrix2x3fv") - } - count := len(value) / (2 * 3) - C.gl4_3core_glUniformMatrix2x3fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsVertexArray.xml -func (gl *GL) IsVertexArray(array uint32) bool { - glresult := C.gl4_3core_glIsVertexArray(gl.funcs, C.GLuint(array)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGenVertexArrays.xml -func (gl *GL) GenVertexArrays(n int, arrays []uint32) { - C.gl4_3core_glGenVertexArrays(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&arrays[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDeleteVertexArrays.xml -func (gl *GL) DeleteVertexArrays(n int, arrays []uint32) { - C.gl4_3core_glDeleteVertexArrays(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&arrays[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindVertexArray.xml -func (gl *GL) BindVertexArray(array uint32) { - C.gl4_3core_glBindVertexArray(gl.funcs, C.GLuint(array)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFlushMappedBufferRange.xml -func (gl *GL) FlushMappedBufferRange(target glbase.Enum, offset, length int) { - C.gl4_3core_glFlushMappedBufferRange(gl.funcs, C.GLenum(target), C.GLintptr(offset), C.GLsizeiptr(length)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFramebufferTextureLayer.xml -func (gl *GL) FramebufferTextureLayer(target, attachment glbase.Enum, texture glbase.Texture, level int, layer int32) { - C.gl4_3core_glFramebufferTextureLayer(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLuint(texture), C.GLint(level), C.GLint(layer)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRenderbufferStorageMultisample.xml -func (gl *GL) RenderbufferStorageMultisample(target glbase.Enum, samples int32, internalFormat glbase.Enum, width, height int) { - C.gl4_3core_glRenderbufferStorageMultisample(gl.funcs, C.GLenum(target), C.GLsizei(samples), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlitFramebuffer.xml -func (gl *GL) BlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1 int32, mask glbase.Bitfield, filter glbase.Enum) { - C.gl4_3core_glBlitFramebuffer(gl.funcs, C.GLint(srcX0), C.GLint(srcY0), C.GLint(srcX1), C.GLint(srcY1), C.GLint(dstX0), C.GLint(dstY0), C.GLint(dstX1), C.GLint(dstY1), C.GLbitfield(mask), C.GLenum(filter)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGenerateMipmap.xml -func (gl *GL) GenerateMipmap(target glbase.Enum) { - C.gl4_3core_glGenerateMipmap(gl.funcs, C.GLenum(target)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetFramebufferAttachmentParameteriv.xml -func (gl *GL) GetFramebufferAttachmentParameteriv(target, attachment, pname glbase.Enum, params []int32) { - C.gl4_3core_glGetFramebufferAttachmentParameteriv(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFramebufferRenderbuffer.xml -func (gl *GL) FramebufferRenderbuffer(target, attachment, renderbuffertarget glbase.Enum, renderbuffer glbase.Renderbuffer) { - C.gl4_3core_glFramebufferRenderbuffer(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(renderbuffertarget), C.GLuint(renderbuffer)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFramebufferTexture3D.xml -func (gl *GL) FramebufferTexture3D(target, attachment, textarget glbase.Enum, texture glbase.Texture, level int, zoffset int32) { - C.gl4_3core_glFramebufferTexture3D(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(textarget), C.GLuint(texture), C.GLint(level), C.GLint(zoffset)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFramebufferTexture2D.xml -func (gl *GL) FramebufferTexture2D(target, attachment, textarget glbase.Enum, texture glbase.Texture, level int) { - C.gl4_3core_glFramebufferTexture2D(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(textarget), C.GLuint(texture), C.GLint(level)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFramebufferTexture1D.xml -func (gl *GL) FramebufferTexture1D(target, attachment, textarget glbase.Enum, texture glbase.Texture, level int) { - C.gl4_3core_glFramebufferTexture1D(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(textarget), C.GLuint(texture), C.GLint(level)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCheckFramebufferStatus.xml -func (gl *GL) CheckFramebufferStatus(target glbase.Enum) glbase.Enum { - glresult := C.gl4_3core_glCheckFramebufferStatus(gl.funcs, C.GLenum(target)) - return glbase.Enum(glresult) -} - -// GenFramebuffers returns n framebuffer object names in ids. There is no -// guarantee that the names form a contiguous set of integers; however, it is -// guaranteed that none of the returned names was in use immediately before -// the call to GenFramebuffers. -// -// Framebuffer object names returned by a call to GenFramebuffers are not -// returned by subsequent calls, unless they are first deleted with -// DeleteFramebuffers. -// -// The names returned in ids are marked as used, for the purposes of -// GenFramebuffers only, but they acquire state and type only when they are -// first bound. -// -// Error GL.INVALID_VALUE is generated if n is negative. -func (gl *GL) GenFramebuffers(n int) []glbase.Framebuffer { - if n == 0 { - return nil - } - framebuffers := make([]glbase.Framebuffer, n) - C.gl4_3core_glGenFramebuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&framebuffers[0]))) - return framebuffers -} - -// DeleteFramebuffers deletes the framebuffer objects whose names are -// stored in the framebuffers slice. The name zero is reserved by the GL and -// is silently ignored, should it occur in framebuffers, as are other unused -// names. Once a framebuffer object is deleted, its name is again unused and -// it has no attachments. If a framebuffer that is currently bound to one or -// more of the targets GL.DRAW_FRAMEBUFFER or GL.READ_FRAMEBUFFER is deleted, -// it is as though BindFramebuffer had been executed with the corresponding -// target and framebuffer zero. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// DeleteFramebuffers is available in GL version 3.0 or greater. -func (gl *GL) DeleteFramebuffers(framebuffers []glbase.Framebuffer) { - n := len(framebuffers) - if n == 0 { - return - } - C.gl4_3core_glDeleteFramebuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&framebuffers[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindFramebuffer.xml -func (gl *GL) BindFramebuffer(target glbase.Enum, framebuffer glbase.Framebuffer) { - C.gl4_3core_glBindFramebuffer(gl.funcs, C.GLenum(target), C.GLuint(framebuffer)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsFramebuffer.xml -func (gl *GL) IsFramebuffer(framebuffer glbase.Framebuffer) bool { - glresult := C.gl4_3core_glIsFramebuffer(gl.funcs, C.GLuint(framebuffer)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetRenderbufferParameteriv.xml -func (gl *GL) GetRenderbufferParameteriv(target, pname glbase.Enum, params []int32) { - C.gl4_3core_glGetRenderbufferParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glRenderbufferStorage.xml -func (gl *GL) RenderbufferStorage(target, internalFormat glbase.Enum, width, height int) { - C.gl4_3core_glRenderbufferStorage(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height)) -} - -// GenRenderbuffers returns n renderbuffer object names in renderbuffers. -// There is no guarantee that the names form a contiguous set of integers; -// however, it is guaranteed that none of the returned names was in use -// immediately before the call to GenRenderbuffers. -// -// Renderbuffer object names returned by a call to GenRenderbuffers are not -// returned by subsequent calls, unless they are first deleted with -// DeleteRenderbuffers. -// -// The names returned in renderbuffers are marked as used, for the purposes -// of GenRenderbuffers only, but they acquire state and type only when they -// are first bound. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// GenRenderbuffers is available in GL version 3.0 or greater. -func (gl *GL) GenRenderbuffers(n int) []glbase.Renderbuffer { - if n == 0 { - return nil - } - renderbuffers := make([]glbase.Renderbuffer, n) - C.gl4_3core_glGenRenderbuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&renderbuffers[0]))) - return renderbuffers -} - -// DeleteRenderbuffers deletes the renderbuffer objects whose names are stored -// in the renderbuffers slice. The name zero is reserved by the GL and -// is silently ignored, should it occur in renderbuffers, as are other unused -// names. Once a renderbuffer object is deleted, its name is again unused and -// it has no contents. If a renderbuffer that is currently bound to the -// target GL.RENDERBUFFER is deleted, it is as though BindRenderbuffer had -// been executed with a target of GL.RENDERBUFFER and a name of zero. -// -// If a renderbuffer object is attached to one or more attachment points in -// the currently bound framebuffer, then it as if FramebufferRenderbuffer -// had been called, with a renderbuffer of zero for each attachment point to -// which this image was attached in the currently bound framebuffer. In other -// words, this renderbuffer object is first detached from all attachment -// ponits in the currently bound framebuffer. Note that the renderbuffer -// image is specifically not detached from any non-bound framebuffers. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// DeleteRenderbuffers is available in GL version 3.0 or greater. -func (gl *GL) DeleteRenderbuffers(renderbuffers []glbase.Renderbuffer) { - n := len(renderbuffers) - if n == 0 { - return - } - C.gl4_3core_glDeleteRenderbuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&renderbuffers[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindRenderbuffer.xml -func (gl *GL) BindRenderbuffer(target glbase.Enum, renderbuffer glbase.Renderbuffer) { - C.gl4_3core_glBindRenderbuffer(gl.funcs, C.GLenum(target), C.GLuint(renderbuffer)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsRenderbuffer.xml -func (gl *GL) IsRenderbuffer(renderbuffer glbase.Renderbuffer) bool { - glresult := C.gl4_3core_glIsRenderbuffer(gl.funcs, C.GLuint(renderbuffer)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearBufferfi.xml -func (gl *GL) ClearBufferfi(buffer glbase.Enum, drawbuffer int32, depth float32, stencil int32) { - C.gl4_3core_glClearBufferfi(gl.funcs, C.GLenum(buffer), C.GLint(drawbuffer), C.GLfloat(depth), C.GLint(stencil)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearBufferfv.xml -func (gl *GL) ClearBufferfv(buffer glbase.Enum, drawbuffer int32, value []float32) { - C.gl4_3core_glClearBufferfv(gl.funcs, C.GLenum(buffer), C.GLint(drawbuffer), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearBufferuiv.xml -func (gl *GL) ClearBufferuiv(buffer glbase.Enum, drawbuffer int32, value []uint32) { - C.gl4_3core_glClearBufferuiv(gl.funcs, C.GLenum(buffer), C.GLint(drawbuffer), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearBufferiv.xml -func (gl *GL) ClearBufferiv(buffer glbase.Enum, drawbuffer int32, value []int32) { - C.gl4_3core_glClearBufferiv(gl.funcs, C.GLenum(buffer), C.GLint(drawbuffer), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexParameterIuiv.xml -func (gl *GL) GetTexParameterIuiv(target, pname glbase.Enum, params []uint32) { - C.gl4_3core_glGetTexParameterIuiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTexParameterIiv.xml -func (gl *GL) GetTexParameterIiv(target, pname glbase.Enum, params []int32) { - C.gl4_3core_glGetTexParameterIiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexParameterIuiv.xml -func (gl *GL) TexParameterIuiv(target, pname glbase.Enum, params []uint32) { - C.gl4_3core_glTexParameterIuiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexParameterIiv.xml -func (gl *GL) TexParameterIiv(target, pname glbase.Enum, params []int32) { - C.gl4_3core_glTexParameterIiv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// Uniform4uiv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform4uiv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4uiv(location glbase.Uniform, value []uint32) { - if len(value) == 0 { - return - } - if len(value)%4 != 0 { - panic("invalid value length for Uniform4uiv") - } - count := len(value) / 4 - C.gl4_3core_glUniform4uiv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// Uniform3uiv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform3uiv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3uiv(location glbase.Uniform, value []uint32) { - if len(value) == 0 { - return - } - if len(value)%3 != 0 { - panic("invalid value length for Uniform3uiv") - } - count := len(value) / 3 - C.gl4_3core_glUniform3uiv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// Uniform2uiv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform2uiv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2uiv(location glbase.Uniform, value []uint32) { - if len(value) == 0 { - return - } - if len(value)%2 != 0 { - panic("invalid value length for Uniform2uiv") - } - count := len(value) / 2 - C.gl4_3core_glUniform2uiv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// Uniform1uiv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform1uiv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1uiv(location glbase.Uniform, value []uint32) { - if len(value) == 0 { - return - } - count := len(value) - C.gl4_3core_glUniform1uiv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// Uniform4ui modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform4ui operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4ui(location glbase.Uniform, v0, v1, v2, v3 uint32) { - C.gl4_3core_glUniform4ui(gl.funcs, C.GLint(location), C.GLuint(v0), C.GLuint(v1), C.GLuint(v2), C.GLuint(v3)) -} - -// Uniform3ui modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform3ui operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3ui(location glbase.Uniform, v0, v1, v2 uint32) { - C.gl4_3core_glUniform3ui(gl.funcs, C.GLint(location), C.GLuint(v0), C.GLuint(v1), C.GLuint(v2)) -} - -// Uniform2ui modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform2ui operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2ui(location glbase.Uniform, v0, v1 uint32) { - C.gl4_3core_glUniform2ui(gl.funcs, C.GLint(location), C.GLuint(v0), C.GLuint(v1)) -} - -// Uniform1ui modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform1ui operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1ui(location glbase.Uniform, v0 uint32) { - C.gl4_3core_glUniform1ui(gl.funcs, C.GLint(location), C.GLuint(v0)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetFragDataLocation.xml -func (gl *GL) GetFragDataLocation(program glbase.Program, name []byte) int32 { - glresult := C.gl4_3core_glGetFragDataLocation(gl.funcs, C.GLuint(program), (*C.GLchar)(unsafe.Pointer(&name[0]))) - return int32(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindFragDataLocation.xml -func (gl *GL) BindFragDataLocation(program glbase.Program, color uint32, name []byte) { - C.gl4_3core_glBindFragDataLocation(gl.funcs, C.GLuint(program), C.GLuint(color), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetUniformuiv.xml -func (gl *GL) GetUniformuiv(program glbase.Program, location glbase.Uniform, params []uint32) { - C.gl4_3core_glGetUniformuiv(gl.funcs, C.GLuint(program), C.GLint(location), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetVertexAttribIuiv.xml -func (gl *GL) GetVertexAttribIuiv(index glbase.Attrib, pname glbase.Enum, params []uint32) { - C.gl4_3core_glGetVertexAttribIuiv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetVertexAttribIiv.xml -func (gl *GL) GetVertexAttribIiv(index glbase.Attrib, pname glbase.Enum, params []int32) { - C.gl4_3core_glGetVertexAttribIiv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribIPointer.xml -func (gl *GL) VertexAttribIPointer(index glbase.Attrib, size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl4_3core_glVertexAttribIPointer(gl.funcs, C.GLuint(index), C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEndConditionalRender.xml -func (gl *GL) EndConditionalRender() { - C.gl4_3core_glEndConditionalRender(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBeginConditionalRender.xml -func (gl *GL) BeginConditionalRender(id uint32, mode glbase.Enum) { - C.gl4_3core_glBeginConditionalRender(gl.funcs, C.GLuint(id), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClampColor.xml -func (gl *GL) ClampColor(target, clamp glbase.Enum) { - C.gl4_3core_glClampColor(gl.funcs, C.GLenum(target), C.GLenum(clamp)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetTransformFeedbackVarying.xml -func (gl *GL) GetTransformFeedbackVarying(program glbase.Program, index uint32, bufSize int32, length []int32, size []int, gltype []glbase.Enum, name []byte) { - C.gl4_3core_glGetTransformFeedbackVarying(gl.funcs, C.GLuint(program), C.GLuint(index), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLsizei)(unsafe.Pointer(&size[0])), (*C.GLenum)(unsafe.Pointer(&gltype[0])), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindBufferBase.xml -func (gl *GL) BindBufferBase(target glbase.Enum, index uint32, buffer glbase.Buffer) { - C.gl4_3core_glBindBufferBase(gl.funcs, C.GLenum(target), C.GLuint(index), C.GLuint(buffer)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindBufferRange.xml -func (gl *GL) BindBufferRange(target glbase.Enum, index uint32, buffer glbase.Buffer, offset, size int) { - C.gl4_3core_glBindBufferRange(gl.funcs, C.GLenum(target), C.GLuint(index), C.GLuint(buffer), C.GLintptr(offset), C.GLsizeiptr(size)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEndTransformFeedback.xml -func (gl *GL) EndTransformFeedback() { - C.gl4_3core_glEndTransformFeedback(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBeginTransformFeedback.xml -func (gl *GL) BeginTransformFeedback(primitiveMode glbase.Enum) { - C.gl4_3core_glBeginTransformFeedback(gl.funcs, C.GLenum(primitiveMode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsEnabledi.xml -func (gl *GL) IsEnabledi(target glbase.Enum, index uint32) bool { - glresult := C.gl4_3core_glIsEnabledi(gl.funcs, C.GLenum(target), C.GLuint(index)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDisablei.xml -func (gl *GL) Disablei(target glbase.Enum, index uint32) { - C.gl4_3core_glDisablei(gl.funcs, C.GLenum(target), C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEnablei.xml -func (gl *GL) Enablei(target glbase.Enum, index uint32) { - C.gl4_3core_glEnablei(gl.funcs, C.GLenum(target), C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetIntegeri_v.xml -func (gl *GL) GetIntegeri_v(target glbase.Enum, index uint32, data []int32) { - C.gl4_3core_glGetIntegeri_v(gl.funcs, C.GLenum(target), C.GLuint(index), (*C.GLint)(unsafe.Pointer(&data[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetBooleani_v.xml -func (gl *GL) GetBooleani_v(target glbase.Enum, index uint32, data []bool) { - C.gl4_3core_glGetBooleani_v(gl.funcs, C.GLenum(target), C.GLuint(index), (*C.GLboolean)(unsafe.Pointer(&data[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorMaski.xml -func (gl *GL) ColorMaski(index uint32, r, g, b, a bool) { - C.gl4_3core_glColorMaski(gl.funcs, C.GLuint(index), *(*C.GLboolean)(unsafe.Pointer(&r)), *(*C.GLboolean)(unsafe.Pointer(&g)), *(*C.GLboolean)(unsafe.Pointer(&b)), *(*C.GLboolean)(unsafe.Pointer(&a))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyBufferSubData.xml -func (gl *GL) CopyBufferSubData(readTarget, writeTarget glbase.Enum, readOffset, writeOffset, size int) { - C.gl4_3core_glCopyBufferSubData(gl.funcs, C.GLenum(readTarget), C.GLenum(writeTarget), C.GLintptr(readOffset), C.GLintptr(writeOffset), C.GLsizeiptr(size)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformBlockBinding.xml -func (gl *GL) UniformBlockBinding(program glbase.Program, v0, v1 uint32) { - C.gl4_3core_glUniformBlockBinding(gl.funcs, C.GLuint(program), C.GLuint(v0), C.GLuint(v1)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveUniformBlockName.xml -func (gl *GL) GetActiveUniformBlockName(program glbase.Program, uniformBlockIndex uint32, bufSize int32, length []int32, uniformBlockName []byte) { - C.gl4_3core_glGetActiveUniformBlockName(gl.funcs, C.GLuint(program), C.GLuint(uniformBlockIndex), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLchar)(unsafe.Pointer(&uniformBlockName[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveUniformBlockiv.xml -func (gl *GL) GetActiveUniformBlockiv(program glbase.Program, uniformBlockIndex uint32, pname glbase.Enum, params []int32) { - C.gl4_3core_glGetActiveUniformBlockiv(gl.funcs, C.GLuint(program), C.GLuint(uniformBlockIndex), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetUniformBlockIndex.xml -func (gl *GL) GetUniformBlockIndex(program glbase.Program, uniformBlockName []byte) uint32 { - glresult := C.gl4_3core_glGetUniformBlockIndex(gl.funcs, C.GLuint(program), (*C.GLchar)(unsafe.Pointer(&uniformBlockName[0]))) - return uint32(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveUniformName.xml -func (gl *GL) GetActiveUniformName(program glbase.Program, uniformIndex uint32, bufSize int32, length []int32, uniformName []byte) { - C.gl4_3core_glGetActiveUniformName(gl.funcs, C.GLuint(program), C.GLuint(uniformIndex), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLchar)(unsafe.Pointer(&uniformName[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveUniformsiv.xml -func (gl *GL) GetActiveUniformsiv(program glbase.Program, uniformCount int32, uniformIndices []uint32, pname glbase.Enum, params []int32) { - C.gl4_3core_glGetActiveUniformsiv(gl.funcs, C.GLuint(program), C.GLsizei(uniformCount), (*C.GLuint)(unsafe.Pointer(&uniformIndices[0])), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPrimitiveRestartIndex.xml -func (gl *GL) PrimitiveRestartIndex(index uint32) { - C.gl4_3core_glPrimitiveRestartIndex(gl.funcs, C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexBuffer.xml -func (gl *GL) TexBuffer(target, internalFormat glbase.Enum, buffer glbase.Buffer) { - C.gl4_3core_glTexBuffer(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLuint(buffer)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawElementsInstanced.xml -func (gl *GL) DrawElementsInstanced(mode glbase.Enum, count int, gltype glbase.Enum, indices interface{}, instancecount int32) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl4_3core_glDrawElementsInstanced(gl.funcs, C.GLenum(mode), C.GLsizei(count), C.GLenum(gltype), indices_ptr, C.GLsizei(instancecount)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawArraysInstanced.xml -func (gl *GL) DrawArraysInstanced(mode glbase.Enum, first, count int, instancecount int32) { - C.gl4_3core_glDrawArraysInstanced(gl.funcs, C.GLenum(mode), C.GLint(first), C.GLsizei(count), C.GLsizei(instancecount)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSampleMaski.xml -func (gl *GL) SampleMaski(index uint32, mask glbase.Bitfield) { - C.gl4_3core_glSampleMaski(gl.funcs, C.GLuint(index), C.GLbitfield(mask)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetMultisamplefv.xml -func (gl *GL) GetMultisamplefv(pname glbase.Enum, index uint32, val []float32) { - C.gl4_3core_glGetMultisamplefv(gl.funcs, C.GLenum(pname), C.GLuint(index), (*C.GLfloat)(unsafe.Pointer(&val[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexImage3DMultisample.xml -func (gl *GL) TexImage3DMultisample(target glbase.Enum, samples, internalFormat int32, width, height int, depth int32, fixedsamplelocations bool) { - C.gl4_3core_glTexImage3DMultisample(gl.funcs, C.GLenum(target), C.GLsizei(samples), C.GLint(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), *(*C.GLboolean)(unsafe.Pointer(&fixedsamplelocations))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexImage2DMultisample.xml -func (gl *GL) TexImage2DMultisample(target glbase.Enum, samples, internalFormat int32, width, height int, fixedsamplelocations bool) { - C.gl4_3core_glTexImage2DMultisample(gl.funcs, C.GLenum(target), C.GLsizei(samples), C.GLint(internalFormat), C.GLsizei(width), C.GLsizei(height), *(*C.GLboolean)(unsafe.Pointer(&fixedsamplelocations))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetSynciv.xml -func (gl *GL) GetSynciv(sync glbase.Sync, pname glbase.Enum, bufSize int32, length, values []int32) { - C.gl4_3core_glGetSynciv(gl.funcs, C.GLsync(unsafe.Pointer(sync)), C.GLenum(pname), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLint)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetInteger64v.xml -func (gl *GL) GetInteger64v(pname glbase.Enum, params []int64) { - C.gl4_3core_glGetInteger64v(gl.funcs, C.GLenum(pname), (*C.GLint64)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glWaitSync.xml -func (gl *GL) WaitSync(sync glbase.Sync, flags glbase.Bitfield, timeout uint64) { - C.gl4_3core_glWaitSync(gl.funcs, C.GLsync(unsafe.Pointer(sync)), C.GLbitfield(flags), C.GLuint64(timeout)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClientWaitSync.xml -func (gl *GL) ClientWaitSync(sync glbase.Sync, flags glbase.Bitfield, timeout uint64) glbase.Enum { - glresult := C.gl4_3core_glClientWaitSync(gl.funcs, C.GLsync(unsafe.Pointer(sync)), C.GLbitfield(flags), C.GLuint64(timeout)) - return glbase.Enum(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDeleteSync.xml -func (gl *GL) DeleteSync(sync glbase.Sync) { - C.gl4_3core_glDeleteSync(gl.funcs, C.GLsync(unsafe.Pointer(sync))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsSync.xml -func (gl *GL) IsSync(sync glbase.Sync) bool { - glresult := C.gl4_3core_glIsSync(gl.funcs, C.GLsync(unsafe.Pointer(sync))) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFenceSync.xml -func (gl *GL) FenceSync(condition glbase.Enum, flags glbase.Bitfield) glbase.Sync { - glresult := C.gl4_3core_glFenceSync(gl.funcs, C.GLenum(condition), C.GLbitfield(flags)) - return glbase.Sync(unsafe.Pointer(glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProvokingVertex.xml -func (gl *GL) ProvokingVertex(mode glbase.Enum) { - C.gl4_3core_glProvokingVertex(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawElementsInstancedBaseVertex.xml -func (gl *GL) DrawElementsInstancedBaseVertex(mode glbase.Enum, count int, gltype glbase.Enum, indices interface{}, instancecount, basevertex int32) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl4_3core_glDrawElementsInstancedBaseVertex(gl.funcs, C.GLenum(mode), C.GLsizei(count), C.GLenum(gltype), indices_ptr, C.GLsizei(instancecount), C.GLint(basevertex)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawRangeElementsBaseVertex.xml -func (gl *GL) DrawRangeElementsBaseVertex(mode glbase.Enum, start, end uint32, count int, gltype glbase.Enum, indices interface{}, basevertex int32) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl4_3core_glDrawRangeElementsBaseVertex(gl.funcs, C.GLenum(mode), C.GLuint(start), C.GLuint(end), C.GLsizei(count), C.GLenum(gltype), indices_ptr, C.GLint(basevertex)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawElementsBaseVertex.xml -func (gl *GL) DrawElementsBaseVertex(mode glbase.Enum, count int, gltype glbase.Enum, indices interface{}, basevertex int32) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl4_3core_glDrawElementsBaseVertex(gl.funcs, C.GLenum(mode), C.GLsizei(count), C.GLenum(gltype), indices_ptr, C.GLint(basevertex)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFramebufferTexture.xml -func (gl *GL) FramebufferTexture(target, attachment glbase.Enum, texture glbase.Texture, level int) { - C.gl4_3core_glFramebufferTexture(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLuint(texture), C.GLint(level)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetBufferParameteri64v.xml -func (gl *GL) GetBufferParameteri64v(target, pname glbase.Enum, params []int64) { - C.gl4_3core_glGetBufferParameteri64v(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint64)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetInteger64i_v.xml -func (gl *GL) GetInteger64i_v(target glbase.Enum, index uint32, data []int64) { - C.gl4_3core_glGetInteger64i_v(gl.funcs, C.GLenum(target), C.GLuint(index), (*C.GLint64)(unsafe.Pointer(&data[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribP4uiv.xml -func (gl *GL) VertexAttribP4uiv(index glbase.Attrib, gltype glbase.Enum, normalized bool, value []uint32) { - C.gl4_3core_glVertexAttribP4uiv(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribP4ui.xml -func (gl *GL) VertexAttribP4ui(index glbase.Attrib, gltype glbase.Enum, normalized bool, value uint32) { - C.gl4_3core_glVertexAttribP4ui(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribP3uiv.xml -func (gl *GL) VertexAttribP3uiv(index glbase.Attrib, gltype glbase.Enum, normalized bool, value []uint32) { - C.gl4_3core_glVertexAttribP3uiv(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribP3ui.xml -func (gl *GL) VertexAttribP3ui(index glbase.Attrib, gltype glbase.Enum, normalized bool, value uint32) { - C.gl4_3core_glVertexAttribP3ui(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribP2uiv.xml -func (gl *GL) VertexAttribP2uiv(index glbase.Attrib, gltype glbase.Enum, normalized bool, value []uint32) { - C.gl4_3core_glVertexAttribP2uiv(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribP2ui.xml -func (gl *GL) VertexAttribP2ui(index glbase.Attrib, gltype glbase.Enum, normalized bool, value uint32) { - C.gl4_3core_glVertexAttribP2ui(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribP1uiv.xml -func (gl *GL) VertexAttribP1uiv(index glbase.Attrib, gltype glbase.Enum, normalized bool, value []uint32) { - C.gl4_3core_glVertexAttribP1uiv(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribP1ui.xml -func (gl *GL) VertexAttribP1ui(index glbase.Attrib, gltype glbase.Enum, normalized bool, value uint32) { - C.gl4_3core_glVertexAttribP1ui(gl.funcs, C.GLuint(index), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColorP3uiv.xml -func (gl *GL) SecondaryColorP3uiv(gltype glbase.Enum, color []uint32) { - C.gl4_3core_glSecondaryColorP3uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&color[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSecondaryColorP3ui.xml -func (gl *GL) SecondaryColorP3ui(gltype glbase.Enum, color uint32) { - C.gl4_3core_glSecondaryColorP3ui(gl.funcs, C.GLenum(gltype), C.GLuint(color)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorP4uiv.xml -func (gl *GL) ColorP4uiv(gltype glbase.Enum, color []uint32) { - C.gl4_3core_glColorP4uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&color[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorP4ui.xml -func (gl *GL) ColorP4ui(gltype glbase.Enum, color uint32) { - C.gl4_3core_glColorP4ui(gl.funcs, C.GLenum(gltype), C.GLuint(color)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorP3uiv.xml -func (gl *GL) ColorP3uiv(gltype glbase.Enum, color []uint32) { - C.gl4_3core_glColorP3uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&color[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glColorP3ui.xml -func (gl *GL) ColorP3ui(gltype glbase.Enum, color uint32) { - C.gl4_3core_glColorP3ui(gl.funcs, C.GLenum(gltype), C.GLuint(color)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glNormalP3uiv.xml -func (gl *GL) NormalP3uiv(gltype glbase.Enum, coords []uint32) { - C.gl4_3core_glNormalP3uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glNormalP3ui.xml -func (gl *GL) NormalP3ui(gltype glbase.Enum, coords uint32) { - C.gl4_3core_glNormalP3ui(gl.funcs, C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoordP4uiv.xml -func (gl *GL) MultiTexCoordP4uiv(texture, gltype glbase.Enum, coords []uint32) { - C.gl4_3core_glMultiTexCoordP4uiv(gl.funcs, C.GLenum(texture), C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoordP4ui.xml -func (gl *GL) MultiTexCoordP4ui(texture, gltype glbase.Enum, coords uint32) { - C.gl4_3core_glMultiTexCoordP4ui(gl.funcs, C.GLenum(texture), C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoordP3uiv.xml -func (gl *GL) MultiTexCoordP3uiv(texture, gltype glbase.Enum, coords []uint32) { - C.gl4_3core_glMultiTexCoordP3uiv(gl.funcs, C.GLenum(texture), C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoordP3ui.xml -func (gl *GL) MultiTexCoordP3ui(texture, gltype glbase.Enum, coords uint32) { - C.gl4_3core_glMultiTexCoordP3ui(gl.funcs, C.GLenum(texture), C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoordP2uiv.xml -func (gl *GL) MultiTexCoordP2uiv(texture, gltype glbase.Enum, coords []uint32) { - C.gl4_3core_glMultiTexCoordP2uiv(gl.funcs, C.GLenum(texture), C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoordP2ui.xml -func (gl *GL) MultiTexCoordP2ui(texture, gltype glbase.Enum, coords uint32) { - C.gl4_3core_glMultiTexCoordP2ui(gl.funcs, C.GLenum(texture), C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoordP1uiv.xml -func (gl *GL) MultiTexCoordP1uiv(texture, gltype glbase.Enum, coords []uint32) { - C.gl4_3core_glMultiTexCoordP1uiv(gl.funcs, C.GLenum(texture), C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiTexCoordP1ui.xml -func (gl *GL) MultiTexCoordP1ui(texture, gltype glbase.Enum, coords uint32) { - C.gl4_3core_glMultiTexCoordP1ui(gl.funcs, C.GLenum(texture), C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordP4uiv.xml -func (gl *GL) TexCoordP4uiv(gltype glbase.Enum, coords []uint32) { - C.gl4_3core_glTexCoordP4uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordP4ui.xml -func (gl *GL) TexCoordP4ui(gltype glbase.Enum, coords uint32) { - C.gl4_3core_glTexCoordP4ui(gl.funcs, C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordP3uiv.xml -func (gl *GL) TexCoordP3uiv(gltype glbase.Enum, coords []uint32) { - C.gl4_3core_glTexCoordP3uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordP3ui.xml -func (gl *GL) TexCoordP3ui(gltype glbase.Enum, coords uint32) { - C.gl4_3core_glTexCoordP3ui(gl.funcs, C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordP2uiv.xml -func (gl *GL) TexCoordP2uiv(gltype glbase.Enum, coords []uint32) { - C.gl4_3core_glTexCoordP2uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordP2ui.xml -func (gl *GL) TexCoordP2ui(gltype glbase.Enum, coords uint32) { - C.gl4_3core_glTexCoordP2ui(gl.funcs, C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordP1uiv.xml -func (gl *GL) TexCoordP1uiv(gltype glbase.Enum, coords []uint32) { - C.gl4_3core_glTexCoordP1uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&coords[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexCoordP1ui.xml -func (gl *GL) TexCoordP1ui(gltype glbase.Enum, coords uint32) { - C.gl4_3core_glTexCoordP1ui(gl.funcs, C.GLenum(gltype), C.GLuint(coords)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexP4uiv.xml -func (gl *GL) VertexP4uiv(gltype glbase.Enum, value []uint32) { - C.gl4_3core_glVertexP4uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexP4ui.xml -func (gl *GL) VertexP4ui(gltype glbase.Enum, value uint32) { - C.gl4_3core_glVertexP4ui(gl.funcs, C.GLenum(gltype), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexP3uiv.xml -func (gl *GL) VertexP3uiv(gltype glbase.Enum, value []uint32) { - C.gl4_3core_glVertexP3uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexP3ui.xml -func (gl *GL) VertexP3ui(gltype glbase.Enum, value uint32) { - C.gl4_3core_glVertexP3ui(gl.funcs, C.GLenum(gltype), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexP2uiv.xml -func (gl *GL) VertexP2uiv(gltype glbase.Enum, value []uint32) { - C.gl4_3core_glVertexP2uiv(gl.funcs, C.GLenum(gltype), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexP2ui.xml -func (gl *GL) VertexP2ui(gltype glbase.Enum, value uint32) { - C.gl4_3core_glVertexP2ui(gl.funcs, C.GLenum(gltype), C.GLuint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetQueryObjectui64v.xml -func (gl *GL) GetQueryObjectui64v(id uint32, pname glbase.Enum, params []uint64) { - C.gl4_3core_glGetQueryObjectui64v(gl.funcs, C.GLuint(id), C.GLenum(pname), (*C.GLuint64)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetQueryObjecti64v.xml -func (gl *GL) GetQueryObjecti64v(id uint32, pname glbase.Enum, params []int64) { - C.gl4_3core_glGetQueryObjecti64v(gl.funcs, C.GLuint(id), C.GLenum(pname), (*C.GLint64)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glQueryCounter.xml -func (gl *GL) QueryCounter(id uint32, target glbase.Enum) { - C.gl4_3core_glQueryCounter(gl.funcs, C.GLuint(id), C.GLenum(target)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetSamplerParameterIuiv.xml -func (gl *GL) GetSamplerParameterIuiv(sampler uint32, pname glbase.Enum, params []uint32) { - C.gl4_3core_glGetSamplerParameterIuiv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetSamplerParameterfv.xml -func (gl *GL) GetSamplerParameterfv(sampler uint32, pname glbase.Enum, params []float32) { - C.gl4_3core_glGetSamplerParameterfv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetSamplerParameterIiv.xml -func (gl *GL) GetSamplerParameterIiv(sampler uint32, pname glbase.Enum, params []int32) { - C.gl4_3core_glGetSamplerParameterIiv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetSamplerParameteriv.xml -func (gl *GL) GetSamplerParameteriv(sampler uint32, pname glbase.Enum, params []int32) { - C.gl4_3core_glGetSamplerParameteriv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSamplerParameterIuiv.xml -func (gl *GL) SamplerParameterIuiv(sampler uint32, pname glbase.Enum, param []uint32) { - C.gl4_3core_glSamplerParameterIuiv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLuint)(unsafe.Pointer(¶m[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSamplerParameterIiv.xml -func (gl *GL) SamplerParameterIiv(sampler uint32, pname glbase.Enum, param []int32) { - C.gl4_3core_glSamplerParameterIiv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶m[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSamplerParameterfv.xml -func (gl *GL) SamplerParameterfv(sampler uint32, pname glbase.Enum, param []float32) { - C.gl4_3core_glSamplerParameterfv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶m[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSamplerParameterf.xml -func (gl *GL) SamplerParameterf(sampler uint32, pname glbase.Enum, param float32) { - C.gl4_3core_glSamplerParameterf(gl.funcs, C.GLuint(sampler), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSamplerParameteriv.xml -func (gl *GL) SamplerParameteriv(sampler uint32, pname glbase.Enum, param []int32) { - C.gl4_3core_glSamplerParameteriv(gl.funcs, C.GLuint(sampler), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶m[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glSamplerParameteri.xml -func (gl *GL) SamplerParameteri(sampler uint32, pname glbase.Enum, param int32) { - C.gl4_3core_glSamplerParameteri(gl.funcs, C.GLuint(sampler), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindSampler.xml -func (gl *GL) BindSampler(unit, sampler uint32) { - C.gl4_3core_glBindSampler(gl.funcs, C.GLuint(unit), C.GLuint(sampler)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsSampler.xml -func (gl *GL) IsSampler(sampler uint32) bool { - glresult := C.gl4_3core_glIsSampler(gl.funcs, C.GLuint(sampler)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDeleteSamplers.xml -func (gl *GL) DeleteSamplers(count int, samplers []uint32) { - C.gl4_3core_glDeleteSamplers(gl.funcs, C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&samplers[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGenSamplers.xml -func (gl *GL) GenSamplers(count int, samplers []uint32) { - C.gl4_3core_glGenSamplers(gl.funcs, C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&samplers[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetFragDataIndex.xml -func (gl *GL) GetFragDataIndex(program glbase.Program, name []byte) int32 { - glresult := C.gl4_3core_glGetFragDataIndex(gl.funcs, C.GLuint(program), (*C.GLchar)(unsafe.Pointer(&name[0]))) - return int32(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindFragDataLocationIndexed.xml -func (gl *GL) BindFragDataLocationIndexed(program glbase.Program, colorNumber, index uint32, name []byte) { - C.gl4_3core_glBindFragDataLocationIndexed(gl.funcs, C.GLuint(program), C.GLuint(colorNumber), C.GLuint(index), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribDivisor.xml -func (gl *GL) VertexAttribDivisor(index glbase.Attrib, divisor uint32) { - C.gl4_3core_glVertexAttribDivisor(gl.funcs, C.GLuint(index), C.GLuint(divisor)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetQueryIndexediv.xml -func (gl *GL) GetQueryIndexediv(target glbase.Enum, index uint32, pname glbase.Enum, params []int32) { - C.gl4_3core_glGetQueryIndexediv(gl.funcs, C.GLenum(target), C.GLuint(index), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glEndQueryIndexed.xml -func (gl *GL) EndQueryIndexed(target glbase.Enum, index uint32) { - C.gl4_3core_glEndQueryIndexed(gl.funcs, C.GLenum(target), C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBeginQueryIndexed.xml -func (gl *GL) BeginQueryIndexed(target glbase.Enum, index, id uint32) { - C.gl4_3core_glBeginQueryIndexed(gl.funcs, C.GLenum(target), C.GLuint(index), C.GLuint(id)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawTransformFeedbackStream.xml -func (gl *GL) DrawTransformFeedbackStream(mode glbase.Enum, id, stream uint32) { - C.gl4_3core_glDrawTransformFeedbackStream(gl.funcs, C.GLenum(mode), C.GLuint(id), C.GLuint(stream)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawTransformFeedback.xml -func (gl *GL) DrawTransformFeedback(mode glbase.Enum, id uint32) { - C.gl4_3core_glDrawTransformFeedback(gl.funcs, C.GLenum(mode), C.GLuint(id)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glResumeTransformFeedback.xml -func (gl *GL) ResumeTransformFeedback() { - C.gl4_3core_glResumeTransformFeedback(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPauseTransformFeedback.xml -func (gl *GL) PauseTransformFeedback() { - C.gl4_3core_glPauseTransformFeedback(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsTransformFeedback.xml -func (gl *GL) IsTransformFeedback(id uint32) bool { - glresult := C.gl4_3core_glIsTransformFeedback(gl.funcs, C.GLuint(id)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGenTransformFeedbacks.xml -func (gl *GL) GenTransformFeedbacks(n int, ids []uint32) { - C.gl4_3core_glGenTransformFeedbacks(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&ids[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDeleteTransformFeedbacks.xml -func (gl *GL) DeleteTransformFeedbacks(n int, ids []uint32) { - C.gl4_3core_glDeleteTransformFeedbacks(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&ids[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindTransformFeedback.xml -func (gl *GL) BindTransformFeedback(target glbase.Enum, id uint32) { - C.gl4_3core_glBindTransformFeedback(gl.funcs, C.GLenum(target), C.GLuint(id)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPatchParameterfv.xml -func (gl *GL) PatchParameterfv(pname glbase.Enum, values []float32) { - C.gl4_3core_glPatchParameterfv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glPatchParameteri.xml -func (gl *GL) PatchParameteri(pname glbase.Enum, value int32) { - C.gl4_3core_glPatchParameteri(gl.funcs, C.GLenum(pname), C.GLint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetProgramStageiv.xml -func (gl *GL) GetProgramStageiv(program glbase.Program, shadertype, pname glbase.Enum, values []int32) { - C.gl4_3core_glGetProgramStageiv(gl.funcs, C.GLuint(program), C.GLenum(shadertype), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetUniformSubroutineuiv.xml -func (gl *GL) GetUniformSubroutineuiv(shadertype glbase.Enum, location glbase.Uniform, params []uint32) { - C.gl4_3core_glGetUniformSubroutineuiv(gl.funcs, C.GLenum(shadertype), C.GLint(location), (*C.GLuint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformSubroutinesuiv.xml -func (gl *GL) UniformSubroutinesuiv(shadertype glbase.Enum, count int, value []uint32) { - C.gl4_3core_glUniformSubroutinesuiv(gl.funcs, C.GLenum(shadertype), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveSubroutineName.xml -func (gl *GL) GetActiveSubroutineName(program glbase.Program, shadertype glbase.Enum, index uint32, bufSize int32, length []int32, name []byte) { - C.gl4_3core_glGetActiveSubroutineName(gl.funcs, C.GLuint(program), C.GLenum(shadertype), C.GLuint(index), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveSubroutineUniformName.xml -func (gl *GL) GetActiveSubroutineUniformName(program glbase.Program, shadertype glbase.Enum, index uint32, bufSize int32, length []int32, name []byte) { - C.gl4_3core_glGetActiveSubroutineUniformName(gl.funcs, C.GLuint(program), C.GLenum(shadertype), C.GLuint(index), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveSubroutineUniformiv.xml -func (gl *GL) GetActiveSubroutineUniformiv(program glbase.Program, shadertype glbase.Enum, index uint32, pname glbase.Enum, values []int32) { - C.gl4_3core_glGetActiveSubroutineUniformiv(gl.funcs, C.GLuint(program), C.GLenum(shadertype), C.GLuint(index), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetSubroutineIndex.xml -func (gl *GL) GetSubroutineIndex(program glbase.Program, shadertype glbase.Enum, name []byte) uint32 { - glresult := C.gl4_3core_glGetSubroutineIndex(gl.funcs, C.GLuint(program), C.GLenum(shadertype), (*C.GLchar)(unsafe.Pointer(&name[0]))) - return uint32(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetSubroutineUniformLocation.xml -func (gl *GL) GetSubroutineUniformLocation(program glbase.Program, shadertype glbase.Enum, name []byte) int32 { - glresult := C.gl4_3core_glGetSubroutineUniformLocation(gl.funcs, C.GLuint(program), C.GLenum(shadertype), (*C.GLchar)(unsafe.Pointer(&name[0]))) - return int32(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetUniformdv.xml -func (gl *GL) GetUniformdv(program glbase.Program, location glbase.Uniform, params []float64) { - C.gl4_3core_glGetUniformdv(gl.funcs, C.GLuint(program), C.GLint(location), (*C.GLdouble)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix4x3dv.xml -func (gl *GL) UniformMatrix4x3dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_3core_glUniformMatrix4x3dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix4x2dv.xml -func (gl *GL) UniformMatrix4x2dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_3core_glUniformMatrix4x2dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix3x4dv.xml -func (gl *GL) UniformMatrix3x4dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_3core_glUniformMatrix3x4dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix3x2dv.xml -func (gl *GL) UniformMatrix3x2dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_3core_glUniformMatrix3x2dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix2x4dv.xml -func (gl *GL) UniformMatrix2x4dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_3core_glUniformMatrix2x4dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix2x3dv.xml -func (gl *GL) UniformMatrix2x3dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_3core_glUniformMatrix2x3dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix4dv.xml -func (gl *GL) UniformMatrix4dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_3core_glUniformMatrix4dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix3dv.xml -func (gl *GL) UniformMatrix3dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_3core_glUniformMatrix3dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniformMatrix2dv.xml -func (gl *GL) UniformMatrix2dv(location glbase.Uniform, count int, transpose bool, value []float64) { - C.gl4_3core_glUniformMatrix2dv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniform4dv.xml -func (gl *GL) Uniform4dv(location glbase.Uniform, count int, value []float64) { - C.gl4_3core_glUniform4dv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniform3dv.xml -func (gl *GL) Uniform3dv(location glbase.Uniform, count int, value []float64) { - C.gl4_3core_glUniform3dv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniform2dv.xml -func (gl *GL) Uniform2dv(location glbase.Uniform, count int, value []float64) { - C.gl4_3core_glUniform2dv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniform1dv.xml -func (gl *GL) Uniform1dv(location glbase.Uniform, count int, value []float64) { - C.gl4_3core_glUniform1dv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniform4d.xml -func (gl *GL) Uniform4d(location glbase.Uniform, v0, v1, v2, v3 float64) { - C.gl4_3core_glUniform4d(gl.funcs, C.GLint(location), C.GLdouble(v0), C.GLdouble(v1), C.GLdouble(v2), C.GLdouble(v3)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniform3d.xml -func (gl *GL) Uniform3d(location glbase.Uniform, v0, v1, v2 float64) { - C.gl4_3core_glUniform3d(gl.funcs, C.GLint(location), C.GLdouble(v0), C.GLdouble(v1), C.GLdouble(v2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniform2d.xml -func (gl *GL) Uniform2d(location glbase.Uniform, v0, v1 float64) { - C.gl4_3core_glUniform2d(gl.funcs, C.GLint(location), C.GLdouble(v0), C.GLdouble(v1)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUniform1d.xml -func (gl *GL) Uniform1d(location glbase.Uniform, v0 float64) { - C.gl4_3core_glUniform1d(gl.funcs, C.GLint(location), C.GLdouble(v0)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawElementsIndirect.xml -func (gl *GL) DrawElementsIndirect(mode, gltype glbase.Enum, indirect interface{}) { - var indirect_ptr unsafe.Pointer - var indirect_v = reflect.ValueOf(indirect) - if indirect != nil && indirect_v.Kind() != reflect.Slice { - panic("parameter indirect must be a slice") - } - if indirect != nil { - indirect_ptr = unsafe.Pointer(indirect_v.Index(0).Addr().Pointer()) - } - C.gl4_3core_glDrawElementsIndirect(gl.funcs, C.GLenum(mode), C.GLenum(gltype), indirect_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawArraysIndirect.xml -func (gl *GL) DrawArraysIndirect(mode glbase.Enum, indirect interface{}) { - var indirect_ptr unsafe.Pointer - var indirect_v = reflect.ValueOf(indirect) - if indirect != nil && indirect_v.Kind() != reflect.Slice { - panic("parameter indirect must be a slice") - } - if indirect != nil { - indirect_ptr = unsafe.Pointer(indirect_v.Index(0).Addr().Pointer()) - } - C.gl4_3core_glDrawArraysIndirect(gl.funcs, C.GLenum(mode), indirect_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendFuncSeparatei.xml -func (gl *GL) BlendFuncSeparatei(buf uint32, srcRGB, dstRGB, srcAlpha, dstAlpha glbase.Enum) { - C.gl4_3core_glBlendFuncSeparatei(gl.funcs, C.GLuint(buf), C.GLenum(srcRGB), C.GLenum(dstRGB), C.GLenum(srcAlpha), C.GLenum(dstAlpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendFunci.xml -func (gl *GL) BlendFunci(buf uint32, src, dst glbase.Enum) { - C.gl4_3core_glBlendFunci(gl.funcs, C.GLuint(buf), C.GLenum(src), C.GLenum(dst)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendEquationSeparatei.xml -func (gl *GL) BlendEquationSeparatei(buf uint32, modeRGB, modeAlpha glbase.Enum) { - C.gl4_3core_glBlendEquationSeparatei(gl.funcs, C.GLuint(buf), C.GLenum(modeRGB), C.GLenum(modeAlpha)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBlendEquationi.xml -func (gl *GL) BlendEquationi(buf uint32, mode glbase.Enum) { - C.gl4_3core_glBlendEquationi(gl.funcs, C.GLuint(buf), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMinSampleShading.xml -func (gl *GL) MinSampleShading(value float32) { - C.gl4_3core_glMinSampleShading(gl.funcs, C.GLfloat(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetDoublei_v.xml -func (gl *GL) GetDoublei_v(target glbase.Enum, index uint32, data []float64) { - C.gl4_3core_glGetDoublei_v(gl.funcs, C.GLenum(target), C.GLuint(index), (*C.GLdouble)(unsafe.Pointer(&data[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetFloati_v.xml -func (gl *GL) GetFloati_v(target glbase.Enum, index uint32, data []float32) { - C.gl4_3core_glGetFloati_v(gl.funcs, C.GLenum(target), C.GLuint(index), (*C.GLfloat)(unsafe.Pointer(&data[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDepthRangeIndexed.xml -func (gl *GL) DepthRangeIndexed(index uint32, n, f float64) { - C.gl4_3core_glDepthRangeIndexed(gl.funcs, C.GLuint(index), C.GLdouble(n), C.GLdouble(f)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDepthRangeArrayv.xml -func (gl *GL) DepthRangeArrayv(first uint32, count int, v []float64) { - C.gl4_3core_glDepthRangeArrayv(gl.funcs, C.GLuint(first), C.GLsizei(count), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glScissorIndexedv.xml -func (gl *GL) ScissorIndexedv(index uint32, v []int32) { - C.gl4_3core_glScissorIndexedv(gl.funcs, C.GLuint(index), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glScissorIndexed.xml -func (gl *GL) ScissorIndexed(index uint32, left, bottom int32, width, height int) { - C.gl4_3core_glScissorIndexed(gl.funcs, C.GLuint(index), C.GLint(left), C.GLint(bottom), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glScissorArrayv.xml -func (gl *GL) ScissorArrayv(first uint32, count int, v []int32) { - C.gl4_3core_glScissorArrayv(gl.funcs, C.GLuint(first), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glViewportIndexedfv.xml -func (gl *GL) ViewportIndexedfv(index uint32, v []float32) { - C.gl4_3core_glViewportIndexedfv(gl.funcs, C.GLuint(index), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glViewportIndexedf.xml -func (gl *GL) ViewportIndexedf(index uint32, x, y, w, h float32) { - C.gl4_3core_glViewportIndexedf(gl.funcs, C.GLuint(index), C.GLfloat(x), C.GLfloat(y), C.GLfloat(w), C.GLfloat(h)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glViewportArrayv.xml -func (gl *GL) ViewportArrayv(first uint32, count int, v []float32) { - C.gl4_3core_glViewportArrayv(gl.funcs, C.GLuint(first), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetVertexAttribLdv.xml -func (gl *GL) GetVertexAttribLdv(index glbase.Attrib, pname glbase.Enum, params []float64) { - C.gl4_3core_glGetVertexAttribLdv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLdouble)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribLPointer.xml -func (gl *GL) VertexAttribLPointer(index glbase.Attrib, size int, gltype glbase.Enum, stride int, pointer interface{}) { - var pointer_ptr unsafe.Pointer - var pointer_v = reflect.ValueOf(pointer) - if pointer != nil && pointer_v.Kind() != reflect.Slice { - panic("parameter pointer must be a slice") - } - if pointer != nil { - pointer_ptr = unsafe.Pointer(pointer_v.Index(0).Addr().Pointer()) - } - C.gl4_3core_glVertexAttribLPointer(gl.funcs, C.GLuint(index), C.GLint(size), C.GLenum(gltype), C.GLsizei(stride), pointer_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribL4dv.xml -func (gl *GL) VertexAttribL4dv(index glbase.Attrib, v []float64) { - if len(v) != 4 { - panic("parameter v has incorrect length") - } - C.gl4_3core_glVertexAttribL4dv(gl.funcs, C.GLuint(index), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribL3dv.xml -func (gl *GL) VertexAttribL3dv(index glbase.Attrib, v []float64) { - if len(v) != 3 { - panic("parameter v has incorrect length") - } - C.gl4_3core_glVertexAttribL3dv(gl.funcs, C.GLuint(index), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribL2dv.xml -func (gl *GL) VertexAttribL2dv(index glbase.Attrib, v []float64) { - if len(v) != 2 { - panic("parameter v has incorrect length") - } - C.gl4_3core_glVertexAttribL2dv(gl.funcs, C.GLuint(index), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribL1dv.xml -func (gl *GL) VertexAttribL1dv(index glbase.Attrib, v []float64) { - C.gl4_3core_glVertexAttribL1dv(gl.funcs, C.GLuint(index), (*C.GLdouble)(unsafe.Pointer(&v[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribL4d.xml -func (gl *GL) VertexAttribL4d(index glbase.Attrib, x, y, z, w float64) { - C.gl4_3core_glVertexAttribL4d(gl.funcs, C.GLuint(index), C.GLdouble(x), C.GLdouble(y), C.GLdouble(z), C.GLdouble(w)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribL3d.xml -func (gl *GL) VertexAttribL3d(index glbase.Attrib, x, y, z float64) { - C.gl4_3core_glVertexAttribL3d(gl.funcs, C.GLuint(index), C.GLdouble(x), C.GLdouble(y), C.GLdouble(z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribL2d.xml -func (gl *GL) VertexAttribL2d(index glbase.Attrib, x, y float64) { - C.gl4_3core_glVertexAttribL2d(gl.funcs, C.GLuint(index), C.GLdouble(x), C.GLdouble(y)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribL1d.xml -func (gl *GL) VertexAttribL1d(index glbase.Attrib, x float64) { - C.gl4_3core_glVertexAttribL1d(gl.funcs, C.GLuint(index), C.GLdouble(x)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetProgramPipelineInfoLog.xml -func (gl *GL) GetProgramPipelineInfoLog(pipeline uint32, bufSize int32, length []int32, infoLog []byte) { - C.gl4_3core_glGetProgramPipelineInfoLog(gl.funcs, C.GLuint(pipeline), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLchar)(unsafe.Pointer(&infoLog[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glValidateProgramPipeline.xml -func (gl *GL) ValidateProgramPipeline(pipeline uint32) { - C.gl4_3core_glValidateProgramPipeline(gl.funcs, C.GLuint(pipeline)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix4x3dv.xml -func (gl *GL) ProgramUniformMatrix4x3dv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float64) { - if len(value) != 3 { - panic("parameter value has incorrect length") - } - C.gl4_3core_glProgramUniformMatrix4x3dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix3x4dv.xml -func (gl *GL) ProgramUniformMatrix3x4dv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float64) { - if len(value) != 4 { - panic("parameter value has incorrect length") - } - C.gl4_3core_glProgramUniformMatrix3x4dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix4x2dv.xml -func (gl *GL) ProgramUniformMatrix4x2dv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float64) { - if len(value) != 2 { - panic("parameter value has incorrect length") - } - C.gl4_3core_glProgramUniformMatrix4x2dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix2x4dv.xml -func (gl *GL) ProgramUniformMatrix2x4dv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float64) { - if len(value) != 4 { - panic("parameter value has incorrect length") - } - C.gl4_3core_glProgramUniformMatrix2x4dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix3x2dv.xml -func (gl *GL) ProgramUniformMatrix3x2dv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float64) { - if len(value) != 2 { - panic("parameter value has incorrect length") - } - C.gl4_3core_glProgramUniformMatrix3x2dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix2x3dv.xml -func (gl *GL) ProgramUniformMatrix2x3dv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float64) { - if len(value) != 3 { - panic("parameter value has incorrect length") - } - C.gl4_3core_glProgramUniformMatrix2x3dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix4x3fv.xml -func (gl *GL) ProgramUniformMatrix4x3fv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float32) { - if len(value) != 3 { - panic("parameter value has incorrect length") - } - C.gl4_3core_glProgramUniformMatrix4x3fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix3x4fv.xml -func (gl *GL) ProgramUniformMatrix3x4fv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float32) { - if len(value) != 4 { - panic("parameter value has incorrect length") - } - C.gl4_3core_glProgramUniformMatrix3x4fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix4x2fv.xml -func (gl *GL) ProgramUniformMatrix4x2fv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float32) { - if len(value) != 2 { - panic("parameter value has incorrect length") - } - C.gl4_3core_glProgramUniformMatrix4x2fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix2x4fv.xml -func (gl *GL) ProgramUniformMatrix2x4fv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float32) { - if len(value) != 4 { - panic("parameter value has incorrect length") - } - C.gl4_3core_glProgramUniformMatrix2x4fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix3x2fv.xml -func (gl *GL) ProgramUniformMatrix3x2fv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float32) { - if len(value) != 2 { - panic("parameter value has incorrect length") - } - C.gl4_3core_glProgramUniformMatrix3x2fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix2x3fv.xml -func (gl *GL) ProgramUniformMatrix2x3fv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float32) { - if len(value) != 3 { - panic("parameter value has incorrect length") - } - C.gl4_3core_glProgramUniformMatrix2x3fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix4dv.xml -func (gl *GL) ProgramUniformMatrix4dv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float64) { - if len(value) != 4 { - panic("parameter value has incorrect length") - } - C.gl4_3core_glProgramUniformMatrix4dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix3dv.xml -func (gl *GL) ProgramUniformMatrix3dv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float64) { - if len(value) != 3 { - panic("parameter value has incorrect length") - } - C.gl4_3core_glProgramUniformMatrix3dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix2dv.xml -func (gl *GL) ProgramUniformMatrix2dv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float64) { - if len(value) != 2 { - panic("parameter value has incorrect length") - } - C.gl4_3core_glProgramUniformMatrix2dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix4fv.xml -func (gl *GL) ProgramUniformMatrix4fv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float32) { - if len(value) != 4 { - panic("parameter value has incorrect length") - } - C.gl4_3core_glProgramUniformMatrix4fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix3fv.xml -func (gl *GL) ProgramUniformMatrix3fv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float32) { - if len(value) != 3 { - panic("parameter value has incorrect length") - } - C.gl4_3core_glProgramUniformMatrix3fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniformMatrix2fv.xml -func (gl *GL) ProgramUniformMatrix2fv(program glbase.Program, location glbase.Uniform, count int, transpose bool, value []float32) { - if len(value) != 2 { - panic("parameter value has incorrect length") - } - C.gl4_3core_glProgramUniformMatrix2fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform4uiv.xml -func (gl *GL) ProgramUniform4uiv(program glbase.Program, location glbase.Uniform, count int, value []uint32) { - C.gl4_3core_glProgramUniform4uiv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform4ui.xml -func (gl *GL) ProgramUniform4ui(program glbase.Program, location glbase.Uniform, v0, v1, v2, v3 uint32) { - C.gl4_3core_glProgramUniform4ui(gl.funcs, C.GLuint(program), C.GLint(location), C.GLuint(v0), C.GLuint(v1), C.GLuint(v2), C.GLuint(v3)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform4dv.xml -func (gl *GL) ProgramUniform4dv(program glbase.Program, location glbase.Uniform, count int, value []float64) { - if len(value) != 4 { - panic("parameter value has incorrect length") - } - C.gl4_3core_glProgramUniform4dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform4d.xml -func (gl *GL) ProgramUniform4d(program glbase.Program, location glbase.Uniform, v0, v1, v2, v3 float64) { - C.gl4_3core_glProgramUniform4d(gl.funcs, C.GLuint(program), C.GLint(location), C.GLdouble(v0), C.GLdouble(v1), C.GLdouble(v2), C.GLdouble(v3)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform4fv.xml -func (gl *GL) ProgramUniform4fv(program glbase.Program, location glbase.Uniform, count int, value []float32) { - if len(value) != 4 { - panic("parameter value has incorrect length") - } - C.gl4_3core_glProgramUniform4fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform4f.xml -func (gl *GL) ProgramUniform4f(program glbase.Program, location glbase.Uniform, v0, v1, v2, v3 float32) { - C.gl4_3core_glProgramUniform4f(gl.funcs, C.GLuint(program), C.GLint(location), C.GLfloat(v0), C.GLfloat(v1), C.GLfloat(v2), C.GLfloat(v3)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform4iv.xml -func (gl *GL) ProgramUniform4iv(program glbase.Program, location glbase.Uniform, count int, value []int32) { - if len(value) != 4 { - panic("parameter value has incorrect length") - } - C.gl4_3core_glProgramUniform4iv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform4i.xml -func (gl *GL) ProgramUniform4i(program glbase.Program, location glbase.Uniform, v0, v1, v2, v3 int32) { - C.gl4_3core_glProgramUniform4i(gl.funcs, C.GLuint(program), C.GLint(location), C.GLint(v0), C.GLint(v1), C.GLint(v2), C.GLint(v3)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform3uiv.xml -func (gl *GL) ProgramUniform3uiv(program glbase.Program, location glbase.Uniform, count int, value []uint32) { - C.gl4_3core_glProgramUniform3uiv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform3ui.xml -func (gl *GL) ProgramUniform3ui(program glbase.Program, location glbase.Uniform, v0, v1, v2 uint32) { - C.gl4_3core_glProgramUniform3ui(gl.funcs, C.GLuint(program), C.GLint(location), C.GLuint(v0), C.GLuint(v1), C.GLuint(v2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform3dv.xml -func (gl *GL) ProgramUniform3dv(program glbase.Program, location glbase.Uniform, count int, value []float64) { - if len(value) != 3 { - panic("parameter value has incorrect length") - } - C.gl4_3core_glProgramUniform3dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform3d.xml -func (gl *GL) ProgramUniform3d(program glbase.Program, location glbase.Uniform, v0, v1, v2 float64) { - C.gl4_3core_glProgramUniform3d(gl.funcs, C.GLuint(program), C.GLint(location), C.GLdouble(v0), C.GLdouble(v1), C.GLdouble(v2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform3fv.xml -func (gl *GL) ProgramUniform3fv(program glbase.Program, location glbase.Uniform, count int, value []float32) { - if len(value) != 3 { - panic("parameter value has incorrect length") - } - C.gl4_3core_glProgramUniform3fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform3f.xml -func (gl *GL) ProgramUniform3f(program glbase.Program, location glbase.Uniform, v0, v1, v2 float32) { - C.gl4_3core_glProgramUniform3f(gl.funcs, C.GLuint(program), C.GLint(location), C.GLfloat(v0), C.GLfloat(v1), C.GLfloat(v2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform3iv.xml -func (gl *GL) ProgramUniform3iv(program glbase.Program, location glbase.Uniform, count int, value []int32) { - if len(value) != 3 { - panic("parameter value has incorrect length") - } - C.gl4_3core_glProgramUniform3iv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform3i.xml -func (gl *GL) ProgramUniform3i(program glbase.Program, location glbase.Uniform, v0, v1, v2 int32) { - C.gl4_3core_glProgramUniform3i(gl.funcs, C.GLuint(program), C.GLint(location), C.GLint(v0), C.GLint(v1), C.GLint(v2)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform2uiv.xml -func (gl *GL) ProgramUniform2uiv(program glbase.Program, location glbase.Uniform, count int, value []uint32) { - C.gl4_3core_glProgramUniform2uiv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform2ui.xml -func (gl *GL) ProgramUniform2ui(program glbase.Program, location glbase.Uniform, v0, v1 uint32) { - C.gl4_3core_glProgramUniform2ui(gl.funcs, C.GLuint(program), C.GLint(location), C.GLuint(v0), C.GLuint(v1)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform2dv.xml -func (gl *GL) ProgramUniform2dv(program glbase.Program, location glbase.Uniform, count int, value []float64) { - if len(value) != 2 { - panic("parameter value has incorrect length") - } - C.gl4_3core_glProgramUniform2dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform2d.xml -func (gl *GL) ProgramUniform2d(program glbase.Program, location glbase.Uniform, v0, v1 float64) { - C.gl4_3core_glProgramUniform2d(gl.funcs, C.GLuint(program), C.GLint(location), C.GLdouble(v0), C.GLdouble(v1)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform2fv.xml -func (gl *GL) ProgramUniform2fv(program glbase.Program, location glbase.Uniform, count int, value []float32) { - if len(value) != 2 { - panic("parameter value has incorrect length") - } - C.gl4_3core_glProgramUniform2fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform2f.xml -func (gl *GL) ProgramUniform2f(program glbase.Program, location glbase.Uniform, v0, v1 float32) { - C.gl4_3core_glProgramUniform2f(gl.funcs, C.GLuint(program), C.GLint(location), C.GLfloat(v0), C.GLfloat(v1)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform2iv.xml -func (gl *GL) ProgramUniform2iv(program glbase.Program, location glbase.Uniform, count int, value []int32) { - if len(value) != 2 { - panic("parameter value has incorrect length") - } - C.gl4_3core_glProgramUniform2iv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform2i.xml -func (gl *GL) ProgramUniform2i(program glbase.Program, location glbase.Uniform, v0, v1 int32) { - C.gl4_3core_glProgramUniform2i(gl.funcs, C.GLuint(program), C.GLint(location), C.GLint(v0), C.GLint(v1)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform1uiv.xml -func (gl *GL) ProgramUniform1uiv(program glbase.Program, location glbase.Uniform, count int, value []uint32) { - C.gl4_3core_glProgramUniform1uiv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform1ui.xml -func (gl *GL) ProgramUniform1ui(program glbase.Program, location glbase.Uniform, v0 uint32) { - C.gl4_3core_glProgramUniform1ui(gl.funcs, C.GLuint(program), C.GLint(location), C.GLuint(v0)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform1dv.xml -func (gl *GL) ProgramUniform1dv(program glbase.Program, location glbase.Uniform, count int, value []float64) { - C.gl4_3core_glProgramUniform1dv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLdouble)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform1d.xml -func (gl *GL) ProgramUniform1d(program glbase.Program, location glbase.Uniform, v0 float64) { - C.gl4_3core_glProgramUniform1d(gl.funcs, C.GLuint(program), C.GLint(location), C.GLdouble(v0)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform1fv.xml -func (gl *GL) ProgramUniform1fv(program glbase.Program, location glbase.Uniform, count int, value []float32) { - C.gl4_3core_glProgramUniform1fv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform1f.xml -func (gl *GL) ProgramUniform1f(program glbase.Program, location glbase.Uniform, v0 float32) { - C.gl4_3core_glProgramUniform1f(gl.funcs, C.GLuint(program), C.GLint(location), C.GLfloat(v0)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform1iv.xml -func (gl *GL) ProgramUniform1iv(program glbase.Program, location glbase.Uniform, count int, value []int32) { - C.gl4_3core_glProgramUniform1iv(gl.funcs, C.GLuint(program), C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramUniform1i.xml -func (gl *GL) ProgramUniform1i(program glbase.Program, location glbase.Uniform, v0 int32) { - C.gl4_3core_glProgramUniform1i(gl.funcs, C.GLuint(program), C.GLint(location), C.GLint(v0)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetProgramPipelineiv.xml -func (gl *GL) GetProgramPipelineiv(pipeline uint32, pname glbase.Enum, params []int32) { - C.gl4_3core_glGetProgramPipelineiv(gl.funcs, C.GLuint(pipeline), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glIsProgramPipeline.xml -func (gl *GL) IsProgramPipeline(pipeline uint32) bool { - glresult := C.gl4_3core_glIsProgramPipeline(gl.funcs, C.GLuint(pipeline)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGenProgramPipelines.xml -func (gl *GL) GenProgramPipelines(n int, pipelines []uint32) { - C.gl4_3core_glGenProgramPipelines(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&pipelines[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDeleteProgramPipelines.xml -func (gl *GL) DeleteProgramPipelines(n int, pipelines []uint32) { - C.gl4_3core_glDeleteProgramPipelines(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&pipelines[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindProgramPipeline.xml -func (gl *GL) BindProgramPipeline(pipeline uint32) { - C.gl4_3core_glBindProgramPipeline(gl.funcs, C.GLuint(pipeline)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glActiveShaderProgram.xml -func (gl *GL) ActiveShaderProgram(pipeline uint32, program glbase.Program) { - C.gl4_3core_glActiveShaderProgram(gl.funcs, C.GLuint(pipeline), C.GLuint(program)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glUseProgramStages.xml -func (gl *GL) UseProgramStages(pipeline uint32, stages glbase.Bitfield, program glbase.Program) { - C.gl4_3core_glUseProgramStages(gl.funcs, C.GLuint(pipeline), C.GLbitfield(stages), C.GLuint(program)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramParameteri.xml -func (gl *GL) ProgramParameteri(program glbase.Program, pname glbase.Enum, value int32) { - C.gl4_3core_glProgramParameteri(gl.funcs, C.GLuint(program), C.GLenum(pname), C.GLint(value)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glProgramBinary.xml -func (gl *GL) ProgramBinary(program glbase.Program, binaryFormat glbase.Enum, binary interface{}, length int32) { - var binary_ptr unsafe.Pointer - var binary_v = reflect.ValueOf(binary) - if binary != nil && binary_v.Kind() != reflect.Slice { - panic("parameter binary must be a slice") - } - if binary != nil { - binary_ptr = unsafe.Pointer(binary_v.Index(0).Addr().Pointer()) - } - C.gl4_3core_glProgramBinary(gl.funcs, C.GLuint(program), C.GLenum(binaryFormat), binary_ptr, C.GLsizei(length)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetProgramBinary.xml -func (gl *GL) GetProgramBinary(program glbase.Program, bufSize int32, length []int32, binaryFormat []glbase.Enum, binary interface{}) { - var binary_ptr unsafe.Pointer - var binary_v = reflect.ValueOf(binary) - if binary != nil && binary_v.Kind() != reflect.Slice { - panic("parameter binary must be a slice") - } - if binary != nil { - binary_ptr = unsafe.Pointer(binary_v.Index(0).Addr().Pointer()) - } - C.gl4_3core_glGetProgramBinary(gl.funcs, C.GLuint(program), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLenum)(unsafe.Pointer(&binaryFormat[0])), binary_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearDepthf.xml -func (gl *GL) ClearDepthf(dd float32) { - C.gl4_3core_glClearDepthf(gl.funcs, C.GLfloat(dd)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDepthRangef.xml -func (gl *GL) DepthRangef(n, f float32) { - C.gl4_3core_glDepthRangef(gl.funcs, C.GLfloat(n), C.GLfloat(f)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetShaderPrecisionFormat.xml -func (gl *GL) GetShaderPrecisionFormat(shadertype, precisionType glbase.Enum, range_, precision []int32) { - C.gl4_3core_glGetShaderPrecisionFormat(gl.funcs, C.GLenum(shadertype), C.GLenum(precisionType), (*C.GLint)(unsafe.Pointer(&range_[0])), (*C.GLint)(unsafe.Pointer(&precision[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glShaderBinary.xml -func (gl *GL) ShaderBinary(count int, shaders []glbase.Shader, binaryFormat glbase.Enum, binary interface{}, length int32) { - var binary_ptr unsafe.Pointer - var binary_v = reflect.ValueOf(binary) - if binary != nil && binary_v.Kind() != reflect.Slice { - panic("parameter binary must be a slice") - } - if binary != nil { - binary_ptr = unsafe.Pointer(binary_v.Index(0).Addr().Pointer()) - } - C.gl4_3core_glShaderBinary(gl.funcs, C.GLsizei(count), (*C.GLuint)(unsafe.Pointer(&shaders[0])), C.GLenum(binaryFormat), binary_ptr, C.GLsizei(length)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glReleaseShaderCompiler.xml -func (gl *GL) ReleaseShaderCompiler() { - C.gl4_3core_glReleaseShaderCompiler(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexStorage3D.xml -func (gl *GL) TexStorage3D(target glbase.Enum, levels int32, internalFormat glbase.Enum, width, height int, depth int32) { - C.gl4_3core_glTexStorage3D(gl.funcs, C.GLenum(target), C.GLsizei(levels), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexStorage2D.xml -func (gl *GL) TexStorage2D(target glbase.Enum, levels int32, internalFormat glbase.Enum, width, height int) { - C.gl4_3core_glTexStorage2D(gl.funcs, C.GLenum(target), C.GLsizei(levels), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexStorage1D.xml -func (gl *GL) TexStorage1D(target glbase.Enum, levels int32, internalFormat glbase.Enum, width int) { - C.gl4_3core_glTexStorage1D(gl.funcs, C.GLenum(target), C.GLsizei(levels), C.GLenum(internalFormat), C.GLsizei(width)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMemoryBarrier.xml -func (gl *GL) MemoryBarrier(barriers glbase.Bitfield) { - C.gl4_3core_glMemoryBarrier(gl.funcs, C.GLbitfield(barriers)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindImageTexture.xml -func (gl *GL) BindImageTexture(unit uint32, texture glbase.Texture, level int, layered bool, layer int32, access, format glbase.Enum) { - C.gl4_3core_glBindImageTexture(gl.funcs, C.GLuint(unit), C.GLuint(texture), C.GLint(level), *(*C.GLboolean)(unsafe.Pointer(&layered)), C.GLint(layer), C.GLenum(access), C.GLenum(format)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveAtomicCounterBufferiv.xml -func (gl *GL) GetActiveAtomicCounterBufferiv(program glbase.Program, bufferIndex uint32, pname glbase.Enum, params []int32) { - C.gl4_3core_glGetActiveAtomicCounterBufferiv(gl.funcs, C.GLuint(program), C.GLuint(bufferIndex), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetInternalformativ.xml -func (gl *GL) GetInternalformativ(target, internalFormat, pname glbase.Enum, bufSize int32, params []int32) { - C.gl4_3core_glGetInternalformativ(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLenum(pname), C.GLsizei(bufSize), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawTransformFeedbackStreamInstanced.xml -func (gl *GL) DrawTransformFeedbackStreamInstanced(mode glbase.Enum, id, stream uint32, instancecount int32) { - C.gl4_3core_glDrawTransformFeedbackStreamInstanced(gl.funcs, C.GLenum(mode), C.GLuint(id), C.GLuint(stream), C.GLsizei(instancecount)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawTransformFeedbackInstanced.xml -func (gl *GL) DrawTransformFeedbackInstanced(mode glbase.Enum, id uint32, instancecount int32) { - C.gl4_3core_glDrawTransformFeedbackInstanced(gl.funcs, C.GLenum(mode), C.GLuint(id), C.GLsizei(instancecount)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawElementsInstancedBaseVertexBaseInstance.xml -func (gl *GL) DrawElementsInstancedBaseVertexBaseInstance(mode glbase.Enum, count int, gltype glbase.Enum, indices interface{}, instancecount, basevertex int32, baseinstance uint32) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl4_3core_glDrawElementsInstancedBaseVertexBaseInstance(gl.funcs, C.GLenum(mode), C.GLsizei(count), C.GLenum(gltype), indices_ptr, C.GLsizei(instancecount), C.GLint(basevertex), C.GLuint(baseinstance)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawElementsInstancedBaseInstance.xml -func (gl *GL) DrawElementsInstancedBaseInstance(mode glbase.Enum, count int, gltype glbase.Enum, indices interface{}, instancecount int32, baseinstance uint32) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gl4_3core_glDrawElementsInstancedBaseInstance(gl.funcs, C.GLenum(mode), C.GLsizei(count), C.GLenum(gltype), indices_ptr, C.GLsizei(instancecount), C.GLuint(baseinstance)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDrawArraysInstancedBaseInstance.xml -func (gl *GL) DrawArraysInstancedBaseInstance(mode glbase.Enum, first, count int, instancecount int32, baseinstance uint32) { - C.gl4_3core_glDrawArraysInstancedBaseInstance(gl.funcs, C.GLenum(mode), C.GLint(first), C.GLsizei(count), C.GLsizei(instancecount), C.GLuint(baseinstance)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexStorage3DMultisample.xml -func (gl *GL) TexStorage3DMultisample(target glbase.Enum, samples int32, internalFormat glbase.Enum, width, height int, depth int32, fixedsamplelocations bool) { - C.gl4_3core_glTexStorage3DMultisample(gl.funcs, C.GLenum(target), C.GLsizei(samples), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth), *(*C.GLboolean)(unsafe.Pointer(&fixedsamplelocations))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexStorage2DMultisample.xml -func (gl *GL) TexStorage2DMultisample(target glbase.Enum, samples int32, internalFormat glbase.Enum, width, height int, fixedsamplelocations bool) { - C.gl4_3core_glTexStorage2DMultisample(gl.funcs, C.GLenum(target), C.GLsizei(samples), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), *(*C.GLboolean)(unsafe.Pointer(&fixedsamplelocations))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTexBufferRange.xml -func (gl *GL) TexBufferRange(target, internalFormat glbase.Enum, buffer glbase.Buffer, offset, size int) { - C.gl4_3core_glTexBufferRange(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLuint(buffer), C.GLintptr(offset), C.GLsizeiptr(size)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glShaderStorageBlockBinding.xml -func (gl *GL) ShaderStorageBlockBinding(program glbase.Program, storageBlockIndex, storageBlockBinding uint32) { - C.gl4_3core_glShaderStorageBlockBinding(gl.funcs, C.GLuint(program), C.GLuint(storageBlockIndex), C.GLuint(storageBlockBinding)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetProgramResourceLocationIndex.xml -func (gl *GL) GetProgramResourceLocationIndex(program glbase.Program, programInterface glbase.Enum, name []byte) int32 { - glresult := C.gl4_3core_glGetProgramResourceLocationIndex(gl.funcs, C.GLuint(program), C.GLenum(programInterface), (*C.GLchar)(unsafe.Pointer(&name[0]))) - return int32(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetProgramResourceLocation.xml -func (gl *GL) GetProgramResourceLocation(program glbase.Program, programInterface glbase.Enum, name []byte) int32 { - glresult := C.gl4_3core_glGetProgramResourceLocation(gl.funcs, C.GLuint(program), C.GLenum(programInterface), (*C.GLchar)(unsafe.Pointer(&name[0]))) - return int32(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetProgramResourceiv.xml -func (gl *GL) GetProgramResourceiv(program glbase.Program, programInterface glbase.Enum, index uint32, propCount int32, props []glbase.Enum, bufSize int32, length, params []int32) { - C.gl4_3core_glGetProgramResourceiv(gl.funcs, C.GLuint(program), C.GLenum(programInterface), C.GLuint(index), C.GLsizei(propCount), (*C.GLenum)(unsafe.Pointer(&props[0])), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetProgramResourceName.xml -func (gl *GL) GetProgramResourceName(program glbase.Program, programInterface glbase.Enum, index uint32, bufSize int32, length []int32, name []byte) { - C.gl4_3core_glGetProgramResourceName(gl.funcs, C.GLuint(program), C.GLenum(programInterface), C.GLuint(index), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetProgramResourceIndex.xml -func (gl *GL) GetProgramResourceIndex(program glbase.Program, programInterface glbase.Enum, name []byte) uint32 { - glresult := C.gl4_3core_glGetProgramResourceIndex(gl.funcs, C.GLuint(program), C.GLenum(programInterface), (*C.GLchar)(unsafe.Pointer(&name[0]))) - return uint32(glresult) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetProgramInterfaceiv.xml -func (gl *GL) GetProgramInterfaceiv(program glbase.Program, programInterface, pname glbase.Enum, params []int32) { - C.gl4_3core_glGetProgramInterfaceiv(gl.funcs, C.GLuint(program), C.GLenum(programInterface), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiDrawElementsIndirect.xml -func (gl *GL) MultiDrawElementsIndirect(mode, gltype glbase.Enum, indirect interface{}, drawcount int32, stride int) { - var indirect_ptr unsafe.Pointer - var indirect_v = reflect.ValueOf(indirect) - if indirect != nil && indirect_v.Kind() != reflect.Slice { - panic("parameter indirect must be a slice") - } - if indirect != nil { - indirect_ptr = unsafe.Pointer(indirect_v.Index(0).Addr().Pointer()) - } - C.gl4_3core_glMultiDrawElementsIndirect(gl.funcs, C.GLenum(mode), C.GLenum(gltype), indirect_ptr, C.GLsizei(drawcount), C.GLsizei(stride)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glMultiDrawArraysIndirect.xml -func (gl *GL) MultiDrawArraysIndirect(mode glbase.Enum, indirect interface{}, drawcount int32, stride int) { - var indirect_ptr unsafe.Pointer - var indirect_v = reflect.ValueOf(indirect) - if indirect != nil && indirect_v.Kind() != reflect.Slice { - panic("parameter indirect must be a slice") - } - if indirect != nil { - indirect_ptr = unsafe.Pointer(indirect_v.Index(0).Addr().Pointer()) - } - C.gl4_3core_glMultiDrawArraysIndirect(gl.funcs, C.GLenum(mode), indirect_ptr, C.GLsizei(drawcount), C.GLsizei(stride)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glInvalidateSubFramebuffer.xml -func (gl *GL) InvalidateSubFramebuffer(target glbase.Enum, numAttachments int32, attachments []glbase.Enum, x, y, width, height int) { - C.gl4_3core_glInvalidateSubFramebuffer(gl.funcs, C.GLenum(target), C.GLsizei(numAttachments), (*C.GLenum)(unsafe.Pointer(&attachments[0])), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glInvalidateFramebuffer.xml -func (gl *GL) InvalidateFramebuffer(target glbase.Enum, numAttachments int32, attachments []glbase.Enum) { - C.gl4_3core_glInvalidateFramebuffer(gl.funcs, C.GLenum(target), C.GLsizei(numAttachments), (*C.GLenum)(unsafe.Pointer(&attachments[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glInvalidateBufferData.xml -func (gl *GL) InvalidateBufferData(buffer glbase.Buffer) { - C.gl4_3core_glInvalidateBufferData(gl.funcs, C.GLuint(buffer)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glInvalidateBufferSubData.xml -func (gl *GL) InvalidateBufferSubData(buffer glbase.Buffer, offset, length int) { - C.gl4_3core_glInvalidateBufferSubData(gl.funcs, C.GLuint(buffer), C.GLintptr(offset), C.GLsizeiptr(length)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glInvalidateTexImage.xml -func (gl *GL) InvalidateTexImage(texture glbase.Texture, level int) { - C.gl4_3core_glInvalidateTexImage(gl.funcs, C.GLuint(texture), C.GLint(level)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glInvalidateTexSubImage.xml -func (gl *GL) InvalidateTexSubImage(texture glbase.Texture, level, xoffset, yoffset int, zoffset int32, width, height int, depth int32) { - C.gl4_3core_glInvalidateTexSubImage(gl.funcs, C.GLuint(texture), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(zoffset), C.GLsizei(width), C.GLsizei(height), C.GLsizei(depth)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetInternalformati64v.xml -func (gl *GL) GetInternalformati64v(target, internalFormat, pname glbase.Enum, bufSize int32, params []int64) { - C.gl4_3core_glGetInternalformati64v(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLenum(pname), C.GLsizei(bufSize), (*C.GLint64)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glGetFramebufferParameteriv.xml -func (gl *GL) GetFramebufferParameteriv(target, pname glbase.Enum, params []int32) { - C.gl4_3core_glGetFramebufferParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glFramebufferParameteri.xml -func (gl *GL) FramebufferParameteri(target, pname glbase.Enum, param int32) { - C.gl4_3core_glFramebufferParameteri(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexBindingDivisor.xml -func (gl *GL) VertexBindingDivisor(bindingindex, divisor uint32) { - C.gl4_3core_glVertexBindingDivisor(gl.funcs, C.GLuint(bindingindex), C.GLuint(divisor)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribBinding.xml -func (gl *GL) VertexAttribBinding(attribindex, bindingindex uint32) { - C.gl4_3core_glVertexAttribBinding(gl.funcs, C.GLuint(attribindex), C.GLuint(bindingindex)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribLFormat.xml -func (gl *GL) VertexAttribLFormat(attribindex uint32, size int, gltype glbase.Enum, relativeoffset uint32) { - C.gl4_3core_glVertexAttribLFormat(gl.funcs, C.GLuint(attribindex), C.GLint(size), C.GLenum(gltype), C.GLuint(relativeoffset)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribIFormat.xml -func (gl *GL) VertexAttribIFormat(attribindex uint32, size int, gltype glbase.Enum, relativeoffset uint32) { - C.gl4_3core_glVertexAttribIFormat(gl.funcs, C.GLuint(attribindex), C.GLint(size), C.GLenum(gltype), C.GLuint(relativeoffset)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glVertexAttribFormat.xml -func (gl *GL) VertexAttribFormat(attribindex uint32, size int, gltype glbase.Enum, normalized bool, relativeoffset uint32) { - C.gl4_3core_glVertexAttribFormat(gl.funcs, C.GLuint(attribindex), C.GLint(size), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), C.GLuint(relativeoffset)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glBindVertexBuffer.xml -func (gl *GL) BindVertexBuffer(bindingindex uint32, buffer glbase.Buffer, offset, stride int) { - C.gl4_3core_glBindVertexBuffer(gl.funcs, C.GLuint(bindingindex), C.GLuint(buffer), C.GLintptr(offset), C.GLsizei(stride)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glTextureView.xml -func (gl *GL) TextureView(texture glbase.Texture, target glbase.Enum, origtexture uint32, internalFormat glbase.Enum, minlevel, numlevels, minlayer, numlayers uint32) { - C.gl4_3core_glTextureView(gl.funcs, C.GLuint(texture), C.GLenum(target), C.GLuint(origtexture), C.GLenum(internalFormat), C.GLuint(minlevel), C.GLuint(numlevels), C.GLuint(minlayer), C.GLuint(numlayers)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glCopyImageSubData.xml -func (gl *GL) CopyImageSubData(srcName uint32, srcTarget glbase.Enum, srcLevel, srcX, srcY, srcZ int32, dstName uint32, dstTarget glbase.Enum, dstLevel, dstX, dstY, dstZ, srcWidth, srcHeight, srcDepth int32) { - C.gl4_3core_glCopyImageSubData(gl.funcs, C.GLuint(srcName), C.GLenum(srcTarget), C.GLint(srcLevel), C.GLint(srcX), C.GLint(srcY), C.GLint(srcZ), C.GLuint(dstName), C.GLenum(dstTarget), C.GLint(dstLevel), C.GLint(dstX), C.GLint(dstY), C.GLint(dstZ), C.GLsizei(srcWidth), C.GLsizei(srcHeight), C.GLsizei(srcDepth)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDispatchComputeIndirect.xml -func (gl *GL) DispatchComputeIndirect(indirect int) { - C.gl4_3core_glDispatchComputeIndirect(gl.funcs, C.GLintptr(indirect)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glDispatchCompute.xml -func (gl *GL) DispatchCompute(num_groups_x, num_groups_y, num_groups_z uint32) { - C.gl4_3core_glDispatchCompute(gl.funcs, C.GLuint(num_groups_x), C.GLuint(num_groups_y), C.GLuint(num_groups_z)) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearBufferSubData.xml -func (gl *GL) ClearBufferSubData(target, internalFormat glbase.Enum, offset, size int, format, gltype glbase.Enum, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_3core_glClearBufferSubData(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLintptr(offset), C.GLsizeiptr(size), C.GLenum(format), C.GLenum(gltype), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man4/xhtml/glClearBufferData.xml -func (gl *GL) ClearBufferData(target, internalFormat, format, gltype glbase.Enum, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gl4_3core_glClearBufferData(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLenum(format), C.GLenum(gltype), data_ptr) -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/es2/funcs.cpp b/Godeps/_workspace/src/github.com/obscuren/qml/gl/es2/funcs.cpp deleted file mode 100644 index 71acf8d1b5..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/es2/funcs.cpp +++ /dev/null @@ -1,813 +0,0 @@ - -// ** file automatically generated by glgen -- do not edit manually ** - -#include -#include - -#include "funcs.h" - -void *gles2_funcs() { - QOpenGLFunctions* funcs = QOpenGLContext::currentContext()->functions(); - if (!funcs) { - return 0; - } - return funcs; -} - - -void gles2_glActiveTexture(void *_glfuncs, GLenum texture) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glActiveTexture(texture); -} - -void gles2_glAttachShader(void *_glfuncs, GLuint program, GLuint shader) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glAttachShader(program, shader); -} - -void gles2_glBindAttribLocation(void *_glfuncs, GLuint program, GLuint index, const GLchar* name) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindAttribLocation(program, index, name); -} - -void gles2_glBindBuffer(void *_glfuncs, GLenum target, GLuint buffer) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindBuffer(target, buffer); -} - -void gles2_glBindFramebuffer(void *_glfuncs, GLenum target, GLuint framebuffer) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindFramebuffer(target, framebuffer); -} - -void gles2_glBindRenderbuffer(void *_glfuncs, GLenum target, GLuint renderbuffer) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBindRenderbuffer(target, renderbuffer); -} - -void gles2_glBlendColor(void *_glfuncs, GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendColor(red, green, blue, alpha); -} - -void gles2_glBlendEquation(void *_glfuncs, GLenum mode) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendEquation(mode); -} - -void gles2_glBlendEquationSeparate(void *_glfuncs, GLenum modeRGB, GLenum modeAlpha) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendEquationSeparate(modeRGB, modeAlpha); -} - -void gles2_glBlendFuncSeparate(void *_glfuncs, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBlendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha); -} - -void gles2_glBufferData(void *_glfuncs, GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBufferData(target, size, data, usage); -} - -void gles2_glBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glBufferSubData(target, offset, size, data); -} - -GLenum gles2_glCheckFramebufferStatus(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glCheckFramebufferStatus(target); -} - -void gles2_glClearDepthf(void *_glfuncs, GLclampf depth) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glClearDepthf(depth); -} - -void gles2_glCompileShader(void *_glfuncs, GLuint shader) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompileShader(shader); -} - -void gles2_glCompressedTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexImage2D(target, level, internalFormat, width, height, border, imageSize, data); -} - -void gles2_glCompressedTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data); -} - -GLuint gles2_glCreateProgram(void *_glfuncs) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glCreateProgram(); -} - -GLuint gles2_glCreateShader(void *_glfuncs, GLenum gltype) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glCreateShader(gltype); -} - -void gles2_glDeleteBuffers(void *_glfuncs, GLsizei n, const GLuint* buffers) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteBuffers(n, buffers); -} - -void gles2_glDeleteFramebuffers(void *_glfuncs, GLsizei n, const GLuint* framebuffers) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteFramebuffers(n, framebuffers); -} - -void gles2_glDeleteProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteProgram(program); -} - -void gles2_glDeleteRenderbuffers(void *_glfuncs, GLsizei n, const GLuint* renderbuffers) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteRenderbuffers(n, renderbuffers); -} - -void gles2_glDeleteShader(void *_glfuncs, GLuint shader) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDeleteShader(shader); -} - -void gles2_glDepthRangef(void *_glfuncs, GLclampf zNear, GLclampf zFar) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDepthRangef(zNear, zFar); -} - -void gles2_glDetachShader(void *_glfuncs, GLuint program, GLuint shader) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDetachShader(program, shader); -} - -void gles2_glDisableVertexAttribArray(void *_glfuncs, GLuint index) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glDisableVertexAttribArray(index); -} - -void gles2_glEnableVertexAttribArray(void *_glfuncs, GLuint index) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glEnableVertexAttribArray(index); -} - -void gles2_glFramebufferRenderbuffer(void *_glfuncs, GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer); -} - -void gles2_glFramebufferTexture2D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glFramebufferTexture2D(target, attachment, textarget, texture, level); -} - -void gles2_glGenBuffers(void *_glfuncs, GLsizei n, GLuint* buffers) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenBuffers(n, buffers); -} - -void gles2_glGenerateMipmap(void *_glfuncs, GLenum target) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenerateMipmap(target); -} - -void gles2_glGenFramebuffers(void *_glfuncs, GLsizei n, GLuint* framebuffers) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenFramebuffers(n, framebuffers); -} - -void gles2_glGenRenderbuffers(void *_glfuncs, GLsizei n, GLuint* renderbuffers) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGenRenderbuffers(n, renderbuffers); -} - -void gles2_glGetActiveAttrib(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveAttrib(program, index, bufSize, length, size, gltype, name); -} - -void gles2_glGetActiveUniform(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetActiveUniform(program, index, bufSize, length, size, gltype, name); -} - -void gles2_glGetAttachedShaders(void *_glfuncs, GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetAttachedShaders(program, maxcount, count, shaders); -} - -GLint gles2_glGetAttribLocation(void *_glfuncs, GLuint program, const GLchar* name) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetAttribLocation(program, name); -} - -void gles2_glGetBufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetBufferParameteriv(target, pname, params); -} - -void gles2_glGetFramebufferAttachmentParameteriv(void *_glfuncs, GLenum target, GLenum attachment, GLenum pname, GLint* params) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetFramebufferAttachmentParameteriv(target, attachment, pname, params); -} - -void gles2_glGetProgramiv(void *_glfuncs, GLuint program, GLenum pname, GLint* params) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetProgramiv(program, pname, params); -} - -void gles2_glGetProgramInfoLog(void *_glfuncs, GLuint program, GLsizei bufSize, GLsizei* length, GLchar* infoLog) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetProgramInfoLog(program, bufSize, length, infoLog); -} - -void gles2_glGetRenderbufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetRenderbufferParameteriv(target, pname, params); -} - -void gles2_glGetShaderiv(void *_glfuncs, GLuint shader, GLenum pname, GLint* params) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetShaderiv(shader, pname, params); -} - -void gles2_glGetShaderInfoLog(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* infoLog) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetShaderInfoLog(shader, bufSize, length, infoLog); -} - -void gles2_glGetShaderPrecisionFormat(void *_glfuncs, GLenum shadertype, GLenum precisionType, GLint* range_, GLint* precision) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetShaderPrecisionFormat(shadertype, precisionType, range_, precision); -} - -void gles2_glGetShaderSource(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* source) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetShaderSource(shader, bufSize, length, source); -} - -void gles2_glGetUniformfv(void *_glfuncs, GLuint program, GLint location, GLfloat* params) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetUniformfv(program, location, params); -} - -void gles2_glGetUniformiv(void *_glfuncs, GLuint program, GLint location, GLint* params) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetUniformiv(program, location, params); -} - -GLint gles2_glGetUniformLocation(void *_glfuncs, GLuint program, const GLchar* name) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glGetUniformLocation(program, name); -} - -void gles2_glGetVertexAttribfv(void *_glfuncs, GLuint index, GLenum pname, GLfloat* params) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribfv(index, pname, params); -} - -void gles2_glGetVertexAttribiv(void *_glfuncs, GLuint index, GLenum pname, GLint* params) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glGetVertexAttribiv(index, pname, params); -} - -GLboolean gles2_glIsBuffer(void *_glfuncs, GLuint buffer) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsBuffer(buffer); -} - -GLboolean gles2_glIsFramebuffer(void *_glfuncs, GLuint framebuffer) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsFramebuffer(framebuffer); -} - -GLboolean gles2_glIsProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsProgram(program); -} - -GLboolean gles2_glIsRenderbuffer(void *_glfuncs, GLuint renderbuffer) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsRenderbuffer(renderbuffer); -} - -GLboolean gles2_glIsShader(void *_glfuncs, GLuint shader) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - return _qglfuncs->glIsShader(shader); -} - -void gles2_glLinkProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glLinkProgram(program); -} - -void gles2_glReleaseShaderCompiler(void *_glfuncs) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glReleaseShaderCompiler(); -} - -void gles2_glRenderbufferStorage(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glRenderbufferStorage(target, internalFormat, width, height); -} - -void gles2_glSampleCoverage(void *_glfuncs, GLclampf value, GLboolean invert) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glSampleCoverage(value, invert); -} - -void gles2_glShaderBinary(void *_glfuncs, GLint n, const GLuint* shaders, GLenum binaryFormat, const GLvoid* binary, GLint length) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glShaderBinary(n, shaders, binaryFormat, binary, length); -} - -void gles2_glShaderSource(void *_glfuncs, GLuint shader, GLsizei count, const GLchar** source, const GLint* length) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glShaderSource(shader, count, source, length); -} - -void gles2_glStencilFuncSeparate(void *_glfuncs, GLenum face, GLenum glfunc, GLint ref, GLuint mask) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilFuncSeparate(face, glfunc, ref, mask); -} - -void gles2_glStencilMaskSeparate(void *_glfuncs, GLenum face, GLuint mask) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilMaskSeparate(face, mask); -} - -void gles2_glStencilOpSeparate(void *_glfuncs, GLenum face, GLenum fail, GLenum zfail, GLenum zpass) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glStencilOpSeparate(face, fail, zfail, zpass); -} - -void gles2_glUniform1f(void *_glfuncs, GLint location, GLfloat v0) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1f(location, v0); -} - -void gles2_glUniform1fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1fv(location, count, value); -} - -void gles2_glUniform1i(void *_glfuncs, GLint location, GLint v0) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1i(location, v0); -} - -void gles2_glUniform1iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform1iv(location, count, value); -} - -void gles2_glUniform2f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2f(location, v0, v1); -} - -void gles2_glUniform2fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2fv(location, count, value); -} - -void gles2_glUniform2i(void *_glfuncs, GLint location, GLint v0, GLint v1) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2i(location, v0, v1); -} - -void gles2_glUniform2iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform2iv(location, count, value); -} - -void gles2_glUniform3f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3f(location, v0, v1, v2); -} - -void gles2_glUniform3fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3fv(location, count, value); -} - -void gles2_glUniform3i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3i(location, v0, v1, v2); -} - -void gles2_glUniform3iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform3iv(location, count, value); -} - -void gles2_glUniform4f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4f(location, v0, v1, v2, v3); -} - -void gles2_glUniform4fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4fv(location, count, value); -} - -void gles2_glUniform4i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2, GLint v3) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4i(location, v0, v1, v2, v3); -} - -void gles2_glUniform4iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniform4iv(location, count, value); -} - -void gles2_glUniformMatrix2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix2fv(location, count, transpose, value); -} - -void gles2_glUniformMatrix3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix3fv(location, count, transpose, value); -} - -void gles2_glUniformMatrix4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUniformMatrix4fv(location, count, transpose, value); -} - -void gles2_glUseProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glUseProgram(program); -} - -void gles2_glValidateProgram(void *_glfuncs, GLuint program) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glValidateProgram(program); -} - -void gles2_glVertexAttrib1f(void *_glfuncs, GLuint index, GLfloat x) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib1f(index, x); -} - -void gles2_glVertexAttrib1fv(void *_glfuncs, GLuint index, const GLfloat* values) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib1fv(index, values); -} - -void gles2_glVertexAttrib2f(void *_glfuncs, GLuint index, GLfloat x, GLfloat y) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib2f(index, x, y); -} - -void gles2_glVertexAttrib2fv(void *_glfuncs, GLuint index, const GLfloat* values) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib2fv(index, values); -} - -void gles2_glVertexAttrib3f(void *_glfuncs, GLuint index, GLfloat x, GLfloat y, GLfloat z) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib3f(index, x, y, z); -} - -void gles2_glVertexAttrib3fv(void *_glfuncs, GLuint index, const GLfloat* values) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib3fv(index, values); -} - -void gles2_glVertexAttrib4f(void *_glfuncs, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4f(index, x, y, z, w); -} - -void gles2_glVertexAttrib4fv(void *_glfuncs, GLuint index, const GLfloat* values) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttrib4fv(index, values); -} - -void gles2_glVertexAttribPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLboolean normalized, GLsizei stride, const GLvoid* offset) -{ - QOpenGLFunctions* _qglfuncs = reinterpret_cast(_glfuncs); - _qglfuncs->glVertexAttribPointer(index, size, gltype, normalized, stride, offset); -} - -void gles2_glBindTexture(void *_glfuncs, GLenum target, GLuint texture) -{ - glBindTexture(target, texture); -} - -void gles2_glBlendFunc(void *_glfuncs, GLenum sfactor, GLenum dfactor) -{ - glBlendFunc(sfactor, dfactor); -} - -void gles2_glClear(void *_glfuncs, GLbitfield mask) -{ - glClear(mask); -} - -void gles2_glClearColor(void *_glfuncs, GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) -{ - glClearColor(red, green, blue, alpha); -} - -void gles2_glClearStencil(void *_glfuncs, GLint s) -{ - glClearStencil(s); -} - -void gles2_glColorMask(void *_glfuncs, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) -{ - glColorMask(red, green, blue, alpha); -} - -void gles2_glCopyTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) -{ - glCopyTexImage2D(target, level, internalFormat, x, y, width, height, border); -} - -void gles2_glCopyTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) -{ - glCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height); -} - -void gles2_glCullFace(void *_glfuncs, GLenum mode) -{ - glCullFace(mode); -} - -void gles2_glDeleteTextures(void *_glfuncs, GLsizei n, const GLuint* textures) -{ - glDeleteTextures(n, textures); -} - -void gles2_glDepthFunc(void *_glfuncs, GLenum glfunc) -{ - glDepthFunc(glfunc); -} - -void gles2_glDepthMask(void *_glfuncs, GLboolean flag) -{ - glDepthMask(flag); -} - -void gles2_glDisable(void *_glfuncs, GLenum cap) -{ - glDisable(cap); -} - -void gles2_glDrawArrays(void *_glfuncs, GLenum mode, GLint first, GLsizei count) -{ - glDrawArrays(mode, first, count); -} - -void gles2_glDrawElements(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices) -{ - glDrawElements(mode, count, gltype, indices); -} - -void gles2_glEnable(void *_glfuncs, GLenum cap) -{ - glEnable(cap); -} - -void gles2_glFinish(void *_glfuncs) -{ - glFinish(); -} - -void gles2_glFlush(void *_glfuncs) -{ - glFlush(); -} - -void gles2_glFrontFace(void *_glfuncs, GLenum mode) -{ - glFrontFace(mode); -} - -void gles2_glGenTextures(void *_glfuncs, GLsizei n, GLuint* textures) -{ - glGenTextures(n, textures); -} - -void gles2_glGetBooleanv(void *_glfuncs, GLenum pname, GLboolean* params) -{ - glGetBooleanv(pname, params); -} - -GLenum gles2_glGetError(void *_glfuncs) -{ - return glGetError(); -} - -void gles2_glGetFloatv(void *_glfuncs, GLenum pname, GLfloat* params) -{ - glGetFloatv(pname, params); -} - -void gles2_glGetIntegerv(void *_glfuncs, GLenum pname, GLint* params) -{ - glGetIntegerv(pname, params); -} - -void gles2_glGetTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params) -{ - glGetTexParameterfv(target, pname, params); -} - -void gles2_glGetTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params) -{ - glGetTexParameteriv(target, pname, params); -} - -void gles2_glHint(void *_glfuncs, GLenum target, GLenum mode) -{ - glHint(target, mode); -} - -GLboolean gles2_glIsEnabled(void *_glfuncs, GLenum cap) -{ - return glIsEnabled(cap); -} - -GLboolean gles2_glIsTexture(void *_glfuncs, GLuint texture) -{ - return glIsTexture(texture); -} - -void gles2_glLineWidth(void *_glfuncs, GLfloat width) -{ - glLineWidth(width); -} - -void gles2_glPixelStorei(void *_glfuncs, GLenum pname, GLint param) -{ - glPixelStorei(pname, param); -} - -void gles2_glPolygonOffset(void *_glfuncs, GLfloat factor, GLfloat units) -{ - glPolygonOffset(factor, units); -} - -void gles2_glReadPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum gltype, GLvoid* pixels) -{ - glReadPixels(x, y, width, height, format, gltype, pixels); -} - -void gles2_glScissor(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height) -{ - glScissor(x, y, width, height); -} - -void gles2_glStencilFunc(void *_glfuncs, GLenum glfunc, GLint ref, GLuint mask) -{ - glStencilFunc(glfunc, ref, mask); -} - -void gles2_glStencilMask(void *_glfuncs, GLuint mask) -{ - glStencilMask(mask); -} - -void gles2_glStencilOp(void *_glfuncs, GLenum fail, GLenum zfail, GLenum zpass) -{ - glStencilOp(fail, zfail, zpass); -} - -void gles2_glTexImage2D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - glTexImage2D(target, level, internalFormat, width, height, border, format, gltype, pixels); -} - -void gles2_glTexParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param) -{ - glTexParameterf(target, pname, param); -} - -void gles2_glTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params) -{ - glTexParameterfv(target, pname, params); -} - -void gles2_glTexParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint param) -{ - glTexParameteri(target, pname, param); -} - -void gles2_glTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params) -{ - glTexParameteriv(target, pname, params); -} - -void gles2_glTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels) -{ - glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, gltype, pixels); -} - -void gles2_glViewport(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height) -{ - glViewport(x, y, width, height); -} - diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/es2/funcs.h b/Godeps/_workspace/src/github.com/obscuren/qml/gl/es2/funcs.h deleted file mode 100644 index 7e9fd3534d..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/es2/funcs.h +++ /dev/null @@ -1,182 +0,0 @@ - -// ** file automatically generated by glgen -- do not edit manually ** - -#ifndef __cplusplus -#include -#include -typedef unsigned int GLenum; -typedef unsigned char GLboolean; -typedef unsigned int GLbitfield; -typedef void GLvoid; -typedef char GLchar; -typedef signed char GLbyte; /* 1-byte signed */ -typedef short GLshort; /* 2-byte signed */ -typedef int GLint; /* 4-byte signed */ -typedef unsigned char GLubyte; /* 1-byte unsigned */ -typedef unsigned short GLushort; /* 2-byte unsigned */ -typedef unsigned int GLuint; /* 4-byte unsigned */ -typedef int GLsizei; /* 4-byte signed */ -typedef float GLfloat; /* single precision float */ -typedef float GLclampf; /* single precision float in [0,1] */ -typedef double GLdouble; /* double precision float */ -typedef double GLclampd; /* double precision float in [0,1] */ -typedef int64_t GLint64; -typedef uint64_t GLuint64; -typedef ptrdiff_t GLintptr; -typedef ptrdiff_t GLsizeiptr; -typedef ptrdiff_t GLintptrARB; -typedef ptrdiff_t GLsizeiptrARB; -typedef struct __GLsync *GLsync; -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -void *gles2_funcs(); - -void gles2_glActiveTexture(void *_glfuncs, GLenum texture); -void gles2_glAttachShader(void *_glfuncs, GLuint program, GLuint shader); -void gles2_glBindAttribLocation(void *_glfuncs, GLuint program, GLuint index, const GLchar* name); -void gles2_glBindBuffer(void *_glfuncs, GLenum target, GLuint buffer); -void gles2_glBindFramebuffer(void *_glfuncs, GLenum target, GLuint framebuffer); -void gles2_glBindRenderbuffer(void *_glfuncs, GLenum target, GLuint renderbuffer); -void gles2_glBlendColor(void *_glfuncs, GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); -void gles2_glBlendEquation(void *_glfuncs, GLenum mode); -void gles2_glBlendEquationSeparate(void *_glfuncs, GLenum modeRGB, GLenum modeAlpha); -void gles2_glBlendFuncSeparate(void *_glfuncs, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -void gles2_glBufferData(void *_glfuncs, GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage); -void gles2_glBufferSubData(void *_glfuncs, GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data); -GLenum gles2_glCheckFramebufferStatus(void *_glfuncs, GLenum target); -void gles2_glClearDepthf(void *_glfuncs, GLclampf depth); -void gles2_glCompileShader(void *_glfuncs, GLuint shader); -void gles2_glCompressedTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data); -void gles2_glCompressedTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data); -GLuint gles2_glCreateProgram(void *_glfuncs); -GLuint gles2_glCreateShader(void *_glfuncs, GLenum gltype); -void gles2_glDeleteBuffers(void *_glfuncs, GLsizei n, const GLuint* buffers); -void gles2_glDeleteFramebuffers(void *_glfuncs, GLsizei n, const GLuint* framebuffers); -void gles2_glDeleteProgram(void *_glfuncs, GLuint program); -void gles2_glDeleteRenderbuffers(void *_glfuncs, GLsizei n, const GLuint* renderbuffers); -void gles2_glDeleteShader(void *_glfuncs, GLuint shader); -void gles2_glDepthRangef(void *_glfuncs, GLclampf zNear, GLclampf zFar); -void gles2_glDetachShader(void *_glfuncs, GLuint program, GLuint shader); -void gles2_glDisableVertexAttribArray(void *_glfuncs, GLuint index); -void gles2_glEnableVertexAttribArray(void *_glfuncs, GLuint index); -void gles2_glFramebufferRenderbuffer(void *_glfuncs, GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -void gles2_glFramebufferTexture2D(void *_glfuncs, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -void gles2_glGenBuffers(void *_glfuncs, GLsizei n, GLuint* buffers); -void gles2_glGenerateMipmap(void *_glfuncs, GLenum target); -void gles2_glGenFramebuffers(void *_glfuncs, GLsizei n, GLuint* framebuffers); -void gles2_glGenRenderbuffers(void *_glfuncs, GLsizei n, GLuint* renderbuffers); -void gles2_glGetActiveAttrib(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name); -void gles2_glGetActiveUniform(void *_glfuncs, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* gltype, GLchar* name); -void gles2_glGetAttachedShaders(void *_glfuncs, GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders); -GLint gles2_glGetAttribLocation(void *_glfuncs, GLuint program, const GLchar* name); -void gles2_glGetBufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gles2_glGetFramebufferAttachmentParameteriv(void *_glfuncs, GLenum target, GLenum attachment, GLenum pname, GLint* params); -void gles2_glGetProgramiv(void *_glfuncs, GLuint program, GLenum pname, GLint* params); -void gles2_glGetProgramInfoLog(void *_glfuncs, GLuint program, GLsizei bufSize, GLsizei* length, GLchar* infoLog); -void gles2_glGetRenderbufferParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gles2_glGetShaderiv(void *_glfuncs, GLuint shader, GLenum pname, GLint* params); -void gles2_glGetShaderInfoLog(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* infoLog); -void gles2_glGetShaderPrecisionFormat(void *_glfuncs, GLenum shadertype, GLenum precisionType, GLint* range_, GLint* precision); -void gles2_glGetShaderSource(void *_glfuncs, GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* source); -void gles2_glGetUniformfv(void *_glfuncs, GLuint program, GLint location, GLfloat* params); -void gles2_glGetUniformiv(void *_glfuncs, GLuint program, GLint location, GLint* params); -GLint gles2_glGetUniformLocation(void *_glfuncs, GLuint program, const GLchar* name); -void gles2_glGetVertexAttribfv(void *_glfuncs, GLuint index, GLenum pname, GLfloat* params); -void gles2_glGetVertexAttribiv(void *_glfuncs, GLuint index, GLenum pname, GLint* params); -GLboolean gles2_glIsBuffer(void *_glfuncs, GLuint buffer); -GLboolean gles2_glIsFramebuffer(void *_glfuncs, GLuint framebuffer); -GLboolean gles2_glIsProgram(void *_glfuncs, GLuint program); -GLboolean gles2_glIsRenderbuffer(void *_glfuncs, GLuint renderbuffer); -GLboolean gles2_glIsShader(void *_glfuncs, GLuint shader); -void gles2_glLinkProgram(void *_glfuncs, GLuint program); -void gles2_glReleaseShaderCompiler(void *_glfuncs); -void gles2_glRenderbufferStorage(void *_glfuncs, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height); -void gles2_glSampleCoverage(void *_glfuncs, GLclampf value, GLboolean invert); -void gles2_glShaderBinary(void *_glfuncs, GLint n, const GLuint* shaders, GLenum binaryFormat, const GLvoid* binary, GLint length); -void gles2_glShaderSource(void *_glfuncs, GLuint shader, GLsizei count, const GLchar** source, const GLint* length); -void gles2_glStencilFuncSeparate(void *_glfuncs, GLenum face, GLenum glfunc, GLint ref, GLuint mask); -void gles2_glStencilMaskSeparate(void *_glfuncs, GLenum face, GLuint mask); -void gles2_glStencilOpSeparate(void *_glfuncs, GLenum face, GLenum fail, GLenum zfail, GLenum zpass); -void gles2_glUniform1f(void *_glfuncs, GLint location, GLfloat v0); -void gles2_glUniform1fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gles2_glUniform1i(void *_glfuncs, GLint location, GLint v0); -void gles2_glUniform1iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gles2_glUniform2f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1); -void gles2_glUniform2fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gles2_glUniform2i(void *_glfuncs, GLint location, GLint v0, GLint v1); -void gles2_glUniform2iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gles2_glUniform3f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -void gles2_glUniform3fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gles2_glUniform3i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2); -void gles2_glUniform3iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gles2_glUniform4f(void *_glfuncs, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -void gles2_glUniform4fv(void *_glfuncs, GLint location, GLsizei count, const GLfloat* value); -void gles2_glUniform4i(void *_glfuncs, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -void gles2_glUniform4iv(void *_glfuncs, GLint location, GLsizei count, const GLint* value); -void gles2_glUniformMatrix2fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gles2_glUniformMatrix3fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gles2_glUniformMatrix4fv(void *_glfuncs, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -void gles2_glUseProgram(void *_glfuncs, GLuint program); -void gles2_glValidateProgram(void *_glfuncs, GLuint program); -void gles2_glVertexAttrib1f(void *_glfuncs, GLuint index, GLfloat x); -void gles2_glVertexAttrib1fv(void *_glfuncs, GLuint index, const GLfloat* values); -void gles2_glVertexAttrib2f(void *_glfuncs, GLuint index, GLfloat x, GLfloat y); -void gles2_glVertexAttrib2fv(void *_glfuncs, GLuint index, const GLfloat* values); -void gles2_glVertexAttrib3f(void *_glfuncs, GLuint index, GLfloat x, GLfloat y, GLfloat z); -void gles2_glVertexAttrib3fv(void *_glfuncs, GLuint index, const GLfloat* values); -void gles2_glVertexAttrib4f(void *_glfuncs, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -void gles2_glVertexAttrib4fv(void *_glfuncs, GLuint index, const GLfloat* values); -void gles2_glVertexAttribPointer(void *_glfuncs, GLuint index, GLint size, GLenum gltype, GLboolean normalized, GLsizei stride, const GLvoid* offset); -void gles2_glBindTexture(void *_glfuncs, GLenum target, GLuint texture); -void gles2_glBlendFunc(void *_glfuncs, GLenum sfactor, GLenum dfactor); -void gles2_glClear(void *_glfuncs, GLbitfield mask); -void gles2_glClearColor(void *_glfuncs, GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); -void gles2_glClearStencil(void *_glfuncs, GLint s); -void gles2_glColorMask(void *_glfuncs, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); -void gles2_glCopyTexImage2D(void *_glfuncs, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -void gles2_glCopyTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -void gles2_glCullFace(void *_glfuncs, GLenum mode); -void gles2_glDeleteTextures(void *_glfuncs, GLsizei n, const GLuint* textures); -void gles2_glDepthFunc(void *_glfuncs, GLenum glfunc); -void gles2_glDepthMask(void *_glfuncs, GLboolean flag); -void gles2_glDisable(void *_glfuncs, GLenum cap); -void gles2_glDrawArrays(void *_glfuncs, GLenum mode, GLint first, GLsizei count); -void gles2_glDrawElements(void *_glfuncs, GLenum mode, GLsizei count, GLenum gltype, const GLvoid* indices); -void gles2_glEnable(void *_glfuncs, GLenum cap); -void gles2_glFinish(void *_glfuncs); -void gles2_glFlush(void *_glfuncs); -void gles2_glFrontFace(void *_glfuncs, GLenum mode); -void gles2_glGenTextures(void *_glfuncs, GLsizei n, GLuint* textures); -void gles2_glGetBooleanv(void *_glfuncs, GLenum pname, GLboolean* params); -GLenum gles2_glGetError(void *_glfuncs); -void gles2_glGetFloatv(void *_glfuncs, GLenum pname, GLfloat* params); -void gles2_glGetIntegerv(void *_glfuncs, GLenum pname, GLint* params); -void gles2_glGetTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, GLfloat* params); -void gles2_glGetTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, GLint* params); -void gles2_glHint(void *_glfuncs, GLenum target, GLenum mode); -GLboolean gles2_glIsEnabled(void *_glfuncs, GLenum cap); -GLboolean gles2_glIsTexture(void *_glfuncs, GLuint texture); -void gles2_glLineWidth(void *_glfuncs, GLfloat width); -void gles2_glPixelStorei(void *_glfuncs, GLenum pname, GLint param); -void gles2_glPolygonOffset(void *_glfuncs, GLfloat factor, GLfloat units); -void gles2_glReadPixels(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum gltype, GLvoid* pixels); -void gles2_glScissor(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height); -void gles2_glStencilFunc(void *_glfuncs, GLenum glfunc, GLint ref, GLuint mask); -void gles2_glStencilMask(void *_glfuncs, GLuint mask); -void gles2_glStencilOp(void *_glfuncs, GLenum fail, GLenum zfail, GLenum zpass); -void gles2_glTexImage2D(void *_glfuncs, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum gltype, const GLvoid* pixels); -void gles2_glTexParameterf(void *_glfuncs, GLenum target, GLenum pname, GLfloat param); -void gles2_glTexParameterfv(void *_glfuncs, GLenum target, GLenum pname, const GLfloat* params); -void gles2_glTexParameteri(void *_glfuncs, GLenum target, GLenum pname, GLint param); -void gles2_glTexParameteriv(void *_glfuncs, GLenum target, GLenum pname, const GLint* params); -void gles2_glTexSubImage2D(void *_glfuncs, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum gltype, const GLvoid* pixels); -void gles2_glViewport(void *_glfuncs, GLint x, GLint y, GLsizei width, GLsizei height); - - -#ifdef __cplusplus -} // extern "C" -#endif diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/es2/gl.go b/Godeps/_workspace/src/github.com/obscuren/qml/gl/es2/gl.go deleted file mode 100644 index 82c9d77cfe..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/es2/gl.go +++ /dev/null @@ -1,2990 +0,0 @@ -// ** file automatically generated by glgen -- do not edit manually ** - -package GL - -// #cgo CXXFLAGS: -std=c++0x -pedantic-errors -Wall -fno-strict-aliasing -// #cgo LDFLAGS: -lstdc++ -// #cgo !darwin LDFLAGS: -lGL -// #cgo darwin LDFLAGS: -framework OpenGL -// #cgo pkg-config: Qt5Core Qt5OpenGL -// -// #include "funcs.h" -// -// void free(void*); -// -import "C" - -import ( - "fmt" - "reflect" - "unsafe" - - "gopkg.in/qml.v1/gl/glbase" -) - -// API returns a value that offers methods matching the OpenGL version ES2 API. -// -// The returned API must not be used after the provided OpenGL context becomes invalid. -func API(context glbase.Contexter) *GL { - gl := &GL{} - gl.funcs = C.gles2_funcs() - if gl.funcs == nil { - panic(fmt.Errorf("OpenGL version ES2 is not available")) - } - return gl -} - -// GL implements the OpenGL version ES2 API. Values of this -// type must be created via the API function, and it must not be used after -// the associated OpenGL context becomes invalid. -type GL struct { - funcs unsafe.Pointer -} - -const ( - FALSE = 0 - TRUE = 1 - NONE = 0 - - BYTE = 0x1400 - UNSIGNED_BYTE = 0x1401 - SHORT = 0x1402 - UNSIGNED_SHORT = 0x1403 - INT = 0x1404 - UNSIGNED_INT = 0x1405 - FLOAT = 0x1406 - FIXED = 0x140C - - COLOR_BUFFER_BIT = 0x00004000 - DEPTH_BUFFER_BIT = 0x00000100 - STENCIL_BUFFER_BIT = 0x00000400 - - ALWAYS = 0x0207 - EQUAL = 0x0202 - GEQUAL = 0x0206 - GREATER = 0x0204 - LEQUAL = 0x0203 - LESS = 0x0201 - NEVER = 0x0200 - NOTEQUAL = 0x0205 - - DST_ALPHA = 0x0304 - ONE = 1 - ONE_MINUS_DST_ALPHA = 0x0305 - ONE_MINUS_SRC_ALPHA = 0x0303 - ONE_MINUS_SRC_COLOR = 0x0301 - SRC_ALPHA = 0x0302 - SRC_COLOR = 0x0300 - ZERO = 0 - - DST_COLOR = 0x0306 - ONE_MINUS_DST_COLOR = 0x0307 - SRC_ALPHA_SATURATE = 0x0308 - - BACK = 0x0405 - FRONT = 0x0404 - FRONT_AND_BACK = 0x0408 - - BLEND = 0x0BE2 - CULL_FACE = 0x0B44 - DEPTH_TEST = 0x0B71 - DITHER = 0x0BD0 - POLYGON_OFFSET_FILL = 0x8037 - SCISSOR_TEST = 0x0C11 - STENCIL_TEST = 0x0B90 - TEXTURE_2D = 0x0DE1 - - INVALID_ENUM = 0x0500 - INVALID_FRAMEBUFFER_OPERATION = 0x0506 - INVALID_OPERATION = 0x0502 - INVALID_VALUE = 0x0501 - NO_ERROR = 0 - OUT_OF_MEMORY = 0x0505 - - LINEAR = 0x2601 - - CCW = 0x0901 - CW = 0x0900 - - ALIASED_LINE_WIDTH_RANGE = 0x846E - ALIASED_POINT_SIZE_RANGE = 0x846D - ALPHA_BITS = 0x0D55 - BLUE_BITS = 0x0D54 - COLOR_CLEAR_VALUE = 0x0C22 - COLOR_WRITEMASK = 0x0C23 - CULL_FACE_MODE = 0x0B45 - DEPTH_BITS = 0x0D56 - DEPTH_CLEAR_VALUE = 0x0B73 - DEPTH_FUNC = 0x0B74 - DEPTH_RANGE = 0x0B70 - DEPTH_WRITEMASK = 0x0B72 - FRONT_FACE = 0x0B46 - GREEN_BITS = 0x0D53 - LINE_WIDTH = 0x0B21 - MAX_TEXTURE_SIZE = 0x0D33 - MAX_VIEWPORT_DIMS = 0x0D3A - PACK_ALIGNMENT = 0x0D05 - POLYGON_OFFSET_FACTOR = 0x8038 - POLYGON_OFFSET_UNITS = 0x2A00 - RED_BITS = 0x0D52 - SCISSOR_BOX = 0x0C10 - STENCIL_BITS = 0x0D57 - STENCIL_CLEAR_VALUE = 0x0B91 - STENCIL_FAIL = 0x0B94 - STENCIL_FUNC = 0x0B92 - STENCIL_PASS_DEPTH_FAIL = 0x0B95 - STENCIL_PASS_DEPTH_PASS = 0x0B96 - STENCIL_REF = 0x0B97 - STENCIL_VALUE_MASK = 0x0B93 - STENCIL_WRITEMASK = 0x0B98 - SUBPIXEL_BITS = 0x0D50 - TEXTURE_BINDING_2D = 0x8069 - UNPACK_ALIGNMENT = 0x0CF5 - VIEWPORT = 0x0BA2 - - TEXTURE_MAG_FILTER = 0x2800 - TEXTURE_MIN_FILTER = 0x2801 - TEXTURE_WRAP_S = 0x2802 - TEXTURE_WRAP_T = 0x2803 - - DONT_CARE = 0x1100 - FASTEST = 0x1101 - NICEST = 0x1102 - - GENERATE_MIPMAP_HINT = 0x8192 - - REPLACE = 0x1E01 - - INVERT = 0x150A - - TEXTURE = 0x1702 - - ALPHA = 0x1906 - DEPTH_COMPONENT = 0x1902 - LUMINANCE = 0x1909 - LUMINANCE_ALPHA = 0x190A - RGB = 0x1907 - RGBA = 0x1908 - - RGB5_A1 = 0x8057 - RGBA4 = 0x8056 - - UNSIGNED_SHORT_4_4_4_4 = 0x8033 - UNSIGNED_SHORT_5_5_5_1 = 0x8034 - - LINES = 0x0001 - LINE_LOOP = 0x0002 - LINE_STRIP = 0x0003 - POINTS = 0x0000 - TRIANGLES = 0x0004 - TRIANGLE_FAN = 0x0006 - TRIANGLE_STRIP = 0x0005 - - DECR = 0x1E03 - INCR = 0x1E02 - KEEP = 0x1E00 - - EXTENSIONS = 0x1F03 - RENDERER = 0x1F01 - VENDOR = 0x1F00 - VERSION = 0x1F02 - - NEAREST = 0x2600 - - LINEAR_MIPMAP_LINEAR = 0x2703 - LINEAR_MIPMAP_NEAREST = 0x2701 - NEAREST_MIPMAP_LINEAR = 0x2702 - NEAREST_MIPMAP_NEAREST = 0x2700 - - CLAMP_TO_EDGE = 0x812F - REPEAT = 0x2901 - - CONSTANT_COLOR = 0x8001 - ONE_MINUS_CONSTANT_COLOR = 0x8002 - CONSTANT_ALPHA = 0x8003 - ONE_MINUS_CONSTANT_ALPHA = 0x8004 - BLEND_COLOR = 0x8005 - FUNC_ADD = 0x8006 - BLEND_EQUATION = 0x8009 - BLEND_EQUATION_RGB = 0x8009 - FUNC_SUBTRACT = 0x800A - FUNC_REVERSE_SUBTRACT = 0x800B - SAMPLE_ALPHA_TO_COVERAGE = 0x809E - SAMPLE_COVERAGE = 0x80A0 - SAMPLE_BUFFERS = 0x80A8 - SAMPLES = 0x80A9 - SAMPLE_COVERAGE_VALUE = 0x80AA - SAMPLE_COVERAGE_INVERT = 0x80AB - BLEND_DST_RGB = 0x80C8 - BLEND_SRC_RGB = 0x80C9 - BLEND_DST_ALPHA = 0x80CA - BLEND_SRC_ALPHA = 0x80CB - DEPTH_COMPONENT16 = 0x81A5 - UNSIGNED_SHORT_5_6_5 = 0x8363 - MIRRORED_REPEAT = 0x8370 - TEXTURE0 = 0x84C0 - TEXTURE1 = 0x84C1 - TEXTURE2 = 0x84C2 - TEXTURE3 = 0x84C3 - TEXTURE4 = 0x84C4 - TEXTURE5 = 0x84C5 - TEXTURE6 = 0x84C6 - TEXTURE7 = 0x84C7 - TEXTURE8 = 0x84C8 - TEXTURE9 = 0x84C9 - TEXTURE10 = 0x84CA - TEXTURE11 = 0x84CB - TEXTURE12 = 0x84CC - TEXTURE13 = 0x84CD - TEXTURE14 = 0x84CE - TEXTURE15 = 0x84CF - TEXTURE16 = 0x84D0 - TEXTURE17 = 0x84D1 - TEXTURE18 = 0x84D2 - TEXTURE19 = 0x84D3 - TEXTURE20 = 0x84D4 - TEXTURE21 = 0x84D5 - TEXTURE22 = 0x84D6 - TEXTURE23 = 0x84D7 - TEXTURE24 = 0x84D8 - TEXTURE25 = 0x84D9 - TEXTURE26 = 0x84DA - TEXTURE27 = 0x84DB - TEXTURE28 = 0x84DC - TEXTURE29 = 0x84DD - TEXTURE30 = 0x84DE - TEXTURE31 = 0x84DF - ACTIVE_TEXTURE = 0x84E0 - MAX_RENDERBUFFER_SIZE = 0x84E8 - INCR_WRAP = 0x8507 - DECR_WRAP = 0x8508 - TEXTURE_CUBE_MAP = 0x8513 - TEXTURE_BINDING_CUBE_MAP = 0x8514 - TEXTURE_CUBE_MAP_POSITIVE_X = 0x8515 - TEXTURE_CUBE_MAP_NEGATIVE_X = 0x8516 - TEXTURE_CUBE_MAP_POSITIVE_Y = 0x8517 - TEXTURE_CUBE_MAP_NEGATIVE_Y = 0x8518 - TEXTURE_CUBE_MAP_POSITIVE_Z = 0x8519 - TEXTURE_CUBE_MAP_NEGATIVE_Z = 0x851A - MAX_CUBE_MAP_TEXTURE_SIZE = 0x851C - VERTEX_ATTRIB_ARRAY_ENABLED = 0x8622 - VERTEX_ATTRIB_ARRAY_SIZE = 0x8623 - VERTEX_ATTRIB_ARRAY_STRIDE = 0x8624 - VERTEX_ATTRIB_ARRAY_TYPE = 0x8625 - CURRENT_VERTEX_ATTRIB = 0x8626 - VERTEX_ATTRIB_ARRAY_POINTER = 0x8645 - NUM_COMPRESSED_TEXTURE_FORMATS = 0x86A2 - COMPRESSED_TEXTURE_FORMATS = 0x86A3 - BUFFER_SIZE = 0x8764 - BUFFER_USAGE = 0x8765 - STENCIL_BACK_FUNC = 0x8800 - STENCIL_BACK_FAIL = 0x8801 - STENCIL_BACK_PASS_DEPTH_FAIL = 0x8802 - STENCIL_BACK_PASS_DEPTH_PASS = 0x8803 - BLEND_EQUATION_ALPHA = 0x883D - MAX_VERTEX_ATTRIBS = 0x8869 - VERTEX_ATTRIB_ARRAY_NORMALIZED = 0x886A - MAX_TEXTURE_IMAGE_UNITS = 0x8872 - ARRAY_BUFFER = 0x8892 - ELEMENT_ARRAY_BUFFER = 0x8893 - ARRAY_BUFFER_BINDING = 0x8894 - ELEMENT_ARRAY_BUFFER_BINDING = 0x8895 - VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = 0x889F - STREAM_DRAW = 0x88E0 - STATIC_DRAW = 0x88E4 - DYNAMIC_DRAW = 0x88E8 - FRAGMENT_SHADER = 0x8B30 - VERTEX_SHADER = 0x8B31 - MAX_VERTEX_TEXTURE_IMAGE_UNITS = 0x8B4C - MAX_COMBINED_TEXTURE_IMAGE_UNITS = 0x8B4D - SHADER_TYPE = 0x8B4F - FLOAT_VEC2 = 0x8B50 - FLOAT_VEC3 = 0x8B51 - FLOAT_VEC4 = 0x8B52 - INT_VEC2 = 0x8B53 - INT_VEC3 = 0x8B54 - INT_VEC4 = 0x8B55 - BOOL = 0x8B56 - BOOL_VEC2 = 0x8B57 - BOOL_VEC3 = 0x8B58 - BOOL_VEC4 = 0x8B59 - FLOAT_MAT2 = 0x8B5A - FLOAT_MAT3 = 0x8B5B - FLOAT_MAT4 = 0x8B5C - SAMPLER_2D = 0x8B5E - SAMPLER_CUBE = 0x8B60 - DELETE_STATUS = 0x8B80 - COMPILE_STATUS = 0x8B81 - LINK_STATUS = 0x8B82 - VALIDATE_STATUS = 0x8B83 - INFO_LOG_LENGTH = 0x8B84 - ATTACHED_SHADERS = 0x8B85 - ACTIVE_UNIFORMS = 0x8B86 - ACTIVE_UNIFORM_MAX_LENGTH = 0x8B87 - SHADER_SOURCE_LENGTH = 0x8B88 - ACTIVE_ATTRIBUTES = 0x8B89 - ACTIVE_ATTRIBUTE_MAX_LENGTH = 0x8B8A - SHADING_LANGUAGE_VERSION = 0x8B8C - CURRENT_PROGRAM = 0x8B8D - IMPLEMENTATION_COLOR_READ_TYPE = 0x8B9A - IMPLEMENTATION_COLOR_READ_FORMAT = 0x8B9B - STENCIL_BACK_REF = 0x8CA3 - STENCIL_BACK_VALUE_MASK = 0x8CA4 - STENCIL_BACK_WRITEMASK = 0x8CA5 - FRAMEBUFFER_BINDING = 0x8CA6 - RENDERBUFFER_BINDING = 0x8CA7 - FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE = 0x8CD0 - FRAMEBUFFER_ATTACHMENT_OBJECT_NAME = 0x8CD1 - FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL = 0x8CD2 - FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE = 0x8CD3 - FRAMEBUFFER_COMPLETE = 0x8CD5 - FRAMEBUFFER_INCOMPLETE_ATTACHMENT = 0x8CD6 - FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = 0x8CD7 - FRAMEBUFFER_INCOMPLETE_DIMENSIONS = 0x8CD9 - FRAMEBUFFER_UNSUPPORTED = 0x8CDD - COLOR_ATTACHMENT0 = 0x8CE0 - DEPTH_ATTACHMENT = 0x8D00 - STENCIL_ATTACHMENT = 0x8D20 - FRAMEBUFFER = 0x8D40 - RENDERBUFFER = 0x8D41 - RENDERBUFFER_WIDTH = 0x8D42 - RENDERBUFFER_HEIGHT = 0x8D43 - RENDERBUFFER_INTERNAL_FORMAT = 0x8D44 - STENCIL_INDEX8 = 0x8D48 - RENDERBUFFER_RED_SIZE = 0x8D50 - RENDERBUFFER_GREEN_SIZE = 0x8D51 - RENDERBUFFER_BLUE_SIZE = 0x8D52 - RENDERBUFFER_ALPHA_SIZE = 0x8D53 - RENDERBUFFER_DEPTH_SIZE = 0x8D54 - RENDERBUFFER_STENCIL_SIZE = 0x8D55 - RGB565 = 0x8D62 - LOW_FLOAT = 0x8DF0 - MEDIUM_FLOAT = 0x8DF1 - HIGH_FLOAT = 0x8DF2 - LOW_INT = 0x8DF3 - MEDIUM_INT = 0x8DF4 - HIGH_INT = 0x8DF5 - SHADER_BINARY_FORMATS = 0x8DF8 - NUM_SHADER_BINARY_FORMATS = 0x8DF9 - SHADER_COMPILER = 0x8DFA - MAX_VERTEX_UNIFORM_VECTORS = 0x8DFB - MAX_VARYING_VECTORS = 0x8DFC - MAX_FRAGMENT_UNIFORM_VECTORS = 0x8DFD -) - -// https://www.opengl.org/sdk/docs/man2/xhtml/glActiveTexture.xml -func (gl *GL) ActiveTexture(texture glbase.Enum) { - C.gles2_glActiveTexture(gl.funcs, C.GLenum(texture)) -} - -// AttachShader attaches a shader object to a program object. -// -// In order to create an executable, there must be a way to specify the list -// of things that will be linked together. Program objects provide this -// mechanism. Shaders that are to be linked together in a program object must -// first be attached to that program object. This indicates that shader will -// be included in link operations that will be performed on program. -// -// All operations that can be performed on a shader object are valid whether -// or not the shader object is attached to a program object. It is -// permissible to attach a shader object to a program object before source -// code has been loaded into the shader object or before the shader object -// has been compiled. It is permissible to attach multiple shader objects of -// the same type because each may contain a portion of the complete shader. -// It is also permissible to attach a shader object to more than one program -// object. If a shader object is deleted while it is attached to a program -// object, it will be flagged for deletion, and deletion will not occur until -// DetachShader is called to detach it from all program objects to which it -// is attached. -// -// Error GL.INVALID_VALUE is generated if either program or shader is not a -// value generated by OpenGL. GL.INVALID_OPERATION is generated if program -// is not a program object. GL.INVALID_OPERATION is generated if shader is -// not a shader object. GL.INVALID_OPERATION is generated if shader is -// already attached to program. GL.INVALID_OPERATION is generated if -// AttachShader is executed between the execution of Begin and the -// corresponding execution of End. -// -// AttachShader is available in GL version 2.0 or greater. -func (gl *GL) AttachShader(program glbase.Program, shader glbase.Shader) { - C.gles2_glAttachShader(gl.funcs, C.GLuint(program), C.GLuint(shader)) -} - -// BindAttribLocation associates a user-defined attribute variable in the program -// object specified by program with a generic vertex attribute index. The name -// parameter specifies the name of the vertex shader attribute variable to -// which index is to be bound. When program is made part of the current state, -// values provided via the generic vertex attribute index will modify the -// value of the user-defined attribute variable specified by name. -// -// If name refers to a matrix attribute variable, index refers to the first -// column of the matrix. Other matrix columns are then automatically bound to -// locations index+1 for a matrix of type mat2; index+1 and index+2 for a -// matrix of type mat3; and index+1, index+2, and index+3 for a matrix of -// type mat4. -// -// This command makes it possible for vertex shaders to use descriptive names -// for attribute variables rather than generic variables that are numbered -// from 0 to GL.MAX_VERTEX_ATTRIBS-1. The values sent to each generic -// attribute index are part of current state, just like standard vertex -// attributes such as color, normal, and vertex position. If a different -// program object is made current by calling UseProgram, the generic vertex -// attributes are tracked in such a way that the same values will be observed -// by attributes in the new program object that are also bound to index. -// -// Attribute variable name-to-generic attribute index bindings for a program -// object can be explicitly assigned at any time by calling -// BindAttribLocation. Attribute bindings do not go into effect until -// LinkProgram is called. After a program object has been linked -// successfully, the index values for generic attributes remain fixed (and -// their values can be queried) until the next link command occurs. -// -// Applications are not allowed to bind any of the standard OpenGL vertex -// attributes using this command, as they are bound automatically when -// needed. Any attribute binding that occurs after the program object has -// been linked will not take effect until the next time the program object is -// linked. -// -// If name was bound previously, that information is lost. Thus you cannot -// bind one user-defined attribute variable to multiple indices, but you can -// bind multiple user-defined attribute variables to the same index. -// -// Applications are allowed to bind more than one user-defined attribute -// variable to the same generic vertex attribute index. This is called -// aliasing, and it is allowed only if just one of the aliased attributes is -// active in the executable program, or if no path through the shader -// consumes more than one attribute of a set of attributes aliased to the -// same location. The compiler and linker are allowed to assume that no -// aliasing is done and are free to employ optimizations that work only in -// the absence of aliasing. OpenGL implementations are not required to do -// error checking to detect aliasing. Because there is no way to bind -// standard attributes, it is not possible to alias generic attributes with -// conventional ones (except for generic attribute 0). -// -// BindAttribLocation can be called before any vertex shader objects are -// bound to the specified program object. It is also permissible to bind a -// generic attribute index to an attribute variable name that is never used -// in a vertex shader. -// -// Active attributes that are not explicitly bound will be bound by the -// linker when LinkProgram is called. The locations assigned can be queried -// by calling GetAttribLocation. -// -// Error GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. -// GL.INVALID_OPERATION is generated if name starts with the reserved prefix "gl_". -// GL.INVALID_VALUE is generated if program is not a value generated by OpenGL. -// GL.INVALID_OPERATION is generated if program is not a program object. -// GL.INVALID_OPERATION is generated if BindAttribLocation is executed -// between the execution of Begin and the corresponding execution of End. -// -// BindAttribLocation is available in GL version 2.0 or greater. -func (gl *GL) BindAttribLocation(program glbase.Program, index glbase.Attrib, name string) { - name_cstr := C.CString(name) - C.gles2_glBindAttribLocation(gl.funcs, C.GLuint(program), C.GLuint(index), (*C.GLchar)(name_cstr)) - C.free(unsafe.Pointer(name_cstr)) -} - -// BindBuffer creates or puts in use a named buffer object. -// Calling BindBuffer with target set to GL.ARRAY_BUFFER, -// GL.ELEMENT_ARRAY_BUFFER, GL.PIXEL_PACK_BUFFER or GL.PIXEL_UNPACK_BUFFER -// and buffer set to the name of the new buffer object binds the buffer -// object name to the target. When a buffer object is bound to a target, the -// previous binding for that target is automatically broken. -// -// Buffer object names are unsigned integers. The value zero is reserved, but -// there is no default buffer object for each buffer object target. Instead, -// buffer set to zero effectively unbinds any buffer object previously bound, -// and restores client memory usage for that buffer object target. Buffer -// object names and the corresponding buffer object contents are local to the -// shared display-list space (see XCreateContext) of the current GL rendering -// context; two rendering contexts share buffer object names only if they -// also share display lists. -// -// GenBuffers may be called to generate a set of new buffer object names. -// -// The state of a buffer object immediately after it is first bound is an -// unmapped zero-sized memory buffer with GL.READ_WRITE access and -// GL.STATIC_DRAW usage. -// -// While a non-zero buffer object name is bound, GL operations on the target -// to which it is bound affect the bound buffer object, and queries of the -// target to which it is bound return state from the bound buffer object. -// While buffer object name zero is bound, as in the initial state, attempts -// to modify or query state on the target to which it is bound generates an -// GL.INVALID_OPERATION error. -// -// When vertex array pointer state is changed, for example by a call to -// NormalPointer, the current buffer object binding (GL.ARRAY_BUFFER_BINDING) -// is copied into the corresponding client state for the vertex array type -// being changed, for example GL.NORMAL_ARRAY_BUFFER_BINDING. While a -// non-zero buffer object is bound to the GL.ARRAY_BUFFER target, the vertex -// array pointer parameter that is traditionally interpreted as a pointer to -// client-side memory is instead interpreted as an offset within the buffer -// object measured in basic machine units. -// -// While a non-zero buffer object is bound to the GL.ELEMENT_ARRAY_BUFFER -// target, the indices parameter of DrawElements, DrawRangeElements, or -// MultiDrawElements that is traditionally interpreted as a pointer to -// client-side memory is instead interpreted as an offset within the buffer -// object measured in basic machine units. -// -// While a non-zero buffer object is bound to the GL.PIXEL_PACK_BUFFER -// target, the following commands are affected: GetCompressedTexImage, -// GetConvolutionFilter, GetHistogram, GetMinmax, GetPixelMap, -// GetPolygonStipple, GetSeparableFilter, GetTexImage, and ReadPixels. The -// pointer parameter that is traditionally interpreted as a pointer to -// client-side memory where the pixels are to be packed is instead -// interpreted as an offset within the buffer object measured in basic -// machine units. -// -// While a non-zero buffer object is bound to the GL.PIXEL_UNPACK_BUFFER -// target, the following commands are affected: Bitmap, ColorSubTable, -// ColorTable, CompressedTexImage1D, CompressedTexImage2D, -// CompressedTexImage3D, CompressedTexSubImage1D, CompressedTexSubImage2D, -// CompressedTexSubImage3D, ConvolutionFilter1D, ConvolutionFilter2D, -// DrawPixels, PixelMap, PolygonStipple, SeparableFilter2D, TexImage1D, -// TexImage2D, TexImage3D, TexSubImage1D, TexSubImage2D, and TexSubImage3D. -// The pointer parameter that is traditionally interpreted as a pointer to -// client-side memory from which the pixels are to be unpacked is instead -// interpreted as an offset within the buffer object measured in basic -// machine units. -// -// A buffer object binding created with BindBuffer remains active until a -// different buffer object name is bound to the same target, or until the -// bound buffer object is deleted with DeleteBuffers. -// -// Once created, a named buffer object may be re-bound to any target as often -// as needed. However, the GL implementation may make choices about how to -// optimize the storage of a buffer object based on its initial binding -// target. -// -// Error GL.INVALID_ENUM is generated if target is not one of the allowable -// values. GL.INVALID_OPERATION is generated if BindBuffer is executed -// between the execution of Begin and the corresponding execution of End. -// -// BindBuffer is available in GL version 1.5 or greater. -func (gl *GL) BindBuffer(target glbase.Enum, buffer glbase.Buffer) { - C.gles2_glBindBuffer(gl.funcs, C.GLenum(target), C.GLuint(buffer)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glBindFramebuffer.xml -func (gl *GL) BindFramebuffer(target glbase.Enum, framebuffer glbase.Framebuffer) { - C.gles2_glBindFramebuffer(gl.funcs, C.GLenum(target), C.GLuint(framebuffer)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glBindRenderbuffer.xml -func (gl *GL) BindRenderbuffer(target glbase.Enum, renderbuffer glbase.Renderbuffer) { - C.gles2_glBindRenderbuffer(gl.funcs, C.GLenum(target), C.GLuint(renderbuffer)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glBlendColor.xml -func (gl *GL) BlendColor(red, green, blue, alpha glbase.Clampf) { - C.gles2_glBlendColor(gl.funcs, C.GLclampf(red), C.GLclampf(green), C.GLclampf(blue), C.GLclampf(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glBlendEquation.xml -func (gl *GL) BlendEquation(mode glbase.Enum) { - C.gles2_glBlendEquation(gl.funcs, C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glBlendEquationSeparate.xml -func (gl *GL) BlendEquationSeparate(modeRGB, modeAlpha glbase.Enum) { - C.gles2_glBlendEquationSeparate(gl.funcs, C.GLenum(modeRGB), C.GLenum(modeAlpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glBlendFuncSeparate.xml -func (gl *GL) BlendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha glbase.Enum) { - C.gles2_glBlendFuncSeparate(gl.funcs, C.GLenum(srcRGB), C.GLenum(dstRGB), C.GLenum(srcAlpha), C.GLenum(dstAlpha)) -} - -// BufferData creates a new data store for the buffer object currently -// bound to target. Any pre-existing data store is deleted. The new data -// store is created with the specified size in bytes and usage. If data is -// not nil, it must be a slice that is used to initialize the data store. -// In that case the size parameter is ignored and the store size will match -// the slice data size. -// -// In its initial state, the new data store is not mapped, it has a NULL -// mapped pointer, and its mapped access is GL.READ_WRITE. -// -// The target constant must be one of GL.ARRAY_BUFFER, GL.COPY_READ_BUFFER, -// GL.COPY_WRITE_BUFFER, GL.ELEMENT_ARRAY_BUFFER, GL.PIXEL_PACK_BUFFER, -// GL.PIXEL_UNPACK_BUFFER, GL.TEXTURE_BUFFER, GL.TRANSFORM_FEEDBACK_BUFFER, -// or GL.UNIFORM_BUFFER. -// -// The usage parameter is a hint to the GL implementation as to how a buffer -// object's data store will be accessed. This enables the GL implementation -// to make more intelligent decisions that may significantly impact buffer -// object performance. It does not, however, constrain the actual usage of -// the data store. usage can be broken down into two parts: first, the -// frequency of access (modification and usage), and second, the nature of -// that access. -// -// A usage frequency of STREAM and nature of DRAW is specified via the -// constant GL.STREAM_DRAW, for example. -// -// The usage frequency of access may be one of: -// -// STREAM -// The data store contents will be modified once and used at most a few times. -// -// STATIC -// The data store contents will be modified once and used many times. -// -// DYNAMIC -// The data store contents will be modified repeatedly and used many times. -// -// The usage nature of access may be one of: -// -// DRAW -// The data store contents are modified by the application, and used as -// the source for GL drawing and image specification commands. -// -// READ -// The data store contents are modified by reading data from the GL, -// and used to return that data when queried by the application. -// -// COPY -// The data store contents are modified by reading data from the GL, -// and used as the source for GL drawing and image specification -// commands. -// -// Clients must align data elements consistent with the requirements of the -// client platform, with an additional base-level requirement that an offset -// within a buffer to a datum comprising N bytes be a multiple of N. -// -// Error GL.INVALID_ENUM is generated if target is not one of the accepted -// buffer targets. GL.INVALID_ENUM is generated if usage is not -// GL.STREAM_DRAW, GL.STREAM_READ, GL.STREAM_COPY, GL.STATIC_DRAW, -// GL.STATIC_READ, GL.STATIC_COPY, GL.DYNAMIC_DRAW, GL.DYNAMIC_READ, or -// GL.DYNAMIC_COPY. GL.INVALID_VALUE is generated if size is negative. -// GL.INVALID_OPERATION is generated if the reserved buffer object name 0 is -// bound to target. GL.OUT_OF_MEMORY is generated if the GL is unable to -// create a data store with the specified size. -func (gl *GL) BufferData(target glbase.Enum, size int, data interface{}, usage glbase.Enum) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - if data != nil { - size = int(data_v.Type().Size()) * data_v.Len() - } - C.gles2_glBufferData(gl.funcs, C.GLenum(target), C.GLsizeiptr(size), data_ptr, C.GLenum(usage)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glBufferSubData.xml -func (gl *GL) BufferSubData(target glbase.Enum, offset, size int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gles2_glBufferSubData(gl.funcs, C.GLenum(target), C.GLintptr(offset), C.GLsizeiptr(size), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCheckFramebufferStatus.xml -func (gl *GL) CheckFramebufferStatus(target glbase.Enum) glbase.Enum { - glresult := C.gles2_glCheckFramebufferStatus(gl.funcs, C.GLenum(target)) - return glbase.Enum(glresult) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glClearDepthf.xml -func (gl *GL) ClearDepthf(depth glbase.Clampf) { - C.gles2_glClearDepthf(gl.funcs, C.GLclampf(depth)) -} - -// CompileShader compiles the source code strings that have been stored in -// the shader object specified by shader. -// -// The compilation status will be stored as part of the shader object's -// state. This value will be set to GL.TRUE if the shader was compiled without -// errors and is ready for use, and GL.FALSE otherwise. It can be queried by -// calling GetShaderiv with arguments shader and GL.COMPILE_STATUS. -// -// Compilation of a shader can fail for a number of reasons as specified by -// the OpenGL Shading Language Specification. Whether or not the compilation -// was successful, information about the compilation can be obtained from the -// shader object's information log by calling GetShaderInfoLog. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader is not a shader -// object. GL.INVALID_OPERATION is generated if CompileShader is executed -// between the execution of Begin and the corresponding execution of End. -// -// CompileShader is available in GL version 2.0 or greater. -func (gl *GL) CompileShader(shader glbase.Shader) { - C.gles2_glCompileShader(gl.funcs, C.GLuint(shader)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCompressedTexImage2D.xml -func (gl *GL) CompressedTexImage2D(target glbase.Enum, level int, internalFormat glbase.Enum, width, height, border, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gles2_glCompressedTexImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLint(border), C.GLsizei(imageSize), data_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCompressedTexSubImage2D.xml -func (gl *GL) CompressedTexSubImage2D(target glbase.Enum, level, xoffset, yoffset, width, height int, format glbase.Enum, imageSize int, data interface{}) { - var data_ptr unsafe.Pointer - var data_v = reflect.ValueOf(data) - if data != nil && data_v.Kind() != reflect.Slice { - panic("parameter data must be a slice") - } - if data != nil { - data_ptr = unsafe.Pointer(data_v.Index(0).Addr().Pointer()) - } - C.gles2_glCompressedTexSubImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLsizei(imageSize), data_ptr) -} - -// CreateProgram creates an empty program object and returns a non-zero -// value by which it can be referenced. A program object is an object to -// which shader objects can be attached. This provides a mechanism to specify -// the shader objects that will be linked to create a program. It also -// provides a means for checking the compatibility of the shaders that will -// be used to create a program (for instance, checking the compatibility -// between a vertex shader and a fragment shader). When no longer needed as -// part of a program object, shader objects can be detached. -// -// One or more executables are created in a program object by successfully -// attaching shader objects to it with AttachShader, successfully compiling -// the shader objects with CompileShader, and successfully linking the -// program object with LinkProgram. These executables are made part of -// current state when UseProgram is called. Program objects can be deleted -// by calling DeleteProgram. The memory associated with the program object -// will be deleted when it is no longer part of current rendering state for -// any context. -// -// Like display lists and texture objects, the name space for program objects -// may be shared across a set of contexts, as long as the server sides of the -// contexts share the same address space. If the name space is shared across -// contexts, any attached objects and the data associated with those attached -// objects are shared as well. -// -// Applications are responsible for providing the synchronization across API -// calls when objects are accessed from different execution threads. -// -// This function returns 0 if an error occurs creating the program object. -// -// Error GL.INVALID_OPERATION is generated if CreateProgram is executed -// between the execution of Begin and the corresponding execution of End. -// -// CreateProgram is available in GL version 2.0 or greater. -func (gl *GL) CreateProgram() glbase.Program { - glresult := C.gles2_glCreateProgram(gl.funcs) - return glbase.Program(glresult) -} - -// CreateShader creates an empty shader object and returns a non-zero value -// by which it can be referenced. A shader object is used to maintain the -// source code strings that define a shader. shaderType indicates the type of -// shader to be created. -// -// Two types of shaders are supported. A shader of type GL.VERTEX_SHADER is a -// shader that is intended to run on the programmable vertex processor and -// replace the fixed functionality vertex processing in OpenGL. A shader of -// type GL.FRAGMENT_SHADER is a shader that is intended to run on the -// programmable fragment processor and replace the fixed functionality -// fragment processing in OpenGL. -// -// When created, a shader object's GL.SHADER_TYPE parameter is set to either -// GL.VERTEX_SHADER or GL.FRAGMENT_SHADER, depending on the value of -// shaderType. -// -// Like display lists and texture objects, the name space for shader objects -// may be shared across a set of contexts, as long as the server sides of the -// contexts share the same address space. If the name space is shared across -// contexts, any attached objects and the data associated with those attached -// objects are shared as well. -// -// This function returns 0 if an error occurs creating the shader object. -// -// Error GL.INVALID_ENUM is generated if shaderType is not an accepted value. -// GL.INVALID_OPERATION is generated if CreateShader is executed between the -// execution of Begin and the corresponding execution of End. -// -// CreateShader is available in GL version 2.0 or greater. -func (gl *GL) CreateShader(gltype glbase.Enum) glbase.Shader { - glresult := C.gles2_glCreateShader(gl.funcs, C.GLenum(gltype)) - return glbase.Shader(glresult) -} - -// DeleteBuffers deletes the buffer objects whose names are stored in the -// buffers slice. -// -// After a buffer object is deleted, it has no contents, and its name is free -// for reuse (for example by GenBuffers). If a buffer object that is -// currently bound is deleted, the binding reverts to 0 (the absence of any -// buffer object, which reverts to client memory usage). -// -// DeleteBuffers silently ignores 0's and names that do not correspond to -// existing buffer objects. -// -// Error GL.INVALID_VALUE is generated if n is negative. GL.INVALID_OPERATION -// is generated if DeleteBuffers is executed between the execution of Begin -// and the corresponding execution of End. -// -// DeleteBuffers is available in GL version 1.5 or greater. -func (gl *GL) DeleteBuffers(buffers []glbase.Buffer) { - n := len(buffers) - if n == 0 { - return - } - C.gles2_glDeleteBuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&buffers[0]))) -} - -// DeleteFramebuffers deletes the framebuffer objects whose names are -// stored in the framebuffers slice. The name zero is reserved by the GL and -// is silently ignored, should it occur in framebuffers, as are other unused -// names. Once a framebuffer object is deleted, its name is again unused and -// it has no attachments. If a framebuffer that is currently bound to one or -// more of the targets GL.DRAW_FRAMEBUFFER or GL.READ_FRAMEBUFFER is deleted, -// it is as though BindFramebuffer had been executed with the corresponding -// target and framebuffer zero. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// DeleteFramebuffers is available in GL version 3.0 or greater. -func (gl *GL) DeleteFramebuffers(framebuffers []glbase.Framebuffer) { - n := len(framebuffers) - if n == 0 { - return - } - C.gles2_glDeleteFramebuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&framebuffers[0]))) -} - -// DeleteProgram frees the memory and invalidates the name associated with -// the program object specified by program. This command effectively undoes -// the effects of a call to CreateProgram. -// -// If a program object is in use as part of current rendering state, it will -// be flagged for deletion, but it will not be deleted until it is no longer -// part of current state for any rendering context. If a program object to be -// deleted has shader objects attached to it, those shader objects will be -// automatically detached but not deleted unless they have already been -// flagged for deletion by a previous call to DeleteShader. A value of 0 -// for program will be silently ignored. -// -// To determine whether a program object has been flagged for deletion, call -// GetProgram with arguments program and GL.DELETE_STATUS. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. -// -// DeleteProgram is available in GL version 2.0 or greater. -func (gl *GL) DeleteProgram(program glbase.Program) { - C.gles2_glDeleteProgram(gl.funcs, C.GLuint(program)) -} - -// DeleteRenderbuffers deletes the renderbuffer objects whose names are stored -// in the renderbuffers slice. The name zero is reserved by the GL and -// is silently ignored, should it occur in renderbuffers, as are other unused -// names. Once a renderbuffer object is deleted, its name is again unused and -// it has no contents. If a renderbuffer that is currently bound to the -// target GL.RENDERBUFFER is deleted, it is as though BindRenderbuffer had -// been executed with a target of GL.RENDERBUFFER and a name of zero. -// -// If a renderbuffer object is attached to one or more attachment points in -// the currently bound framebuffer, then it as if FramebufferRenderbuffer -// had been called, with a renderbuffer of zero for each attachment point to -// which this image was attached in the currently bound framebuffer. In other -// words, this renderbuffer object is first detached from all attachment -// ponits in the currently bound framebuffer. Note that the renderbuffer -// image is specifically not detached from any non-bound framebuffers. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// DeleteRenderbuffers is available in GL version 3.0 or greater. -func (gl *GL) DeleteRenderbuffers(renderbuffers []glbase.Renderbuffer) { - n := len(renderbuffers) - if n == 0 { - return - } - C.gles2_glDeleteRenderbuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&renderbuffers[0]))) -} - -// DeleteShader frees the memory and invalidates the name associated with -// the shader object specified by shader. This command effectively undoes the -// effects of a call to CreateShader. -// -// If a shader object to be deleted is attached to a program object, it will -// be flagged for deletion, but it will not be deleted until it is no longer -// attached to any program object, for any rendering context (it must -// be detached from wherever it was attached before it will be deleted). A -// value of 0 for shader will be silently ignored. -// -// To determine whether an object has been flagged for deletion, call -// GetShader with arguments shader and GL.DELETE_STATUS. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. -// -// DeleteShader is available in GL version 2.0 or greater. -func (gl *GL) DeleteShader(shader glbase.Shader) { - C.gles2_glDeleteShader(gl.funcs, C.GLuint(shader)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDepthRangef.xml -func (gl *GL) DepthRangef(zNear, zFar glbase.Clampf) { - C.gles2_glDepthRangef(gl.funcs, C.GLclampf(zNear), C.GLclampf(zFar)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDetachShader.xml -func (gl *GL) DetachShader(program glbase.Program, shader glbase.Shader) { - C.gles2_glDetachShader(gl.funcs, C.GLuint(program), C.GLuint(shader)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDisableVertexAttribArray.xml -func (gl *GL) DisableVertexAttribArray(index glbase.Attrib) { - C.gles2_glDisableVertexAttribArray(gl.funcs, C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEnableVertexAttribArray.xml -func (gl *GL) EnableVertexAttribArray(index glbase.Attrib) { - C.gles2_glEnableVertexAttribArray(gl.funcs, C.GLuint(index)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFramebufferRenderbuffer.xml -func (gl *GL) FramebufferRenderbuffer(target, attachment, renderbuffertarget glbase.Enum, renderbuffer glbase.Renderbuffer) { - C.gles2_glFramebufferRenderbuffer(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(renderbuffertarget), C.GLuint(renderbuffer)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFramebufferTexture2D.xml -func (gl *GL) FramebufferTexture2D(target, attachment, textarget glbase.Enum, texture glbase.Texture, level int) { - C.gles2_glFramebufferTexture2D(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(textarget), C.GLuint(texture), C.GLint(level)) -} - -// GenBuffers returns n buffer object names. There is no guarantee that -// the names form a contiguous set of integers; however, it is guaranteed -// that none of the returned names was in use immediately before the call to -// GenBuffers. -// -// Buffer object names returned by a call to GenBuffers are not returned by -// subsequent calls, unless they are first deleted with DeleteBuffers. -// -// No buffer objects are associated with the returned buffer object names -// until they are first bound by calling BindBuffer. -// -// Error GL.INVALID_VALUE is generated if n is negative. GL.INVALID_OPERATION -// is generated if GenBuffers is executed between the execution of Begin -// and the corresponding execution of End. -// -// GenBuffers is available in GL version 1.5 or greater. -func (gl *GL) GenBuffers(n int) []glbase.Buffer { - if n == 0 { - return nil - } - buffers := make([]glbase.Buffer, n) - C.gles2_glGenBuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&buffers[0]))) - return buffers -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGenerateMipmap.xml -func (gl *GL) GenerateMipmap(target glbase.Enum) { - C.gles2_glGenerateMipmap(gl.funcs, C.GLenum(target)) -} - -// GenFramebuffers returns n framebuffer object names in ids. There is no -// guarantee that the names form a contiguous set of integers; however, it is -// guaranteed that none of the returned names was in use immediately before -// the call to GenFramebuffers. -// -// Framebuffer object names returned by a call to GenFramebuffers are not -// returned by subsequent calls, unless they are first deleted with -// DeleteFramebuffers. -// -// The names returned in ids are marked as used, for the purposes of -// GenFramebuffers only, but they acquire state and type only when they are -// first bound. -// -// Error GL.INVALID_VALUE is generated if n is negative. -func (gl *GL) GenFramebuffers(n int) []glbase.Framebuffer { - if n == 0 { - return nil - } - framebuffers := make([]glbase.Framebuffer, n) - C.gles2_glGenFramebuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&framebuffers[0]))) - return framebuffers -} - -// GenRenderbuffers returns n renderbuffer object names in renderbuffers. -// There is no guarantee that the names form a contiguous set of integers; -// however, it is guaranteed that none of the returned names was in use -// immediately before the call to GenRenderbuffers. -// -// Renderbuffer object names returned by a call to GenRenderbuffers are not -// returned by subsequent calls, unless they are first deleted with -// DeleteRenderbuffers. -// -// The names returned in renderbuffers are marked as used, for the purposes -// of GenRenderbuffers only, but they acquire state and type only when they -// are first bound. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// GenRenderbuffers is available in GL version 3.0 or greater. -func (gl *GL) GenRenderbuffers(n int) []glbase.Renderbuffer { - if n == 0 { - return nil - } - renderbuffers := make([]glbase.Renderbuffer, n) - C.gles2_glGenRenderbuffers(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&renderbuffers[0]))) - return renderbuffers -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetActiveAttrib.xml -func (gl *GL) GetActiveAttrib(program glbase.Program, index glbase.Attrib, bufSize int32, length []int32, size []int, gltype []glbase.Enum, name []byte) { - C.gles2_glGetActiveAttrib(gl.funcs, C.GLuint(program), C.GLuint(index), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLint)(unsafe.Pointer(&size[0])), (*C.GLenum)(unsafe.Pointer(&gltype[0])), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetActiveUniform.xml -func (gl *GL) GetActiveUniform(program glbase.Program, index uint32, bufSize int32, length []int32, size []int, gltype []glbase.Enum, name []byte) { - C.gles2_glGetActiveUniform(gl.funcs, C.GLuint(program), C.GLuint(index), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLint)(unsafe.Pointer(&size[0])), (*C.GLenum)(unsafe.Pointer(&gltype[0])), (*C.GLchar)(unsafe.Pointer(&name[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetAttachedShaders.xml -func (gl *GL) GetAttachedShaders(program glbase.Program, maxcount int32, count []int, shaders []glbase.Shader) { - C.gles2_glGetAttachedShaders(gl.funcs, C.GLuint(program), C.GLsizei(maxcount), (*C.GLsizei)(unsafe.Pointer(&count[0])), (*C.GLuint)(unsafe.Pointer(&shaders[0]))) -} - -// GetAttribLocation queries the previously linked program object specified -// by program for the attribute variable specified by name and returns the -// index of the generic vertex attribute that is bound to that attribute -// variable. If name is a matrix attribute variable, the index of the first -// column of the matrix is returned. If the named attribute variable is not -// an active attribute in the specified program object or if name starts with -// the reserved prefix "gl_", a value of -1 is returned. -// -// The association between an attribute variable name and a generic attribute -// index can be specified at any time by calling BindAttribLocation. -// Attribute bindings do not go into effect until LinkProgram is called. -// After a program object has been linked successfully, the index values for -// attribute variables remain fixed until the next link command occurs. The -// attribute values can only be queried after a link if the link was -// successful. GetAttribLocation returns the binding that actually went -// into effect the last time LinkProgram was called for the specified -// program object. Attribute bindings that have been specified since the last -// link operation are not returned by GetAttribLocation. -// -// Error GL_INVALID_OPERATION is generated if program is not a value -// generated by OpenGL. GL_INVALID_OPERATION is generated if program is not -// a program object. GL_INVALID_OPERATION is generated if program has not -// been successfully linked. GL_INVALID_OPERATION is generated if -// GetAttribLocation is executed between the execution of Begin and the -// corresponding execution of End. -// -// GetAttribLocation is available in GL version 2.0 or greater. -func (gl *GL) GetAttribLocation(program glbase.Program, name string) glbase.Attrib { - name_cstr := C.CString(name) - glresult := C.gles2_glGetAttribLocation(gl.funcs, C.GLuint(program), (*C.GLchar)(name_cstr)) - C.free(unsafe.Pointer(name_cstr)) - return glbase.Attrib(glresult) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetBufferParameteriv.xml -func (gl *GL) GetBufferParameteriv(target, pname glbase.Enum, params []int32) { - C.gles2_glGetBufferParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetFramebufferAttachmentParameteriv.xml -func (gl *GL) GetFramebufferAttachmentParameteriv(target, attachment, pname glbase.Enum, params []int32) { - C.gles2_glGetFramebufferAttachmentParameteriv(gl.funcs, C.GLenum(target), C.GLenum(attachment), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// GetProgramiv returns in params the value of a parameter for a specific -// program object. The following parameters are defined: -// -// GL.DELETE_STATUS -// params returns GL.TRUE if program is currently flagged for deletion, -// and GL.FALSE otherwise. -// -// GL.LINK_STATUS -// params returns GL.TRUE if the last link operation on program was -// successful, and GL.FALSE otherwise. -// -// GL.VALIDATE_STATUS -// params returns GL.TRUE or if the last validation operation on -// program was successful, and GL.FALSE otherwise. -// -// GL.INFO_LOG_LENGTH -// params returns the number of characters in the information log for -// program including the null termination character (the size of -// the character buffer required to store the information log). If -// program has no information log, a value of 0 is returned. -// -// GL.ATTACHED_SHADERS -// params returns the number of shader objects attached to program. -// -// GL.ACTIVE_ATTRIBUTES -// params returns the number of active attribute variables for program. -// -// GL.ACTIVE_ATTRIBUTE_MAX_LENGTH -// params returns the length of the longest active attribute name for -// program, including the null termination character (the size of -// the character buffer required to store the longest attribute name). -// If no active attributes exist, 0 is returned. -// -// GL.ACTIVE_UNIFORMS -// params returns the number of active uniform variables for program. -// -// GL.ACTIVE_UNIFORM_MAX_LENGTH -// params returns the length of the longest active uniform variable -// name for program, including the null termination character (i.e., -// the size of the character buffer required to store the longest -// uniform variable name). If no active uniform variables exist, 0 is -// returned. -// -// GL.TRANSFORM_FEEDBACK_BUFFER_MODE -// params returns a symbolic constant indicating the buffer mode used -// when transform feedback is active. This may be GL.SEPARATE_ATTRIBS -// or GL.INTERLEAVED_ATTRIBS. -// -// GL.TRANSFORM_FEEDBACK_VARYINGS -// params returns the number of varying variables to capture in transform -// feedback mode for the program. -// -// GL.TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH -// params returns the length of the longest variable name to be used for -// transform feedback, including the null-terminator. -// -// GL.GEOMETRY_VERTICES_OUT -// params returns the maximum number of vertices that the geometry shader in -// program will output. -// -// GL.GEOMETRY_INPUT_TYPE -// params returns a symbolic constant indicating the primitive type accepted -// as input to the geometry shader contained in program. -// -// GL.GEOMETRY_OUTPUT_TYPE -// params returns a symbolic constant indicating the primitive type that will -// be output by the geometry shader contained in program. -// -// GL.ACTIVE_UNIFORM_BLOCKS and GL.ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH are -// available only if the GL version 3.1 or greater. -// -// GL.GEOMETRY_VERTICES_OUT, GL.GEOMETRY_INPUT_TYPE and -// GL.GEOMETRY_OUTPUT_TYPE are accepted only if the GL version is 3.2 or -// greater. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program does not refer to a -// program object. GL.INVALID_OPERATION is generated if pname is -// GL.GEOMETRY_VERTICES_OUT, GL.GEOMETRY_INPUT_TYPE, or -// GL.GEOMETRY_OUTPUT_TYPE, and program does not contain a geometry shader. -// GL.INVALID_ENUM is generated if pname is not an accepted value. -func (gl *GL) GetProgramiv(program glbase.Program, pname glbase.Enum, params []int32) { - var params_c [4]int32 - C.gles2_glGetProgramiv(gl.funcs, C.GLuint(program), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetProgramInfoLog returns the information log for the specified program -// object. The information log for a program object is modified when the -// program object is linked or validated. -// -// The information log for a program object is either an empty string, or a -// string containing information about the last link operation, or a string -// containing information about the last validation operation. It may contain -// diagnostic messages, warning messages, and other information. When a -// program object is created, its information log will be a string of length -// 0, and the size of the current log can be obtained by calling GetProgramiv -// with the value GL.INFO_LOG_LENGTH. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated -// by OpenGL. GL.INVALID_OPERATION is generated if program is not a -// program object. -func (gl *GL) GetProgramInfoLog(program glbase.Program) []byte { - var params [1]int32 - var length int32 - gl.GetProgramiv(program, INFO_LOG_LENGTH, params[:]) - bufSize := params[0] - infoLog := make([]byte, int(bufSize)) - C.gles2_glGetProgramInfoLog(gl.funcs, C.GLuint(program), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length)), (*C.GLchar)(unsafe.Pointer(&infoLog[0]))) - return infoLog -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetRenderbufferParameteriv.xml -func (gl *GL) GetRenderbufferParameteriv(target, pname glbase.Enum, params []int32) { - C.gles2_glGetRenderbufferParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// GetShaderiv GetShader returns in params the value of a parameter for a specific -// shader object. The following parameters are defined: -// -// GL.SHADER_TYPE -// params returns GL.VERTEX_SHADER if shader is a vertex shader object, -// and GL.FRAGMENT_SHADER if shader is a fragment shader object. -// -// GL.DELETE_STATUS -// params returns GL.TRUE if shader is currently flagged for deletion, -// and GL.FALSE otherwise. -// -// GL.COMPILE_STATUS -// params returns GL.TRUE if the last compile operation on shader was -// successful, and GL.FALSE otherwise. -// -// GL.INFO_LOG_LENGTH -// params returns the number of characters in the information log for -// shader including the null termination character (the size of the -// character buffer required to store the information log). If shader has -// no information log, a value of 0 is returned. -// -// GL.SHADER_SOURCE_LENGTH -// params returns the length of the concatenation of the source strings -// that make up the shader source for the shader, including the null -// termination character. (the size of the character buffer -// required to store the shader source). If no source code exists, 0 is -// returned. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader does not refer to a -// shader object. GL.INVALID_ENUM is generated if pname is not an accepted -// value. GL.INVALID_OPERATION is generated if GetShader is executed -// between the execution of Begin and the corresponding execution of End. -// -// GetShaderiv is available in GL version 2.0 or greater. -func (gl *GL) GetShaderiv(shader glbase.Shader, pname glbase.Enum, params []int32) { - var params_c [4]int32 - C.gles2_glGetShaderiv(gl.funcs, C.GLuint(shader), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetShaderInfoLog returns the information log for the specified shader -// object. The information log for a shader object is modified when the -// shader is compiled. -// -// The information log for a shader object is a string that may contain -// diagnostic messages, warning messages, and other information about the -// last compile operation. When a shader object is created, its information -// log will be a string of length 0, and the size of the current log can be -// obtained by calling GetShaderiv with the value GL.INFO_LOG_LENGTH. -// -// The information log for a shader object is the OpenGL implementer's -// primary mechanism for conveying information about the compilation process. -// Therefore, the information log can be helpful to application developers -// during the development process, even when compilation is successful. -// Application developers should not expect different OpenGL implementations -// to produce identical information logs. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader is not a shader -// object. GL.INVALID_VALUE is generated if maxLength is less than 0. -// GL.INVALID_OPERATION is generated if GetShaderInfoLog is executed -// between the execution of Begin and the corresponding execution of End. -// -// GetShaderInfoLog is available in GL version 2.0 or greater. -func (gl *GL) GetShaderInfoLog(shader glbase.Shader) []byte { - var params [1]int32 - var length int32 - gl.GetShaderiv(shader, INFO_LOG_LENGTH, params[:]) - bufSize := params[0] - infoLog := make([]byte, int(bufSize)) - C.gles2_glGetShaderInfoLog(gl.funcs, C.GLuint(shader), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length)), (*C.GLchar)(unsafe.Pointer(&infoLog[0]))) - return infoLog -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetShaderPrecisionFormat.xml -func (gl *GL) GetShaderPrecisionFormat(shadertype, precisionType glbase.Enum, range_, precision []int32) { - C.gles2_glGetShaderPrecisionFormat(gl.funcs, C.GLenum(shadertype), C.GLenum(precisionType), (*C.GLint)(unsafe.Pointer(&range_[0])), (*C.GLint)(unsafe.Pointer(&precision[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetShaderSource.xml -func (gl *GL) GetShaderSource(shader glbase.Shader, bufSize int32, length []int32, source []byte) { - C.gles2_glGetShaderSource(gl.funcs, C.GLuint(shader), C.GLsizei(bufSize), (*C.GLsizei)(unsafe.Pointer(&length[0])), (*C.GLchar)(unsafe.Pointer(&source[0]))) -} - -// GetUniformfv returns in params the value of the specified uniform -// variable. The type of the uniform variable specified by location -// determines the number of values returned. If the uniform variable is -// defined in the shader as a boolean, int, or float, a single value will be -// returned. If it is defined as a vec2, ivec2, or bvec2, two values will be -// returned. If it is defined as a vec3, ivec3, or bvec3, three values will -// be returned, and so on. To query values stored in uniform variables -// declared as arrays, call GetUniformfv for each element of the array. To -// query values stored in uniform variables declared as structures, call -// GetUniformfv for each field in the structure. The values for uniform -// variables declared as a matrix will be returned in column major order. -// -// The locations assigned to uniform variables are not known until the -// program object is linked. After linking has occurred, the command -// GetUniformLocation can be used to obtain the location of a uniform -// variable. This location value can then be passed to GetUniformfv in order -// to query the current value of the uniform variable. After a program object -// has been linked successfully, the index values for uniform variables -// remain fixed until the next link command occurs. The uniform variable -// values can only be queried after a link if the link was successful. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program -// object. GL.INVALID_OPERATION is generated if program has not been -// successfully linked. GL.INVALID_OPERATION is generated if location does -// not correspond to a valid uniform variable location for the specified -// program object. GL.INVALID_OPERATION is generated if GetUniformfv is -// executed between the execution of Begin and the corresponding execution of -// End. -// -// GetUniformfv is available in GL version 2.0 or greater. -func (gl *GL) GetUniformfv(program glbase.Program, location glbase.Uniform, params []float32) { - var params_c [4]float32 - C.gles2_glGetUniformfv(gl.funcs, C.GLuint(program), C.GLint(location), (*C.GLfloat)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetUniformiv returns in params the value of the specified uniform -// variable. The type of the uniform variable specified by location -// determines the number of values returned. If the uniform variable is -// defined in the shader as a boolean, int, or float, a single value will be -// returned. If it is defined as a vec2, ivec2, or bvec2, two values will be -// returned. If it is defined as a vec3, ivec3, or bvec3, three values will -// be returned, and so on. To query values stored in uniform variables -// declared as arrays, call GetUniformiv for each element of the array. To -// query values stored in uniform variables declared as structures, call -// GetUniformiv for each field in the structure. The values for uniform -// variables declared as a matrix will be returned in column major order. -// -// The locations assigned to uniform variables are not known until the -// program object is linked. After linking has occurred, the command -// GetUniformLocation can be used to obtain the location of a uniform -// variable. This location value can then be passed to GetUniformiv in order -// to query the current value of the uniform variable. After a program object -// has been linked successfully, the index values for uniform variables -// remain fixed until the next link command occurs. The uniform variable -// values can only be queried after a link if the link was successful. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program -// object. GL.INVALID_OPERATION is generated if program has not been -// successfully linked. GL.INVALID_OPERATION is generated if location does -// not correspond to a valid uniform variable location for the specified -// program object. GL.INVALID_OPERATION is generated if GetUniformiv is -// executed between the execution of Begin and the corresponding execution of -// End. -// -// GetUniformiv is available in GL version 2.0 or greater. -func (gl *GL) GetUniformiv(program glbase.Program, location glbase.Uniform, params []int32) { - var params_c [4]int32 - C.gles2_glGetUniformiv(gl.funcs, C.GLuint(program), C.GLint(location), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetUniformLocation returns an integer that represents the location of a -// specific uniform variable within a program object. name must be an active -// uniform variable name in program that is not a structure, an array of -// structures, or a subcomponent of a vector or a matrix. This function -// returns -1 if name does not correspond to an active uniform variable in -// program or if name starts with the reserved prefix "gl_". -// -// Uniform variables that are structures or arrays of structures may be -// queried by calling GetUniformLocation for each field within the -// structure. The array element operator "[]" and the structure field -// operator "." may be used in name in order to select elements within an -// array or fields within a structure. The result of using these operators is -// not allowed to be another structure, an array of structures, or a -// subcomponent of a vector or a matrix. Except if the last part of name -// indicates a uniform variable array, the location of the first element of -// an array can be retrieved by using the name of the array, or by using the -// name appended by "[0]". -// -// The actual locations assigned to uniform variables are not known until the -// program object is linked successfully. After linking has occurred, the -// command GetUniformLocation can be used to obtain the location of a -// uniform variable. This location value can then be passed to Uniform to -// set the value of the uniform variable or to GetUniform in order to query -// the current value of the uniform variable. After a program object has been -// linked successfully, the index values for uniform variables remain fixed -// until the next link command occurs. Uniform variable locations and values -// can only be queried after a link if the link was successful. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program object. -// GL.INVALID_OPERATION is generated if program has not been successfully -// linked. GL.INVALID_OPERATION is generated if GetUniformLocation is executed -// between the execution of Begin and the corresponding execution of End. -// -// GetUniformLocation is available in GL version 2.0 or greater. -func (gl *GL) GetUniformLocation(program glbase.Program, name string) glbase.Uniform { - name_cstr := C.CString(name) - glresult := C.gles2_glGetUniformLocation(gl.funcs, C.GLuint(program), (*C.GLchar)(name_cstr)) - C.free(unsafe.Pointer(name_cstr)) - return glbase.Uniform(glresult) -} - -// GetVertexAttribfv returns in params the value of a generic vertex attribute -// parameter. The generic vertex attribute to be queried is specified by -// index, and the parameter to be queried is specified by pname. -// -// The accepted parameter names are as follows: -// -// GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING -// params returns a single value, the name of the buffer object -// currently bound to the binding point corresponding to generic vertex -// attribute array index. If no buffer object is bound, 0 is returned. -// The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_ENABLED -// params returns a single value that is non-zero (true) if the vertex -// attribute array for index is enabled and 0 (false) if it is -// disabled. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_SIZE -// params returns a single value, the size of the vertex attribute -// array for index. The size is the number of values for each element -// of the vertex attribute array, and it will be 1, 2, 3, or 4. The -// initial value is 4. -// -// GL.VERTEX_ATTRIB_ARRAY_STRIDE -// params returns a single value, the array stride for (number of bytes -// between successive elements in) the vertex attribute array for -// index. A value of 0 indicates that the array elements are stored -// sequentially in memory. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_TYPE -// params returns a single value, a symbolic constant indicating the -// array type for the vertex attribute array for index. Possible values -// are GL.BYTE, GL.UNSIGNED_BYTE, GL.SHORT, GL.UNSIGNED_SHORT, GL.INT, -// GL.UNSIGNED_INT, GL.FLOAT, and GL.DOUBLE. The initial value is -// GL.FLOAT. -// -// GL.VERTEX_ATTRIB_ARRAY_NORMALIZED -// params returns a single value that is non-zero (true) if fixed-point -// data types for the vertex attribute array indicated by index are -// normalized when they are converted to floating point, and 0 (false) -// otherwise. The initial value is 0. -// -// GL.CURRENT_VERTEX_ATTRIB -// params returns four values that represent the current value for the -// generic vertex attribute specified by index. Generic vertex -// attribute 0 is unique in that it has no current state, so an error -// will be generated if index is 0. The initial value for all other -// generic vertex attributes is (0,0,0,1). -// -// All of the parameters except GL.CURRENT_VERTEX_ATTRIB represent -// client-side state. -// -// Error GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. GL.INVALID_ENUM is generated if pname is not an -// accepted value. GL.INVALID_OPERATION is generated if index is 0 and pname -// is GL.CURRENT_VERTEX_ATTRIB. -// -// GetVertexAttribfv is available in GL version 2.0 or greater. -func (gl *GL) GetVertexAttribfv(index glbase.Attrib, pname glbase.Enum, params []float32) { - var params_c [4]float32 - C.gles2_glGetVertexAttribfv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// GetVertexAttribiv returns in params the value of a generic vertex attribute -// parameter. The generic vertex attribute to be queried is specified by -// index, and the parameter to be queried is specified by pname. -// -// The accepted parameter names are as follows: -// -// GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING -// params returns a single value, the name of the buffer object -// currently bound to the binding point corresponding to generic vertex -// attribute array index. If no buffer object is bound, 0 is returned. -// The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_ENABLED -// params returns a single value that is non-zero (true) if the vertex -// attribute array for index is enabled and 0 (false) if it is -// disabled. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_SIZE -// params returns a single value, the size of the vertex attribute -// array for index. The size is the number of values for each element -// of the vertex attribute array, and it will be 1, 2, 3, or 4. The -// initial value is 4. -// -// GL.VERTEX_ATTRIB_ARRAY_STRIDE -// params returns a single value, the array stride for (number of bytes -// between successive elements in) the vertex attribute array for -// index. A value of 0 indicates that the array elements are stored -// sequentially in memory. The initial value is 0. -// -// GL.VERTEX_ATTRIB_ARRAY_TYPE -// params returns a single value, a symbolic constant indicating the -// array type for the vertex attribute array for index. Possible values -// are GL.BYTE, GL.UNSIGNED_BYTE, GL.SHORT, GL.UNSIGNED_SHORT, GL.INT, -// GL.UNSIGNED_INT, GL.FLOAT, and GL.DOUBLE. The initial value is -// GL.FLOAT. -// -// GL.VERTEX_ATTRIB_ARRAY_NORMALIZED -// params returns a single value that is non-zero (true) if fixed-point -// data types for the vertex attribute array indicated by index are -// normalized when they are converted to floating point, and 0 (false) -// otherwise. The initial value is 0. -// -// GL.CURRENT_VERTEX_ATTRIB -// params returns four values that represent the current value for the -// generic vertex attribute specified by index. Generic vertex -// attribute 0 is unique in that it has no current state, so an error -// will be generated if index is 0. The initial value for all other -// generic vertex attributes is (0,0,0,1). -// -// All of the parameters except GL.CURRENT_VERTEX_ATTRIB represent -// client-side state. -// -// Error GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. GL.INVALID_ENUM is generated if pname is not an -// accepted value. GL.INVALID_OPERATION is generated if index is 0 and pname -// is GL.CURRENT_VERTEX_ATTRIB. -// -// GetVertexAttribiv is available in GL version 2.0 or greater. -func (gl *GL) GetVertexAttribiv(index glbase.Attrib, pname glbase.Enum, params []int32) { - var params_c [4]int32 - C.gles2_glGetVertexAttribiv(gl.funcs, C.GLuint(index), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms_c[0]))) - copy(params, params_c[:]) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIsBuffer.xml -func (gl *GL) IsBuffer(buffer glbase.Buffer) bool { - glresult := C.gles2_glIsBuffer(gl.funcs, C.GLuint(buffer)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIsFramebuffer.xml -func (gl *GL) IsFramebuffer(framebuffer glbase.Framebuffer) bool { - glresult := C.gles2_glIsFramebuffer(gl.funcs, C.GLuint(framebuffer)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIsProgram.xml -func (gl *GL) IsProgram(program glbase.Program) bool { - glresult := C.gles2_glIsProgram(gl.funcs, C.GLuint(program)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIsRenderbuffer.xml -func (gl *GL) IsRenderbuffer(renderbuffer glbase.Renderbuffer) bool { - glresult := C.gles2_glIsRenderbuffer(gl.funcs, C.GLuint(renderbuffer)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIsShader.xml -func (gl *GL) IsShader(shader glbase.Shader) bool { - glresult := C.gles2_glIsShader(gl.funcs, C.GLuint(shader)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// LinkProgram links the program object specified by program. If any shader -// objects of type GL.VERTEX_SHADER are attached to program, they will be -// used to create an executable that will run on the programmable vertex -// processor. If any shader objects of type GL.FRAGMENT_SHADER are attached -// to program, they will be used to create an executable that will run on the -// programmable fragment processor. -// -// The status of the link operation will be stored as part of the program -// object's state. This value will be set to GL.TRUE if the program object -// was linked without errors and is ready for use, and GL.FALSE otherwise. It -// can be queried by calling GetProgramiv with arguments program and -// GL.LINK_STATUS. -// -// As a result of a successful link operation, all active user-defined -// uniform variables belonging to program will be initialized to 0, and each -// of the program object's active uniform variables will be assigned a -// location that can be queried by calling GetUniformLocation. Also, any -// active user-defined attribute variables that have not been bound to a -// generic vertex attribute index will be bound to one at this time. -// -// Linking of a program object can fail for a number of reasons as specified -// in the OpenGL Shading Language Specification. The following lists some of -// the conditions that will cause a link error. -// -// - The number of active attribute variables supported by the -// implementation has been exceeded. -// -// - The storage limit for uniform variables has been exceeded. -// -// - The number of active uniform variables supported by the implementation -// has been exceeded. -// -// - The main function is missing for the vertex shader or the fragment -// shader. -// -// - A varying variable actually used in the fragment shader is not -// declared in the same way (or is not declared at all) in the vertex -// shader. -// -// - A reference to a function or variable name is unresolved. -// -// - A shared global is declared with two different types or two different -// initial values. -// -// - One or more of the attached shader objects has not been successfully -// compiled. -// -// - Binding a generic attribute matrix caused some rows of the matrix to -// fall outside the allowed maximum of GL.MAX_VERTEX_ATTRIBS. -// -// - Not enough contiguous vertex attribute slots could be found to bind -// attribute matrices. -// -// When a program object has been successfully linked, the program object can -// be made part of current state by calling UseProgram. Whether or not the -// link operation was successful, the program object's information log will -// be overwritten. The information log can be retrieved by calling -// GetProgramInfoLog. -// -// LinkProgram will also install the generated executables as part of the -// current rendering state if the link operation was successful and the -// specified program object is already currently in use as a result of a -// previous call to UseProgram. If the program object currently in use is -// relinked unsuccessfully, its link status will be set to GL.FALSE , but the -// executables and associated state will remain part of the current state -// until a subsequent call to UseProgram removes it from use. After it is -// removed from use, it cannot be made part of current state until it has -// been successfully relinked. -// -// If program contains shader objects of type GL.VERTEX_SHADER but does not -// contain shader objects of type GL.FRAGMENT_SHADER, the vertex shader will -// be linked against the implicit interface for fixed functionality fragment -// processing. Similarly, if program contains shader objects of type -// GL.FRAGMENT_SHADER but it does not contain shader objects of type -// GL.VERTEX_SHADER, the fragment shader will be linked against the implicit -// interface for fixed functionality vertex processing. -// -// The program object's information log is updated and the program is -// generated at the time of the link operation. After the link operation, -// applications are free to modify attached shader objects, compile attached -// shader objects, detach shader objects, delete shader objects, and attach -// additional shader objects. None of these operations affects the -// information log or the program that is part of the program object. -// -// If the link operation is unsuccessful, any information about a previous -// link operation on program is lost (a failed link does not restore the -// old state of program). Certain information can still be retrieved -// from program even after an unsuccessful link operation. See for instance -// GetActiveAttrib and GetActiveUniform. -// -// Error GL.INVALID_VALUE is generated if program is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if program is not a program -// object. GL.INVALID_OPERATION is generated if LinkProgram is executed -// between the execution of Begin and the corresponding execution of End. -// -// LinkProgram is available in GL version 2.0 or greater. -func (gl *GL) LinkProgram(program glbase.Program) { - C.gles2_glLinkProgram(gl.funcs, C.GLuint(program)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glReleaseShaderCompiler.xml -func (gl *GL) ReleaseShaderCompiler() { - C.gles2_glReleaseShaderCompiler(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glRenderbufferStorage.xml -func (gl *GL) RenderbufferStorage(target, internalFormat glbase.Enum, width, height int) { - C.gles2_glRenderbufferStorage(gl.funcs, C.GLenum(target), C.GLenum(internalFormat), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glSampleCoverage.xml -func (gl *GL) SampleCoverage(value glbase.Clampf, invert bool) { - C.gles2_glSampleCoverage(gl.funcs, C.GLclampf(value), *(*C.GLboolean)(unsafe.Pointer(&invert))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glShaderBinary.xml -func (gl *GL) ShaderBinary(n int, shaders []glbase.Shader, binaryFormat glbase.Enum, binary interface{}, length int32) { - var binary_ptr unsafe.Pointer - var binary_v = reflect.ValueOf(binary) - if binary != nil && binary_v.Kind() != reflect.Slice { - panic("parameter binary must be a slice") - } - if binary != nil { - binary_ptr = unsafe.Pointer(binary_v.Index(0).Addr().Pointer()) - } - C.gles2_glShaderBinary(gl.funcs, C.GLint(n), (*C.GLuint)(unsafe.Pointer(&shaders[0])), C.GLenum(binaryFormat), binary_ptr, C.GLint(length)) -} - -// ShaderSource sets the source code in shader to the provided source code. Any source -// code previously stored in the shader object is completely replaced. -// -// Error GL.INVALID_VALUE is generated if shader is not a value generated by -// OpenGL. GL.INVALID_OPERATION is generated if shader is not a shader -// object. GL.INVALID_VALUE is generated if count is less than 0. -// GL.INVALID_OPERATION is generated if ShaderSource is executed between the -// execution of Begin and the corresponding execution of End. -// -// ShaderSource is available in GL version 2.0 or greater. -func (gl *GL) ShaderSource(shader glbase.Shader, source ...string) { - count := len(source) - length := make([]int32, count) - source_c := make([]unsafe.Pointer, count) - for i, src := range source { - length[i] = int32(len(src)) - if len(src) > 0 { - source_c[i] = *(*unsafe.Pointer)(unsafe.Pointer(&src)) - } else { - source_c[i] = unsafe.Pointer(uintptr(0)) - } - } - C.gles2_glShaderSource(gl.funcs, C.GLuint(shader), C.GLsizei(count), (**C.GLchar)(unsafe.Pointer(&source_c[0])), (*C.GLint)(unsafe.Pointer(&length[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glStencilFuncSeparate.xml -func (gl *GL) StencilFuncSeparate(face, glfunc glbase.Enum, ref int32, mask uint32) { - C.gles2_glStencilFuncSeparate(gl.funcs, C.GLenum(face), C.GLenum(glfunc), C.GLint(ref), C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glStencilMaskSeparate.xml -func (gl *GL) StencilMaskSeparate(face glbase.Enum, mask uint32) { - C.gles2_glStencilMaskSeparate(gl.funcs, C.GLenum(face), C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glStencilOpSeparate.xml -func (gl *GL) StencilOpSeparate(face, fail, zfail, zpass glbase.Enum) { - C.gles2_glStencilOpSeparate(gl.funcs, C.GLenum(face), C.GLenum(fail), C.GLenum(zfail), C.GLenum(zpass)) -} - -// Uniform1f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform1f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1f(location glbase.Uniform, v0 float32) { - C.gles2_glUniform1f(gl.funcs, C.GLint(location), C.GLfloat(v0)) -} - -// Uniform1fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform1fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - count := len(value) - C.gles2_glUniform1fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform1i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform1i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1i(location glbase.Uniform, v0 int32) { - C.gles2_glUniform1i(gl.funcs, C.GLint(location), C.GLint(v0)) -} - -// Uniform1iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform1iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform1iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - count := len(value) - C.gles2_glUniform1iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// Uniform2f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform2f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2f(location glbase.Uniform, v0, v1 float32) { - C.gles2_glUniform2f(gl.funcs, C.GLint(location), C.GLfloat(v0), C.GLfloat(v1)) -} - -// Uniform2fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform2fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - if len(value)%2 != 0 { - panic("invalid value length for Uniform2fv") - } - count := len(value) / 2 - C.gles2_glUniform2fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform2i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform2i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2i(location glbase.Uniform, v0, v1 int32) { - C.gles2_glUniform2i(gl.funcs, C.GLint(location), C.GLint(v0), C.GLint(v1)) -} - -// Uniform2iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform2iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform2iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - if len(value)%2 != 0 { - panic("invalid value length for Uniform2iv") - } - count := len(value) / 2 - C.gles2_glUniform2iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// Uniform3f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform3f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3f(location glbase.Uniform, v0, v1, v2 float32) { - C.gles2_glUniform3f(gl.funcs, C.GLint(location), C.GLfloat(v0), C.GLfloat(v1), C.GLfloat(v2)) -} - -// Uniform3fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform3fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - if len(value)%3 != 0 { - panic("invalid value length for Uniform3fv") - } - count := len(value) / 3 - C.gles2_glUniform3fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform3i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform3i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3i(location glbase.Uniform, v0, v1, v2 int32) { - C.gles2_glUniform3i(gl.funcs, C.GLint(location), C.GLint(v0), C.GLint(v1), C.GLint(v2)) -} - -// Uniform3iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform3iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform3iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - if len(value)%3 != 0 { - panic("invalid value length for Uniform3iv") - } - count := len(value) / 3 - C.gles2_glUniform3iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// Uniform4f modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform4f operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4f(location glbase.Uniform, v0, v1, v2, v3 float32) { - C.gles2_glUniform4f(gl.funcs, C.GLint(location), C.GLfloat(v0), C.GLfloat(v1), C.GLfloat(v2), C.GLfloat(v3)) -} - -// Uniform4fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform4fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4fv(location glbase.Uniform, value []float32) { - if len(value) == 0 { - return - } - if len(value)%4 != 0 { - panic("invalid value length for Uniform4fv") - } - count := len(value) / 4 - C.gles2_glUniform4fv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// Uniform4i modifies the value of a single uniform variable. -// The location of the uniform variable to be modified is specified by -// location, which should be a value returned by GetUniformLocation. -// Uniform4i operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the -// uniform variable specified by location using the values passed as -// arguments. The number specified in the function should match the number of -// components in the data type of the specified uniform variable (1 for -// float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). -// The suffix f indicates that floating-point values are being passed; the -// suffix i indicates that integer values are being passed; the suffix ui -// indicates that unsigned integer values are being passed, and this type -// should also match the data type of the specified uniform variable. The i -// variants of this function should be used to provide values for uniform -// variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui -// variants of this function should be used to provide values for uniform -// variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of -// these. The f variants should be used to provide values for uniform -// variables of type float, vec2, vec3, vec4, or arrays of these. Either the -// i, ui or f variants may be used to provide values for uniform variables of -// type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable -// will be set to false if the input value is 0 or 0.0f, and it will be set -// to true otherwise. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4i(location glbase.Uniform, v0, v1, v2, v3 int32) { - C.gles2_glUniform4i(gl.funcs, C.GLint(location), C.GLint(v0), C.GLint(v1), C.GLint(v2), C.GLint(v3)) -} - -// Uniform4iv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// Uniform4iv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single -// uniform variable or a uniform variable array. These functions receive a -// slice with the values to be loaded into a uniform variable or a uniform -// variable array. A slice with length 1 should be used if modifying the value -// of a single uniform variable, and a length of 1 or greater can be used to -// modify an entire array or part of an array. When loading n elements -// starting at an arbitrary position m in a uniform variable array, elements -// m + n - 1 in the array will be replaced with the new values. If m + n - 1 -// is larger than the size of the uniform variable array, values for all -// array elements beyond the end of the array will be ignored. The number -// specified in the name of the command indicates the number of components -// for each element in value, and it should match the number of components in -// the data type of the specified uniform variable (1 for float, int, bool; -// 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name -// of the command must match the data type for the specified uniform variable -// as described for Uniform{1|2|3|4}{f|i|ui}. -// -// Uniform1i and Uniform1iv are the only two functions that may be used to -// load uniform variables defined as sampler types. Loading samplers with any -// other function will result in a GL.INVALID_OPERATION error. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) Uniform4iv(location glbase.Uniform, value []int32) { - if len(value) == 0 { - return - } - if len(value)%4 != 0 { - panic("invalid value length for Uniform4iv") - } - count := len(value) / 4 - C.gles2_glUniform4iv(gl.funcs, C.GLint(location), C.GLsizei(count), (*C.GLint)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix2fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix2fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix2fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(2*2) != 0 { - panic("invalid value length for UniformMatrix2fv") - } - count := len(value) / (2 * 2) - C.gles2_glUniformMatrix2fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix3fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix3fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix3fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(3*3) != 0 { - panic("invalid value length for UniformMatrix3fv") - } - count := len(value) / (3 * 3) - C.gles2_glUniformMatrix3fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UniformMatrix4fv modifies the value of a uniform variable or a uniform -// variable array. The location of the uniform variable to be modified is -// specified by location, which should be a value returned by GetUniformLocation. -// UniformMatrix4fv operates on the program object that was made part of -// current state by calling UseProgram. -// -// The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to -// modify a matrix or an array of matrices. The numbers in the function name -// are interpreted as the dimensionality of the matrix. The number 2 -// indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 -// values), and the number 4 indicates a 4x4 matrix (16 values). Non-square -// matrix dimensionality is explicit, with the first number representing the -// number of columns and the second number representing the number of rows. -// For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 -// values). The length of the provided slice must be a multiple of the number -// of values per matrix, to update one or more consecutive matrices. -// -// If transpose is false, each matrix is assumed to be supplied in column -// major order. If transpose is true, each matrix is assumed to be supplied -// in row major order. -// -// All active uniform variables defined in a program object are initialized -// to 0 when the program object is linked successfully. They retain the -// values assigned to them by a call to Uniform* until the next successful -// link operation occurs on the program object, when they are once again -// initialized to 0. -func (gl *GL) UniformMatrix4fv(location glbase.Uniform, transpose bool, value []float32) { - if len(value) == 0 { - return - } - if len(value)%(4*4) != 0 { - panic("invalid value length for UniformMatrix4fv") - } - count := len(value) / (4 * 4) - C.gles2_glUniformMatrix4fv(gl.funcs, C.GLint(location), C.GLsizei(count), *(*C.GLboolean)(unsafe.Pointer(&transpose)), (*C.GLfloat)(unsafe.Pointer(&value[0]))) -} - -// UseProgram installs the program object specified by program as part of -// current rendering state. One or more executables are created in a program -// object by successfully attaching shader objects to it with AttachShader, -// successfully compiling the shader objects with CompileShader, and -// successfully linking the program object with LinkProgram. -// -// A program object will contain an executable that will run on the vertex -// processor if it contains one or more shader objects of type -// GL.VERTEX_SHADER that have been successfully compiled and linked. -// Similarly, a program object will contain an executable that will run on -// the fragment processor if it contains one or more shader objects of type -// GL.FRAGMENT_SHADER that have been successfully compiled and linked. -// -// Successfully installing an executable on a programmable processor will -// cause the corresponding fixed functionality of OpenGL to be disabled. -// Specifically, if an executable is installed on the vertex processor, the -// OpenGL fixed functionality will be disabled as follows. -// -// - The modelview matrix is not applied to vertex coordinates. -// -// - The projection matrix is not applied to vertex coordinates. -// -// - The texture matrices are not applied to texture coordinates. -// -// - Normals are not transformed to eye coordinates. -// -// - Normals are not rescaled or normalized. -// -// - Normalization of GL.AUTO_NORMAL evaluated normals is not performed. -// -// - Texture coordinates are not generated automatically. -// -// - Per-vertex lighting is not performed. -// -// - Color material computations are not performed. -// -// - Color index lighting is not performed. -// -// - This list also applies when setting the current raster position. -// -// The executable that is installed on the vertex processor is expected to -// implement any or all of the desired functionality from the preceding list. -// Similarly, if an executable is installed on the fragment processor, the -// OpenGL fixed functionality will be disabled as follows. -// -// - Texture environment and texture functions are not applied. -// -// - Texture application is not applied. -// -// - Color sum is not applied. -// -// - Fog is not applied. -// -// Again, the fragment shader that is installed is expected to implement any -// or all of the desired functionality from the preceding list. -// -// While a program object is in use, applications are free to modify attached -// shader objects, compile attached shader objects, attach additional shader -// objects, and detach or delete shader objects. None of these operations -// will affect the executables that are part of the current state. However, -// relinking the program object that is currently in use will install the -// program object as part of the current rendering state if the link -// operation was successful (see LinkProgram). If the program object -// currently in use is relinked unsuccessfully, its link status will be set -// to GL.FALSE, but the executables and associated state will remain part of -// the current state until a subsequent call to UseProgram removes it from -// use. After it is removed from use, it cannot be made part of current state -// until it has been successfully relinked. -// -// If program contains shader objects of type GL.VERTEX_SHADER but it does -// not contain shader objects of type GL.FRAGMENT_SHADER, an executable will -// be installed on the vertex processor, but fixed functionality will be used -// for fragment processing. Similarly, if program contains shader objects of -// type GL.FRAGMENT_SHADER but it does not contain shader objects of type -// GL.VERTEX_SHADER, an executable will be installed on the fragment -// processor, but fixed functionality will be used for vertex processing. If -// program is 0, the programmable processors will be disabled, and fixed -// functionality will be used for both vertex and fragment processing. -// -// While a program object is in use, the state that controls the disabled -// fixed functionality may also be updated using the normal OpenGL calls. -// -// Like display lists and texture objects, the name space for program objects -// may be shared across a set of contexts, as long as the server sides of the -// contexts share the same address space. If the name space is shared across -// contexts, any attached objects and the data associated with those attached -// objects are shared as well. -// -// Applications are responsible for providing the synchronization across API -// calls when objects are accessed from different execution threads. -// -// Error GL.INVALID_VALUE is generated if program is neither 0 nor a value -// generated by OpenGL. GL.INVALID_OPERATION is generated if program is not -// a program object. GL.INVALID_OPERATION is generated if program could not -// be made part of current state. GL.INVALID_OPERATION is generated if -// UseProgram is executed between the execution of Begin and the -// corresponding execution of End. -// -// UseProgram is available in GL version 2.0 or greater. -func (gl *GL) UseProgram(program glbase.Program) { - C.gles2_glUseProgram(gl.funcs, C.GLuint(program)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glValidateProgram.xml -func (gl *GL) ValidateProgram(program glbase.Program) { - C.gles2_glValidateProgram(gl.funcs, C.GLuint(program)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib1f.xml -func (gl *GL) VertexAttrib1f(index glbase.Attrib, x float32) { - C.gles2_glVertexAttrib1f(gl.funcs, C.GLuint(index), C.GLfloat(x)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib1fv.xml -func (gl *GL) VertexAttrib1fv(index glbase.Attrib, values []float32) { - C.gles2_glVertexAttrib1fv(gl.funcs, C.GLuint(index), (*C.GLfloat)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib2f.xml -func (gl *GL) VertexAttrib2f(index glbase.Attrib, x, y float32) { - C.gles2_glVertexAttrib2f(gl.funcs, C.GLuint(index), C.GLfloat(x), C.GLfloat(y)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib2fv.xml -func (gl *GL) VertexAttrib2fv(index glbase.Attrib, values []float32) { - if len(values) != 2 { - panic("parameter values has incorrect length") - } - C.gles2_glVertexAttrib2fv(gl.funcs, C.GLuint(index), (*C.GLfloat)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib3f.xml -func (gl *GL) VertexAttrib3f(index glbase.Attrib, x, y, z float32) { - C.gles2_glVertexAttrib3f(gl.funcs, C.GLuint(index), C.GLfloat(x), C.GLfloat(y), C.GLfloat(z)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib3fv.xml -func (gl *GL) VertexAttrib3fv(index glbase.Attrib, values []float32) { - if len(values) != 3 { - panic("parameter values has incorrect length") - } - C.gles2_glVertexAttrib3fv(gl.funcs, C.GLuint(index), (*C.GLfloat)(unsafe.Pointer(&values[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib4f.xml -func (gl *GL) VertexAttrib4f(index glbase.Attrib, x, y, z, w float32) { - C.gles2_glVertexAttrib4f(gl.funcs, C.GLuint(index), C.GLfloat(x), C.GLfloat(y), C.GLfloat(z), C.GLfloat(w)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glVertexAttrib4fv.xml -func (gl *GL) VertexAttrib4fv(index glbase.Attrib, values []float32) { - if len(values) != 4 { - panic("parameter values has incorrect length") - } - C.gles2_glVertexAttrib4fv(gl.funcs, C.GLuint(index), (*C.GLfloat)(unsafe.Pointer(&values[0]))) -} - -// VertexAttribPointer specifies the location and data format of the array -// of generic vertex attributes at index to use when rendering. size -// specifies the number of components per attribute and must be 1, 2, 3, or -// 4. type specifies the data type of each component, and stride specifies -// the byte stride from one attribute to the next, allowing vertices and -// attributes to be packed into a single array or stored in separate arrays. -// normalized indicates whether the values stored in an integer format are -// to be mapped to the range [-1,1] (for signed values) or [0,1] -// (for unsigned values) when they are accessed and converted to floating -// point; otherwise, values will be converted to floats directly without -// normalization. offset is a byte offset into the buffer object's data -// store, which must be bound to the GL.ARRAY_BUFFER target with BindBuffer. -// -// The buffer object binding (GL.ARRAY_BUFFER_BINDING) is saved as -// generic vertex attribute array client-side state -// (GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING) for the provided index. -// -// To enable and disable a generic vertex attribute array, call -// EnableVertexAttribArray and DisableVertexAttribArray with index. If -// enabled, the generic vertex attribute array is used when DrawArrays or -// DrawElements is called. Each generic vertex attribute array is initially -// disabled. -// -// VertexAttribPointer is typically implemented on the client side. -// -// Error GL.INVALID_ENUM is generated if type is not an accepted value. -// GL.INVALID_VALUE is generated if index is greater than or equal to -// GL.MAX_VERTEX_ATTRIBS. GL.INVALID_VALUE is generated if size is not 1, 2, -// 3, or 4. GL.INVALID_VALUE is generated if stride is negative. -func (gl *GL) VertexAttribPointer(index glbase.Attrib, size int, gltype glbase.Enum, normalized bool, stride int, offset uintptr) { - offset_ptr := unsafe.Pointer(offset) - C.gles2_glVertexAttribPointer(gl.funcs, C.GLuint(index), C.GLint(size), C.GLenum(gltype), *(*C.GLboolean)(unsafe.Pointer(&normalized)), C.GLsizei(stride), offset_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glBindTexture.xml -func (gl *GL) BindTexture(target glbase.Enum, texture glbase.Texture) { - C.gles2_glBindTexture(gl.funcs, C.GLenum(target), C.GLuint(texture)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glBlendFunc.xml -func (gl *GL) BlendFunc(sfactor, dfactor glbase.Enum) { - C.gles2_glBlendFunc(gl.funcs, C.GLenum(sfactor), C.GLenum(dfactor)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glClear.xml -func (gl *GL) Clear(mask glbase.Bitfield) { - C.gles2_glClear(gl.funcs, C.GLbitfield(mask)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glClearColor.xml -func (gl *GL) ClearColor(red, green, blue, alpha glbase.Clampf) { - C.gles2_glClearColor(gl.funcs, C.GLclampf(red), C.GLclampf(green), C.GLclampf(blue), C.GLclampf(alpha)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glClearStencil.xml -func (gl *GL) ClearStencil(s int32) { - C.gles2_glClearStencil(gl.funcs, C.GLint(s)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glColorMask.xml -func (gl *GL) ColorMask(red, green, blue, alpha bool) { - C.gles2_glColorMask(gl.funcs, *(*C.GLboolean)(unsafe.Pointer(&red)), *(*C.GLboolean)(unsafe.Pointer(&green)), *(*C.GLboolean)(unsafe.Pointer(&blue)), *(*C.GLboolean)(unsafe.Pointer(&alpha))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyTexImage2D.xml -func (gl *GL) CopyTexImage2D(target glbase.Enum, level int, internalFormat glbase.Enum, x, y, width, height, border int) { - C.gles2_glCopyTexImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLenum(internalFormat), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height), C.GLint(border)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCopyTexSubImage2D.xml -func (gl *GL) CopyTexSubImage2D(target glbase.Enum, level, xoffset, yoffset, x, y, width, height int) { - C.gles2_glCopyTexSubImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glCullFace.xml -func (gl *GL) CullFace(mode glbase.Enum) { - C.gles2_glCullFace(gl.funcs, C.GLenum(mode)) -} - -// DeleteTextures deletes the textures objects whose names are stored -// in the textures slice. After a texture is deleted, it has no contents or -// dimensionality, and its name is free for reuse (for example by -// GenTextures). If a texture that is currently bound is deleted, the binding -// reverts to 0 (the default texture). -// -// DeleteTextures silently ignores 0's and names that do not correspond to -// existing textures. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// DeleteTextures is available in GL version 2.0 or greater. -func (gl *GL) DeleteTextures(textures []glbase.Texture) { - n := len(textures) - if n == 0 { - return - } - C.gles2_glDeleteTextures(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDepthFunc.xml -func (gl *GL) DepthFunc(glfunc glbase.Enum) { - C.gles2_glDepthFunc(gl.funcs, C.GLenum(glfunc)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDepthMask.xml -func (gl *GL) DepthMask(flag bool) { - C.gles2_glDepthMask(gl.funcs, *(*C.GLboolean)(unsafe.Pointer(&flag))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDisable.xml -func (gl *GL) Disable(cap glbase.Enum) { - C.gles2_glDisable(gl.funcs, C.GLenum(cap)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDrawArrays.xml -func (gl *GL) DrawArrays(mode glbase.Enum, first, count int) { - C.gles2_glDrawArrays(gl.funcs, C.GLenum(mode), C.GLint(first), C.GLsizei(count)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glDrawElements.xml -func (gl *GL) DrawElements(mode glbase.Enum, count int, gltype glbase.Enum, indices interface{}) { - var indices_ptr unsafe.Pointer - var indices_v = reflect.ValueOf(indices) - if indices != nil && indices_v.Kind() != reflect.Slice { - panic("parameter indices must be a slice") - } - if indices != nil { - indices_ptr = unsafe.Pointer(indices_v.Index(0).Addr().Pointer()) - } - C.gles2_glDrawElements(gl.funcs, C.GLenum(mode), C.GLsizei(count), C.GLenum(gltype), indices_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glEnable.xml -func (gl *GL) Enable(cap glbase.Enum) { - C.gles2_glEnable(gl.funcs, C.GLenum(cap)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFinish.xml -func (gl *GL) Finish() { - C.gles2_glFinish(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFlush.xml -func (gl *GL) Flush() { - C.gles2_glFlush(gl.funcs) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glFrontFace.xml -func (gl *GL) FrontFace(mode glbase.Enum) { - C.gles2_glFrontFace(gl.funcs, C.GLenum(mode)) -} - -// GenTextures returns n texture names in textures. There is no guarantee -// that the names form a contiguous set of integers; however, it is -// guaranteed that none of the returned names was in use immediately before -// the call to GenTextures. -// -// The generated textures have no dimensionality; they assume the -// dimensionality of the texture target to which they are first bound (see -// BindTexture). -// -// Texture names returned by a call to GenTextures are not returned by -// subsequent calls, unless they are first deleted with DeleteTextures. -// -// Error GL.INVALID_VALUE is generated if n is negative. -// -// GenTextures is available in GL version 2.0 or greater. -func (gl *GL) GenTextures(n int) []glbase.Texture { - if n == 0 { - return nil - } - textures := make([]glbase.Texture, n) - C.gles2_glGenTextures(gl.funcs, C.GLsizei(n), (*C.GLuint)(unsafe.Pointer(&textures[0]))) - return textures -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetBooleanv.xml -func (gl *GL) GetBooleanv(pname glbase.Enum, params []bool) { - C.gles2_glGetBooleanv(gl.funcs, C.GLenum(pname), (*C.GLboolean)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetError.xml -func (gl *GL) GetError() glbase.Enum { - glresult := C.gles2_glGetError(gl.funcs) - return glbase.Enum(glresult) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetFloatv.xml -func (gl *GL) GetFloatv(pname glbase.Enum, params []float32) { - C.gles2_glGetFloatv(gl.funcs, C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetIntegerv.xml -func (gl *GL) GetIntegerv(pname glbase.Enum, params []int32) { - C.gles2_glGetIntegerv(gl.funcs, C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexParameterfv.xml -func (gl *GL) GetTexParameterfv(target, pname glbase.Enum, params []float32) { - C.gles2_glGetTexParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexParameteriv.xml -func (gl *GL) GetTexParameteriv(target, pname glbase.Enum, params []int32) { - C.gles2_glGetTexParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glHint.xml -func (gl *GL) Hint(target, mode glbase.Enum) { - C.gles2_glHint(gl.funcs, C.GLenum(target), C.GLenum(mode)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIsEnabled.xml -func (gl *GL) IsEnabled(cap glbase.Enum) bool { - glresult := C.gles2_glIsEnabled(gl.funcs, C.GLenum(cap)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glIsTexture.xml -func (gl *GL) IsTexture(texture glbase.Texture) bool { - glresult := C.gles2_glIsTexture(gl.funcs, C.GLuint(texture)) - return *(*bool)(unsafe.Pointer(&glresult)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glLineWidth.xml -func (gl *GL) LineWidth(width float32) { - C.gles2_glLineWidth(gl.funcs, C.GLfloat(width)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPixelStorei.xml -func (gl *GL) PixelStorei(pname glbase.Enum, param int32) { - C.gles2_glPixelStorei(gl.funcs, C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glPolygonOffset.xml -func (gl *GL) PolygonOffset(factor, units float32) { - C.gles2_glPolygonOffset(gl.funcs, C.GLfloat(factor), C.GLfloat(units)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glReadPixels.xml -func (gl *GL) ReadPixels(x, y, width, height int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gles2_glReadPixels(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glScissor.xml -func (gl *GL) Scissor(x, y, width, height int) { - C.gles2_glScissor(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glStencilFunc.xml -func (gl *GL) StencilFunc(glfunc glbase.Enum, ref int32, mask uint32) { - C.gles2_glStencilFunc(gl.funcs, C.GLenum(glfunc), C.GLint(ref), C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glStencilMask.xml -func (gl *GL) StencilMask(mask uint32) { - C.gles2_glStencilMask(gl.funcs, C.GLuint(mask)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glStencilOp.xml -func (gl *GL) StencilOp(fail, zfail, zpass glbase.Enum) { - C.gles2_glStencilOp(gl.funcs, C.GLenum(fail), C.GLenum(zfail), C.GLenum(zpass)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexImage2D.xml -func (gl *GL) TexImage2D(target glbase.Enum, level int, internalFormat int32, width, height, border int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gles2_glTexImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(internalFormat), C.GLsizei(width), C.GLsizei(height), C.GLint(border), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexParameterf.xml -func (gl *GL) TexParameterf(target, pname glbase.Enum, param float32) { - C.gles2_glTexParameterf(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLfloat(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexParameterfv.xml -func (gl *GL) TexParameterfv(target, pname glbase.Enum, params []float32) { - C.gles2_glTexParameterfv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLfloat)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexParameteri.xml -func (gl *GL) TexParameteri(target, pname glbase.Enum, param int32) { - C.gles2_glTexParameteri(gl.funcs, C.GLenum(target), C.GLenum(pname), C.GLint(param)) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexParameteriv.xml -func (gl *GL) TexParameteriv(target, pname glbase.Enum, params []int32) { - C.gles2_glTexParameteriv(gl.funcs, C.GLenum(target), C.GLenum(pname), (*C.GLint)(unsafe.Pointer(¶ms[0]))) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glTexSubImage2D.xml -func (gl *GL) TexSubImage2D(target glbase.Enum, level, xoffset, yoffset, width, height int, format, gltype glbase.Enum, pixels interface{}) { - var pixels_ptr unsafe.Pointer - var pixels_v = reflect.ValueOf(pixels) - if pixels != nil && pixels_v.Kind() != reflect.Slice { - panic("parameter pixels must be a slice") - } - if pixels != nil { - pixels_ptr = unsafe.Pointer(pixels_v.Index(0).Addr().Pointer()) - } - C.gles2_glTexSubImage2D(gl.funcs, C.GLenum(target), C.GLint(level), C.GLint(xoffset), C.GLint(yoffset), C.GLsizei(width), C.GLsizei(height), C.GLenum(format), C.GLenum(gltype), pixels_ptr) -} - -// https://www.opengl.org/sdk/docs/man2/xhtml/glViewport.xml -func (gl *GL) Viewport(x, y, width, height int) { - C.gles2_glViewport(gl.funcs, C.GLint(x), C.GLint(y), C.GLsizei(width), C.GLsizei(height)) -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/gengl/Makefile b/Godeps/_workspace/src/github.com/obscuren/qml/gl/gengl/Makefile deleted file mode 100644 index f814cceb15..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/gengl/Makefile +++ /dev/null @@ -1,9 +0,0 @@ - -gengl: main.go parseqt.go - go build - -%.go: %.rl - ragel -Z -G2 -o $@ $< - -run: gengl - ./gengl diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/gengl/funcs.go b/Godeps/_workspace/src/github.com/obscuren/qml/gl/gengl/funcs.go deleted file mode 100644 index 994a3e91be..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/gengl/funcs.go +++ /dev/null @@ -1,1764 +0,0 @@ -package main - -type funcTweak struct { - // name specifies the name of the Go function to be tweaked. - name string - - // copy copies all the definitions for this function tweak from the named - // function. Templates are parsed under the new context. - copy string - - // params specifies a map of zero or more tweaks for specific parameters. - params paramTweaks - - // result defines the function result as presented at the end of the func line. - // Simple type changes are handled automatically. More involved multi-value - // results will require an appropriate after snippet to handle the return. - result string - - // before is a code snippet to be injected before the C function call. - // It may use the following template variables and functions: - // - // . - dot holds the Func being tweaked - // {{copyDoc "Func"}} - replaced by the respective function documentation - // {{paramGoType . "param"}} - replaced by the respective parameter Go type - // - before string - - // after is a code snippet to be injected after the C function call. - // It may use the same template functions as available for before. - after string - - // doc defines the documentation for the function. It may use the same - // template functions as available for before and after. - doc string -} - -type paramTweak struct { - // rename changes the parameter name in the Go function while keeping the C - // function call unchanged. The before snippet must define a proper variable - // to be used under the original name. - rename string - - // replace changes the parameter name in the C function call to a variable - // named "_c", while keeping the Go parameter name unchanged. - // The before and after snippets must manipulate the two values as needed. - replace bool - - // retype changes the Go parameter type. - retype string - - // output flags the parameter as an output parameter, which causes it to be - // omitted from the input parameter list and added to the result list. - output bool - - // unnamed causes the name of a result parameter to be omitted if possible. - unnamed bool - - // single flags the parameter as carrying a single value rather than a slice, - // when the parameter is originally defined as a pointer. - single bool - - // omit drops the parameter from the Go function. The before snippet must - // define a variable with the proper name for the C function call to use. - omit bool -} - -type paramTweaks map[string]paramTweak - -var paramNameFixes = map[string]string{ - "binaryformat": "binaryFormat", - "bufsize": "bufSize", - "indx": "index", - "infolog": "infoLog", - "internalformat": "internalFormat", - "precisiontype": "precisionType", - "ptr": "pointer", -} - -var funcTweakList = []funcTweak{{ - name: "Accum", - doc: ` - executes an operation on the accumulation buffer. - - Parameter op defines the accumulation buffer operation (GL.ACCUM, GL.LOAD, - GL.ADD, GL.MULT, or GL.RETURN) and specifies how the value parameter is - used. - - The accumulation buffer is an extended-range color buffer. Images are not - rendered into it. Rather, images rendered into one of the color buffers - are added to the contents of the accumulation buffer after rendering. - Effects such as antialiasing (of points, lines, and polygons), motion - blur, and depth of field can be created by accumulating images generated - with different transformation matrices. - - Each pixel in the accumulation buffer consists of red, green, blue, and - alpha values. The number of bits per component in the accumulation buffer - depends on the implementation. You can examine this number by calling - GetIntegerv four times, with arguments GL.ACCUM_RED_BITS, - GL.ACCUM_GREEN_BITS, GL.ACCUM_BLUE_BITS, and GL.ACCUM_ALPHA_BITS. - Regardless of the number of bits per component, the range of values stored - by each component is (-1, 1). The accumulation buffer pixels are mapped - one-to-one with frame buffer pixels. - - All accumulation buffer operations are limited to the area of the current - scissor box and applied identically to the red, green, blue, and alpha - components of each pixel. If a Accum operation results in a value outside - the range (-1, 1), the contents of an accumulation buffer pixel component - are undefined. - - The operations are as follows: - - GL.ACCUM - Obtains R, G, B, and A values from the buffer currently selected for - reading (see ReadBuffer). Each component value is divided by 2 n - - 1 , where n is the number of bits allocated to each color component - in the currently selected buffer. The result is a floating-point - value in the range 0 1 , which is multiplied by value and added to - the corresponding pixel component in the accumulation buffer, - thereby updating the accumulation buffer. - - GL.LOAD - Similar to GL.ACCUM, except that the current value in the - accumulation buffer is not used in the calculation of the new value. - That is, the R, G, B, and A values from the currently selected - buffer are divided by 2 n - 1 , multiplied by value, and then stored - in the corresponding accumulation buffer cell, overwriting the - current value. - - GL.ADD - Adds value to each R, G, B, and A in the accumulation buffer. - - GL.MULT - Multiplies each R, G, B, and A in the accumulation buffer by value - and returns the scaled component to its corresponding accumulation - buffer location. - - GL.RETURN - Transfers accumulation buffer values to the color buffer or buffers - currently selected for writing. Each R, G, B, and A component is - multiplied by value, then multiplied by 2 n - 1 , clamped to the - range 0 2 n - 1 , and stored in the corresponding display buffer - cell. The only fragment operations that are applied to this transfer - are pixel ownership, scissor, dithering, and color writemasks. - - To clear the accumulation buffer, call ClearAccum with R, G, B, and A - values to set it to, then call Clear with the accumulation buffer - enabled. - - Error GL.INVALID_ENUM is generated if op is not an accepted value. - GL.INVALID_OPERATION is generated if there is no accumulation buffer. - GL.INVALID_OPERATION is generated if Accum is executed between the - execution of Begin and the corresponding execution of End. - `, -}, { - name: "AttachShader", - doc: ` - attaches a shader object to a program object. - - In order to create an executable, there must be a way to specify the list - of things that will be linked together. Program objects provide this - mechanism. Shaders that are to be linked together in a program object must - first be attached to that program object. This indicates that shader will - be included in link operations that will be performed on program. - - All operations that can be performed on a shader object are valid whether - or not the shader object is attached to a program object. It is - permissible to attach a shader object to a program object before source - code has been loaded into the shader object or before the shader object - has been compiled. It is permissible to attach multiple shader objects of - the same type because each may contain a portion of the complete shader. - It is also permissible to attach a shader object to more than one program - object. If a shader object is deleted while it is attached to a program - object, it will be flagged for deletion, and deletion will not occur until - DetachShader is called to detach it from all program objects to which it - is attached. - - Error GL.INVALID_VALUE is generated if either program or shader is not a - value generated by OpenGL. GL.INVALID_OPERATION is generated if program - is not a program object. GL.INVALID_OPERATION is generated if shader is - not a shader object. GL.INVALID_OPERATION is generated if shader is - already attached to program. GL.INVALID_OPERATION is generated if - AttachShader is executed between the execution of Begin and the - corresponding execution of End. - - {{funcSince . "2.0+"}} - `, -}, { - name: "BindAttribLocation", - params: paramTweaks{ - "name": {retype: "string"}, - }, - doc: ` - associates a user-defined attribute variable in the program - object specified by program with a generic vertex attribute index. The name - parameter specifies the name of the vertex shader attribute variable to - which index is to be bound. When program is made part of the current state, - values provided via the generic vertex attribute index will modify the - value of the user-defined attribute variable specified by name. - - If name refers to a matrix attribute variable, index refers to the first - column of the matrix. Other matrix columns are then automatically bound to - locations index+1 for a matrix of type mat2; index+1 and index+2 for a - matrix of type mat3; and index+1, index+2, and index+3 for a matrix of - type mat4. - - This command makes it possible for vertex shaders to use descriptive names - for attribute variables rather than generic variables that are numbered - from 0 to GL.MAX_VERTEX_ATTRIBS-1. The values sent to each generic - attribute index are part of current state, just like standard vertex - attributes such as color, normal, and vertex position. If a different - program object is made current by calling UseProgram, the generic vertex - attributes are tracked in such a way that the same values will be observed - by attributes in the new program object that are also bound to index. - - Attribute variable name-to-generic attribute index bindings for a program - object can be explicitly assigned at any time by calling - BindAttribLocation. Attribute bindings do not go into effect until - LinkProgram is called. After a program object has been linked - successfully, the index values for generic attributes remain fixed (and - their values can be queried) until the next link command occurs. - - Applications are not allowed to bind any of the standard OpenGL vertex - attributes using this command, as they are bound automatically when - needed. Any attribute binding that occurs after the program object has - been linked will not take effect until the next time the program object is - linked. - - If name was bound previously, that information is lost. Thus you cannot - bind one user-defined attribute variable to multiple indices, but you can - bind multiple user-defined attribute variables to the same index. - - Applications are allowed to bind more than one user-defined attribute - variable to the same generic vertex attribute index. This is called - aliasing, and it is allowed only if just one of the aliased attributes is - active in the executable program, or if no path through the shader - consumes more than one attribute of a set of attributes aliased to the - same location. The compiler and linker are allowed to assume that no - aliasing is done and are free to employ optimizations that work only in - the absence of aliasing. OpenGL implementations are not required to do - error checking to detect aliasing. Because there is no way to bind - standard attributes, it is not possible to alias generic attributes with - conventional ones (except for generic attribute 0). - - BindAttribLocation can be called before any vertex shader objects are - bound to the specified program object. It is also permissible to bind a - generic attribute index to an attribute variable name that is never used - in a vertex shader. - - Active attributes that are not explicitly bound will be bound by the - linker when LinkProgram is called. The locations assigned can be queried - by calling GetAttribLocation. - - Error GL.INVALID_VALUE is generated if index is greater than or equal to - GL.MAX_VERTEX_ATTRIBS. - GL.INVALID_OPERATION is generated if name starts with the reserved prefix "gl_". - GL.INVALID_VALUE is generated if program is not a value generated by OpenGL. - GL.INVALID_OPERATION is generated if program is not a program object. - GL.INVALID_OPERATION is generated if BindAttribLocation is executed - between the execution of Begin and the corresponding execution of End. - - {{funcSince . "2.0+"}} - `, -}, { - name: "BindBuffer", - doc: ` - creates or puts in use a named buffer object. - Calling BindBuffer with target set to GL.ARRAY_BUFFER, - GL.ELEMENT_ARRAY_BUFFER, GL.PIXEL_PACK_BUFFER or GL.PIXEL_UNPACK_BUFFER - and buffer set to the name of the new buffer object binds the buffer - object name to the target. When a buffer object is bound to a target, the - previous binding for that target is automatically broken. - - Buffer object names are unsigned integers. The value zero is reserved, but - there is no default buffer object for each buffer object target. Instead, - buffer set to zero effectively unbinds any buffer object previously bound, - and restores client memory usage for that buffer object target. Buffer - object names and the corresponding buffer object contents are local to the - shared display-list space (see XCreateContext) of the current GL rendering - context; two rendering contexts share buffer object names only if they - also share display lists. - - GenBuffers may be called to generate a set of new buffer object names. - - The state of a buffer object immediately after it is first bound is an - unmapped zero-sized memory buffer with GL.READ_WRITE access and - GL.STATIC_DRAW usage. - - While a non-zero buffer object name is bound, GL operations on the target - to which it is bound affect the bound buffer object, and queries of the - target to which it is bound return state from the bound buffer object. - While buffer object name zero is bound, as in the initial state, attempts - to modify or query state on the target to which it is bound generates an - GL.INVALID_OPERATION error. - - When vertex array pointer state is changed, for example by a call to - NormalPointer, the current buffer object binding (GL.ARRAY_BUFFER_BINDING) - is copied into the corresponding client state for the vertex array type - being changed, for example GL.NORMAL_ARRAY_BUFFER_BINDING. While a - non-zero buffer object is bound to the GL.ARRAY_BUFFER target, the vertex - array pointer parameter that is traditionally interpreted as a pointer to - client-side memory is instead interpreted as an offset within the buffer - object measured in basic machine units. - - While a non-zero buffer object is bound to the GL.ELEMENT_ARRAY_BUFFER - target, the indices parameter of DrawElements, DrawRangeElements, or - MultiDrawElements that is traditionally interpreted as a pointer to - client-side memory is instead interpreted as an offset within the buffer - object measured in basic machine units. - - While a non-zero buffer object is bound to the GL.PIXEL_PACK_BUFFER - target, the following commands are affected: GetCompressedTexImage, - GetConvolutionFilter, GetHistogram, GetMinmax, GetPixelMap, - GetPolygonStipple, GetSeparableFilter, GetTexImage, and ReadPixels. The - pointer parameter that is traditionally interpreted as a pointer to - client-side memory where the pixels are to be packed is instead - interpreted as an offset within the buffer object measured in basic - machine units. - - While a non-zero buffer object is bound to the GL.PIXEL_UNPACK_BUFFER - target, the following commands are affected: Bitmap, ColorSubTable, - ColorTable, CompressedTexImage1D, CompressedTexImage2D, - CompressedTexImage3D, CompressedTexSubImage1D, CompressedTexSubImage2D, - CompressedTexSubImage3D, ConvolutionFilter1D, ConvolutionFilter2D, - DrawPixels, PixelMap, PolygonStipple, SeparableFilter2D, TexImage1D, - TexImage2D, TexImage3D, TexSubImage1D, TexSubImage2D, and TexSubImage3D. - The pointer parameter that is traditionally interpreted as a pointer to - client-side memory from which the pixels are to be unpacked is instead - interpreted as an offset within the buffer object measured in basic - machine units. - - A buffer object binding created with BindBuffer remains active until a - different buffer object name is bound to the same target, or until the - bound buffer object is deleted with DeleteBuffers. - - Once created, a named buffer object may be re-bound to any target as often - as needed. However, the GL implementation may make choices about how to - optimize the storage of a buffer object based on its initial binding - target. - - Error GL.INVALID_ENUM is generated if target is not one of the allowable - values. GL.INVALID_OPERATION is generated if BindBuffer is executed - between the execution of Begin and the corresponding execution of End. - - {{funcSince . "1.5+"}} - `, -}, { - name: "BufferData", - before: ` - if data != nil { - size = int(data_v.Type().Size()) * data_v.Len() - } - `, - doc: ` - creates a new data store for the buffer object currently - bound to target. Any pre-existing data store is deleted. The new data - store is created with the specified size in bytes and usage. If data is - not nil, it must be a slice that is used to initialize the data store. - In that case the size parameter is ignored and the store size will match - the slice data size. - - In its initial state, the new data store is not mapped, it has a NULL - mapped pointer, and its mapped access is GL.READ_WRITE. - - The target constant must be one of GL.ARRAY_BUFFER, GL.COPY_READ_BUFFER, - GL.COPY_WRITE_BUFFER, GL.ELEMENT_ARRAY_BUFFER, GL.PIXEL_PACK_BUFFER, - GL.PIXEL_UNPACK_BUFFER, GL.TEXTURE_BUFFER, GL.TRANSFORM_FEEDBACK_BUFFER, - or GL.UNIFORM_BUFFER. - - The usage parameter is a hint to the GL implementation as to how a buffer - object's data store will be accessed. This enables the GL implementation - to make more intelligent decisions that may significantly impact buffer - object performance. It does not, however, constrain the actual usage of - the data store. usage can be broken down into two parts: first, the - frequency of access (modification and usage), and second, the nature of - that access. - - A usage frequency of STREAM and nature of DRAW is specified via the - constant GL.STREAM_DRAW, for example. - - The usage frequency of access may be one of: - - STREAM - The data store contents will be modified once and used at most a few times. - - STATIC - The data store contents will be modified once and used many times. - - DYNAMIC - The data store contents will be modified repeatedly and used many times. - - The usage nature of access may be one of: - - DRAW - The data store contents are modified by the application, and used as - the source for GL drawing and image specification commands. - - READ - The data store contents are modified by reading data from the GL, - and used to return that data when queried by the application. - - COPY - The data store contents are modified by reading data from the GL, - and used as the source for GL drawing and image specification - commands. - - Clients must align data elements consistent with the requirements of the - client platform, with an additional base-level requirement that an offset - within a buffer to a datum comprising N bytes be a multiple of N. - - Error GL.INVALID_ENUM is generated if target is not one of the accepted - buffer targets. GL.INVALID_ENUM is generated if usage is not - GL.STREAM_DRAW, GL.STREAM_READ, GL.STREAM_COPY, GL.STATIC_DRAW, - GL.STATIC_READ, GL.STATIC_COPY, GL.DYNAMIC_DRAW, GL.DYNAMIC_READ, or - GL.DYNAMIC_COPY. GL.INVALID_VALUE is generated if size is negative. - GL.INVALID_OPERATION is generated if the reserved buffer object name 0 is - bound to target. GL.OUT_OF_MEMORY is generated if the GL is unable to - create a data store with the specified size. - `, -}, { - name: "CompileShader", - doc: ` - compiles the source code strings that have been stored in - the shader object specified by shader. - - The compilation status will be stored as part of the shader object's - state. This value will be set to GL.TRUE if the shader was compiled without - errors and is ready for use, and GL.FALSE otherwise. It can be queried by - calling GetShaderiv with arguments shader and GL.COMPILE_STATUS. - - Compilation of a shader can fail for a number of reasons as specified by - the OpenGL Shading Language Specification. Whether or not the compilation - was successful, information about the compilation can be obtained from the - shader object's information log by calling GetShaderInfoLog. - - Error GL.INVALID_VALUE is generated if shader is not a value generated by - OpenGL. GL.INVALID_OPERATION is generated if shader is not a shader - object. GL.INVALID_OPERATION is generated if CompileShader is executed - between the execution of Begin and the corresponding execution of End. - - {{funcSince . "2.0+"}} - `, -}, { - name: "CreateProgram", - result: "glbase.Program", - doc: ` - creates an empty program object and returns a non-zero - value by which it can be referenced. A program object is an object to - which shader objects can be attached. This provides a mechanism to specify - the shader objects that will be linked to create a program. It also - provides a means for checking the compatibility of the shaders that will - be used to create a program (for instance, checking the compatibility - between a vertex shader and a fragment shader). When no longer needed as - part of a program object, shader objects can be detached. - - One or more executables are created in a program object by successfully - attaching shader objects to it with AttachShader, successfully compiling - the shader objects with CompileShader, and successfully linking the - program object with LinkProgram. These executables are made part of - current state when UseProgram is called. Program objects can be deleted - by calling DeleteProgram. The memory associated with the program object - will be deleted when it is no longer part of current rendering state for - any context. - - Like display lists and texture objects, the name space for program objects - may be shared across a set of contexts, as long as the server sides of the - contexts share the same address space. If the name space is shared across - contexts, any attached objects and the data associated with those attached - objects are shared as well. - - Applications are responsible for providing the synchronization across API - calls when objects are accessed from different execution threads. - - This function returns 0 if an error occurs creating the program object. - - Error GL.INVALID_OPERATION is generated if CreateProgram is executed - between the execution of Begin and the corresponding execution of End. - - {{funcSince . "2.0+"}} - `, -}, { - name: "CreateShader", - result: "glbase.Shader", - doc: ` - creates an empty shader object and returns a non-zero value - by which it can be referenced. A shader object is used to maintain the - source code strings that define a shader. shaderType indicates the type of - shader to be created. - - Two types of shaders are supported. A shader of type GL.VERTEX_SHADER is a - shader that is intended to run on the programmable vertex processor and - replace the fixed functionality vertex processing in OpenGL. A shader of - type GL.FRAGMENT_SHADER is a shader that is intended to run on the - programmable fragment processor and replace the fixed functionality - fragment processing in OpenGL. - - When created, a shader object's GL.SHADER_TYPE parameter is set to either - GL.VERTEX_SHADER or GL.FRAGMENT_SHADER, depending on the value of - shaderType. - - Like display lists and texture objects, the name space for shader objects - may be shared across a set of contexts, as long as the server sides of the - contexts share the same address space. If the name space is shared across - contexts, any attached objects and the data associated with those attached - objects are shared as well. - - This function returns 0 if an error occurs creating the shader object. - - Error GL.INVALID_ENUM is generated if shaderType is not an accepted value. - GL.INVALID_OPERATION is generated if CreateShader is executed between the - execution of Begin and the corresponding execution of End. - - {{funcSince . "2.0+"}} - `, -}, { - name: "DeleteBuffers", - params: paramTweaks{ - "n": {omit: true}, - }, - before: ` - n := len(buffers) - if n == 0 { return } - `, - doc: ` - deletes the buffer objects whose names are stored in the - buffers slice. - - After a buffer object is deleted, it has no contents, and its name is free - for reuse (for example by GenBuffers). If a buffer object that is - currently bound is deleted, the binding reverts to 0 (the absence of any - buffer object, which reverts to client memory usage). - - DeleteBuffers silently ignores 0's and names that do not correspond to - existing buffer objects. - - Error GL.INVALID_VALUE is generated if n is negative. GL.INVALID_OPERATION - is generated if DeleteBuffers is executed between the execution of Begin - and the corresponding execution of End. - - {{funcSince . "1.5+"}} - `, -}, { - name: "DeleteFramebuffers", - params: paramTweaks{ - "n": {omit: true}, - }, - before: ` - n := len(framebuffers) - if n == 0 { return } - `, - doc: ` - deletes the framebuffer objects whose names are - stored in the framebuffers slice. The name zero is reserved by the GL and - is silently ignored, should it occur in framebuffers, as are other unused - names. Once a framebuffer object is deleted, its name is again unused and - it has no attachments. If a framebuffer that is currently bound to one or - more of the targets GL.DRAW_FRAMEBUFFER or GL.READ_FRAMEBUFFER is deleted, - it is as though BindFramebuffer had been executed with the corresponding - target and framebuffer zero. - - Error GL.INVALID_VALUE is generated if n is negative. - - {{funcSince . "3.0+"}} - `, -}, { - name: "DeleteProgram", - doc: ` - frees the memory and invalidates the name associated with - the program object specified by program. This command effectively undoes - the effects of a call to CreateProgram. - - If a program object is in use as part of current rendering state, it will - be flagged for deletion, but it will not be deleted until it is no longer - part of current state for any rendering context. If a program object to be - deleted has shader objects attached to it, those shader objects will be - automatically detached but not deleted unless they have already been - flagged for deletion by a previous call to DeleteShader. A value of 0 - for program will be silently ignored. - - To determine whether a program object has been flagged for deletion, call - GetProgram with arguments program and GL.DELETE_STATUS. - - Error GL.INVALID_VALUE is generated if program is not a value generated by - OpenGL. - - {{funcSince . "2.0+"}} - `, -}, { - name: "DeleteRenderbuffers", - params: paramTweaks{ - "n": {omit: true}, - }, - before: ` - n := len(renderbuffers) - if n == 0 { return } - `, - doc: ` - deletes the renderbuffer objects whose names are stored - in the renderbuffers slice. The name zero is reserved by the GL and - is silently ignored, should it occur in renderbuffers, as are other unused - names. Once a renderbuffer object is deleted, its name is again unused and - it has no contents. If a renderbuffer that is currently bound to the - target GL.RENDERBUFFER is deleted, it is as though BindRenderbuffer had - been executed with a target of GL.RENDERBUFFER and a name of zero. - - If a renderbuffer object is attached to one or more attachment points in - the currently bound framebuffer, then it as if FramebufferRenderbuffer - had been called, with a renderbuffer of zero for each attachment point to - which this image was attached in the currently bound framebuffer. In other - words, this renderbuffer object is first detached from all attachment - ponits in the currently bound framebuffer. Note that the renderbuffer - image is specifically not detached from any non-bound framebuffers. - - Error GL.INVALID_VALUE is generated if n is negative. - - {{funcSince . "3.0+"}} - `, -}, { - name: "DeleteShader", - doc: ` - frees the memory and invalidates the name associated with - the shader object specified by shader. This command effectively undoes the - effects of a call to CreateShader. - - If a shader object to be deleted is attached to a program object, it will - be flagged for deletion, but it will not be deleted until it is no longer - attached to any program object, for any rendering context (it must - be detached from wherever it was attached before it will be deleted). A - value of 0 for shader will be silently ignored. - - To determine whether an object has been flagged for deletion, call - GetShader with arguments shader and GL.DELETE_STATUS. - - Error GL.INVALID_VALUE is generated if shader is not a value generated by - OpenGL. - - {{funcSince . "2.0+"}} - `, -}, { - name: "DeleteTextures", - params: paramTweaks{ - "n": {omit: true}, - }, - before: ` - n := len(textures) - if n == 0 { return } - `, - doc: ` - deletes the textures objects whose names are stored - in the textures slice. After a texture is deleted, it has no contents or - dimensionality, and its name is free for reuse (for example by - GenTextures). If a texture that is currently bound is deleted, the binding - reverts to 0 (the default texture). - - DeleteTextures silently ignores 0's and names that do not correspond to - existing textures. - - Error GL.INVALID_VALUE is generated if n is negative. - - {{funcSince . "2.0+"}} - `, -}, { - name: "DepthRange", - doc: ` - specifies the mapping of depth values from normalized device - coordinates to window coordinates. - - Parameter nearVal specifies the mapping of the near clipping plane to window - coordinates (defaults to 0), while farVal specifies the mapping of the far - clipping plane to window coordinates (defaults to 1). - - After clipping and division by w, depth coordinates range from -1 to 1, - corresponding to the near and far clipping planes. DepthRange specifies a - linear mapping of the normalized depth coordinates in this range to window - depth coordinates. Regardless of the actual depth buffer implementation, - window coordinate depth values are treated as though they range from 0 through 1 - (like color components). Thus, the values accepted by DepthRange are both - clamped to this range before they are accepted. - - The default setting of (0, 1) maps the near plane to 0 and the far plane to 1. - With this mapping, the depth buffer range is fully utilized. - - It is not necessary that nearVal be less than farVal. Reverse mappings such as - nearVal 1, and farVal 0 are acceptable. - - GL.INVALID_OPERATION is generated if DepthRange is executed between the - execution of Begin and the corresponding execution of End. - `, -}, { - name: "GenBuffers", - params: paramTweaks{ - "buffers": {output: true, unnamed: true}, - }, - before: ` - if n == 0 { return nil } - buffers := make([]glbase.Buffer, n) - `, - doc: ` - returns n buffer object names. There is no guarantee that - the names form a contiguous set of integers; however, it is guaranteed - that none of the returned names was in use immediately before the call to - GenBuffers. - - Buffer object names returned by a call to GenBuffers are not returned by - subsequent calls, unless they are first deleted with DeleteBuffers. - - No buffer objects are associated with the returned buffer object names - until they are first bound by calling BindBuffer. - - Error GL.INVALID_VALUE is generated if n is negative. GL.INVALID_OPERATION - is generated if GenBuffers is executed between the execution of Begin - and the corresponding execution of End. - - {{funcSince . "1.5+"}} - `, -}, { - name: "GenFramebuffers", - params: paramTweaks{ - "framebuffers": {output: true, unnamed: true}, - }, - before: ` - if n == 0 { return nil } - framebuffers := make([]glbase.Framebuffer, n) - `, - doc: ` - returns n framebuffer object names in ids. There is no - guarantee that the names form a contiguous set of integers; however, it is - guaranteed that none of the returned names was in use immediately before - the call to GenFramebuffers. - - Framebuffer object names returned by a call to GenFramebuffers are not - returned by subsequent calls, unless they are first deleted with - DeleteFramebuffers. - - The names returned in ids are marked as used, for the purposes of - GenFramebuffers only, but they acquire state and type only when they are - first bound. - - Error GL.INVALID_VALUE is generated if n is negative. - `, -}, { - name: "GenRenderbuffers", - params: paramTweaks{ - "renderbuffers": {output: true, unnamed: true}, - }, - before: ` - if n == 0 { return nil } - renderbuffers := make([]glbase.Renderbuffer, n) - `, - doc: ` - returns n renderbuffer object names in renderbuffers. - There is no guarantee that the names form a contiguous set of integers; - however, it is guaranteed that none of the returned names was in use - immediately before the call to GenRenderbuffers. - - Renderbuffer object names returned by a call to GenRenderbuffers are not - returned by subsequent calls, unless they are first deleted with - DeleteRenderbuffers. - - The names returned in renderbuffers are marked as used, for the purposes - of GenRenderbuffers only, but they acquire state and type only when they - are first bound. - - Error GL.INVALID_VALUE is generated if n is negative. - - {{funcSince . "3.0+"}} - `, -}, { - name: "GenTextures", - params: paramTweaks{ - "textures": {output: true, unnamed: true}, - }, - before: ` - if n == 0 { return nil } - textures := make([]glbase.Texture, n) - `, - doc: ` - returns n texture names in textures. There is no guarantee - that the names form a contiguous set of integers; however, it is - guaranteed that none of the returned names was in use immediately before - the call to GenTextures. - - The generated textures have no dimensionality; they assume the - dimensionality of the texture target to which they are first bound (see - BindTexture). - - Texture names returned by a call to GenTextures are not returned by - subsequent calls, unless they are first deleted with DeleteTextures. - - Error GL.INVALID_VALUE is generated if n is negative. - - {{funcSince . "2.0+"}} - `, -}, { - name: "GetAttribLocation", - params: paramTweaks{ - "name": {retype: "string"}, - }, - result: "glbase.Attrib", - doc: ` - queries the previously linked program object specified - by program for the attribute variable specified by name and returns the - index of the generic vertex attribute that is bound to that attribute - variable. If name is a matrix attribute variable, the index of the first - column of the matrix is returned. If the named attribute variable is not - an active attribute in the specified program object or if name starts with - the reserved prefix "gl_", a value of -1 is returned. - - The association between an attribute variable name and a generic attribute - index can be specified at any time by calling BindAttribLocation. - Attribute bindings do not go into effect until LinkProgram is called. - After a program object has been linked successfully, the index values for - attribute variables remain fixed until the next link command occurs. The - attribute values can only be queried after a link if the link was - successful. GetAttribLocation returns the binding that actually went - into effect the last time LinkProgram was called for the specified - program object. Attribute bindings that have been specified since the last - link operation are not returned by GetAttribLocation. - - Error GL_INVALID_OPERATION is generated if program is not a value - generated by OpenGL. GL_INVALID_OPERATION is generated if program is not - a program object. GL_INVALID_OPERATION is generated if program has not - been successfully linked. GL_INVALID_OPERATION is generated if - GetAttribLocation is executed between the execution of Begin and the - corresponding execution of End. - - {{funcSince . "2.0+"}} - `, -}, { - name: "GetProgramInfoLog", - params: paramTweaks{ - "bufSize": {omit: true}, - "length": {omit: true, single: true}, - "infoLog": {output: true, unnamed: true}, - }, - before: ` - var params [1]int32 - var length int32 - gl.GetProgramiv(program, INFO_LOG_LENGTH, params[:]) - bufSize := params[0] - infoLog := make([]byte, int(bufSize)) - `, - doc: ` - returns the information log for the specified program - object. The information log for a program object is modified when the - program object is linked or validated. - - The information log for a program object is either an empty string, or a - string containing information about the last link operation, or a string - containing information about the last validation operation. It may contain - diagnostic messages, warning messages, and other information. When a - program object is created, its information log will be a string of length - 0, and the size of the current log can be obtained by calling GetProgramiv - with the value GL.INFO_LOG_LENGTH. - - Error GL.INVALID_VALUE is generated if program is not a value generated - by OpenGL. GL.INVALID_OPERATION is generated if program is not a - program object. - `, -}, { - name: "GetProgramiv", - params: paramTweaks{ - "params": {replace: true}, - }, - before: ` - var params_c [4]{{paramGoType . "params"}} - `, - after: ` - copy(params, params_c[:]) - `, - doc: ` - returns in params the value of a parameter for a specific - program object. The following parameters are defined: - - GL.DELETE_STATUS - params returns GL.TRUE if program is currently flagged for deletion, - and GL.FALSE otherwise. - - GL.LINK_STATUS - params returns GL.TRUE if the last link operation on program was - successful, and GL.FALSE otherwise. - - GL.VALIDATE_STATUS - params returns GL.TRUE or if the last validation operation on - program was successful, and GL.FALSE otherwise. - - GL.INFO_LOG_LENGTH - params returns the number of characters in the information log for - program including the null termination character (the size of - the character buffer required to store the information log). If - program has no information log, a value of 0 is returned. - - GL.ATTACHED_SHADERS - params returns the number of shader objects attached to program. - - GL.ACTIVE_ATTRIBUTES - params returns the number of active attribute variables for program. - - GL.ACTIVE_ATTRIBUTE_MAX_LENGTH - params returns the length of the longest active attribute name for - program, including the null termination character (the size of - the character buffer required to store the longest attribute name). - If no active attributes exist, 0 is returned. - - GL.ACTIVE_UNIFORMS - params returns the number of active uniform variables for program. - - GL.ACTIVE_UNIFORM_MAX_LENGTH - params returns the length of the longest active uniform variable - name for program, including the null termination character (i.e., - the size of the character buffer required to store the longest - uniform variable name). If no active uniform variables exist, 0 is - returned. - - GL.TRANSFORM_FEEDBACK_BUFFER_MODE - params returns a symbolic constant indicating the buffer mode used - when transform feedback is active. This may be GL.SEPARATE_ATTRIBS - or GL.INTERLEAVED_ATTRIBS. - - GL.TRANSFORM_FEEDBACK_VARYINGS - params returns the number of varying variables to capture in transform - feedback mode for the program. - - GL.TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH - params returns the length of the longest variable name to be used for - transform feedback, including the null-terminator. - - GL.GEOMETRY_VERTICES_OUT - params returns the maximum number of vertices that the geometry shader in - program will output. - - GL.GEOMETRY_INPUT_TYPE - params returns a symbolic constant indicating the primitive type accepted - as input to the geometry shader contained in program. - - GL.GEOMETRY_OUTPUT_TYPE - params returns a symbolic constant indicating the primitive type that will - be output by the geometry shader contained in program. - - GL.ACTIVE_UNIFORM_BLOCKS and GL.ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH are - available only if the GL version 3.1 or greater. - - GL.GEOMETRY_VERTICES_OUT, GL.GEOMETRY_INPUT_TYPE and - GL.GEOMETRY_OUTPUT_TYPE are accepted only if the GL version is 3.2 or - greater. - - Error GL.INVALID_VALUE is generated if program is not a value generated by - OpenGL. GL.INVALID_OPERATION is generated if program does not refer to a - program object. GL.INVALID_OPERATION is generated if pname is - GL.GEOMETRY_VERTICES_OUT, GL.GEOMETRY_INPUT_TYPE, or - GL.GEOMETRY_OUTPUT_TYPE, and program does not contain a geometry shader. - GL.INVALID_ENUM is generated if pname is not an accepted value. - `, -}, { - name: "GetShaderiv", - params: paramTweaks{ - "params": {replace: true}, - }, - before: ` - var params_c [4]{{paramGoType . "params"}} - `, - after: ` - copy(params, params_c[:]) - `, - doc: ` - GetShader returns in params the value of a parameter for a specific - shader object. The following parameters are defined: - - GL.SHADER_TYPE - params returns GL.VERTEX_SHADER if shader is a vertex shader object, - and GL.FRAGMENT_SHADER if shader is a fragment shader object. - - GL.DELETE_STATUS - params returns GL.TRUE if shader is currently flagged for deletion, - and GL.FALSE otherwise. - - GL.COMPILE_STATUS - params returns GL.TRUE if the last compile operation on shader was - successful, and GL.FALSE otherwise. - - GL.INFO_LOG_LENGTH - params returns the number of characters in the information log for - shader including the null termination character (the size of the - character buffer required to store the information log). If shader has - no information log, a value of 0 is returned. - - GL.SHADER_SOURCE_LENGTH - params returns the length of the concatenation of the source strings - that make up the shader source for the shader, including the null - termination character. (the size of the character buffer - required to store the shader source). If no source code exists, 0 is - returned. - - Error GL.INVALID_VALUE is generated if shader is not a value generated by - OpenGL. GL.INVALID_OPERATION is generated if shader does not refer to a - shader object. GL.INVALID_ENUM is generated if pname is not an accepted - value. GL.INVALID_OPERATION is generated if GetShader is executed - between the execution of Begin and the corresponding execution of End. - - {{funcSince . "2.0+"}} - `, -}, { - name: "GetShaderInfoLog", - params: paramTweaks{ - "bufSize": {omit: true}, - "length": {omit: true, single: true}, - "infoLog": {output: true, unnamed: true}, - }, - before: ` - var params [1]int32 - var length int32 - gl.GetShaderiv(shader, INFO_LOG_LENGTH, params[:]) - bufSize := params[0] - infoLog := make([]byte, int(bufSize)) - `, - doc: ` - returns the information log for the specified shader - object. The information log for a shader object is modified when the - shader is compiled. - - The information log for a shader object is a string that may contain - diagnostic messages, warning messages, and other information about the - last compile operation. When a shader object is created, its information - log will be a string of length 0, and the size of the current log can be - obtained by calling GetShaderiv with the value GL.INFO_LOG_LENGTH. - - The information log for a shader object is the OpenGL implementer's - primary mechanism for conveying information about the compilation process. - Therefore, the information log can be helpful to application developers - during the development process, even when compilation is successful. - Application developers should not expect different OpenGL implementations - to produce identical information logs. - - Error GL.INVALID_VALUE is generated if shader is not a value generated by - OpenGL. GL.INVALID_OPERATION is generated if shader is not a shader - object. GL.INVALID_VALUE is generated if maxLength is less than 0. - GL.INVALID_OPERATION is generated if GetShaderInfoLog is executed - between the execution of Begin and the corresponding execution of End. - - {{funcSince . "2.0+"}} - `, -}, { - name: "GetUniformLocation", - params: paramTweaks{ - "name": {retype: "string"}, - }, - result: "glbase.Uniform", - doc: ` - returns an integer that represents the location of a - specific uniform variable within a program object. name must be an active - uniform variable name in program that is not a structure, an array of - structures, or a subcomponent of a vector or a matrix. This function - returns -1 if name does not correspond to an active uniform variable in - program or if name starts with the reserved prefix "gl_". - - Uniform variables that are structures or arrays of structures may be - queried by calling GetUniformLocation for each field within the - structure. The array element operator "[]" and the structure field - operator "." may be used in name in order to select elements within an - array or fields within a structure. The result of using these operators is - not allowed to be another structure, an array of structures, or a - subcomponent of a vector or a matrix. Except if the last part of name - indicates a uniform variable array, the location of the first element of - an array can be retrieved by using the name of the array, or by using the - name appended by "[0]". - - The actual locations assigned to uniform variables are not known until the - program object is linked successfully. After linking has occurred, the - command GetUniformLocation can be used to obtain the location of a - uniform variable. This location value can then be passed to Uniform to - set the value of the uniform variable or to GetUniform in order to query - the current value of the uniform variable. After a program object has been - linked successfully, the index values for uniform variables remain fixed - until the next link command occurs. Uniform variable locations and values - can only be queried after a link if the link was successful. - - Error GL.INVALID_VALUE is generated if program is not a value generated by - OpenGL. GL.INVALID_OPERATION is generated if program is not a program object. - GL.INVALID_OPERATION is generated if program has not been successfully - linked. GL.INVALID_OPERATION is generated if GetUniformLocation is executed - between the execution of Begin and the corresponding execution of End. - - {{funcSince . "2.0+"}} - `, -}, { - name: "GetUniformfv", - copy: "GetUniformiv", -}, { - name: "GetUniformiv", - params: paramTweaks{ - "params": {replace: true}, - }, - before: ` - var params_c [4]{{paramGoType . "params"}} - `, - after: ` - copy(params, params_c[:]) - `, - doc: ` - returns in params the value of the specified uniform - variable. The type of the uniform variable specified by location - determines the number of values returned. If the uniform variable is - defined in the shader as a boolean, int, or float, a single value will be - returned. If it is defined as a vec2, ivec2, or bvec2, two values will be - returned. If it is defined as a vec3, ivec3, or bvec3, three values will - be returned, and so on. To query values stored in uniform variables - declared as arrays, call {{.GoName}} for each element of the array. To - query values stored in uniform variables declared as structures, call - {{.GoName}} for each field in the structure. The values for uniform - variables declared as a matrix will be returned in column major order. - - The locations assigned to uniform variables are not known until the - program object is linked. After linking has occurred, the command - GetUniformLocation can be used to obtain the location of a uniform - variable. This location value can then be passed to {{.GoName}} in order - to query the current value of the uniform variable. After a program object - has been linked successfully, the index values for uniform variables - remain fixed until the next link command occurs. The uniform variable - values can only be queried after a link if the link was successful. - - Error GL.INVALID_VALUE is generated if program is not a value generated by - OpenGL. GL.INVALID_OPERATION is generated if program is not a program - object. GL.INVALID_OPERATION is generated if program has not been - successfully linked. GL.INVALID_OPERATION is generated if location does - not correspond to a valid uniform variable location for the specified - program object. GL.INVALID_OPERATION is generated if {{.GoName}} is - executed between the execution of Begin and the corresponding execution of - End. - - {{funcSince . "2.0+"}} - `, -}, { - name: "GetVertexAttribdv", - copy: "GetVertexAttribiv", -}, { - name: "GetVertexAttribfv", - copy: "GetVertexAttribiv", -}, { - name: "GetVertexAttribiv", - params: paramTweaks{ - "params": {replace: true}, - }, - before: ` - var params_c [4]{{paramGoType . "params"}} - `, - after: ` - copy(params, params_c[:]) - `, - doc: ` - returns in params the value of a generic vertex attribute - parameter. The generic vertex attribute to be queried is specified by - index, and the parameter to be queried is specified by pname. - - The accepted parameter names are as follows: - - GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING - params returns a single value, the name of the buffer object - currently bound to the binding point corresponding to generic vertex - attribute array index. If no buffer object is bound, 0 is returned. - The initial value is 0. - - GL.VERTEX_ATTRIB_ARRAY_ENABLED - params returns a single value that is non-zero (true) if the vertex - attribute array for index is enabled and 0 (false) if it is - disabled. The initial value is 0. - - GL.VERTEX_ATTRIB_ARRAY_SIZE - params returns a single value, the size of the vertex attribute - array for index. The size is the number of values for each element - of the vertex attribute array, and it will be 1, 2, 3, or 4. The - initial value is 4. - - GL.VERTEX_ATTRIB_ARRAY_STRIDE - params returns a single value, the array stride for (number of bytes - between successive elements in) the vertex attribute array for - index. A value of 0 indicates that the array elements are stored - sequentially in memory. The initial value is 0. - - GL.VERTEX_ATTRIB_ARRAY_TYPE - params returns a single value, a symbolic constant indicating the - array type for the vertex attribute array for index. Possible values - are GL.BYTE, GL.UNSIGNED_BYTE, GL.SHORT, GL.UNSIGNED_SHORT, GL.INT, - GL.UNSIGNED_INT, GL.FLOAT, and GL.DOUBLE. The initial value is - GL.FLOAT. - - GL.VERTEX_ATTRIB_ARRAY_NORMALIZED - params returns a single value that is non-zero (true) if fixed-point - data types for the vertex attribute array indicated by index are - normalized when they are converted to floating point, and 0 (false) - otherwise. The initial value is 0. - - GL.CURRENT_VERTEX_ATTRIB - params returns four values that represent the current value for the - generic vertex attribute specified by index. Generic vertex - attribute 0 is unique in that it has no current state, so an error - will be generated if index is 0. The initial value for all other - generic vertex attributes is (0,0,0,1). - - All of the parameters except GL.CURRENT_VERTEX_ATTRIB represent - client-side state. - - Error GL.INVALID_VALUE is generated if index is greater than or equal to - GL.MAX_VERTEX_ATTRIBS. GL.INVALID_ENUM is generated if pname is not an - accepted value. GL.INVALID_OPERATION is generated if index is 0 and pname - is GL.CURRENT_VERTEX_ATTRIB. - - {{funcSince . "2.0+"}} - `, -}, { - name: "LinkProgram", - doc: ` - links the program object specified by program. If any shader - objects of type GL.VERTEX_SHADER are attached to program, they will be - used to create an executable that will run on the programmable vertex - processor. If any shader objects of type GL.FRAGMENT_SHADER are attached - to program, they will be used to create an executable that will run on the - programmable fragment processor. - - The status of the link operation will be stored as part of the program - object's state. This value will be set to GL.TRUE if the program object - was linked without errors and is ready for use, and GL.FALSE otherwise. It - can be queried by calling GetProgramiv with arguments program and - GL.LINK_STATUS. - - As a result of a successful link operation, all active user-defined - uniform variables belonging to program will be initialized to 0, and each - of the program object's active uniform variables will be assigned a - location that can be queried by calling GetUniformLocation. Also, any - active user-defined attribute variables that have not been bound to a - generic vertex attribute index will be bound to one at this time. - - Linking of a program object can fail for a number of reasons as specified - in the OpenGL Shading Language Specification. The following lists some of - the conditions that will cause a link error. - - - The number of active attribute variables supported by the - implementation has been exceeded. - - - The storage limit for uniform variables has been exceeded. - - - The number of active uniform variables supported by the implementation - has been exceeded. - - - The main function is missing for the vertex shader or the fragment - shader. - - - A varying variable actually used in the fragment shader is not - declared in the same way (or is not declared at all) in the vertex - shader. - - - A reference to a function or variable name is unresolved. - - - A shared global is declared with two different types or two different - initial values. - - - One or more of the attached shader objects has not been successfully - compiled. - - - Binding a generic attribute matrix caused some rows of the matrix to - fall outside the allowed maximum of GL.MAX_VERTEX_ATTRIBS. - - - Not enough contiguous vertex attribute slots could be found to bind - attribute matrices. - - When a program object has been successfully linked, the program object can - be made part of current state by calling UseProgram. Whether or not the - link operation was successful, the program object's information log will - be overwritten. The information log can be retrieved by calling - GetProgramInfoLog. - - LinkProgram will also install the generated executables as part of the - current rendering state if the link operation was successful and the - specified program object is already currently in use as a result of a - previous call to UseProgram. If the program object currently in use is - relinked unsuccessfully, its link status will be set to GL.FALSE , but the - executables and associated state will remain part of the current state - until a subsequent call to UseProgram removes it from use. After it is - removed from use, it cannot be made part of current state until it has - been successfully relinked. - - If program contains shader objects of type GL.VERTEX_SHADER but does not - contain shader objects of type GL.FRAGMENT_SHADER, the vertex shader will - be linked against the implicit interface for fixed functionality fragment - processing. Similarly, if program contains shader objects of type - GL.FRAGMENT_SHADER but it does not contain shader objects of type - GL.VERTEX_SHADER, the fragment shader will be linked against the implicit - interface for fixed functionality vertex processing. - - The program object's information log is updated and the program is - generated at the time of the link operation. After the link operation, - applications are free to modify attached shader objects, compile attached - shader objects, detach shader objects, delete shader objects, and attach - additional shader objects. None of these operations affects the - information log or the program that is part of the program object. - - If the link operation is unsuccessful, any information about a previous - link operation on program is lost (a failed link does not restore the - old state of program). Certain information can still be retrieved - from program even after an unsuccessful link operation. See for instance - GetActiveAttrib and GetActiveUniform. - - Error GL.INVALID_VALUE is generated if program is not a value generated by - OpenGL. GL.INVALID_OPERATION is generated if program is not a program - object. GL.INVALID_OPERATION is generated if LinkProgram is executed - between the execution of Begin and the corresponding execution of End. - - {{funcSince . "2.0+"}} - `, -}, { - name: "MultMatrixd", - before: ` - if len(m) != 16 { - panic("parameter m must have length 16 for the 4x4 matrix") - } - `, - doc: ` - multiplies the current matrix with the provided matrix. - - The m parameter must hold 16 consecutive elements of a 4x4 column-major matrix. - - The current matrix is determined by the current matrix mode (see - MatrixMode). It is either the projection matrix, modelview matrix, or the - texture matrix. - - For example, if the current matrix is C and the coordinates to be transformed - are v = (v[0], v[1], v[2], v[3]), then the current transformation is C × v, or - - c[0] c[4] c[8] c[12] v[0] - c[1] c[5] c[9] c[13] v[1] - c[2] c[6] c[10] c[14] X v[2] - c[3] c[7] c[11] c[15] v[3] - - Calling MultMatrix with an argument of m = m[0], m[1], ..., m[15] - replaces the current transformation with (C X M) x v, or - - c[0] c[4] c[8] c[12] m[0] m[4] m[8] m[12] v[0] - c[1] c[5] c[9] c[13] m[1] m[5] m[9] m[13] v[1] - c[2] c[6] c[10] c[14] X m[2] m[6] m[10] m[14] X v[2] - c[3] c[7] c[11] c[15] m[3] m[7] m[11] m[15] v[3] - - Where 'X' denotes matrix multiplication, and v is represented as a 4x1 matrix. - - While the elements of the matrix may be specified with single or double - precision, the GL may store or operate on these values in less-than-single - precision. - - In many computer languages, 4×4 arrays are represented in row-major - order. The transformations just described represent these matrices in - column-major order. The order of the multiplication is important. For - example, if the current transformation is a rotation, and MultMatrix is - called with a translation matrix, the translation is done directly on the - coordinates to be transformed, while the rotation is done on the results - of that translation. - - GL.INVALID_OPERATION is generated if MultMatrix is executed between the - execution of Begin and the corresponding execution of End. - `, -}, { - name: "MultMatrixf", - copy: "MultMatrixd", -}, { - name: "ShaderSource", - params: paramTweaks{ - "glstring": {rename: "source", retype: "...string", replace: true}, - "length": {omit: true}, - "count": {omit: true}, - }, - before: ` - count := len(source) - length := make([]int32, count) - source_c := make([]unsafe.Pointer, count) - for i, src := range source { - length[i] = int32(len(src)) - if len(src) > 0 { - source_c[i] = *(*unsafe.Pointer)(unsafe.Pointer(&src)) - } else { - source_c[i] = unsafe.Pointer(uintptr(0)) - } - } - `, - doc: ` - sets the source code in shader to the provided source code. Any source - code previously stored in the shader object is completely replaced. - - Error GL.INVALID_VALUE is generated if shader is not a value generated by - OpenGL. GL.INVALID_OPERATION is generated if shader is not a shader - object. GL.INVALID_VALUE is generated if count is less than 0. - GL.INVALID_OPERATION is generated if ShaderSource is executed between the - execution of Begin and the corresponding execution of End. - - {{funcSince . "2.0+"}} - `, -}, { - name: "Uniform1f", - copy: "Uniform4ui", -}, { - name: "Uniform2f", - copy: "Uniform4ui", -}, { - name: "Uniform3f", - copy: "Uniform4ui", -}, { - name: "Uniform4f", - copy: "Uniform4ui", -}, { - name: "Uniform1i", - copy: "Uniform4ui", -}, { - name: "Uniform2i", - copy: "Uniform4ui", -}, { - name: "Uniform3i", - copy: "Uniform4ui", -}, { - name: "Uniform4i", - copy: "Uniform4ui", -}, { - name: "Uniform1ui", - copy: "Uniform4ui", -}, { - name: "Uniform2ui", - copy: "Uniform4ui", -}, { - name: "Uniform3ui", - copy: "Uniform4ui", -}, { - name: "Uniform4ui", - doc: ` - modifies the value of a single uniform variable. - The location of the uniform variable to be modified is specified by - location, which should be a value returned by GetUniformLocation. - {{.GoName}} operates on the program object that was made part of - current state by calling UseProgram. - - The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the - uniform variable specified by location using the values passed as - arguments. The number specified in the function should match the number of - components in the data type of the specified uniform variable (1 for - float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). - The suffix f indicates that floating-point values are being passed; the - suffix i indicates that integer values are being passed; the suffix ui - indicates that unsigned integer values are being passed, and this type - should also match the data type of the specified uniform variable. The i - variants of this function should be used to provide values for uniform - variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui - variants of this function should be used to provide values for uniform - variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of - these. The f variants should be used to provide values for uniform - variables of type float, vec2, vec3, vec4, or arrays of these. Either the - i, ui or f variants may be used to provide values for uniform variables of - type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable - will be set to false if the input value is 0 or 0.0f, and it will be set - to true otherwise. - - Uniform1i and Uniform1iv are the only two functions that may be used to - load uniform variables defined as sampler types. Loading samplers with any - other function will result in a GL.INVALID_OPERATION error. - - All active uniform variables defined in a program object are initialized - to 0 when the program object is linked successfully. They retain the - values assigned to them by a call to Uniform* until the next successful - link operation occurs on the program object, when they are once again - initialized to 0. - `, -}, { - name: "Uniform1fv", - copy: "Uniform4uiv", -}, { - name: "Uniform2fv", - copy: "Uniform4uiv", -}, { - name: "Uniform3fv", - copy: "Uniform4uiv", -}, { - name: "Uniform4fv", - copy: "Uniform4uiv", -}, { - name: "Uniform1iv", - copy: "Uniform4uiv", -}, { - name: "Uniform2iv", - copy: "Uniform4uiv", -}, { - name: "Uniform3iv", - copy: "Uniform4uiv", -}, { - name: "Uniform4iv", - copy: "Uniform4uiv", -}, { - name: "Uniform1uiv", - copy: "Uniform4uiv", -}, { - name: "Uniform2uiv", - copy: "Uniform4uiv", -}, { - name: "Uniform3uiv", - copy: "Uniform4uiv", -}, { - name: "Uniform4uiv", - params: paramTweaks{ - "count": {omit: true}, - }, - before: ` - if len(value) == 0 { - return - } {{with $n := substr .GoName 7 8}}{{if ne $n "1"}} - if len(value)%{{$n}} != 0 { - panic("invalid value length for {{$.GoName}}") - } - count := len(value)/{{$n}} - {{else}} - count := len(value) - {{end}}{{end}} - `, - doc: ` - modifies the value of a uniform variable or a uniform - variable array. The location of the uniform variable to be modified is - specified by location, which should be a value returned by GetUniformLocation. - {{.GoName}} operates on the program object that was made part of - current state by calling UseProgram. - - The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single - uniform variable or a uniform variable array. These functions receive a - slice with the values to be loaded into a uniform variable or a uniform - variable array. A slice with length 1 should be used if modifying the value - of a single uniform variable, and a length of 1 or greater can be used to - modify an entire array or part of an array. When loading n elements - starting at an arbitrary position m in a uniform variable array, elements - m + n - 1 in the array will be replaced with the new values. If m + n - 1 - is larger than the size of the uniform variable array, values for all - array elements beyond the end of the array will be ignored. The number - specified in the name of the command indicates the number of components - for each element in value, and it should match the number of components in - the data type of the specified uniform variable (1 for float, int, bool; - 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name - of the command must match the data type for the specified uniform variable - as described for Uniform{1|2|3|4}{f|i|ui}. - - Uniform1i and Uniform1iv are the only two functions that may be used to - load uniform variables defined as sampler types. Loading samplers with any - other function will result in a GL.INVALID_OPERATION error. - - All active uniform variables defined in a program object are initialized - to 0 when the program object is linked successfully. They retain the - values assigned to them by a call to Uniform* until the next successful - link operation occurs on the program object, when they are once again - initialized to 0. - `, -}, { - name: "UniformMatrix2fv", - copy: "UniformMatrix4x3fv", -}, { - name: "UniformMatrix2x3fv", - copy: "UniformMatrix4x3fv", -}, { - name: "UniformMatrix2x4fv", - copy: "UniformMatrix4x3fv", -}, { - name: "UniformMatrix3fv", - copy: "UniformMatrix4x3fv", -}, { - name: "UniformMatrix3x2fv", - copy: "UniformMatrix4x3fv", -}, { - name: "UniformMatrix3x4fv", - copy: "UniformMatrix4x3fv", -}, { - name: "UniformMatrix4fv", - copy: "UniformMatrix4x3fv", -}, { - name: "UniformMatrix4x2fv", - copy: "UniformMatrix4x3fv", -}, { - name: "UniformMatrix4x3fv", - params: paramTweaks{ - "count": {omit: true}, - }, - before: ` - if len(value) == 0 { - return - } {{with $n := substr $.GoName 13 14}}{{with $m := substr $.GoName 15 16}}{{if eq $m "v"}} - if len(value)%({{$n}}*{{$n}}) != 0 { - panic("invalid value length for {{$.GoName}}") - } - count := len(value)/({{$n}}*{{$n}}) - {{else}} - if len(value)%({{$n}}*{{$m}}) != 0 { - panic("invalid value length for {{$.GoName}}") - } - count := len(value)/({{$n}}*{{$m}}) - {{end}}{{end}}{{end}} - `, - doc: ` - modifies the value of a uniform variable or a uniform - variable array. The location of the uniform variable to be modified is - specified by location, which should be a value returned by GetUniformLocation. - {{.GoName}} operates on the program object that was made part of - current state by calling UseProgram. - - The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to - modify a matrix or an array of matrices. The numbers in the function name - are interpreted as the dimensionality of the matrix. The number 2 - indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 - values), and the number 4 indicates a 4x4 matrix (16 values). Non-square - matrix dimensionality is explicit, with the first number representing the - number of columns and the second number representing the number of rows. - For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 - values). The length of the provided slice must be a multiple of the number - of values per matrix, to update one or more consecutive matrices. - - If transpose is false, each matrix is assumed to be supplied in column - major order. If transpose is true, each matrix is assumed to be supplied - in row major order. - - All active uniform variables defined in a program object are initialized - to 0 when the program object is linked successfully. They retain the - values assigned to them by a call to Uniform* until the next successful - link operation occurs on the program object, when they are once again - initialized to 0. - `, -}, { - name: "UseProgram", - doc: ` - installs the program object specified by program as part of - current rendering state. One or more executables are created in a program - object by successfully attaching shader objects to it with AttachShader, - successfully compiling the shader objects with CompileShader, and - successfully linking the program object with LinkProgram. - - A program object will contain an executable that will run on the vertex - processor if it contains one or more shader objects of type - GL.VERTEX_SHADER that have been successfully compiled and linked. - Similarly, a program object will contain an executable that will run on - the fragment processor if it contains one or more shader objects of type - GL.FRAGMENT_SHADER that have been successfully compiled and linked. - - Successfully installing an executable on a programmable processor will - cause the corresponding fixed functionality of OpenGL to be disabled. - Specifically, if an executable is installed on the vertex processor, the - OpenGL fixed functionality will be disabled as follows. - - - The modelview matrix is not applied to vertex coordinates. - - - The projection matrix is not applied to vertex coordinates. - - - The texture matrices are not applied to texture coordinates. - - - Normals are not transformed to eye coordinates. - - - Normals are not rescaled or normalized. - - - Normalization of GL.AUTO_NORMAL evaluated normals is not performed. - - - Texture coordinates are not generated automatically. - - - Per-vertex lighting is not performed. - - - Color material computations are not performed. - - - Color index lighting is not performed. - - - This list also applies when setting the current raster position. - - The executable that is installed on the vertex processor is expected to - implement any or all of the desired functionality from the preceding list. - Similarly, if an executable is installed on the fragment processor, the - OpenGL fixed functionality will be disabled as follows. - - - Texture environment and texture functions are not applied. - - - Texture application is not applied. - - - Color sum is not applied. - - - Fog is not applied. - - Again, the fragment shader that is installed is expected to implement any - or all of the desired functionality from the preceding list. - - While a program object is in use, applications are free to modify attached - shader objects, compile attached shader objects, attach additional shader - objects, and detach or delete shader objects. None of these operations - will affect the executables that are part of the current state. However, - relinking the program object that is currently in use will install the - program object as part of the current rendering state if the link - operation was successful (see LinkProgram). If the program object - currently in use is relinked unsuccessfully, its link status will be set - to GL.FALSE, but the executables and associated state will remain part of - the current state until a subsequent call to UseProgram removes it from - use. After it is removed from use, it cannot be made part of current state - until it has been successfully relinked. - - If program contains shader objects of type GL.VERTEX_SHADER but it does - not contain shader objects of type GL.FRAGMENT_SHADER, an executable will - be installed on the vertex processor, but fixed functionality will be used - for fragment processing. Similarly, if program contains shader objects of - type GL.FRAGMENT_SHADER but it does not contain shader objects of type - GL.VERTEX_SHADER, an executable will be installed on the fragment - processor, but fixed functionality will be used for vertex processing. If - program is 0, the programmable processors will be disabled, and fixed - functionality will be used for both vertex and fragment processing. - - While a program object is in use, the state that controls the disabled - fixed functionality may also be updated using the normal OpenGL calls. - - Like display lists and texture objects, the name space for program objects - may be shared across a set of contexts, as long as the server sides of the - contexts share the same address space. If the name space is shared across - contexts, any attached objects and the data associated with those attached - objects are shared as well. - - Applications are responsible for providing the synchronization across API - calls when objects are accessed from different execution threads. - - Error GL.INVALID_VALUE is generated if program is neither 0 nor a value - generated by OpenGL. GL.INVALID_OPERATION is generated if program is not - a program object. GL.INVALID_OPERATION is generated if program could not - be made part of current state. GL.INVALID_OPERATION is generated if - UseProgram is executed between the execution of Begin and the - corresponding execution of End. - - {{funcSince . "2.0+"}} - `, -}, { - name: "VertexAttribPointer", - params: paramTweaks{ - "pointer": {rename: "offset", retype: "uintptr"}, - }, - before: ` - offset_ptr := unsafe.Pointer(offset) - `, - doc: ` - specifies the location and data format of the array - of generic vertex attributes at index to use when rendering. size - specifies the number of components per attribute and must be 1, 2, 3, or - 4. type specifies the data type of each component, and stride specifies - the byte stride from one attribute to the next, allowing vertices and - attributes to be packed into a single array or stored in separate arrays. - normalized indicates whether the values stored in an integer format are - to be mapped to the range [-1,1] (for signed values) or [0,1] - (for unsigned values) when they are accessed and converted to floating - point; otherwise, values will be converted to floats directly without - normalization. offset is a byte offset into the buffer object's data - store, which must be bound to the GL.ARRAY_BUFFER target with BindBuffer. - - The buffer object binding (GL.ARRAY_BUFFER_BINDING) is saved as - generic vertex attribute array client-side state - (GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING) for the provided index. - - To enable and disable a generic vertex attribute array, call - EnableVertexAttribArray and DisableVertexAttribArray with index. If - enabled, the generic vertex attribute array is used when DrawArrays or - DrawElements is called. Each generic vertex attribute array is initially - disabled. - - VertexAttribPointer is typically implemented on the client side. - - Error GL.INVALID_ENUM is generated if type is not an accepted value. - GL.INVALID_VALUE is generated if index is greater than or equal to - GL.MAX_VERTEX_ATTRIBS. GL.INVALID_VALUE is generated if size is not 1, 2, - 3, or 4. GL.INVALID_VALUE is generated if stride is negative. - `, -}} - -// vim:ts=8:tw=90:noet diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/gengl/gl.xml b/Godeps/_workspace/src/github.com/obscuren/qml/gl/gengl/gl.xml deleted file mode 100644 index d5c9202372..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/gengl/gl.xml +++ /dev/null @@ -1,43891 +0,0 @@ - - - -Copyright (c) 2013-2014 The Khronos Group Inc. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and/or associated documentation files (the -"Materials"), to deal in the Materials without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Materials, and to -permit persons to whom the Materials are furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Materials. - -THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. - ------------------------------------------------------------------------- - -This file, gl.xml, is the OpenGL and OpenGL API Registry. The older -".spec" file format has been retired and will no longer be updated with -new extensions and API versions. The canonical version of the registry, -together with documentation, schema, and Python generator scripts used -to generate C header files for OpenGL and OpenGL ES, can always be found -in the Khronos Registry at - http://www.opengl.org/registry/ - - - - - - #include <stddef.h> - #include <KHR/khrplatform.h> - #ifndef GLEXT_64_TYPES_DEFINED -/* This code block is duplicated in glxext.h, so must be protected */ -#define GLEXT_64_TYPES_DEFINED -/* Define int32_t, int64_t, and uint64_t types for UST/MSC */ -/* (as used in the GL_EXT_timer_query extension). */ -#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L -#include <inttypes.h> -#elif defined(__sun__) || defined(__digital__) -#include <inttypes.h> -#if defined(__STDC__) -#if defined(__arch64__) || defined(_LP64) -typedef long int int64_t; -typedef unsigned long int uint64_t; -#else -typedef long long int int64_t; -typedef unsigned long long int uint64_t; -#endif /* __arch64__ */ -#endif /* __STDC__ */ -#elif defined( __VMS ) || defined(__sgi) -#include <inttypes.h> -#elif defined(__SCO__) || defined(__USLC__) -#include <stdint.h> -#elif defined(__UNIXOS2__) || defined(__SOL64__) -typedef long int int32_t; -typedef long long int int64_t; -typedef unsigned long long int uint64_t; -#elif defined(_WIN32) && defined(__GNUC__) -#include <stdint.h> -#elif defined(_WIN32) -typedef __int32 int32_t; -typedef __int64 int64_t; -typedef unsigned __int64 uint64_t; -#else -/* Fallback if nothing above works */ -#include <inttypes.h> -#endif -#endif - - typedef unsigned int GLenum; - typedef unsigned char GLboolean; - typedef unsigned int GLbitfield; - typedef void GLvoid; - typedef signed char GLbyte; - typedef short GLshort; - typedef int GLint; - typedef int GLclampx; - typedef unsigned char GLubyte; - typedef unsigned short GLushort; - typedef unsigned int GLuint; - typedef int GLsizei; - typedef float GLfloat; - typedef float GLclampf; - typedef double GLdouble; - typedef double GLclampd; - typedef void *GLeglImageOES; - typedef char GLchar; - typedef char GLcharARB; - #ifdef __APPLE__ -typedef void *GLhandleARB; -#else -typedef unsigned int GLhandleARB; -#endif - typedef unsigned short GLhalfARB; - typedef unsigned short GLhalf; - typedef GLint GLfixed; - typedef ptrdiff_t GLintptr; - typedef ptrdiff_t GLsizeiptr; - typedef int64_t GLint64; - typedef uint64_t GLuint64; - typedef ptrdiff_t GLintptrARB; - typedef ptrdiff_t GLsizeiptrARB; - typedef int64_t GLint64EXT; - typedef uint64_t GLuint64EXT; - typedef struct __GLsync *GLsync; - struct _cl_context; - struct _cl_event; - typedef void ( *GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); - typedef void ( *GLDEBUGPROCARB)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); - typedef void ( *GLDEBUGPROCKHR)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); - - typedef khronos_int32_t GLclampx; - - typedef khronos_int8_t GLbyte; - typedef khronos_uint8_t GLubyte; - typedef khronos_float_t GLfloat; - typedef khronos_float_t GLclampf; - typedef khronos_int32_t GLfixed; - typedef khronos_int64_t GLint64; - typedef khronos_uint64_t GLuint64; - typedef khronos_intptr_t GLintptr; - typedef khronos_ssize_t GLsizeiptr; - - typedef khronos_int8_t GLbyte; - typedef khronos_uint8_t GLubyte; - typedef khronos_float_t GLfloat; - typedef khronos_float_t GLclampf; - typedef khronos_int32_t GLfixed; - typedef khronos_int64_t GLint64; - typedef khronos_uint64_t GLuint64; - typedef khronos_int64_t GLint64EXT; - typedef khronos_uint64_t GLuint64EXT; - typedef khronos_intptr_t GLintptr; - typedef khronos_ssize_t GLsizeiptr; - - - typedef void ( *GLDEBUGPROCAMD)(GLuint id,GLenum category,GLenum severity,GLsizei length,const GLchar *message,void *userParam); - typedef unsigned short GLhalfNV; - typedef GLintptr GLvdpauSurfaceNV; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void glAccum - GLenum op - GLfloat value - - - - void glAccumxOES - GLenum op - GLfixed value - - - void glActiveProgramEXT - GLuint program - - - void glActiveShaderProgram - GLuint pipeline - GLuint program - - - void glActiveShaderProgramEXT - GLuint pipeline - GLuint program - - - void glActiveStencilFaceEXT - GLenum face - - - - void glActiveTexture - GLenum texture - - - - void glActiveTextureARB - GLenum texture - - - - - void glActiveVaryingNV - GLuint program - const GLchar *name - - - void glAlphaFragmentOp1ATI - GLenum op - GLuint dst - GLuint dstMod - GLuint arg1 - GLuint arg1Rep - GLuint arg1Mod - - - void glAlphaFragmentOp2ATI - GLenum op - GLuint dst - GLuint dstMod - GLuint arg1 - GLuint arg1Rep - GLuint arg1Mod - GLuint arg2 - GLuint arg2Rep - GLuint arg2Mod - - - void glAlphaFragmentOp3ATI - GLenum op - GLuint dst - GLuint dstMod - GLuint arg1 - GLuint arg1Rep - GLuint arg1Mod - GLuint arg2 - GLuint arg2Rep - GLuint arg2Mod - GLuint arg3 - GLuint arg3Rep - GLuint arg3Mod - - - void glAlphaFunc - GLenum func - GLfloat ref - - - - void glAlphaFuncQCOM - GLenum func - GLclampf ref - - - void glAlphaFuncx - GLenum func - GLfixed ref - - - void glAlphaFuncxOES - GLenum func - GLfixed ref - - - void glApplyTextureEXT - GLenum mode - - - GLboolean glAreProgramsResidentNV - GLsizei n - const GLuint *programs - GLboolean *residences - - - - GLboolean glAreTexturesResident - GLsizei n - const GLuint *textures - GLboolean *residences - - - - GLboolean glAreTexturesResidentEXT - GLsizei n - const GLuint *textures - GLboolean *residences - - - - void glArrayElement - GLint i - - - void glArrayElementEXT - GLint i - - - - void glArrayObjectATI - GLenum array - GLint size - GLenum type - GLsizei stride - GLuint buffer - GLuint offset - - - void glAsyncMarkerSGIX - GLuint marker - - - void glAttachObjectARB - GLhandleARB containerObj - GLhandleARB obj - - - - void glAttachShader - GLuint program - GLuint shader - - - void glBegin - GLenum mode - - - - void glBeginConditionalRender - GLuint id - GLenum mode - - - void glBeginConditionalRenderNV - GLuint id - GLenum mode - - - - - void glBeginConditionalRenderNVX - GLuint id - - - void glBeginFragmentShaderATI - - - void glBeginOcclusionQueryNV - GLuint id - - - void glBeginPerfMonitorAMD - GLuint monitor - - - void glBeginPerfQueryINTEL - GLuint queryHandle - - - void glBeginQuery - GLenum target - GLuint id - - - - void glBeginQueryARB - GLenum target - GLuint id - - - - void glBeginQueryEXT - GLenum target - GLuint id - - - void glBeginQueryIndexed - GLenum target - GLuint index - GLuint id - - - void glBeginTransformFeedback - GLenum primitiveMode - - - void glBeginTransformFeedbackEXT - GLenum primitiveMode - - - - void glBeginTransformFeedbackNV - GLenum primitiveMode - - - - void glBeginVertexShaderEXT - - - void glBeginVideoCaptureNV - GLuint video_capture_slot - - - void glBindAttribLocation - GLuint program - GLuint index - const GLchar *name - - - void glBindAttribLocationARB - GLhandleARB programObj - GLuint index - const GLcharARB *name - - - - void glBindBuffer - GLenum target - GLuint buffer - - - void glBindBufferARB - GLenum target - GLuint buffer - - - - void glBindBufferBase - GLenum target - GLuint index - GLuint buffer - - - void glBindBufferBaseEXT - GLenum target - GLuint index - GLuint buffer - - - - void glBindBufferBaseNV - GLenum target - GLuint index - GLuint buffer - - - - void glBindBufferOffsetEXT - GLenum target - GLuint index - GLuint buffer - GLintptr offset - - - void glBindBufferOffsetNV - GLenum target - GLuint index - GLuint buffer - GLintptr offset - - - - void glBindBufferRange - GLenum target - GLuint index - GLuint buffer - GLintptr offset - GLsizeiptr size - - - void glBindBufferRangeEXT - GLenum target - GLuint index - GLuint buffer - GLintptr offset - GLsizeiptr size - - - - void glBindBufferRangeNV - GLenum target - GLuint index - GLuint buffer - GLintptr offset - GLsizeiptr size - - - - void glBindBuffersBase - GLenum target - GLuint first - GLsizei count - const GLuint *buffers - - - void glBindBuffersRange - GLenum target - GLuint first - GLsizei count - const GLuint *buffers - const GLintptr *offsets - const GLsizeiptr *sizes - - - void glBindFragDataLocation - GLuint program - GLuint color - const GLchar *name - - - void glBindFragDataLocationEXT - GLuint program - GLuint color - const GLchar *name - - - - void glBindFragDataLocationIndexed - GLuint program - GLuint colorNumber - GLuint index - const GLchar *name - - - void glBindFragmentShaderATI - GLuint id - - - void glBindFramebuffer - GLenum target - GLuint framebuffer - - - - void glBindFramebufferEXT - GLenum target - GLuint framebuffer - - - - void glBindFramebufferOES - GLenum target - GLuint framebuffer - - - void glBindImageTexture - GLuint unit - GLuint texture - GLint level - GLboolean layered - GLint layer - GLenum access - GLenum format - - - void glBindImageTextureEXT - GLuint index - GLuint texture - GLint level - GLboolean layered - GLint layer - GLenum access - GLint format - - - void glBindImageTextures - GLuint first - GLsizei count - const GLuint *textures - - - GLuint glBindLightParameterEXT - GLenum light - GLenum value - - - GLuint glBindMaterialParameterEXT - GLenum face - GLenum value - - - void glBindMultiTextureEXT - GLenum texunit - GLenum target - GLuint texture - - - GLuint glBindParameterEXT - GLenum value - - - void glBindProgramARB - GLenum target - GLuint program - - - - void glBindProgramNV - GLenum target - GLuint id - - - - - void glBindProgramPipeline - GLuint pipeline - - - void glBindProgramPipelineEXT - GLuint pipeline - - - void glBindRenderbuffer - GLenum target - GLuint renderbuffer - - - - void glBindRenderbufferEXT - GLenum target - GLuint renderbuffer - - - - void glBindRenderbufferOES - GLenum target - GLuint renderbuffer - - - void glBindSampler - GLuint unit - GLuint sampler - - - void glBindSamplers - GLuint first - GLsizei count - const GLuint *samplers - - - GLuint glBindTexGenParameterEXT - GLenum unit - GLenum coord - GLenum value - - - void glBindTexture - GLenum target - GLuint texture - - - - void glBindTextureEXT - GLenum target - GLuint texture - - - - - void glBindTextureUnit - GLuint unit - GLuint texture - - - GLuint glBindTextureUnitParameterEXT - GLenum unit - GLenum value - - - void glBindTextures - GLuint first - GLsizei count - const GLuint *textures - - - void glBindTransformFeedback - GLenum target - GLuint id - - - void glBindTransformFeedbackNV - GLenum target - GLuint id - - - void glBindVertexArray - GLuint array - - - - void glBindVertexArrayAPPLE - GLuint array - - - void glBindVertexArrayOES - GLuint array - - - - void glBindVertexBuffer - GLuint bindingindex - GLuint buffer - GLintptr offset - GLsizei stride - - - void glBindVertexBuffers - GLuint first - GLsizei count - const GLuint *buffers - const GLintptr *offsets - const GLsizei *strides - - - void glBindVertexShaderEXT - GLuint id - - - void glBindVideoCaptureStreamBufferNV - GLuint video_capture_slot - GLuint stream - GLenum frame_region - GLintptrARB offset - - - void glBindVideoCaptureStreamTextureNV - GLuint video_capture_slot - GLuint stream - GLenum frame_region - GLenum target - GLuint texture - - - void glBinormal3bEXT - GLbyte bx - GLbyte by - GLbyte bz - - - - void glBinormal3bvEXT - const GLbyte *v - - - void glBinormal3dEXT - GLdouble bx - GLdouble by - GLdouble bz - - - - void glBinormal3dvEXT - const GLdouble *v - - - void glBinormal3fEXT - GLfloat bx - GLfloat by - GLfloat bz - - - - void glBinormal3fvEXT - const GLfloat *v - - - void glBinormal3iEXT - GLint bx - GLint by - GLint bz - - - - void glBinormal3ivEXT - const GLint *v - - - void glBinormal3sEXT - GLshort bx - GLshort by - GLshort bz - - - - void glBinormal3svEXT - const GLshort *v - - - void glBinormalPointerEXT - GLenum type - GLsizei stride - const void *pointer - - - void glBitmap - GLsizei width - GLsizei height - GLfloat xorig - GLfloat yorig - GLfloat xmove - GLfloat ymove - const GLubyte *bitmap - - - - - void glBitmapxOES - GLsizei width - GLsizei height - GLfixed xorig - GLfixed yorig - GLfixed xmove - GLfixed ymove - const GLubyte *bitmap - - - void glBlendBarrierKHR - - - void glBlendBarrierNV - - - void glBlendColor - GLfloat red - GLfloat green - GLfloat blue - GLfloat alpha - - - - void glBlendColorEXT - GLfloat red - GLfloat green - GLfloat blue - GLfloat alpha - - - - - void glBlendColorxOES - GLfixed red - GLfixed green - GLfixed blue - GLfixed alpha - - - void glBlendEquation - GLenum mode - - - - void glBlendEquationEXT - GLenum mode - - - - - void glBlendEquationIndexedAMD - GLuint buf - GLenum mode - - - - void glBlendEquationOES - GLenum mode - - - void glBlendEquationSeparate - GLenum modeRGB - GLenum modeAlpha - - - - void glBlendEquationSeparateEXT - GLenum modeRGB - GLenum modeAlpha - - - - - void glBlendEquationSeparateIndexedAMD - GLuint buf - GLenum modeRGB - GLenum modeAlpha - - - - void glBlendEquationSeparateOES - GLenum modeRGB - GLenum modeAlpha - - - void glBlendEquationSeparatei - GLuint buf - GLenum modeRGB - GLenum modeAlpha - - - void glBlendEquationSeparateiARB - GLuint buf - GLenum modeRGB - GLenum modeAlpha - - - - void glBlendEquationSeparateiEXT - GLuint buf - GLenum modeRGB - GLenum modeAlpha - - - - void glBlendEquationi - GLuint buf - GLenum mode - - - void glBlendEquationiARB - GLuint buf - GLenum mode - - - - void glBlendEquationiEXT - GLuint buf - GLenum mode - - - - void glBlendFunc - GLenum sfactor - GLenum dfactor - - - - void glBlendFuncIndexedAMD - GLuint buf - GLenum src - GLenum dst - - - - void glBlendFuncSeparate - GLenum sfactorRGB - GLenum dfactorRGB - GLenum sfactorAlpha - GLenum dfactorAlpha - - - - void glBlendFuncSeparateEXT - GLenum sfactorRGB - GLenum dfactorRGB - GLenum sfactorAlpha - GLenum dfactorAlpha - - - - - void glBlendFuncSeparateINGR - GLenum sfactorRGB - GLenum dfactorRGB - GLenum sfactorAlpha - GLenum dfactorAlpha - - - - - void glBlendFuncSeparateIndexedAMD - GLuint buf - GLenum srcRGB - GLenum dstRGB - GLenum srcAlpha - GLenum dstAlpha - - - - void glBlendFuncSeparateOES - GLenum srcRGB - GLenum dstRGB - GLenum srcAlpha - GLenum dstAlpha - - - void glBlendFuncSeparatei - GLuint buf - GLenum srcRGB - GLenum dstRGB - GLenum srcAlpha - GLenum dstAlpha - - - void glBlendFuncSeparateiARB - GLuint buf - GLenum srcRGB - GLenum dstRGB - GLenum srcAlpha - GLenum dstAlpha - - - - void glBlendFuncSeparateiEXT - GLuint buf - GLenum srcRGB - GLenum dstRGB - GLenum srcAlpha - GLenum dstAlpha - - - - void glBlendFunci - GLuint buf - GLenum src - GLenum dst - - - void glBlendFunciARB - GLuint buf - GLenum src - GLenum dst - - - - void glBlendFunciEXT - GLuint buf - GLenum src - GLenum dst - - - - void glBlendParameteriNV - GLenum pname - GLint value - - - void glBlitFramebuffer - GLint srcX0 - GLint srcY0 - GLint srcX1 - GLint srcY1 - GLint dstX0 - GLint dstY0 - GLint dstX1 - GLint dstY1 - GLbitfield mask - GLenum filter - - - - void glBlitFramebufferANGLE - GLint srcX0 - GLint srcY0 - GLint srcX1 - GLint srcY1 - GLint dstX0 - GLint dstY0 - GLint dstX1 - GLint dstY1 - GLbitfield mask - GLenum filter - - - void glBlitFramebufferEXT - GLint srcX0 - GLint srcY0 - GLint srcX1 - GLint srcY1 - GLint dstX0 - GLint dstY0 - GLint dstX1 - GLint dstY1 - GLbitfield mask - GLenum filter - - - - - void glBlitFramebufferNV - GLint srcX0 - GLint srcY0 - GLint srcX1 - GLint srcY1 - GLint dstX0 - GLint dstY0 - GLint dstX1 - GLint dstY1 - GLbitfield mask - GLenum filter - - - - void glBlitNamedFramebuffer - GLuint readFramebuffer - GLuint drawFramebuffer - GLint srcX0 - GLint srcY0 - GLint srcX1 - GLint srcY1 - GLint dstX0 - GLint dstY0 - GLint dstX1 - GLint dstY1 - GLbitfield mask - GLenum filter - - - void glBufferAddressRangeNV - GLenum pname - GLuint index - GLuint64EXT address - GLsizeiptr length - - - void glBufferData - GLenum target - GLsizeiptr size - const void *data - GLenum usage - - - void glBufferDataARB - GLenum target - GLsizeiptrARB size - const void *data - GLenum usage - - - - void glBufferPageCommitmentARB - GLenum target - GLintptr offset - GLsizei size - GLboolean commit - - - void glBufferParameteriAPPLE - GLenum target - GLenum pname - GLint param - - - void glBufferStorage - GLenum target - GLsizeiptr size - const void *data - GLbitfield flags - - - void glBufferSubData - GLenum target - GLintptr offset - GLsizeiptr size - const void *data - - - void glBufferSubDataARB - GLenum target - GLintptrARB offset - GLsizeiptrARB size - const void *data - - - - void glCallList - GLuint list - - - - void glCallLists - GLsizei n - GLenum type - const void *lists - - - - GLenum glCheckFramebufferStatus - GLenum target - - - - GLenum glCheckFramebufferStatusEXT - GLenum target - - - - - GLenum glCheckFramebufferStatusOES - GLenum target - - - GLenum glCheckNamedFramebufferStatus - GLuint framebuffer - GLenum target - - - GLenum glCheckNamedFramebufferStatusEXT - GLuint framebuffer - GLenum target - - - void glClampColor - GLenum target - GLenum clamp - - - - void glClampColorARB - GLenum target - GLenum clamp - - - - - void glClear - GLbitfield mask - - - - void glClearAccum - GLfloat red - GLfloat green - GLfloat blue - GLfloat alpha - - - - void glClearAccumxOES - GLfixed red - GLfixed green - GLfixed blue - GLfixed alpha - - - void glClearBufferData - GLenum target - GLenum internalformat - GLenum format - GLenum type - const void *data - - - void glClearBufferSubData - GLenum target - GLenum internalformat - GLintptr offset - GLsizeiptr size - GLenum format - GLenum type - const void *data - - - void glClearBufferfi - GLenum buffer - GLint drawbuffer - GLfloat depth - GLint stencil - - - void glClearBufferfv - GLenum buffer - GLint drawbuffer - const GLfloat *value - - - void glClearBufferiv - GLenum buffer - GLint drawbuffer - const GLint *value - - - void glClearBufferuiv - GLenum buffer - GLint drawbuffer - const GLuint *value - - - void glClearColor - GLfloat red - GLfloat green - GLfloat blue - GLfloat alpha - - - - void glClearColorIiEXT - GLint red - GLint green - GLint blue - GLint alpha - - - - void glClearColorIuiEXT - GLuint red - GLuint green - GLuint blue - GLuint alpha - - - - void glClearColorx - GLfixed red - GLfixed green - GLfixed blue - GLfixed alpha - - - void glClearColorxOES - GLfixed red - GLfixed green - GLfixed blue - GLfixed alpha - - - void glClearDepth - GLdouble depth - - - - void glClearDepthdNV - GLdouble depth - - - - void glClearDepthf - GLfloat d - - - void glClearDepthfOES - GLclampf depth - - - - - void glClearDepthx - GLfixed depth - - - void glClearDepthxOES - GLfixed depth - - - void glClearIndex - GLfloat c - - - - void glClearNamedBufferData - GLuint buffer - GLenum internalformat - GLenum format - GLenum type - const void *data - - - void glClearNamedBufferDataEXT - GLuint buffer - GLenum internalformat - GLenum format - GLenum type - const void *data - - - void glClearNamedBufferSubData - GLuint buffer - GLenum internalformat - GLintptr offset - GLsizei size - GLenum format - GLenum type - const void *data - - - void glClearNamedBufferSubDataEXT - GLuint buffer - GLenum internalformat - GLsizeiptr offset - GLsizeiptr size - GLenum format - GLenum type - const void *data - - - void glClearNamedFramebufferfi - GLuint framebuffer - GLenum buffer - const GLfloat depth - GLint stencil - - - void glClearNamedFramebufferfv - GLuint framebuffer - GLenum buffer - GLint drawbuffer - const GLfloat *value - - - void glClearNamedFramebufferiv - GLuint framebuffer - GLenum buffer - GLint drawbuffer - const GLint *value - - - void glClearNamedFramebufferuiv - GLuint framebuffer - GLenum buffer - GLint drawbuffer - const GLuint *value - - - void glClearStencil - GLint s - - - - void glClearTexImage - GLuint texture - GLint level - GLenum format - GLenum type - const void *data - - - void glClearTexSubImage - GLuint texture - GLint level - GLint xoffset - GLint yoffset - GLint zoffset - GLsizei width - GLsizei height - GLsizei depth - GLenum format - GLenum type - const void *data - - - void glClientActiveTexture - GLenum texture - - - void glClientActiveTextureARB - GLenum texture - - - - void glClientActiveVertexStreamATI - GLenum stream - - - void glClientAttribDefaultEXT - GLbitfield mask - - - GLenum glClientWaitSync - GLsync sync - GLbitfield flags - GLuint64 timeout - - - GLenum glClientWaitSyncAPPLE - GLsync sync - GLbitfield flags - GLuint64 timeout - - - - void glClipControl - GLenum origin - GLenum depth - - - void glClipPlane - GLenum plane - const GLdouble *equation - - - - void glClipPlanef - GLenum p - const GLfloat *eqn - - - void glClipPlanefIMG - GLenum p - const GLfloat *eqn - - - void glClipPlanefOES - GLenum plane - const GLfloat *equation - - - - void glClipPlanex - GLenum plane - const GLfixed *equation - - - void glClipPlanexIMG - GLenum p - const GLfixed *eqn - - - void glClipPlanexOES - GLenum plane - const GLfixed *equation - - - void glColor3b - GLbyte red - GLbyte green - GLbyte blue - - - - void glColor3bv - const GLbyte *v - - - - void glColor3d - GLdouble red - GLdouble green - GLdouble blue - - - - void glColor3dv - const GLdouble *v - - - - void glColor3f - GLfloat red - GLfloat green - GLfloat blue - - - - void glColor3fVertex3fSUN - GLfloat r - GLfloat g - GLfloat b - GLfloat x - GLfloat y - GLfloat z - - - void glColor3fVertex3fvSUN - const GLfloat *c - const GLfloat *v - - - void glColor3fv - const GLfloat *v - - - - void glColor3hNV - GLhalfNV red - GLhalfNV green - GLhalfNV blue - - - - void glColor3hvNV - const GLhalfNV *v - - - - void glColor3i - GLint red - GLint green - GLint blue - - - - void glColor3iv - const GLint *v - - - - void glColor3s - GLshort red - GLshort green - GLshort blue - - - - void glColor3sv - const GLshort *v - - - - void glColor3ub - GLubyte red - GLubyte green - GLubyte blue - - - - void glColor3ubv - const GLubyte *v - - - - void glColor3ui - GLuint red - GLuint green - GLuint blue - - - - void glColor3uiv - const GLuint *v - - - - void glColor3us - GLushort red - GLushort green - GLushort blue - - - - void glColor3usv - const GLushort *v - - - - void glColor3xOES - GLfixed red - GLfixed green - GLfixed blue - - - void glColor3xvOES - const GLfixed *components - - - void glColor4b - GLbyte red - GLbyte green - GLbyte blue - GLbyte alpha - - - - void glColor4bv - const GLbyte *v - - - - void glColor4d - GLdouble red - GLdouble green - GLdouble blue - GLdouble alpha - - - - void glColor4dv - const GLdouble *v - - - - void glColor4f - GLfloat red - GLfloat green - GLfloat blue - GLfloat alpha - - - - void glColor4fNormal3fVertex3fSUN - GLfloat r - GLfloat g - GLfloat b - GLfloat a - GLfloat nx - GLfloat ny - GLfloat nz - GLfloat x - GLfloat y - GLfloat z - - - void glColor4fNormal3fVertex3fvSUN - const GLfloat *c - const GLfloat *n - const GLfloat *v - - - void glColor4fv - const GLfloat *v - - - - void glColor4hNV - GLhalfNV red - GLhalfNV green - GLhalfNV blue - GLhalfNV alpha - - - - void glColor4hvNV - const GLhalfNV *v - - - - void glColor4i - GLint red - GLint green - GLint blue - GLint alpha - - - - void glColor4iv - const GLint *v - - - - void glColor4s - GLshort red - GLshort green - GLshort blue - GLshort alpha - - - - void glColor4sv - const GLshort *v - - - - void glColor4ub - GLubyte red - GLubyte green - GLubyte blue - GLubyte alpha - - - - void glColor4ubVertex2fSUN - GLubyte r - GLubyte g - GLubyte b - GLubyte a - GLfloat x - GLfloat y - - - void glColor4ubVertex2fvSUN - const GLubyte *c - const GLfloat *v - - - void glColor4ubVertex3fSUN - GLubyte r - GLubyte g - GLubyte b - GLubyte a - GLfloat x - GLfloat y - GLfloat z - - - void glColor4ubVertex3fvSUN - const GLubyte *c - const GLfloat *v - - - void glColor4ubv - const GLubyte *v - - - - void glColor4ui - GLuint red - GLuint green - GLuint blue - GLuint alpha - - - - void glColor4uiv - const GLuint *v - - - - void glColor4us - GLushort red - GLushort green - GLushort blue - GLushort alpha - - - - void glColor4usv - const GLushort *v - - - - void glColor4x - GLfixed red - GLfixed green - GLfixed blue - GLfixed alpha - - - void glColor4xOES - GLfixed red - GLfixed green - GLfixed blue - GLfixed alpha - - - void glColor4xvOES - const GLfixed *components - - - void glColorFormatNV - GLint size - GLenum type - GLsizei stride - - - void glColorFragmentOp1ATI - GLenum op - GLuint dst - GLuint dstMask - GLuint dstMod - GLuint arg1 - GLuint arg1Rep - GLuint arg1Mod - - - void glColorFragmentOp2ATI - GLenum op - GLuint dst - GLuint dstMask - GLuint dstMod - GLuint arg1 - GLuint arg1Rep - GLuint arg1Mod - GLuint arg2 - GLuint arg2Rep - GLuint arg2Mod - - - void glColorFragmentOp3ATI - GLenum op - GLuint dst - GLuint dstMask - GLuint dstMod - GLuint arg1 - GLuint arg1Rep - GLuint arg1Mod - GLuint arg2 - GLuint arg2Rep - GLuint arg2Mod - GLuint arg3 - GLuint arg3Rep - GLuint arg3Mod - - - void glColorMask - GLboolean red - GLboolean green - GLboolean blue - GLboolean alpha - - - - void glColorMaskIndexedEXT - GLuint index - GLboolean r - GLboolean g - GLboolean b - GLboolean a - - - - void glColorMaski - GLuint index - GLboolean r - GLboolean g - GLboolean b - GLboolean a - - - void glColorMaskiEXT - GLuint index - GLboolean r - GLboolean g - GLboolean b - GLboolean a - - - - void glColorMaterial - GLenum face - GLenum mode - - - - void glColorP3ui - GLenum type - GLuint color - - - void glColorP3uiv - GLenum type - const GLuint *color - - - void glColorP4ui - GLenum type - GLuint color - - - void glColorP4uiv - GLenum type - const GLuint *color - - - void glColorPointer - GLint size - GLenum type - GLsizei stride - const void *pointer - - - void glColorPointerEXT - GLint size - GLenum type - GLsizei stride - GLsizei count - const void *pointer - - - void glColorPointerListIBM - GLint size - GLenum type - GLint stride - const void **pointer - GLint ptrstride - - - void glColorPointervINTEL - GLint size - GLenum type - const void **pointer - - - void glColorSubTable - GLenum target - GLsizei start - GLsizei count - GLenum format - GLenum type - const void *data - - - - - void glColorSubTableEXT - GLenum target - GLsizei start - GLsizei count - GLenum format - GLenum type - const void *data - - - - void glColorTable - GLenum target - GLenum internalformat - GLsizei width - GLenum format - GLenum type - const void *table - - - - - void glColorTableEXT - GLenum target - GLenum internalFormat - GLsizei width - GLenum format - GLenum type - const void *table - - - - void glColorTableParameterfv - GLenum target - GLenum pname - const GLfloat *params - - - - void glColorTableParameterfvSGI - GLenum target - GLenum pname - const GLfloat *params - - - - - void glColorTableParameteriv - GLenum target - GLenum pname - const GLint *params - - - - void glColorTableParameterivSGI - GLenum target - GLenum pname - const GLint *params - - - - - void glColorTableSGI - GLenum target - GLenum internalformat - GLsizei width - GLenum format - GLenum type - const void *table - - - - - void glCombinerInputNV - GLenum stage - GLenum portion - GLenum variable - GLenum input - GLenum mapping - GLenum componentUsage - - - - void glCombinerOutputNV - GLenum stage - GLenum portion - GLenum abOutput - GLenum cdOutput - GLenum sumOutput - GLenum scale - GLenum bias - GLboolean abDotProduct - GLboolean cdDotProduct - GLboolean muxSum - - - - void glCombinerParameterfNV - GLenum pname - GLfloat param - - - - void glCombinerParameterfvNV - GLenum pname - const GLfloat *params - - - - void glCombinerParameteriNV - GLenum pname - GLint param - - - - void glCombinerParameterivNV - GLenum pname - const GLint *params - - - - void glCombinerStageParameterfvNV - GLenum stage - GLenum pname - const GLfloat *params - - - void glCompileShader - GLuint shader - - - void glCompileShaderARB - GLhandleARB shaderObj - - - - void glCompileShaderIncludeARB - GLuint shader - GLsizei count - const GLchar *const*path - const GLint *length - - - void glCompressedMultiTexImage1DEXT - GLenum texunit - GLenum target - GLint level - GLenum internalformat - GLsizei width - GLint border - GLsizei imageSize - const void *bits - - - void glCompressedMultiTexImage2DEXT - GLenum texunit - GLenum target - GLint level - GLenum internalformat - GLsizei width - GLsizei height - GLint border - GLsizei imageSize - const void *bits - - - void glCompressedMultiTexImage3DEXT - GLenum texunit - GLenum target - GLint level - GLenum internalformat - GLsizei width - GLsizei height - GLsizei depth - GLint border - GLsizei imageSize - const void *bits - - - void glCompressedMultiTexSubImage1DEXT - GLenum texunit - GLenum target - GLint level - GLint xoffset - GLsizei width - GLenum format - GLsizei imageSize - const void *bits - - - void glCompressedMultiTexSubImage2DEXT - GLenum texunit - GLenum target - GLint level - GLint xoffset - GLint yoffset - GLsizei width - GLsizei height - GLenum format - GLsizei imageSize - const void *bits - - - void glCompressedMultiTexSubImage3DEXT - GLenum texunit - GLenum target - GLint level - GLint xoffset - GLint yoffset - GLint zoffset - GLsizei width - GLsizei height - GLsizei depth - GLenum format - GLsizei imageSize - const void *bits - - - void glCompressedTexImage1D - GLenum target - GLint level - GLenum internalformat - GLsizei width - GLint border - GLsizei imageSize - const void *data - - - - - void glCompressedTexImage1DARB - GLenum target - GLint level - GLenum internalformat - GLsizei width - GLint border - GLsizei imageSize - const void *data - - - - - void glCompressedTexImage2D - GLenum target - GLint level - GLenum internalformat - GLsizei width - GLsizei height - GLint border - GLsizei imageSize - const void *data - - - - - void glCompressedTexImage2DARB - GLenum target - GLint level - GLenum internalformat - GLsizei width - GLsizei height - GLint border - GLsizei imageSize - const void *data - - - - - void glCompressedTexImage3D - GLenum target - GLint level - GLenum internalformat - GLsizei width - GLsizei height - GLsizei depth - GLint border - GLsizei imageSize - const void *data - - - - - void glCompressedTexImage3DARB - GLenum target - GLint level - GLenum internalformat - GLsizei width - GLsizei height - GLsizei depth - GLint border - GLsizei imageSize - const void *data - - - - - void glCompressedTexImage3DOES - GLenum target - GLint level - GLenum internalformat - GLsizei width - GLsizei height - GLsizei depth - GLint border - GLsizei imageSize - const void *data - - - - void glCompressedTexSubImage1D - GLenum target - GLint level - GLint xoffset - GLsizei width - GLenum format - GLsizei imageSize - const void *data - - - - - void glCompressedTexSubImage1DARB - GLenum target - GLint level - GLint xoffset - GLsizei width - GLenum format - GLsizei imageSize - const void *data - - - - - void glCompressedTexSubImage2D - GLenum target - GLint level - GLint xoffset - GLint yoffset - GLsizei width - GLsizei height - GLenum format - GLsizei imageSize - const void *data - - - - - void glCompressedTexSubImage2DARB - GLenum target - GLint level - GLint xoffset - GLint yoffset - GLsizei width - GLsizei height - GLenum format - GLsizei imageSize - const void *data - - - - - void glCompressedTexSubImage3D - GLenum target - GLint level - GLint xoffset - GLint yoffset - GLint zoffset - GLsizei width - GLsizei height - GLsizei depth - GLenum format - GLsizei imageSize - const void *data - - - - - void glCompressedTexSubImage3DARB - GLenum target - GLint level - GLint xoffset - GLint yoffset - GLint zoffset - GLsizei width - GLsizei height - GLsizei depth - GLenum format - GLsizei imageSize - const void *data - - - - - void glCompressedTexSubImage3DOES - GLenum target - GLint level - GLint xoffset - GLint yoffset - GLint zoffset - GLsizei width - GLsizei height - GLsizei depth - GLenum format - GLsizei imageSize - const void *data - - - - void glCompressedTextureImage1DEXT - GLuint texture - GLenum target - GLint level - GLenum internalformat - GLsizei width - GLint border - GLsizei imageSize - const void *bits - - - void glCompressedTextureImage2DEXT - GLuint texture - GLenum target - GLint level - GLenum internalformat - GLsizei width - GLsizei height - GLint border - GLsizei imageSize - const void *bits - - - void glCompressedTextureImage3DEXT - GLuint texture - GLenum target - GLint level - GLenum internalformat - GLsizei width - GLsizei height - GLsizei depth - GLint border - GLsizei imageSize - const void *bits - - - void glCompressedTextureSubImage1D - GLuint texture - GLint level - GLint xoffset - GLsizei width - GLenum format - GLsizei imageSize - const void *data - - - void glCompressedTextureSubImage1DEXT - GLuint texture - GLenum target - GLint level - GLint xoffset - GLsizei width - GLenum format - GLsizei imageSize - const void *bits - - - void glCompressedTextureSubImage2D - GLuint texture - GLint level - GLint xoffset - GLint yoffset - GLsizei width - GLsizei height - GLenum format - GLsizei imageSize - const void *data - - - void glCompressedTextureSubImage2DEXT - GLuint texture - GLenum target - GLint level - GLint xoffset - GLint yoffset - GLsizei width - GLsizei height - GLenum format - GLsizei imageSize - const void *bits - - - void glCompressedTextureSubImage3D - GLuint texture - GLint level - GLint xoffset - GLint yoffset - GLint zoffset - GLsizei width - GLsizei height - GLsizei depth - GLenum format - GLsizei imageSize - const void *data - - - void glCompressedTextureSubImage3DEXT - GLuint texture - GLenum target - GLint level - GLint xoffset - GLint yoffset - GLint zoffset - GLsizei width - GLsizei height - GLsizei depth - GLenum format - GLsizei imageSize - const void *bits - - - void glConvolutionFilter1D - GLenum target - GLenum internalformat - GLsizei width - GLenum format - GLenum type - const void *image - - - - - void glConvolutionFilter1DEXT - GLenum target - GLenum internalformat - GLsizei width - GLenum format - GLenum type - const void *image - - - - - void glConvolutionFilter2D - GLenum target - GLenum internalformat - GLsizei width - GLsizei height - GLenum format - GLenum type - const void *image - - - - - void glConvolutionFilter2DEXT - GLenum target - GLenum internalformat - GLsizei width - GLsizei height - GLenum format - GLenum type - const void *image - - - - - void glConvolutionParameterf - GLenum target - GLenum pname - GLfloat params - - - - void glConvolutionParameterfEXT - GLenum target - GLenum pname - GLfloat params - - - - - void glConvolutionParameterfv - GLenum target - GLenum pname - const GLfloat *params - - - - void glConvolutionParameterfvEXT - GLenum target - GLenum pname - const GLfloat *params - - - - - void glConvolutionParameteri - GLenum target - GLenum pname - GLint params - - - - void glConvolutionParameteriEXT - GLenum target - GLenum pname - GLint params - - - - - void glConvolutionParameteriv - GLenum target - GLenum pname - const GLint *params - - - - void glConvolutionParameterivEXT - GLenum target - GLenum pname - const GLint *params - - - - - void glConvolutionParameterxOES - GLenum target - GLenum pname - GLfixed param - - - void glConvolutionParameterxvOES - GLenum target - GLenum pname - const GLfixed *params - - - void glCopyBufferSubData - GLenum readTarget - GLenum writeTarget - GLintptr readOffset - GLintptr writeOffset - GLsizeiptr size - - - void glCopyBufferSubDataNV - GLenum readTarget - GLenum writeTarget - GLintptr readOffset - GLintptr writeOffset - GLsizeiptr size - - - - void glCopyColorSubTable - GLenum target - GLsizei start - GLint x - GLint y - GLsizei width - - - - void glCopyColorSubTableEXT - GLenum target - GLsizei start - GLint x - GLint y - GLsizei width - - - - void glCopyColorTable - GLenum target - GLenum internalformat - GLint x - GLint y - GLsizei width - - - - void glCopyColorTableSGI - GLenum target - GLenum internalformat - GLint x - GLint y - GLsizei width - - - - - void glCopyConvolutionFilter1D - GLenum target - GLenum internalformat - GLint x - GLint y - GLsizei width - - - - void glCopyConvolutionFilter1DEXT - GLenum target - GLenum internalformat - GLint x - GLint y - GLsizei width - - - - - void glCopyConvolutionFilter2D - GLenum target - GLenum internalformat - GLint x - GLint y - GLsizei width - GLsizei height - - - - void glCopyConvolutionFilter2DEXT - GLenum target - GLenum internalformat - GLint x - GLint y - GLsizei width - GLsizei height - - - - - void glCopyImageSubData - GLuint srcName - GLenum srcTarget - GLint srcLevel - GLint srcX - GLint srcY - GLint srcZ - GLuint dstName - GLenum dstTarget - GLint dstLevel - GLint dstX - GLint dstY - GLint dstZ - GLsizei srcWidth - GLsizei srcHeight - GLsizei srcDepth - - - void glCopyImageSubDataEXT - GLuint srcName - GLenum srcTarget - GLint srcLevel - GLint srcX - GLint srcY - GLint srcZ - GLuint dstName - GLenum dstTarget - GLint dstLevel - GLint dstX - GLint dstY - GLint dstZ - GLsizei srcWidth - GLsizei srcHeight - GLsizei srcDepth - - - - void glCopyImageSubDataNV - GLuint srcName - GLenum srcTarget - GLint srcLevel - GLint srcX - GLint srcY - GLint srcZ - GLuint dstName - GLenum dstTarget - GLint dstLevel - GLint dstX - GLint dstY - GLint dstZ - GLsizei width - GLsizei height - GLsizei depth - - - - void glCopyMultiTexImage1DEXT - GLenum texunit - GLenum target - GLint level - GLenum internalformat - GLint x - GLint y - GLsizei width - GLint border - - - void glCopyMultiTexImage2DEXT - GLenum texunit - GLenum target - GLint level - GLenum internalformat - GLint x - GLint y - GLsizei width - GLsizei height - GLint border - - - void glCopyMultiTexSubImage1DEXT - GLenum texunit - GLenum target - GLint level - GLint xoffset - GLint x - GLint y - GLsizei width - - - void glCopyMultiTexSubImage2DEXT - GLenum texunit - GLenum target - GLint level - GLint xoffset - GLint yoffset - GLint x - GLint y - GLsizei width - GLsizei height - - - void glCopyMultiTexSubImage3DEXT - GLenum texunit - GLenum target - GLint level - GLint xoffset - GLint yoffset - GLint zoffset - GLint x - GLint y - GLsizei width - GLsizei height - - - void glCopyNamedBufferSubData - GLuint readBuffer - GLuint writeBuffer - GLintptr readOffset - GLintptr writeOffset - GLsizei size - - - void glCopyPathNV - GLuint resultPath - GLuint srcPath - - - void glCopyPixels - GLint x - GLint y - GLsizei width - GLsizei height - GLenum type - - - - void glCopyTexImage1D - GLenum target - GLint level - GLenum internalformat - GLint x - GLint y - GLsizei width - GLint border - - - - void glCopyTexImage1DEXT - GLenum target - GLint level - GLenum internalformat - GLint x - GLint y - GLsizei width - GLint border - - - - - void glCopyTexImage2D - GLenum target - GLint level - GLenum internalformat - GLint x - GLint y - GLsizei width - GLsizei height - GLint border - - - - void glCopyTexImage2DEXT - GLenum target - GLint level - GLenum internalformat - GLint x - GLint y - GLsizei width - GLsizei height - GLint border - - - - - void glCopyTexSubImage1D - GLenum target - GLint level - GLint xoffset - GLint x - GLint y - GLsizei width - - - - void glCopyTexSubImage1DEXT - GLenum target - GLint level - GLint xoffset - GLint x - GLint y - GLsizei width - - - - - void glCopyTexSubImage2D - GLenum target - GLint level - GLint xoffset - GLint yoffset - GLint x - GLint y - GLsizei width - GLsizei height - - - - void glCopyTexSubImage2DEXT - GLenum target - GLint level - GLint xoffset - GLint yoffset - GLint x - GLint y - GLsizei width - GLsizei height - - - - - void glCopyTexSubImage3D - GLenum target - GLint level - GLint xoffset - GLint yoffset - GLint zoffset - GLint x - GLint y - GLsizei width - GLsizei height - - - - void glCopyTexSubImage3DEXT - GLenum target - GLint level - GLint xoffset - GLint yoffset - GLint zoffset - GLint x - GLint y - GLsizei width - GLsizei height - - - - - void glCopyTexSubImage3DOES - GLenum target - GLint level - GLint xoffset - GLint yoffset - GLint zoffset - GLint x - GLint y - GLsizei width - GLsizei height - - - - void glCopyTextureImage1DEXT - GLuint texture - GLenum target - GLint level - GLenum internalformat - GLint x - GLint y - GLsizei width - GLint border - - - void glCopyTextureImage2DEXT - GLuint texture - GLenum target - GLint level - GLenum internalformat - GLint x - GLint y - GLsizei width - GLsizei height - GLint border - - - void glCopyTextureLevelsAPPLE - GLuint destinationTexture - GLuint sourceTexture - GLint sourceBaseLevel - GLsizei sourceLevelCount - - - void glCopyTextureSubImage1D - GLuint texture - GLint level - GLint xoffset - GLint x - GLint y - GLsizei width - - - void glCopyTextureSubImage1DEXT - GLuint texture - GLenum target - GLint level - GLint xoffset - GLint x - GLint y - GLsizei width - - - void glCopyTextureSubImage2D - GLuint texture - GLint level - GLint xoffset - GLint yoffset - GLint x - GLint y - GLsizei width - GLsizei height - - - void glCopyTextureSubImage2DEXT - GLuint texture - GLenum target - GLint level - GLint xoffset - GLint yoffset - GLint x - GLint y - GLsizei width - GLsizei height - - - void glCopyTextureSubImage3D - GLuint texture - GLint level - GLint xoffset - GLint yoffset - GLint zoffset - GLint x - GLint y - GLsizei width - GLsizei height - - - void glCopyTextureSubImage3DEXT - GLuint texture - GLenum target - GLint level - GLint xoffset - GLint yoffset - GLint zoffset - GLint x - GLint y - GLsizei width - GLsizei height - - - void glCoverFillPathInstancedNV - GLsizei numPaths - GLenum pathNameType - const void *paths - GLuint pathBase - GLenum coverMode - GLenum transformType - const GLfloat *transformValues - - - void glCoverFillPathNV - GLuint path - GLenum coverMode - - - void glCoverStrokePathInstancedNV - GLsizei numPaths - GLenum pathNameType - const void *paths - GLuint pathBase - GLenum coverMode - GLenum transformType - const GLfloat *transformValues - - - void glCoverStrokePathNV - GLuint path - GLenum coverMode - - - void glCoverageMaskNV - GLboolean mask - - - void glCoverageOperationNV - GLenum operation - - - void glCreateBuffers - GLsizei n - GLuint *buffers - - - void glCreateFramebuffers - GLsizei n - GLuint *framebuffers - - - void glCreatePerfQueryINTEL - GLuint queryId - GLuint *queryHandle - - - GLuint glCreateProgram - - - GLhandleARB glCreateProgramObjectARB - - - - void glCreateProgramPipelines - GLsizei n - GLuint *pipelines - - - void glCreateQueries - GLenum target - GLsizei n - GLuint *ids - - - void glCreateRenderbuffers - GLsizei n - GLuint *renderbuffers - - - void glCreateSamplers - GLsizei n - GLuint *samplers - - - GLuint glCreateShader - GLenum type - - - GLhandleARB glCreateShaderObjectARB - GLenum shaderType - - - - GLuint glCreateShaderProgramEXT - GLenum type - const GLchar *string - - - GLuint glCreateShaderProgramv - GLenum type - GLsizei count - const GLchar *const*strings - - - GLuint glCreateShaderProgramvEXT - GLenum type - GLsizei count - const GLchar **strings - - - GLsync glCreateSyncFromCLeventARB - struct _cl_context *context - struct _cl_event *event - GLbitfield flags - - - void glCreateTextures - GLenum target - GLsizei n - GLuint *textures - - - void glCreateTransformFeedbacks - GLsizei n - GLuint *ids - - - void glCreateVertexArrays - GLsizei n - GLuint *arrays - - - void glCullFace - GLenum mode - - - - void glCullParameterdvEXT - GLenum pname - GLdouble *params - - - void glCullParameterfvEXT - GLenum pname - GLfloat *params - - - void glCurrentPaletteMatrixARB - GLint index - - - - void glCurrentPaletteMatrixOES - GLuint matrixpaletteindex - - - void glDebugMessageCallback - GLDEBUGPROC callback - const void *userParam - - - void glDebugMessageCallbackAMD - GLDEBUGPROCAMD callback - void *userParam - - - void glDebugMessageCallbackARB - GLDEBUGPROCARB callback - const void *userParam - - - - void glDebugMessageCallbackKHR - GLDEBUGPROCKHR callback - const void *userParam - - - - void glDebugMessageControl - GLenum source - GLenum type - GLenum severity - GLsizei count - const GLuint *ids - GLboolean enabled - - - void glDebugMessageControlARB - GLenum source - GLenum type - GLenum severity - GLsizei count - const GLuint *ids - GLboolean enabled - - - - void glDebugMessageControlKHR - GLenum source - GLenum type - GLenum severity - GLsizei count - const GLuint *ids - GLboolean enabled - - - - void glDebugMessageEnableAMD - GLenum category - GLenum severity - GLsizei count - const GLuint *ids - GLboolean enabled - - - void glDebugMessageInsert - GLenum source - GLenum type - GLuint id - GLenum severity - GLsizei length - const GLchar *buf - - - void glDebugMessageInsertAMD - GLenum category - GLenum severity - GLuint id - GLsizei length - const GLchar *buf - - - void glDebugMessageInsertARB - GLenum source - GLenum type - GLuint id - GLenum severity - GLsizei length - const GLchar *buf - - - - void glDebugMessageInsertKHR - GLenum source - GLenum type - GLuint id - GLenum severity - GLsizei length - const GLchar *buf - - - - void glDeformSGIX - GLbitfield mask - - - - void glDeformationMap3dSGIX - GLenum target - GLdouble u1 - GLdouble u2 - GLint ustride - GLint uorder - GLdouble v1 - GLdouble v2 - GLint vstride - GLint vorder - GLdouble w1 - GLdouble w2 - GLint wstride - GLint worder - const GLdouble *points - - - - void glDeformationMap3fSGIX - GLenum target - GLfloat u1 - GLfloat u2 - GLint ustride - GLint uorder - GLfloat v1 - GLfloat v2 - GLint vstride - GLint vorder - GLfloat w1 - GLfloat w2 - GLint wstride - GLint worder - const GLfloat *points - - - - void glDeleteAsyncMarkersSGIX - GLuint marker - GLsizei range - - - void glDeleteBuffers - GLsizei n - const GLuint *buffers - - - void glDeleteBuffersARB - GLsizei n - const GLuint *buffers - - - - void glDeleteFencesAPPLE - GLsizei n - const GLuint *fences - - - void glDeleteFencesNV - GLsizei n - const GLuint *fences - - - - void glDeleteFragmentShaderATI - GLuint id - - - void glDeleteFramebuffers - GLsizei n - const GLuint *framebuffers - - - - void glDeleteFramebuffersEXT - GLsizei n - const GLuint *framebuffers - - - - - void glDeleteFramebuffersOES - GLsizei n - const GLuint *framebuffers - - - void glDeleteLists - GLuint list - GLsizei range - - - - void glDeleteNamedStringARB - GLint namelen - const GLchar *name - - - void glDeleteNamesAMD - GLenum identifier - GLuint num - const GLuint *names - - - void glDeleteObjectARB - GLhandleARB obj - - - void glDeleteOcclusionQueriesNV - GLsizei n - const GLuint *ids - - - void glDeletePathsNV - GLuint path - GLsizei range - - - void glDeletePerfMonitorsAMD - GLsizei n - GLuint *monitors - - - void glDeletePerfQueryINTEL - GLuint queryHandle - - - void glDeleteProgram - GLuint program - - - - void glDeleteProgramPipelines - GLsizei n - const GLuint *pipelines - - - void glDeleteProgramPipelinesEXT - GLsizei n - const GLuint *pipelines - - - void glDeleteProgramsARB - GLsizei n - const GLuint *programs - - - - void glDeleteProgramsNV - GLsizei n - const GLuint *programs - - - - - void glDeleteQueries - GLsizei n - const GLuint *ids - - - - void glDeleteQueriesARB - GLsizei n - const GLuint *ids - - - - void glDeleteQueriesEXT - GLsizei n - const GLuint *ids - - - void glDeleteRenderbuffers - GLsizei n - const GLuint *renderbuffers - - - - void glDeleteRenderbuffersEXT - GLsizei n - const GLuint *renderbuffers - - - - - void glDeleteRenderbuffersOES - GLsizei n - const GLuint *renderbuffers - - - void glDeleteSamplers - GLsizei count - const GLuint *samplers - - - void glDeleteShader - GLuint shader - - - - void glDeleteSync - GLsync sync - - - void glDeleteSyncAPPLE - GLsync sync - - - - void glDeleteTextures - GLsizei n - const GLuint *textures - - - - void glDeleteTexturesEXT - GLsizei n - const GLuint *textures - - - - void glDeleteTransformFeedbacks - GLsizei n - const GLuint *ids - - - void glDeleteTransformFeedbacksNV - GLsizei n - const GLuint *ids - - - - void glDeleteVertexArrays - GLsizei n - const GLuint *arrays - - - - void glDeleteVertexArraysAPPLE - GLsizei n - const GLuint *arrays - - - - void glDeleteVertexArraysOES - GLsizei n - const GLuint *arrays - - - - void glDeleteVertexShaderEXT - GLuint id - - - void glDepthBoundsEXT - GLclampd zmin - GLclampd zmax - - - - void glDepthBoundsdNV - GLdouble zmin - GLdouble zmax - - - - void glDepthFunc - GLenum func - - - - void glDepthMask - GLboolean flag - - - - void glDepthRange - GLdouble near - GLdouble far - - - - void glDepthRangeArrayv - GLuint first - GLsizei count - const GLdouble *v - - - void glDepthRangeIndexed - GLuint index - GLdouble n - GLdouble f - - - void glDepthRangedNV - GLdouble zNear - GLdouble zFar - - - - void glDepthRangef - GLfloat n - GLfloat f - - - void glDepthRangefOES - GLclampf n - GLclampf f - - - - - void glDepthRangex - GLfixed n - GLfixed f - - - void glDepthRangexOES - GLfixed n - GLfixed f - - - void glDetachObjectARB - GLhandleARB containerObj - GLhandleARB attachedObj - - - - void glDetachShader - GLuint program - GLuint shader - - - void glDetailTexFuncSGIS - GLenum target - GLsizei n - const GLfloat *points - - - - void glDisable - GLenum cap - - - - void glDisableClientState - GLenum array - - - void glDisableClientStateIndexedEXT - GLenum array - GLuint index - - - void glDisableClientStateiEXT - GLenum array - GLuint index - - - void glDisableDriverControlQCOM - GLuint driverControl - - - void glDisableIndexedEXT - GLenum target - GLuint index - - - - void glDisableVariantClientStateEXT - GLuint id - - - void glDisableVertexArrayAttrib - GLuint vaobj - GLuint index - - - void glDisableVertexArrayAttribEXT - GLuint vaobj - GLuint index - - - void glDisableVertexArrayEXT - GLuint vaobj - GLenum array - - - void glDisableVertexAttribAPPLE - GLuint index - GLenum pname - - - void glDisableVertexAttribArray - GLuint index - - - void glDisableVertexAttribArrayARB - GLuint index - - - - void glDisablei - GLenum target - GLuint index - - - void glDisableiEXT - GLenum target - GLuint index - - - - void glDiscardFramebufferEXT - GLenum target - GLsizei numAttachments - const GLenum *attachments - - - void glDispatchCompute - GLuint num_groups_x - GLuint num_groups_y - GLuint num_groups_z - - - void glDispatchComputeGroupSizeARB - GLuint num_groups_x - GLuint num_groups_y - GLuint num_groups_z - GLuint group_size_x - GLuint group_size_y - GLuint group_size_z - - - void glDispatchComputeIndirect - GLintptr indirect - - - void glDrawArrays - GLenum mode - GLint first - GLsizei count - - - - void glDrawArraysEXT - GLenum mode - GLint first - GLsizei count - - - - - void glDrawArraysIndirect - GLenum mode - const void *indirect - - - void glDrawArraysInstanced - GLenum mode - GLint first - GLsizei count - GLsizei instancecount - - - void glDrawArraysInstancedANGLE - GLenum mode - GLint first - GLsizei count - GLsizei primcount - - - - void glDrawArraysInstancedARB - GLenum mode - GLint first - GLsizei count - GLsizei primcount - - - - void glDrawArraysInstancedBaseInstance - GLenum mode - GLint first - GLsizei count - GLsizei instancecount - GLuint baseinstance - - - void glDrawArraysInstancedEXT - GLenum mode - GLint start - GLsizei count - GLsizei primcount - - - - void glDrawArraysInstancedNV - GLenum mode - GLint first - GLsizei count - GLsizei primcount - - - - void glDrawBuffer - GLenum buf - - - - void glDrawBuffers - GLsizei n - const GLenum *bufs - - - - void glDrawBuffersARB - GLsizei n - const GLenum *bufs - - - - void glDrawBuffersATI - GLsizei n - const GLenum *bufs - - - - - void glDrawBuffersEXT - GLsizei n - const GLenum *bufs - - - - void glDrawBuffersIndexedEXT - GLint n - const GLenum *location - const GLint *indices - - - void glDrawBuffersNV - GLsizei n - const GLenum *bufs - - - void glDrawElementArrayAPPLE - GLenum mode - GLint first - GLsizei count - - - void glDrawElementArrayATI - GLenum mode - GLsizei count - - - void glDrawElements - GLenum mode - GLsizei count - GLenum type - const void *indices - - - void glDrawElementsBaseVertex - GLenum mode - GLsizei count - GLenum type - const void *indices - GLint basevertex - - - void glDrawElementsIndirect - GLenum mode - GLenum type - const void *indirect - - - void glDrawElementsInstanced - GLenum mode - GLsizei count - GLenum type - const void *indices - GLsizei instancecount - - - void glDrawElementsInstancedANGLE - GLenum mode - GLsizei count - GLenum type - const void *indices - GLsizei primcount - - - - void glDrawElementsInstancedARB - GLenum mode - GLsizei count - GLenum type - const void *indices - GLsizei primcount - - - - void glDrawElementsInstancedBaseInstance - GLenum mode - GLsizei count - GLenum type - const void *indices - GLsizei instancecount - GLuint baseinstance - - - void glDrawElementsInstancedBaseVertex - GLenum mode - GLsizei count - GLenum type - const void *indices - GLsizei instancecount - GLint basevertex - - - void glDrawElementsInstancedBaseVertexBaseInstance - GLenum mode - GLsizei count - GLenum type - const void *indices - GLsizei instancecount - GLint basevertex - GLuint baseinstance - - - void glDrawElementsInstancedEXT - GLenum mode - GLsizei count - GLenum type - const void *indices - GLsizei primcount - - - - void glDrawElementsInstancedNV - GLenum mode - GLsizei count - GLenum type - const void *indices - GLsizei primcount - - - - void glDrawMeshArraysSUN - GLenum mode - GLint first - GLsizei count - GLsizei width - - - void glDrawPixels - GLsizei width - GLsizei height - GLenum format - GLenum type - const void *pixels - - - - - void glDrawRangeElementArrayAPPLE - GLenum mode - GLuint start - GLuint end - GLint first - GLsizei count - - - void glDrawRangeElementArrayATI - GLenum mode - GLuint start - GLuint end - GLsizei count - - - void glDrawRangeElements - GLenum mode - GLuint start - GLuint end - GLsizei count - GLenum type - const void *indices - - - void glDrawRangeElementsBaseVertex - GLenum mode - GLuint start - GLuint end - GLsizei count - GLenum type - const void *indices - GLint basevertex - - - void glDrawRangeElementsEXT - GLenum mode - GLuint start - GLuint end - GLsizei count - GLenum type - const void *indices - - - - void glDrawTexfOES - GLfloat x - GLfloat y - GLfloat z - GLfloat width - GLfloat height - - - void glDrawTexfvOES - const GLfloat *coords - - - void glDrawTexiOES - GLint x - GLint y - GLint z - GLint width - GLint height - - - void glDrawTexivOES - const GLint *coords - - - void glDrawTexsOES - GLshort x - GLshort y - GLshort z - GLshort width - GLshort height - - - void glDrawTexsvOES - const GLshort *coords - - - void glDrawTextureNV - GLuint texture - GLuint sampler - GLfloat x0 - GLfloat y0 - GLfloat x1 - GLfloat y1 - GLfloat z - GLfloat s0 - GLfloat t0 - GLfloat s1 - GLfloat t1 - - - void glDrawTexxOES - GLfixed x - GLfixed y - GLfixed z - GLfixed width - GLfixed height - - - void glDrawTexxvOES - const GLfixed *coords - - - void glDrawTransformFeedback - GLenum mode - GLuint id - - - void glDrawTransformFeedbackInstanced - GLenum mode - GLuint id - GLsizei instancecount - - - void glDrawTransformFeedbackNV - GLenum mode - GLuint id - - - - void glDrawTransformFeedbackStream - GLenum mode - GLuint id - GLuint stream - - - void glDrawTransformFeedbackStreamInstanced - GLenum mode - GLuint id - GLuint stream - GLsizei instancecount - - - void glEGLImageTargetRenderbufferStorageOES - GLenum target - GLeglImageOES image - - - void glEGLImageTargetTexture2DOES - GLenum target - GLeglImageOES image - - - void glEdgeFlag - GLboolean flag - - - - void glEdgeFlagFormatNV - GLsizei stride - - - void glEdgeFlagPointer - GLsizei stride - const void *pointer - - - void glEdgeFlagPointerEXT - GLsizei stride - GLsizei count - const GLboolean *pointer - - - void glEdgeFlagPointerListIBM - GLint stride - const GLboolean **pointer - GLint ptrstride - - - void glEdgeFlagv - const GLboolean *flag - - - - void glElementPointerAPPLE - GLenum type - const void *pointer - - - void glElementPointerATI - GLenum type - const void *pointer - - - void glEnable - GLenum cap - - - - void glEnableClientState - GLenum array - - - void glEnableClientStateIndexedEXT - GLenum array - GLuint index - - - void glEnableClientStateiEXT - GLenum array - GLuint index - - - void glEnableDriverControlQCOM - GLuint driverControl - - - void glEnableIndexedEXT - GLenum target - GLuint index - - - - void glEnableVariantClientStateEXT - GLuint id - - - void glEnableVertexArrayAttrib - GLuint vaobj - GLuint index - - - void glEnableVertexArrayAttribEXT - GLuint vaobj - GLuint index - - - void glEnableVertexArrayEXT - GLuint vaobj - GLenum array - - - void glEnableVertexAttribAPPLE - GLuint index - GLenum pname - - - void glEnableVertexAttribArray - GLuint index - - - void glEnableVertexAttribArrayARB - GLuint index - - - - void glEnablei - GLenum target - GLuint index - - - void glEnableiEXT - GLenum target - GLuint index - - - - void glEnd - - - - void glEndConditionalRender - - - - void glEndConditionalRenderNV - - - - void glEndConditionalRenderNVX - - - - void glEndFragmentShaderATI - - - void glEndList - - - - void glEndOcclusionQueryNV - - - void glEndPerfMonitorAMD - GLuint monitor - - - void glEndPerfQueryINTEL - GLuint queryHandle - - - void glEndQuery - GLenum target - - - - void glEndQueryARB - GLenum target - - - - void glEndQueryEXT - GLenum target - - - void glEndQueryIndexed - GLenum target - GLuint index - - - void glEndTilingQCOM - GLbitfield preserveMask - - - void glEndTransformFeedback - - - void glEndTransformFeedbackEXT - - - - void glEndTransformFeedbackNV - - - - void glEndVertexShaderEXT - - - void glEndVideoCaptureNV - GLuint video_capture_slot - - - void glEvalCoord1d - GLdouble u - - - - void glEvalCoord1dv - const GLdouble *u - - - - void glEvalCoord1f - GLfloat u - - - - void glEvalCoord1fv - const GLfloat *u - - - - void glEvalCoord1xOES - GLfixed u - - - void glEvalCoord1xvOES - const GLfixed *coords - - - void glEvalCoord2d - GLdouble u - GLdouble v - - - - void glEvalCoord2dv - const GLdouble *u - - - - void glEvalCoord2f - GLfloat u - GLfloat v - - - - void glEvalCoord2fv - const GLfloat *u - - - - void glEvalCoord2xOES - GLfixed u - GLfixed v - - - void glEvalCoord2xvOES - const GLfixed *coords - - - void glEvalMapsNV - GLenum target - GLenum mode - - - void glEvalMesh1 - GLenum mode - GLint i1 - GLint i2 - - - - void glEvalMesh2 - GLenum mode - GLint i1 - GLint i2 - GLint j1 - GLint j2 - - - - void glEvalPoint1 - GLint i - - - - void glEvalPoint2 - GLint i - GLint j - - - - void glExecuteProgramNV - GLenum target - GLuint id - const GLfloat *params - - - - void glExtGetBufferPointervQCOM - GLenum target - void **params - - - void glExtGetBuffersQCOM - GLuint *buffers - GLint maxBuffers - GLint *numBuffers - - - void glExtGetFramebuffersQCOM - GLuint *framebuffers - GLint maxFramebuffers - GLint *numFramebuffers - - - void glExtGetProgramBinarySourceQCOM - GLuint program - GLenum shadertype - GLchar *source - GLint *length - - - void glExtGetProgramsQCOM - GLuint *programs - GLint maxPrograms - GLint *numPrograms - - - void glExtGetRenderbuffersQCOM - GLuint *renderbuffers - GLint maxRenderbuffers - GLint *numRenderbuffers - - - void glExtGetShadersQCOM - GLuint *shaders - GLint maxShaders - GLint *numShaders - - - void glExtGetTexLevelParameterivQCOM - GLuint texture - GLenum face - GLint level - GLenum pname - GLint *params - - - void glExtGetTexSubImageQCOM - GLenum target - GLint level - GLint xoffset - GLint yoffset - GLint zoffset - GLsizei width - GLsizei height - GLsizei depth - GLenum format - GLenum type - void *texels - - - void glExtGetTexturesQCOM - GLuint *textures - GLint maxTextures - GLint *numTextures - - - GLboolean glExtIsProgramBinaryQCOM - GLuint program - - - void glExtTexObjectStateOverrideiQCOM - GLenum target - GLenum pname - GLint param - - - void glExtractComponentEXT - GLuint res - GLuint src - GLuint num - - - void glFeedbackBuffer - GLsizei size - GLenum type - GLfloat *buffer - - - - void glFeedbackBufferxOES - GLsizei n - GLenum type - const GLfixed *buffer - - - GLsync glFenceSync - GLenum condition - GLbitfield flags - - - GLsync glFenceSyncAPPLE - GLenum condition - GLbitfield flags - - - - void glFinalCombinerInputNV - GLenum variable - GLenum input - GLenum mapping - GLenum componentUsage - - - - void glFinish - - - - GLint glFinishAsyncSGIX - GLuint *markerp - - - void glFinishFenceAPPLE - GLuint fence - - - void glFinishFenceNV - GLuint fence - - - - void glFinishObjectAPPLE - GLenum object - GLint name - - - void glFinishTextureSUNX - - - void glFlush - - - - void glFlushMappedBufferRange - GLenum target - GLintptr offset - GLsizeiptr length - - - void glFlushMappedBufferRangeAPPLE - GLenum target - GLintptr offset - GLsizeiptr size - - - - void glFlushMappedBufferRangeEXT - GLenum target - GLintptr offset - GLsizeiptr length - - - - void glFlushMappedNamedBufferRange - GLuint buffer - GLintptr offset - GLsizei length - - - void glFlushMappedNamedBufferRangeEXT - GLuint buffer - GLintptr offset - GLsizeiptr length - - - void glFlushPixelDataRangeNV - GLenum target - - - void glFlushRasterSGIX - - - - void glFlushStaticDataIBM - GLenum target - - - void glFlushVertexArrayRangeAPPLE - GLsizei length - void *pointer - - - void glFlushVertexArrayRangeNV - - - void glFogCoordFormatNV - GLenum type - GLsizei stride - - - void glFogCoordPointer - GLenum type - GLsizei stride - const void *pointer - - - void glFogCoordPointerEXT - GLenum type - GLsizei stride - const void *pointer - - - - void glFogCoordPointerListIBM - GLenum type - GLint stride - const void **pointer - GLint ptrstride - - - void glFogCoordd - GLdouble coord - - - - void glFogCoorddEXT - GLdouble coord - - - - - void glFogCoorddv - const GLdouble *coord - - - - void glFogCoorddvEXT - const GLdouble *coord - - - - - void glFogCoordf - GLfloat coord - - - - void glFogCoordfEXT - GLfloat coord - - - - - void glFogCoordfv - const GLfloat *coord - - - - void glFogCoordfvEXT - const GLfloat *coord - - - - - void glFogCoordhNV - GLhalfNV fog - - - - void glFogCoordhvNV - const GLhalfNV *fog - - - - void glFogFuncSGIS - GLsizei n - const GLfloat *points - - - - void glFogf - GLenum pname - GLfloat param - - - - void glFogfv - GLenum pname - const GLfloat *params - - - - void glFogi - GLenum pname - GLint param - - - - void glFogiv - GLenum pname - const GLint *params - - - - void glFogx - GLenum pname - GLfixed param - - - void glFogxOES - GLenum pname - GLfixed param - - - void glFogxv - GLenum pname - const GLfixed *param - - - void glFogxvOES - GLenum pname - const GLfixed *param - - - void glFragmentColorMaterialSGIX - GLenum face - GLenum mode - - - void glFragmentLightModelfSGIX - GLenum pname - GLfloat param - - - void glFragmentLightModelfvSGIX - GLenum pname - const GLfloat *params - - - void glFragmentLightModeliSGIX - GLenum pname - GLint param - - - void glFragmentLightModelivSGIX - GLenum pname - const GLint *params - - - void glFragmentLightfSGIX - GLenum light - GLenum pname - GLfloat param - - - void glFragmentLightfvSGIX - GLenum light - GLenum pname - const GLfloat *params - - - void glFragmentLightiSGIX - GLenum light - GLenum pname - GLint param - - - void glFragmentLightivSGIX - GLenum light - GLenum pname - const GLint *params - - - void glFragmentMaterialfSGIX - GLenum face - GLenum pname - GLfloat param - - - void glFragmentMaterialfvSGIX - GLenum face - GLenum pname - const GLfloat *params - - - void glFragmentMaterialiSGIX - GLenum face - GLenum pname - GLint param - - - void glFragmentMaterialivSGIX - GLenum face - GLenum pname - const GLint *params - - - void glFrameTerminatorGREMEDY - - - void glFrameZoomSGIX - GLint factor - - - - void glFramebufferDrawBufferEXT - GLuint framebuffer - GLenum mode - - - void glFramebufferDrawBuffersEXT - GLuint framebuffer - GLsizei n - const GLenum *bufs - - - void glFramebufferParameteri - GLenum target - GLenum pname - GLint param - - - void glFramebufferReadBufferEXT - GLuint framebuffer - GLenum mode - - - void glFramebufferRenderbuffer - GLenum target - GLenum attachment - GLenum renderbuffertarget - GLuint renderbuffer - - - - void glFramebufferRenderbufferEXT - GLenum target - GLenum attachment - GLenum renderbuffertarget - GLuint renderbuffer - - - - - void glFramebufferRenderbufferOES - GLenum target - GLenum attachment - GLenum renderbuffertarget - GLuint renderbuffer - - - void glFramebufferTexture - GLenum target - GLenum attachment - GLuint texture - GLint level - - - void glFramebufferTexture1D - GLenum target - GLenum attachment - GLenum textarget - GLuint texture - GLint level - - - - void glFramebufferTexture1DEXT - GLenum target - GLenum attachment - GLenum textarget - GLuint texture - GLint level - - - - - void glFramebufferTexture2D - GLenum target - GLenum attachment - GLenum textarget - GLuint texture - GLint level - - - - void glFramebufferTexture2DEXT - GLenum target - GLenum attachment - GLenum textarget - GLuint texture - GLint level - - - - - void glFramebufferTexture2DMultisampleEXT - GLenum target - GLenum attachment - GLenum textarget - GLuint texture - GLint level - GLsizei samples - - - void glFramebufferTexture2DMultisampleIMG - GLenum target - GLenum attachment - GLenum textarget - GLuint texture - GLint level - GLsizei samples - - - void glFramebufferTexture2DOES - GLenum target - GLenum attachment - GLenum textarget - GLuint texture - GLint level - - - void glFramebufferTexture3D - GLenum target - GLenum attachment - GLenum textarget - GLuint texture - GLint level - GLint zoffset - - - - void glFramebufferTexture3DEXT - GLenum target - GLenum attachment - GLenum textarget - GLuint texture - GLint level - GLint zoffset - - - - - void glFramebufferTexture3DOES - GLenum target - GLenum attachment - GLenum textarget - GLuint texture - GLint level - GLint zoffset - - - - void glFramebufferTextureARB - GLenum target - GLenum attachment - GLuint texture - GLint level - - - - void glFramebufferTextureEXT - GLenum target - GLenum attachment - GLuint texture - GLint level - - - - void glFramebufferTextureFaceARB - GLenum target - GLenum attachment - GLuint texture - GLint level - GLenum face - - - void glFramebufferTextureFaceEXT - GLenum target - GLenum attachment - GLuint texture - GLint level - GLenum face - - - - void glFramebufferTextureLayer - GLenum target - GLenum attachment - GLuint texture - GLint level - GLint layer - - - - void glFramebufferTextureLayerARB - GLenum target - GLenum attachment - GLuint texture - GLint level - GLint layer - - - - void glFramebufferTextureLayerEXT - GLenum target - GLenum attachment - GLuint texture - GLint level - GLint layer - - - - void glFreeObjectBufferATI - GLuint buffer - - - void glFrontFace - GLenum mode - - - - void glFrustum - GLdouble left - GLdouble right - GLdouble bottom - GLdouble top - GLdouble zNear - GLdouble zFar - - - - void glFrustumf - GLfloat l - GLfloat r - GLfloat b - GLfloat t - GLfloat n - GLfloat f - - - void glFrustumfOES - GLfloat l - GLfloat r - GLfloat b - GLfloat t - GLfloat n - GLfloat f - - - - void glFrustumx - GLfixed l - GLfixed r - GLfixed b - GLfixed t - GLfixed n - GLfixed f - - - void glFrustumxOES - GLfixed l - GLfixed r - GLfixed b - GLfixed t - GLfixed n - GLfixed f - - - GLuint glGenAsyncMarkersSGIX - GLsizei range - - - void glGenBuffers - GLsizei n - GLuint *buffers - - - void glGenBuffersARB - GLsizei n - GLuint *buffers - - - - void glGenFencesAPPLE - GLsizei n - GLuint *fences - - - void glGenFencesNV - GLsizei n - GLuint *fences - - - - GLuint glGenFragmentShadersATI - GLuint range - - - void glGenFramebuffers - GLsizei n - GLuint *framebuffers - - - - void glGenFramebuffersEXT - GLsizei n - GLuint *framebuffers - - - - - void glGenFramebuffersOES - GLsizei n - GLuint *framebuffers - - - GLuint glGenLists - GLsizei range - - - - void glGenNamesAMD - GLenum identifier - GLuint num - GLuint *names - - - void glGenOcclusionQueriesNV - GLsizei n - GLuint *ids - - - GLuint glGenPathsNV - GLsizei range - - - void glGenPerfMonitorsAMD - GLsizei n - GLuint *monitors - - - void glGenProgramPipelines - GLsizei n - GLuint *pipelines - - - void glGenProgramPipelinesEXT - GLsizei n - GLuint *pipelines - - - void glGenProgramsARB - GLsizei n - GLuint *programs - - - - void glGenProgramsNV - GLsizei n - GLuint *programs - - - - - void glGenQueries - GLsizei n - GLuint *ids - - - - void glGenQueriesARB - GLsizei n - GLuint *ids - - - - void glGenQueriesEXT - GLsizei n - GLuint *ids - - - void glGenRenderbuffers - GLsizei n - GLuint *renderbuffers - - - - void glGenRenderbuffersEXT - GLsizei n - GLuint *renderbuffers - - - - - void glGenRenderbuffersOES - GLsizei n - GLuint *renderbuffers - - - void glGenSamplers - GLsizei count - GLuint *samplers - - - GLuint glGenSymbolsEXT - GLenum datatype - GLenum storagetype - GLenum range - GLuint components - - - void glGenTextures - GLsizei n - GLuint *textures - - - - void glGenTexturesEXT - GLsizei n - GLuint *textures - - - - void glGenTransformFeedbacks - GLsizei n - GLuint *ids - - - void glGenTransformFeedbacksNV - GLsizei n - GLuint *ids - - - - void glGenVertexArrays - GLsizei n - GLuint *arrays - - - - void glGenVertexArraysAPPLE - GLsizei n - GLuint *arrays - - - - void glGenVertexArraysOES - GLsizei n - GLuint *arrays - - - - GLuint glGenVertexShadersEXT - GLuint range - - - void glGenerateMipmap - GLenum target - - - - void glGenerateMipmapEXT - GLenum target - - - - - void glGenerateMipmapOES - GLenum target - - - void glGenerateMultiTexMipmapEXT - GLenum texunit - GLenum target - - - void glGenerateTextureMipmap - GLuint texture - - - void glGenerateTextureMipmapEXT - GLuint texture - GLenum target - - - void glGetActiveAtomicCounterBufferiv - GLuint program - GLuint bufferIndex - GLenum pname - GLint *params - - - void glGetActiveAttrib - GLuint program - GLuint index - GLsizei bufSize - GLsizei *length - GLint *size - GLenum *type - GLchar *name - - - void glGetActiveAttribARB - GLhandleARB programObj - GLuint index - GLsizei maxLength - GLsizei *length - GLint *size - GLenum *type - GLcharARB *name - - - - void glGetActiveSubroutineName - GLuint program - GLenum shadertype - GLuint index - GLsizei bufsize - GLsizei *length - GLchar *name - - - void glGetActiveSubroutineUniformName - GLuint program - GLenum shadertype - GLuint index - GLsizei bufsize - GLsizei *length - GLchar *name - - - void glGetActiveSubroutineUniformiv - GLuint program - GLenum shadertype - GLuint index - GLenum pname - GLint *values - - - void glGetActiveUniform - GLuint program - GLuint index - GLsizei bufSize - GLsizei *length - GLint *size - GLenum *type - GLchar *name - - - void glGetActiveUniformARB - GLhandleARB programObj - GLuint index - GLsizei maxLength - GLsizei *length - GLint *size - GLenum *type - GLcharARB *name - - - - void glGetActiveUniformBlockName - GLuint program - GLuint uniformBlockIndex - GLsizei bufSize - GLsizei *length - GLchar *uniformBlockName - - - void glGetActiveUniformBlockiv - GLuint program - GLuint uniformBlockIndex - GLenum pname - GLint *params - - - void glGetActiveUniformName - GLuint program - GLuint uniformIndex - GLsizei bufSize - GLsizei *length - GLchar *uniformName - - - void glGetActiveUniformsiv - GLuint program - GLsizei uniformCount - const GLuint *uniformIndices - GLenum pname - GLint *params - - - void glGetActiveVaryingNV - GLuint program - GLuint index - GLsizei bufSize - GLsizei *length - GLsizei *size - GLenum *type - GLchar *name - - - void glGetArrayObjectfvATI - GLenum array - GLenum pname - GLfloat *params - - - void glGetArrayObjectivATI - GLenum array - GLenum pname - GLint *params - - - void glGetAttachedObjectsARB - GLhandleARB containerObj - GLsizei maxCount - GLsizei *count - GLhandleARB *obj - - - void glGetAttachedShaders - GLuint program - GLsizei maxCount - GLsizei *count - GLuint *shaders - - - GLint glGetAttribLocation - GLuint program - const GLchar *name - - - GLint glGetAttribLocationARB - GLhandleARB programObj - const GLcharARB *name - - - - void glGetBooleanIndexedvEXT - GLenum target - GLuint index - GLboolean *data - - - - void glGetBooleani_v - GLenum target - GLuint index - GLboolean *data - - - void glGetBooleanv - GLenum pname - GLboolean *data - - - - void glGetBufferParameteri64v - GLenum target - GLenum pname - GLint64 *params - - - void glGetBufferParameteriv - GLenum target - GLenum pname - GLint *params - - - void glGetBufferParameterivARB - GLenum target - GLenum pname - GLint *params - - - - void glGetBufferParameterui64vNV - GLenum target - GLenum pname - GLuint64EXT *params - - - void glGetBufferPointerv - GLenum target - GLenum pname - void **params - - - void glGetBufferPointervARB - GLenum target - GLenum pname - void **params - - - - void glGetBufferPointervOES - GLenum target - GLenum pname - void **params - - - - void glGetBufferSubData - GLenum target - GLintptr offset - GLsizeiptr size - void *data - - - void glGetBufferSubDataARB - GLenum target - GLintptrARB offset - GLsizeiptrARB size - void *data - - - - void glGetClipPlane - GLenum plane - GLdouble *equation - - - - void glGetClipPlanef - GLenum plane - GLfloat *equation - - - void glGetClipPlanefOES - GLenum plane - GLfloat *equation - - - - void glGetClipPlanex - GLenum plane - GLfixed *equation - - - void glGetClipPlanexOES - GLenum plane - GLfixed *equation - - - void glGetColorTable - GLenum target - GLenum format - GLenum type - void *table - - - - - void glGetColorTableEXT - GLenum target - GLenum format - GLenum type - void *data - - - - void glGetColorTableParameterfv - GLenum target - GLenum pname - GLfloat *params - - - - void glGetColorTableParameterfvEXT - GLenum target - GLenum pname - GLfloat *params - - - - void glGetColorTableParameterfvSGI - GLenum target - GLenum pname - GLfloat *params - - - - void glGetColorTableParameteriv - GLenum target - GLenum pname - GLint *params - - - - void glGetColorTableParameterivEXT - GLenum target - GLenum pname - GLint *params - - - - void glGetColorTableParameterivSGI - GLenum target - GLenum pname - GLint *params - - - - void glGetColorTableSGI - GLenum target - GLenum format - GLenum type - void *table - - - - void glGetCombinerInputParameterfvNV - GLenum stage - GLenum portion - GLenum variable - GLenum pname - GLfloat *params - - - - void glGetCombinerInputParameterivNV - GLenum stage - GLenum portion - GLenum variable - GLenum pname - GLint *params - - - - void glGetCombinerOutputParameterfvNV - GLenum stage - GLenum portion - GLenum pname - GLfloat *params - - - - void glGetCombinerOutputParameterivNV - GLenum stage - GLenum portion - GLenum pname - GLint *params - - - - void glGetCombinerStageParameterfvNV - GLenum stage - GLenum pname - GLfloat *params - - - void glGetCompressedMultiTexImageEXT - GLenum texunit - GLenum target - GLint lod - void *img - - - void glGetCompressedTexImage - GLenum target - GLint level - void *img - - - - - void glGetCompressedTexImageARB - GLenum target - GLint level - void *img - - - - - void glGetCompressedTextureImage - GLuint texture - GLint level - GLsizei bufSize - void *pixels - - - void glGetCompressedTextureImageEXT - GLuint texture - GLenum target - GLint lod - void *img - - - void glGetCompressedTextureSubImage - GLuint texture - GLint level - GLint xoffset - GLint yoffset - GLint zoffset - GLsizei width - GLsizei height - GLsizei depth - GLsizei bufSize - void *pixels - - - void glGetConvolutionFilter - GLenum target - GLenum format - GLenum type - void *image - - - - - void glGetConvolutionFilterEXT - GLenum target - GLenum format - GLenum type - void *image - - - - void glGetConvolutionParameterfv - GLenum target - GLenum pname - GLfloat *params - - - - void glGetConvolutionParameterfvEXT - GLenum target - GLenum pname - GLfloat *params - - - - void glGetConvolutionParameteriv - GLenum target - GLenum pname - GLint *params - - - - void glGetConvolutionParameterivEXT - GLenum target - GLenum pname - GLint *params - - - - void glGetConvolutionParameterxvOES - GLenum target - GLenum pname - GLfixed *params - - - GLuint glGetDebugMessageLog - GLuint count - GLsizei bufSize - GLenum *sources - GLenum *types - GLuint *ids - GLenum *severities - GLsizei *lengths - GLchar *messageLog - - - GLuint glGetDebugMessageLogAMD - GLuint count - GLsizei bufsize - GLenum *categories - GLuint *severities - GLuint *ids - GLsizei *lengths - GLchar *message - - - GLuint glGetDebugMessageLogARB - GLuint count - GLsizei bufSize - GLenum *sources - GLenum *types - GLuint *ids - GLenum *severities - GLsizei *lengths - GLchar *messageLog - - - - GLuint glGetDebugMessageLogKHR - GLuint count - GLsizei bufSize - GLenum *sources - GLenum *types - GLuint *ids - GLenum *severities - GLsizei *lengths - GLchar *messageLog - - - - void glGetDetailTexFuncSGIS - GLenum target - GLfloat *points - - - - void glGetDoubleIndexedvEXT - GLenum target - GLuint index - GLdouble *data - - - - void glGetDoublei_v - GLenum target - GLuint index - GLdouble *data - - - void glGetDoublei_vEXT - GLenum pname - GLuint index - GLdouble *params - - - - void glGetDoublev - GLenum pname - GLdouble *data - - - - void glGetDriverControlStringQCOM - GLuint driverControl - GLsizei bufSize - GLsizei *length - GLchar *driverControlString - - - void glGetDriverControlsQCOM - GLint *num - GLsizei size - GLuint *driverControls - - - GLenum glGetError - - - - void glGetFenceivNV - GLuint fence - GLenum pname - GLint *params - - - - void glGetFinalCombinerInputParameterfvNV - GLenum variable - GLenum pname - GLfloat *params - - - - void glGetFinalCombinerInputParameterivNV - GLenum variable - GLenum pname - GLint *params - - - - void glGetFirstPerfQueryIdINTEL - GLuint *queryId - - - void glGetFixedv - GLenum pname - GLfixed *params - - - void glGetFixedvOES - GLenum pname - GLfixed *params - - - void glGetFloatIndexedvEXT - GLenum target - GLuint index - GLfloat *data - - - - void glGetFloati_v - GLenum target - GLuint index - GLfloat *data - - - void glGetFloati_vEXT - GLenum pname - GLuint index - GLfloat *params - - - - void glGetFloatv - GLenum pname - GLfloat *data - - - - void glGetFogFuncSGIS - GLfloat *points - - - GLint glGetFragDataIndex - GLuint program - const GLchar *name - - - GLint glGetFragDataLocation - GLuint program - const GLchar *name - - - GLint glGetFragDataLocationEXT - GLuint program - const GLchar *name - - - - void glGetFragmentLightfvSGIX - GLenum light - GLenum pname - GLfloat *params - - - void glGetFragmentLightivSGIX - GLenum light - GLenum pname - GLint *params - - - void glGetFragmentMaterialfvSGIX - GLenum face - GLenum pname - GLfloat *params - - - void glGetFragmentMaterialivSGIX - GLenum face - GLenum pname - GLint *params - - - void glGetFramebufferAttachmentParameteriv - GLenum target - GLenum attachment - GLenum pname - GLint *params - - - - void glGetFramebufferAttachmentParameterivEXT - GLenum target - GLenum attachment - GLenum pname - GLint *params - - - - - void glGetFramebufferAttachmentParameterivOES - GLenum target - GLenum attachment - GLenum pname - GLint *params - - - void glGetFramebufferParameteriv - GLenum target - GLenum pname - GLint *params - - - void glGetFramebufferParameterivEXT - GLuint framebuffer - GLenum pname - GLint *params - - - GLenum glGetGraphicsResetStatus - - - GLenum glGetGraphicsResetStatusARB - - - GLenum glGetGraphicsResetStatusEXT - - - GLenum glGetGraphicsResetStatusKHR - - - - GLhandleARB glGetHandleARB - GLenum pname - - - void glGetHistogram - GLenum target - GLboolean reset - GLenum format - GLenum type - void *values - - - - - void glGetHistogramEXT - GLenum target - GLboolean reset - GLenum format - GLenum type - void *values - - - - void glGetHistogramParameterfv - GLenum target - GLenum pname - GLfloat *params - - - - void glGetHistogramParameterfvEXT - GLenum target - GLenum pname - GLfloat *params - - - - void glGetHistogramParameteriv - GLenum target - GLenum pname - GLint *params - - - - void glGetHistogramParameterivEXT - GLenum target - GLenum pname - GLint *params - - - - void glGetHistogramParameterxvOES - GLenum target - GLenum pname - GLfixed *params - - - GLuint64 glGetImageHandleARB - GLuint texture - GLint level - GLboolean layered - GLint layer - GLenum format - - - GLuint64 glGetImageHandleNV - GLuint texture - GLint level - GLboolean layered - GLint layer - GLenum format - - - void glGetImageTransformParameterfvHP - GLenum target - GLenum pname - GLfloat *params - - - void glGetImageTransformParameterivHP - GLenum target - GLenum pname - GLint *params - - - void glGetInfoLogARB - GLhandleARB obj - GLsizei maxLength - GLsizei *length - GLcharARB *infoLog - - - GLint glGetInstrumentsSGIX - - - - void glGetInteger64i_v - GLenum target - GLuint index - GLint64 *data - - - void glGetInteger64v - GLenum pname - GLint64 *data - - - void glGetInteger64vAPPLE - GLenum pname - GLint64 *params - - - - void glGetIntegerIndexedvEXT - GLenum target - GLuint index - GLint *data - - - - void glGetIntegeri_v - GLenum target - GLuint index - GLint *data - - - void glGetIntegeri_vEXT - GLenum target - GLuint index - GLint *data - - - void glGetIntegerui64i_vNV - GLenum value - GLuint index - GLuint64EXT *result - - - void glGetIntegerui64vNV - GLenum value - GLuint64EXT *result - - - void glGetIntegerv - GLenum pname - GLint *data - - - - void glGetInternalformati64v - GLenum target - GLenum internalformat - GLenum pname - GLsizei bufSize - GLint64 *params - - - void glGetInternalformativ - GLenum target - GLenum internalformat - GLenum pname - GLsizei bufSize - GLint *params - - - void glGetInvariantBooleanvEXT - GLuint id - GLenum value - GLboolean *data - - - void glGetInvariantFloatvEXT - GLuint id - GLenum value - GLfloat *data - - - void glGetInvariantIntegervEXT - GLuint id - GLenum value - GLint *data - - - void glGetLightfv - GLenum light - GLenum pname - GLfloat *params - - - - void glGetLightiv - GLenum light - GLenum pname - GLint *params - - - - void glGetLightxOES - GLenum light - GLenum pname - GLfixed *params - - - void glGetLightxv - GLenum light - GLenum pname - GLfixed *params - - - void glGetLightxvOES - GLenum light - GLenum pname - GLfixed *params - - - void glGetListParameterfvSGIX - GLuint list - GLenum pname - GLfloat *params - - - void glGetListParameterivSGIX - GLuint list - GLenum pname - GLint *params - - - void glGetLocalConstantBooleanvEXT - GLuint id - GLenum value - GLboolean *data - - - void glGetLocalConstantFloatvEXT - GLuint id - GLenum value - GLfloat *data - - - void glGetLocalConstantIntegervEXT - GLuint id - GLenum value - GLint *data - - - void glGetMapAttribParameterfvNV - GLenum target - GLuint index - GLenum pname - GLfloat *params - - - void glGetMapAttribParameterivNV - GLenum target - GLuint index - GLenum pname - GLint *params - - - void glGetMapControlPointsNV - GLenum target - GLuint index - GLenum type - GLsizei ustride - GLsizei vstride - GLboolean packed - void *points - - - void glGetMapParameterfvNV - GLenum target - GLenum pname - GLfloat *params - - - void glGetMapParameterivNV - GLenum target - GLenum pname - GLint *params - - - void glGetMapdv - GLenum target - GLenum query - GLdouble *v - - - - void glGetMapfv - GLenum target - GLenum query - GLfloat *v - - - - void glGetMapiv - GLenum target - GLenum query - GLint *v - - - - void glGetMapxvOES - GLenum target - GLenum query - GLfixed *v - - - void glGetMaterialfv - GLenum face - GLenum pname - GLfloat *params - - - - void glGetMaterialiv - GLenum face - GLenum pname - GLint *params - - - - void glGetMaterialxOES - GLenum face - GLenum pname - GLfixed param - - - void glGetMaterialxv - GLenum face - GLenum pname - GLfixed *params - - - void glGetMaterialxvOES - GLenum face - GLenum pname - GLfixed *params - - - void glGetMinmax - GLenum target - GLboolean reset - GLenum format - GLenum type - void *values - - - - - void glGetMinmaxEXT - GLenum target - GLboolean reset - GLenum format - GLenum type - void *values - - - - void glGetMinmaxParameterfv - GLenum target - GLenum pname - GLfloat *params - - - - void glGetMinmaxParameterfvEXT - GLenum target - GLenum pname - GLfloat *params - - - - void glGetMinmaxParameteriv - GLenum target - GLenum pname - GLint *params - - - - void glGetMinmaxParameterivEXT - GLenum target - GLenum pname - GLint *params - - - - void glGetMultiTexEnvfvEXT - GLenum texunit - GLenum target - GLenum pname - GLfloat *params - - - void glGetMultiTexEnvivEXT - GLenum texunit - GLenum target - GLenum pname - GLint *params - - - void glGetMultiTexGendvEXT - GLenum texunit - GLenum coord - GLenum pname - GLdouble *params - - - void glGetMultiTexGenfvEXT - GLenum texunit - GLenum coord - GLenum pname - GLfloat *params - - - void glGetMultiTexGenivEXT - GLenum texunit - GLenum coord - GLenum pname - GLint *params - - - void glGetMultiTexImageEXT - GLenum texunit - GLenum target - GLint level - GLenum format - GLenum type - void *pixels - - - void glGetMultiTexLevelParameterfvEXT - GLenum texunit - GLenum target - GLint level - GLenum pname - GLfloat *params - - - void glGetMultiTexLevelParameterivEXT - GLenum texunit - GLenum target - GLint level - GLenum pname - GLint *params - - - void glGetMultiTexParameterIivEXT - GLenum texunit - GLenum target - GLenum pname - GLint *params - - - void glGetMultiTexParameterIuivEXT - GLenum texunit - GLenum target - GLenum pname - GLuint *params - - - void glGetMultiTexParameterfvEXT - GLenum texunit - GLenum target - GLenum pname - GLfloat *params - - - void glGetMultiTexParameterivEXT - GLenum texunit - GLenum target - GLenum pname - GLint *params - - - void glGetMultisamplefv - GLenum pname - GLuint index - GLfloat *val - - - void glGetMultisamplefvNV - GLenum pname - GLuint index - GLfloat *val - - - - void glGetNamedBufferParameteri64v - GLuint buffer - GLenum pname - GLint64 *params - - - void glGetNamedBufferParameteriv - GLuint buffer - GLenum pname - GLint *params - - - void glGetNamedBufferParameterivEXT - GLuint buffer - GLenum pname - GLint *params - - - void glGetNamedBufferParameterui64vNV - GLuint buffer - GLenum pname - GLuint64EXT *params - - - void glGetNamedBufferPointerv - GLuint buffer - GLenum pname - void **params - - - void glGetNamedBufferPointervEXT - GLuint buffer - GLenum pname - void **params - - - void glGetNamedBufferSubData - GLuint buffer - GLintptr offset - GLsizei size - void *data - - - void glGetNamedBufferSubDataEXT - GLuint buffer - GLintptr offset - GLsizeiptr size - void *data - - - void glGetNamedFramebufferAttachmentParameteriv - GLuint framebuffer - GLenum attachment - GLenum pname - GLint *params - - - void glGetNamedFramebufferAttachmentParameterivEXT - GLuint framebuffer - GLenum attachment - GLenum pname - GLint *params - - - void glGetNamedFramebufferParameteriv - GLuint framebuffer - GLenum pname - GLint *param - - - void glGetNamedFramebufferParameterivEXT - GLuint framebuffer - GLenum pname - GLint *params - - - void glGetNamedProgramLocalParameterIivEXT - GLuint program - GLenum target - GLuint index - GLint *params - - - void glGetNamedProgramLocalParameterIuivEXT - GLuint program - GLenum target - GLuint index - GLuint *params - - - void glGetNamedProgramLocalParameterdvEXT - GLuint program - GLenum target - GLuint index - GLdouble *params - - - void glGetNamedProgramLocalParameterfvEXT - GLuint program - GLenum target - GLuint index - GLfloat *params - - - void glGetNamedProgramStringEXT - GLuint program - GLenum target - GLenum pname - void *string - - - void glGetNamedProgramivEXT - GLuint program - GLenum target - GLenum pname - GLint *params - - - void glGetNamedRenderbufferParameteriv - GLuint renderbuffer - GLenum pname - GLint *params - - - void glGetNamedRenderbufferParameterivEXT - GLuint renderbuffer - GLenum pname - GLint *params - - - void glGetNamedStringARB - GLint namelen - const GLchar *name - GLsizei bufSize - GLint *stringlen - GLchar *string - - - void glGetNamedStringivARB - GLint namelen - const GLchar *name - GLenum pname - GLint *params - - - void glGetNextPerfQueryIdINTEL - GLuint queryId - GLuint *nextQueryId - - - void glGetObjectBufferfvATI - GLuint buffer - GLenum pname - GLfloat *params - - - void glGetObjectBufferivATI - GLuint buffer - GLenum pname - GLint *params - - - void glGetObjectLabel - GLenum identifier - GLuint name - GLsizei bufSize - GLsizei *length - GLchar *label - - - void glGetObjectLabelEXT - GLenum type - GLuint object - GLsizei bufSize - GLsizei *length - GLchar *label - - - void glGetObjectLabelKHR - GLenum identifier - GLuint name - GLsizei bufSize - GLsizei *length - GLchar *label - - - - void glGetObjectParameterfvARB - GLhandleARB obj - GLenum pname - GLfloat *params - - - void glGetObjectParameterivAPPLE - GLenum objectType - GLuint name - GLenum pname - GLint *params - - - void glGetObjectParameterivARB - GLhandleARB obj - GLenum pname - GLint *params - - - void glGetObjectPtrLabel - const void *ptr - GLsizei bufSize - GLsizei *length - GLchar *label - - - void glGetObjectPtrLabelKHR - const void *ptr - GLsizei bufSize - GLsizei *length - GLchar *label - - - - void glGetOcclusionQueryivNV - GLuint id - GLenum pname - GLint *params - - - void glGetOcclusionQueryuivNV - GLuint id - GLenum pname - GLuint *params - - - void glGetPathColorGenfvNV - GLenum color - GLenum pname - GLfloat *value - - - void glGetPathColorGenivNV - GLenum color - GLenum pname - GLint *value - - - void glGetPathCommandsNV - GLuint path - GLubyte *commands - - - void glGetPathCoordsNV - GLuint path - GLfloat *coords - - - void glGetPathDashArrayNV - GLuint path - GLfloat *dashArray - - - GLfloat glGetPathLengthNV - GLuint path - GLsizei startSegment - GLsizei numSegments - - - void glGetPathMetricRangeNV - GLbitfield metricQueryMask - GLuint firstPathName - GLsizei numPaths - GLsizei stride - GLfloat *metrics - - - void glGetPathMetricsNV - GLbitfield metricQueryMask - GLsizei numPaths - GLenum pathNameType - const void *paths - GLuint pathBase - GLsizei stride - GLfloat *metrics - - - void glGetPathParameterfvNV - GLuint path - GLenum pname - GLfloat *value - - - void glGetPathParameterivNV - GLuint path - GLenum pname - GLint *value - - - void glGetPathSpacingNV - GLenum pathListMode - GLsizei numPaths - GLenum pathNameType - const void *paths - GLuint pathBase - GLfloat advanceScale - GLfloat kerningScale - GLenum transformType - GLfloat *returnedSpacing - - - void glGetPathTexGenfvNV - GLenum texCoordSet - GLenum pname - GLfloat *value - - - void glGetPathTexGenivNV - GLenum texCoordSet - GLenum pname - GLint *value - - - void glGetPerfCounterInfoINTEL - GLuint queryId - GLuint counterId - GLuint counterNameLength - GLchar *counterName - GLuint counterDescLength - GLchar *counterDesc - GLuint *counterOffset - GLuint *counterDataSize - GLuint *counterTypeEnum - GLuint *counterDataTypeEnum - GLuint64 *rawCounterMaxValue - - - void glGetPerfMonitorCounterDataAMD - GLuint monitor - GLenum pname - GLsizei dataSize - GLuint *data - GLint *bytesWritten - - - void glGetPerfMonitorCounterInfoAMD - GLuint group - GLuint counter - GLenum pname - void *data - - - void glGetPerfMonitorCounterStringAMD - GLuint group - GLuint counter - GLsizei bufSize - GLsizei *length - GLchar *counterString - - - void glGetPerfMonitorCountersAMD - GLuint group - GLint *numCounters - GLint *maxActiveCounters - GLsizei counterSize - GLuint *counters - - - void glGetPerfMonitorGroupStringAMD - GLuint group - GLsizei bufSize - GLsizei *length - GLchar *groupString - - - void glGetPerfMonitorGroupsAMD - GLint *numGroups - GLsizei groupsSize - GLuint *groups - - - void glGetPerfQueryDataINTEL - GLuint queryHandle - GLuint flags - GLsizei dataSize - GLvoid *data - GLuint *bytesWritten - - - void glGetPerfQueryIdByNameINTEL - GLchar *queryName - GLuint *queryId - - - void glGetPerfQueryInfoINTEL - GLuint queryId - GLuint queryNameLength - GLchar *queryName - GLuint *dataSize - GLuint *noCounters - GLuint *noInstances - GLuint *capsMask - - - void glGetPixelMapfv - GLenum map - GLfloat *values - - - - - void glGetPixelMapuiv - GLenum map - GLuint *values - - - - - void glGetPixelMapusv - GLenum map - GLushort *values - - - - - void glGetPixelMapxv - GLenum map - GLint size - GLfixed *values - - - void glGetPixelTexGenParameterfvSGIS - GLenum pname - GLfloat *params - - - void glGetPixelTexGenParameterivSGIS - GLenum pname - GLint *params - - - void glGetPixelTransformParameterfvEXT - GLenum target - GLenum pname - GLfloat *params - - - - void glGetPixelTransformParameterivEXT - GLenum target - GLenum pname - GLint *params - - - - void glGetPointerIndexedvEXT - GLenum target - GLuint index - void **data - - - void glGetPointeri_vEXT - GLenum pname - GLuint index - void **params - - - void glGetPointerv - GLenum pname - void **params - - - - void glGetPointervEXT - GLenum pname - void **params - - - - void glGetPointervKHR - GLenum pname - void **params - - - - void glGetPolygonStipple - GLubyte *mask - - - - - void glGetProgramBinary - GLuint program - GLsizei bufSize - GLsizei *length - GLenum *binaryFormat - void *binary - - - void glGetProgramBinaryOES - GLuint program - GLsizei bufSize - GLsizei *length - GLenum *binaryFormat - void *binary - - - - void glGetProgramEnvParameterIivNV - GLenum target - GLuint index - GLint *params - - - void glGetProgramEnvParameterIuivNV - GLenum target - GLuint index - GLuint *params - - - void glGetProgramEnvParameterdvARB - GLenum target - GLuint index - GLdouble *params - - - void glGetProgramEnvParameterfvARB - GLenum target - GLuint index - GLfloat *params - - - void glGetProgramInfoLog - GLuint program - GLsizei bufSize - GLsizei *length - GLchar *infoLog - - - - void glGetProgramInterfaceiv - GLuint program - GLenum programInterface - GLenum pname - GLint *params - - - void glGetProgramLocalParameterIivNV - GLenum target - GLuint index - GLint *params - - - void glGetProgramLocalParameterIuivNV - GLenum target - GLuint index - GLuint *params - - - void glGetProgramLocalParameterdvARB - GLenum target - GLuint index - GLdouble *params - - - void glGetProgramLocalParameterfvARB - GLenum target - GLuint index - GLfloat *params - - - void glGetProgramNamedParameterdvNV - GLuint id - GLsizei len - const GLubyte *name - GLdouble *params - - - - void glGetProgramNamedParameterfvNV - GLuint id - GLsizei len - const GLubyte *name - GLfloat *params - - - - void glGetProgramParameterdvNV - GLenum target - GLuint index - GLenum pname - GLdouble *params - - - - void glGetProgramParameterfvNV - GLenum target - GLuint index - GLenum pname - GLfloat *params - - - - void glGetProgramPipelineInfoLog - GLuint pipeline - GLsizei bufSize - GLsizei *length - GLchar *infoLog - - - void glGetProgramPipelineInfoLogEXT - GLuint pipeline - GLsizei bufSize - GLsizei *length - GLchar *infoLog - - - void glGetProgramPipelineiv - GLuint pipeline - GLenum pname - GLint *params - - - void glGetProgramPipelineivEXT - GLuint pipeline - GLenum pname - GLint *params - - - GLuint glGetProgramResourceIndex - GLuint program - GLenum programInterface - const GLchar *name - - - GLint glGetProgramResourceLocation - GLuint program - GLenum programInterface - const GLchar *name - - - GLint glGetProgramResourceLocationIndex - GLuint program - GLenum programInterface - const GLchar *name - - - void glGetProgramResourceName - GLuint program - GLenum programInterface - GLuint index - GLsizei bufSize - GLsizei *length - GLchar *name - - - void glGetProgramResourcefvNV - GLuint program - GLenum programInterface - GLuint index - GLsizei propCount - const GLenum *props - GLsizei bufSize - GLsizei *length - GLfloat *params - - - void glGetProgramResourceiv - GLuint program - GLenum programInterface - GLuint index - GLsizei propCount - const GLenum *props - GLsizei bufSize - GLsizei *length - GLint *params - - - void glGetProgramStageiv - GLuint program - GLenum shadertype - GLenum pname - GLint *values - - - void glGetProgramStringARB - GLenum target - GLenum pname - void *string - - - void glGetProgramStringNV - GLuint id - GLenum pname - GLubyte *program - - - - void glGetProgramSubroutineParameteruivNV - GLenum target - GLuint index - GLuint *param - - - void glGetProgramiv - GLuint program - GLenum pname - GLint *params - - - - void glGetProgramivARB - GLenum target - GLenum pname - GLint *params - - - void glGetProgramivNV - GLuint id - GLenum pname - GLint *params - - - - void glGetQueryIndexediv - GLenum target - GLuint index - GLenum pname - GLint *params - - - void glGetQueryObjecti64v - GLuint id - GLenum pname - GLint64 *params - - - void glGetQueryObjecti64vEXT - GLuint id - GLenum pname - GLint64 *params - - - - - void glGetQueryObjectiv - GLuint id - GLenum pname - GLint *params - - - - void glGetQueryObjectivARB - GLuint id - GLenum pname - GLint *params - - - - void glGetQueryObjectivEXT - GLuint id - GLenum pname - GLint *params - - - - void glGetQueryObjectui64v - GLuint id - GLenum pname - GLuint64 *params - - - void glGetQueryObjectui64vEXT - GLuint id - GLenum pname - GLuint64 *params - - - - - void glGetQueryObjectuiv - GLuint id - GLenum pname - GLuint *params - - - - void glGetQueryObjectuivARB - GLuint id - GLenum pname - GLuint *params - - - - void glGetQueryObjectuivEXT - GLuint id - GLenum pname - GLuint *params - - - void glGetQueryiv - GLenum target - GLenum pname - GLint *params - - - - void glGetQueryivARB - GLenum target - GLenum pname - GLint *params - - - - void glGetQueryivEXT - GLenum target - GLenum pname - GLint *params - - - void glGetRenderbufferParameteriv - GLenum target - GLenum pname - GLint *params - - - - void glGetRenderbufferParameterivEXT - GLenum target - GLenum pname - GLint *params - - - - - void glGetRenderbufferParameterivOES - GLenum target - GLenum pname - GLint *params - - - void glGetSamplerParameterIiv - GLuint sampler - GLenum pname - GLint *params - - - void glGetSamplerParameterIivEXT - GLuint sampler - GLenum pname - GLint *params - - - - void glGetSamplerParameterIuiv - GLuint sampler - GLenum pname - GLuint *params - - - void glGetSamplerParameterIuivEXT - GLuint sampler - GLenum pname - GLuint *params - - - - void glGetSamplerParameterfv - GLuint sampler - GLenum pname - GLfloat *params - - - void glGetSamplerParameteriv - GLuint sampler - GLenum pname - GLint *params - - - void glGetSeparableFilter - GLenum target - GLenum format - GLenum type - void *row - void *column - void *span - - - - - void glGetSeparableFilterEXT - GLenum target - GLenum format - GLenum type - void *row - void *column - void *span - - - - void glGetShaderInfoLog - GLuint shader - GLsizei bufSize - GLsizei *length - GLchar *infoLog - - - - void glGetShaderPrecisionFormat - GLenum shadertype - GLenum precisiontype - GLint *range - GLint *precision - - - void glGetShaderSource - GLuint shader - GLsizei bufSize - GLsizei *length - GLchar *source - - - void glGetShaderSourceARB - GLhandleARB obj - GLsizei maxLength - GLsizei *length - GLcharARB *source - - - - void glGetShaderiv - GLuint shader - GLenum pname - GLint *params - - - - void glGetSharpenTexFuncSGIS - GLenum target - GLfloat *points - - - - const GLubyte *glGetString - GLenum name - - - - const GLubyte *glGetStringi - GLenum name - GLuint index - - - GLuint glGetSubroutineIndex - GLuint program - GLenum shadertype - const GLchar *name - - - GLint glGetSubroutineUniformLocation - GLuint program - GLenum shadertype - const GLchar *name - - - void glGetSynciv - GLsync sync - GLenum pname - GLsizei bufSize - GLsizei *length - GLint *values - - - void glGetSyncivAPPLE - GLsync sync - GLenum pname - GLsizei bufSize - GLsizei *length - GLint *values - - - - void glGetTexBumpParameterfvATI - GLenum pname - GLfloat *param - - - void glGetTexBumpParameterivATI - GLenum pname - GLint *param - - - void glGetTexEnvfv - GLenum target - GLenum pname - GLfloat *params - - - - void glGetTexEnviv - GLenum target - GLenum pname - GLint *params - - - - void glGetTexEnvxv - GLenum target - GLenum pname - GLfixed *params - - - void glGetTexEnvxvOES - GLenum target - GLenum pname - GLfixed *params - - - void glGetTexFilterFuncSGIS - GLenum target - GLenum filter - GLfloat *weights - - - - void glGetTexGendv - GLenum coord - GLenum pname - GLdouble *params - - - - void glGetTexGenfv - GLenum coord - GLenum pname - GLfloat *params - - - - void glGetTexGenfvOES - GLenum coord - GLenum pname - GLfloat *params - - - void glGetTexGeniv - GLenum coord - GLenum pname - GLint *params - - - - void glGetTexGenivOES - GLenum coord - GLenum pname - GLint *params - - - void glGetTexGenxvOES - GLenum coord - GLenum pname - GLfixed *params - - - void glGetTexImage - GLenum target - GLint level - GLenum format - GLenum type - void *pixels - - - - - void glGetTexLevelParameterfv - GLenum target - GLint level - GLenum pname - GLfloat *params - - - - void glGetTexLevelParameteriv - GLenum target - GLint level - GLenum pname - GLint *params - - - - void glGetTexLevelParameterxvOES - GLenum target - GLint level - GLenum pname - GLfixed *params - - - void glGetTexParameterIiv - GLenum target - GLenum pname - GLint *params - - - - void glGetTexParameterIivEXT - GLenum target - GLenum pname - GLint *params - - - - void glGetTexParameterIuiv - GLenum target - GLenum pname - GLuint *params - - - - void glGetTexParameterIuivEXT - GLenum target - GLenum pname - GLuint *params - - - - void glGetTexParameterPointervAPPLE - GLenum target - GLenum pname - void **params - - - void glGetTexParameterfv - GLenum target - GLenum pname - GLfloat *params - - - - void glGetTexParameteriv - GLenum target - GLenum pname - GLint *params - - - - void glGetTexParameterxv - GLenum target - GLenum pname - GLfixed *params - - - void glGetTexParameterxvOES - GLenum target - GLenum pname - GLfixed *params - - - GLuint64 glGetTextureHandleARB - GLuint texture - - - GLuint64 glGetTextureHandleNV - GLuint texture - - - void glGetTextureImage - GLuint texture - GLint level - GLenum format - GLenum type - GLsizei bufSize - void *pixels - - - void glGetTextureImageEXT - GLuint texture - GLenum target - GLint level - GLenum format - GLenum type - void *pixels - - - void glGetTextureLevelParameterfv - GLuint texture - GLint level - GLenum pname - GLfloat *params - - - void glGetTextureLevelParameterfvEXT - GLuint texture - GLenum target - GLint level - GLenum pname - GLfloat *params - - - void glGetTextureLevelParameteriv - GLuint texture - GLint level - GLenum pname - GLint *params - - - void glGetTextureLevelParameterivEXT - GLuint texture - GLenum target - GLint level - GLenum pname - GLint *params - - - void glGetTextureParameterIiv - GLuint texture - GLenum pname - GLint *params - - - void glGetTextureParameterIivEXT - GLuint texture - GLenum target - GLenum pname - GLint *params - - - void glGetTextureParameterIuiv - GLuint texture - GLenum pname - GLuint *params - - - void glGetTextureParameterIuivEXT - GLuint texture - GLenum target - GLenum pname - GLuint *params - - - void glGetTextureParameterfv - GLuint texture - GLenum pname - GLfloat *params - - - void glGetTextureParameterfvEXT - GLuint texture - GLenum target - GLenum pname - GLfloat *params - - - void glGetTextureParameteriv - GLuint texture - GLenum pname - GLint *params - - - void glGetTextureParameterivEXT - GLuint texture - GLenum target - GLenum pname - GLint *params - - - GLuint64 glGetTextureSamplerHandleARB - GLuint texture - GLuint sampler - - - GLuint64 glGetTextureSamplerHandleNV - GLuint texture - GLuint sampler - - - void glGetTextureSubImage - GLuint texture - GLint level - GLint xoffset - GLint yoffset - GLint zoffset - GLsizei width - GLsizei height - GLsizei depth - GLenum format - GLenum type - GLsizei bufSize - void *pixels - - - void glGetTrackMatrixivNV - GLenum target - GLuint address - GLenum pname - GLint *params - - - - void glGetTransformFeedbackVarying - GLuint program - GLuint index - GLsizei bufSize - GLsizei *length - GLsizei *size - GLenum *type - GLchar *name - - - void glGetTransformFeedbackVaryingEXT - GLuint program - GLuint index - GLsizei bufSize - GLsizei *length - GLsizei *size - GLenum *type - GLchar *name - - - - void glGetTransformFeedbackVaryingNV - GLuint program - GLuint index - GLint *location - - - void glGetTransformFeedbacki64_v - GLuint xfb - GLenum pname - GLuint index - GLint64 *param - - - void glGetTransformFeedbacki_v - GLuint xfb - GLenum pname - GLuint index - GLint *param - - - void glGetTransformFeedbackiv - GLuint xfb - GLenum pname - GLint *param - - - void glGetTranslatedShaderSourceANGLE - GLuint shader - GLsizei bufsize - GLsizei *length - GLchar *source - - - GLuint glGetUniformBlockIndex - GLuint program - const GLchar *uniformBlockName - - - GLint glGetUniformBufferSizeEXT - GLuint program - GLint location - - - void glGetUniformIndices - GLuint program - GLsizei uniformCount - const GLchar *const*uniformNames - GLuint *uniformIndices - - - GLint glGetUniformLocation - GLuint program - const GLchar *name - - - GLint glGetUniformLocationARB - GLhandleARB programObj - const GLcharARB *name - - - - GLintptr glGetUniformOffsetEXT - GLuint program - GLint location - - - void glGetUniformSubroutineuiv - GLenum shadertype - GLint location - GLuint *params - - - void glGetUniformdv - GLuint program - GLint location - GLdouble *params - - - void glGetUniformfv - GLuint program - GLint location - GLfloat *params - - - void glGetUniformfvARB - GLhandleARB programObj - GLint location - GLfloat *params - - - - void glGetUniformi64vNV - GLuint program - GLint location - GLint64EXT *params - - - void glGetUniformiv - GLuint program - GLint location - GLint *params - - - void glGetUniformivARB - GLhandleARB programObj - GLint location - GLint *params - - - - void glGetUniformui64vNV - GLuint program - GLint location - GLuint64EXT *params - - - void glGetUniformuiv - GLuint program - GLint location - GLuint *params - - - void glGetUniformuivEXT - GLuint program - GLint location - GLuint *params - - - - void glGetVariantArrayObjectfvATI - GLuint id - GLenum pname - GLfloat *params - - - void glGetVariantArrayObjectivATI - GLuint id - GLenum pname - GLint *params - - - void glGetVariantBooleanvEXT - GLuint id - GLenum value - GLboolean *data - - - void glGetVariantFloatvEXT - GLuint id - GLenum value - GLfloat *data - - - void glGetVariantIntegervEXT - GLuint id - GLenum value - GLint *data - - - void glGetVariantPointervEXT - GLuint id - GLenum value - void **data - - - GLint glGetVaryingLocationNV - GLuint program - const GLchar *name - - - void glGetVertexArrayIndexed64iv - GLuint vaobj - GLuint index - GLenum pname - GLint64 *param - - - void glGetVertexArrayIndexediv - GLuint vaobj - GLuint index - GLenum pname - GLint *param - - - void glGetVertexArrayIntegeri_vEXT - GLuint vaobj - GLuint index - GLenum pname - GLint *param - - - void glGetVertexArrayIntegervEXT - GLuint vaobj - GLenum pname - GLint *param - - - void glGetVertexArrayPointeri_vEXT - GLuint vaobj - GLuint index - GLenum pname - void **param - - - void glGetVertexArrayPointervEXT - GLuint vaobj - GLenum pname - void **param - - - void glGetVertexArrayiv - GLuint vaobj - GLenum pname - GLint *param - - - void glGetVertexAttribArrayObjectfvATI - GLuint index - GLenum pname - GLfloat *params - - - void glGetVertexAttribArrayObjectivATI - GLuint index - GLenum pname - GLint *params - - - void glGetVertexAttribIiv - GLuint index - GLenum pname - GLint *params - - - void glGetVertexAttribIivEXT - GLuint index - GLenum pname - GLint *params - - - - void glGetVertexAttribIuiv - GLuint index - GLenum pname - GLuint *params - - - void glGetVertexAttribIuivEXT - GLuint index - GLenum pname - GLuint *params - - - - void glGetVertexAttribLdv - GLuint index - GLenum pname - GLdouble *params - - - void glGetVertexAttribLdvEXT - GLuint index - GLenum pname - GLdouble *params - - - - void glGetVertexAttribLi64vNV - GLuint index - GLenum pname - GLint64EXT *params - - - void glGetVertexAttribLui64vARB - GLuint index - GLenum pname - GLuint64EXT *params - - - void glGetVertexAttribLui64vNV - GLuint index - GLenum pname - GLuint64EXT *params - - - void glGetVertexAttribPointerv - GLuint index - GLenum pname - void **pointer - - - - void glGetVertexAttribPointervARB - GLuint index - GLenum pname - void **pointer - - - - void glGetVertexAttribPointervNV - GLuint index - GLenum pname - void **pointer - - - - void glGetVertexAttribdv - GLuint index - GLenum pname - GLdouble *params - - - - void glGetVertexAttribdvARB - GLuint index - GLenum pname - GLdouble *params - - - - - void glGetVertexAttribdvNV - GLuint index - GLenum pname - GLdouble *params - - - - - void glGetVertexAttribfv - GLuint index - GLenum pname - GLfloat *params - - - - void glGetVertexAttribfvARB - GLuint index - GLenum pname - GLfloat *params - - - - - void glGetVertexAttribfvNV - GLuint index - GLenum pname - GLfloat *params - - - - - void glGetVertexAttribiv - GLuint index - GLenum pname - GLint *params - - - - void glGetVertexAttribivARB - GLuint index - GLenum pname - GLint *params - - - - - void glGetVertexAttribivNV - GLuint index - GLenum pname - GLint *params - - - - - void glGetVideoCaptureStreamdvNV - GLuint video_capture_slot - GLuint stream - GLenum pname - GLdouble *params - - - void glGetVideoCaptureStreamfvNV - GLuint video_capture_slot - GLuint stream - GLenum pname - GLfloat *params - - - void glGetVideoCaptureStreamivNV - GLuint video_capture_slot - GLuint stream - GLenum pname - GLint *params - - - void glGetVideoCaptureivNV - GLuint video_capture_slot - GLenum pname - GLint *params - - - void glGetVideoi64vNV - GLuint video_slot - GLenum pname - GLint64EXT *params - - - void glGetVideoivNV - GLuint video_slot - GLenum pname - GLint *params - - - void glGetVideoui64vNV - GLuint video_slot - GLenum pname - GLuint64EXT *params - - - void glGetVideouivNV - GLuint video_slot - GLenum pname - GLuint *params - - - void glGetnColorTable - GLenum target - GLenum format - GLenum type - GLsizei bufSize - void *table - - - void glGetnColorTableARB - GLenum target - GLenum format - GLenum type - GLsizei bufSize - void *table - - - void glGetnCompressedTexImage - GLenum target - GLint lod - GLsizei bufSize - void *pixels - - - void glGetnCompressedTexImageARB - GLenum target - GLint lod - GLsizei bufSize - void *img - - - void glGetnConvolutionFilter - GLenum target - GLenum format - GLenum type - GLsizei bufSize - void *image - - - void glGetnConvolutionFilterARB - GLenum target - GLenum format - GLenum type - GLsizei bufSize - void *image - - - void glGetnHistogram - GLenum target - GLboolean reset - GLenum format - GLenum type - GLsizei bufSize - void *values - - - void glGetnHistogramARB - GLenum target - GLboolean reset - GLenum format - GLenum type - GLsizei bufSize - void *values - - - void glGetnMapdv - GLenum target - GLenum query - GLsizei bufSize - GLdouble *v - - - void glGetnMapdvARB - GLenum target - GLenum query - GLsizei bufSize - GLdouble *v - - - void glGetnMapfv - GLenum target - GLenum query - GLsizei bufSize - GLfloat *v - - - void glGetnMapfvARB - GLenum target - GLenum query - GLsizei bufSize - GLfloat *v - - - void glGetnMapiv - GLenum target - GLenum query - GLsizei bufSize - GLint *v - - - void glGetnMapivARB - GLenum target - GLenum query - GLsizei bufSize - GLint *v - - - void glGetnMinmax - GLenum target - GLboolean reset - GLenum format - GLenum type - GLsizei bufSize - void *values - - - void glGetnMinmaxARB - GLenum target - GLboolean reset - GLenum format - GLenum type - GLsizei bufSize - void *values - - - void glGetnPixelMapfv - GLenum map - GLsizei bufSize - GLfloat *values - - - void glGetnPixelMapfvARB - GLenum map - GLsizei bufSize - GLfloat *values - - - void glGetnPixelMapuiv - GLenum map - GLsizei bufSize - GLuint *values - - - void glGetnPixelMapuivARB - GLenum map - GLsizei bufSize - GLuint *values - - - void glGetnPixelMapusv - GLenum map - GLsizei bufSize - GLushort *values - - - void glGetnPixelMapusvARB - GLenum map - GLsizei bufSize - GLushort *values - - - void glGetnPolygonStipple - GLsizei bufSize - GLubyte *pattern - - - void glGetnPolygonStippleARB - GLsizei bufSize - GLubyte *pattern - - - void glGetnSeparableFilter - GLenum target - GLenum format - GLenum type - GLsizei rowBufSize - void *row - GLsizei columnBufSize - void *column - void *span - - - void glGetnSeparableFilterARB - GLenum target - GLenum format - GLenum type - GLsizei rowBufSize - void *row - GLsizei columnBufSize - void *column - void *span - - - void glGetnTexImage - GLenum target - GLint level - GLenum format - GLenum type - GLsizei bufSize - void *pixels - - - void glGetnTexImageARB - GLenum target - GLint level - GLenum format - GLenum type - GLsizei bufSize - void *img - - - void glGetnUniformdv - GLuint program - GLint location - GLsizei bufSize - GLdouble *params - - - void glGetnUniformdvARB - GLuint program - GLint location - GLsizei bufSize - GLdouble *params - - - void glGetnUniformfv - GLuint program - GLint location - GLsizei bufSize - GLfloat *params - - - void glGetnUniformfvARB - GLuint program - GLint location - GLsizei bufSize - GLfloat *params - - - void glGetnUniformfvEXT - GLuint program - GLint location - GLsizei bufSize - GLfloat *params - - - void glGetnUniformfvKHR - GLuint program - GLint location - GLsizei bufSize - GLfloat *params - - - - void glGetnUniformiv - GLuint program - GLint location - GLsizei bufSize - GLint *params - - - void glGetnUniformivARB - GLuint program - GLint location - GLsizei bufSize - GLint *params - - - void glGetnUniformivEXT - GLuint program - GLint location - GLsizei bufSize - GLint *params - - - void glGetnUniformivKHR - GLuint program - GLint location - GLsizei bufSize - GLint *params - - - - void glGetnUniformuiv - GLuint program - GLint location - GLsizei bufSize - GLuint *params - - - void glGetnUniformuivARB - GLuint program - GLint location - GLsizei bufSize - GLuint *params - - - void glGetnUniformuivKHR - GLuint program - GLint location - GLsizei bufSize - GLuint *params - - - - void glGlobalAlphaFactorbSUN - GLbyte factor - - - void glGlobalAlphaFactordSUN - GLdouble factor - - - void glGlobalAlphaFactorfSUN - GLfloat factor - - - void glGlobalAlphaFactoriSUN - GLint factor - - - void glGlobalAlphaFactorsSUN - GLshort factor - - - void glGlobalAlphaFactorubSUN - GLubyte factor - - - void glGlobalAlphaFactoruiSUN - GLuint factor - - - void glGlobalAlphaFactorusSUN - GLushort factor - - - void glHint - GLenum target - GLenum mode - - - - void glHintPGI - GLenum target - GLint mode - - - void glHistogram - GLenum target - GLsizei width - GLenum internalformat - GLboolean sink - - - - void glHistogramEXT - GLenum target - GLsizei width - GLenum internalformat - GLboolean sink - - - - - void glIglooInterfaceSGIX - GLenum pname - const void *params - - - - void glImageTransformParameterfHP - GLenum target - GLenum pname - GLfloat param - - - void glImageTransformParameterfvHP - GLenum target - GLenum pname - const GLfloat *params - - - void glImageTransformParameteriHP - GLenum target - GLenum pname - GLint param - - - void glImageTransformParameterivHP - GLenum target - GLenum pname - const GLint *params - - - GLsync glImportSyncEXT - GLenum external_sync_type - GLintptr external_sync - GLbitfield flags - - - void glIndexFormatNV - GLenum type - GLsizei stride - - - void glIndexFuncEXT - GLenum func - GLclampf ref - - - void glIndexMask - GLuint mask - - - - void glIndexMaterialEXT - GLenum face - GLenum mode - - - void glIndexPointer - GLenum type - GLsizei stride - const void *pointer - - - void glIndexPointerEXT - GLenum type - GLsizei stride - GLsizei count - const void *pointer - - - void glIndexPointerListIBM - GLenum type - GLint stride - const void **pointer - GLint ptrstride - - - void glIndexd - GLdouble c - - - - void glIndexdv - const GLdouble *c - - - - void glIndexf - GLfloat c - - - - void glIndexfv - const GLfloat *c - - - - void glIndexi - GLint c - - - - void glIndexiv - const GLint *c - - - - void glIndexs - GLshort c - - - - void glIndexsv - const GLshort *c - - - - void glIndexub - GLubyte c - - - - void glIndexubv - const GLubyte *c - - - - void glIndexxOES - GLfixed component - - - void glIndexxvOES - const GLfixed *component - - - void glInitNames - - - - void glInsertComponentEXT - GLuint res - GLuint src - GLuint num - - - void glInsertEventMarkerEXT - GLsizei length - const GLchar *marker - - - void glInstrumentsBufferSGIX - GLsizei size - GLint *buffer - - - - void glInterleavedArrays - GLenum format - GLsizei stride - const void *pointer - - - void glInterpolatePathsNV - GLuint resultPath - GLuint pathA - GLuint pathB - GLfloat weight - - - void glInvalidateBufferData - GLuint buffer - - - void glInvalidateBufferSubData - GLuint buffer - GLintptr offset - GLsizeiptr length - - - void glInvalidateFramebuffer - GLenum target - GLsizei numAttachments - const GLenum *attachments - - - void glInvalidateNamedFramebufferData - GLuint framebuffer - GLsizei numAttachments - const GLenum *attachments - - - void glInvalidateNamedFramebufferSubData - GLuint framebuffer - GLsizei numAttachments - const GLenum *attachments - GLint x - GLint y - GLsizei width - GLsizei height - - - void glInvalidateSubFramebuffer - GLenum target - GLsizei numAttachments - const GLenum *attachments - GLint x - GLint y - GLsizei width - GLsizei height - - - void glInvalidateTexImage - GLuint texture - GLint level - - - void glInvalidateTexSubImage - GLuint texture - GLint level - GLint xoffset - GLint yoffset - GLint zoffset - GLsizei width - GLsizei height - GLsizei depth - - - GLboolean glIsAsyncMarkerSGIX - GLuint marker - - - GLboolean glIsBuffer - GLuint buffer - - - GLboolean glIsBufferARB - GLuint buffer - - - - GLboolean glIsBufferResidentNV - GLenum target - - - GLboolean glIsEnabled - GLenum cap - - - - GLboolean glIsEnabledIndexedEXT - GLenum target - GLuint index - - - - GLboolean glIsEnabledi - GLenum target - GLuint index - - - GLboolean glIsEnablediEXT - GLenum target - GLuint index - - - - GLboolean glIsFenceAPPLE - GLuint fence - - - GLboolean glIsFenceNV - GLuint fence - - - - GLboolean glIsFramebuffer - GLuint framebuffer - - - - GLboolean glIsFramebufferEXT - GLuint framebuffer - - - - - GLboolean glIsFramebufferOES - GLuint framebuffer - - - GLboolean glIsImageHandleResidentARB - GLuint64 handle - - - GLboolean glIsImageHandleResidentNV - GLuint64 handle - - - GLboolean glIsList - GLuint list - - - - GLboolean glIsNameAMD - GLenum identifier - GLuint name - - - GLboolean glIsNamedBufferResidentNV - GLuint buffer - - - GLboolean glIsNamedStringARB - GLint namelen - const GLchar *name - - - GLboolean glIsObjectBufferATI - GLuint buffer - - - GLboolean glIsOcclusionQueryNV - GLuint id - - - GLboolean glIsPathNV - GLuint path - - - GLboolean glIsPointInFillPathNV - GLuint path - GLuint mask - GLfloat x - GLfloat y - - - GLboolean glIsPointInStrokePathNV - GLuint path - GLfloat x - GLfloat y - - - GLboolean glIsProgram - GLuint program - - - - GLboolean glIsProgramARB - GLuint program - - - - GLboolean glIsProgramNV - GLuint id - - - - - GLboolean glIsProgramPipeline - GLuint pipeline - - - GLboolean glIsProgramPipelineEXT - GLuint pipeline - - - GLboolean glIsQuery - GLuint id - - - - GLboolean glIsQueryARB - GLuint id - - - - GLboolean glIsQueryEXT - GLuint id - - - GLboolean glIsRenderbuffer - GLuint renderbuffer - - - - GLboolean glIsRenderbufferEXT - GLuint renderbuffer - - - - - GLboolean glIsRenderbufferOES - GLuint renderbuffer - - - GLboolean glIsSampler - GLuint sampler - - - GLboolean glIsShader - GLuint shader - - - - GLboolean glIsSync - GLsync sync - - - GLboolean glIsSyncAPPLE - GLsync sync - - - - GLboolean glIsTexture - GLuint texture - - - - GLboolean glIsTextureEXT - GLuint texture - - - - GLboolean glIsTextureHandleResidentARB - GLuint64 handle - - - GLboolean glIsTextureHandleResidentNV - GLuint64 handle - - - GLboolean glIsTransformFeedback - GLuint id - - - GLboolean glIsTransformFeedbackNV - GLuint id - - - - GLboolean glIsVariantEnabledEXT - GLuint id - GLenum cap - - - GLboolean glIsVertexArray - GLuint array - - - - GLboolean glIsVertexArrayAPPLE - GLuint array - - - - GLboolean glIsVertexArrayOES - GLuint array - - - - GLboolean glIsVertexAttribEnabledAPPLE - GLuint index - GLenum pname - - - void glLabelObjectEXT - GLenum type - GLuint object - GLsizei length - const GLchar *label - - - void glLightEnviSGIX - GLenum pname - GLint param - - - void glLightModelf - GLenum pname - GLfloat param - - - - void glLightModelfv - GLenum pname - const GLfloat *params - - - - void glLightModeli - GLenum pname - GLint param - - - - void glLightModeliv - GLenum pname - const GLint *params - - - - void glLightModelx - GLenum pname - GLfixed param - - - void glLightModelxOES - GLenum pname - GLfixed param - - - void glLightModelxv - GLenum pname - const GLfixed *param - - - void glLightModelxvOES - GLenum pname - const GLfixed *param - - - void glLightf - GLenum light - GLenum pname - GLfloat param - - - - void glLightfv - GLenum light - GLenum pname - const GLfloat *params - - - - void glLighti - GLenum light - GLenum pname - GLint param - - - - void glLightiv - GLenum light - GLenum pname - const GLint *params - - - - void glLightx - GLenum light - GLenum pname - GLfixed param - - - void glLightxOES - GLenum light - GLenum pname - GLfixed param - - - void glLightxv - GLenum light - GLenum pname - const GLfixed *params - - - void glLightxvOES - GLenum light - GLenum pname - const GLfixed *params - - - void glLineStipple - GLint factor - GLushort pattern - - - - void glLineWidth - GLfloat width - - - - void glLineWidthx - GLfixed width - - - void glLineWidthxOES - GLfixed width - - - void glLinkProgram - GLuint program - - - void glLinkProgramARB - GLhandleARB programObj - - - - void glListBase - GLuint base - - - - void glListParameterfSGIX - GLuint list - GLenum pname - GLfloat param - - - - void glListParameterfvSGIX - GLuint list - GLenum pname - const GLfloat *params - - - - void glListParameteriSGIX - GLuint list - GLenum pname - GLint param - - - - void glListParameterivSGIX - GLuint list - GLenum pname - const GLint *params - - - - void glLoadIdentity - - - - void glLoadIdentityDeformationMapSGIX - GLbitfield mask - - - - void glLoadMatrixd - const GLdouble *m - - - - void glLoadMatrixf - const GLfloat *m - - - - void glLoadMatrixx - const GLfixed *m - - - void glLoadMatrixxOES - const GLfixed *m - - - void glLoadName - GLuint name - - - - void glLoadPaletteFromModelViewMatrixOES - - - void glLoadProgramNV - GLenum target - GLuint id - GLsizei len - const GLubyte *program - - - - void glLoadTransposeMatrixd - const GLdouble *m - - - void glLoadTransposeMatrixdARB - const GLdouble *m - - - - void glLoadTransposeMatrixf - const GLfloat *m - - - void glLoadTransposeMatrixfARB - const GLfloat *m - - - - void glLoadTransposeMatrixxOES - const GLfixed *m - - - void glLockArraysEXT - GLint first - GLsizei count - - - void glLogicOp - GLenum opcode - - - - void glMakeBufferNonResidentNV - GLenum target - - - void glMakeBufferResidentNV - GLenum target - GLenum access - - - void glMakeImageHandleNonResidentARB - GLuint64 handle - - - void glMakeImageHandleNonResidentNV - GLuint64 handle - - - void glMakeImageHandleResidentARB - GLuint64 handle - GLenum access - - - void glMakeImageHandleResidentNV - GLuint64 handle - GLenum access - - - void glMakeNamedBufferNonResidentNV - GLuint buffer - - - void glMakeNamedBufferResidentNV - GLuint buffer - GLenum access - - - void glMakeTextureHandleNonResidentARB - GLuint64 handle - - - void glMakeTextureHandleNonResidentNV - GLuint64 handle - - - void glMakeTextureHandleResidentARB - GLuint64 handle - - - void glMakeTextureHandleResidentNV - GLuint64 handle - - - void glMap1d - GLenum target - GLdouble u1 - GLdouble u2 - GLint stride - GLint order - const GLdouble *points - - - - void glMap1f - GLenum target - GLfloat u1 - GLfloat u2 - GLint stride - GLint order - const GLfloat *points - - - - void glMap1xOES - GLenum target - GLfixed u1 - GLfixed u2 - GLint stride - GLint order - GLfixed points - - - void glMap2d - GLenum target - GLdouble u1 - GLdouble u2 - GLint ustride - GLint uorder - GLdouble v1 - GLdouble v2 - GLint vstride - GLint vorder - const GLdouble *points - - - - void glMap2f - GLenum target - GLfloat u1 - GLfloat u2 - GLint ustride - GLint uorder - GLfloat v1 - GLfloat v2 - GLint vstride - GLint vorder - const GLfloat *points - - - - void glMap2xOES - GLenum target - GLfixed u1 - GLfixed u2 - GLint ustride - GLint uorder - GLfixed v1 - GLfixed v2 - GLint vstride - GLint vorder - GLfixed points - - - void *glMapBuffer - GLenum target - GLenum access - - - void *glMapBufferARB - GLenum target - GLenum access - - - - void *glMapBufferOES - GLenum target - GLenum access - - - - void *glMapBufferRange - GLenum target - GLintptr offset - GLsizeiptr length - GLbitfield access - - - - void *glMapBufferRangeEXT - GLenum target - GLintptr offset - GLsizeiptr length - GLbitfield access - - - - void glMapControlPointsNV - GLenum target - GLuint index - GLenum type - GLsizei ustride - GLsizei vstride - GLint uorder - GLint vorder - GLboolean packed - const void *points - - - void glMapGrid1d - GLint un - GLdouble u1 - GLdouble u2 - - - - void glMapGrid1f - GLint un - GLfloat u1 - GLfloat u2 - - - - void glMapGrid1xOES - GLint n - GLfixed u1 - GLfixed u2 - - - void glMapGrid2d - GLint un - GLdouble u1 - GLdouble u2 - GLint vn - GLdouble v1 - GLdouble v2 - - - - void glMapGrid2f - GLint un - GLfloat u1 - GLfloat u2 - GLint vn - GLfloat v1 - GLfloat v2 - - - - void glMapGrid2xOES - GLint n - GLfixed u1 - GLfixed u2 - GLfixed v1 - GLfixed v2 - - - void *glMapNamedBuffer - GLuint buffer - GLenum access - - - void *glMapNamedBufferEXT - GLuint buffer - GLenum access - - - void *glMapNamedBufferRange - GLuint buffer - GLintptr offset - GLsizei length - GLbitfield access - - - void *glMapNamedBufferRangeEXT - GLuint buffer - GLintptr offset - GLsizeiptr length - GLbitfield access - - - void *glMapObjectBufferATI - GLuint buffer - - - void glMapParameterfvNV - GLenum target - GLenum pname - const GLfloat *params - - - void glMapParameterivNV - GLenum target - GLenum pname - const GLint *params - - - void *glMapTexture2DINTEL - GLuint texture - GLint level - GLbitfield access - GLint *stride - GLenum *layout - - - void glMapVertexAttrib1dAPPLE - GLuint index - GLuint size - GLdouble u1 - GLdouble u2 - GLint stride - GLint order - const GLdouble *points - - - void glMapVertexAttrib1fAPPLE - GLuint index - GLuint size - GLfloat u1 - GLfloat u2 - GLint stride - GLint order - const GLfloat *points - - - void glMapVertexAttrib2dAPPLE - GLuint index - GLuint size - GLdouble u1 - GLdouble u2 - GLint ustride - GLint uorder - GLdouble v1 - GLdouble v2 - GLint vstride - GLint vorder - const GLdouble *points - - - void glMapVertexAttrib2fAPPLE - GLuint index - GLuint size - GLfloat u1 - GLfloat u2 - GLint ustride - GLint uorder - GLfloat v1 - GLfloat v2 - GLint vstride - GLint vorder - const GLfloat *points - - - void glMaterialf - GLenum face - GLenum pname - GLfloat param - - - - void glMaterialfv - GLenum face - GLenum pname - const GLfloat *params - - - - void glMateriali - GLenum face - GLenum pname - GLint param - - - - void glMaterialiv - GLenum face - GLenum pname - const GLint *params - - - - void glMaterialx - GLenum face - GLenum pname - GLfixed param - - - void glMaterialxOES - GLenum face - GLenum pname - GLfixed param - - - void glMaterialxv - GLenum face - GLenum pname - const GLfixed *param - - - void glMaterialxvOES - GLenum face - GLenum pname - const GLfixed *param - - - void glMatrixFrustumEXT - GLenum mode - GLdouble left - GLdouble right - GLdouble bottom - GLdouble top - GLdouble zNear - GLdouble zFar - - - void glMatrixIndexPointerARB - GLint size - GLenum type - GLsizei stride - const void *pointer - - - void glMatrixIndexPointerOES - GLint size - GLenum type - GLsizei stride - const void *pointer - - - void glMatrixIndexubvARB - GLint size - const GLubyte *indices - - - - void glMatrixIndexuivARB - GLint size - const GLuint *indices - - - - void glMatrixIndexusvARB - GLint size - const GLushort *indices - - - - void glMatrixLoad3x2fNV - GLenum matrixMode - const GLfloat *m - - - void glMatrixLoad3x3fNV - GLenum matrixMode - const GLfloat *m - - - void glMatrixLoadIdentityEXT - GLenum mode - - - void glMatrixLoadTranspose3x3fNV - GLenum matrixMode - const GLfloat *m - - - void glMatrixLoadTransposedEXT - GLenum mode - const GLdouble *m - - - void glMatrixLoadTransposefEXT - GLenum mode - const GLfloat *m - - - void glMatrixLoaddEXT - GLenum mode - const GLdouble *m - - - void glMatrixLoadfEXT - GLenum mode - const GLfloat *m - - - void glMatrixMode - GLenum mode - - - - void glMatrixMult3x2fNV - GLenum matrixMode - const GLfloat *m - - - void glMatrixMult3x3fNV - GLenum matrixMode - const GLfloat *m - - - void glMatrixMultTranspose3x3fNV - GLenum matrixMode - const GLfloat *m - - - void glMatrixMultTransposedEXT - GLenum mode - const GLdouble *m - - - void glMatrixMultTransposefEXT - GLenum mode - const GLfloat *m - - - void glMatrixMultdEXT - GLenum mode - const GLdouble *m - - - void glMatrixMultfEXT - GLenum mode - const GLfloat *m - - - void glMatrixOrthoEXT - GLenum mode - GLdouble left - GLdouble right - GLdouble bottom - GLdouble top - GLdouble zNear - GLdouble zFar - - - void glMatrixPopEXT - GLenum mode - - - void glMatrixPushEXT - GLenum mode - - - void glMatrixRotatedEXT - GLenum mode - GLdouble angle - GLdouble x - GLdouble y - GLdouble z - - - void glMatrixRotatefEXT - GLenum mode - GLfloat angle - GLfloat x - GLfloat y - GLfloat z - - - void glMatrixScaledEXT - GLenum mode - GLdouble x - GLdouble y - GLdouble z - - - void glMatrixScalefEXT - GLenum mode - GLfloat x - GLfloat y - GLfloat z - - - void glMatrixTranslatedEXT - GLenum mode - GLdouble x - GLdouble y - GLdouble z - - - void glMatrixTranslatefEXT - GLenum mode - GLfloat x - GLfloat y - GLfloat z - - - void glMemoryBarrier - GLbitfield barriers - - - void glMemoryBarrierByRegion - GLbitfield barriers - - - void glMemoryBarrierEXT - GLbitfield barriers - - - - void glMinSampleShading - GLfloat value - - - void glMinSampleShadingARB - GLfloat value - - - - void glMinSampleShadingOES - GLfloat value - - - - void glMinmax - GLenum target - GLenum internalformat - GLboolean sink - - - - void glMinmaxEXT - GLenum target - GLenum internalformat - GLboolean sink - - - - - void glMultMatrixd - const GLdouble *m - - - - void glMultMatrixf - const GLfloat *m - - - - void glMultMatrixx - const GLfixed *m - - - void glMultMatrixxOES - const GLfixed *m - - - void glMultTransposeMatrixd - const GLdouble *m - - - void glMultTransposeMatrixdARB - const GLdouble *m - - - - void glMultTransposeMatrixf - const GLfloat *m - - - void glMultTransposeMatrixfARB - const GLfloat *m - - - - void glMultTransposeMatrixxOES - const GLfixed *m - - - void glMultiDrawArrays - GLenum mode - const GLint *first - const GLsizei *count - GLsizei drawcount - - - void glMultiDrawArraysEXT - GLenum mode - const GLint *first - const GLsizei *count - GLsizei primcount - - - - void glMultiDrawArraysIndirect - GLenum mode - const void *indirect - GLsizei drawcount - GLsizei stride - - - void glMultiDrawArraysIndirectAMD - GLenum mode - const void *indirect - GLsizei primcount - GLsizei stride - - - - void glMultiDrawArraysIndirectBindlessCountNV - GLenum mode - const void *indirect - GLsizei drawCount - GLsizei maxDrawCount - GLsizei stride - GLint vertexBufferCount - - - void glMultiDrawArraysIndirectBindlessNV - GLenum mode - const void *indirect - GLsizei drawCount - GLsizei stride - GLint vertexBufferCount - - - void glMultiDrawArraysIndirectCountARB - GLenum mode - GLintptr indirect - GLintptr drawcount - GLsizei maxdrawcount - GLsizei stride - - - void glMultiDrawElementArrayAPPLE - GLenum mode - const GLint *first - const GLsizei *count - GLsizei primcount - - - void glMultiDrawElements - GLenum mode - const GLsizei *count - GLenum type - const void *const*indices - GLsizei drawcount - - - void glMultiDrawElementsBaseVertex - GLenum mode - const GLsizei *count - GLenum type - const void *const*indices - GLsizei drawcount - const GLint *basevertex - - - void glMultiDrawElementsEXT - GLenum mode - const GLsizei *count - GLenum type - const void *const*indices - GLsizei primcount - - - - void glMultiDrawElementsIndirect - GLenum mode - GLenum type - const void *indirect - GLsizei drawcount - GLsizei stride - - - void glMultiDrawElementsIndirectAMD - GLenum mode - GLenum type - const void *indirect - GLsizei primcount - GLsizei stride - - - - void glMultiDrawElementsIndirectBindlessCountNV - GLenum mode - GLenum type - const void *indirect - GLsizei drawCount - GLsizei maxDrawCount - GLsizei stride - GLint vertexBufferCount - - - void glMultiDrawElementsIndirectBindlessNV - GLenum mode - GLenum type - const void *indirect - GLsizei drawCount - GLsizei stride - GLint vertexBufferCount - - - void glMultiDrawElementsIndirectCountARB - GLenum mode - GLenum type - GLintptr indirect - GLintptr drawcount - GLsizei maxdrawcount - GLsizei stride - - - void glMultiDrawRangeElementArrayAPPLE - GLenum mode - GLuint start - GLuint end - const GLint *first - const GLsizei *count - GLsizei primcount - - - void glMultiModeDrawArraysIBM - const GLenum *mode - const GLint *first - const GLsizei *count - GLsizei primcount - GLint modestride - - - void glMultiModeDrawElementsIBM - const GLenum *mode - const GLsizei *count - GLenum type - const void *const*indices - GLsizei primcount - GLint modestride - - - void glMultiTexBufferEXT - GLenum texunit - GLenum target - GLenum internalformat - GLuint buffer - - - void glMultiTexCoord1bOES - GLenum texture - GLbyte s - - - void glMultiTexCoord1bvOES - GLenum texture - const GLbyte *coords - - - void glMultiTexCoord1d - GLenum target - GLdouble s - - - - void glMultiTexCoord1dARB - GLenum target - GLdouble s - - - - - void glMultiTexCoord1dv - GLenum target - const GLdouble *v - - - - void glMultiTexCoord1dvARB - GLenum target - const GLdouble *v - - - - - void glMultiTexCoord1f - GLenum target - GLfloat s - - - - void glMultiTexCoord1fARB - GLenum target - GLfloat s - - - - - void glMultiTexCoord1fv - GLenum target - const GLfloat *v - - - - void glMultiTexCoord1fvARB - GLenum target - const GLfloat *v - - - - - void glMultiTexCoord1hNV - GLenum target - GLhalfNV s - - - - void glMultiTexCoord1hvNV - GLenum target - const GLhalfNV *v - - - - void glMultiTexCoord1i - GLenum target - GLint s - - - - void glMultiTexCoord1iARB - GLenum target - GLint s - - - - - void glMultiTexCoord1iv - GLenum target - const GLint *v - - - - void glMultiTexCoord1ivARB - GLenum target - const GLint *v - - - - - void glMultiTexCoord1s - GLenum target - GLshort s - - - - void glMultiTexCoord1sARB - GLenum target - GLshort s - - - - - void glMultiTexCoord1sv - GLenum target - const GLshort *v - - - - void glMultiTexCoord1svARB - GLenum target - const GLshort *v - - - - - void glMultiTexCoord1xOES - GLenum texture - GLfixed s - - - void glMultiTexCoord1xvOES - GLenum texture - const GLfixed *coords - - - void glMultiTexCoord2bOES - GLenum texture - GLbyte s - GLbyte t - - - void glMultiTexCoord2bvOES - GLenum texture - const GLbyte *coords - - - void glMultiTexCoord2d - GLenum target - GLdouble s - GLdouble t - - - - void glMultiTexCoord2dARB - GLenum target - GLdouble s - GLdouble t - - - - - void glMultiTexCoord2dv - GLenum target - const GLdouble *v - - - - void glMultiTexCoord2dvARB - GLenum target - const GLdouble *v - - - - - void glMultiTexCoord2f - GLenum target - GLfloat s - GLfloat t - - - - void glMultiTexCoord2fARB - GLenum target - GLfloat s - GLfloat t - - - - - void glMultiTexCoord2fv - GLenum target - const GLfloat *v - - - - void glMultiTexCoord2fvARB - GLenum target - const GLfloat *v - - - - - void glMultiTexCoord2hNV - GLenum target - GLhalfNV s - GLhalfNV t - - - - void glMultiTexCoord2hvNV - GLenum target - const GLhalfNV *v - - - - void glMultiTexCoord2i - GLenum target - GLint s - GLint t - - - - void glMultiTexCoord2iARB - GLenum target - GLint s - GLint t - - - - - void glMultiTexCoord2iv - GLenum target - const GLint *v - - - - void glMultiTexCoord2ivARB - GLenum target - const GLint *v - - - - - void glMultiTexCoord2s - GLenum target - GLshort s - GLshort t - - - - void glMultiTexCoord2sARB - GLenum target - GLshort s - GLshort t - - - - - void glMultiTexCoord2sv - GLenum target - const GLshort *v - - - - void glMultiTexCoord2svARB - GLenum target - const GLshort *v - - - - - void glMultiTexCoord2xOES - GLenum texture - GLfixed s - GLfixed t - - - void glMultiTexCoord2xvOES - GLenum texture - const GLfixed *coords - - - void glMultiTexCoord3bOES - GLenum texture - GLbyte s - GLbyte t - GLbyte r - - - void glMultiTexCoord3bvOES - GLenum texture - const GLbyte *coords - - - void glMultiTexCoord3d - GLenum target - GLdouble s - GLdouble t - GLdouble r - - - - void glMultiTexCoord3dARB - GLenum target - GLdouble s - GLdouble t - GLdouble r - - - - - void glMultiTexCoord3dv - GLenum target - const GLdouble *v - - - - void glMultiTexCoord3dvARB - GLenum target - const GLdouble *v - - - - - void glMultiTexCoord3f - GLenum target - GLfloat s - GLfloat t - GLfloat r - - - - void glMultiTexCoord3fARB - GLenum target - GLfloat s - GLfloat t - GLfloat r - - - - - void glMultiTexCoord3fv - GLenum target - const GLfloat *v - - - - void glMultiTexCoord3fvARB - GLenum target - const GLfloat *v - - - - - void glMultiTexCoord3hNV - GLenum target - GLhalfNV s - GLhalfNV t - GLhalfNV r - - - - void glMultiTexCoord3hvNV - GLenum target - const GLhalfNV *v - - - - void glMultiTexCoord3i - GLenum target - GLint s - GLint t - GLint r - - - - void glMultiTexCoord3iARB - GLenum target - GLint s - GLint t - GLint r - - - - - void glMultiTexCoord3iv - GLenum target - const GLint *v - - - - void glMultiTexCoord3ivARB - GLenum target - const GLint *v - - - - - void glMultiTexCoord3s - GLenum target - GLshort s - GLshort t - GLshort r - - - - void glMultiTexCoord3sARB - GLenum target - GLshort s - GLshort t - GLshort r - - - - - void glMultiTexCoord3sv - GLenum target - const GLshort *v - - - - void glMultiTexCoord3svARB - GLenum target - const GLshort *v - - - - - void glMultiTexCoord3xOES - GLenum texture - GLfixed s - GLfixed t - GLfixed r - - - void glMultiTexCoord3xvOES - GLenum texture - const GLfixed *coords - - - void glMultiTexCoord4bOES - GLenum texture - GLbyte s - GLbyte t - GLbyte r - GLbyte q - - - void glMultiTexCoord4bvOES - GLenum texture - const GLbyte *coords - - - void glMultiTexCoord4d - GLenum target - GLdouble s - GLdouble t - GLdouble r - GLdouble q - - - - void glMultiTexCoord4dARB - GLenum target - GLdouble s - GLdouble t - GLdouble r - GLdouble q - - - - - void glMultiTexCoord4dv - GLenum target - const GLdouble *v - - - - void glMultiTexCoord4dvARB - GLenum target - const GLdouble *v - - - - - void glMultiTexCoord4f - GLenum target - GLfloat s - GLfloat t - GLfloat r - GLfloat q - - - - void glMultiTexCoord4fARB - GLenum target - GLfloat s - GLfloat t - GLfloat r - GLfloat q - - - - - void glMultiTexCoord4fv - GLenum target - const GLfloat *v - - - - void glMultiTexCoord4fvARB - GLenum target - const GLfloat *v - - - - - void glMultiTexCoord4hNV - GLenum target - GLhalfNV s - GLhalfNV t - GLhalfNV r - GLhalfNV q - - - - void glMultiTexCoord4hvNV - GLenum target - const GLhalfNV *v - - - - void glMultiTexCoord4i - GLenum target - GLint s - GLint t - GLint r - GLint q - - - - void glMultiTexCoord4iARB - GLenum target - GLint s - GLint t - GLint r - GLint q - - - - - void glMultiTexCoord4iv - GLenum target - const GLint *v - - - - void glMultiTexCoord4ivARB - GLenum target - const GLint *v - - - - - void glMultiTexCoord4s - GLenum target - GLshort s - GLshort t - GLshort r - GLshort q - - - - void glMultiTexCoord4sARB - GLenum target - GLshort s - GLshort t - GLshort r - GLshort q - - - - - void glMultiTexCoord4sv - GLenum target - const GLshort *v - - - - void glMultiTexCoord4svARB - GLenum target - const GLshort *v - - - - - void glMultiTexCoord4x - GLenum texture - GLfixed s - GLfixed t - GLfixed r - GLfixed q - - - void glMultiTexCoord4xOES - GLenum texture - GLfixed s - GLfixed t - GLfixed r - GLfixed q - - - void glMultiTexCoord4xvOES - GLenum texture - const GLfixed *coords - - - void glMultiTexCoordP1ui - GLenum texture - GLenum type - GLuint coords - - - void glMultiTexCoordP1uiv - GLenum texture - GLenum type - const GLuint *coords - - - void glMultiTexCoordP2ui - GLenum texture - GLenum type - GLuint coords - - - void glMultiTexCoordP2uiv - GLenum texture - GLenum type - const GLuint *coords - - - void glMultiTexCoordP3ui - GLenum texture - GLenum type - GLuint coords - - - void glMultiTexCoordP3uiv - GLenum texture - GLenum type - const GLuint *coords - - - void glMultiTexCoordP4ui - GLenum texture - GLenum type - GLuint coords - - - void glMultiTexCoordP4uiv - GLenum texture - GLenum type - const GLuint *coords - - - void glMultiTexCoordPointerEXT - GLenum texunit - GLint size - GLenum type - GLsizei stride - const void *pointer - - - void glMultiTexEnvfEXT - GLenum texunit - GLenum target - GLenum pname - GLfloat param - - - - void glMultiTexEnvfvEXT - GLenum texunit - GLenum target - GLenum pname - const GLfloat *params - - - void glMultiTexEnviEXT - GLenum texunit - GLenum target - GLenum pname - GLint param - - - - void glMultiTexEnvivEXT - GLenum texunit - GLenum target - GLenum pname - const GLint *params - - - void glMultiTexGendEXT - GLenum texunit - GLenum coord - GLenum pname - GLdouble param - - - - void glMultiTexGendvEXT - GLenum texunit - GLenum coord - GLenum pname - const GLdouble *params - - - void glMultiTexGenfEXT - GLenum texunit - GLenum coord - GLenum pname - GLfloat param - - - - void glMultiTexGenfvEXT - GLenum texunit - GLenum coord - GLenum pname - const GLfloat *params - - - void glMultiTexGeniEXT - GLenum texunit - GLenum coord - GLenum pname - GLint param - - - - void glMultiTexGenivEXT - GLenum texunit - GLenum coord - GLenum pname - const GLint *params - - - void glMultiTexImage1DEXT - GLenum texunit - GLenum target - GLint level - GLint internalformat - GLsizei width - GLint border - GLenum format - GLenum type - const void *pixels - - - void glMultiTexImage2DEXT - GLenum texunit - GLenum target - GLint level - GLint internalformat - GLsizei width - GLsizei height - GLint border - GLenum format - GLenum type - const void *pixels - - - void glMultiTexImage3DEXT - GLenum texunit - GLenum target - GLint level - GLint internalformat - GLsizei width - GLsizei height - GLsizei depth - GLint border - GLenum format - GLenum type - const void *pixels - - - void glMultiTexParameterIivEXT - GLenum texunit - GLenum target - GLenum pname - const GLint *params - - - void glMultiTexParameterIuivEXT - GLenum texunit - GLenum target - GLenum pname - const GLuint *params - - - void glMultiTexParameterfEXT - GLenum texunit - GLenum target - GLenum pname - GLfloat param - - - - void glMultiTexParameterfvEXT - GLenum texunit - GLenum target - GLenum pname - const GLfloat *params - - - void glMultiTexParameteriEXT - GLenum texunit - GLenum target - GLenum pname - GLint param - - - - void glMultiTexParameterivEXT - GLenum texunit - GLenum target - GLenum pname - const GLint *params - - - void glMultiTexRenderbufferEXT - GLenum texunit - GLenum target - GLuint renderbuffer - - - void glMultiTexSubImage1DEXT - GLenum texunit - GLenum target - GLint level - GLint xoffset - GLsizei width - GLenum format - GLenum type - const void *pixels - - - void glMultiTexSubImage2DEXT - GLenum texunit - GLenum target - GLint level - GLint xoffset - GLint yoffset - GLsizei width - GLsizei height - GLenum format - GLenum type - const void *pixels - - - void glMultiTexSubImage3DEXT - GLenum texunit - GLenum target - GLint level - GLint xoffset - GLint yoffset - GLint zoffset - GLsizei width - GLsizei height - GLsizei depth - GLenum format - GLenum type - const void *pixels - - - void glNamedBufferData - GLuint buffer - GLsizei size - const void *data - GLenum usage - - - void glNamedBufferDataEXT - GLuint buffer - GLsizeiptr size - const void *data - GLenum usage - - - void glNamedBufferPageCommitmentARB - GLuint buffer - GLintptr offset - GLsizei size - GLboolean commit - - - void glNamedBufferPageCommitmentEXT - GLuint buffer - GLintptr offset - GLsizei size - GLboolean commit - - - void glNamedBufferStorage - GLuint buffer - GLsizei size - const void *data - GLbitfield flags - - - void glNamedBufferStorageEXT - GLuint buffer - GLsizeiptr size - const void *data - GLbitfield flags - - - void glNamedBufferSubData - GLuint buffer - GLintptr offset - GLsizei size - const void *data - - - void glNamedBufferSubDataEXT - GLuint buffer - GLintptr offset - GLsizeiptr size - const void *data - - - void glNamedCopyBufferSubDataEXT - GLuint readBuffer - GLuint writeBuffer - GLintptr readOffset - GLintptr writeOffset - GLsizeiptr size - - - void glNamedFramebufferDrawBuffer - GLuint framebuffer - GLenum buf - - - void glNamedFramebufferDrawBuffers - GLuint framebuffer - GLsizei n - const GLenum *bufs - - - void glNamedFramebufferParameteri - GLuint framebuffer - GLenum pname - GLint param - - - void glNamedFramebufferParameteriEXT - GLuint framebuffer - GLenum pname - GLint param - - - void glNamedFramebufferReadBuffer - GLuint framebuffer - GLenum src - - - void glNamedFramebufferRenderbuffer - GLuint framebuffer - GLenum attachment - GLenum renderbuffertarget - GLuint renderbuffer - - - void glNamedFramebufferRenderbufferEXT - GLuint framebuffer - GLenum attachment - GLenum renderbuffertarget - GLuint renderbuffer - - - void glNamedFramebufferTexture - GLuint framebuffer - GLenum attachment - GLuint texture - GLint level - - - void glNamedFramebufferTexture1DEXT - GLuint framebuffer - GLenum attachment - GLenum textarget - GLuint texture - GLint level - - - void glNamedFramebufferTexture2DEXT - GLuint framebuffer - GLenum attachment - GLenum textarget - GLuint texture - GLint level - - - void glNamedFramebufferTexture3DEXT - GLuint framebuffer - GLenum attachment - GLenum textarget - GLuint texture - GLint level - GLint zoffset - - - void glNamedFramebufferTextureEXT - GLuint framebuffer - GLenum attachment - GLuint texture - GLint level - - - void glNamedFramebufferTextureFaceEXT - GLuint framebuffer - GLenum attachment - GLuint texture - GLint level - GLenum face - - - void glNamedFramebufferTextureLayer - GLuint framebuffer - GLenum attachment - GLuint texture - GLint level - GLint layer - - - void glNamedFramebufferTextureLayerEXT - GLuint framebuffer - GLenum attachment - GLuint texture - GLint level - GLint layer - - - void glNamedProgramLocalParameter4dEXT - GLuint program - GLenum target - GLuint index - GLdouble x - GLdouble y - GLdouble z - GLdouble w - - - - void glNamedProgramLocalParameter4dvEXT - GLuint program - GLenum target - GLuint index - const GLdouble *params - - - void glNamedProgramLocalParameter4fEXT - GLuint program - GLenum target - GLuint index - GLfloat x - GLfloat y - GLfloat z - GLfloat w - - - - void glNamedProgramLocalParameter4fvEXT - GLuint program - GLenum target - GLuint index - const GLfloat *params - - - void glNamedProgramLocalParameterI4iEXT - GLuint program - GLenum target - GLuint index - GLint x - GLint y - GLint z - GLint w - - - - void glNamedProgramLocalParameterI4ivEXT - GLuint program - GLenum target - GLuint index - const GLint *params - - - void glNamedProgramLocalParameterI4uiEXT - GLuint program - GLenum target - GLuint index - GLuint x - GLuint y - GLuint z - GLuint w - - - - void glNamedProgramLocalParameterI4uivEXT - GLuint program - GLenum target - GLuint index - const GLuint *params - - - void glNamedProgramLocalParameters4fvEXT - GLuint program - GLenum target - GLuint index - GLsizei count - const GLfloat *params - - - void glNamedProgramLocalParametersI4ivEXT - GLuint program - GLenum target - GLuint index - GLsizei count - const GLint *params - - - void glNamedProgramLocalParametersI4uivEXT - GLuint program - GLenum target - GLuint index - GLsizei count - const GLuint *params - - - void glNamedProgramStringEXT - GLuint program - GLenum target - GLenum format - GLsizei len - const void *string - - - void glNamedRenderbufferStorage - GLuint renderbuffer - GLenum internalformat - GLsizei width - GLsizei height - - - void glNamedRenderbufferStorageEXT - GLuint renderbuffer - GLenum internalformat - GLsizei width - GLsizei height - - - void glNamedRenderbufferStorageMultisample - GLuint renderbuffer - GLsizei samples - GLenum internalformat - GLsizei width - GLsizei height - - - void glNamedRenderbufferStorageMultisampleCoverageEXT - GLuint renderbuffer - GLsizei coverageSamples - GLsizei colorSamples - GLenum internalformat - GLsizei width - GLsizei height - - - void glNamedRenderbufferStorageMultisampleEXT - GLuint renderbuffer - GLsizei samples - GLenum internalformat - GLsizei width - GLsizei height - - - void glNamedStringARB - GLenum type - GLint namelen - const GLchar *name - GLint stringlen - const GLchar *string - - - void glNewList - GLuint list - GLenum mode - - - - GLuint glNewObjectBufferATI - GLsizei size - const void *pointer - GLenum usage - - - void glNormal3b - GLbyte nx - GLbyte ny - GLbyte nz - - - - void glNormal3bv - const GLbyte *v - - - - void glNormal3d - GLdouble nx - GLdouble ny - GLdouble nz - - - - void glNormal3dv - const GLdouble *v - - - - void glNormal3f - GLfloat nx - GLfloat ny - GLfloat nz - - - - void glNormal3fVertex3fSUN - GLfloat nx - GLfloat ny - GLfloat nz - GLfloat x - GLfloat y - GLfloat z - - - void glNormal3fVertex3fvSUN - const GLfloat *n - const GLfloat *v - - - void glNormal3fv - const GLfloat *v - - - - void glNormal3hNV - GLhalfNV nx - GLhalfNV ny - GLhalfNV nz - - - - void glNormal3hvNV - const GLhalfNV *v - - - - void glNormal3i - GLint nx - GLint ny - GLint nz - - - - void glNormal3iv - const GLint *v - - - - void glNormal3s - GLshort nx - GLshort ny - GLshort nz - - - - void glNormal3sv - const GLshort *v - - - - void glNormal3x - GLfixed nx - GLfixed ny - GLfixed nz - - - void glNormal3xOES - GLfixed nx - GLfixed ny - GLfixed nz - - - void glNormal3xvOES - const GLfixed *coords - - - void glNormalFormatNV - GLenum type - GLsizei stride - - - void glNormalP3ui - GLenum type - GLuint coords - - - void glNormalP3uiv - GLenum type - const GLuint *coords - - - void glNormalPointer - GLenum type - GLsizei stride - const void *pointer - - - void glNormalPointerEXT - GLenum type - GLsizei stride - GLsizei count - const void *pointer - - - void glNormalPointerListIBM - GLenum type - GLint stride - const void **pointer - GLint ptrstride - - - void glNormalPointervINTEL - GLenum type - const void **pointer - - - void glNormalStream3bATI - GLenum stream - GLbyte nx - GLbyte ny - GLbyte nz - - - void glNormalStream3bvATI - GLenum stream - const GLbyte *coords - - - void glNormalStream3dATI - GLenum stream - GLdouble nx - GLdouble ny - GLdouble nz - - - void glNormalStream3dvATI - GLenum stream - const GLdouble *coords - - - void glNormalStream3fATI - GLenum stream - GLfloat nx - GLfloat ny - GLfloat nz - - - void glNormalStream3fvATI - GLenum stream - const GLfloat *coords - - - void glNormalStream3iATI - GLenum stream - GLint nx - GLint ny - GLint nz - - - void glNormalStream3ivATI - GLenum stream - const GLint *coords - - - void glNormalStream3sATI - GLenum stream - GLshort nx - GLshort ny - GLshort nz - - - void glNormalStream3svATI - GLenum stream - const GLshort *coords - - - void glObjectLabel - GLenum identifier - GLuint name - GLsizei length - const GLchar *label - - - void glObjectLabelKHR - GLenum identifier - GLuint name - GLsizei length - const GLchar *label - - - - void glObjectPtrLabel - const void *ptr - GLsizei length - const GLchar *label - - - void glObjectPtrLabelKHR - const void *ptr - GLsizei length - const GLchar *label - - - - GLenum glObjectPurgeableAPPLE - GLenum objectType - GLuint name - GLenum option - - - GLenum glObjectUnpurgeableAPPLE - GLenum objectType - GLuint name - GLenum option - - - void glOrtho - GLdouble left - GLdouble right - GLdouble bottom - GLdouble top - GLdouble zNear - GLdouble zFar - - - - void glOrthof - GLfloat l - GLfloat r - GLfloat b - GLfloat t - GLfloat n - GLfloat f - - - void glOrthofOES - GLfloat l - GLfloat r - GLfloat b - GLfloat t - GLfloat n - GLfloat f - - - - void glOrthox - GLfixed l - GLfixed r - GLfixed b - GLfixed t - GLfixed n - GLfixed f - - - void glOrthoxOES - GLfixed l - GLfixed r - GLfixed b - GLfixed t - GLfixed n - GLfixed f - - - void glPNTrianglesfATI - GLenum pname - GLfloat param - - - void glPNTrianglesiATI - GLenum pname - GLint param - - - void glPassTexCoordATI - GLuint dst - GLuint coord - GLenum swizzle - - - void glPassThrough - GLfloat token - - - - void glPassThroughxOES - GLfixed token - - - void glPatchParameterfv - GLenum pname - const GLfloat *values - - - void glPatchParameteri - GLenum pname - GLint value - - - void glPatchParameteriEXT - GLenum pname - GLint value - - - - void glPathColorGenNV - GLenum color - GLenum genMode - GLenum colorFormat - const GLfloat *coeffs - - - void glPathCommandsNV - GLuint path - GLsizei numCommands - const GLubyte *commands - GLsizei numCoords - GLenum coordType - const void *coords - - - void glPathCoordsNV - GLuint path - GLsizei numCoords - GLenum coordType - const void *coords - - - void glPathCoverDepthFuncNV - GLenum func - - - void glPathDashArrayNV - GLuint path - GLsizei dashCount - const GLfloat *dashArray - - - void glPathFogGenNV - GLenum genMode - - - GLenum glPathGlyphIndexArrayNV - GLuint firstPathName - GLenum fontTarget - const void *fontName - GLbitfield fontStyle - GLuint firstGlyphIndex - GLsizei numGlyphs - GLuint pathParameterTemplate - GLfloat emScale - - - GLenum glPathGlyphIndexRangeNV - GLenum fontTarget - const void *fontName - GLbitfield fontStyle - GLuint pathParameterTemplate - GLfloat emScale - GLuint baseAndCount[2] - - - void glPathGlyphRangeNV - GLuint firstPathName - GLenum fontTarget - const void *fontName - GLbitfield fontStyle - GLuint firstGlyph - GLsizei numGlyphs - GLenum handleMissingGlyphs - GLuint pathParameterTemplate - GLfloat emScale - - - void glPathGlyphsNV - GLuint firstPathName - GLenum fontTarget - const void *fontName - GLbitfield fontStyle - GLsizei numGlyphs - GLenum type - const void *charcodes - GLenum handleMissingGlyphs - GLuint pathParameterTemplate - GLfloat emScale - - - GLenum glPathMemoryGlyphIndexArrayNV - GLuint firstPathName - GLenum fontTarget - GLsizeiptr fontSize - const void *fontData - GLsizei faceIndex - GLuint firstGlyphIndex - GLsizei numGlyphs - GLuint pathParameterTemplate - GLfloat emScale - - - void glPathParameterfNV - GLuint path - GLenum pname - GLfloat value - - - void glPathParameterfvNV - GLuint path - GLenum pname - const GLfloat *value - - - void glPathParameteriNV - GLuint path - GLenum pname - GLint value - - - void glPathParameterivNV - GLuint path - GLenum pname - const GLint *value - - - void glPathStencilDepthOffsetNV - GLfloat factor - GLfloat units - - - void glPathStencilFuncNV - GLenum func - GLint ref - GLuint mask - - - void glPathStringNV - GLuint path - GLenum format - GLsizei length - const void *pathString - - - void glPathSubCommandsNV - GLuint path - GLsizei commandStart - GLsizei commandsToDelete - GLsizei numCommands - const GLubyte *commands - GLsizei numCoords - GLenum coordType - const void *coords - - - void glPathSubCoordsNV - GLuint path - GLsizei coordStart - GLsizei numCoords - GLenum coordType - const void *coords - - - void glPathTexGenNV - GLenum texCoordSet - GLenum genMode - GLint components - const GLfloat *coeffs - - - void glPauseTransformFeedback - - - void glPauseTransformFeedbackNV - - - - void glPixelDataRangeNV - GLenum target - GLsizei length - const void *pointer - - - void glPixelMapfv - GLenum map - GLsizei mapsize - const GLfloat *values - - - - - void glPixelMapuiv - GLenum map - GLsizei mapsize - const GLuint *values - - - - - void glPixelMapusv - GLenum map - GLsizei mapsize - const GLushort *values - - - - - void glPixelMapx - GLenum map - GLint size - const GLfixed *values - - - void glPixelStoref - GLenum pname - GLfloat param - - - - void glPixelStorei - GLenum pname - GLint param - - - - void glPixelStorex - GLenum pname - GLfixed param - - - void glPixelTexGenParameterfSGIS - GLenum pname - GLfloat param - - - void glPixelTexGenParameterfvSGIS - GLenum pname - const GLfloat *params - - - void glPixelTexGenParameteriSGIS - GLenum pname - GLint param - - - void glPixelTexGenParameterivSGIS - GLenum pname - const GLint *params - - - void glPixelTexGenSGIX - GLenum mode - - - - void glPixelTransferf - GLenum pname - GLfloat param - - - - void glPixelTransferi - GLenum pname - GLint param - - - - void glPixelTransferxOES - GLenum pname - GLfixed param - - - void glPixelTransformParameterfEXT - GLenum target - GLenum pname - GLfloat param - - - - void glPixelTransformParameterfvEXT - GLenum target - GLenum pname - const GLfloat *params - - - void glPixelTransformParameteriEXT - GLenum target - GLenum pname - GLint param - - - - void glPixelTransformParameterivEXT - GLenum target - GLenum pname - const GLint *params - - - void glPixelZoom - GLfloat xfactor - GLfloat yfactor - - - - void glPixelZoomxOES - GLfixed xfactor - GLfixed yfactor - - - GLboolean glPointAlongPathNV - GLuint path - GLsizei startSegment - GLsizei numSegments - GLfloat distance - GLfloat *x - GLfloat *y - GLfloat *tangentX - GLfloat *tangentY - - - void glPointParameterf - GLenum pname - GLfloat param - - - - void glPointParameterfARB - GLenum pname - GLfloat param - - - - - void glPointParameterfEXT - GLenum pname - GLfloat param - - - - void glPointParameterfSGIS - GLenum pname - GLfloat param - - - - void glPointParameterfv - GLenum pname - const GLfloat *params - - - - void glPointParameterfvARB - GLenum pname - const GLfloat *params - - - - - void glPointParameterfvEXT - GLenum pname - const GLfloat *params - - - - void glPointParameterfvSGIS - GLenum pname - const GLfloat *params - - - - void glPointParameteri - GLenum pname - GLint param - - - - void glPointParameteriNV - GLenum pname - GLint param - - - - - void glPointParameteriv - GLenum pname - const GLint *params - - - - void glPointParameterivNV - GLenum pname - const GLint *params - - - - - void glPointParameterx - GLenum pname - GLfixed param - - - void glPointParameterxOES - GLenum pname - GLfixed param - - - void glPointParameterxv - GLenum pname - const GLfixed *params - - - void glPointParameterxvOES - GLenum pname - const GLfixed *params - - - void glPointSize - GLfloat size - - - - void glPointSizePointerOES - GLenum type - GLsizei stride - const void *pointer - - - void glPointSizex - GLfixed size - - - void glPointSizexOES - GLfixed size - - - GLint glPollAsyncSGIX - GLuint *markerp - - - GLint glPollInstrumentsSGIX - GLint *marker_p - - - - void glPolygonMode - GLenum face - GLenum mode - - - - void glPolygonOffset - GLfloat factor - GLfloat units - - - - void glPolygonOffsetEXT - GLfloat factor - GLfloat bias - - - - void glPolygonOffsetx - GLfixed factor - GLfixed units - - - void glPolygonOffsetxOES - GLfixed factor - GLfixed units - - - void glPolygonStipple - const GLubyte *mask - - - - - void glPopAttrib - - - - void glPopClientAttrib - - - void glPopDebugGroup - - - void glPopDebugGroupKHR - - - - void glPopGroupMarkerEXT - - - void glPopMatrix - - - - void glPopName - - - - void glPresentFrameDualFillNV - GLuint video_slot - GLuint64EXT minPresentTime - GLuint beginPresentTimeId - GLuint presentDurationId - GLenum type - GLenum target0 - GLuint fill0 - GLenum target1 - GLuint fill1 - GLenum target2 - GLuint fill2 - GLenum target3 - GLuint fill3 - - - void glPresentFrameKeyedNV - GLuint video_slot - GLuint64EXT minPresentTime - GLuint beginPresentTimeId - GLuint presentDurationId - GLenum type - GLenum target0 - GLuint fill0 - GLuint key0 - GLenum target1 - GLuint fill1 - GLuint key1 - - - void glPrimitiveBoundingBoxEXT - GLfloat minX - GLfloat minY - GLfloat minZ - GLfloat minW - GLfloat maxX - GLfloat maxY - GLfloat maxZ - GLfloat maxW - - - void glPrimitiveRestartIndex - GLuint index - - - void glPrimitiveRestartIndexNV - GLuint index - - - void glPrimitiveRestartNV - - - void glPrioritizeTextures - GLsizei n - const GLuint *textures - const GLfloat *priorities - - - - void glPrioritizeTexturesEXT - GLsizei n - const GLuint *textures - const GLclampf *priorities - - - - - void glPrioritizeTexturesxOES - GLsizei n - const GLuint *textures - const GLfixed *priorities - - - void glProgramBinary - GLuint program - GLenum binaryFormat - const void *binary - GLsizei length - - - void glProgramBinaryOES - GLuint program - GLenum binaryFormat - const void *binary - GLint length - - - - void glProgramBufferParametersIivNV - GLenum target - GLuint bindingIndex - GLuint wordIndex - GLsizei count - const GLint *params - - - void glProgramBufferParametersIuivNV - GLenum target - GLuint bindingIndex - GLuint wordIndex - GLsizei count - const GLuint *params - - - void glProgramBufferParametersfvNV - GLenum target - GLuint bindingIndex - GLuint wordIndex - GLsizei count - const GLfloat *params - - - void glProgramEnvParameter4dARB - GLenum target - GLuint index - GLdouble x - GLdouble y - GLdouble z - GLdouble w - - - - void glProgramEnvParameter4dvARB - GLenum target - GLuint index - const GLdouble *params - - - void glProgramEnvParameter4fARB - GLenum target - GLuint index - GLfloat x - GLfloat y - GLfloat z - GLfloat w - - - - void glProgramEnvParameter4fvARB - GLenum target - GLuint index - const GLfloat *params - - - void glProgramEnvParameterI4iNV - GLenum target - GLuint index - GLint x - GLint y - GLint z - GLint w - - - - void glProgramEnvParameterI4ivNV - GLenum target - GLuint index - const GLint *params - - - void glProgramEnvParameterI4uiNV - GLenum target - GLuint index - GLuint x - GLuint y - GLuint z - GLuint w - - - - void glProgramEnvParameterI4uivNV - GLenum target - GLuint index - const GLuint *params - - - void glProgramEnvParameters4fvEXT - GLenum target - GLuint index - GLsizei count - const GLfloat *params - - - - void glProgramEnvParametersI4ivNV - GLenum target - GLuint index - GLsizei count - const GLint *params - - - void glProgramEnvParametersI4uivNV - GLenum target - GLuint index - GLsizei count - const GLuint *params - - - void glProgramLocalParameter4dARB - GLenum target - GLuint index - GLdouble x - GLdouble y - GLdouble z - GLdouble w - - - - void glProgramLocalParameter4dvARB - GLenum target - GLuint index - const GLdouble *params - - - void glProgramLocalParameter4fARB - GLenum target - GLuint index - GLfloat x - GLfloat y - GLfloat z - GLfloat w - - - - void glProgramLocalParameter4fvARB - GLenum target - GLuint index - const GLfloat *params - - - void glProgramLocalParameterI4iNV - GLenum target - GLuint index - GLint x - GLint y - GLint z - GLint w - - - - void glProgramLocalParameterI4ivNV - GLenum target - GLuint index - const GLint *params - - - void glProgramLocalParameterI4uiNV - GLenum target - GLuint index - GLuint x - GLuint y - GLuint z - GLuint w - - - - void glProgramLocalParameterI4uivNV - GLenum target - GLuint index - const GLuint *params - - - void glProgramLocalParameters4fvEXT - GLenum target - GLuint index - GLsizei count - const GLfloat *params - - - - void glProgramLocalParametersI4ivNV - GLenum target - GLuint index - GLsizei count - const GLint *params - - - void glProgramLocalParametersI4uivNV - GLenum target - GLuint index - GLsizei count - const GLuint *params - - - void glProgramNamedParameter4dNV - GLuint id - GLsizei len - const GLubyte *name - GLdouble x - GLdouble y - GLdouble z - GLdouble w - - - - void glProgramNamedParameter4dvNV - GLuint id - GLsizei len - const GLubyte *name - const GLdouble *v - - - - void glProgramNamedParameter4fNV - GLuint id - GLsizei len - const GLubyte *name - GLfloat x - GLfloat y - GLfloat z - GLfloat w - - - - void glProgramNamedParameter4fvNV - GLuint id - GLsizei len - const GLubyte *name - const GLfloat *v - - - - void glProgramParameter4dNV - GLenum target - GLuint index - GLdouble x - GLdouble y - GLdouble z - GLdouble w - - - - void glProgramParameter4dvNV - GLenum target - GLuint index - const GLdouble *v - - - - void glProgramParameter4fNV - GLenum target - GLuint index - GLfloat x - GLfloat y - GLfloat z - GLfloat w - - - - void glProgramParameter4fvNV - GLenum target - GLuint index - const GLfloat *v - - - - void glProgramParameteri - GLuint program - GLenum pname - GLint value - - - void glProgramParameteriARB - GLuint program - GLenum pname - GLint value - - - - void glProgramParameteriEXT - GLuint program - GLenum pname - GLint value - - - - void glProgramParameters4dvNV - GLenum target - GLuint index - GLsizei count - const GLdouble *v - - - - void glProgramParameters4fvNV - GLenum target - GLuint index - GLsizei count - const GLfloat *v - - - - void glProgramPathFragmentInputGenNV - GLuint program - GLint location - GLenum genMode - GLint components - const GLfloat *coeffs - - - void glProgramStringARB - GLenum target - GLenum format - GLsizei len - const void *string - - - void glProgramSubroutineParametersuivNV - GLenum target - GLsizei count - const GLuint *params - - - void glProgramUniform1d - GLuint program - GLint location - GLdouble v0 - - - void glProgramUniform1dEXT - GLuint program - GLint location - GLdouble x - - - void glProgramUniform1dv - GLuint program - GLint location - GLsizei count - const GLdouble *value - - - void glProgramUniform1dvEXT - GLuint program - GLint location - GLsizei count - const GLdouble *value - - - void glProgramUniform1f - GLuint program - GLint location - GLfloat v0 - - - void glProgramUniform1fEXT - GLuint program - GLint location - GLfloat v0 - - - - void glProgramUniform1fv - GLuint program - GLint location - GLsizei count - const GLfloat *value - - - void glProgramUniform1fvEXT - GLuint program - GLint location - GLsizei count - const GLfloat *value - - - - void glProgramUniform1i - GLuint program - GLint location - GLint v0 - - - void glProgramUniform1i64NV - GLuint program - GLint location - GLint64EXT x - - - void glProgramUniform1i64vNV - GLuint program - GLint location - GLsizei count - const GLint64EXT *value - - - void glProgramUniform1iEXT - GLuint program - GLint location - GLint v0 - - - - void glProgramUniform1iv - GLuint program - GLint location - GLsizei count - const GLint *value - - - void glProgramUniform1ivEXT - GLuint program - GLint location - GLsizei count - const GLint *value - - - - void glProgramUniform1ui - GLuint program - GLint location - GLuint v0 - - - void glProgramUniform1ui64NV - GLuint program - GLint location - GLuint64EXT x - - - void glProgramUniform1ui64vNV - GLuint program - GLint location - GLsizei count - const GLuint64EXT *value - - - void glProgramUniform1uiEXT - GLuint program - GLint location - GLuint v0 - - - - void glProgramUniform1uiv - GLuint program - GLint location - GLsizei count - const GLuint *value - - - void glProgramUniform1uivEXT - GLuint program - GLint location - GLsizei count - const GLuint *value - - - - void glProgramUniform2d - GLuint program - GLint location - GLdouble v0 - GLdouble v1 - - - void glProgramUniform2dEXT - GLuint program - GLint location - GLdouble x - GLdouble y - - - void glProgramUniform2dv - GLuint program - GLint location - GLsizei count - const GLdouble *value - - - void glProgramUniform2dvEXT - GLuint program - GLint location - GLsizei count - const GLdouble *value - - - void glProgramUniform2f - GLuint program - GLint location - GLfloat v0 - GLfloat v1 - - - void glProgramUniform2fEXT - GLuint program - GLint location - GLfloat v0 - GLfloat v1 - - - - void glProgramUniform2fv - GLuint program - GLint location - GLsizei count - const GLfloat *value - - - void glProgramUniform2fvEXT - GLuint program - GLint location - GLsizei count - const GLfloat *value - - - - void glProgramUniform2i - GLuint program - GLint location - GLint v0 - GLint v1 - - - void glProgramUniform2i64NV - GLuint program - GLint location - GLint64EXT x - GLint64EXT y - - - void glProgramUniform2i64vNV - GLuint program - GLint location - GLsizei count - const GLint64EXT *value - - - void glProgramUniform2iEXT - GLuint program - GLint location - GLint v0 - GLint v1 - - - - void glProgramUniform2iv - GLuint program - GLint location - GLsizei count - const GLint *value - - - void glProgramUniform2ivEXT - GLuint program - GLint location - GLsizei count - const GLint *value - - - - void glProgramUniform2ui - GLuint program - GLint location - GLuint v0 - GLuint v1 - - - void glProgramUniform2ui64NV - GLuint program - GLint location - GLuint64EXT x - GLuint64EXT y - - - void glProgramUniform2ui64vNV - GLuint program - GLint location - GLsizei count - const GLuint64EXT *value - - - void glProgramUniform2uiEXT - GLuint program - GLint location - GLuint v0 - GLuint v1 - - - - void glProgramUniform2uiv - GLuint program - GLint location - GLsizei count - const GLuint *value - - - void glProgramUniform2uivEXT - GLuint program - GLint location - GLsizei count - const GLuint *value - - - - void glProgramUniform3d - GLuint program - GLint location - GLdouble v0 - GLdouble v1 - GLdouble v2 - - - void glProgramUniform3dEXT - GLuint program - GLint location - GLdouble x - GLdouble y - GLdouble z - - - void glProgramUniform3dv - GLuint program - GLint location - GLsizei count - const GLdouble *value - - - void glProgramUniform3dvEXT - GLuint program - GLint location - GLsizei count - const GLdouble *value - - - void glProgramUniform3f - GLuint program - GLint location - GLfloat v0 - GLfloat v1 - GLfloat v2 - - - void glProgramUniform3fEXT - GLuint program - GLint location - GLfloat v0 - GLfloat v1 - GLfloat v2 - - - - void glProgramUniform3fv - GLuint program - GLint location - GLsizei count - const GLfloat *value - - - void glProgramUniform3fvEXT - GLuint program - GLint location - GLsizei count - const GLfloat *value - - - - void glProgramUniform3i - GLuint program - GLint location - GLint v0 - GLint v1 - GLint v2 - - - void glProgramUniform3i64NV - GLuint program - GLint location - GLint64EXT x - GLint64EXT y - GLint64EXT z - - - void glProgramUniform3i64vNV - GLuint program - GLint location - GLsizei count - const GLint64EXT *value - - - void glProgramUniform3iEXT - GLuint program - GLint location - GLint v0 - GLint v1 - GLint v2 - - - - void glProgramUniform3iv - GLuint program - GLint location - GLsizei count - const GLint *value - - - void glProgramUniform3ivEXT - GLuint program - GLint location - GLsizei count - const GLint *value - - - - void glProgramUniform3ui - GLuint program - GLint location - GLuint v0 - GLuint v1 - GLuint v2 - - - void glProgramUniform3ui64NV - GLuint program - GLint location - GLuint64EXT x - GLuint64EXT y - GLuint64EXT z - - - void glProgramUniform3ui64vNV - GLuint program - GLint location - GLsizei count - const GLuint64EXT *value - - - void glProgramUniform3uiEXT - GLuint program - GLint location - GLuint v0 - GLuint v1 - GLuint v2 - - - - void glProgramUniform3uiv - GLuint program - GLint location - GLsizei count - const GLuint *value - - - void glProgramUniform3uivEXT - GLuint program - GLint location - GLsizei count - const GLuint *value - - - - void glProgramUniform4d - GLuint program - GLint location - GLdouble v0 - GLdouble v1 - GLdouble v2 - GLdouble v3 - - - void glProgramUniform4dEXT - GLuint program - GLint location - GLdouble x - GLdouble y - GLdouble z - GLdouble w - - - void glProgramUniform4dv - GLuint program - GLint location - GLsizei count - const GLdouble *value - - - void glProgramUniform4dvEXT - GLuint program - GLint location - GLsizei count - const GLdouble *value - - - void glProgramUniform4f - GLuint program - GLint location - GLfloat v0 - GLfloat v1 - GLfloat v2 - GLfloat v3 - - - void glProgramUniform4fEXT - GLuint program - GLint location - GLfloat v0 - GLfloat v1 - GLfloat v2 - GLfloat v3 - - - - void glProgramUniform4fv - GLuint program - GLint location - GLsizei count - const GLfloat *value - - - void glProgramUniform4fvEXT - GLuint program - GLint location - GLsizei count - const GLfloat *value - - - - void glProgramUniform4i - GLuint program - GLint location - GLint v0 - GLint v1 - GLint v2 - GLint v3 - - - void glProgramUniform4i64NV - GLuint program - GLint location - GLint64EXT x - GLint64EXT y - GLint64EXT z - GLint64EXT w - - - void glProgramUniform4i64vNV - GLuint program - GLint location - GLsizei count - const GLint64EXT *value - - - void glProgramUniform4iEXT - GLuint program - GLint location - GLint v0 - GLint v1 - GLint v2 - GLint v3 - - - - void glProgramUniform4iv - GLuint program - GLint location - GLsizei count - const GLint *value - - - void glProgramUniform4ivEXT - GLuint program - GLint location - GLsizei count - const GLint *value - - - - void glProgramUniform4ui - GLuint program - GLint location - GLuint v0 - GLuint v1 - GLuint v2 - GLuint v3 - - - void glProgramUniform4ui64NV - GLuint program - GLint location - GLuint64EXT x - GLuint64EXT y - GLuint64EXT z - GLuint64EXT w - - - void glProgramUniform4ui64vNV - GLuint program - GLint location - GLsizei count - const GLuint64EXT *value - - - void glProgramUniform4uiEXT - GLuint program - GLint location - GLuint v0 - GLuint v1 - GLuint v2 - GLuint v3 - - - - void glProgramUniform4uiv - GLuint program - GLint location - GLsizei count - const GLuint *value - - - void glProgramUniform4uivEXT - GLuint program - GLint location - GLsizei count - const GLuint *value - - - - void glProgramUniformHandleui64ARB - GLuint program - GLint location - GLuint64 value - - - void glProgramUniformHandleui64NV - GLuint program - GLint location - GLuint64 value - - - void glProgramUniformHandleui64vARB - GLuint program - GLint location - GLsizei count - const GLuint64 *values - - - void glProgramUniformHandleui64vNV - GLuint program - GLint location - GLsizei count - const GLuint64 *values - - - void glProgramUniformMatrix2dv - GLuint program - GLint location - GLsizei count - GLboolean transpose - const GLdouble *value - - - void glProgramUniformMatrix2dvEXT - GLuint program - GLint location - GLsizei count - GLboolean transpose - const GLdouble *value - - - void glProgramUniformMatrix2fv - GLuint program - GLint location - GLsizei count - GLboolean transpose - const GLfloat *value - - - void glProgramUniformMatrix2fvEXT - GLuint program - GLint location - GLsizei count - GLboolean transpose - const GLfloat *value - - - - void glProgramUniformMatrix2x3dv - GLuint program - GLint location - GLsizei count - GLboolean transpose - const GLdouble *value - - - void glProgramUniformMatrix2x3dvEXT - GLuint program - GLint location - GLsizei count - GLboolean transpose - const GLdouble *value - - - void glProgramUniformMatrix2x3fv - GLuint program - GLint location - GLsizei count - GLboolean transpose - const GLfloat *value - - - void glProgramUniformMatrix2x3fvEXT - GLuint program - GLint location - GLsizei count - GLboolean transpose - const GLfloat *value - - - - void glProgramUniformMatrix2x4dv - GLuint program - GLint location - GLsizei count - GLboolean transpose - const GLdouble *value - - - void glProgramUniformMatrix2x4dvEXT - GLuint program - GLint location - GLsizei count - GLboolean transpose - const GLdouble *value - - - void glProgramUniformMatrix2x4fv - GLuint program - GLint location - GLsizei count - GLboolean transpose - const GLfloat *value - - - void glProgramUniformMatrix2x4fvEXT - GLuint program - GLint location - GLsizei count - GLboolean transpose - const GLfloat *value - - - - void glProgramUniformMatrix3dv - GLuint program - GLint location - GLsizei count - GLboolean transpose - const GLdouble *value - - - void glProgramUniformMatrix3dvEXT - GLuint program - GLint location - GLsizei count - GLboolean transpose - const GLdouble *value - - - void glProgramUniformMatrix3fv - GLuint program - GLint location - GLsizei count - GLboolean transpose - const GLfloat *value - - - void glProgramUniformMatrix3fvEXT - GLuint program - GLint location - GLsizei count - GLboolean transpose - const GLfloat *value - - - - void glProgramUniformMatrix3x2dv - GLuint program - GLint location - GLsizei count - GLboolean transpose - const GLdouble *value - - - void glProgramUniformMatrix3x2dvEXT - GLuint program - GLint location - GLsizei count - GLboolean transpose - const GLdouble *value - - - void glProgramUniformMatrix3x2fv - GLuint program - GLint location - GLsizei count - GLboolean transpose - const GLfloat *value - - - void glProgramUniformMatrix3x2fvEXT - GLuint program - GLint location - GLsizei count - GLboolean transpose - const GLfloat *value - - - - void glProgramUniformMatrix3x4dv - GLuint program - GLint location - GLsizei count - GLboolean transpose - const GLdouble *value - - - void glProgramUniformMatrix3x4dvEXT - GLuint program - GLint location - GLsizei count - GLboolean transpose - const GLdouble *value - - - void glProgramUniformMatrix3x4fv - GLuint program - GLint location - GLsizei count - GLboolean transpose - const GLfloat *value - - - void glProgramUniformMatrix3x4fvEXT - GLuint program - GLint location - GLsizei count - GLboolean transpose - const GLfloat *value - - - - void glProgramUniformMatrix4dv - GLuint program - GLint location - GLsizei count - GLboolean transpose - const GLdouble *value - - - void glProgramUniformMatrix4dvEXT - GLuint program - GLint location - GLsizei count - GLboolean transpose - const GLdouble *value - - - void glProgramUniformMatrix4fv - GLuint program - GLint location - GLsizei count - GLboolean transpose - const GLfloat *value - - - void glProgramUniformMatrix4fvEXT - GLuint program - GLint location - GLsizei count - GLboolean transpose - const GLfloat *value - - - - void glProgramUniformMatrix4x2dv - GLuint program - GLint location - GLsizei count - GLboolean transpose - const GLdouble *value - - - void glProgramUniformMatrix4x2dvEXT - GLuint program - GLint location - GLsizei count - GLboolean transpose - const GLdouble *value - - - void glProgramUniformMatrix4x2fv - GLuint program - GLint location - GLsizei count - GLboolean transpose - const GLfloat *value - - - void glProgramUniformMatrix4x2fvEXT - GLuint program - GLint location - GLsizei count - GLboolean transpose - const GLfloat *value - - - - void glProgramUniformMatrix4x3dv - GLuint program - GLint location - GLsizei count - GLboolean transpose - const GLdouble *value - - - void glProgramUniformMatrix4x3dvEXT - GLuint program - GLint location - GLsizei count - GLboolean transpose - const GLdouble *value - - - void glProgramUniformMatrix4x3fv - GLuint program - GLint location - GLsizei count - GLboolean transpose - const GLfloat *value - - - void glProgramUniformMatrix4x3fvEXT - GLuint program - GLint location - GLsizei count - GLboolean transpose - const GLfloat *value - - - - void glProgramUniformui64NV - GLuint program - GLint location - GLuint64EXT value - - - void glProgramUniformui64vNV - GLuint program - GLint location - GLsizei count - const GLuint64EXT *value - - - void glProgramVertexLimitNV - GLenum target - GLint limit - - - void glProvokingVertex - GLenum mode - - - void glProvokingVertexEXT - GLenum mode - - - - void glPushAttrib - GLbitfield mask - - - - void glPushClientAttrib - GLbitfield mask - - - void glPushClientAttribDefaultEXT - GLbitfield mask - - - void glPushDebugGroup - GLenum source - GLuint id - GLsizei length - const GLchar *message - - - void glPushDebugGroupKHR - GLenum source - GLuint id - GLsizei length - const GLchar *message - - - - void glPushGroupMarkerEXT - GLsizei length - const GLchar *marker - - - void glPushMatrix - - - - void glPushName - GLuint name - - - - void glQueryCounter - GLuint id - GLenum target - - - void glQueryCounterEXT - GLuint id - GLenum target - - - - GLbitfield glQueryMatrixxOES - GLfixed *mantissa - GLint *exponent - - - void glQueryObjectParameteruiAMD - GLenum target - GLuint id - GLenum pname - GLuint param - - - void glRasterPos2d - GLdouble x - GLdouble y - - - - void glRasterPos2dv - const GLdouble *v - - - - void glRasterPos2f - GLfloat x - GLfloat y - - - - void glRasterPos2fv - const GLfloat *v - - - - void glRasterPos2i - GLint x - GLint y - - - - void glRasterPos2iv - const GLint *v - - - - void glRasterPos2s - GLshort x - GLshort y - - - - void glRasterPos2sv - const GLshort *v - - - - void glRasterPos2xOES - GLfixed x - GLfixed y - - - void glRasterPos2xvOES - const GLfixed *coords - - - void glRasterPos3d - GLdouble x - GLdouble y - GLdouble z - - - - void glRasterPos3dv - const GLdouble *v - - - - void glRasterPos3f - GLfloat x - GLfloat y - GLfloat z - - - - void glRasterPos3fv - const GLfloat *v - - - - void glRasterPos3i - GLint x - GLint y - GLint z - - - - void glRasterPos3iv - const GLint *v - - - - void glRasterPos3s - GLshort x - GLshort y - GLshort z - - - - void glRasterPos3sv - const GLshort *v - - - - void glRasterPos3xOES - GLfixed x - GLfixed y - GLfixed z - - - void glRasterPos3xvOES - const GLfixed *coords - - - void glRasterPos4d - GLdouble x - GLdouble y - GLdouble z - GLdouble w - - - - void glRasterPos4dv - const GLdouble *v - - - - void glRasterPos4f - GLfloat x - GLfloat y - GLfloat z - GLfloat w - - - - void glRasterPos4fv - const GLfloat *v - - - - void glRasterPos4i - GLint x - GLint y - GLint z - GLint w - - - - void glRasterPos4iv - const GLint *v - - - - void glRasterPos4s - GLshort x - GLshort y - GLshort z - GLshort w - - - - void glRasterPos4sv - const GLshort *v - - - - void glRasterPos4xOES - GLfixed x - GLfixed y - GLfixed z - GLfixed w - - - void glRasterPos4xvOES - const GLfixed *coords - - - void glReadBuffer - GLenum src - - - - void glReadBufferIndexedEXT - GLenum src - GLint index - - - void glReadBufferNV - GLenum mode - - - void glReadInstrumentsSGIX - GLint marker - - - - void glReadPixels - GLint x - GLint y - GLsizei width - GLsizei height - GLenum format - GLenum type - void *pixels - - - - - void glReadnPixels - GLint x - GLint y - GLsizei width - GLsizei height - GLenum format - GLenum type - GLsizei bufSize - void *data - - - void glReadnPixelsARB - GLint x - GLint y - GLsizei width - GLsizei height - GLenum format - GLenum type - GLsizei bufSize - void *data - - - - void glReadnPixelsEXT - GLint x - GLint y - GLsizei width - GLsizei height - GLenum format - GLenum type - GLsizei bufSize - void *data - - - - void glReadnPixelsKHR - GLint x - GLint y - GLsizei width - GLsizei height - GLenum format - GLenum type - GLsizei bufSize - void *data - - - - void glRectd - GLdouble x1 - GLdouble y1 - GLdouble x2 - GLdouble y2 - - - - void glRectdv - const GLdouble *v1 - const GLdouble *v2 - - - - void glRectf - GLfloat x1 - GLfloat y1 - GLfloat x2 - GLfloat y2 - - - - void glRectfv - const GLfloat *v1 - const GLfloat *v2 - - - - void glRecti - GLint x1 - GLint y1 - GLint x2 - GLint y2 - - - - void glRectiv - const GLint *v1 - const GLint *v2 - - - - void glRects - GLshort x1 - GLshort y1 - GLshort x2 - GLshort y2 - - - - void glRectsv - const GLshort *v1 - const GLshort *v2 - - - - void glRectxOES - GLfixed x1 - GLfixed y1 - GLfixed x2 - GLfixed y2 - - - void glRectxvOES - const GLfixed *v1 - const GLfixed *v2 - - - void glReferencePlaneSGIX - const GLdouble *equation - - - - void glReleaseShaderCompiler - - - GLint glRenderMode - GLenum mode - - - - void glRenderbufferStorage - GLenum target - GLenum internalformat - GLsizei width - GLsizei height - - - - void glRenderbufferStorageEXT - GLenum target - GLenum internalformat - GLsizei width - GLsizei height - - - - - void glRenderbufferStorageMultisample - GLenum target - GLsizei samples - GLenum internalformat - GLsizei width - GLsizei height - - - - void glRenderbufferStorageMultisampleANGLE - GLenum target - GLsizei samples - GLenum internalformat - GLsizei width - GLsizei height - - - void glRenderbufferStorageMultisampleAPPLE - GLenum target - GLsizei samples - GLenum internalformat - GLsizei width - GLsizei height - - - void glRenderbufferStorageMultisampleCoverageNV - GLenum target - GLsizei coverageSamples - GLsizei colorSamples - GLenum internalformat - GLsizei width - GLsizei height - - - void glRenderbufferStorageMultisampleEXT - GLenum target - GLsizei samples - GLenum internalformat - GLsizei width - GLsizei height - - - - - void glRenderbufferStorageMultisampleIMG - GLenum target - GLsizei samples - GLenum internalformat - GLsizei width - GLsizei height - - - void glRenderbufferStorageMultisampleNV - GLenum target - GLsizei samples - GLenum internalformat - GLsizei width - GLsizei height - - - - void glRenderbufferStorageOES - GLenum target - GLenum internalformat - GLsizei width - GLsizei height - - - void glReplacementCodePointerSUN - GLenum type - GLsizei stride - const void **pointer - - - void glReplacementCodeubSUN - GLubyte code - - - void glReplacementCodeubvSUN - const GLubyte *code - - - void glReplacementCodeuiColor3fVertex3fSUN - GLuint rc - GLfloat r - GLfloat g - GLfloat b - GLfloat x - GLfloat y - GLfloat z - - - void glReplacementCodeuiColor3fVertex3fvSUN - const GLuint *rc - const GLfloat *c - const GLfloat *v - - - void glReplacementCodeuiColor4fNormal3fVertex3fSUN - GLuint rc - GLfloat r - GLfloat g - GLfloat b - GLfloat a - GLfloat nx - GLfloat ny - GLfloat nz - GLfloat x - GLfloat y - GLfloat z - - - void glReplacementCodeuiColor4fNormal3fVertex3fvSUN - const GLuint *rc - const GLfloat *c - const GLfloat *n - const GLfloat *v - - - void glReplacementCodeuiColor4ubVertex3fSUN - GLuint rc - GLubyte r - GLubyte g - GLubyte b - GLubyte a - GLfloat x - GLfloat y - GLfloat z - - - void glReplacementCodeuiColor4ubVertex3fvSUN - const GLuint *rc - const GLubyte *c - const GLfloat *v - - - void glReplacementCodeuiNormal3fVertex3fSUN - GLuint rc - GLfloat nx - GLfloat ny - GLfloat nz - GLfloat x - GLfloat y - GLfloat z - - - void glReplacementCodeuiNormal3fVertex3fvSUN - const GLuint *rc - const GLfloat *n - const GLfloat *v - - - void glReplacementCodeuiSUN - GLuint code - - - void glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN - GLuint rc - GLfloat s - GLfloat t - GLfloat r - GLfloat g - GLfloat b - GLfloat a - GLfloat nx - GLfloat ny - GLfloat nz - GLfloat x - GLfloat y - GLfloat z - - - void glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN - const GLuint *rc - const GLfloat *tc - const GLfloat *c - const GLfloat *n - const GLfloat *v - - - void glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN - GLuint rc - GLfloat s - GLfloat t - GLfloat nx - GLfloat ny - GLfloat nz - GLfloat x - GLfloat y - GLfloat z - - - void glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN - const GLuint *rc - const GLfloat *tc - const GLfloat *n - const GLfloat *v - - - void glReplacementCodeuiTexCoord2fVertex3fSUN - GLuint rc - GLfloat s - GLfloat t - GLfloat x - GLfloat y - GLfloat z - - - void glReplacementCodeuiTexCoord2fVertex3fvSUN - const GLuint *rc - const GLfloat *tc - const GLfloat *v - - - void glReplacementCodeuiVertex3fSUN - GLuint rc - GLfloat x - GLfloat y - GLfloat z - - - void glReplacementCodeuiVertex3fvSUN - const GLuint *rc - const GLfloat *v - - - void glReplacementCodeuivSUN - const GLuint *code - - - void glReplacementCodeusSUN - GLushort code - - - void glReplacementCodeusvSUN - const GLushort *code - - - void glRequestResidentProgramsNV - GLsizei n - const GLuint *programs - - - - void glResetHistogram - GLenum target - - - - void glResetHistogramEXT - GLenum target - - - - - void glResetMinmax - GLenum target - - - - void glResetMinmaxEXT - GLenum target - - - - - void glResizeBuffersMESA - - - void glResolveMultisampleFramebufferAPPLE - - - void glResumeTransformFeedback - - - void glResumeTransformFeedbackNV - - - - void glRotated - GLdouble angle - GLdouble x - GLdouble y - GLdouble z - - - - void glRotatef - GLfloat angle - GLfloat x - GLfloat y - GLfloat z - - - - void glRotatex - GLfixed angle - GLfixed x - GLfixed y - GLfixed z - - - void glRotatexOES - GLfixed angle - GLfixed x - GLfixed y - GLfixed z - - - void glSampleCoverage - GLfloat value - GLboolean invert - - - - void glSampleCoverageARB - GLfloat value - GLboolean invert - - - - void glSampleCoverageOES - GLfixed value - GLboolean invert - - - void glSampleCoveragex - GLclampx value - GLboolean invert - - - void glSampleCoveragexOES - GLclampx value - GLboolean invert - - - void glSampleMapATI - GLuint dst - GLuint interp - GLenum swizzle - - - void glSampleMaskEXT - GLclampf value - GLboolean invert - - - void glSampleMaskIndexedNV - GLuint index - GLbitfield mask - - - void glSampleMaskSGIS - GLclampf value - GLboolean invert - - - - - void glSampleMaski - GLuint maskNumber - GLbitfield mask - - - void glSamplePatternEXT - GLenum pattern - - - void glSamplePatternSGIS - GLenum pattern - - - - - void glSamplerParameterIiv - GLuint sampler - GLenum pname - const GLint *param - - - void glSamplerParameterIivEXT - GLuint sampler - GLenum pname - const GLint *param - - - - void glSamplerParameterIuiv - GLuint sampler - GLenum pname - const GLuint *param - - - void glSamplerParameterIuivEXT - GLuint sampler - GLenum pname - const GLuint *param - - - - void glSamplerParameterf - GLuint sampler - GLenum pname - GLfloat param - - - void glSamplerParameterfv - GLuint sampler - GLenum pname - const GLfloat *param - - - void glSamplerParameteri - GLuint sampler - GLenum pname - GLint param - - - void glSamplerParameteriv - GLuint sampler - GLenum pname - const GLint *param - - - void glScaled - GLdouble x - GLdouble y - GLdouble z - - - - void glScalef - GLfloat x - GLfloat y - GLfloat z - - - - void glScalex - GLfixed x - GLfixed y - GLfixed z - - - void glScalexOES - GLfixed x - GLfixed y - GLfixed z - - - void glScissor - GLint x - GLint y - GLsizei width - GLsizei height - - - - void glScissorArrayv - GLuint first - GLsizei count - const GLint *v - - - void glScissorIndexed - GLuint index - GLint left - GLint bottom - GLsizei width - GLsizei height - - - void glScissorIndexedv - GLuint index - const GLint *v - - - void glSecondaryColor3b - GLbyte red - GLbyte green - GLbyte blue - - - - void glSecondaryColor3bEXT - GLbyte red - GLbyte green - GLbyte blue - - - - - void glSecondaryColor3bv - const GLbyte *v - - - - void glSecondaryColor3bvEXT - const GLbyte *v - - - - - void glSecondaryColor3d - GLdouble red - GLdouble green - GLdouble blue - - - - void glSecondaryColor3dEXT - GLdouble red - GLdouble green - GLdouble blue - - - - - void glSecondaryColor3dv - const GLdouble *v - - - - void glSecondaryColor3dvEXT - const GLdouble *v - - - - - void glSecondaryColor3f - GLfloat red - GLfloat green - GLfloat blue - - - - void glSecondaryColor3fEXT - GLfloat red - GLfloat green - GLfloat blue - - - - - void glSecondaryColor3fv - const GLfloat *v - - - - void glSecondaryColor3fvEXT - const GLfloat *v - - - - - void glSecondaryColor3hNV - GLhalfNV red - GLhalfNV green - GLhalfNV blue - - - - void glSecondaryColor3hvNV - const GLhalfNV *v - - - - void glSecondaryColor3i - GLint red - GLint green - GLint blue - - - - void glSecondaryColor3iEXT - GLint red - GLint green - GLint blue - - - - - void glSecondaryColor3iv - const GLint *v - - - - void glSecondaryColor3ivEXT - const GLint *v - - - - - void glSecondaryColor3s - GLshort red - GLshort green - GLshort blue - - - - void glSecondaryColor3sEXT - GLshort red - GLshort green - GLshort blue - - - - - void glSecondaryColor3sv - const GLshort *v - - - - void glSecondaryColor3svEXT - const GLshort *v - - - - - void glSecondaryColor3ub - GLubyte red - GLubyte green - GLubyte blue - - - - void glSecondaryColor3ubEXT - GLubyte red - GLubyte green - GLubyte blue - - - - - void glSecondaryColor3ubv - const GLubyte *v - - - - void glSecondaryColor3ubvEXT - const GLubyte *v - - - - - void glSecondaryColor3ui - GLuint red - GLuint green - GLuint blue - - - - void glSecondaryColor3uiEXT - GLuint red - GLuint green - GLuint blue - - - - - void glSecondaryColor3uiv - const GLuint *v - - - - void glSecondaryColor3uivEXT - const GLuint *v - - - - - void glSecondaryColor3us - GLushort red - GLushort green - GLushort blue - - - - void glSecondaryColor3usEXT - GLushort red - GLushort green - GLushort blue - - - - - void glSecondaryColor3usv - const GLushort *v - - - - void glSecondaryColor3usvEXT - const GLushort *v - - - - - void glSecondaryColorFormatNV - GLint size - GLenum type - GLsizei stride - - - void glSecondaryColorP3ui - GLenum type - GLuint color - - - void glSecondaryColorP3uiv - GLenum type - const GLuint *color - - - void glSecondaryColorPointer - GLint size - GLenum type - GLsizei stride - const void *pointer - - - void glSecondaryColorPointerEXT - GLint size - GLenum type - GLsizei stride - const void *pointer - - - - void glSecondaryColorPointerListIBM - GLint size - GLenum type - GLint stride - const void **pointer - GLint ptrstride - - - void glSelectBuffer - GLsizei size - GLuint *buffer - - - - void glSelectPerfMonitorCountersAMD - GLuint monitor - GLboolean enable - GLuint group - GLint numCounters - GLuint *counterList - - - void glSeparableFilter2D - GLenum target - GLenum internalformat - GLsizei width - GLsizei height - GLenum format - GLenum type - const void *row - const void *column - - - - - void glSeparableFilter2DEXT - GLenum target - GLenum internalformat - GLsizei width - GLsizei height - GLenum format - GLenum type - const void *row - const void *column - - - - - void glSetFenceAPPLE - GLuint fence - - - void glSetFenceNV - GLuint fence - GLenum condition - - - void glSetFragmentShaderConstantATI - GLuint dst - const GLfloat *value - - - void glSetInvariantEXT - GLuint id - GLenum type - const void *addr - - - void glSetLocalConstantEXT - GLuint id - GLenum type - const void *addr - - - void glSetMultisamplefvAMD - GLenum pname - GLuint index - const GLfloat *val - - - void glShadeModel - GLenum mode - - - - void glShaderBinary - GLsizei count - const GLuint *shaders - GLenum binaryformat - const void *binary - GLsizei length - - - void glShaderOp1EXT - GLenum op - GLuint res - GLuint arg1 - - - void glShaderOp2EXT - GLenum op - GLuint res - GLuint arg1 - GLuint arg2 - - - void glShaderOp3EXT - GLenum op - GLuint res - GLuint arg1 - GLuint arg2 - GLuint arg3 - - - void glShaderSource - GLuint shader - GLsizei count - const GLchar *const*string - const GLint *length - - - void glShaderSourceARB - GLhandleARB shaderObj - GLsizei count - const GLcharARB **string - const GLint *length - - - - void glShaderStorageBlockBinding - GLuint program - GLuint storageBlockIndex - GLuint storageBlockBinding - - - void glSharpenTexFuncSGIS - GLenum target - GLsizei n - const GLfloat *points - - - - void glSpriteParameterfSGIX - GLenum pname - GLfloat param - - - - void glSpriteParameterfvSGIX - GLenum pname - const GLfloat *params - - - - void glSpriteParameteriSGIX - GLenum pname - GLint param - - - - void glSpriteParameterivSGIX - GLenum pname - const GLint *params - - - - void glStartInstrumentsSGIX - - - - void glStartTilingQCOM - GLuint x - GLuint y - GLuint width - GLuint height - GLbitfield preserveMask - - - void glStencilClearTagEXT - GLsizei stencilTagBits - GLuint stencilClearTag - - - - void glStencilFillPathInstancedNV - GLsizei numPaths - GLenum pathNameType - const void *paths - GLuint pathBase - GLenum fillMode - GLuint mask - GLenum transformType - const GLfloat *transformValues - - - void glStencilFillPathNV - GLuint path - GLenum fillMode - GLuint mask - - - void glStencilFunc - GLenum func - GLint ref - GLuint mask - - - - void glStencilFuncSeparate - GLenum face - GLenum func - GLint ref - GLuint mask - - - void glStencilFuncSeparateATI - GLenum frontfunc - GLenum backfunc - GLint ref - GLuint mask - - - void glStencilMask - GLuint mask - - - - void glStencilMaskSeparate - GLenum face - GLuint mask - - - void glStencilOp - GLenum fail - GLenum zfail - GLenum zpass - - - - void glStencilOpSeparate - GLenum face - GLenum sfail - GLenum dpfail - GLenum dppass - - - void glStencilOpSeparateATI - GLenum face - GLenum sfail - GLenum dpfail - GLenum dppass - - - - void glStencilOpValueAMD - GLenum face - GLuint value - - - void glStencilStrokePathInstancedNV - GLsizei numPaths - GLenum pathNameType - const void *paths - GLuint pathBase - GLint reference - GLuint mask - GLenum transformType - const GLfloat *transformValues - - - void glStencilStrokePathNV - GLuint path - GLint reference - GLuint mask - - - void glStencilThenCoverFillPathInstancedNV - GLsizei numPaths - GLenum pathNameType - const void *paths - GLuint pathBase - GLenum fillMode - GLuint mask - GLenum coverMode - GLenum transformType - const GLfloat *transformValues - - - void glStencilThenCoverFillPathNV - GLuint path - GLenum fillMode - GLuint mask - GLenum coverMode - - - void glStencilThenCoverStrokePathInstancedNV - GLsizei numPaths - GLenum pathNameType - const void *paths - GLuint pathBase - GLint reference - GLuint mask - GLenum coverMode - GLenum transformType - const GLfloat *transformValues - - - void glStencilThenCoverStrokePathNV - GLuint path - GLint reference - GLuint mask - GLenum coverMode - - - void glStopInstrumentsSGIX - GLint marker - - - - void glStringMarkerGREMEDY - GLsizei len - const void *string - - - void glSwizzleEXT - GLuint res - GLuint in - GLenum outX - GLenum outY - GLenum outZ - GLenum outW - - - void glSyncTextureINTEL - GLuint texture - - - void glTagSampleBufferSGIX - - - - void glTangent3bEXT - GLbyte tx - GLbyte ty - GLbyte tz - - - - void glTangent3bvEXT - const GLbyte *v - - - void glTangent3dEXT - GLdouble tx - GLdouble ty - GLdouble tz - - - - void glTangent3dvEXT - const GLdouble *v - - - void glTangent3fEXT - GLfloat tx - GLfloat ty - GLfloat tz - - - - void glTangent3fvEXT - const GLfloat *v - - - void glTangent3iEXT - GLint tx - GLint ty - GLint tz - - - - void glTangent3ivEXT - const GLint *v - - - void glTangent3sEXT - GLshort tx - GLshort ty - GLshort tz - - - - void glTangent3svEXT - const GLshort *v - - - void glTangentPointerEXT - GLenum type - GLsizei stride - const void *pointer - - - void glTbufferMask3DFX - GLuint mask - - - void glTessellationFactorAMD - GLfloat factor - - - void glTessellationModeAMD - GLenum mode - - - GLboolean glTestFenceAPPLE - GLuint fence - - - GLboolean glTestFenceNV - GLuint fence - - - - GLboolean glTestObjectAPPLE - GLenum object - GLuint name - - - void glTexBuffer - GLenum target - GLenum internalformat - GLuint buffer - - - void glTexBufferARB - GLenum target - GLenum internalformat - GLuint buffer - - - - void glTexBufferEXT - GLenum target - GLenum internalformat - GLuint buffer - - - - void glTexBufferRange - GLenum target - GLenum internalformat - GLuint buffer - GLintptr offset - GLsizeiptr size - - - void glTexBufferRangeEXT - GLenum target - GLenum internalformat - GLuint buffer - GLintptr offset - GLsizeiptr size - - - - void glTexBumpParameterfvATI - GLenum pname - const GLfloat *param - - - void glTexBumpParameterivATI - GLenum pname - const GLint *param - - - void glTexCoord1bOES - GLbyte s - - - void glTexCoord1bvOES - const GLbyte *coords - - - void glTexCoord1d - GLdouble s - - - - void glTexCoord1dv - const GLdouble *v - - - - void glTexCoord1f - GLfloat s - - - - void glTexCoord1fv - const GLfloat *v - - - - void glTexCoord1hNV - GLhalfNV s - - - - void glTexCoord1hvNV - const GLhalfNV *v - - - - void glTexCoord1i - GLint s - - - - void glTexCoord1iv - const GLint *v - - - - void glTexCoord1s - GLshort s - - - - void glTexCoord1sv - const GLshort *v - - - - void glTexCoord1xOES - GLfixed s - - - void glTexCoord1xvOES - const GLfixed *coords - - - void glTexCoord2bOES - GLbyte s - GLbyte t - - - void glTexCoord2bvOES - const GLbyte *coords - - - void glTexCoord2d - GLdouble s - GLdouble t - - - - void glTexCoord2dv - const GLdouble *v - - - - void glTexCoord2f - GLfloat s - GLfloat t - - - - void glTexCoord2fColor3fVertex3fSUN - GLfloat s - GLfloat t - GLfloat r - GLfloat g - GLfloat b - GLfloat x - GLfloat y - GLfloat z - - - void glTexCoord2fColor3fVertex3fvSUN - const GLfloat *tc - const GLfloat *c - const GLfloat *v - - - void glTexCoord2fColor4fNormal3fVertex3fSUN - GLfloat s - GLfloat t - GLfloat r - GLfloat g - GLfloat b - GLfloat a - GLfloat nx - GLfloat ny - GLfloat nz - GLfloat x - GLfloat y - GLfloat z - - - void glTexCoord2fColor4fNormal3fVertex3fvSUN - const GLfloat *tc - const GLfloat *c - const GLfloat *n - const GLfloat *v - - - void glTexCoord2fColor4ubVertex3fSUN - GLfloat s - GLfloat t - GLubyte r - GLubyte g - GLubyte b - GLubyte a - GLfloat x - GLfloat y - GLfloat z - - - void glTexCoord2fColor4ubVertex3fvSUN - const GLfloat *tc - const GLubyte *c - const GLfloat *v - - - void glTexCoord2fNormal3fVertex3fSUN - GLfloat s - GLfloat t - GLfloat nx - GLfloat ny - GLfloat nz - GLfloat x - GLfloat y - GLfloat z - - - void glTexCoord2fNormal3fVertex3fvSUN - const GLfloat *tc - const GLfloat *n - const GLfloat *v - - - void glTexCoord2fVertex3fSUN - GLfloat s - GLfloat t - GLfloat x - GLfloat y - GLfloat z - - - void glTexCoord2fVertex3fvSUN - const GLfloat *tc - const GLfloat *v - - - void glTexCoord2fv - const GLfloat *v - - - - void glTexCoord2hNV - GLhalfNV s - GLhalfNV t - - - - void glTexCoord2hvNV - const GLhalfNV *v - - - - void glTexCoord2i - GLint s - GLint t - - - - void glTexCoord2iv - const GLint *v - - - - void glTexCoord2s - GLshort s - GLshort t - - - - void glTexCoord2sv - const GLshort *v - - - - void glTexCoord2xOES - GLfixed s - GLfixed t - - - void glTexCoord2xvOES - const GLfixed *coords - - - void glTexCoord3bOES - GLbyte s - GLbyte t - GLbyte r - - - void glTexCoord3bvOES - const GLbyte *coords - - - void glTexCoord3d - GLdouble s - GLdouble t - GLdouble r - - - - void glTexCoord3dv - const GLdouble *v - - - - void glTexCoord3f - GLfloat s - GLfloat t - GLfloat r - - - - void glTexCoord3fv - const GLfloat *v - - - - void glTexCoord3hNV - GLhalfNV s - GLhalfNV t - GLhalfNV r - - - - void glTexCoord3hvNV - const GLhalfNV *v - - - - void glTexCoord3i - GLint s - GLint t - GLint r - - - - void glTexCoord3iv - const GLint *v - - - - void glTexCoord3s - GLshort s - GLshort t - GLshort r - - - - void glTexCoord3sv - const GLshort *v - - - - void glTexCoord3xOES - GLfixed s - GLfixed t - GLfixed r - - - void glTexCoord3xvOES - const GLfixed *coords - - - void glTexCoord4bOES - GLbyte s - GLbyte t - GLbyte r - GLbyte q - - - void glTexCoord4bvOES - const GLbyte *coords - - - void glTexCoord4d - GLdouble s - GLdouble t - GLdouble r - GLdouble q - - - - void glTexCoord4dv - const GLdouble *v - - - - void glTexCoord4f - GLfloat s - GLfloat t - GLfloat r - GLfloat q - - - - void glTexCoord4fColor4fNormal3fVertex4fSUN - GLfloat s - GLfloat t - GLfloat p - GLfloat q - GLfloat r - GLfloat g - GLfloat b - GLfloat a - GLfloat nx - GLfloat ny - GLfloat nz - GLfloat x - GLfloat y - GLfloat z - GLfloat w - - - void glTexCoord4fColor4fNormal3fVertex4fvSUN - const GLfloat *tc - const GLfloat *c - const GLfloat *n - const GLfloat *v - - - void glTexCoord4fVertex4fSUN - GLfloat s - GLfloat t - GLfloat p - GLfloat q - GLfloat x - GLfloat y - GLfloat z - GLfloat w - - - void glTexCoord4fVertex4fvSUN - const GLfloat *tc - const GLfloat *v - - - void glTexCoord4fv - const GLfloat *v - - - - void glTexCoord4hNV - GLhalfNV s - GLhalfNV t - GLhalfNV r - GLhalfNV q - - - - void glTexCoord4hvNV - const GLhalfNV *v - - - - void glTexCoord4i - GLint s - GLint t - GLint r - GLint q - - - - void glTexCoord4iv - const GLint *v - - - - void glTexCoord4s - GLshort s - GLshort t - GLshort r - GLshort q - - - - void glTexCoord4sv - const GLshort *v - - - - void glTexCoord4xOES - GLfixed s - GLfixed t - GLfixed r - GLfixed q - - - void glTexCoord4xvOES - const GLfixed *coords - - - void glTexCoordFormatNV - GLint size - GLenum type - GLsizei stride - - - void glTexCoordP1ui - GLenum type - GLuint coords - - - void glTexCoordP1uiv - GLenum type - const GLuint *coords - - - void glTexCoordP2ui - GLenum type - GLuint coords - - - void glTexCoordP2uiv - GLenum type - const GLuint *coords - - - void glTexCoordP3ui - GLenum type - GLuint coords - - - void glTexCoordP3uiv - GLenum type - const GLuint *coords - - - void glTexCoordP4ui - GLenum type - GLuint coords - - - void glTexCoordP4uiv - GLenum type - const GLuint *coords - - - void glTexCoordPointer - GLint size - GLenum type - GLsizei stride - const void *pointer - - - void glTexCoordPointerEXT - GLint size - GLenum type - GLsizei stride - GLsizei count - const void *pointer - - - void glTexCoordPointerListIBM - GLint size - GLenum type - GLint stride - const void **pointer - GLint ptrstride - - - void glTexCoordPointervINTEL - GLint size - GLenum type - const void **pointer - - - void glTexEnvf - GLenum target - GLenum pname - GLfloat param - - - - void glTexEnvfv - GLenum target - GLenum pname - const GLfloat *params - - - - void glTexEnvi - GLenum target - GLenum pname - GLint param - - - - void glTexEnviv - GLenum target - GLenum pname - const GLint *params - - - - void glTexEnvx - GLenum target - GLenum pname - GLfixed param - - - void glTexEnvxOES - GLenum target - GLenum pname - GLfixed param - - - void glTexEnvxv - GLenum target - GLenum pname - const GLfixed *params - - - void glTexEnvxvOES - GLenum target - GLenum pname - const GLfixed *params - - - void glTexFilterFuncSGIS - GLenum target - GLenum filter - GLsizei n - const GLfloat *weights - - - - void glTexGend - GLenum coord - GLenum pname - GLdouble param - - - - void glTexGendv - GLenum coord - GLenum pname - const GLdouble *params - - - - void glTexGenf - GLenum coord - GLenum pname - GLfloat param - - - - void glTexGenfOES - GLenum coord - GLenum pname - GLfloat param - - - void glTexGenfv - GLenum coord - GLenum pname - const GLfloat *params - - - - void glTexGenfvOES - GLenum coord - GLenum pname - const GLfloat *params - - - void glTexGeni - GLenum coord - GLenum pname - GLint param - - - - void glTexGeniOES - GLenum coord - GLenum pname - GLint param - - - void glTexGeniv - GLenum coord - GLenum pname - const GLint *params - - - - void glTexGenivOES - GLenum coord - GLenum pname - const GLint *params - - - void glTexGenxOES - GLenum coord - GLenum pname - GLfixed param - - - void glTexGenxvOES - GLenum coord - GLenum pname - const GLfixed *params - - - void glTexImage1D - GLenum target - GLint level - GLint internalformat - GLsizei width - GLint border - GLenum format - GLenum type - const void *pixels - - - - - void glTexImage2D - GLenum target - GLint level - GLint internalformat - GLsizei width - GLsizei height - GLint border - GLenum format - GLenum type - const void *pixels - - - - - void glTexImage2DMultisample - GLenum target - GLsizei samples - GLenum internalformat - GLsizei width - GLsizei height - GLboolean fixedsamplelocations - - - void glTexImage2DMultisampleCoverageNV - GLenum target - GLsizei coverageSamples - GLsizei colorSamples - GLint internalFormat - GLsizei width - GLsizei height - GLboolean fixedSampleLocations - - - void glTexImage3D - GLenum target - GLint level - GLint internalformat - GLsizei width - GLsizei height - GLsizei depth - GLint border - GLenum format - GLenum type - const void *pixels - - - - - void glTexImage3DEXT - GLenum target - GLint level - GLenum internalformat - GLsizei width - GLsizei height - GLsizei depth - GLint border - GLenum format - GLenum type - const void *pixels - - - - - void glTexImage3DMultisample - GLenum target - GLsizei samples - GLenum internalformat - GLsizei width - GLsizei height - GLsizei depth - GLboolean fixedsamplelocations - - - void glTexImage3DMultisampleCoverageNV - GLenum target - GLsizei coverageSamples - GLsizei colorSamples - GLint internalFormat - GLsizei width - GLsizei height - GLsizei depth - GLboolean fixedSampleLocations - - - void glTexImage3DOES - GLenum target - GLint level - GLenum internalformat - GLsizei width - GLsizei height - GLsizei depth - GLint border - GLenum format - GLenum type - const void *pixels - - - - void glTexImage4DSGIS - GLenum target - GLint level - GLenum internalformat - GLsizei width - GLsizei height - GLsizei depth - GLsizei size4d - GLint border - GLenum format - GLenum type - const void *pixels - - - - void glTexPageCommitmentARB - GLenum target - GLint level - GLint xoffset - GLint yoffset - GLint zoffset - GLsizei width - GLsizei height - GLsizei depth - GLboolean resident - - - void glTexParameterIiv - GLenum target - GLenum pname - const GLint *params - - - - void glTexParameterIivEXT - GLenum target - GLenum pname - const GLint *params - - - - void glTexParameterIuiv - GLenum target - GLenum pname - const GLuint *params - - - - void glTexParameterIuivEXT - GLenum target - GLenum pname - const GLuint *params - - - - void glTexParameterf - GLenum target - GLenum pname - GLfloat param - - - - void glTexParameterfv - GLenum target - GLenum pname - const GLfloat *params - - - - void glTexParameteri - GLenum target - GLenum pname - GLint param - - - - void glTexParameteriv - GLenum target - GLenum pname - const GLint *params - - - - void glTexParameterx - GLenum target - GLenum pname - GLfixed param - - - void glTexParameterxOES - GLenum target - GLenum pname - GLfixed param - - - void glTexParameterxv - GLenum target - GLenum pname - const GLfixed *params - - - void glTexParameterxvOES - GLenum target - GLenum pname - const GLfixed *params - - - void glTexRenderbufferNV - GLenum target - GLuint renderbuffer - - - void glTexStorage1D - GLenum target - GLsizei levels - GLenum internalformat - GLsizei width - - - void glTexStorage1DEXT - GLenum target - GLsizei levels - GLenum internalformat - GLsizei width - - - - void glTexStorage2D - GLenum target - GLsizei levels - GLenum internalformat - GLsizei width - GLsizei height - - - void glTexStorage2DEXT - GLenum target - GLsizei levels - GLenum internalformat - GLsizei width - GLsizei height - - - - void glTexStorage2DMultisample - GLenum target - GLsizei samples - GLenum internalformat - GLsizei width - GLsizei height - GLboolean fixedsamplelocations - - - void glTexStorage3D - GLenum target - GLsizei levels - GLenum internalformat - GLsizei width - GLsizei height - GLsizei depth - - - void glTexStorage3DEXT - GLenum target - GLsizei levels - GLenum internalformat - GLsizei width - GLsizei height - GLsizei depth - - - - void glTexStorage3DMultisample - GLenum target - GLsizei samples - GLenum internalformat - GLsizei width - GLsizei height - GLsizei depth - GLboolean fixedsamplelocations - - - void glTexStorage3DMultisampleOES - GLenum target - GLsizei samples - GLenum internalformat - GLsizei width - GLsizei height - GLsizei depth - GLboolean fixedsamplelocations - - - - void glTexStorageSparseAMD - GLenum target - GLenum internalFormat - GLsizei width - GLsizei height - GLsizei depth - GLsizei layers - GLbitfield flags - - - void glTexSubImage1D - GLenum target - GLint level - GLint xoffset - GLsizei width - GLenum format - GLenum type - const void *pixels - - - - - void glTexSubImage1DEXT - GLenum target - GLint level - GLint xoffset - GLsizei width - GLenum format - GLenum type - const void *pixels - - - - - void glTexSubImage2D - GLenum target - GLint level - GLint xoffset - GLint yoffset - GLsizei width - GLsizei height - GLenum format - GLenum type - const void *pixels - - - - - void glTexSubImage2DEXT - GLenum target - GLint level - GLint xoffset - GLint yoffset - GLsizei width - GLsizei height - GLenum format - GLenum type - const void *pixels - - - - - void glTexSubImage3D - GLenum target - GLint level - GLint xoffset - GLint yoffset - GLint zoffset - GLsizei width - GLsizei height - GLsizei depth - GLenum format - GLenum type - const void *pixels - - - - - void glTexSubImage3DEXT - GLenum target - GLint level - GLint xoffset - GLint yoffset - GLint zoffset - GLsizei width - GLsizei height - GLsizei depth - GLenum format - GLenum type - const void *pixels - - - - - void glTexSubImage3DOES - GLenum target - GLint level - GLint xoffset - GLint yoffset - GLint zoffset - GLsizei width - GLsizei height - GLsizei depth - GLenum format - GLenum type - const void *pixels - - - - void glTexSubImage4DSGIS - GLenum target - GLint level - GLint xoffset - GLint yoffset - GLint zoffset - GLint woffset - GLsizei width - GLsizei height - GLsizei depth - GLsizei size4d - GLenum format - GLenum type - const void *pixels - - - - void glTextureBarrier - - - void glTextureBarrierNV - - - - void glTextureBuffer - GLuint texture - GLenum internalformat - GLuint buffer - - - void glTextureBufferEXT - GLuint texture - GLenum target - GLenum internalformat - GLuint buffer - - - void glTextureBufferRange - GLuint texture - GLenum internalformat - GLuint buffer - GLintptr offset - GLsizei size - - - void glTextureBufferRangeEXT - GLuint texture - GLenum target - GLenum internalformat - GLuint buffer - GLintptr offset - GLsizeiptr size - - - void glTextureColorMaskSGIS - GLboolean red - GLboolean green - GLboolean blue - GLboolean alpha - - - - void glTextureImage1DEXT - GLuint texture - GLenum target - GLint level - GLint internalformat - GLsizei width - GLint border - GLenum format - GLenum type - const void *pixels - - - void glTextureImage2DEXT - GLuint texture - GLenum target - GLint level - GLint internalformat - GLsizei width - GLsizei height - GLint border - GLenum format - GLenum type - const void *pixels - - - void glTextureImage2DMultisampleCoverageNV - GLuint texture - GLenum target - GLsizei coverageSamples - GLsizei colorSamples - GLint internalFormat - GLsizei width - GLsizei height - GLboolean fixedSampleLocations - - - void glTextureImage2DMultisampleNV - GLuint texture - GLenum target - GLsizei samples - GLint internalFormat - GLsizei width - GLsizei height - GLboolean fixedSampleLocations - - - void glTextureImage3DEXT - GLuint texture - GLenum target - GLint level - GLint internalformat - GLsizei width - GLsizei height - GLsizei depth - GLint border - GLenum format - GLenum type - const void *pixels - - - void glTextureImage3DMultisampleCoverageNV - GLuint texture - GLenum target - GLsizei coverageSamples - GLsizei colorSamples - GLint internalFormat - GLsizei width - GLsizei height - GLsizei depth - GLboolean fixedSampleLocations - - - void glTextureImage3DMultisampleNV - GLuint texture - GLenum target - GLsizei samples - GLint internalFormat - GLsizei width - GLsizei height - GLsizei depth - GLboolean fixedSampleLocations - - - void glTextureLightEXT - GLenum pname - - - void glTextureMaterialEXT - GLenum face - GLenum mode - - - void glTextureNormalEXT - GLenum mode - - - void glTexturePageCommitmentEXT - GLuint texture - GLint level - GLint xoffset - GLint yoffset - GLint zoffset - GLsizei width - GLsizei height - GLsizei depth - GLboolean resident - - - void glTextureParameterIiv - GLuint texture - GLenum pname - const GLint *params - - - void glTextureParameterIivEXT - GLuint texture - GLenum target - GLenum pname - const GLint *params - - - void glTextureParameterIuiv - GLuint texture - GLenum pname - const GLuint *params - - - void glTextureParameterIuivEXT - GLuint texture - GLenum target - GLenum pname - const GLuint *params - - - void glTextureParameterf - GLuint texture - GLenum pname - GLfloat param - - - void glTextureParameterfEXT - GLuint texture - GLenum target - GLenum pname - GLfloat param - - - - void glTextureParameterfv - GLuint texture - GLenum pname - const GLfloat *param - - - void glTextureParameterfvEXT - GLuint texture - GLenum target - GLenum pname - const GLfloat *params - - - void glTextureParameteri - GLuint texture - GLenum pname - GLint param - - - void glTextureParameteriEXT - GLuint texture - GLenum target - GLenum pname - GLint param - - - - void glTextureParameteriv - GLuint texture - GLenum pname - const GLint *param - - - void glTextureParameterivEXT - GLuint texture - GLenum target - GLenum pname - const GLint *params - - - void glTextureRangeAPPLE - GLenum target - GLsizei length - const void *pointer - - - void glTextureRenderbufferEXT - GLuint texture - GLenum target - GLuint renderbuffer - - - void glTextureStorage1D - GLuint texture - GLsizei levels - GLenum internalformat - GLsizei width - - - void glTextureStorage1DEXT - GLuint texture - GLenum target - GLsizei levels - GLenum internalformat - GLsizei width - - - void glTextureStorage2D - GLuint texture - GLsizei levels - GLenum internalformat - GLsizei width - GLsizei height - - - void glTextureStorage2DEXT - GLuint texture - GLenum target - GLsizei levels - GLenum internalformat - GLsizei width - GLsizei height - - - void glTextureStorage2DMultisample - GLuint texture - GLsizei samples - GLenum internalformat - GLsizei width - GLsizei height - GLboolean fixedsamplelocations - - - void glTextureStorage2DMultisampleEXT - GLuint texture - GLenum target - GLsizei samples - GLenum internalformat - GLsizei width - GLsizei height - GLboolean fixedsamplelocations - - - void glTextureStorage3D - GLuint texture - GLsizei levels - GLenum internalformat - GLsizei width - GLsizei height - GLsizei depth - - - void glTextureStorage3DEXT - GLuint texture - GLenum target - GLsizei levels - GLenum internalformat - GLsizei width - GLsizei height - GLsizei depth - - - void glTextureStorage3DMultisample - GLuint texture - GLsizei samples - GLenum internalformat - GLsizei width - GLsizei height - GLsizei depth - GLboolean fixedsamplelocations - - - void glTextureStorage3DMultisampleEXT - GLuint texture - GLenum target - GLsizei samples - GLenum internalformat - GLsizei width - GLsizei height - GLsizei depth - GLboolean fixedsamplelocations - - - void glTextureStorageSparseAMD - GLuint texture - GLenum target - GLenum internalFormat - GLsizei width - GLsizei height - GLsizei depth - GLsizei layers - GLbitfield flags - - - void glTextureSubImage1D - GLuint texture - GLint level - GLint xoffset - GLsizei width - GLenum format - GLenum type - const void *pixels - - - void glTextureSubImage1DEXT - GLuint texture - GLenum target - GLint level - GLint xoffset - GLsizei width - GLenum format - GLenum type - const void *pixels - - - void glTextureSubImage2D - GLuint texture - GLint level - GLint xoffset - GLint yoffset - GLsizei width - GLsizei height - GLenum format - GLenum type - const void *pixels - - - void glTextureSubImage2DEXT - GLuint texture - GLenum target - GLint level - GLint xoffset - GLint yoffset - GLsizei width - GLsizei height - GLenum format - GLenum type - const void *pixels - - - void glTextureSubImage3D - GLuint texture - GLint level - GLint xoffset - GLint yoffset - GLint zoffset - GLsizei width - GLsizei height - GLsizei depth - GLenum format - GLenum type - const void *pixels - - - void glTextureSubImage3DEXT - GLuint texture - GLenum target - GLint level - GLint xoffset - GLint yoffset - GLint zoffset - GLsizei width - GLsizei height - GLsizei depth - GLenum format - GLenum type - const void *pixels - - - void glTextureView - GLuint texture - GLenum target - GLuint origtexture - GLenum internalformat - GLuint minlevel - GLuint numlevels - GLuint minlayer - GLuint numlayers - - - void glTextureViewEXT - GLuint texture - GLenum target - GLuint origtexture - GLenum internalformat - GLuint minlevel - GLuint numlevels - GLuint minlayer - GLuint numlayers - - - - void glTrackMatrixNV - GLenum target - GLuint address - GLenum matrix - GLenum transform - - - - void glTransformFeedbackAttribsNV - GLsizei count - const GLint *attribs - GLenum bufferMode - - - void glTransformFeedbackBufferBase - GLuint xfb - GLuint index - GLuint buffer - - - void glTransformFeedbackBufferRange - GLuint xfb - GLuint index - GLuint buffer - GLintptr offset - GLsizei size - - - void glTransformFeedbackStreamAttribsNV - GLsizei count - const GLint *attribs - GLsizei nbuffers - const GLint *bufstreams - GLenum bufferMode - - - void glTransformFeedbackVaryings - GLuint program - GLsizei count - const GLchar *const*varyings - GLenum bufferMode - - - void glTransformFeedbackVaryingsEXT - GLuint program - GLsizei count - const GLchar *const*varyings - GLenum bufferMode - - - - void glTransformFeedbackVaryingsNV - GLuint program - GLsizei count - const GLint *locations - GLenum bufferMode - - - void glTransformPathNV - GLuint resultPath - GLuint srcPath - GLenum transformType - const GLfloat *transformValues - - - void glTranslated - GLdouble x - GLdouble y - GLdouble z - - - - void glTranslatef - GLfloat x - GLfloat y - GLfloat z - - - - void glTranslatex - GLfixed x - GLfixed y - GLfixed z - - - void glTranslatexOES - GLfixed x - GLfixed y - GLfixed z - - - void glUniform1d - GLint location - GLdouble x - - - void glUniform1dv - GLint location - GLsizei count - const GLdouble *value - - - void glUniform1f - GLint location - GLfloat v0 - - - void glUniform1fARB - GLint location - GLfloat v0 - - - - void glUniform1fv - GLint location - GLsizei count - const GLfloat *value - - - void glUniform1fvARB - GLint location - GLsizei count - const GLfloat *value - - - - void glUniform1i - GLint location - GLint v0 - - - void glUniform1i64NV - GLint location - GLint64EXT x - - - void glUniform1i64vNV - GLint location - GLsizei count - const GLint64EXT *value - - - void glUniform1iARB - GLint location - GLint v0 - - - - void glUniform1iv - GLint location - GLsizei count - const GLint *value - - - void glUniform1ivARB - GLint location - GLsizei count - const GLint *value - - - - void glUniform1ui - GLint location - GLuint v0 - - - void glUniform1ui64NV - GLint location - GLuint64EXT x - - - void glUniform1ui64vNV - GLint location - GLsizei count - const GLuint64EXT *value - - - void glUniform1uiEXT - GLint location - GLuint v0 - - - - void glUniform1uiv - GLint location - GLsizei count - const GLuint *value - - - void glUniform1uivEXT - GLint location - GLsizei count - const GLuint *value - - - - void glUniform2d - GLint location - GLdouble x - GLdouble y - - - void glUniform2dv - GLint location - GLsizei count - const GLdouble *value - - - void glUniform2f - GLint location - GLfloat v0 - GLfloat v1 - - - void glUniform2fARB - GLint location - GLfloat v0 - GLfloat v1 - - - - void glUniform2fv - GLint location - GLsizei count - const GLfloat *value - - - void glUniform2fvARB - GLint location - GLsizei count - const GLfloat *value - - - - void glUniform2i - GLint location - GLint v0 - GLint v1 - - - void glUniform2i64NV - GLint location - GLint64EXT x - GLint64EXT y - - - void glUniform2i64vNV - GLint location - GLsizei count - const GLint64EXT *value - - - void glUniform2iARB - GLint location - GLint v0 - GLint v1 - - - - void glUniform2iv - GLint location - GLsizei count - const GLint *value - - - void glUniform2ivARB - GLint location - GLsizei count - const GLint *value - - - - void glUniform2ui - GLint location - GLuint v0 - GLuint v1 - - - void glUniform2ui64NV - GLint location - GLuint64EXT x - GLuint64EXT y - - - void glUniform2ui64vNV - GLint location - GLsizei count - const GLuint64EXT *value - - - void glUniform2uiEXT - GLint location - GLuint v0 - GLuint v1 - - - - void glUniform2uiv - GLint location - GLsizei count - const GLuint *value - - - void glUniform2uivEXT - GLint location - GLsizei count - const GLuint *value - - - - void glUniform3d - GLint location - GLdouble x - GLdouble y - GLdouble z - - - void glUniform3dv - GLint location - GLsizei count - const GLdouble *value - - - void glUniform3f - GLint location - GLfloat v0 - GLfloat v1 - GLfloat v2 - - - void glUniform3fARB - GLint location - GLfloat v0 - GLfloat v1 - GLfloat v2 - - - - void glUniform3fv - GLint location - GLsizei count - const GLfloat *value - - - void glUniform3fvARB - GLint location - GLsizei count - const GLfloat *value - - - - void glUniform3i - GLint location - GLint v0 - GLint v1 - GLint v2 - - - void glUniform3i64NV - GLint location - GLint64EXT x - GLint64EXT y - GLint64EXT z - - - void glUniform3i64vNV - GLint location - GLsizei count - const GLint64EXT *value - - - void glUniform3iARB - GLint location - GLint v0 - GLint v1 - GLint v2 - - - - void glUniform3iv - GLint location - GLsizei count - const GLint *value - - - void glUniform3ivARB - GLint location - GLsizei count - const GLint *value - - - - void glUniform3ui - GLint location - GLuint v0 - GLuint v1 - GLuint v2 - - - void glUniform3ui64NV - GLint location - GLuint64EXT x - GLuint64EXT y - GLuint64EXT z - - - void glUniform3ui64vNV - GLint location - GLsizei count - const GLuint64EXT *value - - - void glUniform3uiEXT - GLint location - GLuint v0 - GLuint v1 - GLuint v2 - - - - void glUniform3uiv - GLint location - GLsizei count - const GLuint *value - - - void glUniform3uivEXT - GLint location - GLsizei count - const GLuint *value - - - - void glUniform4d - GLint location - GLdouble x - GLdouble y - GLdouble z - GLdouble w - - - void glUniform4dv - GLint location - GLsizei count - const GLdouble *value - - - void glUniform4f - GLint location - GLfloat v0 - GLfloat v1 - GLfloat v2 - GLfloat v3 - - - void glUniform4fARB - GLint location - GLfloat v0 - GLfloat v1 - GLfloat v2 - GLfloat v3 - - - - void glUniform4fv - GLint location - GLsizei count - const GLfloat *value - - - void glUniform4fvARB - GLint location - GLsizei count - const GLfloat *value - - - - void glUniform4i - GLint location - GLint v0 - GLint v1 - GLint v2 - GLint v3 - - - void glUniform4i64NV - GLint location - GLint64EXT x - GLint64EXT y - GLint64EXT z - GLint64EXT w - - - void glUniform4i64vNV - GLint location - GLsizei count - const GLint64EXT *value - - - void glUniform4iARB - GLint location - GLint v0 - GLint v1 - GLint v2 - GLint v3 - - - - void glUniform4iv - GLint location - GLsizei count - const GLint *value - - - void glUniform4ivARB - GLint location - GLsizei count - const GLint *value - - - - void glUniform4ui - GLint location - GLuint v0 - GLuint v1 - GLuint v2 - GLuint v3 - - - void glUniform4ui64NV - GLint location - GLuint64EXT x - GLuint64EXT y - GLuint64EXT z - GLuint64EXT w - - - void glUniform4ui64vNV - GLint location - GLsizei count - const GLuint64EXT *value - - - void glUniform4uiEXT - GLint location - GLuint v0 - GLuint v1 - GLuint v2 - GLuint v3 - - - - void glUniform4uiv - GLint location - GLsizei count - const GLuint *value - - - void glUniform4uivEXT - GLint location - GLsizei count - const GLuint *value - - - - void glUniformBlockBinding - GLuint program - GLuint uniformBlockIndex - GLuint uniformBlockBinding - - - void glUniformBufferEXT - GLuint program - GLint location - GLuint buffer - - - void glUniformHandleui64ARB - GLint location - GLuint64 value - - - void glUniformHandleui64NV - GLint location - GLuint64 value - - - void glUniformHandleui64vARB - GLint location - GLsizei count - const GLuint64 *value - - - void glUniformHandleui64vNV - GLint location - GLsizei count - const GLuint64 *value - - - void glUniformMatrix2dv - GLint location - GLsizei count - GLboolean transpose - const GLdouble *value - - - void glUniformMatrix2fv - GLint location - GLsizei count - GLboolean transpose - const GLfloat *value - - - void glUniformMatrix2fvARB - GLint location - GLsizei count - GLboolean transpose - const GLfloat *value - - - - void glUniformMatrix2x3dv - GLint location - GLsizei count - GLboolean transpose - const GLdouble *value - - - void glUniformMatrix2x3fv - GLint location - GLsizei count - GLboolean transpose - const GLfloat *value - - - - void glUniformMatrix2x3fvNV - GLint location - GLsizei count - GLboolean transpose - const GLfloat *value - - - - void glUniformMatrix2x4dv - GLint location - GLsizei count - GLboolean transpose - const GLdouble *value - - - void glUniformMatrix2x4fv - GLint location - GLsizei count - GLboolean transpose - const GLfloat *value - - - - void glUniformMatrix2x4fvNV - GLint location - GLsizei count - GLboolean transpose - const GLfloat *value - - - - void glUniformMatrix3dv - GLint location - GLsizei count - GLboolean transpose - const GLdouble *value - - - void glUniformMatrix3fv - GLint location - GLsizei count - GLboolean transpose - const GLfloat *value - - - void glUniformMatrix3fvARB - GLint location - GLsizei count - GLboolean transpose - const GLfloat *value - - - - void glUniformMatrix3x2dv - GLint location - GLsizei count - GLboolean transpose - const GLdouble *value - - - void glUniformMatrix3x2fv - GLint location - GLsizei count - GLboolean transpose - const GLfloat *value - - - - void glUniformMatrix3x2fvNV - GLint location - GLsizei count - GLboolean transpose - const GLfloat *value - - - - void glUniformMatrix3x4dv - GLint location - GLsizei count - GLboolean transpose - const GLdouble *value - - - void glUniformMatrix3x4fv - GLint location - GLsizei count - GLboolean transpose - const GLfloat *value - - - - void glUniformMatrix3x4fvNV - GLint location - GLsizei count - GLboolean transpose - const GLfloat *value - - - - void glUniformMatrix4dv - GLint location - GLsizei count - GLboolean transpose - const GLdouble *value - - - void glUniformMatrix4fv - GLint location - GLsizei count - GLboolean transpose - const GLfloat *value - - - void glUniformMatrix4fvARB - GLint location - GLsizei count - GLboolean transpose - const GLfloat *value - - - - void glUniformMatrix4x2dv - GLint location - GLsizei count - GLboolean transpose - const GLdouble *value - - - void glUniformMatrix4x2fv - GLint location - GLsizei count - GLboolean transpose - const GLfloat *value - - - - void glUniformMatrix4x2fvNV - GLint location - GLsizei count - GLboolean transpose - const GLfloat *value - - - - void glUniformMatrix4x3dv - GLint location - GLsizei count - GLboolean transpose - const GLdouble *value - - - void glUniformMatrix4x3fv - GLint location - GLsizei count - GLboolean transpose - const GLfloat *value - - - - void glUniformMatrix4x3fvNV - GLint location - GLsizei count - GLboolean transpose - const GLfloat *value - - - - void glUniformSubroutinesuiv - GLenum shadertype - GLsizei count - const GLuint *indices - - - void glUniformui64NV - GLint location - GLuint64EXT value - - - void glUniformui64vNV - GLint location - GLsizei count - const GLuint64EXT *value - - - void glUnlockArraysEXT - - - GLboolean glUnmapBuffer - GLenum target - - - GLboolean glUnmapBufferARB - GLenum target - - - - GLboolean glUnmapBufferOES - GLenum target - - - - GLboolean glUnmapNamedBuffer - GLuint buffer - - - GLboolean glUnmapNamedBufferEXT - GLuint buffer - - - void glUnmapObjectBufferATI - GLuint buffer - - - void glUnmapTexture2DINTEL - GLuint texture - GLint level - - - void glUpdateObjectBufferATI - GLuint buffer - GLuint offset - GLsizei size - const void *pointer - GLenum preserve - - - void glUseProgram - GLuint program - - - void glUseProgramObjectARB - GLhandleARB programObj - - - - void glUseProgramStages - GLuint pipeline - GLbitfield stages - GLuint program - - - void glUseProgramStagesEXT - GLuint pipeline - GLbitfield stages - GLuint program - - - void glUseShaderProgramEXT - GLenum type - GLuint program - - - void glVDPAUFiniNV - - - void glVDPAUGetSurfaceivNV - GLvdpauSurfaceNV surface - GLenum pname - GLsizei bufSize - GLsizei *length - GLint *values - - - void glVDPAUInitNV - const void *vdpDevice - const void *getProcAddress - - - GLboolean glVDPAUIsSurfaceNV - GLvdpauSurfaceNV surface - - - void glVDPAUMapSurfacesNV - GLsizei numSurfaces - const GLvdpauSurfaceNV *surfaces - - - GLvdpauSurfaceNV glVDPAURegisterOutputSurfaceNV - const void *vdpSurface - GLenum target - GLsizei numTextureNames - const GLuint *textureNames - - - GLvdpauSurfaceNV glVDPAURegisterVideoSurfaceNV - const void *vdpSurface - GLenum target - GLsizei numTextureNames - const GLuint *textureNames - - - void glVDPAUSurfaceAccessNV - GLvdpauSurfaceNV surface - GLenum access - - - void glVDPAUUnmapSurfacesNV - GLsizei numSurface - const GLvdpauSurfaceNV *surfaces - - - void glVDPAUUnregisterSurfaceNV - GLvdpauSurfaceNV surface - - - void glValidateProgram - GLuint program - - - void glValidateProgramARB - GLhandleARB programObj - - - - void glValidateProgramPipeline - GLuint pipeline - - - void glValidateProgramPipelineEXT - GLuint pipeline - - - void glVariantArrayObjectATI - GLuint id - GLenum type - GLsizei stride - GLuint buffer - GLuint offset - - - void glVariantPointerEXT - GLuint id - GLenum type - GLuint stride - const void *addr - - - void glVariantbvEXT - GLuint id - const GLbyte *addr - - - void glVariantdvEXT - GLuint id - const GLdouble *addr - - - void glVariantfvEXT - GLuint id - const GLfloat *addr - - - void glVariantivEXT - GLuint id - const GLint *addr - - - void glVariantsvEXT - GLuint id - const GLshort *addr - - - void glVariantubvEXT - GLuint id - const GLubyte *addr - - - void glVariantuivEXT - GLuint id - const GLuint *addr - - - void glVariantusvEXT - GLuint id - const GLushort *addr - - - void glVertex2bOES - GLbyte x - GLbyte y - - - void glVertex2bvOES - const GLbyte *coords - - - void glVertex2d - GLdouble x - GLdouble y - - - - void glVertex2dv - const GLdouble *v - - - - void glVertex2f - GLfloat x - GLfloat y - - - - void glVertex2fv - const GLfloat *v - - - - void glVertex2hNV - GLhalfNV x - GLhalfNV y - - - - void glVertex2hvNV - const GLhalfNV *v - - - - void glVertex2i - GLint x - GLint y - - - - void glVertex2iv - const GLint *v - - - - void glVertex2s - GLshort x - GLshort y - - - - void glVertex2sv - const GLshort *v - - - - void glVertex2xOES - GLfixed x - - - void glVertex2xvOES - const GLfixed *coords - - - void glVertex3bOES - GLbyte x - GLbyte y - GLbyte z - - - void glVertex3bvOES - const GLbyte *coords - - - void glVertex3d - GLdouble x - GLdouble y - GLdouble z - - - - void glVertex3dv - const GLdouble *v - - - - void glVertex3f - GLfloat x - GLfloat y - GLfloat z - - - - void glVertex3fv - const GLfloat *v - - - - void glVertex3hNV - GLhalfNV x - GLhalfNV y - GLhalfNV z - - - - void glVertex3hvNV - const GLhalfNV *v - - - - void glVertex3i - GLint x - GLint y - GLint z - - - - void glVertex3iv - const GLint *v - - - - void glVertex3s - GLshort x - GLshort y - GLshort z - - - - void glVertex3sv - const GLshort *v - - - - void glVertex3xOES - GLfixed x - GLfixed y - - - void glVertex3xvOES - const GLfixed *coords - - - void glVertex4bOES - GLbyte x - GLbyte y - GLbyte z - GLbyte w - - - void glVertex4bvOES - const GLbyte *coords - - - void glVertex4d - GLdouble x - GLdouble y - GLdouble z - GLdouble w - - - - void glVertex4dv - const GLdouble *v - - - - void glVertex4f - GLfloat x - GLfloat y - GLfloat z - GLfloat w - - - - void glVertex4fv - const GLfloat *v - - - - void glVertex4hNV - GLhalfNV x - GLhalfNV y - GLhalfNV z - GLhalfNV w - - - - void glVertex4hvNV - const GLhalfNV *v - - - - void glVertex4i - GLint x - GLint y - GLint z - GLint w - - - - void glVertex4iv - const GLint *v - - - - void glVertex4s - GLshort x - GLshort y - GLshort z - GLshort w - - - - void glVertex4sv - const GLshort *v - - - - void glVertex4xOES - GLfixed x - GLfixed y - GLfixed z - - - void glVertex4xvOES - const GLfixed *coords - - - void glVertexArrayAttribBinding - GLuint vaobj - GLuint attribindex - GLuint bindingindex - - - void glVertexArrayAttribFormat - GLuint vaobj - GLuint attribindex - GLint size - GLenum type - GLboolean normalized - GLuint relativeoffset - - - void glVertexArrayAttribIFormat - GLuint vaobj - GLuint attribindex - GLint size - GLenum type - GLuint relativeoffset - - - void glVertexArrayAttribLFormat - GLuint vaobj - GLuint attribindex - GLint size - GLenum type - GLuint relativeoffset - - - void glVertexArrayBindVertexBufferEXT - GLuint vaobj - GLuint bindingindex - GLuint buffer - GLintptr offset - GLsizei stride - - - void glVertexArrayBindingDivisor - GLuint vaobj - GLuint bindingindex - GLuint divisor - - - void glVertexArrayColorOffsetEXT - GLuint vaobj - GLuint buffer - GLint size - GLenum type - GLsizei stride - GLintptr offset - - - void glVertexArrayEdgeFlagOffsetEXT - GLuint vaobj - GLuint buffer - GLsizei stride - GLintptr offset - - - void glVertexArrayElementBuffer - GLuint vaobj - GLuint buffer - - - void glVertexArrayFogCoordOffsetEXT - GLuint vaobj - GLuint buffer - GLenum type - GLsizei stride - GLintptr offset - - - void glVertexArrayIndexOffsetEXT - GLuint vaobj - GLuint buffer - GLenum type - GLsizei stride - GLintptr offset - - - void glVertexArrayMultiTexCoordOffsetEXT - GLuint vaobj - GLuint buffer - GLenum texunit - GLint size - GLenum type - GLsizei stride - GLintptr offset - - - void glVertexArrayNormalOffsetEXT - GLuint vaobj - GLuint buffer - GLenum type - GLsizei stride - GLintptr offset - - - void glVertexArrayParameteriAPPLE - GLenum pname - GLint param - - - void glVertexArrayRangeAPPLE - GLsizei length - void *pointer - - - void glVertexArrayRangeNV - GLsizei length - const void *pointer - - - void glVertexArraySecondaryColorOffsetEXT - GLuint vaobj - GLuint buffer - GLint size - GLenum type - GLsizei stride - GLintptr offset - - - void glVertexArrayTexCoordOffsetEXT - GLuint vaobj - GLuint buffer - GLint size - GLenum type - GLsizei stride - GLintptr offset - - - void glVertexArrayVertexAttribBindingEXT - GLuint vaobj - GLuint attribindex - GLuint bindingindex - - - void glVertexArrayVertexAttribDivisorEXT - GLuint vaobj - GLuint index - GLuint divisor - - - void glVertexArrayVertexAttribFormatEXT - GLuint vaobj - GLuint attribindex - GLint size - GLenum type - GLboolean normalized - GLuint relativeoffset - - - void glVertexArrayVertexAttribIFormatEXT - GLuint vaobj - GLuint attribindex - GLint size - GLenum type - GLuint relativeoffset - - - void glVertexArrayVertexAttribIOffsetEXT - GLuint vaobj - GLuint buffer - GLuint index - GLint size - GLenum type - GLsizei stride - GLintptr offset - - - void glVertexArrayVertexAttribLFormatEXT - GLuint vaobj - GLuint attribindex - GLint size - GLenum type - GLuint relativeoffset - - - void glVertexArrayVertexAttribLOffsetEXT - GLuint vaobj - GLuint buffer - GLuint index - GLint size - GLenum type - GLsizei stride - GLintptr offset - - - void glVertexArrayVertexAttribOffsetEXT - GLuint vaobj - GLuint buffer - GLuint index - GLint size - GLenum type - GLboolean normalized - GLsizei stride - GLintptr offset - - - void glVertexArrayVertexBindingDivisorEXT - GLuint vaobj - GLuint bindingindex - GLuint divisor - - - void glVertexArrayVertexBuffer - GLuint vaobj - GLuint bindingindex - GLuint buffer - GLintptr offset - GLsizei stride - - - void glVertexArrayVertexBuffers - GLuint vaobj - GLuint first - GLsizei count - const GLuint *buffers - const GLintptr *offsets - const GLsizei *strides - - - void glVertexArrayVertexOffsetEXT - GLuint vaobj - GLuint buffer - GLint size - GLenum type - GLsizei stride - GLintptr offset - - - void glVertexAttrib1d - GLuint index - GLdouble x - - - - void glVertexAttrib1dARB - GLuint index - GLdouble x - - - - - void glVertexAttrib1dNV - GLuint index - GLdouble x - - - - - void glVertexAttrib1dv - GLuint index - const GLdouble *v - - - - void glVertexAttrib1dvARB - GLuint index - const GLdouble *v - - - - - void glVertexAttrib1dvNV - GLuint index - const GLdouble *v - - - - - void glVertexAttrib1f - GLuint index - GLfloat x - - - - void glVertexAttrib1fARB - GLuint index - GLfloat x - - - - - void glVertexAttrib1fNV - GLuint index - GLfloat x - - - - - void glVertexAttrib1fv - GLuint index - const GLfloat *v - - - - void glVertexAttrib1fvARB - GLuint index - const GLfloat *v - - - - - void glVertexAttrib1fvNV - GLuint index - const GLfloat *v - - - - - void glVertexAttrib1hNV - GLuint index - GLhalfNV x - - - - void glVertexAttrib1hvNV - GLuint index - const GLhalfNV *v - - - - void glVertexAttrib1s - GLuint index - GLshort x - - - - void glVertexAttrib1sARB - GLuint index - GLshort x - - - - - void glVertexAttrib1sNV - GLuint index - GLshort x - - - - - void glVertexAttrib1sv - GLuint index - const GLshort *v - - - - void glVertexAttrib1svARB - GLuint index - const GLshort *v - - - - - void glVertexAttrib1svNV - GLuint index - const GLshort *v - - - - - void glVertexAttrib2d - GLuint index - GLdouble x - GLdouble y - - - - void glVertexAttrib2dARB - GLuint index - GLdouble x - GLdouble y - - - - - void glVertexAttrib2dNV - GLuint index - GLdouble x - GLdouble y - - - - - void glVertexAttrib2dv - GLuint index - const GLdouble *v - - - - void glVertexAttrib2dvARB - GLuint index - const GLdouble *v - - - - - void glVertexAttrib2dvNV - GLuint index - const GLdouble *v - - - - - void glVertexAttrib2f - GLuint index - GLfloat x - GLfloat y - - - - void glVertexAttrib2fARB - GLuint index - GLfloat x - GLfloat y - - - - - void glVertexAttrib2fNV - GLuint index - GLfloat x - GLfloat y - - - - - void glVertexAttrib2fv - GLuint index - const GLfloat *v - - - - void glVertexAttrib2fvARB - GLuint index - const GLfloat *v - - - - - void glVertexAttrib2fvNV - GLuint index - const GLfloat *v - - - - - void glVertexAttrib2hNV - GLuint index - GLhalfNV x - GLhalfNV y - - - - void glVertexAttrib2hvNV - GLuint index - const GLhalfNV *v - - - - void glVertexAttrib2s - GLuint index - GLshort x - GLshort y - - - - void glVertexAttrib2sARB - GLuint index - GLshort x - GLshort y - - - - - void glVertexAttrib2sNV - GLuint index - GLshort x - GLshort y - - - - - void glVertexAttrib2sv - GLuint index - const GLshort *v - - - - void glVertexAttrib2svARB - GLuint index - const GLshort *v - - - - - void glVertexAttrib2svNV - GLuint index - const GLshort *v - - - - - void glVertexAttrib3d - GLuint index - GLdouble x - GLdouble y - GLdouble z - - - - void glVertexAttrib3dARB - GLuint index - GLdouble x - GLdouble y - GLdouble z - - - - - void glVertexAttrib3dNV - GLuint index - GLdouble x - GLdouble y - GLdouble z - - - - - void glVertexAttrib3dv - GLuint index - const GLdouble *v - - - - void glVertexAttrib3dvARB - GLuint index - const GLdouble *v - - - - - void glVertexAttrib3dvNV - GLuint index - const GLdouble *v - - - - - void glVertexAttrib3f - GLuint index - GLfloat x - GLfloat y - GLfloat z - - - - void glVertexAttrib3fARB - GLuint index - GLfloat x - GLfloat y - GLfloat z - - - - - void glVertexAttrib3fNV - GLuint index - GLfloat x - GLfloat y - GLfloat z - - - - - void glVertexAttrib3fv - GLuint index - const GLfloat *v - - - - void glVertexAttrib3fvARB - GLuint index - const GLfloat *v - - - - - void glVertexAttrib3fvNV - GLuint index - const GLfloat *v - - - - - void glVertexAttrib3hNV - GLuint index - GLhalfNV x - GLhalfNV y - GLhalfNV z - - - - void glVertexAttrib3hvNV - GLuint index - const GLhalfNV *v - - - - void glVertexAttrib3s - GLuint index - GLshort x - GLshort y - GLshort z - - - - void glVertexAttrib3sARB - GLuint index - GLshort x - GLshort y - GLshort z - - - - - void glVertexAttrib3sNV - GLuint index - GLshort x - GLshort y - GLshort z - - - - - void glVertexAttrib3sv - GLuint index - const GLshort *v - - - - void glVertexAttrib3svARB - GLuint index - const GLshort *v - - - - - void glVertexAttrib3svNV - GLuint index - const GLshort *v - - - - - void glVertexAttrib4Nbv - GLuint index - const GLbyte *v - - - void glVertexAttrib4NbvARB - GLuint index - const GLbyte *v - - - - void glVertexAttrib4Niv - GLuint index - const GLint *v - - - void glVertexAttrib4NivARB - GLuint index - const GLint *v - - - - void glVertexAttrib4Nsv - GLuint index - const GLshort *v - - - void glVertexAttrib4NsvARB - GLuint index - const GLshort *v - - - - void glVertexAttrib4Nub - GLuint index - GLubyte x - GLubyte y - GLubyte z - GLubyte w - - - void glVertexAttrib4NubARB - GLuint index - GLubyte x - GLubyte y - GLubyte z - GLubyte w - - - - void glVertexAttrib4Nubv - GLuint index - const GLubyte *v - - - - void glVertexAttrib4NubvARB - GLuint index - const GLubyte *v - - - - - void glVertexAttrib4Nuiv - GLuint index - const GLuint *v - - - void glVertexAttrib4NuivARB - GLuint index - const GLuint *v - - - - void glVertexAttrib4Nusv - GLuint index - const GLushort *v - - - void glVertexAttrib4NusvARB - GLuint index - const GLushort *v - - - - void glVertexAttrib4bv - GLuint index - const GLbyte *v - - - void glVertexAttrib4bvARB - GLuint index - const GLbyte *v - - - - void glVertexAttrib4d - GLuint index - GLdouble x - GLdouble y - GLdouble z - GLdouble w - - - - void glVertexAttrib4dARB - GLuint index - GLdouble x - GLdouble y - GLdouble z - GLdouble w - - - - - void glVertexAttrib4dNV - GLuint index - GLdouble x - GLdouble y - GLdouble z - GLdouble w - - - - - void glVertexAttrib4dv - GLuint index - const GLdouble *v - - - - void glVertexAttrib4dvARB - GLuint index - const GLdouble *v - - - - - void glVertexAttrib4dvNV - GLuint index - const GLdouble *v - - - - - void glVertexAttrib4f - GLuint index - GLfloat x - GLfloat y - GLfloat z - GLfloat w - - - - void glVertexAttrib4fARB - GLuint index - GLfloat x - GLfloat y - GLfloat z - GLfloat w - - - - - void glVertexAttrib4fNV - GLuint index - GLfloat x - GLfloat y - GLfloat z - GLfloat w - - - - - void glVertexAttrib4fv - GLuint index - const GLfloat *v - - - - void glVertexAttrib4fvARB - GLuint index - const GLfloat *v - - - - - void glVertexAttrib4fvNV - GLuint index - const GLfloat *v - - - - - void glVertexAttrib4hNV - GLuint index - GLhalfNV x - GLhalfNV y - GLhalfNV z - GLhalfNV w - - - - void glVertexAttrib4hvNV - GLuint index - const GLhalfNV *v - - - - void glVertexAttrib4iv - GLuint index - const GLint *v - - - void glVertexAttrib4ivARB - GLuint index - const GLint *v - - - - void glVertexAttrib4s - GLuint index - GLshort x - GLshort y - GLshort z - GLshort w - - - - void glVertexAttrib4sARB - GLuint index - GLshort x - GLshort y - GLshort z - GLshort w - - - - - void glVertexAttrib4sNV - GLuint index - GLshort x - GLshort y - GLshort z - GLshort w - - - - - void glVertexAttrib4sv - GLuint index - const GLshort *v - - - - void glVertexAttrib4svARB - GLuint index - const GLshort *v - - - - - void glVertexAttrib4svNV - GLuint index - const GLshort *v - - - - - void glVertexAttrib4ubNV - GLuint index - GLubyte x - GLubyte y - GLubyte z - GLubyte w - - - - - void glVertexAttrib4ubv - GLuint index - const GLubyte *v - - - void glVertexAttrib4ubvARB - GLuint index - const GLubyte *v - - - - void glVertexAttrib4ubvNV - GLuint index - const GLubyte *v - - - - - void glVertexAttrib4uiv - GLuint index - const GLuint *v - - - void glVertexAttrib4uivARB - GLuint index - const GLuint *v - - - - void glVertexAttrib4usv - GLuint index - const GLushort *v - - - void glVertexAttrib4usvARB - GLuint index - const GLushort *v - - - - void glVertexAttribArrayObjectATI - GLuint index - GLint size - GLenum type - GLboolean normalized - GLsizei stride - GLuint buffer - GLuint offset - - - void glVertexAttribBinding - GLuint attribindex - GLuint bindingindex - - - void glVertexAttribDivisor - GLuint index - GLuint divisor - - - void glVertexAttribDivisorANGLE - GLuint index - GLuint divisor - - - - void glVertexAttribDivisorARB - GLuint index - GLuint divisor - - - - void glVertexAttribDivisorEXT - GLuint index - GLuint divisor - - - - void glVertexAttribDivisorNV - GLuint index - GLuint divisor - - - - void glVertexAttribFormat - GLuint attribindex - GLint size - GLenum type - GLboolean normalized - GLuint relativeoffset - - - void glVertexAttribFormatNV - GLuint index - GLint size - GLenum type - GLboolean normalized - GLsizei stride - - - void glVertexAttribI1i - GLuint index - GLint x - - - - void glVertexAttribI1iEXT - GLuint index - GLint x - - - - - void glVertexAttribI1iv - GLuint index - const GLint *v - - - void glVertexAttribI1ivEXT - GLuint index - const GLint *v - - - - void glVertexAttribI1ui - GLuint index - GLuint x - - - - void glVertexAttribI1uiEXT - GLuint index - GLuint x - - - - - void glVertexAttribI1uiv - GLuint index - const GLuint *v - - - void glVertexAttribI1uivEXT - GLuint index - const GLuint *v - - - - void glVertexAttribI2i - GLuint index - GLint x - GLint y - - - - void glVertexAttribI2iEXT - GLuint index - GLint x - GLint y - - - - - void glVertexAttribI2iv - GLuint index - const GLint *v - - - void glVertexAttribI2ivEXT - GLuint index - const GLint *v - - - - void glVertexAttribI2ui - GLuint index - GLuint x - GLuint y - - - - void glVertexAttribI2uiEXT - GLuint index - GLuint x - GLuint y - - - - - void glVertexAttribI2uiv - GLuint index - const GLuint *v - - - void glVertexAttribI2uivEXT - GLuint index - const GLuint *v - - - - void glVertexAttribI3i - GLuint index - GLint x - GLint y - GLint z - - - - void glVertexAttribI3iEXT - GLuint index - GLint x - GLint y - GLint z - - - - - void glVertexAttribI3iv - GLuint index - const GLint *v - - - void glVertexAttribI3ivEXT - GLuint index - const GLint *v - - - - void glVertexAttribI3ui - GLuint index - GLuint x - GLuint y - GLuint z - - - - void glVertexAttribI3uiEXT - GLuint index - GLuint x - GLuint y - GLuint z - - - - - void glVertexAttribI3uiv - GLuint index - const GLuint *v - - - void glVertexAttribI3uivEXT - GLuint index - const GLuint *v - - - - void glVertexAttribI4bv - GLuint index - const GLbyte *v - - - void glVertexAttribI4bvEXT - GLuint index - const GLbyte *v - - - - void glVertexAttribI4i - GLuint index - GLint x - GLint y - GLint z - GLint w - - - - void glVertexAttribI4iEXT - GLuint index - GLint x - GLint y - GLint z - GLint w - - - - - void glVertexAttribI4iv - GLuint index - const GLint *v - - - void glVertexAttribI4ivEXT - GLuint index - const GLint *v - - - - void glVertexAttribI4sv - GLuint index - const GLshort *v - - - void glVertexAttribI4svEXT - GLuint index - const GLshort *v - - - - void glVertexAttribI4ubv - GLuint index - const GLubyte *v - - - void glVertexAttribI4ubvEXT - GLuint index - const GLubyte *v - - - - void glVertexAttribI4ui - GLuint index - GLuint x - GLuint y - GLuint z - GLuint w - - - - void glVertexAttribI4uiEXT - GLuint index - GLuint x - GLuint y - GLuint z - GLuint w - - - - - void glVertexAttribI4uiv - GLuint index - const GLuint *v - - - void glVertexAttribI4uivEXT - GLuint index - const GLuint *v - - - - void glVertexAttribI4usv - GLuint index - const GLushort *v - - - void glVertexAttribI4usvEXT - GLuint index - const GLushort *v - - - - void glVertexAttribIFormat - GLuint attribindex - GLint size - GLenum type - GLuint relativeoffset - - - void glVertexAttribIFormatNV - GLuint index - GLint size - GLenum type - GLsizei stride - - - void glVertexAttribIPointer - GLuint index - GLint size - GLenum type - GLsizei stride - const void *pointer - - - void glVertexAttribIPointerEXT - GLuint index - GLint size - GLenum type - GLsizei stride - const void *pointer - - - - void glVertexAttribL1d - GLuint index - GLdouble x - - - void glVertexAttribL1dEXT - GLuint index - GLdouble x - - - - void glVertexAttribL1dv - GLuint index - const GLdouble *v - - - void glVertexAttribL1dvEXT - GLuint index - const GLdouble *v - - - - void glVertexAttribL1i64NV - GLuint index - GLint64EXT x - - - void glVertexAttribL1i64vNV - GLuint index - const GLint64EXT *v - - - void glVertexAttribL1ui64ARB - GLuint index - GLuint64EXT x - - - void glVertexAttribL1ui64NV - GLuint index - GLuint64EXT x - - - void glVertexAttribL1ui64vARB - GLuint index - const GLuint64EXT *v - - - void glVertexAttribL1ui64vNV - GLuint index - const GLuint64EXT *v - - - void glVertexAttribL2d - GLuint index - GLdouble x - GLdouble y - - - void glVertexAttribL2dEXT - GLuint index - GLdouble x - GLdouble y - - - - void glVertexAttribL2dv - GLuint index - const GLdouble *v - - - void glVertexAttribL2dvEXT - GLuint index - const GLdouble *v - - - - void glVertexAttribL2i64NV - GLuint index - GLint64EXT x - GLint64EXT y - - - void glVertexAttribL2i64vNV - GLuint index - const GLint64EXT *v - - - void glVertexAttribL2ui64NV - GLuint index - GLuint64EXT x - GLuint64EXT y - - - void glVertexAttribL2ui64vNV - GLuint index - const GLuint64EXT *v - - - void glVertexAttribL3d - GLuint index - GLdouble x - GLdouble y - GLdouble z - - - void glVertexAttribL3dEXT - GLuint index - GLdouble x - GLdouble y - GLdouble z - - - - void glVertexAttribL3dv - GLuint index - const GLdouble *v - - - void glVertexAttribL3dvEXT - GLuint index - const GLdouble *v - - - - void glVertexAttribL3i64NV - GLuint index - GLint64EXT x - GLint64EXT y - GLint64EXT z - - - void glVertexAttribL3i64vNV - GLuint index - const GLint64EXT *v - - - void glVertexAttribL3ui64NV - GLuint index - GLuint64EXT x - GLuint64EXT y - GLuint64EXT z - - - void glVertexAttribL3ui64vNV - GLuint index - const GLuint64EXT *v - - - void glVertexAttribL4d - GLuint index - GLdouble x - GLdouble y - GLdouble z - GLdouble w - - - void glVertexAttribL4dEXT - GLuint index - GLdouble x - GLdouble y - GLdouble z - GLdouble w - - - - void glVertexAttribL4dv - GLuint index - const GLdouble *v - - - void glVertexAttribL4dvEXT - GLuint index - const GLdouble *v - - - - void glVertexAttribL4i64NV - GLuint index - GLint64EXT x - GLint64EXT y - GLint64EXT z - GLint64EXT w - - - void glVertexAttribL4i64vNV - GLuint index - const GLint64EXT *v - - - void glVertexAttribL4ui64NV - GLuint index - GLuint64EXT x - GLuint64EXT y - GLuint64EXT z - GLuint64EXT w - - - void glVertexAttribL4ui64vNV - GLuint index - const GLuint64EXT *v - - - void glVertexAttribLFormat - GLuint attribindex - GLint size - GLenum type - GLuint relativeoffset - - - void glVertexAttribLFormatNV - GLuint index - GLint size - GLenum type - GLsizei stride - - - void glVertexAttribLPointer - GLuint index - GLint size - GLenum type - GLsizei stride - const void *pointer - - - void glVertexAttribLPointerEXT - GLuint index - GLint size - GLenum type - GLsizei stride - const void *pointer - - - - void glVertexAttribP1ui - GLuint index - GLenum type - GLboolean normalized - GLuint value - - - void glVertexAttribP1uiv - GLuint index - GLenum type - GLboolean normalized - const GLuint *value - - - void glVertexAttribP2ui - GLuint index - GLenum type - GLboolean normalized - GLuint value - - - void glVertexAttribP2uiv - GLuint index - GLenum type - GLboolean normalized - const GLuint *value - - - void glVertexAttribP3ui - GLuint index - GLenum type - GLboolean normalized - GLuint value - - - void glVertexAttribP3uiv - GLuint index - GLenum type - GLboolean normalized - const GLuint *value - - - void glVertexAttribP4ui - GLuint index - GLenum type - GLboolean normalized - GLuint value - - - void glVertexAttribP4uiv - GLuint index - GLenum type - GLboolean normalized - const GLuint *value - - - void glVertexAttribParameteriAMD - GLuint index - GLenum pname - GLint param - - - void glVertexAttribPointer - GLuint index - GLint size - GLenum type - GLboolean normalized - GLsizei stride - const void *pointer - - - void glVertexAttribPointerARB - GLuint index - GLint size - GLenum type - GLboolean normalized - GLsizei stride - const void *pointer - - - - void glVertexAttribPointerNV - GLuint index - GLint fsize - GLenum type - GLsizei stride - const void *pointer - - - void glVertexAttribs1dvNV - GLuint index - GLsizei count - const GLdouble *v - - - - void glVertexAttribs1fvNV - GLuint index - GLsizei count - const GLfloat *v - - - - void glVertexAttribs1hvNV - GLuint index - GLsizei n - const GLhalfNV *v - - - - void glVertexAttribs1svNV - GLuint index - GLsizei count - const GLshort *v - - - - void glVertexAttribs2dvNV - GLuint index - GLsizei count - const GLdouble *v - - - - void glVertexAttribs2fvNV - GLuint index - GLsizei count - const GLfloat *v - - - - void glVertexAttribs2hvNV - GLuint index - GLsizei n - const GLhalfNV *v - - - - void glVertexAttribs2svNV - GLuint index - GLsizei count - const GLshort *v - - - - void glVertexAttribs3dvNV - GLuint index - GLsizei count - const GLdouble *v - - - - void glVertexAttribs3fvNV - GLuint index - GLsizei count - const GLfloat *v - - - - void glVertexAttribs3hvNV - GLuint index - GLsizei n - const GLhalfNV *v - - - - void glVertexAttribs3svNV - GLuint index - GLsizei count - const GLshort *v - - - - void glVertexAttribs4dvNV - GLuint index - GLsizei count - const GLdouble *v - - - - void glVertexAttribs4fvNV - GLuint index - GLsizei count - const GLfloat *v - - - - void glVertexAttribs4hvNV - GLuint index - GLsizei n - const GLhalfNV *v - - - - void glVertexAttribs4svNV - GLuint index - GLsizei count - const GLshort *v - - - - void glVertexAttribs4ubvNV - GLuint index - GLsizei count - const GLubyte *v - - - - void glVertexBindingDivisor - GLuint bindingindex - GLuint divisor - - - void glVertexBlendARB - GLint count - - - - void glVertexBlendEnvfATI - GLenum pname - GLfloat param - - - void glVertexBlendEnviATI - GLenum pname - GLint param - - - void glVertexFormatNV - GLint size - GLenum type - GLsizei stride - - - void glVertexP2ui - GLenum type - GLuint value - - - void glVertexP2uiv - GLenum type - const GLuint *value - - - void glVertexP3ui - GLenum type - GLuint value - - - void glVertexP3uiv - GLenum type - const GLuint *value - - - void glVertexP4ui - GLenum type - GLuint value - - - void glVertexP4uiv - GLenum type - const GLuint *value - - - void glVertexPointer - GLint size - GLenum type - GLsizei stride - const void *pointer - - - void glVertexPointerEXT - GLint size - GLenum type - GLsizei stride - GLsizei count - const void *pointer - - - void glVertexPointerListIBM - GLint size - GLenum type - GLint stride - const void **pointer - GLint ptrstride - - - void glVertexPointervINTEL - GLint size - GLenum type - const void **pointer - - - void glVertexStream1dATI - GLenum stream - GLdouble x - - - void glVertexStream1dvATI - GLenum stream - const GLdouble *coords - - - void glVertexStream1fATI - GLenum stream - GLfloat x - - - void glVertexStream1fvATI - GLenum stream - const GLfloat *coords - - - void glVertexStream1iATI - GLenum stream - GLint x - - - void glVertexStream1ivATI - GLenum stream - const GLint *coords - - - void glVertexStream1sATI - GLenum stream - GLshort x - - - void glVertexStream1svATI - GLenum stream - const GLshort *coords - - - void glVertexStream2dATI - GLenum stream - GLdouble x - GLdouble y - - - void glVertexStream2dvATI - GLenum stream - const GLdouble *coords - - - void glVertexStream2fATI - GLenum stream - GLfloat x - GLfloat y - - - void glVertexStream2fvATI - GLenum stream - const GLfloat *coords - - - void glVertexStream2iATI - GLenum stream - GLint x - GLint y - - - void glVertexStream2ivATI - GLenum stream - const GLint *coords - - - void glVertexStream2sATI - GLenum stream - GLshort x - GLshort y - - - void glVertexStream2svATI - GLenum stream - const GLshort *coords - - - void glVertexStream3dATI - GLenum stream - GLdouble x - GLdouble y - GLdouble z - - - void glVertexStream3dvATI - GLenum stream - const GLdouble *coords - - - void glVertexStream3fATI - GLenum stream - GLfloat x - GLfloat y - GLfloat z - - - void glVertexStream3fvATI - GLenum stream - const GLfloat *coords - - - void glVertexStream3iATI - GLenum stream - GLint x - GLint y - GLint z - - - void glVertexStream3ivATI - GLenum stream - const GLint *coords - - - void glVertexStream3sATI - GLenum stream - GLshort x - GLshort y - GLshort z - - - void glVertexStream3svATI - GLenum stream - const GLshort *coords - - - void glVertexStream4dATI - GLenum stream - GLdouble x - GLdouble y - GLdouble z - GLdouble w - - - void glVertexStream4dvATI - GLenum stream - const GLdouble *coords - - - void glVertexStream4fATI - GLenum stream - GLfloat x - GLfloat y - GLfloat z - GLfloat w - - - void glVertexStream4fvATI - GLenum stream - const GLfloat *coords - - - void glVertexStream4iATI - GLenum stream - GLint x - GLint y - GLint z - GLint w - - - void glVertexStream4ivATI - GLenum stream - const GLint *coords - - - void glVertexStream4sATI - GLenum stream - GLshort x - GLshort y - GLshort z - GLshort w - - - void glVertexStream4svATI - GLenum stream - const GLshort *coords - - - void glVertexWeightPointerEXT - GLint size - GLenum type - GLsizei stride - const void *pointer - - - void glVertexWeightfEXT - GLfloat weight - - - - void glVertexWeightfvEXT - const GLfloat *weight - - - - void glVertexWeighthNV - GLhalfNV weight - - - - void glVertexWeighthvNV - const GLhalfNV *weight - - - - GLenum glVideoCaptureNV - GLuint video_capture_slot - GLuint *sequence_num - GLuint64EXT *capture_time - - - void glVideoCaptureStreamParameterdvNV - GLuint video_capture_slot - GLuint stream - GLenum pname - const GLdouble *params - - - void glVideoCaptureStreamParameterfvNV - GLuint video_capture_slot - GLuint stream - GLenum pname - const GLfloat *params - - - void glVideoCaptureStreamParameterivNV - GLuint video_capture_slot - GLuint stream - GLenum pname - const GLint *params - - - void glViewport - GLint x - GLint y - GLsizei width - GLsizei height - - - - void glViewportArrayv - GLuint first - GLsizei count - const GLfloat *v - - - void glViewportIndexedf - GLuint index - GLfloat x - GLfloat y - GLfloat w - GLfloat h - - - void glViewportIndexedfv - GLuint index - const GLfloat *v - - - void glWaitSync - GLsync sync - GLbitfield flags - GLuint64 timeout - - - void glWaitSyncAPPLE - GLsync sync - GLbitfield flags - GLuint64 timeout - - - - void glWeightPathsNV - GLuint resultPath - GLsizei numPaths - const GLuint *paths - const GLfloat *weights - - - void glWeightPointerARB - GLint size - GLenum type - GLsizei stride - const void *pointer - - - void glWeightPointerOES - GLint size - GLenum type - GLsizei stride - const void *pointer - - - void glWeightbvARB - GLint size - const GLbyte *weights - - - - void glWeightdvARB - GLint size - const GLdouble *weights - - - - void glWeightfvARB - GLint size - const GLfloat *weights - - - - void glWeightivARB - GLint size - const GLint *weights - - - - void glWeightsvARB - GLint size - const GLshort *weights - - - - void glWeightubvARB - GLint size - const GLubyte *weights - - - - void glWeightuivARB - GLint size - const GLuint *weights - - - - void glWeightusvARB - GLint size - const GLushort *weights - - - - void glWindowPos2d - GLdouble x - GLdouble y - - - - void glWindowPos2dARB - GLdouble x - GLdouble y - - - - - void glWindowPos2dMESA - GLdouble x - GLdouble y - - - - - void glWindowPos2dv - const GLdouble *v - - - - void glWindowPos2dvARB - const GLdouble *v - - - - - void glWindowPos2dvMESA - const GLdouble *v - - - - void glWindowPos2f - GLfloat x - GLfloat y - - - - void glWindowPos2fARB - GLfloat x - GLfloat y - - - - - void glWindowPos2fMESA - GLfloat x - GLfloat y - - - - - void glWindowPos2fv - const GLfloat *v - - - - void glWindowPos2fvARB - const GLfloat *v - - - - - void glWindowPos2fvMESA - const GLfloat *v - - - - void glWindowPos2i - GLint x - GLint y - - - - void glWindowPos2iARB - GLint x - GLint y - - - - - void glWindowPos2iMESA - GLint x - GLint y - - - - - void glWindowPos2iv - const GLint *v - - - - void glWindowPos2ivARB - const GLint *v - - - - - void glWindowPos2ivMESA - const GLint *v - - - - void glWindowPos2s - GLshort x - GLshort y - - - - void glWindowPos2sARB - GLshort x - GLshort y - - - - - void glWindowPos2sMESA - GLshort x - GLshort y - - - - - void glWindowPos2sv - const GLshort *v - - - - void glWindowPos2svARB - const GLshort *v - - - - - void glWindowPos2svMESA - const GLshort *v - - - - void glWindowPos3d - GLdouble x - GLdouble y - GLdouble z - - - - void glWindowPos3dARB - GLdouble x - GLdouble y - GLdouble z - - - - - void glWindowPos3dMESA - GLdouble x - GLdouble y - GLdouble z - - - - - void glWindowPos3dv - const GLdouble *v - - - - void glWindowPos3dvARB - const GLdouble *v - - - - - void glWindowPos3dvMESA - const GLdouble *v - - - - void glWindowPos3f - GLfloat x - GLfloat y - GLfloat z - - - - void glWindowPos3fARB - GLfloat x - GLfloat y - GLfloat z - - - - - void glWindowPos3fMESA - GLfloat x - GLfloat y - GLfloat z - - - - - void glWindowPos3fv - const GLfloat *v - - - - void glWindowPos3fvARB - const GLfloat *v - - - - - void glWindowPos3fvMESA - const GLfloat *v - - - - void glWindowPos3i - GLint x - GLint y - GLint z - - - - void glWindowPos3iARB - GLint x - GLint y - GLint z - - - - - void glWindowPos3iMESA - GLint x - GLint y - GLint z - - - - - void glWindowPos3iv - const GLint *v - - - - void glWindowPos3ivARB - const GLint *v - - - - - void glWindowPos3ivMESA - const GLint *v - - - - void glWindowPos3s - GLshort x - GLshort y - GLshort z - - - - void glWindowPos3sARB - GLshort x - GLshort y - GLshort z - - - - - void glWindowPos3sMESA - GLshort x - GLshort y - GLshort z - - - - - void glWindowPos3sv - const GLshort *v - - - - void glWindowPos3svARB - const GLshort *v - - - - - void glWindowPos3svMESA - const GLshort *v - - - - void glWindowPos4dMESA - GLdouble x - GLdouble y - GLdouble z - GLdouble w - - - - void glWindowPos4dvMESA - const GLdouble *v - - - void glWindowPos4fMESA - GLfloat x - GLfloat y - GLfloat z - GLfloat w - - - - void glWindowPos4fvMESA - const GLfloat *v - - - void glWindowPos4iMESA - GLint x - GLint y - GLint z - GLint w - - - - void glWindowPos4ivMESA - const GLint *v - - - void glWindowPos4sMESA - GLshort x - GLshort y - GLshort z - GLshort w - - - - void glWindowPos4svMESA - const GLshort *v - - - void glWriteMaskEXT - GLuint res - GLuint in - GLenum outX - GLenum outY - GLenum outZ - GLenum outW - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/gengl/main.go b/Godeps/_workspace/src/github.com/obscuren/qml/gl/gengl/main.go deleted file mode 100644 index e92e861f7f..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/gengl/main.go +++ /dev/null @@ -1,1283 +0,0 @@ -package main - -import ( - "bufio" - "bytes" - "encoding/xml" - "flag" - "fmt" - "go/format" - "go/token" - "io/ioutil" - "os" - "path/filepath" - "regexp" - "strconv" - "strings" - "text/template" -) - -type Header struct { - Class string - Const []Const - Func []Func - Type []Type - - FeatureFlags []Const - - GLVersionName string - GLVersionLabel string -} - -type Const struct { - Name string - Value string - Heading string - Comment string - LineBlock int - Disabled bool - - GoName string -} - -type Func struct { - Name string - Type string - Addr int - Param []Param - - GoName string - GoType string - DocName string - - Missing bool -} - -type Param struct { - Name string - Type string - Addr int - Array int - Const bool - - GoName string - GoNameOrig string - GoType string -} - -type Type struct { - Name string - Type string - Comment string - - GoName string -} - -type glVersion struct { - api, number, profile string -} - -var glVersions = []glVersion{ - {"gl", "1.0", ""}, - {"gl", "1.1", ""}, - {"gl", "1.2", ""}, - {"gl", "1.3", ""}, - {"gl", "1.4", ""}, - {"gl", "1.5", ""}, - {"gl", "2.0", ""}, - {"gl", "2.1", ""}, - {"gl", "3.0", ""}, - {"gl", "3.1", ""}, - {"gl", "3.2", "core"}, - {"gl", "3.2", "compatibility"}, - {"gl", "3.3", "core"}, - {"gl", "3.3", "compatibility"}, - {"gl", "4.0", "core"}, - {"gl", "4.0", "compatibility"}, - {"gl", "4.1", "core"}, - {"gl", "4.1", "compatibility"}, - {"gl", "4.2", "core"}, - {"gl", "4.2", "compatibility"}, - {"gl", "4.3", "core"}, - {"gl", "4.3", "compatibility"}, - {"gles2", "2.0", ""}, -} - -func (v glVersion) name() string { - if v.api == "gles2" { - return "ES2" - } - return v.number -} - -func (v glVersion) label() string { - if v.api == "gles2" { - return "es2" - } - name := strings.Replace(v.number, ".", "_", -1) - if v.profile == "compatibility" { - return name + "compat" - } - return name + v.profile -} - -func (v glVersion) qtheader() string { - if v.api == "gles2" { - return "qopenglfunctions.h" - } - s := "qopenglfunctions_" + strings.Replace(v.number, ".", "_", -1) - if v.profile != "" { - s += "_" + v.profile - } - return s + ".h" -} - -func main() { - flag.Parse() - args := flag.Args() - if len(args) != 2 { - fmt.Fprintf(os.Stderr, "usage: gengl \n") - os.Exit(1) - } - if err := run(args[0], args[1]); err != nil { - fmt.Fprintf(os.Stderr, "error: %v\n", err) - os.Exit(1) - } -} - -func dirnames(path string) ([]string, error) { - dir, err := os.Open(path) - if err != nil { - return nil, err - } - list, err := dir.Readdirnames(0) - dir.Close() - return list, err -} - -func parseQtHeader(filename string) (*Header, error) { - classData, err := ioutil.ReadFile(filename) - if err != nil { - return nil, fmt.Errorf("cannot read qt header file: %v", err) - } - var header Header - err = parseQt(string(classData), &header) - if err != nil { - return nil, err - } - return &header, nil -} - -func borrowFuncs(header *Header, filename string) error { - bheader, err := parseQtHeader(filename) - if err != nil { - return err - } - - seen := make(map[string]bool) - for _, f := range header.Func { - seen[f.Name] = true - } - for _, f := range bheader.Func { - if !seen[f.Name] { - f.Missing = true - header.Func = append(header.Func, f) - } - } - return nil -} - -func run(qtdir, outdir string) error { - consts, err := parseConsts("gl.xml") - if err != nil { - return err - } - - for _, glVersion := range glVersions { - header, err := parseQtHeader(filepath.Join(qtdir, "QtGui", glVersion.qtheader())) - if err != nil { - return err - } - - header.GLVersionLabel = glVersion.label() - header.GLVersionName = glVersion.name() - header.Const = consts[glVersion] - - if glVersion.api == "gles2" { - // Qt < 5.3 misses several ES2 entries in QOpenGLFunctions. As a workaround, - // find the missing entries from the pure ES2 class and use them directly. - err := borrowFuncs(header, filepath.Join(qtdir, "QtGui", "qopenglfunctions_es2.h")) - if err != nil { - return err - } - } - - err = prepareHeader(header) - if err != nil { - return err - } - - fileContent := make(map[string][]byte) - for _, pkgFile := range packageFiles { - var buf bytes.Buffer - err = pkgFile.Template.Execute(&buf, header) - if err != nil { - return fmt.Errorf("cannot execute template: %v", err) - } - data := buf.Bytes() - if strings.HasSuffix(pkgFile.Name, ".go") { - newdata, err := format.Source(data) - if err != nil { - return fmt.Errorf("\n%s\ncannot format generated Go code: %v\n", data, err) - } - data = newdata - } - fileContent[pkgFile.Name] = data - } - - glDir := filepath.Join(outdir, strings.Replace(header.GLVersionLabel, "_", ".", -1)) - err = os.MkdirAll(glDir, 0755) - if err != nil { - return fmt.Errorf("cannot make package directory at %s: %v", glDir, err) - } - oldNames, err := dirnames(glDir) - if err != nil { - return fmt.Errorf("cannot list contents of directory %s: %v", glDir, err) - } - for _, oldName := range oldNames { - oldPath := filepath.Join(glDir, oldName) - if err := os.Remove(oldPath); err != nil { - return fmt.Errorf("cannot remove previous file in %s: %v", glDir, err) - } - } - for name, data := range fileContent { - err = ioutil.WriteFile(filepath.Join(glDir, name), data, 0644) - if err != nil { - return err - } - } - } - return nil -} - -type glRegistry struct { - Enums []glEnum `xml:"enums>enum"` - Groups []glGroup `xml:"groups>group"` - Features []glFeature `xml:"feature"` -} - -type glFeature struct { - API string `xml:"api,attr"` - Number string `xml:"number,attr"` - Requires []glChange `xml:"require"` - Removes []glChange `xml:"remove"` -} - -type glChange struct { - Profile string `xml:"profile,attr"` - Enums []glEnum `xml:"enum"` -} - -type glGroup struct { - Name string `xml:"name,attr"` - Enums []glEnum `xml:"enum"` -} - -type glEnum struct { - API string `xml:"api,attr"` - Name string `xml:"name,attr"` - Value string `xml:"value,attr"` -} - -type groupTweak struct { - group string - rename string - replace []string - append []string - reorder bool -} - -var groupTweaks = []groupTweak{{ - group: "Boolean", - reorder: true, - append: []string{"GL_NONE"}, -}, { - group: "DataType", - reorder: true, - replace: []string{ - "GL_BYTE", - "GL_UNSIGNED_BYTE", - "GL_SHORT", - "GL_UNSIGNED_SHORT", - "GL_INT", - "GL_UNSIGNED_INT", - "GL_FLOAT", - "GL_2_BYTES", - "GL_2_BYTES_NV", - "GL_3_BYTES", - "GL_3_BYTES_NV", - "GL_4_BYTES", - "GL_4_BYTES_NV", - "GL_DOUBLE", - "GL_DOUBLE_EXT", - "GL_HALF_FLOAT", - "GL_HALF_FLOAT_ARB", - "GL_HALF_FLOAT_NV", - "GL_HALF_APPLE", - "GL_FIXED", - "GL_FIXED_OES", - "GL_INT64_NV", - "GL_UNSIGNED_INT64_ARB", - "GL_UNSIGNED_INT64_NV", - }, -}, { - group: "BlendingFactorSrc", - replace: []string{ - "GL_CONSTANT_ALPHA_EXT", - "GL_CONSTANT_COLOR_EXT", - "GL_DST_ALPHA", - "GL_DST_COLOR", - "GL_ONE", - "GL_ONE_MINUS_DST_ALPHA", - "GL_ONE_MINUS_DST_COLOR", - "GL_ONE_MINUS_SRC_ALPHA", - "GL_ONE_MINUS_SRC_COLOR", - "GL_SRC_ALPHA", - "GL_SRC_COLOR", - "GL_SRC_ALPHA_SATURATE", - "GL_ZERO", - }, -}, { - group: "AttribMask", - append: []string{ - "GL_COVERAGE_BUFFER_BIT_NV", - }, -}} - -func tweakGroups(groups []glGroup) { - tweaks := make(map[string]groupTweak) - reorder := make(map[string]int) - top := 0 - for _, tweak := range groupTweaks { - tweaks[tweak.group] = tweak - if tweak.reorder { - reorder[tweak.group] = top - top++ - } - } - - // Take reordered groups out, leaving space at the start. - stash := make([]glGroup, top) - for i, group := range groups { - newi, ok := reorder[group.Name] - if !ok { - continue - } - stash[newi] = group - copy(groups[1:i+1], groups[0:i]) - } - // Put reordered groups back, in the proper order. - copy(groups, stash) - - for i, group := range groups { - tweak, ok := tweaks[group.Name] - if !ok { - continue - } - if tweak.rename != "" { - group.Name = tweak.rename - } - if tweak.replace != nil { - group.Enums = group.Enums[:0] - for _, name := range tweak.replace { - group.Enums = append(group.Enums, glEnum{Name: name}) - } - } - if tweak.append != nil { - for _, name := range tweak.append { - group.Enums = append(group.Enums, glEnum{Name: name}) - } - } - groups[i] = group - } -} - -func parseConsts(filename string) (map[glVersion][]Const, error) { - f, err := os.Open(filename) - if err != nil { - return nil, fmt.Errorf("cannot open %s: %v", filename, err) - } - defer f.Close() - - var registry glRegistry - err = xml.NewDecoder(f).Decode(®istry) - if err != nil { - return nil, fmt.Errorf("cannot parse %s: %v", filename, err) - } - - var all = make(map[glVersion]map[string]bool) - var last = make(map[string]map[string]bool) - for _, feature := range registry.Features { - for _, profile := range []string{"", "core", "compatibility"} { - required := make(map[string]bool) - for name := range last[feature.API+":"+profile] { - required[name] = true - } - if profile != "" { - for name := range last[feature.API+":"] { - required[name] = true - } - } - - for _, require := range feature.Requires { - if require.Profile == profile || require.Profile == "" { - for _, enum := range require.Enums { - required[enum.Name] = true - } - } - } - for _, remove := range feature.Removes { - if remove.Profile == profile || remove.Profile == "" { - for _, enum := range remove.Enums { - delete(required, enum.Name) - } - } - } - - all[glVersion{feature.API, feature.Number, profile}] = required - last[feature.API+":"+profile] = required - } - } - - // Enums in groups and requires/removes have no values. - enums := make(map[string]glEnum) - for _, enum := range registry.Enums { - enums[enum.Name] = enum - } - - tweakGroups(registry.Groups) - - consts := make(map[glVersion][]Const) - for _, glVersion := range glVersions { - var required = all[glVersion] - var done = make(map[string]bool) - var lineblock = 0 - var vconsts []Const - for _, group := range registry.Groups { - for _, enum := range group.Enums { - if required[enum.Name] && !done[enum.Name] { - done[enum.Name] = true - c := Const{ - Name: enum.Name, - Value: enums[enum.Name].Value, - LineBlock: lineblock, - } - vconsts = append(vconsts, c) - } - } - lineblock++ - } - // Everything else not found in groups. - for _, enum := range registry.Enums { - if required[enum.Name] && !done[enum.Name] { - done[enum.Name] = true - c := Const{ - Name: enum.Name, - Value: enum.Value, - LineBlock: lineblock, - } - vconsts = append(vconsts, c) - } - } - consts[glVersion] = vconsts - } - // Version 1.0 has no enums. Copy from 1.1. - consts[glVersion{"gl", "1.0", ""}] = consts[glVersion{"gl", "1.1", ""}] - return consts, nil -} - -func prepareHeader(header *Header) error { - funcNameDocCount := make(map[string]int) - - for fi, f := range header.Func { - docPrefix := funcNameDocPrefix(f.Name) - if docPrefix != f.Name { - funcNameDocCount[docPrefix]++ - } - if !strings.HasPrefix(f.Name, "gl") || len(f.Name) < 3 { - panic("unexpected C function name: " + f.Name) - } - f.GoName = f.Name[2:] - if f.Type == "int" { - // Some consistency. It's in a gl* function after all. - f.Type = "GLint" - } - if f.Type != "void" { - f.GoType = goTypeName(f.Type) - } - tweaks := funcTweaks[f.GoName] - if tweaks.result != "" { - f.GoType = tweaks.result - } - for pi := range f.Param { - f.Param[pi] = prepareParam(f, pi) - } - header.Func[fi] = f - } - - for fi, f := range header.Func { - prefix := funcNameDocPrefix(f.Name) - if funcNameDocCount[prefix] > 1 { - f.DocName = prefix - } else { - f.DocName = f.Name - } - header.Func[fi] = f - } - - for ti, t := range header.Type { - t.GoName = goTypeName(t.Name) - header.Type[ti] = t - } - - for ci, c := range header.Const { - if !strings.HasPrefix(c.Name, "GL") || len(c.Name) < 3 { - panic("unexpected C define name: " + c.Name) - } - if c.Name[3] >= '0' && c.Name[3] <= '9' { - c.GoName = "N" + c.Name[3:] - } else { - c.GoName = c.Name[3:] - } - header.Const[ci] = c - } - - return nil -} - -func goTypeName(ctypeName string) string { - // These types carry very little meaning, so it's more - // convenient to have their native counterparts instead. - switch ctypeName { - case "GLboolean": - return "bool" - case "GLbyte", "GLchar": - return "byte" - case "GLubyte": - return "uint8" - case "GLshort": - return "int16" - case "GLushort": - return "uint16" - case "GLint", "GLsizei": - return "int32" - case "GLuint": - return "uint32" - case "GLint64": - return "int64" - case "GLuint64": - return "uint64" - case "GLintptr", "GLsizeiptr": - return "int" - case "GLuintptr": - return "uintptr" - case "GLfloat": - return "float32" - case "GLdouble": - return "float64" - } - if !strings.HasPrefix(ctypeName, "GL") || len(ctypeName) < 3 { - panic("unexpected C type name: " + ctypeName) - } - return "glbase." + string(ctypeName[2]-('a'-'A')) + ctypeName[3:] -} - -func prepareParam(f Func, pi int) Param { - p := f.Param[pi] - - // Qt seems to have gratuitously changed some names. - if name, ok := paramNameFixes[p.Name]; ok { - p.Name = name - } - if pi > 0 && strings.HasPrefix(f.GoName, "Uniform") && p.Name != "count" && p.Name != "transpose" { - if strings.HasSuffix(f.GoName, "v") { - p.Name = "value" - } else if f.Param[1].Name == "count" { - p.Name = "v" + string('0' + pi-2) - } else { - p.Name = "v" + string('0' + pi-1) - } - } - - // Other names conflict with Go keywords. - switch p.Name { - case "type", "func", "map", "string": - p.GoName = "gl" + p.Name - default: - if token.Lookup(p.Name) != token.IDENT { - p.GoName = p.Name + "_" - } else { - p.GoName = p.Name - } - } - - // Some consistency. Those are a gl* function after all. - switch p.Type { - case "void": - p.Type = "GLvoid" - case "char": - p.Type = "GLchar" - case "qopengl_GLsizeiptr", "qopengl_GLintptr": - p.Type = p.Type[8:] - } - - // Prepare the parameter type. - p.GoType = goTypeName(p.Type) - switch p.GoType { - case "uint32": - switch p.GoName { - case "program", "programs": - p.GoType = "glbase.Program" - case "shader", "shaders": - p.GoType = "glbase.Shader" - case "buffer", "buffers": - p.GoType = "glbase.Buffer" - case "texture", "textures": - p.GoType = "glbase.Texture" - case "framebuffer", "framebuffers": - p.GoType = "glbase.Framebuffer" - case "renderbuffer", "renderbuffers": - p.GoType = "glbase.Renderbuffer" - case "index": - if strings.Contains(f.Name, "Attrib") { - p.GoType = "glbase.Attrib" - } - } - case "int32": - switch p.GoName { - case "size", "count", "stride", "offset", "xoffset", "yoffset", "order", "level": - p.GoType = "int" - case "n", "first", "width", "height", "border", "imageSize": - p.GoType = "int" - case "x", "y", "z", "w": - if !strings.HasPrefix(f.GoName, "Uniform") { - p.GoType = "int" - } - case "location": - if strings.Contains(f.Name, "Uniform") { - p.GoType = "glbase.Uniform" - } - } - } - - // Save the original name so that future tweaks can still refer - // to it, and apply the tweaks. - p.GoNameOrig = p.GoName - tweak := funcTweaks[f.GoName].params[p.GoNameOrig] - if tweak.retype != "" { - p.GoType = tweak.retype - } - if tweak.rename != "" { - p.GoName = tweak.rename - } - - return p -} - -func funcNameDocPrefix(cfuncName string) string { - k := len(cfuncName) - 1 - if cfuncName[k] == 'v' { - k-- - } - switch cfuncName[k] { - case 'i', 'f', 'd', 's', 'b': - k-- - if cfuncName[k] == 'u' { - k-- - } - switch cfuncName[k] { - case '1', '2', '3', '4': - k-- - } - } - return cfuncName[:k+1] -} - -var constLineBlock = -1 - -func constNewLine(lineBlock int) bool { - if lineBlock == constLineBlock { - return false - } - constLineBlock = lineBlock - return true -} - -func substr(s string, i ...int) string { - switch len(i) { - case 1: - return s[i[0]:] - case 2: - return s[i[0]:i[1]] - } - panic("invalid number of arguments for substr") -} - -var funcTweaks = make(map[string]funcTweak) - -func init() { - var re = regexp.MustCompile(`\bcopy:([a-zA-Z0-9]+)\b`) - for _, tweak := range funcTweakList { - funcTweaks[tweak.name] = tweak - } - for _, tweak := range funcTweakList { - if tweak.copy != "" { - doc := tweak.doc - name := tweak.name - tweak = funcTweaks[tweak.copy] - tweak.name = name - if doc != "" { - tweak.doc = doc - } - } - tweak.doc = re.ReplaceAllStringFunc(tweak.doc, func(match string) string { - return funcTweaks[match[5:]].doc - }) - funcTweaks[tweak.name] = tweak - } -} - -func funcComment(header *Header, f Func) string { - var doc = funcTweaks[f.GoName].doc - doc = strings.TrimRight(execTemplate(f.GoName+":doc", doc, f), "\n\t ") - var buf bytes.Buffer - if doc != "" { - var scanner = bufio.NewScanner(bytes.NewBufferString(doc)) - var started bool - var prefix string - for scanner.Scan() { - line := scanner.Text() - if !started { - if line == "" { - continue - } - started = true - trimmed := strings.TrimLeft(line, "\t ") - prefix = line[:len(line)-len(trimmed)] - line = f.GoName + " " + trimmed - } else { - line = strings.TrimPrefix(line, prefix) - } - buf.WriteString("// ") - buf.WriteString(line) - buf.WriteByte('\n') - } - } - if buf.Len() > 0 { - return strings.TrimSuffix(buf.String(), "\n") - } - var manNum = 2 - if header.GLVersionName[0] >= '2' && header.GLVersionName[0] <= '4' { - manNum = int(header.GLVersionName[0] - '0') - } - return fmt.Sprintf("// https://www.opengl.org/sdk/docs/man%d/xhtml/%s.xml", manNum, f.Name) -} - -type paramItem struct { - GoName string - GoType string -} - -func appendResultList(list []paramItem, f Func) []paramItem { - var tweaks = funcTweaks[f.GoName] - var buf bytes.Buffer - tweak := tweaks.params["result"] - if f.GoType != "" && !tweak.omit { - var item paramItem - if tweak.rename != "" { - item.GoName = tweak.rename - } else { - item.GoName = "result" - } - if tweak.retype != "" { - item.GoType = tweak.retype - } else { - for i := 0; i < f.Addr; i++ { - buf.WriteString("[]") - } - buf.WriteString(f.GoType) - item.GoType = buf.String() - } - list = append(list, item) - } - return list -} - -func appendParamsList(list []paramItem, f Func, output bool) []paramItem { - var tweaks = funcTweaks[f.GoName] - var buf bytes.Buffer - for _, param := range f.Param { - tweak := tweaks.params[param.GoNameOrig] - if tweak.omit || tweak.output != output { - continue - } - item := paramItem{GoName: param.GoName} - if tweak.retype != "" { - item.GoType = param.GoType - } else if param.Addr == 1 && param.Type == "GLvoid" { - item.GoType = "interface{}" - } else if tweak.single { - item.GoType = param.GoType - } else { - buf.Truncate(0) - for j := 0; j < param.Addr; j++ { - buf.WriteString("[]") - } - if param.Array > 0 { - buf.WriteByte('[') - buf.WriteString(strconv.Itoa(param.Array)) - buf.WriteByte(']') - } - buf.WriteString(param.GoType) - item.GoType = buf.String() - } - list = append(list, item) - } - return list -} - -func formatParamsList(list []paramItem) string { - var buf bytes.Buffer - for i, item := range list { - if i > 0 { - buf.WriteString(", ") - } - buf.WriteString(item.GoName) - if i == len(list)-1 || item.GoType != list[i+1].GoType { - buf.WriteByte(' ') - buf.WriteString(item.GoType) - } - } - return buf.String() -} - -func funcParams(f Func) string { - list := appendParamsList(nil, f, false) - return formatParamsList(list) -} - -func funcResult(f Func) string { - list := appendResultList(nil, f) - list = appendParamsList(list, f, true) - if len(list) == 0 { - return "" - } - if len(list) == 1 && (list[0].GoName == "result" || funcTweaks[f.GoName].params[list[0].GoName].unnamed) { - return list[0].GoType - } - return "(" + formatParamsList(list) + ")" -} - -func funcBefore(f Func) string { - content := funcTweaks[f.GoName].before - return strings.TrimSpace(execTemplate(f.GoName+":before", content, f)) -} - -func funcAfter(f Func) string { - content := funcTweaks[f.GoName].after - return strings.TrimSpace(execTemplate(f.GoName+":after", content, f)) -} - -func funcCallParams(f Func) string { - tweaks := funcTweaks[f.GoName] - var buf bytes.Buffer - for i, param := range f.Param { - if i > 0 { - buf.WriteString(", ") - } - tweak := tweaks.params[param.GoNameOrig] - name := param.GoName - if tweak.replace { - name += "_c" - } - if param.Addr == 1 && param.Type == "GLvoid" { - buf.WriteString(name) - buf.WriteString("_ptr") - } else if param.Addr == 1 && param.Type == "GLchar" && param.GoType == "string" { - buf.WriteString("(*C.GLchar)(") - buf.WriteString(name) - buf.WriteString("_cstr)") - } else if param.Addr > 0 { - buf.WriteByte('(') - for i := 0; i < param.Addr; i++ { - buf.WriteByte('*') - } - buf.WriteString("C.") - buf.WriteString(param.Type) - buf.WriteString(")(unsafe.Pointer(&") - buf.WriteString(name) - if !tweak.single { - buf.WriteString("[0]") - } - buf.WriteString("))") - - } else if param.Type == "GLboolean" { - buf.WriteString("*(*C.GLboolean)(unsafe.Pointer(&") - buf.WriteString(name) - buf.WriteString("))") - } else if param.Type == "GLsync" { - buf.WriteString("C.GLsync(unsafe.Pointer(") - buf.WriteString(name) - buf.WriteString("))") - } else { - buf.WriteString("C.") - buf.WriteString(param.Type) - buf.WriteByte('(') - buf.WriteString(name) - buf.WriteByte(')') - } - } - return buf.String() -} - -func funcCallParamsPrep(f Func) string { - var buf bytes.Buffer - for _, param := range f.Param { - name := param.GoName - if param.Addr == 1 && param.Type == "GLchar" && param.GoType == "string" { - fmt.Fprintf(&buf, "%s_cstr := C.CString(%s)\n", name, name) - } - if param.Addr == 1 && param.Type == "GLvoid" && param.GoType == "glbase.Void" { - fmt.Fprintf(&buf, "var %s_ptr unsafe.Pointer\n", name) - fmt.Fprintf(&buf, "var %s_v = reflect.ValueOf(%s)\n", name, name) - fmt.Fprintf(&buf, "if %s != nil && %s_v.Kind() != reflect.Slice { panic(\"parameter %s must be a slice\") }\n", name, name, name) - fmt.Fprintf(&buf, "if %s != nil { %s_ptr = unsafe.Pointer(%s_v.Index(0).Addr().Pointer()) }\n", name, name, name) - } - if plen := funcParamLen(f, param); plen > 0 { - fmt.Fprintf(&buf, "if len(%s) != %d { panic(\"parameter %s has incorrect length\") }\n", name, plen, name) - } - } - return buf.String() -} - -func funcCallParamsPost(f Func) string { - var buf bytes.Buffer - for _, param := range f.Param { - if param.Addr == 1 && param.Type == "GLchar" && param.GoType == "string" { - buf.WriteString("C.free(unsafe.Pointer(") - buf.WriteString(param.GoName) - buf.WriteString("_cstr))\n") - } - } - return buf.String() -} - -func funcReturnResult(f Func) string { - tweaks := funcTweaks[f.GoName] - var buf bytes.Buffer - if f.GoType != "" { - if f.Type == "GLboolean" { - buf.WriteString("*(*bool)(unsafe.Pointer(&glresult))") - } else if f.Type == "GLsync" { - buf.WriteString("glbase.Sync(unsafe.Pointer(glresult))") - } else { - buf.WriteString(f.GoType) - buf.WriteString("(glresult)") - } - } - for _, param := range f.Param { - tweak := tweaks.params[param.GoNameOrig] - if tweak.omit || !tweak.output { - continue - } - if buf.Len() > 0 { - buf.WriteString(", ") - } - buf.WriteString(param.GoName) - } - return buf.String() -} - -func funcCParams(f Func) string { - var buf bytes.Buffer - for i, param := range f.Param { - if i > 0 { - buf.WriteString(", ") - } - if param.Const { - buf.WriteString("const ") - } - buf.WriteString(param.Type) - for j := 0; j < param.Addr; j++ { - buf.WriteString("*") - } - if param.Array > 0 { - buf.WriteByte('[') - buf.WriteString(strconv.Itoa(param.Array)) - buf.WriteByte(']') - } - buf.WriteByte(' ') - buf.WriteString(param.GoName) - } - return buf.String() -} - -func funcCCallParams(f Func) string { - var buf bytes.Buffer - for i, param := range f.Param { - if i > 0 { - buf.WriteString(", ") - } - buf.WriteString(param.GoName) - } - return buf.String() -} - -func funcParamLen(f Func, param Param) int { - if strings.HasPrefix(f.GoName, "Uniform") { - return 0 - } - if param.Addr == 0 || len(f.Name) < 3 || f.Name[len(f.Name)-1] != 'v' { - return 0 - } - switch f.Name[len(f.Name)-2] { - case 'i', 'f', 'd', 's': - switch c := f.Name[len(f.Name)-3]; c { - case '2', '3', '4': - return int(c - '0') - } - } - return 0 -} - -// funcSupported returns whether the given function has wrapping -// properly implemented already. -func funcSupported(f Func) bool { - if _, ok := funcTweaks[f.GoName]; ok { - return true - } - if f.Addr > 0 { - return false - } - for _, param := range f.Param { - if param.Array > 0 { - return false - } - if param.Addr > 1 { - return false - } - } - return true -} - -func copyDoc(name string) string { - return funcTweaks[name].doc -} - -func paramGoType(f Func, name string) string { - for _, param := range f.Param { - if param.GoName == name { - return param.GoType - } - } - panic(fmt.Sprintf("parameter %q not found in function %s", name, f.GoName)) -} - -func funcSince(f Func, since string) string { - if strings.HasSuffix(since, "+") { - return f.GoName + " is available in GL version " + since[:len(since)-1] + " or greater." - } - return f.GoName + " is available in GL version " + since + "." -} - -func execTemplate(name, content string, dot interface{}) string { - if !strings.Contains(content, "{{") { - return content - } - var buf bytes.Buffer - tmpl := template.Must(template.New(name).Funcs(funcs).Parse(content)) - if err := tmpl.Execute(&buf, dot); err != nil { - panic(err) - } - return buf.String() -} - -func buildTemplate(name, content string) *template.Template { - return template.Must(template.New(name).Funcs(funcs).Parse(content)) -} - -var funcs template.FuncMap - -type packageFile struct { - Name string - Template *template.Template -} - -var packageFiles []packageFile - -func init() { - funcs = template.FuncMap{ - "copyDoc": copyDoc, - "paramGoType": paramGoType, - "funcSince": funcSince, - - "constNewLine": constNewLine, - "lower": strings.ToLower, - "substr": substr, - - "funcSupported": funcSupported, - "funcComment": funcComment, - "funcParams": funcParams, - "funcResult": funcResult, - "funcBefore": funcBefore, - "funcCallParams": funcCallParams, - "funcCallParamsPrep": funcCallParamsPrep, - "funcCallParamsPost": funcCallParamsPost, - "funcAfter": funcAfter, - "funcReturnResult": funcReturnResult, - "funcCParams": funcCParams, - "funcCCallParams": funcCCallParams, - } - - packageFiles = []packageFile{ - {"gl.go", buildTemplate("gl.go", tmplGo)}, - {"funcs.cpp", buildTemplate("funcs.cpp", tmplFuncsCpp)}, - {"funcs.h", buildTemplate("funcs.h", tmplFuncsH)}, - } -} - -var tmplGo = ` -// ** file automatically generated by glgen -- do not edit manually ** - -package GL - -// #cgo CXXFLAGS: -std=c++0x -pedantic-errors -Wall -fno-strict-aliasing -// #cgo LDFLAGS: -lstdc++ -{{if eq $.GLVersionName "ES2"}}// #cgo !darwin LDFLAGS: -lGL -// #cgo darwin LDFLAGS: -framework OpenGL -{{end}}// #cgo pkg-config: Qt5Core Qt5OpenGL -// -// #include "funcs.h" -// -// void free(void*); -// -import "C" - -import ( - "fmt" - "reflect" - "unsafe" - - "gopkg.in/qml.v1/gl/glbase" -) - -// API returns a value that offers methods matching the OpenGL version {{$.GLVersionName}} API. -// -// The returned API must not be used after the provided OpenGL context becomes invalid. -func API(context glbase.Contexter) *GL { - gl := &GL{} - gl.funcs = C.gl{{$.GLVersionLabel}}_funcs() - if gl.funcs == nil { - panic(fmt.Errorf("OpenGL version {{$.GLVersionName}} is not available")) - } - return gl -} - -// GL implements the OpenGL version {{$.GLVersionName}} API. Values of this -// type must be created via the API function, and it must not be used after -// the associated OpenGL context becomes invalid. -type GL struct { - funcs unsafe.Pointer -} - -const ({{range $const := $.Const}}{{if $const.LineBlock | constNewLine}} -{{end}}{{if $const.Heading}} // {{$const.Heading}} -{{end}} {{if $const.Disabled}}//{{end}}{{$const.GoName}} = {{$const.Value}}{{if $const.Comment}} // {{$const.Comment}}{{end}} -{{end}}) - -{{ range $func := $.Func }}{{if $func | funcSupported}} -{{funcComment $ $func}} -func (gl *GL) {{$func.GoName}}({{funcParams $func}}) {{funcResult $func}} { - {{funcCallParamsPrep $func}} {{/* -*/}} {{with $code := funcBefore $func}}{{$code}} - {{end}} {{/* -*/}} {{if ne $func.Type "void"}}glresult := {{end}}C.gl{{$.GLVersionLabel}}_{{$func.Name}}(gl.funcs{{if $func.Param}}, {{funcCallParams $func}}{{end}}) - {{with $code := funcAfter $func}}{{$code}} - {{end}} {{/* -*/}} {{funcCallParamsPost $func}} {{/* -*/}} {{with $code := funcReturnResult $func}}return {{$code}} - {{end}} {{/* -*/}} } -{{end}}{{end}} -` - -var tmplFuncsCpp = ` -// ** file automatically generated by glgen -- do not edit manually ** - -#include -#include - -#include "funcs.h" - -void *gl{{$.GLVersionLabel}}_funcs() { - {{$.Class}}* funcs = QOpenGLContext::currentContext()->{{if eq $.Class "QOpenGLFunctions"}}functions{{else}}versionFunctions<{{$.Class}}>{{end}}(); - if (!funcs) { - return 0; - }{{if ne $.Class "QOpenGLFunctions"}} - funcs->initializeOpenGLFunctions();{{end}} - return funcs; -} - -{{ range $func := $.Func }}{{if $func | funcSupported}} -{{$func.Type}} gl{{$.GLVersionLabel}}_{{$func.Name}}(void *_glfuncs{{if $func.Param}}, {{funcCParams $func}}{{end}}) -{ - {{if not $func.Missing}}{{$.Class}}* _qglfuncs = reinterpret_cast<{{$.Class}}*>(_glfuncs); - {{end}}{{if $func.GoType}}return {{end}}{{if not $func.Missing}}_qglfuncs->{{end}}{{$func.Name}}({{funcCCallParams $func}}); -} -{{end}}{{end}} -` - -var tmplFuncsH = ` -// ** file automatically generated by glgen -- do not edit manually ** - -#ifndef __cplusplus -#include -#include -typedef unsigned int GLenum; -typedef unsigned char GLboolean; -typedef unsigned int GLbitfield; -typedef void GLvoid; -typedef char GLchar; -typedef signed char GLbyte; /* 1-byte signed */ -typedef short GLshort; /* 2-byte signed */ -typedef int GLint; /* 4-byte signed */ -typedef unsigned char GLubyte; /* 1-byte unsigned */ -typedef unsigned short GLushort; /* 2-byte unsigned */ -typedef unsigned int GLuint; /* 4-byte unsigned */ -typedef int GLsizei; /* 4-byte signed */ -typedef float GLfloat; /* single precision float */ -typedef float GLclampf; /* single precision float in [0,1] */ -typedef double GLdouble; /* double precision float */ -typedef double GLclampd; /* double precision float in [0,1] */ -typedef int64_t GLint64; -typedef uint64_t GLuint64; -typedef ptrdiff_t GLintptr; -typedef ptrdiff_t GLsizeiptr; -typedef ptrdiff_t GLintptrARB; -typedef ptrdiff_t GLsizeiptrARB; -typedef struct __GLsync *GLsync; -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -void *gl{{$.GLVersionLabel}}_funcs(); - -{{ range $func := $.Func }}{{if $func | funcSupported}}{{$func.Type}} gl{{$.GLVersionLabel}}_{{$func.Name}}(void *_glfuncs{{if $func.Param}}, {{funcCParams $func}}{{end}}); -{{end}}{{end}} - -#ifdef __cplusplus -} // extern "C" -#endif -` diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/gengl/parseqt.go b/Godeps/_workspace/src/github.com/obscuren/qml/gl/gengl/parseqt.go deleted file mode 100644 index a4a882dd90..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/gengl/parseqt.go +++ /dev/null @@ -1,13904 +0,0 @@ - -// line 1 "parseqt.rl" -// -// To compile: -// -// ragel -Z -G2 -o parseqt.go parseqt.rl -// -// To show a diagram of the state machine: -// -// ragel -V -G2 -p -o parseqt.dot parseqt.rl -// dot -Tsvg -o parseqt.svg parseqt.dot -// chrome parseqt.svg -// - -package main - -import ( - "fmt" -) - - -// line 23 "parseqt.go" -const parseqt_start int = 447 -const parseqt_first_final int = 447 -const parseqt_error int = 0 - -const parseqt_en_main int = 447 -const parseqt_en_inclass int = 450 -const parseqt_en_skiperror int = 446 - - -// line 23 "parseqt.rl" - - -func parseQt(data string, header *Header) error { - var cs, p, pe int - var ts, te, act, eof int - - pe = len(data) - eof = len(data) - - _, _, _ = ts, te, act - - //stack := make([]int, 32) - //top := 0 - - var curline = 1 - - var m0, m1, m2, m3, m4, m5, m6 int - var foundclass int - var inpublic bool - var heading string - var lineblock int - var f Func - - -// line 58 "parseqt.go" - { - cs = parseqt_start - ts = 0 - te = 0 - act = 0 - } - -// line 66 "parseqt.go" - { - if p == pe { - goto _test_eof - } - switch cs { - case 447: - goto st_case_447 - case 1: - goto st_case_1 - case 2: - goto st_case_2 - case 3: - goto st_case_3 - case 4: - goto st_case_4 - case 5: - goto st_case_5 - case 6: - goto st_case_6 - case 7: - goto st_case_7 - case 8: - goto st_case_8 - case 9: - goto st_case_9 - case 10: - goto st_case_10 - case 11: - goto st_case_11 - case 12: - goto st_case_12 - case 13: - goto st_case_13 - case 14: - goto st_case_14 - case 15: - goto st_case_15 - case 16: - goto st_case_16 - case 17: - goto st_case_17 - case 18: - goto st_case_18 - case 19: - goto st_case_19 - case 20: - goto st_case_20 - case 21: - goto st_case_21 - case 448: - goto st_case_448 - case 22: - goto st_case_22 - case 23: - goto st_case_23 - case 24: - goto st_case_24 - case 25: - goto st_case_25 - case 26: - goto st_case_26 - case 27: - goto st_case_27 - case 28: - goto st_case_28 - case 29: - goto st_case_29 - case 30: - goto st_case_30 - case 31: - goto st_case_31 - case 32: - goto st_case_32 - case 33: - goto st_case_33 - case 34: - goto st_case_34 - case 35: - goto st_case_35 - case 36: - goto st_case_36 - case 37: - goto st_case_37 - case 38: - goto st_case_38 - case 39: - goto st_case_39 - case 40: - goto st_case_40 - case 41: - goto st_case_41 - case 42: - goto st_case_42 - case 43: - goto st_case_43 - case 44: - goto st_case_44 - case 45: - goto st_case_45 - case 46: - goto st_case_46 - case 47: - goto st_case_47 - case 48: - goto st_case_48 - case 49: - goto st_case_49 - case 50: - goto st_case_50 - case 51: - goto st_case_51 - case 52: - goto st_case_52 - case 53: - goto st_case_53 - case 54: - goto st_case_54 - case 55: - goto st_case_55 - case 56: - goto st_case_56 - case 449: - goto st_case_449 - case 57: - goto st_case_57 - case 446: - goto st_case_446 - case 453: - goto st_case_453 - case 0: - goto st_case_0 - case 454: - goto st_case_454 - case 450: - goto st_case_450 - case 58: - goto st_case_58 - case 59: - goto st_case_59 - case 60: - goto st_case_60 - case 61: - goto st_case_61 - case 62: - goto st_case_62 - case 63: - goto st_case_63 - case 64: - goto st_case_64 - case 65: - goto st_case_65 - case 66: - goto st_case_66 - case 67: - goto st_case_67 - case 68: - goto st_case_68 - case 69: - goto st_case_69 - case 70: - goto st_case_70 - case 71: - goto st_case_71 - case 72: - goto st_case_72 - case 73: - goto st_case_73 - case 74: - goto st_case_74 - case 75: - goto st_case_75 - case 76: - goto st_case_76 - case 77: - goto st_case_77 - case 78: - goto st_case_78 - case 79: - goto st_case_79 - case 80: - goto st_case_80 - case 81: - goto st_case_81 - case 82: - goto st_case_82 - case 83: - goto st_case_83 - case 84: - goto st_case_84 - case 85: - goto st_case_85 - case 86: - goto st_case_86 - case 87: - goto st_case_87 - case 88: - goto st_case_88 - case 89: - goto st_case_89 - case 90: - goto st_case_90 - case 91: - goto st_case_91 - case 92: - goto st_case_92 - case 93: - goto st_case_93 - case 94: - goto st_case_94 - case 95: - goto st_case_95 - case 96: - goto st_case_96 - case 97: - goto st_case_97 - case 98: - goto st_case_98 - case 99: - goto st_case_99 - case 100: - goto st_case_100 - case 101: - goto st_case_101 - case 102: - goto st_case_102 - case 103: - goto st_case_103 - case 104: - goto st_case_104 - case 105: - goto st_case_105 - case 106: - goto st_case_106 - case 107: - goto st_case_107 - case 108: - goto st_case_108 - case 109: - goto st_case_109 - case 110: - goto st_case_110 - case 111: - goto st_case_111 - case 112: - goto st_case_112 - case 113: - goto st_case_113 - case 114: - goto st_case_114 - case 115: - goto st_case_115 - case 116: - goto st_case_116 - case 117: - goto st_case_117 - case 118: - goto st_case_118 - case 119: - goto st_case_119 - case 120: - goto st_case_120 - case 121: - goto st_case_121 - case 122: - goto st_case_122 - case 123: - goto st_case_123 - case 124: - goto st_case_124 - case 125: - goto st_case_125 - case 126: - goto st_case_126 - case 127: - goto st_case_127 - case 128: - goto st_case_128 - case 129: - goto st_case_129 - case 130: - goto st_case_130 - case 131: - goto st_case_131 - case 132: - goto st_case_132 - case 133: - goto st_case_133 - case 134: - goto st_case_134 - case 135: - goto st_case_135 - case 136: - goto st_case_136 - case 137: - goto st_case_137 - case 138: - goto st_case_138 - case 139: - goto st_case_139 - case 140: - goto st_case_140 - case 141: - goto st_case_141 - case 142: - goto st_case_142 - case 143: - goto st_case_143 - case 144: - goto st_case_144 - case 145: - goto st_case_145 - case 451: - goto st_case_451 - case 146: - goto st_case_146 - case 147: - goto st_case_147 - case 148: - goto st_case_148 - case 149: - goto st_case_149 - case 150: - goto st_case_150 - case 151: - goto st_case_151 - case 152: - goto st_case_152 - case 153: - goto st_case_153 - case 154: - goto st_case_154 - case 155: - goto st_case_155 - case 156: - goto st_case_156 - case 157: - goto st_case_157 - case 158: - goto st_case_158 - case 159: - goto st_case_159 - case 160: - goto st_case_160 - case 452: - goto st_case_452 - case 161: - goto st_case_161 - case 162: - goto st_case_162 - case 163: - goto st_case_163 - case 164: - goto st_case_164 - case 165: - goto st_case_165 - case 166: - goto st_case_166 - case 167: - goto st_case_167 - case 168: - goto st_case_168 - case 169: - goto st_case_169 - case 170: - goto st_case_170 - case 171: - goto st_case_171 - case 172: - goto st_case_172 - case 173: - goto st_case_173 - case 174: - goto st_case_174 - case 175: - goto st_case_175 - case 176: - goto st_case_176 - case 177: - goto st_case_177 - case 178: - goto st_case_178 - case 179: - goto st_case_179 - case 180: - goto st_case_180 - case 181: - goto st_case_181 - case 182: - goto st_case_182 - case 183: - goto st_case_183 - case 184: - goto st_case_184 - case 185: - goto st_case_185 - case 186: - goto st_case_186 - case 187: - goto st_case_187 - case 188: - goto st_case_188 - case 189: - goto st_case_189 - case 190: - goto st_case_190 - case 191: - goto st_case_191 - case 192: - goto st_case_192 - case 193: - goto st_case_193 - case 194: - goto st_case_194 - case 195: - goto st_case_195 - case 196: - goto st_case_196 - case 197: - goto st_case_197 - case 198: - goto st_case_198 - case 199: - goto st_case_199 - case 200: - goto st_case_200 - case 201: - goto st_case_201 - case 202: - goto st_case_202 - case 203: - goto st_case_203 - case 204: - goto st_case_204 - case 205: - goto st_case_205 - case 206: - goto st_case_206 - case 207: - goto st_case_207 - case 208: - goto st_case_208 - case 209: - goto st_case_209 - case 210: - goto st_case_210 - case 211: - goto st_case_211 - case 212: - goto st_case_212 - case 213: - goto st_case_213 - case 214: - goto st_case_214 - case 215: - goto st_case_215 - case 216: - goto st_case_216 - case 217: - goto st_case_217 - case 218: - goto st_case_218 - case 219: - goto st_case_219 - case 220: - goto st_case_220 - case 221: - goto st_case_221 - case 222: - goto st_case_222 - case 223: - goto st_case_223 - case 224: - goto st_case_224 - case 225: - goto st_case_225 - case 226: - goto st_case_226 - case 227: - goto st_case_227 - case 228: - goto st_case_228 - case 229: - goto st_case_229 - case 230: - goto st_case_230 - case 231: - goto st_case_231 - case 232: - goto st_case_232 - case 233: - goto st_case_233 - case 234: - goto st_case_234 - case 235: - goto st_case_235 - case 236: - goto st_case_236 - case 237: - goto st_case_237 - case 238: - goto st_case_238 - case 239: - goto st_case_239 - case 240: - goto st_case_240 - case 241: - goto st_case_241 - case 242: - goto st_case_242 - case 243: - goto st_case_243 - case 244: - goto st_case_244 - case 245: - goto st_case_245 - case 246: - goto st_case_246 - case 247: - goto st_case_247 - case 248: - goto st_case_248 - case 249: - goto st_case_249 - case 250: - goto st_case_250 - case 251: - goto st_case_251 - case 252: - goto st_case_252 - case 253: - goto st_case_253 - case 254: - goto st_case_254 - case 255: - goto st_case_255 - case 256: - goto st_case_256 - case 257: - goto st_case_257 - case 258: - goto st_case_258 - case 259: - goto st_case_259 - case 260: - goto st_case_260 - case 261: - goto st_case_261 - case 262: - goto st_case_262 - case 263: - goto st_case_263 - case 264: - goto st_case_264 - case 265: - goto st_case_265 - case 266: - goto st_case_266 - case 267: - goto st_case_267 - case 268: - goto st_case_268 - case 269: - goto st_case_269 - case 270: - goto st_case_270 - case 271: - goto st_case_271 - case 272: - goto st_case_272 - case 273: - goto st_case_273 - case 274: - goto st_case_274 - case 275: - goto st_case_275 - case 276: - goto st_case_276 - case 277: - goto st_case_277 - case 278: - goto st_case_278 - case 279: - goto st_case_279 - case 280: - goto st_case_280 - case 281: - goto st_case_281 - case 282: - goto st_case_282 - case 283: - goto st_case_283 - case 284: - goto st_case_284 - case 285: - goto st_case_285 - case 286: - goto st_case_286 - case 287: - goto st_case_287 - case 288: - goto st_case_288 - case 289: - goto st_case_289 - case 290: - goto st_case_290 - case 291: - goto st_case_291 - case 292: - goto st_case_292 - case 293: - goto st_case_293 - case 294: - goto st_case_294 - case 295: - goto st_case_295 - case 296: - goto st_case_296 - case 297: - goto st_case_297 - case 298: - goto st_case_298 - case 299: - goto st_case_299 - case 300: - goto st_case_300 - case 301: - goto st_case_301 - case 302: - goto st_case_302 - case 303: - goto st_case_303 - case 304: - goto st_case_304 - case 305: - goto st_case_305 - case 306: - goto st_case_306 - case 307: - goto st_case_307 - case 308: - goto st_case_308 - case 309: - goto st_case_309 - case 310: - goto st_case_310 - case 311: - goto st_case_311 - case 312: - goto st_case_312 - case 313: - goto st_case_313 - case 314: - goto st_case_314 - case 315: - goto st_case_315 - case 316: - goto st_case_316 - case 317: - goto st_case_317 - case 318: - goto st_case_318 - case 319: - goto st_case_319 - case 320: - goto st_case_320 - case 321: - goto st_case_321 - case 322: - goto st_case_322 - case 323: - goto st_case_323 - case 324: - goto st_case_324 - case 325: - goto st_case_325 - case 326: - goto st_case_326 - case 327: - goto st_case_327 - case 328: - goto st_case_328 - case 329: - goto st_case_329 - case 330: - goto st_case_330 - case 331: - goto st_case_331 - case 332: - goto st_case_332 - case 333: - goto st_case_333 - case 334: - goto st_case_334 - case 335: - goto st_case_335 - case 336: - goto st_case_336 - case 337: - goto st_case_337 - case 338: - goto st_case_338 - case 339: - goto st_case_339 - case 340: - goto st_case_340 - case 341: - goto st_case_341 - case 342: - goto st_case_342 - case 343: - goto st_case_343 - case 344: - goto st_case_344 - case 345: - goto st_case_345 - case 346: - goto st_case_346 - case 347: - goto st_case_347 - case 348: - goto st_case_348 - case 349: - goto st_case_349 - case 350: - goto st_case_350 - case 351: - goto st_case_351 - case 352: - goto st_case_352 - case 353: - goto st_case_353 - case 354: - goto st_case_354 - case 355: - goto st_case_355 - case 356: - goto st_case_356 - case 357: - goto st_case_357 - case 358: - goto st_case_358 - case 359: - goto st_case_359 - case 360: - goto st_case_360 - case 361: - goto st_case_361 - case 362: - goto st_case_362 - case 363: - goto st_case_363 - case 364: - goto st_case_364 - case 365: - goto st_case_365 - case 366: - goto st_case_366 - case 367: - goto st_case_367 - case 368: - goto st_case_368 - case 369: - goto st_case_369 - case 370: - goto st_case_370 - case 371: - goto st_case_371 - case 372: - goto st_case_372 - case 373: - goto st_case_373 - case 374: - goto st_case_374 - case 375: - goto st_case_375 - case 376: - goto st_case_376 - case 377: - goto st_case_377 - case 378: - goto st_case_378 - case 379: - goto st_case_379 - case 380: - goto st_case_380 - case 381: - goto st_case_381 - case 382: - goto st_case_382 - case 383: - goto st_case_383 - case 384: - goto st_case_384 - case 385: - goto st_case_385 - case 386: - goto st_case_386 - case 387: - goto st_case_387 - case 388: - goto st_case_388 - case 389: - goto st_case_389 - case 390: - goto st_case_390 - case 391: - goto st_case_391 - case 392: - goto st_case_392 - case 393: - goto st_case_393 - case 394: - goto st_case_394 - case 395: - goto st_case_395 - case 396: - goto st_case_396 - case 397: - goto st_case_397 - case 398: - goto st_case_398 - case 399: - goto st_case_399 - case 400: - goto st_case_400 - case 401: - goto st_case_401 - case 402: - goto st_case_402 - case 403: - goto st_case_403 - case 404: - goto st_case_404 - case 405: - goto st_case_405 - case 406: - goto st_case_406 - case 407: - goto st_case_407 - case 408: - goto st_case_408 - case 409: - goto st_case_409 - case 410: - goto st_case_410 - case 411: - goto st_case_411 - case 412: - goto st_case_412 - case 413: - goto st_case_413 - case 414: - goto st_case_414 - case 415: - goto st_case_415 - case 416: - goto st_case_416 - case 417: - goto st_case_417 - case 418: - goto st_case_418 - case 419: - goto st_case_419 - case 420: - goto st_case_420 - case 421: - goto st_case_421 - case 422: - goto st_case_422 - case 423: - goto st_case_423 - case 424: - goto st_case_424 - case 425: - goto st_case_425 - case 426: - goto st_case_426 - case 427: - goto st_case_427 - case 428: - goto st_case_428 - case 429: - goto st_case_429 - case 430: - goto st_case_430 - case 431: - goto st_case_431 - case 432: - goto st_case_432 - case 433: - goto st_case_433 - case 434: - goto st_case_434 - case 435: - goto st_case_435 - case 436: - goto st_case_436 - case 437: - goto st_case_437 - case 438: - goto st_case_438 - case 439: - goto st_case_439 - case 440: - goto st_case_440 - case 441: - goto st_case_441 - case 442: - goto st_case_442 - case 443: - goto st_case_443 - case 444: - goto st_case_444 - case 445: - goto st_case_445 - } - goto st_out -tr1: -// line 47 "parseqt.rl" - - curline++ -// line 71 "parseqt.rl" - -te = p+1 - - goto st447 -tr24: -// line 71 "parseqt.rl" - -p = (te) - 1 - - goto st447 -tr25: -// line 47 "parseqt.rl" - - curline++ -// line 62 "parseqt.rl" - -te = p+1 -{ - if data[m0:m1] == "QOpenGLFunctions" { - header.Class = data[m0:m1] - foundclass++ - } - {goto st450 } - } - goto st447 -tr60: -// line 47 "parseqt.rl" - - curline++ -// line 55 "parseqt.rl" - -te = p+1 -{ - header.Class = data[m0:m1] - foundclass++ - {goto st450 } - } - goto st447 -tr529: -// line 71 "parseqt.rl" - -te = p -p-- - - goto st447 - st447: -// line 1 "NONE" - -ts = 0 - - if p++; p == pe { - goto _test_eof447 - } - st_case_447: -// line 1 "NONE" - -ts = p - -// line 1047 "parseqt.go" - switch data[p] { - case 10: - goto tr1 - case 99: - goto st2 - } - goto st1 - st1: - if p++; p == pe { - goto _test_eof1 - } - st_case_1: - if data[p] == 10 { - goto tr1 - } - goto st1 - st2: - if p++; p == pe { - goto _test_eof2 - } - st_case_2: - switch data[p] { - case 10: - goto tr1 - case 108: - goto st3 - } - goto st1 - st3: - if p++; p == pe { - goto _test_eof3 - } - st_case_3: - switch data[p] { - case 10: - goto tr1 - case 97: - goto st4 - } - goto st1 - st4: - if p++; p == pe { - goto _test_eof4 - } - st_case_4: - switch data[p] { - case 10: - goto tr1 - case 115: - goto st5 - } - goto st1 - st5: - if p++; p == pe { - goto _test_eof5 - } - st_case_5: - switch data[p] { - case 10: - goto tr1 - case 115: - goto st6 - } - goto st1 - st6: - if p++; p == pe { - goto _test_eof6 - } - st_case_6: - switch data[p] { - case 10: - goto tr1 - case 32: - goto st7 - } - goto st1 - st7: - if p++; p == pe { - goto _test_eof7 - } - st_case_7: - switch data[p] { - case 10: - goto tr1 - case 81: - goto st8 - } - goto st1 - st8: - if p++; p == pe { - goto _test_eof8 - } - st_case_8: - switch data[p] { - case 10: - goto tr1 - case 95: - goto st9 - } - goto st1 - st9: - if p++; p == pe { - goto _test_eof9 - } - st_case_9: - switch data[p] { - case 10: - goto tr1 - case 71: - goto st10 - } - goto st1 - st10: - if p++; p == pe { - goto _test_eof10 - } - st_case_10: - switch data[p] { - case 10: - goto tr1 - case 85: - goto st11 - } - goto st1 - st11: - if p++; p == pe { - goto _test_eof11 - } - st_case_11: - switch data[p] { - case 10: - goto tr1 - case 73: - goto st12 - } - goto st1 - st12: - if p++; p == pe { - goto _test_eof12 - } - st_case_12: - switch data[p] { - case 10: - goto tr1 - case 95: - goto st13 - } - goto st1 - st13: - if p++; p == pe { - goto _test_eof13 - } - st_case_13: - switch data[p] { - case 10: - goto tr1 - case 69: - goto st14 - } - goto st1 - st14: - if p++; p == pe { - goto _test_eof14 - } - st_case_14: - switch data[p] { - case 10: - goto tr1 - case 88: - goto st15 - } - goto st1 - st15: - if p++; p == pe { - goto _test_eof15 - } - st_case_15: - switch data[p] { - case 10: - goto tr1 - case 80: - goto st16 - } - goto st1 - st16: - if p++; p == pe { - goto _test_eof16 - } - st_case_16: - switch data[p] { - case 10: - goto tr1 - case 79: - goto st17 - } - goto st1 - st17: - if p++; p == pe { - goto _test_eof17 - } - st_case_17: - switch data[p] { - case 10: - goto tr1 - case 82: - goto st18 - } - goto st1 - st18: - if p++; p == pe { - goto _test_eof18 - } - st_case_18: - switch data[p] { - case 10: - goto tr1 - case 84: - goto st19 - } - goto st1 - st19: - if p++; p == pe { - goto _test_eof19 - } - st_case_19: - switch data[p] { - case 10: - goto tr1 - case 32: - goto st20 - } - goto st1 - st20: - if p++; p == pe { - goto _test_eof20 - } - st_case_20: - switch data[p] { - case 10: - goto tr1 - case 95: - goto tr20 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto tr20 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto tr20 - } - default: - goto tr20 - } - goto st1 -tr20: -// line 54 "parseqt.rl" - - m0 = p -// line 61 "parseqt.rl" - - m0 = p - goto st21 - st21: - if p++; p == pe { - goto _test_eof21 - } - st_case_21: -// line 1317 "parseqt.go" - switch data[p] { - case 10: - goto tr21 - case 32: - goto tr22 - case 95: - goto st21 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st21 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st21 - } - default: - goto st21 - } - goto st1 -tr21: -// line 1 "NONE" - -te = p+1 - -// line 61 "parseqt.rl" - - m1 = p -// line 47 "parseqt.rl" - - curline++ - goto st448 - st448: - if p++; p == pe { - goto _test_eof448 - } - st_case_448: -// line 1356 "parseqt.go" - if data[p] == 123 { - goto st22 - } - goto tr529 - st22: - if p++; p == pe { - goto _test_eof22 - } - st_case_22: - if data[p] == 10 { - goto tr25 - } - goto tr24 -tr22: -// line 54 "parseqt.rl" - - m1 = p - goto st23 - st23: - if p++; p == pe { - goto _test_eof23 - } - st_case_23: -// line 1380 "parseqt.go" - switch data[p] { - case 10: - goto tr1 - case 58: - goto st24 - } - goto st1 - st24: - if p++; p == pe { - goto _test_eof24 - } - st_case_24: - switch data[p] { - case 10: - goto tr1 - case 32: - goto st25 - } - goto st1 - st25: - if p++; p == pe { - goto _test_eof25 - } - st_case_25: - switch data[p] { - case 10: - goto tr1 - case 112: - goto st26 - } - goto st1 - st26: - if p++; p == pe { - goto _test_eof26 - } - st_case_26: - switch data[p] { - case 10: - goto tr1 - case 117: - goto st27 - } - goto st1 - st27: - if p++; p == pe { - goto _test_eof27 - } - st_case_27: - switch data[p] { - case 10: - goto tr1 - case 98: - goto st28 - } - goto st1 - st28: - if p++; p == pe { - goto _test_eof28 - } - st_case_28: - switch data[p] { - case 10: - goto tr1 - case 108: - goto st29 - } - goto st1 - st29: - if p++; p == pe { - goto _test_eof29 - } - st_case_29: - switch data[p] { - case 10: - goto tr1 - case 105: - goto st30 - } - goto st1 - st30: - if p++; p == pe { - goto _test_eof30 - } - st_case_30: - switch data[p] { - case 10: - goto tr1 - case 99: - goto st31 - } - goto st1 - st31: - if p++; p == pe { - goto _test_eof31 - } - st_case_31: - switch data[p] { - case 10: - goto tr1 - case 32: - goto st32 - } - goto st1 - st32: - if p++; p == pe { - goto _test_eof32 - } - st_case_32: - switch data[p] { - case 10: - goto tr1 - case 81: - goto st33 - } - goto st1 - st33: - if p++; p == pe { - goto _test_eof33 - } - st_case_33: - switch data[p] { - case 10: - goto tr1 - case 65: - goto st34 - } - goto st1 - st34: - if p++; p == pe { - goto _test_eof34 - } - st_case_34: - switch data[p] { - case 10: - goto tr1 - case 98: - goto st35 - } - goto st1 - st35: - if p++; p == pe { - goto _test_eof35 - } - st_case_35: - switch data[p] { - case 10: - goto tr1 - case 115: - goto st36 - } - goto st1 - st36: - if p++; p == pe { - goto _test_eof36 - } - st_case_36: - switch data[p] { - case 10: - goto tr1 - case 116: - goto st37 - } - goto st1 - st37: - if p++; p == pe { - goto _test_eof37 - } - st_case_37: - switch data[p] { - case 10: - goto tr1 - case 114: - goto st38 - } - goto st1 - st38: - if p++; p == pe { - goto _test_eof38 - } - st_case_38: - switch data[p] { - case 10: - goto tr1 - case 97: - goto st39 - } - goto st1 - st39: - if p++; p == pe { - goto _test_eof39 - } - st_case_39: - switch data[p] { - case 10: - goto tr1 - case 99: - goto st40 - } - goto st1 - st40: - if p++; p == pe { - goto _test_eof40 - } - st_case_40: - switch data[p] { - case 10: - goto tr1 - case 116: - goto st41 - } - goto st1 - st41: - if p++; p == pe { - goto _test_eof41 - } - st_case_41: - switch data[p] { - case 10: - goto tr1 - case 79: - goto st42 - } - goto st1 - st42: - if p++; p == pe { - goto _test_eof42 - } - st_case_42: - switch data[p] { - case 10: - goto tr1 - case 112: - goto st43 - } - goto st1 - st43: - if p++; p == pe { - goto _test_eof43 - } - st_case_43: - switch data[p] { - case 10: - goto tr1 - case 101: - goto st44 - } - goto st1 - st44: - if p++; p == pe { - goto _test_eof44 - } - st_case_44: - switch data[p] { - case 10: - goto tr1 - case 110: - goto st45 - } - goto st1 - st45: - if p++; p == pe { - goto _test_eof45 - } - st_case_45: - switch data[p] { - case 10: - goto tr1 - case 71: - goto st46 - } - goto st1 - st46: - if p++; p == pe { - goto _test_eof46 - } - st_case_46: - switch data[p] { - case 10: - goto tr1 - case 76: - goto st47 - } - goto st1 - st47: - if p++; p == pe { - goto _test_eof47 - } - st_case_47: - switch data[p] { - case 10: - goto tr1 - case 70: - goto st48 - } - goto st1 - st48: - if p++; p == pe { - goto _test_eof48 - } - st_case_48: - switch data[p] { - case 10: - goto tr1 - case 117: - goto st49 - } - goto st1 - st49: - if p++; p == pe { - goto _test_eof49 - } - st_case_49: - switch data[p] { - case 10: - goto tr1 - case 110: - goto st50 - } - goto st1 - st50: - if p++; p == pe { - goto _test_eof50 - } - st_case_50: - switch data[p] { - case 10: - goto tr1 - case 99: - goto st51 - } - goto st1 - st51: - if p++; p == pe { - goto _test_eof51 - } - st_case_51: - switch data[p] { - case 10: - goto tr1 - case 116: - goto st52 - } - goto st1 - st52: - if p++; p == pe { - goto _test_eof52 - } - st_case_52: - switch data[p] { - case 10: - goto tr1 - case 105: - goto st53 - } - goto st1 - st53: - if p++; p == pe { - goto _test_eof53 - } - st_case_53: - switch data[p] { - case 10: - goto tr1 - case 111: - goto st54 - } - goto st1 - st54: - if p++; p == pe { - goto _test_eof54 - } - st_case_54: - switch data[p] { - case 10: - goto tr1 - case 110: - goto st55 - } - goto st1 - st55: - if p++; p == pe { - goto _test_eof55 - } - st_case_55: - switch data[p] { - case 10: - goto tr1 - case 115: - goto st56 - } - goto st1 - st56: - if p++; p == pe { - goto _test_eof56 - } - st_case_56: - if data[p] == 10 { - goto tr59 - } - goto st1 -tr59: -// line 1 "NONE" - -te = p+1 - -// line 47 "parseqt.rl" - - curline++ - goto st449 - st449: - if p++; p == pe { - goto _test_eof449 - } - st_case_449: -// line 1795 "parseqt.go" - if data[p] == 123 { - goto st57 - } - goto tr529 - st57: - if p++; p == pe { - goto _test_eof57 - } - st_case_57: - if data[p] == 10 { - goto tr60 - } - goto tr24 - st446: -// line 1 "NONE" - -ts = 0 - - if p++; p == pe { - goto _test_eof446 - } - st_case_446: -// line 1818 "parseqt.go" - switch data[p] { - case 10: - goto tr526 - case 59: - goto tr527 - } - goto st446 -tr526: -// line 47 "parseqt.rl" - - curline++ -// line 157 "parseqt.rl" - - {goto st447 } - goto st453 - st453: - if p++; p == pe { - goto _test_eof453 - } - st_case_453: -// line 1839 "parseqt.go" - goto st0 -st_case_0: - st0: - cs = 0 - goto _out -tr527: -// line 157 "parseqt.rl" - - {goto st447 } - goto st454 - st454: - if p++; p == pe { - goto _test_eof454 - } - st_case_454: -// line 1855 "parseqt.go" - switch data[p] { - case 10: - goto tr526 - case 59: - goto tr527 - } - goto st446 -tr63: -// line 47 "parseqt.rl" - - curline++ -// line 147 "parseqt.rl" - -te = p+1 -{ - // Reset heading comment. - heading = "" - - // Start new line block. - lineblock++ - } - goto st450 -tr79: -// line 76 "parseqt.rl" - - m0 = p -// line 47 "parseqt.rl" - - curline++ -// line 77 "parseqt.rl" - -te = p+1 -{ - heading = data[m0:m1] - _ = heading - lineblock++ - } - goto st450 -tr81: -// line 47 "parseqt.rl" - - curline++ -// line 77 "parseqt.rl" - -te = p+1 -{ - heading = data[m0:m1] - _ = heading - lineblock++ - } - goto st450 -tr96: -// line 47 "parseqt.rl" - - curline++ -// line 128 "parseqt.rl" - -te = p+1 - - goto st450 -tr102: -// line 1 "NONE" - - switch act { - case 0: - {{goto st0 }} - case 10: - {p = (te) - 1 - - if (inpublic) { - header.Func = append(header.Func, f) - } - } - } - - goto st450 -tr130: -// line 114 "parseqt.rl" - -te = p+1 -{ - if (inpublic) { - header.Func = append(header.Func, f) - } - } - goto st450 -tr250: -// line 47 "parseqt.rl" - - curline++ -// line 84 "parseqt.rl" - -te = p+1 -{ - if data[m0:m1] != header.Class { - {p++; cs = 450; goto _out } - } - } - goto st450 -tr279: -// line 47 "parseqt.rl" - - curline++ -// line 131 "parseqt.rl" - -te = p+1 - - goto st450 -tr315: -// line 47 "parseqt.rl" - - curline++ -// line 91 "parseqt.rl" - -te = p+1 - - goto st450 -tr398: -// line 47 "parseqt.rl" - - curline++ -// line 124 "parseqt.rl" - -te = p+1 - - goto st450 -tr416: -// line 47 "parseqt.rl" - - curline++ -// line 94 "parseqt.rl" - -te = p+1 - - goto st450 -tr433: -// line 47 "parseqt.rl" - - curline++ -// line 102 "parseqt.rl" - -te = p+1 -{ - inpublic = false - } - goto st450 -tr445: -// line 47 "parseqt.rl" - - curline++ -// line 98 "parseqt.rl" - -te = p+1 -{ - inpublic = true - } - goto st450 -tr481: -// line 47 "parseqt.rl" - - curline++ -// line 140 "parseqt.rl" - -te = p+1 -{ - foundclass++; - {goto st447 } - } - goto st450 -tr519: -// line 47 "parseqt.rl" - - curline++ -// line 136 "parseqt.rl" - -te = p+1 - - goto st450 -tr533: -// line 114 "parseqt.rl" - -te = p -p-- -{ - if (inpublic) { - header.Func = append(header.Func, f) - } - } - goto st450 - st450: -// line 1 "NONE" - -ts = 0 - -// line 1 "NONE" - -act = 0 - - if p++; p == pe { - goto _test_eof450 - } - st_case_450: -// line 1 "NONE" - -ts = p - -// line 2062 "parseqt.go" - switch data[p] { - case 9: - goto st58 - case 10: - goto tr63 - case 32: - goto st58 - case 35: - goto st405 - case 47: - goto st59 - case 58: - goto st188 - case 81: - goto tr67 - case 95: - goto tr65 - case 98: - goto tr68 - case 99: - goto tr69 - case 101: - goto tr70 - case 102: - goto tr71 - case 112: - goto tr72 - case 115: - goto tr73 - case 125: - goto st401 - case 126: - goto st403 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto tr65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto tr65 - } - default: - goto tr65 - } - goto st0 - st58: - if p++; p == pe { - goto _test_eof58 - } - st_case_58: - switch data[p] { - case 9: - goto st58 - case 10: - goto tr63 - case 32: - goto st58 - case 47: - goto st59 - case 58: - goto st188 - case 81: - goto tr67 - case 95: - goto tr65 - case 98: - goto tr68 - case 99: - goto tr69 - case 101: - goto tr70 - case 102: - goto tr71 - case 112: - goto tr72 - case 115: - goto tr73 - case 125: - goto st401 - case 126: - goto st403 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto tr65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto tr65 - } - default: - goto tr65 - } - goto st0 - st59: - if p++; p == pe { - goto _test_eof59 - } - st_case_59: - if data[p] == 47 { - goto st60 - } - goto st0 -tr78: -// line 76 "parseqt.rl" - - m0 = p -// line 76 "parseqt.rl" - - m1 = p - goto st60 - st60: - if p++; p == pe { - goto _test_eof60 - } - st_case_60: -// line 2182 "parseqt.go" - switch data[p] { - case 9: - goto tr78 - case 10: - goto tr79 - case 32: - goto tr78 - } - goto tr77 -tr77: -// line 76 "parseqt.rl" - - m0 = p -// line 76 "parseqt.rl" - - m1 = p - goto st61 -tr80: -// line 76 "parseqt.rl" - - m1 = p - goto st61 - st61: - if p++; p == pe { - goto _test_eof61 - } - st_case_61: -// line 2210 "parseqt.go" - if data[p] == 10 { - goto tr81 - } - goto tr80 -tr65: -// line 84 "parseqt.rl" - - m0 = p -// line 107 "parseqt.rl" - - m0 = p - goto st62 - st62: - if p++; p == pe { - goto _test_eof62 - } - st_case_62: -// line 2228 "parseqt.go" - switch data[p] { - case 9: - goto tr82 - case 32: - goto tr82 - case 40: - goto tr83 - case 42: - goto tr84 - case 58: - goto st188 - case 95: - goto st62 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st62 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st62 - } - default: - goto st62 - } - goto st0 -tr82: -// line 107 "parseqt.rl" - - m1 = p; m4 = 0 - goto st63 - st63: - if p++; p == pe { - goto _test_eof63 - } - st_case_63: -// line 2266 "parseqt.go" - switch data[p] { - case 9: - goto st63 - case 32: - goto st63 - case 42: - goto tr87 - case 95: - goto st65 - case 99: - goto st134 - case 103: - goto tr90 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 -tr84: -// line 107 "parseqt.rl" - - m1 = p; m4 = 0 -// line 107 "parseqt.rl" - - m4++ -// line 127 "parseqt.rl" - - m4++ - goto st64 -tr87: -// line 107 "parseqt.rl" - - m4++ -// line 127 "parseqt.rl" - - m4++ - goto st64 - st64: - if p++; p == pe { - goto _test_eof64 - } - st_case_64: -// line 2318 "parseqt.go" - switch data[p] { - case 9: - goto st63 - case 32: - goto st63 - case 42: - goto tr87 - case 95: - goto st65 - case 103: - goto tr90 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 - st65: - if p++; p == pe { - goto _test_eof65 - } - st_case_65: - switch data[p] { - case 9: - goto st66 - case 32: - goto st66 - case 40: - goto st75 - case 59: - goto st67 - case 95: - goto st65 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 - st66: - if p++; p == pe { - goto _test_eof66 - } - st_case_66: - switch data[p] { - case 9: - goto st66 - case 32: - goto st66 - case 59: - goto st67 - case 99: - goto st68 - case 123: - goto st73 - } - goto st0 - st67: - if p++; p == pe { - goto _test_eof67 - } - st_case_67: - switch data[p] { - case 9: - goto st67 - case 10: - goto tr96 - case 32: - goto st67 - } - goto st0 - st68: - if p++; p == pe { - goto _test_eof68 - } - st_case_68: - if data[p] == 111 { - goto st69 - } - goto st0 - st69: - if p++; p == pe { - goto _test_eof69 - } - st_case_69: - if data[p] == 110 { - goto st70 - } - goto st0 - st70: - if p++; p == pe { - goto _test_eof70 - } - st_case_70: - if data[p] == 115 { - goto st71 - } - goto st0 - st71: - if p++; p == pe { - goto _test_eof71 - } - st_case_71: - if data[p] == 116 { - goto st72 - } - goto st0 - st72: - if p++; p == pe { - goto _test_eof72 - } - st_case_72: - switch data[p] { - case 9: - goto st72 - case 32: - goto st72 - case 59: - goto st67 - case 123: - goto st73 - } - goto st0 - st73: - if p++; p == pe { - goto _test_eof73 - } - st_case_73: - switch data[p] { - case 10: - goto st0 - case 125: - goto st74 - } - goto st73 - st74: - if p++; p == pe { - goto _test_eof74 - } - st_case_74: - switch data[p] { - case 9: - goto st74 - case 10: - goto tr96 - case 32: - goto st74 - case 125: - goto st74 - } - goto st73 - st75: - if p++; p == pe { - goto _test_eof75 - } - st_case_75: - switch data[p] { - case 10: - goto tr102 - case 41: - goto st76 - } - goto st75 - st76: - if p++; p == pe { - goto _test_eof76 - } - st_case_76: - switch data[p] { - case 9: - goto st76 - case 10: - goto tr102 - case 32: - goto st76 - case 41: - goto st76 - case 59: - goto st77 - case 99: - goto st78 - case 123: - goto st83 - } - goto st75 - st77: - if p++; p == pe { - goto _test_eof77 - } - st_case_77: - switch data[p] { - case 9: - goto st77 - case 10: - goto tr96 - case 32: - goto st77 - case 41: - goto st76 - } - goto st75 - st78: - if p++; p == pe { - goto _test_eof78 - } - st_case_78: - switch data[p] { - case 10: - goto tr102 - case 41: - goto st76 - case 111: - goto st79 - } - goto st75 - st79: - if p++; p == pe { - goto _test_eof79 - } - st_case_79: - switch data[p] { - case 10: - goto tr102 - case 41: - goto st76 - case 110: - goto st80 - } - goto st75 - st80: - if p++; p == pe { - goto _test_eof80 - } - st_case_80: - switch data[p] { - case 10: - goto tr102 - case 41: - goto st76 - case 115: - goto st81 - } - goto st75 - st81: - if p++; p == pe { - goto _test_eof81 - } - st_case_81: - switch data[p] { - case 10: - goto tr102 - case 41: - goto st76 - case 116: - goto st82 - } - goto st75 - st82: - if p++; p == pe { - goto _test_eof82 - } - st_case_82: - switch data[p] { - case 9: - goto st82 - case 10: - goto tr102 - case 32: - goto st82 - case 41: - goto st76 - case 59: - goto st77 - case 123: - goto st83 - } - goto st75 - st83: - if p++; p == pe { - goto _test_eof83 - } - st_case_83: - switch data[p] { - case 10: - goto tr102 - case 41: - goto st84 - case 125: - goto st85 - } - goto st83 - st84: - if p++; p == pe { - goto _test_eof84 - } - st_case_84: - switch data[p] { - case 9: - goto st84 - case 10: - goto tr102 - case 32: - goto st84 - case 41: - goto st84 - case 59: - goto st85 - case 99: - goto st86 - case 125: - goto st85 - } - goto st83 - st85: - if p++; p == pe { - goto _test_eof85 - } - st_case_85: - switch data[p] { - case 9: - goto st85 - case 10: - goto tr96 - case 32: - goto st85 - case 41: - goto st84 - case 125: - goto st85 - } - goto st83 - st86: - if p++; p == pe { - goto _test_eof86 - } - st_case_86: - switch data[p] { - case 10: - goto tr102 - case 41: - goto st84 - case 111: - goto st87 - case 125: - goto st85 - } - goto st83 - st87: - if p++; p == pe { - goto _test_eof87 - } - st_case_87: - switch data[p] { - case 10: - goto tr102 - case 41: - goto st84 - case 110: - goto st88 - case 125: - goto st85 - } - goto st83 - st88: - if p++; p == pe { - goto _test_eof88 - } - st_case_88: - switch data[p] { - case 10: - goto tr102 - case 41: - goto st84 - case 115: - goto st89 - case 125: - goto st85 - } - goto st83 - st89: - if p++; p == pe { - goto _test_eof89 - } - st_case_89: - switch data[p] { - case 10: - goto tr102 - case 41: - goto st84 - case 116: - goto st90 - case 125: - goto st85 - } - goto st83 - st90: - if p++; p == pe { - goto _test_eof90 - } - st_case_90: - switch data[p] { - case 9: - goto st90 - case 10: - goto tr102 - case 32: - goto st90 - case 41: - goto st84 - case 59: - goto st85 - case 125: - goto st85 - } - goto st83 -tr90: -// line 109 "parseqt.rl" - - m2 = p - goto st91 - st91: - if p++; p == pe { - goto _test_eof91 - } - st_case_91: -// line 2762 "parseqt.go" - switch data[p] { - case 9: - goto st66 - case 32: - goto st66 - case 40: - goto st75 - case 59: - goto st67 - case 95: - goto st65 - case 108: - goto st92 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 - st92: - if p++; p == pe { - goto _test_eof92 - } - st_case_92: - switch data[p] { - case 9: - goto st66 - case 32: - goto st66 - case 40: - goto st75 - case 59: - goto st67 - case 95: - goto st93 - case 99: - goto st128 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st93 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st93 - } - default: - goto st93 - } - goto st0 - st93: - if p++; p == pe { - goto _test_eof93 - } - st_case_93: - switch data[p] { - case 9: - goto tr121 - case 32: - goto tr121 - case 40: - goto tr122 - case 95: - goto st93 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st93 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st93 - } - default: - goto st93 - } - goto st0 -tr121: -// line 109 "parseqt.rl" - - m3 = p; f = Func{Name: data[m2:m3], Type: data[m0:m1], Addr: m4} - goto st94 - st94: - if p++; p == pe { - goto _test_eof94 - } - st_case_94: -// line 2864 "parseqt.go" - switch data[p] { - case 9: - goto st94 - case 32: - goto st94 - case 40: - goto tr124 - } - goto st0 -tr122: -// line 109 "parseqt.rl" - - m3 = p; f = Func{Name: data[m2:m3], Type: data[m0:m1], Addr: m4} -// line 109 "parseqt.rl" - - m6 = 0 - goto st95 -tr124: -// line 109 "parseqt.rl" - - m6 = 0 - goto st95 - st95: - if p++; p == pe { - goto _test_eof95 - } - st_case_95: -// line 2892 "parseqt.go" - switch data[p] { - case 9: - goto st95 - case 32: - goto st95 - case 41: - goto st96 - case 95: - goto tr127 - case 99: - goto tr128 - case 118: - goto tr129 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto tr127 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto tr127 - } - default: - goto tr127 - } - goto st0 - st96: - if p++; p == pe { - goto _test_eof96 - } - st_case_96: - switch data[p] { - case 9: - goto st96 - case 32: - goto st96 - case 59: - goto tr130 - } - goto st0 -tr127: -// line 111 "parseqt.rl" - - m0 = p - goto st97 - st97: - if p++; p == pe { - goto _test_eof97 - } - st_case_97: -// line 2944 "parseqt.go" - switch data[p] { - case 9: - goto tr131 - case 32: - goto tr131 - case 42: - goto tr132 - case 95: - goto st97 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st97 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st97 - } - default: - goto st97 - } - goto st0 -tr131: -// line 111 "parseqt.rl" - - m1 = p; m4 = 0 - goto st98 - st98: - if p++; p == pe { - goto _test_eof98 - } - st_case_98: -// line 2978 "parseqt.go" - switch data[p] { - case 9: - goto st98 - case 32: - goto st98 - case 42: - goto tr135 - case 95: - goto tr136 - case 99: - goto tr137 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto tr136 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto tr136 - } - default: - goto tr136 - } - goto st0 -tr132: -// line 111 "parseqt.rl" - - m1 = p; m4 = 0 -// line 111 "parseqt.rl" - - m4++ - goto st99 -tr135: -// line 111 "parseqt.rl" - - m4++ - goto st99 - st99: - if p++; p == pe { - goto _test_eof99 - } - st_case_99: -// line 3022 "parseqt.go" - switch data[p] { - case 9: - goto st98 - case 32: - goto st98 - case 42: - goto tr135 - case 95: - goto tr136 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto tr136 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto tr136 - } - default: - goto tr136 - } - goto st0 -tr136: -// line 111 "parseqt.rl" - - m2 = p; m5 = 0 - goto st100 - st100: - if p++; p == pe { - goto _test_eof100 - } - st_case_100: -// line 3056 "parseqt.go" - switch data[p] { - case 9: - goto tr138 - case 32: - goto tr138 - case 41: - goto tr139 - case 44: - goto tr139 - case 91: - goto tr141 - case 95: - goto st100 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st100 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st100 - } - default: - goto st100 - } - goto st0 -tr138: -// line 111 "parseqt.rl" - - m3 = p - goto st101 - st101: - if p++; p == pe { - goto _test_eof101 - } - st_case_101: -// line 3094 "parseqt.go" - switch data[p] { - case 9: - goto st101 - case 32: - goto st101 - case 41: - goto tr143 - case 44: - goto tr143 - } - goto st0 -tr139: -// line 111 "parseqt.rl" - - m3 = p -// line 112 "parseqt.rl" - - f.Param = append(f.Param, Param{Name: data[m2:m3], Type: data[m0:m1], Addr: m4, Array: m5, Const: m6 > 0}); m6 = 0 - goto st102 -tr143: -// line 112 "parseqt.rl" - - f.Param = append(f.Param, Param{Name: data[m2:m3], Type: data[m0:m1], Addr: m4, Array: m5, Const: m6 > 0}); m6 = 0 - goto st102 - st102: - if p++; p == pe { - goto _test_eof102 - } - st_case_102: -// line 3124 "parseqt.go" - switch data[p] { - case 9: - goto st102 - case 32: - goto st102 - case 59: - goto tr130 - case 95: - goto tr127 - case 99: - goto tr128 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto tr127 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto tr127 - } - default: - goto tr127 - } - goto st0 -tr128: -// line 111 "parseqt.rl" - - m0 = p - goto st103 - st103: - if p++; p == pe { - goto _test_eof103 - } - st_case_103: -// line 3160 "parseqt.go" - switch data[p] { - case 9: - goto tr131 - case 32: - goto tr131 - case 42: - goto tr132 - case 95: - goto st97 - case 111: - goto st104 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st97 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st97 - } - default: - goto st97 - } - goto st0 - st104: - if p++; p == pe { - goto _test_eof104 - } - st_case_104: - switch data[p] { - case 9: - goto tr131 - case 32: - goto tr131 - case 42: - goto tr132 - case 95: - goto st97 - case 110: - goto st105 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st97 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st97 - } - default: - goto st97 - } - goto st0 - st105: - if p++; p == pe { - goto _test_eof105 - } - st_case_105: - switch data[p] { - case 9: - goto tr131 - case 32: - goto tr131 - case 42: - goto tr132 - case 95: - goto st97 - case 115: - goto st106 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st97 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st97 - } - default: - goto st97 - } - goto st0 - st106: - if p++; p == pe { - goto _test_eof106 - } - st_case_106: - switch data[p] { - case 9: - goto tr131 - case 32: - goto tr131 - case 42: - goto tr132 - case 95: - goto st97 - case 116: - goto st107 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st97 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st97 - } - default: - goto st97 - } - goto st0 - st107: - if p++; p == pe { - goto _test_eof107 - } - st_case_107: - switch data[p] { - case 9: - goto tr149 - case 32: - goto tr149 - case 42: - goto tr132 - case 95: - goto st97 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st97 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st97 - } - default: - goto st97 - } - goto st0 -tr149: -// line 111 "parseqt.rl" - - m6 = 1 -// line 111 "parseqt.rl" - - m1 = p; m4 = 0 - goto st108 - st108: - if p++; p == pe { - goto _test_eof108 - } - st_case_108: -// line 3317 "parseqt.go" - switch data[p] { - case 9: - goto st108 - case 32: - goto st108 - case 42: - goto tr135 - case 95: - goto tr151 - case 99: - goto tr152 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto tr151 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto tr151 - } - default: - goto tr151 - } - goto st0 -tr166: -// line 111 "parseqt.rl" - - m2 = p; m5 = 0 - goto st109 -tr151: -// line 111 "parseqt.rl" - - m0 = p -// line 111 "parseqt.rl" - - m2 = p; m5 = 0 - goto st109 - st109: - if p++; p == pe { - goto _test_eof109 - } - st_case_109: -// line 3361 "parseqt.go" - switch data[p] { - case 9: - goto tr153 - case 32: - goto tr153 - case 41: - goto tr139 - case 42: - goto tr132 - case 44: - goto tr139 - case 91: - goto tr141 - case 95: - goto st109 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st109 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st109 - } - default: - goto st109 - } - goto st0 -tr161: -// line 111 "parseqt.rl" - - m3 = p - goto st110 -tr153: -// line 111 "parseqt.rl" - - m1 = p; m4 = 0 -// line 111 "parseqt.rl" - - m3 = p - goto st110 - st110: - if p++; p == pe { - goto _test_eof110 - } - st_case_110: -// line 3409 "parseqt.go" - switch data[p] { - case 9: - goto st110 - case 32: - goto st110 - case 41: - goto tr143 - case 42: - goto tr135 - case 44: - goto tr143 - case 95: - goto tr136 - case 99: - goto tr137 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto tr136 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto tr136 - } - default: - goto tr136 - } - goto st0 -tr137: -// line 111 "parseqt.rl" - - m2 = p; m5 = 0 - goto st111 - st111: - if p++; p == pe { - goto _test_eof111 - } - st_case_111: -// line 3449 "parseqt.go" - switch data[p] { - case 9: - goto tr138 - case 32: - goto tr138 - case 41: - goto tr139 - case 44: - goto tr139 - case 91: - goto tr141 - case 95: - goto st100 - case 111: - goto st114 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st100 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st100 - } - default: - goto st100 - } - goto st0 -tr141: -// line 111 "parseqt.rl" - - m3 = p - goto st112 - st112: - if p++; p == pe { - goto _test_eof112 - } - st_case_112: -// line 3489 "parseqt.go" - if 48 <= data[p] && data[p] <= 57 { - goto tr157 - } - goto st0 -tr157: -// line 111 "parseqt.rl" - - m5 = m5*10 + (int(data[p]) - '0') - goto st113 - st113: - if p++; p == pe { - goto _test_eof113 - } - st_case_113: -// line 3504 "parseqt.go" - if data[p] == 93 { - goto st101 - } - if 48 <= data[p] && data[p] <= 57 { - goto tr157 - } - goto st0 - st114: - if p++; p == pe { - goto _test_eof114 - } - st_case_114: - switch data[p] { - case 9: - goto tr138 - case 32: - goto tr138 - case 41: - goto tr139 - case 44: - goto tr139 - case 91: - goto tr141 - case 95: - goto st100 - case 110: - goto st115 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st100 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st100 - } - default: - goto st100 - } - goto st0 - st115: - if p++; p == pe { - goto _test_eof115 - } - st_case_115: - switch data[p] { - case 9: - goto tr138 - case 32: - goto tr138 - case 41: - goto tr139 - case 44: - goto tr139 - case 91: - goto tr141 - case 95: - goto st100 - case 115: - goto st116 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st100 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st100 - } - default: - goto st100 - } - goto st0 - st116: - if p++; p == pe { - goto _test_eof116 - } - st_case_116: - switch data[p] { - case 9: - goto tr138 - case 32: - goto tr138 - case 41: - goto tr139 - case 44: - goto tr139 - case 91: - goto tr141 - case 95: - goto st100 - case 116: - goto st117 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st100 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st100 - } - default: - goto st100 - } - goto st0 - st117: - if p++; p == pe { - goto _test_eof117 - } - st_case_117: - switch data[p] { - case 9: - goto tr161 - case 32: - goto tr161 - case 41: - goto tr139 - case 42: - goto tr135 - case 44: - goto tr139 - case 91: - goto tr141 - case 95: - goto tr136 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto tr136 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto tr136 - } - default: - goto tr136 - } - goto st0 -tr152: -// line 111 "parseqt.rl" - - m0 = p -// line 111 "parseqt.rl" - - m2 = p; m5 = 0 - goto st118 - st118: - if p++; p == pe { - goto _test_eof118 - } - st_case_118: -// line 3661 "parseqt.go" - switch data[p] { - case 9: - goto tr153 - case 32: - goto tr153 - case 41: - goto tr139 - case 42: - goto tr132 - case 44: - goto tr139 - case 91: - goto tr141 - case 95: - goto st109 - case 111: - goto st119 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st109 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st109 - } - default: - goto st109 - } - goto st0 - st119: - if p++; p == pe { - goto _test_eof119 - } - st_case_119: - switch data[p] { - case 9: - goto tr153 - case 32: - goto tr153 - case 41: - goto tr139 - case 42: - goto tr132 - case 44: - goto tr139 - case 91: - goto tr141 - case 95: - goto st109 - case 110: - goto st120 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st109 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st109 - } - default: - goto st109 - } - goto st0 - st120: - if p++; p == pe { - goto _test_eof120 - } - st_case_120: - switch data[p] { - case 9: - goto tr153 - case 32: - goto tr153 - case 41: - goto tr139 - case 42: - goto tr132 - case 44: - goto tr139 - case 91: - goto tr141 - case 95: - goto st109 - case 115: - goto st121 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st109 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st109 - } - default: - goto st109 - } - goto st0 - st121: - if p++; p == pe { - goto _test_eof121 - } - st_case_121: - switch data[p] { - case 9: - goto tr153 - case 32: - goto tr153 - case 41: - goto tr139 - case 42: - goto tr132 - case 44: - goto tr139 - case 91: - goto tr141 - case 95: - goto st109 - case 116: - goto st122 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st109 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st109 - } - default: - goto st109 - } - goto st0 - st122: - if p++; p == pe { - goto _test_eof122 - } - st_case_122: - switch data[p] { - case 9: - goto tr153 - case 32: - goto tr153 - case 41: - goto tr139 - case 42: - goto tr132 - case 44: - goto tr139 - case 91: - goto tr141 - case 95: - goto tr166 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto tr166 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto tr166 - } - default: - goto tr166 - } - goto st0 -tr129: -// line 111 "parseqt.rl" - - m0 = p - goto st123 - st123: - if p++; p == pe { - goto _test_eof123 - } - st_case_123: -// line 3845 "parseqt.go" - switch data[p] { - case 9: - goto tr131 - case 32: - goto tr131 - case 42: - goto tr132 - case 95: - goto st97 - case 111: - goto st124 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st97 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st97 - } - default: - goto st97 - } - goto st0 - st124: - if p++; p == pe { - goto _test_eof124 - } - st_case_124: - switch data[p] { - case 9: - goto tr131 - case 32: - goto tr131 - case 42: - goto tr132 - case 95: - goto st97 - case 105: - goto st125 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st97 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st97 - } - default: - goto st97 - } - goto st0 - st125: - if p++; p == pe { - goto _test_eof125 - } - st_case_125: - switch data[p] { - case 9: - goto tr131 - case 32: - goto tr131 - case 42: - goto tr132 - case 95: - goto st97 - case 100: - goto st126 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st97 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st97 - } - default: - goto st97 - } - goto st0 - st126: - if p++; p == pe { - goto _test_eof126 - } - st_case_126: - switch data[p] { - case 9: - goto tr170 - case 32: - goto tr170 - case 41: - goto st96 - case 42: - goto tr132 - case 95: - goto st97 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st97 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st97 - } - default: - goto st97 - } - goto st0 -tr170: -// line 111 "parseqt.rl" - - m1 = p; m4 = 0 - goto st127 - st127: - if p++; p == pe { - goto _test_eof127 - } - st_case_127: -// line 3971 "parseqt.go" - switch data[p] { - case 9: - goto st127 - case 32: - goto st127 - case 41: - goto st96 - case 42: - goto tr135 - case 95: - goto tr136 - case 99: - goto tr137 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto tr136 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto tr136 - } - default: - goto tr136 - } - goto st0 - st128: - if p++; p == pe { - goto _test_eof128 - } - st_case_128: - switch data[p] { - case 9: - goto tr121 - case 32: - goto tr121 - case 40: - goto tr122 - case 95: - goto st93 - case 111: - goto st129 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st93 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st93 - } - default: - goto st93 - } - goto st0 - st129: - if p++; p == pe { - goto _test_eof129 - } - st_case_129: - switch data[p] { - case 9: - goto tr121 - case 32: - goto tr121 - case 40: - goto tr122 - case 95: - goto st93 - case 110: - goto st130 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st93 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st93 - } - default: - goto st93 - } - goto st0 - st130: - if p++; p == pe { - goto _test_eof130 - } - st_case_130: - switch data[p] { - case 9: - goto tr121 - case 32: - goto tr121 - case 40: - goto tr122 - case 95: - goto st93 - case 115: - goto st131 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st93 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st93 - } - default: - goto st93 - } - goto st0 - st131: - if p++; p == pe { - goto _test_eof131 - } - st_case_131: - switch data[p] { - case 9: - goto tr121 - case 32: - goto tr121 - case 40: - goto tr122 - case 95: - goto st93 - case 116: - goto st132 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st93 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st93 - } - default: - goto st93 - } - goto st0 - st132: - if p++; p == pe { - goto _test_eof132 - } - st_case_132: - switch data[p] { - case 9: - goto tr176 - case 32: - goto tr176 - case 40: - goto tr122 - case 59: - goto st67 - case 95: - goto st93 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st93 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st93 - } - default: - goto st93 - } - goto st0 -tr176: -// line 109 "parseqt.rl" - - m3 = p; f = Func{Name: data[m2:m3], Type: data[m0:m1], Addr: m4} - goto st133 - st133: - if p++; p == pe { - goto _test_eof133 - } - st_case_133: -// line 4161 "parseqt.go" - switch data[p] { - case 9: - goto st133 - case 32: - goto st133 - case 40: - goto tr124 - case 59: - goto st67 - case 123: - goto st73 - } - goto st0 - st134: - if p++; p == pe { - goto _test_eof134 - } - st_case_134: - switch data[p] { - case 9: - goto st66 - case 32: - goto st66 - case 40: - goto st75 - case 59: - goto st67 - case 95: - goto st65 - case 111: - goto st135 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 - st135: - if p++; p == pe { - goto _test_eof135 - } - st_case_135: - switch data[p] { - case 9: - goto st66 - case 32: - goto st66 - case 40: - goto st75 - case 59: - goto st67 - case 95: - goto st65 - case 110: - goto st136 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 - st136: - if p++; p == pe { - goto _test_eof136 - } - st_case_136: - switch data[p] { - case 9: - goto st66 - case 32: - goto st66 - case 40: - goto st75 - case 59: - goto st67 - case 95: - goto st65 - case 115: - goto st137 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 - st137: - if p++; p == pe { - goto _test_eof137 - } - st_case_137: - switch data[p] { - case 9: - goto st66 - case 32: - goto st66 - case 40: - goto st75 - case 59: - goto st67 - case 95: - goto st65 - case 116: - goto st138 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 - st138: - if p++; p == pe { - goto _test_eof138 - } - st_case_138: - switch data[p] { - case 9: - goto st139 - case 32: - goto st139 - case 40: - goto st75 - case 42: - goto tr87 - case 59: - goto st67 - case 95: - goto st65 - case 103: - goto tr183 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 -tr339: -// line 107 "parseqt.rl" - - m1 = p; m4 = 0 - goto st139 - st139: - if p++; p == pe { - goto _test_eof139 - } - st_case_139: -// line 4357 "parseqt.go" - switch data[p] { - case 9: - goto st139 - case 32: - goto st139 - case 42: - goto tr87 - case 59: - goto st67 - case 95: - goto st65 - case 99: - goto st134 - case 103: - goto tr90 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 -tr183: -// line 109 "parseqt.rl" - - m2 = p - goto st140 - st140: - if p++; p == pe { - goto _test_eof140 - } - st_case_140: -// line 4399 "parseqt.go" - switch data[p] { - case 9: - goto st66 - case 32: - goto st66 - case 40: - goto st75 - case 59: - goto st67 - case 95: - goto st65 - case 108: - goto st141 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 - st141: - if p++; p == pe { - goto _test_eof141 - } - st_case_141: - switch data[p] { - case 9: - goto st66 - case 32: - goto st66 - case 40: - goto st75 - case 59: - goto st67 - case 95: - goto st142 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st142 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st142 - } - default: - goto st142 - } - goto st0 - st142: - if p++; p == pe { - goto _test_eof142 - } - st_case_142: - switch data[p] { - case 9: - goto tr186 - case 32: - goto tr186 - case 40: - goto tr187 - case 59: - goto st67 - case 95: - goto st142 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st142 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st142 - } - default: - goto st142 - } - goto st0 -tr186: -// line 109 "parseqt.rl" - - m3 = p; f = Func{Name: data[m2:m3], Type: data[m0:m1], Addr: m4} - goto st143 - st143: - if p++; p == pe { - goto _test_eof143 - } - st_case_143: -// line 4503 "parseqt.go" - switch data[p] { - case 9: - goto st143 - case 32: - goto st143 - case 40: - goto tr124 - case 59: - goto st67 - case 99: - goto st68 - case 123: - goto st73 - } - goto st0 -tr187: -// line 109 "parseqt.rl" - - m3 = p; f = Func{Name: data[m2:m3], Type: data[m0:m1], Addr: m4} -// line 109 "parseqt.rl" - - m6 = 0 - goto st144 - st144: - if p++; p == pe { - goto _test_eof144 - } - st_case_144: -// line 4532 "parseqt.go" - switch data[p] { - case 9: - goto st144 - case 10: - goto st0 - case 32: - goto st144 - case 41: - goto st145 - case 95: - goto tr191 - case 99: - goto tr192 - case 118: - goto tr193 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto tr191 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto tr191 - } - default: - goto tr191 - } - goto st75 - st145: - if p++; p == pe { - goto _test_eof145 - } - st_case_145: - switch data[p] { - case 9: - goto st145 - case 10: - goto st0 - case 32: - goto st145 - case 41: - goto st76 - case 59: - goto tr194 - case 99: - goto st78 - case 123: - goto st83 - } - goto st75 -tr194: -// line 1 "NONE" - -te = p+1 - -// line 114 "parseqt.rl" - -act = 10; - goto st451 - st451: - if p++; p == pe { - goto _test_eof451 - } - st_case_451: -// line 4598 "parseqt.go" - switch data[p] { - case 9: - goto st77 - case 10: - goto tr96 - case 32: - goto st77 - case 41: - goto st76 - } - goto st75 -tr191: -// line 111 "parseqt.rl" - - m0 = p - goto st146 - st146: - if p++; p == pe { - goto _test_eof146 - } - st_case_146: -// line 4620 "parseqt.go" - switch data[p] { - case 9: - goto tr195 - case 10: - goto st0 - case 32: - goto tr195 - case 41: - goto st76 - case 42: - goto tr196 - case 95: - goto st146 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st146 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st146 - } - default: - goto st146 - } - goto st75 -tr195: -// line 111 "parseqt.rl" - - m1 = p; m4 = 0 - goto st147 - st147: - if p++; p == pe { - goto _test_eof147 - } - st_case_147: -// line 4658 "parseqt.go" - switch data[p] { - case 9: - goto st147 - case 10: - goto st0 - case 32: - goto st147 - case 41: - goto st76 - case 42: - goto tr199 - case 95: - goto tr200 - case 99: - goto tr201 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto tr200 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto tr200 - } - default: - goto tr200 - } - goto st75 -tr196: -// line 111 "parseqt.rl" - - m1 = p; m4 = 0 -// line 111 "parseqt.rl" - - m4++ - goto st148 -tr199: -// line 111 "parseqt.rl" - - m4++ - goto st148 - st148: - if p++; p == pe { - goto _test_eof148 - } - st_case_148: -// line 4706 "parseqt.go" - switch data[p] { - case 9: - goto st147 - case 10: - goto st0 - case 32: - goto st147 - case 41: - goto st76 - case 42: - goto tr199 - case 95: - goto tr200 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto tr200 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto tr200 - } - default: - goto tr200 - } - goto st75 -tr200: -// line 111 "parseqt.rl" - - m2 = p; m5 = 0 - goto st149 - st149: - if p++; p == pe { - goto _test_eof149 - } - st_case_149: -// line 4744 "parseqt.go" - switch data[p] { - case 9: - goto tr202 - case 10: - goto st0 - case 32: - goto tr202 - case 41: - goto tr203 - case 44: - goto tr204 - case 91: - goto tr206 - case 95: - goto st149 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st149 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st149 - } - default: - goto st149 - } - goto st75 -tr202: -// line 111 "parseqt.rl" - - m3 = p - goto st150 - st150: - if p++; p == pe { - goto _test_eof150 - } - st_case_150: -// line 4784 "parseqt.go" - switch data[p] { - case 9: - goto st150 - case 10: - goto st0 - case 32: - goto st150 - case 41: - goto tr208 - case 44: - goto tr209 - } - goto st75 -tr203: -// line 111 "parseqt.rl" - - m3 = p -// line 112 "parseqt.rl" - - f.Param = append(f.Param, Param{Name: data[m2:m3], Type: data[m0:m1], Addr: m4, Array: m5, Const: m6 > 0}); m6 = 0 - goto st151 -tr208: -// line 112 "parseqt.rl" - - f.Param = append(f.Param, Param{Name: data[m2:m3], Type: data[m0:m1], Addr: m4, Array: m5, Const: m6 > 0}); m6 = 0 - goto st151 - st151: - if p++; p == pe { - goto _test_eof151 - } - st_case_151: -// line 4816 "parseqt.go" - switch data[p] { - case 9: - goto st151 - case 10: - goto st0 - case 32: - goto st151 - case 41: - goto st76 - case 59: - goto tr194 - case 95: - goto tr191 - case 99: - goto tr211 - case 123: - goto st83 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto tr191 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto tr191 - } - default: - goto tr191 - } - goto st75 -tr211: -// line 111 "parseqt.rl" - - m0 = p - goto st152 - st152: - if p++; p == pe { - goto _test_eof152 - } - st_case_152: -// line 4858 "parseqt.go" - switch data[p] { - case 9: - goto tr195 - case 10: - goto st0 - case 32: - goto tr195 - case 41: - goto st76 - case 42: - goto tr196 - case 95: - goto st146 - case 111: - goto st153 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st146 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st146 - } - default: - goto st146 - } - goto st75 - st153: - if p++; p == pe { - goto _test_eof153 - } - st_case_153: - switch data[p] { - case 9: - goto tr195 - case 10: - goto st0 - case 32: - goto tr195 - case 41: - goto st76 - case 42: - goto tr196 - case 95: - goto st146 - case 110: - goto st154 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st146 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st146 - } - default: - goto st146 - } - goto st75 - st154: - if p++; p == pe { - goto _test_eof154 - } - st_case_154: - switch data[p] { - case 9: - goto tr195 - case 10: - goto st0 - case 32: - goto tr195 - case 41: - goto st76 - case 42: - goto tr196 - case 95: - goto st146 - case 115: - goto st155 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st146 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st146 - } - default: - goto st146 - } - goto st75 - st155: - if p++; p == pe { - goto _test_eof155 - } - st_case_155: - switch data[p] { - case 9: - goto tr195 - case 10: - goto st0 - case 32: - goto tr195 - case 41: - goto st76 - case 42: - goto tr196 - case 95: - goto st146 - case 116: - goto st156 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st146 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st146 - } - default: - goto st146 - } - goto st75 - st156: - if p++; p == pe { - goto _test_eof156 - } - st_case_156: - switch data[p] { - case 9: - goto tr216 - case 10: - goto st0 - case 32: - goto tr216 - case 41: - goto st76 - case 42: - goto tr196 - case 59: - goto st77 - case 95: - goto st146 - case 123: - goto st83 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st146 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st146 - } - default: - goto st146 - } - goto st75 -tr216: -// line 111 "parseqt.rl" - - m6 = 1 -// line 111 "parseqt.rl" - - m1 = p; m4 = 0 - goto st157 - st157: - if p++; p == pe { - goto _test_eof157 - } - st_case_157: -// line 5039 "parseqt.go" - switch data[p] { - case 9: - goto st157 - case 10: - goto st0 - case 32: - goto st157 - case 41: - goto st76 - case 42: - goto tr199 - case 59: - goto st77 - case 95: - goto tr218 - case 99: - goto tr219 - case 123: - goto st83 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto tr218 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto tr218 - } - default: - goto tr218 - } - goto st75 -tr236: -// line 111 "parseqt.rl" - - m2 = p; m5 = 0 - goto st158 -tr218: -// line 111 "parseqt.rl" - - m0 = p -// line 111 "parseqt.rl" - - m2 = p; m5 = 0 - goto st158 - st158: - if p++; p == pe { - goto _test_eof158 - } - st_case_158: -// line 5091 "parseqt.go" - switch data[p] { - case 9: - goto tr220 - case 10: - goto st0 - case 32: - goto tr220 - case 41: - goto tr203 - case 42: - goto tr196 - case 44: - goto tr204 - case 91: - goto tr206 - case 95: - goto st158 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st158 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st158 - } - default: - goto st158 - } - goto st75 -tr241: -// line 111 "parseqt.rl" - - m3 = p - goto st159 -tr220: -// line 111 "parseqt.rl" - - m1 = p; m4 = 0 -// line 111 "parseqt.rl" - - m3 = p - goto st159 - st159: - if p++; p == pe { - goto _test_eof159 - } - st_case_159: -// line 5141 "parseqt.go" - switch data[p] { - case 9: - goto st159 - case 10: - goto st0 - case 32: - goto st159 - case 41: - goto tr208 - case 42: - goto tr199 - case 44: - goto tr209 - case 95: - goto tr200 - case 99: - goto tr201 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto tr200 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto tr200 - } - default: - goto tr200 - } - goto st75 -tr204: -// line 111 "parseqt.rl" - - m3 = p -// line 112 "parseqt.rl" - - f.Param = append(f.Param, Param{Name: data[m2:m3], Type: data[m0:m1], Addr: m4, Array: m5, Const: m6 > 0}); m6 = 0 - goto st160 -tr209: -// line 112 "parseqt.rl" - - f.Param = append(f.Param, Param{Name: data[m2:m3], Type: data[m0:m1], Addr: m4, Array: m5, Const: m6 > 0}); m6 = 0 - goto st160 - st160: - if p++; p == pe { - goto _test_eof160 - } - st_case_160: -// line 5191 "parseqt.go" - switch data[p] { - case 9: - goto st160 - case 10: - goto st0 - case 32: - goto st160 - case 41: - goto st76 - case 59: - goto tr224 - case 95: - goto tr191 - case 99: - goto tr192 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto tr191 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto tr191 - } - default: - goto tr191 - } - goto st75 -tr224: -// line 1 "NONE" - -te = p+1 - -// line 114 "parseqt.rl" - -act = 10; - goto st452 - st452: - if p++; p == pe { - goto _test_eof452 - } - st_case_452: -// line 5235 "parseqt.go" - switch data[p] { - case 10: - goto tr533 - case 41: - goto st76 - } - goto st75 -tr192: -// line 111 "parseqt.rl" - - m0 = p - goto st161 - st161: - if p++; p == pe { - goto _test_eof161 - } - st_case_161: -// line 5253 "parseqt.go" - switch data[p] { - case 9: - goto tr195 - case 10: - goto st0 - case 32: - goto tr195 - case 41: - goto st76 - case 42: - goto tr196 - case 95: - goto st146 - case 111: - goto st162 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st146 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st146 - } - default: - goto st146 - } - goto st75 - st162: - if p++; p == pe { - goto _test_eof162 - } - st_case_162: - switch data[p] { - case 9: - goto tr195 - case 10: - goto st0 - case 32: - goto tr195 - case 41: - goto st76 - case 42: - goto tr196 - case 95: - goto st146 - case 110: - goto st163 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st146 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st146 - } - default: - goto st146 - } - goto st75 - st163: - if p++; p == pe { - goto _test_eof163 - } - st_case_163: - switch data[p] { - case 9: - goto tr195 - case 10: - goto st0 - case 32: - goto tr195 - case 41: - goto st76 - case 42: - goto tr196 - case 95: - goto st146 - case 115: - goto st164 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st146 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st146 - } - default: - goto st146 - } - goto st75 - st164: - if p++; p == pe { - goto _test_eof164 - } - st_case_164: - switch data[p] { - case 9: - goto tr195 - case 10: - goto st0 - case 32: - goto tr195 - case 41: - goto st76 - case 42: - goto tr196 - case 95: - goto st146 - case 116: - goto st165 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st146 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st146 - } - default: - goto st146 - } - goto st75 - st165: - if p++; p == pe { - goto _test_eof165 - } - st_case_165: - switch data[p] { - case 9: - goto tr229 - case 10: - goto st0 - case 32: - goto tr229 - case 41: - goto st76 - case 42: - goto tr196 - case 95: - goto st146 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st146 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st146 - } - default: - goto st146 - } - goto st75 -tr229: -// line 111 "parseqt.rl" - - m6 = 1 -// line 111 "parseqt.rl" - - m1 = p; m4 = 0 - goto st166 - st166: - if p++; p == pe { - goto _test_eof166 - } - st_case_166: -// line 5430 "parseqt.go" - switch data[p] { - case 9: - goto st166 - case 10: - goto st0 - case 32: - goto st166 - case 41: - goto st76 - case 42: - goto tr199 - case 95: - goto tr218 - case 99: - goto tr219 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto tr218 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto tr218 - } - default: - goto tr218 - } - goto st75 -tr219: -// line 111 "parseqt.rl" - - m0 = p -// line 111 "parseqt.rl" - - m2 = p; m5 = 0 - goto st167 - st167: - if p++; p == pe { - goto _test_eof167 - } - st_case_167: -// line 5473 "parseqt.go" - switch data[p] { - case 9: - goto tr220 - case 10: - goto st0 - case 32: - goto tr220 - case 41: - goto tr203 - case 42: - goto tr196 - case 44: - goto tr204 - case 91: - goto tr206 - case 95: - goto st158 - case 111: - goto st170 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st158 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st158 - } - default: - goto st158 - } - goto st75 -tr206: -// line 111 "parseqt.rl" - - m3 = p - goto st168 - st168: - if p++; p == pe { - goto _test_eof168 - } - st_case_168: -// line 5517 "parseqt.go" - switch data[p] { - case 10: - goto st0 - case 41: - goto st76 - } - if 48 <= data[p] && data[p] <= 57 { - goto tr232 - } - goto st75 -tr232: -// line 111 "parseqt.rl" - - m5 = m5*10 + (int(data[p]) - '0') - goto st169 - st169: - if p++; p == pe { - goto _test_eof169 - } - st_case_169: -// line 5538 "parseqt.go" - switch data[p] { - case 10: - goto st0 - case 41: - goto st76 - case 93: - goto st150 - } - if 48 <= data[p] && data[p] <= 57 { - goto tr232 - } - goto st75 - st170: - if p++; p == pe { - goto _test_eof170 - } - st_case_170: - switch data[p] { - case 9: - goto tr220 - case 10: - goto st0 - case 32: - goto tr220 - case 41: - goto tr203 - case 42: - goto tr196 - case 44: - goto tr204 - case 91: - goto tr206 - case 95: - goto st158 - case 110: - goto st171 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st158 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st158 - } - default: - goto st158 - } - goto st75 - st171: - if p++; p == pe { - goto _test_eof171 - } - st_case_171: - switch data[p] { - case 9: - goto tr220 - case 10: - goto st0 - case 32: - goto tr220 - case 41: - goto tr203 - case 42: - goto tr196 - case 44: - goto tr204 - case 91: - goto tr206 - case 95: - goto st158 - case 115: - goto st172 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st158 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st158 - } - default: - goto st158 - } - goto st75 - st172: - if p++; p == pe { - goto _test_eof172 - } - st_case_172: - switch data[p] { - case 9: - goto tr220 - case 10: - goto st0 - case 32: - goto tr220 - case 41: - goto tr203 - case 42: - goto tr196 - case 44: - goto tr204 - case 91: - goto tr206 - case 95: - goto st158 - case 116: - goto st173 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st158 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st158 - } - default: - goto st158 - } - goto st75 - st173: - if p++; p == pe { - goto _test_eof173 - } - st_case_173: - switch data[p] { - case 9: - goto tr220 - case 10: - goto st0 - case 32: - goto tr220 - case 41: - goto tr203 - case 42: - goto tr196 - case 44: - goto tr204 - case 91: - goto tr206 - case 95: - goto tr236 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto tr236 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto tr236 - } - default: - goto tr236 - } - goto st75 -tr201: -// line 111 "parseqt.rl" - - m2 = p; m5 = 0 - goto st174 - st174: - if p++; p == pe { - goto _test_eof174 - } - st_case_174: -// line 5711 "parseqt.go" - switch data[p] { - case 9: - goto tr202 - case 10: - goto st0 - case 32: - goto tr202 - case 41: - goto tr203 - case 44: - goto tr204 - case 91: - goto tr206 - case 95: - goto st149 - case 111: - goto st175 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st149 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st149 - } - default: - goto st149 - } - goto st75 - st175: - if p++; p == pe { - goto _test_eof175 - } - st_case_175: - switch data[p] { - case 9: - goto tr202 - case 10: - goto st0 - case 32: - goto tr202 - case 41: - goto tr203 - case 44: - goto tr204 - case 91: - goto tr206 - case 95: - goto st149 - case 110: - goto st176 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st149 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st149 - } - default: - goto st149 - } - goto st75 - st176: - if p++; p == pe { - goto _test_eof176 - } - st_case_176: - switch data[p] { - case 9: - goto tr202 - case 10: - goto st0 - case 32: - goto tr202 - case 41: - goto tr203 - case 44: - goto tr204 - case 91: - goto tr206 - case 95: - goto st149 - case 115: - goto st177 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st149 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st149 - } - default: - goto st149 - } - goto st75 - st177: - if p++; p == pe { - goto _test_eof177 - } - st_case_177: - switch data[p] { - case 9: - goto tr202 - case 10: - goto st0 - case 32: - goto tr202 - case 41: - goto tr203 - case 44: - goto tr204 - case 91: - goto tr206 - case 95: - goto st149 - case 116: - goto st178 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st149 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st149 - } - default: - goto st149 - } - goto st75 - st178: - if p++; p == pe { - goto _test_eof178 - } - st_case_178: - switch data[p] { - case 9: - goto tr241 - case 10: - goto st0 - case 32: - goto tr241 - case 41: - goto tr203 - case 42: - goto tr199 - case 44: - goto tr204 - case 91: - goto tr206 - case 95: - goto tr200 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto tr200 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto tr200 - } - default: - goto tr200 - } - goto st75 -tr193: -// line 111 "parseqt.rl" - - m0 = p - goto st179 - st179: - if p++; p == pe { - goto _test_eof179 - } - st_case_179: -// line 5897 "parseqt.go" - switch data[p] { - case 9: - goto tr195 - case 10: - goto st0 - case 32: - goto tr195 - case 41: - goto st76 - case 42: - goto tr196 - case 95: - goto st146 - case 111: - goto st180 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st146 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st146 - } - default: - goto st146 - } - goto st75 - st180: - if p++; p == pe { - goto _test_eof180 - } - st_case_180: - switch data[p] { - case 9: - goto tr195 - case 10: - goto st0 - case 32: - goto tr195 - case 41: - goto st76 - case 42: - goto tr196 - case 95: - goto st146 - case 105: - goto st181 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st146 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st146 - } - default: - goto st146 - } - goto st75 - st181: - if p++; p == pe { - goto _test_eof181 - } - st_case_181: - switch data[p] { - case 9: - goto tr195 - case 10: - goto st0 - case 32: - goto tr195 - case 41: - goto st76 - case 42: - goto tr196 - case 95: - goto st146 - case 100: - goto st182 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st146 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st146 - } - default: - goto st146 - } - goto st75 - st182: - if p++; p == pe { - goto _test_eof182 - } - st_case_182: - switch data[p] { - case 9: - goto tr245 - case 10: - goto st0 - case 32: - goto tr245 - case 41: - goto st145 - case 42: - goto tr196 - case 95: - goto st146 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st146 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st146 - } - default: - goto st146 - } - goto st75 -tr245: -// line 111 "parseqt.rl" - - m1 = p; m4 = 0 - goto st183 - st183: - if p++; p == pe { - goto _test_eof183 - } - st_case_183: -// line 6037 "parseqt.go" - switch data[p] { - case 9: - goto st183 - case 10: - goto st0 - case 32: - goto st183 - case 41: - goto st145 - case 42: - goto tr199 - case 95: - goto tr200 - case 99: - goto tr201 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto tr200 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto tr200 - } - default: - goto tr200 - } - goto st75 -tr83: -// line 84 "parseqt.rl" - - m1 = p - goto st184 - st184: - if p++; p == pe { - goto _test_eof184 - } - st_case_184: -// line 6077 "parseqt.go" - if data[p] == 41 { - goto st185 - } - goto st0 - st185: - if p++; p == pe { - goto _test_eof185 - } - st_case_185: - switch data[p] { - case 9: - goto st185 - case 32: - goto st185 - case 59: - goto st186 - case 123: - goto st187 - } - goto st0 - st186: - if p++; p == pe { - goto _test_eof186 - } - st_case_186: - switch data[p] { - case 9: - goto st186 - case 10: - goto tr250 - case 32: - goto st186 - } - goto st0 - st187: - if p++; p == pe { - goto _test_eof187 - } - st_case_187: - if data[p] == 125 { - goto st186 - } - goto st0 - st188: - if p++; p == pe { - goto _test_eof188 - } - st_case_188: - switch data[p] { - case 9: - goto st189 - case 32: - goto st189 - case 42: - goto tr252 - case 95: - goto st188 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 58 { - goto st188 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st188 - } - default: - goto st188 - } - goto st0 - st189: - if p++; p == pe { - goto _test_eof189 - } - st_case_189: - switch data[p] { - case 9: - goto st189 - case 32: - goto st189 - case 42: - goto tr252 - case 95: - goto st65 - case 99: - goto st193 - case 103: - goto st191 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 -tr252: -// line 127 "parseqt.rl" - - m4++ - goto st190 - st190: - if p++; p == pe { - goto _test_eof190 - } - st_case_190: -// line 6191 "parseqt.go" - switch data[p] { - case 9: - goto st189 - case 32: - goto st189 - case 42: - goto tr252 - case 95: - goto st65 - case 103: - goto st191 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 - st191: - if p++; p == pe { - goto _test_eof191 - } - st_case_191: - switch data[p] { - case 9: - goto st66 - case 32: - goto st66 - case 40: - goto st75 - case 59: - goto st67 - case 95: - goto st65 - case 108: - goto st192 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 - st192: - if p++; p == pe { - goto _test_eof192 - } - st_case_192: - switch data[p] { - case 9: - goto st66 - case 32: - goto st66 - case 40: - goto st75 - case 59: - goto st67 - case 99: - goto st68 - case 123: - goto st73 - } - goto st0 - st193: - if p++; p == pe { - goto _test_eof193 - } - st_case_193: - switch data[p] { - case 9: - goto st66 - case 32: - goto st66 - case 40: - goto st75 - case 59: - goto st67 - case 95: - goto st65 - case 111: - goto st194 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 - st194: - if p++; p == pe { - goto _test_eof194 - } - st_case_194: - switch data[p] { - case 9: - goto st66 - case 32: - goto st66 - case 40: - goto st75 - case 59: - goto st67 - case 95: - goto st65 - case 110: - goto st195 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 - st195: - if p++; p == pe { - goto _test_eof195 - } - st_case_195: - switch data[p] { - case 9: - goto st66 - case 32: - goto st66 - case 40: - goto st75 - case 59: - goto st67 - case 95: - goto st65 - case 115: - goto st196 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 - st196: - if p++; p == pe { - goto _test_eof196 - } - st_case_196: - switch data[p] { - case 9: - goto st66 - case 32: - goto st66 - case 40: - goto st75 - case 59: - goto st67 - case 95: - goto st65 - case 116: - goto st197 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 - st197: - if p++; p == pe { - goto _test_eof197 - } - st_case_197: - switch data[p] { - case 9: - goto st198 - case 32: - goto st198 - case 40: - goto st75 - case 42: - goto tr252 - case 59: - goto st67 - case 95: - goto st65 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 - st198: - if p++; p == pe { - goto _test_eof198 - } - st_case_198: - switch data[p] { - case 9: - goto st198 - case 32: - goto st198 - case 42: - goto tr252 - case 59: - goto st67 - case 95: - goto st65 - case 99: - goto st193 - case 103: - goto st191 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 -tr67: -// line 84 "parseqt.rl" - - m0 = p -// line 107 "parseqt.rl" - - m0 = p - goto st199 - st199: - if p++; p == pe { - goto _test_eof199 - } - st_case_199: -// line 6490 "parseqt.go" - switch data[p] { - case 9: - goto tr82 - case 32: - goto tr82 - case 40: - goto tr83 - case 42: - goto tr84 - case 58: - goto st188 - case 95: - goto st200 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st62 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st62 - } - default: - goto st62 - } - goto st0 - st200: - if p++; p == pe { - goto _test_eof200 - } - st_case_200: - switch data[p] { - case 9: - goto tr82 - case 32: - goto tr82 - case 40: - goto tr83 - case 42: - goto tr84 - case 58: - goto st188 - case 68: - goto st201 - case 95: - goto st62 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st62 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st62 - } - default: - goto st62 - } - goto st0 - st201: - if p++; p == pe { - goto _test_eof201 - } - st_case_201: - switch data[p] { - case 9: - goto tr82 - case 32: - goto tr82 - case 40: - goto tr83 - case 42: - goto tr84 - case 58: - goto st188 - case 69: - goto st202 - case 95: - goto st62 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st62 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st62 - } - default: - goto st62 - } - goto st0 - st202: - if p++; p == pe { - goto _test_eof202 - } - st_case_202: - switch data[p] { - case 9: - goto tr82 - case 32: - goto tr82 - case 40: - goto tr83 - case 42: - goto tr84 - case 58: - goto st188 - case 67: - goto st203 - case 95: - goto st62 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st62 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st62 - } - default: - goto st62 - } - goto st0 - st203: - if p++; p == pe { - goto _test_eof203 - } - st_case_203: - switch data[p] { - case 9: - goto tr82 - case 32: - goto tr82 - case 40: - goto tr83 - case 42: - goto tr84 - case 58: - goto st188 - case 76: - goto st204 - case 95: - goto st62 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st62 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st62 - } - default: - goto st62 - } - goto st0 - st204: - if p++; p == pe { - goto _test_eof204 - } - st_case_204: - switch data[p] { - case 9: - goto tr82 - case 32: - goto tr82 - case 40: - goto tr83 - case 42: - goto tr84 - case 58: - goto st188 - case 65: - goto st205 - case 95: - goto st62 - } - switch { - case data[p] < 66: - if 48 <= data[p] && data[p] <= 57 { - goto st62 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st62 - } - default: - goto st62 - } - goto st0 - st205: - if p++; p == pe { - goto _test_eof205 - } - st_case_205: - switch data[p] { - case 9: - goto tr82 - case 32: - goto tr82 - case 40: - goto tr83 - case 42: - goto tr84 - case 58: - goto st188 - case 82: - goto st206 - case 95: - goto st62 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st62 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st62 - } - default: - goto st62 - } - goto st0 - st206: - if p++; p == pe { - goto _test_eof206 - } - st_case_206: - switch data[p] { - case 9: - goto tr82 - case 32: - goto tr82 - case 40: - goto tr83 - case 42: - goto tr84 - case 58: - goto st188 - case 69: - goto st207 - case 95: - goto st62 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st62 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st62 - } - default: - goto st62 - } - goto st0 - st207: - if p++; p == pe { - goto _test_eof207 - } - st_case_207: - switch data[p] { - case 9: - goto tr82 - case 32: - goto tr82 - case 40: - goto tr83 - case 42: - goto tr84 - case 58: - goto st188 - case 95: - goto st208 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st62 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st62 - } - default: - goto st62 - } - goto st0 - st208: - if p++; p == pe { - goto _test_eof208 - } - st_case_208: - switch data[p] { - case 9: - goto tr82 - case 32: - goto tr82 - case 40: - goto tr83 - case 42: - goto tr84 - case 58: - goto st188 - case 70: - goto st209 - case 95: - goto st62 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st62 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st62 - } - default: - goto st62 - } - goto st0 - st209: - if p++; p == pe { - goto _test_eof209 - } - st_case_209: - switch data[p] { - case 9: - goto tr82 - case 32: - goto tr82 - case 40: - goto tr83 - case 42: - goto tr84 - case 58: - goto st188 - case 76: - goto st210 - case 95: - goto st62 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st62 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st62 - } - default: - goto st62 - } - goto st0 - st210: - if p++; p == pe { - goto _test_eof210 - } - st_case_210: - switch data[p] { - case 9: - goto tr82 - case 32: - goto tr82 - case 40: - goto tr83 - case 42: - goto tr84 - case 58: - goto st188 - case 65: - goto st211 - case 95: - goto st62 - } - switch { - case data[p] < 66: - if 48 <= data[p] && data[p] <= 57 { - goto st62 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st62 - } - default: - goto st62 - } - goto st0 - st211: - if p++; p == pe { - goto _test_eof211 - } - st_case_211: - switch data[p] { - case 9: - goto tr82 - case 32: - goto tr82 - case 40: - goto tr83 - case 42: - goto tr84 - case 58: - goto st188 - case 71: - goto st212 - case 95: - goto st62 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st62 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st62 - } - default: - goto st62 - } - goto st0 - st212: - if p++; p == pe { - goto _test_eof212 - } - st_case_212: - switch data[p] { - case 9: - goto tr82 - case 32: - goto tr82 - case 40: - goto tr83 - case 42: - goto tr84 - case 58: - goto st188 - case 83: - goto st213 - case 95: - goto st62 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st62 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st62 - } - default: - goto st62 - } - goto st0 - st213: - if p++; p == pe { - goto _test_eof213 - } - st_case_213: - switch data[p] { - case 9: - goto tr82 - case 32: - goto tr82 - case 40: - goto tr275 - case 42: - goto tr84 - case 58: - goto st188 - case 95: - goto st62 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st62 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st62 - } - default: - goto st62 - } - goto st0 -tr275: -// line 84 "parseqt.rl" - - m1 = p - goto st214 - st214: - if p++; p == pe { - goto _test_eof214 - } - st_case_214: -// line 7000 "parseqt.go" - switch data[p] { - case 10: - goto st0 - case 41: - goto st217 - } - goto st215 - st215: - if p++; p == pe { - goto _test_eof215 - } - st_case_215: - switch data[p] { - case 10: - goto st0 - case 41: - goto st216 - } - goto st215 - st216: - if p++; p == pe { - goto _test_eof216 - } - st_case_216: - switch data[p] { - case 9: - goto st216 - case 10: - goto tr279 - case 32: - goto st216 - case 41: - goto st216 - } - goto st215 - st217: - if p++; p == pe { - goto _test_eof217 - } - st_case_217: - switch data[p] { - case 9: - goto st217 - case 10: - goto st0 - case 32: - goto st217 - case 41: - goto st216 - case 59: - goto st218 - case 123: - goto st219 - } - goto st215 - st218: - if p++; p == pe { - goto _test_eof218 - } - st_case_218: - switch data[p] { - case 9: - goto st218 - case 10: - goto tr250 - case 32: - goto st218 - case 41: - goto st216 - } - goto st215 - st219: - if p++; p == pe { - goto _test_eof219 - } - st_case_219: - switch data[p] { - case 10: - goto st0 - case 41: - goto st216 - case 125: - goto st218 - } - goto st215 -tr68: -// line 84 "parseqt.rl" - - m0 = p -// line 107 "parseqt.rl" - - m0 = p - goto st220 - st220: - if p++; p == pe { - goto _test_eof220 - } - st_case_220: -// line 7099 "parseqt.go" - switch data[p] { - case 9: - goto tr82 - case 32: - goto tr82 - case 40: - goto tr83 - case 42: - goto tr84 - case 58: - goto st188 - case 95: - goto st62 - case 111: - goto st221 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st62 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st62 - } - default: - goto st62 - } - goto st0 - st221: - if p++; p == pe { - goto _test_eof221 - } - st_case_221: - switch data[p] { - case 9: - goto tr82 - case 32: - goto tr82 - case 40: - goto tr83 - case 42: - goto tr84 - case 58: - goto st188 - case 95: - goto st62 - case 111: - goto st222 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st62 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st62 - } - default: - goto st62 - } - goto st0 - st222: - if p++; p == pe { - goto _test_eof222 - } - st_case_222: - switch data[p] { - case 9: - goto tr82 - case 32: - goto tr82 - case 40: - goto tr83 - case 42: - goto tr84 - case 58: - goto st188 - case 95: - goto st62 - case 108: - goto st223 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st62 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st62 - } - default: - goto st62 - } - goto st0 - st223: - if p++; p == pe { - goto _test_eof223 - } - st_case_223: - switch data[p] { - case 9: - goto tr285 - case 32: - goto tr285 - case 40: - goto tr83 - case 42: - goto tr84 - case 58: - goto st188 - case 95: - goto st62 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st62 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st62 - } - default: - goto st62 - } - goto st0 -tr285: -// line 107 "parseqt.rl" - - m1 = p; m4 = 0 - goto st224 - st224: - if p++; p == pe { - goto _test_eof224 - } - st_case_224: -// line 7239 "parseqt.go" - switch data[p] { - case 9: - goto st224 - case 32: - goto st224 - case 42: - goto tr87 - case 95: - goto st65 - case 99: - goto st134 - case 103: - goto tr90 - case 105: - goto st225 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 - st225: - if p++; p == pe { - goto _test_eof225 - } - st_case_225: - switch data[p] { - case 9: - goto st66 - case 32: - goto st66 - case 40: - goto st75 - case 59: - goto st67 - case 95: - goto st65 - case 110: - goto st226 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 - st226: - if p++; p == pe { - goto _test_eof226 - } - st_case_226: - switch data[p] { - case 9: - goto st66 - case 32: - goto st66 - case 40: - goto st75 - case 59: - goto st67 - case 95: - goto st65 - case 105: - goto st227 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 - st227: - if p++; p == pe { - goto _test_eof227 - } - st_case_227: - switch data[p] { - case 9: - goto st66 - case 32: - goto st66 - case 40: - goto st75 - case 59: - goto st67 - case 95: - goto st65 - case 116: - goto st228 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 - st228: - if p++; p == pe { - goto _test_eof228 - } - st_case_228: - switch data[p] { - case 9: - goto st66 - case 32: - goto st66 - case 40: - goto st75 - case 59: - goto st67 - case 95: - goto st65 - case 105: - goto st229 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 - st229: - if p++; p == pe { - goto _test_eof229 - } - st_case_229: - switch data[p] { - case 9: - goto st66 - case 32: - goto st66 - case 40: - goto st75 - case 59: - goto st67 - case 95: - goto st65 - case 97: - goto st230 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 98 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 - st230: - if p++; p == pe { - goto _test_eof230 - } - st_case_230: - switch data[p] { - case 9: - goto st66 - case 32: - goto st66 - case 40: - goto st75 - case 59: - goto st67 - case 95: - goto st65 - case 108: - goto st231 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 - st231: - if p++; p == pe { - goto _test_eof231 - } - st_case_231: - switch data[p] { - case 9: - goto st66 - case 32: - goto st66 - case 40: - goto st75 - case 59: - goto st67 - case 95: - goto st65 - case 105: - goto st232 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 - st232: - if p++; p == pe { - goto _test_eof232 - } - st_case_232: - switch data[p] { - case 9: - goto st66 - case 32: - goto st66 - case 40: - goto st75 - case 59: - goto st67 - case 95: - goto st65 - case 122: - goto st233 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 121 { - goto st65 - } - default: - goto st65 - } - goto st0 - st233: - if p++; p == pe { - goto _test_eof233 - } - st_case_233: - switch data[p] { - case 9: - goto st66 - case 32: - goto st66 - case 40: - goto st75 - case 59: - goto st67 - case 95: - goto st65 - case 101: - goto st234 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 - st234: - if p++; p == pe { - goto _test_eof234 - } - st_case_234: - switch data[p] { - case 9: - goto st66 - case 32: - goto st66 - case 40: - goto st75 - case 59: - goto st67 - case 79: - goto st235 - case 95: - goto st65 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 - st235: - if p++; p == pe { - goto _test_eof235 - } - st_case_235: - switch data[p] { - case 9: - goto st66 - case 32: - goto st66 - case 40: - goto st75 - case 59: - goto st67 - case 95: - goto st65 - case 112: - goto st236 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 - st236: - if p++; p == pe { - goto _test_eof236 - } - st_case_236: - switch data[p] { - case 9: - goto st66 - case 32: - goto st66 - case 40: - goto st75 - case 59: - goto st67 - case 95: - goto st65 - case 101: - goto st237 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 - st237: - if p++; p == pe { - goto _test_eof237 - } - st_case_237: - switch data[p] { - case 9: - goto st66 - case 32: - goto st66 - case 40: - goto st75 - case 59: - goto st67 - case 95: - goto st65 - case 110: - goto st238 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 - st238: - if p++; p == pe { - goto _test_eof238 - } - st_case_238: - switch data[p] { - case 9: - goto st66 - case 32: - goto st66 - case 40: - goto st75 - case 59: - goto st67 - case 71: - goto st239 - case 95: - goto st65 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 - st239: - if p++; p == pe { - goto _test_eof239 - } - st_case_239: - switch data[p] { - case 9: - goto st66 - case 32: - goto st66 - case 40: - goto st75 - case 59: - goto st67 - case 76: - goto st240 - case 95: - goto st65 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 - st240: - if p++; p == pe { - goto _test_eof240 - } - st_case_240: - switch data[p] { - case 9: - goto st66 - case 32: - goto st66 - case 40: - goto st75 - case 59: - goto st67 - case 70: - goto st241 - case 95: - goto st65 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 - st241: - if p++; p == pe { - goto _test_eof241 - } - st_case_241: - switch data[p] { - case 9: - goto st66 - case 32: - goto st66 - case 40: - goto st75 - case 59: - goto st67 - case 95: - goto st65 - case 117: - goto st242 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 - st242: - if p++; p == pe { - goto _test_eof242 - } - st_case_242: - switch data[p] { - case 9: - goto st66 - case 32: - goto st66 - case 40: - goto st75 - case 59: - goto st67 - case 95: - goto st65 - case 110: - goto st243 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 - st243: - if p++; p == pe { - goto _test_eof243 - } - st_case_243: - switch data[p] { - case 9: - goto st66 - case 32: - goto st66 - case 40: - goto st75 - case 59: - goto st67 - case 95: - goto st65 - case 99: - goto st244 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 - st244: - if p++; p == pe { - goto _test_eof244 - } - st_case_244: - switch data[p] { - case 9: - goto st66 - case 32: - goto st66 - case 40: - goto st75 - case 59: - goto st67 - case 95: - goto st65 - case 116: - goto st245 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 - st245: - if p++; p == pe { - goto _test_eof245 - } - st_case_245: - switch data[p] { - case 9: - goto st66 - case 32: - goto st66 - case 40: - goto st75 - case 59: - goto st67 - case 95: - goto st65 - case 105: - goto st246 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 - st246: - if p++; p == pe { - goto _test_eof246 - } - st_case_246: - switch data[p] { - case 9: - goto st66 - case 32: - goto st66 - case 40: - goto st75 - case 59: - goto st67 - case 95: - goto st65 - case 111: - goto st247 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 - st247: - if p++; p == pe { - goto _test_eof247 - } - st_case_247: - switch data[p] { - case 9: - goto st66 - case 32: - goto st66 - case 40: - goto st75 - case 59: - goto st67 - case 95: - goto st65 - case 110: - goto st248 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 - st248: - if p++; p == pe { - goto _test_eof248 - } - st_case_248: - switch data[p] { - case 9: - goto st66 - case 32: - goto st66 - case 40: - goto st75 - case 59: - goto st67 - case 95: - goto st65 - case 115: - goto st249 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 - st249: - if p++; p == pe { - goto _test_eof249 - } - st_case_249: - switch data[p] { - case 9: - goto st66 - case 32: - goto st66 - case 40: - goto st250 - case 59: - goto st67 - case 95: - goto st65 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 - st250: - if p++; p == pe { - goto _test_eof250 - } - st_case_250: - switch data[p] { - case 10: - goto st0 - case 41: - goto st251 - } - goto st75 - st251: - if p++; p == pe { - goto _test_eof251 - } - st_case_251: - switch data[p] { - case 9: - goto st251 - case 10: - goto tr315 - case 32: - goto st251 - case 41: - goto st251 - case 59: - goto st253 - case 99: - goto st254 - case 123: - goto st259 - } - goto st252 - st252: - if p++; p == pe { - goto _test_eof252 - } - st_case_252: - switch data[p] { - case 10: - goto tr315 - case 41: - goto st251 - } - goto st252 - st253: - if p++; p == pe { - goto _test_eof253 - } - st_case_253: - switch data[p] { - case 9: - goto st253 - case 10: - goto tr315 - case 32: - goto st253 - case 41: - goto st251 - } - goto st252 - st254: - if p++; p == pe { - goto _test_eof254 - } - st_case_254: - switch data[p] { - case 10: - goto tr315 - case 41: - goto st251 - case 111: - goto st255 - } - goto st252 - st255: - if p++; p == pe { - goto _test_eof255 - } - st_case_255: - switch data[p] { - case 10: - goto tr315 - case 41: - goto st251 - case 110: - goto st256 - } - goto st252 - st256: - if p++; p == pe { - goto _test_eof256 - } - st_case_256: - switch data[p] { - case 10: - goto tr315 - case 41: - goto st251 - case 115: - goto st257 - } - goto st252 - st257: - if p++; p == pe { - goto _test_eof257 - } - st_case_257: - switch data[p] { - case 10: - goto tr315 - case 41: - goto st251 - case 116: - goto st258 - } - goto st252 - st258: - if p++; p == pe { - goto _test_eof258 - } - st_case_258: - switch data[p] { - case 9: - goto st258 - case 10: - goto tr315 - case 32: - goto st258 - case 41: - goto st251 - case 59: - goto st253 - case 123: - goto st259 - } - goto st252 - st259: - if p++; p == pe { - goto _test_eof259 - } - st_case_259: - switch data[p] { - case 10: - goto tr315 - case 41: - goto st260 - case 125: - goto st261 - } - goto st259 - st260: - if p++; p == pe { - goto _test_eof260 - } - st_case_260: - switch data[p] { - case 9: - goto st260 - case 10: - goto tr315 - case 32: - goto st260 - case 41: - goto st260 - case 59: - goto st261 - case 99: - goto st262 - case 125: - goto st261 - } - goto st259 - st261: - if p++; p == pe { - goto _test_eof261 - } - st_case_261: - switch data[p] { - case 9: - goto st261 - case 10: - goto tr315 - case 32: - goto st261 - case 41: - goto st260 - case 125: - goto st261 - } - goto st259 - st262: - if p++; p == pe { - goto _test_eof262 - } - st_case_262: - switch data[p] { - case 10: - goto tr315 - case 41: - goto st260 - case 111: - goto st263 - case 125: - goto st261 - } - goto st259 - st263: - if p++; p == pe { - goto _test_eof263 - } - st_case_263: - switch data[p] { - case 10: - goto tr315 - case 41: - goto st260 - case 110: - goto st264 - case 125: - goto st261 - } - goto st259 - st264: - if p++; p == pe { - goto _test_eof264 - } - st_case_264: - switch data[p] { - case 10: - goto tr315 - case 41: - goto st260 - case 115: - goto st265 - case 125: - goto st261 - } - goto st259 - st265: - if p++; p == pe { - goto _test_eof265 - } - st_case_265: - switch data[p] { - case 10: - goto tr315 - case 41: - goto st260 - case 116: - goto st266 - case 125: - goto st261 - } - goto st259 - st266: - if p++; p == pe { - goto _test_eof266 - } - st_case_266: - switch data[p] { - case 9: - goto st266 - case 10: - goto tr315 - case 32: - goto st266 - case 41: - goto st260 - case 59: - goto st261 - case 125: - goto st261 - } - goto st259 -tr69: -// line 84 "parseqt.rl" - - m0 = p -// line 107 "parseqt.rl" - - m0 = p - goto st267 - st267: - if p++; p == pe { - goto _test_eof267 - } - st_case_267: -// line 8406 "parseqt.go" - switch data[p] { - case 9: - goto tr82 - case 32: - goto tr82 - case 40: - goto tr83 - case 42: - goto tr84 - case 58: - goto st188 - case 95: - goto st62 - case 111: - goto st268 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st62 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st62 - } - default: - goto st62 - } - goto st0 - st268: - if p++; p == pe { - goto _test_eof268 - } - st_case_268: - switch data[p] { - case 9: - goto tr82 - case 32: - goto tr82 - case 40: - goto tr83 - case 42: - goto tr84 - case 58: - goto st188 - case 95: - goto st62 - case 110: - goto st269 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st62 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st62 - } - default: - goto st62 - } - goto st0 - st269: - if p++; p == pe { - goto _test_eof269 - } - st_case_269: - switch data[p] { - case 9: - goto tr82 - case 32: - goto tr82 - case 40: - goto tr83 - case 42: - goto tr84 - case 58: - goto st188 - case 95: - goto st62 - case 115: - goto st270 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st62 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st62 - } - default: - goto st62 - } - goto st0 - st270: - if p++; p == pe { - goto _test_eof270 - } - st_case_270: - switch data[p] { - case 9: - goto tr82 - case 32: - goto tr82 - case 40: - goto tr83 - case 42: - goto tr84 - case 58: - goto st188 - case 95: - goto st62 - case 116: - goto st271 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st62 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st62 - } - default: - goto st62 - } - goto st0 - st271: - if p++; p == pe { - goto _test_eof271 - } - st_case_271: - switch data[p] { - case 9: - goto tr334 - case 32: - goto tr334 - case 40: - goto tr83 - case 42: - goto tr84 - case 58: - goto st188 - case 95: - goto st62 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st62 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st62 - } - default: - goto st62 - } - goto st0 -tr334: -// line 107 "parseqt.rl" - - m1 = p; m4 = 0 - goto st272 - st272: - if p++; p == pe { - goto _test_eof272 - } - st_case_272: -// line 8580 "parseqt.go" - switch data[p] { - case 9: - goto st272 - case 32: - goto st272 - case 42: - goto tr87 - case 58: - goto st188 - case 95: - goto tr336 - case 99: - goto tr337 - case 103: - goto tr338 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto tr336 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto tr336 - } - default: - goto tr336 - } - goto st0 -tr336: -// line 107 "parseqt.rl" - - m0 = p - goto st273 - st273: - if p++; p == pe { - goto _test_eof273 - } - st_case_273: -// line 8620 "parseqt.go" - switch data[p] { - case 9: - goto tr339 - case 32: - goto tr339 - case 40: - goto st75 - case 42: - goto tr84 - case 58: - goto st188 - case 59: - goto st67 - case 95: - goto st273 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st273 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st273 - } - default: - goto st273 - } - goto st0 -tr337: -// line 107 "parseqt.rl" - - m0 = p - goto st274 - st274: - if p++; p == pe { - goto _test_eof274 - } - st_case_274: -// line 8662 "parseqt.go" - switch data[p] { - case 9: - goto tr339 - case 32: - goto tr339 - case 40: - goto st75 - case 42: - goto tr84 - case 58: - goto st188 - case 59: - goto st67 - case 95: - goto st273 - case 111: - goto st275 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st273 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st273 - } - default: - goto st273 - } - goto st0 - st275: - if p++; p == pe { - goto _test_eof275 - } - st_case_275: - switch data[p] { - case 9: - goto tr339 - case 32: - goto tr339 - case 40: - goto st75 - case 42: - goto tr84 - case 58: - goto st188 - case 59: - goto st67 - case 95: - goto st273 - case 110: - goto st276 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st273 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st273 - } - default: - goto st273 - } - goto st0 - st276: - if p++; p == pe { - goto _test_eof276 - } - st_case_276: - switch data[p] { - case 9: - goto tr339 - case 32: - goto tr339 - case 40: - goto st75 - case 42: - goto tr84 - case 58: - goto st188 - case 59: - goto st67 - case 95: - goto st273 - case 115: - goto st277 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st273 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st273 - } - default: - goto st273 - } - goto st0 - st277: - if p++; p == pe { - goto _test_eof277 - } - st_case_277: - switch data[p] { - case 9: - goto tr339 - case 32: - goto tr339 - case 40: - goto st75 - case 42: - goto tr84 - case 58: - goto st188 - case 59: - goto st67 - case 95: - goto st273 - case 116: - goto st278 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st273 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st273 - } - default: - goto st273 - } - goto st0 - st278: - if p++; p == pe { - goto _test_eof278 - } - st_case_278: - switch data[p] { - case 9: - goto tr339 - case 32: - goto tr339 - case 40: - goto st75 - case 42: - goto tr84 - case 58: - goto st188 - case 59: - goto st67 - case 95: - goto st273 - case 103: - goto tr345 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st273 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st273 - } - default: - goto st273 - } - goto st0 -tr345: -// line 109 "parseqt.rl" - - m2 = p - goto st279 - st279: - if p++; p == pe { - goto _test_eof279 - } - st_case_279: -// line 8858 "parseqt.go" - switch data[p] { - case 9: - goto tr339 - case 32: - goto tr339 - case 40: - goto st75 - case 42: - goto tr84 - case 58: - goto st188 - case 59: - goto st67 - case 95: - goto st273 - case 108: - goto st280 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st273 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st273 - } - default: - goto st273 - } - goto st0 - st280: - if p++; p == pe { - goto _test_eof280 - } - st_case_280: - switch data[p] { - case 9: - goto tr339 - case 32: - goto tr339 - case 40: - goto st75 - case 42: - goto tr84 - case 58: - goto st188 - case 59: - goto st67 - case 95: - goto st281 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st281 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st281 - } - default: - goto st281 - } - goto st0 - st281: - if p++; p == pe { - goto _test_eof281 - } - st_case_281: - switch data[p] { - case 9: - goto tr348 - case 32: - goto tr348 - case 40: - goto tr187 - case 42: - goto tr84 - case 58: - goto st188 - case 59: - goto st67 - case 95: - goto st281 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st281 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st281 - } - default: - goto st281 - } - goto st0 -tr348: -// line 107 "parseqt.rl" - - m1 = p; m4 = 0 -// line 109 "parseqt.rl" - - m3 = p; f = Func{Name: data[m2:m3], Type: data[m0:m1], Addr: m4} - goto st282 - st282: - if p++; p == pe { - goto _test_eof282 - } - st_case_282: -// line 8977 "parseqt.go" - switch data[p] { - case 9: - goto st282 - case 32: - goto st282 - case 40: - goto tr124 - case 42: - goto tr87 - case 59: - goto st67 - case 95: - goto st65 - case 99: - goto st134 - case 103: - goto tr90 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 -tr338: -// line 107 "parseqt.rl" - - m0 = p -// line 109 "parseqt.rl" - - m2 = p - goto st283 - st283: - if p++; p == pe { - goto _test_eof283 - } - st_case_283: -// line 9024 "parseqt.go" - switch data[p] { - case 9: - goto tr339 - case 32: - goto tr339 - case 40: - goto st75 - case 42: - goto tr84 - case 58: - goto st188 - case 59: - goto st67 - case 95: - goto st273 - case 108: - goto st284 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st273 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st273 - } - default: - goto st273 - } - goto st0 - st284: - if p++; p == pe { - goto _test_eof284 - } - st_case_284: - switch data[p] { - case 9: - goto tr339 - case 32: - goto tr339 - case 40: - goto st75 - case 42: - goto tr84 - case 58: - goto st188 - case 59: - goto st67 - case 95: - goto st285 - case 99: - goto st287 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st285 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st285 - } - default: - goto st285 - } - goto st0 - st285: - if p++; p == pe { - goto _test_eof285 - } - st_case_285: - switch data[p] { - case 9: - goto tr353 - case 32: - goto tr353 - case 40: - goto tr122 - case 42: - goto tr84 - case 58: - goto st188 - case 95: - goto st285 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st285 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st285 - } - default: - goto st285 - } - goto st0 -tr353: -// line 107 "parseqt.rl" - - m1 = p; m4 = 0 -// line 109 "parseqt.rl" - - m3 = p; f = Func{Name: data[m2:m3], Type: data[m0:m1], Addr: m4} - goto st286 - st286: - if p++; p == pe { - goto _test_eof286 - } - st_case_286: -// line 9141 "parseqt.go" - switch data[p] { - case 9: - goto st286 - case 32: - goto st286 - case 40: - goto tr124 - case 42: - goto tr87 - case 95: - goto st65 - case 99: - goto st134 - case 103: - goto tr90 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 - st287: - if p++; p == pe { - goto _test_eof287 - } - st_case_287: - switch data[p] { - case 9: - goto tr353 - case 32: - goto tr353 - case 40: - goto tr122 - case 42: - goto tr84 - case 58: - goto st188 - case 95: - goto st285 - case 111: - goto st288 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st285 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st285 - } - default: - goto st285 - } - goto st0 - st288: - if p++; p == pe { - goto _test_eof288 - } - st_case_288: - switch data[p] { - case 9: - goto tr353 - case 32: - goto tr353 - case 40: - goto tr122 - case 42: - goto tr84 - case 58: - goto st188 - case 95: - goto st285 - case 110: - goto st289 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st285 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st285 - } - default: - goto st285 - } - goto st0 - st289: - if p++; p == pe { - goto _test_eof289 - } - st_case_289: - switch data[p] { - case 9: - goto tr353 - case 32: - goto tr353 - case 40: - goto tr122 - case 42: - goto tr84 - case 58: - goto st188 - case 95: - goto st285 - case 115: - goto st290 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st285 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st285 - } - default: - goto st285 - } - goto st0 - st290: - if p++; p == pe { - goto _test_eof290 - } - st_case_290: - switch data[p] { - case 9: - goto tr353 - case 32: - goto tr353 - case 40: - goto tr122 - case 42: - goto tr84 - case 58: - goto st188 - case 95: - goto st285 - case 116: - goto st291 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st285 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st285 - } - default: - goto st285 - } - goto st0 - st291: - if p++; p == pe { - goto _test_eof291 - } - st_case_291: - switch data[p] { - case 9: - goto tr348 - case 32: - goto tr348 - case 40: - goto tr122 - case 42: - goto tr84 - case 58: - goto st188 - case 59: - goto st67 - case 95: - goto st285 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st285 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st285 - } - default: - goto st285 - } - goto st0 -tr70: -// line 84 "parseqt.rl" - - m0 = p -// line 107 "parseqt.rl" - - m0 = p - goto st292 - st292: - if p++; p == pe { - goto _test_eof292 - } - st_case_292: -// line 9356 "parseqt.go" - switch data[p] { - case 9: - goto tr82 - case 32: - goto tr82 - case 40: - goto tr83 - case 42: - goto tr84 - case 58: - goto st188 - case 95: - goto st62 - case 110: - goto st293 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st62 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st62 - } - default: - goto st62 - } - goto st0 - st293: - if p++; p == pe { - goto _test_eof293 - } - st_case_293: - switch data[p] { - case 9: - goto tr82 - case 32: - goto tr82 - case 40: - goto tr83 - case 42: - goto tr84 - case 58: - goto st188 - case 95: - goto st62 - case 117: - goto st294 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st62 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st62 - } - default: - goto st62 - } - goto st0 - st294: - if p++; p == pe { - goto _test_eof294 - } - st_case_294: - switch data[p] { - case 9: - goto tr82 - case 32: - goto tr82 - case 40: - goto tr83 - case 42: - goto tr84 - case 58: - goto st188 - case 95: - goto st62 - case 109: - goto st295 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st62 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st62 - } - default: - goto st62 - } - goto st0 - st295: - if p++; p == pe { - goto _test_eof295 - } - st_case_295: - switch data[p] { - case 9: - goto tr82 - case 32: - goto tr362 - case 40: - goto tr83 - case 42: - goto tr84 - case 58: - goto st188 - case 95: - goto st62 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st62 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st62 - } - default: - goto st62 - } - goto st0 -tr362: -// line 107 "parseqt.rl" - - m1 = p; m4 = 0 - goto st296 - st296: - if p++; p == pe { - goto _test_eof296 - } - st_case_296: -// line 9496 "parseqt.go" - switch data[p] { - case 9: - goto st63 - case 32: - goto st63 - case 42: - goto tr87 - case 79: - goto st297 - case 95: - goto st65 - case 99: - goto st134 - case 103: - goto tr90 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 - st297: - if p++; p == pe { - goto _test_eof297 - } - st_case_297: - switch data[p] { - case 9: - goto st66 - case 32: - goto st66 - case 40: - goto st75 - case 59: - goto st67 - case 95: - goto st65 - case 112: - goto st298 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 - st298: - if p++; p == pe { - goto _test_eof298 - } - st_case_298: - switch data[p] { - case 9: - goto st66 - case 32: - goto st66 - case 40: - goto st75 - case 59: - goto st67 - case 95: - goto st65 - case 101: - goto st299 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 - st299: - if p++; p == pe { - goto _test_eof299 - } - st_case_299: - switch data[p] { - case 9: - goto st66 - case 32: - goto st66 - case 40: - goto st75 - case 59: - goto st67 - case 95: - goto st65 - case 110: - goto st300 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 - st300: - if p++; p == pe { - goto _test_eof300 - } - st_case_300: - switch data[p] { - case 9: - goto st66 - case 32: - goto st66 - case 40: - goto st75 - case 59: - goto st67 - case 71: - goto st301 - case 95: - goto st65 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 - st301: - if p++; p == pe { - goto _test_eof301 - } - st_case_301: - switch data[p] { - case 9: - goto st66 - case 32: - goto st66 - case 40: - goto st75 - case 59: - goto st67 - case 76: - goto st302 - case 95: - goto st65 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 - st302: - if p++; p == pe { - goto _test_eof302 - } - st_case_302: - switch data[p] { - case 9: - goto st66 - case 32: - goto st66 - case 40: - goto st75 - case 59: - goto st67 - case 70: - goto st303 - case 95: - goto st65 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 - st303: - if p++; p == pe { - goto _test_eof303 - } - st_case_303: - switch data[p] { - case 9: - goto st66 - case 32: - goto st66 - case 40: - goto st75 - case 59: - goto st67 - case 95: - goto st65 - case 101: - goto st304 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 - st304: - if p++; p == pe { - goto _test_eof304 - } - st_case_304: - switch data[p] { - case 9: - goto st66 - case 32: - goto st66 - case 40: - goto st75 - case 59: - goto st67 - case 95: - goto st65 - case 97: - goto st305 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 98 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 - st305: - if p++; p == pe { - goto _test_eof305 - } - st_case_305: - switch data[p] { - case 9: - goto st66 - case 32: - goto st66 - case 40: - goto st75 - case 59: - goto st67 - case 95: - goto st65 - case 116: - goto st306 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 - st306: - if p++; p == pe { - goto _test_eof306 - } - st_case_306: - switch data[p] { - case 9: - goto st66 - case 32: - goto st66 - case 40: - goto st75 - case 59: - goto st67 - case 95: - goto st65 - case 117: - goto st307 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 - st307: - if p++; p == pe { - goto _test_eof307 - } - st_case_307: - switch data[p] { - case 9: - goto st66 - case 32: - goto st66 - case 40: - goto st75 - case 59: - goto st67 - case 95: - goto st65 - case 114: - goto st308 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 - st308: - if p++; p == pe { - goto _test_eof308 - } - st_case_308: - switch data[p] { - case 9: - goto st66 - case 32: - goto st66 - case 40: - goto st75 - case 59: - goto st67 - case 95: - goto st65 - case 101: - goto st309 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 - st309: - if p++; p == pe { - goto _test_eof309 - } - st_case_309: - switch data[p] { - case 9: - goto st310 - case 10: - goto tr377 - case 32: - goto st310 - case 40: - goto st75 - case 59: - goto st67 - case 95: - goto st65 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 - st310: - if p++; p == pe { - goto _test_eof310 - } - st_case_310: - switch data[p] { - case 9: - goto st310 - case 10: - goto tr377 - case 32: - goto st310 - case 59: - goto st67 - case 99: - goto st68 - case 123: - goto st73 - } - goto st0 -tr377: -// line 47 "parseqt.rl" - - curline++ - goto st311 - st311: - if p++; p == pe { - goto _test_eof311 - } - st_case_311: -// line 9998 "parseqt.go" - switch data[p] { - case 9: - goto st311 - case 32: - goto st311 - case 123: - goto st312 - } - goto st0 - st312: - if p++; p == pe { - goto _test_eof312 - } - st_case_312: - switch data[p] { - case 9: - goto st312 - case 10: - goto tr380 - case 32: - goto st312 - } - goto st0 -tr380: -// line 47 "parseqt.rl" - - curline++ - goto st313 - st313: - if p++; p == pe { - goto _test_eof313 - } - st_case_313: -// line 10032 "parseqt.go" - switch data[p] { - case 9: - goto st313 - case 32: - goto st313 - case 95: - goto tr382 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto tr382 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto tr382 - } - default: - goto tr382 - } - goto st0 -tr382: -// line 122 "parseqt.rl" - - m0 = p - goto st314 - st314: - if p++; p == pe { - goto _test_eof314 - } - st_case_314: -// line 10064 "parseqt.go" - switch data[p] { - case 9: - goto tr383 - case 32: - goto tr383 - case 61: - goto tr385 - case 95: - goto st314 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st314 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st314 - } - default: - goto st314 - } - goto st0 -tr383: -// line 122 "parseqt.rl" - - m1 = p - goto st315 - st315: - if p++; p == pe { - goto _test_eof315 - } - st_case_315: -// line 10098 "parseqt.go" - switch data[p] { - case 9: - goto st315 - case 32: - goto st315 - case 61: - goto st316 - } - goto st0 -tr385: -// line 122 "parseqt.rl" - - m1 = p - goto st316 - st316: - if p++; p == pe { - goto _test_eof316 - } - st_case_316: -// line 10118 "parseqt.go" - switch data[p] { - case 9: - goto st316 - case 32: - goto st316 - case 48: - goto tr388 - } - goto st0 -tr388: -// line 122 "parseqt.rl" - - m2 = p - goto st317 - st317: - if p++; p == pe { - goto _test_eof317 - } - st_case_317: -// line 10138 "parseqt.go" - if data[p] == 120 { - goto st318 - } - goto st0 - st318: - if p++; p == pe { - goto _test_eof318 - } - st_case_318: - if 48 <= data[p] && data[p] <= 57 { - goto st319 - } - goto st0 - st319: - if p++; p == pe { - goto _test_eof319 - } - st_case_319: - switch data[p] { - case 9: - goto tr391 - case 10: - goto tr392 - case 32: - goto tr391 - case 44: - goto tr391 - } - if 48 <= data[p] && data[p] <= 57 { - goto st319 - } - goto st0 -tr391: -// line 122 "parseqt.rl" - - m3 = p - goto st320 - st320: - if p++; p == pe { - goto _test_eof320 - } - st_case_320: -// line 10181 "parseqt.go" - switch data[p] { - case 9: - goto st320 - case 10: - goto tr394 - case 32: - goto st320 - } - goto st0 -tr392: -// line 122 "parseqt.rl" - - m3 = p -// line 123 "parseqt.rl" - - header.FeatureFlags = append(header.FeatureFlags, Const{Name: data[m0:m1], Value: data[m2:m3]}) -// line 47 "parseqt.rl" - - curline++ - goto st321 -tr394: -// line 123 "parseqt.rl" - - header.FeatureFlags = append(header.FeatureFlags, Const{Name: data[m0:m1], Value: data[m2:m3]}) -// line 47 "parseqt.rl" - - curline++ - goto st321 - st321: - if p++; p == pe { - goto _test_eof321 - } - st_case_321: -// line 10215 "parseqt.go" - switch data[p] { - case 9: - goto st321 - case 32: - goto st321 - case 95: - goto tr382 - case 125: - goto st322 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto tr382 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto tr382 - } - default: - goto tr382 - } - goto st0 - st322: - if p++; p == pe { - goto _test_eof322 - } - st_case_322: - if data[p] == 59 { - goto st323 - } - goto st0 - st323: - if p++; p == pe { - goto _test_eof323 - } - st_case_323: - if data[p] == 10 { - goto tr398 - } - goto st0 -tr71: -// line 84 "parseqt.rl" - - m0 = p -// line 107 "parseqt.rl" - - m0 = p - goto st324 - st324: - if p++; p == pe { - goto _test_eof324 - } - st_case_324: -// line 10270 "parseqt.go" - switch data[p] { - case 9: - goto tr82 - case 32: - goto tr82 - case 40: - goto tr83 - case 42: - goto tr84 - case 58: - goto st188 - case 95: - goto st62 - case 114: - goto st325 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st62 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st62 - } - default: - goto st62 - } - goto st0 - st325: - if p++; p == pe { - goto _test_eof325 - } - st_case_325: - switch data[p] { - case 9: - goto tr82 - case 32: - goto tr82 - case 40: - goto tr83 - case 42: - goto tr84 - case 58: - goto st188 - case 95: - goto st62 - case 105: - goto st326 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st62 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st62 - } - default: - goto st62 - } - goto st0 - st326: - if p++; p == pe { - goto _test_eof326 - } - st_case_326: - switch data[p] { - case 9: - goto tr82 - case 32: - goto tr82 - case 40: - goto tr83 - case 42: - goto tr84 - case 58: - goto st188 - case 95: - goto st62 - case 101: - goto st327 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st62 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st62 - } - default: - goto st62 - } - goto st0 - st327: - if p++; p == pe { - goto _test_eof327 - } - st_case_327: - switch data[p] { - case 9: - goto tr82 - case 32: - goto tr82 - case 40: - goto tr83 - case 42: - goto tr84 - case 58: - goto st188 - case 95: - goto st62 - case 110: - goto st328 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st62 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st62 - } - default: - goto st62 - } - goto st0 - st328: - if p++; p == pe { - goto _test_eof328 - } - st_case_328: - switch data[p] { - case 9: - goto tr82 - case 32: - goto tr82 - case 40: - goto tr83 - case 42: - goto tr84 - case 58: - goto st188 - case 95: - goto st62 - case 100: - goto st329 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st62 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st62 - } - default: - goto st62 - } - goto st0 - st329: - if p++; p == pe { - goto _test_eof329 - } - st_case_329: - switch data[p] { - case 9: - goto tr404 - case 32: - goto tr404 - case 40: - goto tr83 - case 42: - goto tr84 - case 58: - goto st188 - case 95: - goto st62 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st62 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st62 - } - default: - goto st62 - } - goto st0 -tr404: -// line 107 "parseqt.rl" - - m1 = p; m4 = 0 - goto st330 - st330: - if p++; p == pe { - goto _test_eof330 - } - st_case_330: -// line 10478 "parseqt.go" - switch data[p] { - case 9: - goto st330 - case 32: - goto st330 - case 42: - goto tr87 - case 95: - goto st65 - case 99: - goto st331 - case 103: - goto tr90 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 - st331: - if p++; p == pe { - goto _test_eof331 - } - st_case_331: - switch data[p] { - case 9: - goto st66 - case 32: - goto st66 - case 40: - goto st75 - case 59: - goto st67 - case 95: - goto st65 - case 108: - goto st332 - case 111: - goto st135 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 - st332: - if p++; p == pe { - goto _test_eof332 - } - st_case_332: - switch data[p] { - case 9: - goto st66 - case 32: - goto st66 - case 40: - goto st75 - case 59: - goto st67 - case 95: - goto st65 - case 97: - goto st333 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 98 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 - st333: - if p++; p == pe { - goto _test_eof333 - } - st_case_333: - switch data[p] { - case 9: - goto st66 - case 32: - goto st66 - case 40: - goto st75 - case 59: - goto st67 - case 95: - goto st65 - case 115: - goto st334 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 - st334: - if p++; p == pe { - goto _test_eof334 - } - st_case_334: - switch data[p] { - case 9: - goto st66 - case 32: - goto st66 - case 40: - goto st75 - case 59: - goto st67 - case 95: - goto st65 - case 115: - goto st335 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 - st335: - if p++; p == pe { - goto _test_eof335 - } - st_case_335: - switch data[p] { - case 9: - goto st336 - case 32: - goto st336 - case 40: - goto st75 - case 59: - goto st67 - case 95: - goto st65 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 - st336: - if p++; p == pe { - goto _test_eof336 - } - st_case_336: - switch data[p] { - case 9: - goto st336 - case 32: - goto st336 - case 59: - goto st67 - case 95: - goto st337 - case 99: - goto st340 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st337 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st337 - } - default: - goto st337 - } - goto st0 - st337: - if p++; p == pe { - goto _test_eof337 - } - st_case_337: - switch data[p] { - case 9: - goto st338 - case 32: - goto st338 - case 59: - goto st339 - case 95: - goto st337 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st337 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st337 - } - default: - goto st337 - } - goto st0 - st338: - if p++; p == pe { - goto _test_eof338 - } - st_case_338: - switch data[p] { - case 9: - goto st338 - case 32: - goto st338 - case 59: - goto st339 - } - goto st0 - st339: - if p++; p == pe { - goto _test_eof339 - } - st_case_339: - switch data[p] { - case 9: - goto st339 - case 10: - goto tr416 - case 32: - goto st339 - } - goto st0 - st340: - if p++; p == pe { - goto _test_eof340 - } - st_case_340: - switch data[p] { - case 9: - goto st338 - case 32: - goto st338 - case 59: - goto st339 - case 95: - goto st337 - case 111: - goto st341 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st337 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st337 - } - default: - goto st337 - } - goto st0 - st341: - if p++; p == pe { - goto _test_eof341 - } - st_case_341: - switch data[p] { - case 9: - goto st338 - case 32: - goto st338 - case 59: - goto st339 - case 95: - goto st337 - case 110: - goto st342 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st337 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st337 - } - default: - goto st337 - } - goto st0 - st342: - if p++; p == pe { - goto _test_eof342 - } - st_case_342: - switch data[p] { - case 9: - goto st338 - case 32: - goto st338 - case 59: - goto st339 - case 95: - goto st337 - case 115: - goto st343 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st337 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st337 - } - default: - goto st337 - } - goto st0 - st343: - if p++; p == pe { - goto _test_eof343 - } - st_case_343: - switch data[p] { - case 9: - goto st338 - case 32: - goto st338 - case 59: - goto st339 - case 95: - goto st337 - case 116: - goto st344 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st337 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st337 - } - default: - goto st337 - } - goto st0 - st344: - if p++; p == pe { - goto _test_eof344 - } - st_case_344: - switch data[p] { - case 9: - goto st345 - case 32: - goto st345 - case 59: - goto st346 - case 95: - goto st337 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st337 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st337 - } - default: - goto st337 - } - goto st0 - st345: - if p++; p == pe { - goto _test_eof345 - } - st_case_345: - switch data[p] { - case 9: - goto st345 - case 32: - goto st345 - case 59: - goto st346 - case 123: - goto st73 - } - goto st0 - st346: - if p++; p == pe { - goto _test_eof346 - } - st_case_346: - switch data[p] { - case 9: - goto st346 - case 10: - goto tr416 - case 32: - goto st346 - } - goto st0 -tr72: -// line 84 "parseqt.rl" - - m0 = p -// line 107 "parseqt.rl" - - m0 = p - goto st347 - st347: - if p++; p == pe { - goto _test_eof347 - } - st_case_347: -// line 10957 "parseqt.go" - switch data[p] { - case 9: - goto tr82 - case 32: - goto tr82 - case 40: - goto tr83 - case 42: - goto tr84 - case 58: - goto st188 - case 95: - goto st62 - case 114: - goto st348 - case 117: - goto st362 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st62 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st62 - } - default: - goto st62 - } - goto st0 - st348: - if p++; p == pe { - goto _test_eof348 - } - st_case_348: - switch data[p] { - case 9: - goto tr82 - case 32: - goto tr82 - case 40: - goto tr83 - case 42: - goto tr84 - case 58: - goto st188 - case 95: - goto st62 - case 105: - goto st349 - case 111: - goto st356 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st62 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st62 - } - default: - goto st62 - } - goto st0 - st349: - if p++; p == pe { - goto _test_eof349 - } - st_case_349: - switch data[p] { - case 9: - goto tr82 - case 32: - goto tr82 - case 40: - goto tr83 - case 42: - goto tr84 - case 58: - goto st188 - case 95: - goto st62 - case 118: - goto st350 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st62 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st62 - } - default: - goto st62 - } - goto st0 - st350: - if p++; p == pe { - goto _test_eof350 - } - st_case_350: - switch data[p] { - case 9: - goto tr82 - case 32: - goto tr82 - case 40: - goto tr83 - case 42: - goto tr84 - case 58: - goto st188 - case 95: - goto st62 - case 97: - goto st351 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st62 - } - case data[p] > 90: - if 98 <= data[p] && data[p] <= 122 { - goto st62 - } - default: - goto st62 - } - goto st0 - st351: - if p++; p == pe { - goto _test_eof351 - } - st_case_351: - switch data[p] { - case 9: - goto tr82 - case 32: - goto tr82 - case 40: - goto tr83 - case 42: - goto tr84 - case 58: - goto st188 - case 95: - goto st62 - case 116: - goto st352 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st62 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st62 - } - default: - goto st62 - } - goto st0 - st352: - if p++; p == pe { - goto _test_eof352 - } - st_case_352: - switch data[p] { - case 9: - goto tr82 - case 32: - goto tr82 - case 40: - goto tr83 - case 42: - goto tr84 - case 58: - goto st188 - case 95: - goto st62 - case 101: - goto st353 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st62 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st62 - } - default: - goto st62 - } - goto st0 - st353: - if p++; p == pe { - goto _test_eof353 - } - st_case_353: - switch data[p] { - case 9: - goto tr82 - case 32: - goto tr82 - case 40: - goto tr83 - case 42: - goto tr84 - case 58: - goto st354 - case 95: - goto st62 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st62 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st62 - } - default: - goto st62 - } - goto st0 - st354: - if p++; p == pe { - goto _test_eof354 - } - st_case_354: - switch data[p] { - case 9: - goto st355 - case 10: - goto tr433 - case 32: - goto st355 - case 42: - goto tr252 - case 95: - goto st188 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 58 { - goto st188 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st188 - } - default: - goto st188 - } - goto st0 - st355: - if p++; p == pe { - goto _test_eof355 - } - st_case_355: - switch data[p] { - case 9: - goto st355 - case 10: - goto tr433 - case 32: - goto st355 - case 42: - goto tr252 - case 95: - goto st65 - case 99: - goto st193 - case 103: - goto st191 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 - st356: - if p++; p == pe { - goto _test_eof356 - } - st_case_356: - switch data[p] { - case 9: - goto tr82 - case 32: - goto tr82 - case 40: - goto tr83 - case 42: - goto tr84 - case 58: - goto st188 - case 95: - goto st62 - case 116: - goto st357 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st62 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st62 - } - default: - goto st62 - } - goto st0 - st357: - if p++; p == pe { - goto _test_eof357 - } - st_case_357: - switch data[p] { - case 9: - goto tr82 - case 32: - goto tr82 - case 40: - goto tr83 - case 42: - goto tr84 - case 58: - goto st188 - case 95: - goto st62 - case 101: - goto st358 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st62 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st62 - } - default: - goto st62 - } - goto st0 - st358: - if p++; p == pe { - goto _test_eof358 - } - st_case_358: - switch data[p] { - case 9: - goto tr82 - case 32: - goto tr82 - case 40: - goto tr83 - case 42: - goto tr84 - case 58: - goto st188 - case 95: - goto st62 - case 99: - goto st359 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st62 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st62 - } - default: - goto st62 - } - goto st0 - st359: - if p++; p == pe { - goto _test_eof359 - } - st_case_359: - switch data[p] { - case 9: - goto tr82 - case 32: - goto tr82 - case 40: - goto tr83 - case 42: - goto tr84 - case 58: - goto st188 - case 95: - goto st62 - case 116: - goto st360 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st62 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st62 - } - default: - goto st62 - } - goto st0 - st360: - if p++; p == pe { - goto _test_eof360 - } - st_case_360: - switch data[p] { - case 9: - goto tr82 - case 32: - goto tr82 - case 40: - goto tr83 - case 42: - goto tr84 - case 58: - goto st188 - case 95: - goto st62 - case 101: - goto st361 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st62 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st62 - } - default: - goto st62 - } - goto st0 - st361: - if p++; p == pe { - goto _test_eof361 - } - st_case_361: - switch data[p] { - case 9: - goto tr82 - case 32: - goto tr82 - case 40: - goto tr83 - case 42: - goto tr84 - case 58: - goto st188 - case 95: - goto st62 - case 100: - goto st353 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st62 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st62 - } - default: - goto st62 - } - goto st0 - st362: - if p++; p == pe { - goto _test_eof362 - } - st_case_362: - switch data[p] { - case 9: - goto tr82 - case 32: - goto tr82 - case 40: - goto tr83 - case 42: - goto tr84 - case 58: - goto st188 - case 95: - goto st62 - case 98: - goto st363 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st62 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st62 - } - default: - goto st62 - } - goto st0 - st363: - if p++; p == pe { - goto _test_eof363 - } - st_case_363: - switch data[p] { - case 9: - goto tr82 - case 32: - goto tr82 - case 40: - goto tr83 - case 42: - goto tr84 - case 58: - goto st188 - case 95: - goto st62 - case 108: - goto st364 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st62 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st62 - } - default: - goto st62 - } - goto st0 - st364: - if p++; p == pe { - goto _test_eof364 - } - st_case_364: - switch data[p] { - case 9: - goto tr82 - case 32: - goto tr82 - case 40: - goto tr83 - case 42: - goto tr84 - case 58: - goto st188 - case 95: - goto st62 - case 105: - goto st365 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st62 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st62 - } - default: - goto st62 - } - goto st0 - st365: - if p++; p == pe { - goto _test_eof365 - } - st_case_365: - switch data[p] { - case 9: - goto tr82 - case 32: - goto tr82 - case 40: - goto tr83 - case 42: - goto tr84 - case 58: - goto st188 - case 95: - goto st62 - case 99: - goto st366 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st62 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st62 - } - default: - goto st62 - } - goto st0 - st366: - if p++; p == pe { - goto _test_eof366 - } - st_case_366: - switch data[p] { - case 9: - goto tr82 - case 32: - goto tr82 - case 40: - goto tr83 - case 42: - goto tr84 - case 58: - goto st367 - case 95: - goto st62 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st62 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st62 - } - default: - goto st62 - } - goto st0 - st367: - if p++; p == pe { - goto _test_eof367 - } - st_case_367: - switch data[p] { - case 9: - goto st368 - case 10: - goto tr445 - case 32: - goto st368 - case 42: - goto tr252 - case 95: - goto st188 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 58 { - goto st188 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st188 - } - default: - goto st188 - } - goto st0 - st368: - if p++; p == pe { - goto _test_eof368 - } - st_case_368: - switch data[p] { - case 9: - goto st368 - case 10: - goto tr445 - case 32: - goto st368 - case 42: - goto tr252 - case 95: - goto st65 - case 99: - goto st193 - case 103: - goto st191 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 -tr73: -// line 84 "parseqt.rl" - - m0 = p -// line 107 "parseqt.rl" - - m0 = p - goto st369 - st369: - if p++; p == pe { - goto _test_eof369 - } - st_case_369: -// line 11706 "parseqt.go" - switch data[p] { - case 9: - goto tr82 - case 32: - goto tr82 - case 40: - goto tr83 - case 42: - goto tr84 - case 58: - goto st188 - case 95: - goto st62 - case 116: - goto st370 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st62 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st62 - } - default: - goto st62 - } - goto st0 - st370: - if p++; p == pe { - goto _test_eof370 - } - st_case_370: - switch data[p] { - case 9: - goto tr82 - case 32: - goto tr82 - case 40: - goto tr83 - case 42: - goto tr84 - case 58: - goto st188 - case 95: - goto st62 - case 97: - goto st371 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st62 - } - case data[p] > 90: - if 98 <= data[p] && data[p] <= 122 { - goto st62 - } - default: - goto st62 - } - goto st0 - st371: - if p++; p == pe { - goto _test_eof371 - } - st_case_371: - switch data[p] { - case 9: - goto tr82 - case 32: - goto tr82 - case 40: - goto tr83 - case 42: - goto tr84 - case 58: - goto st188 - case 95: - goto st62 - case 116: - goto st372 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st62 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st62 - } - default: - goto st62 - } - goto st0 - st372: - if p++; p == pe { - goto _test_eof372 - } - st_case_372: - switch data[p] { - case 9: - goto tr82 - case 32: - goto tr82 - case 40: - goto tr83 - case 42: - goto tr84 - case 58: - goto st188 - case 95: - goto st62 - case 105: - goto st373 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st62 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st62 - } - default: - goto st62 - } - goto st0 - st373: - if p++; p == pe { - goto _test_eof373 - } - st_case_373: - switch data[p] { - case 9: - goto tr82 - case 32: - goto tr82 - case 40: - goto tr83 - case 42: - goto tr84 - case 58: - goto st188 - case 95: - goto st62 - case 99: - goto st374 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st62 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st62 - } - default: - goto st62 - } - goto st0 - st374: - if p++; p == pe { - goto _test_eof374 - } - st_case_374: - switch data[p] { - case 9: - goto tr451 - case 32: - goto tr451 - case 40: - goto tr83 - case 42: - goto tr84 - case 58: - goto st188 - case 95: - goto st62 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st62 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st62 - } - default: - goto st62 - } - goto st0 -tr451: -// line 107 "parseqt.rl" - - m1 = p; m4 = 0 - goto st375 - st375: - if p++; p == pe { - goto _test_eof375 - } - st_case_375: -// line 11914 "parseqt.go" - switch data[p] { - case 9: - goto st375 - case 32: - goto st375 - case 42: - goto tr87 - case 58: - goto st188 - case 95: - goto st376 - case 99: - goto st377 - case 103: - goto tr455 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st376 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st376 - } - default: - goto st376 - } - goto st0 - st376: - if p++; p == pe { - goto _test_eof376 - } - st_case_376: - switch data[p] { - case 9: - goto st198 - case 32: - goto st198 - case 40: - goto st75 - case 42: - goto tr252 - case 58: - goto st188 - case 59: - goto st67 - case 95: - goto st376 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st376 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st376 - } - default: - goto st376 - } - goto st0 - st377: - if p++; p == pe { - goto _test_eof377 - } - st_case_377: - switch data[p] { - case 9: - goto st198 - case 32: - goto st198 - case 40: - goto st75 - case 42: - goto tr252 - case 58: - goto st188 - case 59: - goto st67 - case 95: - goto st376 - case 111: - goto st378 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st376 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st376 - } - default: - goto st376 - } - goto st0 - st378: - if p++; p == pe { - goto _test_eof378 - } - st_case_378: - switch data[p] { - case 9: - goto st198 - case 32: - goto st198 - case 40: - goto st75 - case 42: - goto tr252 - case 58: - goto st188 - case 59: - goto st67 - case 95: - goto st376 - case 110: - goto st379 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st376 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st376 - } - default: - goto st376 - } - goto st0 - st379: - if p++; p == pe { - goto _test_eof379 - } - st_case_379: - switch data[p] { - case 9: - goto st198 - case 32: - goto st198 - case 40: - goto st75 - case 42: - goto tr252 - case 58: - goto st188 - case 59: - goto st67 - case 95: - goto st376 - case 115: - goto st380 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st376 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st376 - } - default: - goto st376 - } - goto st0 - st380: - if p++; p == pe { - goto _test_eof380 - } - st_case_380: - switch data[p] { - case 9: - goto st198 - case 32: - goto st198 - case 40: - goto st75 - case 42: - goto tr252 - case 58: - goto st188 - case 59: - goto st67 - case 95: - goto st376 - case 116: - goto st381 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st376 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st376 - } - default: - goto st376 - } - goto st0 - st381: - if p++; p == pe { - goto _test_eof381 - } - st_case_381: - switch data[p] { - case 9: - goto st382 - case 32: - goto st382 - case 40: - goto st75 - case 42: - goto tr87 - case 58: - goto st188 - case 59: - goto st67 - case 95: - goto st376 - case 103: - goto tr461 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st376 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st376 - } - default: - goto st376 - } - goto st0 - st382: - if p++; p == pe { - goto _test_eof382 - } - st_case_382: - switch data[p] { - case 9: - goto st382 - case 32: - goto st382 - case 42: - goto tr87 - case 58: - goto st188 - case 59: - goto st67 - case 95: - goto st376 - case 99: - goto st383 - case 103: - goto tr455 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st376 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st376 - } - default: - goto st376 - } - goto st0 - st383: - if p++; p == pe { - goto _test_eof383 - } - st_case_383: - switch data[p] { - case 9: - goto st198 - case 32: - goto st198 - case 40: - goto st75 - case 42: - goto tr252 - case 58: - goto st188 - case 59: - goto st67 - case 95: - goto st376 - case 111: - goto st384 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st376 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st376 - } - default: - goto st376 - } - goto st0 - st384: - if p++; p == pe { - goto _test_eof384 - } - st_case_384: - switch data[p] { - case 9: - goto st198 - case 32: - goto st198 - case 40: - goto st75 - case 42: - goto tr252 - case 58: - goto st188 - case 59: - goto st67 - case 95: - goto st376 - case 110: - goto st385 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st376 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st376 - } - default: - goto st376 - } - goto st0 - st385: - if p++; p == pe { - goto _test_eof385 - } - st_case_385: - switch data[p] { - case 9: - goto st198 - case 32: - goto st198 - case 40: - goto st75 - case 42: - goto tr252 - case 58: - goto st188 - case 59: - goto st67 - case 95: - goto st376 - case 115: - goto st386 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st376 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st376 - } - default: - goto st376 - } - goto st0 - st386: - if p++; p == pe { - goto _test_eof386 - } - st_case_386: - switch data[p] { - case 9: - goto st198 - case 32: - goto st198 - case 40: - goto st75 - case 42: - goto tr252 - case 58: - goto st188 - case 59: - goto st67 - case 95: - goto st376 - case 116: - goto st387 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st376 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st376 - } - default: - goto st376 - } - goto st0 - st387: - if p++; p == pe { - goto _test_eof387 - } - st_case_387: - switch data[p] { - case 9: - goto st139 - case 32: - goto st139 - case 40: - goto st75 - case 42: - goto tr87 - case 58: - goto st188 - case 59: - goto st67 - case 95: - goto st376 - case 103: - goto tr461 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st376 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st376 - } - default: - goto st376 - } - goto st0 -tr461: -// line 109 "parseqt.rl" - - m2 = p - goto st388 - st388: - if p++; p == pe { - goto _test_eof388 - } - st_case_388: -// line 12408 "parseqt.go" - switch data[p] { - case 9: - goto st198 - case 32: - goto st198 - case 40: - goto st75 - case 42: - goto tr252 - case 58: - goto st188 - case 59: - goto st67 - case 95: - goto st376 - case 108: - goto st389 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st376 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st376 - } - default: - goto st376 - } - goto st0 - st389: - if p++; p == pe { - goto _test_eof389 - } - st_case_389: - switch data[p] { - case 9: - goto st198 - case 32: - goto st198 - case 40: - goto st75 - case 42: - goto tr252 - case 58: - goto st188 - case 59: - goto st67 - case 95: - goto st390 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st390 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st390 - } - default: - goto st390 - } - goto st0 - st390: - if p++; p == pe { - goto _test_eof390 - } - st_case_390: - switch data[p] { - case 9: - goto tr469 - case 32: - goto tr469 - case 40: - goto tr187 - case 42: - goto tr252 - case 58: - goto st188 - case 59: - goto st67 - case 95: - goto st390 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st390 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st390 - } - default: - goto st390 - } - goto st0 -tr469: -// line 109 "parseqt.rl" - - m3 = p; f = Func{Name: data[m2:m3], Type: data[m0:m1], Addr: m4} - goto st391 - st391: - if p++; p == pe { - goto _test_eof391 - } - st_case_391: -// line 12524 "parseqt.go" - switch data[p] { - case 9: - goto st391 - case 32: - goto st391 - case 40: - goto tr124 - case 42: - goto tr252 - case 59: - goto st67 - case 95: - goto st65 - case 99: - goto st193 - case 103: - goto st191 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 -tr455: -// line 109 "parseqt.rl" - - m2 = p - goto st392 - st392: - if p++; p == pe { - goto _test_eof392 - } - st_case_392: -// line 12568 "parseqt.go" - switch data[p] { - case 9: - goto st198 - case 32: - goto st198 - case 40: - goto st75 - case 42: - goto tr252 - case 58: - goto st188 - case 59: - goto st67 - case 95: - goto st376 - case 108: - goto st393 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st376 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st376 - } - default: - goto st376 - } - goto st0 - st393: - if p++; p == pe { - goto _test_eof393 - } - st_case_393: - switch data[p] { - case 9: - goto st198 - case 32: - goto st198 - case 40: - goto st75 - case 42: - goto tr252 - case 58: - goto st188 - case 59: - goto st67 - case 95: - goto st394 - case 99: - goto st396 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st394 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st394 - } - default: - goto st394 - } - goto st0 - st394: - if p++; p == pe { - goto _test_eof394 - } - st_case_394: - switch data[p] { - case 9: - goto tr474 - case 32: - goto tr474 - case 40: - goto tr122 - case 42: - goto tr252 - case 58: - goto st188 - case 95: - goto st394 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st394 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st394 - } - default: - goto st394 - } - goto st0 -tr474: -// line 109 "parseqt.rl" - - m3 = p; f = Func{Name: data[m2:m3], Type: data[m0:m1], Addr: m4} - goto st395 - st395: - if p++; p == pe { - goto _test_eof395 - } - st_case_395: -// line 12682 "parseqt.go" - switch data[p] { - case 9: - goto st395 - case 32: - goto st395 - case 40: - goto tr124 - case 42: - goto tr252 - case 95: - goto st65 - case 99: - goto st193 - case 103: - goto st191 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st65 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st65 - } - default: - goto st65 - } - goto st0 - st396: - if p++; p == pe { - goto _test_eof396 - } - st_case_396: - switch data[p] { - case 9: - goto tr474 - case 32: - goto tr474 - case 40: - goto tr122 - case 42: - goto tr252 - case 58: - goto st188 - case 95: - goto st394 - case 111: - goto st397 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st394 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st394 - } - default: - goto st394 - } - goto st0 - st397: - if p++; p == pe { - goto _test_eof397 - } - st_case_397: - switch data[p] { - case 9: - goto tr474 - case 32: - goto tr474 - case 40: - goto tr122 - case 42: - goto tr252 - case 58: - goto st188 - case 95: - goto st394 - case 110: - goto st398 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st394 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st394 - } - default: - goto st394 - } - goto st0 - st398: - if p++; p == pe { - goto _test_eof398 - } - st_case_398: - switch data[p] { - case 9: - goto tr474 - case 32: - goto tr474 - case 40: - goto tr122 - case 42: - goto tr252 - case 58: - goto st188 - case 95: - goto st394 - case 115: - goto st399 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st394 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st394 - } - default: - goto st394 - } - goto st0 - st399: - if p++; p == pe { - goto _test_eof399 - } - st_case_399: - switch data[p] { - case 9: - goto tr474 - case 32: - goto tr474 - case 40: - goto tr122 - case 42: - goto tr252 - case 58: - goto st188 - case 95: - goto st394 - case 116: - goto st400 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st394 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st394 - } - default: - goto st394 - } - goto st0 - st400: - if p++; p == pe { - goto _test_eof400 - } - st_case_400: - switch data[p] { - case 9: - goto tr469 - case 32: - goto tr469 - case 40: - goto tr122 - case 42: - goto tr252 - case 58: - goto st188 - case 59: - goto st67 - case 95: - goto st394 - case 123: - goto st73 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st394 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st394 - } - default: - goto st394 - } - goto st0 - st401: - if p++; p == pe { - goto _test_eof401 - } - st_case_401: - switch data[p] { - case 9: - goto st401 - case 32: - goto st401 - case 59: - goto st402 - } - goto st0 - st402: - if p++; p == pe { - goto _test_eof402 - } - st_case_402: - if data[p] == 10 { - goto tr481 - } - goto st0 - st403: - if p++; p == pe { - goto _test_eof403 - } - st_case_403: - if data[p] == 95 { - goto tr482 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto tr482 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto tr482 - } - default: - goto tr482 - } - goto st0 -tr482: -// line 84 "parseqt.rl" - - m0 = p - goto st404 - st404: - if p++; p == pe { - goto _test_eof404 - } - st_case_404: -// line 12938 "parseqt.go" - switch data[p] { - case 40: - goto tr83 - case 95: - goto st404 - } - switch { - case data[p] < 65: - if 48 <= data[p] && data[p] <= 57 { - goto st404 - } - case data[p] > 90: - if 97 <= data[p] && data[p] <= 122 { - goto st404 - } - default: - goto st404 - } - goto st0 - st405: - if p++; p == pe { - goto _test_eof405 - } - st_case_405: - if data[p] == 105 { - goto st406 - } - goto st0 - st406: - if p++; p == pe { - goto _test_eof406 - } - st_case_406: - if data[p] == 102 { - goto st407 - } - goto st0 - st407: - if p++; p == pe { - goto _test_eof407 - } - st_case_407: - if data[p] == 32 { - goto st408 - } - goto st0 - st408: - if p++; p == pe { - goto _test_eof408 - } - st_case_408: - if data[p] == 81 { - goto st409 - } - goto st0 - st409: - if p++; p == pe { - goto _test_eof409 - } - st_case_409: - if data[p] == 84 { - goto st410 - } - goto st0 - st410: - if p++; p == pe { - goto _test_eof410 - } - st_case_410: - if data[p] == 95 { - goto st411 - } - goto st0 - st411: - if p++; p == pe { - goto _test_eof411 - } - st_case_411: - if data[p] == 68 { - goto st412 - } - goto st0 - st412: - if p++; p == pe { - goto _test_eof412 - } - st_case_412: - if data[p] == 69 { - goto st413 - } - goto st0 - st413: - if p++; p == pe { - goto _test_eof413 - } - st_case_413: - if data[p] == 80 { - goto st414 - } - goto st0 - st414: - if p++; p == pe { - goto _test_eof414 - } - st_case_414: - if data[p] == 82 { - goto st415 - } - goto st0 - st415: - if p++; p == pe { - goto _test_eof415 - } - st_case_415: - if data[p] == 69 { - goto st416 - } - goto st0 - st416: - if p++; p == pe { - goto _test_eof416 - } - st_case_416: - if data[p] == 67 { - goto st417 - } - goto st0 - st417: - if p++; p == pe { - goto _test_eof417 - } - st_case_417: - if data[p] == 65 { - goto st418 - } - goto st0 - st418: - if p++; p == pe { - goto _test_eof418 - } - st_case_418: - if data[p] == 84 { - goto st419 - } - goto st0 - st419: - if p++; p == pe { - goto _test_eof419 - } - st_case_419: - if data[p] == 69 { - goto st420 - } - goto st0 - st420: - if p++; p == pe { - goto _test_eof420 - } - st_case_420: - if data[p] == 68 { - goto st421 - } - goto st0 - st421: - if p++; p == pe { - goto _test_eof421 - } - st_case_421: - if data[p] == 95 { - goto st422 - } - goto st0 - st422: - if p++; p == pe { - goto _test_eof422 - } - st_case_422: - if data[p] == 83 { - goto st423 - } - goto st0 - st423: - if p++; p == pe { - goto _test_eof423 - } - st_case_423: - if data[p] == 73 { - goto st424 - } - goto st0 - st424: - if p++; p == pe { - goto _test_eof424 - } - st_case_424: - if data[p] == 78 { - goto st425 - } - goto st0 - st425: - if p++; p == pe { - goto _test_eof425 - } - st_case_425: - if data[p] == 67 { - goto st426 - } - goto st0 - st426: - if p++; p == pe { - goto _test_eof426 - } - st_case_426: - if data[p] == 69 { - goto st427 - } - goto st0 - st427: - if p++; p == pe { - goto _test_eof427 - } - st_case_427: - if data[p] == 40 { - goto st428 - } - goto st0 - st428: - if p++; p == pe { - goto _test_eof428 - } - st_case_428: - if data[p] == 10 { - goto st0 - } - goto st429 - st429: - if p++; p == pe { - goto _test_eof429 - } - st_case_429: - switch data[p] { - case 10: - goto st0 - case 41: - goto st430 - } - goto st429 - st430: - if p++; p == pe { - goto _test_eof430 - } - st_case_430: - switch data[p] { - case 9: - goto st430 - case 10: - goto tr509 - case 32: - goto st430 - case 41: - goto st430 - } - goto st429 -tr509: -// line 47 "parseqt.rl" - - curline++ - goto st431 - st431: - if p++; p == pe { - goto _test_eof431 - } - st_case_431: -// line 13212 "parseqt.go" - switch data[p] { - case 10: - goto tr511 - case 35: - goto st440 - } - goto st432 - st432: - if p++; p == pe { - goto _test_eof432 - } - st_case_432: - if data[p] == 10 { - goto tr511 - } - goto st432 -tr511: -// line 47 "parseqt.rl" - - curline++ - goto st433 - st433: - if p++; p == pe { - goto _test_eof433 - } - st_case_433: -// line 13239 "parseqt.go" - if data[p] == 35 { - goto st434 - } - goto st0 - st434: - if p++; p == pe { - goto _test_eof434 - } - st_case_434: - if data[p] == 101 { - goto st435 - } - goto st0 - st435: - if p++; p == pe { - goto _test_eof435 - } - st_case_435: - if data[p] == 110 { - goto st436 - } - goto st0 - st436: - if p++; p == pe { - goto _test_eof436 - } - st_case_436: - if data[p] == 100 { - goto st437 - } - goto st0 - st437: - if p++; p == pe { - goto _test_eof437 - } - st_case_437: - if data[p] == 105 { - goto st438 - } - goto st0 - st438: - if p++; p == pe { - goto _test_eof438 - } - st_case_438: - if data[p] == 102 { - goto st439 - } - goto st0 - st439: - if p++; p == pe { - goto _test_eof439 - } - st_case_439: - switch data[p] { - case 9: - goto st439 - case 10: - goto tr519 - case 32: - goto st439 - } - goto st0 - st440: - if p++; p == pe { - goto _test_eof440 - } - st_case_440: - switch data[p] { - case 10: - goto tr511 - case 101: - goto st441 - } - goto st432 - st441: - if p++; p == pe { - goto _test_eof441 - } - st_case_441: - switch data[p] { - case 10: - goto tr511 - case 110: - goto st442 - } - goto st432 - st442: - if p++; p == pe { - goto _test_eof442 - } - st_case_442: - switch data[p] { - case 10: - goto tr511 - case 100: - goto st443 - } - goto st432 - st443: - if p++; p == pe { - goto _test_eof443 - } - st_case_443: - switch data[p] { - case 10: - goto tr511 - case 105: - goto st444 - } - goto st432 - st444: - if p++; p == pe { - goto _test_eof444 - } - st_case_444: - switch data[p] { - case 10: - goto tr511 - case 102: - goto st445 - } - goto st432 - st445: - if p++; p == pe { - goto _test_eof445 - } - st_case_445: - if data[p] == 10 { - goto st0 - } - goto st432 - st_out: - _test_eof447: cs = 447; goto _test_eof - _test_eof1: cs = 1; goto _test_eof - _test_eof2: cs = 2; goto _test_eof - _test_eof3: cs = 3; goto _test_eof - _test_eof4: cs = 4; goto _test_eof - _test_eof5: cs = 5; goto _test_eof - _test_eof6: cs = 6; goto _test_eof - _test_eof7: cs = 7; goto _test_eof - _test_eof8: cs = 8; goto _test_eof - _test_eof9: cs = 9; goto _test_eof - _test_eof10: cs = 10; goto _test_eof - _test_eof11: cs = 11; goto _test_eof - _test_eof12: cs = 12; goto _test_eof - _test_eof13: cs = 13; goto _test_eof - _test_eof14: cs = 14; goto _test_eof - _test_eof15: cs = 15; goto _test_eof - _test_eof16: cs = 16; goto _test_eof - _test_eof17: cs = 17; goto _test_eof - _test_eof18: cs = 18; goto _test_eof - _test_eof19: cs = 19; goto _test_eof - _test_eof20: cs = 20; goto _test_eof - _test_eof21: cs = 21; goto _test_eof - _test_eof448: cs = 448; goto _test_eof - _test_eof22: cs = 22; goto _test_eof - _test_eof23: cs = 23; goto _test_eof - _test_eof24: cs = 24; goto _test_eof - _test_eof25: cs = 25; goto _test_eof - _test_eof26: cs = 26; goto _test_eof - _test_eof27: cs = 27; goto _test_eof - _test_eof28: cs = 28; goto _test_eof - _test_eof29: cs = 29; goto _test_eof - _test_eof30: cs = 30; goto _test_eof - _test_eof31: cs = 31; goto _test_eof - _test_eof32: cs = 32; goto _test_eof - _test_eof33: cs = 33; goto _test_eof - _test_eof34: cs = 34; goto _test_eof - _test_eof35: cs = 35; goto _test_eof - _test_eof36: cs = 36; goto _test_eof - _test_eof37: cs = 37; goto _test_eof - _test_eof38: cs = 38; goto _test_eof - _test_eof39: cs = 39; goto _test_eof - _test_eof40: cs = 40; goto _test_eof - _test_eof41: cs = 41; goto _test_eof - _test_eof42: cs = 42; goto _test_eof - _test_eof43: cs = 43; goto _test_eof - _test_eof44: cs = 44; goto _test_eof - _test_eof45: cs = 45; goto _test_eof - _test_eof46: cs = 46; goto _test_eof - _test_eof47: cs = 47; goto _test_eof - _test_eof48: cs = 48; goto _test_eof - _test_eof49: cs = 49; goto _test_eof - _test_eof50: cs = 50; goto _test_eof - _test_eof51: cs = 51; goto _test_eof - _test_eof52: cs = 52; goto _test_eof - _test_eof53: cs = 53; goto _test_eof - _test_eof54: cs = 54; goto _test_eof - _test_eof55: cs = 55; goto _test_eof - _test_eof56: cs = 56; goto _test_eof - _test_eof449: cs = 449; goto _test_eof - _test_eof57: cs = 57; goto _test_eof - _test_eof446: cs = 446; goto _test_eof - _test_eof453: cs = 453; goto _test_eof - _test_eof454: cs = 454; goto _test_eof - _test_eof450: cs = 450; goto _test_eof - _test_eof58: cs = 58; goto _test_eof - _test_eof59: cs = 59; goto _test_eof - _test_eof60: cs = 60; goto _test_eof - _test_eof61: cs = 61; goto _test_eof - _test_eof62: cs = 62; goto _test_eof - _test_eof63: cs = 63; goto _test_eof - _test_eof64: cs = 64; goto _test_eof - _test_eof65: cs = 65; goto _test_eof - _test_eof66: cs = 66; goto _test_eof - _test_eof67: cs = 67; goto _test_eof - _test_eof68: cs = 68; goto _test_eof - _test_eof69: cs = 69; goto _test_eof - _test_eof70: cs = 70; goto _test_eof - _test_eof71: cs = 71; goto _test_eof - _test_eof72: cs = 72; goto _test_eof - _test_eof73: cs = 73; goto _test_eof - _test_eof74: cs = 74; goto _test_eof - _test_eof75: cs = 75; goto _test_eof - _test_eof76: cs = 76; goto _test_eof - _test_eof77: cs = 77; goto _test_eof - _test_eof78: cs = 78; goto _test_eof - _test_eof79: cs = 79; goto _test_eof - _test_eof80: cs = 80; goto _test_eof - _test_eof81: cs = 81; goto _test_eof - _test_eof82: cs = 82; goto _test_eof - _test_eof83: cs = 83; goto _test_eof - _test_eof84: cs = 84; goto _test_eof - _test_eof85: cs = 85; goto _test_eof - _test_eof86: cs = 86; goto _test_eof - _test_eof87: cs = 87; goto _test_eof - _test_eof88: cs = 88; goto _test_eof - _test_eof89: cs = 89; goto _test_eof - _test_eof90: cs = 90; goto _test_eof - _test_eof91: cs = 91; goto _test_eof - _test_eof92: cs = 92; goto _test_eof - _test_eof93: cs = 93; goto _test_eof - _test_eof94: cs = 94; goto _test_eof - _test_eof95: cs = 95; goto _test_eof - _test_eof96: cs = 96; goto _test_eof - _test_eof97: cs = 97; goto _test_eof - _test_eof98: cs = 98; goto _test_eof - _test_eof99: cs = 99; goto _test_eof - _test_eof100: cs = 100; goto _test_eof - _test_eof101: cs = 101; goto _test_eof - _test_eof102: cs = 102; goto _test_eof - _test_eof103: cs = 103; goto _test_eof - _test_eof104: cs = 104; goto _test_eof - _test_eof105: cs = 105; goto _test_eof - _test_eof106: cs = 106; goto _test_eof - _test_eof107: cs = 107; goto _test_eof - _test_eof108: cs = 108; goto _test_eof - _test_eof109: cs = 109; goto _test_eof - _test_eof110: cs = 110; goto _test_eof - _test_eof111: cs = 111; goto _test_eof - _test_eof112: cs = 112; goto _test_eof - _test_eof113: cs = 113; goto _test_eof - _test_eof114: cs = 114; goto _test_eof - _test_eof115: cs = 115; goto _test_eof - _test_eof116: cs = 116; goto _test_eof - _test_eof117: cs = 117; goto _test_eof - _test_eof118: cs = 118; goto _test_eof - _test_eof119: cs = 119; goto _test_eof - _test_eof120: cs = 120; goto _test_eof - _test_eof121: cs = 121; goto _test_eof - _test_eof122: cs = 122; goto _test_eof - _test_eof123: cs = 123; goto _test_eof - _test_eof124: cs = 124; goto _test_eof - _test_eof125: cs = 125; goto _test_eof - _test_eof126: cs = 126; goto _test_eof - _test_eof127: cs = 127; goto _test_eof - _test_eof128: cs = 128; goto _test_eof - _test_eof129: cs = 129; goto _test_eof - _test_eof130: cs = 130; goto _test_eof - _test_eof131: cs = 131; goto _test_eof - _test_eof132: cs = 132; goto _test_eof - _test_eof133: cs = 133; goto _test_eof - _test_eof134: cs = 134; goto _test_eof - _test_eof135: cs = 135; goto _test_eof - _test_eof136: cs = 136; goto _test_eof - _test_eof137: cs = 137; goto _test_eof - _test_eof138: cs = 138; goto _test_eof - _test_eof139: cs = 139; goto _test_eof - _test_eof140: cs = 140; goto _test_eof - _test_eof141: cs = 141; goto _test_eof - _test_eof142: cs = 142; goto _test_eof - _test_eof143: cs = 143; goto _test_eof - _test_eof144: cs = 144; goto _test_eof - _test_eof145: cs = 145; goto _test_eof - _test_eof451: cs = 451; goto _test_eof - _test_eof146: cs = 146; goto _test_eof - _test_eof147: cs = 147; goto _test_eof - _test_eof148: cs = 148; goto _test_eof - _test_eof149: cs = 149; goto _test_eof - _test_eof150: cs = 150; goto _test_eof - _test_eof151: cs = 151; goto _test_eof - _test_eof152: cs = 152; goto _test_eof - _test_eof153: cs = 153; goto _test_eof - _test_eof154: cs = 154; goto _test_eof - _test_eof155: cs = 155; goto _test_eof - _test_eof156: cs = 156; goto _test_eof - _test_eof157: cs = 157; goto _test_eof - _test_eof158: cs = 158; goto _test_eof - _test_eof159: cs = 159; goto _test_eof - _test_eof160: cs = 160; goto _test_eof - _test_eof452: cs = 452; goto _test_eof - _test_eof161: cs = 161; goto _test_eof - _test_eof162: cs = 162; goto _test_eof - _test_eof163: cs = 163; goto _test_eof - _test_eof164: cs = 164; goto _test_eof - _test_eof165: cs = 165; goto _test_eof - _test_eof166: cs = 166; goto _test_eof - _test_eof167: cs = 167; goto _test_eof - _test_eof168: cs = 168; goto _test_eof - _test_eof169: cs = 169; goto _test_eof - _test_eof170: cs = 170; goto _test_eof - _test_eof171: cs = 171; goto _test_eof - _test_eof172: cs = 172; goto _test_eof - _test_eof173: cs = 173; goto _test_eof - _test_eof174: cs = 174; goto _test_eof - _test_eof175: cs = 175; goto _test_eof - _test_eof176: cs = 176; goto _test_eof - _test_eof177: cs = 177; goto _test_eof - _test_eof178: cs = 178; goto _test_eof - _test_eof179: cs = 179; goto _test_eof - _test_eof180: cs = 180; goto _test_eof - _test_eof181: cs = 181; goto _test_eof - _test_eof182: cs = 182; goto _test_eof - _test_eof183: cs = 183; goto _test_eof - _test_eof184: cs = 184; goto _test_eof - _test_eof185: cs = 185; goto _test_eof - _test_eof186: cs = 186; goto _test_eof - _test_eof187: cs = 187; goto _test_eof - _test_eof188: cs = 188; goto _test_eof - _test_eof189: cs = 189; goto _test_eof - _test_eof190: cs = 190; goto _test_eof - _test_eof191: cs = 191; goto _test_eof - _test_eof192: cs = 192; goto _test_eof - _test_eof193: cs = 193; goto _test_eof - _test_eof194: cs = 194; goto _test_eof - _test_eof195: cs = 195; goto _test_eof - _test_eof196: cs = 196; goto _test_eof - _test_eof197: cs = 197; goto _test_eof - _test_eof198: cs = 198; goto _test_eof - _test_eof199: cs = 199; goto _test_eof - _test_eof200: cs = 200; goto _test_eof - _test_eof201: cs = 201; goto _test_eof - _test_eof202: cs = 202; goto _test_eof - _test_eof203: cs = 203; goto _test_eof - _test_eof204: cs = 204; goto _test_eof - _test_eof205: cs = 205; goto _test_eof - _test_eof206: cs = 206; goto _test_eof - _test_eof207: cs = 207; goto _test_eof - _test_eof208: cs = 208; goto _test_eof - _test_eof209: cs = 209; goto _test_eof - _test_eof210: cs = 210; goto _test_eof - _test_eof211: cs = 211; goto _test_eof - _test_eof212: cs = 212; goto _test_eof - _test_eof213: cs = 213; goto _test_eof - _test_eof214: cs = 214; goto _test_eof - _test_eof215: cs = 215; goto _test_eof - _test_eof216: cs = 216; goto _test_eof - _test_eof217: cs = 217; goto _test_eof - _test_eof218: cs = 218; goto _test_eof - _test_eof219: cs = 219; goto _test_eof - _test_eof220: cs = 220; goto _test_eof - _test_eof221: cs = 221; goto _test_eof - _test_eof222: cs = 222; goto _test_eof - _test_eof223: cs = 223; goto _test_eof - _test_eof224: cs = 224; goto _test_eof - _test_eof225: cs = 225; goto _test_eof - _test_eof226: cs = 226; goto _test_eof - _test_eof227: cs = 227; goto _test_eof - _test_eof228: cs = 228; goto _test_eof - _test_eof229: cs = 229; goto _test_eof - _test_eof230: cs = 230; goto _test_eof - _test_eof231: cs = 231; goto _test_eof - _test_eof232: cs = 232; goto _test_eof - _test_eof233: cs = 233; goto _test_eof - _test_eof234: cs = 234; goto _test_eof - _test_eof235: cs = 235; goto _test_eof - _test_eof236: cs = 236; goto _test_eof - _test_eof237: cs = 237; goto _test_eof - _test_eof238: cs = 238; goto _test_eof - _test_eof239: cs = 239; goto _test_eof - _test_eof240: cs = 240; goto _test_eof - _test_eof241: cs = 241; goto _test_eof - _test_eof242: cs = 242; goto _test_eof - _test_eof243: cs = 243; goto _test_eof - _test_eof244: cs = 244; goto _test_eof - _test_eof245: cs = 245; goto _test_eof - _test_eof246: cs = 246; goto _test_eof - _test_eof247: cs = 247; goto _test_eof - _test_eof248: cs = 248; goto _test_eof - _test_eof249: cs = 249; goto _test_eof - _test_eof250: cs = 250; goto _test_eof - _test_eof251: cs = 251; goto _test_eof - _test_eof252: cs = 252; goto _test_eof - _test_eof253: cs = 253; goto _test_eof - _test_eof254: cs = 254; goto _test_eof - _test_eof255: cs = 255; goto _test_eof - _test_eof256: cs = 256; goto _test_eof - _test_eof257: cs = 257; goto _test_eof - _test_eof258: cs = 258; goto _test_eof - _test_eof259: cs = 259; goto _test_eof - _test_eof260: cs = 260; goto _test_eof - _test_eof261: cs = 261; goto _test_eof - _test_eof262: cs = 262; goto _test_eof - _test_eof263: cs = 263; goto _test_eof - _test_eof264: cs = 264; goto _test_eof - _test_eof265: cs = 265; goto _test_eof - _test_eof266: cs = 266; goto _test_eof - _test_eof267: cs = 267; goto _test_eof - _test_eof268: cs = 268; goto _test_eof - _test_eof269: cs = 269; goto _test_eof - _test_eof270: cs = 270; goto _test_eof - _test_eof271: cs = 271; goto _test_eof - _test_eof272: cs = 272; goto _test_eof - _test_eof273: cs = 273; goto _test_eof - _test_eof274: cs = 274; goto _test_eof - _test_eof275: cs = 275; goto _test_eof - _test_eof276: cs = 276; goto _test_eof - _test_eof277: cs = 277; goto _test_eof - _test_eof278: cs = 278; goto _test_eof - _test_eof279: cs = 279; goto _test_eof - _test_eof280: cs = 280; goto _test_eof - _test_eof281: cs = 281; goto _test_eof - _test_eof282: cs = 282; goto _test_eof - _test_eof283: cs = 283; goto _test_eof - _test_eof284: cs = 284; goto _test_eof - _test_eof285: cs = 285; goto _test_eof - _test_eof286: cs = 286; goto _test_eof - _test_eof287: cs = 287; goto _test_eof - _test_eof288: cs = 288; goto _test_eof - _test_eof289: cs = 289; goto _test_eof - _test_eof290: cs = 290; goto _test_eof - _test_eof291: cs = 291; goto _test_eof - _test_eof292: cs = 292; goto _test_eof - _test_eof293: cs = 293; goto _test_eof - _test_eof294: cs = 294; goto _test_eof - _test_eof295: cs = 295; goto _test_eof - _test_eof296: cs = 296; goto _test_eof - _test_eof297: cs = 297; goto _test_eof - _test_eof298: cs = 298; goto _test_eof - _test_eof299: cs = 299; goto _test_eof - _test_eof300: cs = 300; goto _test_eof - _test_eof301: cs = 301; goto _test_eof - _test_eof302: cs = 302; goto _test_eof - _test_eof303: cs = 303; goto _test_eof - _test_eof304: cs = 304; goto _test_eof - _test_eof305: cs = 305; goto _test_eof - _test_eof306: cs = 306; goto _test_eof - _test_eof307: cs = 307; goto _test_eof - _test_eof308: cs = 308; goto _test_eof - _test_eof309: cs = 309; goto _test_eof - _test_eof310: cs = 310; goto _test_eof - _test_eof311: cs = 311; goto _test_eof - _test_eof312: cs = 312; goto _test_eof - _test_eof313: cs = 313; goto _test_eof - _test_eof314: cs = 314; goto _test_eof - _test_eof315: cs = 315; goto _test_eof - _test_eof316: cs = 316; goto _test_eof - _test_eof317: cs = 317; goto _test_eof - _test_eof318: cs = 318; goto _test_eof - _test_eof319: cs = 319; goto _test_eof - _test_eof320: cs = 320; goto _test_eof - _test_eof321: cs = 321; goto _test_eof - _test_eof322: cs = 322; goto _test_eof - _test_eof323: cs = 323; goto _test_eof - _test_eof324: cs = 324; goto _test_eof - _test_eof325: cs = 325; goto _test_eof - _test_eof326: cs = 326; goto _test_eof - _test_eof327: cs = 327; goto _test_eof - _test_eof328: cs = 328; goto _test_eof - _test_eof329: cs = 329; goto _test_eof - _test_eof330: cs = 330; goto _test_eof - _test_eof331: cs = 331; goto _test_eof - _test_eof332: cs = 332; goto _test_eof - _test_eof333: cs = 333; goto _test_eof - _test_eof334: cs = 334; goto _test_eof - _test_eof335: cs = 335; goto _test_eof - _test_eof336: cs = 336; goto _test_eof - _test_eof337: cs = 337; goto _test_eof - _test_eof338: cs = 338; goto _test_eof - _test_eof339: cs = 339; goto _test_eof - _test_eof340: cs = 340; goto _test_eof - _test_eof341: cs = 341; goto _test_eof - _test_eof342: cs = 342; goto _test_eof - _test_eof343: cs = 343; goto _test_eof - _test_eof344: cs = 344; goto _test_eof - _test_eof345: cs = 345; goto _test_eof - _test_eof346: cs = 346; goto _test_eof - _test_eof347: cs = 347; goto _test_eof - _test_eof348: cs = 348; goto _test_eof - _test_eof349: cs = 349; goto _test_eof - _test_eof350: cs = 350; goto _test_eof - _test_eof351: cs = 351; goto _test_eof - _test_eof352: cs = 352; goto _test_eof - _test_eof353: cs = 353; goto _test_eof - _test_eof354: cs = 354; goto _test_eof - _test_eof355: cs = 355; goto _test_eof - _test_eof356: cs = 356; goto _test_eof - _test_eof357: cs = 357; goto _test_eof - _test_eof358: cs = 358; goto _test_eof - _test_eof359: cs = 359; goto _test_eof - _test_eof360: cs = 360; goto _test_eof - _test_eof361: cs = 361; goto _test_eof - _test_eof362: cs = 362; goto _test_eof - _test_eof363: cs = 363; goto _test_eof - _test_eof364: cs = 364; goto _test_eof - _test_eof365: cs = 365; goto _test_eof - _test_eof366: cs = 366; goto _test_eof - _test_eof367: cs = 367; goto _test_eof - _test_eof368: cs = 368; goto _test_eof - _test_eof369: cs = 369; goto _test_eof - _test_eof370: cs = 370; goto _test_eof - _test_eof371: cs = 371; goto _test_eof - _test_eof372: cs = 372; goto _test_eof - _test_eof373: cs = 373; goto _test_eof - _test_eof374: cs = 374; goto _test_eof - _test_eof375: cs = 375; goto _test_eof - _test_eof376: cs = 376; goto _test_eof - _test_eof377: cs = 377; goto _test_eof - _test_eof378: cs = 378; goto _test_eof - _test_eof379: cs = 379; goto _test_eof - _test_eof380: cs = 380; goto _test_eof - _test_eof381: cs = 381; goto _test_eof - _test_eof382: cs = 382; goto _test_eof - _test_eof383: cs = 383; goto _test_eof - _test_eof384: cs = 384; goto _test_eof - _test_eof385: cs = 385; goto _test_eof - _test_eof386: cs = 386; goto _test_eof - _test_eof387: cs = 387; goto _test_eof - _test_eof388: cs = 388; goto _test_eof - _test_eof389: cs = 389; goto _test_eof - _test_eof390: cs = 390; goto _test_eof - _test_eof391: cs = 391; goto _test_eof - _test_eof392: cs = 392; goto _test_eof - _test_eof393: cs = 393; goto _test_eof - _test_eof394: cs = 394; goto _test_eof - _test_eof395: cs = 395; goto _test_eof - _test_eof396: cs = 396; goto _test_eof - _test_eof397: cs = 397; goto _test_eof - _test_eof398: cs = 398; goto _test_eof - _test_eof399: cs = 399; goto _test_eof - _test_eof400: cs = 400; goto _test_eof - _test_eof401: cs = 401; goto _test_eof - _test_eof402: cs = 402; goto _test_eof - _test_eof403: cs = 403; goto _test_eof - _test_eof404: cs = 404; goto _test_eof - _test_eof405: cs = 405; goto _test_eof - _test_eof406: cs = 406; goto _test_eof - _test_eof407: cs = 407; goto _test_eof - _test_eof408: cs = 408; goto _test_eof - _test_eof409: cs = 409; goto _test_eof - _test_eof410: cs = 410; goto _test_eof - _test_eof411: cs = 411; goto _test_eof - _test_eof412: cs = 412; goto _test_eof - _test_eof413: cs = 413; goto _test_eof - _test_eof414: cs = 414; goto _test_eof - _test_eof415: cs = 415; goto _test_eof - _test_eof416: cs = 416; goto _test_eof - _test_eof417: cs = 417; goto _test_eof - _test_eof418: cs = 418; goto _test_eof - _test_eof419: cs = 419; goto _test_eof - _test_eof420: cs = 420; goto _test_eof - _test_eof421: cs = 421; goto _test_eof - _test_eof422: cs = 422; goto _test_eof - _test_eof423: cs = 423; goto _test_eof - _test_eof424: cs = 424; goto _test_eof - _test_eof425: cs = 425; goto _test_eof - _test_eof426: cs = 426; goto _test_eof - _test_eof427: cs = 427; goto _test_eof - _test_eof428: cs = 428; goto _test_eof - _test_eof429: cs = 429; goto _test_eof - _test_eof430: cs = 430; goto _test_eof - _test_eof431: cs = 431; goto _test_eof - _test_eof432: cs = 432; goto _test_eof - _test_eof433: cs = 433; goto _test_eof - _test_eof434: cs = 434; goto _test_eof - _test_eof435: cs = 435; goto _test_eof - _test_eof436: cs = 436; goto _test_eof - _test_eof437: cs = 437; goto _test_eof - _test_eof438: cs = 438; goto _test_eof - _test_eof439: cs = 439; goto _test_eof - _test_eof440: cs = 440; goto _test_eof - _test_eof441: cs = 441; goto _test_eof - _test_eof442: cs = 442; goto _test_eof - _test_eof443: cs = 443; goto _test_eof - _test_eof444: cs = 444; goto _test_eof - _test_eof445: cs = 445; goto _test_eof - - _test_eof: {} - if p == eof { - switch cs { - case 448: - goto tr529 - case 22: - goto tr24 - case 449: - goto tr529 - case 57: - goto tr24 - case 75: - goto tr102 - case 76: - goto tr102 - case 77: - goto tr102 - case 78: - goto tr102 - case 79: - goto tr102 - case 80: - goto tr102 - case 81: - goto tr102 - case 82: - goto tr102 - case 83: - goto tr102 - case 84: - goto tr102 - case 85: - goto tr102 - case 86: - goto tr102 - case 87: - goto tr102 - case 88: - goto tr102 - case 89: - goto tr102 - case 90: - goto tr102 - case 451: - goto tr533 - case 452: - goto tr533 - } - } - - _out: {} - } - -// line 161 "parseqt.rl" - - - if p < pe { - m0, m1 = p, p - for m0 > 0 && data[m0-1] != '\n' { - m0-- - } - for m1 < len(data) && data[m1] != '\n' { - m1++ - } - return fmt.Errorf("cannot parse header file:%d:%d: %s", curline, p-m0, data[m0:m1]) - } - - if foundclass == 0 { - return fmt.Errorf("cannot find C++ class in header file") - } - if foundclass == 1 { - return fmt.Errorf("cannot find end of C++ class in header file") - } - if foundclass > 2 { - return fmt.Errorf("found too many C++ classes in header file") - } - return nil -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/gengl/parseqt.rl b/Godeps/_workspace/src/github.com/obscuren/qml/gl/gengl/parseqt.rl deleted file mode 100644 index 4aa4a13459..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/gengl/parseqt.rl +++ /dev/null @@ -1,184 +0,0 @@ -// -// To compile: -// -// ragel -Z -G2 -o parseqt.go parseqt.rl -// -// To show a diagram of the state machine: -// -// ragel -V -G2 -p -o parseqt.dot parseqt.rl -// dot -Tsvg -o parseqt.svg parseqt.dot -// chrome parseqt.svg -// - -package main - -import ( - "fmt" -) - -%%{ - machine parseqt; - - write data; -}%% - -func parseQt(data string, header *Header) error { - var cs, p, pe int - var ts, te, act, eof int - - pe = len(data) - eof = len(data) - - _, _, _ = ts, te, act - - //stack := make([]int, 32) - //top := 0 - - var curline = 1 - - var m0, m1, m2, m3, m4, m5, m6 int - var foundclass int - var inpublic bool - var heading string - var lineblock int - var f Func - - %%{ - nl = '\n' @{ curline++ }; - cd = [^\n]; - sp = [ \t]; - id = [A-Za-z0-9_]+; - spnl = ( sp | nl ); - - main := |* - 'class Q_GUI_EXPORT ' id >{ m0 = p } %{ m1 = p } ' : public QAbstractOpenGLFunctions' nl '{' nl - { - header.Class = data[m0:m1] - foundclass++ - fgoto inclass; - }; - - 'class Q_GUI_EXPORT ' id >{ m0 = p } %{ m1 = p } nl '{' nl - { - if data[m0:m1] == "QOpenGLFunctions" { - header.Class = data[m0:m1] - foundclass++ - } - fgoto inclass; - }; - - # Ignore any other line. - cd* nl; - *|; - - inclass := |* - # Track heading comments. - sp* '//' sp* cd* >{ m0 = p } @{ m1 = p } sp* nl - { - heading = data[m0:m1] - _ = heading - lineblock++ - }; - - # Ignore constructor/destructor. - sp* '~'? id >{ m0 = p } %{ m1 = p } '()' sp* ( ';' | '{}' ) sp* nl { - if data[m0:m1] != header.Class { - fbreak; - } - }; - - # Ignore initialization function. - sp* 'bool' sp+ 'initializeOpenGLFunctions()' cd* nl; - - # Ignore friend classes. - sp* 'friend' sp+ 'class' sp+ id sp* ';' sp* nl; - - # Track public/private to ignore whatever isn't public. - sp* 'public:' sp* nl - { - inpublic = true - }; - sp* ( 'private:' | 'protected:' ) sp* nl - { - inpublic = false - }; - - # Record function prototypes. - sp* ( 'const' sp+ )? id >{ m0 = p } %{ m1 = p; m4 = 0 } ( sp 'const'? | '*'+ ${ m4++ } )+ - # Name - 'gl' >{ m2 = p } id %{ m3 = p; f = Func{Name: data[m2:m3], Type: data[m0:m1], Addr: m4} } sp* '(' >{ m6 = 0 } sp* - # Parameters - ( 'void'? sp* ')' | ( ( 'const' %{ m6 = 1 } sp+ )? id >{ m0 = p } %{ m1 = p; m4 = 0 } ( sp 'const'? | '*' ${ m4++ } )+ id >{ m2 = p; m5 = 0 } %{ m3 = p } ( '[' [0-9]+ ${ m5 = m5*10 + (int(data[p]) - '0') } ']' )? sp* [,)] - >{ f.Param = append(f.Param, Param{Name: data[m2:m3], Type: data[m0:m1], Addr: m4, Array: m5, Const: m6 > 0}); m6 = 0 } sp* )+ ) - sp* ';' - { - if (inpublic) { - header.Func = append(header.Func, f) - } - }; - - # Record feature flags. - sp* 'enum OpenGLFeature' sp* nl sp* '{' sp* nl - ( sp* id >{ m0 = p } %{ m1 = p } sp* '=' sp* '0x' >{ m2 = p } [0-9]+ %{ m3 = p } ','? sp* nl - >{ header.FeatureFlags = append(header.FeatureFlags, Const{Name: data[m0:m1], Value: data[m2:m3]}) } )+ - sp* '};' nl; - - # Ignore non-gl functions and fields. - sp* ( 'static' sp+ )? ( 'const' sp+ )? [A-Za-z0-9_:]+ ( sp 'const'? | '*'+ ${ m4++ } )+ ( id - ( 'gl' id ) ) ( '(' cd* ')' )? sp* 'const'? - sp* ( ';' | '{' cd* '}' ) sp* nl; - - # Ignore Q_DECLARE_FLAGS - sp* 'Q_DECLARE_FLAGS(' cd+ ')' sp* nl; - - # Ignore deprecated functionality. - '#if QT_DEPRECATED_SINCE(' cd+ ')' sp* nl - ( cd* - '#endif' ) sp* nl - '#endif' sp* nl; - - # Done. - sp* '}' sp* ';' nl - { - foundclass++; - fgoto main; - }; - - # Reset relevant states on empty lines. - sp* nl - { - // Reset heading comment. - heading = "" - - // Start new line block. - lineblock++ - }; - - *|; - - skiperror := [^\n]* (';' | nl ) @{ fgoto main; }; - - write init; - write exec; - }%% - - if p < pe { - m0, m1 = p, p - for m0 > 0 && data[m0-1] != '\n' { - m0-- - } - for m1 < len(data) && data[m1] != '\n' { - m1++ - } - return fmt.Errorf("cannot parse header file:%d:%d: %s", curline, p-m0, data[m0:m1]) - } - - if foundclass == 0 { - return fmt.Errorf("cannot find C++ class in header file") - } - if foundclass == 1 { - return fmt.Errorf("cannot find end of C++ class in header file") - } - if foundclass > 2 { - return fmt.Errorf("found too many C++ classes in header file") - } - return nil -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/glbase/glbase.go b/Godeps/_workspace/src/github.com/obscuren/qml/gl/glbase/glbase.go deleted file mode 100644 index c483b15a29..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/gl/glbase/glbase.go +++ /dev/null @@ -1,33 +0,0 @@ -package glbase - -// A Context represents an OpenGL context that may be rendered on by the -// version-specific APIs under this package. -type Context struct { - // This is just a marker at the moment, as the GL.API functions will - // initialize their GL context from the current context in the - // renderer thread. The design supports proper expansion and fixes for - // upstream changes that break that model, though. - private struct{} -} - -// Contexter is implemented by values that have an assigned OpenGL context. -type Contexter interface { - GLContext() *Context -} - -type ( - Bitfield uint32 - Enum uint32 - Sync uintptr - Clampf float32 - Clampd float64 - - Uniform int32 - Attrib int32 - Texture uint32 - Program uint32 - Shader uint32 - Buffer uint32 - Framebuffer uint32 - Renderbuffer uint32 -) diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/log.go b/Godeps/_workspace/src/github.com/obscuren/qml/log.go deleted file mode 100644 index 5301e63b0e..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/log.go +++ /dev/null @@ -1,157 +0,0 @@ -package qml - -// #include "capi.h" -// -import "C" - -import ( - "fmt" - "log" - "path/filepath" - "strings" -) - -// SetLogger sets the target for messages logged by the qml package, -// including console.log and related calls from within qml code. -// -// The logger value must implement either the StdLogger interface, -// which is satisfied by the standard *log.Logger type, or the QmlLogger -// interface, which offers more control over the logged message. -// -// If no logger is provided, the qml package will send messages to the -// default log package logger. This behavior may also be restored by -// providing a nil logger to this function. -func SetLogger(logger interface{}) { - if logger == nil { - logHandler = defaultLogger{} - return - } - if qmll, ok := logger.(QmlLogger); ok { - logHandler = qmll - return - } - if stdl, ok := logger.(StdLogger); ok { - logHandler = wrappedStdLogger{stdl} - return - } - panic("unsupported logger interface") -} - -// The QmlLogger interface may be implemented to better control how -// log messages from the qml package are handled. Values that -// implement either StdLogger or QmlLogger may be provided to the -// SetLogger function. -type QmlLogger interface { - // QmlOutput is called whenever a new message is available for logging. - // The message value must not be used after the method returns. - QmlOutput(message LogMessage) error -} - -// The StdLogger interface is implemented by standard *log.Logger values. -// Values that implement either StdLogger or QmlLogger may be provided -// to the SetLogger function. -type StdLogger interface { - // Output is called whenever a new message is available for logging. - // See the standard log.Logger type for more details. - Output(calldepth int, s string) error -} - -// NOTE: LogMessage is an interface to avoid allocating and copying -// several strings for each logged message. - -// LogMessage is implemented by values provided to QmlLogger.QmlOutput. -type LogMessage interface { - Severity() LogSeverity - Text() string - File() string - Line() int - - String() string // returns "file:line: text" - - privateMarker() -} - -type LogSeverity int - -const ( - LogDebug LogSeverity = iota - LogWarning - LogCritical - LogFatal -) - -var logHandler QmlLogger = defaultLogger{} - -type defaultLogger struct{} - -func (defaultLogger) QmlOutput(msg LogMessage) error { - log.Println(msg.String()) - return nil -} - -func init() { - // Install the C++ log handler that diverts calls to the hook below. - C.installLogHandler() -} - -//export hookLogHandler -func hookLogHandler(cmsg *C.LogMessage) { - // Workarund for QTBUG-35943 - text := unsafeString(cmsg.text, cmsg.textLen) - if strings.HasPrefix(text, `"Qt Warning: Compose file:`) { - return - } - msg := logMessage{c: cmsg} - logHandler.QmlOutput(&msg) - msg.invalid = true -} - -type wrappedStdLogger struct { - StdLogger -} - -func (l wrappedStdLogger) QmlOutput(msg LogMessage) error { - return l.Output(0, msg.String()) -} - -type logMessage struct { - c *C.LogMessage - - // invalid flags that cmsg points to unreliable memory, - // since the log hook has already returned. - invalid bool -} - -func (m *logMessage) assertValid() { - if m.invalid { - panic("attempted to use log message outside of log hook") - } -} - -func (m *logMessage) Severity() LogSeverity { - return LogSeverity(m.c.severity) -} - -func (m *logMessage) Line() int { - m.assertValid() - return int(m.c.line) -} - -func (m *logMessage) String() string { - m.assertValid() - file := unsafeString(m.c.file, m.c.fileLen) - text := unsafeString(m.c.text, m.c.textLen) - return fmt.Sprintf("%s:%d: %s", filepath.Base(file), m.c.line, text) -} - -func (m *logMessage) File() string { - m.assertValid() - return C.GoStringN(m.c.file, m.c.fileLen) -} - -func (m *logMessage) Text() string { - m.assertValid() - return C.GoStringN(m.c.text, m.c.line) -} - -func (*logMessage) privateMarker() {} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/qml.go b/Godeps/_workspace/src/github.com/obscuren/qml/qml.go deleted file mode 100644 index 1fa8f8ad44..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/qml.go +++ /dev/null @@ -1,1109 +0,0 @@ -package qml - -// #include -// -// #include "capi.h" -// -import "C" - -import ( - "errors" - "fmt" - "gopkg.in/qml.v1/gl/glbase" - "image" - "image/color" - "io" - "io/ioutil" - "os" - "path/filepath" - "reflect" - "strings" - "sync" - "unsafe" -) - -// Engine provides an environment for instantiating QML components. -type Engine struct { - Common - values map[interface{}]*valueFold - destroyed bool - - imageProviders map[string]*func(imageId string, width, height int) image.Image -} - -var engines = make(map[unsafe.Pointer]*Engine) - -// NewEngine returns a new QML engine. -// -// The Destory method must be called to finalize the engine and -// release any resources used. -func NewEngine() *Engine { - engine := &Engine{values: make(map[interface{}]*valueFold)} - RunMain(func() { - engine.addr = C.newEngine(nil) - engine.engine = engine - engine.imageProviders = make(map[string]*func(imageId string, width, height int) image.Image) - engines[engine.addr] = engine - stats.enginesAlive(+1) - }) - return engine -} - -func (e *Engine) assertValid() { - if e.destroyed { - panic("engine already destroyed") - } -} - -// Destroy finalizes the engine and releases any resources used. -// The engine must not be used after calling this method. -// -// It is safe to call Destroy more than once. -func (e *Engine) Destroy() { - if !e.destroyed { - RunMain(func() { - if !e.destroyed { - e.destroyed = true - C.delObjectLater(e.addr) - if len(e.values) == 0 { - delete(engines, e.addr) - } else { - // The engine reference keeps those values alive. - // The last value destroyed will clear it. - } - stats.enginesAlive(-1) - } - }) - } -} - -// Load loads a new component with the provided location and with the -// content read from r. The location informs the resource name for -// logged messages, and its path is used to locate any other resources -// referenced by the QML content. -// -// Once a component is loaded, component instances may be created from -// the resulting object via its Create and CreateWindow methods. -func (e *Engine) Load(location string, r io.Reader) (Object, error) { - var cdata *C.char - var cdatalen C.int - - qrc := strings.HasPrefix(location, "qrc:") - if qrc { - if r != nil { - return nil, fmt.Errorf("cannot load qrc resource while providing data: %s", location) - } - } else { - data, err := ioutil.ReadAll(r) - if err != nil { - return nil, err - } - if colon, slash := strings.Index(location, ":"), strings.Index(location, "/"); colon == -1 || slash <= colon { - if filepath.IsAbs(location) { - location = "file:///" + filepath.ToSlash(location) - } else { - dir, err := os.Getwd() - if err != nil { - return nil, fmt.Errorf("cannot obtain absolute path: %v", err) - } - location = "file:///" + filepath.ToSlash(filepath.Join(dir, location)) - } - } - - // Workaround issue #84 (QTBUG-41193) by not refering to an existent file. - if s := strings.TrimPrefix(location, "file:///"); s != location { - if _, err := os.Stat(filepath.FromSlash(s)); err == nil { - location = location + "." - } - } - - cdata, cdatalen = unsafeBytesData(data) - } - - var err error - cloc, cloclen := unsafeStringData(location) - comp := &Common{engine: e} - RunMain(func() { - // TODO The component's parent should probably be the engine. - comp.addr = C.newComponent(e.addr, nilPtr) - if qrc { - C.componentLoadURL(comp.addr, cloc, cloclen) - } else { - C.componentSetData(comp.addr, cdata, cdatalen, cloc, cloclen) - } - message := C.componentErrorString(comp.addr) - if message != nilCharPtr { - err = errors.New(strings.TrimRight(C.GoString(message), "\n")) - C.free(unsafe.Pointer(message)) - } - }) - if err != nil { - return nil, err - } - return comp, nil -} - -// LoadFile loads a component from the provided QML file. -// Resources referenced by the QML content will be resolved relative to its path. -// -// Once a component is loaded, component instances may be created from -// the resulting object via its Create and CreateWindow methods. -func (e *Engine) LoadFile(path string) (Object, error) { - if strings.HasPrefix(path, "qrc:") { - return e.Load(path, nil) - } - // TODO Test this. - f, err := os.Open(path) - if err != nil { - return nil, err - } - defer f.Close() - return e.Load(path, f) -} - -// LoadString loads a component from the provided QML string. -// The location informs the resource name for logged messages, and its -// path is used to locate any other resources referenced by the QML content. -// -// Once a component is loaded, component instances may be created from -// the resulting object via its Create and CreateWindow methods. -func (e *Engine) LoadString(location, qml string) (Object, error) { - return e.Load(location, strings.NewReader(qml)) -} - -// Context returns the engine's root context. -func (e *Engine) Context() *Context { - e.assertValid() - var ctx Context - ctx.engine = e - RunMain(func() { - ctx.addr = C.engineRootContext(e.addr) - }) - return &ctx -} - -// TODO ObjectOf is probably still worth it, but turned out unnecessary -// for GL functionality. Test it properly before introducing it. - -// ObjectOf returns the QML Object representation of the provided Go value -// within the e engine. -//func (e *Engine) ObjectOf(value interface{}) Object { -// // TODO Would be good to preserve identity on the Go side. See unpackDataValue as well. -// return &Common{ -// engine: e, -// addr: wrapGoValue(e, value, cppOwner), -// } -//} - -// Painter is provided to Paint methods on Go types that have displayable content. -type Painter struct { - engine *Engine - obj Object - glctxt glbase.Context -} - -// Object returns the underlying object being painted. -func (p *Painter) Object() Object { - return p.obj -} - -// GLContext returns the OpenGL context for this painter. -func (p *Painter) GLContext() *glbase.Context { - return &p.glctxt -} - -// AddImageProvider registers f to be called when an image is requested by QML code -// with the specified provider identifier. It is a runtime error to register the same -// provider identifier multiple times. -// -// The imgId provided to f is the requested image source, with the "image:" scheme -// and provider identifier removed. For example, with an image image source of -// "image://myprovider/icons/home.ext", the respective imgId would be "icons/home.ext". -// -// If either the width or the height parameters provided to f are zero, no specific -// size for the image was requested. If non-zero, the returned image should have the -// the provided size, and will be resized if the returned image has a different size. -// -// See the documentation for more details on image providers: -// -// http://qt-project.org/doc/qt-5.0/qtquick/qquickimageprovider.html -// -func (e *Engine) AddImageProvider(prvId string, f func(imgId string, width, height int) image.Image) { - if _, ok := e.imageProviders[prvId]; ok { - panic(fmt.Sprintf("engine already has an image provider with id %q", prvId)) - } - e.imageProviders[prvId] = &f - cprvId, cprvIdLen := unsafeStringData(prvId) - RunMain(func() { - qprvId := C.newString(cprvId, cprvIdLen) - defer C.delString(qprvId) - C.engineAddImageProvider(e.addr, qprvId, unsafe.Pointer(&f)) - }) -} - -//export hookRequestImage -func hookRequestImage(imageFunc unsafe.Pointer, cid *C.char, cidLen, cwidth, cheight C.int) unsafe.Pointer { - f := *(*func(imgId string, width, height int) image.Image)(imageFunc) - - id := unsafeString(cid, cidLen) - width := int(cwidth) - height := int(cheight) - - img := f(id, width, height) - - var cimage unsafe.Pointer - - rect := img.Bounds() - width = rect.Max.X - rect.Min.X - height = rect.Max.Y - rect.Min.Y - cimage = C.newImage(C.int(width), C.int(height)) - - var cbits []byte - cbitsh := (*reflect.SliceHeader)((unsafe.Pointer)(&cbits)) - cbitsh.Data = (uintptr)((unsafe.Pointer)(C.imageBits(cimage))) - cbitsh.Len = width * height * 4 // RGBA - cbitsh.Cap = cbitsh.Len - - i := 0 - for y := 0; y < height; y++ { - for x := 0; x < width; x++ { - r, g, b, a := img.At(x, y).RGBA() - *(*uint32)(unsafe.Pointer(&cbits[i])) = (a>>8)<<24 | (r>>8)<<16 | (g>>8)<<8 | (b >> 8) - i += 4 - } - } - return cimage -} - -// Context represents a QML context that can hold variables visible -// to logic running within it. -type Context struct { - Common -} - -// SetVar makes the provided value available as a variable with the -// given name for QML code executed within the c context. -// -// If value is a struct, its exported fields are also made accessible to -// QML code as attributes of the named object. The attribute name in the -// object has the same name of the Go field name, except for the first -// letter which is lowercased. This is conventional and enforced by -// the QML implementation. -// -// The engine will hold a reference to the provided value, so it will -// not be garbage collected until the engine is destroyed, even if the -// value is unused or changed. -func (ctx *Context) SetVar(name string, value interface{}) { - cname, cnamelen := unsafeStringData(name) - RunMain(func() { - var dvalue C.DataValue - packDataValue(value, &dvalue, ctx.engine, cppOwner) - - qname := C.newString(cname, cnamelen) - defer C.delString(qname) - - C.contextSetProperty(ctx.addr, qname, &dvalue) - }) -} - -// SetVars makes the exported fields of the provided value available as -// variables for QML code executed within the c context. The variable names -// will have the same name of the Go field names, except for the first -// letter which is lowercased. This is conventional and enforced by -// the QML implementation. -// -// The engine will hold a reference to the provided value, so it will -// not be garbage collected until the engine is destroyed, even if the -// value is unused or changed. -func (ctx *Context) SetVars(value interface{}) { - RunMain(func() { - C.contextSetObject(ctx.addr, wrapGoValue(ctx.engine, value, cppOwner)) - }) -} - -// Var returns the context variable with the given name. -func (ctx *Context) Var(name string) interface{} { - cname, cnamelen := unsafeStringData(name) - - var dvalue C.DataValue - RunMain(func() { - qname := C.newString(cname, cnamelen) - defer C.delString(qname) - - C.contextGetProperty(ctx.addr, qname, &dvalue) - }) - return unpackDataValue(&dvalue, ctx.engine) -} - -// Spawn creates a new context that has ctx as a parent. -func (ctx *Context) Spawn() *Context { - var result Context - result.engine = ctx.engine - RunMain(func() { - result.addr = C.contextSpawn(ctx.addr) - }) - return &result -} - -// Object is the common interface implemented by all QML types. -// -// See the documentation of Common for details about this interface. -type Object interface { - Common() *Common - Addr() uintptr - TypeName() string - Interface() interface{} - Set(property string, value interface{}) - Property(name string) interface{} - Int(property string) int - Int64(property string) int64 - Float64(property string) float64 - Bool(property string) bool - String(property string) string - Color(property string) color.RGBA - Object(property string) Object - Map(property string) *Map - List(property string) *List - ObjectByName(objectName string) Object - Call(method string, params ...interface{}) interface{} - Create(ctx *Context) Object - CreateWindow(ctx *Context) *Window - Destroy() - On(signal string, function interface{}) -} - -// List holds a QML list which may be converted to a Go slice of an -// appropriate type via Convert. -// -// In the future this will also be able to hold a reference -// to QML-owned maps, so they can be mutated in place. -type List struct { - // In the future this will be able to hold a reference to QML-owned - // lists, so they can be mutated. - data []interface{} -} - -// Len returns the number of elements in the list. -func (l *List) Len() int { - return len(l.data) -} - -// Convert allocates a new slice and copies the list content into it, -// performing type conversions as possible, and then assigns the result -// to the slice pointed to by sliceAddr. -// Convert panics if the list values are not compatible with the -// provided slice. -func (l *List) Convert(sliceAddr interface{}) { - toPtr := reflect.ValueOf(sliceAddr) - if toPtr.Kind() != reflect.Ptr || toPtr.Type().Elem().Kind() != reflect.Slice { - panic(fmt.Sprintf("List.Convert got a sliceAddr parameter that is not a slice address: %#v", sliceAddr)) - } - err := convertAndSet(toPtr.Elem(), reflect.ValueOf(l), reflect.Value{}) - if err != nil { - panic(err.Error()) - } -} - -// Map holds a QML map which may be converted to a Go map of an -// appropriate type via Convert. -// -// In the future this will also be able to hold a reference -// to QML-owned maps, so they can be mutated in place. -type Map struct { - data []interface{} -} - -// Len returns the number of pairs in the map. -func (m *Map) Len() int { - return len(m.data) / 2 -} - -// Convert allocates a new map and copies the content of m property to it, -// performing type conversions as possible, and then assigns the result to -// the map pointed to by mapAddr. Map panics if m contains values that -// cannot be converted to the type of the map at mapAddr. -func (m *Map) Convert(mapAddr interface{}) { - toPtr := reflect.ValueOf(mapAddr) - if toPtr.Kind() != reflect.Ptr || toPtr.Type().Elem().Kind() != reflect.Map { - panic(fmt.Sprintf("Map.Convert got a mapAddr parameter that is not a map address: %#v", mapAddr)) - } - err := convertAndSet(toPtr.Elem(), reflect.ValueOf(m), reflect.Value{}) - if err != nil { - panic(err.Error()) - } -} - -// Common implements the common behavior of all QML objects. -// It implements the Object interface. -type Common struct { - addr unsafe.Pointer - engine *Engine -} - -var _ Object = (*Common)(nil) - -// CommonOf returns the Common QML value for the QObject at addr. -// -// This is meant for extensions that integrate directly with the -// underlying QML logic. -func CommonOf(addr unsafe.Pointer, engine *Engine) *Common { - return &Common{addr, engine} -} - -// Common returns obj itself. -// -// This provides access to the underlying *Common for types that -// embed it, when these are used via the Object interface. -func (obj *Common) Common() *Common { - return obj -} - -// TypeName returns the underlying type name for the held value. -func (obj *Common) TypeName() string { - var name string - RunMain(func() { - name = C.GoString(C.objectTypeName(obj.addr)) - }) - return name -} - -// Addr returns the QML object address. -// -// This is meant for extensions that integrate directly with the -// underlying QML logic. -func (obj *Common) Addr() uintptr { - return uintptr(obj.addr) -} - -// Interface returns the underlying Go value that is being held by -// the object wrapper. -// -// It is a runtime error to call Interface on values that are not -// backed by a Go value. -func (obj *Common) Interface() interface{} { - var result interface{} - var cerr *C.error - RunMain(func() { - var fold *valueFold - if cerr = C.objectGoAddr(obj.addr, (*unsafe.Pointer)(unsafe.Pointer(&fold))); cerr == nil { - result = fold.gvalue - } - }) - cmust(cerr) - return result -} - -// Set changes the named object property to the given value. -func (obj *Common) Set(property string, value interface{}) { - cproperty := C.CString(property) - defer C.free(unsafe.Pointer(cproperty)) - var cerr *C.error - RunMain(func() { - var dvalue C.DataValue - packDataValue(value, &dvalue, obj.engine, cppOwner) - cerr = C.objectSetProperty(obj.addr, cproperty, &dvalue) - }) - cmust(cerr) -} - -// Property returns the current value for a property of the object. -// If the property type is known, type-specific methods such as Int -// and String are more convenient to use. -// Property panics if the property does not exist. -func (obj *Common) Property(name string) interface{} { - cname := C.CString(name) - defer C.free(unsafe.Pointer(cname)) - - var dvalue C.DataValue - var found C.int - RunMain(func() { - found = C.objectGetProperty(obj.addr, cname, &dvalue) - }) - if found == 0 { - panic(fmt.Sprintf("object does not have a %q property", name)) - } - return unpackDataValue(&dvalue, obj.engine) -} - -// Int returns the int value of the named property. -// Int panics if the property cannot be represented as an int. -func (obj *Common) Int(property string) int { - switch value := obj.Property(property).(type) { - case int64: - return int(value) - case int: - return value - case uint64: - return int(value) - case uint32: - return int(value) - case uintptr: - return int(value) - case float32: - return int(value) - case float64: - return int(value) - default: - panic(fmt.Sprintf("value of property %q cannot be represented as an int: %#v", property, value)) - } -} - -// Int64 returns the int64 value of the named property. -// Int64 panics if the property cannot be represented as an int64. -func (obj *Common) Int64(property string) int64 { - switch value := obj.Property(property).(type) { - case int64: - return value - case int: - return int64(value) - case uint64: - return int64(value) - case uint32: - return int64(value) - case uintptr: - return int64(value) - case float32: - return int64(value) - case float64: - return int64(value) - default: - panic(fmt.Sprintf("value of property %q cannot be represented as an int64: %#v", property, value)) - } -} - -// Float64 returns the float64 value of the named property. -// Float64 panics if the property cannot be represented as float64. -func (obj *Common) Float64(property string) float64 { - switch value := obj.Property(property).(type) { - case int64: - return float64(value) - case int: - return float64(value) - case uint64: - return float64(value) - case uint32: - return float64(value) - case uintptr: - return float64(value) - case float32: - return float64(value) - case float64: - return value - default: - panic(fmt.Sprintf("value of property %q cannot be represented as a float64: %#v", property, value)) - } -} - -// Bool returns the bool value of the named property. -// Bool panics if the property is not a bool. -func (obj *Common) Bool(property string) bool { - value := obj.Property(property) - if b, ok := value.(bool); ok { - return b - } - panic(fmt.Sprintf("value of property %q is not a bool: %#v", property, value)) -} - -// String returns the string value of the named property. -// String panics if the property is not a string. -func (obj *Common) String(property string) string { - value := obj.Property(property) - if s, ok := value.(string); ok { - return s - } - panic(fmt.Sprintf("value of property %q is not a string: %#v", property, value)) -} - -// Color returns the RGBA value of the named property. -// Color panics if the property is not a color. -func (obj *Common) Color(property string) color.RGBA { - value := obj.Property(property) - c, ok := value.(color.RGBA) - if !ok { - panic(fmt.Sprintf("value of property %q is not a color: %#v", property, value)) - } - return c -} - -// Object returns the object value of the named property. -// Object panics if the property is not a QML object. -func (obj *Common) Object(property string) Object { - value := obj.Property(property) - object, ok := value.(Object) - if !ok { - panic(fmt.Sprintf("value of property %q is not a QML object: %#v", property, value)) - } - return object -} - -// List returns the list value of the named property. -// List panics if the property is not a list. -func (obj *Common) List(property string) *List { - value := obj.Property(property) - m, ok := value.(*List) - if !ok { - panic(fmt.Sprintf("value of property %q is not a QML list: %#v", property, value)) - } - return m -} - -// Map returns the map value of the named property. -// Map panics if the property is not a map. -func (obj *Common) Map(property string) *Map { - value := obj.Property(property) - m, ok := value.(*Map) - if !ok { - panic(fmt.Sprintf("value of property %q is not a QML map: %#v", property, value)) - } - return m -} - -// ObjectByName returns the Object value of the descendant object that -// was defined with the objectName property set to the provided value. -// ObjectByName panics if the object is not found. -func (obj *Common) ObjectByName(objectName string) Object { - cname, cnamelen := unsafeStringData(objectName) - var dvalue C.DataValue - var object Object - RunMain(func() { - qname := C.newString(cname, cnamelen) - defer C.delString(qname) - C.objectFindChild(obj.addr, qname, &dvalue) - // unpackDataValue will also initialize the Go type, if necessary. - value := unpackDataValue(&dvalue, obj.engine) - if dvalue.dataType == C.DTGoAddr { - datap := unsafe.Pointer(&dvalue.data) - fold := (*(**valueFold)(datap)) - if fold.init.IsValid() { - panic("internal error: custom Go type not initialized") - } - object = &Common{fold.cvalue, fold.engine} - } else { - object, _ = value.(Object) - } - }) - if object == nil { - panic(fmt.Sprintf("cannot find descendant with objectName == %q", objectName)) - } - return object -} - -// Call calls the given object method with the provided parameters. -// Call panics if the method does not exist. -func (obj *Common) Call(method string, params ...interface{}) interface{} { - if len(params) > len(dataValueArray) { - panic("too many parameters") - } - cmethod, cmethodLen := unsafeStringData(method) - var result C.DataValue - var cerr *C.error - RunMain(func() { - for i, param := range params { - packDataValue(param, &dataValueArray[i], obj.engine, jsOwner) - } - cerr = C.objectInvoke(obj.addr, cmethod, cmethodLen, &result, &dataValueArray[0], C.int(len(params))) - }) - cmust(cerr) - return unpackDataValue(&result, obj.engine) -} - -// Create creates a new instance of the component held by obj. -// The component instance runs under the ctx context. If ctx is nil, -// it runs under the same context as obj. -// -// The Create method panics if called on an object that does not -// represent a QML component. -func (obj *Common) Create(ctx *Context) Object { - if C.objectIsComponent(obj.addr) == 0 { - panic("object is not a component") - } - var root Common - root.engine = obj.engine - RunMain(func() { - ctxaddr := nilPtr - if ctx != nil { - ctxaddr = ctx.addr - } - root.addr = C.componentCreate(obj.addr, ctxaddr) - }) - return &root -} - -// CreateWindow creates a new instance of the component held by obj, -// and creates a new window holding the instance as its root object. -// The component instance runs under the ctx context. If ctx is nil, -// it runs under the same context as obj. -// -// The CreateWindow method panics if called on an object that -// does not represent a QML component. -func (obj *Common) CreateWindow(ctx *Context) *Window { - if C.objectIsComponent(obj.addr) == 0 { - panic("object is not a component") - } - var win Window - win.engine = obj.engine - RunMain(func() { - ctxaddr := nilPtr - if ctx != nil { - ctxaddr = ctx.addr - } - win.addr = C.componentCreateWindow(obj.addr, ctxaddr) - }) - return &win -} - -// Destroy finalizes the value and releases any resources used. -// The value must not be used after calling this method. -func (obj *Common) Destroy() { - // TODO We might hook into the destroyed signal, and prevent this object - // from being used in post-destruction crash-prone ways. - RunMain(func() { - if obj.addr != nilPtr { - C.delObjectLater(obj.addr) - obj.addr = nilPtr - } - }) -} - -var connectedFunction = make(map[*interface{}]bool) - -// On connects the named signal from obj with the provided function, so that -// when obj next emits that signal, the function is called with the parameters -// the signal carries. -// -// The provided function must accept a number of parameters that is equal to -// or less than the number of parameters provided by the signal, and the -// resepctive parameter types must match exactly or be conversible according -// to normal Go rules. -// -// For example: -// -// obj.On("clicked", func() { fmt.Println("obj got a click") }) -// -// Note that Go uses the real signal name, rather than the one used when -// defining QML signal handlers ("clicked" rather than "onClicked"). -// -// For more details regarding signals and QML see: -// -// http://qt-project.org/doc/qt-5.0/qtqml/qml-qtquick2-connections.html -// -func (obj *Common) On(signal string, function interface{}) { - funcv := reflect.ValueOf(function) - funct := funcv.Type() - if funcv.Kind() != reflect.Func { - panic("function provided to On is not a function or method") - } - if funct.NumIn() > C.MaxParams { - panic("function takes too many arguments") - } - csignal, csignallen := unsafeStringData(signal) - var cerr *C.error - RunMain(func() { - cerr = C.objectConnect(obj.addr, csignal, csignallen, obj.engine.addr, unsafe.Pointer(&function), C.int(funcv.Type().NumIn())) - if cerr == nil { - connectedFunction[&function] = true - stats.connectionsAlive(+1) - } - }) - cmust(cerr) -} - -//export hookSignalDisconnect -func hookSignalDisconnect(funcp unsafe.Pointer) { - before := len(connectedFunction) - delete(connectedFunction, (*interface{})(funcp)) - if before == len(connectedFunction) { - panic("disconnecting unknown signal function") - } - stats.connectionsAlive(-1) -} - -//export hookSignalCall -func hookSignalCall(enginep unsafe.Pointer, funcp unsafe.Pointer, args *C.DataValue) { - engine := engines[enginep] - if engine == nil { - panic("signal called after engine was destroyed") - } - funcv := reflect.ValueOf(*(*interface{})(funcp)) - funct := funcv.Type() - numIn := funct.NumIn() - var params [C.MaxParams]reflect.Value - for i := 0; i < numIn; i++ { - arg := (*C.DataValue)(unsafe.Pointer(uintptr(unsafe.Pointer(args)) + uintptr(i)*dataValueSize)) - param := reflect.ValueOf(unpackDataValue(arg, engine)) - if paramt := funct.In(i); param.Type() != paramt { - // TODO Provide a better error message when this fails. - param = param.Convert(paramt) - } - params[i] = param - } - funcv.Call(params[:numIn]) -} - -func cerror(cerr *C.error) error { - err := errors.New(C.GoString((*C.char)(unsafe.Pointer(cerr)))) - C.free(unsafe.Pointer(cerr)) - return err -} - -func cmust(cerr *C.error) { - if cerr != nil { - panic(cerror(cerr).Error()) - } -} - -// TODO Signal emitting support for go values. - -// Window represents a QML window where components are rendered. -type Window struct { - Common -} - -// Show exposes the window. -func (win *Window) Show() { - RunMain(func() { - C.windowShow(win.addr) - }) -} - -// Hide hides the window. -func (win *Window) Hide() { - RunMain(func() { - C.windowHide(win.addr) - }) -} - -// PlatformId returns the window's platform id. -// -// For platforms where this id might be useful, the value returned will -// uniquely represent the window inside the corresponding screen. -func (win *Window) PlatformId() uintptr { - var id uintptr - RunMain(func() { - id = uintptr(C.windowPlatformId(win.addr)) - }) - return id -} - -// Root returns the root object being rendered. -// -// If the window was defined in QML code, the root object is the window itself. -func (win *Window) Root() Object { - var obj Common - obj.engine = win.engine - RunMain(func() { - obj.addr = C.windowRootObject(win.addr) - }) - return &obj -} - -// Wait blocks the current goroutine until the window is closed. -func (win *Window) Wait() { - // XXX Test this. - var m sync.Mutex - m.Lock() - RunMain(func() { - // TODO Must be able to wait for the same Window from multiple goroutines. - // TODO If the window is not visible, must return immediately. - waitingWindows[win.addr] = &m - C.windowConnectHidden(win.addr) - }) - m.Lock() -} - -var waitingWindows = make(map[unsafe.Pointer]*sync.Mutex) - -//export hookWindowHidden -func hookWindowHidden(addr unsafe.Pointer) { - m, ok := waitingWindows[addr] - if !ok { - panic("window is not waiting") - } - delete(waitingWindows, addr) - m.Unlock() -} - -// Snapshot returns an image with the visible contents of the window. -// The main GUI thread is paused while the data is being acquired. -func (win *Window) Snapshot() image.Image { - // TODO Test this. - var cimage unsafe.Pointer - RunMain(func() { - cimage = C.windowGrabWindow(win.addr) - }) - defer C.delImage(cimage) - - // This should be safe to be done out of the main GUI thread. - var cwidth, cheight C.int - C.imageSize(cimage, &cwidth, &cheight) - - var cbits []byte - cbitsh := (*reflect.SliceHeader)((unsafe.Pointer)(&cbits)) - cbitsh.Data = (uintptr)((unsafe.Pointer)(C.imageConstBits(cimage))) - cbitsh.Len = int(cwidth * cheight * 8) // ARGB - cbitsh.Cap = cbitsh.Len - - image := image.NewRGBA(image.Rect(0, 0, int(cwidth), int(cheight))) - l := int(cwidth * cheight * 4) - for i := 0; i < l; i += 4 { - var c uint32 = *(*uint32)(unsafe.Pointer(&cbits[i])) - image.Pix[i+0] = byte(c >> 16) - image.Pix[i+1] = byte(c >> 8) - image.Pix[i+2] = byte(c) - image.Pix[i+3] = byte(c >> 24) - } - return image -} - -// TypeSpec holds the specification of a QML type that is backed by Go logic. -// -// The type specification must be registered with the RegisterTypes function -// before it will be visible to QML code, as in: -// -// qml.RegisterTypes("GoExtensions", 1, 0, []qml.TypeSpec{{ -// Init: func(p *Person, obj qml.Object) {}, -// }}) -// -// See the package documentation for more details. -// -type TypeSpec struct { - // Init must be set to a function that is called when QML code requests - // the creation of a new value of this type. The provided function must - // have the following type: - // - // func(value *CustomType, object qml.Object) - // - // Where CustomType is the custom type being registered. The function will - // be called with a newly created *CustomType and its respective qml.Object. - Init interface{} - - // Name optionally holds the identifier the type is known as within QML code, - // when the registered extension module is imported. If not specified, the - // name of the Go type provided as the first argument of Init is used instead. - Name string - - // Singleton defines whether a single instance of the type should be used - // for all accesses, as a singleton value. If true, all properties of the - // singleton value are directly accessible under the type name. - Singleton bool - - private struct{} // Force use of fields by name. -} - -var types []*TypeSpec - -// RegisterTypes registers the provided list of type specifications for use -// by QML code. To access the registered types, they must be imported from the -// provided location and major.minor version numbers. -// -// For example, with a location "GoExtensions", major 4, and minor 2, this statement -// imports all the registered types in the module's namespace: -// -// import GoExtensions 4.2 -// -// See the documentation on QML import statements for details on these: -// -// http://qt-project.org/doc/qt-5.0/qtqml/qtqml-syntax-imports.html -// -func RegisterTypes(location string, major, minor int, types []TypeSpec) { - for i := range types { - err := registerType(location, major, minor, &types[i]) - if err != nil { - panic(err) - } - } -} - -func registerType(location string, major, minor int, spec *TypeSpec) error { - // Copy and hold a reference to the spec data. - localSpec := *spec - - f := reflect.ValueOf(localSpec.Init) - ft := f.Type() - if ft.Kind() != reflect.Func { - return fmt.Errorf("TypeSpec.Init must be a function, got %#v", localSpec.Init) - } - if ft.NumIn() != 2 { - return fmt.Errorf("TypeSpec.Init's function must accept two arguments: %s", ft) - } - firstArg := ft.In(0) - if firstArg.Kind() != reflect.Ptr || firstArg.Elem().Kind() == reflect.Ptr { - return fmt.Errorf("TypeSpec.Init's function must take a pointer type as the second argument: %s", ft) - } - if ft.In(1) != typeObject { - return fmt.Errorf("TypeSpec.Init's function must take qml.Object as the second argument: %s", ft) - } - customType := typeInfo(reflect.New(firstArg.Elem()).Interface()) - if localSpec.Name == "" { - localSpec.Name = firstArg.Elem().Name() - if localSpec.Name == "" { - panic("cannot determine registered type name; please provide one explicitly") - } - } - - var err error - RunMain(func() { - cloc := C.CString(location) - cname := C.CString(localSpec.Name) - cres := C.int(0) - if localSpec.Singleton { - cres = C.registerSingleton(cloc, C.int(major), C.int(minor), cname, customType, unsafe.Pointer(&localSpec)) - } else { - cres = C.registerType(cloc, C.int(major), C.int(minor), cname, customType, unsafe.Pointer(&localSpec)) - } - // It doesn't look like it keeps references to these, but it's undocumented and unclear. - C.free(unsafe.Pointer(cloc)) - C.free(unsafe.Pointer(cname)) - if cres == -1 { - err = fmt.Errorf("QML engine failed to register type; invalid type location or name?") - } else { - types = append(types, &localSpec) - } - }) - - return err -} - -// RegisterConverter registers the convereter function to be called when a -// value with the provided type name is obtained from QML logic. The function -// must return the new value to be used in place of the original value. -func RegisterConverter(typeName string, converter func(engine *Engine, obj Object) interface{}) { - if converter == nil { - delete(converters, typeName) - } else { - converters[typeName] = converter - } -} - -var converters = make(map[string]func(engine *Engine, obj Object) interface{}) - -// LoadResources registers all resources in the provided resources collection, -// making them available to be loaded by any Engine and QML file. -// Registered resources are made available under "qrc:///some/path", where -// "some/path" is the path the resource was added with. -func LoadResources(r *Resources) { - var base unsafe.Pointer - if len(r.sdata) > 0 { - base = *(*unsafe.Pointer)(unsafe.Pointer(&r.sdata)) - } else if len(r.bdata) > 0 { - base = *(*unsafe.Pointer)(unsafe.Pointer(&r.bdata)) - } - tree := (*C.char)(unsafe.Pointer(uintptr(base)+uintptr(r.treeOffset))) - name := (*C.char)(unsafe.Pointer(uintptr(base)+uintptr(r.nameOffset))) - data := (*C.char)(unsafe.Pointer(uintptr(base)+uintptr(r.dataOffset))) - C.registerResourceData(C.int(r.version), tree, name, data) -} - -// UnloadResources unregisters all previously registered resources from r. -func UnloadResources(r *Resources) { - var base unsafe.Pointer - if len(r.sdata) > 0 { - base = *(*unsafe.Pointer)(unsafe.Pointer(&r.sdata)) - } else if len(r.bdata) > 0 { - base = *(*unsafe.Pointer)(unsafe.Pointer(&r.bdata)) - } - tree := (*C.char)(unsafe.Pointer(uintptr(base)+uintptr(r.treeOffset))) - name := (*C.char)(unsafe.Pointer(uintptr(base)+uintptr(r.nameOffset))) - data := (*C.char)(unsafe.Pointer(uintptr(base)+uintptr(r.dataOffset))) - C.unregisterResourceData(C.int(r.version), tree, name, data) -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/qml_test.go b/Godeps/_workspace/src/github.com/obscuren/qml/qml_test.go deleted file mode 100644 index 2db23cd235..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/qml_test.go +++ /dev/null @@ -1,1436 +0,0 @@ -package qml_test - -import ( - "encoding/base64" - "flag" - "fmt" - "image" - "image/color" - "io/ioutil" - "os" - "reflect" - "regexp" - "runtime" - "strings" - "testing" - "time" - - . "gopkg.in/check.v1" - "gopkg.in/qml.v1" - "gopkg.in/qml.v1/cpptest" - "gopkg.in/qml.v1/gl/2.0" - "path/filepath" -) - -func init() { qml.SetupTesting() } - -func Test(t *testing.T) { TestingT(t) } - -type S struct { - engine *qml.Engine - context *qml.Context -} - -var _ = Suite(&S{}) - -func (s *S) SetUpTest(c *C) { - qml.SetLogger(c) - qml.CollectStats(true) - qml.ResetStats() - - stats := qml.Stats() - if stats.EnginesAlive > 0 || stats.ValuesAlive > 0 || stats.ConnectionsAlive > 0 { - panic(fmt.Sprintf("Test started with values alive: %#v\n", stats)) - } - - s.engine = qml.NewEngine() - s.context = s.engine.Context() -} - -func (s *S) TearDownTest(c *C) { - s.engine.Destroy() - - retries := 30 // Three seconds top. - for { - // Do not call qml.Flush here. It creates a nested event loop - // that attempts to process the deferred object deletes and cannot, - // because deferred deletes are only processed at the same loop level. - // So it *reposts* the deferred deletion event, in practice *preventing* - // these objects from being deleted. - runtime.GC() - stats := qml.Stats() - if stats.EnginesAlive == 0 && stats.ValuesAlive == 0 && stats.ConnectionsAlive == 0 { - break - } - if retries == 0 { - panic(fmt.Sprintf("there are values alive:\n%#v\n", stats)) - } - retries-- - time.Sleep(100 * time.Millisecond) - if retries%10 == 0 { - c.Logf("There are still objects alive; waiting for them to die: %#v\n", stats) - } - } - - qml.SetLogger(nil) -} - -type GoRect struct { - PaintCount int -} - -func (r *GoRect) Paint(p *qml.Painter) { - r.PaintCount++ - - obj := p.Object() - - gl := GL.API(p) - - width := float32(obj.Int("width")) - height := float32(obj.Int("height")) - - gl.Color3f(1.0, 0.0, 0.0) - gl.Begin(GL.QUADS) - gl.Vertex2f(0, 0) - gl.Vertex2f(width, 0) - gl.Vertex2f(width, height) - gl.Vertex2f(0, height) - gl.End() -} - -type GoType struct { - private bool // Besides being private, also adds a gap in the reflect field index. - - StringValue string - StringAddrValue *string - BoolValue bool - IntValue int - Int64Value int64 - Int32Value int32 - Uint32Value uint32 - Float64Value float64 - Float32Value float32 - AnyValue interface{} - ObjectValue qml.Object - ColorValue color.RGBA - IntsValue []int - ObjectsValue []qml.Object - MapValue map[string]interface{} - - SetterStringValue string - SetterObjectsValue []qml.Object - - setterStringValueChanged int - setterStringValueSet string - setterObjectsValueChanged int - setterObjectsValueSet []qml.Object - - getterStringValue string - getterStringValueChanged int - - // The object representing this value, on custom type tests. - object qml.Object -} - -// Force a gap in the reflect method index and ensure the handling -// of private methods is being done properly. -func (ts *GoType) privateMethod() {} - -func (ts *GoType) StringMethod() string { - return ts.StringValue -} - -func (ts *GoType) SetSetterStringValue(s string) { - ts.setterStringValueChanged++ - ts.setterStringValueSet = s -} - -func (ts *GoType) SetSetterObjectsValue(v []qml.Object) { - ts.setterObjectsValueChanged++ - ts.setterObjectsValueSet = v -} - -func (ts *GoType) GetterStringValue() string { - return ts.getterStringValue -} - -func (ts *GoType) SetGetterStringValue(s string) { - ts.getterStringValueChanged++ - ts.getterStringValue = s -} - -func (ts *GoType) SetMapValue(m map[string]interface{}) { - ts.MapValue = m -} - -func (ts *GoType) Mod(dividend, divisor int) (int, error) { - if divisor == 0 { - return 0, fmt.Errorf("") - } - return dividend % divisor, nil -} - -func (ts *GoType) ChangeString(new string) (old string) { - old = ts.StringValue - ts.StringValue = new - return -} - -func (ts *GoType) NotifyStringChanged() { - qml.Changed(ts, &ts.StringValue) -} - -func (ts *GoType) IncrementInt() { - ts.IntValue++ -} - -func (s *S) TestEngineDestroyedUse(c *C) { - s.engine.Destroy() - s.engine.Destroy() - c.Assert(s.engine.Context, PanicMatches, "engine already destroyed") -} - -var same = "" - -var getSetTests = []struct{ set, get interface{} }{ - {"value", same}, - {true, same}, - {false, same}, - {int(42), same}, - {int32(42), int(42)}, - {int64(42), same}, - {uint32(42), same}, - {uint64(42), same}, - {float64(42), same}, - {float32(42), same}, - {new(GoType), same}, - {nil, same}, - {42, same}, -} - -func (s *S) TestContextGetSet(c *C) { - for i, t := range getSetTests { - want := t.get - if t.get == same { - want = t.set - } - s.context.SetVar("key", t.set) - c.Assert(s.context.Var("key"), Equals, want, - Commentf("entry %d is {%v (%T), %v (%T)}", i, t.set, t.set, t.get, t.get)) - } -} - -func (s *S) TestContextGetMissing(c *C) { - c.Assert(s.context.Var("missing"), Equals, nil) -} - -func (s *S) TestContextSetVars(c *C) { - component, err := s.engine.LoadString("file.qml", "import QtQuick 2.0\nItem { width: 42 }") - c.Assert(err, IsNil) - root := component.Create(nil) - - vars := GoType{ - StringValue: "", - BoolValue: true, - IntValue: 42, - Int64Value: 42, - Int32Value: 42, - Float64Value: 4.2, - Float32Value: 4.2, - AnyValue: nil, - ObjectValue: root, - } - s.context.SetVars(&vars) - - c.Assert(s.context.Var("stringValue"), Equals, "") - c.Assert(s.context.Var("boolValue"), Equals, true) - c.Assert(s.context.Var("intValue"), Equals, 42) - c.Assert(s.context.Var("int64Value"), Equals, int64(42)) - c.Assert(s.context.Var("int32Value"), Equals, 42) - c.Assert(s.context.Var("float64Value"), Equals, float64(4.2)) - c.Assert(s.context.Var("float32Value"), Equals, float32(4.2)) - c.Assert(s.context.Var("anyValue"), Equals, nil) - - vars.AnyValue = 42 - c.Assert(s.context.Var("anyValue"), Equals, 42) - - c.Assert(s.context.Var("objectValue").(qml.Object).Int("width"), Equals, 42) -} - -func (s *S) TestComponentSetDataError(c *C) { - _, err := s.engine.LoadString("file.qml", "Item{}") - c.Assert(err, ErrorMatches, "file:.*/file.qml:1 Item is not a type") -} - -func (s *S) TestComponentCreateWindow(c *C) { - data := ` - import QtQuick 2.0 - Item { width: 300; height: 200; } - ` - component, err := s.engine.LoadString("file.qml", data) - c.Assert(err, IsNil) - - // TODO How to test this more effectively? - window := component.CreateWindow(nil) - window.Show() - - // Just a smoke test, as there isn't much to assert. - c.Assert(window.PlatformId(), Not(Equals), uintptr(0)) - - // Qt doesn't hide the Window if we call it too quickly. :-( - time.Sleep(100 * time.Millisecond) - window.Hide() -} - -func (s *S) TestContextSpawn(c *C) { - context1 := s.engine.Context() - context2 := context1.Spawn() - - context1.SetVar("mystr", "context1") - context2.SetVar("mystr", "context2") - - data := ` - import QtQuick 2.0 - Item { property var s: mystr } - ` - component, err := s.engine.LoadString("file.qml", data) - c.Assert(err, IsNil) - - obj1 := component.Create(context1) - obj2 := component.Create(context2) - - c.Assert(obj1.String("s"), Equals, "context1") - c.Assert(obj2.String("s"), Equals, "context2") -} - -func (s *S) TestReadVoidAddrProperty(c *C) { - obj := cpptest.NewTestType(s.engine) - addr := obj.Property("voidAddr").(uintptr) - c.Assert(addr, Equals, uintptr(42)) -} - -func (s *S) TestRegisterConverterPlainObject(c *C) { - qml.RegisterConverter("PlainTestType", func(engine *qml.Engine, obj qml.Object) interface{} { - c.Check(engine, Equals, s.engine) - c.Check(obj.String("plainType"), Matches, "(const )?PlainTestType[&*]?") - c.Check(obj.Property("plainAddr"), FitsTypeOf, uintptr(0)) - c.Check(cpptest.PlainTestTypeN(obj), Equals, 42) - return "" - }) - obj := cpptest.NewTestType(s.engine) - defer obj.Destroy() - - var calls int - obj.On("plainEmittedCpy", func(s string) { - c.Check(s, Equals, "") - calls++ - }) - obj.On("plainEmittedRef", func(s string) { - c.Check(s, Equals, "") - calls++ - }) - obj.On("plainEmittedPtr", func(s string) { - c.Check(s, Equals, "") - calls++ - }) - obj.Call("emitPlain") - c.Assert(calls, Equals, 3) -} - -func (s *S) TestIssue84(c *C) { - // Regression test for issue #84 (QTBUG-41193). - data := ` - import QtQuick 2.0 - Item { - id: item - property string s1: "" - property string s2: "" - states: State { - name: "after"; - PropertyChanges { target: item; s1: s2 } - } - Component.onCompleted: state = "after" - } - ` - filename := filepath.Join(c.MkDir(), "file.qml") - err := ioutil.WriteFile(filename, []byte(data), 0644) - c.Assert(err, IsNil) - - component, err := s.engine.LoadString(filename, data) - c.Assert(err, IsNil) - - root := component.Create(nil) - defer root.Destroy() - - c.Assert(root.String("s1"), Equals, "") -} - -func (s *S) TestResources(c *C) { - var rp qml.ResourcesPacker - rp.Add("sub/path/Foo.qml", []byte("import QtQuick 2.0\nItem { Component.onCompleted: console.log('') }")) - rp.AddString("sub/path/Bar.qml", "import QtQuick 2.0\nItem { Component.onCompleted: console.log('') }") - rp.AddString("/sub/Main.qml", "import QtQuick 2.0\nimport \"./path\"\nItem {\nFoo{}\nBar{}\n}") - - r := rp.Pack() - qml.LoadResources(r) - testResourcesLoaded(c, true) - qml.UnloadResources(r) - testResourcesLoaded(c, false) - - data := r.Bytes() - - rb, err := qml.ParseResources(data) - c.Assert(err, IsNil) - qml.LoadResources(rb) - testResourcesLoaded(c, true) - qml.UnloadResources(rb) - testResourcesLoaded(c, false) - - rs, err := qml.ParseResourcesString(string(data)) - c.Assert(err, IsNil) - qml.LoadResources(rs) - testResourcesLoaded(c, true) - qml.UnloadResources(rs) - testResourcesLoaded(c, false) -} - -func testResourcesLoaded(c *C, loaded bool) { - engine := qml.NewEngine() - defer engine.Destroy() - component, err := engine.LoadFile("qrc:///sub/Main.qml") - if loaded { - c.Assert(err, IsNil) - } else { - c.Assert(err, ErrorMatches, "qrc:///sub/Main.qml:-1 File not found") - return - } - root := component.Create(nil) - defer root.Destroy() - c.Assert(c.GetTestLog(), Matches, "(?s).*(.*|.*).*") -} - -func (s *S) TestResourcesIssue107(c *C) { - var rp qml.ResourcesPacker - - rp.Add("a/Foo.qml", []byte("import QtQuick 2.0\nItem { Component.onCompleted: console.log('') }")) - rp.Add("b/Bar.qml", []byte("import QtQuick 2.0\nItem { Component.onCompleted: console.log('') }")) - rp.Add("c/Baz.qml", []byte("import QtQuick 2.0\nItem { Component.onCompleted: console.log('') }")) - rp.Add("d/Buz.qml", []byte("import QtQuick 2.0\nItem { Component.onCompleted: console.log('') }")) - - r := rp.Pack() - qml.LoadResources(r) - - for _, name := range []string{"a/Foo", "b/Bar", "c/Baz", "d/Buz"} { - component, err := s.engine.LoadFile("qrc:///" + name + ".qml") - c.Assert(err, IsNil) - root := component.Create(nil) - defer root.Destroy() - } - c.Assert(c.GetTestLog(), Matches, "(?s).*.*.*.*.*") -} - -type TestData struct { - *C - engine *qml.Engine - context *qml.Context - component qml.Object - root qml.Object - value *GoType - createdValue []*GoType - createdRect []*GoRect - createdSingleton []*GoType -} - -var tests = []struct { - Summary string - Value GoType - Rect GoRect - - Init func(d *TestData) - - // The QML provided is run with the initial state above, and - // then checks are made to ensure the provided state is found. - QML string - QMLLog string - QMLValue GoType - - // The function provided is run with the post-QML state above, - // and then checks are made to ensure the provided state is found. - Done func(c *TestData) - DoneLog string - DoneValue GoType -}{ - { - Summary: "Read a context variable and its fields", - Value: GoType{StringValue: "", IntValue: 42}, - QML: ` - Item { - Component.onCompleted: { - console.log("String is", value.stringValue) - console.log("Int is", value.intValue) - console.log("Any is", value.anyValue) - } - } - `, - QMLLog: "String is .*Int is 42.*Any is undefined", - }, - { - Summary: "Read a nested field via a value (not pointer) in an interface", - Value: GoType{AnyValue: struct{ StringValue string }{""}}, - QML: `Item { Component.onCompleted: console.log("String is", value.anyValue.stringValue) }`, - QMLLog: "String is ", - }, - { - Summary: "Read a native property", - QML: `Item { width: 123 }`, - Done: func(c *TestData) { c.Check(c.root.Int("width"), Equals, 123) }, - }, - { - Summary: "Read object properties", - QML: ` - Item { - property bool boolp: true - property int intp: 1 - property var int64p: 4294967296 - property real float32p: 1.1 - property double float64p: 1.1 - property string stringp: "" - property var objectp: Rectangle { width: 123 } - property var nilp: null - } - `, - Done: func(c *TestData) { - obj := c.root - c.Check(obj.Bool("boolp"), Equals, true) - c.Check(obj.Int("intp"), Equals, 1) - c.Check(obj.Int64("intp"), Equals, int64(1)) - c.Check(obj.Int64("int64p"), Equals, int64(4294967296)) - c.Check(obj.Float64("intp"), Equals, float64(1)) - c.Check(obj.Float64("int64p"), Equals, float64(4294967296)) - c.Check(obj.Float64("float32p"), Equals, float64(1.1)) - c.Check(obj.Float64("float64p"), Equals, float64(1.1)) - c.Check(obj.String("stringp"), Equals, "") - c.Check(obj.Object("objectp").Int("width"), Equals, 123) - c.Check(obj.Property("nilp"), Equals, nil) - - c.Check(func() { obj.Bool("intp") }, Panics, `value of property "intp" is not a bool: 1`) - c.Check(func() { obj.Int("boolp") }, Panics, `value of property "boolp" cannot be represented as an int: true`) - c.Check(func() { obj.Int64("boolp") }, Panics, `value of property "boolp" cannot be represented as an int64: true`) - c.Check(func() { obj.Float64("boolp") }, Panics, `value of property "boolp" cannot be represented as a float64: true`) - c.Check(func() { obj.String("boolp") }, Panics, `value of property "boolp" is not a string: true`) - c.Check(func() { obj.Object("boolp") }, Panics, `value of property "boolp" is not a QML object: true`) - c.Check(func() { obj.Property("missing") }, Panics, `object does not have a "missing" property`) - }, - }, - { - Summary: "Lowercasing of object properties", - Init: func(c *TestData) { - obj := struct{ THE, THEName, Name, N string }{"", "", "", ""} - c.context.SetVar("obj", &obj) - }, - QML: `Item { Component.onCompleted: console.log("Names are", obj.the, obj.theName, obj.name, obj.n) }`, - QMLLog: "Names are ", - }, - { - Summary: "No access to private fields", - Value: GoType{private: true}, - QML: `Item { Component.onCompleted: console.log("Private is", value.private); }`, - QMLLog: "Private is undefined", - }, - { - Summary: "Set a custom property", - QML: ` - Item { - property var obj: null - - onObjChanged: console.log("String is", obj.stringValue) - onWidthChanged: console.log("Width is", width) - onHeightChanged: console.log("Height is", height) - } - `, - Done: func(c *TestData) { - value := GoType{StringValue: ""} - c.root.Set("obj", &value) - c.root.Set("width", 300) - c.root.Set("height", 200) - }, - DoneLog: "String is .*Width is 300.*Height is 200", - }, - { - Summary: "Read and set a QUrl property", - QML: `import QtWebKit 3.0; WebView {}`, - Done: func(c *TestData) { - c.Check(c.root.String("url"), Equals, "") - url := "http://localhost:54321" - c.root.Set("url", url) - c.Check(c.root.String("url"), Equals, url) - }, - }, - { - Summary: "Read and set a QColor property", - QML: `Text{ color: Qt.rgba(1/16, 1/8, 1/4, 1/2); function hasColor(c) { return Qt.colorEqual(color, c) }}`, - Done: func(c *TestData) { - c.Assert(c.root.Color("color"), Equals, color.RGBA{256 / 16, 256 / 8, 256 / 4, 256 / 2}) - c.root.Set("color", color.RGBA{256 / 2, 256 / 4, 256 / 8, 256 / 16}) - c.Assert(c.root.Call("hasColor", color.RGBA{256 / 2, 256 / 4, 256 / 8, 256 / 16}), Equals, true) - }, - }, - { - Summary: "Read and set a QColor property from a Go field", - Init: func(c *TestData) { c.value.ColorValue = color.RGBA{256 / 16, 256 / 8, 256 / 4, 256 / 2} }, - QML: `Text{ property var c: value.colorValue; Component.onCompleted: { console.log(value.colorValue); } }`, - Done: func(c *TestData) { - c.Assert(c.root.Color("c"), Equals, color.RGBA{256 / 16, 256 / 8, 256 / 4, 256 / 2}) - }, - }, - { - Summary: "Read a QQmlListProperty property into a Go slice", - QML: ` - Item { - states: [ - State { id: on; name: "on" }, - State { id: off; name: "off" } - ] - } - `, - Done: func(c *TestData) { - var states []qml.Object - c.root.List("states").Convert(&states) - c.Assert(states[0].String("name"), Equals, "on") - c.Assert(states[1].String("name"), Equals, "off") - c.Assert(len(states), Equals, 2) - c.Assert(c.root.Property("states").(*qml.List).Len(), Equals, 2) - }, - }, - { - Summary: "Read a QQmlListReference property into a Go slice", - QML: ` - Item { - property list mystates: [ - State { id: on; name: "on" }, - State { id: off; name: "off" } - ] - Component.onCompleted: value.objectsValue = mystates - } - `, - Done: func(c *TestData) { - var states []qml.Object - c.root.List("mystates").Convert(&states) - c.Assert(states[0].String("name"), Equals, "on") - c.Assert(states[1].String("name"), Equals, "off") - c.Assert(len(states), Equals, 2) - c.Assert(len(c.value.ObjectsValue), Equals, 2) - }, - }, - { - Summary: "Read a QVariantList property into a Go slice", - QML: ` - Item { - State { id: on; name: "on" } - State { id: off; name: "off" } - property var mystates: [on, off] - } - `, - Done: func(c *TestData) { - var states []qml.Object - c.root.List("mystates").Convert(&states) - c.Assert(states[0].String("name"), Equals, "on") - c.Assert(states[1].String("name"), Equals, "off") - c.Assert(len(states), Equals, 2) - }, - }, - { - Summary: "Set a Go slice property", - QML: `Item { Component.onCompleted: value.intsValue = [1, 2, 3.5] }`, - QMLValue: GoType{IntsValue: []int{1, 2, 3}}, - }, - { - Summary: "Set a Go slice property with objects", - QML: ` - Item { - State { id: on; name: "on" } - State { id: off; name: "off" } - Component.onCompleted: value.objectsValue = [on, off] - } - `, - Done: func(c *TestData) { - c.Assert(c.value.ObjectsValue[0].String("name"), Equals, "on") - c.Assert(c.value.ObjectsValue[1].String("name"), Equals, "off") - c.Assert(len(c.value.ObjectsValue), Equals, 2) - }, - }, - { - Summary: "Call a method with a JSON object (issue #48)", - QML: `Item { Component.onCompleted: value.setMapValue({a: 1, b: 2}) }`, - QMLValue: GoType{MapValue: map[string]interface{}{"a": 1, "b": 2}}, - }, - { - Summary: "Read a map from a QML property", - QML: `Item { property var m: {"a": 1, "b": 2} }`, - Done: func(c *TestData) { - var m1 map[string]interface{} - var m2 map[string]int - m := c.root.Map("m") - m.Convert(&m1) - m.Convert(&m2) - c.Assert(m1, DeepEquals, map[string]interface{}{"a": 1, "b": 2}) - c.Assert(m2, DeepEquals, map[string]int{"a": 1, "b": 2}) - c.Assert(m.Len(), Equals, 2) - }, - }, - { - Summary: "Identical values remain identical when possible", - Init: func(c *TestData) { - c.context.SetVar("a", c.value) - c.context.SetVar("b", c.value) - }, - QML: `Item { Component.onCompleted: console.log('Identical:', a === b); }`, - QMLLog: "Identical: true", - }, - { - Summary: "Object finding via ObjectByName", - QML: `Item { Item { objectName: "subitem"; property string s: "" } }`, - Done: func(c *TestData) { - obj := c.root.ObjectByName("subitem") - c.Check(obj.String("s"), Equals, "") - c.Check(func() { c.root.ObjectByName("foo") }, Panics, `cannot find descendant with objectName == "foo"`) - }, - }, - { - Summary: "Object finding via ObjectByName on GoType", - QML: `Item { GoType { objectName: "subitem"; property string s: "" } }`, - Done: func(c *TestData) { - obj := c.root.ObjectByName("subitem") - c.Check(obj.String("s"), Equals, "") - c.Check(func() { c.root.ObjectByName("foo") }, Panics, `cannot find descendant with objectName == "foo"`) - }, - }, - { - Summary: "Register Go type", - QML: `GoType { objectName: "test"; Component.onCompleted: console.log("String is", stringValue) }`, - QMLLog: "String is ", - Done: func(c *TestData) { - c.Assert(c.createdValue, HasLen, 1) - c.Assert(c.createdValue[0].object.String("objectName"), Equals, "test") - }, - }, - { - Summary: "Register Go type with an explicit name", - QML: `NamedGoType { objectName: "test"; Component.onCompleted: console.log("String is", stringValue) }`, - QMLLog: "String is ", - Done: func(c *TestData) { - c.Assert(c.createdValue, HasLen, 1) - c.Assert(c.createdValue[0].object.String("objectName"), Equals, "test") - }, - }, - { - Summary: "Write Go type property", - QML: `GoType { stringValue: ""; intValue: 300 }`, - Done: func(c *TestData) { - c.Assert(c.createdValue, HasLen, 1) - c.Assert(c.createdValue[0].StringValue, Equals, "") - c.Assert(c.createdValue[0].IntValue, Equals, 300) - }, - }, - { - Summary: "Write Go type property that has a setter", - QML: `GoType { setterStringValue: "" }`, - Done: func(c *TestData) { - c.Assert(c.createdValue, HasLen, 1) - c.Assert(c.createdValue[0].SetterStringValue, Equals, "") - c.Assert(c.createdValue[0].setterStringValueChanged, Equals, 1) - c.Assert(c.createdValue[0].setterStringValueSet, Equals, "") - }, - }, - { - Summary: "Write Go type property that has a setter and a getter", - QML: ` - GoType { - getterStringValue: "" - Component.onCompleted: console.log("Getter returned", getterStringValue) - } - `, - QMLLog: `Getter returned `, - Done: func(c *TestData) { - c.Assert(c.createdValue, HasLen, 1) - c.Assert(c.createdValue[0].getterStringValue, Equals, "") - c.Assert(c.createdValue[0].getterStringValueChanged, Equals, 1) - }, - }, - { - Summary: "Write an inline object list to a Go type property", - QML: ` - GoType { - objectsValue: [State{ name: "on" }, State{ name: "off" }] - Component.onCompleted: { - console.log("Length:", objectsValue.length) - console.log("Name:", objectsValue[0].name) - } - } - `, - QMLLog: "Length: 2.*Name: on", - Done: func(c *TestData) { - c.Assert(c.createdValue, HasLen, 1) - c.Assert(c.createdValue[0].ObjectsValue[0].String("name"), Equals, "on") - c.Assert(c.createdValue[0].ObjectsValue[1].String("name"), Equals, "off") - c.Assert(c.createdValue[0].ObjectsValue, HasLen, 2) - }, - }, - { - Summary: "Write an inline object list to a Go type property that has a setter", - QML: `GoType { setterObjectsValue: [State{ name: "on" }, State{ name: "off" }] }`, - Done: func(c *TestData) { - // Note that the setter is not actually updating the field value, for testing purposes. - c.Assert(c.createdValue, HasLen, 1) - c.Assert(c.createdValue[0].SetterObjectsValue, IsNil) - c.Assert(c.createdValue[0].setterObjectsValueChanged, Equals, 2) - c.Assert(c.createdValue[0].setterObjectsValueSet, HasLen, 1) - c.Assert(c.createdValue[0].setterObjectsValueSet[0].String("name"), Equals, "off") - }, - }, - { - Summary: "Clear an object list in a Go type property", - QML: ` - GoType { - objectsValue: [State{ name: "on" }, State{ name: "off" }] - Component.onCompleted: objectsValue = [] - } - `, - Done: func(c *TestData) { - c.Assert(c.createdValue, HasLen, 1) - c.Assert(c.createdValue[0].ObjectsValue, HasLen, 0) - }, - }, - { - Summary: "Clear an object list in a Go type property that has a setter", - Value: GoType{SetterObjectsValue: []qml.Object{nil, nil}}, - QML: ` - GoType { - objectsValue: [State{ name: "on" }, State{ name: "off" }] - function clear() { setterObjectsValue = [] } - } - `, - Done: func(c *TestData) { - // Note that the setter is not actually updating the field value, for testing purposes. - c.Assert(c.createdValue, HasLen, 1) - c.createdValue[0].SetterObjectsValue = c.createdValue[0].ObjectsValue - - c.createdValue[0].object.Call("clear") - - c.Assert(c.createdValue[0].SetterObjectsValue, HasLen, 2) - c.Assert(c.createdValue[0].setterObjectsValueChanged, Equals, 1) - c.Assert(c.createdValue[0].setterObjectsValueSet, DeepEquals, []qml.Object{}) - c.Assert(&c.createdValue[0].SetterObjectsValue[0], Equals, &c.createdValue[0].ObjectsValue[0]) - }, - }, - { - Summary: "Access underlying Go value with Interface", - QML: `GoType { stringValue: "" }`, - Done: func(c *TestData) { - c.Assert(c.root.Interface().(*GoType).StringValue, Equals, "") - c.Assert(c.context.Interface, Panics, "QML object is not backed by a Go value") - }, - }, - { - Summary: "Notification signals on custom Go type", - QML: ` - GoType { - id: custom - stringValue: "" - onStringValueChanged: if (custom.stringValue != "") { custom.stringValue = "" } - Component.onCompleted: custom.stringValue = "" - } - `, - Done: func(c *TestData) { - c.Assert(c.createdValue, HasLen, 1) - c.Assert(c.createdValue[0].StringValue, Equals, "") - }, - }, - { - Summary: "Singleton type registration", - QML: `Item { Component.onCompleted: console.log("String is", GoSingleton.stringValue) }`, - QMLLog: "String is ", - }, - { - Summary: "qml.Changed on unknown value is okay", - Value: GoType{StringValue: ""}, - Init: func(c *TestData) { - value := &GoType{} - qml.Changed(&value, &value.StringValue) - }, - QML: `Item{}`, - }, - { - Summary: "qml.Changed triggers a QML slot", - QML: ` - GoType { - stringValue: "" - onStringValueChanged: console.log("String is", stringValue) - onStringAddrValueChanged: console.log("String at addr is", stringAddrValue) - } - `, - QMLLog: "!String is", - Done: func(c *TestData) { - c.Assert(c.createdValue, HasLen, 1) - value := c.createdValue[0] - s := "" - value.StringValue = "" - value.StringAddrValue = &s - qml.Changed(value, &value.StringValue) - qml.Changed(value, &value.StringAddrValue) - }, - DoneLog: "String is .*String at addr is ", - }, - { - Summary: "qml.Changed must not trigger on the wrong field", - QML: ` - GoType { - stringValue: "" - onStringValueChanged: console.log("String is", stringValue) - } - `, - Done: func(c *TestData) { - c.Assert(c.createdValue, HasLen, 1) - value := c.createdValue[0] - value.StringValue = "" - qml.Changed(value, &value.IntValue) - }, - DoneLog: "!String is", - }, - { - Summary: "qml.Changed updates bindings", - Value: GoType{StringValue: ""}, - QML: `Item { property string s: "String is " + value.stringValue }`, - Done: func(c *TestData) { - c.value.StringValue = "" - qml.Changed(c.value, &c.value.StringValue) - c.Check(c.root.String("s"), Equals, "String is ") - }, - }, - { - Summary: "Call a Go method without arguments or result", - Value: GoType{IntValue: 42}, - QML: `Item { Component.onCompleted: console.log("Undefined is", value.incrementInt()); }`, - QMLLog: "Undefined is undefined", - QMLValue: GoType{IntValue: 43}, - }, - { - Summary: "Call a Go method with one argument and one result", - Value: GoType{StringValue: ""}, - QML: `Item { Component.onCompleted: console.log("String was", value.changeString("")); }`, - QMLLog: "String was ", - QMLValue: GoType{StringValue: ""}, - }, - { - Summary: "Call a Go method with multiple results", - QML: ` - Item { - Component.onCompleted: { - var r = value.mod(42, 4); - console.log("mod is", r[0], "and err is", r[1]); - } - } - `, - QMLLog: `mod is 2 and err is undefined`, - }, - { - Summary: "Call a Go method that returns an error", - QML: ` - Item { - Component.onCompleted: { - var r = value.mod(0, 0); - console.log("err is", r[1].error()); - } - } - `, - QMLLog: `err is `, - }, - { - Summary: "Call a Go method that recurses back into the GUI thread", - QML: ` - Item { - Connections { - target: value - onStringValueChanged: console.log("Notification arrived") - } - Component.onCompleted: { - value.notifyStringChanged() - } - } - `, - QMLLog: "Notification arrived", - }, - { - Summary: "Connect a QML signal to a Go method", - Value: GoType{StringValue: ""}, - QML: ` - Item { - id: item - signal testSignal(string s) - Component.onCompleted: { - item.testSignal.connect(value.changeString) - item.testSignal("") - } - } - `, - QMLValue: GoType{StringValue: ""}, - }, - { - Summary: "Call a QML method with no result or parameters from Go", - QML: `Item { function f() { console.log("f was called"); } }`, - Done: func(c *TestData) { c.Check(c.root.Call("f"), IsNil) }, - DoneLog: "f was called", - }, - { - Summary: "Call a QML method with result and parameters from Go", - QML: `Item { function add(a, b) { return a+b; } }`, - Done: func(c *TestData) { c.Check(c.root.Call("add", 1, 2.1), Equals, float64(3.1)) }, - }, - { - Summary: "Call a QML method with a custom type", - Value: GoType{StringValue: ""}, - QML: `Item { function log(value) { console.log("String is", value.stringValue) } }`, - Done: func(c *TestData) { c.root.Call("log", c.value) }, - DoneLog: "String is ", - }, - { - Summary: "Call a QML method that returns a QML object", - QML: ` - Item { - property var custom: Rectangle { width: 300; } - function f() { return custom } - } - `, - Done: func(c *TestData) { - c.Check(c.root.Call("f").(qml.Object).Int("width"), Equals, 300) - }, - }, - { - Summary: "Call a QML method that holds a custom type past the return point", - QML: ` - Item { - property var held - function hold(v) { held = v; gc(); gc(); } - function log() { console.log("String is", held.stringValue) } - }`, - Done: func(c *TestData) { - value := GoType{StringValue: ""} - stats := qml.Stats() - c.root.Call("hold", &value) - c.Check(qml.Stats().ValuesAlive, Equals, stats.ValuesAlive+1) - c.root.Call("log") - c.root.Call("hold", nil) - c.Check(qml.Stats().ValuesAlive, Equals, stats.ValuesAlive) - }, - DoneLog: "String is ", - }, - { - Summary: "Call a non-existent QML method", - QML: `Item {}`, - Done: func(c *TestData) { - c.Check(func() { c.root.Call("add", 1, 2) }, Panics, `object does not expose a method "add"`) - }, - }, - { - Summary: "Ensure URL of provided file is correct by loading a local file", - Init: func(c *TestData) { - data, err := base64.StdEncoding.DecodeString("R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==") - c.Assert(err, IsNil) - err = ioutil.WriteFile("test.gif", data, 0644) - c.Check(err, IsNil) - }, - QML: `Image { source: "test.gif"; Component.onCompleted: console.log("Ready:", status == Image.Ready) }`, - QMLLog: "Ready: true", - Done: func(c *TestData) { os.Remove("test.gif") }, - }, - { - Summary: "Create window with non-window root object", - QML: `Rectangle { width: 300; height: 200; function inc(x) { return x+1 } }`, - Done: func(c *TestData) { - win := c.component.CreateWindow(nil) - root := win.Root() - c.Check(root.Int("width"), Equals, 300) - c.Check(root.Int("height"), Equals, 200) - c.Check(root.Call("inc", 42.5), Equals, float64(43.5)) - root.Destroy() - }, - }, - { - Summary: "Create window with window root object", - QML: ` - import QtQuick.Window 2.0 - Window { title: ""; width: 300; height: 200 } - `, - Done: func(c *TestData) { - win := c.component.CreateWindow(nil) - root := win.Root() - c.Check(root.String("title"), Equals, "<title>") - c.Check(root.Int("width"), Equals, 300) - c.Check(root.Int("height"), Equals, 200) - }, - }, - { - Summary: "Window is object", - QML: `Item {}`, - Done: func(c *TestData) { - win := c.component.CreateWindow(nil) - c.Assert(win.Int("status"), Equals, 1) // Ready - }, - }, - { - Summary: "Pass a *Value back into a method", - QML: `Rectangle { width: 300; function log(r) { console.log("Width is", r.width) } }`, - Done: func(c *TestData) { c.root.Call("log", c.root) }, - DoneLog: "Width is 300", - }, - { - Summary: "Create a QML-defined component in Go", - QML: `Item { property var comp: Component { Rectangle { width: 300 } } }`, - Done: func(c *TestData) { - rect := c.root.Object("comp").Create(nil) - c.Check(rect.Int("width"), Equals, 300) - c.Check(func() { c.root.Create(nil) }, Panics, "object is not a component") - c.Check(func() { c.root.CreateWindow(nil) }, Panics, "object is not a component") - }, - }, - { - Summary: "Call a Qt method that has no result", - QML: `Item { Component.onDestruction: console.log("item destroyed") }`, - Done: func(c *TestData) { - // Create a local instance to avoid double-destroying it. - root := c.component.Create(nil) - root.Call("deleteLater") - time.Sleep(100 * time.Millisecond) - }, - DoneLog: "item destroyed", - }, - { - Summary: "Errors connecting to QML signals", - QML: `Item { signal doIt() }`, - Done: func(c *TestData) { - c.Check(func() { c.root.On("missing", func() {}) }, Panics, `object does not expose a "missing" signal`) - c.Check(func() { c.root.On("doIt", func(s string) {}) }, Panics, `signal "doIt" has too few parameters for provided function`) - }, - }, - { - Summary: "Connect to a QML signal without parameters", - QML: ` - Item { - id: item - signal doIt() - function emitDoIt() { item.doIt() } - } - `, - Done: func(c *TestData) { - itWorks := false - c.root.On("doIt", func() { itWorks = true }) - c.Check(itWorks, Equals, false) - c.root.Call("emitDoIt") - c.Check(itWorks, Equals, true) - }, - }, - { - Summary: "Connect to a QML signal with a parameters", - QML: ` - Item { - id: item - signal doIt(string s, int n) - function emitDoIt() { item.doIt("<arg>", 123) } - } - `, - Done: func(c *TestData) { - var stack []interface{} - c.root.On("doIt", func() { stack = append(stack, "A") }) - c.root.On("doIt", func(s string) { stack = append(stack, "B", s) }) - c.root.On("doIt", func(s string, i int) { stack = append(stack, "C", s, i) }) - c.Check(stack, IsNil) - c.root.Call("emitDoIt") - c.Check(stack, DeepEquals, []interface{}{"A", "B", "<arg>", "C", "<arg>", 123}) - }, - }, - { - Summary: "Connect to a QML signal with an object parameter", - QML: `import QtWebKit 3.0; WebView{}`, - Done: func(c *TestData) { - url := "http://localhost:54321/" - done := make(chan bool) - c.root.On("navigationRequested", func(request qml.Object) { - c.Check(request.String("url"), Equals, url) - done <- true - }) - c.root.Set("url", url) - <-done - }, - }, - { - Summary: "Load image from Go provider", - Init: func(c *TestData) { - c.engine.AddImageProvider("myprov", func(id string, width, height int) image.Image { - return image.NewRGBA(image.Rect(0, 0, 200, 100)) - }) - }, - QML: ` - Image { - source: "image://myprov/myid.png" - Component.onCompleted: console.log("Size:", width, height) - } - `, - QMLLog: "Size: 200 100", - }, - { - Summary: "TypeName", - QML: `Item{}`, - Done: func(c *TestData) { c.Assert(c.root.TypeName(), Equals, "QQuickItem") }, - }, - { - Summary: "Custom Go type with painting", - QML: ` - Rectangle { - width: 200; height: 200 - color: "black" - GoRect { - width: 100; height: 100; x: 50; y: 50 - } - } - `, - Done: func(c *TestData) { - c.Assert(c.createdRect, HasLen, 0) - - window := c.component.CreateWindow(nil) - defer window.Destroy() - window.Show() - - // Qt doesn't hide the Window if we call it too quickly. :-( - time.Sleep(100 * time.Millisecond) - - c.Assert(c.createdRect, HasLen, 1) - c.Assert(c.createdRect[0].PaintCount, Equals, 1) - - image := window.Snapshot() - c.Assert(image.At(25, 25), Equals, color.RGBA{0, 0, 0, 255}) - c.Assert(image.At(100, 100), Equals, color.RGBA{255, 0, 0, 255}) - }, - }, - { - Summary: "Set a property with the wrong type", - QML: ` - import QtQuick.Window 2.0 - Window { Rectangle { objectName: "rect" } } - `, - Done: func(c *TestData) { - window := c.component.CreateWindow(nil) - defer window.Destroy() - - root := window.Root() // It's the window itself in this case - rect := root.ObjectByName("rect") - - c.Assert(func() { rect.Set("parent", root) }, Panics, - `cannot set property "parent" with type QQuickItem* to value of QQuickWindow*`) - c.Assert(func() { rect.Set("parent", 42) }, Panics, - `cannot set property "parent" with type QQuickItem* to value of int`) - c.Assert(func() { rect.Set("non_existent", 0) }, Panics, - `cannot set non-existent property "non_existent" on type QQuickRectangle`) - }, - }, - { - Summary: "Register a type converter for a signal parameter", - QML: ` - Item { - id: item - property Item self - signal testSignal(Item obj) - function emitSignal() { item.testSignal(item) } - function getSelf() { return item } - Component.onCompleted: { self = item } - } - `, - Done: func(c *TestData) { - type Wrapper struct{ Item qml.Object } - qml.RegisterConverter(c.root.TypeName(), func(engine *qml.Engine, item qml.Object) interface{} { - return &Wrapper{item} - }) - defer qml.RegisterConverter(c.root.TypeName(), nil) - - // Check that it works on signal parameters... - c.root.On("testSignal", func(wrapped *Wrapper) { - c.Check(wrapped.Item.Addr(), Equals, c.root.Addr()) - c.Logf("Signal has run.") - }) - c.root.Call("emitSignal") - - // ... on properties ... - wrapped, ok := c.root.Property("self").(*Wrapper) - if c.Check(ok, Equals, true) { - c.Check(wrapped.Item.Addr(), Equals, c.root.Addr()) - } - - // ... and on results. - wrapped, ok = c.root.Call("getSelf").(*Wrapper) - if c.Check(ok, Equals, true) { - c.Check(wrapped.Item.Addr(), Equals, c.root.Addr()) - } - - // Now unregister and ensure it got disabled. - qml.RegisterConverter(c.root.TypeName(), nil) - _, ok = c.root.Property("self").(*qml.Common) - c.Check(ok, Equals, true) - }, - DoneLog: "Signal has run.", - }, - { - Summary: "References handed out must not be GCd (issue #68)", - Init: func(c *TestData) { - type B struct{ S string } - type A struct{ B *B } - c.context.SetVar("a", &A{&B{}}) - }, - QML: `Item { function f() { var x = [[],[],[]]; gc(); if (!a.b) console.log("BUG"); } }`, - Done: func(c *TestData) { - for i := 0; i < 100; i++ { - c.root.Call("f") - } - }, - DoneLog: "!BUG", - }, -} - -var tablef = flag.String("tablef", "", "if provided, TestTable only runs tests with a summary matching the regexp") - -func (s *S) TestTable(c *C) { - var testData TestData - - types := []qml.TypeSpec{{ - Init: func(v *GoType, obj qml.Object) { - v.object = obj - v.StringValue = "<initial>" - testData.createdValue = append(testData.createdValue, v) - }, - }, { - Name: "NamedGoType", - Init: func(v *GoType, obj qml.Object) { - v.object = obj - v.StringValue = "<initial>" - testData.createdValue = append(testData.createdValue, v) - }, - }, { - Name: "GoSingleton", - Init: func(v *GoType, obj qml.Object) { - v.object = obj - v.StringValue = "<initial>" - testData.createdSingleton = append(testData.createdSingleton, v) - }, - Singleton: true, - }, { - Init: func(v *GoRect, obj qml.Object) { - testData.createdRect = append(testData.createdRect, v) - }, - }} - - qml.RegisterTypes("GoTypes", 4, 2, types) - - filter := regexp.MustCompile("") - if tablef != nil { - filter = regexp.MustCompile(*tablef) - } - - for i := range tests { - s.TearDownTest(c) - t := &tests[i] - header := fmt.Sprintf("----- Running table test %d: %s -----", i, t.Summary) - if !filter.MatchString(header) { - continue - } - c.Log(header) - s.SetUpTest(c) - - value := t.Value - s.context.SetVar("value", &value) - - testData = TestData{ - C: c, - value: &value, - engine: s.engine, - context: s.context, - } - - if t.Init != nil { - t.Init(&testData) - if c.Failed() { - c.FailNow() - } - } - - component, err := s.engine.LoadString("file.qml", "import QtQuick 2.0\nimport GoTypes 4.2\n"+strings.TrimSpace(t.QML)) - c.Assert(err, IsNil) - - logMark := c.GetTestLog() - - // The component instance is destroyed before the loop ends below, - // but do a defer to ensure it will be destroyed if the test fails. - root := component.Create(nil) - defer root.Destroy() - - testData.component = component - testData.root = root - - if t.QMLLog != "" { - logged := c.GetTestLog()[len(logMark):] - if t.QMLLog[0] == '!' { - c.Check(logged, Not(Matches), "(?s).*"+t.QMLLog[1:]+".*") - } else { - c.Check(logged, Matches, "(?s).*"+t.QMLLog+".*") - } - } - - if !reflect.DeepEqual(t.QMLValue, GoType{}) { - c.Check(value.StringValue, Equals, t.QMLValue.StringValue) - c.Check(value.StringAddrValue, Equals, t.QMLValue.StringAddrValue) - c.Check(value.BoolValue, Equals, t.QMLValue.BoolValue) - c.Check(value.IntValue, Equals, t.QMLValue.IntValue) - c.Check(value.Int64Value, Equals, t.QMLValue.Int64Value) - c.Check(value.Int32Value, Equals, t.QMLValue.Int32Value) - c.Check(value.Float64Value, Equals, t.QMLValue.Float64Value) - c.Check(value.Float32Value, Equals, t.QMLValue.Float32Value) - c.Check(value.AnyValue, Equals, t.QMLValue.AnyValue) - c.Check(value.IntsValue, DeepEquals, t.QMLValue.IntsValue) - c.Check(value.MapValue, DeepEquals, t.QMLValue.MapValue) - } - - if !c.Failed() { - logMark := c.GetTestLog() - - if t.Done != nil { - t.Done(&testData) - } - - if t.DoneLog != "" { - logged := c.GetTestLog()[len(logMark):] - if t.DoneLog[0] == '!' { - c.Check(logged, Not(Matches), "(?s).*"+t.DoneLog[1:]+".*") - } else { - c.Check(logged, Matches, "(?s).*"+t.DoneLog+".*") - } - } - - if !reflect.DeepEqual(t.DoneValue, GoType{}) { - c.Check(value.StringValue, Equals, t.DoneValue.StringValue) - c.Check(value.StringAddrValue, Equals, t.DoneValue.StringAddrValue) - c.Check(value.BoolValue, Equals, t.DoneValue.BoolValue) - c.Check(value.IntValue, Equals, t.DoneValue.IntValue) - c.Check(value.Int64Value, Equals, t.DoneValue.Int64Value) - c.Check(value.Int32Value, Equals, t.DoneValue.Int32Value) - c.Check(value.Float64Value, Equals, t.DoneValue.Float64Value) - c.Check(value.Float32Value, Equals, t.DoneValue.Float32Value) - c.Check(value.AnyValue, Equals, t.DoneValue.AnyValue) - c.Check(value.IntsValue, DeepEquals, t.DoneValue.IntsValue) - c.Check(value.MapValue, DeepEquals, t.DoneValue.MapValue) - } - } - - root.Destroy() - - if c.Failed() { - c.FailNow() // So relevant logs are at the bottom. - } - } -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/resources.go b/Godeps/_workspace/src/github.com/obscuren/qml/resources.go deleted file mode 100644 index 3809c1135b..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/resources.go +++ /dev/null @@ -1,375 +0,0 @@ -package qml - -import ( - "bytes" - "fmt" - "sort" - "strings" -) - -// ParseResources parses the resources collection serialized in data. -func ParseResources(data []byte) (*Resources, error) { - if len(data) < 20 || string(data[:4]) != "qres" { - return nil, fmt.Errorf("invalid resources data") - } - r, err := parseResourcesHeader(data[:20], len(data)) - if err != nil { - return nil, err - } - r.bdata = data - return r, nil -} - -// ParseResourcesString parses the resources collection serialized in data. -func ParseResourcesString(data string) (*Resources, error) { - if len(data) < 20 || data[:4] != "qres" { - return nil, fmt.Errorf("invalid resources data") - } - r, err := parseResourcesHeader([]byte(data[:20]), len(data)) - if err != nil { - return nil, err - } - r.sdata = data - return r, nil -} - -func parseResourcesHeader(h []byte, size int) (*Resources, error) { - r := &Resources{ - version: read32(h[4:]), - treeOffset: read32(h[8:]), - dataOffset: read32(h[12:]), - nameOffset: read32(h[16:]), - } - if r.version != resVersion { - return nil, fmt.Errorf("unsupported resources version: %d", r.version) - } - // Ideally this would do a full validation, but it's a good start. - if !(20 <= r.treeOffset && r.treeOffset < size && - 20 <= r.dataOffset && r.dataOffset < size && - 20 <= r.nameOffset && r.nameOffset < size) { - return nil, fmt.Errorf("corrupted resources data") - } - return r, nil -} - -func read32(b []byte) int { - return int(uint32(b[0])<<24 | uint32(b[1])<<16 | uint32(b[2])<<8 | uint32(b[3])) -} - -// Resources is a compact representation of a collection of resources -// (images, qml files, etc) that may be loaded by an Engine and referenced -// by QML at "qrc:///some/path", where "some/path" is the path the -// resource was added with. -// -// Resources must be registered with LoadResources to become available. -type Resources struct { - sdata string - bdata []byte - - version int - treeOffset int - dataOffset int - nameOffset int -} - -// Bytes returns a binary representation of the resources collection that -// may be parsed back with ParseResources or ParseResourcesString. -func (r *Resources) Bytes() []byte { - if len(r.sdata) > 0 { - return []byte(r.sdata) - } - return r.bdata -} - -// ResourcesPacker builds a Resources collection with provided resources. -type ResourcesPacker struct { - root resFile -} - -// Pack builds a resources collection with all resources previously added. -func (rp *ResourcesPacker) Pack() *Resources { - rw := newResourcesWriter(rp) - rw.write() - return &Resources{ - bdata: rw.out.Bytes(), - version: resVersion, - dataOffset: rw.dataOffset, - nameOffset: rw.nameOffset, - treeOffset: rw.treeOffset, - } -} - -type resFile struct { - name string - sdata string - bdata []byte - - children resFiles -} - -// Add adds a resource with the provided data under "qrc:///"+path. -func (rp *ResourcesPacker) Add(path string, data []byte) { - file := rp.addFile(path) - file.bdata = data -} - -// AddString adds a resource with the provided data under "qrc:///"+path. -func (rp *ResourcesPacker) AddString(path, data string) { - file := rp.addFile(path) - file.sdata = data -} - -func (rp *ResourcesPacker) addFile(path string) *resFile { - file := &rp.root - names := strings.Split(path, "/") - if len(names[0]) == 0 { - names = names[1:] - } -NextItem: - for _, name := range names { - for i := range file.children { - child := &file.children[i] - if child.name == name { - file = child - continue NextItem - } - } - file.children = append(file.children, resFile{name: name}) - file = &file.children[len(file.children)-1] - } - if len(file.children) > 0 || file.sdata != "" || file.bdata != nil { - panic("cannot add same resources path twice: " + path) - } - return file -} - -type resWriter struct { - root *resFile - - treeOffset int - dataOffset int - nameOffset int - - treeOffsets map[*resFile]int - dataOffsets map[*resFile]int - nameOffsets map[string]int - - pending []*resFile - out bytes.Buffer -} - -func newResourcesWriter(rp *ResourcesPacker) *resWriter { - rw := &resWriter{ - root: &rp.root, - treeOffsets: make(map[*resFile]int), - dataOffsets: make(map[*resFile]int), - nameOffsets: make(map[string]int), - pending: make([]*resFile, maxPending(&rp.root)), - } - - pending := rw.pending - pending[0] = rw.root - n := 1 - for n > 0 { - n-- - file := pending[n] - sort.Sort(file.children) - for i := range file.children { - child := &file.children[i] - if len(child.children) > 0 { - pending[n] = child - n++ - } - } - } - return rw -} - -func maxPending(file *resFile) int { - max := 1 - for i := range file.children { - if len(file.children) > 0 { - max += maxPending(&file.children[i]) - } - } - return max -} - -func (rw *resWriter) write() { - rw.writeHeader() - rw.writeDataBlobs() - rw.writeDataNames() - rw.writeDataTree() - rw.finishHeader() -} - -func (rw *resWriter) writeHeader() { - rw.out.WriteString("qres\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00") -} - -func (rw *resWriter) finishHeader() { - rw.write32at(4, resVersion) - rw.write32at(8, uint32(rw.treeOffset)) - rw.write32at(12, uint32(rw.dataOffset)) - rw.write32at(16, uint32(rw.nameOffset)) -} - -func (rw *resWriter) writeDataBlobs() { - rw.dataOffset = rw.out.Len() - pending := rw.pending - pending[0] = rw.root - n := 1 - for n > 0 { - n-- - file := pending[n] - for i := range file.children { - child := &file.children[i] - if len(child.children) > 0 { - pending[n] = child - n++ - } else { - rw.dataOffsets[child] = rw.out.Len() - rw.dataOffset - rw.writeDataBlob(child) - } - } - } -} - -func (rw *resWriter) writeDataBlob(file *resFile) { - if len(file.sdata) > 0 { - rw.write32(uint32(len(file.sdata))) - rw.out.WriteString(file.sdata) - } else { - rw.write32(uint32(len(file.bdata))) - rw.out.Write(file.bdata) - } -} - -func (rw *resWriter) writeDataNames() { - rw.nameOffset = rw.out.Len() - pending := rw.pending - pending[0] = rw.root - n := 1 - for n > 0 { - n-- - file := pending[n] - for i := range file.children { - child := &file.children[i] - if len(child.children) > 0 { - pending[n] = child - n++ - } - if _, ok := rw.nameOffsets[child.name]; !ok { - rw.nameOffsets[child.name] = rw.out.Len() - rw.nameOffset - rw.writeDataName(child.name) - } - } - } -} - -func (rw *resWriter) writeDataName(name string) { - rw.write16(uint16(len(name))) - rw.write32(qt_hash(name)) - for _, r := range name { - rw.write16(uint16(r)) - } -} - -func (rw *resWriter) writeDataTree() { - rw.treeOffset = rw.out.Len() - - // Compute first child offset for each parent. - pending := rw.pending - pending[0] = rw.root - n := 1 - offset := 1 - for n > 0 { - n-- - file := pending[n] - rw.treeOffsets[file] = offset - for i := range file.children { - child := &file.children[i] - offset++ - if len(child.children) > 0 { - pending[n] = child - n++ - } - } - } - - // Actually write it out. - rw.writeDataInfo(rw.root) - pending[0] = rw.root - n = 1 - for n > 0 { - n-- - file := pending[n] - for i := range file.children { - child := &file.children[i] - rw.writeDataInfo(child) - if len(child.children) > 0 { - pending[n] = child - n++ - } - } - } -} - -func (rw *resWriter) writeDataInfo(file *resFile) { - rw.write32(uint32(rw.nameOffsets[file.name])) - if len(file.children) > 0 { - rw.write16(uint16(resDirectory)) - rw.write32(uint32(len(file.children))) - rw.write32(uint32(rw.treeOffsets[file])) - } else { - rw.write16(uint16(resNone)) - rw.write16(0) // QLocale::AnyCountry - rw.write16(1) // QLocale::C - rw.write32(uint32(rw.dataOffsets[file])) - } -} - -const ( - resVersion = 1 - - resNone = 0 - resCompressed = 1 - resDirectory = 2 -) - -func (rw *resWriter) write16(v uint16) { - rw.out.Write([]byte{byte(v >> 8), byte(v)}) -} - -func (rw *resWriter) write32(v uint32) { - rw.out.Write([]byte{byte(v >> 24), byte(v >> 16), byte(v >> 8), byte(v)}) -} - -func (rw *resWriter) write32at(index int, v uint32) { - b := rw.out.Bytes() - b[index+0] = byte(v >> 24) - b[index+1] = byte(v >> 16) - b[index+2] = byte(v >> 8) - b[index+3] = byte(v) -} - -type resFiles []resFile - -func (rf resFiles) Len() int { return len(rf) } -func (rf resFiles) Less(i, j int) bool { return qt_hash(rf[i].name) < qt_hash(rf[j].name) } -func (rf resFiles) Swap(i, j int) { rf[i], rf[j] = rf[j], rf[i] } - -// qt_hash returns the hash of p as determined by the internal qt_hash function in Qt. -// -// According to the documentation in qhash.cpp this algorithm is used whenever -// the hash may be stored or reused across Qt versions, and must not change. -// The algorithm in qHash (used in QString, etc) is different and may change. -func qt_hash(p string) uint32 { - var h uint32 - for _, r := range p { - h = (h << 4) + uint32(r) - h ^= (h & 0xf0000000) >> 23 - h &= 0x0fffffff - } - return h -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/stats.go b/Godeps/_workspace/src/github.com/obscuren/qml/stats.go deleted file mode 100644 index 9f6e94d83c..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/stats.go +++ /dev/null @@ -1,68 +0,0 @@ -package qml - -import ( - "sync" -) - -var stats *Statistics -var statsMutex sync.Mutex - -func Stats() (snapshot Statistics) { - statsMutex.Lock() - snapshot = *stats - statsMutex.Unlock() - return -} - -func CollectStats(enabled bool) { - statsMutex.Lock() - if enabled { - if stats == nil { - stats = &Statistics{} - } - } else { - stats = nil - } - statsMutex.Unlock() -} - -func ResetStats() { - statsMutex.Lock() - old := stats - stats = &Statistics{} - // These are absolute values: - stats.EnginesAlive = old.EnginesAlive - stats.ValuesAlive = old.ValuesAlive - statsMutex.Unlock() - return -} - -type Statistics struct { - EnginesAlive int - ValuesAlive int - ConnectionsAlive int -} - -func (stats *Statistics) enginesAlive(delta int) { - if stats != nil { - statsMutex.Lock() - stats.EnginesAlive += delta - statsMutex.Unlock() - } -} - -func (stats *Statistics) valuesAlive(delta int) { - if stats != nil { - statsMutex.Lock() - stats.ValuesAlive += delta - statsMutex.Unlock() - } -} - -func (stats *Statistics) connectionsAlive(delta int) { - if stats != nil { - statsMutex.Lock() - stats.ConnectionsAlive += delta - statsMutex.Unlock() - } -} diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/testing.go b/Godeps/_workspace/src/github.com/obscuren/qml/testing.go deleted file mode 100644 index 39a2a691d0..0000000000 --- a/Godeps/_workspace/src/github.com/obscuren/qml/testing.go +++ /dev/null @@ -1,69 +0,0 @@ -package qml - -// #include <stdlib.h> -// int mprotect(void *addr, size_t len, int prot); -import "C" - -import ( - "bytes" - "encoding/binary" - "gopkg.in/qml.v1/cdata" - "reflect" - "unsafe" -) - -const pageSize = 4096 - -func qmain() { - Run(func() error { tmain(); return nil }) -} - -func tmain() { tstub() } -func tstub() { tstub() } - -func SetupTesting() { - ptr := func(f func()) uintptr { return reflect.ValueOf(f).Pointer() } - rmain, mmain := cdata.Addrs() - fset(rmain, mmain, ptr(qmain)) - fset(ptr(tmain), ptr(tstub), mmain) -} - -const ( - protREAD = 1 - protWRITE = 2 - protEXEC = 4 -) - -func fset(target, old, new uintptr) { - pageOffset := target % pageSize - pageAddr := target - pageOffset - - var mem []byte - memh := (*reflect.SliceHeader)(unsafe.Pointer(&mem)) - memh.Data = pageAddr - memh.Len = pageSize * 2 - memh.Cap = pageSize * 2 - - oldAddr := make([]byte, 8) - newAddr := make([]byte, 8) - - binary.LittleEndian.PutUint64(oldAddr, uint64(old)) - binary.LittleEndian.PutUint64(newAddr, uint64(new)) - - // BSD's syscall package misses Mprotect. Use cgo instead. - C.mprotect(unsafe.Pointer(pageAddr), C.size_t(len(mem)), protEXEC|protREAD|protWRITE) - defer C.mprotect(unsafe.Pointer(pageAddr), C.size_t(len(mem)), protEXEC|protREAD) - - delta := make([]byte, 4) - for i, c := range mem[pageOffset:] { - if c == 0xe8 && int(pageOffset)+i+5 < len(mem) { - instrAddr := pageAddr + pageOffset + uintptr(i) - binary.LittleEndian.PutUint32(delta, uint32(old-instrAddr-5)) - if bytes.Equal(mem[int(pageOffset)+i+1:int(pageOffset)+i+5], delta) { - binary.LittleEndian.PutUint32(mem[int(pageOffset)+i+1:], uint32(new-instrAddr-5)) - return - } - } - } - panic("cannot setup qml package for testing") -} diff --git a/Godeps/_workspace/src/gopkg.in/qml.v1/cdata/cdata.go b/Godeps/_workspace/src/gopkg.in/qml.v1/cdata/cdata.go deleted file mode 100644 index 6f13b810f1..0000000000 --- a/Godeps/_workspace/src/gopkg.in/qml.v1/cdata/cdata.go +++ /dev/null @@ -1,6 +0,0 @@ -// Package cdata supports the implementation of the qml package. -package cdata - -func Ref() uintptr - -func Addrs() (uintptr, uintptr) diff --git a/Godeps/_workspace/src/gopkg.in/qml.v1/cdata/cdata12.c b/Godeps/_workspace/src/gopkg.in/qml.v1/cdata/cdata12.c deleted file mode 100644 index 2e60abfa24..0000000000 --- a/Godeps/_workspace/src/gopkg.in/qml.v1/cdata/cdata12.c +++ /dev/null @@ -1,18 +0,0 @@ -// +build !go1.4 - -#include "runtime.h" - -void ·Ref(uintptr ref) { - ref = (uintptr)g->m; - FLUSH(&ref); -} - -void runtime·main(void); -void main·main(void); - -void ·Addrs(uintptr rmain, uintptr mmain) { - rmain = (uintptr)runtime·main; - mmain = (uintptr)main·main; - FLUSH(&rmain); - FLUSH(&mmain); -} diff --git a/Godeps/_workspace/src/gopkg.in/qml.v1/cdata/cdata14_386.s b/Godeps/_workspace/src/gopkg.in/qml.v1/cdata/cdata14_386.s deleted file mode 100644 index 7dae9b9616..0000000000 --- a/Godeps/_workspace/src/gopkg.in/qml.v1/cdata/cdata14_386.s +++ /dev/null @@ -1,17 +0,0 @@ -// +build go1.4 - -#include "textflag.h" - -TEXT ·Ref(SB),NOSPLIT,$4-4 - CALL runtime·acquirem(SB) - MOVL 0(SP), AX - MOVL AX, ret+0(FP) - CALL runtime·releasem(SB) - RET - -TEXT ·Addrs(SB),NOSPLIT,$0-8 - MOVL $runtime·main(SB), AX - MOVL AX, ret+0(FP) - MOVL $runtime·main_main(SB), AX - MOVL AX, ret+8(FP) - RET diff --git a/Godeps/_workspace/src/gopkg.in/qml.v1/cdata/cdata14_amd64.s b/Godeps/_workspace/src/gopkg.in/qml.v1/cdata/cdata14_amd64.s deleted file mode 100644 index 83cc22c9c4..0000000000 --- a/Godeps/_workspace/src/gopkg.in/qml.v1/cdata/cdata14_amd64.s +++ /dev/null @@ -1,17 +0,0 @@ -// +build go1.4 - -#include "textflag.h" - -TEXT ·Ref(SB),NOSPLIT,$8-8 - CALL runtime·acquirem(SB) - MOVQ 0(SP), AX - MOVQ AX, ret+0(FP) - CALL runtime·releasem(SB) - RET - -TEXT ·Addrs(SB),NOSPLIT,$0-16 - MOVQ $runtime·main(SB), AX - MOVQ AX, ret+0(FP) - MOVQ $runtime·main_main(SB), AX - MOVQ AX, ret+8(FP) - RET diff --git a/Godeps/_workspace/src/gopkg.in/qml.v1/cdata/cdata14_arm.s b/Godeps/_workspace/src/gopkg.in/qml.v1/cdata/cdata14_arm.s deleted file mode 100644 index c66bbafbfe..0000000000 --- a/Godeps/_workspace/src/gopkg.in/qml.v1/cdata/cdata14_arm.s +++ /dev/null @@ -1,18 +0,0 @@ -// +build go1.4 - -#include "textflag.h" - -TEXT ·Ref(SB),NOSPLIT,$4-4 - BL runtime·acquirem(SB) - MOVW 4(R13), R0 - MOVW R0, ret+0(FP) - MOVW R0, 4(R13) - BL runtime·releasem(SB) - RET - -TEXT ·Addrs(SB),NOSPLIT,$0-8 - MOVW $runtime·main(SB), R0 - MOVW R0, ret+0(FP) - MOVW $runtime·main_main(SB), R0 - MOVW R0, ret+4(FP) - RET diff --git a/Godeps/_workspace/src/gopkg.in/qml.v1/cdata/cdata_test.go b/Godeps/_workspace/src/gopkg.in/qml.v1/cdata/cdata_test.go deleted file mode 100644 index e7c3f33c5b..0000000000 --- a/Godeps/_workspace/src/gopkg.in/qml.v1/cdata/cdata_test.go +++ /dev/null @@ -1,42 +0,0 @@ -package cdata - -import ( - "runtime" - "sync" - "testing" -) - -type refPair struct { - ref1, ref2 uintptr -} - -func TestRef(t *testing.T) { - const N = 10 - runtime.LockOSThread() - exit := sync.WaitGroup{} - exit.Add(1) - defer exit.Done() - wg := sync.WaitGroup{} - wg.Add(N) - ch := make(chan refPair) - for i := 0; i < N; i++ { - go func() { - runtime.LockOSThread() - wg.Done() - ch <- refPair{Ref(), Ref()} - exit.Wait() - }() - } - wg.Wait() - refs := make(map[uintptr]bool) - for i := 0; i < N; i++ { - pair := <-ch - if pair.ref1 != pair.ref2 { - t.Fatalf("found inconsistent ref: %d != %d", pair.ref1, pair.ref2) - } - if refs[pair.ref1] { - t.Fatalf("found duplicated ref: %d", pair.ref1) - } - refs[pair.ref1] = true - } -} diff --git a/Godeps/_workspace/src/gopkg.in/qml.v1/gl/glbase/glbase.go b/Godeps/_workspace/src/gopkg.in/qml.v1/gl/glbase/glbase.go deleted file mode 100644 index c483b15a29..0000000000 --- a/Godeps/_workspace/src/gopkg.in/qml.v1/gl/glbase/glbase.go +++ /dev/null @@ -1,33 +0,0 @@ -package glbase - -// A Context represents an OpenGL context that may be rendered on by the -// version-specific APIs under this package. -type Context struct { - // This is just a marker at the moment, as the GL.API functions will - // initialize their GL context from the current context in the - // renderer thread. The design supports proper expansion and fixes for - // upstream changes that break that model, though. - private struct{} -} - -// Contexter is implemented by values that have an assigned OpenGL context. -type Contexter interface { - GLContext() *Context -} - -type ( - Bitfield uint32 - Enum uint32 - Sync uintptr - Clampf float32 - Clampd float64 - - Uniform int32 - Attrib int32 - Texture uint32 - Program uint32 - Shader uint32 - Buffer uint32 - Framebuffer uint32 - Renderbuffer uint32 -) From b98b444179ed16d54fab1ff416cf561427151f87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= <peterke@gmail.com> Date: Thu, 25 Jun 2015 10:36:47 +0300 Subject: [PATCH 056/156] cmd/geth: add attach and rows flags to the monitor command --- cmd/geth/main.go | 11 +------ cmd/geth/monitorcmd.go | 65 +++++++++++++++++++++++++++--------------- 2 files changed, 43 insertions(+), 33 deletions(-) diff --git a/cmd/geth/main.go b/cmd/geth/main.go index f7b4810cde..f1c229d1ff 100644 --- a/cmd/geth/main.go +++ b/cmd/geth/main.go @@ -72,6 +72,7 @@ func init() { upgradedbCommand, removedbCommand, dumpCommand, + monitorCommand, { Action: makedag, Name: "makedag", @@ -214,16 +215,6 @@ The Geth console is an interactive shell for the JavaScript runtime environment which exposes a node admin interface as well as the Ðapp JavaScript API. See https://github.com/ethereum/go-ethereum/wiki/Javascipt-Console. This command allows to open a console on a running geth node. -`, - }, - { - Action: monitor, - Name: "monitor", - Usage: `Geth Monitor: node metrics monitoring and visualization`, - Description: ` -The Geth monitor is a tool to collect and visualize various internal metrics -gathered by the node, supporting different chart types as well as the capacity -to display multiple metrics simultaneously. `, }, { diff --git a/cmd/geth/monitorcmd.go b/cmd/geth/monitorcmd.go index 53eb61a463..7b0076860c 100644 --- a/cmd/geth/monitorcmd.go +++ b/cmd/geth/monitorcmd.go @@ -9,48 +9,61 @@ import ( "github.com/codegangsta/cli" "github.com/ethereum/go-ethereum/cmd/utils" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/rpc" "github.com/ethereum/go-ethereum/rpc/codec" "github.com/ethereum/go-ethereum/rpc/comms" "github.com/gizak/termui" ) +var ( + monitorCommandAttachFlag = cli.StringFlag{ + Name: "attach", + Value: "ipc:" + common.DefaultIpcPath(), + Usage: "IPC or RPC API endpoint to attach to", + } + monitorCommandRowsFlag = cli.IntFlag{ + Name: "rows", + Value: 5, + Usage: "Rows (maximum) to display the charts in", + } + monitorCommand = cli.Command{ + Action: monitor, + Name: "monitor", + Usage: `Geth Monitor: node metrics monitoring and visualization`, + Description: ` +The Geth monitor is a tool to collect and visualize various internal metrics +gathered by the node, supporting different chart types as well as the capacity +to display multiple metrics simultaneously. +`, + Flags: []cli.Flag{ + monitorCommandAttachFlag, + monitorCommandRowsFlag, + }, + } +) + // monitor starts a terminal UI based monitoring tool for the requested metrics. func monitor(ctx *cli.Context) { var ( client comms.EthereumClient - args []string err error ) // Attach to an Ethereum node over IPC or RPC - if ctx.Args().Present() { - // Try to interpret the first parameter as an endpoint - client, err = comms.ClientFromEndpoint(ctx.Args().First(), codec.JSON) - if err == nil { - args = ctx.Args().Tail() - } - } - if !ctx.Args().Present() || err != nil { - // Either no args were given, or not endpoint, use defaults - cfg := comms.IpcConfig{ - Endpoint: ctx.GlobalString(utils.IPCPathFlag.Name), - } - args = ctx.Args() - client, err = comms.NewIpcClient(cfg, codec.JSON) - } - if err != nil { - utils.Fatalf("Unable to attach to geth node - %v", err) + endpoint := ctx.String(monitorCommandAttachFlag.Name) + if client, err = comms.ClientFromEndpoint(endpoint, codec.JSON); err != nil { + utils.Fatalf("Unable to attach to geth node: %v", err) } defer client.Close() xeth := rpc.NewXeth(client) // Retrieve all the available metrics and resolve the user pattens - metrics, err := xeth.Call("debug_metrics", []interface{}{true}) + metrics, err := retrieveMetrics(xeth) if err != nil { utils.Fatalf("Failed to retrieve system metrics: %v", err) } - monitored := resolveMetrics(metrics, args) + monitored := resolveMetrics(metrics, ctx.Args()) sort.Strings(monitored) // Create the access function and check that the metric exists @@ -77,8 +90,8 @@ func monitor(ctx *cli.Context) { termui.UseTheme("helloworld") rows := len(monitored) - if rows > 5 { - rows = 5 + if max := ctx.Int(monitorCommandRowsFlag.Name); rows > max { + rows = max } cols := (len(monitored) + rows - 1) / rows for i := 0; i < rows; i++ { @@ -126,7 +139,7 @@ func monitor(ctx *cli.Context) { termui.Render(termui.Body) } case <-refresh: - metrics, err := xeth.Call("debug_metrics", []interface{}{true}) + metrics, err := retrieveMetrics(xeth) if err != nil { utils.Fatalf("Failed to retrieve system metrics: %v", err) } @@ -139,6 +152,12 @@ func monitor(ctx *cli.Context) { } } +// retrieveMetrics contacts the attached geth node and retrieves the entire set +// of collected system metrics. +func retrieveMetrics(xeth *rpc.Xeth) (map[string]interface{}, error) { + return xeth.Call("debug_metrics", []interface{}{true}) +} + // resolveMetrics takes a list of input metric patterns, and resolves each to one // or more canonical metric names. func resolveMetrics(metrics map[string]interface{}, patterns []string) []string { From d02f07a983ef4b42bfda86bd46c200bb4104e922 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= <peterke@gmail.com> Date: Thu, 25 Jun 2015 11:32:21 +0300 Subject: [PATCH 057/156] cmd/geth: polish monitor visuals, add footer, refresh flag --- cmd/geth/monitorcmd.go | 104 ++++++++++++++++++++++++++++------------- 1 file changed, 71 insertions(+), 33 deletions(-) diff --git a/cmd/geth/monitorcmd.go b/cmd/geth/monitorcmd.go index 7b0076860c..492865d0eb 100644 --- a/cmd/geth/monitorcmd.go +++ b/cmd/geth/monitorcmd.go @@ -1,6 +1,7 @@ package main import ( + "fmt" "math" "reflect" "sort" @@ -20,12 +21,17 @@ var ( monitorCommandAttachFlag = cli.StringFlag{ Name: "attach", Value: "ipc:" + common.DefaultIpcPath(), - Usage: "IPC or RPC API endpoint to attach to", + Usage: "API endpoint to attach to", } monitorCommandRowsFlag = cli.IntFlag{ Name: "rows", Value: 5, - Usage: "Rows (maximum) to display the charts in", + Usage: "Maximum rows in the chart grid", + } + monitorCommandRefreshFlag = cli.IntFlag{ + Name: "refresh", + Value: 3, + Usage: "Refresh interval in seconds", } monitorCommand = cli.Command{ Action: monitor, @@ -39,6 +45,7 @@ to display multiple metrics simultaneously. Flags: []cli.Flag{ monitorCommandAttachFlag, monitorCommandRowsFlag, + monitorCommandRefreshFlag, }, } ) @@ -66,21 +73,6 @@ func monitor(ctx *cli.Context) { monitored := resolveMetrics(metrics, ctx.Args()) sort.Strings(monitored) - // Create the access function and check that the metric exists - value := func(metrics map[string]interface{}, metric string) float64 { - parts, found := strings.Split(metric, "/"), true - for _, part := range parts[:len(parts)-1] { - metrics, found = metrics[part].(map[string]interface{}) - if !found { - utils.Fatalf("Metric not found: %s", metric) - } - } - if v, ok := metrics[parts[len(parts)-1]].(float64); ok { - return v - } - utils.Fatalf("Metric not float64: %s", metric) - return 0 - } // Create and configure the chart UI defaults if err := termui.Init(); err != nil { utils.Fatalf("Unable to initialize terminal UI: %v", err) @@ -98,6 +90,10 @@ func monitor(ctx *cli.Context) { termui.Body.AddRows(termui.NewRow()) } // Create each individual data chart + footer := termui.NewPar("") + footer.HasBorder = true + footer.Height = 3 + charts := make([]*termui.LineChart, len(monitored)) data := make([][]float64, len(monitored)) for i := 0; i < len(data); i++ { @@ -105,25 +101,28 @@ func monitor(ctx *cli.Context) { } for i, metric := range monitored { charts[i] = termui.NewLineChart() - charts[i].Data = make([]float64, 512) charts[i].DataLabels = []string{""} - charts[i].Height = termui.TermHeight() / rows + charts[i].Height = (termui.TermHeight() - footer.Height) / rows charts[i].AxesColor = termui.ColorWhite - charts[i].LineColor = termui.ColorGreen charts[i].PaddingBottom = -1 charts[i].Border.Label = metric - charts[i].Border.LabelFgColor = charts[i].Border.FgColor + charts[i].Border.LabelFgColor = charts[i].Border.FgColor | termui.AttrBold charts[i].Border.FgColor = charts[i].Border.BgColor row := termui.Body.Rows[i%rows] row.Cols = append(row.Cols, termui.NewCol(12/cols, 0, charts[i])) } + termui.Body.AddRows(termui.NewRow(termui.NewCol(12, 0, footer))) termui.Body.Align() termui.Render(termui.Body) - refresh := time.Tick(time.Second) + refreshCharts(xeth, monitored, data, charts, ctx, footer) + termui.Render(termui.Body) + + // Watch for various system events, and periodically refresh the charts + refresh := time.Tick(time.Duration(ctx.Int(monitorCommandRefreshFlag.Name)) * time.Second) for { select { case event := <-termui.EventCh(): @@ -133,20 +132,13 @@ func monitor(ctx *cli.Context) { if event.Type == termui.EventResize { termui.Body.Width = termui.TermWidth() for _, chart := range charts { - chart.Height = termui.TermHeight() / rows + chart.Height = (termui.TermHeight() - footer.Height) / rows } termui.Body.Align() termui.Render(termui.Body) } case <-refresh: - metrics, err := retrieveMetrics(xeth) - if err != nil { - utils.Fatalf("Failed to retrieve system metrics: %v", err) - } - for i, metric := range monitored { - data[i] = append([]float64{value(metrics, metric)}, data[i][:len(data[i])-1]...) - updateChart(metric, data[i], charts[i]) - } + refreshCharts(xeth, monitored, data, charts, ctx, footer) termui.Render(termui.Body) } } @@ -226,13 +218,42 @@ func expandMetrics(metrics map[string]interface{}, path string) []string { return list } +// fetchMetric iterates over the metrics map and retrieves a specific one. +func fetchMetric(metrics map[string]interface{}, metric string) float64 { + parts, found := strings.Split(metric, "/"), true + for _, part := range parts[:len(parts)-1] { + metrics, found = metrics[part].(map[string]interface{}) + if !found { + return 0 + } + } + if v, ok := metrics[parts[len(parts)-1]].(float64); ok { + return v + } + return 0 +} + +// refreshCharts retrieves a next batch of metrics, and inserts all the new +// values into the active datasets and charts +func refreshCharts(xeth *rpc.Xeth, metrics []string, data [][]float64, charts []*termui.LineChart, ctx *cli.Context, footer *termui.Par) { + values, err := retrieveMetrics(xeth) + for i, metric := range metrics { + data[i] = append([]float64{fetchMetric(values, metric)}, data[i][:len(data[i])-1]...) + updateChart(metric, data[i], charts[i], err) + } + updateFooter(ctx, err, footer) +} + // updateChart inserts a dataset into a line chart, scaling appropriately as to // not display weird labels, also updating the chart label accordingly. -func updateChart(metric string, data []float64, chart *termui.LineChart) { +func updateChart(metric string, data []float64, chart *termui.LineChart, err error) { dataUnits := []string{"", "K", "M", "G", "T", "E"} timeUnits := []string{"ns", "µs", "ms", "s", "ks", "ms"} colors := []termui.Attribute{termui.ColorBlue, termui.ColorCyan, termui.ColorGreen, termui.ColorYellow, termui.ColorRed, termui.ColorRed} + // Extract only part of the data that's actually visible + data = data[:chart.Width*2] + // Find the maximum value and scale under 1K high := data[0] for _, value := range data[1:] { @@ -256,5 +277,22 @@ func updateChart(metric string, data []float64, chart *termui.LineChart) { if len(units[unit]) > 0 { chart.Border.Label += " [" + units[unit] + "]" } - chart.LineColor = colors[unit] + chart.LineColor = colors[unit] | termui.AttrBold + if err != nil { + chart.LineColor = termui.ColorRed | termui.AttrBold + } +} + +// updateFooter updates the footer contents based on any encountered errors. +func updateFooter(ctx *cli.Context, err error, footer *termui.Par) { + // Generate the basic footer + refresh := time.Duration(ctx.Int(monitorCommandRefreshFlag.Name)) * time.Second + footer.Text = fmt.Sprintf("Press q to quit. Refresh interval: %v.", refresh) + footer.TextFgColor = termui.Theme().ParTextFg | termui.AttrBold + + // Append any encountered errors + if err != nil { + footer.Text = fmt.Sprintf("Error: %v.", err) + footer.TextFgColor = termui.ColorRed | termui.AttrBold + } } From 3ea6b5ae32215daa6393e02682d6946a2aa89af3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= <peterke@gmail.com> Date: Thu, 25 Jun 2015 11:42:45 +0300 Subject: [PATCH 058/156] cmd/geth: list the available metrics if none specified --- cmd/geth/monitorcmd.go | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/cmd/geth/monitorcmd.go b/cmd/geth/monitorcmd.go index 492865d0eb..b51da91e69 100644 --- a/cmd/geth/monitorcmd.go +++ b/cmd/geth/monitorcmd.go @@ -71,6 +71,19 @@ func monitor(ctx *cli.Context) { utils.Fatalf("Failed to retrieve system metrics: %v", err) } monitored := resolveMetrics(metrics, ctx.Args()) + if len(monitored) == 0 { + list := []string{} + for _, metric := range expandMetrics(metrics, "") { + switch { + case strings.HasSuffix(metric, "/0"): + list = append(list, strings.Replace(metric, "/0", "/[0-100]", -1)) + case !strings.Contains(metric, "Percentiles"): + list = append(list, metric) + } + } + sort.Strings(list) + utils.Fatalf("No metrics specified.\n\nAvailable:\n - %s", strings.Join(list, "\n - ")) + } sort.Strings(monitored) // Create and configure the chart UI defaults From c6e2af14c0019c43c11e03b9fd79ba4489a38bed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= <peterke@gmail.com> Date: Thu, 25 Jun 2015 12:12:11 +0300 Subject: [PATCH 059/156] cmd/geth: limit the maximum chart colums to 6 --- cmd/geth/monitorcmd.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cmd/geth/monitorcmd.go b/cmd/geth/monitorcmd.go index b51da91e69..78b67c17c3 100644 --- a/cmd/geth/monitorcmd.go +++ b/cmd/geth/monitorcmd.go @@ -85,7 +85,9 @@ func monitor(ctx *cli.Context) { utils.Fatalf("No metrics specified.\n\nAvailable:\n - %s", strings.Join(list, "\n - ")) } sort.Strings(monitored) - + if cols := len(monitored) / ctx.Int(monitorCommandRowsFlag.Name); cols > 6 { + utils.Fatalf("Requested metrics (%d) spans more that 6 columns:\n - %s", len(monitored), strings.Join(monitored, "\n - ")) + } // Create and configure the chart UI defaults if err := termui.Init(); err != nil { utils.Fatalf("Unable to initialize terminal UI: %v", err) From 6d92fdc0df12337c2ffb8e6d19c83653f1a00ff2 Mon Sep 17 00:00:00 2001 From: Bas van Kervel <bas@ethdev.com> Date: Thu, 25 Jun 2015 12:01:28 +0200 Subject: [PATCH 060/156] added support for batch requests --- rpc/codec/codec.go | 2 +- rpc/codec/json.go | 61 +++++++++++++++++++++++++++++++++++++--------- rpc/comms/comms.go | 38 ++++++++++++++++++++++------- 3 files changed, 79 insertions(+), 22 deletions(-) diff --git a/rpc/codec/codec.go b/rpc/codec/codec.go index 5e8f384388..3177f77e41 100644 --- a/rpc/codec/codec.go +++ b/rpc/codec/codec.go @@ -12,7 +12,7 @@ type Codec int // (de)serialization support for rpc interface type ApiCoder interface { // Parse message to request from underlying stream - ReadRequest() (*shared.Request, error) + ReadRequest() ([]*shared.Request, bool, error) // Parse response message from underlying stream ReadResponse() (interface{}, error) // Encode response to encoded form in underlying stream diff --git a/rpc/codec/json.go b/rpc/codec/json.go index 31024ee746..380b4cba74 100644 --- a/rpc/codec/json.go +++ b/rpc/codec/json.go @@ -8,33 +8,53 @@ import ( ) const ( - MAX_RESPONSE_SIZE = 64 * 1024 + MAX_REQUEST_SIZE = 1024 * 1024 + MAX_RESPONSE_SIZE = 1024 * 1024 ) // Json serialization support type JsonCodec struct { c net.Conn - d *json.Decoder - e *json.Encoder + buffer []byte + bytesInBuffer int } // Create new JSON coder instance func NewJsonCoder(conn net.Conn) ApiCoder { return &JsonCodec{ c: conn, - d: json.NewDecoder(conn), - e: json.NewEncoder(conn), + buffer: make([]byte, MAX_REQUEST_SIZE), + bytesInBuffer: 0, } } // Serialize obj to JSON and write it to conn -func (self *JsonCodec) ReadRequest() (*shared.Request, error) { - req := shared.Request{} - err := self.d.Decode(&req) - if err == nil { - return &req, nil +func (self *JsonCodec) ReadRequest() (requests []*shared.Request, isBatch bool, err error) { + n, err := self.c.Read(self.buffer[self.bytesInBuffer:]) + if err != nil { + self.bytesInBuffer = 0 + return nil, false, err } - return nil, err + + self.bytesInBuffer += n + + singleRequest := shared.Request{} + err = json.Unmarshal(self.buffer[:self.bytesInBuffer], &singleRequest) + if err == nil { + self.bytesInBuffer = 0 + requests := make([]*shared.Request, 1) + requests[0] = &singleRequest + return requests, false, nil + } + + requests = make([]*shared.Request, 0) + err = json.Unmarshal(self.buffer[:self.bytesInBuffer], &requests) + if err == nil { + self.bytesInBuffer = 0 + return requests, true, nil + } + + return nil, false, err } func (self *JsonCodec) ReadResponse() (interface{}, error) { @@ -66,7 +86,24 @@ func (self *JsonCodec) Encode(msg interface{}) ([]byte, error) { // Parse JSON data from conn to obj func (self *JsonCodec) WriteResponse(res interface{}) error { - return self.e.Encode(&res) + data, err := json.Marshal(res) + if err != nil { + self.c.Close() + return err + } + + bytesWritten := 0 + + for bytesWritten < len(data) { + n, err := self.c.Write(data[bytesWritten:]) + if err != nil { + self.c.Close() + return err + } + bytesWritten += n + } + + return nil } // Close decoder and encoder diff --git a/rpc/comms/comms.go b/rpc/comms/comms.go index bfe6257582..1374bde3f4 100644 --- a/rpc/comms/comms.go +++ b/rpc/comms/comms.go @@ -47,7 +47,7 @@ func handle(conn net.Conn, api shared.EthereumApi, c codec.Codec) { codec := c.New(conn) for { - req, err := codec.ReadRequest() + requests, isBatch, err := codec.ReadRequest() if err == io.EOF { codec.Close() return @@ -57,15 +57,35 @@ func handle(conn net.Conn, api shared.EthereumApi, c codec.Codec) { return } - var rpcResponse interface{} - res, err := api.Execute(req) + if isBatch { + responses := make([]*interface{}, len(requests)) + responseCount := 0 + for _, req := range requests { + res, err := api.Execute(req) + if req.Id != nil { + rpcResponse := shared.NewRpcResponse(req.Id, req.Jsonrpc, res, err) + responses[responseCount] = rpcResponse + responseCount += 1 + } + } - rpcResponse = shared.NewRpcResponse(req.Id, req.Jsonrpc, res, err) - err = codec.WriteResponse(rpcResponse) - if err != nil { - glog.V(logger.Error).Infof("comms send err - %v\n", err) - codec.Close() - return + err = codec.WriteResponse(responses[:responseCount]) + if err != nil { + glog.V(logger.Error).Infof("comms send err - %v\n", err) + codec.Close() + return + } + } else { + var rpcResponse interface{} + res, err := api.Execute(requests[0]) + + rpcResponse = shared.NewRpcResponse(requests[0].Id, requests[0].Jsonrpc, res, err) + err = codec.WriteResponse(rpcResponse) + if err != nil { + glog.V(logger.Error).Infof("comms send err - %v\n", err) + codec.Close() + return + } } } } From c0343c8f17de0b896d4c0546921881a92ce4ae1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= <peterke@gmail.com> Date: Thu, 25 Jun 2015 13:47:06 +0300 Subject: [PATCH 061/156] cmd/geth: add memory stat collection too --- cmd/geth/main.go | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/cmd/geth/main.go b/cmd/geth/main.go index f1c229d1ff..53f6a95d9c 100644 --- a/cmd/geth/main.go +++ b/cmd/geth/main.go @@ -30,6 +30,7 @@ import ( "runtime" "strconv" "strings" + "time" "github.com/codegangsta/cli" "github.com/ethereum/ethash" @@ -42,6 +43,7 @@ import ( "github.com/ethereum/go-ethereum/rpc/comms" "github.com/mattn/go-colorable" "github.com/mattn/go-isatty" + "github.com/rcrowley/go-metrics" ) const ( @@ -285,6 +287,28 @@ JavaScript API. See https://github.com/ethereum/go-ethereum/wiki/Javascipt-Conso } return nil } + // Start system runtime metrics collection + go func() { + used := metrics.GetOrRegisterMeter("system/memory/used", metrics.DefaultRegistry) + total := metrics.GetOrRegisterMeter("system/memory/total", metrics.DefaultRegistry) + mallocs := metrics.GetOrRegisterMeter("system/memory/mallocs", metrics.DefaultRegistry) + frees := metrics.GetOrRegisterMeter("system/memory/frees", metrics.DefaultRegistry) + + stats := make([]*runtime.MemStats, 2) + for i := 0; i < len(stats); i++ { + stats[i] = new(runtime.MemStats) + } + for i := 1; ; i++ { + runtime.ReadMemStats(stats[i%2]) + + used.Mark(int64(stats[i%2].Alloc - stats[(i-1)%2].Alloc)) + total.Mark(int64(stats[i%2].TotalAlloc - stats[(i-1)%2].TotalAlloc)) + mallocs.Mark(int64(stats[i%2].Mallocs - stats[(i-1)%2].Mallocs)) + frees.Mark(int64(stats[i%2].Frees - stats[(i-1)%2].Frees)) + + time.Sleep(3 * time.Second) + } + }() } func main() { From ffbe5656ff2cba43c813f46f743fde4d1ab2dd58 Mon Sep 17 00:00:00 2001 From: Bas van Kervel <basvankervel@gmail.com> Date: Thu, 25 Jun 2015 13:18:10 +0200 Subject: [PATCH 062/156] support for large requests/responses --- rpc/codec/json.go | 48 ++++++++++++++++++++++++++++--------------- rpc/comms/ipc.go | 1 + rpc/comms/ipc_unix.go | 2 +- 3 files changed, 33 insertions(+), 18 deletions(-) diff --git a/rpc/codec/json.go b/rpc/codec/json.go index 380b4cba74..1de649c210 100644 --- a/rpc/codec/json.go +++ b/rpc/codec/json.go @@ -2,28 +2,30 @@ package codec import ( "encoding/json" + "fmt" "net" + "time" "github.com/ethereum/go-ethereum/rpc/shared" ) const ( - MAX_REQUEST_SIZE = 1024 * 1024 + MAX_REQUEST_SIZE = 1024 * 1024 MAX_RESPONSE_SIZE = 1024 * 1024 ) // Json serialization support type JsonCodec struct { - c net.Conn - buffer []byte + c net.Conn + buffer []byte bytesInBuffer int } // Create new JSON coder instance func NewJsonCoder(conn net.Conn) ApiCoder { return &JsonCodec{ - c: conn, - buffer: make([]byte, MAX_REQUEST_SIZE), + c: conn, + buffer: make([]byte, MAX_REQUEST_SIZE), bytesInBuffer: 0, } } @@ -58,28 +60,40 @@ func (self *JsonCodec) ReadRequest() (requests []*shared.Request, isBatch bool, } func (self *JsonCodec) ReadResponse() (interface{}, error) { - var err error + bytesInBuffer := 0 buf := make([]byte, MAX_RESPONSE_SIZE) - n, _ := self.c.Read(buf) - var failure shared.ErrorResponse - if err = json.Unmarshal(buf[:n], &failure); err == nil && failure.Error != nil { - return failure, nil + deadline := time.Now().Add(15 * time.Second) + self.c.SetDeadline(deadline) + + for { + n, err := self.c.Read(buf[bytesInBuffer:]) + if err != nil { + return nil, err + } + bytesInBuffer += n + + var success shared.SuccessResponse + if err = json.Unmarshal(buf[:bytesInBuffer], &success); err == nil { + return success, nil + } + + var failure shared.ErrorResponse + if err = json.Unmarshal(buf[:bytesInBuffer], &failure); err == nil && failure.Error != nil { + return failure, nil + } } - var success shared.SuccessResponse - if err = json.Unmarshal(buf[:n], &success); err == nil { - return success, nil - } - - return nil, err + self.c.Close() + return nil, fmt.Errorf("Unable to read response") } -// Encode response to encoded form in underlying stream +// Decode data func (self *JsonCodec) Decode(data []byte, msg interface{}) error { return json.Unmarshal(data, msg) } +// Encode message func (self *JsonCodec) Encode(msg interface{}) ([]byte, error) { return json.Marshal(msg) } diff --git a/rpc/comms/ipc.go b/rpc/comms/ipc.go index 068a1288fe..3cfcbf3cfb 100644 --- a/rpc/comms/ipc.go +++ b/rpc/comms/ipc.go @@ -16,6 +16,7 @@ type IpcConfig struct { type ipcClient struct { endpoint string + c net.Conn codec codec.Codec coder codec.ApiCoder } diff --git a/rpc/comms/ipc_unix.go b/rpc/comms/ipc_unix.go index 295eb916b8..5724231f4d 100644 --- a/rpc/comms/ipc_unix.go +++ b/rpc/comms/ipc_unix.go @@ -18,7 +18,7 @@ func newIpcClient(cfg IpcConfig, codec codec.Codec) (*ipcClient, error) { return nil, err } - return &ipcClient{cfg.Endpoint, codec, codec.New(c)}, nil + return &ipcClient{cfg.Endpoint, c, codec, codec.New(c)}, nil } func (self *ipcClient) reconnect() error { From 04910c902a7654706cc0f97b86627661fcd22b36 Mon Sep 17 00:00:00 2001 From: unknown <basvankervel@gmail.com> Date: Thu, 25 Jun 2015 04:53:41 -0700 Subject: [PATCH 063/156] support for large request/response on windows --- rpc/comms/ipc_windows.go | 39 ++++++++------------------------------- 1 file changed, 8 insertions(+), 31 deletions(-) diff --git a/rpc/comms/ipc_windows.go b/rpc/comms/ipc_windows.go index 44c82ef8a6..4914a99c4c 100644 --- a/rpc/comms/ipc_windows.go +++ b/rpc/comms/ipc_windows.go @@ -640,7 +640,7 @@ func newIpcClient(cfg IpcConfig, codec codec.Codec) (*ipcClient, error) { return nil, err } - return &ipcClient{cfg.Endpoint, codec, codec.New(c)}, nil + return &ipcClient{cfg.Endpoint, c, codec, codec.New(c)}, nil } func (self *ipcClient) reconnect() error { @@ -667,36 +667,13 @@ func startIpc(cfg IpcConfig, codec codec.Codec, api shared.EthereumApi) error { glog.V(logger.Error).Infof("Error accepting ipc connection - %v\n", err) continue } - - go func(conn net.Conn) { - codec := codec.New(conn) - - for { - req, err := codec.ReadRequest() - if err == io.EOF { - codec.Close() - return - } else if err != nil { - glog.V(logger.Error).Infof("IPC recv err - %v\n", err) - codec.Close() - return - } - - var rpcResponse interface{} - res, err := api.Execute(req) - - rpcResponse = shared.NewRpcResponse(req.Id, req.Jsonrpc, res, err) - err = codec.WriteResponse(rpcResponse) - if err != nil { - glog.V(logger.Error).Infof("IPC send err - %v\n", err) - codec.Close() - return - } - } - }(conn) - } - }() - + + go handle(conn, api, codec) + } + + os.Remove(cfg.Endpoint) + }() + glog.V(logger.Info).Infof("IPC service started (%s)\n", cfg.Endpoint) return nil From 5757a0edb59f854433d11982b2ba4831cceb167e Mon Sep 17 00:00:00 2001 From: Bas van Kervel <bas@ethdev.com> Date: Thu, 25 Jun 2015 14:32:22 +0200 Subject: [PATCH 064/156] added IPC timeout support --- rpc/codec/json.go | 62 ++++++++++++++++++++++++++--------------------- 1 file changed, 35 insertions(+), 27 deletions(-) diff --git a/rpc/codec/json.go b/rpc/codec/json.go index 1de649c210..0b1a905625 100644 --- a/rpc/codec/json.go +++ b/rpc/codec/json.go @@ -10,61 +10,69 @@ import ( ) const ( + READ_TIMEOUT = 15 // read timeout in seconds MAX_REQUEST_SIZE = 1024 * 1024 MAX_RESPONSE_SIZE = 1024 * 1024 ) // Json serialization support type JsonCodec struct { - c net.Conn - buffer []byte - bytesInBuffer int + c net.Conn } // Create new JSON coder instance func NewJsonCoder(conn net.Conn) ApiCoder { return &JsonCodec{ - c: conn, - buffer: make([]byte, MAX_REQUEST_SIZE), - bytesInBuffer: 0, + c: conn, } } // Serialize obj to JSON and write it to conn func (self *JsonCodec) ReadRequest() (requests []*shared.Request, isBatch bool, err error) { - n, err := self.c.Read(self.buffer[self.bytesInBuffer:]) - if err != nil { - self.bytesInBuffer = 0 + bytesInBuffer := 0 + buf := make([]byte, MAX_REQUEST_SIZE) + + deadline := time.Now().Add(READ_TIMEOUT * time.Second) + if err := self.c.SetDeadline(deadline); err != nil { return nil, false, err } - self.bytesInBuffer += n + for { + n, err := self.c.Read(buf[bytesInBuffer:]) + if err != nil { + self.c.Close() + return nil, false, err + } - singleRequest := shared.Request{} - err = json.Unmarshal(self.buffer[:self.bytesInBuffer], &singleRequest) - if err == nil { - self.bytesInBuffer = 0 - requests := make([]*shared.Request, 1) - requests[0] = &singleRequest - return requests, false, nil + bytesInBuffer += n + + singleRequest := shared.Request{} + err = json.Unmarshal(buf[:bytesInBuffer], &singleRequest) + if err == nil { + requests := make([]*shared.Request, 1) + requests[0] = &singleRequest + return requests, false, nil + } + + requests = make([]*shared.Request, 0) + err = json.Unmarshal(buf[:bytesInBuffer], &requests) + if err == nil { + return requests, true, nil + } } - requests = make([]*shared.Request, 0) - err = json.Unmarshal(self.buffer[:self.bytesInBuffer], &requests) - if err == nil { - self.bytesInBuffer = 0 - return requests, true, nil - } - - return nil, false, err + self.c.Close() // timeout + return nil, false, fmt.Errorf("Unable to read response") } func (self *JsonCodec) ReadResponse() (interface{}, error) { bytesInBuffer := 0 buf := make([]byte, MAX_RESPONSE_SIZE) - deadline := time.Now().Add(15 * time.Second) - self.c.SetDeadline(deadline) + deadline := time.Now().Add(READ_TIMEOUT * time.Second) + if err := self.c.SetDeadline(deadline); err != nil { + return nil, err + } for { n, err := self.c.Read(buf[bytesInBuffer:]) From fdbf8be7356cb8a80c6fdfe0d24b0863903e1832 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= <peterke@gmail.com> Date: Thu, 25 Jun 2015 15:33:26 +0300 Subject: [PATCH 065/156] cmd/geth, rpc/api: fix reported metrics issues --- cmd/geth/monitorcmd.go | 20 ++++++++------------ rpc/api/debug.go | 27 ++++++++++++--------------- 2 files changed, 20 insertions(+), 27 deletions(-) diff --git a/cmd/geth/monitorcmd.go b/cmd/geth/monitorcmd.go index 78b67c17c3..43937dcaad 100644 --- a/cmd/geth/monitorcmd.go +++ b/cmd/geth/monitorcmd.go @@ -4,6 +4,7 @@ import ( "fmt" "math" "reflect" + "runtime" "sort" "strings" "time" @@ -72,15 +73,7 @@ func monitor(ctx *cli.Context) { } monitored := resolveMetrics(metrics, ctx.Args()) if len(monitored) == 0 { - list := []string{} - for _, metric := range expandMetrics(metrics, "") { - switch { - case strings.HasSuffix(metric, "/0"): - list = append(list, strings.Replace(metric, "/0", "/[0-100]", -1)) - case !strings.Contains(metric, "Percentiles"): - list = append(list, metric) - } - } + list := expandMetrics(metrics, "") sort.Strings(list) utils.Fatalf("No metrics specified.\n\nAvailable:\n - %s", strings.Join(list, "\n - ")) } @@ -116,11 +109,14 @@ func monitor(ctx *cli.Context) { } for i, metric := range monitored { charts[i] = termui.NewLineChart() + if runtime.GOOS == "windows" { + charts[i].Mode = "dot" + } charts[i].Data = make([]float64, 512) charts[i].DataLabels = []string{""} charts[i].Height = (termui.TermHeight() - footer.Height) / rows charts[i].AxesColor = termui.ColorWhite - charts[i].PaddingBottom = -1 + charts[i].PaddingBottom = -2 charts[i].Border.Label = metric charts[i].Border.LabelFgColor = charts[i].Border.FgColor | termui.AttrBold @@ -141,7 +137,7 @@ func monitor(ctx *cli.Context) { for { select { case event := <-termui.EventCh(): - if event.Type == termui.EventKey && event.Ch == 'q' { + if event.Type == termui.EventKey && event.Key == termui.KeyCtrlC { return } if event.Type == termui.EventResize { @@ -302,7 +298,7 @@ func updateChart(metric string, data []float64, chart *termui.LineChart, err err func updateFooter(ctx *cli.Context, err error, footer *termui.Par) { // Generate the basic footer refresh := time.Duration(ctx.Int(monitorCommandRefreshFlag.Name)) * time.Second - footer.Text = fmt.Sprintf("Press q to quit. Refresh interval: %v.", refresh) + footer.Text = fmt.Sprintf("Press Ctrl+C to quit. Refresh interval: %v.", refresh) footer.TextFgColor = termui.Theme().ParTextFg | termui.AttrBold // Append any encountered errors diff --git a/rpc/api/debug.go b/rpc/api/debug.go index 5975f88ab1..f16f62d2e2 100644 --- a/rpc/api/debug.go +++ b/rpc/api/debug.go @@ -193,11 +193,6 @@ func (self *debugApi) Metrics(req *shared.Request) (interface{}, error) { format := func(total float64, rate float64) string { return fmt.Sprintf("%s (%s/s)", round(total, 0), round(rate, 2)) } - // Create the percentile units - percentiles := make([]float64, 101) - for i := 0; i <= 100; i++ { - percentiles[i] = float64(i) / 100 - } // Iterate over all the metrics, and just dump for now counters := make(map[string]interface{}) metrics.DefaultRegistry.Each(func(name string, metric interface{}) { @@ -220,21 +215,23 @@ func (self *debugApi) Metrics(req *shared.Request) (interface{}, error) { "AvgRate05Min": metric.Rate5(), "AvgRate15Min": metric.Rate15(), "MeanRate": metric.RateMean(), - "Total": float64(metric.Count()), + "Overall": float64(metric.Count()), } case metrics.Timer: - ps := make(map[string]interface{}) - for i, p := range metric.Percentiles(percentiles) { - ps[fmt.Sprintf("%d", i)] = p - } root[name] = map[string]interface{}{ "AvgRate01Min": metric.Rate1(), "AvgRate05Min": metric.Rate5(), "AvgRate15Min": metric.Rate15(), "MeanRate": metric.RateMean(), - "Total": float64(metric.Count()), - "Percentiles": ps, + "Overall": float64(metric.Count()), + "Percentiles": map[string]interface{}{ + "5": metric.Percentile(0.05), + "20": metric.Percentile(0.2), + "50": metric.Percentile(0.5), + "80": metric.Percentile(0.8), + "95": metric.Percentile(0.95), + }, } default: @@ -247,7 +244,7 @@ func (self *debugApi) Metrics(req *shared.Request) (interface{}, error) { "Avg01Min": format(metric.Rate1()*60, metric.Rate1()), "Avg05Min": format(metric.Rate5()*300, metric.Rate5()), "Avg15Min": format(metric.Rate15()*900, metric.Rate15()), - "Total": format(float64(metric.Count()), metric.RateMean()), + "Overall": format(float64(metric.Count()), metric.RateMean()), } case metrics.Timer: @@ -255,15 +252,15 @@ func (self *debugApi) Metrics(req *shared.Request) (interface{}, error) { "Avg01Min": format(metric.Rate1()*60, metric.Rate1()), "Avg05Min": format(metric.Rate5()*300, metric.Rate5()), "Avg15Min": format(metric.Rate15()*900, metric.Rate15()), - "Total": format(float64(metric.Count()), metric.RateMean()), + "Overall": format(float64(metric.Count()), metric.RateMean()), "Maximum": time.Duration(metric.Max()).String(), "Minimum": time.Duration(metric.Min()).String(), "Percentiles": map[string]interface{}{ + "5": time.Duration(metric.Percentile(0.05)).String(), "20": time.Duration(metric.Percentile(0.2)).String(), "50": time.Duration(metric.Percentile(0.5)).String(), "80": time.Duration(metric.Percentile(0.8)).String(), "95": time.Duration(metric.Percentile(0.95)).String(), - "99": time.Duration(metric.Percentile(0.99)).String(), }, } From e9c0b5431cbd7430ddec9fd17983241018fd8a55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= <peterke@gmail.com> Date: Thu, 25 Jun 2015 16:19:42 +0300 Subject: [PATCH 066/156] cmd/geth: finalize mem stats --- cmd/geth/main.go | 12 ++++++------ cmd/geth/monitorcmd.go | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/cmd/geth/main.go b/cmd/geth/main.go index 53f6a95d9c..fcf7f27f02 100644 --- a/cmd/geth/main.go +++ b/cmd/geth/main.go @@ -289,10 +289,10 @@ JavaScript API. See https://github.com/ethereum/go-ethereum/wiki/Javascipt-Conso } // Start system runtime metrics collection go func() { - used := metrics.GetOrRegisterMeter("system/memory/used", metrics.DefaultRegistry) - total := metrics.GetOrRegisterMeter("system/memory/total", metrics.DefaultRegistry) - mallocs := metrics.GetOrRegisterMeter("system/memory/mallocs", metrics.DefaultRegistry) + allocs := metrics.GetOrRegisterMeter("system/memory/allocs", metrics.DefaultRegistry) frees := metrics.GetOrRegisterMeter("system/memory/frees", metrics.DefaultRegistry) + inuse := metrics.GetOrRegisterMeter("system/memory/inuse", metrics.DefaultRegistry) + pauses := metrics.GetOrRegisterMeter("system/memory/pauses", metrics.DefaultRegistry) stats := make([]*runtime.MemStats, 2) for i := 0; i < len(stats); i++ { @@ -301,10 +301,10 @@ JavaScript API. See https://github.com/ethereum/go-ethereum/wiki/Javascipt-Conso for i := 1; ; i++ { runtime.ReadMemStats(stats[i%2]) - used.Mark(int64(stats[i%2].Alloc - stats[(i-1)%2].Alloc)) - total.Mark(int64(stats[i%2].TotalAlloc - stats[(i-1)%2].TotalAlloc)) - mallocs.Mark(int64(stats[i%2].Mallocs - stats[(i-1)%2].Mallocs)) + allocs.Mark(int64(stats[i%2].Mallocs - stats[(i-1)%2].Mallocs)) frees.Mark(int64(stats[i%2].Frees - stats[(i-1)%2].Frees)) + inuse.Mark(int64(stats[i%2].Alloc - stats[(i-1)%2].Alloc)) + pauses.Mark(int64(stats[i%2].PauseTotalNs - stats[(i-1)%2].PauseTotalNs)) time.Sleep(3 * time.Second) } diff --git a/cmd/geth/monitorcmd.go b/cmd/geth/monitorcmd.go index 43937dcaad..bb9c61a008 100644 --- a/cmd/geth/monitorcmd.go +++ b/cmd/geth/monitorcmd.go @@ -282,7 +282,7 @@ func updateChart(metric string, data []float64, chart *termui.LineChart, err err chart.Border.Label = metric units := dataUnits - if strings.Contains(metric, "Percentiles") { + if strings.Contains(metric, "/Percentiles/") || strings.Contains(metric, "/pauses/") { units = timeUnits } if len(units[unit]) > 0 { From 662285074e55a3915f7236a04fec355c3f416eb8 Mon Sep 17 00:00:00 2001 From: Bas van Kervel <basvankervel@gmail.com> Date: Thu, 25 Jun 2015 15:54:16 +0200 Subject: [PATCH 067/156] improved logging for IPC connection lifetime management --- rpc/comms/comms.go | 8 ++++---- rpc/comms/ipc.go | 5 +++++ rpc/comms/ipc_unix.go | 5 ++++- rpc/comms/ipc_windows.go | 17 ++++++++++------- 4 files changed, 23 insertions(+), 12 deletions(-) diff --git a/rpc/comms/comms.go b/rpc/comms/comms.go index 1374bde3f4..6e980149fa 100644 --- a/rpc/comms/comms.go +++ b/rpc/comms/comms.go @@ -43,7 +43,7 @@ type EthereumClient interface { SupportedModules() (map[string]string, error) } -func handle(conn net.Conn, api shared.EthereumApi, c codec.Codec) { +func handle(id int, conn net.Conn, api shared.EthereumApi, c codec.Codec) { codec := c.New(conn) for { @@ -52,8 +52,8 @@ func handle(conn net.Conn, api shared.EthereumApi, c codec.Codec) { codec.Close() return } else if err != nil { - glog.V(logger.Error).Infof("comms recv err - %v\n", err) codec.Close() + glog.V(logger.Debug).Infof("Closed IPC Conn %06d recv err - %v\n", id, err) return } @@ -71,8 +71,8 @@ func handle(conn net.Conn, api shared.EthereumApi, c codec.Codec) { err = codec.WriteResponse(responses[:responseCount]) if err != nil { - glog.V(logger.Error).Infof("comms send err - %v\n", err) codec.Close() + glog.V(logger.Debug).Infof("Closed IPC Conn %06d send err - %v\n", id, err) return } } else { @@ -82,8 +82,8 @@ func handle(conn net.Conn, api shared.EthereumApi, c codec.Codec) { rpcResponse = shared.NewRpcResponse(requests[0].Id, requests[0].Jsonrpc, res, err) err = codec.WriteResponse(rpcResponse) if err != nil { - glog.V(logger.Error).Infof("comms send err - %v\n", err) codec.Close() + glog.V(logger.Debug).Infof("Closed IPC Conn %06d send err - %v\n", id, err) return } } diff --git a/rpc/comms/ipc.go b/rpc/comms/ipc.go index 3cfcbf3cfb..f3dda55816 100644 --- a/rpc/comms/ipc.go +++ b/rpc/comms/ipc.go @@ -2,6 +2,7 @@ package comms import ( "fmt" + "math/rand" "net" "encoding/json" @@ -95,3 +96,7 @@ func NewIpcClient(cfg IpcConfig, codec codec.Codec) (*ipcClient, error) { func StartIpc(cfg IpcConfig, codec codec.Codec, offeredApi shared.EthereumApi) error { return startIpc(cfg, codec, offeredApi) } + +func newIpcConnId() int { + return rand.Int() % 1000000 +} diff --git a/rpc/comms/ipc_unix.go b/rpc/comms/ipc_unix.go index 5724231f4d..3e71c7d32a 100644 --- a/rpc/comms/ipc_unix.go +++ b/rpc/comms/ipc_unix.go @@ -48,7 +48,10 @@ func startIpc(cfg IpcConfig, codec codec.Codec, api shared.EthereumApi) error { continue } - go handle(conn, api, codec) + id := newIpcConnId() + glog.V(logger.Debug).Infof("New IPC connection with id %06d started\n", id) + + go handle(id, conn, api, codec) } os.Remove(cfg.Endpoint) diff --git a/rpc/comms/ipc_windows.go b/rpc/comms/ipc_windows.go index 4914a99c4c..203cd2d7b3 100644 --- a/rpc/comms/ipc_windows.go +++ b/rpc/comms/ipc_windows.go @@ -667,13 +667,16 @@ func startIpc(cfg IpcConfig, codec codec.Codec, api shared.EthereumApi) error { glog.V(logger.Error).Infof("Error accepting ipc connection - %v\n", err) continue } - - go handle(conn, api, codec) - } - - os.Remove(cfg.Endpoint) - }() - + + id := newIpcConnId() + glog.V(logger.Debug).Infof("New IPC connection with id %06d started\n", id) + + go handle(id, conn, api, codec) + } + + os.Remove(cfg.Endpoint) + }() + glog.V(logger.Info).Infof("IPC service started (%s)\n", cfg.Endpoint) return nil From c6dbe9dc079eadffea9171b26c41feecc8af6eef Mon Sep 17 00:00:00 2001 From: Taylor Gerring <taylor.gerring@gmail.com> Date: Thu, 25 Jun 2015 16:46:54 +0200 Subject: [PATCH 068/156] Travis and README cleanup --- .travis.yml | 9 +++------ README.md | 7 +++---- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/.travis.yml b/.travis.yml index 11daadd413..ff3ff71f71 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,7 +2,6 @@ language: go go: - 1.4.2 before_install: - - sudo add-apt-repository ppa:beineri/opt-qt541 -y - sudo apt-get update -qq - sudo apt-get install -yqq libgmp3-dev install: @@ -22,14 +21,12 @@ after_success: - if [ "$COVERALLS_TOKEN" ]; then goveralls -coverprofile=profile.cov -service=travis-ci -repotoken $COVERALLS_TOKEN; fi env: global: - - PKG_CONFIG_PATH=/opt/qt54/lib/pkgconfig - - LD_LIBRARY_PATH=/opt/qt54/lib - secure: "U2U1AmkU4NJBgKR/uUAebQY87cNL0+1JHjnLOmmXwxYYyj5ralWb1aSuSH3qSXiT93qLBmtaUkuv9fberHVqrbAeVlztVdUsKAq7JMQH+M99iFkC9UiRMqHmtjWJ0ok4COD1sRYixxi21wb/JrMe3M1iL4QJVS61iltjHhVdM64=" notifications: webhooks: urls: - https://webhooks.gitter.im/e/e09ccdce1048c5e03445 - on_success: change # options: [always|never|change] default: always - on_failure: always # options: [always|never|change] default: always - on_start: false # default: false + on_success: change + on_failure: always + on_start: false diff --git a/README.md b/README.md index a411d9eb89..4093aff647 100644 --- a/README.md +++ b/README.md @@ -44,11 +44,10 @@ Executables Go Ethereum comes with several wrappers/executables found in [the `cmd` directory](https://github.com/ethereum/go-ethereum/tree/develop/cmd): -* `mist` Official Ethereum Browser (ethereum GUI client) * `geth` Ethereum CLI (ethereum command line interface client) * `bootnode` runs a bootstrap node for the Discovery Protocol -* `ethtest` test tool which runs with the [tests](https://github.com/ethereum/testes) suite: - `cat file | ethtest`. +* `ethtest` test tool which runs with the [tests](https://github.com/ethereum/tests) suite: + `/path/to/test.json > ethtest --test BlockTests --stdin`. * `evm` is a generic Ethereum Virtual Machine: `evm -code 60ff60ff -gas 10000 -price 0 -dump`. See `-h` for a detailed description. * `disasm` disassembles EVM code: `echo "6001" | disasm` @@ -57,7 +56,7 @@ Go Ethereum comes with several wrappers/executables found in Command line options ==================== -Both `mist` and `geth` can be configured via command line options, environment variables and config files. +`geth` can be configured via command line options, environment variables and config files. To get the options available: From d84638bd31878f772c6d1de3b491160319ddfc4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= <peterke@gmail.com> Date: Fri, 26 Jun 2015 15:48:50 +0300 Subject: [PATCH 069/156] p2p: support protocol version negotiation --- p2p/peer.go | 11 +++++- p2p/peer_test.go | 95 ++++++++++++++++++++++++++++++++++++++++++++++++ p2p/protocol.go | 10 +++-- 3 files changed, 110 insertions(+), 6 deletions(-) diff --git a/p2p/peer.go b/p2p/peer.go index 40466cf846..e1bda1d036 100644 --- a/p2p/peer.go +++ b/p2p/peer.go @@ -249,15 +249,22 @@ func countMatchingProtocols(protocols []Protocol, caps []Cap) int { // matchProtocols creates structures for matching named subprotocols. func matchProtocols(protocols []Protocol, caps []Cap, rw MsgReadWriter) map[string]*protoRW { - sort.Sort(capsByName(caps)) + sort.Sort(capsByNameAndVersion(caps)) offset := baseProtocolLength result := make(map[string]*protoRW) + outer: for _, cap := range caps { for _, proto := range protocols { - if proto.Name == cap.Name && proto.Version == cap.Version && result[cap.Name] == nil { + if proto.Name == cap.Name && proto.Version == cap.Version { + // If an old protocol version matched, revert it + if old := result[cap.Name]; old != nil { + offset -= old.Length + } + // Assign the new match result[cap.Name] = &protoRW{Protocol: proto, offset: offset, in: make(chan Msg), w: rw} offset += proto.Length + continue outer } } diff --git a/p2p/peer_test.go b/p2p/peer_test.go index 575d0ff793..95167f4a1e 100644 --- a/p2p/peer_test.go +++ b/p2p/peer_test.go @@ -196,3 +196,98 @@ func TestNewPeer(t *testing.T) { p.Disconnect(DiscAlreadyConnected) // Should not hang } + +func TestMatchProtocols(t *testing.T) { + tests := []struct { + Local []Cap + Remote []Protocol + Match map[string]protoRW + }{ + { + // No remote protocols + Local: []Cap{{Name: "a"}}, + }, + { + // No local capabilities + Remote: []Protocol{{Name: "a"}}, + }, + { + // No mutual protocols + Local: []Cap{{Name: "a"}}, + Remote: []Protocol{{Name: "b"}}, + }, + { + // Some matches, some differences + Local: []Cap{{Name: "local"}, {Name: "match1"}, {Name: "match2"}}, + Remote: []Protocol{{Name: "match1"}, {Name: "match2"}, {Name: "remote"}}, + Match: map[string]protoRW{"match1": {Protocol: Protocol{Name: "match1"}}, "match2": {Protocol: Protocol{Name: "match2"}}}, + }, + { + // Various alphabetical ordering + Local: []Cap{{Name: "aa"}, {Name: "ab"}, {Name: "bb"}, {Name: "ba"}}, + Remote: []Protocol{{Name: "ba"}, {Name: "bb"}, {Name: "ab"}, {Name: "aa"}}, + Match: map[string]protoRW{"aa": {Protocol: Protocol{Name: "aa"}}, "ab": {Protocol: Protocol{Name: "ab"}}, "ba": {Protocol: Protocol{Name: "ba"}}, "bb": {Protocol: Protocol{Name: "bb"}}}, + }, + { + // No mutual versions + Local: []Cap{{Version: 1}}, + Remote: []Protocol{{Version: 2}}, + }, + { + // Multiple versions, single common + Local: []Cap{{Version: 1}, {Version: 2}}, + Remote: []Protocol{{Version: 2}, {Version: 3}}, + Match: map[string]protoRW{"": {Protocol: Protocol{Version: 2}}}, + }, + { + // Multiple versions, multiple common + Local: []Cap{{Version: 1}, {Version: 2}, {Version: 3}, {Version: 4}}, + Remote: []Protocol{{Version: 2}, {Version: 3}}, + Match: map[string]protoRW{"": {Protocol: Protocol{Version: 3}}}, + }, + { + // Various version orderings + Local: []Cap{{Version: 4}, {Version: 1}, {Version: 3}, {Version: 2}}, + Remote: []Protocol{{Version: 2}, {Version: 3}, {Version: 1}}, + Match: map[string]protoRW{"": {Protocol: Protocol{Version: 3}}}, + }, + { + // Versions overriding sub-protocol lengths + Local: []Cap{{Version: 1}, {Version: 2}, {Version: 3}, {Name: "a"}}, + Remote: []Protocol{{Version: 1, Length: 1}, {Version: 2, Length: 2}, {Version: 3, Length: 3}, {Name: "a"}}, + Match: map[string]protoRW{"": {Protocol: Protocol{Version: 3}}, "a": {Protocol: Protocol{Name: "a"}, offset: 3}}, + }, + } + + for i, tt := range tests { + result := matchProtocols(tt.Remote, tt.Local, nil) + if len(result) != len(tt.Match) { + t.Errorf("test %d: negotiation mismatch: have %v, want %v", i, len(result), len(tt.Match)) + continue + } + // Make sure all negotiated protocols are needed and correct + for name, proto := range result { + match, ok := tt.Match[name] + if !ok { + t.Errorf("test %d, proto '%s': negotiated but shouldn't have", i, name) + continue + } + if proto.Name != match.Name { + t.Errorf("test %d, proto '%s': name mismatch: have %v, want %v", i, name, proto.Name, match.Name) + } + if proto.Version != match.Version { + t.Errorf("test %d, proto '%s': version mismatch: have %v, want %v", i, name, proto.Version, match.Version) + } + if proto.offset-baseProtocolLength != match.offset { + t.Errorf("test %d, proto '%s': offset mismatch: have %v, want %v", i, name, proto.offset-baseProtocolLength, match.offset) + } + } + // Make sure no protocols missed negotiation + for name, _ := range tt.Match { + if _, ok := result[name]; !ok { + t.Errorf("test %d, proto '%s': not negotiated, should have", i, name) + continue + } + } + } +} diff --git a/p2p/protocol.go b/p2p/protocol.go index 5fa395eda4..a229ba911b 100644 --- a/p2p/protocol.go +++ b/p2p/protocol.go @@ -43,8 +43,10 @@ func (cap Cap) String() string { return fmt.Sprintf("%s/%d", cap.Name, cap.Version) } -type capsByName []Cap +type capsByNameAndVersion []Cap -func (cs capsByName) Len() int { return len(cs) } -func (cs capsByName) Less(i, j int) bool { return cs[i].Name < cs[j].Name } -func (cs capsByName) Swap(i, j int) { cs[i], cs[j] = cs[j], cs[i] } +func (cs capsByNameAndVersion) Len() int { return len(cs) } +func (cs capsByNameAndVersion) Swap(i, j int) { cs[i], cs[j] = cs[j], cs[i] } +func (cs capsByNameAndVersion) Less(i, j int) bool { + return cs[i].Name < cs[j].Name || (cs[i].Name == cs[j].Name && cs[i].Version < cs[j].Version) +} From 216fc267fafa6e27b14f642d0440cbd817a3a2d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= <peterke@gmail.com> Date: Fri, 26 Jun 2015 20:45:13 +0300 Subject: [PATCH 070/156] p2p: fix local/remote cap/protocol mixup --- p2p/peer_test.go | 46 +++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/p2p/peer_test.go b/p2p/peer_test.go index 95167f4a1e..d849c925f8 100644 --- a/p2p/peer_test.go +++ b/p2p/peer_test.go @@ -199,68 +199,68 @@ func TestNewPeer(t *testing.T) { func TestMatchProtocols(t *testing.T) { tests := []struct { - Local []Cap - Remote []Protocol + Remote []Cap + Local []Protocol Match map[string]protoRW }{ { - // No remote protocols - Local: []Cap{{Name: "a"}}, + // No remote capabilities + Local: []Protocol{{Name: "a"}}, }, { - // No local capabilities - Remote: []Protocol{{Name: "a"}}, + // No local protocols + Remote: []Cap{{Name: "a"}}, }, { // No mutual protocols - Local: []Cap{{Name: "a"}}, - Remote: []Protocol{{Name: "b"}}, + Remote: []Cap{{Name: "a"}}, + Local: []Protocol{{Name: "b"}}, }, { // Some matches, some differences - Local: []Cap{{Name: "local"}, {Name: "match1"}, {Name: "match2"}}, - Remote: []Protocol{{Name: "match1"}, {Name: "match2"}, {Name: "remote"}}, + Remote: []Cap{{Name: "local"}, {Name: "match1"}, {Name: "match2"}}, + Local: []Protocol{{Name: "match1"}, {Name: "match2"}, {Name: "remote"}}, Match: map[string]protoRW{"match1": {Protocol: Protocol{Name: "match1"}}, "match2": {Protocol: Protocol{Name: "match2"}}}, }, { // Various alphabetical ordering - Local: []Cap{{Name: "aa"}, {Name: "ab"}, {Name: "bb"}, {Name: "ba"}}, - Remote: []Protocol{{Name: "ba"}, {Name: "bb"}, {Name: "ab"}, {Name: "aa"}}, + Remote: []Cap{{Name: "aa"}, {Name: "ab"}, {Name: "bb"}, {Name: "ba"}}, + Local: []Protocol{{Name: "ba"}, {Name: "bb"}, {Name: "ab"}, {Name: "aa"}}, Match: map[string]protoRW{"aa": {Protocol: Protocol{Name: "aa"}}, "ab": {Protocol: Protocol{Name: "ab"}}, "ba": {Protocol: Protocol{Name: "ba"}}, "bb": {Protocol: Protocol{Name: "bb"}}}, }, { // No mutual versions - Local: []Cap{{Version: 1}}, - Remote: []Protocol{{Version: 2}}, + Remote: []Cap{{Version: 1}}, + Local: []Protocol{{Version: 2}}, }, { // Multiple versions, single common - Local: []Cap{{Version: 1}, {Version: 2}}, - Remote: []Protocol{{Version: 2}, {Version: 3}}, + Remote: []Cap{{Version: 1}, {Version: 2}}, + Local: []Protocol{{Version: 2}, {Version: 3}}, Match: map[string]protoRW{"": {Protocol: Protocol{Version: 2}}}, }, { // Multiple versions, multiple common - Local: []Cap{{Version: 1}, {Version: 2}, {Version: 3}, {Version: 4}}, - Remote: []Protocol{{Version: 2}, {Version: 3}}, + Remote: []Cap{{Version: 1}, {Version: 2}, {Version: 3}, {Version: 4}}, + Local: []Protocol{{Version: 2}, {Version: 3}}, Match: map[string]protoRW{"": {Protocol: Protocol{Version: 3}}}, }, { // Various version orderings - Local: []Cap{{Version: 4}, {Version: 1}, {Version: 3}, {Version: 2}}, - Remote: []Protocol{{Version: 2}, {Version: 3}, {Version: 1}}, + Remote: []Cap{{Version: 4}, {Version: 1}, {Version: 3}, {Version: 2}}, + Local: []Protocol{{Version: 2}, {Version: 3}, {Version: 1}}, Match: map[string]protoRW{"": {Protocol: Protocol{Version: 3}}}, }, { // Versions overriding sub-protocol lengths - Local: []Cap{{Version: 1}, {Version: 2}, {Version: 3}, {Name: "a"}}, - Remote: []Protocol{{Version: 1, Length: 1}, {Version: 2, Length: 2}, {Version: 3, Length: 3}, {Name: "a"}}, + Remote: []Cap{{Version: 1}, {Version: 2}, {Version: 3}, {Name: "a"}}, + Local: []Protocol{{Version: 1, Length: 1}, {Version: 2, Length: 2}, {Version: 3, Length: 3}, {Name: "a"}}, Match: map[string]protoRW{"": {Protocol: Protocol{Version: 3}}, "a": {Protocol: Protocol{Name: "a"}, offset: 3}}, }, } for i, tt := range tests { - result := matchProtocols(tt.Remote, tt.Local, nil) + result := matchProtocols(tt.Local, tt.Remote, nil) if len(result) != len(tt.Match) { t.Errorf("test %d: negotiation mismatch: have %v, want %v", i, len(result), len(tt.Match)) continue From 7e69392249b37369a1dd6e10bb31b7e2e655b05d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= <peterke@gmail.com> Date: Fri, 26 Jun 2015 21:48:21 +0300 Subject: [PATCH 071/156] cmd/geth: re-scale charts when changing unit magnitudes --- cmd/geth/monitorcmd.go | 62 ++++++++++++++++++++++++++---------------- 1 file changed, 38 insertions(+), 24 deletions(-) diff --git a/cmd/geth/monitorcmd.go b/cmd/geth/monitorcmd.go index bb9c61a008..545ac3274d 100644 --- a/cmd/geth/monitorcmd.go +++ b/cmd/geth/monitorcmd.go @@ -103,33 +103,20 @@ func monitor(ctx *cli.Context) { footer.Height = 3 charts := make([]*termui.LineChart, len(monitored)) + units := make([]int, len(monitored)) data := make([][]float64, len(monitored)) for i := 0; i < len(data); i++ { data[i] = make([]float64, 512) } - for i, metric := range monitored { - charts[i] = termui.NewLineChart() - if runtime.GOOS == "windows" { - charts[i].Mode = "dot" - } - charts[i].Data = make([]float64, 512) - charts[i].DataLabels = []string{""} - charts[i].Height = (termui.TermHeight() - footer.Height) / rows - charts[i].AxesColor = termui.ColorWhite - charts[i].PaddingBottom = -2 - - charts[i].Border.Label = metric - charts[i].Border.LabelFgColor = charts[i].Border.FgColor | termui.AttrBold - charts[i].Border.FgColor = charts[i].Border.BgColor - + for i := 0; i < len(monitored); i++ { + charts[i] = createChart((termui.TermHeight() - footer.Height) / rows) row := termui.Body.Rows[i%rows] row.Cols = append(row.Cols, termui.NewCol(12/cols, 0, charts[i])) } termui.Body.AddRows(termui.NewRow(termui.NewCol(12, 0, footer))) - termui.Body.Align() - termui.Render(termui.Body) - refreshCharts(xeth, monitored, data, charts, ctx, footer) + refreshCharts(xeth, monitored, data, units, charts, ctx, footer) + termui.Body.Align() termui.Render(termui.Body) // Watch for various system events, and periodically refresh the charts @@ -149,7 +136,9 @@ func monitor(ctx *cli.Context) { termui.Render(termui.Body) } case <-refresh: - refreshCharts(xeth, monitored, data, charts, ctx, footer) + if refreshCharts(xeth, monitored, data, units, charts, ctx, footer) { + termui.Body.Align() + } termui.Render(termui.Body) } } @@ -246,18 +235,21 @@ func fetchMetric(metrics map[string]interface{}, metric string) float64 { // refreshCharts retrieves a next batch of metrics, and inserts all the new // values into the active datasets and charts -func refreshCharts(xeth *rpc.Xeth, metrics []string, data [][]float64, charts []*termui.LineChart, ctx *cli.Context, footer *termui.Par) { +func refreshCharts(xeth *rpc.Xeth, metrics []string, data [][]float64, units []int, charts []*termui.LineChart, ctx *cli.Context, footer *termui.Par) (realign bool) { values, err := retrieveMetrics(xeth) for i, metric := range metrics { data[i] = append([]float64{fetchMetric(values, metric)}, data[i][:len(data[i])-1]...) - updateChart(metric, data[i], charts[i], err) + if updateChart(metric, data[i], &units[i], charts[i], err) { + realign = true + } } updateFooter(ctx, err, footer) + return } // updateChart inserts a dataset into a line chart, scaling appropriately as to // not display weird labels, also updating the chart label accordingly. -func updateChart(metric string, data []float64, chart *termui.LineChart, err error) { +func updateChart(metric string, data []float64, base *int, chart *termui.LineChart, err error) (realign bool) { dataUnits := []string{"", "K", "M", "G", "T", "E"} timeUnits := []string{"ns", "µs", "ms", "s", "ks", "ms"} colors := []termui.Attribute{termui.ColorBlue, termui.ColorCyan, termui.ColorGreen, termui.ColorYellow, termui.ColorRed, termui.ColorRed} @@ -274,17 +266,20 @@ func updateChart(metric string, data []float64, chart *termui.LineChart, err err for high >= 1000 { high, unit, scale = high/1000, unit+1, scale*1000 } + // If the unit changes, re-create the chart (hack to set max height...) + if unit != *base { + realign, *base, *chart = true, unit, *createChart(chart.Height) + } // Update the chart's data points with the scaled values for i, value := range data { chart.Data[i] = value / scale } // Update the chart's label with the scale units - chart.Border.Label = metric - units := dataUnits if strings.Contains(metric, "/Percentiles/") || strings.Contains(metric, "/pauses/") { units = timeUnits } + chart.Border.Label = metric if len(units[unit]) > 0 { chart.Border.Label += " [" + units[unit] + "]" } @@ -292,6 +287,25 @@ func updateChart(metric string, data []float64, chart *termui.LineChart, err err if err != nil { chart.LineColor = termui.ColorRed | termui.AttrBold } + return +} + +// createChart creates an empty line chart with the default configs. +func createChart(height int) *termui.LineChart { + chart := termui.NewLineChart() + if runtime.GOOS == "windows" { + chart.Mode = "dot" + } + chart.Data = make([]float64, 512) + chart.DataLabels = []string{""} + chart.Height = height + chart.AxesColor = termui.ColorWhite + chart.PaddingBottom = -2 + + chart.Border.LabelFgColor = chart.Border.FgColor | termui.AttrBold + chart.Border.FgColor = chart.Border.BgColor + + return chart } // updateFooter updates the footer contents based on any encountered errors. From d099a42c8564405f2f08b83ec67e0fd96fb03732 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= <peterke@gmail.com> Date: Fri, 26 Jun 2015 22:05:49 +0300 Subject: [PATCH 072/156] cmd/geth: fix monitor panic, don't pre-fill with dummy data --- cmd/geth/monitorcmd.go | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/cmd/geth/monitorcmd.go b/cmd/geth/monitorcmd.go index 545ac3274d..fe771b561f 100644 --- a/cmd/geth/monitorcmd.go +++ b/cmd/geth/monitorcmd.go @@ -105,9 +105,6 @@ func monitor(ctx *cli.Context) { charts := make([]*termui.LineChart, len(monitored)) units := make([]int, len(monitored)) data := make([][]float64, len(monitored)) - for i := 0; i < len(data); i++ { - data[i] = make([]float64, 512) - } for i := 0; i < len(monitored); i++ { charts[i] = createChart((termui.TermHeight() - footer.Height) / rows) row := termui.Body.Rows[i%rows] @@ -238,7 +235,11 @@ func fetchMetric(metrics map[string]interface{}, metric string) float64 { func refreshCharts(xeth *rpc.Xeth, metrics []string, data [][]float64, units []int, charts []*termui.LineChart, ctx *cli.Context, footer *termui.Par) (realign bool) { values, err := retrieveMetrics(xeth) for i, metric := range metrics { - data[i] = append([]float64{fetchMetric(values, metric)}, data[i][:len(data[i])-1]...) + if len(data) < 512 { + data[i] = append([]float64{fetchMetric(values, metric)}, data[i]...) + } else { + data[i] = append([]float64{fetchMetric(values, metric)}, data[i][:len(data[i])-1]...) + } if updateChart(metric, data[i], &units[i], charts[i], err) { realign = true } @@ -255,12 +256,16 @@ func updateChart(metric string, data []float64, base *int, chart *termui.LineCha colors := []termui.Attribute{termui.ColorBlue, termui.ColorCyan, termui.ColorGreen, termui.ColorYellow, termui.ColorRed, termui.ColorRed} // Extract only part of the data that's actually visible - data = data[:chart.Width*2] - + if chart.Width*2 < len(data) { + data = data[:chart.Width*2] + } // Find the maximum value and scale under 1K - high := data[0] - for _, value := range data[1:] { - high = math.Max(high, value) + high := 0.0 + if len(data) > 0 { + high = data[0] + for _, value := range data[1:] { + high = math.Max(high, value) + } } unit, scale := 0, 1.0 for high >= 1000 { @@ -271,6 +276,10 @@ func updateChart(metric string, data []float64, base *int, chart *termui.LineCha realign, *base, *chart = true, unit, *createChart(chart.Height) } // Update the chart's data points with the scaled values + if cap(chart.Data) < len(data) { + chart.Data = make([]float64, len(data)) + } + chart.Data = chart.Data[:len(data)] for i, value := range data { chart.Data[i] = value / scale } @@ -296,7 +305,6 @@ func createChart(height int) *termui.LineChart { if runtime.GOOS == "windows" { chart.Mode = "dot" } - chart.Data = make([]float64, 512) chart.DataLabels = []string{""} chart.Height = height chart.AxesColor = termui.ColorWhite From a355777ff8531ba91fbdfb093532e7314c15710b Mon Sep 17 00:00:00 2001 From: Bas van Kervel <bas@ethdev.com> Date: Mon, 29 Jun 2015 11:13:28 +0200 Subject: [PATCH 073/156] improved error handling in parsing request --- rpc/api/eth.go | 3 ++- rpc/api/eth_args.go | 7 ++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/rpc/api/eth.go b/rpc/api/eth.go index 2bd7e4cdb4..0735754b59 100644 --- a/rpc/api/eth.go +++ b/rpc/api/eth.go @@ -12,6 +12,7 @@ import ( "github.com/ethereum/go-ethereum/rpc/shared" "github.com/ethereum/go-ethereum/xeth" "gopkg.in/fatih/set.v0" + "fmt" ) const ( @@ -582,7 +583,7 @@ func (self *ethApi) Resend(req *shared.Request) (interface{}, error) { func (self *ethApi) PendingTransactions(req *shared.Request) (interface{}, error) { txs := self.ethereum.TxPool().GetTransactions() - // grab the accounts from the account manager. This will help with determening which + // grab the accounts from the account manager. This will help with determining which // transactions should be returned. accounts, err := self.ethereum.AccountManager().Accounts() if err != nil { diff --git a/rpc/api/eth_args.go b/rpc/api/eth_args.go index a75fdbdee2..88fc00a6c1 100644 --- a/rpc/api/eth_args.go +++ b/rpc/api/eth_args.go @@ -917,7 +917,11 @@ func (args *ResendArgs) UnmarshalJSON(b []byte) (err error) { trans := new(tx) err = json.Unmarshal(data, trans) if err != nil { - return shared.NewDecodeParamError("Unable to parse transaction object.") + return shared.NewDecodeParamError("Unable to parse transaction object") + } + + if trans == nil || trans.tx == nil { + return shared.NewDecodeParamError("Unable to parse transaction object") } gasLimit, gasPrice := trans.GasLimit, trans.GasPrice @@ -936,6 +940,7 @@ func (args *ResendArgs) UnmarshalJSON(b []byte) (err error) { return shared.NewInvalidTypeError("gasLimit", "not a string") } } + args.Tx = trans args.GasPrice = gasPrice args.GasLimit = gasLimit From f9264e87ec4c612f647a05ea11d5640709577a7f Mon Sep 17 00:00:00 2001 From: Bas van Kervel <bas@ethdev.com> Date: Mon, 29 Jun 2015 12:32:01 +0200 Subject: [PATCH 074/156] add json parsing method for resend transaction --- rpc/api/eth.go | 1 - rpc/api/eth_args.go | 77 ++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 76 insertions(+), 2 deletions(-) diff --git a/rpc/api/eth.go b/rpc/api/eth.go index 0735754b59..6c071569c6 100644 --- a/rpc/api/eth.go +++ b/rpc/api/eth.go @@ -12,7 +12,6 @@ import ( "github.com/ethereum/go-ethereum/rpc/shared" "github.com/ethereum/go-ethereum/xeth" "gopkg.in/fatih/set.v0" - "fmt" ) const ( diff --git a/rpc/api/eth_args.go b/rpc/api/eth_args.go index 88fc00a6c1..203171d58f 100644 --- a/rpc/api/eth_args.go +++ b/rpc/api/eth_args.go @@ -4,8 +4,8 @@ import ( "encoding/json" "fmt" "math/big" - "strconv" + "strings" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/state" @@ -899,6 +899,81 @@ type ResendArgs struct { GasLimit string } +func (tx *tx) UnmarshalJSON(b []byte) (err error) { + var fields map[string]interface{} + if err := json.Unmarshal(b, &fields); err != nil { + return shared.NewDecodeParamError(err.Error()) + } + + trans := new(types.Transaction) + + if val, found := fields["To"]; found { + if strVal, ok := val.(string); ok && len(strVal) > 0 { + tx.To = strVal + to := common.StringToAddress(strVal) + trans.Recipient = &to + } + } + + if val, found := fields["From"]; found { + if strVal, ok := val.(string); ok { + tx.From = strVal + } + } + + if val, found := fields["Nonce"]; found { + if strVal, ok := val.(string); ok { + tx.Nonce = strVal + if trans.AccountNonce, err = strconv.ParseUint(strVal, 10, 64); err != nil { + return shared.NewDecodeParamError(fmt.Sprintf("Unable to decode tx.Nonce - %v", err)) + } + } + } + + var parseOk bool + if val, found := fields["Value"]; found { + if strVal, ok := val.(string); ok { + tx.Value = strVal + if trans.Amount, parseOk = new(big.Int).SetString(strVal, 0); !parseOk { + return shared.NewDecodeParamError(fmt.Sprintf("Unable to decode tx.Amount - %v", err)) + } + } + } + + if val, found := fields["Data"]; found { + if strVal, ok := val.(string); ok { + tx.Data = strVal + if strings.HasPrefix(strVal, "0x") { + trans.Payload = common.Hex2Bytes(strVal[2:]) + } else { + trans.Payload = common.Hex2Bytes(strVal) + } + } + } + + if val, found := fields["GasLimit"]; found { + if strVal, ok := val.(string); ok { + tx.GasLimit = strVal + if trans.GasLimit, parseOk = new(big.Int).SetString(strVal, 0); !parseOk { + return shared.NewDecodeParamError(fmt.Sprintf("Unable to decode tx.GasLimit - %v", err)) + } + } + } + + if val, found := fields["GasPrice"]; found { + if strVal, ok := val.(string); ok { + tx.GasPrice = strVal + if trans.Price, parseOk = new(big.Int).SetString(strVal, 0); !parseOk { + return shared.NewDecodeParamError(fmt.Sprintf("Unable to decode tx.GasPrice - %v", err)) + } + } + } + + tx.tx = trans + + return nil +} + func (args *ResendArgs) UnmarshalJSON(b []byte) (err error) { var obj []interface{} if err = json.Unmarshal(b, &obj); err != nil { From 61ccc39b569b0d9c1c0c5a51975723621dd312d0 Mon Sep 17 00:00:00 2001 From: Bas van Kervel <bas@ethdev.com> Date: Mon, 29 Jun 2015 12:42:47 +0200 Subject: [PATCH 075/156] initialize fields to prevent nil pointer exception --- rpc/api/eth_args.go | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/rpc/api/eth_args.go b/rpc/api/eth_args.go index 203171d58f..b5507832de 100644 --- a/rpc/api/eth_args.go +++ b/rpc/api/eth_args.go @@ -906,6 +906,9 @@ func (tx *tx) UnmarshalJSON(b []byte) (err error) { } trans := new(types.Transaction) + trans.Amount = new(big.Int) + trans.GasLimit = new(big.Int) + trans.Price = new(big.Int) if val, found := fields["To"]; found { if strVal, ok := val.(string); ok && len(strVal) > 0 { @@ -928,13 +931,15 @@ func (tx *tx) UnmarshalJSON(b []byte) (err error) { return shared.NewDecodeParamError(fmt.Sprintf("Unable to decode tx.Nonce - %v", err)) } } + } else { + return shared.NewDecodeParamError("tx.Nonce not found") } var parseOk bool if val, found := fields["Value"]; found { if strVal, ok := val.(string); ok { tx.Value = strVal - if trans.Amount, parseOk = new(big.Int).SetString(strVal, 0); !parseOk { + if _, parseOk = trans.Amount.SetString(strVal, 0); !parseOk { return shared.NewDecodeParamError(fmt.Sprintf("Unable to decode tx.Amount - %v", err)) } } @@ -954,7 +959,7 @@ func (tx *tx) UnmarshalJSON(b []byte) (err error) { if val, found := fields["GasLimit"]; found { if strVal, ok := val.(string); ok { tx.GasLimit = strVal - if trans.GasLimit, parseOk = new(big.Int).SetString(strVal, 0); !parseOk { + if _, parseOk = trans.GasLimit.SetString(strVal, 0); !parseOk { return shared.NewDecodeParamError(fmt.Sprintf("Unable to decode tx.GasLimit - %v", err)) } } @@ -963,7 +968,7 @@ func (tx *tx) UnmarshalJSON(b []byte) (err error) { if val, found := fields["GasPrice"]; found { if strVal, ok := val.(string); ok { tx.GasPrice = strVal - if trans.Price, parseOk = new(big.Int).SetString(strVal, 0); !parseOk { + if _, parseOk = trans.Price.SetString(strVal, 0); !parseOk { return shared.NewDecodeParamError(fmt.Sprintf("Unable to decode tx.GasPrice - %v", err)) } } From 29d53b20739645eb6ecab3ef79ecf3518eae6b68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= <peterke@gmail.com> Date: Mon, 29 Jun 2015 13:49:04 +0300 Subject: [PATCH 076/156] eth/fetcher: don't double filter/fetch the same block --- eth/fetcher/fetcher.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eth/fetcher/fetcher.go b/eth/fetcher/fetcher.go index 07a32b9f1c..69f3cb5d1e 100644 --- a/eth/fetcher/fetcher.go +++ b/eth/fetcher/fetcher.go @@ -323,7 +323,7 @@ func (f *Fetcher) loop() { hash := block.Hash() // Filter explicitly requested blocks from hash announcements - if _, ok := f.fetching[hash]; ok { + if f.fetching[hash] != nil && f.queued[hash] == nil { // Discard if already imported by other means if f.getBlock(hash) == nil { explicit = append(explicit, block) From a7d22658ad81064abad5a12bd38545c98a0c508c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= <peterke@gmail.com> Date: Mon, 29 Jun 2015 14:20:13 +0300 Subject: [PATCH 077/156] eth/fetcher: don't drop on future blocks, just not propagate --- eth/fetcher/fetcher.go | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/eth/fetcher/fetcher.go b/eth/fetcher/fetcher.go index 69f3cb5d1e..5a1509f89d 100644 --- a/eth/fetcher/fetcher.go +++ b/eth/fetcher/fetcher.go @@ -7,6 +7,8 @@ import ( "math/rand" "time" + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/logger" @@ -104,6 +106,7 @@ type Fetcher struct { broadcastMeter metrics.Meter // Counter for metering the inbound propagations broadcastTimer metrics.Timer // Counter and timer for metering the block forwarding discardMeter metrics.Meter // Counter for metering the discarded blocks + futureMeter metrics.Meter // Counter for metering future blocks } // New creates a block fetcher to retrieve blocks based on hash announcements. @@ -131,6 +134,7 @@ func New(getBlock blockRetrievalFn, validateBlock blockValidatorFn, broadcastBlo broadcastMeter: metrics.GetOrRegisterMeter("eth/sync/RemoteBroadcasts", metrics.DefaultRegistry), broadcastTimer: metrics.GetOrRegisterTimer("eth/sync/LocalBroadcasts", metrics.DefaultRegistry), discardMeter: metrics.GetOrRegisterMeter("eth/sync/DiscardedBlocks", metrics.DefaultRegistry), + futureMeter: metrics.GetOrRegisterMeter("eth/sync/FutureBlocks", metrics.DefaultRegistry), } } @@ -416,14 +420,22 @@ func (f *Fetcher) insert(peer string, block *types.Block) { return } // Quickly validate the header and propagate the block if it passes - if err := f.validateBlock(block, parent); err != nil { + switch err := f.validateBlock(block, parent); err { + case nil: + // All ok, quickly propagate to our peers + f.broadcastTimer.UpdateSince(block.ReceivedAt) + go f.broadcastBlock(block, true) + + case core.BlockFutureErr: + f.futureMeter.Mark(1) + // Weird future block, don't fail, but neither propagate + + default: + // Something went very wrong, drop the peer glog.V(logger.Debug).Infof("Peer %s: block #%d [%x] verification failed: %v", peer, block.NumberU64(), hash[:4], err) f.dropPeer(peer) return } - f.broadcastTimer.UpdateSince(block.ReceivedAt) - go f.broadcastBlock(block, true) - // Run the actual import and log any issues if _, err := f.insertChain(types.Blocks{block}); err != nil { glog.V(logger.Warn).Infof("Peer %s: block #%d [%x] import failed: %v", peer, block.NumberU64(), hash[:4], err) From 059a1e9e4edeb75cef6da05936835cfbc61e1350 Mon Sep 17 00:00:00 2001 From: Jeffrey Wilcke <geffobscura@gmail.com> Date: Sun, 28 Jun 2015 13:38:21 +0200 Subject: [PATCH 078/156] miner: broadcast block before insertion/validation --- miner/worker.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/miner/worker.go b/miner/worker.go index 55c23376cd..2955a9dee9 100644 --- a/miner/worker.go +++ b/miner/worker.go @@ -239,12 +239,16 @@ func (self *worker) wait() { continue } + // broadcast before waiting for validation + go self.mux.Post(core.NewMinedBlockEvent{block}) + // insert mined block in to our own chain if _, err := self.chain.InsertChain(types.Blocks{block}); err == nil { + // remove uncles we've previously inserted for _, uncle := range block.Uncles() { delete(self.possibleUncles, uncle.Hash()) } - self.mux.Post(core.NewMinedBlockEvent{block}) + // check staleness and display confirmation var stale, confirm string canonBlock := self.chain.GetBlockByNumber(block.NumberU64()) if canonBlock != nil && canonBlock.Hash() != block.Hash() { @@ -256,6 +260,7 @@ func (self *worker) wait() { glog.V(logger.Info).Infof("🔨 Mined %sblock (#%v / %x). %s", stale, block.Number(), block.Hash().Bytes()[:4], confirm) + // XXX remove old structured json logging jsonlogger.LogJson(&logger.EthMinerNewBlock{ BlockHash: block.Hash().Hex(), BlockNumber: block.Number(), From d1e93db3ebc218044339a6c5c95b4907e6351ede Mon Sep 17 00:00:00 2001 From: Jeffrey Wilcke <geffobscura@gmail.com> Date: Mon, 29 Jun 2015 12:12:30 +0200 Subject: [PATCH 079/156] core, miner: added write block method & changed mining propagation --- core/chain_manager.go | 112 +++++++++++++++++++++++++----------------- miner/worker.go | 56 ++++++++++----------- 2 files changed, 95 insertions(+), 73 deletions(-) diff --git a/core/chain_manager.go b/core/chain_manager.go index 3b9b7517be..4a80d4a69a 100644 --- a/core/chain_manager.go +++ b/core/chain_manager.go @@ -548,6 +548,58 @@ func (self *ChainManager) procFutureBlocks() { } } +type writeStatus byte + +const ( + nonStatTy writeStatus = iota + canonStatTy + splitStatTy + sideStatTy +) + +func (self *ChainManager) WriteBlock(block *types.Block) (status writeStatus, err error) { + self.wg.Add(1) + defer self.wg.Done() + + cblock := self.currentBlock + // Compare the TD of the last known block in the canonical chain to make sure it's greater. + // At this point it's possible that a different chain (fork) becomes the new canonical chain. + if block.Td.Cmp(self.Td()) > 0 { + // chain fork + if block.ParentHash() != cblock.Hash() { + // during split we merge two different chains and create the new canonical chain + err := self.merge(cblock, block) + if err != nil { + return nonStatTy, err + } + + status = splitStatTy + } + + self.mu.Lock() + self.setTotalDifficulty(block.Td) + self.insert(block) + self.mu.Unlock() + + self.setTransState(state.New(block.Root(), self.stateDb)) + self.txState.SetState(state.New(block.Root(), self.stateDb)) + + status = canonStatTy + } else { + status = sideStatTy + } + + // Write block to database. Eventually we'll have to improve on this and throw away blocks that are + // not in the canonical chain. + self.mu.Lock() + self.write(block) + self.mu.Unlock() + // Delete from future blocks + self.futureBlocks.Delete(block.Hash()) + + return +} + // InsertChain will attempt to insert the given chain in to the canonical chain or, otherwise, create a fork. It an error is returned // it will return the index number of the failing block as well an error describing what went wrong (for possible errors see core/errors.go). func (self *ChainManager) InsertChain(chain types.Blocks) (int, error) { @@ -641,59 +693,29 @@ func (self *ChainManager) InsertChain(chain types.Blocks) (int, error) { txcount += len(block.Transactions()) - cblock := self.currentBlock - // Compare the TD of the last known block in the canonical chain to make sure it's greater. - // At this point it's possible that a different chain (fork) becomes the new canonical chain. - if block.Td.Cmp(self.Td()) > 0 { - // chain fork - if block.ParentHash() != cblock.Hash() { - // during split we merge two different chains and create the new canonical chain - err := self.merge(cblock, block) - if err != nil { - return i, err - } - - queue[i] = ChainSplitEvent{block, logs} - queueEvent.splitCount++ - } - - self.mu.Lock() - self.setTotalDifficulty(block.Td) - self.insert(block) - self.mu.Unlock() - - jsonlogger.LogJson(&logger.EthChainNewHead{ - BlockHash: block.Hash().Hex(), - BlockNumber: block.Number(), - ChainHeadHash: cblock.Hash().Hex(), - BlockPrevHash: block.ParentHash().Hex(), - }) - - self.setTransState(state.New(block.Root(), self.stateDb)) - self.txState.SetState(state.New(block.Root(), self.stateDb)) - - queue[i] = ChainEvent{block, block.Hash(), logs} - queueEvent.canonicalCount++ - + // write the block to the chain and get the status + status, err := self.WriteBlock(block) + if err != nil { + return i, err + } + switch status { + case canonStatTy: if glog.V(logger.Debug) { glog.Infof("[%v] inserted block #%d (%d TXs %d UNCs) (%x...). Took %v\n", time.Now().UnixNano(), block.Number(), len(block.Transactions()), len(block.Uncles()), block.Hash().Bytes()[0:4], time.Since(bstart)) } - } else { + queue[i] = ChainEvent{block, block.Hash(), logs} + queueEvent.canonicalCount++ + case sideStatTy: if glog.V(logger.Detail) { glog.Infof("inserted forked block #%d (TD=%v) (%d TXs %d UNCs) (%x...). Took %v\n", block.Number(), block.Difficulty(), len(block.Transactions()), len(block.Uncles()), block.Hash().Bytes()[0:4], time.Since(bstart)) } - queue[i] = ChainSideEvent{block, logs} queueEvent.sideCount++ + case splitStatTy: + queue[i] = ChainSplitEvent{block, logs} + queueEvent.splitCount++ } - // Write block to database. Eventually we'll have to improve on this and throw away blocks that are - // not in the canonical chain. - self.write(block) - // Delete from future blocks - self.futureBlocks.Delete(block.Hash()) - stats.processed++ - blockInsertTimer.UpdateSince(bstart) } if (stats.queued > 0 || stats.processed > 0 || stats.ignored > 0) && bool(glog.V(logger.Info)) { @@ -752,9 +774,9 @@ func (self *ChainManager) diff(oldBlock, newBlock *types.Block) (types.Blocks, e } } - if glog.V(logger.Info) { + if glog.V(logger.Debug) { commonHash := commonBlock.Hash() - glog.Infof("Fork detected @ %x. Reorganising chain from #%v %x to %x", commonHash[:4], numSplit, oldStart.Hash().Bytes()[:4], newStart.Hash().Bytes()[:4]) + glog.Infof("Chain split detected @ %x. Reorganising chain from #%v %x to %x", commonHash[:4], numSplit, oldStart.Hash().Bytes()[:4], newStart.Hash().Bytes()[:4]) } return newChain, nil diff --git a/miner/worker.go b/miner/worker.go index 2955a9dee9..ab01ba09e2 100644 --- a/miner/worker.go +++ b/miner/worker.go @@ -239,43 +239,35 @@ func (self *worker) wait() { continue } + _, err := self.chain.WriteBlock(block) + if err != nil { + glog.V(logger.Error).Infoln("error writing block to chain", err) + continue + } + + // check staleness and display confirmation + var stale, confirm string + canonBlock := self.chain.GetBlockByNumber(block.NumberU64()) + if canonBlock != nil && canonBlock.Hash() != block.Hash() { + stale = "stale " + } else { + confirm = "Wait 5 blocks for confirmation" + self.current.localMinedBlocks = newLocalMinedBlock(block.Number().Uint64(), self.current.localMinedBlocks) + } + + glog.V(logger.Info).Infof("🔨 Mined %sblock (#%v / %x). %s", stale, block.Number(), block.Hash().Bytes()[:4], confirm) + // broadcast before waiting for validation go self.mux.Post(core.NewMinedBlockEvent{block}) - // insert mined block in to our own chain - if _, err := self.chain.InsertChain(types.Blocks{block}); err == nil { - // remove uncles we've previously inserted - for _, uncle := range block.Uncles() { - delete(self.possibleUncles, uncle.Hash()) - } - // check staleness and display confirmation - var stale, confirm string - canonBlock := self.chain.GetBlockByNumber(block.NumberU64()) - if canonBlock != nil && canonBlock.Hash() != block.Hash() { - stale = "stale " - } else { - confirm = "Wait 5 blocks for confirmation" - self.current.localMinedBlocks = newLocalMinedBlock(block.Number().Uint64(), self.current.localMinedBlocks) - } - - glog.V(logger.Info).Infof("🔨 Mined %sblock (#%v / %x). %s", stale, block.Number(), block.Hash().Bytes()[:4], confirm) - - // XXX remove old structured json logging - jsonlogger.LogJson(&logger.EthMinerNewBlock{ - BlockHash: block.Hash().Hex(), - BlockNumber: block.Number(), - ChainHeadHash: block.ParentHeaderHash.Hex(), - BlockPrevHash: block.ParentHeaderHash.Hex(), - }) - } else { - self.commitNewWork() - } + self.commitNewWork() } } } func (self *worker) push() { if atomic.LoadInt32(&self.mining) == 1 { + self.current.state.Sync() self.current.block.SetRoot(self.current.state.Root()) // push new work to agents @@ -302,6 +294,13 @@ func (self *worker) makeCurrent() { if block.Time() <= parent.Time() { block.Header().Time = parent.Header().Time + 1 } + // this will ensure we're not going off too far in the future + if now := time.Now().Unix(); block.Time() > now+4 { + wait := time.Duration(block.Time()-now) * time.Second + glog.V(logger.Info).Infoln("We are too far in the future. Waiting for", wait) + time.Sleep(wait) + } + block.Header().Extra = self.extra // when 08 is processed ancestors contain 07 (quick block) @@ -428,6 +427,7 @@ func (self *worker) commitNewWork() { self.current.block.SetUncles(uncles) core.AccumulateRewards(self.current.state, self.current.block) + self.current.block.Td = new(big.Int).Set(core.CalcTD(self.current.block, self.chain.GetBlock(self.current.block.ParentHash()))) self.current.state.Update() From b39042db5672e830ddec41ea97c642d93be61c30 Mon Sep 17 00:00:00 2001 From: Jeffrey Wilcke <geffobscura@gmail.com> Date: Mon, 29 Jun 2015 12:42:47 +0200 Subject: [PATCH 080/156] core, miner: implemented canary --- core/canary.go | 28 ++++++++++++++++++++++++++++ miner/worker.go | 6 ++++++ 2 files changed, 34 insertions(+) create mode 100644 core/canary.go diff --git a/core/canary.go b/core/canary.go new file mode 100644 index 0000000000..de77c4bbaa --- /dev/null +++ b/core/canary.go @@ -0,0 +1,28 @@ +package core + +import ( + "math/big" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/state" +) + +var ( + jeff = common.HexToAddress("9d38997c624a71b21278389ea2fdc460d000e4b2") + vitalik = common.HexToAddress("b1e570be07eaa673e4fd0c8265b64ef739385709") + christoph = common.HexToAddress("529bc43a5d93789fa28de1961db6a07e752204ae") + gav = common.HexToAddress("e3e942b2aa524293c84ff6c7f87a6635790ad5e4") +) + +// Canary will check the 0'd address of the 4 contracts above. +// If two or more are set to anything other than a 0 the canary +// dies a horrible death. +func Canary(statedb *state.StateDB) bool { + r := new(big.Int) + r.Add(r, statedb.GetState(jeff, common.Hash{}).Big()) + r.Add(r, statedb.GetState(vitalik, common.Hash{}).Big()) + r.Add(r, statedb.GetState(christoph, common.Hash{}).Big()) + r.Add(r, statedb.GetState(gav, common.Hash{}).Big()) + + return r.Cmp(big.NewInt(1)) > 0 +} diff --git a/miner/worker.go b/miner/worker.go index ab01ba09e2..1e5d479656 100644 --- a/miner/worker.go +++ b/miner/worker.go @@ -267,6 +267,12 @@ func (self *worker) wait() { func (self *worker) push() { if atomic.LoadInt32(&self.mining) == 1 { + if core.Canary(self.current.state) { + glog.Infoln("Toxicity levels rising to deadly levels. Your canary has died. You can go back or continue down the mineshaft --more--") + glog.Infoln("You turn back and abort mining") + return + } + self.current.state.Sync() self.current.block.SetRoot(self.current.state.Root()) From 654564e164b3b6f7f4ba1e8bbd6fcd64776068fa Mon Sep 17 00:00:00 2001 From: Felix Lange <fjl@twurst.com> Date: Thu, 11 Jun 2015 14:05:32 +0200 Subject: [PATCH 081/156] core/types: make transactions immutable --- core/transaction_pool.go | 19 ++- core/transaction_pool_test.go | 91 ++++-------- core/types/block_test.go | 19 +-- core/types/transaction.go | 252 +++++++++++++++++---------------- core/types/transaction_test.go | 32 ++--- eth/protocol_test.go | 4 +- tests/transaction_test_util.go | 45 +++--- xeth/xeth.go | 34 ++--- 8 files changed, 218 insertions(+), 278 deletions(-) diff --git a/core/transaction_pool.go b/core/transaction_pool.go index 34a1733d71..45db04eef4 100644 --- a/core/transaction_pool.go +++ b/core/transaction_pool.go @@ -162,27 +162,25 @@ func (pool *TxPool) validateTx(tx *types.Transaction) error { // Check the transaction doesn't exceed the current // block limit gas. - if pool.gasLimit().Cmp(tx.GasLimit) < 0 { + if pool.gasLimit().Cmp(tx.Gas()) < 0 { return ErrGasLimit } // Transactions can't be negative. This may never happen // using RLP decoded transactions but may occur if you create // a transaction using the RPC for example. - if tx.Amount.Cmp(common.Big0) < 0 { + if tx.Value().Cmp(common.Big0) < 0 { return ErrNegativeValue } // Transactor should have enough funds to cover the costs // cost == V + GP * GL - total := new(big.Int).Mul(tx.Price, tx.GasLimit) - total.Add(total, tx.Value()) - if pool.currentState().GetBalance(from).Cmp(total) < 0 { + if pool.currentState().GetBalance(from).Cmp(tx.Cost()) < 0 { return ErrInsufficientFunds } // Should supply enough intrinsic gas - if tx.GasLimit.Cmp(IntrinsicGas(tx)) < 0 { + if tx.Gas().Cmp(IntrinsicGas(tx)) < 0 { return ErrIntrinsicGas } @@ -238,7 +236,7 @@ func (pool *TxPool) addTx(hash common.Hash, addr common.Address, tx *types.Trans // Increment the nonce on the pending state. This can only happen if // the nonce is +1 to the previous one. - pool.pendingState.SetNonce(addr, tx.AccountNonce+1) + pool.pendingState.SetNonce(addr, tx.Nonce()+1) // Notify the subscribers. This event is posted in a goroutine // because it's possible that somewhere during the post "Remove transaction" // gets called which will then wait for the global tx pool lock and deadlock. @@ -341,7 +339,7 @@ func (pool *TxPool) checkQueue() { trueNonce := pool.currentState().GetNonce(address) addq := addq[:0] for hash, tx := range txs { - if tx.AccountNonce < trueNonce { + if tx.Nonce() < trueNonce { // Drop queued transactions whose nonce is lower than // the account nonce because they have been processed. delete(txs, hash) @@ -362,8 +360,7 @@ func (pool *TxPool) checkQueue() { delete(pool.queue[address], e.hash) continue } - - if e.AccountNonce > guessedNonce { + if e.Nonce() > guessedNonce { break } delete(txs, e.hash) @@ -418,4 +415,4 @@ type txQueueEntry struct { func (q txQueue) Len() int { return len(q) } func (q txQueue) Swap(i, j int) { q[i], q[j] = q[j], q[i] } -func (q txQueue) Less(i, j int) bool { return q[i].AccountNonce < q[j].AccountNonce } +func (q txQueue) Less(i, j int) bool { return q[i].Nonce() < q[j].Nonce() } diff --git a/core/transaction_pool_test.go b/core/transaction_pool_test.go index b763c196d0..ff8b9c730f 100644 --- a/core/transaction_pool_test.go +++ b/core/transaction_pool_test.go @@ -13,8 +13,9 @@ import ( "github.com/ethereum/go-ethereum/event" ) -func transaction() *types.Transaction { - return types.NewTransactionMessage(common.Address{}, big.NewInt(100), big.NewInt(100), big.NewInt(100), nil) +func transaction(nonce uint64, gaslimit *big.Int, key *ecdsa.PrivateKey) *types.Transaction { + tx, _ := types.NewTransaction(nonce, common.Address{}, big.NewInt(100), gaslimit, big.NewInt(1), nil).SignECDSA(key) + return tx } func setupTxPool() (*TxPool, *ecdsa.PrivateKey) { @@ -29,43 +30,34 @@ func setupTxPool() (*TxPool, *ecdsa.PrivateKey) { func TestInvalidTransactions(t *testing.T) { pool, key := setupTxPool() - tx := transaction() - tx.SignECDSA(key) - err := pool.Add(tx) - if err != ErrNonExistentAccount { + tx := transaction(0, big.NewInt(100), key) + if err := pool.Add(tx); err != ErrNonExistentAccount { t.Error("expected", ErrNonExistentAccount) } from, _ := tx.From() pool.currentState().AddBalance(from, big.NewInt(1)) - err = pool.Add(tx) - if err != ErrInsufficientFunds { + if err := pool.Add(tx); err != ErrInsufficientFunds { t.Error("expected", ErrInsufficientFunds) } balance := new(big.Int).Add(tx.Value(), new(big.Int).Mul(tx.Gas(), tx.GasPrice())) pool.currentState().AddBalance(from, balance) - err = pool.Add(tx) - if err != ErrIntrinsicGas { + if err := pool.Add(tx); err != ErrIntrinsicGas { t.Error("expected", ErrIntrinsicGas, "got", err) } pool.currentState().SetNonce(from, 1) pool.currentState().AddBalance(from, big.NewInt(0xffffffffffffff)) - tx.GasLimit = big.NewInt(100000) - tx.Price = big.NewInt(1) - tx.SignECDSA(key) - - err = pool.Add(tx) - if err != ErrNonce { + tx = transaction(0, big.NewInt(100000), key) + if err := pool.Add(tx); err != ErrNonce { t.Error("expected", ErrNonce) } } func TestTransactionQueue(t *testing.T) { pool, key := setupTxPool() - tx := transaction() - tx.SignECDSA(key) + tx := transaction(0, big.NewInt(100), key) from, _ := tx.From() pool.currentState().AddBalance(from, big.NewInt(1)) pool.queueTx(tx.Hash(), tx) @@ -75,9 +67,7 @@ func TestTransactionQueue(t *testing.T) { t.Error("expected valid txs to be 1 is", len(pool.pending)) } - tx = transaction() - tx.SetNonce(1) - tx.SignECDSA(key) + tx = transaction(1, big.NewInt(100), key) from, _ = tx.From() pool.currentState().SetNonce(from, 2) pool.queueTx(tx.Hash(), tx) @@ -91,12 +81,9 @@ func TestTransactionQueue(t *testing.T) { } pool, key = setupTxPool() - tx1, tx2, tx3 := transaction(), transaction(), transaction() - tx2.SetNonce(10) - tx3.SetNonce(11) - tx1.SignECDSA(key) - tx2.SignECDSA(key) - tx3.SignECDSA(key) + tx1 := transaction(0, big.NewInt(100), key) + tx2 := transaction(10, big.NewInt(100), key) + tx3 := transaction(11, big.NewInt(100), key) pool.queueTx(tx1.Hash(), tx1) pool.queueTx(tx2.Hash(), tx2) pool.queueTx(tx3.Hash(), tx3) @@ -114,8 +101,7 @@ func TestTransactionQueue(t *testing.T) { func TestRemoveTx(t *testing.T) { pool, key := setupTxPool() - tx := transaction() - tx.SignECDSA(key) + tx := transaction(0, big.NewInt(100), key) from, _ := tx.From() pool.currentState().AddBalance(from, big.NewInt(1)) pool.queueTx(tx.Hash(), tx) @@ -142,13 +128,10 @@ func TestRemoveTx(t *testing.T) { func TestNegativeValue(t *testing.T) { pool, key := setupTxPool() - tx := transaction() - tx.Value().Set(big.NewInt(-1)) - tx.SignECDSA(key) + tx, _ := types.NewTransaction(0, common.Address{}, big.NewInt(-1), big.NewInt(100), big.NewInt(1), nil).SignECDSA(key) from, _ := tx.From() pool.currentState().AddBalance(from, big.NewInt(1)) - err := pool.Add(tx) - if err != ErrNegativeValue { + if err := pool.Add(tx); err != ErrNegativeValue { t.Error("expected", ErrNegativeValue, "got", err) } } @@ -165,20 +148,15 @@ func TestTransactionChainFork(t *testing.T) { } resetState() - tx := transaction() - tx.GasLimit = big.NewInt(100000) - tx.SignECDSA(key) - - err := pool.add(tx) - if err != nil { + tx := transaction(0, big.NewInt(100000), key) + if err := pool.add(tx); err != nil { t.Error("didn't expect error", err) } pool.RemoveTransactions([]*types.Transaction{tx}) // reset the pool's internal state resetState() - err = pool.add(tx) - if err != nil { + if err := pool.add(tx); err != nil { t.Error("didn't expect error", err) } } @@ -195,24 +173,14 @@ func TestTransactionDoubleNonce(t *testing.T) { } resetState() - tx := transaction() - tx.GasLimit = big.NewInt(100000) - tx.SignECDSA(key) - - err := pool.add(tx) - if err != nil { + tx := transaction(0, big.NewInt(100000), key) + tx2 := transaction(0, big.NewInt(1000000), key) + if err := pool.add(tx); err != nil { t.Error("didn't expect error", err) } - - tx2 := transaction() - tx2.GasLimit = big.NewInt(1000000) - tx2.SignECDSA(key) - - err = pool.add(tx2) - if err != nil { + if err := pool.add(tx2); err != nil { t.Error("didn't expect error", err) } - if len(pool.pending) != 2 { t.Error("expected 2 pending txs. Got", len(pool.pending)) } @@ -222,20 +190,13 @@ func TestMissingNonce(t *testing.T) { pool, key := setupTxPool() addr := crypto.PubkeyToAddress(key.PublicKey) pool.currentState().AddBalance(addr, big.NewInt(100000000000000)) - tx := transaction() - tx.AccountNonce = 1 - tx.GasLimit = big.NewInt(100000) - tx.SignECDSA(key) - - err := pool.add(tx) - if err != nil { + tx := transaction(1, big.NewInt(100000), key) + if err := pool.add(tx); err != nil { t.Error("didn't expect error", err) } - if len(pool.pending) != 0 { t.Error("expected 0 pending transactions, got", len(pool.pending)) } - if len(pool.queue[addr]) != 1 { t.Error("expected 1 queued transaction, got", len(pool.queue[addr])) } diff --git a/core/types/block_test.go b/core/types/block_test.go index b52ddffdc1..03e6881beb 100644 --- a/core/types/block_test.go +++ b/core/types/block_test.go @@ -13,7 +13,6 @@ import ( // from bcValidBlockTest.json, "SimpleTx" func TestBlockEncoding(t *testing.T) { blockEnc := common.FromHex("f90260f901f9a083cafc574e1f51ba9dc0568fc617a08ea2429fb384059c972f13b19fa1c8dd55a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0ef1552a40b7165c3cd773806b9e0c165b75356e0314bf0706f279c729f51e017a05fe50b260da6308036625b850b5d6ced6d0a9f814c0688bc91ffb7b7a3a54b67a0bc37d79753ad738a6dac4921e57392f145d8887476de3f783dfa7edae9283e52b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000001832fefd8825208845506eb0780a0bd4472abb6659ebe3ee06ee4d7b72a00a9f4d001caca51342001075469aff49888a13a5a8c8f2bb1c4f861f85f800a82c35094095e7baea6a6c7c4c2dfeb977efac326af552d870a801ba09bea4c4daac7c7c52e093e6a4c35dbbcf8856f1af7b059ba20253e70848d094fa08a8fae537ce25ed8cb5af9adac3f141af69bd515bd2ba031522df09b97dd72b1c0") - var block Block if err := rlp.DecodeBytes(blockEnc, &block); err != nil { t.Fatal("decode error: ", err) @@ -35,20 +34,10 @@ func TestBlockEncoding(t *testing.T) { check("Time", block.Time(), int64(1426516743)) check("Size", block.Size(), common.StorageSize(len(blockEnc))) - to := common.HexToAddress("095e7baea6a6c7c4c2dfeb977efac326af552d87") - check("Transactions", block.Transactions(), Transactions{ - { - Payload: []byte{}, - Amount: big.NewInt(10), - Price: big.NewInt(10), - GasLimit: big.NewInt(50000), - AccountNonce: 0, - V: 27, - R: common.String2Big("0x9bea4c4daac7c7c52e093e6a4c35dbbcf8856f1af7b059ba20253e70848d094f"), - S: common.String2Big("0x8a8fae537ce25ed8cb5af9adac3f141af69bd515bd2ba031522df09b97dd72b1"), - Recipient: &to, - }, - }) + tx1 := NewTransaction(0, common.HexToAddress("095e7baea6a6c7c4c2dfeb977efac326af552d87"), big.NewInt(10), big.NewInt(50000), big.NewInt(10), nil) + tx1, _ = tx1.WithSignature(common.Hex2Bytes("9bea4c4daac7c7c52e093e6a4c35dbbcf8856f1af7b059ba20253e70848d094f8a8fae537ce25ed8cb5af9adac3f141af69bd515bd2ba031522df09b97dd72b100")) + check("len(Transactions)", len(block.Transactions()), 1) + check("Transactions[0].Hash", block.Transactions()[0].Hash(), tx1.Hash()) ourBlockEnc, err := rlp.EncodeToBytes(&block) if err != nil { diff --git a/core/types/transaction.go b/core/types/transaction.go index a03a6b847e..14b0e4174d 100644 --- a/core/types/transaction.go +++ b/core/types/transaction.go @@ -4,6 +4,7 @@ import ( "crypto/ecdsa" "errors" "fmt" + "io" "math/big" "github.com/ethereum/go-ethereum/common" @@ -18,38 +19,59 @@ func IsContractAddr(addr []byte) bool { } type Transaction struct { - AccountNonce uint64 - Price *big.Int - GasLimit *big.Int - Recipient *common.Address `rlp:"nil"` // nil means contract creation - Amount *big.Int - Payload []byte - V byte - R, S *big.Int + data txdata } -func NewContractCreationTx(amount, gasLimit, gasPrice *big.Int, data []byte) *Transaction { - return &Transaction{ - Recipient: nil, - Amount: amount, - GasLimit: gasLimit, - Price: gasPrice, - Payload: data, - R: new(big.Int), - S: new(big.Int), - } +type txdata struct { + AccountNonce uint64 + Price, GasLimit *big.Int + Recipient *common.Address `rlp:"nil"` // nil means contract creation + Amount *big.Int + Payload []byte + V byte // signature + R, S *big.Int // signature } -func NewTransactionMessage(to common.Address, amount, gasAmount, gasPrice *big.Int, data []byte) *Transaction { - return &Transaction{ - Recipient: &to, - Amount: amount, - GasLimit: gasAmount, - Price: gasPrice, - Payload: data, - R: new(big.Int), - S: new(big.Int), +func NewContractCreation(nonce uint64, amount, gasLimit, gasPrice *big.Int, data []byte) *Transaction { + if len(data) > 0 { + data = common.CopyBytes(data) } + return &Transaction{data: txdata{ + AccountNonce: nonce, + Recipient: nil, + Amount: new(big.Int).Set(amount), + GasLimit: new(big.Int).Set(gasLimit), + Price: new(big.Int).Set(gasPrice), + Payload: data, + R: new(big.Int), + S: new(big.Int), + }} +} + +func NewTransaction(nonce uint64, to common.Address, amount, gasLimit, gasPrice *big.Int, data []byte) *Transaction { + if len(data) > 0 { + data = common.CopyBytes(data) + } + d := txdata{ + AccountNonce: nonce, + Recipient: &to, + Payload: data, + Amount: new(big.Int), + GasLimit: new(big.Int), + Price: new(big.Int), + R: new(big.Int), + S: new(big.Int), + } + if amount != nil { + d.Amount.Set(amount) + } + if gasLimit != nil { + d.GasLimit.Set(gasLimit) + } + if gasPrice != nil { + d.Price.Set(gasPrice) + } + return &Transaction{data: d} } func NewTransactionFromBytes(data []byte) *Transaction { @@ -61,112 +83,110 @@ func NewTransactionFromBytes(data []byte) *Transaction { return tx } +func (tx *Transaction) EncodeRLP(w io.Writer) error { + return rlp.Encode(w, &tx.data) +} + +func (tx *Transaction) DecodeRLP(s *rlp.Stream) error { + return s.Decode(&tx.data) +} + +func (tx *Transaction) Data() []byte { return common.CopyBytes(tx.data.Payload) } +func (tx *Transaction) Gas() *big.Int { return new(big.Int).Set(tx.data.GasLimit) } +func (tx *Transaction) GasPrice() *big.Int { return new(big.Int).Set(tx.data.Price) } +func (tx *Transaction) Value() *big.Int { return new(big.Int).Set(tx.data.Amount) } +func (tx *Transaction) Nonce() uint64 { return tx.data.AccountNonce } + +func (tx *Transaction) To() *common.Address { + if tx.data.Recipient == nil { + return nil + } else { + to := *tx.data.Recipient + return &to + } +} + func (tx *Transaction) Hash() common.Hash { - return rlpHash([]interface{}{ - tx.AccountNonce, tx.Price, tx.GasLimit, tx.Recipient, tx.Amount, tx.Payload, + v := rlpHash([]interface{}{ + tx.data.AccountNonce, + tx.data.Price, + tx.data.GasLimit, + tx.data.Recipient, + tx.data.Amount, + tx.data.Payload, }) + return v } -// Size returns the encoded RLP size of tx. -func (self *Transaction) Size() common.StorageSize { - c := writeCounter(0) - rlp.Encode(&c, self) - return common.StorageSize(c) +func (tx *Transaction) Size() common.StorageSize { + v, _, _ := rlp.EncodeToReader(&tx.data) + return common.StorageSize(v) } -func (self *Transaction) Data() []byte { - return self.Payload -} - -func (self *Transaction) Gas() *big.Int { - return self.GasLimit -} - -func (self *Transaction) GasPrice() *big.Int { - return self.Price -} - -func (self *Transaction) Value() *big.Int { - return self.Amount -} - -func (self *Transaction) Nonce() uint64 { - return self.AccountNonce -} - -func (self *Transaction) SetNonce(AccountNonce uint64) { - self.AccountNonce = AccountNonce -} - -func (self *Transaction) From() (common.Address, error) { - pubkey, err := self.PublicKey() +func (tx *Transaction) From() (common.Address, error) { + pubkey, err := tx.PublicKey() if err != nil { return common.Address{}, err } - var addr common.Address copy(addr[:], crypto.Sha3(pubkey[1:])[12:]) return addr, nil } -// To returns the recipient of the transaction. -// If transaction is a contract creation (with no recipient address) -// To returns nil. -func (tx *Transaction) To() *common.Address { - return tx.Recipient +// Cost returns amount + gasprice * gaslimit. +func (tx *Transaction) Cost() *big.Int { + total := new(big.Int).Mul(tx.data.Price, tx.data.GasLimit) + total.Add(total, tx.data.Amount) + return total } -func (tx *Transaction) GetSignatureValues() (v byte, r []byte, s []byte) { - v = byte(tx.V) - r = common.LeftPadBytes(tx.R.Bytes(), 32) - s = common.LeftPadBytes(tx.S.Bytes(), 32) - return +func (tx *Transaction) SignatureValues() (v byte, r *big.Int, s *big.Int) { + return tx.data.V, new(big.Int).Set(tx.data.R), new(big.Int).Set(tx.data.S) } func (tx *Transaction) PublicKey() ([]byte, error) { - if !crypto.ValidateSignatureValues(tx.V, tx.R, tx.S) { + if !crypto.ValidateSignatureValues(tx.data.V, tx.data.R, tx.data.S) { return nil, errors.New("invalid v, r, s values") } - hash := tx.Hash() - v, r, s := tx.GetSignatureValues() - sig := append(r, s...) - sig = append(sig, v-27) + // encode the signature in uncompressed format + r, s := tx.data.R.Bytes(), tx.data.S.Bytes() + sig := make([]byte, 65) + copy(sig[32-len(r):32], r) + copy(sig[64-len(s):64], s) + sig[64] = tx.data.V - 27 - p, err := crypto.SigToPub(hash[:], sig) + // recover the public key from the signature + hash := tx.Hash() + pub, err := crypto.Ecrecover(hash[:], sig) if err != nil { glog.V(logger.Error).Infof("Could not get pubkey from signature: ", err) return nil, err } - - pubkey := crypto.FromECDSAPub(p) - if len(pubkey) == 0 || pubkey[0] != 4 { + if len(pub) == 0 || pub[0] != 4 { return nil, errors.New("invalid public key") } - return pubkey, nil + return pub, nil } -func (tx *Transaction) SetSignatureValues(sig []byte) error { - tx.R = common.Bytes2Big(sig[:32]) - tx.S = common.Bytes2Big(sig[32:64]) - tx.V = sig[64] + 27 - return nil +func (tx *Transaction) WithSignature(sig []byte) (*Transaction, error) { + if len(sig) != 65 { + panic(fmt.Sprintf("wrong size for signature: got %d, want 65", len(sig))) + } + cpy := &Transaction{data: tx.data} + cpy.data.R = new(big.Int).SetBytes(sig[:32]) + cpy.data.S = new(big.Int).SetBytes(sig[32:64]) + cpy.data.V = sig[64] + 27 + return cpy, nil } -func (tx *Transaction) SignECDSA(prv *ecdsa.PrivateKey) error { +func (tx *Transaction) SignECDSA(prv *ecdsa.PrivateKey) (*Transaction, error) { h := tx.Hash() sig, err := crypto.Sign(h[:], prv) if err != nil { - return err + return nil, err } - tx.SetSignatureValues(sig) - return nil -} - -// TODO: remove -func (tx *Transaction) RlpData() interface{} { - data := []interface{}{tx.AccountNonce, tx.Price, tx.GasLimit, tx.Recipient, tx.Amount, tx.Payload} - return append(data, tx.V, tx.R.Bytes(), tx.S.Bytes()) + return tx.WithSignature(sig) } func (tx *Transaction) String() string { @@ -176,12 +196,12 @@ func (tx *Transaction) String() string { } else { from = fmt.Sprintf("%x", f[:]) } - if t := tx.To(); t == nil { + if tx.data.Recipient == nil { to = "[contract creation]" } else { - to = fmt.Sprintf("%x", t[:]) + to = fmt.Sprintf("%x", tx.data.Recipient[:]) } - enc, _ := rlp.EncodeToBytes(tx) + enc, _ := rlp.EncodeToBytes(&tx.data) return fmt.Sprintf(` TX(%x) Contract: %v @@ -198,36 +218,24 @@ func (tx *Transaction) String() string { Hex: %x `, tx.Hash(), - len(tx.Recipient) == 0, + len(tx.data.Recipient) == 0, from, to, - tx.AccountNonce, - tx.Price, - tx.GasLimit, - tx.Amount, - tx.Payload, - tx.V, - tx.R, - tx.S, + tx.data.AccountNonce, + tx.data.Price, + tx.data.GasLimit, + tx.data.Amount, + tx.data.Payload, + tx.data.V, + tx.data.R, + tx.data.S, enc, ) } -// Transaction slice type for basic sorting +// Transaction slice type for basic sorting. type Transactions []*Transaction -// TODO: remove -func (self Transactions) RlpData() interface{} { - // Marshal the transactions of this block - enc := make([]interface{}, len(self)) - for i, tx := range self { - // Cast it to a string (safe) - enc[i] = tx.RlpData() - } - - return enc -} - func (s Transactions) Len() int { return len(s) } func (s Transactions) Swap(i, j int) { s[i], s[j] = s[j], s[i] } @@ -239,5 +247,5 @@ func (s Transactions) GetRlp(i int) []byte { type TxByNonce struct{ Transactions } func (s TxByNonce) Less(i, j int) bool { - return s.Transactions[i].AccountNonce < s.Transactions[j].AccountNonce + return s.Transactions[i].data.AccountNonce < s.Transactions[j].data.AccountNonce } diff --git a/core/types/transaction_test.go b/core/types/transaction_test.go index 492059c28a..dd9c5e87b0 100644 --- a/core/types/transaction_test.go +++ b/core/types/transaction_test.go @@ -15,40 +15,35 @@ import ( // at github.com/ethereum/tests. var ( - emptyTx = NewTransactionMessage( + emptyTx = NewTransaction( + 0, common.HexToAddress("095e7baea6a6c7c4c2dfeb977efac326af552d87"), big.NewInt(0), big.NewInt(0), big.NewInt(0), nil, ) - rightvrsRecipient = common.HexToAddress("b94f5374fce5edbc8e2a8697c15331677e6ebf0b") - rightvrsTx = &Transaction{ - Recipient: &rightvrsRecipient, - AccountNonce: 3, - Price: big.NewInt(1), - GasLimit: big.NewInt(2000), - Amount: big.NewInt(10), - Payload: common.FromHex("5544"), - V: 28, - R: common.String2Big("0x98ff921201554726367d2be8c804a7ff89ccf285ebc57dff8ae4c44b9c19ac4a"), - S: common.String2Big("0x8887321be575c8095f789dd4c743dfe42c1820f9231f98a962b210e3ac2452a3"), - } + rightvrsTx, _ = NewTransaction( + 3, + common.HexToAddress("b94f5374fce5edbc8e2a8697c15331677e6ebf0b"), + big.NewInt(10), + big.NewInt(2000), + big.NewInt(1), + common.FromHex("5544"), + ).WithSignature( + common.Hex2Bytes("98ff921201554726367d2be8c804a7ff89ccf285ebc57dff8ae4c44b9c19ac4a8887321be575c8095f789dd4c743dfe42c1820f9231f98a962b210e3ac2452a301"), + ) ) func TestTransactionHash(t *testing.T) { - // "EmptyTransaction" if emptyTx.Hash() != common.HexToHash("c775b99e7ad12f50d819fcd602390467e28141316969f4b57f0626f74fe3b386") { t.Errorf("empty transaction hash mismatch, got %x", emptyTx.Hash()) } - - // "RightVRSTest" if rightvrsTx.Hash() != common.HexToHash("fe7a79529ed5f7c3375d06b26b186a8644e0e16c373d7a12be41c62d6042b77a") { t.Errorf("RightVRS transaction hash mismatch, got %x", rightvrsTx.Hash()) } } func TestTransactionEncode(t *testing.T) { - // "RightVRSTest" txb, err := rlp.EncodeToBytes(rightvrsTx) if err != nil { t.Fatalf("encode error: %v", err) @@ -72,19 +67,16 @@ func defaultTestKey() (*ecdsa.PrivateKey, common.Address) { func TestRecipientEmpty(t *testing.T) { _, addr := defaultTestKey() - tx, err := decodeTx(common.Hex2Bytes("f8498080808080011ca09b16de9d5bdee2cf56c28d16275a4da68cd30273e2525f3959f5d62557489921a0372ebd8fb3345f7db7b5a86d42e24d36e983e259b0664ceb8c227ec9af572f3d")) if err != nil { t.Error(err) t.FailNow() } - from, err := tx.From() if err != nil { t.Error(err) t.FailNow() } - if addr != from { t.Error("derived address doesn't match") } diff --git a/eth/protocol_test.go b/eth/protocol_test.go index 6e0eef59c9..60fa354436 100644 --- a/eth/protocol_test.go +++ b/eth/protocol_test.go @@ -234,7 +234,7 @@ func (pool *fakeTxPool) GetTransactions() types.Transactions { func newtx(from *crypto.Key, nonce uint64, datasize int) *types.Transaction { data := make([]byte, datasize) - tx := types.NewTransactionMessage(common.Address{}, big.NewInt(0), big.NewInt(100000), big.NewInt(0), data) - tx.SetNonce(nonce) + tx := types.NewTransaction(nonce, common.Address{}, big.NewInt(0), big.NewInt(100000), big.NewInt(0), data) + tx, _ = tx.SignECDSA(from.PrivateKey) return tx } diff --git a/tests/transaction_test_util.go b/tests/transaction_test_util.go index 45caf26fda..1c92090dbb 100644 --- a/tests/transaction_test_util.go +++ b/tests/transaction_test_util.go @@ -152,54 +152,53 @@ func verifyTxFields(txTest TransactionTest, decodedTx *types.Transaction) (err e } expectedData := mustConvertBytes(txTest.Transaction.Data) - if !bytes.Equal(expectedData, decodedTx.Payload) { - return fmt.Errorf("Tx input data mismatch: %#v %#v", expectedData, decodedTx.Payload) + if !bytes.Equal(expectedData, decodedTx.Data()) { + return fmt.Errorf("Tx input data mismatch: %#v %#v", expectedData, decodedTx.Data()) } expectedGasLimit := mustConvertBigInt(txTest.Transaction.GasLimit, 16) - if expectedGasLimit.Cmp(decodedTx.GasLimit) != 0 { - return fmt.Errorf("GasLimit mismatch: %v %v", expectedGasLimit, decodedTx.GasLimit) + if expectedGasLimit.Cmp(decodedTx.Gas()) != 0 { + return fmt.Errorf("GasLimit mismatch: %v %v", expectedGasLimit, decodedTx.Gas()) } expectedGasPrice := mustConvertBigInt(txTest.Transaction.GasPrice, 16) - if expectedGasPrice.Cmp(decodedTx.Price) != 0 { - return fmt.Errorf("GasPrice mismatch: %v %v", expectedGasPrice, decodedTx.Price) + if expectedGasPrice.Cmp(decodedTx.GasPrice()) != 0 { + return fmt.Errorf("GasPrice mismatch: %v %v", expectedGasPrice, decodedTx.GasPrice()) } expectedNonce := mustConvertUint(txTest.Transaction.Nonce, 16) - if expectedNonce != decodedTx.AccountNonce { - return fmt.Errorf("Nonce mismatch: %v %v", expectedNonce, decodedTx.AccountNonce) + if expectedNonce != decodedTx.Nonce() { + return fmt.Errorf("Nonce mismatch: %v %v", expectedNonce, decodedTx.Nonce()) } - expectedR := common.Bytes2Big(mustConvertBytes(txTest.Transaction.R)) - if expectedR.Cmp(decodedTx.R) != 0 { - return fmt.Errorf("R mismatch: %v %v", expectedR, decodedTx.R) + v, r, s := decodedTx.SignatureValues() + expectedR := mustConvertBigInt(txTest.Transaction.R, 16) + if r.Cmp(expectedR) != 0 { + return fmt.Errorf("R mismatch: %v %v", expectedR, r) } - - expectedS := common.Bytes2Big(mustConvertBytes(txTest.Transaction.S)) - if expectedS.Cmp(decodedTx.S) != 0 { - return fmt.Errorf("S mismatch: %v %v", expectedS, decodedTx.S) + expectedS := mustConvertBigInt(txTest.Transaction.S, 16) + if s.Cmp(expectedS) != 0 { + return fmt.Errorf("S mismatch: %v %v", expectedS, s) } - expectedV := mustConvertUint(txTest.Transaction.V, 16) - if expectedV != uint64(decodedTx.V) { - return fmt.Errorf("V mismatch: %v %v", expectedV, uint64(decodedTx.V)) + if uint64(v) != expectedV { + return fmt.Errorf("V mismatch: %v %v", expectedV, v) } expectedTo := mustConvertAddress(txTest.Transaction.To) - if decodedTx.Recipient == nil { + if decodedTx.To() == nil { if expectedTo != common.BytesToAddress([]byte{}) { // "empty" or "zero" address return fmt.Errorf("To mismatch when recipient is nil (contract creation): %v", expectedTo) } } else { - if expectedTo != *decodedTx.Recipient { - return fmt.Errorf("To mismatch: %v %v", expectedTo, *decodedTx.Recipient) + if expectedTo != *decodedTx.To() { + return fmt.Errorf("To mismatch: %v %v", expectedTo, *decodedTx.To()) } } expectedValue := mustConvertBigInt(txTest.Transaction.Value, 16) - if expectedValue.Cmp(decodedTx.Amount) != 0 { - return fmt.Errorf("Value mismatch: %v %v", expectedValue, decodedTx.Amount) + if expectedValue.Cmp(decodedTx.Value()) != 0 { + return fmt.Errorf("Value mismatch: %v %v", expectedValue, decodedTx.Value()) } return nil diff --git a/xeth/xeth.go b/xeth/xeth.go index 99e17423ad..11d30ebaca 100644 --- a/xeth/xeth.go +++ b/xeth/xeth.go @@ -946,51 +946,45 @@ func (self *XEth) Transact(fromStr, toStr, nonceStr, valueStr, gasStr, gasPriceS // TODO: align default values to have the same type, e.g. not depend on // common.Value conversions later on - - var tx *types.Transaction - if contractCreation { - tx = types.NewContractCreationTx(value, gas, price, data) - } else { - tx = types.NewTransactionMessage(to, value, gas, price, data) - } - - state := self.backend.TxPool().State() - var nonce uint64 if len(nonceStr) != 0 { nonce = common.Big(nonceStr).Uint64() } else { + state := self.backend.TxPool().State() nonce = state.GetNonce(from) } - tx.SetNonce(nonce) + var tx *types.Transaction + if contractCreation { + tx = types.NewContractCreation(nonce, value, gas, price, data) + } else { + tx = types.NewTransaction(nonce, to, value, gas, price, data) + } - if err := self.sign(tx, from, false); err != nil { + signed, err := self.sign(tx, from, false) + if err != nil { return "", err } - if err := self.backend.TxPool().Add(tx); err != nil { + if err = self.backend.TxPool().Add(signed); err != nil { return "", err } - //state.SetNonce(from, nonce+1) if contractCreation { addr := core.AddressFromMessage(tx) glog.V(logger.Info).Infof("Tx(%x) created: %x\n", tx.Hash(), addr) - - return core.AddressFromMessage(tx).Hex(), nil + return addr.Hex(), nil } else { glog.V(logger.Info).Infof("Tx(%x) to: %x\n", tx.Hash(), tx.To()) } return tx.Hash().Hex(), nil } -func (self *XEth) sign(tx *types.Transaction, from common.Address, didUnlock bool) error { +func (self *XEth) sign(tx *types.Transaction, from common.Address, didUnlock bool) (*types.Transaction, error) { hash := tx.Hash() sig, err := self.doSign(from, hash, didUnlock) if err != nil { - return err + return tx, err } - tx.SetSignatureValues(sig) - return nil + return tx.WithSignature(sig) } // callmsg is the message type used for call transations. From 1d42888d3047dabfb352c94a2051e7af14d2a509 Mon Sep 17 00:00:00 2001 From: Felix Lange <fjl@twurst.com> Date: Tue, 16 Jun 2015 12:41:50 +0200 Subject: [PATCH 082/156] core/types: make blocks immutable --- core/block_cache_test.go | 6 +- core/block_processor.go | 95 +++---- core/block_processor_test.go | 16 +- core/chain_makers.go | 58 ++-- core/chain_manager.go | 94 ++----- core/chain_manager_test.go | 34 +-- core/genesis.go | 37 +-- core/state_transition.go | 9 +- core/transaction_pool.go | 2 +- core/types/block.go | 437 +++++++++++++----------------- core/vm_env.go | 34 +-- eth/downloader/downloader_test.go | 5 +- miner/agent.go | 6 +- miner/remote_agent.go | 4 +- miner/worker.go | 186 ++++++------- tests/block_test_util.go | 11 +- xeth/xeth.go | 10 +- 17 files changed, 457 insertions(+), 587 deletions(-) diff --git a/core/block_cache_test.go b/core/block_cache_test.go index 43ab847f97..80d1185993 100644 --- a/core/block_cache_test.go +++ b/core/block_cache_test.go @@ -11,12 +11,12 @@ import ( func newChain(size int) (chain []*types.Block) { var parentHash common.Hash for i := 0; i < size; i++ { - block := types.NewBlock(parentHash, common.Address{}, common.Hash{}, new(big.Int), 0, nil) - block.Header().Number = big.NewInt(int64(i)) + head := &types.Header{ParentHash: parentHash, Number: big.NewInt(int64(i))} + block := types.NewBlock(head, nil, nil, nil) chain = append(chain, block) parentHash = block.Hash() } - return + return chain } func insertChainCache(cache *BlockCache, chain []*types.Block) { diff --git a/core/block_processor.go b/core/block_processor.go index e30ced3128..2fd8c04c02 100644 --- a/core/block_processor.go +++ b/core/block_processor.go @@ -57,8 +57,8 @@ func NewBlockProcessor(db, extra common.Database, pow pow.PoW, chainManager *Cha } func (sm *BlockProcessor) TransitionState(statedb *state.StateDB, parent, block *types.Block, transientProcess bool) (receipts types.Receipts, err error) { - coinbase := statedb.GetOrNewStateObject(block.Header().Coinbase) - coinbase.SetGasLimit(block.Header().GasLimit) + coinbase := statedb.GetOrNewStateObject(block.Coinbase()) + coinbase.SetGasLimit(block.GasLimit()) // Process the transactions on to parent state receipts, err = sm.ApplyTransactions(coinbase, statedb, block, block.Transactions(), transientProcess) @@ -69,11 +69,11 @@ func (sm *BlockProcessor) TransitionState(statedb *state.StateDB, parent, block return receipts, nil } -func (self *BlockProcessor) ApplyTransaction(coinbase *state.StateObject, statedb *state.StateDB, block *types.Block, tx *types.Transaction, usedGas *big.Int, transientProcess bool) (*types.Receipt, *big.Int, error) { +func (self *BlockProcessor) ApplyTransaction(coinbase *state.StateObject, statedb *state.StateDB, header *types.Header, tx *types.Transaction, usedGas *big.Int, transientProcess bool) (*types.Receipt, *big.Int, error) { // If we are mining this block and validating we want to set the logs back to 0 cb := statedb.GetStateObject(coinbase.Address()) - _, gas, err := ApplyMessage(NewEnv(statedb, self.bc, tx, block), tx, cb) + _, gas, err := ApplyMessage(NewEnv(statedb, self.bc, tx, header), tx, cb) if err != nil && (IsNonceErr(err) || state.IsGasLimitErr(err) || IsInvalidTxErr(err)) { return nil, nil, err } @@ -108,12 +108,13 @@ func (self *BlockProcessor) ApplyTransactions(coinbase *state.StateObject, state totalUsedGas = big.NewInt(0) err error cumulativeSum = new(big.Int) + header = block.Header() ) for i, tx := range txs { statedb.StartRecord(tx.Hash(), block.Hash(), i) - receipt, txGas, err := self.ApplyTransaction(coinbase, statedb, block, tx, totalUsedGas, transientProcess) + receipt, txGas, err := self.ApplyTransaction(coinbase, statedb, header, tx, totalUsedGas, transientProcess) if err != nil && (IsNonceErr(err) || state.IsGasLimitErr(err) || IsInvalidTxErr(err)) { return nil, err } @@ -142,11 +143,10 @@ func (sm *BlockProcessor) RetryProcess(block *types.Block) (logs state.Logs, err sm.mutex.Lock() defer sm.mutex.Unlock() - header := block.Header() - if !sm.bc.HasBlock(header.ParentHash) { - return nil, ParentError(header.ParentHash) + if !sm.bc.HasBlock(block.ParentHash()) { + return nil, ParentError(block.ParentHash()) } - parent := sm.bc.GetBlock(header.ParentHash) + parent := sm.bc.GetBlock(block.ParentHash()) // FIXME Change to full header validation. See #1225 errch := make(chan bool) @@ -168,30 +168,32 @@ func (sm *BlockProcessor) Process(block *types.Block) (logs state.Logs, err erro sm.mutex.Lock() defer sm.mutex.Unlock() - header := block.Header() - if sm.bc.HasBlock(header.Hash()) { - return nil, &KnownBlockError{header.Number, header.Hash()} + if sm.bc.HasBlock(block.Hash()) { + return nil, &KnownBlockError{block.Number(), block.Hash()} } - if !sm.bc.HasBlock(header.ParentHash) { - return nil, ParentError(header.ParentHash) + if !sm.bc.HasBlock(block.ParentHash()) { + return nil, ParentError(block.ParentHash()) } - parent := sm.bc.GetBlock(header.ParentHash) + parent := sm.bc.GetBlock(block.ParentHash()) return sm.processWithParent(block, parent) } func (sm *BlockProcessor) processWithParent(block, parent *types.Block) (logs state.Logs, err error) { // Create a new state based on the parent's root (e.g., create copy) state := state.New(parent.Root(), sm.db) + header := block.Header() + uncles := block.Uncles() + txs := block.Transactions() // Block validation - if err = ValidateHeader(sm.Pow, block.Header(), parent.Header(), false); err != nil { + if err = ValidateHeader(sm.Pow, header, parent.Header(), false); err != nil { return } // There can be at most two uncles - if len(block.Uncles()) > 2 { - return nil, ValidationError("Block can only contain maximum 2 uncles (contained %v)", len(block.Uncles())) + if len(uncles) > 2 { + return nil, ValidationError("Block can only contain maximum 2 uncles (contained %v)", len(uncles)) } receipts, err := sm.TransitionState(state, parent, block, false) @@ -199,8 +201,6 @@ func (sm *BlockProcessor) processWithParent(block, parent *types.Block) (logs st return } - header := block.Header() - // Validate the received block's bloom with the one derived from the generated receipts. // For valid blocks this should always validate to true. rbloom := types.CreateBloom(receipts) @@ -211,7 +211,7 @@ func (sm *BlockProcessor) processWithParent(block, parent *types.Block) (logs st // The transactions Trie's root (R = (Tr [[i, RLP(T1)], [i, RLP(T2)], ... [n, RLP(Tn)]])) // can be used by light clients to make sure they've received the correct Txs - txSha := types.DeriveSha(block.Transactions()) + txSha := types.DeriveSha(txs) if txSha != header.TxHash { err = fmt.Errorf("invalid transaction root hash. received=%x calculated=%x", header.TxHash, txSha) return @@ -225,7 +225,7 @@ func (sm *BlockProcessor) processWithParent(block, parent *types.Block) (logs st } // Verify UncleHash before running other uncle validations - unclesSha := block.CalculateUnclesHash() + unclesSha := types.CalcUncleHash(uncles) if unclesSha != header.UncleHash { err = fmt.Errorf("invalid uncles root hash. received=%x calculated=%x", header.UncleHash, unclesSha) return @@ -236,7 +236,7 @@ func (sm *BlockProcessor) processWithParent(block, parent *types.Block) (logs st return } // Accumulate static rewards; block reward, uncle's and uncle inclusion. - AccumulateRewards(state, block) + AccumulateRewards(state, header, uncles) // Commit state objects/accounts to a temporary trie (does not save) // used to calculate the state root. @@ -260,11 +260,34 @@ func (sm *BlockProcessor) processWithParent(block, parent *types.Block) (logs st return state.Logs(), nil } +// AccumulateRewards credits the coinbase of the given block with the +// mining reward. The total reward consists of the static block reward +// and rewards for included uncles. +func AccumulateRewards(statedb *state.StateDB, header *types.Header, uncles []*types.Header) { + reward := new(big.Int).Set(BlockReward) + + for _, uncle := range uncles { + num := new(big.Int).Add(big.NewInt(8), uncle.Number) + num.Sub(num, header.Number) + + r := new(big.Int) + r.Mul(BlockReward, num) + r.Div(r, big.NewInt(8)) + + statedb.AddBalance(uncle.Coinbase, r) + + reward.Add(reward, new(big.Int).Div(BlockReward, big.NewInt(32))) + } + + // Get the account associated with the coinbase + statedb.AddBalance(header.Coinbase, reward) +} + func (sm *BlockProcessor) VerifyUncles(statedb *state.StateDB, block, parent *types.Block) error { ancestors := set.New() uncles := set.New() ancestorHeaders := make(map[common.Hash]*types.Header) - for _, ancestor := range sm.bc.GetAncestors(block, 7) { + for _, ancestor := range sm.bc.GetBlocksFromHash(block.ParentHash(), 7) { ancestorHeaders[ancestor.Hash()] = ancestor.Header() ancestors.Add(ancestor.Hash()) // Include ancestors uncles in the uncle set. Uncles must be unique. @@ -325,7 +348,7 @@ func (sm *BlockProcessor) GetLogs(block *types.Block) (logs state.Logs, err erro // TODO: remove backward compatibility var ( - parent = sm.bc.GetBlock(block.Header().ParentHash) + parent = sm.bc.GetBlock(block.ParentHash()) state = state.New(parent.Root(), sm.db) ) @@ -341,7 +364,7 @@ func ValidateHeader(pow pow.PoW, block, parent *types.Header, checkPow bool) err return fmt.Errorf("Block extra data too long (%d)", len(block.Extra)) } - expd := CalcDifficulty(block, parent) + expd := CalcDifficulty(int64(block.Time), int64(parent.Time), parent.Difficulty) if expd.Cmp(block.Difficulty) != 0 { return fmt.Errorf("Difficulty check failed for block %v, %v", block.Difficulty, expd) } @@ -375,26 +398,6 @@ func ValidateHeader(pow pow.PoW, block, parent *types.Header, checkPow bool) err return nil } -func AccumulateRewards(statedb *state.StateDB, block *types.Block) { - reward := new(big.Int).Set(BlockReward) - - for _, uncle := range block.Uncles() { - num := new(big.Int).Add(big.NewInt(8), uncle.Number) - num.Sub(num, block.Number()) - - r := new(big.Int) - r.Mul(BlockReward, num) - r.Div(r, big.NewInt(8)) - - statedb.AddBalance(uncle.Coinbase, r) - - reward.Add(reward, new(big.Int).Div(BlockReward, big.NewInt(32))) - } - - // Get the account associated with the coinbase - statedb.AddBalance(block.Header().Coinbase, reward) -} - func getBlockReceipts(db common.Database, bhash common.Hash) (receipts types.Receipts, err error) { var rdata []byte rdata, err = db.Get(append(receiptsPre, bhash[:]...)) diff --git a/core/block_processor_test.go b/core/block_processor_test.go index e38c815efe..bd77a2fc2e 100644 --- a/core/block_processor_test.go +++ b/core/block_processor_test.go @@ -26,20 +26,18 @@ func proc() (*BlockProcessor, *ChainManager) { } func TestNumber(t *testing.T) { - _, chain := proc() - block1 := chain.NewBlock(common.Address{}) - block1.Header().Number = big.NewInt(3) - block1.Header().Time-- - pow := ezp.New() - err := ValidateHeader(pow, block1.Header(), chain.Genesis().Header(), false) + bp, chain := proc() + header := makeHeader(chain.Genesis(), 0, bp.db, 0) + header.Number = big.NewInt(3) + err := ValidateHeader(pow, header, chain.Genesis().Header(), false) if err != BlockNumberErr { - t.Errorf("expected block number error %v", err) + t.Errorf("expected block number error, got %q", err) } - block1 = chain.NewBlock(common.Address{}) - err = ValidateHeader(pow, block1.Header(), chain.Genesis().Header(), false) + header = makeHeader(chain.Genesis(), 0, bp.db, 0) + err = ValidateHeader(pow, header, chain.Genesis().Header(), false) if err == BlockNumberErr { t.Errorf("didn't expect block number error") } diff --git a/core/chain_makers.go b/core/chain_makers.go index 76acfd6ca3..e704fd0889 100644 --- a/core/chain_makers.go +++ b/core/chain_makers.go @@ -29,12 +29,8 @@ var ( // Utility functions for making chains on the fly // Exposed for sake of testing from other packages (eg. go-ethash) -func NewBlockFromParent(addr common.Address, parent *types.Block) *types.Block { - return newBlockFromParent(addr, parent) -} - func MakeBlock(bman *BlockProcessor, parent *types.Block, i int, db common.Database, seed int) *types.Block { - return makeBlock(bman, parent, i, db, seed) + return types.NewBlock(makeHeader(parent, i, db, seed), nil, nil, nil) } func MakeChain(bman *BlockProcessor, parent *types.Block, max int, db common.Database, seed int) types.Blocks { @@ -53,46 +49,38 @@ func NewCanonical(n int, db common.Database) (*BlockProcessor, error) { return newCanonical(n, db) } -// block time is fixed at 10 seconds -func newBlockFromParent(addr common.Address, parent *types.Block) *types.Block { - block := types.NewBlock(parent.Hash(), addr, parent.Root(), common.BigPow(2, 32), 0, nil) - block.SetUncles(nil) - block.SetTransactions(nil) - block.SetReceipts(nil) - - header := block.Header() - header.Difficulty = CalcDifficulty(block.Header(), parent.Header()) - header.Number = new(big.Int).Add(parent.Header().Number, common.Big1) - header.Time = parent.Header().Time + 10 - header.GasLimit = CalcGasLimit(parent) - - block.Td = parent.Td - - return block -} - -// Actually make a block by simulating what miner would do -// we seed chains by the first byte of the coinbase -func makeBlock(bman *BlockProcessor, parent *types.Block, i int, db common.Database, seed int) *types.Block { +// makeHeader creates the header for a new empty block, simulating +// what miner would do. We seed chains by the first byte of the coinbase. +func makeHeader(parent *types.Block, i int, db common.Database, seed int) *types.Header { var addr common.Address - addr[0], addr[19] = byte(seed), byte(i) - block := newBlockFromParent(addr, parent) - state := state.New(block.Root(), db) + addr[0], addr[19] = byte(seed), byte(i) // 'random' coinbase + time := parent.Time() + 10 // block time is fixed at 10 seconds + + // ensure that the block's coinbase has the block reward in the state. + state := state.New(parent.Root(), db) cbase := state.GetOrNewStateObject(addr) cbase.SetGasLimit(CalcGasLimit(parent)) cbase.AddBalance(BlockReward) state.Update() - block.SetRoot(state.Root()) - return block + + return &types.Header{ + Root: state.Root(), + ParentHash: parent.Hash(), + Coinbase: addr, + Difficulty: CalcDifficulty(time, parent.Time(), parent.Difficulty()), + Number: new(big.Int).Add(parent.Number(), common.Big1), + Time: uint64(time), + GasLimit: CalcGasLimit(parent), + } } -// Make a chain with real blocks -// Runs ProcessWithParent to get proper state roots +// makeChain creates a valid chain of empty blocks. func makeChain(bman *BlockProcessor, parent *types.Block, max int, db common.Database, seed int) types.Blocks { bman.bc.currentBlock = parent blocks := make(types.Blocks, max) for i := 0; i < max; i++ { - block := makeBlock(bman, parent, i, db, seed) + block := types.NewBlock(makeHeader(parent, i, db, seed), nil, nil, nil) + // Use ProcessWithParent to verify that we have produced a valid block. _, err := bman.processWithParent(block, parent) if err != nil { fmt.Println("process with parent failed", err) @@ -129,7 +117,7 @@ func newBlockProcessor(db common.Database, cman *ChainManager, eventMux *event.T } // Make a new, deterministic canonical chain by running InsertChain -// on result of makeChain +// on result of makeChain. func newCanonical(n int, db common.Database) (*BlockProcessor, error) { eventMux := &event.TypeMux{} diff --git a/core/chain_manager.go b/core/chain_manager.go index 3b9b7517be..8a79e3e8ad 100644 --- a/core/chain_manager.go +++ b/core/chain_manager.go @@ -38,23 +38,24 @@ const ( maxTimeFutureBlocks = 30 ) -func CalcDifficulty(block, parent *types.Header) *big.Int { +// CalcDifficulty is the difficulty adjustment algorithm. It returns +// the difficulty that a new block b should have when created at time +// given the parent block's time and difficulty. +func CalcDifficulty(time int64, parentTime int64, parentDiff *big.Int) *big.Int { diff := new(big.Int) - - adjust := new(big.Int).Div(parent.Difficulty, params.DifficultyBoundDivisor) - if big.NewInt(int64(block.Time)-int64(parent.Time)).Cmp(params.DurationLimit) < 0 { - diff.Add(parent.Difficulty, adjust) + adjust := new(big.Int).Div(parentDiff, params.DifficultyBoundDivisor) + if big.NewInt(time-parentTime).Cmp(params.DurationLimit) < 0 { + diff.Add(parentDiff, adjust) } else { - diff.Sub(parent.Difficulty, adjust) + diff.Sub(parentDiff, adjust) } - if diff.Cmp(params.MinimumDifficulty) < 0 { return params.MinimumDifficulty } - return diff } +// CalcTD computes the total difficulty of block. func CalcTD(block, parent *types.Block) *big.Int { if parent == nil { return block.Difficulty() @@ -62,6 +63,8 @@ func CalcTD(block, parent *types.Block) *big.Int { return new(big.Int).Add(parent.Td, block.Header().Difficulty) } +// CalcGasLimit computes the gas limit of the next block after parent. +// The result may be modified by the caller. func CalcGasLimit(parent *types.Block) *big.Int { decay := new(big.Int).Div(parent.GasLimit(), params.GasLimitBoundDivisor) contrib := new(big.Int).Mul(parent.GasUsed(), big.NewInt(3)) @@ -71,11 +74,11 @@ func CalcGasLimit(parent *types.Block) *big.Int { gl := new(big.Int).Sub(parent.GasLimit(), decay) gl = gl.Add(gl, contrib) gl = gl.Add(gl, big.NewInt(1)) - gl = common.BigMax(gl, params.MinGasLimit) + gl.Set(common.BigMax(gl, params.MinGasLimit)) if gl.Cmp(params.GenesisGasLimit) < 0 { - gl2 := new(big.Int).Add(parent.GasLimit(), decay) - return common.BigMin(params.GenesisGasLimit, gl2) + gl.Add(parent.GasLimit(), decay) + gl.Set(common.BigMin(gl, params.GenesisGasLimit)) } return gl } @@ -255,50 +258,11 @@ func (bc *ChainManager) makeCache() { bc.cache = NewBlockCache(blockCacheLimit) } // load in last `blockCacheLimit` - 1 blocks. Last block is the current. - ancestors := bc.GetAncestors(bc.currentBlock, blockCacheLimit-1) - ancestors = append(ancestors, bc.currentBlock) - for _, block := range ancestors { + for _, block := range bc.GetBlocksFromHash(bc.currentBlock.Hash(), blockCacheLimit) { bc.cache.Push(block) } } -// Block creation & chain handling -func (bc *ChainManager) NewBlock(coinbase common.Address) *types.Block { - bc.mu.RLock() - defer bc.mu.RUnlock() - - var ( - root common.Hash - parentHash common.Hash - ) - - if bc.currentBlock != nil { - root = bc.currentBlock.Header().Root - parentHash = bc.lastBlockHash - } - - block := types.NewBlock( - parentHash, - coinbase, - root, - common.BigPow(2, 32), - 0, - nil) - block.SetUncles(nil) - block.SetTransactions(nil) - block.SetReceipts(nil) - - parent := bc.currentBlock - if parent != nil { - header := block.Header() - header.Difficulty = CalcDifficulty(block.Header(), parent.Header()) - header.Number = new(big.Int).Add(parent.Header().Number, common.Big1) - header.GasLimit = CalcGasLimit(parent) - } - - return block -} - func (bc *ChainManager) Reset() { bc.mu.Lock() defer bc.mu.Unlock() @@ -463,6 +427,19 @@ func (self *ChainManager) GetBlockByNumber(num uint64) *types.Block { } +// GetBlocksFromHash returns the block corresponding to hash and up to n-1 ancestors. +func (self *ChainManager) GetBlocksFromHash(hash common.Hash, n int) (blocks []*types.Block) { + for i := 0; i < n; i++ { + block := self.GetBlock(hash) + if block == nil { + break + } + blocks = append(blocks, block) + hash = block.ParentHash() + } + return +} + // non blocking version func (self *ChainManager) getBlockByNumber(num uint64) *types.Block { key, _ := self.blockDb.Get(append(blockNumPre, big.NewInt(int64(num)).Bytes()...)) @@ -482,19 +459,6 @@ func (self *ChainManager) GetUnclesInChain(block *types.Block, length int) (uncl return } -func (self *ChainManager) GetAncestors(block *types.Block, length int) (blocks []*types.Block) { - for i := 0; i < length; i++ { - block = self.GetBlock(block.ParentHash()) - if block == nil { - break - } - - blocks = append(blocks, block) - } - - return -} - // setTotalDifficulty updates the TD of the chain manager. Note, this function // assumes that the `mu` mutex is held! func (bc *ChainManager) setTotalDifficulty(td *big.Int) { @@ -621,14 +585,12 @@ func (self *ChainManager) InsertChain(chain types.Blocks) (int, error) { return i, fmt.Errorf("%v: BlockFutureErr, %v > %v", BlockFutureErr, block.Time(), max) } - block.SetQueued(true) self.futureBlocks.Push(block) stats.queued++ continue } if IsParentErr(err) && self.futureBlocks.Has(block.ParentHash()) { - block.SetQueued(true) self.futureBlocks.Push(block) stats.queued++ continue diff --git a/core/chain_manager_test.go b/core/chain_manager_test.go index c56a3b3e12..afec1d0f19 100644 --- a/core/chain_manager_test.go +++ b/core/chain_manager_test.go @@ -117,7 +117,7 @@ func testChain(chainB types.Blocks, bman *BlockProcessor) (*big.Int, error) { } func loadChain(fn string, t *testing.T) (types.Blocks, error) { - fh, err := os.OpenFile(filepath.Join(os.Getenv("GOPATH"), "src", "github.com", "ethereum", "go-ethereum", "_data", fn), os.O_RDONLY, os.ModePerm) + fh, err := os.OpenFile(filepath.Join("..", "_data", fn), os.O_RDONLY, os.ModePerm) if err != nil { return nil, err } @@ -265,7 +265,7 @@ func TestBrokenChain(t *testing.T) { } func TestChainInsertions(t *testing.T) { - t.Skip() // travil fails. + t.Skip("Skipped: outdated test files") db, _ := ethdb.NewMemDatabase() @@ -303,7 +303,7 @@ func TestChainInsertions(t *testing.T) { } func TestChainMultipleInsertions(t *testing.T) { - t.Skip() // travil fails. + t.Skip("Skipped: outdated test files") db, _ := ethdb.NewMemDatabase() @@ -346,8 +346,8 @@ func TestChainMultipleInsertions(t *testing.T) { } } -func TestGetAncestors(t *testing.T) { - t.Skip() // travil fails. +func TestGetBlocksFromHash(t *testing.T) { + t.Skip("Skipped: outdated test files") db, _ := ethdb.NewMemDatabase() chainMan := theChainManager(db, t) @@ -361,8 +361,8 @@ func TestGetAncestors(t *testing.T) { chainMan.write(block) } - ancestors := chainMan.GetAncestors(chain[len(chain)-1], 4) - fmt.Println(ancestors) + blocks := chainMan.GetBlocksFromHash(chain[len(chain)-1].Hash(), 4) + fmt.Println(blocks) } type bproc struct{} @@ -372,15 +372,17 @@ func (bproc) Process(*types.Block) (state.Logs, error) { return nil, nil } func makeChainWithDiff(genesis *types.Block, d []int, seed byte) []*types.Block { var chain []*types.Block for i, difficulty := range d { - header := &types.Header{Number: big.NewInt(int64(i + 1)), Difficulty: big.NewInt(int64(difficulty))} - block := types.NewBlockWithHeader(header) - copy(block.HeaderHash[:2], []byte{byte(i + 1), seed}) - if i == 0 { - block.ParentHeaderHash = genesis.Hash() - } else { - copy(block.ParentHeaderHash[:2], []byte{byte(i), seed}) + header := &types.Header{ + Coinbase: common.Address{seed}, + Number: big.NewInt(int64(i + 1)), + Difficulty: big.NewInt(int64(difficulty)), } - + if i == 0 { + header.ParentHash = genesis.Hash() + } else { + header.ParentHash = chain[i-1].Hash() + } + block := types.NewBlockWithHeader(header) chain = append(chain, block) } return chain @@ -399,7 +401,6 @@ func chm(genesis *types.Block, db common.Database) *ChainManager { } func TestReorgLongest(t *testing.T) { - t.Skip("skipped while cache is removed") db, _ := ethdb.NewMemDatabase() genesis := GenesisBlock(0, db) bc := chm(genesis, db) @@ -419,7 +420,6 @@ func TestReorgLongest(t *testing.T) { } func TestReorgShortest(t *testing.T) { - t.Skip("skipped while cache is removed") db, _ := ethdb.NewMemDatabase() genesis := GenesisBlock(0, db) bc := chm(genesis, db) diff --git a/core/genesis.go b/core/genesis.go index dd894e0b0f..de2eee9db9 100644 --- a/core/genesis.go +++ b/core/genesis.go @@ -11,38 +11,18 @@ import ( "github.com/ethereum/go-ethereum/params" ) -/* - * This is the special genesis block. - */ - -var ZeroHash256 = make([]byte, 32) -var ZeroHash160 = make([]byte, 20) -var ZeroHash512 = make([]byte, 64) - +// GenesisBlock creates a genesis block with the given nonce. func GenesisBlock(nonce uint64, db common.Database) *types.Block { - genesis := types.NewBlock(common.Hash{}, common.Address{}, common.Hash{}, params.GenesisDifficulty, nonce, nil) - genesis.Header().Number = common.Big0 - genesis.Header().GasLimit = params.GenesisGasLimit - genesis.Header().GasUsed = common.Big0 - genesis.Header().Time = 0 - - genesis.Td = common.Big0 - - genesis.SetUncles([]*types.Header{}) - genesis.SetTransactions(types.Transactions{}) - genesis.SetReceipts(types.Receipts{}) - var accounts map[string]struct { Balance string Code string } err := json.Unmarshal(GenesisAccounts, &accounts) if err != nil { - fmt.Println("enable to decode genesis json data:", err) + fmt.Println("unable to decode genesis json data:", err) os.Exit(1) } - - statedb := state.New(genesis.Root(), db) + statedb := state.New(common.Hash{}, db) for addr, account := range accounts { codedAddr := common.Hex2Bytes(addr) accountState := statedb.CreateAccount(common.BytesToAddress(codedAddr)) @@ -51,10 +31,15 @@ func GenesisBlock(nonce uint64, db common.Database) *types.Block { statedb.UpdateStateObject(accountState) } statedb.Sync() - genesis.Header().Root = statedb.Root() - genesis.Td = params.GenesisDifficulty - return genesis + block := types.NewBlock(&types.Header{ + Difficulty: params.GenesisDifficulty, + GasLimit: params.GenesisGasLimit, + Nonce: types.EncodeNonce(nonce), + Root: statedb.Root(), + }, nil, nil, nil) + block.Td = params.GenesisDifficulty + return block } var GenesisAccounts = []byte(`{ diff --git a/core/state_transition.go b/core/state_transition.go index 915dd466bc..2c8770cbe5 100644 --- a/core/state_transition.go +++ b/core/state_transition.go @@ -73,16 +73,17 @@ func MessageGasValue(msg Message) *big.Int { return new(big.Int).Mul(msg.Gas(), msg.GasPrice()) } -func IntrinsicGas(msg Message) *big.Int { +// IntrinsicGas computes the 'intrisic gas' for a message +// with the given data. +func IntrinsicGas(data []byte) *big.Int { igas := new(big.Int).Set(params.TxGas) - for _, byt := range msg.Data() { + for _, byt := range data { if byt != 0 { igas.Add(igas, params.TxDataNonZeroGas) } else { igas.Add(igas, params.TxDataZeroGas) } } - return igas } @@ -195,7 +196,7 @@ func (self *StateTransition) transitionState() (ret []byte, usedGas *big.Int, er sender, _ := self.From() // err checked in preCheck // Pay intrinsic gas - if err = self.UseGas(IntrinsicGas(self.msg)); err != nil { + if err = self.UseGas(IntrinsicGas(self.msg.Data())); err != nil { return nil, nil, InvalidTxError(err) } diff --git a/core/transaction_pool.go b/core/transaction_pool.go index 45db04eef4..bf28647c37 100644 --- a/core/transaction_pool.go +++ b/core/transaction_pool.go @@ -180,7 +180,7 @@ func (pool *TxPool) validateTx(tx *types.Transaction) error { } // Should supply enough intrinsic gas - if tx.Gas().Cmp(IntrinsicGas(tx)) < 0 { + if tx.Gas().Cmp(IntrinsicGas(tx.Data())) < 0 { return ErrIntrinsicGas } diff --git a/core/types/block.go b/core/types/block.go index d7963981ef..31ea478d43 100644 --- a/core/types/block.go +++ b/core/types/block.go @@ -15,71 +15,59 @@ import ( "github.com/ethereum/go-ethereum/rlp" ) +// A BlockNonce is a 64-bit hash which proves (combined with the +// mix-hash) that a suffcient amount of computation has been carried +// out on a block. +type BlockNonce [8]byte + +func EncodeNonce(i uint64) BlockNonce { + var n BlockNonce + binary.BigEndian.PutUint64(n[:], i) + return n +} + +func (n BlockNonce) Uint64() uint64 { + return binary.BigEndian.Uint64(n[:]) +} + type Header struct { - // Hash to the previous block - ParentHash common.Hash - // Uncles of this block - UncleHash common.Hash - // The coin base address - Coinbase common.Address - // Block Trie state - Root common.Hash - // Tx sha - TxHash common.Hash - // Receipt sha - ReceiptHash common.Hash - // Bloom - Bloom Bloom - // Difficulty for the current block - Difficulty *big.Int - // The block number - Number *big.Int - // Gas limit - GasLimit *big.Int - // Gas used - GasUsed *big.Int - // Creation time - Time uint64 - // Extra data - Extra []byte - // Mix digest for quick checking to prevent DOS - MixDigest common.Hash - // Nonce - Nonce [8]byte + ParentHash common.Hash // Hash to the previous block + UncleHash common.Hash // Uncles of this block + Coinbase common.Address // The coin base address + Root common.Hash // Block Trie state + TxHash common.Hash // Tx sha + ReceiptHash common.Hash // Receipt sha + Bloom Bloom // Bloom + Difficulty *big.Int // Difficulty for the current block + Number *big.Int // The block number + GasLimit *big.Int // Gas limit + GasUsed *big.Int // Gas used + Time uint64 // Creation time + Extra []byte // Extra data + MixDigest common.Hash // for quick difficulty verification + Nonce BlockNonce } -func (self *Header) Hash() common.Hash { - return rlpHash(self.rlpData(true)) +func (h *Header) Hash() common.Hash { + return rlpHash(h) } -func (self *Header) HashNoNonce() common.Hash { - return rlpHash(self.rlpData(false)) -} - -func (self *Header) rlpData(withNonce bool) []interface{} { - fields := []interface{}{ - self.ParentHash, - self.UncleHash, - self.Coinbase, - self.Root, - self.TxHash, - self.ReceiptHash, - self.Bloom, - self.Difficulty, - self.Number, - self.GasLimit, - self.GasUsed, - self.Time, - self.Extra, - } - if withNonce { - fields = append(fields, self.MixDigest, self.Nonce) - } - return fields -} - -func (self *Header) RlpData() interface{} { - return self.rlpData(true) +func (h *Header) HashNoNonce() common.Hash { + return rlpHash([]interface{}{ + h.ParentHash, + h.UncleHash, + h.Coinbase, + h.Root, + h.TxHash, + h.ReceiptHash, + h.Bloom, + h.Difficulty, + h.Number, + h.GasLimit, + h.GasUsed, + h.Time, + h.Extra, + }) } func (h *Header) UnmarshalJSON(data []byte) error { @@ -112,20 +100,14 @@ func rlpHash(x interface{}) (h common.Hash) { } type Block struct { - // Preset Hash for mock (Tests) - HeaderHash common.Hash - ParentHeaderHash common.Hash - // ^^^^ ignore ^^^^ - header *Header uncles []*Header transactions Transactions - Td *big.Int - queued bool // flag for blockpool to skip TD check + receipts Receipts + Td *big.Int + queued bool // flag for blockpool to skip TD check ReceivedAt time.Time - - receipts Receipts } // StorageBlock defines the RLP encoding of a Block stored in the @@ -148,43 +130,90 @@ type storageblock struct { TD *big.Int } -func NewBlock(parentHash common.Hash, coinbase common.Address, root common.Hash, difficulty *big.Int, nonce uint64, extra []byte) *Block { - header := &Header{ - Root: root, - ParentHash: parentHash, - Coinbase: coinbase, - Difficulty: difficulty, - Time: uint64(time.Now().Unix()), - Extra: extra, - GasUsed: new(big.Int), - GasLimit: new(big.Int), - Number: new(big.Int), +var ( + emptyRootHash = DeriveSha(Transactions{}) + emptyUncleHash = CalcUncleHash(nil) +) + +// NewBlock creates a new block. The input data is copied, +// changes to header and to the field values will not affect the +// block. +// +// The values of TxHash, UncleHash, ReceiptHash and Bloom in header +// are ignored and set to values derived from the given txs, uncles +// and receipts. +func NewBlock(header *Header, txs []*Transaction, uncles []*Header, receipts []*Receipt) *Block { + b := &Block{header: copyHeader(header), Td: new(big.Int)} + + // TODO: panic if len(txs) != len(receipts) + if len(txs) == 0 { + b.header.TxHash = emptyRootHash + } else { + b.header.TxHash = DeriveSha(Transactions(txs)) + b.transactions = make(Transactions, len(txs)) + copy(b.transactions, txs) } - header.SetNonce(nonce) - block := &Block{header: header} - block.Td = new(big.Int) - return block -} - -func (self *Header) SetNonce(nonce uint64) { - binary.BigEndian.PutUint64(self.Nonce[:], nonce) + if len(receipts) == 0 { + b.header.ReceiptHash = emptyRootHash + } else { + b.header.ReceiptHash = DeriveSha(Receipts(receipts)) + b.header.Bloom = CreateBloom(receipts) + b.receipts = make([]*Receipt, len(receipts)) + copy(b.receipts, receipts) + } + + if len(uncles) == 0 { + b.header.UncleHash = emptyUncleHash + } else { + b.header.UncleHash = CalcUncleHash(uncles) + b.uncles = make([]*Header, len(uncles)) + for i := range uncles { + b.uncles[i] = copyHeader(uncles[i]) + } + } + + return b } +// NewBlockWithHeader creates a block with the given header data. The +// header data is copied, changes to header and to the field values +// will not affect the block. func NewBlockWithHeader(header *Header) *Block { - return &Block{header: header} + return &Block{header: copyHeader(header)} } -func (self *Block) ValidateFields() error { - if self.header == nil { +func copyHeader(h *Header) *Header { + cpy := *h + if cpy.Difficulty = new(big.Int); h.Difficulty != nil { + cpy.Difficulty.Set(h.Difficulty) + } + if cpy.Number = new(big.Int); h.Number != nil { + cpy.Number.Set(h.Number) + } + if cpy.GasLimit = new(big.Int); h.GasLimit != nil { + cpy.GasLimit.Set(h.GasLimit) + } + if cpy.GasUsed = new(big.Int); h.GasUsed != nil { + cpy.GasUsed.Set(h.GasUsed) + } + if len(h.Extra) > 0 { + cpy.Extra = make([]byte, len(h.Extra)) + copy(cpy.Extra, h.Extra) + } + return &cpy +} + +func (b *Block) ValidateFields() error { + if b.header == nil { return fmt.Errorf("header is nil") } - for i, transaction := range self.transactions { + for i, transaction := range b.transactions { if transaction == nil { return fmt.Errorf("transaction %d is nil", i) } } - for i, uncle := range self.uncles { + for i, uncle := range b.uncles { if uncle == nil { return fmt.Errorf("uncle %d is nil", i) } @@ -192,64 +221,48 @@ func (self *Block) ValidateFields() error { return nil } -func (self *Block) DecodeRLP(s *rlp.Stream) error { +func (b *Block) DecodeRLP(s *rlp.Stream) error { var eb extblock if err := s.Decode(&eb); err != nil { return err } - self.header, self.uncles, self.transactions = eb.Header, eb.Uncles, eb.Txs + b.header, b.uncles, b.transactions = eb.Header, eb.Uncles, eb.Txs return nil } -func (self Block) EncodeRLP(w io.Writer) error { +func (b Block) EncodeRLP(w io.Writer) error { return rlp.Encode(w, extblock{ - Header: self.header, - Txs: self.transactions, - Uncles: self.uncles, + Header: b.header, + Txs: b.transactions, + Uncles: b.uncles, }) } -func (self *StorageBlock) DecodeRLP(s *rlp.Stream) error { +func (b *StorageBlock) DecodeRLP(s *rlp.Stream) error { var sb storageblock if err := s.Decode(&sb); err != nil { return err } - self.header, self.uncles, self.transactions, self.Td = sb.Header, sb.Uncles, sb.Txs, sb.TD + b.header, b.uncles, b.transactions, b.Td = sb.Header, sb.Uncles, sb.Txs, sb.TD return nil } -func (self StorageBlock) EncodeRLP(w io.Writer) error { +func (b StorageBlock) EncodeRLP(w io.Writer) error { return rlp.Encode(w, storageblock{ - Header: self.header, - Txs: self.transactions, - Uncles: self.uncles, - TD: self.Td, + Header: b.header, + Txs: b.transactions, + Uncles: b.uncles, + TD: b.Td, }) } -func (self *Block) Header() *Header { - return self.header -} +// TODO: copies +func (b *Block) Uncles() []*Header { return b.uncles } +func (b *Block) Transactions() Transactions { return b.transactions } +func (b *Block) Receipts() Receipts { return b.receipts } -func (self *Block) Uncles() []*Header { - return self.uncles -} - -func (self *Block) CalculateUnclesHash() common.Hash { - return rlpHash(self.uncles) -} - -func (self *Block) SetUncles(uncleHeaders []*Header) { - self.uncles = uncleHeaders - self.header.UncleHash = rlpHash(uncleHeaders) -} - -func (self *Block) Transactions() Transactions { - return self.transactions -} - -func (self *Block) Transaction(hash common.Hash) *Transaction { - for _, transaction := range self.transactions { +func (b *Block) Transaction(hash common.Hash) *Transaction { + for _, transaction := range b.transactions { if transaction.Hash() == hash { return transaction } @@ -257,74 +270,33 @@ func (self *Block) Transaction(hash common.Hash) *Transaction { return nil } -func (self *Block) SetTransactions(transactions Transactions) { - self.transactions = transactions - self.header.TxHash = DeriveSha(transactions) -} -func (self *Block) AddTransaction(transaction *Transaction) { - self.transactions = append(self.transactions, transaction) - self.SetTransactions(self.transactions) +func (b *Block) Number() *big.Int { return new(big.Int).Set(b.header.Number) } +func (b *Block) GasLimit() *big.Int { return new(big.Int).Set(b.header.GasLimit) } +func (b *Block) GasUsed() *big.Int { return new(big.Int).Set(b.header.GasUsed) } +func (b *Block) Difficulty() *big.Int { return new(big.Int).Set(b.header.Difficulty) } + +func (b *Block) NumberU64() uint64 { return b.header.Number.Uint64() } +func (b *Block) MixDigest() common.Hash { return b.header.MixDigest } +func (b *Block) Nonce() uint64 { return binary.BigEndian.Uint64(b.header.Nonce[:]) } +func (b *Block) Bloom() Bloom { return b.header.Bloom } +func (b *Block) Coinbase() common.Address { return b.header.Coinbase } +func (b *Block) Time() int64 { return int64(b.header.Time) } +func (b *Block) Root() common.Hash { return b.header.Root } +func (b *Block) ParentHash() common.Hash { return b.header.ParentHash } +func (b *Block) TxHash() common.Hash { return b.header.TxHash } +func (b *Block) ReceiptHash() common.Hash { return b.header.ReceiptHash } +func (b *Block) UncleHash() common.Hash { return b.header.UncleHash } +func (b *Block) Extra() []byte { return common.CopyBytes(b.header.Extra) } + +func (b *Block) Header() *Header { return copyHeader(b.header) } + +func (b *Block) HashNoNonce() common.Hash { + return b.header.HashNoNonce() } -func (self *Block) Receipts() Receipts { - return self.receipts -} - -func (self *Block) SetReceipts(receipts Receipts) { - self.receipts = receipts - self.header.ReceiptHash = DeriveSha(receipts) - self.header.Bloom = CreateBloom(receipts) -} -func (self *Block) AddReceipt(receipt *Receipt) { - self.receipts = append(self.receipts, receipt) - self.SetReceipts(self.receipts) -} - -func (self *Block) RlpData() interface{} { - return []interface{}{self.header, self.transactions, self.uncles} -} - -func (self *Block) RlpDataForStorage() interface{} { - return []interface{}{self.header, self.transactions, self.uncles, self.Td /* TODO receipts */} -} - -// Header accessors (add as you need them) -func (self *Block) Number() *big.Int { return self.header.Number } -func (self *Block) NumberU64() uint64 { return self.header.Number.Uint64() } -func (self *Block) MixDigest() common.Hash { return self.header.MixDigest } -func (self *Block) Nonce() uint64 { - return binary.BigEndian.Uint64(self.header.Nonce[:]) -} -func (self *Block) SetNonce(nonce uint64) { - self.header.SetNonce(nonce) -} - -func (self *Block) Queued() bool { return self.queued } -func (self *Block) SetQueued(q bool) { self.queued = q } - -func (self *Block) Bloom() Bloom { return self.header.Bloom } -func (self *Block) Coinbase() common.Address { return self.header.Coinbase } -func (self *Block) Time() int64 { return int64(self.header.Time) } -func (self *Block) GasLimit() *big.Int { return self.header.GasLimit } -func (self *Block) GasUsed() *big.Int { return self.header.GasUsed } -func (self *Block) Root() common.Hash { return self.header.Root } -func (self *Block) SetRoot(root common.Hash) { self.header.Root = root } -func (self *Block) GetTransaction(i int) *Transaction { - if len(self.transactions) > i { - return self.transactions[i] - } - return nil -} -func (self *Block) GetUncle(i int) *Header { - if len(self.uncles) > i { - return self.uncles[i] - } - return nil -} - -func (self *Block) Size() common.StorageSize { +func (b *Block) Size() common.StorageSize { c := writeCounter(0) - rlp.Encode(&c, self) + rlp.Encode(&c, b) return common.StorageSize(c) } @@ -335,48 +307,32 @@ func (c *writeCounter) Write(b []byte) (int, error) { return len(b), nil } +func CalcUncleHash(uncles []*Header) common.Hash { + return rlpHash(uncles) +} + +// WithMiningResult returns a new block with the data from b +// where nonce and mix digest are set to the provided values. +func (b *Block) WithMiningResult(nonce uint64, mixDigest common.Hash) *Block { + cpy := *b.header + binary.BigEndian.PutUint64(cpy.Nonce[:], nonce) + cpy.MixDigest = mixDigest + return &Block{ + header: &cpy, + transactions: b.transactions, + receipts: b.receipts, + uncles: b.uncles, + Td: b.Td, + } +} + // Implement pow.Block -func (self *Block) Difficulty() *big.Int { return self.header.Difficulty } -func (self *Block) HashNoNonce() common.Hash { return self.header.HashNoNonce() } -func (self *Block) Hash() common.Hash { - if (self.HeaderHash != common.Hash{}) { - return self.HeaderHash - } else { - return self.header.Hash() - } +func (b *Block) Hash() common.Hash { + return b.header.Hash() } -func (self *Block) ParentHash() common.Hash { - if (self.ParentHeaderHash != common.Hash{}) { - return self.ParentHeaderHash - } else { - return self.header.ParentHash - } -} - -func (self *Block) Copy() *Block { - block := NewBlock(self.header.ParentHash, self.Coinbase(), self.Root(), new(big.Int), self.Nonce(), self.header.Extra) - block.header.Bloom = self.header.Bloom - block.header.TxHash = self.header.TxHash - block.transactions = self.transactions - block.header.UncleHash = self.header.UncleHash - block.uncles = self.uncles - block.header.GasLimit.Set(self.header.GasLimit) - block.header.GasUsed.Set(self.header.GasUsed) - block.header.ReceiptHash = self.header.ReceiptHash - block.header.Difficulty.Set(self.header.Difficulty) - block.header.Number.Set(self.header.Number) - block.header.Time = self.header.Time - block.header.MixDigest = self.header.MixDigest - if self.Td != nil { - block.Td.Set(self.Td) - } - - return block -} - -func (self *Block) String() string { +func (b *Block) String() string { str := fmt.Sprintf(`Block(#%v): Size: %v TD: %v { MinerHash: %x %v @@ -385,20 +341,11 @@ Transactions: Uncles: %v } -`, self.Number(), self.Size(), self.Td, self.header.HashNoNonce(), self.header, self.transactions, self.uncles) - - if (self.HeaderHash != common.Hash{}) { - str += fmt.Sprintf("\nFake hash = %x", self.HeaderHash) - } - - if (self.ParentHeaderHash != common.Hash{}) { - str += fmt.Sprintf("\nFake parent hash = %x", self.ParentHeaderHash) - } - +`, b.Number(), b.Size(), b.Td, b.header.HashNoNonce(), b.header, b.transactions, b.uncles) return str } -func (self *Header) String() string { +func (h *Header) String() string { return fmt.Sprintf(`Header(%x): [ ParentHash: %x @@ -414,9 +361,9 @@ func (self *Header) String() string { GasUsed: %v Time: %v Extra: %s - MixDigest: %x + MixDigest: %x Nonce: %x -]`, self.Hash(), self.ParentHash, self.UncleHash, self.Coinbase, self.Root, self.TxHash, self.ReceiptHash, self.Bloom, self.Difficulty, self.Number, self.GasLimit, self.GasUsed, self.Time, self.Extra, self.MixDigest, self.Nonce) +]`, h.Hash(), h.ParentHash, h.UncleHash, h.Coinbase, h.Root, h.TxHash, h.ReceiptHash, h.Bloom, h.Difficulty, h.Number, h.GasLimit, h.GasUsed, h.Time, h.Extra, h.MixDigest, h.Nonce) } type Blocks []*Block @@ -442,4 +389,4 @@ func (self blockSorter) Swap(i, j int) { } func (self blockSorter) Less(i, j int) bool { return self.by(self.blocks[i], self.blocks[j]) } -func Number(b1, b2 *Block) bool { return b1.Header().Number.Cmp(b2.Header().Number) < 0 } +func Number(b1, b2 *Block) bool { return b1.header.Number.Cmp(b2.header.Number) < 0 } diff --git a/core/vm_env.go b/core/vm_env.go index da862d5c8c..6dd83acde0 100644 --- a/core/vm_env.go +++ b/core/vm_env.go @@ -10,32 +10,32 @@ import ( ) type VMEnv struct { - state *state.StateDB - block *types.Block - msg Message - depth int - chain *ChainManager - typ vm.Type + state *state.StateDB + header *types.Header + msg Message + depth int + chain *ChainManager + typ vm.Type // structured logging logs []vm.StructLog } -func NewEnv(state *state.StateDB, chain *ChainManager, msg Message, block *types.Block) *VMEnv { +func NewEnv(state *state.StateDB, chain *ChainManager, msg Message, header *types.Header) *VMEnv { return &VMEnv{ - chain: chain, - state: state, - block: block, - msg: msg, - typ: vm.StdVmTy, + chain: chain, + state: state, + header: header, + msg: msg, + typ: vm.StdVmTy, } } func (self *VMEnv) Origin() common.Address { f, _ := self.msg.From(); return f } -func (self *VMEnv) BlockNumber() *big.Int { return self.block.Number() } -func (self *VMEnv) Coinbase() common.Address { return self.block.Coinbase() } -func (self *VMEnv) Time() int64 { return self.block.Time() } -func (self *VMEnv) Difficulty() *big.Int { return self.block.Difficulty() } -func (self *VMEnv) GasLimit() *big.Int { return self.block.GasLimit() } +func (self *VMEnv) BlockNumber() *big.Int { return self.header.Number } +func (self *VMEnv) Coinbase() common.Address { return self.header.Coinbase } +func (self *VMEnv) Time() int64 { return int64(self.header.Time) } +func (self *VMEnv) Difficulty() *big.Int { return self.header.Difficulty } +func (self *VMEnv) GasLimit() *big.Int { return self.header.GasLimit } func (self *VMEnv) Value() *big.Int { return self.msg.Value() } func (self *VMEnv) State() *state.StateDB { return self.state } func (self *VMEnv) Depth() int { return self.depth } diff --git a/eth/downloader/downloader_test.go b/eth/downloader/downloader_test.go index 4fc4e1434d..fb8aa7e4b5 100644 --- a/eth/downloader/downloader_test.go +++ b/eth/downloader/downloader_test.go @@ -40,7 +40,10 @@ func createHashes(amount int, root common.Hash) (hashes []common.Hash) { // createBlock assembles a new block at the given chain height. func createBlock(i int, parent, hash common.Hash) *types.Block { - header := &types.Header{Number: big.NewInt(int64(i))} + header := &types.Header{ + Hash: hash, + Number: big.NewInt(int64(i)) + } block := types.NewBlockWithHeader(header) block.HeaderHash = hash block.ParentHeaderHash = parent diff --git a/miner/agent.go b/miner/agent.go index 3ed3ba839e..a7d017aa5e 100644 --- a/miner/agent.go +++ b/miner/agent.go @@ -90,15 +90,13 @@ done: } } -func (self *CpuAgent) mine(block *types.Block, stop <- chan struct{}) { +func (self *CpuAgent) mine(block *types.Block, stop <-chan struct{}) { glog.V(logger.Debug).Infof("(re)started agent[%d]. mining...\n", self.index) // Mine nonce, mixDigest := self.pow.Search(block, stop) if nonce != 0 { - block.SetNonce(nonce) - block.Header().MixDigest = common.BytesToHash(mixDigest) - self.returnCh <- block + self.returnCh <- block.WithMiningResult(nonce, common.BytesToHash(mixDigest)) } else { self.returnCh <- nil } diff --git a/miner/remote_agent.go b/miner/remote_agent.go index 80cc9053e1..6a44782f6d 100644 --- a/miner/remote_agent.go +++ b/miner/remote_agent.go @@ -81,9 +81,7 @@ func (a *RemoteAgent) SubmitWork(nonce uint64, mixDigest, seedHash common.Hash) // Make sure the external miner was working on the right hash if a.currentWork != nil && a.work != nil { - a.currentWork.SetNonce(nonce) - a.currentWork.Header().MixDigest = mixDigest - a.returnCh <- a.currentWork + a.returnCh <- a.currentWork.WithMiningResult(nonce, mixDigest) //a.returnCh <- Work{a.currentWork.Number().Uint64(), nonce, mixDigest.Bytes(), seedHash.Bytes()} return true } diff --git a/miner/worker.go b/miner/worker.go index 55c23376cd..3a2d7a41b1 100644 --- a/miner/worker.go +++ b/miner/worker.go @@ -49,10 +49,8 @@ type uint64RingBuffer struct { // environment is the workers current environment and holds // all of the current state information type environment struct { - totalUsedGas *big.Int // total gas usage in the cycle state *state.StateDB // apply state changes here coinbase *state.StateObject // the miner's account - block *types.Block // the new block ancestors *set.Set // ancestor set (used for checking uncle parent validity) family *set.Set // family set (used for checking uncle invalidity) uncles *set.Set // uncle set @@ -63,22 +61,12 @@ type environment struct { ownedAccounts *set.Set lowGasTxs types.Transactions localMinedBlocks *uint64RingBuffer // the most recent block numbers that were mined locally (used to check block inclusion) -} -// env returns a new environment for the current cycle -func env(block *types.Block, eth core.Backend) *environment { - state := state.New(block.Root(), eth.StateDb()) - env := &environment{ - totalUsedGas: new(big.Int), - state: state, - block: block, - ancestors: set.New(), - family: set.New(), - uncles: set.New(), - coinbase: state.GetOrNewStateObject(block.Coinbase()), - } + block *types.Block // the new block - return env + header *types.Header + txs []*types.Transaction + receipts []*types.Receipt } // worker is the main object which takes care of applying messages to the new state @@ -137,14 +125,20 @@ func newWorker(coinbase common.Address, eth core.Backend) *worker { func (self *worker) pendingState() *state.StateDB { self.currentMu.Lock() defer self.currentMu.Unlock() - return self.current.state } func (self *worker) pendingBlock() *types.Block { self.currentMu.Lock() defer self.currentMu.Unlock() - + if atomic.LoadInt32(&self.mining) == 0 { + return types.NewBlock( + self.current.header, + self.current.txs, + nil, + self.current.receipts, + ) + } return self.current.block } @@ -206,7 +200,7 @@ out: // Apply transaction to the pending state if we're not mining if atomic.LoadInt32(&self.mining) == 0 { self.mu.Lock() - self.commitTransactions(types.Transactions{ev.Tx}) + self.current.commitTransactions(types.Transactions{ev.Tx}, self.gasPrice, self.proc) self.mu.Unlock() } } @@ -259,8 +253,8 @@ func (self *worker) wait() { jsonlogger.LogJson(&logger.EthMinerNewBlock{ BlockHash: block.Hash().Hex(), BlockNumber: block.Number(), - ChainHeadHash: block.ParentHeaderHash.Hex(), - BlockPrevHash: block.ParentHeaderHash.Hex(), + ChainHeadHash: block.ParentHash().Hex(), + BlockPrevHash: block.ParentHash().Hex(), }) } else { self.commitNewWork() @@ -271,14 +265,12 @@ func (self *worker) wait() { func (self *worker) push() { if atomic.LoadInt32(&self.mining) == 1 { - self.current.block.SetRoot(self.current.state.Root()) - // push new work to agents for _, agent := range self.agents { atomic.AddInt32(&self.atWork, 1) if agent.Work() != nil { - agent.Work() <- self.current.block.Copy() + agent.Work() <- self.current.block } else { common.Report(fmt.Sprintf("%v %T\n", agent, agent)) } @@ -286,22 +278,20 @@ func (self *worker) push() { } } -func (self *worker) makeCurrent() { - block := self.chain.NewBlock(self.coinbase) - parent := self.chain.GetBlock(block.ParentHash()) - // TMP fix for build server ... - if parent == nil { - return +// makeCurrent creates a new environment for the current cycle. +func (self *worker) makeCurrent(parent *types.Block, header *types.Header) { + state := state.New(parent.Root(), self.eth.StateDb()) + current := &environment{ + state: state, + ancestors: set.New(), + family: set.New(), + uncles: set.New(), + header: header, + coinbase: state.GetOrNewStateObject(self.coinbase), } - if block.Time() <= parent.Time() { - block.Header().Time = parent.Header().Time + 1 - } - block.Header().Extra = self.extra - // when 08 is processed ancestors contain 07 (quick block) - current := env(block, self.eth) - for _, ancestor := range self.chain.GetAncestors(block, 7) { + for _, ancestor := range self.chain.GetBlocksFromHash(parent.Hash(), 7) { for _, uncle := range ancestor.Uncles() { current.family.Add(uncle.Hash()) } @@ -309,6 +299,7 @@ func (self *worker) makeCurrent() { current.ancestors.Add(ancestor.Hash()) } accounts, _ := self.eth.AccountManager().Accounts() + // Keep track of transactions which return errors so they can be removed current.remove = set.New() current.tcount = 0 @@ -318,9 +309,6 @@ func (self *worker) makeCurrent() { if self.current != nil { current.localMinedBlocks = self.current.localMinedBlocks } - - current.coinbase.SetGasLimit(core.CalcGasLimit(parent)) - self.current = current } @@ -352,13 +340,13 @@ func (self *worker) isBlockLocallyMined(deepBlockNum uint64) bool { //Does the block at {deepBlockNum} send earnings to my coinbase? var block = self.chain.GetBlockByNumber(deepBlockNum) - return block != nil && block.Header().Coinbase == self.coinbase + return block != nil && block.Coinbase() == self.coinbase } func (self *worker) logLocalMinedBlocks(previous *environment) { if previous != nil && self.current.localMinedBlocks != nil { - nextBlockNum := self.current.block.Number().Uint64() - for checkBlockNum := previous.block.Number().Uint64(); checkBlockNum < nextBlockNum; checkBlockNum++ { + nextBlockNum := self.current.block.NumberU64() + for checkBlockNum := previous.block.NumberU64(); checkBlockNum < nextBlockNum; checkBlockNum++ { inspectBlockNum := checkBlockNum - miningLogAtDepth if self.isBlockLocallyMined(inspectBlockNum) { glog.V(logger.Info).Infof("🔨 🔗 Mined %d blocks back: block #%v", miningLogAtDepth, inspectBlockNum) @@ -376,18 +364,35 @@ func (self *worker) commitNewWork() { defer self.currentMu.Unlock() tstart := time.Now() + parent := self.chain.CurrentBlock() + tstamp := tstart.Unix() + if tstamp <= parent.Time() { + tstamp = parent.Time() + 1 + } + num := parent.Number() + header := &types.Header{ + ParentHash: parent.Hash(), + Number: num.Add(num, common.Big1), + Difficulty: core.CalcDifficulty(tstamp, parent.Time(), parent.Difficulty()), + GasLimit: core.CalcGasLimit(parent), + GasUsed: new(big.Int), + Coinbase: self.coinbase, + Extra: self.extra, + Time: uint64(tstamp), + } previous := self.current - self.makeCurrent() + self.makeCurrent(parent, header) current := self.current + // commit transactions for this run. transactions := self.eth.TxPool().GetTransactions() sort.Sort(types.TxByNonce{transactions}) - - // commit transactions for this run - self.commitTransactions(transactions) + current.coinbase.SetGasLimit(header.GasLimit) + current.commitTransactions(transactions, self.gasPrice, self.proc) self.eth.TxPool().RemoveTransactions(current.lowGasTxs) + // compute uncles for the new block. var ( uncles []*types.Header badUncles []common.Hash @@ -396,88 +401,76 @@ func (self *worker) commitNewWork() { if len(uncles) == 2 { break } - if err := self.commitUncle(uncle.Header()); err != nil { if glog.V(logger.Ridiculousness) { glog.V(logger.Detail).Infof("Bad uncle found and will be removed (%x)\n", hash[:4]) glog.V(logger.Detail).Infoln(uncle) } - badUncles = append(badUncles, hash) } else { glog.V(logger.Debug).Infof("commiting %x as uncle\n", hash[:4]) uncles = append(uncles, uncle.Header()) } } + for _, hash := range badUncles { + delete(self.possibleUncles, hash) + } - // We only care about logging if we're actually mining + // commit state root after all state transitions. + core.AccumulateRewards(self.current.state, header, uncles) + current.state.Update() + header.Root = current.state.Root() + + // create the new block whose nonce will be mined. + current.block = types.NewBlock(header, current.txs, uncles, current.receipts) + + // We only care about logging if we're actually mining. if atomic.LoadInt32(&self.mining) == 1 { glog.V(logger.Info).Infof("commit new work on block %v with %d txs & %d uncles. Took %v\n", current.block.Number(), current.tcount, len(uncles), time.Since(tstart)) self.logLocalMinedBlocks(previous) } - for _, hash := range badUncles { - delete(self.possibleUncles, hash) - } - - self.current.block.SetUncles(uncles) - - core.AccumulateRewards(self.current.state, self.current.block) - - self.current.state.Update() - self.push() } -var ( - inclusionReward = new(big.Int).Div(core.BlockReward, big.NewInt(32)) - _uncleReward = new(big.Int).Mul(core.BlockReward, big.NewInt(15)) - uncleReward = new(big.Int).Div(_uncleReward, big.NewInt(16)) -) - func (self *worker) commitUncle(uncle *types.Header) error { - if self.current.uncles.Has(uncle.Hash()) { - // Error not unique + hash := uncle.Hash() + if self.current.uncles.Has(hash) { return core.UncleError("Uncle not unique") } - if !self.current.ancestors.Has(uncle.ParentHash) { return core.UncleError(fmt.Sprintf("Uncle's parent unknown (%x)", uncle.ParentHash[0:4])) } - - if self.current.family.Has(uncle.Hash()) { - return core.UncleError(fmt.Sprintf("Uncle already in family (%x)", uncle.Hash())) + if self.current.family.Has(hash) { + return core.UncleError(fmt.Sprintf("Uncle already in family (%x)", hash)) } self.current.uncles.Add(uncle.Hash()) - return nil } -func (self *worker) commitTransactions(transactions types.Transactions) { - current := self.current - +func (env *environment) commitTransactions(transactions types.Transactions, gasPrice *big.Int, proc *core.BlockProcessor) { for _, tx := range transactions { // We can skip err. It has already been validated in the tx pool from, _ := tx.From() // Check if it falls within margin. Txs from owned accounts are always processed. - if tx.GasPrice().Cmp(self.gasPrice) < 0 && !current.ownedAccounts.Has(from) { + if tx.GasPrice().Cmp(gasPrice) < 0 && !env.ownedAccounts.Has(from) { // ignore the transaction and transactor. We ignore the transactor // because nonce will fail after ignoring this transaction so there's // no point - current.lowGasTransactors.Add(from) + env.lowGasTransactors.Add(from) - glog.V(logger.Info).Infof("transaction(%x) below gas price (tx=%v ask=%v). All sequential txs from this address(%x) will be ignored\n", tx.Hash().Bytes()[:4], common.CurrencyToString(tx.GasPrice()), common.CurrencyToString(self.gasPrice), from[:4]) + glog.V(logger.Info).Infof("transaction(%x) below gas price (tx=%v ask=%v). All sequential txs from this address(%x) will be ignored\n", tx.Hash().Bytes()[:4], common.CurrencyToString(tx.GasPrice()), common.CurrencyToString(gasPrice), from[:4]) } // Continue with the next transaction if the transaction sender is included in // the low gas tx set. This will also remove the tx and all sequential transaction // from this transactor - if current.lowGasTransactors.Has(from) { + if env.lowGasTransactors.Has(from) { // add tx to the low gas set. This will be removed at the end of the run // owned accounts are ignored - if !current.ownedAccounts.Has(from) { - current.lowGasTxs = append(current.lowGasTxs, tx) + if !env.ownedAccounts.Has(from) { + env.lowGasTxs = append(env.lowGasTxs, tx) } continue } @@ -487,46 +480,41 @@ func (self *worker) commitTransactions(transactions types.Transactions) { // the transaction is processed (that could potentially be included in the block) it // will throw a nonce error because the previous transaction hasn't been processed. // Therefor we need to ignore any transaction after the ignored one. - if current.ignoredTransactors.Has(from) { + if env.ignoredTransactors.Has(from) { continue } - self.current.state.StartRecord(tx.Hash(), common.Hash{}, 0) + env.state.StartRecord(tx.Hash(), common.Hash{}, 0) - err := self.commitTransaction(tx) + err := env.commitTransaction(tx, proc) switch { case core.IsNonceErr(err) || core.IsInvalidTxErr(err): - current.remove.Add(tx.Hash()) + env.remove.Add(tx.Hash()) if glog.V(logger.Detail) { glog.Infof("TX (%x) failed, will be removed: %v\n", tx.Hash().Bytes()[:4], err) } case state.IsGasLimitErr(err): - from, _ := tx.From() // ignore the transactor so no nonce errors will be thrown for this account // next time the worker is run, they'll be picked up again. - current.ignoredTransactors.Add(from) + env.ignoredTransactors.Add(from) glog.V(logger.Detail).Infof("Gas limit reached for (%x) in this block. Continue to try smaller txs\n", from[:4]) default: - current.tcount++ + env.tcount++ } } - - self.current.block.Header().GasUsed = self.current.totalUsedGas } -func (self *worker) commitTransaction(tx *types.Transaction) error { - snap := self.current.state.Copy() - receipt, _, err := self.proc.ApplyTransaction(self.current.coinbase, self.current.state, self.current.block, tx, self.current.totalUsedGas, true) +func (env *environment) commitTransaction(tx *types.Transaction, proc *core.BlockProcessor) error { + snap := env.state.Copy() + receipt, _, err := proc.ApplyTransaction(env.coinbase, env.state, env.header, tx, env.header.GasUsed, true) if err != nil && (core.IsNonceErr(err) || state.IsGasLimitErr(err) || core.IsInvalidTxErr(err)) { - self.current.state.Set(snap) + env.state.Set(snap) return err } - - self.current.block.AddTransaction(tx) - self.current.block.AddReceipt(receipt) - + env.txs = append(env.txs, tx) + env.receipts = append(env.receipts, receipt) return nil } diff --git a/tests/block_test_util.go b/tests/block_test_util.go index 5fdc6402e0..450ef86a17 100644 --- a/tests/block_test_util.go +++ b/tests/block_test_util.go @@ -245,7 +245,7 @@ func (t *BlockTest) TryBlocksInsert(chainManager *core.ChainManager) error { if b.BlockHeader == nil { continue // OK - block is supposed to be invalid, continue with next block } else { - return fmt.Errorf("Block RLP decoding failed when expected to succeed: ", err) + return fmt.Errorf("Block RLP decoding failed when expected to succeed: %v", err) } } // RLP decoding worked, try to insert into chain: @@ -254,7 +254,7 @@ func (t *BlockTest) TryBlocksInsert(chainManager *core.ChainManager) error { if b.BlockHeader == nil { continue // OK - block is supposed to be invalid, continue with next block } else { - return fmt.Errorf("Block insertion into chain failed: ", err) + return fmt.Errorf("Block insertion into chain failed: %v", err) } } if b.BlockHeader == nil { @@ -262,7 +262,7 @@ func (t *BlockTest) TryBlocksInsert(chainManager *core.ChainManager) error { } err = t.validateBlockHeader(b.BlockHeader, cb.Header()) if err != nil { - return fmt.Errorf("Block header validation failed: ", err) + return fmt.Errorf("Block header validation failed: %v", err) } } return nil @@ -286,7 +286,7 @@ func (s *BlockTest) validateBlockHeader(h *btHeader, h2 *types.Header) error { expectedNonce := mustConvertBytes(h.Nonce) if !bytes.Equal(expectedNonce, h2.Nonce[:]) { - return fmt.Errorf("Nonce: expected: %v, decoded: %v", expectedNonce, h2.Nonce[:]) + return fmt.Errorf("Nonce: expected: %v, decoded: %v", expectedNonce, h2.Nonce) } expectedNumber := mustConvertBigInt(h.Number, 16) @@ -423,9 +423,8 @@ func mustConvertHeader(in btHeader) *types.Header { GasLimit: mustConvertBigInt(in.GasLimit, 16), Difficulty: mustConvertBigInt(in.Difficulty, 16), Time: mustConvertUint(in.Timestamp, 16), + Nonce: types.EncodeNonce(mustConvertUint(in.Nonce, 16)), } - // XXX cheats? :-) - header.SetNonce(mustConvertUint(in.Nonce, 16)) return header } diff --git a/xeth/xeth.go b/xeth/xeth.go index 11d30ebaca..0dbedff43e 100644 --- a/xeth/xeth.go +++ b/xeth/xeth.go @@ -209,8 +209,8 @@ func (self *XEth) AtStateNum(num int64) *XEth { // - could be removed in favour of mining on testdag (natspec e2e + networking) // + filters func (self *XEth) ApplyTestTxs(statedb *state.StateDB, address common.Address, txc uint64) (uint64, *XEth) { - - block := self.backend.ChainManager().NewBlock(address) + chain := self.backend.ChainManager() + header := chain.CurrentBlock().Header() coinbase := statedb.GetStateObject(address) coinbase.SetGasLimit(big.NewInt(10000000)) txs := self.backend.TxPool().GetQueuedTransactions() @@ -218,7 +218,7 @@ func (self *XEth) ApplyTestTxs(statedb *state.StateDB, address common.Address, t for i := 0; i < len(txs); i++ { for _, tx := range txs { if tx.Nonce() == txc { - _, _, err := core.ApplyMessage(core.NewEnv(statedb, self.backend.ChainManager(), tx, block), tx, coinbase) + _, _, err := core.ApplyMessage(core.NewEnv(statedb, self.backend.ChainManager(), tx, header), tx, coinbase) if err != nil { panic(err) } @@ -845,8 +845,8 @@ func (self *XEth) Call(fromStr, toStr, valueStr, gasStr, gasPriceStr, dataStr st msg.gasPrice = self.DefaultGasPrice() } - block := self.CurrentBlock() - vmenv := core.NewEnv(statedb, self.backend.ChainManager(), msg, block) + header := self.CurrentBlock().Header() + vmenv := core.NewEnv(statedb, self.backend.ChainManager(), msg, header) res, gas, err := core.ApplyMessage(vmenv, msg, from) return common.ToHex(res), gas.String(), err From ceaf1c080b4047c26d433e778d4d3142f4e29d24 Mon Sep 17 00:00:00 2001 From: Felix Lange <fjl@twurst.com> Date: Fri, 19 Jun 2015 01:57:16 +0200 Subject: [PATCH 083/156] core: add GenerateChain, GenesisBlockForTesting --- core/block_processor_test.go | 7 +- core/chain_makers.go | 225 ++++++++++++++++++++++------------- core/chain_makers_test.go | 78 ++++++++++++ core/chain_manager_test.go | 6 +- core/genesis.go | 18 +++ 5 files changed, 242 insertions(+), 92 deletions(-) create mode 100644 core/chain_makers_test.go diff --git a/core/block_processor_test.go b/core/block_processor_test.go index bd77a2fc2e..5931a5f5ef 100644 --- a/core/block_processor_test.go +++ b/core/block_processor_test.go @@ -27,16 +27,17 @@ func proc() (*BlockProcessor, *ChainManager) { func TestNumber(t *testing.T) { pow := ezp.New() + _, chain := proc() - bp, chain := proc() - header := makeHeader(chain.Genesis(), 0, bp.db, 0) + statedb := state.New(chain.Genesis().Root(), chain.stateDb) + header := makeHeader(chain.Genesis(), statedb) header.Number = big.NewInt(3) err := ValidateHeader(pow, header, chain.Genesis().Header(), false) if err != BlockNumberErr { t.Errorf("expected block number error, got %q", err) } - header = makeHeader(chain.Genesis(), 0, bp.db, 0) + header = makeHeader(chain.Genesis(), statedb) err = ValidateHeader(pow, header, chain.Genesis().Header(), false) if err == BlockNumberErr { t.Errorf("didn't expect block number error") diff --git a/core/chain_makers.go b/core/chain_makers.go index e704fd0889..72ae7970eb 100644 --- a/core/chain_makers.go +++ b/core/chain_makers.go @@ -1,7 +1,6 @@ package core import ( - "fmt" "math/big" "github.com/ethereum/go-ethereum/common" @@ -11,7 +10,8 @@ import ( "github.com/ethereum/go-ethereum/pow" ) -// So we can generate blocks easily +// FakePow is a non-validating proof of work implementation. +// It returns true from Verify for any block. type FakePow struct{} func (f FakePow) Search(block pow.Block, stop <-chan struct{}) (uint64, []byte) { @@ -23,69 +23,125 @@ func (f FakePow) Turbo(bool) {} // So we can deterministically seed different blockchains var ( - CanonicalSeed = 1 - ForkSeed = 2 + canonicalSeed = 1 + forkSeed = 2 ) -// Utility functions for making chains on the fly -// Exposed for sake of testing from other packages (eg. go-ethash) -func MakeBlock(bman *BlockProcessor, parent *types.Block, i int, db common.Database, seed int) *types.Block { - return types.NewBlock(makeHeader(parent, i, db, seed), nil, nil, nil) +// BlockGen creates blocks for testing. +// See GenerateChain for a detailed explanation. +type BlockGen struct { + i int + parent *types.Block + chain []*types.Block + header *types.Header + statedb *state.StateDB + + coinbase *state.StateObject + txs []*types.Transaction + receipts []*types.Receipt + uncles []*types.Header } -func MakeChain(bman *BlockProcessor, parent *types.Block, max int, db common.Database, seed int) types.Blocks { - return makeChain(bman, parent, max, db, seed) -} - -func NewChainMan(block *types.Block, eventMux *event.TypeMux, db common.Database) *ChainManager { - return newChainManager(block, eventMux, db) -} - -func NewBlockProc(db common.Database, cman *ChainManager, eventMux *event.TypeMux) *BlockProcessor { - return newBlockProcessor(db, cman, eventMux) -} - -func NewCanonical(n int, db common.Database) (*BlockProcessor, error) { - return newCanonical(n, db) -} - -// makeHeader creates the header for a new empty block, simulating -// what miner would do. We seed chains by the first byte of the coinbase. -func makeHeader(parent *types.Block, i int, db common.Database, seed int) *types.Header { - var addr common.Address - addr[0], addr[19] = byte(seed), byte(i) // 'random' coinbase - time := parent.Time() + 10 // block time is fixed at 10 seconds - - // ensure that the block's coinbase has the block reward in the state. - state := state.New(parent.Root(), db) - cbase := state.GetOrNewStateObject(addr) - cbase.SetGasLimit(CalcGasLimit(parent)) - cbase.AddBalance(BlockReward) - state.Update() - - return &types.Header{ - Root: state.Root(), - ParentHash: parent.Hash(), - Coinbase: addr, - Difficulty: CalcDifficulty(time, parent.Time(), parent.Difficulty()), - Number: new(big.Int).Add(parent.Number(), common.Big1), - Time: uint64(time), - GasLimit: CalcGasLimit(parent), - } -} - -// makeChain creates a valid chain of empty blocks. -func makeChain(bman *BlockProcessor, parent *types.Block, max int, db common.Database, seed int) types.Blocks { - bman.bc.currentBlock = parent - blocks := make(types.Blocks, max) - for i := 0; i < max; i++ { - block := types.NewBlock(makeHeader(parent, i, db, seed), nil, nil, nil) - // Use ProcessWithParent to verify that we have produced a valid block. - _, err := bman.processWithParent(block, parent) - if err != nil { - fmt.Println("process with parent failed", err) - panic(err) +// SetCoinbase sets the coinbase of the generated block. +// It can be called at most once. +func (b *BlockGen) SetCoinbase(addr common.Address) { + if b.coinbase != nil { + if len(b.txs) > 0 { + panic("coinbase must be set before adding transactions") } + panic("coinbase can only be set once") + } + b.header.Coinbase = addr + b.coinbase = b.statedb.GetOrNewStateObject(addr) + b.coinbase.SetGasLimit(b.header.GasLimit) +} + +// SetExtra sets the extra data field of the generated block. +func (b *BlockGen) SetExtra(data []byte) { + b.header.Extra = data +} + +// AddTx adds a transaction to the generated block. If no coinbase has +// been set, the block's coinbase is set to the zero address. +// +// AddTx panics if the transaction cannot be executed. In addition to +// the protocol-imposed limitations (gas limit, etc.), there are some +// further limitations on the content of transactions that can be +// added. Notably, contract code relying on the BLOCKHASH instruction +// will panic during execution. +func (b *BlockGen) AddTx(tx *types.Transaction) { + if b.coinbase == nil { + b.SetCoinbase(common.Address{}) + } + _, gas, err := ApplyMessage(NewEnv(b.statedb, nil, tx, b.header), tx, b.coinbase) + if err != nil { + panic(err) + } + b.statedb.Update() + b.header.GasUsed.Add(b.header.GasUsed, gas) + receipt := types.NewReceipt(b.statedb.Root().Bytes(), b.header.GasUsed) + logs := b.statedb.GetLogs(tx.Hash()) + receipt.SetLogs(logs) + receipt.Bloom = types.CreateBloom(types.Receipts{receipt}) + b.txs = append(b.txs, tx) + b.receipts = append(b.receipts, receipt) +} + +// TxNonce returns the next valid transaction nonce for the +// account at addr. It panics if the account does not exist. +func (b *BlockGen) TxNonce(addr common.Address) uint64 { + if !b.statedb.HasAccount(addr) { + panic("account does not exist") + } + return b.statedb.GetNonce(addr) +} + +// AddUncle adds an uncle header to the generated block. +func (b *BlockGen) AddUncle(h *types.Header) { + b.uncles = append(b.uncles, h) +} + +// PrevBlock returns a previously generated block by number. It panics if +// num is greater or equal to the number of the block being generated. +// For index -1, PrevBlock returns the parent block given to GenerateChain. +func (b *BlockGen) PrevBlock(index int) *types.Block { + if index >= b.i { + panic("block index out of range") + } + if index == -1 { + return b.parent + } + return b.chain[index] +} + +// GenerateChain creates a chain of n blocks. The first block's +// parent will be the provided parent. db is used to store +// intermediate states and should contain the parent's state trie. +// +// The generator function is called with a new block generator for +// every block. Any transactions and uncles added to the generator +// become part of the block. If gen is nil, the blocks will be empty +// and their coinbase will be the zero address. +// +// Blocks created by GenerateChain do not contain valid proof of work +// values. Inserting them into ChainManager requires use of FakePow or +// a similar non-validating proof of work implementation. +func GenerateChain(parent *types.Block, db common.Database, n int, gen func(int, *BlockGen)) []*types.Block { + statedb := state.New(parent.Root(), db) + blocks := make(types.Blocks, n) + genblock := func(i int, h *types.Header) *types.Block { + b := &BlockGen{parent: parent, i: i, chain: blocks, header: h, statedb: statedb} + if gen != nil { + gen(i, b) + } + AccumulateRewards(statedb, h, b.uncles) + statedb.Update() + h.Root = statedb.Root() + return types.NewBlock(h, b.txs, b.uncles, b.receipts) + } + for i := 0; i < n; i++ { + header := makeHeader(parent, statedb) + block := genblock(i, header) block.Td = CalcTD(block, parent) blocks[i] = block parent = block @@ -93,41 +149,38 @@ func makeChain(bman *BlockProcessor, parent *types.Block, max int, db common.Dat return blocks } -// Create a new chain manager starting from given block -// Effectively a fork factory -func newChainManager(block *types.Block, eventMux *event.TypeMux, db common.Database) *ChainManager { - genesis := GenesisBlock(0, db) - bc := &ChainManager{blockDb: db, stateDb: db, genesisBlock: genesis, eventMux: eventMux, pow: FakePow{}} - bc.txState = state.ManageState(state.New(genesis.Root(), db)) - bc.futureBlocks = NewBlockCache(1000) - if block == nil { - bc.Reset() - } else { - bc.currentBlock = block - bc.td = block.Td +func makeHeader(parent *types.Block, state *state.StateDB) *types.Header { + time := parent.Time() + 10 // block time is fixed at 10 seconds + return &types.Header{ + Root: state.Root(), + ParentHash: parent.Hash(), + Coinbase: parent.Coinbase(), + Difficulty: CalcDifficulty(time, parent.Time(), parent.Difficulty()), + GasLimit: CalcGasLimit(parent), + GasUsed: new(big.Int), + Number: new(big.Int).Add(parent.Number(), common.Big1), + Time: uint64(time), } - return bc } -// block processor with fake pow -func newBlockProcessor(db common.Database, cman *ChainManager, eventMux *event.TypeMux) *BlockProcessor { - chainMan := newChainManager(nil, eventMux, db) - bman := NewBlockProcessor(db, db, FakePow{}, chainMan, eventMux) - return bman -} - -// Make a new, deterministic canonical chain by running InsertChain -// on result of makeChain. +// newCanonical creates a new deterministic canonical chain by running +// InsertChain on the result of makeChain. func newCanonical(n int, db common.Database) (*BlockProcessor, error) { - eventMux := &event.TypeMux{} - - bman := newBlockProcessor(db, newChainManager(nil, eventMux, db), eventMux) + evmux := &event.TypeMux{} + chainman, _ := NewChainManager(GenesisBlock(0, db), db, db, FakePow{}, evmux) + bman := NewBlockProcessor(db, db, FakePow{}, chainman, evmux) bman.bc.SetProcessor(bman) parent := bman.bc.CurrentBlock() if n == 0 { return bman, nil } - lchain := makeChain(bman, parent, n, db, CanonicalSeed) + lchain := makeChain(parent, n, db, canonicalSeed) _, err := bman.bc.InsertChain(lchain) return bman, err } + +func makeChain(parent *types.Block, n int, db common.Database, seed int) []*types.Block { + return GenerateChain(parent, db, n, func(i int, b *BlockGen) { + b.SetCoinbase(common.Address{0: byte(seed), 19: byte(i)}) + }) +} diff --git a/core/chain_makers_test.go b/core/chain_makers_test.go new file mode 100644 index 0000000000..d5125e1c34 --- /dev/null +++ b/core/chain_makers_test.go @@ -0,0 +1,78 @@ +package core + +import ( + "fmt" + "math/big" + + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/event" + "github.com/ethereum/go-ethereum/params" +) + +func ExampleGenerateChain() { + var ( + key1, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") + key2, _ = crypto.HexToECDSA("8a1f9a8f95be41cd7ccb6168179afb4504aefe388d1e14474d32c45c72ce7b7a") + key3, _ = crypto.HexToECDSA("49a7b37aa6f6645917e7b807e9d1c00d4fa71f18343b0d4122a4d2df64dd6fee") + addr1 = crypto.PubkeyToAddress(key1.PublicKey) + addr2 = crypto.PubkeyToAddress(key2.PublicKey) + addr3 = crypto.PubkeyToAddress(key3.PublicKey) + db, _ = ethdb.NewMemDatabase() + ) + + // Ensure that key1 has some funds in the genesis block. + genesis := GenesisBlockForTesting(db, addr1, big.NewInt(1000000)) + + // This call generates a chain of 5 blocks. The function runs for + // each block and adds different features to gen based on the + // block index. + chain := GenerateChain(genesis, db, 5, func(i int, gen *BlockGen) { + switch i { + case 0: + // In block 1, addr1 sends addr2 some ether. + tx, _ := types.NewTransaction(gen.TxNonce(addr1), addr2, big.NewInt(10000), params.TxGas, nil, nil).SignECDSA(key1) + gen.AddTx(tx) + case 1: + // In block 2, addr1 sends some more ether to addr2. + // addr2 passes it on to addr3. + tx1, _ := types.NewTransaction(gen.TxNonce(addr1), addr2, big.NewInt(1000), params.TxGas, nil, nil).SignECDSA(key1) + tx2, _ := types.NewTransaction(gen.TxNonce(addr2), addr3, big.NewInt(1000), params.TxGas, nil, nil).SignECDSA(key2) + gen.AddTx(tx1) + gen.AddTx(tx2) + case 2: + // Block 3 is empty but was mined by addr3. + gen.SetCoinbase(addr3) + gen.SetExtra([]byte("yeehaw")) + case 3: + // Block 4 includes blocks 2 and 3 as uncle headers (with modified extra data). + b2 := gen.PrevBlock(1).Header() + b2.Extra = []byte("foo") + gen.AddUncle(b2) + b3 := gen.PrevBlock(2).Header() + b3.Extra = []byte("foo") + gen.AddUncle(b3) + } + }) + + // Import the chain. This runs all block validation rules. + evmux := &event.TypeMux{} + chainman, _ := NewChainManager(genesis, db, db, FakePow{}, evmux) + chainman.SetProcessor(NewBlockProcessor(db, db, FakePow{}, chainman, evmux)) + if i, err := chainman.InsertChain(chain); err != nil { + fmt.Printf("insert error (block %d): %v\n", i, err) + return + } + + state := chainman.State() + fmt.Printf("last block: #%d\n", chainman.CurrentBlock().Number()) + fmt.Println("balance of addr1:", state.GetBalance(addr1)) + fmt.Println("balance of addr2:", state.GetBalance(addr2)) + fmt.Println("balance of addr3:", state.GetBalance(addr3)) + // Output: + // last block: #5 + // balance of addr1: 989000 + // balance of addr2: 10000 + // balance of addr3: 5906250000000001000 +} diff --git a/core/chain_manager_test.go b/core/chain_manager_test.go index afec1d0f19..c37cd1a5e2 100644 --- a/core/chain_manager_test.go +++ b/core/chain_manager_test.go @@ -67,7 +67,7 @@ func testFork(t *testing.T, bman *BlockProcessor, i, N int, f func(td1, td2 *big // extend the fork parent := bman2.bc.CurrentBlock() - chainB := makeChain(bman2, parent, N, db, ForkSeed) + chainB := makeChain(parent, N, db, forkSeed) _, err = bman2.bc.InsertChain(chainB) if err != nil { t.Fatal("Insert chain error for fork:", err) @@ -256,7 +256,7 @@ func TestBrokenChain(t *testing.T) { } bman2.bc.SetProcessor(bman2) parent := bman2.bc.CurrentBlock() - chainB := makeChain(bman2, parent, 5, db2, ForkSeed) + chainB := makeChain(parent, 5, db2, forkSeed) chainB = chainB[1:] _, err = testChain(chainB, bman) if err == nil { @@ -444,7 +444,7 @@ func TestInsertNonceError(t *testing.T) { genesis := GenesisBlock(0, db) bc := chm(genesis, db) bc.processor = NewBlockProcessor(db, db, bc.pow, bc, bc.eventMux) - blocks := makeChain(bc.processor.(*BlockProcessor), bc.currentBlock, i, db, 0) + blocks := makeChain(bc.currentBlock, i, db, 0) fail := rand.Int() % len(blocks) failblock := blocks[fail] diff --git a/core/genesis.go b/core/genesis.go index de2eee9db9..df13466ec5 100644 --- a/core/genesis.go +++ b/core/genesis.go @@ -3,6 +3,7 @@ package core import ( "encoding/json" "fmt" + "math/big" "os" "github.com/ethereum/go-ethereum/common" @@ -56,3 +57,20 @@ var GenesisAccounts = []byte(`{ "e6716f9544a56c530d868e4bfbacb172315bdead": {"balance": "1606938044258990275541962092341162602522202993782792835301376"}, "1a26338f0d905e295fccb71fa9ea849ffa12aaf4": {"balance": "1606938044258990275541962092341162602522202993782792835301376"} }`) + +// GenesisBlockForTesting creates a block in which addr has the given wei balance. +// The state trie of the block is written to db. +func GenesisBlockForTesting(db common.Database, addr common.Address, balance *big.Int) *types.Block { + statedb := state.New(common.Hash{}, db) + obj := statedb.GetOrNewStateObject(addr) + obj.SetBalance(balance) + statedb.Update() + statedb.Sync() + block := types.NewBlock(&types.Header{ + Difficulty: params.GenesisDifficulty, + GasLimit: params.GenesisGasLimit, + Root: statedb.Root(), + }, nil, nil, nil) + block.Td = params.GenesisDifficulty + return block +} From e0e5f747765cec7050dd5ea4eed896e73ef0ab1f Mon Sep 17 00:00:00 2001 From: Felix Lange <fjl@twurst.com> Date: Sat, 27 Jun 2015 02:57:53 +0200 Subject: [PATCH 084/156] eth/downloader, eth/fetcher: use core.GenerateChain in tests TestMadeupParentBlockChainAttack has been deleted because it was too hard to port and the attack that it checks the prevention of is being averted in a different way (through a protocol change). --- eth/downloader/downloader_test.go | 245 ++++++++++++------------------ eth/fetcher/fetcher_test.go | 121 +++++---------- 2 files changed, 135 insertions(+), 231 deletions(-) diff --git a/eth/downloader/downloader_test.go b/eth/downloader/downloader_test.go index fb8aa7e4b5..7feca8782e 100644 --- a/eth/downloader/downloader_test.go +++ b/eth/downloader/downloader_test.go @@ -1,7 +1,7 @@ package downloader import ( - "encoding/binary" + "crypto/rand" "errors" "fmt" "math/big" @@ -12,61 +12,47 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/event" ) var ( - knownHash = common.Hash{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1} - unknownHash = common.Hash{2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2} - bannedHash = common.Hash{3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3} - - genesis = createBlock(1, common.Hash{}, knownHash) + testdb, _ = ethdb.NewMemDatabase() + genesis = core.GenesisBlockForTesting(testdb, common.Address{}, big.NewInt(0)) ) -// idCounter is used by the createHashes method the generate deterministic but unique hashes -var idCounter = int64(2) // #1 is the genesis block - -// createHashes generates a batch of hashes rooted at a specific point in the chain. -func createHashes(amount int, root common.Hash) (hashes []common.Hash) { - hashes = make([]common.Hash, amount+1) - hashes[len(hashes)-1] = root - - for i := 0; i < len(hashes)-1; i++ { - binary.BigEndian.PutUint64(hashes[i][:8], uint64(idCounter)) - idCounter++ +// makeChain creates a chain of n blocks starting at and including +// parent. the returned hash chain is ordered head->parent. +func makeChain(n int, seed byte, parent *types.Block) ([]common.Hash, map[common.Hash]*types.Block) { + blocks := core.GenerateChain(parent, testdb, n, func(i int, gen *core.BlockGen) { + gen.SetCoinbase(common.Address{seed}) + }) + hashes := make([]common.Hash, n+1) + hashes[len(hashes)-1] = parent.Hash() + blockm := make(map[common.Hash]*types.Block, n+1) + blockm[parent.Hash()] = parent + for i, b := range blocks { + hashes[len(hashes)-i-2] = b.Hash() + blockm[b.Hash()] = b } - return + return hashes, blockm } -// createBlock assembles a new block at the given chain height. -func createBlock(i int, parent, hash common.Hash) *types.Block { - header := &types.Header{ - Hash: hash, - Number: big.NewInt(int64(i)) +// makeChainFork creates two chains of length n, such that h1[:f] and +// h2[:f] are different but have a common suffix of length n-f. +func makeChainFork(n, f int, parent *types.Block) (h1, h2 []common.Hash, b1, b2 map[common.Hash]*types.Block) { + // Create the common suffix. + h, b := makeChain(n-f-1, 0, parent) + // Create the forks. + h1, b1 = makeChain(f, 1, b[h[0]]) + h1 = append(h1, h[1:]...) + h2, b2 = makeChain(f, 2, b[h[0]]) + h2 = append(h2, h[1:]...) + for hash, block := range b { + b1[hash] = block + b2[hash] = block } - block := types.NewBlockWithHeader(header) - block.HeaderHash = hash - block.ParentHeaderHash = parent - return block -} - -// copyBlock makes a deep copy of a block suitable for local modifications. -func copyBlock(block *types.Block) *types.Block { - return createBlock(int(block.Number().Int64()), block.ParentHeaderHash, block.HeaderHash) -} - -// createBlocksFromHashes assembles a collection of blocks, each having a correct -// place in the given hash chain. -func createBlocksFromHashes(hashes []common.Hash) map[common.Hash]*types.Block { - blocks := make(map[common.Hash]*types.Block) - for i := 0; i < len(hashes); i++ { - parent := knownHash - if i < len(hashes)-1 { - parent = hashes[i+1] - } - blocks[hashes[i]] = createBlock(len(hashes)-i, parent, hashes[i]) - } - return blocks + return h1, h2, b1, b2 } // downloadTester is a test simulator for mocking out local block chain. @@ -84,8 +70,8 @@ type downloadTester struct { // newTester creates a new downloader test mocker. func newTester() *downloadTester { tester := &downloadTester{ - ownHashes: []common.Hash{knownHash}, - ownBlocks: map[common.Hash]*types.Block{knownHash: genesis}, + ownHashes: []common.Hash{genesis.Hash()}, + ownBlocks: map[common.Hash]*types.Block{genesis.Hash(): genesis}, peerHashes: make(map[string][]common.Hash), peerBlocks: make(map[string]map[common.Hash]*types.Block), } @@ -139,10 +125,9 @@ func (dl *downloadTester) newSlowPeer(id string, hashes []common.Hash, blocks ma // Assign the owned hashes and blocks to the peer (deep copy) dl.peerHashes[id] = make([]common.Hash, len(hashes)) copy(dl.peerHashes[id], hashes) - dl.peerBlocks[id] = make(map[common.Hash]*types.Block) for hash, block := range blocks { - dl.peerBlocks[id][hash] = copyBlock(block) + dl.peerBlocks[id][hash] = block } } return err @@ -213,8 +198,7 @@ func (dl *downloadTester) peerGetBlocksFn(id string, delay time.Duration) func([ func TestSynchronisation(t *testing.T) { // Create a small enough block chain to download and the tester targetBlocks := blockCacheLimit - 15 - hashes := createHashes(targetBlocks, knownHash) - blocks := createBlocksFromHashes(hashes) + hashes, blocks := makeChain(targetBlocks, 0, genesis) tester := newTester() tester.newPeer("peer", hashes, blocks) @@ -245,8 +229,7 @@ func TestInactiveDownloader(t *testing.T) { func TestCancel(t *testing.T) { // Create a small enough block chain to download and the tester targetBlocks := blockCacheLimit - 15 - hashes := createHashes(targetBlocks, knownHash) - blocks := createBlocksFromHashes(hashes) + hashes, blocks := makeChain(targetBlocks, 0, genesis) tester := newTester() tester.newPeer("peer", hashes, blocks) @@ -273,8 +256,7 @@ func TestCancel(t *testing.T) { func TestThrottling(t *testing.T) { // Create a long block chain to download and the tester targetBlocks := 8 * blockCacheLimit - hashes := createHashes(targetBlocks, knownHash) - blocks := createBlocksFromHashes(hashes) + hashes, blocks := makeChain(targetBlocks, 0, genesis) tester := newTester() tester.newPeer("peer", hashes, blocks) @@ -330,9 +312,7 @@ func TestMultiSynchronisation(t *testing.T) { // Create various peers with various parts of the chain targetPeers := 16 targetBlocks := targetPeers*blockCacheLimit - 15 - - hashes := createHashes(targetBlocks, knownHash) - blocks := createBlocksFromHashes(hashes) + hashes, blocks := makeChain(targetBlocks, 0, genesis) tester := newTester() for i := 0; i < targetPeers; i++ { @@ -365,9 +345,7 @@ func TestSlowSynchronisation(t *testing.T) { targetCycles := 2 targetBlocks := targetCycles*blockCacheLimit - 15 targetIODelay := time.Second - - hashes := createHashes(targetBlocks, knownHash) - blocks := createBlocksFromHashes(hashes) + hashes, blocks := makeChain(targetBlocks, 0, genesis) tester.newSlowPeer("fast", hashes, blocks, 0) tester.newSlowPeer("slow", hashes, blocks, targetIODelay) @@ -392,14 +370,12 @@ func TestSlowSynchronisation(t *testing.T) { func TestNonExistingParentAttack(t *testing.T) { tester := newTester() - // Forge a single-link chain with a forged header - hashes := createHashes(1, knownHash) - blocks := createBlocksFromHashes(hashes) + hashes, blocks := makeChain(1, 0, genesis) tester.newPeer("valid", hashes, blocks) - hashes = createHashes(1, knownHash) - blocks = createBlocksFromHashes(hashes) - blocks[hashes[0]].ParentHeaderHash = unknownHash + wrongblock := types.NewBlock(&types.Header{}, nil, nil, nil) + wrongblock.Td = blocks[hashes[0]].Td + hashes, blocks = makeChain(1, 0, wrongblock) tester.newPeer("attack", hashes, blocks) // Try and sync with the malicious node and check that it fails @@ -424,8 +400,7 @@ func TestRepeatingHashAttack(t *testing.T) { // TODO: Is this thing valid?? tester := newTester() // Create a valid chain, but drop the last link - hashes := createHashes(blockCacheLimit, knownHash) - blocks := createBlocksFromHashes(hashes) + hashes, blocks := makeChain(blockCacheLimit, 0, genesis) tester.newPeer("valid", hashes, blocks) tester.newPeer("attack", hashes[:len(hashes)-1], blocks) @@ -455,11 +430,10 @@ func TestNonExistingBlockAttack(t *testing.T) { tester := newTester() // Create a valid chain, but forge the last link - hashes := createHashes(blockCacheLimit, knownHash) - blocks := createBlocksFromHashes(hashes) + hashes, blocks := makeChain(blockCacheLimit, 0, genesis) tester.newPeer("valid", hashes, blocks) - hashes[len(hashes)/2] = unknownHash + hashes[len(hashes)/2] = common.Hash{} tester.newPeer("attack", hashes, blocks) // Try and sync with the malicious node and check that it fails @@ -478,8 +452,7 @@ func TestInvalidHashOrderAttack(t *testing.T) { tester := newTester() // Create a valid long chain, but reverse some hashes within - hashes := createHashes(4*blockCacheLimit, knownHash) - blocks := createBlocksFromHashes(hashes) + hashes, blocks := makeChain(4*blockCacheLimit, 0, genesis) tester.newPeer("valid", hashes, blocks) chunk1 := make([]common.Hash, blockCacheLimit) @@ -509,11 +482,15 @@ func TestMadeupHashChainAttack(t *testing.T) { crossCheckCycle = 25 * time.Millisecond // Create a long chain of hashes without backing blocks - hashes := createHashes(4*blockCacheLimit, knownHash) - blocks := createBlocksFromHashes(hashes) + hashes, blocks := makeChain(4*blockCacheLimit, 0, genesis) + + randomHashes := make([]common.Hash, 1024*blockCacheLimit) + for i := range randomHashes { + rand.Read(randomHashes[i][:]) + } tester.newPeer("valid", hashes, blocks) - tester.newPeer("attack", createHashes(1024*blockCacheLimit, knownHash), nil) + tester.newPeer("attack", randomHashes, nil) // Try and sync with the malicious node and check that it fails if err := tester.sync("attack"); err != errCrossCheckFailed { @@ -531,12 +508,16 @@ func TestMadeupHashChainAttack(t *testing.T) { // one by one prevents reliable block/parent verification. func TestMadeupHashChainDrippingAttack(t *testing.T) { // Create a random chain of hashes to drip - hashes := createHashes(16*blockCacheLimit, knownHash) + randomHashes := make([]common.Hash, 16*blockCacheLimit) + for i := range randomHashes { + rand.Read(randomHashes[i][:]) + } + randomHashes[len(randomHashes)-1] = genesis.Hash() tester := newTester() // Try and sync with the attacker, one hash at a time tester.maxHashFetch = 1 - tester.newPeer("attack", hashes, nil) + tester.newPeer("attack", randomHashes, nil) if err := tester.sync("attack"); err != errStallingPeer { t.Fatalf("synchronisation error mismatch: have %v, want %v", err, errStallingPeer) } @@ -552,9 +533,7 @@ func TestMadeupBlockChainAttack(t *testing.T) { crossCheckCycle = 25 * time.Millisecond // Create a long chain of blocks and simulate an invalid chain by dropping every second - hashes := createHashes(16*blockCacheLimit, knownHash) - blocks := createBlocksFromHashes(hashes) - + hashes, blocks := makeChain(16*blockCacheLimit, 0, genesis) gapped := make([]common.Hash, len(hashes)/2) for i := 0; i < len(gapped); i++ { gapped[i] = hashes[2*i] @@ -575,65 +554,26 @@ func TestMadeupBlockChainAttack(t *testing.T) { } } -// Advanced form of the above forged blockchain attack, where not only does the -// attacker make up a valid hashes for random blocks, but also forges the block -// parents to point to existing hashes. -func TestMadeupParentBlockChainAttack(t *testing.T) { - tester := newTester() - - defaultBlockTTL := blockSoftTTL - defaultCrossCheckCycle := crossCheckCycle - - blockSoftTTL = 100 * time.Millisecond - crossCheckCycle = 25 * time.Millisecond - - // Create a long chain of blocks and simulate an invalid chain by dropping every second - hashes := createHashes(16*blockCacheLimit, knownHash) - blocks := createBlocksFromHashes(hashes) - tester.newPeer("valid", hashes, blocks) - - for _, block := range blocks { - block.ParentHeaderHash = knownHash // Simulate pointing to already known hash - } - tester.newPeer("attack", hashes, blocks) - - // Try and sync with the malicious node and check that it fails - if err := tester.sync("attack"); err != errCrossCheckFailed { - t.Fatalf("synchronisation error mismatch: have %v, want %v", err, errCrossCheckFailed) - } - // Ensure that a valid chain can still pass sync - blockSoftTTL = defaultBlockTTL - crossCheckCycle = defaultCrossCheckCycle - - if err := tester.sync("valid"); err != nil { - t.Fatalf("failed to synchronise blocks: %v", err) - } -} - -// Tests that if one/multiple malicious peers try to feed a banned blockchain to +// tests that if one/multiple malicious peers try to feed a banned blockchain to // the downloader, it will not keep refetching the same chain indefinitely, but -// gradually block pieces of it, until it's head is also blocked. +// gradually block pieces of it, until its head is also blocked. func TestBannedChainStarvationAttack(t *testing.T) { - // Create the tester and ban the selected hash + n := 8 * blockCacheLimit + fork := n/2 - 23 + hashes, forkHashes, blocks, forkBlocks := makeChainFork(n, fork, genesis) + + // Create the tester and ban the selected hash. tester := newTester() - tester.downloader.banned.Add(bannedHash) - - // Construct a valid chain, for it and ban the fork - hashes := createHashes(8*blockCacheLimit, knownHash) - blocks := createBlocksFromHashes(hashes) + tester.downloader.banned.Add(forkHashes[fork-1]) tester.newPeer("valid", hashes, blocks) - - fork := len(hashes)/2 - 23 - hashes = append(createHashes(4*blockCacheLimit, bannedHash), hashes[fork:]...) - blocks = createBlocksFromHashes(hashes) - tester.newPeer("attack", hashes, blocks) + tester.newPeer("attack", forkHashes, forkBlocks) // Iteratively try to sync, and verify that the banned hash list grows until // the head of the invalid chain is blocked too. for banned := tester.downloader.banned.Size(); ; { // Try to sync with the attacker, check hash chain failure if err := tester.sync("attack"); err != errInvalidChain { - if tester.downloader.banned.Has(hashes[0]) && err == errBannedHead { + if tester.downloader.banned.Has(forkHashes[0]) && err == errBannedHead { break } t.Fatalf("synchronisation error mismatch: have %v, want %v", err, errInvalidChain) @@ -646,7 +586,7 @@ func TestBannedChainStarvationAttack(t *testing.T) { banned = bans } // Check that after banning an entire chain, bad peers get dropped - if err := tester.newPeer("new attacker", hashes, blocks); err != errBannedHead { + if err := tester.newPeer("new attacker", forkHashes, forkBlocks); err != errBannedHead { t.Fatalf("peer registration mismatch: have %v, want %v", err, errBannedHead) } if peer := tester.downloader.peers.Peer("new attacker"); peer != nil { @@ -662,9 +602,14 @@ func TestBannedChainStarvationAttack(t *testing.T) { // gradually banned, it will have an upper limit on the consumed memory and also // the origin bad hashes will not be evacuated. func TestBannedChainMemoryExhaustionAttack(t *testing.T) { - // Create the tester and ban the selected hash + // Construct a banned chain with more chunks than the ban limit + n := 8 * blockCacheLimit + fork := n/2 - 23 + hashes, forkHashes, blocks, forkBlocks := makeChainFork(n, fork, genesis) + + // Create the tester and ban the root hash of the fork. tester := newTester() - tester.downloader.banned.Add(bannedHash) + tester.downloader.banned.Add(forkHashes[fork-1]) // Reduce the test size a bit defaultMaxBlockFetch := MaxBlockFetch @@ -673,15 +618,8 @@ func TestBannedChainMemoryExhaustionAttack(t *testing.T) { MaxBlockFetch = 4 maxBannedHashes = 256 - // Construct a banned chain with more chunks than the ban limit - hashes := createHashes(8*blockCacheLimit, knownHash) - blocks := createBlocksFromHashes(hashes) tester.newPeer("valid", hashes, blocks) - - fork := len(hashes)/2 - 23 - hashes = append(createHashes(maxBannedHashes*MaxBlockFetch, bannedHash), hashes[fork:]...) - blocks = createBlocksFromHashes(hashes) - tester.newPeer("attack", hashes, blocks) + tester.newPeer("attack", forkHashes, forkBlocks) // Iteratively try to sync, and verify that the banned hash list grows until // the head of the invalid chain is blocked too. @@ -690,8 +628,8 @@ func TestBannedChainMemoryExhaustionAttack(t *testing.T) { if err := tester.sync("attack"); err != errInvalidChain { t.Fatalf("synchronisation error mismatch: have %v, want %v", err, errInvalidChain) } - // Short circuit if the entire chain was banned - if tester.downloader.banned.Has(hashes[0]) { + // Short circuit if the entire chain was banned. + if tester.downloader.banned.Has(forkHashes[0]) { break } // Otherwise ensure we never exceed the memory allowance and the hard coded bans are untouched @@ -722,8 +660,7 @@ func TestBannedChainMemoryExhaustionAttack(t *testing.T) { func TestOverlappingDeliveryAttack(t *testing.T) { // Create an arbitrary batch of blocks ( < cache-size not to block) targetBlocks := blockCacheLimit - 23 - hashes := createHashes(targetBlocks, knownHash) - blocks := createBlocksFromHashes(hashes) + hashes, blocks := makeChain(targetBlocks, 0, genesis) // Register an attacker that always returns non-requested blocks too tester := newTester() @@ -775,7 +712,7 @@ func TestHashAttackerDropping(t *testing.T) { for i, tt := range tests { // Register a new peer and ensure it's presence id := fmt.Sprintf("test %d", i) - if err := tester.newPeer(id, []common.Hash{knownHash}, nil); err != nil { + if err := tester.newPeer(id, []common.Hash{genesis.Hash()}, nil); err != nil { t.Fatalf("test %d: failed to register new peer: %v", i, err) } if _, ok := tester.peerHashes[id]; !ok { @@ -784,7 +721,7 @@ func TestHashAttackerDropping(t *testing.T) { // Simulate a synchronisation and check the required result tester.downloader.synchroniseMock = func(string, common.Hash) error { return tt.result } - tester.downloader.Synchronise(id, knownHash) + tester.downloader.Synchronise(id, genesis.Hash()) if _, ok := tester.peerHashes[id]; !ok != tt.drop { t.Errorf("test %d: peer drop mismatch for %v: have %v, want %v", i, tt.result, !ok, tt.drop) } @@ -797,7 +734,10 @@ func TestBlockAttackerDropping(t *testing.T) { tests := []struct { failure bool drop bool - }{{true, true}, {false, false}} + }{ + {true, true}, + {false, false}, + } // Run the tests and check disconnection status tester := newTester() @@ -811,9 +751,10 @@ func TestBlockAttackerDropping(t *testing.T) { t.Fatalf("test %d: registered peer not found", i) } // Assemble a good or bad block, depending of the test - raw := createBlock(1, knownHash, common.Hash{}) + raw := core.GenerateChain(genesis, testdb, 1, nil)[0] if tt.failure { - raw = createBlock(1, unknownHash, common.Hash{}) + parent := types.NewBlock(&types.Header{}, nil, nil, nil) + raw = core.GenerateChain(parent, testdb, 1, nil)[0] } block := &Block{OriginPeer: id, RawBlock: raw} diff --git a/eth/fetcher/fetcher_test.go b/eth/fetcher/fetcher_test.go index 80247d9d20..2c9c9bca3b 100644 --- a/eth/fetcher/fetcher_test.go +++ b/eth/fetcher/fetcher_test.go @@ -1,7 +1,6 @@ package fetcher import ( - "encoding/binary" "errors" "math/big" "sync" @@ -10,58 +9,32 @@ import ( "time" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/ethdb" ) var ( - knownHash = common.Hash{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1} - unknownHash = common.Hash{2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2} - bannedHash = common.Hash{3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3} - - genesis = createBlock(1, common.Hash{}, knownHash) + testdb, _ = ethdb.NewMemDatabase() + genesis = core.GenesisBlockForTesting(testdb, common.Address{}, big.NewInt(0)) + unknownBlock = types.NewBlock(&types.Header{}, nil, nil, nil) ) -// idCounter is used by the createHashes method the generate deterministic but unique hashes -var idCounter = int64(2) // #1 is the genesis block - -// createHashes generates a batch of hashes rooted at a specific point in the chain. -func createHashes(amount int, root common.Hash) (hashes []common.Hash) { - hashes = make([]common.Hash, amount+1) - hashes[len(hashes)-1] = root - - for i := 0; i < len(hashes)-1; i++ { - binary.BigEndian.PutUint64(hashes[i][:8], uint64(idCounter)) - idCounter++ +// makeChain creates a chain of n blocks starting at and including parent. +// the returned hash chain is ordered head->parent. +func makeChain(n int, seed byte, parent *types.Block) ([]common.Hash, map[common.Hash]*types.Block) { + blocks := core.GenerateChain(parent, testdb, n, func(i int, gen *core.BlockGen) { + gen.SetCoinbase(common.Address{seed}) + }) + hashes := make([]common.Hash, n+1) + hashes[len(hashes)-1] = parent.Hash() + blockm := make(map[common.Hash]*types.Block, n+1) + blockm[parent.Hash()] = parent + for i, b := range blocks { + hashes[len(hashes)-i-2] = b.Hash() + blockm[b.Hash()] = b } - return -} - -// createBlock assembles a new block at the given chain height. -func createBlock(i int, parent, hash common.Hash) *types.Block { - header := &types.Header{Number: big.NewInt(int64(i))} - block := types.NewBlockWithHeader(header) - block.HeaderHash = hash - block.ParentHeaderHash = parent - return block -} - -// copyBlock makes a deep copy of a block suitable for local modifications. -func copyBlock(block *types.Block) *types.Block { - return createBlock(int(block.Number().Int64()), block.ParentHeaderHash, block.HeaderHash) -} - -// createBlocksFromHashes assembles a collection of blocks, each having a correct -// place in the given hash chain. -func createBlocksFromHashes(hashes []common.Hash) map[common.Hash]*types.Block { - blocks := make(map[common.Hash]*types.Block) - for i := 0; i < len(hashes); i++ { - parent := knownHash - if i < len(hashes)-1 { - parent = hashes[i+1] - } - blocks[hashes[i]] = createBlock(len(hashes)-i, parent, hashes[i]) - } - return blocks + return hashes, blockm } // fetcherTester is a test simulator for mocking out local block chain. @@ -77,8 +50,8 @@ type fetcherTester struct { // newTester creates a new fetcher test mocker. func newTester() *fetcherTester { tester := &fetcherTester{ - hashes: []common.Hash{knownHash}, - blocks: map[common.Hash]*types.Block{knownHash: genesis}, + hashes: []common.Hash{genesis.Hash()}, + blocks: map[common.Hash]*types.Block{genesis.Hash(): genesis}, } tester.fetcher = New(tester.getBlock, tester.verifyBlock, tester.broadcastBlock, tester.chainHeight, tester.insertChain, tester.dropPeer) tester.fetcher.Start() @@ -138,10 +111,9 @@ func (f *fetcherTester) dropPeer(peer string) { // peerFetcher retrieves a fetcher associated with a simulated peer. func (f *fetcherTester) makeFetcher(blocks map[common.Hash]*types.Block) blockRequesterFn { - // Copy all the blocks to ensure they are not tampered with closure := make(map[common.Hash]*types.Block) for hash, block := range blocks { - closure[hash] = copyBlock(block) + closure[hash] = block } // Create a function that returns blocks from the closure return func(hashes []common.Hash) error { @@ -195,8 +167,7 @@ func verifyImportDone(t *testing.T, imported chan *types.Block) { func TestSequentialAnnouncements(t *testing.T) { // Create a chain of blocks to import targetBlocks := 4 * hashLimit - hashes := createHashes(targetBlocks, knownHash) - blocks := createBlocksFromHashes(hashes) + hashes, blocks := makeChain(targetBlocks, 0, genesis) tester := newTester() fetcher := tester.makeFetcher(blocks) @@ -217,8 +188,7 @@ func TestSequentialAnnouncements(t *testing.T) { func TestConcurrentAnnouncements(t *testing.T) { // Create a chain of blocks to import targetBlocks := 4 * hashLimit - hashes := createHashes(targetBlocks, knownHash) - blocks := createBlocksFromHashes(hashes) + hashes, blocks := makeChain(targetBlocks, 0, genesis) // Assemble a tester with a built in counter for the requests tester := newTester() @@ -253,8 +223,7 @@ func TestConcurrentAnnouncements(t *testing.T) { func TestOverlappingAnnouncements(t *testing.T) { // Create a chain of blocks to import targetBlocks := 4 * hashLimit - hashes := createHashes(targetBlocks, knownHash) - blocks := createBlocksFromHashes(hashes) + hashes, blocks := makeChain(targetBlocks, 0, genesis) tester := newTester() fetcher := tester.makeFetcher(blocks) @@ -280,8 +249,7 @@ func TestOverlappingAnnouncements(t *testing.T) { // Tests that announces already being retrieved will not be duplicated. func TestPendingDeduplication(t *testing.T) { // Create a hash and corresponding block - hashes := createHashes(1, knownHash) - blocks := createBlocksFromHashes(hashes) + hashes, blocks := makeChain(1, 0, genesis) // Assemble a tester with a built in counter and delayed fetcher tester := newTester() @@ -319,9 +287,9 @@ func TestPendingDeduplication(t *testing.T) { // imported when all the gaps are filled in. func TestRandomArrivalImport(t *testing.T) { // Create a chain of blocks to import, and choose one to delay - hashes := createHashes(maxQueueDist, knownHash) - blocks := createBlocksFromHashes(hashes) - skip := maxQueueDist / 2 + targetBlocks := maxQueueDist + hashes, blocks := makeChain(targetBlocks, 0, genesis) + skip := targetBlocks / 2 tester := newTester() fetcher := tester.makeFetcher(blocks) @@ -345,9 +313,9 @@ func TestRandomArrivalImport(t *testing.T) { // are correctly schedule, filling and import queue gaps. func TestQueueGapFill(t *testing.T) { // Create a chain of blocks to import, and choose one to not announce at all - hashes := createHashes(maxQueueDist, knownHash) - blocks := createBlocksFromHashes(hashes) - skip := maxQueueDist / 2 + targetBlocks := maxQueueDist + hashes, blocks := makeChain(targetBlocks, 0, genesis) + skip := targetBlocks / 2 tester := newTester() fetcher := tester.makeFetcher(blocks) @@ -371,8 +339,7 @@ func TestQueueGapFill(t *testing.T) { // announces, etc) do not get scheduled for import multiple times. func TestImportDeduplication(t *testing.T) { // Create two blocks to import (one for duplication, the other for stalling) - hashes := createHashes(2, knownHash) - blocks := createBlocksFromHashes(hashes) + hashes, blocks := makeChain(2, 0, genesis) // Create the tester and wrap the importer with a counter tester := newTester() @@ -410,9 +377,7 @@ func TestImportDeduplication(t *testing.T) { // discarded no prevent wasting resources on useless blocks from faulty peers. func TestDistantDiscarding(t *testing.T) { // Create a long chain to import - hashes := createHashes(3*maxQueueDist, knownHash) - blocks := createBlocksFromHashes(hashes) - + hashes, blocks := makeChain(3*maxQueueDist, 0, genesis) head := hashes[len(hashes)/2] // Create a tester and simulate a head block being the middle of the above chain @@ -445,11 +410,11 @@ func TestHashMemoryExhaustionAttack(t *testing.T) { tester.fetcher.importedHook = func(block *types.Block) { imported <- block } // Create a valid chain and an infinite junk chain - hashes := createHashes(hashLimit+2*maxQueueDist, knownHash) - blocks := createBlocksFromHashes(hashes) + targetBlocks := hashLimit + 2*maxQueueDist + hashes, blocks := makeChain(targetBlocks, 0, genesis) valid := tester.makeFetcher(blocks) - attack := createHashes(hashLimit+2*maxQueueDist, unknownHash) + attack, _ := makeChain(targetBlocks, 0, unknownBlock) attacker := tester.makeFetcher(nil) // Feed the tester a huge hashset from the attacker, and a limited from the valid peer @@ -484,13 +449,11 @@ func TestBlockMemoryExhaustionAttack(t *testing.T) { tester.fetcher.importedHook = func(block *types.Block) { imported <- block } // Create a valid chain and a batch of dangling (but in range) blocks - hashes := createHashes(blockLimit+2*maxQueueDist, knownHash) - blocks := createBlocksFromHashes(hashes) - + targetBlocks := hashLimit + 2*maxQueueDist + hashes, blocks := makeChain(targetBlocks, 0, genesis) attack := make(map[common.Hash]*types.Block) - for len(attack) < blockLimit+2*maxQueueDist { - hashes := createHashes(maxQueueDist-1, unknownHash) - blocks := createBlocksFromHashes(hashes) + for i := byte(0); len(attack) < blockLimit+2*maxQueueDist; i++ { + hashes, blocks := makeChain(maxQueueDist-1, i, unknownBlock) for _, hash := range hashes[:maxQueueDist-2] { attack[hash] = blocks[hash] } @@ -499,7 +462,7 @@ func TestBlockMemoryExhaustionAttack(t *testing.T) { for _, block := range attack { tester.fetcher.Enqueue("attacker", block) } - time.Sleep(100 * time.Millisecond) + time.Sleep(200 * time.Millisecond) if queued := tester.fetcher.queue.Size(); queued != blockLimit { t.Fatalf("queued block count mismatch: have %d, want %d", queued, blockLimit) } From 7098ec691c349f9b4473756e4ccaf97d46956da3 Mon Sep 17 00:00:00 2001 From: Felix Lange <fjl@twurst.com> Date: Wed, 24 Jun 2015 01:35:39 +0200 Subject: [PATCH 085/156] rpc: unmask pending block fields This pleases the RPC tests. --- rpc/api/eth.go | 8 -------- 1 file changed, 8 deletions(-) diff --git a/rpc/api/eth.go b/rpc/api/eth.go index 0dff138c65..962c8d0f95 100644 --- a/rpc/api/eth.go +++ b/rpc/api/eth.go @@ -348,14 +348,6 @@ func (self *ethApi) GetBlockByNumber(req *shared.Request) (interface{}, error) { block := self.xeth.EthBlockByNumber(args.BlockNumber) br := NewBlockRes(block, args.IncludeTxs) - // If request was for "pending", nil nonsensical fields - if args.BlockNumber == -2 { - br.BlockHash = nil - br.BlockNumber = nil - br.Miner = nil - br.Nonce = nil - br.LogsBloom = nil - } return br, nil } From c3d62280238de7c98f0487e9d5872eedd2630df1 Mon Sep 17 00:00:00 2001 From: Felix Lange <fjl@twurst.com> Date: Thu, 25 Jun 2015 02:04:50 +0200 Subject: [PATCH 086/156] core: add InsertChain benchmarks --- core/bench_test.go | 149 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 149 insertions(+) create mode 100644 core/bench_test.go diff --git a/core/bench_test.go b/core/bench_test.go new file mode 100644 index 0000000000..bba5cce5f7 --- /dev/null +++ b/core/bench_test.go @@ -0,0 +1,149 @@ +package core + +import ( + "crypto/ecdsa" + "io/ioutil" + "math/big" + "os" + "testing" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/event" + "github.com/ethereum/go-ethereum/params" +) + +func BenchmarkInsertChain_empty_memdb(b *testing.B) { + benchInsertChain(b, false, nil) +} +func BenchmarkInsertChain_empty_diskdb(b *testing.B) { + benchInsertChain(b, true, nil) +} +func BenchmarkInsertChain_valueTx_memdb(b *testing.B) { + benchInsertChain(b, false, genValueTx(0)) +} +func BenchmarkInsertChain_valueTx_diskdb(b *testing.B) { + benchInsertChain(b, true, genValueTx(0)) +} +func BenchmarkInsertChain_valueTx_100kB_memdb(b *testing.B) { + benchInsertChain(b, false, genValueTx(100*1024)) +} +func BenchmarkInsertChain_valueTx_100kB_diskdb(b *testing.B) { + benchInsertChain(b, true, genValueTx(100*1024)) +} +func BenchmarkInsertChain_uncles_memdb(b *testing.B) { + benchInsertChain(b, false, genUncles) +} +func BenchmarkInsertChain_uncles_diskdb(b *testing.B) { + benchInsertChain(b, true, genUncles) +} +func BenchmarkInsertChain_ring200_memdb(b *testing.B) { + benchInsertChain(b, false, genTxRing(200)) +} +func BenchmarkInsertChain_ring200_diskdb(b *testing.B) { + benchInsertChain(b, true, genTxRing(200)) +} +func BenchmarkInsertChain_ring1000_memdb(b *testing.B) { + benchInsertChain(b, false, genTxRing(1000)) +} +func BenchmarkInsertChain_ring1000_diskdb(b *testing.B) { + benchInsertChain(b, true, genTxRing(1000)) +} + +var ( + // This is the content of the genesis block used by the benchmarks. + benchRootKey, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") + benchRootAddr = crypto.PubkeyToAddress(benchRootKey.PublicKey) + benchRootFunds = common.BigPow(2, 100) +) + +// genValueTx returns a block generator that includes a single +// value-transfer transaction with n bytes of extra data in each +// block. +func genValueTx(nbytes int) func(int, *BlockGen) { + return func(i int, gen *BlockGen) { + toaddr := common.Address{} + data := make([]byte, nbytes) + gas := IntrinsicGas(data) + tx, _ := types.NewTransaction(gen.TxNonce(benchRootAddr), toaddr, big.NewInt(1), gas, nil, data).SignECDSA(benchRootKey) + gen.AddTx(tx) + } +} + +// genTxRing returns a block generator that sends ether in a ring +// among n accounts. This is creates n entries in the state database +// and fills the blocks with many small transactions. +func genTxRing(naccounts int) func(int, *BlockGen) { + keys := make([]*ecdsa.PrivateKey, naccounts) + keys[0] = benchRootKey + for i := 1; i < naccounts; i++ { + keys[i], _ = crypto.GenerateKey() + } + + from := 0 + return func(i int, gen *BlockGen) { + gas := CalcGasLimit(gen.PrevBlock(i - 1)) + for { + gas.Sub(gas, params.TxGas) + if gas.Cmp(params.TxGas) < 0 { + break + } + to := (from + 1) % naccounts + fromaddr := crypto.PubkeyToAddress(keys[from].PublicKey) + toaddr := crypto.PubkeyToAddress(keys[to].PublicKey) + tx, _ := types.NewTransaction(gen.TxNonce(fromaddr), toaddr, benchRootFunds, params.TxGas, nil, nil).SignECDSA(keys[from]) + gen.AddTx(tx) + from = to + } + } +} + +// genUncles generates blocks with two uncle headers. +func genUncles(i int, gen *BlockGen) { + if i >= 6 { + b2 := gen.PrevBlock(i - 6).Header() + b2.Extra = []byte("foo") + gen.AddUncle(b2) + b3 := gen.PrevBlock(i - 6).Header() + b3.Extra = []byte("bar") + gen.AddUncle(b3) + } +} + +func benchInsertChain(b *testing.B, disk bool, gen func(int, *BlockGen)) { + // Create the database in memory or in a temporary directory. + var db common.Database + if !disk { + db, _ = ethdb.NewMemDatabase() + } else { + dir, err := ioutil.TempDir("", "eth-core-bench") + if err != nil { + b.Fatalf("cannot create temporary directory: %v", err) + } + defer os.RemoveAll(dir) + db, err = ethdb.NewLDBDatabase(dir) + if err != nil { + b.Fatalf("cannot create temporary database: %v", err) + } + defer db.Close() + } + + // Generate a chain of b.N blocks using the supplied block + // generator function. + genesis := GenesisBlockForTesting(db, benchRootAddr, benchRootFunds) + chain := GenerateChain(genesis, db, b.N, gen) + + // Time the insertion of the new chain. + // State and blocks are stored in the same DB. + evmux := new(event.TypeMux) + chainman, _ := NewChainManager(genesis, db, db, FakePow{}, evmux) + chainman.SetProcessor(NewBlockProcessor(db, db, FakePow{}, chainman, evmux)) + defer chainman.Stop() + b.ReportAllocs() + b.ResetTimer() + if i, err := chainman.InsertChain(chain); err != nil { + b.Fatalf("insert error (block %d): %v\n", i, err) + } +} From 3d0c6a8345b28b33eb0dfc4a53b967461977706a Mon Sep 17 00:00:00 2001 From: Felix Lange <fjl@twurst.com> Date: Thu, 25 Jun 2015 14:48:08 +0200 Subject: [PATCH 087/156] rlp: pool encoder allocations --- rlp/encode.go | 36 +++++++++++++++++++++++++++--------- 1 file changed, 27 insertions(+), 9 deletions(-) diff --git a/rlp/encode.go b/rlp/encode.go index 10ff0ae79e..dddde766f3 100644 --- a/rlp/encode.go +++ b/rlp/encode.go @@ -5,12 +5,9 @@ import ( "io" "math/big" "reflect" + "sync" ) -// TODO: put encbufs in a sync.Pool. -// Doing that requires zeroing the buffers after use. -// encReader will need to drop it's buffer when done. - var ( // Common encoded values. // These are useful when implementing EncodeRLP. @@ -112,7 +109,9 @@ func Encode(w io.Writer, val interface{}) error { // Avoid copying by writing to the outer encbuf directly. return outer.encode(val) } - eb := newencbuf() + eb := encbufPool.Get().(*encbuf) + eb.reset() + defer encbufPool.Put(eb) if err := eb.encode(val); err != nil { return err } @@ -122,7 +121,9 @@ func Encode(w io.Writer, val interface{}) error { // EncodeBytes returns the RLP encoding of val. // Please see the documentation of Encode for the encoding rules. func EncodeToBytes(val interface{}) ([]byte, error) { - eb := newencbuf() + eb := encbufPool.Get().(*encbuf) + eb.reset() + defer encbufPool.Put(eb) if err := eb.encode(val); err != nil { return nil, err } @@ -135,7 +136,8 @@ func EncodeToBytes(val interface{}) ([]byte, error) { // // Please see the documentation of Encode for the encoding rules. func EncodeToReader(val interface{}) (size int, r io.Reader, err error) { - eb := newencbuf() + eb := encbufPool.Get().(*encbuf) + eb.reset() if err := eb.encode(val); err != nil { return 0, nil, err } @@ -182,8 +184,19 @@ func puthead(buf []byte, smalltag, largetag byte, size uint64) int { } } -func newencbuf() *encbuf { - return &encbuf{sizebuf: make([]byte, 9)} +// encbufs are pooled. +var encbufPool = sync.Pool{ + New: func() interface{} { return &encbuf{sizebuf: make([]byte, 9)} }, +} + +func (w *encbuf) reset() { + w.lhsize = 0 + if w.str != nil { + w.str = w.str[:0] + } + if w.lheads != nil { + w.lheads = w.lheads[:0] + } } // encbuf implements io.Writer so it can be passed it into EncodeRLP. @@ -295,6 +308,8 @@ type encReader struct { func (r *encReader) Read(b []byte) (n int, err error) { for { if r.piece = r.next(); r.piece == nil { + encbufPool.Put(r.buf) + r.buf = nil return n, io.EOF } nn := copy(b[n:], r.piece) @@ -313,6 +328,9 @@ func (r *encReader) Read(b []byte) (n int, err error) { // it returns nil at EOF. func (r *encReader) next() []byte { switch { + case r.buf == nil: + return nil + case r.piece != nil: // There is still data available for reading. return r.piece From a0566c10585cd19b12b40127597e310f4b7bfa67 Mon Sep 17 00:00:00 2001 From: Felix Lange <fjl@twurst.com> Date: Sat, 27 Jun 2015 03:45:50 +0200 Subject: [PATCH 088/156] rlp: remove Flat --- rlp/encode.go | 42 ------------------------------------------ rlp/encode_test.go | 9 --------- 2 files changed, 51 deletions(-) diff --git a/rlp/encode.go b/rlp/encode.go index dddde766f3..a9f80d4487 100644 --- a/rlp/encode.go +++ b/rlp/encode.go @@ -29,48 +29,6 @@ type Encoder interface { EncodeRLP(io.Writer) error } -// Flat wraps a value (which must encode as a list) so -// it encodes as the list's elements. -// -// Example: suppose you have defined a type -// -// type foo struct { A, B uint } -// -// Under normal encoding rules, -// -// rlp.Encode(foo{1, 2}) --> 0xC20102 -// -// This function can help you achieve the following encoding: -// -// rlp.Encode(rlp.Flat(foo{1, 2})) --> 0x0102 -func Flat(val interface{}) Encoder { - return flatenc{val} -} - -type flatenc struct{ val interface{} } - -func (e flatenc) EncodeRLP(out io.Writer) error { - // record current output position - var ( - eb = out.(*encbuf) - prevstrsize = len(eb.str) - prevnheads = len(eb.lheads) - ) - if err := eb.encode(e.val); err != nil { - return err - } - // check that a new list header has appeared - if len(eb.lheads) == prevnheads || eb.lheads[prevnheads].offset == prevstrsize-1 { - return fmt.Errorf("rlp.Flat: %T did not encode as list", e.val) - } - // remove the new list header - newhead := eb.lheads[prevnheads] - copy(eb.lheads[prevnheads:], eb.lheads[prevnheads+1:]) - eb.lheads = eb.lheads[:len(eb.lheads)-1] - eb.lhsize -= headsize(uint64(newhead.size)) - return nil -} - // Encode writes the RLP encoding of val to w. Note that Encode may // perform many small writes in some cases. Consider making w // buffered. diff --git a/rlp/encode_test.go b/rlp/encode_test.go index 6eb930d6c0..7b70a0629b 100644 --- a/rlp/encode_test.go +++ b/rlp/encode_test.go @@ -189,15 +189,6 @@ var encTests = []encTest{ {val: &recstruct{5, nil}, output: "C205C0"}, {val: &recstruct{5, &recstruct{4, &recstruct{3, nil}}}, output: "C605C404C203C0"}, - // flat - {val: Flat(uint(1)), error: "rlp.Flat: uint did not encode as list"}, - {val: Flat(simplestruct{A: 3, B: "foo"}), output: "0383666F6F"}, - { - // value generates more list headers after the Flat - val: []interface{}{"foo", []uint{1, 2}, Flat([]uint{3, 4}), []uint{5, 6}, "bar"}, - output: "D083666F6FC201020304C2050683626172", - }, - // nil {val: (*uint)(nil), output: "80"}, {val: (*string)(nil), output: "80"}, From 8743cc1c1ce6b78a02cd29cc06eed3a85ea74209 Mon Sep 17 00:00:00 2001 From: Felix Lange <fjl@twurst.com> Date: Sat, 27 Jun 2015 04:26:26 +0200 Subject: [PATCH 089/156] rlp: add ListSize --- rlp/encode.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/rlp/encode.go b/rlp/encode.go index a9f80d4487..b418fb501a 100644 --- a/rlp/encode.go +++ b/rlp/encode.go @@ -29,6 +29,12 @@ type Encoder interface { EncodeRLP(io.Writer) error } +// ListSize returns the encoded size of an RLP list with the given +// content size. +func ListSize(contentSize uint64) uint64 { + return uint64(headsize(contentSize)) + contentSize +} + // Encode writes the RLP encoding of val to w. Note that Encode may // perform many small writes in some cases. Consider making w // buffered. From 11b8d1df59b5a038be2066f97427da3d4d096fe6 Mon Sep 17 00:00:00 2001 From: Felix Lange <fjl@twurst.com> Date: Thu, 25 Jun 2015 14:45:54 +0200 Subject: [PATCH 090/156] core/types: cache computed transaction values --- core/types/transaction.go | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/core/types/transaction.go b/core/types/transaction.go index 14b0e4174d..95deac36e3 100644 --- a/core/types/transaction.go +++ b/core/types/transaction.go @@ -6,6 +6,7 @@ import ( "fmt" "io" "math/big" + "sync/atomic" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/crypto" @@ -20,6 +21,10 @@ func IsContractAddr(addr []byte) bool { type Transaction struct { data txdata + // caches + hash atomic.Value + size atomic.Value + from atomic.Value } type txdata struct { @@ -88,7 +93,12 @@ func (tx *Transaction) EncodeRLP(w io.Writer) error { } func (tx *Transaction) DecodeRLP(s *rlp.Stream) error { - return s.Decode(&tx.data) + _, size, _ := s.Kind() + err := s.Decode(&tx.data) + if err == nil { + tx.size.Store(common.StorageSize(rlp.ListSize(size))) + } + return err } func (tx *Transaction) Data() []byte { return common.CopyBytes(tx.data.Payload) } @@ -107,6 +117,9 @@ func (tx *Transaction) To() *common.Address { } func (tx *Transaction) Hash() common.Hash { + if hash := tx.hash.Load(); hash != nil { + return hash.(common.Hash) + } v := rlpHash([]interface{}{ tx.data.AccountNonce, tx.data.Price, @@ -115,21 +128,31 @@ func (tx *Transaction) Hash() common.Hash { tx.data.Amount, tx.data.Payload, }) + tx.hash.Store(v) return v } func (tx *Transaction) Size() common.StorageSize { - v, _, _ := rlp.EncodeToReader(&tx.data) - return common.StorageSize(v) + if size := tx.size.Load(); size != nil { + return size.(common.StorageSize) + } + c := writeCounter(0) + rlp.Encode(&c, &tx.data) + tx.size.Store(common.StorageSize(c)) + return common.StorageSize(c) } func (tx *Transaction) From() (common.Address, error) { - pubkey, err := tx.PublicKey() + if from := tx.from.Load(); from != nil { + return from.(common.Address), nil + } + pubkey, err := tx.publicKey() if err != nil { return common.Address{}, err } var addr common.Address copy(addr[:], crypto.Sha3(pubkey[1:])[12:]) + tx.from.Store(addr) return addr, nil } @@ -144,7 +167,7 @@ func (tx *Transaction) SignatureValues() (v byte, r *big.Int, s *big.Int) { return tx.data.V, new(big.Int).Set(tx.data.R), new(big.Int).Set(tx.data.S) } -func (tx *Transaction) PublicKey() ([]byte, error) { +func (tx *Transaction) publicKey() ([]byte, error) { if !crypto.ValidateSignatureValues(tx.data.V, tx.data.R, tx.data.S) { return nil, errors.New("invalid v, r, s values") } From a8889b092bfb2a1b61733883caf11e07eb072d69 Mon Sep 17 00:00:00 2001 From: Felix Lange <fjl@twurst.com> Date: Thu, 25 Jun 2015 14:46:08 +0200 Subject: [PATCH 091/156] core/types: cache computed block values --- core/types/block.go | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/core/types/block.go b/core/types/block.go index 31ea478d43..b7eb700ca4 100644 --- a/core/types/block.go +++ b/core/types/block.go @@ -8,6 +8,7 @@ import ( "io" "math/big" "sort" + "sync/atomic" "time" "github.com/ethereum/go-ethereum/common" @@ -105,8 +106,15 @@ type Block struct { transactions Transactions receipts Receipts - Td *big.Int - queued bool // flag for blockpool to skip TD check + // caches + hash atomic.Value + size atomic.Value + + // Td is used by package core to store the total difficulty + // of the chain up to and including the block. + Td *big.Int + + // ReceivedAt is used by package eth to track block propagation time. ReceivedAt time.Time } @@ -223,10 +231,12 @@ func (b *Block) ValidateFields() error { func (b *Block) DecodeRLP(s *rlp.Stream) error { var eb extblock + _, size, _ := s.Kind() if err := s.Decode(&eb); err != nil { return err } b.header, b.uncles, b.transactions = eb.Header, eb.Uncles, eb.Txs + b.size.Store(common.StorageSize(rlp.ListSize(size))) return nil } @@ -295,8 +305,12 @@ func (b *Block) HashNoNonce() common.Hash { } func (b *Block) Size() common.StorageSize { + if size := b.size.Load(); size != nil { + return size.(common.StorageSize) + } c := writeCounter(0) rlp.Encode(&c, b) + b.size.Store(common.StorageSize(c)) return common.StorageSize(c) } @@ -329,7 +343,12 @@ func (b *Block) WithMiningResult(nonce uint64, mixDigest common.Hash) *Block { // Implement pow.Block func (b *Block) Hash() common.Hash { - return b.header.Hash() + if hash := b.hash.Load(); hash != nil { + return hash.(common.Hash) + } + v := rlpHash(b.header) + b.hash.Store(v) + return v } func (b *Block) String() string { From 0b22ad99c18b6aaa77afc32113c308f12a07e843 Mon Sep 17 00:00:00 2001 From: Felix Lange <fjl@twurst.com> Date: Thu, 25 Jun 2015 14:46:44 +0200 Subject: [PATCH 092/156] core: optimize IntrinsicGas --- core/state_transition.go | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/core/state_transition.go b/core/state_transition.go index 2c8770cbe5..5844ad3c8a 100644 --- a/core/state_transition.go +++ b/core/state_transition.go @@ -77,12 +77,19 @@ func MessageGasValue(msg Message) *big.Int { // with the given data. func IntrinsicGas(data []byte) *big.Int { igas := new(big.Int).Set(params.TxGas) - for _, byt := range data { - if byt != 0 { - igas.Add(igas, params.TxDataNonZeroGas) - } else { - igas.Add(igas, params.TxDataZeroGas) + if len(data) > 0 { + var nz int64 + for _, byt := range data { + if byt != 0 { + nz++ + } } + m := big.NewInt(nz) + m.Mul(m, params.TxDataNonZeroGas) + igas.Add(igas, m) + m.SetInt64(int64(len(data)) - nz) + m.Mul(m, params.TxDataZeroGas) + igas.Add(igas, m) } return igas } From 992dc74efdab530b716828e6f4a8468d27db41f0 Mon Sep 17 00:00:00 2001 From: Felix Lange <fjl@twurst.com> Date: Thu, 25 Jun 2015 14:47:21 +0200 Subject: [PATCH 093/156] core: avoid duplicate calls to Transaction.Data --- core/state_transition.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core/state_transition.go b/core/state_transition.go index 5844ad3c8a..60bd36d908 100644 --- a/core/state_transition.go +++ b/core/state_transition.go @@ -203,14 +203,14 @@ func (self *StateTransition) transitionState() (ret []byte, usedGas *big.Int, er sender, _ := self.From() // err checked in preCheck // Pay intrinsic gas - if err = self.UseGas(IntrinsicGas(self.msg.Data())); err != nil { + if err = self.UseGas(IntrinsicGas(self.data)); err != nil { return nil, nil, InvalidTxError(err) } vmenv := self.env var ref vm.ContextRef if MessageCreatesContract(msg) { - ret, err, ref = vmenv.Create(sender, self.msg.Data(), self.gas, self.gasPrice, self.value) + ret, err, ref = vmenv.Create(sender, self.data, self.gas, self.gasPrice, self.value) if err == nil { dataGas := big.NewInt(int64(len(ret))) dataGas.Mul(dataGas, params.CreateDataGas) @@ -224,7 +224,7 @@ func (self *StateTransition) transitionState() (ret []byte, usedGas *big.Int, er } else { // Increment the nonce for the next transaction self.state.SetNonce(sender.Address(), sender.Nonce()+1) - ret, err = vmenv.Call(sender, self.To().Address(), self.msg.Data(), self.gas, self.gasPrice, self.value) + ret, err = vmenv.Call(sender, self.To().Address(), self.data, self.gas, self.gasPrice, self.value) } if err != nil && IsValueTransferErr(err) { From d0bb90c69e5572417128fdb8188f53cc45f76002 Mon Sep 17 00:00:00 2001 From: Felix Lange <fjl@twurst.com> Date: Thu, 25 Jun 2015 14:47:56 +0200 Subject: [PATCH 094/156] core: generate benchmark keys only once --- core/bench_test.go | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/core/bench_test.go b/core/bench_test.go index bba5cce5f7..6d851febd3 100644 --- a/core/bench_test.go +++ b/core/bench_test.go @@ -72,16 +72,24 @@ func genValueTx(nbytes int) func(int, *BlockGen) { } } +var ( + ringKeys = make([]*ecdsa.PrivateKey, 1000) + ringAddrs = make([]common.Address, len(ringKeys)) +) + +func init() { + ringKeys[0] = benchRootKey + ringAddrs[0] = benchRootAddr + for i := 1; i < len(ringKeys); i++ { + ringKeys[i], _ = crypto.GenerateKey() + ringAddrs[i] = crypto.PubkeyToAddress(ringKeys[i].PublicKey) + } +} + // genTxRing returns a block generator that sends ether in a ring // among n accounts. This is creates n entries in the state database // and fills the blocks with many small transactions. func genTxRing(naccounts int) func(int, *BlockGen) { - keys := make([]*ecdsa.PrivateKey, naccounts) - keys[0] = benchRootKey - for i := 1; i < naccounts; i++ { - keys[i], _ = crypto.GenerateKey() - } - from := 0 return func(i int, gen *BlockGen) { gas := CalcGasLimit(gen.PrevBlock(i - 1)) @@ -91,9 +99,15 @@ func genTxRing(naccounts int) func(int, *BlockGen) { break } to := (from + 1) % naccounts - fromaddr := crypto.PubkeyToAddress(keys[from].PublicKey) - toaddr := crypto.PubkeyToAddress(keys[to].PublicKey) - tx, _ := types.NewTransaction(gen.TxNonce(fromaddr), toaddr, benchRootFunds, params.TxGas, nil, nil).SignECDSA(keys[from]) + tx := types.NewTransaction( + gen.TxNonce(ringAddrs[from]), + ringAddrs[to], + benchRootFunds, + params.TxGas, + nil, + nil, + ) + tx, _ = tx.SignECDSA(ringKeys[from]) gen.AddTx(tx) from = to } From fccc7d71eb1e8e655f9bcd9c6d7856b70bbeda36 Mon Sep 17 00:00:00 2001 From: Felix Lange <fjl@twurst.com> Date: Fri, 26 Jun 2015 14:17:36 +0200 Subject: [PATCH 095/156] core: remove superfluous big.Int allocations With blocks now being immutable, use big.Int values from accessor functions instead of copying their results. --- core/block_processor.go | 31 ++++++++++++++++--------------- core/chain_manager.go | 24 +++--------------------- core/state_transition.go | 38 +++++++++++++------------------------- 3 files changed, 32 insertions(+), 61 deletions(-) diff --git a/core/block_processor.go b/core/block_processor.go index 2fd8c04c02..4b27f87977 100644 --- a/core/block_processor.go +++ b/core/block_processor.go @@ -81,9 +81,8 @@ func (self *BlockProcessor) ApplyTransaction(coinbase *state.StateObject, stated // Update the state with pending changes statedb.Update() - cumulative := new(big.Int).Set(usedGas.Add(usedGas, gas)) - receipt := types.NewReceipt(statedb.Root().Bytes(), cumulative) - + usedGas.Add(usedGas, gas) + receipt := types.NewReceipt(statedb.Root().Bytes(), usedGas) logs := statedb.GetLogs(tx.Hash()) receipt.SetLogs(logs) receipt.Bloom = types.CreateBloom(types.Receipts{receipt}) @@ -260,26 +259,28 @@ func (sm *BlockProcessor) processWithParent(block, parent *types.Block) (logs st return state.Logs(), nil } +var ( + big8 = big.NewInt(8) + big32 = big.NewInt(32) +) + // AccumulateRewards credits the coinbase of the given block with the // mining reward. The total reward consists of the static block reward -// and rewards for included uncles. +// and rewards for included uncles. The coinbase of each uncle block is +// also rewarded. func AccumulateRewards(statedb *state.StateDB, header *types.Header, uncles []*types.Header) { reward := new(big.Int).Set(BlockReward) - + r := new(big.Int) for _, uncle := range uncles { - num := new(big.Int).Add(big.NewInt(8), uncle.Number) - num.Sub(num, header.Number) - - r := new(big.Int) - r.Mul(BlockReward, num) - r.Div(r, big.NewInt(8)) - + r.Add(uncle.Number, big8) + r.Sub(r, header.Number) + r.Mul(r, BlockReward) + r.Div(r, big8) statedb.AddBalance(uncle.Coinbase, r) - reward.Add(reward, new(big.Int).Div(BlockReward, big.NewInt(32))) + r.Div(BlockReward, big32) + reward.Add(reward, r) } - - // Get the account associated with the coinbase statedb.AddBalance(header.Coinbase, reward) } diff --git a/core/chain_manager.go b/core/chain_manager.go index 8a79e3e8ad..8a80783818 100644 --- a/core/chain_manager.go +++ b/core/chain_manager.go @@ -60,7 +60,9 @@ func CalcTD(block, parent *types.Block) *big.Int { if parent == nil { return block.Difficulty() } - return new(big.Int).Add(parent.Td, block.Header().Difficulty) + d := block.Difficulty() + d.Add(d, parent.Td) + return d } // CalcGasLimit computes the gas limit of the next block after parent. @@ -465,26 +467,6 @@ func (bc *ChainManager) setTotalDifficulty(td *big.Int) { bc.td = new(big.Int).Set(td) } -func (self *ChainManager) CalcTotalDiff(block *types.Block) (*big.Int, error) { - parent := self.GetBlock(block.Header().ParentHash) - if parent == nil { - return nil, fmt.Errorf("Unable to calculate total diff without known parent %x", block.Header().ParentHash) - } - - parentTd := parent.Td - - uncleDiff := new(big.Int) - for _, uncle := range block.Uncles() { - uncleDiff = uncleDiff.Add(uncleDiff, uncle.Difficulty) - } - - td := new(big.Int) - td = td.Add(parentTd, uncleDiff) - td = td.Add(td, block.Header().Difficulty) - - return td, nil -} - func (bc *ChainManager) Stop() { close(bc.quit) atomic.StoreInt32(&bc.procInterrupt, 1) diff --git a/core/state_transition.go b/core/state_transition.go index 60bd36d908..e2212dfef1 100644 --- a/core/state_transition.go +++ b/core/state_transition.go @@ -13,10 +13,6 @@ import ( "github.com/ethereum/go-ethereum/params" ) -const tryJit = false - -var () - /* * The State transitioning model * @@ -69,10 +65,6 @@ func MessageCreatesContract(msg Message) bool { return msg.To() == nil } -func MessageGasValue(msg Message) *big.Int { - return new(big.Int).Mul(msg.Gas(), msg.GasPrice()) -} - // IntrinsicGas computes the 'intrisic gas' for a message // with the given data. func IntrinsicGas(data []byte) *big.Int { @@ -104,7 +96,7 @@ func NewStateTransition(env vm.Environment, msg Message, coinbase *state.StateOb env: env, msg: msg, gas: new(big.Int), - gasPrice: new(big.Int).Set(msg.GasPrice()), + gasPrice: msg.GasPrice(), initialGas: new(big.Int), value: msg.Value(), data: msg.Data(), @@ -148,26 +140,22 @@ func (self *StateTransition) AddGas(amount *big.Int) { } func (self *StateTransition) BuyGas() error { - var err error + mgas := self.msg.Gas() + mgval := new(big.Int).Mul(mgas, self.gasPrice) sender, err := self.From() if err != nil { return err } - if sender.Balance().Cmp(MessageGasValue(self.msg)) < 0 { - return fmt.Errorf("insufficient ETH for gas (%x). Req %v, has %v", sender.Address().Bytes()[:4], MessageGasValue(self.msg), sender.Balance()) + if sender.Balance().Cmp(mgval) < 0 { + return fmt.Errorf("insufficient ETH for gas (%x). Req %v, has %v", sender.Address().Bytes()[:4], mgval, sender.Balance()) } - - coinbase := self.Coinbase() - err = coinbase.SubGas(self.msg.Gas(), self.msg.GasPrice()) - if err != nil { + if err = self.Coinbase().SubGas(mgas, self.gasPrice); err != nil { return err } - - self.AddGas(self.msg.Gas()) - self.initialGas.Set(self.msg.Gas()) - sender.SubBalance(MessageGasValue(self.msg)) - + self.AddGas(mgas) + self.initialGas.Set(mgas) + sender.SubBalance(mgval) return nil } @@ -245,15 +233,15 @@ func (self *StateTransition) refundGas() { coinbase := self.Coinbase() sender, _ := self.From() // err already checked // Return remaining gas - remaining := new(big.Int).Mul(self.gas, self.msg.GasPrice()) + remaining := new(big.Int).Mul(self.gas, self.gasPrice) sender.AddBalance(remaining) - uhalf := new(big.Int).Div(self.gasUsed(), common.Big2) + uhalf := remaining.Div(self.gasUsed(), common.Big2) refund := common.BigMin(uhalf, self.state.Refunds()) self.gas.Add(self.gas, refund) - self.state.AddBalance(sender.Address(), refund.Mul(refund, self.msg.GasPrice())) + self.state.AddBalance(sender.Address(), refund.Mul(refund, self.gasPrice)) - coinbase.AddGas(self.gas, self.msg.GasPrice()) + coinbase.AddGas(self.gas, self.gasPrice) } func (self *StateTransition) gasUsed() *big.Int { From 76821d167acd7da15e13b23beeceb6779138ffe5 Mon Sep 17 00:00:00 2001 From: Felix Lange <fjl@twurst.com> Date: Sat, 27 Jun 2015 03:08:50 +0200 Subject: [PATCH 096/156] core, eth, rpc: avoid unnecessary block header copying --- core/block_processor.go | 42 +++++++++++++++++++----------------- core/block_processor_test.go | 4 ++-- core/chain_manager.go | 6 +++--- eth/gasprice.go | 12 +++++------ eth/handler.go | 2 +- rpc/api/parsing.go | 18 +++++++++------- 6 files changed, 44 insertions(+), 40 deletions(-) diff --git a/core/block_processor.go b/core/block_processor.go index 4b27f87977..22d4c7c27a 100644 --- a/core/block_processor.go +++ b/core/block_processor.go @@ -186,7 +186,7 @@ func (sm *BlockProcessor) processWithParent(block, parent *types.Block) (logs st txs := block.Transactions() // Block validation - if err = ValidateHeader(sm.Pow, header, parent.Header(), false); err != nil { + if err = ValidateHeader(sm.Pow, header, parent, false); err != nil { return } @@ -285,19 +285,18 @@ func AccumulateRewards(statedb *state.StateDB, header *types.Header, uncles []*t } func (sm *BlockProcessor) VerifyUncles(statedb *state.StateDB, block, parent *types.Block) error { - ancestors := set.New() uncles := set.New() - ancestorHeaders := make(map[common.Hash]*types.Header) + ancestors := make(map[common.Hash]*types.Block) for _, ancestor := range sm.bc.GetBlocksFromHash(block.ParentHash(), 7) { - ancestorHeaders[ancestor.Hash()] = ancestor.Header() - ancestors.Add(ancestor.Hash()) + ancestors[ancestor.Hash()] = ancestor // Include ancestors uncles in the uncle set. Uncles must be unique. for _, uncle := range ancestor.Uncles() { uncles.Add(uncle.Hash()) } } - + ancestors[block.Hash()] = block uncles.Add(block.Hash()) + for i, uncle := range block.Uncles() { hash := uncle.Hash() if uncles.Has(hash) { @@ -306,22 +305,20 @@ func (sm *BlockProcessor) VerifyUncles(statedb *state.StateDB, block, parent *ty } uncles.Add(hash) - if ancestors.Has(hash) { + if ancestors[hash] != nil { branch := fmt.Sprintf(" O - %x\n |\n", block.Hash()) - ancestors.Each(func(item interface{}) bool { - branch += fmt.Sprintf(" O - %x\n |\n", hash) - return true - }) + for h := range ancestors { + branch += fmt.Sprintf(" O - %x\n |\n", h) + } glog.Infoln(branch) - return UncleError("uncle[%d](%x) is ancestor", i, hash[:4]) } - if !ancestors.Has(uncle.ParentHash) || uncle.ParentHash == parent.Hash() { + if ancestors[uncle.ParentHash] == nil || uncle.ParentHash == parent.Hash() { return UncleError("uncle[%d](%x)'s parent is not ancestor (%x)", i, hash[:4], uncle.ParentHash[0:4]) } - if err := ValidateHeader(sm.Pow, uncle, ancestorHeaders[uncle.ParentHash], true); err != nil { + if err := ValidateHeader(sm.Pow, uncle, ancestors[uncle.ParentHash], true); err != nil { return ValidationError(fmt.Sprintf("uncle[%d](%x) header invalid: %v", i, hash[:4], err)) } } @@ -360,19 +357,22 @@ func (sm *BlockProcessor) GetLogs(block *types.Block) (logs state.Logs, err erro // See YP section 4.3.4. "Block Header Validity" // Validates a block. Returns an error if the block is invalid. -func ValidateHeader(pow pow.PoW, block, parent *types.Header, checkPow bool) error { +func ValidateHeader(pow pow.PoW, block *types.Header, parent *types.Block, checkPow bool) error { if big.NewInt(int64(len(block.Extra))).Cmp(params.MaximumExtraDataSize) == 1 { return fmt.Errorf("Block extra data too long (%d)", len(block.Extra)) } - expd := CalcDifficulty(int64(block.Time), int64(parent.Time), parent.Difficulty) + expd := CalcDifficulty(int64(block.Time), int64(parent.Time()), parent.Difficulty()) if expd.Cmp(block.Difficulty) != 0 { return fmt.Errorf("Difficulty check failed for block %v, %v", block.Difficulty, expd) } - a := new(big.Int).Sub(block.GasLimit, parent.GasLimit) + var a, b *big.Int + a = parent.GasLimit() + a = a.Sub(a, block.GasLimit) a.Abs(a) - b := new(big.Int).Div(parent.GasLimit, params.GasLimitBoundDivisor) + b = parent.GasLimit() + b = b.Div(b, params.GasLimitBoundDivisor) if !(a.Cmp(b) < 0) || (block.GasLimit.Cmp(params.MinGasLimit) == -1) { return fmt.Errorf("GasLimit check failed for block %v (%v > %v)", block.GasLimit, a, b) } @@ -381,11 +381,13 @@ func ValidateHeader(pow pow.PoW, block, parent *types.Header, checkPow bool) err return BlockFutureErr } - if new(big.Int).Sub(block.Number, parent.Number).Cmp(big.NewInt(1)) != 0 { + num := parent.Number() + num.Sub(block.Number, num) + if num.Cmp(big.NewInt(1)) != 0 { return BlockNumberErr } - if block.Time <= parent.Time { + if block.Time <= uint64(parent.Time()) { return BlockEqualTSErr //ValidationError("Block timestamp equal or less than previous block (%v - %v)", block.Time, parent.Time) } diff --git a/core/block_processor_test.go b/core/block_processor_test.go index 5931a5f5ef..dc328a3ea7 100644 --- a/core/block_processor_test.go +++ b/core/block_processor_test.go @@ -32,13 +32,13 @@ func TestNumber(t *testing.T) { statedb := state.New(chain.Genesis().Root(), chain.stateDb) header := makeHeader(chain.Genesis(), statedb) header.Number = big.NewInt(3) - err := ValidateHeader(pow, header, chain.Genesis().Header(), false) + err := ValidateHeader(pow, header, chain.Genesis(), false) if err != BlockNumberErr { t.Errorf("expected block number error, got %q", err) } header = makeHeader(chain.Genesis(), statedb) - err = ValidateHeader(pow, header, chain.Genesis().Header(), false) + err = ValidateHeader(pow, header, chain.Genesis(), false) if err == BlockNumberErr { t.Errorf("didn't expect block number error") } diff --git a/core/chain_manager.go b/core/chain_manager.go index 8a80783818..070b6b1d0d 100644 --- a/core/chain_manager.go +++ b/core/chain_manager.go @@ -164,7 +164,7 @@ func (bc *ChainManager) SetHead(head *types.Block) { bc.mu.Lock() defer bc.mu.Unlock() - for block := bc.currentBlock; block != nil && block.Hash() != head.Hash(); block = bc.GetBlock(block.Header().ParentHash) { + for block := bc.currentBlock; block != nil && block.Hash() != head.Hash(); block = bc.GetBlock(block.ParentHash()) { bc.removeBlock(block) } @@ -269,7 +269,7 @@ func (bc *ChainManager) Reset() { bc.mu.Lock() defer bc.mu.Unlock() - for block := bc.currentBlock; block != nil; block = bc.GetBlock(block.Header().ParentHash) { + for block := bc.currentBlock; block != nil; block = bc.GetBlock(block.ParentHash()) { bc.removeBlock(block) } @@ -294,7 +294,7 @@ func (bc *ChainManager) ResetWithGenesisBlock(gb *types.Block) { bc.mu.Lock() defer bc.mu.Unlock() - for block := bc.currentBlock; block != nil; block = bc.GetBlock(block.Header().ParentHash) { + for block := bc.currentBlock; block != nil; block = bc.GetBlock(block.ParentHash()) { bc.removeBlock(block) } diff --git a/eth/gasprice.go b/eth/gasprice.go index cd5293691e..44202d7094 100644 --- a/eth/gasprice.go +++ b/eth/gasprice.go @@ -133,20 +133,20 @@ func (self *GasPriceOracle) lowestPrice(block *types.Block) *big.Int { gasUsed = recepits[len(recepits)-1].CumulativeGasUsed } - if new(big.Int).Mul(gasUsed, big.NewInt(100)).Cmp(new(big.Int).Mul(block.Header().GasLimit, + if new(big.Int).Mul(gasUsed, big.NewInt(100)).Cmp(new(big.Int).Mul(block.GasLimit(), big.NewInt(int64(self.eth.GpoFullBlockRatio)))) < 0 { // block is not full, could have posted a tx with MinGasPrice return self.eth.GpoMinGasPrice } - if len(block.Transactions()) < 1 { + txs := block.Transactions() + if len(txs) == 0 { return self.eth.GpoMinGasPrice } - // block is full, find smallest gasPrice - minPrice := block.Transactions()[0].GasPrice() - for i := 1; i < len(block.Transactions()); i++ { - price := block.Transactions()[i].GasPrice() + minPrice := txs[0].GasPrice() + for i := 1; i < len(txs); i++ { + price := txs[i].GasPrice() if price.Cmp(minPrice) < 0 { minPrice = price } diff --git a/eth/handler.go b/eth/handler.go index ad88e9c596..278a2bec25 100644 --- a/eth/handler.go +++ b/eth/handler.go @@ -93,7 +93,7 @@ func NewProtocolManager(protocolVersion, networkId int, mux *event.TypeMux, txpo manager.downloader = downloader.New(manager.eventMux, manager.chainman.HasBlock, manager.chainman.GetBlock, manager.chainman.InsertChain, manager.removePeer) validator := func(block *types.Block, parent *types.Block) error { - return core.ValidateHeader(pow, block.Header(), parent.Header(), true) + return core.ValidateHeader(pow, block.Header(), parent, true) } heighter := func() uint64 { return manager.chainman.CurrentBlock().NumberU64() diff --git a/rpc/api/parsing.go b/rpc/api/parsing.go index 85a9165e5e..632462c31a 100644 --- a/rpc/api/parsing.go +++ b/rpc/api/parsing.go @@ -270,29 +270,31 @@ func NewBlockRes(block *types.Block, fullTx bool) *BlockRes { res.BlockHash = newHexData(block.Hash()) res.ParentHash = newHexData(block.ParentHash()) res.Nonce = newHexData(block.Nonce()) - res.Sha3Uncles = newHexData(block.Header().UncleHash) + res.Sha3Uncles = newHexData(block.UncleHash()) res.LogsBloom = newHexData(block.Bloom()) - res.TransactionRoot = newHexData(block.Header().TxHash) + res.TransactionRoot = newHexData(block.TxHash()) res.StateRoot = newHexData(block.Root()) - res.Miner = newHexData(block.Header().Coinbase) + res.Miner = newHexData(block.Coinbase()) res.Difficulty = newHexNum(block.Difficulty()) res.TotalDifficulty = newHexNum(block.Td) res.Size = newHexNum(block.Size().Int64()) - res.ExtraData = newHexData(block.Header().Extra) + res.ExtraData = newHexData(block.Extra()) res.GasLimit = newHexNum(block.GasLimit()) res.GasUsed = newHexNum(block.GasUsed()) res.UnixTimestamp = newHexNum(block.Time()) - res.Transactions = make([]*TransactionRes, len(block.Transactions())) - for i, tx := range block.Transactions() { + txs := block.Transactions() + res.Transactions = make([]*TransactionRes, len(txs)) + for i, tx := range txs { res.Transactions[i] = NewTransactionRes(tx) res.Transactions[i].BlockHash = res.BlockHash res.Transactions[i].BlockNumber = res.BlockNumber res.Transactions[i].TxIndex = newHexNum(i) } - res.Uncles = make([]*UncleRes, len(block.Uncles())) - for i, uncle := range block.Uncles() { + uncles := block.Uncles() + res.Uncles = make([]*UncleRes, len(uncles)) + for i, uncle := range uncles { res.Uncles[i] = NewUncleRes(uncle) } From c850c41ec108484a613600df103dbc55fe209a98 Mon Sep 17 00:00:00 2001 From: obscuren <geffobscura@gmail.com> Date: Fri, 19 Jun 2015 16:20:13 +0200 Subject: [PATCH 097/156] trie: Implemented a batch write approach for flushing --- trie/cache.go | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/trie/cache.go b/trie/cache.go index 4c76c6cbaf..cb805d2f23 100644 --- a/trie/cache.go +++ b/trie/cache.go @@ -1,6 +1,11 @@ package trie -import "github.com/ethereum/go-ethereum/logger/glog" +import ( + "github.com/ethereum/go-ethereum/compression/rle" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/logger/glog" + "github.com/syndtr/goleveldb/leveldb" +) type Backend interface { Get([]byte) ([]byte, error) @@ -8,12 +13,13 @@ type Backend interface { } type Cache struct { + batch *leveldb.Batch store map[string][]byte backend Backend } func NewCache(backend Backend) *Cache { - return &Cache{make(map[string][]byte), backend} + return &Cache{new(leveldb.Batch), make(map[string][]byte), backend} } func (self *Cache) Get(key []byte) []byte { @@ -26,19 +32,23 @@ func (self *Cache) Get(key []byte) []byte { } func (self *Cache) Put(key []byte, data []byte) { + // write the data to the ldb batch + self.batch.Put(key, rle.Compress(data)) self.store[string(key)] = data } +// Flush flushes the trie to the backing layer. If this is a leveldb instance +// we'll use a batched write, otherwise we'll use regular put. func (self *Cache) Flush() { - for k, v := range self.store { - if err := self.backend.Put([]byte(k), v); err != nil { + if db, ok := self.backend.(*ethdb.LDBDatabase); ok { + if err := db.LDB().Write(self.batch, nil); err != nil { glog.Fatal("db write err:", err) } + } else { + for k, v := range self.store { + self.backend.Put([]byte(k), v) + } } - - // This will eventually grow too large. We'd could - // do a make limit on storage and push out not-so-popular nodes. - //self.Reset() } func (self *Cache) Copy() *Cache { From 2a5a55efafa39a21a5c70afcc85dfb00c6002028 Mon Sep 17 00:00:00 2001 From: obscuren <geffobscura@gmail.com> Date: Fri, 19 Jun 2015 16:20:49 +0200 Subject: [PATCH 098/156] ethdb: accessor for LDB. TODO remove this interface --- ethdb/database.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ethdb/database.go b/ethdb/database.go index 32ce845a08..8f55d43c3f 100644 --- a/ethdb/database.go +++ b/ethdb/database.go @@ -115,3 +115,7 @@ func (self *LDBDatabase) Close() { self.db.Close() glog.V(logger.Error).Infoln("flushed and closed db:", self.fn) } + +func (self *LDBDatabase) LDB() *leveldb.DB { + return self.db +} From 4460dc9d1a7e12f1f0583538c7df852cd64c4fed Mon Sep 17 00:00:00 2001 From: obscuren <geffobscura@gmail.com> Date: Fri, 19 Jun 2015 16:21:20 +0200 Subject: [PATCH 099/156] core: added LRU caching and added batch writing when LDB is used --- core/chain_manager.go | 102 +++++++++++++++++++++++++++++++++--------- 1 file changed, 81 insertions(+), 21 deletions(-) diff --git a/core/chain_manager.go b/core/chain_manager.go index 070b6b1d0d..a0f9450201 100644 --- a/core/chain_manager.go +++ b/core/chain_manager.go @@ -11,15 +11,18 @@ import ( "time" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/compression/rle" "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/event" "github.com/ethereum/go-ethereum/logger" "github.com/ethereum/go-ethereum/logger/glog" "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/pow" "github.com/ethereum/go-ethereum/rlp" - "github.com/rcrowley/go-metrics" + "github.com/golang/groupcache/lru" + "github.com/syndtr/goleveldb/leveldb" ) var ( @@ -105,8 +108,9 @@ type ChainManager struct { transState *state.StateDB txState *state.ManagedState - cache *BlockCache - futureBlocks *BlockCache + cache *lru.Cache // cache is the LRU caching + futureBlocks *BlockCache // future blocks are blocks added for later processing + nextBlocks *BlockCache // next blocks is used during large inserts quit chan struct{} // procInterrupt must be atomically called @@ -123,7 +127,7 @@ func NewChainManager(genesis *types.Block, blockDb, stateDb common.Database, pow genesisBlock: GenesisBlock(42, stateDb), eventMux: mux, quit: make(chan struct{}), - cache: NewBlockCache(blockCacheLimit), + cache: lru.New(blockCacheLimit), pow: pow, } // Check the genesis block given to the chain manager. If the genesis block mismatches block number 0 @@ -168,7 +172,7 @@ func (bc *ChainManager) SetHead(head *types.Block) { bc.removeBlock(block) } - bc.cache = NewBlockCache(blockCacheLimit) + bc.cache = lru.New(blockCacheLimit) bc.currentBlock = head bc.makeCache() @@ -257,11 +261,13 @@ func (bc *ChainManager) setLastState() { func (bc *ChainManager) makeCache() { if bc.cache == nil { - bc.cache = NewBlockCache(blockCacheLimit) + bc.cache = lru.New(blockCacheLimit) } // load in last `blockCacheLimit` - 1 blocks. Last block is the current. - for _, block := range bc.GetBlocksFromHash(bc.currentBlock.Hash(), blockCacheLimit) { - bc.cache.Push(block) + ancestors := bc.GetAncestors(bc.currentBlock, blockCacheLimit-1) + ancestors = append(ancestors, bc.currentBlock) + for _, block := range ancestors { + bc.cache.Add(block.Hash(), block) } } @@ -274,7 +280,7 @@ func (bc *ChainManager) Reset() { } if bc.cache == nil { - bc.cache = NewBlockCache(blockCacheLimit) + bc.cache = lru.New(blockCacheLimit) } // Prepare the genesis block @@ -359,15 +365,20 @@ func (bc *ChainManager) insert(block *types.Block) { } func (bc *ChainManager) write(block *types.Block) { - enc, _ := rlp.EncodeToBytes((*types.StorageBlock)(block)) - key := append(blockHashPre, block.Hash().Bytes()...) - err := bc.blockDb.Put(key, enc) - if err != nil { - glog.Fatal("db write fail:", err) - } + tstart := time.Now() - // Push block to cache - bc.cache.Push(block) + go func() { + enc, _ := rlp.EncodeToBytes((*types.StorageBlock)(block)) + key := append(blockHashPre, block.Hash().Bytes()...) + err := bc.blockDb.Put(key, enc) + if err != nil { + glog.Fatal("db write fail:", err) + } + }() + + if glog.V(logger.Debug) { + glog.Infof("wrote block #%v %s. Took %v\n", block.Number(), common.PP(block.Hash().Bytes()), time.Since(tstart)) + } } // Accessors @@ -377,6 +388,16 @@ func (bc *ChainManager) Genesis() *types.Block { // Block fetching methods func (bc *ChainManager) HasBlock(hash common.Hash) bool { + if bc.cache.Contains(hash) { + return true + } + + if bc.nextBlocks != nil { + if block := bc.nextBlocks.Get(hash); block != nil { + return true + } + } + data, _ := bc.blockDb.Get(append(blockHashPre, hash[:]...)) return len(data) != 0 } @@ -403,11 +424,15 @@ func (self *ChainManager) GetBlockHashesFromHash(hash common.Hash, max uint64) ( } func (self *ChainManager) GetBlock(hash common.Hash) *types.Block { - /* - if block := self.cache.Get(hash); block != nil { + if block, ok := self.cache.Get(hash); ok { + return block.(*types.Block) + } + + if self.nextBlocks != nil { + if block := self.nextBlocks.Get(hash); block != nil { return block } - */ + } data, _ := self.blockDb.Get(append(blockHashPre, hash[:]...)) if len(data) == 0 { @@ -418,6 +443,10 @@ func (self *ChainManager) GetBlock(hash common.Hash) *types.Block { glog.V(logger.Error).Infof("invalid block RLP for hash %x: %v", hash, err) return nil } + + // Add the block to the cache + self.cache.Add(hash, (*types.Block)(&block)) + return (*types.Block)(&block) } @@ -494,6 +523,31 @@ func (self *ChainManager) procFutureBlocks() { } } +func (self *ChainManager) enqueueForWrite(block *types.Block) { + self.nextBlocks.Push(block) +} + +func (self *ChainManager) flushQueuedBlocks() { + db, batchWrite := self.blockDb.(*ethdb.LDBDatabase) + batch := new(leveldb.Batch) + self.nextBlocks.Each(func(i int, block *types.Block) { + enc, _ := rlp.EncodeToBytes((*types.StorageBlock)(block)) + key := append(blockHashPre, block.Hash().Bytes()...) + if batchWrite { + batch.Put(key, rle.Compress(enc)) + } else { + self.blockDb.Put(key, enc) + } + }) + if batchWrite { + db.LDB().Write(batch, nil) + } + + // reset the next blocks cache + self.nextBlocks = nil + +} + // InsertChain will attempt to insert the given chain in to the canonical chain or, otherwise, create a fork. It an error is returned // it will return the index number of the failing block as well an error describing what went wrong (for possible errors see core/errors.go). func (self *ChainManager) InsertChain(chain types.Blocks) (int, error) { @@ -503,6 +557,8 @@ func (self *ChainManager) InsertChain(chain types.Blocks) (int, error) { self.chainmu.Lock() defer self.chainmu.Unlock() + self.nextBlocks = NewBlockCache(len(chain)) + // A queued approach to delivering events. This is generally // faster than direct delivery and requires much less mutex // acquiring. @@ -520,6 +576,10 @@ func (self *ChainManager) InsertChain(chain types.Blocks) (int, error) { // Start the parallel nonce verifier. go verifyNonces(self.pow, chain, nonceQuit, nonceDone) defer close(nonceQuit) + defer self.flushQueuedBlocks() + + defer func() { + }() txcount := 0 for i, block := range chain { @@ -632,7 +692,7 @@ func (self *ChainManager) InsertChain(chain types.Blocks) (int, error) { } // Write block to database. Eventually we'll have to improve on this and throw away blocks that are // not in the canonical chain. - self.write(block) + self.enqueueForWrite(block) // Delete from future blocks self.futureBlocks.Delete(block.Hash()) From 6ca3a446383bafc9510b36c88629ca7d876fb258 Mon Sep 17 00:00:00 2001 From: obscuren <geffobscura@gmail.com> Date: Fri, 19 Jun 2015 16:48:55 +0200 Subject: [PATCH 100/156] core: switched to proper LRU --- core/chain_manager.go | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/core/chain_manager.go b/core/chain_manager.go index a0f9450201..e67439bb6e 100644 --- a/core/chain_manager.go +++ b/core/chain_manager.go @@ -21,7 +21,7 @@ import ( "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/pow" "github.com/ethereum/go-ethereum/rlp" - "github.com/golang/groupcache/lru" + "github.com/hashicorp/golang-lru" "github.com/syndtr/goleveldb/leveldb" ) @@ -121,13 +121,14 @@ type ChainManager struct { } func NewChainManager(genesis *types.Block, blockDb, stateDb common.Database, pow pow.PoW, mux *event.TypeMux) (*ChainManager, error) { + cache, _ := lru.New(blockCacheLimit) bc := &ChainManager{ blockDb: blockDb, stateDb: stateDb, genesisBlock: GenesisBlock(42, stateDb), eventMux: mux, quit: make(chan struct{}), - cache: lru.New(blockCacheLimit), + cache: cache, pow: pow, } // Check the genesis block given to the chain manager. If the genesis block mismatches block number 0 @@ -172,7 +173,7 @@ func (bc *ChainManager) SetHead(head *types.Block) { bc.removeBlock(block) } - bc.cache = lru.New(blockCacheLimit) + bc.cache, _ = lru.New(blockCacheLimit) bc.currentBlock = head bc.makeCache() @@ -260,9 +261,7 @@ func (bc *ChainManager) setLastState() { } func (bc *ChainManager) makeCache() { - if bc.cache == nil { - bc.cache = lru.New(blockCacheLimit) - } + bc.cache, _ = lru.New(blockCacheLimit) // load in last `blockCacheLimit` - 1 blocks. Last block is the current. ancestors := bc.GetAncestors(bc.currentBlock, blockCacheLimit-1) ancestors = append(ancestors, bc.currentBlock) @@ -279,9 +278,7 @@ func (bc *ChainManager) Reset() { bc.removeBlock(block) } - if bc.cache == nil { - bc.cache = lru.New(blockCacheLimit) - } + bc.cache, _ = lru.New(blockCacheLimit) // Prepare the genesis block bc.write(bc.genesisBlock) From 4d117478368d6badf8d0e527f5bfd5bb6386deaa Mon Sep 17 00:00:00 2001 From: obscuren <geffobscura@gmail.com> Date: Fri, 19 Jun 2015 17:02:09 +0200 Subject: [PATCH 101/156] deps: Added golang-lru --- Godeps/Godeps.json | 7 +- .../hashicorp/golang-lru/.gitignore | 23 ++ .../github.com/hashicorp/golang-lru/LICENSE | 362 ++++++++++++++++++ .../github.com/hashicorp/golang-lru/README.md | 25 ++ .../github.com/hashicorp/golang-lru/lru.go | 175 +++++++++ .../hashicorp/golang-lru/lru_test.go | 127 ++++++ 6 files changed, 718 insertions(+), 1 deletion(-) create mode 100644 Godeps/_workspace/src/github.com/hashicorp/golang-lru/.gitignore create mode 100644 Godeps/_workspace/src/github.com/hashicorp/golang-lru/LICENSE create mode 100644 Godeps/_workspace/src/github.com/hashicorp/golang-lru/README.md create mode 100644 Godeps/_workspace/src/github.com/hashicorp/golang-lru/lru.go create mode 100644 Godeps/_workspace/src/github.com/hashicorp/golang-lru/lru_test.go diff --git a/Godeps/Godeps.json b/Godeps/Godeps.json index ce4e8753a1..c016558940 100644 --- a/Godeps/Godeps.json +++ b/Godeps/Godeps.json @@ -1,6 +1,6 @@ { "ImportPath": "github.com/ethereum/go-ethereum", - "GoVersion": "go1.4.2", + "GoVersion": "go1.4", "Packages": [ "./..." ], @@ -28,6 +28,11 @@ "ImportPath": "github.com/gizak/termui", "Rev": "bab8dce01c193d82bc04888a0a9a7814d505f532" }, + { + "ImportPath": "github.com/howeyc/fsnotify", + "Comment": "v0.9.0-11-g6b1ef89", + "Rev": "6b1ef893dc11e0447abda6da20a5203481878dda" + }, { "ImportPath": "github.com/huin/goupnp", "Rev": "5cff77a69fb22f5f1774c4451ea2aab63d4d2f20" diff --git a/Godeps/_workspace/src/github.com/hashicorp/golang-lru/.gitignore b/Godeps/_workspace/src/github.com/hashicorp/golang-lru/.gitignore new file mode 100644 index 0000000000..836562412f --- /dev/null +++ b/Godeps/_workspace/src/github.com/hashicorp/golang-lru/.gitignore @@ -0,0 +1,23 @@ +# Compiled Object files, Static and Dynamic libs (Shared Objects) +*.o +*.a +*.so + +# Folders +_obj +_test + +# Architecture specific extensions/prefixes +*.[568vq] +[568vq].out + +*.cgo1.go +*.cgo2.c +_cgo_defun.c +_cgo_gotypes.go +_cgo_export.* + +_testmain.go + +*.exe +*.test diff --git a/Godeps/_workspace/src/github.com/hashicorp/golang-lru/LICENSE b/Godeps/_workspace/src/github.com/hashicorp/golang-lru/LICENSE new file mode 100644 index 0000000000..be2cc4dfb6 --- /dev/null +++ b/Godeps/_workspace/src/github.com/hashicorp/golang-lru/LICENSE @@ -0,0 +1,362 @@ +Mozilla Public License, version 2.0 + +1. Definitions + +1.1. "Contributor" + + means each individual or legal entity that creates, contributes to the + creation of, or owns Covered Software. + +1.2. "Contributor Version" + + means the combination of the Contributions of others (if any) used by a + Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" + + means Covered Software of a particular Contributor. + +1.4. "Covered Software" + + means Source Code Form to which the initial Contributor has attached the + notice in Exhibit A, the Executable Form of such Source Code Form, and + Modifications of such Source Code Form, in each case including portions + thereof. + +1.5. "Incompatible With Secondary Licenses" + means + + a. that the initial Contributor has attached the notice described in + Exhibit B to the Covered Software; or + + b. that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the terms of + a Secondary License. + +1.6. "Executable Form" + + means any form of the work other than Source Code Form. + +1.7. "Larger Work" + + means a work that combines Covered Software with other material, in a + separate file or files, that is not Covered Software. + +1.8. "License" + + means this document. + +1.9. "Licensable" + + means having the right to grant, to the maximum extent possible, whether + at the time of the initial grant or subsequently, any and all of the + rights conveyed by this License. + +1.10. "Modifications" + + means any of the following: + + a. any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered Software; or + + b. any new file in Source Code Form that contains any Covered Software. + +1.11. "Patent Claims" of a Contributor + + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the License, + by the making, using, selling, offering for sale, having made, import, + or transfer of either its Contributions or its Contributor Version. + +1.12. "Secondary License" + + means either the GNU General Public License, Version 2.0, the GNU Lesser + General Public License, Version 2.1, the GNU Affero General Public + License, Version 3.0, or any later versions of those licenses. + +1.13. "Source Code Form" + + means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") + + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that controls, is + controlled by, or is under common control with You. For purposes of this + definition, "control" means (a) the power, direct or indirect, to cause + the direction or management of such entity, whether by contract or + otherwise, or (b) ownership of more than fifty percent (50%) of the + outstanding shares or beneficial ownership of such entity. + + +2. License Grants and Conditions + +2.1. Grants + + Each Contributor hereby grants You a world-wide, royalty-free, + non-exclusive license: + + a. under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + + b. under Patent Claims of such Contributor to make, use, sell, offer for + sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + +2.2. Effective Date + + The licenses granted in Section 2.1 with respect to any Contribution + become effective for each Contribution on the date the Contributor first + distributes such Contribution. + +2.3. Limitations on Grant Scope + + The licenses granted in this Section 2 are the only rights granted under + this License. No additional rights or licenses will be implied from the + distribution or licensing of Covered Software under this License. + Notwithstanding Section 2.1(b) above, no patent license is granted by a + Contributor: + + a. for any code that a Contributor has removed from Covered Software; or + + b. for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + + c. under Patent Claims infringed by Covered Software in the absence of + its Contributions. + + This License does not grant any rights in the trademarks, service marks, + or logos of any Contributor (except as may be necessary to comply with + the notice requirements in Section 3.4). + +2.4. Subsequent Licenses + + No Contributor makes additional grants as a result of Your choice to + distribute the Covered Software under a subsequent version of this + License (see Section 10.2) or under the terms of a Secondary License (if + permitted under the terms of Section 3.3). + +2.5. Representation + + Each Contributor represents that the Contributor believes its + Contributions are its original creation(s) or it has sufficient rights to + grant the rights to its Contributions conveyed by this License. + +2.6. Fair Use + + This License is not intended to limit any rights You have under + applicable copyright doctrines of fair use, fair dealing, or other + equivalents. + +2.7. Conditions + + Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in + Section 2.1. + + +3. Responsibilities + +3.1. Distribution of Source Form + + All distribution of Covered Software in Source Code Form, including any + Modifications that You create or to which You contribute, must be under + the terms of this License. You must inform recipients that the Source + Code Form of the Covered Software is governed by the terms of this + License, and how they can obtain a copy of this License. You may not + attempt to alter or restrict the recipients' rights in the Source Code + Form. + +3.2. Distribution of Executable Form + + If You distribute Covered Software in Executable Form then: + + a. such Covered Software must also be made available in Source Code Form, + as described in Section 3.1, and You must inform recipients of the + Executable Form how they can obtain a copy of such Source Code Form by + reasonable means in a timely manner, at a charge no more than the cost + of distribution to the recipient; and + + b. You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter the + recipients' rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + + You may create and distribute a Larger Work under terms of Your choice, + provided that You also comply with the requirements of this License for + the Covered Software. If the Larger Work is a combination of Covered + Software with a work governed by one or more Secondary Licenses, and the + Covered Software is not Incompatible With Secondary Licenses, this + License permits You to additionally distribute such Covered Software + under the terms of such Secondary License(s), so that the recipient of + the Larger Work may, at their option, further distribute the Covered + Software under the terms of either this License or such Secondary + License(s). + +3.4. Notices + + You may not remove or alter the substance of any license notices + (including copyright notices, patent notices, disclaimers of warranty, or + limitations of liability) contained within the Source Code Form of the + Covered Software, except that You may alter any license notices to the + extent required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + + You may choose to offer, and to charge a fee for, warranty, support, + indemnity or liability obligations to one or more recipients of Covered + Software. However, You may do so only on Your own behalf, and not on + behalf of any Contributor. You must make it absolutely clear that any + such warranty, support, indemnity, or liability obligation is offered by + You alone, and You hereby agree to indemnify every Contributor for any + liability incurred by such Contributor as a result of warranty, support, + indemnity or liability terms You offer. You may include additional + disclaimers of warranty and limitations of liability specific to any + jurisdiction. + +4. Inability to Comply Due to Statute or Regulation + + If it is impossible for You to comply with any of the terms of this License + with respect to some or all of the Covered Software due to statute, + judicial order, or regulation then You must: (a) comply with the terms of + this License to the maximum extent possible; and (b) describe the + limitations and the code they affect. Such description must be placed in a + text file included with all distributions of the Covered Software under + this License. Except to the extent prohibited by statute or regulation, + such description must be sufficiently detailed for a recipient of ordinary + skill to be able to understand it. + +5. Termination + +5.1. The rights granted under this License will terminate automatically if You + fail to comply with any of its terms. However, if You become compliant, + then the rights granted under this License from a particular Contributor + are reinstated (a) provisionally, unless and until such Contributor + explicitly and finally terminates Your grants, and (b) on an ongoing + basis, if such Contributor fails to notify You of the non-compliance by + some reasonable means prior to 60 days after You have come back into + compliance. Moreover, Your grants from a particular Contributor are + reinstated on an ongoing basis if such Contributor notifies You of the + non-compliance by some reasonable means, this is the first time You have + received notice of non-compliance with this License from such + Contributor, and You become compliant prior to 30 days after Your receipt + of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent + infringement claim (excluding declaratory judgment actions, + counter-claims, and cross-claims) alleging that a Contributor Version + directly or indirectly infringes any patent, then the rights granted to + You by any and all Contributors for the Covered Software under Section + 2.1 of this License shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user + license agreements (excluding distributors and resellers) which have been + validly granted by You or Your distributors under this License prior to + termination shall survive termination. + +6. Disclaimer of Warranty + + Covered Software is provided under this License on an "as is" basis, + without warranty of any kind, either expressed, implied, or statutory, + including, without limitation, warranties that the Covered Software is free + of defects, merchantable, fit for a particular purpose or non-infringing. + The entire risk as to the quality and performance of the Covered Software + is with You. Should any Covered Software prove defective in any respect, + You (not any Contributor) assume the cost of any necessary servicing, + repair, or correction. This disclaimer of warranty constitutes an essential + part of this License. No use of any Covered Software is authorized under + this License except under this disclaimer. + +7. Limitation of Liability + + Under no circumstances and under no legal theory, whether tort (including + negligence), contract, or otherwise, shall any Contributor, or anyone who + distributes Covered Software as permitted above, be liable to You for any + direct, indirect, special, incidental, or consequential damages of any + character including, without limitation, damages for lost profits, loss of + goodwill, work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses, even if such party shall have been + informed of the possibility of such damages. This limitation of liability + shall not apply to liability for death or personal injury resulting from + such party's negligence to the extent applicable law prohibits such + limitation. Some jurisdictions do not allow the exclusion or limitation of + incidental or consequential damages, so this exclusion and limitation may + not apply to You. + +8. Litigation + + Any litigation relating to this License may be brought only in the courts + of a jurisdiction where the defendant maintains its principal place of + business and such litigation shall be governed by laws of that + jurisdiction, without reference to its conflict-of-law provisions. Nothing + in this Section shall prevent a party's ability to bring cross-claims or + counter-claims. + +9. Miscellaneous + + This License represents the complete agreement concerning the subject + matter hereof. If any provision of this License is held to be + unenforceable, such provision shall be reformed only to the extent + necessary to make it enforceable. Any law or regulation which provides that + the language of a contract shall be construed against the drafter shall not + be used to construe this License against a Contributor. + + +10. Versions of the License + +10.1. New Versions + + Mozilla Foundation is the license steward. Except as provided in Section + 10.3, no one other than the license steward has the right to modify or + publish new versions of this License. Each version will be given a + distinguishing version number. + +10.2. Effect of New Versions + + You may distribute the Covered Software under the terms of the version + of the License under which You originally received the Covered Software, + or under the terms of any subsequent version published by the license + steward. + +10.3. Modified Versions + + If you create software not governed by this License, and you want to + create a new license for such software, you may create and use a + modified version of this License if you rename the license and remove + any references to the name of the license steward (except to note that + such modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary + Licenses If You choose to distribute Source Code Form that is + Incompatible With Secondary Licenses under the terms of this version of + the License, the notice described in Exhibit B of this License must be + attached. + +Exhibit A - Source Code Form License Notice + + This Source Code Form is subject to the + terms of the Mozilla Public License, v. + 2.0. If a copy of the MPL was not + distributed with this file, You can + obtain one at + http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular file, +then You may include the notice in a location (such as a LICENSE file in a +relevant directory) where a recipient would be likely to look for such a +notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - "Incompatible With Secondary Licenses" Notice + + This Source Code Form is "Incompatible + With Secondary Licenses", as defined by + the Mozilla Public License, v. 2.0. diff --git a/Godeps/_workspace/src/github.com/hashicorp/golang-lru/README.md b/Godeps/_workspace/src/github.com/hashicorp/golang-lru/README.md new file mode 100644 index 0000000000..33e58cfaf9 --- /dev/null +++ b/Godeps/_workspace/src/github.com/hashicorp/golang-lru/README.md @@ -0,0 +1,25 @@ +golang-lru +========== + +This provides the `lru` package which implements a fixed-size +thread safe LRU cache. It is based on the cache in Groupcache. + +Documentation +============= + +Full docs are available on [Godoc](http://godoc.org/github.com/hashicorp/golang-lru) + +Example +======= + +Using the LRU is very simple: + +```go +l, _ := New(128) +for i := 0; i < 256; i++ { + l.Add(i, nil) +} +if l.Len() != 128 { + panic(fmt.Sprintf("bad len: %v", l.Len())) +} +``` diff --git a/Godeps/_workspace/src/github.com/hashicorp/golang-lru/lru.go b/Godeps/_workspace/src/github.com/hashicorp/golang-lru/lru.go new file mode 100644 index 0000000000..5f1e8a1af3 --- /dev/null +++ b/Godeps/_workspace/src/github.com/hashicorp/golang-lru/lru.go @@ -0,0 +1,175 @@ +// This package provides a simple LRU cache. It is based on the +// LRU implementation in groupcache: +// https://github.com/golang/groupcache/tree/master/lru +package lru + +import ( + "container/list" + "errors" + "sync" +) + +// Cache is a thread-safe fixed size LRU cache. +type Cache struct { + size int + evictList *list.List + items map[interface{}]*list.Element + lock sync.RWMutex + onEvicted func(key interface{}, value interface{}) +} + +// entry is used to hold a value in the evictList +type entry struct { + key interface{} + value interface{} +} + +// New creates an LRU of the given size +func New(size int) (*Cache, error) { + return NewWithEvict(size, nil) +} + +func NewWithEvict(size int, onEvicted func(key interface{}, value interface{})) (*Cache, error) { + if size <= 0 { + return nil, errors.New("Must provide a positive size") + } + c := &Cache{ + size: size, + evictList: list.New(), + items: make(map[interface{}]*list.Element, size), + onEvicted: onEvicted, + } + return c, nil +} + +// Purge is used to completely clear the cache +func (c *Cache) Purge() { + c.lock.Lock() + defer c.lock.Unlock() + + if c.onEvicted != nil { + for k, v := range c.items { + c.onEvicted(k, v.Value.(*entry).value) + } + } + + c.evictList = list.New() + c.items = make(map[interface{}]*list.Element, c.size) +} + +// Add adds a value to the cache. Returns true if an eviction occured. +func (c *Cache) Add(key, value interface{}) bool { + c.lock.Lock() + defer c.lock.Unlock() + + // Check for existing item + if ent, ok := c.items[key]; ok { + c.evictList.MoveToFront(ent) + ent.Value.(*entry).value = value + return false + } + + // Add new item + ent := &entry{key, value} + entry := c.evictList.PushFront(ent) + c.items[key] = entry + + evict := c.evictList.Len() > c.size + // Verify size not exceeded + if evict { + c.removeOldest() + } + return evict +} + +// Get looks up a key's value from the cache. +func (c *Cache) Get(key interface{}) (value interface{}, ok bool) { + c.lock.Lock() + defer c.lock.Unlock() + + if ent, ok := c.items[key]; ok { + c.evictList.MoveToFront(ent) + return ent.Value.(*entry).value, true + } + return +} + +// Check if a key is in the cache, without updating the recent-ness or deleting it for being stale. +func (c *Cache) Contains(key interface{}) (ok bool) { + c.lock.RLock() + defer c.lock.RUnlock() + + _, ok = c.items[key] + return ok +} + +// Returns the key value (or undefined if not found) without updating the "recently used"-ness of the key. +// (If you find yourself using this a lot, you might be using the wrong sort of data structure, but there are some use cases where it's handy.) +func (c *Cache) Peek(key interface{}) (value interface{}, ok bool) { + c.lock.RLock() + defer c.lock.RUnlock() + + if ent, ok := c.items[key]; ok { + return ent.Value.(*entry).value, true + } + return nil, ok +} + +// Remove removes the provided key from the cache. +func (c *Cache) Remove(key interface{}) { + c.lock.Lock() + defer c.lock.Unlock() + + if ent, ok := c.items[key]; ok { + c.removeElement(ent) + } +} + +// RemoveOldest removes the oldest item from the cache. +func (c *Cache) RemoveOldest() { + c.lock.Lock() + defer c.lock.Unlock() + c.removeOldest() +} + +// Keys returns a slice of the keys in the cache, from oldest to newest. +func (c *Cache) Keys() []interface{} { + c.lock.RLock() + defer c.lock.RUnlock() + + keys := make([]interface{}, len(c.items)) + ent := c.evictList.Back() + i := 0 + for ent != nil { + keys[i] = ent.Value.(*entry).key + ent = ent.Prev() + i++ + } + + return keys +} + +// Len returns the number of items in the cache. +func (c *Cache) Len() int { + c.lock.RLock() + defer c.lock.RUnlock() + return c.evictList.Len() +} + +// removeOldest removes the oldest item from the cache. +func (c *Cache) removeOldest() { + ent := c.evictList.Back() + if ent != nil { + c.removeElement(ent) + } +} + +// removeElement is used to remove a given list element from the cache +func (c *Cache) removeElement(e *list.Element) { + c.evictList.Remove(e) + kv := e.Value.(*entry) + delete(c.items, kv.key) + if c.onEvicted != nil { + c.onEvicted(kv.key, kv.value) + } +} diff --git a/Godeps/_workspace/src/github.com/hashicorp/golang-lru/lru_test.go b/Godeps/_workspace/src/github.com/hashicorp/golang-lru/lru_test.go new file mode 100644 index 0000000000..b676cfd9db --- /dev/null +++ b/Godeps/_workspace/src/github.com/hashicorp/golang-lru/lru_test.go @@ -0,0 +1,127 @@ +package lru + +import "testing" + +func TestLRU(t *testing.T) { + evictCounter := 0 + onEvicted := func(k interface{}, v interface{}) { + if k != v { + t.Fatalf("Evict values not equal (%v!=%v)", k, v) + } + evictCounter += 1 + } + l, err := NewWithEvict(128, onEvicted) + if err != nil { + t.Fatalf("err: %v", err) + } + + for i := 0; i < 256; i++ { + l.Add(i, i) + } + if l.Len() != 128 { + t.Fatalf("bad len: %v", l.Len()) + } + + if evictCounter != 128 { + t.Fatalf("bad evict count: %v", evictCounter) + } + + for i, k := range l.Keys() { + if v, ok := l.Get(k); !ok || v != k || v != i+128 { + t.Fatalf("bad key: %v", k) + } + } + for i := 0; i < 128; i++ { + _, ok := l.Get(i) + if ok { + t.Fatalf("should be evicted") + } + } + for i := 128; i < 256; i++ { + _, ok := l.Get(i) + if !ok { + t.Fatalf("should not be evicted") + } + } + for i := 128; i < 192; i++ { + l.Remove(i) + _, ok := l.Get(i) + if ok { + t.Fatalf("should be deleted") + } + } + + l.Get(192) // expect 192 to be last key in l.Keys() + + for i, k := range l.Keys() { + if (i < 63 && k != i+193) || (i == 63 && k != 192) { + t.Fatalf("out of order key: %v", k) + } + } + + l.Purge() + if l.Len() != 0 { + t.Fatalf("bad len: %v", l.Len()) + } + if _, ok := l.Get(200); ok { + t.Fatalf("should contain nothing") + } +} + +// test that Add returns true/false if an eviction occured +func TestLRUAdd(t *testing.T) { + evictCounter := 0 + onEvicted := func(k interface{}, v interface{}) { + evictCounter += 1 + } + + l, err := NewWithEvict(1, onEvicted) + if err != nil { + t.Fatalf("err: %v", err) + } + + if l.Add(1, 1) == true || evictCounter != 0 { + t.Errorf("should not have an eviction") + } + if l.Add(2, 2) == false || evictCounter != 1 { + t.Errorf("should have an eviction") + } +} + +// test that Contains doesn't update recent-ness +func TestLRUContains(t *testing.T) { + l, err := New(2) + if err != nil { + t.Fatalf("err: %v", err) + } + + l.Add(1, 1) + l.Add(2, 2) + if !l.Contains(1) { + t.Errorf("1 should be contained") + } + + l.Add(3, 3) + if l.Contains(1) { + t.Errorf("Contains should not have updated recent-ness of 1") + } +} + +// test that Peek doesn't update recent-ness +func TestLRUPeek(t *testing.T) { + l, err := New(2) + if err != nil { + t.Fatalf("err: %v", err) + } + + l.Add(1, 1) + l.Add(2, 2) + if v, ok := l.Peek(1); !ok || v != 1 { + t.Errorf("1 should be set to 1: %v, %v", v, ok) + } + + l.Add(3, 3) + if l.Contains(1) { + t.Errorf("should not have updated recent-ness of 1") + } +} From 855e76fddd8c5f0e024a536c0466f7578fcb592d Mon Sep 17 00:00:00 2001 From: obscuren <geffobscura@gmail.com> Date: Fri, 19 Jun 2015 18:16:09 +0200 Subject: [PATCH 102/156] core: reduced cache limit to 256 --- core/chain_manager.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/chain_manager.go b/core/chain_manager.go index e67439bb6e..3adaf33445 100644 --- a/core/chain_manager.go +++ b/core/chain_manager.go @@ -36,7 +36,7 @@ var ( ) const ( - blockCacheLimit = 10000 + blockCacheLimit = 256 maxFutureBlocks = 256 maxTimeFutureBlocks = 30 ) From 07db098ccf94ebfa80a9dedea85b4f55ad6f8d76 Mon Sep 17 00:00:00 2001 From: obscuren <geffobscura@gmail.com> Date: Sat, 20 Jun 2015 15:56:34 +0200 Subject: [PATCH 103/156] core: renamed next to pending & fixed tests --- core/chain_manager.go | 25 ++++++++++--------------- core/chain_manager_test.go | 6 ++++-- 2 files changed, 14 insertions(+), 17 deletions(-) diff --git a/core/chain_manager.go b/core/chain_manager.go index 3adaf33445..e8f4d9b5bf 100644 --- a/core/chain_manager.go +++ b/core/chain_manager.go @@ -108,9 +108,9 @@ type ChainManager struct { transState *state.StateDB txState *state.ManagedState - cache *lru.Cache // cache is the LRU caching - futureBlocks *BlockCache // future blocks are blocks added for later processing - nextBlocks *BlockCache // next blocks is used during large inserts + cache *lru.Cache // cache is the LRU caching + futureBlocks *BlockCache // future blocks are blocks added for later processing + pendingBlocks *BlockCache // pending blocks contain blocks not yet written to the db quit chan struct{} // procInterrupt must be atomically called @@ -389,8 +389,8 @@ func (bc *ChainManager) HasBlock(hash common.Hash) bool { return true } - if bc.nextBlocks != nil { - if block := bc.nextBlocks.Get(hash); block != nil { + if bc.pendingBlocks != nil { + if block := bc.pendingBlocks.Get(hash); block != nil { return true } } @@ -425,8 +425,8 @@ func (self *ChainManager) GetBlock(hash common.Hash) *types.Block { return block.(*types.Block) } - if self.nextBlocks != nil { - if block := self.nextBlocks.Get(hash); block != nil { + if self.pendingBlocks != nil { + if block := self.pendingBlocks.Get(hash); block != nil { return block } } @@ -521,13 +521,13 @@ func (self *ChainManager) procFutureBlocks() { } func (self *ChainManager) enqueueForWrite(block *types.Block) { - self.nextBlocks.Push(block) + self.pendingBlocks.Push(block) } func (self *ChainManager) flushQueuedBlocks() { db, batchWrite := self.blockDb.(*ethdb.LDBDatabase) batch := new(leveldb.Batch) - self.nextBlocks.Each(func(i int, block *types.Block) { + self.pendingBlocks.Each(func(i int, block *types.Block) { enc, _ := rlp.EncodeToBytes((*types.StorageBlock)(block)) key := append(blockHashPre, block.Hash().Bytes()...) if batchWrite { @@ -539,10 +539,6 @@ func (self *ChainManager) flushQueuedBlocks() { if batchWrite { db.LDB().Write(batch, nil) } - - // reset the next blocks cache - self.nextBlocks = nil - } // InsertChain will attempt to insert the given chain in to the canonical chain or, otherwise, create a fork. It an error is returned @@ -554,7 +550,7 @@ func (self *ChainManager) InsertChain(chain types.Blocks) (int, error) { self.chainmu.Lock() defer self.chainmu.Unlock() - self.nextBlocks = NewBlockCache(len(chain)) + self.pendingBlocks = NewBlockCache(len(chain)) // A queued approach to delivering events. This is generally // faster than direct delivery and requires much less mutex @@ -687,7 +683,6 @@ func (self *ChainManager) InsertChain(chain types.Blocks) (int, error) { queue[i] = ChainSideEvent{block, logs} queueEvent.sideCount++ } - // Write block to database. Eventually we'll have to improve on this and throw away blocks that are // not in the canonical chain. self.enqueueForWrite(block) // Delete from future blocks diff --git a/core/chain_manager_test.go b/core/chain_manager_test.go index c37cd1a5e2..70130c02ce 100644 --- a/core/chain_manager_test.go +++ b/core/chain_manager_test.go @@ -18,6 +18,7 @@ import ( "github.com/ethereum/go-ethereum/event" "github.com/ethereum/go-ethereum/pow" "github.com/ethereum/go-ethereum/rlp" + "github.com/hashicorp/golang-lru" ) func init() { @@ -109,7 +110,8 @@ func testChain(chainB types.Blocks, bman *BlockProcessor) (*big.Int, error) { bman.bc.mu.Lock() { - bman.bc.write(block) + bman.bc.enqueueForWrite(block) + //bman.bc.write(block) } bman.bc.mu.Unlock() } @@ -391,7 +393,7 @@ func makeChainWithDiff(genesis *types.Block, d []int, seed byte) []*types.Block func chm(genesis *types.Block, db common.Database) *ChainManager { var eventMux event.TypeMux bc := &ChainManager{blockDb: db, stateDb: db, genesisBlock: genesis, eventMux: &eventMux, pow: FakePow{}} - bc.cache = NewBlockCache(100) + bc.cache, _ = lru.New(100) bc.futureBlocks = NewBlockCache(100) bc.processor = bproc{} bc.ResetWithGenesisBlock(genesis) From aba901e13cc40400b644041044ada13636927f44 Mon Sep 17 00:00:00 2001 From: Jeffrey Wilcke <geffobscura@gmail.com> Date: Wed, 24 Jun 2015 17:05:23 +0200 Subject: [PATCH 104/156] core: removed write's go routine --- core/chain_makers_test.go | 2 +- core/chain_manager.go | 9 ++------- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/core/chain_makers_test.go b/core/chain_makers_test.go index d5125e1c34..8e821fc4ac 100644 --- a/core/chain_makers_test.go +++ b/core/chain_makers_test.go @@ -60,7 +60,7 @@ func ExampleGenerateChain() { evmux := &event.TypeMux{} chainman, _ := NewChainManager(genesis, db, db, FakePow{}, evmux) chainman.SetProcessor(NewBlockProcessor(db, db, FakePow{}, chainman, evmux)) - if i, err := chainman.InsertChain(chain); err != nil { + if i, err := chainman.InsertChain(chain[1:]); err != nil { fmt.Printf("insert error (block %d): %v\n", i, err) return } diff --git a/core/chain_manager.go b/core/chain_manager.go index e8f4d9b5bf..85c1e39d7a 100644 --- a/core/chain_manager.go +++ b/core/chain_manager.go @@ -22,6 +22,7 @@ import ( "github.com/ethereum/go-ethereum/pow" "github.com/ethereum/go-ethereum/rlp" "github.com/hashicorp/golang-lru" + "github.com/rcrowley/go-metrics" "github.com/syndtr/goleveldb/leveldb" ) @@ -263,9 +264,7 @@ func (bc *ChainManager) setLastState() { func (bc *ChainManager) makeCache() { bc.cache, _ = lru.New(blockCacheLimit) // load in last `blockCacheLimit` - 1 blocks. Last block is the current. - ancestors := bc.GetAncestors(bc.currentBlock, blockCacheLimit-1) - ancestors = append(ancestors, bc.currentBlock) - for _, block := range ancestors { + for _, block := range bc.GetBlocksFromHash(bc.currentBlock.Hash(), blockCacheLimit) { bc.cache.Add(block.Hash(), block) } } @@ -571,9 +570,6 @@ func (self *ChainManager) InsertChain(chain types.Blocks) (int, error) { defer close(nonceQuit) defer self.flushQueuedBlocks() - defer func() { - }() - txcount := 0 for i, block := range chain { if atomic.LoadInt32(&self.procInterrupt) == 1 { @@ -683,7 +679,6 @@ func (self *ChainManager) InsertChain(chain types.Blocks) (int, error) { queue[i] = ChainSideEvent{block, logs} queueEvent.sideCount++ } - // not in the canonical chain. self.enqueueForWrite(block) // Delete from future blocks self.futureBlocks.Delete(block.Hash()) From e349fac97dea92ef77ba5e72599fbe9f0ae16c2a Mon Sep 17 00:00:00 2001 From: Jeffrey Wilcke <geffobscura@gmail.com> Date: Sat, 27 Jun 2015 13:57:56 +0200 Subject: [PATCH 105/156] core: fixed tests --- core/chain_makers_test.go | 2 +- core/chain_manager.go | 1 + core/chain_manager_test.go | 1 - 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/core/chain_makers_test.go b/core/chain_makers_test.go index 8e821fc4ac..d5125e1c34 100644 --- a/core/chain_makers_test.go +++ b/core/chain_makers_test.go @@ -60,7 +60,7 @@ func ExampleGenerateChain() { evmux := &event.TypeMux{} chainman, _ := NewChainManager(genesis, db, db, FakePow{}, evmux) chainman.SetProcessor(NewBlockProcessor(db, db, FakePow{}, chainman, evmux)) - if i, err := chainman.InsertChain(chain[1:]); err != nil { + if i, err := chainman.InsertChain(chain); err != nil { fmt.Printf("insert error (block %d): %v\n", i, err) return } diff --git a/core/chain_manager.go b/core/chain_manager.go index 85c1e39d7a..a4c8563c36 100644 --- a/core/chain_manager.go +++ b/core/chain_manager.go @@ -264,6 +264,7 @@ func (bc *ChainManager) setLastState() { func (bc *ChainManager) makeCache() { bc.cache, _ = lru.New(blockCacheLimit) // load in last `blockCacheLimit` - 1 blocks. Last block is the current. + bc.cache.Add(bc.genesisBlock.Hash(), bc.genesisBlock) for _, block := range bc.GetBlocksFromHash(bc.currentBlock.Hash(), blockCacheLimit) { bc.cache.Add(block.Hash(), block) } diff --git a/core/chain_manager_test.go b/core/chain_manager_test.go index 70130c02ce..11a326ae4b 100644 --- a/core/chain_manager_test.go +++ b/core/chain_manager_test.go @@ -63,7 +63,6 @@ func testFork(t *testing.T, bman *BlockProcessor, i, N int, f func(td1, td2 *big if bi1 != bi2 { t.Fatal("chains do not have the same hash at height", i) } - bman2.bc.SetProcessor(bman2) // extend the fork From ac80ec59dc223c679639aaae9a42325e18cde9c8 Mon Sep 17 00:00:00 2001 From: Jeffrey Wilcke <geffobscura@gmail.com> Date: Mon, 29 Jun 2015 15:17:05 +0200 Subject: [PATCH 106/156] miner: update root only when mining --- miner/worker.go | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/miner/worker.go b/miner/worker.go index 3a2d7a41b1..bc2fe1ab24 100644 --- a/miner/worker.go +++ b/miner/worker.go @@ -416,10 +416,12 @@ func (self *worker) commitNewWork() { delete(self.possibleUncles, hash) } - // commit state root after all state transitions. - core.AccumulateRewards(self.current.state, header, uncles) - current.state.Update() - header.Root = current.state.Root() + if atomic.LoadInt32(&self.mining) == 1 { + // commit state root after all state transitions. + core.AccumulateRewards(self.current.state, header, uncles) + current.state.Update() + header.Root = current.state.Root() + } // create the new block whose nonce will be mined. current.block = types.NewBlock(header, current.txs, uncles, current.receipts) From 5d9df7348d80fbd5de9a92d7f6abe6c02646c24d Mon Sep 17 00:00:00 2001 From: zsfelfoldi <zsfelfoldi@gmail.com> Date: Mon, 29 Jun 2015 13:48:10 +0200 Subject: [PATCH 107/156] gpo non-existent block checks --- eth/gasprice.go | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/eth/gasprice.go b/eth/gasprice.go index 44202d7094..ddf1c8c09a 100644 --- a/eth/gasprice.go +++ b/eth/gasprice.go @@ -47,14 +47,21 @@ func NewGasPriceOracle(eth *Ethereum) (self *GasPriceOracle) { } func (self *GasPriceOracle) processPastBlocks() { - last := self.chain.CurrentBlock().NumberU64() - first := uint64(0) + last := int64(-1) + cblock := self.chain.CurrentBlock() + if cblock != nil { + last = int64(cblock.NumberU64()) + } + first := int64(0) if last > gpoProcessPastBlocks { first = last - gpoProcessPastBlocks } - self.firstProcessed = first + self.firstProcessed = uint64(first) for i := first; i <= last; i++ { - self.processBlock(self.chain.GetBlockByNumber(i)) + block := self.chain.GetBlockByNumber(uint64(i)) + if block != nil { + self.processBlock(block) + } } } From 992e4f83cb05946fa53132a9184d4ac3f38b62bc Mon Sep 17 00:00:00 2001 From: Jeffrey Wilcke <geffobscura@gmail.com> Date: Mon, 29 Jun 2015 22:42:13 +0200 Subject: [PATCH 108/156] core: replaced BlockCache with lru.Cache --- core/chain_manager.go | 43 +++++++++++++++++++++----------------- core/chain_manager_test.go | 2 +- 2 files changed, 25 insertions(+), 20 deletions(-) diff --git a/core/chain_manager.go b/core/chain_manager.go index daae24709d..fc1922b3b7 100644 --- a/core/chain_manager.go +++ b/core/chain_manager.go @@ -109,9 +109,9 @@ type ChainManager struct { transState *state.StateDB txState *state.ManagedState - cache *lru.Cache // cache is the LRU caching - futureBlocks *BlockCache // future blocks are blocks added for later processing - pendingBlocks *BlockCache // pending blocks contain blocks not yet written to the db + cache *lru.Cache // cache is the LRU caching + futureBlocks *lru.Cache // future blocks are blocks added for later processing + pendingBlocks *lru.Cache // pending blocks contain blocks not yet written to the db quit chan struct{} // procInterrupt must be atomically called @@ -158,7 +158,7 @@ func NewChainManager(genesis *types.Block, blockDb, stateDb common.Database, pow // Take ownership of this particular state bc.txState = state.ManageState(bc.State().Copy()) - bc.futureBlocks = NewBlockCache(maxFutureBlocks) + bc.futureBlocks, _ = lru.New(maxFutureBlocks) bc.makeCache() go bc.update() @@ -390,7 +390,7 @@ func (bc *ChainManager) HasBlock(hash common.Hash) bool { } if bc.pendingBlocks != nil { - if block := bc.pendingBlocks.Get(hash); block != nil { + if _, exist := bc.pendingBlocks.Get(hash); exist { return true } } @@ -426,8 +426,8 @@ func (self *ChainManager) GetBlock(hash common.Hash) *types.Block { } if self.pendingBlocks != nil { - if block := self.pendingBlocks.Get(hash); block != nil { - return block + if block, _ := self.pendingBlocks.Get(hash); block != nil { + return block.(*types.Block) } } @@ -510,10 +510,11 @@ type queueEvent struct { } func (self *ChainManager) procFutureBlocks() { - var blocks []*types.Block - self.futureBlocks.Each(func(i int, block *types.Block) { - blocks = append(blocks, block) - }) + blocks := make([]*types.Block, self.futureBlocks.Len()) + for i, hash := range self.futureBlocks.Keys() { + block, _ := self.futureBlocks.Get(hash) + blocks[i] = block.(*types.Block) + } if len(blocks) > 0 { types.BlockBy(types.Number).Sort(blocks) self.InsertChain(blocks) @@ -521,13 +522,16 @@ func (self *ChainManager) procFutureBlocks() { } func (self *ChainManager) enqueueForWrite(block *types.Block) { - self.pendingBlocks.Push(block) + self.pendingBlocks.Add(block.Hash(), block) } func (self *ChainManager) flushQueuedBlocks() { db, batchWrite := self.blockDb.(*ethdb.LDBDatabase) batch := new(leveldb.Batch) - self.pendingBlocks.Each(func(i int, block *types.Block) { + for _, key := range self.pendingBlocks.Keys() { + b, _ := self.pendingBlocks.Get(key) + block := b.(*types.Block) + enc, _ := rlp.EncodeToBytes((*types.StorageBlock)(block)) key := append(blockHashPre, block.Hash().Bytes()...) if batchWrite { @@ -535,7 +539,8 @@ func (self *ChainManager) flushQueuedBlocks() { } else { self.blockDb.Put(key, enc) } - }) + } + if batchWrite { db.LDB().Write(batch, nil) } @@ -588,7 +593,7 @@ func (self *ChainManager) WriteBlock(block *types.Block) (status writeStatus, er self.enqueueForWrite(block) self.mu.Unlock() // Delete from future blocks - self.futureBlocks.Delete(block.Hash()) + self.futureBlocks.Remove(block.Hash()) return } @@ -602,7 +607,7 @@ func (self *ChainManager) InsertChain(chain types.Blocks) (int, error) { self.chainmu.Lock() defer self.chainmu.Unlock() - self.pendingBlocks = NewBlockCache(len(chain)) + self.pendingBlocks, _ = lru.New(len(chain)) // A queued approach to delivering events. This is generally // faster than direct delivery and requires much less mutex @@ -669,13 +674,13 @@ func (self *ChainManager) InsertChain(chain types.Blocks) (int, error) { return i, fmt.Errorf("%v: BlockFutureErr, %v > %v", BlockFutureErr, block.Time(), max) } - self.futureBlocks.Push(block) + self.futureBlocks.Add(block.Hash(), block) stats.queued++ continue } - if IsParentErr(err) && self.futureBlocks.Has(block.ParentHash()) { - self.futureBlocks.Push(block) + if IsParentErr(err) && self.futureBlocks.Contains(block.ParentHash()) { + self.futureBlocks.Add(block.Hash(), block) stats.queued++ continue } diff --git a/core/chain_manager_test.go b/core/chain_manager_test.go index 11a326ae4b..8b3ea9e85a 100644 --- a/core/chain_manager_test.go +++ b/core/chain_manager_test.go @@ -393,7 +393,7 @@ func chm(genesis *types.Block, db common.Database) *ChainManager { var eventMux event.TypeMux bc := &ChainManager{blockDb: db, stateDb: db, genesisBlock: genesis, eventMux: &eventMux, pow: FakePow{}} bc.cache, _ = lru.New(100) - bc.futureBlocks = NewBlockCache(100) + bc.futureBlocks, _ = lru.New(100) bc.processor = bproc{} bc.ResetWithGenesisBlock(genesis) bc.txState = state.ManageState(bc.State()) From 2aeeb72fa5c4f90d0ab072a361a678c3cdee8e26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= <peterke@gmail.com> Date: Sat, 27 Jun 2015 18:12:58 +0300 Subject: [PATCH 109/156] cmd/geth, metrics: separate process metric collection, add disk --- cmd/geth/main.go | 24 ++----------------- metrics/disk.go | 9 +++++++ metrics/disk_linux.go | 55 +++++++++++++++++++++++++++++++++++++++++++ metrics/disk_nop.go | 10 ++++++++ metrics/metrics.go | 54 ++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 130 insertions(+), 22 deletions(-) create mode 100644 metrics/disk.go create mode 100644 metrics/disk_linux.go create mode 100644 metrics/disk_nop.go create mode 100644 metrics/metrics.go diff --git a/cmd/geth/main.go b/cmd/geth/main.go index fcf7f27f02..6a52159eac 100644 --- a/cmd/geth/main.go +++ b/cmd/geth/main.go @@ -39,11 +39,11 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/eth" "github.com/ethereum/go-ethereum/logger" + "github.com/ethereum/go-ethereum/metrics" "github.com/ethereum/go-ethereum/rpc/codec" "github.com/ethereum/go-ethereum/rpc/comms" "github.com/mattn/go-colorable" "github.com/mattn/go-isatty" - "github.com/rcrowley/go-metrics" ) const ( @@ -288,27 +288,7 @@ JavaScript API. See https://github.com/ethereum/go-ethereum/wiki/Javascipt-Conso return nil } // Start system runtime metrics collection - go func() { - allocs := metrics.GetOrRegisterMeter("system/memory/allocs", metrics.DefaultRegistry) - frees := metrics.GetOrRegisterMeter("system/memory/frees", metrics.DefaultRegistry) - inuse := metrics.GetOrRegisterMeter("system/memory/inuse", metrics.DefaultRegistry) - pauses := metrics.GetOrRegisterMeter("system/memory/pauses", metrics.DefaultRegistry) - - stats := make([]*runtime.MemStats, 2) - for i := 0; i < len(stats); i++ { - stats[i] = new(runtime.MemStats) - } - for i := 1; ; i++ { - runtime.ReadMemStats(stats[i%2]) - - allocs.Mark(int64(stats[i%2].Mallocs - stats[(i-1)%2].Mallocs)) - frees.Mark(int64(stats[i%2].Frees - stats[(i-1)%2].Frees)) - inuse.Mark(int64(stats[i%2].Alloc - stats[(i-1)%2].Alloc)) - pauses.Mark(int64(stats[i%2].PauseTotalNs - stats[(i-1)%2].PauseTotalNs)) - - time.Sleep(3 * time.Second) - } - }() + go metrics.CollectProcessMetrics(3 * time.Second) } func main() { diff --git a/metrics/disk.go b/metrics/disk.go new file mode 100644 index 0000000000..1b6c56773f --- /dev/null +++ b/metrics/disk.go @@ -0,0 +1,9 @@ +package metrics + +// DiskStats is the per process disk io stats. +type DiskStats struct { + ReadCount int64 // Number of read operations executed + ReadBytes int64 // Total number of bytes read + WriteCount int64 // Number of write operations executed + WriteBytes int64 // Total number of byte written +} diff --git a/metrics/disk_linux.go b/metrics/disk_linux.go new file mode 100644 index 0000000000..82b2045344 --- /dev/null +++ b/metrics/disk_linux.go @@ -0,0 +1,55 @@ +// Contains the Linux implementation of process disk IO counter retrieval. + +package metrics + +import ( + "bufio" + "fmt" + "io" + "os" + "strconv" + "strings" +) + +// ReadDiskStats retrieves the disk IO stats belonging to the current process. +func ReadDiskStats(stats *DiskStats) error { + // Open the process disk IO counter file + inf, err := os.Open(fmt.Sprintf("/proc/%d/io", os.Getpid())) + if err != nil { + return err + } + in := bufio.NewReader(inf) + + // Iterate over the IO counter, and extract what we need + for { + // Read the next line and split to key and value + line, err := in.ReadString('\n') + if err != nil { + if err == io.EOF { + return nil + } + return err + } + key, value := "", int64(0) + if parts := strings.Split(line, ":"); len(parts) != 2 { + continue + } else { + key = strings.TrimSpace(parts[0]) + if value, err = strconv.ParseInt(strings.TrimSpace(parts[1]), 10, 64); err != nil { + return err + } + } + // Update the counter based on the key + switch key { + case "syscr": + stats.ReadCount = value + case "syscw": + stats.WriteCount = value + case "rchar": + stats.ReadBytes = value + case "wchar": + stats.WriteBytes = value + } + } + return nil +} diff --git a/metrics/disk_nop.go b/metrics/disk_nop.go new file mode 100644 index 0000000000..539ab8d1a0 --- /dev/null +++ b/metrics/disk_nop.go @@ -0,0 +1,10 @@ +// +build !linux + +package metrics + +import "errors" + +// ReadDiskStats retrieves the disk IO stats belonging to the current process. +func ReadDiskStats(stats *DiskStats) error { + return errors.New("Not implemented") +} diff --git a/metrics/metrics.go b/metrics/metrics.go new file mode 100644 index 0000000000..cb0caaae4e --- /dev/null +++ b/metrics/metrics.go @@ -0,0 +1,54 @@ +// Package metrics provides general system and process level metrics collection. +package metrics + +import ( + "runtime" + "time" + + "github.com/ethereum/go-ethereum/logger" + "github.com/ethereum/go-ethereum/logger/glog" + "github.com/rcrowley/go-metrics" +) + +// CollectProcessMetrics periodically collects various metrics about the running +// process. +func CollectProcessMetrics(refresh time.Duration) { + // Create the various data collectors + memstats := make([]*runtime.MemStats, 2) + diskstats := make([]*DiskStats, 2) + for i := 0; i < len(memstats); i++ { + memstats[i] = new(runtime.MemStats) + diskstats[i] = new(DiskStats) + } + // Define the various metrics to collect + memAllocs := metrics.GetOrRegisterMeter("system/memory/allocs", metrics.DefaultRegistry) + memFrees := metrics.GetOrRegisterMeter("system/memory/frees", metrics.DefaultRegistry) + memInuse := metrics.GetOrRegisterMeter("system/memory/inuse", metrics.DefaultRegistry) + memPauses := metrics.GetOrRegisterMeter("system/memory/pauses", metrics.DefaultRegistry) + + var diskReads, diskReadBytes, diskWrites, diskWriteBytes metrics.Meter + if err := ReadDiskStats(diskstats[0]); err == nil { + diskReads = metrics.GetOrRegisterMeter("system/disk/readcount", metrics.DefaultRegistry) + diskReadBytes = metrics.GetOrRegisterMeter("system/disk/readdata", metrics.DefaultRegistry) + diskWrites = metrics.GetOrRegisterMeter("system/disk/writecount", metrics.DefaultRegistry) + diskWriteBytes = metrics.GetOrRegisterMeter("system/disk/writedata", metrics.DefaultRegistry) + } else { + glog.V(logger.Debug).Infof("failed to read disk metrics: %v", err) + } + // Iterate loading the different stats and updating the meters + for i := 1; ; i++ { + runtime.ReadMemStats(memstats[i%2]) + memAllocs.Mark(int64(memstats[i%2].Mallocs - memstats[(i-1)%2].Mallocs)) + memFrees.Mark(int64(memstats[i%2].Frees - memstats[(i-1)%2].Frees)) + memInuse.Mark(int64(memstats[i%2].Alloc - memstats[(i-1)%2].Alloc)) + memPauses.Mark(int64(memstats[i%2].PauseTotalNs - memstats[(i-1)%2].PauseTotalNs)) + + if ReadDiskStats(diskstats[i%2]) == nil { + diskReads.Mark(int64(diskstats[i%2].ReadCount - diskstats[(i-1)%2].ReadCount)) + diskReadBytes.Mark(int64(diskstats[i%2].ReadBytes - diskstats[(i-1)%2].ReadBytes)) + diskWrites.Mark(int64(diskstats[i%2].WriteCount - diskstats[(i-1)%2].WriteCount)) + diskWriteBytes.Mark(int64(diskstats[i%2].WriteBytes - diskstats[(i-1)%2].WriteBytes)) + } + time.Sleep(refresh) + } +} From ccbb56b4f2cdba352eaa859ce3e34f999287f5c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= <peterke@gmail.com> Date: Sat, 27 Jun 2015 20:03:31 +0300 Subject: [PATCH 110/156] cmd/geth, eth, ethdb: monitor database compactions --- cmd/geth/monitorcmd.go | 2 +- eth/backend.go | 39 ++++++++++------- ethdb/database.go | 97 ++++++++++++++++++++++++++++++++++++------ 3 files changed, 109 insertions(+), 29 deletions(-) diff --git a/cmd/geth/monitorcmd.go b/cmd/geth/monitorcmd.go index fe771b561f..05965f009b 100644 --- a/cmd/geth/monitorcmd.go +++ b/cmd/geth/monitorcmd.go @@ -285,7 +285,7 @@ func updateChart(metric string, data []float64, base *int, chart *termui.LineCha } // Update the chart's label with the scale units units := dataUnits - if strings.Contains(metric, "/Percentiles/") || strings.Contains(metric, "/pauses/") { + if strings.Contains(metric, "/Percentiles/") || strings.Contains(metric, "/pauses/") || strings.Contains(metric, "/time/") { units = timeUnits } chart.Border.Label = metric diff --git a/eth/backend.go b/eth/backend.go index 0da6f128c8..21ec71b100 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -250,33 +250,42 @@ func New(config *Config) (*Ethereum, error) { return nil, fmt.Errorf("blockchain db err: %v", err) } if db, ok := blockDb.(*ethdb.LDBDatabase); ok { - db.GetTimer = metrics.GetOrRegisterTimer("eth/db/block/Gets", metrics.DefaultRegistry) - db.PutTimer = metrics.GetOrRegisterTimer("eth/db/block/Puts", metrics.DefaultRegistry) - db.MissMeter = metrics.GetOrRegisterMeter("eth/db/block/Misses", metrics.DefaultRegistry) - db.ReadMeter = metrics.GetOrRegisterMeter("eth/db/block/Reads", metrics.DefaultRegistry) - db.WriteMeter = metrics.GetOrRegisterMeter("eth/db/block/Writes", metrics.DefaultRegistry) + db.GetTimer = metrics.GetOrRegisterTimer("eth/db/block/user/gets", metrics.DefaultRegistry) + db.PutTimer = metrics.GetOrRegisterTimer("eth/db/block/user/puts", metrics.DefaultRegistry) + db.MissMeter = metrics.GetOrRegisterMeter("eth/db/block/user/misses", metrics.DefaultRegistry) + db.ReadMeter = metrics.GetOrRegisterMeter("eth/db/block/user/reads", metrics.DefaultRegistry) + db.WriteMeter = metrics.GetOrRegisterMeter("eth/db/block/user/writes", metrics.DefaultRegistry) + db.CompTimeMeter = metrics.GetOrRegisterMeter("eth/db/block/compact/time", metrics.DefaultRegistry) + db.CompReadMeter = metrics.GetOrRegisterMeter("eth/db/block/compact/input", metrics.DefaultRegistry) + db.CompWriteMeter = metrics.GetOrRegisterMeter("eth/db/block/compact/output", metrics.DefaultRegistry) } stateDb, err := newdb(filepath.Join(config.DataDir, "state")) if err != nil { return nil, fmt.Errorf("state db err: %v", err) } if db, ok := stateDb.(*ethdb.LDBDatabase); ok { - db.GetTimer = metrics.GetOrRegisterTimer("eth/db/state/Gets", metrics.DefaultRegistry) - db.PutTimer = metrics.GetOrRegisterTimer("eth/db/state/Puts", metrics.DefaultRegistry) - db.MissMeter = metrics.GetOrRegisterMeter("eth/db/state/Misses", metrics.DefaultRegistry) - db.ReadMeter = metrics.GetOrRegisterMeter("eth/db/state/Reads", metrics.DefaultRegistry) - db.WriteMeter = metrics.GetOrRegisterMeter("eth/db/state/Writes", metrics.DefaultRegistry) + db.GetTimer = metrics.GetOrRegisterTimer("eth/db/state/user/gets", metrics.DefaultRegistry) + db.PutTimer = metrics.GetOrRegisterTimer("eth/db/state/user/puts", metrics.DefaultRegistry) + db.MissMeter = metrics.GetOrRegisterMeter("eth/db/state/user/misses", metrics.DefaultRegistry) + db.ReadMeter = metrics.GetOrRegisterMeter("eth/db/state/user/reads", metrics.DefaultRegistry) + db.WriteMeter = metrics.GetOrRegisterMeter("eth/db/state/user/writes", metrics.DefaultRegistry) + db.CompTimeMeter = metrics.GetOrRegisterMeter("eth/db/state/compact/time", metrics.DefaultRegistry) + db.CompReadMeter = metrics.GetOrRegisterMeter("eth/db/state/compact/input", metrics.DefaultRegistry) + db.CompWriteMeter = metrics.GetOrRegisterMeter("eth/db/state/compact/output", metrics.DefaultRegistry) } extraDb, err := newdb(filepath.Join(config.DataDir, "extra")) if err != nil { return nil, fmt.Errorf("extra db err: %v", err) } if db, ok := extraDb.(*ethdb.LDBDatabase); ok { - db.GetTimer = metrics.GetOrRegisterTimer("eth/db/extra/Gets", metrics.DefaultRegistry) - db.PutTimer = metrics.GetOrRegisterTimer("eth/db/extra/Puts", metrics.DefaultRegistry) - db.MissMeter = metrics.GetOrRegisterMeter("eth/db/extra/Misses", metrics.DefaultRegistry) - db.ReadMeter = metrics.GetOrRegisterMeter("eth/db/extra/Reads", metrics.DefaultRegistry) - db.WriteMeter = metrics.GetOrRegisterMeter("eth/db/extra/Writes", metrics.DefaultRegistry) + db.GetTimer = metrics.GetOrRegisterTimer("eth/db/extra/user/gets", metrics.DefaultRegistry) + db.PutTimer = metrics.GetOrRegisterTimer("eth/db/extra/user/puts", metrics.DefaultRegistry) + db.MissMeter = metrics.GetOrRegisterMeter("eth/db/extra/user/misses", metrics.DefaultRegistry) + db.ReadMeter = metrics.GetOrRegisterMeter("eth/db/extra/user/reads", metrics.DefaultRegistry) + db.WriteMeter = metrics.GetOrRegisterMeter("eth/db/extra/user/writes", metrics.DefaultRegistry) + db.CompTimeMeter = metrics.GetOrRegisterMeter("eth/db/extra/compact/time", metrics.DefaultRegistry) + db.CompReadMeter = metrics.GetOrRegisterMeter("eth/db/extra/compact/input", metrics.DefaultRegistry) + db.CompWriteMeter = metrics.GetOrRegisterMeter("eth/db/extra/compact/output", metrics.DefaultRegistry) } nodeDb := filepath.Join(config.DataDir, "nodes") diff --git a/ethdb/database.go b/ethdb/database.go index 8f55d43c3f..9ff90d167b 100644 --- a/ethdb/database.go +++ b/ethdb/database.go @@ -1,6 +1,8 @@ package ethdb import ( + "strconv" + "strings" "time" "github.com/ethereum/go-ethereum/compression/rle" @@ -19,12 +21,15 @@ type LDBDatabase struct { fn string // filename for reporting db *leveldb.DB // LevelDB instance - GetTimer metrics.Timer // Timer for measuring the database get request counts and latencies - PutTimer metrics.Timer // Timer for measuring the database put request counts and latencies - DelTimer metrics.Timer // Timer for measuring the database delete request counts and latencies - MissMeter metrics.Meter // MEter for measuring the missed database get requests - ReadMeter metrics.Meter // Meter for measuring the database get request data usage - WriteMeter metrics.Meter // Meter for measuring the database put request data usage + GetTimer metrics.Timer // Timer for measuring the database get request counts and latencies + PutTimer metrics.Timer // Timer for measuring the database put request counts and latencies + DelTimer metrics.Timer // Timer for measuring the database delete request counts and latencies + MissMeter metrics.Meter // Meter for measuring the missed database get requests + ReadMeter metrics.Meter // Meter for measuring the database get request data usage + WriteMeter metrics.Meter // Meter for measuring the database put request data usage + CompTimeMeter metrics.Meter // Meter for measuring the total time spent in database compaction + CompReadMeter metrics.Meter // Meter for measuring the data read during compaction + CompWriteMeter metrics.Meter // Meter for measuring the data written during compaction } // NewLDBDatabase returns a LevelDB wrapped object. LDBDatabase does not persist data by @@ -45,6 +50,7 @@ func NewLDBDatabase(file string) (*LDBDatabase, error) { fn: file, db: db, } + go database.meter(3 * time.Second) return database, nil } @@ -53,8 +59,7 @@ func NewLDBDatabase(file string) (*LDBDatabase, error) { func (self *LDBDatabase) Put(key []byte, value []byte) error { // Measure the database put latency, if requested if self.PutTimer != nil { - start := time.Now() - defer self.PutTimer.UpdateSince(start) + defer self.PutTimer.UpdateSince(time.Now()) } // Generate the data to write to disk, update the meter and write dat := rle.Compress(value) @@ -69,8 +74,7 @@ func (self *LDBDatabase) Put(key []byte, value []byte) error { func (self *LDBDatabase) Get(key []byte) ([]byte, error) { // Measure the database get latency, if requested if self.GetTimer != nil { - start := time.Now() - defer self.GetTimer.UpdateSince(start) + defer self.GetTimer.UpdateSince(time.Now()) } // Retrieve the key and increment the miss counter if not found dat, err := self.db.Get(key, nil) @@ -91,8 +95,7 @@ func (self *LDBDatabase) Get(key []byte) ([]byte, error) { func (self *LDBDatabase) Delete(key []byte) error { // Measure the database delete latency, if requested if self.DelTimer != nil { - start := time.Now() - defer self.DelTimer.UpdateSince(start) + defer self.DelTimer.UpdateSince(time.Now()) } // Execute the actual operation return self.db.Delete(key, nil) @@ -111,7 +114,6 @@ func (self *LDBDatabase) Close() { if err := self.Flush(); err != nil { glog.V(logger.Error).Infof("error: flush '%s': %v\n", self.fn, err) } - self.db.Close() glog.V(logger.Error).Infoln("flushed and closed db:", self.fn) } @@ -119,3 +121,72 @@ func (self *LDBDatabase) Close() { func (self *LDBDatabase) LDB() *leveldb.DB { return self.db } + +// meter periodically retrieves internal leveldb counters and reports them to +// the metrics subsystem. +// +// This is how a stats table look like (currently): +// Compactions +// Level | Tables | Size(MB) | Time(sec) | Read(MB) | Write(MB) +// -------+------------+---------------+---------------+---------------+--------------- +// 0 | 0 | 0.00000 | 1.27969 | 0.00000 | 12.31098 +// 1 | 85 | 109.27913 | 28.09293 | 213.92493 | 214.26294 +// 2 | 523 | 1000.37159 | 7.26059 | 66.86342 | 66.77884 +// 3 | 570 | 1113.18458 | 0.00000 | 0.00000 | 0.00000 +func (self *LDBDatabase) meter(refresh time.Duration) { + // Create the counters to store current and previous values + counters := make([][]float64, 2) + for i := 0; i < 2; i++ { + counters[i] = make([]float64, 3) + } + // Iterate ad infinitum and collect the stats + for i := 1; ; i++ { + // Retrieve the database stats + stats, err := self.db.GetProperty("leveldb.stats") + if err != nil { + glog.V(logger.Error).Infof("failed to read database stats: %v", err) + return + } + // Find the compaction table, skip the header + lines := strings.Split(stats, "\n") + for len(lines) > 0 && strings.TrimSpace(lines[0]) != "Compactions" { + lines = lines[1:] + } + if len(lines) <= 3 { + glog.V(logger.Error).Infof("compaction table not found") + return + } + lines = lines[3:] + + // Iterate over all the table rows, and accumulate the entries + for j := 0; j < len(counters[i%2]); j++ { + counters[i%2][j] = 0 + } + for _, line := range lines { + parts := strings.Split(line, "|") + if len(parts) != 6 { + break + } + for idx, counter := range parts[3:] { + if value, err := strconv.ParseFloat(strings.TrimSpace(counter), 64); err != nil { + glog.V(logger.Error).Infof("compaction entry parsing failed: %v", err) + return + } else { + counters[i%2][idx] += value + } + } + } + // Update all the requested meters + if self.CompTimeMeter != nil { + self.CompTimeMeter.Mark(int64((counters[i%2][0] - counters[(i-1)%2][0]) * 1000 * 1000 * 1000)) + } + if self.CompReadMeter != nil { + self.CompReadMeter.Mark(int64((counters[i%2][1] - counters[(i-1)%2][1]) * 1024 * 1024)) + } + if self.CompWriteMeter != nil { + self.CompWriteMeter.Mark(int64((counters[i%2][2] - counters[(i-1)%2][2]) * 1024 * 1024)) + } + // Sleep a bit, then repeat the stats collection + time.Sleep(refresh) + } +} From 01fe97211354d13ecaba8a52c82b808b7a7e8393 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= <peterke@gmail.com> Date: Mon, 29 Jun 2015 16:11:01 +0300 Subject: [PATCH 111/156] cmd, core, eth, metrics, p2p: require enabling metrics --- cmd/geth/main.go | 1 + cmd/geth/monitorcmd.go | 7 +++++- cmd/utils/flags.go | 6 +++++ core/chain_manager.go | 3 ++- eth/backend.go | 51 +++++++++++++++++++++--------------------- eth/fetcher/fetcher.go | 30 ++++++------------------- eth/fetcher/metrics.go | 16 +++++++++++++ metrics/metrics.go | 42 ++++++++++++++++++++++++++++++++++ p2p/metrics.go | 10 ++++----- 9 files changed, 111 insertions(+), 55 deletions(-) create mode 100644 eth/fetcher/metrics.go diff --git a/cmd/geth/main.go b/cmd/geth/main.go index 6a52159eac..3e945687bc 100644 --- a/cmd/geth/main.go +++ b/cmd/geth/main.go @@ -272,6 +272,7 @@ JavaScript API. See https://github.com/ethereum/go-ethereum/wiki/Javascipt-Conso utils.LogJSONFlag, utils.PProfEanbledFlag, utils.PProfPortFlag, + utils.MetricsEnabledFlag, utils.SolcPathFlag, utils.GpoMinGasPriceFlag, utils.GpoMaxGasPriceFlag, diff --git a/cmd/geth/monitorcmd.go b/cmd/geth/monitorcmd.go index 05965f009b..6a7e1cbb4b 100644 --- a/cmd/geth/monitorcmd.go +++ b/cmd/geth/monitorcmd.go @@ -75,7 +75,12 @@ func monitor(ctx *cli.Context) { if len(monitored) == 0 { list := expandMetrics(metrics, "") sort.Strings(list) - utils.Fatalf("No metrics specified.\n\nAvailable:\n - %s", strings.Join(list, "\n - ")) + + if len(list) > 0 { + utils.Fatalf("No metrics specified.\n\nAvailable:\n - %s", strings.Join(list, "\n - ")) + } else { + utils.Fatalf("No metrics specified.\n\nNo metrics collected (--metrics)\n") + } } sort.Strings(monitored) if cols := len(monitored) / ctx.Int(monitorCommandRowsFlag.Name); cols > 6 { diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index 15a577a070..0d59980ec2 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -10,6 +10,8 @@ import ( "path/filepath" "runtime" + "github.com/ethereum/go-ethereum/metrics" + "github.com/codegangsta/cli" "github.com/ethereum/ethash" "github.com/ethereum/go-ethereum/accounts" @@ -187,6 +189,10 @@ var ( Usage: "Port on which the profiler should listen", Value: 6060, } + MetricsEnabledFlag = cli.BoolFlag{ + Name: metrics.MetricsEnabledFlag, + Usage: "Enables metrics collection and reporting", + } // RPC settings RPCEnabledFlag = cli.BoolFlag{ diff --git a/core/chain_manager.go b/core/chain_manager.go index fc1922b3b7..4803119510 100644 --- a/core/chain_manager.go +++ b/core/chain_manager.go @@ -18,6 +18,7 @@ import ( "github.com/ethereum/go-ethereum/event" "github.com/ethereum/go-ethereum/logger" "github.com/ethereum/go-ethereum/logger/glog" + "github.com/ethereum/go-ethereum/metrics" "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/pow" "github.com/ethereum/go-ethereum/rlp" @@ -33,7 +34,7 @@ var ( blockHashPre = []byte("block-hash-") blockNumPre = []byte("block-num-") - blockInsertTimer = metrics.GetOrRegisterTimer("core/BlockInsertions", metrics.DefaultRegistry) + blockInsertTimer = metrics.NewTimer("chain/inserts") ) const ( diff --git a/eth/backend.go b/eth/backend.go index 21ec71b100..4644b8a935 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -11,6 +11,8 @@ import ( "strings" "time" + "github.com/ethereum/go-ethereum/metrics" + "github.com/ethereum/ethash" "github.com/ethereum/go-ethereum/accounts" "github.com/ethereum/go-ethereum/common" @@ -29,7 +31,6 @@ import ( "github.com/ethereum/go-ethereum/p2p/discover" "github.com/ethereum/go-ethereum/p2p/nat" "github.com/ethereum/go-ethereum/whisper" - "github.com/rcrowley/go-metrics" ) const ( @@ -250,42 +251,42 @@ func New(config *Config) (*Ethereum, error) { return nil, fmt.Errorf("blockchain db err: %v", err) } if db, ok := blockDb.(*ethdb.LDBDatabase); ok { - db.GetTimer = metrics.GetOrRegisterTimer("eth/db/block/user/gets", metrics.DefaultRegistry) - db.PutTimer = metrics.GetOrRegisterTimer("eth/db/block/user/puts", metrics.DefaultRegistry) - db.MissMeter = metrics.GetOrRegisterMeter("eth/db/block/user/misses", metrics.DefaultRegistry) - db.ReadMeter = metrics.GetOrRegisterMeter("eth/db/block/user/reads", metrics.DefaultRegistry) - db.WriteMeter = metrics.GetOrRegisterMeter("eth/db/block/user/writes", metrics.DefaultRegistry) - db.CompTimeMeter = metrics.GetOrRegisterMeter("eth/db/block/compact/time", metrics.DefaultRegistry) - db.CompReadMeter = metrics.GetOrRegisterMeter("eth/db/block/compact/input", metrics.DefaultRegistry) - db.CompWriteMeter = metrics.GetOrRegisterMeter("eth/db/block/compact/output", metrics.DefaultRegistry) + db.GetTimer = metrics.NewTimer("eth/db/block/user/gets") + db.PutTimer = metrics.NewTimer("eth/db/block/user/puts") + db.MissMeter = metrics.NewMeter("eth/db/block/user/misses") + db.ReadMeter = metrics.NewMeter("eth/db/block/user/reads") + db.WriteMeter = metrics.NewMeter("eth/db/block/user/writes") + db.CompTimeMeter = metrics.NewMeter("eth/db/block/compact/time") + db.CompReadMeter = metrics.NewMeter("eth/db/block/compact/input") + db.CompWriteMeter = metrics.NewMeter("eth/db/block/compact/output") } stateDb, err := newdb(filepath.Join(config.DataDir, "state")) if err != nil { return nil, fmt.Errorf("state db err: %v", err) } if db, ok := stateDb.(*ethdb.LDBDatabase); ok { - db.GetTimer = metrics.GetOrRegisterTimer("eth/db/state/user/gets", metrics.DefaultRegistry) - db.PutTimer = metrics.GetOrRegisterTimer("eth/db/state/user/puts", metrics.DefaultRegistry) - db.MissMeter = metrics.GetOrRegisterMeter("eth/db/state/user/misses", metrics.DefaultRegistry) - db.ReadMeter = metrics.GetOrRegisterMeter("eth/db/state/user/reads", metrics.DefaultRegistry) - db.WriteMeter = metrics.GetOrRegisterMeter("eth/db/state/user/writes", metrics.DefaultRegistry) - db.CompTimeMeter = metrics.GetOrRegisterMeter("eth/db/state/compact/time", metrics.DefaultRegistry) - db.CompReadMeter = metrics.GetOrRegisterMeter("eth/db/state/compact/input", metrics.DefaultRegistry) - db.CompWriteMeter = metrics.GetOrRegisterMeter("eth/db/state/compact/output", metrics.DefaultRegistry) + db.GetTimer = metrics.NewTimer("eth/db/state/user/gets") + db.PutTimer = metrics.NewTimer("eth/db/state/user/puts") + db.MissMeter = metrics.NewMeter("eth/db/state/user/misses") + db.ReadMeter = metrics.NewMeter("eth/db/state/user/reads") + db.WriteMeter = metrics.NewMeter("eth/db/state/user/writes") + db.CompTimeMeter = metrics.NewMeter("eth/db/state/compact/time") + db.CompReadMeter = metrics.NewMeter("eth/db/state/compact/input") + db.CompWriteMeter = metrics.NewMeter("eth/db/state/compact/output") } extraDb, err := newdb(filepath.Join(config.DataDir, "extra")) if err != nil { return nil, fmt.Errorf("extra db err: %v", err) } if db, ok := extraDb.(*ethdb.LDBDatabase); ok { - db.GetTimer = metrics.GetOrRegisterTimer("eth/db/extra/user/gets", metrics.DefaultRegistry) - db.PutTimer = metrics.GetOrRegisterTimer("eth/db/extra/user/puts", metrics.DefaultRegistry) - db.MissMeter = metrics.GetOrRegisterMeter("eth/db/extra/user/misses", metrics.DefaultRegistry) - db.ReadMeter = metrics.GetOrRegisterMeter("eth/db/extra/user/reads", metrics.DefaultRegistry) - db.WriteMeter = metrics.GetOrRegisterMeter("eth/db/extra/user/writes", metrics.DefaultRegistry) - db.CompTimeMeter = metrics.GetOrRegisterMeter("eth/db/extra/compact/time", metrics.DefaultRegistry) - db.CompReadMeter = metrics.GetOrRegisterMeter("eth/db/extra/compact/input", metrics.DefaultRegistry) - db.CompWriteMeter = metrics.GetOrRegisterMeter("eth/db/extra/compact/output", metrics.DefaultRegistry) + db.GetTimer = metrics.NewTimer("eth/db/extra/user/gets") + db.PutTimer = metrics.NewTimer("eth/db/extra/user/puts") + db.MissMeter = metrics.NewMeter("eth/db/extra/user/misses") + db.ReadMeter = metrics.NewMeter("eth/db/extra/user/reads") + db.WriteMeter = metrics.NewMeter("eth/db/extra/user/writes") + db.CompTimeMeter = metrics.NewMeter("eth/db/extra/compact/time") + db.CompReadMeter = metrics.NewMeter("eth/db/extra/compact/input") + db.CompWriteMeter = metrics.NewMeter("eth/db/extra/compact/output") } nodeDb := filepath.Join(config.DataDir, "nodes") diff --git a/eth/fetcher/fetcher.go b/eth/fetcher/fetcher.go index 5a1509f89d..256b452e10 100644 --- a/eth/fetcher/fetcher.go +++ b/eth/fetcher/fetcher.go @@ -7,13 +7,11 @@ import ( "math/rand" "time" - "github.com/ethereum/go-ethereum/core" - "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/logger" "github.com/ethereum/go-ethereum/logger/glog" - "github.com/rcrowley/go-metrics" "gopkg.in/karalabe/cookiejar.v2/collections/prque" ) @@ -99,14 +97,6 @@ type Fetcher struct { // Testing hooks fetchingHook func([]common.Hash) // Method to call upon starting a block fetch importedHook func(*types.Block) // Method to call upon successful block import - - // Runtime metrics - announceMeter metrics.Meter // Counter for metering the inbound announcements - announceTimer metrics.Timer // Counter and timer for metering the announce forwarding - broadcastMeter metrics.Meter // Counter for metering the inbound propagations - broadcastTimer metrics.Timer // Counter and timer for metering the block forwarding - discardMeter metrics.Meter // Counter for metering the discarded blocks - futureMeter metrics.Meter // Counter for metering future blocks } // New creates a block fetcher to retrieve blocks based on hash announcements. @@ -129,12 +119,6 @@ func New(getBlock blockRetrievalFn, validateBlock blockValidatorFn, broadcastBlo chainHeight: chainHeight, insertChain: insertChain, dropPeer: dropPeer, - announceMeter: metrics.GetOrRegisterMeter("eth/sync/RemoteAnnounces", metrics.DefaultRegistry), - announceTimer: metrics.GetOrRegisterTimer("eth/sync/LocalAnnounces", metrics.DefaultRegistry), - broadcastMeter: metrics.GetOrRegisterMeter("eth/sync/RemoteBroadcasts", metrics.DefaultRegistry), - broadcastTimer: metrics.GetOrRegisterTimer("eth/sync/LocalBroadcasts", metrics.DefaultRegistry), - discardMeter: metrics.GetOrRegisterMeter("eth/sync/DiscardedBlocks", metrics.DefaultRegistry), - futureMeter: metrics.GetOrRegisterMeter("eth/sync/FutureBlocks", metrics.DefaultRegistry), } } @@ -246,7 +230,7 @@ func (f *Fetcher) loop() { case notification := <-f.notify: // A block was announced, make sure the peer isn't DOSing us - f.announceMeter.Mark(1) + announceMeter.Mark(1) count := f.announces[notification.origin] + 1 if count > hashLimit { @@ -265,7 +249,7 @@ func (f *Fetcher) loop() { case op := <-f.inject: // A direct block insertion was requested, try and fill any pending gaps - f.broadcastMeter.Mark(1) + broadcastMeter.Mark(1) f.enqueue(op.origin, op.block) case hash := <-f.done: @@ -384,7 +368,7 @@ func (f *Fetcher) enqueue(peer string, block *types.Block) { // Discard any past or too distant blocks if dist := int64(block.NumberU64()) - int64(f.chainHeight()); dist < -maxUncleDist || dist > maxQueueDist { glog.V(logger.Debug).Infof("Peer %s: discarded block #%d [%x], distance %d", peer, block.NumberU64(), hash.Bytes()[:4], dist) - f.discardMeter.Mark(1) + discardMeter.Mark(1) return } // Schedule the block for future importing @@ -423,11 +407,11 @@ func (f *Fetcher) insert(peer string, block *types.Block) { switch err := f.validateBlock(block, parent); err { case nil: // All ok, quickly propagate to our peers - f.broadcastTimer.UpdateSince(block.ReceivedAt) + broadcastTimer.UpdateSince(block.ReceivedAt) go f.broadcastBlock(block, true) case core.BlockFutureErr: - f.futureMeter.Mark(1) + futureMeter.Mark(1) // Weird future block, don't fail, but neither propagate default: @@ -442,7 +426,7 @@ func (f *Fetcher) insert(peer string, block *types.Block) { return } // If import succeeded, broadcast the block - f.announceTimer.UpdateSince(block.ReceivedAt) + announceTimer.UpdateSince(block.ReceivedAt) go f.broadcastBlock(block, false) // Invoke the testing hook if needed diff --git a/eth/fetcher/metrics.go b/eth/fetcher/metrics.go new file mode 100644 index 0000000000..e46e3c0fbb --- /dev/null +++ b/eth/fetcher/metrics.go @@ -0,0 +1,16 @@ +// Contains the metrics collected by the fetcher. + +package fetcher + +import ( + "github.com/ethereum/go-ethereum/metrics" +) + +var ( + announceMeter = metrics.NewMeter("eth/sync/RemoteAnnounces") + announceTimer = metrics.NewTimer("eth/sync/LocalAnnounces") + broadcastMeter = metrics.NewMeter("eth/sync/RemoteBroadcasts") + broadcastTimer = metrics.NewTimer("eth/sync/LocalBroadcasts") + discardMeter = metrics.NewMeter("eth/sync/DiscardedBlocks") + futureMeter = metrics.NewMeter("eth/sync/FutureBlocks") +) diff --git a/metrics/metrics.go b/metrics/metrics.go index cb0caaae4e..33004ee3b7 100644 --- a/metrics/metrics.go +++ b/metrics/metrics.go @@ -2,7 +2,9 @@ package metrics import ( + "os" "runtime" + "strings" "time" "github.com/ethereum/go-ethereum/logger" @@ -10,9 +12,49 @@ import ( "github.com/rcrowley/go-metrics" ) +// MetricsEnabledFlag is the CLI flag name to use to enable metrics collections. +var MetricsEnabledFlag = "metrics" + +// enabled is the flag specifying if metrics are enable or not. +var enabled = false + +// Init enables or disables the metrics system. Since we need this to run before +// any other code gets to create meters and timers, we'll actually do an ugly hack +// and peek into the command line args for the metrics flag. +func init() { + for _, arg := range os.Args { + if strings.TrimLeft(arg, "-") == MetricsEnabledFlag { + glog.V(logger.Info).Infof("Enabling metrics collection") + enabled = true + } + } +} + +// NewMeter create a new metrics Meter, either a real one of a NOP stub depending +// on the metrics flag. +func NewMeter(name string) metrics.Meter { + if !enabled { + return new(metrics.NilMeter) + } + return metrics.GetOrRegisterMeter(name, metrics.DefaultRegistry) +} + +// NewTimer create a new metrics Timer, either a real one of a NOP stub depending +// on the metrics flag. +func NewTimer(name string) metrics.Timer { + if !enabled { + return new(metrics.NilTimer) + } + return metrics.GetOrRegisterTimer(name, metrics.DefaultRegistry) +} + // CollectProcessMetrics periodically collects various metrics about the running // process. func CollectProcessMetrics(refresh time.Duration) { + // Short circuit if the metrics system is disabled + if !enabled { + return + } // Create the various data collectors memstats := make([]*runtime.MemStats, 2) diskstats := make([]*DiskStats, 2) diff --git a/p2p/metrics.go b/p2p/metrics.go index fbe5b1e90d..4b519e438e 100644 --- a/p2p/metrics.go +++ b/p2p/metrics.go @@ -5,14 +5,14 @@ package p2p import ( "net" - "github.com/rcrowley/go-metrics" + "github.com/ethereum/go-ethereum/metrics" ) var ( - ingressConnectMeter = metrics.GetOrRegisterMeter("p2p/InboundConnects", metrics.DefaultRegistry) - ingressTrafficMeter = metrics.GetOrRegisterMeter("p2p/InboundTraffic", metrics.DefaultRegistry) - egressConnectMeter = metrics.GetOrRegisterMeter("p2p/OutboundConnects", metrics.DefaultRegistry) - egressTrafficMeter = metrics.GetOrRegisterMeter("p2p/OutboundTraffic", metrics.DefaultRegistry) + ingressConnectMeter = metrics.NewMeter("p2p/InboundConnects") + ingressTrafficMeter = metrics.NewMeter("p2p/InboundTraffic") + egressConnectMeter = metrics.NewMeter("p2p/OutboundConnects") + egressTrafficMeter = metrics.NewMeter("p2p/OutboundTraffic") ) // meteredConn is a wrapper around a network TCP connection that meters both the From 5f3792c2a750dd95adeccbd5cf0cb19ecddfb43f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= <peterke@gmail.com> Date: Mon, 29 Jun 2015 16:18:34 +0300 Subject: [PATCH 112/156] cmd/geth: decent error message if metrics are disabled --- cmd/geth/monitorcmd.go | 2 +- core/chain_manager.go | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/cmd/geth/monitorcmd.go b/cmd/geth/monitorcmd.go index 6a7e1cbb4b..6593b3614c 100644 --- a/cmd/geth/monitorcmd.go +++ b/cmd/geth/monitorcmd.go @@ -79,7 +79,7 @@ func monitor(ctx *cli.Context) { if len(list) > 0 { utils.Fatalf("No metrics specified.\n\nAvailable:\n - %s", strings.Join(list, "\n - ")) } else { - utils.Fatalf("No metrics specified.\n\nNo metrics collected (--metrics)\n") + utils.Fatalf("No metrics collected by geth (--%s).\n", utils.MetricsEnabledFlag.Name) } } sort.Strings(monitored) diff --git a/core/chain_manager.go b/core/chain_manager.go index 4803119510..7c78b6bb77 100644 --- a/core/chain_manager.go +++ b/core/chain_manager.go @@ -23,7 +23,6 @@ import ( "github.com/ethereum/go-ethereum/pow" "github.com/ethereum/go-ethereum/rlp" "github.com/hashicorp/golang-lru" - "github.com/rcrowley/go-metrics" "github.com/syndtr/goleveldb/leveldb" ) From 8f504063f465e0ca10c6bb53ee914d10a3d45c86 Mon Sep 17 00:00:00 2001 From: Jeffrey Wilcke <geffobscura@gmail.com> Date: Tue, 30 Jun 2015 02:11:54 +0200 Subject: [PATCH 113/156] cmd/geth: version bump 0.9.34 --- cmd/geth/main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/geth/main.go b/cmd/geth/main.go index 3e945687bc..f4d2f94fee 100644 --- a/cmd/geth/main.go +++ b/cmd/geth/main.go @@ -48,7 +48,7 @@ import ( const ( ClientIdentifier = "Geth" - Version = "0.9.33" + Version = "0.9.34" ) var ( From b047f05e7e9d941348cba960f8cc16a9874340d0 Mon Sep 17 00:00:00 2001 From: Jeffrey Wilcke <geffobscura@gmail.com> Date: Tue, 30 Jun 2015 02:30:26 +0200 Subject: [PATCH 114/156] cmd/geth: version bump 0.9.35 --- cmd/geth/main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/geth/main.go b/cmd/geth/main.go index f4d2f94fee..c46343a606 100644 --- a/cmd/geth/main.go +++ b/cmd/geth/main.go @@ -48,7 +48,7 @@ import ( const ( ClientIdentifier = "Geth" - Version = "0.9.34" + Version = "0.9.35" ) var ( From 4c490db6afeb5a48d3e8d1d65ea8ddc9811d0a6d Mon Sep 17 00:00:00 2001 From: Gustav Simonsson <gustav.simonsson@gmail.com> Date: Tue, 30 Jun 2015 09:13:16 +0200 Subject: [PATCH 115/156] Use uint64 for block header timestamp --- cmd/evm/main.go | 6 +++--- core/block_processor.go | 15 +++++++-------- core/chain_makers.go | 2 +- core/chain_manager.go | 2 +- core/types/block.go | 2 +- core/types/block_test.go | 2 +- core/vm/environment.go | 2 +- core/vm/vm.go | 2 +- core/vm_env.go | 2 +- miner/worker.go | 6 +++--- tests/util.go | 6 +++--- xeth/types.go | 2 +- 12 files changed, 24 insertions(+), 25 deletions(-) diff --git a/cmd/evm/main.go b/cmd/evm/main.go index 7c9d27fac9..f6ec8c21e5 100644 --- a/cmd/evm/main.go +++ b/cmd/evm/main.go @@ -106,7 +106,7 @@ type VMEnv struct { depth int Gas *big.Int - time int64 + time uint64 logs []vm.StructLog } @@ -115,7 +115,7 @@ func NewEnv(state *state.StateDB, transactor common.Address, value *big.Int) *VM state: state, transactor: &transactor, value: value, - time: time.Now().Unix(), + time: uint64(time.Now().Unix()), } } @@ -123,7 +123,7 @@ func (self *VMEnv) State() *state.StateDB { return self.state } func (self *VMEnv) Origin() common.Address { return *self.transactor } func (self *VMEnv) BlockNumber() *big.Int { return common.Big0 } func (self *VMEnv) Coinbase() common.Address { return *self.transactor } -func (self *VMEnv) Time() int64 { return self.time } +func (self *VMEnv) Time() uint64 { return self.time } func (self *VMEnv) Difficulty() *big.Int { return common.Big1 } func (self *VMEnv) BlockHash() []byte { return make([]byte, 32) } func (self *VMEnv) Value() *big.Int { return self.value } diff --git a/core/block_processor.go b/core/block_processor.go index 22d4c7c27a..9b77d10ebe 100644 --- a/core/block_processor.go +++ b/core/block_processor.go @@ -362,6 +362,13 @@ func ValidateHeader(pow pow.PoW, block *types.Header, parent *types.Block, check return fmt.Errorf("Block extra data too long (%d)", len(block.Extra)) } + if block.Time > uint64(time.Now().Unix()) { + return BlockFutureErr + } + if block.Time <= parent.Time() { + return BlockEqualTSErr + } + expd := CalcDifficulty(int64(block.Time), int64(parent.Time()), parent.Difficulty()) if expd.Cmp(block.Difficulty) != 0 { return fmt.Errorf("Difficulty check failed for block %v, %v", block.Difficulty, expd) @@ -377,20 +384,12 @@ func ValidateHeader(pow pow.PoW, block *types.Header, parent *types.Block, check return fmt.Errorf("GasLimit check failed for block %v (%v > %v)", block.GasLimit, a, b) } - if int64(block.Time) > time.Now().Unix() { - return BlockFutureErr - } - num := parent.Number() num.Sub(block.Number, num) if num.Cmp(big.NewInt(1)) != 0 { return BlockNumberErr } - if block.Time <= uint64(parent.Time()) { - return BlockEqualTSErr //ValidationError("Block timestamp equal or less than previous block (%v - %v)", block.Time, parent.Time) - } - if checkPow { // Verify the nonce of the block. Return an error if it's not valid if !pow.Verify(types.NewBlockWithHeader(block)) { diff --git a/core/chain_makers.go b/core/chain_makers.go index 72ae7970eb..013251d749 100644 --- a/core/chain_makers.go +++ b/core/chain_makers.go @@ -155,7 +155,7 @@ func makeHeader(parent *types.Block, state *state.StateDB) *types.Header { Root: state.Root(), ParentHash: parent.Hash(), Coinbase: parent.Coinbase(), - Difficulty: CalcDifficulty(time, parent.Time(), parent.Difficulty()), + Difficulty: CalcDifficulty(int64(time), int64(parent.Time()), parent.Difficulty()), GasLimit: CalcGasLimit(parent), GasUsed: new(big.Int), Number: new(big.Int).Add(parent.Number(), common.Big1), diff --git a/core/chain_manager.go b/core/chain_manager.go index c89aae3f08..cdbdeb5aea 100644 --- a/core/chain_manager.go +++ b/core/chain_manager.go @@ -658,7 +658,7 @@ func (self *ChainManager) InsertChain(chain types.Blocks) (int, error) { // Allow up to MaxFuture second in the future blocks. If this limit // is exceeded the chain is discarded and processed at a later time // if given. - if max := time.Now().Unix() + maxTimeFutureBlocks; block.Time() > max { + if max := time.Now().Unix() + maxTimeFutureBlocks; int64(block.Time()) > max { return i, fmt.Errorf("%v: BlockFutureErr, %v > %v", BlockFutureErr, block.Time(), max) } diff --git a/core/types/block.go b/core/types/block.go index b7eb700ca4..e8919e9a06 100644 --- a/core/types/block.go +++ b/core/types/block.go @@ -290,7 +290,7 @@ func (b *Block) MixDigest() common.Hash { return b.header.MixDigest } func (b *Block) Nonce() uint64 { return binary.BigEndian.Uint64(b.header.Nonce[:]) } func (b *Block) Bloom() Bloom { return b.header.Bloom } func (b *Block) Coinbase() common.Address { return b.header.Coinbase } -func (b *Block) Time() int64 { return int64(b.header.Time) } +func (b *Block) Time() uint64 { return b.header.Time } func (b *Block) Root() common.Hash { return b.header.Root } func (b *Block) ParentHash() common.Hash { return b.header.ParentHash } func (b *Block) TxHash() common.Hash { return b.header.TxHash } diff --git a/core/types/block_test.go b/core/types/block_test.go index 03e6881beb..e0b98cd263 100644 --- a/core/types/block_test.go +++ b/core/types/block_test.go @@ -31,7 +31,7 @@ func TestBlockEncoding(t *testing.T) { check("Root", block.Root(), common.HexToHash("ef1552a40b7165c3cd773806b9e0c165b75356e0314bf0706f279c729f51e017")) check("Hash", block.Hash(), common.HexToHash("0a5843ac1cb04865017cb35a57b50b07084e5fcee39b5acadade33149f4fff9e")) check("Nonce", block.Nonce(), uint64(0xa13a5a8c8f2bb1c4)) - check("Time", block.Time(), int64(1426516743)) + check("Time", block.Time(), uint64(1426516743)) check("Size", block.Size(), common.StorageSize(len(blockEnc))) tx1 := NewTransaction(0, common.HexToAddress("095e7baea6a6c7c4c2dfeb977efac326af552d87"), big.NewInt(10), big.NewInt(50000), big.NewInt(10), nil) diff --git a/core/vm/environment.go b/core/vm/environment.go index c103049a23..0a5891f5c3 100644 --- a/core/vm/environment.go +++ b/core/vm/environment.go @@ -17,7 +17,7 @@ type Environment interface { BlockNumber() *big.Int GetHash(n uint64) common.Hash Coinbase() common.Address - Time() int64 + Time() uint64 Difficulty() *big.Int GasLimit() *big.Int Transfer(from, to Account, amount *big.Int) error diff --git a/core/vm/vm.go b/core/vm/vm.go index 9e092300de..ba803683ba 100644 --- a/core/vm/vm.go +++ b/core/vm/vm.go @@ -444,7 +444,7 @@ func (self *Vm) Run(context *Context, input []byte) (ret []byte, err error) { case TIMESTAMP: time := self.env.Time() - stack.push(big.NewInt(time)) + stack.push(new(big.Int).SetUint64(time)) case NUMBER: number := self.env.BlockNumber() diff --git a/core/vm_env.go b/core/vm_env.go index 6dd83acde0..24a29545fc 100644 --- a/core/vm_env.go +++ b/core/vm_env.go @@ -33,7 +33,7 @@ func NewEnv(state *state.StateDB, chain *ChainManager, msg Message, header *type func (self *VMEnv) Origin() common.Address { f, _ := self.msg.From(); return f } func (self *VMEnv) BlockNumber() *big.Int { return self.header.Number } func (self *VMEnv) Coinbase() common.Address { return self.header.Coinbase } -func (self *VMEnv) Time() int64 { return int64(self.header.Time) } +func (self *VMEnv) Time() uint64 { return self.header.Time } func (self *VMEnv) Difficulty() *big.Int { return self.header.Difficulty } func (self *VMEnv) GasLimit() *big.Int { return self.header.GasLimit } func (self *VMEnv) Value() *big.Int { return self.msg.Value() } diff --git a/miner/worker.go b/miner/worker.go index f06b6afa16..90914ddcb8 100644 --- a/miner/worker.go +++ b/miner/worker.go @@ -368,8 +368,8 @@ func (self *worker) commitNewWork() { tstart := time.Now() parent := self.chain.CurrentBlock() tstamp := tstart.Unix() - if tstamp <= parent.Time() { - tstamp = parent.Time() + 1 + if tstamp <= int64(parent.Time()) { + tstamp = int64(parent.Time()) + 1 } // this will ensure we're not going off too far in the future if now := time.Now().Unix(); tstamp > now+4 { @@ -382,7 +382,7 @@ func (self *worker) commitNewWork() { header := &types.Header{ ParentHash: parent.Hash(), Number: num.Add(num, common.Big1), - Difficulty: core.CalcDifficulty(tstamp, parent.Time(), parent.Difficulty()), + Difficulty: core.CalcDifficulty(int64(tstamp), int64(parent.Time()), parent.Difficulty()), GasLimit: core.CalcGasLimit(parent), GasUsed: new(big.Int), Coinbase: self.coinbase, diff --git a/tests/util.go b/tests/util.go index 67650c1889..ccdba57e0e 100644 --- a/tests/util.go +++ b/tests/util.go @@ -120,7 +120,7 @@ type Env struct { coinbase common.Address number *big.Int - time int64 + time uint64 difficulty *big.Int gasLimit *big.Int @@ -150,7 +150,7 @@ func NewEnvFromMap(state *state.StateDB, envValues map[string]string, exeValues //env.parent = common.Hex2Bytes(envValues["previousHash"]) env.coinbase = common.HexToAddress(envValues["currentCoinbase"]) env.number = common.Big(envValues["currentNumber"]) - env.time = common.Big(envValues["currentTimestamp"]).Int64() + env.time = common.Big(envValues["currentTimestamp"]).Uint64() env.difficulty = common.Big(envValues["currentDifficulty"]) env.gasLimit = common.Big(envValues["currentGasLimit"]) env.Gas = new(big.Int) @@ -163,7 +163,7 @@ func (self *Env) BlockNumber() *big.Int { return self.number } //func (self *Env) PrevHash() []byte { return self.parent } func (self *Env) Coinbase() common.Address { return self.coinbase } -func (self *Env) Time() int64 { return self.time } +func (self *Env) Time() uint64 { return self.time } func (self *Env) Difficulty() *big.Int { return self.difficulty } func (self *Env) State() *state.StateDB { return self.state } func (self *Env) GasLimit() *big.Int { return self.gasLimit } diff --git a/xeth/types.go b/xeth/types.go index ed64dc45ec..1d6a0c5cad 100644 --- a/xeth/types.go +++ b/xeth/types.go @@ -60,7 +60,7 @@ type Block struct { Hash string `json:"hash"` Transactions *common.List `json:"transactions"` Uncles *common.List `json:"uncles"` - Time int64 `json:"time"` + Time uint64 `json:"time"` Coinbase string `json:"coinbase"` Name string `json:"name"` GasLimit string `json:"gasLimit"` From d8fe64acaa94fc5a12e53cec110e57cace52ced9 Mon Sep 17 00:00:00 2001 From: Jeffrey Wilcke <geffobscura@gmail.com> Date: Tue, 30 Jun 2015 11:14:43 +0200 Subject: [PATCH 116/156] core, miner: added queued write to WriteBlock This fixes an issue with the lru cache not being available when calling WriteBlock. WriteBlock previously always assumed to be called from the InsertChain where the lru cache was always created prior to calling WriteBlock. When being called from the worker this could lead in to a nil pointer exception being thrown and causing database corruption. --- core/chain_manager.go | 33 ++++++++++++++++++--------------- miner/worker.go | 2 +- 2 files changed, 19 insertions(+), 16 deletions(-) diff --git a/core/chain_manager.go b/core/chain_manager.go index 7c78b6bb77..808ccd201f 100644 --- a/core/chain_manager.go +++ b/core/chain_manager.go @@ -364,14 +364,12 @@ func (bc *ChainManager) insert(block *types.Block) { func (bc *ChainManager) write(block *types.Block) { tstart := time.Now() - go func() { - enc, _ := rlp.EncodeToBytes((*types.StorageBlock)(block)) - key := append(blockHashPre, block.Hash().Bytes()...) - err := bc.blockDb.Put(key, enc) - if err != nil { - glog.Fatal("db write fail:", err) - } - }() + enc, _ := rlp.EncodeToBytes((*types.StorageBlock)(block)) + key := append(blockHashPre, block.Hash().Bytes()...) + err := bc.blockDb.Put(key, enc) + if err != nil { + glog.Fatal("db write fail:", err) + } if glog.V(logger.Debug) { glog.Infof("wrote block #%v %s. Took %v\n", block.Number(), common.PP(block.Hash().Bytes()), time.Since(tstart)) @@ -555,7 +553,8 @@ const ( sideStatTy ) -func (self *ChainManager) WriteBlock(block *types.Block) (status writeStatus, err error) { +// WriteBlock writes the block to the chain (or pending queue) +func (self *ChainManager) WriteBlock(block *types.Block, queued bool) (status writeStatus, err error) { self.wg.Add(1) defer self.wg.Done() @@ -587,11 +586,15 @@ func (self *ChainManager) WriteBlock(block *types.Block) (status writeStatus, er status = sideStatTy } - // Write block to database. Eventually we'll have to improve on this and throw away blocks that are - // not in the canonical chain. - self.mu.Lock() - self.enqueueForWrite(block) - self.mu.Unlock() + if queued { + // Write block to database. Eventually we'll have to improve on this and throw away blocks that are + // not in the canonical chain. + self.mu.Lock() + self.enqueueForWrite(block) + self.mu.Unlock() + } else { + self.write(block) + } // Delete from future blocks self.futureBlocks.Remove(block.Hash()) @@ -693,7 +696,7 @@ func (self *ChainManager) InsertChain(chain types.Blocks) (int, error) { txcount += len(block.Transactions()) // write the block to the chain and get the status - status, err := self.WriteBlock(block) + status, err := self.WriteBlock(block, true) if err != nil { return i, err } diff --git a/miner/worker.go b/miner/worker.go index 0971bd9576..f06b6afa16 100644 --- a/miner/worker.go +++ b/miner/worker.go @@ -233,7 +233,7 @@ func (self *worker) wait() { continue } - _, err := self.chain.WriteBlock(block) + _, err := self.chain.WriteBlock(block, false) if err != nil { glog.V(logger.Error).Infoln("error writing block to chain", err) continue From 056e9dd393eeb7ddb4f6bf3e508228e1874bc94e Mon Sep 17 00:00:00 2001 From: Bas van Kervel <bas@ethdev.com> Date: Wed, 24 Jun 2015 13:53:37 +0200 Subject: [PATCH 117/156] added eth.pendingTransactions --- rpc/api/eth.go | 40 +++++++++++++++++++++++++++++++++++----- rpc/api/eth_args.go | 34 ++++++++++++++++++++++++++++++++++ rpc/api/eth_js.go | 8 ++++++++ rpc/api/utils.go | 3 ++- 4 files changed, 79 insertions(+), 6 deletions(-) diff --git a/rpc/api/eth.go b/rpc/api/eth.go index 962c8d0f95..d77bf98035 100644 --- a/rpc/api/eth.go +++ b/rpc/api/eth.go @@ -6,9 +6,11 @@ import ( "math/big" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/eth" "github.com/ethereum/go-ethereum/rpc/codec" "github.com/ethereum/go-ethereum/rpc/shared" "github.com/ethereum/go-ethereum/xeth" + "gopkg.in/fatih/set.v0" ) const ( @@ -18,9 +20,10 @@ const ( // eth api provider // See https://github.com/ethereum/wiki/wiki/JSON-RPC type ethApi struct { - xeth *xeth.XEth - methods map[string]ethhandler - codec codec.ApiCoder + xeth *xeth.XEth + ethereum *eth.Ethereum + methods map[string]ethhandler + codec codec.ApiCoder } // eth callback handler @@ -71,12 +74,13 @@ var ( "eth_hashrate": (*ethApi).Hashrate, "eth_getWork": (*ethApi).GetWork, "eth_submitWork": (*ethApi).SubmitWork, + "eth_pendingTransactions": (*ethApi).PendingTransactions, } ) // create new ethApi instance -func NewEthApi(xeth *xeth.XEth, codec codec.Codec) *ethApi { - return ðApi{xeth, ethMapping, codec.New(nil)} +func NewEthApi(xeth *xeth.XEth, eth *eth.Ethereum, codec codec.Codec) *ethApi { + return ðApi{xeth, eth, ethMapping, codec.New(nil)} } // collection with supported methods @@ -548,3 +552,29 @@ func (self *ethApi) SubmitWork(req *shared.Request) (interface{}, error) { } return self.xeth.RemoteMining().SubmitWork(args.Nonce, common.HexToHash(args.Digest), common.HexToHash(args.Header)), nil } + +func (self *ethApi) PendingTransactions(req *shared.Request) (interface{}, error) { + txs := self.ethereum.TxPool().GetTransactions() + + // grab the accounts from the account manager. This will help with determening which + // transactions should be returned. + accounts, err := self.ethereum.AccountManager().Accounts() + if err != nil { + return nil, err + } + + // Add the accouns to a new set + accountSet := set.New() + for _, account := range accounts { + accountSet.Add(account.Address) + } + + var ltxs []*tx + for _, tx := range txs { + if from, _ := tx.From(); accountSet.Has(from) { + ltxs = append(ltxs, newTx(tx)) + } + } + + return ltxs, nil +} diff --git a/rpc/api/eth_args.go b/rpc/api/eth_args.go index bf8ffead6c..39c003f664 100644 --- a/rpc/api/eth_args.go +++ b/rpc/api/eth_args.go @@ -5,8 +5,11 @@ import ( "fmt" "math/big" + "strconv" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/state" + "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/rpc/shared" ) @@ -858,3 +861,34 @@ func (args *SubmitWorkArgs) UnmarshalJSON(b []byte) (err error) { return nil } + +type tx struct { + tx *types.Transaction + + To string + From string + Nonce string + Value string + Data string + GasLimit string + GasPrice string +} + +func newTx(t *types.Transaction) *tx { + from, _ := t.From() + var to string + if t := t.To(); t != nil { + to = t.Hex() + } + + return &tx{ + tx: t, + To: to, + From: from.Hex(), + Value: t.Amount.String(), + Nonce: strconv.Itoa(int(t.Nonce())), + Data: "0x" + common.Bytes2Hex(t.Data()), + GasLimit: t.GasLimit.String(), + GasPrice: t.GasPrice().String(), + } +} diff --git a/rpc/api/eth_js.go b/rpc/api/eth_js.go index e1268eb763..8d0fe8f0a2 100644 --- a/rpc/api/eth_js.go +++ b/rpc/api/eth_js.go @@ -15,6 +15,14 @@ web3._extend({ inputFormatter: [web3._extend.formatters.formatInputString,web3._extend.formatters.formatInputString], outputFormatter: web3._extend.formatters.formatOutputString }) + ], + properties: + [ + new web3._extend.Property({ + name: 'pendingTransactions', + getter: 'eth_pendingTransactions', + outputFormatter: function(obj) { return obj; } + }) ] }); ` diff --git a/rpc/api/utils.go b/rpc/api/utils.go index 6e4835de61..3d46f78d32 100644 --- a/rpc/api/utils.go +++ b/rpc/api/utils.go @@ -84,6 +84,7 @@ var ( "hashrate", "getWork", "submitWork", + "pendingTransactions", }, "miner": []string{ "hashrate", @@ -149,7 +150,7 @@ func ParseApiString(apistr string, codec codec.Codec, xeth *xeth.XEth, eth *eth. case shared.DbApiName: apis[i] = NewDbApi(xeth, eth, codec) case shared.EthApiName: - apis[i] = NewEthApi(xeth, codec) + apis[i] = NewEthApi(xeth, eth, codec) case shared.MinerApiName: apis[i] = NewMinerApi(eth, codec) case shared.NetApiName: From ec866b066ace5d80c3c6a69349dbb1fac4503b46 Mon Sep 17 00:00:00 2001 From: Bas van Kervel <bas@ethdev.com> Date: Wed, 24 Jun 2015 14:56:53 +0200 Subject: [PATCH 118/156] added eth.resend --- rpc/api/eth.go | 18 ++++++++++++++++ rpc/api/eth_args.go | 50 +++++++++++++++++++++++++++++++++++++++++++++ rpc/api/eth_js.go | 7 +++++++ rpc/api/utils.go | 1 + 4 files changed, 76 insertions(+) diff --git a/rpc/api/eth.go b/rpc/api/eth.go index d77bf98035..1883e363c6 100644 --- a/rpc/api/eth.go +++ b/rpc/api/eth.go @@ -6,6 +6,7 @@ import ( "math/big" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/eth" "github.com/ethereum/go-ethereum/rpc/codec" "github.com/ethereum/go-ethereum/rpc/shared" @@ -74,6 +75,7 @@ var ( "eth_hashrate": (*ethApi).Hashrate, "eth_getWork": (*ethApi).GetWork, "eth_submitWork": (*ethApi).SubmitWork, + "eth_resend": (*ethApi).Resend, "eth_pendingTransactions": (*ethApi).PendingTransactions, } ) @@ -553,6 +555,22 @@ func (self *ethApi) SubmitWork(req *shared.Request) (interface{}, error) { return self.xeth.RemoteMining().SubmitWork(args.Nonce, common.HexToHash(args.Digest), common.HexToHash(args.Header)), nil } +func (self *ethApi) Resend(req *shared.Request) (interface{}, error) { + args := new(ResendArgs) + if err := self.codec.Decode(req.Params, &args); err != nil { + return nil, shared.NewDecodeParamError(err.Error()) + } + + ret, err := self.xeth.Transact(args.Tx.From, args.Tx.To, args.Tx.Nonce, args.Tx.Value, args.GasLimit, args.GasPrice, args.Tx.Data) + if err != nil { + return nil, err + } + + self.ethereum.TxPool().RemoveTransactions(types.Transactions{args.Tx.tx}) + + return ret, nil +} + func (self *ethApi) PendingTransactions(req *shared.Request) (interface{}, error) { txs := self.ethereum.TxPool().GetTransactions() diff --git a/rpc/api/eth_args.go b/rpc/api/eth_args.go index 39c003f664..a75fdbdee2 100644 --- a/rpc/api/eth_args.go +++ b/rpc/api/eth_args.go @@ -892,3 +892,53 @@ func newTx(t *types.Transaction) *tx { GasPrice: t.GasPrice().String(), } } + +type ResendArgs struct { + Tx *tx + GasPrice string + GasLimit string +} + +func (args *ResendArgs) UnmarshalJSON(b []byte) (err error) { + var obj []interface{} + if err = json.Unmarshal(b, &obj); err != nil { + return shared.NewDecodeParamError(err.Error()) + } + + if len(obj) < 1 { + return shared.NewInsufficientParamsError(len(obj), 1) + } + + data, err := json.Marshal(obj[0]) + if err != nil { + return shared.NewDecodeParamError("Unable to parse transaction object") + } + + trans := new(tx) + err = json.Unmarshal(data, trans) + if err != nil { + return shared.NewDecodeParamError("Unable to parse transaction object.") + } + + gasLimit, gasPrice := trans.GasLimit, trans.GasPrice + + if len(obj) > 1 && obj[1] != nil { + if gp, ok := obj[1].(string); ok { + gasPrice = gp + } else { + return shared.NewInvalidTypeError("gasPrice", "not a string") + } + } + if len(obj) > 2 && obj[2] != nil { + if gl, ok := obj[2].(string); ok { + gasLimit = gl + } else { + return shared.NewInvalidTypeError("gasLimit", "not a string") + } + } + args.Tx = trans + args.GasPrice = gasPrice + args.GasLimit = gasLimit + + return nil +} diff --git a/rpc/api/eth_js.go b/rpc/api/eth_js.go index 8d0fe8f0a2..4512cc147f 100644 --- a/rpc/api/eth_js.go +++ b/rpc/api/eth_js.go @@ -14,6 +14,13 @@ web3._extend({ params: 2, inputFormatter: [web3._extend.formatters.formatInputString,web3._extend.formatters.formatInputString], outputFormatter: web3._extend.formatters.formatOutputString + }), + new web3._extend.Method({ + name: 'resend', + call: 'eth_resend', + params: 3, + inputFormatter: [function(obj) { return obj; },web3._extend.formatters.formatInputString,web3._extend.formatters.formatInputString], + outputFormatter: web3._extend.formatters.formatOutputString }) ], properties: diff --git a/rpc/api/utils.go b/rpc/api/utils.go index 3d46f78d32..e6a01d3d64 100644 --- a/rpc/api/utils.go +++ b/rpc/api/utils.go @@ -85,6 +85,7 @@ var ( "getWork", "submitWork", "pendingTransactions", + "resend", }, "miner": []string{ "hashrate", From 02c6af66bfd04f5eb2e2d48a85615e93ea9c9ddc Mon Sep 17 00:00:00 2001 From: Bas van Kervel <bas@ethdev.com> Date: Wed, 24 Jun 2015 16:07:44 +0200 Subject: [PATCH 119/156] fixed unittest compilation issue --- rpc/api/api_test.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/rpc/api/api_test.go b/rpc/api/api_test.go index 7e273ef28f..2ac8bcd456 100644 --- a/rpc/api/api_test.go +++ b/rpc/api/api_test.go @@ -76,8 +76,9 @@ func TestCompileSolidity(t *testing.T) { expLanguageVersion := "0" expSource := source - xeth := xeth.NewTest(ð.Ethereum{}, nil) - api := NewEthApi(xeth, codec.JSON) + eth := ð.Ethereum{} + xeth := xeth.NewTest(eth, nil) + api := NewEthApi(xeth, eth, codec.JSON) var rpcRequest shared.Request json.Unmarshal([]byte(jsonstr), &rpcRequest) From 6fdddc5ac940b6241596e0a2622461148e8a57a0 Mon Sep 17 00:00:00 2001 From: Bas van Kervel <bas@ethdev.com> Date: Mon, 29 Jun 2015 11:13:28 +0200 Subject: [PATCH 120/156] improved error handling in parsing request --- rpc/api/eth.go | 3 ++- rpc/api/eth_args.go | 7 ++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/rpc/api/eth.go b/rpc/api/eth.go index 1883e363c6..8e96478616 100644 --- a/rpc/api/eth.go +++ b/rpc/api/eth.go @@ -12,6 +12,7 @@ import ( "github.com/ethereum/go-ethereum/rpc/shared" "github.com/ethereum/go-ethereum/xeth" "gopkg.in/fatih/set.v0" + "fmt" ) const ( @@ -574,7 +575,7 @@ func (self *ethApi) Resend(req *shared.Request) (interface{}, error) { func (self *ethApi) PendingTransactions(req *shared.Request) (interface{}, error) { txs := self.ethereum.TxPool().GetTransactions() - // grab the accounts from the account manager. This will help with determening which + // grab the accounts from the account manager. This will help with determining which // transactions should be returned. accounts, err := self.ethereum.AccountManager().Accounts() if err != nil { diff --git a/rpc/api/eth_args.go b/rpc/api/eth_args.go index a75fdbdee2..88fc00a6c1 100644 --- a/rpc/api/eth_args.go +++ b/rpc/api/eth_args.go @@ -917,7 +917,11 @@ func (args *ResendArgs) UnmarshalJSON(b []byte) (err error) { trans := new(tx) err = json.Unmarshal(data, trans) if err != nil { - return shared.NewDecodeParamError("Unable to parse transaction object.") + return shared.NewDecodeParamError("Unable to parse transaction object") + } + + if trans == nil || trans.tx == nil { + return shared.NewDecodeParamError("Unable to parse transaction object") } gasLimit, gasPrice := trans.GasLimit, trans.GasPrice @@ -936,6 +940,7 @@ func (args *ResendArgs) UnmarshalJSON(b []byte) (err error) { return shared.NewInvalidTypeError("gasLimit", "not a string") } } + args.Tx = trans args.GasPrice = gasPrice args.GasLimit = gasLimit From 7ffabf1d399989618470794600e25764bdd9954b Mon Sep 17 00:00:00 2001 From: Bas van Kervel <bas@ethdev.com> Date: Mon, 29 Jun 2015 12:32:01 +0200 Subject: [PATCH 121/156] add json parsing method for resend transaction --- rpc/api/eth.go | 1 - rpc/api/eth_args.go | 77 ++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 76 insertions(+), 2 deletions(-) diff --git a/rpc/api/eth.go b/rpc/api/eth.go index 8e96478616..db0b4b024b 100644 --- a/rpc/api/eth.go +++ b/rpc/api/eth.go @@ -12,7 +12,6 @@ import ( "github.com/ethereum/go-ethereum/rpc/shared" "github.com/ethereum/go-ethereum/xeth" "gopkg.in/fatih/set.v0" - "fmt" ) const ( diff --git a/rpc/api/eth_args.go b/rpc/api/eth_args.go index 88fc00a6c1..203171d58f 100644 --- a/rpc/api/eth_args.go +++ b/rpc/api/eth_args.go @@ -4,8 +4,8 @@ import ( "encoding/json" "fmt" "math/big" - "strconv" + "strings" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/state" @@ -899,6 +899,81 @@ type ResendArgs struct { GasLimit string } +func (tx *tx) UnmarshalJSON(b []byte) (err error) { + var fields map[string]interface{} + if err := json.Unmarshal(b, &fields); err != nil { + return shared.NewDecodeParamError(err.Error()) + } + + trans := new(types.Transaction) + + if val, found := fields["To"]; found { + if strVal, ok := val.(string); ok && len(strVal) > 0 { + tx.To = strVal + to := common.StringToAddress(strVal) + trans.Recipient = &to + } + } + + if val, found := fields["From"]; found { + if strVal, ok := val.(string); ok { + tx.From = strVal + } + } + + if val, found := fields["Nonce"]; found { + if strVal, ok := val.(string); ok { + tx.Nonce = strVal + if trans.AccountNonce, err = strconv.ParseUint(strVal, 10, 64); err != nil { + return shared.NewDecodeParamError(fmt.Sprintf("Unable to decode tx.Nonce - %v", err)) + } + } + } + + var parseOk bool + if val, found := fields["Value"]; found { + if strVal, ok := val.(string); ok { + tx.Value = strVal + if trans.Amount, parseOk = new(big.Int).SetString(strVal, 0); !parseOk { + return shared.NewDecodeParamError(fmt.Sprintf("Unable to decode tx.Amount - %v", err)) + } + } + } + + if val, found := fields["Data"]; found { + if strVal, ok := val.(string); ok { + tx.Data = strVal + if strings.HasPrefix(strVal, "0x") { + trans.Payload = common.Hex2Bytes(strVal[2:]) + } else { + trans.Payload = common.Hex2Bytes(strVal) + } + } + } + + if val, found := fields["GasLimit"]; found { + if strVal, ok := val.(string); ok { + tx.GasLimit = strVal + if trans.GasLimit, parseOk = new(big.Int).SetString(strVal, 0); !parseOk { + return shared.NewDecodeParamError(fmt.Sprintf("Unable to decode tx.GasLimit - %v", err)) + } + } + } + + if val, found := fields["GasPrice"]; found { + if strVal, ok := val.(string); ok { + tx.GasPrice = strVal + if trans.Price, parseOk = new(big.Int).SetString(strVal, 0); !parseOk { + return shared.NewDecodeParamError(fmt.Sprintf("Unable to decode tx.GasPrice - %v", err)) + } + } + } + + tx.tx = trans + + return nil +} + func (args *ResendArgs) UnmarshalJSON(b []byte) (err error) { var obj []interface{} if err = json.Unmarshal(b, &obj); err != nil { From 57dff6f1d7e8402d2849205cb44daaffcc40cc23 Mon Sep 17 00:00:00 2001 From: Bas van Kervel <bas@ethdev.com> Date: Mon, 29 Jun 2015 12:42:47 +0200 Subject: [PATCH 122/156] initialize fields to prevent nil pointer exception --- rpc/api/eth_args.go | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/rpc/api/eth_args.go b/rpc/api/eth_args.go index 203171d58f..b5507832de 100644 --- a/rpc/api/eth_args.go +++ b/rpc/api/eth_args.go @@ -906,6 +906,9 @@ func (tx *tx) UnmarshalJSON(b []byte) (err error) { } trans := new(types.Transaction) + trans.Amount = new(big.Int) + trans.GasLimit = new(big.Int) + trans.Price = new(big.Int) if val, found := fields["To"]; found { if strVal, ok := val.(string); ok && len(strVal) > 0 { @@ -928,13 +931,15 @@ func (tx *tx) UnmarshalJSON(b []byte) (err error) { return shared.NewDecodeParamError(fmt.Sprintf("Unable to decode tx.Nonce - %v", err)) } } + } else { + return shared.NewDecodeParamError("tx.Nonce not found") } var parseOk bool if val, found := fields["Value"]; found { if strVal, ok := val.(string); ok { tx.Value = strVal - if trans.Amount, parseOk = new(big.Int).SetString(strVal, 0); !parseOk { + if _, parseOk = trans.Amount.SetString(strVal, 0); !parseOk { return shared.NewDecodeParamError(fmt.Sprintf("Unable to decode tx.Amount - %v", err)) } } @@ -954,7 +959,7 @@ func (tx *tx) UnmarshalJSON(b []byte) (err error) { if val, found := fields["GasLimit"]; found { if strVal, ok := val.(string); ok { tx.GasLimit = strVal - if trans.GasLimit, parseOk = new(big.Int).SetString(strVal, 0); !parseOk { + if _, parseOk = trans.GasLimit.SetString(strVal, 0); !parseOk { return shared.NewDecodeParamError(fmt.Sprintf("Unable to decode tx.GasLimit - %v", err)) } } @@ -963,7 +968,7 @@ func (tx *tx) UnmarshalJSON(b []byte) (err error) { if val, found := fields["GasPrice"]; found { if strVal, ok := val.(string); ok { tx.GasPrice = strVal - if trans.Price, parseOk = new(big.Int).SetString(strVal, 0); !parseOk { + if _, parseOk = trans.Price.SetString(strVal, 0); !parseOk { return shared.NewDecodeParamError(fmt.Sprintf("Unable to decode tx.GasPrice - %v", err)) } } From 61ca780f3ba21ef1e62aab545160de12cbbf45bf Mon Sep 17 00:00:00 2001 From: Jeffrey Wilcke <geffobscura@gmail.com> Date: Tue, 30 Jun 2015 11:04:30 +0200 Subject: [PATCH 123/156] core: reduce CPU load by reducing calls to checkQueue * Reduced maxQueue count * Added proper deletion past maxQueue limit * Added cheap stats method to txpool queueCheck was called for **every** transaction instead of: 1. add all txs 2. check queue previously 1. add txs[i] 2. check queue 3. if i < len(txs) goto 1. --- core/transaction_pool.go | 75 +++++++++++++++++++++++------------ core/transaction_pool_test.go | 2 + rpc/api/txpool.go | 5 ++- 3 files changed, 54 insertions(+), 28 deletions(-) diff --git a/core/transaction_pool.go b/core/transaction_pool.go index bf28647c37..6a7012c658 100644 --- a/core/transaction_pool.go +++ b/core/transaction_pool.go @@ -29,7 +29,7 @@ var ( ) const ( - maxQueued = 200 // max limit of queued txs per address + maxQueued = 64 // max limit of queued txs per address ) type stateFn func() *state.StateDB @@ -129,6 +129,17 @@ func (pool *TxPool) State() *state.ManagedState { return pool.pendingState } +func (pool *TxPool) Stats() (pending int, queued int) { + pool.mu.RLock() + defer pool.mu.RUnlock() + + pending = len(pool.pending) + for _, txs := range pool.queue { + queued += len(txs) + } + return +} + // validateTx checks whether a transaction is valid according // to the consensus rules. func (pool *TxPool) validateTx(tx *types.Transaction) error { @@ -214,9 +225,6 @@ func (self *TxPool) add(tx *types.Transaction) error { glog.Infof("(t) %x => %s (%v) %x\n", from, toname, tx.Value, hash) } - // check and validate the queueue - self.checkQueue() - return nil } @@ -245,11 +253,17 @@ func (pool *TxPool) addTx(hash common.Hash, addr common.Address, tx *types.Trans } // Add queues a single transaction in the pool if it is valid. -func (self *TxPool) Add(tx *types.Transaction) error { +func (self *TxPool) Add(tx *types.Transaction) (err error) { self.mu.Lock() defer self.mu.Unlock() - return self.add(tx) + err = self.add(tx) + if err == nil { + // check and validate the queueue + self.checkQueue() + } + + return } // AddTransactions attempts to queue all valid transactions in txs. @@ -265,6 +279,9 @@ func (self *TxPool) AddTransactions(txs []*types.Transaction) { glog.V(logger.Debug).Infof("tx %x\n", h[:4]) } } + + // check and validate the queueue + self.checkQueue() } // GetTransaction returns a transaction if it is contained in the pool @@ -327,6 +344,23 @@ func (self *TxPool) RemoveTransactions(txs types.Transactions) { } } +func (pool *TxPool) removeTx(hash common.Hash) { + // delete from pending pool + delete(pool.pending, hash) + // delete from queue + for address, txs := range pool.queue { + if _, ok := txs[hash]; ok { + if len(txs) == 1 { + // if only one tx, remove entire address entry. + delete(pool.queue, address) + } else { + delete(txs, hash) + } + break + } + } +} + // checkQueue moves transactions that have become processable to main pool. func (pool *TxPool) checkQueue() { state := pool.pendingState @@ -354,13 +388,19 @@ func (pool *TxPool) checkQueue() { for i, e := range addq { // start deleting the transactions from the queue if they exceed the limit if i > maxQueued { - if glog.V(logger.Debug) { - glog.Infof("Queued tx limit exceeded for %s. Tx %s removed\n", common.PP(address[:]), common.PP(e.hash[:])) - } delete(pool.queue[address], e.hash) continue } + if e.Nonce() > guessedNonce { + if len(addq)-i > maxQueued { + if glog.V(logger.Debug) { + glog.Infof("Queued tx limit exceeded for %s. Tx %s removed\n", common.PP(address[:]), common.PP(e.hash[:])) + } + for j := i + maxQueued; j < len(addq); j++ { + delete(txs, addq[j].hash) + } + } break } delete(txs, e.hash) @@ -373,23 +413,6 @@ func (pool *TxPool) checkQueue() { } } -func (pool *TxPool) removeTx(hash common.Hash) { - // delete from pending pool - delete(pool.pending, hash) - // delete from queue - for address, txs := range pool.queue { - if _, ok := txs[hash]; ok { - if len(txs) == 1 { - // if only one tx, remove entire address entry. - delete(pool.queue, address) - } else { - delete(txs, hash) - } - break - } - } -} - // validatePool removes invalid and processed transactions from the main pool. func (pool *TxPool) validatePool() { state := pool.currentState() diff --git a/core/transaction_pool_test.go b/core/transaction_pool_test.go index ff8b9c730f..5744ef0598 100644 --- a/core/transaction_pool_test.go +++ b/core/transaction_pool_test.go @@ -181,6 +181,8 @@ func TestTransactionDoubleNonce(t *testing.T) { if err := pool.add(tx2); err != nil { t.Error("didn't expect error", err) } + + pool.checkQueue() if len(pool.pending) != 2 { t.Error("expected 2 pending txs. Got", len(pool.pending)) } diff --git a/rpc/api/txpool.go b/rpc/api/txpool.go index 25ad6e9b2d..04faf463c2 100644 --- a/rpc/api/txpool.go +++ b/rpc/api/txpool.go @@ -68,8 +68,9 @@ func (self *txPoolApi) ApiVersion() string { } func (self *txPoolApi) Status(req *shared.Request) (interface{}, error) { + pending, queue := self.ethereum.TxPool().Stats() return map[string]int{ - "pending": self.ethereum.TxPool().GetTransactions().Len(), - "queued": self.ethereum.TxPool().GetQueuedTransactions().Len(), + "pending": pending, + "queued": queue, }, nil } From a5d5387dee984b0d3712379998c200d2c6fe89e5 Mon Sep 17 00:00:00 2001 From: Bas van Kervel <bas@ethdev.com> Date: Tue, 30 Jun 2015 15:27:27 +0200 Subject: [PATCH 124/156] rebase with develop --- rpc/api/eth.go | 9 +++++++++ rpc/api/eth_args.go | 39 ++++++++++++++++++++++++--------------- 2 files changed, 33 insertions(+), 15 deletions(-) diff --git a/rpc/api/eth.go b/rpc/api/eth.go index db0b4b024b..784cd0f484 100644 --- a/rpc/api/eth.go +++ b/rpc/api/eth.go @@ -7,7 +7,9 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto/sha3" "github.com/ethereum/go-ethereum/eth" + "github.com/ethereum/go-ethereum/rlp" "github.com/ethereum/go-ethereum/rpc/codec" "github.com/ethereum/go-ethereum/rpc/shared" "github.com/ethereum/go-ethereum/xeth" @@ -555,6 +557,13 @@ func (self *ethApi) SubmitWork(req *shared.Request) (interface{}, error) { return self.xeth.RemoteMining().SubmitWork(args.Nonce, common.HexToHash(args.Digest), common.HexToHash(args.Header)), nil } +func rlpHash(x interface{}) (h common.Hash) { + hw := sha3.NewKeccak256() + rlp.Encode(hw, x) + hw.Sum(h[:0]) + return h +} + func (self *ethApi) Resend(req *shared.Request) (interface{}, error) { args := new(ResendArgs) if err := self.codec.Decode(req.Params, &args); err != nil { diff --git a/rpc/api/eth_args.go b/rpc/api/eth_args.go index b5507832de..8f64280d35 100644 --- a/rpc/api/eth_args.go +++ b/rpc/api/eth_args.go @@ -885,10 +885,10 @@ func newTx(t *types.Transaction) *tx { tx: t, To: to, From: from.Hex(), - Value: t.Amount.String(), + Value: t.Value().String(), Nonce: strconv.Itoa(int(t.Nonce())), Data: "0x" + common.Bytes2Hex(t.Data()), - GasLimit: t.GasLimit.String(), + GasLimit: t.Gas().String(), GasPrice: t.GasPrice().String(), } } @@ -905,16 +905,21 @@ func (tx *tx) UnmarshalJSON(b []byte) (err error) { return shared.NewDecodeParamError(err.Error()) } - trans := new(types.Transaction) - trans.Amount = new(big.Int) - trans.GasLimit = new(big.Int) - trans.Price = new(big.Int) + var ( + nonce uint64 + to common.Address + amount = new(big.Int).Set(common.Big0) + gasLimit = new(big.Int).Set(common.Big0) + gasPrice = new(big.Int).Set(common.Big0) + data []byte + contractCreation = true + ) if val, found := fields["To"]; found { if strVal, ok := val.(string); ok && len(strVal) > 0 { tx.To = strVal - to := common.StringToAddress(strVal) - trans.Recipient = &to + to = common.HexToAddress(strVal) + contractCreation = false } } @@ -927,7 +932,7 @@ func (tx *tx) UnmarshalJSON(b []byte) (err error) { if val, found := fields["Nonce"]; found { if strVal, ok := val.(string); ok { tx.Nonce = strVal - if trans.AccountNonce, err = strconv.ParseUint(strVal, 10, 64); err != nil { + if nonce, err = strconv.ParseUint(strVal, 10, 64); err != nil { return shared.NewDecodeParamError(fmt.Sprintf("Unable to decode tx.Nonce - %v", err)) } } @@ -939,7 +944,7 @@ func (tx *tx) UnmarshalJSON(b []byte) (err error) { if val, found := fields["Value"]; found { if strVal, ok := val.(string); ok { tx.Value = strVal - if _, parseOk = trans.Amount.SetString(strVal, 0); !parseOk { + if _, parseOk = amount.SetString(strVal, 0); !parseOk { return shared.NewDecodeParamError(fmt.Sprintf("Unable to decode tx.Amount - %v", err)) } } @@ -949,9 +954,9 @@ func (tx *tx) UnmarshalJSON(b []byte) (err error) { if strVal, ok := val.(string); ok { tx.Data = strVal if strings.HasPrefix(strVal, "0x") { - trans.Payload = common.Hex2Bytes(strVal[2:]) + data = common.Hex2Bytes(strVal[2:]) } else { - trans.Payload = common.Hex2Bytes(strVal) + data = common.Hex2Bytes(strVal) } } } @@ -959,7 +964,7 @@ func (tx *tx) UnmarshalJSON(b []byte) (err error) { if val, found := fields["GasLimit"]; found { if strVal, ok := val.(string); ok { tx.GasLimit = strVal - if _, parseOk = trans.GasLimit.SetString(strVal, 0); !parseOk { + if _, parseOk = gasLimit.SetString(strVal, 0); !parseOk { return shared.NewDecodeParamError(fmt.Sprintf("Unable to decode tx.GasLimit - %v", err)) } } @@ -968,13 +973,17 @@ func (tx *tx) UnmarshalJSON(b []byte) (err error) { if val, found := fields["GasPrice"]; found { if strVal, ok := val.(string); ok { tx.GasPrice = strVal - if _, parseOk = trans.Price.SetString(strVal, 0); !parseOk { + if _, parseOk = gasPrice.SetString(strVal, 0); !parseOk { return shared.NewDecodeParamError(fmt.Sprintf("Unable to decode tx.GasPrice - %v", err)) } } } - tx.tx = trans + if contractCreation { + tx.tx = types.NewContractCreation(nonce, amount, gasLimit, gasPrice, data) + } else { + tx.tx = types.NewTransaction(nonce, to, amount, gasLimit, gasPrice, data) + } return nil } From c14f0a44712891286b291761fb2d99bd90646234 Mon Sep 17 00:00:00 2001 From: Jeffrey Wilcke <geffobscura@gmail.com> Date: Tue, 30 Jun 2015 13:46:37 +0200 Subject: [PATCH 125/156] core: added checkpoint for last block * Add a checkpoint every X blocks * Removed queued write --- core/chain_manager.go | 97 ++++++++++++++++---------------------- core/chain_manager_test.go | 3 +- 2 files changed, 42 insertions(+), 58 deletions(-) diff --git a/core/chain_manager.go b/core/chain_manager.go index 808ccd201f..c89aae3f08 100644 --- a/core/chain_manager.go +++ b/core/chain_manager.go @@ -11,10 +11,8 @@ import ( "time" "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/compression/rle" "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/event" "github.com/ethereum/go-ethereum/logger" "github.com/ethereum/go-ethereum/logger/glog" @@ -23,7 +21,6 @@ import ( "github.com/ethereum/go-ethereum/pow" "github.com/ethereum/go-ethereum/rlp" "github.com/hashicorp/golang-lru" - "github.com/syndtr/goleveldb/leveldb" ) var ( @@ -40,6 +37,7 @@ const ( blockCacheLimit = 256 maxFutureBlocks = 256 maxTimeFutureBlocks = 30 + checkpointLimit = 200 ) // CalcDifficulty is the difficulty adjustment algorithm. It returns @@ -101,6 +99,7 @@ type ChainManager struct { chainmu sync.RWMutex tsmu sync.RWMutex + checkpoint int // checkpoint counts towards the new checkpoint td *big.Int currentBlock *types.Block lastBlockHash common.Hash @@ -109,9 +108,8 @@ type ChainManager struct { transState *state.StateDB txState *state.ManagedState - cache *lru.Cache // cache is the LRU caching - futureBlocks *lru.Cache // future blocks are blocks added for later processing - pendingBlocks *lru.Cache // pending blocks contain blocks not yet written to the db + cache *lru.Cache // cache is the LRU caching + futureBlocks *lru.Cache // future blocks are blocks added for later processing quit chan struct{} // procInterrupt must be atomically called @@ -240,15 +238,40 @@ func (self *ChainManager) setTransState(statedb *state.StateDB) { self.transState = statedb } +func (bc *ChainManager) recover() bool { + data, _ := bc.blockDb.Get([]byte("checkpoint")) + if len(data) != 0 { + block := bc.GetBlock(common.BytesToHash(data)) + if block != nil { + err := bc.blockDb.Put([]byte("LastBlock"), block.Hash().Bytes()) + if err != nil { + glog.Fatalln("db write err:", err) + } + + bc.currentBlock = block + bc.lastBlockHash = block.Hash() + return true + } + } + return false +} + func (bc *ChainManager) setLastState() { data, _ := bc.blockDb.Get([]byte("LastBlock")) if len(data) != 0 { block := bc.GetBlock(common.BytesToHash(data)) if block != nil { + bc.blockDb.Put([]byte("checkpoint"), block.Hash().Bytes()) + bc.currentBlock = block bc.lastBlockHash = block.Hash() } else { - glog.Fatalf("Fatal. LastBlock not found. Please run removedb and resync") + glog.Infof("LastBlock (%x) not found. Recovering...\n", data) + if bc.recover() { + glog.Infof("Recover successful") + } else { + glog.Fatalf("Recover failed. Please report") + } } } else { bc.Reset() @@ -357,6 +380,16 @@ func (bc *ChainManager) insert(block *types.Block) { glog.Fatal("db write fail:", err) } + bc.checkpoint++ + if bc.checkpoint > checkpointLimit { + err = bc.blockDb.Put([]byte("checkpoint"), block.Hash().Bytes()) + if err != nil { + glog.Fatal("db write fail:", err) + } + + bc.checkpoint = 0 + } + bc.currentBlock = block bc.lastBlockHash = block.Hash() } @@ -387,12 +420,6 @@ func (bc *ChainManager) HasBlock(hash common.Hash) bool { return true } - if bc.pendingBlocks != nil { - if _, exist := bc.pendingBlocks.Get(hash); exist { - return true - } - } - data, _ := bc.blockDb.Get(append(blockHashPre, hash[:]...)) return len(data) != 0 } @@ -423,12 +450,6 @@ func (self *ChainManager) GetBlock(hash common.Hash) *types.Block { return block.(*types.Block) } - if self.pendingBlocks != nil { - if block, _ := self.pendingBlocks.Get(hash); block != nil { - return block.(*types.Block) - } - } - data, _ := self.blockDb.Get(append(blockHashPre, hash[:]...)) if len(data) == 0 { return nil @@ -519,31 +540,6 @@ func (self *ChainManager) procFutureBlocks() { } } -func (self *ChainManager) enqueueForWrite(block *types.Block) { - self.pendingBlocks.Add(block.Hash(), block) -} - -func (self *ChainManager) flushQueuedBlocks() { - db, batchWrite := self.blockDb.(*ethdb.LDBDatabase) - batch := new(leveldb.Batch) - for _, key := range self.pendingBlocks.Keys() { - b, _ := self.pendingBlocks.Get(key) - block := b.(*types.Block) - - enc, _ := rlp.EncodeToBytes((*types.StorageBlock)(block)) - key := append(blockHashPre, block.Hash().Bytes()...) - if batchWrite { - batch.Put(key, rle.Compress(enc)) - } else { - self.blockDb.Put(key, enc) - } - } - - if batchWrite { - db.LDB().Write(batch, nil) - } -} - type writeStatus byte const ( @@ -586,15 +582,7 @@ func (self *ChainManager) WriteBlock(block *types.Block, queued bool) (status wr status = sideStatTy } - if queued { - // Write block to database. Eventually we'll have to improve on this and throw away blocks that are - // not in the canonical chain. - self.mu.Lock() - self.enqueueForWrite(block) - self.mu.Unlock() - } else { - self.write(block) - } + self.write(block) // Delete from future blocks self.futureBlocks.Remove(block.Hash()) @@ -610,8 +598,6 @@ func (self *ChainManager) InsertChain(chain types.Blocks) (int, error) { self.chainmu.Lock() defer self.chainmu.Unlock() - self.pendingBlocks, _ = lru.New(len(chain)) - // A queued approach to delivering events. This is generally // faster than direct delivery and requires much less mutex // acquiring. @@ -629,7 +615,6 @@ func (self *ChainManager) InsertChain(chain types.Blocks) (int, error) { // Start the parallel nonce verifier. go verifyNonces(self.pow, chain, nonceQuit, nonceDone) defer close(nonceQuit) - defer self.flushQueuedBlocks() txcount := 0 for i, block := range chain { diff --git a/core/chain_manager_test.go b/core/chain_manager_test.go index 8b3ea9e85a..6869bc746d 100644 --- a/core/chain_manager_test.go +++ b/core/chain_manager_test.go @@ -109,8 +109,7 @@ func testChain(chainB types.Blocks, bman *BlockProcessor) (*big.Int, error) { bman.bc.mu.Lock() { - bman.bc.enqueueForWrite(block) - //bman.bc.write(block) + bman.bc.write(block) } bman.bc.mu.Unlock() } From a748afce0322af35d6031d76bf38afa1f974296a Mon Sep 17 00:00:00 2001 From: Jeffrey Wilcke <geffobscura@gmail.com> Date: Tue, 30 Jun 2015 15:42:20 +0200 Subject: [PATCH 126/156] core: txpool listen for ChainHeadEvent instead of ChainEvent Changed the transaction pool to listen for ChainHeadEvent when resetting the state instead of ChainEvent. It makes very little sense to burst through transactions while we are catching up (e.g., have more than one block to process) --- core/transaction_pool.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/transaction_pool.go b/core/transaction_pool.go index 6a7012c658..ac9027755e 100644 --- a/core/transaction_pool.go +++ b/core/transaction_pool.go @@ -65,7 +65,7 @@ func NewTxPool(eventMux *event.TypeMux, currentStateFn stateFn, gasLimitFn func( gasLimit: gasLimitFn, minGasPrice: new(big.Int), pendingState: state.ManageState(currentStateFn()), - events: eventMux.Subscribe(ChainEvent{}, GasPriceChanged{}), + events: eventMux.Subscribe(ChainHeadEvent{}, GasPriceChanged{}), } go pool.eventLoop() @@ -80,7 +80,7 @@ func (pool *TxPool) eventLoop() { pool.mu.Lock() switch ev := ev.(type) { - case ChainEvent: + case ChainHeadEvent: pool.resetState() case GasPriceChanged: pool.minGasPrice = ev.Price From 393d675690923207746ac800568faacae723f251 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= <peterke@gmail.com> Date: Fri, 26 Jun 2015 16:54:27 +0300 Subject: [PATCH 127/156] cmd/geth, cmd/utils, eth: advertise both eth/60 and eth/61 --- cmd/geth/main.go | 3 +-- cmd/utils/flags.go | 6 ----- eth/backend.go | 59 ++++++++++++++++++++++++++-------------------- eth/handler.go | 30 +++++++++++++---------- eth/protocol.go | 11 ++++++--- 5 files changed, 61 insertions(+), 48 deletions(-) diff --git a/cmd/geth/main.go b/cmd/geth/main.go index c46343a606..a7b7692702 100644 --- a/cmd/geth/main.go +++ b/cmd/geth/main.go @@ -261,7 +261,6 @@ JavaScript API. See https://github.com/ethereum/go-ethereum/wiki/Javascipt-Conso utils.ExecFlag, utils.WhisperEnabledFlag, utils.VMDebugFlag, - utils.ProtocolVersionFlag, utils.NetworkIdFlag, utils.RPCCORSDomainFlag, utils.VerbosityFlag, @@ -598,7 +597,7 @@ func version(c *cli.Context) { if gitCommit != "" { fmt.Println("Git Commit:", gitCommit) } - fmt.Println("Protocol Version:", c.GlobalInt(utils.ProtocolVersionFlag.Name)) + fmt.Println("Protocol Versions:", eth.ProtocolVersions) fmt.Println("Network Id:", c.GlobalInt(utils.NetworkIdFlag.Name)) fmt.Println("Go Version:", runtime.Version()) fmt.Println("OS:", runtime.GOOS) diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index 0d59980ec2..6f319eb407 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -82,11 +82,6 @@ var ( Usage: "Data directory to be used", Value: DirectoryString{common.DefaultDataDir()}, } - ProtocolVersionFlag = cli.IntFlag{ - Name: "protocolversion", - Usage: "ETH protocol version (integer)", - Value: eth.ProtocolVersion, - } NetworkIdFlag = cli.IntFlag{ Name: "networkid", Usage: "Network Id (integer)", @@ -359,7 +354,6 @@ func MakeEthConfig(clientID, version string, ctx *cli.Context) *eth.Config { return ð.Config{ Name: common.MakeName(clientID, version), DataDir: ctx.GlobalString(DataDirFlag.Name), - ProtocolVersion: ctx.GlobalInt(ProtocolVersionFlag.Name), GenesisNonce: ctx.GlobalInt(GenesisNonceFlag.Name), BlockChainVersion: ctx.GlobalInt(BlockchainVersionFlag.Name), SkipBcVersionCheck: false, diff --git a/eth/backend.go b/eth/backend.go index 4644b8a935..23d76dfd1f 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -57,10 +57,9 @@ var ( ) type Config struct { - Name string - ProtocolVersion int - NetworkId int - GenesisNonce int + Name string + NetworkId int + GenesisNonce int BlockChainVersion int SkipBcVersionCheck bool // e.g. blockchain export @@ -226,7 +225,6 @@ type Ethereum struct { autodagquit chan bool etherbase common.Address clientVersion string - ethVersionId int netVersionId int shhVersionId int } @@ -291,14 +289,20 @@ func New(config *Config) (*Ethereum, error) { nodeDb := filepath.Join(config.DataDir, "nodes") // Perform database sanity checks - d, _ := blockDb.Get([]byte("ProtocolVersion")) - protov := int(common.NewValue(d).Uint()) - if protov != config.ProtocolVersion && protov != 0 { - path := filepath.Join(config.DataDir, "blockchain") - return nil, fmt.Errorf("Database version mismatch. Protocol(%d / %d). `rm -rf %s`", protov, config.ProtocolVersion, path) - } - saveProtocolVersion(blockDb, config.ProtocolVersion) - glog.V(logger.Info).Infof("Protocol Version: %v, Network Id: %v", config.ProtocolVersion, config.NetworkId) + /* + // The databases were previously tied to protocol versions. Currently we + // are moving away from this decision as approaching Frontier. The below + // check was left in for now but should eventually be just dropped. + + d, _ := blockDb.Get([]byte("ProtocolVersion")) + protov := int(common.NewValue(d).Uint()) + if protov != config.ProtocolVersion && protov != 0 { + path := filepath.Join(config.DataDir, "blockchain") + return nil, fmt.Errorf("Database version mismatch. Protocol(%d / %d). `rm -rf %s`", protov, config.ProtocolVersion, path) + } + saveProtocolVersion(blockDb, config.ProtocolVersion) + */ + glog.V(logger.Info).Infof("Protocol Versions: %v, Network Id: %v", ProtocolVersions, config.NetworkId) if !config.SkipBcVersionCheck { b, _ := blockDb.Get([]byte("BlockchainVersion")) @@ -321,7 +325,6 @@ func New(config *Config) (*Ethereum, error) { DataDir: config.DataDir, etherbase: common.HexToAddress(config.Etherbase), clientVersion: config.Name, // TODO should separate from Name - ethVersionId: config.ProtocolVersion, netVersionId: config.NetworkId, NatSpec: config.NatSpec, MinerThreads: config.MinerThreads, @@ -345,7 +348,7 @@ func New(config *Config) (*Ethereum, error) { eth.blockProcessor = core.NewBlockProcessor(stateDb, extraDb, eth.pow, eth.chainManager, eth.EventMux()) eth.chainManager.SetProcessor(eth.blockProcessor) - eth.protocolManager = NewProtocolManager(config.ProtocolVersion, config.NetworkId, eth.eventMux, eth.txPool, eth.pow, eth.chainManager) + eth.protocolManager = NewProtocolManager(config.NetworkId, eth.eventMux, eth.txPool, eth.pow, eth.chainManager) eth.miner = miner.New(eth, eth.EventMux(), eth.pow) eth.miner.SetGasPrice(config.GasPrice) @@ -358,7 +361,7 @@ func New(config *Config) (*Ethereum, error) { if err != nil { return nil, err } - protocols := []p2p.Protocol{eth.protocolManager.SubProtocol} + protocols := append([]p2p.Protocol{}, eth.protocolManager.SubProtocols...) if config.Shh { protocols = append(protocols, eth.whisper.Protocol()) } @@ -495,7 +498,7 @@ func (s *Ethereum) PeerCount() int { return s.net.PeerCoun func (s *Ethereum) Peers() []*p2p.Peer { return s.net.Peers() } func (s *Ethereum) MaxPeers() int { return s.net.MaxPeers } func (s *Ethereum) ClientVersion() string { return s.clientVersion } -func (s *Ethereum) EthVersion() int { return s.ethVersionId } +func (s *Ethereum) EthVersion() int { return int(s.protocolManager.SubProtocols[0].Version) } func (s *Ethereum) NetVersion() int { return s.netVersionId } func (s *Ethereum) ShhVersion() int { return s.shhVersionId } func (s *Ethereum) Downloader() *downloader.Downloader { return s.protocolManager.downloader } @@ -504,7 +507,7 @@ func (s *Ethereum) Downloader() *downloader.Downloader { return s.protocolMana func (s *Ethereum) Start() error { jsonlogger.LogJson(&logger.LogStarting{ ClientString: s.net.Name, - ProtocolVersion: ProtocolVersion, + ProtocolVersion: s.EthVersion(), }) err := s.net.Start() if err != nil { @@ -560,7 +563,7 @@ done: func (s *Ethereum) StartForTest() { jsonlogger.LogJson(&logger.LogStarting{ ClientString: s.net.Name, - ProtocolVersion: ProtocolVersion, + ProtocolVersion: s.EthVersion(), }) } @@ -667,14 +670,20 @@ func (self *Ethereum) StopAutoDAG() { glog.V(logger.Info).Infof("Automatic pregeneration of ethash DAG OFF (ethash dir: %s)", ethash.DefaultDir) } -func saveProtocolVersion(db common.Database, protov int) { - d, _ := db.Get([]byte("ProtocolVersion")) - protocolVersion := common.NewValue(d).Uint() +/* + // The databases were previously tied to protocol versions. Currently we + // are moving away from this decision as approaching Frontier. The below + // code was left in for now but should eventually be just dropped. - if protocolVersion == 0 { - db.Put([]byte("ProtocolVersion"), common.NewValue(protov).Bytes()) + func saveProtocolVersion(db common.Database, protov int) { + d, _ := db.Get([]byte("ProtocolVersion")) + protocolVersion := common.NewValue(d).Uint() + + if protocolVersion == 0 { + db.Put([]byte("ProtocolVersion"), common.NewValue(protov).Bytes()) + } } -} +*/ func saveBlockchainVersion(db common.Database, bcVersion int) { d, _ := db.Get([]byte("BlockchainVersion")) diff --git a/eth/handler.go b/eth/handler.go index 278a2bec25..44d2974617 100644 --- a/eth/handler.go +++ b/eth/handler.go @@ -49,7 +49,7 @@ type ProtocolManager struct { fetcher *fetcher.Fetcher peers *peerSet - SubProtocol p2p.Protocol + SubProtocols []p2p.Protocol eventMux *event.TypeMux txSub event.Subscription @@ -68,8 +68,8 @@ type ProtocolManager struct { // NewProtocolManager returns a new ethereum sub protocol manager. The Ethereum sub protocol manages peers capable // with the ethereum network. -func NewProtocolManager(protocolVersion, networkId int, mux *event.TypeMux, txpool txPool, pow pow.PoW, chainman *core.ChainManager) *ProtocolManager { - // Create the protocol manager and initialize peer handlers +func NewProtocolManager(networkId int, mux *event.TypeMux, txpool txPool, pow pow.PoW, chainman *core.ChainManager) *ProtocolManager { + // Create the protocol manager with the base fields manager := &ProtocolManager{ eventMux: mux, txpool: txpool, @@ -79,15 +79,21 @@ func NewProtocolManager(protocolVersion, networkId int, mux *event.TypeMux, txpo txsyncCh: make(chan *txsync), quitSync: make(chan struct{}), } - manager.SubProtocol = p2p.Protocol{ - Name: "eth", - Version: uint(protocolVersion), - Length: ProtocolLength, - Run: func(p *p2p.Peer, rw p2p.MsgReadWriter) error { - peer := manager.newPeer(protocolVersion, networkId, p, rw) - manager.newPeerCh <- peer - return manager.handle(peer) - }, + // Initiate a sub-protocol for every implemented version we can handle + manager.SubProtocols = make([]p2p.Protocol, len(ProtocolVersions)) + for i := 0; i < len(manager.SubProtocols); i++ { + version := ProtocolVersions[i] + + manager.SubProtocols[i] = p2p.Protocol{ + Name: "eth", + Version: version, + Length: ProtocolLengths[i], + Run: func(p *p2p.Peer, rw p2p.MsgReadWriter) error { + peer := manager.newPeer(int(version), networkId, p, rw) + manager.newPeerCh <- peer + return manager.handle(peer) + }, + } } // Construct the different synchronisation mechanisms manager.downloader = downloader.New(manager.eventMux, manager.chainman.HasBlock, manager.chainman.GetBlock, manager.chainman.InsertChain, manager.removePeer) diff --git a/eth/protocol.go b/eth/protocol.go index 57805d9bd2..56409721b3 100644 --- a/eth/protocol.go +++ b/eth/protocol.go @@ -7,11 +7,15 @@ import ( "github.com/ethereum/go-ethereum/core/types" ) +// Supported versions of the eth protocol (first is primary). +var ProtocolVersions = []uint{61, 60} + +// Number of implemented message corresponding to different protocol versions. +var ProtocolLengths = []uint64{9, 8} + const ( - ProtocolVersion = 60 NetworkId = 0 - ProtocolLength = uint64(8) - ProtocolMaxMsgSize = 10 * 1024 * 1024 + ProtocolMaxMsgSize = 10 * 1024 * 1024 // Maximum cap on the size of a protocol message ) // eth protocol message codes @@ -24,6 +28,7 @@ const ( GetBlocksMsg BlocksMsg NewBlockMsg + BlockHashesFromNumbers ) type errCode int From 2c8ed76e01161d9fe4e69064404cd888b4e327f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= <peterke@gmail.com> Date: Fri, 26 Jun 2015 20:42:27 +0300 Subject: [PATCH 128/156] eth: start cleaning up old protocol implementation, add metrics --- eth/handler.go | 54 ++++++++++++++++++++++++++++-------------- eth/metrics.go | 26 ++++++++++++++++++++ eth/peer.go | 64 +++++++++++++++++++++++++++++++++----------------- 3 files changed, 105 insertions(+), 39 deletions(-) create mode 100644 eth/metrics.go diff --git a/eth/handler.go b/eth/handler.go index 44d2974617..d251183372 100644 --- a/eth/handler.go +++ b/eth/handler.go @@ -163,26 +163,28 @@ func (pm *ProtocolManager) newPeer(pv, nv int, p *p2p.Peer, rw p2p.MsgReadWriter return newPeer(pv, nv, genesis, current, td, p, rw) } +// handle is the callback invoked to manage the life cycle of an eth peer. When +// this function terminates, the peer is disconnected. func (pm *ProtocolManager) handle(p *peer) error { - // Execute the Ethereum handshake. + glog.V(logger.Debug).Infof("%v: peer connected", p) + + // Execute the Ethereum handshake if err := p.handleStatus(); err != nil { + glog.V(logger.Debug).Infof("%v: handshake failed: %v", p, err) return err } - - // Register the peer locally. - glog.V(logger.Detail).Infoln("Adding peer", p.id) + // Register the peer locally + glog.V(logger.Detail).Infof("%v: adding peer", p) if err := pm.peers.Register(p); err != nil { - glog.V(logger.Error).Infoln("Addition failed:", err) + glog.V(logger.Error).Infof("%v: addition failed: %v", p, err) return err } defer pm.removePeer(p.id) - // Register the peer in the downloader. If the downloader - // considers it banned, we disconnect. + // Register the peer in the downloader. If the downloader considers it banned, we disconnect if err := pm.downloader.RegisterPeer(p.id, p.Head(), p.requestHashes, p.requestBlocks); err != nil { return err } - // Propagate existing transactions. new transactions appearing // after this will be sent via broadcasts. pm.syncTransactions(p) @@ -190,13 +192,17 @@ func (pm *ProtocolManager) handle(p *peer) error { // main loop. handle incoming messages. for { if err := pm.handleMsg(p); err != nil { + glog.V(logger.Debug).Infof("%v: message handling failed: %v", p, err) return err } } return nil } +// handleMsg is invoked whenever an inbound message is received from a remote +// peer. The remote connection is torn down upon returning any error. func (pm *ProtocolManager) handleMsg(p *peer) error { + // Read the next message from the remote peer, and ensure it's fully consumed msg, err := p.rw.ReadMsg() if err != nil { return err @@ -204,23 +210,25 @@ func (pm *ProtocolManager) handleMsg(p *peer) error { if msg.Size > ProtocolMaxMsgSize { return errResp(ErrMsgTooLarge, "%v > %v", msg.Size, ProtocolMaxMsgSize) } - // make sure that the payload has been fully consumed defer msg.Discard() + // Handle the message depending on its contents switch msg.Code { case StatusMsg: return errResp(ErrExtraStatusMsg, "uncontrolled status message") case TxMsg: - // TODO: rework using lazy RLP stream + // Transactions arrived, parse all of them and deliver to the pool var txs []*types.Transaction if err := msg.Decode(&txs); err != nil { return errResp(ErrDecode, "msg %v: %v", msg, err) } + propTxnInPacketsMeter.Mark(1) for i, tx := range txs { if tx == nil { return errResp(ErrDecode, "transaction %d is nil", i) } + propTxnInTrafficMeter.Mark(tx.Size().Int64()) jsonlogger.LogJson(&logger.EthTxReceived{ TxHash: tx.Hash().Hex(), RemoteId: p.ID().String(), @@ -250,12 +258,17 @@ func (pm *ProtocolManager) handleMsg(p *peer) error { return p.sendBlockHashes(hashes) case BlockHashesMsg: + // A batch of hashes arrived to one of our previous requests msgStream := rlp.NewStream(msg.Payload, uint64(msg.Size)) + reqHashInPacketsMeter.Mark(1) var hashes []common.Hash if err := msgStream.Decode(&hashes); err != nil { break } + reqHashInTrafficMeter.Mark(int64(32 * len(hashes))) + + // Deliver them all to the downloader for queuing err := pm.downloader.DeliverHashes(p.id, hashes) if err != nil { glog.V(logger.Debug).Infoln(err) @@ -299,13 +312,14 @@ func (pm *ProtocolManager) handleMsg(p *peer) error { } list = list[:len(list)-2] + "]" - glog.Infof("Peer %s: no blocks found for requested hashes %s", p.id, list) + glog.Infof("%v: no blocks found for requested hashes %s", p, list) } return p.sendBlocks(blocks) case BlocksMsg: // Decode the arrived block message msgStream := rlp.NewStream(msg.Payload, uint64(msg.Size)) + reqBlockInPacketsMeter.Mark(1) var blocks []*types.Block if err := msgStream.Decode(&blocks); err != nil { @@ -313,8 +327,9 @@ func (pm *ProtocolManager) handleMsg(p *peer) error { blocks = nil } // Update the receive timestamp of each block - for i := 0; i < len(blocks); i++ { - blocks[i].ReceivedAt = msg.ReceivedAt + for _, block := range blocks { + reqBlockInTrafficMeter.Mark(block.Size().Int64()) + block.ReceivedAt = msg.ReceivedAt } // Filter out any explicitly requested blocks, deliver the rest to the downloader if blocks := pm.fetcher.Filter(blocks); len(blocks) > 0 { @@ -329,6 +344,9 @@ func (pm *ProtocolManager) handleMsg(p *peer) error { if err := msgStream.Decode(&hashes); err != nil { break } + propHashInPacketsMeter.Mark(1) + propHashInTrafficMeter.Mark(int64(32 * len(hashes))) + // Mark the hashes as present at the remote node for _, hash := range hashes { p.blockHashes.Add(hash) @@ -351,6 +369,9 @@ func (pm *ProtocolManager) handleMsg(p *peer) error { if err := msg.Decode(&request); err != nil { return errResp(ErrDecode, "%v: %v", msg, err) } + propBlockInPacketsMeter.Mark(1) + propBlockInTrafficMeter.Mark(request.Block.Size().Int64()) + if err := request.Block.ValidateFields(); err != nil { return errResp(ErrDecode, "block validation %v: %v", msg, err) } @@ -404,15 +425,14 @@ func (pm *ProtocolManager) BroadcastBlock(block *types.Block, propagate bool) { } } -// BroadcastTx will propagate the block to its connected peers. It will sort -// out which peers do not contain the block in their block set and will do a -// sqrt(peers) to determine the amount of peers we broadcast to. +// BroadcastTx will propagate a transaction to all peers which are not known to +// already have the given transaction. func (pm *ProtocolManager) BroadcastTx(hash common.Hash, tx *types.Transaction) { // Broadcast transaction to a batch of peers not knowing about it peers := pm.peers.PeersWithoutTx(hash) //FIXME include this again: peers = peers[:int(math.Sqrt(float64(len(peers))))] for _, peer := range peers { - peer.sendTransaction(tx) + peer.sendTransactions(types.Transactions{tx}) } glog.V(logger.Detail).Infoln("broadcast tx to", len(peers), "peers") } diff --git a/eth/metrics.go b/eth/metrics.go new file mode 100644 index 0000000000..e056233f42 --- /dev/null +++ b/eth/metrics.go @@ -0,0 +1,26 @@ +package eth + +import "github.com/rcrowley/go-metrics" + +var ( + propTxnInPacketsMeter = metrics.GetOrRegisterMeter("eth/prop/txns/in/packets", metrics.DefaultRegistry) + propTxnInTrafficMeter = metrics.GetOrRegisterMeter("eth/prop/txns/in/traffic", metrics.DefaultRegistry) + propTxnOutPacketsMeter = metrics.GetOrRegisterMeter("eth/prop/txns/out/packets", metrics.DefaultRegistry) + propTxnOutTrafficMeter = metrics.GetOrRegisterMeter("eth/prop/txns/out/traffic", metrics.DefaultRegistry) + propHashInPacketsMeter = metrics.GetOrRegisterMeter("eth/prop/hashes/in/packets", metrics.DefaultRegistry) + propHashInTrafficMeter = metrics.GetOrRegisterMeter("eth/prop/hashes/in/traffic", metrics.DefaultRegistry) + propHashOutPacketsMeter = metrics.GetOrRegisterMeter("eth/prop/hashes/out/packets", metrics.DefaultRegistry) + propHashOutTrafficMeter = metrics.GetOrRegisterMeter("eth/prop/hashes/out/traffic", metrics.DefaultRegistry) + propBlockInPacketsMeter = metrics.GetOrRegisterMeter("eth/prop/blocks/in/packets", metrics.DefaultRegistry) + propBlockInTrafficMeter = metrics.GetOrRegisterMeter("eth/prop/blocks/in/traffic", metrics.DefaultRegistry) + propBlockOutPacketsMeter = metrics.GetOrRegisterMeter("eth/prop/blocks/out/packets", metrics.DefaultRegistry) + propBlockOutTrafficMeter = metrics.GetOrRegisterMeter("eth/prop/blocks/out/traffic", metrics.DefaultRegistry) + reqHashInPacketsMeter = metrics.GetOrRegisterMeter("eth/req/hashes/in/packets", metrics.DefaultRegistry) + reqHashInTrafficMeter = metrics.GetOrRegisterMeter("eth/req/hashes/in/traffic", metrics.DefaultRegistry) + reqHashOutPacketsMeter = metrics.GetOrRegisterMeter("eth/req/hashes/out/packets", metrics.DefaultRegistry) + reqHashOutTrafficMeter = metrics.GetOrRegisterMeter("eth/req/hashes/out/traffic", metrics.DefaultRegistry) + reqBlockInPacketsMeter = metrics.GetOrRegisterMeter("eth/req/blocks/in/packets", metrics.DefaultRegistry) + reqBlockInTrafficMeter = metrics.GetOrRegisterMeter("eth/req/blocks/in/traffic", metrics.DefaultRegistry) + reqBlockOutPacketsMeter = metrics.GetOrRegisterMeter("eth/req/blocks/out/packets", metrics.DefaultRegistry) + reqBlockOutTrafficMeter = metrics.GetOrRegisterMeter("eth/req/blocks/out/traffic", metrics.DefaultRegistry) +) diff --git a/eth/peer.go b/eth/peer.go index c7045282b0..b0002ce81e 100644 --- a/eth/peer.go +++ b/eth/peer.go @@ -38,7 +38,8 @@ type peer struct { rw p2p.MsgReadWriter - protv, netid int + version int // Protocol version negotiated + network int // Network ID being on id string @@ -53,7 +54,7 @@ type peer struct { blockHashes *set.Set } -func newPeer(protv, netid int, genesis, head common.Hash, td *big.Int, p *p2p.Peer, rw p2p.MsgReadWriter) *peer { +func newPeer(version, network int, genesis, head common.Hash, td *big.Int, p *p2p.Peer, rw p2p.MsgReadWriter) *peer { id := p.ID() return &peer{ @@ -62,8 +63,8 @@ func newPeer(protv, netid int, genesis, head common.Hash, td *big.Int, p *p2p.Pe genesis: genesis, ourHash: head, ourTd: td, - protv: protv, - netid: netid, + version: version, + network: network, id: fmt.Sprintf("%x", id[:8]), txHashes: set.New(), blockHashes: set.New(), @@ -104,46 +105,58 @@ func (p *peer) SetTd(td *big.Int) { } // sendTransactions sends transactions to the peer and includes the hashes -// in it's tx hash set for future reference. The tx hash will allow the -// manager to check whether the peer has already received this particular -// transaction +// in its transaction hash set for future reference. func (p *peer) sendTransactions(txs types.Transactions) error { + propTxnOutPacketsMeter.Mark(1) for _, tx := range txs { + propTxnOutTrafficMeter.Mark(tx.Size().Int64()) p.txHashes.Add(tx.Hash()) } - return p2p.Send(p.rw, TxMsg, txs) } +// sendBlockHashes sends a batch of known hashes to the remote peer. func (p *peer) sendBlockHashes(hashes []common.Hash) error { + reqHashOutPacketsMeter.Mark(1) + reqHashOutTrafficMeter.Mark(int64(32 * len(hashes))) + return p2p.Send(p.rw, BlockHashesMsg, hashes) } +// sendBlocks sends a batch of blocks to the remote peer. func (p *peer) sendBlocks(blocks []*types.Block) error { + reqBlockOutPacketsMeter.Mark(1) + for _, block := range blocks { + reqBlockOutTrafficMeter.Mark(block.Size().Int64()) + } return p2p.Send(p.rw, BlocksMsg, blocks) } +// sendNewBlockHashes announces the availability of a number of blocks through +// a hash notification. func (p *peer) sendNewBlockHashes(hashes []common.Hash) error { + propHashOutPacketsMeter.Mark(1) + propHashOutTrafficMeter.Mark(int64(32 * len(hashes))) + for _, hash := range hashes { p.blockHashes.Add(hash) } return p2p.Send(p.rw, NewBlockHashesMsg, hashes) } +// sendNewBlock propagates an entire block to a remote peer. func (p *peer) sendNewBlock(block *types.Block) error { - p.blockHashes.Add(block.Hash()) + propBlockOutPacketsMeter.Mark(1) + propBlockOutTrafficMeter.Mark(block.Size().Int64()) + p.blockHashes.Add(block.Hash()) return p2p.Send(p.rw, NewBlockMsg, []interface{}{block, block.Td}) } -func (p *peer) sendTransaction(tx *types.Transaction) error { - p.txHashes.Add(tx.Hash()) - - return p2p.Send(p.rw, TxMsg, []*types.Transaction{tx}) -} - +// requestHashes fetches a batch of hashes from a peer, starting at from, going +// towards the genesis block. func (p *peer) requestHashes(from common.Hash) error { - glog.V(logger.Debug).Infof("[%s] fetching hashes (%d) %x...\n", p.id, downloader.MaxHashFetch, from[:4]) + glog.V(logger.Debug).Infof("Peer [%s] fetching hashes (%d) %x...\n", p.id, downloader.MaxHashFetch, from[:4]) return p2p.Send(p.rw, GetBlockHashesMsg, getBlockHashesMsgData{from, uint64(downloader.MaxHashFetch)}) } @@ -156,8 +169,8 @@ func (p *peer) handleStatus() error { errc := make(chan error, 1) go func() { errc <- p2p.Send(p.rw, StatusMsg, &statusMsgData{ - ProtocolVersion: uint32(p.protv), - NetworkId: uint32(p.netid), + ProtocolVersion: uint32(p.version), + NetworkId: uint32(p.network), TD: p.ourTd, CurrentBlock: p.ourHash, GenesisBlock: p.genesis, @@ -185,12 +198,12 @@ func (p *peer) handleStatus() error { return errResp(ErrGenesisBlockMismatch, "%x (!= %x)", status.GenesisBlock, p.genesis) } - if int(status.NetworkId) != p.netid { - return errResp(ErrNetworkIdMismatch, "%d (!= %d)", status.NetworkId, p.netid) + if int(status.NetworkId) != p.network { + return errResp(ErrNetworkIdMismatch, "%d (!= %d)", status.NetworkId, p.network) } - if int(status.ProtocolVersion) != p.protv { - return errResp(ErrProtocolVersionMismatch, "%d (!= %d)", status.ProtocolVersion, p.protv) + if int(status.ProtocolVersion) != p.version { + return errResp(ErrProtocolVersionMismatch, "%d (!= %d)", status.ProtocolVersion, p.version) } // Set the total difficulty of the peer p.td = status.TD @@ -200,6 +213,13 @@ func (p *peer) handleStatus() error { return <-errc } +// String implements fmt.Stringer. +func (p *peer) String() string { + return fmt.Sprintf("Peer %s [%s]", p.id, + fmt.Sprintf("eth/%2d", p.version), + ) +} + // peerSet represents the collection of active peers currently participating in // the Ethereum sub-protocol. type peerSet struct { From 6fc85f1ec221f976399af071a75ad7264b0ee905 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= <peterke@gmail.com> Date: Mon, 29 Jun 2015 12:44:00 +0300 Subject: [PATCH 129/156] eth: clean up peer struct a bit, fix double txn bcast --- eth/handler.go | 29 ++++++++------ eth/peer.go | 95 +++++++++++++++++++++++--------------------- eth/protocol_test.go | 6 +-- eth/sync.go | 10 +---- 4 files changed, 69 insertions(+), 71 deletions(-) diff --git a/eth/handler.go b/eth/handler.go index d251183372..d0456446d0 100644 --- a/eth/handler.go +++ b/eth/handler.go @@ -158,9 +158,7 @@ func (pm *ProtocolManager) Stop() { } func (pm *ProtocolManager) newPeer(pv, nv int, p *p2p.Peer, rw p2p.MsgReadWriter) *peer { - td, current, genesis := pm.chainman.Status() - - return newPeer(pv, nv, genesis, current, td, p, rw) + return newPeer(pv, nv, p, rw) } // handle is the callback invoked to manage the life cycle of an eth peer. When @@ -169,7 +167,8 @@ func (pm *ProtocolManager) handle(p *peer) error { glog.V(logger.Debug).Infof("%v: peer connected", p) // Execute the Ethereum handshake - if err := p.handleStatus(); err != nil { + td, head, genesis := pm.chainman.Status() + if err := p.Handshake(td, head, genesis); err != nil { glog.V(logger.Debug).Infof("%v: handshake failed: %v", p, err) return err } @@ -182,7 +181,7 @@ func (pm *ProtocolManager) handle(p *peer) error { defer pm.removePeer(p.id) // Register the peer in the downloader. If the downloader considers it banned, we disconnect - if err := pm.downloader.RegisterPeer(p.id, p.Head(), p.requestHashes, p.requestBlocks); err != nil { + if err := pm.downloader.RegisterPeer(p.id, p.Head(), p.RequestHashes, p.RequestBlocks); err != nil { return err } // Propagate existing transactions. new transactions appearing @@ -225,9 +224,13 @@ func (pm *ProtocolManager) handleMsg(p *peer) error { } propTxnInPacketsMeter.Mark(1) for i, tx := range txs { + // Validate and mark the remote transaction if tx == nil { return errResp(ErrDecode, "transaction %d is nil", i) } + p.MarkTransaction(tx.Hash()) + + // Log it's arrival for later analysis propTxnInTrafficMeter.Mark(tx.Size().Int64()) jsonlogger.LogJson(&logger.EthTxReceived{ TxHash: tx.Hash().Hex(), @@ -255,7 +258,7 @@ func (pm *ProtocolManager) handleMsg(p *peer) error { } // returns either requested hashes or nothing (i.e. not found) - return p.sendBlockHashes(hashes) + return p.SendBlockHashes(hashes) case BlockHashesMsg: // A batch of hashes arrived to one of our previous requests @@ -314,7 +317,7 @@ func (pm *ProtocolManager) handleMsg(p *peer) error { glog.Infof("%v: no blocks found for requested hashes %s", p, list) } - return p.sendBlocks(blocks) + return p.SendBlocks(blocks) case BlocksMsg: // Decode the arrived block message @@ -349,7 +352,7 @@ func (pm *ProtocolManager) handleMsg(p *peer) error { // Mark the hashes as present at the remote node for _, hash := range hashes { - p.blockHashes.Add(hash) + p.MarkBlock(hash) p.SetHead(hash) } // Schedule all the unknown hashes for retrieval @@ -360,7 +363,7 @@ func (pm *ProtocolManager) handleMsg(p *peer) error { } } for _, hash := range unknown { - pm.fetcher.Notify(p.id, hash, time.Now(), p.requestBlocks) + pm.fetcher.Notify(p.id, hash, time.Now(), p.RequestBlocks) } case NewBlockMsg: @@ -387,7 +390,7 @@ func (pm *ProtocolManager) handleMsg(p *peer) error { RemoteId: p.ID().String(), }) // Mark the peer as owning the block and schedule it for import - p.blockHashes.Add(request.Block.Hash()) + p.MarkBlock(request.Block.Hash()) p.SetHead(request.Block.Hash()) pm.fetcher.Enqueue(p.id, request.Block) @@ -412,14 +415,14 @@ func (pm *ProtocolManager) BroadcastBlock(block *types.Block, propagate bool) { if propagate { transfer := peers[:int(math.Sqrt(float64(len(peers))))] for _, peer := range transfer { - peer.sendNewBlock(block) + peer.SendNewBlock(block) } glog.V(logger.Detail).Infof("propagated block %x to %d peers in %v", hash[:4], len(transfer), time.Since(block.ReceivedAt)) } // Otherwise if the block is indeed in out own chain, announce it if pm.chainman.HasBlock(hash) { for _, peer := range peers { - peer.sendNewBlockHashes([]common.Hash{hash}) + peer.SendNewBlockHashes([]common.Hash{hash}) } glog.V(logger.Detail).Infof("announced block %x to %d peers in %v", hash[:4], len(peers), time.Since(block.ReceivedAt)) } @@ -432,7 +435,7 @@ func (pm *ProtocolManager) BroadcastTx(hash common.Hash, tx *types.Transaction) peers := pm.peers.PeersWithoutTx(hash) //FIXME include this again: peers = peers[:int(math.Sqrt(float64(len(peers))))] for _, peer := range peers { - peer.sendTransactions(types.Transactions{tx}) + peer.SendTransactions(types.Transactions{tx}) } glog.V(logger.Detail).Infoln("broadcast tx to", len(peers), "peers") } diff --git a/eth/peer.go b/eth/peer.go index b0002ce81e..9160ac7180 100644 --- a/eth/peer.go +++ b/eth/peer.go @@ -47,27 +47,21 @@ type peer struct { td *big.Int lock sync.RWMutex - genesis, ourHash common.Hash - ourTd *big.Int - - txHashes *set.Set - blockHashes *set.Set + knownTxs *set.Set // Set of transaction hashes known to be known by this peer + knownBlocks *set.Set // Set of block hashes known to be known by this peer } -func newPeer(version, network int, genesis, head common.Hash, td *big.Int, p *p2p.Peer, rw p2p.MsgReadWriter) *peer { +func newPeer(version, network int, p *p2p.Peer, rw p2p.MsgReadWriter) *peer { id := p.ID() return &peer{ Peer: p, rw: rw, - genesis: genesis, - ourHash: head, - ourTd: td, version: version, network: network, id: fmt.Sprintf("%x", id[:8]), - txHashes: set.New(), - blockHashes: set.New(), + knownTxs: set.New(), + knownBlocks: set.New(), } } @@ -104,27 +98,39 @@ func (p *peer) SetTd(td *big.Int) { p.td.Set(td) } -// sendTransactions sends transactions to the peer and includes the hashes +// MarkBlock marks a block as known for the peer, ensuring that the block will +// never be propagated to this particular peer. +func (p *peer) MarkBlock(hash common.Hash) { + p.knownBlocks.Add(hash) +} + +// MarkTransaction marks a transaction as known for the peer, ensuring that it +// will never be propagated to this particular peer. +func (p *peer) MarkTransaction(hash common.Hash) { + p.knownTxs.Add(hash) +} + +// SendTransactions sends transactions to the peer and includes the hashes // in its transaction hash set for future reference. -func (p *peer) sendTransactions(txs types.Transactions) error { +func (p *peer) SendTransactions(txs types.Transactions) error { propTxnOutPacketsMeter.Mark(1) for _, tx := range txs { propTxnOutTrafficMeter.Mark(tx.Size().Int64()) - p.txHashes.Add(tx.Hash()) + p.knownTxs.Add(tx.Hash()) } return p2p.Send(p.rw, TxMsg, txs) } -// sendBlockHashes sends a batch of known hashes to the remote peer. -func (p *peer) sendBlockHashes(hashes []common.Hash) error { +// SendBlockHashes sends a batch of known hashes to the remote peer. +func (p *peer) SendBlockHashes(hashes []common.Hash) error { reqHashOutPacketsMeter.Mark(1) reqHashOutTrafficMeter.Mark(int64(32 * len(hashes))) return p2p.Send(p.rw, BlockHashesMsg, hashes) } -// sendBlocks sends a batch of blocks to the remote peer. -func (p *peer) sendBlocks(blocks []*types.Block) error { +// SendBlocks sends a batch of blocks to the remote peer. +func (p *peer) SendBlocks(blocks []*types.Block) error { reqBlockOutPacketsMeter.Mark(1) for _, block := range blocks { reqBlockOutTrafficMeter.Mark(block.Size().Int64()) @@ -132,52 +138,55 @@ func (p *peer) sendBlocks(blocks []*types.Block) error { return p2p.Send(p.rw, BlocksMsg, blocks) } -// sendNewBlockHashes announces the availability of a number of blocks through +// SendNewBlockHashes announces the availability of a number of blocks through // a hash notification. -func (p *peer) sendNewBlockHashes(hashes []common.Hash) error { +func (p *peer) SendNewBlockHashes(hashes []common.Hash) error { propHashOutPacketsMeter.Mark(1) propHashOutTrafficMeter.Mark(int64(32 * len(hashes))) for _, hash := range hashes { - p.blockHashes.Add(hash) + p.knownBlocks.Add(hash) } return p2p.Send(p.rw, NewBlockHashesMsg, hashes) } -// sendNewBlock propagates an entire block to a remote peer. -func (p *peer) sendNewBlock(block *types.Block) error { +// SendNewBlock propagates an entire block to a remote peer. +func (p *peer) SendNewBlock(block *types.Block) error { propBlockOutPacketsMeter.Mark(1) propBlockOutTrafficMeter.Mark(block.Size().Int64()) - p.blockHashes.Add(block.Hash()) + p.knownBlocks.Add(block.Hash()) return p2p.Send(p.rw, NewBlockMsg, []interface{}{block, block.Td}) } -// requestHashes fetches a batch of hashes from a peer, starting at from, going +// RequestHashes fetches a batch of hashes from a peer, starting at from, going // towards the genesis block. -func (p *peer) requestHashes(from common.Hash) error { +func (p *peer) RequestHashes(from common.Hash) error { glog.V(logger.Debug).Infof("Peer [%s] fetching hashes (%d) %x...\n", p.id, downloader.MaxHashFetch, from[:4]) return p2p.Send(p.rw, GetBlockHashesMsg, getBlockHashesMsgData{from, uint64(downloader.MaxHashFetch)}) } -func (p *peer) requestBlocks(hashes []common.Hash) error { +// RequestBlocks fetches a batch of blocks corresponding to the specified hashes. +func (p *peer) RequestBlocks(hashes []common.Hash) error { glog.V(logger.Debug).Infof("[%s] fetching %v blocks\n", p.id, len(hashes)) return p2p.Send(p.rw, GetBlocksMsg, hashes) } -func (p *peer) handleStatus() error { +// Handshake executes the eth protocol handshake, negotiating version number, +// network IDs, difficulties, head and genesis blocks. +func (p *peer) Handshake(td *big.Int, head common.Hash, genesis common.Hash) error { + // Send out own handshake in a new thread errc := make(chan error, 1) go func() { errc <- p2p.Send(p.rw, StatusMsg, &statusMsgData{ ProtocolVersion: uint32(p.version), NetworkId: uint32(p.network), - TD: p.ourTd, - CurrentBlock: p.ourHash, - GenesisBlock: p.genesis, + TD: td, + CurrentBlock: head, + GenesisBlock: genesis, }) }() - - // read and handle remote status + // In the mean time retrieve the remote status message msg, err := p.rw.ReadMsg() if err != nil { return err @@ -188,28 +197,22 @@ func (p *peer) handleStatus() error { if msg.Size > ProtocolMaxMsgSize { return errResp(ErrMsgTooLarge, "%v > %v", msg.Size, ProtocolMaxMsgSize) } - + // Decode the handshake and make sure everything matches var status statusMsgData if err := msg.Decode(&status); err != nil { return errResp(ErrDecode, "msg %v: %v", msg, err) } - - if status.GenesisBlock != p.genesis { - return errResp(ErrGenesisBlockMismatch, "%x (!= %x)", status.GenesisBlock, p.genesis) + if status.GenesisBlock != genesis { + return errResp(ErrGenesisBlockMismatch, "%x (!= %x)", status.GenesisBlock, genesis) } - if int(status.NetworkId) != p.network { return errResp(ErrNetworkIdMismatch, "%d (!= %d)", status.NetworkId, p.network) } - if int(status.ProtocolVersion) != p.version { return errResp(ErrProtocolVersionMismatch, "%d (!= %d)", status.ProtocolVersion, p.version) } - // Set the total difficulty of the peer - p.td = status.TD - // set the best hash of the peer - p.head = status.CurrentBlock - + // Configure the remote peer, and sanity check out handshake too + p.td, p.head = status.TD, status.CurrentBlock return <-errc } @@ -284,7 +287,7 @@ func (ps *peerSet) PeersWithoutBlock(hash common.Hash) []*peer { list := make([]*peer, 0, len(ps.peers)) for _, p := range ps.peers { - if !p.blockHashes.Has(hash) { + if !p.knownBlocks.Has(hash) { list = append(list, p) } } @@ -299,7 +302,7 @@ func (ps *peerSet) PeersWithoutTx(hash common.Hash) []*peer { list := make([]*peer, 0, len(ps.peers)) for _, p := range ps.peers { - if !p.txHashes.Has(hash) { + if !p.knownTxs.Has(hash) { list = append(list, p) } } diff --git a/eth/protocol_test.go b/eth/protocol_test.go index 60fa354436..ffd4ca19fc 100644 --- a/eth/protocol_test.go +++ b/eth/protocol_test.go @@ -43,11 +43,11 @@ func TestStatusMsgErrors(t *testing.T) { wantError: errResp(ErrProtocolVersionMismatch, "10 (!= 0)"), }, { - code: StatusMsg, data: statusMsgData{ProtocolVersion, 999, td, currentBlock, genesis}, + code: StatusMsg, data: statusMsgData{uint32(ProtocolVersions[0]), 999, td, currentBlock, genesis}, wantError: errResp(ErrNetworkIdMismatch, "999 (!= 0)"), }, { - code: StatusMsg, data: statusMsgData{ProtocolVersion, NetworkId, td, currentBlock, common.Hash{3}}, + code: StatusMsg, data: statusMsgData{uint32(ProtocolVersions[0]), NetworkId, td, currentBlock, common.Hash{3}}, wantError: errResp(ErrGenesisBlockMismatch, "0300000000000000000000000000000000000000000000000000000000000000 (!= %x)", genesis), }, } @@ -167,7 +167,7 @@ func newProtocolManagerForTesting(txAdded chan<- []*types.Transaction) *Protocol db, _ = ethdb.NewMemDatabase() chain, _ = core.NewChainManager(core.GenesisBlock(0, db), db, db, core.FakePow{}, em) txpool = &fakeTxPool{added: txAdded} - pm = NewProtocolManager(ProtocolVersion, 0, em, txpool, core.FakePow{}, chain) + pm = NewProtocolManager(0, em, txpool, core.FakePow{}, chain) ) pm.Start() return pm diff --git a/eth/sync.go b/eth/sync.go index 82abb725f9..47fd7363e0 100644 --- a/eth/sync.go +++ b/eth/sync.go @@ -20,14 +20,6 @@ const ( txsyncPackSize = 100 * 1024 ) -// blockAnnounce is the hash notification of the availability of a new block in -// the network. -type blockAnnounce struct { - hash common.Hash - peer *peer - time time.Time -} - type txsync struct { p *peer txs []*types.Transaction @@ -75,7 +67,7 @@ func (pm *ProtocolManager) txsyncLoop() { // Send the pack in the background. glog.V(logger.Detail).Infof("%v: sending %d transactions (%v)", s.p.Peer, len(pack.txs), size) sending = true - go func() { done <- pack.p.sendTransactions(pack.txs) }() + go func() { done <- pack.p.SendTransactions(pack.txs) }() } // pick chooses the next pending sync. From 5db8f447d597e55718263ba5ed1770290e3e0893 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= <peterke@gmail.com> Date: Mon, 29 Jun 2015 17:06:07 +0300 Subject: [PATCH 130/156] eth: fix #1319, put an upper limit on the known txns and blocks --- eth/peer.go | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/eth/peer.go b/eth/peer.go index 9160ac7180..0120cd033e 100644 --- a/eth/peer.go +++ b/eth/peer.go @@ -20,6 +20,11 @@ var ( errNotRegistered = errors.New("peer is not registered") ) +const ( + maxKnownTxs = 32768 // Maximum transactions hashes to keep in the known list (prevent DOS) + maxKnownBlocks = 1024 // Maximum block hashes to keep in the known list (prevent DOS) +) + type statusMsgData struct { ProtocolVersion uint32 NetworkId uint32 @@ -101,12 +106,26 @@ func (p *peer) SetTd(td *big.Int) { // MarkBlock marks a block as known for the peer, ensuring that the block will // never be propagated to this particular peer. func (p *peer) MarkBlock(hash common.Hash) { + // If we reached the memory allowance, drop a previously known block hash + if p.knownBlocks.Size() >= maxKnownBlocks { + p.knownBlocks.Each(func(item interface{}) bool { + p.knownBlocks.Remove(item) + return p.knownBlocks.Size() >= maxKnownBlocks + }) + } p.knownBlocks.Add(hash) } // MarkTransaction marks a transaction as known for the peer, ensuring that it // will never be propagated to this particular peer. func (p *peer) MarkTransaction(hash common.Hash) { + // If we reached the memory allowance, drop a previously known transaction hash + if p.knownTxs.Size() >= maxKnownTxs { + p.knownTxs.Each(func(item interface{}) bool { + p.knownTxs.Remove(item) + return p.knownTxs.Size() >= maxKnownTxs + }) + } p.knownTxs.Add(hash) } From aac2b6ae4c5cf6f78547159c47f9192babe3e6dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= <peterke@gmail.com> Date: Mon, 29 Jun 2015 17:32:14 +0300 Subject: [PATCH 131/156] eth: add the blocks from numbers protocol message --- eth/handler.go | 4 ++-- eth/peer.go | 28 +++++++++++----------------- eth/protocol.go | 29 ++++++++++++++++++++++++++--- eth/protocol_test.go | 8 ++++---- 4 files changed, 43 insertions(+), 26 deletions(-) diff --git a/eth/handler.go b/eth/handler.go index d0456446d0..3705f5bb6d 100644 --- a/eth/handler.go +++ b/eth/handler.go @@ -240,7 +240,7 @@ func (pm *ProtocolManager) handleMsg(p *peer) error { pm.txpool.AddTransactions(txs) case GetBlockHashesMsg: - var request getBlockHashesMsgData + var request getBlockHashesData if err := msg.Decode(&request); err != nil { return errResp(ErrDecode, "->msg %v: %v", msg, err) } @@ -368,7 +368,7 @@ func (pm *ProtocolManager) handleMsg(p *peer) error { case NewBlockMsg: // Retrieve and decode the propagated block - var request newBlockMsgData + var request newBlockData if err := msg.Decode(&request); err != nil { return errResp(ErrDecode, "%v: %v", msg, err) } diff --git a/eth/peer.go b/eth/peer.go index 0120cd033e..a5d56249d2 100644 --- a/eth/peer.go +++ b/eth/peer.go @@ -25,19 +25,6 @@ const ( maxKnownBlocks = 1024 // Maximum block hashes to keep in the known list (prevent DOS) ) -type statusMsgData struct { - ProtocolVersion uint32 - NetworkId uint32 - TD *big.Int - CurrentBlock common.Hash - GenesisBlock common.Hash -} - -type getBlockHashesMsgData struct { - Hash common.Hash - Amount uint64 -} - type peer struct { *p2p.Peer @@ -181,8 +168,15 @@ func (p *peer) SendNewBlock(block *types.Block) error { // RequestHashes fetches a batch of hashes from a peer, starting at from, going // towards the genesis block. func (p *peer) RequestHashes(from common.Hash) error { - glog.V(logger.Debug).Infof("Peer [%s] fetching hashes (%d) %x...\n", p.id, downloader.MaxHashFetch, from[:4]) - return p2p.Send(p.rw, GetBlockHashesMsg, getBlockHashesMsgData{from, uint64(downloader.MaxHashFetch)}) + glog.V(logger.Debug).Infof("Peer [%s] fetching hashes (%d) from %x...\n", p.id, downloader.MaxHashFetch, from[:4]) + return p2p.Send(p.rw, GetBlockHashesMsg, getBlockHashesData{from, uint64(downloader.MaxHashFetch)}) +} + +// RequestHashesFromNumber fetches a batch of hashes from a peer, starting at the +// requested block number, going upwards towards the genesis block. +func (p *peer) RequestHashesFromNumber(from uint64) error { + glog.V(logger.Debug).Infof("Peer [%s] fetching hashes (%d) from #%d...\n", p.id, downloader.MaxHashFetch, from) + return p2p.Send(p.rw, GetBlockHashesFromNumberMsg, getBlockHashesFromNumberData{from, uint64(downloader.MaxHashFetch)}) } // RequestBlocks fetches a batch of blocks corresponding to the specified hashes. @@ -197,7 +191,7 @@ func (p *peer) Handshake(td *big.Int, head common.Hash, genesis common.Hash) err // Send out own handshake in a new thread errc := make(chan error, 1) go func() { - errc <- p2p.Send(p.rw, StatusMsg, &statusMsgData{ + errc <- p2p.Send(p.rw, StatusMsg, &statusData{ ProtocolVersion: uint32(p.version), NetworkId: uint32(p.network), TD: td, @@ -217,7 +211,7 @@ func (p *peer) Handshake(td *big.Int, head common.Hash, genesis common.Hash) err return errResp(ErrMsgTooLarge, "%v > %v", msg.Size, ProtocolMaxMsgSize) } // Decode the handshake and make sure everything matches - var status statusMsgData + var status statusData if err := msg.Decode(&status); err != nil { return errResp(ErrDecode, "msg %v: %v", msg, err) } diff --git a/eth/protocol.go b/eth/protocol.go index 56409721b3..bf9e155c55 100644 --- a/eth/protocol.go +++ b/eth/protocol.go @@ -28,7 +28,7 @@ const ( GetBlocksMsg BlocksMsg NewBlockMsg - BlockHashesFromNumbers + GetBlockHashesFromNumberMsg ) type errCode int @@ -77,8 +77,31 @@ type chainManager interface { Status() (td *big.Int, currentBlock common.Hash, genesisBlock common.Hash) } -// message structs used for RLP serialization -type newBlockMsgData struct { +// statusData is the network packet for the status message. +type statusData struct { + ProtocolVersion uint32 + NetworkId uint32 + TD *big.Int + CurrentBlock common.Hash + GenesisBlock common.Hash +} + +// getBlockHashesData is the network packet for the hash based block retrieval +// message. +type getBlockHashesData struct { + Hash common.Hash + Amount uint64 +} + +// getBlockHashesFromNumberData is the network packet for the number based block +// retrieval message. +type getBlockHashesFromNumberData struct { + Number uint64 + Amount uint64 +} + +// newBlockData is the network packet for the block propagation message. +type newBlockData struct { Block *types.Block TD *big.Int } diff --git a/eth/protocol_test.go b/eth/protocol_test.go index ffd4ca19fc..4c1579d4e5 100644 --- a/eth/protocol_test.go +++ b/eth/protocol_test.go @@ -39,15 +39,15 @@ func TestStatusMsgErrors(t *testing.T) { wantError: errResp(ErrNoStatusMsg, "first msg has code 2 (!= 0)"), }, { - code: StatusMsg, data: statusMsgData{10, NetworkId, td, currentBlock, genesis}, + code: StatusMsg, data: statusData{10, NetworkId, td, currentBlock, genesis}, wantError: errResp(ErrProtocolVersionMismatch, "10 (!= 0)"), }, { - code: StatusMsg, data: statusMsgData{uint32(ProtocolVersions[0]), 999, td, currentBlock, genesis}, + code: StatusMsg, data: statusData{uint32(ProtocolVersions[0]), 999, td, currentBlock, genesis}, wantError: errResp(ErrNetworkIdMismatch, "999 (!= 0)"), }, { - code: StatusMsg, data: statusMsgData{uint32(ProtocolVersions[0]), NetworkId, td, currentBlock, common.Hash{3}}, + code: StatusMsg, data: statusData{uint32(ProtocolVersions[0]), NetworkId, td, currentBlock, common.Hash{3}}, wantError: errResp(ErrGenesisBlockMismatch, "0300000000000000000000000000000000000000000000000000000000000000 (!= %x)", genesis), }, } @@ -188,7 +188,7 @@ func newTestPeer(pm *ProtocolManager) (*testPeer, <-chan error) { func (p *testPeer) handshake(t *testing.T) { td, currentBlock, genesis := p.pm.chainman.Status() - msg := &statusMsgData{ + msg := &statusData{ ProtocolVersion: uint32(p.pm.protVer), NetworkId: uint32(p.pm.netId), TD: td, From af51dc4d637dbbb0d416032304f84d52d4f6d951 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= <peterke@gmail.com> Date: Mon, 29 Jun 2015 17:37:55 +0300 Subject: [PATCH 132/156] eth, eth/downloader: pass the eth protocol version through --- eth/downloader/downloader.go | 4 +- eth/downloader/downloader_test.go | 70 +++++++++++++++++-------------- eth/downloader/peer.go | 5 ++- eth/handler.go | 2 +- 4 files changed, 45 insertions(+), 36 deletions(-) diff --git a/eth/downloader/downloader.go b/eth/downloader/downloader.go index 39976aae10..1b31f5dbd9 100644 --- a/eth/downloader/downloader.go +++ b/eth/downloader/downloader.go @@ -175,7 +175,7 @@ func (d *Downloader) Synchronising() bool { // RegisterPeer injects a new download peer into the set of block source to be // used for fetching hashes and blocks from. -func (d *Downloader) RegisterPeer(id string, head common.Hash, getHashes hashFetcherFn, getBlocks blockFetcherFn) error { +func (d *Downloader) RegisterPeer(id string, version int, head common.Hash, getHashes hashFetcherFn, getBlocks blockFetcherFn) error { // If the peer wants to send a banned hash, reject if d.banned.Has(head) { glog.V(logger.Debug).Infoln("Register rejected, head hash banned:", id) @@ -183,7 +183,7 @@ func (d *Downloader) RegisterPeer(id string, head common.Hash, getHashes hashFet } // Otherwise try to construct and register the peer glog.V(logger.Detail).Infoln("Registering peer", id) - if err := d.peers.Register(newPeer(id, head, getHashes, getBlocks)); err != nil { + if err := d.peers.Register(newPeer(id, version, head, getHashes, getBlocks)); err != nil { glog.V(logger.Error).Infoln("Register failed:", err) return err } diff --git a/eth/downloader/downloader_test.go b/eth/downloader/downloader_test.go index 7feca8782e..0e9b580052 100644 --- a/eth/downloader/downloader_test.go +++ b/eth/downloader/downloader_test.go @@ -16,6 +16,11 @@ import ( "github.com/ethereum/go-ethereum/event" ) +const ( + eth60 = 60 + eth61 = 61 +) + var ( testdb, _ = ethdb.NewMemDatabase() genesis = core.GenesisBlockForTesting(testdb, common.Address{}, big.NewInt(0)) @@ -112,15 +117,15 @@ func (dl *downloadTester) insertChain(blocks types.Blocks) (int, error) { } // newPeer registers a new block download source into the downloader. -func (dl *downloadTester) newPeer(id string, hashes []common.Hash, blocks map[common.Hash]*types.Block) error { - return dl.newSlowPeer(id, hashes, blocks, 0) +func (dl *downloadTester) newPeer(id string, version int, hashes []common.Hash, blocks map[common.Hash]*types.Block) error { + return dl.newSlowPeer(id, version, hashes, blocks, 0) } // newSlowPeer registers a new block download source into the downloader, with a // specific delay time on processing the network packets sent to it, simulating // potentially slow network IO. -func (dl *downloadTester) newSlowPeer(id string, hashes []common.Hash, blocks map[common.Hash]*types.Block, delay time.Duration) error { - err := dl.downloader.RegisterPeer(id, hashes[0], dl.peerGetHashesFn(id, delay), dl.peerGetBlocksFn(id, delay)) +func (dl *downloadTester) newSlowPeer(id string, version int, hashes []common.Hash, blocks map[common.Hash]*types.Block, delay time.Duration) error { + err := dl.downloader.RegisterPeer(id, version, hashes[0], dl.peerGetHashesFn(id, delay), dl.peerGetBlocksFn(id, delay)) if err == nil { // Assign the owned hashes and blocks to the peer (deep copy) dl.peerHashes[id] = make([]common.Hash, len(hashes)) @@ -201,7 +206,7 @@ func TestSynchronisation(t *testing.T) { hashes, blocks := makeChain(targetBlocks, 0, genesis) tester := newTester() - tester.newPeer("peer", hashes, blocks) + tester.newPeer("peer", eth60, hashes, blocks) // Synchronise with the peer and make sure all blocks were retrieved if err := tester.sync("peer"); err != nil { @@ -232,7 +237,7 @@ func TestCancel(t *testing.T) { hashes, blocks := makeChain(targetBlocks, 0, genesis) tester := newTester() - tester.newPeer("peer", hashes, blocks) + tester.newPeer("peer", eth60, hashes, blocks) // Make sure canceling works with a pristine downloader tester.downloader.cancel() @@ -259,7 +264,7 @@ func TestThrottling(t *testing.T) { hashes, blocks := makeChain(targetBlocks, 0, genesis) tester := newTester() - tester.newPeer("peer", hashes, blocks) + tester.newPeer("peer", eth60, hashes, blocks) // Wrap the importer to allow stepping done := make(chan int) @@ -317,7 +322,7 @@ func TestMultiSynchronisation(t *testing.T) { tester := newTester() for i := 0; i < targetPeers; i++ { id := fmt.Sprintf("peer #%d", i) - tester.newPeer(id, hashes[i*blockCacheLimit:], blocks) + tester.newPeer(id, eth60, hashes[i*blockCacheLimit:], blocks) } // Synchronise with the middle peer and make sure half of the blocks were retrieved id := fmt.Sprintf("peer #%d", targetPeers/2) @@ -347,8 +352,8 @@ func TestSlowSynchronisation(t *testing.T) { targetIODelay := time.Second hashes, blocks := makeChain(targetBlocks, 0, genesis) - tester.newSlowPeer("fast", hashes, blocks, 0) - tester.newSlowPeer("slow", hashes, blocks, targetIODelay) + tester.newSlowPeer("fast", eth60, hashes, blocks, 0) + tester.newSlowPeer("slow", eth60, hashes, blocks, targetIODelay) // Try to sync with the peers (pull hashes from fast) start := time.Now() @@ -370,13 +375,14 @@ func TestSlowSynchronisation(t *testing.T) { func TestNonExistingParentAttack(t *testing.T) { tester := newTester() + // Forge a single-link chain with a forged header hashes, blocks := makeChain(1, 0, genesis) - tester.newPeer("valid", hashes, blocks) + tester.newPeer("valid", eth60, hashes, blocks) wrongblock := types.NewBlock(&types.Header{}, nil, nil, nil) wrongblock.Td = blocks[hashes[0]].Td hashes, blocks = makeChain(1, 0, wrongblock) - tester.newPeer("attack", hashes, blocks) + tester.newPeer("attack", eth60, hashes, blocks) // Try and sync with the malicious node and check that it fails if err := tester.sync("attack"); err == nil { @@ -401,8 +407,8 @@ func TestRepeatingHashAttack(t *testing.T) { // TODO: Is this thing valid?? // Create a valid chain, but drop the last link hashes, blocks := makeChain(blockCacheLimit, 0, genesis) - tester.newPeer("valid", hashes, blocks) - tester.newPeer("attack", hashes[:len(hashes)-1], blocks) + tester.newPeer("valid", eth60, hashes, blocks) + tester.newPeer("attack", eth60, hashes[:len(hashes)-1], blocks) // Try and sync with the malicious node errc := make(chan error) @@ -431,10 +437,10 @@ func TestNonExistingBlockAttack(t *testing.T) { // Create a valid chain, but forge the last link hashes, blocks := makeChain(blockCacheLimit, 0, genesis) - tester.newPeer("valid", hashes, blocks) + tester.newPeer("valid", eth60, hashes, blocks) hashes[len(hashes)/2] = common.Hash{} - tester.newPeer("attack", hashes, blocks) + tester.newPeer("attack", eth60, hashes, blocks) // Try and sync with the malicious node and check that it fails if err := tester.sync("attack"); err != errPeersUnavailable { @@ -453,7 +459,7 @@ func TestInvalidHashOrderAttack(t *testing.T) { // Create a valid long chain, but reverse some hashes within hashes, blocks := makeChain(4*blockCacheLimit, 0, genesis) - tester.newPeer("valid", hashes, blocks) + tester.newPeer("valid", eth60, hashes, blocks) chunk1 := make([]common.Hash, blockCacheLimit) chunk2 := make([]common.Hash, blockCacheLimit) @@ -462,7 +468,7 @@ func TestInvalidHashOrderAttack(t *testing.T) { copy(hashes[2*blockCacheLimit:], chunk1) copy(hashes[blockCacheLimit:], chunk2) - tester.newPeer("attack", hashes, blocks) + tester.newPeer("attack", eth60, hashes, blocks) // Try and sync with the malicious node and check that it fails if err := tester.sync("attack"); err != errInvalidChain { @@ -489,8 +495,8 @@ func TestMadeupHashChainAttack(t *testing.T) { rand.Read(randomHashes[i][:]) } - tester.newPeer("valid", hashes, blocks) - tester.newPeer("attack", randomHashes, nil) + tester.newPeer("valid", eth60, hashes, blocks) + tester.newPeer("attack", eth60, randomHashes, nil) // Try and sync with the malicious node and check that it fails if err := tester.sync("attack"); err != errCrossCheckFailed { @@ -517,7 +523,7 @@ func TestMadeupHashChainDrippingAttack(t *testing.T) { // Try and sync with the attacker, one hash at a time tester.maxHashFetch = 1 - tester.newPeer("attack", randomHashes, nil) + tester.newPeer("attack", eth60, randomHashes, nil) if err := tester.sync("attack"); err != errStallingPeer { t.Fatalf("synchronisation error mismatch: have %v, want %v", err, errStallingPeer) } @@ -540,7 +546,7 @@ func TestMadeupBlockChainAttack(t *testing.T) { } // Try and sync with the malicious node and check that it fails tester := newTester() - tester.newPeer("attack", gapped, blocks) + tester.newPeer("attack", eth60, gapped, blocks) if err := tester.sync("attack"); err != errCrossCheckFailed { t.Fatalf("synchronisation error mismatch: have %v, want %v", err, errCrossCheckFailed) } @@ -548,13 +554,13 @@ func TestMadeupBlockChainAttack(t *testing.T) { blockSoftTTL = defaultBlockTTL crossCheckCycle = defaultCrossCheckCycle - tester.newPeer("valid", hashes, blocks) + tester.newPeer("valid", eth60, hashes, blocks) if err := tester.sync("valid"); err != nil { t.Fatalf("failed to synchronise blocks: %v", err) } } -// tests that if one/multiple malicious peers try to feed a banned blockchain to +// Tests that if one/multiple malicious peers try to feed a banned blockchain to // the downloader, it will not keep refetching the same chain indefinitely, but // gradually block pieces of it, until its head is also blocked. func TestBannedChainStarvationAttack(t *testing.T) { @@ -565,8 +571,8 @@ func TestBannedChainStarvationAttack(t *testing.T) { // Create the tester and ban the selected hash. tester := newTester() tester.downloader.banned.Add(forkHashes[fork-1]) - tester.newPeer("valid", hashes, blocks) - tester.newPeer("attack", forkHashes, forkBlocks) + tester.newPeer("valid", eth60, hashes, blocks) + tester.newPeer("attack", eth60, forkHashes, forkBlocks) // Iteratively try to sync, and verify that the banned hash list grows until // the head of the invalid chain is blocked too. @@ -586,7 +592,7 @@ func TestBannedChainStarvationAttack(t *testing.T) { banned = bans } // Check that after banning an entire chain, bad peers get dropped - if err := tester.newPeer("new attacker", forkHashes, forkBlocks); err != errBannedHead { + if err := tester.newPeer("new attacker", eth60, forkHashes, forkBlocks); err != errBannedHead { t.Fatalf("peer registration mismatch: have %v, want %v", err, errBannedHead) } if peer := tester.downloader.peers.Peer("new attacker"); peer != nil { @@ -618,8 +624,8 @@ func TestBannedChainMemoryExhaustionAttack(t *testing.T) { MaxBlockFetch = 4 maxBannedHashes = 256 - tester.newPeer("valid", hashes, blocks) - tester.newPeer("attack", forkHashes, forkBlocks) + tester.newPeer("valid", eth60, hashes, blocks) + tester.newPeer("attack", eth60, forkHashes, forkBlocks) // Iteratively try to sync, and verify that the banned hash list grows until // the head of the invalid chain is blocked too. @@ -664,7 +670,7 @@ func TestOverlappingDeliveryAttack(t *testing.T) { // Register an attacker that always returns non-requested blocks too tester := newTester() - tester.newPeer("attack", hashes, blocks) + tester.newPeer("attack", eth60, hashes, blocks) rawGetBlocks := tester.downloader.peers.Peer("attack").getBlocks tester.downloader.peers.Peer("attack").getBlocks = func(request []common.Hash) error { @@ -712,7 +718,7 @@ func TestHashAttackerDropping(t *testing.T) { for i, tt := range tests { // Register a new peer and ensure it's presence id := fmt.Sprintf("test %d", i) - if err := tester.newPeer(id, []common.Hash{genesis.Hash()}, nil); err != nil { + if err := tester.newPeer(id, eth60, []common.Hash{genesis.Hash()}, nil); err != nil { t.Fatalf("test %d: failed to register new peer: %v", i, err) } if _, ok := tester.peerHashes[id]; !ok { @@ -744,7 +750,7 @@ func TestBlockAttackerDropping(t *testing.T) { for i, tt := range tests { // Register a new peer and ensure it's presence id := fmt.Sprintf("test %d", i) - if err := tester.newPeer(id, []common.Hash{common.Hash{}}, nil); err != nil { + if err := tester.newPeer(id, eth60, []common.Hash{common.Hash{}}, nil); err != nil { t.Fatalf("test %d: failed to register new peer: %v", i, err) } if _, ok := tester.peerHashes[id]; !ok { diff --git a/eth/downloader/peer.go b/eth/downloader/peer.go index f36e133e40..7176cc06b5 100644 --- a/eth/downloader/peer.go +++ b/eth/downloader/peer.go @@ -39,11 +39,13 @@ type peer struct { getHashes hashFetcherFn // Method to retrieve a batch of hashes (mockable for testing) getBlocks blockFetcherFn // Method to retrieve a batch of blocks (mockable for testing) + + version int // Eth protocol version number to switch strategies } // newPeer create a new downloader peer, with specific hash and block retrieval // mechanisms. -func newPeer(id string, head common.Hash, getHashes hashFetcherFn, getBlocks blockFetcherFn) *peer { +func newPeer(id string, version int, head common.Hash, getHashes hashFetcherFn, getBlocks blockFetcherFn) *peer { return &peer{ id: id, head: head, @@ -51,6 +53,7 @@ func newPeer(id string, head common.Hash, getHashes hashFetcherFn, getBlocks blo getHashes: getHashes, getBlocks: getBlocks, ignored: set.New(), + version: version, } } diff --git a/eth/handler.go b/eth/handler.go index 3705f5bb6d..712d652207 100644 --- a/eth/handler.go +++ b/eth/handler.go @@ -181,7 +181,7 @@ func (pm *ProtocolManager) handle(p *peer) error { defer pm.removePeer(p.id) // Register the peer in the downloader. If the downloader considers it banned, we disconnect - if err := pm.downloader.RegisterPeer(p.id, p.Head(), p.RequestHashes, p.RequestBlocks); err != nil { + if err := pm.downloader.RegisterPeer(p.id, p.version, p.Head(), p.RequestHashes, p.RequestBlocks); err != nil { return err } // Propagate existing transactions. new transactions appearing From f43c07cb3ca0d96fd005aa7ce2ddd40876a06d11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= <peterke@gmail.com> Date: Tue, 30 Jun 2015 19:05:06 +0300 Subject: [PATCH 133/156] eth, eth/downloader: transition to eth 61 --- eth/backend.go | 3 +- eth/downloader/downloader.go | 397 ++++++++++++++++++++++++++++-- eth/downloader/downloader_test.go | 247 +++++++++++++++---- eth/downloader/peer.go | 25 +- eth/downloader/queue.go | 28 ++- eth/handler.go | 91 ++++--- eth/metrics.go | 44 ++-- eth/peer.go | 6 +- 8 files changed, 695 insertions(+), 146 deletions(-) diff --git a/eth/backend.go b/eth/backend.go index 23d76dfd1f..d6ad3381da 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -11,8 +11,6 @@ import ( "strings" "time" - "github.com/ethereum/go-ethereum/metrics" - "github.com/ethereum/ethash" "github.com/ethereum/go-ethereum/accounts" "github.com/ethereum/go-ethereum/common" @@ -26,6 +24,7 @@ import ( "github.com/ethereum/go-ethereum/event" "github.com/ethereum/go-ethereum/logger" "github.com/ethereum/go-ethereum/logger/glog" + "github.com/ethereum/go-ethereum/metrics" "github.com/ethereum/go-ethereum/miner" "github.com/ethereum/go-ethereum/p2p" "github.com/ethereum/go-ethereum/p2p/discover" diff --git a/eth/downloader/downloader.go b/eth/downloader/downloader.go index 1b31f5dbd9..b4154c166a 100644 --- a/eth/downloader/downloader.go +++ b/eth/downloader/downloader.go @@ -19,6 +19,11 @@ import ( "gopkg.in/fatih/set.v0" ) +const ( + eth60 = 60 // Constant to check for old protocol support + eth61 = 61 // Constant to check for new protocol support +) + var ( MinHashFetch = 512 // Minimum amount of hashes to not consider a peer stalling MaxHashFetch = 2048 // Amount of hashes to be fetched per retrieval request @@ -58,6 +63,9 @@ type hashCheckFn func(common.Hash) bool // blockRetrievalFn is a callback type for retrieving a block from the local chain. type blockRetrievalFn func(common.Hash) *types.Block +// headRetrievalFn is a callback type for retrieving the head block from the local chain. +type headRetrievalFn func() *types.Block + // chainInsertFn is a callback type to insert a batch of blocks into the local chain. type chainInsertFn func(types.Blocks) (int, error) @@ -98,6 +106,7 @@ type Downloader struct { // Callbacks hasBlock hashCheckFn // Checks if a block is present in the chain getBlock blockRetrievalFn // Retrieves a block from the chain + headBlock headRetrievalFn // Retrieves the head block from the chain insertChain chainInsertFn // Injects a batch of blocks into the chain dropPeer peerDropFn // Drops a peer for misbehaving @@ -109,8 +118,9 @@ type Downloader struct { // Channels newPeerCh chan *peer - hashCh chan hashPack - blockCh chan blockPack + hashCh chan hashPack // Channel receiving inbound hashes + blockCh chan blockPack // Channel receiving inbound blocks + processCh chan bool // Channel to signal the block fetcher of new or finished work cancelCh chan struct{} // Channel to cancel mid-flight syncs cancelLock sync.RWMutex // Lock to protect the cancel channel in delivers @@ -123,7 +133,7 @@ type Block struct { } // New creates a new downloader to fetch hashes and blocks from remote peers. -func New(mux *event.TypeMux, hasBlock hashCheckFn, getBlock blockRetrievalFn, insertChain chainInsertFn, dropPeer peerDropFn) *Downloader { +func New(mux *event.TypeMux, hasBlock hashCheckFn, getBlock blockRetrievalFn, headBlock headRetrievalFn, insertChain chainInsertFn, dropPeer peerDropFn) *Downloader { // Create the base downloader downloader := &Downloader{ mux: mux, @@ -131,11 +141,13 @@ func New(mux *event.TypeMux, hasBlock hashCheckFn, getBlock blockRetrievalFn, in peers: newPeerSet(), hasBlock: hasBlock, getBlock: getBlock, + headBlock: headBlock, insertChain: insertChain, dropPeer: dropPeer, newPeerCh: make(chan *peer, 1), hashCh: make(chan hashPack, 1), blockCh: make(chan blockPack, 1), + processCh: make(chan bool, 1), } // Inject all the known bad hashes downloader.banned = set.New() @@ -175,7 +187,7 @@ func (d *Downloader) Synchronising() bool { // RegisterPeer injects a new download peer into the set of block source to be // used for fetching hashes and blocks from. -func (d *Downloader) RegisterPeer(id string, version int, head common.Hash, getHashes hashFetcherFn, getBlocks blockFetcherFn) error { +func (d *Downloader) RegisterPeer(id string, version int, head common.Hash, getRelHashes relativeHashFetcherFn, getAbsHashes absoluteHashFetcherFn, getBlocks blockFetcherFn) error { // If the peer wants to send a banned hash, reject if d.banned.Has(head) { glog.V(logger.Debug).Infoln("Register rejected, head hash banned:", id) @@ -183,7 +195,7 @@ func (d *Downloader) RegisterPeer(id string, version int, head common.Hash, getH } // Otherwise try to construct and register the peer glog.V(logger.Detail).Infoln("Registering peer", id) - if err := d.peers.Register(newPeer(id, version, head, getHashes, getBlocks)); err != nil { + if err := d.peers.Register(newPeer(id, version, head, getRelHashes, getAbsHashes, getBlocks)); err != nil { glog.V(logger.Error).Infoln("Register failed:", err) return err } @@ -289,12 +301,38 @@ func (d *Downloader) syncWithPeer(p *peer, hash common.Hash) (err error) { } }() - glog.V(logger.Debug).Infoln("Synchronizing with the network using:", p.id) - if err = d.fetchHashes(p, hash); err != nil { - return err - } - if err = d.fetchBlocks(); err != nil { - return err + glog.V(logger.Debug).Infof("Synchronizing with the network using: %s, eth/%d", p.id, p.version) + switch p.version { + case eth60: + // Old eth/60 version, use reverse hash retrieval algorithm + if err = d.fetchHashes60(p, hash); err != nil { + return err + } + if err = d.fetchBlocks60(); err != nil { + return err + } + case eth61: + // New eth/61, use forward, concurrent hash and block retrieval algorithm + number, err := d.findAncestor(p) + if err != nil { + return err + } + errc := make(chan error, 2) + go func() { errc <- d.fetchHashes(p, number+1) }() + go func() { errc <- d.fetchBlocks(number + 1) }() + + // If any fetcher fails, cancel the other + if err := <-errc; err != nil { + d.cancel() + <-errc + return err + } + return <-errc + + default: + // Something very wrong, stop right here + glog.V(logger.Error).Infof("Unsupported eth protocol: %d", p.version) + return errBadPeer } glog.V(logger.Debug).Infoln("Synchronization completed") @@ -326,10 +364,10 @@ func (d *Downloader) Terminate() { d.cancel() } -// fetchHahes starts retrieving hashes backwards from a specific peer and hash, +// fetchHashes60 starts retrieving hashes backwards from a specific peer and hash, // up until it finds a common ancestor. If the source peer times out, alternative // ones are tried for continuation. -func (d *Downloader) fetchHashes(p *peer, h common.Hash) error { +func (d *Downloader) fetchHashes60(p *peer, h common.Hash) error { var ( start = time.Now() active = p // active peer will help determine the current active peer @@ -346,12 +384,12 @@ func (d *Downloader) fetchHashes(p *peer, h common.Hash) error { <-timeout.C // timeout channel should be initially empty. getHashes := func(from common.Hash) { - go active.getHashes(from) + go active.getRelHashes(from) timeout.Reset(hashTTL) } // Add the hash to the queue, and start hash retrieval. - d.queue.Insert([]common.Hash{h}) + d.queue.Insert([]common.Hash{h}, false) getHashes(h) attempted[p.id] = true @@ -377,7 +415,7 @@ func (d *Downloader) fetchHashes(p *peer, h common.Hash) error { if d.banned.Has(hash) { glog.V(logger.Debug).Infof("Peer (%s) sent a known invalid chain", active.id) - d.queue.Insert(hashPack.hashes[:index+1]) + d.queue.Insert(hashPack.hashes[:index+1], false) if err := d.banBlocks(active.id, hash); err != nil { glog.V(logger.Debug).Infof("Failed to ban batch of blocks: %v", err) } @@ -395,7 +433,7 @@ func (d *Downloader) fetchHashes(p *peer, h common.Hash) error { } } // Insert all the new hashes, but only continue if got something useful - inserts := d.queue.Insert(hashPack.hashes) + inserts := d.queue.Insert(hashPack.hashes, false) if len(inserts) == 0 && !done { glog.V(logger.Debug).Infof("Peer (%s) responded with stale hashes", active.id) return errBadPeer @@ -422,9 +460,9 @@ func (d *Downloader) fetchHashes(p *peer, h common.Hash) error { continue } // We're done, prepare the download cache and proceed pulling the blocks - offset := 0 + offset := uint64(0) if block := d.getBlock(head); block != nil { - offset = int(block.NumberU64() + 1) + offset = block.NumberU64() + 1 } d.queue.Prepare(offset) finished = true @@ -481,10 +519,10 @@ func (d *Downloader) fetchHashes(p *peer, h common.Hash) error { return nil } -// fetchBlocks iteratively downloads the entire schedules block-chain, taking +// fetchBlocks60 iteratively downloads the entire schedules block-chain, taking // any available peers, reserving a chunk of blocks for each, wait for delivery // and periodically checking for timeouts. -func (d *Downloader) fetchBlocks() error { +func (d *Downloader) fetchBlocks60() error { glog.V(logger.Debug).Infoln("Downloading", d.queue.Pending(), "block(s)") start := time.Now() @@ -619,6 +657,323 @@ out: return nil } +// findAncestor tries to locate the common ancestor block of the local chain and +// a remote peers blockchain. In the general case when our node was in sync and +// on the correct chain, checking the top N blocks should already get us a match. +// In the rare scenario when we ended up on a long soft fork (i.e. none of the +// head blocks match), we do a binary search to find the common ancestor. +func (d *Downloader) findAncestor(p *peer) (uint64, error) { + glog.V(logger.Debug).Infof("%v: looking for common ancestor", p) + + // Request out head blocks to short circuit ancestor location + head := d.headBlock().NumberU64() + from := int64(head) - int64(MaxHashFetch) + if from < 0 { + from = 0 + } + go p.getAbsHashes(uint64(from), MaxHashFetch) + + // Wait for the remote response to the head fetch + number, hash := uint64(0), common.Hash{} + timeout := time.After(hashTTL) + + for finished := false; !finished; { + select { + case <-d.cancelCh: + return 0, errCancelHashFetch + + case hashPack := <-d.hashCh: + // Discard anything not from the origin peer + if hashPack.peerId != p.id { + glog.V(logger.Debug).Infof("Received hashes from incorrect peer(%s)", hashPack.peerId) + break + } + // Make sure the peer actually gave something valid + hashes := hashPack.hashes + if len(hashes) == 0 { + glog.V(logger.Debug).Infof("%v: empty head hash set", p) + return 0, errEmptyHashSet + } + // Check if a common ancestor was found + finished = true + for i := len(hashes) - 1; i >= 0; i-- { + if d.hasBlock(hashes[i]) { + number, hash = uint64(from)+uint64(i), hashes[i] + break + } + } + + case <-d.blockCh: + // Out of bounds blocks received, ignore them + + case <-timeout: + glog.V(logger.Debug).Infof("%v: head hash timeout", p) + return 0, errTimeout + } + } + // If the head fetch already found an ancestor, return + if !common.EmptyHash(hash) { + glog.V(logger.Debug).Infof("%v: common ancestor: #%d [%x]", p, number, hash[:4]) + return number, nil + } + // Ancestor not found, we need to binary search over our chain + start, end := uint64(0), head + for start+1 < end { + // Split our chain interval in two, and request the hash to cross check + check := (start + end) / 2 + + timeout := time.After(hashTTL) + go p.getAbsHashes(uint64(check), 1) + + // Wait until a reply arrives to this request + for arrived := false; !arrived; { + select { + case <-d.cancelCh: + return 0, errCancelHashFetch + + case hashPack := <-d.hashCh: + // Discard anything not from the origin peer + if hashPack.peerId != p.id { + glog.V(logger.Debug).Infof("Received hashes from incorrect peer(%s)", hashPack.peerId) + break + } + // Make sure the peer actually gave something valid + hashes := hashPack.hashes + if len(hashes) != 1 { + glog.V(logger.Debug).Infof("%v: invalid search hash set (%d)", p, len(hashes)) + return 0, errBadPeer + } + arrived = true + + // Modify the search interval based on the response + block := d.getBlock(hashes[0]) + if block == nil { + end = check + break + } + if block.NumberU64() != check { + glog.V(logger.Debug).Infof("%v: non requested hash #%d [%x], instead of #%d", p, block.NumberU64(), block.Hash().Bytes()[:4], check) + return 0, errBadPeer + } + start = check + + case <-d.blockCh: + // Out of bounds blocks received, ignore them + + case <-timeout: + glog.V(logger.Debug).Infof("%v: search hash timeout", p) + return 0, errTimeout + } + } + } + return start, nil +} + +// fetchHashes keeps retrieving hashes from the requested number, until no more +// are returned, potentially throttling on the way. +func (d *Downloader) fetchHashes(p *peer, from uint64) error { + glog.V(logger.Debug).Infof("%v: downloading hashes from #%d", p, from) + + // Create a timeout timer, and the associated hash fetcher + timeout := time.NewTimer(0) // timer to dump a non-responsive active peer + <-timeout.C // timeout channel should be initially empty + defer timeout.Stop() + + getHashes := func(from uint64) { + go p.getAbsHashes(from, MaxHashFetch) + timeout.Reset(hashTTL) + } + // Start pulling hashes, until all are exhausted + getHashes(from) + for { + select { + case <-d.cancelCh: + return errCancelHashFetch + + case hashPack := <-d.hashCh: + // Make sure the active peer is giving us the hashes + if hashPack.peerId != p.id { + glog.V(logger.Debug).Infof("Received hashes from incorrect peer(%s)", hashPack.peerId) + break + } + timeout.Stop() + + // If no more hashes are inbound, notify the block fetcher and return + if len(hashPack.hashes) == 0 { + glog.V(logger.Debug).Infof("%v: no available hashes", p) + + select { + case d.processCh <- false: + case <-d.cancelCh: + } + return nil + } + // Otherwise insert all the new hashes, aborting in case of junk + inserts := d.queue.Insert(hashPack.hashes, true) + if len(inserts) != len(hashPack.hashes) { + glog.V(logger.Debug).Infof("%v: stale hashes", p) + return errBadPeer + } + // Notify the block fetcher of new hashes, and continue fetching + select { + case d.processCh <- true: + default: + } + from += uint64(len(hashPack.hashes)) + getHashes(from) + + case <-timeout.C: + glog.V(logger.Debug).Infof("%v: hash request timed out", p) + return errTimeout + } + } +} + +// fetchBlocks iteratively downloads the scheduled hashes, taking any available +// peers, reserving a chunk of blocks for each, waiting for delivery and also +// periodically checking for timeouts. +func (d *Downloader) fetchBlocks(from uint64) error { + glog.V(logger.Debug).Infof("Downloading blocks from #%d", from) + defer glog.V(logger.Debug).Infof("Block download terminated") + + // Create a timeout timer for scheduling expiration tasks + ticker := time.NewTicker(100 * time.Millisecond) + defer ticker.Stop() + + update := make(chan struct{}, 1) + + // Prepare the queue and fetch blocks until the hash fetcher's done + d.queue.Prepare(from) + finished := false + + for { + select { + case <-d.cancelCh: + return errCancelBlockFetch + + case blockPack := <-d.blockCh: + // If the peer was previously banned and failed to deliver it's pack + // in a reasonable time frame, ignore it's message. + if peer := d.peers.Peer(blockPack.peerId); peer != nil { + // Deliver the received chunk of blocks, and demote in case of errors + err := d.queue.Deliver(blockPack.peerId, blockPack.blocks) + switch err { + case nil: + // If no blocks were delivered, demote the peer (need the delivery above) + if len(blockPack.blocks) == 0 { + peer.Demote() + peer.SetIdle() + glog.V(logger.Detail).Infof("%s: no blocks delivered", peer) + break + } + // All was successful, promote the peer and potentially start processing + peer.Promote() + peer.SetIdle() + glog.V(logger.Detail).Infof("%s: delivered %d blocks", peer, len(blockPack.blocks)) + go d.process() + + case errInvalidChain: + // The hash chain is invalid (blocks are not ordered properly), abort + return err + + case errNoFetchesPending: + // Peer probably timed out with its delivery but came through + // in the end, demote, but allow to to pull from this peer. + peer.Demote() + peer.SetIdle() + glog.V(logger.Detail).Infof("%s: out of bound delivery", peer) + + case errStaleDelivery: + // Delivered something completely else than requested, usually + // caused by a timeout and delivery during a new sync cycle. + // Don't set it to idle as the original request should still be + // in flight. + peer.Demote() + glog.V(logger.Detail).Infof("%s: stale delivery", peer) + + default: + // Peer did something semi-useful, demote but keep it around + peer.Demote() + peer.SetIdle() + glog.V(logger.Detail).Infof("%s: delivery partially failed: %v", peer, err) + go d.process() + } + } + // Blocks arrived, try to update the progress + select { + case update <- struct{}{}: + default: + } + + case cont := <-d.processCh: + // The hash fetcher sent a continuation flag, check if it's done + if !cont { + finished = true + } + // Hashes arrive, try to update the progress + select { + case update <- struct{}{}: + default: + } + + case <-ticker.C: + // Sanity check update the progress + select { + case update <- struct{}{}: + default: + } + + case <-update: + // Short circuit if we lost all our peers + if d.peers.Len() == 0 { + return errNoPeers + } + // Check for block request timeouts and demote the responsible peers + for _, pid := range d.queue.Expire(blockHardTTL) { + if peer := d.peers.Peer(pid); peer != nil { + peer.Demote() + glog.V(logger.Detail).Infof("%s: block delivery timeout", peer) + } + } + // If there's noting more to fetch, wait or terminate + if d.queue.Pending() == 0 { + if d.queue.InFlight() == 0 && finished { + glog.V(logger.Debug).Infof("Block fetching completed") + return nil + } + break + } + // Send a download request to all idle peers, until throttled + for _, peer := range d.peers.IdlePeers() { + // Short circuit if throttling activated + if d.queue.Throttle() { + break + } + // Reserve a chunk of hashes for a peer. A nil can mean either that + // no more hashes are available, or that the peer is known not to + // have them. + request := d.queue.Reserve(peer, peer.Capacity()) + if request == nil { + continue + } + if glog.V(logger.Detail) { + glog.Infof("%s: requesting %d blocks", peer, len(request.Hashes)) + } + // Fetch the chunk and make sure any errors return the hashes to the queue + if err := peer.Fetch(request); err != nil { + glog.V(logger.Error).Infof("%v: fetch failed, rescheduling", peer) + d.queue.Cancel(request) + } + } + // Make sure that we have peers available for fetching. If all peers have been tried + // and all failed throw an error + if !d.queue.Throttle() && d.queue.InFlight() == 0 { + return errPeersUnavailable + } + } + } +} + // banBlocks retrieves a batch of blocks from a peer feeding us invalid hashes, // and bans the head of the retrieved batch. // diff --git a/eth/downloader/downloader_test.go b/eth/downloader/downloader_test.go index 0e9b580052..c5fb00289b 100644 --- a/eth/downloader/downloader_test.go +++ b/eth/downloader/downloader_test.go @@ -16,17 +16,12 @@ import ( "github.com/ethereum/go-ethereum/event" ) -const ( - eth60 = 60 - eth61 = 61 -) - var ( testdb, _ = ethdb.NewMemDatabase() genesis = core.GenesisBlockForTesting(testdb, common.Address{}, big.NewInt(0)) ) -// makeChain creates a chain of n blocks starting at and including +// makeChain creates a chain of n blocks starting at but not including // parent. the returned hash chain is ordered head->parent. func makeChain(n int, seed byte, parent *types.Block) ([]common.Hash, map[common.Hash]*types.Block) { blocks := core.GenerateChain(parent, testdb, n, func(i int, gen *core.BlockGen) { @@ -47,7 +42,7 @@ func makeChain(n int, seed byte, parent *types.Block) ([]common.Hash, map[common // h2[:f] are different but have a common suffix of length n-f. func makeChainFork(n, f int, parent *types.Block) (h1, h2 []common.Hash, b1, b2 map[common.Hash]*types.Block) { // Create the common suffix. - h, b := makeChain(n-f-1, 0, parent) + h, b := makeChain(n-f, 0, parent) // Create the forks. h1, b1 = makeChain(f, 1, b[h[0]]) h1 = append(h1, h[1:]...) @@ -80,7 +75,7 @@ func newTester() *downloadTester { peerHashes: make(map[string][]common.Hash), peerBlocks: make(map[string]map[common.Hash]*types.Block), } - tester.downloader = New(new(event.TypeMux), tester.hasBlock, tester.getBlock, tester.insertChain, tester.dropPeer) + tester.downloader = New(new(event.TypeMux), tester.hasBlock, tester.getBlock, tester.headBlock, tester.insertChain, tester.dropPeer) return tester } @@ -104,6 +99,11 @@ func (dl *downloadTester) getBlock(hash common.Hash) *types.Block { return dl.ownBlocks[hash] } +// headBlock retrieves the current head block from the canonical chain. +func (dl *downloadTester) headBlock() *types.Block { + return dl.getBlock(dl.ownHashes[len(dl.ownHashes)-1]) +} + // insertChain injects a new batch of blocks into the simulated chain. func (dl *downloadTester) insertChain(blocks types.Blocks) (int, error) { for i, block := range blocks { @@ -125,7 +125,7 @@ func (dl *downloadTester) newPeer(id string, version int, hashes []common.Hash, // specific delay time on processing the network packets sent to it, simulating // potentially slow network IO. func (dl *downloadTester) newSlowPeer(id string, version int, hashes []common.Hash, blocks map[common.Hash]*types.Block, delay time.Duration) error { - err := dl.downloader.RegisterPeer(id, version, hashes[0], dl.peerGetHashesFn(id, delay), dl.peerGetBlocksFn(id, delay)) + err := dl.downloader.RegisterPeer(id, version, hashes[0], dl.peerGetRelHashesFn(id, delay), dl.peerGetAbsHashesFn(id, version, delay), dl.peerGetBlocksFn(id, delay)) if err == nil { // Assign the owned hashes and blocks to the peer (deep copy) dl.peerHashes[id] = make([]common.Hash, len(hashes)) @@ -146,10 +146,10 @@ func (dl *downloadTester) dropPeer(id string) { dl.downloader.UnregisterPeer(id) } -// peerGetBlocksFn constructs a getHashes function associated with a particular +// peerGetRelHashesFn constructs a GetHashes function associated with a specific // peer in the download tester. The returned function can be used to retrieve // batches of hashes from the particularly requested peer. -func (dl *downloadTester) peerGetHashesFn(id string, delay time.Duration) func(head common.Hash) error { +func (dl *downloadTester) peerGetRelHashesFn(id string, delay time.Duration) func(head common.Hash) error { return func(head common.Hash) error { time.Sleep(delay) @@ -179,13 +179,43 @@ func (dl *downloadTester) peerGetHashesFn(id string, delay time.Duration) func(h } } +// peerGetAbsHashesFn constructs a GetHashesFromNumber function associated with +// a particular peer in the download tester. The returned function can be used to +// retrieve batches of hashes from the particularly requested peer. +func (dl *downloadTester) peerGetAbsHashesFn(id string, version int, delay time.Duration) func(uint64, int) error { + // If the simulated peer runs eth/60, this message is not supported + if version == eth60 { + return func(uint64, int) error { return nil } + } + // Otherwise create a method to request the blocks by number + return func(head uint64, count int) error { + time.Sleep(delay) + + limit := count + if dl.maxHashFetch > 0 { + limit = dl.maxHashFetch + } + // Gather the next batch of hashes + hashes := dl.peerHashes[id] + result := make([]common.Hash, 0, limit) + for i := 0; i < limit && len(hashes)-int(head)-1-i >= 0; i++ { + result = append(result, hashes[len(hashes)-int(head)-1-i]) + } + // Delay delivery a bit to allow attacks to unfold + go func() { + time.Sleep(time.Millisecond) + dl.downloader.DeliverHashes(id, result) + }() + return nil + } +} + // peerGetBlocksFn constructs a getBlocks function associated with a particular // peer in the download tester. The returned function can be used to retrieve // batches of blocks from the particularly requested peer. func (dl *downloadTester) peerGetBlocksFn(id string, delay time.Duration) func([]common.Hash) error { return func(hashes []common.Hash) error { time.Sleep(delay) - blocks := dl.peerBlocks[id] result := make([]*types.Block, 0, len(hashes)) for _, hash := range hashes { @@ -200,7 +230,7 @@ func (dl *downloadTester) peerGetBlocksFn(id string, delay time.Duration) func([ } // Tests that simple synchronization, without throttling from a good peer works. -func TestSynchronisation(t *testing.T) { +func TestSynchronisation60(t *testing.T) { // Create a small enough block chain to download and the tester targetBlocks := blockCacheLimit - 15 hashes, blocks := makeChain(targetBlocks, 0, genesis) @@ -217,48 +247,29 @@ func TestSynchronisation(t *testing.T) { } } -// Tests that an inactive downloader will not accept incoming hashes and blocks. -func TestInactiveDownloader(t *testing.T) { - tester := newTester() - - // Check that neither hashes nor blocks are accepted - if err := tester.downloader.DeliverHashes("bad peer", []common.Hash{}); err != errNoSyncActive { - t.Errorf("error mismatch: have %v, want %v", err, errNoSyncActive) - } - if err := tester.downloader.DeliverBlocks("bad peer", []*types.Block{}); err != errNoSyncActive { - t.Errorf("error mismatch: have %v, want %v", err, errNoSyncActive) - } -} - -// Tests that a canceled download wipes all previously accumulated state. -func TestCancel(t *testing.T) { - // Create a small enough block chain to download and the tester +// Tests that simple synchronization against a canonical chain works correctly. +// In this test common ancestor lookup should be short circuited and not require +// binary searching. +func TestCanonicalSynchronisation(t *testing.T) { + // Create a small enough block chain to download targetBlocks := blockCacheLimit - 15 hashes, blocks := makeChain(targetBlocks, 0, genesis) tester := newTester() - tester.newPeer("peer", eth60, hashes, blocks) + tester.newPeer("peer", eth61, hashes, blocks) - // Make sure canceling works with a pristine downloader - tester.downloader.cancel() - hashCount, blockCount := tester.downloader.queue.Size() - if hashCount > 0 || blockCount > 0 { - t.Errorf("block or hash count mismatch: %d hashes, %d blocks, want 0", hashCount, blockCount) - } - // Synchronise with the peer, but cancel afterwards + // Synchronise with the peer and make sure all blocks were retrieved if err := tester.sync("peer"); err != nil { t.Fatalf("failed to synchronise blocks: %v", err) } - tester.downloader.cancel() - hashCount, blockCount = tester.downloader.queue.Size() - if hashCount > 0 || blockCount > 0 { - t.Errorf("block or hash count mismatch: %d hashes, %d blocks, want 0", hashCount, blockCount) + if imported := len(tester.ownBlocks); imported != targetBlocks+1 { + t.Fatalf("synchronised block mismatch: have %v, want %v", imported, targetBlocks+1) } } // Tests that if a large batch of blocks are being downloaded, it is throttled // until the cached blocks are retrieved. -func TestThrottling(t *testing.T) { +func TestThrottling60(t *testing.T) { // Create a long block chain to download and the tester targetBlocks := 8 * blockCacheLimit hashes, blocks := makeChain(targetBlocks, 0, genesis) @@ -312,6 +323,158 @@ func TestThrottling(t *testing.T) { } } +// Tests that if a large batch of blocks are being downloaded, it is throttled +// until the cached blocks are retrieved. +func TestThrottling(t *testing.T) { + // Create a long block chain to download and the tester + targetBlocks := 8 * blockCacheLimit + hashes, blocks := makeChain(targetBlocks, 0, genesis) + + tester := newTester() + tester.newPeer("peer", eth61, hashes, blocks) + + // Wrap the importer to allow stepping + done := make(chan int) + tester.downloader.insertChain = func(blocks types.Blocks) (int, error) { + n, err := tester.insertChain(blocks) + done <- n + return n, err + } + // Start a synchronisation concurrently + errc := make(chan error) + go func() { + errc <- tester.sync("peer") + }() + // Iteratively take some blocks, always checking the retrieval count + for len(tester.ownBlocks) < targetBlocks+1 { + // Wait a bit for sync to throttle itself + var cached int + for start := time.Now(); time.Since(start) < 3*time.Second; { + time.Sleep(25 * time.Millisecond) + + cached = len(tester.downloader.queue.blockPool) + if cached == blockCacheLimit || len(tester.ownBlocks)+cached == targetBlocks+1 { + break + } + } + // Make sure we filled up the cache, then exhaust it + time.Sleep(25 * time.Millisecond) // give it a chance to screw up + if cached != blockCacheLimit && len(tester.ownBlocks)+cached < targetBlocks+1 { + t.Fatalf("block count mismatch: have %v, want %v", cached, blockCacheLimit) + } + <-done // finish previous blocking import + for cached > maxBlockProcess { + cached -= <-done + } + time.Sleep(25 * time.Millisecond) // yield to the insertion + } + <-done // finish the last blocking import + + // Check that we haven't pulled more blocks than available + if len(tester.ownBlocks) > targetBlocks+1 { + t.Fatalf("target block count mismatch: have %v, want %v", len(tester.ownBlocks), targetBlocks+1) + } + if err := <-errc; err != nil { + t.Fatalf("block synchronization failed: %v", err) + } +} + +// Tests that simple synchronization against a forked chain works correctly. In +// this test common ancestor lookup should *not* be short circuited, and a full +// binary search should be executed. +func TestForkedSynchronisation(t *testing.T) { + // Create a long enough forked chain + common, fork := MaxHashFetch, 2*MaxHashFetch + hashesA, hashesB, blocksA, blocksB := makeChainFork(common+fork, fork, genesis) + + tester := newTester() + tester.newPeer("fork A", eth61, hashesA, blocksA) + tester.newPeer("fork B", eth61, hashesB, blocksB) + + // Synchronise with the peer and make sure all blocks were retrieved + if err := tester.sync("fork A"); err != nil { + t.Fatalf("failed to synchronise blocks: %v", err) + } + if imported := len(tester.ownBlocks); imported != common+fork+1 { + t.Fatalf("synchronised block mismatch: have %v, want %v", imported, common+fork+1) + } + // Synchronise with the second peer and make sure that fork is pulled too + if err := tester.sync("fork B"); err != nil { + t.Fatalf("failed to synchronise blocks: %v", err) + } + if imported := len(tester.ownBlocks); imported != common+2*fork+1 { + t.Fatalf("synchronised block mismatch: have %v, want %v", imported, common+2*fork+1) + } +} + +// Tests that an inactive downloader will not accept incoming hashes and blocks. +func TestInactiveDownloader(t *testing.T) { + tester := newTester() + + // Check that neither hashes nor blocks are accepted + if err := tester.downloader.DeliverHashes("bad peer", []common.Hash{}); err != errNoSyncActive { + t.Errorf("error mismatch: have %v, want %v", err, errNoSyncActive) + } + if err := tester.downloader.DeliverBlocks("bad peer", []*types.Block{}); err != errNoSyncActive { + t.Errorf("error mismatch: have %v, want %v", err, errNoSyncActive) + } +} + +// Tests that a canceled download wipes all previously accumulated state. +func TestCancel60(t *testing.T) { + // Create a small enough block chain to download and the tester + targetBlocks := blockCacheLimit - 15 + hashes, blocks := makeChain(targetBlocks, 0, genesis) + + tester := newTester() + tester.newPeer("peer", eth60, hashes, blocks) + + // Make sure canceling works with a pristine downloader + tester.downloader.cancel() + hashCount, blockCount := tester.downloader.queue.Size() + if hashCount > 0 || blockCount > 0 { + t.Errorf("block or hash count mismatch: %d hashes, %d blocks, want 0", hashCount, blockCount) + } + // Synchronise with the peer, but cancel afterwards + if err := tester.sync("peer"); err != nil { + t.Fatalf("failed to synchronise blocks: %v", err) + } + tester.downloader.cancel() + hashCount, blockCount = tester.downloader.queue.Size() + if hashCount > 0 || blockCount > 0 { + t.Errorf("block or hash count mismatch: %d hashes, %d blocks, want 0", hashCount, blockCount) + } +} + +// Tests that a canceled download wipes all previously accumulated state. +func TestCancel(t *testing.T) { + // Create a small enough block chain to download and the tester + targetBlocks := blockCacheLimit - 15 + if targetBlocks >= MaxHashFetch { + targetBlocks = MaxHashFetch - 15 + } + hashes, blocks := makeChain(targetBlocks, 0, genesis) + + tester := newTester() + tester.newPeer("peer", eth61, hashes, blocks) + + // Make sure canceling works with a pristine downloader + tester.downloader.cancel() + hashCount, blockCount := tester.downloader.queue.Size() + if hashCount > 0 || blockCount > 0 { + t.Errorf("block or hash count mismatch: %d hashes, %d blocks, want 0", hashCount, blockCount) + } + // Synchronise with the peer, but cancel afterwards + if err := tester.sync("peer"); err != nil { + t.Fatalf("failed to synchronise blocks: %v", err) + } + tester.downloader.cancel() + hashCount, blockCount = tester.downloader.queue.Size() + if hashCount > 0 || blockCount > 0 { + t.Errorf("block or hash count mismatch: %d hashes, %d blocks, want 0", hashCount, blockCount) + } +} + // Tests that synchronisation from multiple peers works as intended (multi thread sanity test). func TestMultiSynchronisation(t *testing.T) { // Create various peers with various parts of the chain diff --git a/eth/downloader/peer.go b/eth/downloader/peer.go index 7176cc06b5..bd58b4dc81 100644 --- a/eth/downloader/peer.go +++ b/eth/downloader/peer.go @@ -15,7 +15,8 @@ import ( "gopkg.in/fatih/set.v0" ) -type hashFetcherFn func(common.Hash) error +type relativeHashFetcherFn func(common.Hash) error +type absoluteHashFetcherFn func(uint64, int) error type blockFetcherFn func([]common.Hash) error var ( @@ -37,23 +38,25 @@ type peer struct { ignored *set.Set // Set of hashes not to request (didn't have previously) - getHashes hashFetcherFn // Method to retrieve a batch of hashes (mockable for testing) - getBlocks blockFetcherFn // Method to retrieve a batch of blocks (mockable for testing) + getRelHashes relativeHashFetcherFn // Method to retrieve a batch of hashes from an origin hash + getAbsHashes absoluteHashFetcherFn // Method to retrieve a batch of hashes from an absolute position + getBlocks blockFetcherFn // Method to retrieve a batch of blocks version int // Eth protocol version number to switch strategies } // newPeer create a new downloader peer, with specific hash and block retrieval // mechanisms. -func newPeer(id string, version int, head common.Hash, getHashes hashFetcherFn, getBlocks blockFetcherFn) *peer { +func newPeer(id string, version int, head common.Hash, getRelHashes relativeHashFetcherFn, getAbsHashes absoluteHashFetcherFn, getBlocks blockFetcherFn) *peer { return &peer{ - id: id, - head: head, - capacity: 1, - getHashes: getHashes, - getBlocks: getBlocks, - ignored: set.New(), - version: version, + id: id, + head: head, + capacity: 1, + getRelHashes: getRelHashes, + getAbsHashes: getAbsHashes, + getBlocks: getBlocks, + ignored: set.New(), + version: version, } } diff --git a/eth/downloader/queue.go b/eth/downloader/queue.go index 903f043eb3..b24ce42e8a 100644 --- a/eth/downloader/queue.go +++ b/eth/downloader/queue.go @@ -40,9 +40,9 @@ type queue struct { pendPool map[string]*fetchRequest // Currently pending block retrieval operations - blockPool map[common.Hash]int // Hash-set of the downloaded data blocks, mapping to cache indexes - blockCache []*Block // Downloaded but not yet delivered blocks - blockOffset int // Offset of the first cached block in the block-chain + blockPool map[common.Hash]uint64 // Hash-set of the downloaded data blocks, mapping to cache indexes + blockCache []*Block // Downloaded but not yet delivered blocks + blockOffset uint64 // Offset of the first cached block in the block-chain lock sync.RWMutex } @@ -53,7 +53,7 @@ func newQueue() *queue { hashPool: make(map[common.Hash]int), hashQueue: prque.New(), pendPool: make(map[string]*fetchRequest), - blockPool: make(map[common.Hash]int), + blockPool: make(map[common.Hash]uint64), blockCache: make([]*Block, blockCacheLimit), } } @@ -69,7 +69,7 @@ func (q *queue) Reset() { q.pendPool = make(map[string]*fetchRequest) - q.blockPool = make(map[common.Hash]int) + q.blockPool = make(map[common.Hash]uint64) q.blockOffset = 0 q.blockCache = make([]*Block, blockCacheLimit) } @@ -130,7 +130,7 @@ func (q *queue) Has(hash common.Hash) bool { // Insert adds a set of hashes for the download queue for scheduling, returning // the new hashes encountered. -func (q *queue) Insert(hashes []common.Hash) []common.Hash { +func (q *queue) Insert(hashes []common.Hash, fifo bool) []common.Hash { q.lock.Lock() defer q.lock.Unlock() @@ -147,7 +147,11 @@ func (q *queue) Insert(hashes []common.Hash) []common.Hash { inserts = append(inserts, hash) q.hashPool[hash] = q.hashCounter - q.hashQueue.Push(hash, float32(q.hashCounter)) // Highest gets schedules first + if fifo { + q.hashQueue.Push(hash, -float32(q.hashCounter)) // Lowest gets schedules first + } else { + q.hashQueue.Push(hash, float32(q.hashCounter)) // Highest gets schedules first + } } return inserts } @@ -175,7 +179,7 @@ func (q *queue) GetBlock(hash common.Hash) *Block { return nil } // Return the block if it's still available in the cache - if q.blockOffset <= index && index < q.blockOffset+len(q.blockCache) { + if q.blockOffset <= index && index < q.blockOffset+uint64(len(q.blockCache)) { return q.blockCache[index-q.blockOffset] } return nil @@ -202,7 +206,7 @@ func (q *queue) TakeBlocks() []*Block { for k, n := len(q.blockCache)-len(blocks), len(q.blockCache); k < n; k++ { q.blockCache[k] = nil } - q.blockOffset += len(blocks) + q.blockOffset += uint64(len(blocks)) return blocks } @@ -318,7 +322,7 @@ func (q *queue) Deliver(id string, blocks []*types.Block) (err error) { continue } // If a requested block falls out of the range, the hash chain is invalid - index := int(block.NumberU64()) - q.blockOffset + index := int(int64(block.NumberU64()) - int64(q.blockOffset)) if index >= len(q.blockCache) || index < 0 { return errInvalidChain } @@ -329,7 +333,7 @@ func (q *queue) Deliver(id string, blocks []*types.Block) (err error) { } delete(request.Hashes, hash) delete(q.hashPool, hash) - q.blockPool[hash] = int(block.NumberU64()) + q.blockPool[hash] = block.NumberU64() } // Return all failed or missing fetches to the queue for hash, index := range request.Hashes { @@ -346,7 +350,7 @@ func (q *queue) Deliver(id string, blocks []*types.Block) (err error) { } // Prepare configures the block cache offset to allow accepting inbound blocks. -func (q *queue) Prepare(offset int) { +func (q *queue) Prepare(offset uint64) { q.lock.Lock() defer q.lock.Unlock() diff --git a/eth/handler.go b/eth/handler.go index 712d652207..86e8a325fe 100644 --- a/eth/handler.go +++ b/eth/handler.go @@ -96,7 +96,7 @@ func NewProtocolManager(networkId int, mux *event.TypeMux, txpool txPool, pow po } } // Construct the different synchronisation mechanisms - manager.downloader = downloader.New(manager.eventMux, manager.chainman.HasBlock, manager.chainman.GetBlock, manager.chainman.InsertChain, manager.removePeer) + manager.downloader = downloader.New(manager.eventMux, manager.chainman.HasBlock, manager.chainman.GetBlock, manager.chainman.CurrentBlock, manager.chainman.InsertChain, manager.removePeer) validator := func(block *types.Block, parent *types.Block) error { return core.ValidateHeader(pow, block.Header(), parent, true) @@ -181,7 +181,7 @@ func (pm *ProtocolManager) handle(p *peer) error { defer pm.removePeer(p.id) // Register the peer in the downloader. If the downloader considers it banned, we disconnect - if err := pm.downloader.RegisterPeer(p.id, p.version, p.Head(), p.RequestHashes, p.RequestBlocks); err != nil { + if err := pm.downloader.RegisterPeer(p.id, p.version, p.Head(), p.RequestHashes, p.RequestHashesFromNumber, p.RequestBlocks); err != nil { return err } // Propagate existing transactions. new transactions appearing @@ -214,50 +214,50 @@ func (pm *ProtocolManager) handleMsg(p *peer) error { // Handle the message depending on its contents switch msg.Code { case StatusMsg: + // Status messages should never arrive after the handshake return errResp(ErrExtraStatusMsg, "uncontrolled status message") - case TxMsg: - // Transactions arrived, parse all of them and deliver to the pool - var txs []*types.Transaction - if err := msg.Decode(&txs); err != nil { - return errResp(ErrDecode, "msg %v: %v", msg, err) - } - propTxnInPacketsMeter.Mark(1) - for i, tx := range txs { - // Validate and mark the remote transaction - if tx == nil { - return errResp(ErrDecode, "transaction %d is nil", i) - } - p.MarkTransaction(tx.Hash()) - - // Log it's arrival for later analysis - propTxnInTrafficMeter.Mark(tx.Size().Int64()) - jsonlogger.LogJson(&logger.EthTxReceived{ - TxHash: tx.Hash().Hex(), - RemoteId: p.ID().String(), - }) - } - pm.txpool.AddTransactions(txs) - case GetBlockHashesMsg: + // Retrieve the number of hashes to return and from which origin hash var request getBlockHashesData if err := msg.Decode(&request); err != nil { - return errResp(ErrDecode, "->msg %v: %v", msg, err) + return errResp(ErrDecode, "%v: %v", msg, err) } - if request.Amount > uint64(downloader.MaxHashFetch) { request.Amount = uint64(downloader.MaxHashFetch) } - + // Retrieve the hashes from the block chain and return them hashes := pm.chainman.GetBlockHashesFromHash(request.Hash, request.Amount) - - if glog.V(logger.Debug) { - if len(hashes) == 0 { - glog.Infof("invalid block hash %x", request.Hash.Bytes()[:4]) - } + if len(hashes) == 0 { + glog.V(logger.Debug).Infof("invalid block hash %x", request.Hash.Bytes()[:4]) } + return p.SendBlockHashes(hashes) - // returns either requested hashes or nothing (i.e. not found) + case GetBlockHashesFromNumberMsg: + // Retrieve and decode the number of hashes to return and from which origin number + var request getBlockHashesFromNumberData + if err := msg.Decode(&request); err != nil { + return errResp(ErrDecode, "%v: %v", msg, err) + } + if request.Amount > uint64(downloader.MaxHashFetch) { + request.Amount = uint64(downloader.MaxHashFetch) + } + // Calculate the last block that should be retrieved, and short circuit if unavailable + last := pm.chainman.GetBlockByNumber(request.Number + request.Amount - 1) + if last == nil { + last = pm.chainman.CurrentBlock() + request.Amount = last.NumberU64() - request.Number + 1 + } + if last.NumberU64() < request.Number { + return p.SendBlockHashes(nil) + } + // Retrieve the hashes from the last block backwards, reverse and return + hashes := []common.Hash{last.Hash()} + hashes = append(hashes, pm.chainman.GetBlockHashesFromHash(last.Hash(), request.Amount-1)...) + + for i := 0; i < len(hashes)/2; i++ { + hashes[i], hashes[len(hashes)-1-i] = hashes[len(hashes)-1-i], hashes[i] + } return p.SendBlockHashes(hashes) case BlockHashesMsg: @@ -399,6 +399,29 @@ func (pm *ProtocolManager) handleMsg(p *peer) error { p.SetTd(request.TD) go pm.synchronise(p) + case TxMsg: + // Transactions arrived, parse all of them and deliver to the pool + var txs []*types.Transaction + if err := msg.Decode(&txs); err != nil { + return errResp(ErrDecode, "msg %v: %v", msg, err) + } + propTxnInPacketsMeter.Mark(1) + for i, tx := range txs { + // Validate and mark the remote transaction + if tx == nil { + return errResp(ErrDecode, "transaction %d is nil", i) + } + p.MarkTransaction(tx.Hash()) + + // Log it's arrival for later analysis + propTxnInTrafficMeter.Mark(tx.Size().Int64()) + jsonlogger.LogJson(&logger.EthTxReceived{ + TxHash: tx.Hash().Hex(), + RemoteId: p.ID().String(), + }) + } + pm.txpool.AddTransactions(txs) + default: return errResp(ErrInvalidMsgCode, "%v", msg.Code) } diff --git a/eth/metrics.go b/eth/metrics.go index e056233f42..950b50296a 100644 --- a/eth/metrics.go +++ b/eth/metrics.go @@ -1,26 +1,28 @@ package eth -import "github.com/rcrowley/go-metrics" +import ( + "github.com/ethereum/go-ethereum/metrics" +) var ( - propTxnInPacketsMeter = metrics.GetOrRegisterMeter("eth/prop/txns/in/packets", metrics.DefaultRegistry) - propTxnInTrafficMeter = metrics.GetOrRegisterMeter("eth/prop/txns/in/traffic", metrics.DefaultRegistry) - propTxnOutPacketsMeter = metrics.GetOrRegisterMeter("eth/prop/txns/out/packets", metrics.DefaultRegistry) - propTxnOutTrafficMeter = metrics.GetOrRegisterMeter("eth/prop/txns/out/traffic", metrics.DefaultRegistry) - propHashInPacketsMeter = metrics.GetOrRegisterMeter("eth/prop/hashes/in/packets", metrics.DefaultRegistry) - propHashInTrafficMeter = metrics.GetOrRegisterMeter("eth/prop/hashes/in/traffic", metrics.DefaultRegistry) - propHashOutPacketsMeter = metrics.GetOrRegisterMeter("eth/prop/hashes/out/packets", metrics.DefaultRegistry) - propHashOutTrafficMeter = metrics.GetOrRegisterMeter("eth/prop/hashes/out/traffic", metrics.DefaultRegistry) - propBlockInPacketsMeter = metrics.GetOrRegisterMeter("eth/prop/blocks/in/packets", metrics.DefaultRegistry) - propBlockInTrafficMeter = metrics.GetOrRegisterMeter("eth/prop/blocks/in/traffic", metrics.DefaultRegistry) - propBlockOutPacketsMeter = metrics.GetOrRegisterMeter("eth/prop/blocks/out/packets", metrics.DefaultRegistry) - propBlockOutTrafficMeter = metrics.GetOrRegisterMeter("eth/prop/blocks/out/traffic", metrics.DefaultRegistry) - reqHashInPacketsMeter = metrics.GetOrRegisterMeter("eth/req/hashes/in/packets", metrics.DefaultRegistry) - reqHashInTrafficMeter = metrics.GetOrRegisterMeter("eth/req/hashes/in/traffic", metrics.DefaultRegistry) - reqHashOutPacketsMeter = metrics.GetOrRegisterMeter("eth/req/hashes/out/packets", metrics.DefaultRegistry) - reqHashOutTrafficMeter = metrics.GetOrRegisterMeter("eth/req/hashes/out/traffic", metrics.DefaultRegistry) - reqBlockInPacketsMeter = metrics.GetOrRegisterMeter("eth/req/blocks/in/packets", metrics.DefaultRegistry) - reqBlockInTrafficMeter = metrics.GetOrRegisterMeter("eth/req/blocks/in/traffic", metrics.DefaultRegistry) - reqBlockOutPacketsMeter = metrics.GetOrRegisterMeter("eth/req/blocks/out/packets", metrics.DefaultRegistry) - reqBlockOutTrafficMeter = metrics.GetOrRegisterMeter("eth/req/blocks/out/traffic", metrics.DefaultRegistry) + propTxnInPacketsMeter = metrics.NewMeter("eth/prop/txns/in/packets") + propTxnInTrafficMeter = metrics.NewMeter("eth/prop/txns/in/traffic") + propTxnOutPacketsMeter = metrics.NewMeter("eth/prop/txns/out/packets") + propTxnOutTrafficMeter = metrics.NewMeter("eth/prop/txns/out/traffic") + propHashInPacketsMeter = metrics.NewMeter("eth/prop/hashes/in/packets") + propHashInTrafficMeter = metrics.NewMeter("eth/prop/hashes/in/traffic") + propHashOutPacketsMeter = metrics.NewMeter("eth/prop/hashes/out/packets") + propHashOutTrafficMeter = metrics.NewMeter("eth/prop/hashes/out/traffic") + propBlockInPacketsMeter = metrics.NewMeter("eth/prop/blocks/in/packets") + propBlockInTrafficMeter = metrics.NewMeter("eth/prop/blocks/in/traffic") + propBlockOutPacketsMeter = metrics.NewMeter("eth/prop/blocks/out/packets") + propBlockOutTrafficMeter = metrics.NewMeter("eth/prop/blocks/out/traffic") + reqHashInPacketsMeter = metrics.NewMeter("eth/req/hashes/in/packets") + reqHashInTrafficMeter = metrics.NewMeter("eth/req/hashes/in/traffic") + reqHashOutPacketsMeter = metrics.NewMeter("eth/req/hashes/out/packets") + reqHashOutTrafficMeter = metrics.NewMeter("eth/req/hashes/out/traffic") + reqBlockInPacketsMeter = metrics.NewMeter("eth/req/blocks/in/packets") + reqBlockInTrafficMeter = metrics.NewMeter("eth/req/blocks/in/traffic") + reqBlockOutPacketsMeter = metrics.NewMeter("eth/req/blocks/out/packets") + reqBlockOutTrafficMeter = metrics.NewMeter("eth/req/blocks/out/traffic") ) diff --git a/eth/peer.go b/eth/peer.go index a5d56249d2..c8b8457b9f 100644 --- a/eth/peer.go +++ b/eth/peer.go @@ -174,9 +174,9 @@ func (p *peer) RequestHashes(from common.Hash) error { // RequestHashesFromNumber fetches a batch of hashes from a peer, starting at the // requested block number, going upwards towards the genesis block. -func (p *peer) RequestHashesFromNumber(from uint64) error { - glog.V(logger.Debug).Infof("Peer [%s] fetching hashes (%d) from #%d...\n", p.id, downloader.MaxHashFetch, from) - return p2p.Send(p.rw, GetBlockHashesFromNumberMsg, getBlockHashesFromNumberData{from, uint64(downloader.MaxHashFetch)}) +func (p *peer) RequestHashesFromNumber(from uint64, count int) error { + glog.V(logger.Debug).Infof("Peer [%s] fetching hashes (%d) from #%d...\n", p.id, count, from) + return p2p.Send(p.rw, GetBlockHashesFromNumberMsg, getBlockHashesFromNumberData{from, uint64(count)}) } // RequestBlocks fetches a batch of blocks corresponding to the specified hashes. From d05305473eccc60298efcd858ec30175908b8317 Mon Sep 17 00:00:00 2001 From: ethers <ethereum@outlook.com> Date: Tue, 30 Jun 2015 12:14:16 -0700 Subject: [PATCH 134/156] fix logging jsonrpc request #1365 --- rpc/api/mergedapi.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rpc/api/mergedapi.go b/rpc/api/mergedapi.go index bc4fa32e89..c40716996f 100644 --- a/rpc/api/mergedapi.go +++ b/rpc/api/mergedapi.go @@ -42,7 +42,7 @@ func (self *MergedApi) Methods() []string { // Call the correct API's Execute method for the given request func (self *MergedApi) Execute(req *shared.Request) (interface{}, error) { - glog.V(logger.Detail).Infof("rpc method: %s", req.Method) + glog.V(logger.Detail).Infof("%s %s", req.Method, req.Params) if res, _ := self.handle(req); res != nil { return res, nil From 60454da6507f9f391e7943e002136b8e84c32521 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= <peterke@gmail.com> Date: Wed, 1 Jul 2015 01:20:49 +0300 Subject: [PATCH 135/156] eth/downloader: reduce hash fetches in prep for eth/61 --- eth/downloader/downloader.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/eth/downloader/downloader.go b/eth/downloader/downloader.go index b4154c166a..ce85aec171 100644 --- a/eth/downloader/downloader.go +++ b/eth/downloader/downloader.go @@ -25,9 +25,9 @@ const ( ) var ( - MinHashFetch = 512 // Minimum amount of hashes to not consider a peer stalling - MaxHashFetch = 2048 // Amount of hashes to be fetched per retrieval request - MaxBlockFetch = 128 // Amount of blocks to be fetched per retrieval request + MinHashFetch = 512 // Minimum amount of hashes to not consider a peer stalling + MaxHashFetch = 512 // Amount of hashes to be fetched per retrieval request + MaxBlockFetch = 128 // Amount of blocks to be fetched per retrieval request hashTTL = 5 * time.Second // Time it takes for a hash request to time out blockSoftTTL = 3 * time.Second // Request completion threshold for increasing or decreasing a peer's bandwidth From 29ab1fa8a50db8aa16c5d707f1cab7dc201a4053 Mon Sep 17 00:00:00 2001 From: Jeffrey Wilcke <geffobscura@gmail.com> Date: Wed, 1 Jul 2015 00:52:44 +0200 Subject: [PATCH 136/156] core, cmd/geth: recover by number --- cmd/geth/main.go | 24 ++++++++++++++++++++++++ core/chain_manager.go | 12 ++++++++++-- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/cmd/geth/main.go b/cmd/geth/main.go index c46343a606..a7d3a73efb 100644 --- a/cmd/geth/main.go +++ b/cmd/geth/main.go @@ -39,6 +39,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/eth" "github.com/ethereum/go-ethereum/logger" + "github.com/ethereum/go-ethereum/logger/glog" "github.com/ethereum/go-ethereum/metrics" "github.com/ethereum/go-ethereum/rpc/codec" "github.com/ethereum/go-ethereum/rpc/comms" @@ -68,6 +69,15 @@ func init() { app.Action = run app.HideVersion = true // we have a command to print the version app.Commands = []cli.Command{ + { + Action: blockRecovery, + Name: "recover", + Usage: "attempts to recover a corrupted database by setting a new block head by number", + Description: ` +The recover commands will attempt to read out the last +block based on that. +`, + }, blocktestCommand, importCommand, exportCommand, @@ -439,6 +449,20 @@ func unlockAccount(ctx *cli.Context, am *accounts.Manager, account string) (pass return } +func blockRecovery(ctx *cli.Context) { + num := ctx.Args().First() + if len(ctx.Args()) < 1 { + glog.Fatal("recover requires block number") + } + + cfg := utils.MakeEthConfig(ClientIdentifier, nodeNameVersion, ctx) + ethereum, err := eth.New(cfg) + if err != nil { + utils.Fatalf("%v", err) + } + ethereum.ChainManager().Recover(common.String2Big(num).Uint64()) +} + func startEth(ctx *cli.Context, eth *eth.Ethereum) { // Start Ethereum itself diff --git a/core/chain_manager.go b/core/chain_manager.go index c89aae3f08..247b5fdb31 100644 --- a/core/chain_manager.go +++ b/core/chain_manager.go @@ -238,6 +238,16 @@ func (self *ChainManager) setTransState(statedb *state.StateDB) { self.transState = statedb } +func (bc *ChainManager) Recover(num uint64) { + block := bc.GetBlockByNumber(num) + if block != nil { + bc.insert(block) + glog.Infof("Recovery succesful. New HEAD %x\n", block.Hash()) + } else { + glog.Fatalln("Recovery failed") + } +} + func (bc *ChainManager) recover() bool { data, _ := bc.blockDb.Get([]byte("checkpoint")) if len(data) != 0 { @@ -261,8 +271,6 @@ func (bc *ChainManager) setLastState() { if len(data) != 0 { block := bc.GetBlock(common.BytesToHash(data)) if block != nil { - bc.blockDb.Put([]byte("checkpoint"), block.Hash().Bytes()) - bc.currentBlock = block bc.lastBlockHash = block.Hash() } else { From 41de1cb723d2eff921da8911e4cf893d8907c178 Mon Sep 17 00:00:00 2001 From: Bas van Kervel <bas@ethdev.com> Date: Wed, 1 Jul 2015 08:23:17 +0200 Subject: [PATCH 137/156] added pipelining support --- rpc/codec/json.go | 35 ++++++++++++++++++++--------------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/rpc/codec/json.go b/rpc/codec/json.go index 0b1a905625..5d60104f7d 100644 --- a/rpc/codec/json.go +++ b/rpc/codec/json.go @@ -18,19 +18,19 @@ const ( // Json serialization support type JsonCodec struct { c net.Conn + d *json.Decoder } // Create new JSON coder instance func NewJsonCoder(conn net.Conn) ApiCoder { return &JsonCodec{ c: conn, + d: json.NewDecoder(conn), } } // Serialize obj to JSON and write it to conn func (self *JsonCodec) ReadRequest() (requests []*shared.Request, isBatch bool, err error) { - bytesInBuffer := 0 - buf := make([]byte, MAX_REQUEST_SIZE) deadline := time.Now().Add(READ_TIMEOUT * time.Second) if err := self.c.SetDeadline(deadline); err != nil { @@ -38,31 +38,36 @@ func (self *JsonCodec) ReadRequest() (requests []*shared.Request, isBatch bool, } for { - n, err := self.c.Read(buf[bytesInBuffer:]) - if err != nil { - self.c.Close() - return nil, false, err - } - - bytesInBuffer += n - + var err error singleRequest := shared.Request{} - err = json.Unmarshal(buf[:bytesInBuffer], &singleRequest) - if err == nil { + if err = self.d.Decode(&singleRequest); err == nil { requests := make([]*shared.Request, 1) requests[0] = &singleRequest return requests, false, nil } + fmt.Printf("err %T %v\n", err) + + if opErr, ok := err.(*net.OpError); ok { + if opErr.Timeout() { + break + } + } + requests = make([]*shared.Request, 0) - err = json.Unmarshal(buf[:bytesInBuffer], &requests) - if err == nil { + if err = self.d.Decode(&requests); err == nil { return requests, true, nil } + + if opErr, ok := err.(*net.OpError); ok { + if opErr.Timeout() { + break + } + } } self.c.Close() // timeout - return nil, false, fmt.Errorf("Unable to read response") + return nil, false, fmt.Errorf("Timeout reading request") } func (self *JsonCodec) ReadResponse() (interface{}, error) { From 1ae80aaf64c5acfde19fee5ee3bc4579db7ea76e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= <peterke@gmail.com> Date: Wed, 1 Jul 2015 11:12:05 +0300 Subject: [PATCH 138/156] eth: fix #1371, double lock during block/txn known set limitation --- eth/peer.go | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/eth/peer.go b/eth/peer.go index c8b8457b9f..088417aab9 100644 --- a/eth/peer.go +++ b/eth/peer.go @@ -94,11 +94,8 @@ func (p *peer) SetTd(td *big.Int) { // never be propagated to this particular peer. func (p *peer) MarkBlock(hash common.Hash) { // If we reached the memory allowance, drop a previously known block hash - if p.knownBlocks.Size() >= maxKnownBlocks { - p.knownBlocks.Each(func(item interface{}) bool { - p.knownBlocks.Remove(item) - return p.knownBlocks.Size() >= maxKnownBlocks - }) + for p.knownBlocks.Size() >= maxKnownBlocks { + p.knownBlocks.Pop() } p.knownBlocks.Add(hash) } @@ -107,11 +104,8 @@ func (p *peer) MarkBlock(hash common.Hash) { // will never be propagated to this particular peer. func (p *peer) MarkTransaction(hash common.Hash) { // If we reached the memory allowance, drop a previously known transaction hash - if p.knownTxs.Size() >= maxKnownTxs { - p.knownTxs.Each(func(item interface{}) bool { - p.knownTxs.Remove(item) - return p.knownTxs.Size() >= maxKnownTxs - }) + for p.knownTxs.Size() >= maxKnownTxs { + p.knownTxs.Pop() } p.knownTxs.Add(hash) } From d6f2c0a76f6635ebeb245815c5f686c545ed527d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= <peterke@gmail.com> Date: Wed, 1 Jul 2015 15:19:11 +0300 Subject: [PATCH 139/156] eth, eth/downloader: fix #1231, DOS vulnerability in hash queueing --- eth/downloader/downloader.go | 18 ++++++++++++++---- eth/handler.go | 2 +- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/eth/downloader/downloader.go b/eth/downloader/downloader.go index ce85aec171..c788048e94 100644 --- a/eth/downloader/downloader.go +++ b/eth/downloader/downloader.go @@ -34,8 +34,9 @@ var ( blockHardTTL = 3 * blockSoftTTL // Maximum time allowance before a block request is considered expired crossCheckCycle = time.Second // Period after which to check for expired cross checks - maxBannedHashes = 4096 // Number of bannable hashes before phasing old ones out - maxBlockProcess = 256 // Number of blocks to import at once into the chain + maxQueuedHashes = 256 * 1024 // Maximum number of hashes to queue for import (DOS protection) + maxBannedHashes = 4096 // Number of bannable hashes before phasing old ones out + maxBlockProcess = 256 // Number of blocks to import at once into the chain ) var ( @@ -780,6 +781,8 @@ func (d *Downloader) fetchHashes(p *peer, from uint64) error { defer timeout.Stop() getHashes := func(from uint64) { + glog.V(logger.Detail).Infof("%v: fetching %d hashes from #%d", p, MaxHashFetch, from) + go p.getAbsHashes(from, MaxHashFetch) timeout.Reset(hashTTL) } @@ -809,16 +812,23 @@ func (d *Downloader) fetchHashes(p *peer, from uint64) error { return nil } // Otherwise insert all the new hashes, aborting in case of junk + glog.V(logger.Detail).Infof("%v: inserting %d hashes from #%d", p, len(hashPack.hashes), from) + inserts := d.queue.Insert(hashPack.hashes, true) if len(inserts) != len(hashPack.hashes) { glog.V(logger.Debug).Infof("%v: stale hashes", p) return errBadPeer } - // Notify the block fetcher of new hashes, and continue fetching + // Notify the block fetcher of new hashes, but stop if queue is full + cont := d.queue.Pending() < maxQueuedHashes select { - case d.processCh <- true: + case d.processCh <- cont: default: } + if !cont { + return nil + } + // Queue not yet full, fetch the next batch from += uint64(len(hashPack.hashes)) getHashes(from) diff --git a/eth/handler.go b/eth/handler.go index 86e8a325fe..59bbb480bf 100644 --- a/eth/handler.go +++ b/eth/handler.go @@ -164,7 +164,7 @@ func (pm *ProtocolManager) newPeer(pv, nv int, p *p2p.Peer, rw p2p.MsgReadWriter // handle is the callback invoked to manage the life cycle of an eth peer. When // this function terminates, the peer is disconnected. func (pm *ProtocolManager) handle(p *peer) error { - glog.V(logger.Debug).Infof("%v: peer connected", p) + glog.V(logger.Debug).Infof("%v: peer connected [%s]", p, p.Name()) // Execute the Ethereum handshake td, head, genesis := pm.chainman.Status() From 70d5d791cc695cff3b3448a1b4b47816a8bbd83f Mon Sep 17 00:00:00 2001 From: Jeffrey Wilcke <geffobscura@gmail.com> Date: Wed, 1 Jul 2015 16:15:02 +0200 Subject: [PATCH 140/156] core, cmd/geth: improved recover functionality `geth recover` now accepts both hashes and numbers using "#" and no longer requires the ethereum instance. --- cmd/geth/main.go | 36 ++++++++++++---- core/chain_manager.go | 86 +++---------------------------------- core/chain_util.go | 98 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 133 insertions(+), 87 deletions(-) create mode 100644 core/chain_util.go diff --git a/cmd/geth/main.go b/cmd/geth/main.go index a7d3a73efb..645f51b9a3 100644 --- a/cmd/geth/main.go +++ b/cmd/geth/main.go @@ -37,7 +37,10 @@ import ( "github.com/ethereum/go-ethereum/accounts" "github.com/ethereum/go-ethereum/cmd/utils" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/eth" + "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/logger" "github.com/ethereum/go-ethereum/logger/glog" "github.com/ethereum/go-ethereum/metrics" @@ -72,10 +75,13 @@ func init() { { Action: blockRecovery, Name: "recover", - Usage: "attempts to recover a corrupted database by setting a new block head by number", + Usage: "attempts to recover a corrupted database by setting a new block by number or hash. See help recover.", Description: ` The recover commands will attempt to read out the last block based on that. + +recover #number recovers by number +recover <hex> recovers by hash `, }, blocktestCommand, @@ -450,17 +456,33 @@ func unlockAccount(ctx *cli.Context, am *accounts.Manager, account string) (pass } func blockRecovery(ctx *cli.Context) { - num := ctx.Args().First() - if len(ctx.Args()) < 1 { - glog.Fatal("recover requires block number") + arg := ctx.Args().First() + if len(ctx.Args()) < 1 && len(arg) > 0 { + glog.Fatal("recover requires block number or hash") } cfg := utils.MakeEthConfig(ClientIdentifier, nodeNameVersion, ctx) - ethereum, err := eth.New(cfg) + blockDb, err := ethdb.NewLDBDatabase(filepath.Join(cfg.DataDir, "blockchain")) if err != nil { - utils.Fatalf("%v", err) + glog.Fatalln("could not open db:", err) } - ethereum.ChainManager().Recover(common.String2Big(num).Uint64()) + + var block *types.Block + if arg[0] == '#' { + block = core.GetBlockByNumber(blockDb, common.String2Big(arg[1:]).Uint64()) + } else { + block = core.GetBlockByHash(blockDb, common.HexToHash(arg)) + } + + if block == nil { + glog.Fatalln("block not found. Recovery failed") + } + + err = core.WriteHead(blockDb, block) + if err != nil { + glog.Fatalln("block write err", err) + } + glog.Infof("Recovery succesful. New HEAD %x\n", block.Hash()) } func startEth(ctx *cli.Context, eth *eth.Ethereum) { diff --git a/core/chain_manager.go b/core/chain_manager.go index a7b57b26ba..70a8b11c67 100644 --- a/core/chain_manager.go +++ b/core/chain_manager.go @@ -1,7 +1,6 @@ package core import ( - "bytes" "fmt" "io" "math/big" @@ -17,7 +16,6 @@ import ( "github.com/ethereum/go-ethereum/logger" "github.com/ethereum/go-ethereum/logger/glog" "github.com/ethereum/go-ethereum/metrics" - "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/pow" "github.com/ethereum/go-ethereum/rlp" "github.com/hashicorp/golang-lru" @@ -40,53 +38,6 @@ const ( checkpointLimit = 200 ) -// CalcDifficulty is the difficulty adjustment algorithm. It returns -// the difficulty that a new block b should have when created at time -// given the parent block's time and difficulty. -func CalcDifficulty(time int64, parentTime int64, parentDiff *big.Int) *big.Int { - diff := new(big.Int) - adjust := new(big.Int).Div(parentDiff, params.DifficultyBoundDivisor) - if big.NewInt(time-parentTime).Cmp(params.DurationLimit) < 0 { - diff.Add(parentDiff, adjust) - } else { - diff.Sub(parentDiff, adjust) - } - if diff.Cmp(params.MinimumDifficulty) < 0 { - return params.MinimumDifficulty - } - return diff -} - -// CalcTD computes the total difficulty of block. -func CalcTD(block, parent *types.Block) *big.Int { - if parent == nil { - return block.Difficulty() - } - d := block.Difficulty() - d.Add(d, parent.Td) - return d -} - -// CalcGasLimit computes the gas limit of the next block after parent. -// The result may be modified by the caller. -func CalcGasLimit(parent *types.Block) *big.Int { - decay := new(big.Int).Div(parent.GasLimit(), params.GasLimitBoundDivisor) - contrib := new(big.Int).Mul(parent.GasUsed(), big.NewInt(3)) - contrib = contrib.Div(contrib, big.NewInt(2)) - contrib = contrib.Div(contrib, params.GasLimitBoundDivisor) - - gl := new(big.Int).Sub(parent.GasLimit(), decay) - gl = gl.Add(gl, contrib) - gl = gl.Add(gl, big.NewInt(1)) - gl.Set(common.BigMax(gl, params.MinGasLimit)) - - if gl.Cmp(params.GenesisGasLimit) < 0 { - gl.Add(parent.GasLimit(), decay) - gl.Set(common.BigMin(gl, params.GenesisGasLimit)) - } - return gl -} - type ChainManager struct { //eth EthManager blockDb common.Database @@ -238,16 +189,6 @@ func (self *ChainManager) setTransState(statedb *state.StateDB) { self.transState = statedb } -func (bc *ChainManager) Recover(num uint64) { - block := bc.GetBlockByNumber(num) - if block != nil { - bc.insert(block) - glog.Infof("Recovery succesful. New HEAD %x\n", block.Hash()) - } else { - glog.Fatalln("Recovery failed") - } -} - func (bc *ChainManager) recover() bool { data, _ := bc.blockDb.Get([]byte("checkpoint")) if len(data) != 0 { @@ -378,12 +319,7 @@ func (self *ChainManager) ExportN(w io.Writer, first uint64, last uint64) error // insert injects a block into the current chain block chain. Note, this function // assumes that the `mu` mutex is held! func (bc *ChainManager) insert(block *types.Block) { - key := append(blockNumPre, block.Number().Bytes()...) - err := bc.blockDb.Put(key, block.Hash().Bytes()) - if err != nil { - glog.Fatal("db write fail:", err) - } - err = bc.blockDb.Put([]byte("LastBlock"), block.Hash().Bytes()) + err := WriteHead(bc.blockDb, block) if err != nil { glog.Fatal("db write fail:", err) } @@ -458,20 +394,15 @@ func (self *ChainManager) GetBlock(hash common.Hash) *types.Block { return block.(*types.Block) } - data, _ := self.blockDb.Get(append(blockHashPre, hash[:]...)) - if len(data) == 0 { - return nil - } - var block types.StorageBlock - if err := rlp.Decode(bytes.NewReader(data), &block); err != nil { - glog.V(logger.Error).Infof("invalid block RLP for hash %x: %v", hash, err) + block := GetBlockByHash(self.blockDb, hash) + if block == nil { return nil } // Add the block to the cache - self.cache.Add(hash, (*types.Block)(&block)) + self.cache.Add(hash, (*types.Block)(block)) - return (*types.Block)(&block) + return (*types.Block)(block) } func (self *ChainManager) GetBlockByNumber(num uint64) *types.Block { @@ -497,12 +428,7 @@ func (self *ChainManager) GetBlocksFromHash(hash common.Hash, n int) (blocks []* // non blocking version func (self *ChainManager) getBlockByNumber(num uint64) *types.Block { - key, _ := self.blockDb.Get(append(blockNumPre, big.NewInt(int64(num)).Bytes()...)) - if len(key) == 0 { - return nil - } - - return self.GetBlock(common.BytesToHash(key)) + return GetBlockByNumber(self.blockDb, num) } func (self *ChainManager) GetUnclesInChain(block *types.Block, length int) (uncles []*types.Header) { diff --git a/core/chain_util.go b/core/chain_util.go new file mode 100644 index 0000000000..8051cc47ab --- /dev/null +++ b/core/chain_util.go @@ -0,0 +1,98 @@ +package core + +import ( + "bytes" + "math/big" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/logger" + "github.com/ethereum/go-ethereum/logger/glog" + "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/rlp" +) + +// CalcDifficulty is the difficulty adjustment algorithm. It returns +// the difficulty that a new block b should have when created at time +// given the parent block's time and difficulty. +func CalcDifficulty(time int64, parentTime int64, parentDiff *big.Int) *big.Int { + diff := new(big.Int) + adjust := new(big.Int).Div(parentDiff, params.DifficultyBoundDivisor) + if big.NewInt(time-parentTime).Cmp(params.DurationLimit) < 0 { + diff.Add(parentDiff, adjust) + } else { + diff.Sub(parentDiff, adjust) + } + if diff.Cmp(params.MinimumDifficulty) < 0 { + return params.MinimumDifficulty + } + return diff +} + +// CalcTD computes the total difficulty of block. +func CalcTD(block, parent *types.Block) *big.Int { + if parent == nil { + return block.Difficulty() + } + d := block.Difficulty() + d.Add(d, parent.Td) + return d +} + +// CalcGasLimit computes the gas limit of the next block after parent. +// The result may be modified by the caller. +func CalcGasLimit(parent *types.Block) *big.Int { + decay := new(big.Int).Div(parent.GasLimit(), params.GasLimitBoundDivisor) + contrib := new(big.Int).Mul(parent.GasUsed(), big.NewInt(3)) + contrib = contrib.Div(contrib, big.NewInt(2)) + contrib = contrib.Div(contrib, params.GasLimitBoundDivisor) + + gl := new(big.Int).Sub(parent.GasLimit(), decay) + gl = gl.Add(gl, contrib) + gl = gl.Add(gl, big.NewInt(1)) + gl.Set(common.BigMax(gl, params.MinGasLimit)) + + if gl.Cmp(params.GenesisGasLimit) < 0 { + gl.Add(parent.GasLimit(), decay) + gl.Set(common.BigMin(gl, params.GenesisGasLimit)) + } + return gl +} + +// GetBlockByHash returns the block corresponding to the hash or nil if not found +func GetBlockByHash(db common.Database, hash common.Hash) *types.Block { + data, _ := db.Get(append(blockHashPre, hash[:]...)) + if len(data) == 0 { + return nil + } + var block types.StorageBlock + if err := rlp.Decode(bytes.NewReader(data), &block); err != nil { + glog.V(logger.Error).Infof("invalid block RLP for hash %x: %v", hash, err) + return nil + } + return (*types.Block)(&block) +} + +// GetBlockByHash returns the canonical block by number or nil if not found +func GetBlockByNumber(db common.Database, number uint64) *types.Block { + key, _ := db.Get(append(blockNumPre, big.NewInt(int64(number)).Bytes()...)) + if len(key) == 0 { + return nil + } + + return GetBlockByHash(db, common.BytesToHash(key)) +} + +// WriteHead force writes the current head +func WriteHead(db common.Database, block *types.Block) error { + key := append(blockNumPre, block.Number().Bytes()...) + err := db.Put(key, block.Hash().Bytes()) + if err != nil { + return err + } + err = db.Put([]byte("LastBlock"), block.Hash().Bytes()) + if err != nil { + return err + } + return nil +} From 529fb7a7d76e4c98f825bfcb9f3c1fb40b1d0d1e Mon Sep 17 00:00:00 2001 From: Jeffrey Wilcke <geffobscura@gmail.com> Date: Thu, 2 Jul 2015 11:19:10 +0200 Subject: [PATCH 141/156] core, xeth: core.AddressFromMessage removed => crypto.CreateAddress --- core/state_transition.go | 6 ------ xeth/types.go | 3 ++- xeth/xeth.go | 9 +++++++-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/core/state_transition.go b/core/state_transition.go index e2212dfef1..5611ffd0f4 100644 --- a/core/state_transition.go +++ b/core/state_transition.go @@ -7,7 +7,6 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/vm" - "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/logger" "github.com/ethereum/go-ethereum/logger/glog" "github.com/ethereum/go-ethereum/params" @@ -56,11 +55,6 @@ type Message interface { Data() []byte } -func AddressFromMessage(msg Message) common.Address { - from, _ := msg.From() - return crypto.CreateAddress(from, msg.Nonce()) -} - func MessageCreatesContract(msg Message) bool { return msg.To() == nil } diff --git a/xeth/types.go b/xeth/types.go index 1d6a0c5cad..cc06a8dcdd 100644 --- a/xeth/types.go +++ b/xeth/types.go @@ -149,7 +149,8 @@ func NewTx(tx *types.Transaction) *Transaction { if to := tx.To(); to != nil { receiver = to.Hex() } else { - receiver = core.AddressFromMessage(tx).Hex() + from, _ := tx.From() + receiver = crypto.CreateAddress(from, tx.Nonce()).Hex() } createsContract := core.MessageCreatesContract(tx) diff --git a/xeth/xeth.go b/xeth/xeth.go index 0dbedff43e..2a1366fe11 100644 --- a/xeth/xeth.go +++ b/xeth/xeth.go @@ -802,7 +802,12 @@ func (self *XEth) PushTx(encodedTx string) (string, error) { } if tx.To() == nil { - addr := core.AddressFromMessage(tx) + from, err := tx.From() + if err != nil { + return "", err + } + + addr := crypto.CreateAddress(from, tx.Nonce()) glog.V(logger.Info).Infof("Tx(%x) created: %x\n", tx.Hash(), addr) return addr.Hex(), nil } else { @@ -969,7 +974,7 @@ func (self *XEth) Transact(fromStr, toStr, nonceStr, valueStr, gasStr, gasPriceS } if contractCreation { - addr := core.AddressFromMessage(tx) + addr := crypto.CreateAddress(from, nonce) glog.V(logger.Info).Infof("Tx(%x) created: %x\n", tx.Hash(), addr) return addr.Hex(), nil } else { From 744af9f497d25b55246695dec831eb9345401984 Mon Sep 17 00:00:00 2001 From: Vitalik Buterin <v@buterin.com> Date: Thu, 2 Jul 2015 05:27:19 -0400 Subject: [PATCH 142/156] Switched canary addresses --- core/canary.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/core/canary.go b/core/canary.go index de77c4bbaa..90b4a2eafa 100644 --- a/core/canary.go +++ b/core/canary.go @@ -8,10 +8,10 @@ import ( ) var ( - jeff = common.HexToAddress("9d38997c624a71b21278389ea2fdc460d000e4b2") - vitalik = common.HexToAddress("b1e570be07eaa673e4fd0c8265b64ef739385709") - christoph = common.HexToAddress("529bc43a5d93789fa28de1961db6a07e752204ae") - gav = common.HexToAddress("e3e942b2aa524293c84ff6c7f87a6635790ad5e4") + jeff = common.HexToAddress("a8edb1ac2c86d3d9d78f96cd18001f60df29e52c") + vitalik = common.HexToAddress("1baf27b88c48dd02b744999cf3522766929d2b2a") + christoph = common.HexToAddress("60d11b58744784dc97f878f7e3749c0f1381a004") + gav = common.HexToAddress("4bb7e8ae99b645c2b7860b8f3a2328aae28bd80a") ) // Canary will check the 0'd address of the 4 contracts above. From c2590af7fda0c224cab5c0ebcb6973d6da447055 Mon Sep 17 00:00:00 2001 From: Bas van Kervel <bas@ethdev.com> Date: Thu, 2 Jul 2015 15:26:55 +0200 Subject: [PATCH 143/156] prevent discarding requests when parsing fails --- rpc/codec/json.go | 122 ++++++++++++++++++++++------ rpc/codec/json_test.go | 177 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 273 insertions(+), 26 deletions(-) create mode 100644 rpc/codec/json_test.go diff --git a/rpc/codec/json.go b/rpc/codec/json.go index 5d60104f7d..b5ef943809 100644 --- a/rpc/codec/json.go +++ b/rpc/codec/json.go @@ -10,64 +10,134 @@ import ( ) const ( - READ_TIMEOUT = 15 // read timeout in seconds + READ_TIMEOUT = 60 // in seconds MAX_REQUEST_SIZE = 1024 * 1024 MAX_RESPONSE_SIZE = 1024 * 1024 ) +var ( + // No new requests in buffer + EmptyRequestQueueError = fmt.Errorf("No incoming requests") + // Next request in buffer isn't yet complete + IncompleteRequestError = fmt.Errorf("Request incomplete") +) + // Json serialization support type JsonCodec struct { - c net.Conn - d *json.Decoder + c net.Conn + reqBuffer []byte + bytesInReqBuffer int + reqLastPos int } // Create new JSON coder instance func NewJsonCoder(conn net.Conn) ApiCoder { return &JsonCodec{ - c: conn, - d: json.NewDecoder(conn), + c: conn, + reqBuffer: make([]byte, MAX_REQUEST_SIZE), + bytesInReqBuffer: 0, + reqLastPos: 0, + } +} + +// Indication if the next request in the buffer is a batch request +func (self *JsonCodec) isNextBatchReq() (bool, error) { + for i := 0; i < self.bytesInReqBuffer; i++ { + switch self.reqBuffer[i] { + case 0x20, 0x09, 0x0a, 0x0d: // allow leading whitespace (JSON whitespace RFC4627) + continue + case 0x7b: // single req + return false, nil + case 0x5b: // batch req + return true, nil + default: + return false, &json.InvalidUnmarshalError{} + } + } + + return false, EmptyRequestQueueError +} + +// remove parsed request from buffer +func (self *JsonCodec) resetReqbuffer(pos int) { + copy(self.reqBuffer, self.reqBuffer[pos:self.bytesInReqBuffer]) + self.reqLastPos = 0 + self.bytesInReqBuffer -= pos +} + +// parse request in buffer +func (self *JsonCodec) nextRequest() (requests []*shared.Request, isBatch bool, err error) { + if isBatch, err := self.isNextBatchReq(); err == nil { + if isBatch { + requests = make([]*shared.Request, 0) + for ; self.reqLastPos <= self.bytesInReqBuffer; self.reqLastPos++ { + if err = json.Unmarshal(self.reqBuffer[:self.reqLastPos], &requests); err == nil { + self.resetReqbuffer(self.reqLastPos) + return requests, true, nil + } + } + return nil, true, IncompleteRequestError + } else { + request := shared.Request{} + for ; self.reqLastPos <= self.bytesInReqBuffer; self.reqLastPos++ { + if err = json.Unmarshal(self.reqBuffer[:self.reqLastPos], &request); err == nil { + requests := make([]*shared.Request, 1) + requests[0] = &request + self.resetReqbuffer(self.reqLastPos) + return requests, false, nil + } + } + return nil, true, IncompleteRequestError + } + } else { + return nil, false, err } } // Serialize obj to JSON and write it to conn func (self *JsonCodec) ReadRequest() (requests []*shared.Request, isBatch bool, err error) { + if self.bytesInReqBuffer != 0 { + req, batch, err := self.nextRequest() + if err == nil { + return req, batch, err + } + if err != IncompleteRequestError { + return nil, false, err + } + } + + // no/incomplete request in buffer -> read more data first deadline := time.Now().Add(READ_TIMEOUT * time.Second) if err := self.c.SetDeadline(deadline); err != nil { return nil, false, err } + var retErr error for { - var err error - singleRequest := shared.Request{} - if err = self.d.Decode(&singleRequest); err == nil { - requests := make([]*shared.Request, 1) - requests[0] = &singleRequest - return requests, false, nil + n, err := self.c.Read(self.reqBuffer[self.bytesInReqBuffer:]) + if err != nil { + retErr = err + break } - fmt.Printf("err %T %v\n", err) + self.bytesInReqBuffer += n - if opErr, ok := err.(*net.OpError); ok { - if opErr.Timeout() { - break - } + requests, isBatch, err := self.nextRequest() + if err == nil { + return requests, isBatch, nil } - requests = make([]*shared.Request, 0) - if err = self.d.Decode(&requests); err == nil { - return requests, true, nil + if err == IncompleteRequestError || err == EmptyRequestQueueError { + continue // need more data } - if opErr, ok := err.(*net.OpError); ok { - if opErr.Timeout() { - break - } - } + retErr = err + break } - self.c.Close() // timeout - return nil, false, fmt.Errorf("Timeout reading request") + self.c.Close() + return nil, false, retErr } func (self *JsonCodec) ReadResponse() (interface{}, error) { diff --git a/rpc/codec/json_test.go b/rpc/codec/json_test.go new file mode 100644 index 0000000000..60cac05f71 --- /dev/null +++ b/rpc/codec/json_test.go @@ -0,0 +1,177 @@ +package codec + +import ( + "bytes" + "io" + "net" + "testing" + "time" +) + +type jsonTestConn struct { + buffer *bytes.Buffer +} + +func newJsonTestConn(data []byte) *jsonTestConn { + return &jsonTestConn{ + buffer: bytes.NewBuffer(data), + } +} + +func (self *jsonTestConn) Read(p []byte) (n int, err error) { + return self.buffer.Read(p) +} + +func (self *jsonTestConn) Write(p []byte) (n int, err error) { + return self.buffer.Write(p) +} + +func (self *jsonTestConn) Close() error { + // not implemented + return nil +} + +func (self *jsonTestConn) LocalAddr() net.Addr { + // not implemented + return nil +} + +func (self *jsonTestConn) RemoteAddr() net.Addr { + // not implemented + return nil +} + +func (self *jsonTestConn) SetDeadline(t time.Time) error { + return nil +} + +func (self *jsonTestConn) SetReadDeadline(t time.Time) error { + return nil +} + +func (self *jsonTestConn) SetWriteDeadline(t time.Time) error { + return nil +} + +func TestJsonDecoderWithValidRequest(t *testing.T) { + reqdata := []byte(`{"jsonrpc":"2.0","method":"modules","params":[],"id":64}`) + decoder := newJsonTestConn(reqdata) + + jsonDecoder := NewJsonCoder(decoder) + requests, batch, err := jsonDecoder.ReadRequest() + + if err != nil { + t.Errorf("Read valid request failed - %v", err) + } + + if len(requests) != 1 { + t.Errorf("Expected to get a single request but got %d", len(requests)) + } + + if batch { + t.Errorf("Got batch indication while expecting single request") + } + + if requests[0].Id != float64(64) { + t.Errorf("Expected req.Id == 64 but got %v", requests[0].Id) + } + + if requests[0].Method != "modules" { + t.Errorf("Expected req.Method == 'modules' got '%s'", requests[0].Method) + } +} + +func TestJsonDecoderWithValidBatchRequest(t *testing.T) { + reqdata := []byte(`[{"jsonrpc":"2.0","method":"modules","params":[],"id":64}, + {"jsonrpc":"2.0","method":"modules","params":[],"id":64}]`) + decoder := newJsonTestConn(reqdata) + + jsonDecoder := NewJsonCoder(decoder) + requests, batch, err := jsonDecoder.ReadRequest() + + if err != nil { + t.Errorf("Read valid batch request failed - %v", err) + } + + if len(requests) != 2 { + t.Errorf("Expected to get two requests but got %d", len(requests)) + } + + if !batch { + t.Errorf("Got no batch indication while expecting batch request") + } + + for i := 0; i < len(requests); i++ { + if requests[i].Id != float64(64) { + t.Errorf("Expected req.Id == 64 but got %v", requests[i].Id) + } + + if requests[i].Method != "modules" { + t.Errorf("Expected req.Method == 'modules' got '%s'", requests[i].Method) + } + } +} + +func TestJsonDecoderWithIncompleteMessage(t *testing.T) { + reqdata := []byte(`{"jsonrpc":"2.0","method":"modules","pa`) + decoder := newJsonTestConn(reqdata) + + jsonDecoder := NewJsonCoder(decoder) + requests, batch, err := jsonDecoder.ReadRequest() + + if err != io.EOF { + t.Errorf("Expected to read an incomplete request err but got %v", err) + } + + // remaining message + decoder.Write([]byte(`rams":[],"id":64}`)) + requests, batch, err = jsonDecoder.ReadRequest() + + if err != nil { + t.Errorf("Read valid request failed - %v", err) + } + + if len(requests) != 1 { + t.Errorf("Expected to get a single request but got %d", len(requests)) + } + + if batch { + t.Errorf("Got batch indication while expecting single request") + } + + if requests[0].Id != float64(64) { + t.Errorf("Expected req.Id == 64 but got %v", requests[0].Id) + } + + if requests[0].Method != "modules" { + t.Errorf("Expected req.Method == 'modules' got '%s'", requests[0].Method) + } +} + +func TestJsonDecoderWithInvalidIncompleteMessage(t *testing.T) { + reqdata := []byte(`{"jsonrpc":"2.0","method":"modules","pa`) + decoder := newJsonTestConn(reqdata) + + jsonDecoder := NewJsonCoder(decoder) + requests, batch, err := jsonDecoder.ReadRequest() + + if err != io.EOF { + t.Errorf("Expected to read an incomplete request err but got %v", err) + } + + // remaining message + decoder.Write([]byte(`rams":[],"id:64"}`)) + requests, batch, err = jsonDecoder.ReadRequest() + + if err == nil { + t.Errorf("Expected an error but got nil") + } + + if len(requests) != 0 { + t.Errorf("Expected to get no requests but got %d", len(requests)) + } + + if batch { + t.Errorf("Got batch indication while expecting non batch") + } +} From 89525fcb4e6dcd180ce231e2addb739bf0f9dbc5 Mon Sep 17 00:00:00 2001 From: Bas van Kervel <bas@ethdev.com> Date: Thu, 2 Jul 2015 17:20:58 +0200 Subject: [PATCH 144/156] ipcpath issue fix --- cmd/utils/flags.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index 0d59980ec2..f9458f346a 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -438,17 +438,17 @@ func MakeAccountManager(ctx *cli.Context) *accounts.Manager { func IpcSocketPath(ctx *cli.Context) (ipcpath string) { if common.IsWindows() { ipcpath = common.DefaultIpcPath() - if ipcpath != ctx.GlobalString(IPCPathFlag.Name) { + if ctx.GlobalIsSet(IPCPathFlag.Name) { ipcpath = ctx.GlobalString(IPCPathFlag.Name) } } else { ipcpath = common.DefaultIpcPath() - if ctx.GlobalString(IPCPathFlag.Name) != common.DefaultIpcPath() { - ipcpath = ctx.GlobalString(IPCPathFlag.Name) - } else if ctx.GlobalString(DataDirFlag.Name) != "" && - ctx.GlobalString(DataDirFlag.Name) != common.DefaultDataDir() { + if ctx.GlobalIsSet(DataDirFlag.Name) { ipcpath = filepath.Join(ctx.GlobalString(DataDirFlag.Name), "geth.ipc") } + if ctx.GlobalIsSet(IPCPathFlag.Name) { + ipcpath = ctx.GlobalString(IPCPathFlag.Name) + } } return From effe9cc2cf7203634b9b418e1e9309911d0f2b00 Mon Sep 17 00:00:00 2001 From: Bas van Kervel <bas@ethdev.com> Date: Wed, 1 Jul 2015 08:23:17 +0200 Subject: [PATCH 145/156] added pipelining support --- rpc/codec/json.go | 35 ++++++++++++++++++++--------------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/rpc/codec/json.go b/rpc/codec/json.go index 0b1a905625..5d60104f7d 100644 --- a/rpc/codec/json.go +++ b/rpc/codec/json.go @@ -18,19 +18,19 @@ const ( // Json serialization support type JsonCodec struct { c net.Conn + d *json.Decoder } // Create new JSON coder instance func NewJsonCoder(conn net.Conn) ApiCoder { return &JsonCodec{ c: conn, + d: json.NewDecoder(conn), } } // Serialize obj to JSON and write it to conn func (self *JsonCodec) ReadRequest() (requests []*shared.Request, isBatch bool, err error) { - bytesInBuffer := 0 - buf := make([]byte, MAX_REQUEST_SIZE) deadline := time.Now().Add(READ_TIMEOUT * time.Second) if err := self.c.SetDeadline(deadline); err != nil { @@ -38,31 +38,36 @@ func (self *JsonCodec) ReadRequest() (requests []*shared.Request, isBatch bool, } for { - n, err := self.c.Read(buf[bytesInBuffer:]) - if err != nil { - self.c.Close() - return nil, false, err - } - - bytesInBuffer += n - + var err error singleRequest := shared.Request{} - err = json.Unmarshal(buf[:bytesInBuffer], &singleRequest) - if err == nil { + if err = self.d.Decode(&singleRequest); err == nil { requests := make([]*shared.Request, 1) requests[0] = &singleRequest return requests, false, nil } + fmt.Printf("err %T %v\n", err) + + if opErr, ok := err.(*net.OpError); ok { + if opErr.Timeout() { + break + } + } + requests = make([]*shared.Request, 0) - err = json.Unmarshal(buf[:bytesInBuffer], &requests) - if err == nil { + if err = self.d.Decode(&requests); err == nil { return requests, true, nil } + + if opErr, ok := err.(*net.OpError); ok { + if opErr.Timeout() { + break + } + } } self.c.Close() // timeout - return nil, false, fmt.Errorf("Unable to read response") + return nil, false, fmt.Errorf("Timeout reading request") } func (self *JsonCodec) ReadResponse() (interface{}, error) { From 6be527dd52f0b40da87a6e2dc372fba5a08dd33a Mon Sep 17 00:00:00 2001 From: Bas van Kervel <bas@ethdev.com> Date: Thu, 2 Jul 2015 15:26:55 +0200 Subject: [PATCH 146/156] prevent discarding requests when parsing fails --- rpc/codec/json.go | 122 ++++++++++++++++++++++------ rpc/codec/json_test.go | 177 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 273 insertions(+), 26 deletions(-) create mode 100644 rpc/codec/json_test.go diff --git a/rpc/codec/json.go b/rpc/codec/json.go index 5d60104f7d..b5ef943809 100644 --- a/rpc/codec/json.go +++ b/rpc/codec/json.go @@ -10,64 +10,134 @@ import ( ) const ( - READ_TIMEOUT = 15 // read timeout in seconds + READ_TIMEOUT = 60 // in seconds MAX_REQUEST_SIZE = 1024 * 1024 MAX_RESPONSE_SIZE = 1024 * 1024 ) +var ( + // No new requests in buffer + EmptyRequestQueueError = fmt.Errorf("No incoming requests") + // Next request in buffer isn't yet complete + IncompleteRequestError = fmt.Errorf("Request incomplete") +) + // Json serialization support type JsonCodec struct { - c net.Conn - d *json.Decoder + c net.Conn + reqBuffer []byte + bytesInReqBuffer int + reqLastPos int } // Create new JSON coder instance func NewJsonCoder(conn net.Conn) ApiCoder { return &JsonCodec{ - c: conn, - d: json.NewDecoder(conn), + c: conn, + reqBuffer: make([]byte, MAX_REQUEST_SIZE), + bytesInReqBuffer: 0, + reqLastPos: 0, + } +} + +// Indication if the next request in the buffer is a batch request +func (self *JsonCodec) isNextBatchReq() (bool, error) { + for i := 0; i < self.bytesInReqBuffer; i++ { + switch self.reqBuffer[i] { + case 0x20, 0x09, 0x0a, 0x0d: // allow leading whitespace (JSON whitespace RFC4627) + continue + case 0x7b: // single req + return false, nil + case 0x5b: // batch req + return true, nil + default: + return false, &json.InvalidUnmarshalError{} + } + } + + return false, EmptyRequestQueueError +} + +// remove parsed request from buffer +func (self *JsonCodec) resetReqbuffer(pos int) { + copy(self.reqBuffer, self.reqBuffer[pos:self.bytesInReqBuffer]) + self.reqLastPos = 0 + self.bytesInReqBuffer -= pos +} + +// parse request in buffer +func (self *JsonCodec) nextRequest() (requests []*shared.Request, isBatch bool, err error) { + if isBatch, err := self.isNextBatchReq(); err == nil { + if isBatch { + requests = make([]*shared.Request, 0) + for ; self.reqLastPos <= self.bytesInReqBuffer; self.reqLastPos++ { + if err = json.Unmarshal(self.reqBuffer[:self.reqLastPos], &requests); err == nil { + self.resetReqbuffer(self.reqLastPos) + return requests, true, nil + } + } + return nil, true, IncompleteRequestError + } else { + request := shared.Request{} + for ; self.reqLastPos <= self.bytesInReqBuffer; self.reqLastPos++ { + if err = json.Unmarshal(self.reqBuffer[:self.reqLastPos], &request); err == nil { + requests := make([]*shared.Request, 1) + requests[0] = &request + self.resetReqbuffer(self.reqLastPos) + return requests, false, nil + } + } + return nil, true, IncompleteRequestError + } + } else { + return nil, false, err } } // Serialize obj to JSON and write it to conn func (self *JsonCodec) ReadRequest() (requests []*shared.Request, isBatch bool, err error) { + if self.bytesInReqBuffer != 0 { + req, batch, err := self.nextRequest() + if err == nil { + return req, batch, err + } + if err != IncompleteRequestError { + return nil, false, err + } + } + + // no/incomplete request in buffer -> read more data first deadline := time.Now().Add(READ_TIMEOUT * time.Second) if err := self.c.SetDeadline(deadline); err != nil { return nil, false, err } + var retErr error for { - var err error - singleRequest := shared.Request{} - if err = self.d.Decode(&singleRequest); err == nil { - requests := make([]*shared.Request, 1) - requests[0] = &singleRequest - return requests, false, nil + n, err := self.c.Read(self.reqBuffer[self.bytesInReqBuffer:]) + if err != nil { + retErr = err + break } - fmt.Printf("err %T %v\n", err) + self.bytesInReqBuffer += n - if opErr, ok := err.(*net.OpError); ok { - if opErr.Timeout() { - break - } + requests, isBatch, err := self.nextRequest() + if err == nil { + return requests, isBatch, nil } - requests = make([]*shared.Request, 0) - if err = self.d.Decode(&requests); err == nil { - return requests, true, nil + if err == IncompleteRequestError || err == EmptyRequestQueueError { + continue // need more data } - if opErr, ok := err.(*net.OpError); ok { - if opErr.Timeout() { - break - } - } + retErr = err + break } - self.c.Close() // timeout - return nil, false, fmt.Errorf("Timeout reading request") + self.c.Close() + return nil, false, retErr } func (self *JsonCodec) ReadResponse() (interface{}, error) { diff --git a/rpc/codec/json_test.go b/rpc/codec/json_test.go new file mode 100644 index 0000000000..60cac05f71 --- /dev/null +++ b/rpc/codec/json_test.go @@ -0,0 +1,177 @@ +package codec + +import ( + "bytes" + "io" + "net" + "testing" + "time" +) + +type jsonTestConn struct { + buffer *bytes.Buffer +} + +func newJsonTestConn(data []byte) *jsonTestConn { + return &jsonTestConn{ + buffer: bytes.NewBuffer(data), + } +} + +func (self *jsonTestConn) Read(p []byte) (n int, err error) { + return self.buffer.Read(p) +} + +func (self *jsonTestConn) Write(p []byte) (n int, err error) { + return self.buffer.Write(p) +} + +func (self *jsonTestConn) Close() error { + // not implemented + return nil +} + +func (self *jsonTestConn) LocalAddr() net.Addr { + // not implemented + return nil +} + +func (self *jsonTestConn) RemoteAddr() net.Addr { + // not implemented + return nil +} + +func (self *jsonTestConn) SetDeadline(t time.Time) error { + return nil +} + +func (self *jsonTestConn) SetReadDeadline(t time.Time) error { + return nil +} + +func (self *jsonTestConn) SetWriteDeadline(t time.Time) error { + return nil +} + +func TestJsonDecoderWithValidRequest(t *testing.T) { + reqdata := []byte(`{"jsonrpc":"2.0","method":"modules","params":[],"id":64}`) + decoder := newJsonTestConn(reqdata) + + jsonDecoder := NewJsonCoder(decoder) + requests, batch, err := jsonDecoder.ReadRequest() + + if err != nil { + t.Errorf("Read valid request failed - %v", err) + } + + if len(requests) != 1 { + t.Errorf("Expected to get a single request but got %d", len(requests)) + } + + if batch { + t.Errorf("Got batch indication while expecting single request") + } + + if requests[0].Id != float64(64) { + t.Errorf("Expected req.Id == 64 but got %v", requests[0].Id) + } + + if requests[0].Method != "modules" { + t.Errorf("Expected req.Method == 'modules' got '%s'", requests[0].Method) + } +} + +func TestJsonDecoderWithValidBatchRequest(t *testing.T) { + reqdata := []byte(`[{"jsonrpc":"2.0","method":"modules","params":[],"id":64}, + {"jsonrpc":"2.0","method":"modules","params":[],"id":64}]`) + decoder := newJsonTestConn(reqdata) + + jsonDecoder := NewJsonCoder(decoder) + requests, batch, err := jsonDecoder.ReadRequest() + + if err != nil { + t.Errorf("Read valid batch request failed - %v", err) + } + + if len(requests) != 2 { + t.Errorf("Expected to get two requests but got %d", len(requests)) + } + + if !batch { + t.Errorf("Got no batch indication while expecting batch request") + } + + for i := 0; i < len(requests); i++ { + if requests[i].Id != float64(64) { + t.Errorf("Expected req.Id == 64 but got %v", requests[i].Id) + } + + if requests[i].Method != "modules" { + t.Errorf("Expected req.Method == 'modules' got '%s'", requests[i].Method) + } + } +} + +func TestJsonDecoderWithIncompleteMessage(t *testing.T) { + reqdata := []byte(`{"jsonrpc":"2.0","method":"modules","pa`) + decoder := newJsonTestConn(reqdata) + + jsonDecoder := NewJsonCoder(decoder) + requests, batch, err := jsonDecoder.ReadRequest() + + if err != io.EOF { + t.Errorf("Expected to read an incomplete request err but got %v", err) + } + + // remaining message + decoder.Write([]byte(`rams":[],"id":64}`)) + requests, batch, err = jsonDecoder.ReadRequest() + + if err != nil { + t.Errorf("Read valid request failed - %v", err) + } + + if len(requests) != 1 { + t.Errorf("Expected to get a single request but got %d", len(requests)) + } + + if batch { + t.Errorf("Got batch indication while expecting single request") + } + + if requests[0].Id != float64(64) { + t.Errorf("Expected req.Id == 64 but got %v", requests[0].Id) + } + + if requests[0].Method != "modules" { + t.Errorf("Expected req.Method == 'modules' got '%s'", requests[0].Method) + } +} + +func TestJsonDecoderWithInvalidIncompleteMessage(t *testing.T) { + reqdata := []byte(`{"jsonrpc":"2.0","method":"modules","pa`) + decoder := newJsonTestConn(reqdata) + + jsonDecoder := NewJsonCoder(decoder) + requests, batch, err := jsonDecoder.ReadRequest() + + if err != io.EOF { + t.Errorf("Expected to read an incomplete request err but got %v", err) + } + + // remaining message + decoder.Write([]byte(`rams":[],"id:64"}`)) + requests, batch, err = jsonDecoder.ReadRequest() + + if err == nil { + t.Errorf("Expected an error but got nil") + } + + if len(requests) != 0 { + t.Errorf("Expected to get no requests but got %d", len(requests)) + } + + if batch { + t.Errorf("Got batch indication while expecting non batch") + } +} From 56ed4084368e55bbcf9df4d7ef2e24662b8329d9 Mon Sep 17 00:00:00 2001 From: Bas van Kervel <bas@ethdev.com> Date: Thu, 2 Jul 2015 17:20:58 +0200 Subject: [PATCH 147/156] ipcpath issue fix --- cmd/utils/flags.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index 6f319eb407..45164741df 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -432,17 +432,17 @@ func MakeAccountManager(ctx *cli.Context) *accounts.Manager { func IpcSocketPath(ctx *cli.Context) (ipcpath string) { if common.IsWindows() { ipcpath = common.DefaultIpcPath() - if ipcpath != ctx.GlobalString(IPCPathFlag.Name) { + if ctx.GlobalIsSet(IPCPathFlag.Name) { ipcpath = ctx.GlobalString(IPCPathFlag.Name) } } else { ipcpath = common.DefaultIpcPath() - if ctx.GlobalString(IPCPathFlag.Name) != common.DefaultIpcPath() { - ipcpath = ctx.GlobalString(IPCPathFlag.Name) - } else if ctx.GlobalString(DataDirFlag.Name) != "" && - ctx.GlobalString(DataDirFlag.Name) != common.DefaultDataDir() { + if ctx.GlobalIsSet(DataDirFlag.Name) { ipcpath = filepath.Join(ctx.GlobalString(DataDirFlag.Name), "geth.ipc") } + if ctx.GlobalIsSet(IPCPathFlag.Name) { + ipcpath = ctx.GlobalString(IPCPathFlag.Name) + } } return From ff97059a992935d20106af69430f0fdd6376817a Mon Sep 17 00:00:00 2001 From: Gustav Simonsson <gustav.simonsson@gmail.com> Date: Fri, 3 Jul 2015 09:40:07 +0200 Subject: [PATCH 148/156] Update Ethereum JSON tests, skip failing --- tests/block_test_util.go | 2 +- .../BasicTests/RandomRLPTests/example.json | 6 + tests/files/BasicTests/invalidRLPtest.json | 11 + .../files/BlockchainTests/badBlockChain.json | 2199 --------------- .../BlockchainTests/basicBlockChain.json | 894 ------ .../bcBruncleTest.json | 0 .../bcForkBlockTest.json | 129 +- .../bcGasPricerTest.json | 0 .../bcInvalidHeaderTest.json | 275 +- .../bcInvalidRLPTest.json | 2439 ++++++++--------- .../bcRPC_API_Test.json | 0 .../bcTotalDifficultyTest.json | 0 .../bcUncleHeaderValiditiy.json | 0 .../bcUncleTest.json | 0 .../bcValidBlockTest.json | 0 .../bcWalletTest.json | 0 ...=> stPreCompiledContractsTransaction.json} | 28 - tests/files/StateTests/stSpecialTest.json | 441 +++ .../ttWrongRLPTransaction.json | 8 + tests/init.go | 23 +- 20 files changed, 1935 insertions(+), 4520 deletions(-) create mode 100644 tests/files/BasicTests/RandomRLPTests/example.json create mode 100644 tests/files/BasicTests/invalidRLPtest.json delete mode 100644 tests/files/BlockchainTests/badBlockChain.json delete mode 100644 tests/files/BlockchainTests/basicBlockChain.json rename tests/files/{BlockTests => BlockchainTests}/bcBruncleTest.json (100%) rename tests/files/{BlockTests => BlockchainTests}/bcForkBlockTest.json (91%) rename tests/files/{BlockTests => BlockchainTests}/bcGasPricerTest.json (100%) rename tests/files/{BlockTests => BlockchainTests}/bcInvalidHeaderTest.json (76%) rename tests/files/{BlockTests => BlockchainTests}/bcInvalidRLPTest.json (91%) rename tests/files/{BlockTests => BlockchainTests}/bcRPC_API_Test.json (100%) rename tests/files/{BlockTests => BlockchainTests}/bcTotalDifficultyTest.json (100%) rename tests/files/{BlockTests => BlockchainTests}/bcUncleHeaderValiditiy.json (100%) rename tests/files/{BlockTests => BlockchainTests}/bcUncleTest.json (100%) rename tests/files/{BlockTests => BlockchainTests}/bcValidBlockTest.json (100%) rename tests/files/{BlockTests => BlockchainTests}/bcWalletTest.json (100%) rename tests/files/StateTests/{stPrecompiledContractsTransaction.json => stPreCompiledContractsTransaction.json} (99%) diff --git a/tests/block_test_util.go b/tests/block_test_util.go index 450ef86a17..67f6a1d186 100644 --- a/tests/block_test_util.go +++ b/tests/block_test_util.go @@ -129,7 +129,7 @@ func runBlockTests(bt map[string]*BlockTest, skipTests []string) error { // if the test should be skipped, return if skipTest[name] { glog.Infoln("Skipping block test", name) - return nil + continue } // test the block diff --git a/tests/files/BasicTests/RandomRLPTests/example.json b/tests/files/BasicTests/RandomRLPTests/example.json new file mode 100644 index 0000000000..bd1375332e --- /dev/null +++ b/tests/files/BasicTests/RandomRLPTests/example.json @@ -0,0 +1,6 @@ +{ + "listsoflists2": { + "in": [ [], [[]], [ [], [[]] ] ], + "out": "c7c0c1c0c3c0c1c0" + }, +} diff --git a/tests/files/BasicTests/invalidRLPtest.json b/tests/files/BasicTests/invalidRLPtest.json new file mode 100644 index 0000000000..f2acd371d5 --- /dev/null +++ b/tests/files/BasicTests/invalidRLPtest.json @@ -0,0 +1,11 @@ +{ + "int32Overflow": { + "in": "INVALID", + "out": "bf0f000000000000021111" + }, + + "int32Overflow2": { + "in": "INVALID", + "out": "ff0f000000000000021111" + }, +} diff --git a/tests/files/BlockchainTests/badBlockChain.json b/tests/files/BlockchainTests/badBlockChain.json deleted file mode 100644 index 78c5e8c493..0000000000 --- a/tests/files/BlockchainTests/badBlockChain.json +++ /dev/null @@ -1,2199 +0,0 @@ -{ - "lastBlock": "0c2b92f68a67487074ba0f9ba508c191e36a9248a297d9868901e09e58c93d83", - "allotment": { - "dbdbdb2cbd23b783741e8d7fcf51e459b497e4a6": "1606938044258990275541962092341162602522202993782792835301376", - "e4157b34ea9615cfbde6b4fda419828124b70c78": "1606938044258990275541962092341162602522202993782792835301376", - "b9c015918bdaba24b4ff057a92a3873d6eb201be": "1606938044258990275541962092341162602522202993782792835301376", - "6c386a4b26f73c802f34673f7248bb118f97424a": "1606938044258990275541962092341162602522202993782792835301376", - "cd2a3d9f938e13cd947ec05abc7fe734df8dd826": "1606938044258990275541962092341162602522202993782792835301376", - "2ef47100e0787b915105fd5e3f4ff6752079d5cb": "1606938044258990275541962092341162602522202993782792835301376", - "e6716f9544a56c530d868e4bfbacb172315bdead": "1606938044258990275541962092341162602522202993782792835301376", - "1a26338f0d905e295fccb71fa9ea849ffa12aaf4": "1606938044258990275541962092341162602522202993782792835301376" - }, - "blockchain": [{ - "header": { - "parentHash": "efb4db878627027c81b3bb1c7dd3a18dae3914a49cdd24a3e40ab3bbfbb240c5", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "f99eb1626cfa6db435c0836235942d7ccaa935f1ae247d3f1c21e495685f903a", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "023101", - "number": "62", - "gasLimit": "0dddb6", - "gasUsed": "", - "timestamp": "54c98c81", - "extraData": "", - "nonce": "498e88f5c14b0b60d6e14ce9c6cc958cbe16a1df8dd90210e50d2d77562a348d" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "9d0a03fd264306a8ccf624bbd52430c18016dd734f982f8e15a94e27c6a252d5" - }, { - "header": { - "parentHash": "523bac4e339a65c633788637b4821b95cda4729439e46ffcaeb00bc12ca35fc0", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "c30ac3d048843b3fab85e57609ccd90fd283d42fb727b9765f9d7e308c354604", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "023075", - "number": "61", - "gasLimit": "0de12f", - "gasUsed": "", - "timestamp": "54c98c80", - "extraData": "", - "nonce": "87fd834b1c0c5e235e68937c0684b91903d068eccba20fd74492c6154079d898" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "efb4db878627027c81b3bb1c7dd3a18dae3914a49cdd24a3e40ab3bbfbb240c5" - }, { - "header": { - "parentHash": "90dc762139c7a07810e96e75b9f8d38ec04897e0c3ea2e0e062ea513dc76e1b0", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "6b14d4511f992a86dfd917d06ef4c3f8d9780fc8dd57b13b330f1a4373b86930", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "022fea", - "number": "60", - "gasLimit": "0de4a9", - "gasUsed": "", - "timestamp": "54c98c7f", - "extraData": "", - "nonce": "28d1ef86d6bf061198c8352a9bdf7aecfeb9b070fefe74d989fe4328426ed7dc" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "523bac4e339a65c633788637b4821b95cda4729439e46ffcaeb00bc12ca35fc0" - }, { - "header": { - "parentHash": "40fd8550974d39a181ec324d322fdbd087f8072e4e99007a84fdfd48eea5bf72", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "5818d51cb2199e144e38a64bb4f87e57633b79353cef6cd9cfcbe474b890cc10", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "022f5f", - "number": "5f", - "gasLimit": "0de824", - "gasUsed": "", - "timestamp": "54c98c7f", - "extraData": "", - "nonce": "f81bdc0d558853cca741711e8997e79f0993264bc0f3d3b9d083cdb586f51ada" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "90dc762139c7a07810e96e75b9f8d38ec04897e0c3ea2e0e062ea513dc76e1b0" - }, { - "header": { - "parentHash": "d299e0ed543ee6ea7f127bb4ec9f19cbf473ff15594325075e5489587bde5e5c", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "0722ade442f4e78f3fd61d01a050ec5894940fc91aa1c29e896fcd8faa1dd0d1", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "022ed4", - "number": "5e", - "gasLimit": "0deb9f", - "gasUsed": "", - "timestamp": "54c98c7e", - "extraData": "", - "nonce": "94b4f06308ea51ac094af81f27b3531d57ca573bf0f2b623f4d19651bf500ae6" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "40fd8550974d39a181ec324d322fdbd087f8072e4e99007a84fdfd48eea5bf72" - }, { - "header": { - "parentHash": "5f5f95cfe15816cb93c45ba289c32bdcfbb9d362ad4846eb401870ded424ef14", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "60aa5e5c42fae0f72c96341784d2ce5fad83e565b1ceef608ca7004af8177b28", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "022e49", - "number": "5d", - "gasLimit": "0def1b", - "gasUsed": "", - "timestamp": "54c98c7e", - "extraData": "", - "nonce": "62b474d5435b98fc5a63437f5cacb9a9e552b04b396b9c11dc5c4211879a6fd1" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "d299e0ed543ee6ea7f127bb4ec9f19cbf473ff15594325075e5489587bde5e5c" - }, { - "header": { - "parentHash": "27cd17b050683d1aeaff1d42df27612aefb5b99a1599fc9ab3b1dba916d7d463", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "cf1fb7cc0ffb347069ecaa8ae6575654d9bcd7db4651b4f7f187b45a17b5b0b3", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "022dbe", - "number": "5c", - "gasLimit": "0df298", - "gasUsed": "", - "timestamp": "54c98c7e", - "extraData": "", - "nonce": "61f97624a9cf28f1e562ce6c219fc03c438e014473d9cfc97f37793abb243545" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "5f5f95cfe15816cb93c45ba289c32bdcfbb9d362ad4846eb401870ded424ef14" - }, { - "header": { - "parentHash": "0e4e602ac61729a55dd8a4bf51f3bcca6efa3a27b4c9f500608132a1c758b599", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "a3e56405697df9f40bb934b3d6eace9acdab9ebbfcb0ab82803abeb3ef401873", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "022d33", - "number": "5b", - "gasLimit": "0df616", - "gasUsed": "", - "timestamp": "54c98c7d", - "extraData": "", - "nonce": "f4729e513b343b43720087ee1283ea388a1c4a06302c1345704f7c796906b975" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "27cd17b050683d1aeaff1d42df27612aefb5b99a1599fc9ab3b1dba916d7d463" - }, { - "header": { - "parentHash": "81726b10cb92362d8e9035795c8676de782a9e9170b0b33f457f25a5a17d61c5", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "77a50f12bc3381dbfab89569bbd74db2ecd34e5d85882e50b0d3dad910ea41e7", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "022ca8", - "number": "5a", - "gasLimit": "0df995", - "gasUsed": "", - "timestamp": "54c98c7d", - "extraData": "", - "nonce": "2090db40337ee76e5adb2b5993893e3065cb855e62901a3db37f31503cf77c5b" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "0e4e602ac61729a55dd8a4bf51f3bcca6efa3a27b4c9f500608132a1c758b599" - }, { - "header": { - "parentHash": "3a051558f02a29e20485d9af8a3f6b81c8fbdd7eb9c7d7c2d0e0ee3e53d9280f", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "22ceeb6cc06266de275731323b3743865bee95bc049dcca6068ec62dafd52b4b", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "022c1d", - "number": "59", - "gasLimit": "0dfd15", - "gasUsed": "", - "timestamp": "54c98c7c", - "extraData": "", - "nonce": "d341ff9bc499d589d4ac8c923aef1d5247458091d14f5b097e6505cebb95ca25" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "81726b10cb92362d8e9035795c8676de782a9e9170b0b33f457f25a5a17d61c5" - }, { - "header": { - "parentHash": "a7dc7be6b8b568b57ccbe0ce2ee81b9bc8a197dbe9c81c9bfff5860a92124edc", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "64d5c7ede628c6b4da12a61f12ae063af05299986e0e9047ddcbec2642dde4b0", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "022b93", - "number": "58", - "gasLimit": "0e0096", - "gasUsed": "", - "timestamp": "54c98c7c", - "extraData": "", - "nonce": "ec4ce81d8baa04cbe43bb15dc98178f3fb59194e1f3bf3a5808e7d880784bd04" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "3a051558f02a29e20485d9af8a3f6b81c8fbdd7eb9c7d7c2d0e0ee3e53d9280f" - }, { - "header": { - "parentHash": "a3b261bdebd4d35db48fab0800c8bbe7e04635eed74e041f24cbe2cf45dc55ab", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "d01eb17b0ce01d39e1c74c9e811b75364b9d452ffe51109607cecf44f0bdf98f", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "022b09", - "number": "57", - "gasLimit": "0e0418", - "gasUsed": "", - "timestamp": "54c98c7b", - "extraData": "", - "nonce": "4955fe6ea6d96a0eff3037c8d05ae558eb83ddf2a7a359f051446f8c19479f35" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "a7dc7be6b8b568b57ccbe0ce2ee81b9bc8a197dbe9c81c9bfff5860a92124edc" - }, { - "header": { - "parentHash": "000113b18e9085923e2be306d700f8d9ba57488d83d012ddb674c815fcc5bb17", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "5a6c90a2f5d7058362a7f1ebe6ca77995a3992d3d51c129bbde174827a569758", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "022a7f", - "number": "56", - "gasLimit": "0e079a", - "gasUsed": "", - "timestamp": "54c98c7b", - "extraData": "", - "nonce": "e08b1ccd69387af70274b1f3a72a2afa3d6b4d79d1e91aa064123926e37f4cf9" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "a3b261bdebd4d35db48fab0800c8bbe7e04635eed74e041f24cbe2cf45dc55ab" - }, { - "header": { - "parentHash": "76429484ade269578bb7a28ff7e92c6ec078e3b819e34c75d0c82e0b95a16488", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "c447ecc628c2d6a6509bf3b852c2fe859885a078f4cc8fef2281b519e6576c13", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0229f5", - "number": "55", - "gasLimit": "0e0b1d", - "gasUsed": "", - "timestamp": "54c98c7b", - "extraData": "", - "nonce": "07ab0ad4bc2ed97c7bb9ac1b7d95c882ec6439ce7ba72647195bddfeb102fa9a" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "000113b18e9085923e2be306d700f8d9ba57488d83d012ddb674c815fcc5bb17" - }, { - "header": { - "parentHash": "bfafa033596140e379af3982a4f28cfd8131a4f9c83863954480b23ccdc9458f", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "b80df67108df05f8d998ee84189f091d109f6b97ad1072ee53e3a592b0623b96", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "02296b", - "number": "54", - "gasLimit": "0e0ea1", - "gasUsed": "", - "timestamp": "54c98c7a", - "extraData": "", - "nonce": "ffc6f12effbed660aeddd1ec121b7290c8681aef304e9c9f8ea348e38d5192c7" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "76429484ade269578bb7a28ff7e92c6ec078e3b819e34c75d0c82e0b95a16488" - }, { - "header": { - "parentHash": "0be004d005852d6ebf8c5a3dbeb69e92b62fe06f3260ff8b91c2d4bd0c46afa6", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "47e82408711e4d1b9f288d5ccab751080678134470ab8d6e74a0ce3ed0db0924", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0228e1", - "number": "53", - "gasLimit": "0e1226", - "gasUsed": "", - "timestamp": "54c98c79", - "extraData": "", - "nonce": "c94bc871fe80628248629441d8b9e54d8bdbf779d551ac258efa604e3968b799" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "bfafa033596140e379af3982a4f28cfd8131a4f9c83863954480b23ccdc9458f" - }, { - "header": { - "parentHash": "24e79b813db071f910652c6f01e490a6132caf16eef31beea6804d8f5d15f3a9", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "79c789c0a942a0e270223998bba6f3d05c951042f72b19a0f2bf5178d0bde104", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "022857", - "number": "52", - "gasLimit": "0e15ac", - "gasUsed": "", - "timestamp": "54c98c79", - "extraData": "", - "nonce": "c373fb1792b9eb121d44c3fc302e2b6b5065cf41cf1ae77340fb76a35205bef1" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "0be004d005852d6ebf8c5a3dbeb69e92b62fe06f3260ff8b91c2d4bd0c46afa6" - }, { - "header": { - "parentHash": "04ce7d40402b418db6a332a6471a2e29aefebd51db685c3f28c75ed53ec97e94", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "5e5ca4d3a13872d1ca94ad005ae039466740cd30c093962dcd81bace34d01500", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0227ce", - "number": "51", - "gasLimit": "0e1933", - "gasUsed": "", - "timestamp": "54c98c78", - "extraData": "", - "nonce": "08175d9f2734ffb36911eb322a0a13122d4011fc0b66cbe5fd723b75e73471f7" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "24e79b813db071f910652c6f01e490a6132caf16eef31beea6804d8f5d15f3a9" - }, { - "header": { - "parentHash": "6432eafb41189f81e590b3e5cc07f252475ddbae1d2ca902c47c1083f1f2ff8f", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "b99171cad003f8ec8bcb8655b6446aed8bc8428490e07fd1aa0aeda179677433", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "022745", - "number": "50", - "gasLimit": "0e1cbb", - "gasUsed": "", - "timestamp": "54c98c77", - "extraData": "", - "nonce": "2dbae7c0eb18d09f48732dd481f8207a85e0fb107930e818c06f6f863237fbc4" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "04ce7d40402b418db6a332a6471a2e29aefebd51db685c3f28c75ed53ec97e94" - }, { - "header": { - "parentHash": "661dae1ee382fdda2be7860ab952e204b6283c548bc734d990300ac55ccda7b8", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "2895ad76b2d2236159799ab925d14d31999c50f2b583552dbf7e7fdc2c1b5aa7", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0226bc", - "number": "4f", - "gasLimit": "0e2044", - "gasUsed": "", - "timestamp": "54c98c76", - "extraData": "", - "nonce": "f1e9d21a798d110ab23c6268736d48f9dafcb57219f6d7ba0f768d1dc65b2ec2" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "6432eafb41189f81e590b3e5cc07f252475ddbae1d2ca902c47c1083f1f2ff8f" - }, { - "header": { - "parentHash": "69f32855ac3f05a5ffb7bf0839c229de52d76ae0422b96b13136855815cca2be", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "dad07ce70ae005894abfd7ce2402dfd509283d395419e511f66b9d70cdc31026", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "022633", - "number": "4e", - "gasLimit": "0e23cd", - "gasUsed": "", - "timestamp": "54c98c76", - "extraData": "", - "nonce": "ef51b1d3e52e74ab7b001bc6c50493ad2632fec515d1f666b011d37d93afd2a8" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "661dae1ee382fdda2be7860ab952e204b6283c548bc734d990300ac55ccda7b8" - }, { - "header": { - "parentHash": "4e83187cdc11690ab547a651b2ecfa23baf534250b946204c55fb10cbaddebd5", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "5b1f6761135cba05743aeb1652d91caae70e7cf8f82b23b86f1a1c8f662914f8", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0225aa", - "number": "4d", - "gasLimit": "0e2757", - "gasUsed": "", - "timestamp": "54c98c76", - "extraData": "", - "nonce": "c65b51031898dadca0a3c9b20ca6584f21c04b160482910c17fe888f52fc5413" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "69f32855ac3f05a5ffb7bf0839c229de52d76ae0422b96b13136855815cca2be" - }, { - "header": { - "parentHash": "e24106a4e8345312cf3139b89cd83f3af95c946ba400836fbb2ef714e0fe660c", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "4f28111e669376d3595d3c626541e614f8af84a06fbe846b9b26f6bea85b1737", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "022521", - "number": "4c", - "gasLimit": "0e2ae2", - "gasUsed": "", - "timestamp": "54c98c75", - "extraData": "", - "nonce": "39c4683f200155eabca14a32b4d4578a99771df81e2b854690ce6005b0fba6b4" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "4e83187cdc11690ab547a651b2ecfa23baf534250b946204c55fb10cbaddebd5" - }, { - "header": { - "parentHash": "74fc9ef6e244ba7dae7b75651cdd83dd1af68f6a39c7d0a45ec897df37427ef8", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "3d19404aaa521d99d72fc669a722cad5aa8de1e4d8c8cb03baadce429834df9b", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "022498", - "number": "4b", - "gasLimit": "0e2e6e", - "gasUsed": "", - "timestamp": "54c98c75", - "extraData": "", - "nonce": "4c3158dae3154260d3fdde0f817a7e436c4096bc8769b3096e8c85e3e76fff7f" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "e24106a4e8345312cf3139b89cd83f3af95c946ba400836fbb2ef714e0fe660c" - }, { - "header": { - "parentHash": "fab619c676eec1db8f92ee444f10313ed1a3710ec5295ec51425b32649b4b0e7", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "28aba7e7912b652381231a17679afee5b5c8a17e700e967ad9b5fecd06d21911", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "02240f", - "number": "4a", - "gasLimit": "0e31fb", - "gasUsed": "", - "timestamp": "54c98c74", - "extraData": "", - "nonce": "3e16fdfac5702b481e9dfb323b1934c741f4e10a0c0a9f7933d77b8fa7f38ae8" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "74fc9ef6e244ba7dae7b75651cdd83dd1af68f6a39c7d0a45ec897df37427ef8" - }, { - "header": { - "parentHash": "c8b564670d6d64bdcd11e8ab55d980458827992425133a51575f4ce2936c3f1b", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "f5b4c19c6f81349d96eb194b5b2a8613cb53c32c79628c3b2bd0c04dd58b9cf9", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "022387", - "number": "49", - "gasLimit": "0e3589", - "gasUsed": "", - "timestamp": "54c98c74", - "extraData": "", - "nonce": "f6eb0c5df257996b3d32efb86a82ae5c19649fd64c08c5a8bc4f3827df3b5b47" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "fab619c676eec1db8f92ee444f10313ed1a3710ec5295ec51425b32649b4b0e7" - }, { - "header": { - "parentHash": "3222ffebe8a05ab862fcae38609dae4212e6c882ee7692efdec07337fb8a40ed", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "3ef352bfb6bfd362d4e99cb15d51ffc68781503b409620d1c44f9066fcf8638e", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0222ff", - "number": "48", - "gasLimit": "0e3918", - "gasUsed": "", - "timestamp": "54c98c73", - "extraData": "", - "nonce": "b41dbf684ece68de88e7b4090484c779117c0eb891bb80ebdd6aec39e6ae26fb" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "c8b564670d6d64bdcd11e8ab55d980458827992425133a51575f4ce2936c3f1b" - }, { - "header": { - "parentHash": "f24268482418d4f142dce9a0530af152d35f77a55a490fda5028f4fe2506a8a2", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "60ca1d0a20f9181e2e6985ea3a9bf57955011092ba0c1e2ff7f35c5dd3ae14f2", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "022277", - "number": "47", - "gasLimit": "0e3ca8", - "gasUsed": "", - "timestamp": "54c98c72", - "extraData": "", - "nonce": "76d7242c2f8181e2aaecf92e7986637c32df07309e2bd2d4853a4e69a1d807e6" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "3222ffebe8a05ab862fcae38609dae4212e6c882ee7692efdec07337fb8a40ed" - }, { - "header": { - "parentHash": "d6f6a3b213cda00ba8f37ac71c42404c9f6e12c55540cbf25e3dffaa15069790", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "16e3755ca138284f3bb76f09b9a92eb1c5d452cb6009fe32ee1a2f3007de7f82", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0221ef", - "number": "46", - "gasLimit": "0e4039", - "gasUsed": "", - "timestamp": "54c98c72", - "extraData": "", - "nonce": "0a538273b51765e82a883a6f5ffe69c12f5b122b6001dadf98644632896924a9" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "f24268482418d4f142dce9a0530af152d35f77a55a490fda5028f4fe2506a8a2" - }, { - "header": { - "parentHash": "a8ab9c367b76d1a9aa0502b8ad25ef5a9a23d0095142c1df9b0fa5ce533b871f", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "c6f6a0172a06957edf03cf1ae1c0c37e195f1e9a3a97652bf9b7878fa1fae0df", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "022167", - "number": "45", - "gasLimit": "0e43ca", - "gasUsed": "", - "timestamp": "54c98c71", - "extraData": "", - "nonce": "cdb088cab6359531e282834eed244bd8ea72fd4f811c9de6e84a202f5a150c4a" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "d6f6a3b213cda00ba8f37ac71c42404c9f6e12c55540cbf25e3dffaa15069790" - }, { - "header": { - "parentHash": "eb10b96e5622bfc814d0003430ad6023c5cb2a48aed6c9d56e9833e269875a69", - "uncleHash": "ff28c31592b9523953c2c75acf91cad55192e6a896e84f2bc3526a45ca2ebc13", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "c98659c362ee2abd9a297f94cabe1d189a598f186f79844127ff5cd5a8e61f2d", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0220df", - "number": "44", - "gasLimit": "0e475c", - "gasUsed": "", - "timestamp": "54c98c70", - "extraData": "", - "nonce": "1b40f6a3183279fbba1f77f2cfbe07714dcc3fa6869dcc0746d72c0aff2bb11f" - }, - "transactions": [], - "uncleHeaders": [{ - "parentHash": "dc153d702e251e17a47053a5e5cd47d86dab5dfb7824dd7299d751134b828bd1", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "0e10772058cc61165d805d2ac89ddc8cb7e89d8aef3e264819c574c2cf0fe20c", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "022057", - "number": "43", - "gasLimit": "0e4aef", - "gasUsed": "", - "timestamp": "54c98c6f", - "extraData": "", - "nonce": "95846f2d756734ff730c3b0d3076abcc21c68ec4dc05375310e4bc52e7825927" - }], - "hash": "a8ab9c367b76d1a9aa0502b8ad25ef5a9a23d0095142c1df9b0fa5ce533b871f" - }, { - "header": { - "parentHash": "dc153d702e251e17a47053a5e5cd47d86dab5dfb7824dd7299d751134b828bd1", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "0e10772058cc61165d805d2ac89ddc8cb7e89d8aef3e264819c574c2cf0fe20c", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "022057", - "number": "43", - "gasLimit": "0e4aef", - "gasUsed": "", - "timestamp": "54c98c6f", - "extraData": "", - "nonce": "8753b25c6345ea98bd53a9f1fa6388b98af7a487bf24ce83873c49fb47a6d179" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "eb10b96e5622bfc814d0003430ad6023c5cb2a48aed6c9d56e9833e269875a69" - }, { - "header": { - "parentHash": "3fa6cb48201f636feef334ca61cfe03ebe61a39af953a0615baf78608ee5b1d5", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "05091ebe9bcf4d3a6853dc719de64afc1e3c644af524eb67f771d8a4a76fe6b0", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "021fd0", - "number": "42", - "gasLimit": "0e4e83", - "gasUsed": "", - "timestamp": "54c98c6e", - "extraData": "", - "nonce": "d9ae4fdcc8477cdf5571b1bbdd29508dcc311a396a0be3280d630e3aaa2365e2" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "dc153d702e251e17a47053a5e5cd47d86dab5dfb7824dd7299d751134b828bd1" - }, { - "header": { - "parentHash": "a52a8c3158f5d4b22c1e40e745e506b75c3b64db0b578867f1161d55e8553235", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "f8b32f66cade9318f8ca9a87eda25a87fe87932e0d6e8e0472c18060f2497548", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "021f49", - "number": "41", - "gasLimit": "0e5218", - "gasUsed": "", - "timestamp": "54c98c6d", - "extraData": "", - "nonce": "a25f8b675a60f4483e62336d987144c6df47fda1beab10c6b5bf73df2d01651c" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "3fa6cb48201f636feef334ca61cfe03ebe61a39af953a0615baf78608ee5b1d5" - }, { - "header": { - "parentHash": "12e8ea2be2e694cab719fb6e62d07b87a0ef4ea0f6ff1dcda472703704eec637", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "ff7d7770dc1aabbdc1641b353499ed53b0684db49b86fb8ae85672a16eb39e7d", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "021ec2", - "number": "40", - "gasLimit": "0e55ae", - "gasUsed": "", - "timestamp": "54c98c6d", - "extraData": "", - "nonce": "35cf7a0ced9e6dc852da2878fd5b388944c649b6f38cd6d93a48eac263776919" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "a52a8c3158f5d4b22c1e40e745e506b75c3b64db0b578867f1161d55e8553235" - }, { - "header": { - "parentHash": "785db22693eee8b645e43fe0a52823218c20b37f3a30951f0ce14e68225c606f", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "970a8a0eef298532fdcd87af0e19ade0177e31a5706ec58094aa2a2caacd368b", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "021e3b", - "number": "3f", - "gasLimit": "0e5945", - "gasUsed": "", - "timestamp": "54c98c6a", - "extraData": "", - "nonce": "536d03af92abebd6b667a43a657c00e7967e91ba261161fca657d91bae7ab807" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "12e8ea2be2e694cab719fb6e62d07b87a0ef4ea0f6ff1dcda472703704eec637" - }, { - "header": { - "parentHash": "421ee7337f96015408826de1071f60e7bdea8c55d5c4940a7698592af8a8943b", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "9e8b305a6453d70cb813b897d00a3572c076813d1f625667ef77c2b6aa602514", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "021db4", - "number": "3e", - "gasLimit": "0e5cdd", - "gasUsed": "", - "timestamp": "54c98c69", - "extraData": "", - "nonce": "de7d05a0409386576450912a75731008907d60559d897fada3414d21ecb8645a" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "785db22693eee8b645e43fe0a52823218c20b37f3a30951f0ce14e68225c606f" - }, { - "header": { - "parentHash": "c6a183fe9b20278088064d73522d46195391e138eee9f626b47b21933c3f5002", - "uncleHash": "64e1d0ef19a993aabfb9848c23b0edae038931f848f21120063dcc777fda9ac3", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "26ce8c56dd770d4e81f402857e3e0c866278dd5c000a5dbe09524d82493bbb08", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "021d2d", - "number": "3d", - "gasLimit": "0e6076", - "gasUsed": "", - "timestamp": "54c98c68", - "extraData": "", - "nonce": "28aa0c93f042c21a1ebb9946e1e2696cce9c986f26b7dfcbf2645d18d854128d" - }, - "transactions": [], - "uncleHeaders": [{ - "parentHash": "6892235a6b7d2a0f1e6cd3d2e406be18ee785954f7067e276e3149fa47700365", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "458f0125ebc7464d6c5b72c98825cbe2b0d57c0b1b0ce9816572fc9035f155d3", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "021ca6", - "number": "3c", - "gasLimit": "0e6410", - "gasUsed": "", - "timestamp": "54c98c68", - "extraData": "", - "nonce": "62bf715e94b1d140f193a27654dc44426ba703375f196254baea58a032bf7628" - }], - "hash": "421ee7337f96015408826de1071f60e7bdea8c55d5c4940a7698592af8a8943b" - }, { - "header": { - "parentHash": "6892235a6b7d2a0f1e6cd3d2e406be18ee785954f7067e276e3149fa47700365", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "458f0125ebc7464d6c5b72c98825cbe2b0d57c0b1b0ce9816572fc9035f155d3", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "021ca6", - "number": "3c", - "gasLimit": "0e6410", - "gasUsed": "", - "timestamp": "54c98c68", - "extraData": "", - "nonce": "fb1b2198615fbdd86475160adc6323a0554e0a536f9949cacbddd8f227d84265" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "c6a183fe9b20278088064d73522d46195391e138eee9f626b47b21933c3f5002" - }, { - "header": { - "parentHash": "7d4306928c9eaf0db49c9cc35b58a360ad88e01bbf3a1a3b0dd9f709f1335c55", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "0c166bf9e1d7d9a7fdda2d99bd61dc2d846599f9f64b547e67e5fe37978b4db7", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "021c1f", - "number": "3b", - "gasLimit": "0e67aa", - "gasUsed": "", - "timestamp": "54c98c68", - "extraData": "", - "nonce": "c1e503401ecbb1456bdf032cd57f40c71a929ce1ff593c8a1457ac786c70144b" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "6892235a6b7d2a0f1e6cd3d2e406be18ee785954f7067e276e3149fa47700365" - }, { - "header": { - "parentHash": "b1c0d480d33a06cbbcd38cee1129c6b622bb67a0e2470dffcebbf60a6b3a5416", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "4d4b2c1a8282c7cb6690d558df8e2a4863a89e3934228499164f35ad9b668fc3", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "021b99", - "number": "3a", - "gasLimit": "0e6b45", - "gasUsed": "", - "timestamp": "54c98c67", - "extraData": "", - "nonce": "b9d55c591661cd5304cce46a8fe0c2b31c6e14519c76c6a20c162abc8616e1ea" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "7d4306928c9eaf0db49c9cc35b58a360ad88e01bbf3a1a3b0dd9f709f1335c55" - }, { - "header": { - "parentHash": "b957579cd20be69ae9a8713e18270fdd1fb56885826f3d794bffa49f95ed4f14", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "84595f9e8c266a5f46b644e5ed0ebddb4eab239909d0b64fc9157d02d1ee2587", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "021b13", - "number": "39", - "gasLimit": "0e6ee1", - "gasUsed": "", - "timestamp": "54c98c66", - "extraData": "", - "nonce": "c057e978ba748d6d8997e4f308b3e006bc101de804548a051393e842584fa1cc" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "b1c0d480d33a06cbbcd38cee1129c6b622bb67a0e2470dffcebbf60a6b3a5416" - }, { - "header": { - "parentHash": "2cababd593a5997464dbff050d075b2e01bcfa4537a1100575149c8f5519d1a1", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "898b7c5d611ecacb4125b7f81c04440fc85bc249aef842bd82829f4b3378cf30", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "021a8d", - "number": "38", - "gasLimit": "0e727e", - "gasUsed": "", - "timestamp": "54c98c66", - "extraData": "", - "nonce": "c1b1785becabee7f8674a5efb228d10bd3c3b0b6fd8e002c458a4ecfe9575470" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "b957579cd20be69ae9a8713e18270fdd1fb56885826f3d794bffa49f95ed4f14" - }, { - "header": { - "parentHash": "5f2d4df15fd3db5e5ed8ead046bd4677cf361f5a262374b206e1939a55d6c182", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "8feea907b706e24d242a29cc3b94e14d36fc60b057ebb51513234df954b21e51", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "021a07", - "number": "37", - "gasLimit": "0e761c", - "gasUsed": "", - "timestamp": "54c98c65", - "extraData": "", - "nonce": "0f316d630c7e1085835c5018b8c6e2d044a46860ff17fddb6282d7129c2cada9" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "2cababd593a5997464dbff050d075b2e01bcfa4537a1100575149c8f5519d1a1" - }, { - "header": { - "parentHash": "12ac8fa01ce4a3f336631416c0fe7df485b4918047f7eeff26af275330132275", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "1b283c328cc419af68dbea0aa782df06ac53836b301db95dfb15d0f637aa3e48", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "021981", - "number": "36", - "gasLimit": "0e79bb", - "gasUsed": "", - "timestamp": "54c98c65", - "extraData": "", - "nonce": "74e3397be3115765acddd77eefa5e926fa8b29f47d407f01b1cbfaf848f9d024" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "5f2d4df15fd3db5e5ed8ead046bd4677cf361f5a262374b206e1939a55d6c182" - }, { - "header": { - "parentHash": "af53e2b46855e3d22c3b6b4b536009f770fca3018e4ea37529131f9bd861ab96", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "08d89e10ffc8ff6a9e95534760d4891fa52e62fbf8b1d3c6780c19947c891735", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0218fb", - "number": "35", - "gasLimit": "0e7d5b", - "gasUsed": "", - "timestamp": "54c98c65", - "extraData": "", - "nonce": "6c75bd40c79abf8cea83c02344555f06cb538a095e5fbfacbc5ba4d3b351b3b9" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "12ac8fa01ce4a3f336631416c0fe7df485b4918047f7eeff26af275330132275" - }, { - "header": { - "parentHash": "058fdd0356f3a26452bf1646430b2d91f8ea108fd57cb65d0bfb3ee6c77f51bc", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "bf8143f5ea2d23e3f1732de8d9fd33dcac64699dfdcc94439cb6a40bba0c2037", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "021875", - "number": "34", - "gasLimit": "0e80fc", - "gasUsed": "", - "timestamp": "54c98c64", - "extraData": "", - "nonce": "550a99bbfc3f58a8bc438ab13beca788259f32e8d4e3f76a87061f265772b9f9" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "af53e2b46855e3d22c3b6b4b536009f770fca3018e4ea37529131f9bd861ab96" - }, { - "header": { - "parentHash": "78e0f15d23ccb3bb92e0d57b0210faf1bd0d4b4d64fc71e886814b5d252a6799", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "4e963999ac25f7766c035d428f00ca5265c9500b9b3bc56b7735248c2b028e88", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0217f0", - "number": "33", - "gasLimit": "0e849e", - "gasUsed": "", - "timestamp": "54c98c63", - "extraData": "", - "nonce": "23b3df147ea9f02a3d5ce43df20bdea91272b92788d82442a879ea6a6dc2489a" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "058fdd0356f3a26452bf1646430b2d91f8ea108fd57cb65d0bfb3ee6c77f51bc" - }, { - "header": { - "parentHash": "a42a84b68fffb25a083a7d17b6964f081f0118945cf147af82a1d1411bfee7f3", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "349b2dd2a10473a8f91bc3d00b835125b8cbc70597574db735da2ab83b2cb257", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "02176b", - "number": "32", - "gasLimit": "0e8841", - "gasUsed": "", - "timestamp": "54c98c62", - "extraData": "", - "nonce": "d9f70ad8787b115c933155f5bda5299f29c616c4276e482735657c12ddb2928a" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "78e0f15d23ccb3bb92e0d57b0210faf1bd0d4b4d64fc71e886814b5d252a6799" - }, { - "header": { - "parentHash": "6cf8d1d50422a97195bc6d3bd3470db121f401805a67e5869047f90eacf640aa", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "379865ad34931528b1cb15ff374b803e90b49877d2cd78c1b90eff8b99451d38", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0216e6", - "number": "31", - "gasLimit": "0e8be4", - "gasUsed": "", - "timestamp": "54c98c61", - "extraData": "", - "nonce": "580af2e26906706e26cd0ef6e0c896a15251c88b897e2f8a076de01f7f7044df" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "a42a84b68fffb25a083a7d17b6964f081f0118945cf147af82a1d1411bfee7f3" - }, { - "header": { - "parentHash": "e099bb490084aac1cdfd08afe6f509fed6ef2e11f2e0159c31661122a7a2ea48", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "7dc6c00408bf34db5bfb61d749418cfa93572f79e739baa25ce5b9ae749643b6", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "021661", - "number": "30", - "gasLimit": "0e8f88", - "gasUsed": "", - "timestamp": "54c98c61", - "extraData": "", - "nonce": "58592a2a6dc9b193cc545e66f19f0f269052c1694cd6250e7f9195b8c241fbb1" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "6cf8d1d50422a97195bc6d3bd3470db121f401805a67e5869047f90eacf640aa" - }, { - "header": { - "parentHash": "ece1239dd071192b071e9b16bf539a53e626481967f90f339151f1017ce8aa31", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "d9b3a3b7fa49ce31eac3158b2f0caea24251617e00005b9bb15b9d71b8e7c65f", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0215dc", - "number": "2f", - "gasLimit": "0e932d", - "gasUsed": "", - "timestamp": "54c98c60", - "extraData": "", - "nonce": "9fdf18bfa76399277a7c528a46cd1beedae6f6b4a4c4e52ab57cbb3a9c8ca142" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "e099bb490084aac1cdfd08afe6f509fed6ef2e11f2e0159c31661122a7a2ea48" - }, { - "header": { - "parentHash": "cbe0cbe7e7648adf2918857a3b1c796ab2b612d61ab1e1077e6482356d3dae5f", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "0f5cf5a746f2dea05a1372164630d49751dd38bf3977403bd54c9d34d590f05d", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "021557", - "number": "2e", - "gasLimit": "0e96d3", - "gasUsed": "", - "timestamp": "54c98c5f", - "extraData": "", - "nonce": "d0244e94ccd310fc90b888af62eb08d84d260e22b5ee5c0889843af449a23012" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "ece1239dd071192b071e9b16bf539a53e626481967f90f339151f1017ce8aa31" - }, { - "header": { - "parentHash": "e4c941559cd6156704526b7d0fc980ac5ec78604ceb7b23d9575416164aa20b1", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "172f5aaeecb2eb175b6281e0b12274a9ad2bd9b2a3fd6aff8de397267d35137d", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0214d2", - "number": "2d", - "gasLimit": "0e9a7a", - "gasUsed": "", - "timestamp": "54c98c5f", - "extraData": "", - "nonce": "6e556bf0a092b89f489cf4c96b06154b11ab788c7efe9f9f9f3ded27fa6ceade" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "cbe0cbe7e7648adf2918857a3b1c796ab2b612d61ab1e1077e6482356d3dae5f" - }, { - "header": { - "parentHash": "adfcbf18ddea49eeed8be1dd1a830a1e7a3d1c3e73e9fb4feb2bc41b740cb59a", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "07827d6b56fbf14cf7b413b7cef95dc35219f490ab9c60dd33922a42c1b0e0b2", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "02144d", - "number": "2c", - "gasLimit": "0e9e22", - "gasUsed": "", - "timestamp": "54c98c5e", - "extraData": "", - "nonce": "aabfc84d1ff2785df977b9c30231fc568efbb98098be1e4c91f497746ceffaad" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "e4c941559cd6156704526b7d0fc980ac5ec78604ceb7b23d9575416164aa20b1" - }, { - "header": { - "parentHash": "405c0a75cf81bdf287d3491c8539f586cbf7ab947c752139dceec10b1c4a979f", - "uncleHash": "c1e8ce6f2c6bd9a4ac7571ea744d96c335e4e166064a20d8cd780ebd735ecd92", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "0c57738bf8737d790800c2f9a3d0965a9916fd5f956dca3d3f9c4dfd33bc5f5c", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0213c9", - "number": "2b", - "gasLimit": "0ea1cb", - "gasUsed": "", - "timestamp": "54c98c5d", - "extraData": "", - "nonce": "9fea0da34dce2af6612fb76eecab6e28429018591dbd903d7a83b609715938cf" - }, - "transactions": [], - "uncleHeaders": [{ - "parentHash": "154b4705d7e62ab88d010b727b08c97f0c83693bbaf6e3cf515dfde547f9222d", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "ab4e9e105c9c02ffe52d2834dbc7dfcc9c10b2552a35f28b7206345d195dcac9", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "021345", - "number": "2a", - "gasLimit": "0ea575", - "gasUsed": "", - "timestamp": "54c98c5d", - "extraData": "", - "nonce": "e17e8547ff6422bdca5e756e6d8d71969353e3943dc086f48eefa246282dcedb" - }], - "hash": "adfcbf18ddea49eeed8be1dd1a830a1e7a3d1c3e73e9fb4feb2bc41b740cb59a" - }, { - "header": { - "parentHash": "154b4705d7e62ab88d010b727b08c97f0c83693bbaf6e3cf515dfde547f9222d", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "ab4e9e105c9c02ffe52d2834dbc7dfcc9c10b2552a35f28b7206345d195dcac9", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "021345", - "number": "2a", - "gasLimit": "0ea575", - "gasUsed": "", - "timestamp": "54c98c5d", - "extraData": "", - "nonce": "7c3e7f1ee10049b273f693085d8b07888dffefd8d23a357fb93a340a6c03a503" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "405c0a75cf81bdf287d3491c8539f586cbf7ab947c752139dceec10b1c4a979f" - }, { - "header": { - "parentHash": "ac0545587c51fc7eb96fb4cd908f9c3e4dd118be337ded8d80359bed8404ff98", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "221aad57cb9bea1901a3b6022419d53e1b0a0db76bc9381f0d50228986c8681b", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0212c1", - "number": "29", - "gasLimit": "0ea920", - "gasUsed": "", - "timestamp": "54c98c5d", - "extraData": "", - "nonce": "afabefe7da000f2923838826701b6657dc1bc5e5ff8af35a58e8199b3d4b95e5" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "154b4705d7e62ab88d010b727b08c97f0c83693bbaf6e3cf515dfde547f9222d" - }, { - "header": { - "parentHash": "8839be302b043e308c026f5dcc578ea786df70b1c0fda99594b1383f6d629f87", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "1bd06d16cc71d71a28438c8ad36948029c563da5028f96a40d924670dd1e5b1e", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "02123d", - "number": "28", - "gasLimit": "0eaccc", - "gasUsed": "", - "timestamp": "54c98c5b", - "extraData": "", - "nonce": "57d951f11711e8e51fae057fcf40cc44ce3d5258b34451da8f01c990a6487701" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "ac0545587c51fc7eb96fb4cd908f9c3e4dd118be337ded8d80359bed8404ff98" - }, { - "header": { - "parentHash": "91b0e99dcfea2d53f742ff4be281afe1d4a2b4b8fbb81e3a5fe1b49ecc542949", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "de180f08e638175d98c5809980889324e53996316fd884208d4112751417060d", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0211b9", - "number": "27", - "gasLimit": "0eb079", - "gasUsed": "", - "timestamp": "54c98c5a", - "extraData": "", - "nonce": "6ea62532b687a79ad319dfd948362a52f51204141741ba6c7cbc33df788cd3c7" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "8839be302b043e308c026f5dcc578ea786df70b1c0fda99594b1383f6d629f87" - }, { - "header": { - "parentHash": "21476e82cf0717b7feeb650a3133248514ba90c7a6c42f720fee8a1c71d7fc84", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "b032cebd73ba40d05c211fc41f88e9325d1eb983bdaff7b018b944db7d4ce4ac", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "021135", - "number": "26", - "gasLimit": "0eb427", - "gasUsed": "", - "timestamp": "54c98c5a", - "extraData": "", - "nonce": "e441ff7c08cf84396f73e05651bdd8043ed90eb20882eca5b1c8b74f19438a64" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "91b0e99dcfea2d53f742ff4be281afe1d4a2b4b8fbb81e3a5fe1b49ecc542949" - }, { - "header": { - "parentHash": "f06d28070c4c694ec1c618ee962cd4e74417334110f468d48374ccd0d3b678d0", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "64e477eca5490d594f01576f40a18491ddf1f6074fe71afb7425194f358afdbd", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0210b1", - "number": "25", - "gasLimit": "0eb7d5", - "gasUsed": "", - "timestamp": "54c98c59", - "extraData": "", - "nonce": "a407a5482700095e367b45f97b0bed1cc7fb14609b383c284844a7f1316bb018" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "21476e82cf0717b7feeb650a3133248514ba90c7a6c42f720fee8a1c71d7fc84" - }, { - "header": { - "parentHash": "7155778d18654f003f38a67db0a835d4f01639fd0863be3520a02f3a1178ed38", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "a61b8aa03e2be1ac7bced9ea977fd4a1376befc80ec5cd65a6edb16549b9b2ad", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "02102d", - "number": "24", - "gasLimit": "0ebb84", - "gasUsed": "", - "timestamp": "54c98c57", - "extraData": "", - "nonce": "4df22750b37fc28fc731df54c4f43e77c897b21caebb565a3a9d190170e5396e" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "f06d28070c4c694ec1c618ee962cd4e74417334110f468d48374ccd0d3b678d0" - }, { - "header": { - "parentHash": "3ef9f35dbb3e78ff849f479d7c649bc372f90b6cc844e7d98d549a6b676aa5c8", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "6b02f078683a3a7a9f356cf0d1c47ac7781d670803783945b75b825730666e73", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "020faa", - "number": "23", - "gasLimit": "0ebf34", - "gasUsed": "", - "timestamp": "54c98c57", - "extraData": "", - "nonce": "9d43fb653d64b3295b2013e49686fc303d21176c931216334c243eea57ba0fea" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "7155778d18654f003f38a67db0a835d4f01639fd0863be3520a02f3a1178ed38" - }, { - "header": { - "parentHash": "0b209c7934e725f0a831b7cb095c066f1b17b314c13180fee673c34d86ccf49e", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "ac5d8bd9b44e7b50390616d058b40eb945be1f60625ab7b7cbb4e1b121697c26", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "020f27", - "number": "22", - "gasLimit": "0ec2e5", - "gasUsed": "", - "timestamp": "54c98c56", - "extraData": "", - "nonce": "687a107881e7bc0555c7fa46befbc043e8ce78526aa5a20a19eeb141788afe1f" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "3ef9f35dbb3e78ff849f479d7c649bc372f90b6cc844e7d98d549a6b676aa5c8" - }, { - "header": { - "parentHash": "a8a86805335c46f9f78a8845a1b15d970901b837addffe7811f5eb8b07d2e7a7", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "16bc622c64a114fd5af498af5c326002c85d40a8c4773af32f64fd8da11f0d76", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "020ea4", - "number": "21", - "gasLimit": "0ec697", - "gasUsed": "", - "timestamp": "54c98c55", - "extraData": "", - "nonce": "905f65010932fb85b030efa4bc39105bb334c6a7f6bcfdb6c3480af5d5cd892d" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "0b209c7934e725f0a831b7cb095c066f1b17b314c13180fee673c34d86ccf49e" - }, { - "header": { - "parentHash": "7a2f883f129132f92a7fcebdea65037930d40a86eec999159f404dd89c18a2b9", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "c9ec7aab1d6c279c977a5bfa3b883c90a9089b8983ebdd912412113a99e25593", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "020e21", - "number": "20", - "gasLimit": "0eca4a", - "gasUsed": "", - "timestamp": "54c98c53", - "extraData": "", - "nonce": "2fcb3b98c11a21821c30e34d0d1b2879912bb2ecabf926a5dd107f1a45c8f5be" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "a8a86805335c46f9f78a8845a1b15d970901b837addffe7811f5eb8b07d2e7a7" - }, { - "header": { - "parentHash": "e74d4f2d0a2d6d0d9074762d6753d564c10b11a14fd72042f3f80854f72b1aaa", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "0646d650dd5f2f0ffe2a048847d66291f92fce67815f2f20dc98bf8f3e2ea2f7", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "020d9e", - "number": "1f", - "gasLimit": "0ecdfe", - "gasUsed": "", - "timestamp": "54c98c52", - "extraData": "", - "nonce": "d61b1e1eb2cf5f1bfeacd8e9d4207249290abec808f11147c760c52853b615f6" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "7a2f883f129132f92a7fcebdea65037930d40a86eec999159f404dd89c18a2b9" - }, { - "header": { - "parentHash": "ce769bd96de6f41295fe58d16e7cbb5b364e6483999c823a1a973ead016380fb", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "4466481666ad9e0d6d14558721d617f22b1211bb0f180732cd7e77ee7dbf076d", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "020d1b", - "number": "1e", - "gasLimit": "0ed1b3", - "gasUsed": "", - "timestamp": "54c98c52", - "extraData": "", - "nonce": "671327dabf9b29918d010c7a42eecb85472452e207d8631233292412bb6bb2d4" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "e74d4f2d0a2d6d0d9074762d6753d564c10b11a14fd72042f3f80854f72b1aaa" - }, { - "header": { - "parentHash": "e212e3e8605f2fa5fecae54cb47eb76cbb0446aebabbcfe7fa85a4318833a4c8", - "uncleHash": "4f4a3aed7cd865e754a46fc4d2a9f011ca8c6c8825bdb16b620826a4da7a2edd", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "7d048a66bf7c5b881f45b365b80aac654b4a0db62e87b406fdae6f8ca688496d", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "020c98", - "number": "1d", - "gasLimit": "0ed569", - "gasUsed": "", - "timestamp": "54c98c51", - "extraData": "", - "nonce": "d7a2b7af129c9f67357b22d827fc9b0a531b2d5c61b982bcbb1eab729ca4f427" - }, - "transactions": [], - "uncleHeaders": [{ - "parentHash": "086ca69ee2bb4acdc2d98e97a9b28bd1073e69bf9d4b6ca34c808cf0322fced6", - "uncleHash": "199a5ac1082648984b669a8c0f2659c1d5ba366e187f18df2cbb7cb1c2a81247", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "43faff75f87987754348eac015d87a6dfe36bb6a61f54210c3e42989b2b36041", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "020c15", - "number": "1c", - "gasLimit": "0ed920", - "gasUsed": "", - "timestamp": "54c98c51", - "extraData": "", - "nonce": "271a8ffab04393a209cc69537afa468e0f52f9270cfd10769f9e9e2379eea518" - }], - "hash": "ce769bd96de6f41295fe58d16e7cbb5b364e6483999c823a1a973ead016380fb" - }, { - "header": { - "parentHash": "086ca69ee2bb4acdc2d98e97a9b28bd1073e69bf9d4b6ca34c808cf0322fced6", - "uncleHash": "199a5ac1082648984b669a8c0f2659c1d5ba366e187f18df2cbb7cb1c2a81247", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "43faff75f87987754348eac015d87a6dfe36bb6a61f54210c3e42989b2b36041", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "020c15", - "number": "1c", - "gasLimit": "0ed920", - "gasUsed": "", - "timestamp": "54c98c51", - "extraData": "", - "nonce": "f247b9f198bc0b964b865f3bdc3eeb35a99a6cb0a7fd69596ed7c41246833474" - }, - "transactions": [], - "uncleHeaders": [{ - "parentHash": "5ecb68b9ac7d36f4aaa85547190e9ed43c9e49a30caa64f7305b27e53609039b", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "32809e393a1cb8e1f926ed39ff7b28595c4d47a10b1584e1c77005b851b4f8fe", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "020b93", - "number": "1b", - "gasLimit": "0edcd8", - "gasUsed": "", - "timestamp": "54c98c4f", - "extraData": "", - "nonce": "d89357fdf5d158f25909dd8a7d25e4380439673330d1f5608ac1bcbf0711ef25" - }], - "hash": "e212e3e8605f2fa5fecae54cb47eb76cbb0446aebabbcfe7fa85a4318833a4c8" - }, { - "header": { - "parentHash": "5ecb68b9ac7d36f4aaa85547190e9ed43c9e49a30caa64f7305b27e53609039b", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "32809e393a1cb8e1f926ed39ff7b28595c4d47a10b1584e1c77005b851b4f8fe", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "020b93", - "number": "1b", - "gasLimit": "0edcd8", - "gasUsed": "", - "timestamp": "54c98c4f", - "extraData": "", - "nonce": "cb1c6295e8b151c14b01e56ebdd8b36a7b820cdf37fb281be528bb25f9aab9d4" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "086ca69ee2bb4acdc2d98e97a9b28bd1073e69bf9d4b6ca34c808cf0322fced6" - }, { - "header": { - "parentHash": "a0705b5845fce7b2b2e019941930dbb82d8903774e345094419069be11c1c22c", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "019a14b6f8ff5fc9c8ed661e7cb4056e729e9867c8f71352508e59c343e77117", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "020b11", - "number": "1a", - "gasLimit": "0ee091", - "gasUsed": "", - "timestamp": "54c98c4e", - "extraData": "", - "nonce": "6e1916ae82930deca8fe6b28e6318244cd4f0765db5bb38d8ee6a8726163a90a" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "5ecb68b9ac7d36f4aaa85547190e9ed43c9e49a30caa64f7305b27e53609039b" - }, { - "header": { - "parentHash": "91ed626750eeff3f7c07c309b38b71f442575072ce18ed94a8487f2659e335a9", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "f09f049bce7a869f8ad54663d8e10b0eb560f8b141dcc927f08af9f8abc6dc0d", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "020a8f", - "number": "19", - "gasLimit": "0ee44b", - "gasUsed": "", - "timestamp": "54c98c4d", - "extraData": "", - "nonce": "918f4628f6c7d79f0c3b8a4d384d3970f9f9ba581d4b45fece506ea9deaf2571" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "a0705b5845fce7b2b2e019941930dbb82d8903774e345094419069be11c1c22c" - }, { - "header": { - "parentHash": "abce0fd799d8b1c6c9e4bfb1fceada61edbf36a23c1a93baabc31fecc225c9fe", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "7ca0df1724fe6ce438feb1e8fe4f52ef315bedefc92f4d3d5dc841498c7d9770", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "020a0d", - "number": "18", - "gasLimit": "0ee806", - "gasUsed": "", - "timestamp": "54c98c4b", - "extraData": "", - "nonce": "d75bcd11f60a52f6bb0dbaf5d2f5744d2c3010a12284a79b0772c20464848c01" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "91ed626750eeff3f7c07c309b38b71f442575072ce18ed94a8487f2659e335a9" - }, { - "header": { - "parentHash": "13fd100334d3cd6ed3ca478d10ac4556a577d5ebb1fc8156a1d92fda7d7d652c", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "af444c45f6f7ca394f562997f705f47bc19e8f8f998e4f479befa4710d68ae7c", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "02098b", - "number": "17", - "gasLimit": "0eebc1", - "gasUsed": "", - "timestamp": "54c98c4a", - "extraData": "", - "nonce": "190b2238adbf8358f2232e3bdf539f215a830fd408c94fe065cb33a647b0ca9b" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "abce0fd799d8b1c6c9e4bfb1fceada61edbf36a23c1a93baabc31fecc225c9fe" - }, { - "header": { - "parentHash": "92bb3c98b0a3bf50ecaef3f1e1f4e6c45f7e789e8bb0a1282195f95dae647457", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "04338b43bc7e7424dcb7889315bf21b630e862893cca3f5dad1ae77f3019e564", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "020909", - "number": "16", - "gasLimit": "0eef7d", - "gasUsed": "", - "timestamp": "54c98c4a", - "extraData": "", - "nonce": "4f453a3030699d8b521053dc3681917bfc678f01cbf91ae150e0c19bb3ca6200" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "13fd100334d3cd6ed3ca478d10ac4556a577d5ebb1fc8156a1d92fda7d7d652c" - }, { - "header": { - "parentHash": "edafeaa77271ba5f11806dd3c9b04197887c875907291a75fd0e111d611a8f8a", - "uncleHash": "abbc1be1540f17e0b6c76412c3e3963ef51b82db00b41ed91780e94cd6bc0a37", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "a400e6a7abd0281275c6df47a18852acf9ace04479beed8eff777c088b42dcb4", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "020887", - "number": "15", - "gasLimit": "0ef33a", - "gasUsed": "", - "timestamp": "54c98c49", - "extraData": "", - "nonce": "e593fd880056aa7ffb39a469397d0674fbd182ac9642b02d8f1761cbbf09b7a3" - }, - "transactions": [], - "uncleHeaders": [{ - "parentHash": "00b132c7f2fc505108e68b50ca20d0d8401e407392f4ca4fdfefdd9e51791c05", - "uncleHash": "14283a8d578976745fe4a4506c21d32050333e6827c6d07ae082f30c63e71ce2", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "8d0b02e51662e344c05941d4c1352d75702e8aea54b1dfa56e89cfea507640c4", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "020805", - "number": "14", - "gasLimit": "0ef6f8", - "gasUsed": "", - "timestamp": "54c98c48", - "extraData": "", - "nonce": "0fb6a33ec259630a235d91aa079458122f9acbcb16868801842eca594903fa60" - }], - "hash": "92bb3c98b0a3bf50ecaef3f1e1f4e6c45f7e789e8bb0a1282195f95dae647457" - }, { - "header": { - "parentHash": "00b132c7f2fc505108e68b50ca20d0d8401e407392f4ca4fdfefdd9e51791c05", - "uncleHash": "14283a8d578976745fe4a4506c21d32050333e6827c6d07ae082f30c63e71ce2", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "8d0b02e51662e344c05941d4c1352d75702e8aea54b1dfa56e89cfea507640c4", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "020805", - "number": "14", - "gasLimit": "0ef6f8", - "gasUsed": "", - "timestamp": "54c98c48", - "extraData": "", - "nonce": "668024077bf888e88b12a0806b0d049ce64be59edafddae34689812e05092860" - }, - "transactions": [], - "uncleHeaders": [{ - "parentHash": "978c697f7b46a3d9a13fdb239de7644b5c1aed4e6c6bba153db80215d25b50dd", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "4d04480e4fbddfed00f5d02e5afdeb661ec7dd172929578b6377433893c8fbbf", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "020784", - "number": "13", - "gasLimit": "0efab7", - "gasUsed": "", - "timestamp": "54c98c47", - "extraData": "", - "nonce": "e63f7c980582cabb7b255997b6b593aea6ead59a35b96ae76fce1162015ba84a" - }], - "hash": "edafeaa77271ba5f11806dd3c9b04197887c875907291a75fd0e111d611a8f8a" - }, { - "header": { - "parentHash": "978c697f7b46a3d9a13fdb239de7644b5c1aed4e6c6bba153db80215d25b50dd", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "4d04480e4fbddfed00f5d02e5afdeb661ec7dd172929578b6377433893c8fbbf", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "020784", - "number": "13", - "gasLimit": "0efab7", - "gasUsed": "", - "timestamp": "54c98c47", - "extraData": "", - "nonce": "ed01a8fb5bfa03f68dfd04e017e7c5b4189cc869c2f097150f16b9fed2cbe242" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "00b132c7f2fc505108e68b50ca20d0d8401e407392f4ca4fdfefdd9e51791c05" - }, { - "header": { - "parentHash": "e02a518cc4aebc79097e6887b4358e5867867627d742a738ba03fe31847b0937", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "8d336cdac51e7b6f9ae441fbf8005121ff5fd19f642e7a75f4f0b150cc4225e5", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "020703", - "number": "12", - "gasLimit": "0efe77", - "gasUsed": "", - "timestamp": "54c98c47", - "extraData": "", - "nonce": "c3a28113d0f0830614097aa85d8f489e5b16c472e80274a0cf978ad4abd05292" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "978c697f7b46a3d9a13fdb239de7644b5c1aed4e6c6bba153db80215d25b50dd" - }, { - "header": { - "parentHash": "0c2b92f68a67487074ba0f9ba508c191e36a9248a297d9868901e09e58c93d83", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "23ed6770e626153f0b34d820b5e73adfa2d65e180c27ff72e02342141655403c", - "transactionsTrie": "56e81f171bca55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "020682", - "number": "11", - "gasLimit": "0f0238", - "gasUsed": "", - "timestamp": "54c98c46", - "extraData": "", - "nonce": "23b2f6c22fe30cf1ad56568b7ab5cd5932acff4f9ed327523fdf658ac2ef13fb" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "e02a518cc4aebc79097e6887b4358e5867867627d742a738ba03fe31847b0937" - }, { - "header": { - "parentHash": "c288aeb5d6f5d28441273be039c1b83561cdf280ed3606268fdd75d8d6dc4df7", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "45cfaf48995fd8a55b07887bfd8c673dac5d2be510227622c8e9dd0bdfa656e7", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "020601", - "number": "10", - "gasLimit": "0f05fa", - "gasUsed": "", - "timestamp": "54c98c46", - "extraData": "", - "nonce": "08fb5ba6cf88b2b2af4c85086171047680018a6c680244f169fa73cd6da58aca" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "0c2b92f68a67487074ba0f9ba508c191e36a9248a297d9868901e09e58c93d83" - }, { - "header": { - "parentHash": "ded747ac29138a5d6133d03222cf15c5a3b8ddd1d5c35f9d770003a48b8b740e", - "uncleHash": "d1655d461275bd960d22e2e697e6ba783415eecb8ac3f2bb0cd3ad9d904c740a", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "6c87f841f0aacb7d4ffa66c5b3c5172b26bd73fe7979cb9f166299d3c7bb04bb", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "020580", - "number": "0f", - "gasLimit": "0f09bd", - "gasUsed": "", - "timestamp": "54c98c45", - "extraData": "", - "nonce": "1de51dae01afbb5910d6acdcb7df58912cc91c168cc63fbed7eb4b2332bc1966" - }, - "transactions": [], - "uncleHeaders": [{ - "parentHash": "f2a0b5532d490597480f4975e47181d4be85d8620e2e45d902213be70e27b2c9", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "307bc52f59984d22290b2a401ca82869e7fc2a160d38b66f8d7697021f37c894", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0204ff", - "number": "0e", - "gasLimit": "0f0d81", - "gasUsed": "", - "timestamp": "54c98c45", - "extraData": "", - "nonce": "19ca0cc768f0321a395ba6441d026d9a73a24d4433d9004428e49ade3c24bb38" - }], - "hash": "c288aeb5d6f5d28441273be039c1b83561cdf280ed3606268fdd75d8d6dc4df7" - }, { - "header": { - "parentHash": "f2a0b5532d490597480f4975e47181d4be85d8620e2e45d902213be70e27b2c9", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "307bc52f59984d22290b2a401ca82869e7fc2a160d38b66f8d7697021f37c894", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0204ff", - "number": "0e", - "gasLimit": "0f0d81", - "gasUsed": "", - "timestamp": "54c98c45", - "extraData": "", - "nonce": "2541df78725461b521a887046c45aea551c311bbe6dde879464569c3553d1cc5" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "ded747ac29138a5d6133d03222cf15c5a3b8ddd1d5c35f9d770003a48b8b740e" - }, { - "header": { - "parentHash": "d2c5da1d2c893045c89687bef90b1b5f6dd5b5b48ec285e7a37cdedb082c891b", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "4f116c5af97ee4f6c317166f34de24a763e171df1d11663c7092643296c1d0be", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "02047e", - "number": "0d", - "gasLimit": "0f1146", - "gasUsed": "", - "timestamp": "54c98c45", - "extraData": "", - "nonce": "c771a408d73a99425e8e5c34c328df221e24285c050bdbd45ce6a550aa5946bf" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "f2a0b5532d490597480f4975e47181d4be85d8620e2e45d902213be70e27b2c9" - }, { - "header": { - "parentHash": "4446d5c09320dc46bea5fa6561a2fe1cce6c18b70e6c42e269bd8789625c912f", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "aea1845b078feee175b72ea533dbaf896de44e0ba0a394318262dd12340bf921", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0203fe", - "number": "0c", - "gasLimit": "0f150c", - "gasUsed": "", - "timestamp": "54c98c44", - "extraData": "", - "nonce": "7e1ba0bbe42990e10624325578c948a45ecd1dd55a2b0c95a4eef60e9d1b0558" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "d2c5da1d2c893045c89687bef90b1b5f6dd5b5b48ec285e7a37cdedb082c891b" - }, { - "header": { - "parentHash": "311add2981c7c8cb21f5ceea4ebe250239b0ad013cc98b02b3c38cb6fbdccc09", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "4b0316893bc357368efd5b1dad32ef9f3e1bb65a1d50df9bfb0254c4ff0daad0", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "02037e", - "number": "0b", - "gasLimit": "0f18d3", - "gasUsed": "", - "timestamp": "54c98c44", - "extraData": "", - "nonce": "86f60539080e2033f0954189bd1c195bd9ab44dc09ee66f0f9c102aaa828119d" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "4446d5c09320dc46bea5fa6561a2fe1cce6c18b70e6c42e269bd8789625c912f" - }, { - "header": { - "parentHash": "57c8595e442b7d8d6da27b290b9b49162f5482f9ac3347015634e4a9bffff5b3", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "32e2d89075067acc840e5efc04cd05d3a50dfbf0cc7c35a66be61faeb962f3c8", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0202fe", - "number": "0a", - "gasLimit": "0f1c9b", - "gasUsed": "", - "timestamp": "54c98c42", - "extraData": "", - "nonce": "60dda84f569a4e5ed8d2be8454de24961230cc535047e4eb68c97c06a9ac2e85" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "311add2981c7c8cb21f5ceea4ebe250239b0ad013cc98b02b3c38cb6fbdccc09" - }, { - "header": { - "parentHash": "b1d90d644c04a1f383951bbb6ac813a21f0db0af76cd8acbc4832fa05b3ae32f", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "8df867b3a6a24ab47b123e07af3af51cb66a7b2fd71d7c7e6b3ccafc46ee2910", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "02027e", - "number": "09", - "gasLimit": "0f2064", - "gasUsed": "", - "timestamp": "54c98c42", - "extraData": "", - "nonce": "3a51111ab11894b383623f33ff3bca79763237c60236cabdb9116e8ba97f8af8" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "57c8595e442b7d8d6da27b290b9b49162f5482f9ac3347015634e4a9bffff5b3" - }, { - "header": { - "parentHash": "68ec20bc35a69f48abf23669a98cbe55f0faa1a1760c4ceb28427779adad015d", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "87885daec6cd5d2c12e7caf3479ceae2ff80625deff8e680780e48b05b423881", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0201fe", - "number": "08", - "gasLimit": "0f242e", - "gasUsed": "", - "timestamp": "54c98c41", - "extraData": "", - "nonce": "77e9bedf66653f8178af2deb0d21fead507e7a083fb136186929321265ba8b12" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "b1d90d644c04a1f383951bbb6ac813a21f0db0af76cd8acbc4832fa05b3ae32f" - }, { - "header": { - "parentHash": "b9f39a67afe055ad2dc65765e959ebeeda4431a83d8670210b58e7878b9f717d", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "c0dd0ac9fdf641805cb6de868606eb47c4c05548c94da688373d0eb4178ac95c", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "02017e", - "number": "07", - "gasLimit": "0f27f8", - "gasUsed": "", - "timestamp": "54c98c41", - "extraData": "", - "nonce": "fd373d77d68e238c43c8275d7d70dc8df35a46437b2f0b17abff8b7bf557e03b" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "68ec20bc35a69f48abf23669a98cbe55f0faa1a1760c4ceb28427779adad015d" - }, { - "header": { - "parentHash": "c04ea6045e78d912531e176fdec192f3248f8336b7c851ebbf0f51b18e9ba185", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "5e0e549e0a89bb926ca1254b179a163d06c592277378c9861c344fa4424c42c7", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0200fe", - "number": "06", - "gasLimit": "0f2bc3", - "gasUsed": "", - "timestamp": "54c98c40", - "extraData": "", - "nonce": "652c55ff7c5570f670748c04f8064f74b9e0bf93f11503af7caad334bd38842f" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "b9f39a67afe055ad2dc65765e959ebeeda4431a83d8670210b58e7878b9f717d" - }, { - "header": { - "parentHash": "22a53c1af652b5fa9a55740846f80d1e66ff1340afba9a459dd3b906c647eee4", - "uncleHash": "6e457e10d8df224c4b47b538970627f839960145483a110878da075f22adc7f1", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "854b7c0fe63b0677ae130a997881464aed9736a50d3fd45979863a0186110d09", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "02007e", - "number": "05", - "gasLimit": "0f2f8f", - "gasUsed": "", - "timestamp": "54c98c3f", - "extraData": "", - "nonce": "638f9ce17a9919b44ca3ec64af26cff3e2ede4859bb2ed90cd013ebf9e8c655f" - }, - "transactions": [], - "uncleHeaders": [{ - "parentHash": "6ea79b5de5b0203b34384ace2e8613cca965f4fe5d25a27119df4a144661b7d5", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "17e921e481b7ae367764c9100594ca494845f9c352f0a782852d36ad5a30fa3d", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "01ffff", - "number": "04", - "gasLimit": "0f335c", - "gasUsed": "", - "timestamp": "54c98c3f", - "extraData": "", - "nonce": "b2a3fe54dfd6a74fe885bbc25674f66662b30a02a2e4e6abeb012752fdc2ba6b" - }], - "hash": "c04ea6045e78d912531e176fdec192f3248f8336b7c851ebbf0f51b18e9ba185" - }, { - "header": { - "parentHash": "6ea79b5de5b0203b34384ace2e8613cca965f4fe5d25a27119df4a144661b7d5", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "17e921e481b7ae367764c9100594ca494845f9c352f0a782852d36ad5a30fa3d", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "01ffff", - "number": "04", - "gasLimit": "0f335c", - "gasUsed": "", - "timestamp": "54c98c3f", - "extraData": "", - "nonce": "4d88603ca485ada9342c84f1003d2f877f01c73aa5534c37fa457809d5dc81c6" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "22a53c1af652b5fa9a55740846f80d1e66ff1340afba9a459dd3b906c647eee4" - }, { - "header": { - "parentHash": "da0bc84f4881690dcfbd8cfe5201ae729698e318397ab71df29fb0c42064fd04", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "483d4e48ad679804bd089049626d00c37a632b685f4a314147618a421463ebde", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "01ff80", - "number": "03", - "gasLimit": "0f372a", - "gasUsed": "", - "timestamp": "54c98c3e", - "extraData": "", - "nonce": "2e13f39b771db75c16128b81e3527df1eebdcef22a807036db6daeda440238c7" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "6ea79b5de5b0203b34384ace2e8613cca965f4fe5d25a27119df4a144661b7d5" - }, { - "header": { - "parentHash": "c753d3dc40dce12c4004f84e68f125924f57f655d182b6b3c88bd23b4957aa8b", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "ae79b8ceed8fc796da2e2128764b747f525b8639cce84b8549d876874ab0d8b8", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "01ff01", - "number": "02", - "gasLimit": "0f3af9", - "gasUsed": "", - "timestamp": "54c98c3e", - "extraData": "", - "nonce": "69c4cb5f302e23b248fe31ed3acc69129c33d878642ddd2662f6be218b107811" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "da0bc84f4881690dcfbd8cfe5201ae729698e318397ab71df29fb0c42064fd04" - }, { - "header": { - "parentHash": "c9cb614fddd89b3bc6e2f0ed1f8e58e8a0d826612a607a6151be6f39c991a941", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "8888f1f195afa192cfee860698584c030f4c9db1", - "stateRoot": "e808aa6f1ae98bf6c78f044412a1ec3e374e5ed11399658a5e2a8bdcdff79194", - "transactionsTrie": "02e0e754bed54edb9146793b31a144d982b4011a207879d0aa73044e5da56be9", - "receiptTrie": "3562d8ac0eaeb66147f75edc7309aa72dd04736d459ab715bd9497d6fc01866a", - "bloom": "04010008001000000000010002000002000000050004020000000000200040048000001000000042208003025000000000008500028082002000008040046000", - "difficulty": "01ff80", - "number": "01", - "gasLimit": "0f3e6f", - "gasUsed": "012b50", - "timestamp": "54c98c1a", - "extraData": "", - "nonce": "84eb5c47eef17fe98cb0b39da5ab26c8ccd74c9e8e32eaed1304c1eb43c55009" - }, - "transactions": [{ - "nonce": "", - "gasPrice": "09184e72a000", - "gasLimit": "0f3e6f", - "to": "", - "value": "", - "data": "60056013565b6101918061001d6000396000f35b3360008190555056006001600060e060020a6000350480630a874df61461003a57806341c0e1b514610058578063a02b161e14610066578063dbbdf0831461007757005b610045600435610149565b80600160a060020a031660005260206000f35b610060610161565b60006000f35b6100716004356100d4565b60006000f35b61008560043560243561008b565b60006000f35b600054600160a060020a031632600160a060020a031614156100ac576100b1565b6100d0565b8060018360005260205260406000208190555081600060005260206000a15b5050565b600054600160a060020a031633600160a060020a031614158015610118575033600160a060020a0316600182600052602052604060002054600160a060020a031614155b61012157610126565b610146565b600060018260005260205260406000208190555080600060005260206000a15b50565b60006001826000526020526040600020549050919050565b600054600160a060020a031633600160a060020a0316146101815761018f565b600054600160a060020a0316ff5b56", - "v": "1b", - "r": "d4287e915ebac7a8af390560fa53c8f0b7f13802ba0393d7afa5823c2560ca89", - "s": "ae75db31a34f7e386ad459646de98ec3a1c88cc91b11620b4ffd86871f579942" - }, { - "nonce": "01", - "gasPrice": "09184e72a000", - "gasLimit": "0f2bac", - "to": "", - "value": "", - "data": "6100096001610030565b610011610027565b61001961007b565b610263806101ae6000396000f35b33600081905550565b73c6d9d2cd449a754c494264e1809c50e34d64562b63dbbdf0838060e060020a026000528260045230600160a060020a0316602452600060006044600060008660155a03f150505050565b7f436f6e6669670000000000000000000000000000000000000000000000000000600173c6d9d2cd449a754c494264e1809c50e34d64562b60005260205260406000208190555073c6d9d2cd449a754c494264e1809c50e34d64562b60027f436f6e66696700000000000000000000000000000000000000000000000000006000526020526040600020819055507f4e616d6552656700000000000000000000000000000000000000000000000000600130600160a060020a03166000526020526040600020819055503060027f4e616d655265670000000000000000000000000000000000000000000000000060005260205260406000208190555073c6d9d2cd449a754c494264e1809c50e34d64562b600060005260206000a130600160a060020a0316600060005260206000a156006001600060e060020a6000350480635fd4b08a146100505780636be16bed146100655780639988197f14610076578063e5811b3514610094578063e79a198f146100b2578063f5c57382146100c057005b61005b60043561025c565b8060005260206000f35b6100706004356100d5565b60006000f35b61008160043561021c565b80600160a060020a031660005260206000f35b61009f600435610255565b80600160a060020a031660005260206000f35b6100ba610197565b60006000f35b6100cb600435610234565b8060005260206000f35b6000600282600052602052604060002054600160a060020a031614156100fa576100ff565b610194565b600133600160a060020a03166000526020526040600020546000141561012457610150565b60006002600133600160a060020a03166000526020526040600020546000526020526040600020819055505b80600133600160a060020a03166000526020526040600020819055503360028260005260205260406000208190555033600160a060020a0316600060005260206000a15b50565b6000600133600160a060020a03166000526020526040600020549050806000146101c0576101c5565b610219565b600281600052602052604060002054600160a060020a0316600060005260206000a16000600133600160a060020a031660005260205260406000208190555060006002826000526020526040600020819055505b50565b60006002826000526020526040600020549050919050565b6000600182600160a060020a03166000526020526040600020549050919050565b6000919050565b600091905056", - "v": "1b", - "r": "e44840971732e6de536be0b008229d6ffed7eaa90c75dd2ba689f89887044d2b", - "s": "96a39bfff3ffb67b554fb747a3de15ced81d7aedd7cb902fd945ddab3a8c30d8" - }, { - "nonce": "02", - "gasPrice": "09184e72a000", - "gasLimit": "0f02a8", - "to": "", - "value": "0de0b6b3a7640000", - "data": "6100096002610096565b6100327f47617673696e6f000000000000000000000000000000000000000000000000006100ea565b61003a6100e1565b610042610050565b6105a68061015c6000396000f35b60003411610065576001600481905550610076565b66038d7ea4c6800034046004819055505b600454600333600160a060020a0316600052602052604060002081905550565b73c6d9d2cd449a754c494264e1809c50e34d64562b63dbbdf0838060e060020a026000528260045230600160a060020a0316602452600060006044600060008660155a03f150505050565b33600081905550565b73c6d9d2cd449a754c494264e1809c50e34d64562b630a874df68060e060020a026000526001600452602060006024600060008660155a03f1505050600051600160a060020a0316636be16bed8060e060020a0260005282600452600060006024600060008660155a03f15050505056006001600060e060020a6000350480633a98ef39146100a857806350e3b157146100ba57806353aab434146100cf5780635c7b79f5146100dd5780637ab75718146100ee57806391a0ac6a146101065780639790782714610118578063983f637a1461012a5780639aedabca1461013e578063a2393ff814610150578063aa5ee35414610165578063b2f7914814610176578063cadf338f14610187578063f2a75fe41461019c57005b6100b061059c565b8060005260206000f35b6100c5600435610585565b8060005260206000f35b6100d761043c565b60006000f35b6100e8600435610482565b60006000f35b6100fc600435602435610363565b8060005260206000f35b61010e61052a565b8060005260206000f35b61012061050b565b8060005260206000f35b6101386004356024356101aa565b60006000f35b610146610542565b8060005260206000f35b61015b6004356103f6565b8060005260206000f35b610170600435610204565b60006000f35b6101816004356102bb565b60006000f35b61019260043561056e565b8060005260206000f35b6101a4610411565b60006000f35b34600290815401908190555034600182600052602052604060002081905550816001826000526020526040600020600101819055504360018260005260205260406000206002018190555080600060005260206000a15050565b6000600060008360005260206000209250600060018460005260205260406000205411610230576102b5565b60c86001846000526020526040600020540491508161024f8486610363565b01905033600160a060020a03166000826000600060006000848787f1505050506001836000526020526040600020546002908154039081905550600183600052602052604060002060008155600101600081556001016000905582600060005260206000a15b50505050565b60006001826000526020526040600020541180156102ee5750600181600052602052604060002060020154610100014310155b6102f757610360565b33600160a060020a0316600060c8600184600052602052604060002054046000600060006000848787f150505050600181600052602052604060002054600290815403908190555060018160005260205260406000206000815560010160008155600101600090555b50565b600060018360005260205260406000206002015460ff0143111580156103b85750600183600052602052604060002060010154826001856000526020526040600020600201544060005260206000201860ff16105b6103c1576103f0565b600183600052602052604060002060010154606460018560005260205260406000205460630204610100020490505b92915050565b600061040a82600052602060002083610363565b9050919050565b600054600160a060020a0316600030600160a060020a0316316000600060006000848787f150505050565b600061044734610585565b905080600333600160a060020a031660005260205260406000209081540190819055508060049081540190819055508060005260206000a050565b6000600333600160a060020a03166000526020526040600020548211156104a857610507565b6104b18261056e565b905033600160a060020a03166000826000600060006000848787f15050505081600490815403908190555081600333600160a060020a031660005260205260406000209081540390819055508060005260206000a05b5050565b6000600333600160a060020a0316600052602052604060002054905090565b60006002543430600160a060020a0316310303905090565b6000600454600333600160a060020a031660005260205260406000205461056761052a565b0204905090565b60006004548261057c61052a565b02049050919050565b600061058f61052a565b6004548302049050919050565b600060045490509056", - "v": "1b", - "r": "afcc26fefd78fcb86248d33b37743ae606548c58b52fec030a89810036e006fc", - "s": "ba9d7a21b6ff5287ae4eccef82140e4f24cbca9da7ab4e03ac14188522ddda9c" - }, { - "nonce": "03", - "gasPrice": "09184e72a000", - "gasLimit": "0eb952", - "to": "", - "value": "", - "data": "6007600360ad565b602e7f436f696e52656700000000000000000000000000000000000000000000000000603c565b61023d806100f96000396000f35b73c6d9d2cd449a754c494264e1809c50e34d64562b630a874df68060e060020a026000526001600452602060006024600060008660155a03f1505050600051600160a060020a0316636be16bed8060e060020a0260005282600452600060006024600060008660155a03f150505050565b73c6d9d2cd449a754c494264e1809c50e34d64562b63dbbdf0838060e060020a026000528260045230600160a060020a0316602452600060006044600060008660155a03f15050505056006001600060e060020a60003504806306661abd1461003a5780632e3405991461004c578063a832e17914610072578063e79a198f1461008657005b6100426101ed565b8060005260206000f35b6100576004356101f7565b82600160a060020a0316600052816020528060405260606000f35b610080600435602435610094565b60006000f35b61008e6100e9565b60006000f35b3360016000546000526020526040600020819055508160016000546000526020526040600020600101819055508060016000546000526020526040600020600201819055506000805490816001019055505050565b600060008054908160019003905550600090505b6000548110156101c85733600160a060020a0316600182600052602052604060002054600160a060020a031614610133576101bd565b600054811415610142576101b8565b6001600054600052602052604060002054600182600052602052604060002081905550600160005460005260205260406000206001015460018260005260205260406000206001018190555060016000546000526020526040600020600201546001826000526020526040600020600201819055505b6101c8565b8060010190506100fd565b6001600054600052602052604060002060008155600101600081556001016000905550565b6000600054905090565b600060006000600184600052602052604060002054925060018460005260205260406000206001015491506001846000526020526040600020600201549050919390925056", - "v": "1c", - "r": "d57b3e7ae5ed89febcce1c02c625d1e3bbdb7ae33c81e1745773d085a538b169", - "s": "a9185724c3166fe6bdf2b6d75c50caeccfb6457b89f2fa48376ebc8724203a11" - }, { - "nonce": "04", - "gasPrice": "09184e72a000", - "gasLimit": "0e96c5", - "to": "", - "value": "", - "data": "6100287f476176436f696e00000000000000000000000000000000000000000000000000610072565b6100547f47415600000000000000000000000000000000000000000000000000000000006103e86100ec565b61005c6100e3565b610064610162565b6103ed8061018e6000396000f35b73c6d9d2cd449a754c494264e1809c50e34d64562b630a874df68060e060020a026000526001600452602060006024600060008660155a03f1505050600051600160a060020a0316636be16bed8060e060020a0260005282600452600060006024600060008660155a03f150505050565b33600081905550565b73c6d9d2cd449a754c494264e1809c50e34d64562b630a874df68060e060020a026000526003600452602060006024600060008660155a03f1505050600051600160a060020a031663a832e1798060e060020a026000528360045282602452600060006044600060008660155a03f15050505050565b633b9aca006001600054600160a060020a03166000526020526040600020819055504360038190555056006001600060e060020a6000350480631fa03a2b14610066578063673448dd1461007e57806367eae6721461009357806399f4b251146100aa578063bbd39ac0146100b8578063c86a90fe146100cd578063d26c8a8a146100e1578063daea85c5146100f357005b610074600435602435610319565b8060005260206000f35b6100896004356102e3565b8060005260206000f35b6100a4600435602435604435610104565b60006000f35b6100b2610350565b60006000f35b6100c360043561026d565b8060005260206000f35b6100db6004356024356101c4565b60006000f35b6100e961024e565b8060005260206000f35b6100fe60043561028e565b60006000f35b81600184600160a060020a0316600052602052604060002054101580156101545750600283600160a060020a0316600052602052604060002033600160a060020a03166000526020526040600020545b61015d576101bf565b81600184600160a060020a0316600052602052604060002090815403908190555081600182600160a060020a0316600052602052604060002090815401908190555080600160a060020a031683600160a060020a031660008460005260206000a35b505050565b81600133600160a060020a031660005260205260406000205410156101e85761024a565b81600133600160a060020a0316600052602052604060002090815403908190555081600182600160a060020a0316600052602052604060002090815401908190555080600160a060020a031633600160a060020a031660008460005260206000a35b5050565b6000600133600160a060020a0316600052602052604060002054905090565b6000600182600160a060020a03166000526020526040600020549050919050565b6001600233600160a060020a0316600052602052604060002082600160a060020a031660005260205260406000208190555080600160a060020a031633600160a060020a03166001600060005260206000a350565b6000600233600160a060020a0316600052602052604060002082600160a060020a03166000526020526040600020549050919050565b6000600283600160a060020a0316600052602052604060002082600160a060020a0316600052602052604060002054905092915050565b60006003544303905060008111610366576103ea565b33600160a060020a03166002826103e80260005260206000a241600160a060020a03166003826103e80260005260206000a2806103e802600133600160a060020a03166000526020526040600020908154019081905550806103e802600141600160a060020a03166000526020526040600020908154019081905550436003819055505b5056", - "v": "1b", - "r": "5850d4c676bf8251ba0671b7ab1c69a11de741abaa396d5a340e2240bca84f46", - "s": "6e08b879d5a75089a12b1e19f1d2b43b0a5cc4a50d80021a55f4aeb5f173c24c" - }, { - "nonce": "05", - "gasPrice": "09184e72a000", - "gasLimit": "0e5941", - "to": "", - "value": "", - "data": "60267f5265676973747261720000000000000000000000000000000000000000000000603c565b602c603a565b6104cb806100ae6000396000f35b565b73c6d9d2cd449a754c494264e1809c50e34d64562b630a874df68060e060020a026000526001600452602060006024600060008660155a03f1505050600051600160a060020a0316636be16bed8060e060020a0260005282600452600060006024600060008660155a03f15050505056006001600060e060020a6000350480631c83171b14610092578063574e1af4146100a35780635d574e32146100d25780635fd4b08a146100e6578063779a31c3146100fb5780637d2e3ce91461010c5780639e71f3571461011f5780639ea1956614610133578063c284bc2a14610148578063e50f599a14610159578063e5811b3514610170578063f218cb111461018e57005b61009d6004356101ac565b60006000f35b6100ae6004356103e5565b83600160a060020a031660005282600160a060020a03166020528060405260606000f35b6100e060043560243561039e565b60006000f35b6100f16004356104aa565b8060005260206000f35b610106600435610474565b60006000f35b6101196004356000610357565b60006000f35b61012d6004356024356101ea565b60006000f35b61013e60043561048f565b8060005260206000f35b61015360043561022e565b60006000f35b61016a6004356024356044356102e8565b60006000f35b61017b600435610459565b80600160a060020a031660005260206000f35b610199600435610441565b80600160a060020a031660005260206000f35b600181600052602052604060002054600160a060020a03166000146101d0576101e7565b336001826000526020526040600020600101819055505b50565b33600160a060020a0316600183600052602052604060002054600160a060020a0316146102165761022a565b806001836000526020526040600020819055505b5050565b33600160a060020a0316600182600052602052604060002054600160a060020a03161461025a576102e5565b806000600183600052602052604060002060010154600160a060020a03166000526020526040600020541461028e576102bd565b60006000600183600052602052604060002060010154600160a060020a03166000526020526040600020819055505b6001816000526020526040600020600081556001016000815560010160008155600101600090555b50565b33600160a060020a0316600184600052602052604060002054600160a060020a03161461031457610352565b816001846000526020526040600020600101819055508061033457610351565b82600083600160a060020a03166000526020526040600020819055505b5b505050565b33600160a060020a0316600183600052602052604060002054600160a060020a0316146103835761039a565b806001836000526020526040600020600201819055505b5050565b33600160a060020a0316600183600052602052604060002054600160a060020a0316146103ca576103e1565b806001836000526020526040600020600301819055505b5050565b600060006000600060018560005260205260406000205493506001856000526020526040600020600101549250600185600052602052604060002060020154915060018560005260205260406000206003015490509193509193565b60006001826000526020526040600020549050919050565b60006001826000526020526040600020600101549050919050565b60006001826000526020526040600020600201549050919050565b60006001826000526020526040600020600301549050919050565b6000600082600160a060020a0316600052602052604060002054905091905056", - "v": "1c", - "r": "c2574f5d342e0e02d7449c90cd8e334ba65b2b2aab4c3638407c9531942f19f7", - "s": "2a5bd7feabdfabbd4fd935ee6dda65ff559f51f96334096657c8ff1a92a4972c" - }, { - "nonce": "06", - "gasPrice": "09184e72a000", - "gasLimit": "0e213d", - "to": "8888f1f195afa192cfee860698584c030f4c9db1", - "value": "056bc75e2d63100000", - "data": "", - "v": "1c", - "r": "d74becf74f3729db42fce983a57d28acec72e251b1bc3b85074581a236896191", - "s": "c9381be2d10f93533cdd73bd749497420917ea81e71778951bfa0d70b779f4ee" - }, { - "nonce": "07", - "gasPrice": "09184e72a000", - "gasLimit": "2710", - "to": "fddf0e4d3dd8292cf927c3d92970a3636df9349c", - "value": "", - "data": "6be16bed4761760000000000000000000000000000000000000000000000000000000000", - "v": "1b", - "r": "ccb58da5e97bc9c8489ceacec0659e7091a8b2ad8abf03dd80aea478121627fe", - "s": "83857f506b04d54e9c3900f256a27f5e2f22ce27acc658e11eb2478a215bf0ec" - }, { - "nonce": "", - "gasPrice": "09184e72a000", - "gasLimit": "2710", - "to": "fddf0e4d3dd8292cf927c3d92970a3636df9349c", - "value": "", - "data": "6be16bed47617620576f756c640000000000000000000000000000000000000000000000", - "v": "1b", - "r": "c4eb9906a4ea53823e57832ba6401007e7742dbd208d8360e4ac6bdd73995c88", - "s": "89556e50204f288a7c49949085a9fd85242779e1508cea5b6e15b97c1fae53a0" - }], - "uncleHeaders": [], - "hash": "c753d3dc40dce12c4004f84e68f125924f57f655d182b6b3c88bd23b4957aa8b" - }] -} diff --git a/tests/files/BlockchainTests/basicBlockChain.json b/tests/files/BlockchainTests/basicBlockChain.json deleted file mode 100644 index 4cda9964bc..0000000000 --- a/tests/files/BlockchainTests/basicBlockChain.json +++ /dev/null @@ -1,894 +0,0 @@ -{ - "lastBlock": "9d0a03fd264306a8ccf624bbd52430c18016dd734f982f8e15a94e27c6a252d5", - "allotment": { - "dbdbdb2cbd23b783741e8d7fcf51e459b497e4a6": "1606938044258990275541962092341162602522202993782792835301376", - "e4157b34ea9615cfbde6b4fda419828124b70c78": "1606938044258990275541962092341162602522202993782792835301376", - "b9c015918bdaba24b4ff057a92a3873d6eb201be": "1606938044258990275541962092341162602522202993782792835301376", - "6c386a4b26f73c802f34673f7248bb118f97424a": "1606938044258990275541962092341162602522202993782792835301376", - "cd2a3d9f938e13cd947ec05abc7fe734df8dd826": "1606938044258990275541962092341162602522202993782792835301376", - "2ef47100e0787b915105fd5e3f4ff6752079d5cb": "1606938044258990275541962092341162602522202993782792835301376", - "e6716f9544a56c530d868e4bfbacb172315bdead": "1606938044258990275541962092341162602522202993782792835301376", - "1a26338f0d905e295fccb71fa9ea849ffa12aaf4": "1606938044258990275541962092341162602522202993782792835301376" - }, - "blockchain": [{ - "header": { - "parentHash": "17f5f7876fa8619927cff728e7206124b309f79ce343b8fddb0e72fc3fce3a46", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "ca88d8a06020473dd34be02d62688c7e891133c0", - "stateRoot": "5ac4233eba430450d5110ad512ac91b4189876f8ac17f9bec0c6615a57d0351e", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "021135", - "number": "2c", - "gasLimit": "0e9dcc", - "gasUsed": "", - "timestamp": "54e9b165", - "extraData": "", - "nonce": "01710c3ef74088767bd2deb076722b3b5d8ea5c64ab229d1c6d58867a6bd84f6" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "9cb0aec1a19b5b6d10a3d9dc66ed042cc348305d054f9b4edee90e8dabb64957" - }, { - "header": { - "parentHash": "de3e095bc127368a69bf7b9c4e631f4cf095f9b44a74bee756357486ba62a181", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "ca88d8a06020473dd34be02d62688c7e891133c0", - "stateRoot": "5931d1de34d4930bc32ef8df0eda0e4b8ece345bbffd1bc93a5fe7f23c962684", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0210b1", - "number": "2b", - "gasLimit": "0ea175", - "gasUsed": "", - "timestamp": "54e9b160", - "extraData": "", - "nonce": "c92a3731683baaa0a2d1fdbf6cb6d3eac6bafa61abb1f2a7ab677ae81b1746be" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "17f5f7876fa8619927cff728e7206124b309f79ce343b8fddb0e72fc3fce3a46" - }, { - "header": { - "parentHash": "5e4133b05db11f0034a93c727affe2df68911e850f43ea52d74cea8966ef82f0", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "ca88d8a06020473dd34be02d62688c7e891133c0", - "stateRoot": "ff2de5fe6315220c5bac3e451314a4e06af8c65cf6d5fcfe483df4d2d4881647", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "021135", - "number": "2a", - "gasLimit": "0ea51f", - "gasUsed": "", - "timestamp": "54e9b154", - "extraData": "", - "nonce": "fbe537ec3796c571f9a3ab832a33f13c6f214146dd6efe77f9701e32dc06e911" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "de3e095bc127368a69bf7b9c4e631f4cf095f9b44a74bee756357486ba62a181" - }, { - "header": { - "parentHash": "4f3f8351791aa121b770efba92b7d0004f56f25fd83b906c210b0a2a456af7f0", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "ca88d8a06020473dd34be02d62688c7e891133c0", - "stateRoot": "080305875c9e00e5bb303a1c6eadd3d7427f9b23a912758709f1fe95c4f86662", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0210b1", - "number": "29", - "gasLimit": "0ea8ca", - "gasUsed": "", - "timestamp": "54e9b14f", - "extraData": "", - "nonce": "9779ab82f80d1c99c2eb8c5e34362915300134396d06a0e6a96e0a639bbc3f96" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "5e4133b05db11f0034a93c727affe2df68911e850f43ea52d74cea8966ef82f0" - }, { - "header": { - "parentHash": "485722aa1f4bf16e6148dea95becc488ca8133d621d5cc7a417be87895149904", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "ca88d8a06020473dd34be02d62688c7e891133c0", - "stateRoot": "223f4d435057e055ee36f4eebf9583ed2c7cd6a0062d6b15ec457634f24d6f26", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "021135", - "number": "28", - "gasLimit": "0eac76", - "gasUsed": "", - "timestamp": "54e9b147", - "extraData": "", - "nonce": "9fed5a521fa71290d833b881a7acfeae90e41e2814e87c964ca51092625a656a" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "4f3f8351791aa121b770efba92b7d0004f56f25fd83b906c210b0a2a456af7f0" - }, { - "header": { - "parentHash": "d702bdf065a69dc32de4e50f53dfcb0cc03149033f7adf8bc9e303b7de067b4a", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "ca88d8a06020473dd34be02d62688c7e891133c0", - "stateRoot": "7103d2dd5a8029b9ded6b8d2c8f5622be582ed9e104a0b7c6c31c9481cbd0ea3", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0211b9", - "number": "27", - "gasLimit": "0eb023", - "gasUsed": "", - "timestamp": "54e9b137", - "extraData": "", - "nonce": "b9d80baedc182c6b33ab0b2dedd65d1031b8d49b699207608ac26db418efda77" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "485722aa1f4bf16e6148dea95becc488ca8133d621d5cc7a417be87895149904" - }, { - "header": { - "parentHash": "c93fc51e4c17a3a1ebf9b30c88ee370e940c7e61392f91de084fba988d05bcbe", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "ca88d8a06020473dd34be02d62688c7e891133c0", - "stateRoot": "5ee07dd1cb29f73bf4c8699e6b751d766496c3b54bcea49c39f069a518c278fc", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "021135", - "number": "26", - "gasLimit": "0eb3d0", - "gasUsed": "", - "timestamp": "54e9b132", - "extraData": "", - "nonce": "4ebc923f7d2f94b9a0604db0fd43712ed69230cff1cb1ba131abd3bbb5125525" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "d702bdf065a69dc32de4e50f53dfcb0cc03149033f7adf8bc9e303b7de067b4a" - }, { - "header": { - "parentHash": "9a0d07af43683842ad85ea08790ec1285363b5b122d94811162747d666f4b225", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "ca88d8a06020473dd34be02d62688c7e891133c0", - "stateRoot": "a555d37170f7288b6919dc01c757987d6e0236642ab1f6e72726329b099782e0", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0210b1", - "number": "25", - "gasLimit": "0eb77e", - "gasUsed": "", - "timestamp": "54e9b131", - "extraData": "", - "nonce": "5299dc47a724872e84d1ca83b2ca04c9ebff1f2044059a3243ee2bdaa5162411" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "c93fc51e4c17a3a1ebf9b30c88ee370e940c7e61392f91de084fba988d05bcbe" - }, { - "header": { - "parentHash": "0dd2562dac8d7ca927ffc762d846a4a8ac6d765cf1865d500359e0aa29c08a80", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "ca88d8a06020473dd34be02d62688c7e891133c0", - "stateRoot": "3437e952c5e5f7d9591201d1dc1324281846b7761739555fb799661d88ffc74f", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "02102d", - "number": "24", - "gasLimit": "0ebb2d", - "gasUsed": "", - "timestamp": "54e9b130", - "extraData": "", - "nonce": "b034d9df64cb62da9ed40ff9c6452ab3971e041a40125d1fa2f36a1c3e1a4d67" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "9a0d07af43683842ad85ea08790ec1285363b5b122d94811162747d666f4b225" - }, { - "header": { - "parentHash": "b2e241703fd4b42e2d4ca98b77b8c864825d9cc753f51df86dc5e8b8917d7fb7", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "ca88d8a06020473dd34be02d62688c7e891133c0", - "stateRoot": "f51101893ab72e7164ec3136d3f73f5d5b42a38878aac6aaf796835cf6e7e277", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "020faa", - "number": "23", - "gasLimit": "0ebedd", - "gasUsed": "", - "timestamp": "54e9b12f", - "extraData": "", - "nonce": "549c10206f0a3b03355bced4da7fe8b4c92c626d34d70fc1249b1583e9524a59" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "0dd2562dac8d7ca927ffc762d846a4a8ac6d765cf1865d500359e0aa29c08a80" - }, { - "header": { - "parentHash": "80ae6069869bb97449896a792d4d79411fbe9b40f3a80ac52f1e90a0387a13a8", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "ca88d8a06020473dd34be02d62688c7e891133c0", - "stateRoot": "81cd317f95618f5abaf210b870e49252f0b0b1b206e02fff9d5ae273143d372e", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "020f27", - "number": "22", - "gasLimit": "0ec28e", - "gasUsed": "", - "timestamp": "54e9b12e", - "extraData": "", - "nonce": "3b85097c2e69ab210f29f284dab5abf85b21b2fbbb14dacd5e2f566d7b286157" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "b2e241703fd4b42e2d4ca98b77b8c864825d9cc753f51df86dc5e8b8917d7fb7" - }, { - "header": { - "parentHash": "2a7b89c16544da6bc0ea388244f62aa2b6828735c22251c39568816b57844a72", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "ca88d8a06020473dd34be02d62688c7e891133c0", - "stateRoot": "a438f7b7ba572ece08c383ba44747547c8b593a386c20bbe468102d520c599d2", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "020ea4", - "number": "21", - "gasLimit": "0ec640", - "gasUsed": "", - "timestamp": "54e9b12c", - "extraData": "", - "nonce": "ceefd261b0594d0d7a2e901783f0ae251b269ca28ae898d52e00b71d9c727350" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "80ae6069869bb97449896a792d4d79411fbe9b40f3a80ac52f1e90a0387a13a8" - }, { - "header": { - "parentHash": "faa7e44b6d01075a06df6e42abf1398986b9388235b8d011087384af50a2eb29", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "ca88d8a06020473dd34be02d62688c7e891133c0", - "stateRoot": "84556fdcfc4e4156792cf57b6dcb279b9aa8e5a32a49c13623c47cad8dc9aa29", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "020e21", - "number": "20", - "gasLimit": "0ec9f3", - "gasUsed": "", - "timestamp": "54e9b12b", - "extraData": "", - "nonce": "f9de444570c3015119b75cdb65f13491517dc88d7c9a4fce57f0b896420341f2" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "2a7b89c16544da6bc0ea388244f62aa2b6828735c22251c39568816b57844a72" - }, { - "header": { - "parentHash": "80976f42a2dce307f300318176c849b1998f11b2fa9697c2574f0c77bc0ea5ec", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "ca88d8a06020473dd34be02d62688c7e891133c0", - "stateRoot": "95650876231c490df67274a529b86b8d6fc5a1cc4c4a9881d9021d30e0cfd02f", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "020d9e", - "number": "1f", - "gasLimit": "0ecda7", - "gasUsed": "", - "timestamp": "54e9b12a", - "extraData": "", - "nonce": "9ffc289952b58cf1f32f28f3a66900c5f50984886e5107c3ce1c0ae0ab7f56fe" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "faa7e44b6d01075a06df6e42abf1398986b9388235b8d011087384af50a2eb29" - }, { - "header": { - "parentHash": "34e3880b1e36190969ba677ea5f06fb17b545dadfe8faccee4195a2ae1b6948c", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "ca88d8a06020473dd34be02d62688c7e891133c0", - "stateRoot": "ceed5bf60fdcf557beb1be2a0d096025adaa1769c62e6973de7403bff06daecc", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "020d1b", - "number": "1e", - "gasLimit": "0ed15c", - "gasUsed": "", - "timestamp": "54e9b129", - "extraData": "", - "nonce": "8c66ea93701777a168c5ee2ddb635bd8b280e991f12cd28c604ba68da1d19fe7" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "80976f42a2dce307f300318176c849b1998f11b2fa9697c2574f0c77bc0ea5ec" - }, { - "header": { - "parentHash": "c0b10384be60194d183e60e72ea7e1b45b6ecbb98eee96fba093d427cf58eeae", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "ca88d8a06020473dd34be02d62688c7e891133c0", - "stateRoot": "9ea041b65ef9f83b9c656f1037fb901db9c9f0365dfb6d9c17e4fa667979a049", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "020c98", - "number": "1d", - "gasLimit": "0ed512", - "gasUsed": "", - "timestamp": "54e9b128", - "extraData": "", - "nonce": "b04c1f53feb4f8fa7de1079c4ccfdd8004412ed1a4644c3a741a8defd936c5ed" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "34e3880b1e36190969ba677ea5f06fb17b545dadfe8faccee4195a2ae1b6948c" - }, { - "header": { - "parentHash": "cfd8e3ff0f0d25b22613eae33ad850a29da0146c201d3cc8911ecc03e11feb6d", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "ca88d8a06020473dd34be02d62688c7e891133c0", - "stateRoot": "37310521bb90bac09111f04d35195eff8d2fffcd498fe0fb3b28a9e7a257e63d", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "020c15", - "number": "1c", - "gasLimit": "0ed8c9", - "gasUsed": "", - "timestamp": "54e9b123", - "extraData": "", - "nonce": "9b12bb8586b416030af1816e02d878cb4dbcf0fecf313d0c097122f9ef7380f2" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "c0b10384be60194d183e60e72ea7e1b45b6ecbb98eee96fba093d427cf58eeae" - }, { - "header": { - "parentHash": "47e0d13c120962763c3b729e4a8df6e3e8b1852c8dcaa4fc1924abb8781a0784", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "ca88d8a06020473dd34be02d62688c7e891133c0", - "stateRoot": "9573260fa6f4958aec5d73c552c9fcc8438e5d8321fd401d34601ef6183a3aca", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "020b93", - "number": "1b", - "gasLimit": "0edc81", - "gasUsed": "", - "timestamp": "54e9b121", - "extraData": "", - "nonce": "05ab50820967bef2037a610cd9bdc9481bc3f3bbd57a551b1bc7f78ea54c037b" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "cfd8e3ff0f0d25b22613eae33ad850a29da0146c201d3cc8911ecc03e11feb6d" - }, { - "header": { - "parentHash": "82240f2c32a7711538a34be9829f651bc69a5e17e00a43401cdc1ff23b7ed9af", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "ca88d8a06020473dd34be02d62688c7e891133c0", - "stateRoot": "fa0d3d37d993b6195845e203136194c923bed511438096e30d370005a3b8c3f8", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "020b11", - "number": "1a", - "gasLimit": "0ee03a", - "gasUsed": "", - "timestamp": "54e9b11a", - "extraData": "", - "nonce": "697eecb07bccf538aa4a2c60303b8142fa7c443576c7dabac55cdf3ac0bc74f0" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "47e0d13c120962763c3b729e4a8df6e3e8b1852c8dcaa4fc1924abb8781a0784" - }, { - "header": { - "parentHash": "facc4b2872b3d44015ec0836dfd2b399a222efc137b3fd55332566f47aa6e723", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "ca88d8a06020473dd34be02d62688c7e891133c0", - "stateRoot": "d36de624c8e97b2daed5bbb92bf51f37ede589f6ec7b9da9bf88b580d6ffae7b", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "020a8f", - "number": "19", - "gasLimit": "0ee3f3", - "gasUsed": "", - "timestamp": "54e9b119", - "extraData": "", - "nonce": "a6217fe54461239a0dbc9b2a5ade4a6c33b5e5c4d9d09253df2f6839564a3f0c" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "82240f2c32a7711538a34be9829f651bc69a5e17e00a43401cdc1ff23b7ed9af" - }, { - "header": { - "parentHash": "0a40eacc838453b834705c8e7b8799397ec10fcc8bf83018fc9fad8618235e66", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "ca88d8a06020473dd34be02d62688c7e891133c0", - "stateRoot": "aa62f6767925273173da1a26ee2244bbb413986617a2757db262ef3287c4846e", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "020a0d", - "number": "18", - "gasLimit": "0ee7ad", - "gasUsed": "", - "timestamp": "54e9b113", - "extraData": "", - "nonce": "fddf4f44902957534c21d12811ae72e579e1a65a1af013f02ef4f40977676cca" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "facc4b2872b3d44015ec0836dfd2b399a222efc137b3fd55332566f47aa6e723" - }, { - "header": { - "parentHash": "0ab06bfbe1dc1ee4f049cdd043e621d905bdacbaaf2864c656ecd2635fa1081e", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "ca88d8a06020473dd34be02d62688c7e891133c0", - "stateRoot": "72a6bb5cfacaaa12c34c79a22fd06b052df63c9f350aa4dcbe9de5bd6ed9c0a8", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "02098b", - "number": "17", - "gasLimit": "0eeb68", - "gasUsed": "", - "timestamp": "54e9b111", - "extraData": "", - "nonce": "3a93edebfa668f3bfbcbb8f278c3b81e16b4e8e4c67b5d13967ac6a32baab886" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "0a40eacc838453b834705c8e7b8799397ec10fcc8bf83018fc9fad8618235e66" - }, { - "header": { - "parentHash": "15cfaec1aa2446d107ac361f135840bf1efa2bba2ce8f31440e1d284886622c9", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "ca88d8a06020473dd34be02d62688c7e891133c0", - "stateRoot": "7cae9a3b93b3d9a11663b463e9823cf05b8cb42e39a27e0ae4e29a06ddbdceb3", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "020909", - "number": "16", - "gasLimit": "0eef24", - "gasUsed": "", - "timestamp": "54e9b10e", - "extraData": "", - "nonce": "457179ef35182337d2053d4e9c67e2a4169449fe0539b32f8c99f53e27d52fa9" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "0ab06bfbe1dc1ee4f049cdd043e621d905bdacbaaf2864c656ecd2635fa1081e" - }, { - "header": { - "parentHash": "5548b4b3204897c7bcbf21bef662264acbc6bf8796ab7cfe0aa8dc7ac0356a1b", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "ca88d8a06020473dd34be02d62688c7e891133c0", - "stateRoot": "f8607682bd5194a77fb758703445e524c11a794ef479977102262d215fd36fc7", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "020887", - "number": "15", - "gasLimit": "0ef2e1", - "gasUsed": "", - "timestamp": "54e9b10c", - "extraData": "", - "nonce": "ee559544e7aaa6e37f12f0964db8fb53baa95e5c69c4743e5b9151e13e783044" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "15cfaec1aa2446d107ac361f135840bf1efa2bba2ce8f31440e1d284886622c9" - }, { - "header": { - "parentHash": "77b5256e7b66511e8b75922ebab5ba83cc4333320cd30dda457842bc1b0854dd", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "ca88d8a06020473dd34be02d62688c7e891133c0", - "stateRoot": "778f915524b807e1eef42db2b08587dbd732a32250c06fc0c4a590bcbc06476a", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "020805", - "number": "14", - "gasLimit": "0ef69f", - "gasUsed": "", - "timestamp": "54e9b10b", - "extraData": "", - "nonce": "6cc3b29c7501269190cab3af934f4298f962041507d5b65c7b11d6418e6e23a9" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "5548b4b3204897c7bcbf21bef662264acbc6bf8796ab7cfe0aa8dc7ac0356a1b" - }, { - "header": { - "parentHash": "6e61f563877b6659288176c19b648f02494c8a28b34ddcb633b13e705b2ec64b", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "ca88d8a06020473dd34be02d62688c7e891133c0", - "stateRoot": "2704e5b76bf5c76d528d4f39da477f01175801fc1c72ed5b14da7b405e417caa", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "020784", - "number": "13", - "gasLimit": "0efa5e", - "gasUsed": "", - "timestamp": "54e9b10a", - "extraData": "", - "nonce": "20cb8a17e0ef5a6f9bbfc7781a85ed6a84cf4bb802b76200a102e372233d12c7" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "77b5256e7b66511e8b75922ebab5ba83cc4333320cd30dda457842bc1b0854dd" - }, { - "header": { - "parentHash": "5c6b0202efdde8e744aa862330302224ece3d1e0d49f4e6253186d728122f51e", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "ca88d8a06020473dd34be02d62688c7e891133c0", - "stateRoot": "47d1d13e0b2dd6a15d42882c77d21cdd3163d5dd86bb8214c91b8f9d0c51c1be", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "020703", - "number": "12", - "gasLimit": "0efe1e", - "gasUsed": "", - "timestamp": "54e9b109", - "extraData": "", - "nonce": "301a97e0d24a9d9bab5a3f75f1b0a0a0172230971a69ff5cf79cfc8ef34ff4eb" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "6e61f563877b6659288176c19b648f02494c8a28b34ddcb633b13e705b2ec64b" - }, { - "header": { - "parentHash": "512d65776af768a03954e05530998d1103d36a4a8a706a5fea8db0d8e8cc39c7", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "ca88d8a06020473dd34be02d62688c7e891133c0", - "stateRoot": "12f5a4ee36b34b27c8bee0f825ff895e015c9278fd079827953cf7e9d83bd707", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "020682", - "number": "11", - "gasLimit": "0f01df", - "gasUsed": "", - "timestamp": "54e9b103", - "extraData": "", - "nonce": "32dda5b67edca2f202244d6ca2292cd11611545cd66ce2caa1cffbb3de41e10e" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "5c6b0202efdde8e744aa862330302224ece3d1e0d49f4e6253186d728122f51e" - }, { - "header": { - "parentHash": "e5a7dd6869e520b2593888fca1ac347468388b72ffd5a661249dfc0cf307d32a", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "ca88d8a06020473dd34be02d62688c7e891133c0", - "stateRoot": "07ade1abf59e350811923db810a79249ff5e96013ec917dcc66d487d200bd915", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "020601", - "number": "10", - "gasLimit": "0f05a1", - "gasUsed": "", - "timestamp": "54e9b102", - "extraData": "", - "nonce": "4ab10f4a85fcb51ec8d298a2ebdfb2154b5872cadbddc0dd25041561f963dea8" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "512d65776af768a03954e05530998d1103d36a4a8a706a5fea8db0d8e8cc39c7" - }, { - "header": { - "parentHash": "8f5de8a2256485c40e639c59c80d27ec2751cd796e46ea100fa04e48af4382f8", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "ca88d8a06020473dd34be02d62688c7e891133c0", - "stateRoot": "c5ca7b683fc860f9471e08b139aac320858544fe9be95360a0561d4e5760993c", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "020580", - "number": "0f", - "gasLimit": "0f0964", - "gasUsed": "", - "timestamp": "54e9b100", - "extraData": "", - "nonce": "a37729b5ec5beb84f45c48a68f4686629f8368a7ef4d9630805de6b046a6add6" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "e5a7dd6869e520b2593888fca1ac347468388b72ffd5a661249dfc0cf307d32a" - }, { - "header": { - "parentHash": "f68a2b928ccae5484cdb6e864e9cdc134b6eb07dfbd1c67b00485ba3816bce2f", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "ca88d8a06020473dd34be02d62688c7e891133c0", - "stateRoot": "d87b954b5256f1d6cd283e20b6165b9d44e85b03000682e16b2948dd498de5c3", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0204ff", - "number": "0e", - "gasLimit": "0f0d28", - "gasUsed": "", - "timestamp": "54e9b0ff", - "extraData": "", - "nonce": "d240a448fd513012e1a790fb4d6abbb38971d9fdda144208e4bf28634604671d" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "8f5de8a2256485c40e639c59c80d27ec2751cd796e46ea100fa04e48af4382f8" - }, { - "header": { - "parentHash": "d4cdf0cd535b9886e6d0215858427f734b9969b6237e8c7090d7769c136e6e77", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "ca88d8a06020473dd34be02d62688c7e891133c0", - "stateRoot": "b045425f3cb828d9c8e9345cae9994a472b64e10223cd86dc29b0e0492cf9ec9", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "02047e", - "number": "0d", - "gasLimit": "0f10ed", - "gasUsed": "", - "timestamp": "54e9b0fe", - "extraData": "", - "nonce": "59525245fb1306dda1a58349b3403c9daa3b9a4975c12559f716a8502f2f44d8" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "f68a2b928ccae5484cdb6e864e9cdc134b6eb07dfbd1c67b00485ba3816bce2f" - }, { - "header": { - "parentHash": "a752d24894c7c718d5488e1b77566fdae08b6085e0913299c8824e85be574691", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "ca88d8a06020473dd34be02d62688c7e891133c0", - "stateRoot": "668218908bcb93e6c4da1846e66e86bf3eaf7d5466ebfad77773a71b3b4dffff", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0203fe", - "number": "0c", - "gasLimit": "0f14b3", - "gasUsed": "", - "timestamp": "54e9b0fb", - "extraData": "", - "nonce": "0468221d2e51e35eae74f5a327b8b20ec051eaefdc527cdbc7fa873d7e5fb55b" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "d4cdf0cd535b9886e6d0215858427f734b9969b6237e8c7090d7769c136e6e77" - }, { - "header": { - "parentHash": "f29eb66f6642a2e8f9ba4d0e3f57bc6840e4d2a46440e3dac5542e64182095b7", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "ca88d8a06020473dd34be02d62688c7e891133c0", - "stateRoot": "3e6d4456ee291b181704e0597f9932a3d4e1328ed955533db6b3b01a1df3a6a5", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "02037e", - "number": "0b", - "gasLimit": "0f187a", - "gasUsed": "", - "timestamp": "54e9b0f8", - "extraData": "", - "nonce": "a2be3d3068a3e0ffab112f026847117bf9326a95546ad11e6c4bde3b894991e3" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "a752d24894c7c718d5488e1b77566fdae08b6085e0913299c8824e85be574691" - }, { - "header": { - "parentHash": "77c888a706f4fdddc79907ccdf82653cb33e239b8726d65282907429e38c4992", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "ca88d8a06020473dd34be02d62688c7e891133c0", - "stateRoot": "94c6025f7fcff1313d3fc03d616217d37b8d88f6265e35597b478ad5c63c6d54", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0202fe", - "number": "0a", - "gasLimit": "0f1c42", - "gasUsed": "", - "timestamp": "54e9b0f7", - "extraData": "", - "nonce": "e5a095d1a14270b70e0aeab43b63142284aa6b64b383f51cbaf329baf4905aa3" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "f29eb66f6642a2e8f9ba4d0e3f57bc6840e4d2a46440e3dac5542e64182095b7" - }, { - "header": { - "parentHash": "850acdcc6b0e1694752f33643b0d7a6a5b5fa94b9701b5cf147075cd49d98de2", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "ca88d8a06020473dd34be02d62688c7e891133c0", - "stateRoot": "3eabcf6f3817931c45e77c41df252b7bc975b92ab9d6be805377f69bcfe72b41", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "02027e", - "number": "09", - "gasLimit": "0f200b", - "gasUsed": "", - "timestamp": "54e9b0f5", - "extraData": "", - "nonce": "634a1dfe569dbeeb6dd587747303b6e70ccc2e40ca9fde243982414798f3e548" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "77c888a706f4fdddc79907ccdf82653cb33e239b8726d65282907429e38c4992" - }, { - "header": { - "parentHash": "f6ead5457d182d8d242b5f245eebf3653cd19c7f0236519172ab401f00dd3cef", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "ca88d8a06020473dd34be02d62688c7e891133c0", - "stateRoot": "cdd40fb5f3df32caf2b38959c52789e7c2c5bbc84875fd9ebada901a2019cd7f", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0201fe", - "number": "08", - "gasLimit": "0f23d4", - "gasUsed": "", - "timestamp": "54e9b0f4", - "extraData": "", - "nonce": "3e9cb1c0b0c2c8bbc5366a9852ce0f874cc3bb11e71ad4fb12a04175e5f83433" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "850acdcc6b0e1694752f33643b0d7a6a5b5fa94b9701b5cf147075cd49d98de2" - }, { - "header": { - "parentHash": "c1574000aa9edb42edcbaea775907d2bcb47b6322fac291c3e304fcade2bfc95", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "ca88d8a06020473dd34be02d62688c7e891133c0", - "stateRoot": "0d8d85079967ef6fc92c9c8504a7c6d41ec7b82c75f7e13005f853c5ecec165f", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "02017e", - "number": "07", - "gasLimit": "0f279e", - "gasUsed": "", - "timestamp": "54e9b0f2", - "extraData": "", - "nonce": "e12bc8519a5f3c836e97eb116cad688b185e2e30b4e38397c8c9c01a2a878be7" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "f6ead5457d182d8d242b5f245eebf3653cd19c7f0236519172ab401f00dd3cef" - }, { - "header": { - "parentHash": "285d614571ec06a160748efc721dade5ddd12aaba725a44d40f830bb2c31dd73", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "ca88d8a06020473dd34be02d62688c7e891133c0", - "stateRoot": "e3cdb5680bfe6c6ec669a12a0e75fb734b0921715b37a374c879ff9b64515b67", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0200fe", - "number": "06", - "gasLimit": "0f2b69", - "gasUsed": "", - "timestamp": "54e9b0ef", - "extraData": "", - "nonce": "c6d2be434b84c331a80129ece58b5bcc26b3d1a8c88b03ff4856222a8ce0755a" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "c1574000aa9edb42edcbaea775907d2bcb47b6322fac291c3e304fcade2bfc95" - }, { - "header": { - "parentHash": "25dde3cae308f67e1dd50d69d41887a8f4879c01a940a3379985e40269b0418b", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "ca88d8a06020473dd34be02d62688c7e891133c0", - "stateRoot": "fdf0372bc339540a155dadcac082027ced4e1e583f94d4b3837849f1bb6ed127", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "02007e", - "number": "05", - "gasLimit": "0f2f35", - "gasUsed": "", - "timestamp": "54e9b0ee", - "extraData": "", - "nonce": "d31fb87ec89caf9e7b66c9db8c700faa645ac6eaeb56a926c0e5dc4992289a41" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "285d614571ec06a160748efc721dade5ddd12aaba725a44d40f830bb2c31dd73" - }, { - "header": { - "parentHash": "278cce88acf613ff474296dfe0c6a3cdc1d004ba6c042f23987e7aabfcb8d2f9", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "ca88d8a06020473dd34be02d62688c7e891133c0", - "stateRoot": "cd92387b3fdc64d8de8d2d3e30421874f80993a4e801ca48d20531b408810000", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "01ffff", - "number": "04", - "gasLimit": "0f3302", - "gasUsed": "", - "timestamp": "54e9b0ea", - "extraData": "", - "nonce": "716e94452609a259aa964e719aa16e86b9a2fc34012861b7348c7dfd354d9682" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "25dde3cae308f67e1dd50d69d41887a8f4879c01a940a3379985e40269b0418b" - }, { - "header": { - "parentHash": "ffaed89c4a14511ada3d88e046f879a2342ed23d6a75547bc7c3c761179b1eb5", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "ca88d8a06020473dd34be02d62688c7e891133c0", - "stateRoot": "6b886bc05041920a3fdc98751df59bae3186767a04020e44b4f90d6d01930277", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "01ff80", - "number": "03", - "gasLimit": "0f36d0", - "gasUsed": "", - "timestamp": "54e9b0e9", - "extraData": "", - "nonce": "025695e9afe2bd799808dc02ffb084ecdf2973f73fa2c51742e9cab59db1a0cf" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "278cce88acf613ff474296dfe0c6a3cdc1d004ba6c042f23987e7aabfcb8d2f9" - }, { - "header": { - "parentHash": "516dccada94c7dd9936747c6819be3d28f9e91a46f18aada525d036ef09867be", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "ca88d8a06020473dd34be02d62688c7e891133c0", - "stateRoot": "f16124aca07d0b8c2af084eac551a9eee12f5244fc9bbc686373d3b1fe69ff9f", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "01ff01", - "number": "02", - "gasLimit": "0f3a9f", - "gasUsed": "", - "timestamp": "54e9b0e7", - "extraData": "", - "nonce": "802332c62bfb912f72f4424cd24faa08146a183a1902a126dd889a6b068dbe72" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "ffaed89c4a14511ada3d88e046f879a2342ed23d6a75547bc7c3c761179b1eb5" - }, { - "header": { - "parentHash": "32d9162f861a01bc8274e70b3cdb9d688fd7d8566f2f8c25cf1a882f244081c4", - "uncleHash": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "ca88d8a06020473dd34be02d62688c7e891133c0", - "stateRoot": "df6e5bdfabb7cbe94a785064093e1b9d4202eddfb40a1e3bbffe82d953968c0e", - "transactionsTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "01ff80", - "number": "01", - "gasLimit": "0f3e6f", - "gasUsed": "", - "timestamp": "54e9adc1", - "extraData": "", - "nonce": "e981144a7fe1d90bf9efbd037174f5642b7fac214550b3eda788ca9a0a007ef8" - }, - "transactions": [], - "uncleHeaders": [], - "hash": "516dccada94c7dd9936747c6819be3d28f9e91a46f18aada525d036ef09867be" - }] -} diff --git a/tests/files/BlockTests/bcBruncleTest.json b/tests/files/BlockchainTests/bcBruncleTest.json similarity index 100% rename from tests/files/BlockTests/bcBruncleTest.json rename to tests/files/BlockchainTests/bcBruncleTest.json diff --git a/tests/files/BlockTests/bcForkBlockTest.json b/tests/files/BlockchainTests/bcForkBlockTest.json similarity index 91% rename from tests/files/BlockTests/bcForkBlockTest.json rename to tests/files/BlockchainTests/bcForkBlockTest.json index 304ac236d3..f2e241389c 100644 --- a/tests/files/BlockTests/bcForkBlockTest.json +++ b/tests/files/BlockchainTests/bcForkBlockTest.json @@ -8,18 +8,18 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "e6b9733f0b922036b3ba8de0e077c160b553fef8935f5a0f1d8dd46325b26733", "mixHash" : "79a516ea16b8b0071c9a83c89ebfd96d29e614f1bd519f733ea82cb76287ca6c", "nonce" : "3c37bc117e5135d8", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, @@ -27,25 +27,25 @@ "genesisRLP" : "0xf901fcf901f7a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000080832fefd8808454c98c8142a079a516ea16b8b0071c9a83c89ebfd96d29e614f1bd519f733ea82cb76287ca6c883c37bc117e5135d8c0c0", "postState" : { "8888f1f195afa192cfee860698584c030f4c9db1" : { - "balance" : "1500000000000000000", + "balance" : "0x14d1120d7b160000", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -61,18 +61,18 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "55e75bec293d5d5f38213bded3d27435ca91cee285c1f76a658ddccdccd08d00", "mixHash" : "2afb8dc82d0d45cce72967ed9c00892fb808bb92e9ff22fe1c51a6b842c783e5", "nonce" : "f9d04b2fcc151a74", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, @@ -80,14 +80,14 @@ "genesisRLP" : "0xf901fcf901f7a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000080832fefd8808454c98c8142a02afb8dc82d0d45cce72967ed9c00892fb808bb92e9ff22fe1c51a6b842c783e588f9d04b2fcc151a74c0c0", "postState" : { "8888f1f195afa192cfee860698584c030f4c9db1" : { - "balance" : "1500000000000000000", + "balance" : "0x14d1120d7b160000", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", "nonce" : "1", "storage" : { @@ -96,9 +96,9 @@ }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -114,18 +114,18 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "fe8971aa67f2b822d705da25733a5915216649b723157e72cde735fdd0bbbfe6", "mixHash" : "e49f57f3c1eec112b86bf41733f03a1d82f402941c11219e250574514627e577", "nonce" : "aa40d3c520d10cc8", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "781413a37d7ceb31dd5e02ed699bb19f875904a6cd46e003a5238121fdef623b", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, @@ -133,39 +133,39 @@ "genesisRLP" : "0xf901fcf901f7a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0781413a37d7ceb31dd5e02ed699bb19f875904a6cd46e003a5238121fdef623ba056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000080832fefd8808454c98c8142a0e49f57f3c1eec112b86bf41733f03a1d82f402941c11219e250574514627e57788aa40d3c520d10cc8c0c0", "postState" : { "8888f1f195afa192cfee860698584c030f4c9db1" : { - "balance" : "1500000000000000000", + "balance" : "0x14d1120d7b160000", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x6012600055", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x6012600055", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -181,18 +181,18 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "e58728c5c414ab020e2ea1afc57c6d568d59c15da6e865fba417ffeff4194c63", "mixHash" : "27e9f3fd3617f1c02782709eba97fe7920b03961de1bd88dabc4a8c431facdad", "nonce" : "be030eed4ae24d69", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "5b53ecce92ad44bada5b97cdfc139c770a9d253d4e3c72e925cc1ea11cfe6082", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, @@ -200,23 +200,23 @@ "genesisRLP" : "0xf901fcf901f7a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a05b53ecce92ad44bada5b97cdfc139c770a9d253d4e3c72e925cc1ea11cfe6082a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000080832fefd8808454c98c8142a027e9f3fd3617f1c02782709eba97fe7920b03961de1bd88dabc4a8c431facdad88be030eed4ae24d69c0c0", "postState" : { "8888f1f195afa192cfee860698584c030f4c9db1" : { - "balance" : "1500000000000000000", + "balance" : "0x14d1120d7b160000", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", "nonce" : "1", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x6032600055", - "nonce" : "0", + "nonce" : "0x00", "storage" : { "0x" : "0x12" } @@ -224,16 +224,16 @@ }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x6032600055", - "nonce" : "0", + "nonce" : "0x00", "storage" : { "0x" : "0x12" } @@ -250,18 +250,18 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "b3eb70baa54ac60fb26770e2bd62108db9f2e189375660af7f47ef276f520551", "mixHash" : "99d5457ad6de954e86e0c80f56ca1fbc81c692766cd2206d2038b1880f98ff38", "nonce" : "99f1656c715f2fa8", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "309e578cb5523a22eb5b4580ae2faa53906d5637f6fd9fd171211ef3c503a5e6", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, @@ -269,23 +269,23 @@ "genesisRLP" : "0xf901fcf901f7a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0309e578cb5523a22eb5b4580ae2faa53906d5637f6fd9fd171211ef3c503a5e6a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000080832fefd8808454c98c8142a099d5457ad6de954e86e0c80f56ca1fbc81c692766cd2206d2038b1880f98ff388899f1656c715f2fa8c0c0", "postState" : { "8888f1f195afa192cfee860698584c030f4c9db1" : { - "balance" : "1500000000000000000", + "balance" : "0x14d1120d7b160000", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", "nonce" : "1", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x60006000556000600155600060025560006003556000600455", - "nonce" : "0", + "nonce" : "0x00", "storage" : { "0x" : "0x12", "0x01" : "0x12", @@ -297,16 +297,16 @@ }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } }, "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x60006000556000600155600060025560006003556000600455", - "nonce" : "0", + "nonce" : "0x00", "storage" : { "0x" : "0x12", "0x01" : "0x12", @@ -318,3 +318,4 @@ } } } + diff --git a/tests/files/BlockTests/bcGasPricerTest.json b/tests/files/BlockchainTests/bcGasPricerTest.json similarity index 100% rename from tests/files/BlockTests/bcGasPricerTest.json rename to tests/files/BlockchainTests/bcGasPricerTest.json diff --git a/tests/files/BlockTests/bcInvalidHeaderTest.json b/tests/files/BlockchainTests/bcInvalidHeaderTest.json similarity index 76% rename from tests/files/BlockTests/bcInvalidHeaderTest.json rename to tests/files/BlockchainTests/bcInvalidHeaderTest.json index e74840d475..0363561646 100644 --- a/tests/files/BlockTests/bcInvalidHeaderTest.json +++ b/tests/files/BlockchainTests/bcInvalidHeaderTest.json @@ -2,7 +2,7 @@ "DifferentExtraData1025" : { "blocks" : [ { - "rlp" : "0xf90665f905fca0801e9dfc2d12f33d8372ee4192bb02e65f4af5a870745aed2910a6ab4e115cd2a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b3afc95220fb6e2df7fca71206d36e81b458ecfaff6c18b1c3414d30ad6b64efa0bd320f0acf90f5a246c237637f11ef21b05d76fdd9f647f9c3267bb34a743de7a05e7d8bf8bc817405813b0866e3bfa1ad048f982be5b81ab17b4db03266b24b26b90100000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000400000000000000000000000000000000000000000000000000000008302000001832fefd882560b84557ff4c0b904010101020304050607080910111213141516171819202122232410000000000000000000200000000000000000003000000000000000000040000000000000000000500000000000000000006000000000000000000070000000000000000000800000000000000000009000000000000000000010000000000000000000100000000000000000002000000000000000000030000000000000000000400000000000000000005000000000000000000060000000000000000000700000000000000000008000000000000000000090000000000000000000100000000000000000001000000000000000000020000000000000000000300000000000000000004000000000000000000050000000000000000000600000000000000000007000000000000000000080000000000000000000900000000000000000001000000000000000000010000000000000000000200000000000000000003000000000000000000040000000000000000000500000000000000000006000000000000000000070000000000000000000800000000000000000009000000000000000000010000000000000000000100000000000000000002000000000000000000030000000000000000000400000000000000000005000000000000000000060000000000000000000700000000000000000008000000000000000000090000000000000000000100000000000000000001000000000000000000020000000000000000000300000000000000000004000000000000000000050000000000000000000600000000000000000007000000000000000000080000000000000000000900000000000000000001000000000000000000010000000000000000000200000000000000000003000000000000000000040000000000000000000500000000000000000006000000000000000000070000000000000000000800000000000000000009000000000000000000010000000000000000000100000000000000000002000000000000000000030000000000000000000400000000000000000005000000000000000000060000000000000000000700000000000000000008000000000000000000090000000000000000000100000000000000000001000000000000000000020000000000000000000300000000000000000004000000000000000000050000000000000000000600000000000000000007000000000000000000080000000000000000000900000000000000000001000000000000000000010000000000000000000200000000000000000003000000000000000000040000000000000000000500000000000000000006000000000000000000070000000000000000000800000000000000000009000000000000000000010000000000000000000a0da2d90bff4f835b72117284c8eb34446b9121dba6d14006b2766a579f5f003858869b0977b1699157df863f861800a82c35094095e7baea6a6c7c4c2dfeb977efac326af552d87821388801ca042756f995aaedcbb380ecbf42e8b38249c8918ba0b0950ee997570a390f111b4a0f731d1b73239601cd56f1b1d0c6e13343e029f89737e3fcecbf0b12a85f5f62dc0" + "rlp" : "0xf90665f905fca0f2df82c592edbf4ddacb42b96856641484e1dc7e569ad5a4faf7d80e283c95daa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b3afc95220fb6e2df7fca71206d36e81b458ecfaff6c18b1c3414d30ad6b64efa0f7de2b8f7bde12fac856bd9aed6edabb998a2d215a684f18840d67ef81ae87c0a05e7d8bf8bc817405813b0866e3bfa1ad048f982be5b81ab17b4db03266b24b26b90100000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000400000000000000000000000000000000000000000000000000000008302000001832fefd882560b8455800847b904010101020304050607080910111213141516171819202122232410000000000000000000200000000000000000003000000000000000000040000000000000000000500000000000000000006000000000000000000070000000000000000000800000000000000000009000000000000000000010000000000000000000100000000000000000002000000000000000000030000000000000000000400000000000000000005000000000000000000060000000000000000000700000000000000000008000000000000000000090000000000000000000100000000000000000001000000000000000000020000000000000000000300000000000000000004000000000000000000050000000000000000000600000000000000000007000000000000000000080000000000000000000900000000000000000001000000000000000000010000000000000000000200000000000000000003000000000000000000040000000000000000000500000000000000000006000000000000000000070000000000000000000800000000000000000009000000000000000000010000000000000000000100000000000000000002000000000000000000030000000000000000000400000000000000000005000000000000000000060000000000000000000700000000000000000008000000000000000000090000000000000000000100000000000000000001000000000000000000020000000000000000000300000000000000000004000000000000000000050000000000000000000600000000000000000007000000000000000000080000000000000000000900000000000000000001000000000000000000010000000000000000000200000000000000000003000000000000000000040000000000000000000500000000000000000006000000000000000000070000000000000000000800000000000000000009000000000000000000010000000000000000000100000000000000000002000000000000000000030000000000000000000400000000000000000005000000000000000000060000000000000000000700000000000000000008000000000000000000090000000000000000000100000000000000000001000000000000000000020000000000000000000300000000000000000004000000000000000000050000000000000000000600000000000000000007000000000000000000080000000000000000000900000000000000000001000000000000000000010000000000000000000200000000000000000003000000000000000000040000000000000000000500000000000000000006000000000000000000070000000000000000000800000000000000000009000000000000000000010000000000000000000a033640cb9a11598e0fadce2c87f9f5f7d230a773f037ae74ea20a8b6a8e7c5ecc8872d6fe13f2b7e84af863f861800a82c35094095e7baea6a6c7c4c2dfeb977efac326af552d87821388801ca0d8ea4f45bc954612046851fb2500fa493e03fe16b69cc3f255983778c6943a4aa0236ec6196ca23ace9377bc8d21abb8d51adc96f82fc9397384249a72c43ee4dac0" } ], "genesisBlockHeader" : { @@ -12,9 +12,9 @@ "extraData" : "0x42", "gasLimit" : "0x2fefd8", "gasUsed" : "0x00", - "hash" : "801e9dfc2d12f33d8372ee4192bb02e65f4af5a870745aed2910a6ab4e115cd2", - "mixHash" : "ca735c79245c5304ec6d8a6b02db4c6c7993b49a9f782efd6210034a42beb8c1", - "nonce" : "2ae839b01a3709f9", + "hash" : "f2df82c592edbf4ddacb42b96856641484e1dc7e569ad5a4faf7d80e283c95da", + "mixHash" : "3fa47be9efa6aec036f21237f44475a82f0f3e36fa841284e50dd2b785cd8eda", + "nonce" : "7658452a151e0c18", "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", @@ -23,8 +23,67 @@ "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, - "genesisRLP" : "0xf901fcf901f7a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b7829295a16db7cae65a071afbb272390f893dc1b0d3f098504148a7056f8056a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000080832fefd8808454c98c8142a0ca735c79245c5304ec6d8a6b02db4c6c7993b49a9f782efd6210034a42beb8c1882ae839b01a3709f9c0c0", - "lastblockhash" : "801e9dfc2d12f33d8372ee4192bb02e65f4af5a870745aed2910a6ab4e115cd2", + "genesisRLP" : "0xf901fcf901f7a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b7829295a16db7cae65a071afbb272390f893dc1b0d3f098504148a7056f8056a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000080832fefd8808454c98c8142a03fa47be9efa6aec036f21237f44475a82f0f3e36fa841284e50dd2b785cd8eda887658452a151e0c18c0c0", + "lastblockhash" : "f2df82c592edbf4ddacb42b96856641484e1dc7e569ad5a4faf7d80e283c95da", + "postState" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "0x64", + "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600052600060206000a1", + "nonce" : "0x00", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "0x174876e800", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + } + }, + "pre" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "0x64", + "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600052600060206000a1", + "nonce" : "0x00", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "0x174876e800", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + } + } + }, + "DifficultyIsZero" : { + "blocks" : [ + { + "rlp" : "0xf9025ff901f6a04efc2b6b144b10f2b2135c366987d6cb555dd0fead6fd882473ab147322b1dd4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b3afc95220fb6e2df7fca71206d36e81b458ecfaff6c18b1c3414d30ad6b64efa0e9182d73ae54a19133317d6d9e79cb553a808ea77a011e9c96dd0103ad694382a05e7d8bf8bc817405813b0866e3bfa1ad048f982be5b81ab17b4db03266b24b26b90100000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000400000000000000000000000000000000000000000000000000000008001832fefd882560b845580084980a05bc208495337a5f0cb8b9b46ea8f913b1524e9b7d2ef75bb6d9fa95bae112a498896b338dc74a778c6f863f861800a82c35094095e7baea6a6c7c4c2dfeb977efac326af552d87821388801ca00a14e437cc02b72178261f95942743b6973cb0a0710af72b4d3d0672d45ba5f9a05ea4e42817b98f870cea2a735aa9a777134d139284c4241dd262b79faccbde5ec0" + } + ], + "genesisBlockHeader" : { + "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", + "difficulty" : "0x020000", + "extraData" : "0x42", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", + "hash" : "4efc2b6b144b10f2b2135c366987d6cb555dd0fead6fd882473ab147322b1dd4", + "mixHash" : "bcbaf3f0c8118e37456bb28cd013e88d8dc2dfbacac80b56d367561f262229d8", + "nonce" : "5793175f47637584", + "number" : "0x00", + "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", + "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot" : "b7829295a16db7cae65a071afbb272390f893dc1b0d3f098504148a7056f8056", + "timestamp" : "0x54c98c81", + "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" + }, + "genesisRLP" : "0xf901fcf901f7a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b7829295a16db7cae65a071afbb272390f893dc1b0d3f098504148a7056f8056a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000080832fefd8808454c98c8142a0bcbaf3f0c8118e37456bb28cd013e88d8dc2dfbacac80b56d367561f262229d8885793175f47637584c0c0", + "lastblockhash" : "4efc2b6b144b10f2b2135c366987d6cb555dd0fead6fd882473ab147322b1dd4", "postState" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "0x64", @@ -61,7 +120,7 @@ "GasLimitIsZero" : { "blocks" : [ { - "rlp" : "0xf9025ff901f6a0294fb6f9125c5926ab028dac7c344ee39ade18aee1a188c817c391f1897a2655a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b3afc95220fb6e2df7fca71206d36e81b458ecfaff6c18b1c3414d30ad6b64efa0c93866bffee7bcec3910a365091aff84edd9e8a621a121898a4901c9c146e538a05e7d8bf8bc817405813b0866e3bfa1ad048f982be5b81ab17b4db03266b24b26b901000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000004000000000000000000000000000000000000000000000000000000083020000018082560b84557ff4c380a0a5782206a67c90a7fa20b54ab6afb246956bef23482a39c8eac9abe90b1103b4883cd9dcee62bb1ed9f863f861800a82c35094095e7baea6a6c7c4c2dfeb977efac326af552d87821388801ba0a4043e901d565fe6f80663e0a7b109d7d3c5d41d1ad0c584713a592adab2ef8fa04dde69b415e3bd757aca11b3ff9b62fbd0139b6b1168d23d832622ce68053bfcc0" + "rlp" : "0xf9025ff901f6a06117295771e58087b01113f0713e61b69cf3d3aca70ad65a6a68009c5b3027dda01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b3afc95220fb6e2df7fca71206d36e81b458ecfaff6c18b1c3414d30ad6b64efa0d64fc98b44a9b4f15353ad30793d2c129ee30f0d30c02de4cd24a6ccbd45c9afa05e7d8bf8bc817405813b0866e3bfa1ad048f982be5b81ab17b4db03266b24b26b901000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000004000000000000000000000000000000000000000000000000000000083020000018082560b845580084c80a0c3b39b50f343269b63e34c0ba6499f5c8857cc40b81314553d51ec9334cc62f088abbdbd9520846324f863f861800a82c35094095e7baea6a6c7c4c2dfeb977efac326af552d87821388801ba0889eac0ecc0e3b7a77b82d16af0223437b94c5c777f480d322b790b62d77bbcda080ba813d53d5c867ebf7bf9389ff59c157372c6da24909b80e7660f7e5f0f725c0" } ], "genesisBlockHeader" : { @@ -71,9 +130,9 @@ "extraData" : "0x42", "gasLimit" : "0x2fefd8", "gasUsed" : "0x00", - "hash" : "294fb6f9125c5926ab028dac7c344ee39ade18aee1a188c817c391f1897a2655", - "mixHash" : "a9d33ca61587dc9d28c0860a4f5d6a78c82e29b2207c570a886a6668a2f16c88", - "nonce" : "d475b1cdd15c16cd", + "hash" : "6117295771e58087b01113f0713e61b69cf3d3aca70ad65a6a68009c5b3027dd", + "mixHash" : "564c77bd01aff933da09b1f5df3924af34f6c7321cdb2a7271bc18f0e820ec9d", + "nonce" : "c853e269579f97f4", "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", @@ -82,8 +141,8 @@ "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, - "genesisRLP" : "0xf901fcf901f7a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b7829295a16db7cae65a071afbb272390f893dc1b0d3f098504148a7056f8056a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000080832fefd8808454c98c8142a0a9d33ca61587dc9d28c0860a4f5d6a78c82e29b2207c570a886a6668a2f16c8888d475b1cdd15c16cdc0c0", - "lastblockhash" : "294fb6f9125c5926ab028dac7c344ee39ade18aee1a188c817c391f1897a2655", + "genesisRLP" : "0xf901fcf901f7a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b7829295a16db7cae65a071afbb272390f893dc1b0d3f098504148a7056f8056a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000080832fefd8808454c98c8142a0564c77bd01aff933da09b1f5df3924af34f6c7321cdb2a7271bc18f0e820ec9d88c853e269579f97f4c0c0", + "lastblockhash" : "6117295771e58087b01113f0713e61b69cf3d3aca70ad65a6a68009c5b3027dd", "postState" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "0x64", @@ -120,7 +179,7 @@ "log1_wrongBlockNumber" : { "blocks" : [ { - "rlp" : "0xf90262f901f9a0620e681cb4df774ab54c0232376b909199e24b42ff5c84507fe8b08ff43b09e2a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b3afc95220fb6e2df7fca71206d36e81b458ecfaff6c18b1c3414d30ad6b64efa0dd1cea4016b2072a0c5f4e3c7d734fc8607d223db9a96b6a3e0d490334e29af9a05e7d8bf8bc817405813b0866e3bfa1ad048f982be5b81ab17b4db03266b24b26b90100000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000400000000000000000000000000000000000000000000000000000008302000002832fefd882560b84557ff4c680a0b8f5d358696f4f8f6dc7b305b235ef1f19cbf1900c6edfa060e99279419055bb88a587b355bfe6e26ff863f861800a82c35094095e7baea6a6c7c4c2dfeb977efac326af552d87821388801ca07b27f8b769a18c5e45961c6f058c68317703391b92b490e12dcade6a8b7bcb63a0c13691e75e2fdc8a7bf12cab717d8a735201e6cde67c879bea240005d930026fc0" + "rlp" : "0xf90262f901f9a02dcf0ccb6e901540cf88deda20f5bd15aa949b44da371ab64f1880517dabf9e1a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b3afc95220fb6e2df7fca71206d36e81b458ecfaff6c18b1c3414d30ad6b64efa066be40d9d0d16a4cc61763a7b1cc38eb239cc5e7c170b15af22cc4a0bb7f10ada05e7d8bf8bc817405813b0866e3bfa1ad048f982be5b81ab17b4db03266b24b26b90100000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000400000000000000000000000000000000000000000000000000000008302000002832fefd882560b845580085080a05166bbfcc4cf9b9e345a11a0e7168f69bf1f43574a0f324dda36c6e3a4106b0c88ebd598f84d5177fff863f861800a82c35094095e7baea6a6c7c4c2dfeb977efac326af552d87821388801ba03c651b4a8a56701d07a51225f454c6dc23a40e46c6d153434fb0fafc3e51982ca07f14fbb8b155fa6342ca60f6eb5a510a88b311e58bee5e76b7c69972b139af8cc0" } ], "genesisBlockHeader" : { @@ -130,9 +189,9 @@ "extraData" : "0x42", "gasLimit" : "0x2fefd8", "gasUsed" : "0x00", - "hash" : "620e681cb4df774ab54c0232376b909199e24b42ff5c84507fe8b08ff43b09e2", - "mixHash" : "86f621add0bb4a000fb726f614f83287fbe63e9584195d87ad7b245a8b756a72", - "nonce" : "b80c084b56a750fa", + "hash" : "2dcf0ccb6e901540cf88deda20f5bd15aa949b44da371ab64f1880517dabf9e1", + "mixHash" : "bda860a39cc929d3d39fb0c2e15725ad61ea2cbbb3efed8cc7b4bb8b401040cc", + "nonce" : "e21965d1308a6c9b", "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", @@ -141,8 +200,8 @@ "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, - "genesisRLP" : "0xf901fcf901f7a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b7829295a16db7cae65a071afbb272390f893dc1b0d3f098504148a7056f8056a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000080832fefd8808454c98c8142a086f621add0bb4a000fb726f614f83287fbe63e9584195d87ad7b245a8b756a7288b80c084b56a750fac0c0", - "lastblockhash" : "620e681cb4df774ab54c0232376b909199e24b42ff5c84507fe8b08ff43b09e2", + "genesisRLP" : "0xf901fcf901f7a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b7829295a16db7cae65a071afbb272390f893dc1b0d3f098504148a7056f8056a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000080832fefd8808454c98c8142a0bda860a39cc929d3d39fb0c2e15725ad61ea2cbbb3efed8cc7b4bb8b401040cc88e21965d1308a6c9bc0c0", + "lastblockhash" : "2dcf0ccb6e901540cf88deda20f5bd15aa949b44da371ab64f1880517dabf9e1", "postState" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "0x64", @@ -179,7 +238,7 @@ "log1_wrongBloom" : { "blocks" : [ { - "rlp" : "0xf90262f901f9a061816f6181fedda93826656e70683c8bfbb3acd4b00964bc65b4835c7f1ae41da01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b3afc95220fb6e2df7fca71206d36e81b458ecfaff6c18b1c3414d30ad6b64efa098535fe3c1eb69c7d218780e728f89d3b3e2c76d20953c1242e4bca37a778360a05e7d8bf8bc817405813b0866e3bfa1ad048f982be5b81ab17b4db03266b24b26b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000001832fefd882560b84557ff4ca80a0b41717f2daecff0cd492e10d411be5214dc30b7b1fd99e69e39002d552802c75880bbc6ced3ce651a9f863f861800a82c35094095e7baea6a6c7c4c2dfeb977efac326af552d87821388801ba08d0c6e6b1db2f976c0167887f418dfaaa317fb3268dbef25a56c67d6b8aca7b3a02775f6b29f3057b451b069b09281e79591e247f88d068d202e5ce5364217dda1c0" + "rlp" : "0xf90262f901f9a0cc5bc79a736ec0ad1699dd73ab77112734de1ea792157e91ce9935b83bc21deaa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b3afc95220fb6e2df7fca71206d36e81b458ecfaff6c18b1c3414d30ad6b64efa07476267ff3457850f6d613f8b92a9ae957cfd67193fb264fc1f4267a63eace0ca05e7d8bf8bc817405813b0866e3bfa1ad048f982be5b81ab17b4db03266b24b26b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000001832fefd882560b845580085480a02397352bac153f3ca8d05efd1a89739eceee838a3b4731a1d71e1c46a0b37cf488c692af15dcf799a5f863f861800a82c35094095e7baea6a6c7c4c2dfeb977efac326af552d87821388801ca08a2c157de4eac26537d0be0376b21fe1b0d698b94ce240f6b3e95ad72e97797fa0dca636858489f5ba346bb8672b4022cf10b29d3d33bcbc09fdcfd536a9a12050c0" } ], "genesisBlockHeader" : { @@ -189,9 +248,9 @@ "extraData" : "0x42", "gasLimit" : "0x2fefd8", "gasUsed" : "0x00", - "hash" : "61816f6181fedda93826656e70683c8bfbb3acd4b00964bc65b4835c7f1ae41d", - "mixHash" : "fd7c4c44729ca29af51db4c3cefaabd8ae09899ae8c7a77413e941062fb90792", - "nonce" : "5633654b840d2d49", + "hash" : "cc5bc79a736ec0ad1699dd73ab77112734de1ea792157e91ce9935b83bc21dea", + "mixHash" : "1f1dddbe4d3a8b309dadf982b448a1cfe5e4b46348d22f66e31ae87144c56e59", + "nonce" : "8fda695e58f532d2", "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", @@ -200,8 +259,8 @@ "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, - "genesisRLP" : "0xf901fcf901f7a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b7829295a16db7cae65a071afbb272390f893dc1b0d3f098504148a7056f8056a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000080832fefd8808454c98c8142a0fd7c4c44729ca29af51db4c3cefaabd8ae09899ae8c7a77413e941062fb90792885633654b840d2d49c0c0", - "lastblockhash" : "61816f6181fedda93826656e70683c8bfbb3acd4b00964bc65b4835c7f1ae41d", + "genesisRLP" : "0xf901fcf901f7a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b7829295a16db7cae65a071afbb272390f893dc1b0d3f098504148a7056f8056a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000080832fefd8808454c98c8142a01f1dddbe4d3a8b309dadf982b448a1cfe5e4b46348d22f66e31ae87144c56e59888fda695e58f532d2c0c0", + "lastblockhash" : "cc5bc79a736ec0ad1699dd73ab77112734de1ea792157e91ce9935b83bc21dea", "postState" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "0x64", @@ -238,7 +297,7 @@ "wrongCoinbase" : { "blocks" : [ { - "rlp" : "0xf90262f901f9a0203d78c55325b7d2b33def1e65799b3e8a697bd2d38be07912d89c521d0a831ba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347949888f1f195afa192cfee860698584c030f4c9db1a0b3afc95220fb6e2df7fca71206d36e81b458ecfaff6c18b1c3414d30ad6b64efa0ee1f71f8612a1a0dc36d8c318576c4d5dca3f67c1a1111e06874a7187a75e273a05e7d8bf8bc817405813b0866e3bfa1ad048f982be5b81ab17b4db03266b24b26b90100000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000400000000000000000000000000000000000000000000000000000008302000001832fefd882560b84557ff4cc80a02871566a90428b72b54900bbed49a3b42bcc5f6ff4bc135d63550ad3638b110488ceb940b576899ec8f863f861800a82c35094095e7baea6a6c7c4c2dfeb977efac326af552d87821388801ba0c39dfc246695c6d84a7c59b5bee73c249507d1ce8c35b1473bf70366225a8212a038bf288841a713102009c8d4ff66bf8e5463c503e3995b21366e1cd078eef248c0" + "rlp" : "0xf90262f901f9a00a70aa945840114b42bbb5e6836109dfb646121aa595f99b2dcd07a18e6b5e00a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347949888f1f195afa192cfee860698584c030f4c9db1a0b3afc95220fb6e2df7fca71206d36e81b458ecfaff6c18b1c3414d30ad6b64efa071f875b55a0693e1eaa279b770a61d95422685ffec4f75d3f03cfa43a85dc16ea05e7d8bf8bc817405813b0866e3bfa1ad048f982be5b81ab17b4db03266b24b26b90100000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000400000000000000000000000000000000000000000000000000000008302000001832fefd882560b845580085680a022c207a0b02d52f36880b90ba5d86a36c52264eb5b396b59ff9574a51e21d5c988a0641e41838c1ce2f863f861800a82c35094095e7baea6a6c7c4c2dfeb977efac326af552d87821388801ba05586d876cea5773348816f58a1c8448120fa1aaea0230ffaf3b44380fe49cccaa0ef768dcab00378ee77791711b35f4470a632ef9e9a3c4b73fc2ec1094677c1b8c0" } ], "genesisBlockHeader" : { @@ -248,9 +307,9 @@ "extraData" : "0x42", "gasLimit" : "0x2fefd8", "gasUsed" : "0x00", - "hash" : "203d78c55325b7d2b33def1e65799b3e8a697bd2d38be07912d89c521d0a831b", - "mixHash" : "1bc0f803c19f1a996cbed7db7cd04bc061de6a1078dd25fbdadbf2eb051f518a", - "nonce" : "18c615f04cd1a057", + "hash" : "0a70aa945840114b42bbb5e6836109dfb646121aa595f99b2dcd07a18e6b5e00", + "mixHash" : "9a0df7f98f85563c59f10cb9963770bebd6b14191db7a2270eb556b72bbbf3c2", + "nonce" : "883b6eb4ef09a367", "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", @@ -259,8 +318,8 @@ "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, - "genesisRLP" : "0xf901fcf901f7a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b7829295a16db7cae65a071afbb272390f893dc1b0d3f098504148a7056f8056a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000080832fefd8808454c98c8142a01bc0f803c19f1a996cbed7db7cd04bc061de6a1078dd25fbdadbf2eb051f518a8818c615f04cd1a057c0c0", - "lastblockhash" : "203d78c55325b7d2b33def1e65799b3e8a697bd2d38be07912d89c521d0a831b", + "genesisRLP" : "0xf901fcf901f7a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b7829295a16db7cae65a071afbb272390f893dc1b0d3f098504148a7056f8056a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000080832fefd8808454c98c8142a09a0df7f98f85563c59f10cb9963770bebd6b14191db7a2270eb556b72bbbf3c288883b6eb4ef09a367c0c0", + "lastblockhash" : "0a70aa945840114b42bbb5e6836109dfb646121aa595f99b2dcd07a18e6b5e00", "postState" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "0x64", @@ -297,7 +356,7 @@ "wrongDifficulty" : { "blocks" : [ { - "rlp" : "0xf90261f901f8a0e26518455a4d9989da691c2ace65c758795e586c24f085a55c3d81c14e142a7ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b3afc95220fb6e2df7fca71206d36e81b458ecfaff6c18b1c3414d30ad6b64efa0a3367304ab7d594d34e0983ee5152d44c77a9018d38ef582c33f3b3beca3505ea05e7d8bf8bc817405813b0866e3bfa1ad048f982be5b81ab17b4db03266b24b26b901000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000004000000000000000000000000000000000000000000000000000000082271001832fefd882560b84557ff4cf80a0e73f7cc84d40e67259477ba9bf046e746bc83c7d9d648533ab249c2f8247313288ef74b1391e6bea87f863f861800a82c35094095e7baea6a6c7c4c2dfeb977efac326af552d87821388801ca0094bd4e29d134267f5d5f040601a8520225990a22c69aad1a27fe45861fcaf96a0afe5fc4870e4b6e5d82dd3e4939291097d858c1223314e05eda817169641483fc0" + "rlp" : "0xf90261f901f8a09607334834720d2868bbf844718a3251e1402d1c309306b67bd49d3f6f3a9b2ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b3afc95220fb6e2df7fca71206d36e81b458ecfaff6c18b1c3414d30ad6b64efa060d31ad940b25fa51ab3af787be6196620709c19dbc485ac05ab1b698da453cea05e7d8bf8bc817405813b0866e3bfa1ad048f982be5b81ab17b4db03266b24b26b901000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000004000000000000000000000000000000000000000000000000000000082271001832fefd882560b845580085980a0576a6142032d0a0b1baf0e485659834bead8fb3041f9b8d1c4140646af5b11428829dbc563ef0fa59df863f861800a82c35094095e7baea6a6c7c4c2dfeb977efac326af552d87821388801ca004897eeb8b02f06c7c621be84da533459238edcfa2e11aa97f5f4f2bd0261065a0694b87b243818d6eea8e12efe8e5d4d78860e5c8b0a052ffa9e5e1af88badbd5c0" } ], "genesisBlockHeader" : { @@ -307,9 +366,9 @@ "extraData" : "0x42", "gasLimit" : "0x2fefd8", "gasUsed" : "0x00", - "hash" : "e26518455a4d9989da691c2ace65c758795e586c24f085a55c3d81c14e142a7c", - "mixHash" : "39a07d831e0d27a8b433d2cefba7992a4bc10d1b8cc44d9dde945c7cddb2f170", - "nonce" : "d2fbfc19d43f1e0f", + "hash" : "9607334834720d2868bbf844718a3251e1402d1c309306b67bd49d3f6f3a9b2e", + "mixHash" : "ab34ab179ac18c54cc4472bc3f82563ced95db14a0f86a85f5a229c842804b32", + "nonce" : "1556220ed8b865ef", "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", @@ -318,8 +377,8 @@ "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, - "genesisRLP" : "0xf901fcf901f7a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b7829295a16db7cae65a071afbb272390f893dc1b0d3f098504148a7056f8056a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000080832fefd8808454c98c8142a039a07d831e0d27a8b433d2cefba7992a4bc10d1b8cc44d9dde945c7cddb2f17088d2fbfc19d43f1e0fc0c0", - "lastblockhash" : "e26518455a4d9989da691c2ace65c758795e586c24f085a55c3d81c14e142a7c", + "genesisRLP" : "0xf901fcf901f7a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b7829295a16db7cae65a071afbb272390f893dc1b0d3f098504148a7056f8056a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000080832fefd8808454c98c8142a0ab34ab179ac18c54cc4472bc3f82563ced95db14a0f86a85f5a229c842804b32881556220ed8b865efc0c0", + "lastblockhash" : "9607334834720d2868bbf844718a3251e1402d1c309306b67bd49d3f6f3a9b2e", "postState" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "0x64", @@ -356,7 +415,7 @@ "wrongGasLimit" : { "blocks" : [ { - "rlp" : "0xf90262f901f9a0cc1c0a26f21579ac40bbc494604824fc473b6faa3fd3d68edd433fa8f70c932da01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b3afc95220fb6e2df7fca71206d36e81b458ecfaff6c18b1c3414d30ad6b64efa093a856cb300c99471e166d0b11d4a22450987b4bac8c35338c233cedcc67be1da05e7d8bf8bc817405813b0866e3bfa1ad048f982be5b81ab17b4db03266b24b26b90100000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000400000000000000000000000000000000000000000000000000000008302000001830186a082560b84557ff4d280a053b148958caa66dee6417a154c348297614883976b8c16f03cf5b268b0e893e8888106219c66e62361f863f861800a82c35094095e7baea6a6c7c4c2dfeb977efac326af552d87821388801ba082e54b7f7d5671d0ee93138b0300f0e807bd115ce3bd1bc99e21925f7bd96e0ba0d0217b852d89ae38d5681c6975ec492f69e4c411c6046a8668f044db2864483ac0" + "rlp" : "0xf90262f901f9a0514147c3b1f629ef4cf60ff39ef538f4c9f5748f5ba8444e41d5d9164875d481a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b3afc95220fb6e2df7fca71206d36e81b458ecfaff6c18b1c3414d30ad6b64efa06d235ce90b45dbba00a431f064796ff58bd66c6ffaddca9c540d4601471164cca05e7d8bf8bc817405813b0866e3bfa1ad048f982be5b81ab17b4db03266b24b26b90100000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000400000000000000000000000000000000000000000000000000000008302000001830186a082560b845580085c80a087e809fc8d77aaadab95297a6a6933f634b7cbaf6a77d937ae64afc49d7537f888c0744f48abfdf9b2f863f861800a82c35094095e7baea6a6c7c4c2dfeb977efac326af552d87821388801ca0403a338b092033ae519eace003746c2a5dbf56f076440fc9151266146ba23e40a0191583f085949b046424f4c2262ecb5df5e64ad7d921e517fd5b7eb59cbc248ac0" } ], "genesisBlockHeader" : { @@ -366,9 +425,9 @@ "extraData" : "0x42", "gasLimit" : "0x2fefd8", "gasUsed" : "0x00", - "hash" : "cc1c0a26f21579ac40bbc494604824fc473b6faa3fd3d68edd433fa8f70c932d", - "mixHash" : "b033eeba6bf1a9d293f067d0d395e1893d2cc788992182bb14bea5f220c7be5a", - "nonce" : "5246583fa42e6da0", + "hash" : "514147c3b1f629ef4cf60ff39ef538f4c9f5748f5ba8444e41d5d9164875d481", + "mixHash" : "466beebb6b34ee6e945b2b3c2714a0962274742600e6d6931873986dd7eef85a", + "nonce" : "c4baed9c9955f8ec", "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", @@ -377,8 +436,8 @@ "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, - "genesisRLP" : "0xf901fcf901f7a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b7829295a16db7cae65a071afbb272390f893dc1b0d3f098504148a7056f8056a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000080832fefd8808454c98c8142a0b033eeba6bf1a9d293f067d0d395e1893d2cc788992182bb14bea5f220c7be5a885246583fa42e6da0c0c0", - "lastblockhash" : "cc1c0a26f21579ac40bbc494604824fc473b6faa3fd3d68edd433fa8f70c932d", + "genesisRLP" : "0xf901fcf901f7a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b7829295a16db7cae65a071afbb272390f893dc1b0d3f098504148a7056f8056a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000080832fefd8808454c98c8142a0466beebb6b34ee6e945b2b3c2714a0962274742600e6d6931873986dd7eef85a88c4baed9c9955f8ecc0c0", + "lastblockhash" : "514147c3b1f629ef4cf60ff39ef538f4c9f5748f5ba8444e41d5d9164875d481", "postState" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "0x64", @@ -415,7 +474,7 @@ "wrongGasUsed" : { "blocks" : [ { - "rlp" : "0xf90260f901f7a0dd8be3fc6598a9c6c9c210a994b2e4e28c75e4f4fca5fe8cf657cd06d9002085a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b3afc95220fb6e2df7fca71206d36e81b458ecfaff6c18b1c3414d30ad6b64efa00a9b78ba07eed41fbc66630ed6b4d01e96231a4a130c4bbb39f272368dc79642a05e7d8bf8bc817405813b0866e3bfa1ad048f982be5b81ab17b4db03266b24b26b90100000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000400000000000000000000000000000000000000000000000000000008302000001832fefd88084557ff4d580a0b237b0476170afbcde1e949c44c60176dc86a77df0b3ac7a19227e3afe798502884e1ce1bf32090576f863f861800a82c35094095e7baea6a6c7c4c2dfeb977efac326af552d87821388801ca0f5ec14a149f51a6507fab88f921df3c51417d98feabfbaacfa3bb39ec75d0ccfa00255304a957f4779c19cc5700b0bd44d80436e52327f97cb9f3b9340942317b7c0" + "rlp" : "0xf90260f901f7a00d76833d6a375f38be538c51f36db8be646549cdfcc7091434cd9368088199f5a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b3afc95220fb6e2df7fca71206d36e81b458ecfaff6c18b1c3414d30ad6b64efa000040f9d47e05d71e7f4fb27bbff396b795dca920b9047db30d682aa0f7ac702a05e7d8bf8bc817405813b0866e3bfa1ad048f982be5b81ab17b4db03266b24b26b90100000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000400000000000000000000000000000000000000000000000000000008302000001832fefd880845580085f80a071e97bbc34f48a185827fe90b629eb66104828d420000c75ca8322edb09598a58875c311e6572dfd47f863f861800a82c35094095e7baea6a6c7c4c2dfeb977efac326af552d87821388801ca0e1667ac0d091aa81081df965cdba35ee56ef8c5f16c477aa713241c200f6b959a053f4084793e3dd38ec7a2fca9e57139a5fa8b8545312587605ad82d3ce134981c0" } ], "genesisBlockHeader" : { @@ -425,9 +484,9 @@ "extraData" : "0x42", "gasLimit" : "0x2fefd8", "gasUsed" : "0x00", - "hash" : "dd8be3fc6598a9c6c9c210a994b2e4e28c75e4f4fca5fe8cf657cd06d9002085", - "mixHash" : "4417af0859b6d2e10793172a151ad1e6a03f34cbd7c2f2cfbb863426925702a7", - "nonce" : "44f1d62f7b9b0a78", + "hash" : "0d76833d6a375f38be538c51f36db8be646549cdfcc7091434cd9368088199f5", + "mixHash" : "123be1d12fec65d2b6e649e2e4b69bbd1e8a2981773810ee264155927ae4a341", + "nonce" : "25d37433409555df", "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", @@ -436,8 +495,8 @@ "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, - "genesisRLP" : "0xf901fcf901f7a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b7829295a16db7cae65a071afbb272390f893dc1b0d3f098504148a7056f8056a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000080832fefd8808454c98c8142a04417af0859b6d2e10793172a151ad1e6a03f34cbd7c2f2cfbb863426925702a78844f1d62f7b9b0a78c0c0", - "lastblockhash" : "dd8be3fc6598a9c6c9c210a994b2e4e28c75e4f4fca5fe8cf657cd06d9002085", + "genesisRLP" : "0xf901fcf901f7a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b7829295a16db7cae65a071afbb272390f893dc1b0d3f098504148a7056f8056a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000080832fefd8808454c98c8142a0123be1d12fec65d2b6e649e2e4b69bbd1e8a2981773810ee264155927ae4a3418825d37433409555dfc0c0", + "lastblockhash" : "0d76833d6a375f38be538c51f36db8be646549cdfcc7091434cd9368088199f5", "postState" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "0x64", @@ -474,7 +533,7 @@ "wrongMixHash" : { "blocks" : [ { - "rlp" : "0xf90262f901f9a034071a807d83f8e634082378e3c236b5d790c5bb3f6f5e81b857067eb0a8679fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b3afc95220fb6e2df7fca71206d36e81b458ecfaff6c18b1c3414d30ad6b64efa0b7d4d7f8d724567a6837e3872f014100704c2848ad2b1d2a3e0d410b35c81280a05e7d8bf8bc817405813b0866e3bfa1ad048f982be5b81ab17b4db03266b24b26b90100000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000400000000000000000000000000000000000000000000000000000008302000001832fefd882560b84557ff4d880a0bad81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421889626a46727781363f863f861800a82c35094095e7baea6a6c7c4c2dfeb977efac326af552d87821388801ba06d7dc3c29c4473543b574413536b608d7afa4c96bbfbbf033473a088e6662ff8a07be035d2fa3e7a2b0c8ac6dea2f53dcde4ebc9020f008057bb90c044e6cfb895c0" + "rlp" : "0xf90262f901f9a095ecab43d8e58e74aba8e41d872b0c737fdd38856ee9b73adba7264ead771b7aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b3afc95220fb6e2df7fca71206d36e81b458ecfaff6c18b1c3414d30ad6b64efa079bcae8f675be0b9c9f42d722b4d1fb1f67db13181831b77d87b09046ecf8dc7a05e7d8bf8bc817405813b0866e3bfa1ad048f982be5b81ab17b4db03266b24b26b90100000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000400000000000000000000000000000000000000000000000000000008302000001832fefd882560b845580086580a0bad81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218802343185552f08baf863f861800a82c35094095e7baea6a6c7c4c2dfeb977efac326af552d87821388801ca00efb9f69c284ce3a9724e4fd02e832c8eb13725e0d82cb1995b7f283ab540668a06345a2c4c23355763de6f7d08176001d86f09fc414962c3aa838b7c3158eec61c0" } ], "genesisBlockHeader" : { @@ -484,9 +543,9 @@ "extraData" : "0x42", "gasLimit" : "0x2fefd8", "gasUsed" : "0x00", - "hash" : "34071a807d83f8e634082378e3c236b5d790c5bb3f6f5e81b857067eb0a8679f", - "mixHash" : "c7f735b359771b6bf60f2aa2e3a32398e9ee3632b1764ea4d825cc3fc2472610", - "nonce" : "68e84fc7fccee640", + "hash" : "95ecab43d8e58e74aba8e41d872b0c737fdd38856ee9b73adba7264ead771b7a", + "mixHash" : "c4a5a1e102f00ee6bbd14cb709393974cf92d582dd87b6107af51b278cf013c1", + "nonce" : "dae383a3bcb463f4", "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", @@ -495,8 +554,8 @@ "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, - "genesisRLP" : "0xf901fcf901f7a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b7829295a16db7cae65a071afbb272390f893dc1b0d3f098504148a7056f8056a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000080832fefd8808454c98c8142a0c7f735b359771b6bf60f2aa2e3a32398e9ee3632b1764ea4d825cc3fc24726108868e84fc7fccee640c0c0", - "lastblockhash" : "34071a807d83f8e634082378e3c236b5d790c5bb3f6f5e81b857067eb0a8679f", + "genesisRLP" : "0xf901fcf901f7a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b7829295a16db7cae65a071afbb272390f893dc1b0d3f098504148a7056f8056a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000080832fefd8808454c98c8142a0c4a5a1e102f00ee6bbd14cb709393974cf92d582dd87b6107af51b278cf013c188dae383a3bcb463f4c0c0", + "lastblockhash" : "95ecab43d8e58e74aba8e41d872b0c737fdd38856ee9b73adba7264ead771b7a", "postState" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "0x64", @@ -533,7 +592,7 @@ "wrongNonce" : { "blocks" : [ { - "rlp" : "0xf90262f901f9a09f8661c236c947e990a8ec6a36826a04116a3b8b538580fb11b4c24c002414aea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b3afc95220fb6e2df7fca71206d36e81b458ecfaff6c18b1c3414d30ad6b64efa0c0bd2a6e974187ddf5947f6da175d1ba181571fe404596b18566719b1d1f1a10a05e7d8bf8bc817405813b0866e3bfa1ad048f982be5b81ab17b4db03266b24b26b90100000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000400000000000000000000000000000000000000000000000000000008302000001832fefd882560b84557ff4db80a0d606f0a099a1665471070b58a59e8c010bc0f5e4cdc21bb7a3fd8e019e04ba3e880102030405060708f863f861800a82c35094095e7baea6a6c7c4c2dfeb977efac326af552d87821388801ca0e0ac29311ef444214c39a01dda74283660281755b080f736525ead2a44ef43d2a00601b2fd9fde08b0642a0ea65648ede9f90b4d038e8297849cb9546b78d3cd78c0" + "rlp" : "0xf90262f901f9a05a2ab57bc5dc222f521de0d5cc1e49469019f989235f82c475253d5db6656fcca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b3afc95220fb6e2df7fca71206d36e81b458ecfaff6c18b1c3414d30ad6b64efa0665f3db02fa03b0cc1c7fba2fb3f9d2ef4e309de73a966f88207e542f3bd67f0a05e7d8bf8bc817405813b0866e3bfa1ad048f982be5b81ab17b4db03266b24b26b90100000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000400000000000000000000000000000000000000000000000000000008302000001832fefd882560b845580086980a0f96def921818962e16267c228f3781edb5e5ad80ceeeea042834a4dd1b000421880102030405060708f863f861800a82c35094095e7baea6a6c7c4c2dfeb977efac326af552d87821388801ca0e484433ad0626add65420d33579a590e34124b64e530082d759c415d1a23fa8aa032cc56cd8f144496dd351ea847a4108d7bfd191c68b86260efe23e9ed051d6a0c0" } ], "genesisBlockHeader" : { @@ -543,9 +602,9 @@ "extraData" : "0x42", "gasLimit" : "0x2fefd8", "gasUsed" : "0x00", - "hash" : "9f8661c236c947e990a8ec6a36826a04116a3b8b538580fb11b4c24c002414ae", - "mixHash" : "7bba8aacca3f5f41b164a5fe9be14d4423482a8db61567be534fba8487c4542b", - "nonce" : "f9e12735eac5c35e", + "hash" : "5a2ab57bc5dc222f521de0d5cc1e49469019f989235f82c475253d5db6656fcc", + "mixHash" : "862066b5a444f2559cc5140db8bd69b8632afe4fdc83e526716209cb92a4810e", + "nonce" : "ce813f205b1b7559", "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", @@ -554,8 +613,8 @@ "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, - "genesisRLP" : "0xf901fcf901f7a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b7829295a16db7cae65a071afbb272390f893dc1b0d3f098504148a7056f8056a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000080832fefd8808454c98c8142a07bba8aacca3f5f41b164a5fe9be14d4423482a8db61567be534fba8487c4542b88f9e12735eac5c35ec0c0", - "lastblockhash" : "9f8661c236c947e990a8ec6a36826a04116a3b8b538580fb11b4c24c002414ae", + "genesisRLP" : "0xf901fcf901f7a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b7829295a16db7cae65a071afbb272390f893dc1b0d3f098504148a7056f8056a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000080832fefd8808454c98c8142a0862066b5a444f2559cc5140db8bd69b8632afe4fdc83e526716209cb92a4810e88ce813f205b1b7559c0c0", + "lastblockhash" : "5a2ab57bc5dc222f521de0d5cc1e49469019f989235f82c475253d5db6656fcc", "postState" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "0x64", @@ -592,7 +651,7 @@ "wrongNumber" : { "blocks" : [ { - "rlp" : "0xf90262f901f9a0355330178117d2d83a04982501753442e9cb04e037f7df1f9eca29ddea6666baa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b3afc95220fb6e2df7fca71206d36e81b458ecfaff6c18b1c3414d30ad6b64efa02209b441926c515a6da60653f83b71e448236e1ae5240847b2e316b725521649a05e7d8bf8bc817405813b0866e3bfa1ad048f982be5b81ab17b4db03266b24b26b90100000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000400000000000000000000000000000000000000000000000000000008302000080832fefd882560b84557ff4dd80a086286d028f067a84fd47ad22b04492dda6ee99fb1e0f84b60e9e12b3b2fd55ec88831fba7fec7ee0d4f863f861800a82c35094095e7baea6a6c7c4c2dfeb977efac326af552d87821388801ca0f6e994176cfd1896f4cbf8bf15afa87b3471aa18c5d2fa0ed27a4c5b32ccef49a0d41553c633e2857252a873728f1260c6dfb6c034eb3e16cee7eec2432351d4f8c0" + "rlp" : "0xf90262f901f9a05e4fb1654ae8f9a32c458fb449f596b5d600a669e27f1f0c0fa067ff4598d54fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b3afc95220fb6e2df7fca71206d36e81b458ecfaff6c18b1c3414d30ad6b64efa0425b074e9da4241a68732ae50fa3d3f2acb56b1ca1170f1965ef375e0ec62c54a05e7d8bf8bc817405813b0866e3bfa1ad048f982be5b81ab17b4db03266b24b26b90100000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000400000000000000000000000000000000000000000000000000000008302000080832fefd882560b845580086c80a04d1f8b361a5f4443143ac2ac27bb53964d4c48462d3fec19e2519f2d1dea0cd3884ea6731f2800324df863f861800a82c35094095e7baea6a6c7c4c2dfeb977efac326af552d87821388801ba0b7fa143e0d51b1e6d49f56a3325507242b7858c56e79287d91d04686304335e3a091290444af585b3d1a9017e73fb7a372c68c08f69b2c58285df979a82f5b1bd7c0" } ], "genesisBlockHeader" : { @@ -602,9 +661,9 @@ "extraData" : "0x42", "gasLimit" : "0x2fefd8", "gasUsed" : "0x00", - "hash" : "355330178117d2d83a04982501753442e9cb04e037f7df1f9eca29ddea6666ba", - "mixHash" : "7acac5570c7e5c6b105b8c16a3072a5bf79e2dabddda3b732ea1aee2c5ddec63", - "nonce" : "3129a41a4c150512", + "hash" : "5e4fb1654ae8f9a32c458fb449f596b5d600a669e27f1f0c0fa067ff4598d54f", + "mixHash" : "5bcefb1f3e7c5ccaf0d84bc63c907de380ad3c75600f7867c699010026134edc", + "nonce" : "9db829b4cb087473", "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", @@ -613,8 +672,8 @@ "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, - "genesisRLP" : "0xf901fcf901f7a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b7829295a16db7cae65a071afbb272390f893dc1b0d3f098504148a7056f8056a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000080832fefd8808454c98c8142a07acac5570c7e5c6b105b8c16a3072a5bf79e2dabddda3b732ea1aee2c5ddec63883129a41a4c150512c0c0", - "lastblockhash" : "355330178117d2d83a04982501753442e9cb04e037f7df1f9eca29ddea6666ba", + "genesisRLP" : "0xf901fcf901f7a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b7829295a16db7cae65a071afbb272390f893dc1b0d3f098504148a7056f8056a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000080832fefd8808454c98c8142a05bcefb1f3e7c5ccaf0d84bc63c907de380ad3c75600f7867c699010026134edc889db829b4cb087473c0c0", + "lastblockhash" : "5e4fb1654ae8f9a32c458fb449f596b5d600a669e27f1f0c0fa067ff4598d54f", "postState" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "0x64", @@ -651,7 +710,7 @@ "wrongParentHash" : { "blocks" : [ { - "rlp" : "0xf90262f901f9a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b3afc95220fb6e2df7fca71206d36e81b458ecfaff6c18b1c3414d30ad6b64efa0e9cfddb76c058b94c8617f5aec0e88b4ab114245e268a33b1a70decfb68bb9f5a05e7d8bf8bc817405813b0866e3bfa1ad048f982be5b81ab17b4db03266b24b26b90100000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000400000000000000000000000000000000000000000000000000000008302000001832fefd882560b84557ff4e080a07fbef8b98816e481ae842f068d73295123a84bf5f836faa4968233552542fef688c22ccbe4f4fd97d4f863f861800a82c35094095e7baea6a6c7c4c2dfeb977efac326af552d87821388801ba0df47648ebbd41ebb39b9b82a2cfa6221f86848d3cc9325719eedea1cb5e3236ea0a70f89fb9954ae52f9a9823a28c5973fedd07dca3728585524f7ddf36c4a2699c0" + "rlp" : "0xf90262f901f9a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b3afc95220fb6e2df7fca71206d36e81b458ecfaff6c18b1c3414d30ad6b64efa09bcef24279d734ec0f5151448d92728101bbbb71b7c1ba3adce079bf655328a4a05e7d8bf8bc817405813b0866e3bfa1ad048f982be5b81ab17b4db03266b24b26b90100000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000400000000000000000000000000000000000000000000000000000008302000001832fefd882560b845580086f80a00866e96be83d0237c593eee154fecd6b25aa482efe22b3d88b5b9c3affbc878588ee154394248920a0f863f861800a82c35094095e7baea6a6c7c4c2dfeb977efac326af552d87821388801ba04f54d5080a085c2a62afd4b98a32d1c2a654c2cb9a08ad77184f3f2a176e6585a0dd9f28fb91941ebd2c010e8bc90a78b02ed25747998f20137651b4906c9c38acc0" } ], "genesisBlockHeader" : { @@ -661,9 +720,9 @@ "extraData" : "0x42", "gasLimit" : "0x2fefd8", "gasUsed" : "0x00", - "hash" : "19ba95521795315095932fdbcdfd6252f5be122ed9e11a4bdc76ff37d9e01126", - "mixHash" : "da98a6b8dff33e89dc016b90c713bb001a50654a90fbf004929b85a629e0ec98", - "nonce" : "df4c80f3d5a91dad", + "hash" : "364fda1ab2268356c2b62c535175f3f34e9c13e7efe080c77c55c06d5b96160a", + "mixHash" : "18a9fbd004aab480e4524113be86ec637754e1686ae6ea3720feb79c19e09daf", + "nonce" : "a3c68869e5eeee96", "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", @@ -672,8 +731,8 @@ "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, - "genesisRLP" : "0xf901fcf901f7a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b7829295a16db7cae65a071afbb272390f893dc1b0d3f098504148a7056f8056a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000080832fefd8808454c98c8142a0da98a6b8dff33e89dc016b90c713bb001a50654a90fbf004929b85a629e0ec9888df4c80f3d5a91dadc0c0", - "lastblockhash" : "19ba95521795315095932fdbcdfd6252f5be122ed9e11a4bdc76ff37d9e01126", + "genesisRLP" : "0xf901fcf901f7a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b7829295a16db7cae65a071afbb272390f893dc1b0d3f098504148a7056f8056a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000080832fefd8808454c98c8142a018a9fbd004aab480e4524113be86ec637754e1686ae6ea3720feb79c19e09daf88a3c68869e5eeee96c0c0", + "lastblockhash" : "364fda1ab2268356c2b62c535175f3f34e9c13e7efe080c77c55c06d5b96160a", "postState" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "0x64", @@ -710,7 +769,7 @@ "wrongParentHash2" : { "blocks" : [ { - "rlp" : "0xf90262f901f9a06151889c8f14ab46e32ee0b1894bc276416385d068a1ade000d0dadef9b08b18a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b3afc95220fb6e2df7fca71206d36e81b458ecfaff6c18b1c3414d30ad6b64efa08447f44931420a82dc813998fc980608ba69b6e989d8e067ed54f4e4d1b00516a05e7d8bf8bc817405813b0866e3bfa1ad048f982be5b81ab17b4db03266b24b26b90100000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000400000000000000000000000000000000000000000000000000000008302000001832fefd882560b84557ff4e480a0a96d9d00cb83d9a3eaa10269ac9e3297f9af79ebe15b02033bd6c1f6a237836c88f99d1d09396a9c18f863f861800a82c35094095e7baea6a6c7c4c2dfeb977efac326af552d87821388801ba0a830793b992f6725dda16af6d2a3e7c8b5b6d39bd15cf15fa13ed68caa5d8db1a04fb1a8166dba1eb68377ded6cc8f416762401ca12c7bda444356e320a2fbbd3fc0" + "rlp" : "0xf90262f901f9a06151889c8f14ab46e32ee0b1894bc276416385d068a1ade000d0dadef9b08b18a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b3afc95220fb6e2df7fca71206d36e81b458ecfaff6c18b1c3414d30ad6b64efa06000aacffdd01c3b296e1219bad0986d9a1d89b91047383e926f352c8644b64fa05e7d8bf8bc817405813b0866e3bfa1ad048f982be5b81ab17b4db03266b24b26b90100000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000400000000000000000000000000000000000000000000000000000008302000001832fefd882560b845580087280a0d9bf2ce6631f9d17925e22bb359ad29286fc5c9bf6ebccf9814bc4adbfc92ddc88e27271ef80a5cff5f863f861800a82c35094095e7baea6a6c7c4c2dfeb977efac326af552d87821388801ca0ca1a5b328644f9e429d97671643acd200e1455cc37e93eb12ffcec1110101a8ba05a2b98a506cb70cfc8841ffa27cdfbb8d6c2804f79671e1fea15207b5d56c14bc0" } ], "genesisBlockHeader" : { @@ -720,9 +779,9 @@ "extraData" : "0x42", "gasLimit" : "0x2fefd8", "gasUsed" : "0x00", - "hash" : "5272d5baa3babce753a5f092b5c3634743ab41d6f40de3fb867b044cdfa50a4c", - "mixHash" : "4ff65189a4cb2b2f799783a0551050eb4797e0e6260eae53676780be9939d97f", - "nonce" : "fcb284742b76ee35", + "hash" : "59c8cb6d65b73e8cb894a6f20542e2ff242a291b6267ed3db62a43247d240c41", + "mixHash" : "f0bf8c7437ccb8d5223a6c1ba259ec9f480c66a75aa19ffe1e69c5aa1504e3e2", + "nonce" : "e90cf83a53a88bf4", "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", @@ -731,8 +790,8 @@ "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, - "genesisRLP" : "0xf901fcf901f7a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b7829295a16db7cae65a071afbb272390f893dc1b0d3f098504148a7056f8056a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000080832fefd8808454c98c8142a04ff65189a4cb2b2f799783a0551050eb4797e0e6260eae53676780be9939d97f88fcb284742b76ee35c0c0", - "lastblockhash" : "5272d5baa3babce753a5f092b5c3634743ab41d6f40de3fb867b044cdfa50a4c", + "genesisRLP" : "0xf901fcf901f7a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b7829295a16db7cae65a071afbb272390f893dc1b0d3f098504148a7056f8056a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000080832fefd8808454c98c8142a0f0bf8c7437ccb8d5223a6c1ba259ec9f480c66a75aa19ffe1e69c5aa1504e3e288e90cf83a53a88bf4c0c0", + "lastblockhash" : "59c8cb6d65b73e8cb894a6f20542e2ff242a291b6267ed3db62a43247d240c41", "postState" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "0x64", @@ -769,7 +828,7 @@ "wrongReceiptTrie" : { "blocks" : [ { - "rlp" : "0xf90262f901f9a06605eef6ead056d45d2b56c83703faad6172fb0081e486f9f249949fe7d5e953a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b3afc95220fb6e2df7fca71206d36e81b458ecfaff6c18b1c3414d30ad6b64efa035c5334d1e4423d1373bdcfece52dc1dbe7b74d0deff46c3384f212150b50282a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000400000000000000000000000000000000000000000000000000000008302000001832fefd882560b84557ff4e880a06026e2cfa76464cd9f33e8f3a29181323530cd68243ba848725d11e81af0b63b8892b0b0478ae521f9f863f861800a82c35094095e7baea6a6c7c4c2dfeb977efac326af552d87821388801ca0ce136fc0dd98a87f038919adff9146a56f47dee178e08fec457fd5e8ffedeb96a0877183fd1b9c22c05a7d48efac8d14f4d7826a32f0f1c917bcb995df201f21c2c0" + "rlp" : "0xf90262f901f9a03ed497b84bb6be18a3caa02c3aeb9271b9367ebc227033e8ab780cf66c1d9062a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b3afc95220fb6e2df7fca71206d36e81b458ecfaff6c18b1c3414d30ad6b64efa0d547257434c73520b2958de3368feecaadaec13fe2ed7c1841c51eb65ee85388a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000400000000000000000000000000000000000000000000000000000008302000001832fefd882560b845580087580a04bafa084097d4dec7a1ce4b445e7569481bef76f1d173d82e02e0e009b13bdaf886f4b992147f4acccf863f861800a82c35094095e7baea6a6c7c4c2dfeb977efac326af552d87821388801ba0be6a87a493597aeeb164fa15708b879023dd8f52411bd4bd3bc51d20f8b6a1fca059277aac4b6bfda0e63352237ff10a057dad8a431020d58f8d36fccf1da55168c0" } ], "genesisBlockHeader" : { @@ -779,9 +838,9 @@ "extraData" : "0x42", "gasLimit" : "0x2fefd8", "gasUsed" : "0x00", - "hash" : "6605eef6ead056d45d2b56c83703faad6172fb0081e486f9f249949fe7d5e953", - "mixHash" : "b3fdfcbef5c525dbb62f57a184a555b0c58d97c77e09268598d8c4c60d2ea77d", - "nonce" : "7858c0f32c2ed54f", + "hash" : "3ed497b84bb6be18a3caa02c3aeb9271b9367ebc227033e8ab780cf66c1d9062", + "mixHash" : "4c9b926ce017c4e50ba066437a89d814f95bed53f5326c5a610847b03222a078", + "nonce" : "668c2e238f9a096c", "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", @@ -790,8 +849,8 @@ "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, - "genesisRLP" : "0xf901fcf901f7a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b7829295a16db7cae65a071afbb272390f893dc1b0d3f098504148a7056f8056a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000080832fefd8808454c98c8142a0b3fdfcbef5c525dbb62f57a184a555b0c58d97c77e09268598d8c4c60d2ea77d887858c0f32c2ed54fc0c0", - "lastblockhash" : "6605eef6ead056d45d2b56c83703faad6172fb0081e486f9f249949fe7d5e953", + "genesisRLP" : "0xf901fcf901f7a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b7829295a16db7cae65a071afbb272390f893dc1b0d3f098504148a7056f8056a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000080832fefd8808454c98c8142a04c9b926ce017c4e50ba066437a89d814f95bed53f5326c5a610847b03222a07888668c2e238f9a096cc0c0", + "lastblockhash" : "3ed497b84bb6be18a3caa02c3aeb9271b9367ebc227033e8ab780cf66c1d9062", "postState" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "0x64", @@ -828,7 +887,7 @@ "wrongStateRoot" : { "blocks" : [ { - "rlp" : "0xf90262f901f9a0edcba92aa67f033d719c6d1b619c6a53df9a572219b9e553e4949e5e11e42be7a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0f99eb1626cfa6db435c0836235942d7ccaa935f1ae247d3f1c21e495685f903aa00220feb94650793c6e5b5c82da3bc726257b8578952f2007f5a43a221cf644dda05e7d8bf8bc817405813b0866e3bfa1ad048f982be5b81ab17b4db03266b24b26b90100000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000400000000000000000000000000000000000000000000000000000008302000001832fefd882560b84557ff4eb80a03655fc3d30ce560424d4276b783df42363da9127557f80b452f0057e0093303e882db7f68a9bac0f8df863f861800a82c35094095e7baea6a6c7c4c2dfeb977efac326af552d87821388801ca0172577eb4010360f0104a92844e03b56ac437157135ca3e22a5ed6326e0ecfc9a01e27afa553dd478cf4881a671e8da268c9cb5dfa00cdc25539a14268cc069527c0" + "rlp" : "0xf90262f901f9a0af0b430f986c9eaa44096cfbdaec6af6f7e85dc5321d9d41773caaa159faefc4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0f99eb1626cfa6db435c0836235942d7ccaa935f1ae247d3f1c21e495685f903aa021103590c059df97971664e2655eefd20db46fd711bcecb691eadf3844d0b355a05e7d8bf8bc817405813b0866e3bfa1ad048f982be5b81ab17b4db03266b24b26b90100000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000400000000000000000000000000000000000000000000000000000008302000001832fefd882560b845580087980a0440d000bf14d0a72eb1e5fc528942ffaff7917946c0156eaf41d4b94c9d2fd998891b1ed3a9d8d9edef863f861800a82c35094095e7baea6a6c7c4c2dfeb977efac326af552d87821388801ba02b554cbe7f00eef1a6e328e1982cbb0b73350c9c6cd7ecab52abf9c35837f3dda02417a809ed67dbac0cd5e2a1f7da3c132b3ab89ff770985aae5948036d29e27bc0" } ], "genesisBlockHeader" : { @@ -838,9 +897,9 @@ "extraData" : "0x42", "gasLimit" : "0x2fefd8", "gasUsed" : "0x00", - "hash" : "edcba92aa67f033d719c6d1b619c6a53df9a572219b9e553e4949e5e11e42be7", - "mixHash" : "88af4ef320f4e007fe1eb3b683fdf9adbf38c98e8d4e350bed853e2bb63552bd", - "nonce" : "7bf2e2bf22b302c9", + "hash" : "af0b430f986c9eaa44096cfbdaec6af6f7e85dc5321d9d41773caaa159faefc4", + "mixHash" : "1895fae398d313e792b4bb6780f602b71d93f36db891b687fbb53189440fac90", + "nonce" : "ba308a91e503ff4a", "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", @@ -849,8 +908,8 @@ "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, - "genesisRLP" : "0xf901fcf901f7a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b7829295a16db7cae65a071afbb272390f893dc1b0d3f098504148a7056f8056a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000080832fefd8808454c98c8142a088af4ef320f4e007fe1eb3b683fdf9adbf38c98e8d4e350bed853e2bb63552bd887bf2e2bf22b302c9c0c0", - "lastblockhash" : "edcba92aa67f033d719c6d1b619c6a53df9a572219b9e553e4949e5e11e42be7", + "genesisRLP" : "0xf901fcf901f7a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b7829295a16db7cae65a071afbb272390f893dc1b0d3f098504148a7056f8056a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000080832fefd8808454c98c8142a01895fae398d313e792b4bb6780f602b71d93f36db891b687fbb53189440fac9088ba308a91e503ff4ac0c0", + "lastblockhash" : "af0b430f986c9eaa44096cfbdaec6af6f7e85dc5321d9d41773caaa159faefc4", "postState" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "0x64", @@ -887,7 +946,7 @@ "wrongTimestamp" : { "blocks" : [ { - "rlp" : "0xf90262f901f9a0325d37a5c37719331172d7d393211fa6f768c27cd6caf54134d0f821769404aaa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b3afc95220fb6e2df7fca71206d36e81b458ecfaff6c18b1c3414d30ad6b64efa0c33dadd6c3c8060f83d1f94e481b0940ea2bdea2dc32d773205bcc6083856f43a05e7d8bf8bc817405813b0866e3bfa1ad048f982be5b81ab17b4db03266b24b26b90100000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000400000000000000000000000000000000000000000000000000000008302000001832fefd882560b8454c98c8080a0fc1df352eae9084145df1a657decd03ef7fd842798f4ef3ac9090c2faf0095f28858d51dbe68417246f863f861800a82c35094095e7baea6a6c7c4c2dfeb977efac326af552d87821388801ca021a1e6616055d70e7d5e47789985356469bc6027c5515c9ed758ce80b6874d17a0d270a747a2c1fdb4b6bbd4b7465db93a72cb13068e196a04c7b4660ae5625175c0" + "rlp" : "0xf90262f901f9a07e0c4dc229e760d17ca0f8a8375886881a964125cd4cc5518730ab2b97340122a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b3afc95220fb6e2df7fca71206d36e81b458ecfaff6c18b1c3414d30ad6b64efa0d3cbc67fa7558e25e25631956d9a2eef49a3ae080707349e5ef6ce1ccca31ce1a05e7d8bf8bc817405813b0866e3bfa1ad048f982be5b81ab17b4db03266b24b26b90100000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000400000000000000000000000000000000000000000000000000000008302000001832fefd882560b8454c98c8080a026845b0a63445af7d7430f8851ff9bccfd6fd0e0e957ac8f89469378200a54aa883ef67d58d5523d1bf863f861800a82c35094095e7baea6a6c7c4c2dfeb977efac326af552d87821388801ba0e6e9bea53437519889644cf8701e1addeb88994ec1c0f1dffdf9f44386a8eb68a062ecb4acf823edea6f690284f9d4863b07222d830e15e8ac95025ba624187b39c0" } ], "genesisBlockHeader" : { @@ -897,9 +956,9 @@ "extraData" : "0x42", "gasLimit" : "0x2fefd8", "gasUsed" : "0x00", - "hash" : "325d37a5c37719331172d7d393211fa6f768c27cd6caf54134d0f821769404aa", - "mixHash" : "136c26720914f9bd3a463d9b77845cd9e87072f741a7816c20fcde7f0788765d", - "nonce" : "58912a71e2613c86", + "hash" : "7e0c4dc229e760d17ca0f8a8375886881a964125cd4cc5518730ab2b97340122", + "mixHash" : "f5dd7227023cc3e42cd2dfeffbbaf182129677c36dd00a804fbf25b8e90b4c69", + "nonce" : "ea1a64cbda5dd7f9", "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", @@ -908,8 +967,8 @@ "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, - "genesisRLP" : "0xf901fcf901f7a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b7829295a16db7cae65a071afbb272390f893dc1b0d3f098504148a7056f8056a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000080832fefd8808454c98c8142a0136c26720914f9bd3a463d9b77845cd9e87072f741a7816c20fcde7f0788765d8858912a71e2613c86c0c0", - "lastblockhash" : "325d37a5c37719331172d7d393211fa6f768c27cd6caf54134d0f821769404aa", + "genesisRLP" : "0xf901fcf901f7a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b7829295a16db7cae65a071afbb272390f893dc1b0d3f098504148a7056f8056a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000080832fefd8808454c98c8142a0f5dd7227023cc3e42cd2dfeffbbaf182129677c36dd00a804fbf25b8e90b4c6988ea1a64cbda5dd7f9c0c0", + "lastblockhash" : "7e0c4dc229e760d17ca0f8a8375886881a964125cd4cc5518730ab2b97340122", "postState" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "0x64", @@ -946,7 +1005,7 @@ "wrongTransactionsTrie" : { "blocks" : [ { - "rlp" : "0xf90262f901f9a06a3767b6a08363f58f77cfa98fc68a70279cecc75e1961967851b9cdd04210c9a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b3afc95220fb6e2df7fca71206d36e81b458ecfaff6c18b1c3414d30ad6b64efa055e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a05e7d8bf8bc817405813b0866e3bfa1ad048f982be5b81ab17b4db03266b24b26b90100000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000400000000000000000000000000000000000000000000000000000008302000001832fefd882560b84557ff4f280a0bf84dfbf14c6f38086a79c92c5544cb40793646234a78ac75e30430f436743a788faf2ad3f0d068414f863f861800a82c35094095e7baea6a6c7c4c2dfeb977efac326af552d87821388801ba042bf238a8911d8c3606b17b889a5eb28cd9615b92a3786f2ec9923dc8a583982a073fe353a68edd8e3ef69b6bbfcd7c2e4aa5ac4cd30799359022e992a0b05a33fc0" + "rlp" : "0xf90262f901f9a03b19ebcfaeb573a81c87c0f5645755b408ff7ac9d51716f707962ec4ffaeb0f9a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b3afc95220fb6e2df7fca71206d36e81b458ecfaff6c18b1c3414d30ad6b64efa055e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a05e7d8bf8bc817405813b0866e3bfa1ad048f982be5b81ab17b4db03266b24b26b90100000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000400000000000000000000000000000000000000000000000000000008302000001832fefd882560b845580088180a04380d8e8ed2a1130f4adc14d7c60f77ad4eea8e0d2084da440a6ef8ff5e1141a8880d245443bdba17cf863f861800a82c35094095e7baea6a6c7c4c2dfeb977efac326af552d87821388801ba0d4d2fe5bb107a11bc741a4d6649e2ce616d3fc1d618bd3ae8eefd8ba588e6b3ca0c106cdd9670273cfefead66a425b2e84861e319efa36cc119bc26bdc04a25878c0" } ], "genesisBlockHeader" : { @@ -956,9 +1015,9 @@ "extraData" : "0x42", "gasLimit" : "0x2fefd8", "gasUsed" : "0x00", - "hash" : "6a3767b6a08363f58f77cfa98fc68a70279cecc75e1961967851b9cdd04210c9", - "mixHash" : "12f8ecbe70493ad82c374c2790718cb4cbe715811e368b59e5571194aeab640e", - "nonce" : "43ede73455d20c96", + "hash" : "3b19ebcfaeb573a81c87c0f5645755b408ff7ac9d51716f707962ec4ffaeb0f9", + "mixHash" : "8db646afe41ccfb281ceee822d83bcb206fae519fc33928cbb2237c9ec54e5cc", + "nonce" : "a7da800b080801c2", "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", @@ -967,8 +1026,8 @@ "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, - "genesisRLP" : "0xf901fcf901f7a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b7829295a16db7cae65a071afbb272390f893dc1b0d3f098504148a7056f8056a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000080832fefd8808454c98c8142a012f8ecbe70493ad82c374c2790718cb4cbe715811e368b59e5571194aeab640e8843ede73455d20c96c0c0", - "lastblockhash" : "6a3767b6a08363f58f77cfa98fc68a70279cecc75e1961967851b9cdd04210c9", + "genesisRLP" : "0xf901fcf901f7a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b7829295a16db7cae65a071afbb272390f893dc1b0d3f098504148a7056f8056a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000080832fefd8808454c98c8142a08db646afe41ccfb281ceee822d83bcb206fae519fc33928cbb2237c9ec54e5cc88a7da800b080801c2c0c0", + "lastblockhash" : "3b19ebcfaeb573a81c87c0f5645755b408ff7ac9d51716f707962ec4ffaeb0f9", "postState" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "0x64", @@ -1005,7 +1064,7 @@ "wrongUncleHash" : { "blocks" : [ { - "rlp" : "0xf90262f901f9a02fdc5ea2e08e8ae80a0aed1efc05125f25e5f109f3c6d0e2e71e663c20efd382a00dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b3afc95220fb6e2df7fca71206d36e81b458ecfaff6c18b1c3414d30ad6b64efa06923d4c8153b65641c6d4474e419e2ee39805bf80f7e898428f8a7db312505a5a05e7d8bf8bc817405813b0866e3bfa1ad048f982be5b81ab17b4db03266b24b26b90100000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000400000000000000000000000000000000000000000000000000000008302000001832fefd882560b84557ff4f680a07e8315ad74c3e73b3a0e0ca1b34d33d244c27fa3863a76f131bea4f561fee93a888358852fea734303f863f861800a82c35094095e7baea6a6c7c4c2dfeb977efac326af552d87821388801ba0195aff059a6627625b77818df5cd44a4aa84c21a2afcc60fd92531ac00860503a0f1fa453ebdacb26ebfcc302a5fc3fa9e4fec0646dfbfe4e45fad937a868fd76dc0" + "rlp" : "0xf90262f901f9a0f86a84d48f2b23a69dd4d6089d19be8ef8a8e6f6c918e80628593eb9d6bffb16a00dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b3afc95220fb6e2df7fca71206d36e81b458ecfaff6c18b1c3414d30ad6b64efa0bdb4ee73274ec0a6b488ec9053da8e5776d0e8e74dd30defebbe0ab8b7915fd4a05e7d8bf8bc817405813b0866e3bfa1ad048f982be5b81ab17b4db03266b24b26b90100000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000400000000000000000000000000000000000000000000000000000008302000001832fefd882560b845580088380a028219f11c12eb335867a29722e677158b49751866db3cda447658de07e9521e288ceede1e19a136236f863f861800a82c35094095e7baea6a6c7c4c2dfeb977efac326af552d87821388801ca07882718cb4b1a3fd98c2335718e9e6e9cb8fa9d9f35e6b5e1c2e95c6b140747aa0d24721e675983de4e66e3cf7685801b186b3150545ec4e31de1c2437d8fe34b5c0" } ], "genesisBlockHeader" : { @@ -1015,9 +1074,9 @@ "extraData" : "0x42", "gasLimit" : "0x2fefd8", "gasUsed" : "0x00", - "hash" : "2fdc5ea2e08e8ae80a0aed1efc05125f25e5f109f3c6d0e2e71e663c20efd382", - "mixHash" : "caebfc33a6b7811665aefadc1104c5d32aec2a1637a468c157c6de7ffcec13c9", - "nonce" : "9eddc636c8cb7c86", + "hash" : "f86a84d48f2b23a69dd4d6089d19be8ef8a8e6f6c918e80628593eb9d6bffb16", + "mixHash" : "5b997f0654da65676b318bbf1a9e942910b72027f8d675684a1e9a1ffe00344e", + "nonce" : "185358fefb4cca5d", "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", @@ -1026,8 +1085,8 @@ "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, - "genesisRLP" : "0xf901fcf901f7a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b7829295a16db7cae65a071afbb272390f893dc1b0d3f098504148a7056f8056a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000080832fefd8808454c98c8142a0caebfc33a6b7811665aefadc1104c5d32aec2a1637a468c157c6de7ffcec13c9889eddc636c8cb7c86c0c0", - "lastblockhash" : "2fdc5ea2e08e8ae80a0aed1efc05125f25e5f109f3c6d0e2e71e663c20efd382", + "genesisRLP" : "0xf901fcf901f7a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b7829295a16db7cae65a071afbb272390f893dc1b0d3f098504148a7056f8056a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000080832fefd8808454c98c8142a05b997f0654da65676b318bbf1a9e942910b72027f8d675684a1e9a1ffe00344e88185358fefb4cca5dc0c0", + "lastblockhash" : "f86a84d48f2b23a69dd4d6089d19be8ef8a8e6f6c918e80628593eb9d6bffb16", "postState" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "0x64", diff --git a/tests/files/BlockTests/bcInvalidRLPTest.json b/tests/files/BlockchainTests/bcInvalidRLPTest.json similarity index 91% rename from tests/files/BlockTests/bcInvalidRLPTest.json rename to tests/files/BlockchainTests/bcInvalidRLPTest.json index c4324819a3..10555df17f 100644 --- a/tests/files/BlockTests/bcInvalidRLPTest.json +++ b/tests/files/BlockchainTests/bcInvalidRLPTest.json @@ -5,40 +5,39 @@ "rlp" : "0xfb00000260f901f9a02a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0ef1552a40b7165c3cd773806b9e0c165b75356e0314bf0706f279c729f51e017a0b6c9fd1447d0b414a1f05957927746f58ef5a2ebde17db631d460eaf6a93b18da0bc37d79753ad738a6dac4921e57392f145d8887476de3f783dfa7edae9283e52b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000001832fefd8825208845509814280a00451dd53d9c09f3cfb627b51d9d80632ed801f6330ee584bffc26caac9b9249f88c7bffe5ebd94cc2ff861f85f800a82c35094095e7baea6a6c7c4c2dfeb977efac326af552d870a801ba098c3a099885a281885f487fd37550de16436e8c47874cd213531b10fe751617fa044b6b81011ce57bffcaf610bf728fb8a7237ad261ea2d937423d78eb9e137076c0" } ], - "lastblockhash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "lastblockhash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -51,40 +50,39 @@ "rlp" : "0xf9026ef901f9a02a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0ef1552a40b7165c3cd773806b9e0c165b75356e0314bf0706f279c729f51e017a0b6c9fd1447d0b414a1f05957927746f58ef5a2ebde17db631d460eaf6a93b18da0bc37d79753ad738a6dac4921e57392f145d8887476de3f783dfa7edae9283e52b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000001832fefd8825208845509814280a00451dd53d9c09f3cfb627b51d9d80632ed801f6330ee584bffc26caac9b9249f88c7bffe5ebd94cc2ff861f85f800a82c35094095e7baea6a6c7c4c2dfeb977efac326af552d870a801ba098c3a099885a281885f487fd37550de16436e8c47874cd213531b10fe751617fa044b6b81011ce57bffcaf610bf728fb8a7237ad261ea2d937423d78eb9e137076c0" } ], - "lastblockhash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "lastblockhash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -97,40 +95,39 @@ "rlp" : "0xb90260f901f9a02a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0ef1552a40b7165c3cd773806b9e0c165b75356e0314bf0706f279c729f51e017a0b6c9fd1447d0b414a1f05957927746f58ef5a2ebde17db631d460eaf6a93b18da0bc37d79753ad738a6dac4921e57392f145d8887476de3f783dfa7edae9283e52b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000001832fefd8825208845509814280a00451dd53d9c09f3cfb627b51d9d80632ed801f6330ee584bffc26caac9b9249f88c7bffe5ebd94cc2ff861f85f800a82c35094095e7baea6a6c7c4c2dfeb977efac326af552d870a801ba098c3a099885a281885f487fd37550de16436e8c47874cd213531b10fe751617fa044b6b81011ce57bffcaf610bf728fb8a7237ad261ea2d937423d78eb9e137076c0" } ], - "lastblockhash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "lastblockhash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -143,40 +140,39 @@ "rlp" : "0xf90260f90207a02a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0ef1552a40b7165c3cd773806b9e0c165b75356e0314bf0706f279c729f51e017a0b6c9fd1447d0b414a1f05957927746f58ef5a2ebde17db631d460eaf6a93b18da0bc37d79753ad738a6dac4921e57392f145d8887476de3f783dfa7edae9283e52b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000001832fefd8825208845509814280a00451dd53d9c09f3cfb627b51d9d80632ed801f6330ee584bffc26caac9b9249f88c7bffe5ebd94cc2ff861f85f800a82c35094095e7baea6a6c7c4c2dfeb977efac326af552d870a801ba098c3a099885a281885f487fd37550de16436e8c47874cd213531b10fe751617fa044b6b81011ce57bffcaf610bf728fb8a7237ad261ea2d937423d78eb9e137076c0" } ], - "lastblockhash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "lastblockhash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -189,40 +185,39 @@ "rlp" : "0xf90260b901f9a02a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0ef1552a40b7165c3cd773806b9e0c165b75356e0314bf0706f279c729f51e017a0b6c9fd1447d0b414a1f05957927746f58ef5a2ebde17db631d460eaf6a93b18da0bc37d79753ad738a6dac4921e57392f145d8887476de3f783dfa7edae9283e52b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000001832fefd8825208845509814280a00451dd53d9c09f3cfb627b51d9d80632ed801f6330ee584bffc26caac9b9249f88c7bffe5ebd94cc2ff861f85f800a82c35094095e7baea6a6c7c4c2dfeb977efac326af552d870a801ba098c3a099885a281885f487fd37550de16436e8c47874cd213531b10fe751617fa044b6b81011ce57bffcaf610bf728fb8a7237ad261ea2d937423d78eb9e137076c0" } ], - "lastblockhash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "lastblockhash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -240,35 +235,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -281,40 +276,39 @@ "rlp" : "0xf90262f901fba02a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d493479600008888f1f195afa192cfee860698584c030f4c9db1a0ef1552a40b7165c3cd773806b9e0c165b75356e0314bf0706f279c729f51e017a0b6c9fd1447d0b414a1f05957927746f58ef5a2ebde17db631d460eaf6a93b18da0bc37d79753ad738a6dac4921e57392f145d8887476de3f783dfa7edae9283e52b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000001832fefd8825208845509814280a00451dd53d9c09f3cfb627b51d9d80632ed801f6330ee584bffc26caac9b9249f88c7bffe5ebd94cc2ff861f85f800a82c35094095e7baea6a6c7c4c2dfeb977efac326af552d870a801ba098c3a099885a281885f487fd37550de16436e8c47874cd213531b10fe751617fa044b6b81011ce57bffcaf610bf728fb8a7237ad261ea2d937423d78eb9e137076c0" } ], - "lastblockhash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "lastblockhash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -327,40 +321,39 @@ "rlp" : "0xf90262f901fba02a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d4934796ef3d8888f1f195afa192cfee860698584c030f4c9db1a0ef1552a40b7165c3cd773806b9e0c165b75356e0314bf0706f279c729f51e017a0b6c9fd1447d0b414a1f05957927746f58ef5a2ebde17db631d460eaf6a93b18da0bc37d79753ad738a6dac4921e57392f145d8887476de3f783dfa7edae9283e52b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000001832fefd8825208845509814280a00451dd53d9c09f3cfb627b51d9d80632ed801f6330ee584bffc26caac9b9249f88c7bffe5ebd94cc2ff861f85f800a82c35094095e7baea6a6c7c4c2dfeb977efac326af552d870a801ba098c3a099885a281885f487fd37550de16436e8c47874cd213531b10fe751617fa044b6b81011ce57bffcaf610bf728fb8a7237ad261ea2d937423d78eb9e137076c0" } ], - "lastblockhash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "lastblockhash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -373,40 +366,39 @@ "rlp" : "0xf9025ef901f7a02a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d4934792f1f195afa192cfee860698584c030f4c9db1a0ef1552a40b7165c3cd773806b9e0c165b75356e0314bf0706f279c729f51e017a0b6c9fd1447d0b414a1f05957927746f58ef5a2ebde17db631d460eaf6a93b18da0bc37d79753ad738a6dac4921e57392f145d8887476de3f783dfa7edae9283e52b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000001832fefd8825208845509814280a00451dd53d9c09f3cfb627b51d9d80632ed801f6330ee584bffc26caac9b9249f88c7bffe5ebd94cc2ff861f85f800a82c35094095e7baea6a6c7c4c2dfeb977efac326af552d870a801ba098c3a099885a281885f487fd37550de16436e8c47874cd213531b10fe751617fa044b6b81011ce57bffcaf610bf728fb8a7237ad261ea2d937423d78eb9e137076c0" } ], - "lastblockhash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "lastblockhash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -419,40 +411,39 @@ "rlp" : "0xf90260f901f9a02a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347d48888f1f195afa192cfee860698584c030f4c9db1a0ef1552a40b7165c3cd773806b9e0c165b75356e0314bf0706f279c729f51e017a0b6c9fd1447d0b414a1f05957927746f58ef5a2ebde17db631d460eaf6a93b18da0bc37d79753ad738a6dac4921e57392f145d8887476de3f783dfa7edae9283e52b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000001832fefd8825208845509814280a00451dd53d9c09f3cfb627b51d9d80632ed801f6330ee584bffc26caac9b9249f88c7bffe5ebd94cc2ff861f85f800a82c35094095e7baea6a6c7c4c2dfeb977efac326af552d870a801ba098c3a099885a281885f487fd37550de16436e8c47874cd213531b10fe751617fa044b6b81011ce57bffcaf610bf728fb8a7237ad261ea2d937423d78eb9e137076c0" } ], - "lastblockhash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "lastblockhash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -469,35 +460,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -514,35 +505,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -559,35 +550,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -604,35 +595,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -649,35 +640,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -694,35 +685,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -739,35 +730,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -784,35 +775,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -829,35 +820,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -874,35 +865,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -919,35 +910,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -964,35 +955,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -1009,35 +1000,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -1054,35 +1045,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -1099,35 +1090,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -1144,35 +1135,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -1189,35 +1180,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -1234,35 +1225,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -1279,35 +1270,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -1324,35 +1315,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -1369,35 +1360,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -1414,35 +1405,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -1459,35 +1450,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -1504,35 +1495,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -1549,35 +1540,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -1594,35 +1585,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -1639,35 +1630,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -1684,35 +1675,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -1729,35 +1720,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -1774,35 +1765,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -1819,35 +1810,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -1864,35 +1855,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -1909,35 +1900,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -1954,35 +1945,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -1999,35 +1990,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -2044,35 +2035,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -2089,35 +2080,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -2134,35 +2125,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -2179,35 +2170,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -2224,35 +2215,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -2269,35 +2260,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -2314,35 +2305,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -2359,35 +2350,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -2404,35 +2395,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -2449,35 +2440,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -2494,35 +2485,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -2539,35 +2530,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -2584,35 +2575,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -2629,35 +2620,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -2674,35 +2665,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -2719,35 +2710,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -2764,35 +2755,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -2809,35 +2800,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -2854,35 +2845,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -2899,35 +2890,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -2944,35 +2935,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -2989,35 +2980,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -3034,35 +3025,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -3079,35 +3070,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -3124,35 +3115,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -3169,35 +3160,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -3214,35 +3205,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -3259,35 +3250,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -3304,35 +3295,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -3349,35 +3340,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -3394,35 +3385,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -3439,35 +3430,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -3484,35 +3475,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -3529,35 +3520,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -3574,35 +3565,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -3619,35 +3610,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -3664,35 +3655,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -3709,35 +3700,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -3754,35 +3745,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -3799,35 +3790,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -3844,35 +3835,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -3889,35 +3880,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -3934,35 +3925,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -3979,35 +3970,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -4024,35 +4015,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -4069,35 +4060,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -4114,35 +4105,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -4159,35 +4150,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -4204,35 +4195,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -4249,35 +4240,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -4294,35 +4285,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -4339,35 +4330,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -4384,35 +4375,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -4429,35 +4420,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -4474,35 +4465,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -4519,35 +4510,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -4564,35 +4555,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -4609,35 +4600,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -4654,35 +4645,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -4699,35 +4690,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -4744,35 +4735,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -4789,35 +4780,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -4834,35 +4825,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -4879,35 +4870,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -4924,35 +4915,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -4969,35 +4960,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -5014,35 +5005,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -5059,35 +5050,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -5104,35 +5095,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -5149,35 +5140,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -5194,35 +5185,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -5239,35 +5230,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -5284,35 +5275,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -5329,35 +5320,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -5374,35 +5365,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -5419,35 +5410,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -5464,35 +5455,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -5509,35 +5500,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -5554,35 +5545,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -5599,35 +5590,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -5644,35 +5635,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -5689,35 +5680,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -5734,35 +5725,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -5779,35 +5770,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -5824,35 +5815,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -5869,35 +5860,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -5914,35 +5905,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -5959,35 +5950,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -6004,35 +5995,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } @@ -6049,35 +6040,35 @@ "genesisBlockHeader" : { "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", - "difficulty" : "131072", + "difficulty" : "0x20000", "extraData" : "0x42", - "gasLimit" : "3141592", - "gasUsed" : "0", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", "hash" : "2a3c692012a15502ba9c39f3aebb36694eed978c74b52e6c0cf210d301dbf325", "mixHash" : "885d54819df29e91b6a2bc165c4c674c7a0e33acce8dfa48de980b45a06c0207", "nonce" : "50f61b04c9785721", - "number" : "0", + "number" : "0x00", "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "cafd881ab193703b83816c49ff6c2bf6ba6f464a1be560c42106128c8dbc35e7", - "timestamp" : "1422494849", + "timestamp" : "0x54c98c81", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "postState" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } }, "pre" : { "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "10000000000", + "balance" : "0x2540be400", "code" : "0x", - "nonce" : "0", + "nonce" : "0x00", "storage" : { } } diff --git a/tests/files/BlockTests/bcRPC_API_Test.json b/tests/files/BlockchainTests/bcRPC_API_Test.json similarity index 100% rename from tests/files/BlockTests/bcRPC_API_Test.json rename to tests/files/BlockchainTests/bcRPC_API_Test.json diff --git a/tests/files/BlockTests/bcTotalDifficultyTest.json b/tests/files/BlockchainTests/bcTotalDifficultyTest.json similarity index 100% rename from tests/files/BlockTests/bcTotalDifficultyTest.json rename to tests/files/BlockchainTests/bcTotalDifficultyTest.json diff --git a/tests/files/BlockTests/bcUncleHeaderValiditiy.json b/tests/files/BlockchainTests/bcUncleHeaderValiditiy.json similarity index 100% rename from tests/files/BlockTests/bcUncleHeaderValiditiy.json rename to tests/files/BlockchainTests/bcUncleHeaderValiditiy.json diff --git a/tests/files/BlockTests/bcUncleTest.json b/tests/files/BlockchainTests/bcUncleTest.json similarity index 100% rename from tests/files/BlockTests/bcUncleTest.json rename to tests/files/BlockchainTests/bcUncleTest.json diff --git a/tests/files/BlockTests/bcValidBlockTest.json b/tests/files/BlockchainTests/bcValidBlockTest.json similarity index 100% rename from tests/files/BlockTests/bcValidBlockTest.json rename to tests/files/BlockchainTests/bcValidBlockTest.json diff --git a/tests/files/BlockTests/bcWalletTest.json b/tests/files/BlockchainTests/bcWalletTest.json similarity index 100% rename from tests/files/BlockTests/bcWalletTest.json rename to tests/files/BlockchainTests/bcWalletTest.json diff --git a/tests/files/StateTests/stPrecompiledContractsTransaction.json b/tests/files/StateTests/stPreCompiledContractsTransaction.json similarity index 99% rename from tests/files/StateTests/stPrecompiledContractsTransaction.json rename to tests/files/StateTests/stPreCompiledContractsTransaction.json index afe63ad099..0117bf288f 100644 --- a/tests/files/StateTests/stPrecompiledContractsTransaction.json +++ b/tests/files/StateTests/stPreCompiledContractsTransaction.json @@ -8,7 +8,6 @@ "currentTimestamp" : "0x01", "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "expectOut" : "0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b", "logs" : [ ], "out" : "0x", @@ -64,7 +63,6 @@ "currentTimestamp" : "0x01", "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "expectOut" : "0x0000000000000000000000000000000000000000000000000000000000000000", "logs" : [ ], "out" : "0x", @@ -120,7 +118,6 @@ "currentTimestamp" : "0x01", "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "expectOut" : "0x", "logs" : [ ], "out" : "0x", @@ -162,7 +159,6 @@ "currentTimestamp" : "0x01", "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "expectOut" : "0x0000000000000000000000000000000000000000000000000000000000000000", "logs" : [ ], "out" : "0x", @@ -218,7 +214,6 @@ "currentTimestamp" : "0x01", "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "expectOut" : "0x0000000000000000000000000000000000000000000000000000000000000000", "logs" : [ ], "out" : "0x", @@ -274,7 +269,6 @@ "currentTimestamp" : "0x01", "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "expectOut" : "0x000000000000000000000000e4319f4b631c6d0fcfc84045dbcb676865fe5e13", "logs" : [ ], "out" : "0x", @@ -330,7 +324,6 @@ "currentTimestamp" : "0x01", "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "expectOut" : "0x0000000000000000000000003f17f1962b36e491b30a40b2405849e597ba5fb5", "logs" : [ ], "out" : "0x", @@ -386,7 +379,6 @@ "currentTimestamp" : "0x01", "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "expectOut" : "0x0000000000000000000000000000000000000000000000000000000000000001", "logs" : [ ], "out" : "0x", @@ -442,7 +434,6 @@ "currentTimestamp" : "0x01", "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "expectOut" : "0x", "logs" : [ ], "out" : "0x", @@ -498,7 +489,6 @@ "currentTimestamp" : "0x01", "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "expectOut" : "0x", "logs" : [ ], "out" : "0x", @@ -554,7 +544,6 @@ "currentTimestamp" : "0x01", "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "expectOut" : "0x0000000000000000000000000000000000000000000000000000000000000000f34578907f", "logs" : [ ], "out" : "0x", @@ -610,7 +599,6 @@ "currentTimestamp" : "0x01", "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "expectOut" : "0x000000000000000000000000000000000000000000000000000000f34578907f0000000000", "logs" : [ ], "out" : "0x", @@ -666,7 +654,6 @@ "currentTimestamp" : "0x01", "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "expectOut" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "logs" : [ ], "out" : "0x", @@ -722,7 +709,6 @@ "currentTimestamp" : "0x01", "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "expectOut" : "0x", "logs" : [ ], "out" : "0x", @@ -771,7 +757,6 @@ "currentTimestamp" : "0x01", "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "expectOut" : "#35659", "logs" : [ ], "out" : "0x", @@ -827,7 +812,6 @@ "currentTimestamp" : "0x01", "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "expectOut" : "0x000000000000000000000000ae387fcfeb723c3f5964509af111cf5a67f30661", "logs" : [ ], "out" : "0x", @@ -883,7 +867,6 @@ "currentTimestamp" : "0x01", "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "expectOut" : "0x0000000000000000000000009c1185a5c5e9fc54612808977ee8f548b2258d31", "logs" : [ ], "out" : "0x", @@ -939,7 +922,6 @@ "currentTimestamp" : "0x01", "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "expectOut" : "0x000000000000000000000000dbc100f916bfbc53535573d98cf0cbb3a5b36124", "logs" : [ ], "out" : "0x", @@ -995,7 +977,6 @@ "currentTimestamp" : "0x01", "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "expectOut" : "0x000000000000000000000000316750573f9be26bc17727b47cacedbd0ab3e6ca", "logs" : [ ], "out" : "0x", @@ -1051,7 +1032,6 @@ "currentTimestamp" : "0x01", "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "expectOut" : "0x0000000000000000000000001cf4e77f5966e13e109703cd8a0df7ceda7f3dc3", "logs" : [ ], "out" : "0x", @@ -1107,7 +1087,6 @@ "currentTimestamp" : "0x01", "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "expectOut" : "0x", "logs" : [ ], "out" : "0x", @@ -1156,7 +1135,6 @@ "currentTimestamp" : "0x01", "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "expectOut" : "0xec4916dd28fc4c10d78e287ca5d9cc51ee1ae73cbfde08c6b37324cbfaac8bc5", "logs" : [ ], "out" : "0x", @@ -1212,7 +1190,6 @@ "currentTimestamp" : "0x01", "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "expectOut" : "0xe3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "logs" : [ ], "out" : "0x", @@ -1268,7 +1245,6 @@ "currentTimestamp" : "0x01", "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "expectOut" : "0xcb39b3bde22925b2f931111130c774761d8895e0e08437c9b396c1e97d10f34d", "logs" : [ ], "out" : "0x", @@ -1324,7 +1300,6 @@ "currentTimestamp" : "0x01", "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "expectOut" : "0x7392925565d67be8e9620aacbcfaecd8cb6ec58d709d25da9eccf1d08a41ce35", "logs" : [ ], "out" : "0x", @@ -1380,7 +1355,6 @@ "currentTimestamp" : "0x01", "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "expectOut" : "0xaf9613760f72635fbdb44a5a0a63c39f12af30f950a6ee5c971be188e89c4051", "logs" : [ ], "out" : "0x", @@ -1436,7 +1410,6 @@ "currentTimestamp" : "0x01", "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "expectOut" : "0x259911ec9f4b02b7975dfa3f5da78fc58b7066604bdaea66c4485c90f6f55bec", "logs" : [ ], "out" : "0x", @@ -1492,7 +1465,6 @@ "currentTimestamp" : "0x01", "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "expectOut" : "0x0000000000000000000000000000000000000000000000000000000000000000", "logs" : [ ], "out" : "0x", diff --git a/tests/files/StateTests/stSpecialTest.json b/tests/files/StateTests/stSpecialTest.json index 28b81ac25d..9a41ef6e0e 100644 --- a/tests/files/StateTests/stSpecialTest.json +++ b/tests/files/StateTests/stSpecialTest.json @@ -164,6 +164,447 @@ "value" : "0x01f5" } }, + "block504980" : { + "env" : { + "currentCoinbase" : "1cdc8315bdb1362de8b7b2fa9ee75dc873037179", + "currentDifficulty" : "0x04e44ea721", + "currentGasLimit" : "0x2fefd8", + "currentNumber" : "0x07b494", + "currentTimestamp" : "0x01", + "previousHash" : "9ff4de714e01da9f8b61992efdab9b51ca14ac42d43f4c24df1d002a1239b1e9" + }, + "logs" : [ + ], + "out" : "0x0000000000000000000000000000000000000000000000000000000000000003", + "post" : { + "0000000000000000000000000000000000000000" : { + "balance" : "0x01", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "0000000000000000000000000000000000000001" : { + "balance" : "0x01", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "0000000000000000000000000000000000000002" : { + "balance" : "0x01", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "0000000000000000000000000000000000000003" : { + "balance" : "0x01", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "0000000000000000000000000000000000000004" : { + "balance" : "0x01", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "0ea65418d7bf32680f55572c943a94b590804998" : { + "balance" : "0x00", + "code" : "0x600061289f537c01000000000000000000000000000000000000000000000000000000006000350473c9ae5868651bf7b7db6e360217db49ce4e69c07e60205263c4982a8581141561012757600435606052602435608052608060805990590160009052600081526060518160200152608051816040015260008160600152809050205460a05260a051806020026020015990590160009052818152602081019050905060e0526000610140525b60a05161014051121561010b5760a060a0599059016000905260008152606051816020015260805181604001526001816060015261014051816080015280905020546101405160200260e051015260016101405101610140526100ad565b60e05160206040820352602060208203510260400160408203f3505b63cc1c944e8114156101765760043560605260243560805260806080599059016000905260008152606051816020015260805181604001526000816060015280905020546101a05260206101a0f35b6395a405b98114156101d5576004356060526024356080526044356101e05260a060a059905901600090526000815260605181602001526080518160400152600181606001526101e05181608001528090502054610200526020610200f35b6371ebb662811415610224576004356060526024356080526080608059905901600090526000815260605181602001526080518160400152600281606001528090502054610240526020610240f35b637a57a3db811415610325576004356060526024356080526044356102805260c060c0599059016000905260008152606051816020015260805181604001526003816060015261028051816080015260008160a0015280905020608060805990590160009052600081526060518160200152608051816040015260008160600152809050205460200280806020015990590160009052818152602081019050905060005b602083048112156102e95780840154816020028301526001810190506102c8565b602083066020036101000a60000381850154168160200283015281905090509050905060206040820352602060208203510260400160408203f3505b63f73dc690811415610394576004356060526024356080526044356103c0526064356103e05260c060c059905901600090526000815260605181602001526080518160400152600381606001526103c05181608001526103e0518160a001528090502054610400526020610400f35b6354cc61098114156103f3576004356060526024356080526044356103c05260a060a059905901600090526000815260605181602001526080518160400152600481606001526103c05181608001528090502054610440526020610440f35b63c63ef546811415610442576004356060526024356080526080608059905901600090526000815260605181602001526080518160400152600581606001528090502054610480526020610480f35b639381779b8114156105335760043560605260243560805260a060a059905901600090526000815260605181602001526080518160400152600681606001526000816080015280905020608060805990590160009052600081526060518160200152608051816040015260058160600152809050205460200280806020015990590160009052818152602081019050905060005b602083048112156104f75780840154816020028301526001810190506104d6565b602083066020036101000a60000381850154168160200283015281905090509050905060206040820352602060208203510260400160408203f3505b634f9c6eeb8114156106245760043560605260243560805260a060a059905901600090526000815260605181602001526080518160400152600781606001526000816080015280905020608060805990590160009052600081526060518160200152608051816040015260058160600152809050205460200280806020015990590160009052818152602081019050905060005b602083048112156105e85780840154816020028301526001810190506105c7565b602083066020036101000a60000381850154168160200283015281905090509050905060206040820352602060208203510260400160408203f3505b637dc121958114156107155760043560605260243560805260a060a059905901600090526000815260605181602001526080518160400152600881606001526000816080015280905020608060805990590160009052600081526060518160200152608051816040015260058160600152809050205460200280806020015990590160009052818152602081019050905060005b602083048112156106d95780840154816020028301526001810190506106b8565b602083066020036101000a60000381850154168160200283015281905090509050905060206040820352602060208203510260400160408203f3505b63fa9832d18114156108065760043560605260243560805260a060a059905901600090526000815260605181602001526080518160400152600981606001526000816080015280905020608060805990590160009052600081526060518160200152608051816040015260008160600152809050205460200280806020015990590160009052818152602081019050905060005b602083048112156107ca5780840154816020028301526001810190506107a9565b602083066020036101000a60000381850154168160200283015281905090509050905060206040820352602060208203510260400160408203f3505b632c5a40d58114156108f75760043560605260243560805260a060a059905901600090526000815260605181602001526080518160400152600a81606001526000816080015280905020608060805990590160009052600081526060518160200152608051816040015260058160600152809050205460200280806020015990590160009052818152602081019050905060005b602083048112156108bb57808401548160200283015260018101905061089a565b602083066020036101000a60000381850154168160200283015281905090509050905060206040820352602060208203510260400160408203f3505b63e05dcb568114156109eb5760043560605260243560805260a060a059905901600090526000815260605181602001526080518160400152600b81606001526000816080015280905020600260806080599059016000905260008152606051816020015260805181604001526000816060015280905020546020020180806020015990590160009052818152602081019050905060005b602083048112156109af57808401548160200283015260018101905061098e565b602083066020036101000a60000381850154168160200283015281905090509050905060206040820352602060208203510260400160408203f3505b63586b5be0811415610a3a576004356060526024356080526080608059905901600090526000815260605181602001526080518160400152600c81606001528090502054610b80526020610b80f35b63eb8af5aa811415610b585760043560605260243560805260a060a059905901600090526000815260605181602001526080518160400152600d81606001526000816080015280905020608060805990590160009052600081526060518160200152608051816040015260008160600152809050205460806080599059016000905260008152606051816020015260805181604001526005816060015280905020540560200280806020015990590160009052818152602081019050905060005b60208304811215610b1c578084015481602002830152600181019050610afb565b602083066020036101000a60000381850154168160200283015281905090509050905060206040820352602060208203510260400160408203f3505b637ab6ea8a811415610c765760043560605260243560805260a060a059905901600090526000815260605181602001526080518160400152600e81606001526000816080015280905020608060805990590160009052600081526060518160200152608051816040015260008160600152809050205460806080599059016000905260008152606051816020015260805181604001526005816060015280905020540560200280806020015990590160009052818152602081019050905060005b60208304811215610c3a578084015481602002830152600181019050610c19565b602083066020036101000a60000381850154168160200283015281905090509050905060206040820352602060208203510260400160408203f3505b632b810cb9811415610d945760043560605260243560805260a060a059905901600090526000815260605181602001526080518160400152600f81606001526000816080015280905020608060805990590160009052600081526060518160200152608051816040015260008160600152809050205460806080599059016000905260008152606051816020015260805181604001526005816060015280905020540560200280806020015990590160009052818152602081019050905060005b60208304811215610d58578084015481602002830152600181019050610d37565b602083066020036101000a60000381850154168160200283015281905090509050905060206040820352602060208203510260400160408203f3505b637fb42e46811415610e855760043560605260243560805260a060a059905901600090526000815260605181602001526080518160400152601081606001526000816080015280905020608060805990590160009052600081526060518160200152608051816040015260008160600152809050205460200280806020015990590160009052818152602081019050905060005b60208304811215610e49578084015481602002830152600181019050610e28565b602083066020036101000a60000381850154168160200283015281905090509050905060206040820352602060208203510260400160408203f3505b63734fa727811415610f765760043560605260243560805260a060a059905901600090526000815260605181602001526080518160400152601181606001526000816080015280905020608060805990590160009052600081526060518160200152608051816040015260008160600152809050205460200280806020015990590160009052818152602081019050905060005b60208304811215610f3a578084015481602002830152600181019050610f19565b602083066020036101000a60000381850154168160200283015281905090509050905060206040820352602060208203510260400160408203f3505b63c67fa8578114156110675760043560605260243560805260a060a059905901600090526000815260605181602001526080518160400152601281606001526000816080015280905020608060805990590160009052600081526060518160200152608051816040015260008160600152809050205460200280806020015990590160009052818152602081019050905060005b6020830481121561102b57808401548160200283015260018101905061100a565b602083066020036101000a60000381850154168160200283015281905090509050905060206040820352602060208203510260400160408203f3505b635ed853e48114156111855760043560605260243560805260a060a059905901600090526000815260605181602001526080518160400152601381606001526000816080015280905020608060805990590160009052600081526060518160200152608051816040015260008160600152809050205460806080599059016000905260008152606051816020015260805181604001526005816060015280905020540560200280806020015990590160009052818152602081019050905060005b60208304811215611149578084015481602002830152600181019050611128565b602083066020036101000a60000381850154168160200283015281905090509050905060206040820352602060208203510260400160408203f3505b63b86f51258114156112a35760043560605260243560805260a060a059905901600090526000815260605181602001526080518160400152601481606001526000816080015280905020608060805990590160009052600081526060518160200152608051816040015260008160600152809050205460806080599059016000905260008152606051816020015260805181604001526005816060015280905020540560200280806020015990590160009052818152602081019050905060005b60208304811215611267578084015481602002830152600181019050611246565b602083066020036101000a60000381850154168160200283015281905090509050905060206040820352602060208203510260400160408203f3505b63bc3d7d858114156113945760043560605260243560805260a060a059905901600090526000815260605181602001526080518160400152601581606001526000816080015280905020608060805990590160009052600081526060518160200152608051816040015260008160600152809050205460200280806020015990590160009052818152602081019050905060005b60208304811215611358578084015481602002830152600181019050611337565b602083066020036101000a60000381850154168160200283015281905090509050905060206040820352602060208203510260400160408203f3505b63a2302f2f81141561148157600435606052602435611680526044356116a0526116a05160a060a0599059016000905260008152606051816020015261168051816040015260018160600152608060805990590160009052600081526060518160200152611680518160400152600081606001528090502054816080015280905020556001608060805990590160009052600081526060518160200152611680518160400152600081606001528090502054016080608059905901600090526000815260605181602001526116805181604001526000816060015280905020556001611740526020611740f35b63058ca2bc8114156114dd576004356060526024356080526044356117605261176051608060805990590160009052600081526060518160200152608051816040015260028160600152809050205560016117a05260206117a0f35b635d3b965b8114156116175736599059016000905236600482376004356060526024356080526044356102805260643560208201016117e052608435611800525060c060c0599059016000905260008152606051816020015260805181604001526003816060015261028051816080015260008160a001528090502060206117e05103516020026020810460005b8181121561158c57806020026117e05101518482015560018101905061156b565b602083066020036101000a600003816020026117e05101511684820155505050506118005160806080599059016000905260008152606051816020015260805181604001526002816060015280905020540160806080599059016000905260008152606051816020015260805181604001526002816060015280905020556001611900526020611900f35b63b0e14f0f81141561167357600435606052602435608052604435611920526119205160806080599059016000905260008152606051816020015260805181604001526005816060015280905020556001611960526020611960f35b636acccdbc8114156117395736599059016000905236600482376004356060526024356080526044356020820101611980525060a060a05990590160009052600081526060518160200152608051816040015260068160600152600081608001528090502060206119805103516020026020810460005b8181121561170b5780602002611980510151848201556001810190506116ea565b602083066020036101000a600003816020026119805101511684820155505050506001611a40526020611a40f35b63a1fa51f98114156117ff5736599059016000905236600482376004356060526024356080526044356020820101611a60525060a060a0599059016000905260008152606051816020015260805181604001526007816060015260008160800152809050206020611a605103516020026020810460005b818112156117d15780602002611a60510151848201556001810190506117b0565b602083066020036101000a60000381602002611a605101511684820155505050506001611b20526020611b20f35b63cd87f43a8114156118c55736599059016000905236600482376004356060526024356080526044356020820101611b40525060a060a0599059016000905260008152606051816020015260805181604001526008816060015260008160800152809050206020611b405103516020026020810460005b818112156118975780602002611b4051015184820155600181019050611876565b602083066020036101000a60000381602002611b405101511684820155505050506001611c00526020611c00f35b63222a866381141561198b5736599059016000905236600482376004356060526024356080526044356020820101611c20525060a060a0599059016000905260008152606051816020015260805181604001526009816060015260008160800152809050206020611c205103516020026020810460005b8181121561195d5780602002611c205101518482015560018101905061193c565b602083066020036101000a60000381602002611c205101511684820155505050506001611ce0526020611ce0f35b63b39e1faa811415611a515736599059016000905236600482376004356060526024356080526044356020820101611d00525060a060a059905901600090526000815260605181602001526080518160400152600a816060015260008160800152809050206020611d005103516020026020810460005b81811215611a235780602002611d0051015184820155600181019050611a02565b602083066020036101000a60000381602002611d005101511684820155505050506001611dc0526020611dc0f35b63e365736b811415611b175736599059016000905236600482376004356060526024356080526044356020820101611de0525060a060a059905901600090526000815260605181602001526080518160400152600b816060015260008160800152809050206020611de05103516020026020810460005b81811215611ae95780602002611de051015184820155600181019050611ac8565b602083066020036101000a60000381602002611de05101511684820155505050506001611ea0526020611ea0f35b63aad7d6e3811415611b7357600435606052602435608052604435611ec052611ec0516080608059905901600090526000815260605181602001526080518160400152600c816060015280905020556001611f00526020611f00f35b6301112b27811415611c395736599059016000905236600482376004356060526024356080526044356020820101611f20525060a060a059905901600090526000815260605181602001526080518160400152600d816060015260008160800152809050206020611f205103516020026020810460005b81811215611c0b5780602002611f2051015184820155600181019050611bea565b602083066020036101000a60000381602002611f205101511684820155505050506001611fe0526020611fe0f35b63bdbb239b811415611cff5736599059016000905236600482376004356060526024356080526044356020820101612000525060a060a059905901600090526000815260605181602001526080518160400152600e8160600152600081608001528090502060206120005103516020026020810460005b81811215611cd1578060200261200051015184820155600181019050611cb0565b602083066020036101000a6000038160200261200051015116848201555050505060016120c05260206120c0f35b6305a0cd48811415611dc557365990590160009052366004823760043560605260243560805260443560208201016120e0525060a060a059905901600090526000815260605181602001526080518160400152600f8160600152600081608001528090502060206120e05103516020026020810460005b81811215611d9757806020026120e051015184820155600181019050611d76565b602083066020036101000a600003816020026120e051015116848201555050505060016121a05260206121a0f35b63aaa1fe35811415611e8b57365990590160009052366004823760043560605260243560805260443560208201016121c0525060a060a05990590160009052600081526060518160200152608051816040015260108160600152600081608001528090502060206121c05103516020026020810460005b81811215611e5d57806020026121c051015184820155600181019050611e3c565b602083066020036101000a600003816020026121c05101511684820155505050506001612280526020612280f35b632be4935d811415611f5157365990590160009052366004823760043560605260243560805260443560208201016122a0525060a060a05990590160009052600081526060518160200152608051816040015260118160600152600081608001528090502060206122a05103516020026020810460005b81811215611f2357806020026122a051015184820155600181019050611f02565b602083066020036101000a600003816020026122a05101511684820155505050506001612360526020612360f35b6313a8350d8114156120175736599059016000905236600482376004356060526024356080526044356020820101612380525060a060a05990590160009052600081526060518160200152608051816040015260128160600152600081608001528090502060206123805103516020026020810460005b81811215611fe9578060200261238051015184820155600181019050611fc8565b602083066020036101000a600003816020026123805101511684820155505050506001612440526020612440f35b63cb540b458114156120dd5736599059016000905236600482376004356060526024356080526044356020820101612460525060a060a05990590160009052600081526060518160200152608051816040015260138160600152600081608001528090502060206124605103516020026020810460005b818112156120af57806020026124605101518482015560018101905061208e565b602083066020036101000a600003816020026124605101511684820155505050506001612520526020612520f35b63be0306278114156121a35736599059016000905236600482376004356060526024356080526044356020820101612540525060a060a05990590160009052600081526060518160200152608051816040015260148160600152600081608001528090502060206125405103516020026020810460005b81811215612175578060200261254051015184820155600181019050612154565b602083066020036101000a600003816020026125405101511684820155505050506001612600526020612600f35b6383fd77f08114156122695736599059016000905236600482376004356060526024356080526044356020820101612620525060a060a05990590160009052600081526060518160200152608051816040015260158160600152600081608001528090502060206126205103516020026020810460005b8181121561223b57806020026126205101518482015560018101905061221a565b602083066020036101000a6000038160200261262051015116848201555050505060016126e05260206126e0f35b63594622058114156122d5576004356060526024356080526044356103c052606435612700526127005160a060a059905901600090526000815260605181602001526080518160400152600481606001526103c051816080015280905020556001612740526020612740f35b63bb8e419681141561244857600435606052602435612760526044356127805260006127a0525b6080608059905901600090526000815260605181602001526001612760510381604001526000816060015280905020546127a051121561243b5760a060a05990590160009052600081526060518160200152600161276051038160400152600181606001526127a0518160800152809050205460a060a05990590160009052600081526060518160200152612780518160400152600181606001526080608059905901600090526000815260605181602001526127805181604001526000816060015280905020548160800152809050205560016080608059905901600090526000815260605181602001526127805181604001526000816060015280905020540160806080599059016000905260008152606051816020015261278051816040015260008160600152809050205560016127a051016127a0526122fc565b6001612880526020612880f35b50", + "nonce" : "0x00", + "storage" : { + "0x065d5efdfcc0fba693dc9e467f633097ffdc97401901463ad0e28855486d1edf" : "0xb9d69098a6acfe0c6411bcaaf430f78d363a9adc32b78bc2e15ccd6e883e9784", + "0x12643ff300762717d27efb567b82c65560d7b43249d908504e5510863ab82aac" : "0x154cf60e137c594516a065149610b6a3989396a42581d5fd8919e711c55da225", + "0x1489023d18c5d10427c4aa8dc726e840eb5ae7f604a8e9243c61634fb009e4d7" : "0x04", + "0x1489023d18c5d10427c4aa8dc726e840eb5ae7f604a8e9243c61634fb009e4d8" : "0x01", + "0x1489023d18c5d10427c4aa8dc726e840eb5ae7f604a8e9243c61634fb009e4da" : "0xe365736b", + "0x1489023d18c5d10427c4aa8dc726e840eb5ae7f604a8e9243c61634fb009e4db" : "0x0f69b5", + "0x1489023d18c5d10427c4aa8dc726e840eb5ae7f604a8e9243c61634fb009e4dc" : "0x629e", + "0x1489023d18c5d10427c4aa8dc726e840eb5ae7f604a8e9243c61634fb009e4dd" : "0x60", + "0x1489023d18c5d10427c4aa8dc726e840eb5ae7f604a8e9243c61634fb009e4e0" : "0x2200", + "0x1489023d18c5d10427c4aa8dc726e840eb5ae7f604a8e9243c61634fb009e4e4" : "0x146000000000000000000000000000000000000000000000000000000000", + "0x1489023d18c5d10427c4aa8dc726e840eb5ae7f604a8e9243c61634fb009e4e6" : "0xe365736b00000000000000000000000000000000000000000000000000000000", + "0x1489023d18c5d10427c4aa8dc726e840eb5ae7f604a8e9243c61634fb009e4e7" : "0x0f69b500000000000000000000000000000000000000000000000000000000", + "0x1489023d18c5d10427c4aa8dc726e840eb5ae7f604a8e9243c61634fb009e4e8" : "0x629e00000000000000000000000000000000000000000000000000000000", + "0x1489023d18c5d10427c4aa8dc726e840eb5ae7f604a8e9243c61634fb009e4e9" : "0x6000000000000000000000000000000000000000000000000000000000", + "0x19efb13d6576359514ace5211988a8d51379fa88ccd2b886b409f842b13d7932" : "0xc849cc595b452d11c206d2eb8cdfa06de211e3ff19ee0e0276dc857c05d4fe", + "0x1b37e91bf8580c7c6bcf8cdff25c7ed78180124a94af6f30c40d476a3d079ad6" : "0xaba4cd295118a482a0a62579e35e4ba5bdd76146cc9e4d96172fce8be8977ab4", + "0x2bf9fd8facdd6fd9c84657f5ad7381a5aecf670cda68cb3c5829b6532c865506" : "0x53098a1d111586dbcc0d051846284f5803c63c313e7f7e6d84430435d11d4c50", + "0x3111bfd25728c0adfad0f8c1ad79cb1b91167267deca98de88f156ed25caeedc" : "0xad393086f30b49511b08fdd27ac78810b084c7cd7de6ac354f614c18ea9e7df4", + "0x3379e7ae125c5c5d623d1d993c1459b61d6723b1c30d1aa026c48f6a6155b8ea" : "0x8c4183732567a99a8a718e363391e102532f9a640e42968cf2354d9acc908bb0", + "0x34cabe0c7e64a2caa93fd8d6a0defc07acb9d44b13430fa3ae9282fffd40dee2" : "0x01", + "0x34cabe0c7e64a2caa93fd8d6a0defc07acb9d44b13430fa3ae9282fffd40dee3" : "0x01", + "0x34cabe0c7e64a2caa93fd8d6a0defc07acb9d44b13430fa3ae9282fffd40dee4" : "0x01", + "0x34cabe0c7e64a2caa93fd8d6a0defc07acb9d44b13430fa3ae9282fffd40dee5" : "0x01", + "0x39050607fe892059a6344ab0f594f382fb0b345cab373497246dbe86fe7e14e7" : "0x2b3bca833e482737e7e47b1568e6f890f8e1666490d38fe130abd6f0ccb109cf", + "0x417be8bc6791807372e0222a350bb8a5d67bbc8d7595c301d8a5a8372cfdcef1" : "0xabd4971b4605a7155802f70e08298b1ceb0e4e4eaccccd348f77a77227f73a7f", + "0x41e9a54b3ee0c276aa076babb161de12b0f8916b47f8f6fb85cc387cf34696dd" : "0x22f2f444ebda9d2913ffef5059b039ec9b5876aa71821991c2515bf79f64935e", + "0x45ceb8da6fb8936592d3bce4883f1a6a34d636f559e0a1070a5802a65ac39bd5" : "0x57a5122ff3bf737b0de0f9f08011a8648c19e43ff071fb7086234723c9383f1f", + "0x4aa6b934608a45c8f53a945c05ddee1814a3b9f63a048fc7ad3d47e67156f024" : "0xd03862becedada67b4825a0238f3e67495ccb595cd7d08f1bd5d3160644b9299", + "0x4b8b58f0b0e326a5907d1a810e5ff31e05b4cab45125b776db8577e7dbc46bce" : "0x2f0000000000000000", + "0x4c33460347337bfc7df08bf182988301b7b426a27a67f1c6c634f637c60e87ac" : "0xbab4ab2ad4eafe7c84ef6a8cd69157d9ce6b843793a2cd0877b8e91f63cb2d4d", + "0x58da0c0c256bba101ce36fad8bf838717a57e6ab850a191dc9c09da9ce56bf1b" : "0x05", + "0x5cb38b16db1d632086d4af695de7f5f242a6e40947067f96edd566fe2ac438ef" : "0x6d0be832b2007ea28cda705b73922cbf9794c5a25b89bd2f28b7347ed2b96c86", + "0x64a9621cc4ba92bf738c55010c609dfaa3972a1138c30b5adcef1ba2363b360e" : "0xd7953bfe8cb591f129fd0862a9e9c421151e2b5831560ff5215d23f751364b35", + "0x696664a5f0ab5acd9304a377fb684f2d3fe6bb60b8a95cb2bdbb57db767e7a84" : "0x154cf60e137c594516a065149610b6a3989396a42581d5fd8919e711c55da225", + "0x69ad1d19e617936abdf05133bf268dc8ced6b518f22b249b5860967d07006487" : "0x8c803b48b383ddabd1b3afe858efb48c203229b7317dd76149dddab4253b858a", + "0x70b3bf53996fac325eb67608a4eeb0cd0b55def6255d7ed42ad28ec07238b5d6" : "0x45e9723e9232b37207ecac1c97b8647d053625a578d450f7456280b2ff8efc27", + "0x7a9dcee62e3e02cc8e020f372df2efdeb835f091c1ef1dbe221072d1095aabd2" : "0x2f0000000000000000", + "0x7e4d8c0f6d8abb4ce1ae45b254046aceedabfa9548851b8b5d3e2c0637c985fd" : "0x0b", + "0x7e95f3cc3315d289c52253baaba29b1b00c86816e6b788d50795279a8baa00db" : "0x45e9723e9232b37207ecac1c97b8647d053625a578d450f7456280b2ff8efc27", + "0x8da187157087529ee4e9c381f8e3149c56acf3bdfda29b8b9b4532f24b83f5fe" : "0x8c4183732567a99a8a718e363391e102532f9a640e42968cf2354d9acc908bb0", + "0x9001f91ddaef87bc067886e874c0749998c9b58b2ec8472ca014ca8b55f88578" : "0x0fb76974eefca01f33fb38646c2d3c1536f1a763d7aff53ab7f877d4c5ea7fd0", + "0x9ed0cedd2a9a78d949f40019f53d10031aef6ed342c97e01fc03b481ee56b3cb" : "0x04", + "0x9fddf1db29caa5c1239edd86e9e0835cdfe41f7253ec78f62d3da8558d6f3cd7" : "0x104eef8fa35bf39f677d81855bc0b9f42317f32792e98e95e4df441deb634211", + "0xa0953566119395c11186b334805fc1a16175ecac0ecc93ae0322264f0dc2e40d" : "0x10c5a00466ab7c0adae1e93537cc275ea8cf23ff509d5466a1fd6f56b0a61d1b", + "0xaa0dbf8241ef3ae07c254e6869e84895ba2be0779a7f261c8308a3114be1c54a" : "0x04", + "0xaffe808b495d13a14391ce5f27c211c36da12826969cd7841ee0d81e5b900e2d" : "0x01", + "0xaffe808b495d13a14391ce5f27c211c36da12826969cd7841ee0d81e5b900e2e" : "0x01", + "0xb4a2b68c48ef78aeb641ee538fad51781022fd23ed9d93d211017db6a02376ce" : "0x0fbc06642245cf2fed7ed46ea0a18a7185830b6f2c4e0a4ca55246041e8bfa72", + "0xba8d79990898383919e437f2458b93b340072c89d963808d9e04f51858e3c5ec" : "0x41d2cac534d90a0dbd199117481a63e32cc11411dab2eaa36c91c0eec62823cf", + "0xbb3bc1a2015123750df57d4ceff7e28cb847910b79b34841de905b59a8bb177c" : "0x734417eb19e1873427257f1ea1594748c16cfa866a7b7cf896e281f2ec774a40", + "0xbf30cdcb83ab2bd5f5eee691ffa4107b58b75ba6a5c2e6754d4c5c0437f2876c" : "0x05", + "0xc2a26b80067fc36b8268b0d5b31afff953fa91cebea39f191e2763d6e71259b9" : "0x02a43c547fe8de2400d2a141016550e8bae058d41164247c099e787ddd40e789", + "0xc98339d275eef16e0562ca8521212cef61aa0f39b12e2a27502aaa97a9e5e70f" : "0x5a3de2a5c268cdb75f4b01507aa80c4e4a1bc67bcb0df265bbb00060774e5978", + "0xcbd6ae6bd61bc9270ec836f1919b3268113abe076c7febfdb8cf573b199ce9a9" : "0xf402b17773c1f7534034ee58dc0d2a3421470a7a67daf4fa790dc3b420eef790", + "0xd2c8cbb562fccd0c9a3d0d491b7f65cc6a89856498f933427d9d21b745b9d50e" : "0x3625a26fdb7b747501f1ee2500f98c49d9cd290383a21254587c3c49d2805321", + "0xd66f52a4e24585238ccc03443b2fdb8b2b100259bc7260f39097c7c339211ffe" : "0x1641851904381915c86b60df7e288896fb5f8ebad65d594829fb9f2b59cd1da6", + "0xd8f720c05a5526dd621d1831ae122abddd3dfecd8b63b0ba4c92fa7b2ade44ff" : "0xad393086f30b49511b08fdd27ac78810b084c7cd7de6ac354f614c18ea9e7df4", + "0xdc22d3171b82817c910bbeac1f8b50c8de99f8c524f172aef3491981bd5ed4fb" : "0x94b8cba4ea090d1c392fbc94b82fb9ef9f468a15bbc537f4d051776f4d422b1d", + "0xdce8adbdefa929dbe60245f359446db4174c62824b42e5d4d9e7b834b4d61deb" : "0x2c9069845b2e74c577ff1cd18df6bc452805f527a9ee91fd4a059e0408b5dea6", + "0xdd9493073db9e42fd955e834c89a74089f99196186ee0b2688124989be00d196" : "0x01", + "0xdd9493073db9e42fd955e834c89a74089f99196186ee0b2688124989be00d197" : "0x01", + "0xdd9493073db9e42fd955e834c89a74089f99196186ee0b2688124989be00d198" : "0x01", + "0xdd9493073db9e42fd955e834c89a74089f99196186ee0b2688124989be00d199" : "0x01", + "0xdd9493073db9e42fd955e834c89a74089f99196186ee0b2688124989be00d19a" : "0x01", + "0xe54f074c81bfa60b5bf413934c108086298b77291560edfeead8aa1232e95236" : "0x0f40aaa24323c9e6983ccffafeebe4b426509b901e8c98b8a40d881804804e6b", + "0xe66c0f55f66c752edf73027d45b7b1ae729ae15e1c67c362dbc6f25edf8d76ff" : "0x01", + "0xe983d899f807bbcb5881f2ddf875b2ebb5cb8a7a4e77a8c98a40aaae6a468735" : "0x6d0be832b2007ea28cda705b73922cbf9794c5a25b89bd2f28b7347ed2b96c86", + "0xed7d6e2d40fbd5046412ffad1c45b63d87c6197182d6dbc66bb1e5c6e4ded5c7" : "0xaba4cd295118a482a0a62579e35e4ba5bdd76146cc9e4d96172fce8be8977ab4", + "0xf043b5a1952847579f233706a8f130889a484d2da3e574fdd5859f05aaf52111" : "0x02", + "0xf40f4cfdacb62dd799f36b580349fac1f4a4caf8dd3383cc387c35adb6574e21" : "0x2f0000000000000000", + "0xf60fa6e25e9028a6dc6b26bbc1eadae3da157df0d1d6f6628bc33cad68a7e455" : "0x2d7d00618c059ebe40593b9497c633e1ac6e161dadbd5bb734c2663cd3e8a8e1", + "0xfd280ac5182d5b2366122f38acfa6dc471240ffde9d5feb985ce7a2325c960e7" : "0x03" + } + }, + "142a6927cf0060133187ba8a8e74d641438f0c1c" : { + "balance" : "0x00", + "code" : "0x600061031f537c01000000000000000000000000000000000000000000000000000000006000350473c9ae5868651bf7b7db6e360217db49ce4e69c07e602052730ea65418d7bf32680f55572c943a94b5908049986040526327138bfb81141561038d57600435608052601c6044599059016000905201637a66d7ca601c8203526080516004820152602060e06024836000602051602d5a03f15060e051905060a052601c604459905901600090520163c60409c6601c820352608051600482015260206101206024836000602051602d5a03f150610120519050430561010052600061014052600061016052600061018052600260a051016101005112151561010a576001610140525b60006101a052610100516101c0525b606461010051016101c051121561018457601c606459905901600090520163cc1c944e601c82035260805160048201526101c051602482015260206101e06044836000604051602d5a03f1506101e05190506101a051016101a05260016101c051016101c052610119565b6005601c606459905901600090520163cc1c944e601c820352608051600482015260a051602482015260206102006044836000604051602d5a03f1506102005190501280156101d357806101db565b600a6101a051125b9050156101eb57610140516101ee565b60005b1561033657601c604459905901600090520163c5476efe601c820352608051600482015260206102406024836000602051602d5a03f15061024051905050601c6064599059016000905201637265802d601c82035260805160048201526000602482015260206102606044836000602051602d5a03f15061026051905050601c606459905901600090520163c286273a601c82035260805160048201526000602482015260206102806044836000602051602d5a03f15061028051905050601c6044599059016000905201637a66d7ca601c820352608051600482015260206102a06024836000602051602d5a03f1506102a051905060a052601c608459905901600090520163bb8e4196601c820352608051600482015260a051602482015261010051604482015260206102c06064836000604051602d5a03f1506102c051905050610343565b6001610160526001610180525b61014051156103555761016051610358565b60005b156103665761018051610369565b60005b1561037f5760016102e05260206102e0f361038c565b6000610300526020610300f35b5b50", + "nonce" : "0x00", + "storage" : { + } + }, + "1cdc8315bdb1362de8b7b2fa9ee75dc873037179" : { + "balance" : "0xa783508eacef4001", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "9761fecf88590592cf05ce545504d376d1693ab3" : { + "balance" : "0x00", + "code" : "0x60006105df537c010000000000000000000000000000000000000000000000000000000060003504730ea65418d7bf32680f55572c943a94b59080499860205273e509e3a93beb1eba72f8cb8d25f93a85e2d54afb60405273c9ae5868651bf7b7db6e360217db49ce4e69c07e60605273f1562e1c0d0baa3ea746442bb7f11153fcf5cfda60805263546fdeb381141561038d5760043560c05260243560e05260443561010052606435610120526084356101405260026101005101601c606459905901600090520163e05dcb56601c82035260c051600482015260e05160248201526002610100510160408160200201599059016000905281602002604001816044856000602051602d5a03f150604081019050905090506000600161010051016020028201511415610250576060601c61014c59905901600090520163e365736b601c82035260c051600482015260e0516024820152601c6084599059016000905201632f300bee601c82035260026004820152600560248201526101005160448201528460408160200201599059016000905281602002604001816064856000608051602d5a03f1506040810190509050905060208103516020026020018360448401526020820360a4840152806101088401528084019350505081600401599059016000905260648160648460006004601cf16101fc57fe5b6064810192506101088201518080858260a487015160006004600a8705601201f161022357fe5b50808401935050808303602061028082846000602051602d5a03f15061028051905090509050905061037d565b6060601c61014c59905901600090520163e365736b601c82035260c051600482015260e0516024820152601c6084599059016000905201632f300bee601c820352600160016101005101602002850151036004820152600560248201526101005160448201528460408160200201599059016000905281602002604001816064856000608051602d5a03f1506040810190509050905060208103516020026020018360448401526020820360a4840152806101088401528084019350505081600401599059016000905260648160648460006004601cf161032d57fe5b6064810192506101088201518080858260a487015160006004600a8705601201f161035457fe5b5080840193505080830360206102c082846000602051602d5a03f1506102c05190509050905090505b5060016102e05260206102e0f350505b63de9080c88114156107645760043560c05260243560e05260443561010052606435610120526084356101405260026101005101601c606459905901600090520163e05dcb56601c82035260c051600482015260e05160248201528160408160200201599059016000905281602002604001816044856000602051602d5a03f15060408101905090509050601c6064599059016000905201632c5a40d5601c82035260c051600482015260e05160248201526101405160408160200201599059016000905281602002604001816044856000602051602d5a03f1506040810190509050905061012051806020026020015990590160009052818152602081019050905060005b610120518112156104ee57601c60645990590160009052016328c8b315601c82035260c051600482015281602482015260206103606044836000604051602d5a03f15061036051905081602002830152600181019050610493565b5060a0601c61020c59905901600090520163a647a5b9601c8203528460208103516020026020018360048401526020820360a484015280610148840152808401935050508360208103516020026020018360248401526020820360c484015280610168840152808401935050508260208103516020026020018360448401526020820360e4840152806101888401528084019350505061012051606482015261010051608482015281600401599059016000905260a48160a484600060046022f16105b557fe5b60a4810192506101488201518080858260a487015160006004600a8705601201f16105dc57fe5b508084019350506101688201518080858260c487015160006004600a8705601201f161060457fe5b508084019350506101888201518080858260e487015160006004600a8705601201f161062c57fe5b5080840193505080830387604081602002015990590160009052816020026040018184866000608051602d5a03f1506040810190509050905090509050905092506060601c61014c59905901600090520163e365736b601c82035260c051600482015260e05160248201528460208103516020026020018360448401526020820360a4840152806101088401528084019350505081600401599059016000905260648160648460006004601cf16106df57fe5b6064810192506101088201518080858260a487015160006004600a8705601201f161070657fe5b5080840193505080830360206103c082846000602051602d5a03f1506103c05190509050905090505060006101005160200284015114156107525760006103e05260206103e0f361075f565b6001610400526020610400f35b505050505b63384ca8dd811415610a665760043560c05260243560e052604435610100526064356101205260843561014052601c606459905901600090520163e05dcb56601c82035260c051600482015260e05160248201526002610100510160408160200201599059016000905281602002604001816044856000602051602d5a03f15060408101905090509050601c606459905901600090520163fa9832d1601c82035260c051600482015260e05160248201526101005160408160200201599059016000905281602002604001816044856000602051602d5a03f15060408101905090509050601c608459905901600090520163aad7d6e3601c82035260c051600482015260e05160248201526060601c61014c599059016000905201635b180229601c8203528360208103516020026020018360048401526020820360648401528060c8840152808401935050508460208103516020026020018360248401526020820360848401528060e88401528084019350505061010051604482015281600401599059016000905260648160648460006004601cf161090157fe5b60648101925060c882015180808582606487015160006004600a8705601201f161092757fe5b5080840193505060e882015180808582608487015160006004600a8705601201f161094e57fe5b50808401935050808303602061044082846000608051602d5a03f150610440519050905090509050604482015260206104606064836000602051602d5a03f150610460519050506060601c61014c59905901600090520163222a8663601c82035260c051600482015260e05160248201528260208103516020026020018360448401526020820360a4840152806101088401528084019350505081600401599059016000905260648160648460006004601cf1610a0757fe5b6064810192506101088201518080858260a487015160006004600a8705601201f1610a2e57fe5b50808401935050808303602061048082846000602051602d5a03f1506104805190509050905090505060016104a05260206104a0f350505b63d5dc5af1811415610d4b5760043560c05260243560e052604435610100526064356101205260843561014052601c606459905901600090520163e05dcb56601c82035260c051600482015260e05160248201526002610100510160408160200201599059016000905281602002604001816044856000602051602d5a03f15060408101905090509050601c6064599059016000905201632c5a40d5601c82035260c051600482015260e05160248201526101405160408160200201599059016000905281602002604001816044856000602051602d5a03f150604081019050905090506080601c6101ac59905901600090520163f4ca7dc4601c82035283602081035160200260200183600484015260208203608484015280610108840152808401935050508260208103516020026020018360248401526020820360a4840152806101288401528084019350505061012051604482015261010051606482015281600401599059016000905260848160848460006004601ff1610be757fe5b60848101925061010882015180808582608487015160006004600a8705601201f1610c0e57fe5b508084019350506101288201518080858260a487015160006004600a8705601201f1610c3657fe5b5080840193505080830361014051604081602002015990590160009052816020026040018184866000608051602d5a03f1506040810190509050905090509050905090506060601c61014c59905901600090520163b39e1faa601c82035260c051600482015260e05160248201528260208103516020026020018360448401526020820360a4840152806101088401528084019350505081600401599059016000905260648160648460006004601cf1610cec57fe5b6064810192506101088201518080858260a487015160006004600a8705601201f1610d1357fe5b5080840193505080830360206104c082846000602051602d5a03f1506104c05190509050905090505060016104e05260206104e0f350505b630939aa8c81141561114c5760043560c05260243560e052604435610100526064356101205260843561014052601c606459905901600090520163e05dcb56601c82035260c051600482015260e05160248201526002610100510160408160200201599059016000905281602002604001816044856000602051602d5a03f15060408101905090509050601c6064599059016000905201637dc12195601c82035260c051600482015260e05160248201526101405160408160200201599059016000905281602002604001816044856000602051602d5a03f15060408101905090509050601c606459905901600090520163586b5be0601c82035260c051600482015260e051602482015260206105006044836000602051602d5a03f150610500519050601c606459905901600090520163eb8af5aa601c82035260c051600482015260e05160248201526101205160408160200201599059016000905281602002604001816044856000602051602d5a03f1506040810190509050905060c0601c61026c59905901600090520163232b2734601c8203528260208103516020026020018360048401526020820360c484015280610188840152808401935050508560208103516020026020018360248401526020820360e4840152806101a88401528084019350505084602081035160200260200183604484015260208203610104840152806101c8840152808401935050508360648201526101205160848201526101005160a482015281600401599059016000905260c48160c484600060046025f1610f9657fe5b60c4810192506101888201518080858260c487015160006004600a8705601201f1610fbd57fe5b508084019350506101a88201518080858260e487015160006004600a8705601201f1610fe557fe5b508084019350506101c88201518080858261010487015160006004600a8705601201f161100e57fe5b5080840193505080830361012051604081602002015990590160009052816020026040018184866000608051602d5a03f1506040810190509050905090509050905090506060601c61014c5990590160009052016301112b27601c82035260c051600482015260e05160248201528260208103516020026020018360448401526020820360a4840152806101088401528084019350505081600401599059016000905260648160648460006004601cf16110c457fe5b6064810192506101088201518080858260a487015160006004600a8705601201f16110eb57fe5b50808401935050808303602061058082846000602051602d5a03f15061058051905090509050905050600060016101005101602002850151141561113a5760006105a05260206105a0f3611147565b60016105c05260206105c0f35b505050505b50", + "nonce" : "0x00", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "0xd82fa36688cd90c000", + "code" : "0x", + "nonce" : "0x01", + "storage" : { + } + }, + "b03f030056db7d467d778326658bac0d1b35d8f7" : { + "balance" : "0x00", + "code" : "0x600061075f537c010000000000000000000000000000000000000000000000000000000060003504731e147037f0a63df228fe6e7aef730f1ea31c8ce3602052730ea65418d7bf32680f55572c943a94b59080499860405273e509e3a93beb1eba72f8cb8d25f93a85e2d54afb60605273c9ae5868651bf7b7db6e360217db49ce4e69c07e60805273142a6927cf0060133187ba8a8e74d641438f0c1c60a05273b163e767e4c1ba5ae88b2ee7594f3a3fec2bb09660c05273ba7b277319128ef4c22635534d0f61dffdaa13ab60e052739761fecf88590592cf05ce545504d376d1693ab36101005273f70bbc50f1468cecae0761ef09386a87c1c696ea6101205273a89d22f049aaa5bbfb5f1a1939fff3ae7a26ae746101405273174827f7e53e8ce13b047adcac0eb3f2cb0c3285610160526336a560bd811415610a88576004356101a052601c60445990590160009052016327138bfb601c8203526101a051600482015260206101e0602483600060a051602d5a03f1506101e05190501515610195576001600003610200526020610200f35b601c6044599059016000905201637a66d7ca601c8203526101a051600482015260206102206024836000608051602d5a03f150610220519050601c606459905901600090520163cc1c944e601c8203526101a05160048201528160248201526020610260604483600061028051602d5a03f150610260519050601c60445990590160009052016380b5e7bd601c8203526101a051600482015260206102a06024836000606051602d5a03f1506102a0519050808202601c60445990590160009052016318633576601c8203526101a051600482015260206103006024836000608051602d5a03f150610300519050600981141561036d57601c60c459905901600090520163ac44d71e601c8203526101a0516004820152856024820152846044820152836064820152826084820152602061036060a483600061016051602d5a03f15061036051905050601c6064599059016000905201637265802d601c8203526101a05160048201526000602482015260206103806044836000608051602d5a03f15061038051905050601c604459905901600090520163c5476efe601c8203526101a051600482015260206103a06024836000608051602d5a03f1506103a051905050600185016103c05260206103c0f3610a3a565b60008114156103cd57601c60c459905901600090520163ef72638a601c8203526101a051600482015285602482015284604482015283606482015282608482015260206103e060a483600060c051602d5a03f1506103e051905050610a39565b600181141561042d57601c60c459905901600090520163a63e976c601c8203526101a0516004820152856024820152846044820152836064820152826084820152602061040060a483600060e051602d5a03f15061040051905050610a38565b600281141561048d57601c60c459905901600090520163533ea0ed601c8203526101a0516004820152856024820152846044820152836064820152826084820152602061042060a483600060e051602d5a03f15061042051905050610a37565b600381141561085057601c606459905901600090520163e05dcb56601c8203526101a0516004820152856024820152600285016040816020020159905901600090528160200260400181604485600061028051602d5a03f15060408101905090509050601c6044599059016000905201633d905045601c8203526101a051600482015260206104806024836000608051602d5a03f150610480519050600481141561063357601c60c4599059016000905201630939aa8c601c8203526101a051600482015287602482015286604482015285606482015284608482015260206104e060a483600061010051602d5a03f1506104e05190506104c052601c606459905901600090520163c286273a601c8203526101a05160048201526000602482015260206105006044836000608051602d5a03f1506105005190505060016104c05114156105e55782610520526020610520f361062e565b601c604459905901600090520163aac2ffb5601c8203526101a051600482015260206105406024836000608051602d5a03f1506105405190505060018301610560526020610560f35b610804565b600081141561069457601c60c459905901600090520163546fdeb3601c8203526101a0516004820152876024820152866044820152856064820152846084820152602061058060a483600061010051602d5a03f15061058051905050610803565b6001811415610742576000601c60c459905901600090520163de9080c8601c8203526101a051600482015288602482015287604482015286606482015285608482015260206105a060a483600061010051602d5a03f1506105a0519050141561073257601c6044599059016000905201631cda01ef601c8203526101a051600482015260206105c06024836000608051602d5a03f1506105c0519050505b826105e05260206105e0f3610802565b60028114156107a357601c60c459905901600090520163384ca8dd601c8203526101a0516004820152876024820152866044820152856064820152846084820152602061060060a483600061010051602d5a03f15061060051905050610801565b600381141561080057601c60c459905901600090520163d5dc5af1601c8203526101a0516004820152876024820152866044820152856064820152846084820152602061062060a483600061010051602d5a03f150610620519050505b5b5b5b5b601c6044599059016000905201631cda01ef601c8203526101a051600482015260206106406024836000608051602d5a03f1506106405190505082610660526020610660f35050610a36565b60048114156108b157601c60c459905901600090520163f6559853601c8203526101a0516004820152856024820152846044820152836064820152826084820152602061068060a483600061012051602d5a03f15061068051905050610a35565b600581141561091257601c60c459905901600090520163d8e5473d601c8203526101a051600482015285602482015284604482015283606482015282608482015260206106a060a483600061012051602d5a03f1506106a051905050610a34565b600681141561097357601c60c459905901600090520163090507ea601c8203526101a051600482015285602482015284604482015283606482015282608482015260206106c060a483600061012051602d5a03f1506106c051905050610a33565b60078114156109d457601c60c4599059016000905201635b911842601c8203526101a051600482015285602482015284604482015283606482015282608482015260206106e060a483600061014051602d5a03f1506106e051905050610a32565b6008811415610a3157601c60c459905901600090520163abe22b84601c8203526101a0516004820152856024820152846044820152836064820152826084820152602061070060a483600061014051602d5a03f150610700519050505b5b5b5b5b5b5b5b5b5b601c604459905901600090520163aac2ffb5601c8203526101a051600482015260206107206024836000608051602d5a03f1506107205190505060018101610740526020610740f350505050505b50", + "nonce" : "0x00", + "storage" : { + } + }, + "c9ae5868651bf7b7db6e360217db49ce4e69c07e" : { + "balance" : "0x00", + "code" : "0x600061083f537c010000000000000000000000000000000000000000000000000000000060003504637a66d7ca8114156100665760043560405260606060599059016000905260008152604051816020015260008160400152809050205460605260206060f35b63c60409c68114156100a55760043560405260606060599059016000905260008152604051816020015260018160400152809050205460a052602060a0f35b63186335768114156100e45760043560405260606060599059016000905260008152604051816020015260028160400152809050205460e052602060e0f35b63b3903c8a8114156101bc57600435604052606060605990590160009052600081526040518160200152600581604001528090502054610120526101205180602002602001599059016000905281815260208101905090506101605260006101c0525b610120516101c051121561019f57608060805990590160009052600081526040518160200152600481604001526101c051816060015280905020546101c05160200261016051015260016101c051016101c052610147565b6101605160206040820352602060208203510260400160408203f3505b636824e0fb8114156101fd57600435604052606060605990590160009052600081526040518160200152600581604001528090502054610220526020610220f35b633db16be381141561023e57600435604052606060605990590160009052600081526040518160200152600681604001528090502054610260526020610260f35b63c33878588114156102e05760006102a0526000546102c0526102c05180602002602001599059016000905281815260208101905090506102e0525b6102c0516102a05112156102c357604060405990590160009052600181526102a051816020015280905020546102a0516020026102e051015260016102a051016102a05261027a565b6102e05160206040820352602060208203510260400160408203f3505b63175c63228114156102fa57600054610380526020610380f35b63d861f2b4811415610336576004356103a052604060405990590160009052600181526103a051816020015280905020546103c05260206103c0f35b63b0dab01f81141561044f57600435610400526024356104205260443561044052606435610460526000606060605990590160009052600081526104005181602001526001816040015280905020541415610441576104205160606060599059016000905260008152610400518160200152600081604001528090502055610440516060606059905901600090526000815261040051816020015260018160400152809050205561046051606060605990590160009052600081526104005181602001526006816040015280905020556104005160406040599059016000905260018152600054816020015280905020556001600054016000556001610520526020610520f361044e565b6000610540526020610540f35b5b63aac2ffb58114156104b95760043560405260016060606059905901600090526000815260405181602001526002816040015280905020540160606060599059016000905260008152604051816020015260028160400152809050205560016105a05260206105a0f35b637265802d811415610507576004356040526024356105c0526105c0516060606059905901600090526000815260405181602001526002816040015280905020556001610600526020610600f35b63c5476efe811415610571576004356040526001606060605990590160009052600081526040518160200152600081604001528090502054016060606059905901600090526000815260405181602001526000816040015280905020556001610660526020610660f35b63c551e31e81141561063b576004356040526024356106805260606060599059016000905260008152604051816020015260058160400152809050205461012052610680516080608059905901600090526000815260405181602001526004816040015261012051816060015280905020556001606060605990590160009052600081526040518160200152600581604001528090502054016060606059905901600090526000815260405181602001526005816040015280905020556001610720526020610720f35b633d90504581141561067c57600435604052606060605990590160009052600081526040518160200152600381604001528090502054610740526020610740f35b631cda01ef8114156106e65760043560405260016060606059905901600090526000815260405181602001526003816040015280905020540160606060599059016000905260008152604051816020015260038160400152809050205560016107c05260206107c0f35b63c286273a811415610734576004356040526024356107e0526107e0516060606059905901600090526000815260405181602001526003816040015280905020556001610820526020610820f35b50", + "nonce" : "0x00", + "storage" : { + "0x00" : "0x01", + "0x0a4470e9d0419df71f6257fcdfd2c0a3bad96a23f5ab414bc10aaf1a31a536a7" : "0xb4876148229c22bd2291f1a4f5468c8c789b23639370c4d447f270ba341dbbec", + "0x16ef4193a274568d283ff919c299729e07696d9ada48187b81d68e12e7b962de" : "0x0a103c04e7ecb9b3395f77c7b0cad28e62c85f042de4767ccc6c005e6f47f8d4", + "0x1f1866e966f321b84535705846689749d34d5dc02994613e2931973c605d9e93" : "0xc723d0aa4a60529fe42277c8094aa19263aff36650136efc5edfd0785d457634", + "0x252a4ec7133643fddcdb22a86c415f78b2dd251f18d1efcd6a44acf590c4ae72" : "0x9caf94b82715869e71d3cee986094ea612f0258570b7e5ef47b5d09e9515322b", + "0x41b451e8d86d28add758cbd3f48a18fd04b11a80288c1dc434a5bf2d8fb1ca64" : "0xb602498f12a8b4af3a1fca357cea6b19bcd163dfec1d845364ce1395f7c21fa7", + "0x491d10658c1ec762152d8ad2d890ad59111b1ee7b4bc25736046923d3534d9a5" : "0x629e", + "0x5b0e8552efd72a845e47318abbbef9dc9fcdfe0d1a06cda44494401301581511" : "0xfbc98f4017ae5c20459daadaa6bee519b6de871d3dbaa9ab3f34340fef4cb643", + "0x5b672a107ba6fab01cbddf079042e9f6176a8e6f154584fc4df4b15674c9456e" : "0x1603da41d610854d85536b37d000e5eb7ca09786c43f50e7441c0afbff1de0a9", + "0x605b934bd26c9ecdf7029a7dc062d3a6b87338511cff96e0c5f13de9eea3462e" : "0xf0d24f3d0eda573fc5d43e3d0680993c51293752cd6de205040d3197f412f475", + "0x618355e25491dfe86175f9d9b3147e4d680aa561d98384e3621dc6a3088b0846" : "0x6b2e6d2d5deb27dffec973f23af4caf111e66d1397f467dbbedf5ab2192fb6b6", + "0x65112936bec0f1e84fda6623fb54e12baadc8a4a208c8c4eb3ed5e79cbd7e85f" : "0xa59ac24e3e0663413d0f87516ba8fb44c6c3e14da8eaabbde80f8ee285f65934", + "0x687cb2122de7bacf42b9cd380b04ff2a2ce92a0b63706a9a78263b3ce86f3313" : "0x0200000000000000", + "0x72a539b064c98d29a514ee55694225e05fb41fe63e5fe710e4536bd9ba3591b4" : "0x338ecfe6c523ed1184918b19584d97dd1095ecaadc49c7ba9da62b8b513026e0", + "0x7aeb0a0ce8882a12d853078382a2bc72f7a94af6109f167de37b36c0a7deb828" : "0x4c428400ea8a7bd7c46ba9895b508770efa4551f0d793e1beb1207da01d9962f", + "0x7c8f4a98e086f64e28c75f54712b5d44bec3c29b5c70519e8880d3046a5618dc" : "0xaafc1f2601752b114d722070f75539bfec7faf49f0d48a48d27862f0c3b09903", + "0x809c325f50acf5787776e960985e72443b4330ad1e2f466557fffee16ba51d44" : "0xb940a56e64b5b661d87919b8ef03640ec077a6d72dd0b524adedaa7ddc91ff7a", + "0x84e4a80d33c5d2abd2b0a5aec0fdc5eaeed90ab31db556e404a81718ea286e39" : "0x1c", + "0x877305412fa2486f563c457b744e5c8b1e4d0eca73371de5e771f2abc263f4dc" : "0x7088a36f67276d475aa62127cfde9790cc802fdf3a54df49461a25eb8bf15707", + "0x922a8f2fc1cbe67c8acc6a8a720983c366d71d3e2e78e3048949ebc913ea611a" : "0x50fb9f913ca102534bb0a8eb8ebf19c68dfd16ffe5e207bcc580084cd4ecd8b4", + "0x987cb9ecfd8ce499d9d0e9e6b7da29617aa02774a34f4a8ea54442f44a1e1936" : "0x5179f98f555f1e9f1d4a335d16f41154579a53e361e9859269b6fa74ea9c7d21", + "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d" : "0x0f69b5", + "0xb16b117660f31197087f4d6fe50d3d4579152244956f753f9653ccf85f4b35c4" : "0x830272e3bb35226b047244cbdc46f1b6b864a280461e7a592f70e0863f4f1d33", + "0xb1f1aaedfb83c7755a2bffc9e2557f1723f9abe5642397963e76248c9209af57" : "0xe9be955c5fbfcd846d7425eaea05ce897786aefad99665342cbf30761b352526", + "0xb7bd50fdf7b043411c9ac33f0af2cebc69c393eb0b91f4976946f9c7b15ad0da" : "0xfccca0e7832bae9afe799a6d6177dc3869fa6c5b5105f8df6f365de5723820ec", + "0xbc96058eb03504ee6f5c0a9582f8720d99a6e9738b171499507facff0b2c0b5b" : "0x9db6a4f2766b51013b8d2f9038131d1bb4af725d019d111d7e26ff96c023b23f", + "0xc186c4f377b7f13892ade9656acd1522aa1f8ac151ac4f62457b5073241d79fc" : "0x7289738fef00f1770eeb098db9bd486c01ac12398d79cdf935514a128c585c51", + "0xcae57ae3017972d63effd8eae44f5054402c3e890d154b905ed6b5b533327fa9" : "0xd2e4bf465e61993d13089b940a7c55017a5117d8e43e4115550a139e1d4b3e3a", + "0xcf569ee7bf3accc0f893dffd04f1a757f373efe80893eff504fb3678f688ec1d" : "0x03", + "0xd69b7284545a9f5275df64ce94848dc954fcb8a8b525e7ac801517c12a75af84" : "0x4202995350abae303b43e564aa79121a30b5f1aea31f69cd25e07dd3fa64dce7", + "0xd8f6f90f51e657690ee28d1cc80d81bc1b89290065891fdd853d09caaaf756aa" : "0x01", + "0xde72f8eed43cc2a5a3eaa51483d14b17dc92bb26c154ae184cee4b4895011edc" : "0x47ce2b6fdb72c3fabb9c74f82c1e3e522bcd42e614fd85c208ac3c4c840cea72", + "0xe0e687ddf317f3d2b209ae3884148eff0f636e16827f82eded14ada8fc603009" : "0xfa7c8939f9b033162cf8d75ea69671bb8a27041bd4cdc76594e61e99333cb041", + "0xe8cda339d72a1a350b62f1e3fa52e254c395cc9fdd9f60adb21c7633fbdab531" : "0x128c4fdf4801a30eae99dd58f0f3ff5ca65f71b66a9ac0f38dd450fb24b4aaaa", + "0xec5e7f54fa5e516e616b04f9d5a0ee433a80e09ed47d7e5269afd76c05ff251e" : "0x14", + "0xf9a3bf5f2ccb903ee1a7644113b794db0260de404fb8f11203e75a7fff151618" : "0xbd94773c0d85c68240ae8dfd53d9d33cd137509bfc5d3433381299df768c8377" + } + }, + "e509e3a93beb1eba72f8cb8d25f93a85e2d54afb" : { + "balance" : "0x00", + "code" : "0x6000610b7f537c01000000000000000000000000000000000000000000000000000000006000350473c9ae5868651bf7b7db6e360217db49ce4e69c07e6020526308d3d58781141561024557600435606052606060605990590160009052600081526060518160200152600181604001528090502054608052600060806080599059016000905260008152606051816020015260028160400152328160600152809050205414151561014e57608060805990590160009052600081526060518160200152600281604001523281606001528090502054608052682f000000000000000060a060a059905901600090526000815260605181602001526000816040015260805181606001526000816080015280905020553260a060a05990590160009052600081526060518160200152600081604001526080518160600152600181608001528090502055610238565b608051608060805990590160009052600081526060518160200152600281604001523281606001528090502055682f000000000000000060a060a059905901600090526000815260605181602001526000816040015260805181606001526000816080015280905020553260a060a059905901600090526000815260605181602001526000816040015260805181606001526001816080015280905020556001606060605990590160009052600081526060518160200152600181604001528090502054016060606059905901600090526000815260605181602001526001816040015280905020555b60016101e05260206101e0f35b6328c8b31581141561029d576004356060526024356102005260a060a0599059016000905260008152606051816020015260008160400152610200518160600152600081608001528090502054610220526020610220f35b6374af23ec8114156103865760043560605260243561026052608060805990590160009052600081526060518160200152600281604001526102605181606001528090502054610200526000610200511415610332576102605160a060a05990590160009052600081526060518160200152600081604001526102005181606001526001816080015280905020541415610335565b60005b156103475760006102c05260206102c0f35b60a060a05990590160009052600081526060518160200152600081604001526102005181606001526000816080015280905020546102e05260206102e0f35b6384d646ee8114156103dc5760043560605260243560805260a060a05990590160009052600081526060518160200152600081604001526080518160600152600181608001528090502054610320526020610320f35b63f42294278114156106f45760043561026052601c602459905901600090520163175c6322601c82035260206103a06004836000602051602d5a03f1506103a0519050610360526102605115610581576103605160020280602002602001599059016000905281815260208101905090506103c05261036051806020026020015990590160009052818152602081019050905061042052601c602459905901600090520163c3387858601c8203526103605160408160200201599059016000905281602002604001816004856000602051602d5a03f150604081019050905090506104205260006104c05260006104e0525b610360516104c051121561057c576104c051602002610420510151606052601c60645990590160009052016374af23ec601c82035260605160048201526102605160248201526020610520604483600030602d5a03f1506105205190506105005260006105005114151561056c576060516104e0516020026103c05101526105005160016104e051016020026103c051015260026104e051016104e0525b60016104c051016104c0526104ce565b6106d7565b32610260526103605160020280602002602001599059016000905281815260208101905090506103c05261036051806020026020015990590160009052818152602081019050905061042052601c602459905901600090520163c3387858601c8203526103605160408160200201599059016000905281602002604001816004856000602051602d5a03f150604081019050905090506104205260006104c05260006104e0525b610360516104c05112156106d6576104c051602002610420510151606052601c60645990590160009052016374af23ec601c820352606051600482015261026051602482015260206105c0604483600030602d5a03f1506105c0519050610500526000610500511415156106c6576060516104e0516020026103c05101526105005160016104e051016020026103c051015260026104e051016104e0525b60016104c051016104c052610628565b5b6103c05160206040820352602060208203510260400160408203f3505b6380b5e7bd81141561073557600435606052606060605990590160009052600081526060518160200152600181604001528090502054610600526020610600f35b63156f1c328114156107865760043560605260243561064052608060805990590160009052600081526060518160200152600281604001526106405181606001528090502054610660526020610660f35b63b3a24fc081141561087857365990590160009052366004823760043560208201016106c0526024356106e05250600260206106c0510351018060200260200159905901600090528181526020810190509050610700523261070051526106e051602061070051015260026104c0525b600260206106c0510351016104c05112156108385760026104c051036020026106c05101516104c05160200261070051015260016104c051016104c0526107f6565b60206107005103516020026020599059016000905260208183610700516000600287604801f15080519050905061076052610760516107c05260206107c0f35b63e346f5fc811415610a1c576004356107e0526024356108005260006104c0525b606060605990590160009052600081526107e05181602001526001816040015280905020546104c05112156109e65760a060a05990590160009052600081526107e0518160200152600081604001526104c0518160600152600181608001528090502054610840526108405160a060a0599059016000905260008152610800518160200152600081604001526104c051816060015260018160800152809050205560a060a05990590160009052600081526107e0518160200152600081604001526104c051816060015260008160800152809050205460a060a0599059016000905260008152610800518160200152600081604001526104c05181606001526000816080015280905020556104c0516080608059905901600090526000815261080051816020015260028160400152610840518160600152809050205560016104c051016104c052610899565b6104c051606060605990590160009052600081526108005181602001526001816040015280905020556001610920526020610920f35b633fb57036811415610b5457600435606052602435610940526060606059905901600090526000815260605181602001526001816040015280905020546109605261096051608060805990590160009052600081526060518160200152600281604001526109405181606001528090502055600060a060a05990590160009052600081526060518160200152600081604001526109605181606001526000816080015280905020556109405160a060a05990590160009052600081526060518160200152600081604001526109605181606001526001816080015280905020556001606060605990590160009052600081526060518160200152600181604001528090502054016060606059905901600090526000815260605181602001526001816040015280905020556001610a40526020610a40f35b6312709a33811415610beb57600435606052602435608052604435610a6052610a605160a060a059905901600090526000815260605181602001526000816040015260805181606001526000816080015280905020540160a060a059905901600090526000815260605181602001526000816040015260805181606001526000816080015280905020556001610ac0526020610ac0f35b633229cf6e811415610c8257600435606052602435608052604435610a6052610a605160a060a059905901600090526000815260605181602001526000816040015260805181606001526000816080015280905020540360a060a059905901600090526000815260605181602001526000816040015260805181606001526000816080015280905020556001610b20526020610b20f35b63a75f5c6a811415610ce557600435606052602435608052604435610a6052610a605160a060a059905901600090526000815260605181602001526000816040015260805181606001526000816080015280905020556001610b60526020610b60f35b50", + "nonce" : "0x00", + "storage" : { + "0x0f299dbbe3a7a5d949fe794e9a47b3106699c8110ff986eb84921c183e69e7f0" : "0x2f0000000000000000", + "0x1edcd36f61cae5dc6414157dfbadf9f11ca013ac763e27f8af55feaa8a239c89" : "0x01", + "0x689082d076ec3c02cbe4b99f6d9833e3c4a161072fd42fb7649eee5189a67ccc" : "0x63524e3fe4791aefce1e932bbfb3fdf375bfad89", + "0xaf1d6676be3ab502a59d91f6f5c49baffc15b2cfc65a41c4d96857c0f535adba" : "0x01d60000000000000000", + "0xdf1a770f69d93d1719292f384fdb4da22c0e88aef2ba462bff16674bc7848730" : "0x1c11aa45c792e202e9ffdc2f12f99d0d209bef70", + "0xec5e7f54fa5e516e616b04f9d5a0ee433a80e09ed47d7e5269afd76c05ff251e" : "0x02" + } + }, + "f1562e1c0d0baa3ea746442bb7f11153fcf5cfda" : { + "balance" : "0x00", + "code" : "0x600061067f537c010000000000000000000000000000000000000000000000000000000060003504632f300bee8114156100ac576004356040526024356060526044356080526002608051018080602002602001599059016000905281815260208101905090506801000000000000000081526060516080516020028201526001604051036001608051016020028201528060206040820352602060208203510260400160408203f35050505b63a647a5b98114156102c85736599059016000905236600482376004356020820101610100526024356020820101610160526044356020820101610180526064356101a05260843560805250602061010051035180806020026020015990590160009052818152602081019050905060005b6101a0518112156101d557600060005b608051811215610162578060200261010051015181608051850201602002610160510151028201915060018101905061012e565b50680100000000000000008105905060005b6080518112156101c857700100000000000000000000000000000000836020026101805101518260805186020160200261016051015184020205816020028501510381602002850152600181019050610174565b505060018101905061011e565b50600060005b60805181121561020357806020028301518160200284015102820191506001810190506101db565b5068010000000000000000810590506002810560005b600b81121561024257600282680100000000000000008502058301059150600181019050610219565b5060005b60805181121561027657816801000000000000000082602002860151020581602002850152600181019050610246565b5050506001608051602002610100510151036080516020028201526001608051016020026101005101516001608051016020028201528060206040820352602060208203510260400160408203f35050505b635b18022981141561037957365990590160009052366004823760043560208201016103005260243560208201016103205260443560805250600060005b60805181121561033f57680100000000000000008160200261032051015182602002610300510151020582019150600181019050610306565b6000610320515114151561036657610320515168010000000000000000830205915061036b565b600091505b81610380526020610380f350505b63f4ca7dc481141561057157365990590160009052366004823760043560208201016103a05260243560208201016103c0526044356101a0526064356080525060206103c051035160026080510a806020026020015990590160009052818152602081019050905060005b60805181121561044d5760005b6080518112156104415768010000000000000000816020026103a0510151836020026103a051015102058160805184020160200284015101816080518402016020028401526001810190506103f1565b506001810190506103e4565b81905090508180602002602001599059016000905281815260208101905090506080516101a05102806020026020015990590160009052818152602081019050905060005b6101a05181121561051e5760005b6080518112156105125760005b608051811215610506576801000000000000000082608051830201602002870151826080518602016020026103c051015102058260805185020160200285015101826080518502016020028501526001810190506104ad565b506001810190506104a0565b50600181019050610492565b819050905060005b848112156105525780602002820151816020026103c05101510381602002840152600181019050610526565b508160206040820352602060208203510260400160408203f350505050505b63232b273481141561069d57365990590160009052366004823760043560208201016106205260243560208201016102805260443560208201016103c052606435610640526084356101a05260a435608052506000610280515112156106025760005b6080518112156106005780602002610280510151600003816020026102805101526001810190506105d4565b505b60005b6101a05181121561067f5760005b60805181121561067357680100000000000000006801000000000000000082602002610280510151610640510205826080518502016020026103c05101510205826020026106205101510182602002610620510152600181019050610613565b50600181019050610605565b6106205160206040820352602060208203510260400160408203f350505b50", + "nonce" : "0x00", + "storage" : { + } + } + }, + "postStateRoot" : "4ac24e3a630456e47fc48b3eaca67086047443b5152267eefc5f08a337f1ac03", + "pre" : { + "0000000000000000000000000000000000000000" : { + "balance" : "0x01", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "0000000000000000000000000000000000000001" : { + "balance" : "0x01", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "0000000000000000000000000000000000000002" : { + "balance" : "0x01", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "0000000000000000000000000000000000000003" : { + "balance" : "0x01", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "0000000000000000000000000000000000000004" : { + "balance" : "0x01", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "0ea65418d7bf32680f55572c943a94b590804998" : { + "balance" : "0x00", + "code" : "0x600061289f537c01000000000000000000000000000000000000000000000000000000006000350473c9ae5868651bf7b7db6e360217db49ce4e69c07e60205263c4982a8581141561012757600435606052602435608052608060805990590160009052600081526060518160200152608051816040015260008160600152809050205460a05260a051806020026020015990590160009052818152602081019050905060e0526000610140525b60a05161014051121561010b5760a060a0599059016000905260008152606051816020015260805181604001526001816060015261014051816080015280905020546101405160200260e051015260016101405101610140526100ad565b60e05160206040820352602060208203510260400160408203f3505b63cc1c944e8114156101765760043560605260243560805260806080599059016000905260008152606051816020015260805181604001526000816060015280905020546101a05260206101a0f35b6395a405b98114156101d5576004356060526024356080526044356101e05260a060a059905901600090526000815260605181602001526080518160400152600181606001526101e05181608001528090502054610200526020610200f35b6371ebb662811415610224576004356060526024356080526080608059905901600090526000815260605181602001526080518160400152600281606001528090502054610240526020610240f35b637a57a3db811415610325576004356060526024356080526044356102805260c060c0599059016000905260008152606051816020015260805181604001526003816060015261028051816080015260008160a0015280905020608060805990590160009052600081526060518160200152608051816040015260008160600152809050205460200280806020015990590160009052818152602081019050905060005b602083048112156102e95780840154816020028301526001810190506102c8565b602083066020036101000a60000381850154168160200283015281905090509050905060206040820352602060208203510260400160408203f3505b63f73dc690811415610394576004356060526024356080526044356103c0526064356103e05260c060c059905901600090526000815260605181602001526080518160400152600381606001526103c05181608001526103e0518160a001528090502054610400526020610400f35b6354cc61098114156103f3576004356060526024356080526044356103c05260a060a059905901600090526000815260605181602001526080518160400152600481606001526103c05181608001528090502054610440526020610440f35b63c63ef546811415610442576004356060526024356080526080608059905901600090526000815260605181602001526080518160400152600581606001528090502054610480526020610480f35b639381779b8114156105335760043560605260243560805260a060a059905901600090526000815260605181602001526080518160400152600681606001526000816080015280905020608060805990590160009052600081526060518160200152608051816040015260058160600152809050205460200280806020015990590160009052818152602081019050905060005b602083048112156104f75780840154816020028301526001810190506104d6565b602083066020036101000a60000381850154168160200283015281905090509050905060206040820352602060208203510260400160408203f3505b634f9c6eeb8114156106245760043560605260243560805260a060a059905901600090526000815260605181602001526080518160400152600781606001526000816080015280905020608060805990590160009052600081526060518160200152608051816040015260058160600152809050205460200280806020015990590160009052818152602081019050905060005b602083048112156105e85780840154816020028301526001810190506105c7565b602083066020036101000a60000381850154168160200283015281905090509050905060206040820352602060208203510260400160408203f3505b637dc121958114156107155760043560605260243560805260a060a059905901600090526000815260605181602001526080518160400152600881606001526000816080015280905020608060805990590160009052600081526060518160200152608051816040015260058160600152809050205460200280806020015990590160009052818152602081019050905060005b602083048112156106d95780840154816020028301526001810190506106b8565b602083066020036101000a60000381850154168160200283015281905090509050905060206040820352602060208203510260400160408203f3505b63fa9832d18114156108065760043560605260243560805260a060a059905901600090526000815260605181602001526080518160400152600981606001526000816080015280905020608060805990590160009052600081526060518160200152608051816040015260008160600152809050205460200280806020015990590160009052818152602081019050905060005b602083048112156107ca5780840154816020028301526001810190506107a9565b602083066020036101000a60000381850154168160200283015281905090509050905060206040820352602060208203510260400160408203f3505b632c5a40d58114156108f75760043560605260243560805260a060a059905901600090526000815260605181602001526080518160400152600a81606001526000816080015280905020608060805990590160009052600081526060518160200152608051816040015260058160600152809050205460200280806020015990590160009052818152602081019050905060005b602083048112156108bb57808401548160200283015260018101905061089a565b602083066020036101000a60000381850154168160200283015281905090509050905060206040820352602060208203510260400160408203f3505b63e05dcb568114156109eb5760043560605260243560805260a060a059905901600090526000815260605181602001526080518160400152600b81606001526000816080015280905020600260806080599059016000905260008152606051816020015260805181604001526000816060015280905020546020020180806020015990590160009052818152602081019050905060005b602083048112156109af57808401548160200283015260018101905061098e565b602083066020036101000a60000381850154168160200283015281905090509050905060206040820352602060208203510260400160408203f3505b63586b5be0811415610a3a576004356060526024356080526080608059905901600090526000815260605181602001526080518160400152600c81606001528090502054610b80526020610b80f35b63eb8af5aa811415610b585760043560605260243560805260a060a059905901600090526000815260605181602001526080518160400152600d81606001526000816080015280905020608060805990590160009052600081526060518160200152608051816040015260008160600152809050205460806080599059016000905260008152606051816020015260805181604001526005816060015280905020540560200280806020015990590160009052818152602081019050905060005b60208304811215610b1c578084015481602002830152600181019050610afb565b602083066020036101000a60000381850154168160200283015281905090509050905060206040820352602060208203510260400160408203f3505b637ab6ea8a811415610c765760043560605260243560805260a060a059905901600090526000815260605181602001526080518160400152600e81606001526000816080015280905020608060805990590160009052600081526060518160200152608051816040015260008160600152809050205460806080599059016000905260008152606051816020015260805181604001526005816060015280905020540560200280806020015990590160009052818152602081019050905060005b60208304811215610c3a578084015481602002830152600181019050610c19565b602083066020036101000a60000381850154168160200283015281905090509050905060206040820352602060208203510260400160408203f3505b632b810cb9811415610d945760043560605260243560805260a060a059905901600090526000815260605181602001526080518160400152600f81606001526000816080015280905020608060805990590160009052600081526060518160200152608051816040015260008160600152809050205460806080599059016000905260008152606051816020015260805181604001526005816060015280905020540560200280806020015990590160009052818152602081019050905060005b60208304811215610d58578084015481602002830152600181019050610d37565b602083066020036101000a60000381850154168160200283015281905090509050905060206040820352602060208203510260400160408203f3505b637fb42e46811415610e855760043560605260243560805260a060a059905901600090526000815260605181602001526080518160400152601081606001526000816080015280905020608060805990590160009052600081526060518160200152608051816040015260008160600152809050205460200280806020015990590160009052818152602081019050905060005b60208304811215610e49578084015481602002830152600181019050610e28565b602083066020036101000a60000381850154168160200283015281905090509050905060206040820352602060208203510260400160408203f3505b63734fa727811415610f765760043560605260243560805260a060a059905901600090526000815260605181602001526080518160400152601181606001526000816080015280905020608060805990590160009052600081526060518160200152608051816040015260008160600152809050205460200280806020015990590160009052818152602081019050905060005b60208304811215610f3a578084015481602002830152600181019050610f19565b602083066020036101000a60000381850154168160200283015281905090509050905060206040820352602060208203510260400160408203f3505b63c67fa8578114156110675760043560605260243560805260a060a059905901600090526000815260605181602001526080518160400152601281606001526000816080015280905020608060805990590160009052600081526060518160200152608051816040015260008160600152809050205460200280806020015990590160009052818152602081019050905060005b6020830481121561102b57808401548160200283015260018101905061100a565b602083066020036101000a60000381850154168160200283015281905090509050905060206040820352602060208203510260400160408203f3505b635ed853e48114156111855760043560605260243560805260a060a059905901600090526000815260605181602001526080518160400152601381606001526000816080015280905020608060805990590160009052600081526060518160200152608051816040015260008160600152809050205460806080599059016000905260008152606051816020015260805181604001526005816060015280905020540560200280806020015990590160009052818152602081019050905060005b60208304811215611149578084015481602002830152600181019050611128565b602083066020036101000a60000381850154168160200283015281905090509050905060206040820352602060208203510260400160408203f3505b63b86f51258114156112a35760043560605260243560805260a060a059905901600090526000815260605181602001526080518160400152601481606001526000816080015280905020608060805990590160009052600081526060518160200152608051816040015260008160600152809050205460806080599059016000905260008152606051816020015260805181604001526005816060015280905020540560200280806020015990590160009052818152602081019050905060005b60208304811215611267578084015481602002830152600181019050611246565b602083066020036101000a60000381850154168160200283015281905090509050905060206040820352602060208203510260400160408203f3505b63bc3d7d858114156113945760043560605260243560805260a060a059905901600090526000815260605181602001526080518160400152601581606001526000816080015280905020608060805990590160009052600081526060518160200152608051816040015260008160600152809050205460200280806020015990590160009052818152602081019050905060005b60208304811215611358578084015481602002830152600181019050611337565b602083066020036101000a60000381850154168160200283015281905090509050905060206040820352602060208203510260400160408203f3505b63a2302f2f81141561148157600435606052602435611680526044356116a0526116a05160a060a0599059016000905260008152606051816020015261168051816040015260018160600152608060805990590160009052600081526060518160200152611680518160400152600081606001528090502054816080015280905020556001608060805990590160009052600081526060518160200152611680518160400152600081606001528090502054016080608059905901600090526000815260605181602001526116805181604001526000816060015280905020556001611740526020611740f35b63058ca2bc8114156114dd576004356060526024356080526044356117605261176051608060805990590160009052600081526060518160200152608051816040015260028160600152809050205560016117a05260206117a0f35b635d3b965b8114156116175736599059016000905236600482376004356060526024356080526044356102805260643560208201016117e052608435611800525060c060c0599059016000905260008152606051816020015260805181604001526003816060015261028051816080015260008160a001528090502060206117e05103516020026020810460005b8181121561158c57806020026117e05101518482015560018101905061156b565b602083066020036101000a600003816020026117e05101511684820155505050506118005160806080599059016000905260008152606051816020015260805181604001526002816060015280905020540160806080599059016000905260008152606051816020015260805181604001526002816060015280905020556001611900526020611900f35b63b0e14f0f81141561167357600435606052602435608052604435611920526119205160806080599059016000905260008152606051816020015260805181604001526005816060015280905020556001611960526020611960f35b636acccdbc8114156117395736599059016000905236600482376004356060526024356080526044356020820101611980525060a060a05990590160009052600081526060518160200152608051816040015260068160600152600081608001528090502060206119805103516020026020810460005b8181121561170b5780602002611980510151848201556001810190506116ea565b602083066020036101000a600003816020026119805101511684820155505050506001611a40526020611a40f35b63a1fa51f98114156117ff5736599059016000905236600482376004356060526024356080526044356020820101611a60525060a060a0599059016000905260008152606051816020015260805181604001526007816060015260008160800152809050206020611a605103516020026020810460005b818112156117d15780602002611a60510151848201556001810190506117b0565b602083066020036101000a60000381602002611a605101511684820155505050506001611b20526020611b20f35b63cd87f43a8114156118c55736599059016000905236600482376004356060526024356080526044356020820101611b40525060a060a0599059016000905260008152606051816020015260805181604001526008816060015260008160800152809050206020611b405103516020026020810460005b818112156118975780602002611b4051015184820155600181019050611876565b602083066020036101000a60000381602002611b405101511684820155505050506001611c00526020611c00f35b63222a866381141561198b5736599059016000905236600482376004356060526024356080526044356020820101611c20525060a060a0599059016000905260008152606051816020015260805181604001526009816060015260008160800152809050206020611c205103516020026020810460005b8181121561195d5780602002611c205101518482015560018101905061193c565b602083066020036101000a60000381602002611c205101511684820155505050506001611ce0526020611ce0f35b63b39e1faa811415611a515736599059016000905236600482376004356060526024356080526044356020820101611d00525060a060a059905901600090526000815260605181602001526080518160400152600a816060015260008160800152809050206020611d005103516020026020810460005b81811215611a235780602002611d0051015184820155600181019050611a02565b602083066020036101000a60000381602002611d005101511684820155505050506001611dc0526020611dc0f35b63e365736b811415611b175736599059016000905236600482376004356060526024356080526044356020820101611de0525060a060a059905901600090526000815260605181602001526080518160400152600b816060015260008160800152809050206020611de05103516020026020810460005b81811215611ae95780602002611de051015184820155600181019050611ac8565b602083066020036101000a60000381602002611de05101511684820155505050506001611ea0526020611ea0f35b63aad7d6e3811415611b7357600435606052602435608052604435611ec052611ec0516080608059905901600090526000815260605181602001526080518160400152600c816060015280905020556001611f00526020611f00f35b6301112b27811415611c395736599059016000905236600482376004356060526024356080526044356020820101611f20525060a060a059905901600090526000815260605181602001526080518160400152600d816060015260008160800152809050206020611f205103516020026020810460005b81811215611c0b5780602002611f2051015184820155600181019050611bea565b602083066020036101000a60000381602002611f205101511684820155505050506001611fe0526020611fe0f35b63bdbb239b811415611cff5736599059016000905236600482376004356060526024356080526044356020820101612000525060a060a059905901600090526000815260605181602001526080518160400152600e8160600152600081608001528090502060206120005103516020026020810460005b81811215611cd1578060200261200051015184820155600181019050611cb0565b602083066020036101000a6000038160200261200051015116848201555050505060016120c05260206120c0f35b6305a0cd48811415611dc557365990590160009052366004823760043560605260243560805260443560208201016120e0525060a060a059905901600090526000815260605181602001526080518160400152600f8160600152600081608001528090502060206120e05103516020026020810460005b81811215611d9757806020026120e051015184820155600181019050611d76565b602083066020036101000a600003816020026120e051015116848201555050505060016121a05260206121a0f35b63aaa1fe35811415611e8b57365990590160009052366004823760043560605260243560805260443560208201016121c0525060a060a05990590160009052600081526060518160200152608051816040015260108160600152600081608001528090502060206121c05103516020026020810460005b81811215611e5d57806020026121c051015184820155600181019050611e3c565b602083066020036101000a600003816020026121c05101511684820155505050506001612280526020612280f35b632be4935d811415611f5157365990590160009052366004823760043560605260243560805260443560208201016122a0525060a060a05990590160009052600081526060518160200152608051816040015260118160600152600081608001528090502060206122a05103516020026020810460005b81811215611f2357806020026122a051015184820155600181019050611f02565b602083066020036101000a600003816020026122a05101511684820155505050506001612360526020612360f35b6313a8350d8114156120175736599059016000905236600482376004356060526024356080526044356020820101612380525060a060a05990590160009052600081526060518160200152608051816040015260128160600152600081608001528090502060206123805103516020026020810460005b81811215611fe9578060200261238051015184820155600181019050611fc8565b602083066020036101000a600003816020026123805101511684820155505050506001612440526020612440f35b63cb540b458114156120dd5736599059016000905236600482376004356060526024356080526044356020820101612460525060a060a05990590160009052600081526060518160200152608051816040015260138160600152600081608001528090502060206124605103516020026020810460005b818112156120af57806020026124605101518482015560018101905061208e565b602083066020036101000a600003816020026124605101511684820155505050506001612520526020612520f35b63be0306278114156121a35736599059016000905236600482376004356060526024356080526044356020820101612540525060a060a05990590160009052600081526060518160200152608051816040015260148160600152600081608001528090502060206125405103516020026020810460005b81811215612175578060200261254051015184820155600181019050612154565b602083066020036101000a600003816020026125405101511684820155505050506001612600526020612600f35b6383fd77f08114156122695736599059016000905236600482376004356060526024356080526044356020820101612620525060a060a05990590160009052600081526060518160200152608051816040015260158160600152600081608001528090502060206126205103516020026020810460005b8181121561223b57806020026126205101518482015560018101905061221a565b602083066020036101000a6000038160200261262051015116848201555050505060016126e05260206126e0f35b63594622058114156122d5576004356060526024356080526044356103c052606435612700526127005160a060a059905901600090526000815260605181602001526080518160400152600481606001526103c051816080015280905020556001612740526020612740f35b63bb8e419681141561244857600435606052602435612760526044356127805260006127a0525b6080608059905901600090526000815260605181602001526001612760510381604001526000816060015280905020546127a051121561243b5760a060a05990590160009052600081526060518160200152600161276051038160400152600181606001526127a0518160800152809050205460a060a05990590160009052600081526060518160200152612780518160400152600181606001526080608059905901600090526000815260605181602001526127805181604001526000816060015280905020548160800152809050205560016080608059905901600090526000815260605181602001526127805181604001526000816060015280905020540160806080599059016000905260008152606051816020015261278051816040015260008160600152809050205560016127a051016127a0526122fc565b6001612880526020612880f35b50", + "nonce" : "0x00", + "storage" : { + "0x065d5efdfcc0fba693dc9e467f633097ffdc97401901463ad0e28855486d1edf" : "0xb9d69098a6acfe0c6411bcaaf430f78d363a9adc32b78bc2e15ccd6e883e9784", + "0x12643ff300762717d27efb567b82c65560d7b43249d908504e5510863ab82aac" : "0x154cf60e137c594516a065149610b6a3989396a42581d5fd8919e711c55da225", + "0x1489023d18c5d10427c4aa8dc726e840eb5ae7f604a8e9243c61634fb009e4d7" : "0x05", + "0x1489023d18c5d10427c4aa8dc726e840eb5ae7f604a8e9243c61634fb009e4d8" : "0x01", + "0x19efb13d6576359514ace5211988a8d51379fa88ccd2b886b409f842b13d7932" : "0xc849cc595b452d11c206d2eb8cdfa06de211e3ff19ee0e0276dc857c05d4fe", + "0x1b37e91bf8580c7c6bcf8cdff25c7ed78180124a94af6f30c40d476a3d079ad6" : "0xaba4cd295118a482a0a62579e35e4ba5bdd76146cc9e4d96172fce8be8977ab4", + "0x2bf9fd8facdd6fd9c84657f5ad7381a5aecf670cda68cb3c5829b6532c865506" : "0x53098a1d111586dbcc0d051846284f5803c63c313e7f7e6d84430435d11d4c50", + "0x3111bfd25728c0adfad0f8c1ad79cb1b91167267deca98de88f156ed25caeedc" : "0xad393086f30b49511b08fdd27ac78810b084c7cd7de6ac354f614c18ea9e7df4", + "0x3379e7ae125c5c5d623d1d993c1459b61d6723b1c30d1aa026c48f6a6155b8ea" : "0x8c4183732567a99a8a718e363391e102532f9a640e42968cf2354d9acc908bb0", + "0x34cabe0c7e64a2caa93fd8d6a0defc07acb9d44b13430fa3ae9282fffd40dee2" : "0x01", + "0x34cabe0c7e64a2caa93fd8d6a0defc07acb9d44b13430fa3ae9282fffd40dee3" : "0x01", + "0x34cabe0c7e64a2caa93fd8d6a0defc07acb9d44b13430fa3ae9282fffd40dee4" : "0x01", + "0x34cabe0c7e64a2caa93fd8d6a0defc07acb9d44b13430fa3ae9282fffd40dee5" : "0x01", + "0x39050607fe892059a6344ab0f594f382fb0b345cab373497246dbe86fe7e14e7" : "0x2b3bca833e482737e7e47b1568e6f890f8e1666490d38fe130abd6f0ccb109cf", + "0x417be8bc6791807372e0222a350bb8a5d67bbc8d7595c301d8a5a8372cfdcef1" : "0xabd4971b4605a7155802f70e08298b1ceb0e4e4eaccccd348f77a77227f73a7f", + "0x41e9a54b3ee0c276aa076babb161de12b0f8916b47f8f6fb85cc387cf34696dd" : "0x22f2f444ebda9d2913ffef5059b039ec9b5876aa71821991c2515bf79f64935e", + "0x45ceb8da6fb8936592d3bce4883f1a6a34d636f559e0a1070a5802a65ac39bd5" : "0x57a5122ff3bf737b0de0f9f08011a8648c19e43ff071fb7086234723c9383f1f", + "0x4aa6b934608a45c8f53a945c05ddee1814a3b9f63a048fc7ad3d47e67156f024" : "0xd03862becedada67b4825a0238f3e67495ccb595cd7d08f1bd5d3160644b9299", + "0x4b8b58f0b0e326a5907d1a810e5ff31e05b4cab45125b776db8577e7dbc46bce" : "0x2f0000000000000000", + "0x4c33460347337bfc7df08bf182988301b7b426a27a67f1c6c634f637c60e87ac" : "0xbab4ab2ad4eafe7c84ef6a8cd69157d9ce6b843793a2cd0877b8e91f63cb2d4d", + "0x58da0c0c256bba101ce36fad8bf838717a57e6ab850a191dc9c09da9ce56bf1b" : "0x05", + "0x5cb38b16db1d632086d4af695de7f5f242a6e40947067f96edd566fe2ac438ef" : "0x6d0be832b2007ea28cda705b73922cbf9794c5a25b89bd2f28b7347ed2b96c86", + "0x64a9621cc4ba92bf738c55010c609dfaa3972a1138c30b5adcef1ba2363b360e" : "0xd7953bfe8cb591f129fd0862a9e9c421151e2b5831560ff5215d23f751364b35", + "0x696664a5f0ab5acd9304a377fb684f2d3fe6bb60b8a95cb2bdbb57db767e7a84" : "0x154cf60e137c594516a065149610b6a3989396a42581d5fd8919e711c55da225", + "0x69ad1d19e617936abdf05133bf268dc8ced6b518f22b249b5860967d07006487" : "0x8c803b48b383ddabd1b3afe858efb48c203229b7317dd76149dddab4253b858a", + "0x70b3bf53996fac325eb67608a4eeb0cd0b55def6255d7ed42ad28ec07238b5d6" : "0x45e9723e9232b37207ecac1c97b8647d053625a578d450f7456280b2ff8efc27", + "0x7a9dcee62e3e02cc8e020f372df2efdeb835f091c1ef1dbe221072d1095aabd2" : "0x2f0000000000000000", + "0x7e4d8c0f6d8abb4ce1ae45b254046aceedabfa9548851b8b5d3e2c0637c985fd" : "0x0b", + "0x7e95f3cc3315d289c52253baaba29b1b00c86816e6b788d50795279a8baa00db" : "0x45e9723e9232b37207ecac1c97b8647d053625a578d450f7456280b2ff8efc27", + "0x8da187157087529ee4e9c381f8e3149c56acf3bdfda29b8b9b4532f24b83f5fe" : "0x8c4183732567a99a8a718e363391e102532f9a640e42968cf2354d9acc908bb0", + "0x9001f91ddaef87bc067886e874c0749998c9b58b2ec8472ca014ca8b55f88578" : "0x0fb76974eefca01f33fb38646c2d3c1536f1a763d7aff53ab7f877d4c5ea7fd0", + "0x9ed0cedd2a9a78d949f40019f53d10031aef6ed342c97e01fc03b481ee56b3cb" : "0x04", + "0x9fddf1db29caa5c1239edd86e9e0835cdfe41f7253ec78f62d3da8558d6f3cd7" : "0x104eef8fa35bf39f677d81855bc0b9f42317f32792e98e95e4df441deb634211", + "0xa0953566119395c11186b334805fc1a16175ecac0ecc93ae0322264f0dc2e40d" : "0x10c5a00466ab7c0adae1e93537cc275ea8cf23ff509d5466a1fd6f56b0a61d1b", + "0xaa0dbf8241ef3ae07c254e6869e84895ba2be0779a7f261c8308a3114be1c54a" : "0x04", + "0xaffe808b495d13a14391ce5f27c211c36da12826969cd7841ee0d81e5b900e2d" : "0x01", + "0xaffe808b495d13a14391ce5f27c211c36da12826969cd7841ee0d81e5b900e2e" : "0x01", + "0xb4a2b68c48ef78aeb641ee538fad51781022fd23ed9d93d211017db6a02376ce" : "0x0fbc06642245cf2fed7ed46ea0a18a7185830b6f2c4e0a4ca55246041e8bfa72", + "0xba8d79990898383919e437f2458b93b340072c89d963808d9e04f51858e3c5ec" : "0x41d2cac534d90a0dbd199117481a63e32cc11411dab2eaa36c91c0eec62823cf", + "0xbb3bc1a2015123750df57d4ceff7e28cb847910b79b34841de905b59a8bb177c" : "0x734417eb19e1873427257f1ea1594748c16cfa866a7b7cf896e281f2ec774a40", + "0xbf30cdcb83ab2bd5f5eee691ffa4107b58b75ba6a5c2e6754d4c5c0437f2876c" : "0x05", + "0xc2a26b80067fc36b8268b0d5b31afff953fa91cebea39f191e2763d6e71259b9" : "0x02a43c547fe8de2400d2a141016550e8bae058d41164247c099e787ddd40e789", + "0xc98339d275eef16e0562ca8521212cef61aa0f39b12e2a27502aaa97a9e5e70f" : "0x5a3de2a5c268cdb75f4b01507aa80c4e4a1bc67bcb0df265bbb00060774e5978", + "0xcbd6ae6bd61bc9270ec836f1919b3268113abe076c7febfdb8cf573b199ce9a9" : "0xf402b17773c1f7534034ee58dc0d2a3421470a7a67daf4fa790dc3b420eef790", + "0xd2c8cbb562fccd0c9a3d0d491b7f65cc6a89856498f933427d9d21b745b9d50e" : "0x3625a26fdb7b747501f1ee2500f98c49d9cd290383a21254587c3c49d2805321", + "0xd66f52a4e24585238ccc03443b2fdb8b2b100259bc7260f39097c7c339211ffe" : "0x1641851904381915c86b60df7e288896fb5f8ebad65d594829fb9f2b59cd1da6", + "0xd8f720c05a5526dd621d1831ae122abddd3dfecd8b63b0ba4c92fa7b2ade44ff" : "0xad393086f30b49511b08fdd27ac78810b084c7cd7de6ac354f614c18ea9e7df4", + "0xdc22d3171b82817c910bbeac1f8b50c8de99f8c524f172aef3491981bd5ed4fb" : "0x94b8cba4ea090d1c392fbc94b82fb9ef9f468a15bbc537f4d051776f4d422b1d", + "0xdce8adbdefa929dbe60245f359446db4174c62824b42e5d4d9e7b834b4d61deb" : "0x2c9069845b2e74c577ff1cd18df6bc452805f527a9ee91fd4a059e0408b5dea6", + "0xdd9493073db9e42fd955e834c89a74089f99196186ee0b2688124989be00d196" : "0x01", + "0xdd9493073db9e42fd955e834c89a74089f99196186ee0b2688124989be00d197" : "0x01", + "0xdd9493073db9e42fd955e834c89a74089f99196186ee0b2688124989be00d198" : "0x01", + "0xdd9493073db9e42fd955e834c89a74089f99196186ee0b2688124989be00d199" : "0x01", + "0xdd9493073db9e42fd955e834c89a74089f99196186ee0b2688124989be00d19a" : "0x01", + "0xe54f074c81bfa60b5bf413934c108086298b77291560edfeead8aa1232e95236" : "0x0f40aaa24323c9e6983ccffafeebe4b426509b901e8c98b8a40d881804804e6b", + "0xe66c0f55f66c752edf73027d45b7b1ae729ae15e1c67c362dbc6f25edf8d76ff" : "0x01", + "0xe983d899f807bbcb5881f2ddf875b2ebb5cb8a7a4e77a8c98a40aaae6a468735" : "0x6d0be832b2007ea28cda705b73922cbf9794c5a25b89bd2f28b7347ed2b96c86", + "0xed7d6e2d40fbd5046412ffad1c45b63d87c6197182d6dbc66bb1e5c6e4ded5c7" : "0xaba4cd295118a482a0a62579e35e4ba5bdd76146cc9e4d96172fce8be8977ab4", + "0xf043b5a1952847579f233706a8f130889a484d2da3e574fdd5859f05aaf52111" : "0x02", + "0xf40f4cfdacb62dd799f36b580349fac1f4a4caf8dd3383cc387c35adb6574e21" : "0x2f0000000000000000", + "0xf60fa6e25e9028a6dc6b26bbc1eadae3da157df0d1d6f6628bc33cad68a7e455" : "0x2d7d00618c059ebe40593b9497c633e1ac6e161dadbd5bb734c2663cd3e8a8e1", + "0xfd280ac5182d5b2366122f38acfa6dc471240ffde9d5feb985ce7a2325c960e7" : "0x03" + } + }, + "142a6927cf0060133187ba8a8e74d641438f0c1c" : { + "balance" : "0x00", + "code" : "0x600061031f537c01000000000000000000000000000000000000000000000000000000006000350473c9ae5868651bf7b7db6e360217db49ce4e69c07e602052730ea65418d7bf32680f55572c943a94b5908049986040526327138bfb81141561038d57600435608052601c6044599059016000905201637a66d7ca601c8203526080516004820152602060e06024836000602051602d5a03f15060e051905060a052601c604459905901600090520163c60409c6601c820352608051600482015260206101206024836000602051602d5a03f150610120519050430561010052600061014052600061016052600061018052600260a051016101005112151561010a576001610140525b60006101a052610100516101c0525b606461010051016101c051121561018457601c606459905901600090520163cc1c944e601c82035260805160048201526101c051602482015260206101e06044836000604051602d5a03f1506101e05190506101a051016101a05260016101c051016101c052610119565b6005601c606459905901600090520163cc1c944e601c820352608051600482015260a051602482015260206102006044836000604051602d5a03f1506102005190501280156101d357806101db565b600a6101a051125b9050156101eb57610140516101ee565b60005b1561033657601c604459905901600090520163c5476efe601c820352608051600482015260206102406024836000602051602d5a03f15061024051905050601c6064599059016000905201637265802d601c82035260805160048201526000602482015260206102606044836000602051602d5a03f15061026051905050601c606459905901600090520163c286273a601c82035260805160048201526000602482015260206102806044836000602051602d5a03f15061028051905050601c6044599059016000905201637a66d7ca601c820352608051600482015260206102a06024836000602051602d5a03f1506102a051905060a052601c608459905901600090520163bb8e4196601c820352608051600482015260a051602482015261010051604482015260206102c06064836000604051602d5a03f1506102c051905050610343565b6001610160526001610180525b61014051156103555761016051610358565b60005b156103665761018051610369565b60005b1561037f5760016102e05260206102e0f361038c565b6000610300526020610300f35b5b50", + "nonce" : "0x00", + "storage" : { + } + }, + "1cdc8315bdb1362de8b7b2fa9ee75dc873037179" : { + "balance" : "0x01", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "9761fecf88590592cf05ce545504d376d1693ab3" : { + "balance" : "0x00", + "code" : "0x60006105df537c010000000000000000000000000000000000000000000000000000000060003504730ea65418d7bf32680f55572c943a94b59080499860205273e509e3a93beb1eba72f8cb8d25f93a85e2d54afb60405273c9ae5868651bf7b7db6e360217db49ce4e69c07e60605273f1562e1c0d0baa3ea746442bb7f11153fcf5cfda60805263546fdeb381141561038d5760043560c05260243560e05260443561010052606435610120526084356101405260026101005101601c606459905901600090520163e05dcb56601c82035260c051600482015260e05160248201526002610100510160408160200201599059016000905281602002604001816044856000602051602d5a03f150604081019050905090506000600161010051016020028201511415610250576060601c61014c59905901600090520163e365736b601c82035260c051600482015260e0516024820152601c6084599059016000905201632f300bee601c82035260026004820152600560248201526101005160448201528460408160200201599059016000905281602002604001816064856000608051602d5a03f1506040810190509050905060208103516020026020018360448401526020820360a4840152806101088401528084019350505081600401599059016000905260648160648460006004601cf16101fc57fe5b6064810192506101088201518080858260a487015160006004600a8705601201f161022357fe5b50808401935050808303602061028082846000602051602d5a03f15061028051905090509050905061037d565b6060601c61014c59905901600090520163e365736b601c82035260c051600482015260e0516024820152601c6084599059016000905201632f300bee601c820352600160016101005101602002850151036004820152600560248201526101005160448201528460408160200201599059016000905281602002604001816064856000608051602d5a03f1506040810190509050905060208103516020026020018360448401526020820360a4840152806101088401528084019350505081600401599059016000905260648160648460006004601cf161032d57fe5b6064810192506101088201518080858260a487015160006004600a8705601201f161035457fe5b5080840193505080830360206102c082846000602051602d5a03f1506102c05190509050905090505b5060016102e05260206102e0f350505b63de9080c88114156107645760043560c05260243560e05260443561010052606435610120526084356101405260026101005101601c606459905901600090520163e05dcb56601c82035260c051600482015260e05160248201528160408160200201599059016000905281602002604001816044856000602051602d5a03f15060408101905090509050601c6064599059016000905201632c5a40d5601c82035260c051600482015260e05160248201526101405160408160200201599059016000905281602002604001816044856000602051602d5a03f1506040810190509050905061012051806020026020015990590160009052818152602081019050905060005b610120518112156104ee57601c60645990590160009052016328c8b315601c82035260c051600482015281602482015260206103606044836000604051602d5a03f15061036051905081602002830152600181019050610493565b5060a0601c61020c59905901600090520163a647a5b9601c8203528460208103516020026020018360048401526020820360a484015280610148840152808401935050508360208103516020026020018360248401526020820360c484015280610168840152808401935050508260208103516020026020018360448401526020820360e4840152806101888401528084019350505061012051606482015261010051608482015281600401599059016000905260a48160a484600060046022f16105b557fe5b60a4810192506101488201518080858260a487015160006004600a8705601201f16105dc57fe5b508084019350506101688201518080858260c487015160006004600a8705601201f161060457fe5b508084019350506101888201518080858260e487015160006004600a8705601201f161062c57fe5b5080840193505080830387604081602002015990590160009052816020026040018184866000608051602d5a03f1506040810190509050905090509050905092506060601c61014c59905901600090520163e365736b601c82035260c051600482015260e05160248201528460208103516020026020018360448401526020820360a4840152806101088401528084019350505081600401599059016000905260648160648460006004601cf16106df57fe5b6064810192506101088201518080858260a487015160006004600a8705601201f161070657fe5b5080840193505080830360206103c082846000602051602d5a03f1506103c05190509050905090505060006101005160200284015114156107525760006103e05260206103e0f361075f565b6001610400526020610400f35b505050505b63384ca8dd811415610a665760043560c05260243560e052604435610100526064356101205260843561014052601c606459905901600090520163e05dcb56601c82035260c051600482015260e05160248201526002610100510160408160200201599059016000905281602002604001816044856000602051602d5a03f15060408101905090509050601c606459905901600090520163fa9832d1601c82035260c051600482015260e05160248201526101005160408160200201599059016000905281602002604001816044856000602051602d5a03f15060408101905090509050601c608459905901600090520163aad7d6e3601c82035260c051600482015260e05160248201526060601c61014c599059016000905201635b180229601c8203528360208103516020026020018360048401526020820360648401528060c8840152808401935050508460208103516020026020018360248401526020820360848401528060e88401528084019350505061010051604482015281600401599059016000905260648160648460006004601cf161090157fe5b60648101925060c882015180808582606487015160006004600a8705601201f161092757fe5b5080840193505060e882015180808582608487015160006004600a8705601201f161094e57fe5b50808401935050808303602061044082846000608051602d5a03f150610440519050905090509050604482015260206104606064836000602051602d5a03f150610460519050506060601c61014c59905901600090520163222a8663601c82035260c051600482015260e05160248201528260208103516020026020018360448401526020820360a4840152806101088401528084019350505081600401599059016000905260648160648460006004601cf1610a0757fe5b6064810192506101088201518080858260a487015160006004600a8705601201f1610a2e57fe5b50808401935050808303602061048082846000602051602d5a03f1506104805190509050905090505060016104a05260206104a0f350505b63d5dc5af1811415610d4b5760043560c05260243560e052604435610100526064356101205260843561014052601c606459905901600090520163e05dcb56601c82035260c051600482015260e05160248201526002610100510160408160200201599059016000905281602002604001816044856000602051602d5a03f15060408101905090509050601c6064599059016000905201632c5a40d5601c82035260c051600482015260e05160248201526101405160408160200201599059016000905281602002604001816044856000602051602d5a03f150604081019050905090506080601c6101ac59905901600090520163f4ca7dc4601c82035283602081035160200260200183600484015260208203608484015280610108840152808401935050508260208103516020026020018360248401526020820360a4840152806101288401528084019350505061012051604482015261010051606482015281600401599059016000905260848160848460006004601ff1610be757fe5b60848101925061010882015180808582608487015160006004600a8705601201f1610c0e57fe5b508084019350506101288201518080858260a487015160006004600a8705601201f1610c3657fe5b5080840193505080830361014051604081602002015990590160009052816020026040018184866000608051602d5a03f1506040810190509050905090509050905090506060601c61014c59905901600090520163b39e1faa601c82035260c051600482015260e05160248201528260208103516020026020018360448401526020820360a4840152806101088401528084019350505081600401599059016000905260648160648460006004601cf1610cec57fe5b6064810192506101088201518080858260a487015160006004600a8705601201f1610d1357fe5b5080840193505080830360206104c082846000602051602d5a03f1506104c05190509050905090505060016104e05260206104e0f350505b630939aa8c81141561114c5760043560c05260243560e052604435610100526064356101205260843561014052601c606459905901600090520163e05dcb56601c82035260c051600482015260e05160248201526002610100510160408160200201599059016000905281602002604001816044856000602051602d5a03f15060408101905090509050601c6064599059016000905201637dc12195601c82035260c051600482015260e05160248201526101405160408160200201599059016000905281602002604001816044856000602051602d5a03f15060408101905090509050601c606459905901600090520163586b5be0601c82035260c051600482015260e051602482015260206105006044836000602051602d5a03f150610500519050601c606459905901600090520163eb8af5aa601c82035260c051600482015260e05160248201526101205160408160200201599059016000905281602002604001816044856000602051602d5a03f1506040810190509050905060c0601c61026c59905901600090520163232b2734601c8203528260208103516020026020018360048401526020820360c484015280610188840152808401935050508560208103516020026020018360248401526020820360e4840152806101a88401528084019350505084602081035160200260200183604484015260208203610104840152806101c8840152808401935050508360648201526101205160848201526101005160a482015281600401599059016000905260c48160c484600060046025f1610f9657fe5b60c4810192506101888201518080858260c487015160006004600a8705601201f1610fbd57fe5b508084019350506101a88201518080858260e487015160006004600a8705601201f1610fe557fe5b508084019350506101c88201518080858261010487015160006004600a8705601201f161100e57fe5b5080840193505080830361012051604081602002015990590160009052816020026040018184866000608051602d5a03f1506040810190509050905090509050905090506060601c61014c5990590160009052016301112b27601c82035260c051600482015260e05160248201528260208103516020026020018360448401526020820360a4840152806101088401528084019350505081600401599059016000905260648160648460006004601cf16110c457fe5b6064810192506101088201518080858260a487015160006004600a8705601201f16110eb57fe5b50808401935050808303602061058082846000602051602d5a03f15061058051905090509050905050600060016101005101602002850151141561113a5760006105a05260206105a0f3611147565b60016105c05260206105c0f35b505050505b50", + "nonce" : "0x00", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "0xd8d726b7177a800000", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "b03f030056db7d467d778326658bac0d1b35d8f7" : { + "balance" : "0x00", + "code" : "0x600061075f537c010000000000000000000000000000000000000000000000000000000060003504731e147037f0a63df228fe6e7aef730f1ea31c8ce3602052730ea65418d7bf32680f55572c943a94b59080499860405273e509e3a93beb1eba72f8cb8d25f93a85e2d54afb60605273c9ae5868651bf7b7db6e360217db49ce4e69c07e60805273142a6927cf0060133187ba8a8e74d641438f0c1c60a05273b163e767e4c1ba5ae88b2ee7594f3a3fec2bb09660c05273ba7b277319128ef4c22635534d0f61dffdaa13ab60e052739761fecf88590592cf05ce545504d376d1693ab36101005273f70bbc50f1468cecae0761ef09386a87c1c696ea6101205273a89d22f049aaa5bbfb5f1a1939fff3ae7a26ae746101405273174827f7e53e8ce13b047adcac0eb3f2cb0c3285610160526336a560bd811415610a88576004356101a052601c60445990590160009052016327138bfb601c8203526101a051600482015260206101e0602483600060a051602d5a03f1506101e05190501515610195576001600003610200526020610200f35b601c6044599059016000905201637a66d7ca601c8203526101a051600482015260206102206024836000608051602d5a03f150610220519050601c606459905901600090520163cc1c944e601c8203526101a05160048201528160248201526020610260604483600061028051602d5a03f150610260519050601c60445990590160009052016380b5e7bd601c8203526101a051600482015260206102a06024836000606051602d5a03f1506102a0519050808202601c60445990590160009052016318633576601c8203526101a051600482015260206103006024836000608051602d5a03f150610300519050600981141561036d57601c60c459905901600090520163ac44d71e601c8203526101a0516004820152856024820152846044820152836064820152826084820152602061036060a483600061016051602d5a03f15061036051905050601c6064599059016000905201637265802d601c8203526101a05160048201526000602482015260206103806044836000608051602d5a03f15061038051905050601c604459905901600090520163c5476efe601c8203526101a051600482015260206103a06024836000608051602d5a03f1506103a051905050600185016103c05260206103c0f3610a3a565b60008114156103cd57601c60c459905901600090520163ef72638a601c8203526101a051600482015285602482015284604482015283606482015282608482015260206103e060a483600060c051602d5a03f1506103e051905050610a39565b600181141561042d57601c60c459905901600090520163a63e976c601c8203526101a0516004820152856024820152846044820152836064820152826084820152602061040060a483600060e051602d5a03f15061040051905050610a38565b600281141561048d57601c60c459905901600090520163533ea0ed601c8203526101a0516004820152856024820152846044820152836064820152826084820152602061042060a483600060e051602d5a03f15061042051905050610a37565b600381141561085057601c606459905901600090520163e05dcb56601c8203526101a0516004820152856024820152600285016040816020020159905901600090528160200260400181604485600061028051602d5a03f15060408101905090509050601c6044599059016000905201633d905045601c8203526101a051600482015260206104806024836000608051602d5a03f150610480519050600481141561063357601c60c4599059016000905201630939aa8c601c8203526101a051600482015287602482015286604482015285606482015284608482015260206104e060a483600061010051602d5a03f1506104e05190506104c052601c606459905901600090520163c286273a601c8203526101a05160048201526000602482015260206105006044836000608051602d5a03f1506105005190505060016104c05114156105e55782610520526020610520f361062e565b601c604459905901600090520163aac2ffb5601c8203526101a051600482015260206105406024836000608051602d5a03f1506105405190505060018301610560526020610560f35b610804565b600081141561069457601c60c459905901600090520163546fdeb3601c8203526101a0516004820152876024820152866044820152856064820152846084820152602061058060a483600061010051602d5a03f15061058051905050610803565b6001811415610742576000601c60c459905901600090520163de9080c8601c8203526101a051600482015288602482015287604482015286606482015285608482015260206105a060a483600061010051602d5a03f1506105a0519050141561073257601c6044599059016000905201631cda01ef601c8203526101a051600482015260206105c06024836000608051602d5a03f1506105c0519050505b826105e05260206105e0f3610802565b60028114156107a357601c60c459905901600090520163384ca8dd601c8203526101a0516004820152876024820152866044820152856064820152846084820152602061060060a483600061010051602d5a03f15061060051905050610801565b600381141561080057601c60c459905901600090520163d5dc5af1601c8203526101a0516004820152876024820152866044820152856064820152846084820152602061062060a483600061010051602d5a03f150610620519050505b5b5b5b5b601c6044599059016000905201631cda01ef601c8203526101a051600482015260206106406024836000608051602d5a03f1506106405190505082610660526020610660f35050610a36565b60048114156108b157601c60c459905901600090520163f6559853601c8203526101a0516004820152856024820152846044820152836064820152826084820152602061068060a483600061012051602d5a03f15061068051905050610a35565b600581141561091257601c60c459905901600090520163d8e5473d601c8203526101a051600482015285602482015284604482015283606482015282608482015260206106a060a483600061012051602d5a03f1506106a051905050610a34565b600681141561097357601c60c459905901600090520163090507ea601c8203526101a051600482015285602482015284604482015283606482015282608482015260206106c060a483600061012051602d5a03f1506106c051905050610a33565b60078114156109d457601c60c4599059016000905201635b911842601c8203526101a051600482015285602482015284604482015283606482015282608482015260206106e060a483600061014051602d5a03f1506106e051905050610a32565b6008811415610a3157601c60c459905901600090520163abe22b84601c8203526101a0516004820152856024820152846044820152836064820152826084820152602061070060a483600061014051602d5a03f150610700519050505b5b5b5b5b5b5b5b5b5b601c604459905901600090520163aac2ffb5601c8203526101a051600482015260206107206024836000608051602d5a03f1506107205190505060018101610740526020610740f350505050505b50", + "nonce" : "0x00", + "storage" : { + } + }, + "c9ae5868651bf7b7db6e360217db49ce4e69c07e" : { + "balance" : "0x00", + "code" : "0x600061083f537c010000000000000000000000000000000000000000000000000000000060003504637a66d7ca8114156100665760043560405260606060599059016000905260008152604051816020015260008160400152809050205460605260206060f35b63c60409c68114156100a55760043560405260606060599059016000905260008152604051816020015260018160400152809050205460a052602060a0f35b63186335768114156100e45760043560405260606060599059016000905260008152604051816020015260028160400152809050205460e052602060e0f35b63b3903c8a8114156101bc57600435604052606060605990590160009052600081526040518160200152600581604001528090502054610120526101205180602002602001599059016000905281815260208101905090506101605260006101c0525b610120516101c051121561019f57608060805990590160009052600081526040518160200152600481604001526101c051816060015280905020546101c05160200261016051015260016101c051016101c052610147565b6101605160206040820352602060208203510260400160408203f3505b636824e0fb8114156101fd57600435604052606060605990590160009052600081526040518160200152600581604001528090502054610220526020610220f35b633db16be381141561023e57600435604052606060605990590160009052600081526040518160200152600681604001528090502054610260526020610260f35b63c33878588114156102e05760006102a0526000546102c0526102c05180602002602001599059016000905281815260208101905090506102e0525b6102c0516102a05112156102c357604060405990590160009052600181526102a051816020015280905020546102a0516020026102e051015260016102a051016102a05261027a565b6102e05160206040820352602060208203510260400160408203f3505b63175c63228114156102fa57600054610380526020610380f35b63d861f2b4811415610336576004356103a052604060405990590160009052600181526103a051816020015280905020546103c05260206103c0f35b63b0dab01f81141561044f57600435610400526024356104205260443561044052606435610460526000606060605990590160009052600081526104005181602001526001816040015280905020541415610441576104205160606060599059016000905260008152610400518160200152600081604001528090502055610440516060606059905901600090526000815261040051816020015260018160400152809050205561046051606060605990590160009052600081526104005181602001526006816040015280905020556104005160406040599059016000905260018152600054816020015280905020556001600054016000556001610520526020610520f361044e565b6000610540526020610540f35b5b63aac2ffb58114156104b95760043560405260016060606059905901600090526000815260405181602001526002816040015280905020540160606060599059016000905260008152604051816020015260028160400152809050205560016105a05260206105a0f35b637265802d811415610507576004356040526024356105c0526105c0516060606059905901600090526000815260405181602001526002816040015280905020556001610600526020610600f35b63c5476efe811415610571576004356040526001606060605990590160009052600081526040518160200152600081604001528090502054016060606059905901600090526000815260405181602001526000816040015280905020556001610660526020610660f35b63c551e31e81141561063b576004356040526024356106805260606060599059016000905260008152604051816020015260058160400152809050205461012052610680516080608059905901600090526000815260405181602001526004816040015261012051816060015280905020556001606060605990590160009052600081526040518160200152600581604001528090502054016060606059905901600090526000815260405181602001526005816040015280905020556001610720526020610720f35b633d90504581141561067c57600435604052606060605990590160009052600081526040518160200152600381604001528090502054610740526020610740f35b631cda01ef8114156106e65760043560405260016060606059905901600090526000815260405181602001526003816040015280905020540160606060599059016000905260008152604051816020015260038160400152809050205560016107c05260206107c0f35b63c286273a811415610734576004356040526024356107e0526107e0516060606059905901600090526000815260405181602001526003816040015280905020556001610820526020610820f35b50", + "nonce" : "0x00", + "storage" : { + "0x00" : "0x01", + "0x0a4470e9d0419df71f6257fcdfd2c0a3bad96a23f5ab414bc10aaf1a31a536a7" : "0xb4876148229c22bd2291f1a4f5468c8c789b23639370c4d447f270ba341dbbec", + "0x16ef4193a274568d283ff919c299729e07696d9ada48187b81d68e12e7b962de" : "0x0a103c04e7ecb9b3395f77c7b0cad28e62c85f042de4767ccc6c005e6f47f8d4", + "0x1f1866e966f321b84535705846689749d34d5dc02994613e2931973c605d9e93" : "0xc723d0aa4a60529fe42277c8094aa19263aff36650136efc5edfd0785d457634", + "0x252a4ec7133643fddcdb22a86c415f78b2dd251f18d1efcd6a44acf590c4ae72" : "0x9caf94b82715869e71d3cee986094ea612f0258570b7e5ef47b5d09e9515322b", + "0x41b451e8d86d28add758cbd3f48a18fd04b11a80288c1dc434a5bf2d8fb1ca64" : "0xb602498f12a8b4af3a1fca357cea6b19bcd163dfec1d845364ce1395f7c21fa7", + "0x491d10658c1ec762152d8ad2d890ad59111b1ee7b4bc25736046923d3534d9a5" : "0x629e", + "0x5b0e8552efd72a845e47318abbbef9dc9fcdfe0d1a06cda44494401301581511" : "0xfbc98f4017ae5c20459daadaa6bee519b6de871d3dbaa9ab3f34340fef4cb643", + "0x5b672a107ba6fab01cbddf079042e9f6176a8e6f154584fc4df4b15674c9456e" : "0x1603da41d610854d85536b37d000e5eb7ca09786c43f50e7441c0afbff1de0a9", + "0x605b934bd26c9ecdf7029a7dc062d3a6b87338511cff96e0c5f13de9eea3462e" : "0xf0d24f3d0eda573fc5d43e3d0680993c51293752cd6de205040d3197f412f475", + "0x618355e25491dfe86175f9d9b3147e4d680aa561d98384e3621dc6a3088b0846" : "0x6b2e6d2d5deb27dffec973f23af4caf111e66d1397f467dbbedf5ab2192fb6b6", + "0x65112936bec0f1e84fda6623fb54e12baadc8a4a208c8c4eb3ed5e79cbd7e85f" : "0xa59ac24e3e0663413d0f87516ba8fb44c6c3e14da8eaabbde80f8ee285f65934", + "0x687cb2122de7bacf42b9cd380b04ff2a2ce92a0b63706a9a78263b3ce86f3313" : "0x0200000000000000", + "0x72a539b064c98d29a514ee55694225e05fb41fe63e5fe710e4536bd9ba3591b4" : "0x338ecfe6c523ed1184918b19584d97dd1095ecaadc49c7ba9da62b8b513026e0", + "0x7aeb0a0ce8882a12d853078382a2bc72f7a94af6109f167de37b36c0a7deb828" : "0x4c428400ea8a7bd7c46ba9895b508770efa4551f0d793e1beb1207da01d9962f", + "0x7c8f4a98e086f64e28c75f54712b5d44bec3c29b5c70519e8880d3046a5618dc" : "0xaafc1f2601752b114d722070f75539bfec7faf49f0d48a48d27862f0c3b09903", + "0x809c325f50acf5787776e960985e72443b4330ad1e2f466557fffee16ba51d44" : "0xb940a56e64b5b661d87919b8ef03640ec077a6d72dd0b524adedaa7ddc91ff7a", + "0x84e4a80d33c5d2abd2b0a5aec0fdc5eaeed90ab31db556e404a81718ea286e39" : "0x1c", + "0x877305412fa2486f563c457b744e5c8b1e4d0eca73371de5e771f2abc263f4dc" : "0x7088a36f67276d475aa62127cfde9790cc802fdf3a54df49461a25eb8bf15707", + "0x922a8f2fc1cbe67c8acc6a8a720983c366d71d3e2e78e3048949ebc913ea611a" : "0x50fb9f913ca102534bb0a8eb8ebf19c68dfd16ffe5e207bcc580084cd4ecd8b4", + "0x987cb9ecfd8ce499d9d0e9e6b7da29617aa02774a34f4a8ea54442f44a1e1936" : "0x5179f98f555f1e9f1d4a335d16f41154579a53e361e9859269b6fa74ea9c7d21", + "0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d" : "0x0f69b5", + "0xb16b117660f31197087f4d6fe50d3d4579152244956f753f9653ccf85f4b35c4" : "0x830272e3bb35226b047244cbdc46f1b6b864a280461e7a592f70e0863f4f1d33", + "0xb1f1aaedfb83c7755a2bffc9e2557f1723f9abe5642397963e76248c9209af57" : "0xe9be955c5fbfcd846d7425eaea05ce897786aefad99665342cbf30761b352526", + "0xb7bd50fdf7b043411c9ac33f0af2cebc69c393eb0b91f4976946f9c7b15ad0da" : "0xfccca0e7832bae9afe799a6d6177dc3869fa6c5b5105f8df6f365de5723820ec", + "0xbc96058eb03504ee6f5c0a9582f8720d99a6e9738b171499507facff0b2c0b5b" : "0x9db6a4f2766b51013b8d2f9038131d1bb4af725d019d111d7e26ff96c023b23f", + "0xc186c4f377b7f13892ade9656acd1522aa1f8ac151ac4f62457b5073241d79fc" : "0x7289738fef00f1770eeb098db9bd486c01ac12398d79cdf935514a128c585c51", + "0xcae57ae3017972d63effd8eae44f5054402c3e890d154b905ed6b5b533327fa9" : "0xd2e4bf465e61993d13089b940a7c55017a5117d8e43e4115550a139e1d4b3e3a", + "0xcf569ee7bf3accc0f893dffd04f1a757f373efe80893eff504fb3678f688ec1d" : "0x03", + "0xd69b7284545a9f5275df64ce94848dc954fcb8a8b525e7ac801517c12a75af84" : "0x4202995350abae303b43e564aa79121a30b5f1aea31f69cd25e07dd3fa64dce7", + "0xd8f6f90f51e657690ee28d1cc80d81bc1b89290065891fdd853d09caaaf756aa" : "0x01", + "0xde72f8eed43cc2a5a3eaa51483d14b17dc92bb26c154ae184cee4b4895011edc" : "0x47ce2b6fdb72c3fabb9c74f82c1e3e522bcd42e614fd85c208ac3c4c840cea72", + "0xe0e687ddf317f3d2b209ae3884148eff0f636e16827f82eded14ada8fc603009" : "0xfa7c8939f9b033162cf8d75ea69671bb8a27041bd4cdc76594e61e99333cb041", + "0xe8cda339d72a1a350b62f1e3fa52e254c395cc9fdd9f60adb21c7633fbdab531" : "0x128c4fdf4801a30eae99dd58f0f3ff5ca65f71b66a9ac0f38dd450fb24b4aaaa", + "0xec5e7f54fa5e516e616b04f9d5a0ee433a80e09ed47d7e5269afd76c05ff251e" : "0x14", + "0xf9a3bf5f2ccb903ee1a7644113b794db0260de404fb8f11203e75a7fff151618" : "0xbd94773c0d85c68240ae8dfd53d9d33cd137509bfc5d3433381299df768c8377" + } + }, + "e509e3a93beb1eba72f8cb8d25f93a85e2d54afb" : { + "balance" : "0x00", + "code" : "0x6000610b7f537c01000000000000000000000000000000000000000000000000000000006000350473c9ae5868651bf7b7db6e360217db49ce4e69c07e6020526308d3d58781141561024557600435606052606060605990590160009052600081526060518160200152600181604001528090502054608052600060806080599059016000905260008152606051816020015260028160400152328160600152809050205414151561014e57608060805990590160009052600081526060518160200152600281604001523281606001528090502054608052682f000000000000000060a060a059905901600090526000815260605181602001526000816040015260805181606001526000816080015280905020553260a060a05990590160009052600081526060518160200152600081604001526080518160600152600181608001528090502055610238565b608051608060805990590160009052600081526060518160200152600281604001523281606001528090502055682f000000000000000060a060a059905901600090526000815260605181602001526000816040015260805181606001526000816080015280905020553260a060a059905901600090526000815260605181602001526000816040015260805181606001526001816080015280905020556001606060605990590160009052600081526060518160200152600181604001528090502054016060606059905901600090526000815260605181602001526001816040015280905020555b60016101e05260206101e0f35b6328c8b31581141561029d576004356060526024356102005260a060a0599059016000905260008152606051816020015260008160400152610200518160600152600081608001528090502054610220526020610220f35b6374af23ec8114156103865760043560605260243561026052608060805990590160009052600081526060518160200152600281604001526102605181606001528090502054610200526000610200511415610332576102605160a060a05990590160009052600081526060518160200152600081604001526102005181606001526001816080015280905020541415610335565b60005b156103475760006102c05260206102c0f35b60a060a05990590160009052600081526060518160200152600081604001526102005181606001526000816080015280905020546102e05260206102e0f35b6384d646ee8114156103dc5760043560605260243560805260a060a05990590160009052600081526060518160200152600081604001526080518160600152600181608001528090502054610320526020610320f35b63f42294278114156106f45760043561026052601c602459905901600090520163175c6322601c82035260206103a06004836000602051602d5a03f1506103a0519050610360526102605115610581576103605160020280602002602001599059016000905281815260208101905090506103c05261036051806020026020015990590160009052818152602081019050905061042052601c602459905901600090520163c3387858601c8203526103605160408160200201599059016000905281602002604001816004856000602051602d5a03f150604081019050905090506104205260006104c05260006104e0525b610360516104c051121561057c576104c051602002610420510151606052601c60645990590160009052016374af23ec601c82035260605160048201526102605160248201526020610520604483600030602d5a03f1506105205190506105005260006105005114151561056c576060516104e0516020026103c05101526105005160016104e051016020026103c051015260026104e051016104e0525b60016104c051016104c0526104ce565b6106d7565b32610260526103605160020280602002602001599059016000905281815260208101905090506103c05261036051806020026020015990590160009052818152602081019050905061042052601c602459905901600090520163c3387858601c8203526103605160408160200201599059016000905281602002604001816004856000602051602d5a03f150604081019050905090506104205260006104c05260006104e0525b610360516104c05112156106d6576104c051602002610420510151606052601c60645990590160009052016374af23ec601c820352606051600482015261026051602482015260206105c0604483600030602d5a03f1506105c0519050610500526000610500511415156106c6576060516104e0516020026103c05101526105005160016104e051016020026103c051015260026104e051016104e0525b60016104c051016104c052610628565b5b6103c05160206040820352602060208203510260400160408203f3505b6380b5e7bd81141561073557600435606052606060605990590160009052600081526060518160200152600181604001528090502054610600526020610600f35b63156f1c328114156107865760043560605260243561064052608060805990590160009052600081526060518160200152600281604001526106405181606001528090502054610660526020610660f35b63b3a24fc081141561087857365990590160009052366004823760043560208201016106c0526024356106e05250600260206106c0510351018060200260200159905901600090528181526020810190509050610700523261070051526106e051602061070051015260026104c0525b600260206106c0510351016104c05112156108385760026104c051036020026106c05101516104c05160200261070051015260016104c051016104c0526107f6565b60206107005103516020026020599059016000905260208183610700516000600287604801f15080519050905061076052610760516107c05260206107c0f35b63e346f5fc811415610a1c576004356107e0526024356108005260006104c0525b606060605990590160009052600081526107e05181602001526001816040015280905020546104c05112156109e65760a060a05990590160009052600081526107e0518160200152600081604001526104c0518160600152600181608001528090502054610840526108405160a060a0599059016000905260008152610800518160200152600081604001526104c051816060015260018160800152809050205560a060a05990590160009052600081526107e0518160200152600081604001526104c051816060015260008160800152809050205460a060a0599059016000905260008152610800518160200152600081604001526104c05181606001526000816080015280905020556104c0516080608059905901600090526000815261080051816020015260028160400152610840518160600152809050205560016104c051016104c052610899565b6104c051606060605990590160009052600081526108005181602001526001816040015280905020556001610920526020610920f35b633fb57036811415610b5457600435606052602435610940526060606059905901600090526000815260605181602001526001816040015280905020546109605261096051608060805990590160009052600081526060518160200152600281604001526109405181606001528090502055600060a060a05990590160009052600081526060518160200152600081604001526109605181606001526000816080015280905020556109405160a060a05990590160009052600081526060518160200152600081604001526109605181606001526001816080015280905020556001606060605990590160009052600081526060518160200152600181604001528090502054016060606059905901600090526000815260605181602001526001816040015280905020556001610a40526020610a40f35b6312709a33811415610beb57600435606052602435608052604435610a6052610a605160a060a059905901600090526000815260605181602001526000816040015260805181606001526000816080015280905020540160a060a059905901600090526000815260605181602001526000816040015260805181606001526000816080015280905020556001610ac0526020610ac0f35b633229cf6e811415610c8257600435606052602435608052604435610a6052610a605160a060a059905901600090526000815260605181602001526000816040015260805181606001526000816080015280905020540360a060a059905901600090526000815260605181602001526000816040015260805181606001526000816080015280905020556001610b20526020610b20f35b63a75f5c6a811415610ce557600435606052602435608052604435610a6052610a605160a060a059905901600090526000815260605181602001526000816040015260805181606001526000816080015280905020556001610b60526020610b60f35b50", + "nonce" : "0x00", + "storage" : { + "0x0f299dbbe3a7a5d949fe794e9a47b3106699c8110ff986eb84921c183e69e7f0" : "0x2f0000000000000000", + "0x1edcd36f61cae5dc6414157dfbadf9f11ca013ac763e27f8af55feaa8a239c89" : "0x01", + "0x689082d076ec3c02cbe4b99f6d9833e3c4a161072fd42fb7649eee5189a67ccc" : "0x63524e3fe4791aefce1e932bbfb3fdf375bfad89", + "0xaf1d6676be3ab502a59d91f6f5c49baffc15b2cfc65a41c4d96857c0f535adba" : "0x01d60000000000000000", + "0xdf1a770f69d93d1719292f384fdb4da22c0e88aef2ba462bff16674bc7848730" : "0x1c11aa45c792e202e9ffdc2f12f99d0d209bef70", + "0xec5e7f54fa5e516e616b04f9d5a0ee433a80e09ed47d7e5269afd76c05ff251e" : "0x02" + } + }, + "f1562e1c0d0baa3ea746442bb7f11153fcf5cfda" : { + "balance" : "0x00", + "code" : "0x600061067f537c010000000000000000000000000000000000000000000000000000000060003504632f300bee8114156100ac576004356040526024356060526044356080526002608051018080602002602001599059016000905281815260208101905090506801000000000000000081526060516080516020028201526001604051036001608051016020028201528060206040820352602060208203510260400160408203f35050505b63a647a5b98114156102c85736599059016000905236600482376004356020820101610100526024356020820101610160526044356020820101610180526064356101a05260843560805250602061010051035180806020026020015990590160009052818152602081019050905060005b6101a0518112156101d557600060005b608051811215610162578060200261010051015181608051850201602002610160510151028201915060018101905061012e565b50680100000000000000008105905060005b6080518112156101c857700100000000000000000000000000000000836020026101805101518260805186020160200261016051015184020205816020028501510381602002850152600181019050610174565b505060018101905061011e565b50600060005b60805181121561020357806020028301518160200284015102820191506001810190506101db565b5068010000000000000000810590506002810560005b600b81121561024257600282680100000000000000008502058301059150600181019050610219565b5060005b60805181121561027657816801000000000000000082602002860151020581602002850152600181019050610246565b5050506001608051602002610100510151036080516020028201526001608051016020026101005101516001608051016020028201528060206040820352602060208203510260400160408203f35050505b635b18022981141561037957365990590160009052366004823760043560208201016103005260243560208201016103205260443560805250600060005b60805181121561033f57680100000000000000008160200261032051015182602002610300510151020582019150600181019050610306565b6000610320515114151561036657610320515168010000000000000000830205915061036b565b600091505b81610380526020610380f350505b63f4ca7dc481141561057157365990590160009052366004823760043560208201016103a05260243560208201016103c0526044356101a0526064356080525060206103c051035160026080510a806020026020015990590160009052818152602081019050905060005b60805181121561044d5760005b6080518112156104415768010000000000000000816020026103a0510151836020026103a051015102058160805184020160200284015101816080518402016020028401526001810190506103f1565b506001810190506103e4565b81905090508180602002602001599059016000905281815260208101905090506080516101a05102806020026020015990590160009052818152602081019050905060005b6101a05181121561051e5760005b6080518112156105125760005b608051811215610506576801000000000000000082608051830201602002870151826080518602016020026103c051015102058260805185020160200285015101826080518502016020028501526001810190506104ad565b506001810190506104a0565b50600181019050610492565b819050905060005b848112156105525780602002820151816020026103c05101510381602002840152600181019050610526565b508160206040820352602060208203510260400160408203f350505050505b63232b273481141561069d57365990590160009052366004823760043560208201016106205260243560208201016102805260443560208201016103c052606435610640526084356101a05260a435608052506000610280515112156106025760005b6080518112156106005780602002610280510151600003816020026102805101526001810190506105d4565b505b60005b6101a05181121561067f5760005b60805181121561067357680100000000000000006801000000000000000082602002610280510151610640510205826080518502016020026103c05101510205826020026106205101510182602002610620510152600181019050610613565b50600181019050610605565b6106205160206040820352602060208203510260400160408203f350505b50", + "nonce" : "0x00", + "storage" : { + } + } + }, + "transaction" : { + "data" : "0x36a560bd00000000000000000000000000000000000000000000000000000000000f69b5", + "gasLimit" : "0x2dc6c0", + "gasPrice" : "0x09184e72a000", + "nonce" : "0x00", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "b03f030056db7d467d778326658bac0d1b35d8f7", + "value" : "0x00" + } + }, "gasPrice0" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", diff --git a/tests/files/TransactionTests/ttWrongRLPTransaction.json b/tests/files/TransactionTests/ttWrongRLPTransaction.json index 23f85bd2b4..02c4059065 100644 --- a/tests/files/TransactionTests/ttWrongRLPTransaction.json +++ b/tests/files/TransactionTests/ttWrongRLPTransaction.json @@ -3,6 +3,14 @@ "rlp" : "0xb8" }, + "aCrashingRLP" : { + "rlp" : "0x96dc24d6874a9b01e4a7b7e5b74db504db3731f764293769caef100f551efadf7d378a015faca6ae62ae30a9bf5e3c6aa94f58597edc381d0ec167fa0c84635e12a2d13ab965866ebf7c7aae458afedef1c17e08eb641135f592774e18401e0104f8e7f8e0d98e3230332e3133322e39342e31333784787beded84556c094cf8528c39342e3133372e342e31333982765fb840621168019b7491921722649cd1aa9608f23f8857d782e7495fb6765b821002c4aac6ba5da28a5c91b432e5fcc078931f802ffb5a3ababa42adee7a0c927ff49ef8528c3136322e3234332e34362e39829dd4b840e437a4836b77ad9d9ffe73ee782ef2614e6d8370fcf62191a6e488276e23717147073a7ce0b444d485fff5a0c34c4577251a7a990cf80d8542e21b95aa8c5e6cdd8e3230332e3133322e39342e31333788ffffffffa5aadb3a84556c095384556c0919" + }, + + "RLPHeaderSizeOverflowInt32" : { + "rlp" : "0xff0f0000000000005f030182520894b94f5374fce5edbc8e2a8697c15331677e6ebf0b0a801ca098ff921201554726367d2be8c804a7ff89ccf285ebc57dff8ae4c44b9c19ac4aa08887321be575c8095f789dd4c743dfe42c1820f9231f98a962b210e3ac2452a3" + }, + "RLPListLengthWithFirstZeros" : { "rlp" : "0xf9005f030182520894b94f5374fce5edbc8e2a8697c15331677e6ebf0b0a801ca098ff921201554726367d2be8c804a7ff89ccf285ebc57dff8ae4c44b9c19ac4aa08887321be575c8095f789dd4c743dfe42c1820f9231f98a962b210e3ac2452a3" }, diff --git a/tests/init.go b/tests/init.go index 9fe98a0d10..dd8df930f9 100644 --- a/tests/init.go +++ b/tests/init.go @@ -12,12 +12,31 @@ import ( var ( baseDir = filepath.Join(".", "files") - blockTestDir = filepath.Join(baseDir, "BlockTests") + blockTestDir = filepath.Join(baseDir, "BlockchainTests") stateTestDir = filepath.Join(baseDir, "StateTests") transactionTestDir = filepath.Join(baseDir, "TransactionTests") vmTestDir = filepath.Join(baseDir, "VMTests") - BlockSkipTests = []string{"SimpleTx3"} + BlockSkipTests = []string{ + "SimpleTx3", + + // these panic in block_processor.go:84 , see https://github.com/ethereum/go-ethereum/issues/1384 + "TRANSCT_rvalue_TooShort", + "TRANSCT_rvalue_TooLarge", + "TRANSCT_svalue_TooLarge", + + // TODO: check why these fail + "BLOCK__RandomByteAtTheEnd", + "TRANSCT__RandomByteAtTheEnd", + "BLOCK__ZeroByteAtTheEnd", + "TRANSCT__ZeroByteAtTheEnd", + + // TODO: why does this fail? should be check in ethash now + "DifficultyIsZero", + + // TODO: why does this fail? + "wrongMixHash", + } TransSkipTests = []string{"TransactionWithHihghNonce256"} StateSkipTests = []string{"mload32bitBound_return", "mload32bitBound_return2"} VmSkipTests = []string{} From f857fb7600f586ad9bfd037091420f77137c973f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= <peterke@gmail.com> Date: Fri, 3 Jul 2015 12:53:11 +0300 Subject: [PATCH 149/156] eth/downloader: fix a rare test race on the OSX CI --- eth/downloader/downloader_test.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/eth/downloader/downloader_test.go b/eth/downloader/downloader_test.go index c5fb00289b..23549a9ba2 100644 --- a/eth/downloader/downloader_test.go +++ b/eth/downloader/downloader_test.go @@ -83,7 +83,13 @@ func newTester() *downloadTester { // sync starts synchronizing with a remote peer, blocking until it completes. func (dl *downloadTester) sync(id string) error { err := dl.downloader.synchronise(id, dl.peerHashes[id][0]) - for atomic.LoadInt32(&dl.downloader.processing) == 1 { + for { + // If the queue is empty and processing stopped, break + hashes, blocks := dl.downloader.queue.Size() + if hashes+blocks == 0 && atomic.LoadInt32(&dl.downloader.processing) == 0 { + break + } + // Otherwise sleep a bit and retry time.Sleep(time.Millisecond) } return err From f0e94b4d714c45f7b03c66e01c643f4bd07033e3 Mon Sep 17 00:00:00 2001 From: Bas van Kervel <bas@ethdev.com> Date: Fri, 3 Jul 2015 12:22:20 +0200 Subject: [PATCH 150/156] display rpc error in console --- rpc/codec/json.go | 10 +++++----- rpc/jeth.go | 18 ++++++++++-------- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/rpc/codec/json.go b/rpc/codec/json.go index b5ef943809..a4953a59c2 100644 --- a/rpc/codec/json.go +++ b/rpc/codec/json.go @@ -156,15 +156,15 @@ func (self *JsonCodec) ReadResponse() (interface{}, error) { } bytesInBuffer += n + var failure shared.ErrorResponse + if err = json.Unmarshal(buf[:bytesInBuffer], &failure); err == nil && failure.Error != nil { + return failure, fmt.Errorf(failure.Error.Message) + } + var success shared.SuccessResponse if err = json.Unmarshal(buf[:bytesInBuffer], &success); err == nil { return success, nil } - - var failure shared.ErrorResponse - if err = json.Unmarshal(buf[:bytesInBuffer], &failure); err == nil && failure.Error != nil { - return failure, nil - } } self.c.Close() diff --git a/rpc/jeth.go b/rpc/jeth.go index 33fcd6efd6..78e44c4da3 100644 --- a/rpc/jeth.go +++ b/rpc/jeth.go @@ -3,6 +3,8 @@ package rpc import ( "encoding/json" + "fmt" + "github.com/ethereum/go-ethereum/jsre" "github.com/ethereum/go-ethereum/rpc/comms" "github.com/ethereum/go-ethereum/rpc/shared" @@ -20,14 +22,13 @@ func NewJeth(ethApi shared.EthereumApi, re *jsre.JSRE, client comms.EthereumClie } func (self *Jeth) err(call otto.FunctionCall, code int, msg string, id interface{}) (response otto.Value) { - rpcerr := &shared.ErrorObject{code, msg} - call.Otto.Set("ret_jsonrpc", shared.JsonRpcVersion) - call.Otto.Set("ret_id", id) - call.Otto.Set("ret_error", rpcerr) - response, _ = call.Otto.Run(` - ret_response = { jsonrpc: ret_jsonrpc, id: ret_id, error: ret_error }; - `) - return + errObj := fmt.Sprintf("{\"message\": \"%s\", \"code\": %d}", msg, code) + retResponse := fmt.Sprintf("ret_response = JSON.parse('{\"jsonrpc\": \"%s\", \"id\": %v, \"error\": %s}');", shared.JsonRpcVersion, id, errObj) + + call.Otto.Run("ret_error = " + errObj) + res, _ := call.Otto.Run(retResponse) + + return res } func (self *Jeth) Send(call otto.FunctionCall) (response otto.Value) { @@ -56,6 +57,7 @@ func (self *Jeth) Send(call otto.FunctionCall) (response otto.Value) { return self.err(call, -32603, err.Error(), req.Id) } respif, err = self.client.Recv() + if err != nil { return self.err(call, -32603, err.Error(), req.Id) } From 29e2fb38f8e80dfa077d139d8ff563169c644d74 Mon Sep 17 00:00:00 2001 From: Jeffrey Wilcke <geffobscura@gmail.com> Date: Fri, 3 Jul 2015 11:24:42 +0200 Subject: [PATCH 151/156] core, miner: miner header validation, transaction & receipt writing * Miners do now verify their own header, not their state. * Changed old putTx and putReceipts to be exported * Moved writing of transactions and receipts out of the block processer in to the chain manager. Closes #1386 * Miner post ChainHeadEvent & ChainEvent. Closes #1388 --- cmd/utils/flags.go | 2 +- core/bench_test.go | 2 +- core/block_processor.go | 64 +++++------------------------------- core/block_processor_test.go | 4 +-- core/chain_makers.go | 2 +- core/chain_makers_test.go | 2 +- core/chain_manager.go | 33 +++++++++++-------- core/chain_manager_test.go | 12 +++---- core/manager.go | 1 + core/transaction_util.go | 51 ++++++++++++++++++++++++++++ core/types/common.go | 2 +- eth/backend.go | 2 +- eth/protocol_test.go | 2 +- miner/worker.go | 35 +++++++++++++++++--- xeth/xeth.go | 1 + 15 files changed, 126 insertions(+), 89 deletions(-) create mode 100644 core/transaction_util.go diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index 6f319eb407..f27f1bbcd6 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -412,7 +412,7 @@ func MakeChain(ctx *cli.Context) (chain *core.ChainManager, blockDB, stateDB, ex eventMux := new(event.TypeMux) pow := ethash.New() genesis := core.GenesisBlock(uint64(ctx.GlobalInt(GenesisNonceFlag.Name)), blockDB) - chain, err = core.NewChainManager(genesis, blockDB, stateDB, pow, eventMux) + chain, err = core.NewChainManager(genesis, blockDB, stateDB, extraDB, pow, eventMux) if err != nil { Fatalf("Could not start chainmanager: %v", err) } diff --git a/core/bench_test.go b/core/bench_test.go index 6d851febd3..8cd8c42993 100644 --- a/core/bench_test.go +++ b/core/bench_test.go @@ -152,7 +152,7 @@ func benchInsertChain(b *testing.B, disk bool, gen func(int, *BlockGen)) { // Time the insertion of the new chain. // State and blocks are stored in the same DB. evmux := new(event.TypeMux) - chainman, _ := NewChainManager(genesis, db, db, FakePow{}, evmux) + chainman, _ := NewChainManager(genesis, db, db, db, FakePow{}, evmux) chainman.SetProcessor(NewBlockProcessor(db, db, FakePow{}, chainman, evmux)) defer chainman.Stop() b.ReportAllocs() diff --git a/core/block_processor.go b/core/block_processor.go index 9b77d10ebe..7171e3b2e7 100644 --- a/core/block_processor.go +++ b/core/block_processor.go @@ -151,7 +151,7 @@ func (sm *BlockProcessor) RetryProcess(block *types.Block) (logs state.Logs, err errch := make(chan bool) go func() { errch <- sm.Pow.Verify(block) }() - logs, err = sm.processWithParent(block, parent) + logs, _, err = sm.processWithParent(block, parent) if !<-errch { return nil, ValidationError("Block's nonce is invalid (= %x)", block.Nonce) } @@ -162,23 +162,23 @@ func (sm *BlockProcessor) RetryProcess(block *types.Block) (logs state.Logs, err // Process block will attempt to process the given block's transactions and applies them // on top of the block's parent state (given it exists) and will return wether it was // successful or not. -func (sm *BlockProcessor) Process(block *types.Block) (logs state.Logs, err error) { +func (sm *BlockProcessor) Process(block *types.Block) (logs state.Logs, receipts types.Receipts, err error) { // Processing a blocks may never happen simultaneously sm.mutex.Lock() defer sm.mutex.Unlock() if sm.bc.HasBlock(block.Hash()) { - return nil, &KnownBlockError{block.Number(), block.Hash()} + return nil, nil, &KnownBlockError{block.Number(), block.Hash()} } if !sm.bc.HasBlock(block.ParentHash()) { - return nil, ParentError(block.ParentHash()) + return nil, nil, ParentError(block.ParentHash()) } parent := sm.bc.GetBlock(block.ParentHash()) return sm.processWithParent(block, parent) } -func (sm *BlockProcessor) processWithParent(block, parent *types.Block) (logs state.Logs, err error) { +func (sm *BlockProcessor) processWithParent(block, parent *types.Block) (logs state.Logs, receipts types.Receipts, err error) { // Create a new state based on the parent's root (e.g., create copy) state := state.New(parent.Root(), sm.db) header := block.Header() @@ -192,10 +192,10 @@ func (sm *BlockProcessor) processWithParent(block, parent *types.Block) (logs st // There can be at most two uncles if len(uncles) > 2 { - return nil, ValidationError("Block can only contain maximum 2 uncles (contained %v)", len(uncles)) + return nil, nil, ValidationError("Block can only contain maximum 2 uncles (contained %v)", len(uncles)) } - receipts, err := sm.TransitionState(state, parent, block, false) + receipts, err = sm.TransitionState(state, parent, block, false) if err != nil { return } @@ -248,15 +248,7 @@ func (sm *BlockProcessor) processWithParent(block, parent *types.Block) (logs st // Sync the current block's state to the database state.Sync() - // This puts transactions in a extra db for rpc - for i, tx := range block.Transactions() { - putTx(sm.extraDb, tx, block, uint64(i)) - } - - // store the receipts - putReceipts(sm.extraDb, block.Hash(), receipts) - - return state.Logs(), nil + return state.Logs(), receipts, nil } var ( @@ -411,43 +403,3 @@ func getBlockReceipts(db common.Database, bhash common.Hash) (receipts types.Rec } return } - -func putTx(db common.Database, tx *types.Transaction, block *types.Block, i uint64) { - rlpEnc, err := rlp.EncodeToBytes(tx) - if err != nil { - glog.V(logger.Debug).Infoln("Failed encoding tx", err) - return - } - db.Put(tx.Hash().Bytes(), rlpEnc) - - var txExtra struct { - BlockHash common.Hash - BlockIndex uint64 - Index uint64 - } - txExtra.BlockHash = block.Hash() - txExtra.BlockIndex = block.NumberU64() - txExtra.Index = i - rlpMeta, err := rlp.EncodeToBytes(txExtra) - if err != nil { - glog.V(logger.Debug).Infoln("Failed encoding tx meta data", err) - return - } - db.Put(append(tx.Hash().Bytes(), 0x0001), rlpMeta) -} - -func putReceipts(db common.Database, hash common.Hash, receipts types.Receipts) error { - storageReceipts := make([]*types.ReceiptForStorage, len(receipts)) - for i, receipt := range receipts { - storageReceipts[i] = (*types.ReceiptForStorage)(receipt) - } - - bytes, err := rlp.EncodeToBytes(storageReceipts) - if err != nil { - return err - } - - db.Put(append(receiptsPre, hash[:]...), bytes) - - return nil -} diff --git a/core/block_processor_test.go b/core/block_processor_test.go index dc328a3ea7..99681dabf2 100644 --- a/core/block_processor_test.go +++ b/core/block_processor_test.go @@ -18,7 +18,7 @@ func proc() (*BlockProcessor, *ChainManager) { var mux event.TypeMux genesis := GenesisBlock(0, db) - chainMan, err := NewChainManager(genesis, db, db, thePow(), &mux) + chainMan, err := NewChainManager(genesis, db, db, db, thePow(), &mux) if err != nil { fmt.Println(err) } @@ -64,7 +64,7 @@ func TestPutReceipt(t *testing.T) { Index: 0, }}) - putReceipts(db, hash, types.Receipts{receipt}) + PutReceipts(db, hash, types.Receipts{receipt}) receipts, err := getBlockReceipts(db, hash) if err != nil { t.Error("got err:", err) diff --git a/core/chain_makers.go b/core/chain_makers.go index 013251d749..37475e0ae5 100644 --- a/core/chain_makers.go +++ b/core/chain_makers.go @@ -167,7 +167,7 @@ func makeHeader(parent *types.Block, state *state.StateDB) *types.Header { // InsertChain on the result of makeChain. func newCanonical(n int, db common.Database) (*BlockProcessor, error) { evmux := &event.TypeMux{} - chainman, _ := NewChainManager(GenesisBlock(0, db), db, db, FakePow{}, evmux) + chainman, _ := NewChainManager(GenesisBlock(0, db), db, db, db, FakePow{}, evmux) bman := NewBlockProcessor(db, db, FakePow{}, chainman, evmux) bman.bc.SetProcessor(bman) parent := bman.bc.CurrentBlock() diff --git a/core/chain_makers_test.go b/core/chain_makers_test.go index d5125e1c34..f4eeef082a 100644 --- a/core/chain_makers_test.go +++ b/core/chain_makers_test.go @@ -58,7 +58,7 @@ func ExampleGenerateChain() { // Import the chain. This runs all block validation rules. evmux := &event.TypeMux{} - chainman, _ := NewChainManager(genesis, db, db, FakePow{}, evmux) + chainman, _ := NewChainManager(genesis, db, db, db, FakePow{}, evmux) chainman.SetProcessor(NewBlockProcessor(db, db, FakePow{}, chainman, evmux)) if i, err := chainman.InsertChain(chain); err != nil { fmt.Printf("insert error (block %d): %v\n", i, err) diff --git a/core/chain_manager.go b/core/chain_manager.go index 70a8b11c67..b5381e336e 100644 --- a/core/chain_manager.go +++ b/core/chain_manager.go @@ -42,6 +42,7 @@ type ChainManager struct { //eth EthManager blockDb common.Database stateDb common.Database + extraDb common.Database processor types.BlockProcessor eventMux *event.TypeMux genesisBlock *types.Block @@ -70,11 +71,12 @@ type ChainManager struct { pow pow.PoW } -func NewChainManager(genesis *types.Block, blockDb, stateDb common.Database, pow pow.PoW, mux *event.TypeMux) (*ChainManager, error) { +func NewChainManager(genesis *types.Block, blockDb, stateDb, extraDb common.Database, pow pow.PoW, mux *event.TypeMux) (*ChainManager, error) { cache, _ := lru.New(blockCacheLimit) bc := &ChainManager{ blockDb: blockDb, stateDb: stateDb, + extraDb: extraDb, genesisBlock: GenesisBlock(42, stateDb), eventMux: mux, quit: make(chan struct{}), @@ -477,10 +479,10 @@ func (self *ChainManager) procFutureBlocks() { type writeStatus byte const ( - nonStatTy writeStatus = iota - canonStatTy - splitStatTy - sideStatTy + NonStatTy writeStatus = iota + CanonStatTy + SplitStatTy + SideStatTy ) // WriteBlock writes the block to the chain (or pending queue) @@ -497,10 +499,10 @@ func (self *ChainManager) WriteBlock(block *types.Block, queued bool) (status wr // during split we merge two different chains and create the new canonical chain err := self.merge(cblock, block) if err != nil { - return nonStatTy, err + return NonStatTy, err } - status = splitStatTy + status = SplitStatTy } self.mu.Lock() @@ -511,9 +513,9 @@ func (self *ChainManager) WriteBlock(block *types.Block, queued bool) (status wr self.setTransState(state.New(block.Root(), self.stateDb)) self.txState.SetState(state.New(block.Root(), self.stateDb)) - status = canonStatTy + status = CanonStatTy } else { - status = sideStatTy + status = SideStatTy } self.write(block) @@ -581,7 +583,7 @@ func (self *ChainManager) InsertChain(chain types.Blocks) (int, error) { // Call in to the block processor and check for errors. It's likely that if one block fails // all others will fail too (unless a known block is returned). - logs, err := self.processor.Process(block) + logs, receipts, err := self.processor.Process(block) if err != nil { if IsKnownBlockErr(err) { stats.ignored++ @@ -620,19 +622,24 @@ func (self *ChainManager) InsertChain(chain types.Blocks) (int, error) { return i, err } switch status { - case canonStatTy: + case CanonStatTy: if glog.V(logger.Debug) { glog.Infof("[%v] inserted block #%d (%d TXs %d UNCs) (%x...). Took %v\n", time.Now().UnixNano(), block.Number(), len(block.Transactions()), len(block.Uncles()), block.Hash().Bytes()[0:4], time.Since(bstart)) } queue[i] = ChainEvent{block, block.Hash(), logs} queueEvent.canonicalCount++ - case sideStatTy: + + // This puts transactions in a extra db for rpc + PutTransactions(self.extraDb, block, block.Transactions()) + // store the receipts + PutReceipts(self.extraDb, block.Hash(), receipts) + case SideStatTy: if glog.V(logger.Detail) { glog.Infof("inserted forked block #%d (TD=%v) (%d TXs %d UNCs) (%x...). Took %v\n", block.Number(), block.Difficulty(), len(block.Transactions()), len(block.Uncles()), block.Hash().Bytes()[0:4], time.Since(bstart)) } queue[i] = ChainSideEvent{block, logs} queueEvent.sideCount++ - case splitStatTy: + case SplitStatTy: queue[i] = ChainSplitEvent{block, logs} queueEvent.splitCount++ } diff --git a/core/chain_manager_test.go b/core/chain_manager_test.go index 6869bc746d..c013fc7292 100644 --- a/core/chain_manager_test.go +++ b/core/chain_manager_test.go @@ -33,7 +33,7 @@ func thePow() pow.PoW { func theChainManager(db common.Database, t *testing.T) *ChainManager { var eventMux event.TypeMux genesis := GenesisBlock(0, db) - chainMan, err := NewChainManager(genesis, db, db, thePow(), &eventMux) + chainMan, err := NewChainManager(genesis, db, db, db, thePow(), &eventMux) if err != nil { t.Error("failed creating chainmanager:", err) t.FailNow() @@ -96,7 +96,7 @@ func printChain(bc *ChainManager) { func testChain(chainB types.Blocks, bman *BlockProcessor) (*big.Int, error) { td := new(big.Int) for _, block := range chainB { - _, err := bman.bc.processor.Process(block) + _, _, err := bman.bc.processor.Process(block) if err != nil { if IsKnownBlockErr(err) { continue @@ -367,7 +367,7 @@ func TestGetBlocksFromHash(t *testing.T) { type bproc struct{} -func (bproc) Process(*types.Block) (state.Logs, error) { return nil, nil } +func (bproc) Process(*types.Block) (state.Logs, types.Receipts, error) { return nil, nil, nil } func makeChainWithDiff(genesis *types.Block, d []int, seed byte) []*types.Block { var chain []*types.Block @@ -390,7 +390,7 @@ func makeChainWithDiff(genesis *types.Block, d []int, seed byte) []*types.Block func chm(genesis *types.Block, db common.Database) *ChainManager { var eventMux event.TypeMux - bc := &ChainManager{blockDb: db, stateDb: db, genesisBlock: genesis, eventMux: &eventMux, pow: FakePow{}} + bc := &ChainManager{extraDb: db, blockDb: db, stateDb: db, genesisBlock: genesis, eventMux: &eventMux, pow: FakePow{}} bc.cache, _ = lru.New(100) bc.futureBlocks, _ = lru.New(100) bc.processor = bproc{} @@ -479,12 +479,12 @@ func TestGenesisMismatch(t *testing.T) { db, _ := ethdb.NewMemDatabase() var mux event.TypeMux genesis := GenesisBlock(0, db) - _, err := NewChainManager(genesis, db, db, thePow(), &mux) + _, err := NewChainManager(genesis, db, db, db, thePow(), &mux) if err != nil { t.Error(err) } genesis = GenesisBlock(1, db) - _, err = NewChainManager(genesis, db, db, thePow(), &mux) + _, err = NewChainManager(genesis, db, db, db, thePow(), &mux) if err == nil { t.Error("expected genesis mismatch error") } diff --git a/core/manager.go b/core/manager.go index ba0ecf9d16..576cf55b01 100644 --- a/core/manager.go +++ b/core/manager.go @@ -14,5 +14,6 @@ type Backend interface { TxPool() *TxPool BlockDb() common.Database StateDb() common.Database + ExtraDb() common.Database EventMux() *event.TypeMux } diff --git a/core/transaction_util.go b/core/transaction_util.go new file mode 100644 index 0000000000..bbb215d910 --- /dev/null +++ b/core/transaction_util.go @@ -0,0 +1,51 @@ +package core + +import ( + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/logger" + "github.com/ethereum/go-ethereum/logger/glog" + "github.com/ethereum/go-ethereum/rlp" +) + +func PutTransactions(db common.Database, block *types.Block, txs types.Transactions) { + for i, tx := range block.Transactions() { + rlpEnc, err := rlp.EncodeToBytes(tx) + if err != nil { + glog.V(logger.Debug).Infoln("Failed encoding tx", err) + return + } + db.Put(tx.Hash().Bytes(), rlpEnc) + + var txExtra struct { + BlockHash common.Hash + BlockIndex uint64 + Index uint64 + } + txExtra.BlockHash = block.Hash() + txExtra.BlockIndex = block.NumberU64() + txExtra.Index = uint64(i) + rlpMeta, err := rlp.EncodeToBytes(txExtra) + if err != nil { + glog.V(logger.Debug).Infoln("Failed encoding tx meta data", err) + return + } + db.Put(append(tx.Hash().Bytes(), 0x0001), rlpMeta) + } +} + +func PutReceipts(db common.Database, hash common.Hash, receipts types.Receipts) error { + storageReceipts := make([]*types.ReceiptForStorage, len(receipts)) + for i, receipt := range receipts { + storageReceipts[i] = (*types.ReceiptForStorage)(receipt) + } + + bytes, err := rlp.EncodeToBytes(storageReceipts) + if err != nil { + return err + } + + db.Put(append(receiptsPre, hash[:]...), bytes) + + return nil +} diff --git a/core/types/common.go b/core/types/common.go index dbdaaba0c2..09d1e2fed6 100644 --- a/core/types/common.go +++ b/core/types/common.go @@ -10,7 +10,7 @@ import ( ) type BlockProcessor interface { - Process(*Block) (state.Logs, error) + Process(*Block) (state.Logs, Receipts, error) } const bloomLength = 256 diff --git a/eth/backend.go b/eth/backend.go index d6ad3381da..618eec9fba 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -339,7 +339,7 @@ func New(config *Config) (*Ethereum, error) { eth.pow = ethash.New() genesis := core.GenesisBlock(uint64(config.GenesisNonce), stateDb) - eth.chainManager, err = core.NewChainManager(genesis, blockDb, stateDb, eth.pow, eth.EventMux()) + eth.chainManager, err = core.NewChainManager(genesis, blockDb, stateDb, extraDb, eth.pow, eth.EventMux()) if err != nil { return nil, err } diff --git a/eth/protocol_test.go b/eth/protocol_test.go index 4c1579d4e5..2cc3d06ab2 100644 --- a/eth/protocol_test.go +++ b/eth/protocol_test.go @@ -165,7 +165,7 @@ func newProtocolManagerForTesting(txAdded chan<- []*types.Transaction) *Protocol var ( em = new(event.TypeMux) db, _ = ethdb.NewMemDatabase() - chain, _ = core.NewChainManager(core.GenesisBlock(0, db), db, db, core.FakePow{}, em) + chain, _ = core.NewChainManager(core.GenesisBlock(0, db), db, db, db, core.FakePow{}, em) txpool = &fakeTxPool{added: txAdded} pm = NewProtocolManager(0, em, txpool, core.FakePow{}, chain) ) diff --git a/miner/worker.go b/miner/worker.go index 90914ddcb8..a23b663f9c 100644 --- a/miner/worker.go +++ b/miner/worker.go @@ -79,9 +79,10 @@ type worker struct { quit chan struct{} pow pow.PoW - eth core.Backend - chain *core.ChainManager - proc *core.BlockProcessor + eth core.Backend + chain *core.ChainManager + proc *core.BlockProcessor + extraDb common.Database coinbase common.Address gasPrice *big.Int @@ -105,6 +106,7 @@ func newWorker(coinbase common.Address, eth core.Backend) *worker { worker := &worker{ eth: eth, mux: eth.EventMux(), + extraDb: eth.ExtraDb(), recv: make(chan *types.Block), gasPrice: new(big.Int), chain: eth.ChainManager(), @@ -233,11 +235,28 @@ func (self *worker) wait() { continue } - _, err := self.chain.WriteBlock(block, false) + parent := self.chain.GetBlock(block.ParentHash()) + if parent == nil { + glog.V(logger.Error).Infoln("Invalid block found during mining") + continue + } + if err := core.ValidateHeader(self.eth.BlockProcessor().Pow, block.Header(), parent, true); err != nil { + glog.V(logger.Error).Infoln("Invalid header on mined block:", err) + continue + } + + stat, err := self.chain.WriteBlock(block, false) if err != nil { glog.V(logger.Error).Infoln("error writing block to chain", err) continue } + // check if canon block and write transactions + if stat == core.CanonStatTy { + // This puts transactions in a extra db for rpc + core.PutTransactions(self.extraDb, block, block.Transactions()) + // store the receipts + core.PutReceipts(self.extraDb, block.Hash(), self.current.receipts) + } // check staleness and display confirmation var stale, confirm string @@ -252,7 +271,13 @@ func (self *worker) wait() { glog.V(logger.Info).Infof("🔨 Mined %sblock (#%v / %x). %s", stale, block.Number(), block.Hash().Bytes()[:4], confirm) // broadcast before waiting for validation - go self.mux.Post(core.NewMinedBlockEvent{block}) + go func(block *types.Block, logs state.Logs) { + self.mux.Post(core.NewMinedBlockEvent{block}) + self.mux.Post(core.ChainEvent{block, block.Hash(), logs}) + if stat == core.CanonStatTy { + self.mux.Post(core.ChainHeadEvent{block}) + } + }(block, self.current.state.Logs()) self.commitNewWork() } diff --git a/xeth/xeth.go b/xeth/xeth.go index 2a1366fe11..155ff3eeae 100644 --- a/xeth/xeth.go +++ b/xeth/xeth.go @@ -980,6 +980,7 @@ func (self *XEth) Transact(fromStr, toStr, nonceStr, valueStr, gasStr, gasPriceS } else { glog.V(logger.Info).Infof("Tx(%x) to: %x\n", tx.Hash(), tx.To()) } + return tx.Hash().Hex(), nil } From 6afdc52483d068a2de346505e8951dd9f064b99f Mon Sep 17 00:00:00 2001 From: Taylor Gerring <taylor.gerring@gmail.com> Date: Fri, 3 Jul 2015 07:40:47 -0500 Subject: [PATCH 152/156] Prevent debug value from printing on console --- core/filter.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/core/filter.go b/core/filter.go index fcdf68dd08..121e4642d5 100644 --- a/core/filter.go +++ b/core/filter.go @@ -1,7 +1,6 @@ package core import ( - "fmt" "math" "github.com/ethereum/go-ethereum/common" @@ -80,7 +79,6 @@ func (self *Filter) Find() state.Logs { done: for i := 0; block != nil; i++ { - fmt.Println(block.NumberU64() == 0) // Quit on latest switch { case block.NumberU64() == 0: From d9efaf754c54b5a66f03c68a0c04fbad050e9370 Mon Sep 17 00:00:00 2001 From: Bas van Kervel <bas@ethdev.com> Date: Fri, 3 Jul 2015 15:44:35 +0200 Subject: [PATCH 153/156] simplified implementation and improved performance --- rpc/codec/json.go | 123 ++++++++-------------------------------------- 1 file changed, 20 insertions(+), 103 deletions(-) diff --git a/rpc/codec/json.go b/rpc/codec/json.go index a4953a59c2..8aa0e6bbf3 100644 --- a/rpc/codec/json.go +++ b/rpc/codec/json.go @@ -15,129 +15,46 @@ const ( MAX_RESPONSE_SIZE = 1024 * 1024 ) -var ( - // No new requests in buffer - EmptyRequestQueueError = fmt.Errorf("No incoming requests") - // Next request in buffer isn't yet complete - IncompleteRequestError = fmt.Errorf("Request incomplete") -) - // Json serialization support type JsonCodec struct { - c net.Conn - reqBuffer []byte - bytesInReqBuffer int - reqLastPos int + c net.Conn + d *json.Decoder } // Create new JSON coder instance func NewJsonCoder(conn net.Conn) ApiCoder { return &JsonCodec{ - c: conn, - reqBuffer: make([]byte, MAX_REQUEST_SIZE), - bytesInReqBuffer: 0, - reqLastPos: 0, + c: conn, + d: json.NewDecoder(conn), } } -// Indication if the next request in the buffer is a batch request -func (self *JsonCodec) isNextBatchReq() (bool, error) { - for i := 0; i < self.bytesInReqBuffer; i++ { - switch self.reqBuffer[i] { - case 0x20, 0x09, 0x0a, 0x0d: // allow leading whitespace (JSON whitespace RFC4627) - continue - case 0x7b: // single req - return false, nil - case 0x5b: // batch req - return true, nil - default: - return false, &json.InvalidUnmarshalError{} - } - } - - return false, EmptyRequestQueueError -} - -// remove parsed request from buffer -func (self *JsonCodec) resetReqbuffer(pos int) { - copy(self.reqBuffer, self.reqBuffer[pos:self.bytesInReqBuffer]) - self.reqLastPos = 0 - self.bytesInReqBuffer -= pos -} - -// parse request in buffer -func (self *JsonCodec) nextRequest() (requests []*shared.Request, isBatch bool, err error) { - if isBatch, err := self.isNextBatchReq(); err == nil { - if isBatch { - requests = make([]*shared.Request, 0) - for ; self.reqLastPos <= self.bytesInReqBuffer; self.reqLastPos++ { - if err = json.Unmarshal(self.reqBuffer[:self.reqLastPos], &requests); err == nil { - self.resetReqbuffer(self.reqLastPos) - return requests, true, nil - } - } - return nil, true, IncompleteRequestError - } else { - request := shared.Request{} - for ; self.reqLastPos <= self.bytesInReqBuffer; self.reqLastPos++ { - if err = json.Unmarshal(self.reqBuffer[:self.reqLastPos], &request); err == nil { - requests := make([]*shared.Request, 1) - requests[0] = &request - self.resetReqbuffer(self.reqLastPos) - return requests, false, nil - } - } - return nil, true, IncompleteRequestError - } - } else { - return nil, false, err - } -} - -// Serialize obj to JSON and write it to conn +// Read incoming request and parse it to RPC request func (self *JsonCodec) ReadRequest() (requests []*shared.Request, isBatch bool, err error) { - if self.bytesInReqBuffer != 0 { - req, batch, err := self.nextRequest() - if err == nil { - return req, batch, err - } - - if err != IncompleteRequestError { - return nil, false, err - } - } - - // no/incomplete request in buffer -> read more data first deadline := time.Now().Add(READ_TIMEOUT * time.Second) if err := self.c.SetDeadline(deadline); err != nil { return nil, false, err } - var retErr error - for { - n, err := self.c.Read(self.reqBuffer[self.bytesInReqBuffer:]) - if err != nil { - retErr = err - break + var incoming json.RawMessage + err = self.d.Decode(&incoming) + if err == nil { + isBatch = incoming[0] == '[' + if isBatch { + requests = make([]*shared.Request, 0) + err = json.Unmarshal(incoming, &requests) + } else { + requests = make([]*shared.Request, 1) + var singleRequest shared.Request + if err = json.Unmarshal(incoming, &singleRequest); err == nil { + requests[0] = &singleRequest + } } - - self.bytesInReqBuffer += n - - requests, isBatch, err := self.nextRequest() - if err == nil { - return requests, isBatch, nil - } - - if err == IncompleteRequestError || err == EmptyRequestQueueError { - continue // need more data - } - - retErr = err - break + return } self.c.Close() - return nil, false, retErr + return nil, false, err } func (self *JsonCodec) ReadResponse() (interface{}, error) { From e8c1399bbf08234389f0e8f5da08f146856dab12 Mon Sep 17 00:00:00 2001 From: Bas van Kervel <bas@ethdev.com> Date: Fri, 3 Jul 2015 16:57:40 +0200 Subject: [PATCH 154/156] fixed unittest after new implementation --- rpc/codec/json_test.go | 38 +------------------------------------- 1 file changed, 1 insertion(+), 37 deletions(-) diff --git a/rpc/codec/json_test.go b/rpc/codec/json_test.go index 60cac05f71..d5c672cdf2 100644 --- a/rpc/codec/json_test.go +++ b/rpc/codec/json_test.go @@ -112,42 +112,6 @@ func TestJsonDecoderWithValidBatchRequest(t *testing.T) { } } -func TestJsonDecoderWithIncompleteMessage(t *testing.T) { - reqdata := []byte(`{"jsonrpc":"2.0","method":"modules","pa`) - decoder := newJsonTestConn(reqdata) - - jsonDecoder := NewJsonCoder(decoder) - requests, batch, err := jsonDecoder.ReadRequest() - - if err != io.EOF { - t.Errorf("Expected to read an incomplete request err but got %v", err) - } - - // remaining message - decoder.Write([]byte(`rams":[],"id":64}`)) - requests, batch, err = jsonDecoder.ReadRequest() - - if err != nil { - t.Errorf("Read valid request failed - %v", err) - } - - if len(requests) != 1 { - t.Errorf("Expected to get a single request but got %d", len(requests)) - } - - if batch { - t.Errorf("Got batch indication while expecting single request") - } - - if requests[0].Id != float64(64) { - t.Errorf("Expected req.Id == 64 but got %v", requests[0].Id) - } - - if requests[0].Method != "modules" { - t.Errorf("Expected req.Method == 'modules' got '%s'", requests[0].Method) - } -} - func TestJsonDecoderWithInvalidIncompleteMessage(t *testing.T) { reqdata := []byte(`{"jsonrpc":"2.0","method":"modules","pa`) decoder := newJsonTestConn(reqdata) @@ -155,7 +119,7 @@ func TestJsonDecoderWithInvalidIncompleteMessage(t *testing.T) { jsonDecoder := NewJsonCoder(decoder) requests, batch, err := jsonDecoder.ReadRequest() - if err != io.EOF { + if err != io.ErrUnexpectedEOF { t.Errorf("Expected to read an incomplete request err but got %v", err) } From 8150c0a726c49e71d7d505b34be449456022b24c Mon Sep 17 00:00:00 2001 From: Bas van Kervel <bas@ethdev.com> Date: Fri, 3 Jul 2015 17:08:41 +0200 Subject: [PATCH 155/156] upgrade web3 to version 0.7.1 --- jsre/ethereum_js.go | 3037 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 2934 insertions(+), 103 deletions(-) diff --git a/jsre/ethereum_js.go b/jsre/ethereum_js.go index 8d530a532c..38fa803c4b 100644 --- a/jsre/ethereum_js.go +++ b/jsre/ethereum_js.go @@ -265,6 +265,13 @@ var coder = new SolidityCoder([ inputFormatter: f.formatInputBytes, outputFormatter: f.formatOutputBytes }), + new SolidityType({ + name: 'string', + match: 'strict', + mode: 'bytes', + inputFormatter: f.formatInputString, + outputFormatter: f.formatOutputString + }), new SolidityType({ name: 'real', match: 'prefix', @@ -330,26 +337,43 @@ var formatInputInt = function (value) { }; /** - * Formats input value to byte representation of string + * Formats input bytes * * @method formatInputBytes * @param {String} * @returns {SolidityParam} */ var formatInputBytes = function (value) { - var result = utils.fromAscii(value, c.ETH_PADDING).substr(2); + var result = utils.padRight(utils.toHex(value).substr(2), 64); return new SolidityParam(result); }; +/** + * Formats input bytes + * + * @method formatDynamicInputBytes + * @param {String} + * @returns {SolidityParam} + */ +var formatInputDynamicBytes = function (value) { + value = utils.toHex(value).substr(2); + var l = Math.floor((value.length + 63) / 64); + var result = utils.padRight(value, l * 64); + var length = Math.floor(value.length / 2); + return new SolidityParam(formatInputInt(length).value + result, 32); +}; + /** * Formats input value to byte representation of string * - * @method formatInputDynamicBytes + * @method formatInputString * @param {String} * @returns {SolidityParam} */ -var formatInputDynamicBytes = function (value) { - var result = utils.fromAscii(value, c.ETH_PADDING).substr(2); +var formatInputString = function (value) { + var result = utils.fromAscii(value).substr(2); + var l = Math.floor((result.length + 63) / 64); + result = utils.padRight(result, l * 64); return new SolidityParam(formatInputInt(value.length).value + result, 32); }; @@ -452,27 +476,38 @@ var formatOutputBool = function (param) { }; /** - * Should be used to format output string + * Should be used to format output bytes * * @method formatOutputBytes * @param {SolidityParam} left-aligned hex representation of string - * @returns {String} ascii string + * @returns {String} hex string */ var formatOutputBytes = function (param) { - // length might also be important! - return utils.toAscii(param.staticPart()); + return '0x' + param.staticPart(); +}; + +/** + * Should be used to format output bytes + * + * @method formatOutputDynamicBytes + * @param {SolidityParam} left-aligned hex representation of string + * @returns {String} hex string + */ +var formatOutputDynamicBytes = function (param) { + var length = (new BigNumber(param.dynamicPart().slice(0, 64), 16)).toNumber() * 2; + return '0x' + param.dynamicPart().substr(64, length); }; /** * Should be used to format output string * - * @method formatOutputDynamicBytes + * @method formatOutputString * @param {SolidityParam} left-aligned hex representation of string * @returns {String} ascii string */ -var formatOutputDynamicBytes = function (param) { - // length might also be important! - return utils.toAscii(param.dynamicPart().slice(64)); +var formatOutputString = function (param) { + var length = (new BigNumber(param.dynamicPart().slice(0, 64), 16)).toNumber() * 2; + return utils.toAscii(param.dynamicPart().substr(64, length)); }; /** @@ -491,6 +526,7 @@ module.exports = { formatInputInt: formatInputInt, formatInputBytes: formatInputBytes, formatInputDynamicBytes: formatInputDynamicBytes, + formatInputString: formatInputString, formatInputBool: formatInputBool, formatInputReal: formatInputReal, formatOutputInt: formatOutputInt, @@ -500,6 +536,7 @@ module.exports = { formatOutputBool: formatOutputBool, formatOutputBytes: formatOutputBytes, formatOutputDynamicBytes: formatOutputDynamicBytes, + formatOutputString: formatOutputString, formatOutputAddress: formatOutputAddress }; @@ -689,13 +726,14 @@ var getOffset = function (bytes, index) { */ SolidityParam.decodeBytes = function (bytes, index) { index = index || 0; - //TODO add support for strings longer than 32 bytes - //var length = parseInt('0x' + bytes.substr(offset * 64, 64)); var offset = getOffset(bytes, index); - // 2 * , cause we also parse length - return new SolidityParam(bytes.substr(offset * 2, 2 * 64), 0); + var l = parseInt('0x' + bytes.substr(offset * 2, 64)); + l = Math.floor((l + 31) / 32); + + // (1 + l) * , cause we also parse length + return new SolidityParam(bytes.substr(offset * 2, (1 + l) * 64), 0); }; /** @@ -848,7 +886,7 @@ module.exports = function (str, isNew) { }; -},{"./utils":7,"crypto-js/sha3":33}],7:[function(require,module,exports){ +},{"./utils":7,"crypto-js/sha3":34}],7:[function(require,module,exports){ /* This file is part of ethereum.js. @@ -926,6 +964,19 @@ var padLeft = function (string, chars, sign) { return new Array(chars - string.length + 1).join(sign ? sign : "0") + string; }; +/** + * Should be called to pad string to expected length + * + * @method padRight + * @param {String} string to be padded + * @param {Number} characters that result string should have + * @param {String} sign, by default 0 + * @returns {String} right aligned string + */ +var padRight = function (string, chars, sign) { + return string + (new Array(chars - string.length + 1).join(sign ? sign : "0")); +}; + /** * Should be called to get sting from it's hex representation * @@ -942,10 +993,6 @@ var toAscii = function(hex) { } for (; i < l; i+=2) { var code = parseInt(hex.substr(i, 2), 16); - if (code === 0) { - break; - } - str += String.fromCharCode(code); } @@ -1055,7 +1102,7 @@ var fromDecimal = function (value) { * @return {String} */ var toHex = function (val) { - /*jshint maxcomplexity:7 */ + /*jshint maxcomplexity: 8 */ if (isBoolean(val)) return fromDecimal(+val); @@ -1069,9 +1116,11 @@ var toHex = function (val) { // if its a negative number, pass it through fromDecimal if (isString(val)) { if (val.indexOf('-0x') === 0) - return fromDecimal(val); + return fromDecimal(val); else if (!isFinite(val)) return fromAscii(val); + else if(val.indexOf('0x') === 0) + return val; } return fromDecimal(val); @@ -1322,6 +1371,7 @@ var isIBAN = function (iban) { module.exports = { padLeft: padLeft, + padRight: padRight, toHex: toHex, toDecimal: toDecimal, fromDecimal: fromDecimal, @@ -1350,7 +1400,7 @@ module.exports = { },{"bignumber.js":"bignumber.js"}],8:[function(require,module,exports){ module.exports={ - "version": "0.5.0" + "version": "0.7.1" } },{}],9:[function(require,module,exports){ @@ -1436,31 +1486,25 @@ var setupProperties = function (obj, properties) { /// setups web3 object, and it's in-browser executed methods var web3 = {}; web3.providers = {}; +web3.currentProvider = null; web3.version = {}; web3.version.api = version.version; web3.eth = {}; /*jshint maxparams:4 */ -web3.eth.filter = function (fil, eventParams, options, formatter) { - - // if its event, treat it differently - // TODO: simplify and remove - if (fil._isEvent) { - return fil(eventParams, options); - } - - // output logs works for blockFilter and pendingTransaction filters? - return new Filter(fil, watches.eth(), formatter || formatters.outputLogFormatter); +web3.eth.filter = function (fil, callback) { + return new Filter(fil, watches.eth(), formatters.outputLogFormatter, callback); }; /*jshint maxparams:3 */ web3.shh = {}; -web3.shh.filter = function (fil) { - return new Filter(fil, watches.shh(), formatters.outputPostFormatter); +web3.shh.filter = function (fil, callback) { + return new Filter(fil, watches.shh(), formatters.outputPostFormatter, callback); }; web3.net = {}; web3.db = {}; web3.setProvider = function (provider) { + this.currentProvider = provider; RequestManager.getInstance().setProvider(provider); }; web3.reset = function () { @@ -1533,7 +1577,90 @@ setupMethods(web3.shh, shh.methods); module.exports = web3; -},{"./utils/config":5,"./utils/sha3":6,"./utils/utils":7,"./version.json":8,"./web3/batch":10,"./web3/db":12,"./web3/eth":14,"./web3/filter":16,"./web3/formatters":17,"./web3/method":22,"./web3/net":24,"./web3/property":25,"./web3/requestmanager":27,"./web3/shh":28,"./web3/watches":30}],10:[function(require,module,exports){ +},{"./utils/config":5,"./utils/sha3":6,"./utils/utils":7,"./version.json":8,"./web3/batch":11,"./web3/db":13,"./web3/eth":15,"./web3/filter":17,"./web3/formatters":18,"./web3/method":23,"./web3/net":25,"./web3/property":26,"./web3/requestmanager":28,"./web3/shh":29,"./web3/watches":31}],10:[function(require,module,exports){ +/* + This file is part of ethereum.js. + + ethereum.js is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + ethereum.js is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with ethereum.js. If not, see <http://www.gnu.org/licenses/>. +*/ +/** + * @file allevents.js + * @author Marek Kotewicz <marek@ethdev.com> + * @date 2014 + */ + +var sha3 = require('../utils/sha3'); +var SolidityEvent = require('./event'); +var formatters = require('./formatters'); +var utils = require('../utils/utils'); +var Filter = require('./filter'); +var watches = require('./watches'); + +var AllSolidityEvents = function (json, address) { + this._json = json; + this._address = address; +}; + +AllSolidityEvents.prototype.encode = function (options) { + options = options || {}; + var result = {}; + + ['fromBlock', 'toBlock'].filter(function (f) { + return options[f] !== undefined; + }).forEach(function (f) { + result[f] = formatters.inputBlockNumberFormatter(options[f]); + }); + + result.topics = [null, null, null, null, null]; // match all topics + result.address = this._address; + + return result; +}; + +AllSolidityEvents.prototype.decode = function (data) { + data.data = data.data || ''; + data.topics = data.topics || []; + + var eventTopic = data.topics[0].slice(2); + var match = this._json.filter(function (j) { + return eventTopic === sha3(utils.transformToFullName(j)); + })[0]; + + if (!match) { // cannot find matching event? + console.warn('cannot find event for log'); + return data; + } + + var event = new SolidityEvent(match, this._address); + return event.decode(data); +}; + +AllSolidityEvents.prototype.execute = function (options, callback) { + var o = this.encode(options); + var formatter = this.decode.bind(this); + return new Filter(o, watches.eth(), formatter, callback); +}; + +AllSolidityEvents.prototype.attachToContract = function (contract) { + var execute = this.execute.bind(this); + contract.allEvents = execute; +}; + +module.exports = AllSolidityEvents; + + +},{"../utils/sha3":6,"../utils/utils":7,"./event":16,"./filter":17,"./formatters":18,"./watches":31}],11:[function(require,module,exports){ /* This file is part of ethereum.js. @@ -1596,7 +1723,7 @@ Batch.prototype.execute = function () { module.exports = Batch; -},{"./requestmanager":27}],11:[function(require,module,exports){ +},{"./requestmanager":28}],12:[function(require,module,exports){ /* This file is part of ethereum.js. @@ -1624,6 +1751,7 @@ var utils = require('../utils/utils'); var coder = require('../solidity/coder'); var SolidityEvent = require('./event'); var SolidityFunction = require('./function'); +var AllEvents = require('./allevents'); /** * Should be called to encode constructor params @@ -1669,9 +1797,14 @@ var addFunctionsToContract = function (contract, abi) { * @param {Array} abi */ var addEventsToContract = function (contract, abi) { - abi.filter(function (json) { + var events = abi.filter(function (json) { return json.type === 'event'; - }).map(function (json) { + }); + + var All = new AllEvents(events, contract.address); + All.attachToContract(contract); + + events.map(function (json) { return new SolidityEvent(json, contract.address); }).forEach(function (e) { e.attachToContract(contract); @@ -1778,7 +1911,7 @@ var Contract = function (abi, address) { module.exports = contract; -},{"../solidity/coder":1,"../utils/utils":7,"../web3":9,"./event":15,"./function":18}],12:[function(require,module,exports){ +},{"../solidity/coder":1,"../utils/utils":7,"../web3":9,"./allevents":10,"./event":16,"./function":19}],13:[function(require,module,exports){ /* This file is part of ethereum.js. @@ -1836,7 +1969,7 @@ module.exports = { methods: methods }; -},{"./method":22}],13:[function(require,module,exports){ +},{"./method":23}],14:[function(require,module,exports){ /* This file is part of ethereum.js. @@ -1876,7 +2009,7 @@ module.exports = { }; -},{}],14:[function(require,module,exports){ +},{}],15:[function(require,module,exports){ /* This file is part of ethereum.js. @@ -2039,6 +2172,13 @@ var getTransactionCount = new Method({ outputFormatter: utils.toDecimal }); +var sendRawTransaction = new Method({ + name: 'sendRawTransaction', + call: 'eth_sendRawTransaction', + params: 1, + inputFormatter: [] +}); + var sendTransaction = new Method({ name: 'sendTransaction', call: 'eth_sendTransaction', @@ -2105,6 +2245,7 @@ var methods = [ getTransactionCount, call, estimateGas, + sendRawTransaction, sendTransaction, compileSolidity, compileLLL, @@ -2153,7 +2294,7 @@ module.exports = { }; -},{"../utils/utils":7,"./formatters":17,"./method":22,"./property":25}],15:[function(require,module,exports){ +},{"../utils/utils":7,"./formatters":18,"./method":23,"./property":26}],16:[function(require,module,exports){ /* This file is part of ethereum.js. @@ -2178,9 +2319,10 @@ module.exports = { var utils = require('../utils/utils'); var coder = require('../solidity/coder'); -var web3 = require('../web3'); var formatters = require('./formatters'); var sha3 = require('../utils/sha3'); +var Filter = require('./filter'); +var watches = require('./watches'); /** * This prototype should be used to create event filters @@ -2326,10 +2468,21 @@ SolidityEvent.prototype.decode = function (data) { * @param {Object} options * @return {Object} filter object */ -SolidityEvent.prototype.execute = function (indexed, options) { +SolidityEvent.prototype.execute = function (indexed, options, callback) { + + if (utils.isFunction(arguments[arguments.length - 1])) { + callback = arguments[arguments.length - 1]; + if(arguments.length === 2) + options = null; + if(arguments.length === 1) { + options = null; + indexed = {}; + } + } + var o = this.encode(indexed, options); var formatter = this.decode.bind(this); - return web3.eth.filter(o, undefined, undefined, formatter); + return new Filter(o, watches.eth(), formatter, callback); }; /** @@ -2350,7 +2503,7 @@ SolidityEvent.prototype.attachToContract = function (contract) { module.exports = SolidityEvent; -},{"../solidity/coder":1,"../utils/sha3":6,"../utils/utils":7,"../web3":9,"./formatters":17}],16:[function(require,module,exports){ +},{"../solidity/coder":1,"../utils/sha3":6,"../utils/utils":7,"./filter":17,"./formatters":18,"./watches":31}],17:[function(require,module,exports){ /* This file is part of ethereum.js. @@ -2480,7 +2633,7 @@ var pollFilter = function(self) { }; -var Filter = function (options, methods, formatter) { +var Filter = function (options, methods, formatter, callback) { var self = this; var implementation = {}; methods.forEach(function (method) { @@ -2488,23 +2641,32 @@ var Filter = function (options, methods, formatter) { }); this.options = getOptions(options); this.implementation = implementation; + this.filterId = null; this.callbacks = []; this.pollFilters = []; this.formatter = formatter; this.implementation.newFilter(this.options, function(error, id){ if(error) { - self.callbacks.forEach(function(callback){ - callback(error); + self.callbacks.forEach(function(cb){ + cb(error); }); } else { self.filterId = id; - // get filter logs at start - self.callbacks.forEach(function(callback){ - getLogsAtStart(self, callback); + + // get filter logs for the already existing watch calls + self.callbacks.forEach(function(cb){ + getLogsAtStart(self, cb); }); - pollFilter(self); + if(self.callbacks.length > 0) + pollFilter(self); + + // start to watch immediately + if(callback) { + return self.watch(callback); + } } }); + }; Filter.prototype.watch = function (callback) { @@ -2550,7 +2712,7 @@ Filter.prototype.get = function (callback) { module.exports = Filter; -},{"../utils/utils":7,"./formatters":17,"./requestmanager":27}],17:[function(require,module,exports){ +},{"../utils/utils":7,"./formatters":18,"./requestmanager":28}],18:[function(require,module,exports){ /* This file is part of ethereum.js. @@ -2691,10 +2853,6 @@ var outputBlockFormatter = function(block) { * @returns {Object} log */ var outputLogFormatter = function(log) { - if (log === null) { // 'pending' && 'latest' filters are nulls - return null; - } - if(log.blockNumber !== null) log.blockNumber = utils.toDecimal(log.blockNumber); if(log.transactionIndex !== null) @@ -2776,7 +2934,7 @@ module.exports = { }; -},{"../utils/config":5,"../utils/utils":7}],18:[function(require,module,exports){ +},{"../utils/config":5,"../utils/utils":7}],19:[function(require,module,exports){ /* This file is part of ethereum.js. @@ -2967,8 +3125,9 @@ SolidityFunction.prototype.request = function () { var format = this.unpackOutput.bind(this); return { + method: this._constant ? 'eth_call' : 'eth_sendTransaction', callback: callback, - payload: payload, + params: [payload], format: format }; }; @@ -3012,7 +3171,7 @@ SolidityFunction.prototype.attachToContract = function (contract) { module.exports = SolidityFunction; -},{"../solidity/coder":1,"../utils/sha3":6,"../utils/utils":7,"../web3":9,"./formatters":17}],19:[function(require,module,exports){ +},{"../solidity/coder":1,"../utils/sha3":6,"../utils/utils":7,"../web3":9,"./formatters":18}],20:[function(require,module,exports){ /* This file is part of ethereum.js. @@ -3039,7 +3198,8 @@ module.exports = SolidityFunction; "use strict"; -var XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest; // jshint ignore:line +// resolves the problem for electron/atom shell environments, which use node integration, but have no process variable available +var XMLHttpRequest = (typeof window !== 'undefined' && window.XMLHttpRequest) ? window.XMLHttpRequest : require('xmlhttprequest').XMLHttpRequest; // jshint ignore:line var errors = require('./errors'); var HttpProvider = function (host) { @@ -3051,6 +3211,7 @@ HttpProvider.prototype.send = function (payload) { request.open('POST', this.host, false); request.setRequestHeader('Content-type','application/json'); + request.setRequestHeader('Connection','Keep-Alive'); try { request.send(JSON.stringify(payload)); @@ -3106,7 +3267,7 @@ HttpProvider.prototype.sendAsync = function (payload, callback) { module.exports = HttpProvider; -},{"./errors":13,"xmlhttprequest":4}],20:[function(require,module,exports){ +},{"./errors":14,"xmlhttprequest":4}],21:[function(require,module,exports){ /* This file is part of ethereum.js. @@ -3216,7 +3377,7 @@ ICAP.prototype.address = function () { module.exports = ICAP; -},{"../utils/utils":7}],21:[function(require,module,exports){ +},{"../utils/utils":7}],22:[function(require,module,exports){ /* This file is part of ethereum.js. @@ -3309,7 +3470,7 @@ Jsonrpc.prototype.toBatchPayload = function (messages) { module.exports = Jsonrpc; -},{}],22:[function(require,module,exports){ +},{}],23:[function(require,module,exports){ /* This file is part of ethereum.js. @@ -3483,7 +3644,7 @@ Method.prototype.send = function () { module.exports = Method; -},{"../utils/utils":7,"./errors":13,"./requestmanager":27}],23:[function(require,module,exports){ +},{"../utils/utils":7,"./errors":14,"./requestmanager":28}],24:[function(require,module,exports){ /* This file is part of ethereum.js. @@ -3531,7 +3692,7 @@ var abi = [ module.exports = contract(abi).at(address); -},{"./contract":11}],24:[function(require,module,exports){ +},{"./contract":12}],25:[function(require,module,exports){ /* This file is part of ethereum.js. @@ -3581,7 +3742,7 @@ module.exports = { }; -},{"../utils/utils":7,"./property":25}],25:[function(require,module,exports){ +},{"../utils/utils":7,"./property":26}],26:[function(require,module,exports){ /* This file is part of ethereum.js. @@ -3699,7 +3860,7 @@ Property.prototype.getAsync = function (callback) { module.exports = Property; -},{"./requestmanager":27}],26:[function(require,module,exports){ +},{"./requestmanager":28}],27:[function(require,module,exports){ /* This file is part of ethereum.js. @@ -3734,7 +3895,7 @@ QtSyncProvider.prototype.send = function (payload) { module.exports = QtSyncProvider; -},{}],27:[function(require,module,exports){ +},{}],28:[function(require,module,exports){ /* This file is part of ethereum.js. @@ -3878,7 +4039,7 @@ RequestManager.prototype.sendBatch = function (data, callback) { RequestManager.prototype.setProvider = function (p) { this.provider = p; - if(this.provider && !this.isPolling) { + if (this.provider && !this.isPolling) { this.poll(); this.isPolling = true; } @@ -3919,9 +4080,7 @@ RequestManager.prototype.stopPolling = function (pollId) { */ RequestManager.prototype.reset = function () { for (var key in this.polls) { - if (this.polls.hasOwnProperty(key)) { - this.polls[key].uninstall(); - } + this.polls[key].uninstall(); } this.polls = {}; @@ -3941,7 +4100,7 @@ RequestManager.prototype.poll = function () { /*jshint maxcomplexity: 6 */ this.timeout = setTimeout(this.poll.bind(this), c.ETH_POLLING_TIMEOUT); - if (this.polls === {}) { + if (Object.keys(this.polls).length === 0) { return; } @@ -3953,10 +4112,8 @@ RequestManager.prototype.poll = function () { var pollsData = []; var pollsKeys = []; for (var key in this.polls) { - if (this.polls.hasOwnProperty(key)) { - pollsData.push(this.polls[key].data); - pollsKeys.push(key); - } + pollsData.push(this.polls[key].data); + pollsKeys.push(key); } if (pollsData.length === 0) { @@ -3979,13 +4136,13 @@ RequestManager.prototype.poll = function () { results.map(function (result, index) { var key = pollsKeys[index]; // make sure the filter is still installed after arrival of the request - if(self.polls[key]) { + if (self.polls[key]) { result.callback = self.polls[key].callback; return result; } else return false; }).filter(function (result) { - return (!result) ? false : true; + return !!result; }).filter(function (result) { var valid = Jsonrpc.getInstance().isValidResponse(result); if (!valid) { @@ -4003,7 +4160,7 @@ RequestManager.prototype.poll = function () { module.exports = RequestManager; -},{"../utils/config":5,"../utils/utils":7,"./errors":13,"./jsonrpc":21}],28:[function(require,module,exports){ +},{"../utils/config":5,"../utils/utils":7,"./errors":14,"./jsonrpc":22}],29:[function(require,module,exports){ /* This file is part of ethereum.js. @@ -4073,7 +4230,7 @@ module.exports = { }; -},{"./formatters":17,"./method":22}],29:[function(require,module,exports){ +},{"./formatters":18,"./method":23}],30:[function(require,module,exports){ /* This file is part of ethereum.js. @@ -4169,7 +4326,7 @@ var deposit = function (from, address, value, client, callback) { module.exports = transfer; -},{"../web3":9,"./contract":11,"./icap":20,"./namereg":23}],30:[function(require,module,exports){ +},{"../web3":9,"./contract":12,"./icap":21,"./namereg":24}],31:[function(require,module,exports){ /* This file is part of ethereum.js. @@ -4285,9 +4442,9 @@ module.exports = { }; -},{"./method":22}],31:[function(require,module,exports){ +},{"./method":23}],32:[function(require,module,exports){ -},{}],32:[function(require,module,exports){ +},{}],33:[function(require,module,exports){ ;(function (root, factory) { if (typeof exports === "object") { // CommonJS @@ -4515,14 +4672,11 @@ module.exports = { var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8); } - } else if (thatWords.length > 0xffff) { + } else { // Copy one word at a time for (var i = 0; i < thatSigBytes; i += 4) { thisWords[(thisSigBytes + i) >>> 2] = thatWords[i >>> 2]; } - } else { - // Copy all words at once - thisWords.push.apply(thisWords, thatWords); } this.sigBytes += thatSigBytes; @@ -5033,7 +5187,7 @@ module.exports = { return CryptoJS; })); -},{}],33:[function(require,module,exports){ +},{}],34:[function(require,module,exports){ ;(function (root, factory, undef) { if (typeof exports === "object") { // CommonJS @@ -5357,7 +5511,7 @@ module.exports = { return CryptoJS.SHA3; })); -},{"./core":32,"./x64-core":34}],34:[function(require,module,exports){ +},{"./core":33,"./x64-core":35}],35:[function(require,module,exports){ ;(function (root, factory) { if (typeof exports === "object") { // CommonJS @@ -5662,13 +5816,2692 @@ module.exports = { return CryptoJS; })); -},{"./core":32}],"bignumber.js":[function(require,module,exports){ -'use strict'; +},{"./core":33}],"bignumber.js":[function(require,module,exports){ +/*! bignumber.js v2.0.7 https://github.com/MikeMcl/bignumber.js/LICENCE */ -module.exports = BigNumber; // jshint ignore:line +;(function (global) { + 'use strict'; + + /* + bignumber.js v2.0.7 + A JavaScript library for arbitrary-precision arithmetic. + https://github.com/MikeMcl/bignumber.js + Copyright (c) 2015 Michael Mclaughlin <M8ch88l@gmail.com> + MIT Expat Licence + */ -},{}],"web3":[function(require,module,exports){ + var BigNumber, crypto, parseNumeric, + isNumeric = /^-?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i, + mathceil = Math.ceil, + mathfloor = Math.floor, + notBool = ' not a boolean or binary digit', + roundingMode = 'rounding mode', + tooManyDigits = 'number type has more than 15 significant digits', + ALPHABET = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_', + BASE = 1e14, + LOG_BASE = 14, + MAX_SAFE_INTEGER = 0x1fffffffffffff, // 2^53 - 1 + // MAX_INT32 = 0x7fffffff, // 2^31 - 1 + POWS_TEN = [1, 10, 100, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, 1e12, 1e13], + SQRT_BASE = 1e7, + + /* + * The limit on the value of DECIMAL_PLACES, TO_EXP_NEG, TO_EXP_POS, MIN_EXP, MAX_EXP, and + * the arguments to toExponential, toFixed, toFormat, and toPrecision, beyond which an + * exception is thrown (if ERRORS is true). + */ + MAX = 1E9; // 0 to MAX_INT32 + + + /* + * Create and return a BigNumber constructor. + */ + function another(configObj) { + var div, + + // id tracks the caller function, so its name can be included in error messages. + id = 0, + P = BigNumber.prototype, + ONE = new BigNumber(1), + + + /********************************* EDITABLE DEFAULTS **********************************/ + + + /* + * The default values below must be integers within the inclusive ranges stated. + * The values can also be changed at run-time using BigNumber.config. + */ + + // The maximum number of decimal places for operations involving division. + DECIMAL_PLACES = 20, // 0 to MAX + + /* + * The rounding mode used when rounding to the above decimal places, and when using + * toExponential, toFixed, toFormat and toPrecision, and round (default value). + * UP 0 Away from zero. + * DOWN 1 Towards zero. + * CEIL 2 Towards +Infinity. + * FLOOR 3 Towards -Infinity. + * HALF_UP 4 Towards nearest neighbour. If equidistant, up. + * HALF_DOWN 5 Towards nearest neighbour. If equidistant, down. + * HALF_EVEN 6 Towards nearest neighbour. If equidistant, towards even neighbour. + * HALF_CEIL 7 Towards nearest neighbour. If equidistant, towards +Infinity. + * HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity. + */ + ROUNDING_MODE = 4, // 0 to 8 + + // EXPONENTIAL_AT : [TO_EXP_NEG , TO_EXP_POS] + + // The exponent value at and beneath which toString returns exponential notation. + // Number type: -7 + TO_EXP_NEG = -7, // 0 to -MAX + + // The exponent value at and above which toString returns exponential notation. + // Number type: 21 + TO_EXP_POS = 21, // 0 to MAX + + // RANGE : [MIN_EXP, MAX_EXP] + + // The minimum exponent value, beneath which underflow to zero occurs. + // Number type: -324 (5e-324) + MIN_EXP = -1e7, // -1 to -MAX + + // The maximum exponent value, above which overflow to Infinity occurs. + // Number type: 308 (1.7976931348623157e+308) + // For MAX_EXP > 1e7, e.g. new BigNumber('1e100000000').plus(1) may be slow. + MAX_EXP = 1e7, // 1 to MAX + + // Whether BigNumber Errors are ever thrown. + ERRORS = true, // true or false + + // Change to intValidatorNoErrors if ERRORS is false. + isValidInt = intValidatorWithErrors, // intValidatorWithErrors/intValidatorNoErrors + + // Whether to use cryptographically-secure random number generation, if available. + CRYPTO = false, // true or false + + /* + * The modulo mode used when calculating the modulus: a mod n. + * The quotient (q = a / n) is calculated according to the corresponding rounding mode. + * The remainder (r) is calculated as: r = a - n * q. + * + * UP 0 The remainder is positive if the dividend is negative, else is negative. + * DOWN 1 The remainder has the same sign as the dividend. + * This modulo mode is commonly known as 'truncated division' and is + * equivalent to (a % n) in JavaScript. + * FLOOR 3 The remainder has the same sign as the divisor (Python %). + * HALF_EVEN 6 This modulo mode implements the IEEE 754 remainder function. + * EUCLID 9 Euclidian division. q = sign(n) * floor(a / abs(n)). + * The remainder is always positive. + * + * The truncated division, floored division, Euclidian division and IEEE 754 remainder + * modes are commonly used for the modulus operation. + * Although the other rounding modes can also be used, they may not give useful results. + */ + MODULO_MODE = 1, // 0 to 9 + + // The maximum number of significant digits of the result of the toPower operation. + // If POW_PRECISION is 0, there will be unlimited significant digits. + POW_PRECISION = 100, // 0 to MAX + + // The format specification used by the BigNumber.prototype.toFormat method. + FORMAT = { + decimalSeparator: '.', + groupSeparator: ',', + groupSize: 3, + secondaryGroupSize: 0, + fractionGroupSeparator: '\xA0', // non-breaking space + fractionGroupSize: 0 + }; + + + /******************************************************************************************/ + + + // CONSTRUCTOR + + + /* + * The BigNumber constructor and exported function. + * Create and return a new instance of a BigNumber object. + * + * n {number|string|BigNumber} A numeric value. + * [b] {number} The base of n. Integer, 2 to 64 inclusive. + */ + function BigNumber( n, b ) { + var c, e, i, num, len, str, + x = this; + + // Enable constructor usage without new. + if ( !( x instanceof BigNumber ) ) { + + // 'BigNumber() constructor call without new: {n}' + if (ERRORS) raise( 26, 'constructor call without new', n ); + return new BigNumber( n, b ); + } + + // 'new BigNumber() base not an integer: {b}' + // 'new BigNumber() base out of range: {b}' + if ( b == null || !isValidInt( b, 2, 64, id, 'base' ) ) { + + // Duplicate. + if ( n instanceof BigNumber ) { + x.s = n.s; + x.e = n.e; + x.c = ( n = n.c ) ? n.slice() : n; + id = 0; + return; + } + + if ( ( num = typeof n == 'number' ) && n * 0 == 0 ) { + x.s = 1 / n < 0 ? ( n = -n, -1 ) : 1; + + // Fast path for integers. + if ( n === ~~n ) { + for ( e = 0, i = n; i >= 10; i /= 10, e++ ); + x.e = e; + x.c = [n]; + id = 0; + return; + } + + str = n + ''; + } else { + if ( !isNumeric.test( str = n + '' ) ) return parseNumeric( x, str, num ); + x.s = str.charCodeAt(0) === 45 ? ( str = str.slice(1), -1 ) : 1; + } + } else { + b = b | 0; + str = n + ''; + + // Ensure return value is rounded to DECIMAL_PLACES as with other bases. + // Allow exponential notation to be used with base 10 argument. + if ( b == 10 ) { + x = new BigNumber( n instanceof BigNumber ? n : str ); + return round( x, DECIMAL_PLACES + x.e + 1, ROUNDING_MODE ); + } + + // Avoid potential interpretation of Infinity and NaN as base 44+ values. + // Any number in exponential form will fail due to the [Ee][+-]. + if ( ( num = typeof n == 'number' ) && n * 0 != 0 || + !( new RegExp( '^-?' + ( c = '[' + ALPHABET.slice( 0, b ) + ']+' ) + + '(?:\\.' + c + ')?$',b < 37 ? 'i' : '' ) ).test(str) ) { + return parseNumeric( x, str, num, b ); + } + + if (num) { + x.s = 1 / n < 0 ? ( str = str.slice(1), -1 ) : 1; + + if ( ERRORS && str.replace( /^0\.0*|\./, '' ).length > 15 ) { + + // 'new BigNumber() number type has more than 15 significant digits: {n}' + raise( id, tooManyDigits, n ); + } + + // Prevent later check for length on converted number. + num = false; + } else { + x.s = str.charCodeAt(0) === 45 ? ( str = str.slice(1), -1 ) : 1; + } + + str = convertBase( str, 10, b, x.s ); + } + + // Decimal point? + if ( ( e = str.indexOf('.') ) > -1 ) str = str.replace( '.', '' ); + + // Exponential form? + if ( ( i = str.search( /e/i ) ) > 0 ) { + + // Determine exponent. + if ( e < 0 ) e = i; + e += +str.slice( i + 1 ); + str = str.substring( 0, i ); + } else if ( e < 0 ) { + + // Integer. + e = str.length; + } + + // Determine leading zeros. + for ( i = 0; str.charCodeAt(i) === 48; i++ ); + + // Determine trailing zeros. + for ( len = str.length; str.charCodeAt(--len) === 48; ); + str = str.slice( i, len + 1 ); + + if (str) { + len = str.length; + + // Disallow numbers with over 15 significant digits if number type. + // 'new BigNumber() number type has more than 15 significant digits: {n}' + if ( num && ERRORS && len > 15 ) raise( id, tooManyDigits, x.s * n ); + + e = e - i - 1; + + // Overflow? + if ( e > MAX_EXP ) { + + // Infinity. + x.c = x.e = null; + + // Underflow? + } else if ( e < MIN_EXP ) { + + // Zero. + x.c = [ x.e = 0 ]; + } else { + x.e = e; + x.c = []; + + // Transform base + + // e is the base 10 exponent. + // i is where to slice str to get the first element of the coefficient array. + i = ( e + 1 ) % LOG_BASE; + if ( e < 0 ) i += LOG_BASE; + + if ( i < len ) { + if (i) x.c.push( +str.slice( 0, i ) ); + + for ( len -= LOG_BASE; i < len; ) { + x.c.push( +str.slice( i, i += LOG_BASE ) ); + } + + str = str.slice(i); + i = LOG_BASE - str.length; + } else { + i -= len; + } + + for ( ; i--; str += '0' ); + x.c.push( +str ); + } + } else { + + // Zero. + x.c = [ x.e = 0 ]; + } + + id = 0; + } + + + // CONSTRUCTOR PROPERTIES + + + BigNumber.another = another; + + BigNumber.ROUND_UP = 0; + BigNumber.ROUND_DOWN = 1; + BigNumber.ROUND_CEIL = 2; + BigNumber.ROUND_FLOOR = 3; + BigNumber.ROUND_HALF_UP = 4; + BigNumber.ROUND_HALF_DOWN = 5; + BigNumber.ROUND_HALF_EVEN = 6; + BigNumber.ROUND_HALF_CEIL = 7; + BigNumber.ROUND_HALF_FLOOR = 8; + BigNumber.EUCLID = 9; + + + /* + * Configure infrequently-changing library-wide settings. + * + * Accept an object or an argument list, with one or many of the following properties or + * parameters respectively: + * + * DECIMAL_PLACES {number} Integer, 0 to MAX inclusive + * ROUNDING_MODE {number} Integer, 0 to 8 inclusive + * EXPONENTIAL_AT {number|number[]} Integer, -MAX to MAX inclusive or + * [integer -MAX to 0 incl., 0 to MAX incl.] + * RANGE {number|number[]} Non-zero integer, -MAX to MAX inclusive or + * [integer -MAX to -1 incl., integer 1 to MAX incl.] + * ERRORS {boolean|number} true, false, 1 or 0 + * CRYPTO {boolean|number} true, false, 1 or 0 + * MODULO_MODE {number} 0 to 9 inclusive + * POW_PRECISION {number} 0 to MAX inclusive + * FORMAT {object} See BigNumber.prototype.toFormat + * decimalSeparator {string} + * groupSeparator {string} + * groupSize {number} + * secondaryGroupSize {number} + * fractionGroupSeparator {string} + * fractionGroupSize {number} + * + * (The values assigned to the above FORMAT object properties are not checked for validity.) + * + * E.g. + * BigNumber.config(20, 4) is equivalent to + * BigNumber.config({ DECIMAL_PLACES : 20, ROUNDING_MODE : 4 }) + * + * Ignore properties/parameters set to null or undefined. + * Return an object with the properties current values. + */ + BigNumber.config = function () { + var v, p, + i = 0, + r = {}, + a = arguments, + o = a[0], + has = o && typeof o == 'object' + ? function () { if ( o.hasOwnProperty(p) ) return ( v = o[p] ) != null; } + : function () { if ( a.length > i ) return ( v = a[i++] ) != null; }; + + // DECIMAL_PLACES {number} Integer, 0 to MAX inclusive. + // 'config() DECIMAL_PLACES not an integer: {v}' + // 'config() DECIMAL_PLACES out of range: {v}' + if ( has( p = 'DECIMAL_PLACES' ) && isValidInt( v, 0, MAX, 2, p ) ) { + DECIMAL_PLACES = v | 0; + } + r[p] = DECIMAL_PLACES; + + // ROUNDING_MODE {number} Integer, 0 to 8 inclusive. + // 'config() ROUNDING_MODE not an integer: {v}' + // 'config() ROUNDING_MODE out of range: {v}' + if ( has( p = 'ROUNDING_MODE' ) && isValidInt( v, 0, 8, 2, p ) ) { + ROUNDING_MODE = v | 0; + } + r[p] = ROUNDING_MODE; + + // EXPONENTIAL_AT {number|number[]} + // Integer, -MAX to MAX inclusive or [integer -MAX to 0 inclusive, 0 to MAX inclusive]. + // 'config() EXPONENTIAL_AT not an integer: {v}' + // 'config() EXPONENTIAL_AT out of range: {v}' + if ( has( p = 'EXPONENTIAL_AT' ) ) { + + if ( isArray(v) ) { + if ( isValidInt( v[0], -MAX, 0, 2, p ) && isValidInt( v[1], 0, MAX, 2, p ) ) { + TO_EXP_NEG = v[0] | 0; + TO_EXP_POS = v[1] | 0; + } + } else if ( isValidInt( v, -MAX, MAX, 2, p ) ) { + TO_EXP_NEG = -( TO_EXP_POS = ( v < 0 ? -v : v ) | 0 ); + } + } + r[p] = [ TO_EXP_NEG, TO_EXP_POS ]; + + // RANGE {number|number[]} Non-zero integer, -MAX to MAX inclusive or + // [integer -MAX to -1 inclusive, integer 1 to MAX inclusive]. + // 'config() RANGE not an integer: {v}' + // 'config() RANGE cannot be zero: {v}' + // 'config() RANGE out of range: {v}' + if ( has( p = 'RANGE' ) ) { + + if ( isArray(v) ) { + if ( isValidInt( v[0], -MAX, -1, 2, p ) && isValidInt( v[1], 1, MAX, 2, p ) ) { + MIN_EXP = v[0] | 0; + MAX_EXP = v[1] | 0; + } + } else if ( isValidInt( v, -MAX, MAX, 2, p ) ) { + if ( v | 0 ) MIN_EXP = -( MAX_EXP = ( v < 0 ? -v : v ) | 0 ); + else if (ERRORS) raise( 2, p + ' cannot be zero', v ); + } + } + r[p] = [ MIN_EXP, MAX_EXP ]; + + // ERRORS {boolean|number} true, false, 1 or 0. + // 'config() ERRORS not a boolean or binary digit: {v}' + if ( has( p = 'ERRORS' ) ) { + + if ( v === !!v || v === 1 || v === 0 ) { + id = 0; + isValidInt = ( ERRORS = !!v ) ? intValidatorWithErrors : intValidatorNoErrors; + } else if (ERRORS) { + raise( 2, p + notBool, v ); + } + } + r[p] = ERRORS; + + // CRYPTO {boolean|number} true, false, 1 or 0. + // 'config() CRYPTO not a boolean or binary digit: {v}' + // 'config() crypto unavailable: {crypto}' + if ( has( p = 'CRYPTO' ) ) { + + if ( v === !!v || v === 1 || v === 0 ) { + CRYPTO = !!( v && crypto && typeof crypto == 'object' ); + if ( v && !CRYPTO && ERRORS ) raise( 2, 'crypto unavailable', crypto ); + } else if (ERRORS) { + raise( 2, p + notBool, v ); + } + } + r[p] = CRYPTO; + + // MODULO_MODE {number} Integer, 0 to 9 inclusive. + // 'config() MODULO_MODE not an integer: {v}' + // 'config() MODULO_MODE out of range: {v}' + if ( has( p = 'MODULO_MODE' ) && isValidInt( v, 0, 9, 2, p ) ) { + MODULO_MODE = v | 0; + } + r[p] = MODULO_MODE; + + // POW_PRECISION {number} Integer, 0 to MAX inclusive. + // 'config() POW_PRECISION not an integer: {v}' + // 'config() POW_PRECISION out of range: {v}' + if ( has( p = 'POW_PRECISION' ) && isValidInt( v, 0, MAX, 2, p ) ) { + POW_PRECISION = v | 0; + } + r[p] = POW_PRECISION; + + // FORMAT {object} + // 'config() FORMAT not an object: {v}' + if ( has( p = 'FORMAT' ) ) { + + if ( typeof v == 'object' ) { + FORMAT = v; + } else if (ERRORS) { + raise( 2, p + ' not an object', v ); + } + } + r[p] = FORMAT; + + return r; + }; + + + /* + * Return a new BigNumber whose value is the maximum of the arguments. + * + * arguments {number|string|BigNumber} + */ + BigNumber.max = function () { return maxOrMin( arguments, P.lt ); }; + + + /* + * Return a new BigNumber whose value is the minimum of the arguments. + * + * arguments {number|string|BigNumber} + */ + BigNumber.min = function () { return maxOrMin( arguments, P.gt ); }; + + + /* + * Return a new BigNumber with a random value equal to or greater than 0 and less than 1, + * and with dp, or DECIMAL_PLACES if dp is omitted, decimal places (or less if trailing + * zeros are produced). + * + * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. + * + * 'random() decimal places not an integer: {dp}' + * 'random() decimal places out of range: {dp}' + * 'random() crypto unavailable: {crypto}' + */ + BigNumber.random = (function () { + var pow2_53 = 0x20000000000000; + + // Return a 53 bit integer n, where 0 <= n < 9007199254740992. + // Check if Math.random() produces more than 32 bits of randomness. + // If it does, assume at least 53 bits are produced, otherwise assume at least 30 bits. + // 0x40000000 is 2^30, 0x800000 is 2^23, 0x1fffff is 2^21 - 1. + var random53bitInt = (Math.random() * pow2_53) & 0x1fffff + ? function () { return mathfloor( Math.random() * pow2_53 ); } + : function () { return ((Math.random() * 0x40000000 | 0) * 0x800000) + + (Math.random() * 0x800000 | 0); }; + + return function (dp) { + var a, b, e, k, v, + i = 0, + c = [], + rand = new BigNumber(ONE); + + dp = dp == null || !isValidInt( dp, 0, MAX, 14 ) ? DECIMAL_PLACES : dp | 0; + k = mathceil( dp / LOG_BASE ); + + if (CRYPTO) { + + // Browsers supporting crypto.getRandomValues. + if ( crypto && crypto.getRandomValues ) { + + a = crypto.getRandomValues( new Uint32Array( k *= 2 ) ); + + for ( ; i < k; ) { + + // 53 bits: + // ((Math.pow(2, 32) - 1) * Math.pow(2, 21)).toString(2) + // 11111 11111111 11111111 11111111 11100000 00000000 00000000 + // ((Math.pow(2, 32) - 1) >>> 11).toString(2) + // 11111 11111111 11111111 + // 0x20000 is 2^21. + v = a[i] * 0x20000 + (a[i + 1] >>> 11); + + // Rejection sampling: + // 0 <= v < 9007199254740992 + // Probability that v >= 9e15, is + // 7199254740992 / 9007199254740992 ~= 0.0008, i.e. 1 in 1251 + if ( v >= 9e15 ) { + b = crypto.getRandomValues( new Uint32Array(2) ); + a[i] = b[0]; + a[i + 1] = b[1]; + } else { + + // 0 <= v <= 8999999999999999 + // 0 <= (v % 1e14) <= 99999999999999 + c.push( v % 1e14 ); + i += 2; + } + } + i = k / 2; + + // Node.js supporting crypto.randomBytes. + } else if ( crypto && crypto.randomBytes ) { + + // buffer + a = crypto.randomBytes( k *= 7 ); + + for ( ; i < k; ) { + + // 0x1000000000000 is 2^48, 0x10000000000 is 2^40 + // 0x100000000 is 2^32, 0x1000000 is 2^24 + // 11111 11111111 11111111 11111111 11111111 11111111 11111111 + // 0 <= v < 9007199254740992 + v = ( ( a[i] & 31 ) * 0x1000000000000 ) + ( a[i + 1] * 0x10000000000 ) + + ( a[i + 2] * 0x100000000 ) + ( a[i + 3] * 0x1000000 ) + + ( a[i + 4] << 16 ) + ( a[i + 5] << 8 ) + a[i + 6]; + + if ( v >= 9e15 ) { + crypto.randomBytes(7).copy( a, i ); + } else { + + // 0 <= (v % 1e14) <= 99999999999999 + c.push( v % 1e14 ); + i += 7; + } + } + i = k / 7; + } else if (ERRORS) { + raise( 14, 'crypto unavailable', crypto ); + } + } + + // Use Math.random: CRYPTO is false or crypto is unavailable and ERRORS is false. + if (!i) { + + for ( ; i < k; ) { + v = random53bitInt(); + if ( v < 9e15 ) c[i++] = v % 1e14; + } + } + + k = c[--i]; + dp %= LOG_BASE; + + // Convert trailing digits to zeros according to dp. + if ( k && dp ) { + v = POWS_TEN[LOG_BASE - dp]; + c[i] = mathfloor( k / v ) * v; + } + + // Remove trailing elements which are zero. + for ( ; c[i] === 0; c.pop(), i-- ); + + // Zero? + if ( i < 0 ) { + c = [ e = 0 ]; + } else { + + // Remove leading elements which are zero and adjust exponent accordingly. + for ( e = -1 ; c[0] === 0; c.shift(), e -= LOG_BASE); + + // Count the digits of the first element of c to determine leading zeros, and... + for ( i = 1, v = c[0]; v >= 10; v /= 10, i++); + + // adjust the exponent accordingly. + if ( i < LOG_BASE ) e -= LOG_BASE - i; + } + + rand.e = e; + rand.c = c; + return rand; + }; + })(); + + + // PRIVATE FUNCTIONS + + + // Convert a numeric string of baseIn to a numeric string of baseOut. + function convertBase( str, baseOut, baseIn, sign ) { + var d, e, k, r, x, xc, y, + i = str.indexOf( '.' ), + dp = DECIMAL_PLACES, + rm = ROUNDING_MODE; + + if ( baseIn < 37 ) str = str.toLowerCase(); + + // Non-integer. + if ( i >= 0 ) { + k = POW_PRECISION; + + // Unlimited precision. + POW_PRECISION = 0; + str = str.replace( '.', '' ); + y = new BigNumber(baseIn); + x = y.pow( str.length - i ); + POW_PRECISION = k; + + // Convert str as if an integer, then restore the fraction part by dividing the + // result by its base raised to a power. + y.c = toBaseOut( toFixedPoint( coeffToString( x.c ), x.e ), 10, baseOut ); + y.e = y.c.length; + } + + // Convert the number as integer. + xc = toBaseOut( str, baseIn, baseOut ); + e = k = xc.length; + + // Remove trailing zeros. + for ( ; xc[--k] == 0; xc.pop() ); + if ( !xc[0] ) return '0'; + + if ( i < 0 ) { + --e; + } else { + x.c = xc; + x.e = e; + + // sign is needed for correct rounding. + x.s = sign; + x = div( x, y, dp, rm, baseOut ); + xc = x.c; + r = x.r; + e = x.e; + } + + d = e + dp + 1; + + // The rounding digit, i.e. the digit to the right of the digit that may be rounded up. + i = xc[d]; + k = baseOut / 2; + r = r || d < 0 || xc[d + 1] != null; + + r = rm < 4 ? ( i != null || r ) && ( rm == 0 || rm == ( x.s < 0 ? 3 : 2 ) ) + : i > k || i == k &&( rm == 4 || r || rm == 6 && xc[d - 1] & 1 || + rm == ( x.s < 0 ? 8 : 7 ) ); + + if ( d < 1 || !xc[0] ) { + + // 1^-dp or 0. + str = r ? toFixedPoint( '1', -dp ) : '0'; + } else { + xc.length = d; + + if (r) { + + // Rounding up may mean the previous digit has to be rounded up and so on. + for ( --baseOut; ++xc[--d] > baseOut; ) { + xc[d] = 0; + + if ( !d ) { + ++e; + xc.unshift(1); + } + } + } + + // Determine trailing zeros. + for ( k = xc.length; !xc[--k]; ); + + // E.g. [4, 11, 15] becomes 4bf. + for ( i = 0, str = ''; i <= k; str += ALPHABET.charAt( xc[i++] ) ); + str = toFixedPoint( str, e ); + } + + // The caller will add the sign. + return str; + } + + + // Perform division in the specified base. Called by div and convertBase. + div = (function () { + + // Assume non-zero x and k. + function multiply( x, k, base ) { + var m, temp, xlo, xhi, + carry = 0, + i = x.length, + klo = k % SQRT_BASE, + khi = k / SQRT_BASE | 0; + + for ( x = x.slice(); i--; ) { + xlo = x[i] % SQRT_BASE; + xhi = x[i] / SQRT_BASE | 0; + m = khi * xlo + xhi * klo; + temp = klo * xlo + ( ( m % SQRT_BASE ) * SQRT_BASE ) + carry; + carry = ( temp / base | 0 ) + ( m / SQRT_BASE | 0 ) + khi * xhi; + x[i] = temp % base; + } + + if (carry) x.unshift(carry); + + return x; + } + + function compare( a, b, aL, bL ) { + var i, cmp; + + if ( aL != bL ) { + cmp = aL > bL ? 1 : -1; + } else { + + for ( i = cmp = 0; i < aL; i++ ) { + + if ( a[i] != b[i] ) { + cmp = a[i] > b[i] ? 1 : -1; + break; + } + } + } + return cmp; + } + + function subtract( a, b, aL, base ) { + var i = 0; + + // Subtract b from a. + for ( ; aL--; ) { + a[aL] -= i; + i = a[aL] < b[aL] ? 1 : 0; + a[aL] = i * base + a[aL] - b[aL]; + } + + // Remove leading zeros. + for ( ; !a[0] && a.length > 1; a.shift() ); + } + + // x: dividend, y: divisor. + return function ( x, y, dp, rm, base ) { + var cmp, e, i, more, n, prod, prodL, q, qc, rem, remL, rem0, xi, xL, yc0, + yL, yz, + s = x.s == y.s ? 1 : -1, + xc = x.c, + yc = y.c; + + // Either NaN, Infinity or 0? + if ( !xc || !xc[0] || !yc || !yc[0] ) { + + return new BigNumber( + + // Return NaN if either NaN, or both Infinity or 0. + !x.s || !y.s || ( xc ? yc && xc[0] == yc[0] : !yc ) ? NaN : + + // Return ±0 if x is ±0 or y is ±Infinity, or return ±Infinity as y is ±0. + xc && xc[0] == 0 || !yc ? s * 0 : s / 0 + ); + } + + q = new BigNumber(s); + qc = q.c = []; + e = x.e - y.e; + s = dp + e + 1; + + if ( !base ) { + base = BASE; + e = bitFloor( x.e / LOG_BASE ) - bitFloor( y.e / LOG_BASE ); + s = s / LOG_BASE | 0; + } + + // Result exponent may be one less then the current value of e. + // The coefficients of the BigNumbers from convertBase may have trailing zeros. + for ( i = 0; yc[i] == ( xc[i] || 0 ); i++ ); + if ( yc[i] > ( xc[i] || 0 ) ) e--; + + if ( s < 0 ) { + qc.push(1); + more = true; + } else { + xL = xc.length; + yL = yc.length; + i = 0; + s += 2; + + // Normalise xc and yc so highest order digit of yc is >= base / 2. + + n = mathfloor( base / ( yc[0] + 1 ) ); + + // Not necessary, but to handle odd bases where yc[0] == ( base / 2 ) - 1. + // if ( n > 1 || n++ == 1 && yc[0] < base / 2 ) { + if ( n > 1 ) { + yc = multiply( yc, n, base ); + xc = multiply( xc, n, base ); + yL = yc.length; + xL = xc.length; + } + + xi = yL; + rem = xc.slice( 0, yL ); + remL = rem.length; + + // Add zeros to make remainder as long as divisor. + for ( ; remL < yL; rem[remL++] = 0 ); + yz = yc.slice(); + yz.unshift(0); + yc0 = yc[0]; + if ( yc[1] >= base / 2 ) yc0++; + // Not necessary, but to prevent trial digit n > base, when using base 3. + // else if ( base == 3 && yc0 == 1 ) yc0 = 1 + 1e-15; + + do { + n = 0; + + // Compare divisor and remainder. + cmp = compare( yc, rem, yL, remL ); + + // If divisor < remainder. + if ( cmp < 0 ) { + + // Calculate trial digit, n. + + rem0 = rem[0]; + if ( yL != remL ) rem0 = rem0 * base + ( rem[1] || 0 ); + + // n is how many times the divisor goes into the current remainder. + n = mathfloor( rem0 / yc0 ); + + // Algorithm: + // 1. product = divisor * trial digit (n) + // 2. if product > remainder: product -= divisor, n-- + // 3. remainder -= product + // 4. if product was < remainder at 2: + // 5. compare new remainder and divisor + // 6. If remainder > divisor: remainder -= divisor, n++ + + if ( n > 1 ) { + + // n may be > base only when base is 3. + if (n >= base) n = base - 1; + + // product = divisor * trial digit. + prod = multiply( yc, n, base ); + prodL = prod.length; + remL = rem.length; + + // Compare product and remainder. + // If product > remainder. + // Trial digit n too high. + // n is 1 too high about 5% of the time, and is not known to have + // ever been more than 1 too high. + while ( compare( prod, rem, prodL, remL ) == 1 ) { + n--; + + // Subtract divisor from product. + subtract( prod, yL < prodL ? yz : yc, prodL, base ); + prodL = prod.length; + cmp = 1; + } + } else { + + // n is 0 or 1, cmp is -1. + // If n is 0, there is no need to compare yc and rem again below, + // so change cmp to 1 to avoid it. + // If n is 1, leave cmp as -1, so yc and rem are compared again. + if ( n == 0 ) { + + // divisor < remainder, so n must be at least 1. + cmp = n = 1; + } + + // product = divisor + prod = yc.slice(); + prodL = prod.length; + } + + if ( prodL < remL ) prod.unshift(0); + + // Subtract product from remainder. + subtract( rem, prod, remL, base ); + remL = rem.length; + + // If product was < remainder. + if ( cmp == -1 ) { + + // Compare divisor and new remainder. + // If divisor < new remainder, subtract divisor from remainder. + // Trial digit n too low. + // n is 1 too low about 5% of the time, and very rarely 2 too low. + while ( compare( yc, rem, yL, remL ) < 1 ) { + n++; + + // Subtract divisor from remainder. + subtract( rem, yL < remL ? yz : yc, remL, base ); + remL = rem.length; + } + } + } else if ( cmp === 0 ) { + n++; + rem = [0]; + } // else cmp === 1 and n will be 0 + + // Add the next digit, n, to the result array. + qc[i++] = n; + + // Update the remainder. + if ( rem[0] ) { + rem[remL++] = xc[xi] || 0; + } else { + rem = [ xc[xi] ]; + remL = 1; + } + } while ( ( xi++ < xL || rem[0] != null ) && s-- ); + + more = rem[0] != null; + + // Leading zero? + if ( !qc[0] ) qc.shift(); + } + + if ( base == BASE ) { + + // To calculate q.e, first get the number of digits of qc[0]. + for ( i = 1, s = qc[0]; s >= 10; s /= 10, i++ ); + round( q, dp + ( q.e = i + e * LOG_BASE - 1 ) + 1, rm, more ); + + // Caller is convertBase. + } else { + q.e = e; + q.r = +more; + } + + return q; + }; + })(); + + + /* + * Return a string representing the value of BigNumber n in fixed-point or exponential + * notation rounded to the specified decimal places or significant digits. + * + * n is a BigNumber. + * i is the index of the last digit required (i.e. the digit that may be rounded up). + * rm is the rounding mode. + * caller is caller id: toExponential 19, toFixed 20, toFormat 21, toPrecision 24. + */ + function format( n, i, rm, caller ) { + var c0, e, ne, len, str; + + rm = rm != null && isValidInt( rm, 0, 8, caller, roundingMode ) + ? rm | 0 : ROUNDING_MODE; + + if ( !n.c ) return n.toString(); + c0 = n.c[0]; + ne = n.e; + + if ( i == null ) { + str = coeffToString( n.c ); + str = caller == 19 || caller == 24 && ne <= TO_EXP_NEG + ? toExponential( str, ne ) + : toFixedPoint( str, ne ); + } else { + n = round( new BigNumber(n), i, rm ); + + // n.e may have changed if the value was rounded up. + e = n.e; + + str = coeffToString( n.c ); + len = str.length; + + // toPrecision returns exponential notation if the number of significant digits + // specified is less than the number of digits necessary to represent the integer + // part of the value in fixed-point notation. + + // Exponential notation. + if ( caller == 19 || caller == 24 && ( i <= e || e <= TO_EXP_NEG ) ) { + + // Append zeros? + for ( ; len < i; str += '0', len++ ); + str = toExponential( str, e ); + + // Fixed-point notation. + } else { + i -= ne; + str = toFixedPoint( str, e ); + + // Append zeros? + if ( e + 1 > len ) { + if ( --i > 0 ) for ( str += '.'; i--; str += '0' ); + } else { + i += e - len; + if ( i > 0 ) { + if ( e + 1 == len ) str += '.'; + for ( ; i--; str += '0' ); + } + } + } + } + + return n.s < 0 && c0 ? '-' + str : str; + } + + + // Handle BigNumber.max and BigNumber.min. + function maxOrMin( args, method ) { + var m, n, + i = 0; + + if ( isArray( args[0] ) ) args = args[0]; + m = new BigNumber( args[0] ); + + for ( ; ++i < args.length; ) { + n = new BigNumber( args[i] ); + + // If any number is NaN, return NaN. + if ( !n.s ) { + m = n; + break; + } else if ( method.call( m, n ) ) { + m = n; + } + } + + return m; + } + + + /* + * Return true if n is an integer in range, otherwise throw. + * Use for argument validation when ERRORS is true. + */ + function intValidatorWithErrors( n, min, max, caller, name ) { + if ( n < min || n > max || n != truncate(n) ) { + raise( caller, ( name || 'decimal places' ) + + ( n < min || n > max ? ' out of range' : ' not an integer' ), n ); + } + + return true; + } + + + /* + * Strip trailing zeros, calculate base 10 exponent and check against MIN_EXP and MAX_EXP. + * Called by minus, plus and times. + */ + function normalise( n, c, e ) { + var i = 1, + j = c.length; + + // Remove trailing zeros. + for ( ; !c[--j]; c.pop() ); + + // Calculate the base 10 exponent. First get the number of digits of c[0]. + for ( j = c[0]; j >= 10; j /= 10, i++ ); + + // Overflow? + if ( ( e = i + e * LOG_BASE - 1 ) > MAX_EXP ) { + + // Infinity. + n.c = n.e = null; + + // Underflow? + } else if ( e < MIN_EXP ) { + + // Zero. + n.c = [ n.e = 0 ]; + } else { + n.e = e; + n.c = c; + } + + return n; + } + + + // Handle values that fail the validity test in BigNumber. + parseNumeric = (function () { + var basePrefix = /^(-?)0([xbo])/i, + dotAfter = /^([^.]+)\.$/, + dotBefore = /^\.([^.]+)$/, + isInfinityOrNaN = /^-?(Infinity|NaN)$/, + whitespaceOrPlus = /^\s*\+|^\s+|\s+$/g; + + return function ( x, str, num, b ) { + var base, + s = num ? str : str.replace( whitespaceOrPlus, '' ); + + // No exception on ±Infinity or NaN. + if ( isInfinityOrNaN.test(s) ) { + x.s = isNaN(s) ? null : s < 0 ? -1 : 1; + } else { + if ( !num ) { + + // basePrefix = /^(-?)0([xbo])(?=\w[\w.]*$)/i + s = s.replace( basePrefix, function ( m, p1, p2 ) { + base = ( p2 = p2.toLowerCase() ) == 'x' ? 16 : p2 == 'b' ? 2 : 8; + return !b || b == base ? p1 : m; + }); + + if (b) { + base = b; + + // E.g. '1.' to '1', '.1' to '0.1' + s = s.replace( dotAfter, '$1' ).replace( dotBefore, '0.$1' ); + } + + if ( str != s ) return new BigNumber( s, base ); + } + + // 'new BigNumber() not a number: {n}' + // 'new BigNumber() not a base {b} number: {n}' + if (ERRORS) raise( id, 'not a' + ( b ? ' base ' + b : '' ) + ' number', str ); + x.s = null; + } + + x.c = x.e = null; + id = 0; + } + })(); + + + // Throw a BigNumber Error. + function raise( caller, msg, val ) { + var error = new Error( [ + 'new BigNumber', // 0 + 'cmp', // 1 + 'config', // 2 + 'div', // 3 + 'divToInt', // 4 + 'eq', // 5 + 'gt', // 6 + 'gte', // 7 + 'lt', // 8 + 'lte', // 9 + 'minus', // 10 + 'mod', // 11 + 'plus', // 12 + 'precision', // 13 + 'random', // 14 + 'round', // 15 + 'shift', // 16 + 'times', // 17 + 'toDigits', // 18 + 'toExponential', // 19 + 'toFixed', // 20 + 'toFormat', // 21 + 'toFraction', // 22 + 'pow', // 23 + 'toPrecision', // 24 + 'toString', // 25 + 'BigNumber' // 26 + ][caller] + '() ' + msg + ': ' + val ); + + error.name = 'BigNumber Error'; + id = 0; + throw error; + } + + + /* + * Round x to sd significant digits using rounding mode rm. Check for over/under-flow. + * If r is truthy, it is known that there are more digits after the rounding digit. + */ + function round( x, sd, rm, r ) { + var d, i, j, k, n, ni, rd, + xc = x.c, + pows10 = POWS_TEN; + + // if x is not Infinity or NaN... + if (xc) { + + // rd is the rounding digit, i.e. the digit after the digit that may be rounded up. + // n is a base 1e14 number, the value of the element of array x.c containing rd. + // ni is the index of n within x.c. + // d is the number of digits of n. + // i is the index of rd within n including leading zeros. + // j is the actual index of rd within n (if < 0, rd is a leading zero). + out: { + + // Get the number of digits of the first element of xc. + for ( d = 1, k = xc[0]; k >= 10; k /= 10, d++ ); + i = sd - d; + + // If the rounding digit is in the first element of xc... + if ( i < 0 ) { + i += LOG_BASE; + j = sd; + n = xc[ ni = 0 ]; + + // Get the rounding digit at index j of n. + rd = n / pows10[ d - j - 1 ] % 10 | 0; + } else { + ni = mathceil( ( i + 1 ) / LOG_BASE ); + + if ( ni >= xc.length ) { + + if (r) { + + // Needed by sqrt. + for ( ; xc.length <= ni; xc.push(0) ); + n = rd = 0; + d = 1; + i %= LOG_BASE; + j = i - LOG_BASE + 1; + } else { + break out; + } + } else { + n = k = xc[ni]; + + // Get the number of digits of n. + for ( d = 1; k >= 10; k /= 10, d++ ); + + // Get the index of rd within n. + i %= LOG_BASE; + + // Get the index of rd within n, adjusted for leading zeros. + // The number of leading zeros of n is given by LOG_BASE - d. + j = i - LOG_BASE + d; + + // Get the rounding digit at index j of n. + rd = j < 0 ? 0 : n / pows10[ d - j - 1 ] % 10 | 0; + } + } + + r = r || sd < 0 || + + // Are there any non-zero digits after the rounding digit? + // The expression n % pows10[ d - j - 1 ] returns all digits of n to the right + // of the digit at j, e.g. if n is 908714 and j is 2, the expression gives 714. + xc[ni + 1] != null || ( j < 0 ? n : n % pows10[ d - j - 1 ] ); + + r = rm < 4 + ? ( rd || r ) && ( rm == 0 || rm == ( x.s < 0 ? 3 : 2 ) ) + : rd > 5 || rd == 5 && ( rm == 4 || r || rm == 6 && + + // Check whether the digit to the left of the rounding digit is odd. + ( ( i > 0 ? j > 0 ? n / pows10[ d - j ] : 0 : xc[ni - 1] ) % 10 ) & 1 || + rm == ( x.s < 0 ? 8 : 7 ) ); + + if ( sd < 1 || !xc[0] ) { + xc.length = 0; + + if (r) { + + // Convert sd to decimal places. + sd -= x.e + 1; + + // 1, 0.1, 0.01, 0.001, 0.0001 etc. + xc[0] = pows10[ sd % LOG_BASE ]; + x.e = -sd || 0; + } else { + + // Zero. + xc[0] = x.e = 0; + } + + return x; + } + + // Remove excess digits. + if ( i == 0 ) { + xc.length = ni; + k = 1; + ni--; + } else { + xc.length = ni + 1; + k = pows10[ LOG_BASE - i ]; + + // E.g. 56700 becomes 56000 if 7 is the rounding digit. + // j > 0 means i > number of leading zeros of n. + xc[ni] = j > 0 ? mathfloor( n / pows10[ d - j ] % pows10[j] ) * k : 0; + } + + // Round up? + if (r) { + + for ( ; ; ) { + + // If the digit to be rounded up is in the first element of xc... + if ( ni == 0 ) { + + // i will be the length of xc[0] before k is added. + for ( i = 1, j = xc[0]; j >= 10; j /= 10, i++ ); + j = xc[0] += k; + for ( k = 1; j >= 10; j /= 10, k++ ); + + // if i != k the length has increased. + if ( i != k ) { + x.e++; + if ( xc[0] == BASE ) xc[0] = 1; + } + + break; + } else { + xc[ni] += k; + if ( xc[ni] != BASE ) break; + xc[ni--] = 0; + k = 1; + } + } + } + + // Remove trailing zeros. + for ( i = xc.length; xc[--i] === 0; xc.pop() ); + } + + // Overflow? Infinity. + if ( x.e > MAX_EXP ) { + x.c = x.e = null; + + // Underflow? Zero. + } else if ( x.e < MIN_EXP ) { + x.c = [ x.e = 0 ]; + } + } + + return x; + } + + + // PROTOTYPE/INSTANCE METHODS + + + /* + * Return a new BigNumber whose value is the absolute value of this BigNumber. + */ + P.absoluteValue = P.abs = function () { + var x = new BigNumber(this); + if ( x.s < 0 ) x.s = 1; + return x; + }; + + + /* + * Return a new BigNumber whose value is the value of this BigNumber rounded to a whole + * number in the direction of Infinity. + */ + P.ceil = function () { + return round( new BigNumber(this), this.e + 1, 2 ); + }; + + + /* + * Return + * 1 if the value of this BigNumber is greater than the value of BigNumber(y, b), + * -1 if the value of this BigNumber is less than the value of BigNumber(y, b), + * 0 if they have the same value, + * or null if the value of either is NaN. + */ + P.comparedTo = P.cmp = function ( y, b ) { + id = 1; + return compare( this, new BigNumber( y, b ) ); + }; + + + /* + * Return the number of decimal places of the value of this BigNumber, or null if the value + * of this BigNumber is ±Infinity or NaN. + */ + P.decimalPlaces = P.dp = function () { + var n, v, + c = this.c; + + if ( !c ) return null; + n = ( ( v = c.length - 1 ) - bitFloor( this.e / LOG_BASE ) ) * LOG_BASE; + + // Subtract the number of trailing zeros of the last number. + if ( v = c[v] ) for ( ; v % 10 == 0; v /= 10, n-- ); + if ( n < 0 ) n = 0; + + return n; + }; + + + /* + * n / 0 = I + * n / N = N + * n / I = 0 + * 0 / n = 0 + * 0 / 0 = N + * 0 / N = N + * 0 / I = 0 + * N / n = N + * N / 0 = N + * N / N = N + * N / I = N + * I / n = I + * I / 0 = I + * I / N = N + * I / I = N + * + * Return a new BigNumber whose value is the value of this BigNumber divided by the value of + * BigNumber(y, b), rounded according to DECIMAL_PLACES and ROUNDING_MODE. + */ + P.dividedBy = P.div = function ( y, b ) { + id = 3; + return div( this, new BigNumber( y, b ), DECIMAL_PLACES, ROUNDING_MODE ); + }; + + + /* + * Return a new BigNumber whose value is the integer part of dividing the value of this + * BigNumber by the value of BigNumber(y, b). + */ + P.dividedToIntegerBy = P.divToInt = function ( y, b ) { + id = 4; + return div( this, new BigNumber( y, b ), 0, 1 ); + }; + + + /* + * Return true if the value of this BigNumber is equal to the value of BigNumber(y, b), + * otherwise returns false. + */ + P.equals = P.eq = function ( y, b ) { + id = 5; + return compare( this, new BigNumber( y, b ) ) === 0; + }; + + + /* + * Return a new BigNumber whose value is the value of this BigNumber rounded to a whole + * number in the direction of -Infinity. + */ + P.floor = function () { + return round( new BigNumber(this), this.e + 1, 3 ); + }; + + + /* + * Return true if the value of this BigNumber is greater than the value of BigNumber(y, b), + * otherwise returns false. + */ + P.greaterThan = P.gt = function ( y, b ) { + id = 6; + return compare( this, new BigNumber( y, b ) ) > 0; + }; + + + /* + * Return true if the value of this BigNumber is greater than or equal to the value of + * BigNumber(y, b), otherwise returns false. + */ + P.greaterThanOrEqualTo = P.gte = function ( y, b ) { + id = 7; + return ( b = compare( this, new BigNumber( y, b ) ) ) === 1 || b === 0; + + }; + + + /* + * Return true if the value of this BigNumber is a finite number, otherwise returns false. + */ + P.isFinite = function () { + return !!this.c; + }; + + + /* + * Return true if the value of this BigNumber is an integer, otherwise return false. + */ + P.isInteger = P.isInt = function () { + return !!this.c && bitFloor( this.e / LOG_BASE ) > this.c.length - 2; + }; + + + /* + * Return true if the value of this BigNumber is NaN, otherwise returns false. + */ + P.isNaN = function () { + return !this.s; + }; + + + /* + * Return true if the value of this BigNumber is negative, otherwise returns false. + */ + P.isNegative = P.isNeg = function () { + return this.s < 0; + }; + + + /* + * Return true if the value of this BigNumber is 0 or -0, otherwise returns false. + */ + P.isZero = function () { + return !!this.c && this.c[0] == 0; + }; + + + /* + * Return true if the value of this BigNumber is less than the value of BigNumber(y, b), + * otherwise returns false. + */ + P.lessThan = P.lt = function ( y, b ) { + id = 8; + return compare( this, new BigNumber( y, b ) ) < 0; + }; + + + /* + * Return true if the value of this BigNumber is less than or equal to the value of + * BigNumber(y, b), otherwise returns false. + */ + P.lessThanOrEqualTo = P.lte = function ( y, b ) { + id = 9; + return ( b = compare( this, new BigNumber( y, b ) ) ) === -1 || b === 0; + }; + + + /* + * n - 0 = n + * n - N = N + * n - I = -I + * 0 - n = -n + * 0 - 0 = 0 + * 0 - N = N + * 0 - I = -I + * N - n = N + * N - 0 = N + * N - N = N + * N - I = N + * I - n = I + * I - 0 = I + * I - N = N + * I - I = N + * + * Return a new BigNumber whose value is the value of this BigNumber minus the value of + * BigNumber(y, b). + */ + P.minus = P.sub = function ( y, b ) { + var i, j, t, xLTy, + x = this, + a = x.s; + + id = 10; + y = new BigNumber( y, b ); + b = y.s; + + // Either NaN? + if ( !a || !b ) return new BigNumber(NaN); + + // Signs differ? + if ( a != b ) { + y.s = -b; + return x.plus(y); + } + + var xe = x.e / LOG_BASE, + ye = y.e / LOG_BASE, + xc = x.c, + yc = y.c; + + if ( !xe || !ye ) { + + // Either Infinity? + if ( !xc || !yc ) return xc ? ( y.s = -b, y ) : new BigNumber( yc ? x : NaN ); + + // Either zero? + if ( !xc[0] || !yc[0] ) { + + // Return y if y is non-zero, x if x is non-zero, or zero if both are zero. + return yc[0] ? ( y.s = -b, y ) : new BigNumber( xc[0] ? x : + + // IEEE 754 (2008) 6.3: n - n = -0 when rounding to -Infinity + ROUNDING_MODE == 3 ? -0 : 0 ); + } + } + + xe = bitFloor(xe); + ye = bitFloor(ye); + xc = xc.slice(); + + // Determine which is the bigger number. + if ( a = xe - ye ) { + + if ( xLTy = a < 0 ) { + a = -a; + t = xc; + } else { + ye = xe; + t = yc; + } + + t.reverse(); + + // Prepend zeros to equalise exponents. + for ( b = a; b--; t.push(0) ); + t.reverse(); + } else { + + // Exponents equal. Check digit by digit. + j = ( xLTy = ( a = xc.length ) < ( b = yc.length ) ) ? a : b; + + for ( a = b = 0; b < j; b++ ) { + + if ( xc[b] != yc[b] ) { + xLTy = xc[b] < yc[b]; + break; + } + } + } + + // x < y? Point xc to the array of the bigger number. + if (xLTy) t = xc, xc = yc, yc = t, y.s = -y.s; + + b = ( j = yc.length ) - ( i = xc.length ); + + // Append zeros to xc if shorter. + // No need to add zeros to yc if shorter as subtract only needs to start at yc.length. + if ( b > 0 ) for ( ; b--; xc[i++] = 0 ); + b = BASE - 1; + + // Subtract yc from xc. + for ( ; j > a; ) { + + if ( xc[--j] < yc[j] ) { + for ( i = j; i && !xc[--i]; xc[i] = b ); + --xc[i]; + xc[j] += BASE; + } + + xc[j] -= yc[j]; + } + + // Remove leading zeros and adjust exponent accordingly. + for ( ; xc[0] == 0; xc.shift(), --ye ); + + // Zero? + if ( !xc[0] ) { + + // Following IEEE 754 (2008) 6.3, + // n - n = +0 but n - n = -0 when rounding towards -Infinity. + y.s = ROUNDING_MODE == 3 ? -1 : 1; + y.c = [ y.e = 0 ]; + return y; + } + + // No need to check for Infinity as +x - +y != Infinity && -x - -y != Infinity + // for finite x and y. + return normalise( y, xc, ye ); + }; + + + /* + * n % 0 = N + * n % N = N + * n % I = n + * 0 % n = 0 + * -0 % n = -0 + * 0 % 0 = N + * 0 % N = N + * 0 % I = 0 + * N % n = N + * N % 0 = N + * N % N = N + * N % I = N + * I % n = N + * I % 0 = N + * I % N = N + * I % I = N + * + * Return a new BigNumber whose value is the value of this BigNumber modulo the value of + * BigNumber(y, b). The result depends on the value of MODULO_MODE. + */ + P.modulo = P.mod = function ( y, b ) { + var q, s, + x = this; + + id = 11; + y = new BigNumber( y, b ); + + // Return NaN if x is Infinity or NaN, or y is NaN or zero. + if ( !x.c || !y.s || y.c && !y.c[0] ) { + return new BigNumber(NaN); + + // Return x if y is Infinity or x is zero. + } else if ( !y.c || x.c && !x.c[0] ) { + return new BigNumber(x); + } + + if ( MODULO_MODE == 9 ) { + + // Euclidian division: q = sign(y) * floor(x / abs(y)) + // r = x - qy where 0 <= r < abs(y) + s = y.s; + y.s = 1; + q = div( x, y, 0, 3 ); + y.s = s; + q.s *= s; + } else { + q = div( x, y, 0, MODULO_MODE ); + } + + return x.minus( q.times(y) ); + }; + + + /* + * Return a new BigNumber whose value is the value of this BigNumber negated, + * i.e. multiplied by -1. + */ + P.negated = P.neg = function () { + var x = new BigNumber(this); + x.s = -x.s || null; + return x; + }; + + + /* + * n + 0 = n + * n + N = N + * n + I = I + * 0 + n = n + * 0 + 0 = 0 + * 0 + N = N + * 0 + I = I + * N + n = N + * N + 0 = N + * N + N = N + * N + I = N + * I + n = I + * I + 0 = I + * I + N = N + * I + I = I + * + * Return a new BigNumber whose value is the value of this BigNumber plus the value of + * BigNumber(y, b). + */ + P.plus = P.add = function ( y, b ) { + var t, + x = this, + a = x.s; + + id = 12; + y = new BigNumber( y, b ); + b = y.s; + + // Either NaN? + if ( !a || !b ) return new BigNumber(NaN); + + // Signs differ? + if ( a != b ) { + y.s = -b; + return x.minus(y); + } + + var xe = x.e / LOG_BASE, + ye = y.e / LOG_BASE, + xc = x.c, + yc = y.c; + + if ( !xe || !ye ) { + + // Return ±Infinity if either ±Infinity. + if ( !xc || !yc ) return new BigNumber( a / 0 ); + + // Either zero? + // Return y if y is non-zero, x if x is non-zero, or zero if both are zero. + if ( !xc[0] || !yc[0] ) return yc[0] ? y : new BigNumber( xc[0] ? x : a * 0 ); + } + + xe = bitFloor(xe); + ye = bitFloor(ye); + xc = xc.slice(); + + // Prepend zeros to equalise exponents. Faster to use reverse then do unshifts. + if ( a = xe - ye ) { + if ( a > 0 ) { + ye = xe; + t = yc; + } else { + a = -a; + t = xc; + } + + t.reverse(); + for ( ; a--; t.push(0) ); + t.reverse(); + } + + a = xc.length; + b = yc.length; + + // Point xc to the longer array, and b to the shorter length. + if ( a - b < 0 ) t = yc, yc = xc, xc = t, b = a; + + // Only start adding at yc.length - 1 as the further digits of xc can be ignored. + for ( a = 0; b; ) { + a = ( xc[--b] = xc[b] + yc[b] + a ) / BASE | 0; + xc[b] %= BASE; + } + + if (a) { + xc.unshift(a); + ++ye; + } + + // No need to check for zero, as +x + +y != 0 && -x + -y != 0 + // ye = MAX_EXP + 1 possible + return normalise( y, xc, ye ); + }; + + + /* + * Return the number of significant digits of the value of this BigNumber. + * + * [z] {boolean|number} Whether to count integer-part trailing zeros: true, false, 1 or 0. + */ + P.precision = P.sd = function (z) { + var n, v, + x = this, + c = x.c; + + // 'precision() argument not a boolean or binary digit: {z}' + if ( z != null && z !== !!z && z !== 1 && z !== 0 ) { + if (ERRORS) raise( 13, 'argument' + notBool, z ); + if ( z != !!z ) z = null; + } + + if ( !c ) return null; + v = c.length - 1; + n = v * LOG_BASE + 1; + + if ( v = c[v] ) { + + // Subtract the number of trailing zeros of the last element. + for ( ; v % 10 == 0; v /= 10, n-- ); + + // Add the number of digits of the first element. + for ( v = c[0]; v >= 10; v /= 10, n++ ); + } + + if ( z && x.e + 1 > n ) n = x.e + 1; + + return n; + }; + + + /* + * Return a new BigNumber whose value is the value of this BigNumber rounded to a maximum of + * dp decimal places using rounding mode rm, or to 0 and ROUNDING_MODE respectively if + * omitted. + * + * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. + * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. + * + * 'round() decimal places out of range: {dp}' + * 'round() decimal places not an integer: {dp}' + * 'round() rounding mode not an integer: {rm}' + * 'round() rounding mode out of range: {rm}' + */ + P.round = function ( dp, rm ) { + var n = new BigNumber(this); + + if ( dp == null || isValidInt( dp, 0, MAX, 15 ) ) { + round( n, ~~dp + this.e + 1, rm == null || + !isValidInt( rm, 0, 8, 15, roundingMode ) ? ROUNDING_MODE : rm | 0 ); + } + + return n; + }; + + + /* + * Return a new BigNumber whose value is the value of this BigNumber shifted by k places + * (powers of 10). Shift to the right if n > 0, and to the left if n < 0. + * + * k {number} Integer, -MAX_SAFE_INTEGER to MAX_SAFE_INTEGER inclusive. + * + * If k is out of range and ERRORS is false, the result will be ±0 if k < 0, or ±Infinity + * otherwise. + * + * 'shift() argument not an integer: {k}' + * 'shift() argument out of range: {k}' + */ + P.shift = function (k) { + var n = this; + return isValidInt( k, -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER, 16, 'argument' ) + + // k < 1e+21, or truncate(k) will produce exponential notation. + ? n.times( '1e' + truncate(k) ) + : new BigNumber( n.c && n.c[0] && ( k < -MAX_SAFE_INTEGER || k > MAX_SAFE_INTEGER ) + ? n.s * ( k < 0 ? 0 : 1 / 0 ) + : n ); + }; + + + /* + * sqrt(-n) = N + * sqrt( N) = N + * sqrt(-I) = N + * sqrt( I) = I + * sqrt( 0) = 0 + * sqrt(-0) = -0 + * + * Return a new BigNumber whose value is the square root of the value of this BigNumber, + * rounded according to DECIMAL_PLACES and ROUNDING_MODE. + */ + P.squareRoot = P.sqrt = function () { + var m, n, r, rep, t, + x = this, + c = x.c, + s = x.s, + e = x.e, + dp = DECIMAL_PLACES + 4, + half = new BigNumber('0.5'); + + // Negative/NaN/Infinity/zero? + if ( s !== 1 || !c || !c[0] ) { + return new BigNumber( !s || s < 0 && ( !c || c[0] ) ? NaN : c ? x : 1 / 0 ); + } + + // Initial estimate. + s = Math.sqrt( +x ); + + // Math.sqrt underflow/overflow? + // Pass x to Math.sqrt as integer, then adjust the exponent of the result. + if ( s == 0 || s == 1 / 0 ) { + n = coeffToString(c); + if ( ( n.length + e ) % 2 == 0 ) n += '0'; + s = Math.sqrt(n); + e = bitFloor( ( e + 1 ) / 2 ) - ( e < 0 || e % 2 ); + + if ( s == 1 / 0 ) { + n = '1e' + e; + } else { + n = s.toExponential(); + n = n.slice( 0, n.indexOf('e') + 1 ) + e; + } + + r = new BigNumber(n); + } else { + r = new BigNumber( s + '' ); + } + + // Check for zero. + // r could be zero if MIN_EXP is changed after the this value was created. + // This would cause a division by zero (x/t) and hence Infinity below, which would cause + // coeffToString to throw. + if ( r.c[0] ) { + e = r.e; + s = e + dp; + if ( s < 3 ) s = 0; + + // Newton-Raphson iteration. + for ( ; ; ) { + t = r; + r = half.times( t.plus( div( x, t, dp, 1 ) ) ); + + if ( coeffToString( t.c ).slice( 0, s ) === ( n = + coeffToString( r.c ) ).slice( 0, s ) ) { + + // The exponent of r may here be one less than the final result exponent, + // e.g 0.0009999 (e-4) --> 0.001 (e-3), so adjust s so the rounding digits + // are indexed correctly. + if ( r.e < e ) --s; + n = n.slice( s - 3, s + 1 ); + + // The 4th rounding digit may be in error by -1 so if the 4 rounding digits + // are 9999 or 4999 (i.e. approaching a rounding boundary) continue the + // iteration. + if ( n == '9999' || !rep && n == '4999' ) { + + // On the first iteration only, check to see if rounding up gives the + // exact result as the nines may infinitely repeat. + if ( !rep ) { + round( t, t.e + DECIMAL_PLACES + 2, 0 ); + + if ( t.times(t).eq(x) ) { + r = t; + break; + } + } + + dp += 4; + s += 4; + rep = 1; + } else { + + // If rounding digits are null, 0{0,4} or 50{0,3}, check for exact + // result. If not, then there are further digits and m will be truthy. + if ( !+n || !+n.slice(1) && n.charAt(0) == '5' ) { + + // Truncate to the first rounding digit. + round( r, r.e + DECIMAL_PLACES + 2, 1 ); + m = !r.times(r).eq(x); + } + + break; + } + } + } + } + + return round( r, r.e + DECIMAL_PLACES + 1, ROUNDING_MODE, m ); + }; + + + /* + * n * 0 = 0 + * n * N = N + * n * I = I + * 0 * n = 0 + * 0 * 0 = 0 + * 0 * N = N + * 0 * I = N + * N * n = N + * N * 0 = N + * N * N = N + * N * I = N + * I * n = I + * I * 0 = N + * I * N = N + * I * I = I + * + * Return a new BigNumber whose value is the value of this BigNumber times the value of + * BigNumber(y, b). + */ + P.times = P.mul = function ( y, b ) { + var c, e, i, j, k, m, xcL, xlo, xhi, ycL, ylo, yhi, zc, + base, sqrtBase, + x = this, + xc = x.c, + yc = ( id = 17, y = new BigNumber( y, b ) ).c; + + // Either NaN, ±Infinity or ±0? + if ( !xc || !yc || !xc[0] || !yc[0] ) { + + // Return NaN if either is NaN, or one is 0 and the other is Infinity. + if ( !x.s || !y.s || xc && !xc[0] && !yc || yc && !yc[0] && !xc ) { + y.c = y.e = y.s = null; + } else { + y.s *= x.s; + + // Return ±Infinity if either is ±Infinity. + if ( !xc || !yc ) { + y.c = y.e = null; + + // Return ±0 if either is ±0. + } else { + y.c = [0]; + y.e = 0; + } + } + + return y; + } + + e = bitFloor( x.e / LOG_BASE ) + bitFloor( y.e / LOG_BASE ); + y.s *= x.s; + xcL = xc.length; + ycL = yc.length; + + // Ensure xc points to longer array and xcL to its length. + if ( xcL < ycL ) zc = xc, xc = yc, yc = zc, i = xcL, xcL = ycL, ycL = i; + + // Initialise the result array with zeros. + for ( i = xcL + ycL, zc = []; i--; zc.push(0) ); + + base = BASE; + sqrtBase = SQRT_BASE; + + for ( i = ycL; --i >= 0; ) { + c = 0; + ylo = yc[i] % sqrtBase; + yhi = yc[i] / sqrtBase | 0; + + for ( k = xcL, j = i + k; j > i; ) { + xlo = xc[--k] % sqrtBase; + xhi = xc[k] / sqrtBase | 0; + m = yhi * xlo + xhi * ylo; + xlo = ylo * xlo + ( ( m % sqrtBase ) * sqrtBase ) + zc[j] + c; + c = ( xlo / base | 0 ) + ( m / sqrtBase | 0 ) + yhi * xhi; + zc[j--] = xlo % base; + } + + zc[j] = c; + } + + if (c) { + ++e; + } else { + zc.shift(); + } + + return normalise( y, zc, e ); + }; + + + /* + * Return a new BigNumber whose value is the value of this BigNumber rounded to a maximum of + * sd significant digits using rounding mode rm, or ROUNDING_MODE if rm is omitted. + * + * [sd] {number} Significant digits. Integer, 1 to MAX inclusive. + * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. + * + * 'toDigits() precision out of range: {sd}' + * 'toDigits() precision not an integer: {sd}' + * 'toDigits() rounding mode not an integer: {rm}' + * 'toDigits() rounding mode out of range: {rm}' + */ + P.toDigits = function ( sd, rm ) { + var n = new BigNumber(this); + sd = sd == null || !isValidInt( sd, 1, MAX, 18, 'precision' ) ? null : sd | 0; + rm = rm == null || !isValidInt( rm, 0, 8, 18, roundingMode ) ? ROUNDING_MODE : rm | 0; + return sd ? round( n, sd, rm ) : n; + }; + + + /* + * Return a string representing the value of this BigNumber in exponential notation and + * rounded using ROUNDING_MODE to dp fixed decimal places. + * + * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. + * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. + * + * 'toExponential() decimal places not an integer: {dp}' + * 'toExponential() decimal places out of range: {dp}' + * 'toExponential() rounding mode not an integer: {rm}' + * 'toExponential() rounding mode out of range: {rm}' + */ + P.toExponential = function ( dp, rm ) { + return format( this, + dp != null && isValidInt( dp, 0, MAX, 19 ) ? ~~dp + 1 : null, rm, 19 ); + }; + + + /* + * Return a string representing the value of this BigNumber in fixed-point notation rounding + * to dp fixed decimal places using rounding mode rm, or ROUNDING_MODE if rm is omitted. + * + * Note: as with JavaScript's number type, (-0).toFixed(0) is '0', + * but e.g. (-0.00001).toFixed(0) is '-0'. + * + * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. + * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. + * + * 'toFixed() decimal places not an integer: {dp}' + * 'toFixed() decimal places out of range: {dp}' + * 'toFixed() rounding mode not an integer: {rm}' + * 'toFixed() rounding mode out of range: {rm}' + */ + P.toFixed = function ( dp, rm ) { + return format( this, dp != null && isValidInt( dp, 0, MAX, 20 ) + ? ~~dp + this.e + 1 : null, rm, 20 ); + }; + + + /* + * Return a string representing the value of this BigNumber in fixed-point notation rounded + * using rm or ROUNDING_MODE to dp decimal places, and formatted according to the properties + * of the FORMAT object (see BigNumber.config). + * + * FORMAT = { + * decimalSeparator : '.', + * groupSeparator : ',', + * groupSize : 3, + * secondaryGroupSize : 0, + * fractionGroupSeparator : '\xA0', // non-breaking space + * fractionGroupSize : 0 + * }; + * + * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. + * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. + * + * 'toFormat() decimal places not an integer: {dp}' + * 'toFormat() decimal places out of range: {dp}' + * 'toFormat() rounding mode not an integer: {rm}' + * 'toFormat() rounding mode out of range: {rm}' + */ + P.toFormat = function ( dp, rm ) { + var str = format( this, dp != null && isValidInt( dp, 0, MAX, 21 ) + ? ~~dp + this.e + 1 : null, rm, 21 ); + + if ( this.c ) { + var i, + arr = str.split('.'), + g1 = +FORMAT.groupSize, + g2 = +FORMAT.secondaryGroupSize, + groupSeparator = FORMAT.groupSeparator, + intPart = arr[0], + fractionPart = arr[1], + isNeg = this.s < 0, + intDigits = isNeg ? intPart.slice(1) : intPart, + len = intDigits.length; + + if (g2) i = g1, g1 = g2, g2 = i, len -= i; + + if ( g1 > 0 && len > 0 ) { + i = len % g1 || g1; + intPart = intDigits.substr( 0, i ); + + for ( ; i < len; i += g1 ) { + intPart += groupSeparator + intDigits.substr( i, g1 ); + } + + if ( g2 > 0 ) intPart += groupSeparator + intDigits.slice(i); + if (isNeg) intPart = '-' + intPart; + } + + str = fractionPart + ? intPart + FORMAT.decimalSeparator + ( ( g2 = +FORMAT.fractionGroupSize ) + ? fractionPart.replace( new RegExp( '\\d{' + g2 + '}\\B', 'g' ), + '$&' + FORMAT.fractionGroupSeparator ) + : fractionPart ) + : intPart; + } + + return str; + }; + + + /* + * Return a string array representing the value of this BigNumber as a simple fraction with + * an integer numerator and an integer denominator. The denominator will be a positive + * non-zero value less than or equal to the specified maximum denominator. If a maximum + * denominator is not specified, the denominator will be the lowest value necessary to + * represent the number exactly. + * + * [md] {number|string|BigNumber} Integer >= 1 and < Infinity. The maximum denominator. + * + * 'toFraction() max denominator not an integer: {md}' + * 'toFraction() max denominator out of range: {md}' + */ + P.toFraction = function (md) { + var arr, d0, d2, e, exp, n, n0, q, s, + k = ERRORS, + x = this, + xc = x.c, + d = new BigNumber(ONE), + n1 = d0 = new BigNumber(ONE), + d1 = n0 = new BigNumber(ONE); + + if ( md != null ) { + ERRORS = false; + n = new BigNumber(md); + ERRORS = k; + + if ( !( k = n.isInt() ) || n.lt(ONE) ) { + + if (ERRORS) { + raise( 22, + 'max denominator ' + ( k ? 'out of range' : 'not an integer' ), md ); + } + + // ERRORS is false: + // If md is a finite non-integer >= 1, round it to an integer and use it. + md = !k && n.c && round( n, n.e + 1, 1 ).gte(ONE) ? n : null; + } + } + + if ( !xc ) return x.toString(); + s = coeffToString(xc); + + // Determine initial denominator. + // d is a power of 10 and the minimum max denominator that specifies the value exactly. + e = d.e = s.length - x.e - 1; + d.c[0] = POWS_TEN[ ( exp = e % LOG_BASE ) < 0 ? LOG_BASE + exp : exp ]; + md = !md || n.cmp(d) > 0 ? ( e > 0 ? d : n1 ) : n; + + exp = MAX_EXP; + MAX_EXP = 1 / 0; + n = new BigNumber(s); + + // n0 = d1 = 0 + n0.c[0] = 0; + + for ( ; ; ) { + q = div( n, d, 0, 1 ); + d2 = d0.plus( q.times(d1) ); + if ( d2.cmp(md) == 1 ) break; + d0 = d1; + d1 = d2; + n1 = n0.plus( q.times( d2 = n1 ) ); + n0 = d2; + d = n.minus( q.times( d2 = d ) ); + n = d2; + } + + d2 = div( md.minus(d0), d1, 0, 1 ); + n0 = n0.plus( d2.times(n1) ); + d0 = d0.plus( d2.times(d1) ); + n0.s = n1.s = x.s; + e *= 2; + + // Determine which fraction is closer to x, n0/d0 or n1/d1 + arr = div( n1, d1, e, ROUNDING_MODE ).minus(x).abs().cmp( + div( n0, d0, e, ROUNDING_MODE ).minus(x).abs() ) < 1 + ? [ n1.toString(), d1.toString() ] + : [ n0.toString(), d0.toString() ]; + + MAX_EXP = exp; + return arr; + }; + + + /* + * Return the value of this BigNumber converted to a number primitive. + */ + P.toNumber = function () { + var x = this; + + // Ensure zero has correct sign. + return +x || ( x.s ? x.s * 0 : NaN ); + }; + + + /* + * Return a BigNumber whose value is the value of this BigNumber raised to the power n. + * If n is negative round according to DECIMAL_PLACES and ROUNDING_MODE. + * If POW_PRECISION is not 0, round to POW_PRECISION using ROUNDING_MODE. + * + * n {number} Integer, -9007199254740992 to 9007199254740992 inclusive. + * (Performs 54 loop iterations for n of 9007199254740992.) + * + * 'pow() exponent not an integer: {n}' + * 'pow() exponent out of range: {n}' + */ + P.toPower = P.pow = function (n) { + var k, y, + i = mathfloor( n < 0 ? -n : +n ), + x = this; + + // Pass ±Infinity to Math.pow if exponent is out of range. + if ( !isValidInt( n, -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER, 23, 'exponent' ) && + ( !isFinite(n) || i > MAX_SAFE_INTEGER && ( n /= 0 ) || + parseFloat(n) != n && !( n = NaN ) ) ) { + return new BigNumber( Math.pow( +x, n ) ); + } + + // Truncating each coefficient array to a length of k after each multiplication equates + // to truncating significant digits to POW_PRECISION + [28, 41], i.e. there will be a + // minimum of 28 guard digits retained. (Using + 1.5 would give [9, 21] guard digits.) + k = POW_PRECISION ? mathceil( POW_PRECISION / LOG_BASE + 2 ) : 0; + y = new BigNumber(ONE); + + for ( ; ; ) { + + if ( i % 2 ) { + y = y.times(x); + if ( !y.c ) break; + if ( k && y.c.length > k ) y.c.length = k; + } + + i = mathfloor( i / 2 ); + if ( !i ) break; + + x = x.times(x); + if ( k && x.c && x.c.length > k ) x.c.length = k; + } + + if ( n < 0 ) y = ONE.div(y); + return k ? round( y, POW_PRECISION, ROUNDING_MODE ) : y; + }; + + + /* + * Return a string representing the value of this BigNumber rounded to sd significant digits + * using rounding mode rm or ROUNDING_MODE. If sd is less than the number of digits + * necessary to represent the integer part of the value in fixed-point notation, then use + * exponential notation. + * + * [sd] {number} Significant digits. Integer, 1 to MAX inclusive. + * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. + * + * 'toPrecision() precision not an integer: {sd}' + * 'toPrecision() precision out of range: {sd}' + * 'toPrecision() rounding mode not an integer: {rm}' + * 'toPrecision() rounding mode out of range: {rm}' + */ + P.toPrecision = function ( sd, rm ) { + return format( this, sd != null && isValidInt( sd, 1, MAX, 24, 'precision' ) + ? sd | 0 : null, rm, 24 ); + }; + + + /* + * Return a string representing the value of this BigNumber in base b, or base 10 if b is + * omitted. If a base is specified, including base 10, round according to DECIMAL_PLACES and + * ROUNDING_MODE. If a base is not specified, and this BigNumber has a positive exponent + * that is equal to or greater than TO_EXP_POS, or a negative exponent equal to or less than + * TO_EXP_NEG, return exponential notation. + * + * [b] {number} Integer, 2 to 64 inclusive. + * + * 'toString() base not an integer: {b}' + * 'toString() base out of range: {b}' + */ + P.toString = function (b) { + var str, + n = this, + s = n.s, + e = n.e; + + // Infinity or NaN? + if ( e === null ) { + + if (s) { + str = 'Infinity'; + if ( s < 0 ) str = '-' + str; + } else { + str = 'NaN'; + } + } else { + str = coeffToString( n.c ); + + if ( b == null || !isValidInt( b, 2, 64, 25, 'base' ) ) { + str = e <= TO_EXP_NEG || e >= TO_EXP_POS + ? toExponential( str, e ) + : toFixedPoint( str, e ); + } else { + str = convertBase( toFixedPoint( str, e ), b | 0, 10, s ); + } + + if ( s < 0 && n.c[0] ) str = '-' + str; + } + + return str; + }; + + + /* + * Return a new BigNumber whose value is the value of this BigNumber truncated to a whole + * number. + */ + P.truncated = P.trunc = function () { + return round( new BigNumber(this), this.e + 1, 1 ); + }; + + + + /* + * Return as toString, but do not accept a base argument. + */ + P.valueOf = P.toJSON = function () { + return this.toString(); + }; + + + // Aliases for BigDecimal methods. + //P.add = P.plus; // P.add included above + //P.subtract = P.minus; // P.sub included above + //P.multiply = P.times; // P.mul included above + //P.divide = P.div; + //P.remainder = P.mod; + //P.compareTo = P.cmp; + //P.negate = P.neg; + + + if ( configObj != null ) BigNumber.config(configObj); + + return BigNumber; + } + + + // PRIVATE HELPER FUNCTIONS + + + function bitFloor(n) { + var i = n | 0; + return n > 0 || n === i ? i : i - 1; + } + + + // Return a coefficient array as a string of base 10 digits. + function coeffToString(a) { + var s, z, + i = 1, + j = a.length, + r = a[0] + ''; + + for ( ; i < j; ) { + s = a[i++] + ''; + z = LOG_BASE - s.length; + for ( ; z--; s = '0' + s ); + r += s; + } + + // Determine trailing zeros. + for ( j = r.length; r.charCodeAt(--j) === 48; ); + return r.slice( 0, j + 1 || 1 ); + } + + + // Compare the value of BigNumbers x and y. + function compare( x, y ) { + var a, b, + xc = x.c, + yc = y.c, + i = x.s, + j = y.s, + k = x.e, + l = y.e; + + // Either NaN? + if ( !i || !j ) return null; + + a = xc && !xc[0]; + b = yc && !yc[0]; + + // Either zero? + if ( a || b ) return a ? b ? 0 : -j : i; + + // Signs differ? + if ( i != j ) return i; + + a = i < 0; + b = k == l; + + // Either Infinity? + if ( !xc || !yc ) return b ? 0 : !xc ^ a ? 1 : -1; + + // Compare exponents. + if ( !b ) return k > l ^ a ? 1 : -1; + + j = ( k = xc.length ) < ( l = yc.length ) ? k : l; + + // Compare digit by digit. + for ( i = 0; i < j; i++ ) if ( xc[i] != yc[i] ) return xc[i] > yc[i] ^ a ? 1 : -1; + + // Compare lengths. + return k == l ? 0 : k > l ^ a ? 1 : -1; + } + + + /* + * Return true if n is a valid number in range, otherwise false. + * Use for argument validation when ERRORS is false. + * Note: parseInt('1e+1') == 1 but parseFloat('1e+1') == 10. + */ + function intValidatorNoErrors( n, min, max ) { + return ( n = truncate(n) ) >= min && n <= max; + } + + + function isArray(obj) { + return Object.prototype.toString.call(obj) == '[object Array]'; + } + + + /* + * Convert string of baseIn to an array of numbers of baseOut. + * Eg. convertBase('255', 10, 16) returns [15, 15]. + * Eg. convertBase('ff', 16, 10) returns [2, 5, 5]. + */ + function toBaseOut( str, baseIn, baseOut ) { + var j, + arr = [0], + arrL, + i = 0, + len = str.length; + + for ( ; i < len; ) { + for ( arrL = arr.length; arrL--; arr[arrL] *= baseIn ); + arr[ j = 0 ] += ALPHABET.indexOf( str.charAt( i++ ) ); + + for ( ; j < arr.length; j++ ) { + + if ( arr[j] > baseOut - 1 ) { + if ( arr[j + 1] == null ) arr[j + 1] = 0; + arr[j + 1] += arr[j] / baseOut | 0; + arr[j] %= baseOut; + } + } + } + + return arr.reverse(); + } + + + function toExponential( str, e ) { + return ( str.length > 1 ? str.charAt(0) + '.' + str.slice(1) : str ) + + ( e < 0 ? 'e' : 'e+' ) + e; + } + + + function toFixedPoint( str, e ) { + var len, z; + + // Negative exponent? + if ( e < 0 ) { + + // Prepend zeros. + for ( z = '0.'; ++e; z += '0' ); + str = z + str; + + // Positive exponent + } else { + len = str.length; + + // Append zeros. + if ( ++e > len ) { + for ( z = '0', e -= len; --e; z += '0' ); + str += z; + } else if ( e < len ) { + str = str.slice( 0, e ) + '.' + str.slice(e); + } + } + + return str; + } + + + function truncate(n) { + n = parseFloat(n); + return n < 0 ? mathceil(n) : mathfloor(n); + } + + + // EXPORT + + + BigNumber = another(); + + // AMD. + if ( typeof define == 'function' && define.amd ) { + define( function () { return BigNumber; } ); + + // Node and other environments that support module.exports. + } else if ( typeof module != 'undefined' && module.exports ) { + module.exports = BigNumber; + if ( !crypto ) try { crypto = require('crypto'); } catch (e) {} + + // Browser. + } else { + global.BigNumber = BigNumber; + } +})(this); + +},{"crypto":32}],"web3":[function(require,module,exports){ var web3 = require('./lib/web3'); web3.providers.HttpProvider = require('./lib/web3/httpprovider'); web3.providers.QtSyncProvider = require('./lib/web3/qtsync'); @@ -5684,8 +8517,6 @@ if (typeof window !== 'undefined' && typeof window.web3 === 'undefined') { module.exports = web3; -},{"./lib/web3":9,"./lib/web3/contract":11,"./lib/web3/httpprovider":19,"./lib/web3/namereg":23,"./lib/web3/qtsync":26,"./lib/web3/transfer":29}]},{},["web3"]) - - -//# sourceMappingURL=web3-light.js.map +},{"./lib/web3":9,"./lib/web3/contract":12,"./lib/web3/httpprovider":20,"./lib/web3/namereg":24,"./lib/web3/qtsync":27,"./lib/web3/transfer":30}]},{},["web3"]) +//# sourceMappingURL=web3.js.map ` \ No newline at end of file From 0e33fbdcb9769245f79f76e416f74ac50f51c4ab Mon Sep 17 00:00:00 2001 From: Jeffrey Wilcke <geffobscura@gmail.com> Date: Fri, 3 Jul 2015 17:21:23 +0200 Subject: [PATCH 156/156] miner: ignore future errors --- miner/worker.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/miner/worker.go b/miner/worker.go index a23b663f9c..1c1e8f9271 100644 --- a/miner/worker.go +++ b/miner/worker.go @@ -240,7 +240,7 @@ func (self *worker) wait() { glog.V(logger.Error).Infoln("Invalid block found during mining") continue } - if err := core.ValidateHeader(self.eth.BlockProcessor().Pow, block.Header(), parent, true); err != nil { + if err := core.ValidateHeader(self.eth.BlockProcessor().Pow, block.Header(), parent, true); err != nil && err != core.BlockFutureErr { glog.V(logger.Error).Infoln("Invalid header on mined block:", err) continue }

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